[Pkg-cli-apps-commits] [SCM] f-spot branch, upstream, updated. upstream/0.6.2-1-g9a59cac
Iain Lane
laney at ubuntu.com
Thu Jun 17 09:26:58 UTC 2010
The following commit has been merged in the upstream branch:
commit 9a59cac4013b4c06f2bd3f69df0825dbd26be8f8
Author: Iain Lane <laney at ubuntu.com>
Date: Wed Jun 16 20:41:45 2010 +0100
Imported Upstream version 0.7.0
diff --git a/MAINTAINERS b/MAINTAINERS
index e90fa5e..9a57814 100644
--- a/MAINTAINERS
+++ b/MAINTAINERS
@@ -1,3 +1,7 @@
+Ruben Vermeersch
+E-mail: ruben at savanne.be
+Userid: rubenv
+
Larry Ewing
E-mail: lewing at novell.com
Userid: lewing
diff --git a/Makefile.addins b/Makefile.addins
deleted file mode 100644
index bcf3727..0000000
--- a/Makefile.addins
+++ /dev/null
@@ -1,45 +0,0 @@
-ASSEMBLY = $(addin).dll
-
-include $(top_srcdir)/Makefile.include
-
-dep_resources = $(addprefix $(srcdir)/, $(addin_resources))
-build_resources = $(foreach res, $(dep_resources), $(addprefix -resource:, $(res)),$(notdir $(res)))
-build_sources = $(addprefix $(srcdir)/, $(addin_sources))
-build_packages = \
- $(addprefix -pkg:, $(addin_packages)) \
- -pkg:mono-addins
-
-build_references = \
- $(addprefix -r:, $(addin_references)) \
- -r:$(top_builddir)/src/f-spot.exe \
- -r:$(top_builddir)/src/Cms.dll \
- -r:$(top_builddir)/src/FSpot.Core.dll \
- -r:$(top_builddir)/src/FSpot.Platform.dll \
- -r:$(top_builddir)/src/FSpot.Query.dll \
- -r:$(top_builddir)/src/FSpot.Utils.dll \
- -r:$(top_builddir)/src/FSpot.Widgets.dll \
- $(LINK_SEMWEB) \
- $(LINK_GPHOTO2) \
- $(LINK_GIOSHARP) \
- $(LINK_UNIQUESHARP) \
- $(LINK_GTKSHARPBEANS)
-
-
-mpack: $(ASSEMBLY)
- mautil p $(ASSEMBLY)
-
-addin_SOURCES = \
- $(build_sources)
-
-$(ASSEMBLY): $(addin_SOURCES) $(dep_resources)
- $(CSC_LIB) -out:$@ $(addin_extraflags) $(build_sources) $(build_references) $(build_packages) $(build_resources)
-
-addindir = $(pkglibdir)/extensions
-addin_DATA = $(ASSEMBLY)
-
-CLEANFILES = $(ASSEMBLY) $(ASSEMBLY).mdb *.mpack
-
-EXTRA_DIST = \
- $(build_sources) \
- $(dep_resources) \
- $(addin_extradist)
diff --git a/Makefile.am b/Makefile.am
index b44eff5..7a5c94e 100644
--- a/Makefile.am
+++ b/Makefile.am
@@ -1,7 +1,9 @@
SUBDIRS = \
build \
+ data \
lib \
docs \
+ help \
icons \
tools \
po \
@@ -9,75 +11,46 @@ SUBDIRS = \
extensions \
tests
-desktop_in_files= \
- f-spot.desktop.in \
- f-spot-view.desktop.in \
- f-spot-import.desktop.in
-
-desktop_files=$(desktop_in_files:.desktop.in=.desktop)
- at INTLTOOL_DESKTOP_RULE@
-
-pkgconfigdir = $(libdir)/pkgconfig
-pkgconfig_DATA = f-spot.pc
-
schemadir = $(sysconfdir)/gconf/schemas
schema_in_files = f-spot.schemas.in
schema_DATA = $(schema_in_files:.schemas.in=.schemas)
@INTLTOOL_SCHEMAS_RULE@
-Applicationsdir = $(datadir)/applications
-Applications_DATA = $(desktop_files)
-
CLEANFILES = \
- $(desktop_DATA) \
$(schema_DATA) \
intltool-extract \
intltool-update \
intltool-merge
EXTRA_DIST = \
- MAINTAINERS \
+ COPYING \
+ MAINTAINERS \
intltool-extract.in \
intltool-merge.in \
intltool-update.in \
- f-spot.pc.in \
- f-spot.spec \
Makefile.include \
- Makefile.addins \
gnome-doc-utils.make \
icon-theme-installer \
- $(schema_in_files) \
- $(desktop_in_files) \
- $(desktop_files)
+ $(schema_in_files)
DISTCLEANFILES = \
- intltool-extract \
- intltool-merge \
- intltool-update \
- gnome-doc-utils.make \
- $(desktop_files)
+ intltool-extract \
+ intltool-merge \
+ intltool-update \
+ gnome-doc-utils.make
DISTCHECK_CONFIGURE_FLAGS = --disable-scrollkeeper
-UPDATE_DESKTOP = \
- if [ -f $(DESTDIR)$(datadir)/applications/defaults.list ] ; then \
- if which update-desktop-database>/dev/null 2>&1 ; then \
- update-desktop-database; \
- fi \
- fi
-
install-data-local:
-GCONF_CONFIG_SOURCE=$(GCONF_SCHEMA_CONFIG_SOURCE) $(GCONFTOOL) --makefile-install-rule $(srcdir)/$(schema_DATA)
-install-data-hook:
- $(UPDATE_DESKTOP)
+run:
+ @pushd bin/; \
+ ../src/f-spot --uninstalled --debug; \
+ popd;
-uninstall-hook:
- $(UPDATE_DESKTOP)
-if ENABLE_TESTS
test:
- @pushd tests/src/; \
- make test; \
+ @pushd tests; \
+ make test \
popd;
-endif
diff --git a/Makefile.in b/Makefile.in
index 0466ca1..80c63ec 100644
--- a/Makefile.in
+++ b/Makefile.in
@@ -37,20 +37,21 @@ host_triplet = @host@
subdir = .
DIST_COMMON = README $(am__configure_deps) $(srcdir)/Makefile.am \
$(srcdir)/Makefile.in $(srcdir)/config.h.in \
- $(srcdir)/f-spot-import.desktop.in.in \
- $(srcdir)/f-spot-view.desktop.in.in \
- $(srcdir)/f-spot.desktop.in.in $(srcdir)/f-spot.pc.in \
- $(srcdir)/f-spot.spec.in \
$(top_srcdir)/build/m4/shave/shave-libtool.in \
$(top_srcdir)/build/m4/shave/shave.in $(top_srcdir)/configure \
- $(top_srcdir)/src/Core/Defines.cs.in AUTHORS COPYING ChangeLog \
- NEWS TODO config.guess config.sub depcomp install-sh ltmain.sh \
- missing
+ AUTHORS COPYING ChangeLog NEWS TODO config.guess config.sub \
+ depcomp install-sh ltmain.sh missing
ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
am__aclocal_m4_deps = $(top_srcdir)/build/m4/shave/shave.m4 \
$(top_srcdir)/build/m4/shamrock/expansions.m4 \
+ $(top_srcdir)/build/m4/shamrock/gnome-doc.m4 \
$(top_srcdir)/build/m4/shamrock/mono.m4 \
+ $(top_srcdir)/build/m4/shamrock/nunit.m4 \
$(top_srcdir)/build/m4/shamrock/programs.m4 \
+ $(top_srcdir)/build/m4/f-spot/flickrnet.m4 \
+ $(top_srcdir)/build/m4/f-spot/gnome-keyring-sharp.m4 \
+ $(top_srcdir)/build/m4/f-spot/gtk-sharp.m4 \
+ $(top_srcdir)/build/m4/f-spot/mono-addins.m4 \
$(top_srcdir)/acinclude.m4 $(top_srcdir)/configure.ac
am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
$(ACLOCAL_M4)
@@ -58,9 +59,7 @@ am__CONFIG_DISTCLEAN_FILES = config.status config.cache config.log \
configure.lineno config.status.lineno
mkinstalldirs = $(install_sh) -d
CONFIG_HEADER = config.h
-CONFIG_CLEAN_FILES = build/m4/shave/shave build/m4/shave/shave-libtool \
- src/Core/Defines.cs f-spot.pc f-spot.spec f-spot.desktop.in \
- f-spot-view.desktop.in f-spot-import.desktop.in
+CONFIG_CLEAN_FILES = build/m4/shave/shave build/m4/shave/shave-libtool
CONFIG_CLEAN_VPATH_FILES =
SOURCES =
DIST_SOURCES =
@@ -92,9 +91,8 @@ am__nobase_list = $(am__nobase_strip_setup); \
am__base_list = \
sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \
sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g'
-am__installdirs = "$(DESTDIR)$(Applicationsdir)" \
- "$(DESTDIR)$(pkgconfigdir)" "$(DESTDIR)$(schemadir)"
-DATA = $(Applications_DATA) $(pkgconfig_DATA) $(schema_DATA)
+am__installdirs = "$(DESTDIR)$(schemadir)"
+DATA = $(schema_DATA)
RECURSIVE_CLEAN_TARGETS = mostlyclean-recursive clean-recursive \
distclean-recursive maintainer-clean-recursive
AM_RECURSIVE_TARGETS = $(RECURSIVE_TARGETS:-recursive=) \
@@ -183,6 +181,8 @@ EXIF_SOVERSION = @EXIF_SOVERSION@
F77 = @F77@
FC = @FC@
FGREP = @FGREP@
+FLICKRNET_CFLAGS = @FLICKRNET_CFLAGS@
+FLICKRNET_LIBS = @FLICKRNET_LIBS@
F_CFLAGS = @F_CFLAGS@
F_LIBS = @F_LIBS@
GAPI2CODEGEN = @GAPI2CODEGEN@
@@ -196,6 +196,8 @@ GCONF_SHARP_LIBS = @GCONF_SHARP_LIBS@
GETTEXT_PACKAGE = @GETTEXT_PACKAGE@
GIO_CFLAGS = @GIO_CFLAGS@
GIO_LIBS = @GIO_LIBS@
+GLIBSHARP_2_12_7_CFLAGS = @GLIBSHARP_2_12_7_CFLAGS@
+GLIBSHARP_2_12_7_LIBS = @GLIBSHARP_2_12_7_LIBS@
GLIBSHARP_CFLAGS = @GLIBSHARP_CFLAGS@
GLIBSHARP_LIBS = @GLIBSHARP_LIBS@
GLIB_CFLAGS = @GLIB_CFLAGS@
@@ -211,6 +213,10 @@ GNOME_SHARP_CFLAGS = @GNOME_SHARP_CFLAGS@
GNOME_SHARP_LIBS = @GNOME_SHARP_LIBS@
GOBJECT_QUERY = @GOBJECT_QUERY@
GREP = @GREP@
+GTKSHARP_A11Y_CFLAGS = @GTKSHARP_A11Y_CFLAGS@
+GTKSHARP_A11Y_LIBS = @GTKSHARP_A11Y_LIBS@
+GTKSHARP_CFLAGS = @GTKSHARP_CFLAGS@
+GTKSHARP_LIBS = @GTKSHARP_LIBS@
HELP_DIR = @HELP_DIR@
ICONS_DIRECTORY = @ICONS_DIRECTORY@
INSTALL = @INSTALL@
@@ -224,14 +230,14 @@ INTLTOOL_EXTRACT = @INTLTOOL_EXTRACT@
INTLTOOL_MERGE = @INTLTOOL_MERGE@
INTLTOOL_PERL = @INTLTOOL_PERL@
INTLTOOL_UPDATE = @INTLTOOL_UPDATE@
+KEYRINGSHARP_CFLAGS = @KEYRINGSHARP_CFLAGS@
+KEYRINGSHARP_LIBS = @KEYRINGSHARP_LIBS@
LCMS_CFLAGS = @LCMS_CFLAGS@
LCMS_LIBS = @LCMS_LIBS@
LD = @LD@
LDFLAGS = @LDFLAGS@
LIBEXIF_VERSION_CHECK_CFLAGS = @LIBEXIF_VERSION_CHECK_CFLAGS@
LIBEXIF_VERSION_CHECK_LIBS = @LIBEXIF_VERSION_CHECK_LIBS@
-LIBGPHOTO2_CFLAGS = @LIBGPHOTO2_CFLAGS@
-LIBGPHOTO2_LIBS = @LIBGPHOTO2_LIBS@
LIBJPEG = @LIBJPEG@
LIBOBJS = @LIBOBJS@
LIBS = @LIBS@
@@ -246,6 +252,12 @@ MCS = @MCS@
MKDIR_P = @MKDIR_P@
MKINSTALLDIRS = @MKINSTALLDIRS@
MONO = @MONO@
+MONO_ADDINS_CFLAGS = @MONO_ADDINS_CFLAGS@
+MONO_ADDINS_GUI_CFLAGS = @MONO_ADDINS_GUI_CFLAGS@
+MONO_ADDINS_GUI_LIBS = @MONO_ADDINS_GUI_LIBS@
+MONO_ADDINS_LIBS = @MONO_ADDINS_LIBS@
+MONO_ADDINS_SETUP_CFLAGS = @MONO_ADDINS_SETUP_CFLAGS@
+MONO_ADDINS_SETUP_LIBS = @MONO_ADDINS_SETUP_LIBS@
MONO_MODULE_CFLAGS = @MONO_MODULE_CFLAGS@
MONO_MODULE_LIBS = @MONO_MODULE_LIBS@
MSGFMT = @MSGFMT@
@@ -256,7 +268,6 @@ NDESK_DBUS_LIBS = @NDESK_DBUS_LIBS@
NM = @NM@
NMEDIT = @NMEDIT@
NUNIT_CFLAGS = @NUNIT_CFLAGS@
-NUNIT_DEFINES = @NUNIT_DEFINES@
NUNIT_LIBS = @NUNIT_LIBS@
OBJC = @OBJC@
OBJDUMP = @OBJDUMP@
@@ -350,8 +361,10 @@ top_builddir = @top_builddir@
top_srcdir = @top_srcdir@
SUBDIRS = \
build \
+ data \
lib \
docs \
+ help \
icons \
tools \
po \
@@ -359,54 +372,31 @@ SUBDIRS = \
extensions \
tests
-desktop_in_files = \
- f-spot.desktop.in \
- f-spot-view.desktop.in \
- f-spot-import.desktop.in
-
-desktop_files = $(desktop_in_files:.desktop.in=.desktop)
-pkgconfigdir = $(libdir)/pkgconfig
-pkgconfig_DATA = f-spot.pc
schemadir = $(sysconfdir)/gconf/schemas
schema_in_files = f-spot.schemas.in
schema_DATA = $(schema_in_files:.schemas.in=.schemas)
-Applicationsdir = $(datadir)/applications
-Applications_DATA = $(desktop_files)
CLEANFILES = \
- $(desktop_DATA) \
$(schema_DATA) \
intltool-extract \
intltool-update \
intltool-merge
EXTRA_DIST = \
- MAINTAINERS \
+ COPYING \
+ MAINTAINERS \
intltool-extract.in \
intltool-merge.in \
intltool-update.in \
- f-spot.pc.in \
- f-spot.spec \
Makefile.include \
- Makefile.addins \
gnome-doc-utils.make \
icon-theme-installer \
- $(schema_in_files) \
- $(desktop_in_files) \
- $(desktop_files)
+ $(schema_in_files)
DISTCLEANFILES = \
- intltool-extract \
- intltool-merge \
- intltool-update \
- gnome-doc-utils.make \
- $(desktop_files)
-
-UPDATE_DESKTOP = \
- if [ -f $(DESTDIR)$(datadir)/applications/defaults.list ] ; then \
- if which update-desktop-database>/dev/null 2>&1 ; then \
- update-desktop-database; \
- fi \
- fi
+ intltool-extract \
+ intltool-merge \
+ intltool-update \
+ gnome-doc-utils.make
all: config.h
$(MAKE) $(AM_MAKEFLAGS) all-recursive
@@ -467,18 +457,6 @@ build/m4/shave/shave: $(top_builddir)/config.status $(top_srcdir)/build/m4/shave
cd $(top_builddir) && $(SHELL) ./config.status $@
build/m4/shave/shave-libtool: $(top_builddir)/config.status $(top_srcdir)/build/m4/shave/shave-libtool.in
cd $(top_builddir) && $(SHELL) ./config.status $@
-src/Core/Defines.cs: $(top_builddir)/config.status $(top_srcdir)/src/Core/Defines.cs.in
- cd $(top_builddir) && $(SHELL) ./config.status $@
-f-spot.pc: $(top_builddir)/config.status $(srcdir)/f-spot.pc.in
- cd $(top_builddir) && $(SHELL) ./config.status $@
-f-spot.spec: $(top_builddir)/config.status $(srcdir)/f-spot.spec.in
- cd $(top_builddir) && $(SHELL) ./config.status $@
-f-spot.desktop.in: $(top_builddir)/config.status $(srcdir)/f-spot.desktop.in.in
- cd $(top_builddir) && $(SHELL) ./config.status $@
-f-spot-view.desktop.in: $(top_builddir)/config.status $(srcdir)/f-spot-view.desktop.in.in
- cd $(top_builddir) && $(SHELL) ./config.status $@
-f-spot-import.desktop.in: $(top_builddir)/config.status $(srcdir)/f-spot-import.desktop.in.in
- cd $(top_builddir) && $(SHELL) ./config.status $@
mostlyclean-libtool:
-rm -f *.lo
@@ -488,46 +466,6 @@ clean-libtool:
distclean-libtool:
-rm -f libtool config.lt
-install-ApplicationsDATA: $(Applications_DATA)
- @$(NORMAL_INSTALL)
- test -z "$(Applicationsdir)" || $(MKDIR_P) "$(DESTDIR)$(Applicationsdir)"
- @list='$(Applications_DATA)'; test -n "$(Applicationsdir)" || list=; \
- for p in $$list; do \
- if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \
- echo "$$d$$p"; \
- done | $(am__base_list) | \
- while read files; do \
- echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(Applicationsdir)'"; \
- $(INSTALL_DATA) $$files "$(DESTDIR)$(Applicationsdir)" || exit $$?; \
- done
-
-uninstall-ApplicationsDATA:
- @$(NORMAL_UNINSTALL)
- @list='$(Applications_DATA)'; test -n "$(Applicationsdir)" || list=; \
- files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \
- test -n "$$files" || exit 0; \
- echo " ( cd '$(DESTDIR)$(Applicationsdir)' && rm -f" $$files ")"; \
- cd "$(DESTDIR)$(Applicationsdir)" && rm -f $$files
-install-pkgconfigDATA: $(pkgconfig_DATA)
- @$(NORMAL_INSTALL)
- test -z "$(pkgconfigdir)" || $(MKDIR_P) "$(DESTDIR)$(pkgconfigdir)"
- @list='$(pkgconfig_DATA)'; test -n "$(pkgconfigdir)" || list=; \
- for p in $$list; do \
- if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \
- echo "$$d$$p"; \
- done | $(am__base_list) | \
- while read files; do \
- echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(pkgconfigdir)'"; \
- $(INSTALL_DATA) $$files "$(DESTDIR)$(pkgconfigdir)" || exit $$?; \
- done
-
-uninstall-pkgconfigDATA:
- @$(NORMAL_UNINSTALL)
- @list='$(pkgconfig_DATA)'; test -n "$(pkgconfigdir)" || list=; \
- files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \
- test -n "$$files" || exit 0; \
- echo " ( cd '$(DESTDIR)$(pkgconfigdir)' && rm -f" $$files ")"; \
- cd "$(DESTDIR)$(pkgconfigdir)" && rm -f $$files
install-schemaDATA: $(schema_DATA)
@$(NORMAL_INSTALL)
test -z "$(schemadir)" || $(MKDIR_P) "$(DESTDIR)$(schemadir)"
@@ -865,7 +803,7 @@ check: check-recursive
all-am: Makefile $(DATA) config.h
installdirs: installdirs-recursive
installdirs-am:
- for dir in "$(DESTDIR)$(Applicationsdir)" "$(DESTDIR)$(pkgconfigdir)" "$(DESTDIR)$(schemadir)"; do \
+ for dir in "$(DESTDIR)$(schemadir)"; do \
test -z "$$dir" || $(MKDIR_P) "$$dir"; \
done
install: install-recursive
@@ -917,10 +855,8 @@ info: info-recursive
info-am:
-install-data-am: install-ApplicationsDATA install-data-local \
- install-pkgconfigDATA install-schemaDATA
- @$(NORMAL_INSTALL)
- $(MAKE) $(AM_MAKEFLAGS) install-data-hook
+install-data-am: install-data-local install-schemaDATA
+
install-dvi: install-dvi-recursive
install-dvi-am:
@@ -965,13 +901,10 @@ ps: ps-recursive
ps-am:
-uninstall-am: uninstall-ApplicationsDATA uninstall-pkgconfigDATA \
- uninstall-schemaDATA
- @$(NORMAL_INSTALL)
- $(MAKE) $(AM_MAKEFLAGS) uninstall-hook
+uninstall-am: uninstall-schemaDATA
+
.MAKE: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) all \
- ctags-recursive install-am install-data-am install-strip \
- tags-recursive uninstall-am
+ ctags-recursive install-am install-strip tags-recursive
.PHONY: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) CTAGS GTAGS \
all all-am am--refresh check check-am clean clean-generic \
@@ -980,35 +913,31 @@ uninstall-am: uninstall-ApplicationsDATA uninstall-pkgconfigDATA \
distcheck distclean distclean-generic distclean-hdr \
distclean-libtool distclean-tags distcleancheck distdir \
distuninstallcheck dvi dvi-am html html-am info info-am \
- install install-ApplicationsDATA install-am install-data \
- install-data-am install-data-hook install-data-local \
- 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-pkgconfigDATA \
+ install install-am install-data install-data-am \
+ install-data-local 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-schemaDATA install-strip \
installcheck installcheck-am installdirs installdirs-am \
maintainer-clean maintainer-clean-generic mostlyclean \
mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \
- tags tags-recursive uninstall uninstall-ApplicationsDATA \
- uninstall-am uninstall-hook uninstall-pkgconfigDATA \
+ tags tags-recursive uninstall uninstall-am \
uninstall-schemaDATA
- at INTLTOOL_DESKTOP_RULE@
@INTLTOOL_SCHEMAS_RULE@
install-data-local:
-GCONF_CONFIG_SOURCE=$(GCONF_SCHEMA_CONFIG_SOURCE) $(GCONFTOOL) --makefile-install-rule $(srcdir)/$(schema_DATA)
-install-data-hook:
- $(UPDATE_DESKTOP)
-
-uninstall-hook:
- $(UPDATE_DESKTOP)
+run:
+ @pushd bin/; \
+ ../src/f-spot --uninstalled --debug; \
+ popd;
- at ENABLE_TESTS_TRUE@test:
- at ENABLE_TESTS_TRUE@ @pushd tests/src/; \
- at ENABLE_TESTS_TRUE@ make test; \
- at ENABLE_TESTS_TRUE@ popd;
+test:
+ @pushd tests; \
+ make test \
+ popd;
# 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/Makefile.include b/Makefile.include
index 4e0ec9a..fda2227 100644
--- a/Makefile.include
+++ b/Makefile.include
@@ -1,29 +1,16 @@
-## Makefile.include
-## FSpot wide helper
-
-## Directories
-
-DIR_DOCS = $(top_builddir)/docs
-DIR_EXTENSIONS = $(top_builddir)/extensions
-DIR_GPHOTO2 = $(top_builddir)/lib/libgphoto2-sharp
-DIR_ICONS = $(top_builddir)/icons
-DIR_JPEGTRAN = $(top_builddir)/lib/libjpegtran
-DIR_KEYRING = $(top_builddir)/lib/gnome-keyring-sharp
-DIR_LIBFSPOT = $(top_builddir)/lib/libfspot
-DIR_SEMWEB = $(top_builddir)/lib/semweb
-DIR_SRC = $(top_builddir)/src
+# Makefile.include
+# FSpot wide helper
+
+# Directories
+
DIR_GIOSHARP = $(top_builddir)/lib/gio-sharp/gio
-DIR_GTKSHARPBEANS = $(top_builddir)/lib/gtk-sharp-beans
-DIR_UNIQUESHARP = $(top_builddir)/lib/unique-sharp/unique
+
## Links
-LINK_KEYRING = -r:$(DIR_KEYRING)/gnome-keyring-sharp.dll
-LINK_GPHOTO2 = -r:$(DIR_GPHOTO2)/libgphoto2-sharp.dll
-LINK_SEMWEB = -r:$(DIR_SEMWEB)/SemWeb.dll
LINK_GIOSHARP = -r:$(DIR_GIOSHARP)/gio-sharp.dll
-LINK_GTKSHARPBEANS = -r:$(DIR_GTKSHARPBEANS)/gtk-sharp-beans.dll
-LINK_UNIQUESHARP = -r:$(DIR_UNIQUESHARP)/unique-sharp.dll
+
+
## Build
diff --git a/NEWS b/NEWS
index 6dda354..782a0c4 100644
--- a/NEWS
+++ b/NEWS
@@ -1,3 +1,22 @@
+f-spot 0.7.0 - Jun 16 2010 - Full Steam Ahead!
+----------------------------------------------
+- First release of the unstable 0.7 development series. Massive changes.
+ - Reparenting and detaching support (Anton Keks)
+ - A new Mallard-based documentation (Harold Schreckengost)
+ - No longer embeds flickrnet, uses distribution copy (Iain Lane)
+ - Adoption of a large amount of Hyena functionality (Paul Lange, Peter Goetz)
+ - No longer embeds gnome-keyring-sharp
+ - Completely rewritten import, much faster and less memory hungry (Ruben Vermeersch)
+ - No longer use gphoto2-sharp, now uses gvfs which is less crash-pron (Ruben Vermeersch)
+ - Fix Facebook support (Ruben Vermeersch)
+ - Modernized unit tests
+ - Revamped build (Mike Gemünde)
+ - Much improved duplicate detection (much faster too) (Ruben Vermeersch)
+ - Mouse selection in Iconview (Vincent Pomey)
+ - Image panning support using middle mouse button (Wojciech Dzierżanowski)
+ - Timeline slider now restricted to the size of the window (Iain Churcher)
+ - Over 100 bugs closed (http://bit.ly/cyVjnD)
+
f-spot 0.6.2 - May 14 2010 - Bulldozer Time
-------------------------------------------
- Stable release before starting large cleanup refactorings, mostly usability,
diff --git a/README b/README
index fa6d1b9..4bf841f 100644
--- a/README
+++ b/README
@@ -6,9 +6,9 @@ Requirements:
- GNOME development libraries 2.4 or later,
http://www.gnome.org
- - Mono 1.1.7 or later, http://www.go-mono.net
+ - Mono 2.2 or later, http://www.go-mono.net
- - gtk-sharp 2.10 or later, http://www.go-mono.net
+ - gtk-sharp 2.12.2 or later, http://www.go-mono.net
- libexif 0.5.7 to 0.7.0, http://libexif.sourceforge.net
@@ -16,8 +16,6 @@ Requirements:
- liblcms 1.12 or later, http://www.littlecms.com/
- - libgphoto2 2.1.4 or later, http://www.gphoto.org
-
- hicolor-icon-theme 0.10 or later, http://icon-theme.freedesktop.org/wiki/HicolorTheme
To compile, just go through the normal autogen/configure stuff and
diff --git a/TODO b/TODO
index 2114860..0eb944f 100644
--- a/TODO
+++ b/TODO
@@ -1,119 +1,2 @@
-General:
- * The current EXIF display is too EXIF specific and extremely
- dull, The layout needs to be redone and the the Items should be
- ordered by relative importance. A reduced view should replace
- the current info box on the side panel.
- * The info display should show all the metadata we know about at
- any given time Currently this means it should also display XMP
- chunks in jpegs.
- * Add basic simple file management. Integrate this with dragging
- in the IconView to allow for moving between directories.
- * Add a folder view pane that lets you see the layout of the
- folders with images in them.
- * Add click to tag mode in the tag assignment. This should be act
- like an editing mode where the cursor changes to an icon of the
- tag and ever image you click gets that tag applied.
- * Support for import/playing/tracking DCF sound files should be
- added. These files are recorded at the same time as the image
- and named according to the digital camera file system
- specification.
- * Add a dbus service so that things like importing can be run
- separately from the command line or another app and communicate
- with a running f-spot.
-
-Searching:
- * Add a time range slider next to the text search to allow simple
- limiting of the how far back to search remove the old time based
- search.
-
-Timeline:
- * Fix the limits so that they don't scroll off screen but scroll
- onto a resting zone instead.
-
-Image View:
- * Add a histogram overlay. The current histogram can basically
- work the way it is a slight widget wrapper.
- * The comment entry currently takes up too much space when it
- isn't being used. It should be made simple to show/hide it and
- perhaps implemented as an overlay box.
- * Change the selection display type to use the darkening effect
- the gimp uses not the current XOR drawing.
- * Garrett has done mock-ups of the full-screen mode that should be
- analyzed and implemented. They will probably end up using some
- of the overlay support created for the the histogram and comment
- work.
-
-Editing:
- * Move the current editing effects into the side pane and spit it
- several into functional groups. The Picassa interface appears
- to be a good model to follow for the inline dialogs and it is
- similar to how album works. This will also allow us to leave
- selection off in the PhotoView normally which will make Some
- people happy. Miguel has a proof of concept patch that starts
- this process.
- * Define an effects interface that plug-ins can implement and be
- loaded into the new pane.
- * Enhance the current color editor to allow for more control over
- the adjustment curve. LCMS supports creation of a lot more
- complex abstract profiles than we are currently using. Adding
- something like shadow and highlight sliders should take a
- relatively small amount of work.
- * Add preset adjustment profiles for different lighting scenarios.
- Daylight/Incandescent/Fluorescent etc. I think it should be
- possible to build the profile with some sliders then save it
- with lcms to be loaded later as a preset.
- * Add brightness/contrast auto-correction. The gimp plug-ins are
- a good source for this. Pick some good ones and implment them
- as pluggable effects.
-
-Raw Photos: (this is broken down into a bit of a progression)
- * Implement 16bit scaling code. Move the current Editing logic
- from operating directly on pixbufs to operating on our own
- internal object that supports deep images and pixbufs (and
- metadata). It should also be possible to clean up use of the
- Pixbuf utility class here.
- * Eventually it we should use the new image objects in a managed
- replacement of the current image view and do color correction on
- the fly in the image view code. Hopefully we can count on it
- being fast enough to do real time.
- * Support loading and saving of 16bit png and tiff/DNF files.
-
-Icon View:
- * Add grouping display. This can be based on the same information
- the GroupSelector uses but it should be displayed as bar inline
- in the IconView.
-
-Import:
- * Fix the UI for both directory and camera import. Allow the user
- to specify A batch description, camera type, photographer and
- copyright setting. It would be nice to have An All rights
- reserved and the various creative commons options there already.
- * On initial startup do a search for all the images on the
- machine, either using beagle or locate or simple directory
- watching.
- * Watch directories we've already imported from for new files
- (using inotify?) and offer the ability to add them as they show
- up.
-
-Export:
-
-Metadata:
- * Store all the operations we apply to an image in the image
- metadata. This includes export/import/editing. This should
- include a specification about what types we know about and
- preferably be able to be serialized as RDF in an XMP file.
- * Allow metadata export as XMP. We should be able to save all the
- metadata we are carrying as an XMP file externally and in the
- JPEG. The current save jpeg code can support saveing multiple
- JPEG markers.
- * Sync up the metadata description with whatever beagle decides to
- standardize on. Ideally we can attack the format along with the
- beagle crew and standardize on how we describe the f-spot tuples
- for import, export and editing.
- * Cope with images no longer on disc using stored metadata and
- beagle searches to replace missing images. Prompt for CD
- insertion, display web image, find files that were moved outside
- of f-spot.
- * Finish the managed tiff/EXIF parser.
-
-Printing:
+Come talk to us on IRC or the mailing list. F-Spot is a very fast moving
+project!
diff --git a/aclocal.m4 b/aclocal.m4
index f929493..fddf708 100644
--- a/aclocal.m4
+++ b/aclocal.m4
@@ -10240,6 +10240,12 @@ fi])
m4_include([build/m4/shave/shave.m4])
m4_include([build/m4/shamrock/expansions.m4])
+m4_include([build/m4/shamrock/gnome-doc.m4])
m4_include([build/m4/shamrock/mono.m4])
+m4_include([build/m4/shamrock/nunit.m4])
m4_include([build/m4/shamrock/programs.m4])
+m4_include([build/m4/f-spot/flickrnet.m4])
+m4_include([build/m4/f-spot/gnome-keyring-sharp.m4])
+m4_include([build/m4/f-spot/gtk-sharp.m4])
+m4_include([build/m4/f-spot/mono-addins.m4])
m4_include([acinclude.m4])
diff --git a/build/DllMapVerifier.cs b/build/DllMapVerifier.cs
new file mode 100644
index 0000000..9acccb6
--- /dev/null
+++ b/build/DllMapVerifier.cs
@@ -0,0 +1,258 @@
+using System;
+using System.IO;
+using System.Xml;
+using System.Text;
+using System.Collections.Generic;
+
+public static class DllMapVerifier
+{
+ private struct DllImportRef
+ {
+ public DllImportRef (string name, int line, int column)
+ {
+ Name = name;
+ Line = line;
+ Column = column;
+ }
+
+ public string Name;
+ public int Line;
+ public int Column;
+ }
+
+ private static Dictionary<string, List<DllImportRef>> dll_imports
+ = new Dictionary<string, List<DllImportRef>> ();
+ private static List<string> ignore_dlls = new List<string> ();
+ private static List<string> config_dlls = null;
+
+ public static int Main (string [] args)
+ {
+ LoadConfigDlls (args[0]);
+ foreach (string file in args) {
+ LoadDllImports (file);
+ }
+
+ return VerifyDllImports (args[0]) ? 0 : 1;
+ }
+
+ private static bool VerifyDllImports (string configFile)
+ {
+ int total_unmapped_count = 0;
+
+ foreach (KeyValuePair<string, List<DllImportRef>> dll_import in dll_imports) {
+ int file_unmapped_count = 0;
+ foreach (DllImportRef dll_import_ref in dll_import.Value) {
+ if (config_dlls != null && config_dlls.Contains (dll_import_ref.Name)) {
+ continue;
+ }
+
+ if (file_unmapped_count++ == 0) {
+ Console.Error.WriteLine ("Unmapped DLLs in file: {0}", dll_import.Key);
+ }
+
+ Console.Error.WriteLine (" + {0} : {1},{2}", dll_import_ref.Name,
+ dll_import_ref.Line, dll_import_ref.Column);
+ }
+
+ total_unmapped_count += file_unmapped_count;
+ }
+
+ if (total_unmapped_count > 0) {
+ Console.Error.WriteLine ();
+ Console.Error.WriteLine (" If any DllImport above is explicitly allowed to be unmapped,");
+ Console.Error.WriteLine (" add an 'willfully unmapped' comment to the inside of the attribute:");
+ Console.Error.WriteLine ();
+ Console.Error.WriteLine (" [DllImport (\"libX11.so.6\") /* willfully unmapped */]");
+ Console.Error.WriteLine ();
+ }
+
+ if (total_unmapped_count > 0 && config_dlls == null) {
+ Console.Error.WriteLine ("No config file for DLL mapping was found ({0})", configFile);
+ }
+
+ return total_unmapped_count == 0;
+ }
+
+ private static void LoadDllImports (string csFile)
+ {
+ if (csFile.StartsWith ("-i")) {
+ ignore_dlls.Add (csFile.Substring (2));
+ return;
+ }
+
+ if (Path.GetExtension (csFile) == ".cs" && File.Exists (csFile)) {
+ List<DllImportRef> dll_import_refs = null;
+
+ foreach (DllImportRef dll_import in ParseFileForDllImports (csFile)) {
+ if (ignore_dlls.Contains (dll_import.Name)) {
+ continue;
+ }
+
+ if (dll_import_refs == null) {
+ dll_import_refs = new List<DllImportRef> ();
+ }
+
+ dll_import_refs.Add (dll_import);
+ }
+
+ if (dll_import_refs != null) {
+ dll_imports.Add (csFile, dll_import_refs);
+ }
+ }
+ }
+
+ private static void LoadConfigDlls (string configFile)
+ {
+ try {
+ XmlTextReader config = new XmlTextReader (configFile);
+ config_dlls = new List<string> ();
+ while (config.Read ()) {
+ if (config.NodeType == XmlNodeType.Element &&
+ config.Name == "dllmap") {
+ string dll = config.GetAttribute ("dll");
+ if (!config_dlls.Contains (dll)) {
+ config_dlls.Add (dll);
+ }
+ }
+ }
+ } catch {
+ }
+ }
+
+#region DllImport parser
+
+ private static StreamReader reader;
+ private static int reader_line;
+ private static int reader_col;
+
+ private static IEnumerable<DllImportRef> ParseFileForDllImports (string file)
+ {
+ reader_line = 1;
+ reader_col = 1;
+
+ using (reader = new StreamReader (file)) {
+ char c;
+ bool in_paren = false;
+ bool in_attr = false;
+ bool in_dll_attr = false;
+ bool in_string = false;
+ bool in_comment = false;
+ int dll_line = 1, dll_col = 1;
+ string dll_string = null;
+ string dll_comment = null;
+
+ while ((c = (char)reader.Peek ()) != Char.MaxValue) {
+ switch (c) {
+ case ' ':
+ case '\t': Read (); break;
+ case '[':
+ in_attr = true;
+ dll_string = null;
+ dll_comment = null;
+ dll_line = reader_line;
+ dll_col = reader_col;
+ Read ();
+ break;
+ case '(': Read (); in_paren = true; break;
+ case ')': Read (); in_paren = false; break;
+ case '"':
+ Read ();
+ if (dll_string == null && in_dll_attr && in_paren && !in_string) {
+ in_string = true;
+ }
+ break;
+ case '/':
+ Read ();
+ if ((char)reader.Peek () == '*') {
+ Read ();
+ if (in_dll_attr && !in_comment) {
+ in_comment = true;
+ }
+ }
+ break;
+ case ']':
+ if (in_dll_attr && dll_string != null && dll_comment != "willfully unmapped") {
+ yield return new DllImportRef (dll_string, dll_line, dll_col);
+ }
+ in_attr = false;
+ in_dll_attr = false;
+ Read ();
+ break;
+ default:
+ if (!in_dll_attr && in_attr && ReadDllAttribute ()) {
+ in_dll_attr = true;
+ } else if (in_dll_attr && in_string) {
+ dll_string = ReadDllString ();
+ in_string = false;
+ } else if (in_dll_attr && in_comment) {
+ dll_comment = ReadDllComment ();
+ in_comment = false;
+ } else {
+ Read ();
+ }
+ break;
+ }
+ }
+ }
+ }
+
+ private static bool ReadDllAttribute ()
+ {
+ return
+ Read () == 'D' &&
+ Read () == 'l' &&
+ Read () == 'l' &&
+ Read () == 'I' &&
+ Read () == 'm' &&
+ Read () == 'p' &&
+ Read () == 'o' &&
+ Read () == 'r' &&
+ Read () == 't';
+ }
+
+ private static string ReadDllString ()
+ {
+ StringBuilder builder = new StringBuilder (32);
+ while (true) {
+ char c = Read ();
+ if (Char.IsLetterOrDigit (c) || c == '.' || c == '-' || c == '_') {
+ builder.Append (c);
+ } else {
+ break;
+ }
+ }
+ return builder.ToString ();
+ }
+
+ private static string ReadDllComment ()
+ {
+ StringBuilder builder = new StringBuilder ();
+ char lc = Char.MaxValue;
+ while (true) {
+ char c = Read ();
+ if (c == Char.MaxValue || (c == '/' && lc == '*')) {
+ break;
+ } else if (lc != Char.MaxValue) {
+ builder.Append (lc);
+ }
+ lc = c;
+ }
+ return builder.ToString ().Trim ();
+ }
+
+ private static char Read ()
+ {
+ char c = (char)reader.Read ();
+ if (c == '\n') {
+ reader_line++;
+ reader_col = 1;
+ } else {
+ reader_col++;
+ }
+ return c;
+ }
+
+#endregion
+
+}
+
diff --git a/build/Makefile.am b/build/Makefile.am
index f811656..9ae1045 100644
--- a/build/Makefile.am
+++ b/build/Makefile.am
@@ -1,3 +1,18 @@
-SUBDIRS = m4
+SUBDIRS = pkg-config m4
+DLL_MAP_VERIFIER_ASSEMBLY = dll-map-verifier.exe
+
+ALL_TARGETS = $(DLL_MAP_VERIFIER_ASSEMBLY)
+
+all: $(ALL_TARGETS)
+
+$(DLL_MAP_VERIFIER_ASSEMBLY): DllMapVerifier.cs
+ $(MCS) -out:$@ $<
+
+EXTRA_DIST = \
+ private-icon-theme-installer \
+ DllMapVerifier.cs \
+ dll-map-makefile-verifier
+
+CLEANFILES = *.exe *.mdb
MAINTAINERCLEANFILES = Makefile.in
diff --git a/build/Makefile.in b/build/Makefile.in
index 22e820d..78b034e 100644
--- a/build/Makefile.in
+++ b/build/Makefile.in
@@ -38,8 +38,14 @@ DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in
ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
am__aclocal_m4_deps = $(top_srcdir)/build/m4/shave/shave.m4 \
$(top_srcdir)/build/m4/shamrock/expansions.m4 \
+ $(top_srcdir)/build/m4/shamrock/gnome-doc.m4 \
$(top_srcdir)/build/m4/shamrock/mono.m4 \
+ $(top_srcdir)/build/m4/shamrock/nunit.m4 \
$(top_srcdir)/build/m4/shamrock/programs.m4 \
+ $(top_srcdir)/build/m4/f-spot/flickrnet.m4 \
+ $(top_srcdir)/build/m4/f-spot/gnome-keyring-sharp.m4 \
+ $(top_srcdir)/build/m4/f-spot/gtk-sharp.m4 \
+ $(top_srcdir)/build/m4/f-spot/mono-addins.m4 \
$(top_srcdir)/acinclude.m4 $(top_srcdir)/configure.ac
am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
$(ACLOCAL_M4)
@@ -134,6 +140,8 @@ EXIF_SOVERSION = @EXIF_SOVERSION@
F77 = @F77@
FC = @FC@
FGREP = @FGREP@
+FLICKRNET_CFLAGS = @FLICKRNET_CFLAGS@
+FLICKRNET_LIBS = @FLICKRNET_LIBS@
F_CFLAGS = @F_CFLAGS@
F_LIBS = @F_LIBS@
GAPI2CODEGEN = @GAPI2CODEGEN@
@@ -147,6 +155,8 @@ GCONF_SHARP_LIBS = @GCONF_SHARP_LIBS@
GETTEXT_PACKAGE = @GETTEXT_PACKAGE@
GIO_CFLAGS = @GIO_CFLAGS@
GIO_LIBS = @GIO_LIBS@
+GLIBSHARP_2_12_7_CFLAGS = @GLIBSHARP_2_12_7_CFLAGS@
+GLIBSHARP_2_12_7_LIBS = @GLIBSHARP_2_12_7_LIBS@
GLIBSHARP_CFLAGS = @GLIBSHARP_CFLAGS@
GLIBSHARP_LIBS = @GLIBSHARP_LIBS@
GLIB_CFLAGS = @GLIB_CFLAGS@
@@ -162,6 +172,10 @@ GNOME_SHARP_CFLAGS = @GNOME_SHARP_CFLAGS@
GNOME_SHARP_LIBS = @GNOME_SHARP_LIBS@
GOBJECT_QUERY = @GOBJECT_QUERY@
GREP = @GREP@
+GTKSHARP_A11Y_CFLAGS = @GTKSHARP_A11Y_CFLAGS@
+GTKSHARP_A11Y_LIBS = @GTKSHARP_A11Y_LIBS@
+GTKSHARP_CFLAGS = @GTKSHARP_CFLAGS@
+GTKSHARP_LIBS = @GTKSHARP_LIBS@
HELP_DIR = @HELP_DIR@
ICONS_DIRECTORY = @ICONS_DIRECTORY@
INSTALL = @INSTALL@
@@ -175,14 +189,14 @@ INTLTOOL_EXTRACT = @INTLTOOL_EXTRACT@
INTLTOOL_MERGE = @INTLTOOL_MERGE@
INTLTOOL_PERL = @INTLTOOL_PERL@
INTLTOOL_UPDATE = @INTLTOOL_UPDATE@
+KEYRINGSHARP_CFLAGS = @KEYRINGSHARP_CFLAGS@
+KEYRINGSHARP_LIBS = @KEYRINGSHARP_LIBS@
LCMS_CFLAGS = @LCMS_CFLAGS@
LCMS_LIBS = @LCMS_LIBS@
LD = @LD@
LDFLAGS = @LDFLAGS@
LIBEXIF_VERSION_CHECK_CFLAGS = @LIBEXIF_VERSION_CHECK_CFLAGS@
LIBEXIF_VERSION_CHECK_LIBS = @LIBEXIF_VERSION_CHECK_LIBS@
-LIBGPHOTO2_CFLAGS = @LIBGPHOTO2_CFLAGS@
-LIBGPHOTO2_LIBS = @LIBGPHOTO2_LIBS@
LIBJPEG = @LIBJPEG@
LIBOBJS = @LIBOBJS@
LIBS = @LIBS@
@@ -197,6 +211,12 @@ MCS = @MCS@
MKDIR_P = @MKDIR_P@
MKINSTALLDIRS = @MKINSTALLDIRS@
MONO = @MONO@
+MONO_ADDINS_CFLAGS = @MONO_ADDINS_CFLAGS@
+MONO_ADDINS_GUI_CFLAGS = @MONO_ADDINS_GUI_CFLAGS@
+MONO_ADDINS_GUI_LIBS = @MONO_ADDINS_GUI_LIBS@
+MONO_ADDINS_LIBS = @MONO_ADDINS_LIBS@
+MONO_ADDINS_SETUP_CFLAGS = @MONO_ADDINS_SETUP_CFLAGS@
+MONO_ADDINS_SETUP_LIBS = @MONO_ADDINS_SETUP_LIBS@
MONO_MODULE_CFLAGS = @MONO_MODULE_CFLAGS@
MONO_MODULE_LIBS = @MONO_MODULE_LIBS@
MSGFMT = @MSGFMT@
@@ -207,7 +227,6 @@ NDESK_DBUS_LIBS = @NDESK_DBUS_LIBS@
NM = @NM@
NMEDIT = @NMEDIT@
NUNIT_CFLAGS = @NUNIT_CFLAGS@
-NUNIT_DEFINES = @NUNIT_DEFINES@
NUNIT_LIBS = @NUNIT_LIBS@
OBJC = @OBJC@
OBJDUMP = @OBJDUMP@
@@ -299,7 +318,15 @@ target_alias = @target_alias@
top_build_prefix = @top_build_prefix@
top_builddir = @top_builddir@
top_srcdir = @top_srcdir@
-SUBDIRS = m4
+SUBDIRS = pkg-config m4
+DLL_MAP_VERIFIER_ASSEMBLY = dll-map-verifier.exe
+ALL_TARGETS = $(DLL_MAP_VERIFIER_ASSEMBLY)
+EXTRA_DIST = \
+ private-icon-theme-installer \
+ DllMapVerifier.cs \
+ dll-map-makefile-verifier
+
+CLEANFILES = *.exe *.mdb
MAINTAINERCLEANFILES = Makefile.in
all: all-recursive
@@ -556,6 +583,7 @@ install-strip:
mostlyclean-generic:
clean-generic:
+ -test -z "$(CLEANFILES)" || rm -f $(CLEANFILES)
distclean-generic:
-test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
@@ -649,6 +677,11 @@ uninstall-am:
uninstall uninstall-am
+all: $(ALL_TARGETS)
+
+$(DLL_MAP_VERIFIER_ASSEMBLY): DllMapVerifier.cs
+ $(MCS) -out:$@ $<
+
# 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.
.NOEXPORT:
diff --git a/build/build.environment.mk b/build/build.environment.mk
new file mode 100644
index 0000000..b74c261
--- /dev/null
+++ b/build/build.environment.mk
@@ -0,0 +1,182 @@
+# Initializers
+MONO_BASE_PATH =
+MONO_ADDINS_PATH =
+
+# Install Paths
+DEFAULT_INSTALL_DIR = $(pkglibdir)
+BACKENDS_INSTALL_DIR = $(DEFAULT_INSTALL_DIR)/Backends
+EXTENSIONS_INSTALL_DIR = $(DEFAULT_INSTALL_DIR)/Extensions
+
+
+## Directories
+DIR_DOCS = $(top_builddir)/docs
+DIR_EXTENSIONS = $(top_builddir)/extensions
+DIR_ICONS = $(top_builddir)/icons
+DIR_JPEGTRAN = $(top_builddir)/lib/libjpegtran
+DIR_LIBFSPOT = $(top_builddir)/lib/libfspot
+DIR_SEMWEB = $(top_builddir)/lib/semweb
+DIR_SRC = $(top_builddir)/src
+DIR_GIOSHARP = $(top_builddir)/lib/gio-sharp/gio
+DIR_GTKSHARPBEANS = $(top_builddir)/lib/gtk-sharp-beans
+DIR_UNIQUESHARP = $(top_builddir)/lib/unique-sharp/unique
+DIR_BIN = $(top_builddir)/bin
+
+
+# External libraries to link against, generated from configure
+LINK_SYSTEM = -r:System
+LINK_SYSTEMDATA = -r:System.Data
+LINK_SYSTEM_WEB = -r:System.Web
+LINK_MONO_POSIX = -r:Mono.Posix
+LINK_MONO_CAIRO = -r:Mono.Cairo
+LINK_MONO_SIMD = -r:Mono.Simd
+LINK_MONODATA = -r:Mono.Data
+LINK_MONO_DATA_SQLITECLIENT = -r:Mono.Data.SqliteClient
+LINK_ICSHARP_ZIP_LIB = -r:ICSharpCode.SharpZipLib
+
+LINK_KEYRING = $(KEYRINGSHARP_LIBS)
+LINK_GLIB = $(GLIBSHARP_LIBS)
+LINK_GTK = $(GTKSHARP_LIBS)
+LINK_GNOME = $(GNOME_SHARP_LIBS)
+LINK_GCONF = $(GCONF_SHARP_LIBS)
+LINK_GLADE = -pkg:glade-sharp-2.0
+LINK_FLICKRNET = -pkg:flickrnet
+LINK_DBUS = $(NDESK_DBUS_LIBS) $(NDESK_DBUS_GLIB_LIBS)
+LINK_DBUS_NO_GLIB = $(NDESK_DBUS_LIBS)
+LINK_MONO_ADDINS_DEPS = $(MONO_ADDINS_LIBS)
+LINK_MONO_ADDINS_SETUP_DEPS = $(MONO_ADDINS_SETUP_LIBS)
+LINK_MONO_ADDINS_GUI_DEPS = $(MONO_ADDINS_GUI_LIBS)
+
+# GIO
+REF_GIO =
+LINK_GIO = -r:$(DIR_GIOSHARP)/gio-sharp.dll
+LINK_GIO_DEPS = $(REF_GIO) $(LINK_GIO)
+
+# Gtk Beans
+REF_GTK_BEANS = $(LINK_GIO_DEPS)
+LINK_GTK_BEANS = -r:$(DIR_GTKSHARPBEANS)/gtk-sharp-beans.dll
+LINK_GTK_BEANS_DEPS = $(REF_GTK_BEANS) $(LINK_GTK_BEANS)
+
+# Uniqe
+REF_UNIQUE =
+LINK_UNIQUE = -r:$(DIR_UNIQUESHARP)/unique-sharp.dll
+LINK_UNIQUE_DEPS = $(REF_UNIQUE) $(LINK_UNIQUE)
+
+# Hyena
+REF_HYENA = $(LINK_SYSTEM) $(LINK_MONO_POSIX)
+LINK_HYENA = -r:$(DIR_BIN)/Hyena.dll
+LINK_HYENA_DEPS = $(REF_HYENA) $(LINK_HYENA)
+
+# Semweb
+REF_SEMWEB = $(LINK_SYSTEMDATA) $(LINK_HYENA_DEPS)
+LINK_SEMWEB = -r:$(DIR_BIN)/SemWeb.dll
+LINK_SEMWEB_DEPS = $(REF_SEMWEB) $(LINK_SEMWEB)
+
+# Hyena.Data.Sqlite
+REF_HYENA_DATA_SQLITE = $(LINK_SQLITE)
+LINK_HYENA_DATA_SQLITE = -r:$(DIR_BIN)/Hyena.Data.Sqlite.dll
+LINK_HYENA_DATA_SQLITE_DEPS = $(REF_HYENA_DATA_SQLITE) $(LINK_HYENA_DATA_SQLITE)
+
+# Hyena.Gui
+REF_HYENA_GUI = $(LINK_HYENA_DEPS)
+LINK_HYENA_GUI = -r:$(DIR_BIN)/Hyena.Gui.dll
+LINK_HENA_GUI_DEPS = $(REF_HYENA_GUI) $(LINK_HYENA_GUI)
+
+# FSpot.Cms
+REF_FSPOT_CMS = $(LINK_GTK)
+LINK_FSPOT_CMS = -r:$(DIR_BIN)/FSpot.Cms.dll
+LINK_FSPOT_CMS_DEPS = $(REF_FSPOT_CMS) $(LINK_FSPOT_CMS)
+
+# FSpot.Utils
+REF_FSPOT_UTILS = $(LINK_HYENA_DEPS) $(LINK_GTK) $(LINK_GIO) $(LINK_MONO_CAIRO)
+LINK_FSPOT_UTILS = -r:$(DIR_BIN)/FSpot.Utils.dll
+LINK_FSPOT_UTILS_DEPS = $(REF_FSPOT_UTILS) $(LINK_FSPOT_UTILS)
+
+# FSpot.Core
+REF_FSPOT_CORE = $(LINK_FSPOT_UTILS_DEPS) $(LINK_FSPOT_CMS_DEPS)
+LINK_FSPOT_CORE = -r:$(DIR_BIN)/FSpot.Core.dll
+LINK_FSPOT_CORE_DEPS = $(REF_FSPOT_CORE) $(LINK_FSPOT_CORE)
+
+# FSpot.Query
+REF_FSPOT_QUERY = $(LINK_FSPOT_CORE_DEPS)
+LINK_FSPOT_QUERY = -r:$(DIR_BIN)/FSpot.Query.dll
+LINK_FSPOT_QUERY_DEPS = $(REF_FSPOT_QUERY) $(LINK_FSPOT_QUERY)
+
+# FSpot.JobScheduler
+REF_FSPOT_JOB_SCHEDULER = $(LINK_HYENA_DEPS)
+LINK_FSPOT_JOB_SCHEDULER = -r:$(DIR_BIN)/FSpot.JobScheduler.dll
+LINK_FSPOT_JOB_SCHEDULER_DEPS = $(REF_FSPOT_JOB_SCHEDULER) $(LINK_FSPOT_JOB_SCHEDULER)
+
+# FSpot.Bling
+REF_FSPOT_BLING = $(LINK_GTK_BEANS_DEPS) $(LINK_GLIB)
+LINK_FSPOT_BLING = -r:$(DIR_BIN)/FSpot.Bling.dll
+LINK_FSPOT_BLING_DEPS = $(REF_FSPOT_BLING) $(LINK_FSPOT_BLING)
+
+# FSpot.Platform
+REF_FSPOT_PLATFORM = $(LINK_GCONF) $(LINK_GTK) $(LINK_FSPOT_CORE_DEPS) $(LINK_DBUS)
+LINK_FSPOT_PLATFORM = -r:$(DIR_BIN)/FSpot.Platform.dll
+LINK_FSPOT_PLATFORM_DEPS = $(REF_FSPOT_PLATFORM) $(LINK_FSPOT_PLATFORM)
+
+# FSpot.Widgets
+REF_FSPOT_WIDGETS = $(LINK_FSPOT_CORE_DEPS) $(LINK_FSPOT_BLING_DEPS)
+LINK_FSPOT_WIDGETS = -r:$(DIR_BIN)/FSpot.Widgets.dll
+LINK_FSPOT_WIDGETS_DEPS = $(REF_FSPOT_WIDGETS) $(LINK_FSPOT_WIDGETS)
+
+# FSpot (executable)
+REF_FSPOT = $(LINK_FSPOT_WIDGETS_DEPS) $(LINK_FSPOT_PLATFORM_DEPS) $(LINK_FSPOT_QUERY_DEPS) \
+ $(LINK_GLIB) $(LINK_MONO_ADDINS_DEPS) $(LINK_UNIQUE_DEPS) $(LINK_MONO_ADDINS_SETUP_DEPS) \
+ $(LINK_SEMWEB_DEPS) $(LINK_GLADE) $(LINK_MONODATA) $(LINK_MONO_DATA_SQLITECLIENT) \
+ $(LINK_MONO_ADDINS_GUI_DEPS) $(LINK_FSPOT_JOB_SCHEDULER_DEPS) $(LINK_ICSHARP_ZIP_LIB) \
+ $(LINK_GNOME)
+# FIXME: do not link executables
+LINK_FSPOT = -r:$(DIR_BIN)/f-spot.exe
+LINK_FSPOT_DEPS = $(REF_FSPOT) $(LINK_FSPOT)
+
+# Extensions
+REF_FSPOT_EXTENSION_BLACKOUTEDITOR = $(LINK_FSPOT_DEPS)
+REF_FSPOT_EXTENSION_BWEDITOR = $(LINK_FSPOT_DEPS) $(LINK_MONO_SIMD)
+REF_FSPOT_EXTENSION_FLIPEDITOR = $(LINK_FSPOT_DEPS)
+REF_FSPOT_EXTENSION_PIXELATEEDITOR = $(LINK_FSPOT_DEPS)
+REF_FSPOT_EXTENSION_RESIZEEDITOR = $(LINK_FSPOT_DEPS)
+REF_FSPOT_EXTENSION_CDEXPORT = $(LINK_FSPOT_DEPS)
+REF_FSPOT_EXTENSION_FACEBOOKEXPORT = $(LINK_FSPOT_DEPS) $(LINK_KEYRING)
+REF_FSPOT_EXTENSION_FLICKREXPORT = $(LINK_FSPOT_DEPS) $(LINK_FLICKRNET)
+REF_FSPOT_EXTENSION_FOLDEREXPORT = $(LINK_FSPOT_DEPS) $(LINK_SYSTEM_WEB)
+REF_FSPOT_EXTENSION_GALLERYEXPORT = $(LINK_FSPOT_DEPS)
+
+REF_MONO_GOOGLE = $(LINK_HYENA_DEPS)
+LINK_MONO_GOOGLE = -r:$(DIR_BIN)/Mono.Google.dll
+LINK_MONO_GOOGLE_DEPS = $(REF_MONO_GOOGLE) $(LINK_MONO_GOOGLE)
+REF_FSPOT_EXTENSION_PICASAWEBEXPORT = $(LINK_FSPOT_DEPS) $(LINK_MONO_GOOGLE) $(LINK_KEYRING)
+
+REF_SMUGMUGNET = $(LINK_FSPOT_DEPS)
+LINK_SMUGMUGNET = -r:$(DIR_BIN)/SmugMugNet.dll
+LINK_SMUGMUGNET_DEPS = $(REF_SMUGMUGNET) $(LINK_SMUGMUGNET)
+REF_FSPOT_EXTENSION_SMUGMUGEXPORT = $(LINK_SMUGMUGNET_DEPS) $(LINK_KEYRING)
+
+REF_MONO_TABBLO = $(LINK_HYENA_DEPS)
+LINK_MONO_TABBLO = -r:$(DIR_BIN)/Mono.Tabblo.dll
+LINK_MONO_TABBLO_DEPS = $(REF_MONO_TABBLO) $(LINK_MONO_TABBLO)
+REF_FSPOT_EXTENSION_TABBLOEXPORT = $(LINK_FSPOT_DEPS) $(LINK_KEYRING) $(LINK_MONO_TABBLO_DEPS)
+
+REF_FSPOT_EXTENSION_ZIPEXPORT = $(LINK_FSPOT_DEPS)
+REF_FSPOT_EXTENSION_CHANGEPHOTOPATH = $(LINK_FSPOT_DEPS)
+REF_FSPOT_EXTENSION_DEVELOPINUFRAW = $(LINK_FSPOT_DEPS)
+REF_FSPOT_EXTENSION_HASHJOB = $(LINK_FSPOT_DEPS)
+REF_FSPOT_EXTENSION_LIVEWEBGALLERY = $(LINK_FSPOT_DEPS)
+REF_FSPOT_EXTENSION_MERGEDB = $(LINK_FSPOT_DEPS)
+REF_FSPOT_EXTENSION_RAWPLUSJPEG = $(LINK_FSPOT_DEPS)
+REF_FSPOT_EXTENSION_RETROACTIVEROLL = $(LINK_FSPOT_DEPS)
+REF_FSPOT_EXTENSION_SCREENSAVERCONFIG = $(LINK_FSPOT_DEPS)
+REF_FSPOT_EXTENSION_COVERTRANSITION = $(LINK_FSPOT_DEPS)
+
+
+
+
+# Cute hack to replace a space with something
+colon:= :
+empty:=
+space:= $(empty) $(empty)
+
+# Build path to allow running uninstalled
+RUN_PATH = $(subst $(space),$(colon), $(MONO_BASE_PATH))
+
diff --git a/build/build.mk b/build/build.mk
new file mode 100644
index 0000000..78e0760
--- /dev/null
+++ b/build/build.mk
@@ -0,0 +1,3 @@
+include $(top_srcdir)/build/build.environment.mk
+include $(top_srcdir)/build/build.rules.mk
+
diff --git a/build/build.rules.mk b/build/build.rules.mk
new file mode 100644
index 0000000..c1c6c1f
--- /dev/null
+++ b/build/build.rules.mk
@@ -0,0 +1,105 @@
+UNIQUE_FILTER_PIPE = tr [:space:] \\n | sort | uniq
+BUILD_DATA_DIR = $(top_builddir)/bin/share/$(PACKAGE)
+
+# Since all other attempts failed, we currently go this way:
+# This code adds the file specified in ASSEMBLY_INFO_SOURCE to SOURCES_BUILD.
+# If no such file is specified, the default AssemblyInfo.cs is used.
+ASSEMBLY_INFO_SOURCE_REAL = \
+ $(shell if [ "$(ASSEMBLY_INFO_SOURCE)" ]; \
+ then \
+ echo "$(addprefix $(srcdir)/, $(ASSEMBLY_INFO_SOURCE))"; \
+ else \
+ echo "$(top_srcdir)/src/AssemblyInfo.cs"; \
+ fi)
+
+SOURCES_BUILD = $(addprefix $(srcdir)/, $(SOURCES))
+SOURCES_BUILD += $(ASSEMBLY_INFO_SOURCE_REAL)
+
+
+RESOURCES_EXPANDED = $(addprefix $(srcdir)/, $(RESOURCES))
+RESOURCES_BUILD = $(foreach resource, $(RESOURCES_EXPANDED), \
+ -resource:$(resource),$(notdir $(resource)))
+
+INSTALL_ICONS = $(top_srcdir)/build/private-icon-theme-installer "$(mkinstalldirs)" "$(INSTALL_DATA)"
+THEME_ICONS_SOURCE = $(wildcard $(srcdir)/ThemeIcons/*/*/*.png) $(wildcard $(srcdir)/ThemeIcons/scalable/*/*.svg)
+THEME_ICONS_RELATIVE = $(subst $(srcdir)/ThemeIcons/, , $(THEME_ICONS_SOURCE))
+
+ASSEMBLY_EXTENSION = $(strip $(patsubst library, dll, $(TARGET)))
+ASSEMBLY_FILE = $(top_builddir)/bin/$(ASSEMBLY).$(ASSEMBLY_EXTENSION)
+
+INSTALL_DIR_RESOLVED = $(firstword $(subst , $(DEFAULT_INSTALL_DIR), $(INSTALL_DIR)))
+
+if ENABLE_TESTS
+ LINK += " $(NUNIT_LIBS)"
+ ENABLE_TESTS_FLAG = "-define:ENABLE_TESTS"
+endif
+
+if ENABLE_ATK
+ ENABLE_ATK_FLAG = "-define:ENABLE_ATK"
+endif
+
+FILTERED_LINK = $(shell echo "$(LINK)" | $(UNIQUE_FILTER_PIPE))
+DEP_LINK = $(shell echo "$(LINK)" | $(UNIQUE_FILTER_PIPE) | sed s,-r:,,g | grep '$(top_builddir)/bin/')
+
+OUTPUT_FILES = \
+ $(ASSEMBLY_FILE) \
+ $(ASSEMBLY_FILE).mdb
+
+moduledir = $(INSTALL_DIR_RESOLVED)
+module_SCRIPTS = $(OUTPUT_FILES)
+
+all: $(ASSEMBLY_FILE) theme-icons
+
+run:
+ @pushd $(top_builddir); \
+ make run; \
+ popd;
+
+# uncommented for now.
+# tests are currently excuted from Makefile in $(top_builddir)
+#test:
+# @pushd $(top_builddir)/tests; \
+# make $(ASSEMBLY); \
+# popd;
+
+build-debug:
+ @echo $(DEP_LINK)
+
+$(ASSEMBLY_FILE).mdb: $(ASSEMBLY_FILE)
+
+$(ASSEMBLY_FILE): $(SOURCES_BUILD) $(RESOURCES_EXPANDED) $(DEP_LINK)
+ @mkdir -p $(top_builddir)/bin
+ @if [ ! "x$(ENABLE_RELEASE)" = "xyes" ]; then \
+ $(top_srcdir)/build/dll-map-makefile-verifier $(srcdir)/Makefile.am $(srcdir)/$(notdir $@.config) && \
+ $(MONO) $(top_builddir)/build/dll-map-verifier.exe $(srcdir)/$(notdir $@.config) -iwinmm -ilibbanshee -ilibbnpx11 -ilibc -ilibc.so.6 -iintl -ilibmtp.dll -ilibigemacintegration.dylib -iCFRelease $(SOURCES_BUILD); \
+ fi;
+ $(MCS) \
+ $(GMCS_FLAGS) \
+ $(ASSEMBLY_BUILD_FLAGS) \
+ -nowarn:0278 -nowarn:0078 $$warn \
+ -define:HAVE_GTK_2_10 -define:NET_2_0 \
+ -debug -target:$(TARGET) -out:$@ \
+ $(BUILD_DEFINES) $(ENABLE_TESTS_FLAG) $(ENABLE_ATK_FLAG) \
+ $(FILTERED_LINK) $(RESOURCES_BUILD) $(SOURCES_BUILD)
+ @if [ -e $(srcdir)/$(notdir $@.config) ]; then \
+ cp $(srcdir)/$(notdir $@.config) $(top_builddir)/bin; \
+ fi;
+ @if [ ! -z "$(EXTRA_BUNDLE)" ]; then \
+ cp $(EXTRA_BUNDLE) $(top_builddir)/bin; \
+ fi;
+
+theme-icons: $(THEME_ICONS_SOURCE)
+ @$(INSTALL_ICONS) -il "$(BUILD_DATA_DIR)" "$(srcdir)" $(THEME_ICONS_RELATIVE)
+
+install-data-local: $(THEME_ICONS_SOURCE)
+ @$(INSTALL_ICONS) -i "$(DESTDIR)$(pkgdatadir)" "$(srcdir)" $(THEME_ICONS_RELATIVE)
+
+uninstall-local: $(THEME_ICONS_SOURCE)
+ @$(INSTALL_ICONS) -u "$(DESTDIR)$(pkgdatadir)" "$(srcdir)" $(THEME_ICONS_RELATIVE)
+
+EXTRA_DIST = $(SOURCES_BUILD) $(RESOURCES_EXPANDED) $(THEME_ICONS_SOURCE)
+
+CLEANFILES = $(OUTPUT_FILES) $(ASSEMBLY_FILE).config
+DISTCLEANFILES = *.pidb
+MAINTAINERCLEANFILES = Makefile.in
+
diff --git a/build/dll-map-makefile-verifier b/build/dll-map-makefile-verifier
new file mode 100755
index 0000000..c75afa5
--- /dev/null
+++ b/build/dll-map-makefile-verifier
@@ -0,0 +1,10 @@
+#!/usr/bin/env bash
+
+if [ -f $2 ]; then
+ # Lame, but better than nothing
+ grep $(basename $2) $1 | grep module_SCRIPTS &>/dev/null || {
+ echo "Assembly has corresponding .config file, but it was not found in module_SCRIPTS in Makefile.am" 2>&1
+ exit 1
+ }
+fi
+
diff --git a/build/m4/Makefile.am b/build/m4/Makefile.am
index 6c1d899..ede9722 100644
--- a/build/m4/Makefile.am
+++ b/build/m4/Makefile.am
@@ -1,4 +1,5 @@
EXTRA_DIST = \
+ $(srcdir)/f-spot/*.m4 \
$(srcdir)/shamrock/*.m4 \
$(srcdir)/shave/*.m4 \
$(srcdir)/shave/*.in
diff --git a/build/m4/Makefile.in b/build/m4/Makefile.in
index 72a71d6..41a5737 100644
--- a/build/m4/Makefile.in
+++ b/build/m4/Makefile.in
@@ -38,8 +38,14 @@ DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in
ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
am__aclocal_m4_deps = $(top_srcdir)/build/m4/shave/shave.m4 \
$(top_srcdir)/build/m4/shamrock/expansions.m4 \
+ $(top_srcdir)/build/m4/shamrock/gnome-doc.m4 \
$(top_srcdir)/build/m4/shamrock/mono.m4 \
+ $(top_srcdir)/build/m4/shamrock/nunit.m4 \
$(top_srcdir)/build/m4/shamrock/programs.m4 \
+ $(top_srcdir)/build/m4/f-spot/flickrnet.m4 \
+ $(top_srcdir)/build/m4/f-spot/gnome-keyring-sharp.m4 \
+ $(top_srcdir)/build/m4/f-spot/gtk-sharp.m4 \
+ $(top_srcdir)/build/m4/f-spot/mono-addins.m4 \
$(top_srcdir)/acinclude.m4 $(top_srcdir)/configure.ac
am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
$(ACLOCAL_M4)
@@ -94,6 +100,8 @@ EXIF_SOVERSION = @EXIF_SOVERSION@
F77 = @F77@
FC = @FC@
FGREP = @FGREP@
+FLICKRNET_CFLAGS = @FLICKRNET_CFLAGS@
+FLICKRNET_LIBS = @FLICKRNET_LIBS@
F_CFLAGS = @F_CFLAGS@
F_LIBS = @F_LIBS@
GAPI2CODEGEN = @GAPI2CODEGEN@
@@ -107,6 +115,8 @@ GCONF_SHARP_LIBS = @GCONF_SHARP_LIBS@
GETTEXT_PACKAGE = @GETTEXT_PACKAGE@
GIO_CFLAGS = @GIO_CFLAGS@
GIO_LIBS = @GIO_LIBS@
+GLIBSHARP_2_12_7_CFLAGS = @GLIBSHARP_2_12_7_CFLAGS@
+GLIBSHARP_2_12_7_LIBS = @GLIBSHARP_2_12_7_LIBS@
GLIBSHARP_CFLAGS = @GLIBSHARP_CFLAGS@
GLIBSHARP_LIBS = @GLIBSHARP_LIBS@
GLIB_CFLAGS = @GLIB_CFLAGS@
@@ -122,6 +132,10 @@ GNOME_SHARP_CFLAGS = @GNOME_SHARP_CFLAGS@
GNOME_SHARP_LIBS = @GNOME_SHARP_LIBS@
GOBJECT_QUERY = @GOBJECT_QUERY@
GREP = @GREP@
+GTKSHARP_A11Y_CFLAGS = @GTKSHARP_A11Y_CFLAGS@
+GTKSHARP_A11Y_LIBS = @GTKSHARP_A11Y_LIBS@
+GTKSHARP_CFLAGS = @GTKSHARP_CFLAGS@
+GTKSHARP_LIBS = @GTKSHARP_LIBS@
HELP_DIR = @HELP_DIR@
ICONS_DIRECTORY = @ICONS_DIRECTORY@
INSTALL = @INSTALL@
@@ -135,14 +149,14 @@ INTLTOOL_EXTRACT = @INTLTOOL_EXTRACT@
INTLTOOL_MERGE = @INTLTOOL_MERGE@
INTLTOOL_PERL = @INTLTOOL_PERL@
INTLTOOL_UPDATE = @INTLTOOL_UPDATE@
+KEYRINGSHARP_CFLAGS = @KEYRINGSHARP_CFLAGS@
+KEYRINGSHARP_LIBS = @KEYRINGSHARP_LIBS@
LCMS_CFLAGS = @LCMS_CFLAGS@
LCMS_LIBS = @LCMS_LIBS@
LD = @LD@
LDFLAGS = @LDFLAGS@
LIBEXIF_VERSION_CHECK_CFLAGS = @LIBEXIF_VERSION_CHECK_CFLAGS@
LIBEXIF_VERSION_CHECK_LIBS = @LIBEXIF_VERSION_CHECK_LIBS@
-LIBGPHOTO2_CFLAGS = @LIBGPHOTO2_CFLAGS@
-LIBGPHOTO2_LIBS = @LIBGPHOTO2_LIBS@
LIBJPEG = @LIBJPEG@
LIBOBJS = @LIBOBJS@
LIBS = @LIBS@
@@ -157,6 +171,12 @@ MCS = @MCS@
MKDIR_P = @MKDIR_P@
MKINSTALLDIRS = @MKINSTALLDIRS@
MONO = @MONO@
+MONO_ADDINS_CFLAGS = @MONO_ADDINS_CFLAGS@
+MONO_ADDINS_GUI_CFLAGS = @MONO_ADDINS_GUI_CFLAGS@
+MONO_ADDINS_GUI_LIBS = @MONO_ADDINS_GUI_LIBS@
+MONO_ADDINS_LIBS = @MONO_ADDINS_LIBS@
+MONO_ADDINS_SETUP_CFLAGS = @MONO_ADDINS_SETUP_CFLAGS@
+MONO_ADDINS_SETUP_LIBS = @MONO_ADDINS_SETUP_LIBS@
MONO_MODULE_CFLAGS = @MONO_MODULE_CFLAGS@
MONO_MODULE_LIBS = @MONO_MODULE_LIBS@
MSGFMT = @MSGFMT@
@@ -167,7 +187,6 @@ NDESK_DBUS_LIBS = @NDESK_DBUS_LIBS@
NM = @NM@
NMEDIT = @NMEDIT@
NUNIT_CFLAGS = @NUNIT_CFLAGS@
-NUNIT_DEFINES = @NUNIT_DEFINES@
NUNIT_LIBS = @NUNIT_LIBS@
OBJC = @OBJC@
OBJDUMP = @OBJDUMP@
@@ -260,6 +279,7 @@ top_build_prefix = @top_build_prefix@
top_builddir = @top_builddir@
top_srcdir = @top_srcdir@
EXTRA_DIST = \
+ $(srcdir)/f-spot/*.m4 \
$(srcdir)/shamrock/*.m4 \
$(srcdir)/shave/*.m4 \
$(srcdir)/shave/*.in
diff --git a/build/m4/f-spot/flickrnet.m4 b/build/m4/f-spot/flickrnet.m4
new file mode 100644
index 0000000..c1ce557
--- /dev/null
+++ b/build/m4/f-spot/flickrnet.m4
@@ -0,0 +1,8 @@
+AC_DEFUN([FSPOT_CHECK_FLICKRNET],
+[
+ FLICKRNET_REQUIRED=2.0
+
+ PKG_CHECK_MODULES(FLICKRNET,
+ flickrnet >= $FLICKRNET_REQUIRED)
+ AC_SUBST(FLICKRNET_LIBS)
+])
diff --git a/build/m4/f-spot/gnome-keyring-sharp.m4 b/build/m4/f-spot/gnome-keyring-sharp.m4
new file mode 100644
index 0000000..501314f
--- /dev/null
+++ b/build/m4/f-spot/gnome-keyring-sharp.m4
@@ -0,0 +1,8 @@
+AC_DEFUN([FSPOT_CHECK_GNOME_KEYRING_SHARP],
+[
+ GNOMEKEYRINGSHARP_REQUIRED=1.0
+
+ PKG_CHECK_MODULES(KEYRINGSHARP,
+ gnome-keyring-sharp-1.0 >= $GNOMEKEYRINGSHARP_REQUIRED)
+ AC_SUBST(KEYRINGSHARP_LIBS)
+])
diff --git a/build/m4/f-spot/gtk-sharp.m4 b/build/m4/f-spot/gtk-sharp.m4
new file mode 100644
index 0000000..4b3442a
--- /dev/null
+++ b/build/m4/f-spot/gtk-sharp.m4
@@ -0,0 +1,23 @@
+AC_DEFUN([FSPOT_CHECK_GTK_SHARP],
+[
+ GTKSHARP_REQUIRED=2.12.2
+
+ PKG_CHECK_MODULES(GTKSHARP,
+ gtk-sharp-2.0 >= $GTKSHARP_REQUIRED)
+ AC_SUBST(GTKSHARP_LIBS)
+
+ PKG_CHECK_MODULES(GLIBSHARP,
+ glib-sharp-2.0 >= $GTKSHARP_REQUIRED)
+ AC_SUBST(GLIBSHARP_LIBS)
+
+ PKG_CHECK_MODULES(GLIBSHARP_2_12_7,
+ glib-sharp-2.0 >= 2.12.7,
+ HAVE_GLIBSHARP_2_12_7=yes,
+ HAVE_GLIBSHARP_2_12_7=no)
+ AM_CONDITIONAL(HAVE_GLIBSHARP_2_12_7, [test "$HAVE_GLIBSHARP_2_12_7" = "yes"])
+
+ PKG_CHECK_MODULES(GTKSHARP_A11Y, gtk-sharp-2.0 >= 2.12.10, gtksharp_with_a11y=yes, gtksharp_with_a11y=no)
+ AM_CONDITIONAL(ENABLE_ATK, test "x$gtksharp_with_a11y" = "xyes")
+
+])
+
diff --git a/build/m4/f-spot/mono-addins.m4 b/build/m4/f-spot/mono-addins.m4
new file mode 100644
index 0000000..32a48c7
--- /dev/null
+++ b/build/m4/f-spot/mono-addins.m4
@@ -0,0 +1,12 @@
+AC_DEFUN([FSPOT_CHECK_MONO_ADDINS],
+[
+ PKG_CHECK_MODULES(MONO_ADDINS, mono-addins >= 0.3.1)
+ AC_SUBST(MONO_ADDINS_LIBS)
+
+ PKG_CHECK_MODULES(MONO_ADDINS_SETUP, mono-addins-setup >= 0.3.1)
+ AC_SUBST(MONO_ADDINS_SETUP_LIBS)
+
+ PKG_CHECK_MODULES(MONO_ADDINS_GUI, mono-addins-gui >= 0.3.1)
+ AC_SUBST(MONO_ADDINS_GUI_LIBS)
+])
+
diff --git a/build/m4/shamrock/gnome-doc.m4 b/build/m4/shamrock/gnome-doc.m4
new file mode 100644
index 0000000..e8896bd
--- /dev/null
+++ b/build/m4/shamrock/gnome-doc.m4
@@ -0,0 +1,6 @@
+AC_DEFUN([SHAMROCK_CHECK_GNOME_DOC_UTILS],
+[
+ GNOME_DOC_INIT([$1], HAVE_GNOME_DOC_UTILS=yes, HAVE_GNOME_DOC_UTILS=no)
+
+ AM_CONDITIONAL(ENABLE_GNOME_DOCS, test "x$HAVE_GNOME_DOC_UTILS" = "xyes")
+])
diff --git a/build/pkg-config/Makefile.am b/build/pkg-config/Makefile.am
new file mode 100644
index 0000000..43151d2
--- /dev/null
+++ b/build/pkg-config/Makefile.am
@@ -0,0 +1,11 @@
+pkgconfigdir = $(libdir)/pkgconfig
+pkgconfig_in_files = $(wildcard f-spot*.pc.in)
+pkgconfig_DATA = $(pkgconfig_in_files:.pc.in=.pc)
+
+%.pc: %.pc.in
+ sed "s,\@VERSION\@,$(VERSION),g; s,\@prefix\@,$(prefix),g; s,\@libdir\@,$(libdir),g" < $< > $@
+
+EXTRA_DIST = $(pkgconfig_in_files)
+
+CLEANFILES = $(pkgconfig_DATA)
+MAINTAINERCLEANFILES = Makefile.in
diff --git a/build/pkg-config/Makefile.in b/build/pkg-config/Makefile.in
new file mode 100644
index 0000000..21eaf71
--- /dev/null
+++ b/build/pkg-config/Makefile.in
@@ -0,0 +1,527 @@
+# Makefile.in generated by automake 1.11.1 from Makefile.am.
+# @configure_input@
+
+# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
+# 2003, 2004, 2005, 2006, 2007, 2008, 2009 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.
+
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
+# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
+# PARTICULAR PURPOSE.
+
+ at SET_MAKE@
+
+VPATH = @srcdir@
+pkgdatadir = $(datadir)/@PACKAGE@
+pkgincludedir = $(includedir)/@PACKAGE@
+pkglibdir = $(libdir)/@PACKAGE@
+pkglibexecdir = $(libexecdir)/@PACKAGE@
+am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
+install_sh_DATA = $(install_sh) -c -m 644
+install_sh_PROGRAM = $(install_sh) -c
+install_sh_SCRIPT = $(install_sh) -c
+INSTALL_HEADER = $(INSTALL_DATA)
+transform = $(program_transform_name)
+NORMAL_INSTALL = :
+PRE_INSTALL = :
+POST_INSTALL = :
+NORMAL_UNINSTALL = :
+PRE_UNINSTALL = :
+POST_UNINSTALL = :
+build_triplet = @build@
+host_triplet = @host@
+subdir = build/pkg-config
+DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in
+ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
+am__aclocal_m4_deps = $(top_srcdir)/build/m4/shave/shave.m4 \
+ $(top_srcdir)/build/m4/shamrock/expansions.m4 \
+ $(top_srcdir)/build/m4/shamrock/gnome-doc.m4 \
+ $(top_srcdir)/build/m4/shamrock/mono.m4 \
+ $(top_srcdir)/build/m4/shamrock/nunit.m4 \
+ $(top_srcdir)/build/m4/shamrock/programs.m4 \
+ $(top_srcdir)/build/m4/f-spot/flickrnet.m4 \
+ $(top_srcdir)/build/m4/f-spot/gnome-keyring-sharp.m4 \
+ $(top_srcdir)/build/m4/f-spot/gtk-sharp.m4 \
+ $(top_srcdir)/build/m4/f-spot/mono-addins.m4 \
+ $(top_srcdir)/acinclude.m4 $(top_srcdir)/configure.ac
+am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
+ $(ACLOCAL_M4)
+mkinstalldirs = $(install_sh) -d
+CONFIG_HEADER = $(top_builddir)/config.h
+CONFIG_CLEAN_FILES =
+CONFIG_CLEAN_VPATH_FILES =
+SOURCES =
+DIST_SOURCES =
+am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`;
+am__vpath_adj = case $$p in \
+ $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \
+ *) f=$$p;; \
+ esac;
+am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`;
+am__install_max = 40
+am__nobase_strip_setup = \
+ srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'`
+am__nobase_strip = \
+ for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||"
+am__nobase_list = $(am__nobase_strip_setup); \
+ for p in $$list; do echo "$$p $$p"; done | \
+ sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \
+ $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \
+ if (++n[$$2] == $(am__install_max)) \
+ { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \
+ END { for (dir in files) print dir, files[dir] }'
+am__base_list = \
+ sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \
+ sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g'
+am__installdirs = "$(DESTDIR)$(pkgconfigdir)"
+DATA = $(pkgconfig_DATA)
+DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
+ACLOCAL = @ACLOCAL@
+ACLOCAL_AMFLAGS = @ACLOCAL_AMFLAGS@
+ALL_LINGUAS = @ALL_LINGUAS@
+AMTAR = @AMTAR@
+AM_MAKEFLAGS = @AM_MAKEFLAGS@
+API_VERSION = @API_VERSION@
+AR = @AR@
+ASM_VERSION = @ASM_VERSION@
+AUTOCONF = @AUTOCONF@
+AUTOHEADER = @AUTOHEADER@
+AUTOMAKE = @AUTOMAKE@
+AWK = @AWK@
+CATALOGS = @CATALOGS@
+CATOBJEXT = @CATOBJEXT@
+CC = @CC@
+CCDEPMODE = @CCDEPMODE@
+CFLAGS = @CFLAGS@
+CPP = @CPP@
+CPPFLAGS = @CPPFLAGS@
+CSC_DEFINES = @CSC_DEFINES@
+CXX = @CXX@
+CXXCPP = @CXXCPP@
+CXXDEPMODE = @CXXDEPMODE@
+CXXFLAGS = @CXXFLAGS@
+CYGPATH_W = @CYGPATH_W@
+DATADIRNAME = @DATADIRNAME@
+DEFS = @DEFS@
+DEPDIR = @DEPDIR@
+DISPLAY_VERSION = @DISPLAY_VERSION@
+DISTCHECK_CONFIGURE_FLAGS = @DISTCHECK_CONFIGURE_FLAGS@
+DOC_USER_FORMATS = @DOC_USER_FORMATS@
+DSYMUTIL = @DSYMUTIL@
+DUMPBIN = @DUMPBIN@
+ECHO_C = @ECHO_C@
+ECHO_N = @ECHO_N@
+ECHO_T = @ECHO_T@
+EGREP = @EGREP@
+EXEEXT = @EXEEXT@
+EXIF_CFLAGS = @EXIF_CFLAGS@
+EXIF_LIBS = @EXIF_LIBS@
+EXIF_SOVERSION = @EXIF_SOVERSION@
+F77 = @F77@
+FC = @FC@
+FGREP = @FGREP@
+FLICKRNET_CFLAGS = @FLICKRNET_CFLAGS@
+FLICKRNET_LIBS = @FLICKRNET_LIBS@
+F_CFLAGS = @F_CFLAGS@
+F_LIBS = @F_LIBS@
+GAPI2CODEGEN = @GAPI2CODEGEN@
+GAPI2FIXUP = @GAPI2FIXUP@
+GAPI2PARSER = @GAPI2PARSER@
+GCONFTOOL = @GCONFTOOL@
+GCONF_SCHEMA_CONFIG_SOURCE = @GCONF_SCHEMA_CONFIG_SOURCE@
+GCONF_SCHEMA_FILE_DIR = @GCONF_SCHEMA_FILE_DIR@
+GCONF_SHARP_CFLAGS = @GCONF_SHARP_CFLAGS@
+GCONF_SHARP_LIBS = @GCONF_SHARP_LIBS@
+GETTEXT_PACKAGE = @GETTEXT_PACKAGE@
+GIO_CFLAGS = @GIO_CFLAGS@
+GIO_LIBS = @GIO_LIBS@
+GLIBSHARP_2_12_7_CFLAGS = @GLIBSHARP_2_12_7_CFLAGS@
+GLIBSHARP_2_12_7_LIBS = @GLIBSHARP_2_12_7_LIBS@
+GLIBSHARP_CFLAGS = @GLIBSHARP_CFLAGS@
+GLIBSHARP_LIBS = @GLIBSHARP_LIBS@
+GLIB_CFLAGS = @GLIB_CFLAGS@
+GLIB_GENMARSHAL = @GLIB_GENMARSHAL@
+GLIB_LIBS = @GLIB_LIBS@
+GLIB_MKENUMS = @GLIB_MKENUMS@
+GMOFILES = @GMOFILES@
+GMSGFMT = @GMSGFMT@
+GNOME_ICON_THEME_PREFIX = @GNOME_ICON_THEME_PREFIX@
+GNOME_SCREENSAVER_SAVERDIR = @GNOME_SCREENSAVER_SAVERDIR@
+GNOME_SCREENSAVER_THEMESDIR = @GNOME_SCREENSAVER_THEMESDIR@
+GNOME_SHARP_CFLAGS = @GNOME_SHARP_CFLAGS@
+GNOME_SHARP_LIBS = @GNOME_SHARP_LIBS@
+GOBJECT_QUERY = @GOBJECT_QUERY@
+GREP = @GREP@
+GTKSHARP_A11Y_CFLAGS = @GTKSHARP_A11Y_CFLAGS@
+GTKSHARP_A11Y_LIBS = @GTKSHARP_A11Y_LIBS@
+GTKSHARP_CFLAGS = @GTKSHARP_CFLAGS@
+GTKSHARP_LIBS = @GTKSHARP_LIBS@
+HELP_DIR = @HELP_DIR@
+ICONS_DIRECTORY = @ICONS_DIRECTORY@
+INSTALL = @INSTALL@
+INSTALL_DATA = @INSTALL_DATA@
+INSTALL_PROGRAM = @INSTALL_PROGRAM@
+INSTALL_SCRIPT = @INSTALL_SCRIPT@
+INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
+INSTOBJEXT = @INSTOBJEXT@
+INTLLIBS = @INTLLIBS@
+INTLTOOL_EXTRACT = @INTLTOOL_EXTRACT@
+INTLTOOL_MERGE = @INTLTOOL_MERGE@
+INTLTOOL_PERL = @INTLTOOL_PERL@
+INTLTOOL_UPDATE = @INTLTOOL_UPDATE@
+KEYRINGSHARP_CFLAGS = @KEYRINGSHARP_CFLAGS@
+KEYRINGSHARP_LIBS = @KEYRINGSHARP_LIBS@
+LCMS_CFLAGS = @LCMS_CFLAGS@
+LCMS_LIBS = @LCMS_LIBS@
+LD = @LD@
+LDFLAGS = @LDFLAGS@
+LIBEXIF_VERSION_CHECK_CFLAGS = @LIBEXIF_VERSION_CHECK_CFLAGS@
+LIBEXIF_VERSION_CHECK_LIBS = @LIBEXIF_VERSION_CHECK_LIBS@
+LIBJPEG = @LIBJPEG@
+LIBOBJS = @LIBOBJS@
+LIBS = @LIBS@
+LIBTOOL = @LIBTOOL@
+LIPO = @LIPO@
+LN_S = @LN_S@
+LTLIBOBJS = @LTLIBOBJS@
+MAINT = @MAINT@
+MAKEFLAGS = @MAKEFLAGS@
+MAKEINFO = @MAKEINFO@
+MCS = @MCS@
+MKDIR_P = @MKDIR_P@
+MKINSTALLDIRS = @MKINSTALLDIRS@
+MONO = @MONO@
+MONO_ADDINS_CFLAGS = @MONO_ADDINS_CFLAGS@
+MONO_ADDINS_GUI_CFLAGS = @MONO_ADDINS_GUI_CFLAGS@
+MONO_ADDINS_GUI_LIBS = @MONO_ADDINS_GUI_LIBS@
+MONO_ADDINS_LIBS = @MONO_ADDINS_LIBS@
+MONO_ADDINS_SETUP_CFLAGS = @MONO_ADDINS_SETUP_CFLAGS@
+MONO_ADDINS_SETUP_LIBS = @MONO_ADDINS_SETUP_LIBS@
+MONO_MODULE_CFLAGS = @MONO_MODULE_CFLAGS@
+MONO_MODULE_LIBS = @MONO_MODULE_LIBS@
+MSGFMT = @MSGFMT@
+MSGFMT_OPTS = @MSGFMT_OPTS@
+MSGMERGE = @MSGMERGE@
+NDESK_DBUS_CFLAGS = @NDESK_DBUS_CFLAGS@
+NDESK_DBUS_LIBS = @NDESK_DBUS_LIBS@
+NM = @NM@
+NMEDIT = @NMEDIT@
+NUNIT_CFLAGS = @NUNIT_CFLAGS@
+NUNIT_LIBS = @NUNIT_LIBS@
+OBJC = @OBJC@
+OBJDUMP = @OBJDUMP@
+OBJEXT = @OBJEXT@
+OMF_DIR = @OMF_DIR@
+OTOOL = @OTOOL@
+OTOOL64 = @OTOOL64@
+PACKAGE = @PACKAGE@
+PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
+PACKAGE_NAME = @PACKAGE_NAME@
+PACKAGE_STRING = @PACKAGE_STRING@
+PACKAGE_TARNAME = @PACKAGE_TARNAME@
+PACKAGE_URL = @PACKAGE_URL@
+PACKAGE_VERSION = @PACKAGE_VERSION@
+PATH_SEPARATOR = @PATH_SEPARATOR@
+PKG_CONFIG = @PKG_CONFIG@
+POFILES = @POFILES@
+POSUB = @POSUB@
+PO_IN_DATADIR_FALSE = @PO_IN_DATADIR_FALSE@
+PO_IN_DATADIR_TRUE = @PO_IN_DATADIR_TRUE@
+Q = @Q@
+RANLIB = @RANLIB@
+SED = @SED@
+SET_MAKE = @SET_MAKE@
+SHELL = @SHELL@
+STRIP = @STRIP@
+TURTLEDIR = @TURTLEDIR@
+UNIQUE_CFLAGS = @UNIQUE_CFLAGS@
+UNIQUE_LIBS = @UNIQUE_LIBS@
+USE_NLS = @USE_NLS@
+V = @V@
+VERSION = @VERSION@
+WARN_CFLAGS = @WARN_CFLAGS@
+XGETTEXT = @XGETTEXT@
+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_DUMPBIN = @ac_ct_DUMPBIN@
+am__include = @am__include@
+am__leading_dot = @am__leading_dot@
+am__quote = @am__quote@
+am__tar = @am__tar@
+am__untar = @am__untar@
+bindir = @bindir@
+build = @build@
+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@
+expanded_bindir = @expanded_bindir@
+expanded_datadir = @expanded_datadir@
+expanded_libdir = @expanded_libdir@
+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@
+lt_ECHO = @lt_ECHO@
+mandir = @mandir@
+mkdir_p = @mkdir_p@
+oldincludedir = @oldincludedir@
+pdfdir = @pdfdir@
+prefix = @prefix@
+program_transform_name = @program_transform_name@
+psdir = @psdir@
+sbindir = @sbindir@
+sharedstatedir = @sharedstatedir@
+shavedir = @shavedir@
+srcdir = @srcdir@
+sysconfdir = @sysconfdir@
+target_alias = @target_alias@
+top_build_prefix = @top_build_prefix@
+top_builddir = @top_builddir@
+top_srcdir = @top_srcdir@
+pkgconfigdir = $(libdir)/pkgconfig
+pkgconfig_in_files = $(wildcard f-spot*.pc.in)
+pkgconfig_DATA = $(pkgconfig_in_files:.pc.in=.pc)
+EXTRA_DIST = $(pkgconfig_in_files)
+CLEANFILES = $(pkgconfig_DATA)
+MAINTAINERCLEANFILES = Makefile.in
+all: all-am
+
+.SUFFIXES:
+$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(am__configure_deps)
+ @for dep in $?; do \
+ case '$(am__configure_deps)' in \
+ *$$dep*) \
+ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \
+ && { if test -f $@; then exit 0; else break; fi; }; \
+ exit 1;; \
+ esac; \
+ done; \
+ echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign build/pkg-config/Makefile'; \
+ $(am__cd) $(top_srcdir) && \
+ $(AUTOMAKE) --foreign build/pkg-config/Makefile
+.PRECIOUS: Makefile
+Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
+ @case '$?' in \
+ *config.status*) \
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \
+ *) \
+ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \
+ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \
+ esac;
+
+$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+
+$(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps)
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps)
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(am__aclocal_m4_deps):
+
+mostlyclean-libtool:
+ -rm -f *.lo
+
+clean-libtool:
+ -rm -rf .libs _libs
+install-pkgconfigDATA: $(pkgconfig_DATA)
+ @$(NORMAL_INSTALL)
+ test -z "$(pkgconfigdir)" || $(MKDIR_P) "$(DESTDIR)$(pkgconfigdir)"
+ @list='$(pkgconfig_DATA)'; test -n "$(pkgconfigdir)" || list=; \
+ for p in $$list; do \
+ if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \
+ echo "$$d$$p"; \
+ done | $(am__base_list) | \
+ while read files; do \
+ echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(pkgconfigdir)'"; \
+ $(INSTALL_DATA) $$files "$(DESTDIR)$(pkgconfigdir)" || exit $$?; \
+ done
+
+uninstall-pkgconfigDATA:
+ @$(NORMAL_UNINSTALL)
+ @list='$(pkgconfig_DATA)'; test -n "$(pkgconfigdir)" || list=; \
+ files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \
+ test -n "$$files" || exit 0; \
+ echo " ( cd '$(DESTDIR)$(pkgconfigdir)' && rm -f" $$files ")"; \
+ cd "$(DESTDIR)$(pkgconfigdir)" && rm -f $$files
+tags: TAGS
+TAGS:
+
+ctags: CTAGS
+CTAGS:
+
+
+distdir: $(DISTFILES)
+ @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; \
+ if test -d $$d/$$file; then \
+ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \
+ if test -d "$(distdir)/$$file"; then \
+ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
+ fi; \
+ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
+ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \
+ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
+ fi; \
+ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \
+ else \
+ test -f "$(distdir)/$$file" \
+ || cp -p $$d/$$file "$(distdir)/$$file" \
+ || exit 1; \
+ fi; \
+ done
+check-am: all-am
+check: check-am
+all-am: Makefile $(DATA)
+installdirs:
+ for dir in "$(DESTDIR)$(pkgconfigdir)"; do \
+ test -z "$$dir" || $(MKDIR_P) "$$dir"; \
+ done
+install: install-am
+install-exec: install-exec-am
+install-data: install-data-am
+uninstall: uninstall-am
+
+install-am: all-am
+ @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
+
+installcheck: installcheck-am
+install-strip:
+ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+ `test -z '$(STRIP)' || \
+ echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install
+mostlyclean-generic:
+
+clean-generic:
+ -test -z "$(CLEANFILES)" || rm -f $(CLEANFILES)
+
+distclean-generic:
+ -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
+ -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES)
+
+maintainer-clean-generic:
+ @echo "This command is intended for maintainers to use"
+ @echo "it deletes files that may require special tools to rebuild."
+ -test -z "$(MAINTAINERCLEANFILES)" || rm -f $(MAINTAINERCLEANFILES)
+clean: clean-am
+
+clean-am: clean-generic clean-libtool mostlyclean-am
+
+distclean: distclean-am
+ -rm -f Makefile
+distclean-am: clean-am distclean-generic
+
+dvi: dvi-am
+
+dvi-am:
+
+html: html-am
+
+html-am:
+
+info: info-am
+
+info-am:
+
+install-data-am: install-pkgconfigDATA
+
+install-dvi: install-dvi-am
+
+install-dvi-am:
+
+install-exec-am:
+
+install-html: install-html-am
+
+install-html-am:
+
+install-info: install-info-am
+
+install-info-am:
+
+install-man:
+
+install-pdf: install-pdf-am
+
+install-pdf-am:
+
+install-ps: install-ps-am
+
+install-ps-am:
+
+installcheck-am:
+
+maintainer-clean: maintainer-clean-am
+ -rm -f Makefile
+maintainer-clean-am: distclean-am maintainer-clean-generic
+
+mostlyclean: mostlyclean-am
+
+mostlyclean-am: mostlyclean-generic mostlyclean-libtool
+
+pdf: pdf-am
+
+pdf-am:
+
+ps: ps-am
+
+ps-am:
+
+uninstall-am: uninstall-pkgconfigDATA
+
+.MAKE: install-am install-strip
+
+.PHONY: all all-am check check-am clean clean-generic clean-libtool \
+ distclean distclean-generic distclean-libtool distdir dvi \
+ dvi-am html html-am info info-am 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-pkgconfigDATA install-ps install-ps-am \
+ install-strip installcheck installcheck-am installdirs \
+ maintainer-clean maintainer-clean-generic mostlyclean \
+ mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \
+ uninstall uninstall-am uninstall-pkgconfigDATA
+
+
+%.pc: %.pc.in
+ sed "s,\@VERSION\@,$(VERSION),g; s,\@prefix\@,$(prefix),g; s,\@libdir\@,$(libdir),g" < $< > $@
+
+# 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.
+.NOEXPORT:
diff --git a/f-spot.pc.in b/build/pkg-config/f-spot.pc.in
similarity index 100%
rename from f-spot.pc.in
rename to build/pkg-config/f-spot.pc.in
diff --git a/build/private-icon-theme-installer b/build/private-icon-theme-installer
new file mode 100755
index 0000000..00f0ffe
--- /dev/null
+++ b/build/private-icon-theme-installer
@@ -0,0 +1,23 @@
+#!/usr/bin/env bash
+
+mkinstalldirs=$1; shift
+install_data=$1; shift
+action=$1; shift
+dest_dir=$1; shift
+src_dir=$1; shift
+
+for icon in $@; do
+ dest_dir_build="${dest_dir}/icons/hicolor/$(dirname ${icon})"
+ if [[ ${action} == "-i" || ${action} == "-il" ]]; then
+ src_file="${src_dir}/ThemeIcons/${icon}"
+ $mkinstalldirs "${dest_dir_build}" &>/dev/null
+ if [[ ${action} == "-i" ]]; then
+ echo "Installing private icon theme icon: ${icon}"
+ fi
+ $install_data "${src_file}" "${dest_dir_build}"
+ else
+ echo "Uninstalling private icon theme icon: ${icon}"
+ rm -f "${dest_dir_build}/$(basename ${icon})"
+ fi
+done
+
diff --git a/configure b/configure
index 23ffd35..93fd60b 100755
--- a/configure
+++ b/configure
@@ -1,6 +1,6 @@
#! /bin/sh
# Guess values for system-dependent variables and create Makefiles.
-# Generated by GNU Autoconf 2.65 for f-spot 0.6.2.
+# Generated by GNU Autoconf 2.65 for f-spot 0.7.0.
#
# Report bugs to <http://bugzilla.gnome.org/enter_bug.cgi?product=f-spot>.
#
@@ -702,8 +702,8 @@ MAKEFLAGS=
# Identity of this package.
PACKAGE_NAME='f-spot'
PACKAGE_TARNAME='f-spot'
-PACKAGE_VERSION='0.6.2'
-PACKAGE_STRING='f-spot 0.6.2'
+PACKAGE_VERSION='0.7.0'
+PACKAGE_STRING='f-spot 0.7.0'
PACKAGE_BUGREPORT='http://bugzilla.gnome.org/enter_bug.cgi?product=f-spot'
PACKAGE_URL=''
@@ -783,18 +783,17 @@ LIBEXIF_VERSION_CHECK_LIBS
LIBEXIF_VERSION_CHECK_CFLAGS
EXIF_LIBS
EXIF_CFLAGS
-CSC_DEFINES
-LIBGPHOTO2_LIBS
-LIBGPHOTO2_CFLAGS
LCMS_LIBS
LCMS_CFLAGS
-NUNIT_DEFINES
-ENABLE_TESTS_FALSE
-ENABLE_TESTS_TRUE
-NUNIT_LIBS
-NUNIT_CFLAGS
NDESK_DBUS_LIBS
NDESK_DBUS_CFLAGS
+MONO_ADDINS_GUI_LIBS
+MONO_ADDINS_GUI_CFLAGS
+MONO_ADDINS_SETUP_LIBS
+MONO_ADDINS_SETUP_CFLAGS
+MONO_ADDINS_LIBS
+MONO_ADDINS_CFLAGS
+CSC_DEFINES
GCONF_SHARP_LIBS
GCONF_SHARP_CFLAGS
GCONF_SCHEMAS_INSTALL_FALSE
@@ -804,21 +803,12 @@ GCONF_SCHEMA_CONFIG_SOURCE
GCONFTOOL
NOGCONF_FALSE
NOGCONF_TRUE
-GLIBSHARP_LIBS
-GLIBSHARP_CFLAGS
GNOME_SHARP_LIBS
GNOME_SHARP_CFLAGS
GIO_LIBS
GIO_CFLAGS
F_LIBS
F_CFLAGS
-HAVE_GNOME_DOC_UTILS_FALSE
-HAVE_GNOME_DOC_UTILS_TRUE
-ENABLE_SK_FALSE
-ENABLE_SK_TRUE
-DOC_USER_FORMATS
-OMF_DIR
-HELP_DIR
GAPI2CODEGEN
GAPI2PARSER
GAPI2FIXUP
@@ -835,10 +825,39 @@ CXXDEPMODE
ac_ct_CXX
CXXFLAGS
CXX
+NUNIT_LIBS
+NUNIT_CFLAGS
+ENABLE_TESTS_FALSE
+ENABLE_TESTS_TRUE
+FLICKRNET_LIBS
+FLICKRNET_CFLAGS
+KEYRINGSHARP_LIBS
+KEYRINGSHARP_CFLAGS
+ENABLE_ATK_FALSE
+ENABLE_ATK_TRUE
+GTKSHARP_A11Y_LIBS
+GTKSHARP_A11Y_CFLAGS
+HAVE_GLIBSHARP_2_12_7_FALSE
+HAVE_GLIBSHARP_2_12_7_TRUE
+GLIBSHARP_2_12_7_LIBS
+GLIBSHARP_2_12_7_CFLAGS
+GLIBSHARP_LIBS
+GLIBSHARP_CFLAGS
+GTKSHARP_LIBS
+GTKSHARP_CFLAGS
MONO
MCS
MONO_MODULE_LIBS
MONO_MODULE_CFLAGS
+ENABLE_GNOME_DOCS_FALSE
+ENABLE_GNOME_DOCS_TRUE
+HAVE_GNOME_DOC_UTILS_FALSE
+HAVE_GNOME_DOC_UTILS_TRUE
+ENABLE_SK_FALSE
+ENABLE_SK_TRUE
+DOC_USER_FORMATS
+OMF_DIR
+HELP_DIR
PKG_CONFIG
expanded_datadir
expanded_bindir
@@ -998,13 +1017,14 @@ with_pic
enable_fast_install
with_gnu_ld
enable_libtool_lock
-enable_compile_warnings
-enable_iso_c
-enable_glibtest
with_help_dir
with_omf_dir
with_help_formats
enable_scrollkeeper
+enable_tests
+enable_compile_warnings
+enable_iso_c
+enable_glibtest
enable_gconf
with_gconf_source
with_gconf_schema_file_dir
@@ -1027,6 +1047,20 @@ CPP
PKG_CONFIG
MONO_MODULE_CFLAGS
MONO_MODULE_LIBS
+GTKSHARP_CFLAGS
+GTKSHARP_LIBS
+GLIBSHARP_CFLAGS
+GLIBSHARP_LIBS
+GLIBSHARP_2_12_7_CFLAGS
+GLIBSHARP_2_12_7_LIBS
+GTKSHARP_A11Y_CFLAGS
+GTKSHARP_A11Y_LIBS
+KEYRINGSHARP_CFLAGS
+KEYRINGSHARP_LIBS
+FLICKRNET_CFLAGS
+FLICKRNET_LIBS
+NUNIT_CFLAGS
+NUNIT_LIBS
CXX
CXXFLAGS
CCC
@@ -1037,18 +1071,18 @@ GIO_CFLAGS
GIO_LIBS
GNOME_SHARP_CFLAGS
GNOME_SHARP_LIBS
-GLIBSHARP_CFLAGS
-GLIBSHARP_LIBS
GCONF_SHARP_CFLAGS
GCONF_SHARP_LIBS
+MONO_ADDINS_CFLAGS
+MONO_ADDINS_LIBS
+MONO_ADDINS_SETUP_CFLAGS
+MONO_ADDINS_SETUP_LIBS
+MONO_ADDINS_GUI_CFLAGS
+MONO_ADDINS_GUI_LIBS
NDESK_DBUS_CFLAGS
NDESK_DBUS_LIBS
-NUNIT_CFLAGS
-NUNIT_LIBS
LCMS_CFLAGS
LCMS_LIBS
-LIBGPHOTO2_CFLAGS
-LIBGPHOTO2_LIBS
EXIF_CFLAGS
EXIF_LIBS
LIBEXIF_VERSION_CHECK_CFLAGS
@@ -1596,7 +1630,7 @@ if test "$ac_init_help" = "long"; then
# Omit some internal or obsolete options to make the list less imposing.
# This message is too long to be a string in the A/UX 3.1 sh.
cat <<_ACEOF
-\`configure' configures f-spot 0.6.2 to adapt to many kinds of systems.
+\`configure' configures f-spot 0.7.0 to adapt to many kinds of systems.
Usage: $0 [OPTION]... [VAR=VALUE]...
@@ -1666,7 +1700,7 @@ fi
if test -n "$ac_init_help"; then
case $ac_init_help in
- short | recursive ) echo "Configuration of f-spot 0.6.2:";;
+ short | recursive ) echo "Configuration of f-spot 0.7.0:";;
esac
cat <<\_ACEOF
@@ -1684,11 +1718,12 @@ Optional Features:
--enable-fast-install[=PKGS]
optimize for fast installation [default=yes]
--disable-libtool-lock avoid locking (might break parallel builds)
+ --disable-scrollkeeper do not make updates to the scrollkeeper database
+ --enable-tests Enable NUnit tests
--enable-compile-warnings=[no/minimum/yes/maximum/error]
Turn on compiler warnings
--enable-iso-c Try to warn if code is not ISO C
--disable-glibtest do not try to compile and run a test GLIB program
- --disable-scrollkeeper do not make updates to the scrollkeeper database
--disable-gconf build without gconf preference backend
--disable-schemas-install
Disable the schemas installation
@@ -1727,6 +1762,33 @@ Some influential environment variables:
C compiler flags for MONO_MODULE, overriding pkg-config
MONO_MODULE_LIBS
linker flags for MONO_MODULE, overriding pkg-config
+ GTKSHARP_CFLAGS
+ C compiler flags for GTKSHARP, overriding pkg-config
+ GTKSHARP_LIBS
+ linker flags for GTKSHARP, overriding pkg-config
+ GLIBSHARP_CFLAGS
+ C compiler flags for GLIBSHARP, overriding pkg-config
+ GLIBSHARP_LIBS
+ linker flags for GLIBSHARP, overriding pkg-config
+ GLIBSHARP_2_12_7_CFLAGS
+ C compiler flags for GLIBSHARP_2_12_7, overriding pkg-config
+ GLIBSHARP_2_12_7_LIBS
+ linker flags for GLIBSHARP_2_12_7, overriding pkg-config
+ GTKSHARP_A11Y_CFLAGS
+ C compiler flags for GTKSHARP_A11Y, overriding pkg-config
+ GTKSHARP_A11Y_LIBS
+ linker flags for GTKSHARP_A11Y, overriding pkg-config
+ KEYRINGSHARP_CFLAGS
+ C compiler flags for KEYRINGSHARP, overriding pkg-config
+ KEYRINGSHARP_LIBS
+ linker flags for KEYRINGSHARP, overriding pkg-config
+ FLICKRNET_CFLAGS
+ C compiler flags for FLICKRNET, overriding pkg-config
+ FLICKRNET_LIBS
+ linker flags for FLICKRNET, overriding pkg-config
+ NUNIT_CFLAGS
+ C compiler flags for NUNIT, overriding pkg-config
+ NUNIT_LIBS linker flags for NUNIT, overriding pkg-config
CXX C++ compiler command
CXXFLAGS C++ compiler flags
CXXCPP C++ preprocessor
@@ -1738,27 +1800,28 @@ Some influential environment variables:
C compiler flags for GNOME_SHARP, overriding pkg-config
GNOME_SHARP_LIBS
linker flags for GNOME_SHARP, overriding pkg-config
- GLIBSHARP_CFLAGS
- C compiler flags for GLIBSHARP, overriding pkg-config
- GLIBSHARP_LIBS
- linker flags for GLIBSHARP, overriding pkg-config
GCONF_SHARP_CFLAGS
C compiler flags for GCONF_SHARP, overriding pkg-config
GCONF_SHARP_LIBS
linker flags for GCONF_SHARP, overriding pkg-config
+ MONO_ADDINS_CFLAGS
+ C compiler flags for MONO_ADDINS, overriding pkg-config
+ MONO_ADDINS_LIBS
+ linker flags for MONO_ADDINS, overriding pkg-config
+ MONO_ADDINS_SETUP_CFLAGS
+ C compiler flags for MONO_ADDINS_SETUP, overriding pkg-config
+ MONO_ADDINS_SETUP_LIBS
+ linker flags for MONO_ADDINS_SETUP, overriding pkg-config
+ MONO_ADDINS_GUI_CFLAGS
+ C compiler flags for MONO_ADDINS_GUI, overriding pkg-config
+ MONO_ADDINS_GUI_LIBS
+ linker flags for MONO_ADDINS_GUI, overriding pkg-config
NDESK_DBUS_CFLAGS
C compiler flags for NDESK_DBUS, overriding pkg-config
NDESK_DBUS_LIBS
linker flags for NDESK_DBUS, overriding pkg-config
- NUNIT_CFLAGS
- C compiler flags for NUNIT, overriding pkg-config
- NUNIT_LIBS linker flags for NUNIT, overriding pkg-config
LCMS_CFLAGS C compiler flags for LCMS, overriding pkg-config
LCMS_LIBS linker flags for LCMS, overriding pkg-config
- LIBGPHOTO2_CFLAGS
- C compiler flags for LIBGPHOTO2, overriding pkg-config
- LIBGPHOTO2_LIBS
- linker flags for LIBGPHOTO2, overriding pkg-config
EXIF_CFLAGS C compiler flags for EXIF, overriding pkg-config
EXIF_LIBS linker flags for EXIF, overriding pkg-config
LIBEXIF_VERSION_CHECK_CFLAGS
@@ -1836,7 +1899,7 @@ fi
test -n "$ac_init_help" && exit $ac_status
if $ac_init_version; then
cat <<\_ACEOF
-f-spot configure 0.6.2
+f-spot configure 0.7.0
generated by GNU Autoconf 2.65
Copyright (C) 2009 Free Software Foundation, Inc.
@@ -2328,7 +2391,7 @@ cat >config.log <<_ACEOF
This file contains any messages produced by compilers while
running configure, to aid debugging if configure makes a mistake.
-It was created by f-spot $as_me 0.6.2, which was
+It was created by f-spot $as_me 0.7.0, which was
generated by GNU Autoconf 2.65. Invocation command line was
$ $0 $@
@@ -3137,7 +3200,7 @@ fi
# Define the identity of the package.
PACKAGE='f-spot'
- VERSION='0.6.2'
+ VERSION='0.7.0'
cat >>confdefs.h <<_ACEOF
@@ -3283,7 +3346,7 @@ fi
ac_config_headers="$ac_config_headers config.h"
-ACLOCAL_AMFLAGS="-I build/m4/shamrock -I build/m4/shave \${ACLOCAL_FLAGS}"
+ACLOCAL_AMFLAGS="-I build/m4/f-spot -I build/m4/shamrock -I build/m4/shave \${ACLOCAL_FLAGS}"
@@ -5505,13 +5568,13 @@ if test "${lt_cv_nm_interface+set}" = set; then :
else
lt_cv_nm_interface="BSD nm"
echo "int some_variable = 0;" > conftest.$ac_ext
- (eval echo "\"\$as_me:5508: $ac_compile\"" >&5)
+ (eval echo "\"\$as_me:5571: $ac_compile\"" >&5)
(eval "$ac_compile" 2>conftest.err)
cat conftest.err >&5
- (eval echo "\"\$as_me:5511: $NM \\\"conftest.$ac_objext\\\"\"" >&5)
+ (eval echo "\"\$as_me:5574: $NM \\\"conftest.$ac_objext\\\"\"" >&5)
(eval "$NM \"conftest.$ac_objext\"" 2>conftest.err > conftest.out)
cat conftest.err >&5
- (eval echo "\"\$as_me:5514: output\"" >&5)
+ (eval echo "\"\$as_me:5577: output\"" >&5)
cat conftest.out >&5
if $GREP 'External.*some_variable' conftest.out > /dev/null; then
lt_cv_nm_interface="MS dumpbin"
@@ -6716,7 +6779,7 @@ ia64-*-hpux*)
;;
*-*-irix6*)
# Find out which ABI we are using.
- echo '#line 6719 "configure"' > conftest.$ac_ext
+ echo '#line 6782 "configure"' > conftest.$ac_ext
if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5
(eval $ac_compile) 2>&5
ac_status=$?
@@ -8242,11 +8305,11 @@ else
-e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \
-e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \
-e 's:$: $lt_compiler_flag:'`
- (eval echo "\"\$as_me:8245: $lt_compile\"" >&5)
+ (eval echo "\"\$as_me:8308: $lt_compile\"" >&5)
(eval "$lt_compile" 2>conftest.err)
ac_status=$?
cat conftest.err >&5
- echo "$as_me:8249: \$? = $ac_status" >&5
+ echo "$as_me:8312: \$? = $ac_status" >&5
if (exit $ac_status) && test -s "$ac_outfile"; then
# The compiler can only warn and ignore the option if not recognized
# So say no if there are warnings other than the usual output.
@@ -8581,11 +8644,11 @@ else
-e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \
-e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \
-e 's:$: $lt_compiler_flag:'`
- (eval echo "\"\$as_me:8584: $lt_compile\"" >&5)
+ (eval echo "\"\$as_me:8647: $lt_compile\"" >&5)
(eval "$lt_compile" 2>conftest.err)
ac_status=$?
cat conftest.err >&5
- echo "$as_me:8588: \$? = $ac_status" >&5
+ echo "$as_me:8651: \$? = $ac_status" >&5
if (exit $ac_status) && test -s "$ac_outfile"; then
# The compiler can only warn and ignore the option if not recognized
# So say no if there are warnings other than the usual output.
@@ -8686,11 +8749,11 @@ else
-e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \
-e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \
-e 's:$: $lt_compiler_flag:'`
- (eval echo "\"\$as_me:8689: $lt_compile\"" >&5)
+ (eval echo "\"\$as_me:8752: $lt_compile\"" >&5)
(eval "$lt_compile" 2>out/conftest.err)
ac_status=$?
cat out/conftest.err >&5
- echo "$as_me:8693: \$? = $ac_status" >&5
+ echo "$as_me:8756: \$? = $ac_status" >&5
if (exit $ac_status) && test -s out/conftest2.$ac_objext
then
# The compiler can only warn and ignore the option if not recognized
@@ -8741,11 +8804,11 @@ else
-e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \
-e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \
-e 's:$: $lt_compiler_flag:'`
- (eval echo "\"\$as_me:8744: $lt_compile\"" >&5)
+ (eval echo "\"\$as_me:8807: $lt_compile\"" >&5)
(eval "$lt_compile" 2>out/conftest.err)
ac_status=$?
cat out/conftest.err >&5
- echo "$as_me:8748: \$? = $ac_status" >&5
+ echo "$as_me:8811: \$? = $ac_status" >&5
if (exit $ac_status) && test -s out/conftest2.$ac_objext
then
# The compiler can only warn and ignore the option if not recognized
@@ -11111,7 +11174,7 @@ else
lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2
lt_status=$lt_dlunknown
cat > conftest.$ac_ext <<_LT_EOF
-#line 11114 "configure"
+#line 11177 "configure"
#include "confdefs.h"
#if HAVE_DLFCN_H
@@ -11207,7 +11270,7 @@ else
lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2
lt_status=$lt_dlunknown
cat > conftest.$ac_ext <<_LT_EOF
-#line 11210 "configure"
+#line 11273 "configure"
#include "confdefs.h"
#if HAVE_DLFCN_H
@@ -11439,11 +11502,11 @@ CC="$lt_save_CC"
DISTCHECK_CONFIGURE_FLAGS="--disable-docs --enable-release"
-API_VERSION=0.6
+API_VERSION=0.7
-ASM_VERSION=0.6.0.0
+ASM_VERSION=0.7.0.0
-DISPLAY_VERSION="0.6.2"
+DISPLAY_VERSION="0.7.0"
@@ -11493,7 +11556,6 @@ DISPLAY_VERSION="0.6.2"
-
if test "x$ac_cv_env_PKG_CONFIG_set" != "xset"; then
if test -n "$ac_tool_prefix"; then
# Extract the first word of "${ac_tool_prefix}pkg-config", so it can be a program name with args.
@@ -11610,6 +11672,107 @@ $as_echo "no" >&6; }
fi
+gdu_cv_version_required=0.17.3
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking gnome-doc-utils >= $gdu_cv_version_required" >&5
+$as_echo_n "checking gnome-doc-utils >= $gdu_cv_version_required... " >&6; }
+if test -n "$PKG_CONFIG" && \
+ { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"gnome-doc-utils >= \$gdu_cv_version_required\""; } >&5
+ ($PKG_CONFIG --exists --print-errors "gnome-doc-utils >= $gdu_cv_version_required") 2>&5
+ ac_status=$?
+ $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+ test $ac_status = 0; }; then
+ gdu_cv_have_gdu=yes
+else
+ gdu_cv_have_gdu=no
+fi
+
+if test "$gdu_cv_have_gdu" = "yes"; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+$as_echo "yes" >&6; }
+ HAVE_GNOME_DOC_UTILS=yes
+else
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+ HAVE_GNOME_DOC_UTILS=no
+fi
+
+
+
+# Check whether --with-help-dir was given.
+if test "${with_help_dir+set}" = set; then :
+ withval=$with_help_dir;
+else
+ with_help_dir='${datadir}/gnome/help'
+fi
+
+HELP_DIR="$with_help_dir"
+
+
+
+# Check whether --with-omf-dir was given.
+if test "${with_omf_dir+set}" = set; then :
+ withval=$with_omf_dir;
+else
+ with_omf_dir='${datadir}/omf'
+fi
+
+OMF_DIR="$with_omf_dir"
+
+
+
+# Check whether --with-help-formats was given.
+if test "${with_help_formats+set}" = set; then :
+ withval=$with_help_formats;
+else
+ with_help_formats=''
+fi
+
+DOC_USER_FORMATS="$with_help_formats"
+
+
+# Check whether --enable-scrollkeeper was given.
+if test "${enable_scrollkeeper+set}" = set; then :
+ enableval=$enable_scrollkeeper;
+else
+ enable_scrollkeeper=yes
+fi
+
+ if test "$gdu_cv_have_gdu" = "yes" -a "$enable_scrollkeeper" = "yes"; then
+ ENABLE_SK_TRUE=
+ ENABLE_SK_FALSE='#'
+else
+ ENABLE_SK_TRUE='#'
+ ENABLE_SK_FALSE=
+fi
+
+
+DISTCHECK_CONFIGURE_FLAGS="--disable-scrollkeeper $DISTCHECK_CONFIGURE_FLAGS"
+
+
+ if test "$gdu_cv_have_gdu" = "yes"; then
+ HAVE_GNOME_DOC_UTILS_TRUE=
+ HAVE_GNOME_DOC_UTILS_FALSE='#'
+else
+ HAVE_GNOME_DOC_UTILS_TRUE='#'
+ HAVE_GNOME_DOC_UTILS_FALSE=
+fi
+
+
+
+
+ if test "x$HAVE_GNOME_DOC_UTILS" = "xyes"; then
+ ENABLE_GNOME_DOCS_TRUE=
+ ENABLE_GNOME_DOCS_FALSE='#'
+else
+ ENABLE_GNOME_DOCS_TRUE='#'
+ ENABLE_GNOME_DOCS_FALSE=
+fi
+
+
+
+
+
pkg_failed=no
{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for MONO_MODULE" >&5
@@ -11804,10 +11967,15 @@ fi
for asm in $(echo "mono,2.0,Mono.Data.SqliteClient
Mono.Posix
+ Mono.Simd
+ Mono.Data
+ System
System.Runtime.Remoting
System.Web
System.Web.Services
+ System.Data
Mono.Cairo
+ ICSharpCode.SharpZipLib
" | cut -d, -f3- | sed 's/\,/ /g')
do
{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for Mono 2.0 GAC for $asm.dll" >&5
@@ -11828,6 +11996,703 @@ $as_echo "not found" >&6; }
+ GTKSHARP_REQUIRED=2.12.2
+
+
+pkg_failed=no
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for GTKSHARP" >&5
+$as_echo_n "checking for GTKSHARP... " >&6; }
+
+if test -n "$GTKSHARP_CFLAGS"; then
+ pkg_cv_GTKSHARP_CFLAGS="$GTKSHARP_CFLAGS"
+ elif test -n "$PKG_CONFIG"; then
+ if test -n "$PKG_CONFIG" && \
+ { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"gtk-sharp-2.0 >= \$GTKSHARP_REQUIRED\""; } >&5
+ ($PKG_CONFIG --exists --print-errors "gtk-sharp-2.0 >= $GTKSHARP_REQUIRED") 2>&5
+ ac_status=$?
+ $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+ test $ac_status = 0; }; then
+ pkg_cv_GTKSHARP_CFLAGS=`$PKG_CONFIG --cflags "gtk-sharp-2.0 >= $GTKSHARP_REQUIRED" 2>/dev/null`
+else
+ pkg_failed=yes
+fi
+ else
+ pkg_failed=untried
+fi
+if test -n "$GTKSHARP_LIBS"; then
+ pkg_cv_GTKSHARP_LIBS="$GTKSHARP_LIBS"
+ elif test -n "$PKG_CONFIG"; then
+ if test -n "$PKG_CONFIG" && \
+ { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"gtk-sharp-2.0 >= \$GTKSHARP_REQUIRED\""; } >&5
+ ($PKG_CONFIG --exists --print-errors "gtk-sharp-2.0 >= $GTKSHARP_REQUIRED") 2>&5
+ ac_status=$?
+ $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+ test $ac_status = 0; }; then
+ pkg_cv_GTKSHARP_LIBS=`$PKG_CONFIG --libs "gtk-sharp-2.0 >= $GTKSHARP_REQUIRED" 2>/dev/null`
+else
+ pkg_failed=yes
+fi
+ else
+ pkg_failed=untried
+fi
+
+
+
+if test $pkg_failed = yes; then
+
+if $PKG_CONFIG --atleast-pkgconfig-version 0.20; then
+ _pkg_short_errors_supported=yes
+else
+ _pkg_short_errors_supported=no
+fi
+ if test $_pkg_short_errors_supported = yes; then
+ GTKSHARP_PKG_ERRORS=`$PKG_CONFIG --short-errors --print-errors "gtk-sharp-2.0 >= $GTKSHARP_REQUIRED" 2>&1`
+ else
+ GTKSHARP_PKG_ERRORS=`$PKG_CONFIG --print-errors "gtk-sharp-2.0 >= $GTKSHARP_REQUIRED" 2>&1`
+ fi
+ # Put the nasty error message in config.log where it belongs
+ echo "$GTKSHARP_PKG_ERRORS" >&5
+
+ as_fn_error "Package requirements (gtk-sharp-2.0 >= $GTKSHARP_REQUIRED) were not met:
+
+$GTKSHARP_PKG_ERRORS
+
+Consider adjusting the PKG_CONFIG_PATH environment variable if you
+installed software in a non-standard prefix.
+
+Alternatively, you may set the environment variables GTKSHARP_CFLAGS
+and GTKSHARP_LIBS to avoid the need to call pkg-config.
+See the pkg-config man page for more details.
+" "$LINENO" 5
+elif test $pkg_failed = untried; then
+ { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
+$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
+as_fn_error "The pkg-config script could not be found or is too old. Make sure it
+is in your PATH or set the PKG_CONFIG environment variable to the full
+path to pkg-config.
+
+Alternatively, you may set the environment variables GTKSHARP_CFLAGS
+and GTKSHARP_LIBS to avoid the need to call pkg-config.
+See the pkg-config man page for more details.
+
+To get pkg-config, see <http://pkg-config.freedesktop.org/>.
+See \`config.log' for more details." "$LINENO" 5; }
+else
+ GTKSHARP_CFLAGS=$pkg_cv_GTKSHARP_CFLAGS
+ GTKSHARP_LIBS=$pkg_cv_GTKSHARP_LIBS
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+$as_echo "yes" >&6; }
+ :
+fi
+
+
+
+pkg_failed=no
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for GLIBSHARP" >&5
+$as_echo_n "checking for GLIBSHARP... " >&6; }
+
+if test -n "$GLIBSHARP_CFLAGS"; then
+ pkg_cv_GLIBSHARP_CFLAGS="$GLIBSHARP_CFLAGS"
+ elif test -n "$PKG_CONFIG"; then
+ if test -n "$PKG_CONFIG" && \
+ { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"glib-sharp-2.0 >= \$GTKSHARP_REQUIRED\""; } >&5
+ ($PKG_CONFIG --exists --print-errors "glib-sharp-2.0 >= $GTKSHARP_REQUIRED") 2>&5
+ ac_status=$?
+ $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+ test $ac_status = 0; }; then
+ pkg_cv_GLIBSHARP_CFLAGS=`$PKG_CONFIG --cflags "glib-sharp-2.0 >= $GTKSHARP_REQUIRED" 2>/dev/null`
+else
+ pkg_failed=yes
+fi
+ else
+ pkg_failed=untried
+fi
+if test -n "$GLIBSHARP_LIBS"; then
+ pkg_cv_GLIBSHARP_LIBS="$GLIBSHARP_LIBS"
+ elif test -n "$PKG_CONFIG"; then
+ if test -n "$PKG_CONFIG" && \
+ { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"glib-sharp-2.0 >= \$GTKSHARP_REQUIRED\""; } >&5
+ ($PKG_CONFIG --exists --print-errors "glib-sharp-2.0 >= $GTKSHARP_REQUIRED") 2>&5
+ ac_status=$?
+ $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+ test $ac_status = 0; }; then
+ pkg_cv_GLIBSHARP_LIBS=`$PKG_CONFIG --libs "glib-sharp-2.0 >= $GTKSHARP_REQUIRED" 2>/dev/null`
+else
+ pkg_failed=yes
+fi
+ else
+ pkg_failed=untried
+fi
+
+
+
+if test $pkg_failed = yes; then
+
+if $PKG_CONFIG --atleast-pkgconfig-version 0.20; then
+ _pkg_short_errors_supported=yes
+else
+ _pkg_short_errors_supported=no
+fi
+ if test $_pkg_short_errors_supported = yes; then
+ GLIBSHARP_PKG_ERRORS=`$PKG_CONFIG --short-errors --print-errors "glib-sharp-2.0 >= $GTKSHARP_REQUIRED" 2>&1`
+ else
+ GLIBSHARP_PKG_ERRORS=`$PKG_CONFIG --print-errors "glib-sharp-2.0 >= $GTKSHARP_REQUIRED" 2>&1`
+ fi
+ # Put the nasty error message in config.log where it belongs
+ echo "$GLIBSHARP_PKG_ERRORS" >&5
+
+ as_fn_error "Package requirements (glib-sharp-2.0 >= $GTKSHARP_REQUIRED) were not met:
+
+$GLIBSHARP_PKG_ERRORS
+
+Consider adjusting the PKG_CONFIG_PATH environment variable if you
+installed software in a non-standard prefix.
+
+Alternatively, you may set the environment variables GLIBSHARP_CFLAGS
+and GLIBSHARP_LIBS to avoid the need to call pkg-config.
+See the pkg-config man page for more details.
+" "$LINENO" 5
+elif test $pkg_failed = untried; then
+ { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
+$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
+as_fn_error "The pkg-config script could not be found or is too old. Make sure it
+is in your PATH or set the PKG_CONFIG environment variable to the full
+path to pkg-config.
+
+Alternatively, you may set the environment variables GLIBSHARP_CFLAGS
+and GLIBSHARP_LIBS to avoid the need to call pkg-config.
+See the pkg-config man page for more details.
+
+To get pkg-config, see <http://pkg-config.freedesktop.org/>.
+See \`config.log' for more details." "$LINENO" 5; }
+else
+ GLIBSHARP_CFLAGS=$pkg_cv_GLIBSHARP_CFLAGS
+ GLIBSHARP_LIBS=$pkg_cv_GLIBSHARP_LIBS
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+$as_echo "yes" >&6; }
+ :
+fi
+
+
+
+pkg_failed=no
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for GLIBSHARP_2_12_7" >&5
+$as_echo_n "checking for GLIBSHARP_2_12_7... " >&6; }
+
+if test -n "$GLIBSHARP_2_12_7_CFLAGS"; then
+ pkg_cv_GLIBSHARP_2_12_7_CFLAGS="$GLIBSHARP_2_12_7_CFLAGS"
+ elif test -n "$PKG_CONFIG"; then
+ if test -n "$PKG_CONFIG" && \
+ { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"glib-sharp-2.0 >= 2.12.7\""; } >&5
+ ($PKG_CONFIG --exists --print-errors "glib-sharp-2.0 >= 2.12.7") 2>&5
+ ac_status=$?
+ $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+ test $ac_status = 0; }; then
+ pkg_cv_GLIBSHARP_2_12_7_CFLAGS=`$PKG_CONFIG --cflags "glib-sharp-2.0 >= 2.12.7" 2>/dev/null`
+else
+ pkg_failed=yes
+fi
+ else
+ pkg_failed=untried
+fi
+if test -n "$GLIBSHARP_2_12_7_LIBS"; then
+ pkg_cv_GLIBSHARP_2_12_7_LIBS="$GLIBSHARP_2_12_7_LIBS"
+ elif test -n "$PKG_CONFIG"; then
+ if test -n "$PKG_CONFIG" && \
+ { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"glib-sharp-2.0 >= 2.12.7\""; } >&5
+ ($PKG_CONFIG --exists --print-errors "glib-sharp-2.0 >= 2.12.7") 2>&5
+ ac_status=$?
+ $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+ test $ac_status = 0; }; then
+ pkg_cv_GLIBSHARP_2_12_7_LIBS=`$PKG_CONFIG --libs "glib-sharp-2.0 >= 2.12.7" 2>/dev/null`
+else
+ pkg_failed=yes
+fi
+ else
+ pkg_failed=untried
+fi
+
+
+
+if test $pkg_failed = yes; then
+
+if $PKG_CONFIG --atleast-pkgconfig-version 0.20; then
+ _pkg_short_errors_supported=yes
+else
+ _pkg_short_errors_supported=no
+fi
+ if test $_pkg_short_errors_supported = yes; then
+ GLIBSHARP_2_12_7_PKG_ERRORS=`$PKG_CONFIG --short-errors --print-errors "glib-sharp-2.0 >= 2.12.7" 2>&1`
+ else
+ GLIBSHARP_2_12_7_PKG_ERRORS=`$PKG_CONFIG --print-errors "glib-sharp-2.0 >= 2.12.7" 2>&1`
+ fi
+ # Put the nasty error message in config.log where it belongs
+ echo "$GLIBSHARP_2_12_7_PKG_ERRORS" >&5
+
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+ HAVE_GLIBSHARP_2_12_7=no
+elif test $pkg_failed = untried; then
+ HAVE_GLIBSHARP_2_12_7=no
+else
+ GLIBSHARP_2_12_7_CFLAGS=$pkg_cv_GLIBSHARP_2_12_7_CFLAGS
+ GLIBSHARP_2_12_7_LIBS=$pkg_cv_GLIBSHARP_2_12_7_LIBS
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+$as_echo "yes" >&6; }
+ HAVE_GLIBSHARP_2_12_7=yes
+fi
+ if test "$HAVE_GLIBSHARP_2_12_7" = "yes"; then
+ HAVE_GLIBSHARP_2_12_7_TRUE=
+ HAVE_GLIBSHARP_2_12_7_FALSE='#'
+else
+ HAVE_GLIBSHARP_2_12_7_TRUE='#'
+ HAVE_GLIBSHARP_2_12_7_FALSE=
+fi
+
+
+
+pkg_failed=no
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for GTKSHARP_A11Y" >&5
+$as_echo_n "checking for GTKSHARP_A11Y... " >&6; }
+
+if test -n "$GTKSHARP_A11Y_CFLAGS"; then
+ pkg_cv_GTKSHARP_A11Y_CFLAGS="$GTKSHARP_A11Y_CFLAGS"
+ elif test -n "$PKG_CONFIG"; then
+ if test -n "$PKG_CONFIG" && \
+ { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"gtk-sharp-2.0 >= 2.12.10\""; } >&5
+ ($PKG_CONFIG --exists --print-errors "gtk-sharp-2.0 >= 2.12.10") 2>&5
+ ac_status=$?
+ $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+ test $ac_status = 0; }; then
+ pkg_cv_GTKSHARP_A11Y_CFLAGS=`$PKG_CONFIG --cflags "gtk-sharp-2.0 >= 2.12.10" 2>/dev/null`
+else
+ pkg_failed=yes
+fi
+ else
+ pkg_failed=untried
+fi
+if test -n "$GTKSHARP_A11Y_LIBS"; then
+ pkg_cv_GTKSHARP_A11Y_LIBS="$GTKSHARP_A11Y_LIBS"
+ elif test -n "$PKG_CONFIG"; then
+ if test -n "$PKG_CONFIG" && \
+ { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"gtk-sharp-2.0 >= 2.12.10\""; } >&5
+ ($PKG_CONFIG --exists --print-errors "gtk-sharp-2.0 >= 2.12.10") 2>&5
+ ac_status=$?
+ $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+ test $ac_status = 0; }; then
+ pkg_cv_GTKSHARP_A11Y_LIBS=`$PKG_CONFIG --libs "gtk-sharp-2.0 >= 2.12.10" 2>/dev/null`
+else
+ pkg_failed=yes
+fi
+ else
+ pkg_failed=untried
+fi
+
+
+
+if test $pkg_failed = yes; then
+
+if $PKG_CONFIG --atleast-pkgconfig-version 0.20; then
+ _pkg_short_errors_supported=yes
+else
+ _pkg_short_errors_supported=no
+fi
+ if test $_pkg_short_errors_supported = yes; then
+ GTKSHARP_A11Y_PKG_ERRORS=`$PKG_CONFIG --short-errors --print-errors "gtk-sharp-2.0 >= 2.12.10" 2>&1`
+ else
+ GTKSHARP_A11Y_PKG_ERRORS=`$PKG_CONFIG --print-errors "gtk-sharp-2.0 >= 2.12.10" 2>&1`
+ fi
+ # Put the nasty error message in config.log where it belongs
+ echo "$GTKSHARP_A11Y_PKG_ERRORS" >&5
+
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+ gtksharp_with_a11y=no
+elif test $pkg_failed = untried; then
+ gtksharp_with_a11y=no
+else
+ GTKSHARP_A11Y_CFLAGS=$pkg_cv_GTKSHARP_A11Y_CFLAGS
+ GTKSHARP_A11Y_LIBS=$pkg_cv_GTKSHARP_A11Y_LIBS
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+$as_echo "yes" >&6; }
+ gtksharp_with_a11y=yes
+fi
+ if test "x$gtksharp_with_a11y" = "xyes"; then
+ ENABLE_ATK_TRUE=
+ ENABLE_ATK_FALSE='#'
+else
+ ENABLE_ATK_TRUE='#'
+ ENABLE_ATK_FALSE=
+fi
+
+
+
+
+ GNOMEKEYRINGSHARP_REQUIRED=1.0
+
+
+pkg_failed=no
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for KEYRINGSHARP" >&5
+$as_echo_n "checking for KEYRINGSHARP... " >&6; }
+
+if test -n "$KEYRINGSHARP_CFLAGS"; then
+ pkg_cv_KEYRINGSHARP_CFLAGS="$KEYRINGSHARP_CFLAGS"
+ elif test -n "$PKG_CONFIG"; then
+ if test -n "$PKG_CONFIG" && \
+ { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"gnome-keyring-sharp-1.0 >= \$GNOMEKEYRINGSHARP_REQUIRED\""; } >&5
+ ($PKG_CONFIG --exists --print-errors "gnome-keyring-sharp-1.0 >= $GNOMEKEYRINGSHARP_REQUIRED") 2>&5
+ ac_status=$?
+ $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+ test $ac_status = 0; }; then
+ pkg_cv_KEYRINGSHARP_CFLAGS=`$PKG_CONFIG --cflags "gnome-keyring-sharp-1.0 >= $GNOMEKEYRINGSHARP_REQUIRED" 2>/dev/null`
+else
+ pkg_failed=yes
+fi
+ else
+ pkg_failed=untried
+fi
+if test -n "$KEYRINGSHARP_LIBS"; then
+ pkg_cv_KEYRINGSHARP_LIBS="$KEYRINGSHARP_LIBS"
+ elif test -n "$PKG_CONFIG"; then
+ if test -n "$PKG_CONFIG" && \
+ { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"gnome-keyring-sharp-1.0 >= \$GNOMEKEYRINGSHARP_REQUIRED\""; } >&5
+ ($PKG_CONFIG --exists --print-errors "gnome-keyring-sharp-1.0 >= $GNOMEKEYRINGSHARP_REQUIRED") 2>&5
+ ac_status=$?
+ $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+ test $ac_status = 0; }; then
+ pkg_cv_KEYRINGSHARP_LIBS=`$PKG_CONFIG --libs "gnome-keyring-sharp-1.0 >= $GNOMEKEYRINGSHARP_REQUIRED" 2>/dev/null`
+else
+ pkg_failed=yes
+fi
+ else
+ pkg_failed=untried
+fi
+
+
+
+if test $pkg_failed = yes; then
+
+if $PKG_CONFIG --atleast-pkgconfig-version 0.20; then
+ _pkg_short_errors_supported=yes
+else
+ _pkg_short_errors_supported=no
+fi
+ if test $_pkg_short_errors_supported = yes; then
+ KEYRINGSHARP_PKG_ERRORS=`$PKG_CONFIG --short-errors --print-errors "gnome-keyring-sharp-1.0 >= $GNOMEKEYRINGSHARP_REQUIRED" 2>&1`
+ else
+ KEYRINGSHARP_PKG_ERRORS=`$PKG_CONFIG --print-errors "gnome-keyring-sharp-1.0 >= $GNOMEKEYRINGSHARP_REQUIRED" 2>&1`
+ fi
+ # Put the nasty error message in config.log where it belongs
+ echo "$KEYRINGSHARP_PKG_ERRORS" >&5
+
+ as_fn_error "Package requirements (gnome-keyring-sharp-1.0 >= $GNOMEKEYRINGSHARP_REQUIRED) were not met:
+
+$KEYRINGSHARP_PKG_ERRORS
+
+Consider adjusting the PKG_CONFIG_PATH environment variable if you
+installed software in a non-standard prefix.
+
+Alternatively, you may set the environment variables KEYRINGSHARP_CFLAGS
+and KEYRINGSHARP_LIBS to avoid the need to call pkg-config.
+See the pkg-config man page for more details.
+" "$LINENO" 5
+elif test $pkg_failed = untried; then
+ { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
+$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
+as_fn_error "The pkg-config script could not be found or is too old. Make sure it
+is in your PATH or set the PKG_CONFIG environment variable to the full
+path to pkg-config.
+
+Alternatively, you may set the environment variables KEYRINGSHARP_CFLAGS
+and KEYRINGSHARP_LIBS to avoid the need to call pkg-config.
+See the pkg-config man page for more details.
+
+To get pkg-config, see <http://pkg-config.freedesktop.org/>.
+See \`config.log' for more details." "$LINENO" 5; }
+else
+ KEYRINGSHARP_CFLAGS=$pkg_cv_KEYRINGSHARP_CFLAGS
+ KEYRINGSHARP_LIBS=$pkg_cv_KEYRINGSHARP_LIBS
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+$as_echo "yes" >&6; }
+ :
+fi
+
+
+
+ FLICKRNET_REQUIRED=2.0
+
+
+pkg_failed=no
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for FLICKRNET" >&5
+$as_echo_n "checking for FLICKRNET... " >&6; }
+
+if test -n "$FLICKRNET_CFLAGS"; then
+ pkg_cv_FLICKRNET_CFLAGS="$FLICKRNET_CFLAGS"
+ elif test -n "$PKG_CONFIG"; then
+ if test -n "$PKG_CONFIG" && \
+ { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"flickrnet >= \$FLICKRNET_REQUIRED\""; } >&5
+ ($PKG_CONFIG --exists --print-errors "flickrnet >= $FLICKRNET_REQUIRED") 2>&5
+ ac_status=$?
+ $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+ test $ac_status = 0; }; then
+ pkg_cv_FLICKRNET_CFLAGS=`$PKG_CONFIG --cflags "flickrnet >= $FLICKRNET_REQUIRED" 2>/dev/null`
+else
+ pkg_failed=yes
+fi
+ else
+ pkg_failed=untried
+fi
+if test -n "$FLICKRNET_LIBS"; then
+ pkg_cv_FLICKRNET_LIBS="$FLICKRNET_LIBS"
+ elif test -n "$PKG_CONFIG"; then
+ if test -n "$PKG_CONFIG" && \
+ { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"flickrnet >= \$FLICKRNET_REQUIRED\""; } >&5
+ ($PKG_CONFIG --exists --print-errors "flickrnet >= $FLICKRNET_REQUIRED") 2>&5
+ ac_status=$?
+ $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+ test $ac_status = 0; }; then
+ pkg_cv_FLICKRNET_LIBS=`$PKG_CONFIG --libs "flickrnet >= $FLICKRNET_REQUIRED" 2>/dev/null`
+else
+ pkg_failed=yes
+fi
+ else
+ pkg_failed=untried
+fi
+
+
+
+if test $pkg_failed = yes; then
+
+if $PKG_CONFIG --atleast-pkgconfig-version 0.20; then
+ _pkg_short_errors_supported=yes
+else
+ _pkg_short_errors_supported=no
+fi
+ if test $_pkg_short_errors_supported = yes; then
+ FLICKRNET_PKG_ERRORS=`$PKG_CONFIG --short-errors --print-errors "flickrnet >= $FLICKRNET_REQUIRED" 2>&1`
+ else
+ FLICKRNET_PKG_ERRORS=`$PKG_CONFIG --print-errors "flickrnet >= $FLICKRNET_REQUIRED" 2>&1`
+ fi
+ # Put the nasty error message in config.log where it belongs
+ echo "$FLICKRNET_PKG_ERRORS" >&5
+
+ as_fn_error "Package requirements (flickrnet >= $FLICKRNET_REQUIRED) were not met:
+
+$FLICKRNET_PKG_ERRORS
+
+Consider adjusting the PKG_CONFIG_PATH environment variable if you
+installed software in a non-standard prefix.
+
+Alternatively, you may set the environment variables FLICKRNET_CFLAGS
+and FLICKRNET_LIBS to avoid the need to call pkg-config.
+See the pkg-config man page for more details.
+" "$LINENO" 5
+elif test $pkg_failed = untried; then
+ { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
+$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
+as_fn_error "The pkg-config script could not be found or is too old. Make sure it
+is in your PATH or set the PKG_CONFIG environment variable to the full
+path to pkg-config.
+
+Alternatively, you may set the environment variables FLICKRNET_CFLAGS
+and FLICKRNET_LIBS to avoid the need to call pkg-config.
+See the pkg-config man page for more details.
+
+To get pkg-config, see <http://pkg-config.freedesktop.org/>.
+See \`config.log' for more details." "$LINENO" 5; }
+else
+ FLICKRNET_CFLAGS=$pkg_cv_FLICKRNET_CFLAGS
+ FLICKRNET_LIBS=$pkg_cv_FLICKRNET_LIBS
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+$as_echo "yes" >&6; }
+ :
+fi
+
+
+
+ NUNIT_REQUIRED=2.4.7
+
+ # Check whether --enable-tests was given.
+if test "${enable_tests+set}" = set; then :
+ enableval=$enable_tests; enable_tests=$enableval
+else
+ enable_tests="no"
+fi
+
+
+ if test "x$enable_tests" = "xno"; then
+ do_tests=no
+ if false; then
+ ENABLE_TESTS_TRUE=
+ ENABLE_TESTS_FALSE='#'
+else
+ ENABLE_TESTS_TRUE='#'
+ ENABLE_TESTS_FALSE=
+fi
+
+ else
+
+pkg_failed=no
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for NUNIT" >&5
+$as_echo_n "checking for NUNIT... " >&6; }
+
+if test -n "$NUNIT_CFLAGS"; then
+ pkg_cv_NUNIT_CFLAGS="$NUNIT_CFLAGS"
+ elif test -n "$PKG_CONFIG"; then
+ if test -n "$PKG_CONFIG" && \
+ { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"nunit >= \$NUNIT_REQUIRED\""; } >&5
+ ($PKG_CONFIG --exists --print-errors "nunit >= $NUNIT_REQUIRED") 2>&5
+ ac_status=$?
+ $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+ test $ac_status = 0; }; then
+ pkg_cv_NUNIT_CFLAGS=`$PKG_CONFIG --cflags "nunit >= $NUNIT_REQUIRED" 2>/dev/null`
+else
+ pkg_failed=yes
+fi
+ else
+ pkg_failed=untried
+fi
+if test -n "$NUNIT_LIBS"; then
+ pkg_cv_NUNIT_LIBS="$NUNIT_LIBS"
+ elif test -n "$PKG_CONFIG"; then
+ if test -n "$PKG_CONFIG" && \
+ { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"nunit >= \$NUNIT_REQUIRED\""; } >&5
+ ($PKG_CONFIG --exists --print-errors "nunit >= $NUNIT_REQUIRED") 2>&5
+ ac_status=$?
+ $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+ test $ac_status = 0; }; then
+ pkg_cv_NUNIT_LIBS=`$PKG_CONFIG --libs "nunit >= $NUNIT_REQUIRED" 2>/dev/null`
+else
+ pkg_failed=yes
+fi
+ else
+ pkg_failed=untried
+fi
+
+
+
+if test $pkg_failed = yes; then
+
+if $PKG_CONFIG --atleast-pkgconfig-version 0.20; then
+ _pkg_short_errors_supported=yes
+else
+ _pkg_short_errors_supported=no
+fi
+ if test $_pkg_short_errors_supported = yes; then
+ NUNIT_PKG_ERRORS=`$PKG_CONFIG --short-errors --print-errors "nunit >= $NUNIT_REQUIRED" 2>&1`
+ else
+ NUNIT_PKG_ERRORS=`$PKG_CONFIG --print-errors "nunit >= $NUNIT_REQUIRED" 2>&1`
+ fi
+ # Put the nasty error message in config.log where it belongs
+ echo "$NUNIT_PKG_ERRORS" >&5
+
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+ do_tests="no"
+elif test $pkg_failed = untried; then
+ do_tests="no"
+else
+ NUNIT_CFLAGS=$pkg_cv_NUNIT_CFLAGS
+ NUNIT_LIBS=$pkg_cv_NUNIT_LIBS
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+$as_echo "yes" >&6; }
+ do_tests="yes"
+fi
+
+
+ if test "x$do_tests" = "xyes"; then
+ ENABLE_TESTS_TRUE=
+ ENABLE_TESTS_FALSE='#'
+else
+ ENABLE_TESTS_TRUE='#'
+ ENABLE_TESTS_FALSE=
+fi
+
+
+ if test "x$do_tests" = "xno"; then
+
+pkg_failed=no
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for NUNIT" >&5
+$as_echo_n "checking for NUNIT... " >&6; }
+
+if test -n "$NUNIT_CFLAGS"; then
+ pkg_cv_NUNIT_CFLAGS="$NUNIT_CFLAGS"
+ elif test -n "$PKG_CONFIG"; then
+ if test -n "$PKG_CONFIG" && \
+ { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"mono-nunit >= 2.4\""; } >&5
+ ($PKG_CONFIG --exists --print-errors "mono-nunit >= 2.4") 2>&5
+ ac_status=$?
+ $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+ test $ac_status = 0; }; then
+ pkg_cv_NUNIT_CFLAGS=`$PKG_CONFIG --cflags "mono-nunit >= 2.4" 2>/dev/null`
+else
+ pkg_failed=yes
+fi
+ else
+ pkg_failed=untried
+fi
+if test -n "$NUNIT_LIBS"; then
+ pkg_cv_NUNIT_LIBS="$NUNIT_LIBS"
+ elif test -n "$PKG_CONFIG"; then
+ if test -n "$PKG_CONFIG" && \
+ { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"mono-nunit >= 2.4\""; } >&5
+ ($PKG_CONFIG --exists --print-errors "mono-nunit >= 2.4") 2>&5
+ ac_status=$?
+ $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+ test $ac_status = 0; }; then
+ pkg_cv_NUNIT_LIBS=`$PKG_CONFIG --libs "mono-nunit >= 2.4" 2>/dev/null`
+else
+ pkg_failed=yes
+fi
+ else
+ pkg_failed=untried
+fi
+
+
+
+if test $pkg_failed = yes; then
+
+if $PKG_CONFIG --atleast-pkgconfig-version 0.20; then
+ _pkg_short_errors_supported=yes
+else
+ _pkg_short_errors_supported=no
+fi
+ if test $_pkg_short_errors_supported = yes; then
+ NUNIT_PKG_ERRORS=`$PKG_CONFIG --short-errors --print-errors "mono-nunit >= 2.4" 2>&1`
+ else
+ NUNIT_PKG_ERRORS=`$PKG_CONFIG --print-errors "mono-nunit >= 2.4" 2>&1`
+ fi
+ # Put the nasty error message in config.log where it belongs
+ echo "$NUNIT_PKG_ERRORS" >&5
+
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+ do_tests="no"
+elif test $pkg_failed = untried; then
+ do_tests="no"
+else
+ NUNIT_CFLAGS=$pkg_cv_NUNIT_CFLAGS
+ NUNIT_LIBS=$pkg_cv_NUNIT_LIBS
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+$as_echo "yes" >&6; }
+ do_tests="yes"
+fi
+
+
+ if test "x$do_tests" = "xyes"; then
+ ENABLE_TESTS_TRUE=
+ ENABLE_TESTS_FALSE='#'
+else
+ ENABLE_TESTS_TRUE='#'
+ ENABLE_TESTS_FALSE=
+fi
+
+
+ if test "x$do_tests" = "xno"; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: Could not find nunit: tests will not be available" >&5
+$as_echo "$as_me: WARNING: Could not find nunit: tests will not be available" >&2;} fi
+ fi
+ fi
@@ -15161,11 +16026,11 @@ else
-e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \
-e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \
-e 's:$: $lt_compiler_flag:'`
- (eval echo "\"\$as_me:15164: $lt_compile\"" >&5)
+ (eval echo "\"\$as_me:16029: $lt_compile\"" >&5)
(eval "$lt_compile" 2>conftest.err)
ac_status=$?
cat conftest.err >&5
- echo "$as_me:15168: \$? = $ac_status" >&5
+ echo "$as_me:16033: \$? = $ac_status" >&5
if (exit $ac_status) && test -s "$ac_outfile"; then
# The compiler can only warn and ignore the option if not recognized
# So say no if there are warnings other than the usual output.
@@ -15260,11 +16125,11 @@ else
-e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \
-e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \
-e 's:$: $lt_compiler_flag:'`
- (eval echo "\"\$as_me:15263: $lt_compile\"" >&5)
+ (eval echo "\"\$as_me:16128: $lt_compile\"" >&5)
(eval "$lt_compile" 2>out/conftest.err)
ac_status=$?
cat out/conftest.err >&5
- echo "$as_me:15267: \$? = $ac_status" >&5
+ echo "$as_me:16132: \$? = $ac_status" >&5
if (exit $ac_status) && test -s out/conftest2.$ac_objext
then
# The compiler can only warn and ignore the option if not recognized
@@ -15312,11 +16177,11 @@ else
-e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \
-e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \
-e 's:$: $lt_compiler_flag:'`
- (eval echo "\"\$as_me:15315: $lt_compile\"" >&5)
+ (eval echo "\"\$as_me:16180: $lt_compile\"" >&5)
(eval "$lt_compile" 2>out/conftest.err)
ac_status=$?
cat out/conftest.err >&5
- echo "$as_me:15319: \$? = $ac_status" >&5
+ echo "$as_me:16184: \$? = $ac_status" >&5
if (exit $ac_status) && test -s out/conftest2.$ac_objext
then
# The compiler can only warn and ignore the option if not recognized
@@ -17100,98 +17965,6 @@ if test ! -x "$GAPI2CODEGEN"; then
fi
-
-
-gdu_cv_version_required=0.3.2
-
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking gnome-doc-utils >= $gdu_cv_version_required" >&5
-$as_echo_n "checking gnome-doc-utils >= $gdu_cv_version_required... " >&6; }
-if test -n "$PKG_CONFIG" && \
- { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"gnome-doc-utils >= \$gdu_cv_version_required\""; } >&5
- ($PKG_CONFIG --exists --print-errors "gnome-doc-utils >= $gdu_cv_version_required") 2>&5
- ac_status=$?
- $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
- test $ac_status = 0; }; then
- gdu_cv_have_gdu=yes
-else
- gdu_cv_have_gdu=no
-fi
-
-if test "$gdu_cv_have_gdu" = "yes"; then
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
-$as_echo "yes" >&6; }
- :
-else
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
- as_fn_error "gnome-doc-utils >= $gdu_cv_version_required not found" "$LINENO" 5
-fi
-
-
-
-# Check whether --with-help-dir was given.
-if test "${with_help_dir+set}" = set; then :
- withval=$with_help_dir;
-else
- with_help_dir='${datadir}/gnome/help'
-fi
-
-HELP_DIR="$with_help_dir"
-
-
-
-# Check whether --with-omf-dir was given.
-if test "${with_omf_dir+set}" = set; then :
- withval=$with_omf_dir;
-else
- with_omf_dir='${datadir}/omf'
-fi
-
-OMF_DIR="$with_omf_dir"
-
-
-
-# Check whether --with-help-formats was given.
-if test "${with_help_formats+set}" = set; then :
- withval=$with_help_formats;
-else
- with_help_formats=''
-fi
-
-DOC_USER_FORMATS="$with_help_formats"
-
-
-# Check whether --enable-scrollkeeper was given.
-if test "${enable_scrollkeeper+set}" = set; then :
- enableval=$enable_scrollkeeper;
-else
- enable_scrollkeeper=yes
-fi
-
- if test "$gdu_cv_have_gdu" = "yes" -a "$enable_scrollkeeper" = "yes"; then
- ENABLE_SK_TRUE=
- ENABLE_SK_FALSE='#'
-else
- ENABLE_SK_TRUE='#'
- ENABLE_SK_FALSE=
-fi
-
-
-DISTCHECK_CONFIGURE_FLAGS="--disable-scrollkeeper $DISTCHECK_CONFIGURE_FLAGS"
-
-
- if test "$gdu_cv_have_gdu" = "yes"; then
- HAVE_GNOME_DOC_UTILS_TRUE=
- HAVE_GNOME_DOC_UTILS_FALSE='#'
-else
- HAVE_GNOME_DOC_UTILS_TRUE='#'
- HAVE_GNOME_DOC_UTILS_FALSE=
-fi
-
-
-
-
-
{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for mono.pc" >&5
$as_echo_n "checking for mono.pc... " >&6; }
if test -z `$PKG_CONFIG --variable=prefix mono`; then
@@ -17206,17 +17979,15 @@ LIBGNOME_REQUIRED=2.2
LIBGNOMEUI_REQUIRED=2.2
LIBEXIF_REQUIRED_MIN=0.5.7
LIBEXIF_REQUIRED_MAX=0.7.0
-GIO_REQUIRED=2.16.0
-GIOSHARP_REQUIRED=2.13.92
+GIO_REQUIRED=2.22.2
GTKSHARPBEANS_REQUIRED=2.13.92
GTKSHARP_REQUIRED=2.12.2
GTK_REQUIRED=2.14
NDESK_DBUS_REQUIRED=0.4.2
NDESK_DBUS_GLIB_REQUIRED=0.3.0
-MONO_CAIRO_REQUIRED=1.2.4
+MONO_CAIRO_REQUIRED=1.2.5
CAIRO_REQUIRED=1.4.0
LCMS_REQUIRED=1.12
-LIBGPHOTO2_REQUIRED=2.4
MONOADDINS_REQUIRED=0.3
@@ -17228,12 +17999,12 @@ if test -n "$F_CFLAGS"; then
pkg_cv_F_CFLAGS="$F_CFLAGS"
elif test -n "$PKG_CONFIG"; then
if test -n "$PKG_CONFIG" && \
- { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"libgnome-2.0 >= \$LIBGNOME_REQUIRED libgnomeui-2.0 >= \$LIBGNOMEUI_REQUIRED libexif >= \$LIBEXIF_REQUIRED_MIN libexif < \$LIBEXIF_REQUIRED_MAX gtk-sharp-2.0 >= \$GTKSHARP_REQUIRED glib-sharp-2.0 >= \$GTKSHARP_REQUIRED glade-sharp-2.0 >= \$GTKSHARP_REQUIRED gnome-vfs-sharp-2.0 >= \$GTKSHARP_REQUIRED gtk+-2.0 >= \$GTK_REQUIRED mono-cairo >= \$MONO_CAIRO_REQUIRED cairo >= \$CAIRO_REQUIRED mono-addins >= \$MONOADDINS_REQUIRED mono-addins-gui >= \$MONOADDINS_REQUIRED mono-addins-setup >= \$MONOADDINS_REQUIRED\""; } >&5
- ($PKG_CONFIG --exists --print-errors "libgnome-2.0 >= $LIBGNOME_REQUIRED libgnomeui-2.0 >= $LIBGNOMEUI_REQUIRED libexif >= $LIBEXIF_REQUIRED_MIN libexif < $LIBEXIF_REQUIRED_MAX gtk-sharp-2.0 >= $GTKSHARP_REQUIRED glib-sharp-2.0 >= $GTKSHARP_REQUIRED glade-sharp-2.0 >= $GTKSHARP_REQUIRED gnome-vfs-sharp-2.0 >= $GTKSHARP_REQUIRED gtk+-2.0 >= $GTK_REQUIRED mono-cairo >= $MONO_CAIRO_REQUIRED cairo >= $CAIRO_REQUIRED mono-addins >= $MONOADDINS_REQUIRED mono-addins-gui >= $MONOADDINS_REQUIRED mono-addins-setup >= $MONOADDINS_REQUIRED") 2>&5
+ { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"libgnome-2.0 >= \$LIBGNOME_REQUIRED libgnomeui-2.0 >= \$LIBGNOMEUI_REQUIRED libexif >= \$LIBEXIF_REQUIRED_MIN libexif < \$LIBEXIF_REQUIRED_MAX glade-sharp-2.0 >= \$GTKSHARP_REQUIRED gtk+-2.0 >= \$GTK_REQUIRED mono-cairo >= \$MONO_CAIRO_REQUIRED cairo >= \$CAIRO_REQUIRED mono-addins >= \$MONOADDINS_REQUIRED mono-addins-gui >= \$MONOADDINS_REQUIRED mono-addins-setup >= \$MONOADDINS_REQUIRED\""; } >&5
+ ($PKG_CONFIG --exists --print-errors "libgnome-2.0 >= $LIBGNOME_REQUIRED libgnomeui-2.0 >= $LIBGNOMEUI_REQUIRED libexif >= $LIBEXIF_REQUIRED_MIN libexif < $LIBEXIF_REQUIRED_MAX glade-sharp-2.0 >= $GTKSHARP_REQUIRED gtk+-2.0 >= $GTK_REQUIRED mono-cairo >= $MONO_CAIRO_REQUIRED cairo >= $CAIRO_REQUIRED mono-addins >= $MONOADDINS_REQUIRED mono-addins-gui >= $MONOADDINS_REQUIRED mono-addins-setup >= $MONOADDINS_REQUIRED") 2>&5
ac_status=$?
$as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
test $ac_status = 0; }; then
- pkg_cv_F_CFLAGS=`$PKG_CONFIG --cflags "libgnome-2.0 >= $LIBGNOME_REQUIRED libgnomeui-2.0 >= $LIBGNOMEUI_REQUIRED libexif >= $LIBEXIF_REQUIRED_MIN libexif < $LIBEXIF_REQUIRED_MAX gtk-sharp-2.0 >= $GTKSHARP_REQUIRED glib-sharp-2.0 >= $GTKSHARP_REQUIRED glade-sharp-2.0 >= $GTKSHARP_REQUIRED gnome-vfs-sharp-2.0 >= $GTKSHARP_REQUIRED gtk+-2.0 >= $GTK_REQUIRED mono-cairo >= $MONO_CAIRO_REQUIRED cairo >= $CAIRO_REQUIRED mono-addins >= $MONOADDINS_REQUIRED mono-addins-gui >= $MONOADDINS_REQUIRED mono-addins-setup >= $MONOADDINS_REQUIRED" 2>/dev/null`
+ pkg_cv_F_CFLAGS=`$PKG_CONFIG --cflags "libgnome-2.0 >= $LIBGNOME_REQUIRED libgnomeui-2.0 >= $LIBGNOMEUI_REQUIRED libexif >= $LIBEXIF_REQUIRED_MIN libexif < $LIBEXIF_REQUIRED_MAX glade-sharp-2.0 >= $GTKSHARP_REQUIRED gtk+-2.0 >= $GTK_REQUIRED mono-cairo >= $MONO_CAIRO_REQUIRED cairo >= $CAIRO_REQUIRED mono-addins >= $MONOADDINS_REQUIRED mono-addins-gui >= $MONOADDINS_REQUIRED mono-addins-setup >= $MONOADDINS_REQUIRED" 2>/dev/null`
else
pkg_failed=yes
fi
@@ -17244,12 +18015,12 @@ if test -n "$F_LIBS"; then
pkg_cv_F_LIBS="$F_LIBS"
elif test -n "$PKG_CONFIG"; then
if test -n "$PKG_CONFIG" && \
- { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"libgnome-2.0 >= \$LIBGNOME_REQUIRED libgnomeui-2.0 >= \$LIBGNOMEUI_REQUIRED libexif >= \$LIBEXIF_REQUIRED_MIN libexif < \$LIBEXIF_REQUIRED_MAX gtk-sharp-2.0 >= \$GTKSHARP_REQUIRED glib-sharp-2.0 >= \$GTKSHARP_REQUIRED glade-sharp-2.0 >= \$GTKSHARP_REQUIRED gnome-vfs-sharp-2.0 >= \$GTKSHARP_REQUIRED gtk+-2.0 >= \$GTK_REQUIRED mono-cairo >= \$MONO_CAIRO_REQUIRED cairo >= \$CAIRO_REQUIRED mono-addins >= \$MONOADDINS_REQUIRED mono-addins-gui >= \$MONOADDINS_REQUIRED mono-addins-setup >= \$MONOADDINS_REQUIRED\""; } >&5
- ($PKG_CONFIG --exists --print-errors "libgnome-2.0 >= $LIBGNOME_REQUIRED libgnomeui-2.0 >= $LIBGNOMEUI_REQUIRED libexif >= $LIBEXIF_REQUIRED_MIN libexif < $LIBEXIF_REQUIRED_MAX gtk-sharp-2.0 >= $GTKSHARP_REQUIRED glib-sharp-2.0 >= $GTKSHARP_REQUIRED glade-sharp-2.0 >= $GTKSHARP_REQUIRED gnome-vfs-sharp-2.0 >= $GTKSHARP_REQUIRED gtk+-2.0 >= $GTK_REQUIRED mono-cairo >= $MONO_CAIRO_REQUIRED cairo >= $CAIRO_REQUIRED mono-addins >= $MONOADDINS_REQUIRED mono-addins-gui >= $MONOADDINS_REQUIRED mono-addins-setup >= $MONOADDINS_REQUIRED") 2>&5
+ { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"libgnome-2.0 >= \$LIBGNOME_REQUIRED libgnomeui-2.0 >= \$LIBGNOMEUI_REQUIRED libexif >= \$LIBEXIF_REQUIRED_MIN libexif < \$LIBEXIF_REQUIRED_MAX glade-sharp-2.0 >= \$GTKSHARP_REQUIRED gtk+-2.0 >= \$GTK_REQUIRED mono-cairo >= \$MONO_CAIRO_REQUIRED cairo >= \$CAIRO_REQUIRED mono-addins >= \$MONOADDINS_REQUIRED mono-addins-gui >= \$MONOADDINS_REQUIRED mono-addins-setup >= \$MONOADDINS_REQUIRED\""; } >&5
+ ($PKG_CONFIG --exists --print-errors "libgnome-2.0 >= $LIBGNOME_REQUIRED libgnomeui-2.0 >= $LIBGNOMEUI_REQUIRED libexif >= $LIBEXIF_REQUIRED_MIN libexif < $LIBEXIF_REQUIRED_MAX glade-sharp-2.0 >= $GTKSHARP_REQUIRED gtk+-2.0 >= $GTK_REQUIRED mono-cairo >= $MONO_CAIRO_REQUIRED cairo >= $CAIRO_REQUIRED mono-addins >= $MONOADDINS_REQUIRED mono-addins-gui >= $MONOADDINS_REQUIRED mono-addins-setup >= $MONOADDINS_REQUIRED") 2>&5
ac_status=$?
$as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
test $ac_status = 0; }; then
- pkg_cv_F_LIBS=`$PKG_CONFIG --libs "libgnome-2.0 >= $LIBGNOME_REQUIRED libgnomeui-2.0 >= $LIBGNOMEUI_REQUIRED libexif >= $LIBEXIF_REQUIRED_MIN libexif < $LIBEXIF_REQUIRED_MAX gtk-sharp-2.0 >= $GTKSHARP_REQUIRED glib-sharp-2.0 >= $GTKSHARP_REQUIRED glade-sharp-2.0 >= $GTKSHARP_REQUIRED gnome-vfs-sharp-2.0 >= $GTKSHARP_REQUIRED gtk+-2.0 >= $GTK_REQUIRED mono-cairo >= $MONO_CAIRO_REQUIRED cairo >= $CAIRO_REQUIRED mono-addins >= $MONOADDINS_REQUIRED mono-addins-gui >= $MONOADDINS_REQUIRED mono-addins-setup >= $MONOADDINS_REQUIRED" 2>/dev/null`
+ pkg_cv_F_LIBS=`$PKG_CONFIG --libs "libgnome-2.0 >= $LIBGNOME_REQUIRED libgnomeui-2.0 >= $LIBGNOMEUI_REQUIRED libexif >= $LIBEXIF_REQUIRED_MIN libexif < $LIBEXIF_REQUIRED_MAX glade-sharp-2.0 >= $GTKSHARP_REQUIRED gtk+-2.0 >= $GTK_REQUIRED mono-cairo >= $MONO_CAIRO_REQUIRED cairo >= $CAIRO_REQUIRED mono-addins >= $MONOADDINS_REQUIRED mono-addins-gui >= $MONOADDINS_REQUIRED mono-addins-setup >= $MONOADDINS_REQUIRED" 2>/dev/null`
else
pkg_failed=yes
fi
@@ -17267,14 +18038,14 @@ else
_pkg_short_errors_supported=no
fi
if test $_pkg_short_errors_supported = yes; then
- F_PKG_ERRORS=`$PKG_CONFIG --short-errors --print-errors "libgnome-2.0 >= $LIBGNOME_REQUIRED libgnomeui-2.0 >= $LIBGNOMEUI_REQUIRED libexif >= $LIBEXIF_REQUIRED_MIN libexif < $LIBEXIF_REQUIRED_MAX gtk-sharp-2.0 >= $GTKSHARP_REQUIRED glib-sharp-2.0 >= $GTKSHARP_REQUIRED glade-sharp-2.0 >= $GTKSHARP_REQUIRED gnome-vfs-sharp-2.0 >= $GTKSHARP_REQUIRED gtk+-2.0 >= $GTK_REQUIRED mono-cairo >= $MONO_CAIRO_REQUIRED cairo >= $CAIRO_REQUIRED mono-addins >= $MONOADDINS_REQUIRED mono-addins-gui >= $MONOADDINS_REQUIRED mono-addins-setup >= $MONOADDINS_REQUIRED" 2>&1`
+ F_PKG_ERRORS=`$PKG_CONFIG --short-errors --print-errors "libgnome-2.0 >= $LIBGNOME_REQUIRED libgnomeui-2.0 >= $LIBGNOMEUI_REQUIRED libexif >= $LIBEXIF_REQUIRED_MIN libexif < $LIBEXIF_REQUIRED_MAX glade-sharp-2.0 >= $GTKSHARP_REQUIRED gtk+-2.0 >= $GTK_REQUIRED mono-cairo >= $MONO_CAIRO_REQUIRED cairo >= $CAIRO_REQUIRED mono-addins >= $MONOADDINS_REQUIRED mono-addins-gui >= $MONOADDINS_REQUIRED mono-addins-setup >= $MONOADDINS_REQUIRED" 2>&1`
else
- F_PKG_ERRORS=`$PKG_CONFIG --print-errors "libgnome-2.0 >= $LIBGNOME_REQUIRED libgnomeui-2.0 >= $LIBGNOMEUI_REQUIRED libexif >= $LIBEXIF_REQUIRED_MIN libexif < $LIBEXIF_REQUIRED_MAX gtk-sharp-2.0 >= $GTKSHARP_REQUIRED glib-sharp-2.0 >= $GTKSHARP_REQUIRED glade-sharp-2.0 >= $GTKSHARP_REQUIRED gnome-vfs-sharp-2.0 >= $GTKSHARP_REQUIRED gtk+-2.0 >= $GTK_REQUIRED mono-cairo >= $MONO_CAIRO_REQUIRED cairo >= $CAIRO_REQUIRED mono-addins >= $MONOADDINS_REQUIRED mono-addins-gui >= $MONOADDINS_REQUIRED mono-addins-setup >= $MONOADDINS_REQUIRED" 2>&1`
+ F_PKG_ERRORS=`$PKG_CONFIG --print-errors "libgnome-2.0 >= $LIBGNOME_REQUIRED libgnomeui-2.0 >= $LIBGNOMEUI_REQUIRED libexif >= $LIBEXIF_REQUIRED_MIN libexif < $LIBEXIF_REQUIRED_MAX glade-sharp-2.0 >= $GTKSHARP_REQUIRED gtk+-2.0 >= $GTK_REQUIRED mono-cairo >= $MONO_CAIRO_REQUIRED cairo >= $CAIRO_REQUIRED mono-addins >= $MONOADDINS_REQUIRED mono-addins-gui >= $MONOADDINS_REQUIRED mono-addins-setup >= $MONOADDINS_REQUIRED" 2>&1`
fi
# Put the nasty error message in config.log where it belongs
echo "$F_PKG_ERRORS" >&5
- as_fn_error "Package requirements (libgnome-2.0 >= $LIBGNOME_REQUIRED libgnomeui-2.0 >= $LIBGNOMEUI_REQUIRED libexif >= $LIBEXIF_REQUIRED_MIN libexif < $LIBEXIF_REQUIRED_MAX gtk-sharp-2.0 >= $GTKSHARP_REQUIRED glib-sharp-2.0 >= $GTKSHARP_REQUIRED glade-sharp-2.0 >= $GTKSHARP_REQUIRED gnome-vfs-sharp-2.0 >= $GTKSHARP_REQUIRED gtk+-2.0 >= $GTK_REQUIRED mono-cairo >= $MONO_CAIRO_REQUIRED cairo >= $CAIRO_REQUIRED mono-addins >= $MONOADDINS_REQUIRED mono-addins-gui >= $MONOADDINS_REQUIRED mono-addins-setup >= $MONOADDINS_REQUIRED) were not met:
+ as_fn_error "Package requirements (libgnome-2.0 >= $LIBGNOME_REQUIRED libgnomeui-2.0 >= $LIBGNOMEUI_REQUIRED libexif >= $LIBEXIF_REQUIRED_MIN libexif < $LIBEXIF_REQUIRED_MAX glade-sharp-2.0 >= $GTKSHARP_REQUIRED gtk+-2.0 >= $GTK_REQUIRED mono-cairo >= $MONO_CAIRO_REQUIRED cairo >= $CAIRO_REQUIRED mono-addins >= $MONOADDINS_REQUIRED mono-addins-gui >= $MONOADDINS_REQUIRED mono-addins-setup >= $MONOADDINS_REQUIRED) were not met:
$F_PKG_ERRORS
@@ -17572,10 +18343,6 @@ $as_echo "yes" >&6; }
:
fi
-if pkg-config --atleast-version=1.2.5 mono-cairo; then
- CSC_DEFINES="$CSC_DEFINES -d:CAIRO_1_2_5"
-fi
-
if pkg-config --atleast-version=2.13.0 gtk-sharp-2.0 && pkg-config --max-version=2.14 gtk-sharp-2.0; then
as_fn_error "There's a svn version of gtk-sharp 2.13.x installed. Uninstall it." "$LINENO" 5
fi
@@ -17782,41 +18549,44 @@ fi
fi
fi
-if pkg-config --at-least-version=2.16 gtk+-2.0; then
+if pkg-config --atleast-version=2.16 gtk+-2.0; then
CSC_DEFINES="$CSC_DEFINES -d:GTK_2_16"
fi
+
+
+
pkg_failed=no
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for NDESK_DBUS" >&5
-$as_echo_n "checking for NDESK_DBUS... " >&6; }
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for MONO_ADDINS" >&5
+$as_echo_n "checking for MONO_ADDINS... " >&6; }
-if test -n "$NDESK_DBUS_CFLAGS"; then
- pkg_cv_NDESK_DBUS_CFLAGS="$NDESK_DBUS_CFLAGS"
+if test -n "$MONO_ADDINS_CFLAGS"; then
+ pkg_cv_MONO_ADDINS_CFLAGS="$MONO_ADDINS_CFLAGS"
elif test -n "$PKG_CONFIG"; then
if test -n "$PKG_CONFIG" && \
- { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"ndesk-dbus-1.0 >= \$NDESK_DBUS_REQUIRED ndesk-dbus-glib-1.0 >= \$NDESK_DBUS_GLIB_REQUIRED\""; } >&5
- ($PKG_CONFIG --exists --print-errors "ndesk-dbus-1.0 >= $NDESK_DBUS_REQUIRED ndesk-dbus-glib-1.0 >= $NDESK_DBUS_GLIB_REQUIRED") 2>&5
+ { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"mono-addins >= 0.3.1\""; } >&5
+ ($PKG_CONFIG --exists --print-errors "mono-addins >= 0.3.1") 2>&5
ac_status=$?
$as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
test $ac_status = 0; }; then
- pkg_cv_NDESK_DBUS_CFLAGS=`$PKG_CONFIG --cflags "ndesk-dbus-1.0 >= $NDESK_DBUS_REQUIRED ndesk-dbus-glib-1.0 >= $NDESK_DBUS_GLIB_REQUIRED" 2>/dev/null`
+ pkg_cv_MONO_ADDINS_CFLAGS=`$PKG_CONFIG --cflags "mono-addins >= 0.3.1" 2>/dev/null`
else
pkg_failed=yes
fi
else
pkg_failed=untried
fi
-if test -n "$NDESK_DBUS_LIBS"; then
- pkg_cv_NDESK_DBUS_LIBS="$NDESK_DBUS_LIBS"
+if test -n "$MONO_ADDINS_LIBS"; then
+ pkg_cv_MONO_ADDINS_LIBS="$MONO_ADDINS_LIBS"
elif test -n "$PKG_CONFIG"; then
if test -n "$PKG_CONFIG" && \
- { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"ndesk-dbus-1.0 >= \$NDESK_DBUS_REQUIRED ndesk-dbus-glib-1.0 >= \$NDESK_DBUS_GLIB_REQUIRED\""; } >&5
- ($PKG_CONFIG --exists --print-errors "ndesk-dbus-1.0 >= $NDESK_DBUS_REQUIRED ndesk-dbus-glib-1.0 >= $NDESK_DBUS_GLIB_REQUIRED") 2>&5
+ { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"mono-addins >= 0.3.1\""; } >&5
+ ($PKG_CONFIG --exists --print-errors "mono-addins >= 0.3.1") 2>&5
ac_status=$?
$as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
test $ac_status = 0; }; then
- pkg_cv_NDESK_DBUS_LIBS=`$PKG_CONFIG --libs "ndesk-dbus-1.0 >= $NDESK_DBUS_REQUIRED ndesk-dbus-glib-1.0 >= $NDESK_DBUS_GLIB_REQUIRED" 2>/dev/null`
+ pkg_cv_MONO_ADDINS_LIBS=`$PKG_CONFIG --libs "mono-addins >= 0.3.1" 2>/dev/null`
else
pkg_failed=yes
fi
@@ -17834,22 +18604,22 @@ else
_pkg_short_errors_supported=no
fi
if test $_pkg_short_errors_supported = yes; then
- NDESK_DBUS_PKG_ERRORS=`$PKG_CONFIG --short-errors --print-errors "ndesk-dbus-1.0 >= $NDESK_DBUS_REQUIRED ndesk-dbus-glib-1.0 >= $NDESK_DBUS_GLIB_REQUIRED" 2>&1`
+ MONO_ADDINS_PKG_ERRORS=`$PKG_CONFIG --short-errors --print-errors "mono-addins >= 0.3.1" 2>&1`
else
- NDESK_DBUS_PKG_ERRORS=`$PKG_CONFIG --print-errors "ndesk-dbus-1.0 >= $NDESK_DBUS_REQUIRED ndesk-dbus-glib-1.0 >= $NDESK_DBUS_GLIB_REQUIRED" 2>&1`
+ MONO_ADDINS_PKG_ERRORS=`$PKG_CONFIG --print-errors "mono-addins >= 0.3.1" 2>&1`
fi
# Put the nasty error message in config.log where it belongs
- echo "$NDESK_DBUS_PKG_ERRORS" >&5
+ echo "$MONO_ADDINS_PKG_ERRORS" >&5
- as_fn_error "Package requirements (ndesk-dbus-1.0 >= $NDESK_DBUS_REQUIRED ndesk-dbus-glib-1.0 >= $NDESK_DBUS_GLIB_REQUIRED) were not met:
+ as_fn_error "Package requirements (mono-addins >= 0.3.1) were not met:
-$NDESK_DBUS_PKG_ERRORS
+$MONO_ADDINS_PKG_ERRORS
Consider adjusting the PKG_CONFIG_PATH environment variable if you
installed software in a non-standard prefix.
-Alternatively, you may set the environment variables NDESK_DBUS_CFLAGS
-and NDESK_DBUS_LIBS to avoid the need to call pkg-config.
+Alternatively, you may set the environment variables MONO_ADDINS_CFLAGS
+and MONO_ADDINS_LIBS to avoid the need to call pkg-config.
See the pkg-config man page for more details.
" "$LINENO" 5
elif test $pkg_failed = untried; then
@@ -17859,15 +18629,15 @@ as_fn_error "The pkg-config script could not be found or is too old. Make sure
is in your PATH or set the PKG_CONFIG environment variable to the full
path to pkg-config.
-Alternatively, you may set the environment variables NDESK_DBUS_CFLAGS
-and NDESK_DBUS_LIBS to avoid the need to call pkg-config.
+Alternatively, you may set the environment variables MONO_ADDINS_CFLAGS
+and MONO_ADDINS_LIBS to avoid the need to call pkg-config.
See the pkg-config man page for more details.
To get pkg-config, see <http://pkg-config.freedesktop.org/>.
See \`config.log' for more details." "$LINENO" 5; }
else
- NDESK_DBUS_CFLAGS=$pkg_cv_NDESK_DBUS_CFLAGS
- NDESK_DBUS_LIBS=$pkg_cv_NDESK_DBUS_LIBS
+ MONO_ADDINS_CFLAGS=$pkg_cv_MONO_ADDINS_CFLAGS
+ MONO_ADDINS_LIBS=$pkg_cv_MONO_ADDINS_LIBS
{ $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
$as_echo "yes" >&6; }
:
@@ -17876,35 +18646,35 @@ fi
pkg_failed=no
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for NUNIT" >&5
-$as_echo_n "checking for NUNIT... " >&6; }
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for MONO_ADDINS_SETUP" >&5
+$as_echo_n "checking for MONO_ADDINS_SETUP... " >&6; }
-if test -n "$NUNIT_CFLAGS"; then
- pkg_cv_NUNIT_CFLAGS="$NUNIT_CFLAGS"
+if test -n "$MONO_ADDINS_SETUP_CFLAGS"; then
+ pkg_cv_MONO_ADDINS_SETUP_CFLAGS="$MONO_ADDINS_SETUP_CFLAGS"
elif test -n "$PKG_CONFIG"; then
if test -n "$PKG_CONFIG" && \
- { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"nunit >= \$NUNIT_REQUIRED\""; } >&5
- ($PKG_CONFIG --exists --print-errors "nunit >= $NUNIT_REQUIRED") 2>&5
+ { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"mono-addins-setup >= 0.3.1\""; } >&5
+ ($PKG_CONFIG --exists --print-errors "mono-addins-setup >= 0.3.1") 2>&5
ac_status=$?
$as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
test $ac_status = 0; }; then
- pkg_cv_NUNIT_CFLAGS=`$PKG_CONFIG --cflags "nunit >= $NUNIT_REQUIRED" 2>/dev/null`
+ pkg_cv_MONO_ADDINS_SETUP_CFLAGS=`$PKG_CONFIG --cflags "mono-addins-setup >= 0.3.1" 2>/dev/null`
else
pkg_failed=yes
fi
else
pkg_failed=untried
fi
-if test -n "$NUNIT_LIBS"; then
- pkg_cv_NUNIT_LIBS="$NUNIT_LIBS"
+if test -n "$MONO_ADDINS_SETUP_LIBS"; then
+ pkg_cv_MONO_ADDINS_SETUP_LIBS="$MONO_ADDINS_SETUP_LIBS"
elif test -n "$PKG_CONFIG"; then
if test -n "$PKG_CONFIG" && \
- { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"nunit >= \$NUNIT_REQUIRED\""; } >&5
- ($PKG_CONFIG --exists --print-errors "nunit >= $NUNIT_REQUIRED") 2>&5
+ { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"mono-addins-setup >= 0.3.1\""; } >&5
+ ($PKG_CONFIG --exists --print-errors "mono-addins-setup >= 0.3.1") 2>&5
ac_status=$?
$as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
test $ac_status = 0; }; then
- pkg_cv_NUNIT_LIBS=`$PKG_CONFIG --libs "nunit >= $NUNIT_REQUIRED" 2>/dev/null`
+ pkg_cv_MONO_ADDINS_SETUP_LIBS=`$PKG_CONFIG --libs "mono-addins-setup >= 0.3.1" 2>/dev/null`
else
pkg_failed=yes
fi
@@ -17922,68 +18692,77 @@ else
_pkg_short_errors_supported=no
fi
if test $_pkg_short_errors_supported = yes; then
- NUNIT_PKG_ERRORS=`$PKG_CONFIG --short-errors --print-errors "nunit >= $NUNIT_REQUIRED" 2>&1`
+ MONO_ADDINS_SETUP_PKG_ERRORS=`$PKG_CONFIG --short-errors --print-errors "mono-addins-setup >= 0.3.1" 2>&1`
else
- NUNIT_PKG_ERRORS=`$PKG_CONFIG --print-errors "nunit >= $NUNIT_REQUIRED" 2>&1`
+ MONO_ADDINS_SETUP_PKG_ERRORS=`$PKG_CONFIG --print-errors "mono-addins-setup >= 0.3.1" 2>&1`
fi
# Put the nasty error message in config.log where it belongs
- echo "$NUNIT_PKG_ERRORS" >&5
+ echo "$MONO_ADDINS_SETUP_PKG_ERRORS" >&5
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
- do_tests="no"
+ as_fn_error "Package requirements (mono-addins-setup >= 0.3.1) were not met:
+
+$MONO_ADDINS_SETUP_PKG_ERRORS
+
+Consider adjusting the PKG_CONFIG_PATH environment variable if you
+installed software in a non-standard prefix.
+
+Alternatively, you may set the environment variables MONO_ADDINS_SETUP_CFLAGS
+and MONO_ADDINS_SETUP_LIBS to avoid the need to call pkg-config.
+See the pkg-config man page for more details.
+" "$LINENO" 5
elif test $pkg_failed = untried; then
- do_tests="no"
-else
- NUNIT_CFLAGS=$pkg_cv_NUNIT_CFLAGS
- NUNIT_LIBS=$pkg_cv_NUNIT_LIBS
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
-$as_echo "yes" >&6; }
- do_tests="yes"
-fi
+ { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
+$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
+as_fn_error "The pkg-config script could not be found or is too old. Make sure it
+is in your PATH or set the PKG_CONFIG environment variable to the full
+path to pkg-config.
+Alternatively, you may set the environment variables MONO_ADDINS_SETUP_CFLAGS
+and MONO_ADDINS_SETUP_LIBS to avoid the need to call pkg-config.
+See the pkg-config man page for more details.
- if test "x$do_tests" = "xyes"; then
- ENABLE_TESTS_TRUE=
- ENABLE_TESTS_FALSE='#'
+To get pkg-config, see <http://pkg-config.freedesktop.org/>.
+See \`config.log' for more details." "$LINENO" 5; }
else
- ENABLE_TESTS_TRUE='#'
- ENABLE_TESTS_FALSE=
+ MONO_ADDINS_SETUP_CFLAGS=$pkg_cv_MONO_ADDINS_SETUP_CFLAGS
+ MONO_ADDINS_SETUP_LIBS=$pkg_cv_MONO_ADDINS_SETUP_LIBS
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+$as_echo "yes" >&6; }
+ :
fi
-if test "x$do_tests" = "xno"; then
pkg_failed=no
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for NUNIT" >&5
-$as_echo_n "checking for NUNIT... " >&6; }
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for MONO_ADDINS_GUI" >&5
+$as_echo_n "checking for MONO_ADDINS_GUI... " >&6; }
-if test -n "$NUNIT_CFLAGS"; then
- pkg_cv_NUNIT_CFLAGS="$NUNIT_CFLAGS"
+if test -n "$MONO_ADDINS_GUI_CFLAGS"; then
+ pkg_cv_MONO_ADDINS_GUI_CFLAGS="$MONO_ADDINS_GUI_CFLAGS"
elif test -n "$PKG_CONFIG"; then
if test -n "$PKG_CONFIG" && \
- { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"mono-nunit >= 2.0\""; } >&5
- ($PKG_CONFIG --exists --print-errors "mono-nunit >= 2.0") 2>&5
+ { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"mono-addins-gui >= 0.3.1\""; } >&5
+ ($PKG_CONFIG --exists --print-errors "mono-addins-gui >= 0.3.1") 2>&5
ac_status=$?
$as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
test $ac_status = 0; }; then
- pkg_cv_NUNIT_CFLAGS=`$PKG_CONFIG --cflags "mono-nunit >= 2.0" 2>/dev/null`
+ pkg_cv_MONO_ADDINS_GUI_CFLAGS=`$PKG_CONFIG --cflags "mono-addins-gui >= 0.3.1" 2>/dev/null`
else
pkg_failed=yes
fi
else
pkg_failed=untried
fi
-if test -n "$NUNIT_LIBS"; then
- pkg_cv_NUNIT_LIBS="$NUNIT_LIBS"
+if test -n "$MONO_ADDINS_GUI_LIBS"; then
+ pkg_cv_MONO_ADDINS_GUI_LIBS="$MONO_ADDINS_GUI_LIBS"
elif test -n "$PKG_CONFIG"; then
if test -n "$PKG_CONFIG" && \
- { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"mono-nunit >= 2.0\""; } >&5
- ($PKG_CONFIG --exists --print-errors "mono-nunit >= 2.0") 2>&5
+ { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"mono-addins-gui >= 0.3.1\""; } >&5
+ ($PKG_CONFIG --exists --print-errors "mono-addins-gui >= 0.3.1") 2>&5
ac_status=$?
$as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
test $ac_status = 0; }; then
- pkg_cv_NUNIT_LIBS=`$PKG_CONFIG --libs "mono-nunit >= 2.0" 2>/dev/null`
+ pkg_cv_MONO_ADDINS_GUI_LIBS=`$PKG_CONFIG --libs "mono-addins-gui >= 0.3.1" 2>/dev/null`
else
pkg_failed=yes
fi
@@ -18001,44 +18780,132 @@ else
_pkg_short_errors_supported=no
fi
if test $_pkg_short_errors_supported = yes; then
- NUNIT_PKG_ERRORS=`$PKG_CONFIG --short-errors --print-errors "mono-nunit >= 2.0" 2>&1`
+ MONO_ADDINS_GUI_PKG_ERRORS=`$PKG_CONFIG --short-errors --print-errors "mono-addins-gui >= 0.3.1" 2>&1`
else
- NUNIT_PKG_ERRORS=`$PKG_CONFIG --print-errors "mono-nunit >= 2.0" 2>&1`
+ MONO_ADDINS_GUI_PKG_ERRORS=`$PKG_CONFIG --print-errors "mono-addins-gui >= 0.3.1" 2>&1`
fi
# Put the nasty error message in config.log where it belongs
- echo "$NUNIT_PKG_ERRORS" >&5
+ echo "$MONO_ADDINS_GUI_PKG_ERRORS" >&5
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
- do_tests="no"
+ as_fn_error "Package requirements (mono-addins-gui >= 0.3.1) were not met:
+
+$MONO_ADDINS_GUI_PKG_ERRORS
+
+Consider adjusting the PKG_CONFIG_PATH environment variable if you
+installed software in a non-standard prefix.
+
+Alternatively, you may set the environment variables MONO_ADDINS_GUI_CFLAGS
+and MONO_ADDINS_GUI_LIBS to avoid the need to call pkg-config.
+See the pkg-config man page for more details.
+" "$LINENO" 5
elif test $pkg_failed = untried; then
- do_tests="no"
+ { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
+$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
+as_fn_error "The pkg-config script could not be found or is too old. Make sure it
+is in your PATH or set the PKG_CONFIG environment variable to the full
+path to pkg-config.
+
+Alternatively, you may set the environment variables MONO_ADDINS_GUI_CFLAGS
+and MONO_ADDINS_GUI_LIBS to avoid the need to call pkg-config.
+See the pkg-config man page for more details.
+
+To get pkg-config, see <http://pkg-config.freedesktop.org/>.
+See \`config.log' for more details." "$LINENO" 5; }
else
- NUNIT_CFLAGS=$pkg_cv_NUNIT_CFLAGS
- NUNIT_LIBS=$pkg_cv_NUNIT_LIBS
+ MONO_ADDINS_GUI_CFLAGS=$pkg_cv_MONO_ADDINS_GUI_CFLAGS
+ MONO_ADDINS_GUI_LIBS=$pkg_cv_MONO_ADDINS_GUI_LIBS
{ $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
$as_echo "yes" >&6; }
- do_tests="yes"
+ :
fi
- if test "x$do_tests" = "xyes"; then
- ENABLE_TESTS_TRUE=
- ENABLE_TESTS_FALSE='#'
+
+
+pkg_failed=no
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for NDESK_DBUS" >&5
+$as_echo_n "checking for NDESK_DBUS... " >&6; }
+
+if test -n "$NDESK_DBUS_CFLAGS"; then
+ pkg_cv_NDESK_DBUS_CFLAGS="$NDESK_DBUS_CFLAGS"
+ elif test -n "$PKG_CONFIG"; then
+ if test -n "$PKG_CONFIG" && \
+ { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"ndesk-dbus-1.0 >= \$NDESK_DBUS_REQUIRED ndesk-dbus-glib-1.0 >= \$NDESK_DBUS_GLIB_REQUIRED\""; } >&5
+ ($PKG_CONFIG --exists --print-errors "ndesk-dbus-1.0 >= $NDESK_DBUS_REQUIRED ndesk-dbus-glib-1.0 >= $NDESK_DBUS_GLIB_REQUIRED") 2>&5
+ ac_status=$?
+ $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+ test $ac_status = 0; }; then
+ pkg_cv_NDESK_DBUS_CFLAGS=`$PKG_CONFIG --cflags "ndesk-dbus-1.0 >= $NDESK_DBUS_REQUIRED ndesk-dbus-glib-1.0 >= $NDESK_DBUS_GLIB_REQUIRED" 2>/dev/null`
else
- ENABLE_TESTS_TRUE='#'
- ENABLE_TESTS_FALSE=
+ pkg_failed=yes
+fi
+ else
+ pkg_failed=untried
+fi
+if test -n "$NDESK_DBUS_LIBS"; then
+ pkg_cv_NDESK_DBUS_LIBS="$NDESK_DBUS_LIBS"
+ elif test -n "$PKG_CONFIG"; then
+ if test -n "$PKG_CONFIG" && \
+ { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"ndesk-dbus-1.0 >= \$NDESK_DBUS_REQUIRED ndesk-dbus-glib-1.0 >= \$NDESK_DBUS_GLIB_REQUIRED\""; } >&5
+ ($PKG_CONFIG --exists --print-errors "ndesk-dbus-1.0 >= $NDESK_DBUS_REQUIRED ndesk-dbus-glib-1.0 >= $NDESK_DBUS_GLIB_REQUIRED") 2>&5
+ ac_status=$?
+ $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+ test $ac_status = 0; }; then
+ pkg_cv_NDESK_DBUS_LIBS=`$PKG_CONFIG --libs "ndesk-dbus-1.0 >= $NDESK_DBUS_REQUIRED ndesk-dbus-glib-1.0 >= $NDESK_DBUS_GLIB_REQUIRED" 2>/dev/null`
+else
+ pkg_failed=yes
+fi
+ else
+ pkg_failed=untried
fi
- if test "x$do_tests" = "xno"; then
- NUNIT_DEFINES=''
- { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: Could not find nunit: tests will not be available." >&5
-$as_echo "$as_me: WARNING: Could not find nunit: tests will not be available." >&2;}
- else
- NUNIT_DEFINES='-d:ENABLE_NUNIT'
- fi
+if test $pkg_failed = yes; then
+
+if $PKG_CONFIG --atleast-pkgconfig-version 0.20; then
+ _pkg_short_errors_supported=yes
+else
+ _pkg_short_errors_supported=no
+fi
+ if test $_pkg_short_errors_supported = yes; then
+ NDESK_DBUS_PKG_ERRORS=`$PKG_CONFIG --short-errors --print-errors "ndesk-dbus-1.0 >= $NDESK_DBUS_REQUIRED ndesk-dbus-glib-1.0 >= $NDESK_DBUS_GLIB_REQUIRED" 2>&1`
+ else
+ NDESK_DBUS_PKG_ERRORS=`$PKG_CONFIG --print-errors "ndesk-dbus-1.0 >= $NDESK_DBUS_REQUIRED ndesk-dbus-glib-1.0 >= $NDESK_DBUS_GLIB_REQUIRED" 2>&1`
+ fi
+ # Put the nasty error message in config.log where it belongs
+ echo "$NDESK_DBUS_PKG_ERRORS" >&5
+
+ as_fn_error "Package requirements (ndesk-dbus-1.0 >= $NDESK_DBUS_REQUIRED ndesk-dbus-glib-1.0 >= $NDESK_DBUS_GLIB_REQUIRED) were not met:
+
+$NDESK_DBUS_PKG_ERRORS
+
+Consider adjusting the PKG_CONFIG_PATH environment variable if you
+installed software in a non-standard prefix.
+
+Alternatively, you may set the environment variables NDESK_DBUS_CFLAGS
+and NDESK_DBUS_LIBS to avoid the need to call pkg-config.
+See the pkg-config man page for more details.
+" "$LINENO" 5
+elif test $pkg_failed = untried; then
+ { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
+$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
+as_fn_error "The pkg-config script could not be found or is too old. Make sure it
+is in your PATH or set the PKG_CONFIG environment variable to the full
+path to pkg-config.
+
+Alternatively, you may set the environment variables NDESK_DBUS_CFLAGS
+and NDESK_DBUS_LIBS to avoid the need to call pkg-config.
+See the pkg-config man page for more details.
+
+To get pkg-config, see <http://pkg-config.freedesktop.org/>.
+See \`config.log' for more details." "$LINENO" 5; }
+else
+ NDESK_DBUS_CFLAGS=$pkg_cv_NDESK_DBUS_CFLAGS
+ NDESK_DBUS_LIBS=$pkg_cv_NDESK_DBUS_LIBS
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+$as_echo "yes" >&6; }
+ :
fi
@@ -18376,97 +19243,6 @@ $as_echo "yes" >&6; }
fi
-
-
-pkg_failed=no
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for LIBGPHOTO2" >&5
-$as_echo_n "checking for LIBGPHOTO2... " >&6; }
-
-if test -n "$LIBGPHOTO2_CFLAGS"; then
- pkg_cv_LIBGPHOTO2_CFLAGS="$LIBGPHOTO2_CFLAGS"
- elif test -n "$PKG_CONFIG"; then
- if test -n "$PKG_CONFIG" && \
- { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"libgphoto2 >= \$LIBGPHOTO2_REQUIRED\""; } >&5
- ($PKG_CONFIG --exists --print-errors "libgphoto2 >= $LIBGPHOTO2_REQUIRED") 2>&5
- ac_status=$?
- $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
- test $ac_status = 0; }; then
- pkg_cv_LIBGPHOTO2_CFLAGS=`$PKG_CONFIG --cflags "libgphoto2 >= $LIBGPHOTO2_REQUIRED" 2>/dev/null`
-else
- pkg_failed=yes
-fi
- else
- pkg_failed=untried
-fi
-if test -n "$LIBGPHOTO2_LIBS"; then
- pkg_cv_LIBGPHOTO2_LIBS="$LIBGPHOTO2_LIBS"
- elif test -n "$PKG_CONFIG"; then
- if test -n "$PKG_CONFIG" && \
- { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"libgphoto2 >= \$LIBGPHOTO2_REQUIRED\""; } >&5
- ($PKG_CONFIG --exists --print-errors "libgphoto2 >= $LIBGPHOTO2_REQUIRED") 2>&5
- ac_status=$?
- $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
- test $ac_status = 0; }; then
- pkg_cv_LIBGPHOTO2_LIBS=`$PKG_CONFIG --libs "libgphoto2 >= $LIBGPHOTO2_REQUIRED" 2>/dev/null`
-else
- pkg_failed=yes
-fi
- else
- pkg_failed=untried
-fi
-
-
-
-if test $pkg_failed = yes; then
-
-if $PKG_CONFIG --atleast-pkgconfig-version 0.20; then
- _pkg_short_errors_supported=yes
-else
- _pkg_short_errors_supported=no
-fi
- if test $_pkg_short_errors_supported = yes; then
- LIBGPHOTO2_PKG_ERRORS=`$PKG_CONFIG --short-errors --print-errors "libgphoto2 >= $LIBGPHOTO2_REQUIRED" 2>&1`
- else
- LIBGPHOTO2_PKG_ERRORS=`$PKG_CONFIG --print-errors "libgphoto2 >= $LIBGPHOTO2_REQUIRED" 2>&1`
- fi
- # Put the nasty error message in config.log where it belongs
- echo "$LIBGPHOTO2_PKG_ERRORS" >&5
-
- as_fn_error "Package requirements (libgphoto2 >= $LIBGPHOTO2_REQUIRED) were not met:
-
-$LIBGPHOTO2_PKG_ERRORS
-
-Consider adjusting the PKG_CONFIG_PATH environment variable if you
-installed software in a non-standard prefix.
-
-Alternatively, you may set the environment variables LIBGPHOTO2_CFLAGS
-and LIBGPHOTO2_LIBS to avoid the need to call pkg-config.
-See the pkg-config man page for more details.
-" "$LINENO" 5
-elif test $pkg_failed = untried; then
- { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
-$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
-as_fn_error "The pkg-config script could not be found or is too old. Make sure it
-is in your PATH or set the PKG_CONFIG environment variable to the full
-path to pkg-config.
-
-Alternatively, you may set the environment variables LIBGPHOTO2_CFLAGS
-and LIBGPHOTO2_LIBS to avoid the need to call pkg-config.
-See the pkg-config man page for more details.
-
-To get pkg-config, see <http://pkg-config.freedesktop.org/>.
-See \`config.log' for more details." "$LINENO" 5; }
-else
- LIBGPHOTO2_CFLAGS=$pkg_cv_LIBGPHOTO2_CFLAGS
- LIBGPHOTO2_LIBS=$pkg_cv_LIBGPHOTO2_LIBS
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
-$as_echo "yes" >&6; }
- :
-fi
-
-
-
-
LIBEXIF_API_CHANGE=0.6.0
pkg_failed=no
@@ -19593,7 +20369,7 @@ fi
-ac_config_files="$ac_config_files Makefile build/Makefile build/m4/Makefile build/m4/shave/shave build/m4/shave/shave-libtool lib/dpap-sharp/Makefile lib/dpap-sharp/lib/Makefile lib/dpap-sharp/dpap-client/Makefile lib/dpap-sharp/dpap-server/Makefile lib/dpap-sharp/DPAPService/Makefile lib/dpap-sharp/DPAPBrowser/Makefile lib/GKeyFile/Makefile lib/gio-sharp/Makefile lib/gio-sharp/gio/Makefile lib/gio-sharp/generator/Makefile lib/gnome-keyring-sharp/Makefile lib/gtk-sharp-beans/Makefile lib/libfspot/Makefile lib/libgphoto2-sharp/Makefile lib/libgphoto2-sharp/libgphoto2-sharp.dll.config lib/libgphoto2-sharp/glue/Makefile lib/libjpegtran/Makefile lib/Makefile lib/semweb/Makefile lib/unique-sharp/Makefile lib/unique-sharp/generator/Makefile lib/unique-sharp/unique/Makefile docs/Makefile icons/Makefile tools/Makefile po/Makefile.in src/Core/Defines.cs src/AssemblyInfo.cs src/f-spot.exe.config src/Cms.dll.config src/FSpot.Widgets.dll.config src/Makefile extensions/Makefile extensions/Editors/Makefile extensions/Editors/BlackoutEditor/Makefile extensions/Editors/BWEditor/Makefile extensions/Editors/FlipEditor/Makefile extensions/Editors/PixelateEditor/Makefile extensions/Editors/ResizeEditor/Makefile extensions/Exporters/Makefile extensions/Exporters/CDExport/Makefile extensions/Exporters/FlickrExport/Makefile extensions/Exporters/FlickrExport/FlickrNet/Makefile extensions/Exporters/GalleryExport/Makefile extensions/Exporters/FacebookExport/Makefile extensions/Exporters/FolderExport/Makefile extensions/Exporters/SmugMugExport/SmugMugNet/Makefile extensions/Exporters/SmugMugExport/Makefile extensions/Exporters/TabbloExport/Makefile extensions/Exporters/TabbloExport/Tabblo/Makefile extensions/Exporters/PicasaWebExport/Makefile extensions/Exporters/PicasaWebExport/google-sharp/Makefile extensions/Exporters/ZipExport/Makefile extensions/Services/Makefile extensions/Services/DBusService/Makefile extensions/Tools/Makefile extensions/Tools/RawPlusJpeg/Makefile extensions/Tools/ChangePhotoPath/Makefile extensions/Tools/HashJob/Makefile extensions/Tools/DevelopInUFraw/Makefile extensions/Tools/LiveWebGallery/Makefile extensions/Tools/MergeDb/Makefile extensions/Tools/RetroactiveRoll/Makefile extensions/Tools/ScreensaverConfig/Makefile extensions/Transitions/Makefile extensions/Transitions/CoverTransition/Makefile tests/Makefile tests/src/Makefile f-spot.pc f-spot.spec f-spot.desktop.in f-spot-view.desktop.in f-spot-import.desktop.in"
+ac_config_files="$ac_config_files Makefile build/Makefile build/m4/Makefile build/m4/shave/shave build/m4/shave/shave-libtool build/pkg-config/Makefile data/Makefile data/desktop-files/Makefile data/desktop-files/f-spot.desktop.in data/desktop-files/f-spot-view.desktop.in data/desktop-files/f-spot-import.desktop.in help/Makefile lib/GKeyFile/Makefile lib/gio-sharp/Makefile lib/gio-sharp/gio/Makefile lib/gio-sharp/generator/Makefile lib/gtk-sharp-beans/Makefile lib/libfspot/Makefile lib/libjpegtran/Makefile lib/Makefile lib/semweb/Makefile lib/unique-sharp/Makefile lib/unique-sharp/generator/Makefile lib/unique-sharp/unique/Makefile lib/Hyena/src/Hyena/Makefile lib/Hyena/src/Mono.Data.Sqlite/Makefile lib/Hyena/src/Hyena.Data.Sqlite/Makefile lib/Hyena/src/Hyena.Gui/Makefile docs/Makefile icons/Makefile tools/Makefile po/Makefile.in src/Cms/FSpot.Cms.dll.config src/Cms/Makefile src/Utils/Makefile src/Bling/Makefile src/JobScheduler/Makefile src/Query/Makefile src/Core/Defines.cs src/Core/Makefile src/Core/FSpot.Core.dll.config src/Widgets/Makefile src/Widgets/FSpot.Widgets.dll.config src/Platform/Makefile src/AssemblyInfo.cs src/f-spot.exe.config src/Makefile extensions/Makefile extensions/Editors/Makefile extensions/Editors/BlackoutEditor/Makefile extensions/Editors/BWEditor/Makefile extensions/Editors/FlipEditor/Makefile extensions/Editors/PixelateEditor/Makefile extensions/Editors/ResizeEditor/Makefile extensions/Exporters/Makefile extensions/Exporters/CDExport/Makefile extensions/Exporters/FlickrExport/Makefile extensions/Exporters/GalleryExport/Makefile extensions/Exporters/FacebookExport/Makefile extensions/Exporters/FolderExport/Makefile extensions/Exporters/SmugMugExport/SmugMugNet/Makefile extensions/Exporters/SmugMugExport/Makefile extensions/Exporters/TabbloExport/Makefile extensions/Exporters/TabbloExport/Tabblo/Makefile extensions/Exporters/PicasaWebExport/Makefile extensions/Exporters/PicasaWebExport/google-sharp/Makefile extensions/Exporters/ZipExport/Makefile extensions/Tools/Makefile extensions/Tools/RawPlusJpeg/Makefile extensions/Tools/ChangePhotoPath/Makefile extensions/Tools/HashJob/Makefile extensions/Tools/DevelopInUFraw/Makefile extensions/Tools/LiveWebGallery/Makefile extensions/Tools/MergeDb/Makefile extensions/Tools/RetroactiveRoll/Makefile extensions/Tools/ScreensaverConfig/Makefile extensions/Transitions/Makefile extensions/Transitions/CoverTransition/Makefile tests/Makefile"
cat >confcache <<\_ACEOF
# This file is a shell script that caches the results of configure
@@ -19716,18 +20492,6 @@ fi
ac_config_commands="$ac_config_commands po/stamp-it"
-if test -z "${am__fastdepCC_TRUE}" && test -z "${am__fastdepCC_FALSE}"; then
- as_fn_error "conditional \"am__fastdepCC\" was never defined.
-Usually this means the macro was only invoked conditionally." "$LINENO" 5
-fi
-if test -z "${am__fastdepCXX_TRUE}" && test -z "${am__fastdepCXX_FALSE}"; then
- as_fn_error "conditional \"am__fastdepCXX\" was never defined.
-Usually this means the macro was only invoked conditionally." "$LINENO" 5
-fi
-if test -z "${am__fastdepCXX_TRUE}" && test -z "${am__fastdepCXX_FALSE}"; then
- as_fn_error "conditional \"am__fastdepCXX\" was never defined.
-Usually this means the macro was only invoked conditionally." "$LINENO" 5
-fi
if test -z "${ENABLE_SK_TRUE}" && test -z "${ENABLE_SK_FALSE}"; then
as_fn_error "conditional \"ENABLE_SK\" was never defined.
Usually this means the macro was only invoked conditionally." "$LINENO" 5
@@ -19736,12 +20500,16 @@ if test -z "${HAVE_GNOME_DOC_UTILS_TRUE}" && test -z "${HAVE_GNOME_DOC_UTILS_FAL
as_fn_error "conditional \"HAVE_GNOME_DOC_UTILS\" was never defined.
Usually this means the macro was only invoked conditionally." "$LINENO" 5
fi
-if test -z "${NOGCONF_TRUE}" && test -z "${NOGCONF_FALSE}"; then
- as_fn_error "conditional \"NOGCONF\" was never defined.
+if test -z "${ENABLE_GNOME_DOCS_TRUE}" && test -z "${ENABLE_GNOME_DOCS_FALSE}"; then
+ as_fn_error "conditional \"ENABLE_GNOME_DOCS\" was never defined.
Usually this means the macro was only invoked conditionally." "$LINENO" 5
fi
-if test -z "${GCONF_SCHEMAS_INSTALL_TRUE}" && test -z "${GCONF_SCHEMAS_INSTALL_FALSE}"; then
- as_fn_error "conditional \"GCONF_SCHEMAS_INSTALL\" was never defined.
+if test -z "${HAVE_GLIBSHARP_2_12_7_TRUE}" && test -z "${HAVE_GLIBSHARP_2_12_7_FALSE}"; then
+ as_fn_error "conditional \"HAVE_GLIBSHARP_2_12_7\" was never defined.
+Usually this means the macro was only invoked conditionally." "$LINENO" 5
+fi
+if test -z "${ENABLE_ATK_TRUE}" && test -z "${ENABLE_ATK_FALSE}"; then
+ as_fn_error "conditional \"ENABLE_ATK\" was never defined.
Usually this means the macro was only invoked conditionally." "$LINENO" 5
fi
if test -z "${ENABLE_TESTS_TRUE}" && test -z "${ENABLE_TESTS_FALSE}"; then
@@ -19752,6 +20520,30 @@ if test -z "${ENABLE_TESTS_TRUE}" && test -z "${ENABLE_TESTS_FALSE}"; then
as_fn_error "conditional \"ENABLE_TESTS\" was never defined.
Usually this means the macro was only invoked conditionally." "$LINENO" 5
fi
+if test -z "${ENABLE_TESTS_TRUE}" && test -z "${ENABLE_TESTS_FALSE}"; then
+ as_fn_error "conditional \"ENABLE_TESTS\" was never defined.
+Usually this means the macro was only invoked conditionally." "$LINENO" 5
+fi
+if test -z "${am__fastdepCC_TRUE}" && test -z "${am__fastdepCC_FALSE}"; then
+ as_fn_error "conditional \"am__fastdepCC\" was never defined.
+Usually this means the macro was only invoked conditionally." "$LINENO" 5
+fi
+if test -z "${am__fastdepCXX_TRUE}" && test -z "${am__fastdepCXX_FALSE}"; then
+ as_fn_error "conditional \"am__fastdepCXX\" was never defined.
+Usually this means the macro was only invoked conditionally." "$LINENO" 5
+fi
+if test -z "${am__fastdepCXX_TRUE}" && test -z "${am__fastdepCXX_FALSE}"; then
+ as_fn_error "conditional \"am__fastdepCXX\" was never defined.
+Usually this means the macro was only invoked conditionally." "$LINENO" 5
+fi
+if test -z "${NOGCONF_TRUE}" && test -z "${NOGCONF_FALSE}"; then
+ as_fn_error "conditional \"NOGCONF\" was never defined.
+Usually this means the macro was only invoked conditionally." "$LINENO" 5
+fi
+if test -z "${GCONF_SCHEMAS_INSTALL_TRUE}" && test -z "${GCONF_SCHEMAS_INSTALL_FALSE}"; then
+ as_fn_error "conditional \"GCONF_SCHEMAS_INSTALL\" was never defined.
+Usually this means the macro was only invoked conditionally." "$LINENO" 5
+fi
if test -z "${GCONF_SCHEMAS_INSTALL_TRUE}" && test -z "${GCONF_SCHEMAS_INSTALL_FALSE}"; then
as_fn_error "conditional \"GCONF_SCHEMAS_INSTALL\" was never defined.
Usually this means the macro was only invoked conditionally." "$LINENO" 5
@@ -20168,7 +20960,7 @@ cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1
# report actual input values of CONFIG_FILES etc. instead of their
# values after options handling.
ac_log="
-This file was extended by f-spot $as_me 0.6.2, which was
+This file was extended by f-spot $as_me 0.7.0, which was
generated by GNU Autoconf 2.65. Invocation command line was
CONFIG_FILES = $CONFIG_FILES
@@ -20234,7 +21026,7 @@ _ACEOF
cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
ac_cs_config="`$as_echo "$ac_configure_args" | sed 's/^ //; s/[\\""\`\$]/\\\\&/g'`"
ac_cs_version="\\
-f-spot config.status 0.6.2
+f-spot config.status 0.7.0
configured by $0, generated by GNU Autoconf 2.65,
with options \\"\$ac_cs_config\\"
@@ -20719,37 +21511,47 @@ do
"build/m4/Makefile") CONFIG_FILES="$CONFIG_FILES build/m4/Makefile" ;;
"build/m4/shave/shave") CONFIG_FILES="$CONFIG_FILES build/m4/shave/shave" ;;
"build/m4/shave/shave-libtool") CONFIG_FILES="$CONFIG_FILES build/m4/shave/shave-libtool" ;;
- "lib/dpap-sharp/Makefile") CONFIG_FILES="$CONFIG_FILES lib/dpap-sharp/Makefile" ;;
- "lib/dpap-sharp/lib/Makefile") CONFIG_FILES="$CONFIG_FILES lib/dpap-sharp/lib/Makefile" ;;
- "lib/dpap-sharp/dpap-client/Makefile") CONFIG_FILES="$CONFIG_FILES lib/dpap-sharp/dpap-client/Makefile" ;;
- "lib/dpap-sharp/dpap-server/Makefile") CONFIG_FILES="$CONFIG_FILES lib/dpap-sharp/dpap-server/Makefile" ;;
- "lib/dpap-sharp/DPAPService/Makefile") CONFIG_FILES="$CONFIG_FILES lib/dpap-sharp/DPAPService/Makefile" ;;
- "lib/dpap-sharp/DPAPBrowser/Makefile") CONFIG_FILES="$CONFIG_FILES lib/dpap-sharp/DPAPBrowser/Makefile" ;;
+ "build/pkg-config/Makefile") CONFIG_FILES="$CONFIG_FILES build/pkg-config/Makefile" ;;
+ "data/Makefile") CONFIG_FILES="$CONFIG_FILES data/Makefile" ;;
+ "data/desktop-files/Makefile") CONFIG_FILES="$CONFIG_FILES data/desktop-files/Makefile" ;;
+ "data/desktop-files/f-spot.desktop.in") CONFIG_FILES="$CONFIG_FILES data/desktop-files/f-spot.desktop.in" ;;
+ "data/desktop-files/f-spot-view.desktop.in") CONFIG_FILES="$CONFIG_FILES data/desktop-files/f-spot-view.desktop.in" ;;
+ "data/desktop-files/f-spot-import.desktop.in") CONFIG_FILES="$CONFIG_FILES data/desktop-files/f-spot-import.desktop.in" ;;
+ "help/Makefile") CONFIG_FILES="$CONFIG_FILES help/Makefile" ;;
"lib/GKeyFile/Makefile") CONFIG_FILES="$CONFIG_FILES lib/GKeyFile/Makefile" ;;
"lib/gio-sharp/Makefile") CONFIG_FILES="$CONFIG_FILES lib/gio-sharp/Makefile" ;;
"lib/gio-sharp/gio/Makefile") CONFIG_FILES="$CONFIG_FILES lib/gio-sharp/gio/Makefile" ;;
"lib/gio-sharp/generator/Makefile") CONFIG_FILES="$CONFIG_FILES lib/gio-sharp/generator/Makefile" ;;
- "lib/gnome-keyring-sharp/Makefile") CONFIG_FILES="$CONFIG_FILES lib/gnome-keyring-sharp/Makefile" ;;
"lib/gtk-sharp-beans/Makefile") CONFIG_FILES="$CONFIG_FILES lib/gtk-sharp-beans/Makefile" ;;
"lib/libfspot/Makefile") CONFIG_FILES="$CONFIG_FILES lib/libfspot/Makefile" ;;
- "lib/libgphoto2-sharp/Makefile") CONFIG_FILES="$CONFIG_FILES lib/libgphoto2-sharp/Makefile" ;;
- "lib/libgphoto2-sharp/libgphoto2-sharp.dll.config") CONFIG_FILES="$CONFIG_FILES lib/libgphoto2-sharp/libgphoto2-sharp.dll.config" ;;
- "lib/libgphoto2-sharp/glue/Makefile") CONFIG_FILES="$CONFIG_FILES lib/libgphoto2-sharp/glue/Makefile" ;;
"lib/libjpegtran/Makefile") CONFIG_FILES="$CONFIG_FILES lib/libjpegtran/Makefile" ;;
"lib/Makefile") CONFIG_FILES="$CONFIG_FILES lib/Makefile" ;;
"lib/semweb/Makefile") CONFIG_FILES="$CONFIG_FILES lib/semweb/Makefile" ;;
"lib/unique-sharp/Makefile") CONFIG_FILES="$CONFIG_FILES lib/unique-sharp/Makefile" ;;
"lib/unique-sharp/generator/Makefile") CONFIG_FILES="$CONFIG_FILES lib/unique-sharp/generator/Makefile" ;;
"lib/unique-sharp/unique/Makefile") CONFIG_FILES="$CONFIG_FILES lib/unique-sharp/unique/Makefile" ;;
+ "lib/Hyena/src/Hyena/Makefile") CONFIG_FILES="$CONFIG_FILES lib/Hyena/src/Hyena/Makefile" ;;
+ "lib/Hyena/src/Mono.Data.Sqlite/Makefile") CONFIG_FILES="$CONFIG_FILES lib/Hyena/src/Mono.Data.Sqlite/Makefile" ;;
+ "lib/Hyena/src/Hyena.Data.Sqlite/Makefile") CONFIG_FILES="$CONFIG_FILES lib/Hyena/src/Hyena.Data.Sqlite/Makefile" ;;
+ "lib/Hyena/src/Hyena.Gui/Makefile") CONFIG_FILES="$CONFIG_FILES lib/Hyena/src/Hyena.Gui/Makefile" ;;
"docs/Makefile") CONFIG_FILES="$CONFIG_FILES docs/Makefile" ;;
"icons/Makefile") CONFIG_FILES="$CONFIG_FILES icons/Makefile" ;;
"tools/Makefile") CONFIG_FILES="$CONFIG_FILES tools/Makefile" ;;
"po/Makefile.in") CONFIG_FILES="$CONFIG_FILES po/Makefile.in" ;;
+ "src/Cms/FSpot.Cms.dll.config") CONFIG_FILES="$CONFIG_FILES src/Cms/FSpot.Cms.dll.config" ;;
+ "src/Cms/Makefile") CONFIG_FILES="$CONFIG_FILES src/Cms/Makefile" ;;
+ "src/Utils/Makefile") CONFIG_FILES="$CONFIG_FILES src/Utils/Makefile" ;;
+ "src/Bling/Makefile") CONFIG_FILES="$CONFIG_FILES src/Bling/Makefile" ;;
+ "src/JobScheduler/Makefile") CONFIG_FILES="$CONFIG_FILES src/JobScheduler/Makefile" ;;
+ "src/Query/Makefile") CONFIG_FILES="$CONFIG_FILES src/Query/Makefile" ;;
"src/Core/Defines.cs") CONFIG_FILES="$CONFIG_FILES src/Core/Defines.cs" ;;
+ "src/Core/Makefile") CONFIG_FILES="$CONFIG_FILES src/Core/Makefile" ;;
+ "src/Core/FSpot.Core.dll.config") CONFIG_FILES="$CONFIG_FILES src/Core/FSpot.Core.dll.config" ;;
+ "src/Widgets/Makefile") CONFIG_FILES="$CONFIG_FILES src/Widgets/Makefile" ;;
+ "src/Widgets/FSpot.Widgets.dll.config") CONFIG_FILES="$CONFIG_FILES src/Widgets/FSpot.Widgets.dll.config" ;;
+ "src/Platform/Makefile") CONFIG_FILES="$CONFIG_FILES src/Platform/Makefile" ;;
"src/AssemblyInfo.cs") CONFIG_FILES="$CONFIG_FILES src/AssemblyInfo.cs" ;;
"src/f-spot.exe.config") CONFIG_FILES="$CONFIG_FILES src/f-spot.exe.config" ;;
- "src/Cms.dll.config") CONFIG_FILES="$CONFIG_FILES src/Cms.dll.config" ;;
- "src/FSpot.Widgets.dll.config") CONFIG_FILES="$CONFIG_FILES src/FSpot.Widgets.dll.config" ;;
"src/Makefile") CONFIG_FILES="$CONFIG_FILES src/Makefile" ;;
"extensions/Makefile") CONFIG_FILES="$CONFIG_FILES extensions/Makefile" ;;
"extensions/Editors/Makefile") CONFIG_FILES="$CONFIG_FILES extensions/Editors/Makefile" ;;
@@ -20761,7 +21563,6 @@ do
"extensions/Exporters/Makefile") CONFIG_FILES="$CONFIG_FILES extensions/Exporters/Makefile" ;;
"extensions/Exporters/CDExport/Makefile") CONFIG_FILES="$CONFIG_FILES extensions/Exporters/CDExport/Makefile" ;;
"extensions/Exporters/FlickrExport/Makefile") CONFIG_FILES="$CONFIG_FILES extensions/Exporters/FlickrExport/Makefile" ;;
- "extensions/Exporters/FlickrExport/FlickrNet/Makefile") CONFIG_FILES="$CONFIG_FILES extensions/Exporters/FlickrExport/FlickrNet/Makefile" ;;
"extensions/Exporters/GalleryExport/Makefile") CONFIG_FILES="$CONFIG_FILES extensions/Exporters/GalleryExport/Makefile" ;;
"extensions/Exporters/FacebookExport/Makefile") CONFIG_FILES="$CONFIG_FILES extensions/Exporters/FacebookExport/Makefile" ;;
"extensions/Exporters/FolderExport/Makefile") CONFIG_FILES="$CONFIG_FILES extensions/Exporters/FolderExport/Makefile" ;;
@@ -20772,8 +21573,6 @@ do
"extensions/Exporters/PicasaWebExport/Makefile") CONFIG_FILES="$CONFIG_FILES extensions/Exporters/PicasaWebExport/Makefile" ;;
"extensions/Exporters/PicasaWebExport/google-sharp/Makefile") CONFIG_FILES="$CONFIG_FILES extensions/Exporters/PicasaWebExport/google-sharp/Makefile" ;;
"extensions/Exporters/ZipExport/Makefile") CONFIG_FILES="$CONFIG_FILES extensions/Exporters/ZipExport/Makefile" ;;
- "extensions/Services/Makefile") CONFIG_FILES="$CONFIG_FILES extensions/Services/Makefile" ;;
- "extensions/Services/DBusService/Makefile") CONFIG_FILES="$CONFIG_FILES extensions/Services/DBusService/Makefile" ;;
"extensions/Tools/Makefile") CONFIG_FILES="$CONFIG_FILES extensions/Tools/Makefile" ;;
"extensions/Tools/RawPlusJpeg/Makefile") CONFIG_FILES="$CONFIG_FILES extensions/Tools/RawPlusJpeg/Makefile" ;;
"extensions/Tools/ChangePhotoPath/Makefile") CONFIG_FILES="$CONFIG_FILES extensions/Tools/ChangePhotoPath/Makefile" ;;
@@ -20786,12 +21585,6 @@ do
"extensions/Transitions/Makefile") CONFIG_FILES="$CONFIG_FILES extensions/Transitions/Makefile" ;;
"extensions/Transitions/CoverTransition/Makefile") CONFIG_FILES="$CONFIG_FILES extensions/Transitions/CoverTransition/Makefile" ;;
"tests/Makefile") CONFIG_FILES="$CONFIG_FILES tests/Makefile" ;;
- "tests/src/Makefile") CONFIG_FILES="$CONFIG_FILES tests/src/Makefile" ;;
- "f-spot.pc") CONFIG_FILES="$CONFIG_FILES f-spot.pc" ;;
- "f-spot.spec") CONFIG_FILES="$CONFIG_FILES f-spot.spec" ;;
- "f-spot.desktop.in") CONFIG_FILES="$CONFIG_FILES f-spot.desktop.in" ;;
- "f-spot-view.desktop.in") CONFIG_FILES="$CONFIG_FILES f-spot-view.desktop.in" ;;
- "f-spot-import.desktop.in") CONFIG_FILES="$CONFIG_FILES f-spot-import.desktop.in" ;;
"po/stamp-it") CONFIG_COMMANDS="$CONFIG_COMMANDS po/stamp-it" ;;
*) as_fn_error "invalid argument: \`$ac_config_target'" "$LINENO" 5;;
@@ -22336,3 +23129,24 @@ if test -n "$ac_unrecognized_opts" && test "$enable_option_checking" != no; then
$as_echo "$as_me: WARNING: unrecognized options: $ac_unrecognized_opts" >&2;}
fi
+
+cat <<EOF
+
+${PACKAGE}-${VERSION}
+
+ Build Environment
+ Install Prefix: ${prefix}
+ Datadir: ${expanded_datadir}
+ Libdir: ${expanded_libdir}
+
+ C Compiler: ${CC}
+ Mono C# Compiler: ${MCS} ${GMCS_FLAGS}
+ Mono Runtime: ${MONO}
+
+ Build/Development:
+ Unit Tests: ${do_tests}
+ User Help: ${HAVE_GNOME_DOC_UTILS} (requires gnome-doc-utils >= 0.17.3)
+
+Run 'make' to build F-Spot.
+
+EOF
diff --git a/configure.ac b/configure.ac
index a24ad1d..a42bb3d 100644
--- a/configure.ac
+++ b/configure.ac
@@ -1,8 +1,8 @@
dnl Granularly define the version components
dnl Remember to also update the Display Version
m4_define([fspot_version_major], [0])
-m4_define([fspot_version_minor], [6])
-m4_define([fspot_version_micro], [2])
+m4_define([fspot_version_minor], [7])
+m4_define([fspot_version_micro], [0])
dnl set to 0 when doing an official release
m4_define([fspot_version_pre_release], [0])
@@ -23,7 +23,7 @@ m4_define([fspot_version],
dnl this can sometimes differ manually
m4_define([fspot_display_version],
- ["0.6.2"])
+ ["0.7.0"])
m4_define([fspot_api_version],
[fspot_version_major.fspot_version_minor])
@@ -38,7 +38,7 @@ AC_INIT([f-spot], fspot_version,
AM_INIT_AUTOMAKE([1.9 dist-bzip2 tar-ustar dist-zip foreign])
AM_MAINTAINER_MODE
AM_CONFIG_HEADER(config.h)
-AC_SUBST([ACLOCAL_AMFLAGS], ["-I build/m4/shamrock -I build/m4/shave \${ACLOCAL_FLAGS}"])
+AC_SUBST([ACLOCAL_AMFLAGS], ["-I build/m4/f-spot -I build/m4/shamrock -I build/m4/shave \${ACLOCAL_FLAGS}"])
IT_PROG_INTLTOOL([0.35.0])
AC_PROG_LIBTOOL
@@ -58,6 +58,8 @@ SHAMROCK_EXPAND_LIBDIR
SHAMROCK_EXPAND_BINDIR
SHAMROCK_EXPAND_DATADIR
+dnl User help
+SHAMROCK_CHECK_GNOME_DOC_UTILS(0.17.3)
dnl Mono and gmcs
SHAMROCK_CHECK_MONO_MODULE(2.2)
@@ -66,14 +68,21 @@ SHAMROCK_FIND_MONO_RUNTIME
SHAMROCK_CHECK_MONO_2_0_GAC_ASSEMBLIES([
Mono.Data.SqliteClient
Mono.Posix
+ Mono.Simd
+ Mono.Data
+ System
System.Runtime.Remoting
System.Web
System.Web.Services
+ System.Data
Mono.Cairo
+ ICSharpCode.SharpZipLib
])
-
-
+FSPOT_CHECK_GTK_SHARP
+FSPOT_CHECK_GNOME_KEYRING_SHARP
+FSPOT_CHECK_FLICKRNET
+SHAMROCK_CHECK_NUNIT
@@ -118,11 +127,6 @@ if test ! -x "$GAPI2CODEGEN"; then
AC_MSG_ERROR([No gapi code generator found])
fi
-
-dnl -- Initialize docs
-
-GNOME_DOC_INIT
-
dnl -- Check for mono pc file
AC_MSG_CHECKING([for mono.pc])
@@ -138,20 +142,18 @@ LIBGNOME_REQUIRED=2.2
LIBGNOMEUI_REQUIRED=2.2
LIBEXIF_REQUIRED_MIN=0.5.7
LIBEXIF_REQUIRED_MAX=0.7.0
-GIO_REQUIRED=2.16.0
-GIOSHARP_REQUIRED=2.13.92
+GIO_REQUIRED=2.22.2
GTKSHARPBEANS_REQUIRED=2.13.92
GTKSHARP_REQUIRED=2.12.2
GTK_REQUIRED=2.14
NDESK_DBUS_REQUIRED=0.4.2
NDESK_DBUS_GLIB_REQUIRED=0.3.0
-MONO_CAIRO_REQUIRED=1.2.4
+MONO_CAIRO_REQUIRED=1.2.5
CAIRO_REQUIRED=1.4.0
LCMS_REQUIRED=1.12
-LIBGPHOTO2_REQUIRED=2.4
MONOADDINS_REQUIRED=0.3
-PKG_CHECK_MODULES(F, libgnome-2.0 >= $LIBGNOME_REQUIRED libgnomeui-2.0 >= $LIBGNOMEUI_REQUIRED libexif >= $LIBEXIF_REQUIRED_MIN libexif < $LIBEXIF_REQUIRED_MAX gtk-sharp-2.0 >= $GTKSHARP_REQUIRED glib-sharp-2.0 >= $GTKSHARP_REQUIRED glade-sharp-2.0 >= $GTKSHARP_REQUIRED gnome-vfs-sharp-2.0 >= $GTKSHARP_REQUIRED gtk+-2.0 >= $GTK_REQUIRED mono-cairo >= $MONO_CAIRO_REQUIRED cairo >= $CAIRO_REQUIRED mono-addins >= $MONOADDINS_REQUIRED mono-addins-gui >= $MONOADDINS_REQUIRED mono-addins-setup >= $MONOADDINS_REQUIRED)
+PKG_CHECK_MODULES(F, libgnome-2.0 >= $LIBGNOME_REQUIRED libgnomeui-2.0 >= $LIBGNOMEUI_REQUIRED libexif >= $LIBEXIF_REQUIRED_MIN libexif < $LIBEXIF_REQUIRED_MAX glade-sharp-2.0 >= $GTKSHARP_REQUIRED gtk+-2.0 >= $GTK_REQUIRED mono-cairo >= $MONO_CAIRO_REQUIRED cairo >= $CAIRO_REQUIRED mono-addins >= $MONOADDINS_REQUIRED mono-addins-gui >= $MONOADDINS_REQUIRED mono-addins-setup >= $MONOADDINS_REQUIRED)
AC_SUBST(F_CFLAGS)
AC_SUBST(F_LIBS)
@@ -164,10 +166,6 @@ PKG_CHECK_MODULES(GNOME_SHARP, gnome-sharp-2.0 >= 2.8)
PKG_CHECK_MODULES(GLIBSHARP, glib-sharp-2.0 >= 2.12)
-if pkg-config --atleast-version=1.2.5 mono-cairo; then
- CSC_DEFINES="$CSC_DEFINES -d:CAIRO_1_2_5"
-fi
-
if pkg-config --atleast-version=2.13.0 gtk-sharp-2.0 && pkg-config --max-version=2.14 gtk-sharp-2.0; then
AC_MSG_ERROR([There's a svn version of gtk-sharp 2.13.x installed. Uninstall it.])
fi
@@ -191,38 +189,19 @@ else
fi
fi
-if pkg-config --at-least-version=2.16 gtk+-2.0; then
+if pkg-config --atleast-version=2.16 gtk+-2.0; then
CSC_DEFINES="$CSC_DEFINES -d:GTK_2_16"
fi
+AC_SUBST(CSC_DEFINES)
+
+dnl Mono.Addins libraries
+FSPOT_CHECK_MONO_ADDINS
+
dnl -- dbus-sharp
PKG_CHECK_MODULES(NDESK_DBUS, ndesk-dbus-1.0 >= $NDESK_DBUS_REQUIRED ndesk-dbus-glib-1.0 >= $NDESK_DBUS_GLIB_REQUIRED)
AC_SUBST(NDESK_DBUS_LIBS)
-dnl -- nunit
-PKG_CHECK_MODULES(NUNIT, nunit >= $NUNIT_REQUIRED,
- do_tests="yes", do_tests="no")
-
-AC_SUBST(NUNIT_LIBS)
-AM_CONDITIONAL(ENABLE_TESTS, test "x$do_tests" = "xyes")
-
-if test "x$do_tests" = "xno"; then
- PKG_CHECK_MODULES(NUNIT, mono-nunit >= 2.0,
- do_tests="yes", do_tests="no")
-
- AC_SUBST(NUNIT_LIBS)
- AM_CONDITIONAL(ENABLE_TESTS, test "x$do_tests" = "xyes")
-
- if test "x$do_tests" = "xno"; then
- NUNIT_DEFINES=''
- AC_MSG_WARN([Could not find nunit: tests will not be available.])
- else
- NUNIT_DEFINES='-d:ENABLE_NUNIT'
- fi
- AC_SUBST(NUNIT_DEFINES)
-fi
-
-
dnl --- GConf
AC_PATH_PROG(GCONFTOOL, gconftool-2, no)
@@ -245,13 +224,6 @@ PKG_CHECK_MODULES(LCMS, lcms >= $LCMS_REQUIRED, [],
LCMS_LIBS='-llcms'
LCMS_CFLAGS=''])
-
-dnl --- libgphoto2
-
-PKG_CHECK_MODULES(LIBGPHOTO2, libgphoto2 >= $LIBGPHOTO2_REQUIRED)
-
-AC_SUBST(CSC_DEFINES)
-
dnl --- libexif version check
LIBEXIF_API_CHANGE=0.6.0
@@ -333,38 +305,51 @@ build/Makefile
build/m4/Makefile
build/m4/shave/shave
build/m4/shave/shave-libtool
+build/pkg-config/Makefile
+
+data/Makefile
+data/desktop-files/Makefile
+data/desktop-files/f-spot.desktop.in
+data/desktop-files/f-spot-view.desktop.in
+data/desktop-files/f-spot-import.desktop.in
+
+help/Makefile
-lib/dpap-sharp/Makefile
-lib/dpap-sharp/lib/Makefile
-lib/dpap-sharp/dpap-client/Makefile
-lib/dpap-sharp/dpap-server/Makefile
-lib/dpap-sharp/DPAPService/Makefile
-lib/dpap-sharp/DPAPBrowser/Makefile
lib/GKeyFile/Makefile
lib/gio-sharp/Makefile
lib/gio-sharp/gio/Makefile
lib/gio-sharp/generator/Makefile
-lib/gnome-keyring-sharp/Makefile
lib/gtk-sharp-beans/Makefile
lib/libfspot/Makefile
-lib/libgphoto2-sharp/Makefile
-lib/libgphoto2-sharp/libgphoto2-sharp.dll.config
-lib/libgphoto2-sharp/glue/Makefile
lib/libjpegtran/Makefile
lib/Makefile
lib/semweb/Makefile
lib/unique-sharp/Makefile
lib/unique-sharp/generator/Makefile
lib/unique-sharp/unique/Makefile
+lib/Hyena/src/Hyena/Makefile
+lib/Hyena/src/Mono.Data.Sqlite/Makefile
+lib/Hyena/src/Hyena.Data.Sqlite/Makefile
+lib/Hyena/src/Hyena.Gui/Makefile
+
docs/Makefile
icons/Makefile
tools/Makefile
po/Makefile.in
+src/Cms/FSpot.Cms.dll.config
+src/Cms/Makefile
+src/Utils/Makefile
+src/Bling/Makefile
+src/JobScheduler/Makefile
+src/Query/Makefile
src/Core/Defines.cs
+src/Core/Makefile
+src/Core/FSpot.Core.dll.config
+src/Widgets/Makefile
+src/Widgets/FSpot.Widgets.dll.config
+src/Platform/Makefile
src/AssemblyInfo.cs
src/f-spot.exe.config
-src/Cms.dll.config
-src/FSpot.Widgets.dll.config
src/Makefile
extensions/Makefile
extensions/Editors/Makefile
@@ -376,7 +361,6 @@ extensions/Editors/ResizeEditor/Makefile
extensions/Exporters/Makefile
extensions/Exporters/CDExport/Makefile
extensions/Exporters/FlickrExport/Makefile
-extensions/Exporters/FlickrExport/FlickrNet/Makefile
extensions/Exporters/GalleryExport/Makefile
extensions/Exporters/FacebookExport/Makefile
extensions/Exporters/FolderExport/Makefile
@@ -387,8 +371,6 @@ extensions/Exporters/TabbloExport/Tabblo/Makefile
extensions/Exporters/PicasaWebExport/Makefile
extensions/Exporters/PicasaWebExport/google-sharp/Makefile
extensions/Exporters/ZipExport/Makefile
-extensions/Services/Makefile
-extensions/Services/DBusService/Makefile
extensions/Tools/Makefile
extensions/Tools/RawPlusJpeg/Makefile
extensions/Tools/ChangePhotoPath/Makefile
@@ -401,10 +383,25 @@ extensions/Tools/ScreensaverConfig/Makefile
extensions/Transitions/Makefile
extensions/Transitions/CoverTransition/Makefile
tests/Makefile
-tests/src/Makefile
-f-spot.pc
-f-spot.spec
-f-spot.desktop.in
-f-spot-view.desktop.in
-f-spot-import.desktop.in
)
+
+cat <<EOF
+
+${PACKAGE}-${VERSION}
+
+ Build Environment
+ Install Prefix: ${prefix}
+ Datadir: ${expanded_datadir}
+ Libdir: ${expanded_libdir}
+
+ C Compiler: ${CC}
+ Mono C# Compiler: ${MCS} ${GMCS_FLAGS}
+ Mono Runtime: ${MONO}
+
+ Build/Development:
+ Unit Tests: ${do_tests}
+ User Help: ${HAVE_GNOME_DOC_UTILS} (requires gnome-doc-utils >= 0.17.3)
+
+Run 'make' to build F-Spot.
+
+EOF
diff --git a/data/Makefile.am b/data/Makefile.am
new file mode 100644
index 0000000..a3d7d21
--- /dev/null
+++ b/data/Makefile.am
@@ -0,0 +1 @@
+SUBDIRS = desktop-files
diff --git a/data/Makefile.in b/data/Makefile.in
new file mode 100644
index 0000000..b6f9f66
--- /dev/null
+++ b/data/Makefile.in
@@ -0,0 +1,671 @@
+# Makefile.in generated by automake 1.11.1 from Makefile.am.
+# @configure_input@
+
+# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
+# 2003, 2004, 2005, 2006, 2007, 2008, 2009 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.
+
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
+# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
+# PARTICULAR PURPOSE.
+
+ at SET_MAKE@
+VPATH = @srcdir@
+pkgdatadir = $(datadir)/@PACKAGE@
+pkgincludedir = $(includedir)/@PACKAGE@
+pkglibdir = $(libdir)/@PACKAGE@
+pkglibexecdir = $(libexecdir)/@PACKAGE@
+am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
+install_sh_DATA = $(install_sh) -c -m 644
+install_sh_PROGRAM = $(install_sh) -c
+install_sh_SCRIPT = $(install_sh) -c
+INSTALL_HEADER = $(INSTALL_DATA)
+transform = $(program_transform_name)
+NORMAL_INSTALL = :
+PRE_INSTALL = :
+POST_INSTALL = :
+NORMAL_UNINSTALL = :
+PRE_UNINSTALL = :
+POST_UNINSTALL = :
+build_triplet = @build@
+host_triplet = @host@
+subdir = data
+DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in
+ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
+am__aclocal_m4_deps = $(top_srcdir)/build/m4/shave/shave.m4 \
+ $(top_srcdir)/build/m4/shamrock/expansions.m4 \
+ $(top_srcdir)/build/m4/shamrock/gnome-doc.m4 \
+ $(top_srcdir)/build/m4/shamrock/mono.m4 \
+ $(top_srcdir)/build/m4/shamrock/nunit.m4 \
+ $(top_srcdir)/build/m4/shamrock/programs.m4 \
+ $(top_srcdir)/build/m4/f-spot/flickrnet.m4 \
+ $(top_srcdir)/build/m4/f-spot/gnome-keyring-sharp.m4 \
+ $(top_srcdir)/build/m4/f-spot/gtk-sharp.m4 \
+ $(top_srcdir)/build/m4/f-spot/mono-addins.m4 \
+ $(top_srcdir)/acinclude.m4 $(top_srcdir)/configure.ac
+am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
+ $(ACLOCAL_M4)
+mkinstalldirs = $(install_sh) -d
+CONFIG_HEADER = $(top_builddir)/config.h
+CONFIG_CLEAN_FILES =
+CONFIG_CLEAN_VPATH_FILES =
+SOURCES =
+DIST_SOURCES =
+RECURSIVE_TARGETS = all-recursive check-recursive dvi-recursive \
+ html-recursive info-recursive install-data-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
+AM_RECURSIVE_TARGETS = $(RECURSIVE_TARGETS:-recursive=) \
+ $(RECURSIVE_CLEAN_TARGETS:-recursive=) tags TAGS ctags CTAGS \
+ distdir
+ETAGS = etags
+CTAGS = ctags
+DIST_SUBDIRS = $(SUBDIRS)
+DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
+am__relativize = \
+ dir0=`pwd`; \
+ sed_first='s,^\([^/]*\)/.*$$,\1,'; \
+ sed_rest='s,^[^/]*/*,,'; \
+ sed_last='s,^.*/\([^/]*\)$$,\1,'; \
+ sed_butlast='s,/*[^/]*$$,,'; \
+ while test -n "$$dir1"; do \
+ first=`echo "$$dir1" | sed -e "$$sed_first"`; \
+ if test "$$first" != "."; then \
+ if test "$$first" = ".."; then \
+ dir2=`echo "$$dir0" | sed -e "$$sed_last"`/"$$dir2"; \
+ dir0=`echo "$$dir0" | sed -e "$$sed_butlast"`; \
+ else \
+ first2=`echo "$$dir2" | sed -e "$$sed_first"`; \
+ if test "$$first2" = "$$first"; then \
+ dir2=`echo "$$dir2" | sed -e "$$sed_rest"`; \
+ else \
+ dir2="../$$dir2"; \
+ fi; \
+ dir0="$$dir0"/"$$first"; \
+ fi; \
+ fi; \
+ dir1=`echo "$$dir1" | sed -e "$$sed_rest"`; \
+ done; \
+ reldir="$$dir2"
+ACLOCAL = @ACLOCAL@
+ACLOCAL_AMFLAGS = @ACLOCAL_AMFLAGS@
+ALL_LINGUAS = @ALL_LINGUAS@
+AMTAR = @AMTAR@
+AM_MAKEFLAGS = @AM_MAKEFLAGS@
+API_VERSION = @API_VERSION@
+AR = @AR@
+ASM_VERSION = @ASM_VERSION@
+AUTOCONF = @AUTOCONF@
+AUTOHEADER = @AUTOHEADER@
+AUTOMAKE = @AUTOMAKE@
+AWK = @AWK@
+CATALOGS = @CATALOGS@
+CATOBJEXT = @CATOBJEXT@
+CC = @CC@
+CCDEPMODE = @CCDEPMODE@
+CFLAGS = @CFLAGS@
+CPP = @CPP@
+CPPFLAGS = @CPPFLAGS@
+CSC_DEFINES = @CSC_DEFINES@
+CXX = @CXX@
+CXXCPP = @CXXCPP@
+CXXDEPMODE = @CXXDEPMODE@
+CXXFLAGS = @CXXFLAGS@
+CYGPATH_W = @CYGPATH_W@
+DATADIRNAME = @DATADIRNAME@
+DEFS = @DEFS@
+DEPDIR = @DEPDIR@
+DISPLAY_VERSION = @DISPLAY_VERSION@
+DISTCHECK_CONFIGURE_FLAGS = @DISTCHECK_CONFIGURE_FLAGS@
+DOC_USER_FORMATS = @DOC_USER_FORMATS@
+DSYMUTIL = @DSYMUTIL@
+DUMPBIN = @DUMPBIN@
+ECHO_C = @ECHO_C@
+ECHO_N = @ECHO_N@
+ECHO_T = @ECHO_T@
+EGREP = @EGREP@
+EXEEXT = @EXEEXT@
+EXIF_CFLAGS = @EXIF_CFLAGS@
+EXIF_LIBS = @EXIF_LIBS@
+EXIF_SOVERSION = @EXIF_SOVERSION@
+F77 = @F77@
+FC = @FC@
+FGREP = @FGREP@
+FLICKRNET_CFLAGS = @FLICKRNET_CFLAGS@
+FLICKRNET_LIBS = @FLICKRNET_LIBS@
+F_CFLAGS = @F_CFLAGS@
+F_LIBS = @F_LIBS@
+GAPI2CODEGEN = @GAPI2CODEGEN@
+GAPI2FIXUP = @GAPI2FIXUP@
+GAPI2PARSER = @GAPI2PARSER@
+GCONFTOOL = @GCONFTOOL@
+GCONF_SCHEMA_CONFIG_SOURCE = @GCONF_SCHEMA_CONFIG_SOURCE@
+GCONF_SCHEMA_FILE_DIR = @GCONF_SCHEMA_FILE_DIR@
+GCONF_SHARP_CFLAGS = @GCONF_SHARP_CFLAGS@
+GCONF_SHARP_LIBS = @GCONF_SHARP_LIBS@
+GETTEXT_PACKAGE = @GETTEXT_PACKAGE@
+GIO_CFLAGS = @GIO_CFLAGS@
+GIO_LIBS = @GIO_LIBS@
+GLIBSHARP_2_12_7_CFLAGS = @GLIBSHARP_2_12_7_CFLAGS@
+GLIBSHARP_2_12_7_LIBS = @GLIBSHARP_2_12_7_LIBS@
+GLIBSHARP_CFLAGS = @GLIBSHARP_CFLAGS@
+GLIBSHARP_LIBS = @GLIBSHARP_LIBS@
+GLIB_CFLAGS = @GLIB_CFLAGS@
+GLIB_GENMARSHAL = @GLIB_GENMARSHAL@
+GLIB_LIBS = @GLIB_LIBS@
+GLIB_MKENUMS = @GLIB_MKENUMS@
+GMOFILES = @GMOFILES@
+GMSGFMT = @GMSGFMT@
+GNOME_ICON_THEME_PREFIX = @GNOME_ICON_THEME_PREFIX@
+GNOME_SCREENSAVER_SAVERDIR = @GNOME_SCREENSAVER_SAVERDIR@
+GNOME_SCREENSAVER_THEMESDIR = @GNOME_SCREENSAVER_THEMESDIR@
+GNOME_SHARP_CFLAGS = @GNOME_SHARP_CFLAGS@
+GNOME_SHARP_LIBS = @GNOME_SHARP_LIBS@
+GOBJECT_QUERY = @GOBJECT_QUERY@
+GREP = @GREP@
+GTKSHARP_A11Y_CFLAGS = @GTKSHARP_A11Y_CFLAGS@
+GTKSHARP_A11Y_LIBS = @GTKSHARP_A11Y_LIBS@
+GTKSHARP_CFLAGS = @GTKSHARP_CFLAGS@
+GTKSHARP_LIBS = @GTKSHARP_LIBS@
+HELP_DIR = @HELP_DIR@
+ICONS_DIRECTORY = @ICONS_DIRECTORY@
+INSTALL = @INSTALL@
+INSTALL_DATA = @INSTALL_DATA@
+INSTALL_PROGRAM = @INSTALL_PROGRAM@
+INSTALL_SCRIPT = @INSTALL_SCRIPT@
+INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
+INSTOBJEXT = @INSTOBJEXT@
+INTLLIBS = @INTLLIBS@
+INTLTOOL_EXTRACT = @INTLTOOL_EXTRACT@
+INTLTOOL_MERGE = @INTLTOOL_MERGE@
+INTLTOOL_PERL = @INTLTOOL_PERL@
+INTLTOOL_UPDATE = @INTLTOOL_UPDATE@
+KEYRINGSHARP_CFLAGS = @KEYRINGSHARP_CFLAGS@
+KEYRINGSHARP_LIBS = @KEYRINGSHARP_LIBS@
+LCMS_CFLAGS = @LCMS_CFLAGS@
+LCMS_LIBS = @LCMS_LIBS@
+LD = @LD@
+LDFLAGS = @LDFLAGS@
+LIBEXIF_VERSION_CHECK_CFLAGS = @LIBEXIF_VERSION_CHECK_CFLAGS@
+LIBEXIF_VERSION_CHECK_LIBS = @LIBEXIF_VERSION_CHECK_LIBS@
+LIBJPEG = @LIBJPEG@
+LIBOBJS = @LIBOBJS@
+LIBS = @LIBS@
+LIBTOOL = @LIBTOOL@
+LIPO = @LIPO@
+LN_S = @LN_S@
+LTLIBOBJS = @LTLIBOBJS@
+MAINT = @MAINT@
+MAKEFLAGS = @MAKEFLAGS@
+MAKEINFO = @MAKEINFO@
+MCS = @MCS@
+MKDIR_P = @MKDIR_P@
+MKINSTALLDIRS = @MKINSTALLDIRS@
+MONO = @MONO@
+MONO_ADDINS_CFLAGS = @MONO_ADDINS_CFLAGS@
+MONO_ADDINS_GUI_CFLAGS = @MONO_ADDINS_GUI_CFLAGS@
+MONO_ADDINS_GUI_LIBS = @MONO_ADDINS_GUI_LIBS@
+MONO_ADDINS_LIBS = @MONO_ADDINS_LIBS@
+MONO_ADDINS_SETUP_CFLAGS = @MONO_ADDINS_SETUP_CFLAGS@
+MONO_ADDINS_SETUP_LIBS = @MONO_ADDINS_SETUP_LIBS@
+MONO_MODULE_CFLAGS = @MONO_MODULE_CFLAGS@
+MONO_MODULE_LIBS = @MONO_MODULE_LIBS@
+MSGFMT = @MSGFMT@
+MSGFMT_OPTS = @MSGFMT_OPTS@
+MSGMERGE = @MSGMERGE@
+NDESK_DBUS_CFLAGS = @NDESK_DBUS_CFLAGS@
+NDESK_DBUS_LIBS = @NDESK_DBUS_LIBS@
+NM = @NM@
+NMEDIT = @NMEDIT@
+NUNIT_CFLAGS = @NUNIT_CFLAGS@
+NUNIT_LIBS = @NUNIT_LIBS@
+OBJC = @OBJC@
+OBJDUMP = @OBJDUMP@
+OBJEXT = @OBJEXT@
+OMF_DIR = @OMF_DIR@
+OTOOL = @OTOOL@
+OTOOL64 = @OTOOL64@
+PACKAGE = @PACKAGE@
+PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
+PACKAGE_NAME = @PACKAGE_NAME@
+PACKAGE_STRING = @PACKAGE_STRING@
+PACKAGE_TARNAME = @PACKAGE_TARNAME@
+PACKAGE_URL = @PACKAGE_URL@
+PACKAGE_VERSION = @PACKAGE_VERSION@
+PATH_SEPARATOR = @PATH_SEPARATOR@
+PKG_CONFIG = @PKG_CONFIG@
+POFILES = @POFILES@
+POSUB = @POSUB@
+PO_IN_DATADIR_FALSE = @PO_IN_DATADIR_FALSE@
+PO_IN_DATADIR_TRUE = @PO_IN_DATADIR_TRUE@
+Q = @Q@
+RANLIB = @RANLIB@
+SED = @SED@
+SET_MAKE = @SET_MAKE@
+SHELL = @SHELL@
+STRIP = @STRIP@
+TURTLEDIR = @TURTLEDIR@
+UNIQUE_CFLAGS = @UNIQUE_CFLAGS@
+UNIQUE_LIBS = @UNIQUE_LIBS@
+USE_NLS = @USE_NLS@
+V = @V@
+VERSION = @VERSION@
+WARN_CFLAGS = @WARN_CFLAGS@
+XGETTEXT = @XGETTEXT@
+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_DUMPBIN = @ac_ct_DUMPBIN@
+am__include = @am__include@
+am__leading_dot = @am__leading_dot@
+am__quote = @am__quote@
+am__tar = @am__tar@
+am__untar = @am__untar@
+bindir = @bindir@
+build = @build@
+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@
+expanded_bindir = @expanded_bindir@
+expanded_datadir = @expanded_datadir@
+expanded_libdir = @expanded_libdir@
+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@
+lt_ECHO = @lt_ECHO@
+mandir = @mandir@
+mkdir_p = @mkdir_p@
+oldincludedir = @oldincludedir@
+pdfdir = @pdfdir@
+prefix = @prefix@
+program_transform_name = @program_transform_name@
+psdir = @psdir@
+sbindir = @sbindir@
+sharedstatedir = @sharedstatedir@
+shavedir = @shavedir@
+srcdir = @srcdir@
+sysconfdir = @sysconfdir@
+target_alias = @target_alias@
+top_build_prefix = @top_build_prefix@
+top_builddir = @top_builddir@
+top_srcdir = @top_srcdir@
+SUBDIRS = desktop-files
+all: all-recursive
+
+.SUFFIXES:
+$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(am__configure_deps)
+ @for dep in $?; do \
+ case '$(am__configure_deps)' in \
+ *$$dep*) \
+ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \
+ && { if test -f $@; then exit 0; else break; fi; }; \
+ exit 1;; \
+ esac; \
+ done; \
+ echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign data/Makefile'; \
+ $(am__cd) $(top_srcdir) && \
+ $(AUTOMAKE) --foreign data/Makefile
+.PRECIOUS: Makefile
+Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
+ @case '$?' in \
+ *config.status*) \
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \
+ *) \
+ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \
+ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \
+ esac;
+
+$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+
+$(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps)
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps)
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(am__aclocal_m4_deps):
+
+mostlyclean-libtool:
+ -rm -f *.lo
+
+clean-libtool:
+ -rm -rf .libs _libs
+
+# 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,
+# (1) if the variable is set in `config.status', edit `config.status'
+# (which will cause the Makefiles to be regenerated when you run `make');
+# (2) otherwise, pass the desired values on the `make' command line.
+$(RECURSIVE_TARGETS):
+ @fail= failcom='exit 1'; \
+ for f in x $$MAKEFLAGS; do \
+ case $$f in \
+ *=* | --[!k]*);; \
+ *k*) failcom='fail=yes';; \
+ esac; \
+ done; \
+ dot_seen=no; \
+ target=`echo $@ | sed s/-recursive//`; \
+ list='$(SUBDIRS)'; for subdir in $$list; do \
+ echo "Making $$target in $$subdir"; \
+ if test "$$subdir" = "."; then \
+ dot_seen=yes; \
+ local_target="$$target-am"; \
+ else \
+ local_target="$$target"; \
+ fi; \
+ ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \
+ || eval $$failcom; \
+ done; \
+ if test "$$dot_seen" = "no"; then \
+ $(MAKE) $(AM_MAKEFLAGS) "$$target-am" || exit 1; \
+ fi; test -z "$$fail"
+
+$(RECURSIVE_CLEAN_TARGETS):
+ @fail= failcom='exit 1'; \
+ for f in x $$MAKEFLAGS; do \
+ case $$f in \
+ *=* | --[!k]*);; \
+ *k*) failcom='fail=yes';; \
+ esac; \
+ done; \
+ dot_seen=no; \
+ case "$@" in \
+ distclean-* | maintainer-clean-*) list='$(DIST_SUBDIRS)' ;; \
+ *) list='$(SUBDIRS)' ;; \
+ esac; \
+ rev=''; for subdir in $$list; do \
+ if test "$$subdir" = "."; then :; else \
+ rev="$$subdir $$rev"; \
+ fi; \
+ done; \
+ rev="$$rev ."; \
+ target=`echo $@ | sed s/-recursive//`; \
+ for subdir in $$rev; do \
+ echo "Making $$target in $$subdir"; \
+ if test "$$subdir" = "."; then \
+ local_target="$$target-am"; \
+ else \
+ local_target="$$target"; \
+ fi; \
+ ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \
+ || eval $$failcom; \
+ done && test -z "$$fail"
+tags-recursive:
+ list='$(SUBDIRS)'; for subdir in $$list; do \
+ test "$$subdir" = . || ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) tags); \
+ done
+ctags-recursive:
+ list='$(SUBDIRS)'; for subdir in $$list; do \
+ test "$$subdir" = . || ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) ctags); \
+ done
+
+ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES)
+ list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
+ unique=`for i in $$list; do \
+ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+ done | \
+ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
+ END { if (nonempty) { for (i in files) print i; }; }'`; \
+ mkid -fID $$unique
+tags: TAGS
+
+TAGS: tags-recursive $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \
+ $(TAGS_FILES) $(LISP)
+ set x; \
+ here=`pwd`; \
+ if ($(ETAGS) --etags-include --version) >/dev/null 2>&1; then \
+ include_option=--etags-include; \
+ empty_fix=.; \
+ else \
+ include_option=--include; \
+ empty_fix=; \
+ fi; \
+ list='$(SUBDIRS)'; for subdir in $$list; do \
+ if test "$$subdir" = .; then :; else \
+ test ! -f $$subdir/TAGS || \
+ set "$$@" "$$include_option=$$here/$$subdir/TAGS"; \
+ fi; \
+ done; \
+ list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
+ unique=`for i in $$list; do \
+ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+ done | \
+ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
+ END { if (nonempty) { for (i in files) print i; }; }'`; \
+ shift; \
+ if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \
+ test -n "$$unique" || unique=$$empty_fix; \
+ if test $$# -gt 0; then \
+ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
+ "$$@" $$unique; \
+ else \
+ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
+ $$unique; \
+ fi; \
+ fi
+ctags: CTAGS
+CTAGS: ctags-recursive $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \
+ $(TAGS_FILES) $(LISP)
+ list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
+ unique=`for i in $$list; do \
+ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+ done | \
+ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
+ END { if (nonempty) { for (i in files) print i; }; }'`; \
+ test -z "$(CTAGS_ARGS)$$unique" \
+ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \
+ $$unique
+
+GTAGS:
+ here=`$(am__cd) $(top_builddir) && pwd` \
+ && $(am__cd) $(top_srcdir) \
+ && gtags -i $(GTAGS_ARGS) "$$here"
+
+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)'; \
+ 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; \
+ if test -d $$d/$$file; then \
+ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \
+ if test -d "$(distdir)/$$file"; then \
+ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
+ fi; \
+ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
+ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \
+ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
+ fi; \
+ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \
+ else \
+ test -f "$(distdir)/$$file" \
+ || cp -p $$d/$$file "$(distdir)/$$file" \
+ || exit 1; \
+ fi; \
+ done
+ @list='$(DIST_SUBDIRS)'; for subdir in $$list; do \
+ if test "$$subdir" = .; then :; else \
+ test -d "$(distdir)/$$subdir" \
+ || $(MKDIR_P) "$(distdir)/$$subdir" \
+ || exit 1; \
+ fi; \
+ done
+ @list='$(DIST_SUBDIRS)'; for subdir in $$list; do \
+ if test "$$subdir" = .; then :; else \
+ dir1=$$subdir; dir2="$(distdir)/$$subdir"; \
+ $(am__relativize); \
+ new_distdir=$$reldir; \
+ dir1=$$subdir; dir2="$(top_distdir)"; \
+ $(am__relativize); \
+ new_top_distdir=$$reldir; \
+ echo " (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) top_distdir="$$new_top_distdir" distdir="$$new_distdir" \\"; \
+ echo " am__remove_distdir=: am__skip_length_check=: am__skip_mode_fix=: distdir)"; \
+ ($(am__cd) $$subdir && \
+ $(MAKE) $(AM_MAKEFLAGS) \
+ top_distdir="$$new_top_distdir" \
+ distdir="$$new_distdir" \
+ am__remove_distdir=: \
+ am__skip_length_check=: \
+ am__skip_mode_fix=: \
+ distdir) \
+ || exit 1; \
+ fi; \
+ done
+check-am: all-am
+check: check-recursive
+all-am: Makefile
+installdirs: installdirs-recursive
+installdirs-am:
+install: install-recursive
+install-exec: install-exec-recursive
+install-data: install-data-recursive
+uninstall: uninstall-recursive
+
+install-am: all-am
+ @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
+
+installcheck: installcheck-recursive
+install-strip:
+ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+ `test -z '$(STRIP)' || \
+ echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install
+mostlyclean-generic:
+
+clean-generic:
+
+distclean-generic:
+ -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
+ -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES)
+
+maintainer-clean-generic:
+ @echo "This command is intended for maintainers to use"
+ @echo "it deletes files that may require special tools to rebuild."
+clean: clean-recursive
+
+clean-am: clean-generic clean-libtool mostlyclean-am
+
+distclean: distclean-recursive
+ -rm -f Makefile
+distclean-am: clean-am distclean-generic distclean-tags
+
+dvi: dvi-recursive
+
+dvi-am:
+
+html: html-recursive
+
+html-am:
+
+info: info-recursive
+
+info-am:
+
+install-data-am:
+
+install-dvi: install-dvi-recursive
+
+install-dvi-am:
+
+install-exec-am:
+
+install-html: install-html-recursive
+
+install-html-am:
+
+install-info: install-info-recursive
+
+install-info-am:
+
+install-man:
+
+install-pdf: install-pdf-recursive
+
+install-pdf-am:
+
+install-ps: install-ps-recursive
+
+install-ps-am:
+
+installcheck-am:
+
+maintainer-clean: maintainer-clean-recursive
+ -rm -f Makefile
+maintainer-clean-am: distclean-am maintainer-clean-generic
+
+mostlyclean: mostlyclean-recursive
+
+mostlyclean-am: mostlyclean-generic mostlyclean-libtool
+
+pdf: pdf-recursive
+
+pdf-am:
+
+ps: ps-recursive
+
+ps-am:
+
+uninstall-am:
+
+.MAKE: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) ctags-recursive \
+ install-am install-strip tags-recursive
+
+.PHONY: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) CTAGS GTAGS \
+ all all-am check check-am clean clean-generic clean-libtool \
+ ctags ctags-recursive distclean 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-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-generic \
+ mostlyclean-libtool pdf pdf-am ps ps-am tags tags-recursive \
+ 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.
+.NOEXPORT:
diff --git a/data/desktop-files/Makefile.am b/data/desktop-files/Makefile.am
new file mode 100644
index 0000000..1557a50
--- /dev/null
+++ b/data/desktop-files/Makefile.am
@@ -0,0 +1,33 @@
+desktop_in_files= \
+ f-spot.desktop.in \
+ f-spot-view.desktop.in \
+ f-spot-import.desktop.in
+
+Applicationsdir = $(datadir)/applications
+Applications_DATA = $(desktop_files)
+
+desktop_files=$(desktop_in_files:.desktop.in=.desktop)
+ at INTLTOOL_DESKTOP_RULE@
+
+CLEANFILES = \
+ $(desktop_DATA)
+
+EXTRA_DIST = \
+ $(desktop_in_files) \
+ $(desktop_files)
+
+DISTCLEANFILES = \
+ $(desktop_files)
+
+UPDATE_DESKTOP = \
+ if [ -f $(DESTDIR)$(datadir)/applications/defaults.list ] ; then \
+ if which update-desktop-database>/dev/null 2>&1 ; then \
+ update-desktop-database; \
+ fi \
+ fi
+
+install-data-hook:
+ $(UPDATE_DESKTOP)
+
+uninstall-hook:
+ $(UPDATE_DESKTOP)
diff --git a/data/desktop-files/Makefile.in b/data/desktop-files/Makefile.in
new file mode 100644
index 0000000..a126918
--- /dev/null
+++ b/data/desktop-files/Makefile.in
@@ -0,0 +1,563 @@
+# Makefile.in generated by automake 1.11.1 from Makefile.am.
+# @configure_input@
+
+# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
+# 2003, 2004, 2005, 2006, 2007, 2008, 2009 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.
+
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
+# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
+# PARTICULAR PURPOSE.
+
+ at SET_MAKE@
+
+VPATH = @srcdir@
+pkgdatadir = $(datadir)/@PACKAGE@
+pkgincludedir = $(includedir)/@PACKAGE@
+pkglibdir = $(libdir)/@PACKAGE@
+pkglibexecdir = $(libexecdir)/@PACKAGE@
+am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
+install_sh_DATA = $(install_sh) -c -m 644
+install_sh_PROGRAM = $(install_sh) -c
+install_sh_SCRIPT = $(install_sh) -c
+INSTALL_HEADER = $(INSTALL_DATA)
+transform = $(program_transform_name)
+NORMAL_INSTALL = :
+PRE_INSTALL = :
+POST_INSTALL = :
+NORMAL_UNINSTALL = :
+PRE_UNINSTALL = :
+POST_UNINSTALL = :
+build_triplet = @build@
+host_triplet = @host@
+subdir = data/desktop-files
+DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in \
+ $(srcdir)/f-spot-import.desktop.in.in \
+ $(srcdir)/f-spot-view.desktop.in.in \
+ $(srcdir)/f-spot.desktop.in.in
+ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
+am__aclocal_m4_deps = $(top_srcdir)/build/m4/shave/shave.m4 \
+ $(top_srcdir)/build/m4/shamrock/expansions.m4 \
+ $(top_srcdir)/build/m4/shamrock/gnome-doc.m4 \
+ $(top_srcdir)/build/m4/shamrock/mono.m4 \
+ $(top_srcdir)/build/m4/shamrock/nunit.m4 \
+ $(top_srcdir)/build/m4/shamrock/programs.m4 \
+ $(top_srcdir)/build/m4/f-spot/flickrnet.m4 \
+ $(top_srcdir)/build/m4/f-spot/gnome-keyring-sharp.m4 \
+ $(top_srcdir)/build/m4/f-spot/gtk-sharp.m4 \
+ $(top_srcdir)/build/m4/f-spot/mono-addins.m4 \
+ $(top_srcdir)/acinclude.m4 $(top_srcdir)/configure.ac
+am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
+ $(ACLOCAL_M4)
+mkinstalldirs = $(install_sh) -d
+CONFIG_HEADER = $(top_builddir)/config.h
+CONFIG_CLEAN_FILES = f-spot.desktop.in f-spot-view.desktop.in \
+ f-spot-import.desktop.in
+CONFIG_CLEAN_VPATH_FILES =
+SOURCES =
+DIST_SOURCES =
+am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`;
+am__vpath_adj = case $$p in \
+ $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \
+ *) f=$$p;; \
+ esac;
+am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`;
+am__install_max = 40
+am__nobase_strip_setup = \
+ srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'`
+am__nobase_strip = \
+ for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||"
+am__nobase_list = $(am__nobase_strip_setup); \
+ for p in $$list; do echo "$$p $$p"; done | \
+ sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \
+ $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \
+ if (++n[$$2] == $(am__install_max)) \
+ { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \
+ END { for (dir in files) print dir, files[dir] }'
+am__base_list = \
+ sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \
+ sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g'
+am__installdirs = "$(DESTDIR)$(Applicationsdir)"
+DATA = $(Applications_DATA)
+DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
+ACLOCAL = @ACLOCAL@
+ACLOCAL_AMFLAGS = @ACLOCAL_AMFLAGS@
+ALL_LINGUAS = @ALL_LINGUAS@
+AMTAR = @AMTAR@
+AM_MAKEFLAGS = @AM_MAKEFLAGS@
+API_VERSION = @API_VERSION@
+AR = @AR@
+ASM_VERSION = @ASM_VERSION@
+AUTOCONF = @AUTOCONF@
+AUTOHEADER = @AUTOHEADER@
+AUTOMAKE = @AUTOMAKE@
+AWK = @AWK@
+CATALOGS = @CATALOGS@
+CATOBJEXT = @CATOBJEXT@
+CC = @CC@
+CCDEPMODE = @CCDEPMODE@
+CFLAGS = @CFLAGS@
+CPP = @CPP@
+CPPFLAGS = @CPPFLAGS@
+CSC_DEFINES = @CSC_DEFINES@
+CXX = @CXX@
+CXXCPP = @CXXCPP@
+CXXDEPMODE = @CXXDEPMODE@
+CXXFLAGS = @CXXFLAGS@
+CYGPATH_W = @CYGPATH_W@
+DATADIRNAME = @DATADIRNAME@
+DEFS = @DEFS@
+DEPDIR = @DEPDIR@
+DISPLAY_VERSION = @DISPLAY_VERSION@
+DISTCHECK_CONFIGURE_FLAGS = @DISTCHECK_CONFIGURE_FLAGS@
+DOC_USER_FORMATS = @DOC_USER_FORMATS@
+DSYMUTIL = @DSYMUTIL@
+DUMPBIN = @DUMPBIN@
+ECHO_C = @ECHO_C@
+ECHO_N = @ECHO_N@
+ECHO_T = @ECHO_T@
+EGREP = @EGREP@
+EXEEXT = @EXEEXT@
+EXIF_CFLAGS = @EXIF_CFLAGS@
+EXIF_LIBS = @EXIF_LIBS@
+EXIF_SOVERSION = @EXIF_SOVERSION@
+F77 = @F77@
+FC = @FC@
+FGREP = @FGREP@
+FLICKRNET_CFLAGS = @FLICKRNET_CFLAGS@
+FLICKRNET_LIBS = @FLICKRNET_LIBS@
+F_CFLAGS = @F_CFLAGS@
+F_LIBS = @F_LIBS@
+GAPI2CODEGEN = @GAPI2CODEGEN@
+GAPI2FIXUP = @GAPI2FIXUP@
+GAPI2PARSER = @GAPI2PARSER@
+GCONFTOOL = @GCONFTOOL@
+GCONF_SCHEMA_CONFIG_SOURCE = @GCONF_SCHEMA_CONFIG_SOURCE@
+GCONF_SCHEMA_FILE_DIR = @GCONF_SCHEMA_FILE_DIR@
+GCONF_SHARP_CFLAGS = @GCONF_SHARP_CFLAGS@
+GCONF_SHARP_LIBS = @GCONF_SHARP_LIBS@
+GETTEXT_PACKAGE = @GETTEXT_PACKAGE@
+GIO_CFLAGS = @GIO_CFLAGS@
+GIO_LIBS = @GIO_LIBS@
+GLIBSHARP_2_12_7_CFLAGS = @GLIBSHARP_2_12_7_CFLAGS@
+GLIBSHARP_2_12_7_LIBS = @GLIBSHARP_2_12_7_LIBS@
+GLIBSHARP_CFLAGS = @GLIBSHARP_CFLAGS@
+GLIBSHARP_LIBS = @GLIBSHARP_LIBS@
+GLIB_CFLAGS = @GLIB_CFLAGS@
+GLIB_GENMARSHAL = @GLIB_GENMARSHAL@
+GLIB_LIBS = @GLIB_LIBS@
+GLIB_MKENUMS = @GLIB_MKENUMS@
+GMOFILES = @GMOFILES@
+GMSGFMT = @GMSGFMT@
+GNOME_ICON_THEME_PREFIX = @GNOME_ICON_THEME_PREFIX@
+GNOME_SCREENSAVER_SAVERDIR = @GNOME_SCREENSAVER_SAVERDIR@
+GNOME_SCREENSAVER_THEMESDIR = @GNOME_SCREENSAVER_THEMESDIR@
+GNOME_SHARP_CFLAGS = @GNOME_SHARP_CFLAGS@
+GNOME_SHARP_LIBS = @GNOME_SHARP_LIBS@
+GOBJECT_QUERY = @GOBJECT_QUERY@
+GREP = @GREP@
+GTKSHARP_A11Y_CFLAGS = @GTKSHARP_A11Y_CFLAGS@
+GTKSHARP_A11Y_LIBS = @GTKSHARP_A11Y_LIBS@
+GTKSHARP_CFLAGS = @GTKSHARP_CFLAGS@
+GTKSHARP_LIBS = @GTKSHARP_LIBS@
+HELP_DIR = @HELP_DIR@
+ICONS_DIRECTORY = @ICONS_DIRECTORY@
+INSTALL = @INSTALL@
+INSTALL_DATA = @INSTALL_DATA@
+INSTALL_PROGRAM = @INSTALL_PROGRAM@
+INSTALL_SCRIPT = @INSTALL_SCRIPT@
+INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
+INSTOBJEXT = @INSTOBJEXT@
+INTLLIBS = @INTLLIBS@
+INTLTOOL_EXTRACT = @INTLTOOL_EXTRACT@
+INTLTOOL_MERGE = @INTLTOOL_MERGE@
+INTLTOOL_PERL = @INTLTOOL_PERL@
+INTLTOOL_UPDATE = @INTLTOOL_UPDATE@
+KEYRINGSHARP_CFLAGS = @KEYRINGSHARP_CFLAGS@
+KEYRINGSHARP_LIBS = @KEYRINGSHARP_LIBS@
+LCMS_CFLAGS = @LCMS_CFLAGS@
+LCMS_LIBS = @LCMS_LIBS@
+LD = @LD@
+LDFLAGS = @LDFLAGS@
+LIBEXIF_VERSION_CHECK_CFLAGS = @LIBEXIF_VERSION_CHECK_CFLAGS@
+LIBEXIF_VERSION_CHECK_LIBS = @LIBEXIF_VERSION_CHECK_LIBS@
+LIBJPEG = @LIBJPEG@
+LIBOBJS = @LIBOBJS@
+LIBS = @LIBS@
+LIBTOOL = @LIBTOOL@
+LIPO = @LIPO@
+LN_S = @LN_S@
+LTLIBOBJS = @LTLIBOBJS@
+MAINT = @MAINT@
+MAKEFLAGS = @MAKEFLAGS@
+MAKEINFO = @MAKEINFO@
+MCS = @MCS@
+MKDIR_P = @MKDIR_P@
+MKINSTALLDIRS = @MKINSTALLDIRS@
+MONO = @MONO@
+MONO_ADDINS_CFLAGS = @MONO_ADDINS_CFLAGS@
+MONO_ADDINS_GUI_CFLAGS = @MONO_ADDINS_GUI_CFLAGS@
+MONO_ADDINS_GUI_LIBS = @MONO_ADDINS_GUI_LIBS@
+MONO_ADDINS_LIBS = @MONO_ADDINS_LIBS@
+MONO_ADDINS_SETUP_CFLAGS = @MONO_ADDINS_SETUP_CFLAGS@
+MONO_ADDINS_SETUP_LIBS = @MONO_ADDINS_SETUP_LIBS@
+MONO_MODULE_CFLAGS = @MONO_MODULE_CFLAGS@
+MONO_MODULE_LIBS = @MONO_MODULE_LIBS@
+MSGFMT = @MSGFMT@
+MSGFMT_OPTS = @MSGFMT_OPTS@
+MSGMERGE = @MSGMERGE@
+NDESK_DBUS_CFLAGS = @NDESK_DBUS_CFLAGS@
+NDESK_DBUS_LIBS = @NDESK_DBUS_LIBS@
+NM = @NM@
+NMEDIT = @NMEDIT@
+NUNIT_CFLAGS = @NUNIT_CFLAGS@
+NUNIT_LIBS = @NUNIT_LIBS@
+OBJC = @OBJC@
+OBJDUMP = @OBJDUMP@
+OBJEXT = @OBJEXT@
+OMF_DIR = @OMF_DIR@
+OTOOL = @OTOOL@
+OTOOL64 = @OTOOL64@
+PACKAGE = @PACKAGE@
+PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
+PACKAGE_NAME = @PACKAGE_NAME@
+PACKAGE_STRING = @PACKAGE_STRING@
+PACKAGE_TARNAME = @PACKAGE_TARNAME@
+PACKAGE_URL = @PACKAGE_URL@
+PACKAGE_VERSION = @PACKAGE_VERSION@
+PATH_SEPARATOR = @PATH_SEPARATOR@
+PKG_CONFIG = @PKG_CONFIG@
+POFILES = @POFILES@
+POSUB = @POSUB@
+PO_IN_DATADIR_FALSE = @PO_IN_DATADIR_FALSE@
+PO_IN_DATADIR_TRUE = @PO_IN_DATADIR_TRUE@
+Q = @Q@
+RANLIB = @RANLIB@
+SED = @SED@
+SET_MAKE = @SET_MAKE@
+SHELL = @SHELL@
+STRIP = @STRIP@
+TURTLEDIR = @TURTLEDIR@
+UNIQUE_CFLAGS = @UNIQUE_CFLAGS@
+UNIQUE_LIBS = @UNIQUE_LIBS@
+USE_NLS = @USE_NLS@
+V = @V@
+VERSION = @VERSION@
+WARN_CFLAGS = @WARN_CFLAGS@
+XGETTEXT = @XGETTEXT@
+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_DUMPBIN = @ac_ct_DUMPBIN@
+am__include = @am__include@
+am__leading_dot = @am__leading_dot@
+am__quote = @am__quote@
+am__tar = @am__tar@
+am__untar = @am__untar@
+bindir = @bindir@
+build = @build@
+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@
+expanded_bindir = @expanded_bindir@
+expanded_datadir = @expanded_datadir@
+expanded_libdir = @expanded_libdir@
+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@
+lt_ECHO = @lt_ECHO@
+mandir = @mandir@
+mkdir_p = @mkdir_p@
+oldincludedir = @oldincludedir@
+pdfdir = @pdfdir@
+prefix = @prefix@
+program_transform_name = @program_transform_name@
+psdir = @psdir@
+sbindir = @sbindir@
+sharedstatedir = @sharedstatedir@
+shavedir = @shavedir@
+srcdir = @srcdir@
+sysconfdir = @sysconfdir@
+target_alias = @target_alias@
+top_build_prefix = @top_build_prefix@
+top_builddir = @top_builddir@
+top_srcdir = @top_srcdir@
+desktop_in_files = \
+ f-spot.desktop.in \
+ f-spot-view.desktop.in \
+ f-spot-import.desktop.in
+
+Applicationsdir = $(datadir)/applications
+Applications_DATA = $(desktop_files)
+desktop_files = $(desktop_in_files:.desktop.in=.desktop)
+CLEANFILES = \
+ $(desktop_DATA)
+
+EXTRA_DIST = \
+ $(desktop_in_files) \
+ $(desktop_files)
+
+DISTCLEANFILES = \
+ $(desktop_files)
+
+UPDATE_DESKTOP = \
+ if [ -f $(DESTDIR)$(datadir)/applications/defaults.list ] ; then \
+ if which update-desktop-database>/dev/null 2>&1 ; then \
+ update-desktop-database; \
+ fi \
+ fi
+
+all: all-am
+
+.SUFFIXES:
+$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(am__configure_deps)
+ @for dep in $?; do \
+ case '$(am__configure_deps)' in \
+ *$$dep*) \
+ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \
+ && { if test -f $@; then exit 0; else break; fi; }; \
+ exit 1;; \
+ esac; \
+ done; \
+ echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign data/desktop-files/Makefile'; \
+ $(am__cd) $(top_srcdir) && \
+ $(AUTOMAKE) --foreign data/desktop-files/Makefile
+.PRECIOUS: Makefile
+Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
+ @case '$?' in \
+ *config.status*) \
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \
+ *) \
+ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \
+ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \
+ esac;
+
+$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+
+$(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps)
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps)
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(am__aclocal_m4_deps):
+f-spot.desktop.in: $(top_builddir)/config.status $(srcdir)/f-spot.desktop.in.in
+ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@
+f-spot-view.desktop.in: $(top_builddir)/config.status $(srcdir)/f-spot-view.desktop.in.in
+ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@
+f-spot-import.desktop.in: $(top_builddir)/config.status $(srcdir)/f-spot-import.desktop.in.in
+ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@
+
+mostlyclean-libtool:
+ -rm -f *.lo
+
+clean-libtool:
+ -rm -rf .libs _libs
+install-ApplicationsDATA: $(Applications_DATA)
+ @$(NORMAL_INSTALL)
+ test -z "$(Applicationsdir)" || $(MKDIR_P) "$(DESTDIR)$(Applicationsdir)"
+ @list='$(Applications_DATA)'; test -n "$(Applicationsdir)" || list=; \
+ for p in $$list; do \
+ if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \
+ echo "$$d$$p"; \
+ done | $(am__base_list) | \
+ while read files; do \
+ echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(Applicationsdir)'"; \
+ $(INSTALL_DATA) $$files "$(DESTDIR)$(Applicationsdir)" || exit $$?; \
+ done
+
+uninstall-ApplicationsDATA:
+ @$(NORMAL_UNINSTALL)
+ @list='$(Applications_DATA)'; test -n "$(Applicationsdir)" || list=; \
+ files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \
+ test -n "$$files" || exit 0; \
+ echo " ( cd '$(DESTDIR)$(Applicationsdir)' && rm -f" $$files ")"; \
+ cd "$(DESTDIR)$(Applicationsdir)" && rm -f $$files
+tags: TAGS
+TAGS:
+
+ctags: CTAGS
+CTAGS:
+
+
+distdir: $(DISTFILES)
+ @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; \
+ if test -d $$d/$$file; then \
+ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \
+ if test -d "$(distdir)/$$file"; then \
+ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
+ fi; \
+ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
+ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \
+ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
+ fi; \
+ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \
+ else \
+ test -f "$(distdir)/$$file" \
+ || cp -p $$d/$$file "$(distdir)/$$file" \
+ || exit 1; \
+ fi; \
+ done
+check-am: all-am
+check: check-am
+all-am: Makefile $(DATA)
+installdirs:
+ for dir in "$(DESTDIR)$(Applicationsdir)"; do \
+ test -z "$$dir" || $(MKDIR_P) "$$dir"; \
+ done
+install: install-am
+install-exec: install-exec-am
+install-data: install-data-am
+uninstall: uninstall-am
+
+install-am: all-am
+ @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
+
+installcheck: installcheck-am
+install-strip:
+ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+ `test -z '$(STRIP)' || \
+ echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install
+mostlyclean-generic:
+
+clean-generic:
+ -test -z "$(CLEANFILES)" || rm -f $(CLEANFILES)
+
+distclean-generic:
+ -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
+ -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES)
+ -test -z "$(DISTCLEANFILES)" || rm -f $(DISTCLEANFILES)
+
+maintainer-clean-generic:
+ @echo "This command is intended for maintainers to use"
+ @echo "it deletes files that may require special tools to rebuild."
+clean: clean-am
+
+clean-am: clean-generic clean-libtool mostlyclean-am
+
+distclean: distclean-am
+ -rm -f Makefile
+distclean-am: clean-am distclean-generic
+
+dvi: dvi-am
+
+dvi-am:
+
+html: html-am
+
+html-am:
+
+info: info-am
+
+info-am:
+
+install-data-am: install-ApplicationsDATA
+ @$(NORMAL_INSTALL)
+ $(MAKE) $(AM_MAKEFLAGS) install-data-hook
+install-dvi: install-dvi-am
+
+install-dvi-am:
+
+install-exec-am:
+
+install-html: install-html-am
+
+install-html-am:
+
+install-info: install-info-am
+
+install-info-am:
+
+install-man:
+
+install-pdf: install-pdf-am
+
+install-pdf-am:
+
+install-ps: install-ps-am
+
+install-ps-am:
+
+installcheck-am:
+
+maintainer-clean: maintainer-clean-am
+ -rm -f Makefile
+maintainer-clean-am: distclean-am maintainer-clean-generic
+
+mostlyclean: mostlyclean-am
+
+mostlyclean-am: mostlyclean-generic mostlyclean-libtool
+
+pdf: pdf-am
+
+pdf-am:
+
+ps: ps-am
+
+ps-am:
+
+uninstall-am: uninstall-ApplicationsDATA
+ @$(NORMAL_INSTALL)
+ $(MAKE) $(AM_MAKEFLAGS) uninstall-hook
+.MAKE: install-am install-data-am install-strip uninstall-am
+
+.PHONY: all all-am check check-am clean clean-generic clean-libtool \
+ distclean distclean-generic distclean-libtool distdir dvi \
+ dvi-am html html-am info info-am install \
+ install-ApplicationsDATA install-am install-data \
+ install-data-am install-data-hook 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-generic \
+ mostlyclean-libtool pdf pdf-am ps ps-am uninstall \
+ uninstall-ApplicationsDATA uninstall-am uninstall-hook
+
+ at INTLTOOL_DESKTOP_RULE@
+
+install-data-hook:
+ $(UPDATE_DESKTOP)
+
+uninstall-hook:
+ $(UPDATE_DESKTOP)
+
+# 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.
+.NOEXPORT:
diff --git a/data/desktop-files/f-spot-import.desktop b/data/desktop-files/f-spot-import.desktop
new file mode 100644
index 0000000..74bec29
--- /dev/null
+++ b/data/desktop-files/f-spot-import.desktop
@@ -0,0 +1,232 @@
+[Desktop Entry]
+Version=1.0
+Name=F-Spot
+Name[ar]=إف-سبوت
+Name[be at latin]=F-Spot
+Name[bg]=F-Spot
+Name[bn_IN]=F-Spot
+Name[ca]=F-Spot
+Name[cs]=F-Spot
+Name[da]=F-Spot
+Name[de]=F-Spot
+Name[dz]=ཨེཕ་-ཨིསི་པོཊི་
+Name[el]=F-Spot
+Name[en_CA]=F-Spot
+Name[en_GB]=F-Spot
+Name[es]=F-Spot
+Name[et]=F-Spot
+Name[eu]=F-Spot
+Name[fa]=اِف- اِسپات
+Name[fi]=F-Spot
+Name[fr]=F-Spot
+Name[gl]=F-Spot
+Name[he]=F-Spot
+Name[hi]=एफ़ स्पॉट
+Name[hu]=F-Spot
+Name[id]=F-Spot
+Name[it]=F-Spot
+Name[ja]=F-Spot
+Name[ka]=F-სპოტ
+Name[kn]=F-Spot
+Name[ko]=F-Spot
+Name[lt]=F-Spot
+Name[lv]=F-Spot
+Name[mk]=F-Spot
+Name[mr]=F-Spot
+Name[nb]=F-Spot
+Name[nds]=F-Spot
+Name[or]=F-Spot
+Name[pa]=F-ਸਪੋਟ
+Name[pl]=F-Spot
+Name[pt]=F-Spot
+Name[pt_BR]=F-Spot
+Name[ro]=F-Spot
+Name[ru]=F-Spot
+Name[sk]=F-Spot
+Name[sl]=F-Spot
+Name[sr]=Ф-број
+Name[sr at latin]=F-broj
+Name[sv]=F-Spot
+Name[ta]=F-Spot
+Name[te]=F-Spot
+Name[th]=F-Spot
+Name[uk]=F-Spot
+Name[vi]=F-Spot
+Name[zh_CN]=F-Spot
+Name[zh_HK]=F-Spot
+Name[zh_TW]=F-Spot
+GenericName=Photo Manager
+GenericName[ar]=مدير الصور
+GenericName[as]=ফটো মেনেজাৰ
+GenericName[be at latin]=Kiraŭnik zdymkaŭ
+GenericName[bg]=Управление на снимки
+GenericName[bn_IN]=ফটো পরিচালন ব্যবস্থা
+GenericName[ca]=Gestor fotogràfic
+GenericName[cs]=Správce fotografií
+GenericName[da]=Fotohåndtering
+GenericName[de]=Fotoverwaltung
+GenericName[dz]=དཔར་འཛིན་སྐྱོང་པ་
+GenericName[el]=Διαχείριση φωτογραφιών
+GenericName[en_CA]=Photo Manager
+GenericName[en_GB]=Photo Manager
+GenericName[es]=Gestor de fotografías
+GenericName[et]=Fotode haldaja
+GenericName[eu]=Argazki-kudeatzailea
+GenericName[fa]=مدیر عکس
+GenericName[fi]=Valokuvien hallinta
+GenericName[fr]=Gestionnaire de photos
+GenericName[gl]=Xestor de fotos
+GenericName[gu]=ફોટો વ્યવસ્થાપક
+GenericName[he]=מנהל תמונות
+GenericName[hi]=फोटो प्रबंधक
+GenericName[hu]=Fényképkezelő
+GenericName[id]=Manajer Foto
+GenericName[it]=Gestore di fotografie
+GenericName[ja]=写真マネージャ
+GenericName[ka]=ფოტო მენეჯერი
+GenericName[kn]=ಫೋಟೊ ವ್ಯವಸ್ಥಾಪಕ
+GenericName[ko]=사진 관리자
+GenericName[lt]=Fotografijų tvarkymo programa
+GenericName[lv]=Fotogrāfiju pārvaldnieks
+GenericName[mk]=Менаџер за слики
+GenericName[mr]=फोटो व्यवस्थापक
+GenericName[nb]=Fotobehandler
+GenericName[nl]=Fotobeheer
+GenericName[or]=ଫୋଟୋ ପରିଚାଳକ
+GenericName[pa]=ਫੋਟੋ ਮੈਨੇਜਰ
+GenericName[pl]=Menedżer zdjęć
+GenericName[pt]=Gestor de Fotografias
+GenericName[pt_BR]=Gerenciador de fotos
+GenericName[ro]=Manager Foto
+GenericName[ru]=Управление фотографиями
+GenericName[sk]=Správca fotiek
+GenericName[sl]=Upravljalnik fotografij
+GenericName[sr]=Фото албум
+GenericName[sr at latin]=Foto album
+GenericName[sv]=Fotohanterare
+GenericName[ta]=நிழற்பட மேலாளர்
+GenericName[te]=ఛాయాచిత్ర నిర్వాహిక
+GenericName[th]=โปรแกรมจัดการภาพถ่าย
+GenericName[uk]=Керування фотографіями
+GenericName[vi]=Bộ Quản Lý Ảnh Chụp
+GenericName[zh_CN]=照片管理器
+GenericName[zh_HK]=相片管理員
+GenericName[zh_TW]=相片管理員
+X-GNOME-FullName=F-Spot Photo Manager
+X-GNOME-FullName[ar]=مدير الصور إف-سبوت
+X-GNOME-FullName[as]=F-Spot ফটো মেনেজাৰ
+X-GNOME-FullName[be at latin]=Kiraŭnik zdymkaŭ F-Spot
+X-GNOME-FullName[bg]=Управление на снимки (F-Spot)
+X-GNOME-FullName[bn_IN]=F-Spot ফটো পরিচালন ব্যবস্থা
+X-GNOME-FullName[ca]=Gestor fotogràfic F-Spot
+X-GNOME-FullName[cs]=Správce fotografií F-Spot
+X-GNOME-FullName[da]=F-Spot fotohåndtering
+X-GNOME-FullName[de]=F-Spot Fotoverwaltung
+X-GNOME-FullName[dz]=ཨེཕ་-ཨིསི་པོཊི་ དཔར་འཛིན་སྐྱོང་པ་
+X-GNOME-FullName[el]=Διαχείριση φωτογραφιών
+X-GNOME-FullName[en_CA]=F-Spot Photo Manager
+X-GNOME-FullName[en_GB]=F-Spot Photo Manager
+X-GNOME-FullName[es]=Gestor de fotos F-Spot
+X-GNOME-FullName[et]=F-Spot fotoalbum
+X-GNOME-FullName[eu]=F-Spot argazki-kudeatzailea
+X-GNOME-FullName[fa]=مدیر عکس اِف-اِسپات
+X-GNOME-FullName[fi]=F-Spot - valokuvien hallinta
+X-GNOME-FullName[fr]=Gestionnaire de photos F-Spot
+X-GNOME-FullName[gl]=Xestor de fotos F-Spot
+X-GNOME-FullName[gu]=F-Spot ફોટો વ્યવસ્થાપક
+X-GNOME-FullName[he]=מנהל התמונות F-Spot
+X-GNOME-FullName[hi]=एफ़ स्पॉट फोटो प्रबंधक
+X-GNOME-FullName[hu]=F-Spot fotókezelő
+X-GNOME-FullName[id]=F-Spot Photo Manager
+X-GNOME-FullName[it]=Gestore di fotografie F-spot
+X-GNOME-FullName[ja]=F-Spot 写真マネージャ
+X-GNOME-FullName[ka]=F-სპოტ ფოტო მენეჯერი
+X-GNOME-FullName[kn]=F-Spot ಫೋಟೋ ವ್ಯವಸ್ಥಾಪಕ
+X-GNOME-FullName[ko]=F-Spot 사진 관리자
+X-GNOME-FullName[lt]=Fotografijų tvarkymo programa F-Spot
+X-GNOME-FullName[lv]=F-Spot fotogrāfiju pārvaldnieks
+X-GNOME-FullName[mk]=F-Spot Менаџер за слики
+X-GNOME-FullName[mr]=F-Spot फोटो व्यवस्थापक
+X-GNOME-FullName[nb]=F-Spot bildebehandling
+X-GNOME-FullName[nl]=F-Spot fotobeheer
+X-GNOME-FullName[or]=F-Spot ଫୋଟୋ ପରିଚାଳକ
+X-GNOME-FullName[pa]=F-ਸਪੋਟ ਫੋਟੋ ਮੈਨੇਜਰ
+X-GNOME-FullName[pl]=Menedżer zdjęć F-Spot
+X-GNOME-FullName[pt]=Gestor de Fotografias do F-Spot
+X-GNOME-FullName[pt_BR]=Gerenciador de fotos F-Spot
+X-GNOME-FullName[ro]=Manager Foto F-Spot
+X-GNOME-FullName[ru]=Управление фотографиями в F-Spot
+X-GNOME-FullName[sk]=Správca fotiek F-Spot
+X-GNOME-FullName[sl]=F-spot upravljalnik fotografij
+X-GNOME-FullName[sr]=Ф-број фото албум
+X-GNOME-FullName[sr at latin]=F-broj foto album
+X-GNOME-FullName[sv]=Fotohanteraren F-Spot
+X-GNOME-FullName[ta]=F-Spot நிழற்பட மேலாளர்
+X-GNOME-FullName[te]=F-Spot ఛాయాచిత్ర నిర్వాహిక
+X-GNOME-FullName[th]=F-Spot: โปรแกรมจัดการภาพถ่าย
+X-GNOME-FullName[uk]=Керування фотографіями у F-Spot
+X-GNOME-FullName[vi]=Bộ Quản Lý Ảnh Chụp F-Spot
+X-GNOME-FullName[zh_CN]=F-Spot 照片管理器
+X-GNOME-FullName[zh_HK]=F-Spot 相片管理員
+X-GNOME-FullName[zh_TW]=F-Spot 相片管理員
+Comment=Import into F-Spot
+Comment[ar]=استيراد إلى إف-سبوت
+Comment[as]=F-Spot লৈ আমদানি কৰক
+Comment[bg]=Внасяне в F-Spot
+Comment[bn_IN]=F-Spot-এ ইম্পোর্ট করুন
+Comment[ca]=Importa a l'F-Spot
+Comment[cs]=Importovat do F-Spot
+Comment[da]=Importér til F-Spot
+Comment[de]=In F-Spot importieren
+Comment[el]=Εισαγωγή στο F-Spot
+Comment[en_GB]=Import into F-Spot
+Comment[es]=Importar en F-Spot
+Comment[et]=Impordi F-Spot'i
+Comment[eu]=Inportatu 'F-Spot'-era
+Comment[fi]=Tuo F-Spotiin
+Comment[fr]=Importer dans F-Spot
+Comment[gl]=Importar a F-Spot
+Comment[gu]=F-Spot માં આયાત કરો
+Comment[he]=ייבוא לתוך F-Spot
+Comment[hi]=F-Spot में लाएँ
+Comment[hu]=Importálás az F-Spotba
+Comment[id]=Impor ke F-Spot
+Comment[it]=Importa in F-Spot
+Comment[ja]=F-Spot にインポート
+Comment[kn]=F-Spot ಗೆ ಆಮದು ಮಾಡಿಕೊಳ್ಳಿ
+Comment[ko]=F-스팟으로 가져오기
+Comment[lt]=Importuoti į F-Spot
+Comment[mk]=Увези во F-Spot
+Comment[mr]=F-Spot अंतर्गत आयात करा
+Comment[nb]=Importer til F-Spot
+Comment[or]=F-Spot ଭିତରେ ଆମଦାନୀ କରନ୍ତୁ
+Comment[pa]=F-ਸਪੋਟ ਵਿੱਚ ਇੰਪੋਰਟ ਕਰੋ
+Comment[pl]=Importowanie do programu F-Spot
+Comment[pt]=Importar para o F-Spot
+Comment[pt_BR]=Importar para o F-Spot
+Comment[ro]=Importă în F-Spot
+Comment[ru]=Импортировать в F-Spot
+Comment[sk]=Importovať do F-Spot
+Comment[sl]=Uvoz v F-Spot
+Comment[sr]=Увези у Ф-број
+Comment[sr at latin]=Uvezi u F-broj
+Comment[sv]=Importera till F-Spot
+Comment[ta]=F-Spotல் இறக்கவும்
+Comment[te]=F-Spotనకు దిగుమతి చేయుము
+Comment[th]=นำเข้าสู่ F-Spot
+Comment[uk]=Імпортувати до F-Spot
+Comment[zh_CN]=导入到 F-Spot
+Comment[zh_HK]=匯入至 F-Spot
+Comment[zh_TW]=匯入至 F-Spot
+NoDisplay=true
+Exec=f-spot-import %u
+Icon=f-spot
+MimeType=x-content/image-dcf;x-content/image-picturecd;
+StartupNotify=true
+Terminal=false
+Type=Application
+X-GNOME-Bugzilla-Bugzilla=GNOME
+X-GNOME-Bugzilla-Product=f-spot
+X-GNOME-Bugzilla-Component=General
+X-GNOME-Bugzilla-Version=0.7.0
+X-GNOME-DocPath=f-spot/f-spot.xml
diff --git a/data/desktop-files/f-spot-import.desktop.in b/data/desktop-files/f-spot-import.desktop.in
new file mode 100644
index 0000000..0b2615e
--- /dev/null
+++ b/data/desktop-files/f-spot-import.desktop.in
@@ -0,0 +1,18 @@
+[Desktop Entry]
+Version=1.0
+_Name=F-Spot
+_GenericName=Photo Manager
+_X-GNOME-FullName=F-Spot Photo Manager
+_Comment=Import into F-Spot
+NoDisplay=true
+Exec=f-spot-import %u
+Icon=f-spot
+MimeType=x-content/image-dcf;x-content/image-picturecd;
+StartupNotify=true
+Terminal=false
+Type=Application
+X-GNOME-Bugzilla-Bugzilla=GNOME
+X-GNOME-Bugzilla-Product=f-spot
+X-GNOME-Bugzilla-Component=General
+X-GNOME-Bugzilla-Version=0.7.0
+X-GNOME-DocPath=f-spot/f-spot.xml
diff --git a/f-spot-import.desktop.in.in b/data/desktop-files/f-spot-import.desktop.in.in
similarity index 100%
rename from f-spot-import.desktop.in.in
rename to data/desktop-files/f-spot-import.desktop.in.in
diff --git a/data/desktop-files/f-spot-view.desktop b/data/desktop-files/f-spot-view.desktop
new file mode 100644
index 0000000..481dca8
--- /dev/null
+++ b/data/desktop-files/f-spot-view.desktop
@@ -0,0 +1,181 @@
+[Desktop Entry]
+Version=1.0
+Name=F-Spot
+Name[ar]=إف-سبوت
+Name[be at latin]=F-Spot
+Name[bg]=F-Spot
+Name[bn_IN]=F-Spot
+Name[ca]=F-Spot
+Name[cs]=F-Spot
+Name[da]=F-Spot
+Name[de]=F-Spot
+Name[dz]=ཨེཕ་-ཨིསི་པོཊི་
+Name[el]=F-Spot
+Name[en_CA]=F-Spot
+Name[en_GB]=F-Spot
+Name[es]=F-Spot
+Name[et]=F-Spot
+Name[eu]=F-Spot
+Name[fa]=اِف- اِسپات
+Name[fi]=F-Spot
+Name[fr]=F-Spot
+Name[gl]=F-Spot
+Name[he]=F-Spot
+Name[hi]=एफ़ स्पॉट
+Name[hu]=F-Spot
+Name[id]=F-Spot
+Name[it]=F-Spot
+Name[ja]=F-Spot
+Name[ka]=F-სპოტ
+Name[kn]=F-Spot
+Name[ko]=F-Spot
+Name[lt]=F-Spot
+Name[lv]=F-Spot
+Name[mk]=F-Spot
+Name[mr]=F-Spot
+Name[nb]=F-Spot
+Name[nds]=F-Spot
+Name[or]=F-Spot
+Name[pa]=F-ਸਪੋਟ
+Name[pl]=F-Spot
+Name[pt]=F-Spot
+Name[pt_BR]=F-Spot
+Name[ro]=F-Spot
+Name[ru]=F-Spot
+Name[sk]=F-Spot
+Name[sl]=F-Spot
+Name[sr]=Ф-број
+Name[sr at latin]=F-broj
+Name[sv]=F-Spot
+Name[ta]=F-Spot
+Name[te]=F-Spot
+Name[th]=F-Spot
+Name[uk]=F-Spot
+Name[vi]=F-Spot
+Name[zh_CN]=F-Spot
+Name[zh_HK]=F-Spot
+Name[zh_TW]=F-Spot
+GenericName=Photo Viewer
+GenericName[ar]=عارض الصور
+GenericName[as]=ফ'টো ভিৱাৰ
+GenericName[be at latin]=Prahladalnik zdymkaŭ
+GenericName[bg]=Преглед на снимки
+GenericName[bn_IN]=ফটো প্রদর্শন ব্যবস্থা
+GenericName[ca]=Visualitzador fotogràfic
+GenericName[cs]=Prohlížeč fotografií
+GenericName[da]=Fotofremviser
+GenericName[de]=Fotobetrachter
+GenericName[dz]=དཔར་མཐོང་བྱེད་
+GenericName[el]=Προβολή φωτογραφιών
+GenericName[en_CA]=Photo Viewer
+GenericName[en_GB]=Photo Viewer
+GenericName[es]=Visor de fotos
+GenericName[et]=Fotonäitaja
+GenericName[eu]=Argazki-ikustailea
+GenericName[fa]=نمایشدهندهٔ عکس
+GenericName[fi]=Valokuvien katselin
+GenericName[fr]=Visionneur de photos
+GenericName[gl]=Visor de fotos
+GenericName[gu]=ફોટો દર્શક
+GenericName[he]=מציג התמונות
+GenericName[hi]=फोटो प्रदर्शक
+GenericName[hu]=Fotómegjelenítő
+GenericName[id]=Penilik Foto
+GenericName[it]=Visualizzatore di fotografie
+GenericName[ja]=写真ビューア
+GenericName[ka]=ფოტო დამთვალიერებელი
+GenericName[kn]=ಫೋಟೋ ವೀಕ್ಷಕ
+GenericName[ko]=사진 보기
+GenericName[lt]=Fotografijų peržiūros programa
+GenericName[lv]=Bilžu skatītājs
+GenericName[mk]=Прегледувач за слики
+GenericName[mr]=फोटो प्रदर्शक
+GenericName[nb]=Fotovisning
+GenericName[nl]=Fotoweergave
+GenericName[or]=ଫୋଟୋ ପ୍ରଦର୍ଶକ
+GenericName[pa]=ਤਸਵੀਰ ਦਰਸ਼ਕ
+GenericName[pl]=Przeglądarka zdjęć
+GenericName[pt]=Visualizador de Fotografias
+GenericName[pt_BR]=Visualizador de fotos
+GenericName[ro]=Vizualizator de fotografii
+GenericName[ru]=Просмотр снимков
+GenericName[sk]=Prehliadač fotiek
+GenericName[sl]=Pregledovalnik fotografij
+GenericName[sr]=Прегледник фотографија
+GenericName[sr at latin]=Preglednik fotografija
+GenericName[sv]=Fotovisare
+GenericName[ta]=நிழற்பட காட்டி
+GenericName[te]=ఛాయాచిత్ర దర్శిని
+GenericName[uk]=Перегляд фотографій
+GenericName[vi]=Bộ Xem Ảnh Chụp
+GenericName[zh_CN]=照片查看器
+GenericName[zh_HK]=相片檢視器
+GenericName[zh_TW]=相片檢視器
+X-GNOME-FullName=F-Spot Photo Viewer
+X-GNOME-FullName[ar]=عارض صور إف-سبوت
+X-GNOME-FullName[as]=F-Spot ফ'টো প্ৰদৰ্শক
+X-GNOME-FullName[be at latin]=Prahladalnik zdymkaŭ F-Spot
+X-GNOME-FullName[bg]=Преглед на снимки с F-Spot
+X-GNOME-FullName[bn_IN]=F-Spot ফটো প্রদর্শন ব্যবস্থা
+X-GNOME-FullName[ca]=Visualitzador fotogràfic F-Spot
+X-GNOME-FullName[cs]=Prohlížeč fotografií F-Spot
+X-GNOME-FullName[da]=F-Spot fotofremviser
+X-GNOME-FullName[de]=F-Spot Fotobetrachter
+X-GNOME-FullName[dz]=ཨེཕ་-ཨིསི་པོཊི་ དཔར་མཐོང་བྱེད་
+X-GNOME-FullName[el]=F-Spot προβολή φωτογραφιών
+X-GNOME-FullName[en_CA]=F-Spot Photo Viewer
+X-GNOME-FullName[en_GB]=F-Spot Photo Viewer
+X-GNOME-FullName[es]=Visor de fotos F-Spot
+X-GNOME-FullName[et]=F-Spot fotonäitaja
+X-GNOME-FullName[eu]=F-Spot argazki-ikustailea
+X-GNOME-FullName[fa]=نمایشدهندهٔ عکس اِف-اِسپات
+X-GNOME-FullName[fi]=F-Spot - valokuvien hallinta
+X-GNOME-FullName[fr]=Visionneur de photos F-Spot
+X-GNOME-FullName[gl]=Visor de fotos F-Spot
+X-GNOME-FullName[gu]=F-Spot ફોટો દર્શક
+X-GNOME-FullName[he]=מציג התמונות F-Spot
+X-GNOME-FullName[hi]=एफ़ स्पॉट फोटो प्रदर्शक
+X-GNOME-FullName[hu]=F-Spot fotómegjelenítő
+X-GNOME-FullName[id]=F-Spot Photo Viewer
+X-GNOME-FullName[it]=Visualizzatore di fotografie F-Spot
+X-GNOME-FullName[ja]=F-Spot 写真ビューア
+X-GNOME-FullName[ka]=F-სპოტ ფოტო დამთვალიერებელი
+X-GNOME-FullName[kn]=F-Spot ಫೋಟೋ ವೀಕ್ಷಕ
+X-GNOME-FullName[ko]=F-Spot 사진 보기
+X-GNOME-FullName[lt]=Fotografijų peržiūros programa F-Spot
+X-GNOME-FullName[lv]=F-Spot bilžu skatītājs
+X-GNOME-FullName[mk]=F-Spot Прегледувач за слики
+X-GNOME-FullName[mr]=F-Spot फोटो प्रदर्शक
+X-GNOME-FullName[nb]=F-spot bildebehandling
+X-GNOME-FullName[nl]=F-Spot fotoweergave
+X-GNOME-FullName[or]=F-Spot ଫୋଟୋ ପ୍ରଦର୍ଶକ
+X-GNOME-FullName[pa]=F-ਸਪੋਟ ਫੋਟੋ ਦਰਸ਼ਕ
+X-GNOME-FullName[pl]=Przeglądarka zdjęć F-Spot
+X-GNOME-FullName[pt]=Visualizador de Fotografias do F-Spot
+X-GNOME-FullName[pt_BR]=Visualizador de fotos F-Spot
+X-GNOME-FullName[ro]=Vizualizatorul de fotografii F-Spot
+X-GNOME-FullName[ru]=Просмотр снимков в F-Spot
+X-GNOME-FullName[sk]=Prehliadač fotiek F-Spot
+X-GNOME-FullName[sl]=F-_Spot pregledovalnik fotografij
+X-GNOME-FullName[sr]=Ф-број прегледач фотографија
+X-GNOME-FullName[sr at latin]=F-broj pregledač fotografija
+X-GNOME-FullName[sv]=Fotovisaren F-Spot
+X-GNOME-FullName[ta]=F-Spot நிழற்படக் காட்டி
+X-GNOME-FullName[te]=F-Spot ఛాయాచిత్ర దర్శని
+X-GNOME-FullName[uk]=Перегляд фотографій F-Spot
+X-GNOME-FullName[vi]=Bộ xem ảnh chụp F-Spot
+X-GNOME-FullName[zh_CN]=F-Spot 照片查看器
+X-GNOME-FullName[zh_HK]=F-Spot 相片檢視器
+X-GNOME-FullName[zh_TW]=F-Spot 相片檢視器
+TryExec=f-spot
+Exec=f-spot --view %U
+NoDisplay=true
+Icon=f-spot
+StartupNotify=false
+Terminal=false
+Type=Application
+X-GNOME-Bugzilla-Bugzilla=GNOME
+X-GNOME-Bugzilla-Product=f-spot
+X-GNOME-Bugzilla-Component=General
+X-GNOME-Bugzilla-Version=0.7.0
+MimeType=image/bmp;image/gif;image/jpeg;image/jpg;image/pjpeg;image/png;image/svg+xml;image/tiff;image/x-bmp;image/x-gray;image/x-icb;image/x-ico;image/x-png;image/x-portable-anymap;image/x-portable-bitmap;image/x-portable-graymap;image/x-portable-pixmap;image/x-psd;image/x-xbitmap;image/x-xpixmap;image/x-pcx;image/x-dcraw;image/x-ciff;image/x-mrw;image/x-x3f;image/x-orf;image/x-nef;image/x-cr2;image/x-raf;
diff --git a/data/desktop-files/f-spot-view.desktop.in b/data/desktop-files/f-spot-view.desktop.in
new file mode 100644
index 0000000..efe85a2
--- /dev/null
+++ b/data/desktop-files/f-spot-view.desktop.in
@@ -0,0 +1,17 @@
+[Desktop Entry]
+Version=1.0
+_Name=F-Spot
+_GenericName=Photo Viewer
+_X-GNOME-FullName=F-Spot Photo Viewer
+TryExec=f-spot
+Exec=f-spot --view %U
+NoDisplay=true
+Icon=f-spot
+StartupNotify=false
+Terminal=false
+Type=Application
+X-GNOME-Bugzilla-Bugzilla=GNOME
+X-GNOME-Bugzilla-Product=f-spot
+X-GNOME-Bugzilla-Component=General
+X-GNOME-Bugzilla-Version=0.7.0
+MimeType=image/bmp;image/gif;image/jpeg;image/jpg;image/pjpeg;image/png;image/svg+xml;image/tiff;image/x-bmp;image/x-gray;image/x-icb;image/x-ico;image/x-png;image/x-portable-anymap;image/x-portable-bitmap;image/x-portable-graymap;image/x-portable-pixmap;image/x-psd;image/x-xbitmap;image/x-xpixmap;image/x-pcx;image/x-dcraw;image/x-ciff;image/x-mrw;image/x-x3f;image/x-orf;image/x-nef;image/x-cr2;image/x-raf;
diff --git a/f-spot-view.desktop.in.in b/data/desktop-files/f-spot-view.desktop.in.in
similarity index 100%
rename from f-spot-view.desktop.in.in
rename to data/desktop-files/f-spot-view.desktop.in.in
diff --git a/data/desktop-files/f-spot.desktop b/data/desktop-files/f-spot.desktop
new file mode 100644
index 0000000..898b463
--- /dev/null
+++ b/data/desktop-files/f-spot.desktop
@@ -0,0 +1,238 @@
+[Desktop Entry]
+Version=1.0
+Name=F-Spot
+Name[ar]=إف-سبوت
+Name[be at latin]=F-Spot
+Name[bg]=F-Spot
+Name[bn_IN]=F-Spot
+Name[ca]=F-Spot
+Name[cs]=F-Spot
+Name[da]=F-Spot
+Name[de]=F-Spot
+Name[dz]=ཨེཕ་-ཨིསི་པོཊི་
+Name[el]=F-Spot
+Name[en_CA]=F-Spot
+Name[en_GB]=F-Spot
+Name[es]=F-Spot
+Name[et]=F-Spot
+Name[eu]=F-Spot
+Name[fa]=اِف- اِسپات
+Name[fi]=F-Spot
+Name[fr]=F-Spot
+Name[gl]=F-Spot
+Name[he]=F-Spot
+Name[hi]=एफ़ स्पॉट
+Name[hu]=F-Spot
+Name[id]=F-Spot
+Name[it]=F-Spot
+Name[ja]=F-Spot
+Name[ka]=F-სპოტ
+Name[kn]=F-Spot
+Name[ko]=F-Spot
+Name[lt]=F-Spot
+Name[lv]=F-Spot
+Name[mk]=F-Spot
+Name[mr]=F-Spot
+Name[nb]=F-Spot
+Name[nds]=F-Spot
+Name[or]=F-Spot
+Name[pa]=F-ਸਪੋਟ
+Name[pl]=F-Spot
+Name[pt]=F-Spot
+Name[pt_BR]=F-Spot
+Name[ro]=F-Spot
+Name[ru]=F-Spot
+Name[sk]=F-Spot
+Name[sl]=F-Spot
+Name[sr]=Ф-број
+Name[sr at latin]=F-broj
+Name[sv]=F-Spot
+Name[ta]=F-Spot
+Name[te]=F-Spot
+Name[th]=F-Spot
+Name[uk]=F-Spot
+Name[vi]=F-Spot
+Name[zh_CN]=F-Spot
+Name[zh_HK]=F-Spot
+Name[zh_TW]=F-Spot
+GenericName=Photo Manager
+GenericName[ar]=مدير الصور
+GenericName[as]=ফটো মেনেজাৰ
+GenericName[be at latin]=Kiraŭnik zdymkaŭ
+GenericName[bg]=Управление на снимки
+GenericName[bn_IN]=ফটো পরিচালন ব্যবস্থা
+GenericName[ca]=Gestor fotogràfic
+GenericName[cs]=Správce fotografií
+GenericName[da]=Fotohåndtering
+GenericName[de]=Fotoverwaltung
+GenericName[dz]=དཔར་འཛིན་སྐྱོང་པ་
+GenericName[el]=Διαχείριση φωτογραφιών
+GenericName[en_CA]=Photo Manager
+GenericName[en_GB]=Photo Manager
+GenericName[es]=Gestor de fotografías
+GenericName[et]=Fotode haldaja
+GenericName[eu]=Argazki-kudeatzailea
+GenericName[fa]=مدیر عکس
+GenericName[fi]=Valokuvien hallinta
+GenericName[fr]=Gestionnaire de photos
+GenericName[gl]=Xestor de fotos
+GenericName[gu]=ફોટો વ્યવસ્થાપક
+GenericName[he]=מנהל תמונות
+GenericName[hi]=फोटो प्रबंधक
+GenericName[hu]=Fényképkezelő
+GenericName[id]=Manajer Foto
+GenericName[it]=Gestore di fotografie
+GenericName[ja]=写真マネージャ
+GenericName[ka]=ფოტო მენეჯერი
+GenericName[kn]=ಫೋಟೊ ವ್ಯವಸ್ಥಾಪಕ
+GenericName[ko]=사진 관리자
+GenericName[lt]=Fotografijų tvarkymo programa
+GenericName[lv]=Fotogrāfiju pārvaldnieks
+GenericName[mk]=Менаџер за слики
+GenericName[mr]=फोटो व्यवस्थापक
+GenericName[nb]=Fotobehandler
+GenericName[nl]=Fotobeheer
+GenericName[or]=ଫୋଟୋ ପରିଚାଳକ
+GenericName[pa]=ਫੋਟੋ ਮੈਨੇਜਰ
+GenericName[pl]=Menedżer zdjęć
+GenericName[pt]=Gestor de Fotografias
+GenericName[pt_BR]=Gerenciador de fotos
+GenericName[ro]=Manager Foto
+GenericName[ru]=Управление фотографиями
+GenericName[sk]=Správca fotiek
+GenericName[sl]=Upravljalnik fotografij
+GenericName[sr]=Фото албум
+GenericName[sr at latin]=Foto album
+GenericName[sv]=Fotohanterare
+GenericName[ta]=நிழற்பட மேலாளர்
+GenericName[te]=ఛాయాచిత్ర నిర్వాహిక
+GenericName[th]=โปรแกรมจัดการภาพถ่าย
+GenericName[uk]=Керування фотографіями
+GenericName[vi]=Bộ Quản Lý Ảnh Chụp
+GenericName[zh_CN]=照片管理器
+GenericName[zh_HK]=相片管理員
+GenericName[zh_TW]=相片管理員
+X-GNOME-FullName=F-Spot Photo Manager
+X-GNOME-FullName[ar]=مدير الصور إف-سبوت
+X-GNOME-FullName[as]=F-Spot ফটো মেনেজাৰ
+X-GNOME-FullName[be at latin]=Kiraŭnik zdymkaŭ F-Spot
+X-GNOME-FullName[bg]=Управление на снимки (F-Spot)
+X-GNOME-FullName[bn_IN]=F-Spot ফটো পরিচালন ব্যবস্থা
+X-GNOME-FullName[ca]=Gestor fotogràfic F-Spot
+X-GNOME-FullName[cs]=Správce fotografií F-Spot
+X-GNOME-FullName[da]=F-Spot fotohåndtering
+X-GNOME-FullName[de]=F-Spot Fotoverwaltung
+X-GNOME-FullName[dz]=ཨེཕ་-ཨིསི་པོཊི་ དཔར་འཛིན་སྐྱོང་པ་
+X-GNOME-FullName[el]=Διαχείριση φωτογραφιών
+X-GNOME-FullName[en_CA]=F-Spot Photo Manager
+X-GNOME-FullName[en_GB]=F-Spot Photo Manager
+X-GNOME-FullName[es]=Gestor de fotos F-Spot
+X-GNOME-FullName[et]=F-Spot fotoalbum
+X-GNOME-FullName[eu]=F-Spot argazki-kudeatzailea
+X-GNOME-FullName[fa]=مدیر عکس اِف-اِسپات
+X-GNOME-FullName[fi]=F-Spot - valokuvien hallinta
+X-GNOME-FullName[fr]=Gestionnaire de photos F-Spot
+X-GNOME-FullName[gl]=Xestor de fotos F-Spot
+X-GNOME-FullName[gu]=F-Spot ફોટો વ્યવસ્થાપક
+X-GNOME-FullName[he]=מנהל התמונות F-Spot
+X-GNOME-FullName[hi]=एफ़ स्पॉट फोटो प्रबंधक
+X-GNOME-FullName[hu]=F-Spot fotókezelő
+X-GNOME-FullName[id]=F-Spot Photo Manager
+X-GNOME-FullName[it]=Gestore di fotografie F-spot
+X-GNOME-FullName[ja]=F-Spot 写真マネージャ
+X-GNOME-FullName[ka]=F-სპოტ ფოტო მენეჯერი
+X-GNOME-FullName[kn]=F-Spot ಫೋಟೋ ವ್ಯವಸ್ಥಾಪಕ
+X-GNOME-FullName[ko]=F-Spot 사진 관리자
+X-GNOME-FullName[lt]=Fotografijų tvarkymo programa F-Spot
+X-GNOME-FullName[lv]=F-Spot fotogrāfiju pārvaldnieks
+X-GNOME-FullName[mk]=F-Spot Менаџер за слики
+X-GNOME-FullName[mr]=F-Spot फोटो व्यवस्थापक
+X-GNOME-FullName[nb]=F-Spot bildebehandling
+X-GNOME-FullName[nl]=F-Spot fotobeheer
+X-GNOME-FullName[or]=F-Spot ଫୋଟୋ ପରିଚାଳକ
+X-GNOME-FullName[pa]=F-ਸਪੋਟ ਫੋਟੋ ਮੈਨੇਜਰ
+X-GNOME-FullName[pl]=Menedżer zdjęć F-Spot
+X-GNOME-FullName[pt]=Gestor de Fotografias do F-Spot
+X-GNOME-FullName[pt_BR]=Gerenciador de fotos F-Spot
+X-GNOME-FullName[ro]=Manager Foto F-Spot
+X-GNOME-FullName[ru]=Управление фотографиями в F-Spot
+X-GNOME-FullName[sk]=Správca fotiek F-Spot
+X-GNOME-FullName[sl]=F-spot upravljalnik fotografij
+X-GNOME-FullName[sr]=Ф-број фото албум
+X-GNOME-FullName[sr at latin]=F-broj foto album
+X-GNOME-FullName[sv]=Fotohanteraren F-Spot
+X-GNOME-FullName[ta]=F-Spot நிழற்பட மேலாளர்
+X-GNOME-FullName[te]=F-Spot ఛాయాచిత్ర నిర్వాహిక
+X-GNOME-FullName[th]=F-Spot: โปรแกรมจัดการภาพถ่าย
+X-GNOME-FullName[uk]=Керування фотографіями у F-Spot
+X-GNOME-FullName[vi]=Bộ Quản Lý Ảnh Chụp F-Spot
+X-GNOME-FullName[zh_CN]=F-Spot 照片管理器
+X-GNOME-FullName[zh_HK]=F-Spot 相片管理員
+X-GNOME-FullName[zh_TW]=F-Spot 相片管理員
+Comment=Organize, enjoy, and share your photos
+Comment[ar]=نظم, تمتع, وقم بمشاركة الصور
+Comment[as]=আপোনাৰ ফটোবোৰ সজাওক, ভাগ বতৰা কৰক আৰু উপভোগ কৰক
+Comment[be at latin]=Kiruj svaimi zdymkami i dzialisia imi
+Comment[bg]=Организирайте, наслаждавайте се и споделете снимките си
+Comment[bn_IN]=আপনার ফটোর সংকলন সুবিন্যস্ত, উপভোগ ও বিনিময় করুন
+Comment[ca]=Organitzeu, visualitzeu i compartiu fotografies
+Comment[cs]=Organizuje, prohlíží a sdílí vaše fotografie
+Comment[da]=Organisér, nyd og del dine fotos
+Comment[de]=Fotos anschauen, sortieren und weitergeben
+Comment[dz]=ཁྱོད་ཀྱི་དཔར་ཚུ་ འགོ་འདྲེན་འཐབ་ སྤྲོ་བ་སྟོན་ དེ་ལས་ རུབ་སྤྱོད་འབད་
+Comment[el]=Οργανώστε, απολαύστε και μοιραστείτε τις φωτογραφίες σας με το F-Spot
+Comment[en_CA]=Organize, enjoy, and share your photos
+Comment[en_GB]=Organise, enjoy, and share your photos
+Comment[es]=Organice, diviértase y comparta sus fotografías
+Comment[et]=Naudi fotoalbumi korrastamist ning fotode jagamist
+Comment[eu]=Antolatu, ikusi eta partekatu zure argazkiak
+Comment[fa]=عکسهای خود را سازماندهی کنید، از آنها لذت ببرید، و با دیگران قسمت کنید
+Comment[fi]=Järjestele ja jaa valokuviasi
+Comment[fr]=Organisez, partagez et profitez de vos photos
+Comment[gl]=Organice, comparta e divírtase coas súas fotos
+Comment[gu]=તમારા ફોટોને સંચાલિત, આનંદ માણો, અને વહેંચો
+Comment[he]=ארגן, תהנה ושתף את התמונות שלך.
+Comment[hi]=संगठित करें, आनंद लें, और अपने फोटो को साझा करें
+Comment[hu]=Fényképek rendszerezése, megjelenítése és megosztása
+Comment[id]=Atur, nikmati, dan berbagi foto Anda
+Comment[it]=Organizza, mostra e condivide le proprie fotografie
+Comment[ja]=写真を整理し、楽しみ、共有します
+Comment[ka]=ორგანიზირება, დათვალიერება და გაზიარება
+Comment[kn]=ನಿಮ್ಮ ಫೋಟೊಗಳನ್ನು ವ್ಯವಸ್ಥಿತವಾಗಿ ಜೋಡಿಸಿ, ಆನಂದಿಸಿ ಹಾಗು ಇತರರೊಂದಿಗೆ ಹಂಚಿಕೊಳ್ಳಿ
+Comment[ko]=여러분의 사진을 관리하고 공유하세요
+Comment[lt]=Rūšiuokite, mėgaukitės ir dalinkitės savo fotografijomis
+Comment[lv]=Sarīkojoiet, baudiet un dalaties ar savām bildem
+Comment[mk]=Организирајте ги, споделете ги и уживајте во Вашите слики
+Comment[mr]=तुमचे फोटो आयोजीत करा, मजा लूटा व सहभागीय करा
+Comment[nb]=Organiser, verdsett og del bildene dine
+Comment[nl]=Beheer, deel en geniet van uw foto's
+Comment[or]=ଆପଣଙ୍କ ଫୋଟୋଗୁଡ଼ିକୁ ସୁସଂଗଠନ କରନ୍ତୁ, ଉପଭୋଗ କରନ୍ତୁ, ଏବଂ ସହଭାଗ କରନ୍ତୁ
+Comment[pa]=ਆਪਣੀਆਂ ਫੋਟੋ ਵੇਖੋ, ਸਾਂਝੀਆਂ ਕਰੋ
+Comment[pl]=Organizowanie i dzielenie się zdjęciami
+Comment[pt]=Organize, divirta-se e partilhe as suas fotos
+Comment[pt_BR]=Organize, compartilhe e divirta-se com suas fotos
+Comment[ro]=Organizați, priviți și partajați fotografii
+Comment[ru]=Организация, просмотр и передача фотографий
+Comment[sk]=Organizovať, mať potešenie a zdielať vaše fotky
+Comment[sl]=Urejajte, uživajte in delite vaše fotografije.
+Comment[sr]=Организујте, уживајте и поделите ваше фотографије
+Comment[sr at latin]=Organizujte, uživajte i podelite vaše fotografije
+Comment[sv]=Organisera, njut av, och dela med dig av dina foton
+Comment[ta]=உங்கள் நிழற்படங்களை ஒழுங்குபடுத்தி, பகிர்ந்து, மகிழவும்
+Comment[te]=నిర్వహించు, ఆనందించు, మరియు మీ ఛాయాచిత్రములను పంచుకొనుము
+Comment[uk]=Організація, перегляд та передача фотографій
+Comment[vi]=Tổ chức, thích thú và chia ra các ảnh chụp của bạn
+Comment[zh_CN]=组织、欣赏及共享您的照片
+Comment[zh_HK]=組織、享受、並分享你的相片
+Comment[zh_TW]=組織、享受、並分享您的相片
+Exec=f-spot
+Icon=f-spot
+StartupNotify=true
+Terminal=false
+Type=Application
+Categories=Graphics;Photography;GNOME;GTK;
+X-GNOME-Bugzilla-Bugzilla=GNOME
+X-GNOME-Bugzilla-Product=f-spot
+X-GNOME-Bugzilla-Component=General
+X-GNOME-Bugzilla-Version=0.7.0
+X-GNOME-DocPath=f-spot/f-spot.xml
diff --git a/data/desktop-files/f-spot.desktop.in b/data/desktop-files/f-spot.desktop.in
new file mode 100644
index 0000000..2def51a
--- /dev/null
+++ b/data/desktop-files/f-spot.desktop.in
@@ -0,0 +1,17 @@
+[Desktop Entry]
+Version=1.0
+_Name=F-Spot
+_GenericName=Photo Manager
+_X-GNOME-FullName=F-Spot Photo Manager
+_Comment=Organize, enjoy, and share your photos
+Exec=f-spot
+Icon=f-spot
+StartupNotify=true
+Terminal=false
+Type=Application
+Categories=Graphics;Photography;GNOME;GTK;
+X-GNOME-Bugzilla-Bugzilla=GNOME
+X-GNOME-Bugzilla-Product=f-spot
+X-GNOME-Bugzilla-Component=General
+X-GNOME-Bugzilla-Version=0.7.0
+X-GNOME-DocPath=f-spot/f-spot.xml
diff --git a/f-spot.desktop.in.in b/data/desktop-files/f-spot.desktop.in.in
similarity index 100%
rename from f-spot.desktop.in.in
rename to data/desktop-files/f-spot.desktop.in.in
diff --git a/docs/C/f-spot.xml b/docs/C/f-spot.xml
deleted file mode 100644
index c1713bd..0000000
--- a/docs/C/f-spot.xml
+++ /dev/null
@@ -1,1467 +0,0 @@
-<?xml version="1.0"?>
-<!DOCTYPE book PUBLIC "-//OASIS//DTD DocBook XML 4.1.2//EN" "http://www.oasis-open.org/docbook/xml/4.1.2/docbookx.dtd">
-<book id="f-spot" lang="C">
- <bookinfo>
- <title>The F-Spot Manual</title>
- <abstract role="description">
- <para>This is the user manual for F-Spot, a GNOME personal photo manager.</para>
- </abstract>
- <subtitle>This is the user manual for F-Spot, a GNOME personal photo manager.</subtitle>
- <copyright>
- <year>2007-2009</year>
- <holder>Aaron Bockover, Gabriel Burt, Miguel de Icaza, Bengt Thuree</holder>
- </copyright>
- <publisher>
- <publishername>GNOME Documentation Project</publishername>
- </publisher>
- <authorgroup>
- <author>
- <firstname>Miguel</firstname>
- <surname>de Icaza</surname>
- </author>
- <author>
- <firstname>Aaron</firstname>
- <surname>Bockover</surname>
- </author>
- <author>
- <firstname>Bengt</firstname>
- <surname>Thuree</surname>
- </author>
- <author>
- <firstname>Gabriel</firstname>
- <surname>Burt</surname>
- </author>
- <author>
- <firstname>Alexandre</firstname>
- <surname>Prokoudine</surname>
- </author>
- <author role="maintainer">
- <firstname>Stephane</firstname>
- <surname>Delcroix</surname>
- </author>
- </authorgroup>
- <!--<include href="legal.xml" xmlns="http://www.w3.org/2001/XInclude"/>-->
- <revhistory>
- <revision>
- <revnumber>0.5</revnumber>
- <date>2008-09-25</date>
- </revision>
- <revision>
- <revnumber>0.4</revnumber>
- <date>2008-09-12</date>
- </revision>
- <revision>
- <revnumber>0.3</revnumber>
- <date>2007-07-26</date>
- </revision>
- </revhistory>
- </bookinfo>
-
- <chapter id="organizing">
- <title>Organizing your photos</title>
-
- <sect1 id="import">
- <title>Import</title>
-
- <para>
- You can import photos from your hard drive or your camera. When you
- import your photos into F-Spot from your camera, it will always make a
- copy of them, leaving you free to clear your camera's memory. By default,
- F-Spot will make a copy of photos imported from your hard drive. Uncheck
- the <guilabel>Copy</guilabel> option on the import dialog or hold
- <keycap>Shift</keycap> when dragging photos into F-Spot if you do not
- wish to copy them from your hard drive.
- </para>
-
- <para>
- By default, F-Spot copies your photos to the
- <filename class='directory'>~/Photos</filename> folder. You can change
- the folder F-Spot uses in <guilabel>Preferences</guilabel> dialog
- (<menuchoice><guimenu>Edit</guimenu><guimenuitem>Preferences</guimenuitem>
- </menuchoice>). You can also disable physical copying of images to that
- directory and make F-Spot only reference to existing files. For that you
- need to disable checkbox <guilabel>Copy files to the Photos folder</guilabel>.
- </para>
- <para>
- If there is a tiny chance that some of your photos are already imported
- from the chosen source, you can use <guilabel>Detect duplicates</guilabel>
- option. In this case F-Spot will try to find out if exactly this image is
- already present in the database and thus new copy of it should not be
- imported.
- </para>
- <para>
- If all the photos you are importing at one time are from a particular event,
- or have some other characteristic in common, you can create a tag for them
- so you can later find them with ease. To do this, follow the instructions from
- <xref linkend="tag"/> to create a new tag, then when you are importing
- them, check the button for <guilabel>Attach Tag</guilabel> and choose the
- tag you created.
- </para>
-
- <tip>
- <para>
- F-Spot uses a database stored at
- <filename>~/.config/f-spot/photos.db</filename>. Note, to access it, use
- the sqlite3 command. You can also manually specify path to a database by
- running F-Spot with <option>-b</option> option.
- </para>
- </tip>
-
- <para>
- After an import, F-Spot will display the pictures of the latest import
- roll only. Read <xref linkend="enjoying-search"/> to learn how to deal
- with import rolls.
- </para>
- <para>
- You can also import directly from Mozilla
- <ulink url="http://www.mozilla.com/en-US/firefox/">Firefox</ulink> and
- <ulink url="http://www.mozilla.com/en-US/thunderbird/">Thunderbird</ulink> using
- <ulink url="https://addons.mozilla.org/en-US/firefox/addon/7091">Firefox</ulink>
- and <ulink url="https://addons.mozilla.org/en-US/thunderbird/addon/7011">Thunderbird</ulink>
- F-Spot importer extensions written by
- <ulink url="http://personalpages.tds.net/~cdovel/">Pizzach</ulink>.
- </para>
- </sect1>
-
- <sect1 id="edit">
- <title>Edit</title>
-
- <para>
- If you double click or press enter on an image, you enter Edit mode, where
- you can remove red-eye, crop, and adjust brightness and colors.
- </para>
-
- <sect2 id="edit-versions">
- <title>Versions</title>
-
- <para>
- When you edit your photos, a new copy (called a version) is created,
- so your original is never altered. After your first edit to a photo, subsequent
- edits will modify the same version. If you want to create multiple versions
- of your photo, perhaps with different cropping or coloring, you can do so
- via the <menuchoice><guimenu>File</guimenu>
- <guimenuitem>Create new version</guimenuitem></menuchoice> option.
- </para>
- </sect2>
-
- <sect2 id="edit-crop">
- <title>Crop</title>
-
- <para>
- Cropping an image is a great way to improve the quality of a photograph by
- change how it is framed. You crop a photo by selecting the part of the photo
- you want to keep. If you want your photo to be the exact dimensions necessary
- for a certain print size, you can constrain the kind of selection F-Spot will allow
- you to draw by choosing the appropriate size from the constraint drop down.
- See the <xref linkend="edit-remove-red-eye"/> below for details on making
- a selection on your photo.
- </para>
- <figure>
- <title>Crop tool</title>
- <mediaobject>
- <imageobject>
- <imagedata fileref="figures/f-spot-crop.png"/>
- </imageobject>
- </mediaobject>
- </figure>
- <para>
- Once you have made your crop selection, you must click the crop button beneath
- the image to finalize the crop. If you are working with the original photo, cropping
- creates a new version your photo.
- </para>
- </sect2>
-
- <sect2 id="edit-straighten">
- <title>Straighten</title>
-
- <para>
- Straighten effect is a tool to level a photo, quite helpful for landscapes
- taken without a tripod, when (imaginary) line of horizon is not at 0°.
- This tool rotates an image by a specified angle and automagically crops the
- resulted image, so that you always see a perfect rectangle.
- </para>
- <figure>
- <title>Straighten tool</title>
- <mediaobject>
- <imageobject>
- <imagedata fileref="figures/f-spot-straighten.png"/>
- </imageobject>
- </mediaobject>
- </figure>
- </sect2>
-
- <sect2 id="edit-adjust-colors">
- <title>Adjust Colors</title>
-
- <para>
- To adjust the brightness, contrast, and colors of a photo, first click
- the <guibutton>Adjust the photo colors</guibutton> icon to open the
- adjustment dialog. Change then some settings and save them with
- <guibutton>OK</guibutton>.
- </para>
- <figure>
- <title>Adjust Colors tool</title>
- <mediaobject>
- <imageobject>
- <imagedata fileref="figures/f-spot-adjust-colors.png"/>
- </imageobject>
- </mediaobject>
- </figure>
- </sect2>
-
- <sect2 id="edit-auto-color">
- <title>AutoColor</title>
-
- <para>
- This effect automatically adjusts color levels to make a pretty balanced
- picture color-wise. It serves best for pictures taken with automatical
- white balance, when camera didn't manage to do the job well.
- </para>
- <figure>
- <title>AutoColor</title>
- <mediaobject>
- <imageobject>
- <imagedata fileref="figures/f-spot-autocolor.png"/>
- </imageobject>
- </mediaobject>
- </figure>
- </sect2>
-
- <sect2 id="edit-desaturate">
- <title>Desaturate</title>
-
- <para>
- To make a colorful photo a black and white one, open a photo of choice
- and press <guibutton>Desaturate</guibutton> button.
- </para>
- <figure>
- <title>Desaturation tool</title>
- <mediaobject>
- <imageobject>
- <imagedata fileref="figures/f-spot-desaturate.png"/>
- </imageobject>
- </mediaobject>
- </figure>
- </sect2>
-
- <sect2 id="edit-sepia">
- <title>Sepia</title>
-
- <para>
- To make a colorful photo look like an old-style picture in sepia tones,
- open a photo of choice and press <guibutton>Sepia</guibutton> button.
- </para>
- <figure>
- <title>Desaturation tool</title>
- <mediaobject>
- <imageobject>
- <imagedata fileref="figures/f-spot-sepia.png"/>
- </imageobject>
- </mediaobject>
- </figure>
- </sect2>
-
- <sect2 id="edit-remove-red-eye">
- <title>Remove Red-Eye</title>
-
- <para>
- To remove redeye from a photo, you need to select a zone containing
- the eyes. You may want to zoom in on the image to accurately select
- the eyes in the photo. You should be able to correct both eyes on the
- same person in one shot, or even the eyes from multiple people at once.
- If this doesn't work for you, or the selected zone contains some vivid
- red parts (lips, ...) you'll probably have to correct one red eye at a time.
- </para>
- <para>
- To make your selection, click one corner of the rectangle that will be your
- selection, and drag your mouse to the diagonal corner and release it. You
- can resize your selection by dragging its edges, and you can move it by
- clicking in the middle of it and dragging it to where you want it.
- </para>
- <para>
- Once you have selected a zone, you can remove the red from it by
- clicking the red-eye button beneath the photo.
- </para>
- <figure>
- <title>Red-Eye tool</title>
- <mediaobject>
- <imageobject>
- <imagedata fileref="figures/f-spot-red-eye.png"/>
- </imageobject>
- </mediaobject>
- </figure>
- <tip>
- <para>
- You can change the threshold for redeyes detection by changing
- the gconf key
- <filename class='directory'>/apps/f-spot/edit/redeye_threshold</filename>.
- </para>
- </tip>
- </sect2>
-
- <sect2 id="edit-soft-focus">
- <title>Soft Focus</title>
-
- <para>
- In photography sharpening one region of a picture, while blurring
- all the rest, is a way to make an emphasis and grab attention.
- It is achieved by using a lens that allows shooting with a short
- distance in front of and beyond the subject that appears to be in
- focus. Soft focus effect is a way to emulate such a lens.
- </para>
- <figure>
- <title>Soft Focus tool</title>
- <mediaobject>
- <imageobject>
- <imagedata fileref="figures/f-spot-soft-focus.png"/>
- </imageobject>
- </mediaobject>
- </figure>
- <para>
- Click to choose central point of the area you want to be in focus
- and adjust amount of blurring, then click <guibutton>OK</guibutton>.
- </para>
- </sect2>
-
- <sect2 id="edit-sharpen">
- <title>Sharpen</title>
-
- <para>
- Out-of-focus photographs and most digitized images often need a
- sharpness correction. The Unsharp Mask effect sharpens edges of
- the elements without increasing noise or blemish. To sharpen a
- photo choose <menuchoice><guimenu>Edit</guimenu>
- <guimenuitem>Sharpen...</guimenuitem></menuchoice> and specify the
- following values:
- </para>
-
- <itemizedlist>
- <listitem>
- <para>
- <parameter class='option'>Amount</parameter> — strength of sharpening.
- </para>
- </listitem>
- <listitem>
- <para>
- <parameter class='option'>Radius</parameter> — how many pixels on either
- side of an edge will be affected by sharpening. High resolution images
- allow higher radius.
- </para>
- </listitem>
- <listitem>
- <para>
- <parameter class='option'>Threshold</parameter> — the minimum difference
- in pixel values that indicates an edge where sharpen must be applied.
- This helps avoiding creation of blemishes in face, sky or water surface.
- </para>
- </listitem>
- </itemizedlist>
- </sect2>
-
- <sect2 id="edit-describe">
- <title>Describe</title>
-
- <para>
- You can also enter a description of the image by clicking on the text entry box
- below the image and typing.
- </para>
- <para>
- Once you have made your crop selection, you must click the crop button beneath
- the image to finalize the crop. If you are working with the original photo, cropping
- creates a new version your photo.
- </para>
- </sect2>
-
- <sect2 id="edit-adjust-time">
- <title>Adjust Time</title>
-
- <para>
- In both 'browse' or 'edit' modes, you can adjust the time of one
- or multiple pictures (<menuchoice><guimenu>Edit</guimenu>
- <guimenuitem>Adjust Time</guimenuitem></menuchoice>). Adjusting
- the time of multiple pictures at once helps you shift all an import
- roll if, e.g. the time on your camera is badly set or if you forgot
- to change it according to DST.
- </para>
- </sect2>
- </sect1>
-
- <sect1 id="tag">
- <title>Tag</title>
- <para>
- F-Spot enables you to organize and enjoy your photos by associating them
- with various user-customizable tags. A tag is a merely a label. F-Spot comes
- with default tags to get you started; you are free to change them and
- add new ones. For example, if you want to create a tag for specific event, you
- can create a new tag named after that event under the Events tag.
- </para>
- <para>
- There are many ways to tag photos:
- </para>
- <itemizedlist>
- <listitem>
- <para>
- drag and drop the photo(s) onto the tag
- </para>
- </listitem>
- <listitem>
- <para>
- drag and drop the tag onto the photo(s)
- </para>
- </listitem>
- <listitem>
- <para>
- via the photo's right-click menu
- </para>
- </listitem>
- <listitem>
- <para>
- via the Tags and Edit menus
- </para>
- </listitem>
- <listitem>
- <para>
- by typing them in. Press <keycap>t</keycap> to pop up the tag
- entry bar. Here you can enter the tags, separated by commas.
- </para>
- <para>
- You can also use auto-completion in this entry bar: After
- entering the beginning of a tag name, press
- <keycap>Tab</keycap> to see the first possible completion. You can
- cycle between other possible completions by pressing
- <keycap>Tab</keycap> again, and backwards with
- <keycombo action="simul"><keycap>Shift</keycap><keycap>Tab</keycap></keycombo>.
- To confirm the suggested completion and enter a new tag, press
- <keycap>,</keycap>. By pressing <keycap>Enter</keycap> you
- leave the tag entry bar, possibly confirming the current
- completion. To abort the auto completion, just keep on typing.
- </para>
- </listitem>
- </itemizedlist>
- <para>
- The first photo you associate with a tag will be used for that tag's icon.
- You can always edit a tag's name, parent tag, and icon by right clicking
- on it and choosing <guilabel>Edit tag</guilabel>.
- </para>
- <para>
- You can change a tag's parent by dragging and dropping it where you like.
- Also, you can edit the name of a tag by selecting it and pressing
- <keycap>F2</keycap>. Lastly, if you have the tag tree widget focused
- (e.g. you just clicked on a tag), you can start typing the name of a tag, and
- all the expanded tags in the list will be searched and you'll jump to any
- matching ones.
- </para>
-
- <para>
- You can also change size of tag icons in the sidebar or even make tag
- icons invisible by selecting preferred option from <menuchoice>
- <guimenu>View</guimenu><guimenuitem>Tag Icons</guimenuitem></menuchoice>
- menu.
- </para>
-
- <tip>
- <para>
- F-Spot can write tags as metadata fields into JPEG files. Tags for
- various RAW files, PNG, TIFF, and others are written to F-Spot's
- database. You will have to re-tag these files if you re-import your
- collection.
- </para>
- </tip>
- </sect1>
- </chapter>
-
- <chapter id="enjoying">
- <title>Enjoying your photos</title>
- <sect1 id="enjoying-browse">
- <title>Browse</title>
- <para>
- You can use the slider widget to browse your photos by month or by
- directory. To change this setting, go to <menuchoice>
- <guimenu>View</guimenu><guimenuitem>Arranged By</guimenuitem>
- </menuchoice>.
- </para>
- </sect1>
- <sect1 id="enjoying-search">
- <title>Search</title>
-
- <para>
- F-Spot uses search filters to help you better define search criteria.
- </para>
-
- <sect2 id="enjoying-search-tags">
- <title>Tags</title>
-
- <para>
- You can start a search by double clicking or activating a tag from
- the tag list. Alternatively, you can show the find bar with <menuchoice>
- <guimenu>Find</guimenu><guimenuitem>Show Find Bar</guimenuitem></menuchoice>.
- With the find bar shown, you can drag tags from the tag view to the find bar.
- </para>
- <para>
- To find photos that are tagged with both of two tags, activate the first in
- the tag view or drag it onto the find bar, then drag the second tag and drop
- it on top of the first. You can also right click on the second tag in the tag
- view, or use the <guimenu>Find</guimenu> menu, and choose <guimenuitem>Find
- With...</guimenuitem> and select the first tag (or group of tags).
- </para>
- <para>
- You can drag a tag icon around on the find bar to change from finding it and
- another tag to finding it or another tag.
- </para>
- <para>
- You can search for photos that do not have a particular tag by double-clicking
- on a tag in the find bar. Alternatively, you can right-click a tag in the find
- bar and select <guimenuitem>Exclude</guimenuitem>.
- </para>
- <para>
- To remove a tag from the search, drag it away from the find bar, or right click
- and select <guimenuitem>Remove</guimenuitem>.
- </para>
- <para>
- By default, photos tagged <emphasis>Hidden</emphasis> will not be shown. You must
- explicitly include the <emphasis>Hidden</emphasis> tag in your search to show
- such photos.
- </para>
- </sect2>
-
- <sect2 id="enjoying-search-import-rolls">
- <title>Import Rolls</title>
- <para>
- F-Spot remembers what pictures were imported every now and then. Use
- <menuchoice><guimenu>Find</guimenu><guisubmenu>Import Roll</guisubmenu>
- <guimenuitem>Last import roll</guimenuitem></menuchoice> to limit search
- to last importing session or use <menuchoice><guimenu>Find</guimenu>
- <guisubmenu>Import Roll</guisubmenu><guimenuitem>Select Import Rolls...</guimenuitem>
- </menuchoice> to make a finer selection of imported photos:
- </para>
- <itemizedlist>
- <listitem>
- <para>
- <parameter class='option'>At</parameter> — to select photos from a particular importing session
- </para>
- </listitem>
- <listitem>
- <para>
- <parameter class='option'>After</parameter> — to select all photos imported begining with a particular importing session
- </para>
- </listitem>
- <listitem>
- <para>
- <parameter class='option'>Between</parameter> — to select all photos imported between two particular importing sessions
- </para>
- </listitem>
- </itemizedlist>
- <para>
- Every time you change settings of the filter, the amount of selected photos
- will appear in the bottom part of the dialog.
- </para>
- <para>
- When you apply Import Roll filter, in the Find bar you will see
- <guilabel>Find: Import Roll</guilabel>. Now you can add some other
- filter to finetune your selection.
- </para>
- <para>
- If you don't need the Import Roll filter anymore, choose <menuchoice>
- <guimenu>Find</guimenu><guisubmenu>Import Roll</guisubmenu>
- <guimenuitem>Clear roll filter</guimenuitem></menuchoice> to remove
- Import Roll from search criteria. You can also click the close button
- (<guibutton>X</guibutton>) of the search bar to discard all the current
- search options.
- </para>
- <tip>
- <para>
- The number of displayed rolls in the dialog is defined by the gconf key
- <filename class='directory'>/apps/f-spot/import/gui_roll_history</filename>.
- Default value is 10.
- </para>
- </tip>
- </sect2>
-
- <sect2 id="enjoying-search-type-to-find">
- <title>Type-to-find</title>
- <para>
- There is also a type-to-find entry. Press <keycap>/</keycap> to open it. It cannot
- be used at the same time as the find bar. You can type queries such as "TagA and
- (TagB or (TagC and TagD))". At any point, if F-Spot recognizes what you've typed as
- a valid query, it will update your search. The <emphasis>not</emphasis> operator
- is not yet supported.
- </para>
-
- <para>
- This function will also search for the typed text into photos comments and filename.
- </para>
- </sect2>
- </sect1>
-
- <sect1 id="enjoying-fullscreen-mode-and-slideshows">
- <title>Fullscreen Mode and Slideshows</title>
- <para>
- For fewer distractions and larger display, you can view your photos in full
- screen mode. You control when to show the next photo or to return to the
- previous. Enter fullscreen mode by pressing <keycap>F11</keycap> at
- any time or by pressing the button in the toolbar.
- </para>
- <figure>
- <title>FullScreen</title>
- <mediaobject>
- <imageobject>
- <imagedata fileref="figures/f-spot-fullscreen.png"/>
- </imageobject>
- </mediaobject>
- </figure>
- <para>
- In slideshow mode, you can sit back and view your photos as they are
- presented to you. You can start a slideshow by pressing the button on the
- toolbar.
- </para>
- <figure>
- <title>SlideShow</title>
- <mediaobject>
- <imageobject>
- <imagedata fileref="figures/f-spot-slideshow.png"/>
- </imageobject>
- </mediaobject>
- </figure>
- </sect1>
- </chapter>
-
- <chapter id="sharing">
- <title>Sharing your photos</title>
-
- <abstract>
- <para>
- There are many ways to share your photos using F-Spot. All of the following
- methods will only share the photos you have selected when you run them.
- </para>
- </abstract>
-
- <sect1 id="sharing-e-mail">
- <title>E-mail</title>
- <para>
- E-mail your photos directly from F-Spot with the <menuchoice>
- <guimenu>File</guimenu><guimenuitem>Send Mail</guimenuitem>
- </menuchoice> menu.
- </para>
- <note>
- <title>Note 1</title>
- <para>
- The email program used for this is defined at the GNOME level.
- You can change the default e-mailer for your user using the
- <application>Preferred Applications</application> tool in
- <menuchoice><guimenu>System</guimenu>
- <guisubmenu>Preferences</guisubmenu></menuchoice>.
- </para>
- </note>
- <note>
- <title>Note 2</title>
- <para>
- If some of the photos you'd like to send by email are in a format
- that F-Spot can't write (e.g. RAW images), the size selection dialog
- will become insensitive and the originals will be sent.
- </para>
- </note>
- <tip>
- <para>
- If you're sending resized pictures, F-Spot will keep the modified versions
- somewhere in the <filename class='directory'>/tmp</filename> directory for
- 30 seconds. It's not an issue with evolution, which makes it's own local
- copy of the attachments, but could be a bit shorter if you're using Thunderbird.
- You can change the delay by editing the gconf key
- <filename class='directory'>/apps/f-spot/export/email/delete_timeout_seconds</filename>.
- </para>
- </tip>
- </sect1>
-
- <sect1 id="sharing-print">
- <title>Print</title>
- <para>
- Print your photos with the <menuchoice><guimenu>File</guimenu>
- <guimenuitem>Print</guimenuitem></menuchoice> menu.
- </para>
- </sect1>
-
- <sect1 id="sharing-burn-to-cd">
- <title>Burn to CD</title>
- <para>
- Burn your photos to CD or DVD with the <menuchoice><guimenu>File</guimenu>
- <guisubmenu>Export</guisubmenu><guimenuitem>Export to CD</guimenuitem>
- </menuchoice> menu.
- </para>
- </sect1>
-
- <sect1 id="website-gallery-folder">
- <title>Generate a Website Gallery or Folder</title>
- <para>
- The
- <menuchoice><guimenu>File</guimenu><guimenuitem>Export</guimenuitem>
- <guimenuitem>Export to Folder</guimenuitem></menuchoice> feature
- gives you three ways to export your images.
- </para>
- <itemizedlist>
- <listitem>
- <para>
- <guilabel>Use Original</guilabel> exports your photos ready for use with
- Jakub Steiner's free <ulink url="http://jimmac.musichall.cz/original.php">
- Original Photo Gallery</ulink> software. If you are unsure about this option,
- it is probably not the right one for you.
- </para>
- </listitem>
- <listitem>
- <para>
- <guilabel>Use static HTML files</guilabel> exports your photos to an
- interactive website, ready for you to upload.
- </para>
- </listitem>
- <listitem>
- <para>
- <guilabel>Plain Files</guilabel> exports your images as files within directories,
- without putting them into a gallery.
- </para>
- </listitem>
- </itemizedlist>
- </sect1>
-
- <sect1 id="sharing-flickr-or-php-gallery">
- <title>Post to your online galleries</title>
- <para>
- If you use Flickr, SmugMug, 23hq, Tabblo, Facebook, Zooomr or Picasa Web Album, you can post your files
- directly from F-Spot with the <menuchoice><guimenu>File</guimenu>
- <guisubmenu>Export</guisubmenu></menuchoice> menu, choosing corresponding submenu item.
- </para>
- <para>
- If you use the PHP software known as <ulink url="http://gallery.sourceforge.net/">
- Gallery</ulink>, you can post your photos to your existing album with the
- <menuchoice><guimenu>File</guimenu><guimenuitem>Export</guimenuitem>
- <guimenuitem>Export to Web Gallery</guimenuitem></menuchoice> menu.
- You must first enable the Remote module within your Gallery installation.
- </para>
- <note>
- <title>Note for Gallery 2.2 users</title>
- <para>
- The Remote plugin for Gallery should be 1.0.8 or newer.
- </para>
- </note>
- <para>
- <ulink url="http://pennave.sourceforge.net">PennAve</ulink> is a Python
- web-application that directly uses F-Spot's database to present a dynamic
- gallery of your photos and tags.
- </para>
- <para>
- <ulink url="http://www.conduit-project.org">Conduit</ulink> is an application
- that can sync photos that have a particular tag with your Flickr or Picasa
- Web Album web storage.
- </para>
- </sect1>
- </chapter>
-
- <chapter id="cms">
- <title>Color management</title>
-
- <sect1 id="cms-what-is-cms">
- <title>What's color management</title>
-
- <para>
- When you capture a photo and look at it on a display, it looks different than
- on a camera's preview display or on any other display. It will also look
- different when you print it. This is because every device has unique color
- reproduction capabilities.
- </para>
-
- <para>
- Color management system (CMS) is a tool to achieve reliable color reproduction
- for both display and output (e.g. a printer). A CMS relies on color profiles
- to map original colors to the color that a device can reproduce so that colors
- will appear the same way everywhere — on a computer LCD monitor, on a print
- from your local photolab etc.
- </para>
- </sect1>
-
- <sect1 id="cms-what-is-icc-profile">
- <title>What's a color profile</title>
-
- <para>
- A color profile is a file with either .icc (thus its is often called an ICC
- profile) or .icm extension that describes how device's colors correspond to a
- universal description of colors.
- </para>
-
- <para>
- There are several types of profiles:
- </para>
-
- <itemizedlist>
- <listitem>
- <para>
- Input device profile. It's profile for a camera or a profile that an
- application like XSane embeds into a scanned image.
- </para>
- </listitem>
- <listitem>
- <para>
- Working space profile. It's a profile that describes color space in
- which all operations are done inside an application. Usually very wide
- gamut profiles like AdobeRGB1998 or ProPhotoRGB are used for that.
- </para>
- </listitem>
- <listitem>
- <para>
- Display profile. It's a profile for a monitor.
- </para>
- </listitem>
- <listitem>
- <para>
- Output profile. This is usually a profile for you printer.
- </para>
- </listitem>
- </itemizedlist>
-
- <para>
- Currently F-Spot allows setting only display and output profiles.
- All color operations are done in sRGB color space.
- </para>
- </sect1>
-
- <sect1 id="cms-how-to-get-icc-profile">
- <title>How to get my screen/printer color profile </title>
-
- <para>
- There are few ways to get a color profile.
- </para>
-
- <sect2 id="cms-icc-from-cd-or-internet">
- <title> From CD or Internet </title>
-
- <para>
- Many hardware manufacturers put color profiles into CD in the bundle.
- If you have one (from monitor or printer), you can use it. Or you can
- download it from the Internet (usually, from support section of the
- manufacturer's web site). Some camera manufacturers (Nikon, Canon)
- also provide ICC profiles.
- </para>
- </sect2>
-
- <sect2 id="cms-icc-from-calibrating-and-profiling">
- <title>Calibrating and profiling</title>
-
- <para>
- Best results can be achieved by calibrating and profiling devices with
- a measurement device. It is not so difficult, but it means that you need
- a spectrophotometer to do all measurements and create an ICC profile.
- </para>
-
- <para>
- If you are on Windows or Mac OS X, you can use manufacturer's software
- coming with a spectrophotometer. On Linux you will have to use either
- <ulink url="http://www.argyllcms.com">Argyll</ulink>, which is a set of
- versatile command line tools, or
- <ulink url="http://lprof.sourceforge.net/">LProf</ulink>, which has a
- graphical user interface.
- </para>
- <para>
- Please refer to documentation of third party hardware and software
- vendors for details.
- </para>
- </sect2>
-
- <sect2 id="cms-icc-from-embedding">
- <title>Embedding</title>
-
- <para>
- Image formats themselves (such as TIFF, JPEG, PNG...) may contain embedded
- color profiles. If color management is enabled, F-Spot looks for such
- embedded profiles and takes them into consideration.
- </para>
- </sect2>
- </sect1>
-
- <sect1 id="cms-how-to-use">
- <title>How to use color management in F-Spot</title>
-
- <para>
- Color management in F-Spot can use only RGB profiles at this time
- (and you can't see other profiles in the F-Spot).
- </para>
-
- <itemizedlist>
- <listitem>
- <para>
- Copy your color profiles into the
- <filename class='directory'>/usr/share/color/icc</filename> or
- <filename class='directory'>/usr/local/share/color/icc</filename>
- directory.
- </para>
- </listitem>
- <listitem>
- <para>
- Enable the color management with the <menuchoice>
- <guimenu>Edit</guimenu><guimenuitem>Preferences</guimenuitem>
- </menuchoice> menu.
- </para>
- </listitem>
- <listitem>
- <para>
- Select <guilabel>Display</guilabel> and <guilabel>Output</guilabel>
- profiles.
- </para>
- </listitem>
- </itemizedlist>
-
- <tip>
- <para>
- You can use <ulink url="http://burtonini.com/blog/computers/xicc">xicc</ulink>
- to load ICC profile to display and use the loaded profile from F-Spot.
- Just mark the checkbox <guilabel>Try to use the system display
- profile</guilabel>.
- </para>
- </tip>
- </sect1>
- </chapter>
-
- <chapter id="extend">
- <title>Extend functionality</title>
-
- <sect1 id="extend-what-extensions-are">
- <title>What extensions are</title>
-
- <para>
- F-Spot extensions are means to add new functionality to the application.
- F-Spot supports two types of extension: exporters (which allow exporting
- photos to new web services or data storages) and tools (which allow new
- ways of color correction, duplicate photos finders etc.). Extensions are
- distributed in form of extension packages.
- </para>
- <para>
- In the best traditions of not reinventing the wheel extensions can use other
- extensions, which means that one extension cannot work, if another extension
- is not installed. This concept of dependance actually means that
- </para>
- <itemizedlist>
- <listitem>
- <para>
- you cannot install an extension, if the extension it depends on, is not present in the system
- </para>
- </listitem>
- <listitem>
- <para>
- you cannot remove an extension on which some other extension depends
- </para>
- </listitem>
- </itemizedlist>
- </sect1>
-
- <sect1 id="extend-managing-extensions">
- <title>Managing extensions</title>
-
- <para>
- To manage extensions choose <menuchoice><guimenu>Edit</guimenu>
- <guimenuitem>Manage Extensions</guimenuitem></menuchoice> menu item.
- </para>
-
- <sect2 id="extend-managing-extensions-managing-extension-repositories">
- <title>Managing extension repositories</title>
-
- <para>
- Simply put, repositories are extension storages. They can be either network
- or local. To add a new repository click Repositories button, choose type of
- the repository you are about to add and provide either URL or path. If the URL
- or path you specified doesn't contain a description (index) file for extensions,
- a warning message will pop up to tell you that.
- </para>
- <para>
- To remove a repository click <guibutton>Repositories</guibutton> button again,
- choose the repository you are about to delete and click
- <guibutton>Delete</guibutton> button.
- </para>
- </sect2>
-
- <sect2 id="extend-managing-extensions-installing-and-updating-extensions">
- <title>Installing and updating extensions</title>
-
- <para>
- To install an extension click <guibutton>Install extensions...</guibutton> button.
- In the newly presented dialog
- </para>
- <orderedlist>
- <listitem>
- <para>
- Choose repository to install from all known repositories or just one of
- available repositories.
- </para>
- </listitem>
- <listitem>
- <para>
- Choose, what extension packages you want to see: All, Only new, Only updates.
- </para>
- </listitem>
- <listitem>
- <para>
- Click the <guibutton>Update</guibutton> button to update list of available
- extension packages by given criteria.
- </para>
- </listitem>
- <listitem>
- <para>
- Choose extensions you want to install/update, click <guibutton>Information</guibutton>
- to see summary on selected package, if you want to.
- </para>
- </listitem>
- <listitem>
- <para>
- Click <guibutton>Forward</guibutton> to proceed with installation.
- </para>
- </listitem>
- </orderedlist>
- </sect2>
-
- <sect2 id="extend-managing-extensions-enabling-and-disabling-extensions">
- <title>Enabling and disabling extensions</title>
-
- <para>
- You might want to temporarily enable or disable a particular extension package,
- for example, if the extension is not stable enough to handle a large amount of
- photos or if menus get crowded with extensions.
- </para>
- <para>
- In the <guilabel>Manage Extensions</guilabel> dialog select the extension
- package and click <guibutton>Enable</guibutton> or <guibutton>Disable</guibutton>.
- </para>
- </sect2>
-
- <sect2 id="extend-managing-extensions-removing-extensions">
- <title>Removing extensions</title>
-
- <para>
- If you don't need an extension you can remove it from the system completely.
- In the <guilabel>Manage Extensions</guilabel> dialog select the extension
- package you want to remove and click <guibutton>Delete</guibutton>.
- </para>
- </sect2>
-
- <sect2 id="extend-managing-extensions-reading-summary-of-extensions">
- <title>Reading summary of extensions</title>
-
- <para>
- Every extension package contains metadata that provides the following information about the extension:
- </para>
-
- <orderedlist>
- <listitem>
- <para>
- Description, which usually covers puprose of the extension
- </para>
- </listitem>
- <listitem>
- <para>
- Version
- </para>
- </listitem>
- <listitem>
- <para>
- Author
- </para>
- </listitem>
- <listitem>
- <para>
- Dependencies
- </para>
- </listitem>
- </orderedlist>
-
- <para>
- In the <guilabel>Manage Extensions</guilabel> dialog select the extension
- package you want to read summary of and click <guibutton>Information</guibutton>.
- </para>
- </sect2>
- </sect1>
-
- <sect1 id="extend-developing-extensions">
- <title>Developing extensions</title>
-
- <para>
- <ulink url="http://f-spot.org/Extend_F-Spot">Extend F-Spot</ulink> document
- gives instructions on developing your own extensions for F-Spot.
- </para>
- </sect1>
- </chapter>
-
- <chapter id="shortcuts">
- <title>Shortcuts</title>
-
- <sect1 id="Global-Shortcuts">
- <title>Global Shortcuts</title>
- <informaltable frame="all">
- <tgroup cols="2">
- <thead>
- <row>
- <entry>
- Key
- </entry>
- <entry>
- Action
- </entry>
- </row>
- </thead>
- <tbody>
- <row>
- <entry>
- <keycap>[</keycap>
- </entry>
- <entry>
- Rotate the selected photos to the left
- </entry>
- </row>
- <row>
- <entry>
- <keycap>]</keycap>
- </entry>
- <entry>
- Rotate the selected photos to the right
- </entry>
- </row>
- <row>
- <entry>
- <keycap>Del</keycap>
- </entry>
- <entry>
- Remove selected photos from F-Spot's catalogue
- </entry>
- </row>
- <row>
- <entry>
- <keycombo><keycap>Shift</keycap><keycap>Del</keycap></keycombo>
- </entry>
- <entry>
- Delete selected photos permanently from the drive. If possible, they will moved to trash.
- </entry>
- </row>
-
- <row>
- <entry>
- <keycap>t</keycap>
- </entry>
- <entry>
- View or edit tags for selected photos
- </entry>
- </row>
- <row>
- <entry>
- <keycap>F11</keycap>
- </entry>
- <entry>
- Full screen view
- </entry>
- </row>
- <row>
- <entry>
- <keycombo><keycap>Ctrl</keycap><keycap>I</keycap></keycombo>
- </entry>
- <entry>
- Displays information about the photo
- </entry>
- </row>
- <row>
- <entry>
- <keycombo><keycap>Ctrl</keycap><keycap>Equals</keycap></keycombo>
- </entry>
- <entry>
- Zoom-in
- </entry>
- </row>
- <row>
- <entry>
- <keycombo><keycap>Ctrl</keycap><keycap>Minus</keycap></keycombo>
- </entry>
- <entry>
- Zoom-out
- </entry>
- </row>
- <row>
- <entry>
- <keycombo><keycap>Ctrl</keycap><keycap>N</keycap></keycombo>
- </entry>
- <entry>
- Import photos
- </entry>
- </row>
- <row>
- <entry>
- <keycombo><keycap>Alt</keycap><keycap>0-5</keycap></keycombo>
- </entry>
- <entry>
- Alt plus a number from 0 to 5 rate the selected picture(s)
- </entry>
- </row>
- </tbody>
- </tgroup>
- </informaltable>
- </sect1>
-
- <sect1 id="shortcuts-browse-mode">
- <title>Browse Mode Shortcuts</title>
- <informaltable frame="all">
- <tgroup cols="2">
- <thead>
- <row>
- <entry>
- Key
- </entry>
- <entry>
- Action
- </entry>
- </row>
- </thead>
- <tbody>
- <row>
- <entry>
- <keycombo><keycap>Ctrl</keycap><keycap>A</keycap></keycombo>
- </entry>
- <entry>
- Select all
- </entry>
- </row>
- <row>
- <entry>
- <keycombo><keycap>Ctrl</keycap><keycap>Shift</keycap>
- <keycap>A</keycap></keycombo>
- </entry>
- <entry>
- Unselect all
- </entry>
- </row>
- <row>
- <entry>
- Arrow keys or <keycap>H</keycap>, <keycap>J</keycap>,
- <keycap>K</keycap>, <keycap>L</keycap>
- </entry>
- <entry>
- Move focus
- </entry>
- </row>
- <row>
- <entry>
- <keycap>Ctrl</keycap>-Arrow key
- </entry>
- <entry>
- Move the focus without changing the selection
- </entry>
- </row>
- <row>
- <entry>
- <keycap>Spacebar</keycap>
- </entry>
- <entry>
- Select or unselect the focused photo
- </entry>
- </row>
- <row>
- <entry>
- <keycombo><keycap>Shift</keycap>
- <keycap>Arrow key</keycap></keycombo>
- </entry>
- <entry>
- Change the photo selection
- </entry>
- </row>
- <row>
- <entry>
- <keycombo><keycap>Ctrl</keycap><keycap>Shift</keycap>
- <keycap>Left arrow or Right arrow</keycap></keycombo>
- </entry>
- <entry>
- Add/Remove all photos in the row, in the direction pressed, to the selection
- </entry>
- </row>
- <row>
- <entry>
- <keycap>V</keycap>
- </entry>
- <entry>
- Pops up a larger preview of the picture pointed by the mouse
- </entry>
- </row>
- <row>
- <entry>
- <keycombo><keycap>Shift</keycap><keycap>V</keycap></keycombo>
- </entry>
- <entry>
- Pops up a larger preview and a color histogram of the picture pointed by the mouse
- </entry>
- </row>
- </tbody>
- </tgroup>
- </informaltable>
- </sect1>
-
- <sect1 id="shortcuts-tag">
- <title>Tag Shortcuts</title>
- <informaltable frame="all">
- <tgroup cols="2">
- <thead>
- <row>
- <entry>
- Key
- </entry>
- <entry>
- Action
- </entry>
- </row>
- </thead>
- <tbody>
- <row>
- <entry>
- <keycap>F2</keycap>
- </entry>
- <entry>
- Rename selected tag
- </entry>
- </row>
- <row>
- <entry>
- <keycombo><keycap>Ctrl</keycap><keycap>T</keycap></keycombo>
- </entry>
- <entry>
- Add tags to selected photos
- </entry>
- </row>
- <row>
- <entry>
- n/a
- </entry>
- <entry>
- Drag and drop tags to move them
- </entry>
- </row>
- <row>
- <entry>
- n/a
- </entry>
- <entry>
- Type a tag's name to jump to it (only works if tag is shown/expanded)
- </entry>
- </row>
- </tbody>
- </tgroup>
- </informaltable>
- </sect1>
-
- <sect1 id="shortcuts-edit-mode">
- <title>Edit Mode Shortcuts</title>
- <informaltable frame="all">
- <tgroup cols="2">
- <thead>
- <row>
- <entry>
- Key
- </entry>
- <entry>
- Action
- </entry>
- </row>
- </thead>
- <tbody>
- <row>
- <entry>
- <keycap>Page Up</keycap>, <keycap>Backspace</keycap>, <keycap>B</keycap>
- </entry>
- <entry>
- Go to Previous Photo
- </entry>
- </row>
- <row>
- <entry>
- <keycap>Page Down</keycap>, <keycap>Spacebar</keycap>, <keycap>N</keycap>
- </entry>
- <entry>
- Go to Next Photo
- </entry>
- </row>
- <row>
- <entry>
- Arrow keys or <keycap>H</keycap>, <keycap>J</keycap>,
- <keycap>K</keycap>, <keycap>L</keycap>
- </entry>
- <entry>
- Go to Previous/Next photo or move around a zoomed photo
- </entry>
- </row>
- <row>
- <entry>
- <keycap>R</keycap>
- </entry>
- <entry>
- Go to a random photo
- </entry>
- </row>
- <row>
- <entry>
- <keycap>f</keycap>
- </entry>
- <entry>
- Full screen view
- </entry>
- </row>
- <row>
- <entry>
- <keycap>0</keycap>
- </entry>
- <entry>
- Fit the image to the screen
- </entry>
- </row>
- <row>
- <entry>
- <keycap>1</keycap>
- </entry>
- <entry>
- Zoom Factor to 1.0 (1 screen pixel per image pixel)
- </entry>
- </row>
- <row>
- <entry>
- <keycap>2</keycap>
- </entry>
- <entry>
- Zoom Factor to 2.0 (4 screen pixels per image pixel)
- </entry>
- </row>
- <row>
- <entry>
- <keycap>Escape</keycap>
- </entry>
- <entry>
- Returns to Browser mode
- </entry>
- </row>
- <row>
- <entry>
- <keycap>V</keycap>
- </entry>
- <entry>
- Examine photo with magnifying glass (Loupe). Doubleclick on the
- Loupe, or type <keycap>v</keycap> again to close it.
- </entry>
- </row>
- <row>
- <entry>
- <keycap>Shift</keycap>-Mousewheel
- </entry>
- <entry>
- Faster filmstrip scrolling
- </entry>
- </row>
- <row>
- <entry>
- <keycap>i</keycap>
- </entry>
- <entry>
- Toggle infobox visibility ''(only when in full screen)''
- </entry>
- </row>
- </tbody>
- </tgroup>
- </informaltable>
- </sect1>
- </chapter>
-
-</book>
-
diff --git a/docs/Makefile.am b/docs/Makefile.am
index 496b41a..e69de29 100644
--- a/docs/Makefile.am
+++ b/docs/Makefile.am
@@ -1,19 +0,0 @@
-include $(top_srcdir)/gnome-doc-utils.make
-dist-hook: doc-dist-hook
-
-DOC_MODULE = f-spot
-DOC_ENTITIES =
-DOC_INCLUDES =
-DOC_FIGURES = \
- figures/f-spot-adjust-colors.png \
- figures/f-spot-autocolor.png \
- figures/f-spot-crop.png \
- figures/f-spot-desaturate.png \
- figures/f-spot-fullscreen.png \
- figures/f-spot-red-eye.png \
- figures/f-spot-sepia.png \
- figures/f-spot-slideshow.png \
- figures/f-spot-soft-focus.png \
- figures/f-spot-straighten.png
-
-DOC_LINGUAS = cs da de es fr it oc pt_BR ru sl sv uk
diff --git a/docs/Makefile.in b/docs/Makefile.in
index 8633fcd..764b895 100644
--- a/docs/Makefile.in
+++ b/docs/Makefile.in
@@ -14,30 +14,6 @@
# PARTICULAR PURPOSE.
@SET_MAKE@
-
-# gnome-doc-utils.make - make magic for building documentation
-# Copyright (C) 2004-2005 Shaun McCance <shaunm at gnome.org>
-#
-# This program is free software; you can redistribute it and/or modify
-# it under the terms of the GNU General Public License as published by
-# the Free Software Foundation; either version 2 of the License, or
-# (at your option) any later version.
-#
-# This program is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-# GNU General Public License for more details.
-#
-# You should have received a copy of the GNU General Public License
-# along with this program; if not, write to the Free Software Foundation,
-# Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
-#
-# As a special exception to the GNU General Public License, if you
-# distribute this file as part of a program that contains a
-# configuration script generated by Autoconf, you may include it under
-# the same distribution terms that you use for the rest of that program.
-
-################################################################################
VPATH = @srcdir@
pkgdatadir = $(datadir)/@PACKAGE@
pkgincludedir = $(includedir)/@PACKAGE@
@@ -57,14 +33,19 @@ PRE_UNINSTALL = :
POST_UNINSTALL = :
build_triplet = @build@
host_triplet = @host@
-DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in \
- $(top_srcdir)/gnome-doc-utils.make
subdir = docs
+DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in
ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
am__aclocal_m4_deps = $(top_srcdir)/build/m4/shave/shave.m4 \
$(top_srcdir)/build/m4/shamrock/expansions.m4 \
+ $(top_srcdir)/build/m4/shamrock/gnome-doc.m4 \
$(top_srcdir)/build/m4/shamrock/mono.m4 \
+ $(top_srcdir)/build/m4/shamrock/nunit.m4 \
$(top_srcdir)/build/m4/shamrock/programs.m4 \
+ $(top_srcdir)/build/m4/f-spot/flickrnet.m4 \
+ $(top_srcdir)/build/m4/f-spot/gnome-keyring-sharp.m4 \
+ $(top_srcdir)/build/m4/f-spot/gtk-sharp.m4 \
+ $(top_srcdir)/build/m4/f-spot/mono-addins.m4 \
$(top_srcdir)/acinclude.m4 $(top_srcdir)/configure.ac
am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
$(ACLOCAL_M4)
@@ -119,6 +100,8 @@ EXIF_SOVERSION = @EXIF_SOVERSION@
F77 = @F77@
FC = @FC@
FGREP = @FGREP@
+FLICKRNET_CFLAGS = @FLICKRNET_CFLAGS@
+FLICKRNET_LIBS = @FLICKRNET_LIBS@
F_CFLAGS = @F_CFLAGS@
F_LIBS = @F_LIBS@
GAPI2CODEGEN = @GAPI2CODEGEN@
@@ -132,6 +115,8 @@ GCONF_SHARP_LIBS = @GCONF_SHARP_LIBS@
GETTEXT_PACKAGE = @GETTEXT_PACKAGE@
GIO_CFLAGS = @GIO_CFLAGS@
GIO_LIBS = @GIO_LIBS@
+GLIBSHARP_2_12_7_CFLAGS = @GLIBSHARP_2_12_7_CFLAGS@
+GLIBSHARP_2_12_7_LIBS = @GLIBSHARP_2_12_7_LIBS@
GLIBSHARP_CFLAGS = @GLIBSHARP_CFLAGS@
GLIBSHARP_LIBS = @GLIBSHARP_LIBS@
GLIB_CFLAGS = @GLIB_CFLAGS@
@@ -147,6 +132,10 @@ GNOME_SHARP_CFLAGS = @GNOME_SHARP_CFLAGS@
GNOME_SHARP_LIBS = @GNOME_SHARP_LIBS@
GOBJECT_QUERY = @GOBJECT_QUERY@
GREP = @GREP@
+GTKSHARP_A11Y_CFLAGS = @GTKSHARP_A11Y_CFLAGS@
+GTKSHARP_A11Y_LIBS = @GTKSHARP_A11Y_LIBS@
+GTKSHARP_CFLAGS = @GTKSHARP_CFLAGS@
+GTKSHARP_LIBS = @GTKSHARP_LIBS@
HELP_DIR = @HELP_DIR@
ICONS_DIRECTORY = @ICONS_DIRECTORY@
INSTALL = @INSTALL@
@@ -160,14 +149,14 @@ INTLTOOL_EXTRACT = @INTLTOOL_EXTRACT@
INTLTOOL_MERGE = @INTLTOOL_MERGE@
INTLTOOL_PERL = @INTLTOOL_PERL@
INTLTOOL_UPDATE = @INTLTOOL_UPDATE@
+KEYRINGSHARP_CFLAGS = @KEYRINGSHARP_CFLAGS@
+KEYRINGSHARP_LIBS = @KEYRINGSHARP_LIBS@
LCMS_CFLAGS = @LCMS_CFLAGS@
LCMS_LIBS = @LCMS_LIBS@
LD = @LD@
LDFLAGS = @LDFLAGS@
LIBEXIF_VERSION_CHECK_CFLAGS = @LIBEXIF_VERSION_CHECK_CFLAGS@
LIBEXIF_VERSION_CHECK_LIBS = @LIBEXIF_VERSION_CHECK_LIBS@
-LIBGPHOTO2_CFLAGS = @LIBGPHOTO2_CFLAGS@
-LIBGPHOTO2_LIBS = @LIBGPHOTO2_LIBS@
LIBJPEG = @LIBJPEG@
LIBOBJS = @LIBOBJS@
LIBS = @LIBS@
@@ -182,6 +171,12 @@ MCS = @MCS@
MKDIR_P = @MKDIR_P@
MKINSTALLDIRS = @MKINSTALLDIRS@
MONO = @MONO@
+MONO_ADDINS_CFLAGS = @MONO_ADDINS_CFLAGS@
+MONO_ADDINS_GUI_CFLAGS = @MONO_ADDINS_GUI_CFLAGS@
+MONO_ADDINS_GUI_LIBS = @MONO_ADDINS_GUI_LIBS@
+MONO_ADDINS_LIBS = @MONO_ADDINS_LIBS@
+MONO_ADDINS_SETUP_CFLAGS = @MONO_ADDINS_SETUP_CFLAGS@
+MONO_ADDINS_SETUP_LIBS = @MONO_ADDINS_SETUP_LIBS@
MONO_MODULE_CFLAGS = @MONO_MODULE_CFLAGS@
MONO_MODULE_LIBS = @MONO_MODULE_LIBS@
MSGFMT = @MSGFMT@
@@ -192,7 +187,6 @@ NDESK_DBUS_LIBS = @NDESK_DBUS_LIBS@
NM = @NM@
NMEDIT = @NMEDIT@
NUNIT_CFLAGS = @NUNIT_CFLAGS@
-NUNIT_DEFINES = @NUNIT_DEFINES@
NUNIT_LIBS = @NUNIT_LIBS@
OBJC = @OBJC@
OBJDUMP = @OBJDUMP@
@@ -284,136 +278,10 @@ target_alias = @target_alias@
top_build_prefix = @top_build_prefix@
top_builddir = @top_builddir@
top_srcdir = @top_srcdir@
-_clean_doc_header = $(if $(DOC_H_FILE),clean-doc-header)
-_DOC_REAL_FORMATS = $(if $(DOC_USER_FORMATS),$(DOC_USER_FORMATS),$(DOC_FORMATS))
-_DOC_REAL_LINGUAS = $(if $(filter environment,$(origin LINGUAS)), \
- $(filter $(LINGUAS),$(DOC_LINGUAS)), \
- $(DOC_LINGUAS))
-
-_DOC_ABS_SRCDIR = @abs_srcdir@
-_xml2po_mode = $(if $(DOC_ID),mallard,docbook)
- at ENABLE_SK_TRUE@_ENABLE_SK = true
-
-################################################################################
-db2omf_args = \
- --stringparam db2omf.basename $(DOC_MODULE) \
- --stringparam db2omf.format $(3) \
- --stringparam db2omf.dtd \
- $(shell xmllint --format $(2) | grep -h PUBLIC | head -n 1 \
- | sed -e 's/.*PUBLIC \(\"[^\"]*\"\).*/\1/') \
- --stringparam db2omf.lang $(notdir $(patsubst %/$(notdir $(2)),%,$(2))) \
- --stringparam db2omf.omf_dir "$(OMF_DIR)" \
- --stringparam db2omf.help_dir "$(HELP_DIR)" \
- --stringparam db2omf.omf_in "$(_DOC_OMF_IN)" \
- $(if $(_ENABLE_SK), \
- --stringparam db2omf.scrollkeeper_cl "$(_skcontentslist)") \
- $(_db2omf) $(2)
-
-_DOC_OMF_IN = $(if $(DOC_MODULE),$(wildcard $(_DOC_ABS_SRCDIR)/$(DOC_MODULE).omf.in))
-_DOC_OMF_DB = $(if $(_DOC_OMF_IN), \
- $(foreach lc,C $(_DOC_REAL_LINGUAS),$(DOC_MODULE)-$(lc).omf))
-
-_DOC_OMF_HTML = $(if $(_DOC_OMF_IN), \
- $(foreach lc,C $(_DOC_REAL_LINGUAS),$(DOC_MODULE)-html-$(lc).omf))
-
-
-# FIXME
-_DOC_OMF_ALL = \
- $(if $(filter docbook,$(_DOC_REAL_FORMATS)),$(_DOC_OMF_DB)) \
- $(if $(filter html HTML,$(_DOC_REAL_FORMATS)),$(_DOC_OMF_HTML))
-
-
-################################################################################
-_DOC_C_MODULE = $(if $(DOC_MODULE),C/$(DOC_MODULE).xml)
-_DOC_C_PAGES = $(foreach page,$(DOC_PAGES),C/$(page))
-_DOC_C_ENTITIES = $(foreach ent,$(DOC_ENTITIES),C/$(ent))
-_DOC_C_INCLUDES = $(foreach inc,$(DOC_INCLUDES),C/$(inc))
-_DOC_C_DOCS = \
- $(_DOC_C_ENTITIES) $(_DOC_C_INCLUDES) \
- $(_DOC_C_PAGES) $(_DOC_C_MODULE)
-
-_DOC_C_DOCS_NOENT = \
- $(_DOC_C_MODULE) $(_DOC_C_INCLUDES) \
- $(_DOC_C_PAGES)
-
-_DOC_C_FIGURES = $(if $(DOC_FIGURES), \
- $(foreach fig,$(DOC_FIGURES),C/$(fig)), \
- $(patsubst $(srcdir)/%,%,$(wildcard $(srcdir)/C/figures/*.png)))
-
-
-# FIXME: probably have to shell escape to determine the file names
-_DOC_C_HTML = $(foreach f, \
- $(shell xsltproc --xinclude \
- --stringparam db.chunk.basename "$(DOC_MODULE)" \
- $(_chunks) "C/$(DOC_MODULE).xml"), \
- C/$(f).xhtml)
-
-
-###############################################################################
-_DOC_POFILES = $(if $(DOC_MODULE)$(DOC_ID), \
- $(foreach lc,$(_DOC_REAL_LINGUAS),$(lc)/$(lc).po))
-
-_DOC_MOFILES = $(patsubst %.po,%.mo,$(_DOC_POFILES))
-_DOC_LC_MODULES = $(if $(DOC_MODULE), \
- $(foreach lc,$(_DOC_REAL_LINGUAS),$(lc)/$(DOC_MODULE).xml))
-
-_DOC_LC_PAGES = \
- $(foreach lc,$(_DOC_REAL_LINGUAS),$(foreach page,$(_DOC_C_PAGES), \
- $(lc)/$(notdir $(page)) ))
-
-_DOC_LC_INCLUDES = \
- $(foreach lc,$(_DOC_REAL_LINGUAS),$(foreach inc,$(_DOC_C_INCLUDES), \
- $(lc)/$(notdir $(inc)) ))
-
-
-# FIXME: probably have to shell escape to determine the file names
-_DOC_LC_HTML = \
- $(foreach lc,$(_DOC_REAL_LINGUAS),$(foreach doc,$(_DOC_C_HTML), \
- $(lc)/$(notdir $(doc)) ))
-
-_DOC_LC_DOCS = \
- $(_DOC_LC_MODULES) $(_DOC_LC_INCLUDES) $(_DOC_LC_PAGES) \
- $(if $(filter html HTML,$(_DOC_REAL_FORMATS)),$(_DOC_LC_HTML))
-
-_DOC_LC_FIGURES = $(foreach lc,$(_DOC_REAL_LINGUAS), \
- $(patsubst C/%,$(lc)/%,$(_DOC_C_FIGURES)) )
-
-_DOC_SRC_FIGURES = \
- $(foreach fig,$(_DOC_C_FIGURES), $(foreach lc,C $(_DOC_REAL_LINGUAS), \
- $(wildcard $(srcdir)/$(lc)/$(patsubst C/%,%,$(fig))) ))
-
-_DOC_POT = $(if $(DOC_MODULE),$(DOC_MODULE).pot)
-
-################################################################################
-_DOC_HTML_ALL = $(if $(filter html HTML,$(_DOC_REAL_FORMATS)), \
- $(_DOC_C_HTML) $(_DOC_LC_HTML))
-
-_DOC_HTML_TOPS = $(foreach lc,C $(_DOC_REAL_LINGUAS),$(lc)/$(DOC_MODULE).xhtml)
-_clean_omf = $(if $(_DOC_OMF_IN),clean-doc-omf)
-_clean_dsk = $(if $(_DOC_DSK_IN),clean-doc-dsk)
-_clean_lc = $(if $(_DOC_REAL_LINGUAS),clean-doc-lc)
-_clean_dir = $(if $(DOC_MODULE)$(DOC_ID),clean-doc-dir)
-_doc_install_dir = $(if $(DOC_ID),$(DOC_ID),$(DOC_MODULE))
-DOC_MODULE = f-spot
-DOC_ENTITIES =
-DOC_INCLUDES =
-DOC_FIGURES = \
- figures/f-spot-adjust-colors.png \
- figures/f-spot-autocolor.png \
- figures/f-spot-crop.png \
- figures/f-spot-desaturate.png \
- figures/f-spot-fullscreen.png \
- figures/f-spot-red-eye.png \
- figures/f-spot-sepia.png \
- figures/f-spot-slideshow.png \
- figures/f-spot-soft-focus.png \
- figures/f-spot-straighten.png
-
-DOC_LINGUAS = cs da de es fr it oc pt_BR ru sl sv uk
all: all-am
.SUFFIXES:
-$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(top_srcdir)/gnome-doc-utils.make $(am__configure_deps)
+$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(am__configure_deps)
@for dep in $?; do \
case '$(am__configure_deps)' in \
*$$dep*) \
@@ -486,9 +354,6 @@ distdir: $(DISTFILES)
|| exit 1; \
fi; \
done
- $(MAKE) $(AM_MAKEFLAGS) \
- top_distdir="$(top_distdir)" distdir="$(distdir)" \
- dist-hook
check-am: all-am
check: check-am
all-am: Makefile
@@ -520,11 +385,11 @@ maintainer-clean-generic:
@echo "it deletes files that may require special tools to rebuild."
clean: clean-am
-clean-am: clean-generic clean-libtool clean-local mostlyclean-am
+clean-am: clean-generic clean-libtool mostlyclean-am
distclean: distclean-am
-rm -f Makefile
-distclean-am: clean-am distclean-generic distclean-local
+distclean-am: clean-am distclean-generic
dvi: dvi-am
@@ -538,7 +403,7 @@ info: info-am
info-am:
-install-data-am: install-data-local
+install-data-am:
install-dvi: install-dvi-am
@@ -568,13 +433,11 @@ installcheck-am:
maintainer-clean: maintainer-clean-am
-rm -f Makefile
-maintainer-clean-am: distclean-am maintainer-clean-generic \
- maintainer-clean-local
+maintainer-clean-am: distclean-am maintainer-clean-generic
mostlyclean: mostlyclean-am
-mostlyclean-am: mostlyclean-generic mostlyclean-libtool \
- mostlyclean-local
+mostlyclean-am: mostlyclean-generic mostlyclean-libtool
pdf: pdf-am
@@ -584,439 +447,21 @@ ps: ps-am
ps-am:
-uninstall-am: uninstall-local
+uninstall-am:
.MAKE: install-am install-strip
.PHONY: all all-am check check-am clean clean-generic clean-libtool \
- clean-local dist-hook distclean distclean-generic \
- distclean-libtool distclean-local distdir dvi dvi-am html \
- html-am info info-am install install-am install-data \
- install-data-am install-data-local install-dvi install-dvi-am \
+ distclean distclean-generic distclean-libtool distdir dvi \
+ dvi-am html html-am info info-am 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 maintainer-clean-local mostlyclean \
- mostlyclean-generic mostlyclean-libtool mostlyclean-local pdf \
- pdf-am ps ps-am uninstall uninstall-am uninstall-local
-
-
-DOC_H_FILE ?=
-
-DOC_H_DOCS ?=
-
-$(DOC_H_FILE): $(DOC_H_DOCS);
- @rm -f $@.tmp; touch $@.tmp;
- echo 'const gchar* documentation_credits[] = {' >> $@.tmp
- list='$(DOC_H_DOCS)'; for doc in $$list; do \
- xmlpath="`echo $$doc | sed -e 's/^\(.*\/\).*/\1/' -e '/\//!s/.*//'`:$(srcdir)/`echo $$doc | sed -e 's/^\(.*\/\).*/\1/' -e '/\//!s/.*//'`"; \
- if ! test -f "$$doc"; then doc="$(srcdir)/$$doc"; fi; \
- xsltproc --path "$$xmlpath" $(_credits) $$doc; \
- done | sort | uniq \
- | awk 'BEGIN{s=""}{n=split($$0,w,"<");if(s!=""&&s!=substr(w[1],1,length(w[1])-1)){print s};if(n>1){print $$0;s=""}else{s=$$0}};END{if(s!=""){print s}}' \
- | sed -e 's/\\/\\\\/' -e 's/"/\\"/' -e 's/\(.*\)/\t"\1",/' >> $@.tmp
- echo ' NULL' >> $@.tmp
- echo '};' >> $@.tmp
- echo >> $@.tmp
- list='$(DOC_H_DOCS)'; for doc in $$list; do \
- xmlpath="`echo $$doc | sed -e 's/^\(.*\/\).*/\1/' -e '/\//!s/.*//'`:$(srcdir)/`echo $$doc | sed -e 's/^\(.*\/\).*/\1/' -e '/\//!s/.*//'`"; \
- if ! test -f "$$doc"; then doc="$(srcdir)/$$doc"; fi; \
- docid=`echo "$$doc" | sed -e 's/.*\/\([^/]*\)\.xml/\1/' \
- | sed -e 's/[^a-zA-Z_]/_/g' | tr 'a-z' 'A-Z'`; \
- echo $$xmlpath; \
- ids=`xsltproc --xinclude --path "$$xmlpath" $(_ids) $$doc`; \
- for id in $$ids; do \
- echo '#define HELP_'`echo $$docid`'_'`echo $$id \
- | sed -e 's/[^a-zA-Z_]/_/g' | tr 'a-z' 'A-Z'`' "'$$id'"' >> $@.tmp; \
- done; \
- echo >> $@.tmp; \
- done;
- cp $@.tmp $@ && rm -f $@.tmp
-
-dist-check-gdu:
- at HAVE_GNOME_DOC_UTILS_FALSE@ @echo "*** GNOME Doc Utils must be installed in order to make dist"
- at HAVE_GNOME_DOC_UTILS_FALSE@ @false
-
-.PHONY: dist-doc-header
-dist-doc-header: $(DOC_H_FILE)
- @if test -f "$(DOC_H_FILE)"; then d=; else d="$(srcdir)/"; fi; \
- echo "$(INSTALL_DATA) $${d}$(DOC_H_FILE) $(distdir)/$(DOC_H_FILE)"; \
- $(INSTALL_DATA) "$${d}$(DOC_H_FILE)" "$(distdir)/$(DOC_H_FILE)";
-
-doc-dist-hook: dist-check-gdu $(if $(DOC_H_FILE),dist-doc-header)
-
-.PHONY: clean-doc-header
-clean-local: $(_clean_doc_header)
-distclean-local: $(_clean_doc_header)
-mostlyclean-local: $(_clean_doc_header)
-maintainer-clean-local: $(_clean_doc_header)
-clean-doc-header:
- rm -f $(DOC_H_FILE)
-
-all: $(DOC_H_FILE)
-
-################################################################################
-
-DOC_MODULE ?=
-
-DOC_ID ?=
-
-DOC_PAGES ?=
-
-DOC_ENTITIES ?=
-
-DOC_INCLUDES ?=
-
-DOC_FIGURES ?=
-
-DOC_FORMATS ?= docbook
-
-DOC_LINGUAS ?=
-
-################################################################################
-
-_xml2po ?= `which xml2po`
-
-_db2html ?= `$(PKG_CONFIG) --variable db2html gnome-doc-utils`
-_db2omf ?= `$(PKG_CONFIG) --variable db2omf gnome-doc-utils`
-_malrng ?= `$(PKG_CONFIG) --variable malrng gnome-doc-utils`
-_chunks ?= `$(PKG_CONFIG) --variable xmldir gnome-doc-utils`/gnome/xslt/docbook/utils/chunks.xsl
-_credits ?= `$(PKG_CONFIG) --variable xmldir gnome-doc-utils`/gnome/xslt/docbook/utils/credits.xsl
-_ids ?= `$(PKG_CONFIG) --variable xmldir gnome-doc-utils`/gnome/xslt/docbook/utils/ids.xsl
- at ENABLE_SK_TRUE@_skpkgdatadir ?= `scrollkeeper-config --pkgdatadir`
- at ENABLE_SK_TRUE@_sklocalstatedir ?= `scrollkeeper-config --pkglocalstatedir`
- at ENABLE_SK_TRUE@_skcontentslist ?= $(_skpkgdatadir)/Templates/C/scrollkeeper_cl.xml
-
-$(_DOC_OMF_DB) : $(_DOC_OMF_IN)
-$(_DOC_OMF_DB) : $(DOC_MODULE)-%.omf : %/$(DOC_MODULE).xml
- @test "x$(_ENABLE_SK)" != "xtrue" -o -f "$(_skcontentslist)" || { \
- echo "The file '$(_skcontentslist)' does not exist." >&2; \
- echo "Please check your ScrollKeeper installation." >&2; \
- exit 1; }
- xsltproc -o $@ $(call db2omf_args,$@,$<,'docbook') || { rm -f "$@"; exit 1; }
-
-$(_DOC_OMF_HTML) : $(_DOC_OMF_IN)
-$(_DOC_OMF_HTML) : $(DOC_MODULE)-html-%.omf : %/$(DOC_MODULE).xml
- at ENABLE_SK_TRUE@ @test "x$(_ENABLE_SK)" != "xtrue" -o -f "$(_skcontentslist)" || { \
- at ENABLE_SK_TRUE@ echo "The file '$(_skcontentslist)' does not exist" >&2; \
- at ENABLE_SK_TRUE@ echo "Please check your ScrollKeeper installation." >&2; \
- at ENABLE_SK_TRUE@ exit 1; }
- xsltproc -o $@ $(call db2omf_args,$@,$<,'xhtml') || { rm -f "$@"; exit 1; }
-
-.PHONY: omf
-omf: $(_DOC_OMF_ALL)
-
-.PHONY: po
-po: $(_DOC_POFILES)
-
-.PHONY: mo
-mo: $(_DOC_MOFILES)
-
-$(_DOC_POFILES):
- @if ! test -d $(dir $@); then \
- echo "mkdir $(dir $@)"; \
- mkdir "$(dir $@)"; \
- fi
- @if test ! -f $@ -a -f $(srcdir)/$@; then \
- echo "cp $(srcdir)/$@ $@"; \
- cp "$(srcdir)/$@" "$@"; \
- fi;
- @docs=; \
- list='$(_DOC_C_DOCS_NOENT)'; for doc in $$list; do \
- docs="$$docs $(_DOC_ABS_SRCDIR)/$$doc"; \
- done; \
- if ! test -f $@; then \
- echo "(cd $(dir $@) && \
- $(_xml2po) -m $(_xml2po_mode) -e $$docs > $(notdir $@).tmp && \
- cp $(notdir $@).tmp $(notdir $@) && rm -f $(notdir $@).tmp)"; \
- (cd $(dir $@) && \
- $(_xml2po) -m $(_xml2po_mode) -e $$docs > $(notdir $@).tmp && \
- cp $(notdir $@).tmp $(notdir $@) && rm -f $(notdir $@).tmp); \
- else \
- echo "(cd $(dir $@) && \
- $(_xml2po) -m $(_xml2po_mode) -e -u $(notdir $@) $$docs)"; \
- (cd $(dir $@) && \
- $(_xml2po) -m $(_xml2po_mode) -e -u $(notdir $@) $$docs); \
- fi
-
-$(_DOC_MOFILES): %.mo: %.po
- @if ! test -d $(dir $@); then \
- echo "mkdir $(dir $@)"; \
- mkdir "$(dir $@)"; \
- fi
- msgfmt -o $@ $<
-
-# FIXME: fix the dependancy
-# FIXME: hook xml2po up
-$(_DOC_LC_DOCS) : $(_DOC_MOFILES)
-$(_DOC_LC_DOCS) : $(_DOC_C_DOCS)
- if ! test -d $(dir $@); then mkdir $(dir $@); fi
- if [ -f "C/$(notdir $@)" ]; then d="../"; else d="$(_DOC_ABS_SRCDIR)/"; fi; \
- mo="$(dir $@)$(patsubst %/$(notdir $@),%,$@).mo"; \
- if [ -f "$${mo}" ]; then mo="../$${mo}"; else mo="$(_DOC_ABS_SRCDIR)/$${mo}"; fi; \
- (cd $(dir $@) && \
- $(_xml2po) -m $(_xml2po_mode) -e -t "$${mo}" \
- "$${d}C/$(notdir $@)" > $(notdir $@).tmp && \
- cp $(notdir $@).tmp $(notdir $@) && rm -f $(notdir $@).tmp)
-.PHONY: pot
-pot: $(_DOC_POT)
-$(_DOC_POT): $(_DOC_C_DOCS_NOENT)
- $(_xml2po) -m $(_xml2po_mode) -e -o $@ $^
-
-$(_DOC_HTML_TOPS): $(_DOC_C_DOCS) $(_DOC_LC_DOCS)
- xsltproc -o $@ --xinclude --param db.chunk.chunk_top "false()" --stringparam db.chunk.basename "$(DOC_MODULE)" --stringparam db.chunk.extension ".xhtml" $(_db2html) $(patsubst %.xhtml,%.xml,$@)
-
-################################################################################
-
-all: \
- $(_DOC_C_DOCS) $(_DOC_LC_DOCS) \
- $(_DOC_OMF_ALL) $(_DOC_DSK_ALL) \
- $(_DOC_HTML_ALL) $(_DOC_POFILES)
-
-################################################################################
-
-.PHONY: clean-doc-omf clean-doc-dsk clean-doc-lc clean-doc-dir
-
-clean-doc-omf: ; rm -f $(_DOC_OMF_DB) $(_DOC_OMF_HTML)
-clean-doc-dsk: ; rm -f $(_DOC_DSK_DB) $(_DOC_DSK_HTML)
-clean-doc-lc:
- rm -f $(_DOC_LC_DOCS)
- rm -f $(_DOC_MOFILES)
- @list='$(_DOC_POFILES)'; for po in $$list; do \
- if ! test "$$po" -ef "$(srcdir)/$$po"; then \
- echo "rm -f $$po"; \
- rm -f "$$po"; \
- fi; \
- done
-# .xml2.po.mo cleaning is obsolete as of 0.18.1 and could be removed in 0.20.x
- @for lc in C $(_DOC_REAL_LINGUAS); do \
- if test -f "$$lc/.xml2po.mo"; then \
- echo "rm -f $$lc/.xml2po.mo"; \
- rm -f "$$lc/.xml2po.mo"; \
- fi; \
- done
-clean-doc-dir: clean-doc-lc
- @for lc in C $(_DOC_REAL_LINGUAS); do \
- for dir in `find $$lc -depth -type d`; do \
- if ! test $$dir -ef $(srcdir)/$$dir; then \
- echo "rmdir $$dir"; \
- rmdir "$$dir"; \
- fi; \
- done; \
- done
-
-clean-local: \
- $(_clean_omf) $(_clean_dsk) \
- $(_clean_lc) $(_clean_dir)
-distclean-local: \
- $(_clean_omf) $(_clean_dsk) \
- $(_clean_lc) $(_clean_dir)
-mostlyclean-local: \
- $(_clean_omf) $(_clean_dsk) \
- $(_clean_lc) $(_clean_dir)
-maintainer-clean-local: \
- $(_clean_omf) $(_clean_dsk) \
- $(_clean_lc) $(_clean_dir)
-
-################################################################################
-
-.PHONY: dist-doc-docs dist-doc-pages dist-doc-figs dist-doc-omf dist-doc-dsk
-doc-dist-hook: \
- $(if $(DOC_MODULE)$(DOC_ID),dist-doc-docs) \
- $(if $(_DOC_C_FIGURES),dist-doc-figs) \
- $(if $(_DOC_OMF_IN),dist-doc-omf)
-# $(if $(_DOC_DSK_IN),dist-doc-dsk)
-
-dist-doc-docs: $(_DOC_C_DOCS) $(_DOC_LC_DOCS) $(_DOC_POFILES)
- @for lc in C $(_DOC_REAL_LINGUAS); do \
- echo " $(mkinstalldirs) $(distdir)/$$lc"; \
- $(mkinstalldirs) "$(distdir)/$$lc"; \
- done
- @list='$(_DOC_C_DOCS) $(_DOC_LC_DOCS) $(_DOC_POFILES)'; \
- for doc in $$list; do \
- if test -f "$$doc"; then d=; else d="$(srcdir)/"; fi; \
- docdir=`echo $$doc | sed -e 's/^\(.*\/\).*/\1/' -e '/\//!s/.*//'`; \
- if ! test -d "$(distdir)/$$docdir"; then \
- echo "$(mkinstalldirs) $(distdir)/$$docdir"; \
- $(mkinstalldirs) "$(distdir)/$$docdir"; \
- fi; \
- echo "$(INSTALL_DATA) $$d$$doc $(distdir)/$$doc"; \
- $(INSTALL_DATA) "$$d$$doc" "$(distdir)/$$doc"; \
- done
-
-dist-doc-figs: $(_DOC_SRC_FIGURES)
- @list='$(_DOC_C_FIGURES) $(_DOC_LC_FIGURES)'; \
- for fig in $$list; do \
- if test -f "$$fig"; then d=; else d="$(srcdir)/"; fi; \
- if test -f "$$d$$fig"; then \
- figdir=`echo $$fig | sed -e 's/^\(.*\/\).*/\1/' -e '/\//!s/.*//'`; \
- if ! test -d "$(distdir)/$$figdir"; then \
- echo "$(mkinstalldirs) $(distdir)/$$figdir"; \
- $(mkinstalldirs) "$(distdir)/$$figdir"; \
- fi; \
- echo "$(INSTALL_DATA) $$d$$fig $(distdir)/$$fig"; \
- $(INSTALL_DATA) "$$d$$fig" "$(distdir)/$$fig"; \
- fi; \
- done;
-
-dist-doc-omf:
- @if test -f "$(_DOC_OMF_IN)"; then d=; else d="$(srcdir)/"; fi; \
- echo "$(INSTALL_DATA) $$d$(_DOC_OMF_IN) $(distdir)/$(notdir $(_DOC_OMF_IN))"; \
- $(INSTALL_DATA) "$$d$(_DOC_OMF_IN)" "$(distdir)/$(notdir $(_DOC_OMF_IN))"
-
-dist-doc-dsk:
- @if test -f "$(_DOC_DSK_IN)"; then d=; else d="$(srcdir)/"; fi; \
- echo "$(INSTALL_DATA) $$d$(_DOC_DSK_IN) $(distdir)/$(notdir $(_DOC_DSK_IN))"; \
- $(INSTALL_DATA) "$$d$(_DOC_DSK_IN)" "$(distdir)/$(notdir $(_DOC_DSK_IN))"
-
-################################################################################
-
-.PHONY: check-doc-docs check-doc-omf
-check: \
- $(if $(DOC_MODULE),check-doc-docs) \
- $(if $(DOC_ID),check-doc-pages) \
- $(if $(_DOC_OMF_IN),check-doc-omf)
-
-check-doc-docs: $(_DOC_C_DOCS) $(_DOC_LC_DOCS)
- @for lc in C $(_DOC_REAL_LINGUAS); do \
- if test -f "$$lc"; \
- then d=; \
- xmlpath="$$lc"; \
- else \
- d="$(srcdir)/"; \
- xmlpath="$$lc:$(srcdir)/$$lc"; \
- fi; \
- echo "xmllint --noout --noent --path $$xmlpath --xinclude --postvalid $$d$$lc/$(DOC_MODULE).xml"; \
- xmllint --noout --noent --path "$$xmlpath" --xinclude --postvalid "$$d$$lc/$(DOC_MODULE).xml"; \
- done
-
-check-doc-pages: $(_DOC_C_PAGES) $(_DOC_LC_PAGES)
- for lc in C $(_DOC_REAL_LINGUAS); do \
- if test -f "$$lc"; \
- then d=; \
- xmlpath="$$lc"; \
- else \
- d="$(srcdir)/"; \
- xmlpath="$$lc:$(srcdir)/$$lc"; \
- fi; \
- for page in $(DOC_PAGES); do \
- echo "xmllint --noout --noent --path $$xmlpath --xinclude --relaxng $(_malrng) $$d$$lc/$$page"; \
- xmllint --noout --noent --path "$$xmlpath" --xinclude --relaxng "$(_malrng)" "$$d$$lc/$$page"; \
- done; \
- done
-
-check-doc-omf: $(_DOC_OMF_ALL)
- @list='$(_DOC_OMF_ALL)'; for omf in $$list; do \
- echo "xmllint --noout --xinclude --dtdvalid 'http://scrollkeeper.sourceforge.net/dtds/scrollkeeper-omf-1.0/scrollkeeper-omf.dtd' $$omf"; \
- xmllint --noout --xinclude --dtdvalid 'http://scrollkeeper.sourceforge.net/dtds/scrollkeeper-omf-1.0/scrollkeeper-omf.dtd' $$omf; \
- done
-
-################################################################################
-
-.PHONY: install-doc-docs install-doc-html install-doc-figs install-doc-omf install-doc-dsk
-
-install-data-local: \
- $(if $(DOC_MODULE)$(DOC_ID),install-doc-docs) \
- $(if $(_DOC_HTML_ALL),install-doc-html) \
- $(if $(_DOC_C_FIGURES),install-doc-figs) \
- $(if $(_DOC_OMF_IN),install-doc-omf)
-# $(if $(_DOC_DSK_IN),install-doc-dsk)
+ maintainer-clean-generic mostlyclean mostlyclean-generic \
+ mostlyclean-libtool pdf pdf-am ps ps-am uninstall uninstall-am
-install-doc-docs:
- @for lc in C $(_DOC_REAL_LINGUAS); do \
- echo "$(mkinstalldirs) $(DESTDIR)$(HELP_DIR)/$(_doc_install_dir)/$$lc"; \
- $(mkinstalldirs) $(DESTDIR)$(HELP_DIR)/$(_doc_install_dir)/$$lc; \
- done
- @list='$(_DOC_C_DOCS) $(_DOC_LC_DOCS)'; for doc in $$list; do \
- if test -f "$$doc"; then d=; else d="$(srcdir)/"; fi; \
- docdir="$$lc/"`echo $$doc | sed -e 's/^\(.*\/\).*/\1/' -e '/\//!s/.*//'`; \
- docdir="$(DESTDIR)$(HELP_DIR)/$(_doc_install_dir)/$$docdir"; \
- if ! test -d "$$docdir"; then \
- echo "$(mkinstalldirs) $$docdir"; \
- $(mkinstalldirs) "$$docdir"; \
- fi; \
- echo "$(INSTALL_DATA) $$d$$doc $(DESTDIR)$(HELP_DIR)/$(_doc_install_dir)/$$doc"; \
- $(INSTALL_DATA) $$d$$doc $(DESTDIR)$(HELP_DIR)/$(_doc_install_dir)/$$doc; \
- done
-
-install-doc-figs:
- @list='$(patsubst C/%,%,$(_DOC_C_FIGURES))'; for fig in $$list; do \
- for lc in C $(_DOC_REAL_LINGUAS); do \
- figsymlink=false; \
- if test -f "$$lc/$$fig"; then \
- figfile="$$lc/$$fig"; \
- elif test -f "$(srcdir)/$$lc/$$fig"; then \
- figfile="$(srcdir)/$$lc/$$fig"; \
- else \
- figsymlink=true; \
- fi; \
- figdir="$$lc/"`echo $$fig | sed -e 's/^\(.*\/\).*/\1/' -e '/\//!s/.*//'`; \
- figdir="$(DESTDIR)$(HELP_DIR)/$(_doc_install_dir)/$$figdir"; \
- if ! test -d "$$figdir"; then \
- echo "$(mkinstalldirs) $$figdir"; \
- $(mkinstalldirs) "$$figdir"; \
- fi; \
- figbase=`echo $$fig | sed -e 's/^.*\///'`; \
- if $$figsymlink; then \
- echo "cd $$figdir && $(LN_S) -f ../../C/$$fig $$figbase"; \
- ( cd "$$figdir" && $(LN_S) -f "../../C/$$fig" "$$figbase" ); \
- else \
- echo "$(INSTALL_DATA) $$figfile $$figdir$$figbase"; \
- $(INSTALL_DATA) "$$figfile" "$$figdir$$figbase"; \
- fi; \
- done; \
- done
-
-install-doc-html:
- echo install-html
-
-install-doc-omf:
- $(mkinstalldirs) $(DESTDIR)$(OMF_DIR)/$(_doc_install_dir)
- @list='$(_DOC_OMF_ALL)'; for omf in $$list; do \
- echo "$(INSTALL_DATA) $$omf $(DESTDIR)$(OMF_DIR)/$(_doc_install_dir)/$$omf"; \
- $(INSTALL_DATA) $$omf $(DESTDIR)$(OMF_DIR)/$(_doc_install_dir)/$$omf; \
- done
- @if test "x$(_ENABLE_SK)" = "xtrue"; then \
- echo "scrollkeeper-update -p $(DESTDIR)$(_sklocalstatedir) -o $(DESTDIR)$(OMF_DIR)/$(_doc_install_dir)"; \
- scrollkeeper-update -p "$(DESTDIR)$(_sklocalstatedir)" -o "$(DESTDIR)$(OMF_DIR)/$(_doc_install_dir)"; \
- fi;
-
-install-doc-dsk:
- echo install-dsk
-
-################################################################################
-
-.PHONY: uninstall-doc-docs uninstall-doc-html uninstall-doc-figs uninstall-doc-omf uninstall-doc-dsk
-uninstall-local: \
- $(if $(DOC_MODULE)$(DOC_ID),uninstall-doc-docs) \
- $(if $(_DOC_HTML_ALL),uninstall-doc-html) \
- $(if $(_DOC_C_FIGURES),uninstall-doc-figs) \
- $(if $(_DOC_OMF_IN),uninstall-doc-omf)
-# $(if $(_DOC_DSK_IN),uninstall-doc-dsk)
-
-uninstall-doc-docs:
- @list='$(_DOC_C_DOCS) $(_DOC_LC_DOCS)'; for doc in $$list; do \
- echo " rm -f $(DESTDIR)$(HELP_DIR)/$(_doc_install_dir)/$$doc"; \
- rm -f "$(DESTDIR)$(HELP_DIR)/$(_doc_install_dir)/$$doc"; \
- done
-
-uninstall-doc-figs:
- @list='$(_DOC_C_FIGURES) $(_DOC_LC_FIGURES)'; for fig in $$list; do \
- echo "rm -f $(DESTDIR)$(HELP_DIR)/$(_doc_install_dir)/$$fig"; \
- rm -f "$(DESTDIR)$(HELP_DIR)/$(_doc_install_dir)/$$fig"; \
- done;
-
-uninstall-doc-omf:
- @list='$(_DOC_OMF_ALL)'; for omf in $$list; do \
- if test "x$(_ENABLE_SK)" = "xtrue"; then \
- echo "scrollkeeper-uninstall -p $(_sklocalstatedir) $(DESTDIR)$(OMF_DIR)/$(_doc_install_dir)/$$omf"; \
- scrollkeeper-uninstall -p "$(_sklocalstatedir)" "$(DESTDIR)$(OMF_DIR)/$(_doc_install_dir)/$$omf"; \
- fi; \
- echo "rm -f $(DESTDIR)$(OMF_DIR)/$(_doc_install_dir)/$$omf"; \
- rm -f "$(DESTDIR)$(OMF_DIR)/$(_doc_install_dir)/$$omf"; \
- done
-dist-hook: doc-dist-hook
# 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/docs/cs/cs.po b/docs/cs/cs.po
deleted file mode 100644
index 5083b8c..0000000
--- a/docs/cs/cs.po
+++ /dev/null
@@ -1,1774 +0,0 @@
-# Czech translation of f-spot manual.
-# This file is distributed under the same license as the f-spot package.
-# Zdeněk Hataš <zdenek.hatas at gmail.com>, 2009.
-# Lucas Lommer <llommer at svn.gnome.org>, 2009.
-#
-msgid ""
-msgstr ""
-"Project-Id-Version: f-spot\n"
-"POT-Creation-Date: 2009-03-11 14:40+0000\n"
-"PO-Revision-Date: \n"
-"Last-Translator: Zdeněk Hataš <zdenek.hatas at gmail.com>\n"
-"Language-Team: Czech <gnome-cs-list at gnome.org>\n"
-"MIME-Version: 1.0\n"
-"Content-Type: text/plain; charset=UTF-8\n"
-"Content-Transfer-Encoding: 8bit\n"
-"Plural-Forms: nplurals=3; plural=(n==1) ? 0 : (n>=2 && n<=4) ? 1 : 2;\n"
-"X-Poedit-Language: Czech\n"
-"X-Poedit-Country: CZECH REPUBLIC\n"
-"X-Poedit-SourceCharset: utf-8\n"
-
-#. When image changes, this message will be marked fuzzy or untranslated for you.
-#. It doesn't matter what you translate it to: it's not used at all.
-#: C/f-spot.xml:163(None)
-msgid ""
-"@@image: 'figures/f-spot-crop.png'; md5=63e18c96702aea4701024837a13ae2d9"
-msgstr ""
-"@@image: 'figures/f-spot-crop.png'; md5=63e18c96702aea4701024837a13ae2d9"
-
-#. When image changes, this message will be marked fuzzy or untranslated for you.
-#. It doesn't matter what you translate it to: it's not used at all.
-#: C/f-spot.xml:187(None)
-msgid ""
-"@@image: 'figures/f-spot-straighten.png'; "
-"md5=ceeff0cac633d06599fa5760cc4bc568"
-msgstr ""
-"@@image: 'figures/f-spot-straighten.png'; "
-"md5=ceeff0cac633d06599fa5760cc4bc568"
-
-#. When image changes, this message will be marked fuzzy or untranslated for you.
-#. It doesn't matter what you translate it to: it's not used at all.
-#: C/f-spot.xml:206(None)
-msgid ""
-"@@image: 'figures/f-spot-adjust-colors.png'; "
-"md5=6a5d9eaaaaf238ccbf70552bc073898c"
-msgstr ""
-"@@image: 'figures/f-spot-adjust-colors.png'; "
-"md5=6a5d9eaaaaf238ccbf70552bc073898c"
-
-#. When image changes, this message will be marked fuzzy or untranslated for you.
-#. It doesn't matter what you translate it to: it's not used at all.
-#: C/f-spot.xml:224(None)
-msgid ""
-"@@image: 'figures/f-spot-autocolor.png'; md5=240c4a86c95c9507755fe790bef0e24a"
-msgstr ""
-"@@image: 'figures/f-spot-autocolor.png'; md5=240c4a86c95c9507755fe790bef0e24a"
-
-#. When image changes, this message will be marked fuzzy or untranslated for you.
-#. It doesn't matter what you translate it to: it's not used at all.
-#: C/f-spot.xml:241(None)
-msgid ""
-"@@image: 'figures/f-spot-desaturate.png'; "
-"md5=fa54dfd08171658d720be71b6d367139"
-msgstr ""
-"@@image: 'figures/f-spot-desaturate.png'; "
-"md5=fa54dfd08171658d720be71b6d367139"
-
-#. When image changes, this message will be marked fuzzy or untranslated for you.
-#. It doesn't matter what you translate it to: it's not used at all.
-#: C/f-spot.xml:258(None)
-msgid ""
-"@@image: 'figures/f-spot-sepia.png'; md5=154d6e34903664dbd776f2bef405ce91"
-msgstr ""
-"@@image: 'figures/f-spot-sepia.png'; md5=154d6e34903664dbd776f2bef405ce91"
-
-#. When image changes, this message will be marked fuzzy or untranslated for you.
-#. It doesn't matter what you translate it to: it's not used at all.
-#: C/f-spot.xml:289(None)
-msgid ""
-"@@image: 'figures/f-spot-red-eye.png'; md5=743d0a2ccc9b2fa8fa314855c225cd31"
-msgstr ""
-"@@image: 'figures/f-spot-red-eye.png'; md5=743d0a2ccc9b2fa8fa314855c225cd31"
-
-#. When image changes, this message will be marked fuzzy or untranslated for you.
-#. It doesn't matter what you translate it to: it's not used at all.
-#: C/f-spot.xml:316(None)
-msgid ""
-"@@image: 'figures/f-spot-soft-focus.png'; "
-"md5=14d1437ce49c83f3ebbcf70b7047ffbe"
-msgstr ""
-"@@image: 'figures/f-spot-soft-focus.png'; "
-"md5=14d1437ce49c83f3ebbcf70b7047ffbe"
-
-#. When image changes, this message will be marked fuzzy or untranslated for you.
-#. It doesn't matter what you translate it to: it's not used at all.
-#: C/f-spot.xml:596(None)
-msgid ""
-"@@image: 'figures/f-spot-fullscreen.png'; "
-"md5=86040e20ebf1015f6489a56e9589f063"
-msgstr ""
-"@@image: 'figures/f-spot-fullscreen.png'; "
-"md5=86040e20ebf1015f6489a56e9589f063"
-
-#. When image changes, this message will be marked fuzzy or untranslated for you.
-#. It doesn't matter what you translate it to: it's not used at all.
-#: C/f-spot.xml:609(None)
-msgid ""
-"@@image: 'figures/f-spot-slideshow.png'; md5=84a69bc3bb7a1b8d04c967d3a66e6f23"
-msgstr ""
-"@@image: 'figures/f-spot-slideshow.png'; md5=84a69bc3bb7a1b8d04c967d3a66e6f23"
-
-#: C/f-spot.xml:5(title)
-msgid "The F-Spot Manual"
-msgstr "Příručka programu F-Spot"
-
-#: C/f-spot.xml:7(para) C/f-spot.xml:9(subtitle)
-msgid "This is the user manual for F-Spot, a GNOME personal photo manager."
-msgstr "Toto je příručka programu F-Spot, osobního správce fotografií."
-
-#: C/f-spot.xml:11(year)
-msgid "2007-2008"
-msgstr "2007-2008"
-
-#: C/f-spot.xml:12(holder)
-msgid "Aaron Bockover, Gabriel Burt, Miguel de Icaza, Bengt Thuree"
-msgstr "Aaron Bockover, Gabriel Burt, Miguel de Icaza, Bengt Thuree"
-
-#: C/f-spot.xml:15(publishername)
-msgid "GNOME Documentation Project"
-msgstr "Dokumentační projekt GNOME"
-
-#: C/f-spot.xml:19(firstname)
-msgid "Miguel"
-msgstr "Miguel"
-
-#: C/f-spot.xml:20(surname)
-msgid "de Icaza"
-msgstr "de Icaza"
-
-#: C/f-spot.xml:23(firstname)
-msgid "Aaron"
-msgstr "Aaron"
-
-#: C/f-spot.xml:24(surname)
-msgid "Bockover"
-msgstr "Bockover"
-
-#: C/f-spot.xml:27(firstname)
-msgid "Bengt"
-msgstr "Bengt"
-
-#: C/f-spot.xml:28(surname)
-msgid "Thuree"
-msgstr "Thuree"
-
-#: C/f-spot.xml:31(firstname)
-msgid "Gabriel"
-msgstr "Gabriel"
-
-#: C/f-spot.xml:32(surname)
-msgid "Burt"
-msgstr "Burt"
-
-#: C/f-spot.xml:35(firstname)
-msgid "Alexandre"
-msgstr "Alexandre"
-
-#: C/f-spot.xml:36(surname)
-msgid "Prokoudine"
-msgstr "Prokoudine"
-
-#: C/f-spot.xml:39(firstname)
-msgid "Stephane"
-msgstr "Stephane"
-
-#: C/f-spot.xml:40(surname)
-msgid "Delcroix"
-msgstr "Delcroix"
-
-#: C/f-spot.xml:46(revnumber)
-msgid "0.5"
-msgstr "0.5"
-
-#: C/f-spot.xml:47(date)
-msgid "2008-09-25"
-msgstr "2008-09-25"
-
-#: C/f-spot.xml:50(revnumber)
-msgid "0.4"
-msgstr "0.4"
-
-#: C/f-spot.xml:51(date)
-msgid "2008-09-12"
-msgstr "2008-09-12"
-
-#: C/f-spot.xml:54(revnumber)
-msgid "0.3"
-msgstr "0.3"
-
-#: C/f-spot.xml:55(date)
-msgid "2007-07-26"
-msgstr "2007-07-26"
-
-#: C/f-spot.xml:61(title)
-msgid "Organizing your photos"
-msgstr "Organizace vašich fotografií"
-
-#: C/f-spot.xml:64(title)
-msgid "Import"
-msgstr "Import"
-
-#: C/f-spot.xml:66(para)
-msgid ""
-"You can import photos from your hard drive or your camera. When you import "
-"your photos into F-Spot from your camera, it will always make a copy of "
-"them, leaving you free to clear your camera's memory. By default, F-Spot "
-"will make a copy of photos imported from your hard drive. Uncheck the "
-"<guilabel>Copy</guilabel> option on the import dialog or hold <keycap>Shift</"
-"keycap> when dragging photos into F-Spot if you do not wish to copy them "
-"from your hard drive."
-msgstr ""
-"Fotografie můžete importovat z vašeho pevného disku nebo fotoaparátu. Pokud "
-"importujete fotografie z fotoaparátu, F-Spot vždy vytvoří pouze jejich kopii "
-"a vyčištění paměti fotoaparátu nechá na vás. F-Spot standardně vytváří kopie "
-"fotografií importovaných z pevného disku. Pokud nechcete fotografie "
-"kopírovat, odškrtněte volbu <guilabel>Kopírovat</guilabel> v dialogu "
-"importu, nebo držte klávesu <keycap>Shift</keycap> při přesouvání fotografií "
-"do programu F-Spot."
-
-#: C/f-spot.xml:76(para)
-msgid ""
-"By default, F-Spot copies your photos to the <filename class=\"directory\">~/"
-"Photos</filename> folder. You can change the folder F-Spot uses in "
-"<guilabel>Preferences</guilabel> dialog (<menuchoice><guimenu>Edit</"
-"guimenu><guimenuitem>Preferences</guimenuitem></menuchoice>). You can also "
-"disable physical copying of images to that directory and make F-Spot only "
-"reference to existing files. For that you need to disable checkbox "
-"<guilabel>Copy files to the Photos folder</guilabel>."
-msgstr ""
-"F-Spot standardně kopíruje vaše fotografie do adresáře <filename class="
-"\"directory\">~/Photos</filename>. Adresář, který F-Spot používá můžete "
-"změnit v dialogu <guilabel>Nastavení</guilabel> "
-"(<menuchoice><guimenu>Upravit</guimenu><guimenuitem>Nastavení</guimenuitem></"
-"menuchoice>). Odškrtnutím volby <guilabel>Kopírovat soubory do složky "
-"Photos</guilabel> také můžete zakázat fyzické kopírování obrázků do tohoto "
-"adresáře. F-Spot v tomto případě vytvoří pouze odkaz na existující soubory."
-
-#: C/f-spot.xml:85(para)
-msgid ""
-"If there is a tiny chance that some of your photos are already imported from "
-"the chosen source, you can use <guilabel>Detect duplicates</guilabel> "
-"option. In this case F-Spot will try to find out if exactly this image is "
-"already present in the database and thus new copy of it should not be "
-"imported."
-msgstr ""
-"Pokud existuje byť jen malá možnost, že ze zvoleného zdroje byly už některé "
-"fotografie dříve importovány, můžete použít volbu <guilabel>Detect "
-"duplicates</guilabel>. V tomto případě se F-Spot pokusí zjistit, zda už je "
-"daný obrázek v databázi a nová kopie by tudíž neměla být importována."
-
-#: C/f-spot.xml:92(para)
-msgid ""
-"If all the photos you are importing at one time are from a particular event, "
-"or have some other characteristic in common, you can create a tag for them "
-"so you can later find them with ease. To do this, follow the instructions "
-"from <xref linkend=\"tag\"/> to create a new tag, then when you are "
-"importing them, check the button for <guilabel>Attach Tag</guilabel> and "
-"choose the tag you created."
-msgstr ""
-"Mají-li všechny fotografie, které současně importujete, něco společného "
-"(např. pocházejí ze stejné akce, nebo mají nějakou společnou "
-"charakteristiku), můžete pro ně vytvořit štítek pomocí kterého je v budoucnu "
-"snáze najdete. Při tvorbě nového štítku postupujte dle instrukcí, které "
-"popisuje <xref linkend=\"tag\"/>. Ve chvíli, kdy importujete fotografie, "
-"zaškrtněte <guilabel>Připojit štítky</guilabel> a zvolte štítek, který jste "
-"vytvořili."
-
-#: C/f-spot.xml:102(para)
-msgid ""
-"F-Spot uses a database stored at <filename>~/.gnome2/f-spot/photos.db</"
-"filename>. Note, to access it, use the sqlite3 command. You can also "
-"manually specify path to a database by running F-Spot with <option>-b</"
-"option> option."
-msgstr ""
-"F-Spot používá databázi uloženou v souboru <filename>~/.gnome2/f-spot/photos."
-"db</filename>. Pokud k ní chcete přistupovat přímo, použijte příkaz sqlite3. "
-"Použitím parametru <option>-b</option> při startu programu F-Spot je možné "
-"nastavit cestu k databázi ručně."
-
-#: C/f-spot.xml:110(para)
-msgid ""
-"After an import, F-Spot will display the pictures of the latest import roll "
-"only. Read <xref linkend=\"enjoying-search\"/> to learn how to deal with "
-"import rolls."
-msgstr ""
-"Po ukončení importu F-Spot zobrazí všechny obrázky, které byly součástí "
-"posledního importovaného filmu. <xref linkend=\"enjoying-search\"/> vám dá "
-"více informací o zacházení s importovanými filmy."
-
-#: C/f-spot.xml:115(para)
-msgid ""
-"You can also import directly from Mozilla <ulink url=\"http://www.mozilla."
-"com/en-US/firefox/\">Firefox</ulink> and <ulink url=\"http://www.mozilla.com/"
-"en-US/thunderbird/\">Thunderbird</ulink> using <ulink url=\"https://addons."
-"mozilla.org/en-US/firefox/addon/7091\">Firefox</ulink> and <ulink url="
-"\"https://addons.mozilla.org/en-US/thunderbird/addon/7011\">Thunderbird</"
-"ulink> F-Spot importer extensions written by <ulink url=\"http://"
-"personalpages.tds.net/~cdovel/\">Pizzach</ulink>."
-msgstr ""
-"Importovat můžete také přímo aplikací Mozilla <ulink url=\"http://www."
-"mozilla.com/en-US/firefox/\">Firefox</ulink> nebo <ulink url=\"http://www."
-"mozilla.com/en-US/thunderbird/\">Thunderbird</ulink> s využitím rozšíření "
-"<ulink url=\"https://addons.mozilla.org/en-US/firefox/addon/7091\">Firefox</"
-"ulink> and <ulink url=\"https://addons.mozilla.org/en-US/thunderbird/"
-"addon/7011\">Thunderbird</ulink> F-Spot importer, která vytvořil <ulink url="
-"\"http://personalpages.tds.net/~cdovel/\">Pizzach</ulink>."
-
-#: C/f-spot.xml:127(title)
-msgid "Edit"
-msgstr "Úpravy"
-
-#: C/f-spot.xml:129(para)
-msgid ""
-"If you double click or press enter on an image, you enter Edit mode, where "
-"you can remove red-eye, crop, and adjust brightness and colors."
-msgstr ""
-"Dvojklikem nebo stlačením klávesy Enter na obrázku přejdete do módu úprav. V "
-"tomto režimu můžete přizpůsobit jas a barvy obrázku, odstranit červené oči, "
-"nebo fotografii oříznout."
-
-#: C/f-spot.xml:135(title)
-msgid "Versions"
-msgstr "Verze"
-
-#: C/f-spot.xml:137(para)
-msgid ""
-"When you edit your photos, a new copy (called a version) is created, so your "
-"original is never altered. After your first edit to a photo, subsequent "
-"edits will modify the same version. If you want to create mulitple versions "
-"of your photo, perhaps with different cropping or coloring, you can do so "
-"via the <menuchoice><guimenu>File</guimenu><guimenuitem>Create new version</"
-"guimenuitem></menuchoice> option."
-msgstr ""
-"Vždy, když poprvé upravujete některou z fotografií, je vytvořena nová kopie "
-"(zvaná verze). Tím je zajištěno, že není měněn originál. Každá následující "
-"změna je provedena nad první verzí. Chcete-li vytvořit více různých verzí "
-"jedné fotografie, například jiný ořez, nebo barvy, vytvořte jednotlivé verze "
-"pomocí volby <menuchoice><guimenu>Soubor</guimenu><guimenuitem>Vytvořit "
-"novou verzi</guimenuitem></menuchoice> z hlavní nabídky."
-
-#: C/f-spot.xml:148(title)
-msgid "Crop"
-msgstr "Ořez"
-
-#: C/f-spot.xml:150(para)
-msgid ""
-"Cropping an image is a great way to improve the quality of a photograph by "
-"improving how it is framed. You crop a photo by selecting the part of the "
-"photo you want to keep. If you want your photo to be the exact dimensions "
-"necessary for a certain print size, you can constrain the kind of selection "
-"F-Spot will allow you to draw by choosing the appropriate size from the "
-"constraint drop down. See the <xref linkend=\"edit-remove-red-eye\"/> below "
-"for details on making a selection on your photo."
-msgstr ""
-"Ořez je výborný způsob, jak zlepšit kvalitu fotografie změnou jejího "
-"orámování. Ořez se provádí označením části fotografie, kterou chcete "
-"ponechat. Přesný ořez, pokud potřebujete aby měla vaše fotografie konkrétní "
-"rozměry (např. kvůli tisku), lze vynutit prostřednictvím rolovacího seznamu. "
-"F-Spot poté dovolí označení s ohledem na vynucený rozměr. Další podrobnosti "
-"o označování najdete v části <xref linkend=\"edit-remove-red-eye\"/>."
-
-#: C/f-spot.xml:160(title)
-msgid "Crop tool"
-msgstr "Nástroj Ořez"
-
-#: C/f-spot.xml:167(para) C/f-spot.xml:368(para)
-msgid ""
-"Once you have made your crop selection, you must click the crop button "
-"beneath the image to finalize the crop. If you are working with the original "
-"photo, cropping creates a new version your photo."
-msgstr ""
-"Poté co jste označili oblast ořezu, musíte kliknout na tlačítko ořez pod "
-"obrázkem a tím provést vlastní oříznutí. Pokud pracujete s originálem, ořez "
-"vytvoří novou verzi fotografie."
-
-#: C/f-spot.xml:175(title)
-msgid "Straighten"
-msgstr "Narovnání"
-
-#: C/f-spot.xml:177(para)
-msgid ""
-"Straighten effect is a tool to level a photo, quite helpful for landscapes "
-"taken without a tripod, when (imaginary) line of horizon is not at 0°. This "
-"tool rotates an image by a specified angle and automagically crops the "
-"resulted image, so that you always see a perfect rectangle."
-msgstr ""
-"Efekt Narovnání je nástroj k vyrovnání fotografie, který je velmi užitečný "
-"pokud fotografujete krajinu bez stativu a nepodařilo se vám udržet horizont "
-"v rovině. Nástroj otáčí obrázek pod zadaným úhlem a automaticky provádí ořez "
-"tak, že výsledkem je vždy perfektní pravoúhelník."
-
-#: C/f-spot.xml:184(title)
-msgid "Straighten tool"
-msgstr "Nástroj Narovnání"
-
-#: C/f-spot.xml:194(title)
-msgid "Adjust Colors"
-msgstr "Úprava barev"
-
-#: C/f-spot.xml:196(para)
-msgid ""
-"To adjust the brightness, contrast, and colors of a photo, first click the "
-"<guibutton>Adjust the photo colors</guibutton> icon to open the adjustment "
-"dialog. Change then some settings and save them with <guibutton>OK</"
-"guibutton>."
-msgstr ""
-"Chcete-li upravit jas, kontrast a barvy fotografie, musíte nejprve kliknout "
-"na ikonu <guibutton>Upravit barvy fotografie</guibutton> aby se otevřelo "
-"dialogové okno úprav. Poté můžete měnit nastavení a uložit je tlačítkem "
-"<guibutton>Budiž</guibutton>."
-
-#: C/f-spot.xml:203(title)
-msgid "Adjust Colors tool"
-msgstr "Nástroj Úprava barev"
-
-#: C/f-spot.xml:213(title) C/f-spot.xml:221(title)
-msgid "AutoColor"
-msgstr "Automatické barvy"
-
-#: C/f-spot.xml:215(para)
-msgid ""
-"This effect automatically adjusts color levels to make a pretty balanced "
-"picture color-wise. It serves best for pictures taken with automatical white "
-"balance, when camera didn't manage to do the job well."
-msgstr ""
-"Tento efekt automaticky přizpůsobí úrovně barev a vytvoří rozumně barevně "
-"vyvážený snímek. Nejlépe poslouží u fotografií pořízených s automatickým "
-"vyvážením bílé u nichž fotoaparát neodvedl dobrou práci."
-
-#: C/f-spot.xml:231(title)
-msgid "Desaturate"
-msgstr "Odbarvení"
-
-#: C/f-spot.xml:233(para)
-msgid ""
-"To make a colorful photo a black and white one, open a photo of choice and "
-"press <guibutton>Desaturate</guibutton> button."
-msgstr ""
-"Chcete-li z barevné fotografie vytvořit černobílou, otevřete vybranou "
-"fotografii a stiskněte tlačítko <guibutton>Odbarvení</guibutton>."
-
-#: C/f-spot.xml:238(title) C/f-spot.xml:255(title)
-msgid "Desaturation tool"
-msgstr "Nástroj Odbarvení"
-
-#: C/f-spot.xml:248(title)
-msgid "Sepia"
-msgstr "Sépie"
-
-#: C/f-spot.xml:250(para)
-msgid ""
-"To make a colorful photo look like an old-style picture in sepia tones, open "
-"a photo of choice and press <guibutton>Sepia</guibutton> button."
-msgstr ""
-"Chcete-li vytvořit zdání staré fotografie, otevřete zvolený obrázek a "
-"stiskněte tlačítko <guibutton>Sépie</guibutton>."
-
-#: C/f-spot.xml:265(title)
-msgid "Remove Red-Eye"
-msgstr "Odstranění červených očí"
-
-#: C/f-spot.xml:267(para)
-msgid ""
-"To remove redeye from a photo, you need to select a zone containing the "
-"eyes. You may want to zoom in on the image to accurately select the eyes in "
-"the photo. You should be able to correct both eyes on the same person in one "
-"shot, or even the eyes from multiple people at once. If this doesn't work "
-"for you, or the selected zone contains some vivid red parts (lips, ...) "
-"you'll probably have to correct one red eye at a time."
-msgstr ""
-
-#: C/f-spot.xml:275(para)
-msgid ""
-"To make your selection, click one corner of the rectangle that will be your "
-"selection, and drag your mouse to the diagonal corner and release it. You "
-"can resize your selection by dragging its edges, and you can move it by "
-"clicking in the middle of it and dragging it to where you want it."
-msgstr ""
-
-#: C/f-spot.xml:281(para)
-msgid ""
-"Once you have selected a zone, you can remove the red from it by clicking "
-"the red-eye button beneath the photo."
-msgstr ""
-
-#: C/f-spot.xml:286(title)
-msgid "Red-Eye tool"
-msgstr "Nástroj Červené oči"
-
-#: C/f-spot.xml:294(para)
-msgid ""
-"You can change the threshold for redeyes detection by changing the gconf key "
-"<filename class=\"directory\">/apps/f-spot/edit/redeye_threshold</filename>."
-msgstr ""
-
-#: C/f-spot.xml:303(title)
-msgid "Soft Focus"
-msgstr "Doostření"
-
-#: C/f-spot.xml:305(para)
-msgid ""
-"In photography sharpening one region of a picture, while blurring all the "
-"rest, is a way to make an emphasis and grab attention. It is achieved by "
-"using a lens that allows shooting with a short distance in front of and "
-"beyond the subject that appears to be in focus. Soft focus effect is a way "
-"to emulate such a lens."
-msgstr ""
-
-#: C/f-spot.xml:313(title)
-msgid "Soft Focus tool"
-msgstr "Nástroj Doostření"
-
-#: C/f-spot.xml:320(para)
-msgid ""
-"Click to choose central point of the area you want to be in focus and adjust "
-"amount of blurring, then click <guibutton>OK</guibutton>."
-msgstr ""
-
-#: C/f-spot.xml:327(title)
-msgid "Sharpen"
-msgstr "Zaostření"
-
-#: C/f-spot.xml:329(para)
-msgid ""
-"Out-of-focus photographs and most digitized images often need a sharpness "
-"correction. The Unsharp Mask effect sharpens edges of the elements without "
-"increasing noise or blemish. To sharpen a photo choose "
-"<menuchoice><guimenu>Edit</guimenu><guimenuitem>Sharpen...</guimenuitem></"
-"menuchoice> and specify the following values:"
-msgstr ""
-
-#: C/f-spot.xml:340(para)
-msgid ""
-"<parameter class=\"option\">Amount</parameter> — strength of sharpening."
-msgstr ""
-
-#: C/f-spot.xml:345(para)
-msgid ""
-"<parameter class=\"option\">Radius</parameter> — how many pixels on either "
-"side of an edge will be affected by sharpening. High resolution images allow "
-"higher radius."
-msgstr ""
-
-#: C/f-spot.xml:352(para)
-msgid ""
-"<parameter class=\"option\">Threshold</parameter> — the minimum difference "
-"in pixel values that indicates an edge where sharpen must be applied. This "
-"helps avoiding creation of blemishes in face, sky or water surface."
-msgstr ""
-
-#: C/f-spot.xml:362(title)
-msgid "Describe"
-msgstr "Popis"
-
-#: C/f-spot.xml:364(para)
-msgid ""
-"You can also enter a description of the image by clicking on the text entry "
-"box below the image and typing."
-msgstr ""
-"Po kliknutí na textové pole pod obrázkem, můžete také vložit popis "
-"fotografie."
-
-#: C/f-spot.xml:376(title)
-msgid "Adjust Time"
-msgstr "Úprava času"
-
-#: C/f-spot.xml:378(para)
-msgid ""
-"In both 'browse' or 'edit' modes, you can adjust the time of one or multiple "
-"pictures (<menuchoice><guimenu>Edit</guimenu><guimenuitem>Adjust Time</"
-"guimenuitem></menuchoice>). Adjusting the time of multiple pictures at once "
-"helps you shift all an import roll if, e.g. the time on your camera is badly "
-"set or if you forgot to change it according to DST."
-msgstr ""
-
-#: C/f-spot.xml:390(title)
-msgid "Tag"
-msgstr "Štítek"
-
-#: C/f-spot.xml:391(para)
-msgid ""
-"F-Spot enables you to organize and enjoy your photos by associating them "
-"with various user-customizable tags. A tag is a merely a label. F-Spot comes "
-"with default tags to get you started; you are free to change them and add "
-"new ones. For example, if you want to create a tag for specific event, you "
-"can create a new tag named after that event under the Events tag."
-msgstr ""
-
-#: C/f-spot.xml:398(para)
-msgid "There are many ways to tag photos:"
-msgstr "K označení fotografie štítkem vede mnoho cest:"
-
-#: C/f-spot.xml:403(para)
-msgid "drag and drop the photo(s) onto the tag"
-msgstr "přetažením fotografie na štítek"
-
-#: C/f-spot.xml:408(para)
-msgid "drag and drop the tag onto the photo(s)"
-msgstr "přetažením štítku na fotografii"
-
-#: C/f-spot.xml:413(para)
-msgid "via the photo's right-click menu"
-msgstr "prostřednictvím kontextové nabídky fotografie"
-
-#: C/f-spot.xml:418(para)
-msgid "via the Tags and Edit menus"
-msgstr "prostřednictvím nabídky Štítky a Upravit"
-
-#: C/f-spot.xml:423(para)
-msgid ""
-"by typing them in (press <keycap>t</keycap> to pop up the tag entry bar, "
-"enter comma-separated tags) - with tab completion!"
-msgstr ""
-
-#: C/f-spot.xml:429(para)
-msgid ""
-"The first photo you associate with a tag will be used for that tag's icon. "
-"You can always edit a tag's name, parent tag, and icon by right clicking on "
-"it and choosing <guilabel>Edit tag</guilabel>."
-msgstr ""
-
-#: C/f-spot.xml:434(para)
-msgid ""
-"You can change a tag's parent by dragging and dropping it where you like. "
-"Also, you can edit the name of a tag by selecting it and pressing "
-"<keycap>F2</keycap>. Lastly, if you have the tag tree widget focused (e.g. "
-"you just clicked on a tag), you can start typing the name of a tag, and all "
-"the expanded tags in the list will be searched and you'll jump to any "
-"matching ones."
-msgstr ""
-
-#: C/f-spot.xml:443(para)
-msgid ""
-"You can also change size of tag icons in the sidebar or even make tag icons "
-"invisible by selecting preferred option from <menuchoice><guimenu>View</"
-"guimenu><guimenuitem>Tag Icons</guimenuitem></menuchoice> menu."
-msgstr ""
-
-#: C/f-spot.xml:451(para)
-msgid ""
-"F-Spot can write tags as metadata fields into JPEG files. Tags for various "
-"RAW files, PNG, TIFF, and others are written to F-Spot's database. You will "
-"have to re-tag these files if you re-import your collection."
-msgstr ""
-
-#: C/f-spot.xml:462(title)
-msgid "Enjoying your photos"
-msgstr "Požitek z fotografií"
-
-#: C/f-spot.xml:464(title)
-msgid "Browse"
-msgstr "Procházení"
-
-#: C/f-spot.xml:465(para)
-msgid ""
-"You can use the slider widget to browse your photos by month or by "
-"directory. To change this setting, go to <menuchoice><guimenu>View</"
-"guimenu><guimenuitem>Arranged By</guimenuitem></menuchoice>."
-msgstr ""
-
-#: C/f-spot.xml:473(title)
-msgid "Search"
-msgstr "Vyhledávání"
-
-#: C/f-spot.xml:475(para)
-msgid ""
-"F-Spot uses search search filters to help you better define search criteria."
-msgstr "Pro lepší kontrolu vyhledávání obsahuje F-Spot vyhledávací filtry."
-
-#: C/f-spot.xml:480(title)
-msgid "Tags"
-msgstr "Štítky"
-
-#: C/f-spot.xml:482(para)
-msgid ""
-"You can start a search by double clicking or activating a tag from the tag "
-"list. Alternatively, you can show the find bar with "
-"<menuchoice><guimenu>Find</guimenu><guimenuitem>Show Find Bar</guimenuitem></"
-"menuchoice>. With the find bar shown, you can drag tags from the tag view to "
-"the find bar."
-msgstr ""
-
-#: C/f-spot.xml:488(para)
-msgid ""
-"To find photos that are tagged with both of two tags, activate the first in "
-"the tag view or drag it onto the find bar, then drag the second tag and drop "
-"it on top of the first. You can also right click on the second tag in the "
-"tag view, or use the <guimenu>Find</guimenu> menu, and choose "
-"<guimenuitem>Find With...</guimenuitem> and select the first tag (or group "
-"of tags)."
-msgstr ""
-
-#: C/f-spot.xml:495(para)
-msgid ""
-"You can drag a tag icon around on the find bar to change from finding it and "
-"another tag to finding it or another tag."
-msgstr ""
-
-#: C/f-spot.xml:499(para)
-msgid ""
-"You can search for photos that do not have a particular tag by double-"
-"clicking on a tag in the find bar. Alternatively, you can right-click a tag "
-"in the find bar and select <guimenuitem>Exclude</guimenuitem>."
-msgstr ""
-
-#: C/f-spot.xml:504(para)
-msgid ""
-"To remove a tag from the search, drag it away from the find bar, or right "
-"click and select <guimenuitem>Remove</guimenuitem>."
-msgstr ""
-
-#: C/f-spot.xml:508(para)
-msgid ""
-"By default, photos tagged <emphasis>Hidden</emphasis> will not be shown. You "
-"must explicitly include the <emphasis>Hidden</emphasis> tag in your search "
-"to show such photos."
-msgstr ""
-
-#: C/f-spot.xml:516(title)
-msgid "Import Rolls"
-msgstr "Importované filmy"
-
-#: C/f-spot.xml:517(para)
-msgid ""
-"F-Spot remembers what pictures were imported every now and then. Use "
-"<menuchoice><guimenu>Find</guimenu><guisubmenu>Import Roll</"
-"guisubmenu><guimenuitem>Last import roll</guimenuitem></menuchoice> to limit "
-"search to last importing session or use <menuchoice><guimenu>Find</"
-"guimenu><guisubmenu>Import Roll</guisubmenu><guimenuitem>Select Import "
-"Rolls...</guimenuitem></menuchoice> to make a finer selection of imported "
-"photos:"
-msgstr ""
-
-#: C/f-spot.xml:527(para)
-msgid ""
-"<parameter class=\"option\">At</parameter> — to select photos from a "
-"particular importing session"
-msgstr ""
-"<parameter class=\"option\">V</parameter> — vybrat fotografie z konkrétní "
-"importní relace"
-
-#: C/f-spot.xml:532(para)
-msgid ""
-"<parameter class=\"option\">After</parameter> — to select all photos "
-"imported begining with a particular importing sessio"
-msgstr ""
-"<parameter class=\"option\">Po</parameter> — vybrat všechny fotografie "
-"importované od začátku konkrétní importní relace"
-
-#: C/f-spot.xml:537(para)
-msgid ""
-"<parameter class=\"option\">Between</parameter> — to select all photos "
-"imported between two particular importing sessions"
-msgstr ""
-"<parameter class=\"option\">Mezi</parameter> — vybrat všechny fotografieto "
-"importované mezi konkrétními importními relacemi"
-
-#: C/f-spot.xml:542(para)
-msgid ""
-"Every time you change settings of the filter, amount of selected photos will "
-"appear in the bottom part of the dialog."
-msgstr ""
-
-#: C/f-spot.xml:546(para)
-msgid ""
-"When you apply Import Roll filter, in the Find bar you will see "
-"<guilabel>Find: Import Roll</guilabel>. Now you can add some other filter to "
-"finetune your selection."
-msgstr ""
-
-#: C/f-spot.xml:551(para)
-msgid ""
-"If you don't need the Import Roll filter anymore, choose "
-"<menuchoice><guimenu>Find</guimenu><guisubmenu>Import Roll</"
-"guisubmenu><guimenuitem>Clear roll filter</guimenuitem></menuchoice> to "
-"remove Import Roll from search criteria. You can also click the close button "
-"(<guibutton>X</guibutton>) of the search bar to discard all the current "
-"search options."
-msgstr ""
-
-#: C/f-spot.xml:560(para)
-msgid ""
-"The number of displayed rolls in the dialog is defined by the gconf key "
-"<filename class=\"directory\">/apps/f-spot/import/gui_roll_history</"
-"filename>. Default value is 10."
-msgstr ""
-
-#: C/f-spot.xml:569(title)
-msgid "Type-to-find"
-msgstr ""
-
-#: C/f-spot.xml:570(para)
-msgid ""
-"There is also a type-to-find entry. Press <keycap>/</keycap> to open it. It "
-"cannot be used at the same time as the find bar. You can type queries such "
-"as \"TagA and (TagB or (TagC and TagD))\". At any point, if F-Spot "
-"recognizes what you've typed as a valid query, it will update your search. "
-"The <emphasis>not</emphasis> operator is not yet supported."
-msgstr ""
-
-#: C/f-spot.xml:578(para)
-msgid ""
-"This function will also search for the typed text into photos comments and "
-"filename."
-msgstr ""
-
-#: C/f-spot.xml:585(title)
-msgid "Fullscreen Mode and Slideshows"
-msgstr "Celoobrazovkový režim a prezentace"
-
-#: C/f-spot.xml:586(para)
-msgid ""
-"For fewer distractions and larger display, you can view your photos in full "
-"screen mode. You control when to show the next photo or to return to the "
-"previous. Enter fullscreen mode by pressing <keycap>F11</keycap> at any time "
-"or by pressing the button in the toolbar."
-msgstr ""
-
-#: C/f-spot.xml:593(title)
-msgid "FullScreen"
-msgstr "Celá obrazovka"
-
-#: C/f-spot.xml:600(para)
-msgid ""
-"In slideshow mode, you can sit back and view your photos as they are "
-"presented to you. You can start a slideshow by pressing the button on the "
-"toolbar."
-msgstr ""
-"V režimu prezentace můžete sedět a prohlížet si své obrázky, které jsou "
-"automaticky zobrazovány. Prezentace začne po stisknutí tlačítka na panelu "
-"nástrojů."
-
-#: C/f-spot.xml:606(title)
-msgid "SlideShow"
-msgstr "Prezentace"
-
-#: C/f-spot.xml:617(title)
-msgid "Sharing your photos"
-msgstr "Sdílení vašich fotografií"
-
-#: C/f-spot.xml:620(para)
-msgid ""
-"There are many ways to share your photos using F-Spot. All of the following "
-"methods will only share the photos you have selected when you run them."
-msgstr ""
-
-#: C/f-spot.xml:627(title)
-msgid "E-mail"
-msgstr "E-mail"
-
-#: C/f-spot.xml:628(para)
-msgid ""
-"E-mail your photos directly from F-Spot with the <menuchoice><guimenu>File</"
-"guimenu><guimenuitem>Send Mail</guimenuitem></menuchoice> menu."
-msgstr ""
-"Pomocí volby <menuchoice><guimenu>Soubor</guimenu><guimenuitem>Poslat e-"
-"mailem...</guimenuitem></menuchoice> v nabídce můžete odeslat fotografii "
-"elektronickou poštou přímo z aplikace F-Spot."
-
-#: C/f-spot.xml:634(title)
-msgid "Note 1"
-msgstr "Poznámka 1"
-
-#: C/f-spot.xml:635(para)
-msgid ""
-"The email program used for this is defined at the GNOME level. You can "
-"change the default e-mailer for your user using the <application>Preferred "
-"Applications</application> tool in <menuchoice><guimenu>System</"
-"guimenu><guisubmenu>Preferences</guisubmenu></menuchoice>."
-msgstr ""
-"Emailový program, který bude použit, je definován na úrovni GNOME. Výchozí "
-"aplikaci můžete změnit nástrojem <application>Preferované aplikace</"
-"application> zvolením <menuchoice><guimenu>Systém</"
-"guimenu><guisubmenu>Nastavení</guisubmenu></menuchoice> z nabídky GNOME."
-
-#: C/f-spot.xml:644(title)
-msgid "Note 2"
-msgstr "Poznámka 2"
-
-#: C/f-spot.xml:645(para)
-msgid ""
-"If some of the photos you'd like to send by email are in a format that F-"
-"Spot can't write (e.g. RAW images), the size selection dialog will become "
-"insensitive and the originals will be sent."
-msgstr ""
-
-#: C/f-spot.xml:652(para)
-msgid ""
-"If you're sending resized pictures, F-Spot will keep the modified versions "
-"somewhere in the <filename class=\"directory\">/tmp</filename> directory for "
-"30 seconds. It's not an issue with evolution, which makes it's own local "
-"copy of the attachments, but could be a bit shorter if you're using "
-"Thunderbird. You can change the delay by editing the gconf key <filename "
-"class=\"directory\">/apps/f-spot/export/email/delete_timeout_seconds</"
-"filename>."
-msgstr ""
-
-#: C/f-spot.xml:664(title)
-msgid "Print"
-msgstr "Tisk"
-
-#: C/f-spot.xml:665(para)
-msgid ""
-"Print your photos with the <menuchoice><guimenu>File</"
-"guimenu><guimenuitem>Print</guimenuitem></menuchoice> menu."
-msgstr ""
-"Své fotografie vytisknete použitím volby <menuchoice><guimenu>Soubor</"
-"guimenu><guimenuitem>Tisk</guimenuitem></menuchoice> z hlavní nabídky."
-
-#: C/f-spot.xml:672(title)
-msgid "Burn to CD"
-msgstr "Vypálení na CD"
-
-#: C/f-spot.xml:673(para)
-msgid ""
-"Burn your photos to CD or DVD with the <menuchoice><guimenu>File</"
-"guimenu><guisubmenu>Export</guisubmenu><guimenuitem>Export to CD</"
-"guimenuitem></menuchoice> menu."
-msgstr ""
-"Své fotografie vypálíte na CD nebo DVD použitím volby "
-"<menuchoice><guimenu>Soubor</guimenu><guisubmenu>Exportovat do</"
-"guisubmenu><guimenuitem>CD</guimenuitem></menuchoice> v hlavní nabídce."
-
-#: C/f-spot.xml:681(title)
-msgid "Generate a Website Gallery or Folder"
-msgstr "Vytvoření webové galerie nebo adresáře"
-
-#: C/f-spot.xml:682(para)
-msgid ""
-"The <menuchoice><guimenu>File</guimenu><guimenuitem>Export</"
-"guimenuitem><guimenuitem>Export to Folder</guimenuitem></menuchoice> feature "
-"gives you three ways to export your images."
-msgstr ""
-
-#: C/f-spot.xml:690(para)
-msgid ""
-"<guilabel>Use Original</guilabel> exports your photos ready for use with "
-"Jakub Steiner's free <ulink url=\"http://jimmac.musichall.cz/original.php\"> "
-"Original Photo Gallery</ulink> software. If you are unsure about this "
-"option, it is probably not the right one for you."
-msgstr ""
-
-#: C/f-spot.xml:698(para)
-msgid ""
-"<guilabel>Use static HTML files</guilabel> exports your photos to an "
-"interactive website, ready for you to upload."
-msgstr ""
-
-#: C/f-spot.xml:704(para)
-msgid ""
-"<guilabel>Plain Files</guilabel> exports your images as files within "
-"directories, without putting them into a gallery."
-msgstr ""
-
-#: C/f-spot.xml:713(title)
-msgid "Post to your online galleries"
-msgstr "Odeslání do vašich online galerií"
-
-#: C/f-spot.xml:714(para)
-msgid ""
-"If you use Flickr, SmugMug, 23hq or Picasa Web Album, you can post your "
-"files directly from F-Spot with the <menuchoice><guimenu>File</"
-"guimenu><guisubmenu>Export</guisubmenu></menuchoice> menu, choosing "
-"corresponding submenu item."
-msgstr ""
-
-#: C/f-spot.xml:719(para)
-msgid ""
-"If you use the PHP software known as <ulink url=\"http://gallery.sourceforge."
-"net/\"> Gallery</ulink>, you can post your photos to your existing album "
-"with the <menuchoice><guimenu>File</guimenu><guimenuitem>Export</"
-"guimenuitem><guimenuitem>Export to Web Gallery</guimenuitem></menuchoice> "
-"menu. You must first enable the Remote module within your Gallery "
-"installation."
-msgstr ""
-
-#: C/f-spot.xml:727(title)
-msgid "Note for Gallery 2.2 users"
-msgstr "Poznámka pro uživatele Gallery 2.2"
-
-#: C/f-spot.xml:728(para)
-msgid "The Remote plugin for Gallery should be 1.0.8 or newer."
-msgstr ""
-
-#: C/f-spot.xml:732(para)
-msgid ""
-"<ulink url=\"http://pennave.sourceforge.net\">PennAve</ulink> is a Python "
-"web-application that directly uses F-Spot's database to present a dynamic "
-"gallery of your photos and tags."
-msgstr ""
-
-#: C/f-spot.xml:737(para)
-msgid ""
-"<ulink url=\"http://www.conduit-project.org\">Conduit</ulink> is an "
-"application that can sync photos that have a particular tag with your Flickr "
-"or Picasa Web Album web storage."
-msgstr ""
-
-#: C/f-spot.xml:746(title)
-msgid "Color management"
-msgstr "Správa barev"
-
-#: C/f-spot.xml:749(title)
-msgid "What's color management"
-msgstr "Co je správa barev"
-
-#: C/f-spot.xml:751(para)
-msgid ""
-"When you capture a photo and look at it on a display, it looks different "
-"than on a camera's preview display or on any other display. It will also "
-"look different when you print it. This is because every device has unique "
-"color reproduction capabilities."
-msgstr ""
-
-#: C/f-spot.xml:758(para)
-msgid ""
-"Color management system (CMS) is a tool to achieve reliable color "
-"reproduction for both display and output (e.g. a printer). A CMS relies on "
-"color profiles to map original colors to the color that a device can "
-"reproduce so that colors will appear the same way everywhere — on a computer "
-"LCD monitor, on a print from your local photolab etc."
-msgstr ""
-
-#: C/f-spot.xml:768(title)
-msgid "What's a color profile"
-msgstr "Co je barevný profil"
-
-#: C/f-spot.xml:770(para)
-msgid ""
-"A color profile is a file with either .icc (thus its is often called an ICC "
-"profile) or .icm extension that describes how device's colors correspond to "
-"a universal description of colors."
-msgstr ""
-"Barevný profil je soubor s koncovkou .icc ( proto je často zmiňován spíše "
-"jako ICC profil) nebo .icm který popisuje, jak odpovídají barvy používané "
-"zařízením univerzálnímu popisu barev."
-
-#: C/f-spot.xml:776(para)
-msgid "There are several types of profiles:"
-msgstr "Existuje několik typů profilu:"
-
-#: C/f-spot.xml:782(para)
-msgid ""
-"Input device profile. It's profile for a camera or a profile that an "
-"application like XSane embeds into a scanned image."
-msgstr ""
-"Profil vstupního zařízení. To je profil fotoaparátu nebo profil, který "
-"připojují aplikace jako XSane ke skenovanému obrázku."
-
-#: C/f-spot.xml:788(para)
-msgid ""
-"Working space profile. It's a profile that describes color space in which "
-"all operations are done inside an application. Usually very wide gamut "
-"profiles like AdobeRGB1998 or ProPhotoRGB are used for that."
-msgstr ""
-"Profil pracovního prostoru. To je profil, který popisuje barevný prostor, ve "
-"kterém jsou prováděny operace v rámci aplikace. Většinou jsou k tomu "
-"používány profily jako AdobeRGB1998 nebo ProPhotoRGB, které mají velmi "
-"široký gamut."
-
-#: C/f-spot.xml:795(para)
-msgid "Display profile. It's a profile for a monitor."
-msgstr "Profil zobrazení. To je profil vašeho monitoru."
-
-#: C/f-spot.xml:800(para)
-msgid "Output profile. This is usually a profile for you printer."
-msgstr "Výstupní profil. Jedná se obvykle o profil vaší tiskárny."
-
-#: C/f-spot.xml:806(para)
-msgid ""
-"Currently F-Spot allows setting only display and output profiles. All color "
-"operations are done in sRGB color space."
-msgstr ""
-"V tuto chvíli je v programu F-Spot možné nastavit pouze profil zobrazení a "
-"výstupní profil. Všechny operace s barvami jsou prováděny v barevném "
-"prostoru sRGB."
-
-#: C/f-spot.xml:813(title)
-msgid "How to get my screen/printer color profile"
-msgstr "Jak získat profil monitoru/tiskárny"
-
-#: C/f-spot.xml:815(para)
-msgid "There are few ways to get a color profile."
-msgstr "Je několik cest jak získat barevný profil."
-
-#: C/f-spot.xml:820(title)
-msgid "From CD or Internet"
-msgstr "Z CD nebo z Internetu"
-
-#: C/f-spot.xml:822(para)
-msgid ""
-"Many hardware manufacturers put color profiles into CD in the bundle. If you "
-"have one (from monitor or printer), you can use it. Or you can download it "
-"from the Internet (usually, from support section of the manufacturer's web "
-"site). Some camera manufacturers (Nikon, Canon) also provide ICC profiles."
-msgstr ""
-
-#: C/f-spot.xml:832(title)
-msgid "Calibrating and profiling"
-msgstr "Kalibrace a profilování"
-
-#: C/f-spot.xml:834(para)
-msgid ""
-"Best results can be achieved by calibrating and profiling devices with a "
-"measurement device. It is not so difficult, but it means that you need a "
-"spectrophotometer to do all measurements and create an ICC profile."
-msgstr ""
-
-#: C/f-spot.xml:840(para)
-msgid ""
-"If you are on Windows or Mac OS X, you can use manufacturer's software "
-"coming with a spectrophotometer. On Linux you will have to use either <ulink "
-"url=\"http://www.argyllcms.com\">Argyll</ulink>, which is a set of versatile "
-"command line tools, or <ulink url=\"http://lprof.sourceforge.net/\">LProf</"
-"ulink>, which has a graphical user interface."
-msgstr ""
-
-#: C/f-spot.xml:848(para)
-msgid ""
-"Please refer to documentation of third party hardware and software vendors "
-"for details."
-msgstr ""
-
-#: C/f-spot.xml:855(title)
-msgid "Embedding"
-msgstr "Vkládání"
-
-#: C/f-spot.xml:857(para)
-msgid ""
-"Image formats themselves (such as TIFF, JPEG, PNG...) may contain embedded "
-"color profiles. If color management is enabled, F-Spot looks for such "
-"embedded profiles and takes them into consideration."
-msgstr ""
-"Některé formáty obrázků (jako TIFF, JPEG, PNG ...) mohou obsahovat vložený "
-"barevný profil. Pokud je v F-Spot povolena správa barev, je barevný profil, "
-"nalezený v obrázku, brán v potaz."
-
-#: C/f-spot.xml:866(title)
-msgid "How to use color management in F-Spot"
-msgstr "Jak používat správu barev v F-Spot"
-
-#: C/f-spot.xml:868(para)
-msgid ""
-"Color management in F-Spot can use only RGB profiles at this time (and you "
-"can't see other profiles in the F-Spot)."
-msgstr ""
-"Správa barev v aplikaci F-Spot umí v tuto chvíli používat pouze RGB profily "
-"(a jiné profily v F-Spot nemůžete vidět)."
-
-#: C/f-spot.xml:875(para)
-msgid ""
-"Copy your color profiles into the <filename class=\"directory\">/usr/share/"
-"color/icc</filename> or <filename class=\"directory\">/usr/local/share./"
-"color/icc</filename> directory."
-msgstr ""
-"Nahrajte své profily do složky <filename class=\"directory\">/usr/share/"
-"color/icc</filename> nebo <filename class=\"directory\">/usr/local/share/"
-"color/icc</filename>"
-
-#: C/f-spot.xml:883(para)
-msgid ""
-"Enable the color management with the <menuchoice><guimenu>Edit</"
-"guimenu><guimenuitem>Preferences</guimenuitem></menuchoice> menu."
-msgstr ""
-"Správu barev povolíte v nastavení dostupném v nabídce "
-"<menuchoice><guimenu>Upravit</guimenu><guimenuitem>Nastavení</guimenuitem></"
-"menuchoice>."
-
-#: C/f-spot.xml:890(para)
-msgid ""
-"Select <guilabel>Display</guilabel> and <guilabel>Output</guilabel> profiles."
-msgstr ""
-"Vyberte profil pro režimy <guilabel>Zobrazovat</guilabel> a "
-"<guilabel>Výstup</guilabel>."
-
-#: C/f-spot.xml:898(para)
-msgid ""
-"You can use <ulink url=\"http://burtonini.com/blog/computers/xicc\">xicc</"
-"ulink> to load ICC profile to display and use the loaded profile from F-"
-"Spot. Just mark the checkbox <guilabel>Try to use the system display "
-"profile</guilabel>."
-msgstr ""
-"Pro nahrání ICC profilu monitoru můžete také použít program <ulink url="
-"\"http://burtonini.com/blog/computers/xicc\">xicc</ulink>. Nahraný profil "
-"můžete zaškrtnutím položky <guilabel>Zkusit použít systémový profil "
-"obrazovky</guilabel> použít s F-Spot."
-
-#: C/f-spot.xml:909(title)
-msgid "Extend functionality"
-msgstr "Rozšíření funkcí"
-
-#: C/f-spot.xml:912(title)
-msgid "What extensions are"
-msgstr "Co jsou rozšíření"
-
-#: C/f-spot.xml:914(para)
-msgid ""
-"F-Spot extensions are means to add new functionality to the application. F-"
-"Spot supports two types of extension: exporters (which allow exporting "
-"photos to new web services or data storages) and tools (which allow new ways "
-"of color correction, duplicate photos finders etc.). Extensions are "
-"distributed in form of extension packages."
-msgstr ""
-"Rozšíření jsou vytvářena s cílem přidat do aplikace F-Spot nové funkce. F-"
-"Spot podporuje dva druhy rozšíření: exportéři (které umožní export "
-"fotografií na webové stránky nebo do datových úložišť) a nástroje (které "
-"přístupňují nové cesty v korekci barev, nalezení duplicitních fotografií, "
-"apod.). Rozšíření jsou dodávána ve formě rozšiřujících modulů."
-
-#: C/f-spot.xml:921(para)
-msgid ""
-"In the best traditions of not reinventing the wheel extensions can use other "
-"extensions, which means that one extension cannot work, if another extension "
-"is not installed. This concept of dependance actually means that"
-msgstr ""
-"Aby nebylo stále znovu vymýšleno kolo, mohou rozšíření používat funkce "
-"dalších rozšiřujících modulů. To znamená, že rozšíření nebude pracovat, "
-"pokud další modul není nainstalován. Tento koncept závislostí znamená že,"
-
-#: C/f-spot.xml:928(para)
-msgid ""
-"you cannot install an extension, if the extension it depends on, is not "
-"present in the system"
-msgstr ""
-"nemůžete instalovat rozšíření, pokud závisí na jiném, které ale není "
-"instalováno v systému"
-
-#: C/f-spot.xml:933(para)
-msgid "you cannot remove an extension on which some other extension depends"
-msgstr "nemůžete odstranit rozšíření, na němž závisí jiný modul"
-
-#: C/f-spot.xml:941(title)
-msgid "Managing extensions"
-msgstr "Správa rozšíření"
-
-#: C/f-spot.xml:943(para)
-msgid ""
-"To manage extensions choose <menuchoice><guimenu>Edit</"
-"guimenu><guimenuitem>Manage Extensions</guimenuitem></menuchoice> menu item."
-msgstr ""
-"Správa rozšíření je dostupná po zvolení <menuchoice><guimenu>Upravit</"
-"guimenu><guimenuitem>Spravovat rozšíření</guimenuitem></menuchoice> z "
-"nabídky."
-
-#: C/f-spot.xml:949(title)
-msgid "Managing extension repositories"
-msgstr "Správa repozitářů rozšíření"
-
-#: C/f-spot.xml:951(para)
-msgid ""
-"Simply put, repositories are extension storages. They can be either network "
-"or local. To add a new repository click Repositories button, choose type of "
-"the repository you are about to add and provide either URL or path. If the "
-"URL or path you specified doesn't contain a description (index) file for "
-"extensions, a warning message will pop up to tell you that."
-msgstr ""
-"Zjednodušeně řečeno, repozitáře jsou úložiště rozšíření. Mohou být jak "
-"síťového tak i lokálního charakteru. Potřebujete-li přidat nový repozitář, "
-"klikněte na tlačítko Repozitáře, vyberte typ repozitáře, který chcete "
-"přidat, a vyplňte adresu URL nebo cestu. Pokud zadaná adresa URL nebo cesta "
-"neobsahují soubor s popisem (index) rozšíření, aplikace na tuto skutečnost "
-"upozorní varovným hlášením."
-
-#: C/f-spot.xml:958(para)
-msgid ""
-"To remove a repository click <guibutton>Repositories</guibutton> button "
-"again, choose the repository you are about to delete and click "
-"<guibutton>Delete</guibutton> button."
-msgstr ""
-"Potřebujete-li repozitář odebrat, klikněte znovu na tlačítko "
-"<guibutton>Repozitáře</guibutton> a vybrerte repozitář který má být "
-"odstraněn. Operaci dokončíte kliknutím na tlačítko <guibutton>Odstranit</"
-"guibutton>."
-
-#: C/f-spot.xml:966(title)
-msgid "Installing and updating extensions"
-msgstr "Instalace a aktualizace rozšíření"
-
-#: C/f-spot.xml:968(para)
-msgid ""
-"To install an extension click <guibutton>Install extensions...</guibutton> "
-"button. In the newly presented dialog"
-msgstr ""
-"Do instalace rozšíření se přepnete tlačítkem <guibutton>Instalovat "
-"rozšíření...</guibutton>. V novém okně poté"
-
-#: C/f-spot.xml:974(para)
-msgid ""
-"Choose repository to install from all known repositories or just one of "
-"available repositories."
-msgstr ""
-"Vyberte mód instalace. Rozšíření budou vybírána ze všech známých nebo pouze "
-"z dostupných repozitářů."
-
-#: C/f-spot.xml:980(para)
-msgid ""
-"Choose, what extension packages you want to see: All, Only new, Only updates."
-msgstr ""
-"Vyberte rozšiřující moduly, které chcete vidět: Všechny, Pouze nové, Pouze "
-"aktualizace."
-
-#: C/f-spot.xml:985(para)
-msgid ""
-"Click the <guibutton>Update</guibutton> button to update list of available "
-"extension packages by given criteria."
-msgstr ""
-"Aktualizaci seznamu dostupných rozšíření, dle nastavených kriterií, spustíte "
-"kliknutím na tlačítko <guibutton>Aktualizovat</guibutton>."
-
-#: C/f-spot.xml:991(para)
-msgid ""
-"Choose extensions you want to install/update, click <guibutton>Information</"
-"guibutton> to see summary on selected package, if you want to."
-msgstr ""
-"Vyberte rozšíření, která chcete instalovat/aktualizovat. Pokud chcete vidět "
-"shrnutí zvoleného balíčku, klikněte na tlačítko <guibutton>Informace</"
-"guibutton>."
-
-#: C/f-spot.xml:997(para)
-msgid "Click <guibutton>Forward</guibutton> to proceed with installation."
-msgstr "Instalaci spustíte kliknutím na tlačítko <guibutton>Vpřed</guibutton>"
-
-#: C/f-spot.xml:1005(title)
-msgid "Enabling and disabling extensions"
-msgstr "Aktivace a deaktivace rozšíření"
-
-#: C/f-spot.xml:1007(para)
-msgid ""
-"You might want to temporarily enable or disable a particular extension "
-"package, for example, if the extension is not stable enough to handle a "
-"large amount of photos or if menus get crowded with extensions."
-msgstr ""
-"Kterýkoli rozšiřující modul může být dočasně povolen nebo zakázán, pokud "
-"například není dostatečně stabilní při zpracovávání většího množství "
-"fotografií nebo pokud modul naruší nabídku aplikace."
-
-#: C/f-spot.xml:1012(para)
-msgid ""
-"In the <guilabel>Manage Extensions</guilabel> dialog select the extension "
-"package and click <guibutton>Enable</guibutton> or <guibutton>Disable</"
-"guibutton>. You will have to restart F-Spot to let changes apply."
-msgstr ""
-"V okně <guilabel>Spravovat rozšíření</guilabel> vyberte rozšiřující moduly a "
-"klikněte na tlačítko <guibutton>Povolit</guibutton> nebo <guibutton>Zakázat</"
-"guibutton>. Změny se aplikují po restartu aplikace F-Spot."
-
-#: C/f-spot.xml:1020(title)
-msgid "Removing extensions"
-msgstr "Odstranění rozšíření"
-
-#: C/f-spot.xml:1022(para)
-msgid ""
-"If you don't need an extension you can remove it from the system completely. "
-"In the <guilabel>Manage Extensions</guilabel> dialog select the extension "
-"package you want to remove and click <guibutton>Delete</guibutton>."
-msgstr ""
-"Rozšíření, které nepotřebujete, může být úplně odebráno ze systému. V okně "
-"<guilabel>Spravovat rozšíření</guilabel> vyberte rozšiřující modul, který "
-"chcete odebrat a klikněte na tlačítko <guibutton>Odebrat</guibutton>."
-
-#: C/f-spot.xml:1030(title)
-msgid "Reading summary of extensions"
-msgstr "Zobrazení shrnutí rozšíření"
-
-#: C/f-spot.xml:1032(para)
-msgid ""
-"Every extension package contains metadata that provides the following "
-"information about the extension:"
-msgstr ""
-"Každý rozšiřující modul obsahuje metadata, která poskytují o daném rozšíření "
-"tyto informace:"
-
-#: C/f-spot.xml:1038(para)
-msgid "Description, which usually covers puprose of the extension"
-msgstr "Popis, který obvykle pokrývá smysl rozšíření"
-
-#: C/f-spot.xml:1043(para)
-msgid "Version"
-msgstr "Verze"
-
-#: C/f-spot.xml:1048(para)
-msgid "Author"
-msgstr "Autor"
-
-#: C/f-spot.xml:1053(para)
-msgid "Dependencies"
-msgstr "Závislosti"
-
-#: C/f-spot.xml:1059(para)
-msgid ""
-"In the <guilabel>Manage Extensions</guilabel> dialog select the extension "
-"package you want to read summary of and click <guibutton>Information</"
-"guibutton>."
-msgstr ""
-"V okně <guilabel>Spravovat rozšíření</guilabel> vyberte rozšiřující modul, "
-"jehož shrnutí vás zajímá, a klikněte na tlačítko <guibutton>Informace</"
-"guibutton>."
-
-#: C/f-spot.xml:1067(title)
-msgid "Developing extensions"
-msgstr "Vývoj rozšíření"
-
-#: C/f-spot.xml:1069(para)
-msgid ""
-"<ulink url=\"http://f-spot.org/Extend_F-Spot\">Extend F-Spot</ulink> "
-"document gives instructions on developing your own extensions for F-Spot."
-msgstr ""
-"Informace o vývoji vašich vlastních rozšíření pro F-Spot naleznete v "
-"dokumentu <ulink url=\"http://f-spot.org/Extend_F-Spot\">Extend F-Spot</"
-"ulink>."
-
-#: C/f-spot.xml:1077(title)
-msgid "Shortcuts"
-msgstr "Klávesové zkratky"
-
-#: C/f-spot.xml:1080(title)
-msgid "Global Shortcuts"
-msgstr "Globální zkratky"
-
-#: C/f-spot.xml:1085(entry) C/f-spot.xml:1194(entry) C/f-spot.xml:1290(entry)
-#: C/f-spot.xml:1342(entry)
-msgid "Key"
-msgstr "Klávesa"
-
-#: C/f-spot.xml:1088(entry) C/f-spot.xml:1197(entry) C/f-spot.xml:1293(entry)
-#: C/f-spot.xml:1345(entry)
-msgid "Action"
-msgstr "Činnost"
-
-#: C/f-spot.xml:1096(keycap)
-msgid "["
-msgstr "["
-
-#: C/f-spot.xml:1098(entry)
-msgid "Rotate the selected photos to the left"
-msgstr "Otočit označené fotografie doleva (proti směru hodinových ručiček)"
-
-#: C/f-spot.xml:1104(keycap)
-msgid "]"
-msgstr "]"
-
-#: C/f-spot.xml:1106(entry)
-msgid "Rotate the selected photos to the right"
-msgstr "Otočit označené fotografie doprava (po směru hodinových ručiček)"
-
-#: C/f-spot.xml:1112(keycap) C/f-spot.xml:1120(keycap)
-msgid "Del"
-msgstr "Del"
-
-#: C/f-spot.xml:1114(entry)
-msgid "Remove selected photos from F-Spot's catalogue"
-msgstr "Odstranit označené fotografie z katalogu programu"
-
-#: C/f-spot.xml:1120(keycap) C/f-spot.xml:1213(keycap)
-#: C/f-spot.xml:1247(keycap) C/f-spot.xml:1256(keycap)
-#: C/f-spot.xml:1273(keycap) C/f-spot.xml:1427(keycap)
-msgid "Shift"
-msgstr "Shift"
-
-#: C/f-spot.xml:1122(entry)
-msgid "Delete selected photos permanently from the drive"
-msgstr "Vymazat označené fotografie z pevného disku"
-
-#: C/f-spot.xml:1129(keycap)
-msgid "t"
-msgstr "t"
-
-#: C/f-spot.xml:1131(entry)
-msgid "View or edit tags for selected photos"
-msgstr "Zobrazit nebo upravit štítky označených fotografií"
-
-#: C/f-spot.xml:1137(keycap)
-msgid "F11"
-msgstr "F11"
-
-#: C/f-spot.xml:1139(entry) C/f-spot.xml:1380(entry)
-msgid "Full screen view"
-msgstr "Zobrazit na celou obrazovku"
-
-#: C/f-spot.xml:1145(keycap) C/f-spot.xml:1153(keycap)
-#: C/f-spot.xml:1161(keycap) C/f-spot.xml:1169(keycap)
-#: C/f-spot.xml:1205(keycap) C/f-spot.xml:1213(keycap)
-#: C/f-spot.xml:1231(keycap) C/f-spot.xml:1256(keycap)
-#: C/f-spot.xml:1309(keycap)
-msgid "Ctrl"
-msgstr "Ctrl"
-
-#: C/f-spot.xml:1145(keycap)
-msgid "I"
-msgstr "I"
-
-#: C/f-spot.xml:1147(entry)
-msgid "Displays information about the photo"
-msgstr "Zobrazí informace o fotografii"
-
-#: C/f-spot.xml:1153(keycap)
-msgid "Equals"
-msgstr "= "
-
-#: C/f-spot.xml:1155(entry)
-msgid "Zoom-in"
-msgstr "Oddálit"
-
-#: C/f-spot.xml:1161(keycap)
-msgid "Minus"
-msgstr "Mínus"
-
-#: C/f-spot.xml:1163(entry)
-msgid "Zoom-out"
-msgstr "Přiblížit"
-
-#: C/f-spot.xml:1169(keycap) C/f-spot.xml:1361(keycap)
-msgid "N"
-msgstr "N"
-
-#: C/f-spot.xml:1171(entry)
-msgid "Import photos"
-msgstr "Importovat fotografie"
-
-#: C/f-spot.xml:1177(keycap)
-msgid "Alt"
-msgstr "Alt"
-
-#: C/f-spot.xml:1177(keycap)
-msgid "0-5"
-msgstr "0-5"
-
-#: C/f-spot.xml:1179(entry)
-msgid "Alt plus a number from 0 to 5 rate the selected picture(s)"
-msgstr "Alt plus číslo od 0 do 5 - hodnocení označených obrázků"
-
-#: C/f-spot.xml:1189(title)
-msgid "Browse Mode Shortcuts"
-msgstr "Režim procházení"
-
-#: C/f-spot.xml:1205(keycap) C/f-spot.xml:1214(keycap)
-msgid "A"
-msgstr "A"
-
-#: C/f-spot.xml:1207(entry)
-msgid "Select all"
-msgstr "Označit vše"
-
-#: C/f-spot.xml:1216(entry)
-msgid "Unselect all"
-msgstr "Zrušit označení"
-
-#: C/f-spot.xml:1222(keycap) C/f-spot.xml:1369(keycap)
-msgid "H"
-msgstr "H"
-
-#: C/f-spot.xml:1222(keycap) C/f-spot.xml:1369(keycap)
-msgid "J"
-msgstr "J"
-
-#: C/f-spot.xml:1223(keycap) C/f-spot.xml:1370(keycap)
-msgid "K"
-msgstr "K"
-
-#: C/f-spot.xml:1223(keycap) C/f-spot.xml:1370(keycap)
-msgid "L"
-msgstr "L"
-
-#: C/f-spot.xml:1221(entry) C/f-spot.xml:1368(entry)
-msgid ""
-"Arrow keys or <placeholder-1/>, <placeholder-2/>, <placeholder-3/>, "
-"<placeholder-4/>"
-msgstr ""
-"Šipky nebo <placeholder-1/>, <placeholder-2/>, <placeholder-3/>, "
-"<placeholder-4/>"
-
-#: C/f-spot.xml:1225(entry)
-msgid "Move focus"
-msgstr "Posunout střed"
-
-#: C/f-spot.xml:1230(entry)
-msgid "<placeholder-1/>-Arrow key"
-msgstr "<placeholder-1/>-šipka"
-
-#: C/f-spot.xml:1233(entry)
-msgid "Move the focus without changing the selection"
-msgstr "Posunout střed bez změny výběru"
-
-#: C/f-spot.xml:1239(keycap) C/f-spot.xml:1361(keycap)
-msgid "Spacebar"
-msgstr "Mezerník"
-
-#: C/f-spot.xml:1241(entry)
-msgid "Select or unselect the focused photo"
-msgstr "Vybrat nebo zrušit výběr fotografii ve středu"
-
-#: C/f-spot.xml:1248(keycap)
-msgid "Arrow key"
-msgstr "Šipka"
-
-#: C/f-spot.xml:1250(entry)
-msgid "Change the photo selection"
-msgstr "Změna označení fotografií"
-
-#: C/f-spot.xml:1257(keycap)
-msgid "Left arrow or Right arrow"
-msgstr "Pravá nebo levá šipka"
-
-#: C/f-spot.xml:1259(entry)
-msgid ""
-"Add/Remove all photos in the row, in the direction pressed, to the selection"
-msgstr "Přidat/odebrat všechny fotografie v řádku ve směru šipky do/z výběru"
-
-#: C/f-spot.xml:1265(keycap) C/f-spot.xml:1273(keycap)
-#: C/f-spot.xml:1418(keycap)
-msgid "V"
-msgstr "V"
-
-#: C/f-spot.xml:1267(entry)
-msgid "Pops up a larger preview of the picture pointed by the mouse"
-msgstr "Otevřít větší náhled obrázku označeného myší"
-
-#: C/f-spot.xml:1275(entry)
-msgid ""
-"Pops up a larger preview and a color histogram of the picture pointed by the "
-"mouse"
-msgstr "Otevřít větší náhled a histogram obrázku označeného myší"
-
-#: C/f-spot.xml:1285(title)
-msgid "Tag Shortcuts"
-msgstr "Štítkování"
-
-#: C/f-spot.xml:1301(keycap)
-msgid "F2"
-msgstr "F2"
-
-#: C/f-spot.xml:1303(entry)
-msgid "Rename selected tag"
-msgstr "Přejmenovat zvolený štítek"
-
-#: C/f-spot.xml:1309(keycap)
-msgid "T"
-msgstr "T"
-
-#: C/f-spot.xml:1311(entry)
-msgid "Add tags to selected photos"
-msgstr "Připojit štítek k výběru"
-
-#: C/f-spot.xml:1316(entry) C/f-spot.xml:1324(entry)
-msgid "n/a"
-msgstr "n/a"
-
-#: C/f-spot.xml:1319(entry)
-msgid "Drag and drop tags to move them"
-msgstr "Tažením štítky přemístíte"
-
-#: C/f-spot.xml:1327(entry)
-msgid "Type a tag's name to jump to it (only works if tag is shown/expanded)"
-msgstr ""
-"Psaním názvu na klávesnici se na štítek přemístíte (funguje pouze pokud je "
-"štítek viditelný/rozbalený)"
-
-#: C/f-spot.xml:1337(title)
-#, fuzzy
-msgid "Edit Mode Shortcuts"
-msgstr "Režim úprav"
-
-#: C/f-spot.xml:1353(keycap)
-msgid "Page Up"
-msgstr "Page Up"
-
-#: C/f-spot.xml:1353(keycap)
-msgid "Backspace"
-msgstr "Backspace"
-
-#: C/f-spot.xml:1353(keycap)
-msgid "B"
-msgstr "B"
-
-#: C/f-spot.xml:1352(entry) C/f-spot.xml:1360(entry)
-msgid "<placeholder-1/>, <placeholder-2/>, <placeholder-3/>"
-msgstr "<placeholder-1/>, <placeholder-2/>, <placeholder-3/>"
-
-#: C/f-spot.xml:1355(entry)
-msgid "Go to Previous Photo"
-msgstr "Přejít na předcházející fotografii"
-
-#: C/f-spot.xml:1361(keycap)
-msgid "Page Down"
-msgstr "Page Down"
-
-#: C/f-spot.xml:1363(entry)
-msgid "Go to Next Photo"
-msgstr "Přejít na následující fotografii"
-
-#: C/f-spot.xml:1372(entry)
-msgid "Go to Previous/Next photo or move around a zoomed photo"
-msgstr ""
-"Přejít na předchozí/následující fotografii nebo pohyb po zvětšené fotografii"
-
-#: C/f-spot.xml:1378(keycap)
-msgid "f"
-msgstr "f"
-
-#: C/f-spot.xml:1386(keycap)
-msgid "0"
-msgstr "0"
-
-#: C/f-spot.xml:1388(entry)
-msgid "Fit the image to the screen"
-msgstr "Přizpůsobit obrázek velikosti obrazovky"
-
-#: C/f-spot.xml:1394(keycap)
-msgid "1"
-msgstr "1"
-
-#: C/f-spot.xml:1396(entry)
-msgid "Zoom Factor to 1.0 (1 screen pixel per image pixel)"
-msgstr "Faktor zvětšení 1.0 (1 obrazový bod na bod obrázku)"
-
-#: C/f-spot.xml:1402(keycap)
-msgid "2"
-msgstr "2"
-
-#: C/f-spot.xml:1404(entry)
-msgid "Zoom Factor to 2.0 (4 screen pixels per image pixel)"
-msgstr "Faktor zvětšení 2.0 (4 obrazové body na bod obrázku)"
-
-#: C/f-spot.xml:1410(keycap)
-msgid "Escape"
-msgstr "Escape"
-
-#: C/f-spot.xml:1412(entry)
-msgid "Returns to Browser mode"
-msgstr "Návrat do režimu procházení"
-
-#: C/f-spot.xml:1422(keycap)
-msgid "v"
-msgstr "V"
-
-#: C/f-spot.xml:1420(entry)
-msgid ""
-"Examine photo with magnifying glass (Loupe). Doubleclick on the Loupe, or "
-"type <placeholder-1/> again to close it."
-msgstr ""
-"Prohlížet fotografii zvětšovacím sklem (lupa). Deaktivuje se dvojklikem na "
-"tlačítko Lupa nebo opětovným stisknutím <placeholder-1/>."
-
-#: C/f-spot.xml:1426(entry)
-msgid "<placeholder-1/>-Mousewheel"
-msgstr "<placeholder-1/>-kolečko myši"
-
-#: C/f-spot.xml:1429(entry)
-msgid "Faster filmstrip scrolling"
-msgstr "Rychlejší pohyb filmového pásu"
-
-#: C/f-spot.xml:1435(keycap)
-msgid "i"
-msgstr "i"
-
-#: C/f-spot.xml:1437(entry)
-msgid "Toggle infobox visibility ''(only when in full screen)''"
-msgstr ""
-"Přepínání viditelnosti informačního okna ''(pouze v celoobrazovkovém "
-"režimu)''"
-
-#. Put one translator per line, in the form of NAME <EMAIL>, YEAR1, YEAR2.
-#: C/f-spot.xml:0(None)
-msgid "translator-credits"
-msgstr "Zdeněk Hataš <zdenek.hatas at gmail.com>"
diff --git a/docs/cs/f-spot.xml b/docs/cs/f-spot.xml
deleted file mode 100644
index c3efd81..0000000
--- a/docs/cs/f-spot.xml
+++ /dev/null
@@ -1,1145 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!DOCTYPE book PUBLIC "-//OASIS//DTD DocBook XML 4.1.2//EN" "http://www.oasis-open.org/docbook/xml/4.1.2/docbookx.dtd">
-<book id="f-spot" lang="cs">
- <bookinfo>
- <title>Příručka programu F-Spot</title>
- <abstract role="description">
- <para>Toto je příručka programu F-Spot, osobního správce fotografií.</para>
- </abstract>
- <subtitle>Toto je příručka programu F-Spot, osobního správce fotografií.</subtitle>
- <copyright>
- <year>2007-2009</year>
- <holder>Aaron Bockover, Gabriel Burt, Miguel de Icaza, Bengt Thuree</holder>
- </copyright>
- <publisher>
- <publishername>Dokumentační projekt GNOME</publishername>
- </publisher>
- <authorgroup>
- <author>
- <firstname>Miguel</firstname>
- <surname>de Icaza</surname>
- </author>
- <author>
- <firstname>Aaron</firstname>
- <surname>Bockover</surname>
- </author>
- <author>
- <firstname>Bengt</firstname>
- <surname>Thuree</surname>
- </author>
- <author>
- <firstname>Gabriel</firstname>
- <surname>Burt</surname>
- </author>
- <author>
- <firstname>Alexandre</firstname>
- <surname>Prokoudine</surname>
- </author>
- <author role="maintainer">
- <firstname>Stephane</firstname>
- <surname>Delcroix</surname>
- </author>
- </authorgroup>
- <!--<include href="legal.xml" xmlns="http://www.w3.org/2001/XInclude"/>-->
- <revhistory>
- <revision>
- <revnumber>0.5</revnumber>
- <date>2008-09-25</date>
- </revision>
- <revision>
- <revnumber>0.4</revnumber>
- <date>2008-09-12</date>
- </revision>
- <revision>
- <revnumber>0.3</revnumber>
- <date>2007-07-26</date>
- </revision>
- </revhistory>
- </bookinfo>
-
- <chapter id="organizing">
- <title>Organizace vašich fotografií</title>
-
- <sect1 id="import">
- <title>Import</title>
-
- <para>Fotografie můžete importovat z vašeho pevného disku nebo fotoaparátu. Pokud importujete fotografie z fotoaparátu, F-Spot vždy vytvoří pouze jejich kopii a vyčištění paměti fotoaparátu nechá na vás. F-Spot standardně vytváří kopie fotografií importovaných z pevného disku. Pokud nechcete fotografie kopírovat, odškrtněte volbu <guilabel>Kopírovat</guilabel> v dialogu importu, nebo držte klávesu <keycap>Shift</keycap> při přesouvání fotografií do programu F-Spot.</para>
-
- <para>F-Spot standardně kopíruje vaše fotografie do adresáře <filename class="directory">~/Photos</filename>. Adresář, který F-Spot používá můžete změnit v dialogu <guilabel>Nastavení</guilabel> (<menuchoice><guimenu>Upravit</guimenu><guimenuitem>Nastavení</guimenuitem></menuchoice>). Odškrtnutím volby <guilabel>Kopírovat soubory do složky Photos</guilabel> také můžete zakázat fyzické kopírování obrázků do tohoto adresáře. F-Spot v tomto případě vytvoří pouze odkaz na existující soubory.</para>
- <para>Pokud existuje byť jen malá možnost, že ze zvoleného zdroje byly už některé fotografie dříve importovány, můžete použít volbu <guilabel>Detect duplicates</guilabel>. V tomto případě se F-Spot pokusí zjistit, zda už je daný obrázek v databázi a nová kopie by tudíž neměla být importována.</para>
- <para>Mají-li všechny fotografie, které současně importujete, něco společného (např. pocházejí ze stejné akce, nebo mají nějakou společnou charakteristiku), můžete pro ně vytvořit štítek pomocí kterého je v budoucnu snáze najdete. Při tvorbě nového štítku postupujte dle instrukcí, které popisuje <xref linkend="tag"/>. Ve chvíli, kdy importujete fotografie, zaškrtněte <guilabel>Připojit štítky</guilabel> a zvolte štítek, který jste vytvořili.</para>
-
- <tip>
- <para>
- F-Spot uses a database stored at
- <filename>~/.config/f-spot/photos.db</filename>. Note, to access it, use
- the sqlite3 command. You can also manually specify path to a database by
- running F-Spot with <option>-b</option> option.
- </para>
- </tip>
-
- <para>Po ukončení importu F-Spot zobrazí všechny obrázky, které byly součástí posledního importovaného filmu. <xref linkend="enjoying-search"/> vám dá více informací o zacházení s importovanými filmy.</para>
- <para>Importovat můžete také přímo aplikací Mozilla <ulink url="http://www.mozilla.com/en-US/firefox/">Firefox</ulink> nebo <ulink url="http://www.mozilla.com/en-US/thunderbird/">Thunderbird</ulink> s využitím rozšíření <ulink url="https://addons.mozilla.org/en-US/firefox/addon/7091">Firefox</ulink> and <ulink url="https://addons.mozilla.org/en-US/thunderbird/addon/7011">Thunderbird</ulink> F-Spot importer, která vytvořil <ulink url="http://personalpages.tds.net/~cdovel/">Pizzach</ulink>.</para>
- </sect1>
-
- <sect1 id="edit">
- <title>Úpravy</title>
-
- <para>Dvojklikem nebo stlačením klávesy Enter na obrázku přejdete do módu úprav. V tomto režimu můžete přizpůsobit jas a barvy obrázku, odstranit červené oči, nebo fotografii oříznout.</para>
-
- <sect2 id="edit-versions">
- <title>Verze</title>
-
- <para>
- When you edit your photos, a new copy (called a version) is created,
- so your original is never altered. After your first edit to a photo, subsequent
- edits will modify the same version. If you want to create multiple versions
- of your photo, perhaps with different cropping or coloring, you can do so
- via the <menuchoice><guimenu>File</guimenu>
- <guimenuitem>Create new version</guimenuitem></menuchoice> option.
- </para>
- </sect2>
-
- <sect2 id="edit-crop">
- <title>Ořez</title>
-
- <para>
- Cropping an image is a great way to improve the quality of a photograph by
- change how it is framed. You crop a photo by selecting the part of the photo
- you want to keep. If you want your photo to be the exact dimensions necessary
- for a certain print size, you can constrain the kind of selection F-Spot will allow
- you to draw by choosing the appropriate size from the constraint drop down.
- See the <xref linkend="edit-remove-red-eye"/> below for details on making
- a selection on your photo.
- </para>
- <figure>
- <title>Nástroj Ořez</title>
- <mediaobject>
- <imageobject>
- <imagedata fileref="figures/f-spot-crop.png"/>
- </imageobject>
- </mediaobject>
- </figure>
- <para>Poté co jste označili oblast ořezu, musíte kliknout na tlačítko ořez pod obrázkem a tím provést vlastní oříznutí. Pokud pracujete s originálem, ořez vytvoří novou verzi fotografie.</para>
- </sect2>
-
- <sect2 id="edit-straighten">
- <title>Narovnání</title>
-
- <para>Efekt Narovnání je nástroj k vyrovnání fotografie, který je velmi užitečný pokud fotografujete krajinu bez stativu a nepodařilo se vám udržet horizont v rovině. Nástroj otáčí obrázek pod zadaným úhlem a automaticky provádí ořez tak, že výsledkem je vždy perfektní pravoúhelník.</para>
- <figure>
- <title>Nástroj Narovnání</title>
- <mediaobject>
- <imageobject>
- <imagedata fileref="figures/f-spot-straighten.png"/>
- </imageobject>
- </mediaobject>
- </figure>
- </sect2>
-
- <sect2 id="edit-adjust-colors">
- <title>Úprava barev</title>
-
- <para>Chcete-li upravit jas, kontrast a barvy fotografie, musíte nejprve kliknout na ikonu <guibutton>Upravit barvy fotografie</guibutton> aby se otevřelo dialogové okno úprav. Poté můžete měnit nastavení a uložit je tlačítkem <guibutton>Budiž</guibutton>.</para>
- <figure>
- <title>Nástroj Úprava barev</title>
- <mediaobject>
- <imageobject>
- <imagedata fileref="figures/f-spot-adjust-colors.png"/>
- </imageobject>
- </mediaobject>
- </figure>
- </sect2>
-
- <sect2 id="edit-auto-color">
- <title>Automatické barvy</title>
-
- <para>Tento efekt automaticky přizpůsobí úrovně barev a vytvoří rozumně barevně vyvážený snímek. Nejlépe poslouží u fotografií pořízených s automatickým vyvážením bílé u nichž fotoaparát neodvedl dobrou práci.</para>
- <figure>
- <title>Automatické barvy</title>
- <mediaobject>
- <imageobject>
- <imagedata fileref="figures/f-spot-autocolor.png"/>
- </imageobject>
- </mediaobject>
- </figure>
- </sect2>
-
- <sect2 id="edit-desaturate">
- <title>Odbarvení</title>
-
- <para>Chcete-li z barevné fotografie vytvořit černobílou, otevřete vybranou fotografii a stiskněte tlačítko <guibutton>Odbarvení</guibutton>.</para>
- <figure>
- <title>Nástroj Odbarvení</title>
- <mediaobject>
- <imageobject>
- <imagedata fileref="figures/f-spot-desaturate.png"/>
- </imageobject>
- </mediaobject>
- </figure>
- </sect2>
-
- <sect2 id="edit-sepia">
- <title>Sépie</title>
-
- <para>Chcete-li vytvořit zdání staré fotografie, otevřete zvolený obrázek a stiskněte tlačítko <guibutton>Sépie</guibutton>.</para>
- <figure>
- <title>Nástroj Odbarvení</title>
- <mediaobject>
- <imageobject>
- <imagedata fileref="figures/f-spot-sepia.png"/>
- </imageobject>
- </mediaobject>
- </figure>
- </sect2>
-
- <sect2 id="edit-remove-red-eye">
- <title>Odstranění červených očí</title>
-
- <para>
- To remove redeye from a photo, you need to select a zone containing
- the eyes. You may want to zoom in on the image to accurately select
- the eyes in the photo. You should be able to correct both eyes on the
- same person in one shot, or even the eyes from multiple people at once.
- If this doesn't work for you, or the selected zone contains some vivid
- red parts (lips, ...) you'll probably have to correct one red eye at a time.
- </para>
- <para>
- To make your selection, click one corner of the rectangle that will be your
- selection, and drag your mouse to the diagonal corner and release it. You
- can resize your selection by dragging its edges, and you can move it by
- clicking in the middle of it and dragging it to where you want it.
- </para>
- <para>
- Once you have selected a zone, you can remove the red from it by
- clicking the red-eye button beneath the photo.
- </para>
- <figure>
- <title>Nástroj Červené oči</title>
- <mediaobject>
- <imageobject>
- <imagedata fileref="figures/f-spot-red-eye.png"/>
- </imageobject>
- </mediaobject>
- </figure>
- <tip>
- <para>
- You can change the threshold for redeyes detection by changing
- the gconf key
- <filename class="directory">/apps/f-spot/edit/redeye_threshold</filename>.
- </para>
- </tip>
- </sect2>
-
- <sect2 id="edit-soft-focus">
- <title>Doostření</title>
-
- <para>
- In photography sharpening one region of a picture, while blurring
- all the rest, is a way to make an emphasis and grab attention.
- It is achieved by using a lens that allows shooting with a short
- distance in front of and beyond the subject that appears to be in
- focus. Soft focus effect is a way to emulate such a lens.
- </para>
- <figure>
- <title>Nástroj Doostření</title>
- <mediaobject>
- <imageobject>
- <imagedata fileref="figures/f-spot-soft-focus.png"/>
- </imageobject>
- </mediaobject>
- </figure>
- <para>
- Click to choose central point of the area you want to be in focus
- and adjust amount of blurring, then click <guibutton>OK</guibutton>.
- </para>
- </sect2>
-
- <sect2 id="edit-sharpen">
- <title>Zaostření</title>
-
- <para>
- Out-of-focus photographs and most digitized images often need a
- sharpness correction. The Unsharp Mask effect sharpens edges of
- the elements without increasing noise or blemish. To sharpen a
- photo choose <menuchoice><guimenu>Edit</guimenu>
- <guimenuitem>Sharpen...</guimenuitem></menuchoice> and specify the
- following values:
- </para>
-
- <itemizedlist>
- <listitem>
- <para>
- <parameter class="option">Amount</parameter> — strength of sharpening.
- </para>
- </listitem>
- <listitem>
- <para>
- <parameter class="option">Radius</parameter> — how many pixels on either
- side of an edge will be affected by sharpening. High resolution images
- allow higher radius.
- </para>
- </listitem>
- <listitem>
- <para>
- <parameter class="option">Threshold</parameter> — the minimum difference
- in pixel values that indicates an edge where sharpen must be applied.
- This helps avoiding creation of blemishes in face, sky or water surface.
- </para>
- </listitem>
- </itemizedlist>
- </sect2>
-
- <sect2 id="edit-describe">
- <title>Popis</title>
-
- <para>Po kliknutí na textové pole pod obrázkem, můžete také vložit popis fotografie.</para>
- <para>Poté co jste označili oblast ořezu, musíte kliknout na tlačítko ořez pod obrázkem a tím provést vlastní oříznutí. Pokud pracujete s originálem, ořez vytvoří novou verzi fotografie.</para>
- </sect2>
-
- <sect2 id="edit-adjust-time">
- <title>Úprava času</title>
-
- <para>
- In both 'browse' or 'edit' modes, you can adjust the time of one
- or multiple pictures (<menuchoice><guimenu>Edit</guimenu>
- <guimenuitem>Adjust Time</guimenuitem></menuchoice>). Adjusting
- the time of multiple pictures at once helps you shift all an import
- roll if, e.g. the time on your camera is badly set or if you forgot
- to change it according to DST.
- </para>
- </sect2>
- </sect1>
-
- <sect1 id="tag">
- <title>Štítek</title>
- <para>
- F-Spot enables you to organize and enjoy your photos by associating them
- with various user-customizable tags. A tag is a merely a label. F-Spot comes
- with default tags to get you started; you are free to change them and
- add new ones. For example, if you want to create a tag for specific event, you
- can create a new tag named after that event under the Events tag.
- </para>
- <para>K označení fotografie štítkem vede mnoho cest:</para>
- <itemizedlist>
- <listitem>
- <para>přetažením fotografie na štítek</para>
- </listitem>
- <listitem>
- <para>přetažením štítku na fotografii</para>
- </listitem>
- <listitem>
- <para>prostřednictvím kontextové nabídky fotografie</para>
- </listitem>
- <listitem>
- <para>prostřednictvím nabídky Štítky a Upravit</para>
- </listitem>
- <listitem>
- <para>
- by typing them in. Press <keycap>t</keycap> to pop up the tag
- entry bar. Here you can enter the tags, separated by commas.
- </para>
- <para>
- You can also use auto-completion in this entry bar: After
- entering the beginning of a tag name, press
- <keycap>Tab</keycap> to see the first possible completion. You can
- cycle between other possible completions by pressing
- <keycap>Tab</keycap> again, and backwards with
- <keycombo action="simul"><keycap>Shift</keycap><keycap>Tab</keycap></keycombo>.
- To confirm the suggested completion and enter a new tag, press
- <keycap>,</keycap>. By pressing <keycap>Enter</keycap> you
- leave the tag entry bar, possibly confirming the current
- completion. To abort the auto completion, just keep on typing.
- </para>
- </listitem>
- </itemizedlist>
- <para>
- The first photo you associate with a tag will be used for that tag's icon.
- You can always edit a tag's name, parent tag, and icon by right clicking
- on it and choosing <guilabel>Edit tag</guilabel>.
- </para>
- <para>
- You can change a tag's parent by dragging and dropping it where you like.
- Also, you can edit the name of a tag by selecting it and pressing
- <keycap>F2</keycap>. Lastly, if you have the tag tree widget focused
- (e.g. you just clicked on a tag), you can start typing the name of a tag, and
- all the expanded tags in the list will be searched and you'll jump to any
- matching ones.
- </para>
-
- <para>
- You can also change size of tag icons in the sidebar or even make tag
- icons invisible by selecting preferred option from <menuchoice>
- <guimenu>View</guimenu><guimenuitem>Tag Icons</guimenuitem></menuchoice>
- menu.
- </para>
-
- <tip>
- <para>
- F-Spot can write tags as metadata fields into JPEG files. Tags for
- various RAW files, PNG, TIFF, and others are written to F-Spot's
- database. You will have to re-tag these files if you re-import your
- collection.
- </para>
- </tip>
- </sect1>
- </chapter>
-
- <chapter id="enjoying">
- <title>Požitek z fotografií</title>
- <sect1 id="enjoying-browse">
- <title>Procházení</title>
- <para>
- You can use the slider widget to browse your photos by month or by
- directory. To change this setting, go to <menuchoice>
- <guimenu>View</guimenu><guimenuitem>Arranged By</guimenuitem>
- </menuchoice>.
- </para>
- </sect1>
- <sect1 id="enjoying-search">
- <title>Vyhledávání</title>
-
- <para>
- F-Spot uses search filters to help you better define search criteria.
- </para>
-
- <sect2 id="enjoying-search-tags">
- <title>Štítky</title>
-
- <para>
- You can start a search by double clicking or activating a tag from
- the tag list. Alternatively, you can show the find bar with <menuchoice>
- <guimenu>Find</guimenu><guimenuitem>Show Find Bar</guimenuitem></menuchoice>.
- With the find bar shown, you can drag tags from the tag view to the find bar.
- </para>
- <para>
- To find photos that are tagged with both of two tags, activate the first in
- the tag view or drag it onto the find bar, then drag the second tag and drop
- it on top of the first. You can also right click on the second tag in the tag
- view, or use the <guimenu>Find</guimenu> menu, and choose <guimenuitem>Find
- With...</guimenuitem> and select the first tag (or group of tags).
- </para>
- <para>
- You can drag a tag icon around on the find bar to change from finding it and
- another tag to finding it or another tag.
- </para>
- <para>
- You can search for photos that do not have a particular tag by double-clicking
- on a tag in the find bar. Alternatively, you can right-click a tag in the find
- bar and select <guimenuitem>Exclude</guimenuitem>.
- </para>
- <para>
- To remove a tag from the search, drag it away from the find bar, or right click
- and select <guimenuitem>Remove</guimenuitem>.
- </para>
- <para>
- By default, photos tagged <emphasis>Hidden</emphasis> will not be shown. You must
- explicitly include the <emphasis>Hidden</emphasis> tag in your search to show
- such photos.
- </para>
- </sect2>
-
- <sect2 id="enjoying-search-import-rolls">
- <title>Importované filmy</title>
- <para>
- F-Spot remembers what pictures were imported every now and then. Use
- <menuchoice><guimenu>Find</guimenu><guisubmenu>Import Roll</guisubmenu>
- <guimenuitem>Last import roll</guimenuitem></menuchoice> to limit search
- to last importing session or use <menuchoice><guimenu>Find</guimenu>
- <guisubmenu>Import Roll</guisubmenu><guimenuitem>Select Import Rolls...</guimenuitem>
- </menuchoice> to make a finer selection of imported photos:
- </para>
- <itemizedlist>
- <listitem>
- <para><parameter class="option">V</parameter> — vybrat fotografie z konkrétní importní relace</para>
- </listitem>
- <listitem>
- <para>
- <parameter class="option">After</parameter> — to select all photos imported begining with a particular importing session
- </para>
- </listitem>
- <listitem>
- <para><parameter class="option">Mezi</parameter> — vybrat všechny fotografieto importované mezi konkrétními importními relacemi</para>
- </listitem>
- </itemizedlist>
- <para>
- Every time you change settings of the filter, the amount of selected photos
- will appear in the bottom part of the dialog.
- </para>
- <para>
- When you apply Import Roll filter, in the Find bar you will see
- <guilabel>Find: Import Roll</guilabel>. Now you can add some other
- filter to finetune your selection.
- </para>
- <para>
- If you don't need the Import Roll filter anymore, choose <menuchoice>
- <guimenu>Find</guimenu><guisubmenu>Import Roll</guisubmenu>
- <guimenuitem>Clear roll filter</guimenuitem></menuchoice> to remove
- Import Roll from search criteria. You can also click the close button
- (<guibutton>X</guibutton>) of the search bar to discard all the current
- search options.
- </para>
- <tip>
- <para>
- The number of displayed rolls in the dialog is defined by the gconf key
- <filename class="directory">/apps/f-spot/import/gui_roll_history</filename>.
- Default value is 10.
- </para>
- </tip>
- </sect2>
-
- <sect2 id="enjoying-search-type-to-find">
- <title>Type-to-find</title>
- <para>
- There is also a type-to-find entry. Press <keycap>/</keycap> to open it. It cannot
- be used at the same time as the find bar. You can type queries such as "TagA and
- (TagB or (TagC and TagD))". At any point, if F-Spot recognizes what you've typed as
- a valid query, it will update your search. The <emphasis>not</emphasis> operator
- is not yet supported.
- </para>
-
- <para>
- This function will also search for the typed text into photos comments and filename.
- </para>
- </sect2>
- </sect1>
-
- <sect1 id="enjoying-fullscreen-mode-and-slideshows">
- <title>Celoobrazovkový režim a prezentace</title>
- <para>
- For fewer distractions and larger display, you can view your photos in full
- screen mode. You control when to show the next photo or to return to the
- previous. Enter fullscreen mode by pressing <keycap>F11</keycap> at
- any time or by pressing the button in the toolbar.
- </para>
- <figure>
- <title>Celá obrazovka</title>
- <mediaobject>
- <imageobject>
- <imagedata fileref="figures/f-spot-fullscreen.png"/>
- </imageobject>
- </mediaobject>
- </figure>
- <para>V režimu prezentace můžete sedět a prohlížet si své obrázky, které jsou automaticky zobrazovány. Prezentace začne po stisknutí tlačítka na panelu nástrojů.</para>
- <figure>
- <title>Prezentace</title>
- <mediaobject>
- <imageobject>
- <imagedata fileref="figures/f-spot-slideshow.png"/>
- </imageobject>
- </mediaobject>
- </figure>
- </sect1>
- </chapter>
-
- <chapter id="sharing">
- <title>Sdílení vašich fotografií</title>
-
- <abstract>
- <para>
- There are many ways to share your photos using F-Spot. All of the following
- methods will only share the photos you have selected when you run them.
- </para>
- </abstract>
-
- <sect1 id="sharing-e-mail">
- <title>E-mail</title>
- <para>Pomocí volby <menuchoice><guimenu>Soubor</guimenu><guimenuitem>Poslat e-mailem...</guimenuitem></menuchoice> v nabídce můžete odeslat fotografii elektronickou poštou přímo z aplikace F-Spot.</para>
- <note>
- <title>Poznámka 1</title>
- <para>Emailový program, který bude použit, je definován na úrovni GNOME. Výchozí aplikaci můžete změnit nástrojem <application>Preferované aplikace</application> zvolením <menuchoice><guimenu>Systém</guimenu><guisubmenu>Nastavení</guisubmenu></menuchoice> z nabídky GNOME.</para>
- </note>
- <note>
- <title>Poznámka 2</title>
- <para>
- If some of the photos you'd like to send by email are in a format
- that F-Spot can't write (e.g. RAW images), the size selection dialog
- will become insensitive and the originals will be sent.
- </para>
- </note>
- <tip>
- <para>
- If you're sending resized pictures, F-Spot will keep the modified versions
- somewhere in the <filename class="directory">/tmp</filename> directory for
- 30 seconds. It's not an issue with evolution, which makes it's own local
- copy of the attachments, but could be a bit shorter if you're using Thunderbird.
- You can change the delay by editing the gconf key
- <filename class="directory">/apps/f-spot/export/email/delete_timeout_seconds</filename>.
- </para>
- </tip>
- </sect1>
-
- <sect1 id="sharing-print">
- <title>Tisk</title>
- <para>Své fotografie vytisknete použitím volby <menuchoice><guimenu>Soubor</guimenu><guimenuitem>Tisk</guimenuitem></menuchoice> z hlavní nabídky.</para>
- </sect1>
-
- <sect1 id="sharing-burn-to-cd">
- <title>Vypálení na CD</title>
- <para>Své fotografie vypálíte na CD nebo DVD použitím volby <menuchoice><guimenu>Soubor</guimenu><guisubmenu>Exportovat do</guisubmenu><guimenuitem>CD</guimenuitem></menuchoice> v hlavní nabídce.</para>
- </sect1>
-
- <sect1 id="website-gallery-folder">
- <title>Vytvoření webové galerie nebo adresáře</title>
- <para>
- The
- <menuchoice><guimenu>File</guimenu><guimenuitem>Export</guimenuitem>
- <guimenuitem>Export to Folder</guimenuitem></menuchoice> feature
- gives you three ways to export your images.
- </para>
- <itemizedlist>
- <listitem>
- <para>
- <guilabel>Use Original</guilabel> exports your photos ready for use with
- Jakub Steiner's free <ulink url="http://jimmac.musichall.cz/original.php">
- Original Photo Gallery</ulink> software. If you are unsure about this option,
- it is probably not the right one for you.
- </para>
- </listitem>
- <listitem>
- <para>
- <guilabel>Use static HTML files</guilabel> exports your photos to an
- interactive website, ready for you to upload.
- </para>
- </listitem>
- <listitem>
- <para>
- <guilabel>Plain Files</guilabel> exports your images as files within directories,
- without putting them into a gallery.
- </para>
- </listitem>
- </itemizedlist>
- </sect1>
-
- <sect1 id="sharing-flickr-or-php-gallery">
- <title>Odeslání do vašich online galerií</title>
- <para>
- If you use Flickr, SmugMug, 23hq, Tabblo, Facebook, Zooomr or Picasa Web Album, you can post your files
- directly from F-Spot with the <menuchoice><guimenu>File</guimenu>
- <guisubmenu>Export</guisubmenu></menuchoice> menu, choosing corresponding submenu item.
- </para>
- <para>
- If you use the PHP software known as <ulink url="http://gallery.sourceforge.net/">
- Gallery</ulink>, you can post your photos to your existing album with the
- <menuchoice><guimenu>File</guimenu><guimenuitem>Export</guimenuitem>
- <guimenuitem>Export to Web Gallery</guimenuitem></menuchoice> menu.
- You must first enable the Remote module within your Gallery installation.
- </para>
- <note>
- <title>Poznámka pro uživatele Gallery 2.2</title>
- <para>
- The Remote plugin for Gallery should be 1.0.8 or newer.
- </para>
- </note>
- <para>
- <ulink url="http://pennave.sourceforge.net">PennAve</ulink> is a Python
- web-application that directly uses F-Spot's database to present a dynamic
- gallery of your photos and tags.
- </para>
- <para>
- <ulink url="http://www.conduit-project.org">Conduit</ulink> is an application
- that can sync photos that have a particular tag with your Flickr or Picasa
- Web Album web storage.
- </para>
- </sect1>
- </chapter>
-
- <chapter id="cms">
- <title>Správa barev</title>
-
- <sect1 id="cms-what-is-cms">
- <title>Co je správa barev</title>
-
- <para>
- When you capture a photo and look at it on a display, it looks different than
- on a camera's preview display or on any other display. It will also look
- different when you print it. This is because every device has unique color
- reproduction capabilities.
- </para>
-
- <para>
- Color management system (CMS) is a tool to achieve reliable color reproduction
- for both display and output (e.g. a printer). A CMS relies on color profiles
- to map original colors to the color that a device can reproduce so that colors
- will appear the same way everywhere — on a computer LCD monitor, on a print
- from your local photolab etc.
- </para>
- </sect1>
-
- <sect1 id="cms-what-is-icc-profile">
- <title>Co je barevný profil</title>
-
- <para>Barevný profil je soubor s koncovkou .icc ( proto je často zmiňován spíše jako ICC profil) nebo .icm který popisuje, jak odpovídají barvy používané zařízením univerzálnímu popisu barev.</para>
-
- <para>Existuje několik typů profilu:</para>
-
- <itemizedlist>
- <listitem>
- <para>Profil vstupního zařízení. To je profil fotoaparátu nebo profil, který připojují aplikace jako XSane ke skenovanému obrázku.</para>
- </listitem>
- <listitem>
- <para>Profil pracovního prostoru. To je profil, který popisuje barevný prostor, ve kterém jsou prováděny operace v rámci aplikace. Většinou jsou k tomu používány profily jako AdobeRGB1998 nebo ProPhotoRGB, které mají velmi široký gamut.</para>
- </listitem>
- <listitem>
- <para>Profil zobrazení. To je profil vašeho monitoru.</para>
- </listitem>
- <listitem>
- <para>Výstupní profil. Jedná se obvykle o profil vaší tiskárny.</para>
- </listitem>
- </itemizedlist>
-
- <para>V tuto chvíli je v programu F-Spot možné nastavit pouze profil zobrazení a výstupní profil. Všechny operace s barvami jsou prováděny v barevném prostoru sRGB.</para>
- </sect1>
-
- <sect1 id="cms-how-to-get-icc-profile">
- <title>Jak získat profil monitoru/tiskárny</title>
-
- <para>Je několik cest jak získat barevný profil.</para>
-
- <sect2 id="cms-icc-from-cd-or-internet">
- <title>Z CD nebo z Internetu</title>
-
- <para>
- Many hardware manufacturers put color profiles into CD in the bundle.
- If you have one (from monitor or printer), you can use it. Or you can
- download it from the Internet (usually, from support section of the
- manufacturer's web site). Some camera manufacturers (Nikon, Canon)
- also provide ICC profiles.
- </para>
- </sect2>
-
- <sect2 id="cms-icc-from-calibrating-and-profiling">
- <title>Kalibrace a profilování</title>
-
- <para>
- Best results can be achieved by calibrating and profiling devices with
- a measurement device. It is not so difficult, but it means that you need
- a spectrophotometer to do all measurements and create an ICC profile.
- </para>
-
- <para>
- If you are on Windows or Mac OS X, you can use manufacturer's software
- coming with a spectrophotometer. On Linux you will have to use either
- <ulink url="http://www.argyllcms.com">Argyll</ulink>, which is a set of
- versatile command line tools, or
- <ulink url="http://lprof.sourceforge.net/">LProf</ulink>, which has a
- graphical user interface.
- </para>
- <para>
- Please refer to documentation of third party hardware and software
- vendors for details.
- </para>
- </sect2>
-
- <sect2 id="cms-icc-from-embedding">
- <title>Vkládání</title>
-
- <para>Některé formáty obrázků (jako TIFF, JPEG, PNG ...) mohou obsahovat vložený barevný profil. Pokud je v F-Spot povolena správa barev, je barevný profil, nalezený v obrázku, brán v potaz.</para>
- </sect2>
- </sect1>
-
- <sect1 id="cms-how-to-use">
- <title>Jak používat správu barev v F-Spot</title>
-
- <para>Správa barev v aplikaci F-Spot umí v tuto chvíli používat pouze RGB profily (a jiné profily v F-Spot nemůžete vidět).</para>
-
- <itemizedlist>
- <listitem>
- <para>
- Copy your color profiles into the
- <filename class="directory">/usr/share/color/icc</filename> or
- <filename class="directory">/usr/local/share/color/icc</filename>
- directory.
- </para>
- </listitem>
- <listitem>
- <para>Správu barev povolíte v nastavení dostupném v nabídce <menuchoice><guimenu>Upravit</guimenu><guimenuitem>Nastavení</guimenuitem></menuchoice>.</para>
- </listitem>
- <listitem>
- <para>Vyberte profil pro režimy <guilabel>Zobrazovat</guilabel> a <guilabel>Výstup</guilabel>.</para>
- </listitem>
- </itemizedlist>
-
- <tip>
- <para>Pro nahrání ICC profilu monitoru můžete také použít program <ulink url="http://burtonini.com/blog/computers/xicc">xicc</ulink>. Nahraný profil můžete zaškrtnutím položky <guilabel>Zkusit použít systémový profil obrazovky</guilabel> použít s F-Spot.</para>
- </tip>
- </sect1>
- </chapter>
-
- <chapter id="extend">
- <title>Rozšíření funkcí</title>
-
- <sect1 id="extend-what-extensions-are">
- <title>Co jsou rozšíření</title>
-
- <para>Rozšíření jsou vytvářena s cílem přidat do aplikace F-Spot nové funkce. F-Spot podporuje dva druhy rozšíření: exportéři (které umožní export fotografií na webové stránky nebo do datových úložišť) a nástroje (které přístupňují nové cesty v korekci barev, nalezení duplicitních fotografií, apod.). Rozšíření jsou dodávána ve formě rozšiřujících modulů.</para>
- <para>Aby nebylo stále znovu vymýšleno kolo, mohou rozšíření používat funkce dalších rozšiřujících modulů. To znamená, že rozšíření nebude pracovat, pokud další modul není nainstalován. Tento koncept závislostí znamená že,</para>
- <itemizedlist>
- <listitem>
- <para>nemůžete instalovat rozšíření, pokud závisí na jiném, které ale není instalováno v systému</para>
- </listitem>
- <listitem>
- <para>nemůžete odstranit rozšíření, na němž závisí jiný modul</para>
- </listitem>
- </itemizedlist>
- </sect1>
-
- <sect1 id="extend-managing-extensions">
- <title>Správa rozšíření</title>
-
- <para>Správa rozšíření je dostupná po zvolení <menuchoice><guimenu>Upravit</guimenu><guimenuitem>Spravovat rozšíření</guimenuitem></menuchoice> z nabídky.</para>
-
- <sect2 id="extend-managing-extensions-managing-extension-repositories">
- <title>Správa repozitářů rozšíření</title>
-
- <para>Zjednodušeně řečeno, repozitáře jsou úložiště rozšíření. Mohou být jak síťového tak i lokálního charakteru. Potřebujete-li přidat nový repozitář, klikněte na tlačítko Repozitáře, vyberte typ repozitáře, který chcete přidat, a vyplňte adresu URL nebo cestu. Pokud zadaná adresa URL nebo cesta neobsahují soubor s popisem (index) rozšíření, aplikace na tuto skutečnost upozorní varovným hlášením.</para>
- <para>Potřebujete-li repozitář odebrat, klikněte znovu na tlačítko <guibutton>Repozitáře</guibutton> a vybrerte repozitář který má být odstraněn. Operaci dokončíte kliknutím na tlačítko <guibutton>Odstranit</guibutton>.</para>
- </sect2>
-
- <sect2 id="extend-managing-extensions-installing-and-updating-extensions">
- <title>Instalace a aktualizace rozšíření</title>
-
- <para>Do instalace rozšíření se přepnete tlačítkem <guibutton>Instalovat rozšíření...</guibutton>. V novém okně poté</para>
- <orderedlist>
- <listitem>
- <para>Vyberte mód instalace. Rozšíření budou vybírána ze všech známých nebo pouze z dostupných repozitářů.</para>
- </listitem>
- <listitem>
- <para>Vyberte rozšiřující moduly, které chcete vidět: Všechny, Pouze nové, Pouze aktualizace.</para>
- </listitem>
- <listitem>
- <para>Aktualizaci seznamu dostupných rozšíření, dle nastavených kriterií, spustíte kliknutím na tlačítko <guibutton>Aktualizovat</guibutton>.</para>
- </listitem>
- <listitem>
- <para>Vyberte rozšíření, která chcete instalovat/aktualizovat. Pokud chcete vidět shrnutí zvoleného balíčku, klikněte na tlačítko <guibutton>Informace</guibutton>.</para>
- </listitem>
- <listitem>
- <para>Instalaci spustíte kliknutím na tlačítko <guibutton>Vpřed</guibutton></para>
- </listitem>
- </orderedlist>
- </sect2>
-
- <sect2 id="extend-managing-extensions-enabling-and-disabling-extensions">
- <title>Aktivace a deaktivace rozšíření</title>
-
- <para>Kterýkoli rozšiřující modul může být dočasně povolen nebo zakázán, pokud například není dostatečně stabilní při zpracovávání většího množství fotografií nebo pokud modul naruší nabídku aplikace.</para>
- <para>
- In the <guilabel>Manage Extensions</guilabel> dialog select the extension
- package and click <guibutton>Enable</guibutton> or <guibutton>Disable</guibutton>.
- </para>
- </sect2>
-
- <sect2 id="extend-managing-extensions-removing-extensions">
- <title>Odstranění rozšíření</title>
-
- <para>Rozšíření, které nepotřebujete, může být úplně odebráno ze systému. V okně <guilabel>Spravovat rozšíření</guilabel> vyberte rozšiřující modul, který chcete odebrat a klikněte na tlačítko <guibutton>Odebrat</guibutton>.</para>
- </sect2>
-
- <sect2 id="extend-managing-extensions-reading-summary-of-extensions">
- <title>Zobrazení shrnutí rozšíření</title>
-
- <para>Každý rozšiřující modul obsahuje metadata, která poskytují o daném rozšíření tyto informace:</para>
-
- <orderedlist>
- <listitem>
- <para>Popis, který obvykle pokrývá smysl rozšíření</para>
- </listitem>
- <listitem>
- <para>Verze</para>
- </listitem>
- <listitem>
- <para>Autor</para>
- </listitem>
- <listitem>
- <para>Závislosti</para>
- </listitem>
- </orderedlist>
-
- <para>V okně <guilabel>Spravovat rozšíření</guilabel> vyberte rozšiřující modul, jehož shrnutí vás zajímá, a klikněte na tlačítko <guibutton>Informace</guibutton>.</para>
- </sect2>
- </sect1>
-
- <sect1 id="extend-developing-extensions">
- <title>Vývoj rozšíření</title>
-
- <para>Informace o vývoji vašich vlastních rozšíření pro F-Spot naleznete v dokumentu <ulink url="http://f-spot.org/Extend_F-Spot">Extend F-Spot</ulink>.</para>
- </sect1>
- </chapter>
-
- <chapter id="shortcuts">
- <title>Klávesové zkratky</title>
-
- <sect1 id="Global-Shortcuts">
- <title>Globální zkratky</title>
- <informaltable frame="all">
- <tgroup cols="2">
- <thead>
- <row>
- <entry>Klávesa</entry>
- <entry>Činnost</entry>
- </row>
- </thead>
- <tbody>
- <row>
- <entry>
- <keycap>[</keycap>
- </entry>
- <entry>Otočit označené fotografie doleva (proti směru hodinových ručiček)</entry>
- </row>
- <row>
- <entry>
- <keycap>]</keycap>
- </entry>
- <entry>Otočit označené fotografie doprava (po směru hodinových ručiček)</entry>
- </row>
- <row>
- <entry>
- <keycap>Del</keycap>
- </entry>
- <entry>Odstranit označené fotografie z katalogu programu</entry>
- </row>
- <row>
- <entry>
- <keycombo><keycap>Shift</keycap><keycap>Del</keycap></keycombo>
- </entry>
- <entry>
- Delete selected photos permanently from the drive. If possible, they will moved to trash.
- </entry>
- </row>
-
- <row>
- <entry>
- <keycap>t</keycap>
- </entry>
- <entry>Zobrazit nebo upravit štítky označených fotografií</entry>
- </row>
- <row>
- <entry>
- <keycap>F11</keycap>
- </entry>
- <entry>Zobrazit na celou obrazovku</entry>
- </row>
- <row>
- <entry>
- <keycombo><keycap>Ctrl</keycap><keycap>I</keycap></keycombo>
- </entry>
- <entry>Zobrazí informace o fotografii</entry>
- </row>
- <row>
- <entry>
- <keycombo><keycap>Ctrl</keycap><keycap>= </keycap></keycombo>
- </entry>
- <entry>Oddálit</entry>
- </row>
- <row>
- <entry>
- <keycombo><keycap>Ctrl</keycap><keycap>Mínus</keycap></keycombo>
- </entry>
- <entry>Přiblížit</entry>
- </row>
- <row>
- <entry>
- <keycombo><keycap>Ctrl</keycap><keycap>N</keycap></keycombo>
- </entry>
- <entry>Importovat fotografie</entry>
- </row>
- <row>
- <entry>
- <keycombo><keycap>Alt</keycap><keycap>0-5</keycap></keycombo>
- </entry>
- <entry>Alt plus číslo od 0 do 5 - hodnocení označených obrázků</entry>
- </row>
- </tbody>
- </tgroup>
- </informaltable>
- </sect1>
-
- <sect1 id="shortcuts-browse-mode">
- <title>Režim procházení</title>
- <informaltable frame="all">
- <tgroup cols="2">
- <thead>
- <row>
- <entry>Klávesa</entry>
- <entry>Činnost</entry>
- </row>
- </thead>
- <tbody>
- <row>
- <entry>
- <keycombo><keycap>Ctrl</keycap><keycap>A</keycap></keycombo>
- </entry>
- <entry>Označit vše</entry>
- </row>
- <row>
- <entry>
- <keycombo><keycap>Ctrl</keycap><keycap>Shift</keycap>
- <keycap>A</keycap></keycombo>
- </entry>
- <entry>Zrušit označení</entry>
- </row>
- <row>
- <entry>Šipky nebo <keycap>H</keycap>, <keycap>J</keycap>, <keycap>K</keycap>, <keycap>L</keycap></entry>
- <entry>Posunout střed</entry>
- </row>
- <row>
- <entry><keycap>Ctrl</keycap>-šipka</entry>
- <entry>Posunout střed bez změny výběru</entry>
- </row>
- <row>
- <entry>
- <keycap>Mezerník</keycap>
- </entry>
- <entry>Vybrat nebo zrušit výběr fotografii ve středu</entry>
- </row>
- <row>
- <entry>
- <keycombo><keycap>Shift</keycap>
- <keycap>Šipka</keycap></keycombo>
- </entry>
- <entry>Změna označení fotografií</entry>
- </row>
- <row>
- <entry>
- <keycombo><keycap>Ctrl</keycap><keycap>Shift</keycap>
- <keycap>Pravá nebo levá šipka</keycap></keycombo>
- </entry>
- <entry>Přidat/odebrat všechny fotografie v řádku ve směru šipky do/z výběru</entry>
- </row>
- <row>
- <entry>
- <keycap>V</keycap>
- </entry>
- <entry>Otevřít větší náhled obrázku označeného myší</entry>
- </row>
- <row>
- <entry>
- <keycombo><keycap>Shift</keycap><keycap>V</keycap></keycombo>
- </entry>
- <entry>Otevřít větší náhled a histogram obrázku označeného myší</entry>
- </row>
- </tbody>
- </tgroup>
- </informaltable>
- </sect1>
-
- <sect1 id="shortcuts-tag">
- <title>Štítkování</title>
- <informaltable frame="all">
- <tgroup cols="2">
- <thead>
- <row>
- <entry>Klávesa</entry>
- <entry>Činnost</entry>
- </row>
- </thead>
- <tbody>
- <row>
- <entry>
- <keycap>F2</keycap>
- </entry>
- <entry>Přejmenovat zvolený štítek</entry>
- </row>
- <row>
- <entry>
- <keycombo><keycap>Ctrl</keycap><keycap>T</keycap></keycombo>
- </entry>
- <entry>Připojit štítek k výběru</entry>
- </row>
- <row>
- <entry>n/a</entry>
- <entry>Tažením štítky přemístíte</entry>
- </row>
- <row>
- <entry>n/a</entry>
- <entry>Psaním názvu na klávesnici se na štítek přemístíte (funguje pouze pokud je štítek viditelný/rozbalený)</entry>
- </row>
- </tbody>
- </tgroup>
- </informaltable>
- </sect1>
-
- <sect1 id="shortcuts-edit-mode">
- <title>Edit Mode Shortcuts</title>
- <informaltable frame="all">
- <tgroup cols="2">
- <thead>
- <row>
- <entry>Klávesa</entry>
- <entry>Činnost</entry>
- </row>
- </thead>
- <tbody>
- <row>
- <entry><keycap>Page Up</keycap>, <keycap>Backspace</keycap>, <keycap>B</keycap></entry>
- <entry>Přejít na předcházející fotografii</entry>
- </row>
- <row>
- <entry><keycap>Page Down</keycap>, <keycap>Mezerník</keycap>, <keycap>N</keycap></entry>
- <entry>Přejít na následující fotografii</entry>
- </row>
- <row>
- <entry>Šipky nebo <keycap>H</keycap>, <keycap>J</keycap>, <keycap>K</keycap>, <keycap>L</keycap></entry>
- <entry>Přejít na předchozí/následující fotografii nebo pohyb po zvětšené fotografii</entry>
- </row>
- <row>
- <entry>
- <keycap>R</keycap>
- </entry>
- <entry>
- Go to a random photo
- </entry>
- </row>
- <row>
- <entry>
- <keycap>f</keycap>
- </entry>
- <entry>Zobrazit na celou obrazovku</entry>
- </row>
- <row>
- <entry>
- <keycap>0</keycap>
- </entry>
- <entry>Přizpůsobit obrázek velikosti obrazovky</entry>
- </row>
- <row>
- <entry>
- <keycap>1</keycap>
- </entry>
- <entry>Faktor zvětšení 1.0 (1 obrazový bod na bod obrázku)</entry>
- </row>
- <row>
- <entry>
- <keycap>2</keycap>
- </entry>
- <entry>Faktor zvětšení 2.0 (4 obrazové body na bod obrázku)</entry>
- </row>
- <row>
- <entry>
- <keycap>Escape</keycap>
- </entry>
- <entry>Návrat do režimu procházení</entry>
- </row>
- <row>
- <entry>
- <keycap>V</keycap>
- </entry>
- <entry>Prohlížet fotografii zvětšovacím sklem (lupa). Deaktivuje se dvojklikem na tlačítko Lupa nebo opětovným stisknutím <keycap>V</keycap>.</entry>
- </row>
- <row>
- <entry><keycap>Shift</keycap>-kolečko myši</entry>
- <entry>Rychlejší pohyb filmového pásu</entry>
- </row>
- <row>
- <entry>
- <keycap>i</keycap>
- </entry>
- <entry>Přepínání viditelnosti informačního okna ''(pouze v celoobrazovkovém režimu)''</entry>
- </row>
- </tbody>
- </tgroup>
- </informaltable>
- </sect1>
- </chapter>
-
-</book>
diff --git a/docs/da/da.po b/docs/da/da.po
deleted file mode 100644
index 1f23cf7..0000000
--- a/docs/da/da.po
+++ /dev/null
@@ -1,610 +0,0 @@
-msgid ""
-msgstr ""
-"Project-Id-Version: f-spot doc\n"
-"POT-Creation-Date: 2007-01-23 17:45+0000\n"
-"PO-Revision-Date: 2007-02-20 13:46+0200\n"
-"Last-Translator: Peter Bach <bach.peter at gmail.com>\n"
-"Language-Team: Danish <bach.peter at gmail.com>\n"
-"MIME-Version: 1.0\n"
-"Content-Type: text/plain; charset=UTF-8\n"
-"Content-Transfer-Encoding: 8bit\n"
-
-#. When image changes, this message will be marked fuzzy or untranslated for you.
-#. It doesn't matter what you translate it to: it's not used at all.
-#: C/f-spot.xml:279(None)
-msgid "@@image: 'figures/f-spot-fullscreen.png'; md5=09f09d717428f52309dc73c68b6ccd09"
-msgstr "@@image: 'figures/f-spot-fullscreen.png'; md5=09f09d717428f52309dc73c68b6ccd09"
-
-#. When image changes, this message will be marked fuzzy or untranslated for you.
-#. It doesn't matter what you translate it to: it's not used at all.
-#: C/f-spot.xml:292(None)
-msgid "@@image: 'figures/f-spot-slideshow.png'; md5=43ff510a9aa8d183eba70792066ca36b"
-msgstr "@@image: 'figures/f-spot-slideshow.png'; md5=43ff510a9aa8d183eba70792066ca36b"
-
-#: C/f-spot.xml:5(title)
-msgid "The F-Spot Manual"
-msgstr ""
-
-#: C/f-spot.xml:7(para)
-#: C/f-spot.xml:9(subtitle)
-msgid "This is the user manual for F-Spot, a GNOME personal photo manager."
-msgstr ""
-
-#: C/f-spot.xml:11(year)
-msgid "2007"
-msgstr "2007"
-
-#: C/f-spot.xml:12(holder)
-msgid "Aaron Bockover, Gabriel Burt, Miguel de Icaza, Bengt Thuree"
-msgstr "Aaron Bockover, Gabriel Burt, Miguel de Icaza, Bengt Thuree"
-
-#: C/f-spot.xml:15(publishername)
-msgid "GNOME Documentation Project"
-msgstr "Dokumentationsprojekt för GNOME"
-
-#: C/f-spot.xml:19(firstname)
-msgid "Miguel"
-msgstr "Miguel"
-
-#: C/f-spot.xml:20(surname)
-msgid "de Icaza"
-msgstr "de Icaza"
-
-#: C/f-spot.xml:23(firstname)
-msgid "Aaron"
-msgstr "Aaron"
-
-#: C/f-spot.xml:24(surname)
-msgid "Bockover"
-msgstr "Bockover"
-
-#: C/f-spot.xml:27(firstname)
-msgid "Bengt"
-msgstr "Bengt"
-
-#: C/f-spot.xml:28(surname)
-msgid "Thuree"
-msgstr "Thuree"
-
-#: C/f-spot.xml:31(firstname)
-msgid "Gabriel"
-msgstr "Gabriel"
-
-#: C/f-spot.xml:32(surname)
-msgid "Burt"
-msgstr "Burt"
-
-#: C/f-spot.xml:35(firstname)
-msgid "Stephane"
-msgstr "Stephane"
-
-#: C/f-spot.xml:36(surname)
-msgid "Delcroix"
-msgstr "Delcroix"
-
-#: C/f-spot.xml:42(revnumber)
-msgid "0.2"
-msgstr "0.2"
-
-#: C/f-spot.xml:43(date)
-msgid "2007-01-17"
-msgstr "2007-01-17"
-
-#: C/f-spot.xml:49(title)
-msgid "Organizing your photos"
-msgstr ""
-
-#: C/f-spot.xml:52(title)
-msgid "Import"
-msgstr ""
-
-#: C/f-spot.xml:54(para)
-msgid "You can import photos from your hard drive or your camera. When you import your photos into F-Spot from your camera, it will always make a copy of them, leaving you free to clear your camera's memory. By default, F-Spot will make a copy of photos imported from your hard drive. Uncheck the <guilabel>Copy</guilabel> option on the import dialog or hold <keycap>Shift</keycap> when dragging photos into F-Spot if you do not wish to copy them from your hard drive."
-msgstr ""
-
-#: C/f-spot.xml:64(para)
-msgid "If all the photos you are importing at one time are from a particular event, or have some other characteristic in common, you can create a tag for them so you can later find them with ease. To do this, follow the instructions below to <ulink url=\"tag\">create a new tag</ulink>, then when you are importing them, check the button for <guilabel>Attach Tag</guilabel> and choose the tag you created."
-msgstr ""
-
-#: C/f-spot.xml:75(title)
-msgid "Edit"
-msgstr ""
-
-#: C/f-spot.xml:77(para)
-msgid "If you double click or press enter on an image, you enter Edit mode, where you can remove red-eye, crop, and adjust brightness and colors."
-msgstr ""
-
-#: C/f-spot.xml:83(title)
-msgid "Versions"
-msgstr "Versioner"
-
-#: C/f-spot.xml:85(para)
-msgid "When you edit your photos, a new copy (called a version) is created, so your original is never altered. After your first edit to a photo, subsequent edits will modify the same version. If you want to create mulitple versions of your photo, perhaps with different cropping or coloring, you can do so via the <menuchoice><guimenu>File</guimenu><guimenuitem>Create new version</guimenuitem></menuchoice> option."
-msgstr ""
-
-#: C/f-spot.xml:96(title)
-msgid "Adjust Colors"
-msgstr ""
-
-#: C/f-spot.xml:98(para)
-msgid "To adjust the brightness, contrast, and colors of a photo, first click the <guibutton>Adjust Photos</guibutton> icon to open the adjustment dialog."
-msgstr ""
-
-#: C/f-spot.xml:105(title)
-msgid "Remove Red-Eye"
-msgstr ""
-
-#: C/f-spot.xml:107(para)
-msgid "To remove redeye from a photo, you need to select each individual eye. You may want to zoom in on the image to accurately select the eyes in the photo."
-msgstr ""
-
-#: C/f-spot.xml:112(para)
-msgid "To make your selection, click one corner of the rectangle that will be your selection, and drag your mouse to the diagonal corner and release it. You can resize your selection by dragging its edges, and you can move it by clicking in the middle of it and dragging it to where you want it."
-msgstr ""
-
-#: C/f-spot.xml:118(para)
-msgid "Once you have selected an eye, you can remove the red from it by clicking the red-eye button beneath the photo."
-msgstr ""
-
-#: C/f-spot.xml:125(title)
-msgid "Crop"
-msgstr ""
-
-#: C/f-spot.xml:127(para)
-msgid "Cropping an image is a great way to improve the quality of a photograph by improving how it is framed. You crop a photo by selecting the part of the photo you want to keep. If you want your photo to be the exact dimensions necessary for a certain print size, you can constrain the kind of selection F-Spot will allow you to draw by choosing the appropriate size from the constraint drop down. See the <xref linkend=\"edit-remove-red-eye\"/> above for details on making a selection on your photo."
-msgstr ""
-
-#: C/f-spot.xml:136(para)
-#: C/f-spot.xml:150(para)
-msgid "Once you have made your crop selection, you must click the crop button beneath the image to finalize the crop. If you are working with the original photo, cropping creates a new version your photo."
-msgstr ""
-
-#: C/f-spot.xml:144(title)
-msgid "Describe"
-msgstr "Beskriv"
-
-#: C/f-spot.xml:146(para)
-msgid "You can also enter a description of the image by clicking on the text entry box below the image and typing."
-msgstr ""
-
-#: C/f-spot.xml:159(title)
-msgid "Tag"
-msgstr "Mærke"
-
-#: C/f-spot.xml:160(para)
-msgid "F-Spot enables you to organize and enjoy your photos by associating them with various user-customizable tags. A tag is a merely a label. F-Spot comes with default tags to get you started; you are free to change them and add new ones. For example, if you want to create a tag for specific event, you can create a new tag named after that event under the Events tag."
-msgstr ""
-
-#: C/f-spot.xml:167(para)
-msgid "There are many ways to tag photos:"
-msgstr ""
-
-#: C/f-spot.xml:172(para)
-msgid "drag and drop the photo(s) onto the tag"
-msgstr ""
-
-#: C/f-spot.xml:177(para)
-msgid "drag and drop the tag onto the photo(s)"
-msgstr ""
-
-#: C/f-spot.xml:182(para)
-msgid "via the photo's right-click menu"
-msgstr ""
-
-#: C/f-spot.xml:187(para)
-msgid "via the Tags and Edit menus"
-msgstr ""
-
-#: C/f-spot.xml:192(para)
-msgid "by typing them in (press <keycap>t</keycap> to pop up the tag entry bar, enter comma-separated tags) - with tab completion!"
-msgstr ""
-
-#: C/f-spot.xml:198(para)
-msgid "The first photo you associate with a tag will be used for that tag's icon. You can always edit a tag's name, parent tag, and icon by right clicking on it and choosing <guilabel>Edit tag</guilabel>."
-msgstr ""
-
-#: C/f-spot.xml:203(para)
-msgid "You can change a tag's parent by dragging and dropping it where you like. Also, you can edit the name of a tag by selecting it and pressing <keycap>F2</keycap>. Lastly, if you have the tag tree widget focused (e.g. you just clicked on a tag), you can start typing the name of a tag, and all the expanded tags in the list will be searched and you'll jump to any matching ones."
-msgstr ""
-
-#: C/f-spot.xml:215(title)
-msgid "Enjoying your photos"
-msgstr ""
-
-#: C/f-spot.xml:217(title)
-msgid "Browse"
-msgstr ""
-
-#: C/f-spot.xml:218(para)
-msgid "You can use the slider widget to browse your photos by month or by directory. To change this setting, go to <menuchoice><guimenu>View</guimenu><guimenuitem>Arranged By</guimenuitem></menuchoice>."
-msgstr ""
-
-#: C/f-spot.xml:226(title)
-msgid "Search"
-msgstr ""
-
-#: C/f-spot.xml:227(para)
-msgid "You can start a search by double clicking or activating a tag from the tag list. Alternatively, you can show the find bar with <menuchoice><guimenu>Find</guimenu><guimenuitem>Show Find Bar</guimenuitem></menuchoice>. With the find bar shown, you can drag tags from the tag view to the find bar."
-msgstr ""
-
-#: C/f-spot.xml:233(para)
-msgid "To find photos that are tagged with both of two tags, activate the first in the tag view or drag it onto the find bar, then drag the second tag and drop it on top of the first. You can also right click on the second tag in the tag view, or use the <guimenu>Find</guimenu> menu, and choose <guimenuitem>Find With...</guimenuitem> and select the first tag (or group of tags)."
-msgstr ""
-
-#: C/f-spot.xml:240(para)
-msgid "You can drag a tag icon around on the find bar to change from finding it and another tag to finding it or another tag."
-msgstr ""
-
-#: C/f-spot.xml:244(para)
-msgid "You can search for photos that do not have a particular tag by double-clicking on a tag in the find bar. Alternatively, you can right-click a tag in the find bar and select <guimenuitem>Exclude</guimenuitem>."
-msgstr ""
-
-#: C/f-spot.xml:249(para)
-msgid "To remove a tag from the search, drag it away from the find bar, or right click and select <guimenuitem>Remove</guimenuitem>."
-msgstr ""
-
-#: C/f-spot.xml:253(para)
-msgid "By default, photos tagged <emphasis>Hidden</emphasis> will not be shown. You must explicitly include the <emphasis>Hidden</emphasis> tag in your search to show such photos."
-msgstr ""
-
-#: C/f-spot.xml:258(para)
-msgid "There is also a type-to-find entry. Press <keycap>/</keycap> to open it. It cannot be used at the same time as the find bar. You can type queries such as \"TagA and (TagB or (TagC and TagD))\". At any point, if F-Spot recognizes what you've typed as a valid query, it will update your search. The <emphasis>not</emphasis> operator is not yet supported."
-msgstr ""
-
-#: C/f-spot.xml:268(title)
-msgid "Fullscreen Mode and Slideshows"
-msgstr ""
-
-#: C/f-spot.xml:269(para)
-msgid "For fewer distractions and larger display, you can view your photos in full screen mode. You control when to show the next photo or to return to the previous. Enter fullscreen mode by pressing <keycap>F11</keycap> at any time or by pressing the button in the toolbar."
-msgstr ""
-
-#: C/f-spot.xml:276(title)
-msgid "FullScreen"
-msgstr ""
-
-#: C/f-spot.xml:283(para)
-msgid "In slideshow mode, you can sit back and view your photos as they are presented to you. You can start a slideshow by pressing the button on the toolbar."
-msgstr ""
-
-#: C/f-spot.xml:289(title)
-msgid "SlideShow"
-msgstr ""
-
-#: C/f-spot.xml:300(title)
-msgid "Sharing your photos"
-msgstr ""
-
-#: C/f-spot.xml:303(para)
-msgid "There are many ways to share your photos using F-Spot. All of the following methods will only share the photos you have selected when you run them."
-msgstr ""
-
-#: C/f-spot.xml:310(title)
-msgid "E-mail"
-msgstr "E-post"
-
-#: C/f-spot.xml:311(para)
-msgid "E-mail your photos directly from F-Spot with the <menuchoice><guimenu>File</guimenu><guimenuitem>Send Mail</guimenuitem></menuchoice> menu."
-msgstr ""
-
-#: C/f-spot.xml:319(title)
-msgid "Print"
-msgstr ""
-
-#: C/f-spot.xml:320(para)
-msgid "Print your photos with the <menuchoice><guimenu>File</guimenu><guimenuitem>Print</guimenuitem></menuchoice> menu."
-msgstr ""
-
-#: C/f-spot.xml:327(title)
-msgid "Burn to CD"
-msgstr ""
-
-#: C/f-spot.xml:334(title)
-msgid "Generate a Website Gallery or Folder"
-msgstr ""
-
-#: C/f-spot.xml:335(para)
-msgid "The <menuchoice><guimenu>File</guimenu><guimenuitem>Export</guimenuitem><guimenuitem>Export to Folder</guimenuitem></menuchoice> feature gives you three ways to export your images."
-msgstr ""
-
-#: C/f-spot.xml:343(para)
-msgid "<guilabel>Use Original</guilabel> exports your photos ready for use with Jakub Steiner's free <ulink url=\"http://jimmac.musichall.cz/original.php\"> Original Photo Gallery</ulink> software. If you are unsure about this option, it is probably not the right one for you."
-msgstr ""
-
-#: C/f-spot.xml:351(para)
-msgid "<guilabel>Use static HTML files</guilabel> exports your photos to an interactive website, ready for you to upload."
-msgstr ""
-
-#: C/f-spot.xml:357(para)
-msgid "<guilabel>Plain Files</guilabel> exports your images as files within directories, without putting them into a gallery."
-msgstr ""
-
-#: C/f-spot.xml:366(title)
-msgid "Post to your Flickr or PHP Gallery"
-msgstr ""
-
-#: C/f-spot.xml:367(para)
-msgid "If you use Flickr, you can post your files directly from F-Spot with the <menuchoice><guimenu>File</guimenu><guimenuitem>Export</guimenuitem><guimenuitem>Export to Flickr</guimenuitem></menuchoice> menu."
-msgstr ""
-
-#: C/f-spot.xml:372(para)
-msgid "If you use the PHP software known as <ulink url=\"http://gallery.sourceforge.net/\"> Gallery</ulink>, you can post your photos to your existing album with the <menuchoice><guimenu>File</guimenu><guimenuitem>Export</guimenuitem><guimenuitem>Export to Web Gallery</guimenuitem></menuchoice> menu. You must first enable the Remote module within your Gallery installation."
-msgstr ""
-
-#: C/f-spot.xml:383(title)
-msgid "Shortcuts"
-msgstr ""
-
-#: C/f-spot.xml:386(title)
-msgid "Global Shortcuts"
-msgstr ""
-
-#: C/f-spot.xml:391(entry)
-#: C/f-spot.xml:475(entry)
-#: C/f-spot.xml:570(entry)
-#: C/f-spot.xml:622(entry)
-msgid "Key"
-msgstr ""
-
-#: C/f-spot.xml:394(entry)
-#: C/f-spot.xml:478(entry)
-#: C/f-spot.xml:573(entry)
-#: C/f-spot.xml:625(entry)
-msgid "Action"
-msgstr ""
-
-#: C/f-spot.xml:402(keycap)
-msgid "["
-msgstr "["
-
-#: C/f-spot.xml:404(entry)
-msgid "Rotate the selected photos to the left"
-msgstr ""
-
-#: C/f-spot.xml:410(keycap)
-msgid "]"
-msgstr "]"
-
-#: C/f-spot.xml:412(entry)
-msgid "Rotate the selected photos to the right"
-msgstr ""
-
-#: C/f-spot.xml:418(keycap)
-msgid "t"
-msgstr "t"
-
-#: C/f-spot.xml:420(entry)
-msgid "View or edit tags for selected photos"
-msgstr ""
-
-#: C/f-spot.xml:426(keycap)
-msgid "F11"
-msgstr "F11"
-
-#: C/f-spot.xml:428(entry)
-msgid "Full screen view"
-msgstr ""
-
-#: C/f-spot.xml:434(keycap)
-#: C/f-spot.xml:442(keycap)
-#: C/f-spot.xml:450(keycap)
-#: C/f-spot.xml:458(keycap)
-#: C/f-spot.xml:486(keycap)
-#: C/f-spot.xml:494(keycap)
-#: C/f-spot.xml:511(keycap)
-#: C/f-spot.xml:536(keycap)
-#: C/f-spot.xml:589(keycap)
-msgid "Ctrl"
-msgstr "Ctrl"
-
-#: C/f-spot.xml:434(keycap)
-msgid "I"
-msgstr "I"
-
-#: C/f-spot.xml:436(entry)
-msgid "Displays information about the photo"
-msgstr ""
-
-#: C/f-spot.xml:442(keycap)
-msgid "Equals"
-msgstr ""
-
-#: C/f-spot.xml:444(entry)
-msgid "Zoom-in"
-msgstr ""
-
-#: C/f-spot.xml:450(keycap)
-msgid "Minus"
-msgstr "Minus"
-
-#: C/f-spot.xml:452(entry)
-msgid "Zoom-out"
-msgstr ""
-
-#: C/f-spot.xml:458(keycap)
-msgid "N"
-msgstr "N"
-
-#: C/f-spot.xml:460(entry)
-msgid "Import photos"
-msgstr ""
-
-#: C/f-spot.xml:470(title)
-msgid "Browse Mode Shortcuts"
-msgstr ""
-
-#: C/f-spot.xml:486(keycap)
-#: C/f-spot.xml:495(keycap)
-msgid "A"
-msgstr "A"
-
-#: C/f-spot.xml:488(entry)
-msgid "Select all"
-msgstr ""
-
-#: C/f-spot.xml:494(keycap)
-#: C/f-spot.xml:527(keycap)
-#: C/f-spot.xml:536(keycap)
-msgid "Shift"
-msgstr "Skift"
-
-#: C/f-spot.xml:497(entry)
-msgid "Unselect all"
-msgstr ""
-
-#: C/f-spot.xml:502(entry)
-msgid "Arrow keys (up, down, left, right) or k, j, h, l keys"
-msgstr ""
-
-#: C/f-spot.xml:505(entry)
-msgid "Move focus"
-msgstr ""
-
-#: C/f-spot.xml:510(entry)
-msgid "<placeholder-1/>-arrow key"
-msgstr ""
-
-#: C/f-spot.xml:513(entry)
-msgid "Move the focus without changing the selection"
-msgstr ""
-
-#: C/f-spot.xml:519(keycap)
-#: C/f-spot.xml:641(keycap)
-msgid "Spacebar"
-msgstr ""
-
-#: C/f-spot.xml:521(entry)
-msgid "Select or unselect the focused photo"
-msgstr ""
-
-#: C/f-spot.xml:528(keycap)
-msgid "arrow key"
-msgstr ""
-
-#: C/f-spot.xml:530(entry)
-msgid "Change the photo selection"
-msgstr ""
-
-#: C/f-spot.xml:537(keycap)
-msgid "left arrow or right arrow"
-msgstr ""
-
-#: C/f-spot.xml:539(entry)
-msgid "Add/Remove all photos in the row, in the direction pressed, to the selection"
-msgstr ""
-
-#: C/f-spot.xml:545(keycap)
-#: C/f-spot.xml:681(keycap)
-msgid "v"
-msgstr "v"
-
-#: C/f-spot.xml:547(entry)
-msgid "Pops up a larger preview of the picture pointed by the mouse"
-msgstr ""
-
-#: C/f-spot.xml:553(keycap)
-msgid "V"
-msgstr "V"
-
-#: C/f-spot.xml:555(entry)
-msgid "Pops up a larger preview and a color histogram of the picture pointed by the mouse"
-msgstr ""
-
-#: C/f-spot.xml:565(title)
-msgid "Tag Shortcuts"
-msgstr ""
-
-#: C/f-spot.xml:581(keycap)
-msgid "F2"
-msgstr "F2"
-
-#: C/f-spot.xml:583(entry)
-msgid "Rename selected tag"
-msgstr ""
-
-#: C/f-spot.xml:589(keycap)
-msgid "T"
-msgstr "T"
-
-#: C/f-spot.xml:591(entry)
-msgid "Add tags to selected photos"
-msgstr ""
-
-#: C/f-spot.xml:596(entry)
-#: C/f-spot.xml:604(entry)
-msgid "n/a"
-msgstr "-"
-
-#: C/f-spot.xml:599(entry)
-msgid "Drag and drop tags to move them"
-msgstr ""
-
-#: C/f-spot.xml:607(entry)
-msgid "Type a tag's name to jump to it (only works if tag is shown/expanded)"
-msgstr ""
-
-#: C/f-spot.xml:617(title)
-msgid "Edit Mode Shortcuts"
-msgstr ""
-
-#: C/f-spot.xml:633(keycap)
-msgid "Page Up"
-msgstr "PageUp"
-
-#: C/f-spot.xml:635(entry)
-msgid "Go to Previous Photo"
-msgstr ""
-
-#: C/f-spot.xml:641(keycap)
-msgid "Page Down"
-msgstr "PageDown"
-
-#: C/f-spot.xml:640(entry)
-msgid "<placeholder-1/>, <placeholder-2/>"
-msgstr "<placeholder-1/>, <placeholder-2/>"
-
-#: C/f-spot.xml:643(entry)
-msgid "Go to Next Photo"
-msgstr ""
-
-#: C/f-spot.xml:649(keycap)
-msgid "0"
-msgstr "0"
-
-#: C/f-spot.xml:651(entry)
-msgid "Fit the image to the screen"
-msgstr ""
-
-#: C/f-spot.xml:657(keycap)
-msgid "1"
-msgstr "1"
-
-#: C/f-spot.xml:659(entry)
-msgid "Zoom Factor to 1.0 (1 screen pixel per image pixel)"
-msgstr ""
-
-#: C/f-spot.xml:665(keycap)
-msgid "2"
-msgstr "2"
-
-#: C/f-spot.xml:667(entry)
-msgid "Zoom Factor to 2.0 (4 screen pixels per image pixel)"
-msgstr ""
-
-#: C/f-spot.xml:673(keycap)
-msgid "Escape"
-msgstr "Esc"
-
-#: C/f-spot.xml:675(entry)
-msgid "Returns to Browser mode"
-msgstr ""
-
-#: C/f-spot.xml:683(entry)
-msgid "Examine photo with magnifying glass (Loupe)"
-msgstr ""
-
-#. Put one translator per line, in the form of NAME <EMAIL>, YEAR1, YEAR2.
-#: C/f-spot.xml:0(None)
-msgid "translator-credits"
-msgstr "Peter Bach <bach.peter at gmail.com>, 2007"
-
diff --git a/docs/da/f-spot.xml b/docs/da/f-spot.xml
deleted file mode 100644
index a3a6714..0000000
--- a/docs/da/f-spot.xml
+++ /dev/null
@@ -1,1462 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!DOCTYPE book PUBLIC "-//OASIS//DTD DocBook XML 4.1.2//EN" "http://www.oasis-open.org/docbook/xml/4.1.2/docbookx.dtd">
-<book id="f-spot" lang="da">
- <bookinfo>
- <title>The F-Spot Manual</title>
- <abstract role="description">
- <para>This is the user manual for F-Spot, a GNOME personal photo manager.</para>
- </abstract>
- <subtitle>This is the user manual for F-Spot, a GNOME personal photo manager.</subtitle>
- <copyright>
- <year>2007-2009</year>
- <holder>Aaron Bockover, Gabriel Burt, Miguel de Icaza, Bengt Thuree</holder>
- </copyright><copyright><year>2007</year><holder>Peter Bach (bach.peter at gmail.com)</holder></copyright>
- <publisher>
- <publishername>Dokumentationsprojekt för GNOME</publishername>
- </publisher>
- <authorgroup>
- <author>
- <firstname>Miguel</firstname>
- <surname>de Icaza</surname>
- </author>
- <author>
- <firstname>Aaron</firstname>
- <surname>Bockover</surname>
- </author>
- <author>
- <firstname>Bengt</firstname>
- <surname>Thuree</surname>
- </author>
- <author>
- <firstname>Gabriel</firstname>
- <surname>Burt</surname>
- </author>
- <author>
- <firstname>Alexandre</firstname>
- <surname>Prokoudine</surname>
- </author>
- <author role="maintainer">
- <firstname>Stephane</firstname>
- <surname>Delcroix</surname>
- </author>
- </authorgroup>
- <!--<include href="legal.xml" xmlns="http://www.w3.org/2001/XInclude"/>-->
- <revhistory>
- <revision>
- <revnumber>0.5</revnumber>
- <date>2008-09-25</date>
- </revision>
- <revision>
- <revnumber>0.4</revnumber>
- <date>2008-09-12</date>
- </revision>
- <revision>
- <revnumber>0.3</revnumber>
- <date>2007-07-26</date>
- </revision>
- </revhistory>
- </bookinfo>
-
- <chapter id="organizing">
- <title>Organizing your photos</title>
-
- <sect1 id="import">
- <title>Import</title>
-
- <para>
- You can import photos from your hard drive or your camera. When you
- import your photos into F-Spot from your camera, it will always make a
- copy of them, leaving you free to clear your camera's memory. By default,
- F-Spot will make a copy of photos imported from your hard drive. Uncheck
- the <guilabel>Copy</guilabel> option on the import dialog or hold
- <keycap>Shift</keycap> when dragging photos into F-Spot if you do not
- wish to copy them from your hard drive.
- </para>
-
- <para>
- By default, F-Spot copies your photos to the
- <filename class="directory">~/Photos</filename> folder. You can change
- the folder F-Spot uses in <guilabel>Preferences</guilabel> dialog
- (<menuchoice><guimenu>Edit</guimenu><guimenuitem>Preferences</guimenuitem>
- </menuchoice>). You can also disable physical copying of images to that
- directory and make F-Spot only reference to existing files. For that you
- need to disable checkbox <guilabel>Copy files to the Photos folder</guilabel>.
- </para>
- <para>
- If there is a tiny chance that some of your photos are already imported
- from the chosen source, you can use <guilabel>Detect duplicates</guilabel>
- option. In this case F-Spot will try to find out if exactly this image is
- already present in the database and thus new copy of it should not be
- imported.
- </para>
- <para>
- If all the photos you are importing at one time are from a particular event,
- or have some other characteristic in common, you can create a tag for them
- so you can later find them with ease. To do this, follow the instructions from
- <xref linkend="tag"/> to create a new tag, then when you are importing
- them, check the button for <guilabel>Attach Tag</guilabel> and choose the
- tag you created.
- </para>
-
- <tip>
- <para>
- F-Spot uses a database stored at
- <filename>~/.config/f-spot/photos.db</filename>. Note, to access it, use
- the sqlite3 command. You can also manually specify path to a database by
- running F-Spot with <option>-b</option> option.
- </para>
- </tip>
-
- <para>
- After an import, F-Spot will display the pictures of the latest import
- roll only. Read <xref linkend="enjoying-search"/> to learn how to deal
- with import rolls.
- </para>
- <para>
- You can also import directly from Mozilla
- <ulink url="http://www.mozilla.com/en-US/firefox/">Firefox</ulink> and
- <ulink url="http://www.mozilla.com/en-US/thunderbird/">Thunderbird</ulink> using
- <ulink url="https://addons.mozilla.org/en-US/firefox/addon/7091">Firefox</ulink>
- and <ulink url="https://addons.mozilla.org/en-US/thunderbird/addon/7011">Thunderbird</ulink>
- F-Spot importer extensions written by
- <ulink url="http://personalpages.tds.net/~cdovel/">Pizzach</ulink>.
- </para>
- </sect1>
-
- <sect1 id="edit">
- <title>Edit</title>
-
- <para>
- If you double click or press enter on an image, you enter Edit mode, where
- you can remove red-eye, crop, and adjust brightness and colors.
- </para>
-
- <sect2 id="edit-versions">
- <title>Versioner</title>
-
- <para>
- When you edit your photos, a new copy (called a version) is created,
- so your original is never altered. After your first edit to a photo, subsequent
- edits will modify the same version. If you want to create multiple versions
- of your photo, perhaps with different cropping or coloring, you can do so
- via the <menuchoice><guimenu>File</guimenu>
- <guimenuitem>Create new version</guimenuitem></menuchoice> option.
- </para>
- </sect2>
-
- <sect2 id="edit-crop">
- <title>Crop</title>
-
- <para>
- Cropping an image is a great way to improve the quality of a photograph by
- change how it is framed. You crop a photo by selecting the part of the photo
- you want to keep. If you want your photo to be the exact dimensions necessary
- for a certain print size, you can constrain the kind of selection F-Spot will allow
- you to draw by choosing the appropriate size from the constraint drop down.
- See the <xref linkend="edit-remove-red-eye"/> below for details on making
- a selection on your photo.
- </para>
- <figure>
- <title>Crop tool</title>
- <mediaobject>
- <imageobject>
- <imagedata fileref="figures/f-spot-crop.png"/>
- </imageobject>
- </mediaobject>
- </figure>
- <para>
- Once you have made your crop selection, you must click the crop button beneath
- the image to finalize the crop. If you are working with the original photo, cropping
- creates a new version your photo.
- </para>
- </sect2>
-
- <sect2 id="edit-straighten">
- <title>Straighten</title>
-
- <para>
- Straighten effect is a tool to level a photo, quite helpful for landscapes
- taken without a tripod, when (imaginary) line of horizon is not at 0°.
- This tool rotates an image by a specified angle and automagically crops the
- resulted image, so that you always see a perfect rectangle.
- </para>
- <figure>
- <title>Straighten tool</title>
- <mediaobject>
- <imageobject>
- <imagedata fileref="figures/f-spot-straighten.png"/>
- </imageobject>
- </mediaobject>
- </figure>
- </sect2>
-
- <sect2 id="edit-adjust-colors">
- <title>Adjust Colors</title>
-
- <para>
- To adjust the brightness, contrast, and colors of a photo, first click
- the <guibutton>Adjust the photo colors</guibutton> icon to open the
- adjustment dialog. Change then some settings and save them with
- <guibutton>OK</guibutton>.
- </para>
- <figure>
- <title>Adjust Colors tool</title>
- <mediaobject>
- <imageobject>
- <imagedata fileref="figures/f-spot-adjust-colors.png"/>
- </imageobject>
- </mediaobject>
- </figure>
- </sect2>
-
- <sect2 id="edit-auto-color">
- <title>AutoColor</title>
-
- <para>
- This effect automatically adjusts color levels to make a pretty balanced
- picture color-wise. It serves best for pictures taken with automatical
- white balance, when camera didn't manage to do the job well.
- </para>
- <figure>
- <title>AutoColor</title>
- <mediaobject>
- <imageobject>
- <imagedata fileref="figures/f-spot-autocolor.png"/>
- </imageobject>
- </mediaobject>
- </figure>
- </sect2>
-
- <sect2 id="edit-desaturate">
- <title>Desaturate</title>
-
- <para>
- To make a colorful photo a black and white one, open a photo of choice
- and press <guibutton>Desaturate</guibutton> button.
- </para>
- <figure>
- <title>Desaturation tool</title>
- <mediaobject>
- <imageobject>
- <imagedata fileref="figures/f-spot-desaturate.png"/>
- </imageobject>
- </mediaobject>
- </figure>
- </sect2>
-
- <sect2 id="edit-sepia">
- <title>Sepia</title>
-
- <para>
- To make a colorful photo look like an old-style picture in sepia tones,
- open a photo of choice and press <guibutton>Sepia</guibutton> button.
- </para>
- <figure>
- <title>Desaturation tool</title>
- <mediaobject>
- <imageobject>
- <imagedata fileref="figures/f-spot-sepia.png"/>
- </imageobject>
- </mediaobject>
- </figure>
- </sect2>
-
- <sect2 id="edit-remove-red-eye">
- <title>Remove Red-Eye</title>
-
- <para>
- To remove redeye from a photo, you need to select a zone containing
- the eyes. You may want to zoom in on the image to accurately select
- the eyes in the photo. You should be able to correct both eyes on the
- same person in one shot, or even the eyes from multiple people at once.
- If this doesn't work for you, or the selected zone contains some vivid
- red parts (lips, ...) you'll probably have to correct one red eye at a time.
- </para>
- <para>
- To make your selection, click one corner of the rectangle that will be your
- selection, and drag your mouse to the diagonal corner and release it. You
- can resize your selection by dragging its edges, and you can move it by
- clicking in the middle of it and dragging it to where you want it.
- </para>
- <para>
- Once you have selected a zone, you can remove the red from it by
- clicking the red-eye button beneath the photo.
- </para>
- <figure>
- <title>Red-Eye tool</title>
- <mediaobject>
- <imageobject>
- <imagedata fileref="figures/f-spot-red-eye.png"/>
- </imageobject>
- </mediaobject>
- </figure>
- <tip>
- <para>
- You can change the threshold for redeyes detection by changing
- the gconf key
- <filename class="directory">/apps/f-spot/edit/redeye_threshold</filename>.
- </para>
- </tip>
- </sect2>
-
- <sect2 id="edit-soft-focus">
- <title>Soft Focus</title>
-
- <para>
- In photography sharpening one region of a picture, while blurring
- all the rest, is a way to make an emphasis and grab attention.
- It is achieved by using a lens that allows shooting with a short
- distance in front of and beyond the subject that appears to be in
- focus. Soft focus effect is a way to emulate such a lens.
- </para>
- <figure>
- <title>Soft Focus tool</title>
- <mediaobject>
- <imageobject>
- <imagedata fileref="figures/f-spot-soft-focus.png"/>
- </imageobject>
- </mediaobject>
- </figure>
- <para>
- Click to choose central point of the area you want to be in focus
- and adjust amount of blurring, then click <guibutton>OK</guibutton>.
- </para>
- </sect2>
-
- <sect2 id="edit-sharpen">
- <title>Sharpen</title>
-
- <para>
- Out-of-focus photographs and most digitized images often need a
- sharpness correction. The Unsharp Mask effect sharpens edges of
- the elements without increasing noise or blemish. To sharpen a
- photo choose <menuchoice><guimenu>Edit</guimenu>
- <guimenuitem>Sharpen...</guimenuitem></menuchoice> and specify the
- following values:
- </para>
-
- <itemizedlist>
- <listitem>
- <para>
- <parameter class="option">Amount</parameter> — strength of sharpening.
- </para>
- </listitem>
- <listitem>
- <para>
- <parameter class="option">Radius</parameter> — how many pixels on either
- side of an edge will be affected by sharpening. High resolution images
- allow higher radius.
- </para>
- </listitem>
- <listitem>
- <para>
- <parameter class="option">Threshold</parameter> — the minimum difference
- in pixel values that indicates an edge where sharpen must be applied.
- This helps avoiding creation of blemishes in face, sky or water surface.
- </para>
- </listitem>
- </itemizedlist>
- </sect2>
-
- <sect2 id="edit-describe">
- <title>Beskriv</title>
-
- <para>
- You can also enter a description of the image by clicking on the text entry box
- below the image and typing.
- </para>
- <para>
- Once you have made your crop selection, you must click the crop button beneath
- the image to finalize the crop. If you are working with the original photo, cropping
- creates a new version your photo.
- </para>
- </sect2>
-
- <sect2 id="edit-adjust-time">
- <title>Adjust Time</title>
-
- <para>
- In both 'browse' or 'edit' modes, you can adjust the time of one
- or multiple pictures (<menuchoice><guimenu>Edit</guimenu>
- <guimenuitem>Adjust Time</guimenuitem></menuchoice>). Adjusting
- the time of multiple pictures at once helps you shift all an import
- roll if, e.g. the time on your camera is badly set or if you forgot
- to change it according to DST.
- </para>
- </sect2>
- </sect1>
-
- <sect1 id="tag">
- <title>Mærke</title>
- <para>
- F-Spot enables you to organize and enjoy your photos by associating them
- with various user-customizable tags. A tag is a merely a label. F-Spot comes
- with default tags to get you started; you are free to change them and
- add new ones. For example, if you want to create a tag for specific event, you
- can create a new tag named after that event under the Events tag.
- </para>
- <para>
- There are many ways to tag photos:
- </para>
- <itemizedlist>
- <listitem>
- <para>
- drag and drop the photo(s) onto the tag
- </para>
- </listitem>
- <listitem>
- <para>
- drag and drop the tag onto the photo(s)
- </para>
- </listitem>
- <listitem>
- <para>
- via the photo's right-click menu
- </para>
- </listitem>
- <listitem>
- <para>
- via the Tags and Edit menus
- </para>
- </listitem>
- <listitem>
- <para>
- by typing them in. Press <keycap>t</keycap> to pop up the tag
- entry bar. Here you can enter the tags, separated by commas.
- </para>
- <para>
- You can also use auto-completion in this entry bar: After
- entering the beginning of a tag name, press
- <keycap>Tab</keycap> to see the first possible completion. You can
- cycle between other possible completions by pressing
- <keycap>Tab</keycap> again, and backwards with
- <keycombo action="simul"><keycap>Shift</keycap><keycap>Tab</keycap></keycombo>.
- To confirm the suggested completion and enter a new tag, press
- <keycap>,</keycap>. By pressing <keycap>Enter</keycap> you
- leave the tag entry bar, possibly confirming the current
- completion. To abort the auto completion, just keep on typing.
- </para>
- </listitem>
- </itemizedlist>
- <para>
- The first photo you associate with a tag will be used for that tag's icon.
- You can always edit a tag's name, parent tag, and icon by right clicking
- on it and choosing <guilabel>Edit tag</guilabel>.
- </para>
- <para>
- You can change a tag's parent by dragging and dropping it where you like.
- Also, you can edit the name of a tag by selecting it and pressing
- <keycap>F2</keycap>. Lastly, if you have the tag tree widget focused
- (e.g. you just clicked on a tag), you can start typing the name of a tag, and
- all the expanded tags in the list will be searched and you'll jump to any
- matching ones.
- </para>
-
- <para>
- You can also change size of tag icons in the sidebar or even make tag
- icons invisible by selecting preferred option from <menuchoice>
- <guimenu>View</guimenu><guimenuitem>Tag Icons</guimenuitem></menuchoice>
- menu.
- </para>
-
- <tip>
- <para>
- F-Spot can write tags as metadata fields into JPEG files. Tags for
- various RAW files, PNG, TIFF, and others are written to F-Spot's
- database. You will have to re-tag these files if you re-import your
- collection.
- </para>
- </tip>
- </sect1>
- </chapter>
-
- <chapter id="enjoying">
- <title>Enjoying your photos</title>
- <sect1 id="enjoying-browse">
- <title>Browse</title>
- <para>
- You can use the slider widget to browse your photos by month or by
- directory. To change this setting, go to <menuchoice>
- <guimenu>View</guimenu><guimenuitem>Arranged By</guimenuitem>
- </menuchoice>.
- </para>
- </sect1>
- <sect1 id="enjoying-search">
- <title>Search</title>
-
- <para>
- F-Spot uses search filters to help you better define search criteria.
- </para>
-
- <sect2 id="enjoying-search-tags">
- <title>Tags</title>
-
- <para>
- You can start a search by double clicking or activating a tag from
- the tag list. Alternatively, you can show the find bar with <menuchoice>
- <guimenu>Find</guimenu><guimenuitem>Show Find Bar</guimenuitem></menuchoice>.
- With the find bar shown, you can drag tags from the tag view to the find bar.
- </para>
- <para>
- To find photos that are tagged with both of two tags, activate the first in
- the tag view or drag it onto the find bar, then drag the second tag and drop
- it on top of the first. You can also right click on the second tag in the tag
- view, or use the <guimenu>Find</guimenu> menu, and choose <guimenuitem>Find
- With...</guimenuitem> and select the first tag (or group of tags).
- </para>
- <para>
- You can drag a tag icon around on the find bar to change from finding it and
- another tag to finding it or another tag.
- </para>
- <para>
- You can search for photos that do not have a particular tag by double-clicking
- on a tag in the find bar. Alternatively, you can right-click a tag in the find
- bar and select <guimenuitem>Exclude</guimenuitem>.
- </para>
- <para>
- To remove a tag from the search, drag it away from the find bar, or right click
- and select <guimenuitem>Remove</guimenuitem>.
- </para>
- <para>
- By default, photos tagged <emphasis>Hidden</emphasis> will not be shown. You must
- explicitly include the <emphasis>Hidden</emphasis> tag in your search to show
- such photos.
- </para>
- </sect2>
-
- <sect2 id="enjoying-search-import-rolls">
- <title>Import Rolls</title>
- <para>
- F-Spot remembers what pictures were imported every now and then. Use
- <menuchoice><guimenu>Find</guimenu><guisubmenu>Import Roll</guisubmenu>
- <guimenuitem>Last import roll</guimenuitem></menuchoice> to limit search
- to last importing session or use <menuchoice><guimenu>Find</guimenu>
- <guisubmenu>Import Roll</guisubmenu><guimenuitem>Select Import Rolls...</guimenuitem>
- </menuchoice> to make a finer selection of imported photos:
- </para>
- <itemizedlist>
- <listitem>
- <para>
- <parameter class="option">At</parameter> — to select photos from a particular importing session
- </para>
- </listitem>
- <listitem>
- <para>
- <parameter class="option">After</parameter> — to select all photos imported begining with a particular importing session
- </para>
- </listitem>
- <listitem>
- <para>
- <parameter class="option">Between</parameter> — to select all photos imported between two particular importing sessions
- </para>
- </listitem>
- </itemizedlist>
- <para>
- Every time you change settings of the filter, the amount of selected photos
- will appear in the bottom part of the dialog.
- </para>
- <para>
- When you apply Import Roll filter, in the Find bar you will see
- <guilabel>Find: Import Roll</guilabel>. Now you can add some other
- filter to finetune your selection.
- </para>
- <para>
- If you don't need the Import Roll filter anymore, choose <menuchoice>
- <guimenu>Find</guimenu><guisubmenu>Import Roll</guisubmenu>
- <guimenuitem>Clear roll filter</guimenuitem></menuchoice> to remove
- Import Roll from search criteria. You can also click the close button
- (<guibutton>X</guibutton>) of the search bar to discard all the current
- search options.
- </para>
- <tip>
- <para>
- The number of displayed rolls in the dialog is defined by the gconf key
- <filename class="directory">/apps/f-spot/import/gui_roll_history</filename>.
- Default value is 10.
- </para>
- </tip>
- </sect2>
-
- <sect2 id="enjoying-search-type-to-find">
- <title>Type-to-find</title>
- <para>
- There is also a type-to-find entry. Press <keycap>/</keycap> to open it. It cannot
- be used at the same time as the find bar. You can type queries such as "TagA and
- (TagB or (TagC and TagD))". At any point, if F-Spot recognizes what you've typed as
- a valid query, it will update your search. The <emphasis>not</emphasis> operator
- is not yet supported.
- </para>
-
- <para>
- This function will also search for the typed text into photos comments and filename.
- </para>
- </sect2>
- </sect1>
-
- <sect1 id="enjoying-fullscreen-mode-and-slideshows">
- <title>Fullscreen Mode and Slideshows</title>
- <para>
- For fewer distractions and larger display, you can view your photos in full
- screen mode. You control when to show the next photo or to return to the
- previous. Enter fullscreen mode by pressing <keycap>F11</keycap> at
- any time or by pressing the button in the toolbar.
- </para>
- <figure>
- <title>FullScreen</title>
- <mediaobject>
- <imageobject>
- <imagedata fileref="figures/f-spot-fullscreen.png"/>
- </imageobject>
- </mediaobject>
- </figure>
- <para>
- In slideshow mode, you can sit back and view your photos as they are
- presented to you. You can start a slideshow by pressing the button on the
- toolbar.
- </para>
- <figure>
- <title>SlideShow</title>
- <mediaobject>
- <imageobject>
- <imagedata fileref="figures/f-spot-slideshow.png"/>
- </imageobject>
- </mediaobject>
- </figure>
- </sect1>
- </chapter>
-
- <chapter id="sharing">
- <title>Sharing your photos</title>
-
- <abstract>
- <para>
- There are many ways to share your photos using F-Spot. All of the following
- methods will only share the photos you have selected when you run them.
- </para>
- </abstract>
-
- <sect1 id="sharing-e-mail">
- <title>E-post</title>
- <para>
- E-mail your photos directly from F-Spot with the <menuchoice>
- <guimenu>File</guimenu><guimenuitem>Send Mail</guimenuitem>
- </menuchoice> menu.
- </para>
- <note>
- <title>Note 1</title>
- <para>
- The email program used for this is defined at the GNOME level.
- You can change the default e-mailer for your user using the
- <application>Preferred Applications</application> tool in
- <menuchoice><guimenu>System</guimenu>
- <guisubmenu>Preferences</guisubmenu></menuchoice>.
- </para>
- </note>
- <note>
- <title>Note 2</title>
- <para>
- If some of the photos you'd like to send by email are in a format
- that F-Spot can't write (e.g. RAW images), the size selection dialog
- will become insensitive and the originals will be sent.
- </para>
- </note>
- <tip>
- <para>
- If you're sending resized pictures, F-Spot will keep the modified versions
- somewhere in the <filename class="directory">/tmp</filename> directory for
- 30 seconds. It's not an issue with evolution, which makes it's own local
- copy of the attachments, but could be a bit shorter if you're using Thunderbird.
- You can change the delay by editing the gconf key
- <filename class="directory">/apps/f-spot/export/email/delete_timeout_seconds</filename>.
- </para>
- </tip>
- </sect1>
-
- <sect1 id="sharing-print">
- <title>Print</title>
- <para>
- Print your photos with the <menuchoice><guimenu>File</guimenu>
- <guimenuitem>Print</guimenuitem></menuchoice> menu.
- </para>
- </sect1>
-
- <sect1 id="sharing-burn-to-cd">
- <title>Burn to CD</title>
- <para>
- Burn your photos to CD or DVD with the <menuchoice><guimenu>File</guimenu>
- <guisubmenu>Export</guisubmenu><guimenuitem>Export to CD</guimenuitem>
- </menuchoice> menu.
- </para>
- </sect1>
-
- <sect1 id="website-gallery-folder">
- <title>Generate a Website Gallery or Folder</title>
- <para>
- The
- <menuchoice><guimenu>File</guimenu><guimenuitem>Export</guimenuitem>
- <guimenuitem>Export to Folder</guimenuitem></menuchoice> feature
- gives you three ways to export your images.
- </para>
- <itemizedlist>
- <listitem>
- <para>
- <guilabel>Use Original</guilabel> exports your photos ready for use with
- Jakub Steiner's free <ulink url="http://jimmac.musichall.cz/original.php">
- Original Photo Gallery</ulink> software. If you are unsure about this option,
- it is probably not the right one for you.
- </para>
- </listitem>
- <listitem>
- <para>
- <guilabel>Use static HTML files</guilabel> exports your photos to an
- interactive website, ready for you to upload.
- </para>
- </listitem>
- <listitem>
- <para>
- <guilabel>Plain Files</guilabel> exports your images as files within directories,
- without putting them into a gallery.
- </para>
- </listitem>
- </itemizedlist>
- </sect1>
-
- <sect1 id="sharing-flickr-or-php-gallery">
- <title>Post to your online galleries</title>
- <para>
- If you use Flickr, SmugMug, 23hq, Tabblo, Facebook, Zooomr or Picasa Web Album, you can post your files
- directly from F-Spot with the <menuchoice><guimenu>File</guimenu>
- <guisubmenu>Export</guisubmenu></menuchoice> menu, choosing corresponding submenu item.
- </para>
- <para>
- If you use the PHP software known as <ulink url="http://gallery.sourceforge.net/">
- Gallery</ulink>, you can post your photos to your existing album with the
- <menuchoice><guimenu>File</guimenu><guimenuitem>Export</guimenuitem>
- <guimenuitem>Export to Web Gallery</guimenuitem></menuchoice> menu.
- You must first enable the Remote module within your Gallery installation.
- </para>
- <note>
- <title>Note for Gallery 2.2 users</title>
- <para>
- The Remote plugin for Gallery should be 1.0.8 or newer.
- </para>
- </note>
- <para>
- <ulink url="http://pennave.sourceforge.net">PennAve</ulink> is a Python
- web-application that directly uses F-Spot's database to present a dynamic
- gallery of your photos and tags.
- </para>
- <para>
- <ulink url="http://www.conduit-project.org">Conduit</ulink> is an application
- that can sync photos that have a particular tag with your Flickr or Picasa
- Web Album web storage.
- </para>
- </sect1>
- </chapter>
-
- <chapter id="cms">
- <title>Color management</title>
-
- <sect1 id="cms-what-is-cms">
- <title>What's color management</title>
-
- <para>
- When you capture a photo and look at it on a display, it looks different than
- on a camera's preview display or on any other display. It will also look
- different when you print it. This is because every device has unique color
- reproduction capabilities.
- </para>
-
- <para>
- Color management system (CMS) is a tool to achieve reliable color reproduction
- for both display and output (e.g. a printer). A CMS relies on color profiles
- to map original colors to the color that a device can reproduce so that colors
- will appear the same way everywhere — on a computer LCD monitor, on a print
- from your local photolab etc.
- </para>
- </sect1>
-
- <sect1 id="cms-what-is-icc-profile">
- <title>What's a color profile</title>
-
- <para>
- A color profile is a file with either .icc (thus its is often called an ICC
- profile) or .icm extension that describes how device's colors correspond to a
- universal description of colors.
- </para>
-
- <para>
- There are several types of profiles:
- </para>
-
- <itemizedlist>
- <listitem>
- <para>
- Input device profile. It's profile for a camera or a profile that an
- application like XSane embeds into a scanned image.
- </para>
- </listitem>
- <listitem>
- <para>
- Working space profile. It's a profile that describes color space in
- which all operations are done inside an application. Usually very wide
- gamut profiles like AdobeRGB1998 or ProPhotoRGB are used for that.
- </para>
- </listitem>
- <listitem>
- <para>
- Display profile. It's a profile for a monitor.
- </para>
- </listitem>
- <listitem>
- <para>
- Output profile. This is usually a profile for you printer.
- </para>
- </listitem>
- </itemizedlist>
-
- <para>
- Currently F-Spot allows setting only display and output profiles.
- All color operations are done in sRGB color space.
- </para>
- </sect1>
-
- <sect1 id="cms-how-to-get-icc-profile">
- <title>How to get my screen/printer color profile </title>
-
- <para>
- There are few ways to get a color profile.
- </para>
-
- <sect2 id="cms-icc-from-cd-or-internet">
- <title> From CD or Internet </title>
-
- <para>
- Many hardware manufacturers put color profiles into CD in the bundle.
- If you have one (from monitor or printer), you can use it. Or you can
- download it from the Internet (usually, from support section of the
- manufacturer's web site). Some camera manufacturers (Nikon, Canon)
- also provide ICC profiles.
- </para>
- </sect2>
-
- <sect2 id="cms-icc-from-calibrating-and-profiling">
- <title>Calibrating and profiling</title>
-
- <para>
- Best results can be achieved by calibrating and profiling devices with
- a measurement device. It is not so difficult, but it means that you need
- a spectrophotometer to do all measurements and create an ICC profile.
- </para>
-
- <para>
- If you are on Windows or Mac OS X, you can use manufacturer's software
- coming with a spectrophotometer. On Linux you will have to use either
- <ulink url="http://www.argyllcms.com">Argyll</ulink>, which is a set of
- versatile command line tools, or
- <ulink url="http://lprof.sourceforge.net/">LProf</ulink>, which has a
- graphical user interface.
- </para>
- <para>
- Please refer to documentation of third party hardware and software
- vendors for details.
- </para>
- </sect2>
-
- <sect2 id="cms-icc-from-embedding">
- <title>Embedding</title>
-
- <para>
- Image formats themselves (such as TIFF, JPEG, PNG...) may contain embedded
- color profiles. If color management is enabled, F-Spot looks for such
- embedded profiles and takes them into consideration.
- </para>
- </sect2>
- </sect1>
-
- <sect1 id="cms-how-to-use">
- <title>How to use color management in F-Spot</title>
-
- <para>
- Color management in F-Spot can use only RGB profiles at this time
- (and you can't see other profiles in the F-Spot).
- </para>
-
- <itemizedlist>
- <listitem>
- <para>
- Copy your color profiles into the
- <filename class="directory">/usr/share/color/icc</filename> or
- <filename class="directory">/usr/local/share/color/icc</filename>
- directory.
- </para>
- </listitem>
- <listitem>
- <para>
- Enable the color management with the <menuchoice>
- <guimenu>Edit</guimenu><guimenuitem>Preferences</guimenuitem>
- </menuchoice> menu.
- </para>
- </listitem>
- <listitem>
- <para>
- Select <guilabel>Display</guilabel> and <guilabel>Output</guilabel>
- profiles.
- </para>
- </listitem>
- </itemizedlist>
-
- <tip>
- <para>
- You can use <ulink url="http://burtonini.com/blog/computers/xicc">xicc</ulink>
- to load ICC profile to display and use the loaded profile from F-Spot.
- Just mark the checkbox <guilabel>Try to use the system display
- profile</guilabel>.
- </para>
- </tip>
- </sect1>
- </chapter>
-
- <chapter id="extend">
- <title>Extend functionality</title>
-
- <sect1 id="extend-what-extensions-are">
- <title>What extensions are</title>
-
- <para>
- F-Spot extensions are means to add new functionality to the application.
- F-Spot supports two types of extension: exporters (which allow exporting
- photos to new web services or data storages) and tools (which allow new
- ways of color correction, duplicate photos finders etc.). Extensions are
- distributed in form of extension packages.
- </para>
- <para>
- In the best traditions of not reinventing the wheel extensions can use other
- extensions, which means that one extension cannot work, if another extension
- is not installed. This concept of dependance actually means that
- </para>
- <itemizedlist>
- <listitem>
- <para>
- you cannot install an extension, if the extension it depends on, is not present in the system
- </para>
- </listitem>
- <listitem>
- <para>
- you cannot remove an extension on which some other extension depends
- </para>
- </listitem>
- </itemizedlist>
- </sect1>
-
- <sect1 id="extend-managing-extensions">
- <title>Managing extensions</title>
-
- <para>
- To manage extensions choose <menuchoice><guimenu>Edit</guimenu>
- <guimenuitem>Manage Extensions</guimenuitem></menuchoice> menu item.
- </para>
-
- <sect2 id="extend-managing-extensions-managing-extension-repositories">
- <title>Managing extension repositories</title>
-
- <para>
- Simply put, repositories are extension storages. They can be either network
- or local. To add a new repository click Repositories button, choose type of
- the repository you are about to add and provide either URL or path. If the URL
- or path you specified doesn't contain a description (index) file for extensions,
- a warning message will pop up to tell you that.
- </para>
- <para>
- To remove a repository click <guibutton>Repositories</guibutton> button again,
- choose the repository you are about to delete and click
- <guibutton>Delete</guibutton> button.
- </para>
- </sect2>
-
- <sect2 id="extend-managing-extensions-installing-and-updating-extensions">
- <title>Installing and updating extensions</title>
-
- <para>
- To install an extension click <guibutton>Install extensions...</guibutton> button.
- In the newly presented dialog
- </para>
- <orderedlist>
- <listitem>
- <para>
- Choose repository to install from all known repositories or just one of
- available repositories.
- </para>
- </listitem>
- <listitem>
- <para>
- Choose, what extension packages you want to see: All, Only new, Only updates.
- </para>
- </listitem>
- <listitem>
- <para>
- Click the <guibutton>Update</guibutton> button to update list of available
- extension packages by given criteria.
- </para>
- </listitem>
- <listitem>
- <para>
- Choose extensions you want to install/update, click <guibutton>Information</guibutton>
- to see summary on selected package, if you want to.
- </para>
- </listitem>
- <listitem>
- <para>
- Click <guibutton>Forward</guibutton> to proceed with installation.
- </para>
- </listitem>
- </orderedlist>
- </sect2>
-
- <sect2 id="extend-managing-extensions-enabling-and-disabling-extensions">
- <title>Enabling and disabling extensions</title>
-
- <para>
- You might want to temporarily enable or disable a particular extension package,
- for example, if the extension is not stable enough to handle a large amount of
- photos or if menus get crowded with extensions.
- </para>
- <para>
- In the <guilabel>Manage Extensions</guilabel> dialog select the extension
- package and click <guibutton>Enable</guibutton> or <guibutton>Disable</guibutton>.
- </para>
- </sect2>
-
- <sect2 id="extend-managing-extensions-removing-extensions">
- <title>Removing extensions</title>
-
- <para>
- If you don't need an extension you can remove it from the system completely.
- In the <guilabel>Manage Extensions</guilabel> dialog select the extension
- package you want to remove and click <guibutton>Delete</guibutton>.
- </para>
- </sect2>
-
- <sect2 id="extend-managing-extensions-reading-summary-of-extensions">
- <title>Reading summary of extensions</title>
-
- <para>
- Every extension package contains metadata that provides the following information about the extension:
- </para>
-
- <orderedlist>
- <listitem>
- <para>
- Description, which usually covers puprose of the extension
- </para>
- </listitem>
- <listitem>
- <para>
- Version
- </para>
- </listitem>
- <listitem>
- <para>
- Author
- </para>
- </listitem>
- <listitem>
- <para>
- Dependencies
- </para>
- </listitem>
- </orderedlist>
-
- <para>
- In the <guilabel>Manage Extensions</guilabel> dialog select the extension
- package you want to read summary of and click <guibutton>Information</guibutton>.
- </para>
- </sect2>
- </sect1>
-
- <sect1 id="extend-developing-extensions">
- <title>Developing extensions</title>
-
- <para>
- <ulink url="http://f-spot.org/Extend_F-Spot">Extend F-Spot</ulink> document
- gives instructions on developing your own extensions for F-Spot.
- </para>
- </sect1>
- </chapter>
-
- <chapter id="shortcuts">
- <title>Shortcuts</title>
-
- <sect1 id="Global-Shortcuts">
- <title>Global Shortcuts</title>
- <informaltable frame="all">
- <tgroup cols="2">
- <thead>
- <row>
- <entry>
- Key
- </entry>
- <entry>
- Action
- </entry>
- </row>
- </thead>
- <tbody>
- <row>
- <entry>
- <keycap>[</keycap>
- </entry>
- <entry>
- Rotate the selected photos to the left
- </entry>
- </row>
- <row>
- <entry>
- <keycap>]</keycap>
- </entry>
- <entry>
- Rotate the selected photos to the right
- </entry>
- </row>
- <row>
- <entry>
- <keycap>Del</keycap>
- </entry>
- <entry>
- Remove selected photos from F-Spot's catalogue
- </entry>
- </row>
- <row>
- <entry>
- <keycombo><keycap>Skift</keycap><keycap>Del</keycap></keycombo>
- </entry>
- <entry>
- Delete selected photos permanently from the drive. If possible, they will moved to trash.
- </entry>
- </row>
-
- <row>
- <entry>
- <keycap>t</keycap>
- </entry>
- <entry>
- View or edit tags for selected photos
- </entry>
- </row>
- <row>
- <entry>
- <keycap>F11</keycap>
- </entry>
- <entry>
- Full screen view
- </entry>
- </row>
- <row>
- <entry>
- <keycombo><keycap>Ctrl</keycap><keycap>I</keycap></keycombo>
- </entry>
- <entry>
- Displays information about the photo
- </entry>
- </row>
- <row>
- <entry>
- <keycombo><keycap>Ctrl</keycap><keycap>Equals</keycap></keycombo>
- </entry>
- <entry>
- Zoom-in
- </entry>
- </row>
- <row>
- <entry>
- <keycombo><keycap>Ctrl</keycap><keycap>Minus</keycap></keycombo>
- </entry>
- <entry>
- Zoom-out
- </entry>
- </row>
- <row>
- <entry>
- <keycombo><keycap>Ctrl</keycap><keycap>N</keycap></keycombo>
- </entry>
- <entry>
- Import photos
- </entry>
- </row>
- <row>
- <entry>
- <keycombo><keycap>Alt</keycap><keycap>0-5</keycap></keycombo>
- </entry>
- <entry>
- Alt plus a number from 0 to 5 rate the selected picture(s)
- </entry>
- </row>
- </tbody>
- </tgroup>
- </informaltable>
- </sect1>
-
- <sect1 id="shortcuts-browse-mode">
- <title>Browse Mode Shortcuts</title>
- <informaltable frame="all">
- <tgroup cols="2">
- <thead>
- <row>
- <entry>
- Key
- </entry>
- <entry>
- Action
- </entry>
- </row>
- </thead>
- <tbody>
- <row>
- <entry>
- <keycombo><keycap>Ctrl</keycap><keycap>A</keycap></keycombo>
- </entry>
- <entry>
- Select all
- </entry>
- </row>
- <row>
- <entry>
- <keycombo><keycap>Ctrl</keycap><keycap>Skift</keycap>
- <keycap>A</keycap></keycombo>
- </entry>
- <entry>
- Unselect all
- </entry>
- </row>
- <row>
- <entry>
- Arrow keys or <keycap>H</keycap>, <keycap>J</keycap>,
- <keycap>K</keycap>, <keycap>L</keycap>
- </entry>
- <entry>
- Move focus
- </entry>
- </row>
- <row>
- <entry>
- <keycap>Ctrl</keycap>-Arrow key
- </entry>
- <entry>
- Move the focus without changing the selection
- </entry>
- </row>
- <row>
- <entry>
- <keycap>Spacebar</keycap>
- </entry>
- <entry>
- Select or unselect the focused photo
- </entry>
- </row>
- <row>
- <entry>
- <keycombo><keycap>Skift</keycap>
- <keycap>Arrow key</keycap></keycombo>
- </entry>
- <entry>
- Change the photo selection
- </entry>
- </row>
- <row>
- <entry>
- <keycombo><keycap>Ctrl</keycap><keycap>Skift</keycap>
- <keycap>Left arrow or Right arrow</keycap></keycombo>
- </entry>
- <entry>
- Add/Remove all photos in the row, in the direction pressed, to the selection
- </entry>
- </row>
- <row>
- <entry>
- <keycap>V</keycap>
- </entry>
- <entry>
- Pops up a larger preview of the picture pointed by the mouse
- </entry>
- </row>
- <row>
- <entry>
- <keycombo><keycap>Skift</keycap><keycap>V</keycap></keycombo>
- </entry>
- <entry>
- Pops up a larger preview and a color histogram of the picture pointed by the mouse
- </entry>
- </row>
- </tbody>
- </tgroup>
- </informaltable>
- </sect1>
-
- <sect1 id="shortcuts-tag">
- <title>Tag Shortcuts</title>
- <informaltable frame="all">
- <tgroup cols="2">
- <thead>
- <row>
- <entry>
- Key
- </entry>
- <entry>
- Action
- </entry>
- </row>
- </thead>
- <tbody>
- <row>
- <entry>
- <keycap>F2</keycap>
- </entry>
- <entry>
- Rename selected tag
- </entry>
- </row>
- <row>
- <entry>
- <keycombo><keycap>Ctrl</keycap><keycap>T</keycap></keycombo>
- </entry>
- <entry>
- Add tags to selected photos
- </entry>
- </row>
- <row>
- <entry>-</entry>
- <entry>
- Drag and drop tags to move them
- </entry>
- </row>
- <row>
- <entry>-</entry>
- <entry>
- Type a tag's name to jump to it (only works if tag is shown/expanded)
- </entry>
- </row>
- </tbody>
- </tgroup>
- </informaltable>
- </sect1>
-
- <sect1 id="shortcuts-edit-mode">
- <title>Edit Mode Shortcuts</title>
- <informaltable frame="all">
- <tgroup cols="2">
- <thead>
- <row>
- <entry>
- Key
- </entry>
- <entry>
- Action
- </entry>
- </row>
- </thead>
- <tbody>
- <row>
- <entry>
- <keycap>PageUp</keycap>, <keycap>Backspace</keycap>, <keycap>B</keycap>
- </entry>
- <entry>
- Go to Previous Photo
- </entry>
- </row>
- <row>
- <entry>
- <keycap>PageDown</keycap>, <keycap>Spacebar</keycap>, <keycap>N</keycap>
- </entry>
- <entry>
- Go to Next Photo
- </entry>
- </row>
- <row>
- <entry>
- Arrow keys or <keycap>H</keycap>, <keycap>J</keycap>,
- <keycap>K</keycap>, <keycap>L</keycap>
- </entry>
- <entry>
- Go to Previous/Next photo or move around a zoomed photo
- </entry>
- </row>
- <row>
- <entry>
- <keycap>R</keycap>
- </entry>
- <entry>
- Go to a random photo
- </entry>
- </row>
- <row>
- <entry>
- <keycap>f</keycap>
- </entry>
- <entry>
- Full screen view
- </entry>
- </row>
- <row>
- <entry>
- <keycap>0</keycap>
- </entry>
- <entry>
- Fit the image to the screen
- </entry>
- </row>
- <row>
- <entry>
- <keycap>1</keycap>
- </entry>
- <entry>
- Zoom Factor to 1.0 (1 screen pixel per image pixel)
- </entry>
- </row>
- <row>
- <entry>
- <keycap>2</keycap>
- </entry>
- <entry>
- Zoom Factor to 2.0 (4 screen pixels per image pixel)
- </entry>
- </row>
- <row>
- <entry>
- <keycap>Esc</keycap>
- </entry>
- <entry>
- Returns to Browser mode
- </entry>
- </row>
- <row>
- <entry>
- <keycap>V</keycap>
- </entry>
- <entry>
- Examine photo with magnifying glass (Loupe). Doubleclick on the
- Loupe, or type <keycap>v</keycap> again to close it.
- </entry>
- </row>
- <row>
- <entry>
- <keycap>Skift</keycap>-Mousewheel
- </entry>
- <entry>
- Faster filmstrip scrolling
- </entry>
- </row>
- <row>
- <entry>
- <keycap>i</keycap>
- </entry>
- <entry>
- Toggle infobox visibility ''(only when in full screen)''
- </entry>
- </row>
- </tbody>
- </tgroup>
- </informaltable>
- </sect1>
- </chapter>
-
-</book>
diff --git a/docs/de/de.po b/docs/de/de.po
deleted file mode 100644
index 1457628..0000000
--- a/docs/de/de.po
+++ /dev/null
@@ -1,2004 +0,0 @@
-# German translation of the f-spot manual.
-# Arun Persaud <arun at nubati.net>, 2008.
-# Stefan Horning <stefan at hornings.de>, 2009.
-# Mario Blättermann <mariobl at gnome.org>, 2009.
-#
-msgid ""
-msgstr ""
-"Project-Id-Version: f-spot\n"
-"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2009-08-25 07:01+0000\n"
-"PO-Revision-Date: 2009-08-26 21:40+0100\n"
-"Last-Translator: Mario Blättermann <mariobl at gnome.org>\n"
-"Language-Team: German GNOME Translators <gnome-de at gnome.org>\n"
-"MIME-Version: 1.0\n"
-"Content-Type: text/plain; charset=UTF-8\n"
-"Content-Transfer-Encoding: 8bit\n"
-"X-Poedit-Language: German\n"
-"X-Poedit-Country: GERMANY\n"
-
-#. When image changes, this message will be marked fuzzy or untranslated for you.
-#. It doesn't matter what you translate it to: it's not used at all.
-#: C/f-spot.xml:163(None)
-msgid "@@image: 'figures/f-spot-crop.png'; md5=63e18c96702aea4701024837a13ae2d9"
-msgstr "translated"
-
-#. When image changes, this message will be marked fuzzy or untranslated for you.
-#. It doesn't matter what you translate it to: it's not used at all.
-#: C/f-spot.xml:187(None)
-msgid ""
-"@@image: 'figures/f-spot-straighten.png'; md5=ceeff0cac633d06599fa5760cc4bc568"
-msgstr "mark as translated"
-
-#. When image changes, this message will be marked fuzzy or untranslated for you.
-#. It doesn't matter what you translate it to: it's not used at all.
-#: C/f-spot.xml:206(None)
-msgid ""
-"@@image: 'figures/f-spot-adjust-colors.png'; "
-"md5=6a5d9eaaaaf238ccbf70552bc073898c"
-msgstr "mark as translated"
-
-#. When image changes, this message will be marked fuzzy or untranslated for you.
-#. It doesn't matter what you translate it to: it's not used at all.
-#: C/f-spot.xml:224(None)
-msgid ""
-"@@image: 'figures/f-spot-autocolor.png'; md5=240c4a86c95c9507755fe790bef0e24a"
-msgstr "mark as translated"
-
-#. When image changes, this message will be marked fuzzy or untranslated for you.
-#. It doesn't matter what you translate it to: it's not used at all.
-#: C/f-spot.xml:241(None)
-msgid ""
-"@@image: 'figures/f-spot-desaturate.png'; md5=fa54dfd08171658d720be71b6d367139"
-msgstr "mark as translated"
-
-#. When image changes, this message will be marked fuzzy or untranslated for you.
-#. It doesn't matter what you translate it to: it's not used at all.
-#: C/f-spot.xml:258(None)
-msgid ""
-"@@image: 'figures/f-spot-sepia.png'; md5=154d6e34903664dbd776f2bef405ce91"
-msgstr "mark as translated"
-
-#. When image changes, this message will be marked fuzzy or untranslated for you.
-#. It doesn't matter what you translate it to: it's not used at all.
-#: C/f-spot.xml:289(None)
-msgid ""
-"@@image: 'figures/f-spot-red-eye.png'; md5=743d0a2ccc9b2fa8fa314855c225cd31"
-msgstr "mark as translated"
-
-#. When image changes, this message will be marked fuzzy or untranslated for you.
-#. It doesn't matter what you translate it to: it's not used at all.
-#: C/f-spot.xml:316(None)
-msgid ""
-"@@image: 'figures/f-spot-soft-focus.png'; md5=14d1437ce49c83f3ebbcf70b7047ffbe"
-msgstr "mark as translated"
-
-#. When image changes, this message will be marked fuzzy or untranslated for you.
-#. It doesn't matter what you translate it to: it's not used at all.
-#: C/f-spot.xml:608(None)
-msgid ""
-"@@image: 'figures/f-spot-fullscreen.png'; md5=86040e20ebf1015f6489a56e9589f063"
-msgstr "mark as translated"
-
-#. When image changes, this message will be marked fuzzy or untranslated for you.
-#. It doesn't matter what you translate it to: it's not used at all.
-#: C/f-spot.xml:621(None)
-msgid ""
-"@@image: 'figures/f-spot-slideshow.png'; md5=84a69bc3bb7a1b8d04c967d3a66e6f23"
-msgstr "mark as translated"
-
-#: C/f-spot.xml:5(title)
-msgid "The F-Spot Manual"
-msgstr "Das F-Spot Benutzerhandbuch"
-
-#: C/f-spot.xml:7(para) C/f-spot.xml:9(subtitle)
-msgid "This is the user manual for F-Spot, a GNOME personal photo manager."
-msgstr ""
-"Dies ist das Benutzerhandbuch von F-Spot, einem GNOME-Programm zur Verwaltung "
-"von Fotos."
-
-#: C/f-spot.xml:11(year)
-#| msgid "2007-2008"
-msgid "2007-2009"
-msgstr "2007-2009"
-
-#: C/f-spot.xml:12(holder)
-msgid "Aaron Bockover, Gabriel Burt, Miguel de Icaza, Bengt Thuree"
-msgstr "Aaron Bockover, Gabriel Burt, Miguel de Icaza, Bengt Thuree"
-
-#: C/f-spot.xml:15(publishername)
-msgid "GNOME Documentation Project"
-msgstr "GNOME-Dokumentationsprojekt"
-
-#: C/f-spot.xml:19(firstname)
-msgid "Miguel"
-msgstr "Miguel"
-
-#: C/f-spot.xml:20(surname)
-msgid "de Icaza"
-msgstr "de Icaza"
-
-#: C/f-spot.xml:23(firstname)
-msgid "Aaron"
-msgstr "Aaron"
-
-#: C/f-spot.xml:24(surname)
-msgid "Bockover"
-msgstr "Bockover"
-
-#: C/f-spot.xml:27(firstname)
-msgid "Bengt"
-msgstr "Bengt"
-
-#: C/f-spot.xml:28(surname)
-msgid "Thuree"
-msgstr "Thuree"
-
-#: C/f-spot.xml:31(firstname)
-msgid "Gabriel"
-msgstr "Gabriel"
-
-#: C/f-spot.xml:32(surname)
-msgid "Burt"
-msgstr "Burt"
-
-#: C/f-spot.xml:35(firstname)
-msgid "Alexandre"
-msgstr "Alexandre"
-
-#: C/f-spot.xml:36(surname)
-msgid "Prokoudine"
-msgstr "Prokoudine"
-
-#: C/f-spot.xml:39(firstname)
-msgid "Stephane"
-msgstr "Stephane"
-
-#: C/f-spot.xml:40(surname)
-msgid "Delcroix"
-msgstr "Delcroix"
-
-#: C/f-spot.xml:46(revnumber)
-msgid "0.5"
-msgstr "0.5"
-
-#: C/f-spot.xml:47(date)
-msgid "2008-09-25"
-msgstr "25. September 2008"
-
-#: C/f-spot.xml:50(revnumber)
-msgid "0.4"
-msgstr "0.4"
-
-#: C/f-spot.xml:51(date)
-msgid "2008-09-12"
-msgstr "12. September 2008"
-
-#: C/f-spot.xml:54(revnumber)
-msgid "0.3"
-msgstr "0.3"
-
-#: C/f-spot.xml:55(date)
-msgid "2007-07-26"
-msgstr "26. Juli 2007"
-
-#: C/f-spot.xml:61(title)
-msgid "Organizing your photos"
-msgstr "Organisieren Ihrer Fotos"
-
-#: C/f-spot.xml:64(title)
-msgid "Import"
-msgstr "Importieren"
-
-#: C/f-spot.xml:66(para)
-msgid ""
-"You can import photos from your hard drive or your camera. When you import "
-"your photos into F-Spot from your camera, it will always make a copy of them, "
-"leaving you free to clear your camera's memory. By default, F-Spot will make "
-"a copy of photos imported from your hard drive. Uncheck the <guilabel>Copy</"
-"guilabel> option on the import dialog or hold <keycap>Shift</keycap> when "
-"dragging photos into F-Spot if you do not wish to copy them from your hard "
-"drive."
-msgstr ""
-"Sie können Fotos von der Festplatte oder ihrer Kamera importieren. Wenn Sie "
-"Fotos von ihrer Kamera in F-Spot importieren, wird immer eine Kopie angelegt, "
-"so dass Sie den Speicher ihrer Kamera löschen können. Standardmäßig legt F-"
-"Spot auch Kopien der Fotos an, die von der Festplatte importiert werden. "
-"Entfernen Sie die Markierung für die <guilabel>Kopie</guilabel>-Option im "
-"Importdialog oder halten Sie die <keycap>Umschalttaste</keycap> gedrückt, "
-"während Sie Fotos nach F-Spot verschieben, falls Sie nicht wollen, dass eine "
-"Kopie angelegt wird."
-
-#: C/f-spot.xml:76(para)
-msgid ""
-"By default, F-Spot copies your photos to the <filename class=\"directory\">~/"
-"Photos</filename> folder. You can change the folder F-Spot uses in "
-"<guilabel>Preferences</guilabel> dialog (<menuchoice><guimenu>Edit</"
-"guimenu><guimenuitem>Preferences</guimenuitem></menuchoice>). You can also "
-"disable physical copying of images to that directory and make F-Spot only "
-"reference to existing files. For that you need to disable checkbox "
-"<guilabel>Copy files to the Photos folder</guilabel>."
-msgstr ""
-"Standardmäßig kopiert F-Spot Ihre Fotos in den Ordner <filename class="
-"\"directory\">~/Fotos</filename>. Sie können den Ordner, den F-Spot benutzen "
-"soll, in den <guilabel>Einstellungen</guilabel> "
-"(<menuchoice><guimenu>Bearbeiten</guimenu><guimenuitem>Einstellungen</"
-"guimenuitem></menuchoice>) ändern. Sie können das physikalische Kopieren "
-"Ihrer Bilder in diesen Ordner auch deaktivieren und F-Spot nur vorhandene "
-"Dateien anzeigen lassen. Dazu deaktivieren Sie das Ankreuzfeld vor "
-"<guilabel>Dateien in den Fotoordner kopieren</guilabel>."
-
-#: C/f-spot.xml:85(para)
-msgid ""
-"If there is a tiny chance that some of your photos are already imported from "
-"the chosen source, you can use <guilabel>Detect duplicates</guilabel> option. "
-"In this case F-Spot will try to find out if exactly this image is already "
-"present in the database and thus new copy of it should not be imported."
-msgstr ""
-"Falls die geringste Wahrscheinlichkeit besteht, dass manche Ihrer Fotos "
-"bereits von der vorhandenen Quelle importiert wurden, können Sie die Option "
-"<guilabel>Duplikate finden</guilabel> verwenden. In diesem Fall wird F-Spot "
-"versuchen herauszufinden, ob sich das exakt gleiche Bild schon in der "
-"Datenbank befindet. Die neue Kopie wird dann nicht importiert."
-
-#: C/f-spot.xml:92(para)
-msgid ""
-"If all the photos you are importing at one time are from a particular event, "
-"or have some other characteristic in common, you can create a tag for them so "
-"you can later find them with ease. To do this, follow the instructions from "
-"<xref linkend=\"tag\"/> to create a new tag, then when you are importing "
-"them, check the button for <guilabel>Attach Tag</guilabel> and choose the tag "
-"you created."
-msgstr ""
-"Falls alle Fotos, die Sie auf einmal importieren vom gleichen Ereignis sind "
-"oder andere Gemeinsamkeiten aufweisen, können Sie eine Markierung für diese "
-"Bildergruppe erstellen. Das hilft dabei, die Bilder einfach wieder zu finden. "
-"Folgen Sie dazu den Anweisungen in <xref linkend=\"tag\"/>, um eine neue "
-"Markierung anzulegen. Beim Importieren aktivieren Sie <guilabel>Markierung "
-"hinzufügen</guilabel> und wählen die erstellte Markierung aus."
-
-#: C/f-spot.xml:102(para)
-#| msgid ""
-#| "F-Spot uses a database stored at <filename>~/.gnome2/f-spot/photos.db</"
-#| "filename>. Note, to access it, use the sqlite3 command. You can also "
-#| "manually specify path to a database by running F-Spot with <option>-b</"
-#| "option> option."
-msgid ""
-"F-Spot uses a database stored at <filename>~/.config/f-spot/photos.db</"
-"filename>. Note, to access it, use the sqlite3 command. You can also manually "
-"specify path to a database by running F-Spot with <option>-b</option> option."
-msgstr ""
-"F-Spot benutzt eine Datenbank, die in <filename>~/.config/f-spot/photos.db</"
-"filename> gespeichert ist. Hinweis: Um auf die Datenbank zuzugreifen, müssen "
-"Sie den sqlite3-Befehl verwenden. Sie können den Pfad zur Datenbank selbst "
-"angeben, indem Sie F-Spot mit der Option <option>-b</option> ausführen."
-
-#: C/f-spot.xml:110(para)
-msgid ""
-"After an import, F-Spot will display the pictures of the latest import roll "
-"only. Read <xref linkend=\"enjoying-search\"/> to learn how to deal with "
-"import rolls."
-msgstr ""
-"Nach dem Importieren zeigt F-Spot nur die Bilder des aktuellen Importvorgangs "
-"an. Lesen Sie <xref linkend=\"enjoying-search\"/>, um mehr über Import-"
-"Markierungen zu erfahren."
-
-#: C/f-spot.xml:115(para)
-msgid ""
-"You can also import directly from Mozilla <ulink url=\"http://www.mozilla.com/"
-"en-US/firefox/\">Firefox</ulink> and <ulink url=\"http://www.mozilla.com/en-"
-"US/thunderbird/\">Thunderbird</ulink> using <ulink url=\"https://addons."
-"mozilla.org/en-US/firefox/addon/7091\">Firefox</ulink> and <ulink url="
-"\"https://addons.mozilla.org/en-US/thunderbird/addon/7011\">Thunderbird</"
-"ulink> F-Spot importer extensions written by <ulink url=\"http://"
-"personalpages.tds.net/~cdovel/\">Pizzach</ulink>."
-msgstr ""
-"Sie können auch direkt aus Mozilla <ulink url=\"http://www.mozilla-europe.org/"
-"de/firefox/\">Firefox</ulink> und <ulink url=\"http://www.mozilla-europe.org/"
-"de/thunderbird/\">Thunderbird</ulink> importieren, indem Sie die <ulink url="
-"\"https://addons.mozilla.org/de/firefox/addon/7091\">Firefox</ulink> und "
-"<ulink url=\"https://addons.mozilla.org/de/thunderbird/addon/7011"
-"\">Thunderbird</ulink> F-Spot Erweiterungen von <ulink url=\"http://"
-"personalpages.tds.net/~cdovel/\">Pizzach</ulink> verwenden."
-
-#: C/f-spot.xml:127(title)
-msgid "Edit"
-msgstr "Bearbeiten"
-
-#: C/f-spot.xml:129(para)
-msgid ""
-"If you double click or press enter on an image, you enter Edit mode, where "
-"you can remove red-eye, crop, and adjust brightness and colors."
-msgstr ""
-"Durch einen Doppelklick oder durch Drücken der Eingabetaste gelangen Sie in "
-"den Bearbeitungsmodus, wo Sie rote Augen entfernen, Zuschneiden und Farben "
-"oder Helligkeit anpassen können."
-
-#: C/f-spot.xml:135(title)
-msgid "Versions"
-msgstr "Versionen"
-
-#: C/f-spot.xml:137(para)
-#| msgid ""
-#| "When you edit your photos, a new copy (called a version) is created, so "
-#| "your original is never altered. After your first edit to a photo, "
-#| "subsequent edits will modify the same version. If you want to create "
-#| "mulitple versions of your photo, perhaps with different cropping or "
-#| "coloring, you can do so via the <menuchoice><guimenu>File</"
-#| "guimenu><guimenuitem>Create new version</guimenuitem></menuchoice> option."
-msgid ""
-"When you edit your photos, a new copy (called a version) is created, so your "
-"original is never altered. After your first edit to a photo, subsequent edits "
-"will modify the same version. If you want to create multiple versions of your "
-"photo, perhaps with different cropping or coloring, you can do so via the "
-"<menuchoice><guimenu>File</guimenu><guimenuitem>Create new version</"
-"guimenuitem></menuchoice> option."
-msgstr ""
-"Wenn Sie Ihre Fotos bearbeiten, wird eine neue Version des Bildes angelegt. "
-"So bleibt das Original immer erhalten. Nachdem Sie das Foto zum ersten Mal "
-"bearbeitet haben, werden alle Änderungen in diese Version übernommen. Falls "
-"Sie weitere Versionen dieses Bildes anlegen möchten – etwa mit verschiedenen "
-"Zuschnitten oder Farbanpassungen – dann verwenden Sie die Funktion "
-"<menuchoice><guimenu>Datei</guimenu><guimenuitem>Neue Version erstellen</"
-"guimenuitem></menuchoice>."
-
-#: C/f-spot.xml:148(title)
-msgid "Crop"
-msgstr "Zuschneiden"
-
-#: C/f-spot.xml:150(para)
-#| msgid ""
-#| "Cropping an image is a great way to improve the quality of a photograph by "
-#| "improving how it is framed. You crop a photo by selecting the part of the "
-#| "photo you want to keep. If you want your photo to be the exact dimensions "
-#| "necessary for a certain print size, you can constrain the kind of "
-#| "selection F-Spot will allow you to draw by choosing the appropriate size "
-#| "from the constraint drop down. See the <xref linkend=\"edit-remove-red-eye"
-#| "\"/> below for details on making a selection on your photo."
-msgid ""
-"Cropping an image is a great way to improve the quality of a photograph by "
-"change how it is framed. You crop a photo by selecting the part of the photo "
-"you want to keep. If you want your photo to be the exact dimensions necessary "
-"for a certain print size, you can constrain the kind of selection F-Spot will "
-"allow you to draw by choosing the appropriate size from the constraint drop "
-"down. See the <xref linkend=\"edit-remove-red-eye\"/> below for details on "
-"making a selection on your photo."
-msgstr ""
-"Zuschneiden ist eine gute Möglichkeit, die Qualität Ihrer Fotografie zu "
-"verbessern, indem Sie unnötige Bereiche am Rand entfernen. Sie schneiden das "
-"Foto zu, indem Sie den Teil des Bildes auswählen, den Sie erhalten möchten. "
-"Falls Sie Ihr Foto auf ein exaktes Maß zuschneiden möchten, können Sie den "
-"ausgewählten Bereich mit dem angebotenen Auswahlmenü auf die gewünschte Größe "
-"anpassen. Im nachfolgenden <xref linkend=\"edit-remove-red-eye\"/> finden Sie "
-"weitere Details über das Auswählen eines Bereiches Ihrer Fotografie."
-
-#: C/f-spot.xml:160(title)
-msgid "Crop tool"
-msgstr "Zuschneiden-Werkzeug"
-
-# Auch wenn im Original »press« stehen sollte (hier zwar nicht), dann gilt: Einen Knopf klicken wir an, gedrückt wird nur auf der Tastatur.
-#: C/f-spot.xml:167(para) C/f-spot.xml:368(para)
-msgid ""
-"Once you have made your crop selection, you must click the crop button "
-"beneath the image to finalize the crop. If you are working with the original "
-"photo, cropping creates a new version your photo."
-msgstr ""
-"Sobald Sie Ihre Auswahl zum Ausschneiden getroffen haben, müssen Sie den "
-"»Zuschneiden« Knopf anklicken, um den Zuschneide-Vorgang abzuschließen. Beim "
-"Bearbeiten des Original-Fotos wird dabei eine neue Version des Fotos angelegt."
-
-#: C/f-spot.xml:175(title)
-msgid "Straighten"
-msgstr "Begradigen"
-
-#: C/f-spot.xml:177(para)
-msgid ""
-"Straighten effect is a tool to level a photo, quite helpful for landscapes "
-"taken without a tripod, when (imaginary) line of horizon is not at 0°. This "
-"tool rotates an image by a specified angle and automagically crops the "
-"resulted image, so that you always see a perfect rectangle."
-msgstr ""
-"Das Begradigen-Werkzeug dient zum Anpassen von ohne Stativ aufgenommenen "
-"Landschaftsaufnahmen, bei denen die Horizontlinie schräg (nicht 0°) verläuft. "
-"Das Werkzeug dreht das Bild um den angegebenen Winkel und schneidet die "
-"Ränder automatisch zu, so dass sich immer ein Rechteck ergibt."
-
-#: C/f-spot.xml:184(title)
-msgid "Straighten tool"
-msgstr "Begradigungs-Werkzeug"
-
-#: C/f-spot.xml:194(title)
-msgid "Adjust Colors"
-msgstr "Farbabgleich"
-
-#: C/f-spot.xml:196(para)
-msgid ""
-"To adjust the brightness, contrast, and colors of a photo, first click the "
-"<guibutton>Adjust the photo colors</guibutton> icon to open the adjustment "
-"dialog. Change then some settings and save them with <guibutton>OK</"
-"guibutton>."
-msgstr ""
-"Um die Helligkeit, den Kontrast oder Farben eines Fotos anzupassen, klicken "
-"Sie zuerst auf den <guibutton>Farbabgleich</guibutton>-Knopf, um den "
-"Farbabgleichs-Dialog zu öffnen. Ändern Sie die gewünschten Parameter und "
-"speichern Sie sie mit <guibutton>Anpassen</guibutton>."
-
-#: C/f-spot.xml:203(title)
-msgid "Adjust Colors tool"
-msgstr "Farbabgleichs-Werkzeug"
-
-#: C/f-spot.xml:213(title) C/f-spot.xml:221(title)
-msgid "AutoColor"
-msgstr "Automatischer Farbabgleich"
-
-#: C/f-spot.xml:215(para)
-msgid ""
-"This effect automatically adjusts color levels to make a pretty balanced "
-"picture color-wise. It serves best for pictures taken with automatical white "
-"balance, when camera didn't manage to do the job well."
-msgstr ""
-"Dieser Effekt ändert automatisch die Farbeinstellungen, so dass ein farblich "
-"gut ausgeglichenes Bild entsteht. Dieser Effekt ist am besten für Bilder "
-"geeignet, die mit automatischem Weißabgleich aufgenommen wurden, aber die "
-"Kamera diese Aufgabe nicht all zu gut erfüllen konnte."
-
-#: C/f-spot.xml:231(title)
-msgid "Desaturate"
-msgstr "Entsättigen"
-
-#: C/f-spot.xml:233(para)
-msgid ""
-"To make a colorful photo a black and white one, open a photo of choice and "
-"press <guibutton>Desaturate</guibutton> button."
-msgstr ""
-"Um ein farbiges Foto in ein Schwarz-Weiß-Bild umzuwandeln, öffnen Sie ein "
-"Foto Ihrer Wahl und klicken auf den <guibutton>Entsättigen</guibutton>-Knopf."
-
-#: C/f-spot.xml:238(title) C/f-spot.xml:255(title)
-msgid "Desaturation tool"
-msgstr "Entsättigungs-Werkzeug"
-
-#: C/f-spot.xml:248(title)
-msgid "Sepia"
-msgstr "Sepia-Farben"
-
-#: C/f-spot.xml:250(para)
-msgid ""
-"To make a colorful photo look like an old-style picture in sepia tones, open "
-"a photo of choice and press <guibutton>Sepia</guibutton> button."
-msgstr ""
-"Um ein farbiges Bild wie ein altes Bild in Sepia-Tönen aussehen zu lassen, "
-"öffnen Sie ein Foto Ihrer Wahl und klicken auf den <guibutton>Sepiafarben</"
-"guibutton>-Knopf."
-
-#: C/f-spot.xml:265(title)
-msgid "Remove Red-Eye"
-msgstr "Rote-Augen-Reduzierung"
-
-#: C/f-spot.xml:267(para)
-msgid ""
-"To remove redeye from a photo, you need to select a zone containing the eyes. "
-"You may want to zoom in on the image to accurately select the eyes in the "
-"photo. You should be able to correct both eyes on the same person in one "
-"shot, or even the eyes from multiple people at once. If this doesn't work for "
-"you, or the selected zone contains some vivid red parts (lips, ...) you'll "
-"probably have to correct one red eye at a time."
-msgstr ""
-"Um rote Augen aus Ihrem Foto zu entfernen, wählen Sie ein Bild Ihrer Wahl und "
-"drücken den <guibutton>Rote-Augen-Reduzieren</guibutton> Knopf. Sie müssen "
-"zunächst den Augenbereich auswählen. Am besten Sie vergrößern das Bild, um "
-"die Augen im Foto akkurat auszuwählen. Normalerweise können Sie mehrere Augen "
-"auf einmal auswählen und gleichzeitig korrigieren. Falls dies nicht "
-"funktioniert, oder sich wichtige rote Bereiche (z.B. Lippen) gleich daneben "
-"befinden, kann es besser sein, ein Auge nach dem anderen zu korrigieren."
-
-#: C/f-spot.xml:275(para)
-msgid ""
-"To make your selection, click one corner of the rectangle that will be your "
-"selection, and drag your mouse to the diagonal corner and release it. You can "
-"resize your selection by dragging its edges, and you can move it by clicking "
-"in the middle of it and dragging it to where you want it."
-msgstr ""
-"Um Ihre Auswahl zu treffen, klicken Sie auf eine Ecke des Rechtecks, das Ihre "
-"Auswahl begrenzen soll. Dann ziehen Sie die Auswahl mit der Maus in die "
-"diagonal gegenüberliegende Ecke und lassen Sie die Maus-Taste los. Sie können "
-"die Größe der Auswahl noch ändern, indem Sie an den Ecken ziehen, oder Sie "
-"durch Klicken in der Mitte verschieben."
-
-#: C/f-spot.xml:281(para)
-msgid ""
-"Once you have selected a zone, you can remove the red from it by clicking the "
-"red-eye button beneath the photo."
-msgstr ""
-"Sobald Sie den Bereich markiert haben, können Sie die roten Augen entfernen. "
-"Klicken Sie dazu auf den <guibutton>Korrigiere!</guibutton>-Knopf."
-
-#: C/f-spot.xml:286(title)
-msgid "Red-Eye tool"
-msgstr "Werkzeug zur Reduzierung roter Augen"
-
-#: C/f-spot.xml:294(para)
-msgid ""
-"You can change the threshold for redeyes detection by changing the gconf key "
-"<filename class=\"directory\">/apps/f-spot/edit/redeye_threshold</filename>."
-msgstr ""
-"Sie können den Grenzwert für die Rote-Augen-Erkennung durch folgenden Gconf-"
-"Schlüssel beeinflussen: <filename class=\"directory\">/apps/f-spot/edit/"
-"redeye_threshold</filename>."
-
-#: C/f-spot.xml:303(title)
-msgid "Soft Focus"
-msgstr "Weicher Fokus"
-
-#: C/f-spot.xml:305(para)
-msgid ""
-"In photography sharpening one region of a picture, while blurring all the "
-"rest, is a way to make an emphasis and grab attention. It is achieved by "
-"using a lens that allows shooting with a short distance in front of and "
-"beyond the subject that appears to be in focus. Soft focus effect is a way to "
-"emulate such a lens."
-msgstr ""
-
-#: C/f-spot.xml:313(title)
-msgid "Soft Focus tool"
-msgstr "Werkzeug »Weicher Fokus«"
-
-#: C/f-spot.xml:320(para)
-msgid ""
-"Click to choose central point of the area you want to be in focus and adjust "
-"amount of blurring, then click <guibutton>OK</guibutton>."
-msgstr ""
-"Klicken Sie, um den zentralen Punkt auszuwählen, den Sie im Fokus haben "
-"möchten und passen Sie die Schärfe an. Zum Anwenden klicken Sie auf "
-"<guibutton>Weicher Fokus</guibutton>."
-
-#: C/f-spot.xml:327(title)
-msgid "Sharpen"
-msgstr "Schärfen"
-
-#: C/f-spot.xml:329(para)
-msgid ""
-"Out-of-focus photographs and most digitized images often need a sharpness "
-"correction. The Unsharp Mask effect sharpens edges of the elements without "
-"increasing noise or blemish. To sharpen a photo choose "
-"<menuchoice><guimenu>Edit</guimenu><guimenuitem>Sharpen...</guimenuitem></"
-"menuchoice> and specify the following values:"
-msgstr ""
-"Nicht korrekt scharf gestellte Fotos und die meisten digitalisierten Bilder "
-"benötigen eine Schärfekorrektur. Die Weichzeichner-Effekt schärft die Ränder "
-"der Bildelemente, ohne das Bildrauschen zu erhöhen oder das Bild zu "
-"verunstalten. um ein Foto zu schärfen, wählen Sie "
-"<menuchoice><guimenu>Bearbeiten</guimenu><guimenuitem>Schärfen</guimenuitem></"
-"menuchoice> und legen die folgenden Werte fest:"
-
-#: C/f-spot.xml:340(para)
-msgid "<parameter class=\"option\">Amount</parameter> — strength of sharpening."
-msgstr "<parameter class=\"option\">Betrag</parameter> — Stärke des Schärfens."
-
-#: C/f-spot.xml:345(para)
-msgid ""
-"<parameter class=\"option\">Radius</parameter> — how many pixels on either "
-"side of an edge will be affected by sharpening. High resolution images allow "
-"higher radius."
-msgstr ""
-"<parameter class=\"option\">Radius</parameter> — Legt fest, wie viele Pixel "
-"auf jeder Seite einer Ecke durch das Schärfen beeinflusst werden. Bilder mit "
-"höherer Auflösung erlauben einen höheren Radius."
-
-#: C/f-spot.xml:352(para)
-msgid ""
-"<parameter class=\"option\">Threshold</parameter> — the minimum difference in "
-"pixel values that indicates an edge where sharpen must be applied. This helps "
-"avoiding creation of blemishes in face, sky or water surface."
-msgstr ""
-"<parameter class=\"option\">Schwellwert</parameter> — Die minimale Differenz "
-"in Pixelwerten, die angibt an welchen Kanten das Schärfen angewendet werden "
-"soll. Dies hilft Unschönheiten in Gesichtern, im Himmel oder "
-"Wasseroberflächen zu vermeiden."
-
-#: C/f-spot.xml:362(title)
-msgid "Describe"
-msgstr "Beschreiben"
-
-#: C/f-spot.xml:364(para)
-msgid ""
-"You can also enter a description of the image by clicking on the text entry "
-"box below the image and typing."
-msgstr ""
-"Sie können eine Beschreibung des Bildes einfügen, indem Sie in die Text-Box "
-"unter dem Bild klicken und Ihren Text eingeben."
-
-#: C/f-spot.xml:376(title)
-msgid "Adjust Time"
-msgstr "Uhrzeit anpassen"
-
-#: C/f-spot.xml:378(para)
-msgid ""
-"In both 'browse' or 'edit' modes, you can adjust the time of one or multiple "
-"pictures (<menuchoice><guimenu>Edit</guimenu><guimenuitem>Adjust Time</"
-"guimenuitem></menuchoice>). Adjusting the time of multiple pictures at once "
-"helps you shift all an import roll if, e.g. the time on your camera is badly "
-"set or if you forgot to change it according to DST."
-msgstr ""
-"Sowohl im Übersichts- als auch im Bearbeitungsmodus können Sie die "
-"Aufnahmezeit eines oder mehrerer Bilder anpassen "
-"(<menuchoice><guimenu>Bearbeiten</guimenu><guimenuitem>Uhrzeit anpassen …</"
-"guimenuitem></menuchoice>)."
-
-#: C/f-spot.xml:390(title)
-msgid "Tag"
-msgstr "Markierung"
-
-#: C/f-spot.xml:391(para)
-msgid ""
-"F-Spot enables you to organize and enjoy your photos by associating them with "
-"various user-customizable tags. A tag is a merely a label. F-Spot comes with "
-"default tags to get you started; you are free to change them and add new "
-"ones. For example, if you want to create a tag for specific event, you can "
-"create a new tag named after that event under the Events tag."
-msgstr ""
-"F-Spot erlaubt Ihnen, Ihre Fotos mit Hilfe benutzerdefinierter Markierungen "
-"zu organisieren. Markierungen sind wie Schlagworte. F-Spot wird bereits mit "
-"vorgegebenen Markierungen ausgeliefert, um Ihnen den Einstieg zu erleichtern. "
-"Sie können diese Markierungen jedoch gerne ändern und/oder Neue hinzufügen. "
-"Falls Sie zum Beispiel eine Markierung für ein bestimmtes Ereignis anlegen "
-"möchten, können Sie diese Markierung unter der Markierung »Ereignisse« anlegen."
-
-# Ein typischer Fall für ein Komma: erweiterter Infinitiv mit »zu«
-#: C/f-spot.xml:398(para)
-msgid "There are many ways to tag photos:"
-msgstr "Es gibt verschiedene Möglichkeiten, Fotos zu markieren:"
-
-#: C/f-spot.xml:403(para)
-msgid "drag and drop the photo(s) onto the tag"
-msgstr "Indem Sie ein oder mehrere Fotos auf eine Markierung ziehen"
-
-#: C/f-spot.xml:408(para)
-msgid "drag and drop the tag onto the photo(s)"
-msgstr "Indem Sie eine Markierung auf ein oder mehrere Fotos ziehen"
-
-#: C/f-spot.xml:413(para)
-msgid "via the photo's right-click menu"
-msgstr "Über das Kontextmenü des Fotos (Rechtsklick)"
-
-#: C/f-spot.xml:418(para)
-msgid "via the Tags and Edit menus"
-msgstr "Mit den Menüs »Markierung« oder »Bearbeiten«"
-
-#: C/f-spot.xml:423(para)
-msgid ""
-"by typing them in. Press <keycap>t</keycap> to pop up the tag entry bar. Here "
-"you can enter the tags, separated by commas."
-msgstr ""
-"durch Eingeben von Markierungen. Drücken Sie <keycap>t</keycap>, um das "
-"Eingabefenster für Markierungen zu öffnen. Trennen Sie einzelne Markierungen "
-"durch Kommas (Sie können vorhandene Markierungen mit der Tabulatortaste "
-"vervollständigen)."
-
-#: C/f-spot.xml:427(para)
-msgid ""
-"You can also use auto-completion in this entry bar: After entering the "
-"beginning of a tag name, press <keycap>Tab</keycap> to see the first possible "
-"completion. You can cycle between other possible completions by pressing "
-"<keycap>Tab</keycap> again, and backwards with <keycombo action=\"simul"
-"\"><keycap>Shift</keycap><keycap>Tab</keycap></keycombo>. To confirm the "
-"suggested completion and enter a new tag, press <keycap>,</keycap>. By "
-"pressing <keycap>Enter</keycap> you leave the tag entry bar, possibly "
-"confirming the current completion. To abort the auto completion, just keep on "
-"typing."
-msgstr ""
-
-#: C/f-spot.xml:441(para)
-msgid ""
-"The first photo you associate with a tag will be used for that tag's icon. "
-"You can always edit a tag's name, parent tag, and icon by right clicking on "
-"it and choosing <guilabel>Edit tag</guilabel>."
-msgstr ""
-"Das erste Foto, das Sie mit einer Markierung bezeichnen, wird automatisch als "
-"Vorschaubild dieser Markierung verwendet. Sie können die Markierungs-"
-"Eigenschaften (Markierungsname, Vorschaubild, übergeordnete Markierung) "
-"jedoch jederzeit bearbeiten, indem sie erst rechts klicken und dann "
-"<guilabel>Ausgewählte Markierung bearbeiten …</guilabel> wählen."
-
-#: C/f-spot.xml:446(para)
-msgid ""
-"You can change a tag's parent by dragging and dropping it where you like. "
-"Also, you can edit the name of a tag by selecting it and pressing <keycap>F2</"
-"keycap>. Lastly, if you have the tag tree widget focused (e.g. you just "
-"clicked on a tag), you can start typing the name of a tag, and all the "
-"expanded tags in the list will be searched and you'll jump to any matching "
-"ones."
-msgstr ""
-"Sie können die übergeordnete Markierung ändern, indem Sie die Markierung an "
-"den gewünschten Platz ziehen. Durch drücken von <keycap>F2</keycap> können "
-"Sie eine ausgewählte Markierung umbenenen."
-
-#: C/f-spot.xml:455(para)
-msgid ""
-"You can also change size of tag icons in the sidebar or even make tag icons "
-"invisible by selecting preferred option from <menuchoice><guimenu>View</"
-"guimenu><guimenuitem>Tag Icons</guimenuitem></menuchoice> menu."
-msgstr ""
-"Sie können die Größe der Markierungs-Symbole in der Seitenleiste ändern oder "
-"diese sogar ausblenden, indem Sie Ihre bevorzugte Option im Menü "
-"<menuchoice><guimenu>Ansicht</guimenu><guimenuitem>Tag-Symbole</guimenuitem></"
-"menuchoice> wählen."
-
-#: C/f-spot.xml:463(para)
-msgid ""
-"F-Spot can write tags as metadata fields into JPEG files. Tags for various "
-"RAW files, PNG, TIFF, and others are written to F-Spot's database. You will "
-"have to re-tag these files if you re-import your collection."
-msgstr ""
-"F-Spot kann Markierungen (Tags) als Metadaten-Felder in JPEG-Dateien "
-"schreiben. Tags für verschiedene andere Dateien, wie etwa PNG, TIFF, RAW-"
-"Dateien, werden in F-Spots Datenbank gespeichert. Sie müssen diese Dateien "
-"neu taggen, wenn Sie Ihre Sammlung neu importieren."
-
-#: C/f-spot.xml:474(title)
-msgid "Enjoying your photos"
-msgstr "Genießen Ihrer Fotos"
-
-#: C/f-spot.xml:476(title)
-msgid "Browse"
-msgstr "Durchsuchen"
-
-#: C/f-spot.xml:477(para)
-msgid ""
-"You can use the slider widget to browse your photos by month or by directory. "
-"To change this setting, go to <menuchoice><guimenu>View</"
-"guimenu><guimenuitem>Arranged By</guimenuitem></menuchoice>."
-msgstr ""
-"Sie können den Schieberegler benutzen, um Ihre Fotos anhand von Monat oder "
-"Ordner zu durchsuchen. Um diese Einstellung zu ändern, wählen Sie "
-"<menuchoice><guimenu>Ansicht</guimenu><guimenuitem>Sortiert nach</"
-"guimenuitem></menuchoice>."
-
-#: C/f-spot.xml:485(title)
-msgid "Search"
-msgstr "Suche"
-
-#: C/f-spot.xml:487(para)
-#| msgid ""
-#| "F-Spot uses search search filters to help you better define search "
-#| "criteria."
-msgid "F-Spot uses search filters to help you better define search criteria."
-msgstr ""
-"F-Spot benutzt Suchfilter, um Ihnen das Festlegen von Suchkriterien zu "
-"erleichtern."
-
-#: C/f-spot.xml:492(title)
-msgid "Tags"
-msgstr "Markierungen"
-
-#: C/f-spot.xml:494(para)
-msgid ""
-"You can start a search by double clicking or activating a tag from the tag "
-"list. Alternatively, you can show the find bar with "
-"<menuchoice><guimenu>Find</guimenu><guimenuitem>Show Find Bar</guimenuitem></"
-"menuchoice>. With the find bar shown, you can drag tags from the tag view to "
-"the find bar."
-msgstr ""
-"Sie können eine Suche starten, indem Sie auf eine Markierung doppelklicken "
-"oder diese in der Markierungsliste auswählen. Alternativ können Sie das "
-"Suchfeld mit Hilfe des Menüs <menuchoice><guimenu>Suchen</"
-"guimenu><guimenuitem>Suchfeld anzeigen</guimenuitem></menuchoice>. Bei "
-"angezeigtem Suchfeld können Sie Markierungen aus der Markierungsansicht in "
-"das Suchfeld ziehen."
-
-#: C/f-spot.xml:500(para)
-msgid ""
-"To find photos that are tagged with both of two tags, activate the first in "
-"the tag view or drag it onto the find bar, then drag the second tag and drop "
-"it on top of the first. You can also right click on the second tag in the tag "
-"view, or use the <guimenu>Find</guimenu> menu, and choose <guimenuitem>Find "
-"With...</guimenuitem> and select the first tag (or group of tags)."
-msgstr ""
-
-#: C/f-spot.xml:507(para)
-msgid ""
-"You can drag a tag icon around on the find bar to change from finding it and "
-"another tag to finding it or another tag."
-msgstr ""
-
-#: C/f-spot.xml:511(para)
-msgid ""
-"You can search for photos that do not have a particular tag by double-"
-"clicking on a tag in the find bar. Alternatively, you can right-click a tag "
-"in the find bar and select <guimenuitem>Exclude</guimenuitem>."
-msgstr ""
-"Sie können nach Fotos suchen, die eine bestimmte Markierung nicht haben. "
-"Doppelklicken Sie hierzu auf eine der Markierungen in der Suchzeile. "
-"Wahlweise können Sie mit der rechten Maustaste auf eine Markierung in der "
-"Suchzeile klicken und <guimenuitem>Ausschließen</guimenuitem> wählen."
-
-#: C/f-spot.xml:516(para)
-msgid ""
-"To remove a tag from the search, drag it away from the find bar, or right "
-"click and select <guimenuitem>Remove</guimenuitem>."
-msgstr ""
-"Um eine Markierung von der Suche auszuschließen, ziehen Sie sie aus der "
-"Suchzeile heraus oder klicken Sie mit der rechten Maustaste darauf und wählen "
-"Sie <guimenuitem>Entfernen</guimenuitem>."
-
-# Gibt es für »hidden« eine Übersetzung in der Benutzeroberfläche?
-#: C/f-spot.xml:520(para)
-msgid ""
-"By default, photos tagged <emphasis>Hidden</emphasis> will not be shown. You "
-"must explicitly include the <emphasis>Hidden</emphasis> tag in your search to "
-"show such photos."
-msgstr ""
-"Standardmäßig werden mit der Markierung <emphasis>Versteckt</emphasis> "
-"bezeichnete Fotos ausgeblendet. Sie müssen die Markierung "
-"<emphasis>Versteckt</emphasis> ausdrücklich in Ihre Suche mit aufnehmen, um "
-"diese Fotos anzuzeigen."
-
-#: C/f-spot.xml:528(title)
-msgid "Import Rolls"
-msgstr "Rollen importieren"
-
-#: C/f-spot.xml:529(para)
-msgid ""
-"F-Spot remembers what pictures were imported every now and then. Use "
-"<menuchoice><guimenu>Find</guimenu><guisubmenu>Import Roll</"
-"guisubmenu><guimenuitem>Last import roll</guimenuitem></menuchoice> to limit "
-"search to last importing session or use <menuchoice><guimenu>Find</"
-"guimenu><guisubmenu>Import Roll</guisubmenu><guimenuitem>Select Import "
-"Rolls...</guimenuitem></menuchoice> to make a finer selection of imported "
-"photos:"
-msgstr ""
-
-#: C/f-spot.xml:539(para)
-msgid ""
-"<parameter class=\"option\">At</parameter> — to select photos from a "
-"particular importing session"
-msgstr ""
-"<parameter class=\"option\">Am</parameter> — um Fotos eines bestimmten "
-"Importiervorgangs auszuwählen"
-
-#: C/f-spot.xml:544(para)
-#| msgid ""
-#| "<parameter class=\"option\">After</parameter> — to select all photos "
-#| "imported begining with a particular importing sessio"
-msgid ""
-"<parameter class=\"option\">After</parameter> — to select all photos imported "
-"begining with a particular importing session"
-msgstr ""
-"<parameter class=\"option\">Nach dem</parameter> — Um alle Fotos auszuwählen, "
-"die nach diesem Importvorgang importiert wurden"
-
-#: C/f-spot.xml:549(para)
-msgid ""
-"<parameter class=\"option\">Between</parameter> — to select all photos "
-"imported between two particular importing sessions"
-msgstr ""
-"<parameter class=\"option\">Zwischen</parameter> — Um alle Fotos auszuwählen, "
-"die zwischen zwei bestimmten Importvorgängen liegen"
-
-#: C/f-spot.xml:554(para)
-#| msgid ""
-#| "Every time you change settings of the filter, amount of selected photos "
-#| "will appear in the bottom part of the dialog."
-msgid ""
-"Every time you change settings of the filter, the amount of selected photos "
-"will appear in the bottom part of the dialog."
-msgstr ""
-"Jedesmal wenn Sie die Filter-Einstellungen ändern, wird die Anzahl der "
-"gewählten Fotos im unteren Bereich des Dialogs angezeigt."
-
-#: C/f-spot.xml:558(para)
-msgid ""
-"When you apply Import Roll filter, in the Find bar you will see "
-"<guilabel>Find: Import Roll</guilabel>. Now you can add some other filter to "
-"finetune your selection."
-msgstr ""
-
-#: C/f-spot.xml:563(para)
-msgid ""
-"If you don't need the Import Roll filter anymore, choose "
-"<menuchoice><guimenu>Find</guimenu><guisubmenu>Import Roll</"
-"guisubmenu><guimenuitem>Clear roll filter</guimenuitem></menuchoice> to "
-"remove Import Roll from search criteria. You can also click the close button "
-"(<guibutton>X</guibutton>) of the search bar to discard all the current "
-"search options."
-msgstr ""
-"Falls Sie den Filmrollen-Importfilter nicht mehr benötigen, wählen Sie "
-"<menuchoice><guimenu>Suchen</guimenu><guisubmenu>Nach importierten "
-"Filmrollen</guisubmenu><guimenuitem>Filmrollenfilter zurücksetzen</"
-"guimenuitem></menuchoice>, um diesen Filter aus den Suchkriterien zu "
-"entfernen. Sie können auch auf den Schließen-Knopf der Suchzeile klicken, um "
-"alle aktuellen Suchoptionen zu verwerfen."
-
-#: C/f-spot.xml:572(para)
-msgid ""
-"The number of displayed rolls in the dialog is defined by the gconf key "
-"<filename class=\"directory\">/apps/f-spot/import/gui_roll_history</"
-"filename>. Default value is 10."
-msgstr ""
-"Die Anzahl der im Dialog angezeigten Rollen wird im GConf-Schlüssel <filename "
-"class=\"directory\">/apps/f-spot/import/gui_roll_history</filename> "
-"festgelegt. Standardwert ist 10."
-
-# Das ist die automatische Vervollständigung. Klingt noch nicht optimal...
-#: C/f-spot.xml:581(title)
-msgid "Type-to-find"
-msgstr "Suchen-beim-Eingeben"
-
-#: C/f-spot.xml:582(para)
-msgid ""
-"There is also a type-to-find entry. Press <keycap>/</keycap> to open it. It "
-"cannot be used at the same time as the find bar. You can type queries such as "
-"\"TagA and (TagB or (TagC and TagD))\". At any point, if F-Spot recognizes "
-"what you've typed as a valid query, it will update your search. The "
-"<emphasis>not</emphasis> operator is not yet supported."
-msgstr ""
-"Es gibt auch ein Eingabefeld, in welchem bereits bei der Eingabe mit der "
-"Suche begonnen wird. Drücken Sie <keycap>/</keycap>, um es zu öffnen. Es kann "
-"nicht gleichzeitig mit der Suchleiste verwendet werden. Sie können "
-"Suchvorgänge wie »MarkierungA and (MarkierungB or (MarkierungC and "
-"MarkierungD))« ausführen. Zu jedem Zeitpunkt erkennt F-Spot Ihre Eingeben als "
-"gültige Abfrage und aktualisiert Ihre Suche. Der Operator <emphasis>not</"
-"emphasis> wird dabei nicht unterstützt."
-
-#: C/f-spot.xml:590(para)
-msgid ""
-"This function will also search for the typed text into photos comments and "
-"filename."
-msgstr ""
-"Diese Funktion sucht auch nach dem eingegebenen Text in den Foto-Kommentaren "
-"und im Dateinamen."
-
-#: C/f-spot.xml:597(title)
-msgid "Fullscreen Mode and Slideshows"
-msgstr "Vollbildmodus und Diashows"
-
-#: C/f-spot.xml:598(para)
-msgid ""
-"For fewer distractions and larger display, you can view your photos in full "
-"screen mode. You control when to show the next photo or to return to the "
-"previous. Enter fullscreen mode by pressing <keycap>F11</keycap> at any time "
-"or by pressing the button in the toolbar."
-msgstr ""
-
-#: C/f-spot.xml:605(title)
-msgid "FullScreen"
-msgstr "Vollbild"
-
-#: C/f-spot.xml:612(para)
-msgid ""
-"In slideshow mode, you can sit back and view your photos as they are "
-"presented to you. You can start a slideshow by pressing the button on the "
-"toolbar."
-msgstr ""
-"Im Diaschau-Modus können Sie sich zurücklehnen und sich Ihre Fotos in einer "
-"Präsentation anschauen. Die Diaschau starten Sie mit dem Knopf in der "
-"Werkzeugleiste."
-
-#: C/f-spot.xml:618(title)
-msgid "SlideShow"
-msgstr "DiaShow"
-
-#: C/f-spot.xml:629(title)
-msgid "Sharing your photos"
-msgstr "Ihre Fotos mit Anderen teilen"
-
-#: C/f-spot.xml:632(para)
-msgid ""
-"There are many ways to share your photos using F-Spot. All of the following "
-"methods will only share the photos you have selected when you run them."
-msgstr ""
-"Es gibt verschiedene Möglichkeiten, Ihre Fotos mit Hilfe von F-Spot mit "
-"Anderen zu teilen. Nachfolgende Methoden übertragen, bei ihrer Verwendung, "
-"jeweils nur die ausgewählten Fotos."
-
-#: C/f-spot.xml:639(title)
-msgid "E-mail"
-msgstr "E-Mail"
-
-#: C/f-spot.xml:640(para)
-msgid ""
-"E-mail your photos directly from F-Spot with the <menuchoice><guimenu>File</"
-"guimenu><guimenuitem>Send Mail</guimenuitem></menuchoice> menu."
-msgstr ""
-"Versenden Sie Fotos direkt aus F-Spot per E-Mail mit "
-"<menuchoice><guimenu>Foto</guimenu><guimenuitem>Per E-Mail verschicken …</"
-"guimenuitem></menuchoice>."
-
-#: C/f-spot.xml:646(title)
-msgid "Note 1"
-msgstr "Anmerkung 1"
-
-#: C/f-spot.xml:647(para)
-msgid ""
-"The email program used for this is defined at the GNOME level. You can change "
-"the default e-mailer for your user using the <application>Preferred "
-"Applications</application> tool in <menuchoice><guimenu>System</"
-"guimenu><guisubmenu>Preferences</guisubmenu></menuchoice>."
-msgstr ""
-"Es wird das in GNOME voreingestellte E-Mail-Programm zum Versenden verwendet. "
-"Sie können das systemweite E-Mail-Programm mit dem <application>Bevorzugte "
-"Anwendungen</application>-Werkzeug von GNOME für den einzelnen Benutzer "
-"ändern. Sie finden den Dialog im GNOME-Hauptmenü unter "
-"<menuchoice><guimenu>System</guimenu><guisubmenu>Einstellungen</guisubmenu></"
-"menuchoice>."
-
-#: C/f-spot.xml:656(title)
-msgid "Note 2"
-msgstr "Anmerkung 2"
-
-#: C/f-spot.xml:657(para)
-msgid ""
-"If some of the photos you'd like to send by email are in a format that F-Spot "
-"can't write (e.g. RAW images), the size selection dialog will become "
-"insensitive and the originals will be sent."
-msgstr ""
-"Falls sich manche per E-Mail zu versendende Fotos in einem Format befinden, "
-"das F-Spot nicht schreiben kann (z.B. RAW-Bilder), wird die Größenauswahl "
-"ausgegraut und das Original verschickt."
-
-#: C/f-spot.xml:664(para)
-msgid ""
-"If you're sending resized pictures, F-Spot will keep the modified versions "
-"somewhere in the <filename class=\"directory\">/tmp</filename> directory for "
-"30 seconds. It's not an issue with evolution, which makes it's own local copy "
-"of the attachments, but could be a bit shorter if you're using Thunderbird. "
-"You can change the delay by editing the gconf key <filename class=\"directory"
-"\">/apps/f-spot/export/email/delete_timeout_seconds</filename>."
-msgstr ""
-
-#: C/f-spot.xml:676(title)
-msgid "Print"
-msgstr "Drucken"
-
-#: C/f-spot.xml:677(para)
-msgid ""
-"Print your photos with the <menuchoice><guimenu>File</"
-"guimenu><guimenuitem>Print</guimenuitem></menuchoice> menu."
-msgstr ""
-"Drucken Sie Ihre Fotos über das Menü <menuchoice><guimenu>Foto</"
-"guimenu><guimenuitem>Drucken</guimenuitem></menuchoice>."
-
-#: C/f-spot.xml:684(title)
-msgid "Burn to CD"
-msgstr "Auf CD brennen"
-
-#: C/f-spot.xml:685(para)
-msgid ""
-"Burn your photos to CD or DVD with the <menuchoice><guimenu>File</"
-"guimenu><guisubmenu>Export</guisubmenu><guimenuitem>Export to CD</"
-"guimenuitem></menuchoice> menu."
-msgstr ""
-"Brennen Sie Ihre Fotos auf CD oder DVD über das Menü "
-"<menuchoice><guimenu>Foto</guimenu><guisubmenu>Exportieren nach</"
-"guisubmenu><guimenuitem>CD …</guimenuitem></menuchoice>."
-
-#: C/f-spot.xml:693(title)
-msgid "Generate a Website Gallery or Folder"
-msgstr "Erzeugen einer Web-Galerie oder eines Ordners"
-
-#: C/f-spot.xml:694(para)
-msgid ""
-"The <menuchoice><guimenu>File</guimenu><guimenuitem>Export</"
-"guimenuitem><guimenuitem>Export to Folder</guimenuitem></menuchoice> feature "
-"gives you three ways to export your images."
-msgstr ""
-"In <menuchoice><guimenu>Datei</guimenu><guimenuitem>Exportieren</"
-"guimenuitem><guimenuitem>In Ordner exportieren</guimenuitem></menuchoice> "
-"stehen Ihnen drei Möglichkeiten zum Export Ihrer Bilder zur Verfügung."
-
-#: C/f-spot.xml:702(para)
-msgid ""
-"<guilabel>Use Original</guilabel> exports your photos ready for use with "
-"Jakub Steiner's free <ulink url=\"http://jimmac.musichall.cz/original.php\"> "
-"Original Photo Gallery</ulink> software. If you are unsure about this option, "
-"it is probably not the right one for you."
-msgstr ""
-"<guilabel>Original verwenden</guilabel> exportiert Ihre Fotos so, dass sie "
-"von der von Jakub Steiner veröffentlichten freien Software <ulink url="
-"\"http://jimmac.musichall.cz/original.php\"> Original Photo Gallery</ulink> "
-"verarbeitet werden können. Im Zweifelsfall sollten Sie diese Option nicht "
-"aktivieren."
-
-#: C/f-spot.xml:710(para)
-msgid ""
-"<guilabel>Use static HTML files</guilabel> exports your photos to an "
-"interactive website, ready for you to upload."
-msgstr ""
-"<guilabel>Statische HTML-Dateien</guilabel> exportiert Ihre Fotos in eine "
-"interaktive Website, fertig um sie hoch zu laden."
-
-#: C/f-spot.xml:716(para)
-msgid ""
-"<guilabel>Plain Files</guilabel> exports your images as files within "
-"directories, without putting them into a gallery."
-msgstr ""
-"<guilabel>Einfache Dateien</guilabel> exportiert Ihre Bilder als Dateien "
-"innerhalb eines Ordners, ohne Sie in eine Galerie zu integrieren."
-
-#: C/f-spot.xml:725(title)
-msgid "Post to your online galleries"
-msgstr "Übertragen in Ihre Online-Galerien"
-
-#: C/f-spot.xml:726(para)
-#| msgid ""
-#| "If you use Flickr, SmugMug, 23hq or Picasa Web Album, you can post your "
-#| "files directly from F-Spot with the <menuchoice><guimenu>File</"
-#| "guimenu><guisubmenu>Export</guisubmenu></menuchoice> menu, choosing "
-#| "corresponding submenu item."
-msgid ""
-"If you use Flickr, SmugMug, 23hq, Tabblo, Facebook, Zooomr or Picasa Web "
-"Album, you can post your files directly from F-Spot with the "
-"<menuchoice><guimenu>File</guimenu><guisubmenu>Export</guisubmenu></"
-"menuchoice> menu, choosing corresponding submenu item."
-msgstr ""
-"Falls Sie Flickr, SmugMug, 23hq, Tabblo, Facebook, Zooomr oder Picasa Web-"
-"Album verwenden, können Sie Ihre Fotos direkt aus F-Spot übertragen. Die "
-"entsprechenden Dialoge finden Sie im Menü unter <menuchoice><guimenu>Datei</"
-"guimenu><guisubmenu>Exportieren nach</guisubmenu></menuchoice>."
-
-#: C/f-spot.xml:731(para)
-msgid ""
-"If you use the PHP software known as <ulink url=\"http://gallery.sourceforge."
-"net/\"> Gallery</ulink>, you can post your photos to your existing album with "
-"the <menuchoice><guimenu>File</guimenu><guimenuitem>Export</"
-"guimenuitem><guimenuitem>Export to Web Gallery</guimenuitem></menuchoice> "
-"menu. You must first enable the Remote module within your Gallery "
-"installation."
-msgstr ""
-"Falls Sie die PHP-Software <ulink url=\"http://gallery.sourceforge.net/\"> "
-"Gallery</ulink> verwenden, können Sie Ihre Fotos direkt in ein bestehendes "
-"Album übertragen. Gehen Sie im Menü nach <menuchoice><guimenu>Foto</"
-"guimenu><guimenuitem>Exportieren nach</guimenuitem><guimenuitem>Web-Galerie …"
-"</guimenuitem></menuchoice>. Sie müssen zuerst das Remote-Modul in Ihrer "
-"Gallery-Installation aktivieren."
-
-#: C/f-spot.xml:739(title)
-msgid "Note for Gallery 2.2 users"
-msgstr "Hinweis für Benutzer von Gallery 2.2"
-
-#: C/f-spot.xml:740(para)
-msgid "The Remote plugin for Gallery should be 1.0.8 or newer."
-msgstr ""
-"Das »Remote« Modul für Gallery sollte in der Version 1.0.8 oder neuer "
-"vorliegen."
-
-#: C/f-spot.xml:744(para)
-msgid ""
-"<ulink url=\"http://pennave.sourceforge.net\">PennAve</ulink> is a Python web-"
-"application that directly uses F-Spot's database to present a dynamic gallery "
-"of your photos and tags."
-msgstr ""
-"<ulink url=\"http://pennave.sourceforge.net\">PennAve</ulink> ist eine in "
-"Python geschriebene Web-Applikation, die direkt die F-Spot Datenbank "
-"verwendet, um eine dynamische Galerie Ihrer Fotos und Markierungen "
-"darzustellen."
-
-#: C/f-spot.xml:749(para)
-msgid ""
-"<ulink url=\"http://www.conduit-project.org\">Conduit</ulink> is an "
-"application that can sync photos that have a particular tag with your Flickr "
-"or Picasa Web Album web storage."
-msgstr ""
-"<ulink url=\"http://www.conduit-project.org\">Conduit</ulink> ist eine "
-"Anwendung, die Fotos einer bestimmten Markierung mit Flickr, oder Picasa "
-"abgleichen kann."
-
-#: C/f-spot.xml:758(title)
-msgid "Color management"
-msgstr "Farbverwaltung"
-
-#: C/f-spot.xml:761(title)
-msgid "What's color management"
-msgstr "Was ist Farbverwaltung"
-
-#: C/f-spot.xml:763(para)
-msgid ""
-"When you capture a photo and look at it on a display, it looks different than "
-"on a camera's preview display or on any other display. It will also look "
-"different when you print it. This is because every device has unique color "
-"reproduction capabilities."
-msgstr ""
-"Wenn Sie ein Foto aufnehmen und es auf dem Bildschirm betrachten, sieht es "
-"anders aus als auf dem Vorschaubildschirm der Kamera oder jedem anderen "
-"Anzeigegerät. Wenn Sie es ausdrucken, wird es wiederum anders aussehen. Das "
-"liegt daran, dass die Farbdarstellung abhängig von den Fähigkeiten des "
-"jeweiligen Gerätes ist."
-
-#: C/f-spot.xml:770(para)
-msgid ""
-"Color management system (CMS) is a tool to achieve reliable color "
-"reproduction for both display and output (e.g. a printer). A CMS relies on "
-"color profiles to map original colors to the color that a device can "
-"reproduce so that colors will appear the same way everywhere — on a computer "
-"LCD monitor, on a print from your local photolab etc."
-msgstr ""
-"Das Color Management System (CMS) ist ein Werkzeug, mit dem Sie zuverlässige "
-"Farbdarstellungen sowohl für die Anzeige als auch für die Ausgabe (z.B. auf "
-"einem Drucker) erzielen. Ein CMS benutzt Farbprofile, um die Originalfarben "
-"an die Farben des reproduzierenden Gerätes anzupassen, so dass die Farben "
-"überall gleich dargestellt werden, egal ob auf einem LCD-Bildschirm, einem "
-"Ausdruck Ihres örtlichen Fotolabors usw."
-
-#: C/f-spot.xml:780(title)
-msgid "What's a color profile"
-msgstr "Was ist ein Farbprofil?"
-
-#: C/f-spot.xml:782(para)
-msgid ""
-"A color profile is a file with either .icc (thus its is often called an ICC "
-"profile) or .icm extension that describes how device's colors correspond to a "
-"universal description of colors."
-msgstr ""
-"Ein Farbprofil hat entweder die Endung .icc (daher die häufig benutzte "
-"Bezeichnung ICC-Profil) oder .icm. Es beschreibt die Beziehung der Farben "
-"eines Gerätes zu einer universellen Farbbeschreibung."
-
-#: C/f-spot.xml:788(para)
-msgid "There are several types of profiles:"
-msgstr "Es gibt verschiedene Arten von Profilen:"
-
-#: C/f-spot.xml:794(para)
-msgid ""
-"Input device profile. It's profile for a camera or a profile that an "
-"application like XSane embeds into a scanned image."
-msgstr ""
-
-#: C/f-spot.xml:800(para)
-msgid ""
-"Working space profile. It's a profile that describes color space in which all "
-"operations are done inside an application. Usually very wide gamut profiles "
-"like AdobeRGB1998 or ProPhotoRGB are used for that."
-msgstr ""
-
-#: C/f-spot.xml:807(para)
-msgid "Display profile. It's a profile for a monitor."
-msgstr "Bildschirm-Profil. Ein Profil für Ihren Monitor."
-
-#: C/f-spot.xml:812(para)
-msgid "Output profile. This is usually a profile for you printer."
-msgstr "Ausgabe-Profil. Das ist im Normalfall ein Profil für Ihren Drucker."
-
-#: C/f-spot.xml:818(para)
-msgid ""
-"Currently F-Spot allows setting only display and output profiles. All color "
-"operations are done in sRGB color space."
-msgstr ""
-"Gegenwärtig erlaubt F-Spot nur das Festlegen von Anzeige- und "
-"Ausgabeprofilen. Alle Farboperationen finden im sRGB-Farbraum statt."
-
-#: C/f-spot.xml:825(title)
-msgid "How to get my screen/printer color profile"
-msgstr "Woher bekomme ich mein Bildschirm/Drucker-Farbprofil?"
-
-#: C/f-spot.xml:827(para)
-msgid "There are few ways to get a color profile."
-msgstr "Es gibt ein verschiedene Möglichkeiten, ein Farbprofil zu beziehen."
-
-#: C/f-spot.xml:832(title)
-msgid "From CD or Internet"
-msgstr "Von der CD oder aus dem Internet"
-
-#: C/f-spot.xml:834(para)
-msgid ""
-"Many hardware manufacturers put color profiles into CD in the bundle. If you "
-"have one (from monitor or printer), you can use it. Or you can download it "
-"from the Internet (usually, from support section of the manufacturer's web "
-"site). Some camera manufacturers (Nikon, Canon) also provide ICC profiles."
-msgstr ""
-"Viele Gerätehersteller liefern Farbprofile auf einer CD mit. Falls Sie über "
-"eine solche CD verfügen (vom Monitor oder Drucker), können Sie diese "
-"benutzen. Oder Sie laden sie aus dem Internet, üblicherweise aus dem "
-"Supportbereich der Webseite des Herstellers. Einige Kamerahersteller bieten "
-"ebenfalls ICC-Profile an."
-
-#: C/f-spot.xml:844(title)
-msgid "Calibrating and profiling"
-msgstr "Kalibrierung und Profil-Erstellung"
-
-#: C/f-spot.xml:846(para)
-msgid ""
-"Best results can be achieved by calibrating and profiling devices with a "
-"measurement device. It is not so difficult, but it means that you need a "
-"spectrophotometer to do all measurements and create an ICC profile."
-msgstr ""
-"Die besten Ergebnisse erzielen Sie durch Kalibrierung und Profilierung von "
-"Geräten mit einem entsprechenden Messgerät. Das ist nicht besonders "
-"schwierig, aber Sie benötigen ein Spektrophotometer für die Messungen und die "
-"Erstellung eines ICC-Profils."
-
-#: C/f-spot.xml:852(para)
-msgid ""
-"If you are on Windows or Mac OS X, you can use manufacturer's software coming "
-"with a spectrophotometer. On Linux you will have to use either <ulink url="
-"\"http://www.argyllcms.com\">Argyll</ulink>, which is a set of versatile "
-"command line tools, or <ulink url=\"http://lprof.sourceforge.net/\">LProf</"
-"ulink>, which has a graphical user interface."
-msgstr ""
-"Wenn Sie unter Windows oder Mac OS X arbeiten, können Sie von den Herstellern "
-"eines Spektrophotometers mitgelieferte Software verwenden. Unter Linux steht "
-"Ihnen entweder <ulink url=\"http://www.argyllcms.com\">Argyll</ulink> zur "
-"Verfügung, welches eine Reihe von vielseitigen Befehlszeilenwerkzeugen "
-"bereitstellt, oder <ulink url=\"http://lprof.sourceforge.net/\">LProf</"
-"ulink>, welches auch über eine grafische Oberfläche bedient werden kann."
-
-#: C/f-spot.xml:860(para)
-msgid ""
-"Please refer to documentation of third party hardware and software vendors "
-"for details."
-msgstr ""
-"Bitte ziehen Sie die Dokumentation zu Drittanbieter-Hardware und Software für "
-"weitere Details zu Rate."
-
-#: C/f-spot.xml:867(title)
-msgid "Embedding"
-msgstr "Einbettung"
-
-#: C/f-spot.xml:869(para)
-msgid ""
-"Image formats themselves (such as TIFF, JPEG, PNG...) may contain embedded "
-"color profiles. If color management is enabled, F-Spot looks for such "
-"embedded profiles and takes them into consideration."
-msgstr ""
-"Die Bildformate selbst (wie TIFF, JPEG, PNG …) können eingebettete "
-"Farbprofile enthalten. Falls die Farbverwaltung aktiviert ist, sucht F-Spot "
-"nach solchen eingebetteten Profilen und berücksichtigt sie."
-
-#: C/f-spot.xml:878(title)
-msgid "How to use color management in F-Spot"
-msgstr "Benutzung der Farbverwaltung in F-Spot"
-
-#: C/f-spot.xml:880(para)
-msgid ""
-"Color management in F-Spot can use only RGB profiles at this time (and you "
-"can't see other profiles in the F-Spot)."
-msgstr ""
-"Die Farbverwaltung in F-Spot kann derzeit nur mit GB-Profilen umgehen (und "
-"Sie werden keine weiteren Profile in F-Spot sehen)."
-
-#: C/f-spot.xml:887(para)
-#| msgid ""
-#| "Copy your color profiles into the <filename class=\"directory\">/usr/share/"
-#| "color/icc</filename> or <filename class=\"directory\">/usr/local/share./"
-#| "color/icc</filename> directory."
-msgid ""
-"Copy your color profiles into the <filename class=\"directory\">/usr/share/"
-"color/icc</filename> or <filename class=\"directory\">/usr/local/share/color/"
-"icc</filename> directory."
-msgstr ""
-"Kopieren Sie Ihre Farbprofile in den Ordner <filename class=\"directory\">/"
-"usr/share/color/icc</filename> oder <filename class=\"directory\">/usr/local/"
-"share/color/icc</filename>."
-
-#: C/f-spot.xml:895(para)
-msgid ""
-"Enable the color management with the <menuchoice><guimenu>Edit</"
-"guimenu><guimenuitem>Preferences</guimenuitem></menuchoice> menu."
-msgstr ""
-"Aktivieren Sie die Farbverwaltung im Menü <menuchoice><guimenu>Bearbeiten</"
-"guimenu><guimenuitem>Einstellungen</guimenuitem></menuchoice>."
-
-#: C/f-spot.xml:902(para)
-msgid ""
-"Select <guilabel>Display</guilabel> and <guilabel>Output</guilabel> profiles."
-msgstr ""
-"Wählen Sie <guilabel>Anzeige</guilabel> und <guilabel>Ausgabe</guilabel> "
-"Profile."
-
-#: C/f-spot.xml:910(para)
-msgid ""
-"You can use <ulink url=\"http://burtonini.com/blog/computers/xicc\">xicc</"
-"ulink> to load ICC profile to display and use the loaded profile from F-Spot. "
-"Just mark the checkbox <guilabel>Try to use the system display profile</"
-"guilabel>."
-msgstr ""
-"Von <ulink url=\"http://burtonini.com/blog/computers/xicc\">xicc</ulink> "
-"können Sie ICC-Profile zur Anzeige und Nutzung des geladenen Profils in F-"
-"Spot beziehen. Aktivieren Sie hierzu das Ankreuzfeld <guilabel>Es wird "
-"versucht, das System-Anzeigeprofil zu verwenden</guilabel>."
-
-#: C/f-spot.xml:921(title)
-msgid "Extend functionality"
-msgstr "Funktionalität erweitern"
-
-# Als Frage klingt das besser als im Original.
-#: C/f-spot.xml:924(title)
-msgid "What extensions are"
-msgstr "Was sind Erweiterungen?"
-
-#: C/f-spot.xml:926(para)
-msgid ""
-"F-Spot extensions are means to add new functionality to the application. F-"
-"Spot supports two types of extension: exporters (which allow exporting photos "
-"to new web services or data storages) and tools (which allow new ways of "
-"color correction, duplicate photos finders etc.). Extensions are distributed "
-"in form of extension packages."
-msgstr ""
-"F-Spot-Erweiterungen fügen neue Funktionalitäten zur Anwendung hinzu. F-Spot "
-"unterstützt zwei Arten von Erweiterungen: Exporter (welche das Exportieren "
-"von Fotos zu Webdiensten oder Datenspeichern ermöglichen) und Werkzeuge "
-"(welche neue Möglichkeiten beispielsweise zur Farbkorrektur oder zum Finden "
-"von Duplikaten hinzufügen). Erweiterungen werden in Form von "
-"Erweiterungspaketen angeboten."
-
-#: C/f-spot.xml:933(para)
-msgid ""
-"In the best traditions of not reinventing the wheel extensions can use other "
-"extensions, which means that one extension cannot work, if another extension "
-"is not installed. This concept of dependance actually means that"
-msgstr ""
-
-#: C/f-spot.xml:940(para)
-msgid ""
-"you cannot install an extension, if the extension it depends on, is not "
-"present in the system"
-msgstr ""
-"Sie können eine Erweiterung nicht installieren, wenn die Erweiterung nicht "
-"installiert ist, von der diese abhängt."
-
-#: C/f-spot.xml:945(para)
-msgid "you cannot remove an extension on which some other extension depends"
-msgstr ""
-"Sie können Erweiterungen nicht deinstallieren, falls andere Erweiterungen von "
-"dieser abhängen."
-
-#: C/f-spot.xml:953(title)
-msgid "Managing extensions"
-msgstr "Erweiterungen verwalten"
-
-#: C/f-spot.xml:955(para)
-msgid ""
-"To manage extensions choose <menuchoice><guimenu>Edit</"
-"guimenu><guimenuitem>Manage Extensions</guimenuitem></menuchoice> menu item."
-msgstr ""
-"Um Erweiterungen zu verwalten, wählen Sie den Menüeintrag "
-"<menuchoice><guimenu>Bearbeiten</guimenu><guimenuitem>Erweiterungen "
-"verwalten</guimenuitem></menuchoice>."
-
-#: C/f-spot.xml:961(title)
-msgid "Managing extension repositories"
-msgstr "Erweiterungs-Paketquellen verwalten"
-
-#: C/f-spot.xml:963(para)
-msgid ""
-"Simply put, repositories are extension storages. They can be either network "
-"or local. To add a new repository click Repositories button, choose type of "
-"the repository you are about to add and provide either URL or path. If the "
-"URL or path you specified doesn't contain a description (index) file for "
-"extensions, a warning message will pop up to tell you that."
-msgstr ""
-
-#: C/f-spot.xml:970(para)
-msgid ""
-"To remove a repository click <guibutton>Repositories</guibutton> button "
-"again, choose the repository you are about to delete and click "
-"<guibutton>Delete</guibutton> button."
-msgstr ""
-"Um eine Softwarequelle (Repository) zu entfernen, drücken Sie den "
-"<guibutton>Repositories …</guibutton> Knopf, wählen Sie die Quelle, die Sie "
-"entfernen möchten und klicken Sie auf den <guibutton>Löschen</guibutton> "
-"Knopf."
-
-#: C/f-spot.xml:978(title)
-msgid "Installing and updating extensions"
-msgstr "Erweiterungen installieren und aktualisieren"
-
-#: C/f-spot.xml:980(para)
-msgid ""
-"To install an extension click <guibutton>Install extensions...</guibutton> "
-"button. In the newly presented dialog"
-msgstr ""
-"Um eine Erweiterung zu installieren, klicken Sie auf den "
-"<guibutton>Erweiterungen installieren …</guibutton>-Knopf im nun angezeigten "
-"Dialog."
-
-#: C/f-spot.xml:986(para)
-msgid ""
-"Choose repository to install from all known repositories or just one of "
-"available repositories."
-msgstr ""
-"Wählen Sie alle Softwarequellen (Repositories), von denen Sie installieren "
-"möchten, oder nur eine verfügbare Quelle."
-
-#: C/f-spot.xml:992(para)
-msgid ""
-"Choose, what extension packages you want to see: All, Only new, Only updates."
-msgstr ""
-"Wählen Sie, welche Erweiterungs-Pakete Sie sehen möchten: Alle, nur Neue, nur "
-"Aktualisierungen."
-
-#: C/f-spot.xml:997(para)
-msgid ""
-"Click the <guibutton>Update</guibutton> button to update list of available "
-"extension packages by given criteria."
-msgstr ""
-"Klicken Sie auf den <guibutton>Aktualisieren</guibutton>-Knopf, um die Liste "
-"mit den verfügbaren Erweiterungs-Paketen (die den gewählten Kriterien "
-"entsprechen) zu aktualisieren."
-
-#: C/f-spot.xml:1003(para)
-msgid ""
-"Choose extensions you want to install/update, click <guibutton>Information</"
-"guibutton> to see summary on selected package, if you want to."
-msgstr ""
-"Wählen Sie Erweiterungen, die Sie installieren oder aktualisieren möchten und "
-"klicken Sie auf <guibutton>Informationen</guibutton>, um eine Zusammenfassung "
-"über die ausgewählten Pakete zu erhalten, falls Sie das wünschen."
-
-# »fort zu setzen«? Keine Ahnung, ob das so richtig ist, ich habs erst einmal so stehen lassen.
-#: C/f-spot.xml:1009(para)
-msgid "Click <guibutton>Forward</guibutton> to proceed with installation."
-msgstr ""
-"Klicken Sie auf <guibutton>Weiter</guibutton>, um die Installation fort zu "
-"setzen."
-
-#: C/f-spot.xml:1017(title)
-msgid "Enabling and disabling extensions"
-msgstr "Erweiterungen aus- und einschalten"
-
-#: C/f-spot.xml:1019(para)
-msgid ""
-"You might want to temporarily enable or disable a particular extension "
-"package, for example, if the extension is not stable enough to handle a large "
-"amount of photos or if menus get crowded with extensions."
-msgstr ""
-"Möglicherweise möchten Sie vorübergehend ein bestimmtes Erweiterungspaket "
-"aktivieren oder deaktivieren. Beispielsweise dann, wenn eine Erweiterung "
-"nicht stabil genug ist, um mit einer großen Anzahl von Bildern umgehen zu "
-"können, oder wenn Menüs zu sehr mit Erweiterungen vollgestopft sind."
-
-#: C/f-spot.xml:1024(para)
-#| msgid ""
-#| "In the <guilabel>Manage Extensions</guilabel> dialog select the extension "
-#| "package and click <guibutton>Enable</guibutton> or <guibutton>Disable</"
-#| "guibutton>. You will have to restart F-Spot to let changes apply."
-msgid ""
-"In the <guilabel>Manage Extensions</guilabel> dialog select the extension "
-"package and click <guibutton>Enable</guibutton> or <guibutton>Disable</"
-"guibutton>."
-msgstr ""
-"Im Dialog <guilabel>Erweiterungen verwalten</guilabel> wählen Sie das "
-"Erweiterungspaket aus und klicken auf <guibutton>Aktivieren</guibutton> oder "
-"<guibutton>Deaktivieren</guibutton>."
-
-#: C/f-spot.xml:1031(title)
-msgid "Removing extensions"
-msgstr "Erweiterungen entfernen"
-
-#: C/f-spot.xml:1033(para)
-msgid ""
-"If you don't need an extension you can remove it from the system completely. "
-"In the <guilabel>Manage Extensions</guilabel> dialog select the extension "
-"package you want to remove and click <guibutton>Delete</guibutton>."
-msgstr ""
-"Falls Sie eine Erweiterung nicht benötigen, so können Sie diese komplett aus "
-"dem System entfernen. Im <guilabel>Erweiterungsverwaltung</guilabel>-Dialog "
-"können Sie das Erweiterungspaket auswählen und es durch klicken auf "
-"<guibutton>Deinstallieren …</guibutton> entfernen."
-
-#: C/f-spot.xml:1041(title)
-msgid "Reading summary of extensions"
-msgstr "Lesen der Erweiterungsbeschreibung"
-
-#: C/f-spot.xml:1043(para)
-msgid ""
-"Every extension package contains metadata that provides the following "
-"information about the extension:"
-msgstr ""
-"Jedes Erweiterungspaket enthält Meta-Informationen, die folgende "
-"Informationen zur Verfügung stellen:"
-
-#: C/f-spot.xml:1049(para)
-msgid "Description, which usually covers puprose of the extension"
-msgstr "Beschreibung, diese erklärt üblicherweise die Funktion der Erweiterung."
-
-#: C/f-spot.xml:1054(para)
-msgid "Version"
-msgstr "Version"
-
-#: C/f-spot.xml:1059(para)
-msgid "Author"
-msgstr "Autor"
-
-#: C/f-spot.xml:1064(para)
-msgid "Dependencies"
-msgstr "Abhängigkeiten"
-
-#: C/f-spot.xml:1070(para)
-msgid ""
-"In the <guilabel>Manage Extensions</guilabel> dialog select the extension "
-"package you want to read summary of and click <guibutton>Information</"
-"guibutton>."
-msgstr ""
-"Im Dialog <guilabel>Erweiterungen verwalten</guilabel> wählen Sie das "
-"Erweiterungspaket aus, dessen Zusammenfassung Sie lesen wollen und klicken "
-"Sie auf <guibutton>Information</guibutton>."
-
-#: C/f-spot.xml:1078(title)
-msgid "Developing extensions"
-msgstr "Entwickeln von Erweiterungen"
-
-#: C/f-spot.xml:1080(para)
-msgid ""
-"<ulink url=\"http://f-spot.org/Extend_F-Spot\">Extend F-Spot</ulink> document "
-"gives instructions on developing your own extensions for F-Spot."
-msgstr ""
-"Das Dokument <ulink url=\"http://f-spot.org/Extend_F-Spot\">F-Spot erweitern</"
-"ulink> gibt Anweisungen über das Entwickeln von Erweiterungen für F-Spot."
-
-#: C/f-spot.xml:1088(title)
-msgid "Shortcuts"
-msgstr "Tastenkombinationen"
-
-#: C/f-spot.xml:1091(title)
-msgid "Global Shortcuts"
-msgstr "Globale Tastenkombinationen"
-
-#: C/f-spot.xml:1096(entry) C/f-spot.xml:1205(entry) C/f-spot.xml:1301(entry)
-#: C/f-spot.xml:1353(entry)
-msgid "Key"
-msgstr "Taste"
-
-#: C/f-spot.xml:1099(entry) C/f-spot.xml:1208(entry) C/f-spot.xml:1304(entry)
-#: C/f-spot.xml:1356(entry)
-msgid "Action"
-msgstr "Aktion"
-
-#: C/f-spot.xml:1107(keycap)
-msgid "["
-msgstr "["
-
-#: C/f-spot.xml:1109(entry)
-msgid "Rotate the selected photos to the left"
-msgstr "Die ausgewählten Fotos gegen den Uhrzeigersinn drehen"
-
-#: C/f-spot.xml:1115(keycap)
-msgid "]"
-msgstr "]"
-
-#: C/f-spot.xml:1117(entry)
-msgid "Rotate the selected photos to the right"
-msgstr "Die ausgewählten Fotos im Uhrzeigersinn drehen"
-
-#: C/f-spot.xml:1123(keycap) C/f-spot.xml:1131(keycap)
-msgid "Del"
-msgstr "Entf"
-
-#: C/f-spot.xml:1125(entry)
-msgid "Remove selected photos from F-Spot's catalogue"
-msgstr "Ausgewähltes Foto aus F-Spots Katalog entfernen"
-
-#: C/f-spot.xml:1131(keycap) C/f-spot.xml:1224(keycap)
-#: C/f-spot.xml:1258(keycap) C/f-spot.xml:1267(keycap)
-#: C/f-spot.xml:1284(keycap) C/f-spot.xml:1446(keycap)
-msgid "Shift"
-msgstr "Umschalttaste"
-
-#: C/f-spot.xml:1133(entry)
-#| msgid "Delete selected photos permanently from the drive"
-msgid ""
-"Delete selected photos permanently from the drive. If possible, they will "
-"moved to trash."
-msgstr ""
-"Ausgewählte Fotos dauerhaft von der Festplatte löschen. Falls möglich, werden "
-"diese in den Müll verschoben."
-
-#: C/f-spot.xml:1140(keycap)
-msgid "t"
-msgstr "t"
-
-#: C/f-spot.xml:1142(entry)
-msgid "View or edit tags for selected photos"
-msgstr "Markierungen der ausgewählten Fotos zeigen oder bearbeiten"
-
-#: C/f-spot.xml:1148(keycap)
-msgid "F11"
-msgstr "F11"
-
-#: C/f-spot.xml:1150(entry) C/f-spot.xml:1399(entry)
-msgid "Full screen view"
-msgstr "Vollbildmodus"
-
-#: C/f-spot.xml:1156(keycap) C/f-spot.xml:1164(keycap)
-#: C/f-spot.xml:1172(keycap) C/f-spot.xml:1180(keycap)
-#: C/f-spot.xml:1216(keycap) C/f-spot.xml:1224(keycap)
-#: C/f-spot.xml:1242(keycap) C/f-spot.xml:1267(keycap)
-#: C/f-spot.xml:1320(keycap)
-msgid "Ctrl"
-msgstr "Strg"
-
-#: C/f-spot.xml:1156(keycap)
-msgid "I"
-msgstr "I"
-
-#: C/f-spot.xml:1158(entry)
-msgid "Displays information about the photo"
-msgstr "Informationen über das Foto anzeigen"
-
-#: C/f-spot.xml:1164(keycap)
-msgid "Equals"
-msgstr "Gleicheits-Zeichen"
-
-#: C/f-spot.xml:1166(entry)
-msgid "Zoom-in"
-msgstr "Ansicht vergrößern"
-
-#: C/f-spot.xml:1172(keycap)
-msgid "Minus"
-msgstr "Minus"
-
-#: C/f-spot.xml:1174(entry)
-msgid "Zoom-out"
-msgstr "Ansicht verkleinern"
-
-#: C/f-spot.xml:1180(keycap) C/f-spot.xml:1372(keycap)
-msgid "N"
-msgstr "N"
-
-#: C/f-spot.xml:1182(entry)
-msgid "Import photos"
-msgstr "Fotos importieren"
-
-#: C/f-spot.xml:1188(keycap)
-msgid "Alt"
-msgstr "Alt"
-
-#: C/f-spot.xml:1188(keycap)
-msgid "0-5"
-msgstr "0-5"
-
-#: C/f-spot.xml:1190(entry)
-msgid "Alt plus a number from 0 to 5 rate the selected picture(s)"
-msgstr "Alt + eine Nummer zwischen 0 und 5 bewertet ausgewählte Fotos"
-
-# Tastenkombinationen im Übersichtsmodus (kleine Vorschaubilder)
-#: C/f-spot.xml:1200(title)
-msgid "Browse Mode Shortcuts"
-msgstr "Tastenkombinationen im Übersichtsmodus"
-
-#: C/f-spot.xml:1216(keycap) C/f-spot.xml:1225(keycap)
-msgid "A"
-msgstr "A"
-
-#: C/f-spot.xml:1218(entry)
-msgid "Select all"
-msgstr "Alles auswählen"
-
-#: C/f-spot.xml:1227(entry)
-msgid "Unselect all"
-msgstr "Alles abwählen"
-
-#: C/f-spot.xml:1233(keycap) C/f-spot.xml:1380(keycap)
-msgid "H"
-msgstr "H"
-
-#: C/f-spot.xml:1233(keycap) C/f-spot.xml:1380(keycap)
-msgid "J"
-msgstr "J"
-
-#: C/f-spot.xml:1234(keycap) C/f-spot.xml:1381(keycap)
-msgid "K"
-msgstr "K"
-
-#: C/f-spot.xml:1234(keycap) C/f-spot.xml:1381(keycap)
-msgid "L"
-msgstr "L"
-
-#: C/f-spot.xml:1232(entry) C/f-spot.xml:1379(entry)
-msgid ""
-"Arrow keys or <placeholder-1/>, <placeholder-2/>, <placeholder-3/>, "
-"<placeholder-4/>"
-msgstr ""
-"Pfeiltasten oder <placeholder-1/>, <placeholder-2/>, <placeholder-3/>, "
-"<placeholder-4/>"
-
-#: C/f-spot.xml:1236(entry)
-msgid "Move focus"
-msgstr "Fokus verschieben"
-
-#: C/f-spot.xml:1241(entry)
-msgid "<placeholder-1/>-Arrow key"
-msgstr "<placeholder-1/>-Pfeiltaste"
-
-#: C/f-spot.xml:1244(entry)
-msgid "Move the focus without changing the selection"
-msgstr "Den Fokus verschieben, ohne die Auswahl zu verändern"
-
-#: C/f-spot.xml:1250(keycap) C/f-spot.xml:1372(keycap)
-msgid "Spacebar"
-msgstr "Leertaste"
-
-#: C/f-spot.xml:1252(entry)
-msgid "Select or unselect the focused photo"
-msgstr "Aus- oder Abwählen des fokussierten Fotos"
-
-#: C/f-spot.xml:1259(keycap)
-msgid "Arrow key"
-msgstr "Pfeiltaste"
-
-# In den Passiv geändert.
-#: C/f-spot.xml:1261(entry)
-msgid "Change the photo selection"
-msgstr "Foto-Auswahl ändern"
-
-#: C/f-spot.xml:1268(keycap)
-msgid "Left arrow or Right arrow"
-msgstr "Linke oder rechte Pfeiltaste"
-
-#: C/f-spot.xml:1270(entry)
-msgid ""
-"Add/Remove all photos in the row, in the direction pressed, to the selection"
-msgstr ""
-"Hinzufügen/Entfernen aller Fotos in der Reihe, in die Richtung die gedrückt "
-"wurde, bis zur Auswahl"
-
-#: C/f-spot.xml:1276(keycap) C/f-spot.xml:1284(keycap)
-#: C/f-spot.xml:1437(keycap)
-msgid "V"
-msgstr "V"
-
-#: C/f-spot.xml:1278(entry)
-msgid "Pops up a larger preview of the picture pointed by the mouse"
-msgstr ""
-"Öffnet eine größere Vorschau des Bildes, auf das Sie mit der Maus zeigen."
-
-#: C/f-spot.xml:1286(entry)
-msgid ""
-"Pops up a larger preview and a color histogram of the picture pointed by the "
-"mouse"
-msgstr ""
-"Öffnet eine größere Vorschau und ein Farb-Histogramm des Bildes, auf das Sie "
-"mit der Maus zeigen."
-
-#: C/f-spot.xml:1296(title)
-msgid "Tag Shortcuts"
-msgstr "Tastenkombinationen zum Markieren"
-
-#: C/f-spot.xml:1312(keycap)
-msgid "F2"
-msgstr "F2"
-
-#: C/f-spot.xml:1314(entry)
-msgid "Rename selected tag"
-msgstr "Ausgewählte Markierung umbenennen"
-
-#: C/f-spot.xml:1320(keycap)
-msgid "T"
-msgstr "T"
-
-#: C/f-spot.xml:1322(entry)
-msgid "Add tags to selected photos"
-msgstr "Markierungen zu ausgewählten Fotos hinzufügen"
-
-#: C/f-spot.xml:1327(entry) C/f-spot.xml:1335(entry)
-msgid "n/a"
-msgstr "Nicht verfügbar"
-
-#: C/f-spot.xml:1330(entry)
-msgid "Drag and drop tags to move them"
-msgstr "Markierungen mit der Maus ziehen, um diese zu verschieben"
-
-#: C/f-spot.xml:1338(entry)
-msgid "Type a tag's name to jump to it (only works if tag is shown/expanded)"
-msgstr ""
-"Geben Sie den Namen einer Markierung ein, um zu ihr zu springen (funktioniert "
-"nur, wenn alle Markierungen angezeigt werden/ausgeklappt sind)"
-
-#: C/f-spot.xml:1348(title)
-msgid "Edit Mode Shortcuts"
-msgstr "Bearbeitungsmodus-Tastenkombinationen"
-
-#: C/f-spot.xml:1364(keycap)
-msgid "Page Up"
-msgstr "Bild aufwärts"
-
-#: C/f-spot.xml:1364(keycap)
-msgid "Backspace"
-msgstr "Rücktaste"
-
-#: C/f-spot.xml:1364(keycap)
-msgid "B"
-msgstr "B"
-
-#: C/f-spot.xml:1363(entry) C/f-spot.xml:1371(entry)
-msgid "<placeholder-1/>, <placeholder-2/>, <placeholder-3/>"
-msgstr "<placeholder-1/>, <placeholder-2/>, <placeholder-3/>"
-
-#: C/f-spot.xml:1366(entry)
-msgid "Go to Previous Photo"
-msgstr "Zum vorherigen Foto gehen"
-
-#: C/f-spot.xml:1372(keycap)
-msgid "Page Down"
-msgstr "Bild abwärts"
-
-#: C/f-spot.xml:1374(entry)
-msgid "Go to Next Photo"
-msgstr "Zum nächsten Foto gehen"
-
-#: C/f-spot.xml:1383(entry)
-msgid "Go to Previous/Next photo or move around a zoomed photo"
-msgstr ""
-"Zum vorherigen/nächsten Foto gehen oder ein vergrößertes Foto in der Ansicht "
-"verschieben"
-
-#: C/f-spot.xml:1389(keycap)
-msgid "R"
-msgstr "R"
-
-#: C/f-spot.xml:1391(entry)
-msgid "Go to a random photo"
-msgstr "Zu einem zufälligen Foto gehen"
-
-#: C/f-spot.xml:1397(keycap)
-msgid "f"
-msgstr "f"
-
-#: C/f-spot.xml:1405(keycap)
-msgid "0"
-msgstr "0"
-
-#: C/f-spot.xml:1407(entry)
-msgid "Fit the image to the screen"
-msgstr "Bild an Bildschirm anpassen"
-
-#: C/f-spot.xml:1413(keycap)
-msgid "1"
-msgstr "1"
-
-#: C/f-spot.xml:1415(entry)
-msgid "Zoom Factor to 1.0 (1 screen pixel per image pixel)"
-msgstr "Vergrößerungsstufe auf 1,0 (1 Bilschirmpixel pro Bildpixel)"
-
-#: C/f-spot.xml:1421(keycap)
-msgid "2"
-msgstr "2"
-
-#: C/f-spot.xml:1423(entry)
-msgid "Zoom Factor to 2.0 (4 screen pixels per image pixel)"
-msgstr "Vergrößerungsstufe auf 2,0 (4 Bildschirmpixel pro Bildpixel)"
-
-#: C/f-spot.xml:1429(keycap)
-msgid "Escape"
-msgstr "Escape"
-
-#: C/f-spot.xml:1431(entry)
-msgid "Returns to Browser mode"
-msgstr "Zum Übersichtsmodus zurückkehren"
-
-#: C/f-spot.xml:1441(keycap)
-msgid "v"
-msgstr "v"
-
-#: C/f-spot.xml:1439(entry)
-msgid ""
-"Examine photo with magnifying glass (Loupe). Doubleclick on the Loupe, or "
-"type <placeholder-1/> again to close it."
-msgstr ""
-"Foto mit mit Vergrößerungsglas (Lupe) vergrößern. Doppelklicken Sie in der "
-"Lupen-Ansicht, oder Drücken Sie nochmal <placeholder-1/> um sie zu schließen."
-
-#: C/f-spot.xml:1445(entry)
-msgid "<placeholder-1/>-Mousewheel"
-msgstr "<placeholder-1/>-Mausrad"
-
-# Hierbei handelt es sich um die Beschreibung einer Tastenkombination. Der Filmstreifen wird im Einzelbildmodus über dem Bild angezeigt. Falls unter Ansicht > Komponenten aktiviert.
-#: C/f-spot.xml:1448(entry)
-msgid "Faster filmstrip scrolling"
-msgstr "Schnellerer Filmstreifen-Lauf"
-
-#: C/f-spot.xml:1454(keycap)
-msgid "i"
-msgstr "i"
-
-#: C/f-spot.xml:1456(entry)
-msgid "Toggle infobox visibility ''(only when in full screen)''"
-msgstr ""
-"Die Sichtbarkeit der »Infobox« an- und ausschalten (nur im Vollbild-Modus)"
-
-#. Put one translator per line, in the form of NAME <EMAIL>, YEAR1, YEAR2.
-#: C/f-spot.xml:0(None)
-msgid "translator-credits"
-msgstr ""
-"Arun Persaud <arun at nubati.net>, 2008\n"
-"Stefan Horning <stefan at hornings.de>, 2009\n"
-"Mario Blättermann <mariobl at gnome.org>, 2009"
diff --git a/docs/de/f-spot.xml b/docs/de/f-spot.xml
deleted file mode 100644
index 81b761c..0000000
--- a/docs/de/f-spot.xml
+++ /dev/null
@@ -1,933 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!DOCTYPE book PUBLIC "-//OASIS//DTD DocBook XML 4.1.2//EN" "http://www.oasis-open.org/docbook/xml/4.1.2/docbookx.dtd">
-<book id="f-spot" lang="de">
- <bookinfo>
- <title>Das F-Spot Benutzerhandbuch</title>
- <abstract role="description">
- <para>Dies ist das Benutzerhandbuch von F-Spot, einem GNOME-Programm zur Verwaltung von Fotos.</para>
- </abstract>
- <subtitle>Dies ist das Benutzerhandbuch von F-Spot, einem GNOME-Programm zur Verwaltung von Fotos.</subtitle>
- <copyright>
- <year>2007-2009</year>
- <holder>Aaron Bockover, Gabriel Burt, Miguel de Icaza, Bengt Thuree</holder>
- </copyright><copyright><year>2008</year><holder>Arun Persaud (arun at nubati.net)</holder></copyright><copyright><year>2009</year><holder>Stefan Horning (stefan at hornings.de)</holder></copyright><copyright><year>2009</year><holder>Mario Blättermann (mariobl at gnome.org)</holder></copyright>
- <publisher>
- <publishername>GNOME-Dokumentationsprojekt</publishername>
- </publisher>
- <authorgroup>
- <author>
- <firstname>Miguel</firstname>
- <surname>de Icaza</surname>
- </author>
- <author>
- <firstname>Aaron</firstname>
- <surname>Bockover</surname>
- </author>
- <author>
- <firstname>Bengt</firstname>
- <surname>Thuree</surname>
- </author>
- <author>
- <firstname>Gabriel</firstname>
- <surname>Burt</surname>
- </author>
- <author>
- <firstname>Alexandre</firstname>
- <surname>Prokoudine</surname>
- </author>
- <author role="maintainer">
- <firstname>Stephane</firstname>
- <surname>Delcroix</surname>
- </author>
- </authorgroup>
- <!--<include href="legal.xml" xmlns="http://www.w3.org/2001/XInclude"/>-->
- <revhistory>
- <revision>
- <revnumber>0.5</revnumber>
- <date>25. September 2008</date>
- </revision>
- <revision>
- <revnumber>0.4</revnumber>
- <date>12. September 2008</date>
- </revision>
- <revision>
- <revnumber>0.3</revnumber>
- <date>26. Juli 2007</date>
- </revision>
- </revhistory>
- </bookinfo>
-
- <chapter id="organizing">
- <title>Organisieren Ihrer Fotos</title>
-
- <sect1 id="import">
- <title>Importieren</title>
-
- <para>Sie können Fotos von der Festplatte oder ihrer Kamera importieren. Wenn Sie Fotos von ihrer Kamera in F-Spot importieren, wird immer eine Kopie angelegt, so dass Sie den Speicher ihrer Kamera löschen können. Standardmäßig legt F-Spot auch Kopien der Fotos an, die von der Festplatte importiert werden. Entfernen Sie die Markierung für die <guilabel>Kopie</guilabel>-Option im Importdialog oder halten Sie die <keycap>Umschalttaste</keycap> gedrückt, während Sie Fotos nach F-Spot verschieben, falls Sie nicht wollen, dass eine Kopie angelegt wird.</para>
-
- <para>Standardmäßig kopiert F-Spot Ihre Fotos in den Ordner <filename class="directory">~/Fotos</filename>. Sie können den Ordner, den F-Spot benutzen soll, in den <guilabel>Einstellungen</guilabel> (<menuchoice><guimenu>Bearbeiten</guimenu><guimenuitem>Einstellungen</guimenuitem></menuchoice>) ändern. Sie können das physikalische Kopieren Ihrer Bilder in diesen Ordner auch deaktivieren und F-Spot nur vorhandene Dateien anzeigen lassen. Dazu deaktivieren Sie das Ankreuzfeld vor <guilabel>Dateien in den Fotoordner kopieren</guilabel>.</para>
- <para>Falls die geringste Wahrscheinlichkeit besteht, dass manche Ihrer Fotos bereits von der vorhandenen Quelle importiert wurden, können Sie die Option <guilabel>Duplikate finden</guilabel> verwenden. In diesem Fall wird F-Spot versuchen herauszufinden, ob sich das exakt gleiche Bild schon in der Datenbank befindet. Die neue Kopie wird dann nicht importiert.</para>
- <para>Falls alle Fotos, die Sie auf einmal importieren vom gleichen Ereignis sind oder andere Gemeinsamkeiten aufweisen, können Sie eine Markierung für diese Bildergruppe erstellen. Das hilft dabei, die Bilder einfach wieder zu finden. Folgen Sie dazu den Anweisungen in <xref linkend="tag"/>, um eine neue Markierung anzulegen. Beim Importieren aktivieren Sie <guilabel>Markierung hinzufügen</guilabel> und wählen die erstellte Markierung aus.</para>
-
- <tip>
- <para>F-Spot benutzt eine Datenbank, die in <filename>~/.config/f-spot/photos.db</filename> gespeichert ist. Hinweis: Um auf die Datenbank zuzugreifen, müssen Sie den sqlite3-Befehl verwenden. Sie können den Pfad zur Datenbank selbst angeben, indem Sie F-Spot mit der Option <option>-b</option> ausführen.</para>
- </tip>
-
- <para>Nach dem Importieren zeigt F-Spot nur die Bilder des aktuellen Importvorgangs an. Lesen Sie <xref linkend="enjoying-search"/>, um mehr über Import-Markierungen zu erfahren.</para>
- <para>Sie können auch direkt aus Mozilla <ulink url="http://www.mozilla-europe.org/de/firefox/">Firefox</ulink> und <ulink url="http://www.mozilla-europe.org/de/thunderbird/">Thunderbird</ulink> importieren, indem Sie die <ulink url="https://addons.mozilla.org/de/firefox/addon/7091">Firefox</ulink> und <ulink url="https://addons.mozilla.org/de/thunderbird/addon/7011">Thunderbird</ulink> F-Spot Erweiterungen von <ulink url="http://personalpages.tds.net/~cdovel/">Pizzach</ulink> verwenden.</para>
- </sect1>
-
- <sect1 id="edit">
- <title>Bearbeiten</title>
-
- <para>Durch einen Doppelklick oder durch Drücken der Eingabetaste gelangen Sie in den Bearbeitungsmodus, wo Sie rote Augen entfernen, Zuschneiden und Farben oder Helligkeit anpassen können.</para>
-
- <sect2 id="edit-versions">
- <title>Versionen</title>
-
- <para>Wenn Sie Ihre Fotos bearbeiten, wird eine neue Version des Bildes angelegt. So bleibt das Original immer erhalten. Nachdem Sie das Foto zum ersten Mal bearbeitet haben, werden alle Änderungen in diese Version übernommen. Falls Sie weitere Versionen dieses Bildes anlegen möchten – etwa mit verschiedenen Zuschnitten oder Farbanpassungen – dann verwenden Sie die Funktion <menuchoice><guimenu>Datei</guimenu><guimenuitem>Neue Version erstellen</guimenuitem></menuchoice>.</para>
- </sect2>
-
- <sect2 id="edit-crop">
- <title>Zuschneiden</title>
-
- <para>Zuschneiden ist eine gute Möglichkeit, die Qualität Ihrer Fotografie zu verbessern, indem Sie unnötige Bereiche am Rand entfernen. Sie schneiden das Foto zu, indem Sie den Teil des Bildes auswählen, den Sie erhalten möchten. Falls Sie Ihr Foto auf ein exaktes Maß zuschneiden möchten, können Sie den ausgewählten Bereich mit dem angebotenen Auswahlmenü auf die gewünschte Größe anpassen. Im nachfolgenden <xref linkend="edit-remove-red-eye"/> finden Sie weitere Details über das Auswählen eines Bereiches Ihrer Fotografie.</para>
- <figure>
- <title>Zuschneiden-Werkzeug</title>
- <mediaobject>
- <imageobject>
- <imagedata fileref="figures/f-spot-crop.png"/>
- </imageobject>
- </mediaobject>
- </figure>
- <para>Sobald Sie Ihre Auswahl zum Ausschneiden getroffen haben, müssen Sie den »Zuschneiden« Knopf anklicken, um den Zuschneide-Vorgang abzuschließen. Beim Bearbeiten des Original-Fotos wird dabei eine neue Version des Fotos angelegt.</para>
- </sect2>
-
- <sect2 id="edit-straighten">
- <title>Begradigen</title>
-
- <para>Das Begradigen-Werkzeug dient zum Anpassen von ohne Stativ aufgenommenen Landschaftsaufnahmen, bei denen die Horizontlinie schräg (nicht 0°) verläuft. Das Werkzeug dreht das Bild um den angegebenen Winkel und schneidet die Ränder automatisch zu, so dass sich immer ein Rechteck ergibt.</para>
- <figure>
- <title>Begradigungs-Werkzeug</title>
- <mediaobject>
- <imageobject>
- <imagedata fileref="figures/f-spot-straighten.png"/>
- </imageobject>
- </mediaobject>
- </figure>
- </sect2>
-
- <sect2 id="edit-adjust-colors">
- <title>Farbabgleich</title>
-
- <para>Um die Helligkeit, den Kontrast oder Farben eines Fotos anzupassen, klicken Sie zuerst auf den <guibutton>Farbabgleich</guibutton>-Knopf, um den Farbabgleichs-Dialog zu öffnen. Ändern Sie die gewünschten Parameter und speichern Sie sie mit <guibutton>Anpassen</guibutton>.</para>
- <figure>
- <title>Farbabgleichs-Werkzeug</title>
- <mediaobject>
- <imageobject>
- <imagedata fileref="figures/f-spot-adjust-colors.png"/>
- </imageobject>
- </mediaobject>
- </figure>
- </sect2>
-
- <sect2 id="edit-auto-color">
- <title>Automatischer Farbabgleich</title>
-
- <para>Dieser Effekt ändert automatisch die Farbeinstellungen, so dass ein farblich gut ausgeglichenes Bild entsteht. Dieser Effekt ist am besten für Bilder geeignet, die mit automatischem Weißabgleich aufgenommen wurden, aber die Kamera diese Aufgabe nicht all zu gut erfüllen konnte.</para>
- <figure>
- <title>Automatischer Farbabgleich</title>
- <mediaobject>
- <imageobject>
- <imagedata fileref="figures/f-spot-autocolor.png"/>
- </imageobject>
- </mediaobject>
- </figure>
- </sect2>
-
- <sect2 id="edit-desaturate">
- <title>Entsättigen</title>
-
- <para>Um ein farbiges Foto in ein Schwarz-Weiß-Bild umzuwandeln, öffnen Sie ein Foto Ihrer Wahl und klicken auf den <guibutton>Entsättigen</guibutton>-Knopf.</para>
- <figure>
- <title>Entsättigungs-Werkzeug</title>
- <mediaobject>
- <imageobject>
- <imagedata fileref="figures/f-spot-desaturate.png"/>
- </imageobject>
- </mediaobject>
- </figure>
- </sect2>
-
- <sect2 id="edit-sepia">
- <title>Sepia-Farben</title>
-
- <para>Um ein farbiges Bild wie ein altes Bild in Sepia-Tönen aussehen zu lassen, öffnen Sie ein Foto Ihrer Wahl und klicken auf den <guibutton>Sepiafarben</guibutton>-Knopf.</para>
- <figure>
- <title>Entsättigungs-Werkzeug</title>
- <mediaobject>
- <imageobject>
- <imagedata fileref="figures/f-spot-sepia.png"/>
- </imageobject>
- </mediaobject>
- </figure>
- </sect2>
-
- <sect2 id="edit-remove-red-eye">
- <title>Rote-Augen-Reduzierung</title>
-
- <para>Um rote Augen aus Ihrem Foto zu entfernen, wählen Sie ein Bild Ihrer Wahl und drücken den <guibutton>Rote-Augen-Reduzieren</guibutton> Knopf. Sie müssen zunächst den Augenbereich auswählen. Am besten Sie vergrößern das Bild, um die Augen im Foto akkurat auszuwählen. Normalerweise können Sie mehrere Augen auf einmal auswählen und gleichzeitig korrigieren. Falls dies nicht funktioniert, oder sich wichtige rote Bereiche (z.B. Lippen) gleich daneben befinden, kann es besser sein, ein Auge nach dem anderen zu korrigieren.</para>
- <para>Um Ihre Auswahl zu treffen, klicken Sie auf eine Ecke des Rechtecks, das Ihre Auswahl begrenzen soll. Dann ziehen Sie die Auswahl mit der Maus in die diagonal gegenüberliegende Ecke und lassen Sie die Maus-Taste los. Sie können die Größe der Auswahl noch ändern, indem Sie an den Ecken ziehen, oder Sie durch Klicken in der Mitte verschieben.</para>
- <para>Sobald Sie den Bereich markiert haben, können Sie die roten Augen entfernen. Klicken Sie dazu auf den <guibutton>Korrigiere!</guibutton>-Knopf.</para>
- <figure>
- <title>Werkzeug zur Reduzierung roter Augen</title>
- <mediaobject>
- <imageobject>
- <imagedata fileref="figures/f-spot-red-eye.png"/>
- </imageobject>
- </mediaobject>
- </figure>
- <tip>
- <para>Sie können den Grenzwert für die Rote-Augen-Erkennung durch folgenden Gconf-Schlüssel beeinflussen: <filename class="directory">/apps/f-spot/edit/redeye_threshold</filename>.</para>
- </tip>
- </sect2>
-
- <sect2 id="edit-soft-focus">
- <title>Weicher Fokus</title>
-
- <para>
- In photography sharpening one region of a picture, while blurring
- all the rest, is a way to make an emphasis and grab attention.
- It is achieved by using a lens that allows shooting with a short
- distance in front of and beyond the subject that appears to be in
- focus. Soft focus effect is a way to emulate such a lens.
- </para>
- <figure>
- <title>Werkzeug »Weicher Fokus«</title>
- <mediaobject>
- <imageobject>
- <imagedata fileref="figures/f-spot-soft-focus.png"/>
- </imageobject>
- </mediaobject>
- </figure>
- <para>Klicken Sie, um den zentralen Punkt auszuwählen, den Sie im Fokus haben möchten und passen Sie die Schärfe an. Zum Anwenden klicken Sie auf <guibutton>Weicher Fokus</guibutton>.</para>
- </sect2>
-
- <sect2 id="edit-sharpen">
- <title>Schärfen</title>
-
- <para>Nicht korrekt scharf gestellte Fotos und die meisten digitalisierten Bilder benötigen eine Schärfekorrektur. Die Weichzeichner-Effekt schärft die Ränder der Bildelemente, ohne das Bildrauschen zu erhöhen oder das Bild zu verunstalten. um ein Foto zu schärfen, wählen Sie <menuchoice><guimenu>Bearbeiten</guimenu><guimenuitem>Schärfen</guimenuitem></menuchoice> und legen die folgenden Werte fest:</para>
-
- <itemizedlist>
- <listitem>
- <para><parameter class="option">Betrag</parameter> — Stärke des Schärfens.</para>
- </listitem>
- <listitem>
- <para><parameter class="option">Radius</parameter> — Legt fest, wie viele Pixel auf jeder Seite einer Ecke durch das Schärfen beeinflusst werden. Bilder mit höherer Auflösung erlauben einen höheren Radius.</para>
- </listitem>
- <listitem>
- <para><parameter class="option">Schwellwert</parameter> — Die minimale Differenz in Pixelwerten, die angibt an welchen Kanten das Schärfen angewendet werden soll. Dies hilft Unschönheiten in Gesichtern, im Himmel oder Wasseroberflächen zu vermeiden.</para>
- </listitem>
- </itemizedlist>
- </sect2>
-
- <sect2 id="edit-describe">
- <title>Beschreiben</title>
-
- <para>Sie können eine Beschreibung des Bildes einfügen, indem Sie in die Text-Box unter dem Bild klicken und Ihren Text eingeben.</para>
- <para>Sobald Sie Ihre Auswahl zum Ausschneiden getroffen haben, müssen Sie den »Zuschneiden« Knopf anklicken, um den Zuschneide-Vorgang abzuschließen. Beim Bearbeiten des Original-Fotos wird dabei eine neue Version des Fotos angelegt.</para>
- </sect2>
-
- <sect2 id="edit-adjust-time">
- <title>Uhrzeit anpassen</title>
-
- <para>Sowohl im Übersichts- als auch im Bearbeitungsmodus können Sie die Aufnahmezeit eines oder mehrerer Bilder anpassen (<menuchoice><guimenu>Bearbeiten</guimenu><guimenuitem>Uhrzeit anpassen …</guimenuitem></menuchoice>).</para>
- </sect2>
- </sect1>
-
- <sect1 id="tag">
- <title>Markierung</title>
- <para>F-Spot erlaubt Ihnen, Ihre Fotos mit Hilfe benutzerdefinierter Markierungen zu organisieren. Markierungen sind wie Schlagworte. F-Spot wird bereits mit vorgegebenen Markierungen ausgeliefert, um Ihnen den Einstieg zu erleichtern. Sie können diese Markierungen jedoch gerne ändern und/oder Neue hinzufügen. Falls Sie zum Beispiel eine Markierung für ein bestimmtes Ereignis anlegen möchten, können Sie diese Markierung unter der Markierung »Ereignisse« anlegen.</para>
- <para>Es gibt verschiedene Möglichkeiten, Fotos zu markieren:</para>
- <itemizedlist>
- <listitem>
- <para>Indem Sie ein oder mehrere Fotos auf eine Markierung ziehen</para>
- </listitem>
- <listitem>
- <para>Indem Sie eine Markierung auf ein oder mehrere Fotos ziehen</para>
- </listitem>
- <listitem>
- <para>Über das Kontextmenü des Fotos (Rechtsklick)</para>
- </listitem>
- <listitem>
- <para>Mit den Menüs »Markierung« oder »Bearbeiten«</para>
- </listitem>
- <listitem>
- <para>durch Eingeben von Markierungen. Drücken Sie <keycap>t</keycap>, um das Eingabefenster für Markierungen zu öffnen. Trennen Sie einzelne Markierungen durch Kommas (Sie können vorhandene Markierungen mit der Tabulatortaste vervollständigen).</para>
- <para>
- You can also use auto-completion in this entry bar: After
- entering the beginning of a tag name, press
- <keycap>Tab</keycap> to see the first possible completion. You can
- cycle between other possible completions by pressing
- <keycap>Tab</keycap> again, and backwards with
- <keycombo action="simul"><keycap>Shift</keycap><keycap>Tab</keycap></keycombo>.
- To confirm the suggested completion and enter a new tag, press
- <keycap>,</keycap>. By pressing <keycap>Enter</keycap> you
- leave the tag entry bar, possibly confirming the current
- completion. To abort the auto completion, just keep on typing.
- </para>
- </listitem>
- </itemizedlist>
- <para>Das erste Foto, das Sie mit einer Markierung bezeichnen, wird automatisch als Vorschaubild dieser Markierung verwendet. Sie können die Markierungs-Eigenschaften (Markierungsname, Vorschaubild, übergeordnete Markierung) jedoch jederzeit bearbeiten, indem sie erst rechts klicken und dann <guilabel>Ausgewählte Markierung bearbeiten …</guilabel> wählen.</para>
- <para>Sie können die übergeordnete Markierung ändern, indem Sie die Markierung an den gewünschten Platz ziehen. Durch drücken von <keycap>F2</keycap> können Sie eine ausgewählte Markierung umbenenen.</para>
-
- <para>Sie können die Größe der Markierungs-Symbole in der Seitenleiste ändern oder diese sogar ausblenden, indem Sie Ihre bevorzugte Option im Menü <menuchoice><guimenu>Ansicht</guimenu><guimenuitem>Tag-Symbole</guimenuitem></menuchoice> wählen.</para>
-
- <tip>
- <para>F-Spot kann Markierungen (Tags) als Metadaten-Felder in JPEG-Dateien schreiben. Tags für verschiedene andere Dateien, wie etwa PNG, TIFF, RAW-Dateien, werden in F-Spots Datenbank gespeichert. Sie müssen diese Dateien neu taggen, wenn Sie Ihre Sammlung neu importieren.</para>
- </tip>
- </sect1>
- </chapter>
-
- <chapter id="enjoying">
- <title>Genießen Ihrer Fotos</title>
- <sect1 id="enjoying-browse">
- <title>Durchsuchen</title>
- <para>Sie können den Schieberegler benutzen, um Ihre Fotos anhand von Monat oder Ordner zu durchsuchen. Um diese Einstellung zu ändern, wählen Sie <menuchoice><guimenu>Ansicht</guimenu><guimenuitem>Sortiert nach</guimenuitem></menuchoice>.</para>
- </sect1>
- <sect1 id="enjoying-search">
- <title>Suche</title>
-
- <para>F-Spot benutzt Suchfilter, um Ihnen das Festlegen von Suchkriterien zu erleichtern.</para>
-
- <sect2 id="enjoying-search-tags">
- <title>Markierungen</title>
-
- <para>Sie können eine Suche starten, indem Sie auf eine Markierung doppelklicken oder diese in der Markierungsliste auswählen. Alternativ können Sie das Suchfeld mit Hilfe des Menüs <menuchoice><guimenu>Suchen</guimenu><guimenuitem>Suchfeld anzeigen</guimenuitem></menuchoice>. Bei angezeigtem Suchfeld können Sie Markierungen aus der Markierungsansicht in das Suchfeld ziehen.</para>
- <para>
- To find photos that are tagged with both of two tags, activate the first in
- the tag view or drag it onto the find bar, then drag the second tag and drop
- it on top of the first. You can also right click on the second tag in the tag
- view, or use the <guimenu>Find</guimenu> menu, and choose <guimenuitem>Find
- With...</guimenuitem> and select the first tag (or group of tags).
- </para>
- <para>
- You can drag a tag icon around on the find bar to change from finding it and
- another tag to finding it or another tag.
- </para>
- <para>Sie können nach Fotos suchen, die eine bestimmte Markierung nicht haben. Doppelklicken Sie hierzu auf eine der Markierungen in der Suchzeile. Wahlweise können Sie mit der rechten Maustaste auf eine Markierung in der Suchzeile klicken und <guimenuitem>Ausschließen</guimenuitem> wählen.</para>
- <para>Um eine Markierung von der Suche auszuschließen, ziehen Sie sie aus der Suchzeile heraus oder klicken Sie mit der rechten Maustaste darauf und wählen Sie <guimenuitem>Entfernen</guimenuitem>.</para>
- <para>Standardmäßig werden mit der Markierung <emphasis>Versteckt</emphasis> bezeichnete Fotos ausgeblendet. Sie müssen die Markierung <emphasis>Versteckt</emphasis> ausdrücklich in Ihre Suche mit aufnehmen, um diese Fotos anzuzeigen.</para>
- </sect2>
-
- <sect2 id="enjoying-search-import-rolls">
- <title>Rollen importieren</title>
- <para>
- F-Spot remembers what pictures were imported every now and then. Use
- <menuchoice><guimenu>Find</guimenu><guisubmenu>Import Roll</guisubmenu>
- <guimenuitem>Last import roll</guimenuitem></menuchoice> to limit search
- to last importing session or use <menuchoice><guimenu>Find</guimenu>
- <guisubmenu>Import Roll</guisubmenu><guimenuitem>Select Import Rolls...</guimenuitem>
- </menuchoice> to make a finer selection of imported photos:
- </para>
- <itemizedlist>
- <listitem>
- <para><parameter class="option">Am</parameter> — um Fotos eines bestimmten Importiervorgangs auszuwählen</para>
- </listitem>
- <listitem>
- <para><parameter class="option">Nach dem</parameter> — Um alle Fotos auszuwählen, die nach diesem Importvorgang importiert wurden</para>
- </listitem>
- <listitem>
- <para><parameter class="option">Zwischen</parameter> — Um alle Fotos auszuwählen, die zwischen zwei bestimmten Importvorgängen liegen</para>
- </listitem>
- </itemizedlist>
- <para>Jedesmal wenn Sie die Filter-Einstellungen ändern, wird die Anzahl der gewählten Fotos im unteren Bereich des Dialogs angezeigt.</para>
- <para>
- When you apply Import Roll filter, in the Find bar you will see
- <guilabel>Find: Import Roll</guilabel>. Now you can add some other
- filter to finetune your selection.
- </para>
- <para>Falls Sie den Filmrollen-Importfilter nicht mehr benötigen, wählen Sie <menuchoice><guimenu>Suchen</guimenu><guisubmenu>Nach importierten Filmrollen</guisubmenu><guimenuitem>Filmrollenfilter zurücksetzen</guimenuitem></menuchoice>, um diesen Filter aus den Suchkriterien zu entfernen. Sie können auch auf den Schließen-Knopf der Suchzeile klicken, um alle aktuellen Suchoptionen zu verwerfen.</para>
- <tip>
- <para>Die Anzahl der im Dialog angezeigten Rollen wird im GConf-Schlüssel <filename class="directory">/apps/f-spot/import/gui_roll_history</filename> festgelegt. Standardwert ist 10.</para>
- </tip>
- </sect2>
-
- <sect2 id="enjoying-search-type-to-find">
- <title>Suchen-beim-Eingeben</title>
- <para>Es gibt auch ein Eingabefeld, in welchem bereits bei der Eingabe mit der Suche begonnen wird. Drücken Sie <keycap>/</keycap>, um es zu öffnen. Es kann nicht gleichzeitig mit der Suchleiste verwendet werden. Sie können Suchvorgänge wie »MarkierungA and (MarkierungB or (MarkierungC and MarkierungD))« ausführen. Zu jedem Zeitpunkt erkennt F-Spot Ihre Eingeben als gültige Abfrage und aktualisiert Ihre Suche. Der Operator <emphasis>not</emphasis> wird dabei nicht unterstützt.</para>
-
- <para>Diese Funktion sucht auch nach dem eingegebenen Text in den Foto-Kommentaren und im Dateinamen.</para>
- </sect2>
- </sect1>
-
- <sect1 id="enjoying-fullscreen-mode-and-slideshows">
- <title>Vollbildmodus und Diashows</title>
- <para>
- For fewer distractions and larger display, you can view your photos in full
- screen mode. You control when to show the next photo or to return to the
- previous. Enter fullscreen mode by pressing <keycap>F11</keycap> at
- any time or by pressing the button in the toolbar.
- </para>
- <figure>
- <title>Vollbild</title>
- <mediaobject>
- <imageobject>
- <imagedata fileref="figures/f-spot-fullscreen.png"/>
- </imageobject>
- </mediaobject>
- </figure>
- <para>Im Diaschau-Modus können Sie sich zurücklehnen und sich Ihre Fotos in einer Präsentation anschauen. Die Diaschau starten Sie mit dem Knopf in der Werkzeugleiste.</para>
- <figure>
- <title>DiaShow</title>
- <mediaobject>
- <imageobject>
- <imagedata fileref="figures/f-spot-slideshow.png"/>
- </imageobject>
- </mediaobject>
- </figure>
- </sect1>
- </chapter>
-
- <chapter id="sharing">
- <title>Ihre Fotos mit Anderen teilen</title>
-
- <abstract>
- <para>Es gibt verschiedene Möglichkeiten, Ihre Fotos mit Hilfe von F-Spot mit Anderen zu teilen. Nachfolgende Methoden übertragen, bei ihrer Verwendung, jeweils nur die ausgewählten Fotos.</para>
- </abstract>
-
- <sect1 id="sharing-e-mail">
- <title>E-Mail</title>
- <para>Versenden Sie Fotos direkt aus F-Spot per E-Mail mit <menuchoice><guimenu>Foto</guimenu><guimenuitem>Per E-Mail verschicken …</guimenuitem></menuchoice>.</para>
- <note>
- <title>Anmerkung 1</title>
- <para>Es wird das in GNOME voreingestellte E-Mail-Programm zum Versenden verwendet. Sie können das systemweite E-Mail-Programm mit dem <application>Bevorzugte Anwendungen</application>-Werkzeug von GNOME für den einzelnen Benutzer ändern. Sie finden den Dialog im GNOME-Hauptmenü unter <menuchoice><guimenu>System</guimenu><guisubmenu>Einstellungen</guisubmenu></menuchoice>.</para>
- </note>
- <note>
- <title>Anmerkung 2</title>
- <para>Falls sich manche per E-Mail zu versendende Fotos in einem Format befinden, das F-Spot nicht schreiben kann (z.B. RAW-Bilder), wird die Größenauswahl ausgegraut und das Original verschickt.</para>
- </note>
- <tip>
- <para>
- If you're sending resized pictures, F-Spot will keep the modified versions
- somewhere in the <filename class="directory">/tmp</filename> directory for
- 30 seconds. It's not an issue with evolution, which makes it's own local
- copy of the attachments, but could be a bit shorter if you're using Thunderbird.
- You can change the delay by editing the gconf key
- <filename class="directory">/apps/f-spot/export/email/delete_timeout_seconds</filename>.
- </para>
- </tip>
- </sect1>
-
- <sect1 id="sharing-print">
- <title>Drucken</title>
- <para>Drucken Sie Ihre Fotos über das Menü <menuchoice><guimenu>Foto</guimenu><guimenuitem>Drucken</guimenuitem></menuchoice>.</para>
- </sect1>
-
- <sect1 id="sharing-burn-to-cd">
- <title>Auf CD brennen</title>
- <para>Brennen Sie Ihre Fotos auf CD oder DVD über das Menü <menuchoice><guimenu>Foto</guimenu><guisubmenu>Exportieren nach</guisubmenu><guimenuitem>CD …</guimenuitem></menuchoice>.</para>
- </sect1>
-
- <sect1 id="website-gallery-folder">
- <title>Erzeugen einer Web-Galerie oder eines Ordners</title>
- <para>In <menuchoice><guimenu>Datei</guimenu><guimenuitem>Exportieren</guimenuitem><guimenuitem>In Ordner exportieren</guimenuitem></menuchoice> stehen Ihnen drei Möglichkeiten zum Export Ihrer Bilder zur Verfügung.</para>
- <itemizedlist>
- <listitem>
- <para><guilabel>Original verwenden</guilabel> exportiert Ihre Fotos so, dass sie von der von Jakub Steiner veröffentlichten freien Software <ulink url="http://jimmac.musichall.cz/original.php"> Original Photo Gallery</ulink> verarbeitet werden können. Im Zweifelsfall sollten Sie diese Option nicht aktivieren.</para>
- </listitem>
- <listitem>
- <para><guilabel>Statische HTML-Dateien</guilabel> exportiert Ihre Fotos in eine interaktive Website, fertig um sie hoch zu laden.</para>
- </listitem>
- <listitem>
- <para><guilabel>Einfache Dateien</guilabel> exportiert Ihre Bilder als Dateien innerhalb eines Ordners, ohne Sie in eine Galerie zu integrieren.</para>
- </listitem>
- </itemizedlist>
- </sect1>
-
- <sect1 id="sharing-flickr-or-php-gallery">
- <title>Übertragen in Ihre Online-Galerien</title>
- <para>Falls Sie Flickr, SmugMug, 23hq, Tabblo, Facebook, Zooomr oder Picasa Web-Album verwenden, können Sie Ihre Fotos direkt aus F-Spot übertragen. Die entsprechenden Dialoge finden Sie im Menü unter <menuchoice><guimenu>Datei</guimenu><guisubmenu>Exportieren nach</guisubmenu></menuchoice>.</para>
- <para>Falls Sie die PHP-Software <ulink url="http://gallery.sourceforge.net/"> Gallery</ulink> verwenden, können Sie Ihre Fotos direkt in ein bestehendes Album übertragen. Gehen Sie im Menü nach <menuchoice><guimenu>Foto</guimenu><guimenuitem>Exportieren nach</guimenuitem><guimenuitem>Web-Galerie …</guimenuitem></menuchoice>. Sie müssen zuerst das Remote-Modul in Ihrer Gallery-Installation aktivieren.</para>
- <note>
- <title>Hinweis für Benutzer von Gallery 2.2</title>
- <para>Das »Remote« Modul für Gallery sollte in der Version 1.0.8 oder neuer vorliegen.</para>
- </note>
- <para><ulink url="http://pennave.sourceforge.net">PennAve</ulink> ist eine in Python geschriebene Web-Applikation, die direkt die F-Spot Datenbank verwendet, um eine dynamische Galerie Ihrer Fotos und Markierungen darzustellen.</para>
- <para><ulink url="http://www.conduit-project.org">Conduit</ulink> ist eine Anwendung, die Fotos einer bestimmten Markierung mit Flickr, oder Picasa abgleichen kann.</para>
- </sect1>
- </chapter>
-
- <chapter id="cms">
- <title>Farbverwaltung</title>
-
- <sect1 id="cms-what-is-cms">
- <title>Was ist Farbverwaltung</title>
-
- <para>Wenn Sie ein Foto aufnehmen und es auf dem Bildschirm betrachten, sieht es anders aus als auf dem Vorschaubildschirm der Kamera oder jedem anderen Anzeigegerät. Wenn Sie es ausdrucken, wird es wiederum anders aussehen. Das liegt daran, dass die Farbdarstellung abhängig von den Fähigkeiten des jeweiligen Gerätes ist.</para>
-
- <para>Das Color Management System (CMS) ist ein Werkzeug, mit dem Sie zuverlässige Farbdarstellungen sowohl für die Anzeige als auch für die Ausgabe (z.B. auf einem Drucker) erzielen. Ein CMS benutzt Farbprofile, um die Originalfarben an die Farben des reproduzierenden Gerätes anzupassen, so dass die Farben überall gleich dargestellt werden, egal ob auf einem LCD-Bildschirm, einem Ausdruck Ihres örtlichen Fotolabors usw.</para>
- </sect1>
-
- <sect1 id="cms-what-is-icc-profile">
- <title>Was ist ein Farbprofil?</title>
-
- <para>Ein Farbprofil hat entweder die Endung .icc (daher die häufig benutzte Bezeichnung ICC-Profil) oder .icm. Es beschreibt die Beziehung der Farben eines Gerätes zu einer universellen Farbbeschreibung.</para>
-
- <para>Es gibt verschiedene Arten von Profilen:</para>
-
- <itemizedlist>
- <listitem>
- <para>
- Input device profile. It's profile for a camera or a profile that an
- application like XSane embeds into a scanned image.
- </para>
- </listitem>
- <listitem>
- <para>
- Working space profile. It's a profile that describes color space in
- which all operations are done inside an application. Usually very wide
- gamut profiles like AdobeRGB1998 or ProPhotoRGB are used for that.
- </para>
- </listitem>
- <listitem>
- <para>Bildschirm-Profil. Ein Profil für Ihren Monitor.</para>
- </listitem>
- <listitem>
- <para>Ausgabe-Profil. Das ist im Normalfall ein Profil für Ihren Drucker.</para>
- </listitem>
- </itemizedlist>
-
- <para>Gegenwärtig erlaubt F-Spot nur das Festlegen von Anzeige- und Ausgabeprofilen. Alle Farboperationen finden im sRGB-Farbraum statt.</para>
- </sect1>
-
- <sect1 id="cms-how-to-get-icc-profile">
- <title>Woher bekomme ich mein Bildschirm/Drucker-Farbprofil?</title>
-
- <para>Es gibt ein verschiedene Möglichkeiten, ein Farbprofil zu beziehen.</para>
-
- <sect2 id="cms-icc-from-cd-or-internet">
- <title>Von der CD oder aus dem Internet</title>
-
- <para>Viele Gerätehersteller liefern Farbprofile auf einer CD mit. Falls Sie über eine solche CD verfügen (vom Monitor oder Drucker), können Sie diese benutzen. Oder Sie laden sie aus dem Internet, üblicherweise aus dem Supportbereich der Webseite des Herstellers. Einige Kamerahersteller bieten ebenfalls ICC-Profile an.</para>
- </sect2>
-
- <sect2 id="cms-icc-from-calibrating-and-profiling">
- <title>Kalibrierung und Profil-Erstellung</title>
-
- <para>Die besten Ergebnisse erzielen Sie durch Kalibrierung und Profilierung von Geräten mit einem entsprechenden Messgerät. Das ist nicht besonders schwierig, aber Sie benötigen ein Spektrophotometer für die Messungen und die Erstellung eines ICC-Profils.</para>
-
- <para>Wenn Sie unter Windows oder Mac OS X arbeiten, können Sie von den Herstellern eines Spektrophotometers mitgelieferte Software verwenden. Unter Linux steht Ihnen entweder <ulink url="http://www.argyllcms.com">Argyll</ulink> zur Verfügung, welches eine Reihe von vielseitigen Befehlszeilenwerkzeugen bereitstellt, oder <ulink url="http://lprof.sourceforge.net/">LProf</ulink>, welches auch über eine grafische Oberfläche bedient werden kann.</para>
- <para>Bitte ziehen Sie die Dokumentation zu Drittanbieter-Hardware und Software für weitere Details zu Rate.</para>
- </sect2>
-
- <sect2 id="cms-icc-from-embedding">
- <title>Einbettung</title>
-
- <para>Die Bildformate selbst (wie TIFF, JPEG, PNG …) können eingebettete Farbprofile enthalten. Falls die Farbverwaltung aktiviert ist, sucht F-Spot nach solchen eingebetteten Profilen und berücksichtigt sie.</para>
- </sect2>
- </sect1>
-
- <sect1 id="cms-how-to-use">
- <title>Benutzung der Farbverwaltung in F-Spot</title>
-
- <para>Die Farbverwaltung in F-Spot kann derzeit nur mit GB-Profilen umgehen (und Sie werden keine weiteren Profile in F-Spot sehen).</para>
-
- <itemizedlist>
- <listitem>
- <para>Kopieren Sie Ihre Farbprofile in den Ordner <filename class="directory">/usr/share/color/icc</filename> oder <filename class="directory">/usr/local/share/color/icc</filename>.</para>
- </listitem>
- <listitem>
- <para>Aktivieren Sie die Farbverwaltung im Menü <menuchoice><guimenu>Bearbeiten</guimenu><guimenuitem>Einstellungen</guimenuitem></menuchoice>.</para>
- </listitem>
- <listitem>
- <para>Wählen Sie <guilabel>Anzeige</guilabel> und <guilabel>Ausgabe</guilabel> Profile.</para>
- </listitem>
- </itemizedlist>
-
- <tip>
- <para>Von <ulink url="http://burtonini.com/blog/computers/xicc">xicc</ulink> können Sie ICC-Profile zur Anzeige und Nutzung des geladenen Profils in F-Spot beziehen. Aktivieren Sie hierzu das Ankreuzfeld <guilabel>Es wird versucht, das System-Anzeigeprofil zu verwenden</guilabel>.</para>
- </tip>
- </sect1>
- </chapter>
-
- <chapter id="extend">
- <title>Funktionalität erweitern</title>
-
- <sect1 id="extend-what-extensions-are">
- <title>Was sind Erweiterungen?</title>
-
- <para>F-Spot-Erweiterungen fügen neue Funktionalitäten zur Anwendung hinzu. F-Spot unterstützt zwei Arten von Erweiterungen: Exporter (welche das Exportieren von Fotos zu Webdiensten oder Datenspeichern ermöglichen) und Werkzeuge (welche neue Möglichkeiten beispielsweise zur Farbkorrektur oder zum Finden von Duplikaten hinzufügen). Erweiterungen werden in Form von Erweiterungspaketen angeboten.</para>
- <para>
- In the best traditions of not reinventing the wheel extensions can use other
- extensions, which means that one extension cannot work, if another extension
- is not installed. This concept of dependance actually means that
- </para>
- <itemizedlist>
- <listitem>
- <para>Sie können eine Erweiterung nicht installieren, wenn die Erweiterung nicht installiert ist, von der diese abhängt.</para>
- </listitem>
- <listitem>
- <para>Sie können Erweiterungen nicht deinstallieren, falls andere Erweiterungen von dieser abhängen.</para>
- </listitem>
- </itemizedlist>
- </sect1>
-
- <sect1 id="extend-managing-extensions">
- <title>Erweiterungen verwalten</title>
-
- <para>Um Erweiterungen zu verwalten, wählen Sie den Menüeintrag <menuchoice><guimenu>Bearbeiten</guimenu><guimenuitem>Erweiterungen verwalten</guimenuitem></menuchoice>.</para>
-
- <sect2 id="extend-managing-extensions-managing-extension-repositories">
- <title>Erweiterungs-Paketquellen verwalten</title>
-
- <para>
- Simply put, repositories are extension storages. They can be either network
- or local. To add a new repository click Repositories button, choose type of
- the repository you are about to add and provide either URL or path. If the URL
- or path you specified doesn't contain a description (index) file for extensions,
- a warning message will pop up to tell you that.
- </para>
- <para>Um eine Softwarequelle (Repository) zu entfernen, drücken Sie den <guibutton>Repositories …</guibutton> Knopf, wählen Sie die Quelle, die Sie entfernen möchten und klicken Sie auf den <guibutton>Löschen</guibutton> Knopf.</para>
- </sect2>
-
- <sect2 id="extend-managing-extensions-installing-and-updating-extensions">
- <title>Erweiterungen installieren und aktualisieren</title>
-
- <para>Um eine Erweiterung zu installieren, klicken Sie auf den <guibutton>Erweiterungen installieren …</guibutton>-Knopf im nun angezeigten Dialog.</para>
- <orderedlist>
- <listitem>
- <para>Wählen Sie alle Softwarequellen (Repositories), von denen Sie installieren möchten, oder nur eine verfügbare Quelle.</para>
- </listitem>
- <listitem>
- <para>Wählen Sie, welche Erweiterungs-Pakete Sie sehen möchten: Alle, nur Neue, nur Aktualisierungen.</para>
- </listitem>
- <listitem>
- <para>Klicken Sie auf den <guibutton>Aktualisieren</guibutton>-Knopf, um die Liste mit den verfügbaren Erweiterungs-Paketen (die den gewählten Kriterien entsprechen) zu aktualisieren.</para>
- </listitem>
- <listitem>
- <para>Wählen Sie Erweiterungen, die Sie installieren oder aktualisieren möchten und klicken Sie auf <guibutton>Informationen</guibutton>, um eine Zusammenfassung über die ausgewählten Pakete zu erhalten, falls Sie das wünschen.</para>
- </listitem>
- <listitem>
- <para>Klicken Sie auf <guibutton>Weiter</guibutton>, um die Installation fort zu setzen.</para>
- </listitem>
- </orderedlist>
- </sect2>
-
- <sect2 id="extend-managing-extensions-enabling-and-disabling-extensions">
- <title>Erweiterungen aus- und einschalten</title>
-
- <para>Möglicherweise möchten Sie vorübergehend ein bestimmtes Erweiterungspaket aktivieren oder deaktivieren. Beispielsweise dann, wenn eine Erweiterung nicht stabil genug ist, um mit einer großen Anzahl von Bildern umgehen zu können, oder wenn Menüs zu sehr mit Erweiterungen vollgestopft sind.</para>
- <para>Im Dialog <guilabel>Erweiterungen verwalten</guilabel> wählen Sie das Erweiterungspaket aus und klicken auf <guibutton>Aktivieren</guibutton> oder <guibutton>Deaktivieren</guibutton>.</para>
- </sect2>
-
- <sect2 id="extend-managing-extensions-removing-extensions">
- <title>Erweiterungen entfernen</title>
-
- <para>Falls Sie eine Erweiterung nicht benötigen, so können Sie diese komplett aus dem System entfernen. Im <guilabel>Erweiterungsverwaltung</guilabel>-Dialog können Sie das Erweiterungspaket auswählen und es durch klicken auf <guibutton>Deinstallieren …</guibutton> entfernen.</para>
- </sect2>
-
- <sect2 id="extend-managing-extensions-reading-summary-of-extensions">
- <title>Lesen der Erweiterungsbeschreibung</title>
-
- <para>Jedes Erweiterungspaket enthält Meta-Informationen, die folgende Informationen zur Verfügung stellen:</para>
-
- <orderedlist>
- <listitem>
- <para>Beschreibung, diese erklärt üblicherweise die Funktion der Erweiterung.</para>
- </listitem>
- <listitem>
- <para>Version</para>
- </listitem>
- <listitem>
- <para>Autor</para>
- </listitem>
- <listitem>
- <para>Abhängigkeiten</para>
- </listitem>
- </orderedlist>
-
- <para>Im Dialog <guilabel>Erweiterungen verwalten</guilabel> wählen Sie das Erweiterungspaket aus, dessen Zusammenfassung Sie lesen wollen und klicken Sie auf <guibutton>Information</guibutton>.</para>
- </sect2>
- </sect1>
-
- <sect1 id="extend-developing-extensions">
- <title>Entwickeln von Erweiterungen</title>
-
- <para>Das Dokument <ulink url="http://f-spot.org/Extend_F-Spot">F-Spot erweitern</ulink> gibt Anweisungen über das Entwickeln von Erweiterungen für F-Spot.</para>
- </sect1>
- </chapter>
-
- <chapter id="shortcuts">
- <title>Tastenkombinationen</title>
-
- <sect1 id="Global-Shortcuts">
- <title>Globale Tastenkombinationen</title>
- <informaltable frame="all">
- <tgroup cols="2">
- <thead>
- <row>
- <entry>Taste</entry>
- <entry>Aktion</entry>
- </row>
- </thead>
- <tbody>
- <row>
- <entry>
- <keycap>[</keycap>
- </entry>
- <entry>Die ausgewählten Fotos gegen den Uhrzeigersinn drehen</entry>
- </row>
- <row>
- <entry>
- <keycap>]</keycap>
- </entry>
- <entry>Die ausgewählten Fotos im Uhrzeigersinn drehen</entry>
- </row>
- <row>
- <entry>
- <keycap>Entf</keycap>
- </entry>
- <entry>Ausgewähltes Foto aus F-Spots Katalog entfernen</entry>
- </row>
- <row>
- <entry>
- <keycombo><keycap>Umschalttaste</keycap><keycap>Entf</keycap></keycombo>
- </entry>
- <entry>Ausgewählte Fotos dauerhaft von der Festplatte löschen. Falls möglich, werden diese in den Müll verschoben.</entry>
- </row>
-
- <row>
- <entry>
- <keycap>t</keycap>
- </entry>
- <entry>Markierungen der ausgewählten Fotos zeigen oder bearbeiten</entry>
- </row>
- <row>
- <entry>
- <keycap>F11</keycap>
- </entry>
- <entry>Vollbildmodus</entry>
- </row>
- <row>
- <entry>
- <keycombo><keycap>Strg</keycap><keycap>I</keycap></keycombo>
- </entry>
- <entry>Informationen über das Foto anzeigen</entry>
- </row>
- <row>
- <entry>
- <keycombo><keycap>Strg</keycap><keycap>Gleicheits-Zeichen</keycap></keycombo>
- </entry>
- <entry>Ansicht vergrößern</entry>
- </row>
- <row>
- <entry>
- <keycombo><keycap>Strg</keycap><keycap>Minus</keycap></keycombo>
- </entry>
- <entry>Ansicht verkleinern</entry>
- </row>
- <row>
- <entry>
- <keycombo><keycap>Strg</keycap><keycap>N</keycap></keycombo>
- </entry>
- <entry>Fotos importieren</entry>
- </row>
- <row>
- <entry>
- <keycombo><keycap>Alt</keycap><keycap>0-5</keycap></keycombo>
- </entry>
- <entry>Alt + eine Nummer zwischen 0 und 5 bewertet ausgewählte Fotos</entry>
- </row>
- </tbody>
- </tgroup>
- </informaltable>
- </sect1>
-
- <sect1 id="shortcuts-browse-mode">
- <title>Tastenkombinationen im Übersichtsmodus</title>
- <informaltable frame="all">
- <tgroup cols="2">
- <thead>
- <row>
- <entry>Taste</entry>
- <entry>Aktion</entry>
- </row>
- </thead>
- <tbody>
- <row>
- <entry>
- <keycombo><keycap>Strg</keycap><keycap>A</keycap></keycombo>
- </entry>
- <entry>Alles auswählen</entry>
- </row>
- <row>
- <entry>
- <keycombo><keycap>Strg</keycap><keycap>Umschalttaste</keycap>
- <keycap>A</keycap></keycombo>
- </entry>
- <entry>Alles abwählen</entry>
- </row>
- <row>
- <entry>Pfeiltasten oder <keycap>H</keycap>, <keycap>J</keycap>, <keycap>K</keycap>, <keycap>L</keycap></entry>
- <entry>Fokus verschieben</entry>
- </row>
- <row>
- <entry><keycap>Strg</keycap>-Pfeiltaste</entry>
- <entry>Den Fokus verschieben, ohne die Auswahl zu verändern</entry>
- </row>
- <row>
- <entry>
- <keycap>Leertaste</keycap>
- </entry>
- <entry>Aus- oder Abwählen des fokussierten Fotos</entry>
- </row>
- <row>
- <entry>
- <keycombo><keycap>Umschalttaste</keycap>
- <keycap>Pfeiltaste</keycap></keycombo>
- </entry>
- <entry>Foto-Auswahl ändern</entry>
- </row>
- <row>
- <entry>
- <keycombo><keycap>Strg</keycap><keycap>Umschalttaste</keycap>
- <keycap>Linke oder rechte Pfeiltaste</keycap></keycombo>
- </entry>
- <entry>Hinzufügen/Entfernen aller Fotos in der Reihe, in die Richtung die gedrückt wurde, bis zur Auswahl</entry>
- </row>
- <row>
- <entry>
- <keycap>V</keycap>
- </entry>
- <entry>Öffnet eine größere Vorschau des Bildes, auf das Sie mit der Maus zeigen.</entry>
- </row>
- <row>
- <entry>
- <keycombo><keycap>Umschalttaste</keycap><keycap>V</keycap></keycombo>
- </entry>
- <entry>Öffnet eine größere Vorschau und ein Farb-Histogramm des Bildes, auf das Sie mit der Maus zeigen.</entry>
- </row>
- </tbody>
- </tgroup>
- </informaltable>
- </sect1>
-
- <sect1 id="shortcuts-tag">
- <title>Tastenkombinationen zum Markieren</title>
- <informaltable frame="all">
- <tgroup cols="2">
- <thead>
- <row>
- <entry>Taste</entry>
- <entry>Aktion</entry>
- </row>
- </thead>
- <tbody>
- <row>
- <entry>
- <keycap>F2</keycap>
- </entry>
- <entry>Ausgewählte Markierung umbenennen</entry>
- </row>
- <row>
- <entry>
- <keycombo><keycap>Strg</keycap><keycap>T</keycap></keycombo>
- </entry>
- <entry>Markierungen zu ausgewählten Fotos hinzufügen</entry>
- </row>
- <row>
- <entry>Nicht verfügbar</entry>
- <entry>Markierungen mit der Maus ziehen, um diese zu verschieben</entry>
- </row>
- <row>
- <entry>Nicht verfügbar</entry>
- <entry>Geben Sie den Namen einer Markierung ein, um zu ihr zu springen (funktioniert nur, wenn alle Markierungen angezeigt werden/ausgeklappt sind)</entry>
- </row>
- </tbody>
- </tgroup>
- </informaltable>
- </sect1>
-
- <sect1 id="shortcuts-edit-mode">
- <title>Bearbeitungsmodus-Tastenkombinationen</title>
- <informaltable frame="all">
- <tgroup cols="2">
- <thead>
- <row>
- <entry>Taste</entry>
- <entry>Aktion</entry>
- </row>
- </thead>
- <tbody>
- <row>
- <entry><keycap>Bild aufwärts</keycap>, <keycap>Rücktaste</keycap>, <keycap>B</keycap></entry>
- <entry>Zum vorherigen Foto gehen</entry>
- </row>
- <row>
- <entry><keycap>Bild abwärts</keycap>, <keycap>Leertaste</keycap>, <keycap>N</keycap></entry>
- <entry>Zum nächsten Foto gehen</entry>
- </row>
- <row>
- <entry>Pfeiltasten oder <keycap>H</keycap>, <keycap>J</keycap>, <keycap>K</keycap>, <keycap>L</keycap></entry>
- <entry>Zum vorherigen/nächsten Foto gehen oder ein vergrößertes Foto in der Ansicht verschieben</entry>
- </row>
- <row>
- <entry>
- <keycap>R</keycap>
- </entry>
- <entry>Zu einem zufälligen Foto gehen</entry>
- </row>
- <row>
- <entry>
- <keycap>f</keycap>
- </entry>
- <entry>Vollbildmodus</entry>
- </row>
- <row>
- <entry>
- <keycap>0</keycap>
- </entry>
- <entry>Bild an Bildschirm anpassen</entry>
- </row>
- <row>
- <entry>
- <keycap>1</keycap>
- </entry>
- <entry>Vergrößerungsstufe auf 1,0 (1 Bilschirmpixel pro Bildpixel)</entry>
- </row>
- <row>
- <entry>
- <keycap>2</keycap>
- </entry>
- <entry>Vergrößerungsstufe auf 2,0 (4 Bildschirmpixel pro Bildpixel)</entry>
- </row>
- <row>
- <entry>
- <keycap>Escape</keycap>
- </entry>
- <entry>Zum Übersichtsmodus zurückkehren</entry>
- </row>
- <row>
- <entry>
- <keycap>V</keycap>
- </entry>
- <entry>Foto mit mit Vergrößerungsglas (Lupe) vergrößern. Doppelklicken Sie in der Lupen-Ansicht, oder Drücken Sie nochmal <keycap>v</keycap> um sie zu schließen.</entry>
- </row>
- <row>
- <entry><keycap>Umschalttaste</keycap>-Mausrad</entry>
- <entry>Schnellerer Filmstreifen-Lauf</entry>
- </row>
- <row>
- <entry>
- <keycap>i</keycap>
- </entry>
- <entry>Die Sichtbarkeit der »Infobox« an- und ausschalten (nur im Vollbild-Modus)</entry>
- </row>
- </tbody>
- </tgroup>
- </informaltable>
- </sect1>
- </chapter>
-
-</book>
diff --git a/docs/de/figures/f-spot-crop.png b/docs/de/figures/f-spot-crop.png
deleted file mode 100644
index 33a39a2..0000000
Binary files a/docs/de/figures/f-spot-crop.png and /dev/null differ
diff --git a/docs/es/es.po b/docs/es/es.po
deleted file mode 100644
index c68cefc..0000000
--- a/docs/es/es.po
+++ /dev/null
@@ -1,2044 +0,0 @@
-# translation of f-spot.docs.HEAD.po to Español
-#
-# Javier Mazorra Rodríguez <mazi.debian at gmail.com>, 2007.
-# Eduardo Retamales <eretamales at gnome.cl>, 2007.
-# Jorge González <jorgegonz at svn.gnome.org>, 2007, 2008, 2009.
-msgid ""
-msgstr ""
-"Project-Id-Version: f-spot.docs.HEAD\n"
-"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2009-08-25 07:01+0000\n"
-"PO-Revision-Date: 2009-08-30 13:20+0200\n"
-"Last-Translator: Jorge González <jorgegonz at svn.gnome.org>\n"
-"Language-Team: Español <gnome-es-list at gnome.org>\n"
-"MIME-Version: 1.0\n"
-"Content-Type: text/plain; charset=UTF-8\n"
-"Content-Transfer-Encoding: 8bit\n"
-"Plural-Forms: nplurals=2; plural=(n != 1);\n"
-"X-Generator: KBabel 1.11.4\n"
-
-#. When image changes, this message will be marked fuzzy or untranslated for you.
-#. It doesn't matter what you translate it to: it's not used at all.
-#: C/f-spot.xml:163(None)
-msgid ""
-"@@image: 'figures/f-spot-crop.png'; md5=63e18c96702aea4701024837a13ae2d9"
-msgstr ""
-"@@image: 'figures/f-spot-crop.png'; md5=63e18c96702aea4701024837a13ae2d9"
-
-#. When image changes, this message will be marked fuzzy or untranslated for you.
-#. It doesn't matter what you translate it to: it's not used at all.
-#: C/f-spot.xml:187(None)
-msgid ""
-"@@image: 'figures/f-spot-straighten.png'; "
-"md5=ceeff0cac633d06599fa5760cc4bc568"
-msgstr ""
-"@@image: 'figures/f-spot-straighten.png'; "
-"md5=ceeff0cac633d06599fa5760cc4bc568"
-
-#. When image changes, this message will be marked fuzzy or untranslated for you.
-#. It doesn't matter what you translate it to: it's not used at all.
-#: C/f-spot.xml:206(None)
-msgid ""
-"@@image: 'figures/f-spot-adjust-colors.png'; "
-"md5=6a5d9eaaaaf238ccbf70552bc073898c"
-msgstr ""
-"@@image: 'figures/f-spot-adjust-colors.png'; "
-"md5=6a5d9eaaaaf238ccbf70552bc073898c"
-
-#. When image changes, this message will be marked fuzzy or untranslated for you.
-#. It doesn't matter what you translate it to: it's not used at all.
-#: C/f-spot.xml:224(None)
-msgid ""
-"@@image: 'figures/f-spot-autocolor.png'; md5=240c4a86c95c9507755fe790bef0e24a"
-msgstr ""
-"@@image: 'figures/f-spot-autocolor.png'; md5=240c4a86c95c9507755fe790bef0e24a"
-
-#. When image changes, this message will be marked fuzzy or untranslated for you.
-#. It doesn't matter what you translate it to: it's not used at all.
-#: C/f-spot.xml:241(None)
-msgid ""
-"@@image: 'figures/f-spot-desaturate.png'; "
-"md5=fa54dfd08171658d720be71b6d367139"
-msgstr ""
-"@@image: 'figures/f-spot-desaturate.png'; "
-"md5=fa54dfd08171658d720be71b6d367139"
-
-#. When image changes, this message will be marked fuzzy or untranslated for you.
-#. It doesn't matter what you translate it to: it's not used at all.
-#: C/f-spot.xml:258(None)
-msgid ""
-"@@image: 'figures/f-spot-sepia.png'; md5=154d6e34903664dbd776f2bef405ce91"
-msgstr ""
-"@@image: 'figures/f-spot-sepia.png'; md5=154d6e34903664dbd776f2bef405ce91"
-
-#. When image changes, this message will be marked fuzzy or untranslated for you.
-#. It doesn't matter what you translate it to: it's not used at all.
-#: C/f-spot.xml:289(None)
-msgid ""
-"@@image: 'figures/f-spot-red-eye.png'; md5=743d0a2ccc9b2fa8fa314855c225cd31"
-msgstr ""
-"@@image: 'figures/f-spot-red-eye.png'; md5=743d0a2ccc9b2fa8fa314855c225cd31"
-
-#. When image changes, this message will be marked fuzzy or untranslated for you.
-#. It doesn't matter what you translate it to: it's not used at all.
-#: C/f-spot.xml:316(None)
-msgid ""
-"@@image: 'figures/f-spot-soft-focus.png'; "
-"md5=14d1437ce49c83f3ebbcf70b7047ffbe"
-msgstr ""
-"@@image: 'figures/f-spot-soft-focus.png'; "
-"md5=14d1437ce49c83f3ebbcf70b7047ffbe"
-
-#. When image changes, this message will be marked fuzzy or untranslated for you.
-#. It doesn't matter what you translate it to: it's not used at all.
-#: C/f-spot.xml:608(None)
-msgid ""
-"@@image: 'figures/f-spot-fullscreen.png'; "
-"md5=86040e20ebf1015f6489a56e9589f063"
-msgstr ""
-"@@image: 'figures/f-spot-fullscreen.png'; "
-"md5=86040e20ebf1015f6489a56e9589f063"
-
-#. When image changes, this message will be marked fuzzy or untranslated for you.
-#. It doesn't matter what you translate it to: it's not used at all.
-#: C/f-spot.xml:621(None)
-msgid ""
-"@@image: 'figures/f-spot-slideshow.png'; md5=84a69bc3bb7a1b8d04c967d3a66e6f23"
-msgstr ""
-"@@image: 'figures/f-spot-slideshow.png'; md5=84a69bc3bb7a1b8d04c967d3a66e6f23"
-
-#: C/f-spot.xml:5(title)
-msgid "The F-Spot Manual"
-msgstr "Manual de F-Spot"
-
-#: C/f-spot.xml:7(para) C/f-spot.xml:9(subtitle)
-msgid "This is the user manual for F-Spot, a GNOME personal photo manager."
-msgstr ""
-"Este es el manual de usuario de F-Spot, un gestor personal de fotos para "
-"GNOME."
-
-#: C/f-spot.xml:11(year)
-msgid "2007-2009"
-msgstr "2007-2009"
-
-#: C/f-spot.xml:12(holder)
-msgid "Aaron Bockover, Gabriel Burt, Miguel de Icaza, Bengt Thuree"
-msgstr "Aaron Bockover, Gabriel Burt, Miguel de Icaza, Bengt Thuree"
-
-#: C/f-spot.xml:15(publishername)
-msgid "GNOME Documentation Project"
-msgstr "Proyecto de documentación de GNOME"
-
-#: C/f-spot.xml:19(firstname)
-msgid "Miguel"
-msgstr "Miguel"
-
-#: C/f-spot.xml:20(surname)
-msgid "de Icaza"
-msgstr "de Icaza"
-
-#: C/f-spot.xml:23(firstname)
-msgid "Aaron"
-msgstr "Aaron"
-
-#: C/f-spot.xml:24(surname)
-msgid "Bockover"
-msgstr "Bockover"
-
-#: C/f-spot.xml:27(firstname)
-msgid "Bengt"
-msgstr "Bengt"
-
-#: C/f-spot.xml:28(surname)
-msgid "Thuree"
-msgstr "Thuree"
-
-#: C/f-spot.xml:31(firstname)
-msgid "Gabriel"
-msgstr "Gabriel"
-
-#: C/f-spot.xml:32(surname)
-msgid "Burt"
-msgstr "Burt"
-
-#: C/f-spot.xml:35(firstname)
-msgid "Alexandre"
-msgstr "Alexandre"
-
-#: C/f-spot.xml:36(surname)
-msgid "Prokoudine"
-msgstr "Prokoudine"
-
-#: C/f-spot.xml:39(firstname)
-msgid "Stephane"
-msgstr "Stephane"
-
-#: C/f-spot.xml:40(surname)
-msgid "Delcroix"
-msgstr "Delcroix"
-
-#: C/f-spot.xml:46(revnumber)
-msgid "0.5"
-msgstr "0.5"
-
-#: C/f-spot.xml:47(date)
-msgid "2008-09-25"
-msgstr "2008-09-25"
-
-#: C/f-spot.xml:50(revnumber)
-msgid "0.4"
-msgstr "0.4"
-
-#: C/f-spot.xml:51(date)
-msgid "2008-09-12"
-msgstr "2008-09-12"
-
-#: C/f-spot.xml:54(revnumber)
-msgid "0.3"
-msgstr "0.3"
-
-#: C/f-spot.xml:55(date)
-msgid "2007-07-26"
-msgstr "2007-07-26"
-
-#: C/f-spot.xml:61(title)
-msgid "Organizing your photos"
-msgstr "Organice sus fotos"
-
-#: C/f-spot.xml:64(title)
-msgid "Import"
-msgstr "Importar"
-
-#: C/f-spot.xml:66(para)
-msgid ""
-"You can import photos from your hard drive or your camera. When you import "
-"your photos into F-Spot from your camera, it will always make a copy of "
-"them, leaving you free to clear your camera's memory. By default, F-Spot "
-"will make a copy of photos imported from your hard drive. Uncheck the "
-"<guilabel>Copy</guilabel> option on the import dialog or hold <keycap>Shift</"
-"keycap> when dragging photos into F-Spot if you do not wish to copy them "
-"from your hard drive."
-msgstr ""
-"Puede importar sus fotos desde su disco duro o cámara. Cuando las importe "
-"desde su cámara a F-Spot, éste siempre hará una copia de las mismas, "
-"permitiéndole liberar memoria en la cámara. De forma predeterminada F-Spot "
-"realizará una copia de las fotos importadas desde su disco duro. Desmarque "
-"la opción <guilabel>Copiar</guilabel> en el diálogo de importación o "
-"mantenga pulsada <keycap>Mayús</keycap> mientras arrastra las fotos en F-"
-"Spot si no desea copiarlas desde su disco duro."
-
-#: C/f-spot.xml:76(para)
-msgid ""
-"By default, F-Spot copies your photos to the <filename class=\"directory\">~/"
-"Photos</filename> folder. You can change the folder F-Spot uses in "
-"<guilabel>Preferences</guilabel> dialog (<menuchoice><guimenu>Edit</"
-"guimenu><guimenuitem>Preferences</guimenuitem></menuchoice>). You can also "
-"disable physical copying of images to that directory and make F-Spot only "
-"reference to existing files. For that you need to disable checkbox "
-"<guilabel>Copy files to the Photos folder</guilabel>."
-msgstr ""
-"De forma predeterminada, F-Spot copia sus fotos en la carpeta "
-"<filename·class=\"directory\">~/Photos</filename>. Puede cambiar la carpeta "
-"que usa F-Spot en el diálogo <guilabel>Preferencias</guilabel> "
-"(<menuchoice><guimenu>Editar</guimenu><guimenuitem>Preferencias</"
-"guimenuitem></menuchoice>). También puede desactivar el copiado físico de "
-"las imágenes en ese directorio y hacer que F-Spot sólo referencie a archivos "
-"existentes. Para ello deberá desactivar la casilla de verificación "
-"<guilabel>Copiar archivos a la carpeta Imágenes</guilabel>."
-
-#: C/f-spot.xml:85(para)
-msgid ""
-"If there is a tiny chance that some of your photos are already imported from "
-"the chosen source, you can use <guilabel>Detect duplicates</guilabel> "
-"option. In this case F-Spot will try to find out if exactly this image is "
-"already present in the database and thus new copy of it should not be "
-"imported."
-msgstr ""
-"Si hay una mínima posibilidad de que algunas de sus fotos ya estén "
-"importadas del origen seleccionado, puede usar la opción <guilabel>Detectar "
-"duplicados</guilabel>. En este caso F-Spot intentará averiguar si la imagen "
-"ya está presente en la base de datos y, de ser así, no debería importarse."
-
-#: C/f-spot.xml:92(para)
-msgid ""
-"If all the photos you are importing at one time are from a particular event, "
-"or have some other characteristic in common, you can create a tag for them "
-"so you can later find them with ease. To do this, follow the instructions "
-"from <xref linkend=\"tag\"/> to create a new tag, then when you are "
-"importing them, check the button for <guilabel>Attach Tag</guilabel> and "
-"choose the tag you created."
-msgstr ""
-"Si todas las fotos que importa a la vez son de un evento en particular o "
-"tienen otra característica en común, puede crear una etiqueta para ellas, "
-"para después poderlas encontrar con facilidad. Para hacerlo, siga las "
-"instrucciones debajo de <ulink url=\"tag\">crear una nueva etiqueta</ulink>, "
-"después cuando las importe, active el botón <guilabel>Añadir etiqueta</"
-"guilabel> y elija la etiqueta creada."
-
-#: C/f-spot.xml:102(para)
-msgid ""
-"F-Spot uses a database stored at <filename>~/.config/f-spot/photos.db</"
-"filename>. Note, to access it, use the sqlite3 command. You can also "
-"manually specify path to a database by running F-Spot with <option>-b</"
-"option> option."
-msgstr ""
-"F-Spot usa una base de datos almacenada en <filename>~/.config/f-spot/photos."
-"db</filename>. Nota, para acceder a ella, usa el comando sqlite3. También "
-"puede especificar manualmente la ruta de una base de datos ejecutando F-Spot "
-"con la opción <option>-b</option>."
-
-#: C/f-spot.xml:110(para)
-msgid ""
-"After an import, F-Spot will display the pictures of the latest import roll "
-"only. Read <xref linkend=\"enjoying-search\"/> to learn how to deal with "
-"import rolls."
-msgstr ""
-"Despues de importar, F-Spot sólo mostrará las imágenes del último carrete "
-"importado. Lea <xref linkend=\"enjoying-search\"/> para aprender importar "
-"carretes."
-
-#: C/f-spot.xml:115(para)
-msgid ""
-"You can also import directly from Mozilla <ulink url=\"http://www.mozilla."
-"com/en-US/firefox/\">Firefox</ulink> and <ulink url=\"http://www.mozilla.com/"
-"en-US/thunderbird/\">Thunderbird</ulink> using <ulink url=\"https://addons."
-"mozilla.org/en-US/firefox/addon/7091\">Firefox</ulink> and <ulink url="
-"\"https://addons.mozilla.org/en-US/thunderbird/addon/7011\">Thunderbird</"
-"ulink> F-Spot importer extensions written by <ulink url=\"http://"
-"personalpages.tds.net/~cdovel/\">Pizzach</ulink>."
-msgstr ""
-"También puede importar directamente desde Mozilla <ulink url=\"http://www."
-"mozilla.com/en-US/firefox/\">Firefox</ulink> y <ulink url=\"http://www."
-"mozilla.com/en-US/thunderbird/\">Thunderbird</ulink> usando <ulink url="
-"\"https://addons.mozilla.org/en-US/firefox/addon/7091\">Firefox</ulink> y "
-"<ulink url=\"https://addons.mozilla.org/en-US/thunderbird/addon/7011"
-"\">Thunderbird</ulink> La extensión de importación de F-Spot escrita por "
-"<ulink url=\"http://personalpages.tds.net/~cdovel/\">Pizzach</ulink>."
-
-#: C/f-spot.xml:127(title)
-msgid "Edit"
-msgstr "Editar"
-
-#: C/f-spot.xml:129(para)
-msgid ""
-"If you double click or press enter on an image, you enter Edit mode, where "
-"you can remove red-eye, crop, and adjust brightness and colors."
-msgstr ""
-"Si pulsa dos veces con el ratón o pulsa retorno sobre una imagen, activará "
-"el modo Editar, donde puede borrar ojos rojos, recortar y ajustar el brillo "
-"y los colores."
-
-#: C/f-spot.xml:135(title)
-msgid "Versions"
-msgstr "Versiones"
-
-#: C/f-spot.xml:137(para)
-msgid ""
-"When you edit your photos, a new copy (called a version) is created, so your "
-"original is never altered. After your first edit to a photo, subsequent "
-"edits will modify the same version. If you want to create multiple versions "
-"of your photo, perhaps with different cropping or coloring, you can do so "
-"via the <menuchoice><guimenu>File</guimenu><guimenuitem>Create new version</"
-"guimenuitem></menuchoice> option."
-msgstr ""
-"Cuando edita sus fotos, se crea una nueva copia (llamada versión), por lo "
-"que el original nunca se altera. Tras su primera edición de una foto, las "
-"siguientes ediciones modificarán la misma versión. Si quiere crear múltiples "
-"versiones de la foto, quizá con diferente recorte o color, puede hacerlo "
-"yendo a la opción <menuchoice><guimenu>Archivo</guimenu><guimenuitem>Crear "
-"nueva versión</guimenuitem></menuchoice>."
-
-#: C/f-spot.xml:148(title)
-msgid "Crop"
-msgstr "Recorte"
-
-#: C/f-spot.xml:150(para)
-msgid ""
-"Cropping an image is a great way to improve the quality of a photograph by "
-"change how it is framed. You crop a photo by selecting the part of the photo "
-"you want to keep. If you want your photo to be the exact dimensions "
-"necessary for a certain print size, you can constrain the kind of selection "
-"F-Spot will allow you to draw by choosing the appropriate size from the "
-"constraint drop down. See the <xref linkend=\"edit-remove-red-eye\"/> below "
-"for details on making a selection on your photo."
-msgstr ""
-"Recortar una imagen es una forma excelente de mejorar la calidad de la "
-"fotografía mejorando cómo se enmarca. Una foto se recorta seleccionando la "
-"parte de la foto que quiere mantener. Si quiere que su foto tenga "
-"exactamente las misma dimensiones necesarias para cierto tamaño de "
-"impresión, puede limitar el tipo de selección que F-Spot le permitirá elegir "
-"escogiendo el tamaño adecuado desde el menú desplegable limitado. Debajo "
-"verá el <xref linkend=\"edit-remove-red-eye\"/> para obtener más detalles "
-"acerca de cómo hacer una selección en su foto."
-
-#: C/f-spot.xml:160(title)
-msgid "Crop tool"
-msgstr "Herramienta de recorte"
-
-#: C/f-spot.xml:167(para) C/f-spot.xml:368(para)
-msgid ""
-"Once you have made your crop selection, you must click the crop button "
-"beneath the image to finalize the crop. If you are working with the original "
-"photo, cropping creates a new version your photo."
-msgstr ""
-"Una vez que tenga hecha su selección de recorte, debe pulsar el botón de "
-"recorte debajo de la imagen para finalizar el recorte. Si está trabajando "
-"con la foto original, al recortar se creará una nueva versión de su foto."
-
-#: C/f-spot.xml:175(title)
-msgid "Straighten"
-msgstr "Enderezar"
-
-#: C/f-spot.xml:177(para)
-msgid ""
-"Straighten effect is a tool to level a photo, quite helpful for landscapes "
-"taken without a tripod, when (imaginary) line of horizon is not at 0°. This "
-"tool rotates an image by a specified angle and automagically crops the "
-"resulted image, so that you always see a perfect rectangle."
-msgstr ""
-"Enderezar efecto es una herramienta para nivelar una foto, muy útil para los "
-"paisajes fotografiados sin trípode, cuando la línea (imaginaria) horizontal "
-"no es 0°. Esta herramienta rota una imagen un ángulo especificado y recorta "
-"la imagen resultante automágicamente, de modo que siempre verá un rectángulo "
-"perfecto."
-
-#: C/f-spot.xml:184(title)
-msgid "Straighten tool"
-msgstr "Herramienta para enderezar"
-
-#: C/f-spot.xml:194(title)
-msgid "Adjust Colors"
-msgstr "Ajustar los colores"
-
-#: C/f-spot.xml:196(para)
-msgid ""
-"To adjust the brightness, contrast, and colors of a photo, first click the "
-"<guibutton>Adjust the photo colors</guibutton> icon to open the adjustment "
-"dialog. Change then some settings and save them with <guibutton>OK</"
-"guibutton>."
-msgstr ""
-"Para ajustar el brillo, el contraste y los colores de una foto, primero "
-"pulse el icono <guibutton>Ajustar los colores de la foto</guibutton> para "
-"abrir el diálogo de ajuste. Después cambie algunos ajustes y guárdelos con "
-"el botón <guibutton>Aceptar</guibutton>."
-
-#: C/f-spot.xml:203(title)
-msgid "Adjust Colors tool"
-msgstr "Herramienta de ajuste de colores"
-
-#: C/f-spot.xml:213(title) C/f-spot.xml:221(title)
-msgid "AutoColor"
-msgstr "Color automático"
-
-#: C/f-spot.xml:215(para)
-msgid ""
-"This effect automatically adjusts color levels to make a pretty balanced "
-"picture color-wise. It serves best for pictures taken with automatical white "
-"balance, when camera didn't manage to do the job well."
-msgstr ""
-"Este efecto ajusta los niveles de color automáticamente para conseguir una "
-"foto correctamente balanceada. Funciona mejor para fotografías tomadas con "
-"un balance automático de blancos, cuando la cámara no hizo bien la toma."
-
-#: C/f-spot.xml:231(title)
-msgid "Desaturate"
-msgstr "Desaturar"
-
-#: C/f-spot.xml:233(para)
-msgid ""
-"To make a colorful photo a black and white one, open a photo of choice and "
-"press <guibutton>Desaturate</guibutton> button."
-msgstr ""
-"Para pasar una foto de color a blanco y negro, abra una foto de su elección "
-"y pulse el botón <guibutton>Desaturar</guibutton> botón."
-
-#: C/f-spot.xml:238(title) C/f-spot.xml:255(title)
-msgid "Desaturation tool"
-msgstr "Herramienta de desaturación"
-
-#: C/f-spot.xml:248(title)
-msgid "Sepia"
-msgstr "Sepia"
-
-#: C/f-spot.xml:250(para)
-msgid ""
-"To make a colorful photo look like an old-style picture in sepia tones, open "
-"a photo of choice and press <guibutton>Sepia</guibutton> button."
-msgstr ""
-"Para hacer que una foto llena de color pareca una foto de estilo antiguo en "
-"tonos sepia, abra una foto a su elección y pulse el botón <guibutton>Sepia</"
-"guibutton>."
-
-#: C/f-spot.xml:265(title)
-msgid "Remove Red-Eye"
-msgstr "Borrar ojos rojos."
-
-#: C/f-spot.xml:267(para)
-msgid ""
-"To remove redeye from a photo, you need to select a zone containing the "
-"eyes. You may want to zoom in on the image to accurately select the eyes in "
-"the photo. You should be able to correct both eyes on the same person in one "
-"shot, or even the eyes from multiple people at once. If this doesn't work "
-"for you, or the selected zone contains some vivid red parts (lips, ...) "
-"you'll probably have to correct one red eye at a time."
-msgstr ""
-"Para quitar los ojos rojos de una foto debe seleccionar una zona que "
-"contenga los ojos. Quizá quiera ampliar la imagen para seleccionar con "
-"precisión los ojos en la foto. Debería ser capaz de corregir los dos ojos "
-"dela misma persona de una sola vez, o incluso los ojos de varias personas de "
-"una sola vez. Si esto no funciona, al selecionar la zona que contiene alguna "
-"parte roja (labios, etc.) probablemente tendrá que correjir un ojo rojo por "
-"vez."
-
-#: C/f-spot.xml:275(para)
-msgid ""
-"To make your selection, click one corner of the rectangle that will be your "
-"selection, and drag your mouse to the diagonal corner and release it. You "
-"can resize your selection by dragging its edges, and you can move it by "
-"clicking in the middle of it and dragging it to where you want it."
-msgstr ""
-"Al hacer su selección, pulse en la esquina del rectangulo que será su "
-"selección y arrastre con el ratón a la esquina en diagonal y suéltelo. Puede "
-"redimensionar su selección arrastrándo los bordes y puede moverla pulsando "
-"en el centro de ella y arrastrándola a donde quiera que esté."
-
-#: C/f-spot.xml:281(para)
-msgid ""
-"Once you have selected a zone, you can remove the red from it by clicking "
-"the red-eye button beneath the photo."
-msgstr ""
-"Una vez que haya seleccionado una zona, puede eliminar el rojo de ella "
-"pulsando el botón de ojos rojos debajo de la foto."
-
-#: C/f-spot.xml:286(title)
-msgid "Red-Eye tool"
-msgstr "Herramianta de ojos rojos"
-
-#: C/f-spot.xml:294(para)
-msgid ""
-"You can change the threshold for redeyes detection by changing the gconf key "
-"<filename class=\"directory\">/apps/f-spot/edit/redeye_threshold</filename>."
-msgstr ""
-"Puede cambiar el umbral de la detección de los ojos rojos cambiando la la "
-"clave de gconf <filename class=\"directory\">/apps/f-spot/edit/"
-"redeye_threshold</filename>."
-
-#: C/f-spot.xml:303(title)
-msgid "Soft Focus"
-msgstr "Enfoque suave"
-
-#: C/f-spot.xml:305(para)
-msgid ""
-"In photography sharpening one region of a picture, while blurring all the "
-"rest, is a way to make an emphasis and grab attention. It is achieved by "
-"using a lens that allows shooting with a short distance in front of and "
-"beyond the subject that appears to be in focus. Soft focus effect is a way "
-"to emulate such a lens."
-msgstr ""
-"En fotografía, al hacer más nítida una región de una imagen mientras se "
-"difumina el resto, es una manera de crear énfasis y captar la atención. Este "
-"objetivo se consigue utilizando una lente que permita disparar a una corta "
-"distancia delante de y más allá del tema central. El efecto de enfoque suave "
-"es una forma de emular esta lente."
-
-#: C/f-spot.xml:313(title)
-msgid "Soft Focus tool"
-msgstr "Herramienta de enfoque suave"
-
-#: C/f-spot.xml:320(para)
-msgid ""
-"Click to choose central point of the area you want to be in focus and adjust "
-"amount of blurring, then click <guibutton>OK</guibutton>."
-msgstr ""
-"Pulse para elegir el punto central de la zona en la que quiere que esté "
-"enfocada y ajuste el desenfoque, después pulse <guibutton>Aceptar</guibutton>"
-
-#: C/f-spot.xml:327(title)
-msgid "Sharpen"
-msgstr "Nitidez"
-
-#: C/f-spot.xml:329(para)
-msgid ""
-"Out-of-focus photographs and most digitized images often need a sharpness "
-"correction. The Unsharp Mask effect sharpens edges of the elements without "
-"increasing noise or blemish. To sharpen a photo choose "
-"<menuchoice><guimenu>Edit</guimenu><guimenuitem>Sharpen...</guimenuitem></"
-"menuchoice> and specify the following values:"
-msgstr ""
-"Las fotografías mal enfocadas y la mayoría de las imaganes digitalizadas "
-"suelen de necesitar correción de nitidez. El efecto de la máscara de "
-"definición enfoca los bordes de los elementos sin aumentar el ruido o las "
-"manchas. Para enfocar una fotografía, elija <menuchoice><guimenu>Editar</"
-"guimenu><guimenuitem>Enfoque...</guimenuitem></menuchoice> y especifique los "
-"siguientes valores:"
-
-#: C/f-spot.xml:340(para)
-msgid ""
-"<parameter class=\"option\">Amount</parameter> — strength of sharpening."
-msgstr ""
-"<parameter class=\"option\">Cantidad</parameter>: cantidad de la nitidez."
-
-#: C/f-spot.xml:345(para)
-msgid ""
-"<parameter class=\"option\">Radius</parameter> — how many pixels on either "
-"side of an edge will be affected by sharpening. High resolution images allow "
-"higher radius."
-msgstr ""
-"<parameter class=\"option\">Radio</parameter>: cuántos píxeles a ambos lados "
-"de un borde se verán afectados por la nitidez. Las imágenes de alta "
-"resolución permiten un mayor radio."
-
-#: C/f-spot.xml:352(para)
-msgid ""
-"<parameter class=\"option\">Threshold</parameter> — the minimum difference "
-"in pixel values that indicates an edge where sharpen must be applied. This "
-"helps avoiding creation of blemishes in face, sky or water surface."
-msgstr ""
-"<parameter class=\"option\">Umbral</parameter>: la mínima diferencia en "
-"valores de píxeles que indica un borde donde se debe aplicar el enfoque. "
-"Esto ayuda a evitar la creación de manchas en la cara, el cielo o la "
-"superficie del agua."
-
-#: C/f-spot.xml:362(title)
-msgid "Describe"
-msgstr "Descripción"
-
-#: C/f-spot.xml:364(para)
-msgid ""
-"You can also enter a description of the image by clicking on the text entry "
-"box below the image and typing."
-msgstr ""
-"También puede introducir una descripción de la imagen pulsando en la caja de "
-"texto debajo de la imagen y tecleándola."
-
-#: C/f-spot.xml:376(title)
-msgid "Adjust Time"
-msgstr "Ajuste de tiempo"
-
-#: C/f-spot.xml:378(para)
-msgid ""
-"In both 'browse' or 'edit' modes, you can adjust the time of one or multiple "
-"pictures (<menuchoice><guimenu>Edit</guimenu><guimenuitem>Adjust Time</"
-"guimenuitem></menuchoice>). Adjusting the time of multiple pictures at once "
-"helps you shift all an import roll if, e.g. the time on your camera is badly "
-"set or if you forgot to change it according to DST."
-msgstr ""
-"Tanto en el modo «examinar» como en el modo «editar» puede ajustar el tiempo "
-"de una o varias imágenes (<menuchoice><guimenu>Editar</"
-"guimenu><guimenuitem>Ajustar la hora</guimenuitem></menuchoice>). Ajustar la "
-"hora de varias imágenes a la vez le ayuda a pasar todo un carrete de "
-"importación si, por ejemplo, la hora de su cámara está mal establecida o si "
-"se olvidó de cambiarla según la DST."
-
-#: C/f-spot.xml:390(title)
-msgid "Tag"
-msgstr "Etiqueta"
-
-#: C/f-spot.xml:391(para)
-msgid ""
-"F-Spot enables you to organize and enjoy your photos by associating them "
-"with various user-customizable tags. A tag is a merely a label. F-Spot comes "
-"with default tags to get you started; you are free to change them and add "
-"new ones. For example, if you want to create a tag for specific event, you "
-"can create a new tag named after that event under the Events tag."
-msgstr ""
-"F-Spot le permite organizar y disfrutar de sus fotos asociándolas con las "
-"diversas etiquetas personalizables. De forma predeterminada F-Spot viene con "
-"algunas etiquetas para iniciarle en ello; es libre de cambiarlas y añadir "
-"unas nuevas. Por ejemplo, si quiere crear una etiqueta para especificar un "
-"evento, puede crear una nueva etiqueta con el nombre de ese evento bajo la "
-"etiqueta Eventos."
-
-#: C/f-spot.xml:398(para)
-msgid "There are many ways to tag photos:"
-msgstr "Hay muchas formas de etiquetar las fotos:"
-
-#: C/f-spot.xml:403(para)
-msgid "drag and drop the photo(s) onto the tag"
-msgstr "arrastrar y soltar la foto(s) en la etiqueta"
-
-#: C/f-spot.xml:408(para)
-msgid "drag and drop the tag onto the photo(s)"
-msgstr "arrastrar y soltar la etiquetas en la foto(s)"
-
-#: C/f-spot.xml:413(para)
-msgid "via the photo's right-click menu"
-msgstr "pulsando el botón derecho sobre una foto y usando el menú"
-
-#: C/f-spot.xml:418(para)
-msgid "via the Tags and Edit menus"
-msgstr "a través de las etiquetas y los menús de edición"
-
-#: C/f-spot.xml:423(para)
-msgid ""
-"by typing them in. Press <keycap>t</keycap> to pop up the tag entry bar. "
-"Here you can enter the tags, separated by commas."
-msgstr ""
-"escribiéndolos. Pulse <keycap>t</keycap> para mostrar la barra de entrada de "
-"etiquetas. Aquí puede introducir las etiquetas, separándolas por comas."
-
-#: C/f-spot.xml:427(para)
-msgid ""
-"You can also use auto-completion in this entry bar: After entering the "
-"beginning of a tag name, press <keycap>Tab</keycap> to see the first "
-"possible completion. You can cycle between other possible completions by "
-"pressing <keycap>Tab</keycap> again, and backwards with <keycombo action="
-"\"simul\"><keycap>Shift</keycap><keycap>Tab</keycap></keycombo>. To confirm "
-"the suggested completion and enter a new tag, press <keycap>,</keycap>. By "
-"pressing <keycap>Enter</keycap> you leave the tag entry bar, possibly "
-"confirming the current completion. To abort the auto completion, just keep "
-"on typing."
-msgstr ""
-"También puede usar el autocompletado en esta barra de entrada: después de "
-"introducir el comienzo del nombre de una etiqueta, pulse <keycap>Tab</"
-"keycap> para ver su primer posible completado. Puede alternar entre los "
-"otros posibles completados pulsando <keycap>Tab</keycap> de nuevo, e ir "
-"hacia atrás pulsando <keycombo action=\"simul\"><keycap>Mayús</"
-"keycap><keycap>Tab</keycap></keycombo>. Para confirmar el completado "
-"sugerido e introducir la etiqueta pulse <keycap>,</keycap>. Pulsando "
-"<keycap>Intro</keycap> dejará la barra de entrada de etiquetas, confirmando "
-"el completado actual. Para cancelar el autocompletado, simplemente siga "
-"tecleando."
-
-#: C/f-spot.xml:441(para)
-msgid ""
-"The first photo you associate with a tag will be used for that tag's icon. "
-"You can always edit a tag's name, parent tag, and icon by right clicking on "
-"it and choosing <guilabel>Edit tag</guilabel>."
-msgstr ""
-"La primera foto que asociade con una etiqueta se usará para el icono de esa "
-"etiqueta. Siempre puede editar el nombre de la etiqueta, la etiqueta padre y "
-"el icono pulsando con el botón derecho del ratón sobre ella y escogiendo "
-"<guilabel>Editar etiqueta</guilabel>."
-
-#: C/f-spot.xml:446(para)
-msgid ""
-"You can change a tag's parent by dragging and dropping it where you like. "
-"Also, you can edit the name of a tag by selecting it and pressing "
-"<keycap>F2</keycap>. Lastly, if you have the tag tree widget focused (e.g. "
-"you just clicked on a tag), you can start typing the name of a tag, and all "
-"the expanded tags in the list will be searched and you'll jump to any "
-"matching ones."
-msgstr ""
-"Puede cambiar el padre de una etiqueta arrastrándo y soltándolo donde "
-"quiera. También puede editar el nombre de una etiqueta selecionándola y "
-"pulsando <keycap>F2</keycap>. Por último, si el árbol de etiquetas tiene el "
-"foco (ej. acaba de pulsar sobre una etiqueta), puede comenzar a escribir el "
-"nombre de una etiqueta y se buscará en todas las etiquetas expandidas en la "
-"lista pudiéndo saltar a cualquiera de las coincidentes."
-
-#: C/f-spot.xml:455(para)
-msgid ""
-"You can also change size of tag icons in the sidebar or even make tag icons "
-"invisible by selecting preferred option from <menuchoice><guimenu>View</"
-"guimenu><guimenuitem>Tag Icons</guimenuitem></menuchoice> menu."
-msgstr ""
-"También puede cambiar el tamaño de los iconos de la barra lateral o incluso "
-"hacer los iconos de las etiquetas invisibles seleccionando la opción que "
-"prefiera en el menú <menuchoice><guimenu>Ver</guimenu><guimenuitem>Etiquetar "
-"iconos</guimenuitem></menuchoice>."
-
-#: C/f-spot.xml:463(para)
-msgid ""
-"F-Spot can write tags as metadata fields into JPEG files. Tags for various "
-"RAW files, PNG, TIFF, and others are written to F-Spot's database. You will "
-"have to re-tag these files if you re-import your collection."
-msgstr ""
-"F-Spot puede escribir etiquetas como campos de metadatos en archivos JPEG. "
-"Las etiquetas para varios archivos RAW, PNG, TIFF y otros se escriben en "
-"base de datos de F-Spot. Tendrá que volver a etiquetar estos archivos si "
-"vuelve a importar su colección."
-
-#: C/f-spot.xml:474(title)
-msgid "Enjoying your photos"
-msgstr "Disfrute de sus fotos"
-
-#: C/f-spot.xml:476(title)
-msgid "Browse"
-msgstr "Examinar"
-
-#: C/f-spot.xml:477(para)
-msgid ""
-"You can use the slider widget to browse your photos by month or by "
-"directory. To change this setting, go to <menuchoice><guimenu>View</"
-"guimenu><guimenuitem>Arranged By</guimenuitem></menuchoice>."
-msgstr ""
-"Puede utilizar el deslizador para examinar sus fotos por mes o por "
-"directorio. Para cambiar este ajuste, vaya a <menuchoice><guimenu>Ver</"
-"guimenu><guimenuitem>Ordenar por</guimenuitem></menuchoice>"
-
-#: C/f-spot.xml:485(title)
-msgid "Search"
-msgstr "Buscar"
-
-#: C/f-spot.xml:487(para)
-msgid "F-Spot uses search filters to help you better define search criteria."
-msgstr ""
-"F-Spot usa filtros de búsquedas que le ayudarán a definir mejor los "
-"criterios de búsqueda."
-
-#: C/f-spot.xml:492(title)
-msgid "Tags"
-msgstr "Etiquetas"
-
-#: C/f-spot.xml:494(para)
-msgid ""
-"You can start a search by double clicking or activating a tag from the tag "
-"list. Alternatively, you can show the find bar with "
-"<menuchoice><guimenu>Find</guimenu><guimenuitem>Show Find Bar</guimenuitem></"
-"menuchoice>. With the find bar shown, you can drag tags from the tag view to "
-"the find bar."
-msgstr ""
-"Puede inicar una búsqueda pulsando dos veces o activando una etiqueta desde "
-"la lista de etiquetas. Alternativamente puede mostrar la barra de búsqueda "
-"con <menuchoice><guimenu>Buscar</guimenu><guimenuitem>Mostrar barra de "
-"búsqueda</guimenuitem></menuchoice>. Puede arrastrar etiquetas a la barra de "
-"búsqueda desde la vista de etiquetas."
-
-#: C/f-spot.xml:500(para)
-msgid ""
-"To find photos that are tagged with both of two tags, activate the first in "
-"the tag view or drag it onto the find bar, then drag the second tag and drop "
-"it on top of the first. You can also right click on the second tag in the "
-"tag view, or use the <guimenu>Find</guimenu> menu, and choose "
-"<guimenuitem>Find With...</guimenuitem> and select the first tag (or group "
-"of tags)."
-msgstr ""
-"Para buscar fotos que están marcadas con dos etiquetas, active la primera en "
-"la vista de etiqueta o arrástrela a la barra de búsqueda, a continuación "
-"arrastre la segunda etiqueta y suéltela sobre la primera. También puede "
-"pulsar con el botón derecho del ratón sobre la segunda etiqueta en la vista "
-"de etiqueta o usar el menú <guimenu>Buscar</guimenu> y elegir elegir "
-"<guimenuitem>Buscar con...</guimenuitem> y seleccionar la primera etiqueta "
-"(o grupo de de etiquetas)."
-
-#: C/f-spot.xml:507(para)
-msgid ""
-"You can drag a tag icon around on the find bar to change from finding it and "
-"another tag to finding it or another tag."
-msgstr ""
-"Puede arrastrar un icono de etiqueta en la barra de búsqueda para cambiar "
-"entre buscarla «y» buscar otra etiqueta o buscarla «o» buscar otra etiqueta."
-
-#: C/f-spot.xml:511(para)
-msgid ""
-"You can search for photos that do not have a particular tag by double-"
-"clicking on a tag in the find bar. Alternatively, you can right-click a tag "
-"in the find bar and select <guimenuitem>Exclude</guimenuitem>."
-msgstr ""
-"Puede buscar fotos que no tienen una etiqueta en particular pulsando dos "
-"veces sobre una etiqueta en la barra de búsqueda. Alternativamente puede "
-"pulsar con el botón derecho sobre una etiqueta en la barra de búsqueda y "
-"seleccionar <guimenuitem>Excluir</guimenuitem>"
-
-#: C/f-spot.xml:516(para)
-msgid ""
-"To remove a tag from the search, drag it away from the find bar, or right "
-"click and select <guimenuitem>Remove</guimenuitem>."
-msgstr ""
-"Para quitar una etiqueta de la búsqueda, arrástrela desde la barra de "
-"búsqueda o pulse con el botón derecho del ratón y seleccione "
-"<guimenuitem>Eliminar</guimenuitem>."
-
-#: C/f-spot.xml:520(para)
-msgid ""
-"By default, photos tagged <emphasis>Hidden</emphasis> will not be shown. You "
-"must explicitly include the <emphasis>Hidden</emphasis> tag in your search "
-"to show such photos."
-msgstr ""
-"De forma predeterminada, las fotos etiquetadas con <emphasis>Oculto</"
-"emphasis> no se mostrarán. Debe incluir explícitamente la etiqueta "
-"<emphasis>Oculto</emphasis> en sus búsquedas para mostrar esas fotos."
-
-#: C/f-spot.xml:528(title)
-msgid "Import Rolls"
-msgstr "Importar carretes"
-
-#: C/f-spot.xml:529(para)
-msgid ""
-"F-Spot remembers what pictures were imported every now and then. Use "
-"<menuchoice><guimenu>Find</guimenu><guisubmenu>Import Roll</"
-"guisubmenu><guimenuitem>Last import roll</guimenuitem></menuchoice> to limit "
-"search to last importing session or use <menuchoice><guimenu>Find</"
-"guimenu><guisubmenu>Import Roll</guisubmenu><guimenuitem>Select Import "
-"Rolls...</guimenuitem></menuchoice> to make a finer selection of imported "
-"photos:"
-msgstr ""
-"F-Spot recuerda qué imágenes se importaron y en qué momento. Use "
-"<menuchoice><guimenu>Buscar</guimenu><guisubmenu>Importar carrete</"
-"guisubmenu><guimenuitem>Último carrete importado</guimenuitem></menuchoice> "
-"para limitar una búsqueda a la última sesión de importación o use "
-"<menuchoice><guimenu>Buscar</guimenu><guisubmenu>Importar carrete</"
-"guisubmenu><guimenuitem>Seleccionar carretes que importar…</guimenuitem></"
-"menuchoice> para realizar una selección más ajustada de las fotos importadas:"
-
-#: C/f-spot.xml:539(para)
-msgid ""
-"<parameter class=\"option\">At</parameter> — to select photos from a "
-"particular importing session"
-msgstr ""
-"<parameter class=\"option\">En</parameter>; para seleccionar fotos de una "
-"sesión de importación en particular."
-
-#: C/f-spot.xml:544(para)
-msgid ""
-"<parameter class=\"option\">After</parameter> — to select all photos "
-"imported begining with a particular importing session"
-msgstr ""
-"<parameter class=\"option\">Después</parameter>; para seleccionar todas las "
-"fotos importadas comenzando desde una sesión de importación en particular."
-
-#: C/f-spot.xml:549(para)
-msgid ""
-"<parameter class=\"option\">Between</parameter> — to select all photos "
-"imported between two particular importing sessions"
-msgstr ""
-"<parameter class=\"option\">Entre</parameter>; para seleccionar todas la "
-"fotos importadas entre dos sesiones de importación particulares."
-
-#: C/f-spot.xml:554(para)
-msgid ""
-"Every time you change settings of the filter, the amount of selected photos "
-"will appear in the bottom part of the dialog."
-msgstr ""
-"Cada vez que cambie la configuración del filtro, aparecerá la cantidad de "
-"fotos seleccionadas en la parte inferior del cuadro de diálogo."
-
-#: C/f-spot.xml:558(para)
-msgid ""
-"When you apply Import Roll filter, in the Find bar you will see "
-"<guilabel>Find: Import Roll</guilabel>. Now you can add some other filter to "
-"finetune your selection."
-msgstr ""
-"Cuando aplica el filtro Importar carrete, en la barra de búsqueda verá "
-"<guilabel>Buscar: Importar carrete</guilabel>. Ahora puede añadir otro "
-"filtro para mejorar su selección."
-
-#: C/f-spot.xml:563(para)
-msgid ""
-"If you don't need the Import Roll filter anymore, choose "
-"<menuchoice><guimenu>Find</guimenu><guisubmenu>Import Roll</"
-"guisubmenu><guimenuitem>Clear roll filter</guimenuitem></menuchoice> to "
-"remove Import Roll from search criteria. You can also click the close button "
-"(<guibutton>X</guibutton>) of the search bar to discard all the current "
-"search options."
-msgstr ""
-"Si ya no necesita el filtro Importar carrete, elija "
-"<menuchoice><guimenu>Buscar</guimenu><guisubmenu>Importar carrete</"
-"guisubmenu><guimenuitem>Limpiar el filtro de carrete</guimenuitem></"
-"menuchoice> para quitar la importación de carrete desde el criterio de "
-"búsqueda. También puede pulsar el botón cerrar (<guibutton>X</guibutton>) de "
-"la barra de búsqueda para descartar todas las opciones de búsqueda actuales."
-
-#: C/f-spot.xml:572(para)
-msgid ""
-"The number of displayed rolls in the dialog is defined by the gconf key "
-"<filename class=\"directory\">/apps/f-spot/import/gui_roll_history</"
-"filename>. Default value is 10."
-msgstr ""
-"El número de carretes mostrados en el diálogo está definido por la clave de "
-"gconf <filename class=\"directory\">/apps/f-spot/import/gui_roll_history</"
-"filename>. El valor predeterminado es 10."
-
-#: C/f-spot.xml:581(title)
-msgid "Type-to-find"
-msgstr "Escriba para buscar"
-
-#: C/f-spot.xml:582(para)
-msgid ""
-"There is also a type-to-find entry. Press <keycap>/</keycap> to open it. It "
-"cannot be used at the same time as the find bar. You can type queries such "
-"as \"TagA and (TagB or (TagC and TagD))\". At any point, if F-Spot "
-"recognizes what you've typed as a valid query, it will update your search. "
-"The <emphasis>not</emphasis> operator is not yet supported."
-msgstr ""
-"También existe una entrada escribir-para-buscar. Pulse <keycap>/</keycap> "
-"para abrirla. No se puede usar junto con la barra de búsqueda. Puede "
-"escribir consultas tales como «EtiquetaA y (EtiquetaB o (EtiquetaC y "
-"EtiquetaD))». En cualquier punto, si F-Spot reconoce lo que ha tecleado como "
-"una consulta válida, actualizará su búsqueda. El operador <emphasis>no</"
-"emphasis> aún no está soportado."
-
-#: C/f-spot.xml:590(para)
-msgid ""
-"This function will also search for the typed text into photos comments and "
-"filename."
-msgstr ""
-"Esta función también buscará por el texto introducido en los comentarios y "
-"nombres de archivo de las fotos."
-
-#: C/f-spot.xml:597(title)
-msgid "Fullscreen Mode and Slideshows"
-msgstr "Pantalla completa y modo diapositivas"
-
-#: C/f-spot.xml:598(para)
-msgid ""
-"For fewer distractions and larger display, you can view your photos in full "
-"screen mode. You control when to show the next photo or to return to the "
-"previous. Enter fullscreen mode by pressing <keycap>F11</keycap> at any time "
-"or by pressing the button in the toolbar."
-msgstr ""
-"Para conseguir menos distracciones y una mayor visualización, puede ver sus "
-"fotos en el modo a pantalla completa. Controla cuándo mostrar la siguiente "
-"foto o retroceder a la anterior. Entre en el modo a pantalla completa "
-"pulsando <keycap>F11</keycap> en cualquier momento o pulsando el botón en la "
-"barra de herramientas."
-
-#: C/f-spot.xml:605(title)
-msgid "FullScreen"
-msgstr "Pantalla completa"
-
-#: C/f-spot.xml:612(para)
-msgid ""
-"In slideshow mode, you can sit back and view your photos as they are "
-"presented to you. You can start a slideshow by pressing the button on the "
-"toolbar."
-msgstr ""
-"En el modo de diapositiva, puede relajarse y ver sus fotos según se le van "
-"mostrando. Podrá iniciar las diapositivas pulsando el botón en la barra de "
-"herramientas."
-
-#: C/f-spot.xml:618(title)
-msgid "SlideShow"
-msgstr "Diapositivas"
-
-#: C/f-spot.xml:629(title)
-msgid "Sharing your photos"
-msgstr "Compartir sus fotos"
-
-#: C/f-spot.xml:632(para)
-msgid ""
-"There are many ways to share your photos using F-Spot. All of the following "
-"methods will only share the photos you have selected when you run them."
-msgstr ""
-"Existen muchas maneras de compartir sus fotos usando F-Spot. Todas los "
-"métodos siquientes sólo compartirán las fotos que haya seleccionado al "
-"ejecutarlo."
-
-#: C/f-spot.xml:639(title)
-msgid "E-mail"
-msgstr "Correo-e"
-
-#: C/f-spot.xml:640(para)
-msgid ""
-"E-mail your photos directly from F-Spot with the <menuchoice><guimenu>File</"
-"guimenu><guimenuitem>Send Mail</guimenuitem></menuchoice> menu."
-msgstr ""
-"Envie sus fotos directamente desde F-Spot con el menú "
-"<menuchoice><guimenu>Archivo</guimenu><guimenuitem>Enviar al correo "
-"electrónico</guimenuitem></menuchoice>."
-
-#: C/f-spot.xml:646(title)
-msgid "Note 1"
-msgstr "Nota 1"
-
-#: C/f-spot.xml:647(para)
-msgid ""
-"The email program used for this is defined at the GNOME level. You can "
-"change the default e-mailer for your user using the <application>Preferred "
-"Applications</application> tool in <menuchoice><guimenu>System</"
-"guimenu><guisubmenu>Preferences</guisubmenu></menuchoice>."
-msgstr ""
-"El programa de correo utilizado para esto es el definido por GNOME. Puede "
-"cambiar el programa predeterminado usando la herramienta "
-"<application>Aplicaciones preferidas</application> en "
-"<menuchoice><guimenu>Sistema</guimenu><guisubmenu>Preferencias</guisubmenu></"
-"menuchoice>"
-
-#: C/f-spot.xml:656(title)
-msgid "Note 2"
-msgstr "Nota 2"
-
-#: C/f-spot.xml:657(para)
-msgid ""
-"If some of the photos you'd like to send by email are in a format that F-"
-"Spot can't write (e.g. RAW images), the size selection dialog will become "
-"insensitive and the originals will be sent."
-msgstr ""
-"Si algunas de las fotos que desea enviar por correo electrónico están en un "
-"formato que F-Spot no puede escribir (ej. imágenes RAW), el tamaño del "
-"dialogo de selección se bloqueará y se enviarán los originales."
-
-#: C/f-spot.xml:664(para)
-msgid ""
-"If you're sending resized pictures, F-Spot will keep the modified versions "
-"somewhere in the <filename class=\"directory\">/tmp</filename> directory for "
-"30 seconds. It's not an issue with evolution, which makes it's own local "
-"copy of the attachments, but could be a bit shorter if you're using "
-"Thunderbird. You can change the delay by editing the gconf key <filename "
-"class=\"directory\">/apps/f-spot/export/email/delete_timeout_seconds</"
-"filename>."
-msgstr ""
-"Si está enviando fotos redimensionadas, F-Spot guardará las versiones "
-"modificadas en el directorio <filename class=\"directory\">/tmp</filename> "
-"durante 30 segundos. No es una cuestión de Evolution, que hace su propia "
-"copia local de los archivos adjuntos, pero podría ser un poco más corta si "
-"está utilizando Thunderbird. Puede cambiar el retraso de editando la clave "
-"de gconf <filename class=\"directory\">/apps/f-spot/export/email/"
-"delete_timeout_seconds</filename>."
-
-#: C/f-spot.xml:676(title)
-msgid "Print"
-msgstr "Imprimir"
-
-#: C/f-spot.xml:677(para)
-msgid ""
-"Print your photos with the <menuchoice><guimenu>File</"
-"guimenu><guimenuitem>Print</guimenuitem></menuchoice> menu."
-msgstr ""
-"Imprima sus fotos con el menú <menuchoice><guimenu>Archivo</"
-"guimenu><guimenuitem>Imprimir</guimenuitem></menuchoice>."
-
-#: C/f-spot.xml:684(title)
-msgid "Burn to CD"
-msgstr "Grabar a un CD"
-
-#: C/f-spot.xml:685(para)
-msgid ""
-"Burn your photos to CD or DVD with the <menuchoice><guimenu>File</"
-"guimenu><guisubmenu>Export</guisubmenu><guimenuitem>Export to CD</"
-"guimenuitem></menuchoice> menu."
-msgstr ""
-"Grabe sus fotos a CD o DVD con el menú <menuchoice><guimenu>Archivo</"
-"guimenu><guisubmenu>Exportar</guisubmenu><guimenuitem>Exportar a CD</"
-"guimenuitem></menuchoice>."
-
-#: C/f-spot.xml:693(title)
-msgid "Generate a Website Gallery or Folder"
-msgstr "Generar una página web para Gallery o una carpeta"
-
-#: C/f-spot.xml:694(para)
-msgid ""
-"The <menuchoice><guimenu>File</guimenu><guimenuitem>Export</"
-"guimenuitem><guimenuitem>Export to Folder</guimenuitem></menuchoice> feature "
-"gives you three ways to export your images."
-msgstr ""
-"La característica <menuchoice><guimenu>Archivo</"
-"guimenu><guimenuitem>Exportar</guimenuitem><guimenuitem>Exportar a una "
-"carpeta</guimenuitem></menuchoice> le proporciona tres formas de exportar "
-"sus imágenes."
-
-#: C/f-spot.xml:702(para)
-msgid ""
-"<guilabel>Use Original</guilabel> exports your photos ready for use with "
-"Jakub Steiner's free <ulink url=\"http://jimmac.musichall.cz/original.php\"> "
-"Original Photo Gallery</ulink> software. If you are unsure about this "
-"option, it is probably not the right one for you."
-msgstr ""
-"<guilabel>Usar original</guilabel> exporta sus fotos listas para usarlas con "
-"el software <ulink url=\"http://jimmac.musichall.cz/original.php\">Original "
-"Photo Gallery</ulink> de Jakub Steiner. Si no está seguro acerca de esta "
-"opción, probablemente no es la más adecuada."
-
-#: C/f-spot.xml:710(para)
-msgid ""
-"<guilabel>Use static HTML files</guilabel> exports your photos to an "
-"interactive website, ready for you to upload."
-msgstr ""
-"<guilabel>Utiliza archivos HTML estáticos</guilabel> exporta sus fotografías "
-"a un sitio web interactivo, listo para que los cargue."
-
-#: C/f-spot.xml:716(para)
-msgid ""
-"<guilabel>Plain Files</guilabel> exports your images as files within "
-"directories, without putting them into a gallery."
-msgstr ""
-"<guilabel>Archivos planos</guilabel> exporta sus imágenes como archivos en "
-"directorios, sin ponerlas en una galería."
-
-#: C/f-spot.xml:725(title)
-msgid "Post to your online galleries"
-msgstr "Publique en sus galerías en internet"
-
-#: C/f-spot.xml:726(para)
-msgid ""
-"If you use Flickr, SmugMug, 23hq, Tabblo, Facebook, Zooomr or Picasa Web "
-"Album, you can post your files directly from F-Spot with the "
-"<menuchoice><guimenu>File</guimenu><guisubmenu>Export</guisubmenu></"
-"menuchoice> menu, choosing corresponding submenu item."
-msgstr ""
-"Si usa Flickr, SmugMug, 23hq. Tabblo, Facebook, Zoomr o los álbumes de "
-"Picasa Web, podrá enviar sus archivos directamente desde F-Spot con el menú "
-"<menuchoice><guimenu>Archivo</guimenu><guisubmenu>Exportar</guisubmenu></"
-"menuchoice>, eligiendo el elemento del submenú correspondiente."
-
-#: C/f-spot.xml:731(para)
-msgid ""
-"If you use the PHP software known as <ulink url=\"http://gallery.sourceforge."
-"net/\"> Gallery</ulink>, you can post your photos to your existing album "
-"with the <menuchoice><guimenu>File</guimenu><guimenuitem>Export</"
-"guimenuitem><guimenuitem>Export to Web Gallery</guimenuitem></menuchoice> "
-"menu. You must first enable the Remote module within your Gallery "
-"installation."
-msgstr ""
-"Si usa el software PHP conocido como <ulink url=\"http://gallery.sourceforge."
-"net/\">Gallery</ulink>, podrá enviar sus fotos a su álbum existente con el "
-"menú <menuchoice><guimenu>Archivo</guimenu><guimenuitem>Exportar</"
-"guimenuitem><guimenuitem>Exportar a Web Gallery</guimenuitem></menuchoice>."
-"Primero debe habilitar el módulo remoto de su instalación de Gallery."
-
-#: C/f-spot.xml:739(title)
-msgid "Note for Gallery 2.2 users"
-msgstr "Nota para los usuarios de Gallery 2.2"
-
-#: C/f-spot.xml:740(para)
-msgid "The Remote plugin for Gallery should be 1.0.8 or newer."
-msgstr "El complemento remoto para Gallery deberá ser 1.0.8 o posterior."
-
-#: C/f-spot.xml:744(para)
-msgid ""
-"<ulink url=\"http://pennave.sourceforge.net\">PennAve</ulink> is a Python "
-"web-application that directly uses F-Spot's database to present a dynamic "
-"gallery of your photos and tags."
-msgstr ""
-"<ulink url=\"http://pennave.sourceforge.net\">PennAve</ulink> es una "
-"aplicación web escrita en Python que usa directamente la base de datos de F-"
-"Spot para presentar una galería dinámica de sus fotos y etiquetas."
-
-#: C/f-spot.xml:749(para)
-msgid ""
-"<ulink url=\"http://www.conduit-project.org\">Conduit</ulink> is an "
-"application that can sync photos that have a particular tag with your Flickr "
-"or Picasa Web Album web storage."
-msgstr ""
-"Un <ulink url=\"http://www.conduit-project.org\">conducto</ulink> es una "
-"aplicación que puede sincronizar fotos con una etiqueta en particular con su "
-"cuenta Flickr o su álbum en Picasa Web."
-
-#: C/f-spot.xml:758(title)
-msgid "Color management"
-msgstr "Gestión de color"
-
-#: C/f-spot.xml:761(title)
-msgid "What's color management"
-msgstr "¿Qué es la gestión del color?"
-
-#: C/f-spot.xml:763(para)
-msgid ""
-"When you capture a photo and look at it on a display, it looks different "
-"than on a camera's preview display or on any other display. It will also "
-"look different when you print it. This is because every device has unique "
-"color reproduction capabilities."
-msgstr ""
-"Cuando captura una foto y la mira en una pantalla parece diferente que en la "
-"vista previa de la pantalla de la cámara o en otra pantalla. También parece "
-"diferente al imprimirla. Esto es porque cada dispositivo tiene unas "
-"capacidades de reproducción diferentes."
-
-#: C/f-spot.xml:770(para)
-msgid ""
-"Color management system (CMS) is a tool to achieve reliable color "
-"reproduction for both display and output (e.g. a printer). A CMS relies on "
-"color profiles to map original colors to the color that a device can "
-"reproduce so that colors will appear the same way everywhere — on a computer "
-"LCD monitor, on a print from your local photolab etc."
-msgstr ""
-"El sistema de gestión de color (CMS) es una herramienta para obtener una "
-"reproducción fidedigna tanto en la pantalla como en la salida (ej. una "
-"impresora). Un sistema de gestión de color se basa en perfiles de colores "
-"para mapear los colores originales al color que el dispositivo puede "
-"reproducir, de tal forma que los colores aparecen igual en todas partes; en "
-"un equipo con un monitor LCD, una impresora de su laboratorio fotográfico, "
-"etc."
-
-#: C/f-spot.xml:780(title)
-msgid "What's a color profile"
-msgstr "¿Qué es un perfil de color?"
-
-#: C/f-spot.xml:782(para)
-msgid ""
-"A color profile is a file with either .icc (thus its is often called an ICC "
-"profile) or .icm extension that describes how device's colors correspond to "
-"a universal description of colors."
-msgstr ""
-"Un perfil de color es un archivo con extensión .icc (generalmente llamado "
-"perfil de color ICC) o .icm que describe cómo se corresponden los colores de "
-"un dispositivo con una descripción universal de colores."
-
-#: C/f-spot.xml:788(para)
-msgid "There are several types of profiles:"
-msgstr "Existen diferentes tipos de perfiles:"
-
-#: C/f-spot.xml:794(para)
-msgid ""
-"Input device profile. It's profile for a camera or a profile that an "
-"application like XSane embeds into a scanned image."
-msgstr ""
-"Perfil del dispositivo de entrada. Es el perfil para una cámara o un perfil "
-"que una aplicación como XSane empotra en una imagen escaneada."
-
-#: C/f-spot.xml:800(para)
-msgid ""
-"Working space profile. It's a profile that describes color space in which "
-"all operations are done inside an application. Usually very wide gamut "
-"profiles like AdobeRGB1998 or ProPhotoRGB are used for that."
-msgstr ""
-"Perfil del área de trabajo. Es un perfil que describe el espacio de color en "
-"el que todas las operaciones de realizan dentro de una aplicación. "
-"Generalmente se usan una gran cantidad de perfiles como AdobeRGB1998 o "
-"ProPhotoRGB."
-
-#: C/f-spot.xml:807(para)
-msgid "Display profile. It's a profile for a monitor."
-msgstr "Perfil de pantalla. Es un perfil para un monitor."
-
-#: C/f-spot.xml:812(para)
-msgid "Output profile. This is usually a profile for you printer."
-msgstr "Perfil de salida. Éste es generalmente el perfil de su impresora."
-
-#: C/f-spot.xml:818(para)
-msgid ""
-"Currently F-Spot allows setting only display and output profiles. All color "
-"operations are done in sRGB color space."
-msgstr ""
-"Actualmente F-Spot permite ajustar solamente perfiles de mostrado y salida. "
-"Todas las operaciones de color se realizan en el espacio de color RGB."
-
-#: C/f-spot.xml:825(title)
-msgid "How to get my screen/printer color profile"
-msgstr "Cómo obtener mi perfil de color de pantalla o impresora"
-
-#: C/f-spot.xml:827(para)
-msgid "There are few ways to get a color profile."
-msgstr "Existen algunas formas de obtener un perfil de color."
-
-#: C/f-spot.xml:832(title)
-msgid "From CD or Internet"
-msgstr "Desde un CD o desde Internet"
-
-#: C/f-spot.xml:834(para)
-msgid ""
-"Many hardware manufacturers put color profiles into CD in the bundle. If you "
-"have one (from monitor or printer), you can use it. Or you can download it "
-"from the Internet (usually, from support section of the manufacturer's web "
-"site). Some camera manufacturers (Nikon, Canon) also provide ICC profiles."
-msgstr ""
-"Muchos fabricantes de hardware ponen sus perfiles de color en el CD de "
-"instalación. Si tiene uno (para su monitor o impresora) puede usarlo. O "
-"puede descargarlo desde Internet (generalmente desde la sección de soporte "
-"de la página web del fabricante). Algunos fabricantes de cámaras (Nikon, "
-"Canon) también proporcionan perfiles de color ICC."
-
-#: C/f-spot.xml:844(title)
-msgid "Calibrating and profiling"
-msgstr "Calibrado y perfilado"
-
-#: C/f-spot.xml:846(para)
-msgid ""
-"Best results can be achieved by calibrating and profiling devices with a "
-"measurement device. It is not so difficult, but it means that you need a "
-"spectrophotometer to do all measurements and create an ICC profile."
-msgstr ""
-"Se pueden conseguir los mejores resultados calibrando y perfilando los "
-"dispositivos con un dispositivo medidor. No es muy difícil pero significa "
-"que necesita un espectrofotómetro para realizar todas las mediciones y crear "
-"un perfil ICC."
-
-#: C/f-spot.xml:852(para)
-msgid ""
-"If you are on Windows or Mac OS X, you can use manufacturer's software "
-"coming with a spectrophotometer. On Linux you will have to use either <ulink "
-"url=\"http://www.argyllcms.com\">Argyll</ulink>, which is a set of versatile "
-"command line tools, or <ulink url=\"http://lprof.sourceforge.net/\">LProf</"
-"ulink>, which has a graphical user interface."
-msgstr ""
-"Si usa Windows o Mac OS X puede usar el sofware del fabricante que viene con "
-"un espectrofotómetro. En GNU/Linux tendrá que usar o <ulink url=\"http://www."
-"argyllcms.com\">Argyll</ulink>, que es un conjunto versátil de herramientas "
-"para la línea de comandos, o <ulink url=\"http://lprof.sourceforge.net/"
-"\">LProf<ulink url=\"http://www.argyllcms.com\"> que tiene una interfaz "
-"gráfica de usuario."
-
-#: C/f-spot.xml:860(para)
-msgid ""
-"Please refer to documentation of third party hardware and software vendors "
-"for details."
-msgstr ""
-"Consulte la documentación de los fabricantes de hardware y software de "
-"terceros para obtener más detalles."
-
-#: C/f-spot.xml:867(title)
-msgid "Embedding"
-msgstr "Empotrado"
-
-#: C/f-spot.xml:869(para)
-msgid ""
-"Image formats themselves (such as TIFF, JPEG, PNG...) may contain embedded "
-"color profiles. If color management is enabled, F-Spot looks for such "
-"embedded profiles and takes them into consideration."
-msgstr ""
-"Los formatos de imágenes (tales como TIFF, JPEG, PNG...) pueden contener "
-"perfiles de color empotrados. Si la gestión de color está activada, F-Spot "
-"busca esos perfiles de color empotrados y los tiene en consideración."
-
-#: C/f-spot.xml:878(title)
-msgid "How to use color management in F-Spot"
-msgstr "Cómo usar la gestión de color en F-Spot"
-
-#: C/f-spot.xml:880(para)
-msgid ""
-"Color management in F-Spot can use only RGB profiles at this time (and you "
-"can't see other profiles in the F-Spot)."
-msgstr ""
-"La gestión de color en F-Spot sólo puede usar perfiles RGB por el momento (u "
-"no puede ver otros perfiles en F-Spot)."
-
-#: C/f-spot.xml:887(para)
-#| msgid ""
-#| "Copy your color profiles into the <filename class=\"directory\">/usr/"
-#| "share/color/icc</filename> or <filename class=\"directory\">/usr/local/"
-#| "share./color/icc</filename> directory."
-msgid ""
-"Copy your color profiles into the <filename class=\"directory\">/usr/share/"
-"color/icc</filename> or <filename class=\"directory\">/usr/local/share/color/"
-"icc</filename> directory."
-msgstr ""
-"Copie su perfil de colores en el directorio <filename class=\"directory\">/"
-"usr/share/color/icc</filename> o <filename class=\"directory\">/usr/local/"
-"share/color/icc</filename>."
-
-#: C/f-spot.xml:895(para)
-msgid ""
-"Enable the color management with the <menuchoice><guimenu>Edit</"
-"guimenu><guimenuitem>Preferences</guimenuitem></menuchoice> menu."
-msgstr ""
-"Activar la gestión de color con el menú <menuchoice><guimenu>Editar</"
-"guimenu><guimenuitem>Preferencias</guimenuitem></menuchoice>."
-
-#: C/f-spot.xml:902(para)
-msgid ""
-"Select <guilabel>Display</guilabel> and <guilabel>Output</guilabel> profiles."
-msgstr ""
-"Seleccione <guilabel>Mostrar</guilabel> y <guilabel>Salida</guilabel> de "
-"perfiles."
-
-#: C/f-spot.xml:910(para)
-msgid ""
-"You can use <ulink url=\"http://burtonini.com/blog/computers/xicc\">xicc</"
-"ulink> to load ICC profile to display and use the loaded profile from F-"
-"Spot. Just mark the checkbox <guilabel>Try to use the system display "
-"profile</guilabel>."
-msgstr ""
-"Puede usar <ulink url=\"http://burtonini.com/blog/computers/xicc\">xicc</"
-"ulink> para cargar un perfil ICC para mostrar y usar el perfil cargado desde "
-"F-Spot. Simplemente marque la casilla de selección <guilabel>Intentar usar "
-"el perfil de visualización del sistema</guilabel>."
-
-#: C/f-spot.xml:921(title)
-msgid "Extend functionality"
-msgstr "Extender la funcionalidad"
-
-#: C/f-spot.xml:924(title)
-msgid "What extensions are"
-msgstr "¿Qué son las extensiones?"
-
-#: C/f-spot.xml:926(para)
-msgid ""
-"F-Spot extensions are means to add new functionality to the application. F-"
-"Spot supports two types of extension: exporters (which allow exporting "
-"photos to new web services or data storages) and tools (which allow new ways "
-"of color correction, duplicate photos finders etc.). Extensions are "
-"distributed in form of extension packages."
-msgstr ""
-"Las extensiones de F-Spot son formas de añadir nuevas funcionalidades a la "
-"aplicación. F-Spot soporta dos tipos de extensiones: exportadoras (que "
-"permiten exportar fotos a los nuevos servicios web o almacenamiento de "
-"datos) y herramientas (que permiten nuevas formas de corrección de color, "
-"búsqueda de duplicado de fotos, etc.). Las extensiones están distribuidas en "
-"forma de paquetes de extensión."
-
-#: C/f-spot.xml:933(para)
-msgid ""
-"In the best traditions of not reinventing the wheel extensions can use other "
-"extensions, which means that one extension cannot work, if another extension "
-"is not installed. This concept of dependance actually means that"
-msgstr ""
-"En la mejor tradición de no reinventar la rueda, las extensiones pueden "
-"utilizar otras extensiones, lo que significa que una extensión no puede "
-"trabajar si otra extensión no está instalada. Este concepto de dependencia "
-"realmente significa que"
-
-#: C/f-spot.xml:940(para)
-msgid ""
-"you cannot install an extension, if the extension it depends on, is not "
-"present in the system"
-msgstr ""
-"no puede instalar una extensión si la extensión depende de otra y no está en "
-"el sistema"
-
-#: C/f-spot.xml:945(para)
-msgid "you cannot remove an extension on which some other extension depends"
-msgstr "no puede eliminar una extensión de la que depende otra extensión"
-
-#: C/f-spot.xml:953(title)
-msgid "Managing extensions"
-msgstr "Gestionar las extensiones"
-
-#: C/f-spot.xml:955(para)
-msgid ""
-"To manage extensions choose <menuchoice><guimenu>Edit</"
-"guimenu><guimenuitem>Manage Extensions</guimenuitem></menuchoice> menu item."
-msgstr ""
-"Para gestionar extensiones elija el elmenento del menú "
-"<menuchoice><guimenu>Editar</guimenu><guimenuitem>Gestionar extensiones</"
-"guimenuitem></menuchoice>."
-
-#: C/f-spot.xml:961(title)
-msgid "Managing extension repositories"
-msgstr "Gestionar repositorios de extensiones"
-
-#: C/f-spot.xml:963(para)
-msgid ""
-"Simply put, repositories are extension storages. They can be either network "
-"or local. To add a new repository click Repositories button, choose type of "
-"the repository you are about to add and provide either URL or path. If the "
-"URL or path you specified doesn't contain a description (index) file for "
-"extensions, a warning message will pop up to tell you that."
-msgstr ""
-"En pocas palabras, los repositorios son almacenes de extensiones. Pueden ser "
-"tanto de red como locales. Para añadir un nuevo repositorio pulse el botón "
-"Repositorios, elija el tipo de respositorio que quiere añadir y proporcione "
-"el URL o la ruta. Si el URL o la ruta especificadas no contienen un archivo "
-"de descripción (índice) para las extensiones, se mostrará un mensaje "
-"advirtiéndole de ello."
-
-#: C/f-spot.xml:970(para)
-msgid ""
-"To remove a repository click <guibutton>Repositories</guibutton> button "
-"again, choose the repository you are about to delete and click "
-"<guibutton>Delete</guibutton> button."
-msgstr ""
-"Para quitar un repositorio pulse el botón <guibutton>Repositorios</"
-"guibutton> de nuevo, elija el repositorio que quiere eliminar y pulse el "
-"botón <guibutton>Borrar</guibutton>."
-
-#: C/f-spot.xml:978(title)
-msgid "Installing and updating extensions"
-msgstr "Instalar y actualizar extensiones"
-
-#: C/f-spot.xml:980(para)
-msgid ""
-"To install an extension click <guibutton>Install extensions...</guibutton> "
-"button. In the newly presented dialog"
-msgstr ""
-"Para instalar estensiones pulse el botón <guibutton>Instalar complementos…</"
-"guibutton> En el nuevo cuadro de diálogo presentado"
-
-#: C/f-spot.xml:986(para)
-msgid ""
-"Choose repository to install from all known repositories or just one of "
-"available repositories."
-msgstr ""
-"Elija repositorio para instalar desde todos los repositorios conocidos o "
-"sólo uno de los repositorios disponibles."
-
-#: C/f-spot.xml:992(para)
-msgid ""
-"Choose, what extension packages you want to see: All, Only new, Only updates."
-msgstr ""
-"Elija qué paquete de extensiones quiere ver: todos, sólo nuevos, sólo "
-"actualizados."
-
-#: C/f-spot.xml:997(para)
-msgid ""
-"Click the <guibutton>Update</guibutton> button to update list of available "
-"extension packages by given criteria."
-msgstr ""
-"Pulse el botón <guibutton>Actualizar</guibutton> para actualizar la lista de "
-"paquetes de extensiones disponibles según un criterio dado."
-
-#: C/f-spot.xml:1003(para)
-msgid ""
-"Choose extensions you want to install/update, click <guibutton>Information</"
-"guibutton> to see summary on selected package, if you want to."
-msgstr ""
-"Elija las extensiones que quiere instalar/actualizar, pulse "
-"<guibutton>Información</guibutton> para ver un resumen del paquete "
-"seleccionado."
-
-#: C/f-spot.xml:1009(para)
-msgid "Click <guibutton>Forward</guibutton> to proceed with installation."
-msgstr ""
-"Pulse <guibutton>Siguiente</guibutton> para continuar con la instalación."
-
-#: C/f-spot.xml:1017(title)
-msgid "Enabling and disabling extensions"
-msgstr "Habilitar y desabilitar extensiones"
-
-#: C/f-spot.xml:1019(para)
-msgid ""
-"You might want to temporarily enable or disable a particular extension "
-"package, for example, if the extension is not stable enough to handle a "
-"large amount of photos or if menus get crowded with extensions."
-msgstr ""
-"Quizá quiera activar o desactivar temporalmente un paquete de extensión "
-"particular, por ejemplo, si la extensión no es suficientemente estable para "
-"manejar una gran cantidad de fotos o si los menús se llenan con las "
-"extensiones."
-
-#: C/f-spot.xml:1024(para)
-msgid ""
-"In the <guilabel>Manage Extensions</guilabel> dialog select the extension "
-"package and click <guibutton>Enable</guibutton> or <guibutton>Disable</"
-"guibutton>."
-msgstr ""
-"En el diálogo <guilabel>Gestionar extensiones</guilabel> seleccione el "
-"paquete de extensión y pulse el botón <guibutton>Activar</guibutton> o "
-"<guibutton>Desactivar</guibutton>."
-
-#: C/f-spot.xml:1031(title)
-msgid "Removing extensions"
-msgstr "Quitar extensiones"
-
-#: C/f-spot.xml:1033(para)
-msgid ""
-"If you don't need an extension you can remove it from the system completely. "
-"In the <guilabel>Manage Extensions</guilabel> dialog select the extension "
-"package you want to remove and click <guibutton>Delete</guibutton>."
-msgstr ""
-"Si no necesita ninguna extensión puede eliminarlas completamente del "
-"sistema. En el diálogo <guilabel>Gestionar extensiones</guilabel> selecciona "
-"el paquete de extensión que quiere eliminar y pulse <guibutton>Borrar</"
-"guibutton>."
-
-#: C/f-spot.xml:1041(title)
-msgid "Reading summary of extensions"
-msgstr "Leer el resumen de las extensiones"
-
-#: C/f-spot.xml:1043(para)
-msgid ""
-"Every extension package contains metadata that provides the following "
-"information about the extension:"
-msgstr ""
-"Cada paquete de extensión contiene metadatos que proporcionan la siguiente "
-"información acerca de las extensiones:"
-
-#: C/f-spot.xml:1049(para)
-msgid "Description, which usually covers puprose of the extension"
-msgstr ""
-"Descripción, que por lo general se refiere al propósito de la extensión"
-
-#: C/f-spot.xml:1054(para)
-msgid "Version"
-msgstr "Versión"
-
-#: C/f-spot.xml:1059(para)
-msgid "Author"
-msgstr "Autor"
-
-#: C/f-spot.xml:1064(para)
-msgid "Dependencies"
-msgstr "Dependecias"
-
-#: C/f-spot.xml:1070(para)
-msgid ""
-"In the <guilabel>Manage Extensions</guilabel> dialog select the extension "
-"package you want to read summary of and click <guibutton>Information</"
-"guibutton>."
-msgstr ""
-"En el diálogo <guilabel>Gestión de Extensiones</guilabel> seleccione el "
-"paquete de la extensión para la que quiera leer el resumen y pulse "
-"<guibutton>Información</guibutton>."
-
-#: C/f-spot.xml:1078(title)
-msgid "Developing extensions"
-msgstr "Desarrollo de extensiones"
-
-#: C/f-spot.xml:1080(para)
-msgid ""
-"<ulink url=\"http://f-spot.org/Extend_F-Spot\">Extend F-Spot</ulink> "
-"document gives instructions on developing your own extensions for F-Spot."
-msgstr ""
-"El documento <ulink url=\"http://f-spot.org/Extend_F-Spot\">ampliando F-"
-"Spot</ulink> proporciona instrucciones acerca del desarrollo de sus propias "
-"extensiones para F-Spot."
-
-#: C/f-spot.xml:1088(title)
-msgid "Shortcuts"
-msgstr "Atajos"
-
-#: C/f-spot.xml:1091(title)
-msgid "Global Shortcuts"
-msgstr "Atajos globales"
-
-#: C/f-spot.xml:1096(entry) C/f-spot.xml:1205(entry) C/f-spot.xml:1301(entry)
-#: C/f-spot.xml:1353(entry)
-msgid "Key"
-msgstr "Clave"
-
-#: C/f-spot.xml:1099(entry) C/f-spot.xml:1208(entry) C/f-spot.xml:1304(entry)
-#: C/f-spot.xml:1356(entry)
-msgid "Action"
-msgstr "Acción"
-
-#: C/f-spot.xml:1107(keycap)
-msgid "["
-msgstr "["
-
-#: C/f-spot.xml:1109(entry)
-msgid "Rotate the selected photos to the left"
-msgstr "Rotar las fotos seleccionadas a la izquierda"
-
-#: C/f-spot.xml:1115(keycap)
-msgid "]"
-msgstr "]"
-
-#: C/f-spot.xml:1117(entry)
-msgid "Rotate the selected photos to the right"
-msgstr "Rotar las fotos seleccionadas a la derecha"
-
-#: C/f-spot.xml:1123(keycap) C/f-spot.xml:1131(keycap)
-msgid "Del"
-msgstr "Del"
-
-#: C/f-spot.xml:1125(entry)
-msgid "Remove selected photos from F-Spot's catalogue"
-msgstr "Quitar las fotos seleccionadas del catálogo de F-Spot"
-
-#: C/f-spot.xml:1131(keycap) C/f-spot.xml:1224(keycap)
-#: C/f-spot.xml:1258(keycap) C/f-spot.xml:1267(keycap)
-#: C/f-spot.xml:1284(keycap) C/f-spot.xml:1446(keycap)
-msgid "Shift"
-msgstr "Mayús"
-
-#: C/f-spot.xml:1133(entry)
-msgid ""
-"Delete selected photos permanently from the drive. If possible, they will "
-"moved to trash."
-msgstr ""
-"Borrar permanentemente las fotos seleccionadas de la unidad. Si es posible, "
-"se moverán a la papelera."
-
-#: C/f-spot.xml:1140(keycap)
-msgid "t"
-msgstr "t"
-
-#: C/f-spot.xml:1142(entry)
-msgid "View or edit tags for selected photos"
-msgstr "Ver o editar las etiquetas de las fotos seleccionadas"
-
-#: C/f-spot.xml:1148(keycap)
-msgid "F11"
-msgstr "F11"
-
-#: C/f-spot.xml:1150(entry) C/f-spot.xml:1399(entry)
-msgid "Full screen view"
-msgstr "Ver a pantalla completa"
-
-#: C/f-spot.xml:1156(keycap) C/f-spot.xml:1164(keycap)
-#: C/f-spot.xml:1172(keycap) C/f-spot.xml:1180(keycap)
-#: C/f-spot.xml:1216(keycap) C/f-spot.xml:1224(keycap)
-#: C/f-spot.xml:1242(keycap) C/f-spot.xml:1267(keycap)
-#: C/f-spot.xml:1320(keycap)
-msgid "Ctrl"
-msgstr "Ctrl"
-
-#: C/f-spot.xml:1156(keycap)
-msgid "I"
-msgstr "I"
-
-#: C/f-spot.xml:1158(entry)
-msgid "Displays information about the photo"
-msgstr "Muestra la información acerca de la foto"
-
-#: C/f-spot.xml:1164(keycap)
-msgid "Equals"
-msgstr "Igual"
-
-#: C/f-spot.xml:1166(entry)
-msgid "Zoom-in"
-msgstr "Ampliar"
-
-#: C/f-spot.xml:1172(keycap)
-msgid "Minus"
-msgstr "Menos"
-
-#: C/f-spot.xml:1174(entry)
-msgid "Zoom-out"
-msgstr "Reducir"
-
-#: C/f-spot.xml:1180(keycap) C/f-spot.xml:1372(keycap)
-msgid "N"
-msgstr "N"
-
-#: C/f-spot.xml:1182(entry)
-msgid "Import photos"
-msgstr "Importar fotos"
-
-#: C/f-spot.xml:1188(keycap)
-msgid "Alt"
-msgstr "Alt"
-
-#: C/f-spot.xml:1188(keycap)
-msgid "0-5"
-msgstr "0-5"
-
-#: C/f-spot.xml:1190(entry)
-msgid "Alt plus a number from 0 to 5 rate the selected picture(s)"
-msgstr "Alt mas un número del 0 al 5 puntúan las imágenes seleccionadas"
-
-#: C/f-spot.xml:1200(title)
-msgid "Browse Mode Shortcuts"
-msgstr "Atajos del modo examinar"
-
-#: C/f-spot.xml:1216(keycap) C/f-spot.xml:1225(keycap)
-msgid "A"
-msgstr "A"
-
-#: C/f-spot.xml:1218(entry)
-msgid "Select all"
-msgstr "Seleccionar todo"
-
-#: C/f-spot.xml:1227(entry)
-msgid "Unselect all"
-msgstr "Deseleccionar todo"
-
-#: C/f-spot.xml:1233(keycap) C/f-spot.xml:1380(keycap)
-msgid "H"
-msgstr "H"
-
-#: C/f-spot.xml:1233(keycap) C/f-spot.xml:1380(keycap)
-msgid "J"
-msgstr "J"
-
-#: C/f-spot.xml:1234(keycap) C/f-spot.xml:1381(keycap)
-msgid "K"
-msgstr "K"
-
-#: C/f-spot.xml:1234(keycap) C/f-spot.xml:1381(keycap)
-msgid "L"
-msgstr "L"
-
-#: C/f-spot.xml:1232(entry) C/f-spot.xml:1379(entry)
-msgid ""
-"Arrow keys or <placeholder-1/>, <placeholder-2/>, <placeholder-3/>, "
-"<placeholder-4/>"
-msgstr ""
-"Teclas de flechas o <placeholder-1/>, <placeholder-2/>, <placeholder-3/>, "
-"<placeholder-4/>"
-
-#: C/f-spot.xml:1236(entry)
-msgid "Move focus"
-msgstr "Mover el foco"
-
-#: C/f-spot.xml:1241(entry)
-msgid "<placeholder-1/>-Arrow key"
-msgstr "<placeholder-1/>-tecla de flecha"
-
-#: C/f-spot.xml:1244(entry)
-msgid "Move the focus without changing the selection"
-msgstr "Mueve el foco sin cambiar la selección"
-
-#: C/f-spot.xml:1250(keycap) C/f-spot.xml:1372(keycap)
-msgid "Spacebar"
-msgstr "Barra espaciadora"
-
-#: C/f-spot.xml:1252(entry)
-msgid "Select or unselect the focused photo"
-msgstr "Selecciona o deselecciona la foto que tiene el foco"
-
-#: C/f-spot.xml:1259(keycap)
-msgid "Arrow key"
-msgstr "Tecla de flecha"
-
-#: C/f-spot.xml:1261(entry)
-msgid "Change the photo selection"
-msgstr "Cambia la selección de foto"
-
-#: C/f-spot.xml:1268(keycap)
-msgid "Left arrow or Right arrow"
-msgstr "flecha izquierda o flecha derecha"
-
-#: C/f-spot.xml:1270(entry)
-msgid ""
-"Add/Remove all photos in the row, in the direction pressed, to the selection"
-msgstr ""
-"Añadir/quitar todas las fotos en la fila, en la dirección pulsada, a la "
-"selección"
-
-#: C/f-spot.xml:1276(keycap) C/f-spot.xml:1284(keycap)
-#: C/f-spot.xml:1437(keycap)
-msgid "V"
-msgstr "V"
-
-#: C/f-spot.xml:1278(entry)
-msgid "Pops up a larger preview of the picture pointed by the mouse"
-msgstr ""
-"Aparecerá una vista previa más grande de la imagen apuntada por el ratón"
-
-#: C/f-spot.xml:1286(entry)
-msgid ""
-"Pops up a larger preview and a color histogram of the picture pointed by the "
-"mouse"
-msgstr ""
-"Aparecerá una vista previa y un histograma de color de la imagen apuntada "
-"por el ratón"
-
-#: C/f-spot.xml:1296(title)
-msgid "Tag Shortcuts"
-msgstr "Atajos de las etiquetas"
-
-#: C/f-spot.xml:1312(keycap)
-msgid "F2"
-msgstr "F2"
-
-#: C/f-spot.xml:1314(entry)
-msgid "Rename selected tag"
-msgstr "Renombrar la etiqueta seleccionada"
-
-#: C/f-spot.xml:1320(keycap)
-msgid "T"
-msgstr "T"
-
-#: C/f-spot.xml:1322(entry)
-msgid "Add tags to selected photos"
-msgstr "Añadir etiquetas al seleccionar las fotos"
-
-#: C/f-spot.xml:1327(entry) C/f-spot.xml:1335(entry)
-msgid "n/a"
-msgstr "n/d"
-
-#: C/f-spot.xml:1330(entry)
-msgid "Drag and drop tags to move them"
-msgstr "Arrastrar y soltar para mover las etiquetas"
-
-#: C/f-spot.xml:1338(entry)
-msgid "Type a tag's name to jump to it (only works if tag is shown/expanded)"
-msgstr ""
-"Escriba el nombre de una etiqueta para saltar a ella (sólo funciona si la "
-"etiqueta se muestra/expande)"
-
-#: C/f-spot.xml:1348(title)
-msgid "Edit Mode Shortcuts"
-msgstr "Modo de edición de atajos"
-
-#: C/f-spot.xml:1364(keycap)
-msgid "Page Up"
-msgstr "Subir página"
-
-#: C/f-spot.xml:1364(keycap)
-msgid "Backspace"
-msgstr "Retroceso"
-
-#: C/f-spot.xml:1364(keycap)
-msgid "B"
-msgstr "B"
-
-#: C/f-spot.xml:1363(entry) C/f-spot.xml:1371(entry)
-msgid "<placeholder-1/>, <placeholder-2/>, <placeholder-3/>"
-msgstr "<placeholder-1/>, <placeholder-2/>, <placeholder-3/>"
-
-#: C/f-spot.xml:1366(entry)
-msgid "Go to Previous Photo"
-msgstr "Ir a la foto anterior"
-
-#: C/f-spot.xml:1372(keycap)
-msgid "Page Down"
-msgstr "Bajar página"
-
-#: C/f-spot.xml:1374(entry)
-msgid "Go to Next Photo"
-msgstr "Ir a la siguiente foto"
-
-#: C/f-spot.xml:1383(entry)
-msgid "Go to Previous/Next photo or move around a zoomed photo"
-msgstr "Ir a la Anterior/Siguiente foto o moverse por una foto ampliada"
-
-#: C/f-spot.xml:1389(keycap)
-msgid "R"
-msgstr "R"
-
-#: C/f-spot.xml:1391(entry)
-msgid "Go to a random photo"
-msgstr "Ir a una foto aleatoria"
-
-#: C/f-spot.xml:1397(keycap)
-msgid "f"
-msgstr "f"
-
-#: C/f-spot.xml:1405(keycap)
-msgid "0"
-msgstr "0"
-
-#: C/f-spot.xml:1407(entry)
-msgid "Fit the image to the screen"
-msgstr "Ajustar la imagen a la pantalla"
-
-#: C/f-spot.xml:1413(keycap)
-msgid "1"
-msgstr "1"
-
-#: C/f-spot.xml:1415(entry)
-msgid "Zoom Factor to 1.0 (1 screen pixel per image pixel)"
-msgstr "Factor de ampliación por 1.0 (1 píxel de pantalla por píxel de imagen)"
-
-#: C/f-spot.xml:1421(keycap)
-msgid "2"
-msgstr "2"
-
-#: C/f-spot.xml:1423(entry)
-msgid "Zoom Factor to 2.0 (4 screen pixels per image pixel)"
-msgstr ""
-"Factor de ampliación de 2.0 (4 píxeles de pantalla por píxel de imagen)"
-
-#: C/f-spot.xml:1429(keycap)
-msgid "Escape"
-msgstr "Escape"
-
-#: C/f-spot.xml:1431(entry)
-msgid "Returns to Browser mode"
-msgstr "Vuelve al modo examinador"
-
-#: C/f-spot.xml:1441(keycap)
-msgid "v"
-msgstr "v"
-
-#: C/f-spot.xml:1439(entry)
-msgid ""
-"Examine photo with magnifying glass (Loupe). Doubleclick on the Loupe, or "
-"type <placeholder-1/> again to close it."
-msgstr ""
-"Examine la foto con la lupa. Pulse dos veces sobre la lupa o pulse "
-"<placeholder-1/> de nuevo para cerrarla."
-
-#: C/f-spot.xml:1445(entry)
-msgid "<placeholder-1/>-Mousewheel"
-msgstr "<placeholder-1/>-rueda del ratón"
-
-#: C/f-spot.xml:1448(entry)
-msgid "Faster filmstrip scrolling"
-msgstr "Desplazamiento de carrete más rápido"
-
-#: C/f-spot.xml:1454(keycap)
-msgid "i"
-msgstr "i"
-
-#: C/f-spot.xml:1456(entry)
-msgid "Toggle infobox visibility ''(only when in full screen)''"
-msgstr ""
-"Mostrar la visibilidad de la caja de información «(sólo en modo a pantalla "
-"completa)»"
-
-#. Put one translator per line, in the form of NAME <EMAIL>, YEAR1, YEAR2.
-#: C/f-spot.xml:0(None)
-msgid "translator-credits"
-msgstr ""
-"Jorge González <jorgegonz at svn.gnome.org>, 2007-2009\n"
-"Eduardo Retamales <eretamales at gnome.cl>, 2007\n"
-"Javier Mazorra <mazi.debian at gmail.com>, 2007\n"
-"QA: Jorge González <jorgegonz at svn.gnome.org>, 2007"
-
-#~ msgid "2007"
-#~ msgstr "2007"
-
-#~ msgid "k"
-#~ msgstr "k"
-
-#~ msgid "j"
-#~ msgstr "j"
-
-#~ msgid "h"
-#~ msgstr "h"
-
-#~ msgid "l"
-#~ msgstr "l"
diff --git a/docs/es/f-spot.xml b/docs/es/f-spot.xml
deleted file mode 100644
index 8822662..0000000
--- a/docs/es/f-spot.xml
+++ /dev/null
@@ -1,867 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!DOCTYPE book PUBLIC "-//OASIS//DTD DocBook XML 4.1.2//EN" "http://www.oasis-open.org/docbook/xml/4.1.2/docbookx.dtd">
-<book id="f-spot" lang="es">
- <bookinfo>
- <title>Manual de F-Spot</title>
- <abstract role="description">
- <para>Este es el manual de usuario de F-Spot, un gestor personal de fotos para GNOME.</para>
- </abstract>
- <subtitle>Este es el manual de usuario de F-Spot, un gestor personal de fotos para GNOME.</subtitle>
- <copyright>
- <year>2007-2009</year>
- <holder>Aaron Bockover, Gabriel Burt, Miguel de Icaza, Bengt Thuree</holder>
- </copyright><copyright><year>2007-2009</year><holder>Jorge González (jorgegonz at svn.gnome.org)</holder></copyright><copyright><year>2007</year><holder>Eduardo Retamales (eretamales at gnome.cl)</holder></copyright><copyright><year>2007</year><holder>Javier Mazorra (mazi.debian at gmail.com)</holder></copyright><copyright><year>2007</year><holder>QA: Jorge González (jorgegonz at svn.gnome.org)</holder></copyright>
- <publisher>
- <publishername>Proyecto de documentación de GNOME</publishername>
- </publisher>
- <authorgroup>
- <author>
- <firstname>Miguel</firstname>
- <surname>de Icaza</surname>
- </author>
- <author>
- <firstname>Aaron</firstname>
- <surname>Bockover</surname>
- </author>
- <author>
- <firstname>Bengt</firstname>
- <surname>Thuree</surname>
- </author>
- <author>
- <firstname>Gabriel</firstname>
- <surname>Burt</surname>
- </author>
- <author>
- <firstname>Alexandre</firstname>
- <surname>Prokoudine</surname>
- </author>
- <author role="maintainer">
- <firstname>Stephane</firstname>
- <surname>Delcroix</surname>
- </author>
- </authorgroup>
- <!--<include href="legal.xml" xmlns="http://www.w3.org/2001/XInclude"/>-->
- <revhistory>
- <revision>
- <revnumber>0.5</revnumber>
- <date>2008-09-25</date>
- </revision>
- <revision>
- <revnumber>0.4</revnumber>
- <date>2008-09-12</date>
- </revision>
- <revision>
- <revnumber>0.3</revnumber>
- <date>2007-07-26</date>
- </revision>
- </revhistory>
- </bookinfo>
-
- <chapter id="organizing">
- <title>Organice sus fotos</title>
-
- <sect1 id="import">
- <title>Importar</title>
-
- <para>Puede importar sus fotos desde su disco duro o cámara. Cuando las importe desde su cámara a F-Spot, éste siempre hará una copia de las mismas, permitiéndole liberar memoria en la cámara. De forma predeterminada F-Spot realizará una copia de las fotos importadas desde su disco duro. Desmarque la opción <guilabel>Copiar</guilabel> en el diálogo de importación o mantenga pulsada <keycap>Mayús</keycap> mientras arrastra las fotos en F-Spot si no desea copiarlas desde su disco duro.</para>
-
- <para>De forma predeterminada, F-Spot copia sus fotos en la carpeta </para>
- <para>Si hay una mínima posibilidad de que algunas de sus fotos ya estén importadas del origen seleccionado, puede usar la opción <guilabel>Detectar duplicados</guilabel>. En este caso F-Spot intentará averiguar si la imagen ya está presente en la base de datos y, de ser así, no debería importarse.</para>
- <para>Si todas las fotos que importa a la vez son de un evento en particular o tienen otra característica en común, puede crear una etiqueta para ellas, para después poderlas encontrar con facilidad. Para hacerlo, siga las instrucciones debajo de <ulink url="tag">crear una nueva etiqueta</ulink>, después cuando las importe, active el botón <guilabel>Añadir etiqueta</guilabel> y elija la etiqueta creada.</para>
-
- <tip>
- <para>F-Spot usa una base de datos almacenada en <filename>~/.config/f-spot/photos.db</filename>. Nota, para acceder a ella, usa el comando sqlite3. También puede especificar manualmente la ruta de una base de datos ejecutando F-Spot con la opción <option>-b</option>.</para>
- </tip>
-
- <para>Despues de importar, F-Spot sólo mostrará las imágenes del último carrete importado. Lea <xref linkend="enjoying-search"/> para aprender importar carretes.</para>
- <para>También puede importar directamente desde Mozilla <ulink url="http://www.mozilla.com/en-US/firefox/">Firefox</ulink> y <ulink url="http://www.mozilla.com/en-US/thunderbird/">Thunderbird</ulink> usando <ulink url="https://addons.mozilla.org/en-US/firefox/addon/7091">Firefox</ulink> y <ulink url="https://addons.mozilla.org/en-US/thunderbird/addon/7011">Thunderbird</ulink> La extensión de importación de F-Spot escrita por <ulink url="http://personalpages.tds.net/~cdovel/">Pizzach</ulink>.</para>
- </sect1>
-
- <sect1 id="edit">
- <title>Editar</title>
-
- <para>Si pulsa dos veces con el ratón o pulsa retorno sobre una imagen, activará el modo Editar, donde puede borrar ojos rojos, recortar y ajustar el brillo y los colores.</para>
-
- <sect2 id="edit-versions">
- <title>Versiones</title>
-
- <para>Cuando edita sus fotos, se crea una nueva copia (llamada versión), por lo que el original nunca se altera. Tras su primera edición de una foto, las siguientes ediciones modificarán la misma versión. Si quiere crear múltiples versiones de la foto, quizá con diferente recorte o color, puede hacerlo yendo a la opción <menuchoice><guimenu>Archivo</guimenu><guimenuitem>Crear nueva versión</guimenuitem></menuchoice>.</para>
- </sect2>
-
- <sect2 id="edit-crop">
- <title>Recorte</title>
-
- <para>Recortar una imagen es una forma excelente de mejorar la calidad de la fotografía mejorando cómo se enmarca. Una foto se recorta seleccionando la parte de la foto que quiere mantener. Si quiere que su foto tenga exactamente las misma dimensiones necesarias para cierto tamaño de impresión, puede limitar el tipo de selección que F-Spot le permitirá elegir escogiendo el tamaño adecuado desde el menú desplegable limitado. Debajo verá el <xref linkend="edit-remove-red-eye"/> para obtener más detalles acerca de cómo hacer una selección en su foto.</para>
- <figure>
- <title>Herramienta de recorte</title>
- <mediaobject>
- <imageobject>
- <imagedata fileref="figures/f-spot-crop.png"/>
- </imageobject>
- </mediaobject>
- </figure>
- <para>Una vez que tenga hecha su selección de recorte, debe pulsar el botón de recorte debajo de la imagen para finalizar el recorte. Si está trabajando con la foto original, al recortar se creará una nueva versión de su foto.</para>
- </sect2>
-
- <sect2 id="edit-straighten">
- <title>Enderezar</title>
-
- <para>Enderezar efecto es una herramienta para nivelar una foto, muy útil para los paisajes fotografiados sin trípode, cuando la línea (imaginaria) horizontal no es 0°. Esta herramienta rota una imagen un ángulo especificado y recorta la imagen resultante automágicamente, de modo que siempre verá un rectángulo perfecto.</para>
- <figure>
- <title>Herramienta para enderezar</title>
- <mediaobject>
- <imageobject>
- <imagedata fileref="figures/f-spot-straighten.png"/>
- </imageobject>
- </mediaobject>
- </figure>
- </sect2>
-
- <sect2 id="edit-adjust-colors">
- <title>Ajustar los colores</title>
-
- <para>Para ajustar el brillo, el contraste y los colores de una foto, primero pulse el icono <guibutton>Ajustar los colores de la foto</guibutton> para abrir el diálogo de ajuste. Después cambie algunos ajustes y guárdelos con el botón <guibutton>Aceptar</guibutton>.</para>
- <figure>
- <title>Herramienta de ajuste de colores</title>
- <mediaobject>
- <imageobject>
- <imagedata fileref="figures/f-spot-adjust-colors.png"/>
- </imageobject>
- </mediaobject>
- </figure>
- </sect2>
-
- <sect2 id="edit-auto-color">
- <title>Color automático</title>
-
- <para>Este efecto ajusta los niveles de color automáticamente para conseguir una foto correctamente balanceada. Funciona mejor para fotografías tomadas con un balance automático de blancos, cuando la cámara no hizo bien la toma.</para>
- <figure>
- <title>Color automático</title>
- <mediaobject>
- <imageobject>
- <imagedata fileref="figures/f-spot-autocolor.png"/>
- </imageobject>
- </mediaobject>
- </figure>
- </sect2>
-
- <sect2 id="edit-desaturate">
- <title>Desaturar</title>
-
- <para>Para pasar una foto de color a blanco y negro, abra una foto de su elección y pulse el botón <guibutton>Desaturar</guibutton> botón.</para>
- <figure>
- <title>Herramienta de desaturación</title>
- <mediaobject>
- <imageobject>
- <imagedata fileref="figures/f-spot-desaturate.png"/>
- </imageobject>
- </mediaobject>
- </figure>
- </sect2>
-
- <sect2 id="edit-sepia">
- <title>Sepia</title>
-
- <para>Para hacer que una foto llena de color pareca una foto de estilo antiguo en tonos sepia, abra una foto a su elección y pulse el botón <guibutton>Sepia</guibutton>.</para>
- <figure>
- <title>Herramienta de desaturación</title>
- <mediaobject>
- <imageobject>
- <imagedata fileref="figures/f-spot-sepia.png"/>
- </imageobject>
- </mediaobject>
- </figure>
- </sect2>
-
- <sect2 id="edit-remove-red-eye">
- <title>Borrar ojos rojos.</title>
-
- <para>Para quitar los ojos rojos de una foto debe seleccionar una zona que contenga los ojos. Quizá quiera ampliar la imagen para seleccionar con precisión los ojos en la foto. Debería ser capaz de corregir los dos ojos dela misma persona de una sola vez, o incluso los ojos de varias personas de una sola vez. Si esto no funciona, al selecionar la zona que contiene alguna parte roja (labios, etc.) probablemente tendrá que correjir un ojo rojo por vez.</para>
- <para>Al hacer su selección, pulse en la esquina del rectangulo que será su selección y arrastre con el ratón a la esquina en diagonal y suéltelo. Puede redimensionar su selección arrastrándo los bordes y puede moverla pulsando en el centro de ella y arrastrándola a donde quiera que esté.</para>
- <para>Una vez que haya seleccionado una zona, puede eliminar el rojo de ella pulsando el botón de ojos rojos debajo de la foto.</para>
- <figure>
- <title>Herramianta de ojos rojos</title>
- <mediaobject>
- <imageobject>
- <imagedata fileref="figures/f-spot-red-eye.png"/>
- </imageobject>
- </mediaobject>
- </figure>
- <tip>
- <para>Puede cambiar el umbral de la detección de los ojos rojos cambiando la la clave de gconf <filename class="directory">/apps/f-spot/edit/redeye_threshold</filename>.</para>
- </tip>
- </sect2>
-
- <sect2 id="edit-soft-focus">
- <title>Enfoque suave</title>
-
- <para>En fotografía, al hacer más nítida una región de una imagen mientras se difumina el resto, es una manera de crear énfasis y captar la atención. Este objetivo se consigue utilizando una lente que permita disparar a una corta distancia delante de y más allá del tema central. El efecto de enfoque suave es una forma de emular esta lente.</para>
- <figure>
- <title>Herramienta de enfoque suave</title>
- <mediaobject>
- <imageobject>
- <imagedata fileref="figures/f-spot-soft-focus.png"/>
- </imageobject>
- </mediaobject>
- </figure>
- <para>Pulse para elegir el punto central de la zona en la que quiere que esté enfocada y ajuste el desenfoque, después pulse <guibutton>Aceptar</guibutton></para>
- </sect2>
-
- <sect2 id="edit-sharpen">
- <title>Nitidez</title>
-
- <para>Las fotografías mal enfocadas y la mayoría de las imaganes digitalizadas suelen de necesitar correción de nitidez. El efecto de la máscara de definición enfoca los bordes de los elementos sin aumentar el ruido o las manchas. Para enfocar una fotografía, elija <menuchoice><guimenu>Editar</guimenu><guimenuitem>Enfoque...</guimenuitem></menuchoice> y especifique los siguientes valores:</para>
-
- <itemizedlist>
- <listitem>
- <para><parameter class="option">Cantidad</parameter>: cantidad de la nitidez.</para>
- </listitem>
- <listitem>
- <para><parameter class="option">Radio</parameter>: cuántos píxeles a ambos lados de un borde se verán afectados por la nitidez. Las imágenes de alta resolución permiten un mayor radio.</para>
- </listitem>
- <listitem>
- <para><parameter class="option">Umbral</parameter>: la mínima diferencia en valores de píxeles que indica un borde donde se debe aplicar el enfoque. Esto ayuda a evitar la creación de manchas en la cara, el cielo o la superficie del agua.</para>
- </listitem>
- </itemizedlist>
- </sect2>
-
- <sect2 id="edit-describe">
- <title>Descripción</title>
-
- <para>También puede introducir una descripción de la imagen pulsando en la caja de texto debajo de la imagen y tecleándola.</para>
- <para>Una vez que tenga hecha su selección de recorte, debe pulsar el botón de recorte debajo de la imagen para finalizar el recorte. Si está trabajando con la foto original, al recortar se creará una nueva versión de su foto.</para>
- </sect2>
-
- <sect2 id="edit-adjust-time">
- <title>Ajuste de tiempo</title>
-
- <para>Tanto en el modo «examinar» como en el modo «editar» puede ajustar el tiempo de una o varias imágenes (<menuchoice><guimenu>Editar</guimenu><guimenuitem>Ajustar la hora</guimenuitem></menuchoice>). Ajustar la hora de varias imágenes a la vez le ayuda a pasar todo un carrete de importación si, por ejemplo, la hora de su cámara está mal establecida o si se olvidó de cambiarla según la DST.</para>
- </sect2>
- </sect1>
-
- <sect1 id="tag">
- <title>Etiqueta</title>
- <para>F-Spot le permite organizar y disfrutar de sus fotos asociándolas con las diversas etiquetas personalizables. De forma predeterminada F-Spot viene con algunas etiquetas para iniciarle en ello; es libre de cambiarlas y añadir unas nuevas. Por ejemplo, si quiere crear una etiqueta para especificar un evento, puede crear una nueva etiqueta con el nombre de ese evento bajo la etiqueta Eventos.</para>
- <para>Hay muchas formas de etiquetar las fotos:</para>
- <itemizedlist>
- <listitem>
- <para>arrastrar y soltar la foto(s) en la etiqueta</para>
- </listitem>
- <listitem>
- <para>arrastrar y soltar la etiquetas en la foto(s)</para>
- </listitem>
- <listitem>
- <para>pulsando el botón derecho sobre una foto y usando el menú</para>
- </listitem>
- <listitem>
- <para>a través de las etiquetas y los menús de edición</para>
- </listitem>
- <listitem>
- <para>escribiéndolos. Pulse <keycap>t</keycap> para mostrar la barra de entrada de etiquetas. Aquí puede introducir las etiquetas, separándolas por comas.</para>
- <para>También puede usar el autocompletado en esta barra de entrada: después de introducir el comienzo del nombre de una etiqueta, pulse <keycap>Tab</keycap> para ver su primer posible completado. Puede alternar entre los otros posibles completados pulsando <keycap>Tab</keycap> de nuevo, e ir hacia atrás pulsando <keycombo action="simul"><keycap>Mayús</keycap><keycap>Tab</keycap></keycombo>. Para confirmar el completado sugerido e introducir la etiqueta pulse <keycap>,</keycap>. Pulsando <keycap>Intro</keycap> dejará la barra de entrada de etiquetas, confirmando el completado actual. Para cancelar el autocompletado, simplemente siga tecleando.</para>
- </listitem>
- </itemizedlist>
- <para>La primera foto que asociade con una etiqueta se usará para el icono de esa etiqueta. Siempre puede editar el nombre de la etiqueta, la etiqueta padre y el icono pulsando con el botón derecho del ratón sobre ella y escogiendo <guilabel>Editar etiqueta</guilabel>.</para>
- <para>Puede cambiar el padre de una etiqueta arrastrándo y soltándolo donde quiera. También puede editar el nombre de una etiqueta selecionándola y pulsando <keycap>F2</keycap>. Por último, si el árbol de etiquetas tiene el foco (ej. acaba de pulsar sobre una etiqueta), puede comenzar a escribir el nombre de una etiqueta y se buscará en todas las etiquetas expandidas en la lista pudiéndo saltar a cualquiera de las coincidentes.</para>
-
- <para>También puede cambiar el tamaño de los iconos de la barra lateral o incluso hacer los iconos de las etiquetas invisibles seleccionando la opción que prefiera en el menú <menuchoice><guimenu>Ver</guimenu><guimenuitem>Etiquetar iconos</guimenuitem></menuchoice>.</para>
-
- <tip>
- <para>F-Spot puede escribir etiquetas como campos de metadatos en archivos JPEG. Las etiquetas para varios archivos RAW, PNG, TIFF y otros se escriben en base de datos de F-Spot. Tendrá que volver a etiquetar estos archivos si vuelve a importar su colección.</para>
- </tip>
- </sect1>
- </chapter>
-
- <chapter id="enjoying">
- <title>Disfrute de sus fotos</title>
- <sect1 id="enjoying-browse">
- <title>Examinar</title>
- <para>Puede utilizar el deslizador para examinar sus fotos por mes o por directorio. Para cambiar este ajuste, vaya a <menuchoice><guimenu>Ver</guimenu><guimenuitem>Ordenar por</guimenuitem></menuchoice></para>
- </sect1>
- <sect1 id="enjoying-search">
- <title>Buscar</title>
-
- <para>F-Spot usa filtros de búsquedas que le ayudarán a definir mejor los criterios de búsqueda.</para>
-
- <sect2 id="enjoying-search-tags">
- <title>Etiquetas</title>
-
- <para>Puede inicar una búsqueda pulsando dos veces o activando una etiqueta desde la lista de etiquetas. Alternativamente puede mostrar la barra de búsqueda con <menuchoice><guimenu>Buscar</guimenu><guimenuitem>Mostrar barra de búsqueda</guimenuitem></menuchoice>. Puede arrastrar etiquetas a la barra de búsqueda desde la vista de etiquetas.</para>
- <para>Para buscar fotos que están marcadas con dos etiquetas, active la primera en la vista de etiqueta o arrástrela a la barra de búsqueda, a continuación arrastre la segunda etiqueta y suéltela sobre la primera. También puede pulsar con el botón derecho del ratón sobre la segunda etiqueta en la vista de etiqueta o usar el menú <guimenu>Buscar</guimenu> y elegir elegir <guimenuitem>Buscar con...</guimenuitem> y seleccionar la primera etiqueta (o grupo de de etiquetas).</para>
- <para>Puede arrastrar un icono de etiqueta en la barra de búsqueda para cambiar entre buscarla «y» buscar otra etiqueta o buscarla «o» buscar otra etiqueta.</para>
- <para>Puede buscar fotos que no tienen una etiqueta en particular pulsando dos veces sobre una etiqueta en la barra de búsqueda. Alternativamente puede pulsar con el botón derecho sobre una etiqueta en la barra de búsqueda y seleccionar <guimenuitem>Excluir</guimenuitem></para>
- <para>Para quitar una etiqueta de la búsqueda, arrástrela desde la barra de búsqueda o pulse con el botón derecho del ratón y seleccione <guimenuitem>Eliminar</guimenuitem>.</para>
- <para>De forma predeterminada, las fotos etiquetadas con <emphasis>Oculto</emphasis> no se mostrarán. Debe incluir explícitamente la etiqueta <emphasis>Oculto</emphasis> en sus búsquedas para mostrar esas fotos.</para>
- </sect2>
-
- <sect2 id="enjoying-search-import-rolls">
- <title>Importar carretes</title>
- <para>F-Spot recuerda qué imágenes se importaron y en qué momento. Use <menuchoice><guimenu>Buscar</guimenu><guisubmenu>Importar carrete</guisubmenu><guimenuitem>Último carrete importado</guimenuitem></menuchoice> para limitar una búsqueda a la última sesión de importación o use <menuchoice><guimenu>Buscar</guimenu><guisubmenu>Importar carrete</guisubmenu><guimenuitem>Seleccionar carretes que importar…</guimenuitem></menuchoice> para realizar una selección más ajustada de las fotos importadas:</para>
- <itemizedlist>
- <listitem>
- <para><parameter class="option">En</parameter>; para seleccionar fotos de una sesión de importación en particular.</para>
- </listitem>
- <listitem>
- <para><parameter class="option">Después</parameter>; para seleccionar todas las fotos importadas comenzando desde una sesión de importación en particular.</para>
- </listitem>
- <listitem>
- <para><parameter class="option">Entre</parameter>; para seleccionar todas la fotos importadas entre dos sesiones de importación particulares.</para>
- </listitem>
- </itemizedlist>
- <para>Cada vez que cambie la configuración del filtro, aparecerá la cantidad de fotos seleccionadas en la parte inferior del cuadro de diálogo.</para>
- <para>Cuando aplica el filtro Importar carrete, en la barra de búsqueda verá <guilabel>Buscar: Importar carrete</guilabel>. Ahora puede añadir otro filtro para mejorar su selección.</para>
- <para>Si ya no necesita el filtro Importar carrete, elija <menuchoice><guimenu>Buscar</guimenu><guisubmenu>Importar carrete</guisubmenu><guimenuitem>Limpiar el filtro de carrete</guimenuitem></menuchoice> para quitar la importación de carrete desde el criterio de búsqueda. También puede pulsar el botón cerrar (<guibutton>X</guibutton>) de la barra de búsqueda para descartar todas las opciones de búsqueda actuales.</para>
- <tip>
- <para>El número de carretes mostrados en el diálogo está definido por la clave de gconf <filename class="directory">/apps/f-spot/import/gui_roll_history</filename>. El valor predeterminado es 10.</para>
- </tip>
- </sect2>
-
- <sect2 id="enjoying-search-type-to-find">
- <title>Escriba para buscar</title>
- <para>También existe una entrada escribir-para-buscar. Pulse <keycap>/</keycap> para abrirla. No se puede usar junto con la barra de búsqueda. Puede escribir consultas tales como «EtiquetaA y (EtiquetaB o (EtiquetaC y EtiquetaD))». En cualquier punto, si F-Spot reconoce lo que ha tecleado como una consulta válida, actualizará su búsqueda. El operador <emphasis>no</emphasis> aún no está soportado.</para>
-
- <para>Esta función también buscará por el texto introducido en los comentarios y nombres de archivo de las fotos.</para>
- </sect2>
- </sect1>
-
- <sect1 id="enjoying-fullscreen-mode-and-slideshows">
- <title>Pantalla completa y modo diapositivas</title>
- <para>Para conseguir menos distracciones y una mayor visualización, puede ver sus fotos en el modo a pantalla completa. Controla cuándo mostrar la siguiente foto o retroceder a la anterior. Entre en el modo a pantalla completa pulsando <keycap>F11</keycap> en cualquier momento o pulsando el botón en la barra de herramientas.</para>
- <figure>
- <title>Pantalla completa</title>
- <mediaobject>
- <imageobject>
- <imagedata fileref="figures/f-spot-fullscreen.png"/>
- </imageobject>
- </mediaobject>
- </figure>
- <para>En el modo de diapositiva, puede relajarse y ver sus fotos según se le van mostrando. Podrá iniciar las diapositivas pulsando el botón en la barra de herramientas.</para>
- <figure>
- <title>Diapositivas</title>
- <mediaobject>
- <imageobject>
- <imagedata fileref="figures/f-spot-slideshow.png"/>
- </imageobject>
- </mediaobject>
- </figure>
- </sect1>
- </chapter>
-
- <chapter id="sharing">
- <title>Compartir sus fotos</title>
-
- <abstract>
- <para>Existen muchas maneras de compartir sus fotos usando F-Spot. Todas los métodos siquientes sólo compartirán las fotos que haya seleccionado al ejecutarlo.</para>
- </abstract>
-
- <sect1 id="sharing-e-mail">
- <title>Correo-e</title>
- <para>Envie sus fotos directamente desde F-Spot con el menú <menuchoice><guimenu>Archivo</guimenu><guimenuitem>Enviar al correo electrónico</guimenuitem></menuchoice>.</para>
- <note>
- <title>Nota 1</title>
- <para>El programa de correo utilizado para esto es el definido por GNOME. Puede cambiar el programa predeterminado usando la herramienta <application>Aplicaciones preferidas</application> en <menuchoice><guimenu>Sistema</guimenu><guisubmenu>Preferencias</guisubmenu></menuchoice></para>
- </note>
- <note>
- <title>Nota 2</title>
- <para>Si algunas de las fotos que desea enviar por correo electrónico están en un formato que F-Spot no puede escribir (ej. imágenes RAW), el tamaño del dialogo de selección se bloqueará y se enviarán los originales.</para>
- </note>
- <tip>
- <para>Si está enviando fotos redimensionadas, F-Spot guardará las versiones modificadas en el directorio <filename class="directory">/tmp</filename> durante 30 segundos. No es una cuestión de Evolution, que hace su propia copia local de los archivos adjuntos, pero podría ser un poco más corta si está utilizando Thunderbird. Puede cambiar el retraso de editando la clave de gconf <filename class="directory">/apps/f-spot/export/email/delete_timeout_seconds</filename>.</para>
- </tip>
- </sect1>
-
- <sect1 id="sharing-print">
- <title>Imprimir</title>
- <para>Imprima sus fotos con el menú <menuchoice><guimenu>Archivo</guimenu><guimenuitem>Imprimir</guimenuitem></menuchoice>.</para>
- </sect1>
-
- <sect1 id="sharing-burn-to-cd">
- <title>Grabar a un CD</title>
- <para>Grabe sus fotos a CD o DVD con el menú <menuchoice><guimenu>Archivo</guimenu><guisubmenu>Exportar</guisubmenu><guimenuitem>Exportar a CD</guimenuitem></menuchoice>.</para>
- </sect1>
-
- <sect1 id="website-gallery-folder">
- <title>Generar una página web para Gallery o una carpeta</title>
- <para>La característica <menuchoice><guimenu>Archivo</guimenu><guimenuitem>Exportar</guimenuitem><guimenuitem>Exportar a una carpeta</guimenuitem></menuchoice> le proporciona tres formas de exportar sus imágenes.</para>
- <itemizedlist>
- <listitem>
- <para><guilabel>Usar original</guilabel> exporta sus fotos listas para usarlas con el software <ulink url="http://jimmac.musichall.cz/original.php">Original Photo Gallery</ulink> de Jakub Steiner. Si no está seguro acerca de esta opción, probablemente no es la más adecuada.</para>
- </listitem>
- <listitem>
- <para><guilabel>Utiliza archivos HTML estáticos</guilabel> exporta sus fotografías a un sitio web interactivo, listo para que los cargue.</para>
- </listitem>
- <listitem>
- <para><guilabel>Archivos planos</guilabel> exporta sus imágenes como archivos en directorios, sin ponerlas en una galería.</para>
- </listitem>
- </itemizedlist>
- </sect1>
-
- <sect1 id="sharing-flickr-or-php-gallery">
- <title>Publique en sus galerías en internet</title>
- <para>Si usa Flickr, SmugMug, 23hq. Tabblo, Facebook, Zoomr o los álbumes de Picasa Web, podrá enviar sus archivos directamente desde F-Spot con el menú <menuchoice><guimenu>Archivo</guimenu><guisubmenu>Exportar</guisubmenu></menuchoice>, eligiendo el elemento del submenú correspondiente.</para>
- <para>Si usa el software PHP conocido como <ulink url="http://gallery.sourceforge.net/">Gallery</ulink>, podrá enviar sus fotos a su álbum existente con el menú <menuchoice><guimenu>Archivo</guimenu><guimenuitem>Exportar</guimenuitem><guimenuitem>Exportar a Web Gallery</guimenuitem></menuchoice>.Primero debe habilitar el módulo remoto de su instalación de Gallery.</para>
- <note>
- <title>Nota para los usuarios de Gallery 2.2</title>
- <para>El complemento remoto para Gallery deberá ser 1.0.8 o posterior.</para>
- </note>
- <para><ulink url="http://pennave.sourceforge.net">PennAve</ulink> es una aplicación web escrita en Python que usa directamente la base de datos de F-Spot para presentar una galería dinámica de sus fotos y etiquetas.</para>
- <para>Un <ulink url="http://www.conduit-project.org">conducto</ulink> es una aplicación que puede sincronizar fotos con una etiqueta en particular con su cuenta Flickr o su álbum en Picasa Web.</para>
- </sect1>
- </chapter>
-
- <chapter id="cms">
- <title>Gestión de color</title>
-
- <sect1 id="cms-what-is-cms">
- <title>¿Qué es la gestión del color?</title>
-
- <para>Cuando captura una foto y la mira en una pantalla parece diferente que en la vista previa de la pantalla de la cámara o en otra pantalla. También parece diferente al imprimirla. Esto es porque cada dispositivo tiene unas capacidades de reproducción diferentes.</para>
-
- <para>El sistema de gestión de color (CMS) es una herramienta para obtener una reproducción fidedigna tanto en la pantalla como en la salida (ej. una impresora). Un sistema de gestión de color se basa en perfiles de colores para mapear los colores originales al color que el dispositivo puede reproducir, de tal forma que los colores aparecen igual en todas partes; en un equipo con un monitor LCD, una impresora de su laboratorio fotográfico, etc.</para>
- </sect1>
-
- <sect1 id="cms-what-is-icc-profile">
- <title>¿Qué es un perfil de color?</title>
-
- <para>Un perfil de color es un archivo con extensión .icc (generalmente llamado perfil de color ICC) o .icm que describe cómo se corresponden los colores de un dispositivo con una descripción universal de colores.</para>
-
- <para>Existen diferentes tipos de perfiles:</para>
-
- <itemizedlist>
- <listitem>
- <para>Perfil del dispositivo de entrada. Es el perfil para una cámara o un perfil que una aplicación como XSane empotra en una imagen escaneada.</para>
- </listitem>
- <listitem>
- <para>Perfil del área de trabajo. Es un perfil que describe el espacio de color en el que todas las operaciones de realizan dentro de una aplicación. Generalmente se usan una gran cantidad de perfiles como AdobeRGB1998 o ProPhotoRGB.</para>
- </listitem>
- <listitem>
- <para>Perfil de pantalla. Es un perfil para un monitor.</para>
- </listitem>
- <listitem>
- <para>Perfil de salida. Éste es generalmente el perfil de su impresora.</para>
- </listitem>
- </itemizedlist>
-
- <para>Actualmente F-Spot permite ajustar solamente perfiles de mostrado y salida. Todas las operaciones de color se realizan en el espacio de color RGB.</para>
- </sect1>
-
- <sect1 id="cms-how-to-get-icc-profile">
- <title>Cómo obtener mi perfil de color de pantalla o impresora</title>
-
- <para>Existen algunas formas de obtener un perfil de color.</para>
-
- <sect2 id="cms-icc-from-cd-or-internet">
- <title>Desde un CD o desde Internet</title>
-
- <para>Muchos fabricantes de hardware ponen sus perfiles de color en el CD de instalación. Si tiene uno (para su monitor o impresora) puede usarlo. O puede descargarlo desde Internet (generalmente desde la sección de soporte de la página web del fabricante). Algunos fabricantes de cámaras (Nikon, Canon) también proporcionan perfiles de color ICC.</para>
- </sect2>
-
- <sect2 id="cms-icc-from-calibrating-and-profiling">
- <title>Calibrado y perfilado</title>
-
- <para>Se pueden conseguir los mejores resultados calibrando y perfilando los dispositivos con un dispositivo medidor. No es muy difícil pero significa que necesita un espectrofotómetro para realizar todas las mediciones y crear un perfil ICC.</para>
-
- <para>Si usa Windows o Mac OS X puede usar el sofware del fabricante que viene con un espectrofotómetro. En GNU/Linux tendrá que usar o <ulink url="http://www.argyllcms.com">Argyll</ulink>, que es un conjunto versátil de herramientas para la línea de comandos, o <ulink url="http://lprof.sourceforge.net/">LProf<ulink url="http://www.argyllcms.com"> que tiene una interfaz gráfica de usuario.</ulink></ulink></para>
- <para>Consulte la documentación de los fabricantes de hardware y software de terceros para obtener más detalles.</para>
- </sect2>
-
- <sect2 id="cms-icc-from-embedding">
- <title>Empotrado</title>
-
- <para>Los formatos de imágenes (tales como TIFF, JPEG, PNG...) pueden contener perfiles de color empotrados. Si la gestión de color está activada, F-Spot busca esos perfiles de color empotrados y los tiene en consideración.</para>
- </sect2>
- </sect1>
-
- <sect1 id="cms-how-to-use">
- <title>Cómo usar la gestión de color en F-Spot</title>
-
- <para>La gestión de color en F-Spot sólo puede usar perfiles RGB por el momento (u no puede ver otros perfiles en F-Spot).</para>
-
- <itemizedlist>
- <listitem>
- <para>Copie su perfil de colores en el directorio <filename class="directory">/usr/share/color/icc</filename> o <filename class="directory">/usr/local/share/color/icc</filename>.</para>
- </listitem>
- <listitem>
- <para>Activar la gestión de color con el menú <menuchoice><guimenu>Editar</guimenu><guimenuitem>Preferencias</guimenuitem></menuchoice>.</para>
- </listitem>
- <listitem>
- <para>Seleccione <guilabel>Mostrar</guilabel> y <guilabel>Salida</guilabel> de perfiles.</para>
- </listitem>
- </itemizedlist>
-
- <tip>
- <para>Puede usar <ulink url="http://burtonini.com/blog/computers/xicc">xicc</ulink> para cargar un perfil ICC para mostrar y usar el perfil cargado desde F-Spot. Simplemente marque la casilla de selección <guilabel>Intentar usar el perfil de visualización del sistema</guilabel>.</para>
- </tip>
- </sect1>
- </chapter>
-
- <chapter id="extend">
- <title>Extender la funcionalidad</title>
-
- <sect1 id="extend-what-extensions-are">
- <title>¿Qué son las extensiones?</title>
-
- <para>Las extensiones de F-Spot son formas de añadir nuevas funcionalidades a la aplicación. F-Spot soporta dos tipos de extensiones: exportadoras (que permiten exportar fotos a los nuevos servicios web o almacenamiento de datos) y herramientas (que permiten nuevas formas de corrección de color, búsqueda de duplicado de fotos, etc.). Las extensiones están distribuidas en forma de paquetes de extensión.</para>
- <para>En la mejor tradición de no reinventar la rueda, las extensiones pueden utilizar otras extensiones, lo que significa que una extensión no puede trabajar si otra extensión no está instalada. Este concepto de dependencia realmente significa que</para>
- <itemizedlist>
- <listitem>
- <para>no puede instalar una extensión si la extensión depende de otra y no está en el sistema</para>
- </listitem>
- <listitem>
- <para>no puede eliminar una extensión de la que depende otra extensión</para>
- </listitem>
- </itemizedlist>
- </sect1>
-
- <sect1 id="extend-managing-extensions">
- <title>Gestionar las extensiones</title>
-
- <para>Para gestionar extensiones elija el elmenento del menú <menuchoice><guimenu>Editar</guimenu><guimenuitem>Gestionar extensiones</guimenuitem></menuchoice>.</para>
-
- <sect2 id="extend-managing-extensions-managing-extension-repositories">
- <title>Gestionar repositorios de extensiones</title>
-
- <para>En pocas palabras, los repositorios son almacenes de extensiones. Pueden ser tanto de red como locales. Para añadir un nuevo repositorio pulse el botón Repositorios, elija el tipo de respositorio que quiere añadir y proporcione el URL o la ruta. Si el URL o la ruta especificadas no contienen un archivo de descripción (índice) para las extensiones, se mostrará un mensaje advirtiéndole de ello.</para>
- <para>Para quitar un repositorio pulse el botón <guibutton>Repositorios</guibutton> de nuevo, elija el repositorio que quiere eliminar y pulse el botón <guibutton>Borrar</guibutton>.</para>
- </sect2>
-
- <sect2 id="extend-managing-extensions-installing-and-updating-extensions">
- <title>Instalar y actualizar extensiones</title>
-
- <para>Para instalar estensiones pulse el botón <guibutton>Instalar complementos…</guibutton> En el nuevo cuadro de diálogo presentado</para>
- <orderedlist>
- <listitem>
- <para>Elija repositorio para instalar desde todos los repositorios conocidos o sólo uno de los repositorios disponibles.</para>
- </listitem>
- <listitem>
- <para>Elija qué paquete de extensiones quiere ver: todos, sólo nuevos, sólo actualizados.</para>
- </listitem>
- <listitem>
- <para>Pulse el botón <guibutton>Actualizar</guibutton> para actualizar la lista de paquetes de extensiones disponibles según un criterio dado.</para>
- </listitem>
- <listitem>
- <para>Elija las extensiones que quiere instalar/actualizar, pulse <guibutton>Información</guibutton> para ver un resumen del paquete seleccionado.</para>
- </listitem>
- <listitem>
- <para>Pulse <guibutton>Siguiente</guibutton> para continuar con la instalación.</para>
- </listitem>
- </orderedlist>
- </sect2>
-
- <sect2 id="extend-managing-extensions-enabling-and-disabling-extensions">
- <title>Habilitar y desabilitar extensiones</title>
-
- <para>Quizá quiera activar o desactivar temporalmente un paquete de extensión particular, por ejemplo, si la extensión no es suficientemente estable para manejar una gran cantidad de fotos o si los menús se llenan con las extensiones.</para>
- <para>En el diálogo <guilabel>Gestionar extensiones</guilabel> seleccione el paquete de extensión y pulse el botón <guibutton>Activar</guibutton> o <guibutton>Desactivar</guibutton>.</para>
- </sect2>
-
- <sect2 id="extend-managing-extensions-removing-extensions">
- <title>Quitar extensiones</title>
-
- <para>Si no necesita ninguna extensión puede eliminarlas completamente del sistema. En el diálogo <guilabel>Gestionar extensiones</guilabel> selecciona el paquete de extensión que quiere eliminar y pulse <guibutton>Borrar</guibutton>.</para>
- </sect2>
-
- <sect2 id="extend-managing-extensions-reading-summary-of-extensions">
- <title>Leer el resumen de las extensiones</title>
-
- <para>Cada paquete de extensión contiene metadatos que proporcionan la siguiente información acerca de las extensiones:</para>
-
- <orderedlist>
- <listitem>
- <para>Descripción, que por lo general se refiere al propósito de la extensión</para>
- </listitem>
- <listitem>
- <para>Versión</para>
- </listitem>
- <listitem>
- <para>Autor</para>
- </listitem>
- <listitem>
- <para>Dependecias</para>
- </listitem>
- </orderedlist>
-
- <para>En el diálogo <guilabel>Gestión de Extensiones</guilabel> seleccione el paquete de la extensión para la que quiera leer el resumen y pulse <guibutton>Información</guibutton>.</para>
- </sect2>
- </sect1>
-
- <sect1 id="extend-developing-extensions">
- <title>Desarrollo de extensiones</title>
-
- <para>El documento <ulink url="http://f-spot.org/Extend_F-Spot">ampliando F-Spot</ulink> proporciona instrucciones acerca del desarrollo de sus propias extensiones para F-Spot.</para>
- </sect1>
- </chapter>
-
- <chapter id="shortcuts">
- <title>Atajos</title>
-
- <sect1 id="Global-Shortcuts">
- <title>Atajos globales</title>
- <informaltable frame="all">
- <tgroup cols="2">
- <thead>
- <row>
- <entry>Clave</entry>
- <entry>Acción</entry>
- </row>
- </thead>
- <tbody>
- <row>
- <entry>
- <keycap>[</keycap>
- </entry>
- <entry>Rotar las fotos seleccionadas a la izquierda</entry>
- </row>
- <row>
- <entry>
- <keycap>]</keycap>
- </entry>
- <entry>Rotar las fotos seleccionadas a la derecha</entry>
- </row>
- <row>
- <entry>
- <keycap>Del</keycap>
- </entry>
- <entry>Quitar las fotos seleccionadas del catálogo de F-Spot</entry>
- </row>
- <row>
- <entry>
- <keycombo><keycap>Mayús</keycap><keycap>Del</keycap></keycombo>
- </entry>
- <entry>Borrar permanentemente las fotos seleccionadas de la unidad. Si es posible, se moverán a la papelera.</entry>
- </row>
-
- <row>
- <entry>
- <keycap>t</keycap>
- </entry>
- <entry>Ver o editar las etiquetas de las fotos seleccionadas</entry>
- </row>
- <row>
- <entry>
- <keycap>F11</keycap>
- </entry>
- <entry>Ver a pantalla completa</entry>
- </row>
- <row>
- <entry>
- <keycombo><keycap>Ctrl</keycap><keycap>I</keycap></keycombo>
- </entry>
- <entry>Muestra la información acerca de la foto</entry>
- </row>
- <row>
- <entry>
- <keycombo><keycap>Ctrl</keycap><keycap>Igual</keycap></keycombo>
- </entry>
- <entry>Ampliar</entry>
- </row>
- <row>
- <entry>
- <keycombo><keycap>Ctrl</keycap><keycap>Menos</keycap></keycombo>
- </entry>
- <entry>Reducir</entry>
- </row>
- <row>
- <entry>
- <keycombo><keycap>Ctrl</keycap><keycap>N</keycap></keycombo>
- </entry>
- <entry>Importar fotos</entry>
- </row>
- <row>
- <entry>
- <keycombo><keycap>Alt</keycap><keycap>0-5</keycap></keycombo>
- </entry>
- <entry>Alt mas un número del 0 al 5 puntúan las imágenes seleccionadas</entry>
- </row>
- </tbody>
- </tgroup>
- </informaltable>
- </sect1>
-
- <sect1 id="shortcuts-browse-mode">
- <title>Atajos del modo examinar</title>
- <informaltable frame="all">
- <tgroup cols="2">
- <thead>
- <row>
- <entry>Clave</entry>
- <entry>Acción</entry>
- </row>
- </thead>
- <tbody>
- <row>
- <entry>
- <keycombo><keycap>Ctrl</keycap><keycap>A</keycap></keycombo>
- </entry>
- <entry>Seleccionar todo</entry>
- </row>
- <row>
- <entry>
- <keycombo><keycap>Ctrl</keycap><keycap>Mayús</keycap>
- <keycap>A</keycap></keycombo>
- </entry>
- <entry>Deseleccionar todo</entry>
- </row>
- <row>
- <entry>Teclas de flechas o <keycap>H</keycap>, <keycap>J</keycap>, <keycap>K</keycap>, <keycap>L</keycap></entry>
- <entry>Mover el foco</entry>
- </row>
- <row>
- <entry><keycap>Ctrl</keycap>-tecla de flecha</entry>
- <entry>Mueve el foco sin cambiar la selección</entry>
- </row>
- <row>
- <entry>
- <keycap>Barra espaciadora</keycap>
- </entry>
- <entry>Selecciona o deselecciona la foto que tiene el foco</entry>
- </row>
- <row>
- <entry>
- <keycombo><keycap>Mayús</keycap>
- <keycap>Tecla de flecha</keycap></keycombo>
- </entry>
- <entry>Cambia la selección de foto</entry>
- </row>
- <row>
- <entry>
- <keycombo><keycap>Ctrl</keycap><keycap>Mayús</keycap>
- <keycap>flecha izquierda o flecha derecha</keycap></keycombo>
- </entry>
- <entry>Añadir/quitar todas las fotos en la fila, en la dirección pulsada, a la selección</entry>
- </row>
- <row>
- <entry>
- <keycap>V</keycap>
- </entry>
- <entry>Aparecerá una vista previa más grande de la imagen apuntada por el ratón</entry>
- </row>
- <row>
- <entry>
- <keycombo><keycap>Mayús</keycap><keycap>V</keycap></keycombo>
- </entry>
- <entry>Aparecerá una vista previa y un histograma de color de la imagen apuntada por el ratón</entry>
- </row>
- </tbody>
- </tgroup>
- </informaltable>
- </sect1>
-
- <sect1 id="shortcuts-tag">
- <title>Atajos de las etiquetas</title>
- <informaltable frame="all">
- <tgroup cols="2">
- <thead>
- <row>
- <entry>Clave</entry>
- <entry>Acción</entry>
- </row>
- </thead>
- <tbody>
- <row>
- <entry>
- <keycap>F2</keycap>
- </entry>
- <entry>Renombrar la etiqueta seleccionada</entry>
- </row>
- <row>
- <entry>
- <keycombo><keycap>Ctrl</keycap><keycap>T</keycap></keycombo>
- </entry>
- <entry>Añadir etiquetas al seleccionar las fotos</entry>
- </row>
- <row>
- <entry>n/d</entry>
- <entry>Arrastrar y soltar para mover las etiquetas</entry>
- </row>
- <row>
- <entry>n/d</entry>
- <entry>Escriba el nombre de una etiqueta para saltar a ella (sólo funciona si la etiqueta se muestra/expande)</entry>
- </row>
- </tbody>
- </tgroup>
- </informaltable>
- </sect1>
-
- <sect1 id="shortcuts-edit-mode">
- <title>Modo de edición de atajos</title>
- <informaltable frame="all">
- <tgroup cols="2">
- <thead>
- <row>
- <entry>Clave</entry>
- <entry>Acción</entry>
- </row>
- </thead>
- <tbody>
- <row>
- <entry><keycap>Subir página</keycap>, <keycap>Retroceso</keycap>, <keycap>B</keycap></entry>
- <entry>Ir a la foto anterior</entry>
- </row>
- <row>
- <entry><keycap>Bajar página</keycap>, <keycap>Barra espaciadora</keycap>, <keycap>N</keycap></entry>
- <entry>Ir a la siguiente foto</entry>
- </row>
- <row>
- <entry>Teclas de flechas o <keycap>H</keycap>, <keycap>J</keycap>, <keycap>K</keycap>, <keycap>L</keycap></entry>
- <entry>Ir a la Anterior/Siguiente foto o moverse por una foto ampliada</entry>
- </row>
- <row>
- <entry>
- <keycap>R</keycap>
- </entry>
- <entry>Ir a una foto aleatoria</entry>
- </row>
- <row>
- <entry>
- <keycap>f</keycap>
- </entry>
- <entry>Ver a pantalla completa</entry>
- </row>
- <row>
- <entry>
- <keycap>0</keycap>
- </entry>
- <entry>Ajustar la imagen a la pantalla</entry>
- </row>
- <row>
- <entry>
- <keycap>1</keycap>
- </entry>
- <entry>Factor de ampliación por 1.0 (1 píxel de pantalla por píxel de imagen)</entry>
- </row>
- <row>
- <entry>
- <keycap>2</keycap>
- </entry>
- <entry>Factor de ampliación de 2.0 (4 píxeles de pantalla por píxel de imagen)</entry>
- </row>
- <row>
- <entry>
- <keycap>Escape</keycap>
- </entry>
- <entry>Vuelve al modo examinador</entry>
- </row>
- <row>
- <entry>
- <keycap>V</keycap>
- </entry>
- <entry>Examine la foto con la lupa. Pulse dos veces sobre la lupa o pulse <keycap>v</keycap> de nuevo para cerrarla.</entry>
- </row>
- <row>
- <entry><keycap>Mayús</keycap>-rueda del ratón</entry>
- <entry>Desplazamiento de carrete más rápido</entry>
- </row>
- <row>
- <entry>
- <keycap>i</keycap>
- </entry>
- <entry>Mostrar la visibilidad de la caja de información «(sólo en modo a pantalla completa)»</entry>
- </row>
- </tbody>
- </tgroup>
- </informaltable>
- </sect1>
- </chapter>
-
-</book>
diff --git a/docs/f-spot.omf.in b/docs/f-spot.omf.in
deleted file mode 100644
index 9a124ce..0000000
--- a/docs/f-spot.omf.in
+++ /dev/null
@@ -1,9 +0,0 @@
-<?xml version="1.0" standalone="no"?>
-<omf>
- <resource>
- <subject category="GNOME|Applications|Graphics"/>
- <type>user's guide</type>
- <relation seriesid="f248a486-a60c-11db-804e-a9087ba0dc2d"/>
- <rights type="GNU FDL" license.version="1.1" holder=""/>
- </resource>
-</omf>
diff --git a/docs/fr/f-spot.xml b/docs/fr/f-spot.xml
deleted file mode 100644
index 44ca518..0000000
--- a/docs/fr/f-spot.xml
+++ /dev/null
@@ -1,924 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!DOCTYPE book PUBLIC "-//OASIS//DTD DocBook XML 4.1.2//EN" "http://www.oasis-open.org/docbook/xml/4.1.2/docbookx.dtd">
-<book id="f-spot" lang="fr">
- <bookinfo>
- <title>Manuel de F-Spot</title>
- <abstract role="description">
- <para>Ceci est le manuel d'utilisation de F-Spot, un gestionnaire de photos pour GNOME.</para>
- </abstract>
- <subtitle>Ceci est le manuel d'utilisation de F-Spot, un gestionnaire de photos pour GNOME.</subtitle>
- <copyright>
- <year>2007-2009</year>
- <holder>Aaron Bockover, Gabriel Burt, Miguel de Icaza, Bengt Thuree</holder>
- </copyright><copyright><year>2007</year><holder>Stephane Delcroix (stephane at delcroix.org)</holder></copyright><copyright><year>2007-2008</year><holder>Claude Paroz (claude at 2xlibre.net)</holder></copyright><copyright><year>2008</year><holder>Bruno Brouard (annoa.b at gmail.com)</holder></copyright>
- <publisher>
- <publishername>Projet de documentation GNOME</publishername>
- </publisher>
- <authorgroup>
- <author>
- <firstname>Miguel</firstname>
- <surname>de Icaza</surname>
- </author>
- <author>
- <firstname>Aaron</firstname>
- <surname>Bockover</surname>
- </author>
- <author>
- <firstname>Bengt</firstname>
- <surname>Thuree</surname>
- </author>
- <author>
- <firstname>Gabriel</firstname>
- <surname>Burt</surname>
- </author>
- <author>
- <firstname>Alexandre</firstname>
- <surname>Prokoudine</surname>
- </author>
- <author role="maintainer">
- <firstname>Stephane</firstname>
- <surname>Delcroix</surname>
- </author>
- </authorgroup>
- <!--<include href="legal.xml" xmlns="http://www.w3.org/2001/XInclude"/>-->
- <revhistory>
- <revision>
- <revnumber>0.5</revnumber>
- <date>25/09/2008</date>
- </revision>
- <revision>
- <revnumber>0.4</revnumber>
- <date>12/09/2008</date>
- </revision>
- <revision>
- <revnumber>0.3</revnumber>
- <date>26/07/2007</date>
- </revision>
- </revhistory>
- </bookinfo>
-
- <chapter id="organizing">
- <title>Organisation de vos photos</title>
-
- <sect1 id="import">
- <title>Importation</title>
-
- <para>Vous pouvez importer des photos depuis votre disque dur ou depuis votre appareil photo. Lorsque vous importez dans F-Spot des photos depuis votre appareil photo, c'est toujours une copie qui est effectuée, vous laissant libre de vider la mémoire de votre appareil photo. Par défaut, F-Spot fait aussi une copie des photos importées depuis votre disque dur. Décochez l'option <guilabel>Copier</guilabel> du dialogue d'importation ou maintenez la touche <keycap>Maj</keycap> lorsque vous déposez des photos dans F-Spot si vous ne voulez pas en faire une copie.</para>
-
- <para>Par défaut, F-Spot copie vos photos dans le dossier <filename class="directory">~/Photos</filename>. Vous pouvez changer le dossier utilisé par F-Spot dans la boîte de dialogue <guilabel>Préférences</guilabel> (<menuchoice><guimenu>Édition</guimenu><guimenuitem>Préférences</guimenuitem></menuchoice>). Vous pouvez également désactiver la copie physique des images dans ce répertoire de façon à ce que F-Spot ne fasse que référence à des fichiers existants. Pour cela, décochez la case <guilabel>Copier les fichiers vers le dossier Photos</guilabel>.</para>
- <para>Si vous pensez que vos photos ont déjà pu être importées depuis la source choisie, vous pouvez utiliser l'option <guilabel>Détecter les doublons</guilabel>. Dans ce cas, F-Spot essaie de déterminer si la même photo est déjà présente dans la base de données et, le cas échéant, n'importe pas la photo concernée.</para>
- <para>Si toutes les photos que vous importez en une opération ont été prises lors d'un événement particulier, ou qu'elles ont d'autres caractéristiques en commun, vous pouvez créer une étiquette afin de les retrouver facilement par la suite. Pour cela, suivez les instructions de la <xref linkend="tag"/> pour créer une nouvelle étiquette. Ensuite, lors de l'importation, cochez <guilabel>Attacher une étiquette</guilabel> et choisissez l'étiquette que vous avez créée.</para>
-
- <tip>
- <para>
- F-Spot uses a database stored at
- <filename>~/.config/f-spot/photos.db</filename>. Note, to access it, use
- the sqlite3 command. You can also manually specify path to a database by
- running F-Spot with <option>-b</option> option.
- </para>
- </tip>
-
- <para>Après l'importation, F-Spot n'affiche que les photos de la dernière série d'importation. Voir <xref linkend="enjoying-search"/> pour apprendre à gérer les séries d'importation.</para>
- <para>Vous pouvez également importer directement à partir de Mozilla <ulink url="http://www.mozilla-europe.org/fr/firefox/">Firefox</ulink> et <ulink url="http://www.mozilla-europe.org/fr/products/thunderbird/">Thunderbird</ulink> en utilisant les extensions d'importation F-Spot <ulink url="https://addons.mozilla.org/fr/firefox/addon/7091">Firefox</ulink> et <ulink url="https://addons.mozilla.org/fr/thunderbird/addon/7011">Thunderbird</ulink> écrites par <ulink url="http://personalpages.tds.net/~cdovel/">Pizzach</ulink>.</para>
- </sect1>
-
- <sect1 id="edit">
- <title>Retouches</title>
-
- <para>Si vous double-cliquez sur une image ou tapez sur la touche Entrée, vous activez le mode Retouches, qui permet de corriger les yeux rouges, de rogner les photos et d'ajuster la luminosité ou les couleurs.</para>
-
- <sect2 id="edit-versions">
- <title>Versions</title>
-
- <para>
- When you edit your photos, a new copy (called a version) is created,
- so your original is never altered. After your first edit to a photo, subsequent
- edits will modify the same version. If you want to create multiple versions
- of your photo, perhaps with different cropping or coloring, you can do so
- via the <menuchoice><guimenu>File</guimenu>
- <guimenuitem>Create new version</guimenuitem></menuchoice> option.
- </para>
- </sect2>
-
- <sect2 id="edit-crop">
- <title>Rognage</title>
-
- <para>
- Cropping an image is a great way to improve the quality of a photograph by
- change how it is framed. You crop a photo by selecting the part of the photo
- you want to keep. If you want your photo to be the exact dimensions necessary
- for a certain print size, you can constrain the kind of selection F-Spot will allow
- you to draw by choosing the appropriate size from the constraint drop down.
- See the <xref linkend="edit-remove-red-eye"/> below for details on making
- a selection on your photo.
- </para>
- <figure>
- <title>Outil de rognage</title>
- <mediaobject>
- <imageobject>
- <imagedata fileref="figures/f-spot-crop.png"/>
- </imageobject>
- </mediaobject>
- </figure>
- <para>Une fois que vous avez fait votre sélection, vous devez cliquer sur le bouton Rogner pour finaliser le rognage. Si vous faites cela sur un original, une nouvelle version de la photo sera créée.</para>
- </sect2>
-
- <sect2 id="edit-straighten">
- <title>Redressement</title>
-
- <para>L'effet de redressement est un outil qui permet de remettre à niveau une photo (assez utile pour des paysages pris sans trépied) quand la ligne (imaginaire) de l'horizon n'est pas à 0°. Cet outil tourne une image d'un angle défini et rogne automatiquement l'image obtenue afin de toujours avoir un rectangle parfait.</para>
- <figure>
- <title>Outil de redressement</title>
- <mediaobject>
- <imageobject>
- <imagedata fileref="figures/f-spot-straighten.png"/>
- </imageobject>
- </mediaobject>
- </figure>
- </sect2>
-
- <sect2 id="edit-adjust-colors">
- <title>Ajustement des couleurs</title>
-
- <para>Pour ajuster la luminosité, le contraste et les couleurs d'une photo, cliquez sur l'icône <guibutton>Ajuster les couleurs de la photo</guibutton> pour ouvrir la boîte de dialogue d'ajustement. Changez alors les paramètres et enregistrez-les avec <guibutton>Valider</guibutton>.</para>
- <figure>
- <title>Outils d'ajustement des couleurs</title>
- <mediaobject>
- <imageobject>
- <imagedata fileref="figures/f-spot-adjust-colors.png"/>
- </imageobject>
- </mediaobject>
- </figure>
- </sect2>
-
- <sect2 id="edit-auto-color">
- <title>Ajustement automatique des couleurs</title>
-
- <para>Cet effet ajuste automatiquement les niveaux de couleurs afin d'obtenir une photo aux couleurs bien équilibrées. Il améliore mieux les photos prises en mode balance automatique des blancs, lorsque l'appareil photo n'a pas réussi à le faire correctement.</para>
- <figure>
- <title>Ajustement automatique des couleurs</title>
- <mediaobject>
- <imageobject>
- <imagedata fileref="figures/f-spot-autocolor.png"/>
- </imageobject>
- </mediaobject>
- </figure>
- </sect2>
-
- <sect2 id="edit-desaturate">
- <title>Décoloriser</title>
-
- <para>Pour convertir une photo couleur en noir et blanc, ouvrez la photo choisie et cliquez sur le bouton <guibutton>Désaturer</guibutton>.</para>
- <figure>
- <title>Outil de décolorisation</title>
- <mediaobject>
- <imageobject>
- <imagedata fileref="figures/f-spot-desaturate.png"/>
- </imageobject>
- </mediaobject>
- </figure>
- </sect2>
-
- <sect2 id="edit-sepia">
- <title>Sépia</title>
-
- <para>Pour convertir une photo couleur dans un vieux style de photo aux tons sépia, ouvrez la photo choisie et cliquez sur le bouton <guibutton>Sépia</guibutton>.</para>
- <figure>
- <title>Outil de décolorisation</title>
- <mediaobject>
- <imageobject>
- <imagedata fileref="figures/f-spot-sepia.png"/>
- </imageobject>
- </mediaobject>
- </figure>
- </sect2>
-
- <sect2 id="edit-remove-red-eye">
- <title>Suppression des yeux rouges</title>
-
- <para>Pour supprimer les yeux rouges sur une photo, vous devez sélectionner une zone contenant les yeux. Vous pouvez zoomer l'image pour sélectionner exactement les yeux sur la photo. Il vous est possible de corriger les yeux d'une même personne en une seule fois, mais également ceux de plusieurs personnes d'un coup. Si cela ne vous convient pas ou si la zone sélectionnée contient des zones rouge vif (lèvres...), vous devrez probablement corriger un œil rouge à la fois.</para>
- <para>Pour faire une sélection, cliquez sur un des angles du rectangle qui formera votre sélection, puis glissez votre souris le long de la diagonale du rectangle de sélection et relâchez le bouton. Vous pouvez redimensionner votre sélection en faisant glisser ses côtés et vous pouvez la déplacer là où vous voulez.</para>
- <para>Lorsque vous avez sélectionné une zone, vous pouvez enlever le rouge de celle-ci en cliquant sur le bouton yeux rouges sous la photo.</para>
- <figure>
- <title>Outil yeux rouges</title>
- <mediaobject>
- <imageobject>
- <imagedata fileref="figures/f-spot-red-eye.png"/>
- </imageobject>
- </mediaobject>
- </figure>
- <tip>
- <para>Vous pouvez modifier le seuil pour la détection des yeux rouges en modifiant la clé gconf <filename class="directory">/apps/f-spot/edit/redeye_threshold</filename>.</para>
- </tip>
- </sect2>
-
- <sect2 id="edit-soft-focus">
- <title>Flou artistique</title>
-
- <para>En photographie, renforcer la netteté d'une zone d'une photo en rendant flou tout le reste est une manière de mettre en évidence et d'attirer l'attention. Ceci est accompli à l'aide d'une lentille qui permet la prise de vue à une faible distance devant et au-delà du sujet qui est visé. L'effet de flou artistique est une manière d'imiter l'effet d'une telle lentille.</para>
- <figure>
- <title>Outil flou artistique</title>
- <mediaobject>
- <imageobject>
- <imagedata fileref="figures/f-spot-soft-focus.png"/>
- </imageobject>
- </mediaobject>
- </figure>
- <para>Cliquez pour choisir le point central de la zone que vous désirez voir nette et réglez la quantité de flou, puis cliquez sur <guibutton>Appliquer</guibutton>.</para>
- </sect2>
-
- <sect2 id="edit-sharpen">
- <title>Renforcement de la netteté</title>
-
- <para>Les photographies floues et la plupart des images numérisées nécessitent souvent une correction de netteté. L'effet de correction de netteté renforce la netteté des éléments sans augmenter le bruit ou les défauts. Pour renforcer la netteté d'une photo, choisissez <menuchoice><guimenu>Édition</guimenu><guimenuitem>Renforcer la netteté...</guimenuitem></menuchoice> et indiquez les valeurs suivantes :</para>
-
- <itemizedlist>
- <listitem>
- <para><parameter class="option">Taux</parameter> — degré de renforcement de la netteté.</para>
- </listitem>
- <listitem>
- <para><parameter class="option">Rayon</parameter> — nombre de pixels de chaque côté d'un bord qui seront affectés par le renforcement de netteté. Les images haute résolution permettent un rayon plus grand.</para>
- </listitem>
- <listitem>
- <para><parameter class="option">Seuil</parameter> — la différence minimale en valeurs de pixels qui détermine un bord, auquel un renforcement de netteté doit être appliqué. Cela permet d'éviter la création de défauts sur les visages et sur les surfaces d'eau ou de ciel.</para>
- </listitem>
- </itemizedlist>
- </sect2>
-
- <sect2 id="edit-describe">
- <title>Description</title>
-
- <para>Vous pouvez aussi ajouter une description de l'image en tapant un texte dans la zone de saisie située juste sous l'image.</para>
- <para>Une fois que vous avez fait votre sélection, vous devez cliquer sur le bouton Rogner pour finaliser le rognage. Si vous faites cela sur un original, une nouvelle version de la photo sera créée.</para>
- </sect2>
-
- <sect2 id="edit-adjust-time">
- <title>Réglage de la date</title>
-
- <para>Dans les deux modes « Navigation » et « Retouches », vous pouvez régler la date d'une ou de plusieurs photos (<menuchoice><guimenu>Édition</guimenu><guimenuitem>Régler la date</guimenuitem></menuchoice>). Régler la date de plusieurs photos d'un coup vous aide à décaler toute une série d'importation si par exemple la date de votre appareil photo est mal réglée ou si vous avez oublié de la régler à l'heure d'été.</para>
- </sect2>
- </sect1>
-
- <sect1 id="tag">
- <title>Étiquettes</title>
- <para>F-Spot vous permet d'organiser et d'apprécier vos photos en leur associant diverses étiquettes personnalisables. F-Spot propose quelques étiquettes par défaut pour débuter ; vous êtes libre de les modifier ou d'en ajouter de nouvelles. Par exemple, si vous voulez créer une étiquette pour un événement spécifique, vous pouvez créer une nouvelle étiquette d'après le nom de cet événement sous l'étiquette Événements.</para>
- <para>Il y a plusieurs façons d'étiqueter vos photos :</para>
- <itemizedlist>
- <listitem>
- <para>glisser la ou les photo(s) sur l'étiquette</para>
- </listitem>
- <listitem>
- <para>glisser l'étiquette sur la ou les photo(s)</para>
- </listitem>
- <listitem>
- <para>par le menu contextuel de la photo (clic droit)</para>
- </listitem>
- <listitem>
- <para>par les menus Étiquettes et Édition</para>
- </listitem>
- <listitem>
- <para>
- by typing them in. Press <keycap>t</keycap> to pop up the tag
- entry bar. Here you can enter the tags, separated by commas.
- </para>
- <para>
- You can also use auto-completion in this entry bar: After
- entering the beginning of a tag name, press
- <keycap>Tab</keycap> to see the first possible completion. You can
- cycle between other possible completions by pressing
- <keycap>Tab</keycap> again, and backwards with
- <keycombo action="simul"><keycap>Shift</keycap><keycap>Tab</keycap></keycombo>.
- To confirm the suggested completion and enter a new tag, press
- <keycap>,</keycap>. By pressing <keycap>Enter</keycap> you
- leave the tag entry bar, possibly confirming the current
- completion. To abort the auto completion, just keep on typing.
- </para>
- </listitem>
- </itemizedlist>
- <para>La première photo que vous associez à une étiquette sera utilisée comme vignette d'étiquette. Vous pouvez toujours modifier le nom, l'étiquette parente ou la vignette par le menu contextuel (clic droit) de l'étiquette et en choisissant <guilabel>Éditer l'étiquette</guilabel>.</para>
- <para>Vous pouvez modifier la parenté d'une étiquette en la glissant où vous voulez. De même, vous pouvez directement éditer le nom d'une étiquette en la sélectionnant et en pressant <keycap>F2</keycap>. Enfin, si l'arbre des étiquettes est actif (par exemple, si vous venez de cliquer sur une étiquette), vous pouvez commencer à taper le nom d'une étiquette, et vous arriverez automatiquement à l'étiquette correspondante.</para>
-
- <para>Vous pouvez également changer la taille des icônes des étiquettes dans la barre latérale ou même rendre les icônes invisibles en choisissant l'option souhaitée dans le menu <menuchoice><guimenu>Affichage</guimenu><guimenuitem>Icônes des étiquettes</guimenuitem></menuchoice>.</para>
-
- <tip>
- <para>F-Spot peut écrire les étiquettes comme des champs de meta-données dans les fichiers JPEG. Les étiquettes pour les divers fichiers RAW, PNG, TIFF et autres sont écrits dans la base de données F-Spot. Vous devrez refaire l'étiquetage de ces fichiers si vous les importez à nouveau.</para>
- </tip>
- </sect1>
- </chapter>
-
- <chapter id="enjoying">
- <title>Consultation des photos</title>
- <sect1 id="enjoying-browse">
- <title>Navigation</title>
- <para>Vous pouvez utiliser l'outil de défilement pour parcourir vos photos par mois ou par répertoire. Pour modifier ce comportement, allez dans le menu <menuchoice><guimenu>Affichage</guimenu><guimenuitem>Arrangé par</guimenuitem></menuchoice>.</para>
- </sect1>
- <sect1 id="enjoying-search">
- <title>Recherche</title>
-
- <para>
- F-Spot uses search filters to help you better define search criteria.
- </para>
-
- <sect2 id="enjoying-search-tags">
- <title>Étiquettes</title>
-
- <para>Vous pouvez commencer une recherche en double-cliquant ou en activant une étiquette de la liste. Vous pouvez aussi afficher la barre de recherche via le menu <menuchoice><guimenu>Rechercher</guimenu><guimenuitem>Afficher la barre de recherche</guimenuitem></menuchoice>. Lorsque la barre de recherche est affichée, vous pouvez y glisser des étiquettes depuis la liste.</para>
- <para>Pour trouver les photos qui ont deux étiquettes bien précises, activez la première étiquette dans la liste ou glissez-la dans la barre de recherche, puis glissez la seconde étiquette sur la première. Vous pouvez aussi ouvrir le menu contextuel (clic droit) de la seconde étiquette dans la liste ou utiliser le menu <guimenu>Rechercher</guimenu> et choisir <guimenuitem>Chercher avec</guimenuitem> et sélectionner la première étiquette (ou un groupe d'étiquettes).</para>
- <para>Vous pouvez glisser une étiquette dans la barre de recherche pour changer son association : chercher les images contenant les 2 étiquettes ou l'une ou l'autre étiquette.</para>
- <para>Vous pouvez rechercher les images qui ne possèdent pas une certaine étiquette en double-cliquant sur une étiquette dans la barre de recherche. Vous pouvez aussi choisir <guimenuitem>Exclure</guimenuitem> dans le menu contextuel de l'étiquette dans la barre de recherche.</para>
- <para>Pour enlever une étiquette de la recherche, glissez-la hors de la barre ou choisissez <guimenuitem>Enlever</guimenuitem> dans son menu contextuel.</para>
- <para>Par défaut, les photos possédant l'étiquette <emphasis>Masqué</emphasis> ne seront pas affichées. Choisissez explicitement cette étiquette lors de votre recherche pour afficher ces photos.</para>
- </sect2>
-
- <sect2 id="enjoying-search-import-rolls">
- <title>Séries d'importation</title>
- <para>F-Spot se souvient des dates d'importation des photos. Utilisez <menuchoice><guimenu>Rechercher</guimenu><guisubmenu>Série importée</guisubmenu><guimenuitem>Dernière série importée</guimenuitem></menuchoice> pour limiter la recherche à votre dernière série d'importation ou utilisez <menuchoice><guimenu>Rechercher</guimenu><guisubmenu>Série importée</guisubmenu><guimenuitem>Choisir série d'importation</guimenuitem></menuchoice> pour affiner votre sélection de photos importées :</para>
- <itemizedlist>
- <listitem>
- <para><parameter class="option">Le</parameter> — pour choisir des photos d'une session d'importation particulière,</para>
- </listitem>
- <listitem>
- <para>
- <parameter class="option">After</parameter> — to select all photos imported begining with a particular importing session
- </para>
- </listitem>
- <listitem>
- <para><parameter class="option">Entre</parameter> — pour choisir toutes les photos importées entre deux sessions d'importation particulières.</para>
- </listitem>
- </itemizedlist>
- <para>
- Every time you change settings of the filter, the amount of selected photos
- will appear in the bottom part of the dialog.
- </para>
- <para>Quand vous appliquez le filtre d'importation de séries, <guilabel>Rechercher : Série d'importation</guilabel> apparaît dans la barre de recherche. Vous pouvez alors ajouter d'autres filtres pour affiner votre recherche.</para>
- <para>Si vous n'avez plus besoin du filtre d'importation de séries, choisissez <menuchoice><guimenu>Recherche</guimenu><guisubmenu>Série importée</guisubmenu><guimenuitem>Effacer le filtre de série</guimenuitem></menuchoice> pour effacer la série d'importation des critères de recherche. Vous pouvez également cliquer sur le bouton fermer (<guibutton>X</guibutton>) de la barre de recherche pour éliminer toutes les options de recherche actuelles.</para>
- <tip>
- <para>Le nombre de séries affichées dans la boîte de dialogue est défini par la clé gconf <filename class="directory">/apps/f-spot/import/gui_roll_history</filename>. La valeur par défaut est 10.</para>
- </tip>
- </sect2>
-
- <sect2 id="enjoying-search-type-to-find">
- <title>Recherche au clavier</title>
- <para>Il existe aussi une fonction de recherche avec le clavier. Tapez <keycap>/</keycap> pour l'activer. Ce mode ne peut être utilisé en même temps que la barre de recherche. Vous pouvez taper des requêtes telles que « Étiquette1 and (ÉtiquetteB or (ÉtiquetteC and ÉtiquetteD)) ». Le mot anglais « and » signifie « et » et le mot anglais « or » signifie « ou ». À tout moment, si votre requête est valide, F-Spot va mettre à jour votre sélection. L'opérateur <emphasis>not</emphasis> (« pas » en français) n'est pas encore pris en charge.</para>
-
- <para>Cette fonction recherche également le texte saisi dans les commentaires et dans les noms de fichiers des photos.</para>
- </sect2>
- </sect1>
-
- <sect1 id="enjoying-fullscreen-mode-and-slideshows">
- <title>Mode plein écran et diaporamas</title>
- <para>Pour limiter l'encombrement et obtenir un affichage plus grand, vous pouvez visualiser vos photos en mode plein écran. Vous pouvez contrôler le passage d'une photo à l'autre, dans les deux sens. Vous pouvez activer n'importe quand le mode plein écran en tapant sur <keycap>F11</keycap> ou en cliquant sur le bouton correspondant de la barre d'outils.</para>
- <figure>
- <title>Plein écran</title>
- <mediaobject>
- <imageobject>
- <imagedata fileref="figures/f-spot-fullscreen.png"/>
- </imageobject>
- </mediaobject>
- </figure>
- <para>En mode diaporama, vous pouvez vous installer confortablement et assister au défilement de vos photos. Vous pouvez lancer un diaporama en cliquant sur le bouton correspondant dans la barre d'outils.</para>
- <figure>
- <title>Diaporama</title>
- <mediaobject>
- <imageobject>
- <imagedata fileref="figures/f-spot-slideshow.png"/>
- </imageobject>
- </mediaobject>
- </figure>
- </sect1>
- </chapter>
-
- <chapter id="sharing">
- <title>Partage des photos</title>
-
- <abstract>
- <para>Il existe plusieurs façons de partager des photos avec F-Spot. Toutes les méthodes ci-dessous ne partagent que les photos sélectionnées lorsque vous les utilisez.</para>
- </abstract>
-
- <sect1 id="sharing-e-mail">
- <title>Courriel</title>
- <para>Envoyez directement vos photos par courrier électronique à partir de F-Spot au moyen du menu <menuchoice><guimenu>Fichier</guimenu><guimenuitem>Envoyer par courriel</guimenuitem></menuchoice>.</para>
- <note>
- <title>Note 1</title>
- <para>Le logiciel de messagerie utilisé est celui défini au niveau de GNOME. Vous pouvez modifier le logiciel par défaut pour votre compte en utilisant l'outil <application>Applications préférées</application> du menu <menuchoice><guimenu>Système</guimenu><guisubmenu>Préférences</guisubmenu></menuchoice>.</para>
- </note>
- <note>
- <title>Note 2</title>
- <para>Si une partie des photos que vous désirez envoyer par courriel est dans un format que F-Spot ne peux lire (par ex. des images RAW), le sélecteur de taille devient inactif et les originaux sont envoyés.</para>
- </note>
- <tip>
- <para>Si vous envoyez des photos redimensionnées, F-Spot conserve les versions modifiées quelque part dans le répertoire <filename class="directory">/tmp</filename> pendant 30 secondes. Ce n'est pas un problème avec Evolution qui fait sa propre copie locale des pièces jointes, mais un peu court si vous utilisez Thunderbird. Vous pouvez modifier le délai en modifiant la clé gconf <filename class="directory">/apps/f-spot/export/email/delete_timeout_seconds</filename>.</para>
- </tip>
- </sect1>
-
- <sect1 id="sharing-print">
- <title>Impression</title>
- <para>Imprimez vos photos au moyen du menu <menuchoice><guimenu>Fichier</guimenu><guimenuitem>Imprimer</guimenuitem></menuchoice>.</para>
- </sect1>
-
- <sect1 id="sharing-burn-to-cd">
- <title>Gravure sur CD</title>
- <para>Gravez vos photos sur CD ou DVD grâce au menu <menuchoice><guimenu>Fichier</guimenu><guisubmenu>Exporter</guisubmenu><guimenuitem>Graver un CD</guimenuitem></menuchoice>.</para>
- </sect1>
-
- <sect1 id="website-gallery-folder">
- <title>Génération d'une galerie Web ou d'un dossier</title>
- <para>La fonctionnalité du menu <menuchoice><guimenu>Fichier</guimenu><guimenuitem>Exporter</guimenuitem><guimenuitem>Exporter vers un dossier</guimenuitem></menuchoice> propose trois façons d'exporter vos images.</para>
- <itemizedlist>
- <listitem>
- <para><guilabel>Utiliser Original</guilabel> exporte les photos prêtes à être exploitées par le logiciel libre de Jakub Steiner <ulink url="http://jimmac.musichall.cz/original.php">Original Photo Gallery</ulink>. Si cette option ne vous dit pas grand chose, elle n'est probablement pas appropriée pour vous.</para>
- </listitem>
- <listitem>
- <para><guilabel>Utiliser des fichiers HTML statiques</guilabel> exporte les photos vers un site Web interactif, prêt à être mis en ligne.</para>
- </listitem>
- <listitem>
- <para><guilabel>Fichiers normaux</guilabel> exporte les images en tant que fichiers dans des répertoires, sans en faire une galerie.</para>
- </listitem>
- </itemizedlist>
- </sect1>
-
- <sect1 id="sharing-flickr-or-php-gallery">
- <title>Envoi vers des galeries en ligne</title>
- <para>
- If you use Flickr, SmugMug, 23hq, Tabblo, Facebook, Zooomr or Picasa Web Album, you can post your files
- directly from F-Spot with the <menuchoice><guimenu>File</guimenu>
- <guisubmenu>Export</guisubmenu></menuchoice> menu, choosing corresponding submenu item.
- </para>
- <para>Si vous utilisez le logiciel en PHP connu sous le nom de <ulink url="http://gallery.sourceforge.net/">Gallery</ulink>, vous pouvez envoyer vos photos vers votre album existant à l'aide du menu <menuchoice><guimenu>Fichier</guimenu><guimenuitem>Exporter</guimenuitem><guimenuitem>Exporter vers Web Gallery</guimenuitem></menuchoice>. Vous devez préalablement activer le module distant dans votre installation de Gallery.</para>
- <note>
- <title>Note aux utilisateurs de Gallery 2.2</title>
- <para>La version du greffon Remote pour Gallery doit être 1.0.8 ou plus récente.</para>
- </note>
- <para><ulink url="http://pennave.sourceforge.net">PennAve</ulink> est une application Web en Python qui utilise directement la base de données de F-Spot pour afficher une galerie dynamique de vos photos et étiquettes.</para>
- <para><ulink url="http://www.conduit-project.org">Conduit</ulink> est un programme qui peut synchroniser les photos qui possèdent une certaine étiquette avec votre espace de stockage Web Flickr ou Picasa Web Album.</para>
- </sect1>
- </chapter>
-
- <chapter id="cms">
- <title>Gestion des couleurs</title>
-
- <sect1 id="cms-what-is-cms">
- <title>Qu'est ce que la gestion des couleurs ?</title>
-
- <para>Lorsque vous prenez une photo et que vous la regardez à l'écran, elle apparaît différente de celle affichée sur l'écran de l'appareil photo ou sur n'importe quel autre écran. Elle semble également différente lorsque vous l'imprimez. La raison est que chaque périphérique possède ses propres capacités de reproduction des couleurs.</para>
-
- <para>Le système de gestion des couleurs (« Color management system » : CMS) est un outil pour obtenir une reproduction fidèle des couleurs pour tous les types d'affichage ou d'impression. Un CMS repose sur des profils de couleur pour faire correspondre les couleurs d'origine aux couleurs qu'un périphérique peut reproduire afin qu'elles apparaissent identiques partout : sur l'écran LCD d'un ordinateur, sur une impression à partir de votre laboratoire photo à domicile, etc.</para>
- </sect1>
-
- <sect1 id="cms-what-is-icc-profile">
- <title>Qu'est ce qu'un profil de couleur ?</title>
-
- <para>Un profil de couleur est un fichier d'extension .icc (il sera souvent appelé profil ICC) ou .icm qui décrit comment les couleurs du périphérique correspondent à une description universelle des couleurs.</para>
-
- <para>Il y a plusieurs types de profils :</para>
-
- <itemizedlist>
- <listitem>
- <para>Profil de périphérique d'entrée. C'est le profil d'un appareil photo ou un profil qu'une application comme XSane inclut dans une image scannée.</para>
- </listitem>
- <listitem>
- <para>Profil d'espace de travail. C'est un profil qui décrit l'espace colorimétrique dans lequel toutes les opérations sont réalisées dans une application. Ce sont généralement des profils avec gamme de couleurs très étendue comme AdobeRGB1998 ou ProPhotoRGB.</para>
- </listitem>
- <listitem>
- <para>Profil d'affichage. C'est un profil pour un écran.</para>
- </listitem>
- <listitem>
- <para>Profil de sortie. C'est en général un profil pour une imprimante.</para>
- </listitem>
- </itemizedlist>
-
- <para>Actuellement, F-Spot ne permet le réglage que pour les profils d'affichage et de sortie. Toutes les opérations de couleurs sont réalisées dans l'espace colorimétrique sRVB.</para>
- </sect1>
-
- <sect1 id="cms-how-to-get-icc-profile">
- <title>Obtention d'un profil de couleur pour un écran ou une imprimante</title>
-
- <para>Il y a peu de façons d'obtenir un profil de couleur.</para>
-
- <sect2 id="cms-icc-from-cd-or-internet">
- <title>À partir d'un CD ou d'Internet</title>
-
- <para>De nombreux fabriquants de matériel mettent à disposition des profils de couleurs sur les CD livrés avec leur matériel. Si vous en avez un (pour écran ou imprimante), vous pouvez l'utiliser, sinon téléchargez-le sur Internet (généralement à partir de la section assistance du site Web du fabricant). Certains fabriquants d'appareils photo (Nikon, Canon) fournissent également des profils ICC.</para>
- </sect2>
-
- <sect2 id="cms-icc-from-calibrating-and-profiling">
- <title>Calibration et profil</title>
-
- <para>Les meilleurs résultats sont obtenus en calibrant et en ajustant le profil des périphériques avec un dispositif de mesure. Ce n'est pas difficile, mais cela suppose que vous disposiez d'un spectrophotomètre pour réaliser toutes les mesures et créer un profil ICC.</para>
-
- <para>Si vous êtes sous Windows ou Mac OS X, vous pouvez utiliser le logiciel du fabriquant fourni avec le spectrophotomètre. Sous Linux, vous devez soit utiliser <ulink url="http://www.argyllcms.com">Argyll</ulink> qui est un ensemble d'outils variés en ligne de commande ou <ulink url="http://lprof.sourceforge.net/">LProf</ulink> qui possède une interface graphique.</para>
- <para>Veuillez consulter la documentation des tiers vendeurs de matériels et de logiciels pour plus de détails.</para>
- </sect2>
-
- <sect2 id="cms-icc-from-embedding">
- <title>Intégration</title>
-
- <para>Des formats d'images (tels que TIFF, JPEG, PNG...) peuvent contenir leurs propres profils de couleurs incorporés. Si la gestion des couleurs est activée, F-Spot recherche ces profils incorporés et les prend en considération.</para>
- </sect2>
- </sect1>
-
- <sect1 id="cms-how-to-use">
- <title>Utilisation de la gestion des couleurs dans F-Spot</title>
-
- <para>La gestion des couleurs dans F-Spot ne peut utiliser pour le moment que des profils RVB (vous ne pouvez pas voir les autres profils dans F-Spot).</para>
-
- <itemizedlist>
- <listitem>
- <para>
- Copy your color profiles into the
- <filename class="directory">/usr/share/color/icc</filename> or
- <filename class="directory">/usr/local/share/color/icc</filename>
- directory.
- </para>
- </listitem>
- <listitem>
- <para>Activez la gestion des couleurs au moyen du menu <menuchoice><guimenu>Édition</guimenu><guimenuitem>Préférences</guimenuitem></menuchoice>.</para>
- </listitem>
- <listitem>
- <para>Choisissez les profils d'<guilabel>Affichage</guilabel> et de <guilabel>Sortie</guilabel>.</para>
- </listitem>
- </itemizedlist>
-
- <tip>
- <para>Vous pouvez utiliser <ulink url="http://burtonini.com/blog/computers/xicc">xicc</ulink> pour charger un profil ICC, pour afficher et utiliser le profil chargé à partir de F-Spot. Il suffit de cocher la case <guilabel>Tenter d'utiliser le profil d'affichage du système</guilabel>.</para>
- </tip>
- </sect1>
- </chapter>
-
- <chapter id="extend">
- <title>Possibilités d'extension</title>
-
- <sect1 id="extend-what-extensions-are">
- <title>Qu'est ce qu'une extension ?</title>
-
- <para>Les extensions F-Spot sont des moyens d'ajouter de nouvelles fonctionnalités à l'application. F-Spot prend en charge deux types d'extensions : les exporteurs (qui permettent d'exporter les photos vers de nouveaux services Web ou moyens de stockage de données) et les outils (qui fournissent de nouvelles manières de corriger les couleurs, de trouver des photos dupliquées, etc.). Les extensions sont distribuées sous la forme de paquets d'extensions.</para>
- <para>Dans la meilleure tradition de ne pas réinventer la roue, les extensions peuvent s'appuyer sur d'autres extensions, ce qui signifie qu'une extension peut ne pas fonctionner si une autre extension n'est pas installée. Cette notion de dépendance signifie en réalité que</para>
- <itemizedlist>
- <listitem>
- <para>vous ne pouvez installer une extension si l'extension dont elle dépend n'est pas présente sur le système ;</para>
- </listitem>
- <listitem>
- <para>vous ne pouvez supprimer une extension dont une ou plusieurs extensions dépendent.</para>
- </listitem>
- </itemizedlist>
- </sect1>
-
- <sect1 id="extend-managing-extensions">
- <title>Gestions des extensions</title>
-
- <para>Pour gérer les extensions, choisissez <menuchoice><guimenu>Édition</guimenu><guimenuitem>Gérer les extensions</guimenuitem></menuchoice>.</para>
-
- <sect2 id="extend-managing-extensions-managing-extension-repositories">
- <title>Gestion des dépôts d'extensions</title>
-
- <para>Pour faire simple, les dépôts sont des stocks d'extensions. Ils peuvent être sur le réseau ou en local. Pour ajouter un nouveau dépôt, cliquez sur le bouton Dépôts, choisissez le type du dépôt que vous voulez ajouter et saisissez l'URL ou le chemin de celui-ci. Si l'URL ou le chemin spécifié ne contient pas de fichier de description (index) des extensions, un message d'alerte apparaît pour vous en informer.</para>
- <para>Pour supprimer un dépôt, cliquez sur le bouton <guibutton>Dépôts</guibutton>, choisissez le dépôt que vous voulez supprimer et cliquez sur le bouton <guibutton>Supprimer</guibutton>.</para>
- </sect2>
-
- <sect2 id="extend-managing-extensions-installing-and-updating-extensions">
- <title>Installation et mise à jour d'extensions</title>
-
- <para>Pour installer une extension, cliquez sur le bouton <guibutton>Installer des extensions</guibutton>. Dans la boîte de dialogue qui apparaît :</para>
- <orderedlist>
- <listitem>
- <para>Choisissez le dépôt à installer parmi tous les dépôts connus ou seulement un des dépôts disponibles.</para>
- </listitem>
- <listitem>
- <para>Choisissez quel paquet d'extensions vous voulez voir : tous, seulement un, seulement les mises à jour.</para>
- </listitem>
- <listitem>
- <para>Cliquez sur le bouton <guibutton>Mise à jour</guibutton> pour mettre à jour la liste des paquets d'extensions disponibles selon les critères donnés.</para>
- </listitem>
- <listitem>
- <para>Choisissez les extensions que vous voulez installer ou mettre à jour. Cliquez sur <guibutton>Informations</guibutton> pour voir la description de l'extension sélectionnée, si vous le désirez.</para>
- </listitem>
- <listitem>
- <para>Cliquez sur <guibutton>Suivant</guibutton> pour effectuer l'installation.</para>
- </listitem>
- </orderedlist>
- </sect2>
-
- <sect2 id="extend-managing-extensions-enabling-and-disabling-extensions">
- <title>Activation et désactivation d'extensions</title>
-
- <para>Il est possible que vous souhaitiez activer ou désactiver temporairement un paquet d'extension particulier. Par exemple, si l'extension n'est pas assez stable pour gérer une grande quantité de photos ou si les menus sont surchargés d'extensions.</para>
- <para>
- In the <guilabel>Manage Extensions</guilabel> dialog select the extension
- package and click <guibutton>Enable</guibutton> or <guibutton>Disable</guibutton>.
- </para>
- </sect2>
-
- <sect2 id="extend-managing-extensions-removing-extensions">
- <title>Suppression d'extensions</title>
-
- <para>Si vous n'avez pas besoin d'une extension, vous pouvez la supprimer complètement de votre système. Dans la fenêtre <guilabel>Gérer les extensions</guilabel>, choisissez l'extension que vous voulez supprimer et cliquez sur <guibutton>Supprimer</guibutton>.</para>
- </sect2>
-
- <sect2 id="extend-managing-extensions-reading-summary-of-extensions">
- <title>Lecture du résumé des extensions</title>
-
- <para>Tous les paquets d'extensions contiennent des méta-données qui fournissent les informations suivantes à propos de l'extension :</para>
-
- <orderedlist>
- <listitem>
- <para>Description qui décrit en géneral les objectifs de l'extension</para>
- </listitem>
- <listitem>
- <para>Version</para>
- </listitem>
- <listitem>
- <para>Auteur</para>
- </listitem>
- <listitem>
- <para>Dépendances</para>
- </listitem>
- </orderedlist>
-
- <para>Dans la fenêtre <guilabel>Gérer les extensions</guilabel>, sélectionnez l'extension dont vous voulez lire la description et cliquez sur le bouton <guibutton>Informations</guibutton>.</para>
- </sect2>
- </sect1>
-
- <sect1 id="extend-developing-extensions">
- <title>Développement d'extensions</title>
-
- <para>Le document <ulink url="http://f-spot.org/Extend_F-Spot">Extend F-Spot</ulink> fournit des instructions sur le développement de vos propres extensions pour F-Spot.</para>
- </sect1>
- </chapter>
-
- <chapter id="shortcuts">
- <title>Raccourcis</title>
-
- <sect1 id="Global-Shortcuts">
- <title>Raccourcis globaux</title>
- <informaltable frame="all">
- <tgroup cols="2">
- <thead>
- <row>
- <entry>Touche</entry>
- <entry>Action</entry>
- </row>
- </thead>
- <tbody>
- <row>
- <entry>
- <keycap>[</keycap>
- </entry>
- <entry>Tourne les photos sélectionnées vers la gauche</entry>
- </row>
- <row>
- <entry>
- <keycap>]</keycap>
- </entry>
- <entry>Tourne les photos sélectionnées vers la droite</entry>
- </row>
- <row>
- <entry>
- <keycap>Suppr</keycap>
- </entry>
- <entry>Supprime les photos sélectionnées du catalogue de F-Spot</entry>
- </row>
- <row>
- <entry>
- <keycombo><keycap>Maj</keycap><keycap>Suppr</keycap></keycombo>
- </entry>
- <entry>
- Delete selected photos permanently from the drive. If possible, they will moved to trash.
- </entry>
- </row>
-
- <row>
- <entry>
- <keycap>t</keycap>
- </entry>
- <entry>Affiche ou modifie les étiquettes des photos sélectionnées</entry>
- </row>
- <row>
- <entry>
- <keycap>F11</keycap>
- </entry>
- <entry>Affichage plein écran</entry>
- </row>
- <row>
- <entry>
- <keycombo><keycap>Ctrl</keycap><keycap>I</keycap></keycombo>
- </entry>
- <entry>Affiche des informations sur la photo</entry>
- </row>
- <row>
- <entry>
- <keycombo><keycap>Ctrl</keycap><keycap>=</keycap></keycombo>
- </entry>
- <entry>Agrandit</entry>
- </row>
- <row>
- <entry>
- <keycombo><keycap>Ctrl</keycap><keycap>-</keycap></keycombo>
- </entry>
- <entry>Réduit</entry>
- </row>
- <row>
- <entry>
- <keycombo><keycap>Ctrl</keycap><keycap>N</keycap></keycombo>
- </entry>
- <entry>Importe des photos</entry>
- </row>
- <row>
- <entry>
- <keycombo><keycap>Alt</keycap><keycap>0-5</keycap></keycombo>
- </entry>
- <entry>Alt plus un nombre de 0 à 5 met une note à la (ou aux) image(s) sélectionnée(s)</entry>
- </row>
- </tbody>
- </tgroup>
- </informaltable>
- </sect1>
-
- <sect1 id="shortcuts-browse-mode">
- <title>Raccourcis du mode Navigation</title>
- <informaltable frame="all">
- <tgroup cols="2">
- <thead>
- <row>
- <entry>Touche</entry>
- <entry>Action</entry>
- </row>
- </thead>
- <tbody>
- <row>
- <entry>
- <keycombo><keycap>Ctrl</keycap><keycap>A</keycap></keycombo>
- </entry>
- <entry>Sélectionne tout</entry>
- </row>
- <row>
- <entry>
- <keycombo><keycap>Ctrl</keycap><keycap>Maj</keycap>
- <keycap>A</keycap></keycombo>
- </entry>
- <entry>Désélectionne tout</entry>
- </row>
- <row>
- <entry>Touches fléchées ou <keycap>H</keycap>, <keycap>J</keycap>, <keycap>K</keycap>, <keycap>L</keycap></entry>
- <entry>Déplace l'élément actif</entry>
- </row>
- <row>
- <entry><keycap>Ctrl</keycap>-Touche fléchée</entry>
- <entry>Déplace l'élément actif sans modifier la sélection</entry>
- </row>
- <row>
- <entry>
- <keycap>Barre d'espace</keycap>
- </entry>
- <entry>Sélectionne ou désélectionne la photo activée</entry>
- </row>
- <row>
- <entry>
- <keycombo><keycap>Maj</keycap>
- <keycap>Touche fléchée</keycap></keycombo>
- </entry>
- <entry>Modifie la sélection de photos</entry>
- </row>
- <row>
- <entry>
- <keycombo><keycap>Ctrl</keycap><keycap>Maj</keycap>
- <keycap>Flèche gauche ou flèche droite</keycap></keycombo>
- </entry>
- <entry>Ajoute ou enlève à la sélection toutes les photos d'une rangée, dans la direction correspondante</entry>
- </row>
- <row>
- <entry>
- <keycap>V</keycap>
- </entry>
- <entry>Affiche un aperçu plus grand de l'image sous le pointeur de la souris</entry>
- </row>
- <row>
- <entry>
- <keycombo><keycap>Maj</keycap><keycap>V</keycap></keycombo>
- </entry>
- <entry>Affiche un aperçu plus grand de l'image sous le pointeur de la souris, avec un histogramme des couleurs</entry>
- </row>
- </tbody>
- </tgroup>
- </informaltable>
- </sect1>
-
- <sect1 id="shortcuts-tag">
- <title>Raccourcis portant sur les étiquettes</title>
- <informaltable frame="all">
- <tgroup cols="2">
- <thead>
- <row>
- <entry>Touche</entry>
- <entry>Action</entry>
- </row>
- </thead>
- <tbody>
- <row>
- <entry>
- <keycap>F2</keycap>
- </entry>
- <entry>Renomme l'étiquette sélectionnée</entry>
- </row>
- <row>
- <entry>
- <keycombo><keycap>Ctrl</keycap><keycap>T</keycap></keycombo>
- </entry>
- <entry>Ajoute des étiquettes aux photos sélectionnées</entry>
- </row>
- <row>
- <entry>n/d</entry>
- <entry>Glissez les étiquettes pour les réorganiser</entry>
- </row>
- <row>
- <entry>n/d</entry>
- <entry>Saisissez le nom d'une étiquette pour la sélectionner (uniquement si cette étiquette est visible)</entry>
- </row>
- </tbody>
- </tgroup>
- </informaltable>
- </sect1>
-
- <sect1 id="shortcuts-edit-mode">
- <title>Raccourcis du mode Retouches</title>
- <informaltable frame="all">
- <tgroup cols="2">
- <thead>
- <row>
- <entry>Touche</entry>
- <entry>Action</entry>
- </row>
- </thead>
- <tbody>
- <row>
- <entry><keycap>Page haut</keycap>, <keycap>Retour arrière</keycap>, <keycap>B</keycap></entry>
- <entry>Va à la photo précédente</entry>
- </row>
- <row>
- <entry><keycap>Page bas</keycap>, <keycap>Barre d'espace</keycap>, <keycap>N</keycap></entry>
- <entry>Va à la photo suivante</entry>
- </row>
- <row>
- <entry>Touches fléchées ou <keycap>H</keycap>, <keycap>J</keycap>, <keycap>K</keycap>, <keycap>L</keycap></entry>
- <entry>Va à la photo précédente/suivante ou se déplace dans une photo agrandie</entry>
- </row>
- <row>
- <entry>
- <keycap>R</keycap>
- </entry>
- <entry>
- Go to a random photo
- </entry>
- </row>
- <row>
- <entry>
- <keycap>f</keycap>
- </entry>
- <entry>Affichage plein écran</entry>
- </row>
- <row>
- <entry>
- <keycap>0</keycap>
- </entry>
- <entry>Adapte la taille de l'image à celle de l'écran</entry>
- </row>
- <row>
- <entry>
- <keycap>1</keycap>
- </entry>
- <entry>Affiche l'image en taille réelle (un pixel d'écran par pixel d'image)</entry>
- </row>
- <row>
- <entry>
- <keycap>2</keycap>
- </entry>
- <entry>Affiche l'image en taille double (4 pixels d'écran par pixel d'image)</entry>
- </row>
- <row>
- <entry>
- <keycap>Échap</keycap>
- </entry>
- <entry>Retourne au mode Navigation</entry>
- </row>
- <row>
- <entry>
- <keycap>V</keycap>
- </entry>
- <entry>Examine la photo avec une loupe. Double-cliquez sur la loupe ou tapez à nouveau <keycap>v</keycap> pour la fermer.</entry>
- </row>
- <row>
- <entry><keycap>Maj</keycap>-Molette de la souris</entry>
- <entry>Défilement plus rapide de la bande contact</entry>
- </row>
- <row>
- <entry>
- <keycap>i</keycap>
- </entry>
- <entry>Bascule l'affichage de la boîte d'information (seulement en mode plein écran)</entry>
- </row>
- </tbody>
- </tgroup>
- </informaltable>
- </sect1>
- </chapter>
-
-</book>
diff --git a/docs/fr/figures/f-spot-crop.png b/docs/fr/figures/f-spot-crop.png
deleted file mode 100644
index 7f9bb9c..0000000
Binary files a/docs/fr/figures/f-spot-crop.png and /dev/null differ
diff --git a/docs/fr/fr.po b/docs/fr/fr.po
deleted file mode 100644
index ab5a700..0000000
--- a/docs/fr/fr.po
+++ /dev/null
@@ -1,2014 +0,0 @@
-# French translation of f-spot documentation.
-# Copyright (C) 2007-2008 Free Software Foundation, Inc.
-# This file is distributed under the same license as the f-spot package.
-#
-# Stephane Delcroix <stephane at delcroix.org>, 2007.
-# Claude Paroz <claude at 2xlibre.net>, 2007.
-# Bruno Brouard <annoa.b at gmail.com>, 2008.
-#
-msgid ""
-msgstr ""
-"Project-Id-Version: f-spot doc fr\n"
-"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2008-10-28 08:36+0100\n"
-"PO-Revision-Date: 2008-10-28 09:41+0100\n"
-"Last-Translator: Claude Paroz <claude at 2xlibre.net>\n"
-"Language-Team: GNOME French Team <gnomefr at traduc.org>\n"
-"MIME-Version: 1.0\n"
-"Content-Type: text/plain; charset=UTF-8\n"
-"Content-Transfer-Encoding: 8bit\n"
-
-#. When image changes, this message will be marked fuzzy or untranslated for you.
-#. It doesn't matter what you translate it to: it's not used at all.
-#: ../C/f-spot.xml:163(None)
-msgid ""
-"@@image: 'figures/f-spot-crop.png'; md5=63e18c96702aea4701024837a13ae2d9"
-msgstr ""
-"@@image: 'figures/f-spot-crop.png'; md5=63e18c96702aea4701024837a13ae2d9"
-
-#. When image changes, this message will be marked fuzzy or untranslated for you.
-#. It doesn't matter what you translate it to: it's not used at all.
-#: ../C/f-spot.xml:187(None)
-msgid ""
-"@@image: 'figures/f-spot-straighten.png'; "
-"md5=ceeff0cac633d06599fa5760cc4bc568"
-msgstr ""
-"@@image: 'figures/f-spot-straighten.png'; "
-"md5=ceeff0cac633d06599fa5760cc4bc568"
-
-#. When image changes, this message will be marked fuzzy or untranslated for you.
-#. It doesn't matter what you translate it to: it's not used at all.
-#: ../C/f-spot.xml:206(None)
-msgid ""
-"@@image: 'figures/f-spot-adjust-colors.png'; "
-"md5=6a5d9eaaaaf238ccbf70552bc073898c"
-msgstr ""
-"@@image: 'figures/f-spot-adjust-colors.png'; "
-"md5=6a5d9eaaaaf238ccbf70552bc073898c"
-
-#. When image changes, this message will be marked fuzzy or untranslated for you.
-#. It doesn't matter what you translate it to: it's not used at all.
-#: ../C/f-spot.xml:224(None)
-msgid ""
-"@@image: 'figures/f-spot-autocolor.png'; md5=240c4a86c95c9507755fe790bef0e24a"
-msgstr ""
-"@@image: 'figures/f-spot-autocolor.png'; md5=240c4a86c95c9507755fe790bef0e24a"
-
-#. When image changes, this message will be marked fuzzy or untranslated for you.
-#. It doesn't matter what you translate it to: it's not used at all.
-#: ../C/f-spot.xml:241(None)
-msgid ""
-"@@image: 'figures/f-spot-desaturate.png'; "
-"md5=fa54dfd08171658d720be71b6d367139"
-msgstr ""
-"@@image: 'figures/f-spot-desaturate.png'; "
-"md5=fa54dfd08171658d720be71b6d367139"
-
-#. When image changes, this message will be marked fuzzy or untranslated for you.
-#. It doesn't matter what you translate it to: it's not used at all.
-#: ../C/f-spot.xml:258(None)
-msgid ""
-"@@image: 'figures/f-spot-sepia.png'; md5=154d6e34903664dbd776f2bef405ce91"
-msgstr ""
-"@@image: 'figures/f-spot-sepia.png'; md5=154d6e34903664dbd776f2bef405ce91"
-
-#. When image changes, this message will be marked fuzzy or untranslated for you.
-#. It doesn't matter what you translate it to: it's not used at all.
-#: ../C/f-spot.xml:289(None)
-msgid ""
-"@@image: 'figures/f-spot-red-eye.png'; md5=743d0a2ccc9b2fa8fa314855c225cd31"
-msgstr ""
-"@@image: 'figures/f-spot-red-eye.png'; md5=743d0a2ccc9b2fa8fa314855c225cd31"
-
-#. When image changes, this message will be marked fuzzy or untranslated for you.
-#. It doesn't matter what you translate it to: it's not used at all.
-#: ../C/f-spot.xml:316(None)
-msgid ""
-"@@image: 'figures/f-spot-soft-focus.png'; "
-"md5=14d1437ce49c83f3ebbcf70b7047ffbe"
-msgstr ""
-"@@image: 'figures/f-spot-soft-focus.png'; "
-"md5=14d1437ce49c83f3ebbcf70b7047ffbe"
-
-#. When image changes, this message will be marked fuzzy or untranslated for you.
-#. It doesn't matter what you translate it to: it's not used at all.
-#: ../C/f-spot.xml:596(None)
-msgid ""
-"@@image: 'figures/f-spot-fullscreen.png'; "
-"md5=86040e20ebf1015f6489a56e9589f063"
-msgstr ""
-"@@image: 'figures/f-spot-fullscreen.png'; "
-"md5=86040e20ebf1015f6489a56e9589f063"
-
-#. When image changes, this message will be marked fuzzy or untranslated for you.
-#. It doesn't matter what you translate it to: it's not used at all.
-#: ../C/f-spot.xml:609(None)
-msgid ""
-"@@image: 'figures/f-spot-slideshow.png'; md5=84a69bc3bb7a1b8d04c967d3a66e6f23"
-msgstr ""
-"@@image: 'figures/f-spot-slideshow.png'; md5=84a69bc3bb7a1b8d04c967d3a66e6f23"
-
-#: ../C/f-spot.xml:5(title)
-msgid "The F-Spot Manual"
-msgstr "Manuel de F-Spot"
-
-#: ../C/f-spot.xml:7(para) ../C/f-spot.xml:9(subtitle)
-msgid "This is the user manual for F-Spot, a GNOME personal photo manager."
-msgstr ""
-"Ceci est le manuel d'utilisation de F-Spot, un gestionnaire de photos pour "
-"GNOME."
-
-#: ../C/f-spot.xml:11(year)
-msgid "2007-2008"
-msgstr "2007-2008"
-
-#: ../C/f-spot.xml:12(holder)
-msgid "Aaron Bockover, Gabriel Burt, Miguel de Icaza, Bengt Thuree"
-msgstr "Aaron Bockover, Gabriel Burt, Miguel de Icaza, Bengt Thuree"
-
-#: ../C/f-spot.xml:15(publishername)
-msgid "GNOME Documentation Project"
-msgstr "Projet de documentation GNOME"
-
-#: ../C/f-spot.xml:19(firstname)
-msgid "Miguel"
-msgstr "Miguel"
-
-#: ../C/f-spot.xml:20(surname)
-msgid "de Icaza"
-msgstr "de Icaza"
-
-#: ../C/f-spot.xml:23(firstname)
-msgid "Aaron"
-msgstr "Aaron"
-
-#: ../C/f-spot.xml:24(surname)
-msgid "Bockover"
-msgstr "Bockover"
-
-#: ../C/f-spot.xml:27(firstname)
-msgid "Bengt"
-msgstr "Bengt"
-
-#: ../C/f-spot.xml:28(surname)
-msgid "Thuree"
-msgstr "Thuree"
-
-#: ../C/f-spot.xml:31(firstname)
-msgid "Gabriel"
-msgstr "Gabriel"
-
-#: ../C/f-spot.xml:32(surname)
-msgid "Burt"
-msgstr "Burt"
-
-#: ../C/f-spot.xml:35(firstname)
-msgid "Alexandre"
-msgstr "Alexandre"
-
-#: ../C/f-spot.xml:36(surname)
-msgid "Prokoudine"
-msgstr "Prokoudine"
-
-#: ../C/f-spot.xml:39(firstname)
-msgid "Stephane"
-msgstr "Stephane"
-
-#: ../C/f-spot.xml:40(surname)
-msgid "Delcroix"
-msgstr "Delcroix"
-
-#: ../C/f-spot.xml:46(revnumber)
-msgid "0.5"
-msgstr "0.5"
-
-#: ../C/f-spot.xml:47(date)
-msgid "2008-09-25"
-msgstr "25/09/2008"
-
-#: ../C/f-spot.xml:50(revnumber)
-msgid "0.4"
-msgstr "0.4"
-
-#: ../C/f-spot.xml:51(date)
-msgid "2008-09-12"
-msgstr "12/09/2008"
-
-#: ../C/f-spot.xml:54(revnumber)
-msgid "0.3"
-msgstr "0.3"
-
-#: ../C/f-spot.xml:55(date)
-msgid "2007-07-26"
-msgstr "26/07/2007"
-
-#: ../C/f-spot.xml:61(title)
-msgid "Organizing your photos"
-msgstr "Organisation de vos photos"
-
-#: ../C/f-spot.xml:64(title)
-msgid "Import"
-msgstr "Importation"
-
-#: ../C/f-spot.xml:66(para)
-msgid ""
-"You can import photos from your hard drive or your camera. When you import "
-"your photos into F-Spot from your camera, it will always make a copy of "
-"them, leaving you free to clear your camera's memory. By default, F-Spot "
-"will make a copy of photos imported from your hard drive. Uncheck the "
-"<guilabel>Copy</guilabel> option on the import dialog or hold <keycap>Shift</"
-"keycap> when dragging photos into F-Spot if you do not wish to copy them "
-"from your hard drive."
-msgstr ""
-"Vous pouvez importer des photos depuis votre disque dur ou depuis votre "
-"appareil photo. Lorsque vous importez dans F-Spot des photos depuis votre "
-"appareil photo, c'est toujours une copie qui est effectuée, vous laissant "
-"libre de vider la mémoire de votre appareil photo. Par défaut, F-Spot fait "
-"aussi une copie des photos importées depuis votre disque dur. Décochez "
-"l'option <guilabel>Copier</guilabel> du dialogue d'importation ou maintenez "
-"la touche <keycap>Maj</keycap> lorsque vous déposez des photos dans F-Spot "
-"si vous ne voulez pas en faire une copie."
-
-#: ../C/f-spot.xml:76(para)
-msgid ""
-"By default, F-Spot copies your photos to the <filename class=\"directory\">~/"
-"Photos</filename> folder. You can change the folder F-Spot uses in "
-"<guilabel>Preferences</guilabel> dialog (<menuchoice><guimenu>Edit</"
-"guimenu><guimenuitem>Preferences</guimenuitem></menuchoice>). You can also "
-"disable physical copying of images to that directory and make F-Spot only "
-"reference to existing files. For that you need to disable checkbox "
-"<guilabel>Copy files to the Photos folder</guilabel>."
-msgstr ""
-"Par défaut, F-Spot copie vos photos dans le dossier <filename class="
-"\"directory\">~/Photos</filename>. Vous pouvez changer le dossier utilisé "
-"par F-Spot dans la boîte de dialogue <guilabel>Préférences</guilabel> "
-"(<menuchoice><guimenu>Édition</guimenu><guimenuitem>Préférences</"
-"guimenuitem></menuchoice>). Vous pouvez également désactiver la copie "
-"physique des images dans ce répertoire de façon à ce que F-Spot ne fasse "
-"que référence à des fichiers existants. Pour cela, décochez la case "
-"<guilabel>Copier les fichiers vers le dossier Photos</guilabel>."
-
-#: ../C/f-spot.xml:85(para)
-msgid ""
-"If there is a tiny chance that some of your photos are already imported from "
-"the chosen source, you can use <guilabel>Detect duplicates</guilabel> "
-"option. In this case F-Spot will try to find out if exactly this image is "
-"already present in the database and thus new copy of it should not be "
-"imported."
-msgstr ""
-"Si vous pensez que vos photos ont déjà pu être importées depuis la source "
-"choisie, vous pouvez utiliser l'option <guilabel>Détecter les doublons</guilabel>. "
-"Dans ce cas, F-Spot essaie de déterminer si la même photo est déjà présente "
-"dans la base de données et, le cas échéant, n'importe pas la photo concernée."
-
-#: ../C/f-spot.xml:92(para)
-msgid ""
-"If all the photos you are importing at one time are from a particular event, "
-"or have some other characteristic in common, you can create a tag for them "
-"so you can later find them with ease. To do this, follow the instructions "
-"from <xref linkend=\"tag\"/> to create a new tag, then when you are "
-"importing them, check the button for <guilabel>Attach Tag</guilabel> and "
-"choose the tag you created."
-msgstr ""
-"Si toutes les photos que vous importez en une opération ont été prises lors "
-"d'un événement particulier, ou qu'elles ont d'autres caractéristiques en "
-"commun, vous pouvez créer une étiquette afin de les retrouver facilement par "
-"la suite. Pour cela, suivez les instructions de la <xref linkend=\"tag\"/> "
-"pour créer une nouvelle étiquette. Ensuite, lors de l'importation, cochez "
-"<guilabel>Attacher une étiquette</guilabel> et choisissez l'étiquette que "
-"vous avez créée."
-
-#: ../C/f-spot.xml:102(para)
-msgid ""
-"F-Spot uses a database stored at <filename>~/.gnome2/f-spot/photos.db</"
-"filename>. Note, to access it, use the sqlite3 command. You can also "
-"manually specify path to a database by running F-Spot with <option>-b</"
-"option> option."
-msgstr ""
-"F-Spot utilise une base de données stockée dans <filename>~/.gnome2/f-spot/"
-"photos.db</filename>. Notez que pour accéder à celle-ci, il faut utiliser la "
-"commande sqlite3. Vous pouvez également indiquer manuellement un chemin vers "
-"une base de données en exécutant F-Spot avec l'option <option>-b</option>."
-
-#: ../C/f-spot.xml:110(para)
-msgid ""
-"After an import, F-Spot will display the pictures of the latest import roll "
-"only. Read <xref linkend=\"enjoying-search\"/> to learn how to deal with "
-"import rolls."
-msgstr ""
-"Après l'importation, F-Spot n'affiche que les photos de la dernière série "
-"d'importation. Voir <xref linkend=\"enjoying-search\"/> pour apprendre à "
-"gérer les séries d'importation."
-
-#: ../C/f-spot.xml:115(para)
-msgid ""
-"You can also import directly from Mozilla <ulink url=\"http://www.mozilla."
-"com/en-US/firefox/\">Firefox</ulink> and <ulink url=\"http://www.mozilla.com/"
-"en-US/thunderbird/\">Thunderbird</ulink> using <ulink url=\"https://addons."
-"mozilla.org/en-US/firefox/addon/7091\">Firefox</ulink> and <ulink url="
-"\"https://addons.mozilla.org/en-US/thunderbird/addon/7011\">Thunderbird</"
-"ulink> F-Spot importer extensions written by <ulink url=\"http://"
-"personalpages.tds.net/~cdovel/\">Pizzach</ulink>."
-msgstr ""
-"Vous pouvez également importer directement à partir de Mozilla <ulink url="
-"\"http://www.mozilla-europe.org/fr/firefox/\">Firefox</ulink> et <ulink url="
-"\"http://www.mozilla-europe.org/fr/products/thunderbird/\">Thunderbird</ulink> en "
-"utilisant les extensions d'importation F-Spot <ulink url=\"https://addons."
-"mozilla.org/fr/firefox/addon/7091\">Firefox</ulink> et <ulink url="
-"\"https://addons.mozilla.org/fr/thunderbird/addon/7011\">Thunderbird</"
-"ulink> écrites par <ulink url=\"http://personalpages.tds.net/~cdovel/"
-"\">Pizzach</ulink>."
-
-#: ../C/f-spot.xml:127(title)
-msgid "Edit"
-msgstr "Retouches"
-
-#: ../C/f-spot.xml:129(para)
-msgid ""
-"If you double click or press enter on an image, you enter Edit mode, where "
-"you can remove red-eye, crop, and adjust brightness and colors."
-msgstr ""
-"Si vous double-cliquez sur une image ou tapez sur la touche Entrée, vous "
-"activez le mode Retouches, qui permet de corriger les yeux rouges, de rogner "
-"les photos et d'ajuster la luminosité ou les couleurs."
-
-#: ../C/f-spot.xml:135(title)
-msgid "Versions"
-msgstr "Versions"
-
-#: ../C/f-spot.xml:137(para)
-msgid ""
-"When you edit your photos, a new copy (called a version) is created, so your "
-"original is never altered. After your first edit to a photo, subsequent "
-"edits will modify the same version. If you want to create mulitple versions "
-"of your photo, perhaps with different cropping or coloring, you can do so "
-"via the <menuchoice><guimenu>File</guimenu><guimenuitem>Create new version</"
-"guimenuitem></menuchoice> option."
-msgstr ""
-"Lorsque vous retouchez vos photos, une nouvelle copie (appelée version) est "
-"créée de sorte que votre original n'est jamais modifié. Après la première "
-"modification d'une image, toutes les retouches suivantes vont modifier la "
-"même version. Si vous voulez créer différentes versions de votre photo, "
-"recadrées différemment ou avec d'autres couleurs, vous pouvez le faire via "
-"l'option <menuchoice><guimenu>Fichier</guimenu><guimenuitem>Créer une "
-"nouvelle version</guimenuitem></menuchoice>."
-
-#: ../C/f-spot.xml:148(title)
-msgid "Crop"
-msgstr "Rognage"
-
-#: ../C/f-spot.xml:150(para)
-msgid ""
-"Cropping an image is a great way to improve the quality of a photograph by "
-"improving how it is framed. You crop a photo by selecting the part of the "
-"photo you want to keep. If you want your photo to be the exact dimensions "
-"necessary for a certain print size, you can constrain the kind of selection "
-"F-Spot will allow you to draw by choosing the appropriate size from the "
-"constraint drop down. See the <xref linkend=\"edit-remove-red-eye\"/> below "
-"for details on making a selection on your photo."
-msgstr ""
-"Rogner une image est un bon moyen d'améliorer la qualité d'une photographie "
-"en modifiant son cadrage. Vous rognez une photo en sélectionnant la partie "
-"de l'image que vous désirez garder. Si vous voulez recadrer vos photos à une "
-"dimension exacte pour l'impression par exemple, vous pouvez contraindre le "
-"type de sélection que F-Spot vous autorisera à dessiner en choisissant le "
-"rapport approprié dans la liste. Voyez <xref linkend=\"edit-remove-red-eye\"/"
-"> ci-dessus pour obtenir des détails sur la manière de faire une sélection "
-"sur votre photo."
-
-#: ../C/f-spot.xml:160(title)
-msgid "Crop tool"
-msgstr "Outil de rognage"
-
-#: ../C/f-spot.xml:167(para) ../C/f-spot.xml:368(para)
-msgid ""
-"Once you have made your crop selection, you must click the crop button "
-"beneath the image to finalize the crop. If you are working with the original "
-"photo, cropping creates a new version your photo."
-msgstr ""
-"Une fois que vous avez fait votre sélection, vous devez cliquer sur le "
-"bouton Rogner pour finaliser le rognage. Si vous faites cela sur un "
-"original, une nouvelle version de la photo sera créée."
-
-#: ../C/f-spot.xml:175(title)
-msgid "Straighten"
-msgstr "Redressement"
-
-#: ../C/f-spot.xml:177(para)
-msgid ""
-"Straighten effect is a tool to level a photo, quite helpful for landscapes "
-"taken without a tripod, when (imaginary) line of horizon is not at 0°. This "
-"tool rotates an image by a specified angle and automagically crops the "
-"resulted image, so that you always see a perfect rectangle."
-msgstr ""
-"L'effet de redressement est un outil qui permet de remettre à niveau une "
-"photo (assez utile pour des paysages pris sans trépied) quand la ligne "
-"(imaginaire) de l'horizon n'est pas à 0°. Cet outil tourne une image d'un "
-"angle défini et rogne automatiquement l'image obtenue afin de toujours avoir "
-"un rectangle parfait."
-
-#: ../C/f-spot.xml:184(title)
-msgid "Straighten tool"
-msgstr "Outil de redressement"
-
-#: ../C/f-spot.xml:194(title)
-msgid "Adjust Colors"
-msgstr "Ajustement des couleurs"
-
-#: ../C/f-spot.xml:196(para)
-msgid ""
-"To adjust the brightness, contrast, and colors of a photo, first click the "
-"<guibutton>Adjust the photo colors</guibutton> icon to open the adjustment "
-"dialog. Change then some settings and save them with <guibutton>OK</"
-"guibutton>."
-msgstr ""
-"Pour ajuster la luminosité, le contraste et les couleurs d'une photo, "
-"cliquez sur l'icône <guibutton>Ajuster les couleurs de la photo</guibutton> "
-"pour ouvrir la boîte de dialogue d'ajustement. Changez alors les paramètres "
-"et enregistrez-les avec <guibutton>Valider</guibutton>."
-
-#: ../C/f-spot.xml:203(title)
-msgid "Adjust Colors tool"
-msgstr "Outils d'ajustement des couleurs"
-
-#: ../C/f-spot.xml:213(title) ../C/f-spot.xml:221(title)
-msgid "AutoColor"
-msgstr "Ajustement automatique des couleurs"
-
-#: ../C/f-spot.xml:215(para)
-msgid ""
-"This effect automatically adjusts color levels to make a pretty balanced "
-"picture color-wise. It serves best for pictures taken with automatical white "
-"balance, when camera didn't manage to do the job well."
-msgstr ""
-"Cet effet ajuste automatiquement les niveaux de couleurs afin d'obtenir une "
-"photo aux couleurs bien équilibrées. Il améliore mieux les photos prises en "
-"mode balance automatique des blancs, lorsque l'appareil photo n'a pas réussi "
-"à le faire correctement."
-
-#: ../C/f-spot.xml:231(title)
-msgid "Desaturate"
-msgstr "Décoloriser"
-
-#: ../C/f-spot.xml:233(para)
-msgid ""
-"To make a colorful photo a black and white one, open a photo of choice and "
-"press <guibutton>Desaturate</guibutton> button."
-msgstr ""
-"Pour convertir une photo couleur en noir et blanc, ouvrez la photo choisie "
-"et cliquez sur le bouton <guibutton>Désaturer</guibutton>."
-
-#: ../C/f-spot.xml:238(title) ../C/f-spot.xml:255(title)
-msgid "Desaturation tool"
-msgstr "Outil de décolorisation"
-
-#: ../C/f-spot.xml:248(title)
-msgid "Sepia"
-msgstr "Sépia"
-
-#: ../C/f-spot.xml:250(para)
-msgid ""
-"To make a colorful photo look like an old-style picture in sepia tones, open "
-"a photo of choice and press <guibutton>Sepia</guibutton> button."
-msgstr ""
-"Pour convertir une photo couleur dans un vieux style de photo aux tons "
-"sépia, ouvrez la photo choisie et cliquez sur le bouton <guibutton>Sépia</"
-"guibutton>."
-
-#: ../C/f-spot.xml:265(title)
-msgid "Remove Red-Eye"
-msgstr "Suppression des yeux rouges"
-
-#: ../C/f-spot.xml:267(para)
-msgid ""
-"To remove redeye from a photo, you need to select a zone containing the "
-"eyes. You may want to zoom in on the image to accurately select the eyes in "
-"the photo. You should be able to correct both eyes on the same person in one "
-"shot, or even the eyes from multiple people at once. If this doesn't work "
-"for you, or the selected zone contains some vivid red parts (lips, ...) "
-"you'll probably have to correct one red eye at a time."
-msgstr ""
-"Pour supprimer les yeux rouges sur une photo, vous devez sélectionner une "
-"zone contenant les yeux. Vous pouvez zoomer l'image pour sélectionner "
-"exactement les yeux sur la photo. Il vous est possible de corriger les yeux "
-"d'une même personne en une seule fois, mais également ceux de plusieurs "
-"personnes d'un coup. Si cela ne vous convient pas ou si la zone sélectionnée "
-"contient des zones rouge vif (lèvres...), vous devrez probablement corriger "
-"un œil rouge à la fois."
-
-#: ../C/f-spot.xml:275(para)
-msgid ""
-"To make your selection, click one corner of the rectangle that will be your "
-"selection, and drag your mouse to the diagonal corner and release it. You "
-"can resize your selection by dragging its edges, and you can move it by "
-"clicking in the middle of it and dragging it to where you want it."
-msgstr ""
-"Pour faire une sélection, cliquez sur un des angles du rectangle qui formera "
-"votre sélection, puis glissez votre souris le long de la diagonale du "
-"rectangle de sélection et relâchez le bouton. Vous pouvez redimensionner "
-"votre sélection en faisant glisser ses côtés et vous pouvez la déplacer là "
-"où vous voulez."
-
-#: ../C/f-spot.xml:281(para)
-msgid ""
-"Once you have selected a zone, you can remove the red from it by clicking "
-"the red-eye button beneath the photo."
-msgstr ""
-"Lorsque vous avez sélectionné une zone, vous pouvez enlever le rouge de "
-"celle-ci en cliquant sur le bouton yeux rouges sous la photo."
-
-#: ../C/f-spot.xml:286(title)
-msgid "Red-Eye tool"
-msgstr "Outil yeux rouges"
-
-#: ../C/f-spot.xml:294(para)
-msgid ""
-"You can change the threshold for redeyes detection by changing the gconf key "
-"<filename class=\"directory\">/apps/f-spot/edit/redeye_threshold</filename>."
-msgstr ""
-"Vous pouvez modifier le seuil pour la détection des yeux rouges en modifiant "
-"la clé gconf <filename class=\"directory\">/apps/f-spot/edit/"
-"redeye_threshold</filename>."
-
-#: ../C/f-spot.xml:303(title)
-msgid "Soft Focus"
-msgstr "Flou artistique"
-
-#: ../C/f-spot.xml:305(para)
-msgid ""
-"In photography sharpening one region of a picture, while blurring all the "
-"rest, is a way to make an emphasis and grab attention. It is achieved by "
-"using a lens that allows shooting with a short distance in front of and "
-"beyond the subject that appears to be in focus. Soft focus effect is a way "
-"to emulate such a lens."
-msgstr ""
-"En photographie, renforcer la netteté d'une zone d'une photo en rendant flou "
-"tout le reste est une manière de mettre en évidence et d'attirer "
-"l'attention. Ceci est accompli à l'aide d'une lentille qui permet la prise "
-"de vue à une faible distance devant et au-delà du sujet qui est visé. "
-"L'effet de flou artistique est une manière d'imiter l'effet d'une telle "
-"lentille."
-
-#: ../C/f-spot.xml:313(title)
-msgid "Soft Focus tool"
-msgstr "Outil flou artistique"
-
-#: ../C/f-spot.xml:320(para)
-msgid ""
-"Click to choose central point of the area you want to be in focus and adjust "
-"amount of blurring, then click <guibutton>OK</guibutton>."
-msgstr ""
-"Cliquez pour choisir le point central de la zone que vous désirez voir nette "
-"et réglez la quantité de flou, puis cliquez sur <guibutton>Appliquer</"
-"guibutton>."
-
-#: ../C/f-spot.xml:327(title)
-msgid "Sharpen"
-msgstr "Renforcement de la netteté"
-
-#: ../C/f-spot.xml:329(para)
-msgid ""
-"Out-of-focus photographs and most digitized images often need a sharpness "
-"correction. The Unsharp Mask effect sharpens edges of the elements without "
-"increasing noise or blemish. To sharpen a photo choose "
-"<menuchoice><guimenu>Edit</guimenu><guimenuitem>Sharpen...</guimenuitem></"
-"menuchoice> and specify the following values:"
-msgstr ""
-"Les photographies floues et la plupart des images numérisées nécessitent "
-"souvent une correction de netteté. L'effet de correction de netteté renforce "
-"la netteté des éléments sans augmenter le bruit ou les défauts. Pour "
-"renforcer la netteté d'une photo, choisissez <menuchoice><guimenu>Édition</"
-"guimenu><guimenuitem>Renforcer la netteté...</guimenuitem></menuchoice> et "
-"indiquez les valeurs suivantes :"
-
-#: ../C/f-spot.xml:340(para)
-msgid ""
-"<parameter class=\"option\">Amount</parameter> — strength of sharpening."
-msgstr ""
-"<parameter class=\"option\">Taux</parameter> — degré de renforcement de la "
-"netteté."
-
-#: ../C/f-spot.xml:345(para)
-msgid ""
-"<parameter class=\"option\">Radius</parameter> — how many pixels on either "
-"side of an edge will be affected by sharpening. High resolution images allow "
-"higher radius."
-msgstr ""
-"<parameter class=\"option\">Rayon</parameter> — nombre de pixels de chaque "
-"côté d'un bord qui seront affectés par le renforcement de netteté. Les "
-"images haute résolution permettent un rayon plus grand."
-
-#: ../C/f-spot.xml:352(para)
-msgid ""
-"<parameter class=\"option\">Threshold</parameter> — the minimum difference "
-"in pixel values that indicates an edge where sharpen must be applied. This "
-"helps avoiding creation of blemishes in face, sky or water surface."
-msgstr ""
-"<parameter class=\"option\">Seuil</parameter> — la différence minimale en "
-"valeurs de pixels qui détermine un bord, auquel un renforcement de netteté "
-"doit être appliqué. Cela permet d'éviter la création de défauts sur les "
-"visages et sur les surfaces d'eau ou de ciel."
-
-#: ../C/f-spot.xml:362(title)
-msgid "Describe"
-msgstr "Description"
-
-#: ../C/f-spot.xml:364(para)
-msgid ""
-"You can also enter a description of the image by clicking on the text entry "
-"box below the image and typing."
-msgstr ""
-"Vous pouvez aussi ajouter une description de l'image en tapant un texte dans "
-"la zone de saisie située juste sous l'image."
-
-#: ../C/f-spot.xml:376(title)
-msgid "Adjust Time"
-msgstr "Réglage de la date"
-
-#: ../C/f-spot.xml:378(para)
-msgid ""
-"In both 'browse' or 'edit' modes, you can adjust the time of one or multiple "
-"pictures (<menuchoice><guimenu>Edit</guimenu><guimenuitem>Adjust Time</"
-"guimenuitem></menuchoice>). Adjusting the time of multiple pictures at once "
-"helps you shift all an import roll if, e.g. the time on your camera is badly "
-"set or if you forgot to change it according to DST."
-msgstr ""
-"Dans les deux modes « Navigation » et « Retouches », vous pouvez régler la "
-"date d'une ou de plusieurs photos (<menuchoice><guimenu>Édition</"
-"guimenu><guimenuitem>Régler la date</guimenuitem></menuchoice>). Régler la "
-"date de plusieurs photos d'un coup vous aide à décaler toute une série "
-"d'importation si par exemple la date de votre appareil photo est mal réglée "
-"ou si vous avez oublié de la régler à l'heure d'été."
-
-#: ../C/f-spot.xml:390(title)
-msgid "Tag"
-msgstr "Étiquettes"
-
-#: ../C/f-spot.xml:391(para)
-msgid ""
-"F-Spot enables you to organize and enjoy your photos by associating them "
-"with various user-customizable tags. A tag is a merely a label. F-Spot comes "
-"with default tags to get you started; you are free to change them and add "
-"new ones. For example, if you want to create a tag for specific event, you "
-"can create a new tag named after that event under the Events tag."
-msgstr ""
-"F-Spot vous permet d'organiser et d'apprécier vos photos en leur associant "
-"diverses étiquettes personnalisables. F-Spot propose quelques étiquettes par "
-"défaut pour débuter ; vous êtes libre de les modifier ou d'en ajouter de "
-"nouvelles. Par exemple, si vous voulez créer une étiquette pour un événement "
-"spécifique, vous pouvez créer une nouvelle étiquette d'après le nom de cet "
-"événement sous l'étiquette Événements."
-
-#: ../C/f-spot.xml:398(para)
-msgid "There are many ways to tag photos:"
-msgstr "Il y a plusieurs façons d'étiqueter vos photos :"
-
-#: ../C/f-spot.xml:403(para)
-msgid "drag and drop the photo(s) onto the tag"
-msgstr "glisser la ou les photo(s) sur l'étiquette"
-
-#: ../C/f-spot.xml:408(para)
-msgid "drag and drop the tag onto the photo(s)"
-msgstr "glisser l'étiquette sur la ou les photo(s)"
-
-#: ../C/f-spot.xml:413(para)
-msgid "via the photo's right-click menu"
-msgstr "par le menu contextuel de la photo (clic droit)"
-
-#: ../C/f-spot.xml:418(para)
-msgid "via the Tags and Edit menus"
-msgstr "par les menus Étiquettes et Édition"
-
-#: ../C/f-spot.xml:423(para)
-msgid ""
-"by typing them in (press <keycap>t</keycap> to pop up the tag entry bar, "
-"enter comma-separated tags) - with tab completion!"
-msgstr ""
-"en les tapant directement (tapez <keycap>t</keycap> pour afficher la barre "
-"de saisie d'étiquettes, vous pouvez en saisir plusieurs en les séparant par "
-"des virgules), avec complétion automatique !"
-
-#: ../C/f-spot.xml:429(para)
-msgid ""
-"The first photo you associate with a tag will be used for that tag's icon. "
-"You can always edit a tag's name, parent tag, and icon by right clicking on "
-"it and choosing <guilabel>Edit tag</guilabel>."
-msgstr ""
-"La première photo que vous associez à une étiquette sera utilisée comme "
-"vignette d'étiquette. Vous pouvez toujours modifier le nom, l'étiquette "
-"parente ou la vignette par le menu contextuel (clic droit) de l'étiquette et "
-"en choisissant <guilabel>Éditer l'étiquette</guilabel>."
-
-#: ../C/f-spot.xml:434(para)
-msgid ""
-"You can change a tag's parent by dragging and dropping it where you like. "
-"Also, you can edit the name of a tag by selecting it and pressing "
-"<keycap>F2</keycap>. Lastly, if you have the tag tree widget focused (e.g. "
-"you just clicked on a tag), you can start typing the name of a tag, and all "
-"the expanded tags in the list will be searched and you'll jump to any "
-"matching ones."
-msgstr ""
-"Vous pouvez modifier la parenté d'une étiquette en la glissant où vous "
-"voulez. De même, vous pouvez directement éditer le nom d'une étiquette en la "
-"sélectionnant et en pressant <keycap>F2</keycap>. Enfin, si l'arbre des "
-"étiquettes est actif (par exemple, si vous venez de cliquer sur une "
-"étiquette), vous pouvez commencer à taper le nom d'une étiquette, et vous "
-"arriverez automatiquement à l'étiquette correspondante."
-
-#: ../C/f-spot.xml:443(para)
-msgid ""
-"You can also change size of tag icons in the sidebar or even make tag icons "
-"invisible by selecting preferred option from <menuchoice><guimenu>View</"
-"guimenu><guimenuitem>Tag Icons</guimenuitem></menuchoice> menu."
-msgstr ""
-"Vous pouvez également changer la taille des icônes des étiquettes dans la "
-"barre latérale ou même rendre les icônes invisibles en choisissant l'option "
-"souhaitée dans le menu <menuchoice><guimenu>Affichage</"
-"guimenu><guimenuitem>Icônes des étiquettes</guimenuitem></menuchoice>."
-
-#: ../C/f-spot.xml:451(para)
-msgid ""
-"F-Spot can write tags as metadata fields into JPEG files. Tags for various "
-"RAW files, PNG, TIFF, and others are written to F-Spot's database. You will "
-"have to re-tag these files if you re-import your collection."
-msgstr ""
-"F-Spot peut écrire les étiquettes comme des champs de meta-données dans les "
-"fichiers JPEG. Les étiquettes pour les divers fichiers RAW, PNG, TIFF et "
-"autres sont écrits dans la base de données F-Spot. Vous devrez refaire "
-"l'étiquetage de ces fichiers si vous les importez à nouveau."
-
-#: ../C/f-spot.xml:462(title)
-msgid "Enjoying your photos"
-msgstr "Consultation des photos"
-
-#: ../C/f-spot.xml:464(title)
-msgid "Browse"
-msgstr "Navigation"
-
-#: ../C/f-spot.xml:465(para)
-msgid ""
-"You can use the slider widget to browse your photos by month or by "
-"directory. To change this setting, go to <menuchoice><guimenu>View</"
-"guimenu><guimenuitem>Arranged By</guimenuitem></menuchoice>."
-msgstr ""
-"Vous pouvez utiliser l'outil de défilement pour parcourir vos photos par "
-"mois ou par répertoire. Pour modifier ce comportement, allez dans le menu "
-"<menuchoice><guimenu>Affichage</guimenu><guimenuitem>Arrangé par</"
-"guimenuitem></menuchoice>."
-
-#: ../C/f-spot.xml:473(title)
-msgid "Search"
-msgstr "Recherche"
-
-#: ../C/f-spot.xml:475(para)
-msgid ""
-"F-Spot uses search search filters to help you better define search criteria."
-msgstr ""
-"F-Spot utilise des filtres de recherche pour vous aider à mieux définir vos "
-"critères de recherche."
-
-#: ../C/f-spot.xml:480(title)
-msgid "Tags"
-msgstr "Étiquettes"
-
-#: ../C/f-spot.xml:482(para)
-msgid ""
-"You can start a search by double clicking or activating a tag from the tag "
-"list. Alternatively, you can show the find bar with "
-"<menuchoice><guimenu>Find</guimenu><guimenuitem>Show Find Bar</guimenuitem></"
-"menuchoice>. With the find bar shown, you can drag tags from the tag view to "
-"the find bar."
-msgstr ""
-"Vous pouvez commencer une recherche en double-cliquant ou en activant une "
-"étiquette de la liste. Vous pouvez aussi afficher la barre de recherche via "
-"le menu <menuchoice><guimenu>Rechercher</guimenu><guimenuitem>Afficher la "
-"barre de recherche</guimenuitem></menuchoice>. Lorsque la barre de recherche "
-"est affichée, vous pouvez y glisser des étiquettes depuis la liste."
-
-#: ../C/f-spot.xml:488(para)
-msgid ""
-"To find photos that are tagged with both of two tags, activate the first in "
-"the tag view or drag it onto the find bar, then drag the second tag and drop "
-"it on top of the first. You can also right click on the second tag in the "
-"tag view, or use the <guimenu>Find</guimenu> menu, and choose "
-"<guimenuitem>Find With...</guimenuitem> and select the first tag (or group "
-"of tags)."
-msgstr ""
-"Pour trouver les photos qui ont deux étiquettes bien précises, activez la "
-"première étiquette dans la liste ou glissez-la dans la barre de recherche, "
-"puis glissez la seconde étiquette sur la première. Vous pouvez aussi ouvrir "
-"le menu contextuel (clic droit) de la seconde étiquette dans la liste ou "
-"utiliser le menu <guimenu>Rechercher</guimenu> et choisir "
-"<guimenuitem>Chercher avec</guimenuitem> et sélectionner la première "
-"étiquette (ou un groupe d'étiquettes)."
-
-#: ../C/f-spot.xml:495(para)
-msgid ""
-"You can drag a tag icon around on the find bar to change from finding it and "
-"another tag to finding it or another tag."
-msgstr ""
-"Vous pouvez glisser une étiquette dans la barre de recherche pour changer "
-"son association : chercher les images contenant les 2 étiquettes ou l'une ou "
-"l'autre étiquette."
-
-#: ../C/f-spot.xml:499(para)
-msgid ""
-"You can search for photos that do not have a particular tag by double-"
-"clicking on a tag in the find bar. Alternatively, you can right-click a tag "
-"in the find bar and select <guimenuitem>Exclude</guimenuitem>."
-msgstr ""
-"Vous pouvez rechercher les images qui ne possèdent pas une certaine "
-"étiquette en double-cliquant sur une étiquette dans la barre de recherche. "
-"Vous pouvez aussi choisir <guimenuitem>Exclure</guimenuitem> dans le menu "
-"contextuel de l'étiquette dans la barre de recherche."
-
-#: ../C/f-spot.xml:504(para)
-msgid ""
-"To remove a tag from the search, drag it away from the find bar, or right "
-"click and select <guimenuitem>Remove</guimenuitem>."
-msgstr ""
-"Pour enlever une étiquette de la recherche, glissez-la hors de la barre ou "
-"choisissez <guimenuitem>Enlever</guimenuitem> dans son menu contextuel."
-
-#: ../C/f-spot.xml:508(para)
-msgid ""
-"By default, photos tagged <emphasis>Hidden</emphasis> will not be shown. You "
-"must explicitly include the <emphasis>Hidden</emphasis> tag in your search "
-"to show such photos."
-msgstr ""
-"Par défaut, les photos possédant l'étiquette <emphasis>Masqué</emphasis> ne "
-"seront pas affichées. Choisissez explicitement cette étiquette lors de votre "
-"recherche pour afficher ces photos."
-
-#: ../C/f-spot.xml:516(title)
-msgid "Import Rolls"
-msgstr "Séries d'importation"
-
-#: ../C/f-spot.xml:517(para)
-msgid ""
-"F-Spot remembers what pictures were imported every now and then. Use "
-"<menuchoice><guimenu>Find</guimenu><guisubmenu>Import Roll</"
-"guisubmenu><guimenuitem>Last import roll</guimenuitem></menuchoice> to limit "
-"search to last importing session or use <menuchoice><guimenu>Find</"
-"guimenu><guisubmenu>Import Roll</guisubmenu><guimenuitem>Select Import "
-"Rolls...</guimenuitem></menuchoice> to make a finer selection of imported "
-"photos:"
-msgstr ""
-"F-Spot se souvient des dates d'importation des photos. Utilisez "
-"<menuchoice><guimenu>Rechercher</guimenu><guisubmenu>Série importée</"
-"guisubmenu><guimenuitem>Dernière série importée</guimenuitem></menuchoice> "
-"pour limiter la recherche à votre dernière série d'importation ou utilisez "
-"<menuchoice><guimenu>Rechercher</guimenu><guisubmenu>Série importée</"
-"guisubmenu><guimenuitem>Choisir série d'importation</guimenuitem></"
-"menuchoice> pour affiner votre sélection de photos importées :"
-
-#: ../C/f-spot.xml:527(para)
-msgid ""
-"<parameter class=\"option\">At</parameter> — to select photos from a "
-"particular importing session"
-msgstr ""
-"<parameter class=\"option\">Le</parameter> — pour choisir des photos d'une "
-"session d'importation particulière,"
-
-#: ../C/f-spot.xml:532(para)
-msgid ""
-"<parameter class=\"option\">After</parameter> — to select all photos "
-"imported begining with a particular importing sessio"
-msgstr ""
-"<parameter class=\"option\">Après</parameter> — pour choisir toutes les "
-"photos importées depuis une session d'importation particulière,"
-
-#: ../C/f-spot.xml:537(para)
-msgid ""
-"<parameter class=\"option\">Between</parameter> — to select all photos "
-"imported between two particular importing sessions"
-msgstr ""
-"<parameter class=\"option\">Entre</parameter> — pour choisir toutes les "
-"photos importées entre deux sessions d'importation particulières."
-
-#: ../C/f-spot.xml:542(para)
-msgid ""
-"Every time you change settings of the filter, amount of selected photos will "
-"appear in the bottom part of the dialog."
-msgstr ""
-"À chaque fois que vous modifiez les réglages de filtre, la quantité de "
-"photos sélectionnées apparaît en bas de la boîte de dialogue."
-
-#: ../C/f-spot.xml:546(para)
-msgid ""
-"When you apply Import Roll filter, in the Find bar you will see "
-"<guilabel>Find: Import Roll</guilabel>. Now you can add some other filter to "
-"finetune your selection."
-msgstr ""
-"Quand vous appliquez le filtre d'importation de séries, "
-"<guilabel>Rechercher : Série d'importation</guilabel> apparaît dans la barre "
-"de recherche. Vous pouvez alors ajouter d'autres filtres pour affiner votre "
-"recherche."
-
-#: ../C/f-spot.xml:551(para)
-msgid ""
-"If you don't need the Import Roll filter anymore, choose "
-"<menuchoice><guimenu>Find</guimenu><guisubmenu>Import Roll</"
-"guisubmenu><guimenuitem>Clear roll filter</guimenuitem></menuchoice> to "
-"remove Import Roll from search criteria. You can also click the close button "
-"(<guibutton>X</guibutton>) of the search bar to discard all the current "
-"search options."
-msgstr ""
-"Si vous n'avez plus besoin du filtre d'importation de séries, choisissez "
-"<menuchoice><guimenu>Recherche</guimenu><guisubmenu>Série importée</"
-"guisubmenu><guimenuitem>Effacer le filtre de série</guimenuitem></"
-"menuchoice> pour effacer la série d'importation des critères de recherche. "
-"Vous pouvez également cliquer sur le bouton fermer (<guibutton>X</"
-"guibutton>) de la barre de recherche pour éliminer toutes les options de "
-"recherche actuelles."
-
-#: ../C/f-spot.xml:560(para)
-msgid ""
-"The number of displayed rolls in the dialog is defined by the gconf key "
-"<filename class=\"directory\">/apps/f-spot/import/gui_roll_history</"
-"filename>. Default value is 10."
-msgstr ""
-"Le nombre de séries affichées dans la boîte de dialogue est défini par la "
-"clé gconf <filename class=\"directory\">/apps/f-spot/import/"
-"gui_roll_history</filename>. La valeur par défaut est 10."
-
-#: ../C/f-spot.xml:569(title)
-msgid "Type-to-find"
-msgstr "Recherche au clavier"
-
-#: ../C/f-spot.xml:570(para)
-msgid ""
-"There is also a type-to-find entry. Press <keycap>/</keycap> to open it. It "
-"cannot be used at the same time as the find bar. You can type queries such "
-"as \"TagA and (TagB or (TagC and TagD))\". At any point, if F-Spot "
-"recognizes what you've typed as a valid query, it will update your search. "
-"The <emphasis>not</emphasis> operator is not yet supported."
-msgstr ""
-"Il existe aussi une fonction de recherche avec le clavier. Tapez <keycap>/</"
-"keycap> pour l'activer. Ce mode ne peut être utilisé en même temps que la "
-"barre de recherche. Vous pouvez taper des requêtes telles que « Étiquette1 "
-"and (ÉtiquetteB or (ÉtiquetteC and ÉtiquetteD)) ». Le mot anglais « and » "
-"signifie « et » et le mot anglais « or » signifie « ou ». À tout moment, si "
-"votre requête est valide, F-Spot va mettre à jour votre sélection. "
-"L'opérateur <emphasis>not</emphasis> (« pas » en français) n'est pas encore "
-"pris en charge."
-
-#: ../C/f-spot.xml:578(para)
-msgid ""
-"This function will also search for the typed text into photos comments and "
-"filename."
-msgstr ""
-"Cette fonction recherche également le texte saisi dans les commentaires et "
-"dans les noms de fichiers des photos."
-
-#: ../C/f-spot.xml:585(title)
-msgid "Fullscreen Mode and Slideshows"
-msgstr "Mode plein écran et diaporamas"
-
-#: ../C/f-spot.xml:586(para)
-msgid ""
-"For fewer distractions and larger display, you can view your photos in full "
-"screen mode. You control when to show the next photo or to return to the "
-"previous. Enter fullscreen mode by pressing <keycap>F11</keycap> at any time "
-"or by pressing the button in the toolbar."
-msgstr ""
-"Pour limiter l'encombrement et obtenir un affichage plus grand, vous pouvez "
-"visualiser vos photos en mode plein écran. Vous pouvez contrôler le passage "
-"d'une photo à l'autre, dans les deux sens. Vous pouvez activer n'importe "
-"quand le mode plein écran en tapant sur <keycap>F11</keycap> ou en cliquant "
-"sur le bouton correspondant de la barre d'outils."
-
-#: ../C/f-spot.xml:593(title)
-msgid "FullScreen"
-msgstr "Plein écran"
-
-#: ../C/f-spot.xml:600(para)
-msgid ""
-"In slideshow mode, you can sit back and view your photos as they are "
-"presented to you. You can start a slideshow by pressing the button on the "
-"toolbar."
-msgstr ""
-"En mode diaporama, vous pouvez vous installer confortablement et assister au "
-"défilement de vos photos. Vous pouvez lancer un diaporama en cliquant sur le "
-"bouton correspondant dans la barre d'outils."
-
-#: ../C/f-spot.xml:606(title)
-msgid "SlideShow"
-msgstr "Diaporama"
-
-#: ../C/f-spot.xml:617(title)
-msgid "Sharing your photos"
-msgstr "Partage des photos"
-
-#: ../C/f-spot.xml:620(para)
-msgid ""
-"There are many ways to share your photos using F-Spot. All of the following "
-"methods will only share the photos you have selected when you run them."
-msgstr ""
-"Il existe plusieurs façons de partager des photos avec F-Spot. Toutes les "
-"méthodes ci-dessous ne partagent que les photos sélectionnées lorsque vous "
-"les utilisez."
-
-#: ../C/f-spot.xml:627(title)
-msgid "E-mail"
-msgstr "Courriel"
-
-#: ../C/f-spot.xml:628(para)
-msgid ""
-"E-mail your photos directly from F-Spot with the <menuchoice><guimenu>File</"
-"guimenu><guimenuitem>Send Mail</guimenuitem></menuchoice> menu."
-msgstr ""
-"Envoyez directement vos photos par courrier électronique à partir de F-Spot "
-"au moyen du menu <menuchoice><guimenu>Fichier</guimenu><guimenuitem>Envoyer "
-"par courriel</guimenuitem></menuchoice>."
-
-#: ../C/f-spot.xml:634(title)
-msgid "Note 1"
-msgstr "Note 1"
-
-#: ../C/f-spot.xml:635(para)
-msgid ""
-"The email program used for this is defined at the GNOME level. You can "
-"change the default e-mailer for your user using the <application>Preferred "
-"Applications</application> tool in <menuchoice><guimenu>System</"
-"guimenu><guisubmenu>Preferences</guisubmenu></menuchoice>."
-msgstr ""
-"Le logiciel de messagerie utilisé est celui défini au niveau de GNOME. Vous "
-"pouvez modifier le logiciel par défaut pour votre compte en utilisant "
-"l'outil <application>Applications préférées</application> du menu "
-"<menuchoice><guimenu>Système</guimenu><guisubmenu>Préférences</guisubmenu></"
-"menuchoice>."
-
-#: ../C/f-spot.xml:644(title)
-msgid "Note 2"
-msgstr "Note 2"
-
-#: ../C/f-spot.xml:645(para)
-msgid ""
-"If some of the photos you'd like to send by email are in a format that F-"
-"Spot can't write (e.g. RAW images), the size selection dialog will become "
-"insensitive and the originals will be sent."
-msgstr ""
-"Si une partie des photos que vous désirez envoyer par courriel est dans un "
-"format que F-Spot ne peux lire (par ex. des images RAW), le sélecteur de "
-"taille devient inactif et les originaux sont envoyés."
-
-#: ../C/f-spot.xml:652(para)
-msgid ""
-"If you're sending resized pictures, F-Spot will keep the modified versions "
-"somewhere in the <filename class=\"directory\">/tmp</filename> directory for "
-"30 seconds. It's not an issue with evolution, which makes it's own local "
-"copy of the attachments, but could be a bit shorter if you're using "
-"Thunderbird. You can change the delay by editing the gconf key <filename "
-"class=\"directory\">/apps/f-spot/export/email/delete_timeout_seconds</"
-"filename>."
-msgstr ""
-"Si vous envoyez des photos redimensionnées, F-Spot conserve les versions "
-"modifiées quelque part dans le répertoire <filename class=\"directory\">/"
-"tmp</filename> pendant 30 secondes. Ce n'est pas un problème avec Evolution "
-"qui fait sa propre copie locale des pièces jointes, mais un peu court si "
-"vous utilisez Thunderbird. Vous pouvez modifier le délai en modifiant la clé "
-"gconf <filename class=\"directory\">/apps/f-spot/export/email/"
-"delete_timeout_seconds</filename>."
-
-#: ../C/f-spot.xml:664(title)
-msgid "Print"
-msgstr "Impression"
-
-#: ../C/f-spot.xml:665(para)
-msgid ""
-"Print your photos with the <menuchoice><guimenu>File</"
-"guimenu><guimenuitem>Print</guimenuitem></menuchoice> menu."
-msgstr ""
-"Imprimez vos photos au moyen du menu <menuchoice><guimenu>Fichier</"
-"guimenu><guimenuitem>Imprimer</guimenuitem></menuchoice>."
-
-#: ../C/f-spot.xml:672(title)
-msgid "Burn to CD"
-msgstr "Gravure sur CD"
-
-#: ../C/f-spot.xml:673(para)
-msgid ""
-"Burn your photos to CD or DVD with the <menuchoice><guimenu>File</"
-"guimenu><guisubmenu>Export</guisubmenu><guimenuitem>Export to CD</"
-"guimenuitem></menuchoice> menu."
-msgstr ""
-"Gravez vos photos sur CD ou DVD grâce au menu <menuchoice><guimenu>Fichier</"
-"guimenu><guisubmenu>Exporter</guisubmenu><guimenuitem>Graver un CD</"
-"guimenuitem></menuchoice>."
-
-#: ../C/f-spot.xml:681(title)
-msgid "Generate a Website Gallery or Folder"
-msgstr "Génération d'une galerie Web ou d'un dossier"
-
-#: ../C/f-spot.xml:682(para)
-msgid ""
-"The <menuchoice><guimenu>File</guimenu><guimenuitem>Export</"
-"guimenuitem><guimenuitem>Export to Folder</guimenuitem></menuchoice> feature "
-"gives you three ways to export your images."
-msgstr ""
-"La fonctionnalité du menu <menuchoice><guimenu>Fichier</"
-"guimenu><guimenuitem>Exporter</guimenuitem><guimenuitem>Exporter vers un "
-"dossier</guimenuitem></menuchoice> propose trois façons d'exporter vos "
-"images."
-
-#: ../C/f-spot.xml:690(para)
-msgid ""
-"<guilabel>Use Original</guilabel> exports your photos ready for use with "
-"Jakub Steiner's free <ulink url=\"http://jimmac.musichall.cz/original.php\"> "
-"Original Photo Gallery</ulink> software. If you are unsure about this "
-"option, it is probably not the right one for you."
-msgstr ""
-"<guilabel>Utiliser Original</guilabel> exporte les photos prêtes à être "
-"exploitées par le logiciel libre de Jakub Steiner <ulink url=\"http://jimmac."
-"musichall.cz/original.php\">Original Photo Gallery</ulink>. Si cette option "
-"ne vous dit pas grand chose, elle n'est probablement pas appropriée pour "
-"vous."
-
-#: ../C/f-spot.xml:698(para)
-msgid ""
-"<guilabel>Use static HTML files</guilabel> exports your photos to an "
-"interactive website, ready for you to upload."
-msgstr ""
-"<guilabel>Utiliser des fichiers HTML statiques</guilabel> exporte les photos "
-"vers un site Web interactif, prêt à être mis en ligne."
-
-#: ../C/f-spot.xml:704(para)
-msgid ""
-"<guilabel>Plain Files</guilabel> exports your images as files within "
-"directories, without putting them into a gallery."
-msgstr ""
-"<guilabel>Fichiers normaux</guilabel> exporte les images en tant que "
-"fichiers dans des répertoires, sans en faire une galerie."
-
-#: ../C/f-spot.xml:713(title)
-msgid "Post to your online galleries"
-msgstr "Envoi vers des galeries en ligne"
-
-#: ../C/f-spot.xml:714(para)
-msgid ""
-"If you use Flickr, SmugMug, 23hq or Picasa Web Album, you can post your "
-"files directly from F-Spot with the <menuchoice><guimenu>File</"
-"guimenu><guisubmenu>Export</guisubmenu></menuchoice> menu, choosing "
-"corresponding submenu item."
-msgstr ""
-"Si vous utilisez Flickr, SmugMug, 23hq ou Picasa Web Album, vous pouvez "
-"envoyer directement vos fichiers depuis F-Spot avec le menu "
-"<menuchoice><guimenu>Fichier</guimenu><guisubmenu>Exporter</guisubmenu></"
-"menuchoice> en choisissant l'entrée correspondante du sous-menu."
-
-#: ../C/f-spot.xml:719(para)
-msgid ""
-"If you use the PHP software known as <ulink url=\"http://gallery.sourceforge."
-"net/\"> Gallery</ulink>, you can post your photos to your existing album "
-"with the <menuchoice><guimenu>File</guimenu><guimenuitem>Export</"
-"guimenuitem><guimenuitem>Export to Web Gallery</guimenuitem></menuchoice> "
-"menu. You must first enable the Remote module within your Gallery "
-"installation."
-msgstr ""
-"Si vous utilisez le logiciel en PHP connu sous le nom de <ulink url=\"http://"
-"gallery.sourceforge.net/\">Gallery</ulink>, vous pouvez envoyer vos photos "
-"vers votre album existant à l'aide du menu <menuchoice><guimenu>Fichier</"
-"guimenu><guimenuitem>Exporter</guimenuitem><guimenuitem>Exporter vers Web "
-"Gallery</guimenuitem></menuchoice>. Vous devez préalablement activer le "
-"module distant dans votre installation de Gallery."
-
-#: ../C/f-spot.xml:727(title)
-msgid "Note for Gallery 2.2 users"
-msgstr "Note aux utilisateurs de Gallery 2.2"
-
-#: ../C/f-spot.xml:728(para)
-msgid "The Remote plugin for Gallery should be 1.0.8 or newer."
-msgstr ""
-"La version du greffon Remote pour Gallery doit être 1.0.8 ou plus récente."
-
-#: ../C/f-spot.xml:732(para)
-msgid ""
-"<ulink url=\"http://pennave.sourceforge.net\">PennAve</ulink> is a Python "
-"web-application that directly uses F-Spot's database to present a dynamic "
-"gallery of your photos and tags."
-msgstr ""
-"<ulink url=\"http://pennave.sourceforge.net\">PennAve</ulink> est une "
-"application Web en Python qui utilise directement la base de données de F-"
-"Spot pour afficher une galerie dynamique de vos photos et étiquettes."
-
-#: ../C/f-spot.xml:737(para)
-msgid ""
-"<ulink url=\"http://www.conduit-project.org\">Conduit</ulink> is an "
-"application that can sync photos that have a particular tag with your Flickr "
-"or Picasa Web Album web storage."
-msgstr ""
-"<ulink url=\"http://www.conduit-project.org\">Conduit</ulink> est un "
-"programme qui peut synchroniser les photos qui possèdent une certaine "
-"étiquette avec votre espace de stockage Web Flickr ou Picasa Web Album."
-
-#: ../C/f-spot.xml:746(title)
-msgid "Color management"
-msgstr "Gestion des couleurs"
-
-#: ../C/f-spot.xml:749(title)
-msgid "What's color management"
-msgstr "Qu'est ce que la gestion des couleurs ?"
-
-#: ../C/f-spot.xml:751(para)
-msgid ""
-"When you capture a photo and look at it on a display, it looks different "
-"than on a camera's preview display or on any other display. It will also "
-"look different when you print it. This is because every device has unique "
-"color reproduction capabilities."
-msgstr ""
-"Lorsque vous prenez une photo et que vous la regardez à l'écran, elle apparaît "
-"différente de celle affichée sur l'écran de l'appareil photo ou sur "
-"n'importe quel autre écran. Elle semble également différente lorsque vous "
-"l'imprimez. La raison est que chaque périphérique possède ses propres "
-"capacités de reproduction des couleurs."
-
-#: ../C/f-spot.xml:758(para)
-msgid ""
-"Color management system (CMS) is a tool to achieve reliable color "
-"reproduction for both display and output (e.g. a printer). A CMS relies on "
-"color profiles to map original colors to the color that a device can "
-"reproduce so that colors will appear the same way everywhere — on a computer "
-"LCD monitor, on a print from your local photolab etc."
-msgstr ""
-"Le système de gestion des couleurs (« Color management system » : CMS) est "
-"un outil pour obtenir une reproduction fidèle des couleurs pour tous les types "
-"d'affichage ou d'impression. Un CMS repose sur des "
-"profils de couleur pour faire correspondre les couleurs d'origine aux couleurs "
-"qu'un périphérique peut reproduire afin qu'elles apparaissent "
-"identiques partout : sur l'écran LCD d'un ordinateur, sur une impression à "
-"partir de votre laboratoire photo à domicile, etc."
-
-#: ../C/f-spot.xml:768(title)
-msgid "What's a color profile"
-msgstr "Qu'est ce qu'un profil de couleur ?"
-
-#: ../C/f-spot.xml:770(para)
-msgid ""
-"A color profile is a file with either .icc (thus its is often called an ICC "
-"profile) or .icm extension that describes how device's colors correspond to "
-"a universal description of colors."
-msgstr ""
-"Un profil de couleur est un fichier d'extension .icc (il sera souvent appelé "
-"profil ICC) ou .icm qui décrit comment les couleurs du périphérique "
-"correspondent à une description universelle des couleurs."
-
-#: ../C/f-spot.xml:776(para)
-msgid "There are several types of profiles:"
-msgstr "Il y a plusieurs types de profils :"
-
-#: ../C/f-spot.xml:782(para)
-msgid ""
-"Input device profile. It's profile for a camera or a profile that an "
-"application like XSane embeds into a scanned image."
-msgstr ""
-"Profil de périphérique d'entrée. C'est le profil d'un appareil photo ou un "
-"profil qu'une application comme XSane inclut dans une image scannée."
-
-#: ../C/f-spot.xml:788(para)
-msgid ""
-"Working space profile. It's a profile that describes color space in which "
-"all operations are done inside an application. Usually very wide gamut "
-"profiles like AdobeRGB1998 or ProPhotoRGB are used for that."
-msgstr ""
-"Profil d'espace de travail. C'est un profil qui décrit l'espace "
-"colorimétrique dans lequel toutes les opérations sont réalisées dans une "
-"application. Ce sont généralement des profils avec gamme de couleurs très étendue "
-"comme AdobeRGB1998 ou ProPhotoRGB."
-
-#: ../C/f-spot.xml:795(para)
-msgid "Display profile. It's a profile for a monitor."
-msgstr "Profil d'affichage. C'est un profil pour un écran."
-
-#: ../C/f-spot.xml:800(para)
-msgid "Output profile. This is usually a profile for you printer."
-msgstr "Profil de sortie. C'est en général un profil pour une imprimante."
-
-#: ../C/f-spot.xml:806(para)
-msgid ""
-"Currently F-Spot allows setting only display and output profiles. All color "
-"operations are done in sRGB color space."
-msgstr ""
-"Actuellement, F-Spot ne permet le réglage que pour les profils d'affichage et de "
-"sortie. Toutes les opérations de couleurs sont réalisées dans l'espace "
-"colorimétrique sRVB."
-
-#: ../C/f-spot.xml:813(title)
-msgid "How to get my screen/printer color profile"
-msgstr "Obtention d'un profil de couleur pour un écran ou une imprimante"
-
-#: ../C/f-spot.xml:815(para)
-msgid "There are few ways to get a color profile."
-msgstr "Il y a peu de façons d'obtenir un profil de couleur."
-
-#: ../C/f-spot.xml:820(title)
-msgid "From CD or Internet"
-msgstr "À partir d'un CD ou d'Internet"
-
-#: ../C/f-spot.xml:822(para)
-msgid ""
-"Many hardware manufacturers put color profiles into CD in the bundle. If you "
-"have one (from monitor or printer), you can use it. Or you can download it "
-"from the Internet (usually, from support section of the manufacturer's web "
-"site). Some camera manufacturers (Nikon, Canon) also provide ICC profiles."
-msgstr ""
-"De nombreux fabriquants de matériel mettent à disposition des profils de "
-"couleurs sur les CD livrés avec leur matériel. Si vous en avez un (pour écran ou imprimante), "
-"vous pouvez l'utiliser, sinon téléchargez-le sur Internet (généralement à "
-"partir de la section assistance du site Web du fabricant). Certains "
-"fabriquants d'appareils photo (Nikon, Canon) fournissent également des "
-"profils ICC."
-
-#: ../C/f-spot.xml:832(title)
-msgid "Calibrating and profiling"
-msgstr "Calibration et profil"
-
-#: ../C/f-spot.xml:834(para)
-msgid ""
-"Best results can be achieved by calibrating and profiling devices with a "
-"measurement device. It is not so difficult, but it means that you need a "
-"spectrophotometer to do all measurements and create an ICC profile."
-msgstr ""
-"Les meilleurs résultats sont obtenus en calibrant et en ajustant le profil "
-"des périphériques avec un dispositif de mesure. Ce n'est pas difficile, mais "
-"cela suppose que vous disposiez d'un spectrophotomètre pour réaliser toutes "
-"les mesures et créer un profil ICC."
-
-#: ../C/f-spot.xml:840(para)
-msgid ""
-"If you are on Windows or Mac OS X, you can use manufacturer's software "
-"coming with a spectrophotometer. On Linux you will have to use either <ulink "
-"url=\"http://www.argyllcms.com\">Argyll</ulink>, which is a set of versatile "
-"command line tools, or <ulink url=\"http://lprof.sourceforge.net/\">LProf</"
-"ulink>, which has a graphical user interface."
-msgstr ""
-"Si vous êtes sous Windows ou Mac OS X, vous pouvez utiliser le logiciel du "
-"fabriquant fourni avec le spectrophotomètre. Sous Linux, vous devez soit "
-"utiliser <ulink url=\"http://www.argyllcms.com\">Argyll</ulink> qui est un "
-"ensemble d'outils variés en ligne de commande ou <ulink url=\"http://lprof."
-"sourceforge.net/\">LProf</ulink> qui possède une interface graphique."
-
-#: ../C/f-spot.xml:848(para)
-msgid ""
-"Please refer to documentation of third party hardware and software vendors "
-"for details."
-msgstr ""
-"Veuillez consulter la documentation des tiers vendeurs de matériels et de "
-"logiciels pour plus de détails."
-
-#: ../C/f-spot.xml:855(title)
-msgid "Embedding"
-msgstr "Intégration"
-
-#: ../C/f-spot.xml:857(para)
-msgid ""
-"Image formats themselves (such as TIFF, JPEG, PNG...) may contain embedded "
-"color profiles. If color management is enabled, F-Spot looks for such "
-"embedded profiles and takes them into consideration."
-msgstr ""
-"Des formats d'images (tels que TIFF, JPEG, PNG...) peuvent contenir leurs "
-"propres profils de couleurs incorporés. Si la gestion des couleurs est "
-"activée, F-Spot recherche ces profils incorporés et les prend en "
-"considération."
-
-#: ../C/f-spot.xml:866(title)
-msgid "How to use color management in F-Spot"
-msgstr "Utilisation de la gestion des couleurs dans F-Spot"
-
-#: ../C/f-spot.xml:868(para)
-msgid ""
-"Color management in F-Spot can use only RGB profiles at this time (and you "
-"can't see other profiles in the F-Spot)."
-msgstr ""
-"La gestion des couleurs dans F-Spot ne peut utiliser pour le moment que des "
-"profils RVB (vous ne pouvez pas voir les autres profils dans F-Spot)."
-
-#: ../C/f-spot.xml:875(para)
-msgid ""
-"Copy your color profiles into the <filename class=\"directory\">/usr/share/"
-"color/icc</filename> or <filename class=\"directory\">/usr/local/share./"
-"color/icc</filename> directory."
-msgstr ""
-"Copiez vos profils de couleurs dans le répertoire <filename class=\"directory"
-"\">/usr/share/color/icc</filename> ou <filename class=\"directory\">/usr/"
-"local/share/color/icc</filename>."
-
-#: ../C/f-spot.xml:883(para)
-msgid ""
-"Enable the color management with the <menuchoice><guimenu>Edit</"
-"guimenu><guimenuitem>Preferences</guimenuitem></menuchoice> menu."
-msgstr ""
-"Activez la gestion des couleurs au moyen du menu "
-"<menuchoice><guimenu>Édition</guimenu><guimenuitem>Préférences</"
-"guimenuitem></menuchoice>."
-
-#: ../C/f-spot.xml:890(para)
-msgid ""
-"Select <guilabel>Display</guilabel> and <guilabel>Output</guilabel> profiles."
-msgstr ""
-"Choisissez les profils d'<guilabel>Affichage</guilabel> et de <guilabel>Sortie</"
-"guilabel>."
-
-#: ../C/f-spot.xml:898(para)
-msgid ""
-"You can use <ulink url=\"http://burtonini.com/blog/computers/xicc\">xicc</"
-"ulink> to load ICC profile to display and use the loaded profile from F-"
-"Spot. Just mark the checkbox <guilabel>Try to use the system display "
-"profile</guilabel>."
-msgstr ""
-"Vous pouvez utiliser <ulink url=\"http://burtonini.com/blog/computers/xicc"
-"\">xicc</ulink> pour charger un profil ICC, pour afficher et utiliser le "
-"profil chargé à partir de F-Spot. Il suffit de cocher la case "
-"<guilabel>Tenter d'utiliser le profil d'affichage du système</guilabel>."
-
-#: ../C/f-spot.xml:909(title)
-msgid "Extend functionality"
-msgstr "Possibilités d'extension"
-
-#: ../C/f-spot.xml:912(title)
-msgid "What extensions are"
-msgstr "Qu'est ce qu'une extension ?"
-
-#: ../C/f-spot.xml:914(para)
-msgid ""
-"F-Spot extensions are means to add new functionality to the application. F-"
-"Spot supports two types of extension: exporters (which allow exporting "
-"photos to new web services or data storages) and tools (which allow new ways "
-"of color correction, duplicate photos finders etc.). Extensions are "
-"distributed in form of extension packages."
-msgstr ""
-"Les extensions F-Spot sont des moyens d'ajouter de nouvelles fonctionnalités "
-"à l'application. F-Spot prend en charge deux types d'extensions : les "
-"exporteurs (qui permettent d'exporter les photos vers de nouveaux services "
-"Web ou moyens de stockage de données) et les outils (qui fournissent de "
-"nouvelles manières de corriger les couleurs, de trouver des photos "
-"dupliquées, etc.). Les extensions sont distribuées sous la forme de paquets "
-"d'extensions."
-
-#: ../C/f-spot.xml:921(para)
-msgid ""
-"In the best traditions of not reinventing the wheel extensions can use other "
-"extensions, which means that one extension cannot work, if another extension "
-"is not installed. This concept of dependance actually means that"
-msgstr ""
-"Dans la meilleure tradition de ne pas réinventer la roue, les extensions "
-"peuvent s'appuyer sur d'autres extensions, ce qui signifie qu'une extension "
-"peut ne pas fonctionner si une autre extension n'est pas installée. Cette "
-"notion de dépendance signifie en réalité que"
-
-#: ../C/f-spot.xml:928(para)
-msgid ""
-"you cannot install an extension, if the extension it depends on, is not "
-"present in the system"
-msgstr ""
-"vous ne pouvez installer une extension si l'extension dont elle dépend n'est "
-"pas présente sur le système ;"
-
-#: ../C/f-spot.xml:933(para)
-msgid "you cannot remove an extension on which some other extension depends"
-msgstr ""
-"vous ne pouvez supprimer une extension dont une ou plusieurs extensions "
-"dépendent."
-
-#: ../C/f-spot.xml:941(title)
-msgid "Managing extensions"
-msgstr "Gestions des extensions"
-
-#: ../C/f-spot.xml:943(para)
-msgid ""
-"To manage extensions choose <menuchoice><guimenu>Edit</"
-"guimenu><guimenuitem>Manage Extensions</guimenuitem></menuchoice> menu item."
-msgstr ""
-"Pour gérer les extensions, choisissez <menuchoice><guimenu>Édition</"
-"guimenu><guimenuitem>Gérer les extensions</guimenuitem></menuchoice>."
-
-#: ../C/f-spot.xml:949(title)
-msgid "Managing extension repositories"
-msgstr "Gestion des dépôts d'extensions"
-
-#: ../C/f-spot.xml:951(para)
-msgid ""
-"Simply put, repositories are extension storages. They can be either network "
-"or local. To add a new repository click Repositories button, choose type of "
-"the repository you are about to add and provide either URL or path. If the "
-"URL or path you specified doesn't contain a description (index) file for "
-"extensions, a warning message will pop up to tell you that."
-msgstr ""
-"Pour faire simple, les dépôts sont des stocks d'extensions. Ils peuvent être "
-"sur le réseau ou en local. Pour ajouter un nouveau dépôt, cliquez sur le "
-"bouton Dépôts, choisissez le type du dépôt que vous voulez ajouter et "
-"saisissez l'URL ou le chemin de celui-ci. Si l'URL ou le chemin spécifié ne "
-"contient pas de fichier de description (index) des extensions, un message "
-"d'alerte apparaît pour vous en informer."
-
-#: ../C/f-spot.xml:958(para)
-msgid ""
-"To remove a repository click <guibutton>Repositories</guibutton> button "
-"again, choose the repository you are about to delete and click "
-"<guibutton>Delete</guibutton> button."
-msgstr ""
-"Pour supprimer un dépôt, cliquez sur le bouton <guibutton>Dépôts</"
-"guibutton>, choisissez le dépôt que vous voulez supprimer et cliquez sur le "
-"bouton <guibutton>Supprimer</guibutton>."
-
-#: ../C/f-spot.xml:966(title)
-msgid "Installing and updating extensions"
-msgstr "Installation et mise à jour d'extensions"
-
-#: ../C/f-spot.xml:968(para)
-msgid ""
-"To install an extension click <guibutton>Install extensions...</guibutton> "
-"button. In the newly presented dialog"
-msgstr ""
-"Pour installer une extension, cliquez sur le bouton <guibutton>Installer des "
-"extensions</guibutton>. Dans la boîte de dialogue qui apparaît :"
-
-#: ../C/f-spot.xml:974(para)
-msgid ""
-"Choose repository to install from all known repositories or just one of "
-"available repositories."
-msgstr ""
-"Choisissez le dépôt à installer parmi tous les dépôts connus ou seulement un "
-"des dépôts disponibles."
-
-#: ../C/f-spot.xml:980(para)
-msgid ""
-"Choose, what extension packages you want to see: All, Only new, Only updates."
-msgstr ""
-"Choisissez quel paquet d'extensions vous voulez voir : tous, seulement un, "
-"seulement les mises à jour."
-
-#: ../C/f-spot.xml:985(para)
-msgid ""
-"Click the <guibutton>Update</guibutton> button to update list of available "
-"extension packages by given criteria."
-msgstr ""
-"Cliquez sur le bouton <guibutton>Mise à jour</guibutton> pour mettre à jour "
-"la liste des paquets d'extensions disponibles selon les critères donnés."
-
-#: ../C/f-spot.xml:991(para)
-msgid ""
-"Choose extensions you want to install/update, click <guibutton>Information</"
-"guibutton> to see summary on selected package, if you want to."
-msgstr ""
-"Choisissez les extensions que vous voulez installer ou mettre à jour. "
-"Cliquez sur <guibutton>Informations</guibutton> pour voir la description de "
-"l'extension sélectionnée, si vous le désirez."
-
-#: ../C/f-spot.xml:997(para)
-msgid "Click <guibutton>Forward</guibutton> to proceed with installation."
-msgstr ""
-"Cliquez sur <guibutton>Suivant</guibutton> pour effectuer l'installation."
-
-#: ../C/f-spot.xml:1005(title)
-msgid "Enabling and disabling extensions"
-msgstr "Activation et désactivation d'extensions"
-
-#: ../C/f-spot.xml:1007(para)
-msgid ""
-"You might want to temporarily enable or disable a particular extension "
-"package, for example, if the extension is not stable enough to handle a "
-"large amount of photos or if menus get crowded with extensions."
-msgstr ""
-"Il est possible que vous souhaitiez activer ou désactiver temporairement un "
-"paquet d'extension particulier. Par exemple, si l'extension n'est pas assez "
-"stable pour gérer une grande quantité de photos ou si les menus sont "
-"surchargés d'extensions."
-
-#: ../C/f-spot.xml:1012(para)
-msgid ""
-"In the <guilabel>Manage Extensions</guilabel> dialog select the extension "
-"package and click <guibutton>Enable</guibutton> or <guibutton>Disable</"
-"guibutton>. You will have to restart F-Spot to let changes apply."
-msgstr ""
-"Dans la fenêtre <guilabel>Gérer les extensions</guilabel>, sélectionnez "
-"l'extension et cliquez sur <guibutton>Activer</guibutton> ou "
-"<guibutton>Désactiver</guibutton>. Vous devez redémarrer F-Spot pour que les "
-"changements soient appliqués."
-
-#: ../C/f-spot.xml:1020(title)
-msgid "Removing extensions"
-msgstr "Suppression d'extensions"
-
-#: ../C/f-spot.xml:1022(para)
-msgid ""
-"If you don't need an extension you can remove it from the system completely. "
-"In the <guilabel>Manage Extensions</guilabel> dialog select the extension "
-"package you want to remove and click <guibutton>Delete</guibutton>."
-msgstr ""
-"Si vous n'avez pas besoin d'une extension, vous pouvez la supprimer "
-"complètement de votre système. Dans la fenêtre <guilabel>Gérer les "
-"extensions</guilabel>, choisissez l'extension que vous voulez supprimer et "
-"cliquez sur <guibutton>Supprimer</guibutton>."
-
-#: ../C/f-spot.xml:1030(title)
-msgid "Reading summary of extensions"
-msgstr "Lecture du résumé des extensions"
-
-#: ../C/f-spot.xml:1032(para)
-msgid ""
-"Every extension package contains metadata that provides the following "
-"information about the extension:"
-msgstr ""
-"Tous les paquets d'extensions contiennent des méta-données qui fournissent "
-"les informations suivantes à propos de l'extension :"
-
-#: ../C/f-spot.xml:1038(para)
-msgid "Description, which usually covers puprose of the extension"
-msgstr "Description qui décrit en géneral les objectifs de l'extension"
-
-#: ../C/f-spot.xml:1043(para)
-msgid "Version"
-msgstr "Version"
-
-#: ../C/f-spot.xml:1048(para)
-msgid "Author"
-msgstr "Auteur"
-
-#: ../C/f-spot.xml:1053(para)
-msgid "Dependencies"
-msgstr "Dépendances"
-
-#: ../C/f-spot.xml:1059(para)
-msgid ""
-"In the <guilabel>Manage Extensions</guilabel> dialog select the extension "
-"package you want to read summary of and click <guibutton>Information</"
-"guibutton>."
-msgstr ""
-"Dans la fenêtre <guilabel>Gérer les extensions</guilabel>, sélectionnez "
-"l'extension dont vous voulez lire la description et cliquez sur le bouton "
-"<guibutton>Informations</guibutton>."
-
-#: ../C/f-spot.xml:1067(title)
-msgid "Developing extensions"
-msgstr "Développement d'extensions"
-
-#: ../C/f-spot.xml:1069(para)
-msgid ""
-"<ulink url=\"http://f-spot.org/Extend_F-Spot\">Extend F-Spot</ulink> "
-"document gives instructions on developing your own extensions for F-Spot."
-msgstr ""
-"Le document <ulink url=\"http://f-spot.org/Extend_F-Spot\">Extend F-Spot</"
-"ulink> fournit des instructions sur le développement de vos propres "
-"extensions pour F-Spot."
-
-#: ../C/f-spot.xml:1077(title)
-msgid "Shortcuts"
-msgstr "Raccourcis"
-
-#: ../C/f-spot.xml:1080(title)
-msgid "Global Shortcuts"
-msgstr "Raccourcis globaux"
-
-#: ../C/f-spot.xml:1085(entry) ../C/f-spot.xml:1194(entry)
-#: ../C/f-spot.xml:1290(entry) ../C/f-spot.xml:1342(entry)
-msgid "Key"
-msgstr "Touche"
-
-#: ../C/f-spot.xml:1088(entry) ../C/f-spot.xml:1197(entry)
-#: ../C/f-spot.xml:1293(entry) ../C/f-spot.xml:1345(entry)
-msgid "Action"
-msgstr "Action"
-
-#: ../C/f-spot.xml:1096(keycap)
-msgid "["
-msgstr "["
-
-#: ../C/f-spot.xml:1098(entry)
-msgid "Rotate the selected photos to the left"
-msgstr "Tourne les photos sélectionnées vers la gauche"
-
-#: ../C/f-spot.xml:1104(keycap)
-msgid "]"
-msgstr "]"
-
-#: ../C/f-spot.xml:1106(entry)
-msgid "Rotate the selected photos to the right"
-msgstr "Tourne les photos sélectionnées vers la droite"
-
-#: ../C/f-spot.xml:1112(keycap) ../C/f-spot.xml:1120(keycap)
-msgid "Del"
-msgstr "Suppr"
-
-#: ../C/f-spot.xml:1114(entry)
-msgid "Remove selected photos from F-Spot's catalogue"
-msgstr "Supprime les photos sélectionnées du catalogue de F-Spot"
-
-#: ../C/f-spot.xml:1120(keycap) ../C/f-spot.xml:1213(keycap)
-#: ../C/f-spot.xml:1247(keycap) ../C/f-spot.xml:1256(keycap)
-#: ../C/f-spot.xml:1273(keycap) ../C/f-spot.xml:1427(keycap)
-msgid "Shift"
-msgstr "Maj"
-
-#: ../C/f-spot.xml:1122(entry)
-msgid "Delete selected photos permanently from the drive"
-msgstr "Supprime définitivement les photos sélectionnées du disque"
-
-#: ../C/f-spot.xml:1129(keycap)
-msgid "t"
-msgstr "t"
-
-#: ../C/f-spot.xml:1131(entry)
-msgid "View or edit tags for selected photos"
-msgstr "Affiche ou modifie les étiquettes des photos sélectionnées"
-
-#: ../C/f-spot.xml:1137(keycap)
-msgid "F11"
-msgstr "F11"
-
-#: ../C/f-spot.xml:1139(entry) ../C/f-spot.xml:1380(entry)
-msgid "Full screen view"
-msgstr "Affichage plein écran"
-
-#: ../C/f-spot.xml:1145(keycap) ../C/f-spot.xml:1153(keycap)
-#: ../C/f-spot.xml:1161(keycap) ../C/f-spot.xml:1169(keycap)
-#: ../C/f-spot.xml:1205(keycap) ../C/f-spot.xml:1213(keycap)
-#: ../C/f-spot.xml:1231(keycap) ../C/f-spot.xml:1256(keycap)
-#: ../C/f-spot.xml:1309(keycap)
-msgid "Ctrl"
-msgstr "Ctrl"
-
-#: ../C/f-spot.xml:1145(keycap)
-msgid "I"
-msgstr "I"
-
-#: ../C/f-spot.xml:1147(entry)
-msgid "Displays information about the photo"
-msgstr "Affiche des informations sur la photo"
-
-#: ../C/f-spot.xml:1153(keycap)
-msgid "Equals"
-msgstr "="
-
-#: ../C/f-spot.xml:1155(entry)
-msgid "Zoom-in"
-msgstr "Agrandit"
-
-#: ../C/f-spot.xml:1161(keycap)
-msgid "Minus"
-msgstr "-"
-
-#: ../C/f-spot.xml:1163(entry)
-msgid "Zoom-out"
-msgstr "Réduit"
-
-#: ../C/f-spot.xml:1169(keycap) ../C/f-spot.xml:1361(keycap)
-msgid "N"
-msgstr "N"
-
-#: ../C/f-spot.xml:1171(entry)
-msgid "Import photos"
-msgstr "Importe des photos"
-
-#: ../C/f-spot.xml:1177(keycap)
-msgid "Alt"
-msgstr "Alt"
-
-#: ../C/f-spot.xml:1177(keycap)
-msgid "0-5"
-msgstr "0-5"
-
-#: ../C/f-spot.xml:1179(entry)
-msgid "Alt plus a number from 0 to 5 rate the selected picture(s)"
-msgstr ""
-"Alt plus un nombre de 0 à 5 met une note à la (ou aux) image(s) sélectionnée"
-"(s)"
-
-#: ../C/f-spot.xml:1189(title)
-msgid "Browse Mode Shortcuts"
-msgstr "Raccourcis du mode Navigation"
-
-#: ../C/f-spot.xml:1205(keycap) ../C/f-spot.xml:1214(keycap)
-msgid "A"
-msgstr "A"
-
-#: ../C/f-spot.xml:1207(entry)
-msgid "Select all"
-msgstr "Sélectionne tout"
-
-#: ../C/f-spot.xml:1216(entry)
-msgid "Unselect all"
-msgstr "Désélectionne tout"
-
-#: ../C/f-spot.xml:1222(keycap) ../C/f-spot.xml:1369(keycap)
-msgid "H"
-msgstr "H"
-
-#: ../C/f-spot.xml:1222(keycap) ../C/f-spot.xml:1369(keycap)
-msgid "J"
-msgstr "J"
-
-#: ../C/f-spot.xml:1223(keycap) ../C/f-spot.xml:1370(keycap)
-msgid "K"
-msgstr "K"
-
-#: ../C/f-spot.xml:1223(keycap) ../C/f-spot.xml:1370(keycap)
-msgid "L"
-msgstr "L"
-
-#: ../C/f-spot.xml:1221(entry) ../C/f-spot.xml:1368(entry)
-msgid ""
-"Arrow keys or <placeholder-1/>, <placeholder-2/>, <placeholder-3/>, "
-"<placeholder-4/>"
-msgstr ""
-"Touches fléchées ou <placeholder-1/>, <placeholder-2/>, <placeholder-3/>, "
-"<placeholder-4/>"
-
-#: ../C/f-spot.xml:1225(entry)
-msgid "Move focus"
-msgstr "Déplace l'élément actif"
-
-#: ../C/f-spot.xml:1230(entry)
-msgid "<placeholder-1/>-Arrow key"
-msgstr "<placeholder-1/>-Touche fléchée"
-
-#: ../C/f-spot.xml:1233(entry)
-msgid "Move the focus without changing the selection"
-msgstr "Déplace l'élément actif sans modifier la sélection"
-
-#: ../C/f-spot.xml:1239(keycap) ../C/f-spot.xml:1361(keycap)
-msgid "Spacebar"
-msgstr "Barre d'espace"
-
-#: ../C/f-spot.xml:1241(entry)
-msgid "Select or unselect the focused photo"
-msgstr "Sélectionne ou désélectionne la photo activée"
-
-#: ../C/f-spot.xml:1248(keycap)
-msgid "Arrow key"
-msgstr "Touche fléchée"
-
-#: ../C/f-spot.xml:1250(entry)
-msgid "Change the photo selection"
-msgstr "Modifie la sélection de photos"
-
-#: ../C/f-spot.xml:1257(keycap)
-msgid "Left arrow or Right arrow"
-msgstr "Flèche gauche ou flèche droite"
-
-#: ../C/f-spot.xml:1259(entry)
-msgid ""
-"Add/Remove all photos in the row, in the direction pressed, to the selection"
-msgstr ""
-"Ajoute ou enlève à la sélection toutes les photos d'une rangée, dans la "
-"direction correspondante"
-
-#: ../C/f-spot.xml:1265(keycap) ../C/f-spot.xml:1273(keycap)
-#: ../C/f-spot.xml:1418(keycap)
-msgid "V"
-msgstr "V"
-
-#: ../C/f-spot.xml:1267(entry)
-msgid "Pops up a larger preview of the picture pointed by the mouse"
-msgstr "Affiche un aperçu plus grand de l'image sous le pointeur de la souris"
-
-#: ../C/f-spot.xml:1275(entry)
-msgid ""
-"Pops up a larger preview and a color histogram of the picture pointed by the "
-"mouse"
-msgstr ""
-"Affiche un aperçu plus grand de l'image sous le pointeur de la souris, avec "
-"un histogramme des couleurs"
-
-#: ../C/f-spot.xml:1285(title)
-msgid "Tag Shortcuts"
-msgstr "Raccourcis portant sur les étiquettes"
-
-#: ../C/f-spot.xml:1301(keycap)
-msgid "F2"
-msgstr "F2"
-
-#: ../C/f-spot.xml:1303(entry)
-msgid "Rename selected tag"
-msgstr "Renomme l'étiquette sélectionnée"
-
-#: ../C/f-spot.xml:1309(keycap)
-msgid "T"
-msgstr "T"
-
-#: ../C/f-spot.xml:1311(entry)
-msgid "Add tags to selected photos"
-msgstr "Ajoute des étiquettes aux photos sélectionnées"
-
-#: ../C/f-spot.xml:1316(entry) ../C/f-spot.xml:1324(entry)
-msgid "n/a"
-msgstr "n/d"
-
-#: ../C/f-spot.xml:1319(entry)
-msgid "Drag and drop tags to move them"
-msgstr "Glissez les étiquettes pour les réorganiser"
-
-#: ../C/f-spot.xml:1327(entry)
-msgid "Type a tag's name to jump to it (only works if tag is shown/expanded)"
-msgstr ""
-"Saisissez le nom d'une étiquette pour la sélectionner (uniquement si cette "
-"étiquette est visible)"
-
-#: ../C/f-spot.xml:1337(title)
-msgid "Edit Mode Shortcuts"
-msgstr "Raccourcis du mode Retouches"
-
-#: ../C/f-spot.xml:1353(keycap)
-msgid "Page Up"
-msgstr "Page haut"
-
-#: ../C/f-spot.xml:1353(keycap)
-msgid "Backspace"
-msgstr "Retour arrière"
-
-#: ../C/f-spot.xml:1353(keycap)
-msgid "B"
-msgstr "B"
-
-#: ../C/f-spot.xml:1352(entry) ../C/f-spot.xml:1360(entry)
-msgid "<placeholder-1/>, <placeholder-2/>, <placeholder-3/>"
-msgstr "<placeholder-1/>, <placeholder-2/>, <placeholder-3/>"
-
-#: ../C/f-spot.xml:1355(entry)
-msgid "Go to Previous Photo"
-msgstr "Va à la photo précédente"
-
-#: ../C/f-spot.xml:1361(keycap)
-msgid "Page Down"
-msgstr "Page bas"
-
-#: ../C/f-spot.xml:1363(entry)
-msgid "Go to Next Photo"
-msgstr "Va à la photo suivante"
-
-#: ../C/f-spot.xml:1372(entry)
-msgid "Go to Previous/Next photo or move around a zoomed photo"
-msgstr "Va à la photo précédente/suivante ou se déplace dans une photo agrandie"
-
-#: ../C/f-spot.xml:1378(keycap)
-msgid "f"
-msgstr "f"
-
-#: ../C/f-spot.xml:1386(keycap)
-msgid "0"
-msgstr "0"
-
-#: ../C/f-spot.xml:1388(entry)
-msgid "Fit the image to the screen"
-msgstr "Adapte la taille de l'image à celle de l'écran"
-
-#: ../C/f-spot.xml:1394(keycap)
-msgid "1"
-msgstr "1"
-
-#: ../C/f-spot.xml:1396(entry)
-msgid "Zoom Factor to 1.0 (1 screen pixel per image pixel)"
-msgstr "Affiche l'image en taille réelle (un pixel d'écran par pixel d'image)"
-
-#: ../C/f-spot.xml:1402(keycap)
-msgid "2"
-msgstr "2"
-
-#: ../C/f-spot.xml:1404(entry)
-msgid "Zoom Factor to 2.0 (4 screen pixels per image pixel)"
-msgstr "Affiche l'image en taille double (4 pixels d'écran par pixel d'image)"
-
-#: ../C/f-spot.xml:1410(keycap)
-msgid "Escape"
-msgstr "Échap"
-
-#: ../C/f-spot.xml:1412(entry)
-msgid "Returns to Browser mode"
-msgstr "Retourne au mode Navigation"
-
-#: ../C/f-spot.xml:1422(keycap)
-msgid "v"
-msgstr "v"
-
-#: ../C/f-spot.xml:1420(entry)
-msgid ""
-"Examine photo with magnifying glass (Loupe). Doubleclick on the Loupe, or "
-"type <placeholder-1/> again to close it."
-msgstr ""
-"Examine la photo avec une loupe. Double-cliquez sur la loupe ou tapez à "
-"nouveau <placeholder-1/> pour la fermer."
-
-#: ../C/f-spot.xml:1426(entry)
-msgid "<placeholder-1/>-Mousewheel"
-msgstr "<placeholder-1/>-Molette de la souris"
-
-#: ../C/f-spot.xml:1429(entry)
-msgid "Faster filmstrip scrolling"
-msgstr "Défilement plus rapide de la bande contact"
-
-#: ../C/f-spot.xml:1435(keycap)
-msgid "i"
-msgstr "i"
-
-#: ../C/f-spot.xml:1437(entry)
-msgid "Toggle infobox visibility ''(only when in full screen)''"
-msgstr ""
-"Bascule l'affichage de la boîte d'information (seulement en mode plein écran)"
-
-#. Put one translator per line, in the form of NAME <EMAIL>, YEAR1, YEAR2.
-#: ../C/f-spot.xml:0(None)
-msgid "translator-credits"
-msgstr ""
-"Stephane Delcroix <stephane at delcroix.org>, 2007\n"
-"Claude Paroz <claude at 2xlibre.net>, 2007-2008\n"
-"Bruno Brouard <annoa.b at gmail.com>, 2008"
diff --git a/docs/it/f-spot.xml b/docs/it/f-spot.xml
deleted file mode 100644
index d9ee3cc..0000000
--- a/docs/it/f-spot.xml
+++ /dev/null
@@ -1,924 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!DOCTYPE book PUBLIC "-//OASIS//DTD DocBook XML 4.1.2//EN" "http://www.oasis-open.org/docbook/xml/4.1.2/docbookx.dtd">
-<book id="f-spot" lang="it">
- <bookinfo>
- <title>Manuale di F-Spot</title>
- <abstract role="description">
- <para>Questo è il manuale utente di F-Spot, un gestore di fotografie per GNOME.</para>
- </abstract>
- <subtitle>Questo è il manuale utente di F-Spot, un gestore di fotografie per GNOME.</subtitle>
- <copyright>
- <year>2007-2009</year>
- <holder>Aaron Bockover, Gabriel Burt, Miguel de Icaza, Bengt Thuree</holder>
- </copyright><copyright><year>2007, 2009</year><holder>Lorenzo Travaglio (ltrav02 at yahoo.it)</holder></copyright>
- <publisher>
- <publishername>Progetto documentazione di GNOME</publishername>
- </publisher>
- <authorgroup>
- <author>
- <firstname>Miguel</firstname>
- <surname>de Icaza</surname>
- </author>
- <author>
- <firstname>Aaron</firstname>
- <surname>Bockover</surname>
- </author>
- <author>
- <firstname>Bengt</firstname>
- <surname>Thuree</surname>
- </author>
- <author>
- <firstname>Gabriel</firstname>
- <surname>Burt</surname>
- </author>
- <author>
- <firstname>Alexandre</firstname>
- <surname>Prokoudine</surname>
- </author>
- <author role="maintainer">
- <firstname>Stephane</firstname>
- <surname>Delcroix</surname>
- </author>
- </authorgroup>
- <!--<include href="legal.xml" xmlns="http://www.w3.org/2001/XInclude"/>-->
- <revhistory>
- <revision>
- <revnumber>0.5</revnumber>
- <date>25/09/2008</date>
- </revision>
- <revision>
- <revnumber>0.4</revnumber>
- <date>12/09/2008</date>
- </revision>
- <revision>
- <revnumber>0.3</revnumber>
- <date>26/07/2007</date>
- </revision>
- </revhistory>
- </bookinfo>
-
- <chapter id="organizing">
- <title>Catalogare le proprie fotografie</title>
-
- <sect1 id="import">
- <title>Importare fotografie</title>
-
- <para>È possibile importare fotografie dal proprio disco fisso o dalla propria fotocamera. Quando vengono importate dalla fotocamera, ne viene sempre creata una copia, lasciando all'utente la libertà di cancellare la memoria della fotocamera. In modo predefinito viene creata una copia delle fotografie importate dal disco fisso. Se non si desidera copiarle, deselezionare l'opzione <guilabel>Copia i file nella cartella delle foto</guilabel> nel dialogo di importazione oppure tenere premuto il tasto <keycap>Maiusc</keycap> durante il trascinamento delle immagini in F-Spot.</para>
-
- <para>In modo predefinito F-Spot copia le fotografie nella directory </para>
- <para>Per verificare se una o più immagini siano già state importate dalla posizione selezionata è possibile selezionare l'opzione <guilabel>Rileva duplicati</guilabel>. F-Spot cercherà di rilevare se una copia esatta dell'immagine sia già presente e in caso affermativo non effettuerà l'importazione.</para>
- <para>Nel caso in cui si stiano importando fotografie relative ad un particolare evento o che abbiano qualche altra caratteristica in comune, è possibile creare un'etichetta che le contraddistingua per poterle facilmente ritrovare in seguito. Per fare questo occorre seguire le istruzioni della sezione <xref linkend="tag"/>. Durante l'importazione sarà necessario fare clic su <guilabel>Applica etichetta</guilabel> e scegliere l'etichetta creata in precedenza.</para>
-
- <tip>
- <para>
- F-Spot uses a database stored at
- <filename>~/.config/f-spot/photos.db</filename>. Note, to access it, use
- the sqlite3 command. You can also manually specify path to a database by
- running F-Spot with <option>-b</option> option.
- </para>
- </tip>
-
- <para>Dopo un'importazione F-Spot visualizzerà solamente le fotografie dell'ultimo rullino importato. Consultare <xref linkend="enjoying-search"/> per ulteriori informazioni sull'importazione dei rullini.</para>
- <para>È anche possibile importare direttamente da Mozilla <ulink url="http://www.mozilla.com/en-US/firefox/">Firefox</ulink> e <ulink url="http://www.mozilla.com/en-US/thunderbird/">Thunderbird</ulink> mediante <ulink url="https://addons.mozilla.org/en-US/firefox/addon/7091">Firefox</ulink> e <ulink url="https://addons.mozilla.org/en-US/thunderbird/addon/7011">Thunderbird</ulink> le estensioni di Firefox e Thunderbird per l'importazione in F-Spot scritte da <ulink url="http://personalpages.tds.net/~cdovel/">Pizzach</ulink>.</para>
- </sect1>
-
- <sect1 id="edit">
- <title>Modificare una fotografia</title>
-
- <para>Facendo doppio clic con il mouse o premendo Invio su un'immagine si attiva la modalità Modifica mediante la quale è possibile rimuovere gli occhi rossi, ritagliarla o regolarne luminosità e colore.</para>
-
- <sect2 id="edit-versions">
- <title>Versioni</title>
-
- <para>
- When you edit your photos, a new copy (called a version) is created,
- so your original is never altered. After your first edit to a photo, subsequent
- edits will modify the same version. If you want to create multiple versions
- of your photo, perhaps with different cropping or coloring, you can do so
- via the <menuchoice><guimenu>File</guimenu>
- <guimenuitem>Create new version</guimenuitem></menuchoice> option.
- </para>
- </sect2>
-
- <sect2 id="edit-crop">
- <title>Ritagliare</title>
-
- <para>
- Cropping an image is a great way to improve the quality of a photograph by
- change how it is framed. You crop a photo by selecting the part of the photo
- you want to keep. If you want your photo to be the exact dimensions necessary
- for a certain print size, you can constrain the kind of selection F-Spot will allow
- you to draw by choosing the appropriate size from the constraint drop down.
- See the <xref linkend="edit-remove-red-eye"/> below for details on making
- a selection on your photo.
- </para>
- <figure>
- <title>Strumento ritaglia</title>
- <mediaobject>
- <imageobject>
- <imagedata fileref="figures/f-spot-crop.png"/>
- </imageobject>
- </mediaobject>
- </figure>
- <para>Una volta effettuata la selezione occorre fare clic con il mouse sul pulsante di ritaglio sotto la fotografia. Se si sta lavorando sulla fotografia originale, il ritaglio produrrà una nuova versione.</para>
- </sect2>
-
- <sect2 id="edit-straighten">
- <title>Raddrizzamento</title>
-
- <para>Si tratta di uno strumento per livellare una fotografia, utile ad esempio per le foto di paesaggio scattate senza un treppiede in cui l'orizzonte (immaginario) non sia a 0°. Questo strumento ruota l'immagine dell'angolo indicato e contemporaneamente la ritaglia in modo che risulti sempre rettangolare.</para>
- <figure>
- <title>Strumento raddrizzatore</title>
- <mediaobject>
- <imageobject>
- <imagedata fileref="figures/f-spot-straighten.png"/>
- </imageobject>
- </mediaobject>
- </figure>
- </sect2>
-
- <sect2 id="edit-adjust-colors">
- <title>Regolare i colori</title>
-
- <para>Per ritoccare la luminosità, il contrasto oppure i colori di una fotografia, fare clic sull'icona <guibutton>Regola i colori della fotografia</guibutton> per aprire il menù di fotoritocco. Una volta terminate le modifiche premere <guibutton>OK</guibutton> per applicarle.</para>
- <figure>
- <title>Strumento regolazione colori</title>
- <mediaobject>
- <imageobject>
- <imagedata fileref="figures/f-spot-adjust-colors.png"/>
- </imageobject>
- </mediaobject>
- </figure>
- </sect2>
-
- <sect2 id="edit-auto-color">
- <title>Regolazione automatica dei colori</title>
-
- <para>Questo effetto regola automaticamente i livelli dei colori per ottenere un miglior bilanciamento della fotografia. Rende un miglior servizio nei casi in cui il bilanciamento automatico del bianco della fotocamera non abbia funzionato in modo adeguato.</para>
- <figure>
- <title>Regolazione automatica dei colori</title>
- <mediaobject>
- <imageobject>
- <imagedata fileref="figures/f-spot-autocolor.png"/>
- </imageobject>
- </mediaobject>
- </figure>
- </sect2>
-
- <sect2 id="edit-desaturate">
- <title>Desaturazione</title>
-
- <para>Per trasformare una fotografia a colori in una in bianco e nero, aprire la fotografia e premere <guibutton>Desatura</guibutton>.</para>
- <figure>
- <title>Strumento desaturazione</title>
- <mediaobject>
- <imageobject>
- <imagedata fileref="figures/f-spot-desaturate.png"/>
- </imageobject>
- </mediaobject>
- </figure>
- </sect2>
-
- <sect2 id="edit-sepia">
- <title>Seppia</title>
-
- <para>Per rendere l'effetto delle vecchie fotografie con i toni seppia, aprire una fotografia e premere <guibutton>Seppia</guibutton>.</para>
- <figure>
- <title>Strumento desaturazione</title>
- <mediaobject>
- <imageobject>
- <imagedata fileref="figures/f-spot-sepia.png"/>
- </imageobject>
- </mediaobject>
- </figure>
- </sect2>
-
- <sect2 id="edit-remove-red-eye">
- <title>Rimuovere gli occhi rossi</title>
-
- <para>Per rimuovere l'effetto occhi rossi occorre selezionare la zona contenente gli occhi. È possibile ingrandire l'immagine per selezionare accuratamente gli occhi ed è anche possibile correggere entrambi gli occhi di una persona o più persone in un colpo solo. Se l'effetto non dovesse essere soddisfacente, o in presenza di parti rosse (ad esempio le labbra) sarà probabilmente necessario correggere un occhio alla volta.</para>
- <para>Per selezionare fare clic su un angolo del rettangolo che formerà la selezione e trascinare il mouse nell'angolo opposto lungo la diagonale e rilasciarlo. Si può ridimensionare la selezione trascinandone i bordi e si può muoverla facendo clic nel mezzo e trascinandola dove si desidera.</para>
- <para>Terminata la selezione dell'occhio, si può effettuare la rimozione dell'effetto occhi rossi premendo il pulsante posto sotto la fotografia stessa.</para>
- <figure>
- <title>Strumento rimozione occhi rossi</title>
- <mediaobject>
- <imageobject>
- <imagedata fileref="figures/f-spot-red-eye.png"/>
- </imageobject>
- </mediaobject>
- </figure>
- <tip>
- <para>È possibile modificare la soglia di rilevazione dell'effetto occhi rossi mediante la chiave gconf <filename class="directory">/apps/f-spot/edit/redeye_threshold</filename>.</para>
- </tip>
- </sect2>
-
- <sect2 id="edit-soft-focus">
- <title>Sfocatura</title>
-
- <para>In fotografia, evidenziare una porzione di una foto lasciando sfocato il resto è un modo per dare enfasi e richiamare l'attenzione. Ciò si ottiene mediante una lente di ingrandimento con la quale si mette a fuoco solo una porzione dell'immagine. L'effetto sfocatura è un modo per simulare l'uso della lente.</para>
- <figure>
- <title>Strumento sfocatura</title>
- <mediaobject>
- <imageobject>
- <imagedata fileref="figures/f-spot-soft-focus.png"/>
- </imageobject>
- </mediaobject>
- </figure>
- <para>Fare clic per selezionare il centro dell'area che si desidera porre a fuoco e selezionare la porzione di sfocatura, quindi premere <guibutton>OK</guibutton>.</para>
- </sect2>
-
- <sect2 id="edit-sharpen">
- <title>Nitidezza</title>
-
- <para>Le fotografie sfocate e molte immagini digitalizzate spesso richiedono una correzione della nitidezza. L'effetto Maschera di contrasto migliora la nitidezza degli orli degli elementi senza incrementare il rumore o introdurre difetti. Per rendere più nitida una foto selezionare <menuchoice><guimenu>Modifica</guimenu><guimenuitem>Nitidezza...</guimenuitem></menuchoice> e specificare i seguenti valori:</para>
-
- <itemizedlist>
- <listitem>
- <para><parameter class="option">Ammontare</parameter> — forza della nitidezza.</para>
- </listitem>
- <listitem>
- <para><parameter class="option">Raggio</parameter> — quantità di pixel su entrambi i lati dell'orlo che verranno interessati dall'affilatura. Immagini ad alta risoluzione richiederanno un raggio maggiore.</para>
- </listitem>
- <listitem>
- <para><parameter class="option">Soglia</parameter> — la minima differenza in valori di pixel che indentifica un orlo quando viene applicata l'affilatura. Serve per evitare l'introduzione di difetti sui volti, nel cielo o sulle superfici liquide.</para>
- </listitem>
- </itemizedlist>
- </sect2>
-
- <sect2 id="edit-describe">
- <title>Aggiungere un commento</title>
-
- <para>L'inserimento di una descrizione della fotografia avviene facendo clic con il mouse nella casella di testo posta immediatamente sotto la fotografia ed inserendo il testo desiderato.</para>
- <para>Una volta effettuata la selezione occorre fare clic con il mouse sul pulsante di ritaglio sotto la fotografia. Se si sta lavorando sulla fotografia originale, il ritaglio produrrà una nuova versione.</para>
- </sect2>
-
- <sect2 id="edit-adjust-time">
- <title>Regolazione ora</title>
-
- <para>In entrambe le modalità «Seleziona» o «Modifica» è possibile regolare l'ora di una o più foto (<menuchoice><guimenu>Modifica</guimenu><guimenuitem>Regolazione ora</guimenuitem></menuchoice>. La regolazione dell'ora permette di spostare tutto un rullino se, ad esempio, data e ora sulla fotocamera sono errate o se ci si è dimenticati di regolare l'ora legale/solare.</para>
- </sect2>
- </sect1>
-
- <sect1 id="tag">
- <title>Contrassegnare le fotografie</title>
- <para>F-Spot permette di organizzare le proprie fotografie associando ad ognuna di esse una o più etichette. F-Spot contiene alcune etichette predefinite che permettono una prima organizzazione; l'utente ha comunque la piena libertà di modificarle e di aggiungerne di nuove. Ad esempio, se si desidera aggiungere un'etichetta per un evento particolare, la si può creare sotto l'etichetta Eventi.</para>
- <para>Ci sono molti modi per associare le etichette alle fotografie:</para>
- <itemizedlist>
- <listitem>
- <para>trascinando le fotografie sull'etichetta</para>
- </listitem>
- <listitem>
- <para>trascinando l'etichetta sulle fotografie</para>
- </listitem>
- <listitem>
- <para>mediante il menù ottenuto premendo il tasto destro del mouse sulla fotografia</para>
- </listitem>
- <listitem>
- <para>mediante i menù Etichette e Modifica</para>
- </listitem>
- <listitem>
- <para>
- by typing them in. Press <keycap>t</keycap> to pop up the tag
- entry bar. Here you can enter the tags, separated by commas.
- </para>
- <para>
- You can also use auto-completion in this entry bar: After
- entering the beginning of a tag name, press
- <keycap>Tab</keycap> to see the first possible completion. You can
- cycle between other possible completions by pressing
- <keycap>Tab</keycap> again, and backwards with
- <keycombo action="simul"><keycap>Shift</keycap><keycap>Tab</keycap></keycombo>.
- To confirm the suggested completion and enter a new tag, press
- <keycap>,</keycap>. By pressing <keycap>Enter</keycap> you
- leave the tag entry bar, possibly confirming the current
- completion. To abort the auto completion, just keep on typing.
- </para>
- </listitem>
- </itemizedlist>
- <para>La prima fotografia associata all'etichetta verrà usata come icona per tutte le etichette di quel tipo. È possibile modificare il nome dell'etichetta, il suo genitore o l'icona selezionando <guilabel>Modifica etichetta</guilabel>.</para>
- <para>È possibile modificare il genitore di un'etichetta trascinandola nel punto desiderato con il mouse. È inoltre possibile modificarne il nome premendo <keycap>F2</keycap>. Infine, quando il focus è sulla visualizzazione ad albero delle etichette (ad esempio facendo clic su un'etichetta) si può cercare un'etichetta manualmente; digitando le prime lettere, infatti, verranno cercate tutte le corrispondenze nei nomi delle etichette presenti in tutti i rami visualizzati.</para>
-
- <para>È possibile modificare la dimensione delle icone delle etichette nella barra laterale o renderle invisibili selezionando l'opzione desiderata dal menù <menuchoice><guimenu>Visualizza</guimenu><guimenuitem>Icone etichette</guimenuitem></menuchoice>.</para>
-
- <tip>
- <para>F-Spot può scrivere etichette quali metadati nei file JPEG. Le etichette per file RAW, PNG, TIFF e altri vengono scritte nel Database F-Spot. Sarà necessario etichettare nuovamente questi file se verrà nuovamente importata la collezione.</para>
- </tip>
- </sect1>
- </chapter>
-
- <chapter id="enjoying">
- <title>Godersi le proprie fotografie</title>
- <sect1 id="enjoying-browse">
- <title>Sfogliare</title>
- <para>È possibile ordinare l'esplorazione delle fotografie per mese o per directory. Per far ciò utilizzare la selezione in <menuchoice><guimenu>Visualizza</guimenu><guimenuitem>Ordina per</guimenuitem></menuchoice>.</para>
- </sect1>
- <sect1 id="enjoying-search">
- <title>Ricerca</title>
-
- <para>
- F-Spot uses search filters to help you better define search criteria.
- </para>
-
- <sect2 id="enjoying-search-tags">
- <title>Contrassegnare le fotografie</title>
-
- <para>La ricerca inizia con un doppio clic o attivando un'etichetta dalla lista delle etichette. In alternativa è possibile attivare la barra di ricerca con <menuchoice><guimenu>Trova</guimenu><guimenuitem>Visualizza barra della ricerca</guimenuitem></menuchoice>. Con la barra di ricerca attiva si possono trascinare etichette dalla lista alla barra di ricerca.</para>
- <para>Per cercare una fotografia contrassegnata con due o più etichette occorre attivare la prima nella lista delle etichette o trascinandola nella barra di ricerca, quindi trascinare la seconda sopra alla prima. È anche possibile fare clic con il tasto destro sulla seconda etichetta nella lista delle etichette, oppure utilizzare il menù <guimenu>Trova</guimenu> selezionare <guimenuitem>Trova con...</guimenuitem> e scegliere la prima etichetta.</para>
- <para>È possibile trascinare un'etichetta sulla barra di ricerca per cambiare la modalità di ricerca da "cerca questa e un'altra etichetta" a "cerca questa o un'altra etichetta".</para>
- <para>È possibile cercare una fotografia che non disponga di una particolare etichetta tramite un doppio clic su un'etichetta nella barra di ricerca. In alternativa è possibile fare doppio clic nella barra delle etichette e selezionare <guimenuitem>Escludi</guimenuitem>.</para>
- <para>Per rimuovere un'etichetta dalla ricerca occorre trascinarla fuori dalla barra di ricerca oppure fare clic con il tasto destro del mouse e selezionare <guimenuitem>Rimuovi</guimenuitem>.</para>
- <para>Per impostazione predefinita, le foto etichettate <emphasis>Nascoste</emphasis> non verranno visualizzate. Per visualizzarle occorrerà inserire l'etichetta <emphasis>Nascoste</emphasis> nelle opzioni di ricerca.</para>
- </sect2>
-
- <sect2 id="enjoying-search-import-rolls">
- <title>Fotografie Importate</title>
- <para>F-Spot ricorda quali immagini sono state importate. Selezionare <menuchoice><guimenu>Trova</guimenu><guisubmenu>Importa rullino</guisubmenu><guimenuitem>Ultimo rullino importato</guimenuitem></menuchoice> per limitare la ricerca all'ultima importazione o usare <menuchoice><guimenu>Trova</guimenu><guisubmenu>Importa rullini</guisubmenu><guimenuitem>Seleziona importazione rullini...</guimenuitem></menuchoice> per una più fine selezione delle fotografie importate:</para>
- <itemizedlist>
- <listitem>
- <para><parameter class="option">A</parameter> — per selezionare foto da una particolare sessione importata</para>
- </listitem>
- <listitem>
- <para>
- <parameter class="option">After</parameter> — to select all photos imported begining with a particular importing session
- </para>
- </listitem>
- <listitem>
- <para><parameter class="option">Tra</parameter> — per selezionare tutte le foto importate tra due particolari sessioni</para>
- </listitem>
- </itemizedlist>
- <para>
- Every time you change settings of the filter, the amount of selected photos
- will appear in the bottom part of the dialog.
- </para>
- <para>Quando si applica il filtro di Importazione rullino, nella barra di ricerca si potrà osservare la dicitura <guilabel>Trova: Importa rullino</guilabel>. Si possono a questo punto aggiungere altri filtri per finalizzare la propria selezione.</para>
- <para>Se il filtro Importazione rullino non serve più, scegliere <guimenu>Trova</guimenu><guisubmenu>Importa rullini</guisubmenu><guimenuitem>Cancella filtri rullino</guimenuitem></para>
- <tip>
- <para>Il numero dei rullini visualizzati nella finestra di dialogo è definito dalla variabile gconf <filename class="directory">/apps/f-spot/import/gui_roll_history</filename>. Il suo valore predefinito è 10.</para>
- </tip>
- </sect2>
-
- <sect2 id="enjoying-search-type-to-find">
- <title>Casella di digitazione</title>
- <para>Esiste inoltre una ricerca tramite casella di digitazione. Premere <keycap>/</keycap> per aprirla. Questa non può essere usata quando sia attiva la barra di ricerca. È possibile inserire parametri di ricerca quali "EtichettaA e (EtichettaB oppure (EtichettaC e EtichettaD))". Ad ogni istante, se F-Spot riconosce un'interrogazione valida, aggiorna la ricerca. L'operatore <emphasis>not</emphasis> non è ancora supportato.</para>
-
- <para>Questa funzione ricercherà il testo anche nei commenti alle foto e nei nomi dei file.</para>
- </sect2>
- </sect1>
-
- <sect1 id="enjoying-fullscreen-mode-and-slideshows">
- <title>Modalità schermo intero e presentazione</title>
- <para>Per ridurre al minimo le distrazioni e ingrandire la visualizzazione è possibile vedere le fotografie in modalità a schermo intero. L'utente avrà sempre il controllo della visualizzazione della prossima foto o della precedente. La modalità a schermo intero si ottiene premendo <keycap>F11</keycap> in qualsiasi momento o premendo il pulsante apposito nella barra degli strumenti.</para>
- <figure>
- <title>Modalità a schermo intero</title>
- <mediaobject>
- <imageobject>
- <imagedata fileref="figures/f-spot-fullscreen.png"/>
- </imageobject>
- </mediaobject>
- </figure>
- <para>In modalità presentazione è possibile sedersi e vedere le proprie foto così come esse vengono presentate. Si può attivare il modo presentazione premendo il pulsante sulla barra degli strumenti.</para>
- <figure>
- <title>Presentazione</title>
- <mediaobject>
- <imageobject>
- <imagedata fileref="figures/f-spot-slideshow.png"/>
- </imageobject>
- </mediaobject>
- </figure>
- </sect1>
- </chapter>
-
- <chapter id="sharing">
- <title>Condividere le proprie fotografie</title>
-
- <abstract>
- <para>Ci sono molti modi per condividere le proprie fotografie usando F-Spot. Tutti i seguenti metodi permetteranno di condividere solamente le foto che sono state selezionate.</para>
- </abstract>
-
- <sect1 id="sharing-e-mail">
- <title>Inviare E-mail</title>
- <para>È possibile inviare le fotografie direttamente da F-Spot tramite il menù <menuchoice><guimenu>File</guimenu><guimenuitem>Invia email</guimenuitem></menuchoice>.</para>
- <note>
- <title>Nota 1</title>
- <para>Il gestore e-mail in uso è definito a livello GNOME. È possibile modificare il gestore predefinito mediante lo strumento <application>Applicazioni preferite</application> in <menuchoice><guimenu>Sistema</guimenu><guisubmenu>Preferenze</guisubmenu></menuchoice>.</para>
- </note>
- <note>
- <title>Nota 2</title>
- <para>Se qualche foto che si desidera inviare fosse in un formato non scrivibile da F-Spot (ad esempio in formato RAW) la finestra di dialogo della selezione dimensione diventerà insensibile e verrà inviato l'originale.</para>
- </note>
- <tip>
- <para>Quando si inviano immagini ridimensionate F-Spot tiene la versione modificata nella directory <filename class="directory">/tmp</filename> per 30 secondi. Questo tempo di attesa non provoca problemi con Evolution, il quale mantiene una sua copia locale per gli allegati, mentre potrebbe provocare qualche problema con Thunderbird. È possibile modificare il valore di tale tempo di attesa mediante la variabile gconf <filename class="directory">/apps/f-spot/export/email/delete_timeout_seconds</filename>.</para>
- </tip>
- </sect1>
-
- <sect1 id="sharing-print">
- <title>Stampare</title>
- <para>La stampa delle fotografie si ottiene mediante il menù <menuchoice><guimenu>File</guimenu><guimenuitem>Stampa</guimenuitem></menuchoice>.</para>
- </sect1>
-
- <sect1 id="sharing-burn-to-cd">
- <title>Scrivere un CD</title>
- <para>È possibile masterizzare le proprie fotografie direttamente su CD o DVD tramite il menù <menuchoice><guimenu>File</guimenu><guimenuitem>Esporta</guimenuitem><guimenuitem>Esporta su CD</guimenuitem></menuchoice>.</para>
- </sect1>
-
- <sect1 id="website-gallery-folder">
- <title>Generare una galleria su un sito web o in una cartella</title>
- <para>L'opzione <menuchoice><guimenu>File</guimenu><guimenuitem>Esporta</guimenuitem><guimenuitem>Esporta su cartella</guimenuitem></menuchoice> fornisce tre modi per esportare le proprie immagini.</para>
- <itemizedlist>
- <listitem>
- <para><guilabel>Crea galleria usando «Original»</guilabel> esporta le proprie fotografie pronte all'uso mediante il programma libero <ulink url="http://jimmac.musichall.cz/original.php"> Original Photo Gallery</ulink> di Jakub Steiner. Se non si è sicuri su questa opzione, probabilmente non è quella che fa al caso.</para>
- </listitem>
- <listitem>
- <para><guilabel>Usa file statico HTML</guilabel> esporta le proprie foto su un sito web interattivo, pronto per il caricamento.</para>
- </listitem>
- <listitem>
- <para><guilabel>File statico</guilabel> esporta le proprie immagini come file all'interno delle directory senza inserirle in una galleria.</para>
- </listitem>
- </itemizedlist>
- </sect1>
-
- <sect1 id="sharing-flickr-or-php-gallery">
- <title>Inviare al proprio gestore di gallerie fotografiche</title>
- <para>
- If you use Flickr, SmugMug, 23hq, Tabblo, Facebook, Zooomr or Picasa Web Album, you can post your files
- directly from F-Spot with the <menuchoice><guimenu>File</guimenu>
- <guisubmenu>Export</guisubmenu></menuchoice> menu, choosing corresponding submenu item.
- </para>
- <para>Se si usa un software PHP conosciuto come <ulink url="http://gallery.sourceforge.net/"> Gallery</ulink> è possibile inviare le foto al proprio album esistente tramite il menù <menuchoice><guimenu>File</guimenu><guimenuitem>Esporta</guimenuitem><guimenuitem>Esporta su galleria web</guimenuitem></menuchoice>. Occorre prima abilitare il modulo Remoto all'interno della propria installazione di Gallery.</para>
- <note>
- <title>Note per gli utenti di Gallery 2.2</title>
- <para>Il plugin Remote per Gallery deve essere alla versione 1.0.8 o più recente.</para>
- </note>
- <para><ulink url="http://pennave.sourceforge.net">PennAve</ulink> è un'applicazione web scritta in Python che usa direttamente il database di F-Spot per presentare una galleria dinamica delle proprie foto ed etichette.</para>
- <para><ulink url="http://www.conduit-project.org">Conduit</ulink> è un'applicazione che permette la sincronizzazione di fotografie con un'etichetta particolare con il proprio archivio Flickr o Picasa Web Album.</para>
- </sect1>
- </chapter>
-
- <chapter id="cms">
- <title>Gestione dei colori</title>
-
- <sect1 id="cms-what-is-cms">
- <title>Che cos'è la gestione dei colori</title>
-
- <para>Quando si osserva una foto sul monitor questa appare differente da quella osservata nella previsualizzazione della fotocamera o su un altro monitor. Risulta essere anche diversa quando la si stampa. Questo perché ogni dispositivo ha una sua propria capacità di riprodurre i colori.</para>
-
- <para>Il Sistema di gestione dei colori (Color management system, CMS) è uno strumento per ottenere una fedele riproduzione dei colori tanto sul video quanto sui dispositivi di uscita (ad. es.: la stampante). Questo sistema si basa su profili colore per trasformare ogni colore nel corrispondente colore riproducibile dal dispositivo; in questo modo i colori appariranno gli stessi ovunque, su un monitor LCD oppure sulla stampa del laboratorio fotografico etc.</para>
- </sect1>
-
- <sect1 id="cms-what-is-icc-profile">
- <title>Che cos'è un profilo colore</title>
-
- <para>Un profilo colore è un file con estensione .icc (da cui il nome «profilo ICC») o .icm che contiene la corrispondenza tra i colori riprodotti da un dispositivo e la loro descrizione standard.</para>
-
- <para>Ci sono molti tipi di profili:</para>
-
- <itemizedlist>
- <listitem>
- <para>Profilo per dispositivo di input. È un profilo per fotocamera o per un'applicazione come XSane relativa ad un'immagine scandita.</para>
- </listitem>
- <listitem>
- <para>Profilo per area di lavoro. È un profilo descrivente lo spazio colore sul quale operano le applicazioni. Solitamente i profili più usati sono «AdobeRGB1998» oppure «ProPhotoRGB».</para>
- </listitem>
- <listitem>
- <para>Profilo display. È un profilo per monitor.</para>
- </listitem>
- <listitem>
- <para>Profilo di output. Generalmente usato per la stampante.</para>
- </listitem>
- </itemizedlist>
-
- <para>Attualmente F-Spot gestisce solamente i profili «output» e «display». La gestione dei colori viene effettuata nello spazio colore sRGB.</para>
- </sect1>
-
- <sect1 id="cms-how-to-get-icc-profile">
- <title>Come prelevare i profili per il monitor e la stampante</title>
-
- <para>Ci sono molti modi per prelevare un profilo colore.</para>
-
- <sect2 id="cms-icc-from-cd-or-internet">
- <title>Da un CD o da Internet</title>
-
- <para>Molti produttori hardware inseriscono il profilo colore all'interno del CD o lo inseriscono nella confezione. Se si dispone di uno di questi (per monitor o stampante) lo si può usare direttamente. Tali profili sono anche scaricabili via Internet dalla sezione «Supporto» del sito web del produttore. Anche alcuni produttori di fotocamere (Nikon, Canon) forniscono i profili ICC.</para>
- </sect2>
-
- <sect2 id="cms-icc-from-calibrating-and-profiling">
- <title>Calibrazione ed impostazione profilo</title>
-
- <para>I migliori risultati si ottengono calibrando ed impostando i profili mediante uno strumento di misura. Non è difficile, ma occorre avere a disposizione uno spettrofotometro per effettuare le misurazioni e creare un profilo ICC.</para>
-
- <para>Utilizzando Windows o Mac OS X è possibile usare il software del produttore, generato da uno spettrofotometro. Con Linux è possibile usare sia <ulink url="http://www.argyllcms.com">Argyll</ulink>, un insieme versatile di strumenti a riga di comando, oppure <ulink url="http://lprof.sourceforge.net/">LProf</ulink>, dotato di interfaccia grafica.</para>
- <para>Fare riferimento alla documentazione dei fornitori di hardware o software di terze parti per ulteriori dettagli.</para>
- </sect2>
-
- <sect2 id="cms-icc-from-embedding">
- <title>Incapsulamento</title>
-
- <para>Alcuni formati immagine (quali TIFF, JPG, PNG, etc.) possono contenere al loro interno profili colore. Se la gestione del colore è abilitata, F-Spot cercherà i profili colore e li utilizzerà.</para>
- </sect2>
- </sect1>
-
- <sect1 id="cms-how-to-use">
- <title>Come usare la gestione colore in F-Spot</title>
-
- <para>Attualmente F-Spot può gestire solamente i profili RGB (nessun altro profilo è visualizzabile).</para>
-
- <itemizedlist>
- <listitem>
- <para>
- Copy your color profiles into the
- <filename class="directory">/usr/share/color/icc</filename> or
- <filename class="directory">/usr/local/share/color/icc</filename>
- directory.
- </para>
- </listitem>
- <listitem>
- <para>La stampa delle fotografie si ottiene mediante il menù <menuchoice><guimenu>File</guimenu><guimenuitem>Stampa</guimenuitem></menuchoice>.</para>
- </listitem>
- <listitem>
- <para>Selezionare i profili <guilabel>Display</guilabel> e <guilabel>Output</guilabel>.</para>
- </listitem>
- </itemizedlist>
-
- <tip>
- <para>Sul sito <ulink url="http://burtonini.com/blog/computers/xicc">xicc"ulink> Prova a usare il profilo di sistema.</ulink></para>
- </tip>
- </sect1>
- </chapter>
-
- <chapter id="extend">
- <title>Funzionalità estese</title>
-
- <sect1 id="extend-what-extensions-are">
- <title>Cosa sono le estensioni</title>
-
- <para>Le estensioni di F-Spot sono metodi per aggiungere nuove funzionalità all'applicazione. F-Spot supporta due tipi di estensioni: esportazione (che permette l'esportazione di foto a nuovi archivi o servizi web) e strumenti (che consentono nuove correzioni di colore, ricerca di foto duplicate ecc.). Le estensioni vengono distribuite in forma di pacchetti di estensione.</para>
- <para>Nella miglior tradizione di non reinventare la ruota, le estensioni possono usare altre estensioni, il che significa che un'estensione non può lavorare se un'altra non è installata. Questo concetto di dipendenza attualmente significa che</para>
- <itemizedlist>
- <listitem>
- <para>non è possibile installare un'estensione se l'estensione da cui essa dipende non è presente nel sistema</para>
- </listitem>
- <listitem>
- <para>non è possibile rimuovere un'estensione dalla quale ne dipendano altre.</para>
- </listitem>
- </itemizedlist>
- </sect1>
-
- <sect1 id="extend-managing-extensions">
- <title>Gestione estensioni</title>
-
- <para>Per la gestione delle estensioni selezionare la voce di menù <menuchoice><guimenu>Modifica"guimenu>Gestione Estensioni.</guimenu></menuchoice></para>
-
- <sect2 id="extend-managing-extensions-managing-extension-repositories">
- <title>Gestione dei depositi delle estensioni</title>
-
- <para>In parole povere i repository sono depositi di estensioni, che possono essere locali o remoti. Per aggiungere un nuovo repository fare clic sul pulsante Repository, selezionare il tipo di repository che si desidera aggiungere, indicando il percorso o l'URL; se questi non dovessero contenere un file di descrizione (indice) per l'estensione, apparirà un messaggio di avviso.</para>
- <para>Per rimuovere un repository fare nuovamente clic sul pulsante <guibutton>Repository</guibutton>, selezionare il repository che si intende eliminare e premere il pulsante <guibutton>Elimina</guibutton>.</para>
- </sect2>
-
- <sect2 id="extend-managing-extensions-installing-and-updating-extensions">
- <title>Installazione ed aggiornamento delle estensioni</title>
-
- <para>Per installare un'estensione fare clic sul pulsante <guibutton>Installa estensioni...</guibutton>. Nella finestra di dialogo</para>
- <orderedlist>
- <listitem>
- <para>Selezionare il repository dalla lista dei repository conosciuti e disponibili.</para>
- </listitem>
- <listitem>
- <para>Selezionare il tipo di pacchetto di estensione desiderato: Tutti, Solo nuovi, Solo aggiornamento.</para>
- </listitem>
- <listitem>
- <para>Fare clic sul pulsante <guibutton>Aggiorna</guibutton> per aggiornare la lista dei pacchetti di estensione che soddisfano il criterio desiderato.</para>
- </listitem>
- <listitem>
- <para>Selezionare le estensioni che si intende installare/aggiornare, fare clic sul pulsante <guibutton>Informazioni</guibutton> per ottenere il sommario dei pacchetti selezionati, se lo si desidera.</para>
- </listitem>
- <listitem>
- <para>Fare clic su <guibutton>Avanti</guibutton> per procedere con l'installazione.</para>
- </listitem>
- </orderedlist>
- </sect2>
-
- <sect2 id="extend-managing-extensions-enabling-and-disabling-extensions">
- <title>Abilitare e disabilitare le estensioni</title>
-
- <para>È possibile abilitare o disabilitare temporaneamente un pacchetto di estensione, ad esempio se non è abbastanza stabile per gestire un gran numero di fotografie oppure se i menù risultano affollati di estensioni.</para>
- <para>
- In the <guilabel>Manage Extensions</guilabel> dialog select the extension
- package and click <guibutton>Enable</guibutton> or <guibutton>Disable</guibutton>.
- </para>
- </sect2>
-
- <sect2 id="extend-managing-extensions-removing-extensions">
- <title>Rimuovere le estensioni</title>
-
- <para>È possibile rimuovere completamente un'estensione divenuta superflua. Per far questo occorre selezionare l'estensione desiderata nella finestra <guilabel>Gestione Estensioni</guilabel> e fare clic su <guibutton>Elimina</guibutton>.</para>
- </sect2>
-
- <sect2 id="extend-managing-extensions-reading-summary-of-extensions">
- <title>Leggere le informazioni sull'estensione</title>
-
- <para>Ogni pacchetto di estensione contiene alcuni metadati che forniscono le seguenti informazioni:</para>
-
- <orderedlist>
- <listitem>
- <para>Descrizione, che riassume le finalità dell'estensione</para>
- </listitem>
- <listitem>
- <para>Versione</para>
- </listitem>
- <listitem>
- <para>Autore</para>
- </listitem>
- <listitem>
- <para>Dipendenze</para>
- </listitem>
- </orderedlist>
-
- <para>Selezionare il pacchetto di estensione di cui si desidera leggere le informazioni nella finestra di dialogo <guilabel>Gestione Estensioni</guilabel> e fare clic su <guibutton>Informazioni.</guibutton></para>
- </sect2>
- </sect1>
-
- <sect1 id="extend-developing-extensions">
- <title>Sviluppare estensioni</title>
-
- <para>È possibile trovare informazioni su come sviluppare estensioni per F-Spot al seguente collegamento: <ulink url="http://f-spot.org/Extend_F-Spot">Extend F-Spot</ulink>.</para>
- </sect1>
- </chapter>
-
- <chapter id="shortcuts">
- <title>Scorciatoie</title>
-
- <sect1 id="Global-Shortcuts">
- <title>Scorciatoie globali</title>
- <informaltable frame="all">
- <tgroup cols="2">
- <thead>
- <row>
- <entry>Tasto</entry>
- <entry>Azione</entry>
- </row>
- </thead>
- <tbody>
- <row>
- <entry>
- <keycap>[</keycap>
- </entry>
- <entry>Ruota le foto selezionate a sinistra</entry>
- </row>
- <row>
- <entry>
- <keycap>]</keycap>
- </entry>
- <entry>Ruota le foto selezionate a destra</entry>
- </row>
- <row>
- <entry>
- <keycap>Canc</keycap>
- </entry>
- <entry>Rimuove dal catalogo di F-Spot le foto selezionate</entry>
- </row>
- <row>
- <entry>
- <keycombo><keycap>Maiusc</keycap><keycap>Canc</keycap></keycombo>
- </entry>
- <entry>
- Delete selected photos permanently from the drive. If possible, they will moved to trash.
- </entry>
- </row>
-
- <row>
- <entry>
- <keycap>t</keycap>
- </entry>
- <entry>Visualizza o modifica le etichette per le foto selezionate</entry>
- </row>
- <row>
- <entry>
- <keycap>F11</keycap>
- </entry>
- <entry>Visualizzazione a schermo intero</entry>
- </row>
- <row>
- <entry>
- <keycombo><keycap>Ctrl</keycap><keycap>I</keycap></keycombo>
- </entry>
- <entry>Visualizza le informazioni relative alla foto</entry>
- </row>
- <row>
- <entry>
- <keycombo><keycap>Ctrl</keycap><keycap>Uguale</keycap></keycombo>
- </entry>
- <entry>Aumenta l'ingrandimento</entry>
- </row>
- <row>
- <entry>
- <keycombo><keycap>Ctrl</keycap><keycap>Meno</keycap></keycombo>
- </entry>
- <entry>Diminuisce l'ingrandimento</entry>
- </row>
- <row>
- <entry>
- <keycombo><keycap>Ctrl</keycap><keycap>N</keycap></keycombo>
- </entry>
- <entry>Importa fotografie</entry>
- </row>
- <row>
- <entry>
- <keycombo><keycap>Alt</keycap><keycap>0-5</keycap></keycombo>
- </entry>
- <entry>«Alt» più un numero da 0 a 5 assegna il voto alle fotografie selezionate</entry>
- </row>
- </tbody>
- </tgroup>
- </informaltable>
- </sect1>
-
- <sect1 id="shortcuts-browse-mode">
- <title>Scorciatoie di esplorazione</title>
- <informaltable frame="all">
- <tgroup cols="2">
- <thead>
- <row>
- <entry>Tasto</entry>
- <entry>Azione</entry>
- </row>
- </thead>
- <tbody>
- <row>
- <entry>
- <keycombo><keycap>Ctrl</keycap><keycap>A</keycap></keycombo>
- </entry>
- <entry>Seleziona tutto</entry>
- </row>
- <row>
- <entry>
- <keycombo><keycap>Ctrl</keycap><keycap>Maiusc</keycap>
- <keycap>A</keycap></keycombo>
- </entry>
- <entry>Deseleziona tutto</entry>
- </row>
- <row>
- <entry>Tasti freccia (su, giù, sinistra, destra) o tasti <keycap>H</keycap>, <keycap>J</keycap>, <keycap>K</keycap>, <keycap>L</keycap></entry>
- <entry>Sposta il focus</entry>
- </row>
- <row>
- <entry><keycap>Ctrl</keycap>-Tasto freccia</entry>
- <entry>Sposta il focus senza cambiare la selezione</entry>
- </row>
- <row>
- <entry>
- <keycap>Barra spaziatrice</keycap>
- </entry>
- <entry>Seleziona o deseleziona la foto su cui si trova il focus</entry>
- </row>
- <row>
- <entry>
- <keycombo><keycap>Maiusc</keycap>
- <keycap>Tasto freccia</keycap></keycombo>
- </entry>
- <entry>Cambia la selezione della foto</entry>
- </row>
- <row>
- <entry>
- <keycombo><keycap>Ctrl</keycap><keycap>Maiusc</keycap>
- <keycap>Freccia sinistra o freccia destra</keycap></keycombo>
- </entry>
- <entry>Aggiunge o rimuove alla selezione tutte le foto della riga, nella direzione premuta</entry>
- </row>
- <row>
- <entry>
- <keycap>V</keycap>
- </entry>
- <entry>Visualizza una vista ingrandita dell'immagine puntata dal mouse</entry>
- </row>
- <row>
- <entry>
- <keycombo><keycap>Maiusc</keycap><keycap>V</keycap></keycombo>
- </entry>
- <entry>Visualizza mediante pop-up una vista ingrandita e l'istogramma del colori dell'immagine puntata dal mouse</entry>
- </row>
- </tbody>
- </tgroup>
- </informaltable>
- </sect1>
-
- <sect1 id="shortcuts-tag">
- <title>Scorciatoie per le etichette</title>
- <informaltable frame="all">
- <tgroup cols="2">
- <thead>
- <row>
- <entry>Tasto</entry>
- <entry>Azione</entry>
- </row>
- </thead>
- <tbody>
- <row>
- <entry>
- <keycap>F2</keycap>
- </entry>
- <entry>Rinomina l'etichetta selezionata</entry>
- </row>
- <row>
- <entry>
- <keycombo><keycap>Ctrl</keycap><keycap>T</keycap></keycombo>
- </entry>
- <entry>Aggiunge etichette alle foto selezionate</entry>
- </row>
- <row>
- <entry>non disponibile</entry>
- <entry>Trascina le etichette per spostarle</entry>
- </row>
- <row>
- <entry>non disponibile</entry>
- <entry>Digita un nome di etichetta per raggiungerla (funziona solo se l'etichetta è visibile/espansa)</entry>
- </row>
- </tbody>
- </tgroup>
- </informaltable>
- </sect1>
-
- <sect1 id="shortcuts-edit-mode">
- <title>Scorciatoie in modalità Modifica</title>
- <informaltable frame="all">
- <tgroup cols="2">
- <thead>
- <row>
- <entry>Tasto</entry>
- <entry>Azione</entry>
- </row>
- </thead>
- <tbody>
- <row>
- <entry><keycap>Pagina su</keycap>, <keycap>Backspace</keycap>, <keycap>B</keycap></entry>
- <entry>Va alla foto precedente</entry>
- </row>
- <row>
- <entry><keycap>Pagina giù</keycap>, <keycap>Barra spaziatrice</keycap>, <keycap>N</keycap></entry>
- <entry>Va alla foto successiva</entry>
- </row>
- <row>
- <entry>Tasti freccia (su, giù, sinistra, destra) o tasti <keycap>H</keycap>, <keycap>J</keycap>, <keycap>K</keycap>, <keycap>L</keycap></entry>
- <entry>Va alla foto precedente o successiva oppure si muove su una foto ingrandita</entry>
- </row>
- <row>
- <entry>
- <keycap>R</keycap>
- </entry>
- <entry>
- Go to a random photo
- </entry>
- </row>
- <row>
- <entry>
- <keycap>f</keycap>
- </entry>
- <entry>Visualizzazione a schermo intero</entry>
- </row>
- <row>
- <entry>
- <keycap>0</keycap>
- </entry>
- <entry>Adatta l'immagine allo schermo</entry>
- </row>
- <row>
- <entry>
- <keycap>1</keycap>
- </entry>
- <entry>Fattore di zoom a 1.0 (1 pixel dello schermo per ogni pixel dell'immagine)</entry>
- </row>
- <row>
- <entry>
- <keycap>2</keycap>
- </entry>
- <entry>Fattore di zoom a 2.0 (4 pixel dello schermo per ogni pixel dell'immagine)</entry>
- </row>
- <row>
- <entry>
- <keycap>Esc</keycap>
- </entry>
- <entry>Ritorna al modo esplorazione</entry>
- </row>
- <row>
- <entry>
- <keycap>V</keycap>
- </entry>
- <entry>Esamina le foto con la lente di ingrandimento (Loupe). Fare doppio clic sulla lente di ingrandimento o digitare <keycap>v</keycap> nuovamente per chiudere.</entry>
- </row>
- <row>
- <entry><keycap>Maiusc</keycap>-Rotellina del mouse</entry>
- <entry>Scorrimento veloce del rullino</entry>
- </row>
- <row>
- <entry>
- <keycap>i</keycap>
- </entry>
- <entry>Commuta la visibilità dell'infobox (solo in modalità a schermo intero)</entry>
- </row>
- </tbody>
- </tgroup>
- </informaltable>
- </sect1>
- </chapter>
-
-</book>
diff --git a/docs/it/it.po b/docs/it/it.po
deleted file mode 100644
index 3f0a26f..0000000
--- a/docs/it/it.po
+++ /dev/null
@@ -1,2002 +0,0 @@
-msgid ""
-msgstr ""
-"Project-Id-Version: F-Spot 0.2\n"
-"POT-Creation-Date: 2009-04-09 20:19+0000\n"
-"PO-Revision-Date: 2009-04-12 07:20+0200\n"
-"Last-Translator: Lorenzo Travaglio <ltrav02 at yahoo.it>\n"
-"Language-Team: Italian <tp at lists.linux.it>\n"
-"MIME-Version: 1.0\n"
-"Content-Type: text/plain; charset=UTF-8\n"
-"Content-Transfer-Encoding: 8bit\n"
-
-#. When image changes, this message will be marked fuzzy or untranslated for you.
-#. It doesn't matter what you translate it to: it's not used at all.
-#: C/f-spot.xml:163(None)
-msgid ""
-"@@image: 'figures/f-spot-crop.png'; md5=63e18c96702aea4701024837a13ae2d9"
-msgstr "fatto"
-
-#. When image changes, this message will be marked fuzzy or untranslated for you.
-#. It doesn't matter what you translate it to: it's not used at all.
-#: C/f-spot.xml:187(None)
-msgid ""
-"@@image: 'figures/f-spot-straighten.png'; "
-"md5=ceeff0cac633d06599fa5760cc4bc568"
-msgstr "fatto"
-
-#. When image changes, this message will be marked fuzzy or untranslated for you.
-#. It doesn't matter what you translate it to: it's not used at all.
-#: C/f-spot.xml:206(None)
-msgid ""
-"@@image: 'figures/f-spot-adjust-colors.png'; "
-"md5=6a5d9eaaaaf238ccbf70552bc073898c"
-msgstr "fatto"
-
-#. When image changes, this message will be marked fuzzy or untranslated for you.
-#. It doesn't matter what you translate it to: it's not used at all.
-#: C/f-spot.xml:224(None)
-msgid ""
-"@@image: 'figures/f-spot-autocolor.png'; md5=240c4a86c95c9507755fe790bef0e24a"
-msgstr "fatto"
-
-#. When image changes, this message will be marked fuzzy or untranslated for you.
-#. It doesn't matter what you translate it to: it's not used at all.
-#: C/f-spot.xml:241(None)
-msgid ""
-"@@image: 'figures/f-spot-desaturate.png'; "
-"md5=fa54dfd08171658d720be71b6d367139"
-msgstr "fatto"
-
-#. When image changes, this message will be marked fuzzy or untranslated for you.
-#. It doesn't matter what you translate it to: it's not used at all.
-#: C/f-spot.xml:258(None)
-msgid ""
-"@@image: 'figures/f-spot-sepia.png'; md5=154d6e34903664dbd776f2bef405ce91"
-msgstr "fatto"
-
-#. When image changes, this message will be marked fuzzy or untranslated for you.
-#. It doesn't matter what you translate it to: it's not used at all.
-#: C/f-spot.xml:289(None)
-msgid ""
-"@@image: 'figures/f-spot-red-eye.png'; md5=743d0a2ccc9b2fa8fa314855c225cd31"
-msgstr "fatto"
-
-#. When image changes, this message will be marked fuzzy or untranslated for you.
-#. It doesn't matter what you translate it to: it's not used at all.
-#: C/f-spot.xml:316(None)
-msgid ""
-"@@image: 'figures/f-spot-soft-focus.png'; "
-"md5=14d1437ce49c83f3ebbcf70b7047ffbe"
-msgstr "fatto"
-
-#. When image changes, this message will be marked fuzzy or untranslated for you.
-#. It doesn't matter what you translate it to: it's not used at all.
-#: C/f-spot.xml:596(None)
-msgid ""
-"@@image: 'figures/f-spot-fullscreen.png'; "
-"md5=86040e20ebf1015f6489a56e9589f063"
-msgstr "fatto"
-
-#. When image changes, this message will be marked fuzzy or untranslated for you.
-#. It doesn't matter what you translate it to: it's not used at all.
-#: C/f-spot.xml:609(None)
-msgid ""
-"@@image: 'figures/f-spot-slideshow.png'; md5=84a69bc3bb7a1b8d04c967d3a66e6f23"
-msgstr "fatto"
-
-#: C/f-spot.xml:5(title)
-msgid "The F-Spot Manual"
-msgstr "Manuale di F-Spot"
-
-#: C/f-spot.xml:7(para) C/f-spot.xml:9(subtitle)
-msgid "This is the user manual for F-Spot, a GNOME personal photo manager."
-msgstr ""
-"Questo è il manuale utente di F-Spot, un gestore di fotografie per GNOME."
-
-#: C/f-spot.xml:11(year)
-msgid "2007-2008"
-msgstr "2007-2008"
-
-#: C/f-spot.xml:12(holder)
-msgid "Aaron Bockover, Gabriel Burt, Miguel de Icaza, Bengt Thuree"
-msgstr "Aaron Bockover, Gabriel Burt, Miguel de Icaza, Bengt Thuree"
-
-#: C/f-spot.xml:15(publishername)
-msgid "GNOME Documentation Project"
-msgstr "Progetto documentazione di GNOME"
-
-#: C/f-spot.xml:19(firstname)
-msgid "Miguel"
-msgstr "Miguel"
-
-#: C/f-spot.xml:20(surname)
-msgid "de Icaza"
-msgstr "de Icaza"
-
-#: C/f-spot.xml:23(firstname)
-msgid "Aaron"
-msgstr "Aaron"
-
-#: C/f-spot.xml:24(surname)
-msgid "Bockover"
-msgstr "Bockover"
-
-#: C/f-spot.xml:27(firstname)
-msgid "Bengt"
-msgstr "Bengt"
-
-#: C/f-spot.xml:28(surname)
-msgid "Thuree"
-msgstr "Thuree"
-
-#: C/f-spot.xml:31(firstname)
-msgid "Gabriel"
-msgstr "Gabriel"
-
-#: C/f-spot.xml:32(surname)
-msgid "Burt"
-msgstr "Burt"
-
-#: C/f-spot.xml:35(firstname)
-msgid "Alexandre"
-msgstr "Alexandre"
-
-#: C/f-spot.xml:36(surname)
-msgid "Prokoudine"
-msgstr "Prokoudine"
-
-#: C/f-spot.xml:39(firstname)
-msgid "Stephane"
-msgstr "Stephane"
-
-#: C/f-spot.xml:40(surname)
-msgid "Delcroix"
-msgstr "Delcroix"
-
-#: C/f-spot.xml:46(revnumber)
-msgid "0.5"
-msgstr "0.5"
-
-#: C/f-spot.xml:47(date)
-msgid "2008-09-25"
-msgstr "25/09/2008"
-
-#: C/f-spot.xml:50(revnumber)
-msgid "0.4"
-msgstr "0.4"
-
-#: C/f-spot.xml:51(date)
-msgid "2008-09-12"
-msgstr "12/09/2008"
-
-#: C/f-spot.xml:54(revnumber)
-msgid "0.3"
-msgstr "0.3"
-
-#: C/f-spot.xml:55(date)
-msgid "2007-07-26"
-msgstr "26/07/2007"
-
-#: C/f-spot.xml:61(title)
-msgid "Organizing your photos"
-msgstr "Catalogare le proprie fotografie"
-
-#: C/f-spot.xml:64(title)
-msgid "Import"
-msgstr "Importare fotografie"
-
-#: C/f-spot.xml:66(para)
-msgid ""
-"You can import photos from your hard drive or your camera. When you import "
-"your photos into F-Spot from your camera, it will always make a copy of "
-"them, leaving you free to clear your camera's memory. By default, F-Spot "
-"will make a copy of photos imported from your hard drive. Uncheck the "
-"<guilabel>Copy</guilabel> option on the import dialog or hold <keycap>Shift</"
-"keycap> when dragging photos into F-Spot if you do not wish to copy them "
-"from your hard drive."
-msgstr ""
-"È possibile importare fotografie dal proprio disco fisso o dalla propria "
-"fotocamera. Quando vengono importate dalla fotocamera, ne viene sempre "
-"creata una copia, lasciando all'utente la libertà di cancellare la memoria "
-"della fotocamera. In modo predefinito viene creata una copia delle "
-"fotografie importate dal disco fisso. Se non si desidera copiarle, "
-"deselezionare l'opzione <guilabel>Copia i file nella cartella delle foto</"
-"guilabel> nel dialogo di importazione oppure tenere premuto il tasto "
-"<keycap>Maiusc</keycap> durante il trascinamento delle immagini in F-Spot."
-
-#: C/f-spot.xml:76(para)
-msgid ""
-"By default, F-Spot copies your photos to the <filename class=\"directory\">~/"
-"Photos</filename> folder. You can change the folder F-Spot uses in "
-"<guilabel>Preferences</guilabel> dialog (<menuchoice><guimenu>Edit</"
-"guimenu><guimenuitem>Preferences</guimenuitem></menuchoice>). You can also "
-"disable physical copying of images to that directory and make F-Spot only "
-"reference to existing files. For that you need to disable checkbox "
-"<guilabel>Copy files to the Photos folder</guilabel>."
-msgstr ""
-"In modo predefinito F-Spot copia le fotografie nella directory <filename "
-"class=directory>~/Photos</filename>. È tuttavia possibile indicare una "
-"diversa directory mediante il menù <guilabel>Preferenze</guilabel> "
-"(<menuchoice><guimenu>Modifica</guimenu><guimenuitem>Preferenze</"
-"guimenuitem></menuchoice>). È parimenti possibile disabilitare la copia "
-"fisica in una directory ed utilizzare solo un riferimento ai file esistenti. "
-"Ciò si ottiene deselezionando la casella <guilabel>Copia i file nella "
-"cartella delle foto</guilabel>."
-
-#: C/f-spot.xml:85(para)
-msgid ""
-"If there is a tiny chance that some of your photos are already imported from "
-"the chosen source, you can use <guilabel>Detect duplicates</guilabel> "
-"option. In this case F-Spot will try to find out if exactly this image is "
-"already present in the database and thus new copy of it should not be "
-"imported."
-msgstr ""
-"Per verificare se una o più immagini siano già state importate dalla "
-"posizione selezionata è possibile selezionare l'opzione <guilabel>Rileva "
-"duplicati</guilabel>. F-Spot cercherà di rilevare se una copia esatta "
-"dell'immagine sia già presente e in caso affermativo non effettuerà "
-"l'importazione."
-
-#: C/f-spot.xml:92(para)
-msgid ""
-"If all the photos you are importing at one time are from a particular event, "
-"or have some other characteristic in common, you can create a tag for them "
-"so you can later find them with ease. To do this, follow the instructions "
-"from <xref linkend=\"tag\"/> to create a new tag, then when you are "
-"importing them, check the button for <guilabel>Attach Tag</guilabel> and "
-"choose the tag you created."
-msgstr ""
-"Nel caso in cui si stiano importando fotografie relative ad un particolare "
-"evento o che abbiano qualche altra caratteristica in comune, è possibile "
-"creare un'etichetta che le contraddistingua per poterle facilmente ritrovare "
-"in seguito. Per fare questo occorre seguire le istruzioni della sezione "
-"<xref linkend=\"tag\"/>. Durante l'importazione sarà necessario fare clic su "
-"<guilabel>Applica etichetta</guilabel> e scegliere l'etichetta creata in "
-"precedenza."
-
-#: C/f-spot.xml:102(para)
-msgid ""
-"F-Spot uses a database stored at <filename>~/.gnome2/f-spot/photos.db</"
-"filename>. Note, to access it, use the sqlite3 command. You can also "
-"manually specify path to a database by running F-Spot with <option>-b</"
-"option> option."
-msgstr ""
-"F-Spot usa un database contenuto in <filename>~/.gnome2/f-spot/photos.db</"
-"filename>. Per l'accesso vengono usati i comandi di sqlite3. È possibile "
-"indicare un diverso percorso per un database lanciando F-Spot con l'opzione "
-"<option>-b</option>."
-
-#: C/f-spot.xml:110(para)
-msgid ""
-"After an import, F-Spot will display the pictures of the latest import roll "
-"only. Read <xref linkend=\"enjoying-search\"/> to learn how to deal with "
-"import rolls."
-msgstr ""
-"Dopo un'importazione F-Spot visualizzerà solamente le fotografie dell'ultimo "
-"rullino importato. Consultare <xref linkend=\"enjoying-search\"/> per "
-"ulteriori informazioni sull'importazione dei rullini."
-
-#: C/f-spot.xml:115(para)
-msgid ""
-"You can also import directly from Mozilla <ulink url=\"http://www.mozilla."
-"com/en-US/firefox/\">Firefox</ulink> and <ulink url=\"http://www.mozilla.com/"
-"en-US/thunderbird/\">Thunderbird</ulink> using <ulink url=\"https://addons."
-"mozilla.org/en-US/firefox/addon/7091\">Firefox</ulink> and <ulink url="
-"\"https://addons.mozilla.org/en-US/thunderbird/addon/7011\">Thunderbird</"
-"ulink> F-Spot importer extensions written by <ulink url=\"http://"
-"personalpages.tds.net/~cdovel/\">Pizzach</ulink>."
-msgstr ""
-"È anche possibile importare direttamente da Mozilla <ulink url=\"http://www."
-"mozilla.com/en-US/firefox/\">Firefox</ulink> e <ulink url=\"http://www."
-"mozilla.com/en-US/thunderbird/\">Thunderbird</ulink> mediante <ulink url="
-"\"https://addons.mozilla.org/en-US/firefox/addon/7091\">Firefox</ulink> e "
-"<ulink url=\"https://addons.mozilla.org/en-US/thunderbird/addon/7011"
-"\">Thunderbird</ulink> le estensioni di Firefox e Thunderbird per "
-"l'importazione in F-Spot scritte da <ulink url=\"http://personalpages.tds."
-"net/~cdovel/\">Pizzach</ulink>."
-
-#: C/f-spot.xml:127(title)
-msgid "Edit"
-msgstr "Modificare una fotografia"
-
-#: C/f-spot.xml:129(para)
-msgid ""
-"If you double click or press enter on an image, you enter Edit mode, where "
-"you can remove red-eye, crop, and adjust brightness and colors."
-msgstr ""
-"Facendo doppio clic con il mouse o premendo Invio su un'immagine si attiva "
-"la modalità Modifica mediante la quale è possibile rimuovere gli occhi "
-"rossi, ritagliarla o regolarne luminosità e colore."
-
-#: C/f-spot.xml:135(title)
-msgid "Versions"
-msgstr "Versioni"
-
-#: C/f-spot.xml:137(para)
-msgid ""
-"When you edit your photos, a new copy (called a version) is created, so your "
-"original is never altered. After your first edit to a photo, subsequent "
-"edits will modify the same version. If you want to create mulitple versions "
-"of your photo, perhaps with different cropping or coloring, you can do so "
-"via the <menuchoice><guimenu>File</guimenu><guimenuitem>Create new version</"
-"guimenuitem></menuchoice> option."
-msgstr ""
-"Quando si modifica una fotografia ne viene creata una copia (denominata "
-"versione), per cui l'originale rimane inalterato. Le modifiche successive "
-"agiranno sulla stessa versione. È possibile creare versioni multiple, ad "
-"esempio per sperimentare diverse gradazioni di colore o ritagli, mediante "
-"l'opzione <menuchoice><guimenu>Foto</guimenu><guimenuitem>Crea nuova "
-"versione</guimenuitem></menuchoice>."
-
-#: C/f-spot.xml:148(title)
-msgid "Crop"
-msgstr "Ritagliare"
-
-#: C/f-spot.xml:150(para)
-msgid ""
-"Cropping an image is a great way to improve the quality of a photograph by "
-"improving how it is framed. You crop a photo by selecting the part of the "
-"photo you want to keep. If you want your photo to be the exact dimensions "
-"necessary for a certain print size, you can constrain the kind of selection "
-"F-Spot will allow you to draw by choosing the appropriate size from the "
-"constraint drop down. See the <xref linkend=\"edit-remove-red-eye\"/> below "
-"for details on making a selection on your photo."
-msgstr ""
-"Ritagliare una fotografia permette di aumentarne la qualità migliorandone "
-"l'inquadratura. Il ritaglio si effettua selezionando la porzione di "
-"fotografia che interessa. Se si desidera che il risultato finale abbia "
-"dimensioni adatte per la stampa, è possibile impostare il formato del "
-"ritaglio mediante lista di selezione. Consultare <xref linkend= \"edit-"
-"remove-red-eye\"/> per maggiori dettagli sull'impostazione della selezione."
-
-#: C/f-spot.xml:160(title)
-msgid "Crop tool"
-msgstr "Strumento ritaglia"
-
-#: C/f-spot.xml:167(para) C/f-spot.xml:368(para)
-msgid ""
-"Once you have made your crop selection, you must click the crop button "
-"beneath the image to finalize the crop. If you are working with the original "
-"photo, cropping creates a new version your photo."
-msgstr ""
-"Una volta effettuata la selezione occorre fare clic con il mouse sul "
-"pulsante di ritaglio sotto la fotografia. Se si sta lavorando sulla "
-"fotografia originale, il ritaglio produrrà una nuova versione."
-
-#: C/f-spot.xml:175(title)
-msgid "Straighten"
-msgstr "Raddrizzamento"
-
-#: C/f-spot.xml:177(para)
-msgid ""
-"Straighten effect is a tool to level a photo, quite helpful for landscapes "
-"taken without a tripod, when (imaginary) line of horizon is not at 0°. This "
-"tool rotates an image by a specified angle and automagically crops the "
-"resulted image, so that you always see a perfect rectangle."
-msgstr ""
-"Si tratta di uno strumento per livellare una fotografia, utile ad esempio "
-"per le foto di paesaggio scattate senza un treppiede in cui l'orizzonte "
-"(immaginario) non sia a 0°. Questo strumento ruota l'immagine dell'angolo "
-"indicato e contemporaneamente la ritaglia in modo che risulti sempre "
-"rettangolare."
-
-#: C/f-spot.xml:184(title)
-msgid "Straighten tool"
-msgstr "Strumento raddrizzatore"
-
-#: C/f-spot.xml:194(title)
-msgid "Adjust Colors"
-msgstr "Regolare i colori"
-
-#: C/f-spot.xml:196(para)
-msgid ""
-"To adjust the brightness, contrast, and colors of a photo, first click the "
-"<guibutton>Adjust the photo colors</guibutton> icon to open the adjustment "
-"dialog. Change then some settings and save them with <guibutton>OK</"
-"guibutton>."
-msgstr ""
-"Per ritoccare la luminosità, il contrasto oppure i colori di una fotografia, "
-"fare clic sull'icona <guibutton>Regola i colori della fotografia</guibutton> "
-"per aprire il menù di fotoritocco. Una volta terminate le modifiche premere "
-"<guibutton>OK</guibutton> per applicarle."
-
-#: C/f-spot.xml:203(title)
-msgid "Adjust Colors tool"
-msgstr "Strumento regolazione colori"
-
-#: C/f-spot.xml:213(title) C/f-spot.xml:221(title)
-msgid "AutoColor"
-msgstr "Regolazione automatica dei colori"
-
-#: C/f-spot.xml:215(para)
-msgid ""
-"This effect automatically adjusts color levels to make a pretty balanced "
-"picture color-wise. It serves best for pictures taken with automatical white "
-"balance, when camera didn't manage to do the job well."
-msgstr ""
-"Questo effetto regola automaticamente i livelli dei colori per ottenere un "
-"miglior bilanciamento della fotografia. Rende un miglior servizio nei casi "
-"in cui il bilanciamento automatico del bianco della fotocamera non abbia "
-"funzionato in modo adeguato."
-
-#: C/f-spot.xml:231(title)
-msgid "Desaturate"
-msgstr "Desaturazione"
-
-#: C/f-spot.xml:233(para)
-msgid ""
-"To make a colorful photo a black and white one, open a photo of choice and "
-"press <guibutton>Desaturate</guibutton> button."
-msgstr ""
-"Per trasformare una fotografia a colori in una in bianco e nero, aprire la "
-"fotografia e premere <guibutton>Desatura</guibutton>."
-
-#: C/f-spot.xml:238(title) C/f-spot.xml:255(title)
-msgid "Desaturation tool"
-msgstr "Strumento desaturazione"
-
-#: C/f-spot.xml:248(title)
-msgid "Sepia"
-msgstr "Seppia"
-
-#: C/f-spot.xml:250(para)
-msgid ""
-"To make a colorful photo look like an old-style picture in sepia tones, open "
-"a photo of choice and press <guibutton>Sepia</guibutton> button."
-msgstr ""
-"Per rendere l'effetto delle vecchie fotografie con i toni seppia, aprire una "
-"fotografia e premere <guibutton>Seppia</guibutton>."
-
-#: C/f-spot.xml:265(title)
-msgid "Remove Red-Eye"
-msgstr "Rimuovere gli occhi rossi"
-
-#: C/f-spot.xml:267(para)
-msgid ""
-"To remove redeye from a photo, you need to select a zone containing the "
-"eyes. You may want to zoom in on the image to accurately select the eyes in "
-"the photo. You should be able to correct both eyes on the same person in one "
-"shot, or even the eyes from multiple people at once. If this doesn't work "
-"for you, or the selected zone contains some vivid red parts (lips, ...) "
-"you'll probably have to correct one red eye at a time."
-msgstr ""
-"Per rimuovere l'effetto occhi rossi occorre selezionare la zona contenente "
-"gli occhi. È possibile ingrandire l'immagine per selezionare accuratamente "
-"gli occhi ed è anche possibile correggere entrambi gli occhi di una persona "
-"o più persone in un colpo solo. Se l'effetto non dovesse essere "
-"soddisfacente, o in presenza di parti rosse (ad esempio le labbra) sarà "
-"probabilmente necessario correggere un occhio alla volta."
-
-#: C/f-spot.xml:275(para)
-msgid ""
-"To make your selection, click one corner of the rectangle that will be your "
-"selection, and drag your mouse to the diagonal corner and release it. You "
-"can resize your selection by dragging its edges, and you can move it by "
-"clicking in the middle of it and dragging it to where you want it."
-msgstr ""
-"Per selezionare fare clic su un angolo del rettangolo che formerà la "
-"selezione e trascinare il mouse nell'angolo opposto lungo la diagonale e "
-"rilasciarlo. Si può ridimensionare la selezione trascinandone i bordi e si "
-"può muoverla facendo clic nel mezzo e trascinandola dove si desidera."
-
-#: C/f-spot.xml:281(para)
-msgid ""
-"Once you have selected a zone, you can remove the red from it by clicking "
-"the red-eye button beneath the photo."
-msgstr ""
-"Terminata la selezione dell'occhio, si può effettuare la rimozione "
-"dell'effetto occhi rossi premendo il pulsante posto sotto la fotografia "
-"stessa."
-
-#: C/f-spot.xml:286(title)
-msgid "Red-Eye tool"
-msgstr "Strumento rimozione occhi rossi"
-
-#: C/f-spot.xml:294(para)
-msgid ""
-"You can change the threshold for redeyes detection by changing the gconf key "
-"<filename class=\"directory\">/apps/f-spot/edit/redeye_threshold</filename>."
-msgstr ""
-"È possibile modificare la soglia di rilevazione dell'effetto occhi rossi "
-"mediante la chiave gconf <filename class=\"directory\">/apps/f-spot/edit/"
-"redeye_threshold</filename>."
-
-#: C/f-spot.xml:303(title)
-msgid "Soft Focus"
-msgstr "Sfocatura"
-
-#: C/f-spot.xml:305(para)
-msgid ""
-"In photography sharpening one region of a picture, while blurring all the "
-"rest, is a way to make an emphasis and grab attention. It is achieved by "
-"using a lens that allows shooting with a short distance in front of and "
-"beyond the subject that appears to be in focus. Soft focus effect is a way "
-"to emulate such a lens."
-msgstr ""
-"In fotografia, evidenziare una porzione di una foto lasciando sfocato il "
-"resto è un modo per dare enfasi e richiamare l'attenzione. Ciò si ottiene "
-"mediante una lente di ingrandimento con la quale si mette a fuoco solo una "
-"porzione dell'immagine. L'effetto sfocatura è un modo per simulare l'uso "
-"della lente."
-
-#: C/f-spot.xml:313(title)
-msgid "Soft Focus tool"
-msgstr "Strumento sfocatura"
-
-#: C/f-spot.xml:320(para)
-msgid ""
-"Click to choose central point of the area you want to be in focus and adjust "
-"amount of blurring, then click <guibutton>OK</guibutton>."
-msgstr ""
-"Fare clic per selezionare il centro dell'area che si desidera porre a fuoco "
-"e selezionare la porzione di sfocatura, quindi premere <guibutton>OK</"
-"guibutton>."
-
-#: C/f-spot.xml:327(title)
-msgid "Sharpen"
-msgstr "Nitidezza"
-
-#: C/f-spot.xml:329(para)
-msgid ""
-"Out-of-focus photographs and most digitized images often need a sharpness "
-"correction. The Unsharp Mask effect sharpens edges of the elements without "
-"increasing noise or blemish. To sharpen a photo choose "
-"<menuchoice><guimenu>Edit</guimenu><guimenuitem>Sharpen...</guimenuitem></"
-"menuchoice> and specify the following values:"
-msgstr ""
-"Le fotografie sfocate e molte immagini digitalizzate spesso richiedono una "
-"correzione della nitidezza. L'effetto Maschera di contrasto migliora la "
-"nitidezza degli orli degli elementi senza incrementare il rumore o "
-"introdurre difetti. Per rendere più nitida una foto selezionare "
-"<menuchoice><guimenu>Modifica</guimenu><guimenuitem>Nitidezza...</"
-"guimenuitem></menuchoice> e specificare i seguenti valori:"
-
-#: C/f-spot.xml:340(para)
-msgid ""
-"<parameter class=\"option\">Amount</parameter> — strength of sharpening."
-msgstr ""
-"<parameter class=\"option\">Ammontare</parameter> — forza della nitidezza."
-
-#: C/f-spot.xml:345(para)
-msgid ""
-"<parameter class=\"option\">Radius</parameter> — how many pixels on either "
-"side of an edge will be affected by sharpening. High resolution images allow "
-"higher radius."
-msgstr ""
-"<parameter class=\"option\">Raggio</parameter> — quantità di pixel su "
-"entrambi i lati dell'orlo che verranno interessati dall'affilatura. Immagini "
-"ad alta risoluzione richiederanno un raggio maggiore."
-
-#: C/f-spot.xml:352(para)
-msgid ""
-"<parameter class=\"option\">Threshold</parameter> — the minimum difference "
-"in pixel values that indicates an edge where sharpen must be applied. This "
-"helps avoiding creation of blemishes in face, sky or water surface."
-msgstr ""
-"<parameter class=\"option\">Soglia</parameter> — la minima differenza in "
-"valori di pixel che indentifica un orlo quando viene applicata l'affilatura. "
-"Serve per evitare l'introduzione di difetti sui volti, nel cielo o sulle "
-"superfici liquide."
-
-#: C/f-spot.xml:362(title)
-msgid "Describe"
-msgstr "Aggiungere un commento"
-
-#: C/f-spot.xml:364(para)
-msgid ""
-"You can also enter a description of the image by clicking on the text entry "
-"box below the image and typing."
-msgstr ""
-"L'inserimento di una descrizione della fotografia avviene facendo clic con "
-"il mouse nella casella di testo posta immediatamente sotto la fotografia ed "
-"inserendo il testo desiderato."
-
-#: C/f-spot.xml:376(title)
-msgid "Adjust Time"
-msgstr "Regolazione ora"
-
-#: C/f-spot.xml:378(para)
-msgid ""
-"In both 'browse' or 'edit' modes, you can adjust the time of one or multiple "
-"pictures (<menuchoice><guimenu>Edit</guimenu><guimenuitem>Adjust Time</"
-"guimenuitem></menuchoice>). Adjusting the time of multiple pictures at once "
-"helps you shift all an import roll if, e.g. the time on your camera is badly "
-"set or if you forgot to change it according to DST."
-msgstr ""
-"In entrambe le modalità «Seleziona» o «Modifica» è possibile regolare l'ora di "
-"una o più foto (<menuchoice><guimenu>Modifica</"
-"guimenu><guimenuitem>Regolazione ora</guimenuitem></menuchoice>. La "
-"regolazione dell'ora permette di spostare tutto un rullino se, ad esempio, "
-"data e ora sulla fotocamera sono errate o se ci si è dimenticati di regolare "
-"l'ora legale/solare."
-
-#: C/f-spot.xml:390(title)
-msgid "Tag"
-msgstr "Contrassegnare le fotografie"
-
-#: C/f-spot.xml:391(para)
-msgid ""
-"F-Spot enables you to organize and enjoy your photos by associating them "
-"with various user-customizable tags. A tag is a merely a label. F-Spot comes "
-"with default tags to get you started; you are free to change them and add "
-"new ones. For example, if you want to create a tag for specific event, you "
-"can create a new tag named after that event under the Events tag."
-msgstr ""
-"F-Spot permette di organizzare le proprie fotografie associando ad ognuna di "
-"esse una o più etichette. F-Spot contiene alcune etichette predefinite che "
-"permettono una prima organizzazione; l'utente ha comunque la piena libertà "
-"di modificarle e di aggiungerne di nuove. Ad esempio, se si desidera "
-"aggiungere un'etichetta per un evento particolare, la si può creare sotto "
-"l'etichetta Eventi."
-
-#: C/f-spot.xml:398(para)
-msgid "There are many ways to tag photos:"
-msgstr "Ci sono molti modi per associare le etichette alle fotografie:"
-
-#: C/f-spot.xml:403(para)
-msgid "drag and drop the photo(s) onto the tag"
-msgstr "trascinando le fotografie sull'etichetta"
-
-#: C/f-spot.xml:408(para)
-msgid "drag and drop the tag onto the photo(s)"
-msgstr "trascinando l'etichetta sulle fotografie"
-
-#: C/f-spot.xml:413(para)
-msgid "via the photo's right-click menu"
-msgstr ""
-"mediante il menù ottenuto premendo il tasto destro del mouse sulla fotografia"
-
-#: C/f-spot.xml:418(para)
-msgid "via the Tags and Edit menus"
-msgstr "mediante i menù Etichette e Modifica"
-
-#: C/f-spot.xml:423(para)
-msgid ""
-"by typing them in (press <keycap>t</keycap> to pop up the tag entry bar, "
-"enter comma-separated tags) - with tab completion!"
-msgstr ""
-"attivando la casella di inserimento etichette mediante <keycap>t</keycap> ed "
-"inserendo le etichette, separandole con una virgola. Il tasto di tabulazione "
-"permette il completamento automatico dell'etichetta!"
-
-#: C/f-spot.xml:429(para)
-msgid ""
-"The first photo you associate with a tag will be used for that tag's icon. "
-"You can always edit a tag's name, parent tag, and icon by right clicking on "
-"it and choosing <guilabel>Edit tag</guilabel>."
-msgstr ""
-"La prima fotografia associata all'etichetta verrà usata come icona per tutte "
-"le etichette di quel tipo. È possibile modificare il nome dell'etichetta, il "
-"suo genitore o l'icona selezionando <guilabel>Modifica etichetta</guilabel>."
-
-#: C/f-spot.xml:434(para)
-msgid ""
-"You can change a tag's parent by dragging and dropping it where you like. "
-"Also, you can edit the name of a tag by selecting it and pressing "
-"<keycap>F2</keycap>. Lastly, if you have the tag tree widget focused (e.g. "
-"you just clicked on a tag), you can start typing the name of a tag, and all "
-"the expanded tags in the list will be searched and you'll jump to any "
-"matching ones."
-msgstr ""
-"È possibile modificare il genitore di un'etichetta trascinandola nel punto "
-"desiderato con il mouse. È inoltre possibile modificarne il nome premendo "
-"<keycap>F2</keycap>. Infine, quando il focus è sulla visualizzazione ad "
-"albero delle etichette (ad esempio facendo clic su un'etichetta) si può "
-"cercare un'etichetta manualmente; digitando le prime lettere, infatti, "
-"verranno cercate tutte le corrispondenze nei nomi delle etichette presenti "
-"in tutti i rami visualizzati."
-
-#: C/f-spot.xml:443(para)
-msgid ""
-"You can also change size of tag icons in the sidebar or even make tag icons "
-"invisible by selecting preferred option from <menuchoice><guimenu>View</"
-"guimenu><guimenuitem>Tag Icons</guimenuitem></menuchoice> menu."
-msgstr ""
-"È possibile modificare la dimensione delle icone delle etichette nella barra "
-"laterale o renderle invisibili selezionando l'opzione desiderata dal menù "
-"<menuchoice><guimenu>Visualizza</guimenu><guimenuitem>Icone etichette</"
-"guimenuitem></menuchoice>."
-
-#: C/f-spot.xml:451(para)
-msgid ""
-"F-Spot can write tags as metadata fields into JPEG files. Tags for various "
-"RAW files, PNG, TIFF, and others are written to F-Spot's database. You will "
-"have to re-tag these files if you re-import your collection."
-msgstr ""
-"F-Spot può scrivere etichette quali metadati nei file JPEG. Le etichette per "
-"file RAW, PNG, TIFF e altri vengono scritte nel Database F-Spot. Sarà "
-"necessario etichettare nuovamente questi file se verrà nuovamente importata "
-"la collezione."
-
-#: C/f-spot.xml:462(title)
-msgid "Enjoying your photos"
-msgstr "Godersi le proprie fotografie"
-
-#: C/f-spot.xml:464(title)
-msgid "Browse"
-msgstr "Sfogliare"
-
-#: C/f-spot.xml:465(para)
-msgid ""
-"You can use the slider widget to browse your photos by month or by "
-"directory. To change this setting, go to <menuchoice><guimenu>View</"
-"guimenu><guimenuitem>Arranged By</guimenuitem></menuchoice>."
-msgstr ""
-"È possibile ordinare l'esplorazione delle fotografie per mese o per "
-"directory. Per far ciò utilizzare la selezione in "
-"<menuchoice><guimenu>Visualizza</guimenu><guimenuitem>Ordina per</"
-"guimenuitem></menuchoice>."
-
-#: C/f-spot.xml:473(title)
-msgid "Search"
-msgstr "Ricerca"
-
-#: C/f-spot.xml:475(para)
-msgid ""
-"F-Spot uses search search filters to help you better define search criteria."
-msgstr ""
-"F-Spot usa i filtri di ricerca per aiutare nella migliore definizione dei "
-"criteri di ricerca."
-
-#: C/f-spot.xml:480(title)
-msgid "Tags"
-msgstr "Contrassegnare le fotografie"
-
-#: C/f-spot.xml:482(para)
-msgid ""
-"You can start a search by double clicking or activating a tag from the tag "
-"list. Alternatively, you can show the find bar with "
-"<menuchoice><guimenu>Find</guimenu><guimenuitem>Show Find Bar</guimenuitem></"
-"menuchoice>. With the find bar shown, you can drag tags from the tag view to "
-"the find bar."
-msgstr ""
-"La ricerca inizia con un doppio clic o attivando un'etichetta dalla lista "
-"delle etichette. In alternativa è possibile attivare la barra di ricerca con "
-"<menuchoice><guimenu>Trova</guimenu><guimenuitem>Visualizza barra della "
-"ricerca</guimenuitem></menuchoice>. Con la barra di ricerca attiva si "
-"possono trascinare etichette dalla lista alla barra di ricerca."
-
-#: C/f-spot.xml:488(para)
-msgid ""
-"To find photos that are tagged with both of two tags, activate the first in "
-"the tag view or drag it onto the find bar, then drag the second tag and drop "
-"it on top of the first. You can also right click on the second tag in the "
-"tag view, or use the <guimenu>Find</guimenu> menu, and choose "
-"<guimenuitem>Find With...</guimenuitem> and select the first tag (or group "
-"of tags)."
-msgstr ""
-"Per cercare una fotografia contrassegnata con due o più etichette occorre "
-"attivare la prima nella lista delle etichette o trascinandola nella barra di "
-"ricerca, quindi trascinare la seconda sopra alla prima. È anche possibile "
-"fare clic con il tasto destro sulla seconda etichetta nella lista delle "
-"etichette, oppure utilizzare il menù <guimenu>Trova</guimenu> selezionare "
-"<guimenuitem>Trova con...</guimenuitem> e scegliere la prima etichetta."
-
-#: C/f-spot.xml:495(para)
-msgid ""
-"You can drag a tag icon around on the find bar to change from finding it and "
-"another tag to finding it or another tag."
-msgstr ""
-"È possibile trascinare un'etichetta sulla barra di ricerca per cambiare la "
-"modalità di ricerca da \"cerca questa e un'altra etichetta\" a \"cerca "
-"questa o un'altra etichetta\"."
-
-#: C/f-spot.xml:499(para)
-msgid ""
-"You can search for photos that do not have a particular tag by double-"
-"clicking on a tag in the find bar. Alternatively, you can right-click a tag "
-"in the find bar and select <guimenuitem>Exclude</guimenuitem>."
-msgstr ""
-"È possibile cercare una fotografia che non disponga di una particolare "
-"etichetta tramite un doppio clic su un'etichetta nella barra di ricerca. In "
-"alternativa è possibile fare doppio clic nella barra delle etichette e "
-"selezionare <guimenuitem>Escludi</guimenuitem>."
-
-#: C/f-spot.xml:504(para)
-msgid ""
-"To remove a tag from the search, drag it away from the find bar, or right "
-"click and select <guimenuitem>Remove</guimenuitem>."
-msgstr ""
-"Per rimuovere un'etichetta dalla ricerca occorre trascinarla fuori dalla "
-"barra di ricerca oppure fare clic con il tasto destro del mouse e "
-"selezionare <guimenuitem>Rimuovi</guimenuitem>."
-
-#: C/f-spot.xml:508(para)
-msgid ""
-"By default, photos tagged <emphasis>Hidden</emphasis> will not be shown. You "
-"must explicitly include the <emphasis>Hidden</emphasis> tag in your search "
-"to show such photos."
-msgstr ""
-"Per impostazione predefinita, le foto etichettate <emphasis>Nascoste</"
-"emphasis> non verranno visualizzate. Per visualizzarle occorrerà inserire "
-"l'etichetta <emphasis>Nascoste</emphasis> nelle opzioni di ricerca."
-
-#: C/f-spot.xml:516(title)
-msgid "Import Rolls"
-msgstr "Fotografie Importate"
-
-#: C/f-spot.xml:517(para)
-msgid ""
-"F-Spot remembers what pictures were imported every now and then. Use "
-"<menuchoice><guimenu>Find</guimenu><guisubmenu>Import Roll</"
-"guisubmenu><guimenuitem>Last import roll</guimenuitem></menuchoice> to limit "
-"search to last importing session or use <menuchoice><guimenu>Find</"
-"guimenu><guisubmenu>Import Roll</guisubmenu><guimenuitem>Select Import "
-"Rolls...</guimenuitem></menuchoice> to make a finer selection of imported "
-"photos:"
-msgstr ""
-"F-Spot ricorda quali immagini sono state importate. Selezionare "
-"<menuchoice><guimenu>Trova</guimenu><guisubmenu>Importa rullino</"
-"guisubmenu><guimenuitem>Ultimo rullino importato</guimenuitem></menuchoice> "
-"per limitare la ricerca all'ultima importazione o usare "
-"<menuchoice><guimenu>Trova</guimenu><guisubmenu>Importa rullini</"
-"guisubmenu><guimenuitem>Seleziona importazione rullini...</guimenuitem></"
-"menuchoice> per una più fine selezione delle fotografie importate:"
-
-#: C/f-spot.xml:527(para)
-msgid ""
-"<parameter class=\"option\">At</parameter> — to select photos from a "
-"particular importing session"
-msgstr ""
-"<parameter class=\"option\">A</parameter> — per selezionare foto da una "
-"particolare sessione importata"
-
-#: C/f-spot.xml:532(para)
-msgid ""
-"<parameter class=\"option\">After</parameter> — to select all photos "
-"imported begining with a particular importing sessio"
-msgstr ""
-"<parameter class=\"option\">Dopo</parameter> — per selezionare tutte le foto "
-"importate iniziando da una sessione particolare"
-
-#: C/f-spot.xml:537(para)
-msgid ""
-"<parameter class=\"option\">Between</parameter> — to select all photos "
-"imported between two particular importing sessions"
-msgstr ""
-"<parameter class=\"option\">Tra</parameter> — per selezionare tutte le foto "
-"importate tra due particolari sessioni"
-
-#: C/f-spot.xml:542(para)
-msgid ""
-"Every time you change settings of the filter, amount of selected photos will "
-"appear in the bottom part of the dialog."
-msgstr ""
-"Ogni qualvolta si cambiano le impostazioni dei filtri, la quantità totale di "
-"fotografie verrà visualizzata nella parte inferiore della finestra di "
-"dialogo."
-
-#: C/f-spot.xml:546(para)
-msgid ""
-"When you apply Import Roll filter, in the Find bar you will see "
-"<guilabel>Find: Import Roll</guilabel>. Now you can add some other filter to "
-"finetune your selection."
-msgstr ""
-"Quando si applica il filtro di Importazione rullino, nella barra di ricerca "
-"si potrà osservare la dicitura <guilabel>Trova: Importa rullino</guilabel>. "
-"Si possono a questo punto aggiungere altri filtri per finalizzare la propria "
-"selezione."
-
-#: C/f-spot.xml:551(para)
-msgid ""
-"If you don't need the Import Roll filter anymore, choose "
-"<menuchoice><guimenu>Find</guimenu><guisubmenu>Import Roll</"
-"guisubmenu><guimenuitem>Clear roll filter</guimenuitem></menuchoice> to "
-"remove Import Roll from search criteria. You can also click the close button "
-"(<guibutton>X</guibutton>) of the search bar to discard all the current "
-"search options."
-msgstr ""
-"Se il filtro Importazione rullino non serve più, scegliere <guimenu>Trova</"
-"guimenu><guisubmenu>Importa rullini</guisubmenu><guimenuitem>Cancella filtri "
-"rullino</guimenuitem></menuchoice> per rimuovere l'importazione rullini dai "
-"criteri di ricerca. Premere il pulsante di chiusura (<guibutton>X</"
-"guibutton>) della barra di ricerca per cancellare tutte le opzioni di "
-"ricerca."
-
-#: C/f-spot.xml:560(para)
-msgid ""
-"The number of displayed rolls in the dialog is defined by the gconf key "
-"<filename class=\"directory\">/apps/f-spot/import/gui_roll_history</"
-"filename>. Default value is 10."
-msgstr ""
-"Il numero dei rullini visualizzati nella finestra di dialogo è definito "
-"dalla variabile gconf <filename class=\"directory\">/apps/f-spot/import/"
-"gui_roll_history</filename>. Il suo valore predefinito è 10."
-
-#: C/f-spot.xml:569(title)
-msgid "Type-to-find"
-msgstr "Casella di digitazione"
-
-#: C/f-spot.xml:570(para)
-msgid ""
-"There is also a type-to-find entry. Press <keycap>/</keycap> to open it. It "
-"cannot be used at the same time as the find bar. You can type queries such "
-"as \"TagA and (TagB or (TagC and TagD))\". At any point, if F-Spot "
-"recognizes what you've typed as a valid query, it will update your search. "
-"The <emphasis>not</emphasis> operator is not yet supported."
-msgstr ""
-"Esiste inoltre una ricerca tramite casella di digitazione. Premere <keycap>/"
-"</keycap> per aprirla. Questa non può essere usata quando sia attiva la "
-"barra di ricerca. È possibile inserire parametri di ricerca quali "
-"\"EtichettaA e (EtichettaB oppure (EtichettaC e EtichettaD))\". Ad ogni "
-"istante, se F-Spot riconosce un'interrogazione valida, aggiorna la ricerca. "
-"L'operatore <emphasis>not</emphasis> non è ancora supportato."
-
-#: C/f-spot.xml:578(para)
-msgid ""
-"This function will also search for the typed text into photos comments and "
-"filename."
-msgstr ""
-"Questa funzione ricercherà il testo anche nei commenti alle foto e nei nomi "
-"dei file."
-
-#: C/f-spot.xml:585(title)
-msgid "Fullscreen Mode and Slideshows"
-msgstr "Modalità schermo intero e presentazione"
-
-#: C/f-spot.xml:586(para)
-msgid ""
-"For fewer distractions and larger display, you can view your photos in full "
-"screen mode. You control when to show the next photo or to return to the "
-"previous. Enter fullscreen mode by pressing <keycap>F11</keycap> at any time "
-"or by pressing the button in the toolbar."
-msgstr ""
-"Per ridurre al minimo le distrazioni e ingrandire la visualizzazione è "
-"possibile vedere le fotografie in modalità a schermo intero. L'utente avrà "
-"sempre il controllo della visualizzazione della prossima foto o della "
-"precedente. La modalità a schermo intero si ottiene premendo <keycap>F11</"
-"keycap> in qualsiasi momento o premendo il pulsante apposito nella barra "
-"degli strumenti."
-
-#: C/f-spot.xml:593(title)
-msgid "FullScreen"
-msgstr "Modalità a schermo intero"
-
-#: C/f-spot.xml:600(para)
-msgid ""
-"In slideshow mode, you can sit back and view your photos as they are "
-"presented to you. You can start a slideshow by pressing the button on the "
-"toolbar."
-msgstr ""
-"In modalità presentazione è possibile sedersi e vedere le proprie foto così "
-"come esse vengono presentate. Si può attivare il modo presentazione premendo "
-"il pulsante sulla barra degli strumenti."
-
-#: C/f-spot.xml:606(title)
-msgid "SlideShow"
-msgstr "Presentazione"
-
-#: C/f-spot.xml:617(title)
-msgid "Sharing your photos"
-msgstr "Condividere le proprie fotografie"
-
-#: C/f-spot.xml:620(para)
-msgid ""
-"There are many ways to share your photos using F-Spot. All of the following "
-"methods will only share the photos you have selected when you run them."
-msgstr ""
-"Ci sono molti modi per condividere le proprie fotografie usando F-Spot. "
-"Tutti i seguenti metodi permetteranno di condividere solamente le foto che "
-"sono state selezionate."
-
-#: C/f-spot.xml:627(title)
-msgid "E-mail"
-msgstr "Inviare E-mail"
-
-#: C/f-spot.xml:628(para)
-msgid ""
-"E-mail your photos directly from F-Spot with the <menuchoice><guimenu>File</"
-"guimenu><guimenuitem>Send Mail</guimenuitem></menuchoice> menu."
-msgstr ""
-"È possibile inviare le fotografie direttamente da F-Spot tramite il menù "
-"<menuchoice><guimenu>File</guimenu><guimenuitem>Invia email</guimenuitem></"
-"menuchoice>."
-
-#: C/f-spot.xml:634(title)
-msgid "Note 1"
-msgstr "Nota 1"
-
-#: C/f-spot.xml:635(para)
-msgid ""
-"The email program used for this is defined at the GNOME level. You can "
-"change the default e-mailer for your user using the <application>Preferred "
-"Applications</application> tool in <menuchoice><guimenu>System</"
-"guimenu><guisubmenu>Preferences</guisubmenu></menuchoice>."
-msgstr ""
-"Il gestore e-mail in uso è definito a livello GNOME. È possibile modificare "
-"il gestore predefinito mediante lo strumento <application>Applicazioni "
-"preferite</application> in <menuchoice><guimenu>Sistema</"
-"guimenu><guisubmenu>Preferenze</guisubmenu></menuchoice>."
-
-#: C/f-spot.xml:644(title)
-msgid "Note 2"
-msgstr "Nota 2"
-
-#: C/f-spot.xml:645(para)
-msgid ""
-"If some of the photos you'd like to send by email are in a format that F-"
-"Spot can't write (e.g. RAW images), the size selection dialog will become "
-"insensitive and the originals will be sent."
-msgstr ""
-"Se qualche foto che si desidera inviare fosse in un formato non scrivibile "
-"da F-Spot (ad esempio in formato RAW) la finestra di dialogo della selezione "
-"dimensione diventerà insensibile e verrà inviato l'originale."
-
-#: C/f-spot.xml:652(para)
-msgid ""
-"If you're sending resized pictures, F-Spot will keep the modified versions "
-"somewhere in the <filename class=\"directory\">/tmp</filename> directory for "
-"30 seconds. It's not an issue with evolution, which makes it's own local "
-"copy of the attachments, but could be a bit shorter if you're using "
-"Thunderbird. You can change the delay by editing the gconf key <filename "
-"class=\"directory\">/apps/f-spot/export/email/delete_timeout_seconds</"
-"filename>."
-msgstr ""
-"Quando si inviano immagini ridimensionate F-Spot tiene la versione "
-"modificata nella directory <filename class=\"directory\">/tmp</filename> per "
-"30 secondi. Questo tempo di attesa non provoca problemi con Evolution, il "
-"quale mantiene una sua copia locale per gli allegati, mentre potrebbe "
-"provocare qualche problema con Thunderbird. È possibile modificare il valore "
-"di tale tempo di attesa mediante la variabile gconf <filename class="
-"\"directory\">/apps/f-spot/export/email/delete_timeout_seconds</filename>."
-
-#: C/f-spot.xml:664(title)
-msgid "Print"
-msgstr "Stampare"
-
-#: C/f-spot.xml:665(para)
-msgid ""
-"Print your photos with the <menuchoice><guimenu>File</"
-"guimenu><guimenuitem>Print</guimenuitem></menuchoice> menu."
-msgstr ""
-"La stampa delle fotografie si ottiene mediante il menù "
-"<menuchoice><guimenu>File</guimenu><guimenuitem>Stampa</guimenuitem></"
-"menuchoice>."
-
-#: C/f-spot.xml:672(title)
-msgid "Burn to CD"
-msgstr "Scrivere un CD"
-
-#: C/f-spot.xml:673(para)
-msgid ""
-"Burn your photos to CD or DVD with the <menuchoice><guimenu>File</"
-"guimenu><guisubmenu>Export</guisubmenu><guimenuitem>Export to CD</"
-"guimenuitem></menuchoice> menu."
-msgstr ""
-"È possibile masterizzare le proprie fotografie direttamente su CD o DVD "
-"tramite il menù <menuchoice><guimenu>File</guimenu><guimenuitem>Esporta</"
-"guimenuitem><guimenuitem>Esporta su CD</guimenuitem></menuchoice>."
-
-#: C/f-spot.xml:681(title)
-msgid "Generate a Website Gallery or Folder"
-msgstr "Generare una galleria su un sito web o in una cartella"
-
-#: C/f-spot.xml:682(para)
-msgid ""
-"The <menuchoice><guimenu>File</guimenu><guimenuitem>Export</"
-"guimenuitem><guimenuitem>Export to Folder</guimenuitem></menuchoice> feature "
-"gives you three ways to export your images."
-msgstr ""
-"L'opzione <menuchoice><guimenu>File</guimenu><guimenuitem>Esporta</"
-"guimenuitem><guimenuitem>Esporta su cartella</guimenuitem></menuchoice> "
-"fornisce tre modi per esportare le proprie immagini."
-
-#: C/f-spot.xml:690(para)
-msgid ""
-"<guilabel>Use Original</guilabel> exports your photos ready for use with "
-"Jakub Steiner's free <ulink url=\"http://jimmac.musichall.cz/original.php\"> "
-"Original Photo Gallery</ulink> software. If you are unsure about this "
-"option, it is probably not the right one for you."
-msgstr ""
-"<guilabel>Crea galleria usando «Original»</guilabel> esporta le proprie "
-"fotografie pronte all'uso mediante il programma libero <ulink url=\"http://"
-"jimmac.musichall.cz/original.php\"> Original Photo Gallery</ulink> di Jakub "
-"Steiner. Se non si è sicuri su questa opzione, probabilmente non è quella "
-"che fa al caso."
-
-#: C/f-spot.xml:698(para)
-msgid ""
-"<guilabel>Use static HTML files</guilabel> exports your photos to an "
-"interactive website, ready for you to upload."
-msgstr ""
-"<guilabel>Usa file statico HTML</guilabel> esporta le proprie foto su un "
-"sito web interattivo, pronto per il caricamento."
-
-#: C/f-spot.xml:704(para)
-msgid ""
-"<guilabel>Plain Files</guilabel> exports your images as files within "
-"directories, without putting them into a gallery."
-msgstr ""
-"<guilabel>File statico</guilabel> esporta le proprie immagini come file "
-"all'interno delle directory senza inserirle in una galleria."
-
-#: C/f-spot.xml:713(title)
-msgid "Post to your online galleries"
-msgstr "Inviare al proprio gestore di gallerie fotografiche"
-
-#: C/f-spot.xml:714(para)
-msgid ""
-"If you use Flickr, SmugMug, 23hq or Picasa Web Album, you can post your "
-"files directly from F-Spot with the <menuchoice><guimenu>File</"
-"guimenu><guisubmenu>Export</guisubmenu></menuchoice> menu, choosing "
-"corresponding submenu item."
-msgstr ""
-"Se si usa Flickr, SmugMug, 23hq o Picasa Web Album è possibile inviare i "
-"propri file direttamente da F-Spot tramite il menù "
-"<menuchoice><guimenu>File</guimenu><guisubmenu>Esporta</guisubmenu></"
-"menuchoice>, selezionando la corrispondente voce di sottomenù."
-
-#: C/f-spot.xml:719(para)
-msgid ""
-"If you use the PHP software known as <ulink url=\"http://gallery.sourceforge."
-"net/\"> Gallery</ulink>, you can post your photos to your existing album "
-"with the <menuchoice><guimenu>File</guimenu><guimenuitem>Export</"
-"guimenuitem><guimenuitem>Export to Web Gallery</guimenuitem></menuchoice> "
-"menu. You must first enable the Remote module within your Gallery "
-"installation."
-msgstr ""
-"Se si usa un software PHP conosciuto come <ulink url=\"http://gallery."
-"sourceforge.net/\"> Gallery</ulink> è possibile inviare le foto al proprio "
-"album esistente tramite il menù <menuchoice><guimenu>File</"
-"guimenu><guimenuitem>Esporta</guimenuitem><guimenuitem>Esporta su galleria "
-"web</guimenuitem></menuchoice>. Occorre prima abilitare il modulo Remoto "
-"all'interno della propria installazione di Gallery."
-
-#: C/f-spot.xml:727(title)
-msgid "Note for Gallery 2.2 users"
-msgstr "Note per gli utenti di Gallery 2.2"
-
-#: C/f-spot.xml:728(para)
-msgid "The Remote plugin for Gallery should be 1.0.8 or newer."
-msgstr ""
-"Il plugin Remote per Gallery deve essere alla versione 1.0.8 o più recente."
-
-#: C/f-spot.xml:732(para)
-msgid ""
-"<ulink url=\"http://pennave.sourceforge.net\">PennAve</ulink> is a Python "
-"web-application that directly uses F-Spot's database to present a dynamic "
-"gallery of your photos and tags."
-msgstr ""
-"<ulink url=\"http://pennave.sourceforge.net\">PennAve</ulink> è "
-"un'applicazione web scritta in Python che usa direttamente il database di F-"
-"Spot per presentare una galleria dinamica delle proprie foto ed etichette."
-
-#: C/f-spot.xml:737(para)
-msgid ""
-"<ulink url=\"http://www.conduit-project.org\">Conduit</ulink> is an "
-"application that can sync photos that have a particular tag with your Flickr "
-"or Picasa Web Album web storage."
-msgstr ""
-"<ulink url=\"http://www.conduit-project.org\">Conduit</ulink> è "
-"un'applicazione che permette la sincronizzazione di fotografie con "
-"un'etichetta particolare con il proprio archivio Flickr o Picasa Web Album."
-
-#: C/f-spot.xml:746(title)
-msgid "Color management"
-msgstr "Gestione dei colori"
-
-#: C/f-spot.xml:749(title)
-msgid "What's color management"
-msgstr "Che cos'è la gestione dei colori"
-
-#: C/f-spot.xml:751(para)
-msgid ""
-"When you capture a photo and look at it on a display, it looks different "
-"than on a camera's preview display or on any other display. It will also "
-"look different when you print it. This is because every device has unique "
-"color reproduction capabilities."
-msgstr ""
-"Quando si osserva una foto sul monitor questa appare differente da quella "
-"osservata nella previsualizzazione della fotocamera o su un altro monitor. "
-"Risulta essere anche diversa quando la si stampa. Questo perché ogni "
-"dispositivo ha una sua propria capacità di riprodurre i colori."
-
-#: C/f-spot.xml:758(para)
-msgid ""
-"Color management system (CMS) is a tool to achieve reliable color "
-"reproduction for both display and output (e.g. a printer). A CMS relies on "
-"color profiles to map original colors to the color that a device can "
-"reproduce so that colors will appear the same way everywhere — on a computer "
-"LCD monitor, on a print from your local photolab etc."
-msgstr ""
-"Il Sistema di gestione dei colori (Color management system, CMS) è uno "
-"strumento per ottenere una fedele riproduzione dei colori tanto sul video "
-"quanto sui dispositivi di uscita (ad. es.: la stampante). Questo sistema si "
-"basa su profili colore per trasformare ogni colore nel corrispondente colore "
-"riproducibile dal dispositivo; in questo modo i colori appariranno gli "
-"stessi ovunque, su un monitor LCD oppure sulla stampa del laboratorio "
-"fotografico etc."
-
-#: C/f-spot.xml:768(title)
-msgid "What's a color profile"
-msgstr "Che cos'è un profilo colore"
-
-#: C/f-spot.xml:770(para)
-msgid ""
-"A color profile is a file with either .icc (thus its is often called an ICC "
-"profile) or .icm extension that describes how device's colors correspond to "
-"a universal description of colors."
-msgstr ""
-"Un profilo colore è un file con estensione .icc (da cui il nome «profilo "
-"ICC») o .icm che contiene la corrispondenza tra i colori riprodotti da un "
-"dispositivo e la loro descrizione standard."
-
-#: C/f-spot.xml:776(para)
-msgid "There are several types of profiles:"
-msgstr "Ci sono molti tipi di profili:"
-
-#: C/f-spot.xml:782(para)
-msgid ""
-"Input device profile. It's profile for a camera or a profile that an "
-"application like XSane embeds into a scanned image."
-msgstr ""
-"Profilo per dispositivo di input. È un profilo per fotocamera o per "
-"un'applicazione come XSane relativa ad un'immagine scandita."
-
-#: C/f-spot.xml:788(para)
-msgid ""
-"Working space profile. It's a profile that describes color space in which "
-"all operations are done inside an application. Usually very wide gamut "
-"profiles like AdobeRGB1998 or ProPhotoRGB are used for that."
-msgstr ""
-"Profilo per area di lavoro. È un profilo descrivente lo spazio colore sul "
-"quale operano le applicazioni. Solitamente i profili più usati sono "
-"«AdobeRGB1998» oppure «ProPhotoRGB»."
-
-#: C/f-spot.xml:795(para)
-msgid "Display profile. It's a profile for a monitor."
-msgstr "Profilo display. È un profilo per monitor."
-
-#: C/f-spot.xml:800(para)
-msgid "Output profile. This is usually a profile for you printer."
-msgstr "Profilo di output. Generalmente usato per la stampante."
-
-#: C/f-spot.xml:806(para)
-msgid ""
-"Currently F-Spot allows setting only display and output profiles. All color "
-"operations are done in sRGB color space."
-msgstr ""
-"Attualmente F-Spot gestisce solamente i profili «output» e «display». La "
-"gestione dei colori viene effettuata nello spazio colore sRGB."
-
-#: C/f-spot.xml:813(title)
-msgid "How to get my screen/printer color profile"
-msgstr "Come prelevare i profili per il monitor e la stampante"
-
-#: C/f-spot.xml:815(para)
-msgid "There are few ways to get a color profile."
-msgstr "Ci sono molti modi per prelevare un profilo colore."
-
-#: C/f-spot.xml:820(title)
-msgid "From CD or Internet"
-msgstr "Da un CD o da Internet"
-
-#: C/f-spot.xml:822(para)
-msgid ""
-"Many hardware manufacturers put color profiles into CD in the bundle. If you "
-"have one (from monitor or printer), you can use it. Or you can download it "
-"from the Internet (usually, from support section of the manufacturer's web "
-"site). Some camera manufacturers (Nikon, Canon) also provide ICC profiles."
-msgstr ""
-"Molti produttori hardware inseriscono il profilo colore all'interno del CD o "
-"lo inseriscono nella confezione. Se si dispone di uno di questi (per monitor "
-"o stampante) lo si può usare direttamente. Tali profili sono anche "
-"scaricabili via Internet dalla sezione «Supporto» del sito web del "
-"produttore. Anche alcuni produttori di fotocamere (Nikon, Canon) forniscono "
-"i profili ICC."
-
-#: C/f-spot.xml:832(title)
-msgid "Calibrating and profiling"
-msgstr "Calibrazione ed impostazione profilo"
-
-#: C/f-spot.xml:834(para)
-msgid ""
-"Best results can be achieved by calibrating and profiling devices with a "
-"measurement device. It is not so difficult, but it means that you need a "
-"spectrophotometer to do all measurements and create an ICC profile."
-msgstr ""
-"I migliori risultati si ottengono calibrando ed impostando i profili "
-"mediante uno strumento di misura. Non è difficile, ma occorre avere a "
-"disposizione uno spettrofotometro per effettuare le misurazioni e creare un "
-"profilo ICC."
-
-#: C/f-spot.xml:840(para)
-msgid ""
-"If you are on Windows or Mac OS X, you can use manufacturer's software "
-"coming with a spectrophotometer. On Linux you will have to use either <ulink "
-"url=\"http://www.argyllcms.com\">Argyll</ulink>, which is a set of versatile "
-"command line tools, or <ulink url=\"http://lprof.sourceforge.net/\">LProf</"
-"ulink>, which has a graphical user interface."
-msgstr ""
-"Utilizzando Windows o Mac OS X è possibile usare il software del produttore, "
-"generato da uno spettrofotometro. Con Linux è possibile usare sia <ulink url="
-"\"http://www.argyllcms.com\">Argyll</ulink>, un insieme versatile di "
-"strumenti a riga di comando, oppure <ulink url=\"http://lprof.sourceforge."
-"net/\">LProf</ulink>, dotato di interfaccia grafica."
-
-#: C/f-spot.xml:848(para)
-msgid ""
-"Please refer to documentation of third party hardware and software vendors "
-"for details."
-msgstr ""
-"Fare riferimento alla documentazione dei fornitori di hardware o software di "
-"terze parti per ulteriori dettagli."
-
-#: C/f-spot.xml:855(title)
-msgid "Embedding"
-msgstr "Incapsulamento"
-
-#: C/f-spot.xml:857(para)
-msgid ""
-"Image formats themselves (such as TIFF, JPEG, PNG...) may contain embedded "
-"color profiles. If color management is enabled, F-Spot looks for such "
-"embedded profiles and takes them into consideration."
-msgstr ""
-"Alcuni formati immagine (quali TIFF, JPG, PNG, etc.) possono contenere al "
-"loro interno profili colore. Se la gestione del colore è abilitata, F-Spot "
-"cercherà i profili colore e li utilizzerà."
-
-#: C/f-spot.xml:866(title)
-msgid "How to use color management in F-Spot"
-msgstr "Come usare la gestione colore in F-Spot"
-
-#: C/f-spot.xml:868(para)
-msgid ""
-"Color management in F-Spot can use only RGB profiles at this time (and you "
-"can't see other profiles in the F-Spot)."
-msgstr ""
-"Attualmente F-Spot può gestire solamente i profili RGB (nessun altro profilo "
-"è visualizzabile)."
-
-#: C/f-spot.xml:875(para)
-msgid ""
-"Copy your color profiles into the <filename class=\"directory\">/usr/share/"
-"color/icc</filename> or <filename class=\"directory\">/usr/local/share./"
-"color/icc</filename> directory."
-msgstr ""
-"Copiare i propri profili colore in una delle directory <filename class="
-"\"directory\">/usr/share/color/icc</filename> o <filename class=\"directory"
-"\">/usr/local/share/color/icc</filename>."
-
-#: C/f-spot.xml:883(para)
-msgid ""
-"Enable the color management with the <menuchoice><guimenu>Edit</"
-"guimenu><guimenuitem>Preferences</guimenuitem></menuchoice> menu."
-msgstr ""
-"La stampa delle fotografie si ottiene mediante il menù "
-"<menuchoice><guimenu>File</guimenu><guimenuitem>Stampa</guimenuitem></"
-"menuchoice>."
-
-#: C/f-spot.xml:890(para)
-msgid ""
-"Select <guilabel>Display</guilabel> and <guilabel>Output</guilabel> profiles."
-msgstr ""
-"Selezionare i profili <guilabel>Display</guilabel> e <guilabel>Output</"
-"guilabel>."
-
-#: C/f-spot.xml:898(para)
-msgid ""
-"You can use <ulink url=\"http://burtonini.com/blog/computers/xicc\">xicc</"
-"ulink> to load ICC profile to display and use the loaded profile from F-"
-"Spot. Just mark the checkbox <guilabel>Try to use the system display "
-"profile</guilabel>."
-msgstr ""
-"Sul sito <ulink url=\"http://burtonini.com/blog/computers/xicc\">xicc</"
-"\"ulink> è possibile trovare alcuni profili ICC da scaricare e usare con F-"
-"Spot. A questo punto selezionare la casella <guilabel>Prova a usare il "
-"profilo di sistema</guilabel>."
-
-#: C/f-spot.xml:909(title)
-msgid "Extend functionality"
-msgstr "Funzionalità estese"
-
-#: C/f-spot.xml:912(title)
-msgid "What extensions are"
-msgstr "Cosa sono le estensioni"
-
-#: C/f-spot.xml:914(para)
-msgid ""
-"F-Spot extensions are means to add new functionality to the application. F-"
-"Spot supports two types of extension: exporters (which allow exporting "
-"photos to new web services or data storages) and tools (which allow new ways "
-"of color correction, duplicate photos finders etc.). Extensions are "
-"distributed in form of extension packages."
-msgstr ""
-"Le estensioni di F-Spot sono metodi per aggiungere nuove funzionalità "
-"all'applicazione. F-Spot supporta due tipi di estensioni: esportazione (che "
-"permette l'esportazione di foto a nuovi archivi o servizi web) e strumenti "
-"(che consentono nuove correzioni di colore, ricerca di foto duplicate ecc.). "
-"Le estensioni vengono distribuite in forma di pacchetti di estensione."
-
-#: C/f-spot.xml:921(para)
-msgid ""
-"In the best traditions of not reinventing the wheel extensions can use other "
-"extensions, which means that one extension cannot work, if another extension "
-"is not installed. This concept of dependance actually means that"
-msgstr ""
-"Nella miglior tradizione di non reinventare la ruota, le estensioni possono "
-"usare altre estensioni, il che significa che un'estensione non può lavorare "
-"se un'altra non è installata. Questo concetto di dipendenza attualmente "
-"significa che"
-
-#: C/f-spot.xml:928(para)
-msgid ""
-"you cannot install an extension, if the extension it depends on, is not "
-"present in the system"
-msgstr ""
-"non è possibile installare un'estensione se l'estensione da cui essa dipende "
-"non è presente nel sistema"
-
-#: C/f-spot.xml:933(para)
-msgid "you cannot remove an extension on which some other extension depends"
-msgstr ""
-"non è possibile rimuovere un'estensione dalla quale ne dipendano altre."
-
-#: C/f-spot.xml:941(title)
-msgid "Managing extensions"
-msgstr "Gestione estensioni"
-
-#: C/f-spot.xml:943(para)
-msgid ""
-"To manage extensions choose <menuchoice><guimenu>Edit</"
-"guimenu><guimenuitem>Manage Extensions</guimenuitem></menuchoice> menu item."
-msgstr ""
-"Per la gestione delle estensioni selezionare la voce di menù "
-"<menuchoice><guimenu>Modifica</\"guimenu><guimenuitem>Gestione Estensioni</"
-"guimenuitem></menuchoice>."
-
-#: C/f-spot.xml:949(title)
-msgid "Managing extension repositories"
-msgstr "Gestione dei depositi delle estensioni"
-
-#: C/f-spot.xml:951(para)
-msgid ""
-"Simply put, repositories are extension storages. They can be either network "
-"or local. To add a new repository click Repositories button, choose type of "
-"the repository you are about to add and provide either URL or path. If the "
-"URL or path you specified doesn't contain a description (index) file for "
-"extensions, a warning message will pop up to tell you that."
-msgstr ""
-"In parole povere i repository sono depositi di estensioni, che possono "
-"essere locali o remoti. Per aggiungere un nuovo repository fare clic sul "
-"pulsante Repository, selezionare il tipo di repository che si desidera "
-"aggiungere, indicando il percorso o l'URL; se questi non dovessero contenere "
-"un file di descrizione (indice) per l'estensione, apparirà un messaggio di "
-"avviso."
-
-#: C/f-spot.xml:958(para)
-msgid ""
-"To remove a repository click <guibutton>Repositories</guibutton> button "
-"again, choose the repository you are about to delete and click "
-"<guibutton>Delete</guibutton> button."
-msgstr ""
-"Per rimuovere un repository fare nuovamente clic sul pulsante "
-"<guibutton>Repository</guibutton>, selezionare il repository che si intende "
-"eliminare e premere il pulsante <guibutton>Elimina</guibutton>."
-
-#: C/f-spot.xml:966(title)
-msgid "Installing and updating extensions"
-msgstr "Installazione ed aggiornamento delle estensioni"
-
-#: C/f-spot.xml:968(para)
-msgid ""
-"To install an extension click <guibutton>Install extensions...</guibutton> "
-"button. In the newly presented dialog"
-msgstr ""
-"Per installare un'estensione fare clic sul pulsante <guibutton>Installa "
-"estensioni...</guibutton>. Nella finestra di dialogo"
-
-#: C/f-spot.xml:974(para)
-msgid ""
-"Choose repository to install from all known repositories or just one of "
-"available repositories."
-msgstr ""
-"Selezionare il repository dalla lista dei repository conosciuti e "
-"disponibili."
-
-#: C/f-spot.xml:980(para)
-msgid ""
-"Choose, what extension packages you want to see: All, Only new, Only updates."
-msgstr ""
-"Selezionare il tipo di pacchetto di estensione desiderato: Tutti, Solo "
-"nuovi, Solo aggiornamento."
-
-#: C/f-spot.xml:985(para)
-msgid ""
-"Click the <guibutton>Update</guibutton> button to update list of available "
-"extension packages by given criteria."
-msgstr ""
-"Fare clic sul pulsante <guibutton>Aggiorna</guibutton> per aggiornare la "
-"lista dei pacchetti di estensione che soddisfano il criterio desiderato."
-
-#: C/f-spot.xml:991(para)
-msgid ""
-"Choose extensions you want to install/update, click <guibutton>Information</"
-"guibutton> to see summary on selected package, if you want to."
-msgstr ""
-"Selezionare le estensioni che si intende installare/aggiornare, fare clic "
-"sul pulsante <guibutton>Informazioni</guibutton> per ottenere il sommario "
-"dei pacchetti selezionati, se lo si desidera."
-
-#: C/f-spot.xml:997(para)
-msgid "Click <guibutton>Forward</guibutton> to proceed with installation."
-msgstr ""
-"Fare clic su <guibutton>Avanti</guibutton> per procedere con l'installazione."
-
-#: C/f-spot.xml:1005(title)
-msgid "Enabling and disabling extensions"
-msgstr "Abilitare e disabilitare le estensioni"
-
-#: C/f-spot.xml:1007(para)
-msgid ""
-"You might want to temporarily enable or disable a particular extension "
-"package, for example, if the extension is not stable enough to handle a "
-"large amount of photos or if menus get crowded with extensions."
-msgstr ""
-"È possibile abilitare o disabilitare temporaneamente un pacchetto di "
-"estensione, ad esempio se non è abbastanza stabile per gestire un gran "
-"numero di fotografie oppure se i menù risultano affollati di estensioni."
-
-#: C/f-spot.xml:1012(para)
-msgid ""
-"In the <guilabel>Manage Extensions</guilabel> dialog select the extension "
-"package and click <guibutton>Enable</guibutton> or <guibutton>Disable</"
-"guibutton>. You will have to restart F-Spot to let changes apply."
-msgstr ""
-"Nella finestra di dialogo <guilabel>Gestione Estensioni</guilabel> "
-"selezionare il pacchetto di estensione e fare clic su <guibutton>Abilita</"
-"guibutton> o <guibutton>Disabilita</guibutton>. I cambiamenti saranno "
-"attivati alla successiva ripartenza di F-Spot."
-
-#: C/f-spot.xml:1020(title)
-msgid "Removing extensions"
-msgstr "Rimuovere le estensioni"
-
-#: C/f-spot.xml:1022(para)
-msgid ""
-"If you don't need an extension you can remove it from the system completely. "
-"In the <guilabel>Manage Extensions</guilabel> dialog select the extension "
-"package you want to remove and click <guibutton>Delete</guibutton>."
-msgstr ""
-"È possibile rimuovere completamente un'estensione divenuta superflua. Per "
-"far questo occorre selezionare l'estensione desiderata nella finestra "
-"<guilabel>Gestione Estensioni</guilabel> e fare clic su <guibutton>Elimina</"
-"guibutton>."
-
-#: C/f-spot.xml:1030(title)
-msgid "Reading summary of extensions"
-msgstr "Leggere le informazioni sull'estensione"
-
-#: C/f-spot.xml:1032(para)
-msgid ""
-"Every extension package contains metadata that provides the following "
-"information about the extension:"
-msgstr ""
-"Ogni pacchetto di estensione contiene alcuni metadati che forniscono le "
-"seguenti informazioni:"
-
-#: C/f-spot.xml:1038(para)
-msgid "Description, which usually covers puprose of the extension"
-msgstr "Descrizione, che riassume le finalità dell'estensione"
-
-#: C/f-spot.xml:1043(para)
-msgid "Version"
-msgstr "Versione"
-
-#: C/f-spot.xml:1048(para)
-msgid "Author"
-msgstr "Autore"
-
-#: C/f-spot.xml:1053(para)
-msgid "Dependencies"
-msgstr "Dipendenze"
-
-#: C/f-spot.xml:1059(para)
-msgid ""
-"In the <guilabel>Manage Extensions</guilabel> dialog select the extension "
-"package you want to read summary of and click <guibutton>Information</"
-"guibutton>."
-msgstr ""
-"Selezionare il pacchetto di estensione di cui si desidera leggere le "
-"informazioni nella finestra di dialogo <guilabel>Gestione Estensioni</"
-"guilabel> e fare clic su <guibutton>Informazioni</guilabel>."
-
-#: C/f-spot.xml:1067(title)
-msgid "Developing extensions"
-msgstr "Sviluppare estensioni"
-
-#: C/f-spot.xml:1069(para)
-msgid ""
-"<ulink url=\"http://f-spot.org/Extend_F-Spot\">Extend F-Spot</ulink> "
-"document gives instructions on developing your own extensions for F-Spot."
-msgstr ""
-"È possibile trovare informazioni su come sviluppare estensioni per F-Spot al "
-"seguente collegamento: <ulink url=\"http://f-spot.org/Extend_F-Spot\">Extend "
-"F-Spot</ulink>."
-
-#: C/f-spot.xml:1077(title)
-msgid "Shortcuts"
-msgstr "Scorciatoie"
-
-#: C/f-spot.xml:1080(title)
-msgid "Global Shortcuts"
-msgstr "Scorciatoie globali"
-
-#: C/f-spot.xml:1085(entry) C/f-spot.xml:1194(entry) C/f-spot.xml:1290(entry)
-#: C/f-spot.xml:1342(entry)
-msgid "Key"
-msgstr "Tasto"
-
-#: C/f-spot.xml:1088(entry) C/f-spot.xml:1197(entry) C/f-spot.xml:1293(entry)
-#: C/f-spot.xml:1345(entry)
-msgid "Action"
-msgstr "Azione"
-
-#: C/f-spot.xml:1096(keycap)
-msgid "["
-msgstr "["
-
-#: C/f-spot.xml:1098(entry)
-msgid "Rotate the selected photos to the left"
-msgstr "Ruota le foto selezionate a sinistra"
-
-#: C/f-spot.xml:1104(keycap)
-msgid "]"
-msgstr "]"
-
-#: C/f-spot.xml:1106(entry)
-msgid "Rotate the selected photos to the right"
-msgstr "Ruota le foto selezionate a destra"
-
-#: C/f-spot.xml:1112(keycap) C/f-spot.xml:1120(keycap)
-msgid "Del"
-msgstr "Canc"
-
-#: C/f-spot.xml:1114(entry)
-msgid "Remove selected photos from F-Spot's catalogue"
-msgstr "Rimuove dal catalogo di F-Spot le foto selezionate"
-
-#: C/f-spot.xml:1120(keycap) C/f-spot.xml:1213(keycap)
-#: C/f-spot.xml:1247(keycap) C/f-spot.xml:1256(keycap)
-#: C/f-spot.xml:1273(keycap) C/f-spot.xml:1427(keycap)
-msgid "Shift"
-msgstr "Maiusc"
-
-#: C/f-spot.xml:1122(entry)
-msgid "Delete selected photos permanently from the drive"
-msgstr "Elimina definitivamente dal disco le foto selezionate"
-
-#: C/f-spot.xml:1129(keycap)
-msgid "t"
-msgstr "t"
-
-#: C/f-spot.xml:1131(entry)
-msgid "View or edit tags for selected photos"
-msgstr "Visualizza o modifica le etichette per le foto selezionate"
-
-#: C/f-spot.xml:1137(keycap)
-msgid "F11"
-msgstr "F11"
-
-#: C/f-spot.xml:1139(entry) C/f-spot.xml:1380(entry)
-msgid "Full screen view"
-msgstr "Visualizzazione a schermo intero"
-
-#: C/f-spot.xml:1145(keycap) C/f-spot.xml:1153(keycap)
-#: C/f-spot.xml:1161(keycap) C/f-spot.xml:1169(keycap)
-#: C/f-spot.xml:1205(keycap) C/f-spot.xml:1213(keycap)
-#: C/f-spot.xml:1231(keycap) C/f-spot.xml:1256(keycap)
-#: C/f-spot.xml:1309(keycap)
-msgid "Ctrl"
-msgstr "Ctrl"
-
-#: C/f-spot.xml:1145(keycap)
-msgid "I"
-msgstr "I"
-
-#: C/f-spot.xml:1147(entry)
-msgid "Displays information about the photo"
-msgstr "Visualizza le informazioni relative alla foto"
-
-#: C/f-spot.xml:1153(keycap)
-msgid "Equals"
-msgstr "Uguale"
-
-#: C/f-spot.xml:1155(entry)
-msgid "Zoom-in"
-msgstr "Aumenta l'ingrandimento"
-
-#: C/f-spot.xml:1161(keycap)
-msgid "Minus"
-msgstr "Meno"
-
-#: C/f-spot.xml:1163(entry)
-msgid "Zoom-out"
-msgstr "Diminuisce l'ingrandimento"
-
-#: C/f-spot.xml:1169(keycap) C/f-spot.xml:1361(keycap)
-msgid "N"
-msgstr "N"
-
-#: C/f-spot.xml:1171(entry)
-msgid "Import photos"
-msgstr "Importa fotografie"
-
-#: C/f-spot.xml:1177(keycap)
-msgid "Alt"
-msgstr "Alt"
-
-#: C/f-spot.xml:1177(keycap)
-msgid "0-5"
-msgstr "0-5"
-
-#: C/f-spot.xml:1179(entry)
-msgid "Alt plus a number from 0 to 5 rate the selected picture(s)"
-msgstr ""
-"«Alt» più un numero da 0 a 5 assegna il voto alle fotografie selezionate"
-
-#: C/f-spot.xml:1189(title)
-msgid "Browse Mode Shortcuts"
-msgstr "Scorciatoie di esplorazione"
-
-#: C/f-spot.xml:1205(keycap) C/f-spot.xml:1214(keycap)
-msgid "A"
-msgstr "A"
-
-#: C/f-spot.xml:1207(entry)
-msgid "Select all"
-msgstr "Seleziona tutto"
-
-#: C/f-spot.xml:1216(entry)
-msgid "Unselect all"
-msgstr "Deseleziona tutto"
-
-#: C/f-spot.xml:1222(keycap) C/f-spot.xml:1369(keycap)
-msgid "H"
-msgstr "H"
-
-#: C/f-spot.xml:1222(keycap) C/f-spot.xml:1369(keycap)
-msgid "J"
-msgstr "J"
-
-#: C/f-spot.xml:1223(keycap) C/f-spot.xml:1370(keycap)
-msgid "K"
-msgstr "K"
-
-#: C/f-spot.xml:1223(keycap) C/f-spot.xml:1370(keycap)
-msgid "L"
-msgstr "L"
-
-#: C/f-spot.xml:1221(entry) C/f-spot.xml:1368(entry)
-msgid ""
-"Arrow keys or <placeholder-1/>, <placeholder-2/>, <placeholder-3/>, "
-"<placeholder-4/>"
-msgstr ""
-"Tasti freccia (su, giù, sinistra, destra) o tasti <placeholder-1/>, "
-"<placeholder-2/>, <placeholder-3/>, <placeholder-4/>"
-
-#: C/f-spot.xml:1225(entry)
-msgid "Move focus"
-msgstr "Sposta il focus"
-
-#: C/f-spot.xml:1230(entry)
-msgid "<placeholder-1/>-Arrow key"
-msgstr "<placeholder-1/>-Tasto freccia"
-
-#: C/f-spot.xml:1233(entry)
-msgid "Move the focus without changing the selection"
-msgstr "Sposta il focus senza cambiare la selezione"
-
-#: C/f-spot.xml:1239(keycap) C/f-spot.xml:1361(keycap)
-msgid "Spacebar"
-msgstr "Barra spaziatrice"
-
-#: C/f-spot.xml:1241(entry)
-msgid "Select or unselect the focused photo"
-msgstr "Seleziona o deseleziona la foto su cui si trova il focus"
-
-#: C/f-spot.xml:1248(keycap)
-msgid "Arrow key"
-msgstr "Tasto freccia"
-
-#: C/f-spot.xml:1250(entry)
-msgid "Change the photo selection"
-msgstr "Cambia la selezione della foto"
-
-#: C/f-spot.xml:1257(keycap)
-msgid "Left arrow or Right arrow"
-msgstr "Freccia sinistra o freccia destra"
-
-#: C/f-spot.xml:1259(entry)
-msgid ""
-"Add/Remove all photos in the row, in the direction pressed, to the selection"
-msgstr ""
-"Aggiunge o rimuove alla selezione tutte le foto della riga, nella direzione "
-"premuta"
-
-#: C/f-spot.xml:1265(keycap) C/f-spot.xml:1273(keycap)
-#: C/f-spot.xml:1418(keycap)
-msgid "V"
-msgstr "V"
-
-#: C/f-spot.xml:1267(entry)
-msgid "Pops up a larger preview of the picture pointed by the mouse"
-msgstr "Visualizza una vista ingrandita dell'immagine puntata dal mouse"
-
-#: C/f-spot.xml:1275(entry)
-msgid ""
-"Pops up a larger preview and a color histogram of the picture pointed by the "
-"mouse"
-msgstr ""
-"Visualizza mediante pop-up una vista ingrandita e l'istogramma del colori "
-"dell'immagine puntata dal mouse"
-
-#: C/f-spot.xml:1285(title)
-msgid "Tag Shortcuts"
-msgstr "Scorciatoie per le etichette"
-
-#: C/f-spot.xml:1301(keycap)
-msgid "F2"
-msgstr "F2"
-
-#: C/f-spot.xml:1303(entry)
-msgid "Rename selected tag"
-msgstr "Rinomina l'etichetta selezionata"
-
-#: C/f-spot.xml:1309(keycap)
-msgid "T"
-msgstr "T"
-
-#: C/f-spot.xml:1311(entry)
-msgid "Add tags to selected photos"
-msgstr "Aggiunge etichette alle foto selezionate"
-
-#: C/f-spot.xml:1316(entry) C/f-spot.xml:1324(entry)
-msgid "n/a"
-msgstr "non disponibile"
-
-#: C/f-spot.xml:1319(entry)
-msgid "Drag and drop tags to move them"
-msgstr "Trascina le etichette per spostarle"
-
-#: C/f-spot.xml:1327(entry)
-msgid "Type a tag's name to jump to it (only works if tag is shown/expanded)"
-msgstr ""
-"Digita un nome di etichetta per raggiungerla (funziona solo se l'etichetta è "
-"visibile/espansa)"
-
-#: C/f-spot.xml:1337(title)
-msgid "Edit Mode Shortcuts"
-msgstr "Scorciatoie in modalità Modifica"
-
-#: C/f-spot.xml:1353(keycap)
-msgid "Page Up"
-msgstr "Pagina su"
-
-#: C/f-spot.xml:1353(keycap)
-msgid "Backspace"
-msgstr "Backspace"
-
-#: C/f-spot.xml:1353(keycap)
-msgid "B"
-msgstr "B"
-
-#: C/f-spot.xml:1352(entry) C/f-spot.xml:1360(entry)
-msgid "<placeholder-1/>, <placeholder-2/>, <placeholder-3/>"
-msgstr "<placeholder-1/>, <placeholder-2/>, <placeholder-3/>"
-
-#: C/f-spot.xml:1355(entry)
-msgid "Go to Previous Photo"
-msgstr "Va alla foto precedente"
-
-#: C/f-spot.xml:1361(keycap)
-msgid "Page Down"
-msgstr "Pagina giù"
-
-#: C/f-spot.xml:1363(entry)
-msgid "Go to Next Photo"
-msgstr "Va alla foto successiva"
-
-#: C/f-spot.xml:1372(entry)
-msgid "Go to Previous/Next photo or move around a zoomed photo"
-msgstr ""
-"Va alla foto precedente o successiva oppure si muove su una foto ingrandita"
-
-#: C/f-spot.xml:1378(keycap)
-msgid "f"
-msgstr "f"
-
-#: C/f-spot.xml:1386(keycap)
-msgid "0"
-msgstr "0"
-
-#: C/f-spot.xml:1388(entry)
-msgid "Fit the image to the screen"
-msgstr "Adatta l'immagine allo schermo"
-
-#: C/f-spot.xml:1394(keycap)
-msgid "1"
-msgstr "1"
-
-#: C/f-spot.xml:1396(entry)
-msgid "Zoom Factor to 1.0 (1 screen pixel per image pixel)"
-msgstr ""
-"Fattore di zoom a 1.0 (1 pixel dello schermo per ogni pixel dell'immagine)"
-
-#: C/f-spot.xml:1402(keycap)
-msgid "2"
-msgstr "2"
-
-#: C/f-spot.xml:1404(entry)
-msgid "Zoom Factor to 2.0 (4 screen pixels per image pixel)"
-msgstr ""
-"Fattore di zoom a 2.0 (4 pixel dello schermo per ogni pixel dell'immagine)"
-
-#: C/f-spot.xml:1410(keycap)
-msgid "Escape"
-msgstr "Esc"
-
-#: C/f-spot.xml:1412(entry)
-msgid "Returns to Browser mode"
-msgstr "Ritorna al modo esplorazione"
-
-#: C/f-spot.xml:1422(keycap)
-msgid "v"
-msgstr "v"
-
-#: C/f-spot.xml:1420(entry)
-msgid ""
-"Examine photo with magnifying glass (Loupe). Doubleclick on the Loupe, or "
-"type <placeholder-1/> again to close it."
-msgstr ""
-"Esamina le foto con la lente di ingrandimento (Loupe). Fare doppio clic "
-"sulla lente di ingrandimento o digitare <placeholder-1/> nuovamente per "
-"chiudere."
-
-#: C/f-spot.xml:1426(entry)
-msgid "<placeholder-1/>-Mousewheel"
-msgstr "<placeholder-1/>-Rotellina del mouse"
-
-#: C/f-spot.xml:1429(entry)
-msgid "Faster filmstrip scrolling"
-msgstr "Scorrimento veloce del rullino"
-
-#: C/f-spot.xml:1435(keycap)
-msgid "i"
-msgstr "i"
-
-#: C/f-spot.xml:1437(entry)
-msgid "Toggle infobox visibility ''(only when in full screen)''"
-msgstr "Commuta la visibilità dell'infobox (solo in modalità a schermo intero)"
-
-#. Put one translator per line, in the form of NAME <EMAIL>, YEAR1, YEAR2.
-#: C/f-spot.xml:0(None)
-msgid "translator-credits"
-msgstr "Lorenzo Travaglio <ltrav02 at yahoo.it>, 2007, 2009"
-
-#~ msgid "2007"
-#~ msgstr "2007"
-
-#~ msgid "k"
-#~ msgstr "k"
-
-#~ msgid "j"
-#~ msgstr "j"
-
-#~ msgid "h"
-#~ msgstr "h"
-
-#~ msgid "l"
-#~ msgstr "l"
-
-#~ msgid ""
-#~ "To remove redeye from a photo, you need to select each individual eye. "
-#~ "You may want to zoom in on the image to accurately select the eyes in the "
-#~ "photo."
-#~ msgstr ""
-#~ "La rimozione dell'effetto occhi rossi deve essere effettuata su ogni "
-#~ "occhio separatamente. È possibile ingrandire l'immagine a piacere per "
-#~ "selezionare più accuratamente l'area sulla quale occorre intervenire."
-
-#~ msgid "Examine photo with magnifying glass (Loupe)"
-#~ msgstr "Esamina la foto con la lente d'ingrandimento (Loupe)"
diff --git a/docs/oc/f-spot.xml b/docs/oc/f-spot.xml
deleted file mode 100644
index 6315ad7..0000000
--- a/docs/oc/f-spot.xml
+++ /dev/null
@@ -1,1442 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!DOCTYPE book PUBLIC "-//OASIS//DTD DocBook XML 4.1.2//EN" "http://www.oasis-open.org/docbook/xml/4.1.2/docbookx.dtd">
-<book id="f-spot" lang="oc">
- <bookinfo>
- <title>Manual de F-Spot</title>
- <abstract role="description">
- <para>This is the user manual for F-Spot, a GNOME personal photo manager.</para>
- </abstract>
- <subtitle>This is the user manual for F-Spot, a GNOME personal photo manager.</subtitle>
- <copyright>
- <year>2007-2009</year>
- <holder>Aaron Bockover, Gabriel Burt, Miguel de Icaza, Bengt Thuree</holder>
- </copyright>
- <publisher>
- <publishername>Projècte de documentacion de GNOME</publishername>
- </publisher>
- <authorgroup>
- <author>
- <firstname>Miguel</firstname>
- <surname>de Icaza</surname>
- </author>
- <author>
- <firstname>Aaron</firstname>
- <surname>Bockover</surname>
- </author>
- <author>
- <firstname>Bengt</firstname>
- <surname>Thuree</surname>
- </author>
- <author>
- <firstname>Gabriel</firstname>
- <surname>Burt</surname>
- </author>
- <author>
- <firstname>Alexandre</firstname>
- <surname>Prokoudine</surname>
- </author>
- <author role="maintainer">
- <firstname>Stephane</firstname>
- <surname>Delcroix</surname>
- </author>
- </authorgroup>
- <!--<include href="legal.xml" xmlns="http://www.w3.org/2001/XInclude"/>-->
- <revhistory>
- <revision>
- <revnumber>0.5</revnumber>
- <date>2008-09-25</date>
- </revision>
- <revision>
- <revnumber>0.4</revnumber>
- <date>2008-09-12</date>
- </revision>
- <revision>
- <revnumber>0.3</revnumber>
- <date>26/07/2007</date>
- </revision>
- </revhistory>
- </bookinfo>
-
- <chapter id="organizing">
- <title>Organizar las vòstras fotografias</title>
-
- <sect1 id="import">
- <title>Importar</title>
-
- <para>
- You can import photos from your hard drive or your camera. When you
- import your photos into F-Spot from your camera, it will always make a
- copy of them, leaving you free to clear your camera's memory. By default,
- F-Spot will make a copy of photos imported from your hard drive. Uncheck
- the <guilabel>Copy</guilabel> option on the import dialog or hold
- <keycap>Shift</keycap> when dragging photos into F-Spot if you do not
- wish to copy them from your hard drive.
- </para>
-
- <para>
- By default, F-Spot copies your photos to the
- <filename class="directory">~/Photos</filename> folder. You can change
- the folder F-Spot uses in <guilabel>Preferences</guilabel> dialog
- (<menuchoice><guimenu>Edit</guimenu><guimenuitem>Preferences</guimenuitem>
- </menuchoice>). You can also disable physical copying of images to that
- directory and make F-Spot only reference to existing files. For that you
- need to disable checkbox <guilabel>Copy files to the Photos folder</guilabel>.
- </para>
- <para>
- If there is a tiny chance that some of your photos are already imported
- from the chosen source, you can use <guilabel>Detect duplicates</guilabel>
- option. In this case F-Spot will try to find out if exactly this image is
- already present in the database and thus new copy of it should not be
- imported.
- </para>
- <para>
- If all the photos you are importing at one time are from a particular event,
- or have some other characteristic in common, you can create a tag for them
- so you can later find them with ease. To do this, follow the instructions from
- <xref linkend="tag"/> to create a new tag, then when you are importing
- them, check the button for <guilabel>Attach Tag</guilabel> and choose the
- tag you created.
- </para>
-
- <tip>
- <para>
- F-Spot uses a database stored at
- <filename>~/.config/f-spot/photos.db</filename>. Note, to access it, use
- the sqlite3 command. You can also manually specify path to a database by
- running F-Spot with <option>-b</option> option.
- </para>
- </tip>
-
- <para>
- After an import, F-Spot will display the pictures of the latest import
- roll only. Read <xref linkend="enjoying-search"/> to learn how to deal
- with import rolls.
- </para>
- <para>
- You can also import directly from Mozilla
- <ulink url="http://www.mozilla.com/en-US/firefox/">Firefox</ulink> and
- <ulink url="http://www.mozilla.com/en-US/thunderbird/">Thunderbird</ulink> using
- <ulink url="https://addons.mozilla.org/en-US/firefox/addon/7091">Firefox</ulink>
- and <ulink url="https://addons.mozilla.org/en-US/thunderbird/addon/7011">Thunderbird</ulink>
- F-Spot importer extensions written by
- <ulink url="http://personalpages.tds.net/~cdovel/">Pizzach</ulink>.
- </para>
- </sect1>
-
- <sect1 id="edit">
- <title>Edicion</title>
-
- <para>
- If you double click or press enter on an image, you enter Edit mode, where
- you can remove red-eye, crop, and adjust brightness and colors.
- </para>
-
- <sect2 id="edit-versions">
- <title>Versions</title>
-
- <para>
- When you edit your photos, a new copy (called a version) is created,
- so your original is never altered. After your first edit to a photo, subsequent
- edits will modify the same version. If you want to create multiple versions
- of your photo, perhaps with different cropping or coloring, you can do so
- via the <menuchoice><guimenu>File</guimenu>
- <guimenuitem>Create new version</guimenuitem></menuchoice> option.
- </para>
- </sect2>
-
- <sect2 id="edit-crop">
- <title>Rosegar</title>
-
- <para>
- Cropping an image is a great way to improve the quality of a photograph by
- change how it is framed. You crop a photo by selecting the part of the photo
- you want to keep. If you want your photo to be the exact dimensions necessary
- for a certain print size, you can constrain the kind of selection F-Spot will allow
- you to draw by choosing the appropriate size from the constraint drop down.
- See the <xref linkend="edit-remove-red-eye"/> below for details on making
- a selection on your photo.
- </para>
- <figure>
- <title>Crop tool</title>
- <mediaobject>
- <imageobject>
- <imagedata fileref="figures/f-spot-crop.png"/>
- </imageobject>
- </mediaobject>
- </figure>
- <para>
- Once you have made your crop selection, you must click the crop button beneath
- the image to finalize the crop. If you are working with the original photo, cropping
- creates a new version your photo.
- </para>
- </sect2>
-
- <sect2 id="edit-straighten">
- <title>Straighten</title>
-
- <para>
- Straighten effect is a tool to level a photo, quite helpful for landscapes
- taken without a tripod, when (imaginary) line of horizon is not at 0°.
- This tool rotates an image by a specified angle and automagically crops the
- resulted image, so that you always see a perfect rectangle.
- </para>
- <figure>
- <title>Straighten tool</title>
- <mediaobject>
- <imageobject>
- <imagedata fileref="figures/f-spot-straighten.png"/>
- </imageobject>
- </mediaobject>
- </figure>
- </sect2>
-
- <sect2 id="edit-adjust-colors">
- <title>Adjust Colors</title>
-
- <para>
- To adjust the brightness, contrast, and colors of a photo, first click
- the <guibutton>Adjust the photo colors</guibutton> icon to open the
- adjustment dialog. Change then some settings and save them with
- <guibutton>OK</guibutton>.
- </para>
- <figure>
- <title>Adjust Colors tool</title>
- <mediaobject>
- <imageobject>
- <imagedata fileref="figures/f-spot-adjust-colors.png"/>
- </imageobject>
- </mediaobject>
- </figure>
- </sect2>
-
- <sect2 id="edit-auto-color">
- <title>AutoColor</title>
-
- <para>
- This effect automatically adjusts color levels to make a pretty balanced
- picture color-wise. It serves best for pictures taken with automatical
- white balance, when camera didn't manage to do the job well.
- </para>
- <figure>
- <title>AutoColor</title>
- <mediaobject>
- <imageobject>
- <imagedata fileref="figures/f-spot-autocolor.png"/>
- </imageobject>
- </mediaobject>
- </figure>
- </sect2>
-
- <sect2 id="edit-desaturate">
- <title>Desaturate</title>
-
- <para>
- To make a colorful photo a black and white one, open a photo of choice
- and press <guibutton>Desaturate</guibutton> button.
- </para>
- <figure>
- <title>Desaturation tool</title>
- <mediaobject>
- <imageobject>
- <imagedata fileref="figures/f-spot-desaturate.png"/>
- </imageobject>
- </mediaobject>
- </figure>
- </sect2>
-
- <sect2 id="edit-sepia">
- <title>Sepia</title>
-
- <para>
- To make a colorful photo look like an old-style picture in sepia tones,
- open a photo of choice and press <guibutton>Sepia</guibutton> button.
- </para>
- <figure>
- <title>Desaturation tool</title>
- <mediaobject>
- <imageobject>
- <imagedata fileref="figures/f-spot-sepia.png"/>
- </imageobject>
- </mediaobject>
- </figure>
- </sect2>
-
- <sect2 id="edit-remove-red-eye">
- <title>Remove Red-Eye</title>
-
- <para>
- To remove redeye from a photo, you need to select a zone containing
- the eyes. You may want to zoom in on the image to accurately select
- the eyes in the photo. You should be able to correct both eyes on the
- same person in one shot, or even the eyes from multiple people at once.
- If this doesn't work for you, or the selected zone contains some vivid
- red parts (lips, ...) you'll probably have to correct one red eye at a time.
- </para>
- <para>
- To make your selection, click one corner of the rectangle that will be your
- selection, and drag your mouse to the diagonal corner and release it. You
- can resize your selection by dragging its edges, and you can move it by
- clicking in the middle of it and dragging it to where you want it.
- </para>
- <para>
- Once you have selected a zone, you can remove the red from it by
- clicking the red-eye button beneath the photo.
- </para>
- <figure>
- <title>Red-Eye tool</title>
- <mediaobject>
- <imageobject>
- <imagedata fileref="figures/f-spot-red-eye.png"/>
- </imageobject>
- </mediaobject>
- </figure>
- <tip>
- <para>
- You can change the threshold for redeyes detection by changing
- the gconf key
- <filename class="directory">/apps/f-spot/edit/redeye_threshold</filename>.
- </para>
- </tip>
- </sect2>
-
- <sect2 id="edit-soft-focus">
- <title>Soft Focus</title>
-
- <para>
- In photography sharpening one region of a picture, while blurring
- all the rest, is a way to make an emphasis and grab attention.
- It is achieved by using a lens that allows shooting with a short
- distance in front of and beyond the subject that appears to be in
- focus. Soft focus effect is a way to emulate such a lens.
- </para>
- <figure>
- <title>Soft Focus tool</title>
- <mediaobject>
- <imageobject>
- <imagedata fileref="figures/f-spot-soft-focus.png"/>
- </imageobject>
- </mediaobject>
- </figure>
- <para>
- Click to choose central point of the area you want to be in focus
- and adjust amount of blurring, then click <guibutton>OK</guibutton>.
- </para>
- </sect2>
-
- <sect2 id="edit-sharpen">
- <title>Sharpen</title>
-
- <para>
- Out-of-focus photographs and most digitized images often need a
- sharpness correction. The Unsharp Mask effect sharpens edges of
- the elements without increasing noise or blemish. To sharpen a
- photo choose <menuchoice><guimenu>Edit</guimenu>
- <guimenuitem>Sharpen...</guimenuitem></menuchoice> and specify the
- following values:
- </para>
-
- <itemizedlist>
- <listitem>
- <para>
- <parameter class="option">Amount</parameter> — strength of sharpening.
- </para>
- </listitem>
- <listitem>
- <para>
- <parameter class="option">Radius</parameter> — how many pixels on either
- side of an edge will be affected by sharpening. High resolution images
- allow higher radius.
- </para>
- </listitem>
- <listitem>
- <para>
- <parameter class="option">Threshold</parameter> — the minimum difference
- in pixel values that indicates an edge where sharpen must be applied.
- This helps avoiding creation of blemishes in face, sky or water surface.
- </para>
- </listitem>
- </itemizedlist>
- </sect2>
-
- <sect2 id="edit-describe">
- <title>Describe</title>
-
- <para>
- You can also enter a description of the image by clicking on the text entry box
- below the image and typing.
- </para>
- <para>
- Once you have made your crop selection, you must click the crop button beneath
- the image to finalize the crop. If you are working with the original photo, cropping
- creates a new version your photo.
- </para>
- </sect2>
-
- <sect2 id="edit-adjust-time">
- <title>Adjust Time</title>
-
- <para>
- In both 'browse' or 'edit' modes, you can adjust the time of one
- or multiple pictures (<menuchoice><guimenu>Edit</guimenu>
- <guimenuitem>Adjust Time</guimenuitem></menuchoice>). Adjusting
- the time of multiple pictures at once helps you shift all an import
- roll if, e.g. the time on your camera is badly set or if you forgot
- to change it according to DST.
- </para>
- </sect2>
- </sect1>
-
- <sect1 id="tag">
- <title>Tag</title>
- <para>
- F-Spot enables you to organize and enjoy your photos by associating them
- with various user-customizable tags. A tag is a merely a label. F-Spot comes
- with default tags to get you started; you are free to change them and
- add new ones. For example, if you want to create a tag for specific event, you
- can create a new tag named after that event under the Events tag.
- </para>
- <para>
- There are many ways to tag photos:
- </para>
- <itemizedlist>
- <listitem>
- <para>
- drag and drop the photo(s) onto the tag
- </para>
- </listitem>
- <listitem>
- <para>
- drag and drop the tag onto the photo(s)
- </para>
- </listitem>
- <listitem>
- <para>
- via the photo's right-click menu
- </para>
- </listitem>
- <listitem>
- <para>
- via the Tags and Edit menus
- </para>
- </listitem>
- <listitem>
- <para>
- by typing them in. Press <keycap>t</keycap> to pop up the tag
- entry bar. Here you can enter the tags, separated by commas.
- </para>
- <para>
- You can also use auto-completion in this entry bar: After
- entering the beginning of a tag name, press
- <keycap>Tab</keycap> to see the first possible completion. You can
- cycle between other possible completions by pressing
- <keycap>Tab</keycap> again, and backwards with
- <keycombo action="simul"><keycap>Shift</keycap><keycap>Tab</keycap></keycombo>.
- To confirm the suggested completion and enter a new tag, press
- <keycap>,</keycap>. By pressing <keycap>Enter</keycap> you
- leave the tag entry bar, possibly confirming the current
- completion. To abort the auto completion, just keep on typing.
- </para>
- </listitem>
- </itemizedlist>
- <para>
- The first photo you associate with a tag will be used for that tag's icon.
- You can always edit a tag's name, parent tag, and icon by right clicking
- on it and choosing <guilabel>Edit tag</guilabel>.
- </para>
- <para>
- You can change a tag's parent by dragging and dropping it where you like.
- Also, you can edit the name of a tag by selecting it and pressing
- <keycap>F2</keycap>. Lastly, if you have the tag tree widget focused
- (e.g. you just clicked on a tag), you can start typing the name of a tag, and
- all the expanded tags in the list will be searched and you'll jump to any
- matching ones.
- </para>
-
- <para>
- You can also change size of tag icons in the sidebar or even make tag
- icons invisible by selecting preferred option from <menuchoice>
- <guimenu>View</guimenu><guimenuitem>Tag Icons</guimenuitem></menuchoice>
- menu.
- </para>
-
- <tip>
- <para>
- F-Spot can write tags as metadata fields into JPEG files. Tags for
- various RAW files, PNG, TIFF, and others are written to F-Spot's
- database. You will have to re-tag these files if you re-import your
- collection.
- </para>
- </tip>
- </sect1>
- </chapter>
-
- <chapter id="enjoying">
- <title>Enjoying your photos</title>
- <sect1 id="enjoying-browse">
- <title>Navigar</title>
- <para>
- You can use the slider widget to browse your photos by month or by
- directory. To change this setting, go to <menuchoice>
- <guimenu>View</guimenu><guimenuitem>Arranged By</guimenuitem>
- </menuchoice>.
- </para>
- </sect1>
- <sect1 id="enjoying-search">
- <title>Recercar</title>
-
- <para>
- F-Spot uses search filters to help you better define search criteria.
- </para>
-
- <sect2 id="enjoying-search-tags">
- <title>Tags</title>
-
- <para>
- You can start a search by double clicking or activating a tag from
- the tag list. Alternatively, you can show the find bar with <menuchoice>
- <guimenu>Find</guimenu><guimenuitem>Show Find Bar</guimenuitem></menuchoice>.
- With the find bar shown, you can drag tags from the tag view to the find bar.
- </para>
- <para>
- To find photos that are tagged with both of two tags, activate the first in
- the tag view or drag it onto the find bar, then drag the second tag and drop
- it on top of the first. You can also right click on the second tag in the tag
- view, or use the <guimenu>Find</guimenu> menu, and choose <guimenuitem>Find
- With...</guimenuitem> and select the first tag (or group of tags).
- </para>
- <para>
- You can drag a tag icon around on the find bar to change from finding it and
- another tag to finding it or another tag.
- </para>
- <para>
- You can search for photos that do not have a particular tag by double-clicking
- on a tag in the find bar. Alternatively, you can right-click a tag in the find
- bar and select <guimenuitem>Exclude</guimenuitem>.
- </para>
- <para>
- To remove a tag from the search, drag it away from the find bar, or right click
- and select <guimenuitem>Remove</guimenuitem>.
- </para>
- <para>
- By default, photos tagged <emphasis>Hidden</emphasis> will not be shown. You must
- explicitly include the <emphasis>Hidden</emphasis> tag in your search to show
- such photos.
- </para>
- </sect2>
-
- <sect2 id="enjoying-search-import-rolls">
- <title>Import Rolls</title>
- <para>
- F-Spot remembers what pictures were imported every now and then. Use
- <menuchoice><guimenu>Find</guimenu><guisubmenu>Import Roll</guisubmenu>
- <guimenuitem>Last import roll</guimenuitem></menuchoice> to limit search
- to last importing session or use <menuchoice><guimenu>Find</guimenu>
- <guisubmenu>Import Roll</guisubmenu><guimenuitem>Select Import Rolls...</guimenuitem>
- </menuchoice> to make a finer selection of imported photos:
- </para>
- <itemizedlist>
- <listitem>
- <para>
- <parameter class="option">At</parameter> — to select photos from a particular importing session
- </para>
- </listitem>
- <listitem>
- <para>
- <parameter class="option">After</parameter> — to select all photos imported begining with a particular importing session
- </para>
- </listitem>
- <listitem>
- <para>
- <parameter class="option">Between</parameter> — to select all photos imported between two particular importing sessions
- </para>
- </listitem>
- </itemizedlist>
- <para>
- Every time you change settings of the filter, the amount of selected photos
- will appear in the bottom part of the dialog.
- </para>
- <para>
- When you apply Import Roll filter, in the Find bar you will see
- <guilabel>Find: Import Roll</guilabel>. Now you can add some other
- filter to finetune your selection.
- </para>
- <para>
- If you don't need the Import Roll filter anymore, choose <menuchoice>
- <guimenu>Find</guimenu><guisubmenu>Import Roll</guisubmenu>
- <guimenuitem>Clear roll filter</guimenuitem></menuchoice> to remove
- Import Roll from search criteria. You can also click the close button
- (<guibutton>X</guibutton>) of the search bar to discard all the current
- search options.
- </para>
- <tip>
- <para>
- The number of displayed rolls in the dialog is defined by the gconf key
- <filename class="directory">/apps/f-spot/import/gui_roll_history</filename>.
- Default value is 10.
- </para>
- </tip>
- </sect2>
-
- <sect2 id="enjoying-search-type-to-find">
- <title>Type-to-find</title>
- <para>
- There is also a type-to-find entry. Press <keycap>/</keycap> to open it. It cannot
- be used at the same time as the find bar. You can type queries such as "TagA and
- (TagB or (TagC and TagD))". At any point, if F-Spot recognizes what you've typed as
- a valid query, it will update your search. The <emphasis>not</emphasis> operator
- is not yet supported.
- </para>
-
- <para>
- This function will also search for the typed text into photos comments and filename.
- </para>
- </sect2>
- </sect1>
-
- <sect1 id="enjoying-fullscreen-mode-and-slideshows">
- <title>Fullscreen Mode and Slideshows</title>
- <para>
- For fewer distractions and larger display, you can view your photos in full
- screen mode. You control when to show the next photo or to return to the
- previous. Enter fullscreen mode by pressing <keycap>F11</keycap> at
- any time or by pressing the button in the toolbar.
- </para>
- <figure>
- <title>FullScreen</title>
- <mediaobject>
- <imageobject>
- <imagedata fileref="figures/f-spot-fullscreen.png"/>
- </imageobject>
- </mediaobject>
- </figure>
- <para>
- In slideshow mode, you can sit back and view your photos as they are
- presented to you. You can start a slideshow by pressing the button on the
- toolbar.
- </para>
- <figure>
- <title>SlideShow</title>
- <mediaobject>
- <imageobject>
- <imagedata fileref="figures/f-spot-slideshow.png"/>
- </imageobject>
- </mediaobject>
- </figure>
- </sect1>
- </chapter>
-
- <chapter id="sharing">
- <title>Sharing your photos</title>
-
- <abstract>
- <para>
- There are many ways to share your photos using F-Spot. All of the following
- methods will only share the photos you have selected when you run them.
- </para>
- </abstract>
-
- <sect1 id="sharing-e-mail">
- <title>Corrièl</title>
- <para>
- E-mail your photos directly from F-Spot with the <menuchoice>
- <guimenu>File</guimenu><guimenuitem>Send Mail</guimenuitem>
- </menuchoice> menu.
- </para>
- <note>
- <title>Note 1</title>
- <para>
- The email program used for this is defined at the GNOME level.
- You can change the default e-mailer for your user using the
- <application>Preferred Applications</application> tool in
- <menuchoice><guimenu>System</guimenu>
- <guisubmenu>Preferences</guisubmenu></menuchoice>.
- </para>
- </note>
- <note>
- <title>Note 2</title>
- <para>
- If some of the photos you'd like to send by email are in a format
- that F-Spot can't write (e.g. RAW images), the size selection dialog
- will become insensitive and the originals will be sent.
- </para>
- </note>
- <tip>
- <para>
- If you're sending resized pictures, F-Spot will keep the modified versions
- somewhere in the <filename class="directory">/tmp</filename> directory for
- 30 seconds. It's not an issue with evolution, which makes it's own local
- copy of the attachments, but could be a bit shorter if you're using Thunderbird.
- You can change the delay by editing the gconf key
- <filename class="directory">/apps/f-spot/export/email/delete_timeout_seconds</filename>.
- </para>
- </tip>
- </sect1>
-
- <sect1 id="sharing-print">
- <title>Estampar</title>
- <para>
- Print your photos with the <menuchoice><guimenu>File</guimenu>
- <guimenuitem>Print</guimenuitem></menuchoice> menu.
- </para>
- </sect1>
-
- <sect1 id="sharing-burn-to-cd">
- <title>Burn to CD</title>
- <para>
- Burn your photos to CD or DVD with the <menuchoice><guimenu>File</guimenu>
- <guisubmenu>Export</guisubmenu><guimenuitem>Export to CD</guimenuitem>
- </menuchoice> menu.
- </para>
- </sect1>
-
- <sect1 id="website-gallery-folder">
- <title>Generate a Website Gallery or Folder</title>
- <para>
- The
- <menuchoice><guimenu>File</guimenu><guimenuitem>Export</guimenuitem>
- <guimenuitem>Export to Folder</guimenuitem></menuchoice> feature
- gives you three ways to export your images.
- </para>
- <itemizedlist>
- <listitem>
- <para>
- <guilabel>Use Original</guilabel> exports your photos ready for use with
- Jakub Steiner's free <ulink url="http://jimmac.musichall.cz/original.php">
- Original Photo Gallery</ulink> software. If you are unsure about this option,
- it is probably not the right one for you.
- </para>
- </listitem>
- <listitem>
- <para>
- <guilabel>Use static HTML files</guilabel> exports your photos to an
- interactive website, ready for you to upload.
- </para>
- </listitem>
- <listitem>
- <para>
- <guilabel>Plain Files</guilabel> exports your images as files within directories,
- without putting them into a gallery.
- </para>
- </listitem>
- </itemizedlist>
- </sect1>
-
- <sect1 id="sharing-flickr-or-php-gallery">
- <title>Post to your online galleries</title>
- <para>
- If you use Flickr, SmugMug, 23hq, Tabblo, Facebook, Zooomr or Picasa Web Album, you can post your files
- directly from F-Spot with the <menuchoice><guimenu>File</guimenu>
- <guisubmenu>Export</guisubmenu></menuchoice> menu, choosing corresponding submenu item.
- </para>
- <para>
- If you use the PHP software known as <ulink url="http://gallery.sourceforge.net/">
- Gallery</ulink>, you can post your photos to your existing album with the
- <menuchoice><guimenu>File</guimenu><guimenuitem>Export</guimenuitem>
- <guimenuitem>Export to Web Gallery</guimenuitem></menuchoice> menu.
- You must first enable the Remote module within your Gallery installation.
- </para>
- <note>
- <title>Note for Gallery 2.2 users</title>
- <para>
- The Remote plugin for Gallery should be 1.0.8 or newer.
- </para>
- </note>
- <para>
- <ulink url="http://pennave.sourceforge.net">PennAve</ulink> is a Python
- web-application that directly uses F-Spot's database to present a dynamic
- gallery of your photos and tags.
- </para>
- <para>
- <ulink url="http://www.conduit-project.org">Conduit</ulink> is an application
- that can sync photos that have a particular tag with your Flickr or Picasa
- Web Album web storage.
- </para>
- </sect1>
- </chapter>
-
- <chapter id="cms">
- <title>Color management</title>
-
- <sect1 id="cms-what-is-cms">
- <title>What's color management</title>
-
- <para>
- When you capture a photo and look at it on a display, it looks different than
- on a camera's preview display or on any other display. It will also look
- different when you print it. This is because every device has unique color
- reproduction capabilities.
- </para>
-
- <para>
- Color management system (CMS) is a tool to achieve reliable color reproduction
- for both display and output (e.g. a printer). A CMS relies on color profiles
- to map original colors to the color that a device can reproduce so that colors
- will appear the same way everywhere — on a computer LCD monitor, on a print
- from your local photolab etc.
- </para>
- </sect1>
-
- <sect1 id="cms-what-is-icc-profile">
- <title>What's a color profile</title>
-
- <para>
- A color profile is a file with either .icc (thus its is often called an ICC
- profile) or .icm extension that describes how device's colors correspond to a
- universal description of colors.
- </para>
-
- <para>
- There are several types of profiles:
- </para>
-
- <itemizedlist>
- <listitem>
- <para>
- Input device profile. It's profile for a camera or a profile that an
- application like XSane embeds into a scanned image.
- </para>
- </listitem>
- <listitem>
- <para>
- Working space profile. It's a profile that describes color space in
- which all operations are done inside an application. Usually very wide
- gamut profiles like AdobeRGB1998 or ProPhotoRGB are used for that.
- </para>
- </listitem>
- <listitem>
- <para>
- Display profile. It's a profile for a monitor.
- </para>
- </listitem>
- <listitem>
- <para>
- Output profile. This is usually a profile for you printer.
- </para>
- </listitem>
- </itemizedlist>
-
- <para>
- Currently F-Spot allows setting only display and output profiles.
- All color operations are done in sRGB color space.
- </para>
- </sect1>
-
- <sect1 id="cms-how-to-get-icc-profile">
- <title>How to get my screen/printer color profile </title>
-
- <para>
- There are few ways to get a color profile.
- </para>
-
- <sect2 id="cms-icc-from-cd-or-internet">
- <title> From CD or Internet </title>
-
- <para>
- Many hardware manufacturers put color profiles into CD in the bundle.
- If you have one (from monitor or printer), you can use it. Or you can
- download it from the Internet (usually, from support section of the
- manufacturer's web site). Some camera manufacturers (Nikon, Canon)
- also provide ICC profiles.
- </para>
- </sect2>
-
- <sect2 id="cms-icc-from-calibrating-and-profiling">
- <title>Calibrating and profiling</title>
-
- <para>
- Best results can be achieved by calibrating and profiling devices with
- a measurement device. It is not so difficult, but it means that you need
- a spectrophotometer to do all measurements and create an ICC profile.
- </para>
-
- <para>
- If you are on Windows or Mac OS X, you can use manufacturer's software
- coming with a spectrophotometer. On Linux you will have to use either
- <ulink url="http://www.argyllcms.com">Argyll</ulink>, which is a set of
- versatile command line tools, or
- <ulink url="http://lprof.sourceforge.net/">LProf</ulink>, which has a
- graphical user interface.
- </para>
- <para>
- Please refer to documentation of third party hardware and software
- vendors for details.
- </para>
- </sect2>
-
- <sect2 id="cms-icc-from-embedding">
- <title>Embedding</title>
-
- <para>
- Image formats themselves (such as TIFF, JPEG, PNG...) may contain embedded
- color profiles. If color management is enabled, F-Spot looks for such
- embedded profiles and takes them into consideration.
- </para>
- </sect2>
- </sect1>
-
- <sect1 id="cms-how-to-use">
- <title>How to use color management in F-Spot</title>
-
- <para>
- Color management in F-Spot can use only RGB profiles at this time
- (and you can't see other profiles in the F-Spot).
- </para>
-
- <itemizedlist>
- <listitem>
- <para>
- Copy your color profiles into the
- <filename class="directory">/usr/share/color/icc</filename> or
- <filename class="directory">/usr/local/share/color/icc</filename>
- directory.
- </para>
- </listitem>
- <listitem>
- <para>
- Enable the color management with the <menuchoice>
- <guimenu>Edit</guimenu><guimenuitem>Preferences</guimenuitem>
- </menuchoice> menu.
- </para>
- </listitem>
- <listitem>
- <para>
- Select <guilabel>Display</guilabel> and <guilabel>Output</guilabel>
- profiles.
- </para>
- </listitem>
- </itemizedlist>
-
- <tip>
- <para>
- You can use <ulink url="http://burtonini.com/blog/computers/xicc">xicc</ulink>
- to load ICC profile to display and use the loaded profile from F-Spot.
- Just mark the checkbox <guilabel>Try to use the system display
- profile</guilabel>.
- </para>
- </tip>
- </sect1>
- </chapter>
-
- <chapter id="extend">
- <title>Extend functionality</title>
-
- <sect1 id="extend-what-extensions-are">
- <title>What extensions are</title>
-
- <para>
- F-Spot extensions are means to add new functionality to the application.
- F-Spot supports two types of extension: exporters (which allow exporting
- photos to new web services or data storages) and tools (which allow new
- ways of color correction, duplicate photos finders etc.). Extensions are
- distributed in form of extension packages.
- </para>
- <para>
- In the best traditions of not reinventing the wheel extensions can use other
- extensions, which means that one extension cannot work, if another extension
- is not installed. This concept of dependance actually means that
- </para>
- <itemizedlist>
- <listitem>
- <para>
- you cannot install an extension, if the extension it depends on, is not present in the system
- </para>
- </listitem>
- <listitem>
- <para>
- you cannot remove an extension on which some other extension depends
- </para>
- </listitem>
- </itemizedlist>
- </sect1>
-
- <sect1 id="extend-managing-extensions">
- <title>Managing extensions</title>
-
- <para>
- To manage extensions choose <menuchoice><guimenu>Edit</guimenu>
- <guimenuitem>Manage Extensions</guimenuitem></menuchoice> menu item.
- </para>
-
- <sect2 id="extend-managing-extensions-managing-extension-repositories">
- <title>Managing extension repositories</title>
-
- <para>
- Simply put, repositories are extension storages. They can be either network
- or local. To add a new repository click Repositories button, choose type of
- the repository you are about to add and provide either URL or path. If the URL
- or path you specified doesn't contain a description (index) file for extensions,
- a warning message will pop up to tell you that.
- </para>
- <para>
- To remove a repository click <guibutton>Repositories</guibutton> button again,
- choose the repository you are about to delete and click
- <guibutton>Delete</guibutton> button.
- </para>
- </sect2>
-
- <sect2 id="extend-managing-extensions-installing-and-updating-extensions">
- <title>Installing and updating extensions</title>
-
- <para>
- To install an extension click <guibutton>Install extensions...</guibutton> button.
- In the newly presented dialog
- </para>
- <orderedlist>
- <listitem>
- <para>
- Choose repository to install from all known repositories or just one of
- available repositories.
- </para>
- </listitem>
- <listitem>
- <para>
- Choose, what extension packages you want to see: All, Only new, Only updates.
- </para>
- </listitem>
- <listitem>
- <para>
- Click the <guibutton>Update</guibutton> button to update list of available
- extension packages by given criteria.
- </para>
- </listitem>
- <listitem>
- <para>
- Choose extensions you want to install/update, click <guibutton>Information</guibutton>
- to see summary on selected package, if you want to.
- </para>
- </listitem>
- <listitem>
- <para>
- Click <guibutton>Forward</guibutton> to proceed with installation.
- </para>
- </listitem>
- </orderedlist>
- </sect2>
-
- <sect2 id="extend-managing-extensions-enabling-and-disabling-extensions">
- <title>Enabling and disabling extensions</title>
-
- <para>
- You might want to temporarily enable or disable a particular extension package,
- for example, if the extension is not stable enough to handle a large amount of
- photos or if menus get crowded with extensions.
- </para>
- <para>
- In the <guilabel>Manage Extensions</guilabel> dialog select the extension
- package and click <guibutton>Enable</guibutton> or <guibutton>Disable</guibutton>.
- </para>
- </sect2>
-
- <sect2 id="extend-managing-extensions-removing-extensions">
- <title>Removing extensions</title>
-
- <para>
- If you don't need an extension you can remove it from the system completely.
- In the <guilabel>Manage Extensions</guilabel> dialog select the extension
- package you want to remove and click <guibutton>Delete</guibutton>.
- </para>
- </sect2>
-
- <sect2 id="extend-managing-extensions-reading-summary-of-extensions">
- <title>Reading summary of extensions</title>
-
- <para>
- Every extension package contains metadata that provides the following information about the extension:
- </para>
-
- <orderedlist>
- <listitem>
- <para>
- Description, which usually covers puprose of the extension
- </para>
- </listitem>
- <listitem>
- <para>Version</para>
- </listitem>
- <listitem>
- <para>Autor</para>
- </listitem>
- <listitem>
- <para>Dependéncias</para>
- </listitem>
- </orderedlist>
-
- <para>
- In the <guilabel>Manage Extensions</guilabel> dialog select the extension
- package you want to read summary of and click <guibutton>Information</guibutton>.
- </para>
- </sect2>
- </sect1>
-
- <sect1 id="extend-developing-extensions">
- <title>Developing extensions</title>
-
- <para>
- <ulink url="http://f-spot.org/Extend_F-Spot">Extend F-Spot</ulink> document
- gives instructions on developing your own extensions for F-Spot.
- </para>
- </sect1>
- </chapter>
-
- <chapter id="shortcuts">
- <title>Acorchis</title>
-
- <sect1 id="Global-Shortcuts">
- <title>Global Shortcuts</title>
- <informaltable frame="all">
- <tgroup cols="2">
- <thead>
- <row>
- <entry>Clau</entry>
- <entry>Accion</entry>
- </row>
- </thead>
- <tbody>
- <row>
- <entry>
- <keycap>[</keycap>
- </entry>
- <entry>
- Rotate the selected photos to the left
- </entry>
- </row>
- <row>
- <entry>
- <keycap>]</keycap>
- </entry>
- <entry>
- Rotate the selected photos to the right
- </entry>
- </row>
- <row>
- <entry>
- <keycap>Del</keycap>
- </entry>
- <entry>
- Remove selected photos from F-Spot's catalogue
- </entry>
- </row>
- <row>
- <entry>
- <keycombo><keycap>Shift</keycap><keycap>Del</keycap></keycombo>
- </entry>
- <entry>
- Delete selected photos permanently from the drive. If possible, they will moved to trash.
- </entry>
- </row>
-
- <row>
- <entry>
- <keycap>t</keycap>
- </entry>
- <entry>
- View or edit tags for selected photos
- </entry>
- </row>
- <row>
- <entry>
- <keycap>F11</keycap>
- </entry>
- <entry>
- Full screen view
- </entry>
- </row>
- <row>
- <entry>
- <keycombo><keycap>Ctrl</keycap><keycap>I</keycap></keycombo>
- </entry>
- <entry>
- Displays information about the photo
- </entry>
- </row>
- <row>
- <entry>
- <keycombo><keycap>Ctrl</keycap><keycap>Equals</keycap></keycombo>
- </entry>
- <entry>
- Zoom-in
- </entry>
- </row>
- <row>
- <entry>
- <keycombo><keycap>Ctrl</keycap><keycap>Mens</keycap></keycombo>
- </entry>
- <entry>
- Zoom-out
- </entry>
- </row>
- <row>
- <entry>
- <keycombo><keycap>Ctrl</keycap><keycap>N</keycap></keycombo>
- </entry>
- <entry>
- Import photos
- </entry>
- </row>
- <row>
- <entry>
- <keycombo><keycap>Alt</keycap><keycap>0-5</keycap></keycombo>
- </entry>
- <entry>
- Alt plus a number from 0 to 5 rate the selected picture(s)
- </entry>
- </row>
- </tbody>
- </tgroup>
- </informaltable>
- </sect1>
-
- <sect1 id="shortcuts-browse-mode">
- <title>Browse Mode Shortcuts</title>
- <informaltable frame="all">
- <tgroup cols="2">
- <thead>
- <row>
- <entry>Clau</entry>
- <entry>Accion</entry>
- </row>
- </thead>
- <tbody>
- <row>
- <entry>
- <keycombo><keycap>Ctrl</keycap><keycap>A</keycap></keycombo>
- </entry>
- <entry>Tot seleccionar</entry>
- </row>
- <row>
- <entry>
- <keycombo><keycap>Ctrl</keycap><keycap>Shift</keycap>
- <keycap>A</keycap></keycombo>
- </entry>
- <entry>
- Unselect all
- </entry>
- </row>
- <row>
- <entry>
- Arrow keys or <keycap>H</keycap>, <keycap>J</keycap>,
- <keycap>K</keycap>, <keycap>L</keycap>
- </entry>
- <entry>
- Move focus
- </entry>
- </row>
- <row>
- <entry>
- <keycap>Ctrl</keycap>-Arrow key
- </entry>
- <entry>
- Move the focus without changing the selection
- </entry>
- </row>
- <row>
- <entry>
- <keycap>Spacebar</keycap>
- </entry>
- <entry>
- Select or unselect the focused photo
- </entry>
- </row>
- <row>
- <entry>
- <keycombo><keycap>Shift</keycap>
- <keycap>Arrow key</keycap></keycombo>
- </entry>
- <entry>
- Change the photo selection
- </entry>
- </row>
- <row>
- <entry>
- <keycombo><keycap>Ctrl</keycap><keycap>Shift</keycap>
- <keycap>Left arrow or Right arrow</keycap></keycombo>
- </entry>
- <entry>
- Add/Remove all photos in the row, in the direction pressed, to the selection
- </entry>
- </row>
- <row>
- <entry>
- <keycap>V</keycap>
- </entry>
- <entry>
- Pops up a larger preview of the picture pointed by the mouse
- </entry>
- </row>
- <row>
- <entry>
- <keycombo><keycap>Shift</keycap><keycap>V</keycap></keycombo>
- </entry>
- <entry>
- Pops up a larger preview and a color histogram of the picture pointed by the mouse
- </entry>
- </row>
- </tbody>
- </tgroup>
- </informaltable>
- </sect1>
-
- <sect1 id="shortcuts-tag">
- <title>Tag Shortcuts</title>
- <informaltable frame="all">
- <tgroup cols="2">
- <thead>
- <row>
- <entry>Clau</entry>
- <entry>Accion</entry>
- </row>
- </thead>
- <tbody>
- <row>
- <entry>
- <keycap>F 2</keycap>
- </entry>
- <entry>
- Rename selected tag
- </entry>
- </row>
- <row>
- <entry>
- <keycombo><keycap>Ctrl</keycap><keycap>T</keycap></keycombo>
- </entry>
- <entry>
- Add tags to selected photos
- </entry>
- </row>
- <row>
- <entry>
- n/a
- </entry>
- <entry>
- Drag and drop tags to move them
- </entry>
- </row>
- <row>
- <entry>
- n/a
- </entry>
- <entry>
- Type a tag's name to jump to it (only works if tag is shown/expanded)
- </entry>
- </row>
- </tbody>
- </tgroup>
- </informaltable>
- </sect1>
-
- <sect1 id="shortcuts-edit-mode">
- <title>Edit Mode Shortcuts</title>
- <informaltable frame="all">
- <tgroup cols="2">
- <thead>
- <row>
- <entry>Clau</entry>
- <entry>Accion</entry>
- </row>
- </thead>
- <tbody>
- <row>
- <entry>
- <keycap>Page Up</keycap>, <keycap>Backspace</keycap>, <keycap>B</keycap>
- </entry>
- <entry>
- Go to Previous Photo
- </entry>
- </row>
- <row>
- <entry>
- <keycap>Pagina d'aval</keycap>, <keycap>Spacebar</keycap>, <keycap>N</keycap>
- </entry>
- <entry>
- Go to Next Photo
- </entry>
- </row>
- <row>
- <entry>
- Arrow keys or <keycap>H</keycap>, <keycap>J</keycap>,
- <keycap>K</keycap>, <keycap>L</keycap>
- </entry>
- <entry>
- Go to Previous/Next photo or move around a zoomed photo
- </entry>
- </row>
- <row>
- <entry>
- <keycap>R</keycap>
- </entry>
- <entry>
- Go to a random photo
- </entry>
- </row>
- <row>
- <entry>
- <keycap>f</keycap>
- </entry>
- <entry>
- Full screen view
- </entry>
- </row>
- <row>
- <entry>
- <keycap>0</keycap>
- </entry>
- <entry>
- Fit the image to the screen
- </entry>
- </row>
- <row>
- <entry>
- <keycap>1</keycap>
- </entry>
- <entry>
- Zoom Factor to 1.0 (1 screen pixel per image pixel)
- </entry>
- </row>
- <row>
- <entry>
- <keycap>2</keycap>
- </entry>
- <entry>
- Zoom Factor to 2.0 (4 screen pixels per image pixel)
- </entry>
- </row>
- <row>
- <entry>
- <keycap>Escape</keycap>
- </entry>
- <entry>
- Returns to Browser mode
- </entry>
- </row>
- <row>
- <entry>
- <keycap>V</keycap>
- </entry>
- <entry>
- Examine photo with magnifying glass (Loupe). Doubleclick on the
- Loupe, or type <keycap>v</keycap> again to close it.
- </entry>
- </row>
- <row>
- <entry>
- <keycap>Shift</keycap>-Mousewheel
- </entry>
- <entry>
- Faster filmstrip scrolling
- </entry>
- </row>
- <row>
- <entry>
- <keycap>i</keycap>
- </entry>
- <entry>
- Toggle infobox visibility ''(only when in full screen)''
- </entry>
- </row>
- </tbody>
- </tgroup>
- </informaltable>
- </sect1>
- </chapter>
-
-</book>
diff --git a/docs/oc/oc.po b/docs/oc/oc.po
deleted file mode 100644
index fa84b13..0000000
--- a/docs/oc/oc.po
+++ /dev/null
@@ -1,1312 +0,0 @@
-# Translation of oc.po to Occitan
-# Occitan translation of f-spot documentation.
-# Copyright (C) 2007 Free Software Foundation, Inc.
-# This file is distributed under the same license as the f-spot package.
-#
-# Yannig Marchegay (Kokoyaya) <yannig at marchegay.org>, 2006-2008
-msgid ""
-msgstr ""
-"Project-Id-Version: oc\n"
-"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2007-10-14 12:37+0100\n"
-"PO-Revision-Date: 2007-12-05 09:30+0100\n"
-"Last-Translator: Yannig Marchegay (Kokoyaya) <yannig at marchegay.org>\n"
-"Language-Team: Occitan <ubuntu-l10n-oci at lists.ubuntu.com>\n"
-"MIME-Version: 1.0\n"
-"Content-Type: text/plain; charset=UTF-8\n"
-"Content-Transfer-Encoding: 8bit\n"
-"Plural-Forms: nplurals=2; plural=(n > 1);\n"
-
-#. When image changes, this message will be marked fuzzy or untranslated for you.
-#. It doesn't matter what you translate it to: it's not used at all.
-#: C/f-spot.xml:138(None)
-msgid "@@image: 'figures/f-spot-crop.png'; md5=63e18c96702aea4701024837a13ae2d9"
-msgstr "@@image: 'figures/f-spot-crop.png'; md5=63e18c96702aea4701024837a13ae2d9"
-
-#. When image changes, this message will be marked fuzzy or untranslated for you.
-#. It doesn't matter what you translate it to: it's not used at all.
-#: C/f-spot.xml:162(None)
-msgid ""
-"@@image: 'figures/f-spot-straighten.png'; "
-"md5=ceeff0cac633d06599fa5760cc4bc568"
-msgstr ""
-"@@image: 'figures/f-spot-straighten.png'; "
-"md5=ceeff0cac633d06599fa5760cc4bc568"
-
-#. When image changes, this message will be marked fuzzy or untranslated for you.
-#. It doesn't matter what you translate it to: it's not used at all.
-#: C/f-spot.xml:181(None)
-msgid ""
-"@@image: 'figures/f-spot-adjust-colors.png'; "
-"md5=6a5d9eaaaaf238ccbf70552bc073898c"
-msgstr ""
-"@@image: 'figures/f-spot-adjust-colors.png'; "
-"md5=6a5d9eaaaaf238ccbf70552bc073898c"
-
-#. When image changes, this message will be marked fuzzy or untranslated for you.
-#. It doesn't matter what you translate it to: it's not used at all.
-#: C/f-spot.xml:199(None)
-msgid "@@image: 'figures/f-spot-autocolor.png'; md5=240c4a86c95c9507755fe790bef0e24a"
-msgstr "@@image: 'figures/f-spot-autocolor.png'; md5=240c4a86c95c9507755fe790bef0e24a"
-
-#. When image changes, this message will be marked fuzzy or untranslated for you.
-#. It doesn't matter what you translate it to: it's not used at all.
-#: C/f-spot.xml:216(None)
-msgid ""
-"@@image: 'figures/f-spot-desaturate.png'; "
-"md5=fa54dfd08171658d720be71b6d367139"
-msgstr ""
-"@@image: 'figures/f-spot-desaturate.png'; "
-"md5=fa54dfd08171658d720be71b6d367139"
-
-#. When image changes, this message will be marked fuzzy or untranslated for you.
-#. It doesn't matter what you translate it to: it's not used at all.
-#: C/f-spot.xml:233(None)
-msgid "@@image: 'figures/f-spot-sepia.png'; md5=154d6e34903664dbd776f2bef405ce91"
-msgstr "@@image: 'figures/f-spot-sepia.png'; md5=154d6e34903664dbd776f2bef405ce91"
-
-#. When image changes, this message will be marked fuzzy or untranslated for you.
-#. It doesn't matter what you translate it to: it's not used at all.
-#: C/f-spot.xml:264(None)
-msgid "@@image: 'figures/f-spot-red-eye.png'; md5=743d0a2ccc9b2fa8fa314855c225cd31"
-msgstr "@@image: 'figures/f-spot-red-eye.png'; md5=743d0a2ccc9b2fa8fa314855c225cd31"
-
-#. When image changes, this message will be marked fuzzy or untranslated for you.
-#. It doesn't matter what you translate it to: it's not used at all.
-#: C/f-spot.xml:291(None)
-msgid ""
-"@@image: 'figures/f-spot-soft-focus.png'; "
-"md5=14d1437ce49c83f3ebbcf70b7047ffbe"
-msgstr ""
-"@@image: 'figures/f-spot-soft-focus.png'; "
-"md5=14d1437ce49c83f3ebbcf70b7047ffbe"
-
-#. When image changes, this message will be marked fuzzy or untranslated for you.
-#. It doesn't matter what you translate it to: it's not used at all.
-#: C/f-spot.xml:567(None)
-msgid ""
-"@@image: 'figures/f-spot-fullscreen.png'; "
-"md5=86040e20ebf1015f6489a56e9589f063"
-msgstr ""
-"@@image: 'figures/f-spot-fullscreen.png'; "
-"md5=86040e20ebf1015f6489a56e9589f063"
-
-#. When image changes, this message will be marked fuzzy or untranslated for you.
-#. It doesn't matter what you translate it to: it's not used at all.
-#: C/f-spot.xml:580(None)
-msgid "@@image: 'figures/f-spot-slideshow.png'; md5=84a69bc3bb7a1b8d04c967d3a66e6f23"
-msgstr "@@image: 'figures/f-spot-slideshow.png'; md5=84a69bc3bb7a1b8d04c967d3a66e6f23"
-
-#: C/f-spot.xml:5(title)
-msgid "The F-Spot Manual"
-msgstr "Manual de F-Spot"
-
-#: C/f-spot.xml:7(para) C/f-spot.xml:9(subtitle)
-msgid "This is the user manual for F-Spot, a GNOME personal photo manager."
-msgstr ""
-
-#: C/f-spot.xml:11(year)
-msgid "2007"
-msgstr "2007"
-
-#: C/f-spot.xml:12(holder)
-msgid "Aaron Bockover, Gabriel Burt, Miguel de Icaza, Bengt Thuree"
-msgstr "Aaron Bockover, Gabriel Burt, Miguel de Icaza, Bengt Thuree"
-
-#: C/f-spot.xml:15(publishername)
-msgid "GNOME Documentation Project"
-msgstr "Projècte de documentacion de GNOME"
-
-#: C/f-spot.xml:19(firstname)
-msgid "Miguel"
-msgstr "Miguel"
-
-#: C/f-spot.xml:20(surname)
-msgid "de Icaza"
-msgstr "de Icaza"
-
-#: C/f-spot.xml:23(firstname)
-msgid "Aaron"
-msgstr "Aaron"
-
-#: C/f-spot.xml:24(surname)
-msgid "Bockover"
-msgstr "Bockover"
-
-#: C/f-spot.xml:27(firstname)
-msgid "Bengt"
-msgstr "Bengt"
-
-#: C/f-spot.xml:28(surname)
-msgid "Thuree"
-msgstr "Thuree"
-
-#: C/f-spot.xml:31(firstname)
-msgid "Gabriel"
-msgstr "Gabriel"
-
-#: C/f-spot.xml:32(surname)
-msgid "Burt"
-msgstr "Burt"
-
-#: C/f-spot.xml:35(firstname)
-msgid "Alexandre"
-msgstr "Alexandre"
-
-#: C/f-spot.xml:36(surname)
-msgid "Prokoudine"
-msgstr "Prokoudine"
-
-#: C/f-spot.xml:39(firstname)
-msgid "Stephane"
-msgstr "Stephane"
-
-#: C/f-spot.xml:40(surname)
-msgid "Delcroix"
-msgstr "Delcroix"
-
-#: C/f-spot.xml:46(revnumber)
-msgid "0.3"
-msgstr "0.3"
-
-#: C/f-spot.xml:47(date)
-msgid "2007-07-26"
-msgstr "26/07/2007"
-
-#: C/f-spot.xml:53(title)
-msgid "Organizing your photos"
-msgstr "Organizar las vòstras fotografias"
-
-#: C/f-spot.xml:56(title)
-msgid "Import"
-msgstr "Importar"
-
-#: C/f-spot.xml:58(para)
-msgid ""
-"You can import photos from your hard drive or your camera. When you import "
-"your photos into F-Spot from your camera, it will always make a copy of "
-"them, leaving you free to clear your camera's memory. By default, F-Spot "
-"will make a copy of photos imported from your hard drive. Uncheck the "
-"<guilabel>Copy</guilabel> option on the import dialog or hold <keycap>Shift</"
-"keycap> when dragging photos into F-Spot if you do not wish to copy them "
-"from your hard drive."
-msgstr ""
-
-#: C/f-spot.xml:68(para)
-msgid ""
-"By default, F-Spot copies your photos to the <filename class=\"directory\">~/"
-"Photos</filename> folder. You can change the folder F-Spot uses in "
-"<guilabel>Preferences</guilabel> dialog (<menuchoice><guimenu>Edit</"
-"guimenu><guimenuitem>Preferences</guimenuitem></menuchoice>)."
-msgstr ""
-
-#: C/f-spot.xml:76(para)
-msgid ""
-"If all the photos you are importing at one time are from a particular event, "
-"or have some other characteristic in common, you can create a tag for them "
-"so you can later find them with ease. To do this, follow the instructions "
-"from <xref linkend=\"tag\"/> to create a new tag, then when you are "
-"importing them, check the button for <guilabel>Attach Tag</guilabel> and "
-"choose the tag you created."
-msgstr ""
-
-#: C/f-spot.xml:86(para)
-msgid ""
-"F-Spot uses a database stored at <filename>~/.gnome2/f-spot/photos.db</"
-"filename>. Note, to access it, use the sqlite3 command. You can also "
-"manually specify path to a database by running F-Spot with <option>-b</"
-"option> option."
-msgstr ""
-
-#: C/f-spot.xml:94(para)
-msgid ""
-"After an import, F-Spot will display the pictures of the latest import roll "
-"only. Read <xref linkend=\"enjoying-search\"/> to learn how to deal with "
-"import rolls."
-msgstr ""
-
-#: C/f-spot.xml:102(title)
-msgid "Edit"
-msgstr "Edicion"
-
-#: C/f-spot.xml:104(para)
-msgid ""
-"If you double click or press enter on an image, you enter Edit mode, where "
-"you can remove red-eye, crop, and adjust brightness and colors."
-msgstr ""
-
-#: C/f-spot.xml:110(title)
-msgid "Versions"
-msgstr "Versions"
-
-#: C/f-spot.xml:112(para)
-msgid ""
-"When you edit your photos, a new copy (called a version) is created, so your "
-"original is never altered. After your first edit to a photo, subsequent "
-"edits will modify the same version. If you want to create mulitple versions "
-"of your photo, perhaps with different cropping or coloring, you can do so "
-"via the <menuchoice><guimenu>File</guimenu><guimenuitem>Create new version</"
-"guimenuitem></menuchoice> option."
-msgstr ""
-
-#: C/f-spot.xml:123(title)
-msgid "Crop"
-msgstr "Rosegar"
-
-#: C/f-spot.xml:125(para)
-msgid ""
-"Cropping an image is a great way to improve the quality of a photograph by "
-"improving how it is framed. You crop a photo by selecting the part of the "
-"photo you want to keep. If you want your photo to be the exact dimensions "
-"necessary for a certain print size, you can constrain the kind of selection "
-"F-Spot will allow you to draw by choosing the appropriate size from the "
-"constraint drop down. See the <xref linkend=\"edit-remove-red-eye\"/> below "
-"for details on making a selection on your photo."
-msgstr ""
-
-#: C/f-spot.xml:135(title)
-msgid "Crop tool"
-msgstr ""
-
-#: C/f-spot.xml:142(para) C/f-spot.xml:343(para)
-msgid ""
-"Once you have made your crop selection, you must click the crop button "
-"beneath the image to finalize the crop. If you are working with the original "
-"photo, cropping creates a new version your photo."
-msgstr ""
-
-#: C/f-spot.xml:150(title)
-msgid "Straighten"
-msgstr ""
-
-#: C/f-spot.xml:152(para)
-msgid ""
-"Straighten effect is a tool to level a photo, quite helpful for landscapes "
-"taken without a tripod, when (imaginary) line of horizon is not at 0°. This "
-"tool rotates an image by a specified angle and automagically crops the "
-"resulted image, so that you always see a perfect rectangle."
-msgstr ""
-
-#: C/f-spot.xml:159(title)
-msgid "Straighten tool"
-msgstr ""
-
-#: C/f-spot.xml:169(title)
-msgid "Adjust Colors"
-msgstr ""
-
-#: C/f-spot.xml:171(para)
-msgid ""
-"To adjust the brightness, contrast, and colors of a photo, first click the "
-"<guibutton>Adjust the photo colors</guibutton> icon to open the adjustment "
-"dialog. Change then some settings and save them with <guibutton>OK</"
-"guibutton>."
-msgstr ""
-
-#: C/f-spot.xml:178(title)
-msgid "Adjust Colors tool"
-msgstr ""
-
-#: C/f-spot.xml:188(title) C/f-spot.xml:196(title)
-msgid "AutoColor"
-msgstr ""
-
-#: C/f-spot.xml:190(para)
-msgid ""
-"This effect automatically adjusts color levels to make a pretty balanced "
-"picture color-wise. It serves best for pictures taken with automatical white "
-"balance, when camera didn't manage to do the job well."
-msgstr ""
-
-#: C/f-spot.xml:206(title)
-msgid "Desaturate"
-msgstr ""
-
-#: C/f-spot.xml:208(para)
-msgid ""
-"To make a colorful photo a black and white one, open a photo of choice and "
-"press <guibutton>Desaturate</guibutton> button."
-msgstr ""
-
-#: C/f-spot.xml:213(title) C/f-spot.xml:230(title)
-msgid "Desaturation tool"
-msgstr ""
-
-#: C/f-spot.xml:223(title)
-msgid "Sepia"
-msgstr "Sepia"
-
-#: C/f-spot.xml:225(para)
-msgid ""
-"To make a colorful photo look like an old-style picture in sepia tones, open "
-"a photo of choice and press <guibutton>Sepia</guibutton> button."
-msgstr ""
-
-#: C/f-spot.xml:240(title)
-msgid "Remove Red-Eye"
-msgstr ""
-
-#: C/f-spot.xml:242(para)
-msgid ""
-"To remove redeye from a photo, you need to select a zone containing the "
-"eyes. You may want to zoom in on the image to accurately select the eyes in "
-"the photo. You should be able to correct both eyes on the same person in one "
-"shot, or even the eyes from multiple people at once. If this doesn't work "
-"for you, or the selected zone contains some vivid red parts (lips, ...) "
-"you'll probably have to correct one red eye at a time."
-msgstr ""
-
-#: C/f-spot.xml:250(para)
-msgid ""
-"To make your selection, click one corner of the rectangle that will be your "
-"selection, and drag your mouse to the diagonal corner and release it. You "
-"can resize your selection by dragging its edges, and you can move it by "
-"clicking in the middle of it and dragging it to where you want it."
-msgstr ""
-
-#: C/f-spot.xml:256(para)
-msgid ""
-"Once you have selected a zone, you can remove the red from it by clicking "
-"the red-eye button beneath the photo."
-msgstr ""
-
-#: C/f-spot.xml:261(title)
-msgid "Red-Eye tool"
-msgstr ""
-
-#: C/f-spot.xml:269(para)
-msgid ""
-"You can change the threshold for redeyes detection by changing the gconf key "
-"<filename class=\"directory\">/apps/f-spot/edit/redeye_threshold</filename>."
-msgstr ""
-
-#: C/f-spot.xml:278(title)
-msgid "Soft Focus"
-msgstr ""
-
-#: C/f-spot.xml:280(para)
-msgid ""
-"In photography sharpening one region of a picture, while blurring all the "
-"rest, is a way to make an emphasis and grab attention. It is achieved by "
-"using a lens that allows shooting with a short distance in front of and "
-"beyond the subject that appears to be in focus. Soft focus effect is a way "
-"to emulate such a lens."
-msgstr ""
-
-#: C/f-spot.xml:288(title)
-msgid "Soft Focus tool"
-msgstr ""
-
-#: C/f-spot.xml:295(para)
-msgid ""
-"Click to choose central point of the area you want to be in focus and adjust "
-"amount of blurring, then click <guibutton>OK</guibutton>."
-msgstr ""
-
-#: C/f-spot.xml:302(title)
-msgid "Sharpen"
-msgstr ""
-
-#: C/f-spot.xml:304(para)
-msgid ""
-"Out-of-focus photographs and most digitized images often need a sharpness "
-"correction. The Unsharp Mask effect sharpens edges of the elements without "
-"increasing noise or blemish. To sharpen a photo choose "
-"<menuchoice><guimenu>Edit</guimenu><guimenuitem>Sharpen...</guimenuitem></"
-"menuchoice> and specify the following values:"
-msgstr ""
-
-#: C/f-spot.xml:315(para)
-msgid "<parameter class=\"option\">Amount</parameter> — strength of sharpening."
-msgstr ""
-
-#: C/f-spot.xml:320(para)
-msgid ""
-"<parameter class=\"option\">Radius</parameter> — how many pixels on either "
-"side of an edge will be affected by sharpening. High resolution images allow "
-"higher radius."
-msgstr ""
-
-#: C/f-spot.xml:327(para)
-msgid ""
-"<parameter class=\"option\">Threshold</parameter> — the minimum difference "
-"in pixel values that indicates an edge where sharpen must be applied. This "
-"helps avoiding creation of blemishes in face, sky or water surface."
-msgstr ""
-
-#: C/f-spot.xml:337(title)
-msgid "Describe"
-msgstr ""
-
-#: C/f-spot.xml:339(para)
-msgid ""
-"You can also enter a description of the image by clicking on the text entry "
-"box below the image and typing."
-msgstr ""
-
-#: C/f-spot.xml:351(title)
-msgid "Adjust Time"
-msgstr ""
-
-#: C/f-spot.xml:353(para)
-msgid ""
-"In both 'browse' or 'edit' modes, you can adjust the time of one or multiple "
-"pictures (<menuchoice><guimenu>Edit</guimenu><guimenuitem>Adjust Time</"
-"guimenuitem></menuchoice>). Adjusting the time of multiple pictures at once "
-"helps you shift all an import roll if, e.g. the time on your camera is badly "
-"set or if you forgot to change it according to DST."
-msgstr ""
-
-#: C/f-spot.xml:365(title)
-msgid "Tag"
-msgstr ""
-
-#: C/f-spot.xml:366(para)
-msgid ""
-"F-Spot enables you to organize and enjoy your photos by associating them "
-"with various user-customizable tags. A tag is a merely a label. F-Spot comes "
-"with default tags to get you started; you are free to change them and add "
-"new ones. For example, if you want to create a tag for specific event, you "
-"can create a new tag named after that event under the Events tag."
-msgstr ""
-
-#: C/f-spot.xml:373(para)
-msgid "There are many ways to tag photos:"
-msgstr ""
-
-#: C/f-spot.xml:378(para)
-msgid "drag and drop the photo(s) onto the tag"
-msgstr ""
-
-#: C/f-spot.xml:383(para)
-msgid "drag and drop the tag onto the photo(s)"
-msgstr ""
-
-#: C/f-spot.xml:388(para)
-msgid "via the photo's right-click menu"
-msgstr ""
-
-#: C/f-spot.xml:393(para)
-msgid "via the Tags and Edit menus"
-msgstr ""
-
-#: C/f-spot.xml:398(para)
-msgid ""
-"by typing them in (press <keycap>t</keycap> to pop up the tag entry bar, "
-"enter comma-separated tags) - with tab completion!"
-msgstr ""
-
-#: C/f-spot.xml:404(para)
-msgid ""
-"The first photo you associate with a tag will be used for that tag's icon. "
-"You can always edit a tag's name, parent tag, and icon by right clicking on "
-"it and choosing <guilabel>Edit tag</guilabel>."
-msgstr ""
-
-#: C/f-spot.xml:409(para)
-msgid ""
-"You can change a tag's parent by dragging and dropping it where you like. "
-"Also, you can edit the name of a tag by selecting it and pressing "
-"<keycap>F2</keycap>. Lastly, if you have the tag tree widget focused (e.g. "
-"you just clicked on a tag), you can start typing the name of a tag, and all "
-"the expanded tags in the list will be searched and you'll jump to any "
-"matching ones."
-msgstr ""
-
-#: C/f-spot.xml:418(para)
-msgid ""
-"You can also change size of tag icons in the sidebar or even make tag icons "
-"invisible by selecting preferred option from <menuchoice><guimenu>View</"
-"guimenu><guimenuitem>Tag Icons</guimenuitem></menuchoice> menu."
-msgstr ""
-
-#: C/f-spot.xml:426(para)
-msgid ""
-"F-Spot can write tags as metadata fields into JPEG files. Tags for various "
-"RAW files, PNG, TIFF, and others are written to F-Spot's database. You will "
-"have to re-tag these files if you re-import your collection."
-msgstr ""
-
-#: C/f-spot.xml:437(title)
-msgid "Enjoying your photos"
-msgstr ""
-
-#: C/f-spot.xml:439(title)
-msgid "Browse"
-msgstr "Navigar"
-
-#: C/f-spot.xml:440(para)
-msgid ""
-"You can use the slider widget to browse your photos by month or by "
-"directory. To change this setting, go to <menuchoice><guimenu>View</"
-"guimenu><guimenuitem>Arranged By</guimenuitem></menuchoice>."
-msgstr ""
-
-#: C/f-spot.xml:448(title)
-msgid "Search"
-msgstr "Recercar"
-
-#: C/f-spot.xml:450(para)
-msgid "F-Spot uses search search filters to help you better define search criteria."
-msgstr ""
-
-#: C/f-spot.xml:455(title)
-msgid "Tags"
-msgstr ""
-
-#: C/f-spot.xml:457(para)
-msgid ""
-"You can start a search by double clicking or activating a tag from the tag "
-"list. Alternatively, you can show the find bar with "
-"<menuchoice><guimenu>Find</guimenu><guimenuitem>Show Find Bar</guimenuitem></"
-"menuchoice>. With the find bar shown, you can drag tags from the tag view to "
-"the find bar."
-msgstr ""
-
-#: C/f-spot.xml:463(para)
-msgid ""
-"To find photos that are tagged with both of two tags, activate the first in "
-"the tag view or drag it onto the find bar, then drag the second tag and drop "
-"it on top of the first. You can also right click on the second tag in the "
-"tag view, or use the <guimenu>Find</guimenu> menu, and choose "
-"<guimenuitem>Find With...</guimenuitem> and select the first tag (or group "
-"of tags)."
-msgstr ""
-
-#: C/f-spot.xml:470(para)
-msgid ""
-"You can drag a tag icon around on the find bar to change from finding it and "
-"another tag to finding it or another tag."
-msgstr ""
-
-#: C/f-spot.xml:474(para)
-msgid ""
-"You can search for photos that do not have a particular tag by double-"
-"clicking on a tag in the find bar. Alternatively, you can right-click a tag "
-"in the find bar and select <guimenuitem>Exclude</guimenuitem>."
-msgstr ""
-
-#: C/f-spot.xml:479(para)
-msgid ""
-"To remove a tag from the search, drag it away from the find bar, or right "
-"click and select <guimenuitem>Remove</guimenuitem>."
-msgstr ""
-
-#: C/f-spot.xml:483(para)
-msgid ""
-"By default, photos tagged <emphasis>Hidden</emphasis> will not be shown. You "
-"must explicitly include the <emphasis>Hidden</emphasis> tag in your search "
-"to show such photos."
-msgstr ""
-
-#: C/f-spot.xml:491(title)
-msgid "Import Rolls"
-msgstr ""
-
-#: C/f-spot.xml:492(para)
-msgid ""
-"F-Spot remembers what pictures were imported every now and then. Use "
-"<menuchoice><guimenu>Find</guimenu><guisubmenu>Import Roll</"
-"guisubmenu><guimenuitem>Last import roll</guimenuitem></menuchoice> to limit "
-"search to last importing session or use <menuchoice><guimenu>Find</"
-"guimenu><guisubmenu>Import Roll</guisubmenu><guimenuitem>Select Import "
-"Rolls...</guimenuitem></menuchoice> to make a finer selection of imported "
-"photos:"
-msgstr ""
-
-#: C/f-spot.xml:502(para)
-msgid ""
-"<parameter class=\"option\">At</parameter> — to select photos from a "
-"particular importing session"
-msgstr ""
-
-#: C/f-spot.xml:507(para)
-msgid ""
-"<parameter class=\"option\">After</parameter> — to select all photos "
-"imported begining with a particular importing sessio"
-msgstr ""
-
-#: C/f-spot.xml:512(para)
-msgid ""
-"<parameter class=\"option\">Between</parameter> — to select all photos "
-"imported between two particular importing sessions"
-msgstr ""
-
-#: C/f-spot.xml:517(para)
-msgid ""
-"Every time you change settings of the filter, amount of selected photos will "
-"appear in the bottom part of the dialog."
-msgstr ""
-
-#: C/f-spot.xml:521(para)
-msgid ""
-"When you apply Import Roll filter, in the Find bar you will see "
-"<guilabel>Find: Import Roll</guilabel>. Now you can add some other filter to "
-"finetune your selection."
-msgstr ""
-
-#: C/f-spot.xml:526(para)
-msgid ""
-"If you don't need the Import Roll filter anymore, choose "
-"<menuchoice><guimenu>Find</guimenu><guisubmenu>Import Roll</"
-"guisubmenu><guimenuitem>Clear roll filter</guimenuitem></menuchoice> to "
-"remove Import Roll from search criteria. You can also click the close button "
-"(<guibutton>X</guibutton>) of the search bar to discard all the current "
-"search options."
-msgstr ""
-
-#: C/f-spot.xml:535(para)
-msgid ""
-"The number of displayed rolls in the dialog is defined by the gconf key "
-"<filename class=\"directory\">/apps/f-spot/import/gui_roll_history</"
-"filename>. Default value is 10."
-msgstr ""
-
-#: C/f-spot.xml:544(title)
-msgid "Type-to-find"
-msgstr ""
-
-#: C/f-spot.xml:545(para)
-msgid ""
-"There is also a type-to-find entry. Press <keycap>/</keycap> to open it. It "
-"cannot be used at the same time as the find bar. You can type queries such "
-"as \"TagA and (TagB or (TagC and TagD))\". At any point, if F-Spot "
-"recognizes what you've typed as a valid query, it will update your search. "
-"The <emphasis>not</emphasis> operator is not yet supported."
-msgstr ""
-
-#: C/f-spot.xml:556(title)
-msgid "Fullscreen Mode and Slideshows"
-msgstr ""
-
-#: C/f-spot.xml:557(para)
-msgid ""
-"For fewer distractions and larger display, you can view your photos in full "
-"screen mode. You control when to show the next photo or to return to the "
-"previous. Enter fullscreen mode by pressing <keycap>F11</keycap> at any time "
-"or by pressing the button in the toolbar."
-msgstr ""
-
-#: C/f-spot.xml:564(title)
-msgid "FullScreen"
-msgstr ""
-
-#: C/f-spot.xml:571(para)
-msgid ""
-"In slideshow mode, you can sit back and view your photos as they are "
-"presented to you. You can start a slideshow by pressing the button on the "
-"toolbar."
-msgstr ""
-
-#: C/f-spot.xml:577(title)
-msgid "SlideShow"
-msgstr ""
-
-#: C/f-spot.xml:588(title)
-msgid "Sharing your photos"
-msgstr ""
-
-#: C/f-spot.xml:591(para)
-msgid ""
-"There are many ways to share your photos using F-Spot. All of the following "
-"methods will only share the photos you have selected when you run them."
-msgstr ""
-
-#: C/f-spot.xml:598(title)
-msgid "E-mail"
-msgstr "Corrièl"
-
-#: C/f-spot.xml:599(para)
-msgid ""
-"E-mail your photos directly from F-Spot with the <menuchoice><guimenu>File</"
-"guimenu><guimenuitem>Send Mail</guimenuitem></menuchoice> menu."
-msgstr ""
-
-#: C/f-spot.xml:605(title)
-msgid "Note 1"
-msgstr ""
-
-#: C/f-spot.xml:606(para)
-msgid ""
-"The email program used for this is defined at the GNOME level. You can "
-"change the default e-mailer for your user using the <application>Preferred "
-"Applications</application> tool in <menuchoice><guimenu>System</"
-"guimenu><guisubmenu>Preferences</guisubmenu></menuchoice>."
-msgstr ""
-
-#: C/f-spot.xml:615(title)
-msgid "Note 2"
-msgstr ""
-
-#: C/f-spot.xml:616(para)
-msgid ""
-"If some of the photos you'd like to send by email are in a format that F-"
-"Spot can't write (e.g. RAW images), the size selection dialog will become "
-"insensitive and the originals will be sent."
-msgstr ""
-
-#: C/f-spot.xml:623(para)
-msgid ""
-"If you're sending resized pictures, F-Spot will keep the modified versions "
-"somewhere in the <filename class=\"directory\">/tmp</filename> directory for "
-"30 seconds. It's not an issue with evolution, which makes it's own local "
-"copy of the attachments, but could be a bit shorter if you're using "
-"Thunderbird. You can change the delay by editing the gconf key <filename "
-"class=\"directory\">/apps/f-spot/export/email/delete_timeout_seconds</"
-"filename>."
-msgstr ""
-
-#: C/f-spot.xml:635(title)
-msgid "Print"
-msgstr "Estampar"
-
-#: C/f-spot.xml:636(para)
-msgid ""
-"Print your photos with the <menuchoice><guimenu>File</"
-"guimenu><guimenuitem>Print</guimenuitem></menuchoice> menu."
-msgstr ""
-
-#: C/f-spot.xml:643(title)
-msgid "Burn to CD"
-msgstr ""
-
-#: C/f-spot.xml:644(para)
-msgid ""
-"Burn your photos to CD or DVD with the <menuchoice><guimenu>File</"
-"guimenu><guisubmenu>Export</guisubmenu><guimenuitem>Export to CD</"
-"guimenuitem></menuchoice> menu."
-msgstr ""
-
-#: C/f-spot.xml:652(title)
-msgid "Generate a Website Gallery or Folder"
-msgstr ""
-
-#: C/f-spot.xml:653(para)
-msgid ""
-"The <menuchoice><guimenu>File</guimenu><guimenuitem>Export</"
-"guimenuitem><guimenuitem>Export to Folder</guimenuitem></menuchoice> feature "
-"gives you three ways to export your images."
-msgstr ""
-
-#: C/f-spot.xml:661(para)
-msgid ""
-"<guilabel>Use Original</guilabel> exports your photos ready for use with "
-"Jakub Steiner's free <ulink url=\"http://jimmac.musichall.cz/original.php\"> "
-"Original Photo Gallery</ulink> software. If you are unsure about this "
-"option, it is probably not the right one for you."
-msgstr ""
-
-#: C/f-spot.xml:669(para)
-msgid ""
-"<guilabel>Use static HTML files</guilabel> exports your photos to an "
-"interactive website, ready for you to upload."
-msgstr ""
-
-#: C/f-spot.xml:675(para)
-msgid ""
-"<guilabel>Plain Files</guilabel> exports your images as files within "
-"directories, without putting them into a gallery."
-msgstr ""
-
-#: C/f-spot.xml:684(title)
-msgid "Post to your online galleries"
-msgstr ""
-
-#: C/f-spot.xml:685(para)
-msgid ""
-"If you use Flickr, SmugMug, 23hq or Picasa Web Album, you can post your "
-"files directly from F-Spot with the <menuchoice><guimenu>File</"
-"guimenu><guisubmenu>Export</guisubmenu></menuchoice> menu, choosing "
-"corresponding submenu item."
-msgstr ""
-
-#: C/f-spot.xml:690(para)
-msgid ""
-"If you use the PHP software known as <ulink url=\"http://gallery.sourceforge."
-"net/\"> Gallery</ulink>, you can post your photos to your existing album "
-"with the <menuchoice><guimenu>File</guimenu><guimenuitem>Export</"
-"guimenuitem><guimenuitem>Export to Web Gallery</guimenuitem></menuchoice> "
-"menu. You must first enable the Remote module within your Gallery "
-"installation."
-msgstr ""
-
-#: C/f-spot.xml:698(title)
-msgid "Note for Gallery 2.2 users"
-msgstr ""
-
-#: C/f-spot.xml:699(para)
-msgid "The Remote plugin for Gallery should be 1.0.8 or newer."
-msgstr ""
-
-#: C/f-spot.xml:703(para)
-msgid ""
-"<ulink url=\"http://pennave.sourceforge.net\">PennAve</ulink> is a Python "
-"web-application that directly uses F-Spot's database to present a dynamic "
-"gallery of your photos and tags."
-msgstr ""
-
-#: C/f-spot.xml:708(para)
-msgid ""
-"<ulink url=\"http://www.conduit-project.org\">Conduit</ulink> is an "
-"application that can sync photos that have a particular tag with your Flickr "
-"or Picasa Web Album web storage."
-msgstr ""
-
-#: C/f-spot.xml:717(title)
-msgid "Extend functionality"
-msgstr ""
-
-#: C/f-spot.xml:720(title)
-msgid "What extensions are"
-msgstr ""
-
-#: C/f-spot.xml:722(para)
-msgid ""
-"F-Spot extensions are means to add new functionality to the application. F-"
-"Spot supports two types of extension: exporters (which allow exporting "
-"photos to new web services or data storages) and tools (which allow new ways "
-"of color correction, duplicate photos finders etc.). Extensions are "
-"distributed in form of extension packages."
-msgstr ""
-
-#: C/f-spot.xml:729(para)
-msgid ""
-"In the best traditions of not reinventing the wheel extensions can use other "
-"extensions, which means that one extension cannot work, if another extension "
-"is not installed. This concept of dependance actually means that"
-msgstr ""
-
-#: C/f-spot.xml:736(para)
-msgid ""
-"you cannot install an extension, if the extension it depends on, is not "
-"present in the system"
-msgstr ""
-
-#: C/f-spot.xml:741(para)
-msgid "you cannot remove an extension on which some other extension depends"
-msgstr ""
-
-#: C/f-spot.xml:749(title)
-msgid "Managing extensions"
-msgstr ""
-
-#: C/f-spot.xml:751(para)
-msgid ""
-"To manage extensions choose <menuchoice><guimenu>Edit</"
-"guimenu><guimenuitem>Manage Extensions</guimenuitem></menuchoice> menu item."
-msgstr ""
-
-#: C/f-spot.xml:757(title)
-msgid "Managing extension repositories"
-msgstr ""
-
-#: C/f-spot.xml:759(para)
-msgid ""
-"Simply put, repositories are extension storages. They can be either network "
-"or local. To add a new repository click Repositories button, choose type of "
-"the repository you are about to add and provide either URL or path. If the "
-"URL or path you specified doesn't contain a description (index) file for "
-"extensions, a warning message will pop up to tell you that."
-msgstr ""
-
-#: C/f-spot.xml:766(para)
-msgid ""
-"To remove a repository click <guibutton>Repositories</guibutton> button "
-"again, choose the repository you are about to delete and click "
-"<guibutton>Delete</guibutton> button."
-msgstr ""
-
-#: C/f-spot.xml:774(title)
-msgid "Installing and updating extensions"
-msgstr ""
-
-#: C/f-spot.xml:776(para)
-msgid ""
-"To install an extension click <guibutton>Install extensions...</guibutton> "
-"button. In the newly presented dialog"
-msgstr ""
-
-#: C/f-spot.xml:782(para)
-msgid ""
-"Choose repository to install from all known repositories or just one of "
-"available repositories."
-msgstr ""
-
-#: C/f-spot.xml:788(para)
-msgid "Choose, what extension packages you want to see: All, Only new, Only updates."
-msgstr ""
-
-#: C/f-spot.xml:793(para)
-msgid ""
-"Click the <guibutton>Update</guibutton> button to update list of available "
-"extension packages by given criteria."
-msgstr ""
-
-#: C/f-spot.xml:799(para)
-msgid ""
-"Choose extensions you want to install/update, click <guibutton>Information</"
-"guibutton> to see summary on selected package, if you want to."
-msgstr ""
-
-#: C/f-spot.xml:805(para)
-msgid "Click <guibutton>Forward</guibutton> to proceed with installation."
-msgstr ""
-
-#: C/f-spot.xml:813(title)
-msgid "Enabling and disabling extensions"
-msgstr ""
-
-#: C/f-spot.xml:815(para)
-msgid ""
-"You might want to temporarily enable or disable a particular extension "
-"package, for example, if the extension is not stable enough to handle a "
-"large amount of photos or if menus get crowded with extensions."
-msgstr ""
-
-#: C/f-spot.xml:820(para)
-msgid ""
-"In the <guilabel>Manage Extensions</guilabel> dialog select the extension "
-"package and click <guibutton>Enable</guibutton> or <guibutton>Disable</"
-"guibutton>. You will have to restart F-Spot to let changes apply."
-msgstr ""
-
-#: C/f-spot.xml:828(title)
-msgid "Removing extensions"
-msgstr ""
-
-#: C/f-spot.xml:830(para)
-msgid ""
-"If you don't need an extension you can remove it from the system completely. "
-"In the <guilabel>Manage Extensions</guilabel> dialog select the extension "
-"package you want to remove and click <guibutton>Delete</guibutton>."
-msgstr ""
-
-#: C/f-spot.xml:838(title)
-msgid "Reading summary of extensions"
-msgstr ""
-
-#: C/f-spot.xml:840(para)
-msgid ""
-"Every extension package contains metadata that provides the following "
-"information about the extension:"
-msgstr ""
-
-#: C/f-spot.xml:846(para)
-msgid "Description, which usually covers puprose of the extension"
-msgstr ""
-
-#: C/f-spot.xml:851(para)
-msgid "Version"
-msgstr "Version"
-
-#: C/f-spot.xml:856(para)
-msgid "Author"
-msgstr "Autor"
-
-#: C/f-spot.xml:861(para)
-msgid "Dependencies"
-msgstr "Dependéncias"
-
-#: C/f-spot.xml:867(para)
-msgid ""
-"In the <guilabel>Manage Extensions</guilabel> dialog select the extension "
-"package you want to read summary of and click <guibutton>Information</"
-"guibutton>."
-msgstr ""
-
-#: C/f-spot.xml:875(title)
-msgid "Developing extensions"
-msgstr ""
-
-#: C/f-spot.xml:877(para)
-msgid ""
-"<ulink url=\"http://f-spot.org/Extend_F-Spot\">Extend F-Spot</ulink> "
-"document gives instructions on developing your own extensions for F-Spot."
-msgstr ""
-
-#: C/f-spot.xml:885(title)
-msgid "Shortcuts"
-msgstr "Acorchis"
-
-#: C/f-spot.xml:888(title)
-msgid "Global Shortcuts"
-msgstr ""
-
-#: C/f-spot.xml:893(entry) C/f-spot.xml:977(entry) C/f-spot.xml:1073(entry)
-#: C/f-spot.xml:1125(entry)
-msgid "Key"
-msgstr "Clau"
-
-#: C/f-spot.xml:896(entry) C/f-spot.xml:980(entry) C/f-spot.xml:1076(entry)
-#: C/f-spot.xml:1128(entry)
-msgid "Action"
-msgstr "Accion"
-
-#: C/f-spot.xml:904(keycap)
-msgid "["
-msgstr "["
-
-#: C/f-spot.xml:906(entry)
-msgid "Rotate the selected photos to the left"
-msgstr ""
-
-#: C/f-spot.xml:912(keycap)
-msgid "]"
-msgstr "]"
-
-#: C/f-spot.xml:914(entry)
-msgid "Rotate the selected photos to the right"
-msgstr ""
-
-#: C/f-spot.xml:920(keycap)
-msgid "t"
-msgstr "t"
-
-#: C/f-spot.xml:922(entry)
-msgid "View or edit tags for selected photos"
-msgstr ""
-
-#: C/f-spot.xml:928(keycap)
-msgid "F11"
-msgstr "F11"
-
-#: C/f-spot.xml:930(entry)
-msgid "Full screen view"
-msgstr ""
-
-#: C/f-spot.xml:936(keycap) C/f-spot.xml:944(keycap) C/f-spot.xml:952(keycap)
-#: C/f-spot.xml:960(keycap) C/f-spot.xml:988(keycap) C/f-spot.xml:996(keycap)
-#: C/f-spot.xml:1014(keycap) C/f-spot.xml:1039(keycap)
-#: C/f-spot.xml:1092(keycap)
-msgid "Ctrl"
-msgstr "Ctrl"
-
-#: C/f-spot.xml:936(keycap)
-msgid "I"
-msgstr "I"
-
-#: C/f-spot.xml:938(entry)
-msgid "Displays information about the photo"
-msgstr ""
-
-#: C/f-spot.xml:944(keycap)
-msgid "Equals"
-msgstr ""
-
-#: C/f-spot.xml:946(entry)
-msgid "Zoom-in"
-msgstr ""
-
-#: C/f-spot.xml:952(keycap)
-msgid "Minus"
-msgstr "Mens"
-
-#: C/f-spot.xml:954(entry)
-msgid "Zoom-out"
-msgstr ""
-
-#: C/f-spot.xml:960(keycap)
-msgid "N"
-msgstr "N"
-
-#: C/f-spot.xml:962(entry)
-msgid "Import photos"
-msgstr ""
-
-#: C/f-spot.xml:972(title)
-msgid "Browse Mode Shortcuts"
-msgstr ""
-
-#: C/f-spot.xml:988(keycap) C/f-spot.xml:997(keycap)
-msgid "A"
-msgstr "A"
-
-#: C/f-spot.xml:990(entry)
-msgid "Select all"
-msgstr "Tot seleccionar"
-
-#: C/f-spot.xml:996(keycap) C/f-spot.xml:1030(keycap)
-#: C/f-spot.xml:1039(keycap)
-msgid "Shift"
-msgstr "Shift"
-
-#: C/f-spot.xml:999(entry)
-msgid "Unselect all"
-msgstr ""
-
-#: C/f-spot.xml:1005(keycap)
-msgid "k"
-msgstr "k"
-
-#: C/f-spot.xml:1006(keycap)
-msgid "j"
-msgstr "j"
-
-#: C/f-spot.xml:1006(keycap)
-msgid "h"
-msgstr "h"
-
-#: C/f-spot.xml:1006(keycap)
-msgid "l"
-msgstr "l"
-
-#: C/f-spot.xml:1004(entry)
-msgid ""
-"Arrow keys (up, down, left, right) or <placeholder-1/>, <placeholder-2/>, "
-"<placeholder-3/>, <placeholder-4/> keys"
-msgstr ""
-
-#: C/f-spot.xml:1008(entry)
-msgid "Move focus"
-msgstr ""
-
-#: C/f-spot.xml:1013(entry)
-msgid "<placeholder-1/>-arrow key"
-msgstr ""
-
-#: C/f-spot.xml:1016(entry)
-msgid "Move the focus without changing the selection"
-msgstr ""
-
-#: C/f-spot.xml:1022(keycap) C/f-spot.xml:1144(keycap)
-msgid "Spacebar"
-msgstr ""
-
-#: C/f-spot.xml:1024(entry)
-msgid "Select or unselect the focused photo"
-msgstr ""
-
-#: C/f-spot.xml:1031(keycap)
-msgid "arrow key"
-msgstr ""
-
-#: C/f-spot.xml:1033(entry)
-msgid "Change the photo selection"
-msgstr ""
-
-#: C/f-spot.xml:1040(keycap)
-msgid "left arrow or right arrow"
-msgstr ""
-
-#: C/f-spot.xml:1042(entry)
-msgid "Add/Remove all photos in the row, in the direction pressed, to the selection"
-msgstr ""
-
-#: C/f-spot.xml:1048(keycap) C/f-spot.xml:1184(keycap)
-#: C/f-spot.xml:1188(keycap)
-msgid "v"
-msgstr "v"
-
-#: C/f-spot.xml:1050(entry)
-msgid "Pops up a larger preview of the picture pointed by the mouse"
-msgstr ""
-
-#: C/f-spot.xml:1056(keycap)
-msgid "V"
-msgstr "V"
-
-#: C/f-spot.xml:1058(entry)
-msgid ""
-"Pops up a larger preview and a color histogram of the picture pointed by the "
-"mouse"
-msgstr ""
-
-#: C/f-spot.xml:1068(title)
-msgid "Tag Shortcuts"
-msgstr ""
-
-#: C/f-spot.xml:1084(keycap)
-msgid "F2"
-msgstr "F 2"
-
-#: C/f-spot.xml:1086(entry)
-msgid "Rename selected tag"
-msgstr ""
-
-#: C/f-spot.xml:1092(keycap)
-msgid "T"
-msgstr "T"
-
-#: C/f-spot.xml:1094(entry)
-msgid "Add tags to selected photos"
-msgstr ""
-
-#: C/f-spot.xml:1099(entry) C/f-spot.xml:1107(entry)
-msgid "n/a"
-msgstr ""
-
-#: C/f-spot.xml:1102(entry)
-msgid "Drag and drop tags to move them"
-msgstr ""
-
-#: C/f-spot.xml:1110(entry)
-msgid "Type a tag's name to jump to it (only works if tag is shown/expanded)"
-msgstr ""
-
-#: C/f-spot.xml:1120(title)
-msgid "Edit Mode Shortcuts"
-msgstr ""
-
-#: C/f-spot.xml:1136(keycap)
-msgid "Page Up"
-msgstr ""
-
-#: C/f-spot.xml:1138(entry)
-msgid "Go to Previous Photo"
-msgstr ""
-
-#: C/f-spot.xml:1144(keycap)
-msgid "Page Down"
-msgstr "Pagina d'aval"
-
-#: C/f-spot.xml:1143(entry)
-msgid "<placeholder-1/>, <placeholder-2/>"
-msgstr ""
-
-#: C/f-spot.xml:1146(entry)
-msgid "Go to Next Photo"
-msgstr ""
-
-#: C/f-spot.xml:1152(keycap)
-msgid "0"
-msgstr "0"
-
-#: C/f-spot.xml:1154(entry)
-msgid "Fit the image to the screen"
-msgstr ""
-
-#: C/f-spot.xml:1160(keycap)
-msgid "1"
-msgstr "1"
-
-#: C/f-spot.xml:1162(entry)
-msgid "Zoom Factor to 1.0 (1 screen pixel per image pixel)"
-msgstr ""
-
-#: C/f-spot.xml:1168(keycap)
-msgid "2"
-msgstr "2"
-
-#: C/f-spot.xml:1170(entry)
-msgid "Zoom Factor to 2.0 (4 screen pixels per image pixel)"
-msgstr ""
-
-#: C/f-spot.xml:1176(keycap)
-msgid "Escape"
-msgstr ""
-
-#: C/f-spot.xml:1178(entry)
-msgid "Returns to Browser mode"
-msgstr ""
-
-#: C/f-spot.xml:1186(entry)
-msgid ""
-"Examine photo with magnifying glass (Loupe). Doubleclick on the Loupe, or "
-"type <placeholder-1/> again to close it."
-msgstr ""
-
-#. Put one translator per line, in the form of NAME <EMAIL>, YEAR1, YEAR2.
-#: C/f-spot.xml:0(None)
-msgid "translator-credits"
-msgstr "Yannig Marchegay (Kokoyaya) <yannig at marchegay.org>"
-
diff --git a/docs/pt_BR/f-spot.xml b/docs/pt_BR/f-spot.xml
deleted file mode 100644
index 6a96ffe..0000000
--- a/docs/pt_BR/f-spot.xml
+++ /dev/null
@@ -1,1259 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!DOCTYPE book PUBLIC "-//OASIS//DTD DocBook XML 4.1.2//EN" "http://www.oasis-open.org/docbook/xml/4.1.2/docbookx.dtd">
-<book id="f-spot" lang="pt_BR">
- <bookinfo>
- <title>O Manual do F-Spot</title>
- <abstract role="description">
- <para>Este é o manual do usuário para F-Spot, um gerenciador de fotos pessoais do GNOME.</para>
- </abstract>
- <subtitle>Este é o manual do usuário para F-Spot, um gerenciador de fotos pessoais do GNOME.</subtitle>
- <copyright>
- <year>2007-2009</year>
- <holder>Aaron Bockover, Gabriel Burt, Miguel de Icaza, Bengt Thuree</holder>
- </copyright><copyright><year>2007</year><holder>Vladimir Melo (vladimirmelo at foresightlinux.org)</holder></copyright>
- <publisher>
- <publishername>Projeto de Documentação do GNOME</publishername>
- </publisher>
- <authorgroup>
- <author>
- <firstname>Miguel</firstname>
- <surname>de Icaza</surname>
- </author>
- <author>
- <firstname>Aaron</firstname>
- <surname>Bockover</surname>
- </author>
- <author>
- <firstname>Bengt</firstname>
- <surname>Thuree</surname>
- </author>
- <author>
- <firstname>Gabriel</firstname>
- <surname>Burt</surname>
- </author>
- <author>
- <firstname>Alexandre</firstname>
- <surname>Prokoudine</surname>
- </author>
- <author role="maintainer">
- <firstname>Stephane</firstname>
- <surname>Delcroix</surname>
- </author>
- </authorgroup>
- <!--<include href="legal.xml" xmlns="http://www.w3.org/2001/XInclude"/>-->
- <revhistory>
- <revision>
- <revnumber>0.5</revnumber>
- <date>2008-09-25</date>
- </revision>
- <revision>
- <revnumber>0.4</revnumber>
- <date>2008-09-12</date>
- </revision>
- <revision>
- <revnumber>0.3</revnumber>
- <date>2007-07-26</date>
- </revision>
- </revhistory>
- </bookinfo>
-
- <chapter id="organizing">
- <title>Organizando suas fotos</title>
-
- <sect1 id="import">
- <title>Importar</title>
-
- <para>Você pode importar fotos de seu disco rígido ou de sua câmera. Quando importar suas fotos para o F-Spot de sua câmera, sempre será feita uma cópia delas, deixando você livre para limpar a memória de sua câmera. Por padrão, F-Spot fará uma cópia das fotos importadas de seu disco rígido. Desmarque a opção <guilabel>Copiar</guilabel> do diálogo de importação ou mantenha pressionado <keycap>Shift</keycap> ao arrastar as fotos para o F-Spot se não desejar copiá-las de seu disco rígido.</para>
-
- <para>
- By default, F-Spot copies your photos to the
- <filename class="directory">~/Photos</filename> folder. You can change
- the folder F-Spot uses in <guilabel>Preferences</guilabel> dialog
- (<menuchoice><guimenu>Edit</guimenu><guimenuitem>Preferences</guimenuitem>
- </menuchoice>). You can also disable physical copying of images to that
- directory and make F-Spot only reference to existing files. For that you
- need to disable checkbox <guilabel>Copy files to the Photos folder</guilabel>.
- </para>
- <para>
- If there is a tiny chance that some of your photos are already imported
- from the chosen source, you can use <guilabel>Detect duplicates</guilabel>
- option. In this case F-Spot will try to find out if exactly this image is
- already present in the database and thus new copy of it should not be
- imported.
- </para>
- <para>
- If all the photos you are importing at one time are from a particular event,
- or have some other characteristic in common, you can create a tag for them
- so you can later find them with ease. To do this, follow the instructions from
- <xref linkend="tag"/> to create a new tag, then when you are importing
- them, check the button for <guilabel>Attach Tag</guilabel> and choose the
- tag you created.
- </para>
-
- <tip>
- <para>
- F-Spot uses a database stored at
- <filename>~/.config/f-spot/photos.db</filename>. Note, to access it, use
- the sqlite3 command. You can also manually specify path to a database by
- running F-Spot with <option>-b</option> option.
- </para>
- </tip>
-
- <para>
- After an import, F-Spot will display the pictures of the latest import
- roll only. Read <xref linkend="enjoying-search"/> to learn how to deal
- with import rolls.
- </para>
- <para>
- You can also import directly from Mozilla
- <ulink url="http://www.mozilla.com/en-US/firefox/">Firefox</ulink> and
- <ulink url="http://www.mozilla.com/en-US/thunderbird/">Thunderbird</ulink> using
- <ulink url="https://addons.mozilla.org/en-US/firefox/addon/7091">Firefox</ulink>
- and <ulink url="https://addons.mozilla.org/en-US/thunderbird/addon/7011">Thunderbird</ulink>
- F-Spot importer extensions written by
- <ulink url="http://personalpages.tds.net/~cdovel/">Pizzach</ulink>.
- </para>
- </sect1>
-
- <sect1 id="edit">
- <title>Editar</title>
-
- <para>Se você der um clique duplo ou digitar enter sobre uma imagem, você acessará o modo Editar, onde pode remover olho vermelho, cortar, e ajustar brilho e cores.</para>
-
- <sect2 id="edit-versions">
- <title>Versões</title>
-
- <para>
- When you edit your photos, a new copy (called a version) is created,
- so your original is never altered. After your first edit to a photo, subsequent
- edits will modify the same version. If you want to create multiple versions
- of your photo, perhaps with different cropping or coloring, you can do so
- via the <menuchoice><guimenu>File</guimenu>
- <guimenuitem>Create new version</guimenuitem></menuchoice> option.
- </para>
- </sect2>
-
- <sect2 id="edit-crop">
- <title>Cortar</title>
-
- <para>
- Cropping an image is a great way to improve the quality of a photograph by
- change how it is framed. You crop a photo by selecting the part of the photo
- you want to keep. If you want your photo to be the exact dimensions necessary
- for a certain print size, you can constrain the kind of selection F-Spot will allow
- you to draw by choosing the appropriate size from the constraint drop down.
- See the <xref linkend="edit-remove-red-eye"/> below for details on making
- a selection on your photo.
- </para>
- <figure>
- <title>Crop tool</title>
- <mediaobject>
- <imageobject>
- <imagedata fileref="figures/f-spot-crop.png"/>
- </imageobject>
- </mediaobject>
- </figure>
- <para>Uma vez que tenha feito sua seleção de corte, você deve clicar no botão cortar abaixo da imagem para finalizar o corte. Se você estiver trabalhando com a foto original, o corte cria uma nova versão da sua foto.</para>
- </sect2>
-
- <sect2 id="edit-straighten">
- <title>Straighten</title>
-
- <para>
- Straighten effect is a tool to level a photo, quite helpful for landscapes
- taken without a tripod, when (imaginary) line of horizon is not at 0°.
- This tool rotates an image by a specified angle and automagically crops the
- resulted image, so that you always see a perfect rectangle.
- </para>
- <figure>
- <title>Straighten tool</title>
- <mediaobject>
- <imageobject>
- <imagedata fileref="figures/f-spot-straighten.png"/>
- </imageobject>
- </mediaobject>
- </figure>
- </sect2>
-
- <sect2 id="edit-adjust-colors">
- <title>Ajustar Cores</title>
-
- <para>
- To adjust the brightness, contrast, and colors of a photo, first click
- the <guibutton>Adjust the photo colors</guibutton> icon to open the
- adjustment dialog. Change then some settings and save them with
- <guibutton>OK</guibutton>.
- </para>
- <figure>
- <title>Adjust Colors tool</title>
- <mediaobject>
- <imageobject>
- <imagedata fileref="figures/f-spot-adjust-colors.png"/>
- </imageobject>
- </mediaobject>
- </figure>
- </sect2>
-
- <sect2 id="edit-auto-color">
- <title>AutoColor</title>
-
- <para>
- This effect automatically adjusts color levels to make a pretty balanced
- picture color-wise. It serves best for pictures taken with automatical
- white balance, when camera didn't manage to do the job well.
- </para>
- <figure>
- <title>AutoColor</title>
- <mediaobject>
- <imageobject>
- <imagedata fileref="figures/f-spot-autocolor.png"/>
- </imageobject>
- </mediaobject>
- </figure>
- </sect2>
-
- <sect2 id="edit-desaturate">
- <title>Desaturate</title>
-
- <para>
- To make a colorful photo a black and white one, open a photo of choice
- and press <guibutton>Desaturate</guibutton> button.
- </para>
- <figure>
- <title>Desaturation tool</title>
- <mediaobject>
- <imageobject>
- <imagedata fileref="figures/f-spot-desaturate.png"/>
- </imageobject>
- </mediaobject>
- </figure>
- </sect2>
-
- <sect2 id="edit-sepia">
- <title>Sepia</title>
-
- <para>
- To make a colorful photo look like an old-style picture in sepia tones,
- open a photo of choice and press <guibutton>Sepia</guibutton> button.
- </para>
- <figure>
- <title>Desaturation tool</title>
- <mediaobject>
- <imageobject>
- <imagedata fileref="figures/f-spot-sepia.png"/>
- </imageobject>
- </mediaobject>
- </figure>
- </sect2>
-
- <sect2 id="edit-remove-red-eye">
- <title>Remover Olhos Vermelhos</title>
-
- <para>
- To remove redeye from a photo, you need to select a zone containing
- the eyes. You may want to zoom in on the image to accurately select
- the eyes in the photo. You should be able to correct both eyes on the
- same person in one shot, or even the eyes from multiple people at once.
- If this doesn't work for you, or the selected zone contains some vivid
- red parts (lips, ...) you'll probably have to correct one red eye at a time.
- </para>
- <para>Para fazer sua seleção, clique em um canto do retângulo que será sua seleção, e arraste seu mouse para o canto da diagonal e libere. Você pode redimensionar sua seleção arrastando suas bordas, ou movê-la clicando no centro e arrastando para onde quiser.</para>
- <para>
- Once you have selected a zone, you can remove the red from it by
- clicking the red-eye button beneath the photo.
- </para>
- <figure>
- <title>Red-Eye tool</title>
- <mediaobject>
- <imageobject>
- <imagedata fileref="figures/f-spot-red-eye.png"/>
- </imageobject>
- </mediaobject>
- </figure>
- <tip>
- <para>
- You can change the threshold for redeyes detection by changing
- the gconf key
- <filename class="directory">/apps/f-spot/edit/redeye_threshold</filename>.
- </para>
- </tip>
- </sect2>
-
- <sect2 id="edit-soft-focus">
- <title>Soft Focus</title>
-
- <para>
- In photography sharpening one region of a picture, while blurring
- all the rest, is a way to make an emphasis and grab attention.
- It is achieved by using a lens that allows shooting with a short
- distance in front of and beyond the subject that appears to be in
- focus. Soft focus effect is a way to emulate such a lens.
- </para>
- <figure>
- <title>Soft Focus tool</title>
- <mediaobject>
- <imageobject>
- <imagedata fileref="figures/f-spot-soft-focus.png"/>
- </imageobject>
- </mediaobject>
- </figure>
- <para>
- Click to choose central point of the area you want to be in focus
- and adjust amount of blurring, then click <guibutton>OK</guibutton>.
- </para>
- </sect2>
-
- <sect2 id="edit-sharpen">
- <title>Sharpen</title>
-
- <para>
- Out-of-focus photographs and most digitized images often need a
- sharpness correction. The Unsharp Mask effect sharpens edges of
- the elements without increasing noise or blemish. To sharpen a
- photo choose <menuchoice><guimenu>Edit</guimenu>
- <guimenuitem>Sharpen...</guimenuitem></menuchoice> and specify the
- following values:
- </para>
-
- <itemizedlist>
- <listitem>
- <para>
- <parameter class="option">Amount</parameter> — strength of sharpening.
- </para>
- </listitem>
- <listitem>
- <para>
- <parameter class="option">Radius</parameter> — how many pixels on either
- side of an edge will be affected by sharpening. High resolution images
- allow higher radius.
- </para>
- </listitem>
- <listitem>
- <para>
- <parameter class="option">Threshold</parameter> — the minimum difference
- in pixel values that indicates an edge where sharpen must be applied.
- This helps avoiding creation of blemishes in face, sky or water surface.
- </para>
- </listitem>
- </itemizedlist>
- </sect2>
-
- <sect2 id="edit-describe">
- <title>Descrever</title>
-
- <para>Você também pode colocar a descrição da imagem clicando na caixa de entrada de texto abaixo da imagem e digitando.</para>
- <para>Uma vez que tenha feito sua seleção de corte, você deve clicar no botão cortar abaixo da imagem para finalizar o corte. Se você estiver trabalhando com a foto original, o corte cria uma nova versão da sua foto.</para>
- </sect2>
-
- <sect2 id="edit-adjust-time">
- <title>Adjust Time</title>
-
- <para>
- In both 'browse' or 'edit' modes, you can adjust the time of one
- or multiple pictures (<menuchoice><guimenu>Edit</guimenu>
- <guimenuitem>Adjust Time</guimenuitem></menuchoice>). Adjusting
- the time of multiple pictures at once helps you shift all an import
- roll if, e.g. the time on your camera is badly set or if you forgot
- to change it according to DST.
- </para>
- </sect2>
- </sect1>
-
- <sect1 id="tag">
- <title>Etiqueta</title>
- <para>F-Spot lhe possibilita organizar e curtir suas fotos ao associá-las às várias etiquetas personalizáveis. Uma etiqueta é basicamente um rótulo. F-Spot vem com etiquetas padronizadas de início; você é livre para alterá-las e adicionar novas. Por exemplo, se você quiser criar uma etiqueta para um evento especifico, você pode criar uma etiqueta com o mesmo nome do evento na categoria Eventos.</para>
- <para>Existem várias formas de etiquetar fotos:</para>
- <itemizedlist>
- <listitem>
- <para>arraste e solte a(s) foto(s) sobre a etiqueta</para>
- </listitem>
- <listitem>
- <para>arraste e solte a etiqueta sobre a(s) foto(s)</para>
- </listitem>
- <listitem>
- <para>através do menu de contexto da foto</para>
- </listitem>
- <listitem>
- <para>através dos menus Etiquetas e Editar</para>
- </listitem>
- <listitem>
- <para>
- by typing them in. Press <keycap>t</keycap> to pop up the tag
- entry bar. Here you can enter the tags, separated by commas.
- </para>
- <para>
- You can also use auto-completion in this entry bar: After
- entering the beginning of a tag name, press
- <keycap>Tab</keycap> to see the first possible completion. You can
- cycle between other possible completions by pressing
- <keycap>Tab</keycap> again, and backwards with
- <keycombo action="simul"><keycap>Shift</keycap><keycap>Tab</keycap></keycombo>.
- To confirm the suggested completion and enter a new tag, press
- <keycap>,</keycap>. By pressing <keycap>Enter</keycap> you
- leave the tag entry bar, possibly confirming the current
- completion. To abort the auto completion, just keep on typing.
- </para>
- </listitem>
- </itemizedlist>
- <para>A primeira foto que você associar a uma etiqueta será usada para o ícone da etiqueta.Você pode sempre editar o nome da etiqueta, da etiqueta principal e do ícone através do menu de contexto escolhendo <guilabel>Editar etiqueta</guilabel>.</para>
- <para>Você pode alterar uma etiqueta principal arrastando-a e soltando-a onde desejar. Você pode também editar o nome da etiqueta selecionando-a e pressionando <keycap>F2</keycap>. Por último, se você tem o controle árvore de etiqueta ativo (por exemplo, acabou de clicar numa etiqueta), pode iniciar a digitar o nome de uma etiqueta, e todas as etiquetas expandidas na lista serão procuradas e você pulará para aquelas correspondentes.</para>
-
- <para>
- You can also change size of tag icons in the sidebar or even make tag
- icons invisible by selecting preferred option from <menuchoice>
- <guimenu>View</guimenu><guimenuitem>Tag Icons</guimenuitem></menuchoice>
- menu.
- </para>
-
- <tip>
- <para>
- F-Spot can write tags as metadata fields into JPEG files. Tags for
- various RAW files, PNG, TIFF, and others are written to F-Spot's
- database. You will have to re-tag these files if you re-import your
- collection.
- </para>
- </tip>
- </sect1>
- </chapter>
-
- <chapter id="enjoying">
- <title>Curtindo suas fotos</title>
- <sect1 id="enjoying-browse">
- <title>Navegar</title>
- <para>Você pode usar o controle deslizante para navegar pelas suas fotos por mês ou diretório. Para alterar essa configuração, vá em<menuchoice><guimenu>Ver</guimenu><guimenuitem>Ordenar por</guimenuitem></menuchoice>.</para>
- </sect1>
- <sect1 id="enjoying-search">
- <title>Pesquisar</title>
-
- <para>
- F-Spot uses search filters to help you better define search criteria.
- </para>
-
- <sect2 id="enjoying-search-tags">
- <title>Tags</title>
-
- <para>Você pode iniciar uma pesquisa dando um clique duplo ou ativando uma etiqueta da lista de etiquetas. Como alternativa, pode mostrar a barra de pesquisa com <menuchoice><guimenu>Localizar</guimenu><guimenuitem>Mostrar Barra de Pesquisa</guimenuitem></menuchoice>. Com a barra de pesquisa exibida, você pode arrastar a etiqueta para a barra de pesquisa.</para>
- <para>Para localizar fotos que estejam marcadas por duas etiquetas, ative a primeira na exibição de etiqueta ou arraste-a para a barra de pesquisa, então arraste a segunda etiqueta e solte-a sobre a primeira. Você pode também usar o menu de contexto da segunda etiqueta na exibição de etiqueta, ou usar o menu <guimenu>Localizar</guimenu>, e escolher <guimenuitem>Localizar Com...</guimenuitem> e selecionar a primeira etiqueta (ou grupo de etiquetas).</para>
- <para>Você pode arrastar o ícone da etiqueta na barra de pesquisa para alterar de encontrando por essa e outra etiqueta para encontrando por essa ou outra etiqueta.</para>
- <para>Você pode procurar por fotos que não tenham uma etiqueta específica ao dar um clique duplo na etiqueta na barra de pesquisa. Como alternativa, pode abrir o menu de contexto da etiqueta na barra de pesquisa e selecionar <guimenuitem>Excluir</guimenuitem>.</para>
- <para>Para remover a etiqueta da barra de pesquisa, arraste-a para fora da barra de pesquisa, ou vá ao menu de contexto e selecione <guimenuitem>Remover</guimenuitem>.</para>
- <para>Por padrão, fotos etiquetadas como <emphasis>Ocultas</emphasis> não serão mostradas. Você deve incluir explicitamente a etiqueta <emphasis>Ocultas</emphasis> em sua pesquisa para mostrar essas fotos.</para>
- </sect2>
-
- <sect2 id="enjoying-search-import-rolls">
- <title>Import Rolls</title>
- <para>
- F-Spot remembers what pictures were imported every now and then. Use
- <menuchoice><guimenu>Find</guimenu><guisubmenu>Import Roll</guisubmenu>
- <guimenuitem>Last import roll</guimenuitem></menuchoice> to limit search
- to last importing session or use <menuchoice><guimenu>Find</guimenu>
- <guisubmenu>Import Roll</guisubmenu><guimenuitem>Select Import Rolls...</guimenuitem>
- </menuchoice> to make a finer selection of imported photos:
- </para>
- <itemizedlist>
- <listitem>
- <para>
- <parameter class="option">At</parameter> — to select photos from a particular importing session
- </para>
- </listitem>
- <listitem>
- <para>
- <parameter class="option">After</parameter> — to select all photos imported begining with a particular importing session
- </para>
- </listitem>
- <listitem>
- <para>
- <parameter class="option">Between</parameter> — to select all photos imported between two particular importing sessions
- </para>
- </listitem>
- </itemizedlist>
- <para>
- Every time you change settings of the filter, the amount of selected photos
- will appear in the bottom part of the dialog.
- </para>
- <para>
- When you apply Import Roll filter, in the Find bar you will see
- <guilabel>Find: Import Roll</guilabel>. Now you can add some other
- filter to finetune your selection.
- </para>
- <para>
- If you don't need the Import Roll filter anymore, choose <menuchoice>
- <guimenu>Find</guimenu><guisubmenu>Import Roll</guisubmenu>
- <guimenuitem>Clear roll filter</guimenuitem></menuchoice> to remove
- Import Roll from search criteria. You can also click the close button
- (<guibutton>X</guibutton>) of the search bar to discard all the current
- search options.
- </para>
- <tip>
- <para>
- The number of displayed rolls in the dialog is defined by the gconf key
- <filename class="directory">/apps/f-spot/import/gui_roll_history</filename>.
- Default value is 10.
- </para>
- </tip>
- </sect2>
-
- <sect2 id="enjoying-search-type-to-find">
- <title>Type-to-find</title>
- <para>Existe também uma entrada digite-para-localizar. Pressione <keycap>/</keycap> para abri-la. Não é possível usar ao mesmo tempo como barra de localização. Você pode digitar consultas como "EtiquetaA e (EtiquetaB ou (EtiquetaC e EtiquetaD))". Em qualquer ponto, se F-Spot reconhecer o que você digitou como uma consulta válida, irá atualizar sua pesquisa. Ainda não há suporte para o operador <emphasis>não</emphasis>.</para>
-
- <para>
- This function will also search for the typed text into photos comments and filename.
- </para>
- </sect2>
- </sect1>
-
- <sect1 id="enjoying-fullscreen-mode-and-slideshows">
- <title>Modo Tela Cheia e Apresentação de Slide</title>
- <para>Para menos distrações e maior exibição, você pode ver suas fotos em modo tela cheia. Você controla quando mostrar a próxima foto ou retornar à anterior. Entre em modo tela cheia pressionando <keycap>F11</keycap> a qualquer hora ou pressionando o botão na barra de ferramentas.</para>
- <figure>
- <title>Tela Cheia</title>
- <mediaobject>
- <imageobject>
- <imagedata fileref="figures/f-spot-fullscreen.png"/>
- </imageobject>
- </mediaobject>
- </figure>
- <para>No modo apresentação de slides, você pode se acomodar e ver suas fotos como se elas fossem apresentadas para você. Pode iniciar a apresentação ao apertar o botão na barra de ferramentas.</para>
- <figure>
- <title>Apresentação de Slide</title>
- <mediaobject>
- <imageobject>
- <imagedata fileref="figures/f-spot-slideshow.png"/>
- </imageobject>
- </mediaobject>
- </figure>
- </sect1>
- </chapter>
-
- <chapter id="sharing">
- <title>Compartilhando suas fotos</title>
-
- <abstract>
- <para>Existem muitas formas de compartilhar suas fotos usando F-Spot. Todos os métodos a seguir compartilharão apenas as fotos selecionadas quando forem executados.</para>
- </abstract>
-
- <sect1 id="sharing-e-mail">
- <title>E-mail</title>
- <para>Enviar por e-mail suas fotos diretamente do F-Spot com o menu <menuchoice><guimenu>Arquivo</guimenu><guimenuitem>Enviar E-mail</guimenuitem></menuchoice> .</para>
- <note>
- <title>Note 1</title>
- <para>
- The email program used for this is defined at the GNOME level.
- You can change the default e-mailer for your user using the
- <application>Preferred Applications</application> tool in
- <menuchoice><guimenu>System</guimenu>
- <guisubmenu>Preferences</guisubmenu></menuchoice>.
- </para>
- </note>
- <note>
- <title>Note 2</title>
- <para>
- If some of the photos you'd like to send by email are in a format
- that F-Spot can't write (e.g. RAW images), the size selection dialog
- will become insensitive and the originals will be sent.
- </para>
- </note>
- <tip>
- <para>
- If you're sending resized pictures, F-Spot will keep the modified versions
- somewhere in the <filename class="directory">/tmp</filename> directory for
- 30 seconds. It's not an issue with evolution, which makes it's own local
- copy of the attachments, but could be a bit shorter if you're using Thunderbird.
- You can change the delay by editing the gconf key
- <filename class="directory">/apps/f-spot/export/email/delete_timeout_seconds</filename>.
- </para>
- </tip>
- </sect1>
-
- <sect1 id="sharing-print">
- <title>Imprimir</title>
- <para>Imprimir suas fotos com o menu <menuchoice><guimenu>Arquivo</guimenu><guimenuitem>Imprimir</guimenuitem></menuchoice> .</para>
- </sect1>
-
- <sect1 id="sharing-burn-to-cd">
- <title>Gravar para CD</title>
- <para>
- Burn your photos to CD or DVD with the <menuchoice><guimenu>File</guimenu>
- <guisubmenu>Export</guisubmenu><guimenuitem>Export to CD</guimenuitem>
- </menuchoice> menu.
- </para>
- </sect1>
-
- <sect1 id="website-gallery-folder">
- <title>Gerar uma Galeria Online ou Pasta</title>
- <para>O recurso <menuchoice><guimenu>Arquivo</guimenu><guimenuitem>Exportar</guimenuitem><guimenuitem>Exportar para Pasta</guimenuitem></menuchoice> lhe permite três maneiras de exportar suas imagens.</para>
- <itemizedlist>
- <listitem>
- <para><guilabel>Usar Original</guilabel> exporta suas fotos prontas para serem usadas com o software livre <ulink url="http://jimmac.musichall.cz/original.php"> Original Photo Gallery</ulink> de Jakub Steiner. Se não estiver certo desta opção, provavelmente não é a apropriada para você.</para>
- </listitem>
- <listitem>
- <para><guilabel>Usar arquivos HTML estáticos</guilabel> exporta suas fotos para um site interativo, pronto para você enviar.</para>
- </listitem>
- <listitem>
- <para><guilabel>Arquivos Simples</guilabel> exporta suas imagens como arquivos para dentro de diretórios, sem colocá-las em uma galeria.</para>
- </listitem>
- </itemizedlist>
- </sect1>
-
- <sect1 id="sharing-flickr-or-php-gallery">
- <title>Post to your online galleries</title>
- <para>
- If you use Flickr, SmugMug, 23hq, Tabblo, Facebook, Zooomr or Picasa Web Album, you can post your files
- directly from F-Spot with the <menuchoice><guimenu>File</guimenu>
- <guisubmenu>Export</guisubmenu></menuchoice> menu, choosing corresponding submenu item.
- </para>
- <para>Se você usa o programa PHP conhecido como <ulink url="http://gallery.sourceforge.net/"> Gallery</ulink>, você pode postar suas fotos para um álbum existente com o menu <menuchoice><guimenu>Arquivo</guimenu><guimenuitem>Exportar</guimenuitem><guimenuitem>Exportar para Galeria Online</guimenuitem></menuchoice> . Você deve primeiro habilitar o módulo Remoto dentro de sua instalação do Gallery.</para>
- <note>
- <title>Note for Gallery 2.2 users</title>
- <para>
- The Remote plugin for Gallery should be 1.0.8 or newer.
- </para>
- </note>
- <para>
- <ulink url="http://pennave.sourceforge.net">PennAve</ulink> is a Python
- web-application that directly uses F-Spot's database to present a dynamic
- gallery of your photos and tags.
- </para>
- <para>
- <ulink url="http://www.conduit-project.org">Conduit</ulink> is an application
- that can sync photos that have a particular tag with your Flickr or Picasa
- Web Album web storage.
- </para>
- </sect1>
- </chapter>
-
- <chapter id="cms">
- <title>Color management</title>
-
- <sect1 id="cms-what-is-cms">
- <title>What's color management</title>
-
- <para>
- When you capture a photo and look at it on a display, it looks different than
- on a camera's preview display or on any other display. It will also look
- different when you print it. This is because every device has unique color
- reproduction capabilities.
- </para>
-
- <para>
- Color management system (CMS) is a tool to achieve reliable color reproduction
- for both display and output (e.g. a printer). A CMS relies on color profiles
- to map original colors to the color that a device can reproduce so that colors
- will appear the same way everywhere — on a computer LCD monitor, on a print
- from your local photolab etc.
- </para>
- </sect1>
-
- <sect1 id="cms-what-is-icc-profile">
- <title>What's a color profile</title>
-
- <para>
- A color profile is a file with either .icc (thus its is often called an ICC
- profile) or .icm extension that describes how device's colors correspond to a
- universal description of colors.
- </para>
-
- <para>
- There are several types of profiles:
- </para>
-
- <itemizedlist>
- <listitem>
- <para>
- Input device profile. It's profile for a camera or a profile that an
- application like XSane embeds into a scanned image.
- </para>
- </listitem>
- <listitem>
- <para>
- Working space profile. It's a profile that describes color space in
- which all operations are done inside an application. Usually very wide
- gamut profiles like AdobeRGB1998 or ProPhotoRGB are used for that.
- </para>
- </listitem>
- <listitem>
- <para>
- Display profile. It's a profile for a monitor.
- </para>
- </listitem>
- <listitem>
- <para>
- Output profile. This is usually a profile for you printer.
- </para>
- </listitem>
- </itemizedlist>
-
- <para>
- Currently F-Spot allows setting only display and output profiles.
- All color operations are done in sRGB color space.
- </para>
- </sect1>
-
- <sect1 id="cms-how-to-get-icc-profile">
- <title>How to get my screen/printer color profile </title>
-
- <para>
- There are few ways to get a color profile.
- </para>
-
- <sect2 id="cms-icc-from-cd-or-internet">
- <title> From CD or Internet </title>
-
- <para>
- Many hardware manufacturers put color profiles into CD in the bundle.
- If you have one (from monitor or printer), you can use it. Or you can
- download it from the Internet (usually, from support section of the
- manufacturer's web site). Some camera manufacturers (Nikon, Canon)
- also provide ICC profiles.
- </para>
- </sect2>
-
- <sect2 id="cms-icc-from-calibrating-and-profiling">
- <title>Calibrating and profiling</title>
-
- <para>
- Best results can be achieved by calibrating and profiling devices with
- a measurement device. It is not so difficult, but it means that you need
- a spectrophotometer to do all measurements and create an ICC profile.
- </para>
-
- <para>
- If you are on Windows or Mac OS X, you can use manufacturer's software
- coming with a spectrophotometer. On Linux you will have to use either
- <ulink url="http://www.argyllcms.com">Argyll</ulink>, which is a set of
- versatile command line tools, or
- <ulink url="http://lprof.sourceforge.net/">LProf</ulink>, which has a
- graphical user interface.
- </para>
- <para>
- Please refer to documentation of third party hardware and software
- vendors for details.
- </para>
- </sect2>
-
- <sect2 id="cms-icc-from-embedding">
- <title>Embedding</title>
-
- <para>
- Image formats themselves (such as TIFF, JPEG, PNG...) may contain embedded
- color profiles. If color management is enabled, F-Spot looks for such
- embedded profiles and takes them into consideration.
- </para>
- </sect2>
- </sect1>
-
- <sect1 id="cms-how-to-use">
- <title>How to use color management in F-Spot</title>
-
- <para>
- Color management in F-Spot can use only RGB profiles at this time
- (and you can't see other profiles in the F-Spot).
- </para>
-
- <itemizedlist>
- <listitem>
- <para>
- Copy your color profiles into the
- <filename class="directory">/usr/share/color/icc</filename> or
- <filename class="directory">/usr/local/share/color/icc</filename>
- directory.
- </para>
- </listitem>
- <listitem>
- <para>
- Enable the color management with the <menuchoice>
- <guimenu>Edit</guimenu><guimenuitem>Preferences</guimenuitem>
- </menuchoice> menu.
- </para>
- </listitem>
- <listitem>
- <para>
- Select <guilabel>Display</guilabel> and <guilabel>Output</guilabel>
- profiles.
- </para>
- </listitem>
- </itemizedlist>
-
- <tip>
- <para>
- You can use <ulink url="http://burtonini.com/blog/computers/xicc">xicc</ulink>
- to load ICC profile to display and use the loaded profile from F-Spot.
- Just mark the checkbox <guilabel>Try to use the system display
- profile</guilabel>.
- </para>
- </tip>
- </sect1>
- </chapter>
-
- <chapter id="extend">
- <title>Extend functionality</title>
-
- <sect1 id="extend-what-extensions-are">
- <title>What extensions are</title>
-
- <para>
- F-Spot extensions are means to add new functionality to the application.
- F-Spot supports two types of extension: exporters (which allow exporting
- photos to new web services or data storages) and tools (which allow new
- ways of color correction, duplicate photos finders etc.). Extensions are
- distributed in form of extension packages.
- </para>
- <para>
- In the best traditions of not reinventing the wheel extensions can use other
- extensions, which means that one extension cannot work, if another extension
- is not installed. This concept of dependance actually means that
- </para>
- <itemizedlist>
- <listitem>
- <para>
- you cannot install an extension, if the extension it depends on, is not present in the system
- </para>
- </listitem>
- <listitem>
- <para>
- you cannot remove an extension on which some other extension depends
- </para>
- </listitem>
- </itemizedlist>
- </sect1>
-
- <sect1 id="extend-managing-extensions">
- <title>Managing extensions</title>
-
- <para>
- To manage extensions choose <menuchoice><guimenu>Edit</guimenu>
- <guimenuitem>Manage Extensions</guimenuitem></menuchoice> menu item.
- </para>
-
- <sect2 id="extend-managing-extensions-managing-extension-repositories">
- <title>Managing extension repositories</title>
-
- <para>
- Simply put, repositories are extension storages. They can be either network
- or local. To add a new repository click Repositories button, choose type of
- the repository you are about to add and provide either URL or path. If the URL
- or path you specified doesn't contain a description (index) file for extensions,
- a warning message will pop up to tell you that.
- </para>
- <para>
- To remove a repository click <guibutton>Repositories</guibutton> button again,
- choose the repository you are about to delete and click
- <guibutton>Delete</guibutton> button.
- </para>
- </sect2>
-
- <sect2 id="extend-managing-extensions-installing-and-updating-extensions">
- <title>Installing and updating extensions</title>
-
- <para>
- To install an extension click <guibutton>Install extensions...</guibutton> button.
- In the newly presented dialog
- </para>
- <orderedlist>
- <listitem>
- <para>
- Choose repository to install from all known repositories or just one of
- available repositories.
- </para>
- </listitem>
- <listitem>
- <para>
- Choose, what extension packages you want to see: All, Only new, Only updates.
- </para>
- </listitem>
- <listitem>
- <para>
- Click the <guibutton>Update</guibutton> button to update list of available
- extension packages by given criteria.
- </para>
- </listitem>
- <listitem>
- <para>
- Choose extensions you want to install/update, click <guibutton>Information</guibutton>
- to see summary on selected package, if you want to.
- </para>
- </listitem>
- <listitem>
- <para>
- Click <guibutton>Forward</guibutton> to proceed with installation.
- </para>
- </listitem>
- </orderedlist>
- </sect2>
-
- <sect2 id="extend-managing-extensions-enabling-and-disabling-extensions">
- <title>Enabling and disabling extensions</title>
-
- <para>
- You might want to temporarily enable or disable a particular extension package,
- for example, if the extension is not stable enough to handle a large amount of
- photos or if menus get crowded with extensions.
- </para>
- <para>
- In the <guilabel>Manage Extensions</guilabel> dialog select the extension
- package and click <guibutton>Enable</guibutton> or <guibutton>Disable</guibutton>.
- </para>
- </sect2>
-
- <sect2 id="extend-managing-extensions-removing-extensions">
- <title>Removing extensions</title>
-
- <para>
- If you don't need an extension you can remove it from the system completely.
- In the <guilabel>Manage Extensions</guilabel> dialog select the extension
- package you want to remove and click <guibutton>Delete</guibutton>.
- </para>
- </sect2>
-
- <sect2 id="extend-managing-extensions-reading-summary-of-extensions">
- <title>Reading summary of extensions</title>
-
- <para>
- Every extension package contains metadata that provides the following information about the extension:
- </para>
-
- <orderedlist>
- <listitem>
- <para>
- Description, which usually covers puprose of the extension
- </para>
- </listitem>
- <listitem>
- <para>
- Version
- </para>
- </listitem>
- <listitem>
- <para>
- Author
- </para>
- </listitem>
- <listitem>
- <para>
- Dependencies
- </para>
- </listitem>
- </orderedlist>
-
- <para>
- In the <guilabel>Manage Extensions</guilabel> dialog select the extension
- package you want to read summary of and click <guibutton>Information</guibutton>.
- </para>
- </sect2>
- </sect1>
-
- <sect1 id="extend-developing-extensions">
- <title>Developing extensions</title>
-
- <para>
- <ulink url="http://f-spot.org/Extend_F-Spot">Extend F-Spot</ulink> document
- gives instructions on developing your own extensions for F-Spot.
- </para>
- </sect1>
- </chapter>
-
- <chapter id="shortcuts">
- <title>Atalhos</title>
-
- <sect1 id="Global-Shortcuts">
- <title>Atalhos Globais</title>
- <informaltable frame="all">
- <tgroup cols="2">
- <thead>
- <row>
- <entry>Tecla</entry>
- <entry>Ação</entry>
- </row>
- </thead>
- <tbody>
- <row>
- <entry>
- <keycap>[</keycap>
- </entry>
- <entry>Rotacionar as fotos selecionadas à esquerda</entry>
- </row>
- <row>
- <entry>
- <keycap>]</keycap>
- </entry>
- <entry>Rotacionar as fotos selecionadas à direita</entry>
- </row>
- <row>
- <entry>
- <keycap>Del</keycap>
- </entry>
- <entry>
- Remove selected photos from F-Spot's catalogue
- </entry>
- </row>
- <row>
- <entry>
- <keycombo><keycap>Shift</keycap><keycap>Del</keycap></keycombo>
- </entry>
- <entry>
- Delete selected photos permanently from the drive. If possible, they will moved to trash.
- </entry>
- </row>
-
- <row>
- <entry>
- <keycap>t</keycap>
- </entry>
- <entry>Ver ou editar etiquetas para fotos selecionadas</entry>
- </row>
- <row>
- <entry>
- <keycap>F11</keycap>
- </entry>
- <entry>Visualização tela cheia</entry>
- </row>
- <row>
- <entry>
- <keycombo><keycap>Ctrl</keycap><keycap>I</keycap></keycombo>
- </entry>
- <entry>Exibir informações sobre a foto</entry>
- </row>
- <row>
- <entry>
- <keycombo><keycap>Ctrl</keycap><keycap>Igual</keycap></keycombo>
- </entry>
- <entry>Zoom-in</entry>
- </row>
- <row>
- <entry>
- <keycombo><keycap>Ctrl</keycap><keycap>Menos</keycap></keycombo>
- </entry>
- <entry>Zoom-out</entry>
- </row>
- <row>
- <entry>
- <keycombo><keycap>Ctrl</keycap><keycap>N</keycap></keycombo>
- </entry>
- <entry>Importar fotos</entry>
- </row>
- <row>
- <entry>
- <keycombo><keycap>Alt</keycap><keycap>0-5</keycap></keycombo>
- </entry>
- <entry>
- Alt plus a number from 0 to 5 rate the selected picture(s)
- </entry>
- </row>
- </tbody>
- </tgroup>
- </informaltable>
- </sect1>
-
- <sect1 id="shortcuts-browse-mode">
- <title>Atalhos do Modo de Navegação</title>
- <informaltable frame="all">
- <tgroup cols="2">
- <thead>
- <row>
- <entry>Tecla</entry>
- <entry>Ação</entry>
- </row>
- </thead>
- <tbody>
- <row>
- <entry>
- <keycombo><keycap>Ctrl</keycap><keycap>A</keycap></keycombo>
- </entry>
- <entry>Selecionar todas</entry>
- </row>
- <row>
- <entry>
- <keycombo><keycap>Ctrl</keycap><keycap>Shift</keycap>
- <keycap>A</keycap></keycombo>
- </entry>
- <entry>Desmarcar todas</entry>
- </row>
- <row>
- <entry>
- Arrow keys or <keycap>H</keycap>, <keycap>J</keycap>,
- <keycap>K</keycap>, <keycap>L</keycap>
- </entry>
- <entry>Mover foco</entry>
- </row>
- <row>
- <entry>
- <keycap>Ctrl</keycap>-Arrow key
- </entry>
- <entry>Mover o foco sem alterar a seleção</entry>
- </row>
- <row>
- <entry>
- <keycap>Barra de espaço</keycap>
- </entry>
- <entry>Selecionar ou desmarcar a foto ativa</entry>
- </row>
- <row>
- <entry>
- <keycombo><keycap>Shift</keycap>
- <keycap>Arrow key</keycap></keycombo>
- </entry>
- <entry>Alterar a seleção da foto</entry>
- </row>
- <row>
- <entry>
- <keycombo><keycap>Ctrl</keycap><keycap>Shift</keycap>
- <keycap>Left arrow or Right arrow</keycap></keycombo>
- </entry>
- <entry>Adicionar/Remover todas as fotos na linha, na direção pressionada, para a seleção</entry>
- </row>
- <row>
- <entry>
- <keycap>V</keycap>
- </entry>
- <entry>Abre janela instantânea para uma visualização maior da foto apontada pelo mouse</entry>
- </row>
- <row>
- <entry>
- <keycombo><keycap>Shift</keycap><keycap>V</keycap></keycombo>
- </entry>
- <entry>Abre janela instantânea para uma visualização maior de um histograma da foto apontada pelo mouse</entry>
- </row>
- </tbody>
- </tgroup>
- </informaltable>
- </sect1>
-
- <sect1 id="shortcuts-tag">
- <title>Atalhos de Etiquetas</title>
- <informaltable frame="all">
- <tgroup cols="2">
- <thead>
- <row>
- <entry>Tecla</entry>
- <entry>Ação</entry>
- </row>
- </thead>
- <tbody>
- <row>
- <entry>
- <keycap>F2</keycap>
- </entry>
- <entry>Renomear etiqueta selecionada</entry>
- </row>
- <row>
- <entry>
- <keycombo><keycap>Ctrl</keycap><keycap>T</keycap></keycombo>
- </entry>
- <entry>Adicionar etiquetas às fotos selecionadas</entry>
- </row>
- <row>
- <entry>n/a</entry>
- <entry>Arraste e solte etiquetas para movê-las</entry>
- </row>
- <row>
- <entry>n/a</entry>
- <entry>Digite o nome da etiqueta para pular até ela (apenas se etiqueta for mostrada/expandida)</entry>
- </row>
- </tbody>
- </tgroup>
- </informaltable>
- </sect1>
-
- <sect1 id="shortcuts-edit-mode">
- <title>Atalhos do Modo de Edição</title>
- <informaltable frame="all">
- <tgroup cols="2">
- <thead>
- <row>
- <entry>Tecla</entry>
- <entry>Ação</entry>
- </row>
- </thead>
- <tbody>
- <row>
- <entry>
- <keycap>Page Up</keycap>, <keycap>Backspace</keycap>, <keycap>B</keycap>
- </entry>
- <entry>Ir para a Foto Anterior</entry>
- </row>
- <row>
- <entry>
- <keycap>Page Down</keycap>, <keycap>Barra de espaço</keycap>, <keycap>N</keycap>
- </entry>
- <entry>Ir para a Foto Seguinte</entry>
- </row>
- <row>
- <entry>
- Arrow keys or <keycap>H</keycap>, <keycap>J</keycap>,
- <keycap>K</keycap>, <keycap>L</keycap>
- </entry>
- <entry>
- Go to Previous/Next photo or move around a zoomed photo
- </entry>
- </row>
- <row>
- <entry>
- <keycap>R</keycap>
- </entry>
- <entry>
- Go to a random photo
- </entry>
- </row>
- <row>
- <entry>
- <keycap>f</keycap>
- </entry>
- <entry>Visualização tela cheia</entry>
- </row>
- <row>
- <entry>
- <keycap>0</keycap>
- </entry>
- <entry>Ajustar a imagem para a tela</entry>
- </row>
- <row>
- <entry>
- <keycap>1</keycap>
- </entry>
- <entry>Fator de Zoom para 1.0 (1 pixel da tela por pixel da imagem)</entry>
- </row>
- <row>
- <entry>
- <keycap>2</keycap>
- </entry>
- <entry>Fator de Zoom para 2.0 (4 pixels da tela por pixel da imagem)</entry>
- </row>
- <row>
- <entry>
- <keycap>Escapar</keycap>
- </entry>
- <entry>Retorna ao modo Navegador</entry>
- </row>
- <row>
- <entry>
- <keycap>V</keycap>
- </entry>
- <entry>
- Examine photo with magnifying glass (Loupe). Doubleclick on the
- Loupe, or type <keycap>v</keycap> again to close it.
- </entry>
- </row>
- <row>
- <entry>
- <keycap>Shift</keycap>-Mousewheel
- </entry>
- <entry>
- Faster filmstrip scrolling
- </entry>
- </row>
- <row>
- <entry>
- <keycap>i</keycap>
- </entry>
- <entry>
- Toggle infobox visibility ''(only when in full screen)''
- </entry>
- </row>
- </tbody>
- </tgroup>
- </informaltable>
- </sect1>
- </chapter>
-
-</book>
diff --git a/docs/pt_BR/pt_BR.po b/docs/pt_BR/pt_BR.po
deleted file mode 100644
index b27dbbc..0000000
--- a/docs/pt_BR/pt_BR.po
+++ /dev/null
@@ -1,874 +0,0 @@
-# Copyright (C) 2005-2006 Free Software Foundation, Inc.
-# This file is distributed under the same license as the f-spot package.
-# Raphael Higino <phhigino at gmail.com>, 2005-2006.
-# Vladimir Melo <vladimirmelo.psi at gmail.com>, 2007.
-#
-msgid ""
-msgstr ""
-"Project-Id-Version: f-spot\n"
-"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2007-07-01 12:13-0300\n"
-"PO-Revision-Date: 2007-07-01 12:11-0300\n"
-"Last-Translator: Vladimir Melo <vladimirmelo at foresightlinux.org>\n"
-"Language-Team: Brazilian Portuguese <gnome-l10n-br at listas.cipsga.org.br>\n"
-"MIME-Version: 1.0\n"
-"Content-Type: text/plain; charset=UTF-8\n"
-"Content-Transfer-Encoding: 8bit\n"
-
-#. When image changes, this message will be marked fuzzy or untranslated for you.
-#. It doesn't matter what you translate it to: it's not used at all.
-#: ../C/f-spot.xml:279(None)
-msgid ""
-"@@image: 'figures/f-spot-fullscreen.png'; "
-"md5=09f09d717428f52309dc73c68b6ccd09"
-msgstr ""
-"@@image: 'figures/f-spot-fullscreen.png'; "
-"md5=09f09d717428f52309dc73c68b6ccd09"
-
-#. When image changes, this message will be marked fuzzy or untranslated for you.
-#. It doesn't matter what you translate it to: it's not used at all.
-#: ../C/f-spot.xml:292(None)
-msgid ""
-"@@image: 'figures/f-spot-slideshow.png'; md5=43ff510a9aa8d183eba70792066ca36b"
-msgstr ""
-"@@image: 'figures/f-spot-slideshow.png'; md5=43ff510a9aa8d183eba70792066ca36b"
-
-#: ../C/f-spot.xml:5(title)
-msgid "The F-Spot Manual"
-msgstr "O Manual do F-Spot"
-
-#: ../C/f-spot.xml:7(para) ../C/f-spot.xml:9(subtitle)
-msgid "This is the user manual for F-Spot, a GNOME personal photo manager."
-msgstr ""
-"Este é o manual do usuário para F-Spot, um gerenciador de fotos pessoais do "
-"GNOME."
-
-#: ../C/f-spot.xml:11(year)
-msgid "2007"
-msgstr "2007"
-
-#: ../C/f-spot.xml:12(holder)
-msgid "Aaron Bockover, Gabriel Burt, Miguel de Icaza, Bengt Thuree"
-msgstr "Aaron Bockover, Gabriel Burt, Miguel de Icaza, Bengt Thuree"
-
-#: ../C/f-spot.xml:15(publishername)
-msgid "GNOME Documentation Project"
-msgstr "Projeto de Documentação do GNOME"
-
-#: ../C/f-spot.xml:19(firstname)
-msgid "Miguel"
-msgstr "Miguel"
-
-#: ../C/f-spot.xml:20(surname)
-msgid "de Icaza"
-msgstr "de Icaza"
-
-#: ../C/f-spot.xml:23(firstname)
-msgid "Aaron"
-msgstr "Aaron"
-
-#: ../C/f-spot.xml:24(surname)
-msgid "Bockover"
-msgstr "Bockover"
-
-#: ../C/f-spot.xml:27(firstname)
-msgid "Bengt"
-msgstr "Bengt"
-
-#: ../C/f-spot.xml:28(surname)
-msgid "Thuree"
-msgstr "Thuree"
-
-#: ../C/f-spot.xml:31(firstname)
-msgid "Gabriel"
-msgstr "Gabriel"
-
-#: ../C/f-spot.xml:32(surname)
-msgid "Burt"
-msgstr "Burt"
-
-#: ../C/f-spot.xml:35(firstname)
-msgid "Stephane"
-msgstr "Stephane"
-
-#: ../C/f-spot.xml:36(surname)
-msgid "Delcroix"
-msgstr "Delcroix"
-
-#: ../C/f-spot.xml:42(revnumber)
-msgid "0.2"
-msgstr "0.2"
-
-#: ../C/f-spot.xml:43(date)
-msgid "2007-01-17"
-msgstr "17-01-2007"
-
-#: ../C/f-spot.xml:49(title)
-msgid "Organizing your photos"
-msgstr "Organizando suas fotos"
-
-#: ../C/f-spot.xml:52(title)
-msgid "Import"
-msgstr "Importar"
-
-#: ../C/f-spot.xml:54(para)
-msgid ""
-"You can import photos from your hard drive or your camera. When you import "
-"your photos into F-Spot from your camera, it will always make a copy of "
-"them, leaving you free to clear your camera's memory. By default, F-Spot "
-"will make a copy of photos imported from your hard drive. Uncheck the "
-"<guilabel>Copy</guilabel> option on the import dialog or hold <keycap>Shift</"
-"keycap> when dragging photos into F-Spot if you do not wish to copy them "
-"from your hard drive."
-msgstr ""
-"Você pode importar fotos de seu disco rígido ou de sua câmera. Quando "
-"importar suas fotos para o F-Spot de sua câmera, sempre será feita uma cópia "
-"delas, deixando você livre para limpar a memória de sua câmera. Por padrão, "
-"F-Spot fará uma cópia das fotos importadas de seu disco rígido. Desmarque a "
-"opção <guilabel>Copiar</guilabel> do diálogo de importação ou mantenha "
-"pressionado <keycap>Shift</keycap> ao arrastar as fotos para o F-Spot se não "
-"desejar copiá-las de seu disco rígido."
-
-#: ../C/f-spot.xml:64(para)
-msgid ""
-"If all the photos you are importing at one time are from a particular event, "
-"or have some other characteristic in common, you can create a tag for them "
-"so you can later find them with ease. To do this, follow the instructions "
-"below to <ulink url=\"tag\">create a new tag</ulink>, then when you are "
-"importing them, check the button for <guilabel>Attach Tag</guilabel> and "
-"choose the tag you created."
-msgstr ""
-"Se todas as fotos que estiver importando de uma vez são de um evento "
-"particular, ou tem alguma outra característica em comum, você pode criar uma "
-"etiqueta para elas de forma que possa mais tarde localizá-las com "
-"facilidade. Para isso, siga as instruções abaixo para <ulink url=\"tag"
-"\">criar uma nova etiqueta</ulink>, então quando estiver importando as "
-"fotos, verifique o botão para <guilabel>Anexar Etiqueta</guilabel> e escolha "
-"a etiqueta que criou."
-
-#: ../C/f-spot.xml:75(title)
-msgid "Edit"
-msgstr "Editar"
-
-#: ../C/f-spot.xml:77(para)
-msgid ""
-"If you double click or press enter on an image, you enter Edit mode, where "
-"you can remove red-eye, crop, and adjust brightness and colors."
-msgstr ""
-"Se você der um clique duplo ou digitar enter sobre uma imagem, você acessará "
-"o modo Editar, onde pode remover olho vermelho, cortar, e ajustar brilho e "
-"cores."
-
-#: ../C/f-spot.xml:83(title)
-msgid "Versions"
-msgstr "Versões"
-
-#: ../C/f-spot.xml:85(para)
-msgid ""
-"When you edit your photos, a new copy (called a version) is created, so your "
-"original is never altered. After your first edit to a photo, subsequent "
-"edits will modify the same version. If you want to create mulitple versions "
-"of your photo, perhaps with different cropping or coloring, you can do so "
-"via the <menuchoice><guimenu>File</guimenu><guimenuitem>Create new version</"
-"guimenuitem></menuchoice> option."
-msgstr ""
-"Quando você editar suas fotos, uma nova cópia (chamada uma versão) é criada, "
-"de forma que sua original nunca é alterada. Depois da primeira edição de "
-"foto, as edições subseqüentes modificarão a mesma versão. Se quiser criar "
-"múltiplas versões de sua foto, talvez com diferentes cortes e cores, pode "
-"fazer isso através da opção <menuchoice><guimenu>Arquivo</"
-"guimenu><guimenuitem>Criar uma nova versão</guimenuitem></menuchoice>."
-
-#: ../C/f-spot.xml:96(title)
-msgid "Adjust Colors"
-msgstr "Ajustar Cores"
-
-#: ../C/f-spot.xml:98(para)
-msgid ""
-"To adjust the brightness, contrast, and colors of a photo, first click the "
-"<guibutton>Adjust Photos</guibutton> icon to open the adjustment dialog."
-msgstr ""
-"Para ajustar o brilho, contraste, e cores da foto, primeiro clique no ícone "
-"<guibutton>Ajustar Fotos</guibutton> para abrir o diálogo de ajuste."
-
-#: ../C/f-spot.xml:105(title)
-msgid "Remove Red-Eye"
-msgstr "Remover Olhos Vermelhos"
-
-#: ../C/f-spot.xml:107(para)
-msgid ""
-"To remove redeye from a photo, you need to select each individual eye. You "
-"may want to zoom in on the image to accurately select the eyes in the photo."
-msgstr ""
-"Para remover o olho vermelho da foto, você precisará selecionar cada olho. "
-"Você pode querer aplicar zoom in na imagem para selecionar com precisão os "
-"olhos na foto."
-
-#: ../C/f-spot.xml:112(para)
-msgid ""
-"To make your selection, click one corner of the rectangle that will be your "
-"selection, and drag your mouse to the diagonal corner and release it. You "
-"can resize your selection by dragging its edges, and you can move it by "
-"clicking in the middle of it and dragging it to where you want it."
-msgstr ""
-"Para fazer sua seleção, clique em um canto do retângulo que será sua "
-"seleção, e arraste seu mouse para o canto da diagonal e libere. Você pode "
-"redimensionar sua seleção arrastando suas bordas, ou movê-la clicando no "
-"centro e arrastando para onde quiser."
-
-#: ../C/f-spot.xml:118(para)
-msgid ""
-"Once you have selected an eye, you can remove the red from it by clicking "
-"the red-eye button beneath the photo."
-msgstr ""
-"Uma vez que tenha selecionado um olho, você pode remover o vermelho dele "
-"clicando no botão olho-vermelho abaixo da foto."
-
-#: ../C/f-spot.xml:125(title)
-msgid "Crop"
-msgstr "Cortar"
-
-#: ../C/f-spot.xml:127(para)
-msgid ""
-"Cropping an image is a great way to improve the quality of a photograph by "
-"improving how it is framed. You crop a photo by selecting the part of the "
-"photo you want to keep. If you want your photo to be the exact dimensions "
-"necessary for a certain print size, you can constrain the kind of selection "
-"F-Spot will allow you to draw by choosing the appropriate size from the "
-"constraint drop down. See the <xref linkend=\"edit-remove-red-eye\"/> above "
-"for details on making a selection on your photo."
-msgstr ""
-"Cortar uma imagem é uma ótima forma de melhorar a qualidade da fotografia, "
-"melhorando seu enquadramento. Você corta a foto selecionando a parte da foto "
-"que quiser manter. Se quiser que sua foto tenha as dimensões necessárias "
-"para um certo tamanho de impressão, pode restringir o tipo de seleção "
-"escolhendo o tamanho apropriado no menu de restrição. Veja a <xref linkend="
-"\"edit-remove-red-eye\"/> abaixo para detalhes de como fazer uma seleção em "
-"sua foto."
-
-#: ../C/f-spot.xml:136(para) ../C/f-spot.xml:150(para)
-msgid ""
-"Once you have made your crop selection, you must click the crop button "
-"beneath the image to finalize the crop. If you are working with the original "
-"photo, cropping creates a new version your photo."
-msgstr ""
-"Uma vez que tenha feito sua seleção de corte, você deve clicar no botão "
-"cortar abaixo da imagem para finalizar o corte. Se você estiver trabalhando "
-"com a foto original, o corte cria uma nova versão da sua foto."
-
-#: ../C/f-spot.xml:144(title)
-msgid "Describe"
-msgstr "Descrever"
-
-#: ../C/f-spot.xml:146(para)
-msgid ""
-"You can also enter a description of the image by clicking on the text entry "
-"box below the image and typing."
-msgstr ""
-"Você também pode colocar a descrição da imagem clicando na caixa de entrada "
-"de texto abaixo da imagem e digitando."
-
-#: ../C/f-spot.xml:159(title)
-msgid "Tag"
-msgstr "Etiqueta"
-
-#: ../C/f-spot.xml:160(para)
-msgid ""
-"F-Spot enables you to organize and enjoy your photos by associating them "
-"with various user-customizable tags. A tag is a merely a label. F-Spot comes "
-"with default tags to get you started; you are free to change them and add "
-"new ones. For example, if you want to create a tag for specific event, you "
-"can create a new tag named after that event under the Events tag."
-msgstr ""
-"F-Spot lhe possibilita organizar e curtir suas fotos ao associá-las às "
-"várias etiquetas personalizáveis. Uma etiqueta é basicamente um rótulo. F-"
-"Spot vem com etiquetas padronizadas de início; você é livre para alterá-las "
-"e adicionar novas. Por exemplo, se você quiser criar uma etiqueta para um "
-"evento especifico, você pode criar uma etiqueta com o mesmo nome do evento "
-"na categoria Eventos."
-
-#: ../C/f-spot.xml:167(para)
-msgid "There are many ways to tag photos:"
-msgstr "Existem várias formas de etiquetar fotos:"
-
-#: ../C/f-spot.xml:172(para)
-msgid "drag and drop the photo(s) onto the tag"
-msgstr "arraste e solte a(s) foto(s) sobre a etiqueta"
-
-#: ../C/f-spot.xml:177(para)
-msgid "drag and drop the tag onto the photo(s)"
-msgstr "arraste e solte a etiqueta sobre a(s) foto(s)"
-
-#: ../C/f-spot.xml:182(para)
-msgid "via the photo's right-click menu"
-msgstr "através do menu de contexto da foto"
-
-#: ../C/f-spot.xml:187(para)
-msgid "via the Tags and Edit menus"
-msgstr "através dos menus Etiquetas e Editar"
-
-#: ../C/f-spot.xml:192(para)
-msgid ""
-"by typing them in (press <keycap>t</keycap> to pop up the tag entry bar, "
-"enter comma-separated tags) - with tab completion!"
-msgstr ""
-"ao digitá-las (pressione <keycap>t</keycap> para exibir a barra de texto de "
-"etiqueta, digite etiquetas separadas por vírgula) - com o complemento ao "
-"pressionar tab!"
-
-#: ../C/f-spot.xml:198(para)
-msgid ""
-"The first photo you associate with a tag will be used for that tag's icon. "
-"You can always edit a tag's name, parent tag, and icon by right clicking on "
-"it and choosing <guilabel>Edit tag</guilabel>."
-msgstr ""
-"A primeira foto que você associar a uma etiqueta será usada para o ícone da "
-"etiqueta.Você pode sempre editar o nome da etiqueta, da etiqueta principal e "
-"do ícone através do menu de contexto escolhendo <guilabel>Editar etiqueta</"
-"guilabel>."
-
-#: ../C/f-spot.xml:203(para)
-msgid ""
-"You can change a tag's parent by dragging and dropping it where you like. "
-"Also, you can edit the name of a tag by selecting it and pressing "
-"<keycap>F2</keycap>. Lastly, if you have the tag tree widget focused (e.g. "
-"you just clicked on a tag), you can start typing the name of a tag, and all "
-"the expanded tags in the list will be searched and you'll jump to any "
-"matching ones."
-msgstr ""
-"Você pode alterar uma etiqueta principal arrastando-a e soltando-a onde "
-"desejar. Você pode também editar o nome da etiqueta selecionando-a e "
-"pressionando <keycap>F2</keycap>. Por último, se você tem o controle árvore "
-"de etiqueta ativo (por exemplo, acabou de clicar numa etiqueta), pode "
-"iniciar a digitar o nome de uma etiqueta, e todas as etiquetas expandidas na "
-"lista serão procuradas e você pulará para aquelas correspondentes."
-
-#: ../C/f-spot.xml:215(title)
-msgid "Enjoying your photos"
-msgstr "Curtindo suas fotos"
-
-#: ../C/f-spot.xml:217(title)
-msgid "Browse"
-msgstr "Navegar"
-
-#: ../C/f-spot.xml:218(para)
-msgid ""
-"You can use the slider widget to browse your photos by month or by "
-"directory. To change this setting, go to <menuchoice><guimenu>View</"
-"guimenu><guimenuitem>Arranged By</guimenuitem></menuchoice>."
-msgstr ""
-"Você pode usar o controle deslizante para navegar pelas suas fotos por mês "
-"ou diretório. Para alterar essa configuração, vá em<menuchoice><guimenu>Ver</"
-"guimenu><guimenuitem>Ordenar por</guimenuitem></menuchoice>."
-
-#: ../C/f-spot.xml:226(title)
-msgid "Search"
-msgstr "Pesquisar"
-
-#: ../C/f-spot.xml:227(para)
-msgid ""
-"You can start a search by double clicking or activating a tag from the tag "
-"list. Alternatively, you can show the find bar with "
-"<menuchoice><guimenu>Find</guimenu><guimenuitem>Show Find Bar</guimenuitem></"
-"menuchoice>. With the find bar shown, you can drag tags from the tag view to "
-"the find bar."
-msgstr ""
-"Você pode iniciar uma pesquisa dando um clique duplo ou ativando uma "
-"etiqueta da lista de etiquetas. Como alternativa, pode mostrar a barra de "
-"pesquisa com <menuchoice><guimenu>Localizar</guimenu><guimenuitem>Mostrar "
-"Barra de Pesquisa</guimenuitem></menuchoice>. Com a barra de pesquisa "
-"exibida, você pode arrastar a etiqueta para a barra de pesquisa."
-
-#: ../C/f-spot.xml:233(para)
-msgid ""
-"To find photos that are tagged with both of two tags, activate the first in "
-"the tag view or drag it onto the find bar, then drag the second tag and drop "
-"it on top of the first. You can also right click on the second tag in the "
-"tag view, or use the <guimenu>Find</guimenu> menu, and choose "
-"<guimenuitem>Find With...</guimenuitem> and select the first tag (or group "
-"of tags)."
-msgstr ""
-"Para localizar fotos que estejam marcadas por duas etiquetas, ative a "
-"primeira na exibição de etiqueta ou arraste-a para a barra de pesquisa, "
-"então arraste a segunda etiqueta e solte-a sobre a primeira. Você pode "
-"também usar o menu de contexto da segunda etiqueta na exibição de etiqueta, "
-"ou usar o menu <guimenu>Localizar</guimenu>, e escolher "
-"<guimenuitem>Localizar Com...</guimenuitem> e selecionar a primeira etiqueta "
-"(ou grupo de etiquetas)."
-
-#: ../C/f-spot.xml:240(para)
-msgid ""
-"You can drag a tag icon around on the find bar to change from finding it and "
-"another tag to finding it or another tag."
-msgstr ""
-"Você pode arrastar o ícone da etiqueta na barra de pesquisa para alterar de "
-"encontrando por essa e outra etiqueta para encontrando por essa ou outra "
-"etiqueta."
-
-#: ../C/f-spot.xml:244(para)
-msgid ""
-"You can search for photos that do not have a particular tag by double-"
-"clicking on a tag in the find bar. Alternatively, you can right-click a tag "
-"in the find bar and select <guimenuitem>Exclude</guimenuitem>."
-msgstr ""
-"Você pode procurar por fotos que não tenham uma etiqueta específica ao dar "
-"um clique duplo na etiqueta na barra de pesquisa. Como alternativa, pode "
-"abrir o menu de contexto da etiqueta na barra de pesquisa e selecionar "
-"<guimenuitem>Excluir</guimenuitem>."
-
-#: ../C/f-spot.xml:249(para)
-msgid ""
-"To remove a tag from the search, drag it away from the find bar, or right "
-"click and select <guimenuitem>Remove</guimenuitem>."
-msgstr ""
-"Para remover a etiqueta da barra de pesquisa, arraste-a para fora da barra "
-"de pesquisa, ou vá ao menu de contexto e selecione <guimenuitem>Remover</"
-"guimenuitem>."
-
-#: ../C/f-spot.xml:253(para)
-msgid ""
-"By default, photos tagged <emphasis>Hidden</emphasis> will not be shown. You "
-"must explicitly include the <emphasis>Hidden</emphasis> tag in your search "
-"to show such photos."
-msgstr ""
-"Por padrão, fotos etiquetadas como <emphasis>Ocultas</emphasis> não serão "
-"mostradas. Você deve incluir explicitamente a etiqueta <emphasis>Ocultas</"
-"emphasis> em sua pesquisa para mostrar essas fotos."
-
-#: ../C/f-spot.xml:258(para)
-msgid ""
-"There is also a type-to-find entry. Press <keycap>/</keycap> to open it. It "
-"cannot be used at the same time as the find bar. You can type queries such "
-"as \"TagA and (TagB or (TagC and TagD))\". At any point, if F-Spot "
-"recognizes what you've typed as a valid query, it will update your search. "
-"The <emphasis>not</emphasis> operator is not yet supported."
-msgstr ""
-"Existe também uma entrada digite-para-localizar. Pressione <keycap>/</"
-"keycap> para abri-la. Não é possível usar ao mesmo tempo como barra de "
-"localização. Você pode digitar consultas como \"EtiquetaA e (EtiquetaB ou "
-"(EtiquetaC e EtiquetaD))\". Em qualquer ponto, se F-Spot reconhecer o que "
-"você digitou como uma consulta válida, irá atualizar sua pesquisa. Ainda não "
-"há suporte para o operador <emphasis>não</emphasis>."
-
-#: ../C/f-spot.xml:268(title)
-msgid "Fullscreen Mode and Slideshows"
-msgstr "Modo Tela Cheia e Apresentação de Slide"
-
-#: ../C/f-spot.xml:269(para)
-msgid ""
-"For fewer distractions and larger display, you can view your photos in full "
-"screen mode. You control when to show the next photo or to return to the "
-"previous. Enter fullscreen mode by pressing <keycap>F11</keycap> at any time "
-"or by pressing the button in the toolbar."
-msgstr ""
-"Para menos distrações e maior exibição, você pode ver suas fotos em modo "
-"tela cheia. Você controla quando mostrar a próxima foto ou retornar à "
-"anterior. Entre em modo tela cheia pressionando <keycap>F11</keycap> a "
-"qualquer hora ou pressionando o botão na barra de ferramentas."
-
-#: ../C/f-spot.xml:276(title)
-msgid "FullScreen"
-msgstr "Tela Cheia"
-
-#: ../C/f-spot.xml:283(para)
-msgid ""
-"In slideshow mode, you can sit back and view your photos as they are "
-"presented to you. You can start a slideshow by pressing the button on the "
-"toolbar."
-msgstr ""
-"No modo apresentação de slides, você pode se acomodar e ver suas fotos como "
-"se elas fossem apresentadas para você. Pode iniciar a apresentação ao "
-"apertar o botão na barra de ferramentas."
-
-#: ../C/f-spot.xml:289(title)
-msgid "SlideShow"
-msgstr "Apresentação de Slide"
-
-#: ../C/f-spot.xml:300(title)
-msgid "Sharing your photos"
-msgstr "Compartilhando suas fotos"
-
-#: ../C/f-spot.xml:303(para)
-msgid ""
-"There are many ways to share your photos using F-Spot. All of the following "
-"methods will only share the photos you have selected when you run them."
-msgstr ""
-"Existem muitas formas de compartilhar suas fotos usando F-Spot. Todos os "
-"métodos a seguir compartilharão apenas as fotos selecionadas quando forem "
-"executados."
-
-#: ../C/f-spot.xml:310(title)
-msgid "E-mail"
-msgstr "E-mail"
-
-#: ../C/f-spot.xml:311(para)
-msgid ""
-"E-mail your photos directly from F-Spot with the <menuchoice><guimenu>File</"
-"guimenu><guimenuitem>Send Mail</guimenuitem></menuchoice> menu."
-msgstr ""
-"Enviar por e-mail suas fotos diretamente do F-Spot com o menu "
-"<menuchoice><guimenu>Arquivo</guimenu><guimenuitem>Enviar E-mail</"
-"guimenuitem></menuchoice> ."
-
-#: ../C/f-spot.xml:319(title)
-msgid "Print"
-msgstr "Imprimir"
-
-#: ../C/f-spot.xml:320(para)
-msgid ""
-"Print your photos with the <menuchoice><guimenu>File</"
-"guimenu><guimenuitem>Print</guimenuitem></menuchoice> menu."
-msgstr ""
-"Imprimir suas fotos com o menu <menuchoice><guimenu>Arquivo</"
-"guimenu><guimenuitem>Imprimir</guimenuitem></menuchoice> ."
-
-#: ../C/f-spot.xml:327(title)
-msgid "Burn to CD"
-msgstr "Gravar para CD"
-
-#: ../C/f-spot.xml:334(title)
-msgid "Generate a Website Gallery or Folder"
-msgstr "Gerar uma Galeria Online ou Pasta"
-
-#: ../C/f-spot.xml:335(para)
-msgid ""
-"The <menuchoice><guimenu>File</guimenu><guimenuitem>Export</"
-"guimenuitem><guimenuitem>Export to Folder</guimenuitem></menuchoice> feature "
-"gives you three ways to export your images."
-msgstr ""
-"O recurso <menuchoice><guimenu>Arquivo</guimenu><guimenuitem>Exportar</"
-"guimenuitem><guimenuitem>Exportar para Pasta</guimenuitem></menuchoice> lhe "
-"permite três maneiras de exportar suas imagens."
-
-#: ../C/f-spot.xml:343(para)
-msgid ""
-"<guilabel>Use Original</guilabel> exports your photos ready for use with "
-"Jakub Steiner's free <ulink url=\"http://jimmac.musichall.cz/original.php\"> "
-"Original Photo Gallery</ulink> software. If you are unsure about this "
-"option, it is probably not the right one for you."
-msgstr ""
-"<guilabel>Usar Original</guilabel> exporta suas fotos prontas para serem "
-"usadas com o software livre <ulink url=\"http://jimmac.musichall.cz/original."
-"php\"> Original Photo Gallery</ulink> de Jakub Steiner. Se não estiver certo "
-"desta opção, provavelmente não é a apropriada para você."
-
-#: ../C/f-spot.xml:351(para)
-msgid ""
-"<guilabel>Use static HTML files</guilabel> exports your photos to an "
-"interactive website, ready for you to upload."
-msgstr ""
-"<guilabel>Usar arquivos HTML estáticos</guilabel> exporta suas fotos para um "
-"site interativo, pronto para você enviar."
-
-#: ../C/f-spot.xml:357(para)
-msgid ""
-"<guilabel>Plain Files</guilabel> exports your images as files within "
-"directories, without putting them into a gallery."
-msgstr ""
-"<guilabel>Arquivos Simples</guilabel> exporta suas imagens como arquivos "
-"para dentro de diretórios, sem colocá-las em uma galeria."
-
-#: ../C/f-spot.xml:366(title)
-msgid "Post to your Flickr or PHP Gallery"
-msgstr "Publicar no seu Flickr ou Galeria PHP"
-
-#: ../C/f-spot.xml:367(para)
-msgid ""
-"If you use Flickr, you can post your files directly from F-Spot with the "
-"<menuchoice><guimenu>File</guimenu><guimenuitem>Export</"
-"guimenuitem><guimenuitem>Export to Flickr</guimenuitem></menuchoice> menu."
-msgstr ""
-"Se você usar o Flickr, pode postar seus arquivos diretamente do F-Spot com o "
-"menu <menuchoice><guimenu>Arquivo</guimenu><guimenuitem>Exportar</"
-"guimenuitem><guimenuitem>Exportar para Flickr</guimenuitem></menuchoice> ."
-
-#: ../C/f-spot.xml:372(para)
-msgid ""
-"If you use the PHP software known as <ulink url=\"http://gallery.sourceforge."
-"net/\"> Gallery</ulink>, you can post your photos to your existing album "
-"with the <menuchoice><guimenu>File</guimenu><guimenuitem>Export</"
-"guimenuitem><guimenuitem>Export to Web Gallery</guimenuitem></menuchoice> "
-"menu. You must first enable the Remote module within your Gallery "
-"installation."
-msgstr ""
-"Se você usa o programa PHP conhecido como <ulink url=\"http://gallery."
-"sourceforge.net/\"> Gallery</ulink>, você pode postar suas fotos para um "
-"álbum existente com o menu <menuchoice><guimenu>Arquivo</"
-"guimenu><guimenuitem>Exportar</guimenuitem><guimenuitem>Exportar para "
-"Galeria Online</guimenuitem></menuchoice> . Você deve primeiro habilitar o "
-"módulo Remoto dentro de sua instalação do Gallery."
-
-#: ../C/f-spot.xml:383(title)
-msgid "Shortcuts"
-msgstr "Atalhos"
-
-#: ../C/f-spot.xml:386(title)
-msgid "Global Shortcuts"
-msgstr "Atalhos Globais"
-
-#: ../C/f-spot.xml:391(entry) ../C/f-spot.xml:475(entry)
-#: ../C/f-spot.xml:570(entry) ../C/f-spot.xml:622(entry)
-msgid "Key"
-msgstr "Tecla"
-
-#: ../C/f-spot.xml:394(entry) ../C/f-spot.xml:478(entry)
-#: ../C/f-spot.xml:573(entry) ../C/f-spot.xml:625(entry)
-msgid "Action"
-msgstr "Ação"
-
-#: ../C/f-spot.xml:402(keycap)
-msgid "["
-msgstr "["
-
-#: ../C/f-spot.xml:404(entry)
-msgid "Rotate the selected photos to the left"
-msgstr "Rotacionar as fotos selecionadas à esquerda"
-
-#: ../C/f-spot.xml:410(keycap)
-msgid "]"
-msgstr "]"
-
-#: ../C/f-spot.xml:412(entry)
-msgid "Rotate the selected photos to the right"
-msgstr "Rotacionar as fotos selecionadas à direita"
-
-#: ../C/f-spot.xml:418(keycap)
-msgid "t"
-msgstr "t"
-
-#: ../C/f-spot.xml:420(entry)
-msgid "View or edit tags for selected photos"
-msgstr "Ver ou editar etiquetas para fotos selecionadas"
-
-#: ../C/f-spot.xml:426(keycap)
-msgid "F11"
-msgstr "F11"
-
-#: ../C/f-spot.xml:428(entry)
-msgid "Full screen view"
-msgstr "Visualização tela cheia"
-
-#: ../C/f-spot.xml:434(keycap) ../C/f-spot.xml:442(keycap)
-#: ../C/f-spot.xml:450(keycap) ../C/f-spot.xml:458(keycap)
-#: ../C/f-spot.xml:486(keycap) ../C/f-spot.xml:494(keycap)
-#: ../C/f-spot.xml:511(keycap) ../C/f-spot.xml:536(keycap)
-#: ../C/f-spot.xml:589(keycap)
-msgid "Ctrl"
-msgstr "Ctrl"
-
-#: ../C/f-spot.xml:434(keycap)
-msgid "I"
-msgstr "I"
-
-#: ../C/f-spot.xml:436(entry)
-msgid "Displays information about the photo"
-msgstr "Exibir informações sobre a foto"
-
-#: ../C/f-spot.xml:442(keycap)
-msgid "Equals"
-msgstr "Igual"
-
-#: ../C/f-spot.xml:444(entry)
-msgid "Zoom-in"
-msgstr "Zoom-in"
-
-#: ../C/f-spot.xml:450(keycap)
-msgid "Minus"
-msgstr "Menos"
-
-#: ../C/f-spot.xml:452(entry)
-msgid "Zoom-out"
-msgstr "Zoom-out"
-
-#: ../C/f-spot.xml:458(keycap)
-msgid "N"
-msgstr "N"
-
-#: ../C/f-spot.xml:460(entry)
-msgid "Import photos"
-msgstr "Importar fotos"
-
-#: ../C/f-spot.xml:470(title)
-msgid "Browse Mode Shortcuts"
-msgstr "Atalhos do Modo de Navegação"
-
-#: ../C/f-spot.xml:486(keycap) ../C/f-spot.xml:495(keycap)
-msgid "A"
-msgstr "A"
-
-#: ../C/f-spot.xml:488(entry)
-msgid "Select all"
-msgstr "Selecionar todas"
-
-#: ../C/f-spot.xml:494(keycap) ../C/f-spot.xml:527(keycap)
-#: ../C/f-spot.xml:536(keycap)
-msgid "Shift"
-msgstr "Shift"
-
-#: ../C/f-spot.xml:497(entry)
-msgid "Unselect all"
-msgstr "Desmarcar todas"
-
-#: ../C/f-spot.xml:502(entry)
-msgid "Arrow keys (up, down, left, right) or k, j, h, l keys"
-msgstr "Setas (acima, abaixo, à esquerda, à direita) ou teclas k, j, h, l"
-
-#: ../C/f-spot.xml:505(entry)
-msgid "Move focus"
-msgstr "Mover foco"
-
-#: ../C/f-spot.xml:510(entry)
-msgid "<placeholder-1/>-arrow key"
-msgstr "<placeholder-1/>-seta"
-
-#: ../C/f-spot.xml:513(entry)
-msgid "Move the focus without changing the selection"
-msgstr "Mover o foco sem alterar a seleção"
-
-#: ../C/f-spot.xml:519(keycap) ../C/f-spot.xml:641(keycap)
-msgid "Spacebar"
-msgstr "Barra de espaço"
-
-#: ../C/f-spot.xml:521(entry)
-msgid "Select or unselect the focused photo"
-msgstr "Selecionar ou desmarcar a foto ativa"
-
-#: ../C/f-spot.xml:528(keycap)
-msgid "arrow key"
-msgstr "seta"
-
-#: ../C/f-spot.xml:530(entry)
-msgid "Change the photo selection"
-msgstr "Alterar a seleção da foto"
-
-#: ../C/f-spot.xml:537(keycap)
-msgid "left arrow or right arrow"
-msgstr "seta à esquerda ou seta à direita"
-
-#: ../C/f-spot.xml:539(entry)
-msgid ""
-"Add/Remove all photos in the row, in the direction pressed, to the selection"
-msgstr ""
-"Adicionar/Remover todas as fotos na linha, na direção pressionada, para a "
-"seleção"
-
-#: ../C/f-spot.xml:545(keycap) ../C/f-spot.xml:681(keycap)
-msgid "v"
-msgstr "v"
-
-#: ../C/f-spot.xml:547(entry)
-msgid "Pops up a larger preview of the picture pointed by the mouse"
-msgstr ""
-"Abre janela instantânea para uma visualização maior da foto apontada pelo "
-"mouse"
-
-#: ../C/f-spot.xml:553(keycap)
-msgid "V"
-msgstr "V"
-
-#: ../C/f-spot.xml:555(entry)
-msgid ""
-"Pops up a larger preview and a color histogram of the picture pointed by the "
-"mouse"
-msgstr ""
-"Abre janela instantânea para uma visualização maior de um histograma da foto "
-"apontada pelo mouse"
-
-#: ../C/f-spot.xml:565(title)
-msgid "Tag Shortcuts"
-msgstr "Atalhos de Etiquetas"
-
-#: ../C/f-spot.xml:581(keycap)
-msgid "F2"
-msgstr "F2"
-
-#: ../C/f-spot.xml:583(entry)
-msgid "Rename selected tag"
-msgstr "Renomear etiqueta selecionada"
-
-#: ../C/f-spot.xml:589(keycap)
-msgid "T"
-msgstr "T"
-
-#: ../C/f-spot.xml:591(entry)
-msgid "Add tags to selected photos"
-msgstr "Adicionar etiquetas às fotos selecionadas"
-
-#: ../C/f-spot.xml:596(entry) ../C/f-spot.xml:604(entry)
-msgid "n/a"
-msgstr "n/a"
-
-#: ../C/f-spot.xml:599(entry)
-msgid "Drag and drop tags to move them"
-msgstr "Arraste e solte etiquetas para movê-las"
-
-#: ../C/f-spot.xml:607(entry)
-msgid "Type a tag's name to jump to it (only works if tag is shown/expanded)"
-msgstr ""
-"Digite o nome da etiqueta para pular até ela (apenas se etiqueta for "
-"mostrada/expandida)"
-
-#: ../C/f-spot.xml:617(title)
-msgid "Edit Mode Shortcuts"
-msgstr "Atalhos do Modo de Edição"
-
-#: ../C/f-spot.xml:633(keycap)
-msgid "Page Up"
-msgstr "Page Up"
-
-#: ../C/f-spot.xml:635(entry)
-msgid "Go to Previous Photo"
-msgstr "Ir para a Foto Anterior"
-
-#: ../C/f-spot.xml:641(keycap)
-msgid "Page Down"
-msgstr "Page Down"
-
-#: ../C/f-spot.xml:640(entry)
-msgid "<placeholder-1/>, <placeholder-2/>"
-msgstr "<placeholder-1/>, <placeholder-2/>"
-
-#: ../C/f-spot.xml:643(entry)
-msgid "Go to Next Photo"
-msgstr "Ir para a Foto Seguinte"
-
-#: ../C/f-spot.xml:649(keycap)
-msgid "0"
-msgstr "0"
-
-#: ../C/f-spot.xml:651(entry)
-msgid "Fit the image to the screen"
-msgstr "Ajustar a imagem para a tela"
-
-#: ../C/f-spot.xml:657(keycap)
-msgid "1"
-msgstr "1"
-
-#: ../C/f-spot.xml:659(entry)
-msgid "Zoom Factor to 1.0 (1 screen pixel per image pixel)"
-msgstr "Fator de Zoom para 1.0 (1 pixel da tela por pixel da imagem)"
-
-#: ../C/f-spot.xml:665(keycap)
-msgid "2"
-msgstr "2"
-
-#: ../C/f-spot.xml:667(entry)
-msgid "Zoom Factor to 2.0 (4 screen pixels per image pixel)"
-msgstr "Fator de Zoom para 2.0 (4 pixels da tela por pixel da imagem)"
-
-#: ../C/f-spot.xml:673(keycap)
-msgid "Escape"
-msgstr "Escapar"
-
-#: ../C/f-spot.xml:675(entry)
-msgid "Returns to Browser mode"
-msgstr "Retorna ao modo Navegador"
-
-#: ../C/f-spot.xml:683(entry)
-msgid "Examine photo with magnifying glass (Loupe)"
-msgstr "Examina foto com lente de ampliação (Lupa)"
-
-#. Put one translator per line, in the form of NAME <EMAIL>, YEAR1, YEAR2.
-#: ../C/f-spot.xml:0(None)
-msgid "translator-credits"
-msgstr "Vladimir Melo <vladimirmelo at foresightlinux.org>, 2007"
diff --git a/docs/ru/f-spot.xml b/docs/ru/f-spot.xml
deleted file mode 100644
index cb07d3d..0000000
--- a/docs/ru/f-spot.xml
+++ /dev/null
@@ -1,924 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!DOCTYPE book PUBLIC "-//OASIS//DTD DocBook XML 4.1.2//EN" "http://www.oasis-open.org/docbook/xml/4.1.2/docbookx.dtd">
-<book id="f-spot" lang="ru">
- <bookinfo>
- <title>Руководство по F-Spot</title>
- <abstract role="description">
- <para>Руководство пользователя по F-Spot — программе управления фотографиями.</para>
- </abstract>
- <subtitle>Руководство пользователя по F-Spot — программе управления фотографиями.</subtitle>
- <copyright>
- <year>2007-2009</year>
- <holder>Aaron Bockover, Gabriel Burt, Miguel de Icaza, Bengt Thuree</holder>
- </copyright><copyright><year>2008</year><holder>Yuri Myasoedov (omerta13 at yandex.ru)</holder></copyright><copyright><year>2009</year><holder>Dmitriy Kodanev (dkodanev at gmail.com)</holder></copyright>
- <publisher>
- <publishername>Проект документирования GNOME</publishername>
- </publisher>
- <authorgroup>
- <author>
- <firstname>Miguel</firstname>
- <surname>de Icaza</surname>
- </author>
- <author>
- <firstname>Aaron</firstname>
- <surname>Bockover</surname>
- </author>
- <author>
- <firstname>Bengt</firstname>
- <surname>Thuree</surname>
- </author>
- <author>
- <firstname>Gabriel</firstname>
- <surname>Burt</surname>
- </author>
- <author>
- <firstname>Александр</firstname>
- <surname>Прокудин</surname>
- </author>
- <author role="maintainer">
- <firstname>Stephane</firstname>
- <surname>Delcroix</surname>
- </author>
- </authorgroup>
- <!--<include href="legal.xml" xmlns="http://www.w3.org/2001/XInclude"/>-->
- <revhistory>
- <revision>
- <revnumber>0.5</revnumber>
- <date>2008-09-25</date>
- </revision>
- <revision>
- <revnumber>0.4</revnumber>
- <date>2007-09-12</date>
- </revision>
- <revision>
- <revnumber>0.3</revnumber>
- <date>2007-07-26</date>
- </revision>
- </revhistory>
- </bookinfo>
-
- <chapter id="organizing">
- <title>Управление фотографиями</title>
-
- <sect1 id="import">
- <title>Импорт фотографий</title>
-
- <para>Фотографии импортируются с жёсткого диска или фотокамеры. При импорте фотографий с фотокамеры всегда создаётся их копия, что позволяет очистить память фотокамеры. По умолчанию F-Spot создаёт копии фотографий, импортируемых с жёсткого диска. Чтобы копии фотографий не создавались, снимите флажок с параметра <guilabel>Копировать</guilabel> в диалоговом окне импорта или удерживайте клавишу <keycap>Shift</keycap>, когда перетаскиваете мышью фотографии в F-Spot.</para>
-
- <para>По умолчанию F-Spot копирует фотографии в папку <filename class="directory">~/Photos</filename>, которую можно сменить в диалоговом окне <guilabel>Параметры</guilabel> (<menuchoice><guimenu>Правка</guimenu><guimenuitem>Параметры</guimenuitem></menuchoice>). Также можно отключить физическое копирование снимков в указанную директорию и настроить F-Spot на создание ссылок к существующим файлам. Для этого нужно снять отметку с пункта <guilabel>Копировать файлы в папку Photos</guilabel>.</para>
- <para>Если есть малейшая вероятность того, что некоторые снимки уже были импортированы из выбранного источника, можно включить параметр <guilabel>Определять и отсеивать дубликаты</guilabel>. При этом F-Spot попытается установить, присутствует ли в базе точно такой же снимок, как импортируемый, и, в случае положительного ответа, не станет вносить его в базу повторно.</para>
- <para>Если все импортируемые фотографии связаны с каким-либо событием или обладают другими общими свойствами, создайте для них специальную метку. С помощью меток можно с лёгкостью отыскать эти фотографии в будущем. В <xref linkend="tag"/> даются инструкции по созданию новых меток.</para>
-
- <tip>
- <para>
- F-Spot uses a database stored at
- <filename>~/.config/f-spot/photos.db</filename>. Note, to access it, use
- the sqlite3 command. You can also manually specify path to a database by
- running F-Spot with <option>-b</option> option.
- </para>
- </tip>
-
- <para>После импорта фотографий F-Spot показывает изображения, добавленные только за последний сеанса импорта. Прочтите <xref linkend="enjoying-search"/> о том, как работать с сеансами импорта.</para>
- <para>Вы также можете импортировать прямо из Mozilla <ulink url="http://www.mozilla.com/en-US/firefox/">Firefox</ulink> и <ulink url="http://www.mozilla.com/en-US/thunderbird/">Thunderbird</ulink>, используя расширения F-Spot для <ulink url="https://addons.mozilla.org/en-US/firefox/addon/7091">Firefox</ulink> и <ulink url="https://addons.mozilla.org/en-US/thunderbird/addon/7011">Thunderbird</ulink>, написанные <ulink url="http://personalpages.tds.net/~cdovel/">Pizzach</ulink>.</para>
- </sect1>
-
- <sect1 id="edit">
- <title>Редактирование фотографий</title>
-
- <para>Для перехода в режим редактирования изображений дважды щёлкните левой клавишей мыши по изображению, либо нажмите клавишу <keycap>Enter</keycap>. В режиме редактирования можно устранить эффект красных глаз, скорректировать яркость и цвета.</para>
-
- <sect2 id="edit-versions">
- <title>Версии</title>
-
- <para>
- When you edit your photos, a new copy (called a version) is created,
- so your original is never altered. After your first edit to a photo, subsequent
- edits will modify the same version. If you want to create multiple versions
- of your photo, perhaps with different cropping or coloring, you can do so
- via the <menuchoice><guimenu>File</guimenu>
- <guimenuitem>Create new version</guimenuitem></menuchoice> option.
- </para>
- </sect2>
-
- <sect2 id="edit-crop">
- <title>Кадрирование</title>
-
- <para>
- Cropping an image is a great way to improve the quality of a photograph by
- change how it is framed. You crop a photo by selecting the part of the photo
- you want to keep. If you want your photo to be the exact dimensions necessary
- for a certain print size, you can constrain the kind of selection F-Spot will allow
- you to draw by choosing the appropriate size from the constraint drop down.
- See the <xref linkend="edit-remove-red-eye"/> below for details on making
- a selection on your photo.
- </para>
- <figure>
- <title>Инструмент кадрирования</title>
- <mediaobject>
- <imageobject>
- <imagedata fileref="figures/f-spot-crop.png"/>
- </imageobject>
- </mediaobject>
- </figure>
- <para>Чтобы выполнить кадрирование, выделите область изображения и нажмите кнопку кадрирования, находящуюся под изображением. Если операция кадрирования выполняется над исходной версией изображения, её применение приведёт к созданию новой версии изображения.</para>
- </sect2>
-
- <sect2 id="edit-straighten">
- <title>Выравнивание</title>
-
- <para>Инструмент выравнивания оказывается весьма полезным для фотографий, сделанных камерой без штатива, на которых линия горизонта на снимке оказывается повёрнутой на некоторый угол по отношению к строгой горизонтали. Инструмент выравнивания поворачивает изображение на заданный угол и автоматически кадрирует полученное изображение, придавая ему прямоугольную форму.</para>
- <figure>
- <title>Инструмент выравнивания</title>
- <mediaobject>
- <imageobject>
- <imagedata fileref="figures/f-spot-straighten.png"/>
- </imageobject>
- </mediaobject>
- </figure>
- </sect2>
-
- <sect2 id="edit-adjust-colors">
- <title>Корректировка цвета</title>
-
- <para>Чтобы скорректировать яркость, контраст или цвета фотоснимка, нажмите на значок <guibutton>Скорректировать цвета снимка</guibutton>. В появившемся окне скорректируйте необходимые параметры и сохраните их, нажав кнопку <guibutton>OK</guibutton>.</para>
- <figure>
- <title>Инструмент корректировки цвета</title>
- <mediaobject>
- <imageobject>
- <imagedata fileref="figures/f-spot-adjust-colors.png"/>
- </imageobject>
- </mediaobject>
- </figure>
- </sect2>
-
- <sect2 id="edit-auto-color">
- <title>Автокоррекция цвета</title>
-
- <para>Этот инструмент автоматически настраивает цветовые уровни изображения для получения сбалансированного по цвету изображения. Эффективен для фотографий, снятых фотокамерой, которая недостаточно хорошо выполняет автоматический баланс белого цвета.</para>
- <figure>
- <title>Автокоррекция цвета</title>
- <mediaobject>
- <imageobject>
- <imagedata fileref="figures/f-spot-autocolor.png"/>
- </imageobject>
- </mediaobject>
- </figure>
- </sect2>
-
- <sect2 id="edit-desaturate">
- <title>Обесцвечивание</title>
-
- <para>Чтобы из цветного снимка получить чёрно-белый, выберите фотоснимок и нажмите кнопку <guibutton>Сделать снимок чёрно-белым</guibutton>.</para>
- <figure>
- <title>Инструмент обесцвечивания</title>
- <mediaobject>
- <imageobject>
- <imagedata fileref="figures/f-spot-desaturate.png"/>
- </imageobject>
- </mediaobject>
- </figure>
- </sect2>
-
- <sect2 id="edit-sepia">
- <title>Эффект сепии</title>
-
- <para>Чтобы из цветного снимка создать снимок с эффектом сепии, выберите фотоснимок и нажмите кнопку <guibutton>Применить к снимку эффект сепии</guibutton>.</para>
- <figure>
- <title>Инструмент обесцвечивания</title>
- <mediaobject>
- <imageobject>
- <imagedata fileref="figures/f-spot-sepia.png"/>
- </imageobject>
- </mediaobject>
- </figure>
- </sect2>
-
- <sect2 id="edit-remove-red-eye">
- <title>Устранение эффекта красных глаз</title>
-
- <para>Чтобы устранить эффект красных глаз с фотографии, выделите область снимка, на которой изображены глаза. Для получения более точного выделения изображение можно приблизить. Попробуйте скорректировать оба глаза одного и того же человека или глаза всех людей на снимке за одну правку. Если это не сработало или если выделенные области содержат несколько ярко-красных фрагментов (губы и тому подобное), придётся устранять эффект красных глаз для каждого глаза в отдельности.</para>
- <para>Чтобы создать выделение, зажмите левую кнопку мыши и, не отпуская кнопку, переместите указатель мыши в диагональном направлении. Отпустите кнопку, чтобы закончить выделение. Перемещая края выделения, можно изменять размер выделения. Чтобы переместить выделение, зажмите левую кнопку мыши, когда её курсор будет находиться над центром выделенной области, и переместите курсор, не отпуская кнопку мыши, в то место, куда надо переместить выделение.</para>
- <para>После того как область выделена, нажмите кнопку устранения эффекта красных глаз, находящуюся под изображением.</para>
- <figure>
- <title>Инструмент устранения эффекта красных глаз</title>
- <mediaobject>
- <imageobject>
- <imagedata fileref="figures/f-spot-red-eye.png"/>
- </imageobject>
- </mediaobject>
- </figure>
- <tip>
- <para>Порог обнаружения красных глаз можно изменить с помощью ключа gconf <filename class="directory">/apps/f-spot/edit/redeye_threshold</filename>.</para>
- </tip>
- </sect2>
-
- <sect2 id="edit-soft-focus">
- <title>Мягкий фокус</title>
-
- <para>Чтобы акцентировать внимание на определённой части фотографии, можно размыть фотографию таким образом, что в области, на которой желательно сделать акцент, резкость сохраняется прежней, а остальная часть фотографии размывается. Этого можно достичь, используя объектив, который позволяет снимать с близкого расстояния объекты, находящиеся в фокусе. Эффект мягкого фокуса позволяет имитировать такие объективы.</para>
- <figure>
- <title>Инструмент мягкого фокуса</title>
- <mediaobject>
- <imageobject>
- <imagedata fileref="figures/f-spot-soft-focus.png"/>
- </imageobject>
- </mediaobject>
- </figure>
- <para>Нажмите левую кнопку мыши в центре области, которая должна находиться в фокусе, скорректируйте величину размывания и нажмите <guibutton>OK</guibutton>.</para>
- </sect2>
-
- <sect2 id="edit-sharpen">
- <title>Резкость</title>
-
- <para>Плохо сфокусированные снимки и большинство оцифрованных изображений часто нуждаются в коррекции резкости. Нерезкая маска обостряет края элементов без увеличения шума. Чтобы увеличить резкость, выберите меню <menuchoice><guimenu>Правка</guimenu><guimenuitem>Увеличить резкость...</guimenuitem> </menuchoice> и задайте следующие значения:</para>
-
- <itemizedlist>
- <listitem>
- <para><parameter class="option">Величина</parameter> — сила резкости;</para>
- </listitem>
- <listitem>
- <para><parameter class="option">Радиус</parameter> — сколько пикселов по обе стороны от края будут зависеть от резкости. Изображения с высоким разрешением позволяют применять радиус большего размера;</para>
- </listitem>
- <listitem>
- <para><parameter class="option">Порог</parameter> — минимальная разница в пикселах, которая указывает края, где надо применять увеличение резкости. Это помогает избежать возникновения пятен на лицах, небе или водной поверхности.</para>
- </listitem>
- </itemizedlist>
- </sect2>
-
- <sect2 id="edit-describe">
- <title>Комментарий</title>
-
- <para>Чтобы ввести комментарий к изображению, нажмите левую кнопку мыши на строке ввода комментария.</para>
- <para>Чтобы выполнить кадрирование, выделите область изображения и нажмите кнопку кадрирования, находящуюся под изображением. Если операция кадрирования выполняется над исходной версией изображения, её применение приведёт к созданию новой версии изображения.</para>
- </sect2>
-
- <sect2 id="edit-adjust-time">
- <title>Корректировка времени</title>
-
- <para>В обоих режимах (просмотра и редактирования) можно скорректировать время для одной или сразу для нескольких фотографий: (<menuchoice><guimenu>Правка</guimenu><guimenuitem> Скорректировать время</guimenuitem> </menuchoice>). Корректировка времени одновременно для нескольких фотографий помогает перенести во времени сеанс импорта, если, например, время на фотокамере выставлено неправильно или если вы забыли изменить его в соответствии с летним временем.</para>
- </sect2>
- </sect1>
-
- <sect1 id="tag">
- <title>Метки</title>
- <para>F-Spot позволяет управлять фотоснимками с помощью различных меток, которые могут настраиваться пользователем. Первоначально в F-Spot есть несколько стандартных меток; их можно изменить или создать свои собственные метки. Например, если необходимо создать метку для определённого события, создайте новую метку, дайте ей название согласно произошедшему событию и разместите под меткой «События».</para>
- <para>Несколько способов назначения меток фотографиям:</para>
- <itemizedlist>
- <listitem>
- <para>перетащить мышью снимок (снимки) на метку;</para>
- </listitem>
- <listitem>
- <para>перетащить мышью метку на снимок (снимки);</para>
- </listitem>
- <listitem>
- <para>используя меню, которое появляется по нажатию правой кнопки мыши;</para>
- </listitem>
- <listitem>
- <para>используя меню <guimenu>Метки</guimenu> и <guimenu>Правка</guimenu>;</para>
- </listitem>
- <listitem>
- <para>
- by typing them in. Press <keycap>t</keycap> to pop up the tag
- entry bar. Here you can enter the tags, separated by commas.
- </para>
- <para>
- You can also use auto-completion in this entry bar: After
- entering the beginning of a tag name, press
- <keycap>Tab</keycap> to see the first possible completion. You can
- cycle between other possible completions by pressing
- <keycap>Tab</keycap> again, and backwards with
- <keycombo action="simul"><keycap>Shift</keycap><keycap>Tab</keycap></keycombo>.
- To confirm the suggested completion and enter a new tag, press
- <keycap>,</keycap>. By pressing <keycap>Enter</keycap> you
- leave the tag entry bar, possibly confirming the current
- completion. To abort the auto completion, just keep on typing.
- </para>
- </listitem>
- </itemizedlist>
- <para>Первая фотография, которой была назначена метка, будет использоваться в качестве значка метки. Имя метки, родительскую метку и значок метки можно изменить, если нажать на ней правую кнопку мыши и выбрать <guilabel>Изменить выбранную метку</guilabel>.</para>
- <para>Чтобы изменить родительскую метку, перетащите её с помощью мыши. Чтобы изменить имя метки, можно выделить её и нажать клавишу <keycap>F2</keycap>. Если дерево меток получило фокус ввода (например, нажата левая кнопка мыши на какой-нибудь метке), можно выполнить поиск меток из списка по имени, набрав имя метки.</para>
-
- <para>С помощью меню <menuchoice><guimenu>Вид</guimenu><guimenuitem>Значки меток</guimenuitem></menuchoice> можно изменять размер значков меток на боковой панели или даже делать их скрытыми.</para>
-
- <tip>
- <para>F-Spot может записывать метки как поля метаданных в файлы JPEG. Метки для различных файлов RAW, PNG, TIFF и других форматов записываются в базу данных F-Spot. Вы должны переопределить метки для этих файлов в случае повторной операции импорта вашей коллекции.</para>
- </tip>
- </sect1>
- </chapter>
-
- <chapter id="enjoying">
- <title>Работа с фотографиями</title>
- <sect1 id="enjoying-browse">
- <title>Просмотр фотографий</title>
- <para>Используя ползунок, можно просматривать фотографии по месяцам или каталогам. Этот параметр изменяется через меню <menuchoice><guimenu>Вид</guimenu><guimenuitem>Отсортировать по</guimenuitem></menuchoice>.</para>
- </sect1>
- <sect1 id="enjoying-search">
- <title>Поиск фотографий</title>
-
- <para>
- F-Spot uses search filters to help you better define search criteria.
- </para>
-
- <sect2 id="enjoying-search-tags">
- <title>Метки</title>
-
- <para>Чтобы начать поиск, дважды нажмите левую кнопку мыши на метке, или активируйте метку из списка меток, или откройте панель поиска (<menuchoice><guimenu>Поиск</guimenu><guimenuitem>Показать панель поиска</guimenuitem></menuchoice>) и перетащите на неё метки с помощью мыши.</para>
- <para>Чтобы найти фотографии, помеченные двумя метками, активируйте первую метку в списке меток слева или перетащите её мышью на панель поиска, затем перетащите вторую метку (отпустите левую кнопку мыши, когда вторая метка будет находиться над первой меткой). Либо нажмите правую кнопку мыши на второй метке (это также можно сделать через меню <menuchoice><guimenu>Поиск</guimenu><guimenuitem>Найти выбранную метку с</guimenuitem></menuchoice>) и выберите первую метку (или группу меток). </para>
- <para>Чтобы найти фотографию, помеченную определённой меткой, перетащите мышью значок метки на панель поиска.</para>
- <para>Чтобы найти фотографии, которые не имеют определённой метки, дважды нажмите левую кнопку мыши на этой метке на панели поиска, либо нажмите правую кнопку мыши на этой метке на панели поиска и выберите <guimenuitem>Исключая снимки с пометкой...</guimenuitem>.</para>
- <para>Чтобы удалить метку из поиска, вытащите её мышью с панели поиска, либо нажмите правую кнопку мыши и выберите <guimenuitem>Удалить</guimenuitem>.</para>
- <para>По умолчанию фотографии с пометкой <emphasis>Скрытые</emphasis> не отображаются. Чтобы эти фотографии отображались, включите в поиск метку <emphasis>Скрытые</emphasis>.</para>
- </sect2>
-
- <sect2 id="enjoying-search-import-rolls">
- <title>Сеансы импорта</title>
- <para>F-Spot запоминает, когда и какие фотографии были импортированы. Чтобы выбрать фотографии, импортированные за последний сеанс, используйте меню <menuchoice><guimenu>Поиск</guimenu><guisubmenu>По сеансу испорта</guisubmenu><guimenuitem>Последний сеанс импорта...</guimenuitem></menuchoice>. Чтобы выполнить более точный поиск, используйте <menuchoice><guimenu>Поиск</guimenu><guisubmenu>По сеансу импорта</guisubmenu><guimenuitem>Выбрать сеансы импорта...</guimenuitem></menuchoice>:</para>
- <itemizedlist>
- <listitem>
- <para><parameter class="option">Во время</parameter> — выбрать фотографии с определённого сеанса импорта;</para>
- </listitem>
- <listitem>
- <para>
- <parameter class="option">After</parameter> — to select all photos imported begining with a particular importing session
- </para>
- </listitem>
- <listitem>
- <para><parameter class="option">Между</parameter> — выбрать все фотографии, импортированные между двумя определёнными сеансами импорта.</para>
- </listitem>
- </itemizedlist>
- <para>
- Every time you change settings of the filter, the amount of selected photos
- will appear in the bottom part of the dialog.
- </para>
- <para>Если использовать фильтр по сеансам импорта, на панели поиска появится надпись <guilabel>Найти: Сеанс импорта</guilabel>. Чтобы уточнить поиск, можно добавить несколько дополнительных фильтров.</para>
- <para>Если фильтр по сеансам импорта больше не нужен, его можно удалить: выберите <menuchoice><guimenu>Поиск</guimenu><guisubmenu>По сеансу импорта</guisubmenu><guimenuitem>Убрать фильтр сеансов импорта</guimenuitem></menuchoice>. Или нажмите кнопку "Закрыть" (<guibutton>X</guibutton>) на панели поиска, чтобы отменить все текущие параметры поиска.</para>
- <tip>
- <para>Количество отображаемых сеансов в диалоговом окне определяется ключом gconf <filename class="directory">/apps/f-spot/import/gui_roll_history</filename>. Значение по умолчанию — 10.</para>
- </tip>
- </sect2>
-
- <sect2 id="enjoying-search-type-to-find">
- <title>Строка поиска</title>
- <para>Чтобы открыть строку поиска меток, нажмите клавишу <keycap>/</keycap>. Строка поиска не может использоваться одновременно с панелью поиска. В строке поиска вводятся запросы наподобие "меткаA and (меткаB or (меткаC and меткаD))". Если F-Spot признаёт введённый запрос корректным, список найденных фотографий сразу же обновляется. Оператор <emphasis>not</emphasis> на данный момент не поддерживается.</para>
-
- <para>Эта функция также осуществляет поиск текста в именах файлов и в комментариях к снимкам.</para>
- </sect2>
- </sect1>
-
- <sect1 id="enjoying-fullscreen-mode-and-slideshows">
- <title>Полноэкранный режим и слайдшоу</title>
- <para>Чтобы не отвлекаться от просмотра фотографий, можно использовать полноэкранный режим. В этом режиме можно управлять просмотром: перейти к следующей фотографии или вернуться к предыдущей. Чтобы включить полноэкранный режим, нажмите клавишу <keycap>F11</keycap> или нажмите кнопку на панели инструментов.</para>
- <figure>
- <title>Во весь экран</title>
- <mediaobject>
- <imageobject>
- <imagedata fileref="figures/f-spot-fullscreen.png"/>
- </imageobject>
- </mediaobject>
- </figure>
- <para>Можно расслабиться и просмотреть фотографии в режиме слайдшоу. Чтобы запустить слайдшоу, нажмите кнопку на панели инструментов.</para>
- <figure>
- <title>Слайдшоу</title>
- <mediaobject>
- <imageobject>
- <imagedata fileref="figures/f-spot-slideshow.png"/>
- </imageobject>
- </mediaobject>
- </figure>
- </sect1>
- </chapter>
-
- <chapter id="sharing">
- <title>Поделитесь своими фотографиями</title>
-
- <abstract>
- <para>Существует несколько способов поделиться вашими фотографиями с другими. Действие всех описанных ниже методов распространяется только на выделенные фотографии.</para>
- </abstract>
-
- <sect1 id="sharing-e-mail">
- <title>Электронная почта</title>
- <para>Чтобы отправить фотографии из F-Spot по электронной почте, используйте меню <menuchoice><guimenu>Файл </guimenu><guimenuitem>Послать почтой</guimenuitem></menuchoice>.</para>
- <note>
- <title>Замечание 1</title>
- <para>Программа для работы с электронной почтой определяется на уровне приложений, используемых по умолчанию в GNOME. Клиент для работы с электронной почтой по умолчанию можно изменить, используя утилиту <application>Предпочитаемые приложения</application> в меню <menuchoice><guimenu>Система</guimenu><guisubmenu>Параметры</guisubmenu></menuchoice>.</para>
- </note>
- <note>
- <title>Замечание 2</title>
- <para>Если некоторые из фотографий, которые вы хотите отправить по электронной почте, имеют формат, в который F-Spot не умеет сохранять (например, изображения RAW), диалог выбора размера станет нечувствительным и будут отправлены оригиналы.</para>
- </note>
- <tip>
- <para>Если вы отправляете изображения с изменёнными размерами, F-Spot сохранит изменённые версии где-нибудь в каталоге <filename class="directory">/tmp</filename> на 30 секунд. Это не важно для программы Evolution, которая создаёт собственные локальные копии вложений, однако это помогает несколько упростить работу с Thunderbird. Вы можете управлять задержкой, изменяя значение ключа gconf <filename class="directory">/apps/f-spot/export/email/delete_timeout_seconds</filename>.</para>
- </tip>
- </sect1>
-
- <sect1 id="sharing-print">
- <title>Печать</title>
- <para>Чтобы напечатать фотографии, используйте меню <menuchoice><guimenu>Файл</guimenu><guimenuitem>Печать</guimenuitem></menuchoice>.</para>
- </sect1>
-
- <sect1 id="sharing-burn-to-cd">
- <title>Запись на оптический диск</title>
- <para>Чтобы записать фотографии на CD или DVD, используйте меню <menuchoice><guimenu>Файл</guimenu><guisubmenu>Экспортировать</guisubmenu><guimenuitem>Компакт-диск...</guimenuitem></menuchoice>.</para>
- </sect1>
-
- <sect1 id="website-gallery-folder">
- <title>Создание веб-галереи или папки</title>
- <para>Функция <menuchoice><guimenu>Файл</guimenu><guimenuitem>Экспортировать</guimenuitem><guimenuitem>Папка...</guimenuitem></menuchoice> предоставляет три различных способа экспорта изображений.</para>
- <itemizedlist>
- <listitem>
- <para><guilabel>Создать галерею при помощи "Original"</guilabel> экспортирует фотографии уже готовыми для использования с помощью свободной программы Якуба Штайнера (Jakub Steiner) <ulink url="http://jimmac.musichall.cz/original.php"> Original Photo Gallery</ulink>. Для тех, кто не знает, что это такое, данный параметр вряд ли является подходящим.</para>
- </listitem>
- <listitem>
- <para><guilabel>Создать отдельную веб-галерею</guilabel> экспортирует фотографии в готовый для загрузки интерактивный веб-сайт.</para>
- </listitem>
- <listitem>
- <para><guilabel>Сохранить только файлы</guilabel> экспортирует изображения как файлы в каталогах, не включая их в галерею.</para>
- </listitem>
- </itemizedlist>
- </sect1>
-
- <sect1 id="sharing-flickr-or-php-gallery">
- <title>Экспорт в сетевые галереи</title>
- <para>
- If you use Flickr, SmugMug, 23hq, Tabblo, Facebook, Zooomr or Picasa Web Album, you can post your files
- directly from F-Spot with the <menuchoice><guimenu>File</guimenu>
- <guisubmenu>Export</guisubmenu></menuchoice> menu, choosing corresponding submenu item.
- </para>
- <para>Пользователи программного обеспечения, известного как <ulink url="http://gallery.sourceforge.net/"> Gallery</ulink>, могут размещать свои фотографии в существующий альбом с помощью меню <menuchoice><guimenu>Файл</guimenu><guimenuitem>Экспортировать</guimenuitem><guimenuitem>Web Gallery...</guimenuitem></menuchoice>. При установке Gallery должен быть включён модуль удалённого управления (Remote plugin).</para>
- <note>
- <title>Заметка для пользователей Gallery 2.2</title>
- <para>Модуль удалённого управления (Remote plugin) должен иметь версию 1.0.8 или более новую.</para>
- </note>
- <para><ulink url="http://pennave.sourceforge.net">PennAve</ulink> — веб-приложение, написанное на языке Python, которое непосредственно использует базу данных F-Spot для представления динамической галереи ваших фотографий и меток.</para>
- <para><ulink url="http://www.conduit-project.org">Conduit</ulink> — приложение, способное синхронизировать фотографии, имеющие определённые метки, с веб-хранилищами Flickr и Picasa Web Album.</para>
- </sect1>
- </chapter>
-
- <chapter id="cms">
- <title>Управление цветом</title>
-
- <sect1 id="cms-what-is-cms">
- <title>Что такое управление цветом</title>
-
- <para>Когда вы импортируете снимок и просматриваете его на мониторе компьютера, он выглядит иначе, чем на мониторе фотокамеры или каком-либо другом мониторе. По-другому снимок будет выглядеть и при печати на принтере. Всё потому, что у каждого из этих устройств свои возможности в плане воспроизведения цвета.</para>
-
- <para>Система управления цветом (Color management system, CMS) — это инструмент для достижения достоверного воспроизведения цвета как на мониторе, так и на устройстве вывода, например принтере. В основе CMS лежат цветовые профили, которые сопоставляют оригинальные цвета и те цвета, которые способно воспроизвести устройство, так что цвета отображаются одинаково на всех устройствах: на жидкокристаллическом мониторе, на отпечатанном в фотолаборатории снимке и так далее.</para>
- </sect1>
-
- <sect1 id="cms-what-is-icc-profile">
- <title>Что такое цветовой профиль</title>
-
- <para>Цветовой профиль - это файл с расширением .icc (поэтому часто его называют профилем ICC) или .icm, который описывает, каким образом цвета устройства соответствуют универсальному описанию цветов.</para>
-
- <para>Есть несколько типов профилей:</para>
-
- <itemizedlist>
- <listitem>
- <para>Профиль устройства ввода. Это профиль для фотокамеры или профиль, внедряемый в сканированное изображение такими программами, как XSane.</para>
- </listitem>
- <listitem>
- <para>Профиль рабочего пространства. Это профиль, описывающий цветовое пространство, в котором производятся все операции внутри приложения. Обычно в качестве него используются профили весьма широкого диапазона, такие как AdobeRGB1998 или ProPhotoRGB.</para>
- </listitem>
- <listitem>
- <para>Профиль дисплея. Это профиль для видеомонитора.</para>
- </listitem>
- <listitem>
- <para>Профиль вывода. Обычно это профиль для принтера.</para>
- </listitem>
- </itemizedlist>
-
- <para>В настоящее время F-Spot даёт возможность настраивать только профили монитора и вывода. Все операции с цветом производятся в цветовом пространстве sRGB.</para>
- </sect1>
-
- <sect1 id="cms-how-to-get-icc-profile">
- <title>Как получить цветовой профиль для монитора (принтера)</title>
-
- <para>Существует несколько способов получения цветового профиля.</para>
-
- <sect2 id="cms-icc-from-cd-or-internet">
- <title>С компакт-диска или из Интернета</title>
-
- <para>Многие производители аппаратного обеспечения предоставляют цветовые профили на компакт-дисках, идущих в комплекте с устройствами. Если у вас есть такой диск (от монитора или принтера), вы можете его использовать. Или можете загрузить профили из Интернета (обычно из раздела поддержки на веб-сайте производителя). Некоторые производители камер (Nikon, Canon) также предоставляют профили ICC.</para>
- </sect2>
-
- <sect2 id="cms-icc-from-calibrating-and-profiling">
- <title>Калибровка и создание профиля</title>
-
- <para>Наилучшие результаты могут быть достигнуты посредством калибровки и создания профилей устройств при помощи измерительного прибора. Это не так уж трудно, однако вам будет необходим спектрофотометр, чтобы проделать все измерения и создать профиль ICC.</para>
-
- <para>Если вы работаете под Windows или Mac OS X, вы можете использовать программное обеспечение производителя спектрофотометра. В Linux надо будет использовать либо <ulink url="http://www.argyllcms.com">Argyll</ulink>, который является набором многоцелевых средств для работы в командной строке, либо <ulink url="http://lprof.sourceforge.net/">LProf</ulink>, у которого имеется графический пользовательский интерфейс.</para>
- <para>За дополнительной информацией обращайтесь к документации поставщиков стороннего аппаратного и программного обеспечения.</para>
- </sect2>
-
- <sect2 id="cms-icc-from-embedding">
- <title>Внедрение профиля</title>
-
- <para>Форматы файлов (такие как TIFF, JPEG, PNG и другие) сами могут содержать внедрённые в них цветовые профили. Если включено управление цветом, F-Spot ищет внедрённые профили и, найдя, принимает их во внимание.</para>
- </sect2>
- </sect1>
-
- <sect1 id="cms-how-to-use">
- <title>Как использовать управление цветом в F-Spot</title>
-
- <para>Управление цветом в F-Spot использует на данный момент только профили RGB (и в F-Spot вы не сможете увидеть иные профили).</para>
-
- <itemizedlist>
- <listitem>
- <para>
- Copy your color profiles into the
- <filename class="directory">/usr/share/color/icc</filename> or
- <filename class="directory">/usr/local/share/color/icc</filename>
- directory.
- </para>
- </listitem>
- <listitem>
- <para>Включите управление цветом с помощью меню <menuchoice><guimenu>Файл</guimenu><guimenuitem>Печать</guimenuitem></menuchoice>.</para>
- </listitem>
- <listitem>
- <para>Выберите профили: <guilabel>Монитор</guilabel> и <guilabel>Вывод печати</guilabel>.</para>
- </listitem>
- </itemizedlist>
-
- <tip>
- <para>Вы можете использовать <ulink url="http://burtonini.com/blog/computers/xicc">xicc</ulink>, чтобы загрузить профиль ICC для монитора и работать с загруженным профилем в F-Spot. Всего лишь отметьте <guilabel>Использовать системный профиль</guilabel>.</para>
- </tip>
- </sect1>
- </chapter>
-
- <chapter id="extend">
- <title>Расширение функциональности</title>
-
- <sect1 id="extend-what-extensions-are">
- <title>Что такое расширения</title>
-
- <para>Расширения F-Spot добавляют приложению новые функциональные возможности. F-Spot поддерживает два вида расширений: программы экспорта (позволяют экспортировать фотографии в дополнительные веб-службы или хранилища данных) и инструменты (новые методы коррекции цвета, поиск дубликатов фотографий и т. д.). Расширения распространяются в виде пакетов расширений.</para>
- <para>Одни расширения могут использовать другие расширения, поэтому некоторые из них не могут работать, если другое расширение не установлено. Такая концепция зависимостей приводит к тому, что:</para>
- <itemizedlist>
- <listitem>
- <para>нельзя установить расширение, зависящее от расширения, не установленного в системе;</para>
- </listitem>
- <listitem>
- <para>нельзя удалить расширение, от которого зависят другие расширения.</para>
- </listitem>
- </itemizedlist>
- </sect1>
-
- <sect1 id="extend-managing-extensions">
- <title>Управление расширениями</title>
-
- <para>Для управления расширениями используется меню <menuchoice><guimenu>Правка</guimenu><guimenuitem>Настроить расширения</guimenuitem></menuchoice></para>
-
- <sect2 id="extend-managing-extensions-managing-extension-repositories">
- <title>Управление репозиториями расширений</title>
-
- <para>Репозитории — хранилища расширений. Они могут быть сетевыми или локальными. Чтобы добавить новый репозиторий, нажмите кнопку <guibutton>Репозитории</guibutton>, выберите тип репозитория и укажите URL или путь. Если указанный URL или путь не содержат файл с описанием расширения, об этом появится предупреждающее сообщение.</para>
- <para>Чтобы удалить репозиторий, нажмите кнопку <guibutton>Репозитории...</guibutton>, выберите репозитории для удаления и нажмите кнопку <guibutton>Удалить...</guibutton>.</para>
- </sect2>
-
- <sect2 id="extend-managing-extensions-installing-and-updating-extensions">
- <title>Установка и обновление расширений</title>
-
- <para>Чтобы установить расширение, нажмите кнопку <guibutton>Установить расширения...</guibutton>. В появившемся диалоговом окне</para>
- <orderedlist>
- <listitem>
- <para>Выберите репозиторий для установки из всех известных репозиториев или один из доступных репозиториев. </para>
- </listitem>
- <listitem>
- <para>Выберите пакеты расширений: все пакеты, только новые версии, только обновления.</para>
- </listitem>
- <listitem>
- <para>Нажмите кнопку <guibutton>Обновить</guibutton>, чтобы обновить список доступных пакетов согласно выбранному критерию.</para>
- </listitem>
- <listitem>
- <para>Выберите расширения для установки или обновления. Чтобы просмотреть описание к пакету, нажмите кнопку <guibutton>Информация</guibutton>.</para>
- </listitem>
- <listitem>
- <para>Нажмите <guibutton>Вперёд</guibutton>, чтобы продолжить установку.</para>
- </listitem>
- </orderedlist>
- </sect2>
-
- <sect2 id="extend-managing-extensions-enabling-and-disabling-extensions">
- <title>Включение и выключение расширений</title>
-
- <para>Возможно, возникнет необходимость временно включить или отключить определённый пакет расширений. Например, если расширение не является достаточно стабильным для того, чтобы им можно было без риска обработать большое количество фотографий или если меню переполнено расширениями. </para>
- <para>
- In the <guilabel>Manage Extensions</guilabel> dialog select the extension
- package and click <guibutton>Enable</guibutton> or <guibutton>Disable</guibutton>.
- </para>
- </sect2>
-
- <sect2 id="extend-managing-extensions-removing-extensions">
- <title>Удаление расширений</title>
-
- <para>Если расширение лишнее, его можно полностью удалить из системы. В диалоговом окне <guilabel>Управление расширениями</guilabel> выберите пакет расширения для удаления и нажмите кнопку <guibutton>Удалить</guibutton>.</para>
- </sect2>
-
- <sect2 id="extend-managing-extensions-reading-summary-of-extensions">
- <title>Описания к расширениям</title>
-
- <para>Каждый пакет расширения содержит метаданные, которые позволяют получить следующую информацию о расширении:</para>
-
- <orderedlist>
- <listitem>
- <para>описание, в котором обычно говорится, для чего предназначено расширение;</para>
- </listitem>
- <listitem>
- <para>версия;</para>
- </listitem>
- <listitem>
- <para>автор;</para>
- </listitem>
- <listitem>
- <para>зависимости.</para>
- </listitem>
- </orderedlist>
-
- <para>В диалоговом окне <guilabel>Управление расширениями</guilabel> выберите пакет, описание к которому вы хотите прочесть, и нажмите кнопку <guibutton>Информация</guibutton></para>
- </sect2>
- </sect1>
-
- <sect1 id="extend-developing-extensions">
- <title>Разработка расширений</title>
-
- <para>Документ <ulink url="http://f-spot.org/Extend_F-Spot">Extend F-Spot</ulink> даёт инструкции по разработке собственных расширений для F-Spot.</para>
- </sect1>
- </chapter>
-
- <chapter id="shortcuts">
- <title>Клавиатурные сокращения</title>
-
- <sect1 id="Global-Shortcuts">
- <title>Клавиатурные сокращения: глобальное действие</title>
- <informaltable frame="all">
- <tgroup cols="2">
- <thead>
- <row>
- <entry>Клавиша</entry>
- <entry>Действие</entry>
- </row>
- </thead>
- <tbody>
- <row>
- <entry>
- <keycap>[</keycap>
- </entry>
- <entry>Повернуть выбранные снимки влево</entry>
- </row>
- <row>
- <entry>
- <keycap>]</keycap>
- </entry>
- <entry>Повернуть выбранные снимки вправо</entry>
- </row>
- <row>
- <entry>
- <keycap>Del</keycap>
- </entry>
- <entry>Удалить выбранные снимки из каталога F-Spot</entry>
- </row>
- <row>
- <entry>
- <keycombo><keycap>Shift</keycap><keycap>Del</keycap></keycombo>
- </entry>
- <entry>
- Delete selected photos permanently from the drive. If possible, they will moved to trash.
- </entry>
- </row>
-
- <row>
- <entry>
- <keycap>t</keycap>
- </entry>
- <entry>Показать или изменить метки для выделенных снимков</entry>
- </row>
- <row>
- <entry>
- <keycap>F11</keycap>
- </entry>
- <entry>Во весь экран</entry>
- </row>
- <row>
- <entry>
- <keycombo><keycap>Ctrl</keycap><keycap>I</keycap></keycombo>
- </entry>
- <entry>Показать информацию о снимке</entry>
- </row>
- <row>
- <entry>
- <keycombo><keycap>Ctrl</keycap><keycap>=</keycap></keycombo>
- </entry>
- <entry>Приблизить</entry>
- </row>
- <row>
- <entry>
- <keycombo><keycap>Ctrl</keycap><keycap>-</keycap></keycombo>
- </entry>
- <entry>Отдалить</entry>
- </row>
- <row>
- <entry>
- <keycombo><keycap>Ctrl</keycap><keycap>N</keycap></keycombo>
- </entry>
- <entry>Импорт фотографий</entry>
- </row>
- <row>
- <entry>
- <keycombo><keycap>Alt</keycap><keycap>0-5</keycap></keycombo>
- </entry>
- <entry>Alt + цифра от 0 до 5 - для оценки выбранного снимка (снимков)</entry>
- </row>
- </tbody>
- </tgroup>
- </informaltable>
- </sect1>
-
- <sect1 id="shortcuts-browse-mode">
- <title>Клавиатурные сокращения: режим браузера </title>
- <informaltable frame="all">
- <tgroup cols="2">
- <thead>
- <row>
- <entry>Клавиша</entry>
- <entry>Действие</entry>
- </row>
- </thead>
- <tbody>
- <row>
- <entry>
- <keycombo><keycap>Ctrl</keycap><keycap>A</keycap></keycombo>
- </entry>
- <entry>Выделить все</entry>
- </row>
- <row>
- <entry>
- <keycombo><keycap>Ctrl</keycap><keycap>Shift</keycap>
- <keycap>A</keycap></keycombo>
- </entry>
- <entry>Снять выделение</entry>
- </row>
- <row>
- <entry>Клавиши со стрелками или клавиши <keycap>H</keycap>, <keycap>J</keycap>, <keycap>K</keycap>, <keycap>L</keycap></entry>
- <entry>Переместить фокус</entry>
- </row>
- <row>
- <entry><keycap>Ctrl</keycap> + Клавиша со стрелкой</entry>
- <entry>Переместить фокус без изменения выделения</entry>
- </row>
- <row>
- <entry>
- <keycap>Пробел</keycap>
- </entry>
- <entry>Выбрать или снять выделение с фотографии, находящейся в фокусе</entry>
- </row>
- <row>
- <entry>
- <keycombo><keycap>Shift</keycap>
- <keycap>клавиша со стрелкой</keycap></keycombo>
- </entry>
- <entry>Изменить выделение</entry>
- </row>
- <row>
- <entry>
- <keycombo><keycap>Ctrl</keycap><keycap>Shift</keycap>
- <keycap>стрелка влево или вправо</keycap></keycombo>
- </entry>
- <entry>Добавить в выделение или снять выделение с фотографий в строке в выбранном направлении</entry>
- </row>
- <row>
- <entry>
- <keycap>V</keycap>
- </entry>
- <entry>Всплывающее окно предварительного просмотра изображения, над которым находится указатель мыши</entry>
- </row>
- <row>
- <entry>
- <keycombo><keycap>Shift</keycap><keycap>V</keycap></keycombo>
- </entry>
- <entry>Всплывающее окно предварительного просмотра и цветовая гистограмма изображения, над которым находится указатель мыши</entry>
- </row>
- </tbody>
- </tgroup>
- </informaltable>
- </sect1>
-
- <sect1 id="shortcuts-tag">
- <title>Клавиатурные сокращения: метки</title>
- <informaltable frame="all">
- <tgroup cols="2">
- <thead>
- <row>
- <entry>Клавиша</entry>
- <entry>Действие</entry>
- </row>
- </thead>
- <tbody>
- <row>
- <entry>
- <keycap>F2</keycap>
- </entry>
- <entry>Переименовать выделенную метку</entry>
- </row>
- <row>
- <entry>
- <keycombo><keycap>Ctrl</keycap><keycap>T</keycap></keycombo>
- </entry>
- <entry>Назначить метки выделенным фотографиям</entry>
- </row>
- <row>
- <entry>нет</entry>
- <entry>Перетащить мышью метки для их перемещения</entry>
- </row>
- <row>
- <entry>нет</entry>
- <entry>Набрать имя метки, чтобы перейти к ней (работает, только когда метка видима)</entry>
- </row>
- </tbody>
- </tgroup>
- </informaltable>
- </sect1>
-
- <sect1 id="shortcuts-edit-mode">
- <title>Клавиатурные сокращения: режим редактирования</title>
- <informaltable frame="all">
- <tgroup cols="2">
- <thead>
- <row>
- <entry>Клавиша</entry>
- <entry>Действие</entry>
- </row>
- </thead>
- <tbody>
- <row>
- <entry><keycap>Page Up</keycap>, <keycap>Backspace</keycap>, <keycap>B</keycap></entry>
- <entry>Перейти к предыдущей фотографии</entry>
- </row>
- <row>
- <entry><keycap>Page Down</keycap>, <keycap>Пробел</keycap>, <keycap>N</keycap></entry>
- <entry>Перейти к следующей фотографии</entry>
- </row>
- <row>
- <entry>Клавиши со стрелками или клавиши <keycap>H</keycap>, <keycap>J</keycap>, <keycap>K</keycap>, <keycap>L</keycap></entry>
- <entry>Перейти к предыдущему/следующему снимку или перемещаться по снимку в режиме приближения.</entry>
- </row>
- <row>
- <entry>
- <keycap>R</keycap>
- </entry>
- <entry>
- Go to a random photo
- </entry>
- </row>
- <row>
- <entry>
- <keycap>f</keycap>
- </entry>
- <entry>Во весь экран</entry>
- </row>
- <row>
- <entry>
- <keycap>0</keycap>
- </entry>
- <entry>Подогнать изображение к размеру экрана</entry>
- </row>
- <row>
- <entry>
- <keycap>1</keycap>
- </entry>
- <entry>Коэффициент увеличения 1.0 (1 пиксел экрана на пиксел изображения)</entry>
- </row>
- <row>
- <entry>
- <keycap>2</keycap>
- </entry>
- <entry>Коэффициент увеличения 2.0 (4 пиксела экрана на пиксел изображения)</entry>
- </row>
- <row>
- <entry>
- <keycap>Escape</keycap>
- </entry>
- <entry>Вернуться в режим просмотра</entry>
- </row>
- <row>
- <entry>
- <keycap>V</keycap>
- </entry>
- <entry>Рассмотреть фотографию через увеличительное стекло (лупу). Чтобы убрать увеличительное стекло, дважды нажмите на нём левую кнопку мыши, или нажмите <keycap>v</keycap>.</entry>
- </row>
- <row>
- <entry><keycap>Shift</keycap> + колёсико мыши</entry>
- <entry>Ускоренная прокрутка фотоленты</entry>
- </row>
- <row>
- <entry>
- <keycap>i</keycap>
- </entry>
- <entry>Включить или отключить видимость панели информации (только в полноэкранном режиме)</entry>
- </row>
- </tbody>
- </tgroup>
- </informaltable>
- </sect1>
- </chapter>
-
-</book>
diff --git a/docs/ru/figures/f-spot-crop.png b/docs/ru/figures/f-spot-crop.png
deleted file mode 100644
index c91fe24..0000000
Binary files a/docs/ru/figures/f-spot-crop.png and /dev/null differ
diff --git a/docs/ru/ru.po b/docs/ru/ru.po
deleted file mode 100644
index a1ff61e..0000000
--- a/docs/ru/ru.po
+++ /dev/null
@@ -1,2007 +0,0 @@
-msgid ""
-msgstr ""
-"Project-Id-Version: f-spot trunk\n"
-"POT-Creation-Date: 2009-04-17 16:04+0000\n"
-"PO-Revision-Date: 2009-05-08 22:56+0300\n"
-"Last-Translator: Dmitriy Kodanev <dkodanev at gmail.com>\n"
-"Language-Team: Russian <gnome-cyr at gnome.org>\n"
-"MIME-Version: 1.0\n"
-"Content-Type: text/plain; charset=UTF-8\n"
-"Content-Transfer-Encoding: 8bit\n"
-
-#. When image changes, this message will be marked fuzzy or untranslated for you.
-#. It doesn't matter what you translate it to: it's not used at all.
-#: C/f-spot.xml:163(None)
-msgid ""
-"@@image: 'figures/f-spot-crop.png'; md5=63e18c96702aea4701024837a13ae2d9"
-msgstr ""
-"@@image: 'figures/f-spot-crop.png'; md5=63e18c96702aea4701024837a13ae2d9"
-
-#. When image changes, this message will be marked fuzzy or untranslated for you.
-#. It doesn't matter what you translate it to: it's not used at all.
-#: C/f-spot.xml:187(None)
-msgid ""
-"@@image: 'figures/f-spot-straighten.png'; "
-"md5=ceeff0cac633d06599fa5760cc4bc568"
-msgstr ""
-"@@image: 'figures/f-spot-straighten.png'; "
-"md5=ceeff0cac633d06599fa5760cc4bc568"
-
-#. When image changes, this message will be marked fuzzy or untranslated for you.
-#. It doesn't matter what you translate it to: it's not used at all.
-#: C/f-spot.xml:206(None)
-msgid ""
-"@@image: 'figures/f-spot-adjust-colors.png'; "
-"md5=6a5d9eaaaaf238ccbf70552bc073898c"
-msgstr ""
-"@@image: 'figures/f-spot-adjust-colors.png'; "
-"md5=6a5d9eaaaaf238ccbf70552bc073898c"
-
-#. When image changes, this message will be marked fuzzy or untranslated for you.
-#. It doesn't matter what you translate it to: it's not used at all.
-#: C/f-spot.xml:224(None)
-msgid ""
-"@@image: 'figures/f-spot-autocolor.png'; md5=240c4a86c95c9507755fe790bef0e24a"
-msgstr ""
-"@@image: 'figures/f-spot-autocolor.png'; md5=240c4a86c95c9507755fe790bef0e24a"
-
-#. When image changes, this message will be marked fuzzy or untranslated for you.
-#. It doesn't matter what you translate it to: it's not used at all.
-#: C/f-spot.xml:241(None)
-msgid ""
-"@@image: 'figures/f-spot-desaturate.png'; "
-"md5=fa54dfd08171658d720be71b6d367139"
-msgstr ""
-"@@image: 'figures/f-spot-desaturate.png'; "
-"md5=fa54dfd08171658d720be71b6d367139"
-
-#. When image changes, this message will be marked fuzzy or untranslated for you.
-#. It doesn't matter what you translate it to: it's not used at all.
-#: C/f-spot.xml:258(None)
-msgid ""
-"@@image: 'figures/f-spot-sepia.png'; md5=154d6e34903664dbd776f2bef405ce91"
-msgstr ""
-"@@image: 'figures/f-spot-sepia.png'; md5=154d6e34903664dbd776f2bef405ce91"
-
-#. When image changes, this message will be marked fuzzy or untranslated for you.
-#. It doesn't matter what you translate it to: it's not used at all.
-#: C/f-spot.xml:289(None)
-msgid ""
-"@@image: 'figures/f-spot-red-eye.png'; md5=743d0a2ccc9b2fa8fa314855c225cd31"
-msgstr ""
-"@@image: 'figures/f-spot-red-eye.png'; md5=743d0a2ccc9b2fa8fa314855c225cd31"
-
-#. When image changes, this message will be marked fuzzy or untranslated for you.
-#. It doesn't matter what you translate it to: it's not used at all.
-#: C/f-spot.xml:316(None)
-msgid ""
-"@@image: 'figures/f-spot-soft-focus.png'; "
-"md5=14d1437ce49c83f3ebbcf70b7047ffbe"
-msgstr ""
-"@@image: 'figures/f-spot-soft-focus.png'; "
-"md5=14d1437ce49c83f3ebbcf70b7047ffbe"
-
-#. When image changes, this message will be marked fuzzy or untranslated for you.
-#. It doesn't matter what you translate it to: it's not used at all.
-#: C/f-spot.xml:596(None)
-msgid ""
-"@@image: 'figures/f-spot-fullscreen.png'; "
-"md5=86040e20ebf1015f6489a56e9589f063"
-msgstr ""
-"@@image: 'figures/f-spot-fullscreen.png'; "
-"md5=86040e20ebf1015f6489a56e9589f063"
-
-#. When image changes, this message will be marked fuzzy or untranslated for you.
-#. It doesn't matter what you translate it to: it's not used at all.
-#: C/f-spot.xml:609(None)
-msgid ""
-"@@image: 'figures/f-spot-slideshow.png'; md5=84a69bc3bb7a1b8d04c967d3a66e6f23"
-msgstr ""
-"@@image: 'figures/f-spot-slideshow.png'; md5=84a69bc3bb7a1b8d04c967d3a66e6f23"
-
-#: C/f-spot.xml:5(title)
-msgid "The F-Spot Manual"
-msgstr "Руководство по F-Spot"
-
-#: C/f-spot.xml:7(para) C/f-spot.xml:9(subtitle)
-msgid "This is the user manual for F-Spot, a GNOME personal photo manager."
-msgstr ""
-"Руководство пользователя по F-Spot — программе управления фотографиями."
-
-#: C/f-spot.xml:11(year)
-#| msgid "2007-07-26"
-msgid "2007-2008"
-msgstr "2007-2008"
-
-#: C/f-spot.xml:12(holder)
-msgid "Aaron Bockover, Gabriel Burt, Miguel de Icaza, Bengt Thuree"
-msgstr "Aaron Bockover, Gabriel Burt, Miguel de Icaza, Bengt Thuree"
-
-#: C/f-spot.xml:15(publishername)
-msgid "GNOME Documentation Project"
-msgstr "Проект документирования GNOME"
-
-#: C/f-spot.xml:19(firstname)
-msgid "Miguel"
-msgstr "Miguel"
-
-#: C/f-spot.xml:20(surname)
-msgid "de Icaza"
-msgstr "de Icaza"
-
-#: C/f-spot.xml:23(firstname)
-msgid "Aaron"
-msgstr "Aaron"
-
-#: C/f-spot.xml:24(surname)
-msgid "Bockover"
-msgstr "Bockover"
-
-#: C/f-spot.xml:27(firstname)
-msgid "Bengt"
-msgstr "Bengt"
-
-#: C/f-spot.xml:28(surname)
-msgid "Thuree"
-msgstr "Thuree"
-
-#: C/f-spot.xml:31(firstname)
-msgid "Gabriel"
-msgstr "Gabriel"
-
-#: C/f-spot.xml:32(surname)
-msgid "Burt"
-msgstr "Burt"
-
-#: C/f-spot.xml:35(firstname)
-msgid "Alexandre"
-msgstr "Александр"
-
-#: C/f-spot.xml:36(surname)
-msgid "Prokoudine"
-msgstr "Прокудин"
-
-#: C/f-spot.xml:39(firstname)
-msgid "Stephane"
-msgstr "Stephane"
-
-#: C/f-spot.xml:40(surname)
-msgid "Delcroix"
-msgstr "Delcroix"
-
-#: C/f-spot.xml:46(revnumber)
-#| msgid "0.3"
-msgid "0.5"
-msgstr "0.5"
-
-#: C/f-spot.xml:47(date)
-#| msgid "2007-07-26"
-msgid "2008-09-25"
-msgstr "2008-09-25"
-
-#: C/f-spot.xml:50(revnumber)
-#| msgid "0.3"
-msgid "0.4"
-msgstr "0.4"
-
-#: C/f-spot.xml:51(date)
-#| msgid "2007-07-26"
-msgid "2008-09-12"
-msgstr "2007-09-12"
-
-#: C/f-spot.xml:54(revnumber)
-msgid "0.3"
-msgstr "0.3"
-
-#: C/f-spot.xml:55(date)
-msgid "2007-07-26"
-msgstr "2007-07-26"
-
-#: C/f-spot.xml:61(title)
-msgid "Organizing your photos"
-msgstr "Управление фотографиями"
-
-#: C/f-spot.xml:64(title)
-msgid "Import"
-msgstr "Импорт фотографий"
-
-#: C/f-spot.xml:66(para)
-msgid ""
-"You can import photos from your hard drive or your camera. When you import "
-"your photos into F-Spot from your camera, it will always make a copy of "
-"them, leaving you free to clear your camera's memory. By default, F-Spot "
-"will make a copy of photos imported from your hard drive. Uncheck the "
-"<guilabel>Copy</guilabel> option on the import dialog or hold <keycap>Shift</"
-"keycap> when dragging photos into F-Spot if you do not wish to copy them "
-"from your hard drive."
-msgstr ""
-"Фотографии импортируются с жёсткого диска или фотокамеры. При импорте "
-"фотографий с фотокамеры всегда создаётся их копия, что позволяет очистить "
-"память фотокамеры. По умолчанию F-Spot создаёт копии фотографий, "
-"импортируемых с жёсткого диска. Чтобы копии фотографий не создавались, "
-"снимите флажок с параметра <guilabel>Копировать</guilabel> в диалоговом окне "
-"импорта или удерживайте клавишу <keycap>Shift</keycap>, когда перетаскиваете "
-"мышью фотографии в F-Spot."
-
-#: C/f-spot.xml:76(para)
-#| msgid ""
-#| "By default, F-Spot copies your photos to the <filename class=\"directory"
-#| "\">~/Photos</filename> folder. You can change the folder F-Spot uses in "
-#| "<guilabel>Preferences</guilabel> dialog (<menuchoice><guimenu>Edit</"
-#| "guimenu><guimenuitem>Preferences</guimenuitem></menuchoice>)."
-msgid ""
-"By default, F-Spot copies your photos to the <filename class=\"directory\">~/"
-"Photos</filename> folder. You can change the folder F-Spot uses in "
-"<guilabel>Preferences</guilabel> dialog (<menuchoice><guimenu>Edit</"
-"guimenu><guimenuitem>Preferences</guimenuitem></menuchoice>). You can also "
-"disable physical copying of images to that directory and make F-Spot only "
-"reference to existing files. For that you need to disable checkbox "
-"<guilabel>Copy files to the Photos folder</guilabel>."
-msgstr ""
-"По умолчанию F-Spot копирует фотографии в папку <filename class=\"directory"
-"\">~/Photos</filename>, которую можно сменить в диалоговом окне "
-"<guilabel>Параметры</guilabel> (<menuchoice><guimenu>Правка</"
-"guimenu><guimenuitem>Параметры</guimenuitem></menuchoice>). Также можно "
-"отключить физическое копирование снимков в указанную директорию и настроить "
-"F-Spot на создание ссылок к существующим файлам. Для этого нужно снять "
-"отметку с пункта <guilabel>Копировать файлы в папку Photos</guilabel>."
-
-#: C/f-spot.xml:85(para)
-msgid ""
-"If there is a tiny chance that some of your photos are already imported from "
-"the chosen source, you can use <guilabel>Detect duplicates</guilabel> "
-"option. In this case F-Spot will try to find out if exactly this image is "
-"already present in the database and thus new copy of it should not be "
-"imported."
-msgstr ""
-"Если есть малейшая вероятность того, что некоторые снимки уже были "
-"импортированы из выбранного источника, можно включить параметр "
-"<guilabel>Определять и отсеивать дубликаты</guilabel>. При этом F-Spot "
-"попытается установить, присутствует ли в базе точно такой же снимок, как "
-"импортируемый, и, в случае положительного ответа, не станет вносить его в "
-"базу повторно."
-
-#: C/f-spot.xml:92(para)
-msgid ""
-"If all the photos you are importing at one time are from a particular event, "
-"or have some other characteristic in common, you can create a tag for them "
-"so you can later find them with ease. To do this, follow the instructions "
-"from <xref linkend=\"tag\"/> to create a new tag, then when you are "
-"importing them, check the button for <guilabel>Attach Tag</guilabel> and "
-"choose the tag you created."
-msgstr ""
-"Если все импортируемые фотографии связаны с каким-либо событием или обладают "
-"другими общими свойствами, создайте для них специальную метку. С помощью "
-"меток можно с лёгкостью отыскать эти фотографии в будущем. В <xref linkend="
-"\"tag\"/> даются инструкции по созданию новых меток."
-
-#: C/f-spot.xml:102(para)
-msgid ""
-"F-Spot uses a database stored at <filename>~/.gnome2/f-spot/photos.db</"
-"filename>. Note, to access it, use the sqlite3 command. You can also "
-"manually specify path to a database by running F-Spot with <option>-b</"
-"option> option."
-msgstr ""
-"F-Spot использует базу данных, хранящуюся в <filename>~/.gnome2/f-spot/"
-"photos.db</filename>. Для получения доступа к базе данных используется "
-"команда sqlite3. Путь к базе данных можно назначить вручную, запустив F-Spot "
-"с опцией <option>-b</option>."
-
-#: C/f-spot.xml:110(para)
-msgid ""
-"After an import, F-Spot will display the pictures of the latest import roll "
-"only. Read <xref linkend=\"enjoying-search\"/> to learn how to deal with "
-"import rolls."
-msgstr ""
-"После импорта фотографий F-Spot показывает изображения, добавленные только "
-"за последний сеанса импорта. Прочтите <xref linkend=\"enjoying-search\"/> о "
-"том, как работать с сеансами импорта."
-
-#: C/f-spot.xml:115(para)
-msgid ""
-"You can also import directly from Mozilla <ulink url=\"http://www.mozilla."
-"com/en-US/firefox/\">Firefox</ulink> and <ulink url=\"http://www.mozilla.com/"
-"en-US/thunderbird/\">Thunderbird</ulink> using <ulink url=\"https://addons."
-"mozilla.org/en-US/firefox/addon/7091\">Firefox</ulink> and <ulink url="
-"\"https://addons.mozilla.org/en-US/thunderbird/addon/7011\">Thunderbird</"
-"ulink> F-Spot importer extensions written by <ulink url=\"http://"
-"personalpages.tds.net/~cdovel/\">Pizzach</ulink>."
-msgstr ""
-"Вы также можете импортировать прямо из Mozilla <ulink url=\"http://www."
-"mozilla.com/en-US/firefox/\">Firefox</ulink> и <ulink url=\"http://www."
-"mozilla.com/en-US/thunderbird/\">Thunderbird</ulink>, используя расширения F-"
-"Spot для <ulink url=\"https://addons.mozilla.org/en-US/firefox/addon/7091"
-"\">Firefox</ulink> и <ulink url=\"https://addons.mozilla.org/en-US/"
-"thunderbird/addon/7011\">Thunderbird</ulink>, написанные <ulink url=\"http://"
-"personalpages.tds.net/~cdovel/\">Pizzach</ulink>."
-
-#: C/f-spot.xml:127(title)
-msgid "Edit"
-msgstr "Редактирование фотографий"
-
-#: C/f-spot.xml:129(para)
-msgid ""
-"If you double click or press enter on an image, you enter Edit mode, where "
-"you can remove red-eye, crop, and adjust brightness and colors."
-msgstr ""
-"Для перехода в режим редактирования изображений дважды щёлкните левой "
-"клавишей мыши по изображению, либо нажмите клавишу <keycap>Enter</keycap>. В "
-"режиме редактирования можно устранить эффект красных глаз, скорректировать "
-"яркость и цвета."
-
-#: C/f-spot.xml:135(title)
-msgid "Versions"
-msgstr "Версии"
-
-#: C/f-spot.xml:137(para)
-msgid ""
-"When you edit your photos, a new copy (called a version) is created, so your "
-"original is never altered. After your first edit to a photo, subsequent "
-"edits will modify the same version. If you want to create mulitple versions "
-"of your photo, perhaps with different cropping or coloring, you can do so "
-"via the <menuchoice><guimenu>File</guimenu><guimenuitem>Create new version</"
-"guimenuitem></menuchoice> option."
-msgstr ""
-"Во время редактирования фотографии всегда создаётся её копия (версия), "
-"поэтому её исходная версия никогда не будет испорчена. После первого "
-"редактирования фотографии все последующие правки будут вносить изменения в "
-"ту же самую версию изображения. Создать несколько версий изображения, "
-"например, чтобы опробовать различные варианты кадрирования или корректировки "
-"цветов, можно с помощью меню <menuchoice><guimenu>Файл</"
-"guimenu><guimenuitem>Создать новую версию</guimenuitem></menuchoice>."
-
-#: C/f-spot.xml:148(title)
-msgid "Crop"
-msgstr "Кадрирование"
-
-#: C/f-spot.xml:150(para)
-msgid ""
-"Cropping an image is a great way to improve the quality of a photograph by "
-"improving how it is framed. You crop a photo by selecting the part of the "
-"photo you want to keep. If you want your photo to be the exact dimensions "
-"necessary for a certain print size, you can constrain the kind of selection "
-"F-Spot will allow you to draw by choosing the appropriate size from the "
-"constraint drop down. See the <xref linkend=\"edit-remove-red-eye\"/> below "
-"for details on making a selection on your photo."
-msgstr ""
-"Кадрирование изображений — хороший способ улучшить фотографию. Кадрирование "
-"выполняется выделением той области изображения, которую хотят оставить, вся "
-"остальная область изображения за пределами выделения будет удалена. Чтобы "
-"фотография имела точные пропорции, необходимые для различных видов печати, "
-"выберите тип выделения из выпадающего списка. В <xref linkend=\"edit-remove-"
-"red-eye\"/> подробно рассказывается о том, как осуществляется выделение "
-"областей изображения."
-
-#: C/f-spot.xml:160(title)
-msgid "Crop tool"
-msgstr "Инструмент кадрирования"
-
-#: C/f-spot.xml:167(para) C/f-spot.xml:368(para)
-msgid ""
-"Once you have made your crop selection, you must click the crop button "
-"beneath the image to finalize the crop. If you are working with the original "
-"photo, cropping creates a new version your photo."
-msgstr ""
-"Чтобы выполнить кадрирование, выделите область изображения и нажмите кнопку "
-"кадрирования, находящуюся под изображением. Если операция кадрирования "
-"выполняется над исходной версией изображения, её применение приведёт к "
-"созданию новой версии изображения."
-
-#: C/f-spot.xml:175(title)
-msgid "Straighten"
-msgstr "Выравнивание"
-
-#: C/f-spot.xml:177(para)
-msgid ""
-"Straighten effect is a tool to level a photo, quite helpful for landscapes "
-"taken without a tripod, when (imaginary) line of horizon is not at 0°. This "
-"tool rotates an image by a specified angle and automagically crops the "
-"resulted image, so that you always see a perfect rectangle."
-msgstr ""
-"Инструмент выравнивания оказывается весьма полезным для фотографий, "
-"сделанных камерой без штатива, на которых линия горизонта на снимке "
-"оказывается повёрнутой на некоторый угол по отношению к строгой горизонтали. "
-"Инструмент выравнивания поворачивает изображение на заданный угол и "
-"автоматически кадрирует полученное изображение, придавая ему прямоугольную "
-"форму."
-
-#: C/f-spot.xml:184(title)
-msgid "Straighten tool"
-msgstr "Инструмент выравнивания"
-
-#: C/f-spot.xml:194(title)
-msgid "Adjust Colors"
-msgstr "Корректировка цвета"
-
-#: C/f-spot.xml:196(para)
-msgid ""
-"To adjust the brightness, contrast, and colors of a photo, first click the "
-"<guibutton>Adjust the photo colors</guibutton> icon to open the adjustment "
-"dialog. Change then some settings and save them with <guibutton>OK</"
-"guibutton>."
-msgstr ""
-"Чтобы скорректировать яркость, контраст или цвета фотоснимка, нажмите на "
-"значок <guibutton>Скорректировать цвета снимка</guibutton>. В появившемся "
-"окне скорректируйте необходимые параметры и сохраните их, нажав кнопку "
-"<guibutton>OK</guibutton>."
-
-#: C/f-spot.xml:203(title)
-msgid "Adjust Colors tool"
-msgstr "Инструмент корректировки цвета"
-
-#: C/f-spot.xml:213(title) C/f-spot.xml:221(title)
-msgid "AutoColor"
-msgstr "Автокоррекция цвета"
-
-#: C/f-spot.xml:215(para)
-msgid ""
-"This effect automatically adjusts color levels to make a pretty balanced "
-"picture color-wise. It serves best for pictures taken with automatical white "
-"balance, when camera didn't manage to do the job well."
-msgstr ""
-"Этот инструмент автоматически настраивает цветовые уровни изображения для "
-"получения сбалансированного по цвету изображения. Эффективен для фотографий, "
-"снятых фотокамерой, которая недостаточно хорошо выполняет автоматический "
-"баланс белого цвета."
-
-#: C/f-spot.xml:231(title)
-msgid "Desaturate"
-msgstr "Обесцвечивание"
-
-#: C/f-spot.xml:233(para)
-msgid ""
-"To make a colorful photo a black and white one, open a photo of choice and "
-"press <guibutton>Desaturate</guibutton> button."
-msgstr ""
-"Чтобы из цветного снимка получить чёрно-белый, выберите фотоснимок и нажмите "
-"кнопку <guibutton>Сделать снимок чёрно-белым</guibutton>."
-
-#: C/f-spot.xml:238(title) C/f-spot.xml:255(title)
-msgid "Desaturation tool"
-msgstr "Инструмент обесцвечивания"
-
-#: C/f-spot.xml:248(title)
-msgid "Sepia"
-msgstr "Эффект сепии"
-
-#: C/f-spot.xml:250(para)
-msgid ""
-"To make a colorful photo look like an old-style picture in sepia tones, open "
-"a photo of choice and press <guibutton>Sepia</guibutton> button."
-msgstr ""
-"Чтобы из цветного снимка создать снимок с эффектом сепии, выберите "
-"фотоснимок и нажмите кнопку <guibutton>Применить к снимку эффект сепии</"
-"guibutton>."
-
-#: C/f-spot.xml:265(title)
-msgid "Remove Red-Eye"
-msgstr "Устранение эффекта красных глаз"
-
-#: C/f-spot.xml:267(para)
-msgid ""
-"To remove redeye from a photo, you need to select a zone containing the "
-"eyes. You may want to zoom in on the image to accurately select the eyes in "
-"the photo. You should be able to correct both eyes on the same person in one "
-"shot, or even the eyes from multiple people at once. If this doesn't work "
-"for you, or the selected zone contains some vivid red parts (lips, ...) "
-"you'll probably have to correct one red eye at a time."
-msgstr ""
-"Чтобы устранить эффект красных глаз с фотографии, выделите область снимка, "
-"на которой изображены глаза. Для получения более точного выделения "
-"изображение можно приблизить. Попробуйте скорректировать оба глаза одного и "
-"того же человека или глаза всех людей на снимке за одну правку. Если это не "
-"сработало или если выделенные области содержат несколько ярко-красных "
-"фрагментов (губы и тому подобное), придётся устранять эффект красных глаз "
-"для каждого глаза в отдельности."
-
-#: C/f-spot.xml:275(para)
-msgid ""
-"To make your selection, click one corner of the rectangle that will be your "
-"selection, and drag your mouse to the diagonal corner and release it. You "
-"can resize your selection by dragging its edges, and you can move it by "
-"clicking in the middle of it and dragging it to where you want it."
-msgstr ""
-"Чтобы создать выделение, зажмите левую кнопку мыши и, не отпуская кнопку, "
-"переместите указатель мыши в диагональном направлении. Отпустите кнопку, "
-"чтобы закончить выделение. Перемещая края выделения, можно изменять размер "
-"выделения. Чтобы переместить выделение, зажмите левую кнопку мыши, когда её "
-"курсор будет находиться над центром выделенной области, и переместите "
-"курсор, не отпуская кнопку мыши, в то место, куда надо переместить выделение."
-
-#: C/f-spot.xml:281(para)
-msgid ""
-"Once you have selected a zone, you can remove the red from it by clicking "
-"the red-eye button beneath the photo."
-msgstr ""
-"После того как область выделена, нажмите кнопку устранения эффекта красных "
-"глаз, находящуюся под изображением."
-
-#: C/f-spot.xml:286(title)
-msgid "Red-Eye tool"
-msgstr "Инструмент устранения эффекта красных глаз"
-
-#: C/f-spot.xml:294(para)
-msgid ""
-"You can change the threshold for redeyes detection by changing the gconf key "
-"<filename class=\"directory\">/apps/f-spot/edit/redeye_threshold</filename>."
-msgstr ""
-"Порог обнаружения красных глаз можно изменить с помощью ключа gconf "
-"<filename class=\"directory\">/apps/f-spot/edit/redeye_threshold</filename>."
-
-#: C/f-spot.xml:303(title)
-msgid "Soft Focus"
-msgstr "Мягкий фокус"
-
-#: C/f-spot.xml:305(para)
-msgid ""
-"In photography sharpening one region of a picture, while blurring all the "
-"rest, is a way to make an emphasis and grab attention. It is achieved by "
-"using a lens that allows shooting with a short distance in front of and "
-"beyond the subject that appears to be in focus. Soft focus effect is a way "
-"to emulate such a lens."
-msgstr ""
-"Чтобы акцентировать внимание на определённой части фотографии, можно размыть "
-"фотографию таким образом, что в области, на которой желательно сделать "
-"акцент, резкость сохраняется прежней, а остальная часть фотографии "
-"размывается. Этого можно достичь, используя объектив, который позволяет "
-"снимать с близкого расстояния объекты, находящиеся в фокусе. Эффект мягкого "
-"фокуса позволяет имитировать такие объективы."
-
-#: C/f-spot.xml:313(title)
-msgid "Soft Focus tool"
-msgstr "Инструмент мягкого фокуса"
-
-#: C/f-spot.xml:320(para)
-msgid ""
-"Click to choose central point of the area you want to be in focus and adjust "
-"amount of blurring, then click <guibutton>OK</guibutton>."
-msgstr ""
-"Нажмите левую кнопку мыши в центре области, которая должна находиться в "
-"фокусе, скорректируйте величину размывания и нажмите <guibutton>OK</"
-"guibutton>."
-
-#: C/f-spot.xml:327(title)
-msgid "Sharpen"
-msgstr "Резкость"
-
-#: C/f-spot.xml:329(para)
-msgid ""
-"Out-of-focus photographs and most digitized images often need a sharpness "
-"correction. The Unsharp Mask effect sharpens edges of the elements without "
-"increasing noise or blemish. To sharpen a photo choose "
-"<menuchoice><guimenu>Edit</guimenu><guimenuitem>Sharpen...</guimenuitem></"
-"menuchoice> and specify the following values:"
-msgstr ""
-"Плохо сфокусированные снимки и большинство оцифрованных изображений часто "
-"нуждаются в коррекции резкости. Нерезкая маска обостряет края элементов без "
-"увеличения шума. Чтобы увеличить резкость, выберите меню "
-"<menuchoice><guimenu>Правка</guimenu><guimenuitem>Увеличить резкость...</"
-"guimenuitem> </menuchoice> и задайте следующие значения:"
-
-#: C/f-spot.xml:340(para)
-msgid ""
-"<parameter class=\"option\">Amount</parameter> — strength of sharpening."
-msgstr "<parameter class=\"option\">Величина</parameter> — сила резкости;"
-
-#: C/f-spot.xml:345(para)
-msgid ""
-"<parameter class=\"option\">Radius</parameter> — how many pixels on either "
-"side of an edge will be affected by sharpening. High resolution images allow "
-"higher radius."
-msgstr ""
-"<parameter class=\"option\">Радиус</parameter> — сколько пикселов по обе "
-"стороны от края будут зависеть от резкости. Изображения с высоким "
-"разрешением позволяют применять радиус большего размера;"
-
-#: C/f-spot.xml:352(para)
-msgid ""
-"<parameter class=\"option\">Threshold</parameter> — the minimum difference "
-"in pixel values that indicates an edge where sharpen must be applied. This "
-"helps avoiding creation of blemishes in face, sky or water surface."
-msgstr ""
-"<parameter class=\"option\">Порог</parameter> — минимальная разница в "
-"пикселах, которая указывает края, где надо применять увеличение резкости. "
-"Это помогает избежать возникновения пятен на лицах, небе или водной "
-"поверхности."
-
-#: C/f-spot.xml:362(title)
-msgid "Describe"
-msgstr "Комментарий"
-
-#: C/f-spot.xml:364(para)
-msgid ""
-"You can also enter a description of the image by clicking on the text entry "
-"box below the image and typing."
-msgstr ""
-"Чтобы ввести комментарий к изображению, нажмите левую кнопку мыши на строке "
-"ввода комментария."
-
-#: C/f-spot.xml:376(title)
-msgid "Adjust Time"
-msgstr "Корректировка времени"
-
-#: C/f-spot.xml:378(para)
-msgid ""
-"In both 'browse' or 'edit' modes, you can adjust the time of one or multiple "
-"pictures (<menuchoice><guimenu>Edit</guimenu><guimenuitem>Adjust Time</"
-"guimenuitem></menuchoice>). Adjusting the time of multiple pictures at once "
-"helps you shift all an import roll if, e.g. the time on your camera is badly "
-"set or if you forgot to change it according to DST."
-msgstr ""
-"В обоих режимах (просмотра и редактирования) можно скорректировать время для "
-"одной или сразу для нескольких фотографий: (<menuchoice><guimenu>Правка</"
-"guimenu><guimenuitem> Скорректировать время</guimenuitem> </menuchoice>). "
-"Корректировка времени одновременно для нескольких фотографий помогает "
-"перенести во времени сеанс импорта, если, например, время на фотокамере "
-"выставлено неправильно или если вы забыли изменить его в соответствии с "
-"летним временем."
-
-#: C/f-spot.xml:390(title)
-msgid "Tag"
-msgstr "Метки"
-
-#: C/f-spot.xml:391(para)
-msgid ""
-"F-Spot enables you to organize and enjoy your photos by associating them "
-"with various user-customizable tags. A tag is a merely a label. F-Spot comes "
-"with default tags to get you started; you are free to change them and add "
-"new ones. For example, if you want to create a tag for specific event, you "
-"can create a new tag named after that event under the Events tag."
-msgstr ""
-"F-Spot позволяет управлять фотоснимками с помощью различных меток, которые "
-"могут настраиваться пользователем. Первоначально в F-Spot есть несколько "
-"стандартных меток; их можно изменить или создать свои собственные метки. "
-"Например, если необходимо создать метку для определённого события, создайте "
-"новую метку, дайте ей название согласно произошедшему событию и разместите "
-"под меткой «События»."
-
-#: C/f-spot.xml:398(para)
-msgid "There are many ways to tag photos:"
-msgstr "Несколько способов назначения меток фотографиям:"
-
-#: C/f-spot.xml:403(para)
-msgid "drag and drop the photo(s) onto the tag"
-msgstr "перетащить мышью снимок (снимки) на метку;"
-
-#: C/f-spot.xml:408(para)
-msgid "drag and drop the tag onto the photo(s)"
-msgstr "перетащить мышью метку на снимок (снимки);"
-
-#: C/f-spot.xml:413(para)
-msgid "via the photo's right-click menu"
-msgstr "используя меню, которое появляется по нажатию правой кнопки мыши;"
-
-#: C/f-spot.xml:418(para)
-msgid "via the Tags and Edit menus"
-msgstr "используя меню <guimenu>Метки</guimenu> и <guimenu>Правка</guimenu>;"
-
-#: C/f-spot.xml:423(para)
-msgid ""
-"by typing them in (press <keycap>t</keycap> to pop up the tag entry bar, "
-"enter comma-separated tags) - with tab completion!"
-msgstr ""
-"ввести названия меток (нажмите <keycap>t</keycap> для появления всплывающей "
-"строки ввода меток; метки отделяются друг от друга запятыми) с возможностью "
-"автоматического дополнения их названий (с помощью клавиши <keycap>Tab</"
-"keycap>)."
-
-#: C/f-spot.xml:429(para)
-msgid ""
-"The first photo you associate with a tag will be used for that tag's icon. "
-"You can always edit a tag's name, parent tag, and icon by right clicking on "
-"it and choosing <guilabel>Edit tag</guilabel>."
-msgstr ""
-"Первая фотография, которой была назначена метка, будет использоваться в "
-"качестве значка метки. Имя метки, родительскую метку и значок метки можно "
-"изменить, если нажать на ней правую кнопку мыши и выбрать <guilabel>Изменить "
-"выбранную метку</guilabel>."
-
-#: C/f-spot.xml:434(para)
-msgid ""
-"You can change a tag's parent by dragging and dropping it where you like. "
-"Also, you can edit the name of a tag by selecting it and pressing "
-"<keycap>F2</keycap>. Lastly, if you have the tag tree widget focused (e.g. "
-"you just clicked on a tag), you can start typing the name of a tag, and all "
-"the expanded tags in the list will be searched and you'll jump to any "
-"matching ones."
-msgstr ""
-"Чтобы изменить родительскую метку, перетащите её с помощью мыши. Чтобы "
-"изменить имя метки, можно выделить её и нажать клавишу <keycap>F2</keycap>. "
-"Если дерево меток получило фокус ввода (например, нажата левая кнопка мыши "
-"на какой-нибудь метке), можно выполнить поиск меток из списка по имени, "
-"набрав имя метки."
-
-#: C/f-spot.xml:443(para)
-msgid ""
-"You can also change size of tag icons in the sidebar or even make tag icons "
-"invisible by selecting preferred option from <menuchoice><guimenu>View</"
-"guimenu><guimenuitem>Tag Icons</guimenuitem></menuchoice> menu."
-msgstr ""
-"С помощью меню <menuchoice><guimenu>Вид</guimenu><guimenuitem>Значки меток</"
-"guimenuitem></menuchoice> можно изменять размер значков меток на боковой "
-"панели или даже делать их скрытыми."
-
-#: C/f-spot.xml:451(para)
-msgid ""
-"F-Spot can write tags as metadata fields into JPEG files. Tags for various "
-"RAW files, PNG, TIFF, and others are written to F-Spot's database. You will "
-"have to re-tag these files if you re-import your collection."
-msgstr ""
-"F-Spot может записывать метки как поля метаданных в файлы JPEG. Метки для "
-"различных файлов RAW, PNG, TIFF и других форматов записываются в базу данных "
-"F-Spot. Вы должны переопределить метки для этих файлов в случае повторной "
-"операции импорта вашей коллекции."
-
-#: C/f-spot.xml:462(title)
-msgid "Enjoying your photos"
-msgstr "Работа с фотографиями"
-
-#: C/f-spot.xml:464(title)
-msgid "Browse"
-msgstr "Просмотр фотографий"
-
-#: C/f-spot.xml:465(para)
-msgid ""
-"You can use the slider widget to browse your photos by month or by "
-"directory. To change this setting, go to <menuchoice><guimenu>View</"
-"guimenu><guimenuitem>Arranged By</guimenuitem></menuchoice>."
-msgstr ""
-"Используя ползунок, можно просматривать фотографии по месяцам или каталогам. "
-"Этот параметр изменяется через меню <menuchoice><guimenu>Вид</"
-"guimenu><guimenuitem>Отсортировать по</guimenuitem></menuchoice>."
-
-#: C/f-spot.xml:473(title)
-msgid "Search"
-msgstr "Поиск фотографий"
-
-#: C/f-spot.xml:475(para)
-msgid ""
-"F-Spot uses search search filters to help you better define search criteria."
-msgstr ""
-"F-Spot использует поисковые фильтры, помогающие определить критерии поиска."
-
-#: C/f-spot.xml:480(title)
-msgid "Tags"
-msgstr "Метки"
-
-#: C/f-spot.xml:482(para)
-msgid ""
-"You can start a search by double clicking or activating a tag from the tag "
-"list. Alternatively, you can show the find bar with "
-"<menuchoice><guimenu>Find</guimenu><guimenuitem>Show Find Bar</guimenuitem></"
-"menuchoice>. With the find bar shown, you can drag tags from the tag view to "
-"the find bar."
-msgstr ""
-"Чтобы начать поиск, дважды нажмите левую кнопку мыши на метке, или "
-"активируйте метку из списка меток, или откройте панель поиска "
-"(<menuchoice><guimenu>Поиск</guimenu><guimenuitem>Показать панель поиска</"
-"guimenuitem></menuchoice>) и перетащите на неё метки с помощью мыши."
-
-#: C/f-spot.xml:488(para)
-msgid ""
-"To find photos that are tagged with both of two tags, activate the first in "
-"the tag view or drag it onto the find bar, then drag the second tag and drop "
-"it on top of the first. You can also right click on the second tag in the "
-"tag view, or use the <guimenu>Find</guimenu> menu, and choose "
-"<guimenuitem>Find With...</guimenuitem> and select the first tag (or group "
-"of tags)."
-msgstr ""
-"Чтобы найти фотографии, помеченные двумя метками, активируйте первую метку в "
-"списке меток слева или перетащите её мышью на панель поиска, затем "
-"перетащите вторую метку (отпустите левую кнопку мыши, когда вторая метка "
-"будет находиться над первой меткой). Либо нажмите правую кнопку мыши на "
-"второй метке (это также можно сделать через меню <menuchoice><guimenu>Поиск</"
-"guimenu><guimenuitem>Найти выбранную метку с</guimenuitem></menuchoice>) и "
-"выберите первую метку (или группу меток). "
-
-#: C/f-spot.xml:495(para)
-msgid ""
-"You can drag a tag icon around on the find bar to change from finding it and "
-"another tag to finding it or another tag."
-msgstr ""
-"Чтобы найти фотографию, помеченную определённой меткой, перетащите мышью "
-"значок метки на панель поиска."
-
-#: C/f-spot.xml:499(para)
-msgid ""
-"You can search for photos that do not have a particular tag by double-"
-"clicking on a tag in the find bar. Alternatively, you can right-click a tag "
-"in the find bar and select <guimenuitem>Exclude</guimenuitem>."
-msgstr ""
-"Чтобы найти фотографии, которые не имеют определённой метки, дважды нажмите "
-"левую кнопку мыши на этой метке на панели поиска, либо нажмите правую кнопку "
-"мыши на этой метке на панели поиска и выберите <guimenuitem>Исключая снимки "
-"с пометкой...</guimenuitem>."
-
-#: C/f-spot.xml:504(para)
-msgid ""
-"To remove a tag from the search, drag it away from the find bar, or right "
-"click and select <guimenuitem>Remove</guimenuitem>."
-msgstr ""
-"Чтобы удалить метку из поиска, вытащите её мышью с панели поиска, либо "
-"нажмите правую кнопку мыши и выберите <guimenuitem>Удалить</guimenuitem>."
-
-#: C/f-spot.xml:508(para)
-msgid ""
-"By default, photos tagged <emphasis>Hidden</emphasis> will not be shown. You "
-"must explicitly include the <emphasis>Hidden</emphasis> tag in your search "
-"to show such photos."
-msgstr ""
-"По умолчанию фотографии с пометкой <emphasis>Скрытые</emphasis> не "
-"отображаются. Чтобы эти фотографии отображались, включите в поиск метку "
-"<emphasis>Скрытые</emphasis>."
-
-#: C/f-spot.xml:516(title)
-msgid "Import Rolls"
-msgstr "Сеансы импорта"
-
-#: C/f-spot.xml:517(para)
-msgid ""
-"F-Spot remembers what pictures were imported every now and then. Use "
-"<menuchoice><guimenu>Find</guimenu><guisubmenu>Import Roll</"
-"guisubmenu><guimenuitem>Last import roll</guimenuitem></menuchoice> to limit "
-"search to last importing session or use <menuchoice><guimenu>Find</"
-"guimenu><guisubmenu>Import Roll</guisubmenu><guimenuitem>Select Import "
-"Rolls...</guimenuitem></menuchoice> to make a finer selection of imported "
-"photos:"
-msgstr ""
-"F-Spot запоминает, когда и какие фотографии были импортированы. Чтобы "
-"выбрать фотографии, импортированные за последний сеанс, используйте меню "
-"<menuchoice><guimenu>Поиск</guimenu><guisubmenu>По сеансу испорта</"
-"guisubmenu><guimenuitem>Последний сеанс импорта...</guimenuitem></"
-"menuchoice>. Чтобы выполнить более точный поиск, используйте "
-"<menuchoice><guimenu>Поиск</guimenu><guisubmenu>По сеансу импорта</"
-"guisubmenu><guimenuitem>Выбрать сеансы импорта...</guimenuitem></menuchoice>:"
-
-#: C/f-spot.xml:527(para)
-msgid ""
-"<parameter class=\"option\">At</parameter> — to select photos from a "
-"particular importing session"
-msgstr ""
-"<parameter class=\"option\">Во время</parameter> — выбрать фотографии с "
-"определённого сеанса импорта;"
-
-#: C/f-spot.xml:532(para)
-msgid ""
-"<parameter class=\"option\">After</parameter> — to select all photos "
-"imported begining with a particular importing sessio"
-msgstr ""
-"<parameter class=\"option\">После</parameter> — выбрать все фотографии, "
-"импортированные начиная с определённого сеанса импорта;"
-
-#: C/f-spot.xml:537(para)
-msgid ""
-"<parameter class=\"option\">Between</parameter> — to select all photos "
-"imported between two particular importing sessions"
-msgstr ""
-"<parameter class=\"option\">Между</parameter> — выбрать все фотографии, "
-"импортированные между двумя определёнными сеансами импорта."
-
-#: C/f-spot.xml:542(para)
-msgid ""
-"Every time you change settings of the filter, amount of selected photos will "
-"appear in the bottom part of the dialog."
-msgstr ""
-"Каждый раз, изменяя параметры фильтра, выбранные фотографии появляются в "
-"нижней части диалогового окна."
-
-#: C/f-spot.xml:546(para)
-msgid ""
-"When you apply Import Roll filter, in the Find bar you will see "
-"<guilabel>Find: Import Roll</guilabel>. Now you can add some other filter to "
-"finetune your selection."
-msgstr ""
-"Если использовать фильтр по сеансам импорта, на панели поиска появится "
-"надпись <guilabel>Найти: Сеанс импорта</guilabel>. Чтобы уточнить поиск, "
-"можно добавить несколько дополнительных фильтров."
-
-#: C/f-spot.xml:551(para)
-msgid ""
-"If you don't need the Import Roll filter anymore, choose "
-"<menuchoice><guimenu>Find</guimenu><guisubmenu>Import Roll</"
-"guisubmenu><guimenuitem>Clear roll filter</guimenuitem></menuchoice> to "
-"remove Import Roll from search criteria. You can also click the close button "
-"(<guibutton>X</guibutton>) of the search bar to discard all the current "
-"search options."
-msgstr ""
-"Если фильтр по сеансам импорта больше не нужен, его можно удалить: выберите "
-"<menuchoice><guimenu>Поиск</guimenu><guisubmenu>По сеансу импорта</"
-"guisubmenu><guimenuitem>Убрать фильтр сеансов импорта</guimenuitem></"
-"menuchoice>. Или нажмите кнопку \"Закрыть\" (<guibutton>X</guibutton>) на "
-"панели поиска, чтобы отменить все текущие параметры поиска."
-
-#: C/f-spot.xml:560(para)
-msgid ""
-"The number of displayed rolls in the dialog is defined by the gconf key "
-"<filename class=\"directory\">/apps/f-spot/import/gui_roll_history</"
-"filename>. Default value is 10."
-msgstr ""
-"Количество отображаемых сеансов в диалоговом окне определяется ключом gconf "
-"<filename class=\"directory\">/apps/f-spot/import/gui_roll_history</"
-"filename>. Значение по умолчанию — 10."
-
-#: C/f-spot.xml:569(title)
-msgid "Type-to-find"
-msgstr "Строка поиска"
-
-#: C/f-spot.xml:570(para)
-msgid ""
-"There is also a type-to-find entry. Press <keycap>/</keycap> to open it. It "
-"cannot be used at the same time as the find bar. You can type queries such "
-"as \"TagA and (TagB or (TagC and TagD))\". At any point, if F-Spot "
-"recognizes what you've typed as a valid query, it will update your search. "
-"The <emphasis>not</emphasis> operator is not yet supported."
-msgstr ""
-"Чтобы открыть строку поиска меток, нажмите клавишу <keycap>/</keycap>. "
-"Строка поиска не может использоваться одновременно с панелью поиска. В "
-"строке поиска вводятся запросы наподобие \"меткаA and (меткаB or (меткаC and "
-"меткаD))\". Если F-Spot признаёт введённый запрос корректным, список "
-"найденных фотографий сразу же обновляется. Оператор <emphasis>not</emphasis> "
-"на данный момент не поддерживается."
-
-#: C/f-spot.xml:578(para)
-msgid ""
-"This function will also search for the typed text into photos comments and "
-"filename."
-msgstr ""
-"Эта функция также осуществляет поиск текста в именах файлов и в комментариях "
-"к снимкам."
-
-#: C/f-spot.xml:585(title)
-msgid "Fullscreen Mode and Slideshows"
-msgstr "Полноэкранный режим и слайдшоу"
-
-#: C/f-spot.xml:586(para)
-msgid ""
-"For fewer distractions and larger display, you can view your photos in full "
-"screen mode. You control when to show the next photo or to return to the "
-"previous. Enter fullscreen mode by pressing <keycap>F11</keycap> at any time "
-"or by pressing the button in the toolbar."
-msgstr ""
-"Чтобы не отвлекаться от просмотра фотографий, можно использовать "
-"полноэкранный режим. В этом режиме можно управлять просмотром: перейти к "
-"следующей фотографии или вернуться к предыдущей. Чтобы включить "
-"полноэкранный режим, нажмите клавишу <keycap>F11</keycap> или нажмите кнопку "
-"на панели инструментов."
-
-#: C/f-spot.xml:593(title)
-msgid "FullScreen"
-msgstr "Во весь экран"
-
-#: C/f-spot.xml:600(para)
-msgid ""
-"In slideshow mode, you can sit back and view your photos as they are "
-"presented to you. You can start a slideshow by pressing the button on the "
-"toolbar."
-msgstr ""
-"Можно расслабиться и просмотреть фотографии в режиме слайдшоу. Чтобы "
-"запустить слайдшоу, нажмите кнопку на панели инструментов."
-
-#: C/f-spot.xml:606(title)
-msgid "SlideShow"
-msgstr "Слайдшоу"
-
-#: C/f-spot.xml:617(title)
-msgid "Sharing your photos"
-msgstr "Поделитесь своими фотографиями"
-
-#: C/f-spot.xml:620(para)
-msgid ""
-"There are many ways to share your photos using F-Spot. All of the following "
-"methods will only share the photos you have selected when you run them."
-msgstr ""
-"Существует несколько способов поделиться вашими фотографиями с другими. "
-"Действие всех описанных ниже методов распространяется только на выделенные "
-"фотографии."
-
-#: C/f-spot.xml:627(title)
-msgid "E-mail"
-msgstr "Электронная почта"
-
-#: C/f-spot.xml:628(para)
-msgid ""
-"E-mail your photos directly from F-Spot with the <menuchoice><guimenu>File</"
-"guimenu><guimenuitem>Send Mail</guimenuitem></menuchoice> menu."
-msgstr ""
-"Чтобы отправить фотографии из F-Spot по электронной почте, используйте меню "
-"<menuchoice><guimenu>Файл </guimenu><guimenuitem>Послать почтой</"
-"guimenuitem></menuchoice>."
-
-#: C/f-spot.xml:634(title)
-msgid "Note 1"
-msgstr "Замечание 1"
-
-#: C/f-spot.xml:635(para)
-msgid ""
-"The email program used for this is defined at the GNOME level. You can "
-"change the default e-mailer for your user using the <application>Preferred "
-"Applications</application> tool in <menuchoice><guimenu>System</"
-"guimenu><guisubmenu>Preferences</guisubmenu></menuchoice>."
-msgstr ""
-"Программа для работы с электронной почтой определяется на уровне приложений, "
-"используемых по умолчанию в GNOME. Клиент для работы с электронной почтой по "
-"умолчанию можно изменить, используя утилиту <application>Предпочитаемые "
-"приложения</application> в меню <menuchoice><guimenu>Система</"
-"guimenu><guisubmenu>Параметры</guisubmenu></menuchoice>."
-
-#: C/f-spot.xml:644(title)
-msgid "Note 2"
-msgstr "Замечание 2"
-
-#: C/f-spot.xml:645(para)
-msgid ""
-"If some of the photos you'd like to send by email are in a format that F-"
-"Spot can't write (e.g. RAW images), the size selection dialog will become "
-"insensitive and the originals will be sent."
-msgstr ""
-"Если некоторые из фотографий, которые вы хотите отправить по электронной "
-"почте, имеют формат, в который F-Spot не умеет сохранять (например, "
-"изображения RAW), диалог выбора размера станет нечувствительным и будут "
-"отправлены оригиналы."
-
-#: C/f-spot.xml:652(para)
-msgid ""
-"If you're sending resized pictures, F-Spot will keep the modified versions "
-"somewhere in the <filename class=\"directory\">/tmp</filename> directory for "
-"30 seconds. It's not an issue with evolution, which makes it's own local "
-"copy of the attachments, but could be a bit shorter if you're using "
-"Thunderbird. You can change the delay by editing the gconf key <filename "
-"class=\"directory\">/apps/f-spot/export/email/delete_timeout_seconds</"
-"filename>."
-msgstr ""
-"Если вы отправляете изображения с изменёнными размерами, F-Spot сохранит "
-"изменённые версии где-нибудь в каталоге <filename class=\"directory\">/tmp</"
-"filename> на 30 секунд. Это не важно для программы Evolution, которая "
-"создаёт собственные локальные копии вложений, однако это помогает несколько "
-"упростить работу с Thunderbird. Вы можете управлять задержкой, изменяя "
-"значение ключа gconf <filename class=\"directory\">/apps/f-spot/export/email/"
-"delete_timeout_seconds</filename>."
-
-#: C/f-spot.xml:664(title)
-msgid "Print"
-msgstr "Печать"
-
-#: C/f-spot.xml:665(para)
-msgid ""
-"Print your photos with the <menuchoice><guimenu>File</"
-"guimenu><guimenuitem>Print</guimenuitem></menuchoice> menu."
-msgstr ""
-"Чтобы напечатать фотографии, используйте меню <menuchoice><guimenu>Файл</"
-"guimenu><guimenuitem>Печать</guimenuitem></menuchoice>."
-
-#: C/f-spot.xml:672(title)
-msgid "Burn to CD"
-msgstr "Запись на оптический диск"
-
-#: C/f-spot.xml:673(para)
-msgid ""
-"Burn your photos to CD or DVD with the <menuchoice><guimenu>File</"
-"guimenu><guisubmenu>Export</guisubmenu><guimenuitem>Export to CD</"
-"guimenuitem></menuchoice> menu."
-msgstr ""
-"Чтобы записать фотографии на CD или DVD, используйте меню "
-"<menuchoice><guimenu>Файл</guimenu><guisubmenu>Экспортировать</"
-"guisubmenu><guimenuitem>Компакт-диск...</guimenuitem></menuchoice>."
-
-#: C/f-spot.xml:681(title)
-msgid "Generate a Website Gallery or Folder"
-msgstr "Создание веб-галереи или папки"
-
-#: C/f-spot.xml:682(para)
-msgid ""
-"The <menuchoice><guimenu>File</guimenu><guimenuitem>Export</"
-"guimenuitem><guimenuitem>Export to Folder</guimenuitem></menuchoice> feature "
-"gives you three ways to export your images."
-msgstr ""
-"Функция <menuchoice><guimenu>Файл</guimenu><guimenuitem>Экспортировать</"
-"guimenuitem><guimenuitem>Папка...</guimenuitem></menuchoice> предоставляет "
-"три различных способа экспорта изображений."
-
-#: C/f-spot.xml:690(para)
-msgid ""
-"<guilabel>Use Original</guilabel> exports your photos ready for use with "
-"Jakub Steiner's free <ulink url=\"http://jimmac.musichall.cz/original.php\"> "
-"Original Photo Gallery</ulink> software. If you are unsure about this "
-"option, it is probably not the right one for you."
-msgstr ""
-"<guilabel>Создать галерею при помощи \"Original\"</guilabel> экспортирует "
-"фотографии уже готовыми для использования с помощью свободной программы "
-"Якуба Штайнера (Jakub Steiner) <ulink url=\"http://jimmac.musichall.cz/"
-"original.php\"> Original Photo Gallery</ulink>. Для тех, кто не знает, что "
-"это такое, данный параметр вряд ли является подходящим."
-
-#: C/f-spot.xml:698(para)
-msgid ""
-"<guilabel>Use static HTML files</guilabel> exports your photos to an "
-"interactive website, ready for you to upload."
-msgstr ""
-"<guilabel>Создать отдельную веб-галерею</guilabel> экспортирует фотографии в "
-"готовый для загрузки интерактивный веб-сайт."
-
-#: C/f-spot.xml:704(para)
-msgid ""
-"<guilabel>Plain Files</guilabel> exports your images as files within "
-"directories, without putting them into a gallery."
-msgstr ""
-"<guilabel>Сохранить только файлы</guilabel> экспортирует изображения как "
-"файлы в каталогах, не включая их в галерею."
-
-#: C/f-spot.xml:713(title)
-msgid "Post to your online galleries"
-msgstr "Экспорт в сетевые галереи"
-
-#: C/f-spot.xml:714(para)
-msgid ""
-"If you use Flickr, SmugMug, 23hq or Picasa Web Album, you can post your "
-"files directly from F-Spot with the <menuchoice><guimenu>File</"
-"guimenu><guisubmenu>Export</guisubmenu></menuchoice> menu, choosing "
-"corresponding submenu item."
-msgstr ""
-"Для пользователей SmugMug, 23hq или Picasa Web Album, есть возможность "
-"публиковать снимки непосредственно из F-Spot с помощью меню "
-"<menuchoice><guimenu>Файл</guimenu><guisubmenu>Экспортировать</guisubmenu></"
-"menuchoice>."
-
-#: C/f-spot.xml:719(para)
-msgid ""
-"If you use the PHP software known as <ulink url=\"http://gallery.sourceforge."
-"net/\"> Gallery</ulink>, you can post your photos to your existing album "
-"with the <menuchoice><guimenu>File</guimenu><guimenuitem>Export</"
-"guimenuitem><guimenuitem>Export to Web Gallery</guimenuitem></menuchoice> "
-"menu. You must first enable the Remote module within your Gallery "
-"installation."
-msgstr ""
-"Пользователи программного обеспечения, известного как <ulink url=\"http://"
-"gallery.sourceforge.net/\"> Gallery</ulink>, могут размещать свои фотографии "
-"в существующий альбом с помощью меню <menuchoice><guimenu>Файл</"
-"guimenu><guimenuitem>Экспортировать</guimenuitem><guimenuitem>Web Gallery..."
-"</guimenuitem></menuchoice>. При установке Gallery должен быть включён "
-"модуль удалённого управления (Remote plugin)."
-
-#: C/f-spot.xml:727(title)
-msgid "Note for Gallery 2.2 users"
-msgstr "Заметка для пользователей Gallery 2.2"
-
-#: C/f-spot.xml:728(para)
-msgid "The Remote plugin for Gallery should be 1.0.8 or newer."
-msgstr ""
-"Модуль удалённого управления (Remote plugin) должен иметь версию 1.0.8 или "
-"более новую."
-
-#: C/f-spot.xml:732(para)
-msgid ""
-"<ulink url=\"http://pennave.sourceforge.net\">PennAve</ulink> is a Python "
-"web-application that directly uses F-Spot's database to present a dynamic "
-"gallery of your photos and tags."
-msgstr ""
-"<ulink url=\"http://pennave.sourceforge.net\">PennAve</ulink> — веб-"
-"приложение, написанное на языке Python, которое непосредственно использует "
-"базу данных F-Spot для представления динамической галереи ваших фотографий и "
-"меток."
-
-#: C/f-spot.xml:737(para)
-msgid ""
-"<ulink url=\"http://www.conduit-project.org\">Conduit</ulink> is an "
-"application that can sync photos that have a particular tag with your Flickr "
-"or Picasa Web Album web storage."
-msgstr ""
-"<ulink url=\"http://www.conduit-project.org\">Conduit</ulink> — приложение, "
-"способное синхронизировать фотографии, имеющие определённые метки, с веб-"
-"хранилищами Flickr и Picasa Web Album."
-
-#: C/f-spot.xml:746(title)
-msgid "Color management"
-msgstr "Управление цветом"
-
-#: C/f-spot.xml:749(title)
-msgid "What's color management"
-msgstr "Что такое управление цветом"
-
-#: C/f-spot.xml:751(para)
-msgid ""
-"When you capture a photo and look at it on a display, it looks different "
-"than on a camera's preview display or on any other display. It will also "
-"look different when you print it. This is because every device has unique "
-"color reproduction capabilities."
-msgstr ""
-"Когда вы импортируете снимок и просматриваете его на мониторе компьютера, он "
-"выглядит иначе, чем на мониторе фотокамеры или каком-либо другом мониторе. "
-"По-другому снимок будет выглядеть и при печати на принтере. Всё потому, что "
-"у каждого из этих устройств свои возможности в плане воспроизведения цвета."
-
-#: C/f-spot.xml:758(para)
-msgid ""
-"Color management system (CMS) is a tool to achieve reliable color "
-"reproduction for both display and output (e.g. a printer). A CMS relies on "
-"color profiles to map original colors to the color that a device can "
-"reproduce so that colors will appear the same way everywhere — on a computer "
-"LCD monitor, on a print from your local photolab etc."
-msgstr ""
-"Система управления цветом (Color management system, CMS) — это инструмент "
-"для достижения достоверного воспроизведения цвета как на мониторе, так и на "
-"устройстве вывода, например принтере. В основе CMS лежат цветовые профили, "
-"которые сопоставляют оригинальные цвета и те цвета, которые способно "
-"воспроизвести устройство, так что цвета отображаются одинаково на всех "
-"устройствах: на жидкокристаллическом мониторе, на отпечатанном в "
-"фотолаборатории снимке и так далее."
-
-#: C/f-spot.xml:768(title)
-msgid "What's a color profile"
-msgstr "Что такое цветовой профиль"
-
-#: C/f-spot.xml:770(para)
-msgid ""
-"A color profile is a file with either .icc (thus its is often called an ICC "
-"profile) or .icm extension that describes how device's colors correspond to "
-"a universal description of colors."
-msgstr ""
-"Цветовой профиль - это файл с расширением .icc (поэтому часто его называют "
-"профилем ICC) или .icm, который описывает, каким образом цвета устройства "
-"соответствуют универсальному описанию цветов."
-
-#: C/f-spot.xml:776(para)
-#| msgid "There are many ways to tag photos:"
-msgid "There are several types of profiles:"
-msgstr "Есть несколько типов профилей:"
-
-#: C/f-spot.xml:782(para)
-msgid ""
-"Input device profile. It's profile for a camera or a profile that an "
-"application like XSane embeds into a scanned image."
-msgstr ""
-"Профиль устройства ввода. Это профиль для фотокамеры или профиль, внедряемый "
-"в сканированное изображение такими программами, как XSane."
-
-#: C/f-spot.xml:788(para)
-msgid ""
-"Working space profile. It's a profile that describes color space in which "
-"all operations are done inside an application. Usually very wide gamut "
-"profiles like AdobeRGB1998 or ProPhotoRGB are used for that."
-msgstr ""
-"Профиль рабочего пространства. Это профиль, описывающий цветовое "
-"пространство, в котором производятся все операции внутри приложения. Обычно "
-"в качестве него используются профили весьма широкого диапазона, такие как "
-"AdobeRGB1998 или ProPhotoRGB."
-
-#: C/f-spot.xml:795(para)
-msgid "Display profile. It's a profile for a monitor."
-msgstr "Профиль дисплея. Это профиль для видеомонитора."
-
-#: C/f-spot.xml:800(para)
-msgid "Output profile. This is usually a profile for you printer."
-msgstr "Профиль вывода. Обычно это профиль для принтера."
-
-#: C/f-spot.xml:806(para)
-msgid ""
-"Currently F-Spot allows setting only display and output profiles. All color "
-"operations are done in sRGB color space."
-msgstr ""
-"В настоящее время F-Spot даёт возможность настраивать только профили "
-"монитора и вывода. Все операции с цветом производятся в цветовом "
-"пространстве sRGB."
-
-#: C/f-spot.xml:813(title)
-msgid "How to get my screen/printer color profile"
-msgstr "Как получить цветовой профиль для монитора (принтера)"
-
-#: C/f-spot.xml:815(para)
-#| msgid "There are many ways to tag photos:"
-msgid "There are few ways to get a color profile."
-msgstr "Существует несколько способов получения цветового профиля."
-
-#: C/f-spot.xml:820(title)
-msgid "From CD or Internet"
-msgstr "С компакт-диска или из Интернета"
-
-#: C/f-spot.xml:822(para)
-msgid ""
-"Many hardware manufacturers put color profiles into CD in the bundle. If you "
-"have one (from monitor or printer), you can use it. Or you can download it "
-"from the Internet (usually, from support section of the manufacturer's web "
-"site). Some camera manufacturers (Nikon, Canon) also provide ICC profiles."
-msgstr ""
-"Многие производители аппаратного обеспечения предоставляют цветовые профили "
-"на компакт-дисках, идущих в комплекте с устройствами. Если у вас есть такой "
-"диск (от монитора или принтера), вы можете его использовать. Или можете "
-"загрузить профили из Интернета (обычно из раздела поддержки на веб-сайте "
-"производителя). Некоторые производители камер (Nikon, Canon) также "
-"предоставляют профили ICC."
-
-#: C/f-spot.xml:832(title)
-msgid "Calibrating and profiling"
-msgstr "Калибровка и создание профиля"
-
-#: C/f-spot.xml:834(para)
-msgid ""
-"Best results can be achieved by calibrating and profiling devices with a "
-"measurement device. It is not so difficult, but it means that you need a "
-"spectrophotometer to do all measurements and create an ICC profile."
-msgstr ""
-"Наилучшие результаты могут быть достигнуты посредством калибровки и создания "
-"профилей устройств при помощи измерительного прибора. Это не так уж трудно, "
-"однако вам будет необходим спектрофотометр, чтобы проделать все измерения и "
-"создать профиль ICC."
-
-#: C/f-spot.xml:840(para)
-msgid ""
-"If you are on Windows or Mac OS X, you can use manufacturer's software "
-"coming with a spectrophotometer. On Linux you will have to use either <ulink "
-"url=\"http://www.argyllcms.com\">Argyll</ulink>, which is a set of versatile "
-"command line tools, or <ulink url=\"http://lprof.sourceforge.net/\">LProf</"
-"ulink>, which has a graphical user interface."
-msgstr ""
-"Если вы работаете под Windows или Mac OS X, вы можете использовать "
-"программное обеспечение производителя спектрофотометра. В Linux надо будет "
-"использовать либо <ulink url=\"http://www.argyllcms.com\">Argyll</ulink>, "
-"который является набором многоцелевых средств для работы в командной строке, "
-"либо <ulink url=\"http://lprof.sourceforge.net/\">LProf</ulink>, у которого "
-"имеется графический пользовательский интерфейс."
-
-#: C/f-spot.xml:848(para)
-msgid ""
-"Please refer to documentation of third party hardware and software vendors "
-"for details."
-msgstr ""
-"За дополнительной информацией обращайтесь к документации поставщиков "
-"стороннего аппаратного и программного обеспечения."
-
-#: C/f-spot.xml:855(title)
-msgid "Embedding"
-msgstr "Внедрение профиля"
-
-#: C/f-spot.xml:857(para)
-msgid ""
-"Image formats themselves (such as TIFF, JPEG, PNG...) may contain embedded "
-"color profiles. If color management is enabled, F-Spot looks for such "
-"embedded profiles and takes them into consideration."
-msgstr ""
-"Форматы файлов (такие как TIFF, JPEG, PNG и другие) сами могут содержать "
-"внедрённые в них цветовые профили. Если включено управление цветом, F-Spot "
-"ищет внедрённые профили и, найдя, принимает их во внимание."
-
-#: C/f-spot.xml:866(title)
-msgid "How to use color management in F-Spot"
-msgstr "Как использовать управление цветом в F-Spot"
-
-#: C/f-spot.xml:868(para)
-msgid ""
-"Color management in F-Spot can use only RGB profiles at this time (and you "
-"can't see other profiles in the F-Spot)."
-msgstr ""
-"Управление цветом в F-Spot использует на данный момент только профили RGB (и "
-"в F-Spot вы не сможете увидеть иные профили)."
-
-#: C/f-spot.xml:875(para)
-msgid ""
-"Copy your color profiles into the <filename class=\"directory\">/usr/share/"
-"color/icc</filename> or <filename class=\"directory\">/usr/local/share./"
-"color/icc</filename> directory."
-msgstr ""
-"Скопируйте цветовые профили в каталог <filename class=\"directory\">/usr/"
-"share/color/icc</filename> или <filename class=\"directory\">/usr/local/"
-"share./color/icc</filename>."
-
-#: C/f-spot.xml:883(para)
-#| msgid ""
-#| "Print your photos with the <menuchoice><guimenu>File</"
-#| "guimenu><guimenuitem>Print</guimenuitem></menuchoice> menu."
-msgid ""
-"Enable the color management with the <menuchoice><guimenu>Edit</"
-"guimenu><guimenuitem>Preferences</guimenuitem></menuchoice> menu."
-msgstr ""
-"Включите управление цветом с помощью меню <menuchoice><guimenu>Файл</"
-"guimenu><guimenuitem>Печать</guimenuitem></menuchoice>."
-
-#: C/f-spot.xml:890(para)
-msgid ""
-"Select <guilabel>Display</guilabel> and <guilabel>Output</guilabel> profiles."
-msgstr ""
-"Выберите профили: <guilabel>Монитор</guilabel> и <guilabel>Вывод печати</"
-"guilabel>."
-
-#: C/f-spot.xml:898(para)
-msgid ""
-"You can use <ulink url=\"http://burtonini.com/blog/computers/xicc\">xicc</"
-"ulink> to load ICC profile to display and use the loaded profile from F-"
-"Spot. Just mark the checkbox <guilabel>Try to use the system display "
-"profile</guilabel>."
-msgstr ""
-"Вы можете использовать <ulink url=\"http://burtonini.com/blog/computers/xicc"
-"\">xicc</ulink>, чтобы загрузить профиль ICC для монитора и работать с "
-"загруженным профилем в F-Spot. Всего лишь отметьте <guilabel>Использовать "
-"системный профиль</guilabel>."
-
-#: C/f-spot.xml:909(title)
-msgid "Extend functionality"
-msgstr "Расширение функциональности"
-
-#: C/f-spot.xml:912(title)
-msgid "What extensions are"
-msgstr "Что такое расширения"
-
-#: C/f-spot.xml:914(para)
-msgid ""
-"F-Spot extensions are means to add new functionality to the application. F-"
-"Spot supports two types of extension: exporters (which allow exporting "
-"photos to new web services or data storages) and tools (which allow new ways "
-"of color correction, duplicate photos finders etc.). Extensions are "
-"distributed in form of extension packages."
-msgstr ""
-"Расширения F-Spot добавляют приложению новые функциональные возможности. F-"
-"Spot поддерживает два вида расширений: программы экспорта (позволяют "
-"экспортировать фотографии в дополнительные веб-службы или хранилища данных) "
-"и инструменты (новые методы коррекции цвета, поиск дубликатов фотографий и "
-"т. д.). Расширения распространяются в виде пакетов расширений."
-
-#: C/f-spot.xml:921(para)
-msgid ""
-"In the best traditions of not reinventing the wheel extensions can use other "
-"extensions, which means that one extension cannot work, if another extension "
-"is not installed. This concept of dependance actually means that"
-msgstr ""
-"Одни расширения могут использовать другие расширения, поэтому некоторые из "
-"них не могут работать, если другое расширение не установлено. Такая "
-"концепция зависимостей приводит к тому, что:"
-
-#: C/f-spot.xml:928(para)
-msgid ""
-"you cannot install an extension, if the extension it depends on, is not "
-"present in the system"
-msgstr ""
-"нельзя установить расширение, зависящее от расширения, не установленного в "
-"системе;"
-
-#: C/f-spot.xml:933(para)
-msgid "you cannot remove an extension on which some other extension depends"
-msgstr "нельзя удалить расширение, от которого зависят другие расширения."
-
-#: C/f-spot.xml:941(title)
-msgid "Managing extensions"
-msgstr "Управление расширениями"
-
-#: C/f-spot.xml:943(para)
-msgid ""
-"To manage extensions choose <menuchoice><guimenu>Edit</"
-"guimenu><guimenuitem>Manage Extensions</guimenuitem></menuchoice> menu item."
-msgstr ""
-"Для управления расширениями используется меню <menuchoice><guimenu>Правка</"
-"guimenu><guimenuitem>Настроить расширения</guimenuitem></menuchoice>"
-
-#: C/f-spot.xml:949(title)
-msgid "Managing extension repositories"
-msgstr "Управление репозиториями расширений"
-
-#: C/f-spot.xml:951(para)
-msgid ""
-"Simply put, repositories are extension storages. They can be either network "
-"or local. To add a new repository click Repositories button, choose type of "
-"the repository you are about to add and provide either URL or path. If the "
-"URL or path you specified doesn't contain a description (index) file for "
-"extensions, a warning message will pop up to tell you that."
-msgstr ""
-"Репозитории — хранилища расширений. Они могут быть сетевыми или локальными. "
-"Чтобы добавить новый репозиторий, нажмите кнопку <guibutton>Репозитории</"
-"guibutton>, выберите тип репозитория и укажите URL или путь. Если указанный "
-"URL или путь не содержат файл с описанием расширения, об этом появится "
-"предупреждающее сообщение."
-
-#: C/f-spot.xml:958(para)
-msgid ""
-"To remove a repository click <guibutton>Repositories</guibutton> button "
-"again, choose the repository you are about to delete and click "
-"<guibutton>Delete</guibutton> button."
-msgstr ""
-"Чтобы удалить репозиторий, нажмите кнопку <guibutton>Репозитории...</"
-"guibutton>, выберите репозитории для удаления и нажмите кнопку "
-"<guibutton>Удалить...</guibutton>."
-
-#: C/f-spot.xml:966(title)
-msgid "Installing and updating extensions"
-msgstr "Установка и обновление расширений"
-
-#: C/f-spot.xml:968(para)
-msgid ""
-"To install an extension click <guibutton>Install extensions...</guibutton> "
-"button. In the newly presented dialog"
-msgstr ""
-"Чтобы установить расширение, нажмите кнопку <guibutton>Установить "
-"расширения...</guibutton>. В появившемся диалоговом окне"
-
-#: C/f-spot.xml:974(para)
-msgid ""
-"Choose repository to install from all known repositories or just one of "
-"available repositories."
-msgstr ""
-"Выберите репозиторий для установки из всех известных репозиториев или один "
-"из доступных репозиториев. "
-
-#: C/f-spot.xml:980(para)
-msgid ""
-"Choose, what extension packages you want to see: All, Only new, Only updates."
-msgstr ""
-"Выберите пакеты расширений: все пакеты, только новые версии, только "
-"обновления."
-
-#: C/f-spot.xml:985(para)
-msgid ""
-"Click the <guibutton>Update</guibutton> button to update list of available "
-"extension packages by given criteria."
-msgstr ""
-"Нажмите кнопку <guibutton>Обновить</guibutton>, чтобы обновить список "
-"доступных пакетов согласно выбранному критерию."
-
-#: C/f-spot.xml:991(para)
-msgid ""
-"Choose extensions you want to install/update, click <guibutton>Information</"
-"guibutton> to see summary on selected package, if you want to."
-msgstr ""
-"Выберите расширения для установки или обновления. Чтобы просмотреть описание "
-"к пакету, нажмите кнопку <guibutton>Информация</guibutton>."
-
-#: C/f-spot.xml:997(para)
-msgid "Click <guibutton>Forward</guibutton> to proceed with installation."
-msgstr "Нажмите <guibutton>Вперёд</guibutton>, чтобы продолжить установку."
-
-#: C/f-spot.xml:1005(title)
-msgid "Enabling and disabling extensions"
-msgstr "Включение и выключение расширений"
-
-#: C/f-spot.xml:1007(para)
-msgid ""
-"You might want to temporarily enable or disable a particular extension "
-"package, for example, if the extension is not stable enough to handle a "
-"large amount of photos or if menus get crowded with extensions."
-msgstr ""
-"Возможно, возникнет необходимость временно включить или отключить "
-"определённый пакет расширений. Например, если расширение не является "
-"достаточно стабильным для того, чтобы им можно было без риска обработать "
-"большое количество фотографий или если меню переполнено расширениями. "
-
-#: C/f-spot.xml:1012(para)
-msgid ""
-"In the <guilabel>Manage Extensions</guilabel> dialog select the extension "
-"package and click <guibutton>Enable</guibutton> or <guibutton>Disable</"
-"guibutton>. You will have to restart F-Spot to let changes apply."
-msgstr ""
-"В диалоговом окне <guilabel>Управление расширениями</guilabel> выберите "
-"пакет и нажмите кнопку <guibutton>Включить</guibutton> или "
-"<guibutton>Отключить</guibutton>. Чтобы изменения вступили в силу, "
-"необходимо перезапустить F-Spot."
-
-#: C/f-spot.xml:1020(title)
-msgid "Removing extensions"
-msgstr "Удаление расширений"
-
-#: C/f-spot.xml:1022(para)
-msgid ""
-"If you don't need an extension you can remove it from the system completely. "
-"In the <guilabel>Manage Extensions</guilabel> dialog select the extension "
-"package you want to remove and click <guibutton>Delete</guibutton>."
-msgstr ""
-"Если расширение лишнее, его можно полностью удалить из системы. В диалоговом "
-"окне <guilabel>Управление расширениями</guilabel> выберите пакет расширения "
-"для удаления и нажмите кнопку <guibutton>Удалить</guibutton>."
-
-#: C/f-spot.xml:1030(title)
-msgid "Reading summary of extensions"
-msgstr "Описания к расширениям"
-
-#: C/f-spot.xml:1032(para)
-msgid ""
-"Every extension package contains metadata that provides the following "
-"information about the extension:"
-msgstr ""
-"Каждый пакет расширения содержит метаданные, которые позволяют получить "
-"следующую информацию о расширении:"
-
-#: C/f-spot.xml:1038(para)
-msgid "Description, which usually covers puprose of the extension"
-msgstr ""
-"описание, в котором обычно говорится, для чего предназначено расширение;"
-
-#: C/f-spot.xml:1043(para)
-msgid "Version"
-msgstr "версия;"
-
-#: C/f-spot.xml:1048(para)
-msgid "Author"
-msgstr "автор;"
-
-#: C/f-spot.xml:1053(para)
-msgid "Dependencies"
-msgstr "зависимости."
-
-#: C/f-spot.xml:1059(para)
-msgid ""
-"In the <guilabel>Manage Extensions</guilabel> dialog select the extension "
-"package you want to read summary of and click <guibutton>Information</"
-"guibutton>."
-msgstr ""
-"В диалоговом окне <guilabel>Управление расширениями</guilabel> выберите "
-"пакет, описание к которому вы хотите прочесть, и нажмите кнопку "
-"<guibutton>Информация</guibutton>"
-
-#: C/f-spot.xml:1067(title)
-msgid "Developing extensions"
-msgstr "Разработка расширений"
-
-#: C/f-spot.xml:1069(para)
-msgid ""
-"<ulink url=\"http://f-spot.org/Extend_F-Spot\">Extend F-Spot</ulink> "
-"document gives instructions on developing your own extensions for F-Spot."
-msgstr ""
-"Документ <ulink url=\"http://f-spot.org/Extend_F-Spot\">Extend F-Spot</"
-"ulink> даёт инструкции по разработке собственных расширений для F-Spot."
-
-#: C/f-spot.xml:1077(title)
-msgid "Shortcuts"
-msgstr "Клавиатурные сокращения"
-
-#: C/f-spot.xml:1080(title)
-msgid "Global Shortcuts"
-msgstr "Клавиатурные сокращения: глобальное действие"
-
-#: C/f-spot.xml:1085(entry) C/f-spot.xml:1194(entry) C/f-spot.xml:1290(entry)
-#: C/f-spot.xml:1342(entry)
-msgid "Key"
-msgstr "Клавиша"
-
-#: C/f-spot.xml:1088(entry) C/f-spot.xml:1197(entry) C/f-spot.xml:1293(entry)
-#: C/f-spot.xml:1345(entry)
-msgid "Action"
-msgstr "Действие"
-
-#: C/f-spot.xml:1096(keycap)
-msgid "["
-msgstr "["
-
-#: C/f-spot.xml:1098(entry)
-msgid "Rotate the selected photos to the left"
-msgstr "Повернуть выбранные снимки влево"
-
-#: C/f-spot.xml:1104(keycap)
-msgid "]"
-msgstr "]"
-
-#: C/f-spot.xml:1106(entry)
-msgid "Rotate the selected photos to the right"
-msgstr "Повернуть выбранные снимки вправо"
-
-#: C/f-spot.xml:1112(keycap) C/f-spot.xml:1120(keycap)
-msgid "Del"
-msgstr "Del"
-
-#: C/f-spot.xml:1114(entry)
-#| msgid "Rotate the selected photos to the left"
-msgid "Remove selected photos from F-Spot's catalogue"
-msgstr "Удалить выбранные снимки из каталога F-Spot"
-
-#: C/f-spot.xml:1120(keycap) C/f-spot.xml:1213(keycap)
-#: C/f-spot.xml:1247(keycap) C/f-spot.xml:1256(keycap)
-#: C/f-spot.xml:1273(keycap) C/f-spot.xml:1427(keycap)
-msgid "Shift"
-msgstr "Shift"
-
-#: C/f-spot.xml:1122(entry)
-#| msgid "Rotate the selected photos to the right"
-msgid "Delete selected photos permanently from the drive"
-msgstr "Удалить выбранные снимки с жёсткого диска навсегда"
-
-#: C/f-spot.xml:1129(keycap)
-msgid "t"
-msgstr "t"
-
-#: C/f-spot.xml:1131(entry)
-msgid "View or edit tags for selected photos"
-msgstr "Показать или изменить метки для выделенных снимков"
-
-#: C/f-spot.xml:1137(keycap)
-msgid "F11"
-msgstr "F11"
-
-#: C/f-spot.xml:1139(entry) C/f-spot.xml:1380(entry)
-msgid "Full screen view"
-msgstr "Во весь экран"
-
-#: C/f-spot.xml:1145(keycap) C/f-spot.xml:1153(keycap)
-#: C/f-spot.xml:1161(keycap) C/f-spot.xml:1169(keycap)
-#: C/f-spot.xml:1205(keycap) C/f-spot.xml:1213(keycap)
-#: C/f-spot.xml:1231(keycap) C/f-spot.xml:1256(keycap)
-#: C/f-spot.xml:1309(keycap)
-msgid "Ctrl"
-msgstr "Ctrl"
-
-#: C/f-spot.xml:1145(keycap)
-msgid "I"
-msgstr "I"
-
-#: C/f-spot.xml:1147(entry)
-msgid "Displays information about the photo"
-msgstr "Показать информацию о снимке"
-
-#: C/f-spot.xml:1153(keycap)
-msgid "Equals"
-msgstr "="
-
-#: C/f-spot.xml:1155(entry)
-msgid "Zoom-in"
-msgstr "Приблизить"
-
-#: C/f-spot.xml:1161(keycap)
-msgid "Minus"
-msgstr "-"
-
-#: C/f-spot.xml:1163(entry)
-msgid "Zoom-out"
-msgstr "Отдалить"
-
-#: C/f-spot.xml:1169(keycap) C/f-spot.xml:1361(keycap)
-msgid "N"
-msgstr "N"
-
-#: C/f-spot.xml:1171(entry)
-msgid "Import photos"
-msgstr "Импорт фотографий"
-
-#: C/f-spot.xml:1177(keycap)
-msgid "Alt"
-msgstr "Alt"
-
-#: C/f-spot.xml:1177(keycap)
-msgid "0-5"
-msgstr "0-5"
-
-#: C/f-spot.xml:1179(entry)
-msgid "Alt plus a number from 0 to 5 rate the selected picture(s)"
-msgstr "Alt + цифра от 0 до 5 - для оценки выбранного снимка (снимков)"
-
-#: C/f-spot.xml:1189(title)
-msgid "Browse Mode Shortcuts"
-msgstr "Клавиатурные сокращения: режим браузера "
-
-#: C/f-spot.xml:1205(keycap) C/f-spot.xml:1214(keycap)
-msgid "A"
-msgstr "A"
-
-#: C/f-spot.xml:1207(entry)
-msgid "Select all"
-msgstr "Выделить все"
-
-#: C/f-spot.xml:1216(entry)
-msgid "Unselect all"
-msgstr "Снять выделение"
-
-#: C/f-spot.xml:1222(keycap) C/f-spot.xml:1369(keycap)
-msgid "H"
-msgstr "H"
-
-#: C/f-spot.xml:1222(keycap) C/f-spot.xml:1369(keycap)
-msgid "J"
-msgstr "J"
-
-#: C/f-spot.xml:1223(keycap) C/f-spot.xml:1370(keycap)
-msgid "K"
-msgstr "K"
-
-#: C/f-spot.xml:1223(keycap) C/f-spot.xml:1370(keycap)
-msgid "L"
-msgstr "L"
-
-#: C/f-spot.xml:1221(entry) C/f-spot.xml:1368(entry)
-#| msgid ""
-#| "Arrow keys (up, down, left, right) or <placeholder-1/>, <placeholder-2/>, "
-#| "<placeholder-3/>, <placeholder-4/> keys"
-msgid ""
-"Arrow keys or <placeholder-1/>, <placeholder-2/>, <placeholder-3/>, "
-"<placeholder-4/>"
-msgstr ""
-"Клавиши со стрелками или клавиши <placeholder-1/>, <placeholder-2/>, "
-"<placeholder-3/>, <placeholder-4/>"
-
-#: C/f-spot.xml:1225(entry)
-msgid "Move focus"
-msgstr "Переместить фокус"
-
-#: C/f-spot.xml:1230(entry)
-#| msgid "<placeholder-1/>-arrow key"
-msgid "<placeholder-1/>-Arrow key"
-msgstr "<placeholder-1/> + Клавиша со стрелкой"
-
-#: C/f-spot.xml:1233(entry)
-msgid "Move the focus without changing the selection"
-msgstr "Переместить фокус без изменения выделения"
-
-#: C/f-spot.xml:1239(keycap) C/f-spot.xml:1361(keycap)
-msgid "Spacebar"
-msgstr "Пробел"
-
-#: C/f-spot.xml:1241(entry)
-msgid "Select or unselect the focused photo"
-msgstr "Выбрать или снять выделение с фотографии, находящейся в фокусе"
-
-#: C/f-spot.xml:1248(keycap)
-#| msgid "arrow key"
-msgid "Arrow key"
-msgstr "клавиша со стрелкой"
-
-#: C/f-spot.xml:1250(entry)
-msgid "Change the photo selection"
-msgstr "Изменить выделение"
-
-#: C/f-spot.xml:1257(keycap)
-#| msgid "left arrow or right arrow"
-msgid "Left arrow or Right arrow"
-msgstr "стрелка влево или вправо"
-
-#: C/f-spot.xml:1259(entry)
-msgid ""
-"Add/Remove all photos in the row, in the direction pressed, to the selection"
-msgstr ""
-"Добавить в выделение или снять выделение с фотографий в строке в выбранном "
-"направлении"
-
-#: C/f-spot.xml:1265(keycap) C/f-spot.xml:1273(keycap)
-#: C/f-spot.xml:1418(keycap)
-msgid "V"
-msgstr "V"
-
-#: C/f-spot.xml:1267(entry)
-msgid "Pops up a larger preview of the picture pointed by the mouse"
-msgstr ""
-"Всплывающее окно предварительного просмотра изображения, над которым "
-"находится указатель мыши"
-
-#: C/f-spot.xml:1275(entry)
-msgid ""
-"Pops up a larger preview and a color histogram of the picture pointed by the "
-"mouse"
-msgstr ""
-"Всплывающее окно предварительного просмотра и цветовая гистограмма "
-"изображения, над которым находится указатель мыши"
-
-#: C/f-spot.xml:1285(title)
-msgid "Tag Shortcuts"
-msgstr "Клавиатурные сокращения: метки"
-
-#: C/f-spot.xml:1301(keycap)
-msgid "F2"
-msgstr "F2"
-
-#: C/f-spot.xml:1303(entry)
-msgid "Rename selected tag"
-msgstr "Переименовать выделенную метку"
-
-#: C/f-spot.xml:1309(keycap)
-msgid "T"
-msgstr "T"
-
-#: C/f-spot.xml:1311(entry)
-msgid "Add tags to selected photos"
-msgstr "Назначить метки выделенным фотографиям"
-
-#: C/f-spot.xml:1316(entry) C/f-spot.xml:1324(entry)
-msgid "n/a"
-msgstr "нет"
-
-#: C/f-spot.xml:1319(entry)
-msgid "Drag and drop tags to move them"
-msgstr "Перетащить мышью метки для их перемещения"
-
-#: C/f-spot.xml:1327(entry)
-msgid "Type a tag's name to jump to it (only works if tag is shown/expanded)"
-msgstr ""
-"Набрать имя метки, чтобы перейти к ней (работает, только когда метка видима)"
-
-#: C/f-spot.xml:1337(title)
-msgid "Edit Mode Shortcuts"
-msgstr "Клавиатурные сокращения: режим редактирования"
-
-#: C/f-spot.xml:1353(keycap)
-msgid "Page Up"
-msgstr "Page Up"
-
-#: C/f-spot.xml:1353(keycap)
-msgid "Backspace"
-msgstr "Backspace"
-
-#: C/f-spot.xml:1353(keycap)
-msgid "B"
-msgstr "B"
-
-#: C/f-spot.xml:1352(entry) C/f-spot.xml:1360(entry)
-#| msgid "<placeholder-1/>, <placeholder-2/>"
-msgid "<placeholder-1/>, <placeholder-2/>, <placeholder-3/>"
-msgstr "<placeholder-1/>, <placeholder-2/>, <placeholder-3/>"
-
-#: C/f-spot.xml:1355(entry)
-msgid "Go to Previous Photo"
-msgstr "Перейти к предыдущей фотографии"
-
-#: C/f-spot.xml:1361(keycap)
-msgid "Page Down"
-msgstr "Page Down"
-
-#: C/f-spot.xml:1363(entry)
-msgid "Go to Next Photo"
-msgstr "Перейти к следующей фотографии"
-
-#: C/f-spot.xml:1372(entry)
-msgid "Go to Previous/Next photo or move around a zoomed photo"
-msgstr ""
-"Перейти к предыдущему/следующему снимку или перемещаться по снимку в режиме "
-"приближения."
-
-#: C/f-spot.xml:1378(keycap)
-msgid "f"
-msgstr "f"
-
-#: C/f-spot.xml:1386(keycap)
-msgid "0"
-msgstr "0"
-
-#: C/f-spot.xml:1388(entry)
-msgid "Fit the image to the screen"
-msgstr "Подогнать изображение к размеру экрана"
-
-#: C/f-spot.xml:1394(keycap)
-msgid "1"
-msgstr "1"
-
-#: C/f-spot.xml:1396(entry)
-msgid "Zoom Factor to 1.0 (1 screen pixel per image pixel)"
-msgstr "Коэффициент увеличения 1.0 (1 пиксел экрана на пиксел изображения)"
-
-#: C/f-spot.xml:1402(keycap)
-msgid "2"
-msgstr "2"
-
-#: C/f-spot.xml:1404(entry)
-msgid "Zoom Factor to 2.0 (4 screen pixels per image pixel)"
-msgstr "Коэффициент увеличения 2.0 (4 пиксела экрана на пиксел изображения)"
-
-#: C/f-spot.xml:1410(keycap)
-msgid "Escape"
-msgstr "Escape"
-
-#: C/f-spot.xml:1412(entry)
-msgid "Returns to Browser mode"
-msgstr "Вернуться в режим просмотра"
-
-#: C/f-spot.xml:1422(keycap)
-msgid "v"
-msgstr "v"
-
-#: C/f-spot.xml:1420(entry)
-msgid ""
-"Examine photo with magnifying glass (Loupe). Doubleclick on the Loupe, or "
-"type <placeholder-1/> again to close it."
-msgstr ""
-"Рассмотреть фотографию через увеличительное стекло (лупу). Чтобы убрать "
-"увеличительное стекло, дважды нажмите на нём левую кнопку мыши, или нажмите "
-"<placeholder-1/>."
-
-#: C/f-spot.xml:1426(entry)
-#| msgid "<placeholder-1/>-arrow key"
-msgid "<placeholder-1/>-Mousewheel"
-msgstr "<placeholder-1/> + колёсико мыши"
-
-#: C/f-spot.xml:1429(entry)
-msgid "Faster filmstrip scrolling"
-msgstr "Ускоренная прокрутка фотоленты"
-
-#: C/f-spot.xml:1435(keycap)
-msgid "i"
-msgstr "i"
-
-#: C/f-spot.xml:1437(entry)
-msgid "Toggle infobox visibility ''(only when in full screen)''"
-msgstr ""
-"Включить или отключить видимость панели информации (только в "
-"полноэкранном режиме)"
-
-#. Put one translator per line, in the form of NAME <EMAIL>, YEAR1, YEAR2.
-#: C/f-spot.xml:0(None)
-msgid "translator-credits"
-msgstr ""
-"Yuri Myasoedov <omerta13 at yandex.ru>, 2008\n"
-"Dmitriy Kodanev <dkodanev at gmail.com>, 2009"
diff --git a/docs/sl/f-spot.xml b/docs/sl/f-spot.xml
deleted file mode 100644
index 2b20540..0000000
--- a/docs/sl/f-spot.xml
+++ /dev/null
@@ -1,874 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!DOCTYPE book PUBLIC "-//OASIS//DTD DocBook XML 4.1.2//EN" "http://www.oasis-open.org/docbook/xml/4.1.2/docbookx.dtd">
-<book id="f-spot" lang="sl">
- <bookinfo>
- <title>F-Spot priročnik</title>
- <abstract role="description">
- <para>To je uporabniški priročnik za F-Spot, GNOME upravljalnik fotografij</para>
- </abstract>
- <subtitle>To je uporabniški priročnik za F-Spot, GNOME upravljalnik fotografij</subtitle>
- <copyright>
- <year>2007-2009</year>
- <holder>Aaron Bockover, Gabriel Burt, Miguel de Icaza, Bengt Thuree</holder>
- </copyright>
- <publisher>
- <publishername>GNOME projekt dokumentacije</publishername>
- </publisher>
- <authorgroup>
- <author>
- <firstname>Miguel</firstname>
- <surname>de Icaza</surname>
- </author>
- <author>
- <firstname>Aaron</firstname>
- <surname>Bockover</surname>
- </author>
- <author>
- <firstname>Bengt</firstname>
- <surname>Thuree</surname>
- </author>
- <author>
- <firstname>Gabriel</firstname>
- <surname>Burt</surname>
- </author>
- <author>
- <firstname>Alexandre</firstname>
- <surname>Prokoudine</surname>
- </author>
- <author role="maintainer">
- <firstname>Stephane</firstname>
- <surname>Delcroix</surname>
- </author>
- </authorgroup>
- <!--<include href="legal.xml" xmlns="http://www.w3.org/2001/XInclude"/>-->
- <revhistory>
- <revision>
- <revnumber>0,5</revnumber>
- <date>2008-09-25</date>
- </revision>
- <revision>
- <revnumber>0,4</revnumber>
- <date>2008-09-12</date>
- </revision>
- <revision>
- <revnumber>0,3</revnumber>
- <date>26-07-2007</date>
- </revision>
- </revhistory>
- </bookinfo>
-
- <chapter id="organizing">
- <title>Organizacija vaših fotografij</title>
-
- <sect1 id="import">
- <title>Uvažanje</title>
-
- <para>Fotografije lahko uvozite s trdega diska ali fotoaparata. V primeru uvoza fotografij v F-Spot s fotoaparata, bo F-Spot vedno naredil njihovo kopijo in vam omogočil čiščenje pomnilnika vašega fotoaparata. Privzeto F-Spot naredi kopijo fotografij uvoženih s trdega diska. V primeru da datotek ne želite kopirati s trdega diska, odkljukajte možnost <guilabel>Kopiranje datotek v mapo fotografij</guilabel> v pogovornem oknu uvoza ali pa med vlečenjem fotografij v F-Spot držite tipko <keycap>Dvigalka</keycap>.</para>
-
- <para>Privzeto F-Spot kopira vaše fotografije v mapo <filename class="directory">~/Slike</filename>. Mapo, ki jo uporablja F-Spot lahko spremenite v pogovornem oknu <guilabel>Možnosti</guilabel> (<menuchoice><guimenu>Uredi</guimenu><guimenuitem>Možnosti</guimenuitem></menuchoice>).</para>
- <para>V primeru da ste morda nekatere fotografije iz izbranega vira že uvozili, lahko uporabite možnost <guilabel>Zaznavanje dvojnikov</guilabel>. F-Spot bo poskusil ugotoviti ali natanko ta slika že obstaja v podatkovni zbirki. V tem primeru kopija slike ne bo uvožena.</para>
- <para>V primeru da so vse uvožene fotografije z določenega dogodka, ali imajo neko drugo skupno značilnost, lahko za njih ustvarite oznako zato da jih kasneje lahko najdete. Za to sledite navodilom z <xref linkend="tag"/> za ustvarjanje nove oznake, nato med uvažanjem označite gumb <guilabel>Pripni oznako</guilabel> in izberite ustvarjeno oznako.</para>
-
- <tip>
- <para>F-Spot uporablja podatkovno zbirko shranjeno v <filename>~/.config/f-spot/photos.db</filename>. Za dostop do nje uporabite ukaz sqlite3. Pot do podatkovne zbirke lahko ročno navedete z zagonom F-Spot z možnostjo <option>-b</option>.</para>
- </tip>
-
- <para>Po uvozu bo F-Spot prikazal le slike zadnjega uvoznega zvitka. Preberite <xref linkend="enjoying-search"/> za podrobnosti o upravljanju z uvoznimi zvitki.</para>
- <para>Uvoziti je mogoče tudi neposredno iz Mozilla <ulink url="http://www.mozilla.com/en-US/firefox/">Firefox</ulink> in <ulink url="http://www.mozilla.com/en-US/thunderbird/">Thunderbird</ulink> z uporabo <ulink url="https://addons.mozilla.org/en-US/firefox/addon/7091">Firefox</ulink> in <ulink url="https://addons.mozilla.org/en-US/thunderbird/addon/7011">Thunderbird</ulink> razširitve F-Spot uvoznik, ki jo je napisal<ulink url="http://personalpages.tds.net/~cdovel/">Pizzach</ulink>.</para>
- </sect1>
-
- <sect1 id="edit">
- <title>Urejanje</title>
-
- <para>V primeru da dvojno kliknite ali pritisnete vnosno tipko, vstopite v način urejanje, kjer lahko odstranite rdeče oči, obrežete ter prilagodite svetlost in barve.</para>
-
- <sect2 id="edit-versions">
- <title>Različice</title>
-
- <para>Ko urejate fotografije, je ustvarjena nova kopija (imenovana različica), tako izvorna fotografija ni nikoli spremenjena. Po prvem urejanju fotografije bodo naslednja urejanja spremenila isto različico. V primeru da želite ustvariti več različic fotografije, morda z drugim obrezovanjem ali barvami lahko to storite preko možnosti <menuchoice><guimenu>Fotografija</guimenu><guimenuitem>Ustvari novo različico</guimenuitem></menuchoice>.</para>
- </sect2>
-
- <sect2 id="edit-crop">
- <title>Obreži</title>
-
- <para>Obrezovanje slike je dober način za izboljšanje kakovosti slike s spremembo okvirjanja. Fotografijo lahko obrežete z izbiro dela fotografije, ki ga želite obdržati. V primeru da želite imeti fotografijo natančnih mer zahtevanih za določeno velikost tiskanja, lahko z izbiro primerne velikosti s spustnega menija omejitev omejite izbiro, ki vam jo bo dovolil narisati F-Spot. Za podrobnosti o izbiri na fotografiji si oglejte <xref linkend="edit-remove-red-eye"/> spodaj.</para>
- <figure>
- <title>Orodje obreži</title>
- <mediaobject>
- <imageobject>
- <imagedata fileref="figures/f-spot-crop.png"/>
- </imageobject>
- </mediaobject>
- </figure>
- <para>Ko ste naredili izbor obreza, morate za končanje obrezovanja klikniti gumb pod sliko. V primeru da delate z izvorno fotografijo, obrezovanje ustvari novo različico vaše fotografije.</para>
- </sect2>
-
- <sect2 id="edit-straighten">
- <title>Poravnava</title>
-
- <para>Učinek poravnave je orodje za poravnanje fotografij, precej uporabno za sliko pokrajine posnete brez stativa, ko (navidezna) črta horizonta ni na 0°. To orodje zavrti sliko za določen kot in samodejno čarobno obreže nastalo sliko, tako da vedno vidite idealen pravokotnik.</para>
- <figure>
- <title>Orodje poravnave</title>
- <mediaobject>
- <imageobject>
- <imagedata fileref="figures/f-spot-straighten.png"/>
- </imageobject>
- </mediaobject>
- </figure>
- </sect2>
-
- <sect2 id="edit-adjust-colors">
- <title>Prilagajanje barv</title>
-
- <para>Za prilagajanje svetlosti, kontrasta in barv fotografije najprej kliknite ikono <guibutton>Prilagodi barve fotografije</guibutton> za odpiranje pogovornega okna prilagajanja. Spremenite nekaj nastavitev in jih shranite z <guibutton>V redu</guibutton>.</para>
- <figure>
- <title>Orodje prilagajanja barv</title>
- <mediaobject>
- <imageobject>
- <imagedata fileref="figures/f-spot-adjust-colors.png"/>
- </imageobject>
- </mediaobject>
- </figure>
- </sect2>
-
- <sect2 id="edit-auto-color">
- <title>Samodejna barva</title>
-
- <para>Ta učinek samodejno prilagodi barvne ravni za ustvarjanje barvno uravnotežene slike. Najboljše deluje za slike posnete s samodejnim ravnotežjem bele barve, ko fotoaparat ni uspel dobro opraviti dela. </para>
- <figure>
- <title>Samodejna barva</title>
- <mediaobject>
- <imageobject>
- <imagedata fileref="figures/f-spot-autocolor.png"/>
- </imageobject>
- </mediaobject>
- </figure>
- </sect2>
-
- <sect2 id="edit-desaturate">
- <title>Zmanjšaj nasičenje</title>
-
- <para>Za pretvorbo barve fotografije v črno belo odprite izbrano fotografijo iz pritisnite gumb <guibutton>Zmanjšaj nasičenje</guibutton>.</para>
- <figure>
- <title>Orodje zmanjšanja nasičenja</title>
- <mediaobject>
- <imageobject>
- <imagedata fileref="figures/f-spot-desaturate.png"/>
- </imageobject>
- </mediaobject>
- </figure>
- </sect2>
-
- <sect2 id="edit-sepia">
- <title>Sepia</title>
-
- <para>Za pretvorbo barvne fotografije v staro sliko sepia tonov odprite izbrano fotografijo in pritisnite gumb <guibutton>Sepia učinek staranja</guibutton>.</para>
- <figure>
- <title>Orodje zmanjšanja nasičenja</title>
- <mediaobject>
- <imageobject>
- <imagedata fileref="figures/f-spot-sepia.png"/>
- </imageobject>
- </mediaobject>
- </figure>
- </sect2>
-
- <sect2 id="edit-remove-red-eye">
- <title>Odstranjevanje rdečih oči</title>
-
- <para>Za odstranitev rdečih oči s fotografije morate izbrati področje, ki vsebuje oči. Pametno je povečati sliko za natančno izbiro oči v fotografiji. Naenkrat bi lahko popravite obe oči iste osebe ali celo oči več oseb na enkrat. V primeru da to ne deluje, ali izbrano področje vsebuje druge živo rdeče dele (ustnice, ...) boste najbrž morali popraviti eno oko na enkrat.</para>
- <para>Za izbiranje kliknite en kot kvadrata, ki bo vaš izbor, povlecite vašo miško v diagonalni kot in jo spustite. Izboru lahko spremenite velikost z vlečenjem njegovih robom ali pa ga lahko premaknete s klikom v sredino izbora in ga povlečete kamor ga želite.</para>
- <para>Ko ste izbrali področje, lahko rdeče oko odstranite s klikom na gumb rdeče-oko pod fotografijo.</para>
- <figure>
- <title>Orodje rdečih oči</title>
- <mediaobject>
- <imageobject>
- <imagedata fileref="figures/f-spot-red-eye.png"/>
- </imageobject>
- </mediaobject>
- </figure>
- <tip>
- <para>Prag za zaznavanje rdečih oči lahko spremenite s spremembo gconf ključa ¸<filename class="directory">/apps/f-spot/edit/redeye_threshold</filename>.</para>
- </tip>
- </sect2>
-
- <sect2 id="edit-soft-focus">
- <title>Mehko žarišče</title>
-
- <para>V fotografiji je izostritev enega predela slike in zameglitev vsega ostalega način za poudarjanje in pridobitev pozornosti. To je mogoče doseči z uporabo leče ki dovoli snemanje s kratko razdaljo pred in za predmetom, ki je videti v gorišču. Učinek mehkega gorišča je način za posnemanje takšne leče.</para>
- <figure>
- <title>Orodje mehkega žarišča</title>
- <mediaobject>
- <imageobject>
- <imagedata fileref="figures/f-spot-soft-focus.png"/>
- </imageobject>
- </mediaobject>
- </figure>
- <para>Kliknite za izbor središča področja, ki naj bo v gorišču in prilagodite količino megljenja in nato kliknite <guibutton>V redu</guibutton>.</para>
- </sect2>
-
- <sect2 id="edit-sharpen">
- <title>Izostritev</title>
-
- <para>Fotografije izven gorišča in večina digitaliziranih slik pogosto potrebujejo popravek izostritve. Učinek maske odstranitve izostritve izostri robove elementov brez povečanja šuma ali napak. Za izostritev fotografije izberite <menuchoice><guimenu>Uredi</guimenu><guimenuitem>Izostri...</guimenuitem></menuchoice> in navedite naslednje vrednosti:</para>
-
- <itemizedlist>
- <listitem>
- <para><parameter class="option">Količina</parameter> — moč izostritve.</para>
- </listitem>
- <listitem>
- <para><parameter class="option">Polmer</parameter> — na koliko točk na vsaki strani roba bo vplivala izostritev. Slike z visoko ločljivostjo omogočijo večje polmere.</para>
- </listitem>
- <listitem>
- <para><parameter class="option">Prag</parameter> — najmanjša razlika v vrednostih točk ki določiti rob, kjer mora biti uveljavljena izostritev. To pomaga pri izogibanju ustvarjanja napak v obrazu, nebu ali vodni površini.</para>
- </listitem>
- </itemizedlist>
- </sect2>
-
- <sect2 id="edit-describe">
- <title>Opisovanje</title>
-
- <para>Vpis slike lahko vnesete s klikom na polje besedilnega vnosa pod sliko in tipkanjem.</para>
- <para>Ko ste naredili izbor obreza, morate za končanje obrezovanja klikniti gumb pod sliko. V primeru da delate z izvorno fotografijo, obrezovanje ustvari novo različico vaše fotografije.</para>
- </sect2>
-
- <sect2 id="edit-adjust-time">
- <title>Prilagodi čas</title>
-
- <para>Tako v načinu 'brskanje' kot 'urejanje' lahko prilagodite čas ene ali več slik (<menuchoice><guimenu>Uredi</guimenu><guimenuitem>Prilagodi čas</guimenuitem></menuchoice>). Prilagajanje časa več slik na enkrat vam pomaga premakniti celoten uvozni zvitek, na primer če je čas na vašem fotoaparatu slabo nastavljen in ste ali če ste ga pozabili spremeniti z/na poletni čas. </para>
- </sect2>
- </sect1>
-
- <sect1 id="tag">
- <title>Oznaka</title>
- <para>F-Spot vam omogoča organizacijo in uživanje v vaših fotografijah s povezavo z različnimi uporabniško prilagodljivimi oznakami. F-Spot za začetek vsebuje privzete oznake, lahko jih spremenite in dodate nove. Na primer, če želite ustvariti oznako za določen dogodek, lahko ustvarite oznako imenovano po dogodku pod oznako dogodki.</para>
- <para>Obstaja več načinov za oznako fotografij:</para>
- <itemizedlist>
- <listitem>
- <para>povlecite in spustite fotografij-o/e na oznako</para>
- </listitem>
- <listitem>
- <para>povlecite in spustite oznako na fotografij-o/e</para>
- </listitem>
- <listitem>
- <para>preko menija desnega klika fotografija</para>
- </listitem>
- <listitem>
- <para>preko menijev Oznake in Uredi</para>
- </listitem>
- <listitem>
- <para>s tipkanjem oznak. Pritisnite <keycap>t</keycap> za pojav vnosne vrstice oznak. Sem lahko vnesete oznake, ločene z vejicami.</para>
- <para>V vnosni vrstici lahko uporabite samodejno dokončanje. Po vnosu začetka imena oznake pritisnite <keycap>Tabulator</keycap> za ogled prvega mogočega dokončanja. Med mogočimi dokončanji lahko krožite naprej s ponovnim pritiskom na <keycap>Tabulator</keycap> in nazaj s pritiskom na <keycombo action="simul"><keycap>Dvigalka</keycap><keycap>Tabulator</keycap></keycombo>. Za potrditev predlaganega dokončanja in vnos nove oznake pritisnite <keycap>,</keycap>. S pritiskom <keycap>Vnosna tipka</keycap> zapustite vnosno vrstico oznak in s tem morda potrdite trenutno dokončanje. Za preklic samodejnega dokončevanja tipkajte naprej. </para>
- </listitem>
- </itemizedlist>
- <para>Prva fotografija, ki jo povežete z oznako, bo uporabljena za ikono oznake. Z desnim klikom na oznako in izbiro <guilabel>Uredi oznako</guilabel> lahko uredite ime oznake, nadrejeno oznako in ikono oznake.</para>
- <para>Nadrejeni predmet oznake lahko spremenite tako, da ga povlečete in spustite kamor želite. Ime oznake lahko uredite tako, da jo izberete in pritisnete <keycap>F2</keycap>. V primeru da je gradnik drevesa oznak v žarišču, (na primer ste ravnokar kliknili na oznako) lahko začnete tipkati ime oznake, vse razširjene oznake na seznamu bodo preiskane in skočili boste na zadetke.</para>
-
- <para>Velikost ikon značk v stranski vrstici lahko spremenite ali pa jih celo napravite nevidne z izbiro prednostne možnosti v meniju <menuchoice><guimenu>Pogled</guimenu><guimenuitem>Ikone oznak</guimenuitem></menuchoice>.</para>
-
- <tip>
- <para>F-Spot lahko oznake zapiše v datoteke JPEG kot polja metapodatkov. Oznake za različne RAW, PNG, TIFF in druge datoteke so zapisane v podatkovno zbirko F-Spot. Te datoteke boste morali ob ponovnem uvozu zbirke ponovno označiti.</para>
- </tip>
- </sect1>
- </chapter>
-
- <chapter id="enjoying">
- <title>Uživanje v vaših fotografijah</title>
- <sect1 id="enjoying-browse">
- <title>Brskanje</title>
- <para>Za brskanje po vaših fotografijah po mesecu ali po mapi lahko uporabite drsni gradnik. Za spremembo te nastavitve pojdite na <menuchoice><guimenu>Pogled</guimenu><guimenuitem>Urejeno po</guimenuitem></menuchoice>.</para>
- </sect1>
- <sect1 id="enjoying-search">
- <title>Iskanje</title>
-
- <para>F-Spot uporablja iskalne filtre za pomoč pri boljšem določanju iskalnih kriterijev.</para>
-
- <sect2 id="enjoying-search-tags">
- <title>Oznake</title>
-
- <para>Iskanje lahko začnete z dvojnim klikom ali omogočanjem oznake iz seznama oznak. Dodatno lahko pokažete iskalno vrstico z <menuchoice><guimenu>Najdi</guimenu><guimenuitem>Pokaži iskalno vrstico</guimenuitem></menuchoice>. Ko je iskalna vrstica prikazana, lahko oznake povlečete iz pogleda oznak v iskalno vrstico.</para>
- <para>Za iskanje fotografij, ki so označene z obema od dveh oznak, omogočite prvo v pogledu oznak ali jo povlecite v iskalno vrstico in nato povlecite drugo oznako in jo spustite na prvo. Lahko tudi desno kliknete na drugo oznako v pogledu oznak ali uporabite meni <guimenu>Najdi</guimenu> in izberite <guimenuitem>Najdi z...</guimenuitem> in izberite prvo oznako (ali skupino oznak).</para>
- <para>Ikono oznake lahko povlečete na iskalno vrstico za spremembo iz iskanja te oznake in druge oznake v iskanje te oznake ali druge oznake. </para>
- <para>Fotografije brez določene oznake lahko iščete z dvojnim klikom na oznako v iskalni vrstici. Dodatna možnost je desni klik na oznako v iskalni vrstici in izbira <guimenuitem>Izključi</guimenuitem>.</para>
- <para>Za odstranitev oznake iz iskanja jo povlecite vstran od vrstice iskanja ali desno kliknite in izberite <guimenuitem>Odstrani</guimenuitem>.</para>
- <para>Privzeto so fotografije označene <emphasis>Skrito</emphasis> skrite. Za iskanje takšnih fotografij morate eksplicitno vključiti oznako <emphasis>Skrito</emphasis>.</para>
- </sect2>
-
- <sect2 id="enjoying-search-import-rolls">
- <title>Uvozni zvitki</title>
- <para>F-Spot si vsake toliko časa zapomni katere slike so bile uvožene. Uporabite <menuchoice><guimenu>Najdi</guimenu><guisubmenu>Po uvoznem zvitku</guisubmenu><guimenuitem>Zadnji uvozni zvitek</guimenuitem></menuchoice> za omejitev iskanja na zadnjo sejo uvažanja ali uporabite <menuchoice><guimenu>Najdi</guimenu><guisubmenu>Po uvoznem zvitku</guisubmenu><guimenuitem>Izberi uvozne zvitke ...</guimenuitem></menuchoice> za fino izbiro uvoženih fotografij:</para>
- <itemizedlist>
- <listitem>
- <para><parameter class="option">Ob</parameter> — za izbor fotografij iz določene seje uvažanja</para>
- </listitem>
- <listitem>
- <para><parameter class="option">Za</parameter> — za izbor vseh uvoženih fotografij z začetkom pri določeni seji uvažanja</para>
- </listitem>
- <listitem>
- <para><parameter class="option">Med</parameter> — za izbor vseh fotografij uvoženih med dvema določenima sejama uvažanja</para>
- </listitem>
- </itemizedlist>
- <para>Vsakič ko spremenite nastavitve filtra, se količina izbranih fotografij pojavi na spodnjem delu pogovornega okna.</para>
- <para>Ko boste uveljavili filter uvoznih zvitkov boste videli <guilabel>Najdi: Uvozni zvitek</guilabel>. Sedaj lahko dodate druge filtre za fino nastavljanje vašega izbora.</para>
- <para>V primeru da filtra uvoznih zvitkov ne potrebujete več, za odstranitev uvoznih zvitkov iz iskalnih kriterijev izberite <menuchoice><guimenu>Najdi</guimenu><guisubmenu>Uvozni zvitek</guisubmenu><guimenuitem>Počisti filter uvoznih zvitkov</guimenuitem></menuchoice>. Za zavračanje vseh trenutnih možnosti iskanja lahko kliknete tudi na gumb zapri (<guibutton>X</guibutton>) v iskalni vrstici.</para>
- <tip>
- <para>Število prikazanih zvitkov v pogovornem oknu je določeno z gconf ključem <filename class="directory">/apps/f-spot/import/gui_roll_history</filename>. Privzeta vrednost je 10.</para>
- </tip>
- </sect2>
-
- <sect2 id="enjoying-search-type-to-find">
- <title>Tipkajte-za-iskanje</title>
- <para>Obstaja tudi vnos tipkaj-za-iskanje. Za odpiranje pritisnite <keycap>/</keycap>. Vnosa ni mogoče uporabiti istočasno kot iskalne vrstice. Vtipkate lahko poizvedbe kot so "OznakaA and (OznakaB or (OznakaC and OznakaD)". V vsakem primeru bo F-Spot posodobil vaše iskanje, če zazna veljavno poizvedbo. Operator <emphasis>not</emphasis> še ni podprt.</para>
-
- <para>Ta funkcija bo iskala tudi besedilo vneseno v komentarje fotografije in ime datoteke.</para>
- </sect2>
- </sect1>
-
- <sect1 id="enjoying-fullscreen-mode-and-slideshows">
- <title>Celozaslonski način in diapredstavitve</title>
- <para>Za manj motenj in večji prikaz si lahko ogledate fotografije v celozaslonskem načinu. Nadzirate lahko kdaj naj bo prikazana naslednja ali predhodna fotografija. V celozaslonski način lahko kadarkoli vstopite s pritiskom na <keycap>F11</keycap> ali s pritiskom gumba v orodni vrstici.</para>
- <figure>
- <title>Celozaslonski način</title>
- <mediaobject>
- <imageobject>
- <imagedata fileref="figures/f-spot-fullscreen.png"/>
- </imageobject>
- </mediaobject>
- </figure>
- <para>V načinu diapredstavitve se lahko usedete in si ogledate svoje fotografije medtem ko so vam predstavljene. Diapredstavitev lahko zaženete s pritiskom na gumb v orodni vrstici.</para>
- <figure>
- <title>Diapredstavitev</title>
- <mediaobject>
- <imageobject>
- <imagedata fileref="figures/f-spot-slideshow.png"/>
- </imageobject>
- </mediaobject>
- </figure>
- </sect1>
- </chapter>
-
- <chapter id="sharing">
- <title>Souporaba vaših fotografij</title>
-
- <abstract>
- <para>Za souporabo vaših fotografij z F-Spot obstaja več načinov. Vse naslednje metode bodo dale v souporabo le fotografije, ki ste jih izbrali ob zagonu souporabe.</para>
- </abstract>
-
- <sect1 id="sharing-e-mail">
- <title>E-pošta</title>
- <para>Svoje fotografije lahko pošljete preko elektronske pošte neposredno iz F-Spot z uporabo menija <menuchoice><guimenu>Fotografija</guimenu><guimenuitem>Pošlji po pošti</guimenuitem></menuchoice>. </para>
- <note>
- <title>Opomba 1</title>
- <para>Uporabljen bo e-poštni program, ki je določen na ravni GNOME. Privzeti e-poštni program lahko spremenite za svoj račun z uporabo orodja <application>Prednostni programi</application> v meniju <menuchoice><guimenu>Sistem</guimenu><guisubmenu>Nastavitve</guisubmenu></menuchoice>.</para>
- </note>
- <note>
- <title>Opomba 2</title>
- <para>V primeru da so fotografije, ki jih želite poslati preko elektronske pošte vrste, ki je F-Spot ne more zapisati (na primer slike RAW) bo pogovorno okno postalo neobčutljivo in bodo poslane izvorne fotografije.</para>
- </note>
- <tip>
- <para>V primeru da pošiljate slike s spremenjenimi velikostmi, bo F-Spot obdržal spremenjene različice nekje v mapi <filename class="directory">/tmp</filename> za 30 sekund. To ne povzroča težav z evolution, ki naredi svojo krajevno kopijo prilog, toda bi lahko bilo malce krajše, če uporabljate Thunderbird. Zamik lahko spremenite z urejanjem gconf ključa <filename class="directory">/apps/f-spot/export/email/delete_timeout_seconds</filename>.</para>
- </tip>
- </sect1>
-
- <sect1 id="sharing-print">
- <title>Tisk</title>
- <para>Fotografije lahko natisnite z menijem <menuchoice><guimenu>Datoteka</guimenu><guimenuitem>Natisni</guimenuitem></menuchoice>.</para>
- </sect1>
-
- <sect1 id="sharing-burn-to-cd">
- <title>Zapisovanje na CD</title>
- <para>Zapišite vaše fotografije z menijem <menuchoice><guimenu>Fotografija</guimenu><guisubmenu>Izvozi</guisubmenu><guimenuitem>Izvozi na CD</guimenuitem></menuchoice>.</para>
- </sect1>
-
- <sect1 id="website-gallery-folder">
- <title>Ustvarjanje spletne galerije ali mape</title>
- <para>Zmožnost <menuchoice><guimenu>Fotografija</guimenu><guimenuitem>Izvozi v</guimenuitem><guimenuitem>Izvozi v mapo</guimenuitem></menuchoice> vam poda tri načine za izvažanje vaših slik.</para>
- <itemizedlist>
- <listitem>
- <para><guilabel>Uporabi izvorno</guilabel> izvozi vaše fotografije pripravljene za uporabo z brezplačnim programom Jakuba Steinerja <ulink url="http://jimmac.musichall.cz/original.php"> Original Photo Gallery</ulink>. V primeru da niste prepričani o tej možnosti, verjetno ni prava za vas.</para>
- </listitem>
- <listitem>
- <para><guilabel>Uporabi statične datoteke HTML</guilabel> izvozi vaše fotografije v interaktivno spletišče, pripravljeno na pošiljanje.</para>
- </listitem>
- <listitem>
- <para><guilabel>Običajne datoteke</guilabel> izvozi vaše slike kot datoteke v mape, brez pošiljanja v galerijo.</para>
- </listitem>
- </itemizedlist>
- </sect1>
-
- <sect1 id="sharing-flickr-or-php-gallery">
- <title>Objavljanje v spletne galerije</title>
- <para>V primeru da uporabljate Flickr, SmugMug, 23hq, Tabblo, Facebook, Zooomr ali Picasa spletne albume lahko svoje datoteke objavite neposredno iz F-Spot z uporabo menija <menuchoice><guimenu>Fotografija</guimenu><guisubmenu>Izvozi v</guisubmenu></menuchoice> in izbiro ustreznega predmeta podmenija.</para>
- <para>V primeru da uporabljate PHP program poznan kot <ulink url="http://gallery.sourceforge.net/"> Gallery</ulink>, lahko svoje fotografije objavite v svoj obstoječ album z menijem <menuchoice><guimenu>Fotografija</guimenu><guimenuitem>Izvozi v</guimenuitem><guimenuitem>Izvozi v spletno galerijo</guimenuitem></menuchoice>. Najprej morate v namestitvi Gallery omogočiti modul Oddaljeno. </para>
- <note>
- <title>Opomba za uporabnike Gallery 2.2</title>
- <para>Oddaljeni vstavek Gallery mora biti 1.0.8 ali novejši.</para>
- </note>
- <para><ulink url="http://pennave.sourceforge.net">PennAve</ulink> je spletni program v Pythonu, ki neposredno uporablja podatkovno zbirko F-Spot za predstavljanje dinamične galerije vaših fotografij in oznak.</para>
- <para><ulink url="http://www.conduit-project.org">Conduit</ulink> je program, ki lahko uskladi fotografije z določeno oznako s spletno shrambo Flicker ali Picasa spletni albumi.</para>
- </sect1>
- </chapter>
-
- <chapter id="cms">
- <title>Upravljanje barv</title>
-
- <sect1 id="cms-what-is-cms">
- <title>Kaj je upravljanje barv</title>
-
- <para>Fotografija je na zaslonu videti drugače kot na zaslonu predogleda fotoaparata ali kateremukoli drugemu zaslonu. Tudi natisnjena fotografija je videti drugačna. To se zgodi zato, ker ima vsaka barva edinstvene zmožnosti poustvaritve barv. </para>
-
- <para>Sistem za upravljanje barv (CMS) je orodje za doseganje zanesljive poustvaritve barv tako za zaslon kot izhod (na primer tiskalnik). CMS se zanaša na barvne profile za preslikavo izvornih barv v barve, ki jih lahko poustvarijo naprave, tako, da so barve povsod videti enake - na računalniškem zaslonu LCD, natisnjene, itn.</para>
- </sect1>
-
- <sect1 id="cms-what-is-icc-profile">
- <title>Kaj je barvni profil</title>
-
- <para>Barvni profil je datoteka s pripono .icc (zato je pogosto imenovan profil ICC) ali .icm ki opiše kako barve naprave ustrezajo splošnemu opisu naprav.</para>
-
- <para>Obstaja več vrst profilov:</para>
-
- <itemizedlist>
- <listitem>
- <para>Profil vhodne naprave. To je profil fotoaparata ali profil, ki ga lahko program kot je XSane vključi v skenirano sliko.</para>
- </listitem>
- <listitem>
- <para>
- Working space profile. It's a profile that describes color space in
- which all operations are done inside an application. Usually very wide
- gamut profiles like AdobeRGB1998 or ProPhotoRGB are used for that.
- </para>
- </listitem>
- <listitem>
- <para>Profil zaslona. To je profil za zaslon.</para>
- </listitem>
- <listitem>
- <para>Izhodni profil. To je običajno profil za tiskalnik.</para>
- </listitem>
- </itemizedlist>
-
- <para>Trenutno F-Spot dovoli le nastavljanje profilov zaslona in izhoda. Vsa barvna opravila so narejena v barvnem prostoru sRGB.</para>
- </sect1>
-
- <sect1 id="cms-how-to-get-icc-profile">
- <title>Kako dobiti barvni profil zaslona/tiskalnika</title>
-
- <para>Obstaja več načinov za pridobivanje barvnega profila.</para>
-
- <sect2 id="cms-icc-from-cd-or-internet">
- <title>Iz CD-ja ali medmrežja</title>
-
- <para>Veliko proizvajalcev strojene opreme priložijo CD z barvnimi profili. V primeru da ga imate (od zaslona ali tiskalnika) ga lahko uporabite. Lahko ga prejmete z medmrežja (običajno z odseka podpore na spletišču proizvajalca). Barvne profile zagotavljajo tudi nekateri proizvajalci fotoaparatov (Nikon, Canon).</para>
- </sect2>
-
- <sect2 id="cms-icc-from-calibrating-and-profiling">
- <title>Umerjanje in profiliranje</title>
-
- <para>Najboljše rezultate je mogoče doseči z umerjanjem in profiliranjem naprav z meritveno napravo. To ni težko, vendar pa je za izvajanje vseh meritev in ustvarjanje profila ICC potreben spektrofotometer.</para>
-
- <para>V primeru da uporabljate Windows ali Mac OS X lahko uporabite program proizvajalca, ki je prispel s spektrofotometrom. Na Linuxu boste morali uporabiti <ulink url="http://www.argyllcms.com">Argyll</ulink>, ki je niz vsestranskih orodij ukazne vrstice ali <ulink url="http://lprof.sourceforge.net/">LProf</ulink>, ki ima grafični uporabniški vmesnik.</para>
- <para>
- Please refer to documentation of third party hardware and software
- vendors for details.
- </para>
- </sect2>
-
- <sect2 id="cms-icc-from-embedding">
- <title>Vključevanje</title>
-
- <para>Nekatere vrste slik (kot so TIFF, JPEG, PNG ...) lahko vsebujejo vključene barvne profile. V primeru da je upravljanje barv omogočeno, F-Spot poišče vključene profile in jih upošteva.</para>
- </sect2>
- </sect1>
-
- <sect1 id="cms-how-to-use">
- <title>Kako uporabiti upravljanje barv v F-Spot</title>
-
- <para>Upravljanje barv v F-Spot lahko trenutno uporabi le profile RGB (drugih profilov v F-Spot ni mogoče videti).</para>
-
- <itemizedlist>
- <listitem>
- <para>Kopirajte svoje barvne profile v mapo <filename class="directory">/usr/share/color/icc</filename> ali <filename class="directory">/usr/local/share/color/icc</filename>.</para>
- </listitem>
- <listitem>
- <para>Upravljanje barv omogočite z menijem <menuchoice><guimenu>Uredi</guimenu><guimenuitem>Možnosti</guimenuitem></menuchoice>.</para>
- </listitem>
- <listitem>
- <para>Izberite profila <guilabel>Prikaz</guilabel> in <guilabel>Izhod</guilabel>.</para>
- </listitem>
- </itemizedlist>
-
- <tip>
- <para>Za nalaganje profila ICC za prikaz in uporabo naloženega profila iz F-Spot lahko uporabite <ulink url="http://burtonini.com/blog/computers/xicc">xicc</ulink>. Samo označite potrditveno polje <guilabel>Poskus uporabe sistemskega profila prikaza</guilabel>.</para>
- </tip>
- </sect1>
- </chapter>
-
- <chapter id="extend">
- <title>Razširitev zmožnosti</title>
-
- <sect1 id="extend-what-extensions-are">
- <title>Kaj so razširitve</title>
-
- <para>Razširitve F-Spot dajo programu nove zmožnosti. F-Spot podpira dve vrsti razširitev: izvoznike (omogočajo izvažanje fotografij na spletne storitve ali podatkovne shrambe) in orodja (omogočajo nove načine popravljanja barv, podvajanje fotografij, itn.). Razširitve so distribuirane v obliki paketov razširitev.</para>
- <para>Z namenom zmanjšanja podvajanja dela lahko razširitve uporabijo druge razširitve, kar pomeni da lahko razširitev ne deluje, če ni nameščena druga razširitev. Ta koncept odvisnosti pomeni da</para>
- <itemizedlist>
- <listitem>
- <para>ne morete namestiti razširitve, če je odvisna od druge razširitve, ki je ni na sistemu</para>
- </listitem>
- <listitem>
- <para>ne morete odstraniti razširitve od katere je odvisna druga razširitev</para>
- </listitem>
- </itemizedlist>
- </sect1>
-
- <sect1 id="extend-managing-extensions">
- <title>Upravljanje razširitev</title>
-
- <para>Za upravljanje razširitev izberite predmet menija <menuchoice><guimenu>Uredi</guimenu><guimenuitem>Upravljanje razširitev</guimenuitem></menuchoice>.</para>
-
- <sect2 id="extend-managing-extensions-managing-extension-repositories">
- <title>Upravljanje s skladišči razširitev</title>
-
- <para>Preprosto povedano so skladišča shrambe razširitev. Lahko so omrežna ali krajevna. Za dodajanje novega skladišča kliknite gumb Skladišča, izberite vrsto skladišča za dodajanje in vnesite URL ali pot. V primeru da navedeni URL ali pot ne vsebuje datoteke opisa (kazala) za razširitve, vas bo o tem obvestilo opozorilno sporočilo.</para>
- <para>Za odstranitev skladišča ponovno kliknite gumb <guibutton>Skladišča</guibutton>, izberite skladišče za izbris in kliknite gumb <guibutton>Izbriši</guibutton>.</para>
- </sect2>
-
- <sect2 id="extend-managing-extensions-installing-and-updating-extensions">
- <title>Nameščanje in posodabljanje razširitev</title>
-
- <para>Za namestitev razširitve kliknite gumb <guibutton>Namesti razširitve ...</guibutton> . V novo predstavljenem pogovornem oknu</para>
- <orderedlist>
- <listitem>
- <para>Izberite skladišče za namestitev iz vseh znanih skladišč ali razpoložljivih skladišč.</para>
- </listitem>
- <listitem>
- <para>Izberite katere pakete razširitev želite videti: Vse, le nove, le posodobitve.</para>
- </listitem>
- <listitem>
- <para>Kliknite gumb <guibutton>Posodobi</guibutton> za posodobitev seznama razpoložljivih paketov razširitev glede na dane kriterije.</para>
- </listitem>
- <listitem>
- <para>Izberite razširitve, ki jih želite namestiti/posodobiti, ter kliknite <guibutton>Podrobnosti</guibutton> za ogled povzetka izbranega paketa, če želite.</para>
- </listitem>
- <listitem>
- <para>Kliknite gumb <guibutton>Naprej</guibutton> za nadaljevanje z namestitvijo.</para>
- </listitem>
- </orderedlist>
- </sect2>
-
- <sect2 id="extend-managing-extensions-enabling-and-disabling-extensions">
- <title>Omogočanje in onemogočanje razširitev </title>
-
- <para>Morda želite začasno omogočiti ali onemogočiti določen paket razširitve, na primer če razširitev ni dovolj stabilna za upravljanje z veliko količino fotografij ali če so meniji preveč natrpani z razširitvami.</para>
- <para>V pogovornem oknu <guilabel>Upravljanje razširitev</guilabel> izberite paket razširitev in kliknite gumb <guibutton>Omogoči</guibutton> ali <guibutton>Onemogoči</guibutton>. </para>
- </sect2>
-
- <sect2 id="extend-managing-extensions-removing-extensions">
- <title>Odstranjevanje razširitev</title>
-
- <para>V primeru da razširitve ne potrebujete, jo lahko popolnoma odstranite s sistema. V pogovornem oknu <guilabel>Upravljanje razširitev</guilabel> izberite paket razširitev, ki ga želite izbrisati in kliknite <guibutton>Izbriši</guibutton>.</para>
- </sect2>
-
- <sect2 id="extend-managing-extensions-reading-summary-of-extensions">
- <title>Branje povzetka razširitev</title>
-
- <para>Vsak paket razširitve vsebuje metapodatke, ki zagotavljajo naslednje podrobnosti o razširitvi:</para>
-
- <orderedlist>
- <listitem>
- <para>Opis, ki običajno opiše namen razširitve</para>
- </listitem>
- <listitem>
- <para>Različica</para>
- </listitem>
- <listitem>
- <para>Avtor</para>
- </listitem>
- <listitem>
- <para>Odvisnosti</para>
- </listitem>
- </orderedlist>
-
- <para>V pogovornem oknu <guilabel>Upravljanje razširitev</guilabel> izberite paket razširitve katerega opis želite prebrati in kliknite <guibutton>Podrobnosti</guibutton>.</para>
- </sect2>
- </sect1>
-
- <sect1 id="extend-developing-extensions">
- <title>Razvijanje razširitev</title>
-
- <para>Dokument <ulink url="http://f-spot.org/Extend_F-Spot">razširite F-Spot</ulink> vsebuje navodila za razvijanje vaših lastnih razširitev za F-Spot.</para>
- </sect1>
- </chapter>
-
- <chapter id="shortcuts">
- <title>Bližnjice</title>
-
- <sect1 id="Global-Shortcuts">
- <title>Splošne bližnjice</title>
- <informaltable frame="all">
- <tgroup cols="2">
- <thead>
- <row>
- <entry>Tipka</entry>
- <entry>Dejanje</entry>
- </row>
- </thead>
- <tbody>
- <row>
- <entry>
- <keycap>[</keycap>
- </entry>
- <entry>Vrtenje izbranih fotografij levo</entry>
- </row>
- <row>
- <entry>
- <keycap>]</keycap>
- </entry>
- <entry>Vrtenje izbranih fotografij desno</entry>
- </row>
- <row>
- <entry>
- <keycap>Del</keycap>
- </entry>
- <entry>Odstrani izbrane fotografije iz kataloga F-Spot</entry>
- </row>
- <row>
- <entry>
- <keycombo><keycap>Dvigalka</keycap><keycap>Del</keycap></keycombo>
- </entry>
- <entry>Trajno izbriše izbrane fotografije s pogona. V primeru, da je to mogoče, bodo premaknjene v smeti.</entry>
- </row>
-
- <row>
- <entry>
- <keycap>t</keycap>
- </entry>
- <entry>Ogled ali urejanje oznak za izbrane fotografije</entry>
- </row>
- <row>
- <entry>
- <keycap>F11</keycap>
- </entry>
- <entry>Celozaslonski pogled</entry>
- </row>
- <row>
- <entry>
- <keycombo><keycap>Ctrl</keycap><keycap>I</keycap></keycombo>
- </entry>
- <entry>Prikaz podrobnosti o fotografiji</entry>
- </row>
- <row>
- <entry>
- <keycombo><keycap>Ctrl</keycap><keycap>Je enako</keycap></keycombo>
- </entry>
- <entry>Približanje</entry>
- </row>
- <row>
- <entry>
- <keycombo><keycap>Ctrl</keycap><keycap>Minus</keycap></keycombo>
- </entry>
- <entry>Oddaljevanje</entry>
- </row>
- <row>
- <entry>
- <keycombo><keycap>Ctrl</keycap><keycap>N</keycap></keycombo>
- </entry>
- <entry>Uvoz fotografij</entry>
- </row>
- <row>
- <entry>
- <keycombo><keycap>Alt</keycap><keycap>0-5</keycap></keycombo>
- </entry>
- <entry>Alt in število od 0 do 5 za oceno izbran-e/ih slik(e)</entry>
- </row>
- </tbody>
- </tgroup>
- </informaltable>
- </sect1>
-
- <sect1 id="shortcuts-browse-mode">
- <title>Bližnjice načina brskanja</title>
- <informaltable frame="all">
- <tgroup cols="2">
- <thead>
- <row>
- <entry>Tipka</entry>
- <entry>Dejanje</entry>
- </row>
- </thead>
- <tbody>
- <row>
- <entry>
- <keycombo><keycap>Ctrl</keycap><keycap>A</keycap></keycombo>
- </entry>
- <entry>Izbor vsega</entry>
- </row>
- <row>
- <entry>
- <keycombo><keycap>Ctrl</keycap><keycap>Dvigalka</keycap>
- <keycap>A</keycap></keycombo>
- </entry>
- <entry>Preklic izbora</entry>
- </row>
- <row>
- <entry>Tipke puščice ali <keycap>H</keycap>, <keycap>J</keycap>, <keycap>K</keycap>, <keycap>L</keycap></entry>
- <entry>Premakne žarišče</entry>
- </row>
- <row>
- <entry><keycap>Ctrl</keycap>-Tipka puščice</entry>
- <entry>Premakne žarišče brez spremembe izbora</entry>
- </row>
- <row>
- <entry>
- <keycap>Preslednica</keycap>
- </entry>
- <entry>Izbere ali prekliče izbor fotografije v žarišču</entry>
- </row>
- <row>
- <entry>
- <keycombo><keycap>Dvigalka</keycap>
- <keycap>Tipka puščice</keycap></keycombo>
- </entry>
- <entry>Sprememba izbire fotografije</entry>
- </row>
- <row>
- <entry>
- <keycombo><keycap>Ctrl</keycap><keycap>Dvigalka</keycap>
- <keycap>Leva puščica ali desna puščica</keycap></keycombo>
- </entry>
- <entry>Doda/odstrani vse fotografije v vrstici v izbrani smeri do izbora</entry>
- </row>
- <row>
- <entry>
- <keycap>V</keycap>
- </entry>
- <entry>Pojavi večji predogled slike pokazane z miško</entry>
- </row>
- <row>
- <entry>
- <keycombo><keycap>Dvigalka</keycap><keycap>V</keycap></keycombo>
- </entry>
- <entry>Pojavi večji predogled in barvni histogram slike pokazane z miško</entry>
- </row>
- </tbody>
- </tgroup>
- </informaltable>
- </sect1>
-
- <sect1 id="shortcuts-tag">
- <title>Bližnjice oznak</title>
- <informaltable frame="all">
- <tgroup cols="2">
- <thead>
- <row>
- <entry>Tipka</entry>
- <entry>Dejanje</entry>
- </row>
- </thead>
- <tbody>
- <row>
- <entry>
- <keycap>F2</keycap>
- </entry>
- <entry>Preimenovanje izbranih oznak</entry>
- </row>
- <row>
- <entry>
- <keycombo><keycap>Ctrl</keycap><keycap>T</keycap></keycombo>
- </entry>
- <entry>Dodajanje oznak izbranim fotografijam</entry>
- </row>
- <row>
- <entry>n/a</entry>
- <entry>Za premikanje oznak jih povlecite in spustite</entry>
- </row>
- <row>
- <entry>n/a</entry>
- <entry>Vtipkajte ime oznake za skok nanjo (deluje le, če je oznaka prikazana/razširjena)</entry>
- </row>
- </tbody>
- </tgroup>
- </informaltable>
- </sect1>
-
- <sect1 id="shortcuts-edit-mode">
- <title>Bližnjice načina urejanja</title>
- <informaltable frame="all">
- <tgroup cols="2">
- <thead>
- <row>
- <entry>Tipka</entry>
- <entry>Dejanje</entry>
- </row>
- </thead>
- <tbody>
- <row>
- <entry><keycap>Stran navzgor</keycap>, <keycap>Povratna tipka</keycap>, <keycap>B</keycap></entry>
- <entry>Pojdi na predhodno fotografijo</entry>
- </row>
- <row>
- <entry><keycap>Stran navzdol</keycap>, <keycap>Preslednica</keycap>, <keycap>N</keycap></entry>
- <entry>Pojdi na naslednjo fotografijo</entry>
- </row>
- <row>
- <entry>Tipke puščice ali <keycap>H</keycap>, <keycap>J</keycap>, <keycap>K</keycap>, <keycap>L</keycap></entry>
- <entry>Gre na predhodno/naslednjo fotografijo ali premakne naokoli povečano fotografijo</entry>
- </row>
- <row>
- <entry>
- <keycap>R</keycap>
- </entry>
- <entry>Pojdi na naključno fotografijo</entry>
- </row>
- <row>
- <entry>
- <keycap>f</keycap>
- </entry>
- <entry>Celozaslonski pogled</entry>
- </row>
- <row>
- <entry>
- <keycap>0</keycap>
- </entry>
- <entry>Prilagajanje slike zaslonu</entry>
- </row>
- <row>
- <entry>
- <keycap>1</keycap>
- </entry>
- <entry>Faktor povečave 1.0 (1 točka zaslona na točko slike)</entry>
- </row>
- <row>
- <entry>
- <keycap>2</keycap>
- </entry>
- <entry>Faktor povečave na 2.0 (4 točke zaslona na točko slike)</entry>
- </row>
- <row>
- <entry>
- <keycap>Ubežna tipka</keycap>
- </entry>
- <entry>Vrne v način brskalnika</entry>
- </row>
- <row>
- <entry>
- <keycap>V</keycap>
- </entry>
- <entry>Preučevanje fotografije s povečevalnim steklom. Za zaprtje povečevalnega stekla kliknite nanj ali vtipkajte <keycap>v</keycap>.</entry>
- </row>
- <row>
- <entry><keycap>Dvigalka</keycap>-Miškino kolesce</entry>
- <entry>Hitrejše drsenje filmskega traku</entry>
- </row>
- <row>
- <entry>
- <keycap>i</keycap>
- </entry>
- <entry>Preklop vidnosti polja podrobnosti "(le v celozaslonskem načinu)"</entry>
- </row>
- </tbody>
- </tgroup>
- </informaltable>
- </sect1>
- </chapter>
-
-</book>
diff --git a/docs/sl/figures/f-spot-crop.png b/docs/sl/figures/f-spot-crop.png
deleted file mode 100644
index eb1560d..0000000
Binary files a/docs/sl/figures/f-spot-crop.png and /dev/null differ
diff --git a/docs/sl/sl.po b/docs/sl/sl.po
deleted file mode 100644
index ac9bee9..0000000
--- a/docs/sl/sl.po
+++ /dev/null
@@ -1,1253 +0,0 @@
-# Andrej Žnidaršič <andrej.znidarsic at gmail.com>, 2009 - 2010
-#
-msgid ""
-msgstr ""
-"Project-Id-Version: f-spot documentation\n"
-"POT-Creation-Date: 2010-02-28 09:00+0000\n"
-"PO-Revision-Date: \n"
-"Last-Translator: Andrej Žnidaršič <andrej.znidarsic at gmail.com>\n"
-"Language-Team: Slovenian GNOME Translation Team <gnome-si at googlegroups.com>\n"
-"MIME-Version: 1.0\n"
-"Content-Type: text/plain; charset=UTF-8\n"
-"Content-Transfer-Encoding: 8bit\n"
-"Plural-Forms: nplurals=4; plural=(n%100==1 ? 1 : n%100==2 ? 2 : n%100==3 || n%100==4 ? 3 : 0);\n"
-"X-Poedit-Language: Slovenian\n"
-"X-Poedit-Country: SLOVENIA\n"
-"X-Poedit-SourceCharset: utf-8\n"
-
-#. When image changes, this message will be marked fuzzy or untranslated for you.
-#. It doesn't matter what you translate it to: it's not used at all.
-#: C/f-spot.xml:163(None)
-msgid "@@image: 'figures/f-spot-crop.png'; md5=63e18c96702aea4701024837a13ae2d9"
-msgstr "a"
-
-#. When image changes, this message will be marked fuzzy or untranslated for you.
-#. It doesn't matter what you translate it to: it's not used at all.
-#: C/f-spot.xml:187(None)
-msgid "@@image: 'figures/f-spot-straighten.png'; md5=ceeff0cac633d06599fa5760cc4bc568"
-msgstr "a"
-
-#. When image changes, this message will be marked fuzzy or untranslated for you.
-#. It doesn't matter what you translate it to: it's not used at all.
-#: C/f-spot.xml:206(None)
-msgid "@@image: 'figures/f-spot-adjust-colors.png'; md5=6a5d9eaaaaf238ccbf70552bc073898c"
-msgstr "a"
-
-#. When image changes, this message will be marked fuzzy or untranslated for you.
-#. It doesn't matter what you translate it to: it's not used at all.
-#: C/f-spot.xml:224(None)
-msgid "@@image: 'figures/f-spot-autocolor.png'; md5=240c4a86c95c9507755fe790bef0e24a"
-msgstr "a"
-
-#. When image changes, this message will be marked fuzzy or untranslated for you.
-#. It doesn't matter what you translate it to: it's not used at all.
-#: C/f-spot.xml:241(None)
-msgid "@@image: 'figures/f-spot-desaturate.png'; md5=fa54dfd08171658d720be71b6d367139"
-msgstr "a"
-
-#. When image changes, this message will be marked fuzzy or untranslated for you.
-#. It doesn't matter what you translate it to: it's not used at all.
-#: C/f-spot.xml:258(None)
-msgid "@@image: 'figures/f-spot-sepia.png'; md5=154d6e34903664dbd776f2bef405ce91"
-msgstr "a"
-
-#. When image changes, this message will be marked fuzzy or untranslated for you.
-#. It doesn't matter what you translate it to: it's not used at all.
-#: C/f-spot.xml:289(None)
-msgid "@@image: 'figures/f-spot-red-eye.png'; md5=743d0a2ccc9b2fa8fa314855c225cd31"
-msgstr "a"
-
-#. When image changes, this message will be marked fuzzy or untranslated for you.
-#. It doesn't matter what you translate it to: it's not used at all.
-#: C/f-spot.xml:316(None)
-msgid "@@image: 'figures/f-spot-soft-focus.png'; md5=14d1437ce49c83f3ebbcf70b7047ffbe"
-msgstr "a"
-
-#. When image changes, this message will be marked fuzzy or untranslated for you.
-#. It doesn't matter what you translate it to: it's not used at all.
-#: C/f-spot.xml:608(None)
-msgid "@@image: 'figures/f-spot-fullscreen.png'; md5=86040e20ebf1015f6489a56e9589f063"
-msgstr "a"
-
-#. When image changes, this message will be marked fuzzy or untranslated for you.
-#. It doesn't matter what you translate it to: it's not used at all.
-#: C/f-spot.xml:621(None)
-msgid "@@image: 'figures/f-spot-slideshow.png'; md5=84a69bc3bb7a1b8d04c967d3a66e6f23"
-msgstr "a"
-
-#: C/f-spot.xml:5(title)
-msgid "The F-Spot Manual"
-msgstr "F-Spot priročnik"
-
-#: C/f-spot.xml:7(para)
-#: C/f-spot.xml:9(subtitle)
-msgid "This is the user manual for F-Spot, a GNOME personal photo manager."
-msgstr "To je uporabniški priročnik za F-Spot, GNOME upravljalnik fotografij"
-
-#: C/f-spot.xml:11(year)
-msgid "2007-2009"
-msgstr "2007-2009"
-
-#: C/f-spot.xml:12(holder)
-msgid "Aaron Bockover, Gabriel Burt, Miguel de Icaza, Bengt Thuree"
-msgstr "Aaron Bockover, Gabriel Burt, Miguel de Icaza, Bengt Thuree"
-
-#: C/f-spot.xml:15(publishername)
-msgid "GNOME Documentation Project"
-msgstr "GNOME projekt dokumentacije"
-
-#: C/f-spot.xml:19(firstname)
-msgid "Miguel"
-msgstr "Miguel"
-
-#: C/f-spot.xml:20(surname)
-msgid "de Icaza"
-msgstr "de Icaza"
-
-#: C/f-spot.xml:23(firstname)
-msgid "Aaron"
-msgstr "Aaron"
-
-#: C/f-spot.xml:24(surname)
-msgid "Bockover"
-msgstr "Bockover"
-
-#: C/f-spot.xml:27(firstname)
-msgid "Bengt"
-msgstr "Bengt"
-
-#: C/f-spot.xml:28(surname)
-msgid "Thuree"
-msgstr "Thuree"
-
-#: C/f-spot.xml:31(firstname)
-msgid "Gabriel"
-msgstr "Gabriel"
-
-#: C/f-spot.xml:32(surname)
-msgid "Burt"
-msgstr "Burt"
-
-#: C/f-spot.xml:35(firstname)
-msgid "Alexandre"
-msgstr "Alexandre"
-
-#: C/f-spot.xml:36(surname)
-msgid "Prokoudine"
-msgstr "Prokoudine"
-
-#: C/f-spot.xml:39(firstname)
-msgid "Stephane"
-msgstr "Stephane"
-
-#: C/f-spot.xml:40(surname)
-msgid "Delcroix"
-msgstr "Delcroix"
-
-#: C/f-spot.xml:46(revnumber)
-msgid "0.5"
-msgstr "0,5"
-
-#: C/f-spot.xml:47(date)
-msgid "2008-09-25"
-msgstr "2008-09-25"
-
-#: C/f-spot.xml:50(revnumber)
-msgid "0.4"
-msgstr "0,4"
-
-#: C/f-spot.xml:51(date)
-msgid "2008-09-12"
-msgstr "2008-09-12"
-
-#: C/f-spot.xml:54(revnumber)
-msgid "0.3"
-msgstr "0,3"
-
-#: C/f-spot.xml:55(date)
-msgid "2007-07-26"
-msgstr "26-07-2007"
-
-#: C/f-spot.xml:61(title)
-msgid "Organizing your photos"
-msgstr "Organizacija vaših fotografij"
-
-#: C/f-spot.xml:64(title)
-msgid "Import"
-msgstr "Uvažanje"
-
-#: C/f-spot.xml:66(para)
-msgid "You can import photos from your hard drive or your camera. When you import your photos into F-Spot from your camera, it will always make a copy of them, leaving you free to clear your camera's memory. By default, F-Spot will make a copy of photos imported from your hard drive. Uncheck the <guilabel>Copy</guilabel> option on the import dialog or hold <keycap>Shift</keycap> when dragging photos into F-Spot if you do not wish to copy them from your hard drive."
-msgstr "Fotografije lahko uvozite s trdega diska ali fotoaparata. V primeru uvoza fotografij v F-Spot s fotoaparata, bo F-Spot vedno naredil njihovo kopijo in vam omogočil čiščenje pomnilnika vašega fotoaparata. Privzeto F-Spot naredi kopijo fotografij uvoženih s trdega diska. V primeru da datotek ne želite kopirati s trdega diska, odkljukajte možnost <guilabel>Kopiranje datotek v mapo fotografij</guilabel> v pogovornem oknu uvoza ali pa med vlečenjem fotografij v F-Spot držite tipko <keycap>Dvigalka</keycap>."
-
-#: C/f-spot.xml:76(para)
-msgid "By default, F-Spot copies your photos to the <filename class=\"directory\">~/Photos</filename> folder. You can change the folder F-Spot uses in <guilabel>Preferences</guilabel> dialog (<menuchoice><guimenu>Edit</guimenu><guimenuitem>Preferences</guimenuitem></menuchoice>). You can also disable physical copying of images to that directory and make F-Spot only reference to existing files. For that you need to disable checkbox <guilabel>Copy files to the Photos folder</guilabel>."
-msgstr "Privzeto F-Spot kopira vaše fotografije v mapo <filename class=\"directory\">~/Slike</filename>. Mapo, ki jo uporablja F-Spot lahko spremenite v pogovornem oknu <guilabel>Možnosti</guilabel> (<menuchoice><guimenu>Uredi</guimenu><guimenuitem>Možnosti</guimenuitem></menuchoice>)."
-
-#: C/f-spot.xml:85(para)
-msgid "If there is a tiny chance that some of your photos are already imported from the chosen source, you can use <guilabel>Detect duplicates</guilabel> option. In this case F-Spot will try to find out if exactly this image is already present in the database and thus new copy of it should not be imported."
-msgstr "V primeru da ste morda nekatere fotografije iz izbranega vira že uvozili, lahko uporabite možnost <guilabel>Zaznavanje dvojnikov</guilabel>. F-Spot bo poskusil ugotoviti ali natanko ta slika že obstaja v podatkovni zbirki. V tem primeru kopija slike ne bo uvožena."
-
-#: C/f-spot.xml:92(para)
-msgid "If all the photos you are importing at one time are from a particular event, or have some other characteristic in common, you can create a tag for them so you can later find them with ease. To do this, follow the instructions from <xref linkend=\"tag\"/> to create a new tag, then when you are importing them, check the button for <guilabel>Attach Tag</guilabel> and choose the tag you created."
-msgstr "V primeru da so vse uvožene fotografije z določenega dogodka, ali imajo neko drugo skupno značilnost, lahko za njih ustvarite oznako zato da jih kasneje lahko najdete. Za to sledite navodilom z <xref linkend=\"tag\"/> za ustvarjanje nove oznake, nato med uvažanjem označite gumb <guilabel>Pripni oznako</guilabel> in izberite ustvarjeno oznako."
-
-#: C/f-spot.xml:102(para)
-msgid "F-Spot uses a database stored at <filename>~/.config/f-spot/photos.db</filename>. Note, to access it, use the sqlite3 command. You can also manually specify path to a database by running F-Spot with <option>-b</option> option."
-msgstr "F-Spot uporablja podatkovno zbirko shranjeno v <filename>~/.config/f-spot/photos.db</filename>. Za dostop do nje uporabite ukaz sqlite3. Pot do podatkovne zbirke lahko ročno navedete z zagonom F-Spot z možnostjo <option>-b</option>."
-
-#: C/f-spot.xml:110(para)
-msgid "After an import, F-Spot will display the pictures of the latest import roll only. Read <xref linkend=\"enjoying-search\"/> to learn how to deal with import rolls."
-msgstr "Po uvozu bo F-Spot prikazal le slike zadnjega uvoznega zvitka. Preberite <xref linkend=\"enjoying-search\"/> za podrobnosti o upravljanju z uvoznimi zvitki."
-
-#: C/f-spot.xml:115(para)
-msgid "You can also import directly from Mozilla <ulink url=\"http://www.mozilla.com/en-US/firefox/\">Firefox</ulink> and <ulink url=\"http://www.mozilla.com/en-US/thunderbird/\">Thunderbird</ulink> using <ulink url=\"https://addons.mozilla.org/en-US/firefox/addon/7091\">Firefox</ulink> and <ulink url=\"https://addons.mozilla.org/en-US/thunderbird/addon/7011\">Thunderbird</ulink> F-Spot importer extensions written by <ulink url=\"http://personalpages.tds.net/~cdovel/\">Pizzach</ulink>."
-msgstr "Uvoziti je mogoče tudi neposredno iz Mozilla <ulink url=\"http://www.mozilla.com/en-US/firefox/\">Firefox</ulink> in <ulink url=\"http://www.mozilla.com/en-US/thunderbird/\">Thunderbird</ulink> z uporabo <ulink url=\"https://addons.mozilla.org/en-US/firefox/addon/7091\">Firefox</ulink> in <ulink url=\"https://addons.mozilla.org/en-US/thunderbird/addon/7011\">Thunderbird</ulink> razširitve F-Spot uvoznik, ki jo je napisal<ulink url=\"http://personalpages.tds.net/~cdovel/\">Pizzach</ulink>."
-
-#: C/f-spot.xml:127(title)
-msgid "Edit"
-msgstr "Urejanje"
-
-#: C/f-spot.xml:129(para)
-msgid "If you double click or press enter on an image, you enter Edit mode, where you can remove red-eye, crop, and adjust brightness and colors."
-msgstr "V primeru da dvojno kliknite ali pritisnete vnosno tipko, vstopite v način urejanje, kjer lahko odstranite rdeče oči, obrežete ter prilagodite svetlost in barve."
-
-#: C/f-spot.xml:135(title)
-msgid "Versions"
-msgstr "Različice"
-
-#: C/f-spot.xml:137(para)
-msgid "When you edit your photos, a new copy (called a version) is created, so your original is never altered. After your first edit to a photo, subsequent edits will modify the same version. If you want to create multiple versions of your photo, perhaps with different cropping or coloring, you can do so via the <menuchoice><guimenu>File</guimenu><guimenuitem>Create new version</guimenuitem></menuchoice> option."
-msgstr "Ko urejate fotografije, je ustvarjena nova kopija (imenovana različica), tako izvorna fotografija ni nikoli spremenjena. Po prvem urejanju fotografije bodo naslednja urejanja spremenila isto različico. V primeru da želite ustvariti več različic fotografije, morda z drugim obrezovanjem ali barvami lahko to storite preko možnosti <menuchoice><guimenu>Fotografija</guimenu><guimenuitem>Ustvari novo različico</guimenuitem></menuchoice>."
-
-#: C/f-spot.xml:148(title)
-msgid "Crop"
-msgstr "Obreži"
-
-#: C/f-spot.xml:150(para)
-msgid "Cropping an image is a great way to improve the quality of a photograph by change how it is framed. You crop a photo by selecting the part of the photo you want to keep. If you want your photo to be the exact dimensions necessary for a certain print size, you can constrain the kind of selection F-Spot will allow you to draw by choosing the appropriate size from the constraint drop down. See the <xref linkend=\"edit-remove-red-eye\"/> below for details on making a selection on your photo."
-msgstr "Obrezovanje slike je dober način za izboljšanje kakovosti slike s spremembo okvirjanja. Fotografijo lahko obrežete z izbiro dela fotografije, ki ga želite obdržati. V primeru da želite imeti fotografijo natančnih mer zahtevanih za določeno velikost tiskanja, lahko z izbiro primerne velikosti s spustnega menija omejitev omejite izbiro, ki vam jo bo dovolil narisati F-Spot. Za podrobnosti o izbiri na fotografiji si oglejte <xref linkend=\"edit-remove-red-eye\"/> spodaj."
-
-#: C/f-spot.xml:160(title)
-msgid "Crop tool"
-msgstr "Orodje obreži"
-
-#: C/f-spot.xml:167(para)
-#: C/f-spot.xml:368(para)
-msgid "Once you have made your crop selection, you must click the crop button beneath the image to finalize the crop. If you are working with the original photo, cropping creates a new version your photo."
-msgstr "Ko ste naredili izbor obreza, morate za končanje obrezovanja klikniti gumb pod sliko. V primeru da delate z izvorno fotografijo, obrezovanje ustvari novo različico vaše fotografije."
-
-#: C/f-spot.xml:175(title)
-msgid "Straighten"
-msgstr "Poravnava"
-
-#: C/f-spot.xml:177(para)
-msgid "Straighten effect is a tool to level a photo, quite helpful for landscapes taken without a tripod, when (imaginary) line of horizon is not at 0°. This tool rotates an image by a specified angle and automagically crops the resulted image, so that you always see a perfect rectangle."
-msgstr "Učinek poravnave je orodje za poravnanje fotografij, precej uporabno za sliko pokrajine posnete brez stativa, ko (navidezna) črta horizonta ni na 0°. To orodje zavrti sliko za določen kot in samodejno čarobno obreže nastalo sliko, tako da vedno vidite idealen pravokotnik."
-
-#: C/f-spot.xml:184(title)
-msgid "Straighten tool"
-msgstr "Orodje poravnave"
-
-#: C/f-spot.xml:194(title)
-msgid "Adjust Colors"
-msgstr "Prilagajanje barv"
-
-#: C/f-spot.xml:196(para)
-msgid "To adjust the brightness, contrast, and colors of a photo, first click the <guibutton>Adjust the photo colors</guibutton> icon to open the adjustment dialog. Change then some settings and save them with <guibutton>OK</guibutton>."
-msgstr "Za prilagajanje svetlosti, kontrasta in barv fotografije najprej kliknite ikono <guibutton>Prilagodi barve fotografije</guibutton> za odpiranje pogovornega okna prilagajanja. Spremenite nekaj nastavitev in jih shranite z <guibutton>V redu</guibutton>."
-
-#: C/f-spot.xml:203(title)
-msgid "Adjust Colors tool"
-msgstr "Orodje prilagajanja barv"
-
-#: C/f-spot.xml:213(title)
-#: C/f-spot.xml:221(title)
-msgid "AutoColor"
-msgstr "Samodejna barva"
-
-#: C/f-spot.xml:215(para)
-msgid "This effect automatically adjusts color levels to make a pretty balanced picture color-wise. It serves best for pictures taken with automatical white balance, when camera didn't manage to do the job well."
-msgstr "Ta učinek samodejno prilagodi barvne ravni za ustvarjanje barvno uravnotežene slike. Najboljše deluje za slike posnete s samodejnim ravnotežjem bele barve, ko fotoaparat ni uspel dobro opraviti dela. "
-
-#: C/f-spot.xml:231(title)
-msgid "Desaturate"
-msgstr "Zmanjšaj nasičenje"
-
-#: C/f-spot.xml:233(para)
-msgid "To make a colorful photo a black and white one, open a photo of choice and press <guibutton>Desaturate</guibutton> button."
-msgstr "Za pretvorbo barve fotografije v črno belo odprite izbrano fotografijo iz pritisnite gumb <guibutton>Zmanjšaj nasičenje</guibutton>."
-
-#: C/f-spot.xml:238(title)
-#: C/f-spot.xml:255(title)
-msgid "Desaturation tool"
-msgstr "Orodje zmanjšanja nasičenja"
-
-#: C/f-spot.xml:248(title)
-msgid "Sepia"
-msgstr "Sepia"
-
-#: C/f-spot.xml:250(para)
-msgid "To make a colorful photo look like an old-style picture in sepia tones, open a photo of choice and press <guibutton>Sepia</guibutton> button."
-msgstr "Za pretvorbo barvne fotografije v staro sliko sepia tonov odprite izbrano fotografijo in pritisnite gumb <guibutton>Sepia učinek staranja</guibutton>."
-
-#: C/f-spot.xml:265(title)
-msgid "Remove Red-Eye"
-msgstr "Odstranjevanje rdečih oči"
-
-#: C/f-spot.xml:267(para)
-msgid "To remove redeye from a photo, you need to select a zone containing the eyes. You may want to zoom in on the image to accurately select the eyes in the photo. You should be able to correct both eyes on the same person in one shot, or even the eyes from multiple people at once. If this doesn't work for you, or the selected zone contains some vivid red parts (lips, ...) you'll probably have to correct one red eye at a time."
-msgstr "Za odstranitev rdečih oči s fotografije morate izbrati področje, ki vsebuje oči. Pametno je povečati sliko za natančno izbiro oči v fotografiji. Naenkrat bi lahko popravite obe oči iste osebe ali celo oči več oseb na enkrat. V primeru da to ne deluje, ali izbrano področje vsebuje druge živo rdeče dele (ustnice, ...) boste najbrž morali popraviti eno oko na enkrat."
-
-#: C/f-spot.xml:275(para)
-msgid "To make your selection, click one corner of the rectangle that will be your selection, and drag your mouse to the diagonal corner and release it. You can resize your selection by dragging its edges, and you can move it by clicking in the middle of it and dragging it to where you want it."
-msgstr "Za izbiranje kliknite en kot kvadrata, ki bo vaš izbor, povlecite vašo miško v diagonalni kot in jo spustite. Izboru lahko spremenite velikost z vlečenjem njegovih robom ali pa ga lahko premaknete s klikom v sredino izbora in ga povlečete kamor ga želite."
-
-#: C/f-spot.xml:281(para)
-msgid "Once you have selected a zone, you can remove the red from it by clicking the red-eye button beneath the photo."
-msgstr "Ko ste izbrali področje, lahko rdeče oko odstranite s klikom na gumb rdeče-oko pod fotografijo."
-
-#: C/f-spot.xml:286(title)
-msgid "Red-Eye tool"
-msgstr "Orodje rdečih oči"
-
-#: C/f-spot.xml:294(para)
-msgid "You can change the threshold for redeyes detection by changing the gconf key <filename class=\"directory\">/apps/f-spot/edit/redeye_threshold</filename>."
-msgstr "Prag za zaznavanje rdečih oči lahko spremenite s spremembo gconf ključa ¸<filename class=\"directory\">/apps/f-spot/edit/redeye_threshold</filename>."
-
-#: C/f-spot.xml:303(title)
-msgid "Soft Focus"
-msgstr "Mehko žarišče"
-
-#: C/f-spot.xml:305(para)
-msgid "In photography sharpening one region of a picture, while blurring all the rest, is a way to make an emphasis and grab attention. It is achieved by using a lens that allows shooting with a short distance in front of and beyond the subject that appears to be in focus. Soft focus effect is a way to emulate such a lens."
-msgstr "V fotografiji je izostritev enega predela slike in zameglitev vsega ostalega način za poudarjanje in pridobitev pozornosti. To je mogoče doseči z uporabo leče ki dovoli snemanje s kratko razdaljo pred in za predmetom, ki je videti v gorišču. Učinek mehkega gorišča je način za posnemanje takšne leče."
-
-#: C/f-spot.xml:313(title)
-msgid "Soft Focus tool"
-msgstr "Orodje mehkega žarišča"
-
-#: C/f-spot.xml:320(para)
-msgid "Click to choose central point of the area you want to be in focus and adjust amount of blurring, then click <guibutton>OK</guibutton>."
-msgstr "Kliknite za izbor središča področja, ki naj bo v gorišču in prilagodite količino megljenja in nato kliknite <guibutton>V redu</guibutton>."
-
-#: C/f-spot.xml:327(title)
-msgid "Sharpen"
-msgstr "Izostritev"
-
-#: C/f-spot.xml:329(para)
-msgid "Out-of-focus photographs and most digitized images often need a sharpness correction. The Unsharp Mask effect sharpens edges of the elements without increasing noise or blemish. To sharpen a photo choose <menuchoice><guimenu>Edit</guimenu><guimenuitem>Sharpen...</guimenuitem></menuchoice> and specify the following values:"
-msgstr "Fotografije izven gorišča in večina digitaliziranih slik pogosto potrebujejo popravek izostritve. Učinek maske odstranitve izostritve izostri robove elementov brez povečanja šuma ali napak. Za izostritev fotografije izberite <menuchoice><guimenu>Uredi</guimenu><guimenuitem>Izostri...</guimenuitem></menuchoice> in navedite naslednje vrednosti:"
-
-#: C/f-spot.xml:340(para)
-msgid "<parameter class=\"option\">Amount</parameter> — strength of sharpening."
-msgstr "<parameter class=\"option\">Količina</parameter> — moč izostritve."
-
-#: C/f-spot.xml:345(para)
-msgid "<parameter class=\"option\">Radius</parameter> — how many pixels on either side of an edge will be affected by sharpening. High resolution images allow higher radius."
-msgstr "<parameter class=\"option\">Polmer</parameter> — na koliko točk na vsaki strani roba bo vplivala izostritev. Slike z visoko ločljivostjo omogočijo večje polmere."
-
-#: C/f-spot.xml:352(para)
-msgid "<parameter class=\"option\">Threshold</parameter> — the minimum difference in pixel values that indicates an edge where sharpen must be applied. This helps avoiding creation of blemishes in face, sky or water surface."
-msgstr "<parameter class=\"option\">Prag</parameter> — najmanjša razlika v vrednostih točk ki določiti rob, kjer mora biti uveljavljena izostritev. To pomaga pri izogibanju ustvarjanja napak v obrazu, nebu ali vodni površini."
-
-#: C/f-spot.xml:362(title)
-msgid "Describe"
-msgstr "Opisovanje"
-
-#: C/f-spot.xml:364(para)
-msgid "You can also enter a description of the image by clicking on the text entry box below the image and typing."
-msgstr "Vpis slike lahko vnesete s klikom na polje besedilnega vnosa pod sliko in tipkanjem."
-
-#: C/f-spot.xml:376(title)
-msgid "Adjust Time"
-msgstr "Prilagodi čas"
-
-#: C/f-spot.xml:378(para)
-msgid "In both 'browse' or 'edit' modes, you can adjust the time of one or multiple pictures (<menuchoice><guimenu>Edit</guimenu><guimenuitem>Adjust Time</guimenuitem></menuchoice>). Adjusting the time of multiple pictures at once helps you shift all an import roll if, e.g. the time on your camera is badly set or if you forgot to change it according to DST."
-msgstr "Tako v načinu 'brskanje' kot 'urejanje' lahko prilagodite čas ene ali več slik (<menuchoice><guimenu>Uredi</guimenu><guimenuitem>Prilagodi čas</guimenuitem></menuchoice>). Prilagajanje časa več slik na enkrat vam pomaga premakniti celoten uvozni zvitek, na primer če je čas na vašem fotoaparatu slabo nastavljen in ste ali če ste ga pozabili spremeniti z/na poletni čas. "
-
-#: C/f-spot.xml:390(title)
-msgid "Tag"
-msgstr "Oznaka"
-
-#: C/f-spot.xml:391(para)
-msgid "F-Spot enables you to organize and enjoy your photos by associating them with various user-customizable tags. A tag is a merely a label. F-Spot comes with default tags to get you started; you are free to change them and add new ones. For example, if you want to create a tag for specific event, you can create a new tag named after that event under the Events tag."
-msgstr "F-Spot vam omogoča organizacijo in uživanje v vaših fotografijah s povezavo z različnimi uporabniško prilagodljivimi oznakami. F-Spot za začetek vsebuje privzete oznake, lahko jih spremenite in dodate nove. Na primer, če želite ustvariti oznako za določen dogodek, lahko ustvarite oznako imenovano po dogodku pod oznako dogodki."
-
-#: C/f-spot.xml:398(para)
-msgid "There are many ways to tag photos:"
-msgstr "Obstaja več načinov za oznako fotografij:"
-
-#: C/f-spot.xml:403(para)
-msgid "drag and drop the photo(s) onto the tag"
-msgstr "povlecite in spustite fotografij-o/e na oznako"
-
-#: C/f-spot.xml:408(para)
-msgid "drag and drop the tag onto the photo(s)"
-msgstr "povlecite in spustite oznako na fotografij-o/e"
-
-#: C/f-spot.xml:413(para)
-msgid "via the photo's right-click menu"
-msgstr "preko menija desnega klika fotografija"
-
-#: C/f-spot.xml:418(para)
-msgid "via the Tags and Edit menus"
-msgstr "preko menijev Oznake in Uredi"
-
-#: C/f-spot.xml:423(para)
-msgid "by typing them in. Press <keycap>t</keycap> to pop up the tag entry bar. Here you can enter the tags, separated by commas."
-msgstr "s tipkanjem oznak. Pritisnite <keycap>t</keycap> za pojav vnosne vrstice oznak. Sem lahko vnesete oznake, ločene z vejicami."
-
-#: C/f-spot.xml:427(para)
-msgid "You can also use auto-completion in this entry bar: After entering the beginning of a tag name, press <keycap>Tab</keycap> to see the first possible completion. You can cycle between other possible completions by pressing <keycap>Tab</keycap> again, and backwards with <keycombo action=\"simul\"><keycap>Shift</keycap><keycap>Tab</keycap></keycombo>. To confirm the suggested completion and enter a new tag, press <keycap>,</keycap>. By pressing <keycap>Enter</keycap> you leave the tag entry bar, possibly confirming the current completion. To abort the auto completion, just keep on typing."
-msgstr "V vnosni vrstici lahko uporabite samodejno dokončanje. Po vnosu začetka imena oznake pritisnite <keycap>Tabulator</keycap> za ogled prvega mogočega dokončanja. Med mogočimi dokončanji lahko krožite naprej s ponovnim pritiskom na <keycap>Tabulator</keycap> in nazaj s pritiskom na <keycombo action=\"simul\"><keycap>Dvigalka</keycap><keycap>Tabulator</keycap></keycombo>. Za potrditev predlaganega dokončanja in vnos nove oznake pritisnite <keycap>,</keycap>. S pritiskom <keycap>Vnosna tipka</keycap> zapustite vnosno vrstico oznak in s tem morda potrdite trenutno dokončanje. Za preklic samodejnega dokončevanja tipkajte naprej. "
-
-#: C/f-spot.xml:441(para)
-msgid "The first photo you associate with a tag will be used for that tag's icon. You can always edit a tag's name, parent tag, and icon by right clicking on it and choosing <guilabel>Edit tag</guilabel>."
-msgstr "Prva fotografija, ki jo povežete z oznako, bo uporabljena za ikono oznake. Z desnim klikom na oznako in izbiro <guilabel>Uredi oznako</guilabel> lahko uredite ime oznake, nadrejeno oznako in ikono oznake."
-
-#: C/f-spot.xml:446(para)
-msgid "You can change a tag's parent by dragging and dropping it where you like. Also, you can edit the name of a tag by selecting it and pressing <keycap>F2</keycap>. Lastly, if you have the tag tree widget focused (e.g. you just clicked on a tag), you can start typing the name of a tag, and all the expanded tags in the list will be searched and you'll jump to any matching ones."
-msgstr "Nadrejeni predmet oznake lahko spremenite tako, da ga povlečete in spustite kamor želite. Ime oznake lahko uredite tako, da jo izberete in pritisnete <keycap>F2</keycap>. V primeru da je gradnik drevesa oznak v žarišču, (na primer ste ravnokar kliknili na oznako) lahko začnete tipkati ime oznake, vse razširjene oznake na seznamu bodo preiskane in skočili boste na zadetke."
-
-#: C/f-spot.xml:455(para)
-msgid "You can also change size of tag icons in the sidebar or even make tag icons invisible by selecting preferred option from <menuchoice><guimenu>View</guimenu><guimenuitem>Tag Icons</guimenuitem></menuchoice> menu."
-msgstr "Velikost ikon značk v stranski vrstici lahko spremenite ali pa jih celo napravite nevidne z izbiro prednostne možnosti v meniju <menuchoice><guimenu>Pogled</guimenu><guimenuitem>Ikone oznak</guimenuitem></menuchoice>."
-
-#: C/f-spot.xml:463(para)
-msgid "F-Spot can write tags as metadata fields into JPEG files. Tags for various RAW files, PNG, TIFF, and others are written to F-Spot's database. You will have to re-tag these files if you re-import your collection."
-msgstr "F-Spot lahko oznake zapiše v datoteke JPEG kot polja metapodatkov. Oznake za različne RAW, PNG, TIFF in druge datoteke so zapisane v podatkovno zbirko F-Spot. Te datoteke boste morali ob ponovnem uvozu zbirke ponovno označiti."
-
-#: C/f-spot.xml:474(title)
-msgid "Enjoying your photos"
-msgstr "Uživanje v vaših fotografijah"
-
-#: C/f-spot.xml:476(title)
-msgid "Browse"
-msgstr "Brskanje"
-
-#: C/f-spot.xml:477(para)
-msgid "You can use the slider widget to browse your photos by month or by directory. To change this setting, go to <menuchoice><guimenu>View</guimenu><guimenuitem>Arranged By</guimenuitem></menuchoice>."
-msgstr "Za brskanje po vaših fotografijah po mesecu ali po mapi lahko uporabite drsni gradnik. Za spremembo te nastavitve pojdite na <menuchoice><guimenu>Pogled</guimenu><guimenuitem>Urejeno po</guimenuitem></menuchoice>."
-
-#: C/f-spot.xml:485(title)
-msgid "Search"
-msgstr "Iskanje"
-
-#: C/f-spot.xml:487(para)
-msgid "F-Spot uses search filters to help you better define search criteria."
-msgstr "F-Spot uporablja iskalne filtre za pomoč pri boljšem določanju iskalnih kriterijev."
-
-#: C/f-spot.xml:492(title)
-msgid "Tags"
-msgstr "Oznake"
-
-#: C/f-spot.xml:494(para)
-msgid "You can start a search by double clicking or activating a tag from the tag list. Alternatively, you can show the find bar with <menuchoice><guimenu>Find</guimenu><guimenuitem>Show Find Bar</guimenuitem></menuchoice>. With the find bar shown, you can drag tags from the tag view to the find bar."
-msgstr "Iskanje lahko začnete z dvojnim klikom ali omogočanjem oznake iz seznama oznak. Dodatno lahko pokažete iskalno vrstico z <menuchoice><guimenu>Najdi</guimenu><guimenuitem>Pokaži iskalno vrstico</guimenuitem></menuchoice>. Ko je iskalna vrstica prikazana, lahko oznake povlečete iz pogleda oznak v iskalno vrstico."
-
-#: C/f-spot.xml:500(para)
-msgid "To find photos that are tagged with both of two tags, activate the first in the tag view or drag it onto the find bar, then drag the second tag and drop it on top of the first. You can also right click on the second tag in the tag view, or use the <guimenu>Find</guimenu> menu, and choose <guimenuitem>Find With...</guimenuitem> and select the first tag (or group of tags)."
-msgstr "Za iskanje fotografij, ki so označene z obema od dveh oznak, omogočite prvo v pogledu oznak ali jo povlecite v iskalno vrstico in nato povlecite drugo oznako in jo spustite na prvo. Lahko tudi desno kliknete na drugo oznako v pogledu oznak ali uporabite meni <guimenu>Najdi</guimenu> in izberite <guimenuitem>Najdi z...</guimenuitem> in izberite prvo oznako (ali skupino oznak)."
-
-#: C/f-spot.xml:507(para)
-msgid "You can drag a tag icon around on the find bar to change from finding it and another tag to finding it or another tag."
-msgstr "Ikono oznake lahko povlečete na iskalno vrstico za spremembo iz iskanja te oznake in druge oznake v iskanje te oznake ali druge oznake. "
-
-#: C/f-spot.xml:511(para)
-msgid "You can search for photos that do not have a particular tag by double-clicking on a tag in the find bar. Alternatively, you can right-click a tag in the find bar and select <guimenuitem>Exclude</guimenuitem>."
-msgstr "Fotografije brez določene oznake lahko iščete z dvojnim klikom na oznako v iskalni vrstici. Dodatna možnost je desni klik na oznako v iskalni vrstici in izbira <guimenuitem>Izključi</guimenuitem>."
-
-#: C/f-spot.xml:516(para)
-msgid "To remove a tag from the search, drag it away from the find bar, or right click and select <guimenuitem>Remove</guimenuitem>."
-msgstr "Za odstranitev oznake iz iskanja jo povlecite vstran od vrstice iskanja ali desno kliknite in izberite <guimenuitem>Odstrani</guimenuitem>."
-
-#: C/f-spot.xml:520(para)
-msgid "By default, photos tagged <emphasis>Hidden</emphasis> will not be shown. You must explicitly include the <emphasis>Hidden</emphasis> tag in your search to show such photos."
-msgstr "Privzeto so fotografije označene <emphasis>Skrito</emphasis> skrite. Za iskanje takšnih fotografij morate eksplicitno vključiti oznako <emphasis>Skrito</emphasis>."
-
-#: C/f-spot.xml:528(title)
-msgid "Import Rolls"
-msgstr "Uvozni zvitki"
-
-#: C/f-spot.xml:529(para)
-msgid "F-Spot remembers what pictures were imported every now and then. Use <menuchoice><guimenu>Find</guimenu><guisubmenu>Import Roll</guisubmenu><guimenuitem>Last import roll</guimenuitem></menuchoice> to limit search to last importing session or use <menuchoice><guimenu>Find</guimenu><guisubmenu>Import Roll</guisubmenu><guimenuitem>Select Import Rolls...</guimenuitem></menuchoice> to make a finer selection of imported photos:"
-msgstr "F-Spot si vsake toliko časa zapomni katere slike so bile uvožene. Uporabite <menuchoice><guimenu>Najdi</guimenu><guisubmenu>Po uvoznem zvitku</guisubmenu><guimenuitem>Zadnji uvozni zvitek</guimenuitem></menuchoice> za omejitev iskanja na zadnjo sejo uvažanja ali uporabite <menuchoice><guimenu>Najdi</guimenu><guisubmenu>Po uvoznem zvitku</guisubmenu><guimenuitem>Izberi uvozne zvitke ...</guimenuitem></menuchoice> za fino izbiro uvoženih fotografij:"
-
-#: C/f-spot.xml:539(para)
-msgid "<parameter class=\"option\">At</parameter> — to select photos from a particular importing session"
-msgstr "<parameter class=\"option\">Ob</parameter> — za izbor fotografij iz določene seje uvažanja"
-
-#: C/f-spot.xml:544(para)
-msgid "<parameter class=\"option\">After</parameter> — to select all photos imported begining with a particular importing session"
-msgstr "<parameter class=\"option\">Za</parameter> — za izbor vseh uvoženih fotografij z začetkom pri določeni seji uvažanja"
-
-#: C/f-spot.xml:549(para)
-msgid "<parameter class=\"option\">Between</parameter> — to select all photos imported between two particular importing sessions"
-msgstr "<parameter class=\"option\">Med</parameter> — za izbor vseh fotografij uvoženih med dvema določenima sejama uvažanja"
-
-#: C/f-spot.xml:554(para)
-msgid "Every time you change settings of the filter, the amount of selected photos will appear in the bottom part of the dialog."
-msgstr "Vsakič ko spremenite nastavitve filtra, se količina izbranih fotografij pojavi na spodnjem delu pogovornega okna."
-
-#: C/f-spot.xml:558(para)
-msgid "When you apply Import Roll filter, in the Find bar you will see <guilabel>Find: Import Roll</guilabel>. Now you can add some other filter to finetune your selection."
-msgstr "Ko boste uveljavili filter uvoznih zvitkov boste videli <guilabel>Najdi: Uvozni zvitek</guilabel>. Sedaj lahko dodate druge filtre za fino nastavljanje vašega izbora."
-
-#: C/f-spot.xml:563(para)
-msgid "If you don't need the Import Roll filter anymore, choose <menuchoice><guimenu>Find</guimenu><guisubmenu>Import Roll</guisubmenu><guimenuitem>Clear roll filter</guimenuitem></menuchoice> to remove Import Roll from search criteria. You can also click the close button (<guibutton>X</guibutton>) of the search bar to discard all the current search options."
-msgstr "V primeru da filtra uvoznih zvitkov ne potrebujete več, za odstranitev uvoznih zvitkov iz iskalnih kriterijev izberite <menuchoice><guimenu>Najdi</guimenu><guisubmenu>Uvozni zvitek</guisubmenu><guimenuitem>Počisti filter uvoznih zvitkov</guimenuitem></menuchoice>. Za zavračanje vseh trenutnih možnosti iskanja lahko kliknete tudi na gumb zapri (<guibutton>X</guibutton>) v iskalni vrstici."
-
-#: C/f-spot.xml:572(para)
-msgid "The number of displayed rolls in the dialog is defined by the gconf key <filename class=\"directory\">/apps/f-spot/import/gui_roll_history</filename>. Default value is 10."
-msgstr "Število prikazanih zvitkov v pogovornem oknu je določeno z gconf ključem <filename class=\"directory\">/apps/f-spot/import/gui_roll_history</filename>. Privzeta vrednost je 10."
-
-#: C/f-spot.xml:581(title)
-msgid "Type-to-find"
-msgstr "Tipkajte-za-iskanje"
-
-# Govorimo o operatorjih, zato jih ne prevajamo ...
-#: C/f-spot.xml:582(para)
-msgid "There is also a type-to-find entry. Press <keycap>/</keycap> to open it. It cannot be used at the same time as the find bar. You can type queries such as \"TagA and (TagB or (TagC and TagD))\". At any point, if F-Spot recognizes what you've typed as a valid query, it will update your search. The <emphasis>not</emphasis> operator is not yet supported."
-msgstr "Obstaja tudi vnos tipkaj-za-iskanje. Za odpiranje pritisnite <keycap>/</keycap>. Vnosa ni mogoče uporabiti istočasno kot iskalne vrstice. Vtipkate lahko poizvedbe kot so \"OznakaA and (OznakaB or (OznakaC and OznakaD)\". V vsakem primeru bo F-Spot posodobil vaše iskanje, če zazna veljavno poizvedbo. Operator <emphasis>not</emphasis> še ni podprt."
-
-#: C/f-spot.xml:590(para)
-msgid "This function will also search for the typed text into photos comments and filename."
-msgstr "Ta funkcija bo iskala tudi besedilo vneseno v komentarje fotografije in ime datoteke."
-
-#: C/f-spot.xml:597(title)
-msgid "Fullscreen Mode and Slideshows"
-msgstr "Celozaslonski način in diapredstavitve"
-
-#: C/f-spot.xml:598(para)
-msgid "For fewer distractions and larger display, you can view your photos in full screen mode. You control when to show the next photo or to return to the previous. Enter fullscreen mode by pressing <keycap>F11</keycap> at any time or by pressing the button in the toolbar."
-msgstr "Za manj motenj in večji prikaz si lahko ogledate fotografije v celozaslonskem načinu. Nadzirate lahko kdaj naj bo prikazana naslednja ali predhodna fotografija. V celozaslonski način lahko kadarkoli vstopite s pritiskom na <keycap>F11</keycap> ali s pritiskom gumba v orodni vrstici."
-
-#: C/f-spot.xml:605(title)
-msgid "FullScreen"
-msgstr "Celozaslonski način"
-
-#: C/f-spot.xml:612(para)
-msgid "In slideshow mode, you can sit back and view your photos as they are presented to you. You can start a slideshow by pressing the button on the toolbar."
-msgstr "V načinu diapredstavitve se lahko usedete in si ogledate svoje fotografije medtem ko so vam predstavljene. Diapredstavitev lahko zaženete s pritiskom na gumb v orodni vrstici."
-
-#: C/f-spot.xml:618(title)
-msgid "SlideShow"
-msgstr "Diapredstavitev"
-
-#: C/f-spot.xml:629(title)
-msgid "Sharing your photos"
-msgstr "Souporaba vaših fotografij"
-
-#: C/f-spot.xml:632(para)
-msgid "There are many ways to share your photos using F-Spot. All of the following methods will only share the photos you have selected when you run them."
-msgstr "Za souporabo vaših fotografij z F-Spot obstaja več načinov. Vse naslednje metode bodo dale v souporabo le fotografije, ki ste jih izbrali ob zagonu souporabe."
-
-#: C/f-spot.xml:639(title)
-msgid "E-mail"
-msgstr "E-pošta"
-
-#: C/f-spot.xml:640(para)
-msgid "E-mail your photos directly from F-Spot with the <menuchoice><guimenu>File</guimenu><guimenuitem>Send Mail</guimenuitem></menuchoice> menu."
-msgstr "Svoje fotografije lahko pošljete preko elektronske pošte neposredno iz F-Spot z uporabo menija <menuchoice><guimenu>Fotografija</guimenu><guimenuitem>Pošlji po pošti</guimenuitem></menuchoice>. "
-
-#: C/f-spot.xml:646(title)
-msgid "Note 1"
-msgstr "Opomba 1"
-
-#: C/f-spot.xml:647(para)
-msgid "The email program used for this is defined at the GNOME level. You can change the default e-mailer for your user using the <application>Preferred Applications</application> tool in <menuchoice><guimenu>System</guimenu><guisubmenu>Preferences</guisubmenu></menuchoice>."
-msgstr "Uporabljen bo e-poštni program, ki je določen na ravni GNOME. Privzeti e-poštni program lahko spremenite za svoj račun z uporabo orodja <application>Prednostni programi</application> v meniju <menuchoice><guimenu>Sistem</guimenu><guisubmenu>Nastavitve</guisubmenu></menuchoice>."
-
-#: C/f-spot.xml:656(title)
-msgid "Note 2"
-msgstr "Opomba 2"
-
-#: C/f-spot.xml:657(para)
-msgid "If some of the photos you'd like to send by email are in a format that F-Spot can't write (e.g. RAW images), the size selection dialog will become insensitive and the originals will be sent."
-msgstr "V primeru da so fotografije, ki jih želite poslati preko elektronske pošte vrste, ki je F-Spot ne more zapisati (na primer slike RAW) bo pogovorno okno postalo neobčutljivo in bodo poslane izvorne fotografije."
-
-#: C/f-spot.xml:664(para)
-msgid "If you're sending resized pictures, F-Spot will keep the modified versions somewhere in the <filename class=\"directory\">/tmp</filename> directory for 30 seconds. It's not an issue with evolution, which makes it's own local copy of the attachments, but could be a bit shorter if you're using Thunderbird. You can change the delay by editing the gconf key <filename class=\"directory\">/apps/f-spot/export/email/delete_timeout_seconds</filename>."
-msgstr "V primeru da pošiljate slike s spremenjenimi velikostmi, bo F-Spot obdržal spremenjene različice nekje v mapi <filename class=\"directory\">/tmp</filename> za 30 sekund. To ne povzroča težav z evolution, ki naredi svojo krajevno kopijo prilog, toda bi lahko bilo malce krajše, če uporabljate Thunderbird. Zamik lahko spremenite z urejanjem gconf ključa <filename class=\"directory\">/apps/f-spot/export/email/delete_timeout_seconds</filename>."
-
-#: C/f-spot.xml:676(title)
-msgid "Print"
-msgstr "Tisk"
-
-#: C/f-spot.xml:677(para)
-msgid "Print your photos with the <menuchoice><guimenu>File</guimenu><guimenuitem>Print</guimenuitem></menuchoice> menu."
-msgstr "Fotografije lahko natisnite z menijem <menuchoice><guimenu>Datoteka</guimenu><guimenuitem>Natisni</guimenuitem></menuchoice>."
-
-#: C/f-spot.xml:684(title)
-msgid "Burn to CD"
-msgstr "Zapisovanje na CD"
-
-#: C/f-spot.xml:685(para)
-msgid "Burn your photos to CD or DVD with the <menuchoice><guimenu>File</guimenu><guisubmenu>Export</guisubmenu><guimenuitem>Export to CD</guimenuitem></menuchoice> menu."
-msgstr "Zapišite vaše fotografije z menijem <menuchoice><guimenu>Fotografija</guimenu><guisubmenu>Izvozi</guisubmenu><guimenuitem>Izvozi na CD</guimenuitem></menuchoice>."
-
-#: C/f-spot.xml:693(title)
-msgid "Generate a Website Gallery or Folder"
-msgstr "Ustvarjanje spletne galerije ali mape"
-
-#: C/f-spot.xml:694(para)
-msgid "The <menuchoice><guimenu>File</guimenu><guimenuitem>Export</guimenuitem><guimenuitem>Export to Folder</guimenuitem></menuchoice> feature gives you three ways to export your images."
-msgstr "Zmožnost <menuchoice><guimenu>Fotografija</guimenu><guimenuitem>Izvozi v</guimenuitem><guimenuitem>Izvozi v mapo</guimenuitem></menuchoice> vam poda tri načine za izvažanje vaših slik."
-
-#: C/f-spot.xml:702(para)
-msgid "<guilabel>Use Original</guilabel> exports your photos ready for use with Jakub Steiner's free <ulink url=\"http://jimmac.musichall.cz/original.php\"> Original Photo Gallery</ulink> software. If you are unsure about this option, it is probably not the right one for you."
-msgstr "<guilabel>Uporabi izvorno</guilabel> izvozi vaše fotografije pripravljene za uporabo z brezplačnim programom Jakuba Steinerja <ulink url=\"http://jimmac.musichall.cz/original.php\"> Original Photo Gallery</ulink>. V primeru da niste prepričani o tej možnosti, verjetno ni prava za vas."
-
-#: C/f-spot.xml:710(para)
-msgid "<guilabel>Use static HTML files</guilabel> exports your photos to an interactive website, ready for you to upload."
-msgstr "<guilabel>Uporabi statične datoteke HTML</guilabel> izvozi vaše fotografije v interaktivno spletišče, pripravljeno na pošiljanje."
-
-#: C/f-spot.xml:716(para)
-msgid "<guilabel>Plain Files</guilabel> exports your images as files within directories, without putting them into a gallery."
-msgstr "<guilabel>Običajne datoteke</guilabel> izvozi vaše slike kot datoteke v mape, brez pošiljanja v galerijo."
-
-#: C/f-spot.xml:725(title)
-msgid "Post to your online galleries"
-msgstr "Objavljanje v spletne galerije"
-
-# V programu je fotografija, ni datoteka !!
-#: C/f-spot.xml:726(para)
-msgid "If you use Flickr, SmugMug, 23hq, Tabblo, Facebook, Zooomr or Picasa Web Album, you can post your files directly from F-Spot with the <menuchoice><guimenu>File</guimenu><guisubmenu>Export</guisubmenu></menuchoice> menu, choosing corresponding submenu item."
-msgstr "V primeru da uporabljate Flickr, SmugMug, 23hq, Tabblo, Facebook, Zooomr ali Picasa spletne albume lahko svoje datoteke objavite neposredno iz F-Spot z uporabo menija <menuchoice><guimenu>Fotografija</guimenu><guisubmenu>Izvozi v</guisubmenu></menuchoice> in izbiro ustreznega predmeta podmenija."
-
-# V programu je fotografija, ni datoteka !!
-#: C/f-spot.xml:731(para)
-msgid "If you use the PHP software known as <ulink url=\"http://gallery.sourceforge.net/\"> Gallery</ulink>, you can post your photos to your existing album with the <menuchoice><guimenu>File</guimenu><guimenuitem>Export</guimenuitem><guimenuitem>Export to Web Gallery</guimenuitem></menuchoice> menu. You must first enable the Remote module within your Gallery installation."
-msgstr "V primeru da uporabljate PHP program poznan kot <ulink url=\"http://gallery.sourceforge.net/\"> Gallery</ulink>, lahko svoje fotografije objavite v svoj obstoječ album z menijem <menuchoice><guimenu>Fotografija</guimenu><guimenuitem>Izvozi v</guimenuitem><guimenuitem>Izvozi v spletno galerijo</guimenuitem></menuchoice>. Najprej morate v namestitvi Gallery omogočiti modul Oddaljeno. "
-
-# To je ime programa ...
-#: C/f-spot.xml:739(title)
-msgid "Note for Gallery 2.2 users"
-msgstr "Opomba za uporabnike Gallery 2.2"
-
-#: C/f-spot.xml:740(para)
-msgid "The Remote plugin for Gallery should be 1.0.8 or newer."
-msgstr "Oddaljeni vstavek Gallery mora biti 1.0.8 ali novejši."
-
-#: C/f-spot.xml:744(para)
-msgid "<ulink url=\"http://pennave.sourceforge.net\">PennAve</ulink> is a Python web-application that directly uses F-Spot's database to present a dynamic gallery of your photos and tags."
-msgstr "<ulink url=\"http://pennave.sourceforge.net\">PennAve</ulink> je spletni program v Pythonu, ki neposredno uporablja podatkovno zbirko F-Spot za predstavljanje dinamične galerije vaših fotografij in oznak."
-
-#: C/f-spot.xml:749(para)
-msgid "<ulink url=\"http://www.conduit-project.org\">Conduit</ulink> is an application that can sync photos that have a particular tag with your Flickr or Picasa Web Album web storage."
-msgstr "<ulink url=\"http://www.conduit-project.org\">Conduit</ulink> je program, ki lahko uskladi fotografije z določeno oznako s spletno shrambo Flicker ali Picasa spletni albumi."
-
-#: C/f-spot.xml:758(title)
-msgid "Color management"
-msgstr "Upravljanje barv"
-
-#: C/f-spot.xml:761(title)
-msgid "What's color management"
-msgstr "Kaj je upravljanje barv"
-
-#: C/f-spot.xml:763(para)
-msgid "When you capture a photo and look at it on a display, it looks different than on a camera's preview display or on any other display. It will also look different when you print it. This is because every device has unique color reproduction capabilities."
-msgstr "Fotografija je na zaslonu videti drugače kot na zaslonu predogleda fotoaparata ali kateremukoli drugemu zaslonu. Tudi natisnjena fotografija je videti drugačna. To se zgodi zato, ker ima vsaka barva edinstvene zmožnosti poustvaritve barv. "
-
-#: C/f-spot.xml:770(para)
-msgid "Color management system (CMS) is a tool to achieve reliable color reproduction for both display and output (e.g. a printer). A CMS relies on color profiles to map original colors to the color that a device can reproduce so that colors will appear the same way everywhere — on a computer LCD monitor, on a print from your local photolab etc."
-msgstr "Sistem za upravljanje barv (CMS) je orodje za doseganje zanesljive poustvaritve barv tako za zaslon kot izhod (na primer tiskalnik). CMS se zanaša na barvne profile za preslikavo izvornih barv v barve, ki jih lahko poustvarijo naprave, tako, da so barve povsod videti enake - na računalniškem zaslonu LCD, natisnjene, itn."
-
-#: C/f-spot.xml:780(title)
-msgid "What's a color profile"
-msgstr "Kaj je barvni profil"
-
-#: C/f-spot.xml:782(para)
-msgid "A color profile is a file with either .icc (thus its is often called an ICC profile) or .icm extension that describes how device's colors correspond to a universal description of colors."
-msgstr "Barvni profil je datoteka s pripono .icc (zato je pogosto imenovan profil ICC) ali .icm ki opiše kako barve naprave ustrezajo splošnemu opisu naprav."
-
-#: C/f-spot.xml:788(para)
-msgid "There are several types of profiles:"
-msgstr "Obstaja več vrst profilov:"
-
-#: C/f-spot.xml:794(para)
-msgid "Input device profile. It's profile for a camera or a profile that an application like XSane embeds into a scanned image."
-msgstr "Profil vhodne naprave. To je profil fotoaparata ali profil, ki ga lahko program kot je XSane vključi v skenirano sliko."
-
-#: C/f-spot.xml:800(para)
-#, fuzzy
-msgid "Working space profile. It's a profile that describes color space in which all operations are done inside an application. Usually very wide gamut profiles like AdobeRGB1998 or ProPhotoRGB are used for that."
-msgstr "Profil delovnega prostora. To je profil, ki opiše barvni prostor, v katerem so vsa opravila narejena znotraj programa. Običajno so za to uporabljeni zelo široki XXX profili kot AdobeRGB1998 ali ProPhotoRGB."
-
-#: C/f-spot.xml:807(para)
-msgid "Display profile. It's a profile for a monitor."
-msgstr "Profil zaslona. To je profil za zaslon."
-
-#: C/f-spot.xml:812(para)
-msgid "Output profile. This is usually a profile for you printer."
-msgstr "Izhodni profil. To je običajno profil za tiskalnik."
-
-#: C/f-spot.xml:818(para)
-msgid "Currently F-Spot allows setting only display and output profiles. All color operations are done in sRGB color space."
-msgstr "Trenutno F-Spot dovoli le nastavljanje profilov zaslona in izhoda. Vsa barvna opravila so narejena v barvnem prostoru sRGB."
-
-#: C/f-spot.xml:825(title)
-msgid "How to get my screen/printer color profile"
-msgstr "Kako dobiti barvni profil zaslona/tiskalnika"
-
-#: C/f-spot.xml:827(para)
-msgid "There are few ways to get a color profile."
-msgstr "Obstaja več načinov za pridobivanje barvnega profila."
-
-#: C/f-spot.xml:832(title)
-msgid "From CD or Internet"
-msgstr "Iz CD-ja ali medmrežja"
-
-#: C/f-spot.xml:834(para)
-msgid "Many hardware manufacturers put color profiles into CD in the bundle. If you have one (from monitor or printer), you can use it. Or you can download it from the Internet (usually, from support section of the manufacturer's web site). Some camera manufacturers (Nikon, Canon) also provide ICC profiles."
-msgstr "Veliko proizvajalcev strojene opreme priložijo CD z barvnimi profili. V primeru da ga imate (od zaslona ali tiskalnika) ga lahko uporabite. Lahko ga prejmete z medmrežja (običajno z odseka podpore na spletišču proizvajalca). Barvne profile zagotavljajo tudi nekateri proizvajalci fotoaparatov (Nikon, Canon)."
-
-#: C/f-spot.xml:844(title)
-msgid "Calibrating and profiling"
-msgstr "Umerjanje in profiliranje"
-
-#: C/f-spot.xml:846(para)
-msgid "Best results can be achieved by calibrating and profiling devices with a measurement device. It is not so difficult, but it means that you need a spectrophotometer to do all measurements and create an ICC profile."
-msgstr "Najboljše rezultate je mogoče doseči z umerjanjem in profiliranjem naprav z meritveno napravo. To ni težko, vendar pa je za izvajanje vseh meritev in ustvarjanje profila ICC potreben spektrofotometer."
-
-#: C/f-spot.xml:852(para)
-msgid "If you are on Windows or Mac OS X, you can use manufacturer's software coming with a spectrophotometer. On Linux you will have to use either <ulink url=\"http://www.argyllcms.com\">Argyll</ulink>, which is a set of versatile command line tools, or <ulink url=\"http://lprof.sourceforge.net/\">LProf</ulink>, which has a graphical user interface."
-msgstr "V primeru da uporabljate Windows ali Mac OS X lahko uporabite program proizvajalca, ki je prispel s spektrofotometrom. Na Linuxu boste morali uporabiti <ulink url=\"http://www.argyllcms.com\">Argyll</ulink>, ki je niz vsestranskih orodij ukazne vrstice ali <ulink url=\"http://lprof.sourceforge.net/\">LProf</ulink>, ki ima grafični uporabniški vmesnik."
-
-#: C/f-spot.xml:860(para)
-#, fuzzy
-msgid "Please refer to documentation of third party hardware and software vendors for details."
-msgstr "Za podrobnosti si oglede dokumentacijo za "
-
-#: C/f-spot.xml:867(title)
-msgid "Embedding"
-msgstr "Vključevanje"
-
-#: C/f-spot.xml:869(para)
-msgid "Image formats themselves (such as TIFF, JPEG, PNG...) may contain embedded color profiles. If color management is enabled, F-Spot looks for such embedded profiles and takes them into consideration."
-msgstr "Nekatere vrste slik (kot so TIFF, JPEG, PNG ...) lahko vsebujejo vključene barvne profile. V primeru da je upravljanje barv omogočeno, F-Spot poišče vključene profile in jih upošteva."
-
-#: C/f-spot.xml:878(title)
-msgid "How to use color management in F-Spot"
-msgstr "Kako uporabiti upravljanje barv v F-Spot"
-
-#: C/f-spot.xml:880(para)
-msgid "Color management in F-Spot can use only RGB profiles at this time (and you can't see other profiles in the F-Spot)."
-msgstr "Upravljanje barv v F-Spot lahko trenutno uporabi le profile RGB (drugih profilov v F-Spot ni mogoče videti)."
-
-#: C/f-spot.xml:887(para)
-msgid "Copy your color profiles into the <filename class=\"directory\">/usr/share/color/icc</filename> or <filename class=\"directory\">/usr/local/share/color/icc</filename> directory."
-msgstr "Kopirajte svoje barvne profile v mapo <filename class=\"directory\">/usr/share/color/icc</filename> ali <filename class=\"directory\">/usr/local/share/color/icc</filename>."
-
-#: C/f-spot.xml:895(para)
-msgid "Enable the color management with the <menuchoice><guimenu>Edit</guimenu><guimenuitem>Preferences</guimenuitem></menuchoice> menu."
-msgstr "Upravljanje barv omogočite z menijem <menuchoice><guimenu>Uredi</guimenu><guimenuitem>Možnosti</guimenuitem></menuchoice>."
-
-#: C/f-spot.xml:902(para)
-msgid "Select <guilabel>Display</guilabel> and <guilabel>Output</guilabel> profiles."
-msgstr "Izberite profila <guilabel>Prikaz</guilabel> in <guilabel>Izhod</guilabel>."
-
-#: C/f-spot.xml:910(para)
-msgid "You can use <ulink url=\"http://burtonini.com/blog/computers/xicc\">xicc</ulink> to load ICC profile to display and use the loaded profile from F-Spot. Just mark the checkbox <guilabel>Try to use the system display profile</guilabel>."
-msgstr "Za nalaganje profila ICC za prikaz in uporabo naloženega profila iz F-Spot lahko uporabite <ulink url=\"http://burtonini.com/blog/computers/xicc\">xicc</ulink>. Samo označite potrditveno polje <guilabel>Poskus uporabe sistemskega profila prikaza</guilabel>."
-
-#: C/f-spot.xml:921(title)
-msgid "Extend functionality"
-msgstr "Razširitev zmožnosti"
-
-#: C/f-spot.xml:924(title)
-msgid "What extensions are"
-msgstr "Kaj so razširitve"
-
-#: C/f-spot.xml:926(para)
-msgid "F-Spot extensions are means to add new functionality to the application. F-Spot supports two types of extension: exporters (which allow exporting photos to new web services or data storages) and tools (which allow new ways of color correction, duplicate photos finders etc.). Extensions are distributed in form of extension packages."
-msgstr "Razširitve F-Spot dajo programu nove zmožnosti. F-Spot podpira dve vrsti razširitev: izvoznike (omogočajo izvažanje fotografij na spletne storitve ali podatkovne shrambe) in orodja (omogočajo nove načine popravljanja barv, podvajanje fotografij, itn.). Razširitve so distribuirane v obliki paketov razširitev."
-
-#: C/f-spot.xml:933(para)
-msgid "In the best traditions of not reinventing the wheel extensions can use other extensions, which means that one extension cannot work, if another extension is not installed. This concept of dependance actually means that"
-msgstr "Z namenom zmanjšanja podvajanja dela lahko razširitve uporabijo druge razširitve, kar pomeni da lahko razširitev ne deluje, če ni nameščena druga razširitev. Ta koncept odvisnosti pomeni da"
-
-#: C/f-spot.xml:940(para)
-msgid "you cannot install an extension, if the extension it depends on, is not present in the system"
-msgstr "ne morete namestiti razširitve, če je odvisna od druge razširitve, ki je ni na sistemu"
-
-#: C/f-spot.xml:945(para)
-msgid "you cannot remove an extension on which some other extension depends"
-msgstr "ne morete odstraniti razširitve od katere je odvisna druga razširitev"
-
-#: C/f-spot.xml:953(title)
-msgid "Managing extensions"
-msgstr "Upravljanje razširitev"
-
-#: C/f-spot.xml:955(para)
-msgid "To manage extensions choose <menuchoice><guimenu>Edit</guimenu><guimenuitem>Manage Extensions</guimenuitem></menuchoice> menu item."
-msgstr "Za upravljanje razširitev izberite predmet menija <menuchoice><guimenu>Uredi</guimenu><guimenuitem>Upravljanje razširitev</guimenuitem></menuchoice>."
-
-#: C/f-spot.xml:961(title)
-msgid "Managing extension repositories"
-msgstr "Upravljanje s skladišči razširitev"
-
-#: C/f-spot.xml:963(para)
-msgid "Simply put, repositories are extension storages. They can be either network or local. To add a new repository click Repositories button, choose type of the repository you are about to add and provide either URL or path. If the URL or path you specified doesn't contain a description (index) file for extensions, a warning message will pop up to tell you that."
-msgstr "Preprosto povedano so skladišča shrambe razširitev. Lahko so omrežna ali krajevna. Za dodajanje novega skladišča kliknite gumb Skladišča, izberite vrsto skladišča za dodajanje in vnesite URL ali pot. V primeru da navedeni URL ali pot ne vsebuje datoteke opisa (kazala) za razširitve, vas bo o tem obvestilo opozorilno sporočilo."
-
-#: C/f-spot.xml:970(para)
-msgid "To remove a repository click <guibutton>Repositories</guibutton> button again, choose the repository you are about to delete and click <guibutton>Delete</guibutton> button."
-msgstr "Za odstranitev skladišča ponovno kliknite gumb <guibutton>Skladišča</guibutton>, izberite skladišče za izbris in kliknite gumb <guibutton>Izbriši</guibutton>."
-
-#: C/f-spot.xml:978(title)
-msgid "Installing and updating extensions"
-msgstr "Nameščanje in posodabljanje razširitev"
-
-#: C/f-spot.xml:980(para)
-msgid "To install an extension click <guibutton>Install extensions...</guibutton> button. In the newly presented dialog"
-msgstr "Za namestitev razširitve kliknite gumb <guibutton>Namesti razširitve ...</guibutton> . V novo predstavljenem pogovornem oknu"
-
-#: C/f-spot.xml:986(para)
-msgid "Choose repository to install from all known repositories or just one of available repositories."
-msgstr "Izberite skladišče za namestitev iz vseh znanih skladišč ali razpoložljivih skladišč."
-
-#: C/f-spot.xml:992(para)
-msgid "Choose, what extension packages you want to see: All, Only new, Only updates."
-msgstr "Izberite katere pakete razširitev želite videti: Vse, le nove, le posodobitve."
-
-#: C/f-spot.xml:997(para)
-msgid "Click the <guibutton>Update</guibutton> button to update list of available extension packages by given criteria."
-msgstr "Kliknite gumb <guibutton>Posodobi</guibutton> za posodobitev seznama razpoložljivih paketov razširitev glede na dane kriterije."
-
-#: C/f-spot.xml:1003(para)
-msgid "Choose extensions you want to install/update, click <guibutton>Information</guibutton> to see summary on selected package, if you want to."
-msgstr "Izberite razširitve, ki jih želite namestiti/posodobiti, ter kliknite <guibutton>Podrobnosti</guibutton> za ogled povzetka izbranega paketa, če želite."
-
-#: C/f-spot.xml:1009(para)
-msgid "Click <guibutton>Forward</guibutton> to proceed with installation."
-msgstr "Kliknite gumb <guibutton>Naprej</guibutton> za nadaljevanje z namestitvijo."
-
-#: C/f-spot.xml:1017(title)
-msgid "Enabling and disabling extensions"
-msgstr "Omogočanje in onemogočanje razširitev "
-
-#: C/f-spot.xml:1019(para)
-msgid "You might want to temporarily enable or disable a particular extension package, for example, if the extension is not stable enough to handle a large amount of photos or if menus get crowded with extensions."
-msgstr "Morda želite začasno omogočiti ali onemogočiti določen paket razširitve, na primer če razširitev ni dovolj stabilna za upravljanje z veliko količino fotografij ali če so meniji preveč natrpani z razširitvami."
-
-#: C/f-spot.xml:1024(para)
-msgid "In the <guilabel>Manage Extensions</guilabel> dialog select the extension package and click <guibutton>Enable</guibutton> or <guibutton>Disable</guibutton>."
-msgstr "V pogovornem oknu <guilabel>Upravljanje razširitev</guilabel> izberite paket razširitev in kliknite gumb <guibutton>Omogoči</guibutton> ali <guibutton>Onemogoči</guibutton>. "
-
-#: C/f-spot.xml:1031(title)
-msgid "Removing extensions"
-msgstr "Odstranjevanje razširitev"
-
-#: C/f-spot.xml:1033(para)
-msgid "If you don't need an extension you can remove it from the system completely. In the <guilabel>Manage Extensions</guilabel> dialog select the extension package you want to remove and click <guibutton>Delete</guibutton>."
-msgstr "V primeru da razširitve ne potrebujete, jo lahko popolnoma odstranite s sistema. V pogovornem oknu <guilabel>Upravljanje razširitev</guilabel> izberite paket razširitev, ki ga želite izbrisati in kliknite <guibutton>Izbriši</guibutton>."
-
-#: C/f-spot.xml:1041(title)
-msgid "Reading summary of extensions"
-msgstr "Branje povzetka razširitev"
-
-#: C/f-spot.xml:1043(para)
-msgid "Every extension package contains metadata that provides the following information about the extension:"
-msgstr "Vsak paket razširitve vsebuje metapodatke, ki zagotavljajo naslednje podrobnosti o razširitvi:"
-
-#: C/f-spot.xml:1049(para)
-msgid "Description, which usually covers puprose of the extension"
-msgstr "Opis, ki običajno opiše namen razširitve"
-
-#: C/f-spot.xml:1054(para)
-msgid "Version"
-msgstr "Različica"
-
-#: C/f-spot.xml:1059(para)
-msgid "Author"
-msgstr "Avtor"
-
-#: C/f-spot.xml:1064(para)
-msgid "Dependencies"
-msgstr "Odvisnosti"
-
-#: C/f-spot.xml:1070(para)
-msgid "In the <guilabel>Manage Extensions</guilabel> dialog select the extension package you want to read summary of and click <guibutton>Information</guibutton>."
-msgstr "V pogovornem oknu <guilabel>Upravljanje razširitev</guilabel> izberite paket razširitve katerega opis želite prebrati in kliknite <guibutton>Podrobnosti</guibutton>."
-
-#: C/f-spot.xml:1078(title)
-msgid "Developing extensions"
-msgstr "Razvijanje razširitev"
-
-#: C/f-spot.xml:1080(para)
-msgid "<ulink url=\"http://f-spot.org/Extend_F-Spot\">Extend F-Spot</ulink> document gives instructions on developing your own extensions for F-Spot."
-msgstr "Dokument <ulink url=\"http://f-spot.org/Extend_F-Spot\">razširite F-Spot</ulink> vsebuje navodila za razvijanje vaših lastnih razširitev za F-Spot."
-
-#: C/f-spot.xml:1088(title)
-msgid "Shortcuts"
-msgstr "Bližnjice"
-
-#: C/f-spot.xml:1091(title)
-msgid "Global Shortcuts"
-msgstr "Splošne bližnjice"
-
-#: C/f-spot.xml:1096(entry)
-#: C/f-spot.xml:1205(entry)
-#: C/f-spot.xml:1301(entry)
-#: C/f-spot.xml:1353(entry)
-msgid "Key"
-msgstr "Tipka"
-
-#: C/f-spot.xml:1099(entry)
-#: C/f-spot.xml:1208(entry)
-#: C/f-spot.xml:1304(entry)
-#: C/f-spot.xml:1356(entry)
-msgid "Action"
-msgstr "Dejanje"
-
-#: C/f-spot.xml:1107(keycap)
-msgid "["
-msgstr "["
-
-#: C/f-spot.xml:1109(entry)
-msgid "Rotate the selected photos to the left"
-msgstr "Vrtenje izbranih fotografij levo"
-
-#: C/f-spot.xml:1115(keycap)
-msgid "]"
-msgstr "]"
-
-#: C/f-spot.xml:1117(entry)
-msgid "Rotate the selected photos to the right"
-msgstr "Vrtenje izbranih fotografij desno"
-
-#: C/f-spot.xml:1123(keycap)
-#: C/f-spot.xml:1131(keycap)
-msgid "Del"
-msgstr "Del"
-
-#: C/f-spot.xml:1125(entry)
-msgid "Remove selected photos from F-Spot's catalogue"
-msgstr "Odstrani izbrane fotografije iz kataloga F-Spot"
-
-#: C/f-spot.xml:1131(keycap)
-#: C/f-spot.xml:1224(keycap)
-#: C/f-spot.xml:1258(keycap)
-#: C/f-spot.xml:1267(keycap)
-#: C/f-spot.xml:1284(keycap)
-#: C/f-spot.xml:1446(keycap)
-msgid "Shift"
-msgstr "Dvigalka"
-
-#: C/f-spot.xml:1133(entry)
-msgid "Delete selected photos permanently from the drive. If possible, they will moved to trash."
-msgstr "Trajno izbriše izbrane fotografije s pogona. V primeru, da je to mogoče, bodo premaknjene v smeti."
-
-#: C/f-spot.xml:1140(keycap)
-msgid "t"
-msgstr "t"
-
-#: C/f-spot.xml:1142(entry)
-msgid "View or edit tags for selected photos"
-msgstr "Ogled ali urejanje oznak za izbrane fotografije"
-
-#: C/f-spot.xml:1148(keycap)
-msgid "F11"
-msgstr "F11"
-
-#: C/f-spot.xml:1150(entry)
-#: C/f-spot.xml:1399(entry)
-msgid "Full screen view"
-msgstr "Celozaslonski pogled"
-
-#: C/f-spot.xml:1156(keycap)
-#: C/f-spot.xml:1164(keycap)
-#: C/f-spot.xml:1172(keycap)
-#: C/f-spot.xml:1180(keycap)
-#: C/f-spot.xml:1216(keycap)
-#: C/f-spot.xml:1224(keycap)
-#: C/f-spot.xml:1242(keycap)
-#: C/f-spot.xml:1267(keycap)
-#: C/f-spot.xml:1320(keycap)
-msgid "Ctrl"
-msgstr "Ctrl"
-
-#: C/f-spot.xml:1156(keycap)
-msgid "I"
-msgstr "I"
-
-#: C/f-spot.xml:1158(entry)
-msgid "Displays information about the photo"
-msgstr "Prikaz podrobnosti o fotografiji"
-
-#: C/f-spot.xml:1164(keycap)
-msgid "Equals"
-msgstr "Je enako"
-
-#: C/f-spot.xml:1166(entry)
-msgid "Zoom-in"
-msgstr "Približanje"
-
-#: C/f-spot.xml:1172(keycap)
-msgid "Minus"
-msgstr "Minus"
-
-#: C/f-spot.xml:1174(entry)
-msgid "Zoom-out"
-msgstr "Oddaljevanje"
-
-#: C/f-spot.xml:1180(keycap)
-#: C/f-spot.xml:1372(keycap)
-msgid "N"
-msgstr "N"
-
-#: C/f-spot.xml:1182(entry)
-msgid "Import photos"
-msgstr "Uvoz fotografij"
-
-#: C/f-spot.xml:1188(keycap)
-msgid "Alt"
-msgstr "Alt"
-
-#: C/f-spot.xml:1188(keycap)
-msgid "0-5"
-msgstr "0-5"
-
-#: C/f-spot.xml:1190(entry)
-msgid "Alt plus a number from 0 to 5 rate the selected picture(s)"
-msgstr "Alt in število od 0 do 5 za oceno izbran-e/ih slik(e)"
-
-#: C/f-spot.xml:1200(title)
-msgid "Browse Mode Shortcuts"
-msgstr "Bližnjice načina brskanja"
-
-#: C/f-spot.xml:1216(keycap)
-#: C/f-spot.xml:1225(keycap)
-msgid "A"
-msgstr "A"
-
-#: C/f-spot.xml:1218(entry)
-msgid "Select all"
-msgstr "Izbor vsega"
-
-#: C/f-spot.xml:1227(entry)
-msgid "Unselect all"
-msgstr "Preklic izbora"
-
-#: C/f-spot.xml:1233(keycap)
-#: C/f-spot.xml:1380(keycap)
-msgid "H"
-msgstr "H"
-
-#: C/f-spot.xml:1233(keycap)
-#: C/f-spot.xml:1380(keycap)
-msgid "J"
-msgstr "J"
-
-#: C/f-spot.xml:1234(keycap)
-#: C/f-spot.xml:1381(keycap)
-msgid "K"
-msgstr "K"
-
-#: C/f-spot.xml:1234(keycap)
-#: C/f-spot.xml:1381(keycap)
-msgid "L"
-msgstr "L"
-
-#: C/f-spot.xml:1232(entry)
-#: C/f-spot.xml:1379(entry)
-msgid "Arrow keys or <placeholder-1/>, <placeholder-2/>, <placeholder-3/>, <placeholder-4/>"
-msgstr "Tipke puščice ali <placeholder-1/>, <placeholder-2/>, <placeholder-3/>, <placeholder-4/>"
-
-#: C/f-spot.xml:1236(entry)
-msgid "Move focus"
-msgstr "Premakne žarišče"
-
-#: C/f-spot.xml:1241(entry)
-msgid "<placeholder-1/>-Arrow key"
-msgstr "<placeholder-1/>-Tipka puščice"
-
-#: C/f-spot.xml:1244(entry)
-msgid "Move the focus without changing the selection"
-msgstr "Premakne žarišče brez spremembe izbora"
-
-#: C/f-spot.xml:1250(keycap)
-#: C/f-spot.xml:1372(keycap)
-msgid "Spacebar"
-msgstr "Preslednica"
-
-#: C/f-spot.xml:1252(entry)
-msgid "Select or unselect the focused photo"
-msgstr "Izbere ali prekliče izbor fotografije v žarišču"
-
-#: C/f-spot.xml:1259(keycap)
-msgid "Arrow key"
-msgstr "Tipka puščice"
-
-#: C/f-spot.xml:1261(entry)
-msgid "Change the photo selection"
-msgstr "Sprememba izbire fotografije"
-
-#: C/f-spot.xml:1268(keycap)
-msgid "Left arrow or Right arrow"
-msgstr "Leva puščica ali desna puščica"
-
-#: C/f-spot.xml:1270(entry)
-msgid "Add/Remove all photos in the row, in the direction pressed, to the selection"
-msgstr "Doda/odstrani vse fotografije v vrstici v izbrani smeri do izbora"
-
-#: C/f-spot.xml:1276(keycap)
-#: C/f-spot.xml:1284(keycap)
-#: C/f-spot.xml:1437(keycap)
-msgid "V"
-msgstr "V"
-
-#: C/f-spot.xml:1278(entry)
-msgid "Pops up a larger preview of the picture pointed by the mouse"
-msgstr "Pojavi večji predogled slike pokazane z miško"
-
-#: C/f-spot.xml:1286(entry)
-msgid "Pops up a larger preview and a color histogram of the picture pointed by the mouse"
-msgstr "Pojavi večji predogled in barvni histogram slike pokazane z miško"
-
-#: C/f-spot.xml:1296(title)
-msgid "Tag Shortcuts"
-msgstr "Bližnjice oznak"
-
-#: C/f-spot.xml:1312(keycap)
-msgid "F2"
-msgstr "F2"
-
-#: C/f-spot.xml:1314(entry)
-msgid "Rename selected tag"
-msgstr "Preimenovanje izbranih oznak"
-
-#: C/f-spot.xml:1320(keycap)
-msgid "T"
-msgstr "T"
-
-#: C/f-spot.xml:1322(entry)
-msgid "Add tags to selected photos"
-msgstr "Dodajanje oznak izbranim fotografijam"
-
-#: C/f-spot.xml:1327(entry)
-#: C/f-spot.xml:1335(entry)
-msgid "n/a"
-msgstr "n/a"
-
-#: C/f-spot.xml:1330(entry)
-msgid "Drag and drop tags to move them"
-msgstr "Za premikanje oznak jih povlecite in spustite"
-
-#: C/f-spot.xml:1338(entry)
-msgid "Type a tag's name to jump to it (only works if tag is shown/expanded)"
-msgstr "Vtipkajte ime oznake za skok nanjo (deluje le, če je oznaka prikazana/razširjena)"
-
-#: C/f-spot.xml:1348(title)
-msgid "Edit Mode Shortcuts"
-msgstr "Bližnjice načina urejanja"
-
-#: C/f-spot.xml:1364(keycap)
-msgid "Page Up"
-msgstr "Stran navzgor"
-
-#: C/f-spot.xml:1364(keycap)
-msgid "Backspace"
-msgstr "Povratna tipka"
-
-#: C/f-spot.xml:1364(keycap)
-msgid "B"
-msgstr "B"
-
-#: C/f-spot.xml:1363(entry)
-#: C/f-spot.xml:1371(entry)
-msgid "<placeholder-1/>, <placeholder-2/>, <placeholder-3/>"
-msgstr "<placeholder-1/>, <placeholder-2/>, <placeholder-3/>"
-
-#: C/f-spot.xml:1366(entry)
-msgid "Go to Previous Photo"
-msgstr "Pojdi na predhodno fotografijo"
-
-#: C/f-spot.xml:1372(keycap)
-msgid "Page Down"
-msgstr "Stran navzdol"
-
-#: C/f-spot.xml:1374(entry)
-msgid "Go to Next Photo"
-msgstr "Pojdi na naslednjo fotografijo"
-
-#: C/f-spot.xml:1383(entry)
-msgid "Go to Previous/Next photo or move around a zoomed photo"
-msgstr "Gre na predhodno/naslednjo fotografijo ali premakne naokoli povečano fotografijo"
-
-#: C/f-spot.xml:1389(keycap)
-msgid "R"
-msgstr "R"
-
-#: C/f-spot.xml:1391(entry)
-msgid "Go to a random photo"
-msgstr "Pojdi na naključno fotografijo"
-
-#: C/f-spot.xml:1397(keycap)
-msgid "f"
-msgstr "f"
-
-#: C/f-spot.xml:1405(keycap)
-msgid "0"
-msgstr "0"
-
-#: C/f-spot.xml:1407(entry)
-msgid "Fit the image to the screen"
-msgstr "Prilagajanje slike zaslonu"
-
-#: C/f-spot.xml:1413(keycap)
-msgid "1"
-msgstr "1"
-
-#: C/f-spot.xml:1415(entry)
-msgid "Zoom Factor to 1.0 (1 screen pixel per image pixel)"
-msgstr "Faktor povečave 1.0 (1 točka zaslona na točko slike)"
-
-#: C/f-spot.xml:1421(keycap)
-msgid "2"
-msgstr "2"
-
-#: C/f-spot.xml:1423(entry)
-msgid "Zoom Factor to 2.0 (4 screen pixels per image pixel)"
-msgstr "Faktor povečave na 2.0 (4 točke zaslona na točko slike)"
-
-#: C/f-spot.xml:1429(keycap)
-msgid "Escape"
-msgstr "Ubežna tipka"
-
-#: C/f-spot.xml:1431(entry)
-msgid "Returns to Browser mode"
-msgstr "Vrne v način brskalnika"
-
-#: C/f-spot.xml:1441(keycap)
-msgid "v"
-msgstr "v"
-
-#: C/f-spot.xml:1439(entry)
-msgid "Examine photo with magnifying glass (Loupe). Doubleclick on the Loupe, or type <placeholder-1/> again to close it."
-msgstr "Preučevanje fotografije s povečevalnim steklom. Za zaprtje povečevalnega stekla kliknite nanj ali vtipkajte <placeholder-1/>."
-
-#: C/f-spot.xml:1445(entry)
-msgid "<placeholder-1/>-Mousewheel"
-msgstr "<placeholder-1/>-Miškino kolesce"
-
-#: C/f-spot.xml:1448(entry)
-msgid "Faster filmstrip scrolling"
-msgstr "Hitrejše drsenje filmskega traku"
-
-#: C/f-spot.xml:1454(keycap)
-msgid "i"
-msgstr "i"
-
-#: C/f-spot.xml:1456(entry)
-msgid "Toggle infobox visibility ''(only when in full screen)''"
-msgstr "Preklop vidnosti polja podrobnosti \"(le v celozaslonskem načinu)\""
-
-#. Put one translator per line, in the form of NAME <EMAIL>, YEAR1, YEAR2
-#: C/f-spot.xml:0(None)
-msgid "translator-credits"
-msgstr "Andrej Žnidaršič <andrej.znidarsic at gmail.com>"
-
diff --git a/docs/sv/f-spot.xml b/docs/sv/f-spot.xml
deleted file mode 100644
index 06590be..0000000
--- a/docs/sv/f-spot.xml
+++ /dev/null
@@ -1,1246 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!DOCTYPE book PUBLIC "-//OASIS//DTD DocBook XML 4.1.2//EN" "http://www.oasis-open.org/docbook/xml/4.1.2/docbookx.dtd">
-<book id="f-spot" lang="sv">
- <bookinfo>
- <title>Handbok för F-Spot</title>
- <abstract role="description">
- <para>Det här är användarhandboken för F-Spot, en GNOME-hanterare för personliga foton</para>
- </abstract>
- <subtitle>Det här är användarhandboken för F-Spot, en GNOME-hanterare för personliga foton</subtitle>
- <copyright>
- <year>2007-2009</year>
- <holder>Aaron Bockover, Gabriel Burt, Miguel de Icaza, Bengt Thuree</holder>
- </copyright><copyright><year>2007</year><holder>Daniel Nylander (po at danielnylander.se)</holder></copyright>
- <publisher>
- <publishername>Dokumentationsprojekt för GNOME</publishername>
- </publisher>
- <authorgroup>
- <author>
- <firstname>Miguel</firstname>
- <surname>de Icaza</surname>
- </author>
- <author>
- <firstname>Aaron</firstname>
- <surname>Bockover</surname>
- </author>
- <author>
- <firstname>Bengt</firstname>
- <surname>Thuree</surname>
- </author>
- <author>
- <firstname>Gabriel</firstname>
- <surname>Burt</surname>
- </author>
- <author>
- <firstname>Alexandre</firstname>
- <surname>Prokoudine</surname>
- </author>
- <author role="maintainer">
- <firstname>Stephane</firstname>
- <surname>Delcroix</surname>
- </author>
- </authorgroup>
- <!--<include href="legal.xml" xmlns="http://www.w3.org/2001/XInclude"/>-->
- <revhistory>
- <revision>
- <revnumber>0.5</revnumber>
- <date>2008-09-25</date>
- </revision>
- <revision>
- <revnumber>0.4</revnumber>
- <date>2008-09-12</date>
- </revision>
- <revision>
- <revnumber>0.3</revnumber>
- <date>2007-07-26</date>
- </revision>
- </revhistory>
- </bookinfo>
-
- <chapter id="organizing">
- <title>Organisera dina foton</title>
-
- <sect1 id="import">
- <title>Importera</title>
-
- <para>Du kan importera foton från din hårddisk eller din kamera. När du importera dina foton till F-Spot från din kamera kommer de alltid att bli kopierade, vilket innebär att du måste själv tömma ditt kameraminne. Som standard kommer F-Spot att göra en kopia av importerade foton från din hårddisk. Avmarkera alternativet <guilabel>Kopiera</guilabel> på importeringsdialogrutan eller håll nere <keycap>Skift</keycap> när du drar in foton till F-Spot om du inte vill att de ska kopieras från din hårddisk.</para>
-
- <para>
- By default, F-Spot copies your photos to the
- <filename class="directory">~/Photos</filename> folder. You can change
- the folder F-Spot uses in <guilabel>Preferences</guilabel> dialog
- (<menuchoice><guimenu>Edit</guimenu><guimenuitem>Preferences</guimenuitem>
- </menuchoice>). You can also disable physical copying of images to that
- directory and make F-Spot only reference to existing files. For that you
- need to disable checkbox <guilabel>Copy files to the Photos folder</guilabel>.
- </para>
- <para>
- If there is a tiny chance that some of your photos are already imported
- from the chosen source, you can use <guilabel>Detect duplicates</guilabel>
- option. In this case F-Spot will try to find out if exactly this image is
- already present in the database and thus new copy of it should not be
- imported.
- </para>
- <para>Om alla foton som du importerar samtidigt är från en speciell händelse, eller har några andra gemensamma egenskaper, kan du skapa ett tagg för dem så att du enkelt kan hitta dem senare. För att göra det här, följ instruktionerna i <xref linkend="tag"/> för att skapa en ny tagg. Sedan när du importerar dem ska du kryssa i rutan för <guilabel>Fäst tagg</guilabel> och välja den tagg som du skapade.</para>
-
- <tip>
- <para>
- F-Spot uses a database stored at
- <filename>~/.config/f-spot/photos.db</filename>. Note, to access it, use
- the sqlite3 command. You can also manually specify path to a database by
- running F-Spot with <option>-b</option> option.
- </para>
- </tip>
-
- <para>
- After an import, F-Spot will display the pictures of the latest import
- roll only. Read <xref linkend="enjoying-search"/> to learn how to deal
- with import rolls.
- </para>
- <para>
- You can also import directly from Mozilla
- <ulink url="http://www.mozilla.com/en-US/firefox/">Firefox</ulink> and
- <ulink url="http://www.mozilla.com/en-US/thunderbird/">Thunderbird</ulink> using
- <ulink url="https://addons.mozilla.org/en-US/firefox/addon/7091">Firefox</ulink>
- and <ulink url="https://addons.mozilla.org/en-US/thunderbird/addon/7011">Thunderbird</ulink>
- F-Spot importer extensions written by
- <ulink url="http://personalpages.tds.net/~cdovel/">Pizzach</ulink>.
- </para>
- </sect1>
-
- <sect1 id="edit">
- <title>Redigera</title>
-
- <para>Om du dubbelklickar eller trycker på Enter på en bild, kommer du att gå in i redigeringsläget, där du kan ta bort röda ögon, beskära bilden och justera ljusstyrkan och färger.</para>
-
- <sect2 id="edit-versions">
- <title>Versioner</title>
-
- <para>
- When you edit your photos, a new copy (called a version) is created,
- so your original is never altered. After your first edit to a photo, subsequent
- edits will modify the same version. If you want to create multiple versions
- of your photo, perhaps with different cropping or coloring, you can do so
- via the <menuchoice><guimenu>File</guimenu>
- <guimenuitem>Create new version</guimenuitem></menuchoice> option.
- </para>
- </sect2>
-
- <sect2 id="edit-crop">
- <title>Beskär</title>
-
- <para>
- Cropping an image is a great way to improve the quality of a photograph by
- change how it is framed. You crop a photo by selecting the part of the photo
- you want to keep. If you want your photo to be the exact dimensions necessary
- for a certain print size, you can constrain the kind of selection F-Spot will allow
- you to draw by choosing the appropriate size from the constraint drop down.
- See the <xref linkend="edit-remove-red-eye"/> below for details on making
- a selection on your photo.
- </para>
- <figure>
- <title>Beskäringsverktyg</title>
- <mediaobject>
- <imageobject>
- <imagedata fileref="figures/f-spot-crop.png"/>
- </imageobject>
- </mediaobject>
- </figure>
- <para>När du har gjort din markering för beskäring måste du klicka på beskäringsknappen under bilden för att färdigställa beskäringen. Om du arbetar med originalfotot kommer beskäringen att skapa en ny version av ditt foto.</para>
- </sect2>
-
- <sect2 id="edit-straighten">
- <title>Straighten</title>
-
- <para>
- Straighten effect is a tool to level a photo, quite helpful for landscapes
- taken without a tripod, when (imaginary) line of horizon is not at 0°.
- This tool rotates an image by a specified angle and automagically crops the
- resulted image, so that you always see a perfect rectangle.
- </para>
- <figure>
- <title>Straighten tool</title>
- <mediaobject>
- <imageobject>
- <imagedata fileref="figures/f-spot-straighten.png"/>
- </imageobject>
- </mediaobject>
- </figure>
- </sect2>
-
- <sect2 id="edit-adjust-colors">
- <title>Justera färger</title>
-
- <para>
- To adjust the brightness, contrast, and colors of a photo, first click
- the <guibutton>Adjust the photo colors</guibutton> icon to open the
- adjustment dialog. Change then some settings and save them with
- <guibutton>OK</guibutton>.
- </para>
- <figure>
- <title>Adjust Colors tool</title>
- <mediaobject>
- <imageobject>
- <imagedata fileref="figures/f-spot-adjust-colors.png"/>
- </imageobject>
- </mediaobject>
- </figure>
- </sect2>
-
- <sect2 id="edit-auto-color">
- <title>AutoColor</title>
-
- <para>
- This effect automatically adjusts color levels to make a pretty balanced
- picture color-wise. It serves best for pictures taken with automatical
- white balance, when camera didn't manage to do the job well.
- </para>
- <figure>
- <title>AutoColor</title>
- <mediaobject>
- <imageobject>
- <imagedata fileref="figures/f-spot-autocolor.png"/>
- </imageobject>
- </mediaobject>
- </figure>
- </sect2>
-
- <sect2 id="edit-desaturate">
- <title>Desaturate</title>
-
- <para>
- To make a colorful photo a black and white one, open a photo of choice
- and press <guibutton>Desaturate</guibutton> button.
- </para>
- <figure>
- <title>Desaturation tool</title>
- <mediaobject>
- <imageobject>
- <imagedata fileref="figures/f-spot-desaturate.png"/>
- </imageobject>
- </mediaobject>
- </figure>
- </sect2>
-
- <sect2 id="edit-sepia">
- <title>Sepia</title>
-
- <para>
- To make a colorful photo look like an old-style picture in sepia tones,
- open a photo of choice and press <guibutton>Sepia</guibutton> button.
- </para>
- <figure>
- <title>Desaturation tool</title>
- <mediaobject>
- <imageobject>
- <imagedata fileref="figures/f-spot-sepia.png"/>
- </imageobject>
- </mediaobject>
- </figure>
- </sect2>
-
- <sect2 id="edit-remove-red-eye">
- <title>Ta bort röda ögon</title>
-
- <para>
- To remove redeye from a photo, you need to select a zone containing
- the eyes. You may want to zoom in on the image to accurately select
- the eyes in the photo. You should be able to correct both eyes on the
- same person in one shot, or even the eyes from multiple people at once.
- If this doesn't work for you, or the selected zone contains some vivid
- red parts (lips, ...) you'll probably have to correct one red eye at a time.
- </para>
- <para>För att markera, klicka för att skapa en rektangel som kommer att bli din markering och dra din mus diagonalt och släpp den sedan. Du kan ändra storleken genom att dra i rektangelns kanter och du kan flytta den genom att klicka i mitten av den och dra den till den plats du önskar.</para>
- <para>
- Once you have selected a zone, you can remove the red from it by
- clicking the red-eye button beneath the photo.
- </para>
- <figure>
- <title>Red-Eye tool</title>
- <mediaobject>
- <imageobject>
- <imagedata fileref="figures/f-spot-red-eye.png"/>
- </imageobject>
- </mediaobject>
- </figure>
- <tip>
- <para>
- You can change the threshold for redeyes detection by changing
- the gconf key
- <filename class="directory">/apps/f-spot/edit/redeye_threshold</filename>.
- </para>
- </tip>
- </sect2>
-
- <sect2 id="edit-soft-focus">
- <title>Soft Focus</title>
-
- <para>
- In photography sharpening one region of a picture, while blurring
- all the rest, is a way to make an emphasis and grab attention.
- It is achieved by using a lens that allows shooting with a short
- distance in front of and beyond the subject that appears to be in
- focus. Soft focus effect is a way to emulate such a lens.
- </para>
- <figure>
- <title>Soft Focus tool</title>
- <mediaobject>
- <imageobject>
- <imagedata fileref="figures/f-spot-soft-focus.png"/>
- </imageobject>
- </mediaobject>
- </figure>
- <para>
- Click to choose central point of the area you want to be in focus
- and adjust amount of blurring, then click <guibutton>OK</guibutton>.
- </para>
- </sect2>
-
- <sect2 id="edit-sharpen">
- <title>Sharpen</title>
-
- <para>
- Out-of-focus photographs and most digitized images often need a
- sharpness correction. The Unsharp Mask effect sharpens edges of
- the elements without increasing noise or blemish. To sharpen a
- photo choose <menuchoice><guimenu>Edit</guimenu>
- <guimenuitem>Sharpen...</guimenuitem></menuchoice> and specify the
- following values:
- </para>
-
- <itemizedlist>
- <listitem>
- <para>
- <parameter class="option">Amount</parameter> — strength of sharpening.
- </para>
- </listitem>
- <listitem>
- <para>
- <parameter class="option">Radius</parameter> — how many pixels on either
- side of an edge will be affected by sharpening. High resolution images
- allow higher radius.
- </para>
- </listitem>
- <listitem>
- <para>
- <parameter class="option">Threshold</parameter> — the minimum difference
- in pixel values that indicates an edge where sharpen must be applied.
- This helps avoiding creation of blemishes in face, sky or water surface.
- </para>
- </listitem>
- </itemizedlist>
- </sect2>
-
- <sect2 id="edit-describe">
- <title>Beskriv</title>
-
- <para>Du kan även ange en beskrivning av bilden genom att klicka på textinmatningsrutan under bilden.</para>
- <para>När du har gjort din markering för beskäring måste du klicka på beskäringsknappen under bilden för att färdigställa beskäringen. Om du arbetar med originalfotot kommer beskäringen att skapa en ny version av ditt foto.</para>
- </sect2>
-
- <sect2 id="edit-adjust-time">
- <title>Justera tid</title>
-
- <para>
- In both 'browse' or 'edit' modes, you can adjust the time of one
- or multiple pictures (<menuchoice><guimenu>Edit</guimenu>
- <guimenuitem>Adjust Time</guimenuitem></menuchoice>). Adjusting
- the time of multiple pictures at once helps you shift all an import
- roll if, e.g. the time on your camera is badly set or if you forgot
- to change it according to DST.
- </para>
- </sect2>
- </sect1>
-
- <sect1 id="tag">
- <title>Tagga</title>
- <para>F-Spot låter dig organisera och njuta av dina foton genom att associera dem med olika användaranpassade taggar. En tagg är helt enkelt en etikett. F-Spot levereras med standardtaggar som du kan börja använda direk; du får fritt ändra dem och lägga till nya. Till exempel, om du vill skapa en tagg för en specifik händelse, kan du skapa en ny tagg med händelsens namn under taggen Händelser.</para>
- <para>Det finns många sätt att sätta taggar på foton:</para>
- <itemizedlist>
- <listitem>
- <para>dra och släpp foton på taggen</para>
- </listitem>
- <listitem>
- <para>dra och släpp taggen på foton</para>
- </listitem>
- <listitem>
- <para>via fotots högerklicksmeny</para>
- </listitem>
- <listitem>
- <para>via menyerna Taggar och Redigera</para>
- </listitem>
- <listitem>
- <para>
- by typing them in. Press <keycap>t</keycap> to pop up the tag
- entry bar. Here you can enter the tags, separated by commas.
- </para>
- <para>
- You can also use auto-completion in this entry bar: After
- entering the beginning of a tag name, press
- <keycap>Tab</keycap> to see the first possible completion. You can
- cycle between other possible completions by pressing
- <keycap>Tab</keycap> again, and backwards with
- <keycombo action="simul"><keycap>Shift</keycap><keycap>Tab</keycap></keycombo>.
- To confirm the suggested completion and enter a new tag, press
- <keycap>,</keycap>. By pressing <keycap>Enter</keycap> you
- leave the tag entry bar, possibly confirming the current
- completion. To abort the auto completion, just keep on typing.
- </para>
- </listitem>
- </itemizedlist>
- <para>Det första fotot som du associerar med en tagg kommer att användas som ikon för den taggen. Du kan alltid redigera namnet för en tagg, föräldratagg och ikon genom att högerklicka på den och välja <guilabel>Redigera tagg</guilabel>.</para>
- <para>Du kan ändra en taggs förälder genom att dra och släppa den där du vill. Du kan även redigera namnet för en tagg genom att välja den och trycka på <keycap>F2</keycap>. Till sist, om du har taggträdswidgetn fokuserad (t.ex. du har precis klickat på en tagg), kan du börja skriva in namnet på en tagg, och alla utfällda taggar i listan kommer att sökas igenom och du kommer att hoppa fram till de som matchas.</para>
-
- <para>
- You can also change size of tag icons in the sidebar or even make tag
- icons invisible by selecting preferred option from <menuchoice>
- <guimenu>View</guimenu><guimenuitem>Tag Icons</guimenuitem></menuchoice>
- menu.
- </para>
-
- <tip>
- <para>
- F-Spot can write tags as metadata fields into JPEG files. Tags for
- various RAW files, PNG, TIFF, and others are written to F-Spot's
- database. You will have to re-tag these files if you re-import your
- collection.
- </para>
- </tip>
- </sect1>
- </chapter>
-
- <chapter id="enjoying">
- <title>Njut av dina foton</title>
- <sect1 id="enjoying-browse">
- <title>Bläddra</title>
- <para>Du kan använda draglistwidgeten för att bläddra bland dina foton efter månad eller efter katalog. För att ändra den här inställningen, gå till <menuchoice><guimenu>Visa</guimenu><guimenuitem>Ordna efter</guimenuitem></menuchoice>.</para>
- </sect1>
- <sect1 id="enjoying-search">
- <title>Sök</title>
-
- <para>
- F-Spot uses search filters to help you better define search criteria.
- </para>
-
- <sect2 id="enjoying-search-tags">
- <title>Taggar</title>
-
- <para>Du kan starta en sökning genom att dubbelklicka eller aktivera en tagg från tagglistan. Alternativt kan du visa sökraden med <menuchoice><guimenu>Sök</guimenu><guimenuitem>Visa sökrad</guimenuitem></menuchoice>. När sökraden visas kan du dra taggar från taggvyn till sökraden.</para>
- <para>För att hitta foton som är taggade med två olika taggar, aktivera den första i taggvyn eller dra den till sökraden, dra sedan den andra taggen och släpp den ovanpå den första taggen. Du kan också högerklicka på den andra taggen i taggvyn, eller använda menyn <guimenu>Sök</guimenu> och välja <guimenuitem>Sök med...</guimenuitem> och välja den första taggen (eller grupp av taggar).</para>
- <para>Du kan dra en taggikon runt på sökraden för att ändra från att hitta den och en annan tagg för att hitta den eller en annan tag.</para>
- <para>Du kan söka efter foton som inte har en specifik tagg genom att dubbelklicka på en tagg i sökraden. Alternativt kan du högerklicka på ett tagg i sökraden och välja <guimenuitem>Undanta</guimenuitem>.</para>
- <para>För att ta bort en tagg från sökningen, dra bort den från sökraden, eller högerklicka och välj <guimenuitem>Ta bort</guimenuitem>.</para>
- <para>Som standard kommer inte foton taggade som <emphasis>Dolda</emphasis> att visas. Du måste uttryckligen inkludera taggen <emphasis>Dold</emphasis> i din sökning för att visa sådan foton.</para>
- </sect2>
-
- <sect2 id="enjoying-search-import-rolls">
- <title>Importera rullar</title>
- <para>
- F-Spot remembers what pictures were imported every now and then. Use
- <menuchoice><guimenu>Find</guimenu><guisubmenu>Import Roll</guisubmenu>
- <guimenuitem>Last import roll</guimenuitem></menuchoice> to limit search
- to last importing session or use <menuchoice><guimenu>Find</guimenu>
- <guisubmenu>Import Roll</guisubmenu><guimenuitem>Select Import Rolls...</guimenuitem>
- </menuchoice> to make a finer selection of imported photos:
- </para>
- <itemizedlist>
- <listitem>
- <para>
- <parameter class="option">At</parameter> — to select photos from a particular importing session
- </para>
- </listitem>
- <listitem>
- <para>
- <parameter class="option">After</parameter> — to select all photos imported begining with a particular importing session
- </para>
- </listitem>
- <listitem>
- <para>
- <parameter class="option">Between</parameter> — to select all photos imported between two particular importing sessions
- </para>
- </listitem>
- </itemizedlist>
- <para>
- Every time you change settings of the filter, the amount of selected photos
- will appear in the bottom part of the dialog.
- </para>
- <para>
- When you apply Import Roll filter, in the Find bar you will see
- <guilabel>Find: Import Roll</guilabel>. Now you can add some other
- filter to finetune your selection.
- </para>
- <para>
- If you don't need the Import Roll filter anymore, choose <menuchoice>
- <guimenu>Find</guimenu><guisubmenu>Import Roll</guisubmenu>
- <guimenuitem>Clear roll filter</guimenuitem></menuchoice> to remove
- Import Roll from search criteria. You can also click the close button
- (<guibutton>X</guibutton>) of the search bar to discard all the current
- search options.
- </para>
- <tip>
- <para>
- The number of displayed rolls in the dialog is defined by the gconf key
- <filename class="directory">/apps/f-spot/import/gui_roll_history</filename>.
- Default value is 10.
- </para>
- </tip>
- </sect2>
-
- <sect2 id="enjoying-search-type-to-find">
- <title>Type-to-find</title>
- <para>Det finns även en skriv-in-för-att-söka-funktion. Tryck på <keycap>/</keycap> för att öppna den. Den kan inte användas samtidigt som sökraden. Du kan skriva in sökfrågor som "TaggA and (TaggB or (TaggC and TaggD))". F-Spot kommer när som helst att uppdatera din sökning om det känner igen det som du har skrivit som en giltig sökfråga. Operatorn <emphasis>not</emphasis> stöds ännu inte.</para>
-
- <para>
- This function will also search for the typed text into photos comments and filename.
- </para>
- </sect2>
- </sect1>
-
- <sect1 id="enjoying-fullscreen-mode-and-slideshows">
- <title>Helskärmsläge och bildspel</title>
- <para>Du kan visa dina foton i helskärmsläget, för att inte bli störd av andra saker på skärmen samt få en större visningsyta. Du kontrollerar när nästa foto ska visas eller om du vill gå tillbaka till den föregående. Gå in i helskärmsläget genom att trycka på <keycap>F11</keycap> när som helst eller genom att trycka på knappn i verktygsraden.</para>
- <figure>
- <title>Helskärmsläge</title>
- <mediaobject>
- <imageobject>
- <imagedata fileref="figures/f-spot-fullscreen.png"/>
- </imageobject>
- </mediaobject>
- </figure>
- <para>I bildspelsläget kan du sitta lugnt och visa dina foton automatiskt. Du kan starta ett bildspel genom att trycka på knappen i verktygsraden.</para>
- <figure>
- <title>Bildspel</title>
- <mediaobject>
- <imageobject>
- <imagedata fileref="figures/f-spot-slideshow.png"/>
- </imageobject>
- </mediaobject>
- </figure>
- </sect1>
- </chapter>
-
- <chapter id="sharing">
- <title>Dela dina foton</title>
-
- <abstract>
- <para>Det finns flera sätt att dela dina foton med hjälp av F-Spot. Alla av de följande metoderna kommer endast att dela ut de foton som du har markerat.</para>
- </abstract>
-
- <sect1 id="sharing-e-mail">
- <title>E-post</title>
- <para>Skicka din foton via e-post direkt från F-Spot med menyn <menuchoice><guimenu>Arkiv</guimenu><guimenuitem>Skicka e-post</guimenuitem></menuchoice>.</para>
- <note>
- <title>Note 1</title>
- <para>
- The email program used for this is defined at the GNOME level.
- You can change the default e-mailer for your user using the
- <application>Preferred Applications</application> tool in
- <menuchoice><guimenu>System</guimenu>
- <guisubmenu>Preferences</guisubmenu></menuchoice>.
- </para>
- </note>
- <note>
- <title>Note 2</title>
- <para>
- If some of the photos you'd like to send by email are in a format
- that F-Spot can't write (e.g. RAW images), the size selection dialog
- will become insensitive and the originals will be sent.
- </para>
- </note>
- <tip>
- <para>
- If you're sending resized pictures, F-Spot will keep the modified versions
- somewhere in the <filename class="directory">/tmp</filename> directory for
- 30 seconds. It's not an issue with evolution, which makes it's own local
- copy of the attachments, but could be a bit shorter if you're using Thunderbird.
- You can change the delay by editing the gconf key
- <filename class="directory">/apps/f-spot/export/email/delete_timeout_seconds</filename>.
- </para>
- </tip>
- </sect1>
-
- <sect1 id="sharing-print">
- <title>Skriv ut</title>
- <para>Skriv ut din foton med menyn <menuchoice><guimenu>Arkiv</guimenu><guimenuitem>Skriv ut</guimenuitem></menuchoice>.</para>
- </sect1>
-
- <sect1 id="sharing-burn-to-cd">
- <title>Bränn till cd-skiva</title>
- <para>
- Burn your photos to CD or DVD with the <menuchoice><guimenu>File</guimenu>
- <guisubmenu>Export</guisubmenu><guimenuitem>Export to CD</guimenuitem>
- </menuchoice> menu.
- </para>
- </sect1>
-
- <sect1 id="website-gallery-folder">
- <title>Generera ett webbplatsgalleri eller -mapp</title>
- <para>Funktionen <menuchoice><guimenu>Arkiv</guimenu><guimenuitem>Exportera</guimenuitem><guimenuitem>Exportera till mapp</guimenuitem></menuchoice> erbjuder dig tre sätt att exportera dina bilder på.</para>
- <itemizedlist>
- <listitem>
- <para><guilabel>Använd original</guilabel> exporterar dina foton till att användas med Jakub Steiners fria programvara <ulink url="http://jimmac.musichall.cz/original.php"> Original Photo Gallery</ulink>. Om du är osäker på det här alternativet är det kanske inte något för dig.</para>
- </listitem>
- <listitem>
- <para><guilabel>Använd statiska HTML-filer</guilabel> exporterar dina foton till en interaktiv webbplats, färdiga för dig att skicka upp.</para>
- </listitem>
- <listitem>
- <para><guilabel>Vanliga filer</guilabel> exporterar dina bilder som filer inne i kataloger, utan att lägga dem i ett galleri.</para>
- </listitem>
- </itemizedlist>
- </sect1>
-
- <sect1 id="sharing-flickr-or-php-gallery">
- <title>Posta till dina gallerier på nätet</title>
- <para>
- If you use Flickr, SmugMug, 23hq, Tabblo, Facebook, Zooomr or Picasa Web Album, you can post your files
- directly from F-Spot with the <menuchoice><guimenu>File</guimenu>
- <guisubmenu>Export</guisubmenu></menuchoice> menu, choosing corresponding submenu item.
- </para>
- <para>Om du använder PHP-programvaran känd som <ulink url="http://gallery.sourceforge.net/"> Gallery</ulink>, kan du posta dina foton till ditt befintliga album med menyn <menuchoice><guimenu>Arkiv</guimenu><guimenuitem>Exportera</guimenuitem><guimenuitem>Exportera till webbgalleri</guimenuitem></menuchoice>. Du måste först aktivera fjärrmodulen i din installation av Gallery.</para>
- <note>
- <title>Note for Gallery 2.2 users</title>
- <para>
- The Remote plugin for Gallery should be 1.0.8 or newer.
- </para>
- </note>
- <para>
- <ulink url="http://pennave.sourceforge.net">PennAve</ulink> is a Python
- web-application that directly uses F-Spot's database to present a dynamic
- gallery of your photos and tags.
- </para>
- <para>
- <ulink url="http://www.conduit-project.org">Conduit</ulink> is an application
- that can sync photos that have a particular tag with your Flickr or Picasa
- Web Album web storage.
- </para>
- </sect1>
- </chapter>
-
- <chapter id="cms">
- <title>Color management</title>
-
- <sect1 id="cms-what-is-cms">
- <title>What's color management</title>
-
- <para>
- When you capture a photo and look at it on a display, it looks different than
- on a camera's preview display or on any other display. It will also look
- different when you print it. This is because every device has unique color
- reproduction capabilities.
- </para>
-
- <para>
- Color management system (CMS) is a tool to achieve reliable color reproduction
- for both display and output (e.g. a printer). A CMS relies on color profiles
- to map original colors to the color that a device can reproduce so that colors
- will appear the same way everywhere — on a computer LCD monitor, on a print
- from your local photolab etc.
- </para>
- </sect1>
-
- <sect1 id="cms-what-is-icc-profile">
- <title>What's a color profile</title>
-
- <para>
- A color profile is a file with either .icc (thus its is often called an ICC
- profile) or .icm extension that describes how device's colors correspond to a
- universal description of colors.
- </para>
-
- <para>
- There are several types of profiles:
- </para>
-
- <itemizedlist>
- <listitem>
- <para>
- Input device profile. It's profile for a camera or a profile that an
- application like XSane embeds into a scanned image.
- </para>
- </listitem>
- <listitem>
- <para>
- Working space profile. It's a profile that describes color space in
- which all operations are done inside an application. Usually very wide
- gamut profiles like AdobeRGB1998 or ProPhotoRGB are used for that.
- </para>
- </listitem>
- <listitem>
- <para>
- Display profile. It's a profile for a monitor.
- </para>
- </listitem>
- <listitem>
- <para>
- Output profile. This is usually a profile for you printer.
- </para>
- </listitem>
- </itemizedlist>
-
- <para>
- Currently F-Spot allows setting only display and output profiles.
- All color operations are done in sRGB color space.
- </para>
- </sect1>
-
- <sect1 id="cms-how-to-get-icc-profile">
- <title>How to get my screen/printer color profile </title>
-
- <para>
- There are few ways to get a color profile.
- </para>
-
- <sect2 id="cms-icc-from-cd-or-internet">
- <title> From CD or Internet </title>
-
- <para>
- Many hardware manufacturers put color profiles into CD in the bundle.
- If you have one (from monitor or printer), you can use it. Or you can
- download it from the Internet (usually, from support section of the
- manufacturer's web site). Some camera manufacturers (Nikon, Canon)
- also provide ICC profiles.
- </para>
- </sect2>
-
- <sect2 id="cms-icc-from-calibrating-and-profiling">
- <title>Calibrating and profiling</title>
-
- <para>
- Best results can be achieved by calibrating and profiling devices with
- a measurement device. It is not so difficult, but it means that you need
- a spectrophotometer to do all measurements and create an ICC profile.
- </para>
-
- <para>
- If you are on Windows or Mac OS X, you can use manufacturer's software
- coming with a spectrophotometer. On Linux you will have to use either
- <ulink url="http://www.argyllcms.com">Argyll</ulink>, which is a set of
- versatile command line tools, or
- <ulink url="http://lprof.sourceforge.net/">LProf</ulink>, which has a
- graphical user interface.
- </para>
- <para>
- Please refer to documentation of third party hardware and software
- vendors for details.
- </para>
- </sect2>
-
- <sect2 id="cms-icc-from-embedding">
- <title>Embedding</title>
-
- <para>
- Image formats themselves (such as TIFF, JPEG, PNG...) may contain embedded
- color profiles. If color management is enabled, F-Spot looks for such
- embedded profiles and takes them into consideration.
- </para>
- </sect2>
- </sect1>
-
- <sect1 id="cms-how-to-use">
- <title>How to use color management in F-Spot</title>
-
- <para>
- Color management in F-Spot can use only RGB profiles at this time
- (and you can't see other profiles in the F-Spot).
- </para>
-
- <itemizedlist>
- <listitem>
- <para>
- Copy your color profiles into the
- <filename class="directory">/usr/share/color/icc</filename> or
- <filename class="directory">/usr/local/share/color/icc</filename>
- directory.
- </para>
- </listitem>
- <listitem>
- <para>
- Enable the color management with the <menuchoice>
- <guimenu>Edit</guimenu><guimenuitem>Preferences</guimenuitem>
- </menuchoice> menu.
- </para>
- </listitem>
- <listitem>
- <para>
- Select <guilabel>Display</guilabel> and <guilabel>Output</guilabel>
- profiles.
- </para>
- </listitem>
- </itemizedlist>
-
- <tip>
- <para>
- You can use <ulink url="http://burtonini.com/blog/computers/xicc">xicc</ulink>
- to load ICC profile to display and use the loaded profile from F-Spot.
- Just mark the checkbox <guilabel>Try to use the system display
- profile</guilabel>.
- </para>
- </tip>
- </sect1>
- </chapter>
-
- <chapter id="extend">
- <title>Utökad funktionalitet</title>
-
- <sect1 id="extend-what-extensions-are">
- <title>Vad är tillägg</title>
-
- <para>
- F-Spot extensions are means to add new functionality to the application.
- F-Spot supports two types of extension: exporters (which allow exporting
- photos to new web services or data storages) and tools (which allow new
- ways of color correction, duplicate photos finders etc.). Extensions are
- distributed in form of extension packages.
- </para>
- <para>
- In the best traditions of not reinventing the wheel extensions can use other
- extensions, which means that one extension cannot work, if another extension
- is not installed. This concept of dependance actually means that
- </para>
- <itemizedlist>
- <listitem>
- <para>
- you cannot install an extension, if the extension it depends on, is not present in the system
- </para>
- </listitem>
- <listitem>
- <para>
- you cannot remove an extension on which some other extension depends
- </para>
- </listitem>
- </itemizedlist>
- </sect1>
-
- <sect1 id="extend-managing-extensions">
- <title>Hantera tillägg</title>
-
- <para>
- To manage extensions choose <menuchoice><guimenu>Edit</guimenu>
- <guimenuitem>Manage Extensions</guimenuitem></menuchoice> menu item.
- </para>
-
- <sect2 id="extend-managing-extensions-managing-extension-repositories">
- <title>Managing extension repositories</title>
-
- <para>
- Simply put, repositories are extension storages. They can be either network
- or local. To add a new repository click Repositories button, choose type of
- the repository you are about to add and provide either URL or path. If the URL
- or path you specified doesn't contain a description (index) file for extensions,
- a warning message will pop up to tell you that.
- </para>
- <para>
- To remove a repository click <guibutton>Repositories</guibutton> button again,
- choose the repository you are about to delete and click
- <guibutton>Delete</guibutton> button.
- </para>
- </sect2>
-
- <sect2 id="extend-managing-extensions-installing-and-updating-extensions">
- <title>Installera och uppdatera tillägg</title>
-
- <para>
- To install an extension click <guibutton>Install extensions...</guibutton> button.
- In the newly presented dialog
- </para>
- <orderedlist>
- <listitem>
- <para>
- Choose repository to install from all known repositories or just one of
- available repositories.
- </para>
- </listitem>
- <listitem>
- <para>
- Choose, what extension packages you want to see: All, Only new, Only updates.
- </para>
- </listitem>
- <listitem>
- <para>
- Click the <guibutton>Update</guibutton> button to update list of available
- extension packages by given criteria.
- </para>
- </listitem>
- <listitem>
- <para>
- Choose extensions you want to install/update, click <guibutton>Information</guibutton>
- to see summary on selected package, if you want to.
- </para>
- </listitem>
- <listitem>
- <para>
- Click <guibutton>Forward</guibutton> to proceed with installation.
- </para>
- </listitem>
- </orderedlist>
- </sect2>
-
- <sect2 id="extend-managing-extensions-enabling-and-disabling-extensions">
- <title>Aktivera och inaktivera tillägg</title>
-
- <para>
- You might want to temporarily enable or disable a particular extension package,
- for example, if the extension is not stable enough to handle a large amount of
- photos or if menus get crowded with extensions.
- </para>
- <para>
- In the <guilabel>Manage Extensions</guilabel> dialog select the extension
- package and click <guibutton>Enable</guibutton> or <guibutton>Disable</guibutton>.
- </para>
- </sect2>
-
- <sect2 id="extend-managing-extensions-removing-extensions">
- <title>Ta bort tillägg</title>
-
- <para>
- If you don't need an extension you can remove it from the system completely.
- In the <guilabel>Manage Extensions</guilabel> dialog select the extension
- package you want to remove and click <guibutton>Delete</guibutton>.
- </para>
- </sect2>
-
- <sect2 id="extend-managing-extensions-reading-summary-of-extensions">
- <title>Reading summary of extensions</title>
-
- <para>
- Every extension package contains metadata that provides the following information about the extension:
- </para>
-
- <orderedlist>
- <listitem>
- <para>
- Description, which usually covers puprose of the extension
- </para>
- </listitem>
- <listitem>
- <para>Version</para>
- </listitem>
- <listitem>
- <para>Upphovsman</para>
- </listitem>
- <listitem>
- <para>Beroenden</para>
- </listitem>
- </orderedlist>
-
- <para>
- In the <guilabel>Manage Extensions</guilabel> dialog select the extension
- package you want to read summary of and click <guibutton>Information</guibutton>.
- </para>
- </sect2>
- </sect1>
-
- <sect1 id="extend-developing-extensions">
- <title>Utveckla tillägg</title>
-
- <para>
- <ulink url="http://f-spot.org/Extend_F-Spot">Extend F-Spot</ulink> document
- gives instructions on developing your own extensions for F-Spot.
- </para>
- </sect1>
- </chapter>
-
- <chapter id="shortcuts">
- <title>Genvägar</title>
-
- <sect1 id="Global-Shortcuts">
- <title>Globala genvägar</title>
- <informaltable frame="all">
- <tgroup cols="2">
- <thead>
- <row>
- <entry>Tangent</entry>
- <entry>Åtgärd</entry>
- </row>
- </thead>
- <tbody>
- <row>
- <entry>
- <keycap>[</keycap>
- </entry>
- <entry>Rotera markerade foton åt vänster</entry>
- </row>
- <row>
- <entry>
- <keycap>]</keycap>
- </entry>
- <entry>Rotera markerade foton åt höger</entry>
- </row>
- <row>
- <entry>
- <keycap>Del</keycap>
- </entry>
- <entry>
- Remove selected photos from F-Spot's catalogue
- </entry>
- </row>
- <row>
- <entry>
- <keycombo><keycap>Skift</keycap><keycap>Del</keycap></keycombo>
- </entry>
- <entry>
- Delete selected photos permanently from the drive. If possible, they will moved to trash.
- </entry>
- </row>
-
- <row>
- <entry>
- <keycap>t</keycap>
- </entry>
- <entry>Visa eller redigera taggar för markerade foton</entry>
- </row>
- <row>
- <entry>
- <keycap>F11</keycap>
- </entry>
- <entry>Helskärmsvy</entry>
- </row>
- <row>
- <entry>
- <keycombo><keycap>Ctrl</keycap><keycap>I</keycap></keycombo>
- </entry>
- <entry>Visar information om fotot</entry>
- </row>
- <row>
- <entry>
- <keycombo><keycap>Ctrl</keycap><keycap>Lika med</keycap></keycombo>
- </entry>
- <entry>Zooma in</entry>
- </row>
- <row>
- <entry>
- <keycombo><keycap>Ctrl</keycap><keycap>Minus</keycap></keycombo>
- </entry>
- <entry>Zooma ut</entry>
- </row>
- <row>
- <entry>
- <keycombo><keycap>Ctrl</keycap><keycap>N</keycap></keycombo>
- </entry>
- <entry>Importera foton</entry>
- </row>
- <row>
- <entry>
- <keycombo><keycap>Alt</keycap><keycap>0-5</keycap></keycombo>
- </entry>
- <entry>
- Alt plus a number from 0 to 5 rate the selected picture(s)
- </entry>
- </row>
- </tbody>
- </tgroup>
- </informaltable>
- </sect1>
-
- <sect1 id="shortcuts-browse-mode">
- <title>Genvägar i bläddringsläget</title>
- <informaltable frame="all">
- <tgroup cols="2">
- <thead>
- <row>
- <entry>Tangent</entry>
- <entry>Åtgärd</entry>
- </row>
- </thead>
- <tbody>
- <row>
- <entry>
- <keycombo><keycap>Ctrl</keycap><keycap>A</keycap></keycombo>
- </entry>
- <entry>Markera alla</entry>
- </row>
- <row>
- <entry>
- <keycombo><keycap>Ctrl</keycap><keycap>Skift</keycap>
- <keycap>A</keycap></keycombo>
- </entry>
- <entry>Avmarkera alla</entry>
- </row>
- <row>
- <entry>
- Arrow keys or <keycap>H</keycap>, <keycap>J</keycap>,
- <keycap>K</keycap>, <keycap>L</keycap>
- </entry>
- <entry>Flytta fokus</entry>
- </row>
- <row>
- <entry>
- <keycap>Ctrl</keycap>-Arrow key
- </entry>
- <entry>Flytta fokus utan att ändra markeringen</entry>
- </row>
- <row>
- <entry>
- <keycap>Blanksteg</keycap>
- </entry>
- <entry>Markera eller avmarkera det fokuserade fotot</entry>
- </row>
- <row>
- <entry>
- <keycombo><keycap>Skift</keycap>
- <keycap>Arrow key</keycap></keycombo>
- </entry>
- <entry>Ändra fotomarkeringen</entry>
- </row>
- <row>
- <entry>
- <keycombo><keycap>Ctrl</keycap><keycap>Skift</keycap>
- <keycap>Left arrow or Right arrow</keycap></keycombo>
- </entry>
- <entry>Lägg till/Ta bort alla foton i raden, i angiven riktning, till markeringen</entry>
- </row>
- <row>
- <entry>
- <keycap>V</keycap>
- </entry>
- <entry>Visar en större förhandsvisning av bilden som muspekaren pekar på</entry>
- </row>
- <row>
- <entry>
- <keycombo><keycap>Skift</keycap><keycap>V</keycap></keycombo>
- </entry>
- <entry>Visar en större förhandsvisning och ett färghistorgram av bilden som muspekaren pekar på</entry>
- </row>
- </tbody>
- </tgroup>
- </informaltable>
- </sect1>
-
- <sect1 id="shortcuts-tag">
- <title>Taggenvägar</title>
- <informaltable frame="all">
- <tgroup cols="2">
- <thead>
- <row>
- <entry>Tangent</entry>
- <entry>Åtgärd</entry>
- </row>
- </thead>
- <tbody>
- <row>
- <entry>
- <keycap>F2</keycap>
- </entry>
- <entry>Byt namn på markerad tagg</entry>
- </row>
- <row>
- <entry>
- <keycombo><keycap>Ctrl</keycap><keycap>T</keycap></keycombo>
- </entry>
- <entry>Lägg till taggar till markerade foton</entry>
- </row>
- <row>
- <entry>-</entry>
- <entry>Dra och släpp taggar för att flytta dem</entry>
- </row>
- <row>
- <entry>-</entry>
- <entry>Skriv in taggens namn för att hoppa till den (fungerar endast om taggen visas eller är utfälld)</entry>
- </row>
- </tbody>
- </tgroup>
- </informaltable>
- </sect1>
-
- <sect1 id="shortcuts-edit-mode">
- <title>Genvägar i redigeringsläget</title>
- <informaltable frame="all">
- <tgroup cols="2">
- <thead>
- <row>
- <entry>Tangent</entry>
- <entry>Åtgärd</entry>
- </row>
- </thead>
- <tbody>
- <row>
- <entry>
- <keycap>PageUp</keycap>, <keycap>Backspace</keycap>, <keycap>B</keycap>
- </entry>
- <entry>Gå till föregående foto</entry>
- </row>
- <row>
- <entry>
- <keycap>PageDown</keycap>, <keycap>Blanksteg</keycap>, <keycap>N</keycap>
- </entry>
- <entry>Gå till nästa foto</entry>
- </row>
- <row>
- <entry>
- Arrow keys or <keycap>H</keycap>, <keycap>J</keycap>,
- <keycap>K</keycap>, <keycap>L</keycap>
- </entry>
- <entry>
- Go to Previous/Next photo or move around a zoomed photo
- </entry>
- </row>
- <row>
- <entry>
- <keycap>R</keycap>
- </entry>
- <entry>
- Go to a random photo
- </entry>
- </row>
- <row>
- <entry>
- <keycap>f</keycap>
- </entry>
- <entry>Helskärmsvy</entry>
- </row>
- <row>
- <entry>
- <keycap>0</keycap>
- </entry>
- <entry>Anpassa bilden till skärmen</entry>
- </row>
- <row>
- <entry>
- <keycap>1</keycap>
- </entry>
- <entry>Zoomfaktor till 1.0 (1 bildpunkt på skärmen per bildpunkt i bilden)</entry>
- </row>
- <row>
- <entry>
- <keycap>2</keycap>
- </entry>
- <entry>Zoomfaktor till 2.0 (4 bildpunkter på skärmen per bildpunkt i bilden)</entry>
- </row>
- <row>
- <entry>
- <keycap>Esc</keycap>
- </entry>
- <entry>Återvänder till bläddringsläget</entry>
- </row>
- <row>
- <entry>
- <keycap>V</keycap>
- </entry>
- <entry>
- Examine photo with magnifying glass (Loupe). Doubleclick on the
- Loupe, or type <keycap>v</keycap> again to close it.
- </entry>
- </row>
- <row>
- <entry>
- <keycap>Skift</keycap>-Mousewheel
- </entry>
- <entry>
- Faster filmstrip scrolling
- </entry>
- </row>
- <row>
- <entry>
- <keycap>i</keycap>
- </entry>
- <entry>
- Toggle infobox visibility ''(only when in full screen)''
- </entry>
- </row>
- </tbody>
- </tgroup>
- </informaltable>
- </sect1>
- </chapter>
-
-</book>
diff --git a/docs/sv/figures/f-spot-crop.png b/docs/sv/figures/f-spot-crop.png
deleted file mode 100644
index faac93d..0000000
Binary files a/docs/sv/figures/f-spot-crop.png and /dev/null differ
diff --git a/docs/sv/sv.po b/docs/sv/sv.po
deleted file mode 100644
index cf32ab1..0000000
--- a/docs/sv/sv.po
+++ /dev/null
@@ -1,1042 +0,0 @@
-msgid ""
-msgstr ""
-"Project-Id-Version: f-spot doc\n"
-"POT-Creation-Date: 2007-08-08 13:36+0100\n"
-"PO-Revision-Date: 2007-10-17 16:39+0100\n"
-"Last-Translator: Daniel Nylander <po at danielnylander.se>\n"
-"Language-Team: Swedish <tp-sv at listor.tp-sv.se>\n"
-"MIME-Version: 1.0\n"
-"Content-Type: text/plain; charset=UTF-8\n"
-"Content-Transfer-Encoding: 8bit\n"
-
-#. When image changes, this message will be marked fuzzy or untranslated for you.
-#. It doesn't matter what you translate it to: it's not used at all.
-#: C/f-spot.xml:138(None)
-msgid "@@image: 'figures/f-spot-crop.png'; md5=63e18c96702aea4701024837a13ae2d9"
-msgstr "@@image: 'figures/f-spot-crop.png'; md5=63e18c96702aea4701024837a13ae2d9"
-
-#. When image changes, this message will be marked fuzzy or untranslated for you.
-#. It doesn't matter what you translate it to: it's not used at all.
-#: C/f-spot.xml:162(None)
-msgid "@@image: 'figures/f-spot-straighten.png'; md5=ceeff0cac633d06599fa5760cc4bc568"
-msgstr "@@image: 'figures/f-spot-straighten.png'; md5=ceeff0cac633d06599fa5760cc4bc568"
-
-#. When image changes, this message will be marked fuzzy or untranslated for you.
-#. It doesn't matter what you translate it to: it's not used at all.
-#: C/f-spot.xml:181(None)
-msgid "@@image: 'figures/f-spot-adjust-colors.png'; md5=6a5d9eaaaaf238ccbf70552bc073898c"
-msgstr "@@image: 'figures/f-spot-adjust-colors.png'; md5=6a5d9eaaaaf238ccbf70552bc073898c"
-
-#. When image changes, this message will be marked fuzzy or untranslated for you.
-#. It doesn't matter what you translate it to: it's not used at all.
-#: C/f-spot.xml:199(None)
-msgid "@@image: 'figures/f-spot-autocolor.png'; md5=240c4a86c95c9507755fe790bef0e24a"
-msgstr "@@image: 'figures/f-spot-autocolor.png'; md5=240c4a86c95c9507755fe790bef0e24a"
-
-#. When image changes, this message will be marked fuzzy or untranslated for you.
-#. It doesn't matter what you translate it to: it's not used at all.
-#: C/f-spot.xml:216(None)
-msgid "@@image: 'figures/f-spot-desaturate.png'; md5=fa54dfd08171658d720be71b6d367139"
-msgstr "@@image: 'figures/f-spot-desaturate.png'; md5=fa54dfd08171658d720be71b6d367139"
-
-#. When image changes, this message will be marked fuzzy or untranslated for you.
-#. It doesn't matter what you translate it to: it's not used at all.
-#: C/f-spot.xml:233(None)
-msgid "@@image: 'figures/f-spot-sepia.png'; md5=154d6e34903664dbd776f2bef405ce91"
-msgstr "@@image: 'figures/f-spot-sepia.png'; md5=154d6e34903664dbd776f2bef405ce91"
-
-#. When image changes, this message will be marked fuzzy or untranslated for you.
-#. It doesn't matter what you translate it to: it's not used at all.
-#: C/f-spot.xml:264(None)
-msgid "@@image: 'figures/f-spot-red-eye.png'; md5=743d0a2ccc9b2fa8fa314855c225cd31"
-msgstr "@@image: 'figures/f-spot-red-eye.png'; md5=743d0a2ccc9b2fa8fa314855c225cd31"
-
-#. When image changes, this message will be marked fuzzy or untranslated for you.
-#. It doesn't matter what you translate it to: it's not used at all.
-#: C/f-spot.xml:291(None)
-msgid "@@image: 'figures/f-spot-soft-focus.png'; md5=14d1437ce49c83f3ebbcf70b7047ffbe"
-msgstr "@@image: 'figures/f-spot-soft-focus.png'; md5=14d1437ce49c83f3ebbcf70b7047ffbe"
-
-#. When image changes, this message will be marked fuzzy or untranslated for you.
-#. It doesn't matter what you translate it to: it's not used at all.
-#: C/f-spot.xml:567(None)
-msgid "@@image: 'figures/f-spot-fullscreen.png'; md5=86040e20ebf1015f6489a56e9589f063"
-msgstr "@@image: 'figures/f-spot-fullscreen.png'; md5=86040e20ebf1015f6489a56e9589f063"
-
-#. When image changes, this message will be marked fuzzy or untranslated for you.
-#. It doesn't matter what you translate it to: it's not used at all.
-#: C/f-spot.xml:580(None)
-msgid "@@image: 'figures/f-spot-slideshow.png'; md5=84a69bc3bb7a1b8d04c967d3a66e6f23"
-msgstr "@@image: 'figures/f-spot-slideshow.png'; md5=84a69bc3bb7a1b8d04c967d3a66e6f23"
-
-#: C/f-spot.xml:5(title)
-msgid "The F-Spot Manual"
-msgstr "Handbok för F-Spot"
-
-#: C/f-spot.xml:7(para)
-#: C/f-spot.xml:9(subtitle)
-msgid "This is the user manual for F-Spot, a GNOME personal photo manager."
-msgstr "Det här är användarhandboken för F-Spot, en GNOME-hanterare för personliga foton"
-
-#: C/f-spot.xml:11(year)
-msgid "2007"
-msgstr "2007"
-
-#: C/f-spot.xml:12(holder)
-msgid "Aaron Bockover, Gabriel Burt, Miguel de Icaza, Bengt Thuree"
-msgstr "Aaron Bockover, Gabriel Burt, Miguel de Icaza, Bengt Thuree"
-
-#: C/f-spot.xml:15(publishername)
-msgid "GNOME Documentation Project"
-msgstr "Dokumentationsprojekt för GNOME"
-
-#: C/f-spot.xml:19(firstname)
-msgid "Miguel"
-msgstr "Miguel"
-
-#: C/f-spot.xml:20(surname)
-msgid "de Icaza"
-msgstr "de Icaza"
-
-#: C/f-spot.xml:23(firstname)
-msgid "Aaron"
-msgstr "Aaron"
-
-#: C/f-spot.xml:24(surname)
-msgid "Bockover"
-msgstr "Bockover"
-
-#: C/f-spot.xml:27(firstname)
-msgid "Bengt"
-msgstr "Bengt"
-
-#: C/f-spot.xml:28(surname)
-msgid "Thuree"
-msgstr "Thuree"
-
-#: C/f-spot.xml:31(firstname)
-msgid "Gabriel"
-msgstr "Gabriel"
-
-#: C/f-spot.xml:32(surname)
-msgid "Burt"
-msgstr "Burt"
-
-#: C/f-spot.xml:35(firstname)
-msgid "Alexandre"
-msgstr "Alexandre"
-
-#: C/f-spot.xml:36(surname)
-msgid "Prokoudine"
-msgstr "Prokoudine"
-
-#: C/f-spot.xml:39(firstname)
-msgid "Stephane"
-msgstr "Stephane"
-
-#: C/f-spot.xml:40(surname)
-msgid "Delcroix"
-msgstr "Delcroix"
-
-#: C/f-spot.xml:46(revnumber)
-msgid "0.3"
-msgstr "0.3"
-
-#: C/f-spot.xml:47(date)
-msgid "2007-07-26"
-msgstr "2007-07-26"
-
-#: C/f-spot.xml:53(title)
-msgid "Organizing your photos"
-msgstr "Organisera dina foton"
-
-#: C/f-spot.xml:56(title)
-msgid "Import"
-msgstr "Importera"
-
-#: C/f-spot.xml:58(para)
-msgid "You can import photos from your hard drive or your camera. When you import your photos into F-Spot from your camera, it will always make a copy of them, leaving you free to clear your camera's memory. By default, F-Spot will make a copy of photos imported from your hard drive. Uncheck the <guilabel>Copy</guilabel> option on the import dialog or hold <keycap>Shift</keycap> when dragging photos into F-Spot if you do not wish to copy them from your hard drive."
-msgstr "Du kan importera foton från din hårddisk eller din kamera. När du importera dina foton till F-Spot från din kamera kommer de alltid att bli kopierade, vilket innebär att du måste själv tömma ditt kameraminne. Som standard kommer F-Spot att göra en kopia av importerade foton från din hårddisk. Avmarkera alternativet <guilabel>Kopiera</guilabel> på importeringsdialogrutan eller håll nere <keycap>Skift</keycap> när du drar in foton till F-Spot om du inte vill att de ska kopieras från din hårddisk."
-
-#: C/f-spot.xml:68(para)
-msgid "By default, F-Spot copies your photos to the <filename class=\"directory\">~/Photos</filename> folder. You can change the folder F-Spot uses in <guilabel>Preferences</guilabel> dialog (<menuchoice><guimenu>Edit</guimenu><guimenuitem>Preferences</guimenuitem></menuchoice>)."
-msgstr "Som standard kopierar F-Spot dina foton till mappen <filename class=\"directory\">~/Photos</filename>. Du kan ändra mappen som F-Spot använder i dialogrutan <guilabel>Inställningar</guilabel> (<menuchoice><guimenu>Redigera</guimenu><guimenuitem>Inställningar</guimenuitem></menuchoice>)."
-
-#: C/f-spot.xml:76(para)
-msgid "If all the photos you are importing at one time are from a particular event, or have some other characteristic in common, you can create a tag for them so you can later find them with ease. To do this, follow the instructions from <xref linkend=\"tag\"/> to create a new tag, then when you are importing them, check the button for <guilabel>Attach Tag</guilabel> and choose the tag you created."
-msgstr "Om alla foton som du importerar samtidigt är från en speciell händelse, eller har några andra gemensamma egenskaper, kan du skapa ett tagg för dem så att du enkelt kan hitta dem senare. För att göra det här, följ instruktionerna i <xref linkend=\"tag\"/> för att skapa en ny tagg. Sedan när du importerar dem ska du kryssa i rutan för <guilabel>Fäst tagg</guilabel> och välja den tagg som du skapade."
-
-#: C/f-spot.xml:86(para)
-msgid "F-Spot uses a database stored at <filename>~/.gnome2/f-spot/photos.db</filename>. Note, to access it, use the sqlite3 command. You can also manually specify path to a database by running F-Spot with <option>-b</option> option."
-msgstr "F-Spot använder en databas som lagras i <filename>~/.gnome2/f-spot/photos.db</filename>. Observera att du måste använda kommandot sqlite3 för att komma åt den. Du kan även manuellt ange en sökväg till en databas genom att köra F-Spot med flaggan <option>-b</option>."
-
-#: C/f-spot.xml:94(para)
-msgid "After an import, F-Spot will display the pictures of the latest import roll only. Read <xref linkend=\"enjoying-search\"/> to learn how to deal with import rolls."
-msgstr ""
-
-#: C/f-spot.xml:102(title)
-msgid "Edit"
-msgstr "Redigera"
-
-#: C/f-spot.xml:104(para)
-msgid "If you double click or press enter on an image, you enter Edit mode, where you can remove red-eye, crop, and adjust brightness and colors."
-msgstr "Om du dubbelklickar eller trycker på Enter på en bild, kommer du att gå in i redigeringsläget, där du kan ta bort röda ögon, beskära bilden och justera ljusstyrkan och färger."
-
-#: C/f-spot.xml:110(title)
-msgid "Versions"
-msgstr "Versioner"
-
-#: C/f-spot.xml:112(para)
-msgid "When you edit your photos, a new copy (called a version) is created, so your original is never altered. After your first edit to a photo, subsequent edits will modify the same version. If you want to create mulitple versions of your photo, perhaps with different cropping or coloring, you can do so via the <menuchoice><guimenu>File</guimenu><guimenuitem>Create new version</guimenuitem></menuchoice> option."
-msgstr "När du redigerar dina foton kommer en ny kopia (kallas en version) skapas, så att ditt originalfoto förblir orört. Efter din första redigering av ett foto kommer efterföljande redigeringar att ändra samma version av fotot. Om du vill skapa flera versioner av ditt foto, kanske med olika beskäringar eller färgsättning, kan du göra det via alternativet <menuchoice><guimenu>Arkiv</guimenu><guimenuitem>Skapa ny version</guimenuitem></menuchoice>."
-
-#: C/f-spot.xml:123(title)
-msgid "Crop"
-msgstr "Beskär"
-
-#: C/f-spot.xml:125(para)
-msgid "Cropping an image is a great way to improve the quality of a photograph by improving how it is framed. You crop a photo by selecting the part of the photo you want to keep. If you want your photo to be the exact dimensions necessary for a certain print size, you can constrain the kind of selection F-Spot will allow you to draw by choosing the appropriate size from the constraint drop down. See the <xref linkend=\"edit-remove-red-eye\"/> below for details on making a selection on your photo."
-msgstr "Beskära en bild är ett bra sätt att förbättra kvaliteten på ett fotografi genom att skära bort oväsentliga saker. Du kan beskära ett foto genom att markera den del av fotot som du vill behålla. Om du vill att ditt foto ska ha de exakta dimensionerna som behövs för en specifik utskriftsstorlek kan du behålla den markering som F-Spot tillåter dig att rita ut genom att välja den lämpliga storleken från rullgardinslistan för begränsningar. Se <xref linkend=\"edit-remove-red-eye\"/> nedan för detaljer om hur man gör en markering i ditt foto."
-
-#: C/f-spot.xml:135(title)
-msgid "Crop tool"
-msgstr "Beskäringsverktyg"
-
-#: C/f-spot.xml:142(para)
-#: C/f-spot.xml:343(para)
-msgid "Once you have made your crop selection, you must click the crop button beneath the image to finalize the crop. If you are working with the original photo, cropping creates a new version your photo."
-msgstr "När du har gjort din markering för beskäring måste du klicka på beskäringsknappen under bilden för att färdigställa beskäringen. Om du arbetar med originalfotot kommer beskäringen att skapa en ny version av ditt foto."
-
-#: C/f-spot.xml:150(title)
-msgid "Straighten"
-msgstr ""
-
-#: C/f-spot.xml:152(para)
-msgid "Straighten effect is a tool to level a photo, quite helpful for landscapes taken without a tripod, when (imaginary) line of horizon is not at 0°. This tool rotates an image by a specified angle and automagically crops the resulted image, so that you always see a perfect rectangle."
-msgstr ""
-
-#: C/f-spot.xml:159(title)
-msgid "Straighten tool"
-msgstr ""
-
-#: C/f-spot.xml:169(title)
-msgid "Adjust Colors"
-msgstr "Justera färger"
-
-#: C/f-spot.xml:171(para)
-#, fuzzy
-msgid "To adjust the brightness, contrast, and colors of a photo, first click the <guibutton>Adjust the photo colors</guibutton> icon to open the adjustment dialog. Change then some settings and save them with <guibutton>OK</guibutton>."
-msgstr "För att justera ljusstyrka, kontrast och färger i ett foto, klicka först på ikonen <guibutton>Justera foton</guibutton> för att öppna justeringsdialogrutan."
-
-#: C/f-spot.xml:178(title)
-#, fuzzy
-msgid "Adjust Colors tool"
-msgstr "Justera färger"
-
-#: C/f-spot.xml:188(title)
-#: C/f-spot.xml:196(title)
-#, fuzzy
-msgid "AutoColor"
-msgstr "Justera färger"
-
-#: C/f-spot.xml:190(para)
-msgid "This effect automatically adjusts color levels to make a pretty balanced picture color-wise. It serves best for pictures taken with automatical white balance, when camera didn't manage to do the job well."
-msgstr ""
-
-#: C/f-spot.xml:206(title)
-msgid "Desaturate"
-msgstr ""
-
-#: C/f-spot.xml:208(para)
-msgid "To make a colorful photo a black and white one, open a photo of choice and press <guibutton>Desaturate</guibutton> button."
-msgstr ""
-
-#: C/f-spot.xml:213(title)
-#: C/f-spot.xml:230(title)
-msgid "Desaturation tool"
-msgstr ""
-
-#: C/f-spot.xml:223(title)
-msgid "Sepia"
-msgstr "Sepia"
-
-#: C/f-spot.xml:225(para)
-msgid "To make a colorful photo look like an old-style picture in sepia tones, open a photo of choice and press <guibutton>Sepia</guibutton> button."
-msgstr ""
-
-#: C/f-spot.xml:240(title)
-msgid "Remove Red-Eye"
-msgstr "Ta bort röda ögon"
-
-#: C/f-spot.xml:242(para)
-msgid "To remove redeye from a photo, you need to select a zone containing the eyes. You may want to zoom in on the image to accurately select the eyes in the photo. You should be able to correct both eyes on the same person in one shot, or even the eyes from multiple people at once. If this doesn't work for you, or the selected zone contains some vivid red parts (lips, ...) you'll probably have to correct one red eye at a time."
-msgstr ""
-
-#: C/f-spot.xml:250(para)
-msgid "To make your selection, click one corner of the rectangle that will be your selection, and drag your mouse to the diagonal corner and release it. You can resize your selection by dragging its edges, and you can move it by clicking in the middle of it and dragging it to where you want it."
-msgstr "För att markera, klicka för att skapa en rektangel som kommer att bli din markering och dra din mus diagonalt och släpp den sedan. Du kan ändra storleken genom att dra i rektangelns kanter och du kan flytta den genom att klicka i mitten av den och dra den till den plats du önskar."
-
-#: C/f-spot.xml:256(para)
-#, fuzzy
-msgid "Once you have selected a zone, you can remove the red from it by clicking the red-eye button beneath the photo."
-msgstr "När du har markerat ett öga kan du ta bort det röda från det genom att klicka på knappen för röda ögon under fotot."
-
-#: C/f-spot.xml:261(title)
-msgid "Red-Eye tool"
-msgstr ""
-
-#: C/f-spot.xml:269(para)
-msgid "You can change the threshold for redeyes detection by changing the gconf key <filename class=\"directory\">/apps/f-spot/edit/redeye_threshold</filename>."
-msgstr ""
-
-#: C/f-spot.xml:278(title)
-#, fuzzy
-msgid "Soft Focus"
-msgstr "Genvägar"
-
-#: C/f-spot.xml:280(para)
-msgid "In photography sharpening one region of a picture, while blurring all the rest, is a way to make an emphasis and grab attention. It is achieved by using a lens that allows shooting with a short distance in front of and beyond the subject that appears to be in focus. Soft focus effect is a way to emulate such a lens."
-msgstr ""
-
-#: C/f-spot.xml:288(title)
-msgid "Soft Focus tool"
-msgstr ""
-
-#: C/f-spot.xml:295(para)
-msgid "Click to choose central point of the area you want to be in focus and adjust amount of blurring, then click <guibutton>OK</guibutton>."
-msgstr ""
-
-#: C/f-spot.xml:302(title)
-msgid "Sharpen"
-msgstr ""
-
-#: C/f-spot.xml:304(para)
-msgid "Out-of-focus photographs and most digitized images often need a sharpness correction. The Unsharp Mask effect sharpens edges of the elements without increasing noise or blemish. To sharpen a photo choose <menuchoice><guimenu>Edit</guimenu><guimenuitem>Sharpen...</guimenuitem></menuchoice> and specify the following values:"
-msgstr ""
-
-#: C/f-spot.xml:315(para)
-msgid "<parameter class=\"option\">Amount</parameter> — strength of sharpening."
-msgstr ""
-
-#: C/f-spot.xml:320(para)
-msgid "<parameter class=\"option\">Radius</parameter> — how many pixels on either side of an edge will be affected by sharpening. High resolution images allow higher radius."
-msgstr ""
-
-#: C/f-spot.xml:327(para)
-msgid "<parameter class=\"option\">Threshold</parameter> — the minimum difference in pixel values that indicates an edge where sharpen must be applied. This helps avoiding creation of blemishes in face, sky or water surface."
-msgstr ""
-
-#: C/f-spot.xml:337(title)
-msgid "Describe"
-msgstr "Beskriv"
-
-#: C/f-spot.xml:339(para)
-msgid "You can also enter a description of the image by clicking on the text entry box below the image and typing."
-msgstr "Du kan även ange en beskrivning av bilden genom att klicka på textinmatningsrutan under bilden."
-
-#: C/f-spot.xml:351(title)
-msgid "Adjust Time"
-msgstr "Justera tid"
-
-#: C/f-spot.xml:353(para)
-msgid "In both 'browse' or 'edit' modes, you can adjust the time of one or multiple pictures (<menuchoice><guimenu>Edit</guimenu><guimenuitem>Adjust Time</guimenuitem></menuchoice>). Adjusting the time of multiple pictures at once helps you shift all an import roll if, e.g. the time on your camera is badly set or if you forgot to change it according to DST."
-msgstr ""
-
-#: C/f-spot.xml:365(title)
-msgid "Tag"
-msgstr "Tagga"
-
-#: C/f-spot.xml:366(para)
-msgid "F-Spot enables you to organize and enjoy your photos by associating them with various user-customizable tags. A tag is a merely a label. F-Spot comes with default tags to get you started; you are free to change them and add new ones. For example, if you want to create a tag for specific event, you can create a new tag named after that event under the Events tag."
-msgstr "F-Spot låter dig organisera och njuta av dina foton genom att associera dem med olika användaranpassade taggar. En tagg är helt enkelt en etikett. F-Spot levereras med standardtaggar som du kan börja använda direk; du får fritt ändra dem och lägga till nya. Till exempel, om du vill skapa en tagg för en specifik händelse, kan du skapa en ny tagg med händelsens namn under taggen Händelser."
-
-#: C/f-spot.xml:373(para)
-msgid "There are many ways to tag photos:"
-msgstr "Det finns många sätt att sätta taggar på foton:"
-
-#: C/f-spot.xml:378(para)
-msgid "drag and drop the photo(s) onto the tag"
-msgstr "dra och släpp foton på taggen"
-
-#: C/f-spot.xml:383(para)
-msgid "drag and drop the tag onto the photo(s)"
-msgstr "dra och släpp taggen på foton"
-
-#: C/f-spot.xml:388(para)
-msgid "via the photo's right-click menu"
-msgstr "via fotots högerklicksmeny"
-
-#: C/f-spot.xml:393(para)
-msgid "via the Tags and Edit menus"
-msgstr "via menyerna Taggar och Redigera"
-
-#: C/f-spot.xml:398(para)
-msgid "by typing them in (press <keycap>t</keycap> to pop up the tag entry bar, enter comma-separated tags) - with tab completion!"
-msgstr "genom att ange dem i (tryck <keycap>t</keycap> för att visa tagginmatningsfältet, ange taggarna kommaseparerade) - med tabulatorkomplettering!"
-
-#: C/f-spot.xml:404(para)
-msgid "The first photo you associate with a tag will be used for that tag's icon. You can always edit a tag's name, parent tag, and icon by right clicking on it and choosing <guilabel>Edit tag</guilabel>."
-msgstr "Det första fotot som du associerar med en tagg kommer att användas som ikon för den taggen. Du kan alltid redigera namnet för en tagg, föräldratagg och ikon genom att högerklicka på den och välja <guilabel>Redigera tagg</guilabel>."
-
-#: C/f-spot.xml:409(para)
-msgid "You can change a tag's parent by dragging and dropping it where you like. Also, you can edit the name of a tag by selecting it and pressing <keycap>F2</keycap>. Lastly, if you have the tag tree widget focused (e.g. you just clicked on a tag), you can start typing the name of a tag, and all the expanded tags in the list will be searched and you'll jump to any matching ones."
-msgstr "Du kan ändra en taggs förälder genom att dra och släppa den där du vill. Du kan även redigera namnet för en tagg genom att välja den och trycka på <keycap>F2</keycap>. Till sist, om du har taggträdswidgetn fokuserad (t.ex. du har precis klickat på en tagg), kan du börja skriva in namnet på en tagg, och alla utfällda taggar i listan kommer att sökas igenom och du kommer att hoppa fram till de som matchas."
-
-#: C/f-spot.xml:418(para)
-#, fuzzy
-msgid "You can also change size of tag icons in the sidebar or even make tag icons invisible by selecting preferred option from <menuchoice><guimenu>View</guimenu><guimenuitem>Tag Icons</guimenuitem></menuchoice> menu."
-msgstr "Du kan använda draglistwidgeten för att bläddra bland dina foton efter månad eller efter katalog. För att ändra den här inställningen, gå till <menuchoice><guimenu>Visa</guimenu><guimenuitem>Ordna efter</guimenuitem></menuchoice>."
-
-#: C/f-spot.xml:426(para)
-msgid "F-Spot can write tags as metadata fields into JPEG files. Tags for various RAW files, PNG, TIFF, and others are written to F-Spot's database. You will have to re-tag these files if you re-import your collection."
-msgstr ""
-
-#: C/f-spot.xml:437(title)
-msgid "Enjoying your photos"
-msgstr "Njut av dina foton"
-
-#: C/f-spot.xml:439(title)
-msgid "Browse"
-msgstr "Bläddra"
-
-#: C/f-spot.xml:440(para)
-msgid "You can use the slider widget to browse your photos by month or by directory. To change this setting, go to <menuchoice><guimenu>View</guimenu><guimenuitem>Arranged By</guimenuitem></menuchoice>."
-msgstr "Du kan använda draglistwidgeten för att bläddra bland dina foton efter månad eller efter katalog. För att ändra den här inställningen, gå till <menuchoice><guimenu>Visa</guimenu><guimenuitem>Ordna efter</guimenuitem></menuchoice>."
-
-#: C/f-spot.xml:448(title)
-msgid "Search"
-msgstr "Sök"
-
-#: C/f-spot.xml:450(para)
-msgid "F-Spot uses search search filters to help you better define search criteria."
-msgstr ""
-
-#: C/f-spot.xml:455(title)
-msgid "Tags"
-msgstr "Taggar"
-
-#: C/f-spot.xml:457(para)
-msgid "You can start a search by double clicking or activating a tag from the tag list. Alternatively, you can show the find bar with <menuchoice><guimenu>Find</guimenu><guimenuitem>Show Find Bar</guimenuitem></menuchoice>. With the find bar shown, you can drag tags from the tag view to the find bar."
-msgstr "Du kan starta en sökning genom att dubbelklicka eller aktivera en tagg från tagglistan. Alternativt kan du visa sökraden med <menuchoice><guimenu>Sök</guimenu><guimenuitem>Visa sökrad</guimenuitem></menuchoice>. När sökraden visas kan du dra taggar från taggvyn till sökraden."
-
-#: C/f-spot.xml:463(para)
-msgid "To find photos that are tagged with both of two tags, activate the first in the tag view or drag it onto the find bar, then drag the second tag and drop it on top of the first. You can also right click on the second tag in the tag view, or use the <guimenu>Find</guimenu> menu, and choose <guimenuitem>Find With...</guimenuitem> and select the first tag (or group of tags)."
-msgstr "För att hitta foton som är taggade med två olika taggar, aktivera den första i taggvyn eller dra den till sökraden, dra sedan den andra taggen och släpp den ovanpå den första taggen. Du kan också högerklicka på den andra taggen i taggvyn, eller använda menyn <guimenu>Sök</guimenu> och välja <guimenuitem>Sök med...</guimenuitem> och välja den första taggen (eller grupp av taggar)."
-
-#: C/f-spot.xml:470(para)
-msgid "You can drag a tag icon around on the find bar to change from finding it and another tag to finding it or another tag."
-msgstr "Du kan dra en taggikon runt på sökraden för att ändra från att hitta den och en annan tagg för att hitta den eller en annan tag."
-
-#: C/f-spot.xml:474(para)
-msgid "You can search for photos that do not have a particular tag by double-clicking on a tag in the find bar. Alternatively, you can right-click a tag in the find bar and select <guimenuitem>Exclude</guimenuitem>."
-msgstr "Du kan söka efter foton som inte har en specifik tagg genom att dubbelklicka på en tagg i sökraden. Alternativt kan du högerklicka på ett tagg i sökraden och välja <guimenuitem>Undanta</guimenuitem>."
-
-#: C/f-spot.xml:479(para)
-msgid "To remove a tag from the search, drag it away from the find bar, or right click and select <guimenuitem>Remove</guimenuitem>."
-msgstr "För att ta bort en tagg från sökningen, dra bort den från sökraden, eller högerklicka och välj <guimenuitem>Ta bort</guimenuitem>."
-
-#: C/f-spot.xml:483(para)
-msgid "By default, photos tagged <emphasis>Hidden</emphasis> will not be shown. You must explicitly include the <emphasis>Hidden</emphasis> tag in your search to show such photos."
-msgstr "Som standard kommer inte foton taggade som <emphasis>Dolda</emphasis> att visas. Du måste uttryckligen inkludera taggen <emphasis>Dold</emphasis> i din sökning för att visa sådan foton."
-
-#: C/f-spot.xml:491(title)
-msgid "Import Rolls"
-msgstr "Importera rullar"
-
-#: C/f-spot.xml:492(para)
-msgid "F-Spot remembers what pictures were imported every now and then. Use <menuchoice><guimenu>Find</guimenu><guisubmenu>Import Roll</guisubmenu><guimenuitem>Last import roll</guimenuitem></menuchoice> to limit search to last importing session or use <menuchoice><guimenu>Find</guimenu><guisubmenu>Import Roll</guisubmenu><guimenuitem>Select Import Rolls...</guimenuitem></menuchoice> to make a finer selection of imported photos:"
-msgstr ""
-
-#: C/f-spot.xml:502(para)
-msgid "<parameter class=\"option\">At</parameter> — to selection photos from a particular importing session"
-msgstr ""
-
-#: C/f-spot.xml:507(para)
-msgid "<parameter class=\"option\">After</parameter> — to select all photos imported begining with a particular importing sessio"
-msgstr ""
-
-#: C/f-spot.xml:512(para)
-msgid "<parameter class=\"option\">Between</parameter> — to select all photos imported between two particular importing sessions"
-msgstr ""
-
-#: C/f-spot.xml:517(para)
-msgid "Every time you change settings of the filter, amount of selected photos will appear in the bottom part of the dialog."
-msgstr ""
-
-#: C/f-spot.xml:521(para)
-msgid "When you apply Import Roll filter, in the Find bar you will see <guilabel>Find: Import Roll</guilabel>. Now you can add some other filter to finetune your selection."
-msgstr ""
-
-#: C/f-spot.xml:526(para)
-msgid "If you don't need the Import Roll filter anymore, choose <menuchoice><guimenu>Find</guimenu><guisubmenu>Import Roll</guisubmenu><guimenuitem>Clear roll filter</guimenuitem></menuchoice> to remove Import Roll from search criteria. You can also click the close button (<guibutton>X</guibutton>) of the search bar to discard all the current search options."
-msgstr ""
-
-#: C/f-spot.xml:535(para)
-msgid "The number of displayed rolls in the dialog is defined by the gconf key <filename class=\"directory\">/apps/f-spot/import/gui_roll_history</filename>. Default value is 10."
-msgstr ""
-
-#: C/f-spot.xml:544(title)
-msgid "Type-to-find"
-msgstr ""
-
-#: C/f-spot.xml:545(para)
-msgid "There is also a type-to-find entry. Press <keycap>/</keycap> to open it. It cannot be used at the same time as the find bar. You can type queries such as \"TagA and (TagB or (TagC and TagD))\". At any point, if F-Spot recognizes what you've typed as a valid query, it will update your search. The <emphasis>not</emphasis> operator is not yet supported."
-msgstr "Det finns även en skriv-in-för-att-söka-funktion. Tryck på <keycap>/</keycap> för att öppna den. Den kan inte användas samtidigt som sökraden. Du kan skriva in sökfrågor som \"TaggA and (TaggB or (TaggC and TaggD))\". F-Spot kommer när som helst att uppdatera din sökning om det känner igen det som du har skrivit som en giltig sökfråga. Operatorn <emphasis>not</emphasis> stöds ännu inte."
-
-#: C/f-spot.xml:556(title)
-msgid "Fullscreen Mode and Slideshows"
-msgstr "Helskärmsläge och bildspel"
-
-#: C/f-spot.xml:557(para)
-msgid "For fewer distractions and larger display, you can view your photos in full screen mode. You control when to show the next photo or to return to the previous. Enter fullscreen mode by pressing <keycap>F11</keycap> at any time or by pressing the button in the toolbar."
-msgstr "Du kan visa dina foton i helskärmsläget, för att inte bli störd av andra saker på skärmen samt få en större visningsyta. Du kontrollerar när nästa foto ska visas eller om du vill gå tillbaka till den föregående. Gå in i helskärmsläget genom att trycka på <keycap>F11</keycap> när som helst eller genom att trycka på knappn i verktygsraden."
-
-#: C/f-spot.xml:564(title)
-msgid "FullScreen"
-msgstr "Helskärmsläge"
-
-#: C/f-spot.xml:571(para)
-msgid "In slideshow mode, you can sit back and view your photos as they are presented to you. You can start a slideshow by pressing the button on the toolbar."
-msgstr "I bildspelsläget kan du sitta lugnt och visa dina foton automatiskt. Du kan starta ett bildspel genom att trycka på knappen i verktygsraden."
-
-#: C/f-spot.xml:577(title)
-msgid "SlideShow"
-msgstr "Bildspel"
-
-#: C/f-spot.xml:588(title)
-msgid "Sharing your photos"
-msgstr "Dela dina foton"
-
-#: C/f-spot.xml:591(para)
-msgid "There are many ways to share your photos using F-Spot. All of the following methods will only share the photos you have selected when you run them."
-msgstr "Det finns flera sätt att dela dina foton med hjälp av F-Spot. Alla av de följande metoderna kommer endast att dela ut de foton som du har markerat."
-
-#: C/f-spot.xml:598(title)
-msgid "E-mail"
-msgstr "E-post"
-
-#: C/f-spot.xml:599(para)
-msgid "E-mail your photos directly from F-Spot with the <menuchoice><guimenu>File</guimenu><guimenuitem>Send Mail</guimenuitem></menuchoice> menu."
-msgstr "Skicka din foton via e-post direkt från F-Spot med menyn <menuchoice><guimenu>Arkiv</guimenu><guimenuitem>Skicka e-post</guimenuitem></menuchoice>."
-
-#: C/f-spot.xml:605(title)
-msgid "Note 1"
-msgstr ""
-
-#: C/f-spot.xml:606(para)
-msgid "The email program used for this is defined at the GNOME level. You can change the default e-mailer for your user using the <application>Preferred Applications</application> tool in <menuchoice><guimenu>System</guimenu><guisubmenu>Preferences</guisubmenu></menuchoice>."
-msgstr ""
-
-#: C/f-spot.xml:615(title)
-msgid "Note 2"
-msgstr ""
-
-#: C/f-spot.xml:616(para)
-msgid "If some of the photos you'd like to send by email are in a format that F-Spot can't write (e.g. RAW images), the size selection dialog will become insensitive and the originals will be sent."
-msgstr ""
-
-#: C/f-spot.xml:623(para)
-msgid "If you're sending resized pictures, F-Spot will keep the modified versions somewhere in the <filename class=\"directory\">/tmp</filename> directory for 30 seconds. It's not an issue with evolution, which makes it's own local copy of the attachments, but could be a bit shorter if you're using Thunderbird. You can change the delay by editing the gconf key <filename class=\"directory\">/apps/f-spot/export/email/delete_timeout_seconds</filename>."
-msgstr ""
-
-#: C/f-spot.xml:635(title)
-msgid "Print"
-msgstr "Skriv ut"
-
-#: C/f-spot.xml:636(para)
-msgid "Print your photos with the <menuchoice><guimenu>File</guimenu><guimenuitem>Print</guimenuitem></menuchoice> menu."
-msgstr "Skriv ut din foton med menyn <menuchoice><guimenu>Arkiv</guimenu><guimenuitem>Skriv ut</guimenuitem></menuchoice>."
-
-#: C/f-spot.xml:643(title)
-msgid "Burn to CD"
-msgstr "Bränn till cd-skiva"
-
-#: C/f-spot.xml:644(para)
-#, fuzzy
-msgid "Burn your photos to CD or DVD with the <menuchoice><guimenu>File</guimenu><guisubmenu>Export</guisubmenu><guimenuitem>Export to CD</guimenuitem></menuchoice> menu."
-msgstr "Om du använder Flickr kan du posta dina filer direkt från F-Spot med menyn <menuchoice><guimenu>Arkiv</guimenu><guimenuitem>Exportera</guimenuitem><guimenuitem>Exportera till Flickr</guimenuitem></menuchoice>."
-
-#: C/f-spot.xml:652(title)
-msgid "Generate a Website Gallery or Folder"
-msgstr "Generera ett webbplatsgalleri eller -mapp"
-
-#: C/f-spot.xml:653(para)
-msgid "The <menuchoice><guimenu>File</guimenu><guimenuitem>Export</guimenuitem><guimenuitem>Export to Folder</guimenuitem></menuchoice> feature gives you three ways to export your images."
-msgstr "Funktionen <menuchoice><guimenu>Arkiv</guimenu><guimenuitem>Exportera</guimenuitem><guimenuitem>Exportera till mapp</guimenuitem></menuchoice> erbjuder dig tre sätt att exportera dina bilder på."
-
-#: C/f-spot.xml:661(para)
-msgid "<guilabel>Use Original</guilabel> exports your photos ready for use with Jakub Steiner's free <ulink url=\"http://jimmac.musichall.cz/original.php\"> Original Photo Gallery</ulink> software. If you are unsure about this option, it is probably not the right one for you."
-msgstr "<guilabel>Använd original</guilabel> exporterar dina foton till att användas med Jakub Steiners fria programvara <ulink url=\"http://jimmac.musichall.cz/original.php\"> Original Photo Gallery</ulink>. Om du är osäker på det här alternativet är det kanske inte något för dig."
-
-#: C/f-spot.xml:669(para)
-msgid "<guilabel>Use static HTML files</guilabel> exports your photos to an interactive website, ready for you to upload."
-msgstr "<guilabel>Använd statiska HTML-filer</guilabel> exporterar dina foton till en interaktiv webbplats, färdiga för dig att skicka upp."
-
-#: C/f-spot.xml:675(para)
-msgid "<guilabel>Plain Files</guilabel> exports your images as files within directories, without putting them into a gallery."
-msgstr "<guilabel>Vanliga filer</guilabel> exporterar dina bilder som filer inne i kataloger, utan att lägga dem i ett galleri."
-
-#: C/f-spot.xml:684(title)
-msgid "Post to your online galleries"
-msgstr "Posta till dina gallerier på nätet"
-
-#: C/f-spot.xml:685(para)
-#, fuzzy
-msgid "If you use Flickr, SmugMug, 23hq or Picasa Web Album, you can post your files directly from F-Spot with the <menuchoice><guimenu>File</guimenu><guisubmenu>Export</guisubmenu></menuchoice> menu, choosing corresponding submenu item."
-msgstr "Om du använder Flickr kan du posta dina filer direkt från F-Spot med menyn <menuchoice><guimenu>Arkiv</guimenu><guimenuitem>Exportera</guimenuitem><guimenuitem>Exportera till Flickr</guimenuitem></menuchoice>."
-
-#: C/f-spot.xml:690(para)
-msgid "If you use the PHP software known as <ulink url=\"http://gallery.sourceforge.net/\"> Gallery</ulink>, you can post your photos to your existing album with the <menuchoice><guimenu>File</guimenu><guimenuitem>Export</guimenuitem><guimenuitem>Export to Web Gallery</guimenuitem></menuchoice> menu. You must first enable the Remote module within your Gallery installation."
-msgstr "Om du använder PHP-programvaran känd som <ulink url=\"http://gallery.sourceforge.net/\"> Gallery</ulink>, kan du posta dina foton till ditt befintliga album med menyn <menuchoice><guimenu>Arkiv</guimenu><guimenuitem>Exportera</guimenuitem><guimenuitem>Exportera till webbgalleri</guimenuitem></menuchoice>. Du måste först aktivera fjärrmodulen i din installation av Gallery."
-
-#: C/f-spot.xml:698(title)
-msgid "Note for Gallery 2.2 users"
-msgstr ""
-
-#: C/f-spot.xml:699(para)
-msgid "The Remote plugin for Gallery should be 1.0.8 or newer."
-msgstr ""
-
-#: C/f-spot.xml:703(para)
-msgid "<ulink url=\"http://pennave.sourceforge.net\">PennAve</ulink> is a Python web-application that directly uses F-Spot's database to present a dynamic gallery of your photos and tags."
-msgstr ""
-
-#: C/f-spot.xml:708(para)
-msgid "<ulink url=\"http://www.conduit-project.org\">Conduit</ulink> is an application that can sync photos that have a particular tag with your Flickr or Picasa Web Album web storage."
-msgstr ""
-
-#: C/f-spot.xml:717(title)
-msgid "Extend functionality"
-msgstr "Utökad funktionalitet"
-
-#: C/f-spot.xml:720(title)
-msgid "What extensions are"
-msgstr "Vad är tillägg"
-
-#: C/f-spot.xml:722(para)
-msgid "F-Spot extensions are means to add new functionality to the application. F-Spot supports two types of extension: exporters (which allow exporting photos to new web services or data storages) and tools (which allow new ways of color correction, duplicate photos finders etc.). Extensions are distributed in form of extension packages."
-msgstr ""
-
-#: C/f-spot.xml:729(para)
-msgid "In the best traditions of not reinventing the wheel extensions can use other extensions, which means that one extension cannot work, if another extension is not installed. This concept of dependance actually means that"
-msgstr ""
-
-#: C/f-spot.xml:736(para)
-msgid "you cannot install an extension, if the extension it depends on, is not present in the system"
-msgstr ""
-
-#: C/f-spot.xml:741(para)
-msgid "you cannot remove an extension on which some other extension depends"
-msgstr ""
-
-#: C/f-spot.xml:749(title)
-msgid "Managing extensions"
-msgstr "Hantera tillägg"
-
-#: C/f-spot.xml:751(para)
-#, fuzzy
-msgid "To manage extensions choose <menuchoice><guimenu>Edit</guimenu><guimenuitem>Manage Extensions</guimenuitem></menuchoice> menu item."
-msgstr "Skriv ut din foton med menyn <menuchoice><guimenu>Arkiv</guimenu><guimenuitem>Skriv ut</guimenuitem></menuchoice>."
-
-#: C/f-spot.xml:757(title)
-msgid "Managing extension repositories"
-msgstr ""
-
-#: C/f-spot.xml:759(para)
-msgid "Simply put, repositories are extension storages. They can be either network or local. To add a new repository click Repositories button, choose type of the repository you are about to add and provide either URL or path. If the URL or path you specified doesn't contain a description (index) file for extensions, a warning message will pop up to tell you that."
-msgstr ""
-
-#: C/f-spot.xml:766(para)
-msgid "To remove a repository click <guibutton>Repositories</guibutton> button again, choose the repository you are about to delete and click <guibutton>Delete</guibutton> button."
-msgstr ""
-
-#: C/f-spot.xml:774(title)
-msgid "Installing and updating extensions"
-msgstr "Installera och uppdatera tillägg"
-
-#: C/f-spot.xml:776(para)
-msgid "To install an extension click <guibutton>Install extensions...</guibutton> button. In the newly presented dialog"
-msgstr ""
-
-#: C/f-spot.xml:782(para)
-msgid "Choose repository to install from all known repositories or just one of available repositories."
-msgstr ""
-
-#: C/f-spot.xml:788(para)
-msgid "Choose, what extension packages you want to see: All, Only new, Only updates."
-msgstr ""
-
-#: C/f-spot.xml:793(para)
-msgid "Click the <guibutton>Update</guibutton> button to update list of available extension packages by given criteria."
-msgstr ""
-
-#: C/f-spot.xml:799(para)
-msgid "Choose extensions you want to install/update, click <guibutton>Information</guibutton> to see summary on selected package, if you want to."
-msgstr ""
-
-#: C/f-spot.xml:805(para)
-msgid "Click <guibutton>Forward</guibutton> to proceed with installation."
-msgstr ""
-
-#: C/f-spot.xml:813(title)
-msgid "Enabling and disabling extensions"
-msgstr "Aktivera och inaktivera tillägg"
-
-#: C/f-spot.xml:815(para)
-msgid "You might want to temporarily enable or disable a particular extension package, for example, if the extension is not stable enough to handle a large amount of photos or if menus get crowded with extensions."
-msgstr ""
-
-#: C/f-spot.xml:820(para)
-msgid "In the <guilabel>Manage Extensions</guilabel> dialog select the extension package and click <guibutton>Enable</guibutton> or <guibutton>Disable</guibutton>. You will have to restart F-Spot to let changes apply."
-msgstr ""
-
-#: C/f-spot.xml:828(title)
-msgid "Removing extensions"
-msgstr "Ta bort tillägg"
-
-#: C/f-spot.xml:830(para)
-msgid "If you don't need an extension you can remove it from the system completely. In the <guilabel>Manage Extensions</guilabel> dialog select the extension package you want to remove and click <guibutton>Delete</guibutton>."
-msgstr ""
-
-#: C/f-spot.xml:838(title)
-msgid "Reading summary of extensions"
-msgstr ""
-
-#: C/f-spot.xml:840(para)
-msgid "Every extension package contains metadata that provides the following information about the extension:"
-msgstr ""
-
-#: C/f-spot.xml:846(para)
-msgid "Description, which usually covers puprose of the extension"
-msgstr ""
-
-#: C/f-spot.xml:851(para)
-msgid "Version"
-msgstr "Version"
-
-#: C/f-spot.xml:856(para)
-msgid "Author"
-msgstr "Upphovsman"
-
-#: C/f-spot.xml:861(para)
-msgid "Dependencies"
-msgstr "Beroenden"
-
-#: C/f-spot.xml:867(para)
-msgid "In the <guilabel>Manage Extensions</guilabel> dialog select the extension package you want to read summary of and click <guibutton>Information</guibutton>."
-msgstr ""
-
-#: C/f-spot.xml:875(title)
-msgid "Developing extensions"
-msgstr "Utveckla tillägg"
-
-#: C/f-spot.xml:877(para)
-msgid "<ulink url=\"http://f-spot.org/Extend_F-Spot\">Extend F-Spot</ulink> document gives instructions on developing your own extensions for F-Spot."
-msgstr ""
-
-#: C/f-spot.xml:885(title)
-msgid "Shortcuts"
-msgstr "Genvägar"
-
-#: C/f-spot.xml:888(title)
-msgid "Global Shortcuts"
-msgstr "Globala genvägar"
-
-#: C/f-spot.xml:893(entry)
-#: C/f-spot.xml:977(entry)
-#: C/f-spot.xml:1073(entry)
-#: C/f-spot.xml:1125(entry)
-msgid "Key"
-msgstr "Tangent"
-
-#: C/f-spot.xml:896(entry)
-#: C/f-spot.xml:980(entry)
-#: C/f-spot.xml:1076(entry)
-#: C/f-spot.xml:1128(entry)
-msgid "Action"
-msgstr "Åtgärd"
-
-#: C/f-spot.xml:904(keycap)
-msgid "["
-msgstr "["
-
-#: C/f-spot.xml:906(entry)
-msgid "Rotate the selected photos to the left"
-msgstr "Rotera markerade foton åt vänster"
-
-#: C/f-spot.xml:912(keycap)
-msgid "]"
-msgstr "]"
-
-#: C/f-spot.xml:914(entry)
-msgid "Rotate the selected photos to the right"
-msgstr "Rotera markerade foton åt höger"
-
-#: C/f-spot.xml:920(keycap)
-msgid "t"
-msgstr "t"
-
-#: C/f-spot.xml:922(entry)
-msgid "View or edit tags for selected photos"
-msgstr "Visa eller redigera taggar för markerade foton"
-
-#: C/f-spot.xml:928(keycap)
-msgid "F11"
-msgstr "F11"
-
-#: C/f-spot.xml:930(entry)
-msgid "Full screen view"
-msgstr "Helskärmsvy"
-
-#: C/f-spot.xml:936(keycap)
-#: C/f-spot.xml:944(keycap)
-#: C/f-spot.xml:952(keycap)
-#: C/f-spot.xml:960(keycap)
-#: C/f-spot.xml:988(keycap)
-#: C/f-spot.xml:996(keycap)
-#: C/f-spot.xml:1014(keycap)
-#: C/f-spot.xml:1039(keycap)
-#: C/f-spot.xml:1092(keycap)
-msgid "Ctrl"
-msgstr "Ctrl"
-
-#: C/f-spot.xml:936(keycap)
-msgid "I"
-msgstr "I"
-
-#: C/f-spot.xml:938(entry)
-msgid "Displays information about the photo"
-msgstr "Visar information om fotot"
-
-#: C/f-spot.xml:944(keycap)
-msgid "Equals"
-msgstr "Lika med"
-
-#: C/f-spot.xml:946(entry)
-msgid "Zoom-in"
-msgstr "Zooma in"
-
-#: C/f-spot.xml:952(keycap)
-msgid "Minus"
-msgstr "Minus"
-
-#: C/f-spot.xml:954(entry)
-msgid "Zoom-out"
-msgstr "Zooma ut"
-
-#: C/f-spot.xml:960(keycap)
-msgid "N"
-msgstr "N"
-
-#: C/f-spot.xml:962(entry)
-msgid "Import photos"
-msgstr "Importera foton"
-
-#: C/f-spot.xml:972(title)
-msgid "Browse Mode Shortcuts"
-msgstr "Genvägar i bläddringsläget"
-
-#: C/f-spot.xml:988(keycap)
-#: C/f-spot.xml:997(keycap)
-msgid "A"
-msgstr "A"
-
-#: C/f-spot.xml:990(entry)
-msgid "Select all"
-msgstr "Markera alla"
-
-#: C/f-spot.xml:996(keycap)
-#: C/f-spot.xml:1030(keycap)
-#: C/f-spot.xml:1039(keycap)
-msgid "Shift"
-msgstr "Skift"
-
-#: C/f-spot.xml:999(entry)
-msgid "Unselect all"
-msgstr "Avmarkera alla"
-
-#: C/f-spot.xml:1005(keycap)
-msgid "k"
-msgstr "k"
-
-#: C/f-spot.xml:1006(keycap)
-msgid "j"
-msgstr "j"
-
-#: C/f-spot.xml:1006(keycap)
-msgid "h"
-msgstr "h"
-
-#: C/f-spot.xml:1006(keycap)
-msgid "l"
-msgstr "l"
-
-#: C/f-spot.xml:1004(entry)
-#, fuzzy
-msgid "Arrow keys (up, down, left, right) or <placeholder-1/>, <placeholder-2/>, <placeholder-3/>, <placeholder-4/> keys"
-msgstr "Piltangenterna (upp, ned, vänster, höger) eller tangenterna k, j, h, l"
-
-#: C/f-spot.xml:1008(entry)
-msgid "Move focus"
-msgstr "Flytta fokus"
-
-#: C/f-spot.xml:1013(entry)
-msgid "<placeholder-1/>-arrow key"
-msgstr "<placeholder-1/>-piltangent"
-
-#: C/f-spot.xml:1016(entry)
-msgid "Move the focus without changing the selection"
-msgstr "Flytta fokus utan att ändra markeringen"
-
-#: C/f-spot.xml:1022(keycap)
-#: C/f-spot.xml:1144(keycap)
-msgid "Spacebar"
-msgstr "Blanksteg"
-
-#: C/f-spot.xml:1024(entry)
-msgid "Select or unselect the focused photo"
-msgstr "Markera eller avmarkera det fokuserade fotot"
-
-#: C/f-spot.xml:1031(keycap)
-msgid "arrow key"
-msgstr "piltangent"
-
-#: C/f-spot.xml:1033(entry)
-msgid "Change the photo selection"
-msgstr "Ändra fotomarkeringen"
-
-#: C/f-spot.xml:1040(keycap)
-msgid "left arrow or right arrow"
-msgstr "vänster- eller högerpil"
-
-#: C/f-spot.xml:1042(entry)
-msgid "Add/Remove all photos in the row, in the direction pressed, to the selection"
-msgstr "Lägg till/Ta bort alla foton i raden, i angiven riktning, till markeringen"
-
-#: C/f-spot.xml:1048(keycap)
-#: C/f-spot.xml:1184(keycap)
-#: C/f-spot.xml:1188(keycap)
-msgid "v"
-msgstr "v"
-
-#: C/f-spot.xml:1050(entry)
-msgid "Pops up a larger preview of the picture pointed by the mouse"
-msgstr "Visar en större förhandsvisning av bilden som muspekaren pekar på"
-
-#: C/f-spot.xml:1056(keycap)
-msgid "V"
-msgstr "V"
-
-#: C/f-spot.xml:1058(entry)
-msgid "Pops up a larger preview and a color histogram of the picture pointed by the mouse"
-msgstr "Visar en större förhandsvisning och ett färghistorgram av bilden som muspekaren pekar på"
-
-#: C/f-spot.xml:1068(title)
-msgid "Tag Shortcuts"
-msgstr "Taggenvägar"
-
-#: C/f-spot.xml:1084(keycap)
-msgid "F2"
-msgstr "F2"
-
-#: C/f-spot.xml:1086(entry)
-msgid "Rename selected tag"
-msgstr "Byt namn på markerad tagg"
-
-#: C/f-spot.xml:1092(keycap)
-msgid "T"
-msgstr "T"
-
-#: C/f-spot.xml:1094(entry)
-msgid "Add tags to selected photos"
-msgstr "Lägg till taggar till markerade foton"
-
-#: C/f-spot.xml:1099(entry)
-#: C/f-spot.xml:1107(entry)
-msgid "n/a"
-msgstr "-"
-
-#: C/f-spot.xml:1102(entry)
-msgid "Drag and drop tags to move them"
-msgstr "Dra och släpp taggar för att flytta dem"
-
-#: C/f-spot.xml:1110(entry)
-msgid "Type a tag's name to jump to it (only works if tag is shown/expanded)"
-msgstr "Skriv in taggens namn för att hoppa till den (fungerar endast om taggen visas eller är utfälld)"
-
-#: C/f-spot.xml:1120(title)
-msgid "Edit Mode Shortcuts"
-msgstr "Genvägar i redigeringsläget"
-
-#: C/f-spot.xml:1136(keycap)
-msgid "Page Up"
-msgstr "PageUp"
-
-#: C/f-spot.xml:1138(entry)
-msgid "Go to Previous Photo"
-msgstr "Gå till föregående foto"
-
-#: C/f-spot.xml:1144(keycap)
-msgid "Page Down"
-msgstr "PageDown"
-
-#: C/f-spot.xml:1143(entry)
-msgid "<placeholder-1/>, <placeholder-2/>"
-msgstr "<placeholder-1/>, <placeholder-2/>"
-
-#: C/f-spot.xml:1146(entry)
-msgid "Go to Next Photo"
-msgstr "Gå till nästa foto"
-
-#: C/f-spot.xml:1152(keycap)
-msgid "0"
-msgstr "0"
-
-#: C/f-spot.xml:1154(entry)
-msgid "Fit the image to the screen"
-msgstr "Anpassa bilden till skärmen"
-
-#: C/f-spot.xml:1160(keycap)
-msgid "1"
-msgstr "1"
-
-#: C/f-spot.xml:1162(entry)
-msgid "Zoom Factor to 1.0 (1 screen pixel per image pixel)"
-msgstr "Zoomfaktor till 1.0 (1 bildpunkt på skärmen per bildpunkt i bilden)"
-
-#: C/f-spot.xml:1168(keycap)
-msgid "2"
-msgstr "2"
-
-#: C/f-spot.xml:1170(entry)
-msgid "Zoom Factor to 2.0 (4 screen pixels per image pixel)"
-msgstr "Zoomfaktor till 2.0 (4 bildpunkter på skärmen per bildpunkt i bilden)"
-
-#: C/f-spot.xml:1176(keycap)
-msgid "Escape"
-msgstr "Esc"
-
-#: C/f-spot.xml:1178(entry)
-msgid "Returns to Browser mode"
-msgstr "Återvänder till bläddringsläget"
-
-#: C/f-spot.xml:1186(entry)
-msgid "Examine photo with magnifying glass (Loupe). Doubleclick on the Loupe, or type <placeholder-1/> again to close it."
-msgstr ""
-
-#. Put one translator per line, in the form of NAME <EMAIL>, YEAR1, YEAR2.
-#: C/f-spot.xml:0(None)
-msgid "translator-credits"
-msgstr "Daniel Nylander <po at danielnylander.se>, 2007"
-
-#~ msgid ""
-#~ "To remove redeye from a photo, you need to select each individual eye. "
-#~ "You may want to zoom in on the image to accurately select the eyes in the "
-#~ "photo."
-#~ msgstr ""
-#~ "För att ta bort röda ögon från ett foto behöver du markera varje "
-#~ "individuellt öga. Du kan zooma in i bilden för att lättare kunna markera "
-#~ "ögonen i fotot."
-#~ msgid "Examine photo with magnifying glass (Loupe)"
-#~ msgstr "Undersök fotot med förstoringsglas (lupp)"
-
diff --git a/docs/uk/f-spot.xml b/docs/uk/f-spot.xml
deleted file mode 100644
index f6c2367..0000000
--- a/docs/uk/f-spot.xml
+++ /dev/null
@@ -1,867 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!DOCTYPE book PUBLIC "-//OASIS//DTD DocBook XML 4.1.2//EN" "http://www.oasis-open.org/docbook/xml/4.1.2/docbookx.dtd">
-<book id="f-spot" lang="uk">
- <bookinfo>
- <title>Посібник з F-Spot</title>
- <abstract role="description">
- <para>Посібник користувача з F-Spot — менеджера особистих фото для GNOME.</para>
- </abstract>
- <subtitle>Посібник користувача з F-Spot — менеджера особистих фото для GNOME.</subtitle>
- <copyright>
- <year>2007-2009</year>
- <holder>Aaron Bockover, Gabriel Burt, Miguel de Icaza, Bengt Thuree</holder>
- </copyright><copyright><year>2010.</year><holder>Sergiy Gavrylov (sergiovana at bigmir.net)</holder></copyright>
- <publisher>
- <publishername>Проект документування GNOME</publishername>
- </publisher>
- <authorgroup>
- <author>
- <firstname>Miguel</firstname>
- <surname>de Icaza</surname>
- </author>
- <author>
- <firstname>Aaron</firstname>
- <surname>Bockover</surname>
- </author>
- <author>
- <firstname>Bengt</firstname>
- <surname>Thuree</surname>
- </author>
- <author>
- <firstname>Gabriel</firstname>
- <surname>Burt</surname>
- </author>
- <author>
- <firstname>Alexandre</firstname>
- <surname>Prokoudine</surname>
- </author>
- <author role="maintainer">
- <firstname>Stephane</firstname>
- <surname>Delcroix</surname>
- </author>
- </authorgroup>
- <!--<include href="legal.xml" xmlns="http://www.w3.org/2001/XInclude"/>-->
- <revhistory>
- <revision>
- <revnumber>0.5</revnumber>
- <date>25-09-2008</date>
- </revision>
- <revision>
- <revnumber>0.4</revnumber>
- <date>12-09-2008</date>
- </revision>
- <revision>
- <revnumber>0.3</revnumber>
- <date>26-07-2007</date>
- </revision>
- </revhistory>
- </bookinfo>
-
- <chapter id="organizing">
- <title>Упорядкування фотографій</title>
-
- <sect1 id="import">
- <title>Імпорт</title>
-
- <para>Фотографії можна імпортувати з твердого диска або з камери. Під час імпорту фотографій в F-Spot з камери, у всіх випадках робитимуться їх копії, даючи змогу очистити пам'ять камери. Типово, F-Spot робитиме копії фотографій, які імпортуються з твердого диска. Зніміть прапорець <guilabel>Копіювати</guilabel> в діалозі імпорту або утримуйте клавішу <keycap>Shift</keycap> під час перетягування фотографії в F-Spot, якщо не хочете копіювати їх з твердого диска.</para>
-
- <para>Типово, F-Spot копіює фотографії до теки <filename class="directory">~/Фотографії</filename>. Теку призначення F-Spot можна змінити в діалозі <guilabel>Параметри</guilabel> (<menuchoice><guimenu>Правка</guimenu><guimenuitem>Параметри</guimenuitem></menuchoice>). Також можна вимкнути фізичне копіювання зображень в цей каталог і створити лише посилання в F-Spot на існуючі файли. Для цього потрібно зняти прапорець <guilabel>Копіювати файли до теки «Фотографії»</guilabel>.</para>
- <para>Якщо є вірогідність, що деякі з ваших фотографій вже імпортовано з вибраного джерела, використовуйте функцію <guilabel>Виявлення дублікатів</guilabel>. У цьому випадку F-Spot спробує з'ясувати чи це зображення вже є в базі даних і, якщо є, нова копія не буде імпортована.</para>
- <para>Якщо всі фотографії, які імпортуються за один раз, мають відношення до певної події чи мають інші загальні характеристики, ви можете створити позначку для них, щоб пізніше з легкістю знайти їх. Щоб зробити це, дивіться <xref linkend="tag"/> зробіть нову позначку, потім, під час імпортування фото, натисніть кнопку <guilabel>Додати позначку</guilabel> і виберіть створену вами позначку.</para>
-
- <tip>
- <para>F-Spot використовує базу даних розташовану в каталозі <filename>~/.config/f-spot/photos.db</filename>. Зверніть увагу, щоб отримати доступ до нього, потрібно використовувати команду sqlite3. Ви також можете вручну вказати шлях до бази даних, запустивши F-Spot з параметром <option>-b</option>.</para>
- </tip>
-
- <para>Після імпорту, F-Spot покаже фотографії лише з останнього сеансу імпорту. Щоб дізнатися, як мати справу з сеансами імпорту, дивіться <xref linkend="enjoying-search"/>.</para>
- <para>Імпортувати можна прямо з Mozilla <ulink url="http://www.mozilla.com/en-US/firefox/">Firefox</ulink> та <ulink url="http://www.mozilla.com/en-US/thunderbird/">Thunderbird</ulink> використовуючи розширення <ulink url="https://addons.mozilla.org/en-US/firefox/addon/7091">Firefox</ulink> та <ulink url="https://addons.mozilla.org/en-US/thunderbird/addon/7011">Thunderbird</ulink> F-Spot для імпортування фото, написане <ulink url="http://personalpages.tds.net/~cdovel/">Pizzach</ulink>.</para>
- </sect1>
-
- <sect1 id="edit">
- <title>Редагування</title>
-
- <para>Двічі клацніть кнопкою миші з вказівником на зображені або натисніть клавішу ENTER, щоб перейти в режим редагування, де можна вилучити ефект червоних очей, зробити кадрування та налаштувати яскравість та кольори.</para>
-
- <sect2 id="edit-versions">
- <title>Версії</title>
-
- <para>Під час редагування фотографій, створюється нова копія (або варіант), так що ваші оригінальні фото ніколи не змінюються. Після першого редагування, наступні виправлення вноситимуться в ту ж версію. Якщо потрібно створити декілька версій фотографії, можливо, різних розмірів і забарвлення, зробити це можна вибравши в меню <menuchoice><guimenu>Файл</guimenu><guimenuitem>Створити нову версію</guimenuitem></menuchoice>.</para>
- </sect2>
-
- <sect2 id="edit-crop">
- <title>Кадрування</title>
-
- <para>Кадрування зображення — відмінний спосіб поліпшити якість фотографії змінивши її оформлення. Щоб виконати кадрування фото, виберіть частину фотографії, яку хотіли б зберегти. Якщо потрібно, щоб фотографія мала точні розміри необхідні для друку, можна вибрати готовий варіант. F-Spot дає змогу вибрати відповідний розмір зі спадного списку варіантів кадрування. Докладніше дивіться <xref linkend="edit-remove-red-eye"/> про внесення змін до фотографій.</para>
- <figure>
- <title>Кадрування</title>
- <mediaobject>
- <imageobject>
- <imagedata fileref="figures/f-spot-crop.png"/>
- </imageobject>
- </mediaobject>
- </figure>
- <para>Як тільки буде вибраний варіант кадрування, необхідно натиснути кнопку «Кадрувати» під зображенням, щоб завершити кадрування. Якщо ви працюєте з оригіналом фотографії, операція кадрування створить нову версію цієї фотографії.</para>
- </sect2>
-
- <sect2 id="edit-straighten">
- <title>Вирівнювання</title>
-
- <para>Ефект вирівнювання — це інструмент для вирівнювання зображення на фото, досить корисний для фотографування пейзажів без штатива, коли (уявна) лінія горизонту не дорівнює 0°. Цей інструмент дає змогу зробити поворот зображення на заданий кут і автоматично кадрувати виникле зображення, отже, ви завжди бачитимете досконалий прямокутник.</para>
- <figure>
- <title>Вирівнювання</title>
- <mediaobject>
- <imageobject>
- <imagedata fileref="figures/f-spot-straighten.png"/>
- </imageobject>
- </mediaobject>
- </figure>
- </sect2>
-
- <sect2 id="edit-adjust-colors">
- <title>Коригування кольорів</title>
-
- <para>Щоб відкоригувати яскравість, контрастність і кольори фотографії, натисніть кнопку <guibutton>Коригувати кольори</guibutton>, щоб відкрити діалог коригування. Змініть потрібні параметри і збережіть їх натиснувши кнопку <guibutton>Гаразд</guibutton>.</para>
- <figure>
- <title>Коригувати кольори</title>
- <mediaobject>
- <imageobject>
- <imagedata fileref="figures/f-spot-adjust-colors.png"/>
- </imageobject>
- </mediaobject>
- </figure>
- </sect2>
-
- <sect2 id="edit-auto-color">
- <title>Автокорекція кольорів</title>
-
- <para>Цей ефект автоматично коригує рівні яскравості та кольору, щоб зробити зображення з приємно-збалансованими кольорами. Найкраще його використовувати для фотографій, зроблених з автоматичним балансом білого, коли камері не вдалося зробити знімок добре.</para>
- <figure>
- <title>Автокорекція кольорів</title>
- <mediaobject>
- <imageobject>
- <imagedata fileref="figures/f-spot-autocolor.png"/>
- </imageobject>
- </mediaobject>
- </figure>
- </sect2>
-
- <sect2 id="edit-desaturate">
- <title>Знебарвлення</title>
-
- <para>Щоб зробити кольорову фотографію чорно-білою, відкрийте потрібну фотографію та натисніть кнопку <guibutton>Знебарвлення</guibutton>.</para>
- <figure>
- <title>Знебарвлення</title>
- <mediaobject>
- <imageobject>
- <imagedata fileref="figures/f-spot-desaturate.png"/>
- </imageobject>
- </mediaobject>
- </figure>
- </sect2>
-
- <sect2 id="edit-sepia">
- <title>Сепія</title>
-
- <para>Щоб зробити кольорову фотографію, як зображення у старому стилі з відтінками у сепії, відкрийте потрібну фотографію та натисніть кнопку <guibutton>Тонувати у сепію</guibutton>.</para>
- <figure>
- <title>Знебарвлення</title>
- <mediaobject>
- <imageobject>
- <imagedata fileref="figures/f-spot-sepia.png"/>
- </imageobject>
- </mediaobject>
- </figure>
- </sect2>
-
- <sect2 id="edit-remove-red-eye">
- <title>Вилучення ефекту червоних очей</title>
-
- <para>Щоб вилучити ефект червоних очей з фотографії, необхідно вибрати область, яка містить очі. Якщо потрібно, збільшіть зображення, щоб вибрати точне розташування очей на фотографії. Необхідно відкоригувати обидва ока однієї і тієї ж особи або навіть очі кількох людей за один раз. Якщо не вдасться це зробити, або вибрана область містить яскраві червоні елементи (губи тощо) вам, ймовірно, прийдеться усувати ефект червоних очей для кожного ока окремо.</para>
- <para>Щоб вибрати область очей, натисніть ліву кнопку миші з вказівником в одному кутку майбутнього прямокутника і перетягніть мишу по діагоналі в протилежний кут і відпустіть кнопку. Змінювати розмір прямокутника можна шляхом перетягування його країв. Щоб перемістити прямокутник, потрібно натиснути ліву кнопку миші з вказівником в його середині і перетягнути його в потрібне місце.</para>
- <para>Після виділення області червоних очей, вилучіть ефект, натиснувши кнопку «Корекція червоних очей», розташовану під фотографією.</para>
- <figure>
- <title>Корекція червоних очей</title>
- <mediaobject>
- <imageobject>
- <imagedata fileref="figures/f-spot-red-eye.png"/>
- </imageobject>
- </mediaobject>
- </figure>
- <tip>
- <para>Ви можете змінити поріг виявлення ефекту червоних очей змінивши ключ gconf <filename class="directory">/apps/f-spot/edit/redeye_threshold</filename>.</para>
- </tip>
- </sect2>
-
- <sect2 id="edit-soft-focus">
- <title>М’який фокус</title>
-
- <para>У фотографії, збільшення різкості однієї області зображення, в той час як інша залишається нечіткою — спосіб зробити акцент та привернути увагу. Цей ефект досягається шляхом використання лінз, які дають змогу фотографувати з короткої відстані перед і за об'єктом, в той час як він залишається у фокусі. Способом для імітації таких лінз і є ефект «М'який фокус».</para>
- <figure>
- <title>М’який фокус</title>
- <mediaobject>
- <imageobject>
- <imagedata fileref="figures/f-spot-soft-focus.png"/>
- </imageobject>
- </mediaobject>
- </figure>
- <para>Натисніть, щоб вибрати центральну точку області, яку хочете мати у фокусі та встановіть величину нечіткого зображення і натисніть кнопку <guibutton>Гаразд</guibutton>.</para>
- </sect2>
-
- <sect2 id="edit-sharpen">
- <title>Різкість</title>
-
- <para>Фотографії не у фокусі та більшість оцифрованих зображень часто потребують корекції різкості. Ефект «Unsharp Mask» надає різкості краям елементів без збільшення кількості вад чи плям. Щоб збільшити різкість фото виберіть в меню <menuchoice><guimenu>Правка</guimenu><guimenuitem>Підвищити різкість...</guimenuitem></menuchoice> і деталізуйте такі значення:</para>
-
- <itemizedlist>
- <listitem>
- <para><parameter class="option">Величина</parameter> — інтенсивність різкості.</para>
- </listitem>
- <listitem>
- <para><parameter class="option">Радіус</parameter> — відстань в пікселях з кожного боку лінії, на яку впливатиме збільшення різкості. Зображення з високою роздільною здатністю допускають більший радіус.</para>
- </listitem>
- <listitem>
- <para><parameter class="option">Поріг</parameter> — мінімальна різниця в пікселях, яка показує ширину лінії до якої буде застосоване збільшення різкості. Дає змогу уникнути створення плям на обличчі, небі або поверхні води.</para>
- </listitem>
- </itemizedlist>
- </sect2>
-
- <sect2 id="edit-describe">
- <title>Опис</title>
-
- <para>Ви можете також зробити опис зображення клацнувши на полі введення тексту під зображенням і ввести потрібний текст.</para>
- <para>Як тільки буде вибраний варіант кадрування, необхідно натиснути кнопку «Кадрувати» під зображенням, щоб завершити кадрування. Якщо ви працюєте з оригіналом фотографії, операція кадрування створить нову версію цієї фотографії.</para>
- </sect2>
-
- <sect2 id="edit-adjust-time">
- <title>Коригування часу</title>
-
- <para>Як в режимі перегляду так і в режимі редагування, можна скоригувати час для одного або багатьох зображень (<menuchoice><guimenu>Правка</guimenu><guimenuitem>Коригувати час</guimenuitem></menuchoice>). Коригування часу для багатьох фотографій одночасно дає змогу змістити час на всіх фото з сеансу імпорту, наприклад, якщо час на вашій камері невірно встановлений, або якщо ви забули змінити його у відповідності до DST.</para>
- </sect2>
- </sect1>
-
- <sect1 id="tag">
- <title>Позначка</title>
- <para>F-Spot дає змогу упорядкувати і користуватись фотографіями, пов’язуючи їх різними користувацькими позначками. Позначка це всього лише ярлик. F-Spot поставляється з типовими позначками, щоб ви могли розпочати працювати з ними. Їх можна змінювати або додавати нові. Наприклад, якщо ви хочете створити позначку для особливої події, дайте їй назву цієї події під позначкою «Події».</para>
- <para>Є багато способів позначати фотографії:</para>
- <itemizedlist>
- <listitem>
- <para>перетягнути фото на позначку</para>
- </listitem>
- <listitem>
- <para>перетягнути позначку на фото</para>
- </listitem>
- <listitem>
- <para>через контекстне меню фото</para>
- </listitem>
- <listitem>
- <para>через меню «Позначки» та «Правка»</para>
- </listitem>
- <listitem>
- <para>просто введіть їх. Натисніть клавішу <keycap>t</keycap>, щоб викликати поле введення позначки і введіть текст позначок, відокремлюючи їх комами.</para>
- <para>В цьому полі введення можна використовувати авто-завершення. Після введення початку назви позначки, натисніть клавішу <keycap>Tab</keycap>, щоб побачити перший можливий варіант завершення. Циклічно натискайте клавішу <keycap>Tab</keycap>, щоб переходити між варіантами завершення або комбінацію клавіш <keycombo action="simul"><keycap>Shift</keycap><keycap>Tab</keycap></keycombo>, щоб переходити у зворотньому напрямку. Для підтвердження запропонованого завершення і введення нової позначки, натисніть клавішу <keycap>,</keycap>. Натиснувши клавішу <keycap>Enter</keycap> ви залишаєте поле введення, підтвердивши чинне завершення. Щоб скасувати авто-завершення, просто продовжуйте вводити текст.</para>
- </listitem>
- </itemizedlist>
- <para>Перше фото, яке пов’язане з позначкою, буде використовуватися як значок для цієї позначки. Ви завжди можете змінити назву позначки, батьківську позначку та значок, вибравши в контекстному меню пункт <guilabel>Редагувати позначку</guilabel>.</para>
- <para>Ви можете змінити батька позначки, перетягнувши її в будь-яке місце. Крім того, можна змінити назву позначки виділивши її та натиснувши <keycap>F2</keycap>. І нарешті, якщо віджет дерева позначок у фокусі (наприклад, ви тільки що натиснули на позначку), ви можете просто почати вводити назву позначки і пошук вестиметься по всьому списку позначок і ви перейдете у відповідну.</para>
-
- <para>Щоб змінити розмір значка позначки в бічній панелі, або навіть зробити його невидимим, виберіть потрібний варіант в меню <menuchoice><guimenu>Вигляд</guimenu><guimenuitem>Значки позначок</guimenuitem></menuchoice>.</para>
-
- <tip>
- <para>F-Spot може записувати позначки як поля метаданих у файли JPEG. Позначки для різних форматів файлів: RAW, PNG, TIFF та інших, записуються у базу даних F-Spot. Вам доведеться заново позначати ці файли, якщо ви повторно імпортуватимете колекцію.</para>
- </tip>
- </sect1>
- </chapter>
-
- <chapter id="enjoying">
- <title>Перегляд фотографій</title>
- <sect1 id="enjoying-browse">
- <title>Перегляд</title>
- <para>Використовуйте повзунок для перегляду фотографій за датою створення або за каталогом. Щоб змінити цей параметр, перейдіть до меню <menuchoice><guimenu>Вигляд</guimenu><guimenuitem>Упорядкувати за</guimenuitem></menuchoice>.</para>
- </sect1>
- <sect1 id="enjoying-search">
- <title>Пошук</title>
-
- <para>F-Spot використовує пошукові фільтри, щоб допомогти вам краще визначити критерії пошуку.</para>
-
- <sect2 id="enjoying-search-tags">
- <title>Позначки</title>
-
- <para>Почати пошук можна за допомогою подвійного натискання або активувавши позначку в списку позначок. Як альтернатива, відкрийте панель пошуку через меню <menuchoice><guimenu>Знайти</guimenu><guimenuitem>Показати панель пошуку</guimenuitem></menuchoice> та перетягніть позначку з бічної панелі на панель пошуку.</para>
- <para>Щоб знайти фото помічені двома позначками, активуйте першу в бічній панелі або перетягніть її на панель пошуку, потім перетягніть другу і помістіть її поверх першої. Також можна натиснути праву кнопку миші з вказівником на другій позначці в бічній панелі або через меню <guimenu>Знайти</guimenu>, і в контекстному меню вибрати пункт <guimenuitem>Шукати з...</guimenuitem> і вибрати першу позначку (чи групу позначок).</para>
- <para>Щоб знайти фотографію з певною позначкою, перетягніть її значок на панель пошуку.</para>
- <para>Можна шукати фото, які не мають окремої позначки, двічі клацнувши на позначці в панелі пошуку. Як альтернатива, натисніть праву кнопку миші з вказівником на позначці в панелі пошуку і виберіть <guimenuitem>Виключаючи знімки з позначкою</guimenuitem>.</para>
- <para>Щоб вилучити позначку з пошуку, перетягніть її з панелі пошуку, або натисніть праву кнопку миші з вказівником на ній і виберіть в контекстному меню пункт <guimenuitem>Вилучити з пошуку</guimenuitem>.</para>
- <para>Типово, фото під позначкою <emphasis>Приховане</emphasis> не будуть показані. Ви маєте явно включити позначку <emphasis>Приховане</emphasis> у пошук, щоб побачити ці фото.</para>
- </sect2>
-
- <sect2 id="enjoying-search-import-rolls">
- <title>Сеанси імпорту</title>
- <para>F-Spot пам’ятає які зображення імпортуються час від часу. Скористайтесь меню <menuchoice><guimenu>Знайти</guimenu><guisubmenu>Сеанс імпорту</guisubmenu><guimenuitem>Останній сеанс імпорту</guimenuitem></menuchoice>, щоб обмежити пошук лише останнім сеансом імпорту, або меню <menuchoice><guimenu>Знайти</guimenu><guisubmenu>Сеанс імпорту</guisubmenu><guimenuitem>Вибрати сеанс імпорту...</guimenuitem></menuchoice>, щоб зробити детальний відбір імпортованих фотографій:</para>
- <itemizedlist>
- <listitem>
- <para><parameter class="option">Під час</parameter> — щоб вибрати фотографії з конкретного сеансу імпорту</para>
- </listitem>
- <listitem>
- <para><parameter class="option">Після</parameter> — щоб вибрати всі фотографії, імпортовані починаючи з конкретного сеансу імпорту</para>
- </listitem>
- <listitem>
- <para><parameter class="option">Між</parameter> — щоб вибрати всі фотографії, імпортовані між двома конкретними сеансами імпорту</para>
- </listitem>
- </itemizedlist>
- <para>Під час кожної зміни параметрів фільтра, кількість вибраних фотографій з'являтиметься в нижній частині діалогового вікна.</para>
- <para>Коли ви підтвердите вибір даних у фільтрі сеансу імпорту, в панелі пошуку з’явиться рядок <guilabel>Знайти: Сеанс імпорту</guilabel>. Тепер ви можете додати інші фільтри, щоб деталізувати критерії пошуку.</para>
- <para>Якщо ви більше не потребуєте фільтра сеансу імпорту, виберіть в меню <menuchoice><guimenu>Знайти</guimenu><guisubmenu>Сеанс імпорту</guisubmenu><guimenuitem>Прибрати фільтр сеансів імпорту</guimenuitem></menuchoice>, щоб вилучити сеанс імпорту з критеріїв пошуку. Також можна натиснути кнопку закривання (<guibutton>X</guibutton>) панелі пошуку, щоб відкинути всі наявні варіанти пошуку.</para>
- <tip>
- <para>Кількість сеансів, які будуть показані у діалоговому вікні визначається ключем gconf <filename class="directory">/apps/f-spot/import/gui_roll_history</filename>. Типове значення — 10.</para>
- </tip>
- </sect2>
-
- <sect2 id="enjoying-search-type-to-find">
- <title>Пошук під час введення</title>
- <para>Існує також поле для пошуку під час введення. Натисніть клавішу <keycap>/</keycap>, щоб його відкрити. Це поле не можна використовувати одночасно з панеллю пошуку. Введіть запит таким чином: позначкаA та (позначкаB або (позначкаC та позначкаD)). Як тільки F-Spot розпізнає введене як правильний запит, результат пошуку з'явиться у вікні. Оператор <emphasis>not</emphasis> поки що не підтримується.</para>
-
- <para>За допомогою цієї функції, пошук введеного тексту вестиметься також у коментарях та у назвах файлів фотографій.</para>
- </sect2>
- </sect1>
-
- <sect1 id="enjoying-fullscreen-mode-and-slideshows">
- <title>Повноекранний режим та показ слайдів</title>
- <para>Щоб менше відволікатися і побачити зображення більшими, фотографії можна переглядати в повноекранному режимі. У цьому режимі доступний перехід до наступного фото або повернення до попереднього. Щоб перейти у повноекранний режим, натисніть клавішу <keycap>F11</keycap> або кнопку на панелі інструментів.</para>
- <figure>
- <title>На весь екран</title>
- <mediaobject>
- <imageobject>
- <imagedata fileref="figures/f-spot-fullscreen.png"/>
- </imageobject>
- </mediaobject>
- </figure>
- <para>У режимі перегляду слайдів, ви можете сидіти склавши руки і переглядати фотографії одну за іншою. Щоб запустити показ слайдів, натисніть кнопку на панелі інструментів.</para>
- <figure>
- <title>Показ слайдів</title>
- <mediaobject>
- <imageobject>
- <imagedata fileref="figures/f-spot-slideshow.png"/>
- </imageobject>
- </mediaobject>
- </figure>
- </sect1>
- </chapter>
-
- <chapter id="sharing">
- <title>Спільне користування фотографіями</title>
-
- <abstract>
- <para>Існує багато способів, спільного користування фотографіями у F-Spot. Усі наступні методи спільного користування фотографіями доступні лише, якщо ви виберете їх під час запуску.</para>
- </abstract>
-
- <sect1 id="sharing-e-mail">
- <title>Пересилка електронною поштою</title>
- <para>Надіслати свої фото електронною поштою можна прямо з F-Spot через меню <menuchoice><guimenu>Файл</guimenu><guimenuitem>Надіслати поштою</guimenuitem></menuchoice>.</para>
- <note>
- <title>Зауваження 1</title>
- <para>Поштова програма, що використовується для цього, залежить від налаштувань середовища GNOME. Ви можете змінити типову поштову програму використовуючи інструмент <application>Стандартні програми</application> в меню <menuchoice><guimenu>Система</guimenu><guisubmenu>Параметри</guisubmenu></menuchoice>.</para>
- </note>
- <note>
- <title>Зауваження 2</title>
- <para>Якщо деякі фотографії, які ви хочете надіслати електронною поштою, мають формат, в який F-Spot не вміє зберігати (наприклад, зображення RAW), діалог вибору розміру стане нечутливим і будуть відправлені оригінали фото.</para>
- </note>
- <tip>
- <para>Якщо ви відсилаєте зображення зі зміненими розмірами, F-Spot збереже змінені версії десь у каталозі <filename class="directory">/tmp</filename> на 30 секунд. Це не важливо для програми Evolution, яка створює власні локальні копії вкладень, однак це допоможе дещо спростити роботу з Thunderbird. Встановити потрібний час затримки можна, змінюючи значення ключа gconf <filename class="directory">/apps/f-spot/export/email/delete_timeout_seconds</filename>.</para>
- </tip>
- </sect1>
-
- <sect1 id="sharing-print">
- <title>Друк</title>
- <para>Щоб надрукувати фото, використовуйте меню <menuchoice><guimenu>Файл</guimenu><guimenuitem>Друк</guimenuitem></menuchoice>.</para>
- </sect1>
-
- <sect1 id="sharing-burn-to-cd">
- <title>Запис на CD</title>
- <para>Щоб записати фото на CD або DVD, використовуйте меню <menuchoice><guimenu>Файл</guimenu><guisubmenu>Експорт</guisubmenu><guimenuitem>Експорт до CD</guimenuitem></menuchoice>.</para>
- </sect1>
-
- <sect1 id="website-gallery-folder">
- <title>Створення веб-галереї або теки</title>
- <para>Функція <menuchoice><guimenu>Файл</guimenu><guimenuitem>Експортувати до</guimenuitem><guimenuitem>У теку</guimenuitem></menuchoice> надає три способи експорту зображень.</para>
- <itemizedlist>
- <listitem>
- <para><guilabel>Використовувати Original</guilabel> — експортує фотографії вже готовими для використання у вільній програмі Якуба Штайнера (Jakub Steiner) <ulink url="http://jimmac.musichall.cz/original.php"> Original Photo Gallery</ulink>. Якщо ви не знаєте, що це таке, цей вибір навряд чи буде вдалим.</para>
- </listitem>
- <listitem>
- <para><guilabel>Використовувати статичні файли HTML</guilabel> — експортує фотографії до інтерактивного веб-сайту, готового до вивантаження від вас.</para>
- </listitem>
- <listitem>
- <para><guilabel>Прості файли</guilabel> — експортує зображення як файли в межах каталогів, не включаючи їх у галерею.</para>
- </listitem>
- </itemizedlist>
- </sect1>
-
- <sect1 id="sharing-flickr-or-php-gallery">
- <title>Публікація в онлайн-галереях</title>
- <para>Для користувачів Flickr, SmugMug, 23hq, Tabblo, Facebook, Zooomr або Picasa Web Album, надається можливість публікувати зображення прямо з F-Spot, через меню <menuchoice><guimenu>Файл</guimenu><guisubmenu>Експортувати до</guisubmenu></menuchoice>, вибравши в підменю відповідний пункт.</para>
- <para>Користувачі програмного забезпечення, відомого як <ulink url="http://gallery.sourceforge.net/"> Gallery</ulink>, можуть публікувати свої фото у наявному альбомі через меню <menuchoice><guimenu>Файл</guimenu><guimenuitem>Експортувати до</guimenuitem><guimenuitem>Web Gallery</guimenuitem></menuchoice>. Під час встановлення Gallery потрібно увімкнути модуль віддаленого керування (Remote plugin).</para>
- <note>
- <title>Примітка для користувачів Gallery 2.2</title>
- <para>Модуль Remote plugin для Gallery має бути версії 1.0.8 або новіший.</para>
- </note>
- <para><ulink url="http://pennave.sourceforge.net">PennAve</ulink> — веб-програма, написана мовою Python, яка на пряму використовує базу даних F-Spot для презентації динамічної галереї ваших фотографій та позначок.</para>
- <para><ulink url="http://www.conduit-project.org">Conduit</ulink> — програма, яка здатна синхронізувати фотографії, які мають певні позначки, з веб-сховищами Flickr і Picasa Web Album.</para>
- </sect1>
- </chapter>
-
- <chapter id="cms">
- <title>Керування кольором</title>
-
- <sect1 id="cms-what-is-cms">
- <title>Що це — керування кольором?</title>
-
- <para>Під час перегляду фотографії на дисплеї комп'ютера, вона виглядатиме дещо інакше, ніж на дисплеї фотокамери або на будь-якому іншому дисплеї. Також інакше вона виглядатиме і після друку на принтері. Тому, що кожний такий пристрій має свої власні характеристики відтворення кольору.</para>
-
- <para>Система керування кольором (CMS) — це інструмент для досягнення достовірного відтворення кольорів як на дисплеї, так і на пристрої виведення, наприклад принтері. В основі CMS лежать колірні профілі, які порівнюють оригінальні кольори та кольори, які зможе відтворити пристрій, тому кольори виглядають однаково на всіх пристроях: на рідкокристалічному моніторі, на знімку надрукованому у фотолабораторії тощо.</para>
- </sect1>
-
- <sect1 id="cms-what-is-icc-profile">
- <title>Що це — колірний профіль?</title>
-
- <para>Колірний профіль — це або файл з розширенням .icc (часто його називають ICC-профілем), або файл з розширенням .icm, який описує, як кольори пристрою, відповідають універсального опису кольорів.</para>
-
- <para>Існує кілька типів профілів:</para>
-
- <itemizedlist>
- <listitem>
- <para>Профіль пристрою введення. Цей профіль для фотокамери або профіль для таких програм, як XSane, який вбудовується в скановане зображення.</para>
- </listitem>
- <listitem>
- <para>Профіль робочого простору. Цей профіль описує колірний простір в якому виконуються всі операції у програмі. Зазвичай, для цього використовуються профілі досить широкого діапазону — AdobeRGB1998 або ProPhotoRGB.</para>
- </listitem>
- <listitem>
- <para>Профіль дисплея — це профіль для відеомонітора.</para>
- </listitem>
- <listitem>
- <para>Профіль виведення. Зазвичай, це профіль для принтера.</para>
- </listitem>
- </itemizedlist>
-
- <para>На цей час, F-Spot дає змогу налаштовувати лише профілі дисплея та виведення. Всі операції з кольором виконуються в колірному просторі sRGB.</para>
- </sect1>
-
- <sect1 id="cms-how-to-get-icc-profile">
- <title>Як отримати колірний профіль дисплея або принтера?</title>
-
- <para>Існує кілька способів отримати колірний профіль.</para>
-
- <sect2 id="cms-icc-from-cd-or-internet">
- <title>З компакт-диска або з Інтернету</title>
-
- <para>Багато виробників апаратного забезпечення надають колірні профілі на компакт-дисках, що йдуть в комплекті з пристроями. Якщо у вас є такий диск (для монітора або принтера), ви можете його використовувати. Або можете завантажити профілі з Інтернету (зазвичай, з розділу підтримки на веб-сайті виробника). Деякі виробники камер (Nikon, Canon) також надають профілі ICC.</para>
- </sect2>
-
- <sect2 id="cms-icc-from-calibrating-and-profiling">
- <title>Калібрування та створення профілю</title>
-
- <para>Найкращих результатів можна досягнути через калібрування та створення профілів пристроїв за допомогою вимірювального приладу. Це не так уже й складно, проте вам буде необхідний спектрофотометр, щоб зробити всі вимірювання та створити профіль МУС.</para>
-
- <para>Якщо ви працюєте у Windows або Mac OS X, використовуйте програмне забезпечення виробника спектрофотометра. В Linux — використовуйте, або набір багатоцільових інструментів для роботи у командному рядку <ulink url="http://www.argyllcms.com">Argyll</ulink>, або графічний інтерфейс користувача <ulink url="http://lprof.sourceforge.net/">LProf</ulink>.</para>
- <para>За додатковою інформацією звертайтеся до документації постачальників стороннього апаратного та програмного забезпечення.</para>
- </sect2>
-
- <sect2 id="cms-icc-from-embedding">
- <title>Вкладення</title>
-
- <para>Формати файлів зображень (такі як TIFF, JPEG, PNG тощо) самі можуть містити вкладені колірні профілі. Якщо керування кольором увімкнено, F-Spot шукатиме такі профілі і прийматиме їх до уваги.</para>
- </sect2>
- </sect1>
-
- <sect1 id="cms-how-to-use">
- <title>Як використовувати керування кольором в F-Spot</title>
-
- <para>На цей час, керування кольором в F-Spot, використовує лише профілі RGB (в F-Spot ви не можете бачити інші профілі).</para>
-
- <itemizedlist>
- <listitem>
- <para>Скопіюйте колірні профілі у каталог <filename class="directory">/usr/share/color/icc</filename> або <filename class="directory">/usr/local/share/color/icc</filename>.</para>
- </listitem>
- <listitem>
- <para>Увімкніть керування кольором в меню <menuchoice><guimenu>Правка</guimenu><guimenuitem>Параметри</guimenuitem></menuchoice>.</para>
- </listitem>
- <listitem>
- <para>Виберіть профілі для <guilabel>Монітора</guilabel> та для <guilabel>Друку</guilabel>.</para>
- </listitem>
- </itemizedlist>
-
- <tip>
- <para>Використовуйте веб-сайт <ulink url="http://burtonini.com/blog/computers/xicc">xicc</ulink>, щоб завантажити профіль ICC для монітора і працювати з ним в F-Spot. Просто поставте прапорець <guilabel>Спробувати використовувати системний профіль</guilabel>.</para>
- </tip>
- </sect1>
- </chapter>
-
- <chapter id="extend">
- <title>Розширення функціональності</title>
-
- <sect1 id="extend-what-extensions-are">
- <title>Що це — розширення?</title>
-
- <para>Розширення F-Spot додають програмі нові функціональні можливості. F-Spot підтримує два види розширень: програми експорту (дають змогу експортувати фотографії до нових веб-служб або сховищ даних) та інструменти (надають нові методи корекції кольору, пошук дублікатів фотографій тощо). Розширення розповсюджуються у вигляді пакунків розширень.</para>
- <para>Одні розширення можуть використовувати інші розширення, а це означає, що одне не може працювати, якщо інше не встановлено. Ця концепція залежностей фактично означає, що:</para>
- <itemizedlist>
- <listitem>
- <para>не можна встановити розширення, залежне від іншого, не встановленого в системі</para>
- </listitem>
- <listitem>
- <para>не можна вилучити розширення, від якого залежать інші</para>
- </listitem>
- </itemizedlist>
- </sect1>
-
- <sect1 id="extend-managing-extensions">
- <title>Керування розширеннями</title>
-
- <para>Щоб налаштувати розширення, відкрийте пункт меню <menuchoice><guimenu>Правка</guimenu><guimenuitem>Налаштування розширень</guimenuitem></menuchoice>.</para>
-
- <sect2 id="extend-managing-extensions-managing-extension-repositories">
- <title>Керування репозиторіями розширень</title>
-
- <para>Простіше кажучи, репозиторії — це сховища розширень. Вони бувають або мережевими, або локальними. Щоб додати новий репозиторій натисніть кнопку «Джерела», виберіть тип репозиторію, який збираєтеся додати, його URL або шлях до нього. Якщо вказаний URL або шлях не містять опису (індексу) файла розширення, з'явиться попереджувальне повідомлення.</para>
- <para>Щоб вилучити репозиторій, знову натисніть кнопку <guibutton>Джерела...</guibutton> виділіть репозиторій, який хочете вилучити, і натисніть кнопку <guibutton>Вилучити</guibutton>.</para>
- </sect2>
-
- <sect2 id="extend-managing-extensions-installing-and-updating-extensions">
- <title>Встановлення та оновлення розширень</title>
-
- <para>Щоб встановити розширення, натисніть кнопку <guibutton>Встановити розширення...</guibutton>. У діалоговому вікні, яке з’явиться:</para>
- <orderedlist>
- <listitem>
- <para>Виберіть репозиторій для встановлення, з усіх відомих або один з доступних.</para>
- </listitem>
- <listitem>
- <para>Виберіть пакунки розширень, які хочете бачити: всі, лише нові, лише оновлені.</para>
- </listitem>
- <listitem>
- <para>Натисніть кнопку <guibutton>Оновити</guibutton>, щоб оновити список доступних пакунків розширення за визначеними критеріями.</para>
- </listitem>
- <listitem>
- <para>Виберіть розширення для встановлення або оновлення. Якщо хочете побачити короткий опис вибраного пакунку, натисніть кнопку <guibutton>Інформація</guibutton>.</para>
- </listitem>
- <listitem>
- <para>Натисніть кнопку <guibutton>Вперед</guibutton>, щоб перейти до встановлення.</para>
- </listitem>
- </orderedlist>
- </sect2>
-
- <sect2 id="extend-managing-extensions-enabling-and-disabling-extensions">
- <title>Увімкнення та вимкнення розширень</title>
-
- <para>Можливо, виникне необхідність тимчасово увімкнути або вимкнути певний пакунок розширень. Наприклад, якщо розширення не достатньо стабільне, щоб ним можна було без ризику обробити велику кількість фотографій, або якщо меню переповнені розширеннями.</para>
- <para>В діалоговому вікні <guilabel>Керування розширеннями</guilabel>, виберіть потрібний пакунок і натисніть кнопку <guibutton>Увімкнути</guibutton> або <guibutton>Вимкнути</guibutton>.</para>
- </sect2>
-
- <sect2 id="extend-managing-extensions-removing-extensions">
- <title>Вилучення розширень</title>
-
- <para>Якщо розширення більше не потрібне, його можна вилучити з системи повністю. В діалоговому вікні <guilabel>Керування розширеннями</guilabel>, виберіть пакунок розширення, який хочете вилучити і натисніть кнопку <guibutton>Вилучити</guibutton>.</para>
- </sect2>
-
- <sect2 id="extend-managing-extensions-reading-summary-of-extensions">
- <title>Короткий опис розширень</title>
-
- <para>Кожен пакунок розширення містить метадані, які дають змогу отримати таку інформацію:</para>
-
- <orderedlist>
- <listitem>
- <para>Опис, у якому, зазвичай, описане призначення розширення</para>
- </listitem>
- <listitem>
- <para>Версія</para>
- </listitem>
- <listitem>
- <para>Автор</para>
- </listitem>
- <listitem>
- <para>Залежності</para>
- </listitem>
- </orderedlist>
-
- <para>В діалоговому вікні <guilabel>Керування розширеннями</guilabel>, виберіть пакунок розширення, опис до якого хочете прочитати, і натисніть кнопку <guibutton>Інформація</guibutton>.</para>
- </sect2>
- </sect1>
-
- <sect1 id="extend-developing-extensions">
- <title>Розробка розширень</title>
-
- <para>Документ <ulink url="http://f-spot.org/Extend_F-Spot">Extend F-Spot</ulink> надає інструкції з розробки своїх власних розширень для F-Spot.</para>
- </sect1>
- </chapter>
-
- <chapter id="shortcuts">
- <title>Клавіатурні скорочення</title>
-
- <sect1 id="Global-Shortcuts">
- <title>Глобальні скорочення</title>
- <informaltable frame="all">
- <tgroup cols="2">
- <thead>
- <row>
- <entry>Клавіша</entry>
- <entry>Дія</entry>
- </row>
- </thead>
- <tbody>
- <row>
- <entry>
- <keycap>[</keycap>
- </entry>
- <entry>Повернути виділені фото ліворуч</entry>
- </row>
- <row>
- <entry>
- <keycap>]</keycap>
- </entry>
- <entry>Повернути виділені фото праворуч</entry>
- </row>
- <row>
- <entry>
- <keycap>Del</keycap>
- </entry>
- <entry>Вилучити виділені фото з каталогу F-Spot</entry>
- </row>
- <row>
- <entry>
- <keycombo><keycap>Shift</keycap><keycap>Del</keycap></keycombo>
- </entry>
- <entry>Вилучити назавжди виділені фото з диска. Якщо можливо, помістити їх у смітник.</entry>
- </row>
-
- <row>
- <entry>
- <keycap>t</keycap>
- </entry>
- <entry>Перегляд або редагування позначок для виділених фото</entry>
- </row>
- <row>
- <entry>
- <keycap>F11</keycap>
- </entry>
- <entry>Перегляд на весь екран</entry>
- </row>
- <row>
- <entry>
- <keycombo><keycap>Ctrl</keycap><keycap>I</keycap></keycombo>
- </entry>
- <entry>Показати інформацію про фото</entry>
- </row>
- <row>
- <entry>
- <keycombo><keycap>Ctrl</keycap><keycap>Дорівнює (=)</keycap></keycombo>
- </entry>
- <entry>Наблизити</entry>
- </row>
- <row>
- <entry>
- <keycombo><keycap>Ctrl</keycap><keycap>Мінус (-)</keycap></keycombo>
- </entry>
- <entry>Віддалити</entry>
- </row>
- <row>
- <entry>
- <keycombo><keycap>Ctrl</keycap><keycap>N</keycap></keycombo>
- </entry>
- <entry>Імпорт фотографій</entry>
- </row>
- <row>
- <entry>
- <keycombo><keycap>Alt</keycap><keycap>0-5</keycap></keycombo>
- </entry>
- <entry>Alt + цифра від 0 до 5 — оцінка вибраного знімка(ів)</entry>
- </row>
- </tbody>
- </tgroup>
- </informaltable>
- </sect1>
-
- <sect1 id="shortcuts-browse-mode">
- <title>Скорочення для режиму перегляду</title>
- <informaltable frame="all">
- <tgroup cols="2">
- <thead>
- <row>
- <entry>Клавіша</entry>
- <entry>Дія</entry>
- </row>
- </thead>
- <tbody>
- <row>
- <entry>
- <keycombo><keycap>Ctrl</keycap><keycap>A</keycap></keycombo>
- </entry>
- <entry>Виділити все</entry>
- </row>
- <row>
- <entry>
- <keycombo><keycap>Ctrl</keycap><keycap>Shift</keycap>
- <keycap>A</keycap></keycombo>
- </entry>
- <entry>Скасувати виділення всього</entry>
- </row>
- <row>
- <entry>Клавіші зі стрілками або клавіші <keycap>H</keycap>, <keycap>J</keycap>, <keycap>K</keycap>, <keycap>L</keycap></entry>
- <entry>Перемістити фокус</entry>
- </row>
- <row>
- <entry><keycap>Ctrl</keycap> + Клавіша зі стрілкою</entry>
- <entry>Перемістити фокус не змінюючи виділення</entry>
- </row>
- <row>
- <entry>
- <keycap>Spacebar</keycap>
- </entry>
- <entry>Виділити або скасувати виділення зі сфокусованого фото</entry>
- </row>
- <row>
- <entry>
- <keycombo><keycap>Shift</keycap>
- <keycap>Клавіша зі стрілкою</keycap></keycombo>
- </entry>
- <entry>Змінити виділене фото</entry>
- </row>
- <row>
- <entry>
- <keycombo><keycap>Ctrl</keycap><keycap>Shift</keycap>
- <keycap>Стрілка ліворуч або праворуч</keycap></keycombo>
- </entry>
- <entry>Додати або скасувати виділення усіх фото в рядку у вибраному напрямку</entry>
- </row>
- <row>
- <entry>
- <keycap>V</keycap>
- </entry>
- <entry>Збільшений перегляд частини зображення, на яку вказує вказівник миші</entry>
- </row>
- <row>
- <entry>
- <keycombo><keycap>Shift</keycap><keycap>V</keycap></keycombo>
- </entry>
- <entry>Збільшений перегляд частини зображення, на яку вказує вказівник миші та колірна гістограма</entry>
- </row>
- </tbody>
- </tgroup>
- </informaltable>
- </sect1>
-
- <sect1 id="shortcuts-tag">
- <title>Скорочення для позначок</title>
- <informaltable frame="all">
- <tgroup cols="2">
- <thead>
- <row>
- <entry>Клавіша</entry>
- <entry>Дія</entry>
- </row>
- </thead>
- <tbody>
- <row>
- <entry>
- <keycap>F2</keycap>
- </entry>
- <entry>Перейменувати виділену позначку</entry>
- </row>
- <row>
- <entry>
- <keycombo><keycap>Ctrl</keycap><keycap>T</keycap></keycombo>
- </entry>
- <entry>Додати позначку до виділених фото</entry>
- </row>
- <row>
- <entry>немає</entry>
- <entry>Перетягнути позначки, щоб перемістити їх</entry>
- </row>
- <row>
- <entry>немає</entry>
- <entry>Ввести назву позначки, щоб перейти до неї (працює лише якщо позначка видима)</entry>
- </row>
- </tbody>
- </tgroup>
- </informaltable>
- </sect1>
-
- <sect1 id="shortcuts-edit-mode">
- <title>Скорочення для режиму редагування</title>
- <informaltable frame="all">
- <tgroup cols="2">
- <thead>
- <row>
- <entry>Клавіша</entry>
- <entry>Дія</entry>
- </row>
- </thead>
- <tbody>
- <row>
- <entry><keycap>Page Up</keycap>, <keycap>Backspace</keycap>, <keycap>B</keycap></entry>
- <entry>Перейти до попереднього фото</entry>
- </row>
- <row>
- <entry><keycap>Page Down</keycap>, <keycap>Spacebar</keycap>, <keycap>N</keycap></entry>
- <entry>Перейти до наступного фото</entry>
- </row>
- <row>
- <entry>Клавіші зі стрілками або клавіші <keycap>H</keycap>, <keycap>J</keycap>, <keycap>K</keycap>, <keycap>L</keycap></entry>
- <entry>Перейти до попереднього або наступного фото чи переміщатись по збільшеному фото</entry>
- </row>
- <row>
- <entry>
- <keycap>R</keycap>
- </entry>
- <entry>Перейти до випадкового фото</entry>
- </row>
- <row>
- <entry>
- <keycap>f</keycap>
- </entry>
- <entry>Перегляд на весь екран</entry>
- </row>
- <row>
- <entry>
- <keycap>0</keycap>
- </entry>
- <entry>Припасувати зображення до розміру екрана</entry>
- </row>
- <row>
- <entry>
- <keycap>1</keycap>
- </entry>
- <entry>Коефіцієнт масштабування до 1.0 (1 піксель екрана на піксель зображення)</entry>
- </row>
- <row>
- <entry>
- <keycap>2</keycap>
- </entry>
- <entry>Коефіцієнт масштабування до 2.0 (4 пікселя екрана на піксель зображення)</entry>
- </row>
- <row>
- <entry>
- <keycap>Escape</keycap>
- </entry>
- <entry>Повернутись до режиму перегляду</entry>
- </row>
- <row>
- <entry>
- <keycap>V</keycap>
- </entry>
- <entry>Розглянути фотографію через збільшувальне скло (лупу). Щоб закрити його, двічі клацніть на ньому, або знову натисніть <keycap>v</keycap>.</entry>
- </row>
- <row>
- <entry><keycap>Shift</keycap> + коліщатко миші</entry>
- <entry>Прискорена прокрутка фотострічки</entry>
- </row>
- <row>
- <entry>
- <keycap>i</keycap>
- </entry>
- <entry>Увімкнути або вимкнути видимість панелі інформації «(лише в повноекранному режимі)»</entry>
- </row>
- </tbody>
- </tgroup>
- </informaltable>
- </sect1>
- </chapter>
-
-</book>
diff --git a/docs/uk/uk.po b/docs/uk/uk.po
deleted file mode 100644
index 6930a14..0000000
--- a/docs/uk/uk.po
+++ /dev/null
@@ -1,2006 +0,0 @@
-# Ukrainian translation for f-spot.
-# Copyright (C) 2010 f-spot's COPYRIGHT HOLDER
-# This file is distributed under the same license as the f-spot package.
-# Sergiy Gavrylov <sergiovana at bigmir.net>, 2010.
-msgid ""
-msgstr ""
-"Project-Id-Version: f-spot master\n"
-"POT-Creation-Date: 2010-04-01 07:05+0000\n"
-"PO-Revision-Date: 2010-04-01 21:28+0300\n"
-"Last-Translator: Sergiy Gavrylov <sergiovana at bigmir.net>\n"
-"Language-Team: Ukrainian <uk at li.org>\n"
-"MIME-Version: 1.0\n"
-"Content-Type: text/plain; charset=UTF-8\n"
-"Content-Transfer-Encoding: 8bit\n"
-"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%"
-"10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n"
-
-#. When image changes, this message will be marked fuzzy or untranslated for you.
-#. It doesn't matter what you translate it to: it's not used at all.
-#: C/f-spot.xml:163(None)
-msgid ""
-"@@image: 'figures/f-spot-crop.png'; md5=63e18c96702aea4701024837a13ae2d9"
-msgstr ""
-"@@image: 'figures/f-spot-crop.png'; md5=63e18c96702aea4701024837a13ae2d9"
-
-#. When image changes, this message will be marked fuzzy or untranslated for you.
-#. It doesn't matter what you translate it to: it's not used at all.
-#: C/f-spot.xml:187(None)
-msgid ""
-"@@image: 'figures/f-spot-straighten.png'; "
-"md5=ceeff0cac633d06599fa5760cc4bc568"
-msgstr ""
-"@@image: 'figures/f-spot-straighten.png'; "
-"md5=ceeff0cac633d06599fa5760cc4bc568"
-
-#. When image changes, this message will be marked fuzzy or untranslated for you.
-#. It doesn't matter what you translate it to: it's not used at all.
-#: C/f-spot.xml:206(None)
-msgid ""
-"@@image: 'figures/f-spot-adjust-colors.png'; "
-"md5=6a5d9eaaaaf238ccbf70552bc073898c"
-msgstr ""
-"@@image: 'figures/f-spot-adjust-colors.png'; "
-"md5=6a5d9eaaaaf238ccbf70552bc073898c"
-
-#. When image changes, this message will be marked fuzzy or untranslated for you.
-#. It doesn't matter what you translate it to: it's not used at all.
-#: C/f-spot.xml:224(None)
-msgid ""
-"@@image: 'figures/f-spot-autocolor.png'; md5=240c4a86c95c9507755fe790bef0e24a"
-msgstr ""
-"@@image: 'figures/f-spot-autocolor.png'; md5=240c4a86c95c9507755fe790bef0e24a"
-
-#. When image changes, this message will be marked fuzzy or untranslated for you.
-#. It doesn't matter what you translate it to: it's not used at all.
-#: C/f-spot.xml:241(None)
-msgid ""
-"@@image: 'figures/f-spot-desaturate.png'; "
-"md5=fa54dfd08171658d720be71b6d367139"
-msgstr ""
-"@@image: 'figures/f-spot-desaturate.png'; "
-"md5=fa54dfd08171658d720be71b6d367139"
-
-#. When image changes, this message will be marked fuzzy or untranslated for you.
-#. It doesn't matter what you translate it to: it's not used at all.
-#: C/f-spot.xml:258(None)
-msgid ""
-"@@image: 'figures/f-spot-sepia.png'; md5=154d6e34903664dbd776f2bef405ce91"
-msgstr ""
-"@@image: 'figures/f-spot-sepia.png'; md5=154d6e34903664dbd776f2bef405ce91"
-
-#. When image changes, this message will be marked fuzzy or untranslated for you.
-#. It doesn't matter what you translate it to: it's not used at all.
-#: C/f-spot.xml:289(None)
-msgid ""
-"@@image: 'figures/f-spot-red-eye.png'; md5=743d0a2ccc9b2fa8fa314855c225cd31"
-msgstr ""
-"@@image: 'figures/f-spot-red-eye.png'; md5=743d0a2ccc9b2fa8fa314855c225cd31"
-
-#. When image changes, this message will be marked fuzzy or untranslated for you.
-#. It doesn't matter what you translate it to: it's not used at all.
-#: C/f-spot.xml:316(None)
-msgid ""
-"@@image: 'figures/f-spot-soft-focus.png'; "
-"md5=14d1437ce49c83f3ebbcf70b7047ffbe"
-msgstr ""
-"@@image: 'figures/f-spot-soft-focus.png'; "
-"md5=14d1437ce49c83f3ebbcf70b7047ffbe"
-
-#. When image changes, this message will be marked fuzzy or untranslated for you.
-#. It doesn't matter what you translate it to: it's not used at all.
-#: C/f-spot.xml:608(None)
-msgid ""
-"@@image: 'figures/f-spot-fullscreen.png'; "
-"md5=86040e20ebf1015f6489a56e9589f063"
-msgstr ""
-"@@image: 'figures/f-spot-fullscreen.png'; "
-"md5=86040e20ebf1015f6489a56e9589f063"
-
-#. When image changes, this message will be marked fuzzy or untranslated for you.
-#. It doesn't matter what you translate it to: it's not used at all.
-#: C/f-spot.xml:621(None)
-msgid ""
-"@@image: 'figures/f-spot-slideshow.png'; md5=84a69bc3bb7a1b8d04c967d3a66e6f23"
-msgstr ""
-"@@image: 'figures/f-spot-slideshow.png'; md5=84a69bc3bb7a1b8d04c967d3a66e6f23"
-
-#: C/f-spot.xml:5(title)
-msgid "The F-Spot Manual"
-msgstr "Посібник з F-Spot"
-
-#: C/f-spot.xml:7(para) C/f-spot.xml:9(subtitle)
-msgid "This is the user manual for F-Spot, a GNOME personal photo manager."
-msgstr "Посібник користувача з F-Spot — менеджера особистих фото для GNOME."
-
-#: C/f-spot.xml:11(year)
-msgid "2007-2009"
-msgstr "2007-2009"
-
-#: C/f-spot.xml:12(holder)
-msgid "Aaron Bockover, Gabriel Burt, Miguel de Icaza, Bengt Thuree"
-msgstr "Aaron Bockover, Gabriel Burt, Miguel de Icaza, Bengt Thuree"
-
-#: C/f-spot.xml:15(publishername)
-msgid "GNOME Documentation Project"
-msgstr "Проект документування GNOME"
-
-#: C/f-spot.xml:19(firstname)
-msgid "Miguel"
-msgstr "Miguel"
-
-#: C/f-spot.xml:20(surname)
-msgid "de Icaza"
-msgstr "de Icaza"
-
-#: C/f-spot.xml:23(firstname)
-msgid "Aaron"
-msgstr "Aaron"
-
-#: C/f-spot.xml:24(surname)
-msgid "Bockover"
-msgstr "Bockover"
-
-#: C/f-spot.xml:27(firstname)
-msgid "Bengt"
-msgstr "Bengt"
-
-#: C/f-spot.xml:28(surname)
-msgid "Thuree"
-msgstr "Thuree"
-
-#: C/f-spot.xml:31(firstname)
-msgid "Gabriel"
-msgstr "Gabriel"
-
-#: C/f-spot.xml:32(surname)
-msgid "Burt"
-msgstr "Burt"
-
-#: C/f-spot.xml:35(firstname)
-msgid "Alexandre"
-msgstr "Alexandre"
-
-#: C/f-spot.xml:36(surname)
-msgid "Prokoudine"
-msgstr "Prokoudine"
-
-#: C/f-spot.xml:39(firstname)
-msgid "Stephane"
-msgstr "Stephane"
-
-#: C/f-spot.xml:40(surname)
-msgid "Delcroix"
-msgstr "Delcroix"
-
-#: C/f-spot.xml:46(revnumber)
-msgid "0.5"
-msgstr "0.5"
-
-#: C/f-spot.xml:47(date)
-msgid "2008-09-25"
-msgstr "25-09-2008"
-
-#: C/f-spot.xml:50(revnumber)
-msgid "0.4"
-msgstr "0.4"
-
-#: C/f-spot.xml:51(date)
-msgid "2008-09-12"
-msgstr "12-09-2008"
-
-#: C/f-spot.xml:54(revnumber)
-msgid "0.3"
-msgstr "0.3"
-
-#: C/f-spot.xml:55(date)
-msgid "2007-07-26"
-msgstr "26-07-2007"
-
-#: C/f-spot.xml:61(title)
-msgid "Organizing your photos"
-msgstr "Упорядкування фотографій"
-
-#: C/f-spot.xml:64(title)
-msgid "Import"
-msgstr "Імпорт"
-
-#: C/f-spot.xml:66(para)
-msgid ""
-"You can import photos from your hard drive or your camera. When you import "
-"your photos into F-Spot from your camera, it will always make a copy of "
-"them, leaving you free to clear your camera's memory. By default, F-Spot "
-"will make a copy of photos imported from your hard drive. Uncheck the "
-"<guilabel>Copy</guilabel> option on the import dialog or hold <keycap>Shift</"
-"keycap> when dragging photos into F-Spot if you do not wish to copy them "
-"from your hard drive."
-msgstr ""
-"Фотографії можна імпортувати з твердого диска або з камери. Під час імпорту "
-"фотографій в F-Spot з камери, у всіх випадках робитимуться їх копії, даючи "
-"змогу очистити пам'ять камери. Типово, F-Spot робитиме копії фотографій, які "
-"імпортуються з твердого диска. Зніміть прапорець <guilabel>Копіювати</"
-"guilabel> в діалозі імпорту або утримуйте клавішу <keycap>Shift</keycap> під "
-"час перетягування фотографії в F-Spot, якщо не хочете копіювати їх з "
-"твердого диска."
-
-#: C/f-spot.xml:76(para)
-msgid ""
-"By default, F-Spot copies your photos to the <filename class=\"directory\">~/"
-"Photos</filename> folder. You can change the folder F-Spot uses in "
-"<guilabel>Preferences</guilabel> dialog (<menuchoice><guimenu>Edit</"
-"guimenu><guimenuitem>Preferences</guimenuitem></menuchoice>). You can also "
-"disable physical copying of images to that directory and make F-Spot only "
-"reference to existing files. For that you need to disable checkbox "
-"<guilabel>Copy files to the Photos folder</guilabel>."
-msgstr ""
-"Типово, F-Spot копіює фотографії до теки <filename class=\"directory\">~/"
-"Фотографії</filename>. Теку призначення F-Spot можна змінити в діалозі "
-"<guilabel>Параметри</guilabel> (<menuchoice><guimenu>Правка</"
-"guimenu><guimenuitem>Параметри</guimenuitem></menuchoice>). Також можна "
-"вимкнути фізичне копіювання зображень в цей каталог і створити лише "
-"посилання в F-Spot на існуючі файли. Для цього потрібно зняти прапорець "
-"<guilabel>Копіювати файли до теки «Фотографії»</guilabel>."
-
-#: C/f-spot.xml:85(para)
-msgid ""
-"If there is a tiny chance that some of your photos are already imported from "
-"the chosen source, you can use <guilabel>Detect duplicates</guilabel> "
-"option. In this case F-Spot will try to find out if exactly this image is "
-"already present in the database and thus new copy of it should not be "
-"imported."
-msgstr ""
-"Якщо є вірогідність, що деякі з ваших фотографій вже імпортовано з вибраного "
-"джерела, використовуйте функцію <guilabel>Виявлення дублікатів</guilabel>. У "
-"цьому випадку F-Spot спробує з'ясувати чи це зображення вже є в базі даних "
-"і, якщо є, нова копія не буде імпортована."
-
-#: C/f-spot.xml:92(para)
-msgid ""
-"If all the photos you are importing at one time are from a particular event, "
-"or have some other characteristic in common, you can create a tag for them "
-"so you can later find them with ease. To do this, follow the instructions "
-"from <xref linkend=\"tag\"/> to create a new tag, then when you are "
-"importing them, check the button for <guilabel>Attach Tag</guilabel> and "
-"choose the tag you created."
-msgstr ""
-"Якщо всі фотографії, які імпортуються за один раз, мають відношення до "
-"певної події чи мають інші загальні характеристики, ви можете створити "
-"позначку для них, щоб пізніше з легкістю знайти їх. Щоб зробити це, дивіться "
-"<xref linkend=\"tag\"/> зробіть нову позначку, потім, під час імпортування "
-"фото, натисніть кнопку <guilabel>Додати позначку</guilabel> і виберіть "
-"створену вами позначку."
-
-#: C/f-spot.xml:102(para)
-msgid ""
-"F-Spot uses a database stored at <filename>~/.config/f-spot/photos.db</"
-"filename>. Note, to access it, use the sqlite3 command. You can also "
-"manually specify path to a database by running F-Spot with <option>-b</"
-"option> option."
-msgstr ""
-"F-Spot використовує базу даних розташовану в каталозі <filename>~/.config/f-"
-"spot/photos.db</filename>. Зверніть увагу, щоб отримати доступ до нього, "
-"потрібно використовувати команду sqlite3. Ви також можете вручну вказати "
-"шлях до бази даних, запустивши F-Spot з параметром <option>-b</option>."
-
-#: C/f-spot.xml:110(para)
-msgid ""
-"After an import, F-Spot will display the pictures of the latest import roll "
-"only. Read <xref linkend=\"enjoying-search\"/> to learn how to deal with "
-"import rolls."
-msgstr ""
-"Після імпорту, F-Spot покаже фотографії лише з останнього сеансу імпорту. "
-"Щоб дізнатися, як мати справу з сеансами імпорту, дивіться <xref linkend="
-"\"enjoying-search\"/>."
-
-#: C/f-spot.xml:115(para)
-msgid ""
-"You can also import directly from Mozilla <ulink url=\"http://www.mozilla."
-"com/en-US/firefox/\">Firefox</ulink> and <ulink url=\"http://www.mozilla.com/"
-"en-US/thunderbird/\">Thunderbird</ulink> using <ulink url=\"https://addons."
-"mozilla.org/en-US/firefox/addon/7091\">Firefox</ulink> and <ulink url="
-"\"https://addons.mozilla.org/en-US/thunderbird/addon/7011\">Thunderbird</"
-"ulink> F-Spot importer extensions written by <ulink url=\"http://"
-"personalpages.tds.net/~cdovel/\">Pizzach</ulink>."
-msgstr ""
-"Імпортувати можна прямо з Mozilla <ulink url=\"http://www.mozilla.com/en-US/"
-"firefox/\">Firefox</ulink> та <ulink url=\"http://www.mozilla.com/en-US/"
-"thunderbird/\">Thunderbird</ulink> використовуючи розширення <ulink url="
-"\"https://addons.mozilla.org/en-US/firefox/addon/7091\">Firefox</ulink> та "
-"<ulink url=\"https://addons.mozilla.org/en-US/thunderbird/addon/7011"
-"\">Thunderbird</ulink> F-Spot для імпортування фото, написане <ulink url="
-"\"http://personalpages.tds.net/~cdovel/\">Pizzach</ulink>."
-
-#: C/f-spot.xml:127(title)
-msgid "Edit"
-msgstr "Редагування"
-
-#: C/f-spot.xml:129(para)
-msgid ""
-"If you double click or press enter on an image, you enter Edit mode, where "
-"you can remove red-eye, crop, and adjust brightness and colors."
-msgstr ""
-"Двічі клацніть кнопкою миші з вказівником на зображені або натисніть клавішу "
-"ENTER, щоб перейти в режим редагування, де можна вилучити ефект червоних "
-"очей, зробити кадрування та налаштувати яскравість та кольори."
-
-#: C/f-spot.xml:135(title)
-msgid "Versions"
-msgstr "Версії"
-
-#: C/f-spot.xml:137(para)
-msgid ""
-"When you edit your photos, a new copy (called a version) is created, so your "
-"original is never altered. After your first edit to a photo, subsequent "
-"edits will modify the same version. If you want to create multiple versions "
-"of your photo, perhaps with different cropping or coloring, you can do so "
-"via the <menuchoice><guimenu>File</guimenu><guimenuitem>Create new version</"
-"guimenuitem></menuchoice> option."
-msgstr ""
-"Під час редагування фотографій, створюється нова копія (або варіант), так що "
-"ваші оригінальні фото ніколи не змінюються. Після першого редагування, "
-"наступні виправлення вноситимуться в ту ж версію. Якщо потрібно створити "
-"декілька версій фотографії, можливо, різних розмірів і забарвлення, зробити "
-"це можна вибравши в меню <menuchoice><guimenu>Файл</"
-"guimenu><guimenuitem>Створити нову версію</guimenuitem></menuchoice>."
-
-#: C/f-spot.xml:148(title)
-msgid "Crop"
-msgstr "Кадрування"
-
-#: C/f-spot.xml:150(para)
-msgid ""
-"Cropping an image is a great way to improve the quality of a photograph by "
-"change how it is framed. You crop a photo by selecting the part of the photo "
-"you want to keep. If you want your photo to be the exact dimensions "
-"necessary for a certain print size, you can constrain the kind of selection "
-"F-Spot will allow you to draw by choosing the appropriate size from the "
-"constraint drop down. See the <xref linkend=\"edit-remove-red-eye\"/> below "
-"for details on making a selection on your photo."
-msgstr ""
-"Кадрування зображення — відмінний спосіб поліпшити якість фотографії "
-"змінивши її оформлення. Щоб виконати кадрування фото, виберіть частину "
-"фотографії, яку хотіли б зберегти. Якщо потрібно, щоб фотографія мала точні "
-"розміри необхідні для друку, можна вибрати готовий варіант. F-Spot дає змогу "
-"вибрати відповідний розмір зі спадного списку варіантів кадрування. "
-"Докладніше дивіться <xref linkend=\"edit-remove-red-eye\"/> про внесення "
-"змін до фотографій."
-
-#: C/f-spot.xml:160(title)
-msgid "Crop tool"
-msgstr "Кадрування"
-
-#: C/f-spot.xml:167(para) C/f-spot.xml:368(para)
-msgid ""
-"Once you have made your crop selection, you must click the crop button "
-"beneath the image to finalize the crop. If you are working with the original "
-"photo, cropping creates a new version your photo."
-msgstr ""
-"Як тільки буде вибраний варіант кадрування, необхідно натиснути кнопку "
-"«Кадрувати» під зображенням, щоб завершити кадрування. Якщо ви працюєте з "
-"оригіналом фотографії, операція кадрування створить нову версію цієї "
-"фотографії."
-
-#: C/f-spot.xml:175(title)
-msgid "Straighten"
-msgstr "Вирівнювання"
-
-#: C/f-spot.xml:177(para)
-msgid ""
-"Straighten effect is a tool to level a photo, quite helpful for landscapes "
-"taken without a tripod, when (imaginary) line of horizon is not at 0°. This "
-"tool rotates an image by a specified angle and automagically crops the "
-"resulted image, so that you always see a perfect rectangle."
-msgstr ""
-"Ефект вирівнювання — це інструмент для вирівнювання зображення на фото, "
-"досить корисний для фотографування пейзажів без штатива, коли (уявна) лінія "
-"горизонту не дорівнює 0°. Цей інструмент дає змогу зробити поворот "
-"зображення на заданий кут і автоматично кадрувати виникле зображення, отже, "
-"ви завжди бачитимете досконалий прямокутник."
-
-#: C/f-spot.xml:184(title)
-msgid "Straighten tool"
-msgstr "Вирівнювання"
-
-#: C/f-spot.xml:194(title)
-msgid "Adjust Colors"
-msgstr "Коригування кольорів"
-
-#: C/f-spot.xml:196(para)
-msgid ""
-"To adjust the brightness, contrast, and colors of a photo, first click the "
-"<guibutton>Adjust the photo colors</guibutton> icon to open the adjustment "
-"dialog. Change then some settings and save them with <guibutton>OK</"
-"guibutton>."
-msgstr ""
-"Щоб відкоригувати яскравість, контрастність і кольори фотографії, натисніть "
-"кнопку <guibutton>Коригувати кольори</guibutton>, щоб відкрити діалог "
-"коригування. Змініть потрібні параметри і збережіть їх натиснувши кнопку "
-"<guibutton>Гаразд</guibutton>."
-
-#: C/f-spot.xml:203(title)
-msgid "Adjust Colors tool"
-msgstr "Коригувати кольори"
-
-#: C/f-spot.xml:213(title) C/f-spot.xml:221(title)
-msgid "AutoColor"
-msgstr "Автокорекція кольорів"
-
-#: C/f-spot.xml:215(para)
-msgid ""
-"This effect automatically adjusts color levels to make a pretty balanced "
-"picture color-wise. It serves best for pictures taken with automatical white "
-"balance, when camera didn't manage to do the job well."
-msgstr ""
-"Цей ефект автоматично коригує рівні яскравості та кольору, щоб зробити "
-"зображення з приємно-збалансованими кольорами. Найкраще його використовувати "
-"для фотографій, зроблених з автоматичним балансом білого, коли камері не "
-"вдалося зробити знімок добре."
-
-#: C/f-spot.xml:231(title)
-msgid "Desaturate"
-msgstr "Знебарвлення"
-
-#: C/f-spot.xml:233(para)
-msgid ""
-"To make a colorful photo a black and white one, open a photo of choice and "
-"press <guibutton>Desaturate</guibutton> button."
-msgstr ""
-"Щоб зробити кольорову фотографію чорно-білою, відкрийте потрібну фотографію "
-"та натисніть кнопку <guibutton>Знебарвлення</guibutton>."
-
-#: C/f-spot.xml:238(title) C/f-spot.xml:255(title)
-msgid "Desaturation tool"
-msgstr "Знебарвлення"
-
-#: C/f-spot.xml:248(title)
-msgid "Sepia"
-msgstr "Сепія"
-
-#: C/f-spot.xml:250(para)
-msgid ""
-"To make a colorful photo look like an old-style picture in sepia tones, open "
-"a photo of choice and press <guibutton>Sepia</guibutton> button."
-msgstr ""
-"Щоб зробити кольорову фотографію, як зображення у старому стилі з відтінками "
-"у сепії, відкрийте потрібну фотографію та натисніть кнопку "
-"<guibutton>Тонувати у сепію</guibutton>."
-
-#: C/f-spot.xml:265(title)
-msgid "Remove Red-Eye"
-msgstr "Вилучення ефекту червоних очей"
-
-#: C/f-spot.xml:267(para)
-msgid ""
-"To remove redeye from a photo, you need to select a zone containing the "
-"eyes. You may want to zoom in on the image to accurately select the eyes in "
-"the photo. You should be able to correct both eyes on the same person in one "
-"shot, or even the eyes from multiple people at once. If this doesn't work "
-"for you, or the selected zone contains some vivid red parts (lips, ...) "
-"you'll probably have to correct one red eye at a time."
-msgstr ""
-"Щоб вилучити ефект червоних очей з фотографії, необхідно вибрати область, "
-"яка містить очі. Якщо потрібно, збільшіть зображення, щоб вибрати точне "
-"розташування очей на фотографії. Необхідно відкоригувати обидва ока однієї і "
-"тієї ж особи або навіть очі кількох людей за один раз. Якщо не вдасться це "
-"зробити, або вибрана область містить яскраві червоні елементи (губи тощо) "
-"вам, ймовірно, прийдеться усувати ефект червоних очей для кожного ока окремо."
-
-#: C/f-spot.xml:275(para)
-msgid ""
-"To make your selection, click one corner of the rectangle that will be your "
-"selection, and drag your mouse to the diagonal corner and release it. You "
-"can resize your selection by dragging its edges, and you can move it by "
-"clicking in the middle of it and dragging it to where you want it."
-msgstr ""
-"Щоб вибрати область очей, натисніть ліву кнопку миші з вказівником в одному "
-"кутку майбутнього прямокутника і перетягніть мишу по діагоналі в протилежний "
-"кут і відпустіть кнопку. Змінювати розмір прямокутника можна шляхом "
-"перетягування його країв. Щоб перемістити прямокутник, потрібно натиснути "
-"ліву кнопку миші з вказівником в його середині і перетягнути його в потрібне "
-"місце."
-
-#: C/f-spot.xml:281(para)
-msgid ""
-"Once you have selected a zone, you can remove the red from it by clicking "
-"the red-eye button beneath the photo."
-msgstr ""
-"Після виділення області червоних очей, вилучіть ефект, натиснувши кнопку "
-"«Корекція червоних очей», розташовану під фотографією."
-
-#: C/f-spot.xml:286(title)
-msgid "Red-Eye tool"
-msgstr "Корекція червоних очей"
-
-#: C/f-spot.xml:294(para)
-msgid ""
-"You can change the threshold for redeyes detection by changing the gconf key "
-"<filename class=\"directory\">/apps/f-spot/edit/redeye_threshold</filename>."
-msgstr ""
-"Ви можете змінити поріг виявлення ефекту червоних очей змінивши ключ gconf "
-"<filename class=\"directory\">/apps/f-spot/edit/redeye_threshold</filename>."
-
-#: C/f-spot.xml:303(title)
-msgid "Soft Focus"
-msgstr "М’який фокус"
-
-#: C/f-spot.xml:305(para)
-msgid ""
-"In photography sharpening one region of a picture, while blurring all the "
-"rest, is a way to make an emphasis and grab attention. It is achieved by "
-"using a lens that allows shooting with a short distance in front of and "
-"beyond the subject that appears to be in focus. Soft focus effect is a way "
-"to emulate such a lens."
-msgstr ""
-"У фотографії, збільшення різкості однієї області зображення, в той час як "
-"інша залишається нечіткою — спосіб зробити акцент та привернути увагу. Цей "
-"ефект досягається шляхом використання лінз, які дають змогу фотографувати з "
-"короткої відстані перед і за об'єктом, в той час як він залишається у "
-"фокусі. Способом для імітації таких лінз і є ефект «М'який фокус»."
-
-#: C/f-spot.xml:313(title)
-msgid "Soft Focus tool"
-msgstr "М’який фокус"
-
-#: C/f-spot.xml:320(para)
-msgid ""
-"Click to choose central point of the area you want to be in focus and adjust "
-"amount of blurring, then click <guibutton>OK</guibutton>."
-msgstr ""
-"Натисніть, щоб вибрати центральну точку області, яку хочете мати у фокусі та "
-"встановіть величину нечіткого зображення і натисніть кнопку "
-"<guibutton>Гаразд</guibutton>."
-
-#: C/f-spot.xml:327(title)
-msgid "Sharpen"
-msgstr "Різкість"
-
-#: C/f-spot.xml:329(para)
-msgid ""
-"Out-of-focus photographs and most digitized images often need a sharpness "
-"correction. The Unsharp Mask effect sharpens edges of the elements without "
-"increasing noise or blemish. To sharpen a photo choose "
-"<menuchoice><guimenu>Edit</guimenu><guimenuitem>Sharpen...</guimenuitem></"
-"menuchoice> and specify the following values:"
-msgstr ""
-"Фотографії не у фокусі та більшість оцифрованих зображень часто потребують "
-"корекції різкості. Ефект «Unsharp Mask» надає різкості краям елементів без "
-"збільшення кількості вад чи плям. Щоб збільшити різкість фото виберіть в "
-"меню <menuchoice><guimenu>Правка</guimenu><guimenuitem>Підвищити різкість..."
-"</guimenuitem></menuchoice> і деталізуйте такі значення:"
-
-#: C/f-spot.xml:340(para)
-msgid ""
-"<parameter class=\"option\">Amount</parameter> — strength of sharpening."
-msgstr ""
-"<parameter class=\"option\">Величина</parameter> — інтенсивність різкості."
-
-#: C/f-spot.xml:345(para)
-msgid ""
-"<parameter class=\"option\">Radius</parameter> — how many pixels on either "
-"side of an edge will be affected by sharpening. High resolution images allow "
-"higher radius."
-msgstr ""
-"<parameter class=\"option\">Радіус</parameter> — відстань в пікселях з "
-"кожного боку лінії, на яку впливатиме збільшення різкості. Зображення з "
-"високою роздільною здатністю допускають більший радіус."
-
-#: C/f-spot.xml:352(para)
-msgid ""
-"<parameter class=\"option\">Threshold</parameter> — the minimum difference "
-"in pixel values that indicates an edge where sharpen must be applied. This "
-"helps avoiding creation of blemishes in face, sky or water surface."
-msgstr ""
-"<parameter class=\"option\">Поріг</parameter> — мінімальна різниця в "
-"пікселях, яка показує ширину лінії до якої буде застосоване збільшення "
-"різкості. Дає змогу уникнути створення плям на обличчі, небі або поверхні "
-"води."
-
-#: C/f-spot.xml:362(title)
-msgid "Describe"
-msgstr "Опис"
-
-#: C/f-spot.xml:364(para)
-msgid ""
-"You can also enter a description of the image by clicking on the text entry "
-"box below the image and typing."
-msgstr ""
-"Ви можете також зробити опис зображення клацнувши на полі введення тексту "
-"під зображенням і ввести потрібний текст."
-
-#: C/f-spot.xml:376(title)
-msgid "Adjust Time"
-msgstr "Коригування часу"
-
-#: C/f-spot.xml:378(para)
-msgid ""
-"In both 'browse' or 'edit' modes, you can adjust the time of one or multiple "
-"pictures (<menuchoice><guimenu>Edit</guimenu><guimenuitem>Adjust Time</"
-"guimenuitem></menuchoice>). Adjusting the time of multiple pictures at once "
-"helps you shift all an import roll if, e.g. the time on your camera is badly "
-"set or if you forgot to change it according to DST."
-msgstr ""
-"Як в режимі перегляду так і в режимі редагування, можна скоригувати час для "
-"одного або багатьох зображень (<menuchoice><guimenu>Правка</"
-"guimenu><guimenuitem>Коригувати час</guimenuitem></menuchoice>). Коригування "
-"часу для багатьох фотографій одночасно дає змогу змістити час на всіх фото з "
-"сеансу імпорту, наприклад, якщо час на вашій камері невірно встановлений, "
-"або якщо ви забули змінити його у відповідності до DST."
-
-#: C/f-spot.xml:390(title)
-msgid "Tag"
-msgstr "Позначка"
-
-#: C/f-spot.xml:391(para)
-msgid ""
-"F-Spot enables you to organize and enjoy your photos by associating them "
-"with various user-customizable tags. A tag is a merely a label. F-Spot comes "
-"with default tags to get you started; you are free to change them and add "
-"new ones. For example, if you want to create a tag for specific event, you "
-"can create a new tag named after that event under the Events tag."
-msgstr ""
-"F-Spot дає змогу упорядкувати і користуватись фотографіями, пов’язуючи їх "
-"різними користувацькими позначками. Позначка це всього лише ярлик. F-Spot "
-"поставляється з типовими позначками, щоб ви могли розпочати працювати з "
-"ними. Їх можна змінювати або додавати нові. Наприклад, якщо ви хочете "
-"створити позначку для особливої події, дайте їй назву цієї події під "
-"позначкою «Події»."
-
-#: C/f-spot.xml:398(para)
-msgid "There are many ways to tag photos:"
-msgstr "Є багато способів позначати фотографії:"
-
-#: C/f-spot.xml:403(para)
-msgid "drag and drop the photo(s) onto the tag"
-msgstr "перетягнути фото на позначку"
-
-#: C/f-spot.xml:408(para)
-msgid "drag and drop the tag onto the photo(s)"
-msgstr "перетягнути позначку на фото"
-
-#: C/f-spot.xml:413(para)
-msgid "via the photo's right-click menu"
-msgstr "через контекстне меню фото"
-
-#: C/f-spot.xml:418(para)
-msgid "via the Tags and Edit menus"
-msgstr "через меню «Позначки» та «Правка»"
-
-#: C/f-spot.xml:423(para)
-msgid ""
-"by typing them in. Press <keycap>t</keycap> to pop up the tag entry bar. "
-"Here you can enter the tags, separated by commas."
-msgstr ""
-"просто введіть їх. Натисніть клавішу <keycap>t</keycap>, щоб викликати поле "
-"введення позначки і введіть текст позначок, відокремлюючи їх комами."
-
-#: C/f-spot.xml:427(para)
-msgid ""
-"You can also use auto-completion in this entry bar: After entering the "
-"beginning of a tag name, press <keycap>Tab</keycap> to see the first "
-"possible completion. You can cycle between other possible completions by "
-"pressing <keycap>Tab</keycap> again, and backwards with <keycombo action="
-"\"simul\"><keycap>Shift</keycap><keycap>Tab</keycap></keycombo>. To confirm "
-"the suggested completion and enter a new tag, press <keycap>,</keycap>. By "
-"pressing <keycap>Enter</keycap> you leave the tag entry bar, possibly "
-"confirming the current completion. To abort the auto completion, just keep "
-"on typing."
-msgstr ""
-"В цьому полі введення можна використовувати авто-завершення. Після введення "
-"початку назви позначки, натисніть клавішу <keycap>Tab</keycap>, щоб побачити "
-"перший можливий варіант завершення. Циклічно натискайте клавішу <keycap>Tab</"
-"keycap>, щоб переходити між варіантами завершення або комбінацію клавіш "
-"<keycombo action=\"simul\"><keycap>Shift</keycap><keycap>Tab</keycap></"
-"keycombo>, щоб переходити у зворотньому напрямку. Для підтвердження "
-"запропонованого завершення і введення нової позначки, натисніть клавішу "
-"<keycap>,</keycap>. Натиснувши клавішу <keycap>Enter</keycap> ви залишаєте "
-"поле введення, підтвердивши чинне завершення. Щоб скасувати авто-завершення, "
-"просто продовжуйте вводити текст."
-
-#: C/f-spot.xml:441(para)
-msgid ""
-"The first photo you associate with a tag will be used for that tag's icon. "
-"You can always edit a tag's name, parent tag, and icon by right clicking on "
-"it and choosing <guilabel>Edit tag</guilabel>."
-msgstr ""
-"Перше фото, яке пов’язане з позначкою, буде використовуватися як значок для "
-"цієї позначки. Ви завжди можете змінити назву позначки, батьківську позначку "
-"та значок, вибравши в контекстному меню пункт <guilabel>Редагувати позначку</"
-"guilabel>."
-
-#: C/f-spot.xml:446(para)
-msgid ""
-"You can change a tag's parent by dragging and dropping it where you like. "
-"Also, you can edit the name of a tag by selecting it and pressing "
-"<keycap>F2</keycap>. Lastly, if you have the tag tree widget focused (e.g. "
-"you just clicked on a tag), you can start typing the name of a tag, and all "
-"the expanded tags in the list will be searched and you'll jump to any "
-"matching ones."
-msgstr ""
-"Ви можете змінити батька позначки, перетягнувши її в будь-яке місце. Крім "
-"того, можна змінити назву позначки виділивши її та натиснувши <keycap>F2</"
-"keycap>. І нарешті, якщо віджет дерева позначок у фокусі (наприклад, ви "
-"тільки що натиснули на позначку), ви можете просто почати вводити назву "
-"позначки і пошук вестиметься по всьому списку позначок і ви перейдете у "
-"відповідну."
-
-#: C/f-spot.xml:455(para)
-msgid ""
-"You can also change size of tag icons in the sidebar or even make tag icons "
-"invisible by selecting preferred option from <menuchoice><guimenu>View</"
-"guimenu><guimenuitem>Tag Icons</guimenuitem></menuchoice> menu."
-msgstr ""
-"Щоб змінити розмір значка позначки в бічній панелі, або навіть зробити його "
-"невидимим, виберіть потрібний варіант в меню <menuchoice><guimenu>Вигляд</"
-"guimenu><guimenuitem>Значки позначок</guimenuitem></menuchoice>."
-
-#: C/f-spot.xml:463(para)
-msgid ""
-"F-Spot can write tags as metadata fields into JPEG files. Tags for various "
-"RAW files, PNG, TIFF, and others are written to F-Spot's database. You will "
-"have to re-tag these files if you re-import your collection."
-msgstr ""
-"F-Spot може записувати позначки як поля метаданих у файли JPEG. Позначки для "
-"різних форматів файлів: RAW, PNG, TIFF та інших, записуються у базу даних F-"
-"Spot. Вам доведеться заново позначати ці файли, якщо ви повторно "
-"імпортуватимете колекцію."
-
-#: C/f-spot.xml:474(title)
-msgid "Enjoying your photos"
-msgstr "Перегляд фотографій"
-
-#: C/f-spot.xml:476(title)
-msgid "Browse"
-msgstr "Перегляд"
-
-#: C/f-spot.xml:477(para)
-msgid ""
-"You can use the slider widget to browse your photos by month or by "
-"directory. To change this setting, go to <menuchoice><guimenu>View</"
-"guimenu><guimenuitem>Arranged By</guimenuitem></menuchoice>."
-msgstr ""
-"Використовуйте повзунок для перегляду фотографій за датою створення або за "
-"каталогом. Щоб змінити цей параметр, перейдіть до меню "
-"<menuchoice><guimenu>Вигляд</guimenu><guimenuitem>Упорядкувати за</"
-"guimenuitem></menuchoice>."
-
-#: C/f-spot.xml:485(title)
-msgid "Search"
-msgstr "Пошук"
-
-#: C/f-spot.xml:487(para)
-msgid "F-Spot uses search filters to help you better define search criteria."
-msgstr ""
-"F-Spot використовує пошукові фільтри, щоб допомогти вам краще визначити "
-"критерії пошуку."
-
-#: C/f-spot.xml:492(title)
-msgid "Tags"
-msgstr "Позначки"
-
-#: C/f-spot.xml:494(para)
-msgid ""
-"You can start a search by double clicking or activating a tag from the tag "
-"list. Alternatively, you can show the find bar with "
-"<menuchoice><guimenu>Find</guimenu><guimenuitem>Show Find Bar</guimenuitem></"
-"menuchoice>. With the find bar shown, you can drag tags from the tag view to "
-"the find bar."
-msgstr ""
-"Почати пошук можна за допомогою подвійного натискання або активувавши "
-"позначку в списку позначок. Як альтернатива, відкрийте панель пошуку через "
-"меню <menuchoice><guimenu>Знайти</guimenu><guimenuitem>Показати панель "
-"пошуку</guimenuitem></menuchoice> та перетягніть позначку з бічної панелі на "
-"панель пошуку."
-
-#: C/f-spot.xml:500(para)
-msgid ""
-"To find photos that are tagged with both of two tags, activate the first in "
-"the tag view or drag it onto the find bar, then drag the second tag and drop "
-"it on top of the first. You can also right click on the second tag in the "
-"tag view, or use the <guimenu>Find</guimenu> menu, and choose "
-"<guimenuitem>Find With...</guimenuitem> and select the first tag (or group "
-"of tags)."
-msgstr ""
-"Щоб знайти фото помічені двома позначками, активуйте першу в бічній панелі "
-"або перетягніть її на панель пошуку, потім перетягніть другу і помістіть її "
-"поверх першої. Також можна натиснути праву кнопку миші з вказівником на "
-"другій позначці в бічній панелі або через меню <guimenu>Знайти</guimenu>, і "
-"в контекстному меню вибрати пункт <guimenuitem>Шукати з...</guimenuitem> і "
-"вибрати першу позначку (чи групу позначок)."
-
-#: C/f-spot.xml:507(para)
-msgid ""
-"You can drag a tag icon around on the find bar to change from finding it and "
-"another tag to finding it or another tag."
-msgstr ""
-"Щоб знайти фотографію з певною позначкою, перетягніть її значок на панель "
-"пошуку."
-
-#: C/f-spot.xml:511(para)
-msgid ""
-"You can search for photos that do not have a particular tag by double-"
-"clicking on a tag in the find bar. Alternatively, you can right-click a tag "
-"in the find bar and select <guimenuitem>Exclude</guimenuitem>."
-msgstr ""
-"Можна шукати фото, які не мають окремої позначки, двічі клацнувши на "
-"позначці в панелі пошуку. Як альтернатива, натисніть праву кнопку миші з "
-"вказівником на позначці в панелі пошуку і виберіть <guimenuitem>Виключаючи "
-"знімки з позначкою</guimenuitem>."
-
-#: C/f-spot.xml:516(para)
-msgid ""
-"To remove a tag from the search, drag it away from the find bar, or right "
-"click and select <guimenuitem>Remove</guimenuitem>."
-msgstr ""
-"Щоб вилучити позначку з пошуку, перетягніть її з панелі пошуку, або "
-"натисніть праву кнопку миші з вказівником на ній і виберіть в контекстному "
-"меню пункт <guimenuitem>Вилучити з пошуку</guimenuitem>."
-
-#: C/f-spot.xml:520(para)
-msgid ""
-"By default, photos tagged <emphasis>Hidden</emphasis> will not be shown. You "
-"must explicitly include the <emphasis>Hidden</emphasis> tag in your search "
-"to show such photos."
-msgstr ""
-"Типово, фото під позначкою <emphasis>Приховане</emphasis> не будуть "
-"показані. Ви маєте явно включити позначку <emphasis>Приховане</emphasis> у "
-"пошук, щоб побачити ці фото."
-
-#: C/f-spot.xml:528(title)
-msgid "Import Rolls"
-msgstr "Сеанси імпорту"
-
-#: C/f-spot.xml:529(para)
-msgid ""
-"F-Spot remembers what pictures were imported every now and then. Use "
-"<menuchoice><guimenu>Find</guimenu><guisubmenu>Import Roll</"
-"guisubmenu><guimenuitem>Last import roll</guimenuitem></menuchoice> to limit "
-"search to last importing session or use <menuchoice><guimenu>Find</"
-"guimenu><guisubmenu>Import Roll</guisubmenu><guimenuitem>Select Import "
-"Rolls...</guimenuitem></menuchoice> to make a finer selection of imported "
-"photos:"
-msgstr ""
-"F-Spot пам’ятає які зображення імпортуються час від часу. Скористайтесь меню "
-"<menuchoice><guimenu>Знайти</guimenu><guisubmenu>Сеанс імпорту</"
-"guisubmenu><guimenuitem>Останній сеанс імпорту</guimenuitem></menuchoice>, "
-"щоб обмежити пошук лише останнім сеансом імпорту, або меню "
-"<menuchoice><guimenu>Знайти</guimenu><guisubmenu>Сеанс імпорту</"
-"guisubmenu><guimenuitem>Вибрати сеанс імпорту...</guimenuitem></menuchoice>, "
-"щоб зробити детальний відбір імпортованих фотографій:"
-
-#: C/f-spot.xml:539(para)
-msgid ""
-"<parameter class=\"option\">At</parameter> — to select photos from a "
-"particular importing session"
-msgstr ""
-"<parameter class=\"option\">Під час</parameter> — щоб вибрати фотографії з "
-"конкретного сеансу імпорту"
-
-#: C/f-spot.xml:544(para)
-msgid ""
-"<parameter class=\"option\">After</parameter> — to select all photos "
-"imported begining with a particular importing session"
-msgstr ""
-"<parameter class=\"option\">Після</parameter> — щоб вибрати всі фотографії, "
-"імпортовані починаючи з конкретного сеансу імпорту"
-
-#: C/f-spot.xml:549(para)
-msgid ""
-"<parameter class=\"option\">Between</parameter> — to select all photos "
-"imported between two particular importing sessions"
-msgstr ""
-"<parameter class=\"option\">Між</parameter> — щоб вибрати всі фотографії, "
-"імпортовані між двома конкретними сеансами імпорту"
-
-#: C/f-spot.xml:554(para)
-msgid ""
-"Every time you change settings of the filter, the amount of selected photos "
-"will appear in the bottom part of the dialog."
-msgstr ""
-"Під час кожної зміни параметрів фільтра, кількість вибраних фотографій "
-"з'являтиметься в нижній частині діалогового вікна."
-
-#: C/f-spot.xml:558(para)
-msgid ""
-"When you apply Import Roll filter, in the Find bar you will see "
-"<guilabel>Find: Import Roll</guilabel>. Now you can add some other filter to "
-"finetune your selection."
-msgstr ""
-"Коли ви підтвердите вибір даних у фільтрі сеансу імпорту, в панелі пошуку "
-"з’явиться рядок <guilabel>Знайти: Сеанс імпорту</guilabel>. Тепер ви можете "
-"додати інші фільтри, щоб деталізувати критерії пошуку."
-
-#: C/f-spot.xml:563(para)
-msgid ""
-"If you don't need the Import Roll filter anymore, choose "
-"<menuchoice><guimenu>Find</guimenu><guisubmenu>Import Roll</"
-"guisubmenu><guimenuitem>Clear roll filter</guimenuitem></menuchoice> to "
-"remove Import Roll from search criteria. You can also click the close button "
-"(<guibutton>X</guibutton>) of the search bar to discard all the current "
-"search options."
-msgstr ""
-"Якщо ви більше не потребуєте фільтра сеансу імпорту, виберіть в меню "
-"<menuchoice><guimenu>Знайти</guimenu><guisubmenu>Сеанс імпорту</"
-"guisubmenu><guimenuitem>Прибрати фільтр сеансів імпорту</guimenuitem></"
-"menuchoice>, щоб вилучити сеанс імпорту з критеріїв пошуку. Також можна "
-"натиснути кнопку закривання (<guibutton>X</guibutton>) панелі пошуку, щоб "
-"відкинути всі наявні варіанти пошуку."
-
-#: C/f-spot.xml:572(para)
-msgid ""
-"The number of displayed rolls in the dialog is defined by the gconf key "
-"<filename class=\"directory\">/apps/f-spot/import/gui_roll_history</"
-"filename>. Default value is 10."
-msgstr ""
-"Кількість сеансів, які будуть показані у діалоговому вікні визначається "
-"ключем gconf <filename class=\"directory\">/apps/f-spot/import/"
-"gui_roll_history</filename>. Типове значення — 10."
-
-#: C/f-spot.xml:581(title)
-msgid "Type-to-find"
-msgstr "Пошук під час введення"
-
-#: C/f-spot.xml:582(para)
-msgid ""
-"There is also a type-to-find entry. Press <keycap>/</keycap> to open it. It "
-"cannot be used at the same time as the find bar. You can type queries such "
-"as \"TagA and (TagB or (TagC and TagD))\". At any point, if F-Spot "
-"recognizes what you've typed as a valid query, it will update your search. "
-"The <emphasis>not</emphasis> operator is not yet supported."
-msgstr ""
-"Існує також поле для пошуку під час введення. Натисніть клавішу <keycap>/</"
-"keycap>, щоб його відкрити. Це поле не можна використовувати одночасно з "
-"панеллю пошуку. Введіть запит таким чином: позначкаA та (позначкаB або "
-"(позначкаC та позначкаD)). Як тільки F-Spot розпізнає введене як правильний "
-"запит, результат пошуку з'явиться у вікні. Оператор <emphasis>not</emphasis> "
-"поки що не підтримується."
-
-#: C/f-spot.xml:590(para)
-msgid ""
-"This function will also search for the typed text into photos comments and "
-"filename."
-msgstr ""
-"За допомогою цієї функції, пошук введеного тексту вестиметься також у "
-"коментарях та у назвах файлів фотографій."
-
-#: C/f-spot.xml:597(title)
-msgid "Fullscreen Mode and Slideshows"
-msgstr "Повноекранний режим та показ слайдів"
-
-#: C/f-spot.xml:598(para)
-msgid ""
-"For fewer distractions and larger display, you can view your photos in full "
-"screen mode. You control when to show the next photo or to return to the "
-"previous. Enter fullscreen mode by pressing <keycap>F11</keycap> at any time "
-"or by pressing the button in the toolbar."
-msgstr ""
-"Щоб менше відволікатися і побачити зображення більшими, фотографії можна "
-"переглядати в повноекранному режимі. У цьому режимі доступний перехід до "
-"наступного фото або повернення до попереднього. Щоб перейти у повноекранний "
-"режим, натисніть клавішу <keycap>F11</keycap> або кнопку на панелі "
-"інструментів."
-
-#: C/f-spot.xml:605(title)
-msgid "FullScreen"
-msgstr "На весь екран"
-
-#: C/f-spot.xml:612(para)
-msgid ""
-"In slideshow mode, you can sit back and view your photos as they are "
-"presented to you. You can start a slideshow by pressing the button on the "
-"toolbar."
-msgstr ""
-"У режимі перегляду слайдів, ви можете сидіти склавши руки і переглядати "
-"фотографії одну за іншою. Щоб запустити показ слайдів, натисніть кнопку на "
-"панелі інструментів."
-
-#: C/f-spot.xml:618(title)
-msgid "SlideShow"
-msgstr "Показ слайдів"
-
-#: C/f-spot.xml:629(title)
-msgid "Sharing your photos"
-msgstr "Спільне користування фотографіями"
-
-#: C/f-spot.xml:632(para)
-msgid ""
-"There are many ways to share your photos using F-Spot. All of the following "
-"methods will only share the photos you have selected when you run them."
-msgstr ""
-"Існує багато способів, спільного користування фотографіями у F-Spot. Усі "
-"наступні методи спільного користування фотографіями доступні лише, якщо ви "
-"виберете їх під час запуску."
-
-#: C/f-spot.xml:639(title)
-msgid "E-mail"
-msgstr "Пересилка електронною поштою"
-
-#: C/f-spot.xml:640(para)
-msgid ""
-"E-mail your photos directly from F-Spot with the <menuchoice><guimenu>File</"
-"guimenu><guimenuitem>Send Mail</guimenuitem></menuchoice> menu."
-msgstr ""
-"Надіслати свої фото електронною поштою можна прямо з F-Spot через меню "
-"<menuchoice><guimenu>Файл</guimenu><guimenuitem>Надіслати поштою</"
-"guimenuitem></menuchoice>."
-
-#: C/f-spot.xml:646(title)
-msgid "Note 1"
-msgstr "Зауваження 1"
-
-#: C/f-spot.xml:647(para)
-msgid ""
-"The email program used for this is defined at the GNOME level. You can "
-"change the default e-mailer for your user using the <application>Preferred "
-"Applications</application> tool in <menuchoice><guimenu>System</"
-"guimenu><guisubmenu>Preferences</guisubmenu></menuchoice>."
-msgstr ""
-"Поштова програма, що використовується для цього, залежить від налаштувань "
-"середовища GNOME. Ви можете змінити типову поштову програму використовуючи "
-"інструмент <application>Стандартні програми</application> в меню "
-"<menuchoice><guimenu>Система</guimenu><guisubmenu>Параметри</guisubmenu></"
-"menuchoice>."
-
-#: C/f-spot.xml:656(title)
-msgid "Note 2"
-msgstr "Зауваження 2"
-
-#: C/f-spot.xml:657(para)
-msgid ""
-"If some of the photos you'd like to send by email are in a format that F-"
-"Spot can't write (e.g. RAW images), the size selection dialog will become "
-"insensitive and the originals will be sent."
-msgstr ""
-"Якщо деякі фотографії, які ви хочете надіслати електронною поштою, мають "
-"формат, в який F-Spot не вміє зберігати (наприклад, зображення RAW), діалог "
-"вибору розміру стане нечутливим і будуть відправлені оригінали фото."
-
-#: C/f-spot.xml:664(para)
-msgid ""
-"If you're sending resized pictures, F-Spot will keep the modified versions "
-"somewhere in the <filename class=\"directory\">/tmp</filename> directory for "
-"30 seconds. It's not an issue with evolution, which makes it's own local "
-"copy of the attachments, but could be a bit shorter if you're using "
-"Thunderbird. You can change the delay by editing the gconf key <filename "
-"class=\"directory\">/apps/f-spot/export/email/delete_timeout_seconds</"
-"filename>."
-msgstr ""
-"Якщо ви відсилаєте зображення зі зміненими розмірами, F-Spot збереже змінені "
-"версії десь у каталозі <filename class=\"directory\">/tmp</filename> на 30 "
-"секунд. Це не важливо для програми Evolution, яка створює власні локальні "
-"копії вкладень, однак це допоможе дещо спростити роботу з Thunderbird. "
-"Встановити потрібний час затримки можна, змінюючи значення ключа gconf "
-"<filename class=\"directory\">/apps/f-spot/export/email/"
-"delete_timeout_seconds</filename>."
-
-#: C/f-spot.xml:676(title)
-msgid "Print"
-msgstr "Друк"
-
-#: C/f-spot.xml:677(para)
-msgid ""
-"Print your photos with the <menuchoice><guimenu>File</"
-"guimenu><guimenuitem>Print</guimenuitem></menuchoice> menu."
-msgstr ""
-"Щоб надрукувати фото, використовуйте меню <menuchoice><guimenu>Файл</"
-"guimenu><guimenuitem>Друк</guimenuitem></menuchoice>."
-
-#: C/f-spot.xml:684(title)
-msgid "Burn to CD"
-msgstr "Запис на CD"
-
-#: C/f-spot.xml:685(para)
-msgid ""
-"Burn your photos to CD or DVD with the <menuchoice><guimenu>File</"
-"guimenu><guisubmenu>Export</guisubmenu><guimenuitem>Export to CD</"
-"guimenuitem></menuchoice> menu."
-msgstr ""
-"Щоб записати фото на CD або DVD, використовуйте меню "
-"<menuchoice><guimenu>Файл</guimenu><guisubmenu>Експорт</"
-"guisubmenu><guimenuitem>Експорт до CD</guimenuitem></menuchoice>."
-
-#: C/f-spot.xml:693(title)
-msgid "Generate a Website Gallery or Folder"
-msgstr "Створення веб-галереї або теки"
-
-#: C/f-spot.xml:694(para)
-msgid ""
-"The <menuchoice><guimenu>File</guimenu><guimenuitem>Export</"
-"guimenuitem><guimenuitem>Export to Folder</guimenuitem></menuchoice> feature "
-"gives you three ways to export your images."
-msgstr ""
-"Функція <menuchoice><guimenu>Файл</guimenu><guimenuitem>Експортувати до</"
-"guimenuitem><guimenuitem>У теку</guimenuitem></menuchoice> надає три способи "
-"експорту зображень."
-
-#: C/f-spot.xml:702(para)
-msgid ""
-"<guilabel>Use Original</guilabel> exports your photos ready for use with "
-"Jakub Steiner's free <ulink url=\"http://jimmac.musichall.cz/original.php\"> "
-"Original Photo Gallery</ulink> software. If you are unsure about this "
-"option, it is probably not the right one for you."
-msgstr ""
-"<guilabel>Використовувати Original</guilabel> — експортує фотографії вже "
-"готовими для використання у вільній програмі Якуба Штайнера (Jakub Steiner) "
-"<ulink url=\"http://jimmac.musichall.cz/original.php\"> Original Photo "
-"Gallery</ulink>. Якщо ви не знаєте, що це таке, цей вибір навряд чи буде "
-"вдалим."
-
-#: C/f-spot.xml:710(para)
-msgid ""
-"<guilabel>Use static HTML files</guilabel> exports your photos to an "
-"interactive website, ready for you to upload."
-msgstr ""
-"<guilabel>Використовувати статичні файли HTML</guilabel> — експортує "
-"фотографії до інтерактивного веб-сайту, готового до вивантаження від вас."
-
-#: C/f-spot.xml:716(para)
-msgid ""
-"<guilabel>Plain Files</guilabel> exports your images as files within "
-"directories, without putting them into a gallery."
-msgstr ""
-"<guilabel>Прості файли</guilabel> — експортує зображення як файли в межах "
-"каталогів, не включаючи їх у галерею."
-
-#: C/f-spot.xml:725(title)
-msgid "Post to your online galleries"
-msgstr "Публікація в онлайн-галереях"
-
-#: C/f-spot.xml:726(para)
-msgid ""
-"If you use Flickr, SmugMug, 23hq, Tabblo, Facebook, Zooomr or Picasa Web "
-"Album, you can post your files directly from F-Spot with the "
-"<menuchoice><guimenu>File</guimenu><guisubmenu>Export</guisubmenu></"
-"menuchoice> menu, choosing corresponding submenu item."
-msgstr ""
-"Для користувачів Flickr, SmugMug, 23hq, Tabblo, Facebook, Zooomr або Picasa "
-"Web Album, надається можливість публікувати зображення прямо з F-Spot, через "
-"меню <menuchoice><guimenu>Файл</guimenu><guisubmenu>Експортувати до</"
-"guisubmenu></menuchoice>, вибравши в підменю відповідний пункт."
-
-#: C/f-spot.xml:731(para)
-msgid ""
-"If you use the PHP software known as <ulink url=\"http://gallery.sourceforge."
-"net/\"> Gallery</ulink>, you can post your photos to your existing album "
-"with the <menuchoice><guimenu>File</guimenu><guimenuitem>Export</"
-"guimenuitem><guimenuitem>Export to Web Gallery</guimenuitem></menuchoice> "
-"menu. You must first enable the Remote module within your Gallery "
-"installation."
-msgstr ""
-"Користувачі програмного забезпечення, відомого як <ulink url=\"http://"
-"gallery.sourceforge.net/\"> Gallery</ulink>, можуть публікувати свої фото у "
-"наявному альбомі через меню <menuchoice><guimenu>Файл</"
-"guimenu><guimenuitem>Експортувати до</guimenuitem><guimenuitem>Web Gallery</"
-"guimenuitem></menuchoice>. Під час встановлення Gallery потрібно увімкнути "
-"модуль віддаленого керування (Remote plugin)."
-
-#: C/f-spot.xml:739(title)
-msgid "Note for Gallery 2.2 users"
-msgstr "Примітка для користувачів Gallery 2.2"
-
-#: C/f-spot.xml:740(para)
-msgid "The Remote plugin for Gallery should be 1.0.8 or newer."
-msgstr "Модуль Remote plugin для Gallery має бути версії 1.0.8 або новіший."
-
-#: C/f-spot.xml:744(para)
-msgid ""
-"<ulink url=\"http://pennave.sourceforge.net\">PennAve</ulink> is a Python "
-"web-application that directly uses F-Spot's database to present a dynamic "
-"gallery of your photos and tags."
-msgstr ""
-"<ulink url=\"http://pennave.sourceforge.net\">PennAve</ulink> — веб-"
-"програма, написана мовою Python, яка на пряму використовує базу даних F-Spot "
-"для презентації динамічної галереї ваших фотографій та позначок."
-
-#: C/f-spot.xml:749(para)
-msgid ""
-"<ulink url=\"http://www.conduit-project.org\">Conduit</ulink> is an "
-"application that can sync photos that have a particular tag with your Flickr "
-"or Picasa Web Album web storage."
-msgstr ""
-"<ulink url=\"http://www.conduit-project.org\">Conduit</ulink> — програма, "
-"яка здатна синхронізувати фотографії, які мають певні позначки, з веб-"
-"сховищами Flickr і Picasa Web Album."
-
-#: C/f-spot.xml:758(title)
-msgid "Color management"
-msgstr "Керування кольором"
-
-#: C/f-spot.xml:761(title)
-msgid "What's color management"
-msgstr "Що це — керування кольором?"
-
-#: C/f-spot.xml:763(para)
-msgid ""
-"When you capture a photo and look at it on a display, it looks different "
-"than on a camera's preview display or on any other display. It will also "
-"look different when you print it. This is because every device has unique "
-"color reproduction capabilities."
-msgstr ""
-"Під час перегляду фотографії на дисплеї комп'ютера, вона виглядатиме дещо "
-"інакше, ніж на дисплеї фотокамери або на будь-якому іншому дисплеї. Також "
-"інакше вона виглядатиме і після друку на принтері. Тому, що кожний такий "
-"пристрій має свої власні характеристики відтворення кольору."
-
-#: C/f-spot.xml:770(para)
-msgid ""
-"Color management system (CMS) is a tool to achieve reliable color "
-"reproduction for both display and output (e.g. a printer). A CMS relies on "
-"color profiles to map original colors to the color that a device can "
-"reproduce so that colors will appear the same way everywhere — on a computer "
-"LCD monitor, on a print from your local photolab etc."
-msgstr ""
-"Система керування кольором (CMS) — це інструмент для досягнення достовірного "
-"відтворення кольорів як на дисплеї, так і на пристрої виведення, наприклад "
-"принтері. В основі CMS лежать колірні профілі, які порівнюють оригінальні "
-"кольори та кольори, які зможе відтворити пристрій, тому кольори виглядають "
-"однаково на всіх пристроях: на рідкокристалічному моніторі, на знімку "
-"надрукованому у фотолабораторії тощо."
-
-#: C/f-spot.xml:780(title)
-msgid "What's a color profile"
-msgstr "Що це — колірний профіль?"
-
-#: C/f-spot.xml:782(para)
-msgid ""
-"A color profile is a file with either .icc (thus its is often called an ICC "
-"profile) or .icm extension that describes how device's colors correspond to "
-"a universal description of colors."
-msgstr ""
-"Колірний профіль — це або файл з розширенням .icc (часто його називають ICC-"
-"профілем), або файл з розширенням .icm, який описує, як кольори пристрою, "
-"відповідають універсального опису кольорів."
-
-#: C/f-spot.xml:788(para)
-msgid "There are several types of profiles:"
-msgstr "Існує кілька типів профілів:"
-
-#: C/f-spot.xml:794(para)
-msgid ""
-"Input device profile. It's profile for a camera or a profile that an "
-"application like XSane embeds into a scanned image."
-msgstr ""
-"Профіль пристрою введення. Цей профіль для фотокамери або профіль для таких "
-"програм, як XSane, який вбудовується в скановане зображення."
-
-#: C/f-spot.xml:800(para)
-msgid ""
-"Working space profile. It's a profile that describes color space in which "
-"all operations are done inside an application. Usually very wide gamut "
-"profiles like AdobeRGB1998 or ProPhotoRGB are used for that."
-msgstr ""
-"Профіль робочого простору. Цей профіль описує колірний простір в якому "
-"виконуються всі операції у програмі. Зазвичай, для цього використовуються "
-"профілі досить широкого діапазону — AdobeRGB1998 або ProPhotoRGB."
-
-#: C/f-spot.xml:807(para)
-msgid "Display profile. It's a profile for a monitor."
-msgstr "Профіль дисплея — це профіль для відеомонітора."
-
-#: C/f-spot.xml:812(para)
-msgid "Output profile. This is usually a profile for you printer."
-msgstr "Профіль виведення. Зазвичай, це профіль для принтера."
-
-#: C/f-spot.xml:818(para)
-msgid ""
-"Currently F-Spot allows setting only display and output profiles. All color "
-"operations are done in sRGB color space."
-msgstr ""
-"На цей час, F-Spot дає змогу налаштовувати лише профілі дисплея та "
-"виведення. Всі операції з кольором виконуються в колірному просторі sRGB."
-
-#: C/f-spot.xml:825(title)
-msgid "How to get my screen/printer color profile"
-msgstr "Як отримати колірний профіль дисплея або принтера?"
-
-#: C/f-spot.xml:827(para)
-msgid "There are few ways to get a color profile."
-msgstr "Існує кілька способів отримати колірний профіль."
-
-#: C/f-spot.xml:832(title)
-msgid "From CD or Internet"
-msgstr "З компакт-диска або з Інтернету"
-
-#: C/f-spot.xml:834(para)
-msgid ""
-"Many hardware manufacturers put color profiles into CD in the bundle. If you "
-"have one (from monitor or printer), you can use it. Or you can download it "
-"from the Internet (usually, from support section of the manufacturer's web "
-"site). Some camera manufacturers (Nikon, Canon) also provide ICC profiles."
-msgstr ""
-"Багато виробників апаратного забезпечення надають колірні профілі на компакт-"
-"дисках, що йдуть в комплекті з пристроями. Якщо у вас є такий диск (для "
-"монітора або принтера), ви можете його використовувати. Або можете "
-"завантажити профілі з Інтернету (зазвичай, з розділу підтримки на веб-сайті "
-"виробника). Деякі виробники камер (Nikon, Canon) також надають профілі ICC."
-
-#: C/f-spot.xml:844(title)
-msgid "Calibrating and profiling"
-msgstr "Калібрування та створення профілю"
-
-#: C/f-spot.xml:846(para)
-msgid ""
-"Best results can be achieved by calibrating and profiling devices with a "
-"measurement device. It is not so difficult, but it means that you need a "
-"spectrophotometer to do all measurements and create an ICC profile."
-msgstr ""
-"Найкращих результатів можна досягнути через калібрування та створення "
-"профілів пристроїв за допомогою вимірювального приладу. Це не так уже й "
-"складно, проте вам буде необхідний спектрофотометр, щоб зробити всі "
-"вимірювання та створити профіль МУС."
-
-#: C/f-spot.xml:852(para)
-msgid ""
-"If you are on Windows or Mac OS X, you can use manufacturer's software "
-"coming with a spectrophotometer. On Linux you will have to use either <ulink "
-"url=\"http://www.argyllcms.com\">Argyll</ulink>, which is a set of versatile "
-"command line tools, or <ulink url=\"http://lprof.sourceforge.net/\">LProf</"
-"ulink>, which has a graphical user interface."
-msgstr ""
-"Якщо ви працюєте у Windows або Mac OS X, використовуйте програмне "
-"забезпечення виробника спектрофотометра. В Linux — використовуйте, або набір "
-"багатоцільових інструментів для роботи у командному рядку <ulink url="
-"\"http://www.argyllcms.com\">Argyll</ulink>, або графічний інтерфейс "
-"користувача <ulink url=\"http://lprof.sourceforge.net/\">LProf</ulink>."
-
-#: C/f-spot.xml:860(para)
-msgid ""
-"Please refer to documentation of third party hardware and software vendors "
-"for details."
-msgstr ""
-"За додатковою інформацією звертайтеся до документації постачальників "
-"стороннього апаратного та програмного забезпечення."
-
-#: C/f-spot.xml:867(title)
-msgid "Embedding"
-msgstr "Вкладення"
-
-#: C/f-spot.xml:869(para)
-msgid ""
-"Image formats themselves (such as TIFF, JPEG, PNG...) may contain embedded "
-"color profiles. If color management is enabled, F-Spot looks for such "
-"embedded profiles and takes them into consideration."
-msgstr ""
-"Формати файлів зображень (такі як TIFF, JPEG, PNG тощо) самі можуть містити "
-"вкладені колірні профілі. Якщо керування кольором увімкнено, F-Spot шукатиме "
-"такі профілі і прийматиме їх до уваги."
-
-#: C/f-spot.xml:878(title)
-msgid "How to use color management in F-Spot"
-msgstr "Як використовувати керування кольором в F-Spot"
-
-#: C/f-spot.xml:880(para)
-msgid ""
-"Color management in F-Spot can use only RGB profiles at this time (and you "
-"can't see other profiles in the F-Spot)."
-msgstr ""
-"На цей час, керування кольором в F-Spot, використовує лише профілі RGB (в F-"
-"Spot ви не можете бачити інші профілі)."
-
-#: C/f-spot.xml:887(para)
-msgid ""
-"Copy your color profiles into the <filename class=\"directory\">/usr/share/"
-"color/icc</filename> or <filename class=\"directory\">/usr/local/share/color/"
-"icc</filename> directory."
-msgstr ""
-"Скопіюйте колірні профілі у каталог <filename class=\"directory\">/usr/share/"
-"color/icc</filename> або <filename class=\"directory\">/usr/local/share/"
-"color/icc</filename>."
-
-#: C/f-spot.xml:895(para)
-msgid ""
-"Enable the color management with the <menuchoice><guimenu>Edit</"
-"guimenu><guimenuitem>Preferences</guimenuitem></menuchoice> menu."
-msgstr ""
-"Увімкніть керування кольором в меню <menuchoice><guimenu>Правка</"
-"guimenu><guimenuitem>Параметри</guimenuitem></menuchoice>."
-
-#: C/f-spot.xml:902(para)
-msgid ""
-"Select <guilabel>Display</guilabel> and <guilabel>Output</guilabel> profiles."
-msgstr ""
-"Виберіть профілі для <guilabel>Монітора</guilabel> та для <guilabel>Друку</"
-"guilabel>."
-
-#: C/f-spot.xml:910(para)
-msgid ""
-"You can use <ulink url=\"http://burtonini.com/blog/computers/xicc\">xicc</"
-"ulink> to load ICC profile to display and use the loaded profile from F-"
-"Spot. Just mark the checkbox <guilabel>Try to use the system display "
-"profile</guilabel>."
-msgstr ""
-"Використовуйте веб-сайт <ulink url=\"http://burtonini.com/blog/computers/xicc"
-"\">xicc</ulink>, щоб завантажити профіль ICC для монітора і працювати з ним "
-"в F-Spot. Просто поставте прапорець <guilabel>Спробувати використовувати "
-"системний профіль</guilabel>."
-
-#: C/f-spot.xml:921(title)
-msgid "Extend functionality"
-msgstr "Розширення функціональності"
-
-#: C/f-spot.xml:924(title)
-msgid "What extensions are"
-msgstr "Що це — розширення?"
-
-#: C/f-spot.xml:926(para)
-msgid ""
-"F-Spot extensions are means to add new functionality to the application. F-"
-"Spot supports two types of extension: exporters (which allow exporting "
-"photos to new web services or data storages) and tools (which allow new ways "
-"of color correction, duplicate photos finders etc.). Extensions are "
-"distributed in form of extension packages."
-msgstr ""
-"Розширення F-Spot додають програмі нові функціональні можливості. F-Spot "
-"підтримує два види розширень: програми експорту (дають змогу експортувати "
-"фотографії до нових веб-служб або сховищ даних) та інструменти (надають нові "
-"методи корекції кольору, пошук дублікатів фотографій тощо). Розширення "
-"розповсюджуються у вигляді пакунків розширень."
-
-#: C/f-spot.xml:933(para)
-msgid ""
-"In the best traditions of not reinventing the wheel extensions can use other "
-"extensions, which means that one extension cannot work, if another extension "
-"is not installed. This concept of dependance actually means that"
-msgstr ""
-"Одні розширення можуть використовувати інші розширення, а це означає, що "
-"одне не може працювати, якщо інше не встановлено. Ця концепція залежностей "
-"фактично означає, що:"
-
-#: C/f-spot.xml:940(para)
-msgid ""
-"you cannot install an extension, if the extension it depends on, is not "
-"present in the system"
-msgstr ""
-"не можна встановити розширення, залежне від іншого, не встановленого в "
-"системі"
-
-#: C/f-spot.xml:945(para)
-msgid "you cannot remove an extension on which some other extension depends"
-msgstr "не можна вилучити розширення, від якого залежать інші"
-
-#: C/f-spot.xml:953(title)
-msgid "Managing extensions"
-msgstr "Керування розширеннями"
-
-#: C/f-spot.xml:955(para)
-msgid ""
-"To manage extensions choose <menuchoice><guimenu>Edit</"
-"guimenu><guimenuitem>Manage Extensions</guimenuitem></menuchoice> menu item."
-msgstr ""
-"Щоб налаштувати розширення, відкрийте пункт меню "
-"<menuchoice><guimenu>Правка</guimenu><guimenuitem>Налаштування розширень</"
-"guimenuitem></menuchoice>."
-
-#: C/f-spot.xml:961(title)
-msgid "Managing extension repositories"
-msgstr "Керування репозиторіями розширень"
-
-#: C/f-spot.xml:963(para)
-msgid ""
-"Simply put, repositories are extension storages. They can be either network "
-"or local. To add a new repository click Repositories button, choose type of "
-"the repository you are about to add and provide either URL or path. If the "
-"URL or path you specified doesn't contain a description (index) file for "
-"extensions, a warning message will pop up to tell you that."
-msgstr ""
-"Простіше кажучи, репозиторії — це сховища розширень. Вони бувають або "
-"мережевими, або локальними. Щоб додати новий репозиторій натисніть кнопку "
-"«Джерела», виберіть тип репозиторію, який збираєтеся додати, його URL або "
-"шлях до нього. Якщо вказаний URL або шлях не містять опису (індексу) файла "
-"розширення, з'явиться попереджувальне повідомлення."
-
-#: C/f-spot.xml:970(para)
-msgid ""
-"To remove a repository click <guibutton>Repositories</guibutton> button "
-"again, choose the repository you are about to delete and click "
-"<guibutton>Delete</guibutton> button."
-msgstr ""
-"Щоб вилучити репозиторій, знову натисніть кнопку <guibutton>Джерела...</"
-"guibutton> виділіть репозиторій, який хочете вилучити, і натисніть кнопку "
-"<guibutton>Вилучити</guibutton>."
-
-#: C/f-spot.xml:978(title)
-msgid "Installing and updating extensions"
-msgstr "Встановлення та оновлення розширень"
-
-#: C/f-spot.xml:980(para)
-msgid ""
-"To install an extension click <guibutton>Install extensions...</guibutton> "
-"button. In the newly presented dialog"
-msgstr ""
-"Щоб встановити розширення, натисніть кнопку <guibutton>Встановити "
-"розширення...</guibutton>. У діалоговому вікні, яке з’явиться:"
-
-#: C/f-spot.xml:986(para)
-msgid ""
-"Choose repository to install from all known repositories or just one of "
-"available repositories."
-msgstr ""
-"Виберіть репозиторій для встановлення, з усіх відомих або один з доступних."
-
-#: C/f-spot.xml:992(para)
-msgid ""
-"Choose, what extension packages you want to see: All, Only new, Only updates."
-msgstr ""
-"Виберіть пакунки розширень, які хочете бачити: всі, лише нові, лише оновлені."
-
-#: C/f-spot.xml:997(para)
-msgid ""
-"Click the <guibutton>Update</guibutton> button to update list of available "
-"extension packages by given criteria."
-msgstr ""
-"Натисніть кнопку <guibutton>Оновити</guibutton>, щоб оновити список "
-"доступних пакунків розширення за визначеними критеріями."
-
-#: C/f-spot.xml:1003(para)
-msgid ""
-"Choose extensions you want to install/update, click <guibutton>Information</"
-"guibutton> to see summary on selected package, if you want to."
-msgstr ""
-"Виберіть розширення для встановлення або оновлення. Якщо хочете побачити "
-"короткий опис вибраного пакунку, натисніть кнопку <guibutton>Інформація</"
-"guibutton>."
-
-#: C/f-spot.xml:1009(para)
-msgid "Click <guibutton>Forward</guibutton> to proceed with installation."
-msgstr ""
-"Натисніть кнопку <guibutton>Вперед</guibutton>, щоб перейти до встановлення."
-
-#: C/f-spot.xml:1017(title)
-msgid "Enabling and disabling extensions"
-msgstr "Увімкнення та вимкнення розширень"
-
-#: C/f-spot.xml:1019(para)
-msgid ""
-"You might want to temporarily enable or disable a particular extension "
-"package, for example, if the extension is not stable enough to handle a "
-"large amount of photos or if menus get crowded with extensions."
-msgstr ""
-"Можливо, виникне необхідність тимчасово увімкнути або вимкнути певний "
-"пакунок розширень. Наприклад, якщо розширення не достатньо стабільне, щоб "
-"ним можна було без ризику обробити велику кількість фотографій, або якщо "
-"меню переповнені розширеннями."
-
-#: C/f-spot.xml:1024(para)
-msgid ""
-"In the <guilabel>Manage Extensions</guilabel> dialog select the extension "
-"package and click <guibutton>Enable</guibutton> or <guibutton>Disable</"
-"guibutton>."
-msgstr ""
-"В діалоговому вікні <guilabel>Керування розширеннями</guilabel>, виберіть "
-"потрібний пакунок і натисніть кнопку <guibutton>Увімкнути</guibutton> або "
-"<guibutton>Вимкнути</guibutton>."
-
-#: C/f-spot.xml:1031(title)
-msgid "Removing extensions"
-msgstr "Вилучення розширень"
-
-#: C/f-spot.xml:1033(para)
-msgid ""
-"If you don't need an extension you can remove it from the system completely. "
-"In the <guilabel>Manage Extensions</guilabel> dialog select the extension "
-"package you want to remove and click <guibutton>Delete</guibutton>."
-msgstr ""
-"Якщо розширення більше не потрібне, його можна вилучити з системи повністю. "
-"В діалоговому вікні <guilabel>Керування розширеннями</guilabel>, виберіть "
-"пакунок розширення, який хочете вилучити і натисніть кнопку "
-"<guibutton>Вилучити</guibutton>."
-
-#: C/f-spot.xml:1041(title)
-msgid "Reading summary of extensions"
-msgstr "Короткий опис розширень"
-
-#: C/f-spot.xml:1043(para)
-msgid ""
-"Every extension package contains metadata that provides the following "
-"information about the extension:"
-msgstr ""
-"Кожен пакунок розширення містить метадані, які дають змогу отримати таку "
-"інформацію:"
-
-#: C/f-spot.xml:1049(para)
-msgid "Description, which usually covers puprose of the extension"
-msgstr "Опис, у якому, зазвичай, описане призначення розширення"
-
-#: C/f-spot.xml:1054(para)
-msgid "Version"
-msgstr "Версія"
-
-#: C/f-spot.xml:1059(para)
-msgid "Author"
-msgstr "Автор"
-
-#: C/f-spot.xml:1064(para)
-msgid "Dependencies"
-msgstr "Залежності"
-
-#: C/f-spot.xml:1070(para)
-msgid ""
-"In the <guilabel>Manage Extensions</guilabel> dialog select the extension "
-"package you want to read summary of and click <guibutton>Information</"
-"guibutton>."
-msgstr ""
-"В діалоговому вікні <guilabel>Керування розширеннями</guilabel>, виберіть "
-"пакунок розширення, опис до якого хочете прочитати, і натисніть кнопку "
-"<guibutton>Інформація</guibutton>."
-
-#: C/f-spot.xml:1078(title)
-msgid "Developing extensions"
-msgstr "Розробка розширень"
-
-#: C/f-spot.xml:1080(para)
-msgid ""
-"<ulink url=\"http://f-spot.org/Extend_F-Spot\">Extend F-Spot</ulink> "
-"document gives instructions on developing your own extensions for F-Spot."
-msgstr ""
-"Документ <ulink url=\"http://f-spot.org/Extend_F-Spot\">Extend F-Spot</"
-"ulink> надає інструкції з розробки своїх власних розширень для F-Spot."
-
-#: C/f-spot.xml:1088(title)
-msgid "Shortcuts"
-msgstr "Клавіатурні скорочення"
-
-#: C/f-spot.xml:1091(title)
-msgid "Global Shortcuts"
-msgstr "Глобальні скорочення"
-
-#: C/f-spot.xml:1096(entry) C/f-spot.xml:1205(entry) C/f-spot.xml:1301(entry)
-#: C/f-spot.xml:1353(entry)
-msgid "Key"
-msgstr "Клавіша"
-
-#: C/f-spot.xml:1099(entry) C/f-spot.xml:1208(entry) C/f-spot.xml:1304(entry)
-#: C/f-spot.xml:1356(entry)
-msgid "Action"
-msgstr "Дія"
-
-#: C/f-spot.xml:1107(keycap)
-msgid "["
-msgstr "["
-
-#: C/f-spot.xml:1109(entry)
-msgid "Rotate the selected photos to the left"
-msgstr "Повернути виділені фото ліворуч"
-
-#: C/f-spot.xml:1115(keycap)
-msgid "]"
-msgstr "]"
-
-#: C/f-spot.xml:1117(entry)
-msgid "Rotate the selected photos to the right"
-msgstr "Повернути виділені фото праворуч"
-
-#: C/f-spot.xml:1123(keycap) C/f-spot.xml:1131(keycap)
-msgid "Del"
-msgstr "Del"
-
-#: C/f-spot.xml:1125(entry)
-msgid "Remove selected photos from F-Spot's catalogue"
-msgstr "Вилучити виділені фото з каталогу F-Spot"
-
-#: C/f-spot.xml:1131(keycap) C/f-spot.xml:1224(keycap)
-#: C/f-spot.xml:1258(keycap) C/f-spot.xml:1267(keycap)
-#: C/f-spot.xml:1284(keycap) C/f-spot.xml:1446(keycap)
-msgid "Shift"
-msgstr "Shift"
-
-#: C/f-spot.xml:1133(entry)
-msgid ""
-"Delete selected photos permanently from the drive. If possible, they will "
-"moved to trash."
-msgstr ""
-"Вилучити назавжди виділені фото з диска. Якщо можливо, помістити їх у "
-"смітник."
-
-#: C/f-spot.xml:1140(keycap)
-msgid "t"
-msgstr "t"
-
-#: C/f-spot.xml:1142(entry)
-msgid "View or edit tags for selected photos"
-msgstr "Перегляд або редагування позначок для виділених фото"
-
-#: C/f-spot.xml:1148(keycap)
-msgid "F11"
-msgstr "F11"
-
-#: C/f-spot.xml:1150(entry) C/f-spot.xml:1399(entry)
-msgid "Full screen view"
-msgstr "Перегляд на весь екран"
-
-#: C/f-spot.xml:1156(keycap) C/f-spot.xml:1164(keycap)
-#: C/f-spot.xml:1172(keycap) C/f-spot.xml:1180(keycap)
-#: C/f-spot.xml:1216(keycap) C/f-spot.xml:1224(keycap)
-#: C/f-spot.xml:1242(keycap) C/f-spot.xml:1267(keycap)
-#: C/f-spot.xml:1320(keycap)
-msgid "Ctrl"
-msgstr "Ctrl"
-
-#: C/f-spot.xml:1156(keycap)
-msgid "I"
-msgstr "I"
-
-#: C/f-spot.xml:1158(entry)
-msgid "Displays information about the photo"
-msgstr "Показати інформацію про фото"
-
-#: C/f-spot.xml:1164(keycap)
-msgid "Equals"
-msgstr "Дорівнює (=)"
-
-#: C/f-spot.xml:1166(entry)
-msgid "Zoom-in"
-msgstr "Наблизити"
-
-#: C/f-spot.xml:1172(keycap)
-msgid "Minus"
-msgstr "Мінус (-)"
-
-#: C/f-spot.xml:1174(entry)
-msgid "Zoom-out"
-msgstr "Віддалити"
-
-#: C/f-spot.xml:1180(keycap) C/f-spot.xml:1372(keycap)
-msgid "N"
-msgstr "N"
-
-#: C/f-spot.xml:1182(entry)
-msgid "Import photos"
-msgstr "Імпорт фотографій"
-
-#: C/f-spot.xml:1188(keycap)
-msgid "Alt"
-msgstr "Alt"
-
-#: C/f-spot.xml:1188(keycap)
-msgid "0-5"
-msgstr "0-5"
-
-#: C/f-spot.xml:1190(entry)
-msgid "Alt plus a number from 0 to 5 rate the selected picture(s)"
-msgstr "Alt + цифра від 0 до 5 — оцінка вибраного знімка(ів)"
-
-#: C/f-spot.xml:1200(title)
-msgid "Browse Mode Shortcuts"
-msgstr "Скорочення для режиму перегляду"
-
-#: C/f-spot.xml:1216(keycap) C/f-spot.xml:1225(keycap)
-msgid "A"
-msgstr "A"
-
-#: C/f-spot.xml:1218(entry)
-msgid "Select all"
-msgstr "Виділити все"
-
-#: C/f-spot.xml:1227(entry)
-msgid "Unselect all"
-msgstr "Скасувати виділення всього"
-
-#: C/f-spot.xml:1233(keycap) C/f-spot.xml:1380(keycap)
-msgid "H"
-msgstr "H"
-
-#: C/f-spot.xml:1233(keycap) C/f-spot.xml:1380(keycap)
-msgid "J"
-msgstr "J"
-
-#: C/f-spot.xml:1234(keycap) C/f-spot.xml:1381(keycap)
-msgid "K"
-msgstr "K"
-
-#: C/f-spot.xml:1234(keycap) C/f-spot.xml:1381(keycap)
-msgid "L"
-msgstr "L"
-
-#: C/f-spot.xml:1232(entry) C/f-spot.xml:1379(entry)
-msgid ""
-"Arrow keys or <placeholder-1/>, <placeholder-2/>, <placeholder-3/>, "
-"<placeholder-4/>"
-msgstr ""
-"Клавіші зі стрілками або клавіші <placeholder-1/>, <placeholder-2/>, "
-"<placeholder-3/>, <placeholder-4/>"
-
-#: C/f-spot.xml:1236(entry)
-msgid "Move focus"
-msgstr "Перемістити фокус"
-
-#: C/f-spot.xml:1241(entry)
-msgid "<placeholder-1/>-Arrow key"
-msgstr "<placeholder-1/> + Клавіша зі стрілкою"
-
-#: C/f-spot.xml:1244(entry)
-msgid "Move the focus without changing the selection"
-msgstr "Перемістити фокус не змінюючи виділення"
-
-#: C/f-spot.xml:1250(keycap) C/f-spot.xml:1372(keycap)
-msgid "Spacebar"
-msgstr "Spacebar"
-
-#: C/f-spot.xml:1252(entry)
-msgid "Select or unselect the focused photo"
-msgstr "Виділити або скасувати виділення зі сфокусованого фото"
-
-#: C/f-spot.xml:1259(keycap)
-msgid "Arrow key"
-msgstr "Клавіша зі стрілкою"
-
-#: C/f-spot.xml:1261(entry)
-msgid "Change the photo selection"
-msgstr "Змінити виділене фото"
-
-#: C/f-spot.xml:1268(keycap)
-msgid "Left arrow or Right arrow"
-msgstr "Стрілка ліворуч або праворуч"
-
-#: C/f-spot.xml:1270(entry)
-msgid ""
-"Add/Remove all photos in the row, in the direction pressed, to the selection"
-msgstr "Додати або скасувати виділення усіх фото в рядку у вибраному напрямку"
-
-#: C/f-spot.xml:1276(keycap) C/f-spot.xml:1284(keycap)
-#: C/f-spot.xml:1437(keycap)
-msgid "V"
-msgstr "V"
-
-#: C/f-spot.xml:1278(entry)
-msgid "Pops up a larger preview of the picture pointed by the mouse"
-msgstr "Збільшений перегляд частини зображення, на яку вказує вказівник миші"
-
-#: C/f-spot.xml:1286(entry)
-msgid ""
-"Pops up a larger preview and a color histogram of the picture pointed by the "
-"mouse"
-msgstr ""
-"Збільшений перегляд частини зображення, на яку вказує вказівник миші та "
-"колірна гістограма"
-
-#: C/f-spot.xml:1296(title)
-msgid "Tag Shortcuts"
-msgstr "Скорочення для позначок"
-
-#: C/f-spot.xml:1312(keycap)
-msgid "F2"
-msgstr "F2"
-
-#: C/f-spot.xml:1314(entry)
-msgid "Rename selected tag"
-msgstr "Перейменувати виділену позначку"
-
-#: C/f-spot.xml:1320(keycap)
-msgid "T"
-msgstr "T"
-
-#: C/f-spot.xml:1322(entry)
-msgid "Add tags to selected photos"
-msgstr "Додати позначку до виділених фото"
-
-#: C/f-spot.xml:1327(entry) C/f-spot.xml:1335(entry)
-msgid "n/a"
-msgstr "немає"
-
-#: C/f-spot.xml:1330(entry)
-msgid "Drag and drop tags to move them"
-msgstr "Перетягнути позначки, щоб перемістити їх"
-
-#: C/f-spot.xml:1338(entry)
-msgid "Type a tag's name to jump to it (only works if tag is shown/expanded)"
-msgstr ""
-"Ввести назву позначки, щоб перейти до неї (працює лише якщо позначка видима)"
-
-#: C/f-spot.xml:1348(title)
-msgid "Edit Mode Shortcuts"
-msgstr "Скорочення для режиму редагування"
-
-#: C/f-spot.xml:1364(keycap)
-msgid "Page Up"
-msgstr "Page Up"
-
-#: C/f-spot.xml:1364(keycap)
-msgid "Backspace"
-msgstr "Backspace"
-
-#: C/f-spot.xml:1364(keycap)
-msgid "B"
-msgstr "B"
-
-#: C/f-spot.xml:1363(entry) C/f-spot.xml:1371(entry)
-msgid "<placeholder-1/>, <placeholder-2/>, <placeholder-3/>"
-msgstr "<placeholder-1/>, <placeholder-2/>, <placeholder-3/>"
-
-#: C/f-spot.xml:1366(entry)
-msgid "Go to Previous Photo"
-msgstr "Перейти до попереднього фото"
-
-#: C/f-spot.xml:1372(keycap)
-msgid "Page Down"
-msgstr "Page Down"
-
-#: C/f-spot.xml:1374(entry)
-msgid "Go to Next Photo"
-msgstr "Перейти до наступного фото"
-
-#: C/f-spot.xml:1383(entry)
-msgid "Go to Previous/Next photo or move around a zoomed photo"
-msgstr ""
-"Перейти до попереднього або наступного фото чи переміщатись по збільшеному "
-"фото"
-
-#: C/f-spot.xml:1389(keycap)
-msgid "R"
-msgstr "R"
-
-#: C/f-spot.xml:1391(entry)
-msgid "Go to a random photo"
-msgstr "Перейти до випадкового фото"
-
-#: C/f-spot.xml:1397(keycap)
-msgid "f"
-msgstr "f"
-
-#: C/f-spot.xml:1405(keycap)
-msgid "0"
-msgstr "0"
-
-#: C/f-spot.xml:1407(entry)
-msgid "Fit the image to the screen"
-msgstr "Припасувати зображення до розміру екрана"
-
-#: C/f-spot.xml:1413(keycap)
-msgid "1"
-msgstr "1"
-
-#: C/f-spot.xml:1415(entry)
-msgid "Zoom Factor to 1.0 (1 screen pixel per image pixel)"
-msgstr ""
-"Коефіцієнт масштабування до 1.0 (1 піксель екрана на піксель зображення)"
-
-#: C/f-spot.xml:1421(keycap)
-msgid "2"
-msgstr "2"
-
-#: C/f-spot.xml:1423(entry)
-msgid "Zoom Factor to 2.0 (4 screen pixels per image pixel)"
-msgstr ""
-"Коефіцієнт масштабування до 2.0 (4 пікселя екрана на піксель зображення)"
-
-#: C/f-spot.xml:1429(keycap)
-msgid "Escape"
-msgstr "Escape"
-
-#: C/f-spot.xml:1431(entry)
-msgid "Returns to Browser mode"
-msgstr "Повернутись до режиму перегляду"
-
-#: C/f-spot.xml:1441(keycap)
-msgid "v"
-msgstr "v"
-
-#: C/f-spot.xml:1439(entry)
-msgid ""
-"Examine photo with magnifying glass (Loupe). Doubleclick on the Loupe, or "
-"type <placeholder-1/> again to close it."
-msgstr ""
-"Розглянути фотографію через збільшувальне скло (лупу). Щоб закрити його, "
-"двічі клацніть на ньому, або знову натисніть <placeholder-1/>."
-
-#: C/f-spot.xml:1445(entry)
-msgid "<placeholder-1/>-Mousewheel"
-msgstr "<placeholder-1/> + коліщатко миші"
-
-#: C/f-spot.xml:1448(entry)
-msgid "Faster filmstrip scrolling"
-msgstr "Прискорена прокрутка фотострічки"
-
-#: C/f-spot.xml:1454(keycap)
-msgid "i"
-msgstr "i"
-
-#: C/f-spot.xml:1456(entry)
-msgid "Toggle infobox visibility ''(only when in full screen)''"
-msgstr ""
-"Увімкнути або вимкнути видимість панелі інформації «(лише в повноекранному "
-"режимі)»"
-
-#. Put one translator per line, in the form of NAME <EMAIL>, YEAR1, YEAR2
-#: C/f-spot.xml:0(None)
-msgid "translator-credits"
-msgstr "Sergiy Gavrylov <sergiovana at bigmir.net>, 2010."
diff --git a/extensions/Editors/BWEditor/BWEditor.cs b/extensions/Editors/BWEditor/BWEditor.cs
index bd4dcda..ffe76c4 100644
--- a/extensions/Editors/BWEditor/BWEditor.cs
+++ b/extensions/Editors/BWEditor/BWEditor.cs
@@ -16,6 +16,7 @@ using Gtk;
using Gdk;
using Mono.Unix;
using Mono.Simd;
+using Hyena;
namespace BWEditor {
class BWEditor : Editor {
@@ -33,9 +34,9 @@ namespace BWEditor {
protected override Pixbuf Process (Pixbuf input, Cms.Profile input_profile)
{
- uint timer = FSpot.Utils.Log.DebugTimerStart ();
+ uint timer = Log.DebugTimerStart ();
if (input.BitsPerSample != 8) {
- FSpot.Utils.Log.Warning ("unsupported pixbuf format");
+ Log.Warning ("unsupported pixbuf format");
return (Pixbuf)input.Clone ();
}
Pixbuf output = new Pixbuf (input.Colorspace, input.HasAlpha, input.BitsPerSample, input.Width, input.Height);
@@ -70,7 +71,7 @@ namespace BWEditor {
pix_out[i*rowstride_out + j*chan + 3] = pix_in[i*rowstride_in + j*chan + 3];
}
}
- FSpot.Utils.Log.DebugTimerPrint (timer, "Processing took {0}");
+ Log.DebugTimerPrint (timer, "Processing took {0}");
return output;
}
diff --git a/extensions/Editors/BWEditor/Makefile.am b/extensions/Editors/BWEditor/Makefile.am
index 744de85..521695c 100644
--- a/extensions/Editors/BWEditor/Makefile.am
+++ b/extensions/Editors/BWEditor/Makefile.am
@@ -1,21 +1,11 @@
-addin = BWEditor
+ASSEMBLY = FSpot.Editors.BWEditor
+ASSEMBLY_BUILD_FLAGS = -unsafe
+TARGET = library
+LINK = $(REF_FSPOT_EXTENSION_BWEDITOR)
+INSTALL_DIR = $(EXTENSIONS_INSTALL_DIR)
-addin_manifest = $(addin).addin.xml
+SOURCES = BWEditor.cs
-addin_sources = \
- $(addin).cs
+RESOURCES = BWEditor.addin.xml
-addin_resources = \
- $(addin_manifest)
-
-addin_references = \
- Mono.Posix \
- Mono.Simd
-
-addin_packages = \
- gtk-sharp-2.0
-
-addin_extraflags = -unsafe
-addin_extradist =
-
-include $(top_srcdir)/Makefile.addins
+include $(top_srcdir)/build/build.mk
diff --git a/extensions/Editors/BWEditor/Makefile.in b/extensions/Editors/BWEditor/Makefile.in
index 7b943b7..105f842 100644
--- a/extensions/Editors/BWEditor/Makefile.in
+++ b/extensions/Editors/BWEditor/Makefile.in
@@ -35,13 +35,22 @@ POST_UNINSTALL = :
build_triplet = @build@
host_triplet = @host@
DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in \
- $(top_srcdir)/Makefile.addins $(top_srcdir)/Makefile.include
+ $(top_srcdir)/build/build.environment.mk \
+ $(top_srcdir)/build/build.mk \
+ $(top_srcdir)/build/build.rules.mk
+ at ENABLE_TESTS_TRUE@am__append_1 = " $(NUNIT_LIBS)"
subdir = extensions/Editors/BWEditor
ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
am__aclocal_m4_deps = $(top_srcdir)/build/m4/shave/shave.m4 \
$(top_srcdir)/build/m4/shamrock/expansions.m4 \
+ $(top_srcdir)/build/m4/shamrock/gnome-doc.m4 \
$(top_srcdir)/build/m4/shamrock/mono.m4 \
+ $(top_srcdir)/build/m4/shamrock/nunit.m4 \
$(top_srcdir)/build/m4/shamrock/programs.m4 \
+ $(top_srcdir)/build/m4/f-spot/flickrnet.m4 \
+ $(top_srcdir)/build/m4/f-spot/gnome-keyring-sharp.m4 \
+ $(top_srcdir)/build/m4/f-spot/gtk-sharp.m4 \
+ $(top_srcdir)/build/m4/f-spot/mono-addins.m4 \
$(top_srcdir)/acinclude.m4 $(top_srcdir)/configure.ac
am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
$(ACLOCAL_M4)
@@ -49,8 +58,6 @@ mkinstalldirs = $(install_sh) -d
CONFIG_HEADER = $(top_builddir)/config.h
CONFIG_CLEAN_FILES =
CONFIG_CLEAN_VPATH_FILES =
-SOURCES =
-DIST_SOURCES =
am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`;
am__vpath_adj = case $$p in \
$(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \
@@ -72,8 +79,9 @@ am__nobase_list = $(am__nobase_strip_setup); \
am__base_list = \
sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \
sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g'
-am__installdirs = "$(DESTDIR)$(addindir)"
-DATA = $(addin_DATA)
+am__installdirs = "$(DESTDIR)$(moduledir)"
+SCRIPTS = $(module_SCRIPTS)
+DIST_SOURCES =
DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
ACLOCAL = @ACLOCAL@
ACLOCAL_AMFLAGS = @ACLOCAL_AMFLAGS@
@@ -119,6 +127,8 @@ EXIF_SOVERSION = @EXIF_SOVERSION@
F77 = @F77@
FC = @FC@
FGREP = @FGREP@
+FLICKRNET_CFLAGS = @FLICKRNET_CFLAGS@
+FLICKRNET_LIBS = @FLICKRNET_LIBS@
F_CFLAGS = @F_CFLAGS@
F_LIBS = @F_LIBS@
GAPI2CODEGEN = @GAPI2CODEGEN@
@@ -132,6 +142,8 @@ GCONF_SHARP_LIBS = @GCONF_SHARP_LIBS@
GETTEXT_PACKAGE = @GETTEXT_PACKAGE@
GIO_CFLAGS = @GIO_CFLAGS@
GIO_LIBS = @GIO_LIBS@
+GLIBSHARP_2_12_7_CFLAGS = @GLIBSHARP_2_12_7_CFLAGS@
+GLIBSHARP_2_12_7_LIBS = @GLIBSHARP_2_12_7_LIBS@
GLIBSHARP_CFLAGS = @GLIBSHARP_CFLAGS@
GLIBSHARP_LIBS = @GLIBSHARP_LIBS@
GLIB_CFLAGS = @GLIB_CFLAGS@
@@ -147,6 +159,10 @@ GNOME_SHARP_CFLAGS = @GNOME_SHARP_CFLAGS@
GNOME_SHARP_LIBS = @GNOME_SHARP_LIBS@
GOBJECT_QUERY = @GOBJECT_QUERY@
GREP = @GREP@
+GTKSHARP_A11Y_CFLAGS = @GTKSHARP_A11Y_CFLAGS@
+GTKSHARP_A11Y_LIBS = @GTKSHARP_A11Y_LIBS@
+GTKSHARP_CFLAGS = @GTKSHARP_CFLAGS@
+GTKSHARP_LIBS = @GTKSHARP_LIBS@
HELP_DIR = @HELP_DIR@
ICONS_DIRECTORY = @ICONS_DIRECTORY@
INSTALL = @INSTALL@
@@ -160,14 +176,14 @@ INTLTOOL_EXTRACT = @INTLTOOL_EXTRACT@
INTLTOOL_MERGE = @INTLTOOL_MERGE@
INTLTOOL_PERL = @INTLTOOL_PERL@
INTLTOOL_UPDATE = @INTLTOOL_UPDATE@
+KEYRINGSHARP_CFLAGS = @KEYRINGSHARP_CFLAGS@
+KEYRINGSHARP_LIBS = @KEYRINGSHARP_LIBS@
LCMS_CFLAGS = @LCMS_CFLAGS@
LCMS_LIBS = @LCMS_LIBS@
LD = @LD@
LDFLAGS = @LDFLAGS@
LIBEXIF_VERSION_CHECK_CFLAGS = @LIBEXIF_VERSION_CHECK_CFLAGS@
LIBEXIF_VERSION_CHECK_LIBS = @LIBEXIF_VERSION_CHECK_LIBS@
-LIBGPHOTO2_CFLAGS = @LIBGPHOTO2_CFLAGS@
-LIBGPHOTO2_LIBS = @LIBGPHOTO2_LIBS@
LIBJPEG = @LIBJPEG@
LIBOBJS = @LIBOBJS@
LIBS = @LIBS@
@@ -182,6 +198,12 @@ MCS = @MCS@
MKDIR_P = @MKDIR_P@
MKINSTALLDIRS = @MKINSTALLDIRS@
MONO = @MONO@
+MONO_ADDINS_CFLAGS = @MONO_ADDINS_CFLAGS@
+MONO_ADDINS_GUI_CFLAGS = @MONO_ADDINS_GUI_CFLAGS@
+MONO_ADDINS_GUI_LIBS = @MONO_ADDINS_GUI_LIBS@
+MONO_ADDINS_LIBS = @MONO_ADDINS_LIBS@
+MONO_ADDINS_SETUP_CFLAGS = @MONO_ADDINS_SETUP_CFLAGS@
+MONO_ADDINS_SETUP_LIBS = @MONO_ADDINS_SETUP_LIBS@
MONO_MODULE_CFLAGS = @MONO_MODULE_CFLAGS@
MONO_MODULE_LIBS = @MONO_MODULE_LIBS@
MSGFMT = @MSGFMT@
@@ -192,7 +214,6 @@ NDESK_DBUS_LIBS = @NDESK_DBUS_LIBS@
NM = @NM@
NMEDIT = @NMEDIT@
NUNIT_CFLAGS = @NUNIT_CFLAGS@
-NUNIT_DEFINES = @NUNIT_DEFINES@
NUNIT_LIBS = @NUNIT_LIBS@
OBJC = @OBJC@
OBJDUMP = @OBJDUMP@
@@ -284,84 +305,228 @@ target_alias = @target_alias@
top_build_prefix = @top_build_prefix@
top_builddir = @top_builddir@
top_srcdir = @top_srcdir@
-addin = BWEditor
-addin_manifest = $(addin).addin.xml
-addin_sources = \
- $(addin).cs
-
-addin_resources = \
- $(addin_manifest)
-
-addin_references = \
- Mono.Posix \
- Mono.Simd
-
-addin_packages = \
- gtk-sharp-2.0
-
-addin_extraflags = -unsafe
-addin_extradist =
-ASSEMBLY = $(addin).dll
+ASSEMBLY = FSpot.Editors.BWEditor
+ASSEMBLY_BUILD_FLAGS = -unsafe
+TARGET = library
+LINK = $(REF_FSPOT_EXTENSION_BWEDITOR) $(am__append_1)
+INSTALL_DIR = $(EXTENSIONS_INSTALL_DIR)
+SOURCES = BWEditor.cs
+RESOURCES = BWEditor.addin.xml
+
+# Initializers
+MONO_BASE_PATH =
+MONO_ADDINS_PATH =
+
+# Install Paths
+DEFAULT_INSTALL_DIR = $(pkglibdir)
+BACKENDS_INSTALL_DIR = $(DEFAULT_INSTALL_DIR)/Backends
+EXTENSIONS_INSTALL_DIR = $(DEFAULT_INSTALL_DIR)/Extensions
DIR_DOCS = $(top_builddir)/docs
DIR_EXTENSIONS = $(top_builddir)/extensions
-DIR_GPHOTO2 = $(top_builddir)/lib/libgphoto2-sharp
DIR_ICONS = $(top_builddir)/icons
DIR_JPEGTRAN = $(top_builddir)/lib/libjpegtran
-DIR_KEYRING = $(top_builddir)/lib/gnome-keyring-sharp
DIR_LIBFSPOT = $(top_builddir)/lib/libfspot
DIR_SEMWEB = $(top_builddir)/lib/semweb
DIR_SRC = $(top_builddir)/src
DIR_GIOSHARP = $(top_builddir)/lib/gio-sharp/gio
DIR_GTKSHARPBEANS = $(top_builddir)/lib/gtk-sharp-beans
DIR_UNIQUESHARP = $(top_builddir)/lib/unique-sharp/unique
-LINK_KEYRING = -r:$(DIR_KEYRING)/gnome-keyring-sharp.dll
-LINK_GPHOTO2 = -r:$(DIR_GPHOTO2)/libgphoto2-sharp.dll
-LINK_SEMWEB = -r:$(DIR_SEMWEB)/SemWeb.dll
-LINK_GIOSHARP = -r:$(DIR_GIOSHARP)/gio-sharp.dll
-LINK_GTKSHARPBEANS = -r:$(DIR_GTKSHARPBEANS)/gtk-sharp-beans.dll
-LINK_UNIQUESHARP = -r:$(DIR_UNIQUESHARP)/unique-sharp.dll
-CSC_FLAGS = -debug
-CSC = $(MCS) $(CSC_FLAGS) -target:exe
-CSC_LIB = $(MCS) $(CSC_FLAGS) -target:library
-MONO_DEBUGFLAGS = --debug
-RUNTIME = mono $(MONO_DEBUGFLAGS)
-dep_resources = $(addprefix $(srcdir)/, $(addin_resources))
-build_resources = $(foreach res, $(dep_resources), $(addprefix -resource:, $(res)),$(notdir $(res)))
-build_sources = $(addprefix $(srcdir)/, $(addin_sources))
-build_packages = \
- $(addprefix -pkg:, $(addin_packages)) \
- -pkg:mono-addins
-
-build_references = \
- $(addprefix -r:, $(addin_references)) \
- -r:$(top_builddir)/src/f-spot.exe \
- -r:$(top_builddir)/src/Cms.dll \
- -r:$(top_builddir)/src/FSpot.Core.dll \
- -r:$(top_builddir)/src/FSpot.Platform.dll \
- -r:$(top_builddir)/src/FSpot.Query.dll \
- -r:$(top_builddir)/src/FSpot.Utils.dll \
- -r:$(top_builddir)/src/FSpot.Widgets.dll \
- $(LINK_SEMWEB) \
- $(LINK_GPHOTO2) \
- $(LINK_GIOSHARP) \
- $(LINK_UNIQUESHARP) \
- $(LINK_GTKSHARPBEANS)
-
-addin_SOURCES = \
- $(build_sources)
-
-addindir = $(pkglibdir)/extensions
-addin_DATA = $(ASSEMBLY)
-CLEANFILES = $(ASSEMBLY) $(ASSEMBLY).mdb *.mpack
-EXTRA_DIST = \
- $(build_sources) \
- $(dep_resources) \
- $(addin_extradist)
-
+DIR_BIN = $(top_builddir)/bin
+
+# External libraries to link against, generated from configure
+LINK_SYSTEM = -r:System
+LINK_SYSTEMDATA = -r:System.Data
+LINK_SYSTEM_WEB = -r:System.Web
+LINK_MONO_POSIX = -r:Mono.Posix
+LINK_MONO_CAIRO = -r:Mono.Cairo
+LINK_MONO_SIMD = -r:Mono.Simd
+LINK_MONODATA = -r:Mono.Data
+LINK_MONO_DATA_SQLITECLIENT = -r:Mono.Data.SqliteClient
+LINK_ICSHARP_ZIP_LIB = -r:ICSharpCode.SharpZipLib
+LINK_KEYRING = $(KEYRINGSHARP_LIBS)
+LINK_GLIB = $(GLIBSHARP_LIBS)
+LINK_GTK = $(GTKSHARP_LIBS)
+LINK_GNOME = $(GNOME_SHARP_LIBS)
+LINK_GCONF = $(GCONF_SHARP_LIBS)
+LINK_GLADE = -pkg:glade-sharp-2.0
+LINK_FLICKRNET = -pkg:flickrnet
+LINK_DBUS = $(NDESK_DBUS_LIBS) $(NDESK_DBUS_GLIB_LIBS)
+LINK_DBUS_NO_GLIB = $(NDESK_DBUS_LIBS)
+LINK_MONO_ADDINS_DEPS = $(MONO_ADDINS_LIBS)
+LINK_MONO_ADDINS_SETUP_DEPS = $(MONO_ADDINS_SETUP_LIBS)
+LINK_MONO_ADDINS_GUI_DEPS = $(MONO_ADDINS_GUI_LIBS)
+
+# GIO
+REF_GIO =
+LINK_GIO = -r:$(DIR_GIOSHARP)/gio-sharp.dll
+LINK_GIO_DEPS = $(REF_GIO) $(LINK_GIO)
+
+# Gtk Beans
+REF_GTK_BEANS = $(LINK_GIO_DEPS)
+LINK_GTK_BEANS = -r:$(DIR_GTKSHARPBEANS)/gtk-sharp-beans.dll
+LINK_GTK_BEANS_DEPS = $(REF_GTK_BEANS) $(LINK_GTK_BEANS)
+
+# Uniqe
+REF_UNIQUE =
+LINK_UNIQUE = -r:$(DIR_UNIQUESHARP)/unique-sharp.dll
+LINK_UNIQUE_DEPS = $(REF_UNIQUE) $(LINK_UNIQUE)
+
+# Hyena
+REF_HYENA = $(LINK_SYSTEM) $(LINK_MONO_POSIX)
+LINK_HYENA = -r:$(DIR_BIN)/Hyena.dll
+LINK_HYENA_DEPS = $(REF_HYENA) $(LINK_HYENA)
+
+# Semweb
+REF_SEMWEB = $(LINK_SYSTEMDATA) $(LINK_HYENA_DEPS)
+LINK_SEMWEB = -r:$(DIR_BIN)/SemWeb.dll
+LINK_SEMWEB_DEPS = $(REF_SEMWEB) $(LINK_SEMWEB)
+
+# Hyena.Data.Sqlite
+REF_HYENA_DATA_SQLITE = $(LINK_SQLITE)
+LINK_HYENA_DATA_SQLITE = -r:$(DIR_BIN)/Hyena.Data.Sqlite.dll
+LINK_HYENA_DATA_SQLITE_DEPS = $(REF_HYENA_DATA_SQLITE) $(LINK_HYENA_DATA_SQLITE)
+
+# Hyena.Gui
+REF_HYENA_GUI = $(LINK_HYENA_DEPS)
+LINK_HYENA_GUI = -r:$(DIR_BIN)/Hyena.Gui.dll
+LINK_HENA_GUI_DEPS = $(REF_HYENA_GUI) $(LINK_HYENA_GUI)
+
+# FSpot.Cms
+REF_FSPOT_CMS = $(LINK_GTK)
+LINK_FSPOT_CMS = -r:$(DIR_BIN)/FSpot.Cms.dll
+LINK_FSPOT_CMS_DEPS = $(REF_FSPOT_CMS) $(LINK_FSPOT_CMS)
+
+# FSpot.Utils
+REF_FSPOT_UTILS = $(LINK_HYENA_DEPS) $(LINK_GTK) $(LINK_GIO) $(LINK_MONO_CAIRO)
+LINK_FSPOT_UTILS = -r:$(DIR_BIN)/FSpot.Utils.dll
+LINK_FSPOT_UTILS_DEPS = $(REF_FSPOT_UTILS) $(LINK_FSPOT_UTILS)
+
+# FSpot.Core
+REF_FSPOT_CORE = $(LINK_FSPOT_UTILS_DEPS) $(LINK_FSPOT_CMS_DEPS)
+LINK_FSPOT_CORE = -r:$(DIR_BIN)/FSpot.Core.dll
+LINK_FSPOT_CORE_DEPS = $(REF_FSPOT_CORE) $(LINK_FSPOT_CORE)
+
+# FSpot.Query
+REF_FSPOT_QUERY = $(LINK_FSPOT_CORE_DEPS)
+LINK_FSPOT_QUERY = -r:$(DIR_BIN)/FSpot.Query.dll
+LINK_FSPOT_QUERY_DEPS = $(REF_FSPOT_QUERY) $(LINK_FSPOT_QUERY)
+
+# FSpot.JobScheduler
+REF_FSPOT_JOB_SCHEDULER = $(LINK_HYENA_DEPS)
+LINK_FSPOT_JOB_SCHEDULER = -r:$(DIR_BIN)/FSpot.JobScheduler.dll
+LINK_FSPOT_JOB_SCHEDULER_DEPS = $(REF_FSPOT_JOB_SCHEDULER) $(LINK_FSPOT_JOB_SCHEDULER)
+
+# FSpot.Bling
+REF_FSPOT_BLING = $(LINK_GTK_BEANS_DEPS) $(LINK_GLIB)
+LINK_FSPOT_BLING = -r:$(DIR_BIN)/FSpot.Bling.dll
+LINK_FSPOT_BLING_DEPS = $(REF_FSPOT_BLING) $(LINK_FSPOT_BLING)
+
+# FSpot.Platform
+REF_FSPOT_PLATFORM = $(LINK_GCONF) $(LINK_GTK) $(LINK_FSPOT_CORE_DEPS) $(LINK_DBUS)
+LINK_FSPOT_PLATFORM = -r:$(DIR_BIN)/FSpot.Platform.dll
+LINK_FSPOT_PLATFORM_DEPS = $(REF_FSPOT_PLATFORM) $(LINK_FSPOT_PLATFORM)
+
+# FSpot.Widgets
+REF_FSPOT_WIDGETS = $(LINK_FSPOT_CORE_DEPS) $(LINK_FSPOT_BLING_DEPS)
+LINK_FSPOT_WIDGETS = -r:$(DIR_BIN)/FSpot.Widgets.dll
+LINK_FSPOT_WIDGETS_DEPS = $(REF_FSPOT_WIDGETS) $(LINK_FSPOT_WIDGETS)
+
+# FSpot (executable)
+REF_FSPOT = $(LINK_FSPOT_WIDGETS_DEPS) $(LINK_FSPOT_PLATFORM_DEPS) $(LINK_FSPOT_QUERY_DEPS) \
+ $(LINK_GLIB) $(LINK_MONO_ADDINS_DEPS) $(LINK_UNIQUE_DEPS) $(LINK_MONO_ADDINS_SETUP_DEPS) \
+ $(LINK_SEMWEB_DEPS) $(LINK_GLADE) $(LINK_MONODATA) $(LINK_MONO_DATA_SQLITECLIENT) \
+ $(LINK_MONO_ADDINS_GUI_DEPS) $(LINK_FSPOT_JOB_SCHEDULER_DEPS) $(LINK_ICSHARP_ZIP_LIB) \
+ $(LINK_GNOME)
+
+# FIXME: do not link executables
+LINK_FSPOT = -r:$(DIR_BIN)/f-spot.exe
+LINK_FSPOT_DEPS = $(REF_FSPOT) $(LINK_FSPOT)
+
+# Extensions
+REF_FSPOT_EXTENSION_BLACKOUTEDITOR = $(LINK_FSPOT_DEPS)
+REF_FSPOT_EXTENSION_BWEDITOR = $(LINK_FSPOT_DEPS) $(LINK_MONO_SIMD)
+REF_FSPOT_EXTENSION_FLIPEDITOR = $(LINK_FSPOT_DEPS)
+REF_FSPOT_EXTENSION_PIXELATEEDITOR = $(LINK_FSPOT_DEPS)
+REF_FSPOT_EXTENSION_RESIZEEDITOR = $(LINK_FSPOT_DEPS)
+REF_FSPOT_EXTENSION_CDEXPORT = $(LINK_FSPOT_DEPS)
+REF_FSPOT_EXTENSION_FACEBOOKEXPORT = $(LINK_FSPOT_DEPS) $(LINK_KEYRING)
+REF_FSPOT_EXTENSION_FLICKREXPORT = $(LINK_FSPOT_DEPS) $(LINK_FLICKRNET)
+REF_FSPOT_EXTENSION_FOLDEREXPORT = $(LINK_FSPOT_DEPS) $(LINK_SYSTEM_WEB)
+REF_FSPOT_EXTENSION_GALLERYEXPORT = $(LINK_FSPOT_DEPS)
+REF_MONO_GOOGLE = $(LINK_HYENA_DEPS)
+LINK_MONO_GOOGLE = -r:$(DIR_BIN)/Mono.Google.dll
+LINK_MONO_GOOGLE_DEPS = $(REF_MONO_GOOGLE) $(LINK_MONO_GOOGLE)
+REF_FSPOT_EXTENSION_PICASAWEBEXPORT = $(LINK_FSPOT_DEPS) $(LINK_MONO_GOOGLE) $(LINK_KEYRING)
+REF_SMUGMUGNET = $(LINK_FSPOT_DEPS)
+LINK_SMUGMUGNET = -r:$(DIR_BIN)/SmugMugNet.dll
+LINK_SMUGMUGNET_DEPS = $(REF_SMUGMUGNET) $(LINK_SMUGMUGNET)
+REF_FSPOT_EXTENSION_SMUGMUGEXPORT = $(LINK_SMUGMUGNET_DEPS) $(LINK_KEYRING)
+REF_MONO_TABBLO = $(LINK_HYENA_DEPS)
+LINK_MONO_TABBLO = -r:$(DIR_BIN)/Mono.Tabblo.dll
+LINK_MONO_TABBLO_DEPS = $(REF_MONO_TABBLO) $(LINK_MONO_TABBLO)
+REF_FSPOT_EXTENSION_TABBLOEXPORT = $(LINK_FSPOT_DEPS) $(LINK_KEYRING) $(LINK_MONO_TABBLO_DEPS)
+REF_FSPOT_EXTENSION_ZIPEXPORT = $(LINK_FSPOT_DEPS)
+REF_FSPOT_EXTENSION_CHANGEPHOTOPATH = $(LINK_FSPOT_DEPS)
+REF_FSPOT_EXTENSION_DEVELOPINUFRAW = $(LINK_FSPOT_DEPS)
+REF_FSPOT_EXTENSION_HASHJOB = $(LINK_FSPOT_DEPS)
+REF_FSPOT_EXTENSION_LIVEWEBGALLERY = $(LINK_FSPOT_DEPS)
+REF_FSPOT_EXTENSION_MERGEDB = $(LINK_FSPOT_DEPS)
+REF_FSPOT_EXTENSION_RAWPLUSJPEG = $(LINK_FSPOT_DEPS)
+REF_FSPOT_EXTENSION_RETROACTIVEROLL = $(LINK_FSPOT_DEPS)
+REF_FSPOT_EXTENSION_SCREENSAVERCONFIG = $(LINK_FSPOT_DEPS)
+REF_FSPOT_EXTENSION_COVERTRANSITION = $(LINK_FSPOT_DEPS)
+
+# Cute hack to replace a space with something
+colon := :
+empty :=
+space := $(empty) $(empty)
+
+# Build path to allow running uninstalled
+RUN_PATH = $(subst $(space),$(colon), $(MONO_BASE_PATH))
+UNIQUE_FILTER_PIPE = tr [:space:] \\n | sort | uniq
+BUILD_DATA_DIR = $(top_builddir)/bin/share/$(PACKAGE)
+
+# Since all other attempts failed, we currently go this way:
+# This code adds the file specified in ASSEMBLY_INFO_SOURCE to SOURCES_BUILD.
+# If no such file is specified, the default AssemblyInfo.cs is used.
+ASSEMBLY_INFO_SOURCE_REAL = \
+ $(shell if [ "$(ASSEMBLY_INFO_SOURCE)" ]; \
+ then \
+ echo "$(addprefix $(srcdir)/, $(ASSEMBLY_INFO_SOURCE))"; \
+ else \
+ echo "$(top_srcdir)/src/AssemblyInfo.cs"; \
+ fi)
+
+SOURCES_BUILD = $(addprefix $(srcdir)/, $(SOURCES)) \
+ $(ASSEMBLY_INFO_SOURCE_REAL)
+RESOURCES_EXPANDED = $(addprefix $(srcdir)/, $(RESOURCES))
+RESOURCES_BUILD = $(foreach resource, $(RESOURCES_EXPANDED), \
+ -resource:$(resource),$(notdir $(resource)))
+
+INSTALL_ICONS = $(top_srcdir)/build/private-icon-theme-installer "$(mkinstalldirs)" "$(INSTALL_DATA)"
+THEME_ICONS_SOURCE = $(wildcard $(srcdir)/ThemeIcons/*/*/*.png) $(wildcard $(srcdir)/ThemeIcons/scalable/*/*.svg)
+THEME_ICONS_RELATIVE = $(subst $(srcdir)/ThemeIcons/, , $(THEME_ICONS_SOURCE))
+ASSEMBLY_EXTENSION = $(strip $(patsubst library, dll, $(TARGET)))
+ASSEMBLY_FILE = $(top_builddir)/bin/$(ASSEMBLY).$(ASSEMBLY_EXTENSION)
+INSTALL_DIR_RESOLVED = $(firstword $(subst , $(DEFAULT_INSTALL_DIR), $(INSTALL_DIR)))
+ at ENABLE_TESTS_TRUE@ENABLE_TESTS_FLAG = "-define:ENABLE_TESTS"
+ at ENABLE_ATK_TRUE@ENABLE_ATK_FLAG = "-define:ENABLE_ATK"
+FILTERED_LINK = $(shell echo "$(LINK)" | $(UNIQUE_FILTER_PIPE))
+DEP_LINK = $(shell echo "$(LINK)" | $(UNIQUE_FILTER_PIPE) | sed s,-r:,,g | grep '$(top_builddir)/bin/')
+OUTPUT_FILES = \
+ $(ASSEMBLY_FILE) \
+ $(ASSEMBLY_FILE).mdb
+
+moduledir = $(INSTALL_DIR_RESOLVED)
+module_SCRIPTS = $(OUTPUT_FILES)
+EXTRA_DIST = $(SOURCES_BUILD) $(RESOURCES_EXPANDED) $(THEME_ICONS_SOURCE)
+CLEANFILES = $(OUTPUT_FILES) $(ASSEMBLY_FILE).config
+DISTCLEANFILES = *.pidb
+MAINTAINERCLEANFILES = Makefile.in
all: all-am
.SUFFIXES:
-$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(top_srcdir)/Makefile.addins $(top_srcdir)/Makefile.include $(am__configure_deps)
+$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(top_srcdir)/build/build.mk $(top_srcdir)/build/build.environment.mk $(top_srcdir)/build/build.rules.mk $(am__configure_deps)
@for dep in $?; do \
case '$(am__configure_deps)' in \
*$$dep*) \
@@ -391,32 +556,46 @@ $(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps)
$(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps)
cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
$(am__aclocal_m4_deps):
+install-moduleSCRIPTS: $(module_SCRIPTS)
+ @$(NORMAL_INSTALL)
+ test -z "$(moduledir)" || $(MKDIR_P) "$(DESTDIR)$(moduledir)"
+ @list='$(module_SCRIPTS)'; test -n "$(moduledir)" || list=; \
+ for p in $$list; do \
+ if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \
+ if test -f "$$d$$p"; then echo "$$d$$p"; echo "$$p"; else :; fi; \
+ done | \
+ sed -e 'p;s,.*/,,;n' \
+ -e 'h;s|.*|.|' \
+ -e 'p;x;s,.*/,,;$(transform)' | sed 'N;N;N;s,\n, ,g' | \
+ $(AWK) 'BEGIN { files["."] = ""; dirs["."] = 1; } \
+ { d=$$3; if (dirs[d] != 1) { print "d", d; dirs[d] = 1 } \
+ if ($$2 == $$4) { files[d] = files[d] " " $$1; \
+ if (++n[d] == $(am__install_max)) { \
+ print "f", d, files[d]; n[d] = 0; files[d] = "" } } \
+ else { print "f", d "/" $$4, $$1 } } \
+ END { for (d in files) print "f", d, files[d] }' | \
+ while read type dir files; do \
+ if test "$$dir" = .; then dir=; else dir=/$$dir; fi; \
+ test -z "$$files" || { \
+ echo " $(INSTALL_SCRIPT) $$files '$(DESTDIR)$(moduledir)$$dir'"; \
+ $(INSTALL_SCRIPT) $$files "$(DESTDIR)$(moduledir)$$dir" || exit $$?; \
+ } \
+ ; done
+
+uninstall-moduleSCRIPTS:
+ @$(NORMAL_UNINSTALL)
+ @list='$(module_SCRIPTS)'; test -n "$(moduledir)" || exit 0; \
+ files=`for p in $$list; do echo "$$p"; done | \
+ sed -e 's,.*/,,;$(transform)'`; \
+ test -n "$$list" || exit 0; \
+ echo " ( cd '$(DESTDIR)$(moduledir)' && rm -f" $$files ")"; \
+ cd "$(DESTDIR)$(moduledir)" && rm -f $$files
mostlyclean-libtool:
-rm -f *.lo
clean-libtool:
-rm -rf .libs _libs
-install-addinDATA: $(addin_DATA)
- @$(NORMAL_INSTALL)
- test -z "$(addindir)" || $(MKDIR_P) "$(DESTDIR)$(addindir)"
- @list='$(addin_DATA)'; test -n "$(addindir)" || list=; \
- for p in $$list; do \
- if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \
- echo "$$d$$p"; \
- done | $(am__base_list) | \
- while read files; do \
- echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(addindir)'"; \
- $(INSTALL_DATA) $$files "$(DESTDIR)$(addindir)" || exit $$?; \
- done
-
-uninstall-addinDATA:
- @$(NORMAL_UNINSTALL)
- @list='$(addin_DATA)'; test -n "$(addindir)" || list=; \
- files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \
- test -n "$$files" || exit 0; \
- echo " ( cd '$(DESTDIR)$(addindir)' && rm -f" $$files ")"; \
- cd "$(DESTDIR)$(addindir)" && rm -f $$files
tags: TAGS
TAGS:
@@ -456,9 +635,9 @@ distdir: $(DISTFILES)
done
check-am: all-am
check: check-am
-all-am: Makefile $(DATA)
+all-am: Makefile $(SCRIPTS)
installdirs:
- for dir in "$(DESTDIR)$(addindir)"; do \
+ for dir in "$(DESTDIR)$(moduledir)"; do \
test -z "$$dir" || $(MKDIR_P) "$$dir"; \
done
install: install-am
@@ -483,10 +662,12 @@ clean-generic:
distclean-generic:
-test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
-test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES)
+ -test -z "$(DISTCLEANFILES)" || rm -f $(DISTCLEANFILES)
maintainer-clean-generic:
@echo "This command is intended for maintainers to use"
@echo "it deletes files that may require special tools to rebuild."
+ -test -z "$(MAINTAINERCLEANFILES)" || rm -f $(MAINTAINERCLEANFILES)
clean: clean-am
clean-am: clean-generic clean-libtool mostlyclean-am
@@ -507,7 +688,7 @@ info: info-am
info-am:
-install-data-am: install-addinDATA
+install-data-am: install-data-local install-moduleSCRIPTS
install-dvi: install-dvi-am
@@ -551,28 +732,72 @@ ps: ps-am
ps-am:
-uninstall-am: uninstall-addinDATA
+uninstall-am: uninstall-local uninstall-moduleSCRIPTS
.MAKE: install-am install-strip
.PHONY: all all-am check check-am clean clean-generic clean-libtool \
distclean distclean-generic distclean-libtool distdir dvi \
- dvi-am html html-am info info-am install install-addinDATA \
- install-am install-data install-data-am install-dvi \
+ dvi-am html html-am info info-am install install-am \
+ install-data install-data-am install-data-local 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-generic mostlyclean-libtool pdf pdf-am ps ps-am \
- uninstall uninstall-addinDATA uninstall-am
-
-
-mpack: $(ASSEMBLY)
- mautil p $(ASSEMBLY)
-
-$(ASSEMBLY): $(addin_SOURCES) $(dep_resources)
- $(CSC_LIB) -out:$@ $(addin_extraflags) $(build_sources) $(build_references) $(build_packages) $(build_resources)
+ install-moduleSCRIPTS install-pdf install-pdf-am install-ps \
+ install-ps-am install-strip installcheck installcheck-am \
+ installdirs maintainer-clean maintainer-clean-generic \
+ mostlyclean mostlyclean-generic mostlyclean-libtool pdf pdf-am \
+ ps ps-am uninstall uninstall-am uninstall-local \
+ uninstall-moduleSCRIPTS
+
+
+all: $(ASSEMBLY_FILE) theme-icons
+
+run:
+ @pushd $(top_builddir); \
+ make run; \
+ popd;
+
+# uncommented for now.
+# tests are currently excuted from Makefile in $(top_builddir)
+#test:
+# @pushd $(top_builddir)/tests; \
+# make $(ASSEMBLY); \
+# popd;
+
+build-debug:
+ @echo $(DEP_LINK)
+
+$(ASSEMBLY_FILE).mdb: $(ASSEMBLY_FILE)
+
+$(ASSEMBLY_FILE): $(SOURCES_BUILD) $(RESOURCES_EXPANDED) $(DEP_LINK)
+ @mkdir -p $(top_builddir)/bin
+ @if [ ! "x$(ENABLE_RELEASE)" = "xyes" ]; then \
+ $(top_srcdir)/build/dll-map-makefile-verifier $(srcdir)/Makefile.am $(srcdir)/$(notdir $@.config) && \
+ $(MONO) $(top_builddir)/build/dll-map-verifier.exe $(srcdir)/$(notdir $@.config) -iwinmm -ilibbanshee -ilibbnpx11 -ilibc -ilibc.so.6 -iintl -ilibmtp.dll -ilibigemacintegration.dylib -iCFRelease $(SOURCES_BUILD); \
+ fi;
+ $(MCS) \
+ $(GMCS_FLAGS) \
+ $(ASSEMBLY_BUILD_FLAGS) \
+ -nowarn:0278 -nowarn:0078 $$warn \
+ -define:HAVE_GTK_2_10 -define:NET_2_0 \
+ -debug -target:$(TARGET) -out:$@ \
+ $(BUILD_DEFINES) $(ENABLE_TESTS_FLAG) $(ENABLE_ATK_FLAG) \
+ $(FILTERED_LINK) $(RESOURCES_BUILD) $(SOURCES_BUILD)
+ @if [ -e $(srcdir)/$(notdir $@.config) ]; then \
+ cp $(srcdir)/$(notdir $@.config) $(top_builddir)/bin; \
+ fi;
+ @if [ ! -z "$(EXTRA_BUNDLE)" ]; then \
+ cp $(EXTRA_BUNDLE) $(top_builddir)/bin; \
+ fi;
+
+theme-icons: $(THEME_ICONS_SOURCE)
+ @$(INSTALL_ICONS) -il "$(BUILD_DATA_DIR)" "$(srcdir)" $(THEME_ICONS_RELATIVE)
+
+install-data-local: $(THEME_ICONS_SOURCE)
+ @$(INSTALL_ICONS) -i "$(DESTDIR)$(pkgdatadir)" "$(srcdir)" $(THEME_ICONS_RELATIVE)
+
+uninstall-local: $(THEME_ICONS_SOURCE)
+ @$(INSTALL_ICONS) -u "$(DESTDIR)$(pkgdatadir)" "$(srcdir)" $(THEME_ICONS_RELATIVE)
# 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/extensions/Editors/BlackoutEditor/Makefile.am b/extensions/Editors/BlackoutEditor/Makefile.am
index a200b81..5338ad4 100644
--- a/extensions/Editors/BlackoutEditor/Makefile.am
+++ b/extensions/Editors/BlackoutEditor/Makefile.am
@@ -1,20 +1,10 @@
-addin = BlackoutEditor
+ASSEMBLY = FSpot.Editors.BlackoutEditor
+TARGET = library
+LINK = $(REF_FSPOT_EXTENSION_BLACKOUTEDITOR)
+INSTALL_DIR = $(EXTENSIONS_INSTALL_DIR)
-addin_manifest = $(addin).addin.xml
+SOURCES = BlackoutEditor.cs
-addin_sources = \
- $(addin).cs
+RESOURCES = BlackoutEditor.addin.xml
-addin_resources = \
- $(addin_manifest)
-
-addin_references = \
- Mono.Posix
-
-addin_packages = \
- gtk-sharp-2.0
-
-addin_extraflags =
-addin_extradist =
-
-include $(top_srcdir)/Makefile.addins
+include $(top_srcdir)/build/build.mk
diff --git a/extensions/Editors/BlackoutEditor/Makefile.in b/extensions/Editors/BlackoutEditor/Makefile.in
index b3db4bf..bbe5b08 100644
--- a/extensions/Editors/BlackoutEditor/Makefile.in
+++ b/extensions/Editors/BlackoutEditor/Makefile.in
@@ -35,13 +35,22 @@ POST_UNINSTALL = :
build_triplet = @build@
host_triplet = @host@
DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in \
- $(top_srcdir)/Makefile.addins $(top_srcdir)/Makefile.include
+ $(top_srcdir)/build/build.environment.mk \
+ $(top_srcdir)/build/build.mk \
+ $(top_srcdir)/build/build.rules.mk
+ at ENABLE_TESTS_TRUE@am__append_1 = " $(NUNIT_LIBS)"
subdir = extensions/Editors/BlackoutEditor
ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
am__aclocal_m4_deps = $(top_srcdir)/build/m4/shave/shave.m4 \
$(top_srcdir)/build/m4/shamrock/expansions.m4 \
+ $(top_srcdir)/build/m4/shamrock/gnome-doc.m4 \
$(top_srcdir)/build/m4/shamrock/mono.m4 \
+ $(top_srcdir)/build/m4/shamrock/nunit.m4 \
$(top_srcdir)/build/m4/shamrock/programs.m4 \
+ $(top_srcdir)/build/m4/f-spot/flickrnet.m4 \
+ $(top_srcdir)/build/m4/f-spot/gnome-keyring-sharp.m4 \
+ $(top_srcdir)/build/m4/f-spot/gtk-sharp.m4 \
+ $(top_srcdir)/build/m4/f-spot/mono-addins.m4 \
$(top_srcdir)/acinclude.m4 $(top_srcdir)/configure.ac
am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
$(ACLOCAL_M4)
@@ -49,8 +58,6 @@ mkinstalldirs = $(install_sh) -d
CONFIG_HEADER = $(top_builddir)/config.h
CONFIG_CLEAN_FILES =
CONFIG_CLEAN_VPATH_FILES =
-SOURCES =
-DIST_SOURCES =
am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`;
am__vpath_adj = case $$p in \
$(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \
@@ -72,8 +79,9 @@ am__nobase_list = $(am__nobase_strip_setup); \
am__base_list = \
sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \
sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g'
-am__installdirs = "$(DESTDIR)$(addindir)"
-DATA = $(addin_DATA)
+am__installdirs = "$(DESTDIR)$(moduledir)"
+SCRIPTS = $(module_SCRIPTS)
+DIST_SOURCES =
DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
ACLOCAL = @ACLOCAL@
ACLOCAL_AMFLAGS = @ACLOCAL_AMFLAGS@
@@ -119,6 +127,8 @@ EXIF_SOVERSION = @EXIF_SOVERSION@
F77 = @F77@
FC = @FC@
FGREP = @FGREP@
+FLICKRNET_CFLAGS = @FLICKRNET_CFLAGS@
+FLICKRNET_LIBS = @FLICKRNET_LIBS@
F_CFLAGS = @F_CFLAGS@
F_LIBS = @F_LIBS@
GAPI2CODEGEN = @GAPI2CODEGEN@
@@ -132,6 +142,8 @@ GCONF_SHARP_LIBS = @GCONF_SHARP_LIBS@
GETTEXT_PACKAGE = @GETTEXT_PACKAGE@
GIO_CFLAGS = @GIO_CFLAGS@
GIO_LIBS = @GIO_LIBS@
+GLIBSHARP_2_12_7_CFLAGS = @GLIBSHARP_2_12_7_CFLAGS@
+GLIBSHARP_2_12_7_LIBS = @GLIBSHARP_2_12_7_LIBS@
GLIBSHARP_CFLAGS = @GLIBSHARP_CFLAGS@
GLIBSHARP_LIBS = @GLIBSHARP_LIBS@
GLIB_CFLAGS = @GLIB_CFLAGS@
@@ -147,6 +159,10 @@ GNOME_SHARP_CFLAGS = @GNOME_SHARP_CFLAGS@
GNOME_SHARP_LIBS = @GNOME_SHARP_LIBS@
GOBJECT_QUERY = @GOBJECT_QUERY@
GREP = @GREP@
+GTKSHARP_A11Y_CFLAGS = @GTKSHARP_A11Y_CFLAGS@
+GTKSHARP_A11Y_LIBS = @GTKSHARP_A11Y_LIBS@
+GTKSHARP_CFLAGS = @GTKSHARP_CFLAGS@
+GTKSHARP_LIBS = @GTKSHARP_LIBS@
HELP_DIR = @HELP_DIR@
ICONS_DIRECTORY = @ICONS_DIRECTORY@
INSTALL = @INSTALL@
@@ -160,14 +176,14 @@ INTLTOOL_EXTRACT = @INTLTOOL_EXTRACT@
INTLTOOL_MERGE = @INTLTOOL_MERGE@
INTLTOOL_PERL = @INTLTOOL_PERL@
INTLTOOL_UPDATE = @INTLTOOL_UPDATE@
+KEYRINGSHARP_CFLAGS = @KEYRINGSHARP_CFLAGS@
+KEYRINGSHARP_LIBS = @KEYRINGSHARP_LIBS@
LCMS_CFLAGS = @LCMS_CFLAGS@
LCMS_LIBS = @LCMS_LIBS@
LD = @LD@
LDFLAGS = @LDFLAGS@
LIBEXIF_VERSION_CHECK_CFLAGS = @LIBEXIF_VERSION_CHECK_CFLAGS@
LIBEXIF_VERSION_CHECK_LIBS = @LIBEXIF_VERSION_CHECK_LIBS@
-LIBGPHOTO2_CFLAGS = @LIBGPHOTO2_CFLAGS@
-LIBGPHOTO2_LIBS = @LIBGPHOTO2_LIBS@
LIBJPEG = @LIBJPEG@
LIBOBJS = @LIBOBJS@
LIBS = @LIBS@
@@ -182,6 +198,12 @@ MCS = @MCS@
MKDIR_P = @MKDIR_P@
MKINSTALLDIRS = @MKINSTALLDIRS@
MONO = @MONO@
+MONO_ADDINS_CFLAGS = @MONO_ADDINS_CFLAGS@
+MONO_ADDINS_GUI_CFLAGS = @MONO_ADDINS_GUI_CFLAGS@
+MONO_ADDINS_GUI_LIBS = @MONO_ADDINS_GUI_LIBS@
+MONO_ADDINS_LIBS = @MONO_ADDINS_LIBS@
+MONO_ADDINS_SETUP_CFLAGS = @MONO_ADDINS_SETUP_CFLAGS@
+MONO_ADDINS_SETUP_LIBS = @MONO_ADDINS_SETUP_LIBS@
MONO_MODULE_CFLAGS = @MONO_MODULE_CFLAGS@
MONO_MODULE_LIBS = @MONO_MODULE_LIBS@
MSGFMT = @MSGFMT@
@@ -192,7 +214,6 @@ NDESK_DBUS_LIBS = @NDESK_DBUS_LIBS@
NM = @NM@
NMEDIT = @NMEDIT@
NUNIT_CFLAGS = @NUNIT_CFLAGS@
-NUNIT_DEFINES = @NUNIT_DEFINES@
NUNIT_LIBS = @NUNIT_LIBS@
OBJC = @OBJC@
OBJDUMP = @OBJDUMP@
@@ -284,83 +305,227 @@ target_alias = @target_alias@
top_build_prefix = @top_build_prefix@
top_builddir = @top_builddir@
top_srcdir = @top_srcdir@
-addin = BlackoutEditor
-addin_manifest = $(addin).addin.xml
-addin_sources = \
- $(addin).cs
-
-addin_resources = \
- $(addin_manifest)
-
-addin_references = \
- Mono.Posix
-
-addin_packages = \
- gtk-sharp-2.0
-
-addin_extraflags =
-addin_extradist =
-ASSEMBLY = $(addin).dll
+ASSEMBLY = FSpot.Editors.BlackoutEditor
+TARGET = library
+LINK = $(REF_FSPOT_EXTENSION_BLACKOUTEDITOR) $(am__append_1)
+INSTALL_DIR = $(EXTENSIONS_INSTALL_DIR)
+SOURCES = BlackoutEditor.cs
+RESOURCES = BlackoutEditor.addin.xml
+
+# Initializers
+MONO_BASE_PATH =
+MONO_ADDINS_PATH =
+
+# Install Paths
+DEFAULT_INSTALL_DIR = $(pkglibdir)
+BACKENDS_INSTALL_DIR = $(DEFAULT_INSTALL_DIR)/Backends
+EXTENSIONS_INSTALL_DIR = $(DEFAULT_INSTALL_DIR)/Extensions
DIR_DOCS = $(top_builddir)/docs
DIR_EXTENSIONS = $(top_builddir)/extensions
-DIR_GPHOTO2 = $(top_builddir)/lib/libgphoto2-sharp
DIR_ICONS = $(top_builddir)/icons
DIR_JPEGTRAN = $(top_builddir)/lib/libjpegtran
-DIR_KEYRING = $(top_builddir)/lib/gnome-keyring-sharp
DIR_LIBFSPOT = $(top_builddir)/lib/libfspot
DIR_SEMWEB = $(top_builddir)/lib/semweb
DIR_SRC = $(top_builddir)/src
DIR_GIOSHARP = $(top_builddir)/lib/gio-sharp/gio
DIR_GTKSHARPBEANS = $(top_builddir)/lib/gtk-sharp-beans
DIR_UNIQUESHARP = $(top_builddir)/lib/unique-sharp/unique
-LINK_KEYRING = -r:$(DIR_KEYRING)/gnome-keyring-sharp.dll
-LINK_GPHOTO2 = -r:$(DIR_GPHOTO2)/libgphoto2-sharp.dll
-LINK_SEMWEB = -r:$(DIR_SEMWEB)/SemWeb.dll
-LINK_GIOSHARP = -r:$(DIR_GIOSHARP)/gio-sharp.dll
-LINK_GTKSHARPBEANS = -r:$(DIR_GTKSHARPBEANS)/gtk-sharp-beans.dll
-LINK_UNIQUESHARP = -r:$(DIR_UNIQUESHARP)/unique-sharp.dll
-CSC_FLAGS = -debug
-CSC = $(MCS) $(CSC_FLAGS) -target:exe
-CSC_LIB = $(MCS) $(CSC_FLAGS) -target:library
-MONO_DEBUGFLAGS = --debug
-RUNTIME = mono $(MONO_DEBUGFLAGS)
-dep_resources = $(addprefix $(srcdir)/, $(addin_resources))
-build_resources = $(foreach res, $(dep_resources), $(addprefix -resource:, $(res)),$(notdir $(res)))
-build_sources = $(addprefix $(srcdir)/, $(addin_sources))
-build_packages = \
- $(addprefix -pkg:, $(addin_packages)) \
- -pkg:mono-addins
-
-build_references = \
- $(addprefix -r:, $(addin_references)) \
- -r:$(top_builddir)/src/f-spot.exe \
- -r:$(top_builddir)/src/Cms.dll \
- -r:$(top_builddir)/src/FSpot.Core.dll \
- -r:$(top_builddir)/src/FSpot.Platform.dll \
- -r:$(top_builddir)/src/FSpot.Query.dll \
- -r:$(top_builddir)/src/FSpot.Utils.dll \
- -r:$(top_builddir)/src/FSpot.Widgets.dll \
- $(LINK_SEMWEB) \
- $(LINK_GPHOTO2) \
- $(LINK_GIOSHARP) \
- $(LINK_UNIQUESHARP) \
- $(LINK_GTKSHARPBEANS)
-
-addin_SOURCES = \
- $(build_sources)
-
-addindir = $(pkglibdir)/extensions
-addin_DATA = $(ASSEMBLY)
-CLEANFILES = $(ASSEMBLY) $(ASSEMBLY).mdb *.mpack
-EXTRA_DIST = \
- $(build_sources) \
- $(dep_resources) \
- $(addin_extradist)
-
+DIR_BIN = $(top_builddir)/bin
+
+# External libraries to link against, generated from configure
+LINK_SYSTEM = -r:System
+LINK_SYSTEMDATA = -r:System.Data
+LINK_SYSTEM_WEB = -r:System.Web
+LINK_MONO_POSIX = -r:Mono.Posix
+LINK_MONO_CAIRO = -r:Mono.Cairo
+LINK_MONO_SIMD = -r:Mono.Simd
+LINK_MONODATA = -r:Mono.Data
+LINK_MONO_DATA_SQLITECLIENT = -r:Mono.Data.SqliteClient
+LINK_ICSHARP_ZIP_LIB = -r:ICSharpCode.SharpZipLib
+LINK_KEYRING = $(KEYRINGSHARP_LIBS)
+LINK_GLIB = $(GLIBSHARP_LIBS)
+LINK_GTK = $(GTKSHARP_LIBS)
+LINK_GNOME = $(GNOME_SHARP_LIBS)
+LINK_GCONF = $(GCONF_SHARP_LIBS)
+LINK_GLADE = -pkg:glade-sharp-2.0
+LINK_FLICKRNET = -pkg:flickrnet
+LINK_DBUS = $(NDESK_DBUS_LIBS) $(NDESK_DBUS_GLIB_LIBS)
+LINK_DBUS_NO_GLIB = $(NDESK_DBUS_LIBS)
+LINK_MONO_ADDINS_DEPS = $(MONO_ADDINS_LIBS)
+LINK_MONO_ADDINS_SETUP_DEPS = $(MONO_ADDINS_SETUP_LIBS)
+LINK_MONO_ADDINS_GUI_DEPS = $(MONO_ADDINS_GUI_LIBS)
+
+# GIO
+REF_GIO =
+LINK_GIO = -r:$(DIR_GIOSHARP)/gio-sharp.dll
+LINK_GIO_DEPS = $(REF_GIO) $(LINK_GIO)
+
+# Gtk Beans
+REF_GTK_BEANS = $(LINK_GIO_DEPS)
+LINK_GTK_BEANS = -r:$(DIR_GTKSHARPBEANS)/gtk-sharp-beans.dll
+LINK_GTK_BEANS_DEPS = $(REF_GTK_BEANS) $(LINK_GTK_BEANS)
+
+# Uniqe
+REF_UNIQUE =
+LINK_UNIQUE = -r:$(DIR_UNIQUESHARP)/unique-sharp.dll
+LINK_UNIQUE_DEPS = $(REF_UNIQUE) $(LINK_UNIQUE)
+
+# Hyena
+REF_HYENA = $(LINK_SYSTEM) $(LINK_MONO_POSIX)
+LINK_HYENA = -r:$(DIR_BIN)/Hyena.dll
+LINK_HYENA_DEPS = $(REF_HYENA) $(LINK_HYENA)
+
+# Semweb
+REF_SEMWEB = $(LINK_SYSTEMDATA) $(LINK_HYENA_DEPS)
+LINK_SEMWEB = -r:$(DIR_BIN)/SemWeb.dll
+LINK_SEMWEB_DEPS = $(REF_SEMWEB) $(LINK_SEMWEB)
+
+# Hyena.Data.Sqlite
+REF_HYENA_DATA_SQLITE = $(LINK_SQLITE)
+LINK_HYENA_DATA_SQLITE = -r:$(DIR_BIN)/Hyena.Data.Sqlite.dll
+LINK_HYENA_DATA_SQLITE_DEPS = $(REF_HYENA_DATA_SQLITE) $(LINK_HYENA_DATA_SQLITE)
+
+# Hyena.Gui
+REF_HYENA_GUI = $(LINK_HYENA_DEPS)
+LINK_HYENA_GUI = -r:$(DIR_BIN)/Hyena.Gui.dll
+LINK_HENA_GUI_DEPS = $(REF_HYENA_GUI) $(LINK_HYENA_GUI)
+
+# FSpot.Cms
+REF_FSPOT_CMS = $(LINK_GTK)
+LINK_FSPOT_CMS = -r:$(DIR_BIN)/FSpot.Cms.dll
+LINK_FSPOT_CMS_DEPS = $(REF_FSPOT_CMS) $(LINK_FSPOT_CMS)
+
+# FSpot.Utils
+REF_FSPOT_UTILS = $(LINK_HYENA_DEPS) $(LINK_GTK) $(LINK_GIO) $(LINK_MONO_CAIRO)
+LINK_FSPOT_UTILS = -r:$(DIR_BIN)/FSpot.Utils.dll
+LINK_FSPOT_UTILS_DEPS = $(REF_FSPOT_UTILS) $(LINK_FSPOT_UTILS)
+
+# FSpot.Core
+REF_FSPOT_CORE = $(LINK_FSPOT_UTILS_DEPS) $(LINK_FSPOT_CMS_DEPS)
+LINK_FSPOT_CORE = -r:$(DIR_BIN)/FSpot.Core.dll
+LINK_FSPOT_CORE_DEPS = $(REF_FSPOT_CORE) $(LINK_FSPOT_CORE)
+
+# FSpot.Query
+REF_FSPOT_QUERY = $(LINK_FSPOT_CORE_DEPS)
+LINK_FSPOT_QUERY = -r:$(DIR_BIN)/FSpot.Query.dll
+LINK_FSPOT_QUERY_DEPS = $(REF_FSPOT_QUERY) $(LINK_FSPOT_QUERY)
+
+# FSpot.JobScheduler
+REF_FSPOT_JOB_SCHEDULER = $(LINK_HYENA_DEPS)
+LINK_FSPOT_JOB_SCHEDULER = -r:$(DIR_BIN)/FSpot.JobScheduler.dll
+LINK_FSPOT_JOB_SCHEDULER_DEPS = $(REF_FSPOT_JOB_SCHEDULER) $(LINK_FSPOT_JOB_SCHEDULER)
+
+# FSpot.Bling
+REF_FSPOT_BLING = $(LINK_GTK_BEANS_DEPS) $(LINK_GLIB)
+LINK_FSPOT_BLING = -r:$(DIR_BIN)/FSpot.Bling.dll
+LINK_FSPOT_BLING_DEPS = $(REF_FSPOT_BLING) $(LINK_FSPOT_BLING)
+
+# FSpot.Platform
+REF_FSPOT_PLATFORM = $(LINK_GCONF) $(LINK_GTK) $(LINK_FSPOT_CORE_DEPS) $(LINK_DBUS)
+LINK_FSPOT_PLATFORM = -r:$(DIR_BIN)/FSpot.Platform.dll
+LINK_FSPOT_PLATFORM_DEPS = $(REF_FSPOT_PLATFORM) $(LINK_FSPOT_PLATFORM)
+
+# FSpot.Widgets
+REF_FSPOT_WIDGETS = $(LINK_FSPOT_CORE_DEPS) $(LINK_FSPOT_BLING_DEPS)
+LINK_FSPOT_WIDGETS = -r:$(DIR_BIN)/FSpot.Widgets.dll
+LINK_FSPOT_WIDGETS_DEPS = $(REF_FSPOT_WIDGETS) $(LINK_FSPOT_WIDGETS)
+
+# FSpot (executable)
+REF_FSPOT = $(LINK_FSPOT_WIDGETS_DEPS) $(LINK_FSPOT_PLATFORM_DEPS) $(LINK_FSPOT_QUERY_DEPS) \
+ $(LINK_GLIB) $(LINK_MONO_ADDINS_DEPS) $(LINK_UNIQUE_DEPS) $(LINK_MONO_ADDINS_SETUP_DEPS) \
+ $(LINK_SEMWEB_DEPS) $(LINK_GLADE) $(LINK_MONODATA) $(LINK_MONO_DATA_SQLITECLIENT) \
+ $(LINK_MONO_ADDINS_GUI_DEPS) $(LINK_FSPOT_JOB_SCHEDULER_DEPS) $(LINK_ICSHARP_ZIP_LIB) \
+ $(LINK_GNOME)
+
+# FIXME: do not link executables
+LINK_FSPOT = -r:$(DIR_BIN)/f-spot.exe
+LINK_FSPOT_DEPS = $(REF_FSPOT) $(LINK_FSPOT)
+
+# Extensions
+REF_FSPOT_EXTENSION_BLACKOUTEDITOR = $(LINK_FSPOT_DEPS)
+REF_FSPOT_EXTENSION_BWEDITOR = $(LINK_FSPOT_DEPS) $(LINK_MONO_SIMD)
+REF_FSPOT_EXTENSION_FLIPEDITOR = $(LINK_FSPOT_DEPS)
+REF_FSPOT_EXTENSION_PIXELATEEDITOR = $(LINK_FSPOT_DEPS)
+REF_FSPOT_EXTENSION_RESIZEEDITOR = $(LINK_FSPOT_DEPS)
+REF_FSPOT_EXTENSION_CDEXPORT = $(LINK_FSPOT_DEPS)
+REF_FSPOT_EXTENSION_FACEBOOKEXPORT = $(LINK_FSPOT_DEPS) $(LINK_KEYRING)
+REF_FSPOT_EXTENSION_FLICKREXPORT = $(LINK_FSPOT_DEPS) $(LINK_FLICKRNET)
+REF_FSPOT_EXTENSION_FOLDEREXPORT = $(LINK_FSPOT_DEPS) $(LINK_SYSTEM_WEB)
+REF_FSPOT_EXTENSION_GALLERYEXPORT = $(LINK_FSPOT_DEPS)
+REF_MONO_GOOGLE = $(LINK_HYENA_DEPS)
+LINK_MONO_GOOGLE = -r:$(DIR_BIN)/Mono.Google.dll
+LINK_MONO_GOOGLE_DEPS = $(REF_MONO_GOOGLE) $(LINK_MONO_GOOGLE)
+REF_FSPOT_EXTENSION_PICASAWEBEXPORT = $(LINK_FSPOT_DEPS) $(LINK_MONO_GOOGLE) $(LINK_KEYRING)
+REF_SMUGMUGNET = $(LINK_FSPOT_DEPS)
+LINK_SMUGMUGNET = -r:$(DIR_BIN)/SmugMugNet.dll
+LINK_SMUGMUGNET_DEPS = $(REF_SMUGMUGNET) $(LINK_SMUGMUGNET)
+REF_FSPOT_EXTENSION_SMUGMUGEXPORT = $(LINK_SMUGMUGNET_DEPS) $(LINK_KEYRING)
+REF_MONO_TABBLO = $(LINK_HYENA_DEPS)
+LINK_MONO_TABBLO = -r:$(DIR_BIN)/Mono.Tabblo.dll
+LINK_MONO_TABBLO_DEPS = $(REF_MONO_TABBLO) $(LINK_MONO_TABBLO)
+REF_FSPOT_EXTENSION_TABBLOEXPORT = $(LINK_FSPOT_DEPS) $(LINK_KEYRING) $(LINK_MONO_TABBLO_DEPS)
+REF_FSPOT_EXTENSION_ZIPEXPORT = $(LINK_FSPOT_DEPS)
+REF_FSPOT_EXTENSION_CHANGEPHOTOPATH = $(LINK_FSPOT_DEPS)
+REF_FSPOT_EXTENSION_DEVELOPINUFRAW = $(LINK_FSPOT_DEPS)
+REF_FSPOT_EXTENSION_HASHJOB = $(LINK_FSPOT_DEPS)
+REF_FSPOT_EXTENSION_LIVEWEBGALLERY = $(LINK_FSPOT_DEPS)
+REF_FSPOT_EXTENSION_MERGEDB = $(LINK_FSPOT_DEPS)
+REF_FSPOT_EXTENSION_RAWPLUSJPEG = $(LINK_FSPOT_DEPS)
+REF_FSPOT_EXTENSION_RETROACTIVEROLL = $(LINK_FSPOT_DEPS)
+REF_FSPOT_EXTENSION_SCREENSAVERCONFIG = $(LINK_FSPOT_DEPS)
+REF_FSPOT_EXTENSION_COVERTRANSITION = $(LINK_FSPOT_DEPS)
+
+# Cute hack to replace a space with something
+colon := :
+empty :=
+space := $(empty) $(empty)
+
+# Build path to allow running uninstalled
+RUN_PATH = $(subst $(space),$(colon), $(MONO_BASE_PATH))
+UNIQUE_FILTER_PIPE = tr [:space:] \\n | sort | uniq
+BUILD_DATA_DIR = $(top_builddir)/bin/share/$(PACKAGE)
+
+# Since all other attempts failed, we currently go this way:
+# This code adds the file specified in ASSEMBLY_INFO_SOURCE to SOURCES_BUILD.
+# If no such file is specified, the default AssemblyInfo.cs is used.
+ASSEMBLY_INFO_SOURCE_REAL = \
+ $(shell if [ "$(ASSEMBLY_INFO_SOURCE)" ]; \
+ then \
+ echo "$(addprefix $(srcdir)/, $(ASSEMBLY_INFO_SOURCE))"; \
+ else \
+ echo "$(top_srcdir)/src/AssemblyInfo.cs"; \
+ fi)
+
+SOURCES_BUILD = $(addprefix $(srcdir)/, $(SOURCES)) \
+ $(ASSEMBLY_INFO_SOURCE_REAL)
+RESOURCES_EXPANDED = $(addprefix $(srcdir)/, $(RESOURCES))
+RESOURCES_BUILD = $(foreach resource, $(RESOURCES_EXPANDED), \
+ -resource:$(resource),$(notdir $(resource)))
+
+INSTALL_ICONS = $(top_srcdir)/build/private-icon-theme-installer "$(mkinstalldirs)" "$(INSTALL_DATA)"
+THEME_ICONS_SOURCE = $(wildcard $(srcdir)/ThemeIcons/*/*/*.png) $(wildcard $(srcdir)/ThemeIcons/scalable/*/*.svg)
+THEME_ICONS_RELATIVE = $(subst $(srcdir)/ThemeIcons/, , $(THEME_ICONS_SOURCE))
+ASSEMBLY_EXTENSION = $(strip $(patsubst library, dll, $(TARGET)))
+ASSEMBLY_FILE = $(top_builddir)/bin/$(ASSEMBLY).$(ASSEMBLY_EXTENSION)
+INSTALL_DIR_RESOLVED = $(firstword $(subst , $(DEFAULT_INSTALL_DIR), $(INSTALL_DIR)))
+ at ENABLE_TESTS_TRUE@ENABLE_TESTS_FLAG = "-define:ENABLE_TESTS"
+ at ENABLE_ATK_TRUE@ENABLE_ATK_FLAG = "-define:ENABLE_ATK"
+FILTERED_LINK = $(shell echo "$(LINK)" | $(UNIQUE_FILTER_PIPE))
+DEP_LINK = $(shell echo "$(LINK)" | $(UNIQUE_FILTER_PIPE) | sed s,-r:,,g | grep '$(top_builddir)/bin/')
+OUTPUT_FILES = \
+ $(ASSEMBLY_FILE) \
+ $(ASSEMBLY_FILE).mdb
+
+moduledir = $(INSTALL_DIR_RESOLVED)
+module_SCRIPTS = $(OUTPUT_FILES)
+EXTRA_DIST = $(SOURCES_BUILD) $(RESOURCES_EXPANDED) $(THEME_ICONS_SOURCE)
+CLEANFILES = $(OUTPUT_FILES) $(ASSEMBLY_FILE).config
+DISTCLEANFILES = *.pidb
+MAINTAINERCLEANFILES = Makefile.in
all: all-am
.SUFFIXES:
-$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(top_srcdir)/Makefile.addins $(top_srcdir)/Makefile.include $(am__configure_deps)
+$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(top_srcdir)/build/build.mk $(top_srcdir)/build/build.environment.mk $(top_srcdir)/build/build.rules.mk $(am__configure_deps)
@for dep in $?; do \
case '$(am__configure_deps)' in \
*$$dep*) \
@@ -390,32 +555,46 @@ $(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps)
$(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps)
cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
$(am__aclocal_m4_deps):
+install-moduleSCRIPTS: $(module_SCRIPTS)
+ @$(NORMAL_INSTALL)
+ test -z "$(moduledir)" || $(MKDIR_P) "$(DESTDIR)$(moduledir)"
+ @list='$(module_SCRIPTS)'; test -n "$(moduledir)" || list=; \
+ for p in $$list; do \
+ if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \
+ if test -f "$$d$$p"; then echo "$$d$$p"; echo "$$p"; else :; fi; \
+ done | \
+ sed -e 'p;s,.*/,,;n' \
+ -e 'h;s|.*|.|' \
+ -e 'p;x;s,.*/,,;$(transform)' | sed 'N;N;N;s,\n, ,g' | \
+ $(AWK) 'BEGIN { files["."] = ""; dirs["."] = 1; } \
+ { d=$$3; if (dirs[d] != 1) { print "d", d; dirs[d] = 1 } \
+ if ($$2 == $$4) { files[d] = files[d] " " $$1; \
+ if (++n[d] == $(am__install_max)) { \
+ print "f", d, files[d]; n[d] = 0; files[d] = "" } } \
+ else { print "f", d "/" $$4, $$1 } } \
+ END { for (d in files) print "f", d, files[d] }' | \
+ while read type dir files; do \
+ if test "$$dir" = .; then dir=; else dir=/$$dir; fi; \
+ test -z "$$files" || { \
+ echo " $(INSTALL_SCRIPT) $$files '$(DESTDIR)$(moduledir)$$dir'"; \
+ $(INSTALL_SCRIPT) $$files "$(DESTDIR)$(moduledir)$$dir" || exit $$?; \
+ } \
+ ; done
+
+uninstall-moduleSCRIPTS:
+ @$(NORMAL_UNINSTALL)
+ @list='$(module_SCRIPTS)'; test -n "$(moduledir)" || exit 0; \
+ files=`for p in $$list; do echo "$$p"; done | \
+ sed -e 's,.*/,,;$(transform)'`; \
+ test -n "$$list" || exit 0; \
+ echo " ( cd '$(DESTDIR)$(moduledir)' && rm -f" $$files ")"; \
+ cd "$(DESTDIR)$(moduledir)" && rm -f $$files
mostlyclean-libtool:
-rm -f *.lo
clean-libtool:
-rm -rf .libs _libs
-install-addinDATA: $(addin_DATA)
- @$(NORMAL_INSTALL)
- test -z "$(addindir)" || $(MKDIR_P) "$(DESTDIR)$(addindir)"
- @list='$(addin_DATA)'; test -n "$(addindir)" || list=; \
- for p in $$list; do \
- if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \
- echo "$$d$$p"; \
- done | $(am__base_list) | \
- while read files; do \
- echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(addindir)'"; \
- $(INSTALL_DATA) $$files "$(DESTDIR)$(addindir)" || exit $$?; \
- done
-
-uninstall-addinDATA:
- @$(NORMAL_UNINSTALL)
- @list='$(addin_DATA)'; test -n "$(addindir)" || list=; \
- files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \
- test -n "$$files" || exit 0; \
- echo " ( cd '$(DESTDIR)$(addindir)' && rm -f" $$files ")"; \
- cd "$(DESTDIR)$(addindir)" && rm -f $$files
tags: TAGS
TAGS:
@@ -455,9 +634,9 @@ distdir: $(DISTFILES)
done
check-am: all-am
check: check-am
-all-am: Makefile $(DATA)
+all-am: Makefile $(SCRIPTS)
installdirs:
- for dir in "$(DESTDIR)$(addindir)"; do \
+ for dir in "$(DESTDIR)$(moduledir)"; do \
test -z "$$dir" || $(MKDIR_P) "$$dir"; \
done
install: install-am
@@ -482,10 +661,12 @@ clean-generic:
distclean-generic:
-test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
-test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES)
+ -test -z "$(DISTCLEANFILES)" || rm -f $(DISTCLEANFILES)
maintainer-clean-generic:
@echo "This command is intended for maintainers to use"
@echo "it deletes files that may require special tools to rebuild."
+ -test -z "$(MAINTAINERCLEANFILES)" || rm -f $(MAINTAINERCLEANFILES)
clean: clean-am
clean-am: clean-generic clean-libtool mostlyclean-am
@@ -506,7 +687,7 @@ info: info-am
info-am:
-install-data-am: install-addinDATA
+install-data-am: install-data-local install-moduleSCRIPTS
install-dvi: install-dvi-am
@@ -550,28 +731,72 @@ ps: ps-am
ps-am:
-uninstall-am: uninstall-addinDATA
+uninstall-am: uninstall-local uninstall-moduleSCRIPTS
.MAKE: install-am install-strip
.PHONY: all all-am check check-am clean clean-generic clean-libtool \
distclean distclean-generic distclean-libtool distdir dvi \
- dvi-am html html-am info info-am install install-addinDATA \
- install-am install-data install-data-am install-dvi \
+ dvi-am html html-am info info-am install install-am \
+ install-data install-data-am install-data-local 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-generic mostlyclean-libtool pdf pdf-am ps ps-am \
- uninstall uninstall-addinDATA uninstall-am
-
-
-mpack: $(ASSEMBLY)
- mautil p $(ASSEMBLY)
-
-$(ASSEMBLY): $(addin_SOURCES) $(dep_resources)
- $(CSC_LIB) -out:$@ $(addin_extraflags) $(build_sources) $(build_references) $(build_packages) $(build_resources)
+ install-moduleSCRIPTS install-pdf install-pdf-am install-ps \
+ install-ps-am install-strip installcheck installcheck-am \
+ installdirs maintainer-clean maintainer-clean-generic \
+ mostlyclean mostlyclean-generic mostlyclean-libtool pdf pdf-am \
+ ps ps-am uninstall uninstall-am uninstall-local \
+ uninstall-moduleSCRIPTS
+
+
+all: $(ASSEMBLY_FILE) theme-icons
+
+run:
+ @pushd $(top_builddir); \
+ make run; \
+ popd;
+
+# uncommented for now.
+# tests are currently excuted from Makefile in $(top_builddir)
+#test:
+# @pushd $(top_builddir)/tests; \
+# make $(ASSEMBLY); \
+# popd;
+
+build-debug:
+ @echo $(DEP_LINK)
+
+$(ASSEMBLY_FILE).mdb: $(ASSEMBLY_FILE)
+
+$(ASSEMBLY_FILE): $(SOURCES_BUILD) $(RESOURCES_EXPANDED) $(DEP_LINK)
+ @mkdir -p $(top_builddir)/bin
+ @if [ ! "x$(ENABLE_RELEASE)" = "xyes" ]; then \
+ $(top_srcdir)/build/dll-map-makefile-verifier $(srcdir)/Makefile.am $(srcdir)/$(notdir $@.config) && \
+ $(MONO) $(top_builddir)/build/dll-map-verifier.exe $(srcdir)/$(notdir $@.config) -iwinmm -ilibbanshee -ilibbnpx11 -ilibc -ilibc.so.6 -iintl -ilibmtp.dll -ilibigemacintegration.dylib -iCFRelease $(SOURCES_BUILD); \
+ fi;
+ $(MCS) \
+ $(GMCS_FLAGS) \
+ $(ASSEMBLY_BUILD_FLAGS) \
+ -nowarn:0278 -nowarn:0078 $$warn \
+ -define:HAVE_GTK_2_10 -define:NET_2_0 \
+ -debug -target:$(TARGET) -out:$@ \
+ $(BUILD_DEFINES) $(ENABLE_TESTS_FLAG) $(ENABLE_ATK_FLAG) \
+ $(FILTERED_LINK) $(RESOURCES_BUILD) $(SOURCES_BUILD)
+ @if [ -e $(srcdir)/$(notdir $@.config) ]; then \
+ cp $(srcdir)/$(notdir $@.config) $(top_builddir)/bin; \
+ fi;
+ @if [ ! -z "$(EXTRA_BUNDLE)" ]; then \
+ cp $(EXTRA_BUNDLE) $(top_builddir)/bin; \
+ fi;
+
+theme-icons: $(THEME_ICONS_SOURCE)
+ @$(INSTALL_ICONS) -il "$(BUILD_DATA_DIR)" "$(srcdir)" $(THEME_ICONS_RELATIVE)
+
+install-data-local: $(THEME_ICONS_SOURCE)
+ @$(INSTALL_ICONS) -i "$(DESTDIR)$(pkgdatadir)" "$(srcdir)" $(THEME_ICONS_RELATIVE)
+
+uninstall-local: $(THEME_ICONS_SOURCE)
+ @$(INSTALL_ICONS) -u "$(DESTDIR)$(pkgdatadir)" "$(srcdir)" $(THEME_ICONS_RELATIVE)
# 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/extensions/Editors/FlipEditor/Makefile.am b/extensions/Editors/FlipEditor/Makefile.am
index e8dae23..45b9f2f 100644
--- a/extensions/Editors/FlipEditor/Makefile.am
+++ b/extensions/Editors/FlipEditor/Makefile.am
@@ -1,20 +1,10 @@
-addin = FlipEditor
+ASSEMBLY = FSpot.Editors.FlipEditor
+TARGET = library
+LINK = $(REF_FSPOT_EXTENSION_FLIPEDITOR)
+INSTALL_DIR = $(EXTENSIONS_INSTALL_DIR)
-addin_manifest = $(addin).addin.xml
+SOURCES = FlipEditor.cs
-addin_sources = \
- $(addin).cs
+RESOURCES = FlipEditor.addin.xml
-addin_resources = \
- $(addin_manifest)
-
-addin_references = \
- Mono.Posix
-
-addin_packages = \
- gtk-sharp-2.0
-
-addin_extraflags =
-addin_extradist =
-
-include $(top_srcdir)/Makefile.addins
+include $(top_srcdir)/build/build.mk
diff --git a/extensions/Editors/FlipEditor/Makefile.in b/extensions/Editors/FlipEditor/Makefile.in
index 787917f..27586f4 100644
--- a/extensions/Editors/FlipEditor/Makefile.in
+++ b/extensions/Editors/FlipEditor/Makefile.in
@@ -35,13 +35,22 @@ POST_UNINSTALL = :
build_triplet = @build@
host_triplet = @host@
DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in \
- $(top_srcdir)/Makefile.addins $(top_srcdir)/Makefile.include
+ $(top_srcdir)/build/build.environment.mk \
+ $(top_srcdir)/build/build.mk \
+ $(top_srcdir)/build/build.rules.mk
+ at ENABLE_TESTS_TRUE@am__append_1 = " $(NUNIT_LIBS)"
subdir = extensions/Editors/FlipEditor
ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
am__aclocal_m4_deps = $(top_srcdir)/build/m4/shave/shave.m4 \
$(top_srcdir)/build/m4/shamrock/expansions.m4 \
+ $(top_srcdir)/build/m4/shamrock/gnome-doc.m4 \
$(top_srcdir)/build/m4/shamrock/mono.m4 \
+ $(top_srcdir)/build/m4/shamrock/nunit.m4 \
$(top_srcdir)/build/m4/shamrock/programs.m4 \
+ $(top_srcdir)/build/m4/f-spot/flickrnet.m4 \
+ $(top_srcdir)/build/m4/f-spot/gnome-keyring-sharp.m4 \
+ $(top_srcdir)/build/m4/f-spot/gtk-sharp.m4 \
+ $(top_srcdir)/build/m4/f-spot/mono-addins.m4 \
$(top_srcdir)/acinclude.m4 $(top_srcdir)/configure.ac
am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
$(ACLOCAL_M4)
@@ -49,8 +58,6 @@ mkinstalldirs = $(install_sh) -d
CONFIG_HEADER = $(top_builddir)/config.h
CONFIG_CLEAN_FILES =
CONFIG_CLEAN_VPATH_FILES =
-SOURCES =
-DIST_SOURCES =
am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`;
am__vpath_adj = case $$p in \
$(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \
@@ -72,8 +79,9 @@ am__nobase_list = $(am__nobase_strip_setup); \
am__base_list = \
sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \
sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g'
-am__installdirs = "$(DESTDIR)$(addindir)"
-DATA = $(addin_DATA)
+am__installdirs = "$(DESTDIR)$(moduledir)"
+SCRIPTS = $(module_SCRIPTS)
+DIST_SOURCES =
DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
ACLOCAL = @ACLOCAL@
ACLOCAL_AMFLAGS = @ACLOCAL_AMFLAGS@
@@ -119,6 +127,8 @@ EXIF_SOVERSION = @EXIF_SOVERSION@
F77 = @F77@
FC = @FC@
FGREP = @FGREP@
+FLICKRNET_CFLAGS = @FLICKRNET_CFLAGS@
+FLICKRNET_LIBS = @FLICKRNET_LIBS@
F_CFLAGS = @F_CFLAGS@
F_LIBS = @F_LIBS@
GAPI2CODEGEN = @GAPI2CODEGEN@
@@ -132,6 +142,8 @@ GCONF_SHARP_LIBS = @GCONF_SHARP_LIBS@
GETTEXT_PACKAGE = @GETTEXT_PACKAGE@
GIO_CFLAGS = @GIO_CFLAGS@
GIO_LIBS = @GIO_LIBS@
+GLIBSHARP_2_12_7_CFLAGS = @GLIBSHARP_2_12_7_CFLAGS@
+GLIBSHARP_2_12_7_LIBS = @GLIBSHARP_2_12_7_LIBS@
GLIBSHARP_CFLAGS = @GLIBSHARP_CFLAGS@
GLIBSHARP_LIBS = @GLIBSHARP_LIBS@
GLIB_CFLAGS = @GLIB_CFLAGS@
@@ -147,6 +159,10 @@ GNOME_SHARP_CFLAGS = @GNOME_SHARP_CFLAGS@
GNOME_SHARP_LIBS = @GNOME_SHARP_LIBS@
GOBJECT_QUERY = @GOBJECT_QUERY@
GREP = @GREP@
+GTKSHARP_A11Y_CFLAGS = @GTKSHARP_A11Y_CFLAGS@
+GTKSHARP_A11Y_LIBS = @GTKSHARP_A11Y_LIBS@
+GTKSHARP_CFLAGS = @GTKSHARP_CFLAGS@
+GTKSHARP_LIBS = @GTKSHARP_LIBS@
HELP_DIR = @HELP_DIR@
ICONS_DIRECTORY = @ICONS_DIRECTORY@
INSTALL = @INSTALL@
@@ -160,14 +176,14 @@ INTLTOOL_EXTRACT = @INTLTOOL_EXTRACT@
INTLTOOL_MERGE = @INTLTOOL_MERGE@
INTLTOOL_PERL = @INTLTOOL_PERL@
INTLTOOL_UPDATE = @INTLTOOL_UPDATE@
+KEYRINGSHARP_CFLAGS = @KEYRINGSHARP_CFLAGS@
+KEYRINGSHARP_LIBS = @KEYRINGSHARP_LIBS@
LCMS_CFLAGS = @LCMS_CFLAGS@
LCMS_LIBS = @LCMS_LIBS@
LD = @LD@
LDFLAGS = @LDFLAGS@
LIBEXIF_VERSION_CHECK_CFLAGS = @LIBEXIF_VERSION_CHECK_CFLAGS@
LIBEXIF_VERSION_CHECK_LIBS = @LIBEXIF_VERSION_CHECK_LIBS@
-LIBGPHOTO2_CFLAGS = @LIBGPHOTO2_CFLAGS@
-LIBGPHOTO2_LIBS = @LIBGPHOTO2_LIBS@
LIBJPEG = @LIBJPEG@
LIBOBJS = @LIBOBJS@
LIBS = @LIBS@
@@ -182,6 +198,12 @@ MCS = @MCS@
MKDIR_P = @MKDIR_P@
MKINSTALLDIRS = @MKINSTALLDIRS@
MONO = @MONO@
+MONO_ADDINS_CFLAGS = @MONO_ADDINS_CFLAGS@
+MONO_ADDINS_GUI_CFLAGS = @MONO_ADDINS_GUI_CFLAGS@
+MONO_ADDINS_GUI_LIBS = @MONO_ADDINS_GUI_LIBS@
+MONO_ADDINS_LIBS = @MONO_ADDINS_LIBS@
+MONO_ADDINS_SETUP_CFLAGS = @MONO_ADDINS_SETUP_CFLAGS@
+MONO_ADDINS_SETUP_LIBS = @MONO_ADDINS_SETUP_LIBS@
MONO_MODULE_CFLAGS = @MONO_MODULE_CFLAGS@
MONO_MODULE_LIBS = @MONO_MODULE_LIBS@
MSGFMT = @MSGFMT@
@@ -192,7 +214,6 @@ NDESK_DBUS_LIBS = @NDESK_DBUS_LIBS@
NM = @NM@
NMEDIT = @NMEDIT@
NUNIT_CFLAGS = @NUNIT_CFLAGS@
-NUNIT_DEFINES = @NUNIT_DEFINES@
NUNIT_LIBS = @NUNIT_LIBS@
OBJC = @OBJC@
OBJDUMP = @OBJDUMP@
@@ -284,83 +305,227 @@ target_alias = @target_alias@
top_build_prefix = @top_build_prefix@
top_builddir = @top_builddir@
top_srcdir = @top_srcdir@
-addin = FlipEditor
-addin_manifest = $(addin).addin.xml
-addin_sources = \
- $(addin).cs
-
-addin_resources = \
- $(addin_manifest)
-
-addin_references = \
- Mono.Posix
-
-addin_packages = \
- gtk-sharp-2.0
-
-addin_extraflags =
-addin_extradist =
-ASSEMBLY = $(addin).dll
+ASSEMBLY = FSpot.Editors.FlipEditor
+TARGET = library
+LINK = $(REF_FSPOT_EXTENSION_FLIPEDITOR) $(am__append_1)
+INSTALL_DIR = $(EXTENSIONS_INSTALL_DIR)
+SOURCES = FlipEditor.cs
+RESOURCES = FlipEditor.addin.xml
+
+# Initializers
+MONO_BASE_PATH =
+MONO_ADDINS_PATH =
+
+# Install Paths
+DEFAULT_INSTALL_DIR = $(pkglibdir)
+BACKENDS_INSTALL_DIR = $(DEFAULT_INSTALL_DIR)/Backends
+EXTENSIONS_INSTALL_DIR = $(DEFAULT_INSTALL_DIR)/Extensions
DIR_DOCS = $(top_builddir)/docs
DIR_EXTENSIONS = $(top_builddir)/extensions
-DIR_GPHOTO2 = $(top_builddir)/lib/libgphoto2-sharp
DIR_ICONS = $(top_builddir)/icons
DIR_JPEGTRAN = $(top_builddir)/lib/libjpegtran
-DIR_KEYRING = $(top_builddir)/lib/gnome-keyring-sharp
DIR_LIBFSPOT = $(top_builddir)/lib/libfspot
DIR_SEMWEB = $(top_builddir)/lib/semweb
DIR_SRC = $(top_builddir)/src
DIR_GIOSHARP = $(top_builddir)/lib/gio-sharp/gio
DIR_GTKSHARPBEANS = $(top_builddir)/lib/gtk-sharp-beans
DIR_UNIQUESHARP = $(top_builddir)/lib/unique-sharp/unique
-LINK_KEYRING = -r:$(DIR_KEYRING)/gnome-keyring-sharp.dll
-LINK_GPHOTO2 = -r:$(DIR_GPHOTO2)/libgphoto2-sharp.dll
-LINK_SEMWEB = -r:$(DIR_SEMWEB)/SemWeb.dll
-LINK_GIOSHARP = -r:$(DIR_GIOSHARP)/gio-sharp.dll
-LINK_GTKSHARPBEANS = -r:$(DIR_GTKSHARPBEANS)/gtk-sharp-beans.dll
-LINK_UNIQUESHARP = -r:$(DIR_UNIQUESHARP)/unique-sharp.dll
-CSC_FLAGS = -debug
-CSC = $(MCS) $(CSC_FLAGS) -target:exe
-CSC_LIB = $(MCS) $(CSC_FLAGS) -target:library
-MONO_DEBUGFLAGS = --debug
-RUNTIME = mono $(MONO_DEBUGFLAGS)
-dep_resources = $(addprefix $(srcdir)/, $(addin_resources))
-build_resources = $(foreach res, $(dep_resources), $(addprefix -resource:, $(res)),$(notdir $(res)))
-build_sources = $(addprefix $(srcdir)/, $(addin_sources))
-build_packages = \
- $(addprefix -pkg:, $(addin_packages)) \
- -pkg:mono-addins
-
-build_references = \
- $(addprefix -r:, $(addin_references)) \
- -r:$(top_builddir)/src/f-spot.exe \
- -r:$(top_builddir)/src/Cms.dll \
- -r:$(top_builddir)/src/FSpot.Core.dll \
- -r:$(top_builddir)/src/FSpot.Platform.dll \
- -r:$(top_builddir)/src/FSpot.Query.dll \
- -r:$(top_builddir)/src/FSpot.Utils.dll \
- -r:$(top_builddir)/src/FSpot.Widgets.dll \
- $(LINK_SEMWEB) \
- $(LINK_GPHOTO2) \
- $(LINK_GIOSHARP) \
- $(LINK_UNIQUESHARP) \
- $(LINK_GTKSHARPBEANS)
-
-addin_SOURCES = \
- $(build_sources)
-
-addindir = $(pkglibdir)/extensions
-addin_DATA = $(ASSEMBLY)
-CLEANFILES = $(ASSEMBLY) $(ASSEMBLY).mdb *.mpack
-EXTRA_DIST = \
- $(build_sources) \
- $(dep_resources) \
- $(addin_extradist)
-
+DIR_BIN = $(top_builddir)/bin
+
+# External libraries to link against, generated from configure
+LINK_SYSTEM = -r:System
+LINK_SYSTEMDATA = -r:System.Data
+LINK_SYSTEM_WEB = -r:System.Web
+LINK_MONO_POSIX = -r:Mono.Posix
+LINK_MONO_CAIRO = -r:Mono.Cairo
+LINK_MONO_SIMD = -r:Mono.Simd
+LINK_MONODATA = -r:Mono.Data
+LINK_MONO_DATA_SQLITECLIENT = -r:Mono.Data.SqliteClient
+LINK_ICSHARP_ZIP_LIB = -r:ICSharpCode.SharpZipLib
+LINK_KEYRING = $(KEYRINGSHARP_LIBS)
+LINK_GLIB = $(GLIBSHARP_LIBS)
+LINK_GTK = $(GTKSHARP_LIBS)
+LINK_GNOME = $(GNOME_SHARP_LIBS)
+LINK_GCONF = $(GCONF_SHARP_LIBS)
+LINK_GLADE = -pkg:glade-sharp-2.0
+LINK_FLICKRNET = -pkg:flickrnet
+LINK_DBUS = $(NDESK_DBUS_LIBS) $(NDESK_DBUS_GLIB_LIBS)
+LINK_DBUS_NO_GLIB = $(NDESK_DBUS_LIBS)
+LINK_MONO_ADDINS_DEPS = $(MONO_ADDINS_LIBS)
+LINK_MONO_ADDINS_SETUP_DEPS = $(MONO_ADDINS_SETUP_LIBS)
+LINK_MONO_ADDINS_GUI_DEPS = $(MONO_ADDINS_GUI_LIBS)
+
+# GIO
+REF_GIO =
+LINK_GIO = -r:$(DIR_GIOSHARP)/gio-sharp.dll
+LINK_GIO_DEPS = $(REF_GIO) $(LINK_GIO)
+
+# Gtk Beans
+REF_GTK_BEANS = $(LINK_GIO_DEPS)
+LINK_GTK_BEANS = -r:$(DIR_GTKSHARPBEANS)/gtk-sharp-beans.dll
+LINK_GTK_BEANS_DEPS = $(REF_GTK_BEANS) $(LINK_GTK_BEANS)
+
+# Uniqe
+REF_UNIQUE =
+LINK_UNIQUE = -r:$(DIR_UNIQUESHARP)/unique-sharp.dll
+LINK_UNIQUE_DEPS = $(REF_UNIQUE) $(LINK_UNIQUE)
+
+# Hyena
+REF_HYENA = $(LINK_SYSTEM) $(LINK_MONO_POSIX)
+LINK_HYENA = -r:$(DIR_BIN)/Hyena.dll
+LINK_HYENA_DEPS = $(REF_HYENA) $(LINK_HYENA)
+
+# Semweb
+REF_SEMWEB = $(LINK_SYSTEMDATA) $(LINK_HYENA_DEPS)
+LINK_SEMWEB = -r:$(DIR_BIN)/SemWeb.dll
+LINK_SEMWEB_DEPS = $(REF_SEMWEB) $(LINK_SEMWEB)
+
+# Hyena.Data.Sqlite
+REF_HYENA_DATA_SQLITE = $(LINK_SQLITE)
+LINK_HYENA_DATA_SQLITE = -r:$(DIR_BIN)/Hyena.Data.Sqlite.dll
+LINK_HYENA_DATA_SQLITE_DEPS = $(REF_HYENA_DATA_SQLITE) $(LINK_HYENA_DATA_SQLITE)
+
+# Hyena.Gui
+REF_HYENA_GUI = $(LINK_HYENA_DEPS)
+LINK_HYENA_GUI = -r:$(DIR_BIN)/Hyena.Gui.dll
+LINK_HENA_GUI_DEPS = $(REF_HYENA_GUI) $(LINK_HYENA_GUI)
+
+# FSpot.Cms
+REF_FSPOT_CMS = $(LINK_GTK)
+LINK_FSPOT_CMS = -r:$(DIR_BIN)/FSpot.Cms.dll
+LINK_FSPOT_CMS_DEPS = $(REF_FSPOT_CMS) $(LINK_FSPOT_CMS)
+
+# FSpot.Utils
+REF_FSPOT_UTILS = $(LINK_HYENA_DEPS) $(LINK_GTK) $(LINK_GIO) $(LINK_MONO_CAIRO)
+LINK_FSPOT_UTILS = -r:$(DIR_BIN)/FSpot.Utils.dll
+LINK_FSPOT_UTILS_DEPS = $(REF_FSPOT_UTILS) $(LINK_FSPOT_UTILS)
+
+# FSpot.Core
+REF_FSPOT_CORE = $(LINK_FSPOT_UTILS_DEPS) $(LINK_FSPOT_CMS_DEPS)
+LINK_FSPOT_CORE = -r:$(DIR_BIN)/FSpot.Core.dll
+LINK_FSPOT_CORE_DEPS = $(REF_FSPOT_CORE) $(LINK_FSPOT_CORE)
+
+# FSpot.Query
+REF_FSPOT_QUERY = $(LINK_FSPOT_CORE_DEPS)
+LINK_FSPOT_QUERY = -r:$(DIR_BIN)/FSpot.Query.dll
+LINK_FSPOT_QUERY_DEPS = $(REF_FSPOT_QUERY) $(LINK_FSPOT_QUERY)
+
+# FSpot.JobScheduler
+REF_FSPOT_JOB_SCHEDULER = $(LINK_HYENA_DEPS)
+LINK_FSPOT_JOB_SCHEDULER = -r:$(DIR_BIN)/FSpot.JobScheduler.dll
+LINK_FSPOT_JOB_SCHEDULER_DEPS = $(REF_FSPOT_JOB_SCHEDULER) $(LINK_FSPOT_JOB_SCHEDULER)
+
+# FSpot.Bling
+REF_FSPOT_BLING = $(LINK_GTK_BEANS_DEPS) $(LINK_GLIB)
+LINK_FSPOT_BLING = -r:$(DIR_BIN)/FSpot.Bling.dll
+LINK_FSPOT_BLING_DEPS = $(REF_FSPOT_BLING) $(LINK_FSPOT_BLING)
+
+# FSpot.Platform
+REF_FSPOT_PLATFORM = $(LINK_GCONF) $(LINK_GTK) $(LINK_FSPOT_CORE_DEPS) $(LINK_DBUS)
+LINK_FSPOT_PLATFORM = -r:$(DIR_BIN)/FSpot.Platform.dll
+LINK_FSPOT_PLATFORM_DEPS = $(REF_FSPOT_PLATFORM) $(LINK_FSPOT_PLATFORM)
+
+# FSpot.Widgets
+REF_FSPOT_WIDGETS = $(LINK_FSPOT_CORE_DEPS) $(LINK_FSPOT_BLING_DEPS)
+LINK_FSPOT_WIDGETS = -r:$(DIR_BIN)/FSpot.Widgets.dll
+LINK_FSPOT_WIDGETS_DEPS = $(REF_FSPOT_WIDGETS) $(LINK_FSPOT_WIDGETS)
+
+# FSpot (executable)
+REF_FSPOT = $(LINK_FSPOT_WIDGETS_DEPS) $(LINK_FSPOT_PLATFORM_DEPS) $(LINK_FSPOT_QUERY_DEPS) \
+ $(LINK_GLIB) $(LINK_MONO_ADDINS_DEPS) $(LINK_UNIQUE_DEPS) $(LINK_MONO_ADDINS_SETUP_DEPS) \
+ $(LINK_SEMWEB_DEPS) $(LINK_GLADE) $(LINK_MONODATA) $(LINK_MONO_DATA_SQLITECLIENT) \
+ $(LINK_MONO_ADDINS_GUI_DEPS) $(LINK_FSPOT_JOB_SCHEDULER_DEPS) $(LINK_ICSHARP_ZIP_LIB) \
+ $(LINK_GNOME)
+
+# FIXME: do not link executables
+LINK_FSPOT = -r:$(DIR_BIN)/f-spot.exe
+LINK_FSPOT_DEPS = $(REF_FSPOT) $(LINK_FSPOT)
+
+# Extensions
+REF_FSPOT_EXTENSION_BLACKOUTEDITOR = $(LINK_FSPOT_DEPS)
+REF_FSPOT_EXTENSION_BWEDITOR = $(LINK_FSPOT_DEPS) $(LINK_MONO_SIMD)
+REF_FSPOT_EXTENSION_FLIPEDITOR = $(LINK_FSPOT_DEPS)
+REF_FSPOT_EXTENSION_PIXELATEEDITOR = $(LINK_FSPOT_DEPS)
+REF_FSPOT_EXTENSION_RESIZEEDITOR = $(LINK_FSPOT_DEPS)
+REF_FSPOT_EXTENSION_CDEXPORT = $(LINK_FSPOT_DEPS)
+REF_FSPOT_EXTENSION_FACEBOOKEXPORT = $(LINK_FSPOT_DEPS) $(LINK_KEYRING)
+REF_FSPOT_EXTENSION_FLICKREXPORT = $(LINK_FSPOT_DEPS) $(LINK_FLICKRNET)
+REF_FSPOT_EXTENSION_FOLDEREXPORT = $(LINK_FSPOT_DEPS) $(LINK_SYSTEM_WEB)
+REF_FSPOT_EXTENSION_GALLERYEXPORT = $(LINK_FSPOT_DEPS)
+REF_MONO_GOOGLE = $(LINK_HYENA_DEPS)
+LINK_MONO_GOOGLE = -r:$(DIR_BIN)/Mono.Google.dll
+LINK_MONO_GOOGLE_DEPS = $(REF_MONO_GOOGLE) $(LINK_MONO_GOOGLE)
+REF_FSPOT_EXTENSION_PICASAWEBEXPORT = $(LINK_FSPOT_DEPS) $(LINK_MONO_GOOGLE) $(LINK_KEYRING)
+REF_SMUGMUGNET = $(LINK_FSPOT_DEPS)
+LINK_SMUGMUGNET = -r:$(DIR_BIN)/SmugMugNet.dll
+LINK_SMUGMUGNET_DEPS = $(REF_SMUGMUGNET) $(LINK_SMUGMUGNET)
+REF_FSPOT_EXTENSION_SMUGMUGEXPORT = $(LINK_SMUGMUGNET_DEPS) $(LINK_KEYRING)
+REF_MONO_TABBLO = $(LINK_HYENA_DEPS)
+LINK_MONO_TABBLO = -r:$(DIR_BIN)/Mono.Tabblo.dll
+LINK_MONO_TABBLO_DEPS = $(REF_MONO_TABBLO) $(LINK_MONO_TABBLO)
+REF_FSPOT_EXTENSION_TABBLOEXPORT = $(LINK_FSPOT_DEPS) $(LINK_KEYRING) $(LINK_MONO_TABBLO_DEPS)
+REF_FSPOT_EXTENSION_ZIPEXPORT = $(LINK_FSPOT_DEPS)
+REF_FSPOT_EXTENSION_CHANGEPHOTOPATH = $(LINK_FSPOT_DEPS)
+REF_FSPOT_EXTENSION_DEVELOPINUFRAW = $(LINK_FSPOT_DEPS)
+REF_FSPOT_EXTENSION_HASHJOB = $(LINK_FSPOT_DEPS)
+REF_FSPOT_EXTENSION_LIVEWEBGALLERY = $(LINK_FSPOT_DEPS)
+REF_FSPOT_EXTENSION_MERGEDB = $(LINK_FSPOT_DEPS)
+REF_FSPOT_EXTENSION_RAWPLUSJPEG = $(LINK_FSPOT_DEPS)
+REF_FSPOT_EXTENSION_RETROACTIVEROLL = $(LINK_FSPOT_DEPS)
+REF_FSPOT_EXTENSION_SCREENSAVERCONFIG = $(LINK_FSPOT_DEPS)
+REF_FSPOT_EXTENSION_COVERTRANSITION = $(LINK_FSPOT_DEPS)
+
+# Cute hack to replace a space with something
+colon := :
+empty :=
+space := $(empty) $(empty)
+
+# Build path to allow running uninstalled
+RUN_PATH = $(subst $(space),$(colon), $(MONO_BASE_PATH))
+UNIQUE_FILTER_PIPE = tr [:space:] \\n | sort | uniq
+BUILD_DATA_DIR = $(top_builddir)/bin/share/$(PACKAGE)
+
+# Since all other attempts failed, we currently go this way:
+# This code adds the file specified in ASSEMBLY_INFO_SOURCE to SOURCES_BUILD.
+# If no such file is specified, the default AssemblyInfo.cs is used.
+ASSEMBLY_INFO_SOURCE_REAL = \
+ $(shell if [ "$(ASSEMBLY_INFO_SOURCE)" ]; \
+ then \
+ echo "$(addprefix $(srcdir)/, $(ASSEMBLY_INFO_SOURCE))"; \
+ else \
+ echo "$(top_srcdir)/src/AssemblyInfo.cs"; \
+ fi)
+
+SOURCES_BUILD = $(addprefix $(srcdir)/, $(SOURCES)) \
+ $(ASSEMBLY_INFO_SOURCE_REAL)
+RESOURCES_EXPANDED = $(addprefix $(srcdir)/, $(RESOURCES))
+RESOURCES_BUILD = $(foreach resource, $(RESOURCES_EXPANDED), \
+ -resource:$(resource),$(notdir $(resource)))
+
+INSTALL_ICONS = $(top_srcdir)/build/private-icon-theme-installer "$(mkinstalldirs)" "$(INSTALL_DATA)"
+THEME_ICONS_SOURCE = $(wildcard $(srcdir)/ThemeIcons/*/*/*.png) $(wildcard $(srcdir)/ThemeIcons/scalable/*/*.svg)
+THEME_ICONS_RELATIVE = $(subst $(srcdir)/ThemeIcons/, , $(THEME_ICONS_SOURCE))
+ASSEMBLY_EXTENSION = $(strip $(patsubst library, dll, $(TARGET)))
+ASSEMBLY_FILE = $(top_builddir)/bin/$(ASSEMBLY).$(ASSEMBLY_EXTENSION)
+INSTALL_DIR_RESOLVED = $(firstword $(subst , $(DEFAULT_INSTALL_DIR), $(INSTALL_DIR)))
+ at ENABLE_TESTS_TRUE@ENABLE_TESTS_FLAG = "-define:ENABLE_TESTS"
+ at ENABLE_ATK_TRUE@ENABLE_ATK_FLAG = "-define:ENABLE_ATK"
+FILTERED_LINK = $(shell echo "$(LINK)" | $(UNIQUE_FILTER_PIPE))
+DEP_LINK = $(shell echo "$(LINK)" | $(UNIQUE_FILTER_PIPE) | sed s,-r:,,g | grep '$(top_builddir)/bin/')
+OUTPUT_FILES = \
+ $(ASSEMBLY_FILE) \
+ $(ASSEMBLY_FILE).mdb
+
+moduledir = $(INSTALL_DIR_RESOLVED)
+module_SCRIPTS = $(OUTPUT_FILES)
+EXTRA_DIST = $(SOURCES_BUILD) $(RESOURCES_EXPANDED) $(THEME_ICONS_SOURCE)
+CLEANFILES = $(OUTPUT_FILES) $(ASSEMBLY_FILE).config
+DISTCLEANFILES = *.pidb
+MAINTAINERCLEANFILES = Makefile.in
all: all-am
.SUFFIXES:
-$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(top_srcdir)/Makefile.addins $(top_srcdir)/Makefile.include $(am__configure_deps)
+$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(top_srcdir)/build/build.mk $(top_srcdir)/build/build.environment.mk $(top_srcdir)/build/build.rules.mk $(am__configure_deps)
@for dep in $?; do \
case '$(am__configure_deps)' in \
*$$dep*) \
@@ -390,32 +555,46 @@ $(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps)
$(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps)
cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
$(am__aclocal_m4_deps):
+install-moduleSCRIPTS: $(module_SCRIPTS)
+ @$(NORMAL_INSTALL)
+ test -z "$(moduledir)" || $(MKDIR_P) "$(DESTDIR)$(moduledir)"
+ @list='$(module_SCRIPTS)'; test -n "$(moduledir)" || list=; \
+ for p in $$list; do \
+ if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \
+ if test -f "$$d$$p"; then echo "$$d$$p"; echo "$$p"; else :; fi; \
+ done | \
+ sed -e 'p;s,.*/,,;n' \
+ -e 'h;s|.*|.|' \
+ -e 'p;x;s,.*/,,;$(transform)' | sed 'N;N;N;s,\n, ,g' | \
+ $(AWK) 'BEGIN { files["."] = ""; dirs["."] = 1; } \
+ { d=$$3; if (dirs[d] != 1) { print "d", d; dirs[d] = 1 } \
+ if ($$2 == $$4) { files[d] = files[d] " " $$1; \
+ if (++n[d] == $(am__install_max)) { \
+ print "f", d, files[d]; n[d] = 0; files[d] = "" } } \
+ else { print "f", d "/" $$4, $$1 } } \
+ END { for (d in files) print "f", d, files[d] }' | \
+ while read type dir files; do \
+ if test "$$dir" = .; then dir=; else dir=/$$dir; fi; \
+ test -z "$$files" || { \
+ echo " $(INSTALL_SCRIPT) $$files '$(DESTDIR)$(moduledir)$$dir'"; \
+ $(INSTALL_SCRIPT) $$files "$(DESTDIR)$(moduledir)$$dir" || exit $$?; \
+ } \
+ ; done
+
+uninstall-moduleSCRIPTS:
+ @$(NORMAL_UNINSTALL)
+ @list='$(module_SCRIPTS)'; test -n "$(moduledir)" || exit 0; \
+ files=`for p in $$list; do echo "$$p"; done | \
+ sed -e 's,.*/,,;$(transform)'`; \
+ test -n "$$list" || exit 0; \
+ echo " ( cd '$(DESTDIR)$(moduledir)' && rm -f" $$files ")"; \
+ cd "$(DESTDIR)$(moduledir)" && rm -f $$files
mostlyclean-libtool:
-rm -f *.lo
clean-libtool:
-rm -rf .libs _libs
-install-addinDATA: $(addin_DATA)
- @$(NORMAL_INSTALL)
- test -z "$(addindir)" || $(MKDIR_P) "$(DESTDIR)$(addindir)"
- @list='$(addin_DATA)'; test -n "$(addindir)" || list=; \
- for p in $$list; do \
- if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \
- echo "$$d$$p"; \
- done | $(am__base_list) | \
- while read files; do \
- echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(addindir)'"; \
- $(INSTALL_DATA) $$files "$(DESTDIR)$(addindir)" || exit $$?; \
- done
-
-uninstall-addinDATA:
- @$(NORMAL_UNINSTALL)
- @list='$(addin_DATA)'; test -n "$(addindir)" || list=; \
- files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \
- test -n "$$files" || exit 0; \
- echo " ( cd '$(DESTDIR)$(addindir)' && rm -f" $$files ")"; \
- cd "$(DESTDIR)$(addindir)" && rm -f $$files
tags: TAGS
TAGS:
@@ -455,9 +634,9 @@ distdir: $(DISTFILES)
done
check-am: all-am
check: check-am
-all-am: Makefile $(DATA)
+all-am: Makefile $(SCRIPTS)
installdirs:
- for dir in "$(DESTDIR)$(addindir)"; do \
+ for dir in "$(DESTDIR)$(moduledir)"; do \
test -z "$$dir" || $(MKDIR_P) "$$dir"; \
done
install: install-am
@@ -482,10 +661,12 @@ clean-generic:
distclean-generic:
-test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
-test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES)
+ -test -z "$(DISTCLEANFILES)" || rm -f $(DISTCLEANFILES)
maintainer-clean-generic:
@echo "This command is intended for maintainers to use"
@echo "it deletes files that may require special tools to rebuild."
+ -test -z "$(MAINTAINERCLEANFILES)" || rm -f $(MAINTAINERCLEANFILES)
clean: clean-am
clean-am: clean-generic clean-libtool mostlyclean-am
@@ -506,7 +687,7 @@ info: info-am
info-am:
-install-data-am: install-addinDATA
+install-data-am: install-data-local install-moduleSCRIPTS
install-dvi: install-dvi-am
@@ -550,28 +731,72 @@ ps: ps-am
ps-am:
-uninstall-am: uninstall-addinDATA
+uninstall-am: uninstall-local uninstall-moduleSCRIPTS
.MAKE: install-am install-strip
.PHONY: all all-am check check-am clean clean-generic clean-libtool \
distclean distclean-generic distclean-libtool distdir dvi \
- dvi-am html html-am info info-am install install-addinDATA \
- install-am install-data install-data-am install-dvi \
+ dvi-am html html-am info info-am install install-am \
+ install-data install-data-am install-data-local 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-generic mostlyclean-libtool pdf pdf-am ps ps-am \
- uninstall uninstall-addinDATA uninstall-am
-
-
-mpack: $(ASSEMBLY)
- mautil p $(ASSEMBLY)
-
-$(ASSEMBLY): $(addin_SOURCES) $(dep_resources)
- $(CSC_LIB) -out:$@ $(addin_extraflags) $(build_sources) $(build_references) $(build_packages) $(build_resources)
+ install-moduleSCRIPTS install-pdf install-pdf-am install-ps \
+ install-ps-am install-strip installcheck installcheck-am \
+ installdirs maintainer-clean maintainer-clean-generic \
+ mostlyclean mostlyclean-generic mostlyclean-libtool pdf pdf-am \
+ ps ps-am uninstall uninstall-am uninstall-local \
+ uninstall-moduleSCRIPTS
+
+
+all: $(ASSEMBLY_FILE) theme-icons
+
+run:
+ @pushd $(top_builddir); \
+ make run; \
+ popd;
+
+# uncommented for now.
+# tests are currently excuted from Makefile in $(top_builddir)
+#test:
+# @pushd $(top_builddir)/tests; \
+# make $(ASSEMBLY); \
+# popd;
+
+build-debug:
+ @echo $(DEP_LINK)
+
+$(ASSEMBLY_FILE).mdb: $(ASSEMBLY_FILE)
+
+$(ASSEMBLY_FILE): $(SOURCES_BUILD) $(RESOURCES_EXPANDED) $(DEP_LINK)
+ @mkdir -p $(top_builddir)/bin
+ @if [ ! "x$(ENABLE_RELEASE)" = "xyes" ]; then \
+ $(top_srcdir)/build/dll-map-makefile-verifier $(srcdir)/Makefile.am $(srcdir)/$(notdir $@.config) && \
+ $(MONO) $(top_builddir)/build/dll-map-verifier.exe $(srcdir)/$(notdir $@.config) -iwinmm -ilibbanshee -ilibbnpx11 -ilibc -ilibc.so.6 -iintl -ilibmtp.dll -ilibigemacintegration.dylib -iCFRelease $(SOURCES_BUILD); \
+ fi;
+ $(MCS) \
+ $(GMCS_FLAGS) \
+ $(ASSEMBLY_BUILD_FLAGS) \
+ -nowarn:0278 -nowarn:0078 $$warn \
+ -define:HAVE_GTK_2_10 -define:NET_2_0 \
+ -debug -target:$(TARGET) -out:$@ \
+ $(BUILD_DEFINES) $(ENABLE_TESTS_FLAG) $(ENABLE_ATK_FLAG) \
+ $(FILTERED_LINK) $(RESOURCES_BUILD) $(SOURCES_BUILD)
+ @if [ -e $(srcdir)/$(notdir $@.config) ]; then \
+ cp $(srcdir)/$(notdir $@.config) $(top_builddir)/bin; \
+ fi;
+ @if [ ! -z "$(EXTRA_BUNDLE)" ]; then \
+ cp $(EXTRA_BUNDLE) $(top_builddir)/bin; \
+ fi;
+
+theme-icons: $(THEME_ICONS_SOURCE)
+ @$(INSTALL_ICONS) -il "$(BUILD_DATA_DIR)" "$(srcdir)" $(THEME_ICONS_RELATIVE)
+
+install-data-local: $(THEME_ICONS_SOURCE)
+ @$(INSTALL_ICONS) -i "$(DESTDIR)$(pkgdatadir)" "$(srcdir)" $(THEME_ICONS_RELATIVE)
+
+uninstall-local: $(THEME_ICONS_SOURCE)
+ @$(INSTALL_ICONS) -u "$(DESTDIR)$(pkgdatadir)" "$(srcdir)" $(THEME_ICONS_RELATIVE)
# 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/extensions/Editors/Makefile.in b/extensions/Editors/Makefile.in
index 264fba1..3baa63f 100644
--- a/extensions/Editors/Makefile.in
+++ b/extensions/Editors/Makefile.in
@@ -39,8 +39,14 @@ DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in
ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
am__aclocal_m4_deps = $(top_srcdir)/build/m4/shave/shave.m4 \
$(top_srcdir)/build/m4/shamrock/expansions.m4 \
+ $(top_srcdir)/build/m4/shamrock/gnome-doc.m4 \
$(top_srcdir)/build/m4/shamrock/mono.m4 \
+ $(top_srcdir)/build/m4/shamrock/nunit.m4 \
$(top_srcdir)/build/m4/shamrock/programs.m4 \
+ $(top_srcdir)/build/m4/f-spot/flickrnet.m4 \
+ $(top_srcdir)/build/m4/f-spot/gnome-keyring-sharp.m4 \
+ $(top_srcdir)/build/m4/f-spot/gtk-sharp.m4 \
+ $(top_srcdir)/build/m4/f-spot/mono-addins.m4 \
$(top_srcdir)/acinclude.m4 $(top_srcdir)/configure.ac
am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
$(ACLOCAL_M4)
@@ -134,6 +140,8 @@ EXIF_SOVERSION = @EXIF_SOVERSION@
F77 = @F77@
FC = @FC@
FGREP = @FGREP@
+FLICKRNET_CFLAGS = @FLICKRNET_CFLAGS@
+FLICKRNET_LIBS = @FLICKRNET_LIBS@
F_CFLAGS = @F_CFLAGS@
F_LIBS = @F_LIBS@
GAPI2CODEGEN = @GAPI2CODEGEN@
@@ -147,6 +155,8 @@ GCONF_SHARP_LIBS = @GCONF_SHARP_LIBS@
GETTEXT_PACKAGE = @GETTEXT_PACKAGE@
GIO_CFLAGS = @GIO_CFLAGS@
GIO_LIBS = @GIO_LIBS@
+GLIBSHARP_2_12_7_CFLAGS = @GLIBSHARP_2_12_7_CFLAGS@
+GLIBSHARP_2_12_7_LIBS = @GLIBSHARP_2_12_7_LIBS@
GLIBSHARP_CFLAGS = @GLIBSHARP_CFLAGS@
GLIBSHARP_LIBS = @GLIBSHARP_LIBS@
GLIB_CFLAGS = @GLIB_CFLAGS@
@@ -162,6 +172,10 @@ GNOME_SHARP_CFLAGS = @GNOME_SHARP_CFLAGS@
GNOME_SHARP_LIBS = @GNOME_SHARP_LIBS@
GOBJECT_QUERY = @GOBJECT_QUERY@
GREP = @GREP@
+GTKSHARP_A11Y_CFLAGS = @GTKSHARP_A11Y_CFLAGS@
+GTKSHARP_A11Y_LIBS = @GTKSHARP_A11Y_LIBS@
+GTKSHARP_CFLAGS = @GTKSHARP_CFLAGS@
+GTKSHARP_LIBS = @GTKSHARP_LIBS@
HELP_DIR = @HELP_DIR@
ICONS_DIRECTORY = @ICONS_DIRECTORY@
INSTALL = @INSTALL@
@@ -175,14 +189,14 @@ INTLTOOL_EXTRACT = @INTLTOOL_EXTRACT@
INTLTOOL_MERGE = @INTLTOOL_MERGE@
INTLTOOL_PERL = @INTLTOOL_PERL@
INTLTOOL_UPDATE = @INTLTOOL_UPDATE@
+KEYRINGSHARP_CFLAGS = @KEYRINGSHARP_CFLAGS@
+KEYRINGSHARP_LIBS = @KEYRINGSHARP_LIBS@
LCMS_CFLAGS = @LCMS_CFLAGS@
LCMS_LIBS = @LCMS_LIBS@
LD = @LD@
LDFLAGS = @LDFLAGS@
LIBEXIF_VERSION_CHECK_CFLAGS = @LIBEXIF_VERSION_CHECK_CFLAGS@
LIBEXIF_VERSION_CHECK_LIBS = @LIBEXIF_VERSION_CHECK_LIBS@
-LIBGPHOTO2_CFLAGS = @LIBGPHOTO2_CFLAGS@
-LIBGPHOTO2_LIBS = @LIBGPHOTO2_LIBS@
LIBJPEG = @LIBJPEG@
LIBOBJS = @LIBOBJS@
LIBS = @LIBS@
@@ -197,6 +211,12 @@ MCS = @MCS@
MKDIR_P = @MKDIR_P@
MKINSTALLDIRS = @MKINSTALLDIRS@
MONO = @MONO@
+MONO_ADDINS_CFLAGS = @MONO_ADDINS_CFLAGS@
+MONO_ADDINS_GUI_CFLAGS = @MONO_ADDINS_GUI_CFLAGS@
+MONO_ADDINS_GUI_LIBS = @MONO_ADDINS_GUI_LIBS@
+MONO_ADDINS_LIBS = @MONO_ADDINS_LIBS@
+MONO_ADDINS_SETUP_CFLAGS = @MONO_ADDINS_SETUP_CFLAGS@
+MONO_ADDINS_SETUP_LIBS = @MONO_ADDINS_SETUP_LIBS@
MONO_MODULE_CFLAGS = @MONO_MODULE_CFLAGS@
MONO_MODULE_LIBS = @MONO_MODULE_LIBS@
MSGFMT = @MSGFMT@
@@ -207,7 +227,6 @@ NDESK_DBUS_LIBS = @NDESK_DBUS_LIBS@
NM = @NM@
NMEDIT = @NMEDIT@
NUNIT_CFLAGS = @NUNIT_CFLAGS@
-NUNIT_DEFINES = @NUNIT_DEFINES@
NUNIT_LIBS = @NUNIT_LIBS@
OBJC = @OBJC@
OBJDUMP = @OBJDUMP@
diff --git a/extensions/Editors/PixelateEditor/Makefile.am b/extensions/Editors/PixelateEditor/Makefile.am
index c91ff68..d6ead24 100644
--- a/extensions/Editors/PixelateEditor/Makefile.am
+++ b/extensions/Editors/PixelateEditor/Makefile.am
@@ -1,20 +1,10 @@
-addin = PixelateEditor
+ASSEMBLY = FSpot.Editors.PixelateEditor
+TARGET = library
+LINK = $(REF_FSPOT_EXTENSION_PIXELATEEDITOR)
+INSTALL_DIR = $(EXTENSIONS_INSTALL_DIR)
-addin_manifest = $(addin).addin.xml
+SOURCES = PixelateEditor.cs
-addin_sources = \
- $(addin).cs
+RESOURCES = PixelateEditor.addin.xml
-addin_resources = \
- $(addin_manifest)
-
-addin_references = \
- Mono.Posix
-
-addin_packages = \
- gtk-sharp-2.0
-
-addin_extraflags =
-addin_extradist =
-
-include $(top_srcdir)/Makefile.addins
+include $(top_srcdir)/build/build.mk
diff --git a/extensions/Editors/PixelateEditor/Makefile.in b/extensions/Editors/PixelateEditor/Makefile.in
index 20adbd5..989a92e 100644
--- a/extensions/Editors/PixelateEditor/Makefile.in
+++ b/extensions/Editors/PixelateEditor/Makefile.in
@@ -35,13 +35,22 @@ POST_UNINSTALL = :
build_triplet = @build@
host_triplet = @host@
DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in \
- $(top_srcdir)/Makefile.addins $(top_srcdir)/Makefile.include
+ $(top_srcdir)/build/build.environment.mk \
+ $(top_srcdir)/build/build.mk \
+ $(top_srcdir)/build/build.rules.mk
+ at ENABLE_TESTS_TRUE@am__append_1 = " $(NUNIT_LIBS)"
subdir = extensions/Editors/PixelateEditor
ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
am__aclocal_m4_deps = $(top_srcdir)/build/m4/shave/shave.m4 \
$(top_srcdir)/build/m4/shamrock/expansions.m4 \
+ $(top_srcdir)/build/m4/shamrock/gnome-doc.m4 \
$(top_srcdir)/build/m4/shamrock/mono.m4 \
+ $(top_srcdir)/build/m4/shamrock/nunit.m4 \
$(top_srcdir)/build/m4/shamrock/programs.m4 \
+ $(top_srcdir)/build/m4/f-spot/flickrnet.m4 \
+ $(top_srcdir)/build/m4/f-spot/gnome-keyring-sharp.m4 \
+ $(top_srcdir)/build/m4/f-spot/gtk-sharp.m4 \
+ $(top_srcdir)/build/m4/f-spot/mono-addins.m4 \
$(top_srcdir)/acinclude.m4 $(top_srcdir)/configure.ac
am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
$(ACLOCAL_M4)
@@ -49,8 +58,6 @@ mkinstalldirs = $(install_sh) -d
CONFIG_HEADER = $(top_builddir)/config.h
CONFIG_CLEAN_FILES =
CONFIG_CLEAN_VPATH_FILES =
-SOURCES =
-DIST_SOURCES =
am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`;
am__vpath_adj = case $$p in \
$(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \
@@ -72,8 +79,9 @@ am__nobase_list = $(am__nobase_strip_setup); \
am__base_list = \
sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \
sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g'
-am__installdirs = "$(DESTDIR)$(addindir)"
-DATA = $(addin_DATA)
+am__installdirs = "$(DESTDIR)$(moduledir)"
+SCRIPTS = $(module_SCRIPTS)
+DIST_SOURCES =
DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
ACLOCAL = @ACLOCAL@
ACLOCAL_AMFLAGS = @ACLOCAL_AMFLAGS@
@@ -119,6 +127,8 @@ EXIF_SOVERSION = @EXIF_SOVERSION@
F77 = @F77@
FC = @FC@
FGREP = @FGREP@
+FLICKRNET_CFLAGS = @FLICKRNET_CFLAGS@
+FLICKRNET_LIBS = @FLICKRNET_LIBS@
F_CFLAGS = @F_CFLAGS@
F_LIBS = @F_LIBS@
GAPI2CODEGEN = @GAPI2CODEGEN@
@@ -132,6 +142,8 @@ GCONF_SHARP_LIBS = @GCONF_SHARP_LIBS@
GETTEXT_PACKAGE = @GETTEXT_PACKAGE@
GIO_CFLAGS = @GIO_CFLAGS@
GIO_LIBS = @GIO_LIBS@
+GLIBSHARP_2_12_7_CFLAGS = @GLIBSHARP_2_12_7_CFLAGS@
+GLIBSHARP_2_12_7_LIBS = @GLIBSHARP_2_12_7_LIBS@
GLIBSHARP_CFLAGS = @GLIBSHARP_CFLAGS@
GLIBSHARP_LIBS = @GLIBSHARP_LIBS@
GLIB_CFLAGS = @GLIB_CFLAGS@
@@ -147,6 +159,10 @@ GNOME_SHARP_CFLAGS = @GNOME_SHARP_CFLAGS@
GNOME_SHARP_LIBS = @GNOME_SHARP_LIBS@
GOBJECT_QUERY = @GOBJECT_QUERY@
GREP = @GREP@
+GTKSHARP_A11Y_CFLAGS = @GTKSHARP_A11Y_CFLAGS@
+GTKSHARP_A11Y_LIBS = @GTKSHARP_A11Y_LIBS@
+GTKSHARP_CFLAGS = @GTKSHARP_CFLAGS@
+GTKSHARP_LIBS = @GTKSHARP_LIBS@
HELP_DIR = @HELP_DIR@
ICONS_DIRECTORY = @ICONS_DIRECTORY@
INSTALL = @INSTALL@
@@ -160,14 +176,14 @@ INTLTOOL_EXTRACT = @INTLTOOL_EXTRACT@
INTLTOOL_MERGE = @INTLTOOL_MERGE@
INTLTOOL_PERL = @INTLTOOL_PERL@
INTLTOOL_UPDATE = @INTLTOOL_UPDATE@
+KEYRINGSHARP_CFLAGS = @KEYRINGSHARP_CFLAGS@
+KEYRINGSHARP_LIBS = @KEYRINGSHARP_LIBS@
LCMS_CFLAGS = @LCMS_CFLAGS@
LCMS_LIBS = @LCMS_LIBS@
LD = @LD@
LDFLAGS = @LDFLAGS@
LIBEXIF_VERSION_CHECK_CFLAGS = @LIBEXIF_VERSION_CHECK_CFLAGS@
LIBEXIF_VERSION_CHECK_LIBS = @LIBEXIF_VERSION_CHECK_LIBS@
-LIBGPHOTO2_CFLAGS = @LIBGPHOTO2_CFLAGS@
-LIBGPHOTO2_LIBS = @LIBGPHOTO2_LIBS@
LIBJPEG = @LIBJPEG@
LIBOBJS = @LIBOBJS@
LIBS = @LIBS@
@@ -182,6 +198,12 @@ MCS = @MCS@
MKDIR_P = @MKDIR_P@
MKINSTALLDIRS = @MKINSTALLDIRS@
MONO = @MONO@
+MONO_ADDINS_CFLAGS = @MONO_ADDINS_CFLAGS@
+MONO_ADDINS_GUI_CFLAGS = @MONO_ADDINS_GUI_CFLAGS@
+MONO_ADDINS_GUI_LIBS = @MONO_ADDINS_GUI_LIBS@
+MONO_ADDINS_LIBS = @MONO_ADDINS_LIBS@
+MONO_ADDINS_SETUP_CFLAGS = @MONO_ADDINS_SETUP_CFLAGS@
+MONO_ADDINS_SETUP_LIBS = @MONO_ADDINS_SETUP_LIBS@
MONO_MODULE_CFLAGS = @MONO_MODULE_CFLAGS@
MONO_MODULE_LIBS = @MONO_MODULE_LIBS@
MSGFMT = @MSGFMT@
@@ -192,7 +214,6 @@ NDESK_DBUS_LIBS = @NDESK_DBUS_LIBS@
NM = @NM@
NMEDIT = @NMEDIT@
NUNIT_CFLAGS = @NUNIT_CFLAGS@
-NUNIT_DEFINES = @NUNIT_DEFINES@
NUNIT_LIBS = @NUNIT_LIBS@
OBJC = @OBJC@
OBJDUMP = @OBJDUMP@
@@ -284,83 +305,227 @@ target_alias = @target_alias@
top_build_prefix = @top_build_prefix@
top_builddir = @top_builddir@
top_srcdir = @top_srcdir@
-addin = PixelateEditor
-addin_manifest = $(addin).addin.xml
-addin_sources = \
- $(addin).cs
-
-addin_resources = \
- $(addin_manifest)
-
-addin_references = \
- Mono.Posix
-
-addin_packages = \
- gtk-sharp-2.0
-
-addin_extraflags =
-addin_extradist =
-ASSEMBLY = $(addin).dll
+ASSEMBLY = FSpot.Editors.PixelateEditor
+TARGET = library
+LINK = $(REF_FSPOT_EXTENSION_PIXELATEEDITOR) $(am__append_1)
+INSTALL_DIR = $(EXTENSIONS_INSTALL_DIR)
+SOURCES = PixelateEditor.cs
+RESOURCES = PixelateEditor.addin.xml
+
+# Initializers
+MONO_BASE_PATH =
+MONO_ADDINS_PATH =
+
+# Install Paths
+DEFAULT_INSTALL_DIR = $(pkglibdir)
+BACKENDS_INSTALL_DIR = $(DEFAULT_INSTALL_DIR)/Backends
+EXTENSIONS_INSTALL_DIR = $(DEFAULT_INSTALL_DIR)/Extensions
DIR_DOCS = $(top_builddir)/docs
DIR_EXTENSIONS = $(top_builddir)/extensions
-DIR_GPHOTO2 = $(top_builddir)/lib/libgphoto2-sharp
DIR_ICONS = $(top_builddir)/icons
DIR_JPEGTRAN = $(top_builddir)/lib/libjpegtran
-DIR_KEYRING = $(top_builddir)/lib/gnome-keyring-sharp
DIR_LIBFSPOT = $(top_builddir)/lib/libfspot
DIR_SEMWEB = $(top_builddir)/lib/semweb
DIR_SRC = $(top_builddir)/src
DIR_GIOSHARP = $(top_builddir)/lib/gio-sharp/gio
DIR_GTKSHARPBEANS = $(top_builddir)/lib/gtk-sharp-beans
DIR_UNIQUESHARP = $(top_builddir)/lib/unique-sharp/unique
-LINK_KEYRING = -r:$(DIR_KEYRING)/gnome-keyring-sharp.dll
-LINK_GPHOTO2 = -r:$(DIR_GPHOTO2)/libgphoto2-sharp.dll
-LINK_SEMWEB = -r:$(DIR_SEMWEB)/SemWeb.dll
-LINK_GIOSHARP = -r:$(DIR_GIOSHARP)/gio-sharp.dll
-LINK_GTKSHARPBEANS = -r:$(DIR_GTKSHARPBEANS)/gtk-sharp-beans.dll
-LINK_UNIQUESHARP = -r:$(DIR_UNIQUESHARP)/unique-sharp.dll
-CSC_FLAGS = -debug
-CSC = $(MCS) $(CSC_FLAGS) -target:exe
-CSC_LIB = $(MCS) $(CSC_FLAGS) -target:library
-MONO_DEBUGFLAGS = --debug
-RUNTIME = mono $(MONO_DEBUGFLAGS)
-dep_resources = $(addprefix $(srcdir)/, $(addin_resources))
-build_resources = $(foreach res, $(dep_resources), $(addprefix -resource:, $(res)),$(notdir $(res)))
-build_sources = $(addprefix $(srcdir)/, $(addin_sources))
-build_packages = \
- $(addprefix -pkg:, $(addin_packages)) \
- -pkg:mono-addins
-
-build_references = \
- $(addprefix -r:, $(addin_references)) \
- -r:$(top_builddir)/src/f-spot.exe \
- -r:$(top_builddir)/src/Cms.dll \
- -r:$(top_builddir)/src/FSpot.Core.dll \
- -r:$(top_builddir)/src/FSpot.Platform.dll \
- -r:$(top_builddir)/src/FSpot.Query.dll \
- -r:$(top_builddir)/src/FSpot.Utils.dll \
- -r:$(top_builddir)/src/FSpot.Widgets.dll \
- $(LINK_SEMWEB) \
- $(LINK_GPHOTO2) \
- $(LINK_GIOSHARP) \
- $(LINK_UNIQUESHARP) \
- $(LINK_GTKSHARPBEANS)
-
-addin_SOURCES = \
- $(build_sources)
-
-addindir = $(pkglibdir)/extensions
-addin_DATA = $(ASSEMBLY)
-CLEANFILES = $(ASSEMBLY) $(ASSEMBLY).mdb *.mpack
-EXTRA_DIST = \
- $(build_sources) \
- $(dep_resources) \
- $(addin_extradist)
-
+DIR_BIN = $(top_builddir)/bin
+
+# External libraries to link against, generated from configure
+LINK_SYSTEM = -r:System
+LINK_SYSTEMDATA = -r:System.Data
+LINK_SYSTEM_WEB = -r:System.Web
+LINK_MONO_POSIX = -r:Mono.Posix
+LINK_MONO_CAIRO = -r:Mono.Cairo
+LINK_MONO_SIMD = -r:Mono.Simd
+LINK_MONODATA = -r:Mono.Data
+LINK_MONO_DATA_SQLITECLIENT = -r:Mono.Data.SqliteClient
+LINK_ICSHARP_ZIP_LIB = -r:ICSharpCode.SharpZipLib
+LINK_KEYRING = $(KEYRINGSHARP_LIBS)
+LINK_GLIB = $(GLIBSHARP_LIBS)
+LINK_GTK = $(GTKSHARP_LIBS)
+LINK_GNOME = $(GNOME_SHARP_LIBS)
+LINK_GCONF = $(GCONF_SHARP_LIBS)
+LINK_GLADE = -pkg:glade-sharp-2.0
+LINK_FLICKRNET = -pkg:flickrnet
+LINK_DBUS = $(NDESK_DBUS_LIBS) $(NDESK_DBUS_GLIB_LIBS)
+LINK_DBUS_NO_GLIB = $(NDESK_DBUS_LIBS)
+LINK_MONO_ADDINS_DEPS = $(MONO_ADDINS_LIBS)
+LINK_MONO_ADDINS_SETUP_DEPS = $(MONO_ADDINS_SETUP_LIBS)
+LINK_MONO_ADDINS_GUI_DEPS = $(MONO_ADDINS_GUI_LIBS)
+
+# GIO
+REF_GIO =
+LINK_GIO = -r:$(DIR_GIOSHARP)/gio-sharp.dll
+LINK_GIO_DEPS = $(REF_GIO) $(LINK_GIO)
+
+# Gtk Beans
+REF_GTK_BEANS = $(LINK_GIO_DEPS)
+LINK_GTK_BEANS = -r:$(DIR_GTKSHARPBEANS)/gtk-sharp-beans.dll
+LINK_GTK_BEANS_DEPS = $(REF_GTK_BEANS) $(LINK_GTK_BEANS)
+
+# Uniqe
+REF_UNIQUE =
+LINK_UNIQUE = -r:$(DIR_UNIQUESHARP)/unique-sharp.dll
+LINK_UNIQUE_DEPS = $(REF_UNIQUE) $(LINK_UNIQUE)
+
+# Hyena
+REF_HYENA = $(LINK_SYSTEM) $(LINK_MONO_POSIX)
+LINK_HYENA = -r:$(DIR_BIN)/Hyena.dll
+LINK_HYENA_DEPS = $(REF_HYENA) $(LINK_HYENA)
+
+# Semweb
+REF_SEMWEB = $(LINK_SYSTEMDATA) $(LINK_HYENA_DEPS)
+LINK_SEMWEB = -r:$(DIR_BIN)/SemWeb.dll
+LINK_SEMWEB_DEPS = $(REF_SEMWEB) $(LINK_SEMWEB)
+
+# Hyena.Data.Sqlite
+REF_HYENA_DATA_SQLITE = $(LINK_SQLITE)
+LINK_HYENA_DATA_SQLITE = -r:$(DIR_BIN)/Hyena.Data.Sqlite.dll
+LINK_HYENA_DATA_SQLITE_DEPS = $(REF_HYENA_DATA_SQLITE) $(LINK_HYENA_DATA_SQLITE)
+
+# Hyena.Gui
+REF_HYENA_GUI = $(LINK_HYENA_DEPS)
+LINK_HYENA_GUI = -r:$(DIR_BIN)/Hyena.Gui.dll
+LINK_HENA_GUI_DEPS = $(REF_HYENA_GUI) $(LINK_HYENA_GUI)
+
+# FSpot.Cms
+REF_FSPOT_CMS = $(LINK_GTK)
+LINK_FSPOT_CMS = -r:$(DIR_BIN)/FSpot.Cms.dll
+LINK_FSPOT_CMS_DEPS = $(REF_FSPOT_CMS) $(LINK_FSPOT_CMS)
+
+# FSpot.Utils
+REF_FSPOT_UTILS = $(LINK_HYENA_DEPS) $(LINK_GTK) $(LINK_GIO) $(LINK_MONO_CAIRO)
+LINK_FSPOT_UTILS = -r:$(DIR_BIN)/FSpot.Utils.dll
+LINK_FSPOT_UTILS_DEPS = $(REF_FSPOT_UTILS) $(LINK_FSPOT_UTILS)
+
+# FSpot.Core
+REF_FSPOT_CORE = $(LINK_FSPOT_UTILS_DEPS) $(LINK_FSPOT_CMS_DEPS)
+LINK_FSPOT_CORE = -r:$(DIR_BIN)/FSpot.Core.dll
+LINK_FSPOT_CORE_DEPS = $(REF_FSPOT_CORE) $(LINK_FSPOT_CORE)
+
+# FSpot.Query
+REF_FSPOT_QUERY = $(LINK_FSPOT_CORE_DEPS)
+LINK_FSPOT_QUERY = -r:$(DIR_BIN)/FSpot.Query.dll
+LINK_FSPOT_QUERY_DEPS = $(REF_FSPOT_QUERY) $(LINK_FSPOT_QUERY)
+
+# FSpot.JobScheduler
+REF_FSPOT_JOB_SCHEDULER = $(LINK_HYENA_DEPS)
+LINK_FSPOT_JOB_SCHEDULER = -r:$(DIR_BIN)/FSpot.JobScheduler.dll
+LINK_FSPOT_JOB_SCHEDULER_DEPS = $(REF_FSPOT_JOB_SCHEDULER) $(LINK_FSPOT_JOB_SCHEDULER)
+
+# FSpot.Bling
+REF_FSPOT_BLING = $(LINK_GTK_BEANS_DEPS) $(LINK_GLIB)
+LINK_FSPOT_BLING = -r:$(DIR_BIN)/FSpot.Bling.dll
+LINK_FSPOT_BLING_DEPS = $(REF_FSPOT_BLING) $(LINK_FSPOT_BLING)
+
+# FSpot.Platform
+REF_FSPOT_PLATFORM = $(LINK_GCONF) $(LINK_GTK) $(LINK_FSPOT_CORE_DEPS) $(LINK_DBUS)
+LINK_FSPOT_PLATFORM = -r:$(DIR_BIN)/FSpot.Platform.dll
+LINK_FSPOT_PLATFORM_DEPS = $(REF_FSPOT_PLATFORM) $(LINK_FSPOT_PLATFORM)
+
+# FSpot.Widgets
+REF_FSPOT_WIDGETS = $(LINK_FSPOT_CORE_DEPS) $(LINK_FSPOT_BLING_DEPS)
+LINK_FSPOT_WIDGETS = -r:$(DIR_BIN)/FSpot.Widgets.dll
+LINK_FSPOT_WIDGETS_DEPS = $(REF_FSPOT_WIDGETS) $(LINK_FSPOT_WIDGETS)
+
+# FSpot (executable)
+REF_FSPOT = $(LINK_FSPOT_WIDGETS_DEPS) $(LINK_FSPOT_PLATFORM_DEPS) $(LINK_FSPOT_QUERY_DEPS) \
+ $(LINK_GLIB) $(LINK_MONO_ADDINS_DEPS) $(LINK_UNIQUE_DEPS) $(LINK_MONO_ADDINS_SETUP_DEPS) \
+ $(LINK_SEMWEB_DEPS) $(LINK_GLADE) $(LINK_MONODATA) $(LINK_MONO_DATA_SQLITECLIENT) \
+ $(LINK_MONO_ADDINS_GUI_DEPS) $(LINK_FSPOT_JOB_SCHEDULER_DEPS) $(LINK_ICSHARP_ZIP_LIB) \
+ $(LINK_GNOME)
+
+# FIXME: do not link executables
+LINK_FSPOT = -r:$(DIR_BIN)/f-spot.exe
+LINK_FSPOT_DEPS = $(REF_FSPOT) $(LINK_FSPOT)
+
+# Extensions
+REF_FSPOT_EXTENSION_BLACKOUTEDITOR = $(LINK_FSPOT_DEPS)
+REF_FSPOT_EXTENSION_BWEDITOR = $(LINK_FSPOT_DEPS) $(LINK_MONO_SIMD)
+REF_FSPOT_EXTENSION_FLIPEDITOR = $(LINK_FSPOT_DEPS)
+REF_FSPOT_EXTENSION_PIXELATEEDITOR = $(LINK_FSPOT_DEPS)
+REF_FSPOT_EXTENSION_RESIZEEDITOR = $(LINK_FSPOT_DEPS)
+REF_FSPOT_EXTENSION_CDEXPORT = $(LINK_FSPOT_DEPS)
+REF_FSPOT_EXTENSION_FACEBOOKEXPORT = $(LINK_FSPOT_DEPS) $(LINK_KEYRING)
+REF_FSPOT_EXTENSION_FLICKREXPORT = $(LINK_FSPOT_DEPS) $(LINK_FLICKRNET)
+REF_FSPOT_EXTENSION_FOLDEREXPORT = $(LINK_FSPOT_DEPS) $(LINK_SYSTEM_WEB)
+REF_FSPOT_EXTENSION_GALLERYEXPORT = $(LINK_FSPOT_DEPS)
+REF_MONO_GOOGLE = $(LINK_HYENA_DEPS)
+LINK_MONO_GOOGLE = -r:$(DIR_BIN)/Mono.Google.dll
+LINK_MONO_GOOGLE_DEPS = $(REF_MONO_GOOGLE) $(LINK_MONO_GOOGLE)
+REF_FSPOT_EXTENSION_PICASAWEBEXPORT = $(LINK_FSPOT_DEPS) $(LINK_MONO_GOOGLE) $(LINK_KEYRING)
+REF_SMUGMUGNET = $(LINK_FSPOT_DEPS)
+LINK_SMUGMUGNET = -r:$(DIR_BIN)/SmugMugNet.dll
+LINK_SMUGMUGNET_DEPS = $(REF_SMUGMUGNET) $(LINK_SMUGMUGNET)
+REF_FSPOT_EXTENSION_SMUGMUGEXPORT = $(LINK_SMUGMUGNET_DEPS) $(LINK_KEYRING)
+REF_MONO_TABBLO = $(LINK_HYENA_DEPS)
+LINK_MONO_TABBLO = -r:$(DIR_BIN)/Mono.Tabblo.dll
+LINK_MONO_TABBLO_DEPS = $(REF_MONO_TABBLO) $(LINK_MONO_TABBLO)
+REF_FSPOT_EXTENSION_TABBLOEXPORT = $(LINK_FSPOT_DEPS) $(LINK_KEYRING) $(LINK_MONO_TABBLO_DEPS)
+REF_FSPOT_EXTENSION_ZIPEXPORT = $(LINK_FSPOT_DEPS)
+REF_FSPOT_EXTENSION_CHANGEPHOTOPATH = $(LINK_FSPOT_DEPS)
+REF_FSPOT_EXTENSION_DEVELOPINUFRAW = $(LINK_FSPOT_DEPS)
+REF_FSPOT_EXTENSION_HASHJOB = $(LINK_FSPOT_DEPS)
+REF_FSPOT_EXTENSION_LIVEWEBGALLERY = $(LINK_FSPOT_DEPS)
+REF_FSPOT_EXTENSION_MERGEDB = $(LINK_FSPOT_DEPS)
+REF_FSPOT_EXTENSION_RAWPLUSJPEG = $(LINK_FSPOT_DEPS)
+REF_FSPOT_EXTENSION_RETROACTIVEROLL = $(LINK_FSPOT_DEPS)
+REF_FSPOT_EXTENSION_SCREENSAVERCONFIG = $(LINK_FSPOT_DEPS)
+REF_FSPOT_EXTENSION_COVERTRANSITION = $(LINK_FSPOT_DEPS)
+
+# Cute hack to replace a space with something
+colon := :
+empty :=
+space := $(empty) $(empty)
+
+# Build path to allow running uninstalled
+RUN_PATH = $(subst $(space),$(colon), $(MONO_BASE_PATH))
+UNIQUE_FILTER_PIPE = tr [:space:] \\n | sort | uniq
+BUILD_DATA_DIR = $(top_builddir)/bin/share/$(PACKAGE)
+
+# Since all other attempts failed, we currently go this way:
+# This code adds the file specified in ASSEMBLY_INFO_SOURCE to SOURCES_BUILD.
+# If no such file is specified, the default AssemblyInfo.cs is used.
+ASSEMBLY_INFO_SOURCE_REAL = \
+ $(shell if [ "$(ASSEMBLY_INFO_SOURCE)" ]; \
+ then \
+ echo "$(addprefix $(srcdir)/, $(ASSEMBLY_INFO_SOURCE))"; \
+ else \
+ echo "$(top_srcdir)/src/AssemblyInfo.cs"; \
+ fi)
+
+SOURCES_BUILD = $(addprefix $(srcdir)/, $(SOURCES)) \
+ $(ASSEMBLY_INFO_SOURCE_REAL)
+RESOURCES_EXPANDED = $(addprefix $(srcdir)/, $(RESOURCES))
+RESOURCES_BUILD = $(foreach resource, $(RESOURCES_EXPANDED), \
+ -resource:$(resource),$(notdir $(resource)))
+
+INSTALL_ICONS = $(top_srcdir)/build/private-icon-theme-installer "$(mkinstalldirs)" "$(INSTALL_DATA)"
+THEME_ICONS_SOURCE = $(wildcard $(srcdir)/ThemeIcons/*/*/*.png) $(wildcard $(srcdir)/ThemeIcons/scalable/*/*.svg)
+THEME_ICONS_RELATIVE = $(subst $(srcdir)/ThemeIcons/, , $(THEME_ICONS_SOURCE))
+ASSEMBLY_EXTENSION = $(strip $(patsubst library, dll, $(TARGET)))
+ASSEMBLY_FILE = $(top_builddir)/bin/$(ASSEMBLY).$(ASSEMBLY_EXTENSION)
+INSTALL_DIR_RESOLVED = $(firstword $(subst , $(DEFAULT_INSTALL_DIR), $(INSTALL_DIR)))
+ at ENABLE_TESTS_TRUE@ENABLE_TESTS_FLAG = "-define:ENABLE_TESTS"
+ at ENABLE_ATK_TRUE@ENABLE_ATK_FLAG = "-define:ENABLE_ATK"
+FILTERED_LINK = $(shell echo "$(LINK)" | $(UNIQUE_FILTER_PIPE))
+DEP_LINK = $(shell echo "$(LINK)" | $(UNIQUE_FILTER_PIPE) | sed s,-r:,,g | grep '$(top_builddir)/bin/')
+OUTPUT_FILES = \
+ $(ASSEMBLY_FILE) \
+ $(ASSEMBLY_FILE).mdb
+
+moduledir = $(INSTALL_DIR_RESOLVED)
+module_SCRIPTS = $(OUTPUT_FILES)
+EXTRA_DIST = $(SOURCES_BUILD) $(RESOURCES_EXPANDED) $(THEME_ICONS_SOURCE)
+CLEANFILES = $(OUTPUT_FILES) $(ASSEMBLY_FILE).config
+DISTCLEANFILES = *.pidb
+MAINTAINERCLEANFILES = Makefile.in
all: all-am
.SUFFIXES:
-$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(top_srcdir)/Makefile.addins $(top_srcdir)/Makefile.include $(am__configure_deps)
+$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(top_srcdir)/build/build.mk $(top_srcdir)/build/build.environment.mk $(top_srcdir)/build/build.rules.mk $(am__configure_deps)
@for dep in $?; do \
case '$(am__configure_deps)' in \
*$$dep*) \
@@ -390,32 +555,46 @@ $(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps)
$(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps)
cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
$(am__aclocal_m4_deps):
+install-moduleSCRIPTS: $(module_SCRIPTS)
+ @$(NORMAL_INSTALL)
+ test -z "$(moduledir)" || $(MKDIR_P) "$(DESTDIR)$(moduledir)"
+ @list='$(module_SCRIPTS)'; test -n "$(moduledir)" || list=; \
+ for p in $$list; do \
+ if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \
+ if test -f "$$d$$p"; then echo "$$d$$p"; echo "$$p"; else :; fi; \
+ done | \
+ sed -e 'p;s,.*/,,;n' \
+ -e 'h;s|.*|.|' \
+ -e 'p;x;s,.*/,,;$(transform)' | sed 'N;N;N;s,\n, ,g' | \
+ $(AWK) 'BEGIN { files["."] = ""; dirs["."] = 1; } \
+ { d=$$3; if (dirs[d] != 1) { print "d", d; dirs[d] = 1 } \
+ if ($$2 == $$4) { files[d] = files[d] " " $$1; \
+ if (++n[d] == $(am__install_max)) { \
+ print "f", d, files[d]; n[d] = 0; files[d] = "" } } \
+ else { print "f", d "/" $$4, $$1 } } \
+ END { for (d in files) print "f", d, files[d] }' | \
+ while read type dir files; do \
+ if test "$$dir" = .; then dir=; else dir=/$$dir; fi; \
+ test -z "$$files" || { \
+ echo " $(INSTALL_SCRIPT) $$files '$(DESTDIR)$(moduledir)$$dir'"; \
+ $(INSTALL_SCRIPT) $$files "$(DESTDIR)$(moduledir)$$dir" || exit $$?; \
+ } \
+ ; done
+
+uninstall-moduleSCRIPTS:
+ @$(NORMAL_UNINSTALL)
+ @list='$(module_SCRIPTS)'; test -n "$(moduledir)" || exit 0; \
+ files=`for p in $$list; do echo "$$p"; done | \
+ sed -e 's,.*/,,;$(transform)'`; \
+ test -n "$$list" || exit 0; \
+ echo " ( cd '$(DESTDIR)$(moduledir)' && rm -f" $$files ")"; \
+ cd "$(DESTDIR)$(moduledir)" && rm -f $$files
mostlyclean-libtool:
-rm -f *.lo
clean-libtool:
-rm -rf .libs _libs
-install-addinDATA: $(addin_DATA)
- @$(NORMAL_INSTALL)
- test -z "$(addindir)" || $(MKDIR_P) "$(DESTDIR)$(addindir)"
- @list='$(addin_DATA)'; test -n "$(addindir)" || list=; \
- for p in $$list; do \
- if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \
- echo "$$d$$p"; \
- done | $(am__base_list) | \
- while read files; do \
- echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(addindir)'"; \
- $(INSTALL_DATA) $$files "$(DESTDIR)$(addindir)" || exit $$?; \
- done
-
-uninstall-addinDATA:
- @$(NORMAL_UNINSTALL)
- @list='$(addin_DATA)'; test -n "$(addindir)" || list=; \
- files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \
- test -n "$$files" || exit 0; \
- echo " ( cd '$(DESTDIR)$(addindir)' && rm -f" $$files ")"; \
- cd "$(DESTDIR)$(addindir)" && rm -f $$files
tags: TAGS
TAGS:
@@ -455,9 +634,9 @@ distdir: $(DISTFILES)
done
check-am: all-am
check: check-am
-all-am: Makefile $(DATA)
+all-am: Makefile $(SCRIPTS)
installdirs:
- for dir in "$(DESTDIR)$(addindir)"; do \
+ for dir in "$(DESTDIR)$(moduledir)"; do \
test -z "$$dir" || $(MKDIR_P) "$$dir"; \
done
install: install-am
@@ -482,10 +661,12 @@ clean-generic:
distclean-generic:
-test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
-test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES)
+ -test -z "$(DISTCLEANFILES)" || rm -f $(DISTCLEANFILES)
maintainer-clean-generic:
@echo "This command is intended for maintainers to use"
@echo "it deletes files that may require special tools to rebuild."
+ -test -z "$(MAINTAINERCLEANFILES)" || rm -f $(MAINTAINERCLEANFILES)
clean: clean-am
clean-am: clean-generic clean-libtool mostlyclean-am
@@ -506,7 +687,7 @@ info: info-am
info-am:
-install-data-am: install-addinDATA
+install-data-am: install-data-local install-moduleSCRIPTS
install-dvi: install-dvi-am
@@ -550,28 +731,72 @@ ps: ps-am
ps-am:
-uninstall-am: uninstall-addinDATA
+uninstall-am: uninstall-local uninstall-moduleSCRIPTS
.MAKE: install-am install-strip
.PHONY: all all-am check check-am clean clean-generic clean-libtool \
distclean distclean-generic distclean-libtool distdir dvi \
- dvi-am html html-am info info-am install install-addinDATA \
- install-am install-data install-data-am install-dvi \
+ dvi-am html html-am info info-am install install-am \
+ install-data install-data-am install-data-local 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-generic mostlyclean-libtool pdf pdf-am ps ps-am \
- uninstall uninstall-addinDATA uninstall-am
-
-
-mpack: $(ASSEMBLY)
- mautil p $(ASSEMBLY)
-
-$(ASSEMBLY): $(addin_SOURCES) $(dep_resources)
- $(CSC_LIB) -out:$@ $(addin_extraflags) $(build_sources) $(build_references) $(build_packages) $(build_resources)
+ install-moduleSCRIPTS install-pdf install-pdf-am install-ps \
+ install-ps-am install-strip installcheck installcheck-am \
+ installdirs maintainer-clean maintainer-clean-generic \
+ mostlyclean mostlyclean-generic mostlyclean-libtool pdf pdf-am \
+ ps ps-am uninstall uninstall-am uninstall-local \
+ uninstall-moduleSCRIPTS
+
+
+all: $(ASSEMBLY_FILE) theme-icons
+
+run:
+ @pushd $(top_builddir); \
+ make run; \
+ popd;
+
+# uncommented for now.
+# tests are currently excuted from Makefile in $(top_builddir)
+#test:
+# @pushd $(top_builddir)/tests; \
+# make $(ASSEMBLY); \
+# popd;
+
+build-debug:
+ @echo $(DEP_LINK)
+
+$(ASSEMBLY_FILE).mdb: $(ASSEMBLY_FILE)
+
+$(ASSEMBLY_FILE): $(SOURCES_BUILD) $(RESOURCES_EXPANDED) $(DEP_LINK)
+ @mkdir -p $(top_builddir)/bin
+ @if [ ! "x$(ENABLE_RELEASE)" = "xyes" ]; then \
+ $(top_srcdir)/build/dll-map-makefile-verifier $(srcdir)/Makefile.am $(srcdir)/$(notdir $@.config) && \
+ $(MONO) $(top_builddir)/build/dll-map-verifier.exe $(srcdir)/$(notdir $@.config) -iwinmm -ilibbanshee -ilibbnpx11 -ilibc -ilibc.so.6 -iintl -ilibmtp.dll -ilibigemacintegration.dylib -iCFRelease $(SOURCES_BUILD); \
+ fi;
+ $(MCS) \
+ $(GMCS_FLAGS) \
+ $(ASSEMBLY_BUILD_FLAGS) \
+ -nowarn:0278 -nowarn:0078 $$warn \
+ -define:HAVE_GTK_2_10 -define:NET_2_0 \
+ -debug -target:$(TARGET) -out:$@ \
+ $(BUILD_DEFINES) $(ENABLE_TESTS_FLAG) $(ENABLE_ATK_FLAG) \
+ $(FILTERED_LINK) $(RESOURCES_BUILD) $(SOURCES_BUILD)
+ @if [ -e $(srcdir)/$(notdir $@.config) ]; then \
+ cp $(srcdir)/$(notdir $@.config) $(top_builddir)/bin; \
+ fi;
+ @if [ ! -z "$(EXTRA_BUNDLE)" ]; then \
+ cp $(EXTRA_BUNDLE) $(top_builddir)/bin; \
+ fi;
+
+theme-icons: $(THEME_ICONS_SOURCE)
+ @$(INSTALL_ICONS) -il "$(BUILD_DATA_DIR)" "$(srcdir)" $(THEME_ICONS_RELATIVE)
+
+install-data-local: $(THEME_ICONS_SOURCE)
+ @$(INSTALL_ICONS) -i "$(DESTDIR)$(pkgdatadir)" "$(srcdir)" $(THEME_ICONS_RELATIVE)
+
+uninstall-local: $(THEME_ICONS_SOURCE)
+ @$(INSTALL_ICONS) -u "$(DESTDIR)$(pkgdatadir)" "$(srcdir)" $(THEME_ICONS_RELATIVE)
# 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/extensions/Editors/ResizeEditor/Makefile.am b/extensions/Editors/ResizeEditor/Makefile.am
index cb77879..77785a9 100644
--- a/extensions/Editors/ResizeEditor/Makefile.am
+++ b/extensions/Editors/ResizeEditor/Makefile.am
@@ -1,20 +1,10 @@
-addin = ResizeEditor
+ASSEMBLY = FSpot.Editors.ResizeEditor
+TARGET = library
+LINK = $(REF_FSPOT_EXTENSION_RESIZEEDITOR)
+INSTALL_DIR = $(EXTENSIONS_INSTALL_DIR)
-addin_manifest = $(addin).addin.xml
+SOURCES = ResizeEditor.cs
-addin_sources = \
- $(addin).cs
+RESOURCES = ResizeEditor.addin.xml
-addin_resources = \
- $(addin_manifest)
-
-addin_references = \
- Mono.Posix
-
-addin_packages = \
- gtk-sharp-2.0
-
-addin_extraflags =
-addin_extradist =
-
-include $(top_srcdir)/Makefile.addins
+include $(top_srcdir)/build/build.mk
diff --git a/extensions/Editors/ResizeEditor/Makefile.in b/extensions/Editors/ResizeEditor/Makefile.in
index 4fb8c28..bf5b9a9 100644
--- a/extensions/Editors/ResizeEditor/Makefile.in
+++ b/extensions/Editors/ResizeEditor/Makefile.in
@@ -35,13 +35,22 @@ POST_UNINSTALL = :
build_triplet = @build@
host_triplet = @host@
DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in \
- $(top_srcdir)/Makefile.addins $(top_srcdir)/Makefile.include
+ $(top_srcdir)/build/build.environment.mk \
+ $(top_srcdir)/build/build.mk \
+ $(top_srcdir)/build/build.rules.mk
+ at ENABLE_TESTS_TRUE@am__append_1 = " $(NUNIT_LIBS)"
subdir = extensions/Editors/ResizeEditor
ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
am__aclocal_m4_deps = $(top_srcdir)/build/m4/shave/shave.m4 \
$(top_srcdir)/build/m4/shamrock/expansions.m4 \
+ $(top_srcdir)/build/m4/shamrock/gnome-doc.m4 \
$(top_srcdir)/build/m4/shamrock/mono.m4 \
+ $(top_srcdir)/build/m4/shamrock/nunit.m4 \
$(top_srcdir)/build/m4/shamrock/programs.m4 \
+ $(top_srcdir)/build/m4/f-spot/flickrnet.m4 \
+ $(top_srcdir)/build/m4/f-spot/gnome-keyring-sharp.m4 \
+ $(top_srcdir)/build/m4/f-spot/gtk-sharp.m4 \
+ $(top_srcdir)/build/m4/f-spot/mono-addins.m4 \
$(top_srcdir)/acinclude.m4 $(top_srcdir)/configure.ac
am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
$(ACLOCAL_M4)
@@ -49,8 +58,6 @@ mkinstalldirs = $(install_sh) -d
CONFIG_HEADER = $(top_builddir)/config.h
CONFIG_CLEAN_FILES =
CONFIG_CLEAN_VPATH_FILES =
-SOURCES =
-DIST_SOURCES =
am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`;
am__vpath_adj = case $$p in \
$(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \
@@ -72,8 +79,9 @@ am__nobase_list = $(am__nobase_strip_setup); \
am__base_list = \
sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \
sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g'
-am__installdirs = "$(DESTDIR)$(addindir)"
-DATA = $(addin_DATA)
+am__installdirs = "$(DESTDIR)$(moduledir)"
+SCRIPTS = $(module_SCRIPTS)
+DIST_SOURCES =
DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
ACLOCAL = @ACLOCAL@
ACLOCAL_AMFLAGS = @ACLOCAL_AMFLAGS@
@@ -119,6 +127,8 @@ EXIF_SOVERSION = @EXIF_SOVERSION@
F77 = @F77@
FC = @FC@
FGREP = @FGREP@
+FLICKRNET_CFLAGS = @FLICKRNET_CFLAGS@
+FLICKRNET_LIBS = @FLICKRNET_LIBS@
F_CFLAGS = @F_CFLAGS@
F_LIBS = @F_LIBS@
GAPI2CODEGEN = @GAPI2CODEGEN@
@@ -132,6 +142,8 @@ GCONF_SHARP_LIBS = @GCONF_SHARP_LIBS@
GETTEXT_PACKAGE = @GETTEXT_PACKAGE@
GIO_CFLAGS = @GIO_CFLAGS@
GIO_LIBS = @GIO_LIBS@
+GLIBSHARP_2_12_7_CFLAGS = @GLIBSHARP_2_12_7_CFLAGS@
+GLIBSHARP_2_12_7_LIBS = @GLIBSHARP_2_12_7_LIBS@
GLIBSHARP_CFLAGS = @GLIBSHARP_CFLAGS@
GLIBSHARP_LIBS = @GLIBSHARP_LIBS@
GLIB_CFLAGS = @GLIB_CFLAGS@
@@ -147,6 +159,10 @@ GNOME_SHARP_CFLAGS = @GNOME_SHARP_CFLAGS@
GNOME_SHARP_LIBS = @GNOME_SHARP_LIBS@
GOBJECT_QUERY = @GOBJECT_QUERY@
GREP = @GREP@
+GTKSHARP_A11Y_CFLAGS = @GTKSHARP_A11Y_CFLAGS@
+GTKSHARP_A11Y_LIBS = @GTKSHARP_A11Y_LIBS@
+GTKSHARP_CFLAGS = @GTKSHARP_CFLAGS@
+GTKSHARP_LIBS = @GTKSHARP_LIBS@
HELP_DIR = @HELP_DIR@
ICONS_DIRECTORY = @ICONS_DIRECTORY@
INSTALL = @INSTALL@
@@ -160,14 +176,14 @@ INTLTOOL_EXTRACT = @INTLTOOL_EXTRACT@
INTLTOOL_MERGE = @INTLTOOL_MERGE@
INTLTOOL_PERL = @INTLTOOL_PERL@
INTLTOOL_UPDATE = @INTLTOOL_UPDATE@
+KEYRINGSHARP_CFLAGS = @KEYRINGSHARP_CFLAGS@
+KEYRINGSHARP_LIBS = @KEYRINGSHARP_LIBS@
LCMS_CFLAGS = @LCMS_CFLAGS@
LCMS_LIBS = @LCMS_LIBS@
LD = @LD@
LDFLAGS = @LDFLAGS@
LIBEXIF_VERSION_CHECK_CFLAGS = @LIBEXIF_VERSION_CHECK_CFLAGS@
LIBEXIF_VERSION_CHECK_LIBS = @LIBEXIF_VERSION_CHECK_LIBS@
-LIBGPHOTO2_CFLAGS = @LIBGPHOTO2_CFLAGS@
-LIBGPHOTO2_LIBS = @LIBGPHOTO2_LIBS@
LIBJPEG = @LIBJPEG@
LIBOBJS = @LIBOBJS@
LIBS = @LIBS@
@@ -182,6 +198,12 @@ MCS = @MCS@
MKDIR_P = @MKDIR_P@
MKINSTALLDIRS = @MKINSTALLDIRS@
MONO = @MONO@
+MONO_ADDINS_CFLAGS = @MONO_ADDINS_CFLAGS@
+MONO_ADDINS_GUI_CFLAGS = @MONO_ADDINS_GUI_CFLAGS@
+MONO_ADDINS_GUI_LIBS = @MONO_ADDINS_GUI_LIBS@
+MONO_ADDINS_LIBS = @MONO_ADDINS_LIBS@
+MONO_ADDINS_SETUP_CFLAGS = @MONO_ADDINS_SETUP_CFLAGS@
+MONO_ADDINS_SETUP_LIBS = @MONO_ADDINS_SETUP_LIBS@
MONO_MODULE_CFLAGS = @MONO_MODULE_CFLAGS@
MONO_MODULE_LIBS = @MONO_MODULE_LIBS@
MSGFMT = @MSGFMT@
@@ -192,7 +214,6 @@ NDESK_DBUS_LIBS = @NDESK_DBUS_LIBS@
NM = @NM@
NMEDIT = @NMEDIT@
NUNIT_CFLAGS = @NUNIT_CFLAGS@
-NUNIT_DEFINES = @NUNIT_DEFINES@
NUNIT_LIBS = @NUNIT_LIBS@
OBJC = @OBJC@
OBJDUMP = @OBJDUMP@
@@ -284,83 +305,227 @@ target_alias = @target_alias@
top_build_prefix = @top_build_prefix@
top_builddir = @top_builddir@
top_srcdir = @top_srcdir@
-addin = ResizeEditor
-addin_manifest = $(addin).addin.xml
-addin_sources = \
- $(addin).cs
-
-addin_resources = \
- $(addin_manifest)
-
-addin_references = \
- Mono.Posix
-
-addin_packages = \
- gtk-sharp-2.0
-
-addin_extraflags =
-addin_extradist =
-ASSEMBLY = $(addin).dll
+ASSEMBLY = FSpot.Editors.ResizeEditor
+TARGET = library
+LINK = $(REF_FSPOT_EXTENSION_RESIZEEDITOR) $(am__append_1)
+INSTALL_DIR = $(EXTENSIONS_INSTALL_DIR)
+SOURCES = ResizeEditor.cs
+RESOURCES = ResizeEditor.addin.xml
+
+# Initializers
+MONO_BASE_PATH =
+MONO_ADDINS_PATH =
+
+# Install Paths
+DEFAULT_INSTALL_DIR = $(pkglibdir)
+BACKENDS_INSTALL_DIR = $(DEFAULT_INSTALL_DIR)/Backends
+EXTENSIONS_INSTALL_DIR = $(DEFAULT_INSTALL_DIR)/Extensions
DIR_DOCS = $(top_builddir)/docs
DIR_EXTENSIONS = $(top_builddir)/extensions
-DIR_GPHOTO2 = $(top_builddir)/lib/libgphoto2-sharp
DIR_ICONS = $(top_builddir)/icons
DIR_JPEGTRAN = $(top_builddir)/lib/libjpegtran
-DIR_KEYRING = $(top_builddir)/lib/gnome-keyring-sharp
DIR_LIBFSPOT = $(top_builddir)/lib/libfspot
DIR_SEMWEB = $(top_builddir)/lib/semweb
DIR_SRC = $(top_builddir)/src
DIR_GIOSHARP = $(top_builddir)/lib/gio-sharp/gio
DIR_GTKSHARPBEANS = $(top_builddir)/lib/gtk-sharp-beans
DIR_UNIQUESHARP = $(top_builddir)/lib/unique-sharp/unique
-LINK_KEYRING = -r:$(DIR_KEYRING)/gnome-keyring-sharp.dll
-LINK_GPHOTO2 = -r:$(DIR_GPHOTO2)/libgphoto2-sharp.dll
-LINK_SEMWEB = -r:$(DIR_SEMWEB)/SemWeb.dll
-LINK_GIOSHARP = -r:$(DIR_GIOSHARP)/gio-sharp.dll
-LINK_GTKSHARPBEANS = -r:$(DIR_GTKSHARPBEANS)/gtk-sharp-beans.dll
-LINK_UNIQUESHARP = -r:$(DIR_UNIQUESHARP)/unique-sharp.dll
-CSC_FLAGS = -debug
-CSC = $(MCS) $(CSC_FLAGS) -target:exe
-CSC_LIB = $(MCS) $(CSC_FLAGS) -target:library
-MONO_DEBUGFLAGS = --debug
-RUNTIME = mono $(MONO_DEBUGFLAGS)
-dep_resources = $(addprefix $(srcdir)/, $(addin_resources))
-build_resources = $(foreach res, $(dep_resources), $(addprefix -resource:, $(res)),$(notdir $(res)))
-build_sources = $(addprefix $(srcdir)/, $(addin_sources))
-build_packages = \
- $(addprefix -pkg:, $(addin_packages)) \
- -pkg:mono-addins
-
-build_references = \
- $(addprefix -r:, $(addin_references)) \
- -r:$(top_builddir)/src/f-spot.exe \
- -r:$(top_builddir)/src/Cms.dll \
- -r:$(top_builddir)/src/FSpot.Core.dll \
- -r:$(top_builddir)/src/FSpot.Platform.dll \
- -r:$(top_builddir)/src/FSpot.Query.dll \
- -r:$(top_builddir)/src/FSpot.Utils.dll \
- -r:$(top_builddir)/src/FSpot.Widgets.dll \
- $(LINK_SEMWEB) \
- $(LINK_GPHOTO2) \
- $(LINK_GIOSHARP) \
- $(LINK_UNIQUESHARP) \
- $(LINK_GTKSHARPBEANS)
-
-addin_SOURCES = \
- $(build_sources)
-
-addindir = $(pkglibdir)/extensions
-addin_DATA = $(ASSEMBLY)
-CLEANFILES = $(ASSEMBLY) $(ASSEMBLY).mdb *.mpack
-EXTRA_DIST = \
- $(build_sources) \
- $(dep_resources) \
- $(addin_extradist)
-
+DIR_BIN = $(top_builddir)/bin
+
+# External libraries to link against, generated from configure
+LINK_SYSTEM = -r:System
+LINK_SYSTEMDATA = -r:System.Data
+LINK_SYSTEM_WEB = -r:System.Web
+LINK_MONO_POSIX = -r:Mono.Posix
+LINK_MONO_CAIRO = -r:Mono.Cairo
+LINK_MONO_SIMD = -r:Mono.Simd
+LINK_MONODATA = -r:Mono.Data
+LINK_MONO_DATA_SQLITECLIENT = -r:Mono.Data.SqliteClient
+LINK_ICSHARP_ZIP_LIB = -r:ICSharpCode.SharpZipLib
+LINK_KEYRING = $(KEYRINGSHARP_LIBS)
+LINK_GLIB = $(GLIBSHARP_LIBS)
+LINK_GTK = $(GTKSHARP_LIBS)
+LINK_GNOME = $(GNOME_SHARP_LIBS)
+LINK_GCONF = $(GCONF_SHARP_LIBS)
+LINK_GLADE = -pkg:glade-sharp-2.0
+LINK_FLICKRNET = -pkg:flickrnet
+LINK_DBUS = $(NDESK_DBUS_LIBS) $(NDESK_DBUS_GLIB_LIBS)
+LINK_DBUS_NO_GLIB = $(NDESK_DBUS_LIBS)
+LINK_MONO_ADDINS_DEPS = $(MONO_ADDINS_LIBS)
+LINK_MONO_ADDINS_SETUP_DEPS = $(MONO_ADDINS_SETUP_LIBS)
+LINK_MONO_ADDINS_GUI_DEPS = $(MONO_ADDINS_GUI_LIBS)
+
+# GIO
+REF_GIO =
+LINK_GIO = -r:$(DIR_GIOSHARP)/gio-sharp.dll
+LINK_GIO_DEPS = $(REF_GIO) $(LINK_GIO)
+
+# Gtk Beans
+REF_GTK_BEANS = $(LINK_GIO_DEPS)
+LINK_GTK_BEANS = -r:$(DIR_GTKSHARPBEANS)/gtk-sharp-beans.dll
+LINK_GTK_BEANS_DEPS = $(REF_GTK_BEANS) $(LINK_GTK_BEANS)
+
+# Uniqe
+REF_UNIQUE =
+LINK_UNIQUE = -r:$(DIR_UNIQUESHARP)/unique-sharp.dll
+LINK_UNIQUE_DEPS = $(REF_UNIQUE) $(LINK_UNIQUE)
+
+# Hyena
+REF_HYENA = $(LINK_SYSTEM) $(LINK_MONO_POSIX)
+LINK_HYENA = -r:$(DIR_BIN)/Hyena.dll
+LINK_HYENA_DEPS = $(REF_HYENA) $(LINK_HYENA)
+
+# Semweb
+REF_SEMWEB = $(LINK_SYSTEMDATA) $(LINK_HYENA_DEPS)
+LINK_SEMWEB = -r:$(DIR_BIN)/SemWeb.dll
+LINK_SEMWEB_DEPS = $(REF_SEMWEB) $(LINK_SEMWEB)
+
+# Hyena.Data.Sqlite
+REF_HYENA_DATA_SQLITE = $(LINK_SQLITE)
+LINK_HYENA_DATA_SQLITE = -r:$(DIR_BIN)/Hyena.Data.Sqlite.dll
+LINK_HYENA_DATA_SQLITE_DEPS = $(REF_HYENA_DATA_SQLITE) $(LINK_HYENA_DATA_SQLITE)
+
+# Hyena.Gui
+REF_HYENA_GUI = $(LINK_HYENA_DEPS)
+LINK_HYENA_GUI = -r:$(DIR_BIN)/Hyena.Gui.dll
+LINK_HENA_GUI_DEPS = $(REF_HYENA_GUI) $(LINK_HYENA_GUI)
+
+# FSpot.Cms
+REF_FSPOT_CMS = $(LINK_GTK)
+LINK_FSPOT_CMS = -r:$(DIR_BIN)/FSpot.Cms.dll
+LINK_FSPOT_CMS_DEPS = $(REF_FSPOT_CMS) $(LINK_FSPOT_CMS)
+
+# FSpot.Utils
+REF_FSPOT_UTILS = $(LINK_HYENA_DEPS) $(LINK_GTK) $(LINK_GIO) $(LINK_MONO_CAIRO)
+LINK_FSPOT_UTILS = -r:$(DIR_BIN)/FSpot.Utils.dll
+LINK_FSPOT_UTILS_DEPS = $(REF_FSPOT_UTILS) $(LINK_FSPOT_UTILS)
+
+# FSpot.Core
+REF_FSPOT_CORE = $(LINK_FSPOT_UTILS_DEPS) $(LINK_FSPOT_CMS_DEPS)
+LINK_FSPOT_CORE = -r:$(DIR_BIN)/FSpot.Core.dll
+LINK_FSPOT_CORE_DEPS = $(REF_FSPOT_CORE) $(LINK_FSPOT_CORE)
+
+# FSpot.Query
+REF_FSPOT_QUERY = $(LINK_FSPOT_CORE_DEPS)
+LINK_FSPOT_QUERY = -r:$(DIR_BIN)/FSpot.Query.dll
+LINK_FSPOT_QUERY_DEPS = $(REF_FSPOT_QUERY) $(LINK_FSPOT_QUERY)
+
+# FSpot.JobScheduler
+REF_FSPOT_JOB_SCHEDULER = $(LINK_HYENA_DEPS)
+LINK_FSPOT_JOB_SCHEDULER = -r:$(DIR_BIN)/FSpot.JobScheduler.dll
+LINK_FSPOT_JOB_SCHEDULER_DEPS = $(REF_FSPOT_JOB_SCHEDULER) $(LINK_FSPOT_JOB_SCHEDULER)
+
+# FSpot.Bling
+REF_FSPOT_BLING = $(LINK_GTK_BEANS_DEPS) $(LINK_GLIB)
+LINK_FSPOT_BLING = -r:$(DIR_BIN)/FSpot.Bling.dll
+LINK_FSPOT_BLING_DEPS = $(REF_FSPOT_BLING) $(LINK_FSPOT_BLING)
+
+# FSpot.Platform
+REF_FSPOT_PLATFORM = $(LINK_GCONF) $(LINK_GTK) $(LINK_FSPOT_CORE_DEPS) $(LINK_DBUS)
+LINK_FSPOT_PLATFORM = -r:$(DIR_BIN)/FSpot.Platform.dll
+LINK_FSPOT_PLATFORM_DEPS = $(REF_FSPOT_PLATFORM) $(LINK_FSPOT_PLATFORM)
+
+# FSpot.Widgets
+REF_FSPOT_WIDGETS = $(LINK_FSPOT_CORE_DEPS) $(LINK_FSPOT_BLING_DEPS)
+LINK_FSPOT_WIDGETS = -r:$(DIR_BIN)/FSpot.Widgets.dll
+LINK_FSPOT_WIDGETS_DEPS = $(REF_FSPOT_WIDGETS) $(LINK_FSPOT_WIDGETS)
+
+# FSpot (executable)
+REF_FSPOT = $(LINK_FSPOT_WIDGETS_DEPS) $(LINK_FSPOT_PLATFORM_DEPS) $(LINK_FSPOT_QUERY_DEPS) \
+ $(LINK_GLIB) $(LINK_MONO_ADDINS_DEPS) $(LINK_UNIQUE_DEPS) $(LINK_MONO_ADDINS_SETUP_DEPS) \
+ $(LINK_SEMWEB_DEPS) $(LINK_GLADE) $(LINK_MONODATA) $(LINK_MONO_DATA_SQLITECLIENT) \
+ $(LINK_MONO_ADDINS_GUI_DEPS) $(LINK_FSPOT_JOB_SCHEDULER_DEPS) $(LINK_ICSHARP_ZIP_LIB) \
+ $(LINK_GNOME)
+
+# FIXME: do not link executables
+LINK_FSPOT = -r:$(DIR_BIN)/f-spot.exe
+LINK_FSPOT_DEPS = $(REF_FSPOT) $(LINK_FSPOT)
+
+# Extensions
+REF_FSPOT_EXTENSION_BLACKOUTEDITOR = $(LINK_FSPOT_DEPS)
+REF_FSPOT_EXTENSION_BWEDITOR = $(LINK_FSPOT_DEPS) $(LINK_MONO_SIMD)
+REF_FSPOT_EXTENSION_FLIPEDITOR = $(LINK_FSPOT_DEPS)
+REF_FSPOT_EXTENSION_PIXELATEEDITOR = $(LINK_FSPOT_DEPS)
+REF_FSPOT_EXTENSION_RESIZEEDITOR = $(LINK_FSPOT_DEPS)
+REF_FSPOT_EXTENSION_CDEXPORT = $(LINK_FSPOT_DEPS)
+REF_FSPOT_EXTENSION_FACEBOOKEXPORT = $(LINK_FSPOT_DEPS) $(LINK_KEYRING)
+REF_FSPOT_EXTENSION_FLICKREXPORT = $(LINK_FSPOT_DEPS) $(LINK_FLICKRNET)
+REF_FSPOT_EXTENSION_FOLDEREXPORT = $(LINK_FSPOT_DEPS) $(LINK_SYSTEM_WEB)
+REF_FSPOT_EXTENSION_GALLERYEXPORT = $(LINK_FSPOT_DEPS)
+REF_MONO_GOOGLE = $(LINK_HYENA_DEPS)
+LINK_MONO_GOOGLE = -r:$(DIR_BIN)/Mono.Google.dll
+LINK_MONO_GOOGLE_DEPS = $(REF_MONO_GOOGLE) $(LINK_MONO_GOOGLE)
+REF_FSPOT_EXTENSION_PICASAWEBEXPORT = $(LINK_FSPOT_DEPS) $(LINK_MONO_GOOGLE) $(LINK_KEYRING)
+REF_SMUGMUGNET = $(LINK_FSPOT_DEPS)
+LINK_SMUGMUGNET = -r:$(DIR_BIN)/SmugMugNet.dll
+LINK_SMUGMUGNET_DEPS = $(REF_SMUGMUGNET) $(LINK_SMUGMUGNET)
+REF_FSPOT_EXTENSION_SMUGMUGEXPORT = $(LINK_SMUGMUGNET_DEPS) $(LINK_KEYRING)
+REF_MONO_TABBLO = $(LINK_HYENA_DEPS)
+LINK_MONO_TABBLO = -r:$(DIR_BIN)/Mono.Tabblo.dll
+LINK_MONO_TABBLO_DEPS = $(REF_MONO_TABBLO) $(LINK_MONO_TABBLO)
+REF_FSPOT_EXTENSION_TABBLOEXPORT = $(LINK_FSPOT_DEPS) $(LINK_KEYRING) $(LINK_MONO_TABBLO_DEPS)
+REF_FSPOT_EXTENSION_ZIPEXPORT = $(LINK_FSPOT_DEPS)
+REF_FSPOT_EXTENSION_CHANGEPHOTOPATH = $(LINK_FSPOT_DEPS)
+REF_FSPOT_EXTENSION_DEVELOPINUFRAW = $(LINK_FSPOT_DEPS)
+REF_FSPOT_EXTENSION_HASHJOB = $(LINK_FSPOT_DEPS)
+REF_FSPOT_EXTENSION_LIVEWEBGALLERY = $(LINK_FSPOT_DEPS)
+REF_FSPOT_EXTENSION_MERGEDB = $(LINK_FSPOT_DEPS)
+REF_FSPOT_EXTENSION_RAWPLUSJPEG = $(LINK_FSPOT_DEPS)
+REF_FSPOT_EXTENSION_RETROACTIVEROLL = $(LINK_FSPOT_DEPS)
+REF_FSPOT_EXTENSION_SCREENSAVERCONFIG = $(LINK_FSPOT_DEPS)
+REF_FSPOT_EXTENSION_COVERTRANSITION = $(LINK_FSPOT_DEPS)
+
+# Cute hack to replace a space with something
+colon := :
+empty :=
+space := $(empty) $(empty)
+
+# Build path to allow running uninstalled
+RUN_PATH = $(subst $(space),$(colon), $(MONO_BASE_PATH))
+UNIQUE_FILTER_PIPE = tr [:space:] \\n | sort | uniq
+BUILD_DATA_DIR = $(top_builddir)/bin/share/$(PACKAGE)
+
+# Since all other attempts failed, we currently go this way:
+# This code adds the file specified in ASSEMBLY_INFO_SOURCE to SOURCES_BUILD.
+# If no such file is specified, the default AssemblyInfo.cs is used.
+ASSEMBLY_INFO_SOURCE_REAL = \
+ $(shell if [ "$(ASSEMBLY_INFO_SOURCE)" ]; \
+ then \
+ echo "$(addprefix $(srcdir)/, $(ASSEMBLY_INFO_SOURCE))"; \
+ else \
+ echo "$(top_srcdir)/src/AssemblyInfo.cs"; \
+ fi)
+
+SOURCES_BUILD = $(addprefix $(srcdir)/, $(SOURCES)) \
+ $(ASSEMBLY_INFO_SOURCE_REAL)
+RESOURCES_EXPANDED = $(addprefix $(srcdir)/, $(RESOURCES))
+RESOURCES_BUILD = $(foreach resource, $(RESOURCES_EXPANDED), \
+ -resource:$(resource),$(notdir $(resource)))
+
+INSTALL_ICONS = $(top_srcdir)/build/private-icon-theme-installer "$(mkinstalldirs)" "$(INSTALL_DATA)"
+THEME_ICONS_SOURCE = $(wildcard $(srcdir)/ThemeIcons/*/*/*.png) $(wildcard $(srcdir)/ThemeIcons/scalable/*/*.svg)
+THEME_ICONS_RELATIVE = $(subst $(srcdir)/ThemeIcons/, , $(THEME_ICONS_SOURCE))
+ASSEMBLY_EXTENSION = $(strip $(patsubst library, dll, $(TARGET)))
+ASSEMBLY_FILE = $(top_builddir)/bin/$(ASSEMBLY).$(ASSEMBLY_EXTENSION)
+INSTALL_DIR_RESOLVED = $(firstword $(subst , $(DEFAULT_INSTALL_DIR), $(INSTALL_DIR)))
+ at ENABLE_TESTS_TRUE@ENABLE_TESTS_FLAG = "-define:ENABLE_TESTS"
+ at ENABLE_ATK_TRUE@ENABLE_ATK_FLAG = "-define:ENABLE_ATK"
+FILTERED_LINK = $(shell echo "$(LINK)" | $(UNIQUE_FILTER_PIPE))
+DEP_LINK = $(shell echo "$(LINK)" | $(UNIQUE_FILTER_PIPE) | sed s,-r:,,g | grep '$(top_builddir)/bin/')
+OUTPUT_FILES = \
+ $(ASSEMBLY_FILE) \
+ $(ASSEMBLY_FILE).mdb
+
+moduledir = $(INSTALL_DIR_RESOLVED)
+module_SCRIPTS = $(OUTPUT_FILES)
+EXTRA_DIST = $(SOURCES_BUILD) $(RESOURCES_EXPANDED) $(THEME_ICONS_SOURCE)
+CLEANFILES = $(OUTPUT_FILES) $(ASSEMBLY_FILE).config
+DISTCLEANFILES = *.pidb
+MAINTAINERCLEANFILES = Makefile.in
all: all-am
.SUFFIXES:
-$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(top_srcdir)/Makefile.addins $(top_srcdir)/Makefile.include $(am__configure_deps)
+$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(top_srcdir)/build/build.mk $(top_srcdir)/build/build.environment.mk $(top_srcdir)/build/build.rules.mk $(am__configure_deps)
@for dep in $?; do \
case '$(am__configure_deps)' in \
*$$dep*) \
@@ -390,32 +555,46 @@ $(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps)
$(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps)
cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
$(am__aclocal_m4_deps):
+install-moduleSCRIPTS: $(module_SCRIPTS)
+ @$(NORMAL_INSTALL)
+ test -z "$(moduledir)" || $(MKDIR_P) "$(DESTDIR)$(moduledir)"
+ @list='$(module_SCRIPTS)'; test -n "$(moduledir)" || list=; \
+ for p in $$list; do \
+ if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \
+ if test -f "$$d$$p"; then echo "$$d$$p"; echo "$$p"; else :; fi; \
+ done | \
+ sed -e 'p;s,.*/,,;n' \
+ -e 'h;s|.*|.|' \
+ -e 'p;x;s,.*/,,;$(transform)' | sed 'N;N;N;s,\n, ,g' | \
+ $(AWK) 'BEGIN { files["."] = ""; dirs["."] = 1; } \
+ { d=$$3; if (dirs[d] != 1) { print "d", d; dirs[d] = 1 } \
+ if ($$2 == $$4) { files[d] = files[d] " " $$1; \
+ if (++n[d] == $(am__install_max)) { \
+ print "f", d, files[d]; n[d] = 0; files[d] = "" } } \
+ else { print "f", d "/" $$4, $$1 } } \
+ END { for (d in files) print "f", d, files[d] }' | \
+ while read type dir files; do \
+ if test "$$dir" = .; then dir=; else dir=/$$dir; fi; \
+ test -z "$$files" || { \
+ echo " $(INSTALL_SCRIPT) $$files '$(DESTDIR)$(moduledir)$$dir'"; \
+ $(INSTALL_SCRIPT) $$files "$(DESTDIR)$(moduledir)$$dir" || exit $$?; \
+ } \
+ ; done
+
+uninstall-moduleSCRIPTS:
+ @$(NORMAL_UNINSTALL)
+ @list='$(module_SCRIPTS)'; test -n "$(moduledir)" || exit 0; \
+ files=`for p in $$list; do echo "$$p"; done | \
+ sed -e 's,.*/,,;$(transform)'`; \
+ test -n "$$list" || exit 0; \
+ echo " ( cd '$(DESTDIR)$(moduledir)' && rm -f" $$files ")"; \
+ cd "$(DESTDIR)$(moduledir)" && rm -f $$files
mostlyclean-libtool:
-rm -f *.lo
clean-libtool:
-rm -rf .libs _libs
-install-addinDATA: $(addin_DATA)
- @$(NORMAL_INSTALL)
- test -z "$(addindir)" || $(MKDIR_P) "$(DESTDIR)$(addindir)"
- @list='$(addin_DATA)'; test -n "$(addindir)" || list=; \
- for p in $$list; do \
- if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \
- echo "$$d$$p"; \
- done | $(am__base_list) | \
- while read files; do \
- echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(addindir)'"; \
- $(INSTALL_DATA) $$files "$(DESTDIR)$(addindir)" || exit $$?; \
- done
-
-uninstall-addinDATA:
- @$(NORMAL_UNINSTALL)
- @list='$(addin_DATA)'; test -n "$(addindir)" || list=; \
- files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \
- test -n "$$files" || exit 0; \
- echo " ( cd '$(DESTDIR)$(addindir)' && rm -f" $$files ")"; \
- cd "$(DESTDIR)$(addindir)" && rm -f $$files
tags: TAGS
TAGS:
@@ -455,9 +634,9 @@ distdir: $(DISTFILES)
done
check-am: all-am
check: check-am
-all-am: Makefile $(DATA)
+all-am: Makefile $(SCRIPTS)
installdirs:
- for dir in "$(DESTDIR)$(addindir)"; do \
+ for dir in "$(DESTDIR)$(moduledir)"; do \
test -z "$$dir" || $(MKDIR_P) "$$dir"; \
done
install: install-am
@@ -482,10 +661,12 @@ clean-generic:
distclean-generic:
-test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
-test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES)
+ -test -z "$(DISTCLEANFILES)" || rm -f $(DISTCLEANFILES)
maintainer-clean-generic:
@echo "This command is intended for maintainers to use"
@echo "it deletes files that may require special tools to rebuild."
+ -test -z "$(MAINTAINERCLEANFILES)" || rm -f $(MAINTAINERCLEANFILES)
clean: clean-am
clean-am: clean-generic clean-libtool mostlyclean-am
@@ -506,7 +687,7 @@ info: info-am
info-am:
-install-data-am: install-addinDATA
+install-data-am: install-data-local install-moduleSCRIPTS
install-dvi: install-dvi-am
@@ -550,28 +731,72 @@ ps: ps-am
ps-am:
-uninstall-am: uninstall-addinDATA
+uninstall-am: uninstall-local uninstall-moduleSCRIPTS
.MAKE: install-am install-strip
.PHONY: all all-am check check-am clean clean-generic clean-libtool \
distclean distclean-generic distclean-libtool distdir dvi \
- dvi-am html html-am info info-am install install-addinDATA \
- install-am install-data install-data-am install-dvi \
+ dvi-am html html-am info info-am install install-am \
+ install-data install-data-am install-data-local 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-generic mostlyclean-libtool pdf pdf-am ps ps-am \
- uninstall uninstall-addinDATA uninstall-am
-
-
-mpack: $(ASSEMBLY)
- mautil p $(ASSEMBLY)
-
-$(ASSEMBLY): $(addin_SOURCES) $(dep_resources)
- $(CSC_LIB) -out:$@ $(addin_extraflags) $(build_sources) $(build_references) $(build_packages) $(build_resources)
+ install-moduleSCRIPTS install-pdf install-pdf-am install-ps \
+ install-ps-am install-strip installcheck installcheck-am \
+ installdirs maintainer-clean maintainer-clean-generic \
+ mostlyclean mostlyclean-generic mostlyclean-libtool pdf pdf-am \
+ ps ps-am uninstall uninstall-am uninstall-local \
+ uninstall-moduleSCRIPTS
+
+
+all: $(ASSEMBLY_FILE) theme-icons
+
+run:
+ @pushd $(top_builddir); \
+ make run; \
+ popd;
+
+# uncommented for now.
+# tests are currently excuted from Makefile in $(top_builddir)
+#test:
+# @pushd $(top_builddir)/tests; \
+# make $(ASSEMBLY); \
+# popd;
+
+build-debug:
+ @echo $(DEP_LINK)
+
+$(ASSEMBLY_FILE).mdb: $(ASSEMBLY_FILE)
+
+$(ASSEMBLY_FILE): $(SOURCES_BUILD) $(RESOURCES_EXPANDED) $(DEP_LINK)
+ @mkdir -p $(top_builddir)/bin
+ @if [ ! "x$(ENABLE_RELEASE)" = "xyes" ]; then \
+ $(top_srcdir)/build/dll-map-makefile-verifier $(srcdir)/Makefile.am $(srcdir)/$(notdir $@.config) && \
+ $(MONO) $(top_builddir)/build/dll-map-verifier.exe $(srcdir)/$(notdir $@.config) -iwinmm -ilibbanshee -ilibbnpx11 -ilibc -ilibc.so.6 -iintl -ilibmtp.dll -ilibigemacintegration.dylib -iCFRelease $(SOURCES_BUILD); \
+ fi;
+ $(MCS) \
+ $(GMCS_FLAGS) \
+ $(ASSEMBLY_BUILD_FLAGS) \
+ -nowarn:0278 -nowarn:0078 $$warn \
+ -define:HAVE_GTK_2_10 -define:NET_2_0 \
+ -debug -target:$(TARGET) -out:$@ \
+ $(BUILD_DEFINES) $(ENABLE_TESTS_FLAG) $(ENABLE_ATK_FLAG) \
+ $(FILTERED_LINK) $(RESOURCES_BUILD) $(SOURCES_BUILD)
+ @if [ -e $(srcdir)/$(notdir $@.config) ]; then \
+ cp $(srcdir)/$(notdir $@.config) $(top_builddir)/bin; \
+ fi;
+ @if [ ! -z "$(EXTRA_BUNDLE)" ]; then \
+ cp $(EXTRA_BUNDLE) $(top_builddir)/bin; \
+ fi;
+
+theme-icons: $(THEME_ICONS_SOURCE)
+ @$(INSTALL_ICONS) -il "$(BUILD_DATA_DIR)" "$(srcdir)" $(THEME_ICONS_RELATIVE)
+
+install-data-local: $(THEME_ICONS_SOURCE)
+ @$(INSTALL_ICONS) -i "$(DESTDIR)$(pkgdatadir)" "$(srcdir)" $(THEME_ICONS_RELATIVE)
+
+uninstall-local: $(THEME_ICONS_SOURCE)
+ @$(INSTALL_ICONS) -u "$(DESTDIR)$(pkgdatadir)" "$(srcdir)" $(THEME_ICONS_RELATIVE)
# 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/extensions/Editors/ResizeEditor/ResizeEditor.cs b/extensions/Editors/ResizeEditor/ResizeEditor.cs
index e49f0b3..deedaeb 100644
--- a/extensions/Editors/ResizeEditor/ResizeEditor.cs
+++ b/extensions/Editors/ResizeEditor/ResizeEditor.cs
@@ -33,7 +33,7 @@ namespace FSpot.Addins.Editors {
public override Widget ConfigurationWidget ()
{
int max;
- using (ImageFile img = ImageFile.Create (State.Items[0].DefaultVersionUri))
+ using (ImageFile img = ImageFile.Create (State.Items[0].DefaultVersion.Uri))
using (Pixbuf p = img.Load ())
max = Math.Max (p.Width, p.Height);
diff --git a/extensions/Exporters/CDExport/CDExport.cs b/extensions/Exporters/CDExport/CDExport.cs
index 2229dcc..a35c66f 100644
--- a/extensions/Exporters/CDExport/CDExport.cs
+++ b/extensions/Exporters/CDExport/CDExport.cs
@@ -20,7 +20,7 @@ using Mono.Unix;
using FSpot;
using FSpot.Filters;
using FSpot.Widgets;
-using FSpot.Utils;
+using Hyena;
using FSpot.UI.Dialog;
using GLib;
@@ -58,7 +58,7 @@ namespace FSpotCDExport {
System.IO.FileInfo file_info;
foreach (IBrowsableItem item in selection.Items) {
- path = item.DefaultVersionUri.LocalPath;
+ path = item.DefaultVersion.Uri.LocalPath;
if (System.IO.File.Exists (path)) {
file_info = new System.IO.FileInfo (path);
total_size += file_info.Length;
@@ -207,7 +207,7 @@ namespace FSpotCDExport {
foreach (IBrowsableItem photo in selection.Items) {
//FIXME need to implement the uniquename as a filter
- using (FilterRequest request = new FilterRequest (photo.DefaultVersionUri)) {
+ using (FilterRequest request = new FilterRequest (photo.DefaultVersion.Uri)) {
if (rotate)
new OrientationFilter ().Convert (request);
@@ -245,7 +245,7 @@ namespace FSpotCDExport {
}
} catch (System.Exception e) {
- FSpot.Utils.Log.DebugException (e);
+ Hyena.Log.DebugException (e);
progress_dialog.Message = e.ToString ();
progress_dialog.ProgressText = Catalog.GetString ("Error Transferring");
return;
diff --git a/extensions/Exporters/CDExport/Makefile.am b/extensions/Exporters/CDExport/Makefile.am
index 4e84085..7cf9120 100644
--- a/extensions/Exporters/CDExport/Makefile.am
+++ b/extensions/Exporters/CDExport/Makefile.am
@@ -1,21 +1,12 @@
-addin = CDExport
+ASSEMBLY = FSpot.Exporters.CDExport
+TARGET = library
+LINK = $(REF_FSPOT_EXTENSION_CDEXPORT)
+INSTALL_DIR = $(EXTENSIONS_INSTALL_DIR)
-addin_manifest = $(addin).addin.xml
+SOURCES = CDExport.cs
-addin_sources = \
- $(addin).cs
+RESOURCES = \
+ CDExport.addin.xml \
+ CDExport.ui
-addin_resources = \
- $(addin_manifest) \
- $(addin).ui
-
-addin_references = \
- Mono.Posix
-
-addin_packages = \
- gtk-sharp-2.0
-
-addin_extraflags =
-addin_extradist =
-
-include $(top_srcdir)/Makefile.addins
+include $(top_srcdir)/build/build.mk
diff --git a/extensions/Exporters/CDExport/Makefile.in b/extensions/Exporters/CDExport/Makefile.in
index e3bae10..acaae6f 100644
--- a/extensions/Exporters/CDExport/Makefile.in
+++ b/extensions/Exporters/CDExport/Makefile.in
@@ -35,13 +35,22 @@ POST_UNINSTALL = :
build_triplet = @build@
host_triplet = @host@
DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in \
- $(top_srcdir)/Makefile.addins $(top_srcdir)/Makefile.include
+ $(top_srcdir)/build/build.environment.mk \
+ $(top_srcdir)/build/build.mk \
+ $(top_srcdir)/build/build.rules.mk
+ at ENABLE_TESTS_TRUE@am__append_1 = " $(NUNIT_LIBS)"
subdir = extensions/Exporters/CDExport
ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
am__aclocal_m4_deps = $(top_srcdir)/build/m4/shave/shave.m4 \
$(top_srcdir)/build/m4/shamrock/expansions.m4 \
+ $(top_srcdir)/build/m4/shamrock/gnome-doc.m4 \
$(top_srcdir)/build/m4/shamrock/mono.m4 \
+ $(top_srcdir)/build/m4/shamrock/nunit.m4 \
$(top_srcdir)/build/m4/shamrock/programs.m4 \
+ $(top_srcdir)/build/m4/f-spot/flickrnet.m4 \
+ $(top_srcdir)/build/m4/f-spot/gnome-keyring-sharp.m4 \
+ $(top_srcdir)/build/m4/f-spot/gtk-sharp.m4 \
+ $(top_srcdir)/build/m4/f-spot/mono-addins.m4 \
$(top_srcdir)/acinclude.m4 $(top_srcdir)/configure.ac
am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
$(ACLOCAL_M4)
@@ -49,8 +58,6 @@ mkinstalldirs = $(install_sh) -d
CONFIG_HEADER = $(top_builddir)/config.h
CONFIG_CLEAN_FILES =
CONFIG_CLEAN_VPATH_FILES =
-SOURCES =
-DIST_SOURCES =
am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`;
am__vpath_adj = case $$p in \
$(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \
@@ -72,8 +79,9 @@ am__nobase_list = $(am__nobase_strip_setup); \
am__base_list = \
sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \
sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g'
-am__installdirs = "$(DESTDIR)$(addindir)"
-DATA = $(addin_DATA)
+am__installdirs = "$(DESTDIR)$(moduledir)"
+SCRIPTS = $(module_SCRIPTS)
+DIST_SOURCES =
DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
ACLOCAL = @ACLOCAL@
ACLOCAL_AMFLAGS = @ACLOCAL_AMFLAGS@
@@ -119,6 +127,8 @@ EXIF_SOVERSION = @EXIF_SOVERSION@
F77 = @F77@
FC = @FC@
FGREP = @FGREP@
+FLICKRNET_CFLAGS = @FLICKRNET_CFLAGS@
+FLICKRNET_LIBS = @FLICKRNET_LIBS@
F_CFLAGS = @F_CFLAGS@
F_LIBS = @F_LIBS@
GAPI2CODEGEN = @GAPI2CODEGEN@
@@ -132,6 +142,8 @@ GCONF_SHARP_LIBS = @GCONF_SHARP_LIBS@
GETTEXT_PACKAGE = @GETTEXT_PACKAGE@
GIO_CFLAGS = @GIO_CFLAGS@
GIO_LIBS = @GIO_LIBS@
+GLIBSHARP_2_12_7_CFLAGS = @GLIBSHARP_2_12_7_CFLAGS@
+GLIBSHARP_2_12_7_LIBS = @GLIBSHARP_2_12_7_LIBS@
GLIBSHARP_CFLAGS = @GLIBSHARP_CFLAGS@
GLIBSHARP_LIBS = @GLIBSHARP_LIBS@
GLIB_CFLAGS = @GLIB_CFLAGS@
@@ -147,6 +159,10 @@ GNOME_SHARP_CFLAGS = @GNOME_SHARP_CFLAGS@
GNOME_SHARP_LIBS = @GNOME_SHARP_LIBS@
GOBJECT_QUERY = @GOBJECT_QUERY@
GREP = @GREP@
+GTKSHARP_A11Y_CFLAGS = @GTKSHARP_A11Y_CFLAGS@
+GTKSHARP_A11Y_LIBS = @GTKSHARP_A11Y_LIBS@
+GTKSHARP_CFLAGS = @GTKSHARP_CFLAGS@
+GTKSHARP_LIBS = @GTKSHARP_LIBS@
HELP_DIR = @HELP_DIR@
ICONS_DIRECTORY = @ICONS_DIRECTORY@
INSTALL = @INSTALL@
@@ -160,14 +176,14 @@ INTLTOOL_EXTRACT = @INTLTOOL_EXTRACT@
INTLTOOL_MERGE = @INTLTOOL_MERGE@
INTLTOOL_PERL = @INTLTOOL_PERL@
INTLTOOL_UPDATE = @INTLTOOL_UPDATE@
+KEYRINGSHARP_CFLAGS = @KEYRINGSHARP_CFLAGS@
+KEYRINGSHARP_LIBS = @KEYRINGSHARP_LIBS@
LCMS_CFLAGS = @LCMS_CFLAGS@
LCMS_LIBS = @LCMS_LIBS@
LD = @LD@
LDFLAGS = @LDFLAGS@
LIBEXIF_VERSION_CHECK_CFLAGS = @LIBEXIF_VERSION_CHECK_CFLAGS@
LIBEXIF_VERSION_CHECK_LIBS = @LIBEXIF_VERSION_CHECK_LIBS@
-LIBGPHOTO2_CFLAGS = @LIBGPHOTO2_CFLAGS@
-LIBGPHOTO2_LIBS = @LIBGPHOTO2_LIBS@
LIBJPEG = @LIBJPEG@
LIBOBJS = @LIBOBJS@
LIBS = @LIBS@
@@ -182,6 +198,12 @@ MCS = @MCS@
MKDIR_P = @MKDIR_P@
MKINSTALLDIRS = @MKINSTALLDIRS@
MONO = @MONO@
+MONO_ADDINS_CFLAGS = @MONO_ADDINS_CFLAGS@
+MONO_ADDINS_GUI_CFLAGS = @MONO_ADDINS_GUI_CFLAGS@
+MONO_ADDINS_GUI_LIBS = @MONO_ADDINS_GUI_LIBS@
+MONO_ADDINS_LIBS = @MONO_ADDINS_LIBS@
+MONO_ADDINS_SETUP_CFLAGS = @MONO_ADDINS_SETUP_CFLAGS@
+MONO_ADDINS_SETUP_LIBS = @MONO_ADDINS_SETUP_LIBS@
MONO_MODULE_CFLAGS = @MONO_MODULE_CFLAGS@
MONO_MODULE_LIBS = @MONO_MODULE_LIBS@
MSGFMT = @MSGFMT@
@@ -192,7 +214,6 @@ NDESK_DBUS_LIBS = @NDESK_DBUS_LIBS@
NM = @NM@
NMEDIT = @NMEDIT@
NUNIT_CFLAGS = @NUNIT_CFLAGS@
-NUNIT_DEFINES = @NUNIT_DEFINES@
NUNIT_LIBS = @NUNIT_LIBS@
OBJC = @OBJC@
OBJDUMP = @OBJDUMP@
@@ -284,84 +305,230 @@ target_alias = @target_alias@
top_build_prefix = @top_build_prefix@
top_builddir = @top_builddir@
top_srcdir = @top_srcdir@
-addin = CDExport
-addin_manifest = $(addin).addin.xml
-addin_sources = \
- $(addin).cs
-
-addin_resources = \
- $(addin_manifest) \
- $(addin).ui
-
-addin_references = \
- Mono.Posix
-
-addin_packages = \
- gtk-sharp-2.0
-
-addin_extraflags =
-addin_extradist =
-ASSEMBLY = $(addin).dll
+ASSEMBLY = FSpot.Exporters.CDExport
+TARGET = library
+LINK = $(REF_FSPOT_EXTENSION_CDEXPORT) $(am__append_1)
+INSTALL_DIR = $(EXTENSIONS_INSTALL_DIR)
+SOURCES = CDExport.cs
+RESOURCES = \
+ CDExport.addin.xml \
+ CDExport.ui
+
+
+# Initializers
+MONO_BASE_PATH =
+MONO_ADDINS_PATH =
+
+# Install Paths
+DEFAULT_INSTALL_DIR = $(pkglibdir)
+BACKENDS_INSTALL_DIR = $(DEFAULT_INSTALL_DIR)/Backends
+EXTENSIONS_INSTALL_DIR = $(DEFAULT_INSTALL_DIR)/Extensions
DIR_DOCS = $(top_builddir)/docs
DIR_EXTENSIONS = $(top_builddir)/extensions
-DIR_GPHOTO2 = $(top_builddir)/lib/libgphoto2-sharp
DIR_ICONS = $(top_builddir)/icons
DIR_JPEGTRAN = $(top_builddir)/lib/libjpegtran
-DIR_KEYRING = $(top_builddir)/lib/gnome-keyring-sharp
DIR_LIBFSPOT = $(top_builddir)/lib/libfspot
DIR_SEMWEB = $(top_builddir)/lib/semweb
DIR_SRC = $(top_builddir)/src
DIR_GIOSHARP = $(top_builddir)/lib/gio-sharp/gio
DIR_GTKSHARPBEANS = $(top_builddir)/lib/gtk-sharp-beans
DIR_UNIQUESHARP = $(top_builddir)/lib/unique-sharp/unique
-LINK_KEYRING = -r:$(DIR_KEYRING)/gnome-keyring-sharp.dll
-LINK_GPHOTO2 = -r:$(DIR_GPHOTO2)/libgphoto2-sharp.dll
-LINK_SEMWEB = -r:$(DIR_SEMWEB)/SemWeb.dll
-LINK_GIOSHARP = -r:$(DIR_GIOSHARP)/gio-sharp.dll
-LINK_GTKSHARPBEANS = -r:$(DIR_GTKSHARPBEANS)/gtk-sharp-beans.dll
-LINK_UNIQUESHARP = -r:$(DIR_UNIQUESHARP)/unique-sharp.dll
-CSC_FLAGS = -debug
-CSC = $(MCS) $(CSC_FLAGS) -target:exe
-CSC_LIB = $(MCS) $(CSC_FLAGS) -target:library
-MONO_DEBUGFLAGS = --debug
-RUNTIME = mono $(MONO_DEBUGFLAGS)
-dep_resources = $(addprefix $(srcdir)/, $(addin_resources))
-build_resources = $(foreach res, $(dep_resources), $(addprefix -resource:, $(res)),$(notdir $(res)))
-build_sources = $(addprefix $(srcdir)/, $(addin_sources))
-build_packages = \
- $(addprefix -pkg:, $(addin_packages)) \
- -pkg:mono-addins
-
-build_references = \
- $(addprefix -r:, $(addin_references)) \
- -r:$(top_builddir)/src/f-spot.exe \
- -r:$(top_builddir)/src/Cms.dll \
- -r:$(top_builddir)/src/FSpot.Core.dll \
- -r:$(top_builddir)/src/FSpot.Platform.dll \
- -r:$(top_builddir)/src/FSpot.Query.dll \
- -r:$(top_builddir)/src/FSpot.Utils.dll \
- -r:$(top_builddir)/src/FSpot.Widgets.dll \
- $(LINK_SEMWEB) \
- $(LINK_GPHOTO2) \
- $(LINK_GIOSHARP) \
- $(LINK_UNIQUESHARP) \
- $(LINK_GTKSHARPBEANS)
-
-addin_SOURCES = \
- $(build_sources)
-
-addindir = $(pkglibdir)/extensions
-addin_DATA = $(ASSEMBLY)
-CLEANFILES = $(ASSEMBLY) $(ASSEMBLY).mdb *.mpack
-EXTRA_DIST = \
- $(build_sources) \
- $(dep_resources) \
- $(addin_extradist)
-
+DIR_BIN = $(top_builddir)/bin
+
+# External libraries to link against, generated from configure
+LINK_SYSTEM = -r:System
+LINK_SYSTEMDATA = -r:System.Data
+LINK_SYSTEM_WEB = -r:System.Web
+LINK_MONO_POSIX = -r:Mono.Posix
+LINK_MONO_CAIRO = -r:Mono.Cairo
+LINK_MONO_SIMD = -r:Mono.Simd
+LINK_MONODATA = -r:Mono.Data
+LINK_MONO_DATA_SQLITECLIENT = -r:Mono.Data.SqliteClient
+LINK_ICSHARP_ZIP_LIB = -r:ICSharpCode.SharpZipLib
+LINK_KEYRING = $(KEYRINGSHARP_LIBS)
+LINK_GLIB = $(GLIBSHARP_LIBS)
+LINK_GTK = $(GTKSHARP_LIBS)
+LINK_GNOME = $(GNOME_SHARP_LIBS)
+LINK_GCONF = $(GCONF_SHARP_LIBS)
+LINK_GLADE = -pkg:glade-sharp-2.0
+LINK_FLICKRNET = -pkg:flickrnet
+LINK_DBUS = $(NDESK_DBUS_LIBS) $(NDESK_DBUS_GLIB_LIBS)
+LINK_DBUS_NO_GLIB = $(NDESK_DBUS_LIBS)
+LINK_MONO_ADDINS_DEPS = $(MONO_ADDINS_LIBS)
+LINK_MONO_ADDINS_SETUP_DEPS = $(MONO_ADDINS_SETUP_LIBS)
+LINK_MONO_ADDINS_GUI_DEPS = $(MONO_ADDINS_GUI_LIBS)
+
+# GIO
+REF_GIO =
+LINK_GIO = -r:$(DIR_GIOSHARP)/gio-sharp.dll
+LINK_GIO_DEPS = $(REF_GIO) $(LINK_GIO)
+
+# Gtk Beans
+REF_GTK_BEANS = $(LINK_GIO_DEPS)
+LINK_GTK_BEANS = -r:$(DIR_GTKSHARPBEANS)/gtk-sharp-beans.dll
+LINK_GTK_BEANS_DEPS = $(REF_GTK_BEANS) $(LINK_GTK_BEANS)
+
+# Uniqe
+REF_UNIQUE =
+LINK_UNIQUE = -r:$(DIR_UNIQUESHARP)/unique-sharp.dll
+LINK_UNIQUE_DEPS = $(REF_UNIQUE) $(LINK_UNIQUE)
+
+# Hyena
+REF_HYENA = $(LINK_SYSTEM) $(LINK_MONO_POSIX)
+LINK_HYENA = -r:$(DIR_BIN)/Hyena.dll
+LINK_HYENA_DEPS = $(REF_HYENA) $(LINK_HYENA)
+
+# Semweb
+REF_SEMWEB = $(LINK_SYSTEMDATA) $(LINK_HYENA_DEPS)
+LINK_SEMWEB = -r:$(DIR_BIN)/SemWeb.dll
+LINK_SEMWEB_DEPS = $(REF_SEMWEB) $(LINK_SEMWEB)
+
+# Hyena.Data.Sqlite
+REF_HYENA_DATA_SQLITE = $(LINK_SQLITE)
+LINK_HYENA_DATA_SQLITE = -r:$(DIR_BIN)/Hyena.Data.Sqlite.dll
+LINK_HYENA_DATA_SQLITE_DEPS = $(REF_HYENA_DATA_SQLITE) $(LINK_HYENA_DATA_SQLITE)
+
+# Hyena.Gui
+REF_HYENA_GUI = $(LINK_HYENA_DEPS)
+LINK_HYENA_GUI = -r:$(DIR_BIN)/Hyena.Gui.dll
+LINK_HENA_GUI_DEPS = $(REF_HYENA_GUI) $(LINK_HYENA_GUI)
+
+# FSpot.Cms
+REF_FSPOT_CMS = $(LINK_GTK)
+LINK_FSPOT_CMS = -r:$(DIR_BIN)/FSpot.Cms.dll
+LINK_FSPOT_CMS_DEPS = $(REF_FSPOT_CMS) $(LINK_FSPOT_CMS)
+
+# FSpot.Utils
+REF_FSPOT_UTILS = $(LINK_HYENA_DEPS) $(LINK_GTK) $(LINK_GIO) $(LINK_MONO_CAIRO)
+LINK_FSPOT_UTILS = -r:$(DIR_BIN)/FSpot.Utils.dll
+LINK_FSPOT_UTILS_DEPS = $(REF_FSPOT_UTILS) $(LINK_FSPOT_UTILS)
+
+# FSpot.Core
+REF_FSPOT_CORE = $(LINK_FSPOT_UTILS_DEPS) $(LINK_FSPOT_CMS_DEPS)
+LINK_FSPOT_CORE = -r:$(DIR_BIN)/FSpot.Core.dll
+LINK_FSPOT_CORE_DEPS = $(REF_FSPOT_CORE) $(LINK_FSPOT_CORE)
+
+# FSpot.Query
+REF_FSPOT_QUERY = $(LINK_FSPOT_CORE_DEPS)
+LINK_FSPOT_QUERY = -r:$(DIR_BIN)/FSpot.Query.dll
+LINK_FSPOT_QUERY_DEPS = $(REF_FSPOT_QUERY) $(LINK_FSPOT_QUERY)
+
+# FSpot.JobScheduler
+REF_FSPOT_JOB_SCHEDULER = $(LINK_HYENA_DEPS)
+LINK_FSPOT_JOB_SCHEDULER = -r:$(DIR_BIN)/FSpot.JobScheduler.dll
+LINK_FSPOT_JOB_SCHEDULER_DEPS = $(REF_FSPOT_JOB_SCHEDULER) $(LINK_FSPOT_JOB_SCHEDULER)
+
+# FSpot.Bling
+REF_FSPOT_BLING = $(LINK_GTK_BEANS_DEPS) $(LINK_GLIB)
+LINK_FSPOT_BLING = -r:$(DIR_BIN)/FSpot.Bling.dll
+LINK_FSPOT_BLING_DEPS = $(REF_FSPOT_BLING) $(LINK_FSPOT_BLING)
+
+# FSpot.Platform
+REF_FSPOT_PLATFORM = $(LINK_GCONF) $(LINK_GTK) $(LINK_FSPOT_CORE_DEPS) $(LINK_DBUS)
+LINK_FSPOT_PLATFORM = -r:$(DIR_BIN)/FSpot.Platform.dll
+LINK_FSPOT_PLATFORM_DEPS = $(REF_FSPOT_PLATFORM) $(LINK_FSPOT_PLATFORM)
+
+# FSpot.Widgets
+REF_FSPOT_WIDGETS = $(LINK_FSPOT_CORE_DEPS) $(LINK_FSPOT_BLING_DEPS)
+LINK_FSPOT_WIDGETS = -r:$(DIR_BIN)/FSpot.Widgets.dll
+LINK_FSPOT_WIDGETS_DEPS = $(REF_FSPOT_WIDGETS) $(LINK_FSPOT_WIDGETS)
+
+# FSpot (executable)
+REF_FSPOT = $(LINK_FSPOT_WIDGETS_DEPS) $(LINK_FSPOT_PLATFORM_DEPS) $(LINK_FSPOT_QUERY_DEPS) \
+ $(LINK_GLIB) $(LINK_MONO_ADDINS_DEPS) $(LINK_UNIQUE_DEPS) $(LINK_MONO_ADDINS_SETUP_DEPS) \
+ $(LINK_SEMWEB_DEPS) $(LINK_GLADE) $(LINK_MONODATA) $(LINK_MONO_DATA_SQLITECLIENT) \
+ $(LINK_MONO_ADDINS_GUI_DEPS) $(LINK_FSPOT_JOB_SCHEDULER_DEPS) $(LINK_ICSHARP_ZIP_LIB) \
+ $(LINK_GNOME)
+
+# FIXME: do not link executables
+LINK_FSPOT = -r:$(DIR_BIN)/f-spot.exe
+LINK_FSPOT_DEPS = $(REF_FSPOT) $(LINK_FSPOT)
+
+# Extensions
+REF_FSPOT_EXTENSION_BLACKOUTEDITOR = $(LINK_FSPOT_DEPS)
+REF_FSPOT_EXTENSION_BWEDITOR = $(LINK_FSPOT_DEPS) $(LINK_MONO_SIMD)
+REF_FSPOT_EXTENSION_FLIPEDITOR = $(LINK_FSPOT_DEPS)
+REF_FSPOT_EXTENSION_PIXELATEEDITOR = $(LINK_FSPOT_DEPS)
+REF_FSPOT_EXTENSION_RESIZEEDITOR = $(LINK_FSPOT_DEPS)
+REF_FSPOT_EXTENSION_CDEXPORT = $(LINK_FSPOT_DEPS)
+REF_FSPOT_EXTENSION_FACEBOOKEXPORT = $(LINK_FSPOT_DEPS) $(LINK_KEYRING)
+REF_FSPOT_EXTENSION_FLICKREXPORT = $(LINK_FSPOT_DEPS) $(LINK_FLICKRNET)
+REF_FSPOT_EXTENSION_FOLDEREXPORT = $(LINK_FSPOT_DEPS) $(LINK_SYSTEM_WEB)
+REF_FSPOT_EXTENSION_GALLERYEXPORT = $(LINK_FSPOT_DEPS)
+REF_MONO_GOOGLE = $(LINK_HYENA_DEPS)
+LINK_MONO_GOOGLE = -r:$(DIR_BIN)/Mono.Google.dll
+LINK_MONO_GOOGLE_DEPS = $(REF_MONO_GOOGLE) $(LINK_MONO_GOOGLE)
+REF_FSPOT_EXTENSION_PICASAWEBEXPORT = $(LINK_FSPOT_DEPS) $(LINK_MONO_GOOGLE) $(LINK_KEYRING)
+REF_SMUGMUGNET = $(LINK_FSPOT_DEPS)
+LINK_SMUGMUGNET = -r:$(DIR_BIN)/SmugMugNet.dll
+LINK_SMUGMUGNET_DEPS = $(REF_SMUGMUGNET) $(LINK_SMUGMUGNET)
+REF_FSPOT_EXTENSION_SMUGMUGEXPORT = $(LINK_SMUGMUGNET_DEPS) $(LINK_KEYRING)
+REF_MONO_TABBLO = $(LINK_HYENA_DEPS)
+LINK_MONO_TABBLO = -r:$(DIR_BIN)/Mono.Tabblo.dll
+LINK_MONO_TABBLO_DEPS = $(REF_MONO_TABBLO) $(LINK_MONO_TABBLO)
+REF_FSPOT_EXTENSION_TABBLOEXPORT = $(LINK_FSPOT_DEPS) $(LINK_KEYRING) $(LINK_MONO_TABBLO_DEPS)
+REF_FSPOT_EXTENSION_ZIPEXPORT = $(LINK_FSPOT_DEPS)
+REF_FSPOT_EXTENSION_CHANGEPHOTOPATH = $(LINK_FSPOT_DEPS)
+REF_FSPOT_EXTENSION_DEVELOPINUFRAW = $(LINK_FSPOT_DEPS)
+REF_FSPOT_EXTENSION_HASHJOB = $(LINK_FSPOT_DEPS)
+REF_FSPOT_EXTENSION_LIVEWEBGALLERY = $(LINK_FSPOT_DEPS)
+REF_FSPOT_EXTENSION_MERGEDB = $(LINK_FSPOT_DEPS)
+REF_FSPOT_EXTENSION_RAWPLUSJPEG = $(LINK_FSPOT_DEPS)
+REF_FSPOT_EXTENSION_RETROACTIVEROLL = $(LINK_FSPOT_DEPS)
+REF_FSPOT_EXTENSION_SCREENSAVERCONFIG = $(LINK_FSPOT_DEPS)
+REF_FSPOT_EXTENSION_COVERTRANSITION = $(LINK_FSPOT_DEPS)
+
+# Cute hack to replace a space with something
+colon := :
+empty :=
+space := $(empty) $(empty)
+
+# Build path to allow running uninstalled
+RUN_PATH = $(subst $(space),$(colon), $(MONO_BASE_PATH))
+UNIQUE_FILTER_PIPE = tr [:space:] \\n | sort | uniq
+BUILD_DATA_DIR = $(top_builddir)/bin/share/$(PACKAGE)
+
+# Since all other attempts failed, we currently go this way:
+# This code adds the file specified in ASSEMBLY_INFO_SOURCE to SOURCES_BUILD.
+# If no such file is specified, the default AssemblyInfo.cs is used.
+ASSEMBLY_INFO_SOURCE_REAL = \
+ $(shell if [ "$(ASSEMBLY_INFO_SOURCE)" ]; \
+ then \
+ echo "$(addprefix $(srcdir)/, $(ASSEMBLY_INFO_SOURCE))"; \
+ else \
+ echo "$(top_srcdir)/src/AssemblyInfo.cs"; \
+ fi)
+
+SOURCES_BUILD = $(addprefix $(srcdir)/, $(SOURCES)) \
+ $(ASSEMBLY_INFO_SOURCE_REAL)
+RESOURCES_EXPANDED = $(addprefix $(srcdir)/, $(RESOURCES))
+RESOURCES_BUILD = $(foreach resource, $(RESOURCES_EXPANDED), \
+ -resource:$(resource),$(notdir $(resource)))
+
+INSTALL_ICONS = $(top_srcdir)/build/private-icon-theme-installer "$(mkinstalldirs)" "$(INSTALL_DATA)"
+THEME_ICONS_SOURCE = $(wildcard $(srcdir)/ThemeIcons/*/*/*.png) $(wildcard $(srcdir)/ThemeIcons/scalable/*/*.svg)
+THEME_ICONS_RELATIVE = $(subst $(srcdir)/ThemeIcons/, , $(THEME_ICONS_SOURCE))
+ASSEMBLY_EXTENSION = $(strip $(patsubst library, dll, $(TARGET)))
+ASSEMBLY_FILE = $(top_builddir)/bin/$(ASSEMBLY).$(ASSEMBLY_EXTENSION)
+INSTALL_DIR_RESOLVED = $(firstword $(subst , $(DEFAULT_INSTALL_DIR), $(INSTALL_DIR)))
+ at ENABLE_TESTS_TRUE@ENABLE_TESTS_FLAG = "-define:ENABLE_TESTS"
+ at ENABLE_ATK_TRUE@ENABLE_ATK_FLAG = "-define:ENABLE_ATK"
+FILTERED_LINK = $(shell echo "$(LINK)" | $(UNIQUE_FILTER_PIPE))
+DEP_LINK = $(shell echo "$(LINK)" | $(UNIQUE_FILTER_PIPE) | sed s,-r:,,g | grep '$(top_builddir)/bin/')
+OUTPUT_FILES = \
+ $(ASSEMBLY_FILE) \
+ $(ASSEMBLY_FILE).mdb
+
+moduledir = $(INSTALL_DIR_RESOLVED)
+module_SCRIPTS = $(OUTPUT_FILES)
+EXTRA_DIST = $(SOURCES_BUILD) $(RESOURCES_EXPANDED) $(THEME_ICONS_SOURCE)
+CLEANFILES = $(OUTPUT_FILES) $(ASSEMBLY_FILE).config
+DISTCLEANFILES = *.pidb
+MAINTAINERCLEANFILES = Makefile.in
all: all-am
.SUFFIXES:
-$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(top_srcdir)/Makefile.addins $(top_srcdir)/Makefile.include $(am__configure_deps)
+$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(top_srcdir)/build/build.mk $(top_srcdir)/build/build.environment.mk $(top_srcdir)/build/build.rules.mk $(am__configure_deps)
@for dep in $?; do \
case '$(am__configure_deps)' in \
*$$dep*) \
@@ -391,32 +558,46 @@ $(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps)
$(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps)
cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
$(am__aclocal_m4_deps):
+install-moduleSCRIPTS: $(module_SCRIPTS)
+ @$(NORMAL_INSTALL)
+ test -z "$(moduledir)" || $(MKDIR_P) "$(DESTDIR)$(moduledir)"
+ @list='$(module_SCRIPTS)'; test -n "$(moduledir)" || list=; \
+ for p in $$list; do \
+ if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \
+ if test -f "$$d$$p"; then echo "$$d$$p"; echo "$$p"; else :; fi; \
+ done | \
+ sed -e 'p;s,.*/,,;n' \
+ -e 'h;s|.*|.|' \
+ -e 'p;x;s,.*/,,;$(transform)' | sed 'N;N;N;s,\n, ,g' | \
+ $(AWK) 'BEGIN { files["."] = ""; dirs["."] = 1; } \
+ { d=$$3; if (dirs[d] != 1) { print "d", d; dirs[d] = 1 } \
+ if ($$2 == $$4) { files[d] = files[d] " " $$1; \
+ if (++n[d] == $(am__install_max)) { \
+ print "f", d, files[d]; n[d] = 0; files[d] = "" } } \
+ else { print "f", d "/" $$4, $$1 } } \
+ END { for (d in files) print "f", d, files[d] }' | \
+ while read type dir files; do \
+ if test "$$dir" = .; then dir=; else dir=/$$dir; fi; \
+ test -z "$$files" || { \
+ echo " $(INSTALL_SCRIPT) $$files '$(DESTDIR)$(moduledir)$$dir'"; \
+ $(INSTALL_SCRIPT) $$files "$(DESTDIR)$(moduledir)$$dir" || exit $$?; \
+ } \
+ ; done
+
+uninstall-moduleSCRIPTS:
+ @$(NORMAL_UNINSTALL)
+ @list='$(module_SCRIPTS)'; test -n "$(moduledir)" || exit 0; \
+ files=`for p in $$list; do echo "$$p"; done | \
+ sed -e 's,.*/,,;$(transform)'`; \
+ test -n "$$list" || exit 0; \
+ echo " ( cd '$(DESTDIR)$(moduledir)' && rm -f" $$files ")"; \
+ cd "$(DESTDIR)$(moduledir)" && rm -f $$files
mostlyclean-libtool:
-rm -f *.lo
clean-libtool:
-rm -rf .libs _libs
-install-addinDATA: $(addin_DATA)
- @$(NORMAL_INSTALL)
- test -z "$(addindir)" || $(MKDIR_P) "$(DESTDIR)$(addindir)"
- @list='$(addin_DATA)'; test -n "$(addindir)" || list=; \
- for p in $$list; do \
- if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \
- echo "$$d$$p"; \
- done | $(am__base_list) | \
- while read files; do \
- echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(addindir)'"; \
- $(INSTALL_DATA) $$files "$(DESTDIR)$(addindir)" || exit $$?; \
- done
-
-uninstall-addinDATA:
- @$(NORMAL_UNINSTALL)
- @list='$(addin_DATA)'; test -n "$(addindir)" || list=; \
- files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \
- test -n "$$files" || exit 0; \
- echo " ( cd '$(DESTDIR)$(addindir)' && rm -f" $$files ")"; \
- cd "$(DESTDIR)$(addindir)" && rm -f $$files
tags: TAGS
TAGS:
@@ -456,9 +637,9 @@ distdir: $(DISTFILES)
done
check-am: all-am
check: check-am
-all-am: Makefile $(DATA)
+all-am: Makefile $(SCRIPTS)
installdirs:
- for dir in "$(DESTDIR)$(addindir)"; do \
+ for dir in "$(DESTDIR)$(moduledir)"; do \
test -z "$$dir" || $(MKDIR_P) "$$dir"; \
done
install: install-am
@@ -483,10 +664,12 @@ clean-generic:
distclean-generic:
-test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
-test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES)
+ -test -z "$(DISTCLEANFILES)" || rm -f $(DISTCLEANFILES)
maintainer-clean-generic:
@echo "This command is intended for maintainers to use"
@echo "it deletes files that may require special tools to rebuild."
+ -test -z "$(MAINTAINERCLEANFILES)" || rm -f $(MAINTAINERCLEANFILES)
clean: clean-am
clean-am: clean-generic clean-libtool mostlyclean-am
@@ -507,7 +690,7 @@ info: info-am
info-am:
-install-data-am: install-addinDATA
+install-data-am: install-data-local install-moduleSCRIPTS
install-dvi: install-dvi-am
@@ -551,28 +734,72 @@ ps: ps-am
ps-am:
-uninstall-am: uninstall-addinDATA
+uninstall-am: uninstall-local uninstall-moduleSCRIPTS
.MAKE: install-am install-strip
.PHONY: all all-am check check-am clean clean-generic clean-libtool \
distclean distclean-generic distclean-libtool distdir dvi \
- dvi-am html html-am info info-am install install-addinDATA \
- install-am install-data install-data-am install-dvi \
+ dvi-am html html-am info info-am install install-am \
+ install-data install-data-am install-data-local 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-generic mostlyclean-libtool pdf pdf-am ps ps-am \
- uninstall uninstall-addinDATA uninstall-am
-
-
-mpack: $(ASSEMBLY)
- mautil p $(ASSEMBLY)
-
-$(ASSEMBLY): $(addin_SOURCES) $(dep_resources)
- $(CSC_LIB) -out:$@ $(addin_extraflags) $(build_sources) $(build_references) $(build_packages) $(build_resources)
+ install-moduleSCRIPTS install-pdf install-pdf-am install-ps \
+ install-ps-am install-strip installcheck installcheck-am \
+ installdirs maintainer-clean maintainer-clean-generic \
+ mostlyclean mostlyclean-generic mostlyclean-libtool pdf pdf-am \
+ ps ps-am uninstall uninstall-am uninstall-local \
+ uninstall-moduleSCRIPTS
+
+
+all: $(ASSEMBLY_FILE) theme-icons
+
+run:
+ @pushd $(top_builddir); \
+ make run; \
+ popd;
+
+# uncommented for now.
+# tests are currently excuted from Makefile in $(top_builddir)
+#test:
+# @pushd $(top_builddir)/tests; \
+# make $(ASSEMBLY); \
+# popd;
+
+build-debug:
+ @echo $(DEP_LINK)
+
+$(ASSEMBLY_FILE).mdb: $(ASSEMBLY_FILE)
+
+$(ASSEMBLY_FILE): $(SOURCES_BUILD) $(RESOURCES_EXPANDED) $(DEP_LINK)
+ @mkdir -p $(top_builddir)/bin
+ @if [ ! "x$(ENABLE_RELEASE)" = "xyes" ]; then \
+ $(top_srcdir)/build/dll-map-makefile-verifier $(srcdir)/Makefile.am $(srcdir)/$(notdir $@.config) && \
+ $(MONO) $(top_builddir)/build/dll-map-verifier.exe $(srcdir)/$(notdir $@.config) -iwinmm -ilibbanshee -ilibbnpx11 -ilibc -ilibc.so.6 -iintl -ilibmtp.dll -ilibigemacintegration.dylib -iCFRelease $(SOURCES_BUILD); \
+ fi;
+ $(MCS) \
+ $(GMCS_FLAGS) \
+ $(ASSEMBLY_BUILD_FLAGS) \
+ -nowarn:0278 -nowarn:0078 $$warn \
+ -define:HAVE_GTK_2_10 -define:NET_2_0 \
+ -debug -target:$(TARGET) -out:$@ \
+ $(BUILD_DEFINES) $(ENABLE_TESTS_FLAG) $(ENABLE_ATK_FLAG) \
+ $(FILTERED_LINK) $(RESOURCES_BUILD) $(SOURCES_BUILD)
+ @if [ -e $(srcdir)/$(notdir $@.config) ]; then \
+ cp $(srcdir)/$(notdir $@.config) $(top_builddir)/bin; \
+ fi;
+ @if [ ! -z "$(EXTRA_BUNDLE)" ]; then \
+ cp $(EXTRA_BUNDLE) $(top_builddir)/bin; \
+ fi;
+
+theme-icons: $(THEME_ICONS_SOURCE)
+ @$(INSTALL_ICONS) -il "$(BUILD_DATA_DIR)" "$(srcdir)" $(THEME_ICONS_RELATIVE)
+
+install-data-local: $(THEME_ICONS_SOURCE)
+ @$(INSTALL_ICONS) -i "$(DESTDIR)$(pkgdatadir)" "$(srcdir)" $(THEME_ICONS_RELATIVE)
+
+uninstall-local: $(THEME_ICONS_SOURCE)
+ @$(INSTALL_ICONS) -u "$(DESTDIR)$(pkgdatadir)" "$(srcdir)" $(THEME_ICONS_RELATIVE)
# 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/extensions/Exporters/FacebookExport/FacebookExport.cs b/extensions/Exporters/FacebookExport/FacebookExport.cs
index bcd894b..0f65bd8 100644
--- a/extensions/Exporters/FacebookExport/FacebookExport.cs
+++ b/extensions/Exporters/FacebookExport/FacebookExport.cs
@@ -28,7 +28,7 @@ using Gnome.Keyring;
using GtkBeans;
using FSpot;
-using FSpot.Utils;
+using Hyena;
using FSpot.UI.Dialog;
using FSpot.Extensions;
using FSpot.Filters;
@@ -132,10 +132,10 @@ namespace FSpot.Exporter.Facebook
Hashtable attribs = new Hashtable();
attribs["name"] = keyring_item_name;
- attribs["uid"] = info.UId.ToString ();
- attribs["session_key"] = info.SessionKey;
+ attribs["uid"] = info.uid.ToString ();
+ attribs["session_key"] = info.session_key;
try {
- Ring.CreateItem (keyring, ItemType.GenericSecret, keyring_item_name, attribs, info.Secret, true);
+ Ring.CreateItem (keyring, ItemType.GenericSecret, keyring_item_name, attribs, info.secret, true);
} catch (KeyringException e) {
Log.DebugException (e);
return false;
@@ -247,7 +247,7 @@ namespace FSpot.Exporter.Facebook
continue;
}
}
- AppendValues (String.Format ("{0} {1}", info.FirstName ?? "", info.LastName ?? ""));
+ AppendValues (String.Format ("{0} {1}", info.first_name ?? "", info.last_name ?? ""));
}
}
@@ -259,11 +259,12 @@ namespace FSpot.Exporter.Facebook
public class FacebookExport : IExporter
{
- private int size = 604;
+ private int size = 720;
private int max_photos_per_album = 200;
FacebookExportDialog dialog;
ThreadProgressDialog progress_dialog;
System.Threading.Thread command_thread;
+ Album album = null;
public FacebookExport ()
{
@@ -284,34 +285,11 @@ namespace FSpot.Exporter.Facebook
return;
}
-
-
if (dialog.Run () != (int)ResponseType.Ok) {
dialog.Destroy ();
return;
}
- if (dialog.Account != null) {
- dialog.Hide ();
-
- command_thread = new System.Threading.Thread (new System.Threading.ThreadStart (Upload));
- command_thread.Name = Mono.Unix.Catalog.GetString ("Uploading Pictures");
-
- progress_dialog = new ThreadProgressDialog (command_thread, selection.Items.Length);
- progress_dialog.Start ();
- }
-
- dialog.Destroy ();
- }
-
- void Upload ()
- {
- Album album = null;
-
- IBrowsableItem [] items = dialog.Items;
- string [] captions = dialog.Captions;
- dialog.StoreCaption ();
-
if (dialog.CreateAlbum) {
string name = dialog.AlbumName;
if (String.IsNullOrEmpty (name)) {
@@ -341,6 +319,25 @@ namespace FSpot.Exporter.Facebook
album = dialog.ActiveAlbum;
}
+ if (dialog.Account != null) {
+ dialog.Hide ();
+
+ command_thread = new System.Threading.Thread (new System.Threading.ThreadStart (Upload));
+ command_thread.Name = Mono.Unix.Catalog.GetString ("Uploading Pictures");
+
+ progress_dialog = new ThreadProgressDialog (command_thread, selection.Items.Length);
+ progress_dialog.Start ();
+ }
+
+ dialog.Destroy ();
+ }
+
+ void Upload ()
+ {
+ IBrowsableItem [] items = dialog.Items;
+ string [] captions = dialog.Captions;
+ dialog.StoreCaption ();
+
long sent_bytes = 0;
FilterSet filters = new FilterSet ();
@@ -352,13 +349,13 @@ namespace FSpot.Exporter.Facebook
IBrowsableItem item = items [i];
FileInfo file_info;
- Console.WriteLine ("uploading {0}", i);
+ Log.DebugFormat ("uploading {0}", i);
progress_dialog.Message = String.Format (Catalog.GetString ("Uploading picture \"{0}\" ({1} of {2})"), item.Name, i + 1, items.Length);
progress_dialog.ProgressText = string.Empty;
progress_dialog.Fraction = i / (double) items.Length;
- FilterRequest request = new FilterRequest (item.DefaultVersionUri);
+ FilterRequest request = new FilterRequest (item.DefaultVersion.Uri);
filters.Convert (request);
file_info = new FileInfo (request.Current.LocalPath);
@@ -370,7 +367,7 @@ namespace FSpot.Exporter.Facebook
catch (Exception e) {
progress_dialog.Message = String.Format (Catalog.GetString ("Error Uploading To Facebook: {0}"), e.Message);
progress_dialog.ProgressText = Catalog.GetString ("Error");
- Console.WriteLine (e);
+ Log.DebugException (e);
if (progress_dialog.PerformRetrySkip ())
i--;
diff --git a/extensions/Exporters/FacebookExport/FacebookExport.ui b/extensions/Exporters/FacebookExport/FacebookExport.ui
index ec413ae..32df3b5 100644
--- a/extensions/Exporters/FacebookExport/FacebookExport.ui
+++ b/extensions/Exporters/FacebookExport/FacebookExport.ui
@@ -17,11 +17,13 @@
<object class="GtkVBox" id="dialog-vbox1">
<property name="visible">True</property>
<property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property>
+ <property name="orientation">vertical</property>
<property name="spacing">2</property>
<child>
<object class="GtkVBox" id="vbox1">
<property name="visible">True</property>
<property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property>
+ <property name="orientation">vertical</property>
<property name="spacing">5</property>
<child>
<object class="GtkTable" id="table3">
@@ -129,6 +131,7 @@
<object class="GtkVBox" id="album_info_vbox">
<property name="visible">True</property>
<property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property>
+ <property name="orientation">vertical</property>
<property name="spacing">2</property>
<child>
<object class="GtkHSeparator" id="hseparator1">
@@ -290,6 +293,7 @@
<object class="GtkVBox" id="picture_info_vbox">
<property name="visible">True</property>
<property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property>
+ <property name="orientation">vertical</property>
<property name="spacing">4</property>
<child>
<object class="GtkHSeparator" id="hseparator2">
@@ -499,6 +503,7 @@
<object class="GtkVBox" id="vbox2">
<property name="visible">True</property>
<property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property>
+ <property name="orientation">vertical</property>
<property name="spacing">3</property>
<child>
<object class="GtkLabel" id="label6">
diff --git a/extensions/Exporters/FacebookExport/FacebookExportDialog.cs b/extensions/Exporters/FacebookExport/FacebookExportDialog.cs
index 62d5dee..b4ea505 100644
--- a/extensions/Exporters/FacebookExport/FacebookExportDialog.cs
+++ b/extensions/Exporters/FacebookExport/FacebookExportDialog.cs
@@ -22,6 +22,7 @@ using System.Threading;
using Gtk;
using GtkBeans;
+using Hyena;
using FSpot.Utils;
using FSpot.Platform;
using FSpot.UI.Dialog;
@@ -170,7 +171,7 @@ namespace FSpot.Exporter.Facebook
StoreCaption ();
int old_item = current_item;
- current_item = thumbnail_iconview.CellAtPosition ((int) args.Event.X, (int) args.Event.Y, false);
+ current_item = thumbnail_iconview.CellAtPosition ((int) args.Event.X, (int) args.Event.Y, false, false);
if (current_item < 0 || current_item >= items.Length) {
current_item = old_item;
@@ -192,7 +193,7 @@ namespace FSpot.Exporter.Facebook
tag_image.Destroy ();
}
- using (Gdk.Pixbuf data = PixbufUtils.ScaleToMaxSize (ThumbnailFactory.LoadThumbnail (item.DefaultVersionUri), 400, 400)) {
+ using (Gdk.Pixbuf data = XdgThumbnailSpec.LoadThumbnail (item.DefaultVersion.Uri, ThumbnailSize.Large)) {
tag_image_height = data.Height;
tag_image_width = data.Width;
tag_image = new Gtk.Image (data);
@@ -262,34 +263,36 @@ namespace FSpot.Exporter.Facebook
LoginProgress (0.6, Catalog.GetString ("Session established, fetching friend details..."));
});
- User[] infos = account.Facebook.GetUserInfo (uids, new string[] { "first_name", "last_name" });
- friends = new Dictionary<long, User> ();
-
- foreach (User user in infos)
- friends.Add (user.UId, user);
-
+ if (uids.Length > 0) {
+ User[] infos = account.Facebook.GetUserInfo (uids, new string[] { "first_name", "last_name" });
+ friends = new Dictionary<long, User> ();
+
+ foreach (User user in infos)
+ friends.Add (user.uid, user);
+ }
+
Gtk.Application.Invoke (delegate {
LoginProgress (0.8, Catalog.GetString ("Session established, fetching photo albums..."));
});
Album[] albums = account.Facebook.GetAlbums ();
Gtk.Application.Invoke (delegate {
- existing_album_combobox.Model = new AlbumStore (albums);
- existing_album_combobox.Active = 0;
-
album_info_vbox.Sensitive = true;
picture_info_vbox.Sensitive = true;
permissions_hbox.Sensitive = true;
login_button.Visible = false;
logout_button.Visible = true;
// Note for translators: {0} and {1} are respectively firstname and surname of the user
- LoginProgress (1.0, String.Format (Catalog.GetString ("{0} {1} is logged into Facebook"), me.FirstName, me.LastName));
+ LoginProgress (1.0, String.Format (Catalog.GetString ("{0} {1} is logged into Facebook"), me.first_name, me.last_name));
+
+ existing_album_combobox.Model = new AlbumStore (albums);
+ existing_album_combobox.Active = 0;
});
- } catch (FacebookException fe) {
- Log.DebugException (fe);
+ } catch (Exception e) {
+ Log.DebugException (e);
Gtk.Application.Invoke (delegate {
HigMessageDialog error = new HigMessageDialog (this, Gtk.DialogFlags.DestroyWithParent | Gtk.DialogFlags.Modal,
Gtk.MessageType.Error, Gtk.ButtonsType.Ok, Catalog.GetString ("Facebook Connection Error"),
- String.Format (Catalog.GetString ("There was an error when downloading your information from Facebook.\n\nFacebook said: {0}"), fe.Message));
+ String.Format (Catalog.GetString ("There was an error when downloading your information from Facebook.\n\nFacebook said: {0}"), e.Message));
error.Run ();
error.Destroy ();
});
@@ -347,10 +350,10 @@ namespace FSpot.Exporter.Facebook
bool actual = account.HasPermission (permission);
if (desired != actual) {
if (desired) {
- Log.Debug ("Granting {0}", permission);
+ Log.DebugFormat ("Granting {0}", permission);
account.GrantPermission (permission, this);
} else {
- Log.Debug ("Revoking {0}", permission);
+ Log.DebugFormat ("Revoking {0}", permission);
account.RevokePermission (permission);
}
/* Double-check that things work... */
@@ -429,7 +432,7 @@ namespace FSpot.Exporter.Facebook
_albums = albums;
foreach (Album album in Albums) {
- AppendValues (album.Name);
+ AppendValues (album.name);
}
}
diff --git a/extensions/Exporters/FacebookExport/FindNullableClashes.cs b/extensions/Exporters/FacebookExport/FindNullableClashes.cs
new file mode 100644
index 0000000..959b54a
--- /dev/null
+++ b/extensions/Exporters/FacebookExport/FindNullableClashes.cs
@@ -0,0 +1,25 @@
+using System;
+using System.Reflection;
+using Hyena;
+
+public class FindNullableClashes {
+ public static void Main (string [] args) {
+ Assembly asm = Assembly.LoadFrom (args[0]);
+ foreach (Type type in asm.GetTypes ()) {
+ foreach (FieldInfo field in type.GetFields ()) {
+ var attrs = field.GetCustomAttributes (false);
+ foreach (Attribute attr in attrs) {
+ if (attr is System.Xml.Serialization.XmlElementAttribute) {
+ var xattr = attr as System.Xml.Serialization.XmlElementAttribute;
+ var ftype = field.FieldType;
+ bool is_nullable = ftype.IsGenericType && ftype.GetGenericTypeDefinition() == typeof(Nullable<>);
+ if (xattr.IsNullable && ftype.IsValueType && field.DeclaringType == type && !is_nullable) {
+ Log.DebugFormat ("Possible clash for {0}/{1}", type.FullName, field.Name);
+ Log.DebugFormat (" Type: {0}", field.FieldType.FullName);
+ }
+ }
+ }
+ }
+ }
+ }
+}
diff --git a/extensions/Exporters/FacebookExport/Makefile.am b/extensions/Exporters/FacebookExport/Makefile.am
index 16786b8..1c77f22 100644
--- a/extensions/Exporters/FacebookExport/Makefile.am
+++ b/extensions/Exporters/FacebookExport/Makefile.am
@@ -1,75 +1,37 @@
-include $(top_srcdir)/Makefile.include
-
-PLUGIN_NAME = FacebookExport
-
-PLUGIN_MANIFEST = $(PLUGIN_NAME).addin.xml
-
-PLUGIN_ASSEMBLY = $(PLUGIN_NAME).dll
-
-PLUGIN_SOURCES = \
- $(srcdir)/FacebookExport.cs \
- $(srcdir)/FacebookExportDialog.cs \
- $(srcdir)/FacebookTagPopup.cs \
- $(srcdir)/Mono.Facebook/Album.cs \
- $(srcdir)/Mono.Facebook/AssemblyInfo.cs \
- $(srcdir)/Mono.Facebook/Error.cs \
- $(srcdir)/Mono.Facebook/Event.cs \
- $(srcdir)/Mono.Facebook/FacebookException.cs \
- $(srcdir)/Mono.Facebook/FacebookParam.cs \
- $(srcdir)/Mono.Facebook/FacebookSession.cs \
- $(srcdir)/Mono.Facebook/Friend.cs \
- $(srcdir)/Mono.Facebook/FriendInfo.cs \
- $(srcdir)/Mono.Facebook/Group.cs \
- $(srcdir)/Mono.Facebook/Location.cs \
- $(srcdir)/Mono.Facebook/Notification.cs \
- $(srcdir)/Mono.Facebook/PeopleList.cs \
- $(srcdir)/Mono.Facebook/Photo.cs \
- $(srcdir)/Mono.Facebook/Responses.cs \
- $(srcdir)/Mono.Facebook/SessionWrapper.cs \
- $(srcdir)/Mono.Facebook/Tag.cs \
- $(srcdir)/Mono.Facebook/User.cs \
- $(srcdir)/Mono.Facebook/Util.cs
-
-REFS = \
- -r:$(top_builddir)/src/f-spot.exe \
- -r:$(top_builddir)/src/FSpot.Core.dll \
- -r:$(top_builddir)/src/FSpot.Utils.dll \
- -r:$(top_builddir)/src/FSpot.Platform.dll \
- -r:$(top_builddir)/src/FSpot.Widgets.dll \
- $(LINK_GTKSHARPBEANS) \
- $(LINK_KEYRING) \
- $(LINK_SEMWEB) \
- $(LINK_GPHOTO2) \
- $(LINK_GIOSHARP) \
- $(LINK_UNIQUESHARP) \
- -r:Mono.Posix
-
-PKGS = \
- -pkg:gtk-sharp-2.0
-
-RESOURCES = \
- -resource:$(srcdir)/$(PLUGIN_MANIFEST) \
- -resource:$(srcdir)/$(PLUGIN_NAME).ui
-
-all: $(PLUGIN_ASSEMBLY)
-
-mpack: $(PLUGIN_ASSEMBLY)
- mautil p $(PLUGIN_ASSEMBLY)
-
-$(PLUGIN_ASSEMBLY): $(PLUGIN_SOURCES) $(PLUGIN_MANIFEST) $(PLUGIN_NAME).ui
- $(CSC_LIB) -out:$@ -warnaserror $(PLUGIN_SOURCES) $(REFS) $(PKGS) $(ASSEMBLIES) $(RESOURCES)
-
-plugindir = $(pkglibdir)/extensions
-
-plugin_DATA = \
- $(PLUGIN_ASSEMBLY)
-
-EXTRA_DIST = \
- $(PLUGIN_SOURCES) \
- $(PLUGIN_MANIFEST) \
- $(PLUGIN_NAME).ui
-
-CLEANFILES = \
- $(PLUGIN_ASSEMBLY) \
- $(PLUGIN_ASSEMBLY).mdb \
- *.mpack
+ASSEMBLY = FSpot.Exporters.FacebookExport
+TARGET = library
+LINK = $(REF_FSPOT_EXTENSION_FACEBOOKEXPORT)
+INSTALL_DIR = $(EXTENSIONS_INSTALL_DIR)
+
+SOURCES = \
+ FacebookExport.cs \
+ FacebookExportDialog.cs \
+ FacebookTagPopup.cs \
+ FindNullableClashes.cs \
+ Mono.Facebook/facebook.cs \
+ Mono.Facebook/Album.cs \
+ Mono.Facebook/Error.cs \
+ Mono.Facebook/Event.cs \
+ Mono.Facebook/FacebookException.cs \
+ Mono.Facebook/FacebookParam.cs \
+ Mono.Facebook/FacebookSession.cs \
+ Mono.Facebook/Friend.cs \
+ Mono.Facebook/FriendInfo.cs \
+ Mono.Facebook/Group.cs \
+ Mono.Facebook/Location.cs \
+ Mono.Facebook/Notification.cs \
+ Mono.Facebook/PeopleList.cs \
+ Mono.Facebook/Photo.cs \
+ Mono.Facebook/Responses.cs \
+ Mono.Facebook/SessionInfo.cs \
+ Mono.Facebook/SessionWrapper.cs \
+ Mono.Facebook/Tag.cs \
+ Mono.Facebook/User.cs \
+ Mono.Facebook/Util.cs
+RESOURCES = \
+ FacebookExport.addin.xml \
+ FacebookExport.ui
+
+ASSEMBLY_INFO_SOURCE = Mono.Facebook/AssemblyInfo.cs
+
+include $(top_srcdir)/build/build.mk
diff --git a/extensions/Exporters/FacebookExport/Makefile.in b/extensions/Exporters/FacebookExport/Makefile.in
index 3f66cb0..7189c38 100644
--- a/extensions/Exporters/FacebookExport/Makefile.in
+++ b/extensions/Exporters/FacebookExport/Makefile.in
@@ -35,13 +35,22 @@ POST_UNINSTALL = :
build_triplet = @build@
host_triplet = @host@
DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in \
- $(top_srcdir)/Makefile.include
+ $(top_srcdir)/build/build.environment.mk \
+ $(top_srcdir)/build/build.mk \
+ $(top_srcdir)/build/build.rules.mk
+ at ENABLE_TESTS_TRUE@am__append_1 = " $(NUNIT_LIBS)"
subdir = extensions/Exporters/FacebookExport
ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
am__aclocal_m4_deps = $(top_srcdir)/build/m4/shave/shave.m4 \
$(top_srcdir)/build/m4/shamrock/expansions.m4 \
+ $(top_srcdir)/build/m4/shamrock/gnome-doc.m4 \
$(top_srcdir)/build/m4/shamrock/mono.m4 \
+ $(top_srcdir)/build/m4/shamrock/nunit.m4 \
$(top_srcdir)/build/m4/shamrock/programs.m4 \
+ $(top_srcdir)/build/m4/f-spot/flickrnet.m4 \
+ $(top_srcdir)/build/m4/f-spot/gnome-keyring-sharp.m4 \
+ $(top_srcdir)/build/m4/f-spot/gtk-sharp.m4 \
+ $(top_srcdir)/build/m4/f-spot/mono-addins.m4 \
$(top_srcdir)/acinclude.m4 $(top_srcdir)/configure.ac
am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
$(ACLOCAL_M4)
@@ -49,8 +58,6 @@ mkinstalldirs = $(install_sh) -d
CONFIG_HEADER = $(top_builddir)/config.h
CONFIG_CLEAN_FILES =
CONFIG_CLEAN_VPATH_FILES =
-SOURCES =
-DIST_SOURCES =
am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`;
am__vpath_adj = case $$p in \
$(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \
@@ -72,8 +79,9 @@ am__nobase_list = $(am__nobase_strip_setup); \
am__base_list = \
sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \
sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g'
-am__installdirs = "$(DESTDIR)$(plugindir)"
-DATA = $(plugin_DATA)
+am__installdirs = "$(DESTDIR)$(moduledir)"
+SCRIPTS = $(module_SCRIPTS)
+DIST_SOURCES =
DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
ACLOCAL = @ACLOCAL@
ACLOCAL_AMFLAGS = @ACLOCAL_AMFLAGS@
@@ -119,6 +127,8 @@ EXIF_SOVERSION = @EXIF_SOVERSION@
F77 = @F77@
FC = @FC@
FGREP = @FGREP@
+FLICKRNET_CFLAGS = @FLICKRNET_CFLAGS@
+FLICKRNET_LIBS = @FLICKRNET_LIBS@
F_CFLAGS = @F_CFLAGS@
F_LIBS = @F_LIBS@
GAPI2CODEGEN = @GAPI2CODEGEN@
@@ -132,6 +142,8 @@ GCONF_SHARP_LIBS = @GCONF_SHARP_LIBS@
GETTEXT_PACKAGE = @GETTEXT_PACKAGE@
GIO_CFLAGS = @GIO_CFLAGS@
GIO_LIBS = @GIO_LIBS@
+GLIBSHARP_2_12_7_CFLAGS = @GLIBSHARP_2_12_7_CFLAGS@
+GLIBSHARP_2_12_7_LIBS = @GLIBSHARP_2_12_7_LIBS@
GLIBSHARP_CFLAGS = @GLIBSHARP_CFLAGS@
GLIBSHARP_LIBS = @GLIBSHARP_LIBS@
GLIB_CFLAGS = @GLIB_CFLAGS@
@@ -147,6 +159,10 @@ GNOME_SHARP_CFLAGS = @GNOME_SHARP_CFLAGS@
GNOME_SHARP_LIBS = @GNOME_SHARP_LIBS@
GOBJECT_QUERY = @GOBJECT_QUERY@
GREP = @GREP@
+GTKSHARP_A11Y_CFLAGS = @GTKSHARP_A11Y_CFLAGS@
+GTKSHARP_A11Y_LIBS = @GTKSHARP_A11Y_LIBS@
+GTKSHARP_CFLAGS = @GTKSHARP_CFLAGS@
+GTKSHARP_LIBS = @GTKSHARP_LIBS@
HELP_DIR = @HELP_DIR@
ICONS_DIRECTORY = @ICONS_DIRECTORY@
INSTALL = @INSTALL@
@@ -160,14 +176,14 @@ INTLTOOL_EXTRACT = @INTLTOOL_EXTRACT@
INTLTOOL_MERGE = @INTLTOOL_MERGE@
INTLTOOL_PERL = @INTLTOOL_PERL@
INTLTOOL_UPDATE = @INTLTOOL_UPDATE@
+KEYRINGSHARP_CFLAGS = @KEYRINGSHARP_CFLAGS@
+KEYRINGSHARP_LIBS = @KEYRINGSHARP_LIBS@
LCMS_CFLAGS = @LCMS_CFLAGS@
LCMS_LIBS = @LCMS_LIBS@
LD = @LD@
LDFLAGS = @LDFLAGS@
LIBEXIF_VERSION_CHECK_CFLAGS = @LIBEXIF_VERSION_CHECK_CFLAGS@
LIBEXIF_VERSION_CHECK_LIBS = @LIBEXIF_VERSION_CHECK_LIBS@
-LIBGPHOTO2_CFLAGS = @LIBGPHOTO2_CFLAGS@
-LIBGPHOTO2_LIBS = @LIBGPHOTO2_LIBS@
LIBJPEG = @LIBJPEG@
LIBOBJS = @LIBOBJS@
LIBS = @LIBS@
@@ -182,6 +198,12 @@ MCS = @MCS@
MKDIR_P = @MKDIR_P@
MKINSTALLDIRS = @MKINSTALLDIRS@
MONO = @MONO@
+MONO_ADDINS_CFLAGS = @MONO_ADDINS_CFLAGS@
+MONO_ADDINS_GUI_CFLAGS = @MONO_ADDINS_GUI_CFLAGS@
+MONO_ADDINS_GUI_LIBS = @MONO_ADDINS_GUI_LIBS@
+MONO_ADDINS_LIBS = @MONO_ADDINS_LIBS@
+MONO_ADDINS_SETUP_CFLAGS = @MONO_ADDINS_SETUP_CFLAGS@
+MONO_ADDINS_SETUP_LIBS = @MONO_ADDINS_SETUP_LIBS@
MONO_MODULE_CFLAGS = @MONO_MODULE_CFLAGS@
MONO_MODULE_LIBS = @MONO_MODULE_LIBS@
MSGFMT = @MSGFMT@
@@ -192,7 +214,6 @@ NDESK_DBUS_LIBS = @NDESK_DBUS_LIBS@
NM = @NM@
NMEDIT = @NMEDIT@
NUNIT_CFLAGS = @NUNIT_CFLAGS@
-NUNIT_DEFINES = @NUNIT_DEFINES@
NUNIT_LIBS = @NUNIT_LIBS@
OBJC = @OBJC@
OBJDUMP = @OBJDUMP@
@@ -284,95 +305,256 @@ target_alias = @target_alias@
top_build_prefix = @top_build_prefix@
top_builddir = @top_builddir@
top_srcdir = @top_srcdir@
+ASSEMBLY = FSpot.Exporters.FacebookExport
+TARGET = library
+LINK = $(REF_FSPOT_EXTENSION_FACEBOOKEXPORT) $(am__append_1)
+INSTALL_DIR = $(EXTENSIONS_INSTALL_DIR)
+SOURCES = \
+ FacebookExport.cs \
+ FacebookExportDialog.cs \
+ FacebookTagPopup.cs \
+ FindNullableClashes.cs \
+ Mono.Facebook/facebook.cs \
+ Mono.Facebook/Album.cs \
+ Mono.Facebook/Error.cs \
+ Mono.Facebook/Event.cs \
+ Mono.Facebook/FacebookException.cs \
+ Mono.Facebook/FacebookParam.cs \
+ Mono.Facebook/FacebookSession.cs \
+ Mono.Facebook/Friend.cs \
+ Mono.Facebook/FriendInfo.cs \
+ Mono.Facebook/Group.cs \
+ Mono.Facebook/Location.cs \
+ Mono.Facebook/Notification.cs \
+ Mono.Facebook/PeopleList.cs \
+ Mono.Facebook/Photo.cs \
+ Mono.Facebook/Responses.cs \
+ Mono.Facebook/SessionInfo.cs \
+ Mono.Facebook/SessionWrapper.cs \
+ Mono.Facebook/Tag.cs \
+ Mono.Facebook/User.cs \
+ Mono.Facebook/Util.cs
+
+RESOURCES = \
+ FacebookExport.addin.xml \
+ FacebookExport.ui
+
+ASSEMBLY_INFO_SOURCE = Mono.Facebook/AssemblyInfo.cs
+
+# Initializers
+MONO_BASE_PATH =
+MONO_ADDINS_PATH =
+
+# Install Paths
+DEFAULT_INSTALL_DIR = $(pkglibdir)
+BACKENDS_INSTALL_DIR = $(DEFAULT_INSTALL_DIR)/Backends
+EXTENSIONS_INSTALL_DIR = $(DEFAULT_INSTALL_DIR)/Extensions
DIR_DOCS = $(top_builddir)/docs
DIR_EXTENSIONS = $(top_builddir)/extensions
-DIR_GPHOTO2 = $(top_builddir)/lib/libgphoto2-sharp
DIR_ICONS = $(top_builddir)/icons
DIR_JPEGTRAN = $(top_builddir)/lib/libjpegtran
-DIR_KEYRING = $(top_builddir)/lib/gnome-keyring-sharp
DIR_LIBFSPOT = $(top_builddir)/lib/libfspot
DIR_SEMWEB = $(top_builddir)/lib/semweb
DIR_SRC = $(top_builddir)/src
DIR_GIOSHARP = $(top_builddir)/lib/gio-sharp/gio
DIR_GTKSHARPBEANS = $(top_builddir)/lib/gtk-sharp-beans
DIR_UNIQUESHARP = $(top_builddir)/lib/unique-sharp/unique
-LINK_KEYRING = -r:$(DIR_KEYRING)/gnome-keyring-sharp.dll
-LINK_GPHOTO2 = -r:$(DIR_GPHOTO2)/libgphoto2-sharp.dll
-LINK_SEMWEB = -r:$(DIR_SEMWEB)/SemWeb.dll
-LINK_GIOSHARP = -r:$(DIR_GIOSHARP)/gio-sharp.dll
-LINK_GTKSHARPBEANS = -r:$(DIR_GTKSHARPBEANS)/gtk-sharp-beans.dll
-LINK_UNIQUESHARP = -r:$(DIR_UNIQUESHARP)/unique-sharp.dll
-CSC_FLAGS = -debug
-CSC = $(MCS) $(CSC_FLAGS) -target:exe
-CSC_LIB = $(MCS) $(CSC_FLAGS) -target:library
-MONO_DEBUGFLAGS = --debug
-RUNTIME = mono $(MONO_DEBUGFLAGS)
-PLUGIN_NAME = FacebookExport
-PLUGIN_MANIFEST = $(PLUGIN_NAME).addin.xml
-PLUGIN_ASSEMBLY = $(PLUGIN_NAME).dll
-PLUGIN_SOURCES = \
- $(srcdir)/FacebookExport.cs \
- $(srcdir)/FacebookExportDialog.cs \
- $(srcdir)/FacebookTagPopup.cs \
- $(srcdir)/Mono.Facebook/Album.cs \
- $(srcdir)/Mono.Facebook/AssemblyInfo.cs \
- $(srcdir)/Mono.Facebook/Error.cs \
- $(srcdir)/Mono.Facebook/Event.cs \
- $(srcdir)/Mono.Facebook/FacebookException.cs \
- $(srcdir)/Mono.Facebook/FacebookParam.cs \
- $(srcdir)/Mono.Facebook/FacebookSession.cs \
- $(srcdir)/Mono.Facebook/Friend.cs \
- $(srcdir)/Mono.Facebook/FriendInfo.cs \
- $(srcdir)/Mono.Facebook/Group.cs \
- $(srcdir)/Mono.Facebook/Location.cs \
- $(srcdir)/Mono.Facebook/Notification.cs \
- $(srcdir)/Mono.Facebook/PeopleList.cs \
- $(srcdir)/Mono.Facebook/Photo.cs \
- $(srcdir)/Mono.Facebook/Responses.cs \
- $(srcdir)/Mono.Facebook/SessionWrapper.cs \
- $(srcdir)/Mono.Facebook/Tag.cs \
- $(srcdir)/Mono.Facebook/User.cs \
- $(srcdir)/Mono.Facebook/Util.cs
-
-REFS = \
- -r:$(top_builddir)/src/f-spot.exe \
- -r:$(top_builddir)/src/FSpot.Core.dll \
- -r:$(top_builddir)/src/FSpot.Utils.dll \
- -r:$(top_builddir)/src/FSpot.Platform.dll \
- -r:$(top_builddir)/src/FSpot.Widgets.dll \
- $(LINK_GTKSHARPBEANS) \
- $(LINK_KEYRING) \
- $(LINK_SEMWEB) \
- $(LINK_GPHOTO2) \
- $(LINK_GIOSHARP) \
- $(LINK_UNIQUESHARP) \
- -r:Mono.Posix
-
-PKGS = \
- -pkg:gtk-sharp-2.0
-
-RESOURCES = \
- -resource:$(srcdir)/$(PLUGIN_MANIFEST) \
- -resource:$(srcdir)/$(PLUGIN_NAME).ui
-
-plugindir = $(pkglibdir)/extensions
-plugin_DATA = \
- $(PLUGIN_ASSEMBLY)
-
-EXTRA_DIST = \
- $(PLUGIN_SOURCES) \
- $(PLUGIN_MANIFEST) \
- $(PLUGIN_NAME).ui
-
-CLEANFILES = \
- $(PLUGIN_ASSEMBLY) \
- $(PLUGIN_ASSEMBLY).mdb \
- *.mpack
-
+DIR_BIN = $(top_builddir)/bin
+
+# External libraries to link against, generated from configure
+LINK_SYSTEM = -r:System
+LINK_SYSTEMDATA = -r:System.Data
+LINK_SYSTEM_WEB = -r:System.Web
+LINK_MONO_POSIX = -r:Mono.Posix
+LINK_MONO_CAIRO = -r:Mono.Cairo
+LINK_MONO_SIMD = -r:Mono.Simd
+LINK_MONODATA = -r:Mono.Data
+LINK_MONO_DATA_SQLITECLIENT = -r:Mono.Data.SqliteClient
+LINK_ICSHARP_ZIP_LIB = -r:ICSharpCode.SharpZipLib
+LINK_KEYRING = $(KEYRINGSHARP_LIBS)
+LINK_GLIB = $(GLIBSHARP_LIBS)
+LINK_GTK = $(GTKSHARP_LIBS)
+LINK_GNOME = $(GNOME_SHARP_LIBS)
+LINK_GCONF = $(GCONF_SHARP_LIBS)
+LINK_GLADE = -pkg:glade-sharp-2.0
+LINK_FLICKRNET = -pkg:flickrnet
+LINK_DBUS = $(NDESK_DBUS_LIBS) $(NDESK_DBUS_GLIB_LIBS)
+LINK_DBUS_NO_GLIB = $(NDESK_DBUS_LIBS)
+LINK_MONO_ADDINS_DEPS = $(MONO_ADDINS_LIBS)
+LINK_MONO_ADDINS_SETUP_DEPS = $(MONO_ADDINS_SETUP_LIBS)
+LINK_MONO_ADDINS_GUI_DEPS = $(MONO_ADDINS_GUI_LIBS)
+
+# GIO
+REF_GIO =
+LINK_GIO = -r:$(DIR_GIOSHARP)/gio-sharp.dll
+LINK_GIO_DEPS = $(REF_GIO) $(LINK_GIO)
+
+# Gtk Beans
+REF_GTK_BEANS = $(LINK_GIO_DEPS)
+LINK_GTK_BEANS = -r:$(DIR_GTKSHARPBEANS)/gtk-sharp-beans.dll
+LINK_GTK_BEANS_DEPS = $(REF_GTK_BEANS) $(LINK_GTK_BEANS)
+
+# Uniqe
+REF_UNIQUE =
+LINK_UNIQUE = -r:$(DIR_UNIQUESHARP)/unique-sharp.dll
+LINK_UNIQUE_DEPS = $(REF_UNIQUE) $(LINK_UNIQUE)
+
+# Hyena
+REF_HYENA = $(LINK_SYSTEM) $(LINK_MONO_POSIX)
+LINK_HYENA = -r:$(DIR_BIN)/Hyena.dll
+LINK_HYENA_DEPS = $(REF_HYENA) $(LINK_HYENA)
+
+# Semweb
+REF_SEMWEB = $(LINK_SYSTEMDATA) $(LINK_HYENA_DEPS)
+LINK_SEMWEB = -r:$(DIR_BIN)/SemWeb.dll
+LINK_SEMWEB_DEPS = $(REF_SEMWEB) $(LINK_SEMWEB)
+
+# Hyena.Data.Sqlite
+REF_HYENA_DATA_SQLITE = $(LINK_SQLITE)
+LINK_HYENA_DATA_SQLITE = -r:$(DIR_BIN)/Hyena.Data.Sqlite.dll
+LINK_HYENA_DATA_SQLITE_DEPS = $(REF_HYENA_DATA_SQLITE) $(LINK_HYENA_DATA_SQLITE)
+
+# Hyena.Gui
+REF_HYENA_GUI = $(LINK_HYENA_DEPS)
+LINK_HYENA_GUI = -r:$(DIR_BIN)/Hyena.Gui.dll
+LINK_HENA_GUI_DEPS = $(REF_HYENA_GUI) $(LINK_HYENA_GUI)
+
+# FSpot.Cms
+REF_FSPOT_CMS = $(LINK_GTK)
+LINK_FSPOT_CMS = -r:$(DIR_BIN)/FSpot.Cms.dll
+LINK_FSPOT_CMS_DEPS = $(REF_FSPOT_CMS) $(LINK_FSPOT_CMS)
+
+# FSpot.Utils
+REF_FSPOT_UTILS = $(LINK_HYENA_DEPS) $(LINK_GTK) $(LINK_GIO) $(LINK_MONO_CAIRO)
+LINK_FSPOT_UTILS = -r:$(DIR_BIN)/FSpot.Utils.dll
+LINK_FSPOT_UTILS_DEPS = $(REF_FSPOT_UTILS) $(LINK_FSPOT_UTILS)
+
+# FSpot.Core
+REF_FSPOT_CORE = $(LINK_FSPOT_UTILS_DEPS) $(LINK_FSPOT_CMS_DEPS)
+LINK_FSPOT_CORE = -r:$(DIR_BIN)/FSpot.Core.dll
+LINK_FSPOT_CORE_DEPS = $(REF_FSPOT_CORE) $(LINK_FSPOT_CORE)
+
+# FSpot.Query
+REF_FSPOT_QUERY = $(LINK_FSPOT_CORE_DEPS)
+LINK_FSPOT_QUERY = -r:$(DIR_BIN)/FSpot.Query.dll
+LINK_FSPOT_QUERY_DEPS = $(REF_FSPOT_QUERY) $(LINK_FSPOT_QUERY)
+
+# FSpot.JobScheduler
+REF_FSPOT_JOB_SCHEDULER = $(LINK_HYENA_DEPS)
+LINK_FSPOT_JOB_SCHEDULER = -r:$(DIR_BIN)/FSpot.JobScheduler.dll
+LINK_FSPOT_JOB_SCHEDULER_DEPS = $(REF_FSPOT_JOB_SCHEDULER) $(LINK_FSPOT_JOB_SCHEDULER)
+
+# FSpot.Bling
+REF_FSPOT_BLING = $(LINK_GTK_BEANS_DEPS) $(LINK_GLIB)
+LINK_FSPOT_BLING = -r:$(DIR_BIN)/FSpot.Bling.dll
+LINK_FSPOT_BLING_DEPS = $(REF_FSPOT_BLING) $(LINK_FSPOT_BLING)
+
+# FSpot.Platform
+REF_FSPOT_PLATFORM = $(LINK_GCONF) $(LINK_GTK) $(LINK_FSPOT_CORE_DEPS) $(LINK_DBUS)
+LINK_FSPOT_PLATFORM = -r:$(DIR_BIN)/FSpot.Platform.dll
+LINK_FSPOT_PLATFORM_DEPS = $(REF_FSPOT_PLATFORM) $(LINK_FSPOT_PLATFORM)
+
+# FSpot.Widgets
+REF_FSPOT_WIDGETS = $(LINK_FSPOT_CORE_DEPS) $(LINK_FSPOT_BLING_DEPS)
+LINK_FSPOT_WIDGETS = -r:$(DIR_BIN)/FSpot.Widgets.dll
+LINK_FSPOT_WIDGETS_DEPS = $(REF_FSPOT_WIDGETS) $(LINK_FSPOT_WIDGETS)
+
+# FSpot (executable)
+REF_FSPOT = $(LINK_FSPOT_WIDGETS_DEPS) $(LINK_FSPOT_PLATFORM_DEPS) $(LINK_FSPOT_QUERY_DEPS) \
+ $(LINK_GLIB) $(LINK_MONO_ADDINS_DEPS) $(LINK_UNIQUE_DEPS) $(LINK_MONO_ADDINS_SETUP_DEPS) \
+ $(LINK_SEMWEB_DEPS) $(LINK_GLADE) $(LINK_MONODATA) $(LINK_MONO_DATA_SQLITECLIENT) \
+ $(LINK_MONO_ADDINS_GUI_DEPS) $(LINK_FSPOT_JOB_SCHEDULER_DEPS) $(LINK_ICSHARP_ZIP_LIB) \
+ $(LINK_GNOME)
+
+# FIXME: do not link executables
+LINK_FSPOT = -r:$(DIR_BIN)/f-spot.exe
+LINK_FSPOT_DEPS = $(REF_FSPOT) $(LINK_FSPOT)
+
+# Extensions
+REF_FSPOT_EXTENSION_BLACKOUTEDITOR = $(LINK_FSPOT_DEPS)
+REF_FSPOT_EXTENSION_BWEDITOR = $(LINK_FSPOT_DEPS) $(LINK_MONO_SIMD)
+REF_FSPOT_EXTENSION_FLIPEDITOR = $(LINK_FSPOT_DEPS)
+REF_FSPOT_EXTENSION_PIXELATEEDITOR = $(LINK_FSPOT_DEPS)
+REF_FSPOT_EXTENSION_RESIZEEDITOR = $(LINK_FSPOT_DEPS)
+REF_FSPOT_EXTENSION_CDEXPORT = $(LINK_FSPOT_DEPS)
+REF_FSPOT_EXTENSION_FACEBOOKEXPORT = $(LINK_FSPOT_DEPS) $(LINK_KEYRING)
+REF_FSPOT_EXTENSION_FLICKREXPORT = $(LINK_FSPOT_DEPS) $(LINK_FLICKRNET)
+REF_FSPOT_EXTENSION_FOLDEREXPORT = $(LINK_FSPOT_DEPS) $(LINK_SYSTEM_WEB)
+REF_FSPOT_EXTENSION_GALLERYEXPORT = $(LINK_FSPOT_DEPS)
+REF_MONO_GOOGLE = $(LINK_HYENA_DEPS)
+LINK_MONO_GOOGLE = -r:$(DIR_BIN)/Mono.Google.dll
+LINK_MONO_GOOGLE_DEPS = $(REF_MONO_GOOGLE) $(LINK_MONO_GOOGLE)
+REF_FSPOT_EXTENSION_PICASAWEBEXPORT = $(LINK_FSPOT_DEPS) $(LINK_MONO_GOOGLE) $(LINK_KEYRING)
+REF_SMUGMUGNET = $(LINK_FSPOT_DEPS)
+LINK_SMUGMUGNET = -r:$(DIR_BIN)/SmugMugNet.dll
+LINK_SMUGMUGNET_DEPS = $(REF_SMUGMUGNET) $(LINK_SMUGMUGNET)
+REF_FSPOT_EXTENSION_SMUGMUGEXPORT = $(LINK_SMUGMUGNET_DEPS) $(LINK_KEYRING)
+REF_MONO_TABBLO = $(LINK_HYENA_DEPS)
+LINK_MONO_TABBLO = -r:$(DIR_BIN)/Mono.Tabblo.dll
+LINK_MONO_TABBLO_DEPS = $(REF_MONO_TABBLO) $(LINK_MONO_TABBLO)
+REF_FSPOT_EXTENSION_TABBLOEXPORT = $(LINK_FSPOT_DEPS) $(LINK_KEYRING) $(LINK_MONO_TABBLO_DEPS)
+REF_FSPOT_EXTENSION_ZIPEXPORT = $(LINK_FSPOT_DEPS)
+REF_FSPOT_EXTENSION_CHANGEPHOTOPATH = $(LINK_FSPOT_DEPS)
+REF_FSPOT_EXTENSION_DEVELOPINUFRAW = $(LINK_FSPOT_DEPS)
+REF_FSPOT_EXTENSION_HASHJOB = $(LINK_FSPOT_DEPS)
+REF_FSPOT_EXTENSION_LIVEWEBGALLERY = $(LINK_FSPOT_DEPS)
+REF_FSPOT_EXTENSION_MERGEDB = $(LINK_FSPOT_DEPS)
+REF_FSPOT_EXTENSION_RAWPLUSJPEG = $(LINK_FSPOT_DEPS)
+REF_FSPOT_EXTENSION_RETROACTIVEROLL = $(LINK_FSPOT_DEPS)
+REF_FSPOT_EXTENSION_SCREENSAVERCONFIG = $(LINK_FSPOT_DEPS)
+REF_FSPOT_EXTENSION_COVERTRANSITION = $(LINK_FSPOT_DEPS)
+
+# Cute hack to replace a space with something
+colon := :
+empty :=
+space := $(empty) $(empty)
+
+# Build path to allow running uninstalled
+RUN_PATH = $(subst $(space),$(colon), $(MONO_BASE_PATH))
+UNIQUE_FILTER_PIPE = tr [:space:] \\n | sort | uniq
+BUILD_DATA_DIR = $(top_builddir)/bin/share/$(PACKAGE)
+
+# Since all other attempts failed, we currently go this way:
+# This code adds the file specified in ASSEMBLY_INFO_SOURCE to SOURCES_BUILD.
+# If no such file is specified, the default AssemblyInfo.cs is used.
+ASSEMBLY_INFO_SOURCE_REAL = \
+ $(shell if [ "$(ASSEMBLY_INFO_SOURCE)" ]; \
+ then \
+ echo "$(addprefix $(srcdir)/, $(ASSEMBLY_INFO_SOURCE))"; \
+ else \
+ echo "$(top_srcdir)/src/AssemblyInfo.cs"; \
+ fi)
+
+SOURCES_BUILD = $(addprefix $(srcdir)/, $(SOURCES)) \
+ $(ASSEMBLY_INFO_SOURCE_REAL)
+RESOURCES_EXPANDED = $(addprefix $(srcdir)/, $(RESOURCES))
+RESOURCES_BUILD = $(foreach resource, $(RESOURCES_EXPANDED), \
+ -resource:$(resource),$(notdir $(resource)))
+
+INSTALL_ICONS = $(top_srcdir)/build/private-icon-theme-installer "$(mkinstalldirs)" "$(INSTALL_DATA)"
+THEME_ICONS_SOURCE = $(wildcard $(srcdir)/ThemeIcons/*/*/*.png) $(wildcard $(srcdir)/ThemeIcons/scalable/*/*.svg)
+THEME_ICONS_RELATIVE = $(subst $(srcdir)/ThemeIcons/, , $(THEME_ICONS_SOURCE))
+ASSEMBLY_EXTENSION = $(strip $(patsubst library, dll, $(TARGET)))
+ASSEMBLY_FILE = $(top_builddir)/bin/$(ASSEMBLY).$(ASSEMBLY_EXTENSION)
+INSTALL_DIR_RESOLVED = $(firstword $(subst , $(DEFAULT_INSTALL_DIR), $(INSTALL_DIR)))
+ at ENABLE_TESTS_TRUE@ENABLE_TESTS_FLAG = "-define:ENABLE_TESTS"
+ at ENABLE_ATK_TRUE@ENABLE_ATK_FLAG = "-define:ENABLE_ATK"
+FILTERED_LINK = $(shell echo "$(LINK)" | $(UNIQUE_FILTER_PIPE))
+DEP_LINK = $(shell echo "$(LINK)" | $(UNIQUE_FILTER_PIPE) | sed s,-r:,,g | grep '$(top_builddir)/bin/')
+OUTPUT_FILES = \
+ $(ASSEMBLY_FILE) \
+ $(ASSEMBLY_FILE).mdb
+
+moduledir = $(INSTALL_DIR_RESOLVED)
+module_SCRIPTS = $(OUTPUT_FILES)
+EXTRA_DIST = $(SOURCES_BUILD) $(RESOURCES_EXPANDED) $(THEME_ICONS_SOURCE)
+CLEANFILES = $(OUTPUT_FILES) $(ASSEMBLY_FILE).config
+DISTCLEANFILES = *.pidb
+MAINTAINERCLEANFILES = Makefile.in
all: all-am
.SUFFIXES:
-$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(top_srcdir)/Makefile.include $(am__configure_deps)
+$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(top_srcdir)/build/build.mk $(top_srcdir)/build/build.environment.mk $(top_srcdir)/build/build.rules.mk $(am__configure_deps)
@for dep in $?; do \
case '$(am__configure_deps)' in \
*$$dep*) \
@@ -402,32 +584,46 @@ $(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps)
$(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps)
cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
$(am__aclocal_m4_deps):
+install-moduleSCRIPTS: $(module_SCRIPTS)
+ @$(NORMAL_INSTALL)
+ test -z "$(moduledir)" || $(MKDIR_P) "$(DESTDIR)$(moduledir)"
+ @list='$(module_SCRIPTS)'; test -n "$(moduledir)" || list=; \
+ for p in $$list; do \
+ if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \
+ if test -f "$$d$$p"; then echo "$$d$$p"; echo "$$p"; else :; fi; \
+ done | \
+ sed -e 'p;s,.*/,,;n' \
+ -e 'h;s|.*|.|' \
+ -e 'p;x;s,.*/,,;$(transform)' | sed 'N;N;N;s,\n, ,g' | \
+ $(AWK) 'BEGIN { files["."] = ""; dirs["."] = 1; } \
+ { d=$$3; if (dirs[d] != 1) { print "d", d; dirs[d] = 1 } \
+ if ($$2 == $$4) { files[d] = files[d] " " $$1; \
+ if (++n[d] == $(am__install_max)) { \
+ print "f", d, files[d]; n[d] = 0; files[d] = "" } } \
+ else { print "f", d "/" $$4, $$1 } } \
+ END { for (d in files) print "f", d, files[d] }' | \
+ while read type dir files; do \
+ if test "$$dir" = .; then dir=; else dir=/$$dir; fi; \
+ test -z "$$files" || { \
+ echo " $(INSTALL_SCRIPT) $$files '$(DESTDIR)$(moduledir)$$dir'"; \
+ $(INSTALL_SCRIPT) $$files "$(DESTDIR)$(moduledir)$$dir" || exit $$?; \
+ } \
+ ; done
+
+uninstall-moduleSCRIPTS:
+ @$(NORMAL_UNINSTALL)
+ @list='$(module_SCRIPTS)'; test -n "$(moduledir)" || exit 0; \
+ files=`for p in $$list; do echo "$$p"; done | \
+ sed -e 's,.*/,,;$(transform)'`; \
+ test -n "$$list" || exit 0; \
+ echo " ( cd '$(DESTDIR)$(moduledir)' && rm -f" $$files ")"; \
+ cd "$(DESTDIR)$(moduledir)" && rm -f $$files
mostlyclean-libtool:
-rm -f *.lo
clean-libtool:
-rm -rf .libs _libs
-install-pluginDATA: $(plugin_DATA)
- @$(NORMAL_INSTALL)
- test -z "$(plugindir)" || $(MKDIR_P) "$(DESTDIR)$(plugindir)"
- @list='$(plugin_DATA)'; test -n "$(plugindir)" || list=; \
- for p in $$list; do \
- if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \
- echo "$$d$$p"; \
- done | $(am__base_list) | \
- while read files; do \
- echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(plugindir)'"; \
- $(INSTALL_DATA) $$files "$(DESTDIR)$(plugindir)" || exit $$?; \
- done
-
-uninstall-pluginDATA:
- @$(NORMAL_UNINSTALL)
- @list='$(plugin_DATA)'; test -n "$(plugindir)" || list=; \
- files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \
- test -n "$$files" || exit 0; \
- echo " ( cd '$(DESTDIR)$(plugindir)' && rm -f" $$files ")"; \
- cd "$(DESTDIR)$(plugindir)" && rm -f $$files
tags: TAGS
TAGS:
@@ -467,9 +663,9 @@ distdir: $(DISTFILES)
done
check-am: all-am
check: check-am
-all-am: Makefile $(DATA)
+all-am: Makefile $(SCRIPTS)
installdirs:
- for dir in "$(DESTDIR)$(plugindir)"; do \
+ for dir in "$(DESTDIR)$(moduledir)"; do \
test -z "$$dir" || $(MKDIR_P) "$$dir"; \
done
install: install-am
@@ -494,10 +690,12 @@ clean-generic:
distclean-generic:
-test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
-test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES)
+ -test -z "$(DISTCLEANFILES)" || rm -f $(DISTCLEANFILES)
maintainer-clean-generic:
@echo "This command is intended for maintainers to use"
@echo "it deletes files that may require special tools to rebuild."
+ -test -z "$(MAINTAINERCLEANFILES)" || rm -f $(MAINTAINERCLEANFILES)
clean: clean-am
clean-am: clean-generic clean-libtool mostlyclean-am
@@ -518,7 +716,7 @@ info: info-am
info-am:
-install-data-am: install-pluginDATA
+install-data-am: install-data-local install-moduleSCRIPTS
install-dvi: install-dvi-am
@@ -562,30 +760,72 @@ ps: ps-am
ps-am:
-uninstall-am: uninstall-pluginDATA
+uninstall-am: uninstall-local uninstall-moduleSCRIPTS
.MAKE: install-am install-strip
.PHONY: all all-am check check-am clean clean-generic clean-libtool \
distclean distclean-generic distclean-libtool distdir dvi \
dvi-am html html-am info info-am 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-pluginDATA install-ps install-ps-am \
- install-strip installcheck installcheck-am installdirs \
- maintainer-clean maintainer-clean-generic mostlyclean \
- mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \
- uninstall uninstall-am uninstall-pluginDATA
-
-
-all: $(PLUGIN_ASSEMBLY)
-
-mpack: $(PLUGIN_ASSEMBLY)
- mautil p $(PLUGIN_ASSEMBLY)
-
-$(PLUGIN_ASSEMBLY): $(PLUGIN_SOURCES) $(PLUGIN_MANIFEST) $(PLUGIN_NAME).ui
- $(CSC_LIB) -out:$@ -warnaserror $(PLUGIN_SOURCES) $(REFS) $(PKGS) $(ASSEMBLIES) $(RESOURCES)
+ install-data install-data-am install-data-local install-dvi \
+ install-dvi-am install-exec install-exec-am install-html \
+ install-html-am install-info install-info-am install-man \
+ install-moduleSCRIPTS install-pdf install-pdf-am install-ps \
+ install-ps-am install-strip installcheck installcheck-am \
+ installdirs maintainer-clean maintainer-clean-generic \
+ mostlyclean mostlyclean-generic mostlyclean-libtool pdf pdf-am \
+ ps ps-am uninstall uninstall-am uninstall-local \
+ uninstall-moduleSCRIPTS
+
+
+all: $(ASSEMBLY_FILE) theme-icons
+
+run:
+ @pushd $(top_builddir); \
+ make run; \
+ popd;
+
+# uncommented for now.
+# tests are currently excuted from Makefile in $(top_builddir)
+#test:
+# @pushd $(top_builddir)/tests; \
+# make $(ASSEMBLY); \
+# popd;
+
+build-debug:
+ @echo $(DEP_LINK)
+
+$(ASSEMBLY_FILE).mdb: $(ASSEMBLY_FILE)
+
+$(ASSEMBLY_FILE): $(SOURCES_BUILD) $(RESOURCES_EXPANDED) $(DEP_LINK)
+ @mkdir -p $(top_builddir)/bin
+ @if [ ! "x$(ENABLE_RELEASE)" = "xyes" ]; then \
+ $(top_srcdir)/build/dll-map-makefile-verifier $(srcdir)/Makefile.am $(srcdir)/$(notdir $@.config) && \
+ $(MONO) $(top_builddir)/build/dll-map-verifier.exe $(srcdir)/$(notdir $@.config) -iwinmm -ilibbanshee -ilibbnpx11 -ilibc -ilibc.so.6 -iintl -ilibmtp.dll -ilibigemacintegration.dylib -iCFRelease $(SOURCES_BUILD); \
+ fi;
+ $(MCS) \
+ $(GMCS_FLAGS) \
+ $(ASSEMBLY_BUILD_FLAGS) \
+ -nowarn:0278 -nowarn:0078 $$warn \
+ -define:HAVE_GTK_2_10 -define:NET_2_0 \
+ -debug -target:$(TARGET) -out:$@ \
+ $(BUILD_DEFINES) $(ENABLE_TESTS_FLAG) $(ENABLE_ATK_FLAG) \
+ $(FILTERED_LINK) $(RESOURCES_BUILD) $(SOURCES_BUILD)
+ @if [ -e $(srcdir)/$(notdir $@.config) ]; then \
+ cp $(srcdir)/$(notdir $@.config) $(top_builddir)/bin; \
+ fi;
+ @if [ ! -z "$(EXTRA_BUNDLE)" ]; then \
+ cp $(EXTRA_BUNDLE) $(top_builddir)/bin; \
+ fi;
+
+theme-icons: $(THEME_ICONS_SOURCE)
+ @$(INSTALL_ICONS) -il "$(BUILD_DATA_DIR)" "$(srcdir)" $(THEME_ICONS_RELATIVE)
+
+install-data-local: $(THEME_ICONS_SOURCE)
+ @$(INSTALL_ICONS) -i "$(DESTDIR)$(pkgdatadir)" "$(srcdir)" $(THEME_ICONS_RELATIVE)
+
+uninstall-local: $(THEME_ICONS_SOURCE)
+ @$(INSTALL_ICONS) -u "$(DESTDIR)$(pkgdatadir)" "$(srcdir)" $(THEME_ICONS_RELATIVE)
# 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/extensions/Exporters/FacebookExport/Mono.Facebook/Album.cs b/extensions/Exporters/FacebookExport/Mono.Facebook/Album.cs
index 39e74e3..9c27846 100644
--- a/extensions/Exporters/FacebookExport/Mono.Facebook/Album.cs
+++ b/extensions/Exporters/FacebookExport/Mono.Facebook/Album.cs
@@ -32,49 +32,20 @@ using System.IO;
using System.Xml.Serialization;
using System.Text;
using System.Net;
+using Mono.Facebook.Schemas;
namespace Mono.Facebook
{
- [XmlRoot ("photos_createAlbum_response", Namespace="http://api.facebook.com/1.0/")]
- public class Album : SessionWrapper
+ [System.Xml.Serialization.XmlRootAttribute("photos_createAlbum_response", Namespace="http://api.facebook.com/1.0/")]
+ public class Album : album, SessionWrapper
{
- [XmlElement ("aid")]
- public long AId;
-
- [XmlElement ("cover_pid")]
- public long ConverPId;
-
- [XmlElement ("owner")]
- public long Owner;
-
- [XmlElement ("name")]
- public string Name;
-
- [XmlElement ("created")]
- public long Created;
-
- [XmlElement ("modified")]
- public long Modified;
-
- [XmlElement ("description")]
- public string Description;
-
- [XmlElement ("location")]
- public string Location;
-
- [XmlElement ("link")]
- public string Link;
-
- [XmlIgnore ()]
- public Uri Uri
- {
- get { return new Uri (Link); }
- }
+ [XmlIgnore]
+ public FacebookSession Session { get; set; }
public Photo[] GetPhotos ()
{
PhotosResponse rsp = Session.Util.GetResponse<PhotosResponse> ("facebook.photos.get",
- FacebookParam.Create ("aid", AId),
+ FacebookParam.Create ("aid", aid),
FacebookParam.Create ("session_key", Session.SessionKey),
FacebookParam.Create ("call_id", DateTime.Now.Ticks));
@@ -109,7 +80,7 @@ namespace Mono.Facebook
public Photo Upload (string caption, string path)
{
- Photo uploaded = Session.Util.Upload (AId, caption, path, Session.SessionKey);
+ Photo uploaded = Session.Util.Upload (aid, caption, path, Session.SessionKey);
uploaded.Session = this.Session;
return uploaded;
diff --git a/extensions/Exporters/FacebookExport/Mono.Facebook/Event.cs b/extensions/Exporters/FacebookExport/Mono.Facebook/Event.cs
index 2f19791..2ff027a 100644
--- a/extensions/Exporters/FacebookExport/Mono.Facebook/Event.cs
+++ b/extensions/Exporters/FacebookExport/Mono.Facebook/Event.cs
@@ -3,7 +3,6 @@
// // Authors:
// George Talusan (george at convolve.ca)
//
-
// Permission is hereby granted, free of charge, to any person obtaining
// a copy of this software and associated documentation files (the
// "Software"), to deal in the Software without restriction, including
@@ -28,118 +27,67 @@ using System.Collections.Generic;
using System.IO;
using System.Xml.Serialization;
using System.Text;
+using Mono.Facebook.Schemas;
namespace Mono.Facebook
{
public class EventMemberList
{
public Friend[] Attending;
-
public Friend[] Unsure;
-
public Friend[] Declined;
-
public Friend[] NotReplied;
}
- public class Event : SessionWrapper
+ public class Event : @event, SessionWrapper
{
- [XmlElement ("eid")]
- public long EId;
-
- [XmlElement ("name")]
- public string Name;
-
- [XmlElement ("tagline")]
- public string Tagline;
-
- [XmlElement ("nid")]
- public long NId;
-
- [XmlElement ("pic")]
- public string Pic;
+ [XmlIgnore]
+ public FacebookSession Session { get; set; }
[XmlIgnore ()]
public Uri PicUri
{
- get { return new Uri (Pic); }
+ get { return new Uri (pic); }
}
- [XmlElement ("pic_big")]
- public string PicBig;
-
[XmlIgnore ()]
public Uri PicBigUri
{
- get { return new Uri (PicBig); }
+ get { return new Uri (pic_big); }
}
- [XmlElement ("pic_small")]
- public string PicSmall;
-
[XmlIgnore ()]
public Uri PicSmallUri
{
- get { return new Uri (PicSmall); }
+ get { return new Uri (pic_small); }
}
- [XmlElement ("host")]
- public string Host;
-
- [XmlElement ("description")]
- public string Description;
-
- [XmlElement ("event_type")]
- public string EventType;
-
- [XmlElement ("event_subtype")]
- public string EventSubType;
-
- [XmlElement ("start_time")]
- public long StartTime;
-
- [XmlElement ("end_time")]
- public long EndTime;
-
- [XmlElement ("creator")]
- public long? Creator;
-
- [XmlElement ("update_time")]
- public long UpdateTime;
-
- [XmlElement ("location")]
- public string Location;
-
- [XmlElement ("venue")]
- public Location Venue;
-
[XmlIgnore ()]
public EventMemberList MemberList {
get {
- EventMembersResponse rsp = Session.Util.GetResponse<EventMembersResponse> ("facebook.events.getMembers",
+ var rsp = Session.Util.GetResponse<event_members> ("facebook.events.getMembers",
FacebookParam.Create ("session_key", Session.SessionKey),
FacebookParam.Create ("call_id", DateTime.Now.Ticks),
- FacebookParam.Create ("eid", EId));
+ FacebookParam.Create ("eid", eid));
EventMemberList list = new EventMemberList ();
- list.Attending = new Friend [rsp.Attending.UIds.Length];
+ list.Attending = new Friend [rsp.attending.uid.Length];
for (int i = 0; i < list.Attending.Length; i++)
- list.Attending[i] = new Friend (rsp.Attending.UIds [i], this.Session);
+ list.Attending[i] = new Friend (rsp.attending.uid [i], this.Session);
- list.Unsure = new Friend [rsp.Unsure.UIds.Length];
+ list.Unsure = new Friend [rsp.unsure.uid.Length];
for (int i = 0; i < list.Unsure.Length; i++)
- list.Unsure [i] = new Friend (rsp.Unsure.UIds [i], this.Session);
+ list.Unsure [i] = new Friend (rsp.unsure.uid [i], this.Session);
- list.Declined = new Friend [rsp.Declined.UIds.Length];
+ list.Declined = new Friend [rsp.declined.uid.Length];
for (int i = 0; i < list.Declined.Length; i ++)
- list.Declined [i] = new Friend (rsp.Declined.UIds [i], this.Session);
+ list.Declined [i] = new Friend (rsp.declined.uid [i], this.Session);
- list.NotReplied = new Friend [rsp.NotReplied.UIds.Length];
+ list.NotReplied = new Friend [rsp.not_replied.uid.Length];
return list;
}
-
}
}
}
diff --git a/extensions/Exporters/FacebookExport/Mono.Facebook/FacebookSession.cs b/extensions/Exporters/FacebookExport/Mono.Facebook/FacebookSession.cs
index 137b090..43377dd 100644
--- a/extensions/Exporters/FacebookExport/Mono.Facebook/FacebookSession.cs
+++ b/extensions/Exporters/FacebookExport/Mono.Facebook/FacebookSession.cs
@@ -33,6 +33,8 @@ using System.Collections.Generic;
using System.Text;
using System.IO;
using System.Net;
+using System.Linq;
+using Mono.Facebook.Schemas;
namespace Mono.Facebook
{
@@ -42,14 +44,13 @@ namespace Mono.Facebook
SessionInfo session_info;
string auth_token;
- internal Util Util
- {
- get { return util; }
+ internal string SessionKey {
+ get { return session_info.session_key; }
}
- internal string SessionKey
+ internal Util Util
{
- get { return session_info.SessionKey; }
+ get { return util; }
}
// use this for plain sessions
@@ -60,7 +61,7 @@ namespace Mono.Facebook
// use this if you want to re-start an infinite session
public FacebookSession (string api_key, SessionInfo session_info)
- : this (api_key, session_info.Secret)
+ : this (api_key, session_info.secret)
{
this.session_info = session_info;
}
@@ -82,7 +83,7 @@ namespace Mono.Facebook
{
return util.GetBoolResponse("facebook.users.hasAppPermission",
FacebookParam.Create ("call_id", DateTime.Now.Ticks),
- FacebookParam.Create ("session_key", session_info.SessionKey),
+ FacebookParam.Create ("session_key", session_info.session_key),
FacebookParam.Create ("ext_perm", permission));
}
@@ -91,7 +92,7 @@ namespace Mono.Facebook
return util.GetBoolResponse
("facebook.auth.revokeExtendedPermission",
FacebookParam.Create ("call_id", DateTime.Now.Ticks),
- FacebookParam.Create ("session_key", session_info.SessionKey),
+ FacebookParam.Create ("session_key", session_info.session_key),
FacebookParam.Create ("perm", permission));
}
@@ -104,7 +105,7 @@ namespace Mono.Facebook
{
this.session_info = util.GetResponse<SessionInfo>("facebook.auth.getSession",
FacebookParam.Create("auth_token", auth_token));
- this.util.SharedSecret = session_info.Secret;
+ this.util.SharedSecret = session_info.secret;
this.auth_token = string.Empty;
@@ -113,34 +114,30 @@ namespace Mono.Facebook
public Album[] GetAlbums ()
{
- AlbumsResponse rsp = util.GetResponse<AlbumsResponse> ("facebook.photos.getAlbums",
- FacebookParam.Create ("uid", session_info.UId),
- FacebookParam.Create ("session_key", session_info.SessionKey),
- FacebookParam.Create ("call_id", DateTime.Now.Ticks));
-
- // Fetch "Profile pictures" album ID, and remove it from list. We cannot upload there. Bgo#595952
- AlbumsResponse rsp_profile = util.GetResponse<AlbumsResponse> ("facebook.photos.getAlbums",
- FacebookParam.Create ("uid", session_info.UId),
- FacebookParam.Create ("session_key", session_info.SessionKey),
- FacebookParam.Create ("aid", "-3"),
- FacebookParam.Create ("call_id", DateTime.Now.Ticks));
+ try {
+ var rsp = util.GetResponse<AlbumsResponse> ("facebook.photos.getAlbums",
+ FacebookParam.Create ("uid", session_info.uid),
+ FacebookParam.Create ("session_key", session_info.session_key),
+ FacebookParam.Create ("call_id", DateTime.Now.Ticks));
- Album [] rsp_albums = new Album [rsp.Albums.Length - 1];
- uint id = 0;
- foreach (Album album in rsp.Albums)
- if (album.AId != rsp_profile.Albums [0].AId) {
- album.Session = this;
- rsp_albums [id ++] = album;
- }
+ var profile_rsp = util.GetResponse<AlbumsResponse> ("facebook.photos.getAlbums",
+ FacebookParam.Create ("uid", session_info.uid),
+ FacebookParam.Create ("session_key", session_info.session_key),
+ FacebookParam.Create ("call_id", DateTime.Now.Ticks),
+ FacebookParam.Create ("aid", -3));
- return rsp_albums;
+ // Filters out Profile pictures album, can't upload there.
+ return rsp.albums.Where ((a) => a.aid != profile_rsp.album [0].aid).ToArray ();
+ } catch (FormatException) {
+ return new Album[0];
+ }
}
public Album CreateAlbum (string name, string description, string location)
{
// create parameter list
List<FacebookParam> param_list = new List<FacebookParam> ();
- param_list.Add (FacebookParam.Create ("session_key", session_info.SessionKey));
+ param_list.Add (FacebookParam.Create ("session_key", session_info.session_key));
param_list.Add (FacebookParam.Create ("call_id", DateTime.Now.Ticks));
param_list.Add (FacebookParam.Create ("name", name));
@@ -160,13 +157,13 @@ namespace Mono.Facebook
public Group[] GetGroups ()
{
- return this.GetGroups (session_info.UId, null);
+ return this.GetGroups (session_info.uid, null);
}
public Group[] GetGroups (long? uid, long[] gids)
{
List<FacebookParam> param_list = new List<FacebookParam>();
- param_list.Add (FacebookParam.Create ("session_key", session_info.SessionKey));
+ param_list.Add (FacebookParam.Create ("session_key", session_info.session_key));
param_list.Add (FacebookParam.Create ("call_id", DateTime.Now.Ticks));
if (uid != null)
param_list.Add (FacebookParam.Create ("uid", uid));
@@ -184,13 +181,13 @@ namespace Mono.Facebook
public Event[] GetEvents ()
{
- return GetEvents (session_info.UId, null, 0, 0, null);
+ return GetEvents (session_info.uid, null, 0, 0, null);
}
public Event[] GetEvents (long? uid, long[] eids, long start_time, long end_time, string rsvp_status)
{
List<FacebookParam> param_list = new List<FacebookParam>();
- param_list.Add (FacebookParam.Create ("session_key", session_info.SessionKey));
+ param_list.Add (FacebookParam.Create ("session_key", session_info.session_key));
param_list.Add (FacebookParam.Create ("call_id", DateTime.Now.Ticks));
if (uid != null)
param_list.Add (FacebookParam.Create ("uid", uid));
@@ -224,7 +221,7 @@ namespace Mono.Facebook
public User[] GetUserInfo (long[] uids, string[] fields)
{
List<FacebookParam> param_list = new List<FacebookParam>();
- param_list.Add (FacebookParam.Create ("session_key", session_info.SessionKey));
+ param_list.Add (FacebookParam.Create ("session_key", session_info.session_key));
param_list.Add (FacebookParam.Create ("call_id", DateTime.Now.Ticks));
if (uids == null || uids.Length == 0)
@@ -239,14 +236,14 @@ namespace Mono.Facebook
public Me GetLoggedInUser ()
{
- return new Me (session_info.UId, this);
+ return new Me (session_info.uid, this);
}
public Notifications GetNotifications ()
{
Notifications notifications = util.GetResponse<Notifications>("facebook.notifications.get",
- FacebookParam.Create ("uid", session_info.UId),
- FacebookParam.Create ("session_key", session_info.SessionKey),
+ FacebookParam.Create ("uid", session_info.uid),
+ FacebookParam.Create ("session_key", session_info.session_key),
FacebookParam.Create ("call_id", DateTime.Now.Ticks));
foreach (Friend f in notifications.FriendRequests)
@@ -258,7 +255,7 @@ namespace Mono.Facebook
public Friend[] GetFriends ()
{
FriendsResponse response = Util.GetResponse<FriendsResponse>("facebook.friends.get",
- FacebookParam.Create ("session_key", SessionKey),
+ FacebookParam.Create ("session_key", session_info.session_key),
FacebookParam.Create ("call_id", DateTime.Now.Ticks));
Friend[] friends = new Friend[response.UIds.Length];
@@ -277,7 +274,7 @@ namespace Mono.Facebook
public bool AreFriends (long uid1, long uid2)
{
AreFriendsResponse response = Util.GetResponse<AreFriendsResponse>("facebook.friends.areFriends",
- FacebookParam.Create ("session_key", SessionKey),
+ FacebookParam.Create ("session_key", session_info.session_key),
FacebookParam.Create ("call_id", DateTime.Now.Ticks),
FacebookParam.Create ("uids1", uid1),
FacebookParam.Create ("uids2", uid2));
@@ -288,7 +285,7 @@ namespace Mono.Facebook
public FriendInfo[] AreFriends (long[] uids1, long[] uids2)
{
List<FacebookParam> param_list = new List<FacebookParam> ();
- param_list.Add (FacebookParam.Create ("session_key", session_info.SessionKey));
+ param_list.Add (FacebookParam.Create ("session_key", session_info.session_key));
param_list.Add (FacebookParam.Create ("call_id", DateTime.Now.Ticks));
if (uids1 == null || uids1.Length == 0)
@@ -307,7 +304,7 @@ namespace Mono.Facebook
public XmlDocument Query (string sql_query)
{
XmlDocument doc = Util.GetResponse ("facebook.fql.query",
- FacebookParam.Create ("session_key", SessionKey),
+ FacebookParam.Create ("session_key", session_info.session_key),
FacebookParam.Create ("call_id", DateTime.Now.Ticks),
FacebookParam.Create ("query", sql_query));
diff --git a/extensions/Exporters/FacebookExport/Mono.Facebook/Friend.cs b/extensions/Exporters/FacebookExport/Mono.Facebook/Friend.cs
index 775e9e1..de26293 100644
--- a/extensions/Exporters/FacebookExport/Mono.Facebook/Friend.cs
+++ b/extensions/Exporters/FacebookExport/Mono.Facebook/Friend.cs
@@ -34,8 +34,8 @@ namespace Mono.Facebook
{
public class Friend : SessionWrapper
{
- [XmlElement ("uid")]
- public long UId;
+ public FacebookSession Session { get; set; }
+ public long UId { get; set; }
public Friend (long UId, FacebookSession session)
{
@@ -43,9 +43,6 @@ namespace Mono.Facebook
this.Session = session;
}
- public Friend ()
- { }
-
public User GetUserInfo ()
{
User[] users = Session.GetUserInfo (new long[] { UId }, User.FIELDS);
diff --git a/extensions/Exporters/FacebookExport/Mono.Facebook/Group.cs b/extensions/Exporters/FacebookExport/Mono.Facebook/Group.cs
index be2dc6d..719fd83 100644
--- a/extensions/Exporters/FacebookExport/Mono.Facebook/Group.cs
+++ b/extensions/Exporters/FacebookExport/Mono.Facebook/Group.cs
@@ -28,34 +28,14 @@
//
using System;
using System.Xml.Serialization;
+using Mono.Facebook.Schemas;
namespace Mono.Facebook
{
- public class Group : SessionWrapper
+ public class Group : group, SessionWrapper
{
- [XmlElement ("gid")]
- public long GId;
-
- [XmlElement ("name")]
- public string Name;
-
- [XmlElement ("nid")]
- public int NId;
-
- [XmlElement ("description")]
- public string Description;
-
- [XmlElement ("group_type")]
- public string GroupType;
-
- [XmlElement ("group_subtype")]
- public string GroupSubType;
-
- [XmlElement ("recent_news")]
- public string RecentNews;
-
- [XmlElement ("pic")]
- public string pic;
+ [XmlIgnore]
+ public FacebookSession Session { get; set; }
[XmlIgnore ()]
public Uri Picture
@@ -63,36 +43,18 @@ namespace Mono.Facebook
get { return new Uri (pic); }
}
- [XmlElement ("pic_big")]
- public string pic_big;
-
[XmlIgnore ()]
public Uri PictureBig
{
get { return new Uri (pic_big); }
}
- [XmlElement ("pic_small")]
- public string pic_small;
-
[XmlIgnore ()]
public Uri PictureSmall
{
get { return new Uri (pic_small); }
}
- [XmlElement ("creator")]
- public System.Nullable<long> Creator;
-
- [XmlElement ("update_time")]
- public long UpdateTime;
-
- [XmlElement ("office")]
- public string Office;
-
- [XmlElement ("website")]
- public string website;
-
[XmlIgnore ()]
public Uri WebSite
{
@@ -105,14 +67,10 @@ namespace Mono.Facebook
}
}
- [XmlElement ("venue")]
- public Location Venue;
-
-
public GroupMemberList GetMembers ()
{
GroupMembersResponse rsp = Session.Util.GetResponse<GroupMembersResponse>("facebook.groups.getMembers",
- FacebookParam.Create ("gid", GId),
+ FacebookParam.Create ("gid", gid),
FacebookParam.Create ("call_id", DateTime.Now.Ticks),
FacebookParam.Create ("session_key", Session.SessionKey));
diff --git a/extensions/Exporters/FacebookExport/Mono.Facebook/Photo.cs b/extensions/Exporters/FacebookExport/Mono.Facebook/Photo.cs
index e0b2887..3ddbcdf 100644
--- a/extensions/Exporters/FacebookExport/Mono.Facebook/Photo.cs
+++ b/extensions/Exporters/FacebookExport/Mono.Facebook/Photo.cs
@@ -6,7 +6,6 @@
//
// (C) Copyright 2007 Novell, Inc. (http://www.novell.com)
//
-
// Permission is hereby granted, free of charge, to any person obtaining
// a copy of this software and associated documentation files (the
// "Software"), to deal in the Software without restriction, including
@@ -27,43 +26,23 @@
// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
//
using System.Xml.Serialization;
+using Mono.Facebook.Schemas;
namespace Mono.Facebook
{
- [XmlRoot ("photos_upload_response", Namespace="http://api.facebook.com/1.0/")]
- public class Photo : SessionWrapper
+ [System.Xml.Serialization.XmlRootAttribute("photos_upload_response", Namespace="http://api.facebook.com/1.0/")]
+ public class Photo : photo, SessionWrapper
{
- [XmlElement ("pid")]
- public long PId;
-
- [XmlElement ("aid")]
- public long AId;
-
- [XmlElement ("owner")]
- public long Owner;
-
- [XmlElement ("src")]
- public string Source;
-
- [XmlElement ("src_big")]
- public string SourceBig;
-
- [XmlElement ("src_small")]
- public string SourceSmall;
-
- [XmlElement ("link")]
- public string Link;
-
- [XmlElement ("caption")]
- public string Caption;
+ [XmlIgnore]
+ public FacebookSession Session { get; set; }
- [XmlElement ("created")]
- public long Created;
+ [XmlIgnore]
+ public string PId { get { return pid; } }
public Tag[] GetTags ()
{
PhotoTagsResponse rsp = Session.Util.GetResponse<PhotoTagsResponse> ("facebook.photos.getTags",
- FacebookParam.Create ("pids", PId),
+ FacebookParam.Create ("pids", pid),
FacebookParam.Create ("session_key", Session.SessionKey),
FacebookParam.Create ("call_id", System.DateTime.Now.Ticks));
@@ -75,16 +54,16 @@ namespace Mono.Facebook
public Album GetAlbum ()
{
- AlbumsResponse rsp = Session.Util.GetResponse<AlbumsResponse> ("facebook.photos.getAlbums",
- FacebookParam.Create ("aids", AId),
+ var rsp = Session.Util.GetResponse<AlbumsResponse> ("facebook.photos.getAlbums",
+ FacebookParam.Create ("aids", aid),
FacebookParam.Create ("session_key", Session.SessionKey),
FacebookParam.Create ("call_id", System.DateTime.Now.Ticks));
- if (rsp.Albums.Length < 1)
+ if (rsp.album.Length < 1)
return null;
- rsp.Albums[0].Session = Session;
- return rsp.Albums[0];
+ rsp.album[0].Session = Session;
+ return rsp.album[0];
}
// does not work right now: cannot tag photo already visible on facebook
diff --git a/extensions/Exporters/FacebookExport/Mono.Facebook/Responses.cs b/extensions/Exporters/FacebookExport/Mono.Facebook/Responses.cs
index 622e180..105e737 100644
--- a/extensions/Exporters/FacebookExport/Mono.Facebook/Responses.cs
+++ b/extensions/Exporters/FacebookExport/Mono.Facebook/Responses.cs
@@ -28,60 +28,26 @@
//
using System;
using System.Xml.Serialization;
+using Mono.Facebook.Schemas;
namespace Mono.Facebook
{
- [XmlRoot ("auth_getSession_response", Namespace = "http://api.facebook.com/1.0/", IsNullable = false)]
- public class SessionInfo
- {
- [XmlElement ("session_key")]
- public string SessionKey;
-
- [XmlElement ("uid")]
- public long UId;
-
- [XmlElement ("secret")]
- public string Secret;
-
- [XmlElement ("expires")]
- public long Expires;
-
- [XmlIgnore ()]
- public bool IsInfinite
- {
- get { return Expires == 0; }
- }
-
- public SessionInfo ()
- {}
-
- // use this if you want to create a session based on infinite session
- // credentials
- public SessionInfo (string session_key, long uid, string secret)
- {
- this.SessionKey = session_key;
- this.UId = uid;
- this.Secret = secret;
- this.Expires = 0;
- }
- }
-
[XmlRoot ("photos_getAlbums_response", Namespace = "http://api.facebook.com/1.0/", IsNullable = false)]
public class AlbumsResponse
{
- [XmlElement ("album")]
- public Album[] album_array;
+ [XmlElement ("album")]
+ public Album[] album;
[XmlIgnore ()]
- public Album[] Albums
+ public Album[] albums
{
- get { return album_array ?? new Album[0]; }
+ get { return album ?? new Album[0]; }
}
- [XmlAttribute ("list")]
- public bool List;
+ public bool list;
}
+
[XmlRoot ("photos_get_response", Namespace = "http://api.facebook.com/1.0/", IsNullable = false)]
public class PhotosResponse
{
@@ -173,22 +139,6 @@ namespace Mono.Facebook
public bool List;
}
- [XmlRoot ("events_getMembers_response", Namespace = "http://api.facebook.com/1.0/", IsNullable = false)]
- public class EventMembersResponse
- {
- [XmlElement ("attending")]
- public PeopleList Attending;
-
- [XmlElement ("unsure")]
- public PeopleList Unsure;
-
- [XmlElement ("declined")]
- public PeopleList Declined;
-
- [XmlElement ("not_replied")]
- public PeopleList NotReplied;
- }
-
[XmlRoot ("friends_get_response", Namespace = "http://api.facebook.com/1.0/", IsNullable = false)]
public class FriendsResponse
{
diff --git a/extensions/Exporters/FacebookExport/Mono.Facebook/SessionInfo.cs b/extensions/Exporters/FacebookExport/Mono.Facebook/SessionInfo.cs
new file mode 100644
index 0000000..f385ef3
--- /dev/null
+++ b/extensions/Exporters/FacebookExport/Mono.Facebook/SessionInfo.cs
@@ -0,0 +1,56 @@
+//
+// Mono.Facebook.SessionInfo.cs:
+//
+// Authors:
+// Ruben Vermeersch (ruben at savanne.be)
+//
+// (C) Copyright 2007 Novell, Inc. (http://www.novell.com)
+//
+// Permission is hereby granted, free of charge, to any person obtaining
+// a copy of this software and associated documentation files (the
+// "Software"), to deal in the Software without restriction, including
+// without limitation the rights to use, copy, modify, merge, publish,
+// distribute, sublicense, and/or sell copies of the Software, and to
+// permit persons to whom the Software is furnished to do so, subject to
+// the following conditions:
+//
+// The above copyright notice and this permission notice shall be
+// included in all copies or substantial portions of the Software.
+//
+// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
+// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
+// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
+// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+//
+using System;
+using System.Xml.Serialization;
+using Mono.Facebook.Schemas;
+
+namespace Mono.Facebook
+{
+ [System.Xml.Serialization.XmlRootAttribute("auth_getSession_response", Namespace="http://api.facebook.com/1.0/", IsNullable=false)]
+ public class SessionInfo : session_info
+ {
+ [XmlIgnore]
+ public bool IsInfinite
+ {
+ get { return expires == 0; }
+ }
+
+ public SessionInfo ()
+ {}
+
+ // use this if you want to create a session based on infinite session
+ // credentials
+ public SessionInfo (string session_key, long uid, string secret)
+ {
+ this.session_key = session_key;
+ this.uid = uid;
+ this.secret = secret;
+ this.expires = 0;
+ }
+ }
+}
diff --git a/extensions/Exporters/FacebookExport/Mono.Facebook/SessionWrapper.cs b/extensions/Exporters/FacebookExport/Mono.Facebook/SessionWrapper.cs
index 3a06611..5874380 100644
--- a/extensions/Exporters/FacebookExport/Mono.Facebook/SessionWrapper.cs
+++ b/extensions/Exporters/FacebookExport/Mono.Facebook/SessionWrapper.cs
@@ -30,9 +30,8 @@ using System.Xml.Serialization;
namespace Mono.Facebook
{
- public class SessionWrapper
+ internal interface SessionWrapper
{
- [XmlIgnore ()]
- internal FacebookSession Session;
+ FacebookSession Session { get; set; }
}
}
diff --git a/extensions/Exporters/FacebookExport/Mono.Facebook/Tag.cs b/extensions/Exporters/FacebookExport/Mono.Facebook/Tag.cs
index 27b7dc9..4d7393e 100644
--- a/extensions/Exporters/FacebookExport/Mono.Facebook/Tag.cs
+++ b/extensions/Exporters/FacebookExport/Mono.Facebook/Tag.cs
@@ -6,7 +6,6 @@
//
// (C) Copyright 2007 Novell, Inc. (http://www.novell.com)
//
-
// Permission is hereby granted, free of charge, to any person obtaining
// a copy of this software and associated documentation files (the
// "Software"), to deal in the Software without restriction, including
@@ -28,27 +27,21 @@
//
using System.Xml.Serialization;
+using Mono.Facebook.Schemas;
namespace Mono.Facebook
{
- [XmlRoot ("photos_addTag_response", Namespace="http://api.facebook.com/v1.0")]
- public class Tag : SessionWrapper
+ public class Tag : photo_tag, SessionWrapper
{
- [XmlElement ("pid")]
- public long PId;
-
- [XmlElement ("subject")]
- public long Subject;
-
- [XmlElement ("xcoord")]
- public decimal XCoordinate;
-
- [XmlElement ("ycoord")]
- public decimal YCoordinate;
-
+ [XmlIgnore]
+ public FacebookSession Session { get; set; }
+
+ [XmlIgnore]
+ public long Subject { get { return subject; } }
+
public Photo GetPhoto ()
{
- PhotosResponse rsp = Session.Util.GetResponse<PhotosResponse> ("facebook.photos.get", FacebookParam.Create ("pids", PId),
+ PhotosResponse rsp = Session.Util.GetResponse<PhotosResponse> ("facebook.photos.get", FacebookParam.Create ("pids", pid),
FacebookParam.Create ("session_key", Session.SessionKey),
FacebookParam.Create ("call_id", System.DateTime.Now.Ticks));
diff --git a/extensions/Exporters/FacebookExport/Mono.Facebook/User.cs b/extensions/Exporters/FacebookExport/Mono.Facebook/User.cs
index e75aabc..3d1ca17 100644
--- a/extensions/Exporters/FacebookExport/Mono.Facebook/User.cs
+++ b/extensions/Exporters/FacebookExport/Mono.Facebook/User.cs
@@ -29,166 +29,11 @@
//
using System;
using System.Xml.Serialization;
+using Mono.Facebook.Schemas;
namespace Mono.Facebook
{
- public class Affiliation
- {
- [XmlElement ("nid")]
- public long NId;
-
- [XmlElement ("name")]
- public string Name;
-
- [XmlElement ("type")]
- public string Type;
-
- [XmlElement ("status")]
- public string Status;
-
- [XmlElement ("year")]
- public string Year;
- }
-
- public class Affiliations
- {
- [XmlElement ("affiliation")]
- public Affiliation[] affiliations_array;
-
- [XmlIgnore ()]
- public Affiliation[] AffiliationCollection
- {
- get { return affiliations_array ?? new Affiliation[0]; }
- }
- }
-
- public class Concentrations
- {
- [XmlElement ("concentration")]
- public string[] concentration_array;
-
- [XmlIgnore ()]
- public string[] ConcentrationCollection
- {
- get { return concentration_array ?? new string[0]; }
- }
- }
-
- public class EducationHistory
- {
- [XmlElement ("education_info")]
- public EducationInfo[] educations_array;
-
- [XmlIgnore ()]
- public EducationInfo[] EducationInfo
- {
- get { return educations_array ?? new EducationInfo[0]; }
- }
- }
-
- public class EducationInfo
- {
- [XmlElement ("name")]
- public string Name;
-
- [XmlElement ("year")]
- public int Year;
-
- [XmlElement ("concentrations")]
- public Concentrations concentrations;
-
- [XmlIgnore ()]
- public string[] Concentrations
- {
- get { return concentrations.ConcentrationCollection; }
- }
- }
-
- public class HighSchoolInfo
- {
- [XmlElement ("hs1_info")]
- public string HighSchoolOneName;
-
- [XmlElement ("hs2_info")]
- public string HighSchoolTwoName;
-
- [XmlElement ("grad_year")]
- public int GraduationYear;
-
- [XmlElement ("hs1_id")]
- public int HighSchoolOneId;
-
- [XmlElement ("hs2_id")]
- public int HighSchoolTwoId;
- }
-
- public class MeetingFor
- {
- [XmlElement ("seeking")]
- public string[] seeking;
-
- [XmlIgnore ()]
- public string[] Seeking
- {
- get { return seeking ?? new string[0]; }
- }
- }
-
- public class MeetingSex
- {
- [XmlElement ("sex")]
- public string[] sex;
-
- [XmlIgnore ()]
- public string[] Sex
- {
- get { return sex ?? new string[0]; }
- }
- }
-
- public class Status
- {
- [XmlElement ("message")]
- public string Message;
-
- [XmlElement ("time")]
- public long Time;
- }
-
- public class WorkHistory
- {
- [XmlElement ("work_info")]
- public WorkInfo[] workinfo_array;
-
- [XmlIgnore ()]
- public WorkInfo[] WorkInfo
- {
- get { return workinfo_array ?? new WorkInfo[0]; }
- }
- }
-
- public class WorkInfo
- {
- [XmlElement ("location")]
- public Location Location;
-
- [XmlElement ("company_name")]
- public string CompanyName;
-
- [XmlElement ("position")]
- public string Position;
-
- [XmlElement ("description")]
- public string Description;
-
- [XmlElement ("start_date")]
- public string StartDate;
-
- [XmlElement ("end_date")]
- public string EndDate;
- }
-
- public class User : Friend
+ public class User : user
{
public static readonly string[] FIELDS = { "about_me", "activities", "affiliations", "birthday", "books",
"current_location", "education_history", "first_name", "hometown_location", "interests", "last_name",
@@ -196,175 +41,22 @@ namespace Mono.Facebook
"quotes", "relationship_status", "religion", "sex", "significant_other_id",
"status", "timezone", "tv", "uid", "wall_count" };
- [XmlElement ("about_me")]
- public string AboutMe;
-
- [XmlElement ("activities")]
- public string Activities;
-
- [XmlElement ("affiliations")]
- public Affiliations affiliations;
-
- [XmlIgnore ()]
- public Affiliation[] Affiliations
- {
- get
- {
- if (affiliations == null)
- {
- return new Affiliation[0];
- }
- else
- {
- return affiliations.AffiliationCollection ?? new Affiliation[0];
- }
- }
- }
-
- [XmlElement ("birthday")]
- public string Birthday;
-
- [XmlElement ("books")]
- public string Books;
-
- [XmlElement ("current_location")]
- public Location CurrentLocation;
-
- [XmlElement ("education_history")]
- public EducationHistory EducationHistory;
-
- [XmlElement ("first_name")]
- public string FirstName;
-
- [XmlElement ("hometown_location")]
- public Location HomeTownLocation;
-
- [XmlElement ("hs_info")]
- public HighSchoolInfo HighSchoolInfo;
-
- [XmlElement ("interests")]
- public string Interests;
-
- [XmlElement ("is_app_user")]
- public string is_app_user;
-
- public bool IsAppUser {
- get {
- return Util.GetBoolFromString(is_app_user);
- }
- }
-
- [XmlElement ("last_name")]
- public string LastName;
-
- [XmlElement ("meeting_for")]
- public MeetingFor MeetingFor;
-
- [XmlElement ("meeting_sex")]
- public MeetingSex MeetingSex;
-
- [XmlElement ("movies")]
- public string Movies;
-
- [XmlElement ("music")]
- public string Music;
-
- [XmlElement ("name")]
- public string Name;
-
- [XmlElement("notes_count")]
- public string notes_count;
-
- [XmlIgnore()]
- public int NotesCount {
- get {
- return Util.GetIntFromString(notes_count);
- }
- }
-
- [XmlElement ("pic")]
- public string Pic;
-
[XmlIgnore ()]
public Uri PicUri
{
- get { return new Uri (Pic); }
+ get { return new Uri (pic); }
}
- [XmlElement ("pic_big")]
- public string PicBig;
-
[XmlIgnore ()]
public Uri PicBigUri
{
- get { return new Uri (PicBig); }
+ get { return new Uri (pic_big); }
}
- [XmlElement ("pic_small")]
- public string PicSmall;
-
[XmlIgnore ()]
public Uri PicSmallUri
{
- get { return new Uri (PicSmall); }
- }
-
- [XmlElement ("political")]
- public string Political;
-
- [XmlElement ("profile_update_time")]
- public long ProfileUpdateTime;
-
- [XmlElement ("quotes")]
- public string Quotes;
-
- [XmlElement ("relationship_status")]
- public string RelationshipStatus;
-
- [XmlElement ("religion")]
- public string Religion;
-
- [XmlElement ("sex")]
- public string Sex;
-
- [XmlElement ("significant_other_id")]
- public string significant_other_id;
-
- [XmlIgnore ()]
- public long SignificantOtherId
- {
- get {
- return Util.GetIntFromString(significant_other_id);
- }
- }
-
- [XmlElement ("status")]
- public Status Status;
-
- [XmlElement ("timezone")]
- public string timezone;
-
- public int TimeZone {
- get {
- return Util.GetIntFromString(timezone);
- }
- }
-
- [XmlElement ("tv")]
- public string Tv;
-
- [XmlElement ("wall_count")]
- public string wall_count;
-
- [XmlIgnore()]
- public int WallCount
- {
- get {
- return Util.GetIntFromString(wall_count);
- }
+ get { return new Uri (pic_small); }
}
-
- [XmlElement ("work_history")]
- public WorkHistory WorkHistory;
}
}
diff --git a/extensions/Exporters/FacebookExport/Mono.Facebook/Util.cs b/extensions/Exporters/FacebookExport/Mono.Facebook/Util.cs
index 0502ae8..b71cb0a 100644
--- a/extensions/Exporters/FacebookExport/Mono.Facebook/Util.cs
+++ b/extensions/Exporters/FacebookExport/Mono.Facebook/Util.cs
@@ -134,7 +134,7 @@ namespace Mono.Facebook
return doc;
}
- internal Photo Upload (long aid, string caption, string path, string session_key)
+ internal Photo Upload (string aid, string caption, string path, string session_key)
{
// check for file
FileInfo file = new FileInfo (path);
diff --git a/extensions/Exporters/FacebookExport/Mono.Facebook/facebook.cs b/extensions/Exporters/FacebookExport/Mono.Facebook/facebook.cs
new file mode 100644
index 0000000..0f14824
--- /dev/null
+++ b/extensions/Exporters/FacebookExport/Mono.Facebook/facebook.cs
@@ -0,0 +1,4305 @@
+// ------------------------------------------------------------------------------
+// <autogenerated>
+// This code was generated by a tool.
+// Mono Runtime Version: 1.1.4322.2032
+//
+// Changes to this file may cause incorrect behavior and will be lost if
+// the code is regenerated.
+// </autogenerated>
+// ------------------------------------------------------------------------------
+
+//
+//This source code was auto-generated by MonoXSD
+//
+namespace Mono.Facebook.Schemas {
+
+
+ /// <remarks/>
+ [System.Xml.Serialization.XmlTypeAttribute(Namespace="http://api.facebook.com/1.0/")]
+ [System.Xml.Serialization.XmlRootAttribute("feed_getRegisteredTemplateBundleByID_response", Namespace="http://api.facebook.com/1.0/")]
+ public class template_bundle {
+
+ /// <remarks/>
+ public template_bundleOne_line_story_templates one_line_story_templates;
+
+ /// <remarks/>
+ public template_bundleShort_story_templates short_story_templates;
+
+ /// <remarks/>
+ public full_story_template full_story_template;
+
+ /// <remarks/>
+ public template_bundleAction_links action_links;
+
+ /// <remarks/>
+ public long time_created;
+
+ /// <remarks/>
+ public long template_bundle_id;
+ }
+
+ /// <remarks/>
+ [System.Xml.Serialization.XmlTypeAttribute(Namespace="http://api.facebook.com/1.0/")]
+ public class template_bundleOne_line_story_templates {
+
+ /// <remarks/>
+ [System.Xml.Serialization.XmlAttributeAttribute(Namespace="")]
+ public bool list;
+
+ /// <remarks/>
+ [System.Xml.Serialization.XmlIgnore()]
+ public bool listSpecified;
+
+ /// <remarks/>
+ [System.Xml.Serialization.XmlElementAttribute("one_line_story_template")]
+ public string[] one_line_story_template;
+ }
+
+ /// <remarks/>
+ [System.Xml.Serialization.XmlTypeAttribute(Namespace="http://api.facebook.com/1.0/")]
+ public class template_bundleShort_story_templates {
+
+ /// <remarks/>
+ [System.Xml.Serialization.XmlAttributeAttribute(Namespace="")]
+ public bool list;
+
+ /// <remarks/>
+ [System.Xml.Serialization.XmlIgnore()]
+ public bool listSpecified;
+
+ /// <remarks/>
+ [System.Xml.Serialization.XmlElementAttribute("short_story_template")]
+ public short_story_template[] short_story_template;
+ }
+
+ /// <remarks/>
+ [System.Xml.Serialization.XmlTypeAttribute(Namespace="http://api.facebook.com/1.0/")]
+ public class short_story_template {
+
+ /// <remarks/>
+ public string template_title;
+
+ /// <remarks/>
+ public string template_body;
+ }
+
+ /// <remarks/>
+ [System.Xml.Serialization.XmlTypeAttribute(Namespace="http://api.facebook.com/1.0/")]
+ public class full_story_template {
+
+ /// <remarks/>
+ public string template_title;
+
+ /// <remarks/>
+ public string template_body;
+ }
+
+ /// <remarks/>
+ [System.Xml.Serialization.XmlTypeAttribute(Namespace="http://api.facebook.com/1.0/")]
+ public class template_bundleAction_links {
+
+ /// <remarks/>
+ [System.Xml.Serialization.XmlAttributeAttribute(Namespace="")]
+ public bool list;
+
+ /// <remarks/>
+ [System.Xml.Serialization.XmlIgnore()]
+ public bool listSpecified;
+
+ /// <remarks/>
+ [System.Xml.Serialization.XmlElementAttribute("stream_action_link")]
+ public stream_action_link[] stream_action_link;
+ }
+
+ /// <remarks/>
+ [System.Xml.Serialization.XmlTypeAttribute(Namespace="http://api.facebook.com/1.0/")]
+ public class stream_action_link {
+
+ /// <remarks/>
+ public string text;
+
+ /// <remarks/>
+ public string href;
+ }
+
+ /// <remarks/>
+ [System.Xml.Serialization.XmlTypeAttribute(Namespace="http://api.facebook.com/1.0/")]
+ [System.Xml.Serialization.XmlRootAttribute(Namespace="http://api.facebook.com/1.0/", IsNullable=false)]
+ public class batch_run_response {
+
+ /// <remarks/>
+ [System.Xml.Serialization.XmlAttributeAttribute(Namespace="")]
+ public bool list;
+
+ /// <remarks/>
+ [System.Xml.Serialization.XmlIgnore()]
+ public bool listSpecified;
+
+ /// <remarks/>
+ [System.Xml.Serialization.XmlElementAttribute("batch_run_response_elt")]
+ public string[] batch_run_response_elt;
+ }
+
+ /// <remarks/>
+ [System.Xml.Serialization.XmlTypeAttribute(Namespace="http://api.facebook.com/1.0/")]
+ [System.Xml.Serialization.XmlRootAttribute("data_getAssociationDefinition_response", Namespace="http://api.facebook.com/1.0/")]
+ public class object_assoc_info {
+
+ /// <remarks/>
+ public string name;
+
+ /// <remarks/>
+ public int assoc_type;
+
+ /// <remarks/>
+ public assoc_object_type assoc_info1;
+
+ /// <remarks/>
+ public assoc_object_type assoc_info2;
+ }
+
+ /// <remarks/>
+ [System.Xml.Serialization.XmlTypeAttribute(Namespace="http://api.facebook.com/1.0/")]
+ public class assoc_object_type {
+
+ /// <remarks/>
+ public string alias;
+
+ /// <remarks/>
+ public string object_type;
+
+ /// <remarks/>
+ public bool unique;
+ }
+
+ /// <remarks/>
+ [System.Xml.Serialization.XmlTypeAttribute(Namespace="http://api.facebook.com/1.0/")]
+ [System.Xml.Serialization.XmlRootAttribute("dashboard_getNews_response", Namespace="http://api.facebook.com/1.0/", IsNullable=false)]
+ public class container {
+ }
+
+ /// <remarks/>
+ [System.Xml.Serialization.XmlTypeAttribute(Namespace="http://api.facebook.com/1.0/")]
+ [System.Xml.Serialization.XmlRootAttribute("photos_upload_response", Namespace="http://api.facebook.com/1.0/")]
+ public class photo {
+
+ /// <remarks/>
+ public string pid;
+
+ /// <remarks/>
+ public string aid;
+
+ /// <remarks/>
+ public long owner;
+
+ /// <remarks/>
+ public string src;
+
+ /// <remarks/>
+ public string src_big;
+
+ /// <remarks/>
+ public string src_small;
+
+ /// <remarks/>
+ public string link;
+
+ /// <remarks/>
+ public string caption;
+
+ /// <remarks/>
+ public long created;
+
+ /// <remarks/>
+ public long story_fbid;
+
+ /// <remarks/>
+ public long modified;
+
+ /// <remarks/>
+ public long object_id;
+ }
+
+ /// <remarks/>
+ [System.Xml.Serialization.XmlTypeAttribute(Namespace="http://api.facebook.com/1.0/")]
+ [System.Xml.Serialization.XmlRootAttribute(Namespace="http://api.facebook.com/1.0/", IsNullable=false)]
+ public class links_getStats_response {
+
+ /// <remarks/>
+ [System.Xml.Serialization.XmlAttributeAttribute(Namespace="")]
+ public bool list;
+
+ /// <remarks/>
+ [System.Xml.Serialization.XmlIgnore()]
+ public bool listSpecified;
+
+ /// <remarks/>
+ [System.Xml.Serialization.XmlElementAttribute("link_stat")]
+ public link_stat[] link_stat;
+ }
+
+ /// <remarks/>
+ [System.Xml.Serialization.XmlTypeAttribute(Namespace="http://api.facebook.com/1.0/")]
+ public class link_stat {
+
+ /// <remarks/>
+ public string url;
+
+ /// <remarks/>
+ public long share_count;
+
+ /// <remarks/>
+ public long like_count;
+
+ /// <remarks/>
+ public long comment_count;
+
+ /// <remarks/>
+ public long total_count;
+
+ /// <remarks/>
+ public long click_count;
+
+ /// <remarks/>
+ public string normalized_url;
+ }
+
+ /// <remarks/>
+ [System.Xml.Serialization.XmlTypeAttribute(Namespace="http://api.facebook.com/1.0/")]
+ [System.Xml.Serialization.XmlRootAttribute(Namespace="http://api.facebook.com/1.0/", IsNullable=false)]
+ public class stream_getComments_response {
+
+ /// <remarks/>
+ [System.Xml.Serialization.XmlAttributeAttribute(Namespace="")]
+ public bool list;
+
+ /// <remarks/>
+ [System.Xml.Serialization.XmlIgnore()]
+ public bool listSpecified;
+
+ /// <remarks/>
+ [System.Xml.Serialization.XmlElementAttribute("comment")]
+ public comment[] comment;
+ }
+
+ /// <remarks/>
+ [System.Xml.Serialization.XmlTypeAttribute(Namespace="http://api.facebook.com/1.0/")]
+ public class comment {
+
+ /// <remarks/>
+ public string xid;
+
+ /// <remarks/>
+ public long fromid;
+
+ /// <remarks/>
+ public long time;
+
+ /// <remarks/>
+ public string text;
+
+ /// <remarks/>
+ public string id;
+
+ /// <remarks/>
+ public string username;
+
+ /// <remarks/>
+ public string reply_xid;
+
+ /// <remarks/>
+ public string post_id;
+
+ /// <remarks/>
+ public long app_id;
+ }
+
+ /// <remarks/>
+ [System.Xml.Serialization.XmlTypeAttribute(Namespace="http://api.facebook.com/1.0/")]
+ [System.Xml.Serialization.XmlRootAttribute("events_getMembers_response", Namespace="http://api.facebook.com/1.0/", IsNullable=false)]
+ public class event_members {
+
+ /// <remarks/>
+ public event_membersAttending attending;
+
+ /// <remarks/>
+ public event_membersUnsure unsure;
+
+ /// <remarks/>
+ public event_membersDeclined declined;
+
+ /// <remarks/>
+ public event_membersNot_replied not_replied;
+ }
+
+ /// <remarks/>
+ [System.Xml.Serialization.XmlTypeAttribute(Namespace="http://api.facebook.com/1.0/")]
+ public class event_membersAttending {
+
+ /// <remarks/>
+ [System.Xml.Serialization.XmlAttributeAttribute(Namespace="")]
+ public bool list;
+
+ /// <remarks/>
+ [System.Xml.Serialization.XmlIgnore()]
+ public bool listSpecified;
+
+ /// <remarks/>
+ [System.Xml.Serialization.XmlElementAttribute("uid")]
+ public long[] uid;
+ }
+
+ /// <remarks/>
+ [System.Xml.Serialization.XmlTypeAttribute(Namespace="http://api.facebook.com/1.0/")]
+ public class event_membersUnsure {
+
+ /// <remarks/>
+ [System.Xml.Serialization.XmlAttributeAttribute(Namespace="")]
+ public bool list;
+
+ /// <remarks/>
+ [System.Xml.Serialization.XmlIgnore()]
+ public bool listSpecified;
+
+ /// <remarks/>
+ [System.Xml.Serialization.XmlElementAttribute("uid")]
+ public long[] uid;
+ }
+
+ /// <remarks/>
+ [System.Xml.Serialization.XmlTypeAttribute(Namespace="http://api.facebook.com/1.0/")]
+ public class event_membersDeclined {
+
+ /// <remarks/>
+ [System.Xml.Serialization.XmlAttributeAttribute(Namespace="")]
+ public bool list;
+
+ /// <remarks/>
+ [System.Xml.Serialization.XmlIgnore()]
+ public bool listSpecified;
+
+ /// <remarks/>
+ [System.Xml.Serialization.XmlElementAttribute("uid")]
+ public long[] uid;
+ }
+
+ /// <remarks/>
+ [System.Xml.Serialization.XmlTypeAttribute(Namespace="http://api.facebook.com/1.0/")]
+ public class event_membersNot_replied {
+
+ /// <remarks/>
+ [System.Xml.Serialization.XmlAttributeAttribute(Namespace="")]
+ public bool list;
+
+ /// <remarks/>
+ [System.Xml.Serialization.XmlIgnore()]
+ public bool listSpecified;
+
+ /// <remarks/>
+ [System.Xml.Serialization.XmlElementAttribute("uid")]
+ public long[] uid;
+ }
+
+ /// <remarks/>
+ [System.Xml.Serialization.XmlTypeAttribute(Namespace="http://api.facebook.com/1.0/")]
+ [System.Xml.Serialization.XmlRootAttribute(Namespace="http://api.facebook.com/1.0/", IsNullable=false)]
+ public class fql_multiquery_response {
+
+ /// <remarks/>
+ [System.Xml.Serialization.XmlAttributeAttribute(Namespace="")]
+ public bool list;
+
+ /// <remarks/>
+ [System.Xml.Serialization.XmlIgnore()]
+ public bool listSpecified;
+
+ /// <remarks/>
+ [System.Xml.Serialization.XmlElementAttribute("fql_result")]
+ public fql_result[] fql_result;
+ }
+
+ /// <remarks/>
+ [System.Xml.Serialization.XmlTypeAttribute(Namespace="http://api.facebook.com/1.0/")]
+ public class fql_result {
+
+ /// <remarks/>
+ public string name;
+
+ /// <remarks/>
+ public string fql_result_set;
+ }
+
+ /// <remarks/>
+ [System.Xml.Serialization.XmlTypeAttribute(Namespace="http://api.facebook.com/1.0/")]
+ [System.Xml.Serialization.XmlRootAttribute("groups_getMembers_response", Namespace="http://api.facebook.com/1.0/", IsNullable=false)]
+ public class group_members {
+
+ /// <remarks/>
+ public group_membersMembers members;
+
+ /// <remarks/>
+ public group_membersAdmins admins;
+
+ /// <remarks/>
+ public group_membersOfficers officers;
+
+ /// <remarks/>
+ public group_membersNot_replied not_replied;
+ }
+
+ /// <remarks/>
+ [System.Xml.Serialization.XmlTypeAttribute(Namespace="http://api.facebook.com/1.0/")]
+ public class group_membersMembers {
+
+ /// <remarks/>
+ [System.Xml.Serialization.XmlAttributeAttribute(Namespace="")]
+ public bool list;
+
+ /// <remarks/>
+ [System.Xml.Serialization.XmlIgnore()]
+ public bool listSpecified;
+
+ /// <remarks/>
+ [System.Xml.Serialization.XmlElementAttribute("uid")]
+ public long[] uid;
+ }
+
+ /// <remarks/>
+ [System.Xml.Serialization.XmlTypeAttribute(Namespace="http://api.facebook.com/1.0/")]
+ public class group_membersAdmins {
+
+ /// <remarks/>
+ [System.Xml.Serialization.XmlAttributeAttribute(Namespace="")]
+ public bool list;
+
+ /// <remarks/>
+ [System.Xml.Serialization.XmlIgnore()]
+ public bool listSpecified;
+
+ /// <remarks/>
+ [System.Xml.Serialization.XmlElementAttribute("uid")]
+ public long[] uid;
+ }
+
+ /// <remarks/>
+ [System.Xml.Serialization.XmlTypeAttribute(Namespace="http://api.facebook.com/1.0/")]
+ public class group_membersOfficers {
+
+ /// <remarks/>
+ [System.Xml.Serialization.XmlAttributeAttribute(Namespace="")]
+ public bool list;
+
+ /// <remarks/>
+ [System.Xml.Serialization.XmlIgnore()]
+ public bool listSpecified;
+
+ /// <remarks/>
+ [System.Xml.Serialization.XmlElementAttribute("uid")]
+ public long[] uid;
+ }
+
+ /// <remarks/>
+ [System.Xml.Serialization.XmlTypeAttribute(Namespace="http://api.facebook.com/1.0/")]
+ public class group_membersNot_replied {
+
+ /// <remarks/>
+ [System.Xml.Serialization.XmlAttributeAttribute(Namespace="")]
+ public bool list;
+
+ /// <remarks/>
+ [System.Xml.Serialization.XmlIgnore()]
+ public bool listSpecified;
+
+ /// <remarks/>
+ [System.Xml.Serialization.XmlElementAttribute("uid")]
+ public long[] uid;
+ }
+
+ /// <remarks/>
+ [System.Xml.Serialization.XmlTypeAttribute(Namespace="http://api.facebook.com/1.0/")]
+ [System.Xml.Serialization.XmlRootAttribute(Namespace="http://api.facebook.com/1.0/", IsNullable=false)]
+ public class intl_getTranslations_response {
+
+ /// <remarks/>
+ [System.Xml.Serialization.XmlAttributeAttribute(Namespace="")]
+ public bool list;
+
+ /// <remarks/>
+ [System.Xml.Serialization.XmlIgnore()]
+ public bool listSpecified;
+
+ /// <remarks/>
+ [System.Xml.Serialization.XmlElementAttribute("locale_data")]
+ public locale_data[] locale_data;
+ }
+
+ /// <remarks/>
+ [System.Xml.Serialization.XmlTypeAttribute(Namespace="http://api.facebook.com/1.0/")]
+ public class locale_data {
+
+ /// <remarks/>
+ public string locale;
+
+ /// <remarks/>
+ public locale_dataStrings strings;
+ }
+
+ /// <remarks/>
+ [System.Xml.Serialization.XmlTypeAttribute(Namespace="http://api.facebook.com/1.0/")]
+ public class locale_dataStrings {
+
+ /// <remarks/>
+ [System.Xml.Serialization.XmlAttributeAttribute(Namespace="")]
+ public bool list;
+
+ /// <remarks/>
+ [System.Xml.Serialization.XmlIgnore()]
+ public bool listSpecified;
+
+ /// <remarks/>
+ [System.Xml.Serialization.XmlElementAttribute("locale_string")]
+ public locale_string[] locale_string;
+ }
+
+ /// <remarks/>
+ [System.Xml.Serialization.XmlTypeAttribute(Namespace="http://api.facebook.com/1.0/")]
+ public class locale_string {
+
+ /// <remarks/>
+ public string native_string;
+
+ /// <remarks/>
+ public locale_stringTranslations translations;
+ }
+
+ /// <remarks/>
+ [System.Xml.Serialization.XmlTypeAttribute(Namespace="http://api.facebook.com/1.0/")]
+ public class locale_stringTranslations {
+
+ /// <remarks/>
+ [System.Xml.Serialization.XmlAttributeAttribute(Namespace="")]
+ public bool list;
+
+ /// <remarks/>
+ [System.Xml.Serialization.XmlIgnore()]
+ public bool listSpecified;
+
+ /// <remarks/>
+ [System.Xml.Serialization.XmlElementAttribute("translation_info")]
+ public translation_info[] translation_info;
+ }
+
+ /// <remarks/>
+ [System.Xml.Serialization.XmlTypeAttribute(Namespace="http://api.facebook.com/1.0/")]
+ public class translation_info {
+
+ /// <remarks/>
+ public string translation;
+
+ /// <remarks/>
+ public string status;
+
+ /// <remarks/>
+ public string description;
+ }
+
+ /// <remarks/>
+ [System.Xml.Serialization.XmlTypeAttribute(Namespace="http://api.facebook.com/1.0/")]
+ [System.Xml.Serialization.XmlRootAttribute(Namespace="http://api.facebook.com/1.0/", IsNullable=false)]
+ public class links_get_response {
+
+ /// <remarks/>
+ [System.Xml.Serialization.XmlAttributeAttribute(Namespace="")]
+ public bool list;
+
+ /// <remarks/>
+ [System.Xml.Serialization.XmlIgnore()]
+ public bool listSpecified;
+
+ /// <remarks/>
+ [System.Xml.Serialization.XmlElementAttribute("link")]
+ public link[] link;
+ }
+
+ /// <remarks/>
+ [System.Xml.Serialization.XmlTypeAttribute(Namespace="http://api.facebook.com/1.0/")]
+ public class link {
+
+ /// <remarks/>
+ public long link_id;
+
+ /// <remarks/>
+ public long owner;
+
+ /// <remarks/>
+ public string owner_comment;
+
+ /// <remarks/>
+ public long created_time;
+
+ /// <remarks/>
+ public string title;
+
+ /// <remarks/>
+ public string summary;
+
+ /// <remarks/>
+ public string url;
+
+ /// <remarks/>
+ public linkImage_urls image_urls;
+ }
+
+ /// <remarks/>
+ [System.Xml.Serialization.XmlTypeAttribute(Namespace="http://api.facebook.com/1.0/")]
+ public class linkImage_urls {
+
+ /// <remarks/>
+ [System.Xml.Serialization.XmlAttributeAttribute(Namespace="")]
+ public bool list;
+
+ /// <remarks/>
+ [System.Xml.Serialization.XmlIgnore()]
+ public bool listSpecified;
+
+ /// <remarks/>
+ [System.Xml.Serialization.XmlElementAttribute("image_urls_elt")]
+ public string[] image_urls_elt;
+ }
+
+ /// <remarks/>
+ [System.Xml.Serialization.XmlTypeAttribute(Namespace="http://api.facebook.com/1.0/")]
+ [System.Xml.Serialization.XmlRootAttribute("video_getUploadLimits_response", Namespace="http://api.facebook.com/1.0/", IsNullable=false)]
+ public class video_limits {
+
+ /// <remarks/>
+ public int length;
+
+ /// <remarks/>
+ public long size;
+ }
+
+ /// <remarks/>
+ [System.Xml.Serialization.XmlTypeAttribute(Namespace="http://api.facebook.com/1.0/")]
+ [System.Xml.Serialization.XmlRootAttribute(Namespace="http://api.facebook.com/1.0/", IsNullable=false)]
+ public class connect_unregisterUsers_response {
+
+ /// <remarks/>
+ [System.Xml.Serialization.XmlAttributeAttribute(Namespace="")]
+ public bool list;
+
+ /// <remarks/>
+ [System.Xml.Serialization.XmlIgnore()]
+ public bool listSpecified;
+
+ /// <remarks/>
+ [System.Xml.Serialization.XmlElementAttribute("connect_unregisterUsers_response_elt")]
+ public string[] connect_unregisterUsers_response_elt;
+ }
+
+ /// <remarks/>
+ [System.Xml.Serialization.XmlTypeAttribute(Namespace="http://api.facebook.com/1.0/")]
+ [System.Xml.Serialization.XmlRootAttribute("privacy_get_response", Namespace="http://api.facebook.com/1.0/")]
+ public class privacy {
+
+ /// <remarks/>
+ public string description;
+
+ /// <remarks/>
+ public string value;
+
+ /// <remarks/>
+ public string friends;
+
+ /// <remarks/>
+ public privacyNetworks networks;
+
+ /// <remarks/>
+ public privacyAllow allow;
+
+ /// <remarks/>
+ public privacyDeny deny;
+ }
+
+ /// <remarks/>
+ [System.Xml.Serialization.XmlTypeAttribute(Namespace="http://api.facebook.com/1.0/")]
+ public class privacyNetworks {
+
+ /// <remarks/>
+ [System.Xml.Serialization.XmlAttributeAttribute(Namespace="")]
+ public bool list;
+
+ /// <remarks/>
+ [System.Xml.Serialization.XmlIgnore()]
+ public bool listSpecified;
+
+ /// <remarks/>
+ [System.Xml.Serialization.XmlElementAttribute("networks_elt")]
+ public string[] networks_elt;
+ }
+
+ /// <remarks/>
+ [System.Xml.Serialization.XmlTypeAttribute(Namespace="http://api.facebook.com/1.0/")]
+ public class privacyAllow {
+
+ /// <remarks/>
+ [System.Xml.Serialization.XmlAttributeAttribute(Namespace="")]
+ public bool list;
+
+ /// <remarks/>
+ [System.Xml.Serialization.XmlIgnore()]
+ public bool listSpecified;
+
+ /// <remarks/>
+ [System.Xml.Serialization.XmlElementAttribute("allow_elt")]
+ public string[] allow_elt;
+ }
+
+ /// <remarks/>
+ [System.Xml.Serialization.XmlTypeAttribute(Namespace="http://api.facebook.com/1.0/")]
+ public class privacyDeny {
+
+ /// <remarks/>
+ [System.Xml.Serialization.XmlAttributeAttribute(Namespace="")]
+ public bool list;
+
+ /// <remarks/>
+ [System.Xml.Serialization.XmlIgnore()]
+ public bool listSpecified;
+
+ /// <remarks/>
+ [System.Xml.Serialization.XmlElementAttribute("deny_elt")]
+ public string[] deny_elt;
+ }
+
+ /// <remarks/>
+ [System.Xml.Serialization.XmlTypeAttribute(Namespace="http://api.facebook.com/1.0/")]
+ [System.Xml.Serialization.XmlRootAttribute(Namespace="http://api.facebook.com/1.0/", IsNullable=false)]
+ public class admin_getMetrics_response {
+
+ /// <remarks/>
+ [System.Xml.Serialization.XmlAttributeAttribute(Namespace="")]
+ public bool list;
+
+ /// <remarks/>
+ [System.Xml.Serialization.XmlIgnore()]
+ public bool listSpecified;
+
+ /// <remarks/>
+ [System.Xml.Serialization.XmlElementAttribute("metrics")]
+ public metrics[] metrics;
+ }
+
+ /// <remarks/>
+ [System.Xml.Serialization.XmlTypeAttribute(Namespace="http://api.facebook.com/1.0/")]
+ public class metrics {
+
+ /// <remarks/>
+ public long end_time;
+
+ /// <remarks/>
+ [System.Xml.Serialization.XmlIgnore()]
+ public bool end_timeSpecified;
+
+ /// <remarks/>
+ public int active_users;
+
+ /// <remarks/>
+ [System.Xml.Serialization.XmlIgnore()]
+ public bool active_usersSpecified;
+
+ /// <remarks/>
+ public int api_calls;
+
+ /// <remarks/>
+ [System.Xml.Serialization.XmlIgnore()]
+ public bool api_callsSpecified;
+
+ /// <remarks/>
+ public int unique_api_calls;
+
+ /// <remarks/>
+ [System.Xml.Serialization.XmlIgnore()]
+ public bool unique_api_callsSpecified;
+
+ /// <remarks/>
+ public int canvas_page_views;
+
+ /// <remarks/>
+ [System.Xml.Serialization.XmlIgnore()]
+ public bool canvas_page_viewsSpecified;
+
+ /// <remarks/>
+ public int unique_canvas_page_views;
+
+ /// <remarks/>
+ [System.Xml.Serialization.XmlIgnore()]
+ public bool unique_canvas_page_viewsSpecified;
+
+ /// <remarks/>
+ public int canvas_http_request_time_avg;
+
+ /// <remarks/>
+ [System.Xml.Serialization.XmlIgnore()]
+ public bool canvas_http_request_time_avgSpecified;
+
+ /// <remarks/>
+ public int canvas_fbml_render_time_avg;
+
+ /// <remarks/>
+ [System.Xml.Serialization.XmlIgnore()]
+ public bool canvas_fbml_render_time_avgSpecified;
+
+ /// <remarks/>
+ public int unique_adds;
+
+ /// <remarks/>
+ [System.Xml.Serialization.XmlIgnore()]
+ public bool unique_addsSpecified;
+
+ /// <remarks/>
+ public int unique_removes;
+
+ /// <remarks/>
+ [System.Xml.Serialization.XmlIgnore()]
+ public bool unique_removesSpecified;
+
+ /// <remarks/>
+ public int unique_blocks;
+
+ /// <remarks/>
+ [System.Xml.Serialization.XmlIgnore()]
+ public bool unique_blocksSpecified;
+
+ /// <remarks/>
+ public int unique_unblocks;
+
+ /// <remarks/>
+ [System.Xml.Serialization.XmlIgnore()]
+ public bool unique_unblocksSpecified;
+
+ /// <remarks/>
+ public int canvas_page_views_http_code_0;
+
+ /// <remarks/>
+ [System.Xml.Serialization.XmlIgnore()]
+ public bool canvas_page_views_http_code_0Specified;
+
+ /// <remarks/>
+ public int canvas_page_views_http_code_100;
+
+ /// <remarks/>
+ [System.Xml.Serialization.XmlIgnore()]
+ public bool canvas_page_views_http_code_100Specified;
+
+ /// <remarks/>
+ public int canvas_page_views_http_code_200;
+
+ /// <remarks/>
+ [System.Xml.Serialization.XmlIgnore()]
+ public bool canvas_page_views_http_code_200Specified;
+
+ /// <remarks/>
+ public int canvas_page_views_http_code_200ND;
+
+ /// <remarks/>
+ [System.Xml.Serialization.XmlIgnore()]
+ public bool canvas_page_views_http_code_200NDSpecified;
+
+ /// <remarks/>
+ public int canvas_page_views_http_code_301;
+
+ /// <remarks/>
+ [System.Xml.Serialization.XmlIgnore()]
+ public bool canvas_page_views_http_code_301Specified;
+
+ /// <remarks/>
+ public int canvas_page_views_http_code_302;
+
+ /// <remarks/>
+ [System.Xml.Serialization.XmlIgnore()]
+ public bool canvas_page_views_http_code_302Specified;
+
+ /// <remarks/>
+ public int canvas_page_views_http_code_303;
+
+ /// <remarks/>
+ [System.Xml.Serialization.XmlIgnore()]
+ public bool canvas_page_views_http_code_303Specified;
+
+ /// <remarks/>
+ public int canvas_page_views_http_code_400;
+
+ /// <remarks/>
+ [System.Xml.Serialization.XmlIgnore()]
+ public bool canvas_page_views_http_code_400Specified;
+
+ /// <remarks/>
+ public int canvas_page_views_http_code_401;
+
+ /// <remarks/>
+ [System.Xml.Serialization.XmlIgnore()]
+ public bool canvas_page_views_http_code_401Specified;
+
+ /// <remarks/>
+ public int canvas_page_views_http_code_402;
+
+ /// <remarks/>
+ [System.Xml.Serialization.XmlIgnore()]
+ public bool canvas_page_views_http_code_402Specified;
+
+ /// <remarks/>
+ public int canvas_page_views_http_code_403;
+
+ /// <remarks/>
+ [System.Xml.Serialization.XmlIgnore()]
+ public bool canvas_page_views_http_code_403Specified;
+
+ /// <remarks/>
+ public int canvas_page_views_http_code_404;
+
+ /// <remarks/>
+ [System.Xml.Serialization.XmlIgnore()]
+ public bool canvas_page_views_http_code_404Specified;
+
+ /// <remarks/>
+ public int canvas_page_views_http_code_405;
+
+ /// <remarks/>
+ [System.Xml.Serialization.XmlIgnore()]
+ public bool canvas_page_views_http_code_405Specified;
+
+ /// <remarks/>
+ public int canvas_page_views_http_code_413;
+
+ /// <remarks/>
+ [System.Xml.Serialization.XmlIgnore()]
+ public bool canvas_page_views_http_code_413Specified;
+
+ /// <remarks/>
+ public int canvas_page_views_http_code_422;
+
+ /// <remarks/>
+ [System.Xml.Serialization.XmlIgnore()]
+ public bool canvas_page_views_http_code_422Specified;
+
+ /// <remarks/>
+ public int canvas_page_views_http_code_500;
+
+ /// <remarks/>
+ [System.Xml.Serialization.XmlIgnore()]
+ public bool canvas_page_views_http_code_500Specified;
+
+ /// <remarks/>
+ public int canvas_page_views_http_code_502;
+
+ /// <remarks/>
+ [System.Xml.Serialization.XmlIgnore()]
+ public bool canvas_page_views_http_code_502Specified;
+
+ /// <remarks/>
+ public int canvas_page_views_http_code_503;
+
+ /// <remarks/>
+ [System.Xml.Serialization.XmlIgnore()]
+ public bool canvas_page_views_http_code_503Specified;
+
+ /// <remarks/>
+ public int canvas_page_views_http_code_505;
+
+ /// <remarks/>
+ [System.Xml.Serialization.XmlIgnore()]
+ public bool canvas_page_views_http_code_505Specified;
+
+ /// <remarks/>
+ public int feedform_impression;
+
+ /// <remarks/>
+ [System.Xml.Serialization.XmlIgnore()]
+ public bool feedform_impressionSpecified;
+
+ /// <remarks/>
+ public int feedform_publish;
+
+ /// <remarks/>
+ [System.Xml.Serialization.XmlIgnore()]
+ public bool feedform_publishSpecified;
+ }
+
+ /// <remarks/>
+ [System.Xml.Serialization.XmlTypeAttribute(Namespace="http://api.facebook.com/1.0/")]
+ [System.Xml.Serialization.XmlRootAttribute(Namespace="http://api.facebook.com/1.0/", IsNullable=false)]
+ public class update_decodeIDs_response {
+
+ /// <remarks/>
+ [System.Xml.Serialization.XmlAttributeAttribute(Namespace="")]
+ public bool list;
+
+ /// <remarks/>
+ [System.Xml.Serialization.XmlIgnore()]
+ public bool listSpecified;
+
+ /// <remarks/>
+ [System.Xml.Serialization.XmlElementAttribute("id_map")]
+ public id_map[] id_map;
+ }
+
+ /// <remarks/>
+ [System.Xml.Serialization.XmlTypeAttribute(Namespace="http://api.facebook.com/1.0/")]
+ public class id_map {
+
+ /// <remarks/>
+ public string old_id;
+
+ /// <remarks/>
+ public long new_id;
+ }
+
+ /// <remarks/>
+ [System.Xml.Serialization.XmlTypeAttribute(Namespace="http://api.facebook.com/1.0/")]
+ [System.Xml.Serialization.XmlRootAttribute(Namespace="http://api.facebook.com/1.0/", IsNullable=false)]
+ public class data_getObjects_response {
+
+ /// <remarks/>
+ [System.Xml.Serialization.XmlAttributeAttribute(Namespace="")]
+ public bool list;
+
+ /// <remarks/>
+ [System.Xml.Serialization.XmlIgnore()]
+ public bool listSpecified;
+
+ /// <remarks/>
+ [System.Xml.Serialization.XmlElementAttribute("data_getObjects_response_elt")]
+ public container[] data_getObjects_response_elt;
+ }
+
+ /// <remarks/>
+ [System.Xml.Serialization.XmlTypeAttribute(Namespace="http://api.facebook.com/1.0/")]
+ [System.Xml.Serialization.XmlRootAttribute(Namespace="http://api.facebook.com/1.0/", IsNullable=false)]
+ public class pages_getInfo_response {
+
+ /// <remarks/>
+ [System.Xml.Serialization.XmlAttributeAttribute(Namespace="")]
+ public bool list;
+
+ /// <remarks/>
+ [System.Xml.Serialization.XmlIgnore()]
+ public bool listSpecified;
+
+ /// <remarks/>
+ [System.Xml.Serialization.XmlElementAttribute("page")]
+ public page[] page;
+ }
+
+ /// <remarks/>
+ [System.Xml.Serialization.XmlTypeAttribute(Namespace="http://api.facebook.com/1.0/")]
+ public class page {
+
+ /// <remarks/>
+ public long page_id;
+
+ /// <remarks/>
+ [System.Xml.Serialization.XmlIgnore()]
+ public bool page_idSpecified;
+
+ /// <remarks/>
+ public string name;
+
+ /// <remarks/>
+ [System.Xml.Serialization.XmlElementAttribute(IsNullable=true)]
+ public string pic_small;
+
+ /// <remarks/>
+ [System.Xml.Serialization.XmlElementAttribute(IsNullable=true)]
+ public string pic_big;
+
+ /// <remarks/>
+ [System.Xml.Serialization.XmlElementAttribute(IsNullable=true)]
+ public string pic_square;
+
+ /// <remarks/>
+ [System.Xml.Serialization.XmlElementAttribute(IsNullable=true)]
+ public string pic;
+
+ /// <remarks/>
+ [System.Xml.Serialization.XmlElementAttribute(IsNullable=true)]
+ public string pic_large;
+
+ /// <remarks/>
+ public string page_url;
+
+ /// <remarks/>
+ [System.Xml.Serialization.XmlElementAttribute(IsNullable=true)]
+ public user_status status;
+
+ /// <remarks/>
+ public string type;
+
+ /// <remarks/>
+ [System.Xml.Serialization.XmlElementAttribute(IsNullable=true)]
+ public string website;
+
+ /// <remarks/>
+ [System.Xml.Serialization.XmlElementAttribute(IsNullable=true)]
+ public bool? has_added_app;
+
+ /// <remarks/>
+ [System.Xml.Serialization.XmlIgnore()]
+ public bool has_added_appSpecified;
+
+ /// <remarks/>
+ [System.Xml.Serialization.XmlElementAttribute(IsNullable=true)]
+ public string founded;
+
+ /// <remarks/>
+ [System.Xml.Serialization.XmlElementAttribute(IsNullable=true)]
+ public string company_overview;
+
+ /// <remarks/>
+ [System.Xml.Serialization.XmlElementAttribute(IsNullable=true)]
+ public string mission;
+
+ /// <remarks/>
+ [System.Xml.Serialization.XmlElementAttribute(IsNullable=true)]
+ public string products;
+
+ /// <remarks/>
+ [System.Xml.Serialization.XmlElementAttribute(IsNullable=true)]
+ public location location;
+
+ /// <remarks/>
+ [System.Xml.Serialization.XmlElementAttribute(IsNullable=true)]
+ public page_parking parking;
+
+ /// <remarks/>
+ [System.Xml.Serialization.XmlElementAttribute(IsNullable=true)]
+ public string public_transit;
+
+ /// <remarks/>
+ [System.Xml.Serialization.XmlElementAttribute(IsNullable=true)]
+ public page_hours hours;
+
+ /// <remarks/>
+ [System.Xml.Serialization.XmlElementAttribute(IsNullable=true)]
+ public string attire;
+
+ /// <remarks/>
+ [System.Xml.Serialization.XmlElementAttribute(IsNullable=true)]
+ public string payment_options;
+
+ /// <remarks/>
+ [System.Xml.Serialization.XmlElementAttribute(IsNullable=true)]
+ public string culinary_team;
+
+ /// <remarks/>
+ [System.Xml.Serialization.XmlElementAttribute(IsNullable=true)]
+ public string general_manager;
+
+ /// <remarks/>
+ [System.Xml.Serialization.XmlElementAttribute(IsNullable=true)]
+ public string price_range;
+
+ /// <remarks/>
+ [System.Xml.Serialization.XmlElementAttribute(IsNullable=true)]
+ public page_restaurant_services restaurant_services;
+
+ /// <remarks/>
+ [System.Xml.Serialization.XmlElementAttribute(IsNullable=true)]
+ public page_restaurant_specialties restaurant_specialties;
+
+ /// <remarks/>
+ [System.Xml.Serialization.XmlElementAttribute(IsNullable=true)]
+ public string release_date;
+
+ /// <remarks/>
+ [System.Xml.Serialization.XmlElementAttribute(IsNullable=true)]
+ public string genre;
+
+ /// <remarks/>
+ [System.Xml.Serialization.XmlElementAttribute(IsNullable=true)]
+ public string starring;
+
+ /// <remarks/>
+ [System.Xml.Serialization.XmlElementAttribute(IsNullable=true)]
+ public string screenplay_by;
+
+ /// <remarks/>
+ [System.Xml.Serialization.XmlElementAttribute(IsNullable=true)]
+ public string directed_by;
+
+ /// <remarks/>
+ [System.Xml.Serialization.XmlElementAttribute(IsNullable=true)]
+ public string produced_by;
+
+ /// <remarks/>
+ [System.Xml.Serialization.XmlElementAttribute(IsNullable=true)]
+ public string studio;
+
+ /// <remarks/>
+ [System.Xml.Serialization.XmlElementAttribute(IsNullable=true)]
+ public string awards;
+
+ /// <remarks/>
+ [System.Xml.Serialization.XmlElementAttribute(IsNullable=true)]
+ public string plot_outline;
+
+ /// <remarks/>
+ [System.Xml.Serialization.XmlElementAttribute(IsNullable=true)]
+ public string network;
+
+ /// <remarks/>
+ [System.Xml.Serialization.XmlElementAttribute(IsNullable=true)]
+ public string season;
+
+ /// <remarks/>
+ [System.Xml.Serialization.XmlElementAttribute(IsNullable=true)]
+ public string schedule;
+
+ /// <remarks/>
+ [System.Xml.Serialization.XmlElementAttribute(IsNullable=true)]
+ public string written_by;
+
+ /// <remarks/>
+ [System.Xml.Serialization.XmlElementAttribute(IsNullable=true)]
+ public string band_members;
+
+ /// <remarks/>
+ [System.Xml.Serialization.XmlElementAttribute(IsNullable=true)]
+ public string hometown;
+
+ /// <remarks/>
+ [System.Xml.Serialization.XmlElementAttribute(IsNullable=true)]
+ public string current_location;
+
+ /// <remarks/>
+ [System.Xml.Serialization.XmlElementAttribute(IsNullable=true)]
+ public string record_label;
+
+ /// <remarks/>
+ [System.Xml.Serialization.XmlElementAttribute(IsNullable=true)]
+ public string booking_agent;
+
+ /// <remarks/>
+ [System.Xml.Serialization.XmlElementAttribute(IsNullable=true)]
+ public string artists_we_like;
+
+ /// <remarks/>
+ [System.Xml.Serialization.XmlElementAttribute(IsNullable=true)]
+ public string influences;
+
+ /// <remarks/>
+ [System.Xml.Serialization.XmlElementAttribute(IsNullable=true)]
+ public string band_interests;
+
+ /// <remarks/>
+ [System.Xml.Serialization.XmlElementAttribute(IsNullable=true)]
+ public string bio;
+
+ /// <remarks/>
+ [System.Xml.Serialization.XmlElementAttribute(IsNullable=true)]
+ public string affiliation;
+
+ /// <remarks/>
+ [System.Xml.Serialization.XmlElementAttribute(IsNullable=true)]
+ public string birthday;
+
+ /// <remarks/>
+ [System.Xml.Serialization.XmlElementAttribute(IsNullable=true)]
+ public string personal_info;
+
+ /// <remarks/>
+ [System.Xml.Serialization.XmlElementAttribute(IsNullable=true)]
+ public string personal_interests;
+
+ /// <remarks/>
+ [System.Xml.Serialization.XmlElementAttribute(IsNullable=true)]
+ public string members;
+
+ /// <remarks/>
+ [System.Xml.Serialization.XmlElementAttribute(IsNullable=true)]
+ public string built;
+
+ /// <remarks/>
+ [System.Xml.Serialization.XmlElementAttribute(IsNullable=true)]
+ public string features;
+
+ /// <remarks/>
+ [System.Xml.Serialization.XmlElementAttribute(IsNullable=true)]
+ public string mpg;
+
+ /// <remarks/>
+ [System.Xml.Serialization.XmlElementAttribute(IsNullable=true)]
+ public string general_info;
+
+ /// <remarks/>
+ [System.Xml.Serialization.XmlElementAttribute(IsNullable=true)]
+ public string username;
+ }
+
+ /// <remarks/>
+ [System.Xml.Serialization.XmlTypeAttribute(Namespace="http://api.facebook.com/1.0/")]
+ public class user_status {
+
+ /// <remarks/>
+ public string message;
+
+ /// <remarks/>
+ public long time;
+
+ /// <remarks/>
+ public long status_id;
+
+ /// <remarks/>
+ public string source;
+
+ /// <remarks/>
+ public long uid;
+
+ /// <remarks/>
+ public int comment_count;
+ }
+
+ /// <remarks/>
+ [System.Xml.Serialization.XmlTypeAttribute(Namespace="http://api.facebook.com/1.0/")]
+ public class location {
+
+ /// <remarks/>
+ public string street;
+
+ /// <remarks/>
+ public string city;
+
+ /// <remarks/>
+ public string state;
+
+ /// <remarks/>
+ public string country;
+
+ /// <remarks/>
+ public string zip;
+
+ /// <remarks/>
+ public System.Decimal latitude;
+
+ /// <remarks/>
+ [System.Xml.Serialization.XmlIgnore()]
+ public bool latitudeSpecified;
+
+ /// <remarks/>
+ public System.Decimal longitude;
+
+ /// <remarks/>
+ [System.Xml.Serialization.XmlIgnore()]
+ public bool longitudeSpecified;
+
+ /// <remarks/>
+ public long id;
+
+ /// <remarks/>
+ [System.Xml.Serialization.XmlIgnore()]
+ public bool idSpecified;
+
+ /// <remarks/>
+ public string name;
+ }
+
+ /// <remarks/>
+ [System.Xml.Serialization.XmlTypeAttribute(Namespace="http://api.facebook.com/1.0/")]
+ public class page_parking {
+
+ /// <remarks/>
+ public bool street;
+
+ /// <remarks/>
+ public bool lot;
+
+ /// <remarks/>
+ public bool valet;
+ }
+
+ /// <remarks/>
+ [System.Xml.Serialization.XmlTypeAttribute(Namespace="http://api.facebook.com/1.0/")]
+ public class page_hours {
+
+ /// <remarks/>
+ public long mon_1_open;
+
+ /// <remarks/>
+ public long mon_1_close;
+
+ /// <remarks/>
+ public long tue_1_open;
+
+ /// <remarks/>
+ public long tue_1_close;
+
+ /// <remarks/>
+ public long wed_1_open;
+
+ /// <remarks/>
+ public long thu_1_open;
+
+ /// <remarks/>
+ public long thu_1_close;
+
+ /// <remarks/>
+ public long fri_1_open;
+
+ /// <remarks/>
+ public long fri_1_close;
+
+ /// <remarks/>
+ public long sat_1_open;
+
+ /// <remarks/>
+ public long sat_1_close;
+
+ /// <remarks/>
+ public long sun_1_open;
+
+ /// <remarks/>
+ public long sun_1_close;
+
+ /// <remarks/>
+ public long mon_2_open;
+
+ /// <remarks/>
+ public long mon_2_close;
+
+ /// <remarks/>
+ public long tue_2_open;
+
+ /// <remarks/>
+ public long tue_2_close;
+
+ /// <remarks/>
+ public long wed_2_open;
+
+ /// <remarks/>
+ public long wed_2_close;
+
+ /// <remarks/>
+ public long thu_2_open;
+
+ /// <remarks/>
+ public long thu_2_close;
+
+ /// <remarks/>
+ public long fri_2_open;
+
+ /// <remarks/>
+ public long fri_2_close;
+
+ /// <remarks/>
+ public long sat_2_open;
+
+ /// <remarks/>
+ public long sat_2_close;
+
+ /// <remarks/>
+ public long sun_2_open;
+
+ /// <remarks/>
+ public long sun_2_close;
+ }
+
+ /// <remarks/>
+ [System.Xml.Serialization.XmlTypeAttribute(Namespace="http://api.facebook.com/1.0/")]
+ public class page_restaurant_services {
+
+ /// <remarks/>
+ public bool reserve;
+
+ /// <remarks/>
+ public bool walkins;
+
+ /// <remarks/>
+ public bool groups;
+
+ /// <remarks/>
+ public bool kids;
+
+ /// <remarks/>
+ public bool takeout;
+
+ /// <remarks/>
+ public bool delivery;
+
+ /// <remarks/>
+ public bool catering;
+
+ /// <remarks/>
+ public bool waiter;
+
+ /// <remarks/>
+ public bool outdoor;
+ }
+
+ /// <remarks/>
+ [System.Xml.Serialization.XmlTypeAttribute(Namespace="http://api.facebook.com/1.0/")]
+ public class page_restaurant_specialties {
+
+ /// <remarks/>
+ public bool breakfast;
+
+ /// <remarks/>
+ public bool lunch;
+
+ /// <remarks/>
+ public bool dinner;
+
+ /// <remarks/>
+ public bool coffee;
+
+ /// <remarks/>
+ public bool drinks;
+ }
+
+ /// <remarks/>
+ [System.Xml.Serialization.XmlTypeAttribute(Namespace="http://api.facebook.com/1.0/")]
+ [System.Xml.Serialization.XmlRootAttribute("links_preview_response", Namespace="http://api.facebook.com/1.0/")]
+ public class stream_attachment {
+
+ /// <remarks/>
+ public stream_attachmentMedia media;
+
+ /// <remarks/>
+ public string name;
+
+ /// <remarks/>
+ public string href;
+
+ /// <remarks/>
+ public string caption;
+
+ /// <remarks/>
+ public string description;
+
+ /// <remarks/>
+ public stream_attachmentProperties properties;
+
+ /// <remarks/>
+ public string icon;
+
+ /// <remarks/>
+ public string fb_object_type;
+
+ /// <remarks/>
+ public string fb_object_id;
+ }
+
+ /// <remarks/>
+ [System.Xml.Serialization.XmlTypeAttribute(Namespace="http://api.facebook.com/1.0/")]
+ public class stream_attachmentMedia {
+
+ /// <remarks/>
+ [System.Xml.Serialization.XmlAttributeAttribute(Namespace="")]
+ public bool list;
+
+ /// <remarks/>
+ [System.Xml.Serialization.XmlIgnore()]
+ public bool listSpecified;
+
+ /// <remarks/>
+ [System.Xml.Serialization.XmlElementAttribute("stream_media")]
+ public stream_media[] stream_media;
+ }
+
+ /// <remarks/>
+ [System.Xml.Serialization.XmlTypeAttribute(Namespace="http://api.facebook.com/1.0/")]
+ public class stream_media {
+
+ /// <remarks/>
+ public string href;
+
+ /// <remarks/>
+ public string alt;
+
+ /// <remarks/>
+ public string type;
+
+ /// <remarks/>
+ public string src;
+
+ /// <remarks/>
+ public stream_video video;
+
+ /// <remarks/>
+ public string obj;
+
+ /// <remarks/>
+ public stream_music music;
+
+ /// <remarks/>
+ public string data;
+
+ /// <remarks/>
+ public stream_photo photo;
+
+ /// <remarks/>
+ public stream_swf swf;
+ }
+
+ /// <remarks/>
+ [System.Xml.Serialization.XmlTypeAttribute(Namespace="http://api.facebook.com/1.0/")]
+ public class stream_video {
+
+ /// <remarks/>
+ public string display_url;
+
+ /// <remarks/>
+ public string source_url;
+
+ /// <remarks/>
+ public long owner;
+
+ /// <remarks/>
+ public string permalink;
+
+ /// <remarks/>
+ public string preview_img;
+
+ /// <remarks/>
+ public string source_type;
+
+ /// <remarks/>
+ public long created_time;
+ }
+
+ /// <remarks/>
+ [System.Xml.Serialization.XmlTypeAttribute(Namespace="http://api.facebook.com/1.0/")]
+ public class stream_music {
+
+ /// <remarks/>
+ public string source_url;
+
+ /// <remarks/>
+ public string title;
+
+ /// <remarks/>
+ public string artist;
+
+ /// <remarks/>
+ public string album;
+ }
+
+ /// <remarks/>
+ [System.Xml.Serialization.XmlTypeAttribute(Namespace="http://api.facebook.com/1.0/")]
+ public class stream_photo {
+
+ /// <remarks/>
+ public string aid;
+
+ /// <remarks/>
+ public string pid;
+
+ /// <remarks/>
+ public long owner;
+
+ /// <remarks/>
+ public int index;
+
+ /// <remarks/>
+ public int width;
+
+ /// <remarks/>
+ public int height;
+ }
+
+ /// <remarks/>
+ [System.Xml.Serialization.XmlTypeAttribute(Namespace="http://api.facebook.com/1.0/")]
+ public class stream_swf {
+
+ /// <remarks/>
+ public string source_url;
+
+ /// <remarks/>
+ public string preview_img;
+
+ /// <remarks/>
+ public string flash_vars;
+
+ /// <remarks/>
+ public int width;
+
+ /// <remarks/>
+ public int height;
+ }
+
+ /// <remarks/>
+ [System.Xml.Serialization.XmlTypeAttribute(Namespace="http://api.facebook.com/1.0/")]
+ public class stream_attachmentProperties {
+
+ /// <remarks/>
+ [System.Xml.Serialization.XmlAttributeAttribute(Namespace="")]
+ public bool list;
+
+ /// <remarks/>
+ [System.Xml.Serialization.XmlIgnore()]
+ public bool listSpecified;
+
+ /// <remarks/>
+ [System.Xml.Serialization.XmlElementAttribute("stream_property")]
+ public stream_property[] stream_property;
+ }
+
+ /// <remarks/>
+ [System.Xml.Serialization.XmlTypeAttribute(Namespace="http://api.facebook.com/1.0/")]
+ public class stream_property {
+
+ /// <remarks/>
+ public string name;
+
+ /// <remarks/>
+ public string text;
+
+ /// <remarks/>
+ public string href;
+ }
+
+ /// <remarks/>
+ [System.Xml.Serialization.XmlTypeAttribute(Namespace="http://api.facebook.com/1.0/")]
+ [System.Xml.Serialization.XmlRootAttribute("photos_createAlbum_response", Namespace="http://api.facebook.com/1.0/")]
+ public class album {
+
+ /// <remarks/>
+ public string aid;
+
+ /// <remarks/>
+ public string cover_pid;
+
+ /// <remarks/>
+ public long owner;
+
+ /// <remarks/>
+ public string name;
+
+ /// <remarks/>
+ public long created;
+
+ /// <remarks/>
+ public long modified;
+
+ /// <remarks/>
+ public string description;
+
+ /// <remarks/>
+ public string location;
+
+ /// <remarks/>
+ public string link;
+
+ /// <remarks/>
+ public int size;
+
+ /// <remarks/>
+ public string visible;
+
+ /// <remarks/>
+ public long modified_major;
+
+ /// <remarks/>
+ public string type;
+
+ /// <remarks/>
+ public long object_id;
+ }
+
+ /// <remarks/>
+ [System.Xml.Serialization.XmlTypeAttribute(Namespace="http://api.facebook.com/1.0/")]
+ [System.Xml.Serialization.XmlRootAttribute(Namespace="http://api.facebook.com/1.0/", IsNullable=false)]
+ public class feed_getRegisteredTemplateBundles_response {
+
+ /// <remarks/>
+ [System.Xml.Serialization.XmlAttributeAttribute(Namespace="")]
+ public bool list;
+
+ /// <remarks/>
+ [System.Xml.Serialization.XmlIgnore()]
+ public bool listSpecified;
+
+ /// <remarks/>
+ [System.Xml.Serialization.XmlElementAttribute("template_bundle")]
+ public template_bundle[] template_bundle;
+ }
+
+ /// <remarks/>
+ [System.Xml.Serialization.XmlTypeAttribute(Namespace="http://api.facebook.com/1.0/")]
+ [System.Xml.Serialization.XmlRootAttribute(Namespace="http://api.facebook.com/1.0/", IsNullable=false)]
+ public class data_getAssociatedObjects_response {
+
+ /// <remarks/>
+ [System.Xml.Serialization.XmlAttributeAttribute(Namespace="")]
+ public bool list;
+
+ /// <remarks/>
+ [System.Xml.Serialization.XmlIgnore()]
+ public bool listSpecified;
+
+ /// <remarks/>
+ [System.Xml.Serialization.XmlElementAttribute("object_association")]
+ public object_association[] object_association;
+ }
+
+ /// <remarks/>
+ [System.Xml.Serialization.XmlTypeAttribute(Namespace="http://api.facebook.com/1.0/")]
+ public class object_association {
+
+ /// <remarks/>
+ public string name;
+
+ /// <remarks/>
+ public long id1;
+
+ /// <remarks/>
+ public long id2;
+
+ /// <remarks/>
+ public string data;
+
+ /// <remarks/>
+ public long time;
+ }
+
+ /// <remarks/>
+ [System.Xml.Serialization.XmlTypeAttribute(Namespace="http://api.facebook.com/1.0/")]
+ [System.Xml.Serialization.XmlRootAttribute(Namespace="http://api.facebook.com/1.0/", IsNullable=false)]
+ public class feed_getAppFriendStories_response {
+
+ /// <remarks/>
+ [System.Xml.Serialization.XmlAttributeAttribute(Namespace="")]
+ public bool list;
+
+ /// <remarks/>
+ [System.Xml.Serialization.XmlIgnore()]
+ public bool listSpecified;
+
+ /// <remarks/>
+ [System.Xml.Serialization.XmlElementAttribute("feed_story")]
+ public feed_story[] feed_story;
+ }
+
+ /// <remarks/>
+ [System.Xml.Serialization.XmlTypeAttribute(Namespace="http://api.facebook.com/1.0/")]
+ public class feed_story {
+
+ /// <remarks/>
+ public long actor_id;
+
+ /// <remarks/>
+ public string post_id;
+
+ /// <remarks/>
+ public string story_title;
+
+ /// <remarks/>
+ public string story_body;
+
+ /// <remarks/>
+ public string images;
+
+ /// <remarks/>
+ public string flash;
+
+ /// <remarks/>
+ public string mp3;
+
+ /// <remarks/>
+ public string video;
+
+ /// <remarks/>
+ public long time_published;
+ }
+
+ /// <remarks/>
+ [System.Xml.Serialization.XmlTypeAttribute(Namespace="http://api.facebook.com/1.0/")]
+ [System.Xml.Serialization.XmlRootAttribute(Namespace="http://api.facebook.com/1.0/", IsNullable=false)]
+ public class data_getAssociationDefinitions_response {
+
+ /// <remarks/>
+ [System.Xml.Serialization.XmlAttributeAttribute(Namespace="")]
+ public bool list;
+
+ /// <remarks/>
+ [System.Xml.Serialization.XmlIgnore()]
+ public bool listSpecified;
+
+ /// <remarks/>
+ [System.Xml.Serialization.XmlElementAttribute("object_assoc_info")]
+ public object_assoc_info[] object_assoc_info;
+ }
+
+ /// <remarks/>
+ [System.Xml.Serialization.XmlTypeAttribute(Namespace="http://api.facebook.com/1.0/")]
+ [System.Xml.Serialization.XmlRootAttribute("auth_getSession_response", Namespace="http://api.facebook.com/1.0/", IsNullable=false)]
+ public class session_info {
+
+ /// <remarks/>
+ public string session_key;
+
+ /// <remarks/>
+ public long uid;
+
+ /// <remarks/>
+ public int expires;
+
+ /// <remarks/>
+ public string secret;
+
+ /// <remarks/>
+ public string base_domain;
+
+ /// <remarks/>
+ public string access_token;
+ }
+
+ /// <remarks/>
+ [System.Xml.Serialization.XmlTypeAttribute(Namespace="http://api.facebook.com/1.0/")]
+ [System.Xml.Serialization.XmlRootAttribute(Namespace="http://api.facebook.com/1.0/", IsNullable=false)]
+ public class friends_getAppUsers_response {
+
+ /// <remarks/>
+ [System.Xml.Serialization.XmlAttributeAttribute(Namespace="")]
+ public bool list;
+
+ /// <remarks/>
+ [System.Xml.Serialization.XmlIgnore()]
+ public bool listSpecified;
+
+ /// <remarks/>
+ [System.Xml.Serialization.XmlElementAttribute("uid")]
+ public long[] uid;
+ }
+
+ /// <remarks/>
+ [System.Xml.Serialization.XmlTypeAttribute(Namespace="http://api.facebook.com/1.0/")]
+ [System.Xml.Serialization.XmlRootAttribute(Namespace="http://api.facebook.com/1.0/", IsNullable=false)]
+ public class groups_get_response {
+
+ /// <remarks/>
+ [System.Xml.Serialization.XmlAttributeAttribute(Namespace="")]
+ public bool list;
+
+ /// <remarks/>
+ [System.Xml.Serialization.XmlIgnore()]
+ public bool listSpecified;
+
+ /// <remarks/>
+ [System.Xml.Serialization.XmlElementAttribute("group")]
+ public group[] group;
+ }
+
+ /// <remarks/>
+ [System.Xml.Serialization.XmlTypeAttribute(Namespace="http://api.facebook.com/1.0/")]
+ public class group {
+
+ /// <remarks/>
+ public long gid;
+
+ /// <remarks/>
+ public string name;
+
+ /// <remarks/>
+ public int nid;
+
+ /// <remarks/>
+ public string description;
+
+ /// <remarks/>
+ public string group_type;
+
+ /// <remarks/>
+ public string group_subtype;
+
+ /// <remarks/>
+ public string recent_news;
+
+ /// <remarks/>
+ public string pic;
+
+ /// <remarks/>
+ public string pic_big;
+
+ /// <remarks/>
+ public string pic_small;
+
+ /// <remarks/>
+ [System.Xml.Serialization.XmlElementAttribute(IsNullable=true)]
+ public long? creator;
+
+ /// <remarks/>
+ public long update_time;
+
+ /// <remarks/>
+ public string office;
+
+ /// <remarks/>
+ public string website;
+
+ /// <remarks/>
+ public location venue;
+
+ /// <remarks/>
+ public string privacy;
+ }
+
+ /// <remarks/>
+ [System.Xml.Serialization.XmlTypeAttribute(Namespace="http://api.facebook.com/1.0/")]
+ [System.Xml.Serialization.XmlRootAttribute(Namespace="http://api.facebook.com/1.0/", IsNullable=false)]
+ public class friends_getMutualFriends_response {
+
+ /// <remarks/>
+ [System.Xml.Serialization.XmlAttributeAttribute(Namespace="")]
+ public bool list;
+
+ /// <remarks/>
+ [System.Xml.Serialization.XmlIgnore()]
+ public bool listSpecified;
+
+ /// <remarks/>
+ [System.Xml.Serialization.XmlElementAttribute("uid")]
+ public long[] uid;
+ }
+
+ /// <remarks/>
+ [System.Xml.Serialization.XmlTypeAttribute(Namespace="http://api.facebook.com/1.0/")]
+ [System.Xml.Serialization.XmlRootAttribute(Namespace="http://api.facebook.com/1.0/", IsNullable=false)]
+ public class profile_getInfo_response {
+
+ /// <remarks/>
+ [System.Xml.Serialization.XmlAttributeAttribute(Namespace="")]
+ public bool list;
+
+ /// <remarks/>
+ [System.Xml.Serialization.XmlIgnore()]
+ public bool listSpecified;
+
+ /// <remarks/>
+ [System.Xml.Serialization.XmlElementAttribute("user_info")]
+ public user_info[] user_info;
+ }
+
+ /// <remarks/>
+ [System.Xml.Serialization.XmlTypeAttribute(Namespace="http://api.facebook.com/1.0/")]
+ public class user_info {
+
+ /// <remarks/>
+ public string title;
+
+ /// <remarks/>
+ public int type;
+
+ /// <remarks/>
+ public user_infoInfo_fields info_fields;
+ }
+
+ /// <remarks/>
+ [System.Xml.Serialization.XmlTypeAttribute(Namespace="http://api.facebook.com/1.0/")]
+ public class user_infoInfo_fields {
+
+ /// <remarks/>
+ [System.Xml.Serialization.XmlAttributeAttribute(Namespace="")]
+ public bool list;
+
+ /// <remarks/>
+ [System.Xml.Serialization.XmlIgnore()]
+ public bool listSpecified;
+
+ /// <remarks/>
+ [System.Xml.Serialization.XmlElementAttribute("info_field")]
+ public info_field[] info_field;
+ }
+
+ /// <remarks/>
+ [System.Xml.Serialization.XmlTypeAttribute(Namespace="http://api.facebook.com/1.0/")]
+ public class info_field {
+
+ /// <remarks/>
+ public string field;
+
+ /// <remarks/>
+ public info_fieldItems items;
+ }
+
+ /// <remarks/>
+ [System.Xml.Serialization.XmlTypeAttribute(Namespace="http://api.facebook.com/1.0/")]
+ public class info_fieldItems {
+
+ /// <remarks/>
+ [System.Xml.Serialization.XmlAttributeAttribute(Namespace="")]
+ public bool list;
+
+ /// <remarks/>
+ [System.Xml.Serialization.XmlIgnore()]
+ public bool listSpecified;
+
+ /// <remarks/>
+ [System.Xml.Serialization.XmlElementAttribute("info_item")]
+ public info_item[] info_item;
+ }
+
+ /// <remarks/>
+ [System.Xml.Serialization.XmlTypeAttribute(Namespace="http://api.facebook.com/1.0/")]
+ public class info_item {
+
+ /// <remarks/>
+ public string label;
+
+ /// <remarks/>
+ public string sublabel;
+
+ /// <remarks/>
+ public string description;
+
+ /// <remarks/>
+ public string link;
+
+ /// <remarks/>
+ public string image;
+
+ /// <remarks/>
+ public string meta;
+ }
+
+ /// <remarks/>
+ [System.Xml.Serialization.XmlTypeAttribute(Namespace="http://api.facebook.com/1.0/")]
+ [System.Xml.Serialization.XmlRootAttribute(Namespace="http://api.facebook.com/1.0/", IsNullable=false)]
+ public class data_getAssociations_response {
+
+ /// <remarks/>
+ [System.Xml.Serialization.XmlAttributeAttribute(Namespace="")]
+ public bool list;
+
+ /// <remarks/>
+ [System.Xml.Serialization.XmlIgnore()]
+ public bool listSpecified;
+
+ /// <remarks/>
+ [System.Xml.Serialization.XmlElementAttribute("object_association")]
+ public object_association[] object_association;
+ }
+
+ /// <remarks/>
+ [System.Xml.Serialization.XmlTypeAttribute(Namespace="http://api.facebook.com/1.0/")]
+ [System.Xml.Serialization.XmlRootAttribute(Namespace="http://api.facebook.com/1.0/", IsNullable=false)]
+ public class stream_getFilters_response {
+
+ /// <remarks/>
+ [System.Xml.Serialization.XmlAttributeAttribute(Namespace="")]
+ public bool list;
+
+ /// <remarks/>
+ [System.Xml.Serialization.XmlIgnore()]
+ public bool listSpecified;
+
+ /// <remarks/>
+ [System.Xml.Serialization.XmlElementAttribute("stream_filter")]
+ public stream_filter[] stream_filter;
+ }
+
+ /// <remarks/>
+ [System.Xml.Serialization.XmlTypeAttribute(Namespace="http://api.facebook.com/1.0/")]
+ public class stream_filter {
+
+ /// <remarks/>
+ public long uid;
+
+ /// <remarks/>
+ public string filter_key;
+
+ /// <remarks/>
+ public string name;
+
+ /// <remarks/>
+ public int rank;
+
+ /// <remarks/>
+ public string icon_url;
+
+ /// <remarks/>
+ public bool is_visible;
+
+ /// <remarks/>
+ public string type;
+
+ /// <remarks/>
+ public long value;
+ }
+
+ /// <remarks/>
+ [System.Xml.Serialization.XmlTypeAttribute(Namespace="http://api.facebook.com/1.0/")]
+ [System.Xml.Serialization.XmlRootAttribute("error_response", Namespace="http://api.facebook.com/1.0/", IsNullable=false)]
+ public class FacebookApiException {
+
+ /// <remarks/>
+ public int error_code;
+
+ /// <remarks/>
+ public string error_msg;
+
+ /// <remarks/>
+ public FacebookApiExceptionRequest_args request_args;
+
+ /// <remarks/>
+ public string error_data;
+ }
+
+ /// <remarks/>
+ [System.Xml.Serialization.XmlTypeAttribute(Namespace="http://api.facebook.com/1.0/")]
+ public class FacebookApiExceptionRequest_args {
+
+ /// <remarks/>
+ [System.Xml.Serialization.XmlAttributeAttribute(Namespace="")]
+ public bool list;
+
+ /// <remarks/>
+ [System.Xml.Serialization.XmlIgnore()]
+ public bool listSpecified;
+
+ /// <remarks/>
+ [System.Xml.Serialization.XmlElementAttribute("arg")]
+ public arg[] arg;
+ }
+
+ /// <remarks/>
+ [System.Xml.Serialization.XmlTypeAttribute(Namespace="http://api.facebook.com/1.0/")]
+ public class arg {
+
+ /// <remarks/>
+ public string key;
+
+ /// <remarks/>
+ public string value;
+ }
+
+ /// <remarks/>
+ [System.Xml.Serialization.XmlTypeAttribute(Namespace="http://api.facebook.com/1.0/")]
+ [System.Xml.Serialization.XmlRootAttribute(Namespace="http://api.facebook.com/1.0/", IsNullable=false)]
+ public class permissions_checkGrantedApiAccess_response {
+
+ /// <remarks/>
+ [System.Xml.Serialization.XmlAttributeAttribute(Namespace="")]
+ public bool list;
+
+ /// <remarks/>
+ [System.Xml.Serialization.XmlIgnore()]
+ public bool listSpecified;
+
+ /// <remarks/>
+ [System.Xml.Serialization.XmlElementAttribute("permissions_checkGrantedApiAccess_response_elt")]
+ public string[] permissions_checkGrantedApiAccess_response_elt;
+ }
+
+ /// <remarks/>
+ [System.Xml.Serialization.XmlTypeAttribute(Namespace="http://api.facebook.com/1.0/")]
+ [System.Xml.Serialization.XmlRootAttribute(Namespace="http://api.facebook.com/1.0/", IsNullable=false)]
+ public class admin_getBannedUsers_response {
+
+ /// <remarks/>
+ [System.Xml.Serialization.XmlAttributeAttribute(Namespace="")]
+ public bool list;
+
+ /// <remarks/>
+ [System.Xml.Serialization.XmlIgnore()]
+ public bool listSpecified;
+
+ /// <remarks/>
+ [System.Xml.Serialization.XmlElementAttribute("uid")]
+ public long[] uid;
+ }
+
+ /// <remarks/>
+ [System.Xml.Serialization.XmlTypeAttribute(Namespace="http://api.facebook.com/1.0/")]
+ [System.Xml.Serialization.XmlRootAttribute("notifications_get_response", Namespace="http://api.facebook.com/1.0/", IsNullable=false)]
+ public class notifications {
+
+ /// <remarks/>
+ public notification_count messages;
+
+ /// <remarks/>
+ public notification_count pokes;
+
+ /// <remarks/>
+ public notification_count shares;
+
+ /// <remarks/>
+ public notificationsFriend_requests friend_requests;
+
+ /// <remarks/>
+ public notificationsGroup_invites group_invites;
+
+ /// <remarks/>
+ public notificationsEvent_invites event_invites;
+ }
+
+ /// <remarks/>
+ [System.Xml.Serialization.XmlTypeAttribute(Namespace="http://api.facebook.com/1.0/")]
+ public class notification_count {
+
+ /// <remarks/>
+ public int unread;
+
+ /// <remarks/>
+ public long most_recent;
+ }
+
+ /// <remarks/>
+ [System.Xml.Serialization.XmlTypeAttribute(Namespace="http://api.facebook.com/1.0/")]
+ public class notificationsFriend_requests {
+
+ /// <remarks/>
+ [System.Xml.Serialization.XmlAttributeAttribute(Namespace="")]
+ public bool list;
+
+ /// <remarks/>
+ [System.Xml.Serialization.XmlIgnore()]
+ public bool listSpecified;
+
+ /// <remarks/>
+ [System.Xml.Serialization.XmlElementAttribute("uid")]
+ public long[] uid;
+ }
+
+ /// <remarks/>
+ [System.Xml.Serialization.XmlTypeAttribute(Namespace="http://api.facebook.com/1.0/")]
+ public class notificationsGroup_invites {
+
+ /// <remarks/>
+ [System.Xml.Serialization.XmlAttributeAttribute(Namespace="")]
+ public bool list;
+
+ /// <remarks/>
+ [System.Xml.Serialization.XmlIgnore()]
+ public bool listSpecified;
+
+ /// <remarks/>
+ [System.Xml.Serialization.XmlElementAttribute("gid")]
+ public long[] gid;
+ }
+
+ /// <remarks/>
+ [System.Xml.Serialization.XmlTypeAttribute(Namespace="http://api.facebook.com/1.0/")]
+ public class notificationsEvent_invites {
+
+ /// <remarks/>
+ [System.Xml.Serialization.XmlAttributeAttribute(Namespace="")]
+ public bool list;
+
+ /// <remarks/>
+ [System.Xml.Serialization.XmlIgnore()]
+ public bool listSpecified;
+
+ /// <remarks/>
+ [System.Xml.Serialization.XmlElementAttribute("eid")]
+ public long[] eid;
+ }
+
+ /// <remarks/>
+ [System.Xml.Serialization.XmlTypeAttribute(Namespace="http://api.facebook.com/1.0/")]
+ [System.Xml.Serialization.XmlRootAttribute(Namespace="http://api.facebook.com/1.0/", IsNullable=false)]
+ public class users_getInfo_response {
+
+ /// <remarks/>
+ [System.Xml.Serialization.XmlAttributeAttribute(Namespace="")]
+ public bool list;
+
+ /// <remarks/>
+ [System.Xml.Serialization.XmlIgnore()]
+ public bool listSpecified;
+
+ /// <remarks/>
+ [System.Xml.Serialization.XmlElementAttribute("user")]
+ public user[] user;
+ }
+
+ /// <remarks/>
+ [System.Xml.Serialization.XmlTypeAttribute(Namespace="http://api.facebook.com/1.0/")]
+ public class user {
+
+ /// <remarks/>
+ [System.Xml.Serialization.XmlElementAttribute(IsNullable=true)]
+ public string about_me;
+
+ /// <remarks/>
+ [System.Xml.Serialization.XmlElementAttribute(IsNullable=true)]
+ public string activities;
+
+ /// <remarks/>
+ public userAffiliations affiliations;
+
+ /// <remarks/>
+ [System.Xml.Serialization.XmlElementAttribute(IsNullable=true)]
+ public string birthday;
+
+ /// <remarks/>
+ [System.Xml.Serialization.XmlElementAttribute(IsNullable=true)]
+ public string books;
+
+ /// <remarks/>
+ [System.Xml.Serialization.XmlElementAttribute(IsNullable=true)]
+ public location current_location;
+
+ /// <remarks/>
+ [System.Xml.Serialization.XmlElementAttribute(IsNullable=true)]
+ public userEducation_history education_history;
+
+ /// <remarks/>
+ public string first_name;
+
+ /// <remarks/>
+ [System.Xml.Serialization.XmlElementAttribute(IsNullable=true)]
+ public location hometown_location;
+
+ /// <remarks/>
+ [System.Xml.Serialization.XmlElementAttribute(IsNullable=true)]
+ public hs_info hs_info;
+
+ /// <remarks/>
+ [System.Xml.Serialization.XmlElementAttribute(IsNullable=true)]
+ public string interests;
+
+ /// <remarks/>
+ public bool is_app_user;
+
+ /// <remarks/>
+ [System.Xml.Serialization.XmlIgnore()]
+ public bool is_app_userSpecified;
+
+ /// <remarks/>
+ public string last_name;
+
+ /// <remarks/>
+ [System.Xml.Serialization.XmlElementAttribute(IsNullable=true)]
+ public userMeeting_for meeting_for;
+
+ /// <remarks/>
+ [System.Xml.Serialization.XmlElementAttribute(IsNullable=true)]
+ public userMeeting_sex meeting_sex;
+
+ /// <remarks/>
+ [System.Xml.Serialization.XmlElementAttribute(IsNullable=true)]
+ public string movies;
+
+ /// <remarks/>
+ [System.Xml.Serialization.XmlElementAttribute(IsNullable=true)]
+ public string music;
+
+ /// <remarks/>
+ public string name;
+
+ /// <remarks/>
+ [System.Xml.Serialization.XmlElementAttribute(IsNullable=true)]
+ public int? notes_count;
+
+ /// <remarks/>
+ [System.Xml.Serialization.XmlIgnore()]
+ public bool notes_countSpecified;
+
+ /// <remarks/>
+ [System.Xml.Serialization.XmlElementAttribute(IsNullable=true)]
+ public string pic;
+
+ /// <remarks/>
+ [System.Xml.Serialization.XmlElementAttribute(IsNullable=true)]
+ public string pic_big;
+
+ /// <remarks/>
+ [System.Xml.Serialization.XmlElementAttribute(IsNullable=true)]
+ public string pic_small;
+
+ /// <remarks/>
+ [System.Xml.Serialization.XmlElementAttribute(IsNullable=true)]
+ public string political;
+
+ /// <remarks/>
+ [System.Xml.Serialization.XmlElementAttribute(IsNullable=true)]
+ public long? profile_update_time;
+
+ /// <remarks/>
+ [System.Xml.Serialization.XmlIgnore()]
+ public bool profile_update_timeSpecified;
+
+ /// <remarks/>
+ [System.Xml.Serialization.XmlElementAttribute(IsNullable=true)]
+ public string quotes;
+
+ /// <remarks/>
+ [System.Xml.Serialization.XmlElementAttribute(IsNullable=true)]
+ public string relationship_status;
+
+ /// <remarks/>
+ [System.Xml.Serialization.XmlElementAttribute(IsNullable=true)]
+ public string religion;
+
+ /// <remarks/>
+ [System.Xml.Serialization.XmlElementAttribute(IsNullable=true)]
+ public string sex;
+
+ /// <remarks/>
+ [System.Xml.Serialization.XmlElementAttribute(IsNullable=true)]
+ public long? significant_other_id;
+
+ /// <remarks/>
+ [System.Xml.Serialization.XmlIgnore()]
+ public bool significant_other_idSpecified;
+
+ /// <remarks/>
+ [System.Xml.Serialization.XmlElementAttribute(IsNullable=true)]
+ public user_status status;
+
+ /// <remarks/>
+ [System.Xml.Serialization.XmlElementAttribute(IsNullable=true)]
+ public System.Decimal? timezone;
+
+ /// <remarks/>
+ [System.Xml.Serialization.XmlIgnore()]
+ public bool timezoneSpecified;
+
+ /// <remarks/>
+ [System.Xml.Serialization.XmlElementAttribute(IsNullable=true)]
+ public string tv;
+
+ /// <remarks/>
+ public long uid;
+
+ /// <remarks/>
+ [System.Xml.Serialization.XmlIgnore()]
+ public bool uidSpecified;
+
+ /// <remarks/>
+ [System.Xml.Serialization.XmlElementAttribute(IsNullable=true)]
+ public int? wall_count;
+
+ /// <remarks/>
+ [System.Xml.Serialization.XmlIgnore()]
+ public bool wall_countSpecified;
+
+ /// <remarks/>
+ [System.Xml.Serialization.XmlElementAttribute(IsNullable=true)]
+ public userWork_history work_history;
+
+ /// <remarks/>
+ [System.Xml.Serialization.XmlElementAttribute(IsNullable=true)]
+ public string pic_square;
+
+ /// <remarks/>
+ [System.Xml.Serialization.XmlElementAttribute(IsNullable=true)]
+ public bool? has_added_app;
+
+ /// <remarks/>
+ [System.Xml.Serialization.XmlIgnore()]
+ public bool has_added_appSpecified;
+
+ /// <remarks/>
+ [System.Xml.Serialization.XmlElementAttribute(IsNullable=true)]
+ public userEmail_hashes email_hashes;
+
+ /// <remarks/>
+ [System.Xml.Serialization.XmlElementAttribute(IsNullable=true)]
+ public string locale;
+
+ /// <remarks/>
+ public userFamily family;
+
+ /// <remarks/>
+ public bool are_friends;
+
+ /// <remarks/>
+ [System.Xml.Serialization.XmlIgnore()]
+ public bool are_friendsSpecified;
+
+ /// <remarks/>
+ [System.Xml.Serialization.XmlElementAttribute(IsNullable=true)]
+ public bool? can_see_profile;
+
+ /// <remarks/>
+ [System.Xml.Serialization.XmlIgnore()]
+ public bool can_see_profileSpecified;
+
+ /// <remarks/>
+ [System.Xml.Serialization.XmlElementAttribute(IsNullable=true)]
+ public string profile_url;
+
+ /// <remarks/>
+ [System.Xml.Serialization.XmlElementAttribute(IsNullable=true)]
+ public string username;
+
+ /// <remarks/>
+ [System.Xml.Serialization.XmlElementAttribute(IsNullable=true)]
+ public string proxied_email;
+
+ /// <remarks/>
+ [System.Xml.Serialization.XmlElementAttribute(IsNullable=true)]
+ public string pic_large;
+
+ /// <remarks/>
+ [System.Xml.Serialization.XmlElementAttribute(IsNullable=true)]
+ public string pic_big_with_logo;
+
+ /// <remarks/>
+ [System.Xml.Serialization.XmlElementAttribute(IsNullable=true)]
+ public string pic_small_with_logo;
+
+ /// <remarks/>
+ [System.Xml.Serialization.XmlElementAttribute(IsNullable=true)]
+ public string pic_square_with_logo;
+
+ /// <remarks/>
+ [System.Xml.Serialization.XmlElementAttribute(IsNullable=true)]
+ public string pic_with_logo;
+
+ /// <remarks/>
+ [System.Xml.Serialization.XmlElementAttribute(IsNullable=true)]
+ public string birthday_date;
+
+ /// <remarks/>
+ [System.Xml.Serialization.XmlElementAttribute(IsNullable=true)]
+ public string online_presence;
+
+ /// <remarks/>
+ [System.Xml.Serialization.XmlElementAttribute(IsNullable=true)]
+ public string website;
+
+ /// <remarks/>
+ [System.Xml.Serialization.XmlElementAttribute(IsNullable=true)]
+ public bool? is_blocked;
+
+ /// <remarks/>
+ [System.Xml.Serialization.XmlIgnore()]
+ public bool is_blockedSpecified;
+ }
+
+ /// <remarks/>
+ [System.Xml.Serialization.XmlTypeAttribute(Namespace="http://api.facebook.com/1.0/")]
+ public class userAffiliations {
+
+ /// <remarks/>
+ [System.Xml.Serialization.XmlAttributeAttribute(Namespace="")]
+ public bool list;
+
+ /// <remarks/>
+ [System.Xml.Serialization.XmlIgnore()]
+ public bool listSpecified;
+
+ /// <remarks/>
+ [System.Xml.Serialization.XmlElementAttribute("affiliation")]
+ public affiliation[] affiliation;
+ }
+
+ /// <remarks/>
+ [System.Xml.Serialization.XmlTypeAttribute(Namespace="http://api.facebook.com/1.0/")]
+ public class affiliation {
+
+ /// <remarks/>
+ public int nid;
+
+ /// <remarks/>
+ public string name;
+
+ /// <remarks/>
+ public string type;
+
+ /// <remarks/>
+ public string status;
+
+ /// <remarks/>
+ public int year;
+ }
+
+ /// <remarks/>
+ [System.Xml.Serialization.XmlTypeAttribute(Namespace="http://api.facebook.com/1.0/")]
+ public class userEducation_history {
+
+ /// <remarks/>
+ [System.Xml.Serialization.XmlAttributeAttribute(Namespace="")]
+ public bool list;
+
+ /// <remarks/>
+ [System.Xml.Serialization.XmlIgnore()]
+ public bool listSpecified;
+
+ /// <remarks/>
+ [System.Xml.Serialization.XmlElementAttribute("education_info")]
+ public education_info[] education_info;
+ }
+
+ /// <remarks/>
+ [System.Xml.Serialization.XmlTypeAttribute(Namespace="http://api.facebook.com/1.0/")]
+ public class education_info {
+
+ /// <remarks/>
+ public string name;
+
+ /// <remarks/>
+ public int year;
+
+ /// <remarks/>
+ public education_infoConcentrations concentrations;
+
+ /// <remarks/>
+ public string degree;
+
+ /// <remarks/>
+ public string school_type;
+ }
+
+ /// <remarks/>
+ [System.Xml.Serialization.XmlTypeAttribute(Namespace="http://api.facebook.com/1.0/")]
+ public class education_infoConcentrations {
+
+ /// <remarks/>
+ [System.Xml.Serialization.XmlAttributeAttribute(Namespace="")]
+ public bool list;
+
+ /// <remarks/>
+ [System.Xml.Serialization.XmlIgnore()]
+ public bool listSpecified;
+
+ /// <remarks/>
+ [System.Xml.Serialization.XmlElementAttribute("concentration")]
+ public string[] concentration;
+ }
+
+ /// <remarks/>
+ [System.Xml.Serialization.XmlTypeAttribute(Namespace="http://api.facebook.com/1.0/")]
+ public class hs_info {
+
+ /// <remarks/>
+ public string hs1_name;
+
+ /// <remarks/>
+ public string hs2_name;
+
+ /// <remarks/>
+ public int grad_year;
+
+ /// <remarks/>
+ public int hs1_id;
+
+ /// <remarks/>
+ public int hs2_id;
+ }
+
+ /// <remarks/>
+ [System.Xml.Serialization.XmlTypeAttribute(Namespace="http://api.facebook.com/1.0/")]
+ public class userMeeting_for {
+
+ /// <remarks/>
+ [System.Xml.Serialization.XmlAttributeAttribute(Namespace="")]
+ public bool list;
+
+ /// <remarks/>
+ [System.Xml.Serialization.XmlIgnore()]
+ public bool listSpecified;
+
+ /// <remarks/>
+ [System.Xml.Serialization.XmlElementAttribute("seeking")]
+ public string[] seeking;
+ }
+
+ /// <remarks/>
+ [System.Xml.Serialization.XmlTypeAttribute(Namespace="http://api.facebook.com/1.0/")]
+ public class userMeeting_sex {
+
+ /// <remarks/>
+ [System.Xml.Serialization.XmlAttributeAttribute(Namespace="")]
+ public bool list;
+
+ /// <remarks/>
+ [System.Xml.Serialization.XmlIgnore()]
+ public bool listSpecified;
+
+ /// <remarks/>
+ [System.Xml.Serialization.XmlElementAttribute("sex")]
+ public string[] sex;
+ }
+
+ /// <remarks/>
+ [System.Xml.Serialization.XmlTypeAttribute(Namespace="http://api.facebook.com/1.0/")]
+ public class userWork_history {
+
+ /// <remarks/>
+ [System.Xml.Serialization.XmlAttributeAttribute(Namespace="")]
+ public bool list;
+
+ /// <remarks/>
+ [System.Xml.Serialization.XmlIgnore()]
+ public bool listSpecified;
+
+ /// <remarks/>
+ [System.Xml.Serialization.XmlElementAttribute("work_info")]
+ public work_info[] work_info;
+ }
+
+ /// <remarks/>
+ [System.Xml.Serialization.XmlTypeAttribute(Namespace="http://api.facebook.com/1.0/")]
+ public class work_info {
+
+ /// <remarks/>
+ public location location;
+
+ /// <remarks/>
+ public string company_name;
+
+ /// <remarks/>
+ public string position;
+
+ /// <remarks/>
+ public string description;
+
+ /// <remarks/>
+ public string start_date;
+
+ /// <remarks/>
+ public string end_date;
+ }
+
+ /// <remarks/>
+ [System.Xml.Serialization.XmlTypeAttribute(Namespace="http://api.facebook.com/1.0/")]
+ public class userEmail_hashes {
+
+ /// <remarks/>
+ [System.Xml.Serialization.XmlAttributeAttribute(Namespace="")]
+ public bool list;
+
+ /// <remarks/>
+ [System.Xml.Serialization.XmlIgnore()]
+ public bool listSpecified;
+
+ /// <remarks/>
+ [System.Xml.Serialization.XmlElementAttribute("email_hashes_elt")]
+ public string[] email_hashes_elt;
+ }
+
+ /// <remarks/>
+ [System.Xml.Serialization.XmlTypeAttribute(Namespace="http://api.facebook.com/1.0/")]
+ public class userFamily {
+
+ /// <remarks/>
+ [System.Xml.Serialization.XmlAttributeAttribute(Namespace="")]
+ public bool list;
+
+ /// <remarks/>
+ [System.Xml.Serialization.XmlIgnore()]
+ public bool listSpecified;
+
+ /// <remarks/>
+ [System.Xml.Serialization.XmlElementAttribute("family_info")]
+ public family_info[] family_info;
+ }
+
+ /// <remarks/>
+ [System.Xml.Serialization.XmlTypeAttribute(Namespace="http://api.facebook.com/1.0/")]
+ public class family_info {
+
+ /// <remarks/>
+ public string relationship;
+
+ /// <remarks/>
+ [System.Xml.Serialization.XmlElementAttribute(IsNullable=true)]
+ public long? uid;
+
+ /// <remarks/>
+ [System.Xml.Serialization.XmlElementAttribute(IsNullable=true)]
+ public string name;
+
+ /// <remarks/>
+ [System.Xml.Serialization.XmlElementAttribute(IsNullable=true)]
+ public string birthday;
+
+ /// <remarks/>
+ [System.Xml.Serialization.XmlElementAttribute(IsNullable=true)]
+ public long? profile_id;
+ }
+
+ /// <remarks/>
+ [System.Xml.Serialization.XmlTypeAttribute(Namespace="http://api.facebook.com/1.0/")]
+ [System.Xml.Serialization.XmlRootAttribute(Namespace="http://api.facebook.com/1.0/", IsNullable=false)]
+ public class notes_get_response {
+
+ /// <remarks/>
+ [System.Xml.Serialization.XmlAttributeAttribute(Namespace="")]
+ public bool list;
+
+ /// <remarks/>
+ [System.Xml.Serialization.XmlIgnore()]
+ public bool listSpecified;
+
+ /// <remarks/>
+ [System.Xml.Serialization.XmlElementAttribute("note")]
+ public note[] note;
+ }
+
+ /// <remarks/>
+ [System.Xml.Serialization.XmlTypeAttribute(Namespace="http://api.facebook.com/1.0/")]
+ public class note {
+
+ /// <remarks/>
+ public long note_id;
+
+ /// <remarks/>
+ public string title;
+
+ /// <remarks/>
+ public string content;
+
+ /// <remarks/>
+ public long created_time;
+
+ /// <remarks/>
+ public long updated_time;
+ }
+
+ /// <remarks/>
+ [System.Xml.Serialization.XmlTypeAttribute(Namespace="http://api.facebook.com/1.0/")]
+ [System.Xml.Serialization.XmlRootAttribute(Namespace="http://api.facebook.com/1.0/", IsNullable=false)]
+ public class data_getUserPreferences_response {
+
+ /// <remarks/>
+ [System.Xml.Serialization.XmlAttributeAttribute(Namespace="")]
+ public bool list;
+
+ /// <remarks/>
+ [System.Xml.Serialization.XmlIgnore()]
+ public bool listSpecified;
+
+ /// <remarks/>
+ [System.Xml.Serialization.XmlElementAttribute("preference")]
+ public preference[] preference;
+ }
+
+ /// <remarks/>
+ [System.Xml.Serialization.XmlTypeAttribute(Namespace="http://api.facebook.com/1.0/")]
+ public class preference {
+
+ /// <remarks/>
+ public int pref_id;
+
+ /// <remarks/>
+ public string value;
+ }
+
+ /// <remarks/>
+ [System.Xml.Serialization.XmlTypeAttribute(Namespace="http://api.facebook.com/1.0/")]
+ [System.Xml.Serialization.XmlRootAttribute(Namespace="http://api.facebook.com/1.0/", IsNullable=false)]
+ public class users_getStandardInfo_response {
+
+ /// <remarks/>
+ [System.Xml.Serialization.XmlAttributeAttribute(Namespace="")]
+ public bool list;
+
+ /// <remarks/>
+ [System.Xml.Serialization.XmlIgnore()]
+ public bool listSpecified;
+
+ /// <remarks/>
+ [System.Xml.Serialization.XmlElementAttribute("user")]
+ public user[] user;
+ }
+
+ /// <remarks/>
+ [System.Xml.Serialization.XmlTypeAttribute(Namespace="http://api.facebook.com/1.0/")]
+ [System.Xml.Serialization.XmlRootAttribute(Namespace="http://api.facebook.com/1.0/", IsNullable=false)]
+ public class events_get_response {
+
+ /// <remarks/>
+ [System.Xml.Serialization.XmlAttributeAttribute(Namespace="")]
+ public bool list;
+
+ /// <remarks/>
+ [System.Xml.Serialization.XmlIgnore()]
+ public bool listSpecified;
+
+ /// <remarks/>
+ [System.Xml.Serialization.XmlElementAttribute("event")]
+ public @event[] @event;
+ }
+
+ /// <remarks/>
+ [System.Xml.Serialization.XmlTypeAttribute(Namespace="http://api.facebook.com/1.0/")]
+ public class @event {
+
+ /// <remarks/>
+ public long eid;
+
+ /// <remarks/>
+ public string name;
+
+ /// <remarks/>
+ public string tagline;
+
+ /// <remarks/>
+ public int nid;
+
+ /// <remarks/>
+ public string pic;
+
+ /// <remarks/>
+ public string pic_big;
+
+ /// <remarks/>
+ public string pic_small;
+
+ /// <remarks/>
+ public string host;
+
+ /// <remarks/>
+ public string description;
+
+ /// <remarks/>
+ public string event_type;
+
+ /// <remarks/>
+ public string event_subtype;
+
+ /// <remarks/>
+ public long start_time;
+
+ /// <remarks/>
+ public long end_time;
+
+ /// <remarks/>
+ [System.Xml.Serialization.XmlElementAttribute(IsNullable=true)]
+ public long? creator;
+
+ /// <remarks/>
+ public long update_time;
+
+ /// <remarks/>
+ public string location;
+
+ /// <remarks/>
+ public location venue;
+
+ /// <remarks/>
+ public string privacy;
+
+ /// <remarks/>
+ public bool hide_guest_list;
+
+ /// <remarks/>
+ public bool show_in_search;
+
+ /// <remarks/>
+ public bool show_wall;
+
+ /// <remarks/>
+ public bool show_videos;
+
+ /// <remarks/>
+ public bool show_photos;
+
+ /// <remarks/>
+ public bool show_posts;
+ }
+
+ /// <remarks/>
+ [System.Xml.Serialization.XmlTypeAttribute(Namespace="http://api.facebook.com/1.0/")]
+ [System.Xml.Serialization.XmlRootAttribute(Namespace="http://api.facebook.com/1.0/", IsNullable=false)]
+ public class connect_registerUsers_response {
+
+ /// <remarks/>
+ [System.Xml.Serialization.XmlAttributeAttribute(Namespace="")]
+ public bool list;
+
+ /// <remarks/>
+ [System.Xml.Serialization.XmlIgnore()]
+ public bool listSpecified;
+
+ /// <remarks/>
+ [System.Xml.Serialization.XmlElementAttribute("connect_registerUsers_response_elt")]
+ public string[] connect_registerUsers_response_elt;
+ }
+
+ /// <remarks/>
+ [System.Xml.Serialization.XmlTypeAttribute(Namespace="http://api.facebook.com/1.0/")]
+ [System.Xml.Serialization.XmlRootAttribute(Namespace="http://api.facebook.com/1.0/", IsNullable=false)]
+ public class fbml_getCustomTags_response {
+
+ /// <remarks/>
+ [System.Xml.Serialization.XmlAttributeAttribute(Namespace="")]
+ public bool list;
+
+ /// <remarks/>
+ [System.Xml.Serialization.XmlIgnore()]
+ public bool listSpecified;
+
+ /// <remarks/>
+ [System.Xml.Serialization.XmlElementAttribute("custom_tag")]
+ public custom_tag[] custom_tag;
+ }
+
+ /// <remarks/>
+ [System.Xml.Serialization.XmlTypeAttribute(Namespace="http://api.facebook.com/1.0/")]
+ public class custom_tag {
+
+ /// <remarks/>
+ public string name;
+
+ /// <remarks/>
+ public int type;
+
+ /// <remarks/>
+ public string summary;
+
+ /// <remarks/>
+ public string description;
+
+ /// <remarks/>
+ public custom_tagParameter parameter;
+
+ /// <remarks/>
+ public string body;
+
+ /// <remarks/>
+ public string open_tag;
+
+ /// <remarks/>
+ public string close_tag;
+ }
+
+ /// <remarks/>
+ [System.Xml.Serialization.XmlTypeAttribute(Namespace="http://api.facebook.com/1.0/")]
+ public class custom_tagParameter {
+
+ /// <remarks/>
+ [System.Xml.Serialization.XmlAttributeAttribute(Namespace="")]
+ public bool list;
+
+ /// <remarks/>
+ [System.Xml.Serialization.XmlIgnore()]
+ public bool listSpecified;
+
+ /// <remarks/>
+ [System.Xml.Serialization.XmlElementAttribute("custom_tag_parameter")]
+ public custom_tag_parameter[] custom_tag_parameter;
+ }
+
+ /// <remarks/>
+ [System.Xml.Serialization.XmlTypeAttribute(Namespace="http://api.facebook.com/1.0/")]
+ public class custom_tag_parameter {
+
+ /// <remarks/>
+ public string name;
+
+ /// <remarks/>
+ public string custom_tag_parameter_type;
+
+ /// <remarks/>
+ public string description;
+
+ /// <remarks/>
+ public string default_value;
+ }
+
+ /// <remarks/>
+ [System.Xml.Serialization.XmlTypeAttribute(Namespace="http://api.facebook.com/1.0/")]
+ [System.Xml.Serialization.XmlRootAttribute(Namespace="http://api.facebook.com/1.0/", IsNullable=false)]
+ public class data_getObjectType_response {
+
+ /// <remarks/>
+ [System.Xml.Serialization.XmlAttributeAttribute(Namespace="")]
+ public bool list;
+
+ /// <remarks/>
+ [System.Xml.Serialization.XmlIgnore()]
+ public bool listSpecified;
+
+ /// <remarks/>
+ [System.Xml.Serialization.XmlElementAttribute("object_property_info")]
+ public object_property_info[] object_property_info;
+ }
+
+ /// <remarks/>
+ [System.Xml.Serialization.XmlTypeAttribute(Namespace="http://api.facebook.com/1.0/")]
+ public class object_property_info {
+
+ /// <remarks/>
+ public string name;
+
+ /// <remarks/>
+ public int data_type;
+
+ /// <remarks/>
+ public int index_type;
+ }
+
+ /// <remarks/>
+ [System.Xml.Serialization.XmlTypeAttribute(Namespace="http://api.facebook.com/1.0/")]
+ [System.Xml.Serialization.XmlRootAttribute(Namespace="http://api.facebook.com/1.0/", IsNullable=false)]
+ public class data_getAssociatedObjectCounts_response {
+
+ /// <remarks/>
+ [System.Xml.Serialization.XmlAttributeAttribute(Namespace="")]
+ public bool list;
+
+ /// <remarks/>
+ [System.Xml.Serialization.XmlIgnore()]
+ public bool listSpecified;
+
+ /// <remarks/>
+ [System.Xml.Serialization.XmlElementAttribute("data_getAssociatedObjectCounts_response_elt")]
+ public int[] data_getAssociatedObjectCounts_response_elt;
+ }
+
+ /// <remarks/>
+ [System.Xml.Serialization.XmlTypeAttribute(Namespace="http://api.facebook.com/1.0/")]
+ [System.Xml.Serialization.XmlRootAttribute(Namespace="http://api.facebook.com/1.0/", IsNullable=false)]
+ public class photos_get_response {
+
+ /// <remarks/>
+ [System.Xml.Serialization.XmlAttributeAttribute(Namespace="")]
+ public bool list;
+
+ /// <remarks/>
+ [System.Xml.Serialization.XmlIgnore()]
+ public bool listSpecified;
+
+ /// <remarks/>
+ [System.Xml.Serialization.XmlElementAttribute("photo")]
+ public photo[] photo;
+ }
+
+ /// <remarks/>
+ [System.Xml.Serialization.XmlTypeAttribute(Namespace="http://api.facebook.com/1.0/")]
+ [System.Xml.Serialization.XmlRootAttribute(Namespace="http://api.facebook.com/1.0/", IsNullable=false)]
+ public class friends_get_response {
+
+ /// <remarks/>
+ [System.Xml.Serialization.XmlAttributeAttribute(Namespace="")]
+ public bool list;
+
+ /// <remarks/>
+ [System.Xml.Serialization.XmlIgnore()]
+ public bool listSpecified;
+
+ /// <remarks/>
+ [System.Xml.Serialization.XmlElementAttribute("uid")]
+ public long[] uid;
+ }
+
+ /// <remarks/>
+ [System.Xml.Serialization.XmlTypeAttribute(Namespace="http://api.facebook.com/1.0/")]
+ [System.Xml.Serialization.XmlRootAttribute(Namespace="http://api.facebook.com/1.0/", IsNullable=false)]
+ public class comments_get_response {
+
+ /// <remarks/>
+ [System.Xml.Serialization.XmlAttributeAttribute(Namespace="")]
+ public bool list;
+
+ /// <remarks/>
+ [System.Xml.Serialization.XmlIgnore()]
+ public bool listSpecified;
+
+ /// <remarks/>
+ [System.Xml.Serialization.XmlElementAttribute("comment")]
+ public comment[] comment;
+ }
+
+ /// <remarks/>
+ [System.Xml.Serialization.XmlTypeAttribute(Namespace="http://api.facebook.com/1.0/")]
+ [System.Xml.Serialization.XmlRootAttribute(Namespace="http://api.facebook.com/1.0/", IsNullable=false)]
+ public class friends_areFriends_response {
+
+ /// <remarks/>
+ [System.Xml.Serialization.XmlAttributeAttribute(Namespace="")]
+ public bool list;
+
+ /// <remarks/>
+ [System.Xml.Serialization.XmlIgnore()]
+ public bool listSpecified;
+
+ /// <remarks/>
+ [System.Xml.Serialization.XmlElementAttribute("friend_info")]
+ public friend_info[] friend_info;
+ }
+
+ /// <remarks/>
+ [System.Xml.Serialization.XmlTypeAttribute(Namespace="http://api.facebook.com/1.0/")]
+ public class friend_info {
+
+ /// <remarks/>
+ public long uid1;
+
+ /// <remarks/>
+ [System.Xml.Serialization.XmlIgnore()]
+ public bool uid1Specified;
+
+ /// <remarks/>
+ public long uid2;
+
+ /// <remarks/>
+ [System.Xml.Serialization.XmlIgnore()]
+ public bool uid2Specified;
+
+ /// <remarks/>
+ [System.Xml.Serialization.XmlElementAttribute(IsNullable=true)]
+ public bool? are_friends;
+
+ /// <remarks/>
+ [System.Xml.Serialization.XmlIgnore()]
+ public bool are_friendsSpecified;
+ }
+
+ /// <remarks/>
+ [System.Xml.Serialization.XmlTypeAttribute(Namespace="http://api.facebook.com/1.0/")]
+ [System.Xml.Serialization.XmlRootAttribute(Namespace="http://api.facebook.com/1.0/", IsNullable=false)]
+ public class data_getObjectTypes_response {
+
+ /// <remarks/>
+ [System.Xml.Serialization.XmlAttributeAttribute(Namespace="")]
+ public bool list;
+
+ /// <remarks/>
+ [System.Xml.Serialization.XmlIgnore()]
+ public bool listSpecified;
+
+ /// <remarks/>
+ [System.Xml.Serialization.XmlElementAttribute("object_type_info")]
+ public object_type_info[] object_type_info;
+ }
+
+ /// <remarks/>
+ [System.Xml.Serialization.XmlTypeAttribute(Namespace="http://api.facebook.com/1.0/")]
+ public class object_type_info {
+
+ /// <remarks/>
+ public string name;
+
+ /// <remarks/>
+ public int object_class;
+ }
+
+ /// <remarks/>
+ [System.Xml.Serialization.XmlTypeAttribute(Namespace="http://api.facebook.com/1.0/")]
+ [System.Xml.Serialization.XmlRootAttribute(Namespace="http://api.facebook.com/1.0/", IsNullable=false)]
+ public class data_getCookies_response {
+
+ /// <remarks/>
+ [System.Xml.Serialization.XmlAttributeAttribute(Namespace="")]
+ public bool list;
+
+ /// <remarks/>
+ [System.Xml.Serialization.XmlIgnore()]
+ public bool listSpecified;
+
+ /// <remarks/>
+ [System.Xml.Serialization.XmlElementAttribute("cookie")]
+ public cookie[] cookie;
+ }
+
+ /// <remarks/>
+ [System.Xml.Serialization.XmlTypeAttribute(Namespace="http://api.facebook.com/1.0/")]
+ public class cookie {
+
+ /// <remarks/>
+ public long uid;
+
+ /// <remarks/>
+ public string name;
+
+ /// <remarks/>
+ public string value;
+
+ /// <remarks/>
+ public int expires;
+
+ /// <remarks/>
+ public string path;
+ }
+
+ /// <remarks/>
+ [System.Xml.Serialization.XmlTypeAttribute(Namespace="http://api.facebook.com/1.0/")]
+ [System.Xml.Serialization.XmlRootAttribute(Namespace="http://api.facebook.com/1.0/", IsNullable=false)]
+ public class privacy_canSee_response {
+
+ /// <remarks/>
+ [System.Xml.Serialization.XmlAttributeAttribute(Namespace="")]
+ public bool list;
+
+ /// <remarks/>
+ [System.Xml.Serialization.XmlIgnore()]
+ public bool listSpecified;
+
+ /// <remarks/>
+ [System.Xml.Serialization.XmlElementAttribute("privacy_canSee_response_elt")]
+ public bool[] privacy_canSee_response_elt;
+ }
+
+ /// <remarks/>
+ [System.Xml.Serialization.XmlTypeAttribute(Namespace="http://api.facebook.com/1.0/")]
+ [System.Xml.Serialization.XmlRootAttribute("auth_getSignedPublicSessionData_response", Namespace="http://api.facebook.com/1.0/", IsNullable=false)]
+ public class public_session_data {
+
+ /// <remarks/>
+ public long uid;
+
+ /// <remarks/>
+ public string api_key;
+
+ /// <remarks/>
+ public int expires;
+
+ /// <remarks/>
+ public string sig;
+ }
+
+ /// <remarks/>
+ [System.Xml.Serialization.XmlTypeAttribute(Namespace="http://api.facebook.com/1.0/")]
+ [System.Xml.Serialization.XmlRootAttribute(Namespace="http://api.facebook.com/1.0/", IsNullable=false)]
+ public class profile_getInfoOptions_response {
+
+ /// <remarks/>
+ [System.Xml.Serialization.XmlAttributeAttribute(Namespace="")]
+ public bool list;
+
+ /// <remarks/>
+ [System.Xml.Serialization.XmlIgnore()]
+ public bool listSpecified;
+
+ /// <remarks/>
+ [System.Xml.Serialization.XmlElementAttribute("info_item")]
+ public info_item[] info_item;
+ }
+
+ /// <remarks/>
+ [System.Xml.Serialization.XmlTypeAttribute(Namespace="http://api.facebook.com/1.0/")]
+ [System.Xml.Serialization.XmlRootAttribute(Namespace="http://api.facebook.com/1.0/", IsNullable=false)]
+ public class photos_getTags_response {
+
+ /// <remarks/>
+ [System.Xml.Serialization.XmlAttributeAttribute(Namespace="")]
+ public bool list;
+
+ /// <remarks/>
+ [System.Xml.Serialization.XmlIgnore()]
+ public bool listSpecified;
+
+ /// <remarks/>
+ [System.Xml.Serialization.XmlElementAttribute("photo_tag")]
+ public photo_tag[] photo_tag;
+ }
+
+ /// <remarks/>
+ [System.Xml.Serialization.XmlTypeAttribute(Namespace="http://api.facebook.com/1.0/")]
+ public class photo_tag {
+
+ /// <remarks/>
+ public string pid;
+
+ /// <remarks/>
+ public long subject;
+
+ /// <remarks/>
+ [System.Xml.Serialization.XmlIgnore()]
+ public bool subjectSpecified;
+
+ /// <remarks/>
+ public string text;
+
+ /// <remarks/>
+ public System.Decimal xcoord;
+
+ /// <remarks/>
+ public System.Decimal ycoord;
+
+ /// <remarks/>
+ public long created;
+ }
+
+ /// <remarks/>
+ [System.Xml.Serialization.XmlTypeAttribute(Namespace="http://api.facebook.com/1.0/")]
+ [System.Xml.Serialization.XmlRootAttribute(Namespace="http://api.facebook.com/1.0/", IsNullable=false)]
+ public class message_getThreadsInFolder_response {
+
+ /// <remarks/>
+ [System.Xml.Serialization.XmlAttributeAttribute(Namespace="")]
+ public bool list;
+
+ /// <remarks/>
+ [System.Xml.Serialization.XmlIgnore()]
+ public bool listSpecified;
+
+ /// <remarks/>
+ [System.Xml.Serialization.XmlElementAttribute("thread")]
+ public thread[] thread;
+ }
+
+ /// <remarks/>
+ [System.Xml.Serialization.XmlTypeAttribute(Namespace="http://api.facebook.com/1.0/")]
+ public class thread {
+
+ /// <remarks/>
+ public long thread_id;
+
+ /// <remarks/>
+ public string subject;
+
+ /// <remarks/>
+ public threadRecipients recipients;
+
+ /// <remarks/>
+ public long updated_time;
+
+ /// <remarks/>
+ public string parent_message_id;
+
+ /// <remarks/>
+ public long parent_thread_id;
+
+ /// <remarks/>
+ public int message_count;
+
+ /// <remarks/>
+ public string snippet;
+
+ /// <remarks/>
+ public long snippet_author;
+
+ /// <remarks/>
+ public long object_id;
+
+ /// <remarks/>
+ public bool unread;
+
+ /// <remarks/>
+ public threadMessages messages;
+ }
+
+ /// <remarks/>
+ [System.Xml.Serialization.XmlTypeAttribute(Namespace="http://api.facebook.com/1.0/")]
+ public class threadRecipients {
+
+ /// <remarks/>
+ [System.Xml.Serialization.XmlAttributeAttribute(Namespace="")]
+ public bool list;
+
+ /// <remarks/>
+ [System.Xml.Serialization.XmlIgnore()]
+ public bool listSpecified;
+
+ /// <remarks/>
+ [System.Xml.Serialization.XmlElementAttribute("uid")]
+ public long[] uid;
+ }
+
+ /// <remarks/>
+ [System.Xml.Serialization.XmlTypeAttribute(Namespace="http://api.facebook.com/1.0/")]
+ public class threadMessages {
+
+ /// <remarks/>
+ [System.Xml.Serialization.XmlAttributeAttribute(Namespace="")]
+ public bool list;
+
+ /// <remarks/>
+ [System.Xml.Serialization.XmlIgnore()]
+ public bool listSpecified;
+
+ /// <remarks/>
+ [System.Xml.Serialization.XmlElementAttribute("message")]
+ public message[] message;
+ }
+
+ /// <remarks/>
+ [System.Xml.Serialization.XmlTypeAttribute(Namespace="http://api.facebook.com/1.0/")]
+ public class message {
+
+ /// <remarks/>
+ public string message_id;
+
+ /// <remarks/>
+ public long author_id;
+
+ /// <remarks/>
+ public string body;
+
+ /// <remarks/>
+ public long created_time;
+
+ /// <remarks/>
+ public stream_attachment attachment;
+ }
+
+ /// <remarks/>
+ [System.Xml.Serialization.XmlTypeAttribute(Namespace="http://api.facebook.com/1.0/")]
+ [System.Xml.Serialization.XmlRootAttribute("stream_get_response", Namespace="http://api.facebook.com/1.0/", IsNullable=false)]
+ public class stream_data {
+
+ /// <remarks/>
+ public stream_dataPosts posts;
+
+ /// <remarks/>
+ public stream_dataProfiles profiles;
+
+ /// <remarks/>
+ public stream_dataAlbums albums;
+
+ /// <remarks/>
+ public stream_dataPhoto_tags photo_tags;
+
+ /// <remarks/>
+ public stream_dataPhoto_feedback photo_feedback;
+
+ /// <remarks/>
+ public stream_dataConnections connections;
+ }
+
+ /// <remarks/>
+ [System.Xml.Serialization.XmlTypeAttribute(Namespace="http://api.facebook.com/1.0/")]
+ public class stream_dataPosts {
+
+ /// <remarks/>
+ [System.Xml.Serialization.XmlAttributeAttribute(Namespace="")]
+ public bool list;
+
+ /// <remarks/>
+ [System.Xml.Serialization.XmlIgnore()]
+ public bool listSpecified;
+
+ /// <remarks/>
+ [System.Xml.Serialization.XmlElementAttribute("stream_post")]
+ public stream_post[] stream_post;
+ }
+
+ /// <remarks/>
+ [System.Xml.Serialization.XmlTypeAttribute(Namespace="http://api.facebook.com/1.0/")]
+ public class stream_post {
+
+ /// <remarks/>
+ public string post_id;
+
+ /// <remarks/>
+ public long viewer_id;
+
+ /// <remarks/>
+ public string view;
+
+ /// <remarks/>
+ public long source_id;
+
+ /// <remarks/>
+ public string type;
+
+ /// <remarks/>
+ public long app_id;
+
+ /// <remarks/>
+ public string attribution;
+
+ /// <remarks/>
+ public long actor_id;
+
+ /// <remarks/>
+ public long target_id;
+
+ /// <remarks/>
+ public string message;
+
+ /// <remarks/>
+ public stream_attachment attachment;
+
+ /// <remarks/>
+ public stream_app_data app_data;
+
+ /// <remarks/>
+ public stream_postAction_links action_links;
+
+ /// <remarks/>
+ public stream_comments comments;
+
+ /// <remarks/>
+ public stream_likes likes;
+
+ /// <remarks/>
+ public privacy privacy;
+
+ /// <remarks/>
+ public long updated_time;
+
+ /// <remarks/>
+ public long created_time;
+
+ /// <remarks/>
+ public stream_postTagged_ids tagged_ids;
+
+ /// <remarks/>
+ public bool is_hidden;
+ }
+
+ /// <remarks/>
+ [System.Xml.Serialization.XmlTypeAttribute(Namespace="http://api.facebook.com/1.0/")]
+ public class stream_app_data {
+
+ /// <remarks/>
+ public long tbid;
+
+ /// <remarks/>
+ public string attachment_data;
+
+ /// <remarks/>
+ public string images;
+ }
+
+ /// <remarks/>
+ [System.Xml.Serialization.XmlTypeAttribute(Namespace="http://api.facebook.com/1.0/")]
+ public class stream_postAction_links {
+
+ /// <remarks/>
+ [System.Xml.Serialization.XmlAttributeAttribute(Namespace="")]
+ public bool list;
+
+ /// <remarks/>
+ [System.Xml.Serialization.XmlIgnore()]
+ public bool listSpecified;
+
+ /// <remarks/>
+ [System.Xml.Serialization.XmlElementAttribute("stream_action_link")]
+ public stream_action_link[] stream_action_link;
+ }
+
+ /// <remarks/>
+ [System.Xml.Serialization.XmlTypeAttribute(Namespace="http://api.facebook.com/1.0/")]
+ public class stream_comments {
+
+ /// <remarks/>
+ public bool can_remove;
+
+ /// <remarks/>
+ public bool can_post;
+
+ /// <remarks/>
+ public int count;
+
+ /// <remarks/>
+ public stream_commentsComment_list comment_list;
+ }
+
+ /// <remarks/>
+ [System.Xml.Serialization.XmlTypeAttribute(Namespace="http://api.facebook.com/1.0/")]
+ public class stream_commentsComment_list {
+
+ /// <remarks/>
+ [System.Xml.Serialization.XmlAttributeAttribute(Namespace="")]
+ public bool list;
+
+ /// <remarks/>
+ [System.Xml.Serialization.XmlIgnore()]
+ public bool listSpecified;
+
+ /// <remarks/>
+ [System.Xml.Serialization.XmlElementAttribute("comment")]
+ public comment[] comment;
+ }
+
+ /// <remarks/>
+ [System.Xml.Serialization.XmlTypeAttribute(Namespace="http://api.facebook.com/1.0/")]
+ public class stream_likes {
+
+ /// <remarks/>
+ public string href;
+
+ /// <remarks/>
+ public int count;
+
+ /// <remarks/>
+ public stream_likesSample sample;
+
+ /// <remarks/>
+ public stream_likesFriends friends;
+
+ /// <remarks/>
+ public bool user_likes;
+
+ /// <remarks/>
+ public bool can_like;
+ }
+
+ /// <remarks/>
+ [System.Xml.Serialization.XmlTypeAttribute(Namespace="http://api.facebook.com/1.0/")]
+ public class stream_likesSample {
+
+ /// <remarks/>
+ [System.Xml.Serialization.XmlAttributeAttribute(Namespace="")]
+ public bool list;
+
+ /// <remarks/>
+ [System.Xml.Serialization.XmlIgnore()]
+ public bool listSpecified;
+
+ /// <remarks/>
+ [System.Xml.Serialization.XmlElementAttribute("uid")]
+ public long[] uid;
+ }
+
+ /// <remarks/>
+ [System.Xml.Serialization.XmlTypeAttribute(Namespace="http://api.facebook.com/1.0/")]
+ public class stream_likesFriends {
+
+ /// <remarks/>
+ [System.Xml.Serialization.XmlAttributeAttribute(Namespace="")]
+ public bool list;
+
+ /// <remarks/>
+ [System.Xml.Serialization.XmlIgnore()]
+ public bool listSpecified;
+
+ /// <remarks/>
+ [System.Xml.Serialization.XmlElementAttribute("uid")]
+ public long[] uid;
+ }
+
+ /// <remarks/>
+ [System.Xml.Serialization.XmlTypeAttribute(Namespace="http://api.facebook.com/1.0/")]
+ public class stream_postTagged_ids {
+
+ /// <remarks/>
+ [System.Xml.Serialization.XmlAttributeAttribute(Namespace="")]
+ public bool list;
+
+ /// <remarks/>
+ [System.Xml.Serialization.XmlIgnore()]
+ public bool listSpecified;
+
+ /// <remarks/>
+ [System.Xml.Serialization.XmlElementAttribute("id")]
+ public long[] id;
+ }
+
+ /// <remarks/>
+ [System.Xml.Serialization.XmlTypeAttribute(Namespace="http://api.facebook.com/1.0/")]
+ public class stream_dataProfiles {
+
+ /// <remarks/>
+ [System.Xml.Serialization.XmlAttributeAttribute(Namespace="")]
+ public bool list;
+
+ /// <remarks/>
+ [System.Xml.Serialization.XmlIgnore()]
+ public bool listSpecified;
+
+ /// <remarks/>
+ [System.Xml.Serialization.XmlElementAttribute("profile")]
+ public profile[] profile;
+ }
+
+ /// <remarks/>
+ [System.Xml.Serialization.XmlTypeAttribute(Namespace="http://api.facebook.com/1.0/")]
+ public class profile {
+
+ /// <remarks/>
+ public long id;
+
+ /// <remarks/>
+ public string url;
+
+ /// <remarks/>
+ public string name;
+
+ /// <remarks/>
+ public string pic_square;
+
+ /// <remarks/>
+ public string type;
+ }
+
+ /// <remarks/>
+ [System.Xml.Serialization.XmlTypeAttribute(Namespace="http://api.facebook.com/1.0/")]
+ public class stream_dataAlbums {
+
+ /// <remarks/>
+ [System.Xml.Serialization.XmlAttributeAttribute(Namespace="")]
+ public bool list;
+
+ /// <remarks/>
+ [System.Xml.Serialization.XmlIgnore()]
+ public bool listSpecified;
+
+ /// <remarks/>
+ [System.Xml.Serialization.XmlElementAttribute("album")]
+ public album[] album;
+ }
+
+ /// <remarks/>
+ [System.Xml.Serialization.XmlTypeAttribute(Namespace="http://api.facebook.com/1.0/")]
+ public class stream_dataPhoto_tags {
+
+ /// <remarks/>
+ [System.Xml.Serialization.XmlAttributeAttribute(Namespace="")]
+ public bool list;
+
+ /// <remarks/>
+ [System.Xml.Serialization.XmlIgnore()]
+ public bool listSpecified;
+
+ /// <remarks/>
+ [System.Xml.Serialization.XmlElementAttribute("photo_tag")]
+ public photo_tag[] photo_tag;
+ }
+
+ /// <remarks/>
+ [System.Xml.Serialization.XmlTypeAttribute(Namespace="http://api.facebook.com/1.0/")]
+ public class stream_dataPhoto_feedback {
+
+ /// <remarks/>
+ [System.Xml.Serialization.XmlAttributeAttribute(Namespace="")]
+ public bool list;
+
+ /// <remarks/>
+ [System.Xml.Serialization.XmlIgnore()]
+ public bool listSpecified;
+
+ /// <remarks/>
+ [System.Xml.Serialization.XmlElementAttribute("photo_feedback")]
+ public photo_feedback[] photo_feedback;
+ }
+
+ /// <remarks/>
+ [System.Xml.Serialization.XmlTypeAttribute(Namespace="http://api.facebook.com/1.0/")]
+ public class photo_feedback {
+
+ /// <remarks/>
+ public string pid;
+
+ /// <remarks/>
+ public stream_comments comments;
+
+ /// <remarks/>
+ public stream_likes likes;
+ }
+
+ /// <remarks/>
+ [System.Xml.Serialization.XmlTypeAttribute(Namespace="http://api.facebook.com/1.0/")]
+ public class stream_dataConnections {
+
+ /// <remarks/>
+ [System.Xml.Serialization.XmlAttributeAttribute(Namespace="")]
+ public bool list;
+
+ /// <remarks/>
+ [System.Xml.Serialization.XmlIgnore()]
+ public bool listSpecified;
+
+ /// <remarks/>
+ [System.Xml.Serialization.XmlElementAttribute("connection")]
+ public connection[] connection;
+ }
+
+ /// <remarks/>
+ [System.Xml.Serialization.XmlTypeAttribute(Namespace="http://api.facebook.com/1.0/")]
+ public class connection {
+
+ /// <remarks/>
+ public long source_id;
+
+ /// <remarks/>
+ public long target_id;
+
+ /// <remarks/>
+ public bool is_following;
+ }
+
+ /// <remarks/>
+ [System.Xml.Serialization.XmlTypeAttribute(Namespace="http://api.facebook.com/1.0/")]
+ [System.Xml.Serialization.XmlRootAttribute(Namespace="http://api.facebook.com/1.0/", IsNullable=false)]
+ public class fql_query_response {
+ }
+
+ /// <remarks/>
+ [System.Xml.Serialization.XmlTypeAttribute(Namespace="http://api.facebook.com/1.0/")]
+ [System.Xml.Serialization.XmlRootAttribute(Namespace="http://api.facebook.com/1.0/", IsNullable=false)]
+ public class status_get_response {
+
+ /// <remarks/>
+ [System.Xml.Serialization.XmlAttributeAttribute(Namespace="")]
+ public bool list;
+
+ /// <remarks/>
+ [System.Xml.Serialization.XmlIgnore()]
+ public bool listSpecified;
+
+ /// <remarks/>
+ [System.Xml.Serialization.XmlElementAttribute("user_status")]
+ public user_status[] user_status;
+ }
+
+ /// <remarks/>
+ [System.Xml.Serialization.XmlTypeAttribute(Namespace="http://api.facebook.com/1.0/")]
+ [System.Xml.Serialization.XmlRootAttribute("friends_createList_response", Namespace="http://api.facebook.com/1.0/")]
+ public class friendlist {
+
+ /// <remarks/>
+ public long flid;
+
+ /// <remarks/>
+ public string name;
+
+ /// <remarks/>
+ public long owner;
+
+ /// <remarks/>
+ [System.Xml.Serialization.XmlIgnore()]
+ public bool ownerSpecified;
+ }
+
+ /// <remarks/>
+ [System.Xml.Serialization.XmlTypeAttribute(Namespace="http://api.facebook.com/1.0/")]
+ [System.Xml.Serialization.XmlRootAttribute(Namespace="http://api.facebook.com/1.0/", IsNullable=false)]
+ public class permissions_checkAvailableApiAccess_response {
+
+ /// <remarks/>
+ [System.Xml.Serialization.XmlAttributeAttribute(Namespace="")]
+ public bool list;
+
+ /// <remarks/>
+ [System.Xml.Serialization.XmlIgnore()]
+ public bool listSpecified;
+
+ /// <remarks/>
+ [System.Xml.Serialization.XmlElementAttribute("permissions_checkAvailableApiAccess_response_elt")]
+ public string[] permissions_checkAvailableApiAccess_response_elt;
+ }
+
+ /// <remarks/>
+ [System.Xml.Serialization.XmlTypeAttribute(Namespace="http://api.facebook.com/1.0/")]
+ [System.Xml.Serialization.XmlRootAttribute(Namespace="http://api.facebook.com/1.0/", IsNullable=false)]
+ public class friends_getLists_response {
+
+ /// <remarks/>
+ [System.Xml.Serialization.XmlAttributeAttribute(Namespace="")]
+ public bool list;
+
+ /// <remarks/>
+ [System.Xml.Serialization.XmlIgnore()]
+ public bool listSpecified;
+
+ /// <remarks/>
+ [System.Xml.Serialization.XmlElementAttribute("friendlist")]
+ public friendlist[] friendlist;
+ }
+
+ /// <remarks/>
+ [System.Xml.Serialization.XmlTypeAttribute(Namespace="http://api.facebook.com/1.0/")]
+ [System.Xml.Serialization.XmlRootAttribute(Namespace="http://api.facebook.com/1.0/", IsNullable=false)]
+ public class photos_getAlbums_response {
+
+ /// <remarks/>
+ [System.Xml.Serialization.XmlAttributeAttribute(Namespace="")]
+ public bool list;
+
+ /// <remarks/>
+ [System.Xml.Serialization.XmlIgnore()]
+ public bool listSpecified;
+
+ /// <remarks/>
+ [System.Xml.Serialization.XmlElementAttribute("album")]
+ public album[] album;
+ }
+
+ /// <remarks/>
+ [System.Xml.Serialization.XmlTypeAttribute(Namespace="http://api.facebook.com/1.0/")]
+ [System.Xml.Serialization.XmlRootAttribute("application_getPublicInfo_response", Namespace="http://api.facebook.com/1.0/")]
+ public class app_info {
+
+ /// <remarks/>
+ public long app_id;
+
+ /// <remarks/>
+ public string api_key;
+
+ /// <remarks/>
+ public string canvas_name;
+
+ /// <remarks/>
+ public string display_name;
+
+ /// <remarks/>
+ public string icon_url;
+
+ /// <remarks/>
+ public string logo_url;
+
+ /// <remarks/>
+ public app_infoDevelopers developers;
+
+ /// <remarks/>
+ public string company_name;
+
+ /// <remarks/>
+ public string description;
+
+ /// <remarks/>
+ public int daily_active_users;
+
+ /// <remarks/>
+ public int weekly_active_users;
+
+ /// <remarks/>
+ public int monthly_active_users;
+
+ /// <remarks/>
+ public string category;
+
+ /// <remarks/>
+ public string subcategory;
+ }
+
+ /// <remarks/>
+ [System.Xml.Serialization.XmlTypeAttribute(Namespace="http://api.facebook.com/1.0/")]
+ public class app_infoDevelopers {
+
+ /// <remarks/>
+ [System.Xml.Serialization.XmlAttributeAttribute(Namespace="")]
+ public bool list;
+
+ /// <remarks/>
+ [System.Xml.Serialization.XmlIgnore()]
+ public bool listSpecified;
+
+ /// <remarks/>
+ [System.Xml.Serialization.XmlElementAttribute("developer_info")]
+ public developer_info[] developer_info;
+ }
+
+ /// <remarks/>
+ [System.Xml.Serialization.XmlTypeAttribute(Namespace="http://api.facebook.com/1.0/")]
+ public class developer_info {
+
+ /// <remarks/>
+ public int uid;
+
+ /// <remarks/>
+ public string name;
+ }
+
+ /// <remarks/>
+ [System.Xml.Serialization.XmlTypeAttribute(Namespace="http://api.facebook.com/1.0/")]
+ [System.Xml.Serialization.XmlRootAttribute("video_upload_response", Namespace="http://api.facebook.com/1.0/", IsNullable=false)]
+ public class video {
+
+ /// <remarks/>
+ public long vid;
+
+ /// <remarks/>
+ public string title;
+
+ /// <remarks/>
+ public string description;
+
+ /// <remarks/>
+ public string link;
+
+ /// <remarks/>
+ public long owner;
+
+ /// <remarks/>
+ public string thumbnail_link;
+
+ /// <remarks/>
+ public string embed_html;
+
+ /// <remarks/>
+ public long created_time;
+
+ /// <remarks/>
+ public long updated_time;
+
+ /// <remarks/>
+ public int length;
+ }
+
+ /// <remarks/>
+ [System.Xml.Serialization.XmlTypeAttribute(Namespace="http://api.facebook.com/1.0/")]
+ [System.Xml.Serialization.XmlRootAttribute("notifications_getList_response", Namespace="http://api.facebook.com/1.0/", IsNullable=false)]
+ public class notification_data {
+
+ /// <remarks/>
+ public notification_dataNotifications notifications;
+
+ /// <remarks/>
+ public notification_dataApps apps;
+ }
+
+ /// <remarks/>
+ [System.Xml.Serialization.XmlTypeAttribute(Namespace="http://api.facebook.com/1.0/")]
+ public class notification_dataNotifications {
+
+ /// <remarks/>
+ [System.Xml.Serialization.XmlAttributeAttribute(Namespace="")]
+ public bool list;
+
+ /// <remarks/>
+ [System.Xml.Serialization.XmlIgnore()]
+ public bool listSpecified;
+
+ /// <remarks/>
+ [System.Xml.Serialization.XmlElementAttribute("notification")]
+ public notification[] notification;
+ }
+
+ /// <remarks/>
+ [System.Xml.Serialization.XmlTypeAttribute(Namespace="http://api.facebook.com/1.0/")]
+ public class notification {
+
+ /// <remarks/>
+ public long notification_id;
+
+ /// <remarks/>
+ public long sender_id;
+
+ /// <remarks/>
+ public long recipient_id;
+
+ /// <remarks/>
+ public long created_time;
+
+ /// <remarks/>
+ public long updated_time;
+
+ /// <remarks/>
+ public string title_html;
+
+ /// <remarks/>
+ public string title_text;
+
+ /// <remarks/>
+ public string body_html;
+
+ /// <remarks/>
+ public string body_text;
+
+ /// <remarks/>
+ public string href;
+
+ /// <remarks/>
+ public long app_id;
+
+ /// <remarks/>
+ public int is_unread;
+
+ /// <remarks/>
+ public int is_hidden;
+
+ /// <remarks/>
+ public string object_id;
+
+ /// <remarks/>
+ public string object_type;
+ }
+
+ /// <remarks/>
+ [System.Xml.Serialization.XmlTypeAttribute(Namespace="http://api.facebook.com/1.0/")]
+ public class notification_dataApps {
+
+ /// <remarks/>
+ [System.Xml.Serialization.XmlAttributeAttribute(Namespace="")]
+ public bool list;
+
+ /// <remarks/>
+ [System.Xml.Serialization.XmlIgnore()]
+ public bool listSpecified;
+
+ /// <remarks/>
+ [System.Xml.Serialization.XmlElementAttribute("app_info")]
+ public app_info[] app_info;
+ }
+}
diff --git a/extensions/Exporters/FlickrExport/FlickrExport.cs b/extensions/Exporters/FlickrExport/FlickrExport.cs
index 6bb4727..2d228fb 100644
--- a/extensions/Exporters/FlickrExport/FlickrExport.cs
+++ b/extensions/Exporters/FlickrExport/FlickrExport.cs
@@ -10,6 +10,7 @@ using FSpot.Filters;
using FSpot.Widgets;
using FSpot.Utils;
using FSpot.UI.Dialog;
+using Hyena;
namespace FSpotFlickrExport {
public class TwentyThreeHQExport : FlickrExport
@@ -349,7 +350,7 @@ namespace FSpotFlickrExport {
Catalog.GetString ("{0} of {1}"), photo_index,
selection.Count);
- info = new FileInfo (photo.DefaultVersionUri.LocalPath);
+ info = new FileInfo (photo.DefaultVersion.Uri.LocalPath);
FilterSet stack = new FilterSet ();
if (scale)
stack.Add (new ResizeFilter ((uint)size));
@@ -368,7 +369,7 @@ namespace FSpotFlickrExport {
current_service.Name,
e.Message);
progress_dialog.ProgressText = Catalog.GetString ("Error");
- System.Console.WriteLine (e);
+ Log.Exception (e);
if (progress_dialog.PerformRetrySkip ()) {
index--;
diff --git a/extensions/Exporters/FlickrExport/FlickrNet/ActivityEvent.cs b/extensions/Exporters/FlickrExport/FlickrNet/ActivityEvent.cs
deleted file mode 100644
index b10f6d7..0000000
--- a/extensions/Exporters/FlickrExport/FlickrNet/ActivityEvent.cs
+++ /dev/null
@@ -1,110 +0,0 @@
-using System;
-using System.Xml;
-
-namespace FlickrNet
-{
- /// <summary>
- /// Summary description for ActivityEvent.
- /// </summary>
- public class ActivityEvent
- {
- private ActivityEventType _type;
- private string _userId;
- private string _userName;
- private DateTime _dateAdded;
- private string _content;
-
- /// <summary>
- /// THe <see cref="ActivityEventType"/> of the event, either Comment or Note.
- /// </summary>
- public ActivityEventType EventType
- {
- get { return _type; }
- }
-
- /// <summary>
- /// The user id of the user who made the comment or note.
- /// </summary>
- public string UserId
- {
- get { return _userId; }
- }
-
- /// <summary>
- /// The screen name of the user who made the comment or note.
- /// </summary>
- public string UserName
- {
- get { return _userName; }
- }
-
- /// <summary>
- /// The date the note or comment was added.
- /// </summary>
- public DateTime DateAdded
- {
- get { return _dateAdded; }
- }
-
- /// <summary>
- /// The text of the note or comment.
- /// </summary>
- public string Value
- {
- get { return _content; }
- }
-
- internal ActivityEvent(XmlNode eventNode)
- {
- XmlNode node;
-
- node = eventNode.Attributes.GetNamedItem("type");
- if( node == null )
- _type = ActivityEventType.Unknown;
- else if( node.Value == "comment" )
- _type = ActivityEventType.Comment;
- else if( node.Value == "note" )
- _type = ActivityEventType.Note;
- else if( node.Value == "fave" )
- _type = ActivityEventType.Favourite;
- else
- _type = ActivityEventType.Unknown;
-
- node = eventNode.Attributes.GetNamedItem("user");
- if( node != null ) _userId = node.Value;
-
- node = eventNode.Attributes.GetNamedItem("username");
- if( node != null ) _userName = node.Value;
-
- node = eventNode.Attributes.GetNamedItem("dateadded");
- if( node != null ) _dateAdded = Utils.UnixTimestampToDate(node.Value);
-
- node = eventNode.FirstChild;
- if( node != null && node.NodeType == XmlNodeType.Text ) _content = node.Value;
-
- }
- }
-
- /// <summary>
- /// The type of the <see cref="ActivityEvent"/>.
- /// </summary>
- public enum ActivityEventType
- {
- /// <summary>
- /// The event type was not specified, or was a new unsupported type.
- /// </summary>
- Unknown,
- /// <summary>
- /// The event was a comment.
- /// </summary>
- Comment,
- /// <summary>
- /// The event was a note.
- /// </summary>
- Note,
- /// <summary>
- /// The event is a favourite.
- /// </summary>
- Favourite
- }
-}
diff --git a/extensions/Exporters/FlickrExport/FlickrNet/ActivityItem.cs b/extensions/Exporters/FlickrExport/FlickrNet/ActivityItem.cs
deleted file mode 100644
index 7cb9f83..0000000
--- a/extensions/Exporters/FlickrExport/FlickrNet/ActivityItem.cs
+++ /dev/null
@@ -1,312 +0,0 @@
-using System;
-using System.Xml;
-
-namespace FlickrNet
-{
- /// <summary>
- /// Activity class used for <see cref="Flickr.ActivityUserPhotos()"/>
- /// and <see cref="Flickr.ActivityUserComments"/>.
- /// </summary>
- public class ActivityItem
- {
- private ActivityItemType _activityType;
- private string _id;
- private string _secret;
- private string _server;
- private string _farm;
- private int _commentsNew;
- private int _commentsOld;
- private int _comments;
- private string _ownerId;
- private int _more;
- private int _views;
-
- // Photoset specific
- private int _photos = -1;
- private string _primaryId = null;
-
- // Photo specific
- private int _notesNew = -1;
- private int _notesOld = -1;
- private int _notes = -1;
- private int _favs = -1;
-
- private string _title;
- private ActivityEvent[] _events;
-
- /// <summary>
- /// The <see cref="ActivityItemType"/> of the item.
- /// </summary>
- public ActivityItemType ItemType
- {
- get { return _activityType; }
- }
-
- /// <summary>
- /// The ID of either the photoset or the photo.
- /// </summary>
- public string Id
- {
- get { return _id; }
- }
-
- /// <summary>
- /// The secret for either the photo, or the primary photo for the photoset.
- /// </summary>
- public string Secret
- {
- get { return _secret; }
- }
-
- /// <summary>
- /// The server for either the photo, or the primary photo for the photoset.
- /// </summary>
- public string Server
- {
- get { return _server; }
- }
-
- /// <summary>
- /// The server farm for either the photo, or the primary photo for the photoset.
- /// </summary>
- public string Farm
- {
- get { return _farm; }
- }
-
- /// <summary>
- /// The title of the photoset or photo.
- /// </summary>
- public string Title
- {
- get { return _title; }
- }
-
- /// <summary>
- /// The number of new comments within the given time frame.
- /// </summary>
- /// <remarks>
- /// Only applicable for <see cref="Flickr.ActivityUserPhotos()"/>.
- /// </remarks>
- public int CommentsNew
- {
- get { return _commentsNew; }
- }
-
- /// <summary>
- /// The number of old comments within the given time frame.
- /// </summary>
- /// <remarks>
- /// Only applicable for <see cref="Flickr.ActivityUserPhotos()"/>.
- /// </remarks>
- public int CommentsOld
- {
- get { return _commentsOld; }
- }
-
- /// <summary>
- /// The number of comments on the item.
- /// </summary>
- /// <remarks>
- /// Only applicable for <see cref="Flickr.ActivityUserComments"/>.
- /// </remarks>
- public int Comments
- {
- get { return _comments; }
- }
-
- /// <summary>
- /// Gets the number of views for this photo or photoset.
- /// </summary>
- public int Views
- {
- get { return _views; }
- }
-
- /// <summary>
- /// You want more! You got it!
- /// </summary>
- /// <remarks>
- /// Actually, not sure what this it for!
- /// </remarks>
- public int More
- {
- get { return _more; }
- }
-
- /// <summary>
- /// The user id of the owner of this item.
- /// </summary>
- public string OwnerId
- {
- get { return _ownerId; }
- }
-
- /// <summary>
- /// If the type is a photoset then this contains the number of photos in the set. Otherwise returns -1.
- /// </summary>
- public int Photos
- {
- get { return _photos; }
- }
-
- /// <summary>
- /// If this is a photoset then returns the primary photo id, otherwise will be null (<code>Nothing</code> in VB.Net).
- /// </summary>
- public string PrimaryPhotoId
- {
- get { return _primaryId; }
- }
-
- /// <summary>
- /// The number of new notes within the given time frame.
- /// </summary>
- /// <remarks>
- /// Only applicable for photos and when calling <see cref="Flickr.ActivityUserPhotos()"/>.
- /// </remarks>
- public int NotesNew
- {
- get { return _notesNew; }
- }
-
- /// <summary>
- /// The number of old notes within the given time frame.
- /// </summary>
- /// <remarks>
- /// Only applicable for photos and when calling <see cref="Flickr.ActivityUserPhotos()"/>.
- /// </remarks>
- public int NotesOld
- {
- get { return _notesOld; }
- }
-
- /// <summary>
- /// The number of comments on the photo.
- /// </summary>
- /// <remarks>
- /// Only applicable for photos and when calling <see cref="Flickr.ActivityUserComments"/>.
- /// </remarks>
- public int Notes
- {
- get { return _notes; }
- }
-
- /// <summary>
- /// If the type is a photo then this contains the number of favourites in the set. Otherwise returns -1.
- /// </summary>
- public int Favourites
- {
- get { return _favs; }
- }
-
- /// <summary>
- /// The events that comprise this activity item.
- /// </summary>
- public ActivityEvent[] Events
- {
- get { return _events; }
- }
-
- internal ActivityItem(XmlNode itemNode)
- {
- XmlNode node;
-
- node = itemNode.Attributes.GetNamedItem("type");
-
- if( node == null )
- _activityType = ActivityItemType.Unknown;
- else if( node.Value == "photoset" )
- _activityType = ActivityItemType.Photoset;
- else if( node.Value == "photo" )
- _activityType = ActivityItemType.Photo;
- else
- _activityType = ActivityItemType.Unknown;
-
- node = itemNode.Attributes.GetNamedItem("owner");
- if( node != null ) _ownerId = node.Value;
-
- node = itemNode.Attributes.GetNamedItem("id");
- if( node != null ) _id = node.Value;
-
- node = itemNode.Attributes.GetNamedItem("secret");
- if( node != null ) _secret = node.Value;
-
- node = itemNode.Attributes.GetNamedItem("server");
- if( node != null ) _server = node.Value;
-
- node = itemNode.Attributes.GetNamedItem("farm");
- if( node != null ) _farm = node.Value;
-
- node = itemNode.Attributes.GetNamedItem("commentsnew");
- if( node != null ) _commentsNew = Convert.ToInt32(node.Value);
-
- node = itemNode.Attributes.GetNamedItem("commentsold");
- if( node != null ) _commentsOld = Convert.ToInt32(node.Value);
-
- node = itemNode.Attributes.GetNamedItem("comments");
- if( node != null ) _comments = Convert.ToInt32(node.Value);
-
- node = itemNode.Attributes.GetNamedItem("more");
- if( node != null ) _more = Convert.ToInt32(node.Value);
-
- node = itemNode.Attributes.GetNamedItem("views");
- if( node != null ) _views = Convert.ToInt32(node.Value);
-
- node = itemNode.SelectSingleNode("title");
- if( node != null ) _title = node.InnerText;
-
- XmlNodeList list = itemNode.SelectNodes("activity/event");
-
- _events = new ActivityEvent[list.Count];
-
- for(int i = 0; i < _events.Length; i++)
- {
- node = list[i];
- _events[i] = new ActivityEvent(node);
- }
-
- // Photoset specific
- // Photos, PrimaryPhotoId
-
- node = itemNode.Attributes.GetNamedItem("photos");
- if( node != null ) _photos = Convert.ToInt32(node.Value);
-
- node = itemNode.Attributes.GetNamedItem("primary");
- if( node != null ) _primaryId = node.Value;
-
- // Photo specific
- // NodesNew and NodesOld, Favourites
-
- node = itemNode.Attributes.GetNamedItem("notesnew");
- if( node != null ) _notesNew = Convert.ToInt32(node.Value);
-
- node = itemNode.Attributes.GetNamedItem("notesold");
- if( node != null ) _notesOld = Convert.ToInt32(node.Value);
-
- node = itemNode.Attributes.GetNamedItem("notes");
- if( node != null ) _notes = Convert.ToInt32(node.Value);
-
- node = itemNode.Attributes.GetNamedItem("faves");
- if( node != null ) _favs = Convert.ToInt32(node.Value);
- }
- }
-
- /// <summary>
- /// The type of the <see cref="ActivityItem"/>.
- /// </summary>
- public enum ActivityItemType
- {
- /// <summary>
- /// The type is unknown, either not set of a new unsupported type.
- /// </summary>
- Unknown,
- /// <summary>
- /// The activity item is on a photoset.
- /// </summary>
- Photoset,
- /// <summary>
- /// The activitiy item is on a photo.
- /// </summary>
- Photo
- }
-}
diff --git a/extensions/Exporters/FlickrExport/FlickrNet/ApiKeyRequiredException.cs b/extensions/Exporters/FlickrExport/FlickrNet/ApiKeyRequiredException.cs
deleted file mode 100644
index bffed0d..0000000
--- a/extensions/Exporters/FlickrExport/FlickrNet/ApiKeyRequiredException.cs
+++ /dev/null
@@ -1,17 +0,0 @@
-using System;
-
-namespace FlickrNet
-{
- /// <summary>
- /// Exception thrown is no API key is supplied.
- /// </summary>
- public class ApiKeyRequiredException : FlickrException
- {
- /// <summary>
- /// Default constructor.
- /// </summary>
- public ApiKeyRequiredException() : base("API Key is required for all method calls")
- {
- }
- }
-}
diff --git a/extensions/Exporters/FlickrExport/FlickrNet/AssemblyInfo.cs b/extensions/Exporters/FlickrExport/FlickrNet/AssemblyInfo.cs
deleted file mode 100644
index 53e1324..0000000
--- a/extensions/Exporters/FlickrExport/FlickrNet/AssemblyInfo.cs
+++ /dev/null
@@ -1,67 +0,0 @@
-using System;
-using System.Reflection;
-using System.Runtime.CompilerServices;
-using System.Security;
-using System.Security.Permissions;
-using System.Runtime.InteropServices;
-
-//
-// General Information about an assembly is controlled through the following
-// set of attributes. Change these attribute values to modify the information
-// associated with an assembly.
-//
-[assembly: AssemblyTitle("Flickr .Net Api Library")]
-[assembly: AssemblyDescription(".Net library for accessing Flickr.com Api functionality")]
-[assembly: AssemblyConfiguration("")]
-[assembly: AssemblyCompany("Sam Judson")]
-[assembly: AssemblyProduct("Flickr .Net Api Library")]
-[assembly: AssemblyCopyright("See website http://www.wackylabs.net/flickr")]
-[assembly: AssemblyTrademark("")]
-[assembly: AssemblyCulture("")]
-
-//
-// Version information for an assembly consists of the following four values:
-//
-// Major Version
-// Minor Version
-// Build Number
-// Revision
-//
-// You can specify all the values or you can default the Revision and Build Numbers
-// by using the '*' as shown below:
-
-[assembly: AssemblyVersion("2.1.5.*")]
-
-//
-// In order to sign your assembly you must specify a key to use. Refer to the
-// Microsoft .NET Framework documentation for more information on assembly signing.
-//
-// Use the attributes below to control which key is used for signing.
-//
-// Notes:
-// (*) If no key is specified, the assembly is not signed.
-// (*) KeyName refers to a key that has been installed in the Crypto Service
-// Provider (CSP) on your machine. KeyFile refers to a file which contains
-// a key.
-// (*) If the KeyFile and the KeyName values are both specified, the
-// following processing occurs:
-// (1) If the KeyName can be found in the CSP, that key is used.
-// (2) If the KeyName does not exist and the KeyFile does exist, the key
-// in the KeyFile is installed into the CSP and used.
-// (*) In order to create a KeyFile, you can use the sn.exe (Strong Name) utility.
-// When specifying the KeyFile, the location of the KeyFile should be
-// relative to the project output directory which is
-// %Project Directory%\obj\<configuration>. For example, if your KeyFile is
-// located in the project directory, you would specify the AssemblyKeyFile
-// attribute as [assembly: AssemblyKeyFile("..\\..\\mykey.snk")]
-// (*) Delay Signing is an advanced option - see the Microsoft .NET Framework
-// documentation for more information on this.
-//
-[assembly: AssemblyDelaySign(false)]
-[assembly: AssemblyKeyName("")]
-
-[assembly: AllowPartiallyTrustedCallers()]
-[assembly: SecurityPermission(SecurityAction.RequestMinimum, Execution = true)]
-
-[assembly: CLSCompliantAttribute(true)]
-[assembly: ComVisible(false)]
diff --git a/extensions/Exporters/FlickrExport/FlickrNet/Auth.cs b/extensions/Exporters/FlickrExport/FlickrNet/Auth.cs
deleted file mode 100644
index 6947cee..0000000
--- a/extensions/Exporters/FlickrExport/FlickrNet/Auth.cs
+++ /dev/null
@@ -1,79 +0,0 @@
-using System;
-
-namespace FlickrNet
-{
- /// <summary>
- /// Used to specify the authentication levels needed for the Auth methods.
- /// </summary>
- public enum AuthLevel
- {
- /// <summary>
- /// No access required - do not use this value!
- /// </summary>
- None,
- /// <summary>
- /// Read only access is required by your application.
- /// </summary>
- Read,
- /// <summary>
- /// Read and write access is required by your application.
- /// </summary>
- Write,
- /// <summary>
- /// Read, write and delete access is required by your application.
- /// Deleting does not mean deleting photos, just meta data such as tags.
- /// </summary>
- Delete
- }
-
- /// <summary>
- /// Successful authentication returns a <see cref="Auth"/> object.
- /// </summary>
- public class Auth
- {
- private string _token;
- private AuthLevel _permissions;
- private FoundUser _user;
-
- /// <summary>
- /// The authentication token returned by the <see cref="Flickr.AuthGetToken"/> or <see cref="Flickr.AuthCheckToken"/> methods.
- /// </summary>
- public string Token
- {
- get { return _token; }
- set { _token = value; }
- }
-
- /// <summary>
- /// The permissions the current token allows the application to perform.
- /// </summary>
- public AuthLevel Permissions
- {
- get { return _permissions; }
- set { _permissions = value; }
- }
-
- /// <summary>
- /// The <see cref="User"/> object associated with the token. Readonly.
- /// </summary>
- public FoundUser User
- {
- get { return _user; }
- }
-
- /// <summary>
- /// Creates a new instance of the <see cref="Auth"/> class.
- /// </summary>
- public Auth()
- {
- }
-
- internal Auth(System.Xml.XmlElement element)
- {
- Token = element.SelectSingleNode("token").InnerText;
- Permissions = (AuthLevel)Enum.Parse(typeof(AuthLevel), element.SelectSingleNode("perms").InnerText, true);
- System.Xml.XmlNode node = element.SelectSingleNode("user");
- _user = new FoundUser(node);
- }
- }
-}
diff --git a/extensions/Exporters/FlickrExport/FlickrNet/AuthenticationRequiredException.cs b/extensions/Exporters/FlickrExport/FlickrNet/AuthenticationRequiredException.cs
deleted file mode 100644
index 717c206..0000000
--- a/extensions/Exporters/FlickrExport/FlickrNet/AuthenticationRequiredException.cs
+++ /dev/null
@@ -1,14 +0,0 @@
-using System;
-
-namespace FlickrNet
-{
- /// <summary>
- /// Exception thrown when method requires authentication but no authentication token is supplied.
- /// </summary>
- public class AuthenticationRequiredException : FlickrException
- {
- internal AuthenticationRequiredException() : base("Method requires authentication but no token supplied.")
- {
- }
- }
-}
diff --git a/extensions/Exporters/FlickrExport/FlickrNet/Blogs.cs b/extensions/Exporters/FlickrExport/FlickrNet/Blogs.cs
deleted file mode 100644
index 8ec8c5c..0000000
--- a/extensions/Exporters/FlickrExport/FlickrNet/Blogs.cs
+++ /dev/null
@@ -1,55 +0,0 @@
-using System.Xml.Serialization;
-using System.Xml.Schema;
-
-namespace FlickrNet
-{
- /// <summary>
- /// Contains a list of <see cref="Blog"/> items for the user.
- /// </summary>
- /// <remarks>
- /// <see cref="Blogs.BlogCollection"/> may be null if no blogs are specified.
- /// </remarks>
- [System.Serializable]
- public class Blogs
- {
- /// <summary>
- /// An array of <see cref="Blog"/> items for the user.
- /// </summary>
- [XmlElement("blog", Form=XmlSchemaForm.Unqualified)]
- public Blog[] BlogCollection;
- }
-
- /// <summary>
- /// Provides details of a specific blog, as configured by the user.
- /// </summary>
- [System.Serializable]
- public class Blog
- {
- /// <summary>
- /// The ID Flickr has assigned to the blog. Use this to post to the blog using
- /// <see cref="Flickr.BlogPostPhoto(string, string, string, string)"/> or
- /// <see cref="Flickr.BlogPostPhoto(string, string, string, string, string)"/>.
- /// </summary>
- [XmlAttribute("id", Form=XmlSchemaForm.Unqualified)]
- public string BlogId;
-
- /// <summary>
- /// The name you have assigned to the blog in Flickr.
- /// </summary>
- [XmlAttribute("name", Form=XmlSchemaForm.Unqualified)]
- public string BlogName;
-
- /// <summary>
- /// The URL of the blog website.
- /// </summary>
- [XmlAttribute("url", Form=XmlSchemaForm.Unqualified)]
- public string BlogUrl;
-
- /// <summary>
- /// If Flickr stores the password for this then this will be 0, meaning you do not need to pass in the
- /// password when posting.
- /// </summary>
- [XmlAttribute("needspassword")]
- public int NeedsPassword;
- }
-}
\ No newline at end of file
diff --git a/extensions/Exporters/FlickrExport/FlickrNet/BoundaryBox.cs b/extensions/Exporters/FlickrExport/FlickrNet/BoundaryBox.cs
deleted file mode 100644
index cfd6830..0000000
--- a/extensions/Exporters/FlickrExport/FlickrNet/BoundaryBox.cs
+++ /dev/null
@@ -1,222 +0,0 @@
-using System;
-
-namespace FlickrNet
-{
-
- /// <summary>
- /// Summary description for BoundaryBox.
- /// </summary>
- [Serializable]
- public class BoundaryBox
- {
- private GeoAccuracy _accuracy = GeoAccuracy.Street;
- private bool _isSet = false;
-
- private double _minimumLat = -90;
- private double _minimumLon = -180;
- private double _maximumLat = 90;
- private double _maximumLon = 180;
-
- /// <summary>
- /// Gets weither the boundary box has been set or not.
- /// </summary>
- internal bool IsSet
- {
- get { return _isSet; }
- }
-
- /// <summary>
- /// The search accuracy - optional. Defaults to <see cref="GeoAccuracy.Street"/>.
- /// </summary>
- public GeoAccuracy Accuracy
- {
- get { return _accuracy; }
- set { _accuracy = value; }
- }
-
- /// <summary>
- /// The minimum latitude of the boundary box, i.e. bottom left hand corner.
- /// </summary>
- public double MinimumLatitude
- {
- get { return _minimumLat; }
- set
- {
- if( value < -90 || value > 90 )
- throw new ArgumentOutOfRangeException("MinimumLatitude", "Must be between -90 and 90");
- _isSet = true; _minimumLat = value;
- }
- }
-
- /// <summary>
- /// The minimum longitude of the boundary box, i.e. bottom left hand corner. Range of -180 to 180 allowed.
- /// </summary>
- public double MinimumLongitude
- {
- get { return _minimumLon; }
- set {
- if( value < -180 || value > 180 )
- throw new ArgumentOutOfRangeException("MinimumLongitude", "Must be between -180 and 180");
- _isSet = true; _minimumLon = value;
- }
- }
-
- /// <summary>
- /// The maximum latitude of the boundary box, i.e. top right hand corner. Range of -90 to 90 allowed.
- /// </summary>
- public double MaximumLatitude
- {
- get { return _maximumLat; }
- set
- {
- if( value < -90 || value > 90 )
- throw new ArgumentOutOfRangeException("MaximumLatitude", "Must be between -90 and 90");
- _isSet = true; _maximumLat = value;
- }
- }
-
- /// <summary>
- /// The maximum longitude of the boundary box, i.e. top right hand corner. Range of -180 to 180 allowed.
- /// </summary>
- public double MaximumLongitude
- {
- get { return _maximumLon; }
- set
- {
- if( value < -180 || value > 180 )
- throw new ArgumentOutOfRangeException("MaximumLongitude", "Must be between -180 and 180");
- _isSet = true; _maximumLon = value;
- }
- }
-
- /// <summary>
- /// Default constructor
- /// </summary>
- public BoundaryBox()
- {
- }
-
- /// <summary>
- /// Default constructor, specifying only the accuracy level.
- /// </summary>
- /// <param name="accuracy">The <see cref="GeoAccuracy"/> of the search parameter.</param>
- public BoundaryBox(GeoAccuracy accuracy)
- {
- _accuracy = accuracy;
- }
-
- /// <summary>
- /// Constructor for the <see cref="BoundaryBox"/>
- /// </summary>
- /// <param name="points">A comma seperated list of co-ordinates defining the boundary box.</param>
- /// <param name="accuracy">The <see cref="GeoAccuracy"/> of the search parameter.</param>
- public BoundaryBox(string points, GeoAccuracy accuracy) : this(points)
- {
- _accuracy = accuracy;
- }
-
- /// <summary>
- /// Constructor for the <see cref="BoundaryBox"/>
- /// </summary>
- /// <param name="points">A comma seperated list of co-ordinates defining the boundary box.</param>
- public BoundaryBox(string points)
- {
- if( points == null ) throw new ArgumentNullException("points");
-
- string[] splits = points.Split(',');
-
- if( splits.Length != 4 )
- throw new ArgumentException("Parameter must contain 4 values, seperated by commas.", "points");
-
- try
- {
- MinimumLongitude = double.Parse(splits[0]);
- MinimumLatitude = double.Parse(splits[1]);
- MaximumLongitude = double.Parse(splits[2]);
- MaximumLatitude = double.Parse(splits[3]);
- }
- catch(FormatException)
- {
- throw new ArgumentException("Unable to parse points as integer values", "points");
- }
- }
-
- /// <summary>
- /// Constructor for the <see cref="BoundaryBox"/>.
- /// </summary>
- /// <param name="minimumLongitude">The minimum longitude of the boundary box. Range of -180 to 180 allowed.</param>
- /// <param name="minimumLatitude">The minimum latitude of the boundary box. Range of -90 to 90 allowed.</param>
- /// <param name="maximumLongitude">The maximum longitude of the boundary box. Range of -180 to 180 allowed.</param>
- /// <param name="maximumLatitude">The maximum latitude of the boundary box. Range of -90 to 90 allowed.</param>
- /// <param name="accuracy">The <see cref="GeoAccuracy"/> of the search parameter.</param>
- public BoundaryBox(double minimumLongitude, double minimumLatitude, double maximumLongitude, double maximumLatitude, GeoAccuracy accuracy) : this(minimumLongitude, minimumLatitude, maximumLongitude, maximumLatitude)
- {
- _accuracy = accuracy;
- }
-
- /// <summary>
- /// Constructor for the <see cref="BoundaryBox"/>.
- /// </summary>
- /// <param name="minimumLongitude">The minimum longitude of the boundary box. Range of -180 to 180 allowed.</param>
- /// <param name="minimumLatitude">The minimum latitude of the boundary box. Range of -90 to 90 allowed.</param>
- /// <param name="maximumLongitude">The maximum longitude of the boundary box. Range of -180 to 180 allowed.</param>
- /// <param name="maximumLatitude">The maximum latitude of the boundary box. Range of -90 to 90 allowed.</param>
- public BoundaryBox(double minimumLongitude, double minimumLatitude, double maximumLongitude, double maximumLatitude)
- {
- MinimumLatitude = minimumLatitude;
- MinimumLongitude = minimumLongitude;
- MaximumLatitude = maximumLatitude;
- MaximumLongitude = maximumLongitude;
- }
-
- /// <summary>
- /// Overrides the ToString method.
- /// </summary>
- /// <returns>A comma seperated list of co-ordinates defining the boundary box.</returns>
- public override string ToString()
- {
- return String.Format("{0},{1},{2},{3}", MinimumLongitude, MinimumLatitude, MaximumLongitude, MaximumLatitude);
- }
-
- /// <summary>
- /// Example boundary box for the UK.
- /// </summary>
- public static BoundaryBox UK
- {
- get { return new BoundaryBox(-11.118164, 49.809632, 1.625977, 62.613562); }
- }
-
- /// <summary>
- /// Example boundary box for Newcastle upon Tyne, England.
- /// </summary>
- public static BoundaryBox UKNewcastle
- {
- get { return new BoundaryBox(-1.71936, 54.935821, -1.389771, 55.145919); }
- }
-
- /// <summary>
- /// Example boundary box for the USA (excludes Hawaii and Alaska).
- /// </summary>
- public static BoundaryBox USA
- {
- get { return new BoundaryBox(-130.429687, 22.43134, -58.535156, 49.382373); }
- }
-
- /// <summary>
- /// Example boundary box for Canada.
- /// </summary>
- public static BoundaryBox Canada
- {
- get { return new BoundaryBox(-143.085937, 41.640078, -58.535156, 73.578167); }
- }
-
- /// <summary>
- /// Example boundary box for the whole world.
- /// </summary>
- public static BoundaryBox World
- {
- get { return new BoundaryBox(-180, -90, 180, 90); }
- }
-
- }
-}
diff --git a/extensions/Exporters/FlickrExport/FlickrNet/Cache.cs b/extensions/Exporters/FlickrExport/FlickrNet/Cache.cs
deleted file mode 100644
index c439b7d..0000000
--- a/extensions/Exporters/FlickrExport/FlickrNet/Cache.cs
+++ /dev/null
@@ -1,387 +0,0 @@
-using System;
-using System.Collections;
-using System.IO;
-using System.Text;
-using System.Text.RegularExpressions;
-
-namespace FlickrNet
-{
- /// <summary>
- /// Internal Cache class
- /// </summary>
- internal sealed class Cache
- {
- private class CacheException : Exception
- {
- public CacheException(string message) : base(message)
- {}
-
- }
-
- private static PersistentCache _downloads;
-
-
- /// <summary>
- /// A static object containing the list of cached downloaded files.
- /// </summary>
- public static PersistentCache Downloads
- {
- get
- {
- lock(lockObject)
- {
- if( _downloads == null )
- _downloads = new PersistentCache(Path.Combine(CacheLocation, "downloadCache.dat"), new PictureCacheItemPersister(), CacheSizeLimit);
- return _downloads;
- }
- }
- }
-
- private static PersistentCache _responses;
-
- /// <summary>
- /// A static object containing the list of cached responses from Flickr.
- /// </summary>
- public static PersistentCache Responses
- {
- get
- {
- lock(lockObject)
- {
- if( _responses == null )
- _responses = new PersistentCache(Path.Combine(CacheLocation, "responseCache.dat"), new ResponseCacheItemPersister(), CacheSizeLimit);
- return _responses;
- }
- }
- }
-
-
- private Cache()
- {
- }
-
- private static object lockObject = new object();
-
- private enum Tristate
- {
- Null, True, False
- }
- private static Tristate _cacheDisabled;
-
- internal static bool CacheDisabled
- {
- get
- {
-#if !WindowsCE
- if( _cacheDisabled == Tristate.Null && FlickrConfigurationManager.Settings != null )
- _cacheDisabled = (FlickrConfigurationManager.Settings.CacheDisabled?Tristate.True:Tristate.False);
-#endif
-
- if( _cacheDisabled == Tristate.Null ) _cacheDisabled = Tristate.False;
-
- return (_cacheDisabled==Tristate.True);
- }
- set
- {
- _cacheDisabled = value?Tristate.True:Tristate.False;
- }
- }
-
- private static string _cacheLocation;
-
- internal static string CacheLocation
- {
- get
- {
-#if !WindowsCE
- if( _cacheLocation == null && FlickrConfigurationManager.Settings != null )
- _cacheLocation = FlickrConfigurationManager.Settings.CacheLocation;
-#endif
- if( _cacheLocation == null )
- {
- try
- {
-#if !WindowsCE
- _cacheLocation = Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.LocalApplicationData), "FlickrNet");
-#else
- _cacheLocation = Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.Personal), "FlickrNetCache");
-#endif
- }
- catch(System.Security.SecurityException)
- {
- // Permission to read application directory not provided.
- throw new CacheException("Unable to read default cache location. Please cacheLocation in configuration file or set manually in code");
- }
- }
-
- if( _cacheLocation == null )
- throw new CacheException("Unable to determine cache location. Please set cacheLocation in configuration file or set manually in code");
-
- return _cacheLocation;
- }
- set
- {
- _cacheLocation = value;
- }
- }
-
- // Default cache size is set to 50MB
- private static long _cacheSizeLimit = 52428800;
- private static long _cacheSize;
-
- internal static long CacheSizeLimit
- {
- get
- {
- return _cacheSizeLimit;
- }
- set
- {
- _cacheSizeLimit = value;
- }
- }
-
- internal static long CacheSize
- {
- get
- {
- return _cacheSize;
- }
- set
- {
- _cacheSize = value;
- }
- }
-
-
- // Default cache timeout is 1 hour
- private static TimeSpan _cachetimeout = new TimeSpan(0, 1, 0, 0, 0);
-
- /// <summary>
- /// The default timeout for cachable objects within the cache.
- /// </summary>
- public static TimeSpan CacheTimeout
- {
- get { return _cachetimeout; }
- set { _cachetimeout = value; }
- }
-
- internal static void FlushCache(string url)
- {
- Responses[url] = null;
- Downloads[url] = null;
- }
-
- internal static void FlushCache()
- {
- Responses.Flush();
- Downloads.Flush();
- }
-
- }
-
- /// <summary>
- /// A cache item containing details of a REST response from Flickr.
- /// </summary>
- [Serializable]
- public class ResponseCacheItem : ICacheItem
- {
- private string url;
- private string response;
- private DateTime creationTime;
-
- /// <summary>
- /// Gets or sets the original URL of the request.
- /// </summary>
- public string Url { get { return url; } set { url = value; } }
-
- /// <summary>
- /// Gets or sets the XML response.
- /// </summary>
- public string Response { get { return response; } set { response = value; } }
-
- /// <summary>
- /// Gets or sets the time the cache item was created.
- /// </summary>
- public DateTime CreationTime { get { return creationTime; } set { creationTime = value; } }
-
- /// <summary>
- /// Gets the filesize of the request.
- /// </summary>
- public long FileSize { get { return (response==null?0:response.Length); } }
-
- void ICacheItem.OnItemFlushed()
- {
- }
-
- }
-
- internal class ResponseCacheItemPersister : CacheItemPersister
- {
- public override ICacheItem Read(Stream inputStream)
- {
- string s = Utils.ReadString(inputStream);
- string response = Utils.ReadString(inputStream);
-
- string[] chunks = s.Split('\n');
-
- // Corrupted cache record, so throw IOException which is then handled and returns partial cache.
- if( chunks.Length != 2 )
- throw new IOException("Unexpected number of chunks found");
-
- string url = chunks[0];
- DateTime creationTime = new DateTime(long.Parse(chunks[1]));
- ResponseCacheItem item = new ResponseCacheItem();
- item.Url = url;
- item.CreationTime = creationTime;
- item.Response = response;
- return item;
- }
-
- public override void Write(Stream outputStream, ICacheItem cacheItem)
- {
- ResponseCacheItem item = (ResponseCacheItem) cacheItem;
- StringBuilder result = new StringBuilder();
- result.Append(item.Url + "\n");
- result.Append(item.CreationTime.Ticks.ToString("0"));
- Utils.WriteString(outputStream, result.ToString());
- Utils.WriteString(outputStream, item.Response);
- }
- }
-
- /// <summary>
- /// An item that can be stored in a cache.
- /// </summary>
- public interface ICacheItem
- {
- /// <summary>
- /// The time this cache item was created.
- /// </summary>
- DateTime CreationTime { get; }
-
- /// <summary>
- /// Gets called back when the item gets flushed
- /// from the cache.
- /// </summary>
- void OnItemFlushed();
-
- /// <summary>
- /// The size of this item, in bytes. Return 0
- /// if size management is not important.
- /// </summary>
- long FileSize { get; }
- }
-
- /// <summary>
- /// An interface that knows how to read/write subclasses
- /// of ICacheItem. Obviously there will be a tight
- /// coupling between concrete implementations of ICacheItem
- /// and concrete implementations of ICacheItemPersister.
- /// </summary>
- public abstract class CacheItemPersister
- {
- /// <summary>
- /// Read a single cache item from the input stream.
- /// </summary>
- public abstract ICacheItem Read(Stream inputStream);
-
- /// <summary>
- /// Write a single cache item to the output stream.
- /// </summary>
- public abstract void Write(Stream outputStream, ICacheItem cacheItem);
- }
-
- /// <summary>
- /// Contains details of image held with the Flickr.Net cache.
- /// </summary>
- [Serializable]
- public class PictureCacheItem : ICacheItem
- {
- #region [ Internal Variables ]
- internal string url;
- internal DateTime creationTime;
- internal string filename;
- internal long fileSize;
- #endregion
-
- #region [ Public Properties ]
- /// <summary>
- /// The URL of the original image on Flickr.
- /// </summary>
- public string Url { get { return url; } }
- /// <summary>
- /// The <see cref="DateTime"/> that the cache item was created.
- /// </summary>
- public DateTime CreationTime { get { return creationTime; } }
-
- /// <summary>
- /// The filesize in bytes of the image.
- /// </summary>
- public long FileSize { get { return fileSize; } }
- /// <summary>
- /// The Flickr photo id of the image.
- /// </summary>
- public string PhotoId
- {
- get
- {
- if( url == null )
- return null;
- else
- {
- int begin = url.LastIndexOf("/");
- int end = url.IndexOf("_");
-
- return url.Substring(begin + 1, (end - begin) - 1);
- }
- }
- }
- #endregion
-
- #region [ Public Methods ]
-
- void ICacheItem.OnItemFlushed()
- {
- File.Delete(filename);
- }
-
- #endregion
- }
-
- /// <summary>
- /// Persists PictureCacheItem objects.
- /// </summary>
- internal class PictureCacheItemPersister : CacheItemPersister
- {
- public override ICacheItem Read(Stream inputStream)
- {
- string s = Utils.ReadString(inputStream);
-
- string[] chunks = s.Split('\n');
- string url = chunks[0];
- DateTime creationTime = new DateTime(long.Parse(chunks[1]));
- string filename = chunks[2];
- long fileSize = long.Parse(chunks[3]);
-
- PictureCacheItem pci = new PictureCacheItem();
- pci.url = url;
- pci.creationTime = creationTime;
- pci.filename = filename;
- pci.fileSize = fileSize;
- return pci;
- }
-
- public override void Write(Stream outputStream, ICacheItem cacheItem)
- {
- PictureCacheItem pci = (PictureCacheItem) cacheItem;
- StringBuilder output = new StringBuilder();
-
- output.Append(pci.url + "\n");
- output.Append(pci.creationTime.Ticks + "\n");
- output.Append(pci.filename + "\n");
- output.Append(pci.fileSize + "\n");
-
- Utils.WriteString(outputStream, output.ToString());
- }
- }
-}
diff --git a/extensions/Exporters/FlickrExport/FlickrNet/Categories.cs b/extensions/Exporters/FlickrExport/FlickrNet/Categories.cs
deleted file mode 100644
index 5d66d97..0000000
--- a/extensions/Exporters/FlickrExport/FlickrNet/Categories.cs
+++ /dev/null
@@ -1,80 +0,0 @@
-using System.Xml.Serialization;
-using System.Xml.Schema;
-
-namespace FlickrNet
-{
- /// <summary>
- /// Contains details of a category, including groups belonging to the category and sub categories.
- /// </summary>
- [System.Serializable]
- public class Category
- {
- /// <summary>
- /// The name for the category.
- /// </summary>
- [XmlAttribute("name", Form=XmlSchemaForm.Unqualified)]
- public string CategoryName;
-
- /// <summary>
- /// A forward slash delimited list of the parents of the current group.
- /// </summary>
- /// <remarks>
- /// Can be matched against the list of PathIds to jump directly to a parent group.
- /// </remarks>
- /// <example>
- /// Group Id 91, Romance will return "/Life/Romance" as the Path and "/90/91" as its PathIds
- /// </example>
- [XmlAttribute("path", Form=XmlSchemaForm.Unqualified)]
- public string Path;
-
- /// <summary>
- /// A forward slash delimited list of the ids of the parents of the current group.
- /// </summary>
- /// <remarks>
- /// Can be matched against the Path to jump directly to a parent group.
- /// </remarks>
- /// <example>
- /// Group Id 91, Romance will return "/Life/Romance" as the Path and "/90/91" as its PathIds
- /// </example>
- [XmlAttribute("pathids", Form=XmlSchemaForm.Unqualified)]
- public string PathIds;
-
- /// <summary>
- /// An array of <see cref="SubCategory"/> items.
- /// </summary>
- [XmlElement("subcat", Form=XmlSchemaForm.Unqualified)]
- public SubCategory[] SubCategories;
-
- /// <summary>
- /// An array of <see cref="Group"/> items, listing the groups within this category.
- /// </summary>
- [XmlElement("group", Form=XmlSchemaForm.Unqualified)]
- public Group[] Groups;
- }
-
- /// <summary>
- /// Holds details of a sub category, including its id, name and the number of groups in it.
- /// </summary>
- [System.Serializable]
- public class SubCategory
- {
- /// <summary>
- /// The id of the category.
- /// </summary>
- [XmlAttribute("id", Form=XmlSchemaForm.Unqualified)]
- public long SubCategoryId;
-
- /// <summary>
- /// The name of the category.
- /// </summary>
- [XmlAttribute("name", Form=XmlSchemaForm.Unqualified)]
- public string SubCategoryName;
-
- /// <summary>
- /// The number of groups found within the category.
- /// </summary>
- [XmlAttribute("count", Form=XmlSchemaForm.Unqualified)]
- public long GroupCount;
- }
-
-}
\ No newline at end of file
diff --git a/extensions/Exporters/FlickrExport/FlickrNet/Comments.cs b/extensions/Exporters/FlickrExport/FlickrNet/Comments.cs
deleted file mode 100644
index 3e8e362..0000000
--- a/extensions/Exporters/FlickrExport/FlickrNet/Comments.cs
+++ /dev/null
@@ -1,119 +0,0 @@
-using System;
-using System.Xml;
-
-namespace FlickrNet
-{
- /// <summary>
- /// Parent object containing details of a photos comments.
- /// </summary>
- internal class PhotoComments
- {
- static private string _photoId;
-
- static private Comment[] _comments;
-
- static internal Comment[] GetComments(XmlNode node)
- {
- if( node.Attributes["photo_id"] != null )
- _photoId = node.Attributes["photo_id"].Value;
- XmlNodeList nodes = node.SelectNodes("comment");
- _comments = new Comment[nodes.Count];
-
- for(int i = 0; i < _comments.Length; i++)
- {
- _comments[i] = new Comment(_photoId, nodes[i]);
- }
-
- return _comments;
- }
- }
-
- /// <summary>
- /// Contains the details of a comment made on a photo.
- /// returned by the <see cref="Flickr.PhotosCommentsGetList"/> method.
- /// </summary>
- public class Comment
- {
- private string _photoId;
- private string _authorUserId;
- private string _authorUserName;
- private string _commentId;
- private Uri _permaLink;
- private DateTime _dateCreated;
- private string _comment;
-
- /// <summary>
- /// The photo id associated with this comment.
- /// </summary>
- public string PhotoId
- {
- get { return _photoId; }
- }
-
- /// <summary>
- /// The comment id of this comment.
- /// </summary>
- public string CommentId
- {
- get { return _commentId; }
- }
-
- /// <summary>
- /// The user id of the author of the comment.
- /// </summary>
- public string AuthorUserId
- {
- get { return _authorUserId; }
- }
-
- /// <summary>
- /// The username (screen name) of the author of the comment.
- /// </summary>
- public string AuthorUserName
- {
- get { return _authorUserName; }
- }
-
- /// <summary>
- /// The permalink to the comment on the photos web page.
- /// </summary>
- public Uri Permalink
- {
- get { return _permaLink; }
- }
-
- /// <summary>
- /// The date and time that the comment was created.
- /// </summary>
- public DateTime DateCreated
- {
- get { return _dateCreated; }
- }
-
- /// <summary>
- /// The comment text (can contain HTML).
- /// </summary>
- public string CommentHtml
- {
- get { return _comment; }
- }
-
- internal Comment(string photoId, XmlNode node)
- {
- _photoId = photoId;
-
- if( node.Attributes["id"] != null )
- _commentId = node.Attributes["id"].Value;
- if( node.Attributes["author"] != null )
- _authorUserId = node.Attributes["author"].Value;
- if( node.Attributes["authorname"] != null )
- _authorUserName = node.Attributes["authorname"].Value;
- if( node.Attributes["permalink"] != null )
- _permaLink = new Uri(node.Attributes["permalink"].Value);
- if( node.Attributes["datecreate"] != null )
- _dateCreated = Utils.UnixTimestampToDate(node.Attributes["datecreate"].Value);
- if( node.InnerXml.Length > 0 )
- _comment = node.InnerText;
- }
- }
-}
diff --git a/extensions/Exporters/FlickrExport/FlickrNet/Contacts.cs b/extensions/Exporters/FlickrExport/FlickrNet/Contacts.cs
deleted file mode 100644
index 2a6e861..0000000
--- a/extensions/Exporters/FlickrExport/FlickrNet/Contacts.cs
+++ /dev/null
@@ -1,67 +0,0 @@
-using System.Xml.Serialization;
-using System.Xml.Schema;
-
-namespace FlickrNet
-{
- /// <summary>
- /// Contains a list of <see cref="Contact"/> items for a given user.
- /// </summary>
- [System.Serializable]
- public class Contacts
- {
- /// <summary>
- /// An array of <see cref="Contact"/> items for the user.
- /// </summary>
- [XmlElement("contact", Form=XmlSchemaForm.Unqualified)]
- public Contact[] ContactCollection = new Contact[0];
- }
-
- /// <summary>
- /// Contains details of a contact for a particular user.
- /// </summary>
- [System.Serializable]
- public class Contact
- {
- /// <summary>
- /// The user id of the contact.
- /// </summary>
- [XmlAttribute("nsid", Form=XmlSchemaForm.Unqualified)]
- public string UserId;
-
- /// <summary>
- /// The username (or screen name) of the contact.
- /// </summary>
- [XmlAttribute("username", Form=XmlSchemaForm.Unqualified)]
- public string UserName;
-
- /// <summary>
- /// Is this contact marked as a friend contact?
- /// </summary>
- [XmlAttribute("friend", Form=XmlSchemaForm.Unqualified)]
- public int IsFriend;
-
- /// <summary>
- /// Is this user marked a family contact?
- /// </summary>
- [XmlAttribute("family", Form=XmlSchemaForm.Unqualified)]
- public int IsFamily;
-
- /// <summary>
- /// Unsure how to even set this!
- /// </summary>
- [XmlAttribute("ignored", Form=XmlSchemaForm.Unqualified)]
- public int IsIgnored;
-
- /// <summary>
- /// Is the user online at the moment (FlickrLive)
- /// </summary>
- [XmlAttribute("online", Form=XmlSchemaForm.Unqualified)]
- public int IsOnline;
-
- /// <summary>
- /// If the user is online, but marked as away, then this will contains their away message.
- /// </summary>
- [XmlText()]
- public string AwayDescription;
- }
-}
\ No newline at end of file
diff --git a/extensions/Exporters/FlickrExport/FlickrNet/Context.cs b/extensions/Exporters/FlickrExport/FlickrNet/Context.cs
deleted file mode 100644
index 0c2a531..0000000
--- a/extensions/Exporters/FlickrExport/FlickrNet/Context.cs
+++ /dev/null
@@ -1,173 +0,0 @@
-using System;
-using System.Collections;
-using System.Xml.Serialization;
-using System.Xml.Schema;
-using System.Xml;
-
-namespace FlickrNet
-{
- /// <summary>
- /// The context of the current photo, as returned by
- /// <see cref="Flickr.PhotosGetContext"/>,
- /// <see cref="Flickr.PhotosetsGetContext"/>
- /// and <see cref="Flickr.GroupPoolGetContext"/> methods.
- /// </summary>
- public class Context
- {
- /// <summary>
- /// The number of photos in the current context, e.g. Group, Set or photostream.
- /// </summary>
- public long Count;
- /// <summary>
- /// The next photo in the context.
- /// </summary>
- public ContextPhoto NextPhoto;
- /// <summary>
- /// The previous photo in the context.
- /// </summary>
- public ContextPhoto PreviousPhoto;
- }
-
- /// <summary>
- /// Temporary class used to excapsulate the context count property.
- /// </summary>
- [System.Serializable]
- public class ContextCount
- {
- /// <summary>
- /// Default constructor.
- /// </summary>
- public ContextCount()
- {
- }
-
- /// <summary>
- /// The number of photos in the context.
- /// </summary>
- [XmlText()]
- public long Count;
- }
-
- /// <summary>
- /// The next (or previous) photo in the current context.
- /// </summary>
- [System.Serializable]
- public class ContextPhoto
- {
- /// <summary>
- /// The id of the next photo. Will be "0" if this photo is the last.
- /// </summary>
- [XmlAttribute("id", Form=XmlSchemaForm.Unqualified)]
- public string PhotoId;
-
- /// <summary>
- /// The secret for the photo.
- /// </summary>
- [XmlAttribute("secret", Form=XmlSchemaForm.Unqualified)]
- public string Secret;
-
- /// <summary>
- /// The title of the next photo in context.
- /// </summary>
- [XmlAttribute("title", Form=XmlSchemaForm.Unqualified)]
- public string Title;
-
- /// <summary>
- /// The URL, in the given context, for the next or previous photo.
- /// </summary>
- [XmlAttribute("url", Form=XmlSchemaForm.Unqualified)]
- public string Url;
-
- /// <summary>
- /// The URL for the thumbnail of the photo.
- /// </summary>
- [XmlAttribute("thumb", Form=XmlSchemaForm.Unqualified)]
- public string Thumbnail;
- }
-
- /// <summary>
- /// All contexts that a photo is in.
- /// </summary>
- public class AllContexts
- {
- private ContextSet[] _sets;
- private ContextGroup[] _groups;
-
- /// <summary>
- /// An array of <see cref="ContextSet"/> objects for the current photo.
- /// </summary>
- public ContextSet[] Sets
- {
- get { return _sets; }
- }
-
- /// <summary>
- /// An array of <see cref="ContextGroup"/> objects for the current photo.
- /// </summary>
- public ContextGroup[] Groups
- {
- get { return _groups; }
- }
-
- internal AllContexts(XmlElement[] elements)
- {
- ArrayList sets = new ArrayList();
- ArrayList groups = new ArrayList();
-
- foreach(XmlElement element in elements)
- {
- if( element.Name == "set" )
- {
- ContextSet aset = new ContextSet();
- aset.PhotosetId = element.Attributes["id"].Value;
- aset.Title = element.Attributes["title"].Value;
- sets.Add(aset);
- }
-
- if( element.Name == "pool" )
- {
- ContextGroup agroup = new ContextGroup();
- agroup.GroupId = element.Attributes["id"].Value;
- agroup.Title = element.Attributes["title"].Value;
- groups.Add(agroup);
- }
- }
-
- _sets = new ContextSet[sets.Count];
- sets.CopyTo(_sets);
-
- _groups = new ContextGroup[groups.Count];
- groups.CopyTo(_groups);
- }
- }
-
- /// <summary>
- /// A set context for a photo.
- /// </summary>
- public class ContextSet
- {
- /// <summary>
- /// The Photoset ID of the set the selected photo is in.
- /// </summary>
- public string PhotosetId;
- /// <summary>
- /// The title of the set the selected photo is in.
- /// </summary>
- public string Title;
- }
-
- /// <summary>
- /// A group context got a photo.
- /// </summary>
- public class ContextGroup
- {
- /// <summary>
- /// The Group ID for the group that the selected photo is in.
- /// </summary>
- public string GroupId;
- /// <summary>
- /// The title of the group that then selected photo is in.
- /// </summary>
- public string Title;
- }
-}
diff --git a/extensions/Exporters/FlickrExport/FlickrNet/DateGranularity.cs b/extensions/Exporters/FlickrExport/FlickrNet/DateGranularity.cs
deleted file mode 100644
index 89411c6..0000000
--- a/extensions/Exporters/FlickrExport/FlickrNet/DateGranularity.cs
+++ /dev/null
@@ -1,24 +0,0 @@
-using System;
-
-namespace FlickrNet
-{
- /// <summary>
- /// DateGranularity, used for setting taken date in <see cref="Flickr.PhotosSetDates(string, DateTime, DateGranularity)"/>
- /// or <see cref="Flickr.PhotosSetDates(string, DateTime, DateTime, DateGranularity)"/>.
- /// </summary>
- public enum DateGranularity
- {
- /// <summary>
- /// The date specified is the exact date the photograph was taken.
- /// </summary>
- FullDate = 0,
- /// <summary>
- /// The date specified is the year and month the photograph was taken.
- /// </summary>
- YearMonthOnly = 4,
- /// <summary>
- /// The date specified is the year the photograph was taken.
- /// </summary>
- YearOnly = 6
- }
-}
diff --git a/extensions/Exporters/FlickrExport/FlickrNet/Enums.cs b/extensions/Exporters/FlickrExport/FlickrNet/Enums.cs
deleted file mode 100644
index c305f68..0000000
--- a/extensions/Exporters/FlickrExport/FlickrNet/Enums.cs
+++ /dev/null
@@ -1,230 +0,0 @@
-using System;
-using System.Xml.Serialization;
-
-namespace FlickrNet
-{
- /// <summary>
- /// A list of service the Flickr.Net API Supports.
- /// </summary>
- /// <remarks>
- /// Not all methods are supported by all service. Behaviour of the library may be unpredictable if not using Flickr
- /// as your service.
- /// </remarks>
- public enum SupportedService
- {
- /// <summary>
- /// Flickr - http://www.flickr.com/services/api
- /// </summary>
- Flickr = 0,
- /// <summary>
- /// Zooomr - http://blog.zooomr.com/2006/03/27/attention-developers/
- /// </summary>
- Zooomr = 1,
- /// <summary>
- /// 23HQ = http://www.23hq.com/doc/api/
- /// </summary>
- TwentyThreeHQ = 2
- }
-
- /// <summary>
- /// Used to specify where all tags must be matched or any tag to be matched.
- /// </summary>
- [Serializable]
- public enum TagMode
- {
- /// <summary>
- /// No tag mode specified.
- /// </summary>
- None,
- /// <summary>
- /// Any tag must match, but not all.
- /// </summary>
- AnyTag,
- /// <summary>
- /// All tags must be found.
- /// </summary>
- AllTags,
- /// <summary>
- /// Uncodumented and unsupported tag mode where boolean operators are supported.
- /// </summary>
- Boolean
- }
-
- /// <summary>
- /// What type of content is the upload representing.
- /// </summary>
- [Serializable]
- public enum ContentType
- {
- /// <summary>
- /// No content type specified.
- /// </summary>
- None = 0,
- /// <summary>
- /// For normal photographs.
- /// </summary>
- Photo = 1,
- /// <summary>
- /// For screenshots.
- /// </summary>
- Screenshot = 2,
- /// <summary>
- /// For other uploads, such as artwork.
- /// </summary>
- Other = 3
- }
-
- /// <summary>
- /// Safety level of the photographic image.
- /// </summary>
- [Serializable]
- public enum SafetyLevel
- {
- /// <summary>
- /// No safety level specified.
- /// </summary>
- None = 0,
- /// <summary>
- /// Very safe (suitable for a global family audience).
- /// </summary>
- Safe = 1,
- /// <summary>
- /// Moderate (the odd articstic nude is ok, but thats the limit).
- /// </summary>
- Moderate = 2,
- /// <summary>
- /// Restricted (suitable for over 18s only).
- /// </summary>
- Restricted = 3
- }
-
- /// <summary>
- /// Determines weither the photo is visible in public searches. The default is 1, Visible.
- /// </summary>
- [Serializable]
- public enum HiddenFromSearch
- {
- /// <summary>
- /// No preference specified, defaults to your preferences on Flickr.
- /// </summary>
- None = 0,
- /// <summary>
- /// Photo is visible to public searches.
- /// </summary>
- Visible = 1,
- /// <summary>
- /// photo is hidden from public searches.
- /// </summary>
- Hidden = 2
- }
-
-
- /// <summary>
- /// Used to specify where all tags must be matched or any tag to be matched.
- /// </summary>
- [Serializable]
- public enum MachineTagMode
- {
- /// <summary>
- /// No tag mode specified.
- /// </summary>
- None,
- /// <summary>
- /// Any tag must match, but not all.
- /// </summary>
- AnyTag,
- /// <summary>
- /// All tags must be found.
- /// </summary>
- AllTags
- }
-
- /// <summary>
- /// When searching for photos you can filter on the privacy of the photos.
- /// </summary>
- [Serializable]
- public enum PrivacyFilter
- {
- /// <summary>
- /// Do not filter.
- /// </summary>
- None = 0,
- /// <summary>
- /// Show only public photos.
- /// </summary>
- PublicPhotos = 1,
- /// <summary>
- /// Show photos which are marked as private but viewable by friends.
- /// </summary>
- PrivateVisibleToFriends = 2,
- /// <summary>
- /// Show photos which are marked as private but viewable by family contacts.
- /// </summary>
- PrivateVisibleToFamily = 3,
- /// <summary>
- /// Show photos which are marked as private but viewable by friends and family contacts.
- /// </summary>
- PrivateVisibleToFriendsFamily = 4,
- /// <summary>
- /// Show photos which are marked as completely private.
- /// </summary>
- CompletelyPrivate = 5
- }
-
- /// <summary>
- /// An enumeration defining who can add comments.
- /// </summary>
- [Serializable]
- public enum PermissionComment
- {
- /// <summary>
- /// Nobody.
- /// </summary>
- [XmlEnum("0")]
- Nobody = 0,
- /// <summary>
- /// Friends and family only.
- /// </summary>
- [XmlEnum("1")]
- FriendsAndFamily = 1,
- /// <summary>
- /// Contacts only.
- /// </summary>
- [XmlEnum("2")]
- ContactsOnly = 2,
- /// <summary>
- /// All Flickr users.
- /// </summary>
- [XmlEnum("3")]
- Everybody = 3
- }
-
- /// <summary>
- /// An enumeration defining who can add meta data (tags and notes).
- /// </summary>
- public enum PermissionAddMeta
- {
- /// <summary>
- /// The owner of the photo only.
- /// </summary>
- [XmlEnum("0")]
- Owner = 0,
- /// <summary>
- /// Friends and family only.
- /// </summary>
- [XmlEnum("1")]
- FriendsAndFamily = 1,
- /// <summary>
- /// All contacts.
- /// </summary>
- [XmlEnum("2")]
- Contacts = 2,
- /// <summary>
- /// All Flickr users.
- /// </summary>
- [XmlEnum("3")]
- Everybody = 3
- }
-
-
-}
diff --git a/extensions/Exporters/FlickrExport/FlickrNet/ExifPhoto.cs b/extensions/Exporters/FlickrExport/FlickrNet/ExifPhoto.cs
deleted file mode 100644
index 79b5c25..0000000
--- a/extensions/Exporters/FlickrExport/FlickrNet/ExifPhoto.cs
+++ /dev/null
@@ -1,134 +0,0 @@
-using System;
-using System.Xml.Schema;
-using System.Xml.Serialization;
-
-namespace FlickrNet
-{
- /// <summary>
- /// EXIF data for the selected photo.
- /// </summary>
- [Serializable]
- public class ExifPhoto
- {
- internal ExifPhoto(string photoId, string secret, string server, ExifTag[] array)
- {
- _photoId = photoId;
- _secret = secret;
- _server = server;
- _tagCollection = array;
- }
-
- private string _photoId;
- private string _secret;
- private string _server;
- private ExifTag[] _tagCollection;
-
- /// <summary>
- /// The Photo ID for the photo whose EXIF data this is.
- /// </summary>
- public string PhotoId
- {
- get { return _photoId; }
- }
-
- /// <summary>
- /// The Secret of the photo.
- /// </summary>
- public string Secret
- {
- get { return _secret; }
- }
-
- /// <summary>
- /// The server number for the photo.
- /// </summary>
- public string Server
- {
- get { return _server; }
- }
-
- /// <summary>
- /// An array of EXIF tags. See <see cref="ExifTag"/> for more details.
- /// </summary>
- public ExifTag[] ExifTagCollection
- {
- get { return _tagCollection; }
- }
- }
-
- /// <summary>
- /// Details of an individual EXIF tag.
- /// </summary>
- [Serializable]
- public class ExifTag
- {
- private string _tagSpace;
- private int _tagSpaceId;
- private string _tag;
- private string _label;
- private string _raw;
- private string _clean;
-
- /// <summary>
- /// The type of EXIF data, e.g. EXIF, TIFF, GPS etc.
- /// </summary>
- [XmlAttribute("tagspace")]
- public string TagSpace
- {
- get { return _tagSpace; }
- set { _tagSpace = value; }
- }
-
- /// <summary>
- /// An id number for the type of tag space.
- /// </summary>
- [XmlAttribute("tagspaceid")]
- public int TagSpaceId
- {
- get { return _tagSpaceId; }
- set { _tagSpaceId = value; }
- }
-
- /// <summary>
- /// The tag number.
- /// </summary>
- [XmlAttribute("tag")]
- public string Tag
- {
- get { return _tag; }
- set { _tag = value; }
- }
-
- /// <summary>
- /// The label, or description for the tag, such as Aperture
- /// or Manufacturer
- /// </summary>
- [XmlAttribute("label")]
- public string Label
- {
- get { return _label; }
- set { _label = value; }
- }
-
- /// <summary>
- /// The raw EXIF data.
- /// </summary>
- [XmlElement("raw")]
- public string Raw
- {
- get { return _raw; }
- set { _raw = value; }
- }
-
- /// <summary>
- /// An optional clean version of the <see cref="Raw"/> property.
- /// May be null if the <c>Raw</c> property is in a suitable format already.
- /// </summary>
- [XmlElement("clean")]
- public string Clean
- {
- get { return _clean; }
- set { _clean = value; }
- }
- }
-}
diff --git a/extensions/Exporters/FlickrExport/FlickrNet/Flickr.cs b/extensions/Exporters/FlickrExport/FlickrNet/Flickr.cs
deleted file mode 100644
index be8965f..0000000
--- a/extensions/Exporters/FlickrExport/FlickrNet/Flickr.cs
+++ /dev/null
@@ -1,5225 +0,0 @@
-using System;
-using System.Net;
-using System.IO;
-using System.Xml;
-using System.Xml.XPath;
-using System.Xml.Serialization;
-using System.Text;
-using System.Collections;
-using System.Collections.Specialized;
-
-namespace FlickrNet
-{
- /// <summary>
- /// The main Flickr class.
- /// </summary>
- /// <remarks>
- /// Create an instance of this class and then call its methods to perform methods on Flickr.
- /// </remarks>
- /// <example>
- /// <code>FlickrNet.Flickr flickr = new FlickrNet.Flickr();
- /// User user = flickr.PeopleFindByEmail("cal at iamcal.com");
- /// Console.WriteLine("User Id is " + u.UserId);</code>
- /// </example>
- //[System.Net.WebPermission(System.Security.Permissions.SecurityAction.Demand, ConnectPattern="http://www.flickr.com/.*")]
- public class Flickr
- {
-
- #region [ Upload Event and Delegate ]
- /// <summary>
- ///
- /// </summary>
- public delegate void UploadProgressHandler(object sender, UploadProgressEventArgs e);
-
- /// <summary>
- /// UploadProgressHandler is fired during a synchronous upload process to signify that
- /// a segment of uploading has been completed. This is approximately 50 bytes. The total
- /// uploaded is recorded in the <see cref="UploadProgressEventArgs"/> class.
- /// </summary>
- public event UploadProgressHandler OnUploadProgress;
- #endregion
-
- #region [ Private Variables ]
-#if !WindowsCE
- private static bool _isServiceSet = false;
-#endif
- private static SupportedService _defaultService = SupportedService.Flickr;
-
- private SupportedService _service = SupportedService.Flickr;
-
- private string BaseUrl
- {
- get { return _baseUrl[(int)_service]; }
- }
-
- private string[] _baseUrl = new string[] {
- "http://api.flickr.com/services/rest/",
- "http://www.zooomr.com/api/rest/",
- "http://www.23hq.com/services/rest/"};
-
- private string UploadUrl
- {
- get { return _uploadUrl[(int)_service]; }
- }
- private static string[] _uploadUrl = new string[] {
- "http://api.flickr.com/services/upload/",
- "http://www.zooomr.com/api/upload",
- "http://www.23hq.com/services/upload/"};
-
- private string ReplaceUrl
- {
- get { return _replaceUrl[(int)_service]; }
- }
- private static string[] _replaceUrl = new string[] {
- "http://api.flickr.com/services/replace/",
- "http://www.zooomr.com/api/replace",
- "http://www.23hq.com/services/replace/"};
-
- private string AuthUrl
- {
- get { return _authUrl[(int)_service]; }
- }
- private static string[] _authUrl = new string[] {
- "http://www.flickr.com/services/auth/",
- "http://www.zooomr.com/services/auth/",
- "http://www.23hq.com/services/auth/"};
-
- private string _apiKey;
- private string _apiToken;
- private string _sharedSecret;
- private int _timeout = 30000;
- private const string UserAgent = "Mozilla/4.0 FlickrNet API (compatible; MSIE 6.0; Windows NT 5.1)";
- private string _lastRequest;
- private string _lastResponse;
-
- private WebProxy _proxy;// = WebProxy.GetDefaultProxy();
-
- // Static serializers
- private static XmlSerializer _responseSerializer = new XmlSerializer(typeof(FlickrNet.Response));
- private static XmlSerializer _uploaderSerializer = new XmlSerializer(typeof(FlickrNet.Uploader));
-
- #endregion
-
- #region [ Public Properties ]
- /// <summary>
- /// Get or set the API Key to be used by all calls. API key is mandatory for all
- /// calls to Flickr.
- /// </summary>
- public string ApiKey
- {
- get { return _apiKey; }
- set { _apiKey = (value==null||value.Length==0?null:value); }
- }
-
- /// <summary>
- /// API shared secret is required for all calls that require signing, which includes
- /// all methods that require authentication, as well as the actual flickr.auth.* calls.
- /// </summary>
- public string ApiSecret
- {
- get { return _sharedSecret; }
- set { _sharedSecret = (value==null||value.Length==0?null:value); }
- }
-
- /// <summary>
- /// The API token is required for all calls that require authentication.
- /// A <see cref="FlickrException"/> will be raised by Flickr if the API token is
- /// not set when required.
- /// </summary>
- /// <remarks>
- /// It should be noted that some methods will work without the API token, but
- /// will return different results if used with them (such as group pool requests,
- /// and results which include private pictures the authenticated user is allowed to see
- /// (their own, or others).
- /// </remarks>
- [Obsolete("Renamed to AuthToken to be more consistent with the Flickr API")]
- public string ApiToken
- {
- get { return _apiToken; }
- set { _apiToken = (value==null||value.Length==0?null:value); }
- }
-
- /// <summary>
- /// The authentication token is required for all calls that require authentication.
- /// A <see cref="FlickrException"/> will be raised by Flickr if the authentication token is
- /// not set when required.
- /// </summary>
- /// <remarks>
- /// It should be noted that some methods will work without the authentication token, but
- /// will return different results if used with them (such as group pool requests,
- /// and results which include private pictures the authenticated user is allowed to see
- /// (their own, or others).
- /// </remarks>
- public string AuthToken
- {
- get { return _apiToken; }
- set { _apiToken = (value==null||value.Length==0?null:value); }
- }
-
- /// <summary>
- /// Gets or sets whether the cache should be disabled. Use only in extreme cases where you are sure you
- /// don't want any caching.
- /// </summary>
- public static bool CacheDisabled
- {
- get { return Cache.CacheDisabled; }
- set { Cache.CacheDisabled = value; }
- }
-
- /// <summary>
- /// All GET calls to Flickr are cached by the Flickr.Net API. Set the <see cref="CacheTimeout"/>
- /// to determine how long these calls should be cached (make this as long as possible!)
- /// </summary>
- public static TimeSpan CacheTimeout
- {
- get { return Cache.CacheTimeout; }
- set { Cache.CacheTimeout = value; }
- }
-
- /// <summary>
- /// Sets or gets the location to store the Cache files.
- /// </summary>
- public static string CacheLocation
- {
- get { return Cache.CacheLocation; }
- set { Cache.CacheLocation = value; }
- }
-
- /// <summary>
- /// Gets the current size of the Cache.
- /// </summary>
- public static long CacheSize
- {
- get { return Cache.CacheSize; }
- }
-
- /// <summary>
- /// <see cref="CacheSizeLimit"/> is the cache file size in bytes for downloaded
- /// pictures. The default is 50MB (or 50 * 1024 * 1025 in bytes).
- /// </summary>
- public static long CacheSizeLimit
- {
- get { return Cache.CacheSizeLimit; }
- set { Cache.CacheSizeLimit = value; }
- }
-
- /// <summary>
- /// The default service to use for new Flickr instances
- /// </summary>
- public static SupportedService DefaultService
- {
- get
- {
-#if !WindowsCE
- if( !_isServiceSet && FlickrConfigurationManager.Settings != null )
- {
- _defaultService = FlickrConfigurationManager.Settings.Service;
- _isServiceSet = true;
- }
-#endif
- return _defaultService;
- }
- set
- {
- _defaultService = value;
-#if !WindowsCE
- _isServiceSet = true;
-#endif
- }
- }
-
- /// <summary>
- /// The current service that the Flickr API is using.
- /// </summary>
- public SupportedService CurrentService
- {
- get
- {
- return _service;
- }
- set
- {
- _service = value;
-#if !WindowsCE
- if( _service == SupportedService.Zooomr ) ServicePointManager.Expect100Continue = false;
-#endif
- }
- }
-
- /// <summary>
- /// Internal timeout for all web requests in milliseconds. Defaults to 30 seconds.
- /// </summary>
- public int HttpTimeout
- {
- get { return _timeout; }
- set { _timeout = value; }
- }
-
- /// <summary>
- /// Checks to see if a shared secret and an api token are stored in the object.
- /// Does not check if these values are valid values.
- /// </summary>
- public bool IsAuthenticated
- {
- get { return (_sharedSecret != null && _apiToken != null); }
- }
-
- /// <summary>
- /// Returns the raw XML returned from the last response.
- /// Only set it the response was not returned from cache.
- /// </summary>
- public string LastResponse
- {
- get { return _lastResponse; }
- }
-
- /// <summary>
- /// Returns the last URL requested. Includes API signing.
- /// </summary>
- public string LastRequest
- {
- get { return _lastRequest; }
- }
-
- /// <summary>
- /// You can set the <see cref="WebProxy"/> or alter its properties.
- /// It defaults to your internet explorer proxy settings.
- /// </summary>
- public WebProxy Proxy { get { return _proxy; } set { _proxy = value; } }
- #endregion
-
- #region [ Cache Methods ]
- /// <summary>
- /// Clears the cache completely.
- /// </summary>
- public static void FlushCache()
- {
- Cache.FlushCache();
- }
-
- /// <summary>
- /// Clears the cache for a particular URL.
- /// </summary>
- /// <param name="url">The URL to remove from the cache.</param>
- /// <remarks>
- /// The URL can either be an image URL for a downloaded picture, or
- /// a request URL (see <see cref="LastRequest"/> for getting the last URL).
- /// </remarks>
- public static void FlushCache(string url)
- {
- Cache.FlushCache(url);
- }
-
- /// <summary>
- /// Provides static access to the list of cached photos.
- /// </summary>
- /// <returns>An array of <see cref="PictureCacheItem"/> objects.</returns>
- public static PictureCacheItem[] GetCachePictures()
- {
- return (PictureCacheItem[]) Cache.Downloads.ToArray(typeof(PictureCacheItem));
- }
- #endregion
-
- #region [ Constructors ]
-
- /// <summary>
- /// Constructor loads configuration settings from app.config or web.config file if they exist.
- /// </summary>
- public Flickr()
- {
-#if !WindowsCE
- FlickrConfigurationSettings settings = FlickrConfigurationManager.Settings;
- if( settings == null ) return;
-
- if( settings.CacheSize != 0 ) CacheSizeLimit = settings.CacheSize;
- if( settings.CacheTimeout != TimeSpan.MinValue ) CacheTimeout = settings.CacheTimeout;
- ApiKey = settings.ApiKey;
- AuthToken = settings.ApiToken;
- ApiSecret = settings.SharedSecret;
-
- if (settings.IsProxyDefined)
- {
- Proxy = new WebProxy();
- Proxy.Address = new Uri("http://" + settings.ProxyIPAddress + ":" + settings.ProxyPort);
- if( settings.ProxyUsername != null && settings.ProxyUsername.Length > 0 )
- {
- NetworkCredential creds = new NetworkCredential();
- creds.UserName = settings.ProxyUsername;
- creds.Password = settings.ProxyPassword;
- creds.Domain = settings.ProxyDomain;
- Proxy.Credentials = creds;
- }
- }
- else
- {
- // try and get default IE settings
- try
- {
- Proxy = WebProxy.GetDefaultProxy();
- }
- catch(System.Security.SecurityException)
- {
- // Capture SecurityException for when running in a Medium Trust environment.
- }
- }
-
-#endif
-
- CurrentService = DefaultService;
- }
-
- /// <summary>
- /// Create a new instance of the <see cref="Flickr"/> class with no authentication.
- /// </summary>
- /// <param name="apiKey">Your Flickr API Key.</param>
- public Flickr(string apiKey) : this(apiKey, "", "")
- {
- }
-
- /// <summary>
- /// Creates a new instance of the <see cref="Flickr"/> class with an API key and a Shared Secret.
- /// This is only useful really useful for calling the Auth functions as all other
- /// authenticationed methods also require the API Token.
- /// </summary>
- /// <param name="apiKey">Your Flickr API Key.</param>
- /// <param name="sharedSecret">Your Flickr Shared Secret.</param>
- public Flickr(string apiKey, string sharedSecret) : this(apiKey, sharedSecret, "")
- {
- }
-
- /// <summary>
- /// Create a new instance of the <see cref="Flickr"/> class with the email address and password given
- /// </summary>
- /// <param name="apiKey">Your Flickr API Key</param>
- /// <param name="sharedSecret">Your FLickr Shared Secret.</param>
- /// <param name="token">The token for the user who has been authenticated.</param>
- public Flickr(string apiKey, string sharedSecret, string token) : this()
- {
- _apiKey = apiKey;
- _sharedSecret = sharedSecret;
- _apiToken = token;
- }
- #endregion
-
- #region [ Private Methods ]
- /// <summary>
- /// A private method which performs the actual HTTP web request if
- /// the details are not found within the cache.
- /// </summary>
- /// <param name="url">The URL to download.</param>
- /// <param name="variables">The query string parameters to be added to the end of the URL.</param>
- /// <returns>A <see cref="FlickrNet.Response"/> object.</returns>
- /// <remarks>If the final length of the URL would be greater than 2000 characters
- /// then they are sent as part of the body instead.</remarks>
- private string DoGetResponse(string url, string variables)
- {
- HttpWebRequest req = null;
- HttpWebResponse res = null;
-
- if( variables.Length < 2000 )
- {
- url += "?" + variables;
- variables = "";
- }
-
- // Initialise the web request
- req = (HttpWebRequest)HttpWebRequest.Create(url);
- req.Method = CurrentService==SupportedService.Zooomr?"GET":"POST";
-
- if (req.Method == "POST") req.ContentLength = variables.Length;
-
- req.UserAgent = UserAgent;
- if( Proxy != null ) req.Proxy = Proxy;
- req.Timeout = HttpTimeout;
- req.KeepAlive = false;
- if (variables.Length > 0)
- {
- req.ContentType = "application/x-www-form-urlencoded";
- StreamWriter sw = new StreamWriter(req.GetRequestStream());
- sw.Write(variables);
- sw.Close();
- }
- else
- {
- // This is needed in the Compact Framework
- // See for more details: http://msdn2.microsoft.com/en-us/library/1afx2b0f.aspx
- if (req.Method=="POST")
- req.GetRequestStream().Close();
- }
-
- try
- {
- // Get response from the internet
- res = (HttpWebResponse)req.GetResponse();
- }
- catch(WebException ex)
- {
- if( ex.Status == WebExceptionStatus.ProtocolError )
- {
- HttpWebResponse res2 = (HttpWebResponse)ex.Response;
- if( res2 != null )
- {
- throw new FlickrWebException(String.Format("HTTP Error {0}, {1}", (int)res2.StatusCode, res2.StatusDescription), ex);
- }
- }
- throw new FlickrWebException(ex.Message, ex);
- }
-
- string responseString = string.Empty;
-
- using (StreamReader sr = new StreamReader(res.GetResponseStream()))
- {
- responseString = sr.ReadToEnd();
- }
-
- return responseString;
- }
-
- /// <summary>
- /// Download a picture (or anything else actually).
- /// </summary>
- /// <param name="url"></param>
- /// <returns></returns>
- private Stream DoDownloadPicture(string url)
- {
- HttpWebRequest req = null;
- HttpWebResponse res = null;
-
- try
- {
- req = (HttpWebRequest)HttpWebRequest.Create(url);
- req.UserAgent = UserAgent;
- if( Proxy != null ) req.Proxy = Proxy;
- req.Timeout = HttpTimeout;
- req.KeepAlive = false;
- res = (HttpWebResponse)req.GetResponse();
- }
- catch(WebException ex)
- {
- if( ex.Status == WebExceptionStatus.ProtocolError )
- {
- HttpWebResponse res2 = (HttpWebResponse)ex.Response;
- if( res2 != null )
- {
- throw new FlickrWebException(String.Format("HTTP Error while downloading photo: {0}, {1}", (int)res2.StatusCode, res2.StatusDescription), ex);
- }
- }
- else if( ex.Status == WebExceptionStatus.Timeout )
- {
- throw new FlickrWebException("The request timed-out", ex);
- }
- throw new FlickrWebException("Picture download failed (" + ex.Message + ")", ex);
- }
-
- return res.GetResponseStream();
- }
- #endregion
-
- #region [ GetResponse methods ]
- private Response GetResponseNoCache(Hashtable parameters)
- {
- return GetResponse(parameters, TimeSpan.MinValue);
- }
-
- private Response GetResponseAlwaysCache(Hashtable parameters)
- {
- return GetResponse(parameters, TimeSpan.MaxValue);
- }
-
- private Response GetResponseCache(Hashtable parameters)
- {
- return GetResponse(parameters, Cache.CacheTimeout);
- }
-
- private Response GetResponse(Hashtable parameters, TimeSpan cacheTimeout)
- {
- CheckApiKey();
-
- // Calulate URL
- string url = BaseUrl;
-
- StringBuilder UrlStringBuilder = new StringBuilder("", 2 * 1024);
- StringBuilder HashStringBuilder = new StringBuilder(_sharedSecret, 2 * 1024);
-
- parameters["api_key"] = _apiKey;
-
- if( _apiToken != null && _apiToken.Length > 0 )
- {
- parameters["auth_token"] = _apiToken;
- }
-
- string[] keys = new string[parameters.Keys.Count];
- parameters.Keys.CopyTo(keys, 0);
- Array.Sort(keys);
-
- foreach(string key in keys)
- {
- if( UrlStringBuilder.Length > 0 ) UrlStringBuilder.Append("&");
- UrlStringBuilder.Append(key);
- UrlStringBuilder.Append("=");
- UrlStringBuilder.Append(Utils.UrlEncode(Convert.ToString(parameters[key])));
- HashStringBuilder.Append(key);
- HashStringBuilder.Append(parameters[key]);
- }
-
- if (_sharedSecret != null && _sharedSecret.Length > 0)
- {
- if (UrlStringBuilder.Length > BaseUrl.Length + 1)
- {
- UrlStringBuilder.Append("&");
- }
- UrlStringBuilder.Append("api_sig=");
- UrlStringBuilder.Append(Md5Hash(HashStringBuilder.ToString()));
- }
-
- string variables = UrlStringBuilder.ToString();
- _lastRequest = url;
- _lastResponse = string.Empty;
-
- if( CacheDisabled )
- {
- string responseXml = DoGetResponse(url, variables);
- _lastResponse = responseXml;
- return Utils.Deserialize(responseXml);
- }
- else
- {
- ResponseCacheItem cached = (ResponseCacheItem) Cache.Responses.Get(url + "?" + variables, cacheTimeout, true);
- if (cached != null)
- {
- System.Diagnostics.Debug.WriteLine("Cache hit");
- _lastResponse = cached.Response;
- return Utils.Deserialize(cached.Response);
- }
- else
- {
- System.Diagnostics.Debug.WriteLine("Cache miss");
- string responseXml = DoGetResponse(url, variables);
- _lastResponse = responseXml;
-
- ResponseCacheItem resCache = new ResponseCacheItem();
- resCache.Response = responseXml;
- resCache.Url = url;
- resCache.CreationTime = DateTime.UtcNow;
-
- FlickrNet.Response response = Utils.Deserialize(responseXml);
-
- if( response.Status == ResponseStatus.OK )
- {
- Cache.Responses.Shrink(Math.Max(0, Cache.CacheSizeLimit - responseXml.Length));
- Cache.Responses[url] = resCache;
- }
-
- return response;
- }
- }
- }
-
- #endregion
-
- #region [ DownloadPicture ]
- /// <summary>
- /// Downloads the picture from a internet and transfers it to a stream object.
- /// </summary>
- /// <param name="url">The url of the image to download.</param>
- /// <returns>A <see cref="Stream"/> object containing the downloaded picture.</returns>
- /// <remarks>
- /// The method checks the download cache first to see if the picture has already
- /// been downloaded and if so returns the cached image. Otherwise it goes to the internet for the actual
- /// image.
- /// </remarks>
- public System.IO.Stream DownloadPicture(string url)
- {
- if( CacheDisabled )
- {
- return DoDownloadPicture(url);
- }
-
- const int BUFFER_SIZE = 1024 * 10;
-
- PictureCacheItem cacheItem = (PictureCacheItem) Cache.Downloads[url];
- if (cacheItem != null)
- {
- return new FileStream(cacheItem.filename, FileMode.Open, FileAccess.Read, FileShare.ReadWrite);
- }
-
- PictureCacheItem picCache = new PictureCacheItem();
- picCache.filename = Path.Combine(Cache.CacheLocation,Guid.NewGuid().ToString());
- Stream read = DoDownloadPicture(url);
- Stream write = new FileStream(picCache.filename, FileMode.Create, FileAccess.Write, FileShare.None);
-
- byte[] buffer = new byte[BUFFER_SIZE];
- int bytes = 0;
- long fileSize = 0;
-
- while( (bytes = read.Read(buffer, 0, BUFFER_SIZE)) > 0 )
- {
- fileSize += bytes;
- write.Write(buffer, 0, bytes);
- }
-
- read.Close();
- write.Close();
-
- picCache.url = url;
- picCache.creationTime = DateTime.UtcNow;
- picCache.fileSize = fileSize;
-
- Cache.Downloads.Shrink(Math.Max(0, Cache.CacheSizeLimit - fileSize));
- Cache.Downloads[url] = picCache;
-
- return new FileStream(picCache.filename, FileMode.Open, FileAccess.Read, FileShare.ReadWrite);
- }
- #endregion
-
- #region [ Auth ]
- /// <summary>
- /// Retrieve a temporary FROB from the Flickr service, to be used in redirecting the
- /// user to the Flickr web site for authentication. Only required for desktop authentication.
- /// </summary>
- /// <remarks>
- /// Pass the FROB to the <see cref="AuthCalcUrl"/> method to calculate the url.
- /// </remarks>
- /// <example>
- /// <code>
- /// string frob = flickr.AuthGetFrob();
- /// string url = flickr.AuthCalcUrl(frob, AuthLevel.Read);
- ///
- /// // redirect the user to the url above and then wait till they have authenticated and return to the app.
- ///
- /// Auth auth = flickr.AuthGetToken(frob);
- ///
- /// // then store the auth.Token for later use.
- /// string token = auth.Token;
- /// </code>
- /// </example>
- /// <returns>The FROB.</returns>
- public string AuthGetFrob()
- {
- Hashtable parameters = new Hashtable();
- parameters.Add("method", "flickr.auth.getFrob");
-
- FlickrNet.Response response = GetResponseNoCache(parameters);
- if( response.Status == ResponseStatus.OK )
- {
- return response.AllElements[CurrentService==SupportedService.Zooomr?1:0].InnerText;
- }
- else
- {
- throw new FlickrApiException(response.Error);
- }
- }
-
- /// <summary>
- /// Calculates the URL to redirect the user to Flickr web site for
- /// authentication. Used by desktop application.
- /// See <see cref="AuthGetFrob"/> for example code.
- /// </summary>
- /// <param name="frob">The FROB to be used for authentication.</param>
- /// <param name="authLevel">The <see cref="AuthLevel"/> stating the maximum authentication level your application requires.</param>
- /// <returns>The url to redirect the user to.</returns>
- public string AuthCalcUrl(string frob, AuthLevel authLevel)
- {
- if( _sharedSecret == null ) throw new SignatureRequiredException();
-
- string hash = _sharedSecret + "api_key" + _apiKey + "frob" + frob + "perms" + authLevel.ToString().ToLower();
- hash = Md5Hash(hash);
- string url = AuthUrl + "?api_key=" + _apiKey + "&perms=" + authLevel.ToString().ToLower() + "&frob=" + frob;
- url += "&api_sig=" + hash;
-
- return url;
- }
-
- /// <summary>
- /// Calculates the URL to redirect the user to Flickr web site for
- /// auehtntication. Used by Web applications.
- /// See <see cref="AuthGetFrob"/> for example code.
- /// </summary>
- /// <remarks>
- /// The Flickr web site provides 'tiny urls' that can be used in place
- /// of this URL when you specify your return url in the API key page.
- /// It is recommended that you use these instead as they do not include
- /// your API or shared secret.
- /// </remarks>
- /// <param name="authLevel">The <see cref="AuthLevel"/> stating the maximum authentication level your application requires.</param>
- /// <returns>The url to redirect the user to.</returns>
- public string AuthCalcWebUrl(AuthLevel authLevel)
- {
- if( _sharedSecret == null ) throw new SignatureRequiredException();
-
- string hash = _sharedSecret + "api_key" + _apiKey + "perms" + authLevel.ToString().ToLower();
- hash = Md5Hash(hash);
- string url = AuthUrl + "?api_key=" + _apiKey + "&perms=" + authLevel.ToString().ToLower();
- url += "&api_sig=" + hash;
-
- return url;
- }
-
- /// <summary>
- /// After the user has authenticated your application on the flickr web site call this
- /// method with the FROB (either stored from <see cref="AuthGetFrob"/> or returned in the URL
- /// from the Flickr web site) to get the users token.
- /// </summary>
- /// <param name="frob">The string containing the FROB.</param>
- /// <returns>A <see cref="Auth"/> object containing user and token details.</returns>
- public Auth AuthGetToken(string frob)
- {
- if( _sharedSecret == null ) throw new SignatureRequiredException();
-
- Hashtable parameters = new Hashtable();
- parameters.Add("method", "flickr.auth.getToken");
- parameters.Add("frob", frob);
-
- FlickrNet.Response response = GetResponseNoCache(parameters);
- if( response.Status == ResponseStatus.OK )
- {
- Auth auth = new Auth(response.AllElements[CurrentService==SupportedService.Zooomr?1:0]);
- return auth;
- }
- else
- {
- throw new FlickrApiException(response.Error);
- }
- }
-
- /// <summary>
- /// Gets the full token details for a given mini token, entered by the user following a
- /// web based authentication.
- /// </summary>
- /// <param name="miniToken">The mini token.</param>
- /// <returns>An instance <see cref="Auth"/> class, detailing the user and their full token.</returns>
- public Auth AuthGetFullToken(string miniToken)
- {
- Hashtable parameters = new Hashtable();
- parameters.Add("method", "flickr.auth.getFullToken");
- parameters.Add("mini_token", miniToken.Replace("-", ""));
- FlickrNet.Response response = GetResponseNoCache(parameters);
-
- if( response.Status == ResponseStatus.OK )
- {
- Auth auth = new Auth(response.AllElements[0]);
- return auth;
- }
- else
- {
- throw new FlickrApiException(response.Error);
- }
- }
-
- /// <summary>
- /// Checks a authentication token with the flickr service to make
- /// sure it is still valid.
- /// </summary>
- /// <param name="token">The authentication token to check.</param>
- /// <returns>The <see cref="Auth"/> object detailing the user for the token.</returns>
- public Auth AuthCheckToken(string token)
- {
- Hashtable parameters = new Hashtable();
- parameters.Add("method", "flickr.auth.checkToken");
- parameters.Add("auth_token", token);
-
- FlickrNet.Response response = GetResponseNoCache(parameters);
- if( response.Status == ResponseStatus.OK )
- {
- Auth auth = new Auth(response.AllElements[CurrentService==SupportedService.Zooomr?1:0]);
- return auth;
- }
- else
- {
- throw new FlickrApiException(response.Error);
- }
-
- }
- #endregion
-
- #region [ Activity ]
- /// <summary>
- /// Returns a list of recent activity on photos belonging to the calling user.
- /// </summary>
- /// <remarks>
- /// <b>Do not poll this method more than once an hour.</b>
- /// </remarks>
- /// <returns>An array of <see cref="ActivityItem"/> instances.</returns>
- public ActivityItem[] ActivityUserPhotos()
- {
- return ActivityUserPhotos(null);
- }
-
- /// <summary>
- /// Returns a list of recent activity on photos belonging to the calling user.
- /// </summary>
- /// <remarks>
- /// <b>Do not poll this method more than once an hour.</b>
- /// </remarks>
- /// <param name="timePeriod">The number of days or hours you want to get activity for.</param>
- /// <param name="timeType">'d' for days, 'h' for hours.</param>
- /// <returns>An array of <see cref="ActivityItem"/> instances.</returns>
- public ActivityItem[] ActivityUserPhotos(int timePeriod, string timeType)
- {
- if( timePeriod == 0 )
- throw new ArgumentOutOfRangeException("timePeriod", "Time Period should be greater than 0");
-
- if( timeType == null )
- throw new ArgumentNullException("timeType");
-
- if( timeType != "d" && timeType != "h" )
- throw new ArgumentOutOfRangeException("timeType", "Time type must be 'd' or 'h'");
-
- return ActivityUserPhotos(timePeriod + timeType);
- }
-
- private ActivityItem[] ActivityUserPhotos(string timeframe)
- {
- Hashtable parameters = new Hashtable();
- parameters.Add("method", "flickr.activity.userPhotos");
- if( timeframe != null && timeframe.Length > 0 ) parameters.Add("timeframe", timeframe);
-
- FlickrNet.Response response = GetResponseCache(parameters);
- if( response.Status == ResponseStatus.OK )
- {
- XmlNodeList list = response.AllElements[0].SelectNodes("item");
- ActivityItem[] items = new ActivityItem[list.Count];
- for(int i = 0; i < items.Length; i++)
- {
- items[i] = new ActivityItem(list[i]);
- }
- return items;
- }
- else
- {
- throw new FlickrApiException(response.Error);
- }
- }
-
- /// <summary>
- /// Returns a list of recent activity on photos commented on by the calling user.
- /// </summary>
- /// <remarks>
- /// <b>Do not poll this method more than once an hour.</b>
- /// </remarks>
- /// <returns></returns>
- public ActivityItem[] ActivityUserComments(int page, int perPage)
- {
- Hashtable parameters = new Hashtable();
- parameters.Add("method", "flickr.activity.userComments");
- if( page > 0 ) parameters.Add("page", page);
- if( perPage > 0 ) parameters.Add("per_page", perPage);
-
- FlickrNet.Response response = GetResponseCache(parameters);
- if( response.Status == ResponseStatus.OK )
- {
- XmlNodeList list = response.AllElements[0].SelectNodes("item");
- ActivityItem[] items = new ActivityItem[list.Count];
- for(int i = 0; i < items.Length; i++)
- {
- items[i] = new ActivityItem(list[i]);
- }
- return items;
- }
- else
- {
- throw new FlickrApiException(response.Error);
- }
- }
- #endregion
-
- #region [ UploadPicture ]
- /// <summary>
- /// Uploads a file to Flickr.
- /// </summary>
- /// <param name="filename">The filename of the file to open.</param>
- /// <returns>The id of the photo on a successful upload.</returns>
- /// <exception cref="FlickrException">Thrown when Flickr returns an error. see http://www.flickr.com/services/api/upload.api.html for more details.</exception>
- /// <remarks>Other exceptions may be thrown, see <see cref="FileStream"/> constructors for more details.</remarks>
- public string UploadPicture(string filename)
- {
- return UploadPicture(filename, null, null, null, true, false, false);
- }
-
- /// <summary>
- /// Uploads a file to Flickr.
- /// </summary>
- /// <param name="filename">The filename of the file to open.</param>
- /// <param name="title">The title of the photograph.</param>
- /// <returns>The id of the photo on a successful upload.</returns>
- /// <exception cref="FlickrException">Thrown when Flickr returns an error. see http://www.flickr.com/services/api/upload.api.html for more details.</exception>
- /// <remarks>Other exceptions may be thrown, see <see cref="FileStream"/> constructors for more details.</remarks>
- public string UploadPicture(string filename, string title)
- {
- return UploadPicture(filename, title, null, null, true, false, false);
- }
-
- /// <summary>
- /// Uploads a file to Flickr.
- /// </summary>
- /// <param name="filename">The filename of the file to open.</param>
- /// <param name="title">The title of the photograph.</param>
- /// <param name="description">The description of the photograph.</param>
- /// <returns>The id of the photo on a successful upload.</returns>
- /// <exception cref="FlickrException">Thrown when Flickr returns an error. see http://www.flickr.com/services/api/upload.api.html for more details.</exception>
- /// <remarks>Other exceptions may be thrown, see <see cref="FileStream"/> constructors for more details.</remarks>
- public string UploadPicture(string filename, string title, string description)
- {
- return UploadPicture(filename, title, description, null, true, false, false);
- }
-
- /// <summary>
- /// Uploads a file to Flickr.
- /// </summary>
- /// <param name="filename">The filename of the file to open.</param>
- /// <param name="title">The title of the photograph.</param>
- /// <param name="description">The description of the photograph.</param>
- /// <param name="tags">A comma seperated list of the tags to assign to the photograph.</param>
- /// <returns>The id of the photo on a successful upload.</returns>
- /// <exception cref="FlickrException">Thrown when Flickr returns an error. see http://www.flickr.com/services/api/upload.api.html for more details.</exception>
- /// <remarks>Other exceptions may be thrown, see <see cref="FileStream"/> constructors for more details.</remarks>
- public string UploadPicture(string filename, string title, string description, string tags)
- {
- Stream stream = new FileStream(filename, FileMode.Open, FileAccess.Read, FileShare.ReadWrite);
- return UploadPicture(stream, title, description, tags, -1, -1, -1, ContentType.None, SafetyLevel.None, HiddenFromSearch.None);
- }
-
- /// <summary>
- /// Uploads a file to Flickr.
- /// </summary>
- /// <param name="filename">The filename of the file to open.</param>
- /// <param name="title">The title of the photograph.</param>
- /// <param name="description">The description of the photograph.</param>
- /// <param name="tags">A comma seperated list of the tags to assign to the photograph.</param>
- /// <param name="isPublic">True if the photograph should be public and false if it should be private.</param>
- /// <param name="isFriend">True if the photograph should be marked as viewable by friends contacts.</param>
- /// <param name="isFamily">True if the photograph should be marked as viewable by family contacts.</param>
- /// <returns>The id of the photo on a successful upload.</returns>
- /// <exception cref="FlickrException">Thrown when Flickr returns an error. see http://www.flickr.com/services/api/upload.api.html for more details.</exception>
- /// <remarks>Other exceptions may be thrown, see <see cref="FileStream"/> constructors for more details.</remarks>
- public string UploadPicture(string filename, string title, string description, string tags, bool isPublic, bool isFamily, bool isFriend)
- {
- Stream stream = new FileStream(filename, FileMode.Open, FileAccess.Read, FileShare.ReadWrite);
- return UploadPicture(stream, title, description, tags, isPublic?1:0, isFamily?1:0, isFriend?1:0, ContentType.None, SafetyLevel.None, HiddenFromSearch.None);
- }
-
- /// <summary>
- /// UploadPicture method that does all the uploading work.
- /// </summary>
- /// <param name="stream">The <see cref="Stream"/> object containing the pphoto to be uploaded.</param>
- /// <param name="title">The title of the photo (optional).</param>
- /// <param name="description">The description of the photograph (optional).</param>
- /// <param name="tags">The tags for the photograph (optional).</param>
- /// <param name="isPublic">0 for private, 1 for public.</param>
- /// <param name="isFamily">1 if family, 0 is not.</param>
- /// <param name="isFriend">1 if friend, 0 if not.</param>
- /// <param name="contentType">The content type of the photo, i.e. Photo, Screenshot or Other.</param>
- /// <param name="safetyLevel">The safety level of the photo, i.e. Safe, Moderate or Restricted.</param>
- /// <param name="hiddenFromSearch">Is the photo hidden from public searches.</param>
- /// <returns>The id of the photograph after successful uploading.</returns>
- public string UploadPicture(Stream stream, string title, string description, string tags, int isPublic, int isFamily, int isFriend, ContentType contentType, SafetyLevel safetyLevel, HiddenFromSearch hiddenFromSearch)
- {
- /*
- *
- * Modified UploadPicture code taken from the Flickr.Net library
- * URL: http://workspaces.gotdotnet.com/flickrdotnet
- * It is used under the terms of the Common Public License 1.0
- * URL: http://www.opensource.org/licenses/cpl.php
- *
- * */
-
- string boundary = "FLICKR_MIME_" + DateTime.Now.ToString("yyyyMMddhhmmss");
-
- HttpWebRequest req = (HttpWebRequest)HttpWebRequest.Create(UploadUrl);
- req.UserAgent = "Mozilla/4.0 FlickrNet API (compatible; MSIE 6.0; Windows NT 5.1)";
- req.Method = "POST";
- if( Proxy != null ) req.Proxy = Proxy;
- //req.Referer = "http://www.flickr.com";
- req.KeepAlive = true;
- req.Timeout = HttpTimeout * 1000;
- req.ContentType = "multipart/form-data; boundary=" + boundary + "";
- req.Expect = "";
-
- StringBuilder sb = new StringBuilder();
-
- Hashtable parameters = new Hashtable();
-
- if( title != null && title.Length > 0 )
- {
- parameters.Add("title", title);
- }
- if( description != null && description.Length > 0 )
- {
- parameters.Add("description", description);
- }
- if( tags != null && tags.Length > 0 )
- {
- parameters.Add("tags", tags);
- }
- if( isPublic >= 0 )
- {
- parameters.Add("is_public", isPublic.ToString());
- }
- if( isFriend >= 0 )
- {
- parameters.Add("is_friend", isFriend.ToString());
- }
- if( isFamily >= 0 )
- {
- parameters.Add("is_family", isFamily.ToString());
- }
- if( safetyLevel != SafetyLevel.None )
- {
- parameters.Add("safety_level", (int)safetyLevel);
- }
- if( contentType != ContentType.None )
- {
- parameters.Add("content_type", (int)contentType);
- }
- if( hiddenFromSearch != HiddenFromSearch.None )
- {
- parameters.Add("hidden", (int)hiddenFromSearch);
- }
-
- parameters.Add("api_key", _apiKey);
- parameters.Add("auth_token", _apiToken);
-
- string[] keys = new string[parameters.Keys.Count];
- parameters.Keys.CopyTo(keys, 0);
- Array.Sort(keys);
-
- StringBuilder HashStringBuilder = new StringBuilder(_sharedSecret, 2 * 1024);
-
- foreach(string key in keys)
- {
- HashStringBuilder.Append(key);
- HashStringBuilder.Append(parameters[key]);
- sb.Append("--" + boundary + "\r\n");
- sb.Append("Content-Disposition: form-data; name=\"" + key + "\"\r\n");
- sb.Append("\r\n");
- sb.Append(parameters[key] + "\r\n");
- }
-
- sb.Append("--" + boundary + "\r\n");
- sb.Append("Content-Disposition: form-data; name=\"api_sig\"\r\n");
- sb.Append("\r\n");
- sb.Append(Md5Hash(HashStringBuilder.ToString()) + "\r\n");
-
- // Photo
- sb.Append("--" + boundary + "\r\n");
- sb.Append("Content-Disposition: form-data; name=\"photo\"; filename=\"image.jpeg\"\r\n");
- sb.Append("Content-Type: image/jpeg\r\n");
- sb.Append("\r\n");
-
- UTF8Encoding encoding = new UTF8Encoding();
-
- byte[] postContents = encoding.GetBytes(sb.ToString());
-
- byte[] photoContents = new byte[stream.Length];
- stream.Read(photoContents, 0, photoContents.Length);
- stream.Close();
-
- byte[] postFooter = encoding.GetBytes("\r\n--" + boundary + "--\r\n");
-
- byte[] dataBuffer = new byte[postContents.Length + photoContents.Length + postFooter.Length];
- Buffer.BlockCopy(postContents, 0, dataBuffer, 0, postContents.Length);
- Buffer.BlockCopy(photoContents, 0, dataBuffer, postContents.Length, photoContents.Length);
- Buffer.BlockCopy(postFooter, 0, dataBuffer, postContents.Length + photoContents.Length, postFooter.Length);
-
- req.ContentLength = dataBuffer.Length;
-
- Stream resStream = req.GetRequestStream();
-
- int j = 1;
- int uploadBit = Math.Max(dataBuffer.Length / 100, 50*1024);
- int uploadSoFar = 0;
-
- for(int i = 0; i < dataBuffer.Length; i=i+uploadBit)
- {
- int toUpload = Math.Min(uploadBit, dataBuffer.Length - i);
- uploadSoFar += toUpload;
-
- resStream.Write(dataBuffer, i, toUpload);
-
- if( (OnUploadProgress != null) && ((j++) % 5 == 0 || uploadSoFar == dataBuffer.Length) )
- {
- OnUploadProgress(this, new UploadProgressEventArgs(i+toUpload, uploadSoFar == dataBuffer.Length));
- }
- }
- resStream.Close();
-
- HttpWebResponse res = (HttpWebResponse)req.GetResponse();
-
- XmlSerializer serializer = _uploaderSerializer;
-
- StreamReader sr = new StreamReader(res.GetResponseStream());
- string s= sr.ReadToEnd();
- sr.Close();
-
- StringReader str = new StringReader(s);
-
- FlickrNet.Uploader uploader = (FlickrNet.Uploader)serializer.Deserialize(str);
-
- if( uploader.Status == ResponseStatus.OK )
- {
- return uploader.PhotoId;
- }
- else
- {
- throw new FlickrApiException(uploader.Error);
- }
- }
-
- /// <summary>
- /// Replace an existing photo on Flickr.
- /// </summary>
- /// <param name="filename">The filename of the photo to upload.</param>
- /// <param name="photoId">The ID of the photo to replace.</param>
- /// <returns>The id of the photograph after successful uploading.</returns>
- public string ReplacePicture(string filename, string photoId)
- {
- FileStream stream = null;
- try
- {
- stream = new FileStream(filename, FileMode.Open, FileAccess.Read, FileShare.Read);
- return ReplacePicture(stream, photoId);
- }
- finally
- {
- if( stream != null ) stream.Close();
- }
-
- }
-
- /// <summary>
- /// Replace an existing photo on Flickr.
- /// </summary>
- /// <param name="stream">The <see cref="Stream"/> object containing the photo to be uploaded.</param>
- /// <param name="photoId">The ID of the photo to replace.</param>
- /// <returns>The id of the photograph after successful uploading.</returns>
- public string ReplacePicture(Stream stream, string photoId)
- {
- string boundary = "FLICKR_MIME_" + DateTime.Now.ToString("yyyyMMddhhmmss");
-
- HttpWebRequest req = (HttpWebRequest)HttpWebRequest.Create(ReplaceUrl);
- req.UserAgent = "Mozilla/4.0 FlickrNet API (compatible; MSIE 6.0; Windows NT 5.1)";
- req.Method = "POST";
- if( Proxy != null ) req.Proxy = Proxy;
- req.Referer = "http://www.flickr.com";
- req.KeepAlive = false;
- req.Timeout = HttpTimeout * 100;
- req.ContentType = "multipart/form-data; boundary=" + boundary + "";
-
- StringBuilder sb = new StringBuilder();
-
- Hashtable parameters = new Hashtable();
-
- parameters.Add("photo_id", photoId);
- parameters.Add("api_key", _apiKey);
- parameters.Add("auth_token", _apiToken);
-
- string[] keys = new string[parameters.Keys.Count];
- parameters.Keys.CopyTo(keys, 0);
- Array.Sort(keys);
-
- StringBuilder HashStringBuilder = new StringBuilder(_sharedSecret, 2 * 1024);
-
- foreach(string key in keys)
- {
- HashStringBuilder.Append(key);
- HashStringBuilder.Append(parameters[key]);
- sb.Append("--" + boundary + "\r\n");
- sb.Append("Content-Disposition: form-data; name=\"" + key + "\"\r\n");
- sb.Append("\r\n");
- sb.Append(parameters[key] + "\r\n");
- }
-
- sb.Append("--" + boundary + "\r\n");
- sb.Append("Content-Disposition: form-data; name=\"api_sig\"\r\n");
- sb.Append("\r\n");
- sb.Append(Md5Hash(HashStringBuilder.ToString()) + "\r\n");
-
- // Photo
- sb.Append("--" + boundary + "\r\n");
- sb.Append("Content-Disposition: form-data; name=\"photo\"; filename=\"image.jpeg\"\r\n");
- sb.Append("Content-Type: image/jpeg\r\n");
- sb.Append("\r\n");
-
- UTF8Encoding encoding = new UTF8Encoding();
-
- byte[] postContents = encoding.GetBytes(sb.ToString());
-
- byte[] photoContents = new byte[stream.Length];
- stream.Read(photoContents, 0, photoContents.Length);
- stream.Close();
-
- byte[] postFooter = encoding.GetBytes("\r\n--" + boundary + "--\r\n");
-
- byte[] dataBuffer = new byte[postContents.Length + photoContents.Length + postFooter.Length];
- Buffer.BlockCopy(postContents, 0, dataBuffer, 0, postContents.Length);
- Buffer.BlockCopy(photoContents, 0, dataBuffer, postContents.Length, photoContents.Length);
- Buffer.BlockCopy(postFooter, 0, dataBuffer, postContents.Length + photoContents.Length, postFooter.Length);
-
- req.ContentLength = dataBuffer.Length;
-
- Stream resStream = req.GetRequestStream();
-
- int j = 1;
- int uploadBit = Math.Max(dataBuffer.Length / 100, 50*1024);
- int uploadSoFar = 0;
-
- for(int i = 0; i < dataBuffer.Length; i=i+uploadBit)
- {
- int toUpload = Math.Min(uploadBit, dataBuffer.Length - i);
- uploadSoFar += toUpload;
-
- resStream.Write(dataBuffer, i, toUpload);
-
- if( (OnUploadProgress != null) && ((j++) % 5 == 0 || uploadSoFar == dataBuffer.Length) )
- {
- OnUploadProgress(this, new UploadProgressEventArgs(i+toUpload, uploadSoFar == dataBuffer.Length));
- }
- }
- resStream.Close();
-
- HttpWebResponse res = (HttpWebResponse)req.GetResponse();
-
- XmlSerializer serializer = _uploaderSerializer;
-
- StreamReader sr = new StreamReader(res.GetResponseStream());
- string s= sr.ReadToEnd();
- sr.Close();
-
- StringReader str = new StringReader(s);
-
- FlickrNet.Uploader uploader = (FlickrNet.Uploader)serializer.Deserialize(str);
-
- if( uploader.Status == ResponseStatus.OK )
- {
- return uploader.PhotoId;
- }
- else
- {
- throw new FlickrApiException(uploader.Error);
- }
- }
- #endregion
-
- #region [ Blogs ]
- /// <summary>
- /// Gets a list of blogs that have been set up by the user.
- /// Requires authentication.
- /// </summary>
- /// <returns>A <see cref="Blogs"/> object containing the list of blogs.</returns>
- /// <remarks></remarks>
- public Blogs BlogGetList()
- {
- Hashtable parameters = new Hashtable();
- parameters.Add("method", "flickr.blogs.getList");
- FlickrNet.Response response = GetResponseCache(parameters);
-
- if( response.Status == ResponseStatus.OK )
- {
- return response.Blogs;
- }
- else
- {
- throw new FlickrApiException(response.Error);
- }
- }
-
- /// <summary>
- /// Posts a photo already uploaded to a blog.
- /// Requires authentication.
- /// </summary>
- /// <param name="blogId">The Id of the blog to post the photo too.</param>
- /// <param name="photoId">The Id of the photograph to post.</param>
- /// <param name="title">The title of the blog post.</param>
- /// <param name="description">The body of the blog post.</param>
- /// <returns>True if the operation is successful.</returns>
- public bool BlogPostPhoto(string blogId, string photoId, string title, string description)
- {
- return BlogPostPhoto(blogId, photoId, title, description, null);
- }
-
- /// <summary>
- /// Posts a photo already uploaded to a blog.
- /// Requires authentication.
- /// </summary>
- /// <param name="blogId">The Id of the blog to post the photo too.</param>
- /// <param name="photoId">The Id of the photograph to post.</param>
- /// <param name="title">The title of the blog post.</param>
- /// <param name="description">The body of the blog post.</param>
- /// <param name="blogPassword">The password of the blog if it is not already stored in flickr.</param>
- /// <returns>True if the operation is successful.</returns>
- public bool BlogPostPhoto(string blogId, string photoId, string title, string description, string blogPassword)
- {
- Hashtable parameters = new Hashtable();
- parameters.Add("method", "flickr.blogs.postPhoto");
- parameters.Add("blog_id", blogId);
- parameters.Add("photo_id", photoId);
- parameters.Add("title", title);
- parameters.Add("description", description);
- if( blogPassword != null ) parameters.Add("blog_password", blogPassword);
-
- FlickrNet.Response response = GetResponseCache(parameters);
-
- if( response.Status == ResponseStatus.OK )
- {
- return true;
- }
- else
- {
- throw new FlickrApiException(response.Error);
- }
- }
- #endregion
-
- #region [ Contacts ]
- /// <summary>
- /// Gets a list of contacts for the logged in user.
- /// Requires authentication.
- /// </summary>
- /// <returns>An instance of the <see cref="Contacts"/> class containing the list of contacts.</returns>
- public Contacts ContactsGetList()
- {
- Hashtable parameters = new Hashtable();
- parameters.Add("method", "flickr.contacts.getList");
- FlickrNet.Response response = GetResponseCache(parameters);
-
- if( response.Status == ResponseStatus.OK )
- {
- return response.Contacts;
- }
- else
- {
- throw new FlickrApiException(response.Error);
- }
- }
-
- /// <summary>
- /// Gets a list of the given users contact, or those that are publically avaiable.
- /// </summary>
- /// <param name="userId">The Id of the user who's contacts you want to return.</param>
- /// <returns>An instance of the <see cref="Contacts"/> class containing the list of contacts.</returns>
- public Contacts ContactsGetPublicList(string userId)
- {
- Hashtable parameters = new Hashtable();
- parameters.Add("method", "flickr.contacts.getPublicList");
- parameters.Add("user_id", userId);
- FlickrNet.Response response = GetResponseCache(parameters);
-
- if( response.Status == ResponseStatus.OK )
- {
- return response.Contacts;
- }
- else
- {
- throw new FlickrApiException(response.Error);
- }
- }
- #endregion
-
- #region [ Favorites ]
- /// <summary>
- /// Adds a photo to the logged in favourites.
- /// Requires authentication.
- /// </summary>
- /// <param name="photoId">The id of the photograph to add.</param>
- /// <returns>True if the operation is successful.</returns>
- public bool FavoritesAdd(string photoId)
- {
- Hashtable parameters = new Hashtable();
- parameters.Add("method", "flickr.favorites.add");
- parameters.Add("photo_id", photoId);
- FlickrNet.Response response = GetResponseCache(parameters);
-
- if( response.Status == ResponseStatus.OK )
- {
- return true;
- }
- else
- {
- throw new FlickrApiException(response.Error);
- }
- }
-
- /// <summary>
- /// Removes a photograph from the logged in users favourites.
- /// Requires authentication.
- /// </summary>
- /// <param name="photoId">The id of the photograph to remove.</param>
- /// <returns>True if the operation is successful.</returns>
- public bool FavoritesRemove(string photoId)
- {
- Hashtable parameters = new Hashtable();
- parameters.Add("method", "flickr.favorites.remove");
- parameters.Add("photo_id", photoId);
- FlickrNet.Response response = GetResponseCache(parameters);
-
- if( response.Status == ResponseStatus.OK )
- {
- return true;
- }
- else
- {
- throw new FlickrApiException(response.Error);
- }
- }
-
- /// <summary>
- /// Get a list of the currently logger in users favourites.
- /// Requires authentication.
- /// </summary>
- /// <returns><see cref="Photos"/> instance containing a collection of <see cref="Photo"/> objects.</returns>
- public Photos FavoritesGetList()
- {
- return FavoritesGetList(null, 0, 0);
- }
-
- /// <summary>
- /// Get a list of the currently logger in users favourites.
- /// Requires authentication.
- /// </summary>
- /// <param name="perPage">Number of photos to include per page.</param>
- /// <param name="page">The page to download this time.</param>
- /// <returns><see cref="Photos"/> instance containing a collection of <see cref="Photo"/> objects.</returns>
- public Photos FavoritesGetList(int perPage, int page)
- {
- return FavoritesGetList(null, perPage, page);
- }
-
- /// <summary>
- /// Get a list of favourites for the specified user.
- /// </summary>
- /// <param name="userId">The user id of the user whose favourites you wish to retrieve.</param>
- /// <returns><see cref="Photos"/> instance containing a collection of <see cref="Photo"/> objects.</returns>
- public Photos FavoritesGetList(string userId)
- {
- return FavoritesGetList(userId, 0, 0);
- }
-
- /// <summary>
- /// Get a list of favourites for the specified user.
- /// </summary>
- /// <param name="userId">The user id of the user whose favourites you wish to retrieve.</param>
- /// <param name="perPage">Number of photos to include per page.</param>
- /// <param name="page">The page to download this time.</param>
- /// <returns><see cref="Photos"/> instance containing a collection of <see cref="Photo"/> objects.</returns>
- public Photos FavoritesGetList(string userId, int perPage, int page)
- {
- Hashtable parameters = new Hashtable();
- parameters.Add("method", "flickr.favorites.getList");
- if( userId != null ) parameters.Add("user_id", userId);
- if( perPage > 0 ) parameters.Add("per_page", perPage.ToString());
- if( page > 0 ) parameters.Add("page", page.ToString());
- FlickrNet.Response response = GetResponseCache(parameters);
-
- if( response.Status == ResponseStatus.OK )
- {
- return response.Photos;
- }
- else
- {
- throw new FlickrApiException(response.Error);
- }
- }
-
- /// <summary>
- /// Gets the public favourites for a specified user.
- /// </summary>
- /// <remarks>This function difers from <see cref="Flickr.FavoritesGetList(string)"/> in that the user id
- /// is not optional.</remarks>
- /// <param name="userId">The is of the user whose favourites you wish to return.</param>
- /// <returns>A <see cref="Photos"/> object containing a collection of <see cref="Photo"/> objects.</returns>
- public Photos FavoritesGetPublicList(string userId)
- {
- return FavoritesGetPublicList(userId, 0, 0);
- }
-
- /// <summary>
- /// Gets the public favourites for a specified user.
- /// </summary>
- /// <remarks>This function difers from <see cref="Flickr.FavoritesGetList(string)"/> in that the user id
- /// is not optional.</remarks>
- /// <param name="userId">The is of the user whose favourites you wish to return.</param>
- /// <param name="perPage">The number of photos to return per page.</param>
- /// <param name="page">The specific page to return.</param>
- /// <returns>A <see cref="Photos"/> object containing a collection of <see cref="Photo"/> objects.</returns>
- public Photos FavoritesGetPublicList(string userId, int perPage, int page)
- {
- Hashtable parameters = new Hashtable();
- parameters.Add("method", "flickr.favorites.getPublicList");
- parameters.Add("user_id", userId);
- if( perPage > 0 ) parameters.Add("per_page", perPage.ToString());
- if( page > 0 ) parameters.Add("page", page.ToString());
- FlickrNet.Response response = GetResponseCache(parameters);
-
- if( response.Status == ResponseStatus.OK )
- {
- return response.Photos;
- }
- else
- {
- throw new FlickrApiException(response.Error);
- }
- }
- #endregion
-
- #region [ Groups ]
- /// <summary>
- /// Returns the top <see cref="Category"/> with a list of sub-categories and groups.
- /// (The top category does not have any groups in it but others may).
- /// </summary>
- /// <returns>A <see cref="Category"/> instance.</returns>
- public Category GroupsBrowse()
- {
- return GroupsBrowse("0");
- }
-
- /// <summary>
- /// Returns the <see cref="Category"/> specified by the category id with a list of sub-categories and groups.
- /// </summary>
- /// <param name="catId"></param>
- /// <returns>A <see cref="Category"/> instance.</returns>
- public Category GroupsBrowse(string catId)
- {
- Hashtable parameters = new Hashtable();
- parameters.Add("method", "flickr.groups.browse");
- parameters.Add("cat_id", catId);
- FlickrNet.Response response = GetResponseCache(parameters);
-
- if( response.Status == ResponseStatus.OK )
- {
- return response.Category;
- }
- else
- {
- throw new FlickrApiException(response.Error);
- }
- }
-
- /// <summary>
- /// Search the list of groups on Flickr for the text.
- /// </summary>
- /// <param name="text">The text to search for.</param>
- /// <returns>A list of groups matching the search criteria.</returns>
- public GroupSearchResults GroupsSearch(string text)
- {
- return GroupsSearch(text, 0, 0);
- }
-
- /// <summary>
- /// Search the list of groups on Flickr for the text.
- /// </summary>
- /// <param name="text">The text to search for.</param>
- /// <param name="page">The page of the results to return.</param>
- /// <returns>A list of groups matching the search criteria.</returns>
- public GroupSearchResults GroupsSearch(string text, int page)
- {
- return GroupsSearch(text, page, 0);
- }
-
- /// <summary>
- /// Search the list of groups on Flickr for the text.
- /// </summary>
- /// <param name="text">The text to search for.</param>
- /// <param name="page">The page of the results to return.</param>
- /// <param name="perPage">The number of groups to list per page.</param>
- /// <returns>A list of groups matching the search criteria.</returns>
- public GroupSearchResults GroupsSearch(string text, int page, int perPage)
- {
- Hashtable parameters = new Hashtable();
- parameters.Add("method", "flickr.groups.search");
- parameters.Add("api_key", _apiKey);
- parameters.Add("text", text);
- if( page > 0 ) parameters.Add("page", page.ToString());
- if( perPage > 0 ) parameters.Add("per_page", perPage.ToString());
-
- FlickrNet.Response response = GetResponseCache(parameters);
-
- if( response.Status == ResponseStatus.OK )
- {
- return new GroupSearchResults(response.AllElements[0]);
- }
- else
- {
- throw new FlickrApiException(response.Error);
- }
- }
-
- /// <summary>
- /// Returns a <see cref="GroupFullInfo"/> object containing details about a group.
- /// </summary>
- /// <param name="groupId">The id of the group to return.</param>
- /// <returns>The <see cref="GroupFullInfo"/> specified by the group id.</returns>
- public GroupFullInfo GroupsGetInfo(string groupId)
- {
- Hashtable parameters = new Hashtable();
- parameters.Add("method", "flickr.groups.getInfo");
- parameters.Add("api_key", _apiKey);
- parameters.Add("group_id", groupId);
- FlickrNet.Response response = GetResponseCache(parameters);
-
- if( response.Status == ResponseStatus.OK )
- {
- return new GroupFullInfo(response.AllElements[0]);
- }
- else
- {
- throw new FlickrApiException(response.Error);
- }
- }
- #endregion
-
- #region [ Group Pool ]
- /// <summary>
- /// Adds a photo to a pool you have permission to add photos to.
- /// </summary>
- /// <param name="photoId">The id of one of your photos to be added.</param>
- /// <param name="groupId">The id of a group you are a member of.</param>
- /// <returns>True on a successful addition.</returns>
- public bool GroupPoolAdd(string photoId, string groupId)
- {
- Hashtable parameters = new Hashtable();
- parameters.Add("method", "flickr.groups.pools.add");
- parameters.Add("photo_id", photoId);
- parameters.Add("group_id", groupId);
- FlickrNet.Response response = GetResponseCache(parameters);
-
- if( response.Status == ResponseStatus.OK )
- {
- return true;
- }
- else
- {
- throw new FlickrApiException(response.Error);
- }
- }
-
- /// <summary>
- /// Gets the context for a photo from within a group. This provides the
- /// id and thumbnail url for the next and previous photos in the group.
- /// </summary>
- /// <param name="photoId">The Photo ID for the photo you want the context for.</param>
- /// <param name="groupId">The group ID for the group you want the context to be relevant to.</param>
- /// <returns>The <see cref="Context"/> of the photo in the group.</returns>
- public Context GroupPoolGetContext(string photoId, string groupId)
- {
- Hashtable parameters = new Hashtable();
- parameters.Add("method", "flickr.groups.pools.getContext");
- parameters.Add("photo_id", photoId);
- parameters.Add("group_id", groupId);
- FlickrNet.Response response = GetResponseCache(parameters);
-
- if( response.Status == ResponseStatus.OK )
- {
- Context context = new Context();
- context.Count = response.ContextCount.Count;
- context.NextPhoto = response.ContextNextPhoto;
- context.PreviousPhoto = response.ContextPrevPhoto;
- return context;
- }
- else
- {
- throw new FlickrApiException(response.Error);
- }
- }
-
- /// <summary>
- /// Remove a picture from a group.
- /// </summary>
- /// <param name="photoId">The id of one of your pictures you wish to remove.</param>
- /// <param name="groupId">The id of the group to remove the picture from.</param>
- /// <returns>True if the photo is successfully removed.</returns>
- public bool GroupPoolRemove(string photoId, string groupId)
- {
- Hashtable parameters = new Hashtable();
- parameters.Add("method", "flickr.groups.pools.remove");
- parameters.Add("photo_id", photoId);
- parameters.Add("group_id", groupId);
- FlickrNet.Response response = GetResponseCache(parameters);
-
- if( response.Status == ResponseStatus.OK )
- {
- return true;
- }
- else
- {
- throw new FlickrApiException(response.Error);
- }
- }
-
- /// <summary>
- /// Gets a list of
- /// </summary>
- /// <returns></returns>
- public MemberGroupInfo[] GroupPoolGetGroups()
- {
- Hashtable parameters = new Hashtable();
- parameters.Add("method", "flickr.groups.pools.getGroups");
- FlickrNet.Response response = GetResponseCache(parameters);
-
- if( response.Status == ResponseStatus.OK )
- {
- return MemberGroupInfo.GetMemberGroupInfo(response.AllElements[0]);
- }
- else
- {
- throw new FlickrApiException(response.Error);
- }
- }
-
- /// <summary>
- /// Gets a list of photos for a given group.
- /// </summary>
- /// <param name="groupId">The group ID for the group.</param>
- /// <returns>A <see cref="Photos"/> object containing the list of photos.</returns>
- public Photos GroupPoolGetPhotos(string groupId)
- {
- return GroupPoolGetPhotos(groupId, null, null, PhotoSearchExtras.All, 0, 0);
- }
-
- /// <summary>
- /// Gets a list of photos for a given group.
- /// </summary>
- /// <param name="groupId">The group ID for the group.</param>
- /// <param name="tags">Space seperated list of tags that photos returned must have.</param>
- /// <returns>A <see cref="Photos"/> object containing the list of photos.</returns>
- public Photos GroupPoolGetPhotos(string groupId, string tags)
- {
- return GroupPoolGetPhotos(groupId, tags, null, PhotoSearchExtras.All, 0, 0);
- }
-
- /// <summary>
- /// Gets a list of photos for a given group.
- /// </summary>
- /// <param name="groupId">The group ID for the group.</param>
- /// <param name="perPage">The number of photos per page.</param>
- /// <param name="page">The page to return.</param>
- /// <returns>A <see cref="Photos"/> object containing the list of photos.</returns>
- public Photos GroupPoolGetPhotos(string groupId, int perPage, int page)
- {
- return GroupPoolGetPhotos(groupId, null, null, PhotoSearchExtras.All, perPage, page);
- }
-
- /// <summary>
- /// Gets a list of photos for a given group.
- /// </summary>
- /// <param name="groupId">The group ID for the group.</param>
- /// <param name="tags">Space seperated list of tags that photos returned must have.</param>
- /// <param name="perPage">The number of photos per page.</param>
- /// <param name="page">The page to return.</param>
- /// <returns>A <see cref="Photos"/> object containing the list of photos.</returns>
- public Photos GroupPoolGetPhotos(string groupId, string tags, int perPage, int page)
- {
- return GroupPoolGetPhotos(groupId, tags, null, PhotoSearchExtras.All, perPage, page);
- }
-
- /// <summary>
- /// Gets a list of photos for a given group.
- /// </summary>
- /// <param name="groupId">The group ID for the group.</param>
- /// <param name="tags">Space seperated list of tags that photos returned must have.
- /// Currently only supports 1 tag at a time.</param>
- /// <param name="userId">The group member to return photos for.</param>
- /// <param name="extras">The <see cref="PhotoSearchExtras"/> specifying which extras to return. All other overloads default to returning all extras.</param>
- /// <param name="perPage">The number of photos per page.</param>
- /// <param name="page">The page to return.</param>
- /// <returns>A <see cref="Photos"/> object containing the list of photos.</returns>
- public Photos GroupPoolGetPhotos(string groupId, string tags, string userId, PhotoSearchExtras extras, int perPage, int page)
- {
- Hashtable parameters = new Hashtable();
- parameters.Add("method", "flickr.groups.pools.getPhotos");
- parameters.Add("group_id", groupId);
- if( tags != null && tags.Length > 0 )parameters.Add("tags", tags);
- if( perPage > 0 ) parameters.Add("per_page", perPage.ToString());
- if( page > 0 ) parameters.Add("page", page.ToString());
- if( userId != null && userId.Length > 0 ) parameters.Add("user_id", userId);
- if( extras != PhotoSearchExtras.None ) parameters.Add("extras", Utils.ExtrasToString(extras));
-
- FlickrNet.Response response = GetResponseCache(parameters);
-
- if( response.Status == ResponseStatus.OK )
- {
- return response.Photos;
- }
- else
- {
- throw new FlickrApiException(response.Error);
- }
- }
- #endregion
-
- #region [ Interestingness ]
- /// <summary>
- /// Gets a list of photos from the most recent interstingness list.
- /// </summary>
- /// <param name="perPage">Number of photos per page.</param>
- /// <param name="page">The page number to return.</param>
- /// <param name="extras"><see cref="PhotoSearchExtras"/> enumeration.</param>
- /// <returns><see cref="Photos"/> instance containing list of photos.</returns>
- public Photos InterestingnessGetList(PhotoSearchExtras extras, int perPage, int page)
- {
- return InterestingnessGetList(DateTime.MinValue, extras, perPage, page);
- }
-
- /// <summary>
- /// Gets a list of photos from the interstingness list for the specified date.
- /// </summary>
- /// <param name="date">The date to return the interestingness list for.</param>
- /// <returns><see cref="Photos"/> instance containing list of photos.</returns>
- public Photos InterestingnessGetList(DateTime date)
- {
- return InterestingnessGetList(date, PhotoSearchExtras.All, 0, 0);
- }
-
- /// <summary>
- /// Gets a list of photos from the most recent interstingness list.
- /// </summary>
- /// <returns><see cref="Photos"/> instance containing list of photos.</returns>
- public Photos InterestingnessGetList()
- {
- return InterestingnessGetList(DateTime.MinValue, PhotoSearchExtras.All, 0, 0);
- }
-
- /// <summary>
- /// Gets a list of photos from the most recent interstingness list.
- /// </summary>
- /// <param name="date">The date to return the interestingness photos for.</param>
- /// <param name="extras">The extra parameters to return along with the search results.
- /// See <see cref="PhotoSearchOptions"/> for more details.</param>
- /// <param name="perPage">The number of results to return per page.</param>
- /// <param name="page">The page of the results to return.</param>
- /// <returns></returns>
- public Photos InterestingnessGetList(DateTime date, PhotoSearchExtras extras, int perPage, int page)
- {
- Hashtable parameters = new Hashtable();
- parameters.Add("method", "flickr.interestingness.getList");
-
- if( date > DateTime.MinValue ) parameters.Add("date", date.ToString("yyyy-MM-dd"));
- if( perPage > 0 ) parameters.Add("per_page", perPage.ToString());
- if( page > 0 ) parameters.Add("page", page.ToString());
- if( extras != PhotoSearchExtras.None )
- parameters.Add("extras", Utils.ExtrasToString(extras));
-
- FlickrNet.Response response = GetResponseCache(parameters);
-
- if( response.Status == ResponseStatus.OK )
- {
- return response.Photos;
- }
- else
- {
- throw new FlickrApiException(response.Error);
- }
- }
-
-
- #endregion
-
- #region [ Notes ]
- /// <summary>
- /// Add a note to a picture.
- /// </summary>
- /// <param name="photoId">The photo id to add the note to.</param>
- /// <param name="noteX">The X co-ordinate of the upper left corner of the note.</param>
- /// <param name="noteY">The Y co-ordinate of the upper left corner of the note.</param>
- /// <param name="noteWidth">The width of the note.</param>
- /// <param name="noteHeight">The height of the note.</param>
- /// <param name="noteText">The text in the note.</param>
- /// <returns></returns>
- public string NotesAdd(string photoId, int noteX, int noteY, int noteWidth, int noteHeight, string noteText)
- {
- Hashtable parameters = new Hashtable();
- parameters.Add("method", "flickr.photos.notes.add");
- parameters.Add("photo_id", photoId);
- parameters.Add("note_x", noteX.ToString());
- parameters.Add("note_y", noteY.ToString());
- parameters.Add("note_w", noteWidth.ToString());
- parameters.Add("note_h", noteHeight.ToString());
- parameters.Add("note_text", noteText);
-
- FlickrNet.Response response = GetResponseCache(parameters);
-
- if( response.Status == ResponseStatus.OK )
- {
- foreach(XmlElement element in response.AllElements)
- {
- return element.Attributes["id", ""].Value;
- }
- return string.Empty;
- }
- else
- {
- throw new FlickrApiException(response.Error);
- }
- }
-
- /// <summary>
- /// Edit and update a note.
- /// </summary>
- /// <param name="noteId">The ID of the note to update.</param>
- /// <param name="noteX">The X co-ordinate of the upper left corner of the note.</param>
- /// <param name="noteY">The Y co-ordinate of the upper left corner of the note.</param>
- /// <param name="noteWidth">The width of the note.</param>
- /// <param name="noteHeight">The height of the note.</param>
- /// <param name="noteText">The new text in the note.</param>
- public void NotesEdit(string noteId, int noteX, int noteY, int noteWidth, int noteHeight, string noteText)
- {
- Hashtable parameters = new Hashtable();
- parameters.Add("method", "flickr.photos.notes.edit");
- parameters.Add("note_id", noteId);
- parameters.Add("note_x", noteX.ToString());
- parameters.Add("note_y", noteY.ToString());
- parameters.Add("note_w", noteWidth.ToString());
- parameters.Add("note_h", noteHeight.ToString());
- parameters.Add("note_text", noteText);
-
- FlickrNet.Response response = GetResponseCache(parameters);
-
- if( response.Status == ResponseStatus.OK )
- {
- return;
- }
- else
- {
- throw new FlickrApiException(response.Error);
- }
- }
-
- /// <summary>
- /// Delete an existing note.
- /// </summary>
- /// <param name="noteId">The ID of the note.</param>
- public void NotesDelete(string noteId)
- {
- Hashtable parameters = new Hashtable();
- parameters.Add("method", "flickr.photos.notes.delete");
- parameters.Add("note_id", noteId);
-
- FlickrNet.Response response = GetResponseCache(parameters);
-
- if( response.Status == ResponseStatus.OK )
- {
- return;
- }
- else
- {
- throw new FlickrApiException(response.Error);
- }
- }
- #endregion
-
- #region [ People ]
- /// <summary>
- /// Used to fid a flickr users details by specifying their email address.
- /// </summary>
- /// <param name="emailAddress">The email address to search on.</param>
- /// <returns>The <see cref="FoundUser"/> object containing the matching details.</returns>
- /// <exception cref="FlickrException">A FlickrException is raised if the email address is not found.</exception>
- public FoundUser PeopleFindByEmail(string emailAddress)
- {
- Hashtable parameters = new Hashtable();
- parameters.Add("method", "flickr.people.findByEmail");
- parameters.Add("api_key", _apiKey);
- parameters.Add("find_email", emailAddress);
-
- FlickrNet.Response response = GetResponseCache(parameters);
-
- if( response.Status == ResponseStatus.OK )
- {
- return new FoundUser(response.AllElements[0]);
- }
- else
- {
- throw new FlickrApiException(response.Error);
- }
- }
-
- /// <summary>
- /// Returns a <see cref="FoundUser"/> object matching the screen name.
- /// </summary>
- /// <param name="username">The screen name or username of the user.</param>
- /// <returns>A <see cref="FoundUser"/> class containing the userId and username of the user.</returns>
- /// <exception cref="FlickrException">A FlickrException is raised if the email address is not found.</exception>
- public FoundUser PeopleFindByUsername(string username)
- {
- Hashtable parameters = new Hashtable();
- parameters.Add("method", "flickr.people.findByUsername");
- parameters.Add("api_key", _apiKey);
- parameters.Add("username", username);
-
- FlickrNet.Response response = GetResponseCache(parameters);
-
- if( response.Status == ResponseStatus.OK )
- {
- return new FoundUser(response.AllElements[0]);
- }
- else
- {
- throw new FlickrApiException(response.Error);
- }
- }
-
- /// <summary>
- /// Gets the <see cref="Person"/> object for the given user id.
- /// </summary>
- /// <param name="userId">The user id to find.</param>
- /// <returns>The <see cref="Person"/> object containing the users details.</returns>
- public Person PeopleGetInfo(string userId)
- {
- Hashtable parameters = new Hashtable();
- parameters.Add("method", "flickr.people.getInfo");
- parameters.Add("api_key", _apiKey);
- parameters.Add("user_id", userId);
-
- FlickrNet.Response response = GetResponseCache(parameters);
-
- if( response.Status == ResponseStatus.OK )
- {
- return Person.SerializePerson(response.AllElements[0]);
- }
- else
- {
- throw new FlickrApiException(response.Error);
- }
- }
-
- /// <summary>
- /// Gets the upload status of the authenticated user.
- /// </summary>
- /// <returns>The <see cref="UserStatus"/> object containing the users details.</returns>
- public UserStatus PeopleGetUploadStatus()
- {
- Hashtable parameters = new Hashtable();
- parameters.Add("method", "flickr.people.getUploadStatus");
-
- FlickrNet.Response response = GetResponseCache(parameters);
-
- if( response.Status == ResponseStatus.OK )
- {
- return new UserStatus(response.AllElements[0]);
- }
- else
- {
- throw new FlickrApiException(response.Error);
- }
- }
-
- /// <summary>
- /// Get a list of public groups for a user.
- /// </summary>
- /// <param name="userId">The user id to get groups for.</param>
- /// <returns>An array of <see cref="PublicGroupInfo"/> instances.</returns>
- public PublicGroupInfo[] PeopleGetPublicGroups(string userId)
- {
- Hashtable parameters = new Hashtable();
- parameters.Add("method", "flickr.people.getPublicGroups");
- parameters.Add("api_key", _apiKey);
- parameters.Add("user_id", userId);
-
- FlickrNet.Response response = GetResponseCache(parameters);
-
- if( response.Status == ResponseStatus.OK )
- {
- return PublicGroupInfo.GetPublicGroupInfo(response.AllElements[0]);
- }
- else
- {
- throw new FlickrApiException(response.Error);
- }
- }
-
- /// <summary>
- /// Gets a users public photos. Excludes private photos.
- /// </summary>
- /// <param name="userId">The user id of the user.</param>
- /// <returns>The collection of photos contained within a <see cref="Photo"/> object.</returns>
- public Photos PeopleGetPublicPhotos(string userId)
- {
- Hashtable parameters = new Hashtable();
- parameters.Add("method", "flickr.people.getPublicPhotos");
- parameters.Add("api_key", _apiKey);
- parameters.Add("user_id", userId);
-
- FlickrNet.Response response = GetResponseCache(parameters);
-
- if( response.Status == ResponseStatus.OK )
- {
- return response.Photos;
- }
- else
- {
- throw new FlickrApiException(response.Error);
- }
- }
- #endregion
-
- #region [ Photos ]
- /// <summary>
- /// Add a selection of tags to a photo.
- /// </summary>
- /// <param name="photoId">The photo id of the photo.</param>
- /// <param name="tags">An array of strings containing the tags.</param>
- /// <returns>True if the tags are added successfully.</returns>
- public void PhotosAddTags(string photoId, string[] tags)
- {
- string s = string.Join(",", tags);
- PhotosAddTags(photoId, s);
- }
-
- /// <summary>
- /// Add a selection of tags to a photo.
- /// </summary>
- /// <param name="photoId">The photo id of the photo.</param>
- /// <param name="tags">An string of comma delimited tags.</param>
- /// <returns>True if the tags are added successfully.</returns>
- public void PhotosAddTags(string photoId, string tags)
- {
- Hashtable parameters = new Hashtable();
- parameters.Add("method", "flickr.photos.addTags");
- parameters.Add("photo_id", photoId);
- parameters.Add("tags", tags);
-
- FlickrNet.Response response = GetResponseCache(parameters);
-
- if( response.Status == ResponseStatus.OK )
- {
- return;
- }
- else
- {
- throw new FlickrApiException(response.Error);
- }
- }
-
- /// <summary>
- /// Delete a photo from Flickr.
- /// </summary>
- /// <remarks>
- /// Requires Delete permissions. Also note, photos cannot be recovered once deleted.</remarks>
- /// <param name="photoId">The ID of the photo to delete.</param>
- public void PhotosDelete(string photoId)
- {
- Hashtable parameters = new Hashtable();
- parameters.Add("method", "flickr.photos.delete");
- parameters.Add("photo_id", photoId);
-
- FlickrNet.Response response = GetResponseCache(parameters);
-
- if( response.Status == ResponseStatus.OK )
- {
- return;
- }
- else
- {
- throw new FlickrApiException(response.Error);
- }
- }
-
- /// <summary>
- /// Get all the contexts (group, set and photostream 'next' and 'previous'
- /// pictures) for a photo.
- /// </summary>
- /// <param name="photoId">The photo id of the photo to get the contexts for.</param>
- /// <returns>An instance of the <see cref="AllContexts"/> class.</returns>
- public AllContexts PhotosGetAllContexts(string photoId)
- {
- Hashtable parameters = new Hashtable();
- parameters.Add("method", "flickr.photos.getAllContexts");
- parameters.Add("photo_id", photoId);
-
- FlickrNet.Response response = GetResponseCache(parameters);
-
- if( response.Status == ResponseStatus.OK )
- {
- AllContexts contexts = new AllContexts(response.AllElements);
- return contexts;
- }
- else
- {
- throw new FlickrApiException(response.Error);
- }
-
- }
-
- /// <summary>
- /// Gets the most recent 10 photos from your contacts.
- /// </summary>
- /// <returns>An instance of the <see cref="Photo"/> class containing the photos.</returns>
- public Photos PhotosGetContactsPhotos()
- {
- return PhotosGetContactsPhotos(0, false, false, false);
- }
-
- /// <summary>
- /// Gets the most recent photos from your contacts.
- /// </summary>
- /// <remarks>Returns the most recent photos from all your contact, excluding yourself.</remarks>
- /// <param name="count">The number of photos to return, from between 10 and 50.</param>
- /// <returns>An instance of the <see cref="Photo"/> class containing the photos.</returns>
- /// <exception cref="ArgumentOutOfRangeException">
- /// Throws a <see cref="ArgumentOutOfRangeException"/> exception if the cound
- /// is not between 10 and 50, or 0.</exception>
- public Photos PhotosGetContactsPhotos(long count)
- {
- return PhotosGetContactsPhotos(count, false, false, false);
- }
-
- /// <summary>
- /// Gets your contacts most recent photos.
- /// </summary>
- /// <param name="count">The number of photos to return, from between 10 and 50.</param>
- /// <param name="justFriends">If true only returns photos from contacts marked as
- /// 'friends'.</param>
- /// <param name="singlePhoto">If true only returns a single photo for each of your contacts.
- /// Ignores the count if this is true.</param>
- /// <param name="includeSelf">If true includes yourself in the group of people to
- /// return photos for.</param>
- /// <returns>An instance of the <see cref="Photo"/> class containing the photos.</returns>
- /// <exception cref="ArgumentOutOfRangeException">
- /// Throws a <see cref="ArgumentOutOfRangeException"/> exception if the cound
- /// is not between 10 and 50, or 0.</exception>
- public Photos PhotosGetContactsPhotos(long count, bool justFriends, bool singlePhoto, bool includeSelf)
- {
- if( count != 0 && (count < 10 || count > 50) && !singlePhoto )
- {
- throw new ArgumentOutOfRangeException("count", String.Format("Count must be between 10 and 50. ({0})", count));
- }
- Hashtable parameters = new Hashtable();
- parameters.Add("method", "flickr.photos.getContactsPhotos");
- if( count > 0 && !singlePhoto ) parameters.Add("count", count.ToString());
- if( justFriends ) parameters.Add("just_friends", "1");
- if( singlePhoto ) parameters.Add("single_photo", "1");
- if( includeSelf ) parameters.Add("include_self", "1");
-
- FlickrNet.Response response = GetResponseCache(parameters);
-
- if( response.Status == ResponseStatus.OK )
- {
- return response.Photos;
- }
- else
- {
- throw new FlickrApiException(response.Error);
- }
- }
-
- /// <summary>
- /// Gets the public photos for given users ID's contacts.
- /// </summary>
- /// <param name="userId">The user ID whose contacts you wish to get photos for.</param>
- /// <returns>A <see cref="Photos"/> object containing details of the photos returned.</returns>
- public Photos PhotosGetContactsPublicPhotos(string userId)
- {
- return PhotosGetContactsPublicPhotos(userId, 0, false, false, false, PhotoSearchExtras.All);
- }
-
- /// <summary>
- /// Gets the public photos for given users ID's contacts.
- /// </summary>
- /// <param name="userId">The user ID whose contacts you wish to get photos for.</param>
- /// <param name="extras">A list of extra details to return for each photo.</param>
- /// <returns>A <see cref="Photos"/> object containing details of the photos returned.</returns>
- public Photos PhotosGetContactsPublicPhotos(string userId, PhotoSearchExtras extras)
- {
- return PhotosGetContactsPublicPhotos(userId, 0, false, false, false, extras);
- }
-
- /// <summary>
- /// Gets the public photos for given users ID's contacts.
- /// </summary>
- /// <param name="userId">The user ID whose contacts you wish to get photos for.</param>
- /// <param name="count">The number of photos to return. Defaults to 10, maximum is 50.</param>
- /// <returns>A <see cref="Photos"/> object containing details of the photos returned.</returns>
- public Photos PhotosGetContactsPublicPhotos(string userId, long count)
- {
- return PhotosGetContactsPublicPhotos(userId, count, false, false, false, PhotoSearchExtras.All);
- }
-
- /// <summary>
- /// Gets the public photos for given users ID's contacts.
- /// </summary>
- /// <param name="userId">The user ID whose contacts you wish to get photos for.</param>
- /// <param name="count">The number of photos to return. Defaults to 10, maximum is 50.</param>
- /// <param name="extras">A list of extra details to return for each photo.</param>
- /// <returns>A <see cref="Photos"/> object containing details of the photos returned.</returns>
- public Photos PhotosGetContactsPublicPhotos(string userId, long count, PhotoSearchExtras extras)
- {
- return PhotosGetContactsPublicPhotos(userId, count, false, false, false, extras);
- }
-
- /// <summary>
- /// Gets the public photos for given users ID's contacts.
- /// </summary>
- /// <param name="userId">The user ID whose contacts you wish to get photos for.</param>
- /// <param name="count">The number of photos to return. Defaults to 10, maximum is 50.</param>
- /// <param name="justFriends">True to just return photos from friends and family (excluding regular contacts).</param>
- /// <param name="singlePhoto">True to return just a single photo for each contact.</param>
- /// <param name="includeSelf">True to include photos from the user ID specified as well.</param>
- /// <returns></returns>
- public Photos PhotosGetContactsPublicPhotos(string userId, long count, bool justFriends, bool singlePhoto, bool includeSelf)
- {
- return PhotosGetContactsPublicPhotos(userId, count, justFriends, singlePhoto, includeSelf, PhotoSearchExtras.All);
- }
-
- /// <summary>
- /// Gets the public photos for given users ID's contacts.
- /// </summary>
- /// <param name="userId">The user ID whose contacts you wish to get photos for.</param>
- /// <param name="count">The number of photos to return. Defaults to 10, maximum is 50.</param>
- /// <param name="justFriends">True to just return photos from friends and family (excluding regular contacts).</param>
- /// <param name="singlePhoto">True to return just a single photo for each contact.</param>
- /// <param name="includeSelf">True to include photos from the user ID specified as well.</param>
- /// <param name="extras">A list of extra details to return for each photo.</param>
- /// <returns></returns>
- public Photos PhotosGetContactsPublicPhotos(string userId, long count, bool justFriends, bool singlePhoto, bool includeSelf, PhotoSearchExtras extras)
- {
- Hashtable parameters = new Hashtable();
- parameters.Add("method", "flickr.photos.getContactsPublicPhotos");
- parameters.Add("api_key", _apiKey);
- parameters.Add("user_id", userId);
- if( count > 0 ) parameters.Add("count", count.ToString());
- if( justFriends ) parameters.Add("just_friends", "1");
- if( singlePhoto ) parameters.Add("single_photo", "1");
- if( includeSelf ) parameters.Add("include_self", "1");
- if( extras != PhotoSearchExtras.None ) parameters.Add("extras", Utils.ExtrasToString(extras));
-
- FlickrNet.Response response = GetResponseCache(parameters);
-
- if( response.Status == ResponseStatus.OK )
- {
- return response.Photos;
- }
- else
- {
- throw new FlickrApiException(response.Error);
- }
- }
-
- /// <summary>
- /// Gets the context of the photo in the users photostream.
- /// </summary>
- /// <param name="photoId">The ID of the photo to return the context for.</param>
- /// <returns></returns>
- public Context PhotosGetContext(string photoId)
- {
- Hashtable parameters = new Hashtable();
- parameters.Add("method", "flickr.photos.getContext");
- parameters.Add("photo_id", photoId);
-
- FlickrNet.Response response = GetResponseCache(parameters);
-
- if( response.Status == ResponseStatus.OK )
- {
- Context c = new Context();
- c.Count = response.ContextCount.Count;
- c.NextPhoto = response.ContextNextPhoto;
- c.PreviousPhoto = response.ContextPrevPhoto;
-
- return c;
- }
- else
- {
- throw new FlickrApiException(response.Error);
- }
- }
-
- /// <summary>
- /// Returns count of photos between each pair of dates in the list.
- /// </summary>
- /// <remarks>If you pass in DateA, DateB and DateC it returns
- /// a list of the number of photos between DateA and DateB,
- /// followed by the number between DateB and DateC.
- /// More parameters means more sets.</remarks>
- /// <param name="dates">Array of <see cref="DateTime"/> objects.</param>
- /// <returns><see cref="PhotoCounts"/> class instance.</returns>
- public PhotoCounts PhotosGetCounts(DateTime[] dates)
- {
- return PhotosGetCounts(dates, false);
- }
-
- /// <summary>
- /// Returns count of photos between each pair of dates in the list.
- /// </summary>
- /// <remarks>If you pass in DateA, DateB and DateC it returns
- /// a list of the number of photos between DateA and DateB,
- /// followed by the number between DateB and DateC.
- /// More parameters means more sets.</remarks>
- /// <param name="dates">Array of <see cref="DateTime"/> objects.</param>
- /// <param name="taken">Boolean parameter to specify if the dates are the taken date, or uploaded date.</param>
- /// <returns><see cref="PhotoCounts"/> class instance.</returns>
- public PhotoCounts PhotosGetCounts(DateTime[] dates, bool taken)
- {
- StringBuilder s = new StringBuilder(dates.Length * 20);
- foreach(DateTime d in dates)
- {
- s.Append(Utils.DateToUnixTimestamp(d));
- s.Append(",");
- }
- if( s.Length > 0 ) s.Remove(s.Length-2,1);
-
- if( taken )
- return PhotosGetCounts(null, s.ToString());
- else
- return PhotosGetCounts(s.ToString(), null);
- }
- /// <summary>
- /// Returns count of photos between each pair of dates in the list.
- /// </summary>
- /// <remarks>If you pass in DateA, DateB and DateC it returns
- /// a list of the number of photos between DateA and DateB,
- /// followed by the number between DateB and DateC.
- /// More parameters means more sets.</remarks>
- /// <param name="dates">Comma-delimited list of dates in unix timestamp format. Optional.</param>
- /// <returns><see cref="PhotoCounts"/> class instance.</returns>
- public PhotoCounts PhotosGetCounts(string dates)
- {
- return PhotosGetCounts(dates, null);
- }
-
- /// <summary>
- /// Returns count of photos between each pair of dates in the list.
- /// </summary>
- /// <remarks>If you pass in DateA, DateB and DateC it returns
- /// a list of the number of photos between DateA and DateB,
- /// followed by the number between DateB and DateC.
- /// More parameters means more sets.</remarks>
- /// <param name="dates">Comma-delimited list of dates in unix timestamp format. Optional.</param>
- /// <param name="taken_dates">Comma-delimited list of dates in unix timestamp format. Optional.</param>
- /// <returns><see cref="PhotoCounts"/> class instance.</returns>
- public PhotoCounts PhotosGetCounts(string dates, string taken_dates)
- {
- Hashtable parameters = new Hashtable();
- parameters.Add("method", "flickr.photos.getContactsPhotos");
- if( dates != null && dates.Length > 0 ) parameters.Add("dates", dates);
- if( taken_dates != null && taken_dates.Length > 0 ) parameters.Add("taken_dates", taken_dates);
-
- FlickrNet.Response response = GetResponseCache(parameters);
-
- if( response.Status == ResponseStatus.OK )
- {
- return response.PhotoCounts;
- }
- else
- {
- throw new FlickrApiException(response.Error);
- }
- }
-
- /// <summary>
- /// Gets the EXIF data for a given Photo ID.
- /// </summary>
- /// <param name="photoId">The Photo ID of the photo to return the EXIF data for.</param>
- /// <returns>An instance of the <see cref="ExifPhoto"/> class containing the EXIF data.</returns>
- public ExifPhoto PhotosGetExif(string photoId)
- {
- return PhotosGetExif(photoId, null);
- }
-
- /// <summary>
- /// Gets the EXIF data for a given Photo ID.
- /// </summary>
- /// <param name="photoId">The Photo ID of the photo to return the EXIF data for.</param>
- /// <param name="secret">The secret of the photo. If the secret is specified then
- /// authentication checks are bypassed.</param>
- /// <returns>An instance of the <see cref="ExifPhoto"/> class containing the EXIF data.</returns>
- public ExifPhoto PhotosGetExif(string photoId, string secret)
- {
- Hashtable parameters = new Hashtable();
- parameters.Add("method", "flickr.photos.getExif");
- parameters.Add("photo_id", photoId);
- if( secret != null ) parameters.Add("secret", secret);
-
- FlickrNet.Response response = GetResponseCache(parameters);
-
- if( response.Status == ResponseStatus.OK )
- {
- ExifPhoto e = new ExifPhoto(response.PhotoInfo.PhotoId,
- response.PhotoInfo.Secret,
- response.PhotoInfo.Server,
- response.PhotoInfo.ExifTagCollection);
-
- return e;
- }
- else
- {
- throw new FlickrApiException(response.Error);
- }
- }
-
- /// <summary>
- /// Get information about a photo. The calling user must have permission to view the photo.
- /// </summary>
- /// <param name="photoId">The id of the photo to fetch information for.</param>
- /// <returns>A <see cref="PhotoInfo"/> class detailing the properties of the photo.</returns>
- public PhotoInfo PhotosGetInfo(string photoId)
- {
- return PhotosGetInfo(photoId, null);
- }
-
- /// <summary>
- /// Get information about a photo. The calling user must have permission to view the photo.
- /// </summary>
- /// <param name="photoId">The id of the photo to fetch information for.</param>
- /// <param name="secret">The secret for the photo. If the correct secret is passed then permissions checking is skipped. This enables the 'sharing' of individual photos by passing around the id and secret.</param>
- /// <returns>A <see cref="PhotoInfo"/> class detailing the properties of the photo.</returns>
- public PhotoInfo PhotosGetInfo(string photoId, string secret)
- {
- Hashtable parameters = new Hashtable();
- parameters.Add("method", "flickr.photos.getInfo");
- parameters.Add("photo_id", photoId);
- if( secret != null ) parameters.Add("secret", secret);
-
- FlickrNet.Response response = GetResponseCache(parameters);
-
- if( response.Status == ResponseStatus.OK )
- {
- return response.PhotoInfo;
- }
- else
- {
- throw new FlickrApiException(response.Error);
- }
- }
-
- /// <summary>
- /// Get permissions for a photo.
- /// </summary>
- /// <param name="photoId">The id of the photo to get permissions for.</param>
- /// <returns>An instance of the <see cref="PhotoPermissions"/> class containing the permissions of the specified photo.</returns>
- public PhotoPermissions PhotosGetPerms(string photoId)
- {
- Hashtable parameters = new Hashtable();
- parameters.Add("method", "flickr.photos.getPerms");
- parameters.Add("photo_id", photoId);
-
- FlickrNet.Response response = GetResponseCache(parameters);
-
- if( response.Status == ResponseStatus.OK )
- {
- return new PhotoPermissions(response.AllElements[0]);
- }
- else
- {
- throw new FlickrApiException(response.Error);
- }
- }
-
- /// <summary>
- /// Returns a list of the latest public photos uploaded to flickr.
- /// </summary>
- /// <returns>A <see cref="Photos"/> class containing the list of photos.</returns>
- public Photos PhotosGetRecent()
- {
- return PhotosGetRecent(0, 0, PhotoSearchExtras.All);
- }
-
- /// <summary>
- /// Returns a list of the latest public photos uploaded to flickr.
- /// </summary>
- /// <param name="extras">A comma-delimited list of extra information to fetch for each returned record.</param>
- /// <returns>A <see cref="Photos"/> class containing the list of photos.</returns>
- public Photos PhotosGetRecent(PhotoSearchExtras extras)
- {
- return PhotosGetRecent(0, 0, extras);
- }
-
- /// <summary>
- /// Returns a list of the latest public photos uploaded to flickr.
- /// </summary>
- /// <param name="page">The page of results to return. If this argument is omitted, it defaults to 1.</param>
- /// <param name="perPage">Number of photos to return per page. If this argument is omitted, it defaults to 100. The maximum allowed value is 500.</param>
- /// <returns>A <see cref="Photos"/> class containing the list of photos.</returns>
- public Photos PhotosGetRecent(long perPage, long page)
- {
- return PhotosGetRecent(perPage, page, PhotoSearchExtras.All);
- }
-
- /// <summary>
- /// Returns a list of the latest public photos uploaded to flickr.
- /// </summary>
- /// <param name="extras">A comma-delimited list of extra information to fetch for each returned record.</param>
- /// <param name="page">The page of results to return. If this argument is omitted, it defaults to 1.</param>
- /// <param name="perPage">Number of photos to return per page. If this argument is omitted, it defaults to 100. The maximum allowed value is 500.</param>
- /// <returns>A <see cref="Photos"/> class containing the list of photos.</returns>
- public Photos PhotosGetRecent(long perPage, long page, PhotoSearchExtras extras)
- {
- Hashtable parameters = new Hashtable();
- parameters.Add("method", "flickr.photos.getRecent");
- parameters.Add("api_key", _apiKey);
- if( perPage > 0 ) parameters.Add("per_page", perPage.ToString());
- if( page > 0 ) parameters.Add("page", page.ToString());
- if( extras != PhotoSearchExtras.None ) parameters.Add("extras", Utils.ExtrasToString(extras));
-
- FlickrNet.Response response = GetResponseCache(parameters);
-
- if( response.Status == ResponseStatus.OK )
- {
- return response.Photos;
- }
- else
- {
- throw new FlickrApiException(response.Error);
- }
- }
-
- /// <summary>
- /// Returns the available sizes for a photo. The calling user must have permission to view the photo.
- /// </summary>
- /// <param name="photoId">The id of the photo to fetch size information for.</param>
- /// <returns>A <see cref="Sizes"/> class whose property <see cref="Sizes.SizeCollection"/> is an array of <see cref="Size"/> objects.</returns>
- public Sizes PhotosGetSizes(string photoId)
- {
- Hashtable parameters = new Hashtable();
- parameters.Add("method", "flickr.photos.getSizes");
- parameters.Add("photo_id", photoId);
-
- FlickrNet.Response response = GetResponseCache(parameters);
-
- if( response.Status == ResponseStatus.OK )
- {
- return response.Sizes;
- }
- else
- {
- throw new FlickrApiException(response.Error);
- }
- }
-
- /// <summary>
- /// Returns a list of your photos with no tags.
- /// </summary>
- /// <returns>A <see cref="Photos"/> class containing the list of photos.</returns>
- public Photos PhotosGetUntagged()
- {
- return PhotosGetUntagged(0, 0, PhotoSearchExtras.All);
- }
-
- /// <summary>
- /// Returns a list of your photos with no tags.
- /// </summary>
- /// <param name="extras">A comma-delimited list of extra information to fetch for each returned record.</param>
- /// <returns>A <see cref="Photos"/> class containing the list of photos.</returns>
- public Photos PhotosGetUntagged(PhotoSearchExtras extras)
- {
- return PhotosGetUntagged(0, 0, extras);
- }
-
- /// <summary>
- /// Returns a list of your photos with no tags.
- /// </summary>
- /// <param name="page">The page of results to return. If this argument is omitted, it defaults to 1.</param>
- /// <param name="perPage">Number of photos to return per page. If this argument is omitted, it defaults to 100. The maximum allowed value is 500.</param>
- /// <returns>A <see cref="Photos"/> class containing the list of photos.</returns>
- public Photos PhotosGetUntagged(int perPage, int page)
- {
- return PhotosGetUntagged(perPage, page, PhotoSearchExtras.All);
- }
-
- /// <summary>
- /// Returns a list of your photos with no tags.
- /// </summary>
- /// <param name="extras">A comma-delimited list of extra information to fetch for each returned record.</param>
- /// <param name="page">The page of results to return. If this argument is omitted, it defaults to 1.</param>
- /// <param name="perPage">Number of photos to return per page. If this argument is omitted, it defaults to 100. The maximum allowed value is 500.</param>
- /// <returns>A <see cref="Photos"/> class containing the list of photos.</returns>
- public Photos PhotosGetUntagged(int perPage, int page, PhotoSearchExtras extras)
- {
- Hashtable parameters = new Hashtable();
- parameters.Add("method", "flickr.photos.getUntagged");
- if( perPage > 0 ) parameters.Add("per_page", perPage.ToString());
- if( page > 0 ) parameters.Add("page", page.ToString());
- if( extras != PhotoSearchExtras.None ) parameters.Add("extras", Utils.ExtrasToString(extras));
-
- FlickrNet.Response response = GetResponseCache(parameters);
-
- if( response.Status == ResponseStatus.OK )
- {
- return response.Photos;
- }
- else
- {
- throw new FlickrApiException(response.Error);
- }
- }
-
- /// <summary>
- /// Gets a list of photos not in sets. Defaults to include all extra fields.
- /// </summary>
- /// <returns><see cref="Photos"/> instance containing list of photos.</returns>
- public Photos PhotosGetNotInSet()
- {
- return PhotosGetNotInSet(new PartialSearchOptions());
- }
-
- /// <summary>
- /// Gets a specific page of the list of photos which are not in sets.
- /// Defaults to include all extra fields.
- /// </summary>
- /// <param name="page">The page number to return.</param>
- /// <returns><see cref="Photos"/> instance containing list of photos.</returns>
- public Photos PhotosGetNotInSet(int page)
- {
- return PhotosGetNotInSet(0, page, PhotoSearchExtras.None);
- }
-
- /// <summary>
- /// Gets a specific page of the list of photos which are not in sets.
- /// Defaults to include all extra fields.
- /// </summary>
- /// <param name="perPage">Number of photos per page.</param>
- /// <param name="page">The page number to return.</param>
- /// <returns><see cref="Photos"/> instance containing list of photos.</returns>
- public Photos PhotosGetNotInSet(int perPage, int page)
- {
- return PhotosGetNotInSet(perPage, page, PhotoSearchExtras.None);
- }
-
- /// <summary>
- /// Gets a list of a users photos which are not in a set.
- /// </summary>
- /// <param name="perPage">Number of photos per page.</param>
- /// <param name="page">The page number to return.</param>
- /// <param name="extras"><see cref="PhotoSearchExtras"/> enumeration.</param>
- /// <returns><see cref="Photos"/> instance containing list of photos.</returns>
- public Photos PhotosGetNotInSet(int perPage, int page, PhotoSearchExtras extras)
- {
- PartialSearchOptions options = new PartialSearchOptions();
- options.PerPage = perPage;
- options.Page = page;
- options.Extras = extras;
-
- return PhotosGetNotInSet(options);
- }
-
- /// <summary>
- /// Gets a list of the authenticated users photos which are not in a set.
- /// </summary>
- /// <param name="options">A selection of options to filter/sort by.</param>
- /// <returns>A collection of photos in the <see cref="Photos"/> class.</returns>
- public Photos PhotosGetNotInSet(PartialSearchOptions options)
- {
- Hashtable parameters = new Hashtable();
- parameters.Add("method", "flickr.photos.getNotInSet");
- Utils.PartialOptionsIntoArray(options, parameters);
-
- FlickrNet.Response response = GetResponseCache(parameters);
-
- if( response.Status == ResponseStatus.OK )
- {
- return response.Photos;
- }
- else
- {
- throw new FlickrApiException(response.Error);
- }
- }
-
- /// <summary>
- /// Gets a list of all current licenses.
- /// </summary>
- /// <returns><see cref="Licenses"/> instance.</returns>
- public Licenses PhotosLicensesGetInfo()
- {
- Hashtable parameters = new Hashtable();
- parameters.Add("method", "flickr.photos.licenses.getInfo");
- parameters.Add("api_key", _apiKey);
-
- FlickrNet.Response response = GetResponseCache(parameters);
-
- if( response.Status == ResponseStatus.OK )
- {
- return response.Licenses;
- }
- else
- {
- throw new FlickrApiException(response.Error);
- }
- }
-
- /// <summary>
- /// Remove an existing tag.
- /// </summary>
- /// <param name="tagId">The id of the tag, as returned by <see cref="Flickr.PhotosGetInfo(string)"/> or similar method.</param>
- /// <returns>True if the tag was removed.</returns>
- public bool PhotosRemoveTag(string tagId)
- {
- Hashtable parameters = new Hashtable();
- parameters.Add("method", "flickr.photos.removeTag");
- parameters.Add("tag_id", tagId);
-
- FlickrNet.Response response = GetResponseCache(parameters);
-
- if( response.Status == ResponseStatus.OK )
- {
- return true;
- }
- else
- {
- throw new FlickrApiException(response.Error);
- }
- }
-
- /// <summary>
- /// Search for photos containing text, rather than tags.
- /// </summary>
- /// <param name="userId">The user whose photos you wish to search for.</param>
- /// <param name="text">The text you want to search for in titles and descriptions.</param>
- /// <returns>A <see cref="Photos"/> instance.</returns>
- public Photos PhotosSearchText(string userId, string text)
- {
- return PhotosSearch(userId, "", 0, text, DateTime.MinValue, DateTime.MinValue, 0, 0, 0, PhotoSearchExtras.All);
- }
-
- /// <summary>
- /// Search for photos containing text, rather than tags.
- /// </summary>
- /// <param name="userId">The user whose photos you wish to search for.</param>
- /// <param name="text">The text you want to search for in titles and descriptions.</param>
- /// <param name="extras">Optional extras to return.</param>
- /// <returns>A <see cref="Photos"/> instance.</returns>
- public Photos PhotosSearchText(string userId, string text, PhotoSearchExtras extras)
- {
- return PhotosSearch(userId, "", 0, text, DateTime.MinValue, DateTime.MinValue, 0, 0, 0, extras);
- }
-
- /// <summary>
- /// Search for photos containing text, rather than tags.
- /// </summary>
- /// <param name="userId">The user whose photos you wish to search for.</param>
- /// <param name="text">The text you want to search for in titles and descriptions.</param>
- /// <param name="license">The license type to return.</param>
- /// <returns>A <see cref="Photos"/> instance.</returns>
- public Photos PhotosSearchText(string userId, string text, int license)
- {
- return PhotosSearch(userId, "", 0, text, DateTime.MinValue, DateTime.MinValue, license, 0, 0, PhotoSearchExtras.All);
- }
-
- /// <summary>
- /// Search for photos containing text, rather than tags.
- /// </summary>
- /// <param name="userId">The user whose photos you wish to search for.</param>
- /// <param name="text">The text you want to search for in titles and descriptions.</param>
- /// <param name="license">The license type to return.</param>
- /// <param name="extras">Optional extras to return.</param>
- /// <returns>A <see cref="Photos"/> instance.</returns>
- public Photos PhotosSearchText(string userId, string text, int license, PhotoSearchExtras extras)
- {
- return PhotosSearch(userId, "", 0, text, DateTime.MinValue, DateTime.MinValue, license, 0, 0, extras);
- }
-
- /// <summary>
- /// Search for photos containing text, rather than tags.
- /// </summary>
- /// <param name="text">The text you want to search for in titles and descriptions.</param>
- /// <param name="extras">Optional extras to return.</param>
- /// <returns>A <see cref="Photos"/> instance.</returns>
- public Photos PhotosSearchText(string text, PhotoSearchExtras extras)
- {
- return PhotosSearch(null, "", 0, text, DateTime.MinValue, DateTime.MinValue, 0, 0, 0, extras);
- }
-
- /// <summary>
- /// Search for photos containing text, rather than tags.
- /// </summary>
- /// <param name="text">The text you want to search for in titles and descriptions.</param>
- /// <returns>A <see cref="Photos"/> instance.</returns>
- public Photos PhotosSearchText(string text)
- {
- return PhotosSearch(null, "", 0, text, DateTime.MinValue, DateTime.MinValue, 0, 0, 0, PhotoSearchExtras.All);
- }
-
- /// <summary>
- /// Search for photos containing text, rather than tags.
- /// </summary>
- /// <param name="text">The text you want to search for in titles and descriptions.</param>
- /// <param name="license">The license type to return.</param>
- /// <returns>A <see cref="Photos"/> instance.</returns>
- public Photos PhotosSearchText(string text, int license)
- {
- return PhotosSearch(null, "", 0, text, DateTime.MinValue, DateTime.MinValue, license, 0, 0, PhotoSearchExtras.All);
- }
-
- /// <summary>
- /// Search for photos containing text, rather than tags.
- /// </summary>
- /// <param name="text">The text you want to search for in titles and descriptions.</param>
- /// <param name="license">The license type to return.</param>
- /// <param name="extras">Optional extras to return.</param>
- /// <returns>A <see cref="Photos"/> instance.</returns>
- public Photos PhotosSearchText(string text, int license, PhotoSearchExtras extras)
- {
- return PhotosSearch(null, "", 0, text, DateTime.MinValue, DateTime.MinValue, license, 0, 0, extras);
- }
-
- /// <summary>
- /// Search for photos containing an array of tags.
- /// </summary>
- /// <param name="tags">An array of tags to search for.</param>
- /// <param name="extras">Optional extras to return.</param>
- /// <returns>A <see cref="Photos"/> instance.</returns>
- public Photos PhotosSearch(string[] tags, PhotoSearchExtras extras)
- {
- return PhotosSearch(null, tags, 0, "", DateTime.MinValue, DateTime.MinValue, 0, 0, 0, extras);
- }
-
- /// <summary>
- /// Search for photos containing an array of tags.
- /// </summary>
- /// <param name="tags">An array of tags to search for.</param>
- /// <returns>A <see cref="Photos"/> instance.</returns>
- public Photos PhotosSearch(string[] tags)
- {
- return PhotosSearch(null, tags, 0, "", DateTime.MinValue, DateTime.MinValue, 0, 0, 0, PhotoSearchExtras.All);
- }
-
- /// <summary>
- /// Search for photos containing an array of tags.
- /// </summary>
- /// <param name="tags">An array of tags to search for.</param>
- /// <param name="license">The license type to return.</param>
- /// <param name="extras">Optional extras to return.</param>
- /// <returns>A <see cref="Photos"/> instance.</returns>
- public Photos PhotosSearch(string[] tags, int license, PhotoSearchExtras extras)
- {
- return PhotosSearch(null, tags, 0, "", DateTime.MinValue, DateTime.MinValue, license, 0, 0, extras);
- }
-
- /// <summary>
- /// Search for photos containing an array of tags.
- /// </summary>
- /// <param name="tags">An array of tags to search for.</param>
- /// <param name="license">The license type to return.</param>
- /// <returns>A <see cref="Photos"/> instance.</returns>
- public Photos PhotosSearch(string[] tags, int license)
- {
- return PhotosSearch(null, tags, 0, "", DateTime.MinValue, DateTime.MinValue, license, 0, 0, PhotoSearchExtras.All);
- }
-
- /// <summary>
- /// Search for photos.
- /// </summary>
- /// <param name="tags">An array of tags to search for.</param>
- /// <param name="tagMode">Match all tags, or any tag.</param>
- /// <param name="text">Text to search for in photo title or description.</param>
- /// <param name="perPage">Number of photos to return per page.</param>
- /// <param name="page">The page number to return.</param>
- /// <returns>A <see cref="Photos"/> instance.</returns>
- public Photos PhotosSearch(string[] tags, TagMode tagMode, string text, int perPage, int page)
- {
- return PhotosSearch(null, tags, tagMode, text, DateTime.MinValue, DateTime.MinValue, 0, perPage, page, PhotoSearchExtras.All);
- }
-
- /// <summary>
- /// Search for photos.
- /// </summary>
- /// <param name="tags">An array of tags to search for.</param>
- /// <param name="tagMode">Match all tags, or any tag.</param>
- /// <param name="text">Text to search for in photo title or description.</param>
- /// <param name="perPage">Number of photos to return per page.</param>
- /// <param name="page">The page number to return.</param>
- /// <param name="extras">Optional extras to return.</param>
- /// <returns>A <see cref="Photos"/> instance.</returns>
- public Photos PhotosSearch(string[] tags, TagMode tagMode, string text, int perPage, int page, PhotoSearchExtras extras)
- {
- return PhotosSearch(null, tags, tagMode, text, DateTime.MinValue, DateTime.MinValue, 0, perPage, page, extras);
- }
-
- /// <summary>
- /// Search for photos.
- /// </summary>
- /// <param name="tags">An array of tags to search for.</param>
- /// <param name="tagMode">Match all tags, or any tag.</param>
- /// <param name="text">Text to search for in photo title or description.</param>
- /// <returns>A <see cref="Photos"/> instance.</returns>
- public Photos PhotosSearch(string[] tags, TagMode tagMode, string text)
- {
- return PhotosSearch(null, tags, tagMode, text, DateTime.MinValue, DateTime.MinValue, 0, 0, 0, PhotoSearchExtras.All);
- }
-
- /// <summary>
- /// Search for photos.
- /// </summary>
- /// <param name="tags">An array of tags to search for.</param>
- /// <param name="tagMode">Match all tags, or any tag.</param>
- /// <param name="text">Text to search for in photo title or description.</param>
- /// <param name="extras">Optional extras to return.</param>
- /// <returns>A <see cref="Photos"/> instance.</returns>
- public Photos PhotosSearch(string[] tags, TagMode tagMode, string text, PhotoSearchExtras extras)
- {
- return PhotosSearch(null, tags, tagMode, text, DateTime.MinValue, DateTime.MinValue, 0, 0, 0, extras);
- }
-
- /// <summary>
- /// Search for photos.
- /// </summary>
- /// <param name="userId">The ID of the user to search the photos of.</param>
- /// <param name="tags">An array of tags to search for.</param>
- /// <returns>A <see cref="Photos"/> instance.</returns>
- public Photos PhotosSearch(string userId, string[] tags)
- {
- return PhotosSearch(userId, tags, 0, "", DateTime.MinValue, DateTime.MinValue, 0, 0, 0, PhotoSearchExtras.All);
- }
-
- /// <summary>
- /// Search for photos.
- /// </summary>
- /// <param name="userId">The ID of the user to search the photos of.</param>
- /// <param name="tags">An array of tags to search for.</param>
- /// <param name="extras">Optional extras to return.</param>
- /// <returns>A <see cref="Photos"/> instance.</returns>
- public Photos PhotosSearch(string userId, string[] tags, PhotoSearchExtras extras)
- {
- return PhotosSearch(userId, tags, 0, "", DateTime.MinValue, DateTime.MinValue, 0, 0, 0, extras);
- }
-
- /// <summary>
- /// Search for photos.
- /// </summary>
- /// <param name="userId">The ID of the user to search the photos of.</param>
- /// <param name="tags">An array of tags to search for.</param>
- /// <param name="license">The license type to return.</param>
- /// <returns>A <see cref="Photos"/> instance.</returns>
- public Photos PhotosSearch(string userId, string[] tags, int license)
- {
- return PhotosSearch(userId, tags, 0, "", DateTime.MinValue, DateTime.MinValue, license, 0, 0, PhotoSearchExtras.All);
- }
-
- /// <summary>
- /// Search for photos.
- /// </summary>
- /// <param name="userId">The ID of the user to search the photos of.</param>
- /// <param name="tags">An array of tags to search for.</param>
- /// <param name="license">The license type to return.</param>
- /// <param name="extras">Optional extras to return.</param>
- /// <returns>A <see cref="Photos"/> instance.</returns>
- public Photos PhotosSearch(string userId, string[] tags, int license, PhotoSearchExtras extras)
- {
- return PhotosSearch(userId, tags, 0, "", DateTime.MinValue, DateTime.MinValue, license, 0, 0, extras);
- }
-
- /// <summary>
- /// Search for photos.
- /// </summary>
- /// <param name="userId">The ID of the user to search the photos of.</param>
- /// <param name="tags">An array of tags to search for.</param>
- /// <param name="tagMode">Match all tags, or any tag.</param>
- /// <param name="text">Text to search for in photo title or description.</param>
- /// <param name="perPage">Number of photos to return per page.</param>
- /// <param name="page">The page number to return.</param>
- /// <returns>A <see cref="Photos"/> instance.</returns>
- public Photos PhotosSearch(string userId, string[] tags, TagMode tagMode, string text, int perPage, int page)
- {
- return PhotosSearch(userId, tags, tagMode, text, DateTime.MinValue, DateTime.MinValue, 0, perPage, page, PhotoSearchExtras.All);
- }
-
- /// <summary>
- /// Search for photos.
- /// </summary>
- /// <param name="userId">The ID of the user to search the photos of.</param>
- /// <param name="tags">An array of tags to search for.</param>
- /// <param name="tagMode">Match all tags, or any tag.</param>
- /// <param name="text">Text to search for in photo title or description.</param>
- /// <param name="perPage">Number of photos to return per page.</param>
- /// <param name="page">The page number to return.</param>
- /// <param name="extras">Optional extras to return.</param>
- /// <returns>A <see cref="Photos"/> instance.</returns>
- public Photos PhotosSearch(string userId, string[] tags, TagMode tagMode, string text, int perPage, int page, PhotoSearchExtras extras)
- {
- return PhotosSearch(userId, tags, tagMode, text, DateTime.MinValue, DateTime.MinValue, 0, perPage, page, extras);
- }
-
- /// <summary>
- /// Search for photos.
- /// </summary>
- /// <param name="userId">The ID of the user to search the photos of.</param>
- /// <param name="tags">An array of tags to search for.</param>
- /// <param name="tagMode">Match all tags, or any tag.</param>
- /// <param name="text">Text to search for in photo title or description.</param>
- /// <returns>A <see cref="Photos"/> instance.</returns>
- public Photos PhotosSearch(string userId, string[] tags, TagMode tagMode, string text)
- {
- return PhotosSearch(userId, tags, tagMode, text, DateTime.MinValue, DateTime.MinValue, 0, 0, 0, PhotoSearchExtras.All);
- }
-
- /// <summary>
- /// Search for photos.
- /// </summary>
- /// <param name="userId">The ID of the user to search the photos of.</param>
- /// <param name="tags">An array of tags to search for.</param>
- /// <param name="tagMode">Match all tags, or any tag.</param>
- /// <param name="text">Text to search for in photo title or description.</param>
- /// <param name="extras">Optional extras to return.</param>
- /// <returns>A <see cref="Photos"/> instance.</returns>
- public Photos PhotosSearch(string userId, string[] tags, TagMode tagMode, string text, PhotoSearchExtras extras)
- {
- return PhotosSearch(userId, tags, tagMode, text, DateTime.MinValue, DateTime.MinValue, 0, 0, 0, extras);
- }
-
- /// <summary>
- /// Search for photos.
- /// </summary>
- /// <param name="userId">The ID of the user to search the photos of.</param>
- /// <param name="tags">An array of tags to search for.</param>
- /// <param name="tagMode">Match all tags, or any tag.</param>
- /// <param name="text">Text to search for in photo title or description.</param>
- /// <param name="minUploadDate">The minimum upload date.</param>
- /// <param name="maxUploadDate">The maxmimum upload date.</param>
- /// <param name="license">The license type to return.</param>
- /// <param name="perPage">Number of photos to return per page.</param>
- /// <param name="page">The page number to return.</param>
- /// <param name="extras">Optional extras to return.</param>
- /// <returns>A <see cref="Photos"/> instance.</returns>
- public Photos PhotosSearch(string userId, string[] tags, TagMode tagMode, string text, DateTime minUploadDate, DateTime maxUploadDate, int license, int perPage, int page, PhotoSearchExtras extras)
- {
- return PhotosSearch(userId, String.Join(",", tags), tagMode, text, minUploadDate, maxUploadDate, license, perPage, page, extras);
- }
-
- /// <summary>
- /// Search for photos.
- /// </summary>
- /// <param name="userId">The ID of the user to search the photos of.</param>
- /// <param name="tags">An array of tags to search for.</param>
- /// <param name="tagMode">Match all tags, or any tag.</param>
- /// <param name="text">Text to search for in photo title or description.</param>
- /// <param name="minUploadDate">The minimum upload date.</param>
- /// <param name="maxUploadDate">The maxmimum upload date.</param>
- /// <param name="license">The license type to return.</param>
- /// <param name="perPage">Number of photos to return per page.</param>
- /// <param name="page">The page number to return.</param>
- /// <returns>A <see cref="Photos"/> instance.</returns>
- public Photos PhotosSearch(string userId, string[] tags, TagMode tagMode, string text, DateTime minUploadDate, DateTime maxUploadDate, int license, int perPage, int page)
- {
- return PhotosSearch(userId, String.Join(",", tags), tagMode, text, minUploadDate, maxUploadDate, license, perPage, page, PhotoSearchExtras.All);
- }
-
- // PhotoSearch - tags versions
-
- /// <summary>
- /// Search for photos.
- /// </summary>
- /// <param name="tags">A comma seperated list of tags to search for.</param>
- /// <param name="license">The license type to return.</param>
- /// <param name="extras">Optional extras to return.</param>
- /// <returns>A <see cref="Photos"/> instance.</returns>
- public Photos PhotosSearch(string tags, int license, PhotoSearchExtras extras)
- {
- return PhotosSearch(null, tags, 0, "", DateTime.MinValue, DateTime.MinValue, license, 0, 0, extras);
- }
-
- /// <summary>
- /// Search for photos.
- /// </summary>
- /// <param name="tags">A comma seperated list of tags to search for.</param>
- /// <param name="license">The license type to return.</param>
- /// <returns>A <see cref="Photos"/> instance.</returns>
- public Photos PhotosSearch(string tags, int license)
- {
- return PhotosSearch(null, tags, 0, "", DateTime.MinValue, DateTime.MinValue, license, 0, 0, PhotoSearchExtras.All);
- }
-
- /// <summary>
- /// Search for photos.
- /// </summary>
- /// <param name="tags">A comma seperated list of tags to search for.</param>
- /// <param name="tagMode">Match all tags, or any tag.</param>
- /// <param name="text">Text to search for in photo title or description.</param>
- /// <param name="perPage">Number of photos to return per page.</param>
- /// <param name="page">The page number to return.</param>
- /// <returns>A <see cref="Photos"/> instance.</returns>
- public Photos PhotosSearch(string tags, TagMode tagMode, string text, int perPage, int page)
- {
- return PhotosSearch(null, tags, tagMode, text, DateTime.MinValue, DateTime.MinValue, 0, perPage, page, PhotoSearchExtras.All);
- }
-
- /// <summary>
- /// Search for photos.
- /// </summary>
- /// <param name="tags">A comma seperated list of tags to search for.</param>
- /// <param name="tagMode">Match all tags, or any tag.</param>
- /// <param name="text">Text to search for in photo title or description.</param>
- /// <param name="perPage">Number of photos to return per page.</param>
- /// <param name="page">The page number to return.</param>
- /// <param name="extras">Optional extras to return.</param>
- /// <returns>A <see cref="Photos"/> instance.</returns>
- public Photos PhotosSearch(string tags, TagMode tagMode, string text, int perPage, int page, PhotoSearchExtras extras)
- {
- return PhotosSearch(null, tags, tagMode, text, DateTime.MinValue, DateTime.MinValue, 0, perPage, page, extras);
- }
-
- /// <summary>
- /// Search for photos.
- /// </summary>
- /// <param name="tags">A comma seperated list of tags to search for.</param>
- /// <param name="tagMode">Match all tags, or any tag.</param>
- /// <param name="text">Text to search for in photo title or description.</param>
- /// <returns>A <see cref="Photos"/> instance.</returns>
- public Photos PhotosSearch(string tags, TagMode tagMode, string text)
- {
- return PhotosSearch(null, tags, tagMode, text, DateTime.MinValue, DateTime.MinValue, 0, 0, 0, PhotoSearchExtras.All);
- }
-
- /// <summary>
- /// Search for photos.
- /// </summary>
- /// <param name="tags">A comma seperated list of tags to search for.</param>
- /// <param name="tagMode">Match all tags, or any tag.</param>
- /// <param name="text">Text to search for in photo title or description.</param>
- /// <param name="extras">Optional extras to return.</param>
- /// <returns>A <see cref="Photos"/> instance.</returns>
- public Photos PhotosSearch(string tags, TagMode tagMode, string text, PhotoSearchExtras extras)
- {
- return PhotosSearch(null, tags, tagMode, text, DateTime.MinValue, DateTime.MinValue, 0, 0, 0, extras);
- }
-
- /// <summary>
- /// Search for photos.
- /// </summary>
- /// <param name="userId">The ID of the user to search the photos of.</param>
- /// <param name="tags">A comma seperated list of tags to search for.</param>
- /// <returns>A <see cref="Photos"/> instance.</returns>
- public Photos PhotosSearch(string userId, string tags)
- {
- return PhotosSearch(userId, tags, 0, "", DateTime.MinValue, DateTime.MinValue, 0, 0, 0, PhotoSearchExtras.All);
- }
-
- /// <summary>
- /// Search for photos.
- /// </summary>
- /// <param name="userId">The ID of the user to search the photos of.</param>
- /// <param name="tags">A comma seperated list of tags to search for.</param>
- /// <param name="extras">Optional extras to return.</param>
- /// <returns>A <see cref="Photos"/> instance.</returns>
- public Photos PhotosSearch(string userId, string tags, PhotoSearchExtras extras)
- {
- return PhotosSearch(userId, tags, 0, "", DateTime.MinValue, DateTime.MinValue, 0, 0, 0, extras);
- }
-
- /// <summary>
- /// Search for photos.
- /// </summary>
- /// <param name="userId">The ID of the user to search the photos of.</param>
- /// <param name="tags">A comma seperated list of tags to search for.</param>
- /// <param name="license">The license type to return.</param>
- /// <returns>A <see cref="Photos"/> instance.</returns>
- public Photos PhotosSearch(string userId, string tags, int license)
- {
- return PhotosSearch(userId, tags, 0, "", DateTime.MinValue, DateTime.MinValue, license, 0, 0, PhotoSearchExtras.All);
- }
-
- /// <summary>
- /// Search for photos.
- /// </summary>
- /// <param name="userId">The ID of the user to search the photos of.</param>
- /// <param name="tags">A comma seperated list of tags to search for.</param>
- /// <param name="license">The license type to return.</param>
- /// <param name="extras">Optional extras to return.</param>
- /// <returns>A <see cref="Photos"/> instance.</returns>
- public Photos PhotosSearch(string userId, string tags, int license, PhotoSearchExtras extras)
- {
- return PhotosSearch(userId, tags, 0, "", DateTime.MinValue, DateTime.MinValue, license, 0, 0, extras);
- }
-
- /// <summary>
- /// Search for photos.
- /// </summary>
- /// <param name="userId">The ID of the user to search the photos of.</param>
- /// <param name="tags">A comma seperated list of tags to search for.</param>
- /// <param name="tagMode">Match all tags, or any tag.</param>
- /// <param name="text">Text to search for in photo title or description.</param>
- /// <param name="perPage">Number of photos to return per page.</param>
- /// <param name="page">The page number to return.</param>
- /// <returns>A <see cref="Photos"/> instance.</returns>
- public Photos PhotosSearch(string userId, string tags, TagMode tagMode, string text, int perPage, int page)
- {
- return PhotosSearch(userId, tags, tagMode, text, DateTime.MinValue, DateTime.MinValue, 0, perPage, page, PhotoSearchExtras.All);
- }
-
- /// <summary>
- /// Search for photos.
- /// </summary>
- /// <param name="userId">The ID of the user to search the photos of.</param>
- /// <param name="tags">A comma seperated list of tags to search for.</param>
- /// <param name="tagMode">Match all tags, or any tag.</param>
- /// <param name="text">Text to search for in photo title or description.</param>
- /// <param name="perPage">Number of photos to return per page.</param>
- /// <param name="page">The page number to return.</param>
- /// <param name="extras">Optional extras to return.</param>
- /// <returns>A <see cref="Photos"/> instance.</returns>
- public Photos PhotosSearch(string userId, string tags, TagMode tagMode, string text, int perPage, int page, PhotoSearchExtras extras)
- {
- return PhotosSearch(userId, tags, tagMode, text, DateTime.MinValue, DateTime.MinValue, 0, perPage, page, extras);
- }
-
- /// <summary>
- /// Search for photos.
- /// </summary>
- /// <param name="userId">The ID of the user to search the photos of.</param>
- /// <param name="tags">A comma seperated list of tags to search for.</param>
- /// <param name="tagMode">Match all tags, or any tag.</param>
- /// <param name="text">Text to search for in photo title or description.</param>
- /// <returns>A <see cref="Photos"/> instance.</returns>
- public Photos PhotosSearch(string userId, string tags, TagMode tagMode, string text)
- {
- return PhotosSearch(userId, tags, tagMode, text, DateTime.MinValue, DateTime.MinValue, 0, 0, 0, PhotoSearchExtras.All);
- }
-
- /// <summary>
- /// Search for photos.
- /// </summary>
- /// <param name="userId">The ID of the user to search the photos of.</param>
- /// <param name="tags">A comma seperated list of tags to search for.</param>
- /// <param name="tagMode">Match all tags, or any tag.</param>
- /// <param name="text">Text to search for in photo title or description.</param>
- /// <param name="extras">Optional extras to return.</param>
- /// <returns>A <see cref="Photos"/> instance.</returns>
- public Photos PhotosSearch(string userId, string tags, TagMode tagMode, string text, PhotoSearchExtras extras)
- {
- return PhotosSearch(userId, tags, tagMode, text, DateTime.MinValue, DateTime.MinValue, 0, 0, 0, extras);
- }
-
- // Actual PhotoSearch function
-
- /// <summary>
- /// Search for photos.
- /// </summary>
- /// <param name="userId">The ID of the user to search the photos of.</param>
- /// <param name="tags">A comma seperated list of tags to search for.</param>
- /// <param name="tagMode">Match all tags, or any tag.</param>
- /// <param name="text">Text to search for in photo title or description.</param>
- /// <param name="perPage">Number of photos to return per page.</param>
- /// <param name="page">The page number to return.</param>
- /// <param name="extras">Optional extras to return.</param>
- /// <param name="minUploadDate">The minimum upload date.</param>
- /// <param name="maxUploadDate">The maxmimum upload date.</param>
- /// <param name="license">The license type to return.</param>
- /// <returns>A <see cref="Photos"/> instance.</returns>
- public Photos PhotosSearch(string userId, string tags, TagMode tagMode, string text, DateTime minUploadDate, DateTime maxUploadDate, int license, int perPage, int page, PhotoSearchExtras extras)
- {
- PhotoSearchOptions options = new PhotoSearchOptions();
- options.UserId = userId;
- options.Tags = tags;
- options.TagMode = tagMode;
- options.Text = text;
- options.MinUploadDate = minUploadDate;
- options.MaxUploadDate = maxUploadDate;
- if( license > 0 ) options.AddLicense(license);
- options.PerPage = perPage;
- options.Page = page;
- options.Extras = extras;
-
- return PhotosSearch(options);
- }
-
- /// <summary>
- /// Search for a set of photos, based on the value of the <see cref="PhotoSearchOptions"/> parameters.
- /// </summary>
- /// <param name="options">The parameters to search for.</param>
- /// <returns>A collection of photos contained within a <see cref="Photos"/> object.</returns>
- public Photos PhotosSearch(PhotoSearchOptions options)
- {
- Hashtable parameters = new Hashtable();
- parameters.Add("method", "flickr.photos.search");
- if( options.UserId != null && options.UserId.Length > 0 ) parameters.Add("user_id", options.UserId);
- if( options.Text != null && options.Text.Length > 0 ) parameters.Add("text", options.Text);
- if( options.Tags != null && options.Tags.Length > 0 ) parameters.Add("tags", options.Tags);
- if( options.TagMode != TagMode.None ) parameters.Add("tag_mode", options.TagModeString);
- if( options.MachineTags != null && options.MachineTags.Length > 0 ) parameters.Add("machine_tags", options.MachineTags);
- if( options.MachineTagMode != MachineTagMode.None ) parameters.Add("machine_tag_mode", options.MachineTagModeString);
- if( options.MinUploadDate != DateTime.MinValue ) parameters.Add("min_upload_date", Utils.DateToUnixTimestamp(options.MinUploadDate).ToString());
- if( options.MaxUploadDate != DateTime.MinValue ) parameters.Add("max_upload_date", Utils.DateToUnixTimestamp(options.MaxUploadDate).ToString());
- if( options.MinTakenDate != DateTime.MinValue ) parameters.Add("min_taken_date", options.MinTakenDate.ToString("yyyy-MM-dd HH:mm:ss", System.Globalization.DateTimeFormatInfo.InvariantInfo));
- if( options.MaxTakenDate != DateTime.MinValue ) parameters.Add("max_taken_date", options.MaxTakenDate.ToString("yyyy-MM-dd HH:mm:ss", System.Globalization.DateTimeFormatInfo.InvariantInfo));
- if( options.Licenses.Length != 0 )
- {
- string lic = "";
- for(int i = 0; i < options.Licenses.Length; i++)
- {
- if( i > 0 ) lic += ",";
- lic += Convert.ToString(options.Licenses[i]);
- }
- parameters.Add("license", lic);
- }
- if( options.PerPage != 0 ) parameters.Add("per_page", options.PerPage.ToString());
- if( options.Page != 0 ) parameters.Add("page", options.Page.ToString());
- if( options.Extras != PhotoSearchExtras.None ) parameters.Add("extras", options.ExtrasString);
- if( options.SortOrder != PhotoSearchSortOrder.None ) parameters.Add("sort", options.SortOrderString);
- if( options.PrivacyFilter != PrivacyFilter.None ) parameters.Add("privacy_filter", options.PrivacyFilter.ToString("d"));
- if( options.BoundaryBox.IsSet ) parameters.Add("bbox", options.BoundaryBox.ToString());
- if( options.Accuracy != GeoAccuracy.None ) parameters.Add("accuracy", options.Accuracy.ToString("d"));
-
- FlickrNet.Response response = GetResponseCache(parameters);
-
- if( response.Status == ResponseStatus.OK )
- {
- return response.Photos;
- }
- else
- {
- throw new FlickrApiException(response.Error);
- }
- }
-
- /// <summary>
- /// Set the date taken for a photo.
- /// </summary>
- /// <remarks>
- /// All dates are assumed to be GMT. It is the developers responsibility to change dates to the local users
- /// timezone.
- /// </remarks>
- /// <param name="photoId">The id of the photo to set the date taken for.</param>
- /// <param name="dateTaken">The date taken.</param>
- /// <param name="granularity">The granularity of the date taken.</param>
- /// <returns>True if the date was updated successfully.</returns>
- public bool PhotosSetDates(string photoId, DateTime dateTaken, DateGranularity granularity)
- {
- return PhotosSetDates(photoId, DateTime.MinValue, dateTaken, granularity);
- }
-
- /// <summary>
- /// Set the date the photo was posted (uploaded). This will affect the order in which photos
- /// are seen in your photostream.
- /// </summary>
- /// <remarks>
- /// All dates are assumed to be GMT. It is the developers responsibility to change dates to the local users
- /// timezone.
- /// </remarks>
- /// <param name="photoId">The id of the photo to set the date posted.</param>
- /// <param name="datePosted">The new date to set the date posted too.</param>
- /// <returns>True if the date was updated successfully.</returns>
- public bool PhotosSetDates(string photoId, DateTime datePosted)
- {
- return PhotosSetDates(photoId, datePosted, DateTime.MinValue, DateGranularity.FullDate);
- }
-
- /// <summary>
- /// Set the date the photo was posted (uploaded) and the date the photo was taken.
- /// Changing the date posted will affect the order in which photos are seen in your photostream.
- /// </summary>
- /// <remarks>
- /// All dates are assumed to be GMT. It is the developers responsibility to change dates to the local users
- /// timezone.
- /// </remarks>
- /// <param name="photoId">The id of the photo to set the dates.</param>
- /// <param name="datePosted">The new date to set the date posted too.</param>
- /// <param name="dateTaken">The new date to set the date taken too.</param>
- /// <param name="granularity">The granularity of the date taken.</param>
- /// <returns>True if the dates where updated successfully.</returns>
- public bool PhotosSetDates(string photoId, DateTime datePosted, DateTime dateTaken, DateGranularity granularity)
- {
- Hashtable parameters = new Hashtable();
- parameters.Add("method", "flickr.photos.setDates");
- parameters.Add("photo_id", photoId);
- if( datePosted != DateTime.MinValue ) parameters.Add("date_posted", Utils.DateToUnixTimestamp(datePosted).ToString());
- if( dateTaken != DateTime.MinValue )
- {
- parameters.Add("date_taken", dateTaken.ToString("yyyy-MM-dd HH:mm:ss", System.Globalization.DateTimeFormatInfo.InvariantInfo));
- parameters.Add("date_taken_granularity", granularity.ToString("d"));
- }
-
- FlickrNet.Response response = GetResponseNoCache(parameters);
-
- if( response.Status == ResponseStatus.OK )
- {
- return true;
- }
- else
- {
- throw new FlickrApiException(response.Error);
- }
-
- }
-
- /// <summary>
- /// Sets the title and description of the photograph.
- /// </summary>
- /// <param name="photoId">The numerical photoId of the photograph.</param>
- /// <param name="title">The new title of the photograph.</param>
- /// <param name="description">The new description of the photograph.</param>
- /// <returns>True when the operation is successful.</returns>
- /// <exception cref="FlickrException">Thrown when the photo id cannot be found.</exception>
- public bool PhotosSetMeta(string photoId, string title, string description)
- {
- Hashtable parameters = new Hashtable();
- parameters.Add("method", "flickr.photos.setMeta");
- parameters.Add("photo_id", photoId);
- parameters.Add("title", title);
- parameters.Add("description", description);
-
- FlickrNet.Response response = GetResponseNoCache(parameters);
-
- if( response.Status == ResponseStatus.OK )
- {
- return true;
- }
- else
- {
- throw new FlickrApiException(response.Error);
- }
-
- }
-
- /// <summary>
- /// Set the permissions on a photo.
- /// </summary>
- /// <param name="photoId">The id of the photo to update.</param>
- /// <param name="isPublic">1 if the photo is public, 0 if it is not.</param>
- /// <param name="isFriend">1 if the photo is viewable by friends, 0 if it is not.</param>
- /// <param name="isFamily">1 if the photo is viewable by family, 0 if it is not.</param>
- /// <param name="permComment">Who can add comments. See <see cref="PermissionComment"/> for more details.</param>
- /// <param name="permAddMeta">Who can add metadata (notes and tags). See <see cref="PermissionAddMeta"/> for more details.</param>
- public void PhotosSetPerms(string photoId, int isPublic, int isFriend, int isFamily, PermissionComment permComment, PermissionAddMeta permAddMeta)
- {
- PhotosSetPerms(photoId, (isPublic==1), (isFriend==1), (isFamily==1), permComment, permAddMeta);
- }
-
- /// <summary>
- /// Set the permissions on a photo.
- /// </summary>
- /// <param name="photoId">The id of the photo to update.</param>
- /// <param name="isPublic">True if the photo is public, False if it is not.</param>
- /// <param name="isFriend">True if the photo is viewable by friends, False if it is not.</param>
- /// <param name="isFamily">True if the photo is viewable by family, False if it is not.</param>
- /// <param name="permComment">Who can add comments. See <see cref="PermissionComment"/> for more details.</param>
- /// <param name="permAddMeta">Who can add metadata (notes and tags). See <see cref="PermissionAddMeta"/> for more details.</param>
- public void PhotosSetPerms(string photoId, bool isPublic, bool isFriend, bool isFamily, PermissionComment permComment, PermissionAddMeta permAddMeta)
- {
- Hashtable parameters = new Hashtable();
- parameters.Add("method", "flickr.photos.setPerms");
- parameters.Add("photo_id", photoId);
- parameters.Add("is_public", (isPublic?"1":"0"));
- parameters.Add("is_friend", (isFriend?"1":"0"));
- parameters.Add("is_family", (isFamily?"1":"0"));
- parameters.Add("perm_comment", permComment.ToString("d"));
- parameters.Add("perm_addmeta", permAddMeta.ToString("d"));
-
- FlickrNet.Response response = GetResponseNoCache(parameters);
-
- if( response.Status == ResponseStatus.OK )
- {
- return;
- }
- else
- {
- throw new FlickrApiException(response.Error);
- }
-
- }
-
- /// <summary>
- /// Set the tags for a photo.
- /// </summary>
- /// <remarks>
- /// This will remove all old tags and add these new ones specified. See <see cref="PhotosAddTags(string, string)"/>
- /// to just add new tags without deleting old ones.
- /// </remarks>
- /// <param name="photoId">The id of the photo to update.</param>
- /// <param name="tags">An array of tags.</param>
- /// <returns>True if the photo was updated successfully.</returns>
- public bool PhotosSetTags(string photoId, string[] tags)
- {
- string s = string.Join(",", tags);
- return PhotosSetTags(photoId, s);
- }
-
- /// <summary>
- /// Set the tags for a photo.
- /// </summary>
- /// <remarks>
- /// This will remove all old tags and add these new ones specified. See <see cref="PhotosAddTags(string, string)"/>
- /// to just add new tags without deleting old ones.
- /// </remarks>
- /// <param name="photoId">The id of the photo to update.</param>
- /// <param name="tags">An comma-seperated list of tags.</param>
- /// <returns>True if the photo was updated successfully.</returns>
- public bool PhotosSetTags(string photoId, string tags)
- {
- Hashtable parameters = new Hashtable();
- parameters.Add("method", "flickr.photos.setTags");
- parameters.Add("photo_id", photoId);
- parameters.Add("tags", tags);
-
- FlickrNet.Response response = GetResponseNoCache(parameters);
-
- if( response.Status == ResponseStatus.OK )
- {
- return true;
- }
- else
- {
- throw new FlickrApiException(response.Error);
- }
-
- }
-
- /// <summary>
- /// Sets the content type for a photo.
- /// </summary>
- /// <param name="photoId">The ID of the photos to set.</param>
- /// <param name="contentType">The new content type.</param>
- public void PhotosSetContentType(string photoId, ContentType contentType)
- {
- CheckRequiresAuthentication();
-
- Hashtable parameters = new Hashtable();
- parameters.Add("method", "flickr.photos.setContentType");
- parameters.Add("photo_id", photoId);
- parameters.Add("content_type", (int)contentType);
-
- FlickrNet.Response response = GetResponseNoCache(parameters);
-
- if( response.Status == ResponseStatus.OK )
- {
- return;
- }
- else
- {
- throw new FlickrApiException(response.Error);
- }
- }
-
- /// <summary>
- /// Set the safety level for a photo, but only set the hidden aspect.
- /// </summary>
- /// <param name="photoId">The ID of the photo to set the hidden property for.</param>
- /// <param name="hidden">The new value of the hidden value.</param>
- public void PhotosSetSafetyLevel(string photoId, HiddenFromSearch hidden)
- {
- PhotosSetSafetyLevel(photoId, SafetyLevel.None, hidden);
- }
-
- /// <summary>
- /// Set the safety level for a photo.
- /// </summary>
- /// <param name="photoId">The ID of the photo to set the safety level property for.</param>
- /// <param name="safetyLevel">The new value of the safety level value.</param>
- public void PhotosSetSafetyLevel(string photoId, SafetyLevel safetyLevel)
- {
- PhotosSetSafetyLevel(photoId, safetyLevel, HiddenFromSearch.None);
- }
-
- /// <summary>
- /// Sets the safety level and hidden property of a photo.
- /// </summary>
- /// <param name="photoId">The ID of the photos to set.</param>
- /// <param name="safetyLevel">The new content type.</param>
- /// <param name="hidden">The new hidden value.</param>
- public void PhotosSetSafetyLevel(string photoId, SafetyLevel safetyLevel, HiddenFromSearch hidden)
- {
- CheckRequiresAuthentication();
-
- Hashtable parameters = new Hashtable();
- parameters.Add("method", "flickr.photos.setSafetyLevel");
- parameters.Add("photo_id", photoId);
- if( safetyLevel != SafetyLevel.None ) parameters.Add("safety_level", (int)safetyLevel);
- switch(hidden)
- {
- case HiddenFromSearch.Visible:
- parameters.Add("hidden", 0);
- break;
- case HiddenFromSearch.Hidden:
- parameters.Add("hidden", 1);
- break;
- }
-
- FlickrNet.Response response = GetResponseNoCache(parameters);
-
- if( response.Status == ResponseStatus.OK )
- {
- return;
- }
- else
- {
- throw new FlickrApiException(response.Error);
- }
- }
- #endregion
-
- #region [ Photos Comments ]
- /// <summary>
- /// Gets a list of comments for a photo.
- /// </summary>
- /// <param name="photoId">The id of the photo to return the comments for.</param>
- /// <returns>An array of <see cref="Comment"/> objects.</returns>
- public Comment[] PhotosCommentsGetList(string photoId)
- {
- Hashtable parameters = new Hashtable();
- parameters.Add("method", "flickr.photos.comments.getList");
- parameters.Add("photo_id", photoId);
-
- FlickrNet.Response response = GetResponseCache(parameters);
-
- if( response.Status == ResponseStatus.OK )
- {
- return PhotoComments.GetComments(response.AllElements[0]);
- }
- else
- {
- throw new FlickrApiException(response.Error);
- }
- }
-
- /// <summary>
- /// Adds a new comment to a photo.
- /// </summary>
- /// <param name="photoId">The ID of the photo to add the comment to.</param>
- /// <param name="commentText">The text of the comment. Can contain some HTML.</param>
- /// <returns>The new ID of the created comment.</returns>
- public string PhotosCommentsAddComment(string photoId, string commentText)
- {
- Hashtable parameters = new Hashtable();
- parameters.Add("method", "flickr.photos.comments.addComment");
- parameters.Add("photo_id", photoId);
- parameters.Add("comment_text", commentText);
-
- FlickrNet.Response response = GetResponseNoCache(parameters);
-
- if( response.Status == ResponseStatus.OK )
- {
- XmlNode node = response.AllElements[0];
- if( node.Attributes.GetNamedItem("id") != null )
- return node.Attributes.GetNamedItem("id").Value;
- else
- throw new ResponseXmlException("Comment ID not found in response Xml.");
- }
- else
- {
- throw new FlickrApiException(response.Error);
- }
- }
-
- /// <summary>
- /// Deletes a comment from a photo.
- /// </summary>
- /// <param name="commentId">The ID of the comment to delete.</param>
- public void PhotosCommentsDeleteComment(string commentId)
- {
- Hashtable parameters = new Hashtable();
- parameters.Add("method", "flickr.photos.comments.deleteComment");
- parameters.Add("comment_id", commentId);
-
- FlickrNet.Response response = GetResponseNoCache(parameters);
-
- if( response.Status == ResponseStatus.OK )
- {
- return;
- }
- else
- {
- throw new FlickrApiException(response.Error);
- }
- }
-
- /// <summary>
- /// Edits a comment.
- /// </summary>
- /// <param name="commentId">The ID of the comment to edit.</param>
- /// <param name="commentText">The new text for the comment.</param>
- public void PhotosCommentsEditComment(string commentId, string commentText)
- {
- Hashtable parameters = new Hashtable();
- parameters.Add("method", "flickr.photos.comments.editComment");
- parameters.Add("comment_id", commentId);
- parameters.Add("comment_text", commentText);
-
- FlickrNet.Response response = GetResponseNoCache(parameters);
-
- if( response.Status == ResponseStatus.OK )
- {
- return;
- }
- else
- {
- throw new FlickrApiException(response.Error);
- }
- }
- #endregion
-
- #region [ Photosets ]
- /// <summary>
- /// Add a photo to a photoset.
- /// </summary>
- /// <param name="photosetId">The ID of the photoset to add the photo to.</param>
- /// <param name="photoId">The ID of the photo to add.</param>
- public void PhotosetsAddPhoto(string photosetId, string photoId)
- {
- Hashtable parameters = new Hashtable();
- parameters.Add("method", "flickr.photosets.addPhoto");
- parameters.Add("photoset_id", photosetId);
- parameters.Add("photo_id", photoId);
-
- FlickrNet.Response response = GetResponseNoCache(parameters);
-
- if( response.Status == ResponseStatus.OK )
- {
- return;
- }
- else
- {
- throw new FlickrApiException(response.Error);
- }
- }
-
- /// <summary>
- /// Creates a blank photoset, with a title and a primary photo (minimum requirements).
- /// </summary>
- /// <param name="title">The title of the photoset.</param>
- /// <param name="primaryPhotoId">The ID of the photo which will be the primary photo for the photoset. This photo will also be added to the set.</param>
- /// <returns>The <see cref="Photoset"/> that is created.</returns>
- public Photoset PhotosetsCreate(string title, string primaryPhotoId)
- {
- return PhotosetsCreate(title, null, primaryPhotoId);
- }
-
- /// <summary>
- /// Creates a blank photoset, with a title, description and a primary photo.
- /// </summary>
- /// <param name="title">The title of the photoset.</param>
- /// <param name="description">THe description of the photoset.</param>
- /// <param name="primaryPhotoId">The ID of the photo which will be the primary photo for the photoset. This photo will also be added to the set.</param>
- /// <returns>The <see cref="Photoset"/> that is created.</returns>
- public Photoset PhotosetsCreate(string title, string description, string primaryPhotoId)
- {
- Hashtable parameters = new Hashtable();
- parameters.Add("method", "flickr.photosets.create");
- parameters.Add("title", title);
- parameters.Add("primary_photo_id", primaryPhotoId);
- parameters.Add("description", description);
-
- FlickrNet.Response response = GetResponseNoCache(parameters);
-
- if( response.Status == ResponseStatus.OK )
- {
- return response.Photoset;
- }
- else
- {
- throw new FlickrApiException(response.Error);
- }
-
- }
-
- /// <summary>
- /// Deletes the specified photoset.
- /// </summary>
- /// <param name="photosetId">The ID of the photoset to delete.</param>
- /// <returns>Returns true when the photoset has been deleted.</returns>
- public bool PhotosetsDelete(string photosetId)
- {
- Hashtable parameters = new Hashtable();
- parameters.Add("method", "flickr.photosets.delete");
- parameters.Add("photoset_id", photosetId);
-
- FlickrNet.Response response = GetResponseNoCache(parameters);
-
- if( response.Status == ResponseStatus.OK )
- {
- return true;
- }
- else
- {
- throw new FlickrApiException(response.Error);
- }
-
- }
-
- /// <summary>
- /// Updates the title and description for a photoset.
- /// </summary>
- /// <param name="photosetId">The ID of the photoset to update.</param>
- /// <param name="title">The new title for the photoset.</param>
- /// <param name="description">The new description for the photoset.</param>
- /// <returns>Returns true when the photoset has been updated.</returns>
- public bool PhotosetsEditMeta(string photosetId, string title, string description)
- {
- Hashtable parameters = new Hashtable();
- parameters.Add("method", "flickr.photosets.editMeta");
- parameters.Add("photoset_id", photosetId);
- parameters.Add("title", title);
- parameters.Add("description", description);
-
- FlickrNet.Response response = GetResponseNoCache(parameters);
-
- if( response.Status == ResponseStatus.OK )
- {
- return true;
- }
- else
- {
- throw new FlickrApiException(response.Error);
- }
-
- }
-
- /// <summary>
- /// Sets the photos for a photoset.
- /// </summary>
- /// <remarks>
- /// Will remove any previous photos from the photoset.
- /// The order in thich the photoids are given is the order they will appear in the
- /// photoset page.
- /// </remarks>
- /// <param name="photosetId">The ID of the photoset to update.</param>
- /// <param name="primaryPhotoId">The ID of the new primary photo for the photoset.</param>
- /// <param name="photoIds">An array of photo IDs.</param>
- /// <returns>Returns true when the photoset has been updated.</returns>
- public bool PhotosetsEditPhotos(string photosetId, string primaryPhotoId, string[] photoIds)
- {
- return PhotosetsEditPhotos(photosetId, primaryPhotoId, string.Join(",", photoIds));
- }
-
-
- /// <summary>
- /// Sets the photos for a photoset.
- /// </summary>
- /// <remarks>
- /// Will remove any previous photos from the photoset.
- /// The order in thich the photoids are given is the order they will appear in the
- /// photoset page.
- /// </remarks>
- /// <param name="photosetId">The ID of the photoset to update.</param>
- /// <param name="primaryPhotoId">The ID of the new primary photo for the photoset.</param>
- /// <param name="photoIds">An comma seperated list of photo IDs.</param>
- /// <returns>Returns true when the photoset has been updated.</returns>
- public bool PhotosetsEditPhotos(string photosetId, string primaryPhotoId, string photoIds)
- {
- Hashtable parameters = new Hashtable();
- parameters.Add("method", "flickr.photosets.editPhotos");
- parameters.Add("photoset_id", photosetId);
- parameters.Add("primary_photo_id", primaryPhotoId);
- parameters.Add("photo_ids", photoIds);
-
- FlickrNet.Response response = GetResponseNoCache(parameters);
-
- if( response.Status == ResponseStatus.OK )
- {
- return true;
- }
- else
- {
- throw new FlickrApiException(response.Error);
- }
-
- }
-
- /// <summary>
- /// Gets the context of the specified photo within the photoset.
- /// </summary>
- /// <param name="photoId">The photo id of the photo in the set.</param>
- /// <param name="photosetId">The id of the set.</param>
- /// <returns><see cref="Context"/> of the specified photo.</returns>
- public Context PhotosetsGetContext(string photoId, string photosetId)
- {
- Hashtable parameters = new Hashtable();
- parameters.Add("method", "flickr.photosets.getContext");
- parameters.Add("photo_id", photoId);
- parameters.Add("photoset_id", photosetId);
-
- FlickrNet.Response response = GetResponseCache(parameters);
-
- if( response.Status == ResponseStatus.OK )
- {
- Context c = new Context();
- c.Count = response.ContextCount.Count;
- c.NextPhoto = response.ContextNextPhoto;
- c.PreviousPhoto = response.ContextPrevPhoto;
-
- return c;
- }
- else
- {
- throw new FlickrApiException(response.Error);
- }
- }
-
- /// <summary>
- /// Gets the information about a photoset.
- /// </summary>
- /// <param name="photosetId">The ID of the photoset to return information for.</param>
- /// <returns>A <see cref="Photoset"/> instance.</returns>
- public Photoset PhotosetsGetInfo(string photosetId)
- {
- Hashtable parameters = new Hashtable();
- parameters.Add("method", "flickr.photosets.getInfo");
- parameters.Add("photoset_id", photosetId);
-
- FlickrNet.Response response = GetResponseCache(parameters);
-
- if( response.Status == ResponseStatus.OK )
- {
- return response.Photoset;
- }
- else
- {
- throw new FlickrApiException(response.Error);
- }
-
- }
-
- /// <summary>
- /// Gets a list of the currently authenticated users photosets.
- /// </summary>
- /// <returns>A <see cref="Photosets"/> instance containing a collection of photosets.</returns>
- public Photosets PhotosetsGetList()
- {
- return PhotosetsGetList(null);
- }
-
- /// <summary>
- /// Gets a list of the specified users photosets.
- /// </summary>
- /// <param name="userId">The ID of the user to return the photosets of.</param>
- /// <returns>A <see cref="Photosets"/> instance containing a collection of photosets.</returns>
- public Photosets PhotosetsGetList(string userId)
- {
- Hashtable parameters = new Hashtable();
- parameters.Add("method", "flickr.photosets.getList");
- if( userId != null ) parameters.Add("user_id", userId);
-
- FlickrNet.Response response = GetResponseCache(parameters);
-
- if( response.Status == ResponseStatus.OK )
- {
- return response.Photosets;
- }
- else
- {
- throw new FlickrApiException(response.Error);
- }
- }
-
- /// <summary>
- /// Gets a collection of photos for a photoset.
- /// </summary>
- /// <param name="photosetId">The ID of the photoset to return photos for.</param>
- /// <returns>A <see cref="Photoset"/> object containing the list of <see cref="Photo"/> instances.</returns>
- public Photoset PhotosetsGetPhotos(string photosetId)
- {
- return PhotosetsGetPhotos(photosetId, PhotoSearchExtras.All, PrivacyFilter.None, 0, 0);
- }
-
- /// <summary>
- /// Gets a collection of photos for a photoset.
- /// </summary>
- /// <param name="photosetId">The ID of the photoset to return photos for.</param>
- /// <param name="page">The page to return, defaults to 1.</param>
- /// <param name="perPage">The number of photos to return per page.</param>
- /// <returns>A <see cref="Photoset"/> object containing the list of <see cref="Photo"/> instances.</returns>
- public Photoset PhotosetsGetPhotos(string photosetId, int page, int perPage)
- {
- return PhotosetsGetPhotos(photosetId, PhotoSearchExtras.All, PrivacyFilter.None, page, perPage);
- }
-
- /// <summary>
- /// Gets a collection of photos for a photoset.
- /// </summary>
- /// <param name="photosetId">The ID of the photoset to return photos for.</param>
- /// <param name="privacyFilter">The privacy filter to search on.</param>
- /// <returns>A <see cref="Photoset"/> object containing the list of <see cref="Photo"/> instances.</returns>
- public Photoset PhotosetsGetPhotos(string photosetId, PrivacyFilter privacyFilter)
- {
- return PhotosetsGetPhotos(photosetId, PhotoSearchExtras.All, privacyFilter, 0, 0);
- }
-
- /// <summary>
- /// Gets a collection of photos for a photoset.
- /// </summary>
- /// <param name="photosetId">The ID of the photoset to return photos for.</param>
- /// <param name="privacyFilter">The privacy filter to search on.</param>
- /// <param name="page">The page to return, defaults to 1.</param>
- /// <param name="perPage">The number of photos to return per page.</param>
- /// <returns>A <see cref="Photoset"/> object containing the list of <see cref="Photo"/> instances.</returns>
- public Photoset PhotosetsGetPhotos(string photosetId, PrivacyFilter privacyFilter, int page, int perPage)
- {
- return PhotosetsGetPhotos(photosetId, PhotoSearchExtras.All, privacyFilter, page, perPage);
- }
-
- /// <summary>
- /// Gets a collection of photos for a photoset.
- /// </summary>
- /// <param name="photosetId">The ID of the photoset to return photos for.</param>
- /// <param name="extras">The extras to return for each photo.</param>
- /// <returns>A <see cref="Photoset"/> object containing the list of <see cref="Photo"/> instances.</returns>
- public Photoset PhotosetsGetPhotos(string photosetId, PhotoSearchExtras extras)
- {
- return PhotosetsGetPhotos(photosetId, extras, PrivacyFilter.None, 0, 0);
- }
-
- /// <summary>
- /// Gets a collection of photos for a photoset.
- /// </summary>
- /// <param name="photosetId">The ID of the photoset to return photos for.</param>
- /// <param name="extras">The extras to return for each photo.</param>
- /// <param name="page">The page to return, defaults to 1.</param>
- /// <param name="perPage">The number of photos to return per page.</param>
- /// <returns>A <see cref="Photoset"/> object containing the list of <see cref="Photo"/> instances.</returns>
- public Photoset PhotosetsGetPhotos(string photosetId, PhotoSearchExtras extras, int page, int perPage)
- {
- return PhotosetsGetPhotos(photosetId, extras, PrivacyFilter.None, page, perPage);
- }
-
- /// <summary>
- /// Gets a collection of photos for a photoset.
- /// </summary>
- /// <param name="photosetId">The ID of the photoset to return photos for.</param>
- /// <param name="extras">The extras to return for each photo.</param>
- /// <param name="privacyFilter">The privacy filter to search on.</param>
- /// <returns>A <see cref="Photoset"/> object containing the list of <see cref="Photo"/> instances.</returns>
- public Photoset PhotosetsGetPhotos(string photosetId, PhotoSearchExtras extras, PrivacyFilter privacyFilter)
- {
- return PhotosetsGetPhotos(photosetId, extras, privacyFilter, 0, 0);
- }
-
- /// <summary>
- /// Gets a collection of photos for a photoset.
- /// </summary>
- /// <param name="photosetId">The ID of the photoset to return photos for.</param>
- /// <param name="extras">The extras to return for each photo.</param>
- /// <param name="privacyFilter">The privacy filter to search on.</param>
- /// <param name="page">The page to return, defaults to 1.</param>
- /// <param name="perPage">The number of photos to return per page.</param>
- /// <returns>An array of <see cref="Photo"/> instances.</returns>
- public Photoset PhotosetsGetPhotos(string photosetId, PhotoSearchExtras extras, PrivacyFilter privacyFilter, int page, int perPage)
- {
- Hashtable parameters = new Hashtable();
- parameters.Add("method", "flickr.photosets.getPhotos");
- parameters.Add("photoset_id", photosetId);
- if( extras != PhotoSearchExtras.None ) parameters.Add("extras", Utils.ExtrasToString(extras));
- if( privacyFilter != PrivacyFilter.None ) parameters.Add("privacy_filter", privacyFilter.ToString("d"));
- if( page > 0 ) parameters.Add("page", page);
- if( perPage > 0 ) parameters.Add("per_page", perPage);
-
- FlickrNet.Response response = GetResponseCache(parameters);
-
- if( response.Status == ResponseStatus.OK )
- {
- if( response.Photoset.OwnerId != null && response.Photoset.OwnerId.Length > 0 )
- {
- foreach(Photo p in response.Photoset.PhotoCollection)
- {
- p.UserId = response.Photoset.OwnerId;
- }
- }
- return response.Photoset;
- }
- else
- {
- throw new FlickrApiException(response.Error);
- }
- }
-
- /// <summary>
- /// Changes the order of your photosets.
- /// </summary>
- /// <param name="photosetIds">An array of photoset IDs,
- /// ordered with the set to show first, first in the list.
- /// Any set IDs not given in the list will be set to appear at the end of the list, ordered by their IDs.</param>
- public void PhotosetsOrderSets(string[] photosetIds)
- {
- PhotosetsOrderSets(string.Join(",", photosetIds));
- }
-
- /// <summary>
- /// Changes the order of your photosets.
- /// </summary>
- /// <param name="photosetIds">A comma delimited list of photoset IDs,
- /// ordered with the set to show first, first in the list.
- /// Any set IDs not given in the list will be set to appear at the end of the list, ordered by their IDs.</param>
- public void PhotosetsOrderSets(string photosetIds)
- {
- Hashtable parameters = new Hashtable();
- parameters.Add("method", "flickr.photosets.orderSets");
- parameters.Add("photosetIds", photosetIds);
-
- FlickrNet.Response response = GetResponseNoCache(parameters);
-
- if( response.Status == ResponseStatus.OK )
- {
- return;
- }
- else
- {
- throw new FlickrApiException(response.Error);
- }
- }
-
- /// <summary>
- /// Removes a photo from a photoset.
- /// </summary>
- /// <remarks>
- /// An exception will be raised if the photo is not in the set.
- /// </remarks>
- /// <param name="photosetId">The ID of the photoset to remove the photo from.</param>
- /// <param name="photoId">The ID of the photo to remove.</param>
- public void PhotosetsRemovePhoto(string photosetId, string photoId)
- {
- Hashtable parameters = new Hashtable();
- parameters.Add("method", "flickr.photosets.removePhoto");
- parameters.Add("photoset_id", photosetId);
- parameters.Add("photo_id", photoId);
-
- FlickrNet.Response response = GetResponseNoCache(parameters);
-
- if( response.Status == ResponseStatus.OK )
- {
- return;
- }
- else
- {
- throw new FlickrApiException(response.Error);
- }
- }
- #endregion
-
- #region [ Photoset Comments ]
- /// <summary>
- /// Gets a list of comments for a photoset.
- /// </summary>
- /// <param name="photosetId">The id of the photoset to return the comments for.</param>
- /// <returns>An array of <see cref="Comment"/> objects.</returns>
- public Comment[] PhotosetsCommentsGetList(string photosetId)
- {
- Hashtable parameters = new Hashtable();
- parameters.Add("method", "flickr.photosets.comments.getList");
- parameters.Add("photoset_id", photosetId);
-
- FlickrNet.Response response = GetResponseCache(parameters);
-
- if( response.Status == ResponseStatus.OK )
- {
- return PhotoComments.GetComments(response.AllElements[0]);
- }
- else
- {
- throw new FlickrApiException(response.Error);
- }
- }
-
- /// <summary>
- /// Adds a new comment to a photoset.
- /// </summary>
- /// <param name="photosetId">The ID of the photoset to add the comment to.</param>
- /// <param name="commentText">The text of the comment. Can contain some HTML.</param>
- /// <returns>The new ID of the created comment.</returns>
- public string PhotosetsCommentsAddComment(string photosetId, string commentText)
- {
- Hashtable parameters = new Hashtable();
- parameters.Add("method", "flickr.photosets.comments.addComment");
- parameters.Add("photoset_id", photosetId);
- parameters.Add("comment_text", commentText);
-
- FlickrNet.Response response = GetResponseNoCache(parameters);
-
- if( response.Status == ResponseStatus.OK )
- {
- XmlNode node = response.AllElements[0];
- if( node.Attributes.GetNamedItem("id") != null )
- return node.Attributes.GetNamedItem("id").Value;
- else
- throw new ResponseXmlException("Comment ID not found in response.");
- }
- else
- {
- throw new FlickrApiException(response.Error);
- }
- }
-
- /// <summary>
- /// Deletes a comment from a photoset.
- /// </summary>
- /// <param name="commentId">The ID of the comment to delete.</param>
- public void PhotosetsCommentsDeleteComment(string commentId)
- {
- Hashtable parameters = new Hashtable();
- parameters.Add("method", "flickr.photosets.comments.deleteComment");
- parameters.Add("comment_id", commentId);
-
- FlickrNet.Response response = GetResponseNoCache(parameters);
-
- if( response.Status == ResponseStatus.OK )
- {
- return;
- }
- else
- {
- throw new FlickrApiException(response.Error);
- }
- }
-
- /// <summary>
- /// Edits a comment.
- /// </summary>
- /// <param name="commentId">The ID of the comment to edit.</param>
- /// <param name="commentText">The new text for the comment.</param>
- public void PhotosetsCommentsEditComment(string commentId, string commentText)
- {
- Hashtable parameters = new Hashtable();
- parameters.Add("method", "flickr.photosets.comments.editComment");
- parameters.Add("comment_id", commentId);
- parameters.Add("comment_text", commentText);
-
- FlickrNet.Response response = GetResponseNoCache(parameters);
-
- if( response.Status == ResponseStatus.OK )
- {
- return;
- }
- else
- {
- throw new FlickrApiException(response.Error);
- }
- }
- #endregion
-
- #region [ Prefs ]
- /// <summary>
- /// Gets the currently authenticated users default safety level.
- /// </summary>
- /// <returns></returns>
- public SafetyLevel PrefsGetSafetyLevel()
- {
- CheckRequiresAuthentication();
-
- Hashtable parameters = new Hashtable();
- parameters.Add("method", "flickr.prefs.getSafetyLevel");
-
- Response res = GetResponseCache(parameters);
- if( res.Status == ResponseStatus.OK )
- {
- string s = res.AllElements[0].GetAttribute("safety_level");
- return (SafetyLevel)int.Parse(s);
- }
- else
- {
- throw new FlickrApiException(res.Error);
- }
- }
-
- /// <summary>
- /// Gets the currently authenticated users default hidden from search setting.
- /// </summary>
- /// <returns></returns>
- public HiddenFromSearch PrefsGetHidden()
- {
- CheckRequiresAuthentication();
-
- Hashtable parameters = new Hashtable();
- parameters.Add("method", "flickr.prefs.getHidden");
-
- Response res = GetResponseCache(parameters);
- if( res.Status == ResponseStatus.OK )
- {
- string s = res.AllElements[0].GetAttribute("hidden");
- return (HiddenFromSearch)int.Parse(s);
- }
- else
- {
- throw new FlickrApiException(res.Error);
- }
- }
-
- /// <summary>
- /// Gets the currently authenticated users default content type.
- /// </summary>
- /// <returns></returns>
- public ContentType PrefsGetContentType()
- {
- CheckRequiresAuthentication();
-
- Hashtable parameters = new Hashtable();
- parameters.Add("method", "flickr.prefs.getContentType");
-
- Response res = GetResponseCache(parameters);
- if( res.Status == ResponseStatus.OK )
- {
- string s = res.AllElements[0].GetAttribute("content_type");
- return (ContentType)int.Parse(s);
- }
- else
- {
- throw new FlickrApiException(res.Error);
- }
- }
- #endregion
-
- #region [ Tags ]
- /// <summary>
- /// Get the tag list for a given photo.
- /// </summary>
- /// <param name="photoId">The id of the photo to return tags for.</param>
- /// <returns>An instance of the <see cref="PhotoInfo"/> class containing only the <see cref="PhotoInfo.Tags"/> property.</returns>
- public PhotoInfoTag[] TagsGetListPhoto(string photoId)
- {
- Hashtable parameters = new Hashtable();
- parameters.Add("method", "flickr.tags.getListPhoto");
- parameters.Add("api_key", _apiKey);
- parameters.Add("photo_id", photoId);
-
- FlickrNet.Response response = GetResponseCache(parameters);
-
- if( response.Status == ResponseStatus.OK )
- {
- return response.PhotoInfo.Tags.TagCollection;
- }
- else
- {
- throw new FlickrApiException(response.Error);
- }
- }
-
- /// <summary>
- /// Get the tag list for a given user (or the currently logged in user).
- /// </summary>
- /// <returns>An array of <see cref="Tag"/> objects.</returns>
- public Tag[] TagsGetListUser()
- {
- return TagsGetListUser(null);
- }
-
- /// <summary>
- /// Get the tag list for a given user (or the currently logged in user).
- /// </summary>
- /// <param name="userId">The NSID of the user to fetch the tag list for. If this argument is not specified, the currently logged in user (if any) is assumed.</param>
- /// <returns>An array of <see cref="Tag"/> objects.</returns>
- public Tag[] TagsGetListUser(string userId)
- {
- Hashtable parameters = new Hashtable();
- parameters.Add("method", "flickr.tags.getListUser");
- if( userId != null && userId.Length > 0 ) parameters.Add("user_id", userId);
-
- FlickrNet.Response response = GetResponseCache(parameters);
-
- if( response.Status == ResponseStatus.OK )
- {
- XmlNodeList nodes = response.AllElements[0].SelectNodes("//tag");
- Tag[] tags = new Tag[nodes.Count];
- for(int i = 0; i < tags.Length; i++)
- {
- tags[i] = new Tag(nodes[i]);
- }
- return tags;
- }
- else
- {
- throw new FlickrApiException(response.Error);
- }
- }
-
- /// <summary>
- /// Get the popular tags for a given user (or the currently logged in user).
- /// </summary>
- /// <returns>An array of <see cref="Tag"/> objects.</returns>
- public Tag[] TagsGetListUserPopular()
- {
- return TagsGetListUserPopular(null, 0);
- }
-
- /// <summary>
- /// Get the popular tags for a given user (or the currently logged in user).
- /// </summary>
- /// <param name="count">Number of popular tags to return. defaults to 10 when this argument is not present.</param>
- /// <returns>An array of <see cref="Tag"/> objects.</returns>
- public Tag[] TagsGetListUserPopular(int count)
- {
- return TagsGetListUserPopular(null, count);
- }
-
- /// <summary>
- /// Get the popular tags for a given user (or the currently logged in user).
- /// </summary>
- /// <param name="userId">The NSID of the user to fetch the tag list for. If this argument is not specified, the currently logged in user (if any) is assumed.</param>
- /// <returns>An array of <see cref="Tag"/> objects.</returns>
- public Tag[] TagsGetListUserPopular(string userId)
- {
- return TagsGetListUserPopular(userId, 0);
- }
-
- /// <summary>
- /// Get the popular tags for a given user (or the currently logged in user).
- /// </summary>
- /// <param name="userId">The NSID of the user to fetch the tag list for. If this argument is not specified, the currently logged in user (if any) is assumed.</param>
- /// <param name="count">Number of popular tags to return. defaults to 10 when this argument is not present.</param>
- /// <returns>An array of <see cref="Tag"/> objects.</returns>
- public Tag[] TagsGetListUserPopular(string userId, long count)
- {
- Hashtable parameters = new Hashtable();
- parameters.Add("method", "flickr.tags.getListUserPopular");
- if( userId != null ) parameters.Add("user_id", userId);
- if( count > 0 ) parameters.Add("count", count.ToString());
-
- FlickrNet.Response response = GetResponseCache(parameters);
-
- if( response.Status == ResponseStatus.OK )
- {
- XmlNodeList nodes = response.AllElements[0].SelectNodes("//tag");
- Tag[] tags = new Tag[nodes.Count];
- for(int i = 0; i < tags.Length; i++)
- {
- tags[i] = new Tag(nodes[i]);
- }
- return tags;
- }
- else
- {
- throw new FlickrApiException(response.Error);
- }
- }
-
- /// <summary>
- /// Returns a list of tags 'related' to the given tag, based on clustered usage analysis.
- /// </summary>
- /// <param name="tag">The tag to fetch related tags for.</param>
- /// <returns>An array of <see cref="Tag"/> objects.</returns>
- public Tag[] TagsGetRelated(string tag)
- {
- Hashtable parameters = new Hashtable();
- parameters.Add("method", "flickr.tags.getRelated");
- parameters.Add("api_key", _apiKey);
- parameters.Add("tag", tag);
-
- FlickrNet.Response response = GetResponseCache(parameters);
-
- if( response.Status == ResponseStatus.OK )
- {
- XmlNodeList nodes = response.AllElements[0].SelectNodes("//tag");
- Tag[] tags = new Tag[nodes.Count];
- for(int i = 0; i < tags.Length; i++)
- {
- tags[i] = new Tag(nodes[i]);
- }
- return tags;
- }
- else
- {
- throw new FlickrApiException(response.Error);
- }
- }
-
- #endregion
-
- #region [ Transform ]
-
- /// <summary>
- /// Rotates a photo on Flickr.
- /// </summary>
- /// <remarks>
- /// Does not rotate the original photo.
- /// </remarks>
- /// <param name="photoId">The ID of the photo.</param>
- /// <param name="degrees">The number of degrees to rotate by. Valid values are 90, 180 and 270.</param>
- public void TransformRotate(string photoId, int degrees)
- {
- if( photoId == null )
- throw new ArgumentNullException("photoId");
- if( degrees != 90 && degrees != 180 && degrees != 270 )
- throw new ArgumentException("Must be 90, 180 or 270", "degrees");
-
- Hashtable parameters = new Hashtable();
- parameters.Add("method", "flickr.photos.transform.rotate");
- parameters.Add("photo_id", photoId);
- parameters.Add("degrees", degrees.ToString("0"));
-
- FlickrNet.Response response = GetResponseNoCache(parameters);
- if( response.Status == ResponseStatus.OK )
- {
- return;
- }
- else
- {
- throw new FlickrApiException(response.Error);
- }
- }
-
- #endregion
-
- #region [ Geo ]
- /// <summary>
- /// Returns the location data for a give photo.
- /// </summary>
- /// <param name="photoId">The ID of the photo to return the location information for.</param>
- /// <returns>Returns null if the photo has no location information, otherwise returns the location information.</returns>
- public PhotoLocation PhotosGeoGetLocation(string photoId)
- {
- Hashtable parameters = new Hashtable();
- parameters.Add("method", "flickr.photos.geo.getLocation");
- parameters.Add("photo_id", photoId);
-
- FlickrNet.Response response = GetResponseCache(parameters);
- if( response.Status == ResponseStatus.OK )
- {
- return response.PhotoInfo.Location;
- }
- else
- {
- if( response.Error.Code == 2 )
- return null;
- else
- throw new FlickrApiException(response.Error);
- }
- }
- /// <summary>
- /// Sets the geo location for a photo.
- /// </summary>
- /// <param name="photoId">The ID of the photo to set to location for.</param>
- /// <param name="latitude">The latitude of the geo location. A double number ranging from -180.00 to 180.00. Digits beyond 6 decimal places will be truncated.</param>
- /// <param name="longitude">The longitude of the geo location. A double number ranging from -180.00 to 180.00. Digits beyond 6 decimal places will be truncated.</param>
- public void PhotosGeoSetLocation(string photoId, double latitude, double longitude)
- {
- PhotosGeoSetLocation(photoId, latitude, longitude, GeoAccuracy.None);
- }
-
- /// <summary>
- /// Sets the geo location for a photo.
- /// </summary>
- /// <param name="photoId">The ID of the photo to set to location for.</param>
- /// <param name="latitude">The latitude of the geo location. A double number ranging from -180.00 to 180.00. Digits beyond 6 decimal places will be truncated.</param>
- /// <param name="longitude">The longitude of the geo location. A double number ranging from -180.00 to 180.00. Digits beyond 6 decimal places will be truncated.</param>
- /// <param name="accuracy">The accuracy of the photos geo location.</param>
- public void PhotosGeoSetLocation(string photoId, double latitude, double longitude, GeoAccuracy accuracy)
- {
- System.Globalization.NumberFormatInfo nfi = System.Globalization.NumberFormatInfo.InvariantInfo;
- Hashtable parameters = new Hashtable();
- parameters.Add("method", "flickr.photos.geo.setLocation");
- parameters.Add("photo_id", photoId);
- parameters.Add("lat", latitude.ToString(nfi));
- parameters.Add("lon", longitude.ToString(nfi));
- if( accuracy != GeoAccuracy.None )
- parameters.Add("accuracy", ((int)accuracy).ToString());
-
- FlickrNet.Response response = GetResponseNoCache(parameters);
- if( response.Status == ResponseStatus.OK )
- {
- return;
- }
- else
- {
- throw new FlickrApiException(response.Error);
- }
- }
-
- /// <summary>
- /// Removes Location information.
- /// </summary>
- /// <param name="photoId">The photo ID of the photo to remove information from.</param>
- /// <returns>Returns true if the location information as found and removed. Returns false if no photo information was found.</returns>
- public bool PhotosGeoRemoveLocation(string photoId)
- {
- Hashtable parameters = new Hashtable();
- parameters.Add("method", "flickr.photos.geo.removeLocation");
- parameters.Add("photo_id", photoId);
-
- FlickrNet.Response response = GetResponseNoCache(parameters);
- if( response.Status == ResponseStatus.OK )
- {
- return true;
- }
- else
- {
- if( response.Error.Code == 2 )
- return false;
- else
- throw new FlickrApiException(response.Error);
- }
- }
-
- /// <summary>
- /// Gets a list of photos that do not contain geo location information.
- /// </summary>
- /// <returns>A list of photos that do not contain location information.</returns>
- public Photos PhotosGetWithoutGeoData()
- {
- PartialSearchOptions options = new PartialSearchOptions();
- return PhotosGetWithoutGeoData(options);
- }
-
- /// <summary>
- /// Gets a list of photos that do not contain geo location information.
- /// </summary>
- /// <param name="options">A limited set of options are supported.</param>
- /// <returns>A list of photos that do not contain location information.</returns>
- public Photos PhotosGetWithoutGeoData(PartialSearchOptions options)
- {
- Hashtable parameters = new Hashtable();
- parameters.Add("method", "flickr.photos.getWithoutGeoData");
- Utils.PartialOptionsIntoArray(options, parameters);
-
- FlickrNet.Response response = GetResponseCache(parameters);
- if( response.Status == ResponseStatus.OK )
- {
- return response.Photos;
- }
- else
- {
- throw new FlickrApiException(response.Error);
- }
- }
-
- /// <summary>
- /// Gets a list of photos that do not contain geo location information.
- /// </summary>
- /// <param name="options">A limited set of options are supported.
- /// Unsupported arguments are ignored.
- /// See http://www.flickr.com/services/api/flickr.photos.getWithGeoData.html for supported properties.</param>
- /// <returns>A list of photos that do not contain location information.</returns>
- [Obsolete("Use the PartialSearchOptions instead")]
- public Photos PhotosGetWithoutGeoData(PhotoSearchOptions options)
- {
- PartialSearchOptions newOptions = new PartialSearchOptions(options);
- return PhotosGetWithoutGeoData(newOptions);
- }
-
- /// <summary>
- /// Gets a list of photos that contain geo location information.
- /// </summary>
- /// <remarks>
- /// Note, this method doesn't actually return the location information with the photos,
- /// unless you specify the <see cref="PhotoSearchExtras.Geo"/> option in the <c>extras</c> parameter.
- /// </remarks>
- /// <returns>A list of photos that contain Location information.</returns>
- public Photos PhotosGetWithGeoData()
- {
- PartialSearchOptions options = new PartialSearchOptions();
- return PhotosGetWithGeoData(options);
- }
-
- /// <summary>
- /// Gets a list of photos that contain geo location information.
- /// </summary>
- /// <remarks>
- /// Note, this method doesn't actually return the location information with the photos,
- /// unless you specify the <see cref="PhotoSearchExtras.Geo"/> option in the <c>extras</c> parameter.
- /// </remarks>
- /// <param name="options">A limited set of options are supported.
- /// Unsupported arguments are ignored.
- /// See http://www.flickr.com/services/api/flickr.photos.getWithGeoData.html for supported properties.</param>
- /// <returns>A list of photos that contain Location information.</returns>
- [Obsolete("Use the new PartialSearchOptions instead")]
- public Photos PhotosGetWithGeoData(PhotoSearchOptions options)
- {
- PartialSearchOptions newOptions = new PartialSearchOptions(options);
- return PhotosGetWithGeoData(newOptions);
- }
-
- /// <summary>
- /// Gets a list of photos that contain geo location information.
- /// </summary>
- /// <remarks>
- /// Note, this method doesn't actually return the location information with the photos,
- /// unless you specify the <see cref="PhotoSearchExtras.Geo"/> option in the <c>extras</c> parameter.
- /// </remarks>
- /// <param name="options">The options to filter/sort the results by.</param>
- /// <returns>A list of photos that contain Location information.</returns>
- public Photos PhotosGetWithGeoData(PartialSearchOptions options)
- {
- Hashtable parameters = new Hashtable();
- parameters.Add("method", "flickr.photos.getWithGeoData");
- Utils.PartialOptionsIntoArray(options, parameters);
-
- FlickrNet.Response response = GetResponseCache(parameters);
- if( response.Status == ResponseStatus.OK )
- {
- return response.Photos;
- }
- else
- {
- throw new FlickrApiException(response.Error);
- }
- }
-
- /// <summary>
- /// Get permissions for a photo.
- /// </summary>
- /// <param name="photoId">The id of the photo to get permissions for.</param>
- /// <returns>An instance of the <see cref="PhotoPermissions"/> class containing the permissions of the specified photo.</returns>
- public GeoPermissions PhotosGeoGetPerms(string photoId)
- {
- Hashtable parameters = new Hashtable();
- parameters.Add("method", "flickr.photos.geo.getPerms");
- parameters.Add("photo_id", photoId);
-
- FlickrNet.Response response = GetResponseCache(parameters);
-
- if( response.Status == ResponseStatus.OK )
- {
- return new GeoPermissions(response.AllElements[0]);
- }
- else
- {
- throw new FlickrApiException(response.Error);
- }
- }
-
- /// <summary>
- /// Set the permission for who can see geotagged photos on Flickr.
- /// </summary>
- /// <param name="photoId">The ID of the photo permissions to update.</param>
- /// <param name="IsPublic"></param>
- /// <param name="IsContact"></param>
- /// <param name="IsFamily"></param>
- /// <param name="IsFriend"></param>
- public void PhotosGeoSetPerms(string photoId, bool IsPublic, bool IsContact, bool IsFamily, bool IsFriend)
- {
- Hashtable parameters = new Hashtable();
- parameters.Add("method", "flickr.photos.geo.setPerms");
- parameters.Add("photo_id", photoId);
- parameters.Add("is_public", IsPublic?"1":"0");
- parameters.Add("is_contact", IsContact?"1":"0");
- parameters.Add("is_friend", IsFriend?"1":"0");
- parameters.Add("is_family", IsFamily?"1":"0");
-
- FlickrNet.Response response = GetResponseNoCache(parameters);
-
- if( response.Status == ResponseStatus.OK )
- {
- return;
- }
- else
- {
- throw new FlickrApiException(response.Error);
- }
- }
-
-
- #endregion
-
- #region [ Tests ]
- /// <summary>
- /// Can be used to call unsupported methods in the Flickr API.
- /// </summary>
- /// <remarks>
- /// Use of this method is not supported.
- /// The way the FlickrNet API Library works may mean that some methods do not return an expected result
- /// when using this method.
- /// </remarks>
- /// <param name="method">The method name, e.g. "flickr.test.null".</param>
- /// <param name="parameters">A list of parameters. Note, api_key is added by default and is not included. Can be null.</param>
- /// <returns>An array of <see cref="XmlElement"/> instances which is the expected response.</returns>
- public XmlElement[] TestGeneric(string method, NameValueCollection parameters)
- {
- Hashtable _parameters = new Hashtable();
- if( parameters != null )
- {
- foreach(string key in parameters.AllKeys)
- {
- _parameters.Add(key, parameters[key]);
- }
- }
- _parameters.Add("method", method);
-
- FlickrNet.Response response = GetResponseNoCache(_parameters);
-
- if( response.Status == ResponseStatus.OK )
- {
- return response.AllElements;
- }
- else
- {
- throw new FlickrApiException(response.Error);
- }
- }
- /// <summary>
- /// Runs the flickr.test.echo method and returned an array of <see cref="XmlElement"/> items.
- /// </summary>
- /// <param name="echoParameter">The parameter to pass to the method.</param>
- /// <param name="echoValue">The value to pass to the method with the parameter.</param>
- /// <returns>An array of <see cref="XmlElement"/> items.</returns>
- /// <remarks>
- /// The APi Key has been removed from the returned array and will not be shown.
- /// </remarks>
- /// <example>
- /// <code>
- /// XmlElement[] elements = flickr.TestEcho("¶m=value");
- /// foreach(XmlElement element in elements)
- /// {
- /// if( element.Name = "method" )
- /// Console.WriteLine("Method = " + element.InnerXml);
- /// if( element.Name = "param" )
- /// Console.WriteLine("Param = " + element.InnerXml);
- /// }
- /// </code>
- /// </example>
- public XmlElement[] TestEcho(string echoParameter, string echoValue)
- {
- Hashtable parameters = new Hashtable();
- parameters.Add("method", "flickr.test.echo");
- parameters.Add("api_key", _apiKey);
- if( echoParameter != null && echoParameter.Length > 0 )
- {
- parameters.Add(echoParameter, echoValue);
- }
-
- FlickrNet.Response response = GetResponseCache(parameters);
-
- if( response.Status == ResponseStatus.OK )
- {
- // Remove the api_key element from the array.
- XmlElement[] elements = new XmlElement[response.AllElements.Length - 1];
- int c = 0;
- foreach(XmlElement element in response.AllElements)
- {
- if(element.Name != "api_key" )
- elements[c++] = element;
- }
- return elements;
- }
- else
- {
- throw new FlickrApiException(response.Error);
- }
- }
-
- /// <summary>
- /// Test the logged in state of the current Filckr object.
- /// </summary>
- /// <returns>The <see cref="FoundUser"/> object containing the username and userid of the current user.</returns>
- public FoundUser TestLogin()
- {
- Hashtable parameters = new Hashtable();
- parameters.Add("method", "flickr.test.login");
-
- FlickrNet.Response response = GetResponseCache(parameters);
-
- if( response.Status == ResponseStatus.OK )
- {
- return new FoundUser(response.AllElements[0]);
- }
- else
- {
- throw new FlickrApiException(response.Error);
- }
- }
- #endregion
-
- #region [ Urls ]
- /// <summary>
- /// Returns the url to a group's page.
- /// </summary>
- /// <param name="groupId">The NSID of the group to fetch the url for.</param>
- /// <returns>An instance of the <see cref="Uri"/> class containing the URL of the group page.</returns>
- public Uri UrlsGetGroup(string groupId)
- {
- Hashtable parameters = new Hashtable();
- parameters.Add("method", "flickr.urls.getGroup");
- parameters.Add("api_key", _apiKey);
- parameters.Add("group_id", groupId);
-
- FlickrNet.Response response = GetResponseCache(parameters);
-
- if( response.Status == ResponseStatus.OK )
- {
- if( response.AllElements[0] != null && response.AllElements[0].Attributes["url"] != null )
- return new Uri(response.AllElements[0].Attributes["url"].Value);
- else
- return null;
- }
- else
- {
- throw new FlickrApiException(response.Error);
- }
- }
-
- /// <summary>
- /// Returns the url to a user's photos.
- /// </summary>
- /// <returns>An instance of the <see cref="Uri"/> class containing the URL for the users photos.</returns>
- public Uri UrlsGetUserPhotos()
- {
- return UrlsGetUserPhotos(null);
- }
-
- /// <summary>
- /// Returns the url to a user's photos.
- /// </summary>
- /// <param name="userId">The NSID of the user to fetch the url for. If omitted, the calling user is assumed.</param>
- /// <returns>The URL of the users photos.</returns>
- public Uri UrlsGetUserPhotos(string userId)
- {
- Hashtable parameters = new Hashtable();
- parameters.Add("method", "flickr.urls.getUserPhotos");
- if( userId != null && userId.Length > 0 ) parameters.Add("user_id", userId);
-
- FlickrNet.Response response = GetResponseCache(parameters);
-
- if( response.Status == ResponseStatus.OK )
- {
- if( response.AllElements[0] != null && response.AllElements[0].Attributes["url"] != null )
- return new Uri(response.AllElements[0].Attributes["url"].Value);
- else
- return null;
- }
- else
- {
- throw new FlickrApiException(response.Error);
- }
- }
-
- /// <summary>
- /// Returns the url to a user's profile.
- /// </summary>
- /// <returns>An instance of the <see cref="Uri"/> class containing the URL for the users profile.</returns>
- public Uri UrlsGetUserProfile()
- {
- return UrlsGetUserProfile(null);
- }
-
- /// <summary>
- /// Returns the url to a user's profile.
- /// </summary>
- /// <param name="userId">The NSID of the user to fetch the url for. If omitted, the calling user is assumed.</param>
- /// <returns>An instance of the <see cref="Uri"/> class containing the URL for the users profile.</returns>
- public Uri UrlsGetUserProfile(string userId)
- {
- Hashtable parameters = new Hashtable();
- parameters.Add("method", "flickr.urls.getUserProfile");
- if( userId != null && userId.Length > 0 ) parameters.Add("user_id", userId);
-
- FlickrNet.Response response = GetResponseCache(parameters);
-
- if( response.Status == ResponseStatus.OK )
- {
- if( response.AllElements[0] != null && response.AllElements[0].Attributes["url"] != null )
- return new Uri(response.AllElements[0].Attributes["url"].Value);
- else
- return null;
- }
- else
- {
- throw new FlickrApiException(response.Error);
- }
- }
-
- /// <summary>
- /// Returns a group NSID, given the url to a group's page or photo pool.
- /// </summary>
- /// <param name="urlToFind">The url to the group's page or photo pool.</param>
- /// <returns>The ID of the group at the specified URL on success, a null reference (Nothing in Visual Basic) if the group cannot be found.</returns>
- public string UrlsLookupGroup(string urlToFind)
- {
- Hashtable parameters = new Hashtable();
- parameters.Add("method", "flickr.urls.lookupGroup");
- parameters.Add("api_key", _apiKey);
- parameters.Add("url", urlToFind);
-
- FlickrNet.Response response = GetResponseCache(parameters);
-
- if( response.Status == ResponseStatus.OK )
- {
- if( response.AllElements[0] != null && response.AllElements[0].Attributes["id"] != null )
- {
- return response.AllElements[0].Attributes["id"].Value;
- }
- else
- {
- return null;
- }
- }
- else
- {
- if( response.Error.Code == 1 )
- return null;
- else
- throw new FlickrApiException(response.Error);
- }
- }
-
- /// <summary>
- /// Returns a user NSID, given the url to a user's photos or profile.
- /// </summary>
- /// <param name="urlToFind">Thr url to the user's profile or photos page.</param>
- /// <returns>An instance of the <see cref="FoundUser"/> class containing the users ID and username.</returns>
- public FoundUser UrlsLookupUser(string urlToFind)
- {
- Hashtable parameters = new Hashtable();
- parameters.Add("method", "flickr.urls.lookupUser");
- parameters.Add("api_key", _apiKey);
- parameters.Add("url", urlToFind);
-
- FlickrNet.Response response = GetResponseCache(parameters);
-
- if( response.Status == ResponseStatus.OK )
- {
- return new FoundUser(response.AllElements[0]);
- }
- else
- {
- throw new FlickrApiException(response.Error);
- }
- }
- #endregion
-
- #region [ Reflection ]
- /// <summary>
- /// Gets an array of supported method names for Flickr.
- /// </summary>
- /// <remarks>
- /// Note: Not all methods might be supported by the FlickrNet Library.</remarks>
- /// <returns></returns>
- public string[] ReflectionGetMethods()
- {
- Hashtable parameters = new Hashtable();
- parameters.Add("method", "flickr.reflection.getMethods");
- parameters.Add("api_key", _apiKey);
-
- FlickrNet.Response response = GetResponseCache(parameters);
-
- if( response.Status == ResponseStatus.OK )
- {
- return Methods.GetMethods(response.AllElements[0]);
- }
- else
- {
- throw new FlickrApiException(response.Error);
- }
- }
-
- /// <summary>
- /// Gets the method details for a given method.
- /// </summary>
- /// <param name="methodName">The name of the method to retrieve.</param>
- /// <returns>Returns a <see cref="Method"/> instance for the given method name.</returns>
- public Method ReflectionGetMethodInfo(string methodName)
- {
- Hashtable parameters = new Hashtable();
- parameters.Add("method", "flickr.reflection.getMethodInfo");
- parameters.Add("api_key", _apiKey);
- parameters.Add("method_name", methodName);
-
- FlickrNet.Response response = GetResponseCache(parameters);
-
- if( response.Status == ResponseStatus.OK )
- {
- return response.Method;
- }
- else
- {
- throw new FlickrApiException(response.Error);
- }
- }
-
- #endregion
-
- #region [ MD5 Hash ]
- private static string Md5Hash(string unhashed)
- {
- System.Security.Cryptography.MD5CryptoServiceProvider csp = new System.Security.Cryptography.MD5CryptoServiceProvider();
- byte[] bytes = System.Text.Encoding.UTF8.GetBytes(unhashed);
- byte[] hashedBytes = csp.ComputeHash(bytes, 0, bytes.Length);
- return BitConverter.ToString(hashedBytes).Replace("-", "").ToLower();
- }
- #endregion
-
- private void CheckApiKey()
- {
- if( ApiKey == null || ApiKey.Length == 0 )
- throw new ApiKeyRequiredException();
- }
- private void CheckRequiresAuthentication()
- {
- CheckApiKey();
-
- if( ApiSecret == null || ApiSecret.Length == 0 )
- throw new SignatureRequiredException();
- if( AuthToken == null || AuthToken.Length == 0 )
- throw new AuthenticationRequiredException();
-
- }
- }
-
-}
diff --git a/extensions/Exporters/FlickrExport/FlickrNet/FlickrApiException.cs b/extensions/Exporters/FlickrExport/FlickrNet/FlickrApiException.cs
deleted file mode 100644
index b49fb06..0000000
--- a/extensions/Exporters/FlickrExport/FlickrNet/FlickrApiException.cs
+++ /dev/null
@@ -1,46 +0,0 @@
-using System;
-
-namespace FlickrNet
-{
- /// <summary>
- /// Exception thrown when the Flickr API returned a specifi error code.
- /// </summary>
- public class FlickrApiException : FlickrException
- {
- private int code;
- private string msg = "";
-
- internal FlickrApiException(ResponseError error)
- {
- code = error.Code;
- msg = error.Message;
- }
-
- /// <summary>
- /// Get the code of the Flickr error.
- /// </summary>
- public int Code
- {
- get { return code; }
- }
-
- /// <summary>
- /// Gets the verbose message returned by Flickr.
- /// </summary>
- public string Verbose
- {
- get { return msg; }
- }
-
- /// <summary>
- /// Overrides the message to return custom error message.
- /// </summary>
- public override string Message
- {
- get
- {
- return msg + " (" + code + ")";
- }
- }
- }
-}
diff --git a/extensions/Exporters/FlickrExport/FlickrNet/FlickrConfigurationManager.cs b/extensions/Exporters/FlickrExport/FlickrNet/FlickrConfigurationManager.cs
deleted file mode 100644
index 84d4928..0000000
--- a/extensions/Exporters/FlickrExport/FlickrNet/FlickrConfigurationManager.cs
+++ /dev/null
@@ -1,40 +0,0 @@
-using System;
-using System.Configuration;
-using System.Xml;
-
-#if !WindowsCE
-namespace FlickrNet
-{
- /// <summary>
- /// Summary description for FlickrConfigurationManager.
- /// </summary>
- internal class FlickrConfigurationManager : IConfigurationSectionHandler
- {
- private static string ConfigSection = "flickrNet";
- private static FlickrConfigurationSettings settings;
-
- public FlickrConfigurationManager()
- {
- }
-
- public static FlickrConfigurationSettings Settings
- {
- get
- {
- if( settings == null )
- {
- settings = (FlickrConfigurationSettings)ConfigurationSettings.GetConfig( ConfigSection );
- }
-
- return settings;
- }
- }
-
- public object Create(object parent, object configContext, XmlNode section)
- {
- ConfigSection = section.Name;
- return new FlickrConfigurationSettings( section );
- }
- }
-}
-#endif
\ No newline at end of file
diff --git a/extensions/Exporters/FlickrExport/FlickrNet/FlickrConfigurationSettings.cs b/extensions/Exporters/FlickrExport/FlickrNet/FlickrConfigurationSettings.cs
deleted file mode 100644
index ab19ccd..0000000
--- a/extensions/Exporters/FlickrExport/FlickrNet/FlickrConfigurationSettings.cs
+++ /dev/null
@@ -1,306 +0,0 @@
-#if !WindowsCE
-using System;
-using System.Collections.Specialized ;
-using System.Xml;
-
-namespace FlickrNet
-{
- /// <summary>
- /// Configuration settings for the Flickr.Net API Library.
- /// </summary>
- /// <remarks>
- /// <p>First, register the configuration section in the configSections section:</p>
- /// <p><code><configSections>
- /// <section name="flickrNet" type="FlickrNet.FlickrConfigurationManager,FlickrNet"/>
- /// </configSections></code>
- /// </p>
- /// <p>
- /// Next, include the following config section:
- /// </p>
- /// <p><code>
- /// <flickrNet
- /// apiKey="1234567890abc" // optional
- /// secret="2134123" // optional
- /// token="234234" // optional
- /// cacheSize="1234" // optional, in bytes (defaults to 50 * 1024 * 1024 = 50MB)
- /// cacheTimeout="[d.]HH:mm:ss" // optional, defaults to 1 day (1.00:00:00) - day component is optional
- /// // e.g. 10 minutes = 00:10:00 or 1 hour = 01:00:00 or 2 days, 12 hours = 2.12:00:00
- /// >
- /// <proxy // proxy element is optional, but if included the attributes below are mandatory as mentioned
- /// ipaddress="127.0.0.1" // mandatory
- /// port="8000" // mandatory
- /// username="username" // optional, but must have password if included
- /// password="password" // optional, see username
- /// domain="domain" // optional, used for Microsoft authenticated proxy servers
- /// />
- /// </flickrNet>
- /// </code></p>
- /// </remarks>
- internal class FlickrConfigurationSettings
- {
- #region Private Variables
- private string _apiKey;
- private string _apiSecret;
- private string _apiToken;
- private int _cacheSize;
- private TimeSpan _cacheTimeout = TimeSpan.MinValue;
- private string _proxyAddress;
- private int _proxyPort;
- private bool _proxyDefined;
- private string _proxyUsername;
- private string _proxyPassword;
- private string _proxyDomain;
- private string _cacheLocation;
- private bool _cacheDisabled;
- private SupportedService _service;
- #endregion
-
- #region FlickrConfigurationSettings Constructor
- /// <summary>
- /// Loads FlickrConfigurationSettings with the settings in the config file.
- /// </summary>
- /// <param name="configNode">XmlNode containing the configuration settings.</param>
- public FlickrConfigurationSettings(XmlNode configNode)
- {
- if( configNode == null ) throw new ArgumentNullException("configNode");
-
- foreach(XmlAttribute attribute in configNode.Attributes)
- {
- switch(attribute.Name)
- {
- case "apiKey":
- _apiKey = attribute.Value;
- break;
- case "secret":
- _apiSecret = attribute.Value;
- break;
- case "token":
- _apiToken = attribute.Value;
- break;
- case "cacheDisabled":
- try
- {
- _cacheDisabled = bool.Parse(attribute.Value);
- break;
- }
- catch(FormatException ex)
- {
- throw new System.Configuration.ConfigurationException("cacheDisbled should be \"true\" or \"false\"", ex, configNode);
- }
- case "cacheSize":
- try
- {
- _cacheSize = int.Parse(attribute.Value);
- break;
- }
- catch(FormatException ex)
- {
- throw new System.Configuration.ConfigurationException("cacheSize should be integer value", ex, configNode);
- }
- case "cacheTimeout":
- try
- {
- _cacheTimeout = TimeSpan.Parse(attribute.Value);
- break;
- }
- catch(FormatException ex)
- {
- throw new System.Configuration.ConfigurationException("cacheTimeout should be TimeSpan value ([d:]HH:mm:ss)", ex, configNode);
- }
- case "cacheLocation":
- _cacheLocation = attribute.Value;
- break;
-
- case "service":
- try
- {
- _service = (SupportedService)Enum.Parse(typeof(SupportedService), attribute.Value, true);
- break;
- }
- catch(ArgumentException ex)
- {
- throw new System.Configuration.ConfigurationException("service must be one of the supported services (See SupportedServices enum)", ex, configNode);
- }
-
- default:
- throw new System.Configuration.ConfigurationException(String.Format("Unknown attribute '{0}' in flickrNet node", attribute.Name), configNode);
- }
- }
-
- foreach(XmlNode node in configNode.ChildNodes)
- {
- switch(node.Name)
- {
- case "proxy":
- ProcessProxyNode(node, configNode);
- break;
- default:
- throw new System.Configuration.ConfigurationException(String.Format("Unknown node '{0}' in flickrNet node", node.Name), configNode);
- }
- }
- }
- #endregion
-
- #region ProcessProxyNode - Constructor Helper Method
- private void ProcessProxyNode(XmlNode proxy, XmlNode configNode)
- {
- if( proxy.ChildNodes.Count > 0 )
- throw new System.Configuration.ConfigurationException("proxy element does not support child elements");
-
- _proxyDefined = true;
- foreach(XmlAttribute attribute in proxy.Attributes)
- {
-
- switch(attribute.Name)
- {
- case "ipaddress":
- _proxyAddress = attribute.Value;
- break;
- case "port":
- try
- {
- _proxyPort = int.Parse(attribute.Value);
- }
- catch(FormatException ex)
- {
- throw new System.Configuration.ConfigurationException("proxy port should be integer value", ex, configNode);
- }
- break;
- case "username":
- _proxyUsername = attribute.Value;
- break;
- case "password":
- _proxyPassword = attribute.Value;
- break;
- case "domain":
- _proxyDomain = attribute.Value;
- break;
- default:
- throw new System.Configuration.ConfigurationException(String.Format("Unknown attribute '{0}' in flickrNet/proxy node", attribute.Name), configNode);
- }
- }
-
- if( _proxyAddress == null )
- throw new System.Configuration.ConfigurationException("proxy ipaddress is mandatory if you specify the proxy element");
- if( _proxyPort == 0 )
- throw new System.Configuration.ConfigurationException("proxy port is mandatory if you specify the proxy element");
- if( _proxyUsername != null && _proxyPassword == null )
- throw new System.Configuration.ConfigurationException("proxy password must be specified if proxy username is specified");
- if( _proxyUsername == null && _proxyPassword != null )
- throw new System.Configuration.ConfigurationException("proxy username must be specified if proxy password is specified");
- if( _proxyDomain != null && _proxyUsername == null )
- throw new System.Configuration.ConfigurationException("proxy username/password must be specified if proxy domain is specified");
- }
- #endregion
-
- #region Public Properties
- /// <summary>
- /// API key. Null if not present. Optional.
- /// </summary>
- public string ApiKey
- {
- get { return _apiKey; }
- }
-
- /// <summary>
- /// Shared Secret. Null if not present. Optional.
- /// </summary>
- public string SharedSecret
- {
- get { return _apiSecret; }
- }
-
- /// <summary>
- /// API token. Null if not present. Optional.
- /// </summary>
- public string ApiToken
- {
- get { return _apiToken; }
- }
-
- /// <summary>
- /// Cache size in bytes. 0 if not present. Optional.
- /// </summary>
- public bool CacheDisabled
- {
- get { return _cacheDisabled; }
- }
-
- /// <summary>
- /// Cache size in bytes. 0 if not present. Optional.
- /// </summary>
- public int CacheSize
- {
- get { return _cacheSize; }
- }
-
- /// <summary>
- /// Cache timeout. Equals TimeSpan.MinValue is not present. Optional.
- /// </summary>
- public TimeSpan CacheTimeout
- {
- get { return _cacheTimeout; }
- }
-
- public string CacheLocation
- {
- get { return _cacheLocation; }
- }
-
- public SupportedService Service
- {
- get { return _service; }
- }
-
- /// <summary>
- /// If the proxy is defined in the configuration section.
- /// </summary>
- public bool IsProxyDefined
- {
- get { return _proxyDefined; }
- }
-
- /// <summary>
- /// If <see cref="IsProxyDefined"/> is true then this is mandatory.
- /// </summary>
- public string ProxyIPAddress
- {
- get { return _proxyAddress; }
- }
-
- /// <summary>
- /// If <see cref="IsProxyDefined"/> is true then this is mandatory.
- /// </summary>
- public int ProxyPort
- {
- get { return _proxyPort; }
- }
-
- /// <summary>
- /// The username for the proxy. Optional.
- /// </summary>
- public string ProxyUsername
- {
- get { return _proxyUsername; }
- }
-
- /// <summary>
- /// The password for the proxy. Optional.
- /// </summary>
- public string ProxyPassword
- {
- get { return _proxyPassword; }
- }
-
- /// <summary>
- /// The domain for the proxy. Optional.
- /// </summary>
- public string ProxyDomain
- {
- get { return _proxyDomain; }
- }
- #endregion
-
- }
-}
-#endif
\ No newline at end of file
diff --git a/extensions/Exporters/FlickrExport/FlickrNet/FlickrException.cs b/extensions/Exporters/FlickrExport/FlickrNet/FlickrException.cs
deleted file mode 100644
index cb43447..0000000
--- a/extensions/Exporters/FlickrExport/FlickrNet/FlickrException.cs
+++ /dev/null
@@ -1,23 +0,0 @@
-using System;
-
-namespace FlickrNet
-{
- /// <summary>
- /// Generic Flickr.Net Exception.
- /// </summary>
- [Serializable]
- public class FlickrException : Exception
- {
- internal FlickrException()
- {
- }
-
- internal FlickrException(string message) : base(message)
- {
- }
-
- internal FlickrException(string message, Exception innerException) : base(message, innerException)
- {
- }
- }
-}
diff --git a/extensions/Exporters/FlickrExport/FlickrNet/FlickrWebException.cs b/extensions/Exporters/FlickrExport/FlickrNet/FlickrWebException.cs
deleted file mode 100644
index 9fa8d19..0000000
--- a/extensions/Exporters/FlickrExport/FlickrNet/FlickrWebException.cs
+++ /dev/null
@@ -1,14 +0,0 @@
-using System;
-
-namespace FlickrNet
-{
- /// <summary>
- /// Exception thrown when a communication error occurs with a web call.
- /// </summary>
- public class FlickrWebException : FlickrException
- {
- internal FlickrWebException(string message, Exception innerException) : base(message, innerException)
- {
- }
- }
-}
diff --git a/extensions/Exporters/FlickrExport/FlickrNet/GeoAccuracy.cs b/extensions/Exporters/FlickrExport/FlickrNet/GeoAccuracy.cs
deleted file mode 100644
index 077a010..0000000
--- a/extensions/Exporters/FlickrExport/FlickrNet/GeoAccuracy.cs
+++ /dev/null
@@ -1,101 +0,0 @@
-using System;
-using System.Xml.Serialization;
-
-namespace FlickrNet
-{
- /// <summary>
- /// Geo-taggin accuracy. Used in <see cref="PhotoSearchOptions.Accuracy"/> and <see cref="BoundaryBox.Accuracy"/>.
- /// </summary>
- /// <remarks>
- /// Level descriptions are only approximate.
- /// </remarks>
- [Serializable]
- public enum GeoAccuracy
- {
- /// <summary>
- /// No accuracy level specified.
- /// </summary>
- [XmlEnum("0")]
- None = 0,
- /// <summary>
- /// World level, level 1.
- /// </summary>
- [XmlEnum("1")]
- World = 1,
- /// <summary>
- /// Level 2
- /// </summary>
- [XmlEnum("2")]
- Level2 = 2,
- /// <summary>
- /// Level 3 - approximately Country level.
- /// </summary>
- [XmlEnum("3")]
- Country = 3,
- /// <summary>
- /// Level 4
- /// </summary>
- [XmlEnum("4")]
- Level4 = 4,
- /// <summary>
- /// Level 5
- /// </summary>
- [XmlEnum("5")]
- Level5 = 5,
- /// <summary>
- /// Level 6 - approximately Region level
- /// </summary>
- [XmlEnum("6")]
- Region = 6,
- /// <summary>
- /// Level 7
- /// </summary>
- [XmlEnum("7")]
- Level7 = 7,
- /// <summary>
- /// Level 8
- /// </summary>
- [XmlEnum("8")]
- Level8 = 8,
- /// <summary>
- /// Level 9
- /// </summary>
- [XmlEnum("9")]
- Level9 = 9,
- /// <summary>
- /// Level 10
- /// </summary>
- [XmlEnum("10")]
- Level10 = 10,
- /// <summary>
- /// Level 11 - approximately City level
- /// </summary>
- [XmlEnum("11")]
- City = 11,
- /// <summary>
- /// Level 12
- /// </summary>
- [XmlEnum("12")]
- Level12 = 12,
- /// <summary>
- /// Level 13
- /// </summary>
- [XmlEnum("13")]
- Level13 = 13,
- /// <summary>
- /// Level 14
- /// </summary>
- [XmlEnum("14")]
- Level14 = 14,
- /// <summary>
- /// Level 15
- /// </summary>
- [XmlEnum("15")]
- Level15 = 15,
- /// <summary>
- /// Street level (16) - the most accurate level and the default.
- /// </summary>
- [XmlEnum("16")]
- Street = 16
- }
-}
diff --git a/extensions/Exporters/FlickrExport/FlickrNet/GeoPermissions.cs b/extensions/Exporters/FlickrExport/FlickrNet/GeoPermissions.cs
deleted file mode 100644
index 348c3fb..0000000
--- a/extensions/Exporters/FlickrExport/FlickrNet/GeoPermissions.cs
+++ /dev/null
@@ -1,73 +0,0 @@
-using System;
-using System.Xml;
-
-namespace FlickrNet
-{
- /// <summary>
- /// Permissions for the selected photo.
- /// </summary>
- [System.Serializable]
- public class GeoPermissions
- {
- private string _photoId;
- private bool _isPublic;
- private bool _isContact;
- private bool _isFriend;
- private bool _isFamily;
-
- internal GeoPermissions(XmlElement element)
- {
- if( element.Attributes.GetNamedItem("id") != null )
- _photoId = element.Attributes.GetNamedItem("id").Value;
- if( element.Attributes.GetNamedItem("ispublic") != null )
- _isPublic = element.Attributes.GetNamedItem("ispublic").Value=="1";
- if( element.Attributes.GetNamedItem("iscontact") != null )
- _isContact = element.Attributes.GetNamedItem("iscontact").Value=="1";
- if( element.Attributes.GetNamedItem("isfamily") != null )
- _isFamily = element.Attributes.GetNamedItem("isfamily").Value=="1";
- if( element.Attributes.GetNamedItem("isfriend") != null )
- _isFriend = element.Attributes.GetNamedItem("isfriend").Value=="1";
- }
-
- /// <summary>
- /// The ID for the photo whose permissions these are.
- /// </summary>
- public string PhotoId
- {
- get { return _photoId; }
- }
-
- /// <summary>
- /// Are the general unwashed (public) allowed to see the Geo Location information for this photo.
- /// </summary>
- public bool IsPublic
- {
- get { return _isPublic; }
- }
-
- /// <summary>
- /// Are contacts allowed to see the Geo Location information for this photo.
- /// </summary>
- public bool IsContact
- {
- get { return _isContact; }
- }
-
- /// <summary>
- /// Are friends allowed to see the Geo Location information for this photo.
- /// </summary>
- public bool IsFriend
- {
- get { return _isFriend; }
- }
-
- /// <summary>
- /// Are family allowed to see the Geo Location information for this photo.
- /// </summary>
- public bool IsFamily
- {
- get { return _isFamily; }
- }
-
- }
-}
diff --git a/extensions/Exporters/FlickrExport/FlickrNet/GroupSearchResults.cs b/extensions/Exporters/FlickrExport/FlickrNet/GroupSearchResults.cs
deleted file mode 100644
index cc0c206..0000000
--- a/extensions/Exporters/FlickrExport/FlickrNet/GroupSearchResults.cs
+++ /dev/null
@@ -1,165 +0,0 @@
-using System;
-using System.Xml;
-using System.Xml.XPath;
-
-namespace FlickrNet
-{
- /// <summary>
- /// Returned by <see cref="Flickr.GroupsSearch(string)"/> methods.
- /// </summary>
- public class GroupSearchResults
- {
- private int page;
-
- /// <summary>
- /// The current page that the group search results represents.
- /// </summary>
- public int Page { get { return page; } }
-
- private int pages;
-
- /// <summary>
- /// The total number of pages this search would return.
- /// </summary>
- public int Pages { get { return pages; } }
-
- private int perPage;
-
- /// <summary>
- /// The number of groups returned per photo.
- /// </summary>
- public int PerPage { get { return perPage; } }
-
- private int total;
- /// <summary>
- /// The total number of groups that where returned for the search.
- /// </summary>
- public int Total { get { return total; } }
-
- private GroupSearchResultCollection groups = new GroupSearchResultCollection();
-
- /// <summary>
- /// The collection of groups returned for this search.
- /// </summary>
- /// <example>
- /// The following code iterates through the list of groups returned:
- /// <code>
- /// GroupSearchResults results = flickr.GroupsSearch("test");
- /// foreach(GroupSearchResult result in results.Groups)
- /// {
- /// Console.WriteLine(result.GroupName);
- /// }
- /// </code>
- /// </example>
- public GroupSearchResultCollection Groups { get { return groups; } }
-
- internal GroupSearchResults(XmlElement element)
- {
- page = Convert.ToInt32(element.GetAttribute("page"));
- pages = Convert.ToInt32(element.GetAttribute("pages"));
- perPage = Convert.ToInt32(element.GetAttribute("perpage"));
- total = Convert.ToInt32(element.GetAttribute("total"));
-
- XmlNodeList gs = element.SelectNodes("group");
- groups.Clear();
- for(int i = 0; i < gs.Count; i++)
- {
- groups.Add(new GroupSearchResult(gs[i]));
- }
- }
- }
-
- /// <summary>
- /// Collection containing list of GroupSearchResult instances
- /// </summary>
- public class GroupSearchResultCollection : System.Collections.CollectionBase
- {
- /// <summary>
- /// Method for adding a new <see cref="GroupSearchResult"/> to the collection.
- /// </summary>
- /// <param name="result"></param>
- public void Add(GroupSearchResult result)
- {
- List.Add(result);
- }
-
- /// <summary>
- /// Method for adding a collection of <see cref="GroupSearchResult"/> objects (contained within a
- /// <see cref="GroupSearchResults"/> collection) to this collection.
- /// </summary>
- /// <param name="results"></param>
- public void AddRange(GroupSearchResultCollection results)
- {
- foreach(GroupSearchResult result in results)
- List.Add(result);
- }
-
- /// <summary>
- /// Return a particular <see cref="GroupSearchResult"/> based on the index.
- /// </summary>
- public GroupSearchResult this[int index]
- {
- get { return (GroupSearchResult)List[index]; }
- set { List[index] = value; }
- }
-
- /// <summary>
- /// Removes the selected result from the collection.
- /// </summary>
- /// <param name="result">The result to remove.</param>
- public void Remove(GroupSearchResult result)
- {
- List.Remove(result);
- }
-
- /// <summary>
- /// Checks if the collection contains the result.
- /// </summary>
- /// <param name="result">The result to see if the collection contains.</param>
- /// <returns>Returns true if the collecton contains the result, otherwise false.</returns>
- public bool Contains(GroupSearchResult result)
- {
- return List.Contains(result);
- }
-
- /// <summary>
- /// Copies the current collection to an array of <see cref="GroupSearchResult"/> objects.
- /// </summary>
- /// <param name="array"></param>
- /// <param name="index"></param>
- public void CopyTo(GroupSearchResult[] array, int index)
- {
- List.CopyTo(array, index);
- }
- }
-
- /// <summary>
- /// A class which encapsulates a single group search result.
- /// </summary>
- public class GroupSearchResult
- {
- private string _groupId;
- private string _groupName;
- private bool _eighteen;
-
- /// <summary>
- /// The group id for the result.
- /// </summary>
- public string GroupId { get { return _groupId; } }
- /// <summary>
- /// The group name for the result.
- /// </summary>
- public string GroupName { get { return _groupName; } }
- /// <summary>
- /// True if the group is an over eighteen (adult) group only.
- /// </summary>
- public bool EighteenPlus { get { return _eighteen; } }
-
- internal GroupSearchResult(XmlNode node)
- {
- _groupId = node.Attributes["nsid"].Value;
- _groupName = node.Attributes["name"].Value;
- _eighteen = Convert.ToInt32(node.Attributes["eighteenplus"].Value)==1;
- }
- }
-}
diff --git a/extensions/Exporters/FlickrExport/FlickrNet/Groups.cs b/extensions/Exporters/FlickrExport/FlickrNet/Groups.cs
deleted file mode 100644
index e7ea474..0000000
--- a/extensions/Exporters/FlickrExport/FlickrNet/Groups.cs
+++ /dev/null
@@ -1,416 +0,0 @@
-using System;
-using System.Xml.Serialization;
-using System.Xml.Schema;
-using System.Xml;
-
-namespace FlickrNet
-{
- /// <summary>
- /// Provides details of a particular group.
- /// </summary>
- /// <remarks>Used by <see cref="Flickr.GroupsBrowse()"/> and
- /// <see cref="Flickr.GroupsBrowse(string)"/>.</remarks>
- [System.Serializable]
- public class Group
- {
- /// <summary>
- /// The id of the group.
- /// </summary>
- [XmlAttribute("nsid", Form=XmlSchemaForm.Unqualified)]
- public string GroupId;
-
- /// <summary>
- /// The name of the group
- /// </summary>
- [XmlAttribute("name", Form=XmlSchemaForm.Unqualified)]
- public string GroupName;
-
- /// <summary>
- /// The number of memebers of the group.
- /// </summary>
- [XmlAttribute("members", Form=XmlSchemaForm.Unqualified)]
- public long Members;
- }
-
- /// <summary>
- /// Provides details of a particular group.
- /// </summary>
- /// <remarks>
- /// Used by the Url methods and <see cref="Flickr.GroupsGetInfo"/> method.
- /// The reason for a <see cref="Group"/> and <see cref="GroupFullInfo"/> are due to xml serialization
- /// incompatabilities.
- /// </remarks>
- [System.Serializable]
- public class GroupFullInfo
- {
- internal GroupFullInfo()
- {
- }
-
- internal GroupFullInfo(XmlNode node)
- {
- if( node.Attributes.GetNamedItem("id") != null )
- GroupId = node.Attributes.GetNamedItem("id").Value;
- if( node.SelectSingleNode("name") != null )
- GroupName = node.SelectSingleNode("name").InnerText;
- if( node.SelectSingleNode("description") != null )
- Description = node.SelectSingleNode("description").InnerXml;
- if( node.SelectSingleNode("members") != null )
- Members = int.Parse(node.SelectSingleNode("members").InnerText);
- if( node.SelectSingleNode("privacy") != null )
- Privacy = (PoolPrivacy)int.Parse(node.SelectSingleNode("privacy").InnerText);
-
- if( node.SelectSingleNode("throttle") != null )
- {
- XmlNode throttle = node.SelectSingleNode("throttle");
- ThrottleInfo = new GroupThrottleInfo();
- if( throttle.Attributes.GetNamedItem("count") != null )
- ThrottleInfo.Count = int.Parse(throttle.Attributes.GetNamedItem("count").Value);
- if( throttle.Attributes.GetNamedItem("mode") != null )
- ThrottleInfo.setMode(throttle.Attributes.GetNamedItem("mode").Value);
- if( throttle.Attributes.GetNamedItem("remaining") != null )
- ThrottleInfo.Remaining = int.Parse(throttle.Attributes.GetNamedItem("remaining").Value);
- }
- }
-
- /// <remarks/>
- public string GroupId;
-
- /// <remarks/>
- public string GroupName;
-
- /// <remarks/>
- public string Description;
-
- /// <remarks/>
- public long Members;
-
- /// <remarks/>
- public PoolPrivacy Privacy;
-
- /// <remarks/>
- public GroupThrottleInfo ThrottleInfo;
-
- /// <summary>
- /// Methods for automatically converting a <see cref="GroupFullInfo"/> object into
- /// and instance of a <see cref="Group"/> object.
- /// </summary>
- /// <param name="groupInfo">The incoming object.</param>
- /// <returns>The <see cref="Group"/> instance.</returns>
- public static implicit operator Group( GroupFullInfo groupInfo )
- {
- Group g = new Group();
- g.GroupId = groupInfo.GroupId;
- g.GroupName = groupInfo.GroupName;
- g.Members = groupInfo.Members;
-
- return g;
- }
-
- /// <summary>
- /// Converts the current <see cref="GroupFullInfo"/> into an instance of the
- /// <see cref="Group"/> class.
- /// </summary>
- /// <returns>A <see cref="Group"/> instance.</returns>
- public Group ToGroup()
- {
- return (Group)this;
- }
-
- }
-
- /// <summary>
- /// Throttle information about a group (i.e. posting limit)
- /// </summary>
- public class GroupThrottleInfo
- {
- /// <summary>
- /// The number of posts in each period allowed to this group.
- /// </summary>
- public int Count;
-
- /// <summary>
- /// The posting limit mode for a group.
- /// </summary>
- public GroupThrottleMode Mode;
-
- internal void setMode(string mode)
- {
- switch(mode)
- {
- case "day":
- Mode = GroupThrottleMode.PerDay;
- break;
- case "week":
- Mode = GroupThrottleMode.PerWeek;
- break;
- case "month":
- Mode = GroupThrottleMode.PerMonth;
- break;
- case "ever":
- Mode = GroupThrottleMode.Ever;
- break;
- case "none":
- Mode = GroupThrottleMode.NoLimit;
- break;
- case "disabled":
- Mode = GroupThrottleMode.Disabled;
- break;
- default:
- throw new ArgumentException(string.Format("Unknown mode found {0}", mode), "mode");
- }
- }
-
- /// <summary>
- /// The number of remainging posts allowed by this user. If unauthenticated then this will be zero.
- /// </summary>
- public int Remaining;
- }
-
- /// <summary>
- /// The posting limit most for a group.
- /// </summary>
- public enum GroupThrottleMode
- {
- /// <summary>
- /// Per day posting limit.
- /// </summary>
- PerDay,
- /// <summary>
- /// Per week posting limit.
- /// </summary>
- PerWeek,
- /// <summary>
- /// Per month posting limit.
- /// </summary>
- PerMonth,
- /// <summary>
- /// No posting limit.
- /// </summary>
- NoLimit,
- /// <summary>
- /// Posting limit is total number of photos in the group.
- /// </summary>
- Ever,
- /// <summary>
- /// Posting is disabled to this group.
- /// </summary>
- Disabled
-
- }
-
- /// <summary>
- /// Information about a group the authenticated user is a member of.
- /// </summary>
- public class MemberGroupInfo
- {
- internal static MemberGroupInfo[] GetMemberGroupInfo(XmlNode node)
- {
- XmlNodeList list = node.SelectNodes("//group");
- MemberGroupInfo[] infos = new MemberGroupInfo[list.Count];
- for(int i = 0; i < infos.Length; i++)
- {
- infos[i] = new MemberGroupInfo(list[i]);
- }
- return infos;
- }
-
- internal MemberGroupInfo(XmlNode node)
- {
- if( node.Attributes["nsid"] != null )
- _groupId = node.Attributes["nsid"].Value;
- if( node.Attributes["name"] != null )
- _groupName = node.Attributes["name"].Value;
- if( node.Attributes["admin"] != null )
- _isAdmin = node.Attributes["admin"].Value=="1";
- if( node.Attributes["privacy"] != null )
- _privacy = (PoolPrivacy)Enum.Parse(typeof(PoolPrivacy),node.Attributes["privacy"].Value, true);
- if( node.Attributes["photos"] != null )
- _numberOfPhotos = Int32.Parse(node.Attributes["photos"].Value);
- if( node.Attributes["iconserver"] != null )
- _iconServer = node.Attributes["iconserver"].Value;
- }
-
- private string _groupId;
-
- /// <summary>
- /// Property which returns the group id for the group.
- /// </summary>
- public string GroupId
- {
- get { return _groupId; }
- }
-
- private string _groupName;
-
- /// <summary>The group name.</summary>
- public string GroupName
- {
- get { return _groupName; }
- }
-
- private bool _isAdmin;
-
- /// <summary>
- /// True if the user is the admin for the group, false if they are not.
- /// </summary>
- public bool IsAdmin
- {
- get { return _isAdmin; }
- }
-
- private long _numberOfPhotos;
-
- /// <summary>
- /// The number of photos currently in the group pool.
- /// </summary>
- public long NumberOfPhotos
- {
- get { return _numberOfPhotos; }
- }
-
- private PoolPrivacy _privacy;
-
- /// <summary>
- /// The privacy of the pool (see <see cref="PoolPrivacy"/>).
- /// </summary>
- public PoolPrivacy Privacy
- {
- get { return _privacy; }
- }
-
- private string _iconServer;
-
- /// <summary>
- /// The server number for the group icon.
- /// </summary>
- public string IconServer
- {
- get { return _iconServer; }
- }
-
- /// <summary>
- /// The URL for the group icon.
- /// </summary>
- public Uri GroupIconUrl
- {
- get { return new Uri(String.Format("http://static.flickr.com/{0}/buddyicons/{1}.jpg", IconServer, GroupId)); }
- }
-
- /// <summary>
- /// The URL for the group web page.
- /// </summary>
- public Uri GroupUrl
- {
- get { return new Uri(String.Format("http://www.flickr.com/groups/{0}/", GroupId)); }
- }
-
- }
-
- /// <summary>
- /// Information about public groups for a user.
- /// </summary>
- [System.Serializable]
- public class PublicGroupInfo
- {
- internal static PublicGroupInfo[] GetPublicGroupInfo(XmlNode node)
- {
- XmlNodeList list = node.SelectNodes("//group");
- PublicGroupInfo[] infos = new PublicGroupInfo[list.Count];
- for(int i = 0; i < infos.Length; i++)
- {
- infos[i] = new PublicGroupInfo(list[i]);
- }
- return infos;
- }
-
- internal PublicGroupInfo(XmlNode node)
- {
- if( node.Attributes["nsid"] != null )
- _groupId = node.Attributes["nsid"].Value;
- if( node.Attributes["name"] != null )
- _groupName = node.Attributes["name"].Value;
- if( node.Attributes["admin"] != null )
- _isAdmin = node.Attributes["admin"].Value=="1";
- if( node.Attributes["eighteenplus"] != null )
- _isEighteenPlus = node.Attributes["eighteenplus"].Value=="1";
- }
-
- private string _groupId;
-
- /// <summary>
- /// Property which returns the group id for the group.
- /// </summary>
- public string GroupId
- {
- get { return _groupId; }
- }
-
- private string _groupName;
-
- /// <summary>The group name.</summary>
- public string GroupName
- {
- get { return _groupName; }
- }
-
- private bool _isAdmin;
-
- /// <summary>
- /// True if the user is the admin for the group, false if they are not.
- /// </summary>
- public bool IsAdmin
- {
- get { return _isAdmin; }
- }
-
- private bool _isEighteenPlus;
-
- /// <summary>
- /// Will contain 1 if the group is restricted to people who are 18 years old or over, 0 if it is not.
- /// </summary>
- public bool EighteenPlus
- {
- get { return _isEighteenPlus; }
- }
-
- /// <summary>
- /// The URL for the group web page.
- /// </summary>
- public Uri GroupUrl
- {
- get { return new Uri(String.Format("http://www.flickr.com/groups/{0}/", GroupId)); }
- }
- }
-
- /// <summary>
- /// The various pricay settings for a group.
- /// </summary>
- [System.Serializable]
- public enum PoolPrivacy
- {
- /// <summary>
- /// No privacy setting specified.
- /// </summary>
- [XmlEnum("0")]
- None = 0,
-
- /// <summary>
- /// The group is a private group. You cannot view pictures or posts until you are a
- /// member. The group is also invite only.
- /// </summary>
- [XmlEnum("1")]
- Private = 1,
- /// <summary>
- /// A public group where you can see posts and photos in the group. The group is however invite only.
- /// </summary>
- [XmlEnum("2")]
- InviteOnlyPublic = 2,
- /// <summary>
- /// A public group.
- /// </summary>
- [XmlEnum("3")]
- OpenPublic = 3
- }
-
-}
diff --git a/extensions/Exporters/FlickrExport/FlickrNet/License.txt b/extensions/Exporters/FlickrExport/FlickrNet/License.txt
deleted file mode 100644
index 1853a56..0000000
--- a/extensions/Exporters/FlickrExport/FlickrNet/License.txt
+++ /dev/null
@@ -1,19 +0,0 @@
-Flickr .Net API Library
------------------------
-All source code and information supplied as part of the Flick .Net API Library is copyright too its contributers.
-
-The source code has been released under a dual license - meaning you can use either licensed version of the library with your code.
-
-It is released under the Common Public License 1.0, a copy of which can be found at the link below.
-http://www.opensource.org/licenses/cpl.php
-
-It is released under the LGPL (GNU Lesser General Public License), a copy of which can be found at the link below.
-http://www.gnu.org/copyleft/lesser.html
-
-You are free to distribute copies of this Program in its compiled, unaltered form, including, but not limited to using it (in library form) in other .Net application, without use of this license.
-You are free to modify this code, however you must release the resulting Contributions under the CPL or the LGPL (or compatible license).
-
-Flickr API Key
---------------
-I do not have permission to include a Flickr API Key in any distribution which includes source code.
-If I do by accident then it is not included in the above license and should not be used.
diff --git a/extensions/Exporters/FlickrExport/FlickrNet/Licenses.cs b/extensions/Exporters/FlickrExport/FlickrNet/Licenses.cs
deleted file mode 100644
index d361f22..0000000
--- a/extensions/Exporters/FlickrExport/FlickrNet/Licenses.cs
+++ /dev/null
@@ -1,46 +0,0 @@
-using System;
-using System.Xml.Serialization;
-using System.Xml.Schema;
-
-namespace FlickrNet
-{
- /// <summary>
- /// A class which encapsulates a single property, an array of
- /// <see cref="License"/> objects in its <see cref="LicenseCollection"/> property.
- /// </summary>
- [System.Serializable]
- public class Licenses
- {
- /// <summary>A collection of available licenses.</summary>
- /// <remarks/>
- [XmlElement("license", Form=XmlSchemaForm.Unqualified)]
- public License[] LicenseCollection;
-
- }
-
- /// <summary>
- /// Details of a particular license available from Flickr.
- /// </summary>
- [System.Serializable]
- public class License
- {
- /// <summary>
- /// The ID of the license. Used by <see cref="Flickr.PhotosGetInfo(string)"/> and
- /// <see cref="Flickr.PhotosGetInfo(string, string)"/>.
- /// </summary>
- /// <remarks/>
- [XmlAttribute("id", Form=XmlSchemaForm.Unqualified)]
- public int LicenseId;
-
- /// <summary>The name of the license.</summary>
- /// <remarks/>
- [XmlAttribute("name", Form=XmlSchemaForm.Unqualified)]
- public string LicenseName;
-
- /// <summary>The URL for the license text.</summary>
- /// <remarks/>
- [XmlAttribute("url", Form=XmlSchemaForm.Unqualified)]
- public string LicenseUrl;
-
- }
-}
diff --git a/extensions/Exporters/FlickrExport/FlickrNet/LockFile.cs b/extensions/Exporters/FlickrExport/FlickrNet/LockFile.cs
deleted file mode 100644
index f088053..0000000
--- a/extensions/Exporters/FlickrExport/FlickrNet/LockFile.cs
+++ /dev/null
@@ -1,120 +0,0 @@
-using System;
-using System.Diagnostics;
-using System.IO;
-using System.Runtime.InteropServices;
-using System.Threading;
-
-namespace FlickrNet
-{
- /// <summary>
- /// A non-reentrant mutex that is implemented using
- /// a lock file, and thus works across processes,
- /// sessions, and machines (as long as the underlying
- /// FS provides robust r/w locking).
- ///
- /// To use:
- ///
- /// FileLock fLock = new FileLock(@"c:\foo\my.lock");
- ///
- /// using (fLock.Acquire())
- /// {
- /// // protected operations
- /// }
- /// </summary>
- internal class LockFile
- {
- private readonly string filepath;
- private readonly DisposeHelper disposeHelper;
- private Stream stream;
-
- public LockFile(string filepath)
- {
- this.filepath = filepath;
- this.disposeHelper = new DisposeHelper(this);
- }
-
- public IDisposable Acquire()
- {
- string dir = Path.GetDirectoryName(filepath);
-
- lock (this)
- {
-#if !WindowsCE
- while (stream != null)
- Monitor.Wait(this);
-#endif
-
- while (true)
- {
- if (!Directory.Exists(dir))
- Directory.CreateDirectory(dir);
- try
- {
- Debug.Assert(stream == null, "Stream was not null--programmer error");
- stream = new FileStream(filepath, FileMode.OpenOrCreate, FileAccess.Read, FileShare.None, 8, false);
- return disposeHelper;
- }
- catch (IOException ioe)
- {
- int errorCode = SafeNativeMethods.GetErrorCode(ioe);
- switch (errorCode)
- {
- case 32:
- case 33:
- case 32 | 0x1620:
- case 33 | 0x1620:
- Thread.Sleep(50);
- continue;
- default:
- throw;
- }
- }
- }
- }
- }
-
- internal void Release()
- {
- lock (this)
- {
-#if !WindowsCE
- // Doesn't hurt to pulse. Note that waiting threads will not actually
- // continue to execute until this critical section is exited.
- Monitor.PulseAll(this);
-#endif
-
- if (stream == null)
- throw new InvalidOperationException("Tried to dispose a FileLock that was not owned");
- try
- {
- stream.Close();
- try
- {
- File.Delete(filepath);
- } catch(IOException) { /* could fail if already acquired elsewhere */ }
- }
- finally
- {
- stream = null;
- }
- }
- }
-
- private class DisposeHelper : IDisposable
- {
- private readonly LockFile lockFile;
-
- public DisposeHelper(LockFile lockFile)
- {
- this.lockFile = lockFile;
- }
-
- public void Dispose()
- {
- lockFile.Release();
- }
- }
-
-
- }
-}
diff --git a/extensions/Exporters/FlickrExport/FlickrNet/Makefile.am b/extensions/Exporters/FlickrExport/FlickrNet/Makefile.am
deleted file mode 100644
index a60bd97..0000000
--- a/extensions/Exporters/FlickrExport/FlickrNet/Makefile.am
+++ /dev/null
@@ -1,83 +0,0 @@
-include $(top_srcdir)/Makefile.include
-
-ASSEMBLY_NAME = FlickrNet
-
-ASSEMBLY_SOURCES = \
- $(srcdir)/AssemblyInfo.cs \
- $(srcdir)/ActivityEvent.cs \
- $(srcdir)/ActivityItem.cs \
- $(srcdir)/ApiKeyRequiredException.cs \
- $(srcdir)/Auth.cs \
- $(srcdir)/AuthenticationRequiredException.cs \
- $(srcdir)/Blogs.cs \
- $(srcdir)/BoundaryBox.cs \
- $(srcdir)/Cache.cs \
- $(srcdir)/Categories.cs \
- $(srcdir)/Comments.cs \
- $(srcdir)/Contacts.cs \
- $(srcdir)/Context.cs \
- $(srcdir)/DateGranularity.cs \
- $(srcdir)/Enums.cs \
- $(srcdir)/ExifPhoto.cs \
- $(srcdir)/Flickr.cs \
- $(srcdir)/FlickrApiException.cs \
- $(srcdir)/FlickrWebException.cs \
- $(srcdir)/FlickrConfigurationManager.cs \
- $(srcdir)/FlickrConfigurationSettings.cs\
- $(srcdir)/FlickrException.cs \
- $(srcdir)/GeoAccuracy.cs \
- $(srcdir)/GeoPermissions.cs \
- $(srcdir)/GroupSearchResults.cs \
- $(srcdir)/Groups.cs \
- $(srcdir)/Licenses.cs \
- $(srcdir)/LockFile.cs \
- $(srcdir)/Methods.cs \
- $(srcdir)/PartialSearchOptions.cs \
- $(srcdir)/PersistentCache.cs \
- $(srcdir)/Person.cs \
- $(srcdir)/Photo.cs \
- $(srcdir)/PhotoCounts.cs \
- $(srcdir)/PhotoDates.cs \
- $(srcdir)/PhotoInfo.cs \
- $(srcdir)/PhotoLocation.cs \
- $(srcdir)/PhotoPermissions.cs \
- $(srcdir)/PhotoSearchExtras.cs \
- $(srcdir)/PhotoSearchOptions.cs \
- $(srcdir)/PhotoSearchOrder.cs \
- $(srcdir)/PhotoSets.cs \
- $(srcdir)/Photos.cs \
- $(srcdir)/Response.cs \
- $(srcdir)/ResponseXmlException.cs \
- $(srcdir)/SafeNativeMethods.cs \
- $(srcdir)/SignatureRequiredException.cs \
- $(srcdir)/Sizes.cs \
- $(srcdir)/Tags.cs \
- $(srcdir)/Uploader.cs \
- $(srcdir)/UploadProgressEvent.cs \
- $(srcdir)/User.cs \
- $(srcdir)/Utils.cs
-
-
-REFS = \
- -r:System.Web.dll \
- -r:System.Drawing.dll
-
-PKGS =
-
-ASSEMBLY = $(ASSEMBLY_NAME).dll
-
-all: $(ASSEMBLY)
-
-$(ASSEMBLY): $(ASSEMBLY_SOURCES)
- $(CSC_LIB) -out:$@ $(PKGS) $(REFS) $(ASSEMBLY_SOURCES)
-
-assemblydir = $(pkglibdir)
-assembly_DATA = $(ASSEMBLY)
-
-EXTRA_DIST = \
- $(ASSEMBLY_SOURCES) \
- License.txt
-
-CLEANFILES = \
- $(ASSEMBLY) \
- $(ASSEMBLY).mdb
diff --git a/extensions/Exporters/FlickrExport/FlickrNet/Makefile.in b/extensions/Exporters/FlickrExport/FlickrNet/Makefile.in
deleted file mode 100644
index 085eaac..0000000
--- a/extensions/Exporters/FlickrExport/FlickrNet/Makefile.in
+++ /dev/null
@@ -1,599 +0,0 @@
-# Makefile.in generated by automake 1.11.1 from Makefile.am.
-# @configure_input@
-
-# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
-# 2003, 2004, 2005, 2006, 2007, 2008, 2009 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.
-
-# This program is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
-# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
-# PARTICULAR PURPOSE.
-
- at SET_MAKE@
-
-VPATH = @srcdir@
-pkgdatadir = $(datadir)/@PACKAGE@
-pkgincludedir = $(includedir)/@PACKAGE@
-pkglibdir = $(libdir)/@PACKAGE@
-pkglibexecdir = $(libexecdir)/@PACKAGE@
-am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
-install_sh_DATA = $(install_sh) -c -m 644
-install_sh_PROGRAM = $(install_sh) -c
-install_sh_SCRIPT = $(install_sh) -c
-INSTALL_HEADER = $(INSTALL_DATA)
-transform = $(program_transform_name)
-NORMAL_INSTALL = :
-PRE_INSTALL = :
-POST_INSTALL = :
-NORMAL_UNINSTALL = :
-PRE_UNINSTALL = :
-POST_UNINSTALL = :
-build_triplet = @build@
-host_triplet = @host@
-DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in \
- $(top_srcdir)/Makefile.include
-subdir = extensions/Exporters/FlickrExport/FlickrNet
-ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
-am__aclocal_m4_deps = $(top_srcdir)/build/m4/shave/shave.m4 \
- $(top_srcdir)/build/m4/shamrock/expansions.m4 \
- $(top_srcdir)/build/m4/shamrock/mono.m4 \
- $(top_srcdir)/build/m4/shamrock/programs.m4 \
- $(top_srcdir)/acinclude.m4 $(top_srcdir)/configure.ac
-am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
- $(ACLOCAL_M4)
-mkinstalldirs = $(install_sh) -d
-CONFIG_HEADER = $(top_builddir)/config.h
-CONFIG_CLEAN_FILES =
-CONFIG_CLEAN_VPATH_FILES =
-SOURCES =
-DIST_SOURCES =
-am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`;
-am__vpath_adj = case $$p in \
- $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \
- *) f=$$p;; \
- esac;
-am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`;
-am__install_max = 40
-am__nobase_strip_setup = \
- srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'`
-am__nobase_strip = \
- for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||"
-am__nobase_list = $(am__nobase_strip_setup); \
- for p in $$list; do echo "$$p $$p"; done | \
- sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \
- $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \
- if (++n[$$2] == $(am__install_max)) \
- { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \
- END { for (dir in files) print dir, files[dir] }'
-am__base_list = \
- sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \
- sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g'
-am__installdirs = "$(DESTDIR)$(assemblydir)"
-DATA = $(assembly_DATA)
-DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
-ACLOCAL = @ACLOCAL@
-ACLOCAL_AMFLAGS = @ACLOCAL_AMFLAGS@
-ALL_LINGUAS = @ALL_LINGUAS@
-AMTAR = @AMTAR@
-AM_MAKEFLAGS = @AM_MAKEFLAGS@
-API_VERSION = @API_VERSION@
-AR = @AR@
-ASM_VERSION = @ASM_VERSION@
-AUTOCONF = @AUTOCONF@
-AUTOHEADER = @AUTOHEADER@
-AUTOMAKE = @AUTOMAKE@
-AWK = @AWK@
-CATALOGS = @CATALOGS@
-CATOBJEXT = @CATOBJEXT@
-CC = @CC@
-CCDEPMODE = @CCDEPMODE@
-CFLAGS = @CFLAGS@
-CPP = @CPP@
-CPPFLAGS = @CPPFLAGS@
-CSC_DEFINES = @CSC_DEFINES@
-CXX = @CXX@
-CXXCPP = @CXXCPP@
-CXXDEPMODE = @CXXDEPMODE@
-CXXFLAGS = @CXXFLAGS@
-CYGPATH_W = @CYGPATH_W@
-DATADIRNAME = @DATADIRNAME@
-DEFS = @DEFS@
-DEPDIR = @DEPDIR@
-DISPLAY_VERSION = @DISPLAY_VERSION@
-DISTCHECK_CONFIGURE_FLAGS = @DISTCHECK_CONFIGURE_FLAGS@
-DOC_USER_FORMATS = @DOC_USER_FORMATS@
-DSYMUTIL = @DSYMUTIL@
-DUMPBIN = @DUMPBIN@
-ECHO_C = @ECHO_C@
-ECHO_N = @ECHO_N@
-ECHO_T = @ECHO_T@
-EGREP = @EGREP@
-EXEEXT = @EXEEXT@
-EXIF_CFLAGS = @EXIF_CFLAGS@
-EXIF_LIBS = @EXIF_LIBS@
-EXIF_SOVERSION = @EXIF_SOVERSION@
-F77 = @F77@
-FC = @FC@
-FGREP = @FGREP@
-F_CFLAGS = @F_CFLAGS@
-F_LIBS = @F_LIBS@
-GAPI2CODEGEN = @GAPI2CODEGEN@
-GAPI2FIXUP = @GAPI2FIXUP@
-GAPI2PARSER = @GAPI2PARSER@
-GCONFTOOL = @GCONFTOOL@
-GCONF_SCHEMA_CONFIG_SOURCE = @GCONF_SCHEMA_CONFIG_SOURCE@
-GCONF_SCHEMA_FILE_DIR = @GCONF_SCHEMA_FILE_DIR@
-GCONF_SHARP_CFLAGS = @GCONF_SHARP_CFLAGS@
-GCONF_SHARP_LIBS = @GCONF_SHARP_LIBS@
-GETTEXT_PACKAGE = @GETTEXT_PACKAGE@
-GIO_CFLAGS = @GIO_CFLAGS@
-GIO_LIBS = @GIO_LIBS@
-GLIBSHARP_CFLAGS = @GLIBSHARP_CFLAGS@
-GLIBSHARP_LIBS = @GLIBSHARP_LIBS@
-GLIB_CFLAGS = @GLIB_CFLAGS@
-GLIB_GENMARSHAL = @GLIB_GENMARSHAL@
-GLIB_LIBS = @GLIB_LIBS@
-GLIB_MKENUMS = @GLIB_MKENUMS@
-GMOFILES = @GMOFILES@
-GMSGFMT = @GMSGFMT@
-GNOME_ICON_THEME_PREFIX = @GNOME_ICON_THEME_PREFIX@
-GNOME_SCREENSAVER_SAVERDIR = @GNOME_SCREENSAVER_SAVERDIR@
-GNOME_SCREENSAVER_THEMESDIR = @GNOME_SCREENSAVER_THEMESDIR@
-GNOME_SHARP_CFLAGS = @GNOME_SHARP_CFLAGS@
-GNOME_SHARP_LIBS = @GNOME_SHARP_LIBS@
-GOBJECT_QUERY = @GOBJECT_QUERY@
-GREP = @GREP@
-HELP_DIR = @HELP_DIR@
-ICONS_DIRECTORY = @ICONS_DIRECTORY@
-INSTALL = @INSTALL@
-INSTALL_DATA = @INSTALL_DATA@
-INSTALL_PROGRAM = @INSTALL_PROGRAM@
-INSTALL_SCRIPT = @INSTALL_SCRIPT@
-INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
-INSTOBJEXT = @INSTOBJEXT@
-INTLLIBS = @INTLLIBS@
-INTLTOOL_EXTRACT = @INTLTOOL_EXTRACT@
-INTLTOOL_MERGE = @INTLTOOL_MERGE@
-INTLTOOL_PERL = @INTLTOOL_PERL@
-INTLTOOL_UPDATE = @INTLTOOL_UPDATE@
-LCMS_CFLAGS = @LCMS_CFLAGS@
-LCMS_LIBS = @LCMS_LIBS@
-LD = @LD@
-LDFLAGS = @LDFLAGS@
-LIBEXIF_VERSION_CHECK_CFLAGS = @LIBEXIF_VERSION_CHECK_CFLAGS@
-LIBEXIF_VERSION_CHECK_LIBS = @LIBEXIF_VERSION_CHECK_LIBS@
-LIBGPHOTO2_CFLAGS = @LIBGPHOTO2_CFLAGS@
-LIBGPHOTO2_LIBS = @LIBGPHOTO2_LIBS@
-LIBJPEG = @LIBJPEG@
-LIBOBJS = @LIBOBJS@
-LIBS = @LIBS@
-LIBTOOL = @LIBTOOL@
-LIPO = @LIPO@
-LN_S = @LN_S@
-LTLIBOBJS = @LTLIBOBJS@
-MAINT = @MAINT@
-MAKEFLAGS = @MAKEFLAGS@
-MAKEINFO = @MAKEINFO@
-MCS = @MCS@
-MKDIR_P = @MKDIR_P@
-MKINSTALLDIRS = @MKINSTALLDIRS@
-MONO = @MONO@
-MONO_MODULE_CFLAGS = @MONO_MODULE_CFLAGS@
-MONO_MODULE_LIBS = @MONO_MODULE_LIBS@
-MSGFMT = @MSGFMT@
-MSGFMT_OPTS = @MSGFMT_OPTS@
-MSGMERGE = @MSGMERGE@
-NDESK_DBUS_CFLAGS = @NDESK_DBUS_CFLAGS@
-NDESK_DBUS_LIBS = @NDESK_DBUS_LIBS@
-NM = @NM@
-NMEDIT = @NMEDIT@
-NUNIT_CFLAGS = @NUNIT_CFLAGS@
-NUNIT_DEFINES = @NUNIT_DEFINES@
-NUNIT_LIBS = @NUNIT_LIBS@
-OBJC = @OBJC@
-OBJDUMP = @OBJDUMP@
-OBJEXT = @OBJEXT@
-OMF_DIR = @OMF_DIR@
-OTOOL = @OTOOL@
-OTOOL64 = @OTOOL64@
-PACKAGE = @PACKAGE@
-PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
-PACKAGE_NAME = @PACKAGE_NAME@
-PACKAGE_STRING = @PACKAGE_STRING@
-PACKAGE_TARNAME = @PACKAGE_TARNAME@
-PACKAGE_URL = @PACKAGE_URL@
-PACKAGE_VERSION = @PACKAGE_VERSION@
-PATH_SEPARATOR = @PATH_SEPARATOR@
-PKG_CONFIG = @PKG_CONFIG@
-POFILES = @POFILES@
-POSUB = @POSUB@
-PO_IN_DATADIR_FALSE = @PO_IN_DATADIR_FALSE@
-PO_IN_DATADIR_TRUE = @PO_IN_DATADIR_TRUE@
-Q = @Q@
-RANLIB = @RANLIB@
-SED = @SED@
-SET_MAKE = @SET_MAKE@
-SHELL = @SHELL@
-STRIP = @STRIP@
-TURTLEDIR = @TURTLEDIR@
-UNIQUE_CFLAGS = @UNIQUE_CFLAGS@
-UNIQUE_LIBS = @UNIQUE_LIBS@
-USE_NLS = @USE_NLS@
-V = @V@
-VERSION = @VERSION@
-WARN_CFLAGS = @WARN_CFLAGS@
-XGETTEXT = @XGETTEXT@
-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_DUMPBIN = @ac_ct_DUMPBIN@
-am__include = @am__include@
-am__leading_dot = @am__leading_dot@
-am__quote = @am__quote@
-am__tar = @am__tar@
-am__untar = @am__untar@
-bindir = @bindir@
-build = @build@
-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@
-expanded_bindir = @expanded_bindir@
-expanded_datadir = @expanded_datadir@
-expanded_libdir = @expanded_libdir@
-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@
-lt_ECHO = @lt_ECHO@
-mandir = @mandir@
-mkdir_p = @mkdir_p@
-oldincludedir = @oldincludedir@
-pdfdir = @pdfdir@
-prefix = @prefix@
-program_transform_name = @program_transform_name@
-psdir = @psdir@
-sbindir = @sbindir@
-sharedstatedir = @sharedstatedir@
-shavedir = @shavedir@
-srcdir = @srcdir@
-sysconfdir = @sysconfdir@
-target_alias = @target_alias@
-top_build_prefix = @top_build_prefix@
-top_builddir = @top_builddir@
-top_srcdir = @top_srcdir@
-DIR_DOCS = $(top_builddir)/docs
-DIR_EXTENSIONS = $(top_builddir)/extensions
-DIR_GPHOTO2 = $(top_builddir)/lib/libgphoto2-sharp
-DIR_ICONS = $(top_builddir)/icons
-DIR_JPEGTRAN = $(top_builddir)/lib/libjpegtran
-DIR_KEYRING = $(top_builddir)/lib/gnome-keyring-sharp
-DIR_LIBFSPOT = $(top_builddir)/lib/libfspot
-DIR_SEMWEB = $(top_builddir)/lib/semweb
-DIR_SRC = $(top_builddir)/src
-DIR_GIOSHARP = $(top_builddir)/lib/gio-sharp/gio
-DIR_GTKSHARPBEANS = $(top_builddir)/lib/gtk-sharp-beans
-DIR_UNIQUESHARP = $(top_builddir)/lib/unique-sharp/unique
-LINK_KEYRING = -r:$(DIR_KEYRING)/gnome-keyring-sharp.dll
-LINK_GPHOTO2 = -r:$(DIR_GPHOTO2)/libgphoto2-sharp.dll
-LINK_SEMWEB = -r:$(DIR_SEMWEB)/SemWeb.dll
-LINK_GIOSHARP = -r:$(DIR_GIOSHARP)/gio-sharp.dll
-LINK_GTKSHARPBEANS = -r:$(DIR_GTKSHARPBEANS)/gtk-sharp-beans.dll
-LINK_UNIQUESHARP = -r:$(DIR_UNIQUESHARP)/unique-sharp.dll
-CSC_FLAGS = -debug
-CSC = $(MCS) $(CSC_FLAGS) -target:exe
-CSC_LIB = $(MCS) $(CSC_FLAGS) -target:library
-MONO_DEBUGFLAGS = --debug
-RUNTIME = mono $(MONO_DEBUGFLAGS)
-ASSEMBLY_NAME = FlickrNet
-ASSEMBLY_SOURCES = \
- $(srcdir)/AssemblyInfo.cs \
- $(srcdir)/ActivityEvent.cs \
- $(srcdir)/ActivityItem.cs \
- $(srcdir)/ApiKeyRequiredException.cs \
- $(srcdir)/Auth.cs \
- $(srcdir)/AuthenticationRequiredException.cs \
- $(srcdir)/Blogs.cs \
- $(srcdir)/BoundaryBox.cs \
- $(srcdir)/Cache.cs \
- $(srcdir)/Categories.cs \
- $(srcdir)/Comments.cs \
- $(srcdir)/Contacts.cs \
- $(srcdir)/Context.cs \
- $(srcdir)/DateGranularity.cs \
- $(srcdir)/Enums.cs \
- $(srcdir)/ExifPhoto.cs \
- $(srcdir)/Flickr.cs \
- $(srcdir)/FlickrApiException.cs \
- $(srcdir)/FlickrWebException.cs \
- $(srcdir)/FlickrConfigurationManager.cs \
- $(srcdir)/FlickrConfigurationSettings.cs\
- $(srcdir)/FlickrException.cs \
- $(srcdir)/GeoAccuracy.cs \
- $(srcdir)/GeoPermissions.cs \
- $(srcdir)/GroupSearchResults.cs \
- $(srcdir)/Groups.cs \
- $(srcdir)/Licenses.cs \
- $(srcdir)/LockFile.cs \
- $(srcdir)/Methods.cs \
- $(srcdir)/PartialSearchOptions.cs \
- $(srcdir)/PersistentCache.cs \
- $(srcdir)/Person.cs \
- $(srcdir)/Photo.cs \
- $(srcdir)/PhotoCounts.cs \
- $(srcdir)/PhotoDates.cs \
- $(srcdir)/PhotoInfo.cs \
- $(srcdir)/PhotoLocation.cs \
- $(srcdir)/PhotoPermissions.cs \
- $(srcdir)/PhotoSearchExtras.cs \
- $(srcdir)/PhotoSearchOptions.cs \
- $(srcdir)/PhotoSearchOrder.cs \
- $(srcdir)/PhotoSets.cs \
- $(srcdir)/Photos.cs \
- $(srcdir)/Response.cs \
- $(srcdir)/ResponseXmlException.cs \
- $(srcdir)/SafeNativeMethods.cs \
- $(srcdir)/SignatureRequiredException.cs \
- $(srcdir)/Sizes.cs \
- $(srcdir)/Tags.cs \
- $(srcdir)/Uploader.cs \
- $(srcdir)/UploadProgressEvent.cs \
- $(srcdir)/User.cs \
- $(srcdir)/Utils.cs
-
-REFS = \
- -r:System.Web.dll \
- -r:System.Drawing.dll
-
-PKGS =
-ASSEMBLY = $(ASSEMBLY_NAME).dll
-assemblydir = $(pkglibdir)
-assembly_DATA = $(ASSEMBLY)
-EXTRA_DIST = \
- $(ASSEMBLY_SOURCES) \
- License.txt
-
-CLEANFILES = \
- $(ASSEMBLY) \
- $(ASSEMBLY).mdb
-
-all: all-am
-
-.SUFFIXES:
-$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(top_srcdir)/Makefile.include $(am__configure_deps)
- @for dep in $?; do \
- case '$(am__configure_deps)' in \
- *$$dep*) \
- ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \
- && { if test -f $@; then exit 0; else break; fi; }; \
- exit 1;; \
- esac; \
- done; \
- echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign extensions/Exporters/FlickrExport/FlickrNet/Makefile'; \
- $(am__cd) $(top_srcdir) && \
- $(AUTOMAKE) --foreign extensions/Exporters/FlickrExport/FlickrNet/Makefile
-.PRECIOUS: Makefile
-Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
- @case '$?' in \
- *config.status*) \
- cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \
- *) \
- echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \
- cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \
- esac;
-
-$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
- cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
-
-$(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps)
- cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
-$(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps)
- cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
-$(am__aclocal_m4_deps):
-
-mostlyclean-libtool:
- -rm -f *.lo
-
-clean-libtool:
- -rm -rf .libs _libs
-install-assemblyDATA: $(assembly_DATA)
- @$(NORMAL_INSTALL)
- test -z "$(assemblydir)" || $(MKDIR_P) "$(DESTDIR)$(assemblydir)"
- @list='$(assembly_DATA)'; test -n "$(assemblydir)" || list=; \
- for p in $$list; do \
- if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \
- echo "$$d$$p"; \
- done | $(am__base_list) | \
- while read files; do \
- echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(assemblydir)'"; \
- $(INSTALL_DATA) $$files "$(DESTDIR)$(assemblydir)" || exit $$?; \
- done
-
-uninstall-assemblyDATA:
- @$(NORMAL_UNINSTALL)
- @list='$(assembly_DATA)'; test -n "$(assemblydir)" || list=; \
- files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \
- test -n "$$files" || exit 0; \
- echo " ( cd '$(DESTDIR)$(assemblydir)' && rm -f" $$files ")"; \
- cd "$(DESTDIR)$(assemblydir)" && rm -f $$files
-tags: TAGS
-TAGS:
-
-ctags: CTAGS
-CTAGS:
-
-
-distdir: $(DISTFILES)
- @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; \
- if test -d $$d/$$file; then \
- dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \
- if test -d "$(distdir)/$$file"; then \
- find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
- fi; \
- if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
- cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \
- find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
- fi; \
- cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \
- else \
- test -f "$(distdir)/$$file" \
- || cp -p $$d/$$file "$(distdir)/$$file" \
- || exit 1; \
- fi; \
- done
-check-am: all-am
-check: check-am
-all-am: Makefile $(DATA)
-installdirs:
- for dir in "$(DESTDIR)$(assemblydir)"; do \
- test -z "$$dir" || $(MKDIR_P) "$$dir"; \
- done
-install: install-am
-install-exec: install-exec-am
-install-data: install-data-am
-uninstall: uninstall-am
-
-install-am: all-am
- @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
-
-installcheck: installcheck-am
-install-strip:
- $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
- install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
- `test -z '$(STRIP)' || \
- echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install
-mostlyclean-generic:
-
-clean-generic:
- -test -z "$(CLEANFILES)" || rm -f $(CLEANFILES)
-
-distclean-generic:
- -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
- -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES)
-
-maintainer-clean-generic:
- @echo "This command is intended for maintainers to use"
- @echo "it deletes files that may require special tools to rebuild."
-clean: clean-am
-
-clean-am: clean-generic clean-libtool mostlyclean-am
-
-distclean: distclean-am
- -rm -f Makefile
-distclean-am: clean-am distclean-generic
-
-dvi: dvi-am
-
-dvi-am:
-
-html: html-am
-
-html-am:
-
-info: info-am
-
-info-am:
-
-install-data-am: install-assemblyDATA
-
-install-dvi: install-dvi-am
-
-install-dvi-am:
-
-install-exec-am:
-
-install-html: install-html-am
-
-install-html-am:
-
-install-info: install-info-am
-
-install-info-am:
-
-install-man:
-
-install-pdf: install-pdf-am
-
-install-pdf-am:
-
-install-ps: install-ps-am
-
-install-ps-am:
-
-installcheck-am:
-
-maintainer-clean: maintainer-clean-am
- -rm -f Makefile
-maintainer-clean-am: distclean-am maintainer-clean-generic
-
-mostlyclean: mostlyclean-am
-
-mostlyclean-am: mostlyclean-generic mostlyclean-libtool
-
-pdf: pdf-am
-
-pdf-am:
-
-ps: ps-am
-
-ps-am:
-
-uninstall-am: uninstall-assemblyDATA
-
-.MAKE: install-am install-strip
-
-.PHONY: all all-am check check-am clean clean-generic clean-libtool \
- distclean distclean-generic distclean-libtool distdir dvi \
- dvi-am html html-am info info-am install install-am \
- install-assemblyDATA 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-generic mostlyclean-libtool pdf pdf-am ps ps-am \
- uninstall uninstall-am uninstall-assemblyDATA
-
-
-all: $(ASSEMBLY)
-
-$(ASSEMBLY): $(ASSEMBLY_SOURCES)
- $(CSC_LIB) -out:$@ $(PKGS) $(REFS) $(ASSEMBLY_SOURCES)
-
-# 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.
-.NOEXPORT:
diff --git a/extensions/Exporters/FlickrExport/FlickrNet/Methods.cs b/extensions/Exporters/FlickrExport/FlickrNet/Methods.cs
deleted file mode 100644
index befeed3..0000000
--- a/extensions/Exporters/FlickrExport/FlickrNet/Methods.cs
+++ /dev/null
@@ -1,136 +0,0 @@
-using System;
-using System.Xml;
-using System.Xml.Serialization;
-using System.Xml.Schema;
-
-namespace FlickrNet
-{
- /// <summary>
- /// Summary description for Methods.
- /// </summary>
- public class Methods
- {
- private Methods()
- {
- }
-
- internal static string[] GetMethods(XmlElement element)
- {
- XmlNodeList nodes = element.SelectNodes("method");
- string[] _methods = new string[nodes.Count];
- for(int i = 0; i < nodes.Count; i++)
- {
- _methods[i] = nodes[i].Value;
- }
- return _methods;
- }
- }
-
- /// <summary>
- /// A method supported by the Flickr API.
- /// </summary>
- /// <remarks>
- /// See <a href="http://www.flickr.com/services/api">Flickr API Documentation</a> for a complete list
- /// of methods.
- /// </remarks>
- [Serializable]
- public class Method
- {
- /// <summary>
- /// Default constructor.
- /// </summary>
- public Method()
- {
- }
-
- /// <summary>
- /// The name of the method.
- /// </summary>
- [XmlAttribute("name", Form=XmlSchemaForm.Unqualified)]
- public string Name;
-
- /// <summary>
- /// The description of the method.
- /// </summary>
- [XmlElement("description", Form=XmlSchemaForm.Unqualified)]
- public string Description;
-
- /// <summary>
- /// An example response for the method.
- /// </summary>
- [XmlElement("response", Form=XmlSchemaForm.Unqualified)]
- public string Response;
-
- /// <summary>
- /// An explanation of the example response for the method.
- /// </summary>
- [XmlElement("explanation", Form=XmlSchemaForm.Unqualified)]
- public string Explanation;
-
- /// <summary>
- /// The arguments of the method.
- /// </summary>
- [XmlElement("arguments", Form=XmlSchemaForm.Unqualified)]
- public Arguments Arguments;
-
- /// <summary>
- /// The possible errors that could be returned by the method.
- /// </summary>
- [XmlArray()]
- [XmlArrayItem("error", typeof(MethodError), Form=XmlSchemaForm.Unqualified)]
- public MethodError[] Errors;
-
- }
-
- /// <summary>
- /// An instance containing a collection of <see cref="Argument"/> instances.
- /// </summary>
- [Serializable]
- public class Arguments
- {
- /// <summary>
- /// A collection of <see cref="Argument"/> instances.
- /// </summary>
- [XmlElement("argument", Form=XmlSchemaForm.Unqualified)]
- public Argument[] ArgumentCollection;
- }
-
- /// <summary>
- /// An argument for a method.
- /// </summary>
- [Serializable]
- public class Argument
- {
- /// <summary>
- /// The name of the argument.
- /// </summary>
- [XmlElement("name")]
- public string ArgumentName;
-
- /// <summary>
- /// Is the argument optional or not.
- /// </summary>
- [XmlElement("optional")]
- public int Optional;
-
- /// <summary>
- /// The description of the argument.
- /// </summary>
- [XmlText()]
- public string ArgumentDescription;
- }
-
- /// <summary>
- /// A possible error that a method can return.
- /// </summary>
- [Serializable]
- public class MethodError
- {
- /// <summary>
- /// The code for the error.
- /// </summary>
- [XmlElement("code")]
- public int Code;
-
- }
-}
diff --git a/extensions/Exporters/FlickrExport/FlickrNet/PartialSearchOptions.cs b/extensions/Exporters/FlickrExport/FlickrNet/PartialSearchOptions.cs
deleted file mode 100644
index 7f39920..0000000
--- a/extensions/Exporters/FlickrExport/FlickrNet/PartialSearchOptions.cs
+++ /dev/null
@@ -1,179 +0,0 @@
-using System;
-
-namespace FlickrNet
-{
- /// <summary>
- /// Summary description for PartialSearchOptions.
- /// </summary>
- public class PartialSearchOptions
- {
- #region Private Variables
- private DateTime _minUploadDate = DateTime.MinValue;
- private DateTime _maxUploadDate = DateTime.MinValue;
- private DateTime _minTakenDate = DateTime.MinValue;
- private DateTime _maxTakenDate = DateTime.MinValue;
- private PhotoSearchExtras _extras = PhotoSearchExtras.None;
- private PhotoSearchSortOrder _sort = PhotoSearchSortOrder.None;
- private int _perPage = 0;
- private int _page = 0;
- private PrivacyFilter _privacyFilter = PrivacyFilter.None;
- #endregion
-
- #region Public Properties
- /// <summary>
- /// Minimum date uploaded. Defaults to <see cref="DateTime.MinValue"/> which
- /// signifies that the value is not to be used.
- /// </summary>
- public DateTime MinUploadDate
- {
- get { return _minUploadDate; }
- set { _minUploadDate = value; }
- }
-
- /// <summary>
- /// Maximum date uploaded. Defaults to <see cref="DateTime.MinValue"/> which
- /// signifies that the value is not to be used.
- /// </summary>
- public DateTime MaxUploadDate
- {
- get { return _maxUploadDate; }
- set { _maxUploadDate = value; }
- }
-
- /// <summary>
- /// Minimum date taken. Defaults to <see cref="DateTime.MinValue"/> which
- /// signifies that the value is not to be used.
- /// </summary>
- public DateTime MinTakenDate
- {
- get { return _minTakenDate; }
- set { _minTakenDate = value; }
- }
-
- /// <summary>
- /// Maximum date taken. Defaults to <see cref="DateTime.MinValue"/> which
- /// signifies that the value is not to be used.
- /// </summary>
- public DateTime MaxTakenDate
- {
- get { return _maxTakenDate; }
- set { _maxTakenDate = value; }
- }
-
- /// <summary>
- /// Optional extras to return, defaults to all. See <see cref="PhotoSearchExtras"/> for more details.
- /// </summary>
- public PhotoSearchExtras Extras
- {
- get { return _extras; }
- set { _extras = value; }
- }
-
- /// <summary>
- /// Number of photos to return per page. Defaults to 100.
- /// </summary>
- public int PerPage
- {
- get { return _perPage; }
- set { _perPage = value; }
- }
-
- /// <summary>
- /// The page to return. Defaults to page 1.
- /// </summary>
- public int Page
- {
- get { return _page; }
- set
- {
- if( value < 0 ) throw new ArgumentOutOfRangeException("Page", "Must be greater than 0");
- _page = value;
- }
- }
-
- /// <summary>
- /// The sort order of the returned list. Default is <see cref="PhotoSearchSortOrder.None"/>.
- /// </summary>
- public PhotoSearchSortOrder SortOrder
- {
- get { return _sort; }
- set { _sort = value; }
- }
-
- /// <summary>
- /// The privacy fitler to filter the search on.
- /// </summary>
- public PrivacyFilter PrivacyFilter
- {
- get { return _privacyFilter; }
- set { _privacyFilter = value; }
- }
-
- #endregion
-
- #region Constructors
- /// <summary>
- /// Default constructor.
- /// </summary>
- public PartialSearchOptions()
- {
- }
-
- /// <summary>
- /// Constructor taking a default <see cref="PhotoSearchExtras"/> parameter.
- /// </summary>
- /// <param name="extras">See <see cref="PhotoSearchExtras"/> for more details.</param>
- public PartialSearchOptions(PhotoSearchExtras extras)
- {
- Extras = extras;
- }
-
- /// <summary>
- /// Constructor taking a perPage and page parameter.
- /// </summary>
- /// <param name="perPage">The number of photos to return per page (maximum).</param>
- /// <param name="page">The page number to return.</param>
- public PartialSearchOptions(int perPage, int page)
- {
- PerPage = perPage;
- Page = page;
- }
-
- /// <summary>
- /// Constructor taking a perPage and page parameter and a default <see cref="PhotoSearchExtras"/> parameter.
- /// </summary>
- /// <param name="perPage">The number of photos to return per page (maximum).</param>
- /// <param name="page">The page number to return.</param>
- /// <param name="extras">See <see cref="PhotoSearchExtras"/> for more details.</param>
- public PartialSearchOptions(int perPage, int page, PhotoSearchExtras extras)
- {
- PerPage = perPage;
- Page = page;
- Extras = extras;
- }
- #endregion
-
- internal PartialSearchOptions(PhotoSearchOptions options)
- {
- this.Extras = options.Extras;
- this.MaxTakenDate = options.MaxTakenDate;
- this.MinTakenDate = options.MinTakenDate;
- this.MaxUploadDate = options.MaxUploadDate;
- this.MinUploadDate = options.MinUploadDate;
- this.Page = options.Page;
- this.PerPage = options.PerPage;
- this.PrivacyFilter = options.PrivacyFilter;
- }
-
- internal string ExtrasString
- {
- get { return Utils.ExtrasToString(Extras); }
- }
-
- internal string SortOrderString
- {
- get { return Utils.SortOrderToString(SortOrder); }
- }
-
- }
-}
diff --git a/extensions/Exporters/FlickrExport/FlickrNet/PersistentCache.cs b/extensions/Exporters/FlickrExport/FlickrNet/PersistentCache.cs
deleted file mode 100644
index 8ccbe12..0000000
--- a/extensions/Exporters/FlickrExport/FlickrNet/PersistentCache.cs
+++ /dev/null
@@ -1,340 +0,0 @@
-using System;
-using System.Collections;
-using System.Diagnostics;
-using System.IO;
-//using System.Runtime.Serialization.Formatters.Binary;
-
-namespace FlickrNet
-{
- /// <summary>
- /// A threadsafe cache that is backed by disk storage.
- ///
- /// All public methods that read or write state must be
- /// protected by the lockFile. Private methods should
- /// not acquire the lockFile as it is not reentrant.
- /// </summary>
- internal sealed class PersistentCache
- {
- // The in-memory representation of the cache.
- // Use SortedList instead of Hashtable only to maintain backward
- // compatibility with previous serialization scheme. If we
- // abandon backward compatibility, we should switch to Hashtable.
- private Hashtable dataTable = new Hashtable();
-
- private readonly CacheItemPersister persister;
-
- // true if dataTable contains changes vs. on-disk representation
- private bool dirty;
-
- // The persistent file representation of the cache.
- private readonly FileInfo dataFile;
- private DateTime timestamp; // last-modified time of dataFile when cache data was last known to be in sync
- private long length; // length of dataFile when cache data was last known to be in sync
- private long maxSize;
-
- // The file-based mutex. Named (dataFile.FullName + ".lock")
- private readonly LockFile lockFile;
-
- public PersistentCache(string filename, CacheItemPersister persister, long maxSize)
- {
- this.maxSize = maxSize;
- this.persister = persister;
- this.dataFile = new FileInfo(filename);
- this.lockFile = new LockFile(filename + ".lock");
- }
-
- /// <summary>
- /// Return all items in the cache. Works similarly to
- /// ArrayList.ToArray(Type).
- /// </summary>
- public ICacheItem[] ToArray(Type valueType)
- {
- using (lockFile.Acquire())
- {
- Refresh();
- string[] keys;
- Array values;
- InternalGetAll(valueType, out keys, out values);
- return (ICacheItem[]) values;
- }
- }
-
- public int Count
- {
- get
- {
- using (lockFile.Acquire())
- {
- Refresh();
- return dataTable.Count;
- }
- }
- }
-
- /// <summary>
- /// Gets the maximum size for the persistent cache.
- /// </summary>
- public long MaxSize
- {
- get { return maxSize; }
- }
-
- /// <summary>
- /// Gets or sets cache values.
- /// </summary>
- public ICacheItem this[string key]
- {
- get
- {
- if (key == null)
- throw new ArgumentNullException("key");
-
- using (lockFile.Acquire())
- {
- Refresh();
- return InternalGet(key);
- }
- }
- set
- {
- if (key == null)
- throw new ArgumentNullException("key");
-
- ICacheItem oldItem;
-
- using (lockFile.Acquire())
- {
- Refresh();
- oldItem = InternalSet(key, value);
- Persist();
- }
- if (oldItem != null)
- oldItem.OnItemFlushed();
- }
- }
-
- public ICacheItem Get(string key, TimeSpan maxAge, bool removeIfExpired)
- {
- Debug.Assert(maxAge > TimeSpan.Zero || maxAge == TimeSpan.MinValue, "maxAge should be positive, not negative");
-
- ICacheItem item;
- bool expired;
- using (lockFile.Acquire())
- {
- Refresh();
-
- item = InternalGet(key);
- expired = item != null && Expired(item.CreationTime, maxAge);
- if (expired)
- {
- if (removeIfExpired)
- {
- item = RemoveKey(key);
- Persist();
- }
- else
- item = null;
- }
- }
-
- if (expired && removeIfExpired)
- item.OnItemFlushed();
-
- return expired ? null : item;
- }
-
- public void Flush()
- {
- Shrink(0);
- }
-
- public void Shrink(long size)
- {
- if (size < 0)
- throw new ArgumentException("Cannot shrink to a negative size", "size");
-
- ArrayList flushed = new ArrayList();
-
- using (lockFile.Acquire())
- {
- Refresh();
-
- string[] keys;
- Array values;
- InternalGetAll(typeof(ICacheItem), out keys, out values);
- long totalSize = 0;
- foreach (ICacheItem cacheItem in values)
- totalSize += cacheItem.FileSize;
- for (int i = 0; i < keys.Length; i++)
- {
- if (totalSize <= size)
- break;
- ICacheItem cacheItem = (ICacheItem) values.GetValue(i);
- totalSize -= cacheItem.FileSize;
- flushed.Add(RemoveKey(keys[i]));
- }
-
- Persist();
- }
-
- foreach (ICacheItem flushedItem in flushed)
- {
- Debug.Assert(flushedItem != null, "Flushed item was null--programmer error");
- if (flushedItem != null)
- flushedItem.OnItemFlushed();
- }
- }
-
- private bool Expired(DateTime test, TimeSpan age)
- {
- if (age == TimeSpan.MinValue)
- return true;
- else if (age == TimeSpan.MaxValue)
- return false;
- else
- return test < DateTime.UtcNow - age;
- }
-
-
- private void InternalGetAll(Type valueType, out string[] keys, out Array values)
- {
- if (!typeof(ICacheItem).IsAssignableFrom(valueType))
- throw new ArgumentException("Type " + valueType.FullName + " does not implement ICacheItem", "valueType");
-
- keys = (string[]) new ArrayList(dataTable.Keys).ToArray(typeof(string));
- values = Array.CreateInstance(valueType, keys.Length);
- for (int i = 0; i < keys.Length; i++)
- values.SetValue(dataTable[keys[i]], i);
-
- Array.Sort(values, keys, new CreationTimeComparer());
- }
-
- private ICacheItem InternalGet(string key)
- {
- if (key == null)
- throw new ArgumentNullException("key");
-
- return (ICacheItem) dataTable[key];
- }
-
- /// <returns>The old value associated with <c>key</c>, if any.</returns>
- private ICacheItem InternalSet(string key, ICacheItem value)
- {
- if (key == null)
- throw new ArgumentNullException("key");
-
- ICacheItem flushedItem;
-
- flushedItem = RemoveKey(key);
- if (value != null) // don't ever let nulls get in
- dataTable[key] = value;
-
- dirty = dirty || !object.ReferenceEquals(flushedItem, value);
-
- return flushedItem;
- }
-
- private ICacheItem RemoveKey(string key)
- {
- ICacheItem cacheItem = (ICacheItem) dataTable[key];
- if (cacheItem != null)
- {
- dataTable.Remove(key);
- dirty = true;
- }
- return cacheItem;
- }
-
- private void Refresh()
- {
- Debug.Assert(!dirty, "Refreshing even though cache is dirty");
-
- DateTime newTimestamp = DateTime.MinValue;
- long newLength = -1;
- if (dataFile.Exists)
- {
- dataFile.Refresh();
- newTimestamp = dataFile.LastWriteTime;
- newLength = dataFile.Length;
- }
-
- if (timestamp != newTimestamp || length != newLength)
- {
- // file changed
- if (!dataFile.Exists)
- dataTable.Clear();
- else
- {
- Debug.WriteLine("Loading cache from disk");
- using (FileStream inStream = dataFile.Open(FileMode.Open, FileAccess.Read, FileShare.Read))
- {
- dataTable = Load(inStream);
- }
- }
- }
-
- timestamp = newTimestamp;
- length = newLength;
- dirty = false;
- }
-
- private void Persist()
- {
- if (!dirty)
- return;
-
- Debug.WriteLine("Saving cache to disk");
- using (FileStream outStream = dataFile.Open(FileMode.OpenOrCreate, FileAccess.Write, FileShare.None))
- {
- Store(outStream, dataTable);
- }
-
- dataFile.Refresh();
- timestamp = dataFile.LastWriteTime;
- length = dataFile.Length;
-
- dirty = false;
- }
-
- private Hashtable Load(Stream s)
- {
- Hashtable table = new Hashtable();
- int itemCount = Utils.ReadInt32(s);
- for (int i = 0; i < itemCount; i++)
- {
- try
- {
- string key = Utils.ReadString(s);
- ICacheItem val = persister.Read(s);
- if( val == null ) // corrupt cache file
- return table;
-
- table[key] = val;
- }
- catch(IOException)
- {
- return table;
- }
- }
- return table;
- }
-
- private void Store(Stream s, Hashtable table)
- {
- Utils.WriteInt32(s, table.Count);
- foreach (DictionaryEntry entry in table)
- {
- Utils.WriteString(s, (string) entry.Key);
- persister.Write(s, (ICacheItem) entry.Value);
- }
- }
-
- private class CreationTimeComparer : IComparer
- {
- public int Compare(object x, object y)
- {
- return ((ICacheItem)x).CreationTime.CompareTo(((ICacheItem)y).CreationTime);
- }
- }
- }
-}
diff --git a/extensions/Exporters/FlickrExport/FlickrNet/Person.cs b/extensions/Exporters/FlickrExport/FlickrNet/Person.cs
deleted file mode 100644
index 6ce9265..0000000
--- a/extensions/Exporters/FlickrExport/FlickrNet/Person.cs
+++ /dev/null
@@ -1,165 +0,0 @@
-using System;
-using System.Xml.Serialization;
-using System.Xml.Schema;
-
-namespace FlickrNet
-{
-
- /// <summary>
- /// The <see cref="Person"/> class contains details returned by the <see cref="Flickr.PeopleGetInfo"/>
- /// method.
- /// </summary>
- [System.Serializable]
- [XmlRoot("person")]
- public class Person
- {
- internal static Person SerializePerson(System.Xml.XmlNode node)
- {
- Person p = (Person)Utils.Deserialize(node, typeof(Person));
- return p;
- }
- private string _userId;
- private int _isAdmin;
- private int _isPro;
- private int _iconServer;
- private int _iconFarm;
- private string _username;
- private string _realname;
- private string _location;
- private PersonPhotosSummary _summary = new PersonPhotosSummary();
- private string _photosUrl;
- private string _profileUrl;
- private string _mboxHash;
-
- /// <summary>The user id of the user.</summary>
- /// <remarks/>
- [XmlAttribute("nsid", Form=XmlSchemaForm.Unqualified)]
- public string UserId { get { return _userId; } set { _userId = value; } }
-
- /// <summary>Is the user an administrator.
- /// 1 = admin, 0 = normal user.</summary>
- /// <remarks></remarks>
- [XmlAttribute("isadmin", Form=XmlSchemaForm.Unqualified)]
- public int IsAdmin { get { return _isAdmin; } set { _isAdmin = value; } }
-
- /// <summary>Does the user posses a pro account.
- /// 0 = free acouunt, 1 = pro account holder.</summary>
- [XmlAttribute("ispro", Form=XmlSchemaForm.Unqualified)]
- public int IsPro { get { return _isPro; } set { _isPro = value; } }
-
- /// <summary>Does the user posses a pro account.
- /// 0 = free acouunt, 1 = pro account holder.</summary>
- [XmlAttribute("iconserver", Form=XmlSchemaForm.Unqualified)]
- public int IconServer { get { return _iconServer; } set { _iconServer = value; } }
-
- /// <summary>No idea what purpose this field serves.</summary>
- [XmlAttribute("iconfarm", Form=XmlSchemaForm.Unqualified)]
- public int IconFarm { get { return _iconFarm; } set { _iconFarm = value; } }
-
- /// <summary>The users username, also known as their screenname.</summary>
- [XmlElement("username", Form=XmlSchemaForm.Unqualified)]
- public string UserName { get { return _username; } set { _username = value; } }
-
- /// <summary>The users real name, as entered in their profile.</summary>
- [XmlElement("realname", Form=XmlSchemaForm.Unqualified)]
- public string RealName { get { return _realname; } set { _realname = value; } }
-
- /// <summary>The SHA1 hash of the users email address - used for FOAF networking.</summary>
- [XmlElement("mbox_sha1sum", Form=XmlSchemaForm.Unqualified)]
- public string MailBoxSha1Hash { get { return _mboxHash; } set { _mboxHash = value; } }
-
- /// <summary>Consists of your current location followed by country.</summary>
- /// <example>e.g. Newcastle, UK.</example>
- [XmlElement("location", Form=XmlSchemaForm.Unqualified)]
- public string Location { get { return _location; } set { _location = value; } }
-
- /// <summary>Sub element containing a summary of the users photo information.</summary>
- /// <remarks/>
- [XmlElement("photos", Form=XmlSchemaForm.Unqualified)]
- public PersonPhotosSummary PhotosSummary { get { return _summary; } set { _summary = value; } }
-
- /// <summary>
- /// The users photo location on Flickr
- /// http://www.flickr.com/photos/username/
- /// </summary>
- [XmlElement("photosurl",Form=XmlSchemaForm.Unqualified)]
- public string PhotosUrl { get { return _photosUrl; } set { _photosUrl = value; } }
-
- /// <summary>
- /// The users profile location on Flickr
- /// http://www.flickr.com/people/username/
- /// </summary>
- [XmlElement("profileurl",Form=XmlSchemaForm.Unqualified)]
- public string ProfileUrl { get { return _profileUrl; } set { _profileUrl = value; } }
-
- /// <summary>
- /// Returns the <see cref="Uri"/> for the users Buddy Icon.
- /// </summary>
- [XmlIgnore()]
- public Uri BuddyIconUrl
- {
- get
- {
- if( IconServer == 0 )
- return new Uri("http://www.flickr.com/images/buddyicon.jpg");
- else
- return new Uri(String.Format("http://static.flickr.com/{0}/buddyicons/{1}.jpg", IconServer, UserId));
- }
- }
- }
-
- /// <summary>
- /// A summary of a users photos.
- /// </summary>
- [System.Serializable]
- public class PersonPhotosSummary
- {
- private int _photoCount;
- private int _views;
-
- /// <summary>The first date the user uploaded a picture, converted into <see cref="DateTime"/> format.</summary>
- [XmlIgnore()]
- public DateTime FirstDate
- {
- get { return Utils.UnixTimestampToDate(firstdate_raw); }
- }
-
- /// <summary>The first date the user took a picture, converted into <see cref="DateTime"/> format.</summary>
- [XmlIgnore()]
- public DateTime FirstTakenDate
- {
- get
- {
- if( firsttakendate_raw == null || firsttakendate_raw.Length == 0 ) return DateTime.MinValue;
- return System.DateTime.Parse(firsttakendate_raw);
- }
- }
-
- /// <summary>The total number of photos for the user.</summary>
- /// <remarks/>
- [XmlElement("count", Form=XmlSchemaForm.Unqualified)]
- public int PhotoCount
- {
- get { return _photoCount; }
- set { _photoCount = value; }
- }
-
- /// <summary>The total number of photos for the user.</summary>
- /// <remarks/>
- [XmlElement("views", Form=XmlSchemaForm.Unqualified)]
- public int Views
- {
- get { return _views; }
- set { _views = value; }
- }
-
- /// <remarks>The unix timestamp of the date the first photo was uploaded.</remarks>
- [XmlElement("firstdate", Form=XmlSchemaForm.Unqualified)]
- public string firstdate_raw;
-
- /// <remarks>The date the first photo was taken.</remarks>
- [XmlElement("firsttakendate", Form=XmlSchemaForm.Unqualified)]
- public string firsttakendate_raw;
-
- }
-}
diff --git a/extensions/Exporters/FlickrExport/FlickrNet/Photo.cs b/extensions/Exporters/FlickrExport/FlickrNet/Photo.cs
deleted file mode 100644
index 001386f..0000000
--- a/extensions/Exporters/FlickrExport/FlickrNet/Photo.cs
+++ /dev/null
@@ -1,281 +0,0 @@
-using System;
-using System.Xml.Serialization;
-using System.Xml.Schema;
-
-namespace FlickrNet
-{
- /// <remarks/>
- [System.Serializable]
- public class Photo
- {
-
- private string _photoId;
- private string _userId;
- private string _secret;
- private string _server;
- private string _farm;
- private string _title;
- private int _isPublic;
- private int _isFriend;
- private int _isFamily;
- private int _isPrimary;
- private string _license;
- private string _ownerName;
- private string _iconServer;
- private string _originalFormat;
- private string _originalSecret;
- private string _cleanTags;
- private string _machineTags;
- private decimal _latitude;
- private decimal _longitude;
- private GeoAccuracy _accuracy;
-
- /// <remarks/>
- [XmlAttribute("id", Form=XmlSchemaForm.Unqualified)]
- public string PhotoId { get { return _photoId; } set { _photoId = value; } }
-
- /// <remarks/>
- [XmlAttribute("owner", Form=XmlSchemaForm.Unqualified)]
- public string UserId { get { return _userId; } set { _userId = value; } }
-
- /// <remarks/>
- [XmlAttribute("secret", Form=XmlSchemaForm.Unqualified)]
- public string Secret { get { return _secret; } set { _secret = value; } }
-
- /// <remarks/>
- [XmlAttribute("server", Form=XmlSchemaForm.Unqualified)]
- public string Server { get { return _server; } set { _server = value; } }
-
- /// <remarks/>
- [XmlAttribute("farm", Form=XmlSchemaForm.Unqualified)]
- public string Farm { get { return _farm; } set { _farm = value; } }
-
- /// <remarks/>
- [XmlAttribute("title", Form=XmlSchemaForm.Unqualified)]
- public string Title { get { return _title; } set { _title = value; } }
-
- /// <remarks/>
- [XmlAttribute("ispublic", Form=XmlSchemaForm.Unqualified)]
- public int IsPublic { get { return _isPublic; } set { _isPublic = value; } }
-
- /// <remarks/>
- [XmlAttribute("isfriend", Form=XmlSchemaForm.Unqualified)]
- public int IsFriend { get { return _isFriend; } set { _isFriend = value; } }
-
- /// <remarks/>
- [XmlAttribute("isfamily", Form=XmlSchemaForm.Unqualified)]
- public int IsFamily { get { return _isFamily; } set { _isFamily = value; } }
-
- /// <remarks/>
- [XmlAttribute("isprimary", Form=XmlSchemaForm.Unqualified)]
- public int IsPrimary { get { return _isPrimary; } set { _isPrimary = value; } }
-
- /// <remarks/>
- [XmlAttribute("license", Form=XmlSchemaForm.Unqualified)]
- public string License { get { return _license; } set { _license = value; } }
-
- /// <remarks/>
- [XmlAttribute("dateupload", Form=XmlSchemaForm.Unqualified)]
- public string dateupload_raw;
-
- /// <summary>
- /// Converts the raw dateupload field to a <see cref="DateTime"/>.
- /// </summary>
- [XmlIgnore]
- public DateTime DateUploaded
- {
- get { return Utils.UnixTimestampToDate(dateupload_raw); }
- }
-
- /// <summary>
- /// Converts the raw lastupdate field to a <see cref="DateTime"/>.
- /// Returns <see cref="DateTime.MinValue"/> if the raw value was not returned.
- /// </summary>
- [XmlIgnore]
- public DateTime LastUpdated
- {
- get { return Utils.UnixTimestampToDate(lastupdate_raw); }
- }
-
- /// <remarks/>
- [XmlAttribute("lastupdate", Form=XmlSchemaForm.Unqualified)]
- public string lastupdate_raw;
-
- /// <remarks/>
- [XmlAttribute("dateadded", Form = XmlSchemaForm.Unqualified)]
- public string dateadded_raw;
-
- /// <summary>
- /// Converts the raw DateAdded field to a <see cref="DateTime"/>.
- /// Returns <see cref="DateTime.MinValue"/> if the raw value was not returned.
- /// </summary>
- [XmlIgnore]
- public DateTime DateAdded
- {
- get { return Utils.UnixTimestampToDate(dateadded_raw); }
- }
-
- /// <remarks/>
- [XmlAttribute("datetaken", Form=XmlSchemaForm.Unqualified)]
- public string datetaken_raw;
-
- /// <summary>
- /// Converts the raw datetaken field to a <see cref="DateTime"/>.
- /// Returns <see cref="DateTime.MinValue"/> if the raw value was not returned.
- /// </summary>
- [XmlIgnore]
- public DateTime DateTaken
- {
- get
- {
- if( datetaken_raw == null || datetaken_raw.Length == 0 ) return DateTime.MinValue;
- return System.DateTime.Parse(datetaken_raw);
- }
- }
-
- /// <remarks/>
- [XmlAttribute("ownername", Form=XmlSchemaForm.Unqualified)]
- public string OwnerName { get { return _ownerName; } set { _ownerName = value; } }
-
- /// <remarks/>
- [XmlAttribute("iconserver", Form=XmlSchemaForm.Unqualified)]
- public string IconServer { get { return _iconServer; } set { _iconServer = value; } }
-
- /// <summary>
- /// Optional extra field containing the original format (jpg, png etc) of the
- /// photo.
- /// </summary>
- [XmlAttribute("originalformat", Form=XmlSchemaForm.Unqualified)]
- public string OriginalFormat { get { return _originalFormat; } set { _originalFormat = value; } }
-
- /// <summary>
- /// Optional extra field containing the original 'secret' of the
- /// photo used for forming the Url.
- /// </summary>
- [XmlAttribute("originalsecret", Form=XmlSchemaForm.Unqualified)]
- public string OriginalSecret { get { return _originalSecret; } set { _originalSecret = value; } }
-
- /// <summary>
- /// Undocumented tags atrribute. Renamed to CleanTags.
- /// </summary>
- [Obsolete("Renamed to CleanTags, as the tags are clean, not raw")]
- public string RawTags { get { return _cleanTags; } set { _cleanTags = value; } }
-
- /// <summary>
- /// Tags, in their clean format (exception is machine tags which retain their machine encoding).
- /// </summary>
- [XmlAttribute("tags", Form=XmlSchemaForm.Unqualified)]
- public string CleanTags { get { return _cleanTags; } set { _cleanTags = value; } }
-
- /// <summary>
- /// Machine tags
- /// </summary>
- [XmlAttribute("machine_tags", Form=XmlSchemaForm.Unqualified)]
- public string MachineTags { get { return _machineTags; } set { _machineTags = value; } }
-
- /// <summary>
- /// The url to the web page for this photo. Uses the users userId, not their web alias, but
- /// will still work.
- /// </summary>
- [XmlIgnore()]
- public string WebUrl
- {
- get { return string.Format("http://www.flickr.com/photos/{0}/{1}/", UserId, PhotoId); }
- }
-
- /// <summary>
- /// The URL for the square thumbnail of a photo.
- /// </summary>
- [XmlIgnore()]
- public string SquareThumbnailUrl
- {
- get { return Utils.UrlFormat(this, "_s", "jpg"); }
- }
-
- /// <summary>
- /// The URL for the thumbnail of a photo.
- /// </summary>
- [XmlIgnore()]
- public string ThumbnailUrl
- {
- get { return Utils.UrlFormat(this, "_t", "jpg"); }
- }
-
- /// <summary>
- /// The URL for the small copy of a photo.
- /// </summary>
- [XmlIgnore()]
- public string SmallUrl
- {
- get { return Utils.UrlFormat(this, "_m", "jpg"); }
- }
-
- /// <summary>
- /// The URL for the medium copy of a photo.
- /// </summary>
- /// <remarks>There is a chance that extremely small images will not have a medium copy.
- /// Use <see cref="Flickr.PhotosGetSizes"/> to get the available URLs for a photo.</remarks>
- [XmlIgnore()]
- public string MediumUrl
- {
- get { return Utils.UrlFormat(this, "", "jpg"); }
- }
-
- /// <summary>
- /// The URL for the large copy of a photo.
- /// </summary>
- /// <remarks>There is a chance that small images will not have a large copy.
- /// Use <see cref="Flickr.PhotosGetSizes"/> to get the available URLs for a photo.</remarks>
- [XmlIgnore()]
- public string LargeUrl
- {
- get { return Utils.UrlFormat(this, "_b", "jpg"); }
- }
-
- /// <summary>
- /// If <see cref="OriginalFormat"/> was returned then this will contain the url of the original file.
- /// </summary>
- [XmlIgnore()]
- public string OriginalUrl
- {
- get
- {
- if( OriginalFormat == null || OriginalFormat.Length == 0 )
- throw new InvalidOperationException("No original format information available.");
-
- return Utils.UrlFormat(this, "_o", OriginalFormat);
- }
- }
-
- /// <summary>
- /// Latitude. Will be 0 if Geo extras not specified.
- /// </summary>
- [XmlAttribute("latitude", Form=XmlSchemaForm.Unqualified)]
- public decimal Latitude
- {
- get { return _latitude; }
- set { _latitude = value; }
- }
-
- /// <summary>
- /// Longitude. Will be 0 if Geo extras not specified.
- /// </summary>
- [XmlAttribute("longitude", Form=XmlSchemaForm.Unqualified)]
- public decimal Longitude
- {
- get { return _longitude; }
- set { _longitude = value; }
- }
-
- /// <summary>
- /// Geo-location accuracy. A value of None means that the information was not returned.
- /// </summary>
- [XmlAttribute("accuracy", Form=XmlSchemaForm.Unqualified)]
- public GeoAccuracy Accuracy
- {
- get { return _accuracy; }
- set { _accuracy = value; }
- }
- }
-
-}
diff --git a/extensions/Exporters/FlickrExport/FlickrNet/PhotoCounts.cs b/extensions/Exporters/FlickrExport/FlickrNet/PhotoCounts.cs
deleted file mode 100644
index 292b787..0000000
--- a/extensions/Exporters/FlickrExport/FlickrNet/PhotoCounts.cs
+++ /dev/null
@@ -1,62 +0,0 @@
-using System;
-using System.Xml.Serialization;
-using System.Xml.Schema;
-
-namespace FlickrNet
-{
- /// <summary>
- /// The information about the number of photos a user has.
- /// </summary>
- [System.Serializable]
- public class PhotoCounts
- {
- /// <summary>
- /// An array of <see cref="PhotoCountInfo"/> instances. Null if no counts returned.
- /// </summary>
- [XmlElement("photocount", Form=XmlSchemaForm.Unqualified)]
- public PhotoCountInfo[] PhotoCountInfoCollection = new PhotoCountInfo[0];
- }
-
- /// <summary>
- /// The specifics of a particular count.
- /// </summary>
- [System.Serializable]
- public class PhotoCountInfo
- {
- /// <summary>Total number of photos between the FromDate and the ToDate.</summary>
- /// <remarks/>
- [XmlAttribute("count", Form=XmlSchemaForm.Unqualified)]
- public int PhotoCount;
-
- /// <summary>The From date as a <see cref="DateTime"/> object.</summary>
- [XmlIgnore()]
- public DateTime FromDate
- {
- get
- {
- return Utils.UnixTimestampToDate(fromdate_raw);
- }
- }
-
- /// <summary>The To date as a <see cref="DateTime"/> object.</summary>
- [XmlIgnore()]
- public DateTime ToDate
- {
- get
- {
- return Utils.UnixTimestampToDate(todate_raw);
- }
- }
-
- /// <summary>The original from date in unix timestamp format.</summary>
- /// <remarks/>
- [XmlAttribute("fromdate", Form=XmlSchemaForm.Unqualified)]
- public string fromdate_raw;
-
- /// <summary>The original to date in unix timestamp format.</summary>
- /// <remarks/>
- [XmlAttribute("todate", Form=XmlSchemaForm.Unqualified)]
- public string todate_raw;
-
- }
-}
\ No newline at end of file
diff --git a/extensions/Exporters/FlickrExport/FlickrNet/PhotoDates.cs b/extensions/Exporters/FlickrExport/FlickrNet/PhotoDates.cs
deleted file mode 100644
index 5367004..0000000
--- a/extensions/Exporters/FlickrExport/FlickrNet/PhotoDates.cs
+++ /dev/null
@@ -1,68 +0,0 @@
-using System;
-using System.Xml.Serialization;
-using System.Xml.Schema;
-
-namespace FlickrNet
-{
- /// <summary>
- /// The date information for a photo.
- /// </summary>
- [System.Serializable]
- public class PhotoDates
- {
- /// <summary>
- /// The date the photo was posted (or uploaded).
- /// </summary>
- [XmlIgnore]
- public DateTime PostedDate
- {
- get { return Utils.UnixTimestampToDate(raw_posted); }
- }
-
- /// <summary>
- /// The raw timestamp for the date the photo was posted.
- /// </summary>
- /// <remarks>Use <see cref="PhotoDates.PostedDate"/> instead.</remarks>
- [XmlAttribute("posted", Form=XmlSchemaForm.Unqualified)]
- public long raw_posted;
-
- /// <summary>
- /// The date the photo was taken.
- /// </summary>
- [XmlIgnore]
- public DateTime TakenDate
- {
- get { return DateTime.Parse(raw_taken); }
- }
-
- /// <summary>
- /// The raw timestamp for the date the photo was taken.
- /// </summary>
- /// <remarks>Use <see cref="PhotoDates.TakenDate"/> instead.</remarks>
- [XmlAttribute("taken", Form=XmlSchemaForm.Unqualified)]
- public string raw_taken;
-
- /// <summary>
- /// The granularity of the taken date.
- /// </summary>
- [XmlAttribute("takengranularity", Form=XmlSchemaForm.Unqualified)]
- public int TakenGranularity;
-
- /// <summary>
- /// The raw timestamp for the date the photo was last updated.
- /// </summary>
- [XmlAttribute("lastupdate", Form=XmlSchemaForm.Unqualified)]
- public long raw_lastupdate;
-
- /// <summary>
- /// The date the photo was last updated (includes comments, tags, title, description etc).
- /// </summary>
- [XmlIgnore()]
- public DateTime LastUpdated
- {
- get{ return Utils.UnixTimestampToDate(raw_lastupdate); }
- }
-
- }
-
-}
diff --git a/extensions/Exporters/FlickrExport/FlickrNet/PhotoInfo.cs b/extensions/Exporters/FlickrExport/FlickrNet/PhotoInfo.cs
deleted file mode 100644
index 6894c46..0000000
--- a/extensions/Exporters/FlickrExport/FlickrNet/PhotoInfo.cs
+++ /dev/null
@@ -1,506 +0,0 @@
-using System;
-using System.Xml.Serialization;
-using System.Xml.Schema;
-
-namespace FlickrNet
-{
- /// <summary>
- /// Detailed information returned by <see cref="Flickr.PhotosGetInfo(string)"/> or <see cref="Flickr.PhotosGetInfo(string, string)"/> methods.
- /// </summary>
- [System.Serializable]
- public class PhotoInfo
- {
- private string _photoId;
- private string _secret;
- private string _server;
- private string _farm;
- private string _originalFormat;
- private string _originalSecret;
- private int _views;
- private int _comments;
- private string _title;
- private string _description;
- private PhotoInfoTags _tags = new PhotoInfoTags();
-
- /// <summary>
- /// The id of the photo.
- /// </summary>
- [XmlAttribute("id", Form=XmlSchemaForm.Unqualified)]
- public string PhotoId { get { return _photoId; } set { _photoId = value; } }
-
- /// <summary>
- /// The secret of the photo. Used to calculate the URL (amongst other things).
- /// </summary>
- [XmlAttribute("secret", Form=XmlSchemaForm.Unqualified)]
- public string Secret { get { return _secret; } set { _secret = value; } }
-
- /// <summary>
- /// The server on which the photo resides.
- /// </summary>
- [XmlAttribute("server", Form=XmlSchemaForm.Unqualified)]
- public string Server { get { return _server; } set { _server = value; } }
-
- /// <summary>
- /// The server farm on which the photo resides.
- /// </summary>
- [XmlAttribute("farm", Form=XmlSchemaForm.Unqualified)]
- public string Farm { get { return _farm; } set { _farm = value; } }
-
- /// <summary>
- /// The original format of the image (e.g. jpg, png etc).
- /// </summary>
- [XmlAttribute("originalformat", Form=XmlSchemaForm.Unqualified)]
- public string OriginalFormat { get { return _originalFormat; } set { _originalFormat = value; } }
-
- /// <summary>
- /// Optional extra field containing the original 'secret' of the
- /// photo used for forming the Url.
- /// </summary>
- [XmlAttribute("originalsecret", Form=XmlSchemaForm.Unqualified)]
- public string OriginalSecret { get { return _originalSecret; } set { _originalSecret = value; } }
-
- /// <summary>
- /// The date the photo was uploaded (or 'posted').
- /// </summary>
- [XmlIgnore()]
- public DateTime DateUploaded
- {
- get { return Utils.UnixTimestampToDate(dateuploaded_raw); }
- }
-
- /// <summary>
- /// The raw value for when the photo was uploaded.
- /// </summary>
- [XmlAttribute("dateuploaded", Form=XmlSchemaForm.Unqualified)]
- public string dateuploaded_raw;
-
- /// <summary>
- /// Is the photo a favourite of the current authorised user.
- /// Will be 0 if the user is not authorised.
- /// </summary>
- [XmlAttribute("isfavorite", Form=XmlSchemaForm.Unqualified)]
- public int IsFavourite;
-
- /// <summary>
- /// The license of the photo.
- /// </summary>
- [XmlAttribute("license", Form=XmlSchemaForm.Unqualified)]
- public int License;
-
- /// <summary>
- /// The owner of the photo.
- /// </summary>
- /// <remarks>
- /// See <see cref="PhotoInfoOwner"/> for more details.
- /// </remarks>
- [XmlElement("owner", Form=XmlSchemaForm.Unqualified)]
- public PhotoInfoOwner Owner;
-
- /// <summary>
- /// The title of the photo.
- /// </summary>
- [XmlElement("title", Form=XmlSchemaForm.Unqualified)]
- public string Title { get { return _title; } set { _title = value; } }
-
- /// <summary>
- /// The description of the photo.
- /// </summary>
- [XmlElement("description", Form=XmlSchemaForm.Unqualified)]
- public string Description { get { return _description; } set { _description = value; } }
-
- /// <summary>
- /// The visibility of the photo.
- /// </summary>
- /// <remarks>
- /// See <see cref="PhotoInfoVisibility"/> for more details.
- /// </remarks>
- [XmlElement("visibility", Form=XmlSchemaForm.Unqualified)]
- public PhotoInfoVisibility Visibility;
-
- /// <summary>
- /// The permissions of the photo.
- /// </summary>
- /// <remarks>
- /// See <see cref="PhotoInfoPermissions"/> for more details.
- /// </remarks>
- [XmlElement("permissions", Form=XmlSchemaForm.Unqualified)]
- public PhotoInfoPermissions Permissions;
-
- /// <summary>
- /// The editability of the photo.
- /// </summary>
- /// <remarks>
- /// See <see cref="PhotoInfoEditability"/> for more details.
- /// </remarks>
- [XmlElement("editability", Form=XmlSchemaForm.Unqualified)]
- public PhotoInfoEditability Editability;
-
- /// <summary>
- /// The number of comments the photo has.
- /// </summary>
- [XmlElement("comments", Form=XmlSchemaForm.Unqualified)]
- public int CommentsCount
- {
- get { return _comments; } set { _comments = value; }
- }
-
- /// <summary>
- /// The number of views the photo has.
- /// </summary>
- [XmlAttribute("views", Form=XmlSchemaForm.Unqualified)]
- public int ViewCount
- {
- get { return _views; } set { _views = value; }
- }
-
- /// <summary>
- /// The notes for the photo.
- /// </summary>
- [XmlElement("notes", Form=XmlSchemaForm.Unqualified)]
- public PhotoInfoNotes Notes;
-
- /// <summary>
- /// The tags for the photo.
- /// </summary>
- [XmlElement("tags", Form=XmlSchemaForm.Unqualified)]
- public PhotoInfoTags Tags
- {
- get { return _tags; }
- set { _tags = (value==null?new PhotoInfoTags():value); }
- }
-
- /// <summary>
- /// The EXIF tags for the photo.
- /// </summary>
- [XmlElement("exif", Form=XmlSchemaForm.Unqualified)]
- public ExifTag[] ExifTagCollection;
-
- /// <summary>
- /// The dates (uploaded and taken dates) for the photo.
- /// </summary>
- [XmlElement("dates", Form=XmlSchemaForm.Unqualified)]
- public PhotoDates Dates;
-
- /// <summary>
- /// The location information of this photo, if available.
- /// </summary>
- /// <remarks>
- /// Will be null if the photo has no location information stored on Flickr.
- /// </remarks>
- [XmlElement("location", Form=XmlSchemaForm.Unqualified)]
- public PhotoLocation Location;
-
- /// <summary>
- /// The Web url for flickr web page for this photo.
- /// </summary>
- [XmlIgnore()]
- public string WebUrl
- {
- get { return string.Format("http://www.flickr.com/photos/{0}/{1}/", Owner.UserId, PhotoId); }
- }
-
- /// <summary>
- /// The URL for the square thumbnail for the photo.
- /// </summary>
- [XmlIgnore()]
- public string SquareThumbnailUrl
- {
- get { return Utils.UrlFormat(this, "_s", "jpg"); }
- }
-
- /// <summary>
- /// The URL for the thumbnail for the photo.
- /// </summary>
- [XmlIgnore()]
- public string ThumbnailUrl
- {
- get { return Utils.UrlFormat(this, "_t", "jpg"); }
- }
-
- /// <summary>
- /// The URL for the small version of this photo.
- /// </summary>
- [XmlIgnore()]
- public string SmallUrl
- {
- get { return Utils.UrlFormat(this, "_m", "jpg"); }
- }
-
- /// <summary>
- /// The URL for the medium version of this photo.
- /// </summary>
- /// <remarks>
- /// There is no guarentee that this size of the image actually exists.
- /// Use <see cref="Flickr.PhotosGetSizes"/> to get a list of existing photo URLs.
- /// </remarks>
- [XmlIgnore()]
- public string MediumUrl
- {
- get { return Utils.UrlFormat(this, "", "jpg"); }
- }
-
- /// <summary>
- /// The URL for the large version of this photo.
- /// </summary>
- /// <remarks>
- /// There is no guarentee that this size of the image actually exists.
- /// Use <see cref="Flickr.PhotosGetSizes"/> to get a list of existing photo URLs.
- /// </remarks>
- [XmlIgnore()]
- public string LargeUrl
- {
- get { return Utils.UrlFormat(this, "_b", "jpg"); }
- }
-
- /// <summary>
- /// If <see cref="OriginalFormat"/> was returned then this will contain the url of the original file.
- /// </summary>
- [XmlIgnore()]
- public string OriginalUrl
- {
- get
- {
- if( OriginalFormat == null || OriginalFormat.Length == 0 )
- throw new InvalidOperationException("No original format information available.");
-
- return Utils.UrlFormat(this, "_o", OriginalFormat);
- }
- }
- }
-
- /// <summary>
- /// The information about the owner of a photo.
- /// </summary>
- [System.Serializable]
- public class PhotoInfoOwner
- {
- /// <summary>
- /// The id of the own of the photo.
- /// </summary>
- [XmlAttribute("nsid", Form=XmlSchemaForm.Unqualified)]
- public string UserId;
-
- /// <summary>
- /// The username of the owner of the photo.
- /// </summary>
- [XmlAttribute("username", Form=XmlSchemaForm.Unqualified)]
- public string UserName;
-
- /// <summary>
- /// The real name (as stored on Flickr) of the owner of the photo.
- /// </summary>
- [XmlAttribute("realname", Form=XmlSchemaForm.Unqualified)]
- public string RealName;
-
- /// <summary>
- /// The location (as stored on Flickr) of the owner of the photo.
- /// </summary>
- [XmlAttribute("location", Form=XmlSchemaForm.Unqualified)]
- public string Location;
- }
-
- /// <summary>
- /// The visibility of the photo.
- /// </summary>
- [System.Serializable]
- public class PhotoInfoVisibility
- {
- /// <summary>
- /// Is the photo visible to the public.
- /// </summary>
- [XmlAttribute("ispublic", Form=XmlSchemaForm.Unqualified)]
- public int IsPublic;
-
- /// <summary>
- /// Is the photo visible to contacts marked as friends.
- /// </summary>
- [XmlAttribute("isfriend", Form=XmlSchemaForm.Unqualified)]
- public int IsFriend;
-
- /// <summary>
- /// Is the photo visible to contacts marked as family.
- /// </summary>
- [XmlAttribute("isfamily", Form=XmlSchemaForm.Unqualified)]
- public int IsFamily;
- }
-
- /// <summary>
- /// Who has permissions to add information to this photo (comments, tag and notes).
- /// </summary>
- [System.Serializable]
- public class PhotoInfoPermissions
- {
- /// <summary>
- /// Who has permissions to add comments to this photo.
- /// </summary>
- [XmlAttribute("permcomment", Form=XmlSchemaForm.Unqualified)]
- public PermissionComment PermissionComment;
-
- /// <summary>
- /// Who has permissions to add meta data (tags and notes) to this photo.
- /// </summary>
- [XmlAttribute("permaddmeta", Form=XmlSchemaForm.Unqualified)]
- public PermissionAddMeta PermissionAddMeta;
- }
-
- /// <summary>
- /// Information about who can edit the details of a photo.
- /// </summary>
- [System.Serializable]
- public class PhotoInfoEditability
- {
- /// <summary>
- /// Can the authorized user add new comments.
- /// </summary>
- /// <remarks>
- /// "1" = true, "0" = false.
- /// </remarks>
- [XmlAttribute("cancomment", Form=XmlSchemaForm.Unqualified)]
- public string CanComment;
-
- /// <summary>
- /// Can the authorized user add new meta data (tags and notes).
- /// </summary>
- /// <remarks>
- /// "1" = true, "0" = false.
- /// </remarks>
- [XmlAttribute("canaddmeta", Form=XmlSchemaForm.Unqualified)]
- public string CanAddMeta;
- }
-
- /// <summary>
- /// A class containing information about the notes for a photo.
- /// </summary>
- [System.Serializable]
- public class PhotoInfoNotes
- {
- /// <summary>
- /// A collection of notes for this photo.
- /// </summary>
- [XmlElement("note", Form=XmlSchemaForm.Unqualified)]
- public PhotoInfoNote[] NoteCollection;
- }
-
- /// <summary>
- /// A class containing information about a note on a photo.
- /// </summary>
- [System.Serializable]
- public class PhotoInfoNote
- {
- /// <summary>
- /// The notes unique ID.
- /// </summary>
- [XmlAttribute("id", Form=XmlSchemaForm.Unqualified)]
- public string NoteId;
-
- /// <summary>
- /// The User ID of the user who wrote the note.
- /// </summary>
- [XmlAttribute("author", Form=XmlSchemaForm.Unqualified)]
- public string AuthorId;
-
- /// <summary>
- /// The name of the user who wrote the note.
- /// </summary>
- [XmlAttribute("authorname", Form=XmlSchemaForm.Unqualified)]
- public string AuthorName;
-
- /// <summary>
- /// The x (left) position of the top left corner of the note.
- /// </summary>
- [XmlAttribute("x", Form=XmlSchemaForm.Unqualified)]
- public int XPosition;
-
- /// <summary>
- /// The y (top) position of the top left corner of the note.
- /// </summary>
- [XmlAttribute("y", Form=XmlSchemaForm.Unqualified)]
- public int YPosition;
-
- /// <summary>
- /// The width of the note.
- /// </summary>
- [XmlAttribute("w", Form=XmlSchemaForm.Unqualified)]
- public int Width;
-
- /// <summary>
- /// The height of the note.
- /// </summary>
- [XmlAttribute("h", Form=XmlSchemaForm.Unqualified)]
- public int Height;
-
- /// <summary>
- /// The text of the note.
- /// </summary>
- [XmlText()]
- public string NoteText;
- }
-
- /// <summary>
- /// A class containing a collection of tags for the photo.
- /// </summary>
- [System.Serializable]
- public class PhotoInfoTags
- {
- private PhotoInfoTag[] _tags = new PhotoInfoTag[0];
-
- /// <summary>
- /// A collection of tags for the photo.
- /// </summary>
- [XmlElement("tag", Form=XmlSchemaForm.Unqualified)]
- public PhotoInfoTag[] TagCollection
- {
- get { return _tags; }
- set { _tags = (value==null?new PhotoInfoTag[0]:value); }
- }
- }
-
- /// <summary>
- /// The details of a tag of a photo.
- /// </summary>
- [System.Serializable]
- public class PhotoInfoTag
- {
- private int _machineTag;
- private string _tagId;
- private string _authorId;
- private string _authorName;
-
- /// <summary>
- /// The id of the tag.
- /// </summary>
- [XmlAttribute("id", Form=XmlSchemaForm.Unqualified)]
- public string TagId { get { return _tagId; } set { _tagId = value; } }
-
- /// <summary>
- /// The author id of the tag.
- /// </summary>
- [XmlAttribute("author", Form=XmlSchemaForm.Unqualified)]
- public string AuthorId { get { return _authorId; } set { _authorId = value; } }
-
- /// <summary>
- /// Author of the tag - only available if using <see cref="Flickr.TagsGetListPhoto"/>.
- /// </summary>
- [XmlAttribute("authorname", Form=XmlSchemaForm.Unqualified)]
- public string AuthorName { get { return _authorName; } set { _authorName = value; } }
-
- /// <summary>
- /// Raw copy of the tag, as the user entered it.
- /// </summary>
- [XmlAttribute("raw", Form=XmlSchemaForm.Unqualified)]
- public string Raw;
-
- /// <summary>
- /// Raw copy of the tag, as the user entered it.
- /// </summary>
- [XmlAttribute("machine_tag", Form=XmlSchemaForm.Unqualified)]
- public int IsMachineTag { get { return _machineTag; } set { _machineTag = value; } }
-
- /// <summary>
- /// The actually tag.
- /// </summary>
- [XmlText()]
- public string TagText;
- }
-
-}
diff --git a/extensions/Exporters/FlickrExport/FlickrNet/PhotoLocation.cs b/extensions/Exporters/FlickrExport/FlickrNet/PhotoLocation.cs
deleted file mode 100644
index 7197978..0000000
--- a/extensions/Exporters/FlickrExport/FlickrNet/PhotoLocation.cs
+++ /dev/null
@@ -1,37 +0,0 @@
-using System;
-using System.Xml.Serialization;
-using System.Xml.Schema;
-
-namespace FlickrNet
-{
- /// <summary>
- /// Summary description for PhotoLocation.
- /// </summary>
- public class PhotoLocation
- {
- /// <summary>
- /// Default constructor
- /// </summary>
- public PhotoLocation()
- {
- }
-
- /// <summary>
- /// The latitude of the photo.
- /// </summary>
- [XmlAttribute("latitude", Form=XmlSchemaForm.Unqualified)]
- public double Latitude;
-
- /// <summary>
- /// The longitude of the photo.
- /// </summary>
- [XmlAttribute("longitude", Form=XmlSchemaForm.Unqualified)]
- public double Longitude;
-
- /// <summary>
- /// The accuracy of the location information. See <see cref="GeoAccuracy"/> for accuracy levels.
- /// </summary>
- [XmlAttribute("accuracy", Form=XmlSchemaForm.Unqualified)]
- public GeoAccuracy Accuracy;
- }
-}
diff --git a/extensions/Exporters/FlickrExport/FlickrNet/PhotoPermissions.cs b/extensions/Exporters/FlickrExport/FlickrNet/PhotoPermissions.cs
deleted file mode 100644
index f226529..0000000
--- a/extensions/Exporters/FlickrExport/FlickrNet/PhotoPermissions.cs
+++ /dev/null
@@ -1,72 +0,0 @@
-using System;
-using System.Xml;
-
-namespace FlickrNet
-{
- /// <summary>
- /// Permissions for the selected photo.
- /// </summary>
- [System.Serializable]
- public class PhotoPermissions
- {
- private string _photoId;
- private bool _isPublic;
- private bool _isFriend;
- private bool _isFamily;
- private PermissionAddMeta _permAddMeta;
- private PermissionComment _permComment;
-
- internal PhotoPermissions(XmlElement element)
- {
- if( element.Attributes.GetNamedItem("id") != null )
- _photoId = element.Attributes.GetNamedItem("id").Value;
- if( element.Attributes.GetNamedItem("ispublic") != null )
- _isPublic = element.Attributes.GetNamedItem("ispublic").Value=="1";
- if( element.Attributes.GetNamedItem("isfamily") != null )
- _isFamily = element.Attributes.GetNamedItem("isfamily").Value=="1";
- if( element.Attributes.GetNamedItem("isfriend") != null )
- _isFriend = element.Attributes.GetNamedItem("isfriend").Value=="1";
- if( element.Attributes.GetNamedItem("permcomment") != null )
- _permComment = (PermissionComment)Enum.Parse(typeof(PermissionComment), element.Attributes.GetNamedItem("permcomment").Value, true);
- if( element.Attributes.GetNamedItem("permaddmeta") != null )
- _permAddMeta = (PermissionAddMeta)Enum.Parse(typeof(PermissionAddMeta), element.Attributes.GetNamedItem("permaddmeta").Value, true);
- }
-
- /// <remarks/>
- public string PhotoId
- {
- get { return _photoId; }
- }
-
- /// <remarks/>
- public bool IsPublic
- {
- get { return _isPublic; }
- }
-
- /// <remarks/>
- public bool IsFriend
- {
- get { return _isFriend; }
- }
-
- /// <remarks/>
- public bool IsFamily
- {
- get { return _isFamily; }
- }
-
- /// <remarks/>
- public PermissionComment PermissionComment
- {
- get { return _permComment; }
- }
-
- /// <remarks/>
- public PermissionAddMeta PermissionAddMeta
- {
- get { return _permAddMeta; }
- }
- }
-
-}
diff --git a/extensions/Exporters/FlickrExport/FlickrNet/PhotoSearchExtras.cs b/extensions/Exporters/FlickrExport/FlickrNet/PhotoSearchExtras.cs
deleted file mode 100644
index 3277a89..0000000
--- a/extensions/Exporters/FlickrExport/FlickrNet/PhotoSearchExtras.cs
+++ /dev/null
@@ -1,70 +0,0 @@
-using System;
-
-namespace FlickrNet
-{
- /// <summary>
- /// Which photo search extras to be included. Can be combined to include more than one
- /// value.
- /// </summary>
- /// <example>
- /// The following code sets options to return both the license and owner name along with
- /// the other search results.
- /// <code>
- /// PhotoSearchOptions options = new PhotoSearchOptions();
- /// options.Extras = PhotoSearchExtras.License & PhotoSearchExtras.OwnerName
- /// </code>
- /// </example>
- [Flags]
- [Serializable]
- public enum PhotoSearchExtras
- {
- /// <summary>
- /// No extras selected.
- /// </summary>
- None = 0,
- /// <summary>
- /// Returns a license.
- /// </summary>
- License = 1,
- /// <summary>
- /// Returned the date the photos was uploaded.
- /// </summary>
- DateUploaded = 2,
- /// <summary>
- /// Returned the date the photo was taken.
- /// </summary>
- DateTaken = 4,
- /// <summary>
- /// Returns the name of the owner of the photo.
- /// </summary>
- OwnerName = 8,
- /// <summary>
- /// Returns the server for the buddy icon for this user.
- /// </summary>
- IconServer = 16,
- /// <summary>
- /// Returns the extension for the original format of this photo.
- /// </summary>
- OriginalFormat = 32,
- /// <summary>
- /// Returns the date the photo was last updated.
- /// </summary>
- LastUpdated = 64,
- /// <summary>
- /// Returns Tags attribute
- /// </summary>
- Tags = 128,
- /// <summary>
- /// Geo-location information
- /// </summary>
- Geo = 256,
- /// <summary>
- /// Machine encoded tags
- /// </summary>
- MachineTags = 512,
- /// <summary>
- /// Returns all the above information.
- /// </summary>
- All = License | DateUploaded | DateTaken | OwnerName | IconServer | OriginalFormat | LastUpdated | Tags | Geo | MachineTags
- }
-}
diff --git a/extensions/Exporters/FlickrExport/FlickrNet/PhotoSearchOptions.cs b/extensions/Exporters/FlickrExport/FlickrNet/PhotoSearchOptions.cs
deleted file mode 100644
index 2dc6f6c..0000000
--- a/extensions/Exporters/FlickrExport/FlickrNet/PhotoSearchOptions.cs
+++ /dev/null
@@ -1,363 +0,0 @@
-using System;
-
-namespace FlickrNet
-{
- /// <summary>
- /// Summary description for PhotoSearchOptions.
- /// </summary>
- [Serializable]
- public class PhotoSearchOptions
- {
- private string _userId;
- private string _tags;
- private TagMode _tagMode = TagMode.None;
- private string _machineTags;
- private MachineTagMode _machineTagMode = MachineTagMode.None;
- private string _text;
- private DateTime _minUploadDate = DateTime.MinValue;
- private DateTime _maxUploadDate = DateTime.MinValue;
- private DateTime _minTakenDate = DateTime.MinValue;
- private DateTime _maxTakenDate = DateTime.MinValue;
- private System.Collections.ArrayList _licenses = new System.Collections.ArrayList();
- private PhotoSearchExtras _extras = PhotoSearchExtras.None;
- private int _perPage = 0;
- private int _page = 0;
- private PhotoSearchSortOrder _sort = PhotoSearchSortOrder.None;
- private PrivacyFilter _privacyFilter = PrivacyFilter.None;
- private BoundaryBox _boundaryBox = new BoundaryBox();
-
- /// <summary>
- /// Creates a new instance of the search options.
- /// </summary>
- public PhotoSearchOptions()
- {
- }
-
- /// <summary>
- /// Creates a new instance of the search options, setting the UserId property to the parameter
- /// passed in.
- /// </summary>
- /// <param name="userId">The ID of the User to search for.</param>
- public PhotoSearchOptions(string userId) : this(userId, null, TagMode.AllTags, null)
- {
- }
-
- /// <summary>
- /// Create an instance of the <see cref="PhotoSearchOptions"/> for a given user ID and tag list.
- /// </summary>
- /// <param name="userId">The ID of the User to search for.</param>
- /// <param name="tags">The tags (comma delimited) to search for. Will match all tags.</param>
- public PhotoSearchOptions(string userId, string tags) : this( userId, tags, TagMode.AllTags, null)
- {
- }
-
- /// <summary>
- /// Create an instance of the <see cref="PhotoSearchOptions"/> for a given user ID and tag list,
- /// with the selected tag mode.
- /// </summary>
- /// <param name="userId">The ID of the User to search for.</param>
- /// <param name="tags">The tags (comma delimited) to search for.</param>
- /// <param name="tagMode">The <see cref="TagMode"/> to use to search.</param>
- public PhotoSearchOptions(string userId, string tags, TagMode tagMode) : this( userId, tags, tagMode, null)
- {
- }
-
- /// <summary>
- /// Create an instance of the <see cref="PhotoSearchOptions"/> for a given user ID and tag list,
- /// with the selected tag mode, and containing the selected text.
- /// </summary>
- /// <param name="userId">The ID of the User to search for.</param>
- /// <param name="tags">The tags (comma delimited) to search for.</param>
- /// <param name="tagMode">The <see cref="TagMode"/> to use to search.</param>
- /// <param name="text">The text to search for in photo title and descriptions.</param>
- public PhotoSearchOptions(string userId, string tags, TagMode tagMode, string text)
- {
- this.UserId = userId;
- this.Tags = tags;
- this.TagMode = tagMode;
- this.Text = text;
- }
-
- /// <summary>
- /// The user Id of the user to search on. Defaults to null for no specific user.
- /// </summary>
- public string UserId
- {
- get { return _userId; }
- set { _userId = value; }
- }
-
- /// <summary>
- /// A comma delimited list of tags
- /// </summary>
- public string Tags
- {
- get { return _tags; }
- set { _tags = value; }
- }
-
- /// <summary>
- /// Tag mode can either be 'all', or 'any'. Defaults to <see cref="FlickrNet.TagMode.AllTags"/>
- /// </summary>
- public TagMode TagMode
- {
- get { return _tagMode; }
- set { _tagMode = value; }
- }
-
- internal string TagModeString
- {
- get
- {
- switch(_tagMode)
- {
- case TagMode.None:
- return "";
- case TagMode.AllTags:
- return "all";
- case TagMode.AnyTag:
- return "any";
- case TagMode.Boolean:
- return "bool";
- default:
- return "";
- }
- }
- }
-
- /// <summary>
- /// Search for the given machine tags.
- /// </summary>
- /// <remarks>
- /// See http://www.flickr.com/services/api/flickr.photos.search.html for details
- /// on how to search for machine tags.
- /// </remarks>
- public string MachineTags
- {
- get { return _machineTags; } set { _machineTags = value; }
- }
-
- /// <summary>
- /// The machine tag mode.
- /// </summary>
- /// <remarks>
- /// Allowed values are any and all. It defaults to any if none specified.
- /// </remarks>
- public MachineTagMode MachineTagMode
- {
- get { return _machineTagMode; } set { _machineTagMode = value; }
- }
-
- internal string MachineTagModeString
- {
- get
- {
- switch(_machineTagMode)
- {
- case MachineTagMode.None:
- return "";
- case MachineTagMode.AllTags:
- return "all";
- case MachineTagMode.AnyTag:
- return "any";
- default:
- return "";
- }
- }
- }
-
- /// <summary>
- /// Search for the given text in photo titles and descriptions.
- /// </summary>
- public string Text
- {
- get { return _text; }
- set { _text = value; }
- }
-
- /// <summary>
- /// Minimum date uploaded. Defaults to <see cref="DateTime.MinValue"/> which
- /// signifies that the value is not to be used.
- /// </summary>
- public DateTime MinUploadDate
- {
- get { return _minUploadDate; }
- set { _minUploadDate = value; }
- }
-
- /// <summary>
- /// Maximum date uploaded. Defaults to <see cref="DateTime.MinValue"/> which
- /// signifies that the value is not to be used.
- /// </summary>
- public DateTime MaxUploadDate
- {
- get { return _maxUploadDate; }
- set { _maxUploadDate = value; }
- }
-
- /// <summary>
- /// Minimum date taken. Defaults to <see cref="DateTime.MinValue"/> which
- /// signifies that the value is not to be used.
- /// </summary>
- public DateTime MinTakenDate
- {
- get { return _minTakenDate; }
- set { _minTakenDate = value; }
- }
-
- /// <summary>
- /// Maximum date taken. Defaults to <see cref="DateTime.MinValue"/> which
- /// signifies that the value is not to be used.
- /// </summary>
- public DateTime MaxTakenDate
- {
- get { return _maxTakenDate; }
- set { _maxTakenDate = value; }
- }
-
- /// <summary>
- /// Only return licenses with the selected license number.
- /// See http://www.flickr.com/services/api/flickr.photos.licenses.getInfo.html
- /// for more details on the numbers to use.
- /// </summary>
- [Obsolete("Use AddLicense/RemoveLicense to add/remove licenses")]
- public int License
- {
- get
- {
- if( _licenses.Count == 0 )
- return 0;
- else
- return (int)_licenses[0];
- }
- set
- {
- if( _licenses.Count == 0 )
- _licenses.Add(value);
- else
- _licenses[0] = value;
- }
- }
-
- /// <summary>
- /// Returns a copy of the licenses to be searched for.
- /// </summary>
- public int[] Licenses
- {
- get
- {
- return (int[])_licenses.ToArray(typeof(int));
- }
- }
-
- /// <summary>
- /// Adds a new license to the list of licenses to be searched for.
- /// </summary>
- /// <param name="license">The number of the license to search for.</param>
- public void AddLicense(int license)
- {
- if( !_licenses.Contains(license) ) _licenses.Add(license);
- }
-
- /// <summary>
- /// Removes a license from the list of licenses to be searched for.
- /// </summary>
- /// <param name="license">The number of the license to remove.</param>
- public void RemoveLicense(int license)
- {
- if( _licenses.Contains(license) ) _licenses.Remove(license);
- }
-
- /// <summary>
- /// Optional extras to return, defaults to all. See <see cref="PhotoSearchExtras"/> for more details.
- /// </summary>
- public PhotoSearchExtras Extras
- {
- get { return _extras; }
- set { _extras = value; }
- }
-
- /// <summary>
- /// Number of photos to return per page. Defaults to 100.
- /// </summary>
- public int PerPage
- {
- get { return _perPage; }
- set { _perPage = value; }
- }
-
- /// <summary>
- /// The page to return. Defaults to page 1.
- /// </summary>
- public int Page
- {
- get { return _page; }
- set
- {
- if( value < 0 ) throw new ArgumentOutOfRangeException("Page", "Must be greater than 0");
- _page = value;
- }
- }
-
- /// <summary>
- /// The sort order of the returned list. Default is <see cref="PhotoSearchSortOrder.None"/>.
- /// </summary>
- public PhotoSearchSortOrder SortOrder
- {
- get { return _sort; }
- set { _sort = value; }
- }
-
- /// <summary>
- /// The privacy fitler to filter the search on.
- /// </summary>
- public PrivacyFilter PrivacyFilter
- {
- get { return _privacyFilter; }
- set { _privacyFilter = value; }
- }
-
- /// <summary>
- /// The boundary box for which to search for geo location photos.
- /// </summary>
- public BoundaryBox BoundaryBox
- {
- get { return _boundaryBox; }
- set
- {
- if( value == null )
- _boundaryBox = new BoundaryBox();
- else
- _boundaryBox = value;
- }
- }
-
- /// <summary>
- /// The accuracy of the search for geo location photos.
- /// </summary>
- /// <remarks>
- /// Can also be set as a property of the <see cref="BoundaryBox"/> property.
- /// </remarks>
- public GeoAccuracy Accuracy
- {
- get { return _boundaryBox==null?GeoAccuracy.None:_boundaryBox.Accuracy; }
- set
- {
- if (_boundaryBox==null) { _boundaryBox = new BoundaryBox(); }
- _boundaryBox.Accuracy = value;
- }
-
- }
-
- internal string ExtrasString
- {
- get { return Utils.ExtrasToString(Extras); }
- }
-
- internal string SortOrderString
- {
- get { return Utils.SortOrderToString(_sort); }
- }
- }
-
-}
diff --git a/extensions/Exporters/FlickrExport/FlickrNet/PhotoSearchOrder.cs b/extensions/Exporters/FlickrExport/FlickrNet/PhotoSearchOrder.cs
deleted file mode 100644
index 798e43f..0000000
--- a/extensions/Exporters/FlickrExport/FlickrNet/PhotoSearchOrder.cs
+++ /dev/null
@@ -1,46 +0,0 @@
-using System;
-
-namespace FlickrNet
-{
- /// <summary>
- /// The sort order for the <see cref="Flickr.PhotosSearch(PhotoSearchOptions)"/>,
- /// <see cref="Flickr.PhotosGetWithGeoData()"/>, <see cref="Flickr.PhotosGetWithoutGeoData()"/> methods.
- /// </summary>
- [Serializable]
- public enum PhotoSearchSortOrder
- {
- /// <summary>
- /// No sort order.
- /// </summary>
- None,
- /// <summary>
- /// Sort by date uploaded (posted).
- /// </summary>
- DatePostedAsc,
- /// <summary>
- /// Sort by date uploaded (posted) in descending order.
- /// </summary>
- DatePostedDesc,
- /// <summary>
- /// Sort by date taken.
- /// </summary>
- DateTakenAsc,
- /// <summary>
- /// Sort by date taken in descending order.
- /// </summary>
- DateTakenDesc,
- /// <summary>
- /// Sort by interestingness.
- /// </summary>
- InterestingnessAsc,
- /// <summary>
- /// Sort by interestingness in descending order.
- /// </summary>
- InterestingnessDesc,
- /// <summary>
- /// Sort by relevance
- /// </summary>
- Relevance
- }
-
-}
diff --git a/extensions/Exporters/FlickrExport/FlickrNet/PhotoSets.cs b/extensions/Exporters/FlickrExport/FlickrNet/PhotoSets.cs
deleted file mode 100644
index 07a4517..0000000
--- a/extensions/Exporters/FlickrExport/FlickrNet/PhotoSets.cs
+++ /dev/null
@@ -1,200 +0,0 @@
-using System.Xml.Serialization;
-using System.Xml.Schema;
-
-namespace FlickrNet
-{
- /// <summary>
- /// Collection containing a users photosets.
- /// </summary>
- [System.Serializable]
- public class Photosets
- {
- private int _canCreate;
- private Photoset[] _photosetCollection = new Photoset[0];
-
- /// <summary>
- /// Can the user create more photosets.
- /// </summary>
- /// <remarks>
- /// 1 meants yes, 0 means no.
- /// </remarks>
- [XmlAttribute("cancreate", Form=XmlSchemaForm.Unqualified)]
- public int CanCreate
- {
- get { return _canCreate; }
- set { _canCreate = value; }
- }
-
- /// <summary>
- /// An array of <see cref="Photoset"/> objects.
- /// </summary>
- [XmlElement("photoset", Form=XmlSchemaForm.Unqualified)]
- public Photoset[] PhotosetCollection
- {
- get { return _photosetCollection; }
- set
- {
- if( value== null )
- _photosetCollection = new Photoset[0];
- else
- _photosetCollection = value;
- }
- }
- }
-
- /// <summary>
- /// A set of properties for the photoset.
- /// </summary>
- [System.Serializable]
- public class Photoset
- {
- private string _photosetId;
- private string _url;
- private string _ownerId;
- private string _primaryPhotoId;
- private string _secret;
- private string _server;
- private string _farm;
- private int _numberOfPhotos;
- private string _title;
- private string _description;
- private Photo[] _photoCollection = new Photo[0];
-
- /// <summary>
- /// The ID of the photoset.
- /// </summary>
- [XmlAttribute("id", Form=XmlSchemaForm.Unqualified)]
- public string PhotosetId
- {
- get { return _photosetId; } set { _photosetId = value; }
- }
-
- /// <summary>
- /// The URL of the photoset.
- /// </summary>
- [XmlAttribute("url", Form=XmlSchemaForm.Unqualified)]
- public string Url
- {
- get { return _url; } set { _url = value; }
- }
-
- /// <summary>
- /// The ID of the owner of the photoset.
- /// </summary>
- [XmlAttribute("owner", Form=XmlSchemaForm.Unqualified)]
- public string OwnerId
- {
- get { return _ownerId; } set { _ownerId = value; }
- }
-
- /// <summary>
- /// The photo ID of the primary photo of the photoset.
- /// </summary>
- [XmlAttribute("primary", Form=XmlSchemaForm.Unqualified)]
- public string PrimaryPhotoId
- {
- get { return _primaryPhotoId; } set { _primaryPhotoId = value; }
- }
-
- /// <summary>
- /// The secret for the primary photo for the photoset.
- /// </summary>
- [XmlAttribute("secret", Form=XmlSchemaForm.Unqualified)]
- public string Secret
- {
- get { return _secret; } set { _secret = value; }
- }
-
- /// <summary>
- /// The server for the primary photo for the photoset.
- /// </summary>
- [XmlAttribute("server", Form=XmlSchemaForm.Unqualified)]
- public string Server
- {
- get { return _server; } set { _server = value; }
- }
-
- /// <summary>
- /// The server farm for the primary photo for the photoset.
- /// </summary>
- [XmlAttribute("farm", Form=XmlSchemaForm.Unqualified)]
- public string Farm
- {
- get { return _farm; } set { _farm = value; }
- }
-
- /// <summary>
- /// The number of photos in the photoset.
- /// </summary>
- [XmlAttribute("photos", Form=XmlSchemaForm.Unqualified)]
- public int NumberOfPhotos
- {
- get { return _numberOfPhotos; } set { _numberOfPhotos = value; }
- }
-
- /// <summary>
- /// The title of the photoset.
- /// </summary>
- [XmlElement("title", Form=XmlSchemaForm.Unqualified)]
- public string Title
- {
- get { return _title; } set { _title = value; }
- }
-
- /// <summary>
- /// The description of the photoset.
- /// </summary>
- [XmlElement("description", Form=XmlSchemaForm.Unqualified)]
- public string Description
- {
- get { return _description; } set { _description = value; }
- }
-
- /// <summary>
- /// An array of photo objects in the photoset.
- /// </summary>
- [XmlElement("photo", Form=XmlSchemaForm.Unqualified)]
- public Photo[] PhotoCollection
- {
- get { return _photoCollection; }
- set
- {
- if( value == null )
- _photoCollection = new Photo[0];
- else
- _photoCollection = value;
- }
- }
-
- /// <summary>
- /// The URL for the thumbnail of a photo.
- /// </summary>
- [XmlIgnore()]
- public string PhotosetThumbnailUrl
- {
- get { return Utils.UrlFormat(this, "_t", "jpg"); }
- }
-
- /// <summary>
- /// The URL for the square thumbnail of a photo.
- /// </summary>
- [XmlIgnore()]
- public string PhotosetSquareThumbnailUrl
- {
- get { return Utils.UrlFormat(this, "_s", "jpg"); }
- }
-
- /// <summary>
- /// The URL for the small copy of a photo.
- /// </summary>
- [XmlIgnore()]
- public string PhotosetSmallUrl
- {
- get { return Utils.UrlFormat(this, "_m", "jpg"); }
- }
-
-
-
-
- }
-}
\ No newline at end of file
diff --git a/extensions/Exporters/FlickrExport/FlickrNet/Photos.cs b/extensions/Exporters/FlickrExport/FlickrNet/Photos.cs
deleted file mode 100644
index 3737ab1..0000000
--- a/extensions/Exporters/FlickrExport/FlickrNet/Photos.cs
+++ /dev/null
@@ -1,271 +0,0 @@
-using System;
-using System.Xml.Serialization;
-using System.Xml.Schema;
-using System.Collections;
-
-namespace FlickrNet
-{
- /// <remarks/>
- [Serializable]
- public class Photos
- {
-
- private Photo[] _photos = new Photo[0];
-
- /// <remarks/>
- [XmlElement("photo", Form = XmlSchemaForm.Unqualified)]
- public Photo[] PhotoCollection
- {
- get { return _photos; }
- set
- {
- _photos = value==null?new Photo[0]:value;
- }
- }
-
- /// <remarks/>
- [XmlAttribute("page", Form=XmlSchemaForm.Unqualified)]
- public long PageNumber;
-
- /// <remarks/>
- [XmlAttribute("pages", Form=XmlSchemaForm.Unqualified)]
- public long TotalPages;
-
- /// <remarks/>
- [XmlAttribute("perpage", Form=XmlSchemaForm.Unqualified)]
- public long PhotosPerPage;
-
- /// <remarks/>
- [XmlAttribute("total", Form=XmlSchemaForm.Unqualified)]
- public long TotalPhotos;
- }
-
- /// <summary>
- /// A collection of <see cref="Photo"/> instances.
- /// </summary>
- [System.Serializable]
- public class PhotoCollection : CollectionBase
- {
-
- /// <summary>
- /// Default constructor.
- /// </summary>
- public PhotoCollection()
- {
- }
-
- /// <summary>
- /// Creates an instance of the <see cref="PhotoCollection"/> from an array of <see cref="Photo"/>
- /// instances.
- /// </summary>
- /// <param name="photos">An array of <see cref="Photo"/> instances.</param>
- public PhotoCollection(Photo[] photos)
- {
- if (photos == null) return;
-
- for (int i=0; i<photos.Length; i++)
- {
- List.Add(photos[i]);
- }
- }
-
- /// <summary>
- /// Gets number of photos in the current collection.
- /// </summary>
- public int Length
- {
- get { return List.Count; }
- }
-
- /// <summary>
- /// Gets the index of a photo in this collection.
- /// </summary>
- /// <param name="photo">The photo to find.</param>
- /// <returns>The index of the photo, -1 if it is not in the collection.</returns>
- public int IndexOf(Photo photo)
- {
- return List.IndexOf(photo);
- }
-
- #region ICollection Members
-
- /// <summary>
- /// Gets a value indicating if the collection is synchronized (thread-safe).
- /// </summary>
- public bool IsSynchronized
- {
- get
- {
- return List.IsSynchronized;
- }
- }
-
- /// <summary>
- /// Copies the elements of the collection to an array of <see cref="Photo"/>, starting at a
- /// particular index.
- /// </summary>
- /// <param name="array">The array to copy to.</param>
- /// <param name="index">The index in the collection to start copying from.</param>
- public void CopyTo(Photo[] array, int index)
- {
- List.CopyTo(array, index);
- }
-
- /// <summary>
- /// Gets an object that can be used to synchronize the collection.
- /// </summary>
- public object SyncRoot
- {
- get
- {
- return List.SyncRoot;
- }
- }
-
- #endregion
-
- #region IList Members
-
- /// <summary>
- /// Gets a value indicating whether the collection is read-only.
- /// </summary>
- public bool IsReadOnly
- {
- get
- {
- return List.IsReadOnly;
- }
- }
-
- /// <summary>
- /// Gets or sets a photo based on the index in the collection.
- /// </summary>
- public Photo this[int index]
- {
- get
- {
- return (Photo)List[index];
- }
- set
- {
- List[index] = value;
- }
- }
-
- /// <summary>
- /// Inserts a <see cref="Photo"/> into the collection at the given index.
- /// </summary>
- /// <param name="index">The index to insert the <see cref="Photo"/> into.
- /// Subsequent photos will be moved up.</param>
- /// <param name="photo">The <see cref="Photo"/> to insert.</param>
- public void Insert(int index, Photo photo)
- {
- List.Insert(index, photo);
- }
-
- /// <summary>
- /// Removes a photo from the collection.
- /// </summary>
- /// <param name="photo">The <see cref="Photo"/> instance to remove from the collection.</param>
- public void Remove(Photo photo)
- {
- List.Remove(photo);
- }
-
- /// <summary>
- /// Returns true if the collection contains the photo.
- /// </summary>
- /// <param name="photo">The <see cref="Photo"/> instance to try to find.</param>
- /// <returns>True of False, depending on if the <see cref="Photo"/> is found in the collection.</returns>
- public bool Contains(Photo photo)
- {
- return List.Contains(photo);
- }
-
- /// <summary>
- /// Adds a <see cref="Photo"/> to the collection.
- /// </summary>
- /// <param name="photo">The <see cref="Photo"/> instance to add to the collection.</param>
- /// <returns>The index that the photo was added at.</returns>
- public int Add(Photo photo)
- {
- return List.Add(photo);
- }
-
- /// <summary>
- /// Adds an array of <see cref="Photo"/> instances to this collection.
- /// </summary>
- /// <param name="photos">An array of <see cref="Photo"/> instances.</param>
- public void AddRange(Photo[] photos)
- {
- foreach(Photo photo in photos)
- List.Add(photo);
- }
-
- /// <summary>
- /// Adds all of the photos in another <see cref="PhotoCollection"/> to this collection.
- /// </summary>
- /// <param name="collection">The <see cref="PhotoCollection"/> containing the photos to add
- /// to this collection.</param>
- public void AddRange(PhotoCollection collection)
- {
- foreach(Photo photo in collection)
- List.Add(photo);
- }
-
- /// <summary>
- /// Gets an instance specifying whether the collection is a fixed size.
- /// </summary>
- public bool IsFixedSize
- {
- get
- {
- return List.IsFixedSize;
- }
- }
-
- #endregion
-
- /// <summary>
- /// Converts a PhotoCollection instance to an array of Photo objects.
- /// </summary>
- /// <param name="collection">The collection to convert.</param>
- /// <returns>An array of <see cref="Photo"/> objects.</returns>
- public static implicit operator Photo[](PhotoCollection collection)
- {
- Photo[] photos = new Photo[collection.Count];
- collection.CopyTo(photos, 0);
- return photos;
- }
-
- /// <summary>
- /// Converts the collection to an array of <see cref="Photo"/> objects.
- /// </summary>
- /// <returns>An array of <see cref="Photo"/> objects.</returns>
- public Photo[] ToPhotoArray()
- {
- return (Photo[])this;
- }
-
- /// <summary>
- /// Implicitly converts an array of <see cref="Photo"/> objects to a <see cref="PhotoCollection"/>.
- /// </summary>
- /// <param name="photos">The array of <see cref="Photo"/> objects to convert.</param>
- /// <returns></returns>
- public static implicit operator PhotoCollection(Photo[] photos)
- {
- return new PhotoCollection(photos);
- }
-
- /// <summary>
- /// Creates a <see cref="PhotoCollection"/> from an array of <see cref="Photo"/> objects.
- /// </summary>
- /// <param name="photos">An array of <see cref="Photo"/> objects.</param>
- /// <returns>A new <see cref="PhotoCollection"/> containing all the objects from the array.</returns>
- public static PhotoCollection FromPhotoArray(Photo[] photos)
- {
- return (PhotoCollection)photos;
- }
- }
-
-}
\ No newline at end of file
diff --git a/extensions/Exporters/FlickrExport/FlickrNet/Response.cs b/extensions/Exporters/FlickrExport/FlickrNet/Response.cs
deleted file mode 100644
index 50bff1e..0000000
--- a/extensions/Exporters/FlickrExport/FlickrNet/Response.cs
+++ /dev/null
@@ -1,143 +0,0 @@
-using System;
-using System.Xml;
-using System.Xml.Serialization;
-using System.Xml.Schema;
-
-namespace FlickrNet
-{
- /// <summary>
- /// The root object returned by Flickr. Used with Xml Serialization to get the relevant object.
- /// It is internal to the FlickrNet API Library and should not be used elsewhere.
- /// </summary>
- [XmlRoot("rsp", Namespace="", IsNullable=false)]
- [Serializable]
- public class Response
- {
-
- /// <remarks/>
- [XmlElement("blogs", Form=XmlSchemaForm.Unqualified)]
- public Blogs Blogs;
-
- /// <remarks/>
- [XmlElement("contacts", Form=XmlSchemaForm.Unqualified)]
- public Contacts Contacts;
-
- /// <remarks/>
- [XmlElement("photos", Form=XmlSchemaForm.Unqualified)]
- public Photos Photos;
-
- /// <remarks/>
- [XmlElement("category", Form=XmlSchemaForm.Unqualified)]
- public Category Category;
-
- /// <remarks/>
- [XmlElement("photocounts", Form=XmlSchemaForm.Unqualified)]
- public PhotoCounts PhotoCounts;
-
- /// <remarks/>
- [XmlElement("photo", Form=XmlSchemaForm.Unqualified)]
- public PhotoInfo PhotoInfo;
-
- /// <remarks/>
- [XmlElement("photoset", Form=XmlSchemaForm.Unqualified)]
- public Photoset Photoset;
-
- /// <remarks/>
- [XmlElement("photosets", Form=XmlSchemaForm.Unqualified)]
- public Photosets Photosets;
-
- /// <remarks/>
- [XmlElement("sizes", Form=XmlSchemaForm.Unqualified)]
- public Sizes Sizes;
-
- /// <remarks/>
- [XmlElement("licenses", Form=XmlSchemaForm.Unqualified)]
- public Licenses Licenses;
-
- /// <remarks/>
- [XmlElement("count", Form=XmlSchemaForm.Unqualified)]
- public ContextCount ContextCount;
-
- /// <remarks/>
- [XmlElement("nextphoto", Form=XmlSchemaForm.Unqualified)]
- public ContextPhoto ContextNextPhoto;
-
- /// <remarks/>
- [XmlElement("prevphoto", Form=XmlSchemaForm.Unqualified)]
- public ContextPhoto ContextPrevPhoto;
-
- /// <remarks/>
- [XmlAttribute("stat", Form=XmlSchemaForm.Unqualified)]
- public ResponseStatus Status;
-
- /// <summary>
- /// If an error occurs the Error property is populated with
- /// a <see cref="ResponseError"/> instance.
- /// </summary>
- [XmlElement("err", Form=XmlSchemaForm.Unqualified)]
- public ResponseError Error;
-
- /// <summary>
- /// A <see cref="Method"/> instance.
- /// </summary>
- [XmlElement("method", Form=XmlSchemaForm.Unqualified)]
- public Method Method;
-
- /// <summary>
- /// If using flickr.test.echo this contains all the other elements not covered above.
- /// </summary>
- /// <remarks>
- /// t is an array of <see cref="XmlElement"/> objects. Use the XmlElement Name and InnerXml properties
- /// to get the name and value of the returned property.
- /// </remarks>
- [XmlAnyElement(), NonSerialized()]
- public XmlElement[] AllElements;
- }
-
- /// <summary>
- /// If an error occurs then Flickr returns this object.
- /// </summary>
- [System.Serializable]
- public class ResponseError
- {
- /// <summary>
- /// The code or number of the error.
- /// </summary>
- /// <remarks>
- /// 100 - Invalid Api Key.
- /// 99 - User not logged in.
- /// Other codes are specific to a method.
- /// </remarks>
- [XmlAttribute("code", Form=XmlSchemaForm.Unqualified)]
- public int Code;
-
- /// <summary>
- /// The verbose message matching the error code.
- /// </summary>
- [XmlAttribute("msg", Form=XmlSchemaForm.Unqualified)]
- public string Message;
- }
-
- /// <summary>
- /// The status of the response, either ok or fail.
- /// </summary>
- public enum ResponseStatus
- {
- /// <summary>
- /// An unknown status, and the default value if not set.
- /// </summary>
- [XmlEnum("unknown")]
- Unknown,
-
- /// <summary>
- /// The response returns "ok" on a successful execution of the method.
- /// </summary>
- [XmlEnum("ok")]
- OK,
- /// <summary>
- /// The response returns "fail" if there is an error, such as invalid API key or login failure.
- /// </summary>
- [XmlEnum("fail")]
- Failed
- }
-}
\ No newline at end of file
diff --git a/extensions/Exporters/FlickrExport/FlickrNet/ResponseXmlException.cs b/extensions/Exporters/FlickrExport/FlickrNet/ResponseXmlException.cs
deleted file mode 100644
index b599325..0000000
--- a/extensions/Exporters/FlickrExport/FlickrNet/ResponseXmlException.cs
+++ /dev/null
@@ -1,18 +0,0 @@
-using System;
-
-namespace FlickrNet
-{
- /// <summary>
- /// Exception thrown when an error parsing the returned XML.
- /// </summary>
- public class ResponseXmlException : FlickrException
- {
- internal ResponseXmlException(string message) : base(message)
- {
- }
-
- internal ResponseXmlException(string message, Exception innerException) : base(message, innerException)
- {
- }
- }
-}
diff --git a/extensions/Exporters/FlickrExport/FlickrNet/SafeNativeMethods.cs b/extensions/Exporters/FlickrExport/FlickrNet/SafeNativeMethods.cs
deleted file mode 100644
index 1b2f9b6..0000000
--- a/extensions/Exporters/FlickrExport/FlickrNet/SafeNativeMethods.cs
+++ /dev/null
@@ -1,26 +0,0 @@
-using System;
-
-namespace FlickrNet
-{
- /// <summary>
- /// Summary description for SafeNativeMethods.
- /// </summary>
-#if !WindowsCE
- [System.Security.SuppressUnmanagedCodeSecurity()]
-#endif
- internal class SafeNativeMethods
- {
- private SafeNativeMethods()
- {
- }
-
- internal static int GetErrorCode(System.IO.IOException ioe)
- {
-#if !WindowsCE
- return System.Runtime.InteropServices.Marshal.GetHRForException(ioe) & 0xFFFF;
-#else
- return 0;
-#endif
- }
- }
-}
diff --git a/extensions/Exporters/FlickrExport/FlickrNet/SignatureRequiredException.cs b/extensions/Exporters/FlickrExport/FlickrNet/SignatureRequiredException.cs
deleted file mode 100644
index 1444c8c..0000000
--- a/extensions/Exporters/FlickrExport/FlickrNet/SignatureRequiredException.cs
+++ /dev/null
@@ -1,14 +0,0 @@
-using System;
-
-namespace FlickrNet
-{
- /// <summary>
- /// Thrown when a method requires a valid signature but no shared secret has been supplied.
- /// </summary>
- public class SignatureRequiredException : FlickrException
- {
- internal SignatureRequiredException() : base("Method requires signing but no shared secret supplied.")
- {
- }
- }
-}
diff --git a/extensions/Exporters/FlickrExport/FlickrNet/Sizes.cs b/extensions/Exporters/FlickrExport/FlickrNet/Sizes.cs
deleted file mode 100644
index a0add5a..0000000
--- a/extensions/Exporters/FlickrExport/FlickrNet/Sizes.cs
+++ /dev/null
@@ -1,87 +0,0 @@
-using System.Xml.Serialization;
-using System.Xml.Schema;
-
-namespace FlickrNet
-{
- /// <summary>
- /// Collection of <see cref="Size"/> items for a given photograph.
- /// </summary>
- [System.Serializable]
- public class Sizes
- {
- private Size[] _sizeCollection = new Size[0];
-
- /// <summary>
- /// The size collection contains an array of <see cref="Size"/> items.
- /// </summary>
- [XmlElement("size", Form=XmlSchemaForm.Unqualified)]
- public Size[] SizeCollection
- {
- get { return _sizeCollection; }
- set { _sizeCollection = value; }
- }
- }
-
- /// <summary>
- /// Contains details about all the sizes available for a given photograph.
- /// </summary>
- [System.Serializable]
- public class Size
- {
- private string _label;
- private int _width;
- private int _height;
- private string _source;
- private string _url;
-
- /// <summary>
- /// The label for the size, such as "Thumbnail", "Small", "Medium", "Large" and "Original".
- /// </summary>
- [XmlAttribute("label", Form=XmlSchemaForm.Unqualified)]
- public string Label
- {
- get { return _label; }
- set { _label = value; }
- }
-
- /// <summary>
- /// The width of the resulting image, in pixels
- /// </summary>
- [XmlAttribute("width", Form=XmlSchemaForm.Unqualified)]
- public int Width
- {
- get { return _width; }
- set { _width = value; }
- }
-
- /// <summary>
- /// The height of the resulting image, in pixels
- /// </summary>
- [XmlAttribute("height", Form=XmlSchemaForm.Unqualified)]
- public int Height
- {
- get { return _height; }
- set { _height = value; }
- }
-
- /// <summary>
- /// The source url of the image.
- /// </summary>
- [XmlAttribute("source", Form=XmlSchemaForm.Unqualified)]
- public string Source
- {
- get { return _source; }
- set { _source = value; }
- }
-
- /// <summary>
- /// The url to the photographs web page for this particular size.
- /// </summary>
- [XmlAttribute("url", Form=XmlSchemaForm.Unqualified)]
- public string Url
- {
- get { return _url; }
- set { _url = value; }
- }
- }
-}
\ No newline at end of file
diff --git a/extensions/Exporters/FlickrExport/FlickrNet/Tags.cs b/extensions/Exporters/FlickrExport/FlickrNet/Tags.cs
deleted file mode 100644
index 7c9c13c..0000000
--- a/extensions/Exporters/FlickrExport/FlickrNet/Tags.cs
+++ /dev/null
@@ -1,42 +0,0 @@
-using System;
-using System.Xml;
-
-namespace FlickrNet
-{
- /// <summary>
- /// A simple tag class, containing a tag name and optional count (for <see cref="Flickr.TagsGetListUserPopular()"/>)
- /// </summary>
- public class Tag
- {
- private string _tagName;
- private int _count;
-
- /// <summary>
- /// The name of the tag.
- /// </summary>
- public string TagName
- {
- get { return _tagName; }
- }
-
- /// <summary>
- /// The poularity of the tag. Will be 0 where the popularity is not retreaved.
- /// </summary>
- public int Count
- {
- get { return _count; }
- }
-
- internal Tag(XmlNode node)
- {
- if( node.Attributes["count"] != null ) _count = Convert.ToInt32(node.Attributes["count"].Value);
- _tagName = node.InnerText;
- }
-
- internal Tag(string tagName, int count)
- {
- _tagName = tagName;
- _count = count;
- }
- }
-}
diff --git a/extensions/Exporters/FlickrExport/FlickrNet/UploadProgressEvent.cs b/extensions/Exporters/FlickrExport/FlickrNet/UploadProgressEvent.cs
deleted file mode 100644
index 2e98ef4..0000000
--- a/extensions/Exporters/FlickrExport/FlickrNet/UploadProgressEvent.cs
+++ /dev/null
@@ -1,36 +0,0 @@
-using System;
-
-namespace FlickrNet
-{
- /// <summary>
- /// Event arguments for a <see cref="Flickr.OnUploadProgress"/> event.
- /// </summary>
- public class UploadProgressEventArgs : EventArgs
- {
- private bool _uploadComplete;
-
- private int _bytes;
-
- /// <summary>
- /// Number of bytes transfered so far.
- /// </summary>
- public int Bytes
- {
- get { return _bytes; }
- }
-
- /// <summary>
- /// True if all bytes have been uploaded.
- /// </summary>
- public bool UploadComplete
- {
- get { return _uploadComplete; }
- }
-
- internal UploadProgressEventArgs(int bytes, bool complete)
- {
- _bytes = bytes;
- _uploadComplete = complete;
- }
- }
-}
diff --git a/extensions/Exporters/FlickrExport/FlickrNet/Uploader.cs b/extensions/Exporters/FlickrExport/FlickrNet/Uploader.cs
deleted file mode 100644
index 2691f23..0000000
--- a/extensions/Exporters/FlickrExport/FlickrNet/Uploader.cs
+++ /dev/null
@@ -1,59 +0,0 @@
-using System;
-using System.Xml;
-using System.Xml.Schema;
-using System.Xml.Serialization;
-
-namespace FlickrNet
-{
- /// <summary>
- /// Information returned by the UploadPicture url.
- /// </summary>
- [XmlRoot("rsp")]
- public class Uploader
- {
- private ResponseStatus _status;
- private string _photoId;
- private string _ticketId;
- private ResponseError _error;
-
- /// <summary>
- /// The status of the upload, either "ok" or "fail".
- /// </summary>
- [XmlAttribute("stat", Form=XmlSchemaForm.Unqualified)]
- public ResponseStatus Status
- {
- get { return _status; }
- set { _status = value; }
- }
-
- /// <summary>
- /// If the upload succeeded then this contains the id of the photo. Otherwise it will be zero.
- /// </summary>
- [XmlElement("photoid", Form=XmlSchemaForm.Unqualified)]
- public string PhotoId
- {
- get { return _photoId; }
- set { _photoId = value; }
- }
-
- /// <summary>
- /// The ticket id, if using Asynchronous uploading.
- /// </summary>
- [XmlElement("ticketid", Form=XmlSchemaForm.Unqualified)]
- public string TicketId
- {
- get { return _ticketId; }
- set { _ticketId = value; }
- }
-
- /// <summary>
- /// Contains the error returned if the upload is unsuccessful.
- /// </summary>
- [XmlElement("err", Form=XmlSchemaForm.Unqualified)]
- public ResponseError Error
- {
- get { return _error; }
- set { _error = value; }
- }
- }
-}
diff --git a/extensions/Exporters/FlickrExport/FlickrNet/User.cs b/extensions/Exporters/FlickrExport/FlickrNet/User.cs
deleted file mode 100644
index a4279ee..0000000
--- a/extensions/Exporters/FlickrExport/FlickrNet/User.cs
+++ /dev/null
@@ -1,144 +0,0 @@
-using System;
-using System.Xml;
-
-namespace FlickrNet
-{
- /// <summary>
- /// Contains details of a user
- /// </summary>
- [System.Serializable]
- public class FoundUser
- {
- private string _userId;
- private string _username;
-
- /// <summary>
- /// The ID of the found user.
- /// </summary>
- public string UserId
- {
- get { return _userId; }
- }
-
- /// <summary>
- /// The username of the found user.
- /// </summary>
- public string Username
- {
- get { return _username; }
- }
-
- internal FoundUser(string userId, string username)
- {
- _userId = userId;
- _username = username;
- }
-
- internal FoundUser(XmlNode node)
- {
- if( node.Attributes["nsid"] != null )
- _userId = node.Attributes["nsid"].Value;
- if( node.Attributes["id"] != null )
- _userId = node.Attributes["id"].Value;
- if( node.Attributes["username"] != null )
- _username = node.Attributes["username"].Value;
- if( node.SelectSingleNode("username") != null )
- _username = node.SelectSingleNode("username").InnerText;
- }
- }
-
- /// <summary>
- /// The upload status of the user, as returned by <see cref="Flickr.PeopleGetUploadStatus"/>.
- /// </summary>
- [System.Serializable]
- public class UserStatus
- {
- private bool _isPro;
- private string _userId;
- private string _username;
- private long _bandwidthMax;
- private long _bandwidthUsed;
- private long _filesizeMax;
-
- internal UserStatus(XmlNode node)
- {
- if( node == null )
- throw new ArgumentNullException("node");
-
- if( node.Attributes["id"] != null )
- _userId = node.Attributes["id"].Value;
- if( node.Attributes["nsid"] != null )
- _userId = node.Attributes["nsid"].Value;
- if( node.Attributes["ispro"] != null )
- _isPro = node.Attributes["ispro"].Value=="1";
- if( node.SelectSingleNode("username") != null )
- _username = node.SelectSingleNode("username").InnerText;
- XmlNode bandwidth = node.SelectSingleNode("bandwidth");
- if( bandwidth != null )
- {
- _bandwidthMax = Convert.ToInt64(bandwidth.Attributes["max"].Value);
- _bandwidthUsed = Convert.ToInt64(bandwidth.Attributes["used"].Value);
- }
- XmlNode filesize = node.SelectSingleNode("filesize");
- if( filesize != null )
- {
- _filesizeMax = Convert.ToInt64(filesize.Attributes["max"].Value);
- }
- }
- /// <summary>
- /// The id of the user object.
- /// </summary>
- public string UserId
- {
- get { return _userId; }
- }
-
- /// <summary>
- /// The Username of the selected user.
- /// </summary>
- public string UserName
- {
- get { return _username; }
- }
-
- /// <summary>
- /// Is the current user a Pro account.
- /// </summary>
- public bool IsPro
- {
- get { return _isPro; }
- }
-
- /// <summary>
- /// The maximum bandwidth (in bytes) that the user can use each month.
- /// </summary>
- public long BandwidthMax
- {
- get { return _bandwidthMax; }
- }
-
- /// <summary>
- /// The number of bytes of the current months bandwidth that the user has used.
- /// </summary>
- public long BandwidthUsed
- {
- get { return _bandwidthUsed; }
- }
-
- /// <summary>
- /// The maximum filesize (in bytes) that the user is allowed to upload.
- /// </summary>
- public long FilesizeMax
- {
- get { return _filesizeMax; }
- }
-
- /// <summary>
- /// <see cref="Double"/> representing the percentage bandwidth used so far. Will range from 0 to 1.
- /// </summary>
- public Double PercentageUsed
- {
- get { return BandwidthUsed * 1.0 / BandwidthMax; }
- }
- }
-}
\ No newline at end of file
diff --git a/extensions/Exporters/FlickrExport/FlickrNet/Utils.cs b/extensions/Exporters/FlickrExport/FlickrNet/Utils.cs
deleted file mode 100644
index ff25a54..0000000
--- a/extensions/Exporters/FlickrExport/FlickrNet/Utils.cs
+++ /dev/null
@@ -1,351 +0,0 @@
-using System;
-using System.IO;
-using System.Collections;
-using System.Text;
-using System.Text.RegularExpressions;
-using System.Xml.Serialization;
-
-namespace FlickrNet
-{
- /// <summary>
- /// Internal class providing certain utility functions to other classes.
- /// </summary>
- internal sealed class Utils
- {
- private static readonly DateTime unixStartDate = new DateTime(1970, 1, 1, 0, 0, 0);
-
- private Utils()
- {
- }
-
-#if !WindowsCE
- internal static string UrlEncode(string oldString)
- {
- if( oldString == null ) return null;
-
- string a = System.Web.HttpUtility.UrlEncode(oldString);
- a = a.Replace("&", "%26");
- a = a.Replace("=", "%3D");
- a = a.Replace(" ", "%20");
- return a;
- }
-#else
- internal static string UrlEncode(string oldString)
- {
- if (oldString == null) return String.Empty;
- StringBuilder sb = new StringBuilder(oldString.Length * 2);
- Regex reg = new Regex("[a-zA-Z0-9$-_.+!*'(),]");
-
- foreach (char c in oldString)
- {
- if (reg.IsMatch(c.ToString()))
- {
- sb.Append(c);
- }
- else
- {
- sb.Append(ToHex(c));
- }
- }
- return sb.ToString();
- }
-
- private static string ToHex(char c)
- {
- return ((int)c).ToString("X");
- }
-#endif
-
- /// <summary>
- /// Converts a <see cref="DateTime"/> object into a unix timestamp number.
- /// </summary>
- /// <param name="date">The date to convert.</param>
- /// <returns>A long for the number of seconds since 1st January 1970, as per unix specification.</returns>
- internal static long DateToUnixTimestamp(DateTime date)
- {
- TimeSpan ts = date - unixStartDate;
- return (long)ts.TotalSeconds;
- }
-
- /// <summary>
- /// Converts a string, representing a unix timestamp number into a <see cref="DateTime"/> object.
- /// </summary>
- /// <param name="timestamp">The timestamp, as a string.</param>
- /// <returns>The <see cref="DateTime"/> object the time represents.</returns>
- internal static DateTime UnixTimestampToDate(string timestamp)
- {
- if( timestamp == null || timestamp.Length == 0 ) return DateTime.MinValue;
-
- return UnixTimestampToDate(long.Parse(timestamp));
- }
-
- /// <summary>
- /// Converts a <see cref="long"/>, representing a unix timestamp number into a <see cref="DateTime"/> object.
- /// </summary>
- /// <param name="timestamp">The unix timestamp.</param>
- /// <returns>The <see cref="DateTime"/> object the time represents.</returns>
- internal static DateTime UnixTimestampToDate(long timestamp)
- {
- return unixStartDate.AddSeconds(timestamp);
- }
-
- /// <summary>
- /// Utility method to convert the <see cref="PhotoSearchExtras"/> enum to a string.
- /// </summary>
- /// <example>
- /// <code>
- /// PhotoSearchExtras extras = PhotoSearchExtras.DateTaken & PhotoSearchExtras.IconServer;
- /// string val = Utils.ExtrasToString(extras);
- /// Console.WriteLine(val);
- /// </code>
- /// outputs: "date_taken,icon_server";
- /// </example>
- /// <param name="extras"></param>
- /// <returns></returns>
- internal static string ExtrasToString(PhotoSearchExtras extras)
- {
- System.Text.StringBuilder sb = new System.Text.StringBuilder();
- if( (extras & PhotoSearchExtras.DateTaken) == PhotoSearchExtras.DateTaken )
- sb.Append("date_taken");
- if( (extras & PhotoSearchExtras.DateUploaded) == PhotoSearchExtras.DateUploaded )
- {
- if( sb.Length>0 ) sb.Append(",");
- sb.Append("date_upload");
- }
- if( (extras & PhotoSearchExtras.IconServer) == PhotoSearchExtras.IconServer )
- {
- if( sb.Length>0 ) sb.Append(",");
- sb.Append("icon_server");
- }
- if( (extras & PhotoSearchExtras.License) == PhotoSearchExtras.License )
- {
- if( sb.Length>0 ) sb.Append(",");
- sb.Append("license");
- }
- if( (extras & PhotoSearchExtras.OwnerName) == PhotoSearchExtras.OwnerName )
- {
- if( sb.Length>0 ) sb.Append(",");
- sb.Append("owner_name");
- }
- if( (extras & PhotoSearchExtras.OriginalFormat) == PhotoSearchExtras.OriginalFormat )
- {
- if( sb.Length>0 ) sb.Append(",");
- sb.Append("original_format");
- }
-
- if( (extras & PhotoSearchExtras.LastUpdated) == PhotoSearchExtras.LastUpdated )
- {
- if( sb.Length>0 ) sb.Append(",");
- sb.Append("last_update");
- }
-
- if( (extras & PhotoSearchExtras.Tags) == PhotoSearchExtras.Tags )
- {
- if( sb.Length>0 ) sb.Append(",");
- sb.Append("tags");
- }
-
- if( (extras & PhotoSearchExtras.Geo) == PhotoSearchExtras.Geo )
- {
- if( sb.Length>0 ) sb.Append(",");
- sb.Append("geo");
- }
-
- return sb.ToString();
- }
-
- internal static string SortOrderToString(PhotoSearchSortOrder order)
- {
- switch(order)
- {
- case PhotoSearchSortOrder.DatePostedAsc:
- return "date-posted-asc";
- case PhotoSearchSortOrder.DatePostedDesc:
- return "date-posted-desc";
- case PhotoSearchSortOrder.DateTakenAsc:
- return "date-taken-asc";
- case PhotoSearchSortOrder.DateTakenDesc:
- return "date-taken-desc";
- case PhotoSearchSortOrder.InterestingnessAsc:
- return "interestingness-asc";
- case PhotoSearchSortOrder.InterestingnessDesc:
- return "interestingness-desc";
- case PhotoSearchSortOrder.Relevance:
- return "relevance";
- default:
- return null;
- }
- }
-
- internal static void PartialOptionsIntoArray(PartialSearchOptions options, Hashtable parameters)
- {
- if( options.MinUploadDate != DateTime.MinValue ) parameters.Add("min_uploaded_date", Utils.DateToUnixTimestamp(options.MinUploadDate).ToString());
- if( options.MaxUploadDate != DateTime.MinValue ) parameters.Add("max_uploaded_date", Utils.DateToUnixTimestamp(options.MaxUploadDate).ToString());
- if( options.MinTakenDate != DateTime.MinValue ) parameters.Add("min_taken_date", options.MinTakenDate.ToString("yyyy-MM-dd HH:mm:ss"));
- if( options.MaxTakenDate != DateTime.MinValue ) parameters.Add("max_taken_date", options.MaxTakenDate.ToString("yyyy-MM-dd HH:mm:ss"));
- if( options.Extras != PhotoSearchExtras.None ) parameters.Add("extras", options.ExtrasString);
- if( options.SortOrder != PhotoSearchSortOrder.None ) parameters.Add("sort", options.SortOrderString);
- if( options.PerPage > 0 ) parameters.Add("per_page", options.PerPage.ToString());
- if( options.Page > 0 ) parameters.Add("page", options.Page.ToString());
- if( options.PrivacyFilter != PrivacyFilter.None ) parameters.Add("privacy_filter", options.PrivacyFilter.ToString("d"));
- }
-
- internal static void WriteInt32(Stream s, int i)
- {
- s.WriteByte((byte) (i & 0xFF));
- s.WriteByte((byte) ((i >> 8) & 0xFF));
- s.WriteByte((byte) ((i >> 16) & 0xFF));
- s.WriteByte((byte) ((i >> 24) & 0xFF));
- }
-
- internal static void WriteString(Stream s, string str)
- {
- WriteInt32(s, str.Length);
- foreach (char c in str)
- {
- s.WriteByte((byte) (c & 0xFF));
- s.WriteByte((byte) ((c >> 8) & 0xFF));
- }
- }
-
- internal static void WriteAsciiString(Stream s, string str)
- {
- WriteInt32(s, str.Length);
- foreach (char c in str)
- {
- s.WriteByte((byte) (c & 0x7F));
- }
- }
-
- internal static int ReadInt32(Stream s)
- {
- int i = 0, b;
- for (int j = 0; j < 4; j++)
- {
- b = s.ReadByte();
- if (b == -1)
- throw new IOException("Unexpected EOF encountered");
- i |= (b << (j * 8));
- }
- return i;
- }
-
- internal static string ReadString(Stream s)
- {
- int len = ReadInt32(s);
- char[] chars = new char[len];
- for (int i = 0; i < len; i++)
- {
- int hi, lo;
- lo = s.ReadByte();
- hi = s.ReadByte();
- if (lo == -1 || hi == -1)
- throw new IOException("Unexpected EOF encountered");
- chars[i] = (char) (lo | (hi << 8));
- }
- return new string(chars);
- }
-
- internal static string ReadAsciiString(Stream s)
- {
- int len = ReadInt32(s);
- char[] chars = new char[len];
- for (int i = 0; i < len; i++)
- {
- int c = s.ReadByte();
- if (c == -1)
- throw new IOException("Unexpected EOF encountered");
- chars[i] = (char) (c & 0x7F);
- }
- return new string(chars);
- }
-
- private const string photoUrl = "http://farm{0}.static.flickr.com/{1}/{2}_{3}{4}.{5}";
-
- internal static string UrlFormat(Photo p, string size, string format)
- {
- if( size == "_o" )
- return UrlFormat(photoUrl, p.Farm, p.Server, p.PhotoId, p.OriginalSecret, size, format);
- else
- return UrlFormat(photoUrl, p.Farm, p.Server, p.PhotoId, p.Secret, size, format);
- }
-
- internal static string UrlFormat(PhotoInfo p, string size, string format)
- {
- if( size == "_o" )
- return UrlFormat(photoUrl, p.Farm, p.Server, p.PhotoId, p.OriginalSecret, size, format);
- else
- return UrlFormat(photoUrl, p.Farm, p.Server, p.PhotoId, p.Secret, size, format);
- }
-
- internal static string UrlFormat(Photoset p, string size, string format)
- {
- return UrlFormat(photoUrl, p.Farm, p.Server, p.PrimaryPhotoId, p.Secret, size, format);
- }
-
- private static string UrlFormat(string format, params object[] parameters)
- {
- return String.Format(format, parameters);
- }
-
- private static readonly Hashtable _serializers = new Hashtable();
-
- private static XmlSerializer GetSerializer(Type type)
- {
- if( _serializers.ContainsKey(type.Name) )
- return (XmlSerializer)_serializers[type.Name];
- else
- {
- XmlSerializer s = new XmlSerializer(type);
- _serializers.Add(type.Name, s);
- return s;
- }
- }
- /// <summary>
- /// Converts the response string (in XML) into the <see cref="Response"/> object.
- /// </summary>
- /// <param name="responseString">The response from Flickr.</param>
- /// <returns>A <see cref="Response"/> object containing the details of the </returns>
- internal static Response Deserialize(string responseString)
- {
- XmlSerializer serializer = GetSerializer(typeof(FlickrNet.Response));
- try
- {
- // Deserialise the web response into the Flickr response object
- StringReader responseReader = new StringReader(responseString);
- FlickrNet.Response response = (FlickrNet.Response)serializer.Deserialize(responseReader);
- responseReader.Close();
-
- return response;
- }
- catch(InvalidOperationException ex)
- {
- // Serialization error occurred!
- throw new ResponseXmlException("Invalid response received from Flickr.", ex);
- }
- }
-
- internal static object Deserialize(System.Xml.XmlNode node, Type type)
- {
- XmlSerializer serializer = GetSerializer(type);
- try
- {
- // Deserialise the web response into the Flickr response object
- System.Xml.XmlNodeReader reader = new System.Xml.XmlNodeReader(node);
- object o = serializer.Deserialize(reader);
- reader.Close();
-
- return o;
- }
- catch(InvalidOperationException ex)
- {
- // Serialization error occurred!
- throw new ResponseXmlException("Invalid response received from Flickr.", ex);
- }
- }
-
-
-
- }
-
-}
diff --git a/extensions/Exporters/FlickrExport/FlickrRemote.cs b/extensions/Exporters/FlickrExport/FlickrRemote.cs
index bb84d6e..9c7bcfc 100644
--- a/extensions/Exporters/FlickrExport/FlickrRemote.cs
+++ b/extensions/Exporters/FlickrExport/FlickrRemote.cs
@@ -17,6 +17,7 @@ using FlickrNet;
using FSpot;
using FSpot.Utils;
using FSpot.Filters;
+using Hyena;
public class FlickrRemote {
public static Licenses licenses;
@@ -66,7 +67,7 @@ public class FlickrRemote {
try {
licenses = flickr.PhotosLicensesGetInfo();
} catch (FlickrNet.FlickrApiException e ) {
- Console.WriteLine ( e.Code + ": " + e.Verbose );
+ Log.Error ( e.Code + ": " + e.Verbose );
return null;
}
}
@@ -106,7 +107,7 @@ public class FlickrRemote {
if (frob == null) {
frob = flickr.AuthGetFrob ();
if (frob == null) {
- Console.WriteLine ("ERROR: Problems login in Flickr. Don't have a frob");
+ Log.Error ("Problems login in Flickr. Don't have a frob");
return null;
}
}
@@ -119,7 +120,7 @@ public class FlickrRemote {
return auth;
} catch (FlickrNet.FlickrApiException ex) {
- Console.WriteLine ("ERROR: Problems login in Flickr - "+ex.Verbose);
+ Log.Error ("Problems login in Flickr - "+ex.Verbose);
return null;
}
@@ -137,7 +138,7 @@ public class FlickrRemote {
// FIXME flickr needs rotation
string error_verbose;
- using (FilterRequest request = new FilterRequest (photo.DefaultVersionUri)) {
+ using (FilterRequest request = new FilterRequest (photo.DefaultVersion.Uri)) {
try {
string tags = null;
@@ -181,7 +182,7 @@ public class FlickrRemote {
flickr.UploadPicture (path, photo.Name, photo.Description, tags, is_public, is_family, is_friend);
return photoid;
} catch (FlickrNet.FlickrException ex) {
- Console.WriteLine ("Problems uploading picture: " + ex.ToString());
+ Log.Error ("Problems uploading picture: " + ex.ToString());
error_verbose = ex.ToString();
}
} catch (Exception e) {
diff --git a/extensions/Exporters/FlickrExport/Makefile.am b/extensions/Exporters/FlickrExport/Makefile.am
index e75a9f8..6a62ecf 100644
--- a/extensions/Exporters/FlickrExport/Makefile.am
+++ b/extensions/Exporters/FlickrExport/Makefile.am
@@ -1,58 +1,14 @@
-include $(top_srcdir)/Makefile.include
+ASSEMBLY = FSpot.Exporters.FlickrExport
+TARGET = library
+LINK = $(REF_FSPOT_EXTENSION_FLICKREXPORT)
+INSTALL_DIR = $(EXTENSIONS_INSTALL_DIR)
-PLUGIN_NAME = FlickrExport
+SOURCES = \
+ FlickrExport.cs \
+ FlickrRemote.cs
-PLUGIN_MANIFEST = $(PLUGIN_NAME).addin.xml
+RESOURCES = \
+ FlickrExport.addin.xml \
+ FlickrExport.glade
-PLUGIN_ASSEMBLY = $(PLUGIN_NAME).dll
-
-PLUGIN_SOURCES = \
- $(srcdir)/FlickrExport.cs \
- $(srcdir)/FlickrRemote.cs
-
-REFS = \
- -r:$(top_builddir)/src/f-spot.exe \
- -r:$(top_builddir)/src/FSpot.Core.dll \
- -r:$(top_builddir)/src/FSpot.Utils.dll \
- $(LINK_SEMWEB) \
- $(LINK_GPHOTO2) \
- $(LINK_GIOSHARP) \
- $(LINK_GTKSHARPBEANS) \
- $(LINK_UNIQUESHARP) \
- -r:FlickrNet/FlickrNet.dll \
- -r:Mono.Posix
-
-PKGS = \
- -pkg:gtk-sharp-2.0 \
- -pkg:glade-sharp-2.0
-
-SUBDIRS = \
- FlickrNet
-
-RESOURCES = \
- -resource:$(srcdir)/$(PLUGIN_MANIFEST) \
- -resource:$(srcdir)/$(PLUGIN_NAME).glade
-
-mpack: $(PLUGIN_ASSEMBLY)
- mautil p $(PLUGIN_ASSEMBLY)
-
-$(PLUGIN_ASSEMBLY): $(PLUGIN_SOURCES) $(PLUGIN_MANIFEST)
- $(CSC_LIB) -out:$@ $(PLUGIN_SOURCES) $(REFS) $(PKGS) $(ASSEMBLIES) $(RESOURCES)
-
-plugindir = $(pkglibdir)/extensions
-
-install-data-hook:
- if [ -w $(DESTDIR)$(plugindir)/$(PLUGIN_NAME).addin.xml ] ; then rm -f $(DESTDIR)$(plugindir)/$(PLUGIN_NAME).addin.xml; fi
-
-plugin_DATA = \
- $(PLUGIN_ASSEMBLY)
-
-EXTRA_DIST = \
- $(PLUGIN_SOURCES) \
- $(PLUGIN_MANIFEST) \
- $(PLUGIN_NAME).glade
-
-CLEANFILES = \
- $(PLUGIN_ASSEMBLY) \
- $(PLUGIN_ASSEMBLY).mdb \
- *.mpack
+include $(top_srcdir)/build/build.mk
diff --git a/extensions/Exporters/FlickrExport/Makefile.in b/extensions/Exporters/FlickrExport/Makefile.in
index 8a44f9c..9e86cd3 100644
--- a/extensions/Exporters/FlickrExport/Makefile.in
+++ b/extensions/Exporters/FlickrExport/Makefile.in
@@ -35,13 +35,22 @@ POST_UNINSTALL = :
build_triplet = @build@
host_triplet = @host@
DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in \
- $(top_srcdir)/Makefile.include
+ $(top_srcdir)/build/build.environment.mk \
+ $(top_srcdir)/build/build.mk \
+ $(top_srcdir)/build/build.rules.mk
+ at ENABLE_TESTS_TRUE@am__append_1 = " $(NUNIT_LIBS)"
subdir = extensions/Exporters/FlickrExport
ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
am__aclocal_m4_deps = $(top_srcdir)/build/m4/shave/shave.m4 \
$(top_srcdir)/build/m4/shamrock/expansions.m4 \
+ $(top_srcdir)/build/m4/shamrock/gnome-doc.m4 \
$(top_srcdir)/build/m4/shamrock/mono.m4 \
+ $(top_srcdir)/build/m4/shamrock/nunit.m4 \
$(top_srcdir)/build/m4/shamrock/programs.m4 \
+ $(top_srcdir)/build/m4/f-spot/flickrnet.m4 \
+ $(top_srcdir)/build/m4/f-spot/gnome-keyring-sharp.m4 \
+ $(top_srcdir)/build/m4/f-spot/gtk-sharp.m4 \
+ $(top_srcdir)/build/m4/f-spot/mono-addins.m4 \
$(top_srcdir)/acinclude.m4 $(top_srcdir)/configure.ac
am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
$(ACLOCAL_M4)
@@ -49,15 +58,6 @@ mkinstalldirs = $(install_sh) -d
CONFIG_HEADER = $(top_builddir)/config.h
CONFIG_CLEAN_FILES =
CONFIG_CLEAN_VPATH_FILES =
-SOURCES =
-DIST_SOURCES =
-RECURSIVE_TARGETS = all-recursive check-recursive dvi-recursive \
- html-recursive info-recursive install-data-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
am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`;
am__vpath_adj = case $$p in \
$(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \
@@ -79,42 +79,10 @@ am__nobase_list = $(am__nobase_strip_setup); \
am__base_list = \
sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \
sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g'
-am__installdirs = "$(DESTDIR)$(plugindir)"
-DATA = $(plugin_DATA)
-RECURSIVE_CLEAN_TARGETS = mostlyclean-recursive clean-recursive \
- distclean-recursive maintainer-clean-recursive
-AM_RECURSIVE_TARGETS = $(RECURSIVE_TARGETS:-recursive=) \
- $(RECURSIVE_CLEAN_TARGETS:-recursive=) tags TAGS ctags CTAGS \
- distdir
-ETAGS = etags
-CTAGS = ctags
-DIST_SUBDIRS = $(SUBDIRS)
+am__installdirs = "$(DESTDIR)$(moduledir)"
+SCRIPTS = $(module_SCRIPTS)
+DIST_SOURCES =
DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
-am__relativize = \
- dir0=`pwd`; \
- sed_first='s,^\([^/]*\)/.*$$,\1,'; \
- sed_rest='s,^[^/]*/*,,'; \
- sed_last='s,^.*/\([^/]*\)$$,\1,'; \
- sed_butlast='s,/*[^/]*$$,,'; \
- while test -n "$$dir1"; do \
- first=`echo "$$dir1" | sed -e "$$sed_first"`; \
- if test "$$first" != "."; then \
- if test "$$first" = ".."; then \
- dir2=`echo "$$dir0" | sed -e "$$sed_last"`/"$$dir2"; \
- dir0=`echo "$$dir0" | sed -e "$$sed_butlast"`; \
- else \
- first2=`echo "$$dir2" | sed -e "$$sed_first"`; \
- if test "$$first2" = "$$first"; then \
- dir2=`echo "$$dir2" | sed -e "$$sed_rest"`; \
- else \
- dir2="../$$dir2"; \
- fi; \
- dir0="$$dir0"/"$$first"; \
- fi; \
- fi; \
- dir1=`echo "$$dir1" | sed -e "$$sed_rest"`; \
- done; \
- reldir="$$dir2"
ACLOCAL = @ACLOCAL@
ACLOCAL_AMFLAGS = @ACLOCAL_AMFLAGS@
ALL_LINGUAS = @ALL_LINGUAS@
@@ -159,6 +127,8 @@ EXIF_SOVERSION = @EXIF_SOVERSION@
F77 = @F77@
FC = @FC@
FGREP = @FGREP@
+FLICKRNET_CFLAGS = @FLICKRNET_CFLAGS@
+FLICKRNET_LIBS = @FLICKRNET_LIBS@
F_CFLAGS = @F_CFLAGS@
F_LIBS = @F_LIBS@
GAPI2CODEGEN = @GAPI2CODEGEN@
@@ -172,6 +142,8 @@ GCONF_SHARP_LIBS = @GCONF_SHARP_LIBS@
GETTEXT_PACKAGE = @GETTEXT_PACKAGE@
GIO_CFLAGS = @GIO_CFLAGS@
GIO_LIBS = @GIO_LIBS@
+GLIBSHARP_2_12_7_CFLAGS = @GLIBSHARP_2_12_7_CFLAGS@
+GLIBSHARP_2_12_7_LIBS = @GLIBSHARP_2_12_7_LIBS@
GLIBSHARP_CFLAGS = @GLIBSHARP_CFLAGS@
GLIBSHARP_LIBS = @GLIBSHARP_LIBS@
GLIB_CFLAGS = @GLIB_CFLAGS@
@@ -187,6 +159,10 @@ GNOME_SHARP_CFLAGS = @GNOME_SHARP_CFLAGS@
GNOME_SHARP_LIBS = @GNOME_SHARP_LIBS@
GOBJECT_QUERY = @GOBJECT_QUERY@
GREP = @GREP@
+GTKSHARP_A11Y_CFLAGS = @GTKSHARP_A11Y_CFLAGS@
+GTKSHARP_A11Y_LIBS = @GTKSHARP_A11Y_LIBS@
+GTKSHARP_CFLAGS = @GTKSHARP_CFLAGS@
+GTKSHARP_LIBS = @GTKSHARP_LIBS@
HELP_DIR = @HELP_DIR@
ICONS_DIRECTORY = @ICONS_DIRECTORY@
INSTALL = @INSTALL@
@@ -200,14 +176,14 @@ INTLTOOL_EXTRACT = @INTLTOOL_EXTRACT@
INTLTOOL_MERGE = @INTLTOOL_MERGE@
INTLTOOL_PERL = @INTLTOOL_PERL@
INTLTOOL_UPDATE = @INTLTOOL_UPDATE@
+KEYRINGSHARP_CFLAGS = @KEYRINGSHARP_CFLAGS@
+KEYRINGSHARP_LIBS = @KEYRINGSHARP_LIBS@
LCMS_CFLAGS = @LCMS_CFLAGS@
LCMS_LIBS = @LCMS_LIBS@
LD = @LD@
LDFLAGS = @LDFLAGS@
LIBEXIF_VERSION_CHECK_CFLAGS = @LIBEXIF_VERSION_CHECK_CFLAGS@
LIBEXIF_VERSION_CHECK_LIBS = @LIBEXIF_VERSION_CHECK_LIBS@
-LIBGPHOTO2_CFLAGS = @LIBGPHOTO2_CFLAGS@
-LIBGPHOTO2_LIBS = @LIBGPHOTO2_LIBS@
LIBJPEG = @LIBJPEG@
LIBOBJS = @LIBOBJS@
LIBS = @LIBS@
@@ -222,6 +198,12 @@ MCS = @MCS@
MKDIR_P = @MKDIR_P@
MKINSTALLDIRS = @MKINSTALLDIRS@
MONO = @MONO@
+MONO_ADDINS_CFLAGS = @MONO_ADDINS_CFLAGS@
+MONO_ADDINS_GUI_CFLAGS = @MONO_ADDINS_GUI_CFLAGS@
+MONO_ADDINS_GUI_LIBS = @MONO_ADDINS_GUI_LIBS@
+MONO_ADDINS_LIBS = @MONO_ADDINS_LIBS@
+MONO_ADDINS_SETUP_CFLAGS = @MONO_ADDINS_SETUP_CFLAGS@
+MONO_ADDINS_SETUP_LIBS = @MONO_ADDINS_SETUP_LIBS@
MONO_MODULE_CFLAGS = @MONO_MODULE_CFLAGS@
MONO_MODULE_LIBS = @MONO_MODULE_LIBS@
MSGFMT = @MSGFMT@
@@ -232,7 +214,6 @@ NDESK_DBUS_LIBS = @NDESK_DBUS_LIBS@
NM = @NM@
NMEDIT = @NMEDIT@
NUNIT_CFLAGS = @NUNIT_CFLAGS@
-NUNIT_DEFINES = @NUNIT_DEFINES@
NUNIT_LIBS = @NUNIT_LIBS@
OBJC = @OBJC@
OBJDUMP = @OBJDUMP@
@@ -324,77 +305,233 @@ target_alias = @target_alias@
top_build_prefix = @top_build_prefix@
top_builddir = @top_builddir@
top_srcdir = @top_srcdir@
+ASSEMBLY = FSpot.Exporters.FlickrExport
+TARGET = library
+LINK = $(REF_FSPOT_EXTENSION_FLICKREXPORT) $(am__append_1)
+INSTALL_DIR = $(EXTENSIONS_INSTALL_DIR)
+SOURCES = \
+ FlickrExport.cs \
+ FlickrRemote.cs
+
+RESOURCES = \
+ FlickrExport.addin.xml \
+ FlickrExport.glade
+
+
+# Initializers
+MONO_BASE_PATH =
+MONO_ADDINS_PATH =
+
+# Install Paths
+DEFAULT_INSTALL_DIR = $(pkglibdir)
+BACKENDS_INSTALL_DIR = $(DEFAULT_INSTALL_DIR)/Backends
+EXTENSIONS_INSTALL_DIR = $(DEFAULT_INSTALL_DIR)/Extensions
DIR_DOCS = $(top_builddir)/docs
DIR_EXTENSIONS = $(top_builddir)/extensions
-DIR_GPHOTO2 = $(top_builddir)/lib/libgphoto2-sharp
DIR_ICONS = $(top_builddir)/icons
DIR_JPEGTRAN = $(top_builddir)/lib/libjpegtran
-DIR_KEYRING = $(top_builddir)/lib/gnome-keyring-sharp
DIR_LIBFSPOT = $(top_builddir)/lib/libfspot
DIR_SEMWEB = $(top_builddir)/lib/semweb
DIR_SRC = $(top_builddir)/src
DIR_GIOSHARP = $(top_builddir)/lib/gio-sharp/gio
DIR_GTKSHARPBEANS = $(top_builddir)/lib/gtk-sharp-beans
DIR_UNIQUESHARP = $(top_builddir)/lib/unique-sharp/unique
-LINK_KEYRING = -r:$(DIR_KEYRING)/gnome-keyring-sharp.dll
-LINK_GPHOTO2 = -r:$(DIR_GPHOTO2)/libgphoto2-sharp.dll
-LINK_SEMWEB = -r:$(DIR_SEMWEB)/SemWeb.dll
-LINK_GIOSHARP = -r:$(DIR_GIOSHARP)/gio-sharp.dll
-LINK_GTKSHARPBEANS = -r:$(DIR_GTKSHARPBEANS)/gtk-sharp-beans.dll
-LINK_UNIQUESHARP = -r:$(DIR_UNIQUESHARP)/unique-sharp.dll
-CSC_FLAGS = -debug
-CSC = $(MCS) $(CSC_FLAGS) -target:exe
-CSC_LIB = $(MCS) $(CSC_FLAGS) -target:library
-MONO_DEBUGFLAGS = --debug
-RUNTIME = mono $(MONO_DEBUGFLAGS)
-PLUGIN_NAME = FlickrExport
-PLUGIN_MANIFEST = $(PLUGIN_NAME).addin.xml
-PLUGIN_ASSEMBLY = $(PLUGIN_NAME).dll
-PLUGIN_SOURCES = \
- $(srcdir)/FlickrExport.cs \
- $(srcdir)/FlickrRemote.cs
-
-REFS = \
- -r:$(top_builddir)/src/f-spot.exe \
- -r:$(top_builddir)/src/FSpot.Core.dll \
- -r:$(top_builddir)/src/FSpot.Utils.dll \
- $(LINK_SEMWEB) \
- $(LINK_GPHOTO2) \
- $(LINK_GIOSHARP) \
- $(LINK_GTKSHARPBEANS) \
- $(LINK_UNIQUESHARP) \
- -r:FlickrNet/FlickrNet.dll \
- -r:Mono.Posix
-
-PKGS = \
- -pkg:gtk-sharp-2.0 \
- -pkg:glade-sharp-2.0
-
-SUBDIRS = \
- FlickrNet
-
-RESOURCES = \
- -resource:$(srcdir)/$(PLUGIN_MANIFEST) \
- -resource:$(srcdir)/$(PLUGIN_NAME).glade
-
-plugindir = $(pkglibdir)/extensions
-plugin_DATA = \
- $(PLUGIN_ASSEMBLY)
-
-EXTRA_DIST = \
- $(PLUGIN_SOURCES) \
- $(PLUGIN_MANIFEST) \
- $(PLUGIN_NAME).glade
-
-CLEANFILES = \
- $(PLUGIN_ASSEMBLY) \
- $(PLUGIN_ASSEMBLY).mdb \
- *.mpack
-
-all: all-recursive
+DIR_BIN = $(top_builddir)/bin
+
+# External libraries to link against, generated from configure
+LINK_SYSTEM = -r:System
+LINK_SYSTEMDATA = -r:System.Data
+LINK_SYSTEM_WEB = -r:System.Web
+LINK_MONO_POSIX = -r:Mono.Posix
+LINK_MONO_CAIRO = -r:Mono.Cairo
+LINK_MONO_SIMD = -r:Mono.Simd
+LINK_MONODATA = -r:Mono.Data
+LINK_MONO_DATA_SQLITECLIENT = -r:Mono.Data.SqliteClient
+LINK_ICSHARP_ZIP_LIB = -r:ICSharpCode.SharpZipLib
+LINK_KEYRING = $(KEYRINGSHARP_LIBS)
+LINK_GLIB = $(GLIBSHARP_LIBS)
+LINK_GTK = $(GTKSHARP_LIBS)
+LINK_GNOME = $(GNOME_SHARP_LIBS)
+LINK_GCONF = $(GCONF_SHARP_LIBS)
+LINK_GLADE = -pkg:glade-sharp-2.0
+LINK_FLICKRNET = -pkg:flickrnet
+LINK_DBUS = $(NDESK_DBUS_LIBS) $(NDESK_DBUS_GLIB_LIBS)
+LINK_DBUS_NO_GLIB = $(NDESK_DBUS_LIBS)
+LINK_MONO_ADDINS_DEPS = $(MONO_ADDINS_LIBS)
+LINK_MONO_ADDINS_SETUP_DEPS = $(MONO_ADDINS_SETUP_LIBS)
+LINK_MONO_ADDINS_GUI_DEPS = $(MONO_ADDINS_GUI_LIBS)
+
+# GIO
+REF_GIO =
+LINK_GIO = -r:$(DIR_GIOSHARP)/gio-sharp.dll
+LINK_GIO_DEPS = $(REF_GIO) $(LINK_GIO)
+
+# Gtk Beans
+REF_GTK_BEANS = $(LINK_GIO_DEPS)
+LINK_GTK_BEANS = -r:$(DIR_GTKSHARPBEANS)/gtk-sharp-beans.dll
+LINK_GTK_BEANS_DEPS = $(REF_GTK_BEANS) $(LINK_GTK_BEANS)
+
+# Uniqe
+REF_UNIQUE =
+LINK_UNIQUE = -r:$(DIR_UNIQUESHARP)/unique-sharp.dll
+LINK_UNIQUE_DEPS = $(REF_UNIQUE) $(LINK_UNIQUE)
+
+# Hyena
+REF_HYENA = $(LINK_SYSTEM) $(LINK_MONO_POSIX)
+LINK_HYENA = -r:$(DIR_BIN)/Hyena.dll
+LINK_HYENA_DEPS = $(REF_HYENA) $(LINK_HYENA)
+
+# Semweb
+REF_SEMWEB = $(LINK_SYSTEMDATA) $(LINK_HYENA_DEPS)
+LINK_SEMWEB = -r:$(DIR_BIN)/SemWeb.dll
+LINK_SEMWEB_DEPS = $(REF_SEMWEB) $(LINK_SEMWEB)
+
+# Hyena.Data.Sqlite
+REF_HYENA_DATA_SQLITE = $(LINK_SQLITE)
+LINK_HYENA_DATA_SQLITE = -r:$(DIR_BIN)/Hyena.Data.Sqlite.dll
+LINK_HYENA_DATA_SQLITE_DEPS = $(REF_HYENA_DATA_SQLITE) $(LINK_HYENA_DATA_SQLITE)
+
+# Hyena.Gui
+REF_HYENA_GUI = $(LINK_HYENA_DEPS)
+LINK_HYENA_GUI = -r:$(DIR_BIN)/Hyena.Gui.dll
+LINK_HENA_GUI_DEPS = $(REF_HYENA_GUI) $(LINK_HYENA_GUI)
+
+# FSpot.Cms
+REF_FSPOT_CMS = $(LINK_GTK)
+LINK_FSPOT_CMS = -r:$(DIR_BIN)/FSpot.Cms.dll
+LINK_FSPOT_CMS_DEPS = $(REF_FSPOT_CMS) $(LINK_FSPOT_CMS)
+
+# FSpot.Utils
+REF_FSPOT_UTILS = $(LINK_HYENA_DEPS) $(LINK_GTK) $(LINK_GIO) $(LINK_MONO_CAIRO)
+LINK_FSPOT_UTILS = -r:$(DIR_BIN)/FSpot.Utils.dll
+LINK_FSPOT_UTILS_DEPS = $(REF_FSPOT_UTILS) $(LINK_FSPOT_UTILS)
+
+# FSpot.Core
+REF_FSPOT_CORE = $(LINK_FSPOT_UTILS_DEPS) $(LINK_FSPOT_CMS_DEPS)
+LINK_FSPOT_CORE = -r:$(DIR_BIN)/FSpot.Core.dll
+LINK_FSPOT_CORE_DEPS = $(REF_FSPOT_CORE) $(LINK_FSPOT_CORE)
+
+# FSpot.Query
+REF_FSPOT_QUERY = $(LINK_FSPOT_CORE_DEPS)
+LINK_FSPOT_QUERY = -r:$(DIR_BIN)/FSpot.Query.dll
+LINK_FSPOT_QUERY_DEPS = $(REF_FSPOT_QUERY) $(LINK_FSPOT_QUERY)
+
+# FSpot.JobScheduler
+REF_FSPOT_JOB_SCHEDULER = $(LINK_HYENA_DEPS)
+LINK_FSPOT_JOB_SCHEDULER = -r:$(DIR_BIN)/FSpot.JobScheduler.dll
+LINK_FSPOT_JOB_SCHEDULER_DEPS = $(REF_FSPOT_JOB_SCHEDULER) $(LINK_FSPOT_JOB_SCHEDULER)
+
+# FSpot.Bling
+REF_FSPOT_BLING = $(LINK_GTK_BEANS_DEPS) $(LINK_GLIB)
+LINK_FSPOT_BLING = -r:$(DIR_BIN)/FSpot.Bling.dll
+LINK_FSPOT_BLING_DEPS = $(REF_FSPOT_BLING) $(LINK_FSPOT_BLING)
+
+# FSpot.Platform
+REF_FSPOT_PLATFORM = $(LINK_GCONF) $(LINK_GTK) $(LINK_FSPOT_CORE_DEPS) $(LINK_DBUS)
+LINK_FSPOT_PLATFORM = -r:$(DIR_BIN)/FSpot.Platform.dll
+LINK_FSPOT_PLATFORM_DEPS = $(REF_FSPOT_PLATFORM) $(LINK_FSPOT_PLATFORM)
+
+# FSpot.Widgets
+REF_FSPOT_WIDGETS = $(LINK_FSPOT_CORE_DEPS) $(LINK_FSPOT_BLING_DEPS)
+LINK_FSPOT_WIDGETS = -r:$(DIR_BIN)/FSpot.Widgets.dll
+LINK_FSPOT_WIDGETS_DEPS = $(REF_FSPOT_WIDGETS) $(LINK_FSPOT_WIDGETS)
+
+# FSpot (executable)
+REF_FSPOT = $(LINK_FSPOT_WIDGETS_DEPS) $(LINK_FSPOT_PLATFORM_DEPS) $(LINK_FSPOT_QUERY_DEPS) \
+ $(LINK_GLIB) $(LINK_MONO_ADDINS_DEPS) $(LINK_UNIQUE_DEPS) $(LINK_MONO_ADDINS_SETUP_DEPS) \
+ $(LINK_SEMWEB_DEPS) $(LINK_GLADE) $(LINK_MONODATA) $(LINK_MONO_DATA_SQLITECLIENT) \
+ $(LINK_MONO_ADDINS_GUI_DEPS) $(LINK_FSPOT_JOB_SCHEDULER_DEPS) $(LINK_ICSHARP_ZIP_LIB) \
+ $(LINK_GNOME)
+
+# FIXME: do not link executables
+LINK_FSPOT = -r:$(DIR_BIN)/f-spot.exe
+LINK_FSPOT_DEPS = $(REF_FSPOT) $(LINK_FSPOT)
+
+# Extensions
+REF_FSPOT_EXTENSION_BLACKOUTEDITOR = $(LINK_FSPOT_DEPS)
+REF_FSPOT_EXTENSION_BWEDITOR = $(LINK_FSPOT_DEPS) $(LINK_MONO_SIMD)
+REF_FSPOT_EXTENSION_FLIPEDITOR = $(LINK_FSPOT_DEPS)
+REF_FSPOT_EXTENSION_PIXELATEEDITOR = $(LINK_FSPOT_DEPS)
+REF_FSPOT_EXTENSION_RESIZEEDITOR = $(LINK_FSPOT_DEPS)
+REF_FSPOT_EXTENSION_CDEXPORT = $(LINK_FSPOT_DEPS)
+REF_FSPOT_EXTENSION_FACEBOOKEXPORT = $(LINK_FSPOT_DEPS) $(LINK_KEYRING)
+REF_FSPOT_EXTENSION_FLICKREXPORT = $(LINK_FSPOT_DEPS) $(LINK_FLICKRNET)
+REF_FSPOT_EXTENSION_FOLDEREXPORT = $(LINK_FSPOT_DEPS) $(LINK_SYSTEM_WEB)
+REF_FSPOT_EXTENSION_GALLERYEXPORT = $(LINK_FSPOT_DEPS)
+REF_MONO_GOOGLE = $(LINK_HYENA_DEPS)
+LINK_MONO_GOOGLE = -r:$(DIR_BIN)/Mono.Google.dll
+LINK_MONO_GOOGLE_DEPS = $(REF_MONO_GOOGLE) $(LINK_MONO_GOOGLE)
+REF_FSPOT_EXTENSION_PICASAWEBEXPORT = $(LINK_FSPOT_DEPS) $(LINK_MONO_GOOGLE) $(LINK_KEYRING)
+REF_SMUGMUGNET = $(LINK_FSPOT_DEPS)
+LINK_SMUGMUGNET = -r:$(DIR_BIN)/SmugMugNet.dll
+LINK_SMUGMUGNET_DEPS = $(REF_SMUGMUGNET) $(LINK_SMUGMUGNET)
+REF_FSPOT_EXTENSION_SMUGMUGEXPORT = $(LINK_SMUGMUGNET_DEPS) $(LINK_KEYRING)
+REF_MONO_TABBLO = $(LINK_HYENA_DEPS)
+LINK_MONO_TABBLO = -r:$(DIR_BIN)/Mono.Tabblo.dll
+LINK_MONO_TABBLO_DEPS = $(REF_MONO_TABBLO) $(LINK_MONO_TABBLO)
+REF_FSPOT_EXTENSION_TABBLOEXPORT = $(LINK_FSPOT_DEPS) $(LINK_KEYRING) $(LINK_MONO_TABBLO_DEPS)
+REF_FSPOT_EXTENSION_ZIPEXPORT = $(LINK_FSPOT_DEPS)
+REF_FSPOT_EXTENSION_CHANGEPHOTOPATH = $(LINK_FSPOT_DEPS)
+REF_FSPOT_EXTENSION_DEVELOPINUFRAW = $(LINK_FSPOT_DEPS)
+REF_FSPOT_EXTENSION_HASHJOB = $(LINK_FSPOT_DEPS)
+REF_FSPOT_EXTENSION_LIVEWEBGALLERY = $(LINK_FSPOT_DEPS)
+REF_FSPOT_EXTENSION_MERGEDB = $(LINK_FSPOT_DEPS)
+REF_FSPOT_EXTENSION_RAWPLUSJPEG = $(LINK_FSPOT_DEPS)
+REF_FSPOT_EXTENSION_RETROACTIVEROLL = $(LINK_FSPOT_DEPS)
+REF_FSPOT_EXTENSION_SCREENSAVERCONFIG = $(LINK_FSPOT_DEPS)
+REF_FSPOT_EXTENSION_COVERTRANSITION = $(LINK_FSPOT_DEPS)
+
+# Cute hack to replace a space with something
+colon := :
+empty :=
+space := $(empty) $(empty)
+
+# Build path to allow running uninstalled
+RUN_PATH = $(subst $(space),$(colon), $(MONO_BASE_PATH))
+UNIQUE_FILTER_PIPE = tr [:space:] \\n | sort | uniq
+BUILD_DATA_DIR = $(top_builddir)/bin/share/$(PACKAGE)
+
+# Since all other attempts failed, we currently go this way:
+# This code adds the file specified in ASSEMBLY_INFO_SOURCE to SOURCES_BUILD.
+# If no such file is specified, the default AssemblyInfo.cs is used.
+ASSEMBLY_INFO_SOURCE_REAL = \
+ $(shell if [ "$(ASSEMBLY_INFO_SOURCE)" ]; \
+ then \
+ echo "$(addprefix $(srcdir)/, $(ASSEMBLY_INFO_SOURCE))"; \
+ else \
+ echo "$(top_srcdir)/src/AssemblyInfo.cs"; \
+ fi)
+
+SOURCES_BUILD = $(addprefix $(srcdir)/, $(SOURCES)) \
+ $(ASSEMBLY_INFO_SOURCE_REAL)
+RESOURCES_EXPANDED = $(addprefix $(srcdir)/, $(RESOURCES))
+RESOURCES_BUILD = $(foreach resource, $(RESOURCES_EXPANDED), \
+ -resource:$(resource),$(notdir $(resource)))
+
+INSTALL_ICONS = $(top_srcdir)/build/private-icon-theme-installer "$(mkinstalldirs)" "$(INSTALL_DATA)"
+THEME_ICONS_SOURCE = $(wildcard $(srcdir)/ThemeIcons/*/*/*.png) $(wildcard $(srcdir)/ThemeIcons/scalable/*/*.svg)
+THEME_ICONS_RELATIVE = $(subst $(srcdir)/ThemeIcons/, , $(THEME_ICONS_SOURCE))
+ASSEMBLY_EXTENSION = $(strip $(patsubst library, dll, $(TARGET)))
+ASSEMBLY_FILE = $(top_builddir)/bin/$(ASSEMBLY).$(ASSEMBLY_EXTENSION)
+INSTALL_DIR_RESOLVED = $(firstword $(subst , $(DEFAULT_INSTALL_DIR), $(INSTALL_DIR)))
+ at ENABLE_TESTS_TRUE@ENABLE_TESTS_FLAG = "-define:ENABLE_TESTS"
+ at ENABLE_ATK_TRUE@ENABLE_ATK_FLAG = "-define:ENABLE_ATK"
+FILTERED_LINK = $(shell echo "$(LINK)" | $(UNIQUE_FILTER_PIPE))
+DEP_LINK = $(shell echo "$(LINK)" | $(UNIQUE_FILTER_PIPE) | sed s,-r:,,g | grep '$(top_builddir)/bin/')
+OUTPUT_FILES = \
+ $(ASSEMBLY_FILE) \
+ $(ASSEMBLY_FILE).mdb
+
+moduledir = $(INSTALL_DIR_RESOLVED)
+module_SCRIPTS = $(OUTPUT_FILES)
+EXTRA_DIST = $(SOURCES_BUILD) $(RESOURCES_EXPANDED) $(THEME_ICONS_SOURCE)
+CLEANFILES = $(OUTPUT_FILES) $(ASSEMBLY_FILE).config
+DISTCLEANFILES = *.pidb
+MAINTAINERCLEANFILES = Makefile.in
+all: all-am
.SUFFIXES:
-$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(top_srcdir)/Makefile.include $(am__configure_deps)
+$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(top_srcdir)/build/build.mk $(top_srcdir)/build/build.environment.mk $(top_srcdir)/build/build.rules.mk $(am__configure_deps)
@for dep in $?; do \
case '$(am__configure_deps)' in \
*$$dep*) \
@@ -424,167 +561,52 @@ $(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps)
$(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps)
cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
$(am__aclocal_m4_deps):
+install-moduleSCRIPTS: $(module_SCRIPTS)
+ @$(NORMAL_INSTALL)
+ test -z "$(moduledir)" || $(MKDIR_P) "$(DESTDIR)$(moduledir)"
+ @list='$(module_SCRIPTS)'; test -n "$(moduledir)" || list=; \
+ for p in $$list; do \
+ if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \
+ if test -f "$$d$$p"; then echo "$$d$$p"; echo "$$p"; else :; fi; \
+ done | \
+ sed -e 'p;s,.*/,,;n' \
+ -e 'h;s|.*|.|' \
+ -e 'p;x;s,.*/,,;$(transform)' | sed 'N;N;N;s,\n, ,g' | \
+ $(AWK) 'BEGIN { files["."] = ""; dirs["."] = 1; } \
+ { d=$$3; if (dirs[d] != 1) { print "d", d; dirs[d] = 1 } \
+ if ($$2 == $$4) { files[d] = files[d] " " $$1; \
+ if (++n[d] == $(am__install_max)) { \
+ print "f", d, files[d]; n[d] = 0; files[d] = "" } } \
+ else { print "f", d "/" $$4, $$1 } } \
+ END { for (d in files) print "f", d, files[d] }' | \
+ while read type dir files; do \
+ if test "$$dir" = .; then dir=; else dir=/$$dir; fi; \
+ test -z "$$files" || { \
+ echo " $(INSTALL_SCRIPT) $$files '$(DESTDIR)$(moduledir)$$dir'"; \
+ $(INSTALL_SCRIPT) $$files "$(DESTDIR)$(moduledir)$$dir" || exit $$?; \
+ } \
+ ; done
+
+uninstall-moduleSCRIPTS:
+ @$(NORMAL_UNINSTALL)
+ @list='$(module_SCRIPTS)'; test -n "$(moduledir)" || exit 0; \
+ files=`for p in $$list; do echo "$$p"; done | \
+ sed -e 's,.*/,,;$(transform)'`; \
+ test -n "$$list" || exit 0; \
+ echo " ( cd '$(DESTDIR)$(moduledir)' && rm -f" $$files ")"; \
+ cd "$(DESTDIR)$(moduledir)" && rm -f $$files
mostlyclean-libtool:
-rm -f *.lo
clean-libtool:
-rm -rf .libs _libs
-install-pluginDATA: $(plugin_DATA)
- @$(NORMAL_INSTALL)
- test -z "$(plugindir)" || $(MKDIR_P) "$(DESTDIR)$(plugindir)"
- @list='$(plugin_DATA)'; test -n "$(plugindir)" || list=; \
- for p in $$list; do \
- if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \
- echo "$$d$$p"; \
- done | $(am__base_list) | \
- while read files; do \
- echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(plugindir)'"; \
- $(INSTALL_DATA) $$files "$(DESTDIR)$(plugindir)" || exit $$?; \
- done
-
-uninstall-pluginDATA:
- @$(NORMAL_UNINSTALL)
- @list='$(plugin_DATA)'; test -n "$(plugindir)" || list=; \
- files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \
- test -n "$$files" || exit 0; \
- echo " ( cd '$(DESTDIR)$(plugindir)' && rm -f" $$files ")"; \
- cd "$(DESTDIR)$(plugindir)" && rm -f $$files
-
-# 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,
-# (1) if the variable is set in `config.status', edit `config.status'
-# (which will cause the Makefiles to be regenerated when you run `make');
-# (2) otherwise, pass the desired values on the `make' command line.
-$(RECURSIVE_TARGETS):
- @fail= failcom='exit 1'; \
- for f in x $$MAKEFLAGS; do \
- case $$f in \
- *=* | --[!k]*);; \
- *k*) failcom='fail=yes';; \
- esac; \
- done; \
- dot_seen=no; \
- target=`echo $@ | sed s/-recursive//`; \
- list='$(SUBDIRS)'; for subdir in $$list; do \
- echo "Making $$target in $$subdir"; \
- if test "$$subdir" = "."; then \
- dot_seen=yes; \
- local_target="$$target-am"; \
- else \
- local_target="$$target"; \
- fi; \
- ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \
- || eval $$failcom; \
- done; \
- if test "$$dot_seen" = "no"; then \
- $(MAKE) $(AM_MAKEFLAGS) "$$target-am" || exit 1; \
- fi; test -z "$$fail"
-
-$(RECURSIVE_CLEAN_TARGETS):
- @fail= failcom='exit 1'; \
- for f in x $$MAKEFLAGS; do \
- case $$f in \
- *=* | --[!k]*);; \
- *k*) failcom='fail=yes';; \
- esac; \
- done; \
- dot_seen=no; \
- case "$@" in \
- distclean-* | maintainer-clean-*) list='$(DIST_SUBDIRS)' ;; \
- *) list='$(SUBDIRS)' ;; \
- esac; \
- rev=''; for subdir in $$list; do \
- if test "$$subdir" = "."; then :; else \
- rev="$$subdir $$rev"; \
- fi; \
- done; \
- rev="$$rev ."; \
- target=`echo $@ | sed s/-recursive//`; \
- for subdir in $$rev; do \
- echo "Making $$target in $$subdir"; \
- if test "$$subdir" = "."; then \
- local_target="$$target-am"; \
- else \
- local_target="$$target"; \
- fi; \
- ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \
- || eval $$failcom; \
- done && test -z "$$fail"
-tags-recursive:
- list='$(SUBDIRS)'; for subdir in $$list; do \
- test "$$subdir" = . || ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) tags); \
- done
-ctags-recursive:
- list='$(SUBDIRS)'; for subdir in $$list; do \
- test "$$subdir" = . || ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) ctags); \
- done
-
-ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES)
- list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
- unique=`for i in $$list; do \
- if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
- done | \
- $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
- END { if (nonempty) { for (i in files) print i; }; }'`; \
- mkid -fID $$unique
tags: TAGS
+TAGS:
-TAGS: tags-recursive $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \
- $(TAGS_FILES) $(LISP)
- set x; \
- here=`pwd`; \
- if ($(ETAGS) --etags-include --version) >/dev/null 2>&1; then \
- include_option=--etags-include; \
- empty_fix=.; \
- else \
- include_option=--include; \
- empty_fix=; \
- fi; \
- list='$(SUBDIRS)'; for subdir in $$list; do \
- if test "$$subdir" = .; then :; else \
- test ! -f $$subdir/TAGS || \
- set "$$@" "$$include_option=$$here/$$subdir/TAGS"; \
- fi; \
- done; \
- list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
- unique=`for i in $$list; do \
- if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
- done | \
- $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
- END { if (nonempty) { for (i in files) print i; }; }'`; \
- shift; \
- if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \
- test -n "$$unique" || unique=$$empty_fix; \
- if test $$# -gt 0; then \
- $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
- "$$@" $$unique; \
- else \
- $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
- $$unique; \
- fi; \
- fi
ctags: CTAGS
-CTAGS: ctags-recursive $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \
- $(TAGS_FILES) $(LISP)
- list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
- unique=`for i in $$list; do \
- if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
- done | \
- $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
- END { if (nonempty) { for (i in files) print i; }; }'`; \
- test -z "$(CTAGS_ARGS)$$unique" \
- || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \
- $$unique
-
-GTAGS:
- here=`$(am__cd) $(top_builddir) && pwd` \
- && $(am__cd) $(top_srcdir) \
- && gtags -i $(GTAGS_ARGS) "$$here"
-
-distclean-tags:
- -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags
+CTAGS:
+
distdir: $(DISTFILES)
@srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
@@ -616,51 +638,22 @@ distdir: $(DISTFILES)
|| exit 1; \
fi; \
done
- @list='$(DIST_SUBDIRS)'; for subdir in $$list; do \
- if test "$$subdir" = .; then :; else \
- test -d "$(distdir)/$$subdir" \
- || $(MKDIR_P) "$(distdir)/$$subdir" \
- || exit 1; \
- fi; \
- done
- @list='$(DIST_SUBDIRS)'; for subdir in $$list; do \
- if test "$$subdir" = .; then :; else \
- dir1=$$subdir; dir2="$(distdir)/$$subdir"; \
- $(am__relativize); \
- new_distdir=$$reldir; \
- dir1=$$subdir; dir2="$(top_distdir)"; \
- $(am__relativize); \
- new_top_distdir=$$reldir; \
- echo " (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) top_distdir="$$new_top_distdir" distdir="$$new_distdir" \\"; \
- echo " am__remove_distdir=: am__skip_length_check=: am__skip_mode_fix=: distdir)"; \
- ($(am__cd) $$subdir && \
- $(MAKE) $(AM_MAKEFLAGS) \
- top_distdir="$$new_top_distdir" \
- distdir="$$new_distdir" \
- am__remove_distdir=: \
- am__skip_length_check=: \
- am__skip_mode_fix=: \
- distdir) \
- || exit 1; \
- fi; \
- done
check-am: all-am
-check: check-recursive
-all-am: Makefile $(DATA)
-installdirs: installdirs-recursive
-installdirs-am:
- for dir in "$(DESTDIR)$(plugindir)"; do \
+check: check-am
+all-am: Makefile $(SCRIPTS)
+installdirs:
+ for dir in "$(DESTDIR)$(moduledir)"; do \
test -z "$$dir" || $(MKDIR_P) "$$dir"; \
done
-install: install-recursive
-install-exec: install-exec-recursive
-install-data: install-data-recursive
-uninstall: uninstall-recursive
+install: install-am
+install-exec: install-exec-am
+install-data: install-data-am
+uninstall: uninstall-am
install-am: all-am
@$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
-installcheck: installcheck-recursive
+installcheck: installcheck-am
install-strip:
$(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
@@ -674,104 +667,142 @@ clean-generic:
distclean-generic:
-test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
-test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES)
+ -test -z "$(DISTCLEANFILES)" || rm -f $(DISTCLEANFILES)
maintainer-clean-generic:
@echo "This command is intended for maintainers to use"
@echo "it deletes files that may require special tools to rebuild."
-clean: clean-recursive
+ -test -z "$(MAINTAINERCLEANFILES)" || rm -f $(MAINTAINERCLEANFILES)
+clean: clean-am
clean-am: clean-generic clean-libtool mostlyclean-am
-distclean: distclean-recursive
+distclean: distclean-am
-rm -f Makefile
-distclean-am: clean-am distclean-generic distclean-tags
+distclean-am: clean-am distclean-generic
-dvi: dvi-recursive
+dvi: dvi-am
dvi-am:
-html: html-recursive
+html: html-am
html-am:
-info: info-recursive
+info: info-am
info-am:
-install-data-am: install-pluginDATA
- @$(NORMAL_INSTALL)
- $(MAKE) $(AM_MAKEFLAGS) install-data-hook
-install-dvi: install-dvi-recursive
+install-data-am: install-data-local install-moduleSCRIPTS
+
+install-dvi: install-dvi-am
install-dvi-am:
install-exec-am:
-install-html: install-html-recursive
+install-html: install-html-am
install-html-am:
-install-info: install-info-recursive
+install-info: install-info-am
install-info-am:
install-man:
-install-pdf: install-pdf-recursive
+install-pdf: install-pdf-am
install-pdf-am:
-install-ps: install-ps-recursive
+install-ps: install-ps-am
install-ps-am:
installcheck-am:
-maintainer-clean: maintainer-clean-recursive
+maintainer-clean: maintainer-clean-am
-rm -f Makefile
maintainer-clean-am: distclean-am maintainer-clean-generic
-mostlyclean: mostlyclean-recursive
+mostlyclean: mostlyclean-am
mostlyclean-am: mostlyclean-generic mostlyclean-libtool
-pdf: pdf-recursive
+pdf: pdf-am
pdf-am:
-ps: ps-recursive
+ps: ps-am
ps-am:
-uninstall-am: uninstall-pluginDATA
-
-.MAKE: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) ctags-recursive \
- install-am install-data-am install-strip tags-recursive
-
-.PHONY: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) CTAGS GTAGS \
- all all-am check check-am clean clean-generic clean-libtool \
- ctags ctags-recursive distclean 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-data-hook 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-pluginDATA install-ps install-ps-am \
- install-strip installcheck installcheck-am installdirs \
- installdirs-am maintainer-clean maintainer-clean-generic \
- mostlyclean mostlyclean-generic mostlyclean-libtool pdf pdf-am \
- ps ps-am tags tags-recursive uninstall uninstall-am \
- uninstall-pluginDATA
+uninstall-am: uninstall-local uninstall-moduleSCRIPTS
+.MAKE: install-am install-strip
-mpack: $(PLUGIN_ASSEMBLY)
- mautil p $(PLUGIN_ASSEMBLY)
-
-$(PLUGIN_ASSEMBLY): $(PLUGIN_SOURCES) $(PLUGIN_MANIFEST)
- $(CSC_LIB) -out:$@ $(PLUGIN_SOURCES) $(REFS) $(PKGS) $(ASSEMBLIES) $(RESOURCES)
-
-install-data-hook:
- if [ -w $(DESTDIR)$(plugindir)/$(PLUGIN_NAME).addin.xml ] ; then rm -f $(DESTDIR)$(plugindir)/$(PLUGIN_NAME).addin.xml; fi
+.PHONY: all all-am check check-am clean clean-generic clean-libtool \
+ distclean distclean-generic distclean-libtool distdir dvi \
+ dvi-am html html-am info info-am install install-am \
+ install-data install-data-am install-data-local install-dvi \
+ install-dvi-am install-exec install-exec-am install-html \
+ install-html-am install-info install-info-am install-man \
+ install-moduleSCRIPTS install-pdf install-pdf-am install-ps \
+ install-ps-am install-strip installcheck installcheck-am \
+ installdirs maintainer-clean maintainer-clean-generic \
+ mostlyclean mostlyclean-generic mostlyclean-libtool pdf pdf-am \
+ ps ps-am uninstall uninstall-am uninstall-local \
+ uninstall-moduleSCRIPTS
+
+
+all: $(ASSEMBLY_FILE) theme-icons
+
+run:
+ @pushd $(top_builddir); \
+ make run; \
+ popd;
+
+# uncommented for now.
+# tests are currently excuted from Makefile in $(top_builddir)
+#test:
+# @pushd $(top_builddir)/tests; \
+# make $(ASSEMBLY); \
+# popd;
+
+build-debug:
+ @echo $(DEP_LINK)
+
+$(ASSEMBLY_FILE).mdb: $(ASSEMBLY_FILE)
+
+$(ASSEMBLY_FILE): $(SOURCES_BUILD) $(RESOURCES_EXPANDED) $(DEP_LINK)
+ @mkdir -p $(top_builddir)/bin
+ @if [ ! "x$(ENABLE_RELEASE)" = "xyes" ]; then \
+ $(top_srcdir)/build/dll-map-makefile-verifier $(srcdir)/Makefile.am $(srcdir)/$(notdir $@.config) && \
+ $(MONO) $(top_builddir)/build/dll-map-verifier.exe $(srcdir)/$(notdir $@.config) -iwinmm -ilibbanshee -ilibbnpx11 -ilibc -ilibc.so.6 -iintl -ilibmtp.dll -ilibigemacintegration.dylib -iCFRelease $(SOURCES_BUILD); \
+ fi;
+ $(MCS) \
+ $(GMCS_FLAGS) \
+ $(ASSEMBLY_BUILD_FLAGS) \
+ -nowarn:0278 -nowarn:0078 $$warn \
+ -define:HAVE_GTK_2_10 -define:NET_2_0 \
+ -debug -target:$(TARGET) -out:$@ \
+ $(BUILD_DEFINES) $(ENABLE_TESTS_FLAG) $(ENABLE_ATK_FLAG) \
+ $(FILTERED_LINK) $(RESOURCES_BUILD) $(SOURCES_BUILD)
+ @if [ -e $(srcdir)/$(notdir $@.config) ]; then \
+ cp $(srcdir)/$(notdir $@.config) $(top_builddir)/bin; \
+ fi;
+ @if [ ! -z "$(EXTRA_BUNDLE)" ]; then \
+ cp $(EXTRA_BUNDLE) $(top_builddir)/bin; \
+ fi;
+
+theme-icons: $(THEME_ICONS_SOURCE)
+ @$(INSTALL_ICONS) -il "$(BUILD_DATA_DIR)" "$(srcdir)" $(THEME_ICONS_RELATIVE)
+
+install-data-local: $(THEME_ICONS_SOURCE)
+ @$(INSTALL_ICONS) -i "$(DESTDIR)$(pkgdatadir)" "$(srcdir)" $(THEME_ICONS_RELATIVE)
+
+uninstall-local: $(THEME_ICONS_SOURCE)
+ @$(INSTALL_ICONS) -u "$(DESTDIR)$(pkgdatadir)" "$(srcdir)" $(THEME_ICONS_RELATIVE)
# 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/extensions/Exporters/FolderExport/FolderExport.cs b/extensions/Exporters/FolderExport/FolderExport.cs
index 60b5305..d3f3cf1 100644
--- a/extensions/Exporters/FolderExport/FolderExport.cs
+++ b/extensions/Exporters/FolderExport/FolderExport.cs
@@ -18,12 +18,14 @@
*/
//This should be used to export the selected pics to an original gallery
-//located on a VFS location.
+//located on a GIO location.
using System;
using System.IO;
using System.Runtime.InteropServices;
using System.Collections;
+using Hyena;
+
using Mono.Unix;
using ICSharpCode.SharpZipLib.Checksums;
@@ -74,10 +76,9 @@ namespace FSpotFolderExport {
private Glade.XML xml;
private string dialog_name = "folder_export_dialog";
- Gnome.Vfs.Uri dest;
+ GLib.File dest;
Gtk.FileChooserButton uri_chooser;
- int photo_index;
bool open;
bool scale;
bool rotate;
@@ -87,7 +88,7 @@ namespace FSpotFolderExport {
string description;
string gallery_name = "Gallery";
- // FIME this needs to be a real temp directory
+ // FIXME this needs to be a real temp directory
string gallery_path = Path.Combine (Path.GetTempPath (), "f-spot-original-" + System.DateTime.Now.Ticks.ToString ());
ThreadProgressDialog progress_dialog;
@@ -97,27 +98,6 @@ namespace FSpotFolderExport {
{}
public void Run (IBrowsableCollection selection)
{
- /*
- Gnome.Vfs.ModuleCallbackFullAuthentication auth = new Gnome.Vfs.ModuleCallbackFullAuthentication ();
- auth.Callback += new Gnome.Vfs.ModuleCallbackHandler (HandleAuth);
- auth.SetDefault ();
- auth.Push ();
-
- Gnome.Vfs.ModuleCallbackAuthentication mauth = new Gnome.Vfs.ModuleCallbackAuthentication ();
- mauth.Callback += new Gnome.Vfs.ModuleCallbackHandler (HandleAuth);
- mauth.SetDefault ();
- mauth.Push ();
-
- Gnome.Vfs.ModuleCallbackSaveAuthentication sauth = new Gnome.Vfs.ModuleCallbackSaveAuthentication ();
- sauth.Callback += new Gnome.Vfs.ModuleCallbackHandler (HandleAuth);
- sauth.SetDefault ();
- sauth.Push ();
-
- Gnome.Vfs.ModuleCallbackStatusMessage msg = new Gnome.Vfs.ModuleCallbackStatusMessage ();
- msg.Callback += new Gnome.Vfs.ModuleCallbackHandler (HandleMsg);
- msg.SetDefault ();
- msg.Push ();
- */
this.selection = selection;
IconView view = (IconView) new IconView (selection);
@@ -143,15 +123,13 @@ namespace FSpotFolderExport {
uri_chooser.LocalOnly = false;
if (!String.IsNullOrEmpty (Preferences.Get<string> (URI_KEY)))
- uri_chooser.SetUri (Preferences.Get<string> (URI_KEY));
+ uri_chooser.SetCurrentFolderUri (Preferences.Get<string> (URI_KEY));
else
uri_chooser.SetFilename (uri_path);
chooser_hbox.PackStart (uri_chooser);
Dialog.ShowAll ();
-
- //LoadHistory ();
Dialog.Response += HandleResponse;
LoadPreference (SCALE_KEY);
@@ -183,17 +161,14 @@ namespace FSpotFolderExport {
{
// FIXME use mkstemp
- Gnome.Vfs.Result result = Gnome.Vfs.Result.Ok;
-
try {
- Dialog.Hide ();
+ Gtk.Application.Invoke (delegate {Dialog.Hide ();});
- Gnome.Vfs.Uri source = new Gnome.Vfs.Uri (Path.Combine (gallery_path, gallery_name));
- Gnome.Vfs.Uri target = dest.Clone();
- target = target.AppendFileName(source.ExtractShortName ());
+ GLib.File source = GLib.FileFactory.NewForPath (Path.Combine (gallery_path, gallery_name));
+ GLib.File target = GLib.FileFactory.NewForPath (Path.Combine (dest.Path, source.Basename));
- if (dest.IsLocal)
- gallery_path = Gnome.Vfs.Uri.GetLocalPathFromUri (dest.ToString ());
+ if (dest.IsNative)
+ gallery_path = dest.Path;
progress_dialog.Message = Catalog.GetString ("Building Gallery");
progress_dialog.Fraction = 0.0;
@@ -208,14 +183,14 @@ namespace FSpotFolderExport {
}
if (scale) {
- System.Console.WriteLine ("setting scale to {0}", size);
+ Log.DebugFormat ("Resize Photos to {0}.", size);
gallery.SetScale (size);
} else {
- System.Console.WriteLine ("Exporting full size image");
+ Log.Debug ("Exporting full size.");
}
if (rotate) {
- System.Console.WriteLine ("Exporting rotated image");
+ Log.Debug ("Autorotate images.");
gallery.SetRotate();
}
@@ -226,36 +201,36 @@ namespace FSpotFolderExport {
gallery.SetExportTagIcons ();
gallery.Description = description;
-
gallery.GenerateLayout ();
+
FilterSet filter_set = new FilterSet ();
if (scale)
filter_set.Add (new ResizeFilter ((uint) size));
else if (rotate)
filter_set.Add (new OrientationFilter ());
filter_set.Add (new ChmodFilter ());
- filter_set.Add (new UniqueNameFilter (gallery_path));
+ filter_set.Add (new UniqueNameFilter (new SafeUri (gallery_path)));
for (int photo_index = 0; photo_index < selection.Count; photo_index++)
{
try {
- progress_dialog.Message = System.String.Format (Catalog.GetString ("Uploading picture \"{0}\""), selection[photo_index].Name);
+ progress_dialog.Message = System.String.Format (Catalog.GetString ("Exporting \"{0}\"..."), selection[photo_index].Name);
progress_dialog.Fraction = photo_index / (double) selection.Count;
gallery.ProcessImage (photo_index, filter_set);
progress_dialog.ProgressText = System.String.Format (Catalog.GetString ("{0} of {1}"), (photo_index + 1), selection.Count);
}
catch (Exception e) {
- progress_dialog.Message = String.Format (Catalog.GetString ("Error uploading picture \"{0}\" to Gallery:{2}{1}"),
+ Log.Error (e.ToString ());
+ progress_dialog.Message = String.Format (Catalog.GetString ("Error Copying \"{0}\" to Gallery:{2}{1}"),
selection[photo_index].Name, e.Message, Environment.NewLine);
progress_dialog.ProgressText = Catalog.GetString ("Error");
if (progress_dialog.PerformRetrySkip ())
photo_index--;
}
-
}
- //create the zip tarballs for original
+ // create the zip tarballs for original
if (gallery is OriginalGallery) {
bool include_tarballs;
try {
@@ -268,32 +243,24 @@ namespace FSpotFolderExport {
(gallery as OriginalGallery).CreateZip ();
}
- // we've created the structure, now if the destination was local we are done
+ // we've created the structure, now if the destination was local (native) we are done
// otherwise we xfer
- if (!dest.IsLocal) {
- Console.WriteLine(target);
- System.Console.WriteLine ("Xfering {0} to {1}", source.ToString (), target.ToString ());
- result = Gnome.Vfs.Xfer.XferUri (source, target,
- Gnome.Vfs.XferOptions.Default,
- Gnome.Vfs.XferErrorMode.Abort,
- Gnome.Vfs.XferOverwriteMode.Replace,
- Progress);
- }
-
- if (result == Gnome.Vfs.Result.Ok) {
-
- progress_dialog.Message = Catalog.GetString ("Done Sending Photos");
- progress_dialog.Fraction = 1.0;
- progress_dialog.ProgressText = Catalog.GetString ("Transfer Complete");
- progress_dialog.ButtonLabel = Gtk.Stock.Ok;
-
- } else {
- progress_dialog.ProgressText = result.ToString ();
- progress_dialog.Message = Catalog.GetString ("Error While Transferring");
+ if (!dest.IsNative) {
+ Log.DebugFormat ("Transferring \"{0}\" to \"{1}\"", source.Path, target.Path);
+ progress_dialog.Message = String.Format (Catalog.GetString ("Transferring to \"{0}\""), target.Path);
+ progress_dialog.ProgressText = Catalog.GetString ("Transferring...");
+ source.CopyRecursive (target, GLib.FileCopyFlags.Overwrite, new GLib.Cancellable (), Progress);
}
+
+ // No need to check result here as if result is not true, an Exception will be thrown before
+ progress_dialog.Message = Catalog.GetString ("Export Complete.");
+ progress_dialog.Fraction = 1.0;
+ progress_dialog.ProgressText = Catalog.GetString ("Exporting Photos Completed.");
+ progress_dialog.ButtonLabel = Gtk.Stock.Ok;
if (open) {
- GtkBeans.Global.ShowUri (Dialog.Screen, target.ToString ());
+ Log.DebugFormat (String.Format ("Open URI \"{0}\"", target.Uri.ToString ()));
+ Gtk.Application.Invoke (delegate {GtkBeans.Global.ShowUri (Dialog.Screen, target.Uri.ToString () );});
}
// Save these settings for next time
@@ -306,58 +273,24 @@ namespace FSpotFolderExport {
Preferences.Set (METHOD_KEY, static_radio.Active ? "static" : original_radio.Active ? "original" : "folder" );
Preferences.Set (URI_KEY, uri_chooser.Uri);
} catch (System.Exception e) {
- // Console.WriteLine (e);
+ Log.Error (e.ToString ());
progress_dialog.Message = e.ToString ();
progress_dialog.ProgressText = Catalog.GetString ("Error Transferring");
} finally {
// if the destination isn't local then we want to remove the temp directory we
// created.
- if (!dest.IsLocal)
+ if (!dest.IsNative)
System.IO.Directory.Delete (gallery_path, true);
Gtk.Application.Invoke (delegate { Dialog.Destroy(); });
-
}
}
- private int Progress (Gnome.Vfs.XferProgressInfo info)
+ private void Progress (long current_num_bytes, long total_num_bytes)
{
- progress_dialog.ProgressText = info.Phase.ToString ();
-
- if (info.BytesTotal > 0) {
- progress_dialog.Fraction = info.BytesCopied / (double)info.BytesTotal;
+ if (total_num_bytes > 0) {
+ progress_dialog.Fraction = current_num_bytes / (double)total_num_bytes;
}
-
- switch (info.Status) {
- case Gnome.Vfs.XferProgressStatus.Vfserror:
- progress_dialog.Message = Catalog.GetString ("Error: Error while transferring; Aborting");
- return (int)Gnome.Vfs.XferErrorAction.Abort;
- case Gnome.Vfs.XferProgressStatus.Overwrite:
- progress_dialog.ProgressText = Catalog.GetString ("Error: File Already Exists; Aborting");
- return (int)Gnome.Vfs.XferOverwriteAction.Abort;
- default:
- return 1;
- }
-
- }
-
- private void HandleMsg (Gnome.Vfs.ModuleCallback cb)
- {
- Gnome.Vfs.ModuleCallbackStatusMessage msg = cb as Gnome.Vfs.ModuleCallbackStatusMessage;
- System.Console.WriteLine ("{0}", msg.Message);
- }
-
- private void HandleAuth (Gnome.Vfs.ModuleCallback cb)
- {
- Gnome.Vfs.ModuleCallbackFullAuthentication fcb = cb as Gnome.Vfs.ModuleCallbackFullAuthentication;
- System.Console.Write ("Enter your username ({0}): ", fcb.Username);
- string username = System.Console.ReadLine ();
- System.Console.Write ("Enter your password : ");
- string passwd = System.Console.ReadLine ();
-
- if (username.Length > 0)
- fcb.Username = username;
- fcb.Password = passwd;
}
private void HandleResponse (object sender, Gtk.ResponseArgs args)
@@ -373,7 +306,7 @@ namespace FSpotFolderExport {
return;
}
- dest = new Gnome.Vfs.Uri (uri_chooser.Uri);
+ dest = GLib.FileFactory.NewForUri (uri_chooser.Uri);
open = open_check.Active;
scale = scale_check.Active;
rotate = rotate_check.Active;
@@ -389,13 +322,8 @@ namespace FSpotFolderExport {
size = size_spin.ValueAsInt;
command_thread = new System.Threading.Thread (new System.Threading.ThreadStart (Upload));
- command_thread.Name = Catalog.GetString ("Transferring Pictures");
+ command_thread.Name = Catalog.GetString ("Exporting Photos");
- //FIXME: get the files/dirs count in a cleaner way than (* 5 + 2(zip) + 9)
- // selection * 5 (original, mq, lq, thumbs, comments)
- // 2: zipfiles
- // 9: directories + info.txt + .htaccess
- // this should actually be 1 anyway, because we transfer just one dir
progress_dialog = new ThreadProgressDialog (command_thread, 1);
progress_dialog.Start ();
}
@@ -514,13 +442,27 @@ namespace FSpotFolderExport {
protected virtual string ImageName (int image_num)
{
- return System.IO.Path.GetFileName(FileImportBackend.UniqueName(gallery_path, System.IO.Path.GetFileName (collection [image_num].DefaultVersionUri.LocalPath)));
+ var uri = collection [image_num].DefaultVersion.Uri;
+ var dest_uri = new SafeUri (gallery_path);
+
+ // Find an unused name
+ int i = 1;
+ var dest = dest_uri.Append (uri.GetFilename ());
+ var file = GLib.FileFactory.NewForUri (dest);
+ while (file.Exists) {
+ var filename = uri.GetFilenameWithoutExtension ();
+ var extension = uri.GetExtension ();
+ dest = dest_uri.Append (String.Format ("{0}-{1}{2}", filename, i++, extension));
+ file = GLib.FileFactory.NewForUri (dest);
+ }
+
+ return dest.GetFilename ();
}
public void ProcessImage (int image_num, FilterSet filter_set)
{
IBrowsableItem photo = collection [image_num];
- string photo_path = photo.DefaultVersionUri.LocalPath;
+ string photo_path = photo.DefaultVersion.Uri.LocalPath;
string path;
ScaleRequest req;
@@ -529,19 +471,19 @@ namespace FSpotFolderExport {
MakeDir (SubdirPath (req.Name));
path = SubdirPath (req.Name, ImageName (image_num));
- using (FilterRequest request = new FilterRequest (photo.DefaultVersionUri)) {
+ using (FilterRequest request = new FilterRequest (photo.DefaultVersion.Uri)) {
filter_set.Convert (request);
if (request.Current.LocalPath == path)
request.Preserve(request.Current);
else
- File.Copy (request.Current.LocalPath, path, true);
+ System.IO.File.Copy (request.Current.LocalPath, path, true);
if (photo != null && photo is Photo && App.Instance.Database != null) {
App.Instance.Database.Exports.Create ((photo as Photo).Id, (photo as Photo).DefaultVersionId,
ExportStore.FolderExportType,
// FIXME this is wrong, the final path is the one
// after the Xfer.
- UriUtils.PathToFileUriEscaped (path).ToString ());
+ new SafeUri (path).ToString ());
}
using (Exif.ExifData data = new Exif.ExifData (photo_path)) {
@@ -568,7 +510,7 @@ namespace FSpotFolderExport {
if (req.Name == "thumbs")
req_set.Add (new SharpFilter (0.1, 2, 5));
}
- using (FilterRequest tmp_req = new FilterRequest (photo.DefaultVersionUri)) {
+ using (FilterRequest tmp_req = new FilterRequest (photo.DefaultVersion.Uri)) {
req_set.Convert (tmp_req);
MakeDir (SubdirPath (req.Name));
path = SubdirPath (req.Name, ImageName (image_num));
@@ -585,7 +527,7 @@ namespace FSpotFolderExport {
try {
Directory.CreateDirectory (path);
} catch {
- Console.WriteLine ("Error in creating directory " + path);
+ Log.ErrorFormat ("Error in creating directory \"{0}\"", path);
}
return path;
}
@@ -698,20 +640,15 @@ namespace FSpotFolderExport {
return String.Format ("img-{0}.jpg", photo_index + 1);
}
- private string AlternateName (int photo_index, string extension)
- {
- return System.IO.Path.GetFileNameWithoutExtension (ImageName (photo_index)) + extension;
- }
-
private void SetTime ()
{
try {
for (int i = 0; i < collection.Count; i++)
- CreateComments (collection [i].DefaultVersionUri.LocalPath, i);
+ CreateComments (collection [i].DefaultVersion.Uri.LocalPath, i);
Directory.SetLastWriteTimeUtc(gallery_path, collection [0].Time);
} catch (System.Exception e) {
- System.Console.WriteLine (e.ToString ());
+ Log.Error (e.ToString ());
}
}
@@ -726,7 +663,7 @@ namespace FSpotFolderExport {
CreateZipFile("hq");
} catch (System.Exception e) {
- System.Console.WriteLine (e.ToString ());
+ Log.Error (e.ToString ());
}
}
@@ -797,7 +734,6 @@ namespace FSpotFolderExport {
class HtmlGallery : FolderGallery
{
- int current;
int perpage = 16;
string stylesheet = "f-spot-simple.css";
string altstylesheet = "f-spot-simple-white.css";
@@ -1099,7 +1035,7 @@ namespace FSpotFolderExport {
writer.Write (Catalog.GetString ("Gallery generated by") + " ");
- writer.AddAttribute ("href", "http://www.gnome.org/projects/f-spot");
+ writer.AddAttribute ("href", "http://f-spot.org");
writer.RenderBeginTag ("a");
writer.Write (String.Format ("{0} {1}", FSpot.Defines.PACKAGE, FSpot.Defines.VERSION));
writer.RenderEndTag ();
diff --git a/extensions/Exporters/FolderExport/Makefile.am b/extensions/Exporters/FolderExport/Makefile.am
index 6d16ba8..f5d2148 100644
--- a/extensions/Exporters/FolderExport/Makefile.am
+++ b/extensions/Exporters/FolderExport/Makefile.am
@@ -1,61 +1,15 @@
-include $(top_srcdir)/Makefile.include
-
-PLUGIN_NAME = FolderExport
-
-PLUGIN_MANIFEST = $(PLUGIN_NAME).addin.xml
-
-PLUGIN_ASSEMBLY = $(PLUGIN_NAME).dll
-
-PLUGIN_SOURCES = \
- $(srcdir)/FolderExport.cs
-
-REFS = \
- -r:$(top_builddir)/src/f-spot.exe \
- -r:$(top_builddir)/src/FSpot.Core.dll \
- -r:$(top_builddir)/src/FSpot.Utils.dll \
- $(LINK_SEMWEB) \
- $(LINK_GPHOTO2) \
- $(LINK_GIOSHARP) \
- $(LINK_GTKSHARPBEANS) \
- $(LINK_UNIQUESHARP) \
- -r:System.Web \
- -r:ICSharpCode.SharpZipLib \
- -r:Mono.Posix
-
-PKGS = \
- -pkg:gnome-vfs-sharp-2.0 \
- -pkg:gtk-sharp-2.0 \
- -pkg:glade-sharp-2.0
-
-RESOURCES = \
- -resource:$(srcdir)/$(PLUGIN_MANIFEST) \
- -resource:$(srcdir)/$(PLUGIN_NAME).glade \
- -resource:$(srcdir)/f-spot-simple-white.css \
- -resource:$(srcdir)/f-spot-simple.css \
- -resource:$(srcdir)/f-spot.js
-
-all: $(PLUGIN_ASSEMBLY)
-
-mpack: $(PLUGIN_ASSEMBLY)
- mautil p $(PLUGIN_ASSEMBLY)
-
-$(PLUGIN_ASSEMBLY): $(PLUGIN_SOURCES) $(PLUGIN_MANIFEST)
- $(CSC_LIB) -out:$@ $(PLUGIN_SOURCES) $(REFS) $(PKGS) $(ASSEMBLIES) $(RESOURCES)
-
-plugindir = $(pkglibdir)/extensions
-
-plugin_DATA = \
- $(PLUGIN_ASSEMBLY)
-
-EXTRA_DIST = \
- $(PLUGIN_SOURCES) \
- $(PLUGIN_MANIFEST) \
- $(PLUGIN_NAME).glade \
- f-spot-simple.css \
- f-spot-simple-white.css \
+ASSEMBLY = FSpot.Exporters.FolderExport
+TARGET = library
+LINK = $(REF_FSPOT_EXTENSION_FOLDEREXPORT)
+INSTALL_DIR = $(EXTENSIONS_INSTALL_DIR)
+
+SOURCES = FolderExport.cs
+
+RESOURCES = \
+ FolderExport.addin.xml \
+ FolderExport.glade \
+ f-spot-simple-white.css \
+ f-spot-simple.css \
f-spot.js
-CLEANFILES = \
- $(PLUGIN_ASSEMBLY) \
- $(PLUGIN_ASSEMBLY).mdb \
- *.mpack
+include $(top_srcdir)/build/build.mk
diff --git a/extensions/Exporters/FolderExport/Makefile.in b/extensions/Exporters/FolderExport/Makefile.in
index 2fc1bc7..d71c30a 100644
--- a/extensions/Exporters/FolderExport/Makefile.in
+++ b/extensions/Exporters/FolderExport/Makefile.in
@@ -35,13 +35,22 @@ POST_UNINSTALL = :
build_triplet = @build@
host_triplet = @host@
DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in \
- $(top_srcdir)/Makefile.include
+ $(top_srcdir)/build/build.environment.mk \
+ $(top_srcdir)/build/build.mk \
+ $(top_srcdir)/build/build.rules.mk
+ at ENABLE_TESTS_TRUE@am__append_1 = " $(NUNIT_LIBS)"
subdir = extensions/Exporters/FolderExport
ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
am__aclocal_m4_deps = $(top_srcdir)/build/m4/shave/shave.m4 \
$(top_srcdir)/build/m4/shamrock/expansions.m4 \
+ $(top_srcdir)/build/m4/shamrock/gnome-doc.m4 \
$(top_srcdir)/build/m4/shamrock/mono.m4 \
+ $(top_srcdir)/build/m4/shamrock/nunit.m4 \
$(top_srcdir)/build/m4/shamrock/programs.m4 \
+ $(top_srcdir)/build/m4/f-spot/flickrnet.m4 \
+ $(top_srcdir)/build/m4/f-spot/gnome-keyring-sharp.m4 \
+ $(top_srcdir)/build/m4/f-spot/gtk-sharp.m4 \
+ $(top_srcdir)/build/m4/f-spot/mono-addins.m4 \
$(top_srcdir)/acinclude.m4 $(top_srcdir)/configure.ac
am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
$(ACLOCAL_M4)
@@ -49,8 +58,6 @@ mkinstalldirs = $(install_sh) -d
CONFIG_HEADER = $(top_builddir)/config.h
CONFIG_CLEAN_FILES =
CONFIG_CLEAN_VPATH_FILES =
-SOURCES =
-DIST_SOURCES =
am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`;
am__vpath_adj = case $$p in \
$(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \
@@ -72,8 +79,9 @@ am__nobase_list = $(am__nobase_strip_setup); \
am__base_list = \
sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \
sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g'
-am__installdirs = "$(DESTDIR)$(plugindir)"
-DATA = $(plugin_DATA)
+am__installdirs = "$(DESTDIR)$(moduledir)"
+SCRIPTS = $(module_SCRIPTS)
+DIST_SOURCES =
DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
ACLOCAL = @ACLOCAL@
ACLOCAL_AMFLAGS = @ACLOCAL_AMFLAGS@
@@ -119,6 +127,8 @@ EXIF_SOVERSION = @EXIF_SOVERSION@
F77 = @F77@
FC = @FC@
FGREP = @FGREP@
+FLICKRNET_CFLAGS = @FLICKRNET_CFLAGS@
+FLICKRNET_LIBS = @FLICKRNET_LIBS@
F_CFLAGS = @F_CFLAGS@
F_LIBS = @F_LIBS@
GAPI2CODEGEN = @GAPI2CODEGEN@
@@ -132,6 +142,8 @@ GCONF_SHARP_LIBS = @GCONF_SHARP_LIBS@
GETTEXT_PACKAGE = @GETTEXT_PACKAGE@
GIO_CFLAGS = @GIO_CFLAGS@
GIO_LIBS = @GIO_LIBS@
+GLIBSHARP_2_12_7_CFLAGS = @GLIBSHARP_2_12_7_CFLAGS@
+GLIBSHARP_2_12_7_LIBS = @GLIBSHARP_2_12_7_LIBS@
GLIBSHARP_CFLAGS = @GLIBSHARP_CFLAGS@
GLIBSHARP_LIBS = @GLIBSHARP_LIBS@
GLIB_CFLAGS = @GLIB_CFLAGS@
@@ -147,6 +159,10 @@ GNOME_SHARP_CFLAGS = @GNOME_SHARP_CFLAGS@
GNOME_SHARP_LIBS = @GNOME_SHARP_LIBS@
GOBJECT_QUERY = @GOBJECT_QUERY@
GREP = @GREP@
+GTKSHARP_A11Y_CFLAGS = @GTKSHARP_A11Y_CFLAGS@
+GTKSHARP_A11Y_LIBS = @GTKSHARP_A11Y_LIBS@
+GTKSHARP_CFLAGS = @GTKSHARP_CFLAGS@
+GTKSHARP_LIBS = @GTKSHARP_LIBS@
HELP_DIR = @HELP_DIR@
ICONS_DIRECTORY = @ICONS_DIRECTORY@
INSTALL = @INSTALL@
@@ -160,14 +176,14 @@ INTLTOOL_EXTRACT = @INTLTOOL_EXTRACT@
INTLTOOL_MERGE = @INTLTOOL_MERGE@
INTLTOOL_PERL = @INTLTOOL_PERL@
INTLTOOL_UPDATE = @INTLTOOL_UPDATE@
+KEYRINGSHARP_CFLAGS = @KEYRINGSHARP_CFLAGS@
+KEYRINGSHARP_LIBS = @KEYRINGSHARP_LIBS@
LCMS_CFLAGS = @LCMS_CFLAGS@
LCMS_LIBS = @LCMS_LIBS@
LD = @LD@
LDFLAGS = @LDFLAGS@
LIBEXIF_VERSION_CHECK_CFLAGS = @LIBEXIF_VERSION_CHECK_CFLAGS@
LIBEXIF_VERSION_CHECK_LIBS = @LIBEXIF_VERSION_CHECK_LIBS@
-LIBGPHOTO2_CFLAGS = @LIBGPHOTO2_CFLAGS@
-LIBGPHOTO2_LIBS = @LIBGPHOTO2_LIBS@
LIBJPEG = @LIBJPEG@
LIBOBJS = @LIBOBJS@
LIBS = @LIBS@
@@ -182,6 +198,12 @@ MCS = @MCS@
MKDIR_P = @MKDIR_P@
MKINSTALLDIRS = @MKINSTALLDIRS@
MONO = @MONO@
+MONO_ADDINS_CFLAGS = @MONO_ADDINS_CFLAGS@
+MONO_ADDINS_GUI_CFLAGS = @MONO_ADDINS_GUI_CFLAGS@
+MONO_ADDINS_GUI_LIBS = @MONO_ADDINS_GUI_LIBS@
+MONO_ADDINS_LIBS = @MONO_ADDINS_LIBS@
+MONO_ADDINS_SETUP_CFLAGS = @MONO_ADDINS_SETUP_CFLAGS@
+MONO_ADDINS_SETUP_LIBS = @MONO_ADDINS_SETUP_LIBS@
MONO_MODULE_CFLAGS = @MONO_MODULE_CFLAGS@
MONO_MODULE_LIBS = @MONO_MODULE_LIBS@
MSGFMT = @MSGFMT@
@@ -192,7 +214,6 @@ NDESK_DBUS_LIBS = @NDESK_DBUS_LIBS@
NM = @NM@
NMEDIT = @NMEDIT@
NUNIT_CFLAGS = @NUNIT_CFLAGS@
-NUNIT_DEFINES = @NUNIT_DEFINES@
NUNIT_LIBS = @NUNIT_LIBS@
OBJC = @OBJC@
OBJDUMP = @OBJDUMP@
@@ -284,81 +305,233 @@ target_alias = @target_alias@
top_build_prefix = @top_build_prefix@
top_builddir = @top_builddir@
top_srcdir = @top_srcdir@
+ASSEMBLY = FSpot.Exporters.FolderExport
+TARGET = library
+LINK = $(REF_FSPOT_EXTENSION_FOLDEREXPORT) $(am__append_1)
+INSTALL_DIR = $(EXTENSIONS_INSTALL_DIR)
+SOURCES = FolderExport.cs
+RESOURCES = \
+ FolderExport.addin.xml \
+ FolderExport.glade \
+ f-spot-simple-white.css \
+ f-spot-simple.css \
+ f-spot.js
+
+
+# Initializers
+MONO_BASE_PATH =
+MONO_ADDINS_PATH =
+
+# Install Paths
+DEFAULT_INSTALL_DIR = $(pkglibdir)
+BACKENDS_INSTALL_DIR = $(DEFAULT_INSTALL_DIR)/Backends
+EXTENSIONS_INSTALL_DIR = $(DEFAULT_INSTALL_DIR)/Extensions
DIR_DOCS = $(top_builddir)/docs
DIR_EXTENSIONS = $(top_builddir)/extensions
-DIR_GPHOTO2 = $(top_builddir)/lib/libgphoto2-sharp
DIR_ICONS = $(top_builddir)/icons
DIR_JPEGTRAN = $(top_builddir)/lib/libjpegtran
-DIR_KEYRING = $(top_builddir)/lib/gnome-keyring-sharp
DIR_LIBFSPOT = $(top_builddir)/lib/libfspot
DIR_SEMWEB = $(top_builddir)/lib/semweb
DIR_SRC = $(top_builddir)/src
DIR_GIOSHARP = $(top_builddir)/lib/gio-sharp/gio
DIR_GTKSHARPBEANS = $(top_builddir)/lib/gtk-sharp-beans
DIR_UNIQUESHARP = $(top_builddir)/lib/unique-sharp/unique
-LINK_KEYRING = -r:$(DIR_KEYRING)/gnome-keyring-sharp.dll
-LINK_GPHOTO2 = -r:$(DIR_GPHOTO2)/libgphoto2-sharp.dll
-LINK_SEMWEB = -r:$(DIR_SEMWEB)/SemWeb.dll
-LINK_GIOSHARP = -r:$(DIR_GIOSHARP)/gio-sharp.dll
-LINK_GTKSHARPBEANS = -r:$(DIR_GTKSHARPBEANS)/gtk-sharp-beans.dll
-LINK_UNIQUESHARP = -r:$(DIR_UNIQUESHARP)/unique-sharp.dll
-CSC_FLAGS = -debug
-CSC = $(MCS) $(CSC_FLAGS) -target:exe
-CSC_LIB = $(MCS) $(CSC_FLAGS) -target:library
-MONO_DEBUGFLAGS = --debug
-RUNTIME = mono $(MONO_DEBUGFLAGS)
-PLUGIN_NAME = FolderExport
-PLUGIN_MANIFEST = $(PLUGIN_NAME).addin.xml
-PLUGIN_ASSEMBLY = $(PLUGIN_NAME).dll
-PLUGIN_SOURCES = \
- $(srcdir)/FolderExport.cs
-
-REFS = \
- -r:$(top_builddir)/src/f-spot.exe \
- -r:$(top_builddir)/src/FSpot.Core.dll \
- -r:$(top_builddir)/src/FSpot.Utils.dll \
- $(LINK_SEMWEB) \
- $(LINK_GPHOTO2) \
- $(LINK_GIOSHARP) \
- $(LINK_GTKSHARPBEANS) \
- $(LINK_UNIQUESHARP) \
- -r:System.Web \
- -r:ICSharpCode.SharpZipLib \
- -r:Mono.Posix
-
-PKGS = \
- -pkg:gnome-vfs-sharp-2.0 \
- -pkg:gtk-sharp-2.0 \
- -pkg:glade-sharp-2.0
-
-RESOURCES = \
- -resource:$(srcdir)/$(PLUGIN_MANIFEST) \
- -resource:$(srcdir)/$(PLUGIN_NAME).glade \
- -resource:$(srcdir)/f-spot-simple-white.css \
- -resource:$(srcdir)/f-spot-simple.css \
- -resource:$(srcdir)/f-spot.js
-
-plugindir = $(pkglibdir)/extensions
-plugin_DATA = \
- $(PLUGIN_ASSEMBLY)
-
-EXTRA_DIST = \
- $(PLUGIN_SOURCES) \
- $(PLUGIN_MANIFEST) \
- $(PLUGIN_NAME).glade \
- f-spot-simple.css \
- f-spot-simple-white.css \
- f-spot.js
-
-CLEANFILES = \
- $(PLUGIN_ASSEMBLY) \
- $(PLUGIN_ASSEMBLY).mdb \
- *.mpack
-
+DIR_BIN = $(top_builddir)/bin
+
+# External libraries to link against, generated from configure
+LINK_SYSTEM = -r:System
+LINK_SYSTEMDATA = -r:System.Data
+LINK_SYSTEM_WEB = -r:System.Web
+LINK_MONO_POSIX = -r:Mono.Posix
+LINK_MONO_CAIRO = -r:Mono.Cairo
+LINK_MONO_SIMD = -r:Mono.Simd
+LINK_MONODATA = -r:Mono.Data
+LINK_MONO_DATA_SQLITECLIENT = -r:Mono.Data.SqliteClient
+LINK_ICSHARP_ZIP_LIB = -r:ICSharpCode.SharpZipLib
+LINK_KEYRING = $(KEYRINGSHARP_LIBS)
+LINK_GLIB = $(GLIBSHARP_LIBS)
+LINK_GTK = $(GTKSHARP_LIBS)
+LINK_GNOME = $(GNOME_SHARP_LIBS)
+LINK_GCONF = $(GCONF_SHARP_LIBS)
+LINK_GLADE = -pkg:glade-sharp-2.0
+LINK_FLICKRNET = -pkg:flickrnet
+LINK_DBUS = $(NDESK_DBUS_LIBS) $(NDESK_DBUS_GLIB_LIBS)
+LINK_DBUS_NO_GLIB = $(NDESK_DBUS_LIBS)
+LINK_MONO_ADDINS_DEPS = $(MONO_ADDINS_LIBS)
+LINK_MONO_ADDINS_SETUP_DEPS = $(MONO_ADDINS_SETUP_LIBS)
+LINK_MONO_ADDINS_GUI_DEPS = $(MONO_ADDINS_GUI_LIBS)
+
+# GIO
+REF_GIO =
+LINK_GIO = -r:$(DIR_GIOSHARP)/gio-sharp.dll
+LINK_GIO_DEPS = $(REF_GIO) $(LINK_GIO)
+
+# Gtk Beans
+REF_GTK_BEANS = $(LINK_GIO_DEPS)
+LINK_GTK_BEANS = -r:$(DIR_GTKSHARPBEANS)/gtk-sharp-beans.dll
+LINK_GTK_BEANS_DEPS = $(REF_GTK_BEANS) $(LINK_GTK_BEANS)
+
+# Uniqe
+REF_UNIQUE =
+LINK_UNIQUE = -r:$(DIR_UNIQUESHARP)/unique-sharp.dll
+LINK_UNIQUE_DEPS = $(REF_UNIQUE) $(LINK_UNIQUE)
+
+# Hyena
+REF_HYENA = $(LINK_SYSTEM) $(LINK_MONO_POSIX)
+LINK_HYENA = -r:$(DIR_BIN)/Hyena.dll
+LINK_HYENA_DEPS = $(REF_HYENA) $(LINK_HYENA)
+
+# Semweb
+REF_SEMWEB = $(LINK_SYSTEMDATA) $(LINK_HYENA_DEPS)
+LINK_SEMWEB = -r:$(DIR_BIN)/SemWeb.dll
+LINK_SEMWEB_DEPS = $(REF_SEMWEB) $(LINK_SEMWEB)
+
+# Hyena.Data.Sqlite
+REF_HYENA_DATA_SQLITE = $(LINK_SQLITE)
+LINK_HYENA_DATA_SQLITE = -r:$(DIR_BIN)/Hyena.Data.Sqlite.dll
+LINK_HYENA_DATA_SQLITE_DEPS = $(REF_HYENA_DATA_SQLITE) $(LINK_HYENA_DATA_SQLITE)
+
+# Hyena.Gui
+REF_HYENA_GUI = $(LINK_HYENA_DEPS)
+LINK_HYENA_GUI = -r:$(DIR_BIN)/Hyena.Gui.dll
+LINK_HENA_GUI_DEPS = $(REF_HYENA_GUI) $(LINK_HYENA_GUI)
+
+# FSpot.Cms
+REF_FSPOT_CMS = $(LINK_GTK)
+LINK_FSPOT_CMS = -r:$(DIR_BIN)/FSpot.Cms.dll
+LINK_FSPOT_CMS_DEPS = $(REF_FSPOT_CMS) $(LINK_FSPOT_CMS)
+
+# FSpot.Utils
+REF_FSPOT_UTILS = $(LINK_HYENA_DEPS) $(LINK_GTK) $(LINK_GIO) $(LINK_MONO_CAIRO)
+LINK_FSPOT_UTILS = -r:$(DIR_BIN)/FSpot.Utils.dll
+LINK_FSPOT_UTILS_DEPS = $(REF_FSPOT_UTILS) $(LINK_FSPOT_UTILS)
+
+# FSpot.Core
+REF_FSPOT_CORE = $(LINK_FSPOT_UTILS_DEPS) $(LINK_FSPOT_CMS_DEPS)
+LINK_FSPOT_CORE = -r:$(DIR_BIN)/FSpot.Core.dll
+LINK_FSPOT_CORE_DEPS = $(REF_FSPOT_CORE) $(LINK_FSPOT_CORE)
+
+# FSpot.Query
+REF_FSPOT_QUERY = $(LINK_FSPOT_CORE_DEPS)
+LINK_FSPOT_QUERY = -r:$(DIR_BIN)/FSpot.Query.dll
+LINK_FSPOT_QUERY_DEPS = $(REF_FSPOT_QUERY) $(LINK_FSPOT_QUERY)
+
+# FSpot.JobScheduler
+REF_FSPOT_JOB_SCHEDULER = $(LINK_HYENA_DEPS)
+LINK_FSPOT_JOB_SCHEDULER = -r:$(DIR_BIN)/FSpot.JobScheduler.dll
+LINK_FSPOT_JOB_SCHEDULER_DEPS = $(REF_FSPOT_JOB_SCHEDULER) $(LINK_FSPOT_JOB_SCHEDULER)
+
+# FSpot.Bling
+REF_FSPOT_BLING = $(LINK_GTK_BEANS_DEPS) $(LINK_GLIB)
+LINK_FSPOT_BLING = -r:$(DIR_BIN)/FSpot.Bling.dll
+LINK_FSPOT_BLING_DEPS = $(REF_FSPOT_BLING) $(LINK_FSPOT_BLING)
+
+# FSpot.Platform
+REF_FSPOT_PLATFORM = $(LINK_GCONF) $(LINK_GTK) $(LINK_FSPOT_CORE_DEPS) $(LINK_DBUS)
+LINK_FSPOT_PLATFORM = -r:$(DIR_BIN)/FSpot.Platform.dll
+LINK_FSPOT_PLATFORM_DEPS = $(REF_FSPOT_PLATFORM) $(LINK_FSPOT_PLATFORM)
+
+# FSpot.Widgets
+REF_FSPOT_WIDGETS = $(LINK_FSPOT_CORE_DEPS) $(LINK_FSPOT_BLING_DEPS)
+LINK_FSPOT_WIDGETS = -r:$(DIR_BIN)/FSpot.Widgets.dll
+LINK_FSPOT_WIDGETS_DEPS = $(REF_FSPOT_WIDGETS) $(LINK_FSPOT_WIDGETS)
+
+# FSpot (executable)
+REF_FSPOT = $(LINK_FSPOT_WIDGETS_DEPS) $(LINK_FSPOT_PLATFORM_DEPS) $(LINK_FSPOT_QUERY_DEPS) \
+ $(LINK_GLIB) $(LINK_MONO_ADDINS_DEPS) $(LINK_UNIQUE_DEPS) $(LINK_MONO_ADDINS_SETUP_DEPS) \
+ $(LINK_SEMWEB_DEPS) $(LINK_GLADE) $(LINK_MONODATA) $(LINK_MONO_DATA_SQLITECLIENT) \
+ $(LINK_MONO_ADDINS_GUI_DEPS) $(LINK_FSPOT_JOB_SCHEDULER_DEPS) $(LINK_ICSHARP_ZIP_LIB) \
+ $(LINK_GNOME)
+
+# FIXME: do not link executables
+LINK_FSPOT = -r:$(DIR_BIN)/f-spot.exe
+LINK_FSPOT_DEPS = $(REF_FSPOT) $(LINK_FSPOT)
+
+# Extensions
+REF_FSPOT_EXTENSION_BLACKOUTEDITOR = $(LINK_FSPOT_DEPS)
+REF_FSPOT_EXTENSION_BWEDITOR = $(LINK_FSPOT_DEPS) $(LINK_MONO_SIMD)
+REF_FSPOT_EXTENSION_FLIPEDITOR = $(LINK_FSPOT_DEPS)
+REF_FSPOT_EXTENSION_PIXELATEEDITOR = $(LINK_FSPOT_DEPS)
+REF_FSPOT_EXTENSION_RESIZEEDITOR = $(LINK_FSPOT_DEPS)
+REF_FSPOT_EXTENSION_CDEXPORT = $(LINK_FSPOT_DEPS)
+REF_FSPOT_EXTENSION_FACEBOOKEXPORT = $(LINK_FSPOT_DEPS) $(LINK_KEYRING)
+REF_FSPOT_EXTENSION_FLICKREXPORT = $(LINK_FSPOT_DEPS) $(LINK_FLICKRNET)
+REF_FSPOT_EXTENSION_FOLDEREXPORT = $(LINK_FSPOT_DEPS) $(LINK_SYSTEM_WEB)
+REF_FSPOT_EXTENSION_GALLERYEXPORT = $(LINK_FSPOT_DEPS)
+REF_MONO_GOOGLE = $(LINK_HYENA_DEPS)
+LINK_MONO_GOOGLE = -r:$(DIR_BIN)/Mono.Google.dll
+LINK_MONO_GOOGLE_DEPS = $(REF_MONO_GOOGLE) $(LINK_MONO_GOOGLE)
+REF_FSPOT_EXTENSION_PICASAWEBEXPORT = $(LINK_FSPOT_DEPS) $(LINK_MONO_GOOGLE) $(LINK_KEYRING)
+REF_SMUGMUGNET = $(LINK_FSPOT_DEPS)
+LINK_SMUGMUGNET = -r:$(DIR_BIN)/SmugMugNet.dll
+LINK_SMUGMUGNET_DEPS = $(REF_SMUGMUGNET) $(LINK_SMUGMUGNET)
+REF_FSPOT_EXTENSION_SMUGMUGEXPORT = $(LINK_SMUGMUGNET_DEPS) $(LINK_KEYRING)
+REF_MONO_TABBLO = $(LINK_HYENA_DEPS)
+LINK_MONO_TABBLO = -r:$(DIR_BIN)/Mono.Tabblo.dll
+LINK_MONO_TABBLO_DEPS = $(REF_MONO_TABBLO) $(LINK_MONO_TABBLO)
+REF_FSPOT_EXTENSION_TABBLOEXPORT = $(LINK_FSPOT_DEPS) $(LINK_KEYRING) $(LINK_MONO_TABBLO_DEPS)
+REF_FSPOT_EXTENSION_ZIPEXPORT = $(LINK_FSPOT_DEPS)
+REF_FSPOT_EXTENSION_CHANGEPHOTOPATH = $(LINK_FSPOT_DEPS)
+REF_FSPOT_EXTENSION_DEVELOPINUFRAW = $(LINK_FSPOT_DEPS)
+REF_FSPOT_EXTENSION_HASHJOB = $(LINK_FSPOT_DEPS)
+REF_FSPOT_EXTENSION_LIVEWEBGALLERY = $(LINK_FSPOT_DEPS)
+REF_FSPOT_EXTENSION_MERGEDB = $(LINK_FSPOT_DEPS)
+REF_FSPOT_EXTENSION_RAWPLUSJPEG = $(LINK_FSPOT_DEPS)
+REF_FSPOT_EXTENSION_RETROACTIVEROLL = $(LINK_FSPOT_DEPS)
+REF_FSPOT_EXTENSION_SCREENSAVERCONFIG = $(LINK_FSPOT_DEPS)
+REF_FSPOT_EXTENSION_COVERTRANSITION = $(LINK_FSPOT_DEPS)
+
+# Cute hack to replace a space with something
+colon := :
+empty :=
+space := $(empty) $(empty)
+
+# Build path to allow running uninstalled
+RUN_PATH = $(subst $(space),$(colon), $(MONO_BASE_PATH))
+UNIQUE_FILTER_PIPE = tr [:space:] \\n | sort | uniq
+BUILD_DATA_DIR = $(top_builddir)/bin/share/$(PACKAGE)
+
+# Since all other attempts failed, we currently go this way:
+# This code adds the file specified in ASSEMBLY_INFO_SOURCE to SOURCES_BUILD.
+# If no such file is specified, the default AssemblyInfo.cs is used.
+ASSEMBLY_INFO_SOURCE_REAL = \
+ $(shell if [ "$(ASSEMBLY_INFO_SOURCE)" ]; \
+ then \
+ echo "$(addprefix $(srcdir)/, $(ASSEMBLY_INFO_SOURCE))"; \
+ else \
+ echo "$(top_srcdir)/src/AssemblyInfo.cs"; \
+ fi)
+
+SOURCES_BUILD = $(addprefix $(srcdir)/, $(SOURCES)) \
+ $(ASSEMBLY_INFO_SOURCE_REAL)
+RESOURCES_EXPANDED = $(addprefix $(srcdir)/, $(RESOURCES))
+RESOURCES_BUILD = $(foreach resource, $(RESOURCES_EXPANDED), \
+ -resource:$(resource),$(notdir $(resource)))
+
+INSTALL_ICONS = $(top_srcdir)/build/private-icon-theme-installer "$(mkinstalldirs)" "$(INSTALL_DATA)"
+THEME_ICONS_SOURCE = $(wildcard $(srcdir)/ThemeIcons/*/*/*.png) $(wildcard $(srcdir)/ThemeIcons/scalable/*/*.svg)
+THEME_ICONS_RELATIVE = $(subst $(srcdir)/ThemeIcons/, , $(THEME_ICONS_SOURCE))
+ASSEMBLY_EXTENSION = $(strip $(patsubst library, dll, $(TARGET)))
+ASSEMBLY_FILE = $(top_builddir)/bin/$(ASSEMBLY).$(ASSEMBLY_EXTENSION)
+INSTALL_DIR_RESOLVED = $(firstword $(subst , $(DEFAULT_INSTALL_DIR), $(INSTALL_DIR)))
+ at ENABLE_TESTS_TRUE@ENABLE_TESTS_FLAG = "-define:ENABLE_TESTS"
+ at ENABLE_ATK_TRUE@ENABLE_ATK_FLAG = "-define:ENABLE_ATK"
+FILTERED_LINK = $(shell echo "$(LINK)" | $(UNIQUE_FILTER_PIPE))
+DEP_LINK = $(shell echo "$(LINK)" | $(UNIQUE_FILTER_PIPE) | sed s,-r:,,g | grep '$(top_builddir)/bin/')
+OUTPUT_FILES = \
+ $(ASSEMBLY_FILE) \
+ $(ASSEMBLY_FILE).mdb
+
+moduledir = $(INSTALL_DIR_RESOLVED)
+module_SCRIPTS = $(OUTPUT_FILES)
+EXTRA_DIST = $(SOURCES_BUILD) $(RESOURCES_EXPANDED) $(THEME_ICONS_SOURCE)
+CLEANFILES = $(OUTPUT_FILES) $(ASSEMBLY_FILE).config
+DISTCLEANFILES = *.pidb
+MAINTAINERCLEANFILES = Makefile.in
all: all-am
.SUFFIXES:
-$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(top_srcdir)/Makefile.include $(am__configure_deps)
+$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(top_srcdir)/build/build.mk $(top_srcdir)/build/build.environment.mk $(top_srcdir)/build/build.rules.mk $(am__configure_deps)
@for dep in $?; do \
case '$(am__configure_deps)' in \
*$$dep*) \
@@ -388,32 +561,46 @@ $(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps)
$(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps)
cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
$(am__aclocal_m4_deps):
+install-moduleSCRIPTS: $(module_SCRIPTS)
+ @$(NORMAL_INSTALL)
+ test -z "$(moduledir)" || $(MKDIR_P) "$(DESTDIR)$(moduledir)"
+ @list='$(module_SCRIPTS)'; test -n "$(moduledir)" || list=; \
+ for p in $$list; do \
+ if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \
+ if test -f "$$d$$p"; then echo "$$d$$p"; echo "$$p"; else :; fi; \
+ done | \
+ sed -e 'p;s,.*/,,;n' \
+ -e 'h;s|.*|.|' \
+ -e 'p;x;s,.*/,,;$(transform)' | sed 'N;N;N;s,\n, ,g' | \
+ $(AWK) 'BEGIN { files["."] = ""; dirs["."] = 1; } \
+ { d=$$3; if (dirs[d] != 1) { print "d", d; dirs[d] = 1 } \
+ if ($$2 == $$4) { files[d] = files[d] " " $$1; \
+ if (++n[d] == $(am__install_max)) { \
+ print "f", d, files[d]; n[d] = 0; files[d] = "" } } \
+ else { print "f", d "/" $$4, $$1 } } \
+ END { for (d in files) print "f", d, files[d] }' | \
+ while read type dir files; do \
+ if test "$$dir" = .; then dir=; else dir=/$$dir; fi; \
+ test -z "$$files" || { \
+ echo " $(INSTALL_SCRIPT) $$files '$(DESTDIR)$(moduledir)$$dir'"; \
+ $(INSTALL_SCRIPT) $$files "$(DESTDIR)$(moduledir)$$dir" || exit $$?; \
+ } \
+ ; done
+
+uninstall-moduleSCRIPTS:
+ @$(NORMAL_UNINSTALL)
+ @list='$(module_SCRIPTS)'; test -n "$(moduledir)" || exit 0; \
+ files=`for p in $$list; do echo "$$p"; done | \
+ sed -e 's,.*/,,;$(transform)'`; \
+ test -n "$$list" || exit 0; \
+ echo " ( cd '$(DESTDIR)$(moduledir)' && rm -f" $$files ")"; \
+ cd "$(DESTDIR)$(moduledir)" && rm -f $$files
mostlyclean-libtool:
-rm -f *.lo
clean-libtool:
-rm -rf .libs _libs
-install-pluginDATA: $(plugin_DATA)
- @$(NORMAL_INSTALL)
- test -z "$(plugindir)" || $(MKDIR_P) "$(DESTDIR)$(plugindir)"
- @list='$(plugin_DATA)'; test -n "$(plugindir)" || list=; \
- for p in $$list; do \
- if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \
- echo "$$d$$p"; \
- done | $(am__base_list) | \
- while read files; do \
- echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(plugindir)'"; \
- $(INSTALL_DATA) $$files "$(DESTDIR)$(plugindir)" || exit $$?; \
- done
-
-uninstall-pluginDATA:
- @$(NORMAL_UNINSTALL)
- @list='$(plugin_DATA)'; test -n "$(plugindir)" || list=; \
- files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \
- test -n "$$files" || exit 0; \
- echo " ( cd '$(DESTDIR)$(plugindir)' && rm -f" $$files ")"; \
- cd "$(DESTDIR)$(plugindir)" && rm -f $$files
tags: TAGS
TAGS:
@@ -453,9 +640,9 @@ distdir: $(DISTFILES)
done
check-am: all-am
check: check-am
-all-am: Makefile $(DATA)
+all-am: Makefile $(SCRIPTS)
installdirs:
- for dir in "$(DESTDIR)$(plugindir)"; do \
+ for dir in "$(DESTDIR)$(moduledir)"; do \
test -z "$$dir" || $(MKDIR_P) "$$dir"; \
done
install: install-am
@@ -480,10 +667,12 @@ clean-generic:
distclean-generic:
-test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
-test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES)
+ -test -z "$(DISTCLEANFILES)" || rm -f $(DISTCLEANFILES)
maintainer-clean-generic:
@echo "This command is intended for maintainers to use"
@echo "it deletes files that may require special tools to rebuild."
+ -test -z "$(MAINTAINERCLEANFILES)" || rm -f $(MAINTAINERCLEANFILES)
clean: clean-am
clean-am: clean-generic clean-libtool mostlyclean-am
@@ -504,7 +693,7 @@ info: info-am
info-am:
-install-data-am: install-pluginDATA
+install-data-am: install-data-local install-moduleSCRIPTS
install-dvi: install-dvi-am
@@ -548,30 +737,72 @@ ps: ps-am
ps-am:
-uninstall-am: uninstall-pluginDATA
+uninstall-am: uninstall-local uninstall-moduleSCRIPTS
.MAKE: install-am install-strip
.PHONY: all all-am check check-am clean clean-generic clean-libtool \
distclean distclean-generic distclean-libtool distdir dvi \
dvi-am html html-am info info-am 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-pluginDATA install-ps install-ps-am \
- install-strip installcheck installcheck-am installdirs \
- maintainer-clean maintainer-clean-generic mostlyclean \
- mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \
- uninstall uninstall-am uninstall-pluginDATA
-
-
-all: $(PLUGIN_ASSEMBLY)
-
-mpack: $(PLUGIN_ASSEMBLY)
- mautil p $(PLUGIN_ASSEMBLY)
-
-$(PLUGIN_ASSEMBLY): $(PLUGIN_SOURCES) $(PLUGIN_MANIFEST)
- $(CSC_LIB) -out:$@ $(PLUGIN_SOURCES) $(REFS) $(PKGS) $(ASSEMBLIES) $(RESOURCES)
+ install-data install-data-am install-data-local install-dvi \
+ install-dvi-am install-exec install-exec-am install-html \
+ install-html-am install-info install-info-am install-man \
+ install-moduleSCRIPTS install-pdf install-pdf-am install-ps \
+ install-ps-am install-strip installcheck installcheck-am \
+ installdirs maintainer-clean maintainer-clean-generic \
+ mostlyclean mostlyclean-generic mostlyclean-libtool pdf pdf-am \
+ ps ps-am uninstall uninstall-am uninstall-local \
+ uninstall-moduleSCRIPTS
+
+
+all: $(ASSEMBLY_FILE) theme-icons
+
+run:
+ @pushd $(top_builddir); \
+ make run; \
+ popd;
+
+# uncommented for now.
+# tests are currently excuted from Makefile in $(top_builddir)
+#test:
+# @pushd $(top_builddir)/tests; \
+# make $(ASSEMBLY); \
+# popd;
+
+build-debug:
+ @echo $(DEP_LINK)
+
+$(ASSEMBLY_FILE).mdb: $(ASSEMBLY_FILE)
+
+$(ASSEMBLY_FILE): $(SOURCES_BUILD) $(RESOURCES_EXPANDED) $(DEP_LINK)
+ @mkdir -p $(top_builddir)/bin
+ @if [ ! "x$(ENABLE_RELEASE)" = "xyes" ]; then \
+ $(top_srcdir)/build/dll-map-makefile-verifier $(srcdir)/Makefile.am $(srcdir)/$(notdir $@.config) && \
+ $(MONO) $(top_builddir)/build/dll-map-verifier.exe $(srcdir)/$(notdir $@.config) -iwinmm -ilibbanshee -ilibbnpx11 -ilibc -ilibc.so.6 -iintl -ilibmtp.dll -ilibigemacintegration.dylib -iCFRelease $(SOURCES_BUILD); \
+ fi;
+ $(MCS) \
+ $(GMCS_FLAGS) \
+ $(ASSEMBLY_BUILD_FLAGS) \
+ -nowarn:0278 -nowarn:0078 $$warn \
+ -define:HAVE_GTK_2_10 -define:NET_2_0 \
+ -debug -target:$(TARGET) -out:$@ \
+ $(BUILD_DEFINES) $(ENABLE_TESTS_FLAG) $(ENABLE_ATK_FLAG) \
+ $(FILTERED_LINK) $(RESOURCES_BUILD) $(SOURCES_BUILD)
+ @if [ -e $(srcdir)/$(notdir $@.config) ]; then \
+ cp $(srcdir)/$(notdir $@.config) $(top_builddir)/bin; \
+ fi;
+ @if [ ! -z "$(EXTRA_BUNDLE)" ]; then \
+ cp $(EXTRA_BUNDLE) $(top_builddir)/bin; \
+ fi;
+
+theme-icons: $(THEME_ICONS_SOURCE)
+ @$(INSTALL_ICONS) -il "$(BUILD_DATA_DIR)" "$(srcdir)" $(THEME_ICONS_RELATIVE)
+
+install-data-local: $(THEME_ICONS_SOURCE)
+ @$(INSTALL_ICONS) -i "$(DESTDIR)$(pkgdatadir)" "$(srcdir)" $(THEME_ICONS_RELATIVE)
+
+uninstall-local: $(THEME_ICONS_SOURCE)
+ @$(INSTALL_ICONS) -u "$(DESTDIR)$(pkgdatadir)" "$(srcdir)" $(THEME_ICONS_RELATIVE)
# 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/extensions/Exporters/GalleryExport/FormClient.cs b/extensions/Exporters/GalleryExport/FormClient.cs
new file mode 100644
index 0000000..3595c71
--- /dev/null
+++ b/extensions/Exporters/GalleryExport/FormClient.cs
@@ -0,0 +1,300 @@
+using System;
+using System.Net;
+using System.IO;
+using System.Text;
+using System.Collections;
+using System.Collections.Specialized;
+using System.Web;
+using Hyena;
+
+namespace FSpot {
+ public class FormClient {
+ private struct FormItem {
+ public string Name;
+ public object Value;
+
+ public FormItem (string name, object value) {
+ Name = name;
+ Value = value;
+ }
+ }
+
+ private StreamWriter stream_writer;
+ private ArrayList Items;
+
+ private string boundary;
+ private string start_boundary;
+ private string end_boundary;
+
+ private bool multipart = false;
+ public bool Multipart {
+ set { multipart = value; }
+ }
+
+ private bool first_item;
+
+ public bool Buffer = false;
+ public bool SuppressCookiePath = false;
+
+ public bool expect_continue = true;
+
+ public HttpWebRequest Request;
+ public CookieContainer Cookies;
+
+ public FSpot.ProgressItem Progress;
+
+ public FormClient (CookieContainer cookies)
+ {
+ this.Cookies = cookies;
+ this.Items = new ArrayList ();
+ }
+
+ public FormClient ()
+ {
+ this.Items = new ArrayList ();
+ this.Cookies = new CookieContainer ();
+ }
+
+ private void GenerateBoundary ()
+ {
+ Guid guid = Guid.NewGuid ();
+ boundary = "--------" + guid.ToString () + "-----";
+ start_boundary = "--" + boundary;
+ end_boundary = start_boundary + "--";
+ }
+
+ public void Add (string name, string value)
+ {
+ Items.Add (new FormItem (name, value));
+ }
+
+ public void Add (string name, FileInfo fileinfo)
+ {
+ multipart = true;
+ Items.Add (new FormItem (name, fileinfo));
+ }
+
+ private void Write (FormItem item) {
+ // The types we check here need to match the
+ // types we allow in .Add
+
+ if (item.Value == null) {
+ Write (item.Name, (string)String.Empty);
+ } else if (item.Value is FileInfo) {
+ Write (item.Name, (FileInfo)item.Value);
+ } else if (item.Value is string) {
+ Write (item.Name, (string)item.Value);
+ } else {
+ throw new Exception ("Unknown value type");
+ }
+ }
+
+ private long MultipartLength (FormItem item) {
+ // The types we check here need to match the
+ // types we allow in .Add
+
+ if (item.Value == null) {
+ return MultipartLength (item.Name, (string)String.Empty);
+ } else if (item.Value is FileInfo) {
+ return MultipartLength (item.Name, (FileInfo)item.Value);
+ } else if (item.Value is string) {
+ return MultipartLength (item.Name, (string)item.Value);
+ } else {
+ throw new Exception ("Unknown value type");
+ }
+ }
+
+ private string MultipartHeader (string name, string value)
+ {
+ return string.Format ("{0}\r\n" +
+ "Content-Disposition: form-data; name=\"{1}\"\r\n" +
+ "\r\n", start_boundary, name);
+ }
+
+ private long MultipartLength (string name, string value)
+ {
+ long length = MultipartHeader (name, value).Length;
+ length += value.Length + 2;
+ return length;
+ }
+
+ private void Write (string name, string value)
+ {
+ string cmd;
+
+ if (multipart) {
+ cmd = String.Format ("{0}"
+ + "{1}\r\n",
+ MultipartHeader (name, value), value);
+ } else {
+ name = HttpUtility.UrlEncode (name.Replace(" ", "+"));
+ value = HttpUtility.UrlEncode (value.Replace(" ", "+"));
+ if (first_item) {
+ cmd = string.Format ("{0}={1}", name, value);
+ first_item = false;
+ } else {
+ cmd = string.Format ("&{0}={1}", name, value);
+ }
+ }
+ //Console.WriteLine (cmd);
+ stream_writer.Write (cmd);
+ }
+
+ private string MultipartHeader (string name, FileInfo file)
+ {
+ string cmd = string.Format ("{0}\r\n"
+ + "Content-Disposition: form-data; name=\"{1}\"; filename=\"{2}\"\r\n"
+ + "Content-Type: image/jpeg\r\n"
+ + "\r\n",
+ start_boundary, name, file.Name);
+ return cmd;
+ }
+
+ private long MultipartLength (string name, FileInfo file)
+ {
+ long length = MultipartHeader (name, file).Length;
+ length += file.Length + 2;
+ return length;
+ }
+
+ private void Write (string name, FileInfo file)
+ {
+ if (multipart) {
+ stream_writer.Write (MultipartHeader (name, file));
+ stream_writer.Flush ();
+ Stream stream = stream_writer.BaseStream;
+ byte [] data = new byte [32768];
+ FileStream fs = file.OpenRead ();
+ long total = file.Length;
+ long total_read = 0;
+
+ int count;
+ while ((count = fs.Read (data, 0, data.Length)) > 0) {
+ stream.Write (data, 0, count);
+ total_read += count;
+ if (Progress != null)
+ Progress.Value = total_read / (double)total;
+
+ }
+ fs.Close ();
+
+ stream_writer.Write ("\r\n");
+ } else {
+ throw new Exception ("Can't write files in url-encoded submissions");
+ }
+ }
+
+
+ public void Clear ()
+ {
+ Items.Clear ();
+ multipart = false;
+ }
+
+ public HttpWebResponse Submit (string url)
+ {
+ return Submit (url, null);
+ }
+
+ public HttpWebResponse Submit (string url, FSpot.ProgressItem item)
+ {
+ return Submit (new Uri (url), item);
+ }
+
+ public HttpWebResponse Submit (Uri uri)
+ {
+ return Submit (uri, null);
+ }
+
+ public HttpWebResponse Submit (Uri uri, FSpot.ProgressItem progress_item)
+ {
+ this.Progress = progress_item;
+ Request = (HttpWebRequest) WebRequest.Create (uri);
+ CookieCollection cookie_collection = Cookies.GetCookies (uri);
+
+ if (uri.UserInfo != null && uri.UserInfo != String.Empty) {
+ NetworkCredential cred = new NetworkCredential ();
+ cred.GetCredential (uri, "basic");
+ CredentialCache credcache = new CredentialCache();
+ credcache.Add(uri, "basic", cred);
+
+ Request.PreAuthenticate = true;
+ Request.Credentials = credcache;
+ }
+
+ Request.ServicePoint.Expect100Continue = expect_continue;
+
+ Request.CookieContainer = new CookieContainer ();
+ foreach (Cookie c in cookie_collection) {
+ if (SuppressCookiePath)
+ Request.CookieContainer.Add (new Cookie (c.Name, c.Value));
+ else
+ Request.CookieContainer.Add (c);
+ }
+
+ Request.Method = "POST";
+ Request.Headers["Accept-Charset"] = "utf-8;";
+ Request.UserAgent = String.Format("F-Spot {0} (http://www.f-spot.org)", Defines.VERSION);
+
+ if (multipart) {
+ GenerateBoundary ();
+ Request.ContentType = "multipart/form-data; boundary=" + boundary;
+ Request.Timeout = Request.Timeout * 3;
+
+ long length = 0;
+ for (int i = 0; i < Items.Count; i++) {
+ FormItem item = (FormItem)Items[i];
+
+ length += MultipartLength (item);
+ }
+ length += end_boundary.Length + 2;
+
+ //Request.Headers["My-Content-Length"] = length.ToString ();
+ if (Buffer == false) {
+ Request.ContentLength = length;
+ Request.AllowWriteStreamBuffering = false;
+ }
+ } else {
+ Request.ContentType = "application/x-www-form-urlencoded";
+ }
+
+ stream_writer = new StreamWriter (Request.GetRequestStream ());
+
+ first_item = true;
+ for (int i = 0; i < Items.Count; i++) {
+ FormItem item = (FormItem)Items[i];
+
+ Write (item);
+ }
+
+ if (multipart)
+ stream_writer.Write (end_boundary + "\r\n");
+
+ stream_writer.Flush ();
+ stream_writer.Close ();
+
+ HttpWebResponse response;
+
+ try {
+ response = (HttpWebResponse) Request.GetResponse ();
+
+ //Console.WriteLine ("found {0} cookies", response.Cookies.Count);
+
+ foreach (Cookie c in response.Cookies) {
+ Cookies.Add (c);
+ }
+ } catch (WebException e) {
+ if (e.Status == WebExceptionStatus.ProtocolError
+ && ((HttpWebResponse)e.Response).StatusCode == HttpStatusCode.ExpectationFailed && expect_continue) {
+ e.Response.Close ();
+ expect_continue = false;
+ return Submit (uri, progress_item);
+ }
+
+ throw new WebException (Mono.Unix.Catalog.GetString ("Unhandled exception"), e);
+ }
+
+ return response;
+ }
+ }
+}
diff --git a/extensions/Exporters/GalleryExport/GalleryExport.cs b/extensions/Exporters/GalleryExport/GalleryExport.cs
index 01ef34e..daff764 100644
--- a/extensions/Exporters/GalleryExport/GalleryExport.cs
+++ b/extensions/Exporters/GalleryExport/GalleryExport.cs
@@ -15,6 +15,7 @@ using FSpot.UI.Dialog;
using FSpot.Extensions;
using GalleryRemote;
+using Hyena;
namespace G2Export {
public class GalleryAccount {
@@ -52,7 +53,7 @@ namespace G2Export {
throw new GalleryException (Catalog.GetString("Cannot connect to a Gallery for which the version is unknown.\nPlease check that you have Remote plugin 1.0.8 or later"));
}
- System.Console.WriteLine ("Gallery created: " + gal);
+ Log.Debug ("Gallery created: " + gal);
gal.Login (username, password);
@@ -79,7 +80,7 @@ namespace G2Export {
retVal = gallery.IsConnected ();
}
if (connected != retVal) {
- System.Console.WriteLine ("Connected and retVal for IsConnected() don't agree");
+ Log.Warning ("Connected and retVal for IsConnected() don't agree");
}
return retVal;
}
@@ -267,7 +268,7 @@ namespace G2Export {
else if (versionString == "Version2")
version = GalleryVersion.Version2;
else
- Console.WriteLine ("Unexpected versions string: " + versionString);
+ Log.Error ("Unexpected versions string: " + versionString);
}
}
return new GalleryAccount (name, url, username, password, version);
@@ -298,8 +299,7 @@ namespace G2Export {
}
} catch (System.Exception e) {
// FIXME do something
- System.Console.WriteLine ("Exception loading gallery accounts");
- System.Console.WriteLine (e);
+ Log.Exception ("Exception loading gallery accounts", e);
}
MarkChanged ();
@@ -402,8 +402,8 @@ namespace G2Export {
Catalog.GetString ("Error while connecting to Gallery"),
String.Format (Catalog.GetString ("The following error was encountered while attempting to log in: {0}"), e.Message));
if (e.ResponseText != null) {
- System.Console.WriteLine (e.Message);
- System.Console.WriteLine (e.ResponseText);
+ Log.Debug (e.Message);
+ Log.Debug (e.ResponseText);
}
md.Run ();
md.Destroy ();
@@ -416,7 +416,7 @@ namespace G2Export {
Gtk.MessageType.Error, Gtk.ButtonsType.Ok,
Catalog.GetString ("A Gallery with this name already exists"),
String.Format (Catalog.GetString ("There is already a Gallery with the same name in your registered Galleries. Please choose a unique name.")));
- System.Console.WriteLine (ae);
+ Log.Exception (ae);
md.Run ();
md.Destroy ();
return;
@@ -439,7 +439,7 @@ namespace G2Export {
Gtk.MessageType.Error, Gtk.ButtonsType.Ok,
Catalog.GetString ("Error while connecting to Gallery"),
String.Format (Catalog.GetString ("The following error was encountered while attempting to log in: {0}"), se.Message));
- Console.WriteLine (se);
+ Log.Exception (se);
md.Run ();
md.Destroy ();
return;
@@ -618,7 +618,7 @@ namespace G2Export {
export_dialog = (Gtk.Dialog) xml.GetWidget ("gallery_export_dialog");
this.items = selection.Items;
- Array.Sort<IBrowsableItem> (this.items as Photo[], new Photo.CompareDateName());
+ Array.Sort<IBrowsableItem> (this.items, new IBrowsableItemComparer.CompareDateName());
album_button.Sensitive = false;
IconView view = new IconView (selection);
view.DisplayDates = false;
@@ -758,7 +758,7 @@ namespace G2Export {
account.Gallery.Progress = new ProgressItem ();
account.Gallery.Progress.Changed += HandleProgressChanged;
- System.Console.WriteLine ("Starting upload");
+ Log.Debug ("Starting upload");
FilterSet filters = new FilterSet ();
if (account.Version == GalleryVersion.Version1)
@@ -772,7 +772,7 @@ namespace G2Export {
while (photo_index < items.Length) {
IBrowsableItem item = items [photo_index];
- System.Console.WriteLine ("uploading {0}", photo_index);
+ Log.DebugFormat ("uploading {0}", photo_index);
progress_dialog.Message = System.String.Format (Catalog.GetString ("Uploading picture \"{0}\""), item.Name);
progress_dialog.Fraction = photo_index / (double) items.Length;
@@ -781,7 +781,7 @@ namespace G2Export {
progress_dialog.ProgressText = System.String.Format (Catalog.GetString ("{0} of {1}"), photo_index, items.Length);
- FilterRequest req = new FilterRequest (item.DefaultVersionUri);
+ FilterRequest req = new FilterRequest (item.DefaultVersion.Uri);
filters.Convert (req);
try {
@@ -795,7 +795,7 @@ namespace G2Export {
} catch (System.Exception e) {
progress_dialog.Message = String.Format (Catalog.GetString ("Error uploading picture \"{0}\" to Gallery: {1}"), item.Name, e.Message);
progress_dialog.ProgressText = Catalog.GetString ("Error");
- Console.WriteLine (e);
+ Log.Exception (e);
if (progress_dialog.PerformRetrySkip ()) {
photo_index--;
@@ -868,7 +868,7 @@ namespace G2Export {
if (selected != null)
account = selected;
- System.Console.WriteLine ("{0}",ex);
+ Log.Exception (ex);
PopulateAlbumOptionMenu (account.Gallery);
album_button.Sensitive = false;
diff --git a/extensions/Exporters/GalleryExport/GalleryRemote.cs b/extensions/Exporters/GalleryExport/GalleryRemote.cs
index b93d663..cc4b2ff 100644
--- a/extensions/Exporters/GalleryExport/GalleryRemote.cs
+++ b/extensions/Exporters/GalleryExport/GalleryRemote.cs
@@ -8,6 +8,7 @@ using System.Web;
using Mono.Unix;
using FSpot;
using FSpot.UI.Dialog;
+using Hyena;
/* These classes are based off the documentation at
*
@@ -85,17 +86,17 @@ namespace GalleryRemote {
public void Add (FSpot.IBrowsableItem item)
{
- Add (item, item.DefaultVersionUri.LocalPath);
+ Add (item, item.DefaultVersion.Uri.LocalPath);
}
public int Add (FSpot.IBrowsableItem item, string path)
{
if (item == null)
- Console.WriteLine ("NO PHOTO");
+ Log.Warning ("NO PHOTO");
return gallery.AddItem (this,
path,
- Path.GetFileName (item.DefaultVersionUri.LocalPath),
+ Path.GetFileName (item.DefaultVersion.Uri.LocalPath),
item.Name,
item.Description,
true);
@@ -305,7 +306,7 @@ namespace GalleryRemote {
public static GalleryVersion DetectGalleryVersion (string url)
{
//Figure out if the url is for G1 or G2
- Console.WriteLine ("Detecting Gallery version");
+ Log.Debug ("Detecting Gallery version");
GalleryVersion version;
@@ -334,7 +335,7 @@ namespace GalleryRemote {
}
}
- Console.WriteLine ("Detected: " + version.ToString());
+ Log.Debug ("Detected: " + version.ToString());
return version;
}
@@ -423,18 +424,18 @@ namespace GalleryRemote {
status = (ResultCode) int.Parse (data [1]);
} else if (data[0].StartsWith ("status_text")) {
status_text = data[1];
- Console.WriteLine ("StatusText : {0}", data[1]);
+ Log.DebugFormat ("StatusText : {0}", data[1]);
} else if (data[0].StartsWith ("server_version")) {
//FIXME we should use the to determine what capabilities the server has
} else if (data[0].StartsWith ("auth_token")) {
AuthToken = data[1];
} else {
- Console.WriteLine ("Unparsed Line in ParseLogin(): {0}={1}", data[0], data[1]);
+ Log.DebugFormat ("Unparsed Line in ParseLogin(): {0}={1}", data[0], data[1]);
}
}
//Console.WriteLine ("Found: {0} cookies", response.Cookies.Count);
if (status != ResultCode.Success) {
- Console.WriteLine (status_text);
+ Log.Debug (status_text);
throw new GalleryCommandException (status_text, status);
}
@@ -465,7 +466,7 @@ namespace GalleryRemote {
status = (ResultCode) int.Parse (data [1]);
} else if (data[0].StartsWith ("status_text")) {
status_text = data[1];
- Console.WriteLine ("StatusText : {0}", data[1]);
+ Log.DebugFormat ("StatusText : {0}", data[1]);
} else if (data[0].StartsWith ("album.name")) {
//this is the URL name
int ref_num = -1;
@@ -515,16 +516,16 @@ namespace GalleryRemote {
current_album.Perms |= AlbumPermission.CreateSubAlbum;
} else if (data[0].StartsWith ("album_count")) {
if (Albums.Count != int.Parse (data[1]))
- Console.WriteLine ("Parsed album count does not match album_count. Something is amiss");
+ Log.Warning ("Parsed album count does not match album_count. Something is amiss");
} else if (data[0].StartsWith ("auth_token")) {
AuthToken = data [1];
} else {
- Console.WriteLine ("Unparsed Line in ParseFetchAlbums(): {0}={1}", data[0], data[1]);
+ Log.DebugFormat ("Unparsed Line in ParseFetchAlbums(): {0}={1}", data[0], data[1]);
}
}
//Console.WriteLine ("Found: {0} cookies", response.Cookies.Count);
if (status != ResultCode.Success) {
- Console.WriteLine (status_text);
+ Log.Debug (status_text);
throw new GalleryCommandException (status_text, status);
}
@@ -553,18 +554,18 @@ namespace GalleryRemote {
status = (ResultCode) int.Parse (data [1]);
} else if (data[0].StartsWith ("status_text")) {
status_text = data[1];
- Console.WriteLine ("StatusText : {0}", data[1]);
+ Log.DebugFormat ("StatusText : {0}", data[1]);
} else if (data[0].StartsWith ("auth_token")) {
AuthToken = data[1];
} else if (data[0].StartsWith ("item_name")) {
item_id = int.Parse (data [1]);
} else {
- Console.WriteLine ("Unparsed Line in ParseAddItem(): {0}={1}", data[0], data[1]);
+ Log.DebugFormat ("Unparsed Line in ParseAddItem(): {0}={1}", data[0], data[1]);
}
}
//Console.WriteLine ("Found: {0} cookies", response.Cookies.Count);
if (status != ResultCode.Success) {
- Console.WriteLine (status_text);
+ Log.Debug (status_text);
throw new GalleryCommandException (status_text, status);
}
@@ -601,16 +602,16 @@ namespace GalleryRemote {
status = (ResultCode) int.Parse (data [1]);
} else if (data[0].StartsWith ("status_text")) {
status_text = data[1];
- Console.WriteLine ("StatusText : {0}", data[1]);
+ Log.Debug ("StatusText : {0}", data[1]);
} else if (data[0].StartsWith ("auto-resize")) {
//ignore
} else {
- Console.WriteLine ("Unparsed Line in ParseBasic(): {0}={1}", data[0], data[1]);
+ Log.Debug ("Unparsed Line in ParseBasic(): {0}={1}", data[0], data[1]);
}
}
//Console.WriteLine ("Found: {0} cookies", response.Cookies.Count);
if (status != ResultCode.Success) {
- Console.WriteLine (status_text);
+ Log.Debug (status_text);
throw new GalleryCommandException (status_text, status);
}
@@ -638,16 +639,16 @@ namespace GalleryRemote {
status = (ResultCode) int.Parse (data [1]);
} else if (data[0].StartsWith ("status_text")) {
status_text = data[1];
- Console.WriteLine ("StatusText : {0}", data[1]);
+ Log.DebugFormat ("StatusText : {0}", data[1]);
} else if (data[0].StartsWith ("auth_token")) {
AuthToken = data[1];
} else {
- Console.WriteLine ("Unparsed Line in ParseBasic(): {0}={1}", data[0], data[1]);
+ Log.DebugFormat ("Unparsed Line in ParseBasic(): {0}={1}", data[0], data[1]);
}
}
//Console.WriteLine ("Found: {0} cookies", response.Cookies.Count);
if (status != ResultCode.Success) {
- Console.WriteLine (status_text + " Status: " + status);
+ Log.Debug (status_text + " Status: " + status);
throw new GalleryCommandException (status_text, status);
}
@@ -701,7 +702,7 @@ namespace GalleryRemote {
public void PopupException (GalleryCommandException e, Gtk.Dialog d)
{
- System.Console.WriteLine(String.Format ("{0} : {1} ({2})", e.Message, e.ResponseText, e.Status));
+ Log.DebugFormat ("{0} : {1} ({2})", e.Message, e.ResponseText, e.Status);
HigMessageDialog md =
new HigMessageDialog (d,
Gtk.DialogFlags.Modal |
@@ -850,7 +851,7 @@ namespace GalleryRemote {
status = (ResultCode) int.Parse (data [1]);
} else if (data[0].StartsWith ("status_text")) {
status_text = data[1];
- Console.WriteLine ("StatusText : {0}", data[1]);
+ Log.DebugFormat ("StatusText : {0}", data[1]);
} else if (data[0].StartsWith ("image.name")) {
current_image = new Image (album, data[1]);
album.Images.Add (current_image);
@@ -894,14 +895,14 @@ namespace GalleryRemote {
album.BaseURL = data[1];
} else if (data[0].StartsWith ("image_count")) {
if (album.Images.Count != int.Parse (data[1]))
- Console.WriteLine ("Parsed image count for " + album.Name + "(" + album.Images.Count + ") does not match image_count (" + data[1] + "). Something is amiss");
+ Log.Warning ("Parsed image count for " + album.Name + "(" + album.Images.Count + ") does not match image_count (" + data[1] + "). Something is amiss");
} else {
- Console.WriteLine ("Unparsed Line in ParseFetchAlbumImages(): {0}={1}", data[0], data[1]);
+ Log.DebugFormat ("Unparsed Line in ParseFetchAlbumImages(): {0}={1}", data[0], data[1]);
}
}
//Console.WriteLine ("Found: {0} cookies", response.Cookies.Count);
if (status != ResultCode.Success) {
- Console.WriteLine (status_text);
+ Log.Debug (status_text);
throw new GalleryCommandException (status_text, status);
}
@@ -948,7 +949,7 @@ namespace GalleryRemote {
public override void Login (string username, string passwd)
{
- Console.WriteLine ("Gallery2: Attempting to login");
+ Log.Debug ("Gallery2: Attempting to login");
FormClient client = new FormClient (cookies);
client.Add ("g2_form[cmd]", "login");
@@ -1082,7 +1083,7 @@ namespace GalleryRemote {
status = (ResultCode) int.Parse (data [1]);
} else if (data[0].StartsWith ("status_text")) {
status_text = data[1];
- Console.WriteLine ("StatusText : {0}", data[1]);
+ Log.DebugFormat ("StatusText : {0}", data[1]);
} else if (data[0].StartsWith ("image.name")) {
//for G2 this is the number used to download the image.
current_image = new Image (album, "awaiting 'title'");
@@ -1133,14 +1134,14 @@ namespace GalleryRemote {
album.BaseURL = data[1];
} else if (data[0].StartsWith ("image_count")) {
if (album.Images.Count != int.Parse (data[1]))
- Console.WriteLine ("Parsed image count for " + album.Name + "(" + album.Images.Count + ") does not match image_count (" + data[1] + "). Something is amiss");
+ Log.Warning ("Parsed image count for " + album.Name + "(" + album.Images.Count + ") does not match image_count (" + data[1] + "). Something is amiss");
} else {
- Console.WriteLine ("Unparsed Line in ParseFetchAlbumImages(): {0}={1}", data[0], data[1]);
+ Log.DebugFormat ("Unparsed Line in ParseFetchAlbumImages(): {0}={1}", data[0], data[1]);
}
}
- Console.WriteLine ("Found: {0} cookies", response.Cookies.Count);
+ Log.DebugFormat ("Found: {0} cookies", response.Cookies.Count);
if (status != ResultCode.Success) {
- Console.WriteLine (status_text);
+ Log.Debug (status_text);
throw new GalleryCommandException (status_text, status);
}
diff --git a/extensions/Exporters/GalleryExport/Makefile.am b/extensions/Exporters/GalleryExport/Makefile.am
index a09a0d0..f8153cb 100644
--- a/extensions/Exporters/GalleryExport/Makefile.am
+++ b/extensions/Exporters/GalleryExport/Makefile.am
@@ -1,56 +1,15 @@
-include $(top_srcdir)/Makefile.include
+ASSEMBLY = FSpot.Exporters.GalleryExport
+TARGET = library
+LINK = $(REF_FSPOT_EXTENSION_GALLERYEXPORT)
+INSTALL_DIR = $(EXTENSIONS_INSTALL_DIR)
-PLUGIN_NAME = GalleryExport
+SOURCES = \
+ GalleryExport.cs \
+ GalleryRemote.cs \
+ FormClient.cs
-PLUGIN_MANIFEST = $(PLUGIN_NAME).addin.xml
+RESOURCES = \
+ GalleryExport.addin.xml \
+ GalleryExport.glade
-PLUGIN_ASSEMBLY = $(PLUGIN_NAME).dll
-
-PLUGIN_SOURCES = \
- $(srcdir)/GalleryExport.cs \
- $(srcdir)/GalleryRemote.cs
-
-REFS = \
- -r:$(top_builddir)/src/f-spot.exe \
- -r:$(top_builddir)/src/FSpot.Core.dll \
- -r:$(top_builddir)/src/FSpot.Utils.dll \
- $(LINK_SEMWEB) \
- $(LINK_GPHOTO2) \
- $(LINK_GIOSHARP) \
- $(LINK_GTKSHARPBEANS) \
- $(LINK_UNIQUESHARP) \
- -r:Mono.Posix
-
-PKGS = \
- -pkg:gtk-sharp-2.0 \
- -pkg:glade-sharp-2.0
-
-RESOURCES = \
- -resource:$(srcdir)/$(PLUGIN_MANIFEST) \
- -resource:$(srcdir)/$(PLUGIN_NAME).glade
-
-all: $(PLUGIN_ASSEMBLY)
-
-mpack: $(PLUGIN_ASSEMBLY)
- mautil p $(PLUGIN_ASSEMBLY)
-
-$(PLUGIN_ASSEMBLY): $(PLUGIN_SOURCES) $(PLUGIN_MANIFEST)
- $(CSC_LIB) -out:$@ $(PLUGIN_SOURCES) $(REFS) $(PKGS) $(ASSEMBLIES) $(RESOURCES)
-
-plugindir = $(pkglibdir)/extensions
-
-install-data-hook:
- if [ -w $(DESTDIR)$(plugindir)/GalleryExport.addin.xml ] ; then rm -f $(DESTDIR)$(plugindir)/GalleryExport.addin.xml; fi
-
-plugin_DATA = \
- $(PLUGIN_ASSEMBLY)
-
-EXTRA_DIST = \
- $(PLUGIN_SOURCES) \
- $(PLUGIN_MANIFEST) \
- $(PLUGIN_NAME).glade
-
-CLEANFILES = \
- $(PLUGIN_ASSEMBLY) \
- $(PLUGIN_ASSEMBLY).mdb \
- *.mpack
+include $(top_srcdir)/build/build.mk
diff --git a/extensions/Exporters/GalleryExport/Makefile.in b/extensions/Exporters/GalleryExport/Makefile.in
index e89c5d4..41fa6d6 100644
--- a/extensions/Exporters/GalleryExport/Makefile.in
+++ b/extensions/Exporters/GalleryExport/Makefile.in
@@ -35,13 +35,22 @@ POST_UNINSTALL = :
build_triplet = @build@
host_triplet = @host@
DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in \
- $(top_srcdir)/Makefile.include
+ $(top_srcdir)/build/build.environment.mk \
+ $(top_srcdir)/build/build.mk \
+ $(top_srcdir)/build/build.rules.mk
+ at ENABLE_TESTS_TRUE@am__append_1 = " $(NUNIT_LIBS)"
subdir = extensions/Exporters/GalleryExport
ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
am__aclocal_m4_deps = $(top_srcdir)/build/m4/shave/shave.m4 \
$(top_srcdir)/build/m4/shamrock/expansions.m4 \
+ $(top_srcdir)/build/m4/shamrock/gnome-doc.m4 \
$(top_srcdir)/build/m4/shamrock/mono.m4 \
+ $(top_srcdir)/build/m4/shamrock/nunit.m4 \
$(top_srcdir)/build/m4/shamrock/programs.m4 \
+ $(top_srcdir)/build/m4/f-spot/flickrnet.m4 \
+ $(top_srcdir)/build/m4/f-spot/gnome-keyring-sharp.m4 \
+ $(top_srcdir)/build/m4/f-spot/gtk-sharp.m4 \
+ $(top_srcdir)/build/m4/f-spot/mono-addins.m4 \
$(top_srcdir)/acinclude.m4 $(top_srcdir)/configure.ac
am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
$(ACLOCAL_M4)
@@ -49,8 +58,6 @@ mkinstalldirs = $(install_sh) -d
CONFIG_HEADER = $(top_builddir)/config.h
CONFIG_CLEAN_FILES =
CONFIG_CLEAN_VPATH_FILES =
-SOURCES =
-DIST_SOURCES =
am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`;
am__vpath_adj = case $$p in \
$(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \
@@ -72,8 +79,9 @@ am__nobase_list = $(am__nobase_strip_setup); \
am__base_list = \
sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \
sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g'
-am__installdirs = "$(DESTDIR)$(plugindir)"
-DATA = $(plugin_DATA)
+am__installdirs = "$(DESTDIR)$(moduledir)"
+SCRIPTS = $(module_SCRIPTS)
+DIST_SOURCES =
DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
ACLOCAL = @ACLOCAL@
ACLOCAL_AMFLAGS = @ACLOCAL_AMFLAGS@
@@ -119,6 +127,8 @@ EXIF_SOVERSION = @EXIF_SOVERSION@
F77 = @F77@
FC = @FC@
FGREP = @FGREP@
+FLICKRNET_CFLAGS = @FLICKRNET_CFLAGS@
+FLICKRNET_LIBS = @FLICKRNET_LIBS@
F_CFLAGS = @F_CFLAGS@
F_LIBS = @F_LIBS@
GAPI2CODEGEN = @GAPI2CODEGEN@
@@ -132,6 +142,8 @@ GCONF_SHARP_LIBS = @GCONF_SHARP_LIBS@
GETTEXT_PACKAGE = @GETTEXT_PACKAGE@
GIO_CFLAGS = @GIO_CFLAGS@
GIO_LIBS = @GIO_LIBS@
+GLIBSHARP_2_12_7_CFLAGS = @GLIBSHARP_2_12_7_CFLAGS@
+GLIBSHARP_2_12_7_LIBS = @GLIBSHARP_2_12_7_LIBS@
GLIBSHARP_CFLAGS = @GLIBSHARP_CFLAGS@
GLIBSHARP_LIBS = @GLIBSHARP_LIBS@
GLIB_CFLAGS = @GLIB_CFLAGS@
@@ -147,6 +159,10 @@ GNOME_SHARP_CFLAGS = @GNOME_SHARP_CFLAGS@
GNOME_SHARP_LIBS = @GNOME_SHARP_LIBS@
GOBJECT_QUERY = @GOBJECT_QUERY@
GREP = @GREP@
+GTKSHARP_A11Y_CFLAGS = @GTKSHARP_A11Y_CFLAGS@
+GTKSHARP_A11Y_LIBS = @GTKSHARP_A11Y_LIBS@
+GTKSHARP_CFLAGS = @GTKSHARP_CFLAGS@
+GTKSHARP_LIBS = @GTKSHARP_LIBS@
HELP_DIR = @HELP_DIR@
ICONS_DIRECTORY = @ICONS_DIRECTORY@
INSTALL = @INSTALL@
@@ -160,14 +176,14 @@ INTLTOOL_EXTRACT = @INTLTOOL_EXTRACT@
INTLTOOL_MERGE = @INTLTOOL_MERGE@
INTLTOOL_PERL = @INTLTOOL_PERL@
INTLTOOL_UPDATE = @INTLTOOL_UPDATE@
+KEYRINGSHARP_CFLAGS = @KEYRINGSHARP_CFLAGS@
+KEYRINGSHARP_LIBS = @KEYRINGSHARP_LIBS@
LCMS_CFLAGS = @LCMS_CFLAGS@
LCMS_LIBS = @LCMS_LIBS@
LD = @LD@
LDFLAGS = @LDFLAGS@
LIBEXIF_VERSION_CHECK_CFLAGS = @LIBEXIF_VERSION_CHECK_CFLAGS@
LIBEXIF_VERSION_CHECK_LIBS = @LIBEXIF_VERSION_CHECK_LIBS@
-LIBGPHOTO2_CFLAGS = @LIBGPHOTO2_CFLAGS@
-LIBGPHOTO2_LIBS = @LIBGPHOTO2_LIBS@
LIBJPEG = @LIBJPEG@
LIBOBJS = @LIBOBJS@
LIBS = @LIBS@
@@ -182,6 +198,12 @@ MCS = @MCS@
MKDIR_P = @MKDIR_P@
MKINSTALLDIRS = @MKINSTALLDIRS@
MONO = @MONO@
+MONO_ADDINS_CFLAGS = @MONO_ADDINS_CFLAGS@
+MONO_ADDINS_GUI_CFLAGS = @MONO_ADDINS_GUI_CFLAGS@
+MONO_ADDINS_GUI_LIBS = @MONO_ADDINS_GUI_LIBS@
+MONO_ADDINS_LIBS = @MONO_ADDINS_LIBS@
+MONO_ADDINS_SETUP_CFLAGS = @MONO_ADDINS_SETUP_CFLAGS@
+MONO_ADDINS_SETUP_LIBS = @MONO_ADDINS_SETUP_LIBS@
MONO_MODULE_CFLAGS = @MONO_MODULE_CFLAGS@
MONO_MODULE_LIBS = @MONO_MODULE_LIBS@
MSGFMT = @MSGFMT@
@@ -192,7 +214,6 @@ NDESK_DBUS_LIBS = @NDESK_DBUS_LIBS@
NM = @NM@
NMEDIT = @NMEDIT@
NUNIT_CFLAGS = @NUNIT_CFLAGS@
-NUNIT_DEFINES = @NUNIT_DEFINES@
NUNIT_LIBS = @NUNIT_LIBS@
OBJC = @OBJC@
OBJDUMP = @OBJDUMP@
@@ -284,73 +305,234 @@ target_alias = @target_alias@
top_build_prefix = @top_build_prefix@
top_builddir = @top_builddir@
top_srcdir = @top_srcdir@
+ASSEMBLY = FSpot.Exporters.GalleryExport
+TARGET = library
+LINK = $(REF_FSPOT_EXTENSION_GALLERYEXPORT) $(am__append_1)
+INSTALL_DIR = $(EXTENSIONS_INSTALL_DIR)
+SOURCES = \
+ GalleryExport.cs \
+ GalleryRemote.cs \
+ FormClient.cs
+
+RESOURCES = \
+ GalleryExport.addin.xml \
+ GalleryExport.glade
+
+
+# Initializers
+MONO_BASE_PATH =
+MONO_ADDINS_PATH =
+
+# Install Paths
+DEFAULT_INSTALL_DIR = $(pkglibdir)
+BACKENDS_INSTALL_DIR = $(DEFAULT_INSTALL_DIR)/Backends
+EXTENSIONS_INSTALL_DIR = $(DEFAULT_INSTALL_DIR)/Extensions
DIR_DOCS = $(top_builddir)/docs
DIR_EXTENSIONS = $(top_builddir)/extensions
-DIR_GPHOTO2 = $(top_builddir)/lib/libgphoto2-sharp
DIR_ICONS = $(top_builddir)/icons
DIR_JPEGTRAN = $(top_builddir)/lib/libjpegtran
-DIR_KEYRING = $(top_builddir)/lib/gnome-keyring-sharp
DIR_LIBFSPOT = $(top_builddir)/lib/libfspot
DIR_SEMWEB = $(top_builddir)/lib/semweb
DIR_SRC = $(top_builddir)/src
DIR_GIOSHARP = $(top_builddir)/lib/gio-sharp/gio
DIR_GTKSHARPBEANS = $(top_builddir)/lib/gtk-sharp-beans
DIR_UNIQUESHARP = $(top_builddir)/lib/unique-sharp/unique
-LINK_KEYRING = -r:$(DIR_KEYRING)/gnome-keyring-sharp.dll
-LINK_GPHOTO2 = -r:$(DIR_GPHOTO2)/libgphoto2-sharp.dll
-LINK_SEMWEB = -r:$(DIR_SEMWEB)/SemWeb.dll
-LINK_GIOSHARP = -r:$(DIR_GIOSHARP)/gio-sharp.dll
-LINK_GTKSHARPBEANS = -r:$(DIR_GTKSHARPBEANS)/gtk-sharp-beans.dll
-LINK_UNIQUESHARP = -r:$(DIR_UNIQUESHARP)/unique-sharp.dll
-CSC_FLAGS = -debug
-CSC = $(MCS) $(CSC_FLAGS) -target:exe
-CSC_LIB = $(MCS) $(CSC_FLAGS) -target:library
-MONO_DEBUGFLAGS = --debug
-RUNTIME = mono $(MONO_DEBUGFLAGS)
-PLUGIN_NAME = GalleryExport
-PLUGIN_MANIFEST = $(PLUGIN_NAME).addin.xml
-PLUGIN_ASSEMBLY = $(PLUGIN_NAME).dll
-PLUGIN_SOURCES = \
- $(srcdir)/GalleryExport.cs \
- $(srcdir)/GalleryRemote.cs
-
-REFS = \
- -r:$(top_builddir)/src/f-spot.exe \
- -r:$(top_builddir)/src/FSpot.Core.dll \
- -r:$(top_builddir)/src/FSpot.Utils.dll \
- $(LINK_SEMWEB) \
- $(LINK_GPHOTO2) \
- $(LINK_GIOSHARP) \
- $(LINK_GTKSHARPBEANS) \
- $(LINK_UNIQUESHARP) \
- -r:Mono.Posix
-
-PKGS = \
- -pkg:gtk-sharp-2.0 \
- -pkg:glade-sharp-2.0
-
-RESOURCES = \
- -resource:$(srcdir)/$(PLUGIN_MANIFEST) \
- -resource:$(srcdir)/$(PLUGIN_NAME).glade
-
-plugindir = $(pkglibdir)/extensions
-plugin_DATA = \
- $(PLUGIN_ASSEMBLY)
-
-EXTRA_DIST = \
- $(PLUGIN_SOURCES) \
- $(PLUGIN_MANIFEST) \
- $(PLUGIN_NAME).glade
-
-CLEANFILES = \
- $(PLUGIN_ASSEMBLY) \
- $(PLUGIN_ASSEMBLY).mdb \
- *.mpack
-
+DIR_BIN = $(top_builddir)/bin
+
+# External libraries to link against, generated from configure
+LINK_SYSTEM = -r:System
+LINK_SYSTEMDATA = -r:System.Data
+LINK_SYSTEM_WEB = -r:System.Web
+LINK_MONO_POSIX = -r:Mono.Posix
+LINK_MONO_CAIRO = -r:Mono.Cairo
+LINK_MONO_SIMD = -r:Mono.Simd
+LINK_MONODATA = -r:Mono.Data
+LINK_MONO_DATA_SQLITECLIENT = -r:Mono.Data.SqliteClient
+LINK_ICSHARP_ZIP_LIB = -r:ICSharpCode.SharpZipLib
+LINK_KEYRING = $(KEYRINGSHARP_LIBS)
+LINK_GLIB = $(GLIBSHARP_LIBS)
+LINK_GTK = $(GTKSHARP_LIBS)
+LINK_GNOME = $(GNOME_SHARP_LIBS)
+LINK_GCONF = $(GCONF_SHARP_LIBS)
+LINK_GLADE = -pkg:glade-sharp-2.0
+LINK_FLICKRNET = -pkg:flickrnet
+LINK_DBUS = $(NDESK_DBUS_LIBS) $(NDESK_DBUS_GLIB_LIBS)
+LINK_DBUS_NO_GLIB = $(NDESK_DBUS_LIBS)
+LINK_MONO_ADDINS_DEPS = $(MONO_ADDINS_LIBS)
+LINK_MONO_ADDINS_SETUP_DEPS = $(MONO_ADDINS_SETUP_LIBS)
+LINK_MONO_ADDINS_GUI_DEPS = $(MONO_ADDINS_GUI_LIBS)
+
+# GIO
+REF_GIO =
+LINK_GIO = -r:$(DIR_GIOSHARP)/gio-sharp.dll
+LINK_GIO_DEPS = $(REF_GIO) $(LINK_GIO)
+
+# Gtk Beans
+REF_GTK_BEANS = $(LINK_GIO_DEPS)
+LINK_GTK_BEANS = -r:$(DIR_GTKSHARPBEANS)/gtk-sharp-beans.dll
+LINK_GTK_BEANS_DEPS = $(REF_GTK_BEANS) $(LINK_GTK_BEANS)
+
+# Uniqe
+REF_UNIQUE =
+LINK_UNIQUE = -r:$(DIR_UNIQUESHARP)/unique-sharp.dll
+LINK_UNIQUE_DEPS = $(REF_UNIQUE) $(LINK_UNIQUE)
+
+# Hyena
+REF_HYENA = $(LINK_SYSTEM) $(LINK_MONO_POSIX)
+LINK_HYENA = -r:$(DIR_BIN)/Hyena.dll
+LINK_HYENA_DEPS = $(REF_HYENA) $(LINK_HYENA)
+
+# Semweb
+REF_SEMWEB = $(LINK_SYSTEMDATA) $(LINK_HYENA_DEPS)
+LINK_SEMWEB = -r:$(DIR_BIN)/SemWeb.dll
+LINK_SEMWEB_DEPS = $(REF_SEMWEB) $(LINK_SEMWEB)
+
+# Hyena.Data.Sqlite
+REF_HYENA_DATA_SQLITE = $(LINK_SQLITE)
+LINK_HYENA_DATA_SQLITE = -r:$(DIR_BIN)/Hyena.Data.Sqlite.dll
+LINK_HYENA_DATA_SQLITE_DEPS = $(REF_HYENA_DATA_SQLITE) $(LINK_HYENA_DATA_SQLITE)
+
+# Hyena.Gui
+REF_HYENA_GUI = $(LINK_HYENA_DEPS)
+LINK_HYENA_GUI = -r:$(DIR_BIN)/Hyena.Gui.dll
+LINK_HENA_GUI_DEPS = $(REF_HYENA_GUI) $(LINK_HYENA_GUI)
+
+# FSpot.Cms
+REF_FSPOT_CMS = $(LINK_GTK)
+LINK_FSPOT_CMS = -r:$(DIR_BIN)/FSpot.Cms.dll
+LINK_FSPOT_CMS_DEPS = $(REF_FSPOT_CMS) $(LINK_FSPOT_CMS)
+
+# FSpot.Utils
+REF_FSPOT_UTILS = $(LINK_HYENA_DEPS) $(LINK_GTK) $(LINK_GIO) $(LINK_MONO_CAIRO)
+LINK_FSPOT_UTILS = -r:$(DIR_BIN)/FSpot.Utils.dll
+LINK_FSPOT_UTILS_DEPS = $(REF_FSPOT_UTILS) $(LINK_FSPOT_UTILS)
+
+# FSpot.Core
+REF_FSPOT_CORE = $(LINK_FSPOT_UTILS_DEPS) $(LINK_FSPOT_CMS_DEPS)
+LINK_FSPOT_CORE = -r:$(DIR_BIN)/FSpot.Core.dll
+LINK_FSPOT_CORE_DEPS = $(REF_FSPOT_CORE) $(LINK_FSPOT_CORE)
+
+# FSpot.Query
+REF_FSPOT_QUERY = $(LINK_FSPOT_CORE_DEPS)
+LINK_FSPOT_QUERY = -r:$(DIR_BIN)/FSpot.Query.dll
+LINK_FSPOT_QUERY_DEPS = $(REF_FSPOT_QUERY) $(LINK_FSPOT_QUERY)
+
+# FSpot.JobScheduler
+REF_FSPOT_JOB_SCHEDULER = $(LINK_HYENA_DEPS)
+LINK_FSPOT_JOB_SCHEDULER = -r:$(DIR_BIN)/FSpot.JobScheduler.dll
+LINK_FSPOT_JOB_SCHEDULER_DEPS = $(REF_FSPOT_JOB_SCHEDULER) $(LINK_FSPOT_JOB_SCHEDULER)
+
+# FSpot.Bling
+REF_FSPOT_BLING = $(LINK_GTK_BEANS_DEPS) $(LINK_GLIB)
+LINK_FSPOT_BLING = -r:$(DIR_BIN)/FSpot.Bling.dll
+LINK_FSPOT_BLING_DEPS = $(REF_FSPOT_BLING) $(LINK_FSPOT_BLING)
+
+# FSpot.Platform
+REF_FSPOT_PLATFORM = $(LINK_GCONF) $(LINK_GTK) $(LINK_FSPOT_CORE_DEPS) $(LINK_DBUS)
+LINK_FSPOT_PLATFORM = -r:$(DIR_BIN)/FSpot.Platform.dll
+LINK_FSPOT_PLATFORM_DEPS = $(REF_FSPOT_PLATFORM) $(LINK_FSPOT_PLATFORM)
+
+# FSpot.Widgets
+REF_FSPOT_WIDGETS = $(LINK_FSPOT_CORE_DEPS) $(LINK_FSPOT_BLING_DEPS)
+LINK_FSPOT_WIDGETS = -r:$(DIR_BIN)/FSpot.Widgets.dll
+LINK_FSPOT_WIDGETS_DEPS = $(REF_FSPOT_WIDGETS) $(LINK_FSPOT_WIDGETS)
+
+# FSpot (executable)
+REF_FSPOT = $(LINK_FSPOT_WIDGETS_DEPS) $(LINK_FSPOT_PLATFORM_DEPS) $(LINK_FSPOT_QUERY_DEPS) \
+ $(LINK_GLIB) $(LINK_MONO_ADDINS_DEPS) $(LINK_UNIQUE_DEPS) $(LINK_MONO_ADDINS_SETUP_DEPS) \
+ $(LINK_SEMWEB_DEPS) $(LINK_GLADE) $(LINK_MONODATA) $(LINK_MONO_DATA_SQLITECLIENT) \
+ $(LINK_MONO_ADDINS_GUI_DEPS) $(LINK_FSPOT_JOB_SCHEDULER_DEPS) $(LINK_ICSHARP_ZIP_LIB) \
+ $(LINK_GNOME)
+
+# FIXME: do not link executables
+LINK_FSPOT = -r:$(DIR_BIN)/f-spot.exe
+LINK_FSPOT_DEPS = $(REF_FSPOT) $(LINK_FSPOT)
+
+# Extensions
+REF_FSPOT_EXTENSION_BLACKOUTEDITOR = $(LINK_FSPOT_DEPS)
+REF_FSPOT_EXTENSION_BWEDITOR = $(LINK_FSPOT_DEPS) $(LINK_MONO_SIMD)
+REF_FSPOT_EXTENSION_FLIPEDITOR = $(LINK_FSPOT_DEPS)
+REF_FSPOT_EXTENSION_PIXELATEEDITOR = $(LINK_FSPOT_DEPS)
+REF_FSPOT_EXTENSION_RESIZEEDITOR = $(LINK_FSPOT_DEPS)
+REF_FSPOT_EXTENSION_CDEXPORT = $(LINK_FSPOT_DEPS)
+REF_FSPOT_EXTENSION_FACEBOOKEXPORT = $(LINK_FSPOT_DEPS) $(LINK_KEYRING)
+REF_FSPOT_EXTENSION_FLICKREXPORT = $(LINK_FSPOT_DEPS) $(LINK_FLICKRNET)
+REF_FSPOT_EXTENSION_FOLDEREXPORT = $(LINK_FSPOT_DEPS) $(LINK_SYSTEM_WEB)
+REF_FSPOT_EXTENSION_GALLERYEXPORT = $(LINK_FSPOT_DEPS)
+REF_MONO_GOOGLE = $(LINK_HYENA_DEPS)
+LINK_MONO_GOOGLE = -r:$(DIR_BIN)/Mono.Google.dll
+LINK_MONO_GOOGLE_DEPS = $(REF_MONO_GOOGLE) $(LINK_MONO_GOOGLE)
+REF_FSPOT_EXTENSION_PICASAWEBEXPORT = $(LINK_FSPOT_DEPS) $(LINK_MONO_GOOGLE) $(LINK_KEYRING)
+REF_SMUGMUGNET = $(LINK_FSPOT_DEPS)
+LINK_SMUGMUGNET = -r:$(DIR_BIN)/SmugMugNet.dll
+LINK_SMUGMUGNET_DEPS = $(REF_SMUGMUGNET) $(LINK_SMUGMUGNET)
+REF_FSPOT_EXTENSION_SMUGMUGEXPORT = $(LINK_SMUGMUGNET_DEPS) $(LINK_KEYRING)
+REF_MONO_TABBLO = $(LINK_HYENA_DEPS)
+LINK_MONO_TABBLO = -r:$(DIR_BIN)/Mono.Tabblo.dll
+LINK_MONO_TABBLO_DEPS = $(REF_MONO_TABBLO) $(LINK_MONO_TABBLO)
+REF_FSPOT_EXTENSION_TABBLOEXPORT = $(LINK_FSPOT_DEPS) $(LINK_KEYRING) $(LINK_MONO_TABBLO_DEPS)
+REF_FSPOT_EXTENSION_ZIPEXPORT = $(LINK_FSPOT_DEPS)
+REF_FSPOT_EXTENSION_CHANGEPHOTOPATH = $(LINK_FSPOT_DEPS)
+REF_FSPOT_EXTENSION_DEVELOPINUFRAW = $(LINK_FSPOT_DEPS)
+REF_FSPOT_EXTENSION_HASHJOB = $(LINK_FSPOT_DEPS)
+REF_FSPOT_EXTENSION_LIVEWEBGALLERY = $(LINK_FSPOT_DEPS)
+REF_FSPOT_EXTENSION_MERGEDB = $(LINK_FSPOT_DEPS)
+REF_FSPOT_EXTENSION_RAWPLUSJPEG = $(LINK_FSPOT_DEPS)
+REF_FSPOT_EXTENSION_RETROACTIVEROLL = $(LINK_FSPOT_DEPS)
+REF_FSPOT_EXTENSION_SCREENSAVERCONFIG = $(LINK_FSPOT_DEPS)
+REF_FSPOT_EXTENSION_COVERTRANSITION = $(LINK_FSPOT_DEPS)
+
+# Cute hack to replace a space with something
+colon := :
+empty :=
+space := $(empty) $(empty)
+
+# Build path to allow running uninstalled
+RUN_PATH = $(subst $(space),$(colon), $(MONO_BASE_PATH))
+UNIQUE_FILTER_PIPE = tr [:space:] \\n | sort | uniq
+BUILD_DATA_DIR = $(top_builddir)/bin/share/$(PACKAGE)
+
+# Since all other attempts failed, we currently go this way:
+# This code adds the file specified in ASSEMBLY_INFO_SOURCE to SOURCES_BUILD.
+# If no such file is specified, the default AssemblyInfo.cs is used.
+ASSEMBLY_INFO_SOURCE_REAL = \
+ $(shell if [ "$(ASSEMBLY_INFO_SOURCE)" ]; \
+ then \
+ echo "$(addprefix $(srcdir)/, $(ASSEMBLY_INFO_SOURCE))"; \
+ else \
+ echo "$(top_srcdir)/src/AssemblyInfo.cs"; \
+ fi)
+
+SOURCES_BUILD = $(addprefix $(srcdir)/, $(SOURCES)) \
+ $(ASSEMBLY_INFO_SOURCE_REAL)
+RESOURCES_EXPANDED = $(addprefix $(srcdir)/, $(RESOURCES))
+RESOURCES_BUILD = $(foreach resource, $(RESOURCES_EXPANDED), \
+ -resource:$(resource),$(notdir $(resource)))
+
+INSTALL_ICONS = $(top_srcdir)/build/private-icon-theme-installer "$(mkinstalldirs)" "$(INSTALL_DATA)"
+THEME_ICONS_SOURCE = $(wildcard $(srcdir)/ThemeIcons/*/*/*.png) $(wildcard $(srcdir)/ThemeIcons/scalable/*/*.svg)
+THEME_ICONS_RELATIVE = $(subst $(srcdir)/ThemeIcons/, , $(THEME_ICONS_SOURCE))
+ASSEMBLY_EXTENSION = $(strip $(patsubst library, dll, $(TARGET)))
+ASSEMBLY_FILE = $(top_builddir)/bin/$(ASSEMBLY).$(ASSEMBLY_EXTENSION)
+INSTALL_DIR_RESOLVED = $(firstword $(subst , $(DEFAULT_INSTALL_DIR), $(INSTALL_DIR)))
+ at ENABLE_TESTS_TRUE@ENABLE_TESTS_FLAG = "-define:ENABLE_TESTS"
+ at ENABLE_ATK_TRUE@ENABLE_ATK_FLAG = "-define:ENABLE_ATK"
+FILTERED_LINK = $(shell echo "$(LINK)" | $(UNIQUE_FILTER_PIPE))
+DEP_LINK = $(shell echo "$(LINK)" | $(UNIQUE_FILTER_PIPE) | sed s,-r:,,g | grep '$(top_builddir)/bin/')
+OUTPUT_FILES = \
+ $(ASSEMBLY_FILE) \
+ $(ASSEMBLY_FILE).mdb
+
+moduledir = $(INSTALL_DIR_RESOLVED)
+module_SCRIPTS = $(OUTPUT_FILES)
+EXTRA_DIST = $(SOURCES_BUILD) $(RESOURCES_EXPANDED) $(THEME_ICONS_SOURCE)
+CLEANFILES = $(OUTPUT_FILES) $(ASSEMBLY_FILE).config
+DISTCLEANFILES = *.pidb
+MAINTAINERCLEANFILES = Makefile.in
all: all-am
.SUFFIXES:
-$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(top_srcdir)/Makefile.include $(am__configure_deps)
+$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(top_srcdir)/build/build.mk $(top_srcdir)/build/build.environment.mk $(top_srcdir)/build/build.rules.mk $(am__configure_deps)
@for dep in $?; do \
case '$(am__configure_deps)' in \
*$$dep*) \
@@ -380,32 +562,46 @@ $(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps)
$(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps)
cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
$(am__aclocal_m4_deps):
+install-moduleSCRIPTS: $(module_SCRIPTS)
+ @$(NORMAL_INSTALL)
+ test -z "$(moduledir)" || $(MKDIR_P) "$(DESTDIR)$(moduledir)"
+ @list='$(module_SCRIPTS)'; test -n "$(moduledir)" || list=; \
+ for p in $$list; do \
+ if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \
+ if test -f "$$d$$p"; then echo "$$d$$p"; echo "$$p"; else :; fi; \
+ done | \
+ sed -e 'p;s,.*/,,;n' \
+ -e 'h;s|.*|.|' \
+ -e 'p;x;s,.*/,,;$(transform)' | sed 'N;N;N;s,\n, ,g' | \
+ $(AWK) 'BEGIN { files["."] = ""; dirs["."] = 1; } \
+ { d=$$3; if (dirs[d] != 1) { print "d", d; dirs[d] = 1 } \
+ if ($$2 == $$4) { files[d] = files[d] " " $$1; \
+ if (++n[d] == $(am__install_max)) { \
+ print "f", d, files[d]; n[d] = 0; files[d] = "" } } \
+ else { print "f", d "/" $$4, $$1 } } \
+ END { for (d in files) print "f", d, files[d] }' | \
+ while read type dir files; do \
+ if test "$$dir" = .; then dir=; else dir=/$$dir; fi; \
+ test -z "$$files" || { \
+ echo " $(INSTALL_SCRIPT) $$files '$(DESTDIR)$(moduledir)$$dir'"; \
+ $(INSTALL_SCRIPT) $$files "$(DESTDIR)$(moduledir)$$dir" || exit $$?; \
+ } \
+ ; done
+
+uninstall-moduleSCRIPTS:
+ @$(NORMAL_UNINSTALL)
+ @list='$(module_SCRIPTS)'; test -n "$(moduledir)" || exit 0; \
+ files=`for p in $$list; do echo "$$p"; done | \
+ sed -e 's,.*/,,;$(transform)'`; \
+ test -n "$$list" || exit 0; \
+ echo " ( cd '$(DESTDIR)$(moduledir)' && rm -f" $$files ")"; \
+ cd "$(DESTDIR)$(moduledir)" && rm -f $$files
mostlyclean-libtool:
-rm -f *.lo
clean-libtool:
-rm -rf .libs _libs
-install-pluginDATA: $(plugin_DATA)
- @$(NORMAL_INSTALL)
- test -z "$(plugindir)" || $(MKDIR_P) "$(DESTDIR)$(plugindir)"
- @list='$(plugin_DATA)'; test -n "$(plugindir)" || list=; \
- for p in $$list; do \
- if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \
- echo "$$d$$p"; \
- done | $(am__base_list) | \
- while read files; do \
- echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(plugindir)'"; \
- $(INSTALL_DATA) $$files "$(DESTDIR)$(plugindir)" || exit $$?; \
- done
-
-uninstall-pluginDATA:
- @$(NORMAL_UNINSTALL)
- @list='$(plugin_DATA)'; test -n "$(plugindir)" || list=; \
- files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \
- test -n "$$files" || exit 0; \
- echo " ( cd '$(DESTDIR)$(plugindir)' && rm -f" $$files ")"; \
- cd "$(DESTDIR)$(plugindir)" && rm -f $$files
tags: TAGS
TAGS:
@@ -445,9 +641,9 @@ distdir: $(DISTFILES)
done
check-am: all-am
check: check-am
-all-am: Makefile $(DATA)
+all-am: Makefile $(SCRIPTS)
installdirs:
- for dir in "$(DESTDIR)$(plugindir)"; do \
+ for dir in "$(DESTDIR)$(moduledir)"; do \
test -z "$$dir" || $(MKDIR_P) "$$dir"; \
done
install: install-am
@@ -472,10 +668,12 @@ clean-generic:
distclean-generic:
-test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
-test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES)
+ -test -z "$(DISTCLEANFILES)" || rm -f $(DISTCLEANFILES)
maintainer-clean-generic:
@echo "This command is intended for maintainers to use"
@echo "it deletes files that may require special tools to rebuild."
+ -test -z "$(MAINTAINERCLEANFILES)" || rm -f $(MAINTAINERCLEANFILES)
clean: clean-am
clean-am: clean-generic clean-libtool mostlyclean-am
@@ -496,9 +694,8 @@ info: info-am
info-am:
-install-data-am: install-pluginDATA
- @$(NORMAL_INSTALL)
- $(MAKE) $(AM_MAKEFLAGS) install-data-hook
+install-data-am: install-data-local install-moduleSCRIPTS
+
install-dvi: install-dvi-am
install-dvi-am:
@@ -541,33 +738,72 @@ ps: ps-am
ps-am:
-uninstall-am: uninstall-pluginDATA
+uninstall-am: uninstall-local uninstall-moduleSCRIPTS
-.MAKE: install-am install-data-am install-strip
+.MAKE: install-am install-strip
.PHONY: all all-am check check-am clean clean-generic clean-libtool \
distclean distclean-generic distclean-libtool distdir dvi \
dvi-am html html-am info info-am install install-am \
- install-data install-data-am install-data-hook install-dvi \
+ install-data install-data-am install-data-local 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-pluginDATA install-ps \
+ install-moduleSCRIPTS install-pdf install-pdf-am install-ps \
install-ps-am install-strip installcheck installcheck-am \
installdirs maintainer-clean maintainer-clean-generic \
mostlyclean mostlyclean-generic mostlyclean-libtool pdf pdf-am \
- ps ps-am uninstall uninstall-am uninstall-pluginDATA
-
-
-all: $(PLUGIN_ASSEMBLY)
-
-mpack: $(PLUGIN_ASSEMBLY)
- mautil p $(PLUGIN_ASSEMBLY)
-
-$(PLUGIN_ASSEMBLY): $(PLUGIN_SOURCES) $(PLUGIN_MANIFEST)
- $(CSC_LIB) -out:$@ $(PLUGIN_SOURCES) $(REFS) $(PKGS) $(ASSEMBLIES) $(RESOURCES)
-
-install-data-hook:
- if [ -w $(DESTDIR)$(plugindir)/GalleryExport.addin.xml ] ; then rm -f $(DESTDIR)$(plugindir)/GalleryExport.addin.xml; fi
+ ps ps-am uninstall uninstall-am uninstall-local \
+ uninstall-moduleSCRIPTS
+
+
+all: $(ASSEMBLY_FILE) theme-icons
+
+run:
+ @pushd $(top_builddir); \
+ make run; \
+ popd;
+
+# uncommented for now.
+# tests are currently excuted from Makefile in $(top_builddir)
+#test:
+# @pushd $(top_builddir)/tests; \
+# make $(ASSEMBLY); \
+# popd;
+
+build-debug:
+ @echo $(DEP_LINK)
+
+$(ASSEMBLY_FILE).mdb: $(ASSEMBLY_FILE)
+
+$(ASSEMBLY_FILE): $(SOURCES_BUILD) $(RESOURCES_EXPANDED) $(DEP_LINK)
+ @mkdir -p $(top_builddir)/bin
+ @if [ ! "x$(ENABLE_RELEASE)" = "xyes" ]; then \
+ $(top_srcdir)/build/dll-map-makefile-verifier $(srcdir)/Makefile.am $(srcdir)/$(notdir $@.config) && \
+ $(MONO) $(top_builddir)/build/dll-map-verifier.exe $(srcdir)/$(notdir $@.config) -iwinmm -ilibbanshee -ilibbnpx11 -ilibc -ilibc.so.6 -iintl -ilibmtp.dll -ilibigemacintegration.dylib -iCFRelease $(SOURCES_BUILD); \
+ fi;
+ $(MCS) \
+ $(GMCS_FLAGS) \
+ $(ASSEMBLY_BUILD_FLAGS) \
+ -nowarn:0278 -nowarn:0078 $$warn \
+ -define:HAVE_GTK_2_10 -define:NET_2_0 \
+ -debug -target:$(TARGET) -out:$@ \
+ $(BUILD_DEFINES) $(ENABLE_TESTS_FLAG) $(ENABLE_ATK_FLAG) \
+ $(FILTERED_LINK) $(RESOURCES_BUILD) $(SOURCES_BUILD)
+ @if [ -e $(srcdir)/$(notdir $@.config) ]; then \
+ cp $(srcdir)/$(notdir $@.config) $(top_builddir)/bin; \
+ fi;
+ @if [ ! -z "$(EXTRA_BUNDLE)" ]; then \
+ cp $(EXTRA_BUNDLE) $(top_builddir)/bin; \
+ fi;
+
+theme-icons: $(THEME_ICONS_SOURCE)
+ @$(INSTALL_ICONS) -il "$(BUILD_DATA_DIR)" "$(srcdir)" $(THEME_ICONS_RELATIVE)
+
+install-data-local: $(THEME_ICONS_SOURCE)
+ @$(INSTALL_ICONS) -i "$(DESTDIR)$(pkgdatadir)" "$(srcdir)" $(THEME_ICONS_RELATIVE)
+
+uninstall-local: $(THEME_ICONS_SOURCE)
+ @$(INSTALL_ICONS) -u "$(DESTDIR)$(pkgdatadir)" "$(srcdir)" $(THEME_ICONS_RELATIVE)
# 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/extensions/Exporters/Makefile.in b/extensions/Exporters/Makefile.in
index 0dbebc1..037b4e4 100644
--- a/extensions/Exporters/Makefile.in
+++ b/extensions/Exporters/Makefile.in
@@ -38,8 +38,14 @@ DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in
ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
am__aclocal_m4_deps = $(top_srcdir)/build/m4/shave/shave.m4 \
$(top_srcdir)/build/m4/shamrock/expansions.m4 \
+ $(top_srcdir)/build/m4/shamrock/gnome-doc.m4 \
$(top_srcdir)/build/m4/shamrock/mono.m4 \
+ $(top_srcdir)/build/m4/shamrock/nunit.m4 \
$(top_srcdir)/build/m4/shamrock/programs.m4 \
+ $(top_srcdir)/build/m4/f-spot/flickrnet.m4 \
+ $(top_srcdir)/build/m4/f-spot/gnome-keyring-sharp.m4 \
+ $(top_srcdir)/build/m4/f-spot/gtk-sharp.m4 \
+ $(top_srcdir)/build/m4/f-spot/mono-addins.m4 \
$(top_srcdir)/acinclude.m4 $(top_srcdir)/configure.ac
am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
$(ACLOCAL_M4)
@@ -134,6 +140,8 @@ EXIF_SOVERSION = @EXIF_SOVERSION@
F77 = @F77@
FC = @FC@
FGREP = @FGREP@
+FLICKRNET_CFLAGS = @FLICKRNET_CFLAGS@
+FLICKRNET_LIBS = @FLICKRNET_LIBS@
F_CFLAGS = @F_CFLAGS@
F_LIBS = @F_LIBS@
GAPI2CODEGEN = @GAPI2CODEGEN@
@@ -147,6 +155,8 @@ GCONF_SHARP_LIBS = @GCONF_SHARP_LIBS@
GETTEXT_PACKAGE = @GETTEXT_PACKAGE@
GIO_CFLAGS = @GIO_CFLAGS@
GIO_LIBS = @GIO_LIBS@
+GLIBSHARP_2_12_7_CFLAGS = @GLIBSHARP_2_12_7_CFLAGS@
+GLIBSHARP_2_12_7_LIBS = @GLIBSHARP_2_12_7_LIBS@
GLIBSHARP_CFLAGS = @GLIBSHARP_CFLAGS@
GLIBSHARP_LIBS = @GLIBSHARP_LIBS@
GLIB_CFLAGS = @GLIB_CFLAGS@
@@ -162,6 +172,10 @@ GNOME_SHARP_CFLAGS = @GNOME_SHARP_CFLAGS@
GNOME_SHARP_LIBS = @GNOME_SHARP_LIBS@
GOBJECT_QUERY = @GOBJECT_QUERY@
GREP = @GREP@
+GTKSHARP_A11Y_CFLAGS = @GTKSHARP_A11Y_CFLAGS@
+GTKSHARP_A11Y_LIBS = @GTKSHARP_A11Y_LIBS@
+GTKSHARP_CFLAGS = @GTKSHARP_CFLAGS@
+GTKSHARP_LIBS = @GTKSHARP_LIBS@
HELP_DIR = @HELP_DIR@
ICONS_DIRECTORY = @ICONS_DIRECTORY@
INSTALL = @INSTALL@
@@ -175,14 +189,14 @@ INTLTOOL_EXTRACT = @INTLTOOL_EXTRACT@
INTLTOOL_MERGE = @INTLTOOL_MERGE@
INTLTOOL_PERL = @INTLTOOL_PERL@
INTLTOOL_UPDATE = @INTLTOOL_UPDATE@
+KEYRINGSHARP_CFLAGS = @KEYRINGSHARP_CFLAGS@
+KEYRINGSHARP_LIBS = @KEYRINGSHARP_LIBS@
LCMS_CFLAGS = @LCMS_CFLAGS@
LCMS_LIBS = @LCMS_LIBS@
LD = @LD@
LDFLAGS = @LDFLAGS@
LIBEXIF_VERSION_CHECK_CFLAGS = @LIBEXIF_VERSION_CHECK_CFLAGS@
LIBEXIF_VERSION_CHECK_LIBS = @LIBEXIF_VERSION_CHECK_LIBS@
-LIBGPHOTO2_CFLAGS = @LIBGPHOTO2_CFLAGS@
-LIBGPHOTO2_LIBS = @LIBGPHOTO2_LIBS@
LIBJPEG = @LIBJPEG@
LIBOBJS = @LIBOBJS@
LIBS = @LIBS@
@@ -197,6 +211,12 @@ MCS = @MCS@
MKDIR_P = @MKDIR_P@
MKINSTALLDIRS = @MKINSTALLDIRS@
MONO = @MONO@
+MONO_ADDINS_CFLAGS = @MONO_ADDINS_CFLAGS@
+MONO_ADDINS_GUI_CFLAGS = @MONO_ADDINS_GUI_CFLAGS@
+MONO_ADDINS_GUI_LIBS = @MONO_ADDINS_GUI_LIBS@
+MONO_ADDINS_LIBS = @MONO_ADDINS_LIBS@
+MONO_ADDINS_SETUP_CFLAGS = @MONO_ADDINS_SETUP_CFLAGS@
+MONO_ADDINS_SETUP_LIBS = @MONO_ADDINS_SETUP_LIBS@
MONO_MODULE_CFLAGS = @MONO_MODULE_CFLAGS@
MONO_MODULE_LIBS = @MONO_MODULE_LIBS@
MSGFMT = @MSGFMT@
@@ -207,7 +227,6 @@ NDESK_DBUS_LIBS = @NDESK_DBUS_LIBS@
NM = @NM@
NMEDIT = @NMEDIT@
NUNIT_CFLAGS = @NUNIT_CFLAGS@
-NUNIT_DEFINES = @NUNIT_DEFINES@
NUNIT_LIBS = @NUNIT_LIBS@
OBJC = @OBJC@
OBJDUMP = @OBJDUMP@
diff --git a/extensions/Exporters/PicasaWebExport/Makefile.am b/extensions/Exporters/PicasaWebExport/Makefile.am
index b5bfd9f..dd801bc 100644
--- a/extensions/Exporters/PicasaWebExport/Makefile.am
+++ b/extensions/Exporters/PicasaWebExport/Makefile.am
@@ -1,59 +1,15 @@
-include $(top_srcdir)/Makefile.include
+ASSEMBLY = FSpot.Exporters.PicasaWeb
+TARGET = library
+LINK = $(REF_FSPOT_EXTENSION_PICASAWEBEXPORT)
+INSTALL_DIR = $(EXTENSIONS_INSTALL_DIR)
-PLUGIN_NAME = PicasaWebExport
+SOURCES = PicasaWebExport.cs
-PLUGIN_MANIFEST = $(PLUGIN_NAME).addin.xml
+RESOURCES = \
+ PicasaWebExport.addin.xml \
+ PicasaWebExport.glade
-PLUGIN_ASSEMBLY = $(PLUGIN_NAME).dll
-
-PLUGIN_SOURCES = \
- $(srcdir)/PicasaWebExport.cs
-
-REFS = \
- -r:$(top_builddir)/src/f-spot.exe \
- -r:$(top_builddir)/src/FSpot.Core.dll \
- -r:$(top_builddir)/src/FSpot.Utils.dll \
- $(LINK_SEMWEB) \
- -r:google-sharp/Mono.Google.dll \
- $(LINK_KEYRING) \
- $(LINK_GIOSHARP) \
- $(LINK_GPHOTO2) \
- $(LINK_UNIQUESHARP) \
- -r:System.Web \
- -r:Mono.Posix
-
-PKGS = \
- $(LINK_GTKSHARPBEANS) \
- -pkg:gtk-sharp-2.0 \
- -pkg:glade-sharp-2.0
-
-SUBDIRS = \
+SUBDIRS = \
google-sharp
-RESOURCES = \
- -resource:$(srcdir)/$(PLUGIN_MANIFEST) \
- -resource:$(srcdir)/$(PLUGIN_NAME).glade
-
-mpack: $(PLUGIN_ASSEMBLY)
- mautil p $(PLUGIN_ASSEMBLY)
-
-$(PLUGIN_ASSEMBLY): $(PLUGIN_SOURCES) $(PLUGIN_MANIFEST)
- $(CSC_LIB) -out:$@ $(PLUGIN_SOURCES) $(REFS) $(PKGS) $(ASSEMBLIES) $(RESOURCES)
-
-plugindir = $(pkglibdir)/extensions
-
-install-data-hook:
- if [ -w $(DESTDIR)$(plugindir)/$(PLUGIN_NAME).addin.xml ] ; then rm -f $(DESTDIR)$(plugindir)/$(PLUGIN_NAME).addin.xml; fi
-
-plugin_DATA = \
- $(PLUGIN_ASSEMBLY)
-
-EXTRA_DIST = \
- $(PLUGIN_SOURCES) \
- $(PLUGIN_MANIFEST) \
- $(PLUGIN_NAME).glade
-
-CLEANFILES = \
- $(PLUGIN_ASSEMBLY) \
- $(PLUGIN_ASSEMBLY).mdb \
- *.mpack
+include $(top_srcdir)/build/build.mk
diff --git a/extensions/Exporters/PicasaWebExport/Makefile.in b/extensions/Exporters/PicasaWebExport/Makefile.in
index ae17d2a..0d8d1cc 100644
--- a/extensions/Exporters/PicasaWebExport/Makefile.in
+++ b/extensions/Exporters/PicasaWebExport/Makefile.in
@@ -35,13 +35,22 @@ POST_UNINSTALL = :
build_triplet = @build@
host_triplet = @host@
DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in \
- $(top_srcdir)/Makefile.include
+ $(top_srcdir)/build/build.environment.mk \
+ $(top_srcdir)/build/build.mk \
+ $(top_srcdir)/build/build.rules.mk
+ at ENABLE_TESTS_TRUE@am__append_1 = " $(NUNIT_LIBS)"
subdir = extensions/Exporters/PicasaWebExport
ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
am__aclocal_m4_deps = $(top_srcdir)/build/m4/shave/shave.m4 \
$(top_srcdir)/build/m4/shamrock/expansions.m4 \
+ $(top_srcdir)/build/m4/shamrock/gnome-doc.m4 \
$(top_srcdir)/build/m4/shamrock/mono.m4 \
+ $(top_srcdir)/build/m4/shamrock/nunit.m4 \
$(top_srcdir)/build/m4/shamrock/programs.m4 \
+ $(top_srcdir)/build/m4/f-spot/flickrnet.m4 \
+ $(top_srcdir)/build/m4/f-spot/gnome-keyring-sharp.m4 \
+ $(top_srcdir)/build/m4/f-spot/gtk-sharp.m4 \
+ $(top_srcdir)/build/m4/f-spot/mono-addins.m4 \
$(top_srcdir)/acinclude.m4 $(top_srcdir)/configure.ac
am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
$(ACLOCAL_M4)
@@ -49,15 +58,6 @@ mkinstalldirs = $(install_sh) -d
CONFIG_HEADER = $(top_builddir)/config.h
CONFIG_CLEAN_FILES =
CONFIG_CLEAN_VPATH_FILES =
-SOURCES =
-DIST_SOURCES =
-RECURSIVE_TARGETS = all-recursive check-recursive dvi-recursive \
- html-recursive info-recursive install-data-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
am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`;
am__vpath_adj = case $$p in \
$(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \
@@ -79,8 +79,16 @@ am__nobase_list = $(am__nobase_strip_setup); \
am__base_list = \
sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \
sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g'
-am__installdirs = "$(DESTDIR)$(plugindir)"
-DATA = $(plugin_DATA)
+am__installdirs = "$(DESTDIR)$(moduledir)"
+SCRIPTS = $(module_SCRIPTS)
+DIST_SOURCES =
+RECURSIVE_TARGETS = all-recursive check-recursive dvi-recursive \
+ html-recursive info-recursive install-data-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
AM_RECURSIVE_TARGETS = $(RECURSIVE_TARGETS:-recursive=) \
@@ -159,6 +167,8 @@ EXIF_SOVERSION = @EXIF_SOVERSION@
F77 = @F77@
FC = @FC@
FGREP = @FGREP@
+FLICKRNET_CFLAGS = @FLICKRNET_CFLAGS@
+FLICKRNET_LIBS = @FLICKRNET_LIBS@
F_CFLAGS = @F_CFLAGS@
F_LIBS = @F_LIBS@
GAPI2CODEGEN = @GAPI2CODEGEN@
@@ -172,6 +182,8 @@ GCONF_SHARP_LIBS = @GCONF_SHARP_LIBS@
GETTEXT_PACKAGE = @GETTEXT_PACKAGE@
GIO_CFLAGS = @GIO_CFLAGS@
GIO_LIBS = @GIO_LIBS@
+GLIBSHARP_2_12_7_CFLAGS = @GLIBSHARP_2_12_7_CFLAGS@
+GLIBSHARP_2_12_7_LIBS = @GLIBSHARP_2_12_7_LIBS@
GLIBSHARP_CFLAGS = @GLIBSHARP_CFLAGS@
GLIBSHARP_LIBS = @GLIBSHARP_LIBS@
GLIB_CFLAGS = @GLIB_CFLAGS@
@@ -187,6 +199,10 @@ GNOME_SHARP_CFLAGS = @GNOME_SHARP_CFLAGS@
GNOME_SHARP_LIBS = @GNOME_SHARP_LIBS@
GOBJECT_QUERY = @GOBJECT_QUERY@
GREP = @GREP@
+GTKSHARP_A11Y_CFLAGS = @GTKSHARP_A11Y_CFLAGS@
+GTKSHARP_A11Y_LIBS = @GTKSHARP_A11Y_LIBS@
+GTKSHARP_CFLAGS = @GTKSHARP_CFLAGS@
+GTKSHARP_LIBS = @GTKSHARP_LIBS@
HELP_DIR = @HELP_DIR@
ICONS_DIRECTORY = @ICONS_DIRECTORY@
INSTALL = @INSTALL@
@@ -200,14 +216,14 @@ INTLTOOL_EXTRACT = @INTLTOOL_EXTRACT@
INTLTOOL_MERGE = @INTLTOOL_MERGE@
INTLTOOL_PERL = @INTLTOOL_PERL@
INTLTOOL_UPDATE = @INTLTOOL_UPDATE@
+KEYRINGSHARP_CFLAGS = @KEYRINGSHARP_CFLAGS@
+KEYRINGSHARP_LIBS = @KEYRINGSHARP_LIBS@
LCMS_CFLAGS = @LCMS_CFLAGS@
LCMS_LIBS = @LCMS_LIBS@
LD = @LD@
LDFLAGS = @LDFLAGS@
LIBEXIF_VERSION_CHECK_CFLAGS = @LIBEXIF_VERSION_CHECK_CFLAGS@
LIBEXIF_VERSION_CHECK_LIBS = @LIBEXIF_VERSION_CHECK_LIBS@
-LIBGPHOTO2_CFLAGS = @LIBGPHOTO2_CFLAGS@
-LIBGPHOTO2_LIBS = @LIBGPHOTO2_LIBS@
LIBJPEG = @LIBJPEG@
LIBOBJS = @LIBOBJS@
LIBS = @LIBS@
@@ -222,6 +238,12 @@ MCS = @MCS@
MKDIR_P = @MKDIR_P@
MKINSTALLDIRS = @MKINSTALLDIRS@
MONO = @MONO@
+MONO_ADDINS_CFLAGS = @MONO_ADDINS_CFLAGS@
+MONO_ADDINS_GUI_CFLAGS = @MONO_ADDINS_GUI_CFLAGS@
+MONO_ADDINS_GUI_LIBS = @MONO_ADDINS_GUI_LIBS@
+MONO_ADDINS_LIBS = @MONO_ADDINS_LIBS@
+MONO_ADDINS_SETUP_CFLAGS = @MONO_ADDINS_SETUP_CFLAGS@
+MONO_ADDINS_SETUP_LIBS = @MONO_ADDINS_SETUP_LIBS@
MONO_MODULE_CFLAGS = @MONO_MODULE_CFLAGS@
MONO_MODULE_LIBS = @MONO_MODULE_LIBS@
MSGFMT = @MSGFMT@
@@ -232,7 +254,6 @@ NDESK_DBUS_LIBS = @NDESK_DBUS_LIBS@
NM = @NM@
NMEDIT = @NMEDIT@
NUNIT_CFLAGS = @NUNIT_CFLAGS@
-NUNIT_DEFINES = @NUNIT_DEFINES@
NUNIT_LIBS = @NUNIT_LIBS@
OBJC = @OBJC@
OBJDUMP = @OBJDUMP@
@@ -324,78 +345,233 @@ target_alias = @target_alias@
top_build_prefix = @top_build_prefix@
top_builddir = @top_builddir@
top_srcdir = @top_srcdir@
+ASSEMBLY = FSpot.Exporters.PicasaWeb
+TARGET = library
+LINK = $(REF_FSPOT_EXTENSION_PICASAWEBEXPORT) $(am__append_1)
+INSTALL_DIR = $(EXTENSIONS_INSTALL_DIR)
+SOURCES = PicasaWebExport.cs
+RESOURCES = \
+ PicasaWebExport.addin.xml \
+ PicasaWebExport.glade
+
+SUBDIRS = \
+ google-sharp
+
+
+# Initializers
+MONO_BASE_PATH =
+MONO_ADDINS_PATH =
+
+# Install Paths
+DEFAULT_INSTALL_DIR = $(pkglibdir)
+BACKENDS_INSTALL_DIR = $(DEFAULT_INSTALL_DIR)/Backends
+EXTENSIONS_INSTALL_DIR = $(DEFAULT_INSTALL_DIR)/Extensions
DIR_DOCS = $(top_builddir)/docs
DIR_EXTENSIONS = $(top_builddir)/extensions
-DIR_GPHOTO2 = $(top_builddir)/lib/libgphoto2-sharp
DIR_ICONS = $(top_builddir)/icons
DIR_JPEGTRAN = $(top_builddir)/lib/libjpegtran
-DIR_KEYRING = $(top_builddir)/lib/gnome-keyring-sharp
DIR_LIBFSPOT = $(top_builddir)/lib/libfspot
DIR_SEMWEB = $(top_builddir)/lib/semweb
DIR_SRC = $(top_builddir)/src
DIR_GIOSHARP = $(top_builddir)/lib/gio-sharp/gio
DIR_GTKSHARPBEANS = $(top_builddir)/lib/gtk-sharp-beans
DIR_UNIQUESHARP = $(top_builddir)/lib/unique-sharp/unique
-LINK_KEYRING = -r:$(DIR_KEYRING)/gnome-keyring-sharp.dll
-LINK_GPHOTO2 = -r:$(DIR_GPHOTO2)/libgphoto2-sharp.dll
-LINK_SEMWEB = -r:$(DIR_SEMWEB)/SemWeb.dll
-LINK_GIOSHARP = -r:$(DIR_GIOSHARP)/gio-sharp.dll
-LINK_GTKSHARPBEANS = -r:$(DIR_GTKSHARPBEANS)/gtk-sharp-beans.dll
-LINK_UNIQUESHARP = -r:$(DIR_UNIQUESHARP)/unique-sharp.dll
-CSC_FLAGS = -debug
-CSC = $(MCS) $(CSC_FLAGS) -target:exe
-CSC_LIB = $(MCS) $(CSC_FLAGS) -target:library
-MONO_DEBUGFLAGS = --debug
-RUNTIME = mono $(MONO_DEBUGFLAGS)
-PLUGIN_NAME = PicasaWebExport
-PLUGIN_MANIFEST = $(PLUGIN_NAME).addin.xml
-PLUGIN_ASSEMBLY = $(PLUGIN_NAME).dll
-PLUGIN_SOURCES = \
- $(srcdir)/PicasaWebExport.cs
-
-REFS = \
- -r:$(top_builddir)/src/f-spot.exe \
- -r:$(top_builddir)/src/FSpot.Core.dll \
- -r:$(top_builddir)/src/FSpot.Utils.dll \
- $(LINK_SEMWEB) \
- -r:google-sharp/Mono.Google.dll \
- $(LINK_KEYRING) \
- $(LINK_GIOSHARP) \
- $(LINK_GPHOTO2) \
- $(LINK_UNIQUESHARP) \
- -r:System.Web \
- -r:Mono.Posix
-
-PKGS = \
- $(LINK_GTKSHARPBEANS) \
- -pkg:gtk-sharp-2.0 \
- -pkg:glade-sharp-2.0
-
-SUBDIRS = \
- google-sharp
-
-RESOURCES = \
- -resource:$(srcdir)/$(PLUGIN_MANIFEST) \
- -resource:$(srcdir)/$(PLUGIN_NAME).glade
-
-plugindir = $(pkglibdir)/extensions
-plugin_DATA = \
- $(PLUGIN_ASSEMBLY)
-
-EXTRA_DIST = \
- $(PLUGIN_SOURCES) \
- $(PLUGIN_MANIFEST) \
- $(PLUGIN_NAME).glade
-
-CLEANFILES = \
- $(PLUGIN_ASSEMBLY) \
- $(PLUGIN_ASSEMBLY).mdb \
- *.mpack
-
+DIR_BIN = $(top_builddir)/bin
+
+# External libraries to link against, generated from configure
+LINK_SYSTEM = -r:System
+LINK_SYSTEMDATA = -r:System.Data
+LINK_SYSTEM_WEB = -r:System.Web
+LINK_MONO_POSIX = -r:Mono.Posix
+LINK_MONO_CAIRO = -r:Mono.Cairo
+LINK_MONO_SIMD = -r:Mono.Simd
+LINK_MONODATA = -r:Mono.Data
+LINK_MONO_DATA_SQLITECLIENT = -r:Mono.Data.SqliteClient
+LINK_ICSHARP_ZIP_LIB = -r:ICSharpCode.SharpZipLib
+LINK_KEYRING = $(KEYRINGSHARP_LIBS)
+LINK_GLIB = $(GLIBSHARP_LIBS)
+LINK_GTK = $(GTKSHARP_LIBS)
+LINK_GNOME = $(GNOME_SHARP_LIBS)
+LINK_GCONF = $(GCONF_SHARP_LIBS)
+LINK_GLADE = -pkg:glade-sharp-2.0
+LINK_FLICKRNET = -pkg:flickrnet
+LINK_DBUS = $(NDESK_DBUS_LIBS) $(NDESK_DBUS_GLIB_LIBS)
+LINK_DBUS_NO_GLIB = $(NDESK_DBUS_LIBS)
+LINK_MONO_ADDINS_DEPS = $(MONO_ADDINS_LIBS)
+LINK_MONO_ADDINS_SETUP_DEPS = $(MONO_ADDINS_SETUP_LIBS)
+LINK_MONO_ADDINS_GUI_DEPS = $(MONO_ADDINS_GUI_LIBS)
+
+# GIO
+REF_GIO =
+LINK_GIO = -r:$(DIR_GIOSHARP)/gio-sharp.dll
+LINK_GIO_DEPS = $(REF_GIO) $(LINK_GIO)
+
+# Gtk Beans
+REF_GTK_BEANS = $(LINK_GIO_DEPS)
+LINK_GTK_BEANS = -r:$(DIR_GTKSHARPBEANS)/gtk-sharp-beans.dll
+LINK_GTK_BEANS_DEPS = $(REF_GTK_BEANS) $(LINK_GTK_BEANS)
+
+# Uniqe
+REF_UNIQUE =
+LINK_UNIQUE = -r:$(DIR_UNIQUESHARP)/unique-sharp.dll
+LINK_UNIQUE_DEPS = $(REF_UNIQUE) $(LINK_UNIQUE)
+
+# Hyena
+REF_HYENA = $(LINK_SYSTEM) $(LINK_MONO_POSIX)
+LINK_HYENA = -r:$(DIR_BIN)/Hyena.dll
+LINK_HYENA_DEPS = $(REF_HYENA) $(LINK_HYENA)
+
+# Semweb
+REF_SEMWEB = $(LINK_SYSTEMDATA) $(LINK_HYENA_DEPS)
+LINK_SEMWEB = -r:$(DIR_BIN)/SemWeb.dll
+LINK_SEMWEB_DEPS = $(REF_SEMWEB) $(LINK_SEMWEB)
+
+# Hyena.Data.Sqlite
+REF_HYENA_DATA_SQLITE = $(LINK_SQLITE)
+LINK_HYENA_DATA_SQLITE = -r:$(DIR_BIN)/Hyena.Data.Sqlite.dll
+LINK_HYENA_DATA_SQLITE_DEPS = $(REF_HYENA_DATA_SQLITE) $(LINK_HYENA_DATA_SQLITE)
+
+# Hyena.Gui
+REF_HYENA_GUI = $(LINK_HYENA_DEPS)
+LINK_HYENA_GUI = -r:$(DIR_BIN)/Hyena.Gui.dll
+LINK_HENA_GUI_DEPS = $(REF_HYENA_GUI) $(LINK_HYENA_GUI)
+
+# FSpot.Cms
+REF_FSPOT_CMS = $(LINK_GTK)
+LINK_FSPOT_CMS = -r:$(DIR_BIN)/FSpot.Cms.dll
+LINK_FSPOT_CMS_DEPS = $(REF_FSPOT_CMS) $(LINK_FSPOT_CMS)
+
+# FSpot.Utils
+REF_FSPOT_UTILS = $(LINK_HYENA_DEPS) $(LINK_GTK) $(LINK_GIO) $(LINK_MONO_CAIRO)
+LINK_FSPOT_UTILS = -r:$(DIR_BIN)/FSpot.Utils.dll
+LINK_FSPOT_UTILS_DEPS = $(REF_FSPOT_UTILS) $(LINK_FSPOT_UTILS)
+
+# FSpot.Core
+REF_FSPOT_CORE = $(LINK_FSPOT_UTILS_DEPS) $(LINK_FSPOT_CMS_DEPS)
+LINK_FSPOT_CORE = -r:$(DIR_BIN)/FSpot.Core.dll
+LINK_FSPOT_CORE_DEPS = $(REF_FSPOT_CORE) $(LINK_FSPOT_CORE)
+
+# FSpot.Query
+REF_FSPOT_QUERY = $(LINK_FSPOT_CORE_DEPS)
+LINK_FSPOT_QUERY = -r:$(DIR_BIN)/FSpot.Query.dll
+LINK_FSPOT_QUERY_DEPS = $(REF_FSPOT_QUERY) $(LINK_FSPOT_QUERY)
+
+# FSpot.JobScheduler
+REF_FSPOT_JOB_SCHEDULER = $(LINK_HYENA_DEPS)
+LINK_FSPOT_JOB_SCHEDULER = -r:$(DIR_BIN)/FSpot.JobScheduler.dll
+LINK_FSPOT_JOB_SCHEDULER_DEPS = $(REF_FSPOT_JOB_SCHEDULER) $(LINK_FSPOT_JOB_SCHEDULER)
+
+# FSpot.Bling
+REF_FSPOT_BLING = $(LINK_GTK_BEANS_DEPS) $(LINK_GLIB)
+LINK_FSPOT_BLING = -r:$(DIR_BIN)/FSpot.Bling.dll
+LINK_FSPOT_BLING_DEPS = $(REF_FSPOT_BLING) $(LINK_FSPOT_BLING)
+
+# FSpot.Platform
+REF_FSPOT_PLATFORM = $(LINK_GCONF) $(LINK_GTK) $(LINK_FSPOT_CORE_DEPS) $(LINK_DBUS)
+LINK_FSPOT_PLATFORM = -r:$(DIR_BIN)/FSpot.Platform.dll
+LINK_FSPOT_PLATFORM_DEPS = $(REF_FSPOT_PLATFORM) $(LINK_FSPOT_PLATFORM)
+
+# FSpot.Widgets
+REF_FSPOT_WIDGETS = $(LINK_FSPOT_CORE_DEPS) $(LINK_FSPOT_BLING_DEPS)
+LINK_FSPOT_WIDGETS = -r:$(DIR_BIN)/FSpot.Widgets.dll
+LINK_FSPOT_WIDGETS_DEPS = $(REF_FSPOT_WIDGETS) $(LINK_FSPOT_WIDGETS)
+
+# FSpot (executable)
+REF_FSPOT = $(LINK_FSPOT_WIDGETS_DEPS) $(LINK_FSPOT_PLATFORM_DEPS) $(LINK_FSPOT_QUERY_DEPS) \
+ $(LINK_GLIB) $(LINK_MONO_ADDINS_DEPS) $(LINK_UNIQUE_DEPS) $(LINK_MONO_ADDINS_SETUP_DEPS) \
+ $(LINK_SEMWEB_DEPS) $(LINK_GLADE) $(LINK_MONODATA) $(LINK_MONO_DATA_SQLITECLIENT) \
+ $(LINK_MONO_ADDINS_GUI_DEPS) $(LINK_FSPOT_JOB_SCHEDULER_DEPS) $(LINK_ICSHARP_ZIP_LIB) \
+ $(LINK_GNOME)
+
+# FIXME: do not link executables
+LINK_FSPOT = -r:$(DIR_BIN)/f-spot.exe
+LINK_FSPOT_DEPS = $(REF_FSPOT) $(LINK_FSPOT)
+
+# Extensions
+REF_FSPOT_EXTENSION_BLACKOUTEDITOR = $(LINK_FSPOT_DEPS)
+REF_FSPOT_EXTENSION_BWEDITOR = $(LINK_FSPOT_DEPS) $(LINK_MONO_SIMD)
+REF_FSPOT_EXTENSION_FLIPEDITOR = $(LINK_FSPOT_DEPS)
+REF_FSPOT_EXTENSION_PIXELATEEDITOR = $(LINK_FSPOT_DEPS)
+REF_FSPOT_EXTENSION_RESIZEEDITOR = $(LINK_FSPOT_DEPS)
+REF_FSPOT_EXTENSION_CDEXPORT = $(LINK_FSPOT_DEPS)
+REF_FSPOT_EXTENSION_FACEBOOKEXPORT = $(LINK_FSPOT_DEPS) $(LINK_KEYRING)
+REF_FSPOT_EXTENSION_FLICKREXPORT = $(LINK_FSPOT_DEPS) $(LINK_FLICKRNET)
+REF_FSPOT_EXTENSION_FOLDEREXPORT = $(LINK_FSPOT_DEPS) $(LINK_SYSTEM_WEB)
+REF_FSPOT_EXTENSION_GALLERYEXPORT = $(LINK_FSPOT_DEPS)
+REF_MONO_GOOGLE = $(LINK_HYENA_DEPS)
+LINK_MONO_GOOGLE = -r:$(DIR_BIN)/Mono.Google.dll
+LINK_MONO_GOOGLE_DEPS = $(REF_MONO_GOOGLE) $(LINK_MONO_GOOGLE)
+REF_FSPOT_EXTENSION_PICASAWEBEXPORT = $(LINK_FSPOT_DEPS) $(LINK_MONO_GOOGLE) $(LINK_KEYRING)
+REF_SMUGMUGNET = $(LINK_FSPOT_DEPS)
+LINK_SMUGMUGNET = -r:$(DIR_BIN)/SmugMugNet.dll
+LINK_SMUGMUGNET_DEPS = $(REF_SMUGMUGNET) $(LINK_SMUGMUGNET)
+REF_FSPOT_EXTENSION_SMUGMUGEXPORT = $(LINK_SMUGMUGNET_DEPS) $(LINK_KEYRING)
+REF_MONO_TABBLO = $(LINK_HYENA_DEPS)
+LINK_MONO_TABBLO = -r:$(DIR_BIN)/Mono.Tabblo.dll
+LINK_MONO_TABBLO_DEPS = $(REF_MONO_TABBLO) $(LINK_MONO_TABBLO)
+REF_FSPOT_EXTENSION_TABBLOEXPORT = $(LINK_FSPOT_DEPS) $(LINK_KEYRING) $(LINK_MONO_TABBLO_DEPS)
+REF_FSPOT_EXTENSION_ZIPEXPORT = $(LINK_FSPOT_DEPS)
+REF_FSPOT_EXTENSION_CHANGEPHOTOPATH = $(LINK_FSPOT_DEPS)
+REF_FSPOT_EXTENSION_DEVELOPINUFRAW = $(LINK_FSPOT_DEPS)
+REF_FSPOT_EXTENSION_HASHJOB = $(LINK_FSPOT_DEPS)
+REF_FSPOT_EXTENSION_LIVEWEBGALLERY = $(LINK_FSPOT_DEPS)
+REF_FSPOT_EXTENSION_MERGEDB = $(LINK_FSPOT_DEPS)
+REF_FSPOT_EXTENSION_RAWPLUSJPEG = $(LINK_FSPOT_DEPS)
+REF_FSPOT_EXTENSION_RETROACTIVEROLL = $(LINK_FSPOT_DEPS)
+REF_FSPOT_EXTENSION_SCREENSAVERCONFIG = $(LINK_FSPOT_DEPS)
+REF_FSPOT_EXTENSION_COVERTRANSITION = $(LINK_FSPOT_DEPS)
+
+# Cute hack to replace a space with something
+colon := :
+empty :=
+space := $(empty) $(empty)
+
+# Build path to allow running uninstalled
+RUN_PATH = $(subst $(space),$(colon), $(MONO_BASE_PATH))
+UNIQUE_FILTER_PIPE = tr [:space:] \\n | sort | uniq
+BUILD_DATA_DIR = $(top_builddir)/bin/share/$(PACKAGE)
+
+# Since all other attempts failed, we currently go this way:
+# This code adds the file specified in ASSEMBLY_INFO_SOURCE to SOURCES_BUILD.
+# If no such file is specified, the default AssemblyInfo.cs is used.
+ASSEMBLY_INFO_SOURCE_REAL = \
+ $(shell if [ "$(ASSEMBLY_INFO_SOURCE)" ]; \
+ then \
+ echo "$(addprefix $(srcdir)/, $(ASSEMBLY_INFO_SOURCE))"; \
+ else \
+ echo "$(top_srcdir)/src/AssemblyInfo.cs"; \
+ fi)
+
+SOURCES_BUILD = $(addprefix $(srcdir)/, $(SOURCES)) \
+ $(ASSEMBLY_INFO_SOURCE_REAL)
+RESOURCES_EXPANDED = $(addprefix $(srcdir)/, $(RESOURCES))
+RESOURCES_BUILD = $(foreach resource, $(RESOURCES_EXPANDED), \
+ -resource:$(resource),$(notdir $(resource)))
+
+INSTALL_ICONS = $(top_srcdir)/build/private-icon-theme-installer "$(mkinstalldirs)" "$(INSTALL_DATA)"
+THEME_ICONS_SOURCE = $(wildcard $(srcdir)/ThemeIcons/*/*/*.png) $(wildcard $(srcdir)/ThemeIcons/scalable/*/*.svg)
+THEME_ICONS_RELATIVE = $(subst $(srcdir)/ThemeIcons/, , $(THEME_ICONS_SOURCE))
+ASSEMBLY_EXTENSION = $(strip $(patsubst library, dll, $(TARGET)))
+ASSEMBLY_FILE = $(top_builddir)/bin/$(ASSEMBLY).$(ASSEMBLY_EXTENSION)
+INSTALL_DIR_RESOLVED = $(firstword $(subst , $(DEFAULT_INSTALL_DIR), $(INSTALL_DIR)))
+ at ENABLE_TESTS_TRUE@ENABLE_TESTS_FLAG = "-define:ENABLE_TESTS"
+ at ENABLE_ATK_TRUE@ENABLE_ATK_FLAG = "-define:ENABLE_ATK"
+FILTERED_LINK = $(shell echo "$(LINK)" | $(UNIQUE_FILTER_PIPE))
+DEP_LINK = $(shell echo "$(LINK)" | $(UNIQUE_FILTER_PIPE) | sed s,-r:,,g | grep '$(top_builddir)/bin/')
+OUTPUT_FILES = \
+ $(ASSEMBLY_FILE) \
+ $(ASSEMBLY_FILE).mdb
+
+moduledir = $(INSTALL_DIR_RESOLVED)
+module_SCRIPTS = $(OUTPUT_FILES)
+EXTRA_DIST = $(SOURCES_BUILD) $(RESOURCES_EXPANDED) $(THEME_ICONS_SOURCE)
+CLEANFILES = $(OUTPUT_FILES) $(ASSEMBLY_FILE).config
+DISTCLEANFILES = *.pidb
+MAINTAINERCLEANFILES = Makefile.in
all: all-recursive
.SUFFIXES:
-$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(top_srcdir)/Makefile.include $(am__configure_deps)
+$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(top_srcdir)/build/build.mk $(top_srcdir)/build/build.environment.mk $(top_srcdir)/build/build.rules.mk $(am__configure_deps)
@for dep in $?; do \
case '$(am__configure_deps)' in \
*$$dep*) \
@@ -425,32 +601,46 @@ $(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps)
$(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps)
cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
$(am__aclocal_m4_deps):
+install-moduleSCRIPTS: $(module_SCRIPTS)
+ @$(NORMAL_INSTALL)
+ test -z "$(moduledir)" || $(MKDIR_P) "$(DESTDIR)$(moduledir)"
+ @list='$(module_SCRIPTS)'; test -n "$(moduledir)" || list=; \
+ for p in $$list; do \
+ if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \
+ if test -f "$$d$$p"; then echo "$$d$$p"; echo "$$p"; else :; fi; \
+ done | \
+ sed -e 'p;s,.*/,,;n' \
+ -e 'h;s|.*|.|' \
+ -e 'p;x;s,.*/,,;$(transform)' | sed 'N;N;N;s,\n, ,g' | \
+ $(AWK) 'BEGIN { files["."] = ""; dirs["."] = 1; } \
+ { d=$$3; if (dirs[d] != 1) { print "d", d; dirs[d] = 1 } \
+ if ($$2 == $$4) { files[d] = files[d] " " $$1; \
+ if (++n[d] == $(am__install_max)) { \
+ print "f", d, files[d]; n[d] = 0; files[d] = "" } } \
+ else { print "f", d "/" $$4, $$1 } } \
+ END { for (d in files) print "f", d, files[d] }' | \
+ while read type dir files; do \
+ if test "$$dir" = .; then dir=; else dir=/$$dir; fi; \
+ test -z "$$files" || { \
+ echo " $(INSTALL_SCRIPT) $$files '$(DESTDIR)$(moduledir)$$dir'"; \
+ $(INSTALL_SCRIPT) $$files "$(DESTDIR)$(moduledir)$$dir" || exit $$?; \
+ } \
+ ; done
+
+uninstall-moduleSCRIPTS:
+ @$(NORMAL_UNINSTALL)
+ @list='$(module_SCRIPTS)'; test -n "$(moduledir)" || exit 0; \
+ files=`for p in $$list; do echo "$$p"; done | \
+ sed -e 's,.*/,,;$(transform)'`; \
+ test -n "$$list" || exit 0; \
+ echo " ( cd '$(DESTDIR)$(moduledir)' && rm -f" $$files ")"; \
+ cd "$(DESTDIR)$(moduledir)" && rm -f $$files
mostlyclean-libtool:
-rm -f *.lo
clean-libtool:
-rm -rf .libs _libs
-install-pluginDATA: $(plugin_DATA)
- @$(NORMAL_INSTALL)
- test -z "$(plugindir)" || $(MKDIR_P) "$(DESTDIR)$(plugindir)"
- @list='$(plugin_DATA)'; test -n "$(plugindir)" || list=; \
- for p in $$list; do \
- if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \
- echo "$$d$$p"; \
- done | $(am__base_list) | \
- while read files; do \
- echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(plugindir)'"; \
- $(INSTALL_DATA) $$files "$(DESTDIR)$(plugindir)" || exit $$?; \
- done
-
-uninstall-pluginDATA:
- @$(NORMAL_UNINSTALL)
- @list='$(plugin_DATA)'; test -n "$(plugindir)" || list=; \
- files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \
- test -n "$$files" || exit 0; \
- echo " ( cd '$(DESTDIR)$(plugindir)' && rm -f" $$files ")"; \
- cd "$(DESTDIR)$(plugindir)" && rm -f $$files
# This directory's subdirectories are mostly independent; you can cd
# into them and run `make' without going through this Makefile.
@@ -647,10 +837,10 @@ distdir: $(DISTFILES)
done
check-am: all-am
check: check-recursive
-all-am: Makefile $(DATA)
+all-am: Makefile $(SCRIPTS)
installdirs: installdirs-recursive
installdirs-am:
- for dir in "$(DESTDIR)$(plugindir)"; do \
+ for dir in "$(DESTDIR)$(moduledir)"; do \
test -z "$$dir" || $(MKDIR_P) "$$dir"; \
done
install: install-recursive
@@ -675,10 +865,12 @@ clean-generic:
distclean-generic:
-test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
-test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES)
+ -test -z "$(DISTCLEANFILES)" || rm -f $(DISTCLEANFILES)
maintainer-clean-generic:
@echo "This command is intended for maintainers to use"
@echo "it deletes files that may require special tools to rebuild."
+ -test -z "$(MAINTAINERCLEANFILES)" || rm -f $(MAINTAINERCLEANFILES)
clean: clean-recursive
clean-am: clean-generic clean-libtool mostlyclean-am
@@ -699,9 +891,8 @@ info: info-recursive
info-am:
-install-data-am: install-pluginDATA
- @$(NORMAL_INSTALL)
- $(MAKE) $(AM_MAKEFLAGS) install-data-hook
+install-data-am: install-data-local install-moduleSCRIPTS
+
install-dvi: install-dvi-recursive
install-dvi-am:
@@ -744,35 +935,75 @@ ps: ps-recursive
ps-am:
-uninstall-am: uninstall-pluginDATA
+uninstall-am: uninstall-local uninstall-moduleSCRIPTS
.MAKE: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) ctags-recursive \
- install-am install-data-am install-strip tags-recursive
+ install-am install-strip tags-recursive
.PHONY: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) CTAGS GTAGS \
all all-am check check-am clean clean-generic clean-libtool \
ctags ctags-recursive distclean 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-data-hook install-dvi install-dvi-am \
+ install-data-am install-data-local 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-pluginDATA install-ps install-ps-am \
+ install-info install-info-am install-man install-moduleSCRIPTS \
+ 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-generic mostlyclean-libtool pdf pdf-am \
ps ps-am tags tags-recursive uninstall uninstall-am \
- uninstall-pluginDATA
-
-
-mpack: $(PLUGIN_ASSEMBLY)
- mautil p $(PLUGIN_ASSEMBLY)
-
-$(PLUGIN_ASSEMBLY): $(PLUGIN_SOURCES) $(PLUGIN_MANIFEST)
- $(CSC_LIB) -out:$@ $(PLUGIN_SOURCES) $(REFS) $(PKGS) $(ASSEMBLIES) $(RESOURCES)
-
-install-data-hook:
- if [ -w $(DESTDIR)$(plugindir)/$(PLUGIN_NAME).addin.xml ] ; then rm -f $(DESTDIR)$(plugindir)/$(PLUGIN_NAME).addin.xml; fi
+ uninstall-local uninstall-moduleSCRIPTS
+
+
+all: $(ASSEMBLY_FILE) theme-icons
+
+run:
+ @pushd $(top_builddir); \
+ make run; \
+ popd;
+
+# uncommented for now.
+# tests are currently excuted from Makefile in $(top_builddir)
+#test:
+# @pushd $(top_builddir)/tests; \
+# make $(ASSEMBLY); \
+# popd;
+
+build-debug:
+ @echo $(DEP_LINK)
+
+$(ASSEMBLY_FILE).mdb: $(ASSEMBLY_FILE)
+
+$(ASSEMBLY_FILE): $(SOURCES_BUILD) $(RESOURCES_EXPANDED) $(DEP_LINK)
+ @mkdir -p $(top_builddir)/bin
+ @if [ ! "x$(ENABLE_RELEASE)" = "xyes" ]; then \
+ $(top_srcdir)/build/dll-map-makefile-verifier $(srcdir)/Makefile.am $(srcdir)/$(notdir $@.config) && \
+ $(MONO) $(top_builddir)/build/dll-map-verifier.exe $(srcdir)/$(notdir $@.config) -iwinmm -ilibbanshee -ilibbnpx11 -ilibc -ilibc.so.6 -iintl -ilibmtp.dll -ilibigemacintegration.dylib -iCFRelease $(SOURCES_BUILD); \
+ fi;
+ $(MCS) \
+ $(GMCS_FLAGS) \
+ $(ASSEMBLY_BUILD_FLAGS) \
+ -nowarn:0278 -nowarn:0078 $$warn \
+ -define:HAVE_GTK_2_10 -define:NET_2_0 \
+ -debug -target:$(TARGET) -out:$@ \
+ $(BUILD_DEFINES) $(ENABLE_TESTS_FLAG) $(ENABLE_ATK_FLAG) \
+ $(FILTERED_LINK) $(RESOURCES_BUILD) $(SOURCES_BUILD)
+ @if [ -e $(srcdir)/$(notdir $@.config) ]; then \
+ cp $(srcdir)/$(notdir $@.config) $(top_builddir)/bin; \
+ fi;
+ @if [ ! -z "$(EXTRA_BUNDLE)" ]; then \
+ cp $(EXTRA_BUNDLE) $(top_builddir)/bin; \
+ fi;
+
+theme-icons: $(THEME_ICONS_SOURCE)
+ @$(INSTALL_ICONS) -il "$(BUILD_DATA_DIR)" "$(srcdir)" $(THEME_ICONS_RELATIVE)
+
+install-data-local: $(THEME_ICONS_SOURCE)
+ @$(INSTALL_ICONS) -i "$(DESTDIR)$(pkgdatadir)" "$(srcdir)" $(THEME_ICONS_RELATIVE)
+
+uninstall-local: $(THEME_ICONS_SOURCE)
+ @$(INSTALL_ICONS) -u "$(DESTDIR)$(pkgdatadir)" "$(srcdir)" $(THEME_ICONS_RELATIVE)
# 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/extensions/Exporters/PicasaWebExport/PicasaWebExport.cs b/extensions/Exporters/PicasaWebExport/PicasaWebExport.cs
index 4c12a69..71f57a9 100644
--- a/extensions/Exporters/PicasaWebExport/PicasaWebExport.cs
+++ b/extensions/Exporters/PicasaWebExport/PicasaWebExport.cs
@@ -15,6 +15,7 @@ using System.Collections;
using System.Collections.Specialized;
using System.Web;
using Mono.Unix;
+using Hyena;
using FSpot;
using FSpot.Filters;
@@ -285,7 +286,7 @@ namespace FSpotGoogleExport {
if (show_captcha) {
try {
- using (ImageFile img = ImageFile.Create(new Uri(captcha_exception.CaptchaUrl))) {
+ using (ImageFile img = ImageFile.Create(new SafeUri(captcha_exception.CaptchaUrl, true))) {
captcha_image.Pixbuf = img.Load();
token = captcha_exception.Token;
}
@@ -662,7 +663,7 @@ namespace FSpotGoogleExport {
photo_index++;
PicasaPicture picture;
- using (FilterRequest request = new FilterRequest (item.DefaultVersionUri)) {
+ using (FilterRequest request = new FilterRequest (item.DefaultVersion.Uri)) {
filters.Convert (request);
file_info = new FileInfo (request.Current.LocalPath);
diff --git a/extensions/Exporters/PicasaWebExport/google-sharp/Makefile.am b/extensions/Exporters/PicasaWebExport/google-sharp/Makefile.am
index 4a3a72d..fd516d5 100644
--- a/extensions/Exporters/PicasaWebExport/google-sharp/Makefile.am
+++ b/extensions/Exporters/PicasaWebExport/google-sharp/Makefile.am
@@ -1,45 +1,31 @@
-include $(top_srcdir)/Makefile.include
-
-ASSEMBLY_NAME = Mono.Google
-
-ASSEMBLY_SOURCES = \
- $(srcdir)/AlbumAccess.cs \
- $(srcdir)/AssemblyInfo.cs \
- $(srcdir)/Authentication.cs \
- $(srcdir)/CaptchaException.cs \
- $(srcdir)/CreateAlbumException.cs \
- $(srcdir)/DeleteAlbumException.cs \
- $(srcdir)/GDataApi.cs \
- $(srcdir)/GoogleConnection.cs \
- $(srcdir)/GoogleService.cs \
- $(srcdir)/MultipartRequest.cs \
- $(srcdir)/NoCheckCertificatePolicy.cs \
- $(srcdir)/PicasaAlbum.cs \
- $(srcdir)/PicasaAlbumCollection.cs \
- $(srcdir)/PicasaPicture.cs \
- $(srcdir)/PicasaPictureCollection.cs \
- $(srcdir)/PicasaWeb.cs \
- $(srcdir)/UploadPictureException.cs \
- $(srcdir)/UploadProgressEventArgs.cs \
- $(srcdir)/UploadProgressEventHandler.cs \
- $(srcdir)/XmlUtil.cs
-
-REFS = -r:System.Web
-
-PKGS =
-
-ASSEMBLY = $(ASSEMBLY_NAME).dll
-
-all: $(ASSEMBLY)
-
-$(ASSEMBLY): $(ASSEMBLY_SOURCES)
- $(CSC_LIB) -out:$@ $(PKGS) $(REFS) $(ASSEMBLY_SOURCES)
-
-assemblydir = $(pkglibdir)
-assembly_DATA = $(ASSEMBLY)
-
-EXTRA_DIST = $(ASSEMBLY_SOURCES)
-
-CLEANFILES = \
- $(ASSEMBLY) \
- $(ASSEMBLY).mdb
+ASSEMBLY = Mono.Google
+TARGET = library
+LINK = $(REF_MONO_GOOGLE)
+INSTALL_DIR = $(EXTENSIONS_INSTALL_DIR)
+
+SOURCES = \
+ AlbumAccess.cs \
+ Authentication.cs \
+ CaptchaException.cs \
+ CreateAlbumException.cs\
+ DeleteAlbumException.cs \
+ GDataApi.cs \
+ GoogleConnection.cs \
+ GoogleService.cs \
+ MultipartRequest.cs \
+ NoCheckCertificatePolicy.cs \
+ PicasaAlbum.cs \
+ PicasaAlbumCollection.cs \
+ PicasaPicture.cs \
+ PicasaPictureCollection.cs \
+ PicasaWeb.cs \
+ UploadPictureException.cs \
+ UploadProgressEventArgs.cs \
+ UploadProgressEventHandler.cs \
+ XmlUtil.cs
+
+RESOURCES =
+
+ASSEMBLY_INFO_SOURCE = AssemblyInfo.cs
+
+include $(top_srcdir)/build/build.mk
diff --git a/extensions/Exporters/PicasaWebExport/google-sharp/Makefile.in b/extensions/Exporters/PicasaWebExport/google-sharp/Makefile.in
index d6ad0ee..3a51156 100644
--- a/extensions/Exporters/PicasaWebExport/google-sharp/Makefile.in
+++ b/extensions/Exporters/PicasaWebExport/google-sharp/Makefile.in
@@ -35,13 +35,22 @@ POST_UNINSTALL = :
build_triplet = @build@
host_triplet = @host@
DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in \
- $(top_srcdir)/Makefile.include
+ $(top_srcdir)/build/build.environment.mk \
+ $(top_srcdir)/build/build.mk \
+ $(top_srcdir)/build/build.rules.mk
+ at ENABLE_TESTS_TRUE@am__append_1 = " $(NUNIT_LIBS)"
subdir = extensions/Exporters/PicasaWebExport/google-sharp
ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
am__aclocal_m4_deps = $(top_srcdir)/build/m4/shave/shave.m4 \
$(top_srcdir)/build/m4/shamrock/expansions.m4 \
+ $(top_srcdir)/build/m4/shamrock/gnome-doc.m4 \
$(top_srcdir)/build/m4/shamrock/mono.m4 \
+ $(top_srcdir)/build/m4/shamrock/nunit.m4 \
$(top_srcdir)/build/m4/shamrock/programs.m4 \
+ $(top_srcdir)/build/m4/f-spot/flickrnet.m4 \
+ $(top_srcdir)/build/m4/f-spot/gnome-keyring-sharp.m4 \
+ $(top_srcdir)/build/m4/f-spot/gtk-sharp.m4 \
+ $(top_srcdir)/build/m4/f-spot/mono-addins.m4 \
$(top_srcdir)/acinclude.m4 $(top_srcdir)/configure.ac
am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
$(ACLOCAL_M4)
@@ -49,8 +58,6 @@ mkinstalldirs = $(install_sh) -d
CONFIG_HEADER = $(top_builddir)/config.h
CONFIG_CLEAN_FILES =
CONFIG_CLEAN_VPATH_FILES =
-SOURCES =
-DIST_SOURCES =
am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`;
am__vpath_adj = case $$p in \
$(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \
@@ -72,8 +79,9 @@ am__nobase_list = $(am__nobase_strip_setup); \
am__base_list = \
sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \
sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g'
-am__installdirs = "$(DESTDIR)$(assemblydir)"
-DATA = $(assembly_DATA)
+am__installdirs = "$(DESTDIR)$(moduledir)"
+SCRIPTS = $(module_SCRIPTS)
+DIST_SOURCES =
DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
ACLOCAL = @ACLOCAL@
ACLOCAL_AMFLAGS = @ACLOCAL_AMFLAGS@
@@ -119,6 +127,8 @@ EXIF_SOVERSION = @EXIF_SOVERSION@
F77 = @F77@
FC = @FC@
FGREP = @FGREP@
+FLICKRNET_CFLAGS = @FLICKRNET_CFLAGS@
+FLICKRNET_LIBS = @FLICKRNET_LIBS@
F_CFLAGS = @F_CFLAGS@
F_LIBS = @F_LIBS@
GAPI2CODEGEN = @GAPI2CODEGEN@
@@ -132,6 +142,8 @@ GCONF_SHARP_LIBS = @GCONF_SHARP_LIBS@
GETTEXT_PACKAGE = @GETTEXT_PACKAGE@
GIO_CFLAGS = @GIO_CFLAGS@
GIO_LIBS = @GIO_LIBS@
+GLIBSHARP_2_12_7_CFLAGS = @GLIBSHARP_2_12_7_CFLAGS@
+GLIBSHARP_2_12_7_LIBS = @GLIBSHARP_2_12_7_LIBS@
GLIBSHARP_CFLAGS = @GLIBSHARP_CFLAGS@
GLIBSHARP_LIBS = @GLIBSHARP_LIBS@
GLIB_CFLAGS = @GLIB_CFLAGS@
@@ -147,6 +159,10 @@ GNOME_SHARP_CFLAGS = @GNOME_SHARP_CFLAGS@
GNOME_SHARP_LIBS = @GNOME_SHARP_LIBS@
GOBJECT_QUERY = @GOBJECT_QUERY@
GREP = @GREP@
+GTKSHARP_A11Y_CFLAGS = @GTKSHARP_A11Y_CFLAGS@
+GTKSHARP_A11Y_LIBS = @GTKSHARP_A11Y_LIBS@
+GTKSHARP_CFLAGS = @GTKSHARP_CFLAGS@
+GTKSHARP_LIBS = @GTKSHARP_LIBS@
HELP_DIR = @HELP_DIR@
ICONS_DIRECTORY = @ICONS_DIRECTORY@
INSTALL = @INSTALL@
@@ -160,14 +176,14 @@ INTLTOOL_EXTRACT = @INTLTOOL_EXTRACT@
INTLTOOL_MERGE = @INTLTOOL_MERGE@
INTLTOOL_PERL = @INTLTOOL_PERL@
INTLTOOL_UPDATE = @INTLTOOL_UPDATE@
+KEYRINGSHARP_CFLAGS = @KEYRINGSHARP_CFLAGS@
+KEYRINGSHARP_LIBS = @KEYRINGSHARP_LIBS@
LCMS_CFLAGS = @LCMS_CFLAGS@
LCMS_LIBS = @LCMS_LIBS@
LD = @LD@
LDFLAGS = @LDFLAGS@
LIBEXIF_VERSION_CHECK_CFLAGS = @LIBEXIF_VERSION_CHECK_CFLAGS@
LIBEXIF_VERSION_CHECK_LIBS = @LIBEXIF_VERSION_CHECK_LIBS@
-LIBGPHOTO2_CFLAGS = @LIBGPHOTO2_CFLAGS@
-LIBGPHOTO2_LIBS = @LIBGPHOTO2_LIBS@
LIBJPEG = @LIBJPEG@
LIBOBJS = @LIBOBJS@
LIBS = @LIBS@
@@ -182,6 +198,12 @@ MCS = @MCS@
MKDIR_P = @MKDIR_P@
MKINSTALLDIRS = @MKINSTALLDIRS@
MONO = @MONO@
+MONO_ADDINS_CFLAGS = @MONO_ADDINS_CFLAGS@
+MONO_ADDINS_GUI_CFLAGS = @MONO_ADDINS_GUI_CFLAGS@
+MONO_ADDINS_GUI_LIBS = @MONO_ADDINS_GUI_LIBS@
+MONO_ADDINS_LIBS = @MONO_ADDINS_LIBS@
+MONO_ADDINS_SETUP_CFLAGS = @MONO_ADDINS_SETUP_CFLAGS@
+MONO_ADDINS_SETUP_LIBS = @MONO_ADDINS_SETUP_LIBS@
MONO_MODULE_CFLAGS = @MONO_MODULE_CFLAGS@
MONO_MODULE_LIBS = @MONO_MODULE_LIBS@
MSGFMT = @MSGFMT@
@@ -192,7 +214,6 @@ NDESK_DBUS_LIBS = @NDESK_DBUS_LIBS@
NM = @NM@
NMEDIT = @NMEDIT@
NUNIT_CFLAGS = @NUNIT_CFLAGS@
-NUNIT_DEFINES = @NUNIT_DEFINES@
NUNIT_LIBS = @NUNIT_LIBS@
OBJC = @OBJC@
OBJDUMP = @OBJDUMP@
@@ -284,66 +305,248 @@ target_alias = @target_alias@
top_build_prefix = @top_build_prefix@
top_builddir = @top_builddir@
top_srcdir = @top_srcdir@
+ASSEMBLY = Mono.Google
+TARGET = library
+LINK = $(REF_MONO_GOOGLE) $(am__append_1)
+INSTALL_DIR = $(EXTENSIONS_INSTALL_DIR)
+SOURCES = \
+ AlbumAccess.cs \
+ Authentication.cs \
+ CaptchaException.cs \
+ CreateAlbumException.cs\
+ DeleteAlbumException.cs \
+ GDataApi.cs \
+ GoogleConnection.cs \
+ GoogleService.cs \
+ MultipartRequest.cs \
+ NoCheckCertificatePolicy.cs \
+ PicasaAlbum.cs \
+ PicasaAlbumCollection.cs \
+ PicasaPicture.cs \
+ PicasaPictureCollection.cs \
+ PicasaWeb.cs \
+ UploadPictureException.cs \
+ UploadProgressEventArgs.cs \
+ UploadProgressEventHandler.cs \
+ XmlUtil.cs
+
+RESOURCES =
+ASSEMBLY_INFO_SOURCE = AssemblyInfo.cs
+
+# Initializers
+MONO_BASE_PATH =
+MONO_ADDINS_PATH =
+
+# Install Paths
+DEFAULT_INSTALL_DIR = $(pkglibdir)
+BACKENDS_INSTALL_DIR = $(DEFAULT_INSTALL_DIR)/Backends
+EXTENSIONS_INSTALL_DIR = $(DEFAULT_INSTALL_DIR)/Extensions
DIR_DOCS = $(top_builddir)/docs
DIR_EXTENSIONS = $(top_builddir)/extensions
-DIR_GPHOTO2 = $(top_builddir)/lib/libgphoto2-sharp
DIR_ICONS = $(top_builddir)/icons
DIR_JPEGTRAN = $(top_builddir)/lib/libjpegtran
-DIR_KEYRING = $(top_builddir)/lib/gnome-keyring-sharp
DIR_LIBFSPOT = $(top_builddir)/lib/libfspot
DIR_SEMWEB = $(top_builddir)/lib/semweb
DIR_SRC = $(top_builddir)/src
DIR_GIOSHARP = $(top_builddir)/lib/gio-sharp/gio
DIR_GTKSHARPBEANS = $(top_builddir)/lib/gtk-sharp-beans
DIR_UNIQUESHARP = $(top_builddir)/lib/unique-sharp/unique
-LINK_KEYRING = -r:$(DIR_KEYRING)/gnome-keyring-sharp.dll
-LINK_GPHOTO2 = -r:$(DIR_GPHOTO2)/libgphoto2-sharp.dll
-LINK_SEMWEB = -r:$(DIR_SEMWEB)/SemWeb.dll
-LINK_GIOSHARP = -r:$(DIR_GIOSHARP)/gio-sharp.dll
-LINK_GTKSHARPBEANS = -r:$(DIR_GTKSHARPBEANS)/gtk-sharp-beans.dll
-LINK_UNIQUESHARP = -r:$(DIR_UNIQUESHARP)/unique-sharp.dll
-CSC_FLAGS = -debug
-CSC = $(MCS) $(CSC_FLAGS) -target:exe
-CSC_LIB = $(MCS) $(CSC_FLAGS) -target:library
-MONO_DEBUGFLAGS = --debug
-RUNTIME = mono $(MONO_DEBUGFLAGS)
-ASSEMBLY_NAME = Mono.Google
-ASSEMBLY_SOURCES = \
- $(srcdir)/AlbumAccess.cs \
- $(srcdir)/AssemblyInfo.cs \
- $(srcdir)/Authentication.cs \
- $(srcdir)/CaptchaException.cs \
- $(srcdir)/CreateAlbumException.cs \
- $(srcdir)/DeleteAlbumException.cs \
- $(srcdir)/GDataApi.cs \
- $(srcdir)/GoogleConnection.cs \
- $(srcdir)/GoogleService.cs \
- $(srcdir)/MultipartRequest.cs \
- $(srcdir)/NoCheckCertificatePolicy.cs \
- $(srcdir)/PicasaAlbum.cs \
- $(srcdir)/PicasaAlbumCollection.cs \
- $(srcdir)/PicasaPicture.cs \
- $(srcdir)/PicasaPictureCollection.cs \
- $(srcdir)/PicasaWeb.cs \
- $(srcdir)/UploadPictureException.cs \
- $(srcdir)/UploadProgressEventArgs.cs \
- $(srcdir)/UploadProgressEventHandler.cs \
- $(srcdir)/XmlUtil.cs
-
-REFS = -r:System.Web
-PKGS =
-ASSEMBLY = $(ASSEMBLY_NAME).dll
-assemblydir = $(pkglibdir)
-assembly_DATA = $(ASSEMBLY)
-EXTRA_DIST = $(ASSEMBLY_SOURCES)
-CLEANFILES = \
- $(ASSEMBLY) \
- $(ASSEMBLY).mdb
-
+DIR_BIN = $(top_builddir)/bin
+
+# External libraries to link against, generated from configure
+LINK_SYSTEM = -r:System
+LINK_SYSTEMDATA = -r:System.Data
+LINK_SYSTEM_WEB = -r:System.Web
+LINK_MONO_POSIX = -r:Mono.Posix
+LINK_MONO_CAIRO = -r:Mono.Cairo
+LINK_MONO_SIMD = -r:Mono.Simd
+LINK_MONODATA = -r:Mono.Data
+LINK_MONO_DATA_SQLITECLIENT = -r:Mono.Data.SqliteClient
+LINK_ICSHARP_ZIP_LIB = -r:ICSharpCode.SharpZipLib
+LINK_KEYRING = $(KEYRINGSHARP_LIBS)
+LINK_GLIB = $(GLIBSHARP_LIBS)
+LINK_GTK = $(GTKSHARP_LIBS)
+LINK_GNOME = $(GNOME_SHARP_LIBS)
+LINK_GCONF = $(GCONF_SHARP_LIBS)
+LINK_GLADE = -pkg:glade-sharp-2.0
+LINK_FLICKRNET = -pkg:flickrnet
+LINK_DBUS = $(NDESK_DBUS_LIBS) $(NDESK_DBUS_GLIB_LIBS)
+LINK_DBUS_NO_GLIB = $(NDESK_DBUS_LIBS)
+LINK_MONO_ADDINS_DEPS = $(MONO_ADDINS_LIBS)
+LINK_MONO_ADDINS_SETUP_DEPS = $(MONO_ADDINS_SETUP_LIBS)
+LINK_MONO_ADDINS_GUI_DEPS = $(MONO_ADDINS_GUI_LIBS)
+
+# GIO
+REF_GIO =
+LINK_GIO = -r:$(DIR_GIOSHARP)/gio-sharp.dll
+LINK_GIO_DEPS = $(REF_GIO) $(LINK_GIO)
+
+# Gtk Beans
+REF_GTK_BEANS = $(LINK_GIO_DEPS)
+LINK_GTK_BEANS = -r:$(DIR_GTKSHARPBEANS)/gtk-sharp-beans.dll
+LINK_GTK_BEANS_DEPS = $(REF_GTK_BEANS) $(LINK_GTK_BEANS)
+
+# Uniqe
+REF_UNIQUE =
+LINK_UNIQUE = -r:$(DIR_UNIQUESHARP)/unique-sharp.dll
+LINK_UNIQUE_DEPS = $(REF_UNIQUE) $(LINK_UNIQUE)
+
+# Hyena
+REF_HYENA = $(LINK_SYSTEM) $(LINK_MONO_POSIX)
+LINK_HYENA = -r:$(DIR_BIN)/Hyena.dll
+LINK_HYENA_DEPS = $(REF_HYENA) $(LINK_HYENA)
+
+# Semweb
+REF_SEMWEB = $(LINK_SYSTEMDATA) $(LINK_HYENA_DEPS)
+LINK_SEMWEB = -r:$(DIR_BIN)/SemWeb.dll
+LINK_SEMWEB_DEPS = $(REF_SEMWEB) $(LINK_SEMWEB)
+
+# Hyena.Data.Sqlite
+REF_HYENA_DATA_SQLITE = $(LINK_SQLITE)
+LINK_HYENA_DATA_SQLITE = -r:$(DIR_BIN)/Hyena.Data.Sqlite.dll
+LINK_HYENA_DATA_SQLITE_DEPS = $(REF_HYENA_DATA_SQLITE) $(LINK_HYENA_DATA_SQLITE)
+
+# Hyena.Gui
+REF_HYENA_GUI = $(LINK_HYENA_DEPS)
+LINK_HYENA_GUI = -r:$(DIR_BIN)/Hyena.Gui.dll
+LINK_HENA_GUI_DEPS = $(REF_HYENA_GUI) $(LINK_HYENA_GUI)
+
+# FSpot.Cms
+REF_FSPOT_CMS = $(LINK_GTK)
+LINK_FSPOT_CMS = -r:$(DIR_BIN)/FSpot.Cms.dll
+LINK_FSPOT_CMS_DEPS = $(REF_FSPOT_CMS) $(LINK_FSPOT_CMS)
+
+# FSpot.Utils
+REF_FSPOT_UTILS = $(LINK_HYENA_DEPS) $(LINK_GTK) $(LINK_GIO) $(LINK_MONO_CAIRO)
+LINK_FSPOT_UTILS = -r:$(DIR_BIN)/FSpot.Utils.dll
+LINK_FSPOT_UTILS_DEPS = $(REF_FSPOT_UTILS) $(LINK_FSPOT_UTILS)
+
+# FSpot.Core
+REF_FSPOT_CORE = $(LINK_FSPOT_UTILS_DEPS) $(LINK_FSPOT_CMS_DEPS)
+LINK_FSPOT_CORE = -r:$(DIR_BIN)/FSpot.Core.dll
+LINK_FSPOT_CORE_DEPS = $(REF_FSPOT_CORE) $(LINK_FSPOT_CORE)
+
+# FSpot.Query
+REF_FSPOT_QUERY = $(LINK_FSPOT_CORE_DEPS)
+LINK_FSPOT_QUERY = -r:$(DIR_BIN)/FSpot.Query.dll
+LINK_FSPOT_QUERY_DEPS = $(REF_FSPOT_QUERY) $(LINK_FSPOT_QUERY)
+
+# FSpot.JobScheduler
+REF_FSPOT_JOB_SCHEDULER = $(LINK_HYENA_DEPS)
+LINK_FSPOT_JOB_SCHEDULER = -r:$(DIR_BIN)/FSpot.JobScheduler.dll
+LINK_FSPOT_JOB_SCHEDULER_DEPS = $(REF_FSPOT_JOB_SCHEDULER) $(LINK_FSPOT_JOB_SCHEDULER)
+
+# FSpot.Bling
+REF_FSPOT_BLING = $(LINK_GTK_BEANS_DEPS) $(LINK_GLIB)
+LINK_FSPOT_BLING = -r:$(DIR_BIN)/FSpot.Bling.dll
+LINK_FSPOT_BLING_DEPS = $(REF_FSPOT_BLING) $(LINK_FSPOT_BLING)
+
+# FSpot.Platform
+REF_FSPOT_PLATFORM = $(LINK_GCONF) $(LINK_GTK) $(LINK_FSPOT_CORE_DEPS) $(LINK_DBUS)
+LINK_FSPOT_PLATFORM = -r:$(DIR_BIN)/FSpot.Platform.dll
+LINK_FSPOT_PLATFORM_DEPS = $(REF_FSPOT_PLATFORM) $(LINK_FSPOT_PLATFORM)
+
+# FSpot.Widgets
+REF_FSPOT_WIDGETS = $(LINK_FSPOT_CORE_DEPS) $(LINK_FSPOT_BLING_DEPS)
+LINK_FSPOT_WIDGETS = -r:$(DIR_BIN)/FSpot.Widgets.dll
+LINK_FSPOT_WIDGETS_DEPS = $(REF_FSPOT_WIDGETS) $(LINK_FSPOT_WIDGETS)
+
+# FSpot (executable)
+REF_FSPOT = $(LINK_FSPOT_WIDGETS_DEPS) $(LINK_FSPOT_PLATFORM_DEPS) $(LINK_FSPOT_QUERY_DEPS) \
+ $(LINK_GLIB) $(LINK_MONO_ADDINS_DEPS) $(LINK_UNIQUE_DEPS) $(LINK_MONO_ADDINS_SETUP_DEPS) \
+ $(LINK_SEMWEB_DEPS) $(LINK_GLADE) $(LINK_MONODATA) $(LINK_MONO_DATA_SQLITECLIENT) \
+ $(LINK_MONO_ADDINS_GUI_DEPS) $(LINK_FSPOT_JOB_SCHEDULER_DEPS) $(LINK_ICSHARP_ZIP_LIB) \
+ $(LINK_GNOME)
+
+# FIXME: do not link executables
+LINK_FSPOT = -r:$(DIR_BIN)/f-spot.exe
+LINK_FSPOT_DEPS = $(REF_FSPOT) $(LINK_FSPOT)
+
+# Extensions
+REF_FSPOT_EXTENSION_BLACKOUTEDITOR = $(LINK_FSPOT_DEPS)
+REF_FSPOT_EXTENSION_BWEDITOR = $(LINK_FSPOT_DEPS) $(LINK_MONO_SIMD)
+REF_FSPOT_EXTENSION_FLIPEDITOR = $(LINK_FSPOT_DEPS)
+REF_FSPOT_EXTENSION_PIXELATEEDITOR = $(LINK_FSPOT_DEPS)
+REF_FSPOT_EXTENSION_RESIZEEDITOR = $(LINK_FSPOT_DEPS)
+REF_FSPOT_EXTENSION_CDEXPORT = $(LINK_FSPOT_DEPS)
+REF_FSPOT_EXTENSION_FACEBOOKEXPORT = $(LINK_FSPOT_DEPS) $(LINK_KEYRING)
+REF_FSPOT_EXTENSION_FLICKREXPORT = $(LINK_FSPOT_DEPS) $(LINK_FLICKRNET)
+REF_FSPOT_EXTENSION_FOLDEREXPORT = $(LINK_FSPOT_DEPS) $(LINK_SYSTEM_WEB)
+REF_FSPOT_EXTENSION_GALLERYEXPORT = $(LINK_FSPOT_DEPS)
+REF_MONO_GOOGLE = $(LINK_HYENA_DEPS)
+LINK_MONO_GOOGLE = -r:$(DIR_BIN)/Mono.Google.dll
+LINK_MONO_GOOGLE_DEPS = $(REF_MONO_GOOGLE) $(LINK_MONO_GOOGLE)
+REF_FSPOT_EXTENSION_PICASAWEBEXPORT = $(LINK_FSPOT_DEPS) $(LINK_MONO_GOOGLE) $(LINK_KEYRING)
+REF_SMUGMUGNET = $(LINK_FSPOT_DEPS)
+LINK_SMUGMUGNET = -r:$(DIR_BIN)/SmugMugNet.dll
+LINK_SMUGMUGNET_DEPS = $(REF_SMUGMUGNET) $(LINK_SMUGMUGNET)
+REF_FSPOT_EXTENSION_SMUGMUGEXPORT = $(LINK_SMUGMUGNET_DEPS) $(LINK_KEYRING)
+REF_MONO_TABBLO = $(LINK_HYENA_DEPS)
+LINK_MONO_TABBLO = -r:$(DIR_BIN)/Mono.Tabblo.dll
+LINK_MONO_TABBLO_DEPS = $(REF_MONO_TABBLO) $(LINK_MONO_TABBLO)
+REF_FSPOT_EXTENSION_TABBLOEXPORT = $(LINK_FSPOT_DEPS) $(LINK_KEYRING) $(LINK_MONO_TABBLO_DEPS)
+REF_FSPOT_EXTENSION_ZIPEXPORT = $(LINK_FSPOT_DEPS)
+REF_FSPOT_EXTENSION_CHANGEPHOTOPATH = $(LINK_FSPOT_DEPS)
+REF_FSPOT_EXTENSION_DEVELOPINUFRAW = $(LINK_FSPOT_DEPS)
+REF_FSPOT_EXTENSION_HASHJOB = $(LINK_FSPOT_DEPS)
+REF_FSPOT_EXTENSION_LIVEWEBGALLERY = $(LINK_FSPOT_DEPS)
+REF_FSPOT_EXTENSION_MERGEDB = $(LINK_FSPOT_DEPS)
+REF_FSPOT_EXTENSION_RAWPLUSJPEG = $(LINK_FSPOT_DEPS)
+REF_FSPOT_EXTENSION_RETROACTIVEROLL = $(LINK_FSPOT_DEPS)
+REF_FSPOT_EXTENSION_SCREENSAVERCONFIG = $(LINK_FSPOT_DEPS)
+REF_FSPOT_EXTENSION_COVERTRANSITION = $(LINK_FSPOT_DEPS)
+
+# Cute hack to replace a space with something
+colon := :
+empty :=
+space := $(empty) $(empty)
+
+# Build path to allow running uninstalled
+RUN_PATH = $(subst $(space),$(colon), $(MONO_BASE_PATH))
+UNIQUE_FILTER_PIPE = tr [:space:] \\n | sort | uniq
+BUILD_DATA_DIR = $(top_builddir)/bin/share/$(PACKAGE)
+
+# Since all other attempts failed, we currently go this way:
+# This code adds the file specified in ASSEMBLY_INFO_SOURCE to SOURCES_BUILD.
+# If no such file is specified, the default AssemblyInfo.cs is used.
+ASSEMBLY_INFO_SOURCE_REAL = \
+ $(shell if [ "$(ASSEMBLY_INFO_SOURCE)" ]; \
+ then \
+ echo "$(addprefix $(srcdir)/, $(ASSEMBLY_INFO_SOURCE))"; \
+ else \
+ echo "$(top_srcdir)/src/AssemblyInfo.cs"; \
+ fi)
+
+SOURCES_BUILD = $(addprefix $(srcdir)/, $(SOURCES)) \
+ $(ASSEMBLY_INFO_SOURCE_REAL)
+RESOURCES_EXPANDED = $(addprefix $(srcdir)/, $(RESOURCES))
+RESOURCES_BUILD = $(foreach resource, $(RESOURCES_EXPANDED), \
+ -resource:$(resource),$(notdir $(resource)))
+
+INSTALL_ICONS = $(top_srcdir)/build/private-icon-theme-installer "$(mkinstalldirs)" "$(INSTALL_DATA)"
+THEME_ICONS_SOURCE = $(wildcard $(srcdir)/ThemeIcons/*/*/*.png) $(wildcard $(srcdir)/ThemeIcons/scalable/*/*.svg)
+THEME_ICONS_RELATIVE = $(subst $(srcdir)/ThemeIcons/, , $(THEME_ICONS_SOURCE))
+ASSEMBLY_EXTENSION = $(strip $(patsubst library, dll, $(TARGET)))
+ASSEMBLY_FILE = $(top_builddir)/bin/$(ASSEMBLY).$(ASSEMBLY_EXTENSION)
+INSTALL_DIR_RESOLVED = $(firstword $(subst , $(DEFAULT_INSTALL_DIR), $(INSTALL_DIR)))
+ at ENABLE_TESTS_TRUE@ENABLE_TESTS_FLAG = "-define:ENABLE_TESTS"
+ at ENABLE_ATK_TRUE@ENABLE_ATK_FLAG = "-define:ENABLE_ATK"
+FILTERED_LINK = $(shell echo "$(LINK)" | $(UNIQUE_FILTER_PIPE))
+DEP_LINK = $(shell echo "$(LINK)" | $(UNIQUE_FILTER_PIPE) | sed s,-r:,,g | grep '$(top_builddir)/bin/')
+OUTPUT_FILES = \
+ $(ASSEMBLY_FILE) \
+ $(ASSEMBLY_FILE).mdb
+
+moduledir = $(INSTALL_DIR_RESOLVED)
+module_SCRIPTS = $(OUTPUT_FILES)
+EXTRA_DIST = $(SOURCES_BUILD) $(RESOURCES_EXPANDED) $(THEME_ICONS_SOURCE)
+CLEANFILES = $(OUTPUT_FILES) $(ASSEMBLY_FILE).config
+DISTCLEANFILES = *.pidb
+MAINTAINERCLEANFILES = Makefile.in
all: all-am
.SUFFIXES:
-$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(top_srcdir)/Makefile.include $(am__configure_deps)
+$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(top_srcdir)/build/build.mk $(top_srcdir)/build/build.environment.mk $(top_srcdir)/build/build.rules.mk $(am__configure_deps)
@for dep in $?; do \
case '$(am__configure_deps)' in \
*$$dep*) \
@@ -373,32 +576,46 @@ $(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps)
$(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps)
cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
$(am__aclocal_m4_deps):
+install-moduleSCRIPTS: $(module_SCRIPTS)
+ @$(NORMAL_INSTALL)
+ test -z "$(moduledir)" || $(MKDIR_P) "$(DESTDIR)$(moduledir)"
+ @list='$(module_SCRIPTS)'; test -n "$(moduledir)" || list=; \
+ for p in $$list; do \
+ if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \
+ if test -f "$$d$$p"; then echo "$$d$$p"; echo "$$p"; else :; fi; \
+ done | \
+ sed -e 'p;s,.*/,,;n' \
+ -e 'h;s|.*|.|' \
+ -e 'p;x;s,.*/,,;$(transform)' | sed 'N;N;N;s,\n, ,g' | \
+ $(AWK) 'BEGIN { files["."] = ""; dirs["."] = 1; } \
+ { d=$$3; if (dirs[d] != 1) { print "d", d; dirs[d] = 1 } \
+ if ($$2 == $$4) { files[d] = files[d] " " $$1; \
+ if (++n[d] == $(am__install_max)) { \
+ print "f", d, files[d]; n[d] = 0; files[d] = "" } } \
+ else { print "f", d "/" $$4, $$1 } } \
+ END { for (d in files) print "f", d, files[d] }' | \
+ while read type dir files; do \
+ if test "$$dir" = .; then dir=; else dir=/$$dir; fi; \
+ test -z "$$files" || { \
+ echo " $(INSTALL_SCRIPT) $$files '$(DESTDIR)$(moduledir)$$dir'"; \
+ $(INSTALL_SCRIPT) $$files "$(DESTDIR)$(moduledir)$$dir" || exit $$?; \
+ } \
+ ; done
+
+uninstall-moduleSCRIPTS:
+ @$(NORMAL_UNINSTALL)
+ @list='$(module_SCRIPTS)'; test -n "$(moduledir)" || exit 0; \
+ files=`for p in $$list; do echo "$$p"; done | \
+ sed -e 's,.*/,,;$(transform)'`; \
+ test -n "$$list" || exit 0; \
+ echo " ( cd '$(DESTDIR)$(moduledir)' && rm -f" $$files ")"; \
+ cd "$(DESTDIR)$(moduledir)" && rm -f $$files
mostlyclean-libtool:
-rm -f *.lo
clean-libtool:
-rm -rf .libs _libs
-install-assemblyDATA: $(assembly_DATA)
- @$(NORMAL_INSTALL)
- test -z "$(assemblydir)" || $(MKDIR_P) "$(DESTDIR)$(assemblydir)"
- @list='$(assembly_DATA)'; test -n "$(assemblydir)" || list=; \
- for p in $$list; do \
- if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \
- echo "$$d$$p"; \
- done | $(am__base_list) | \
- while read files; do \
- echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(assemblydir)'"; \
- $(INSTALL_DATA) $$files "$(DESTDIR)$(assemblydir)" || exit $$?; \
- done
-
-uninstall-assemblyDATA:
- @$(NORMAL_UNINSTALL)
- @list='$(assembly_DATA)'; test -n "$(assemblydir)" || list=; \
- files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \
- test -n "$$files" || exit 0; \
- echo " ( cd '$(DESTDIR)$(assemblydir)' && rm -f" $$files ")"; \
- cd "$(DESTDIR)$(assemblydir)" && rm -f $$files
tags: TAGS
TAGS:
@@ -438,9 +655,9 @@ distdir: $(DISTFILES)
done
check-am: all-am
check: check-am
-all-am: Makefile $(DATA)
+all-am: Makefile $(SCRIPTS)
installdirs:
- for dir in "$(DESTDIR)$(assemblydir)"; do \
+ for dir in "$(DESTDIR)$(moduledir)"; do \
test -z "$$dir" || $(MKDIR_P) "$$dir"; \
done
install: install-am
@@ -465,10 +682,12 @@ clean-generic:
distclean-generic:
-test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
-test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES)
+ -test -z "$(DISTCLEANFILES)" || rm -f $(DISTCLEANFILES)
maintainer-clean-generic:
@echo "This command is intended for maintainers to use"
@echo "it deletes files that may require special tools to rebuild."
+ -test -z "$(MAINTAINERCLEANFILES)" || rm -f $(MAINTAINERCLEANFILES)
clean: clean-am
clean-am: clean-generic clean-libtool mostlyclean-am
@@ -489,7 +708,7 @@ info: info-am
info-am:
-install-data-am: install-assemblyDATA
+install-data-am: install-data-local install-moduleSCRIPTS
install-dvi: install-dvi-am
@@ -533,27 +752,72 @@ ps: ps-am
ps-am:
-uninstall-am: uninstall-assemblyDATA
+uninstall-am: uninstall-local uninstall-moduleSCRIPTS
.MAKE: install-am install-strip
.PHONY: all all-am check check-am clean clean-generic clean-libtool \
distclean distclean-generic distclean-libtool distdir dvi \
dvi-am html html-am info info-am install install-am \
- install-assemblyDATA install-data install-data-am install-dvi \
+ install-data install-data-am install-data-local 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-generic mostlyclean-libtool pdf pdf-am ps ps-am \
- uninstall uninstall-am uninstall-assemblyDATA
-
-
-all: $(ASSEMBLY)
-
-$(ASSEMBLY): $(ASSEMBLY_SOURCES)
- $(CSC_LIB) -out:$@ $(PKGS) $(REFS) $(ASSEMBLY_SOURCES)
+ install-moduleSCRIPTS install-pdf install-pdf-am install-ps \
+ install-ps-am install-strip installcheck installcheck-am \
+ installdirs maintainer-clean maintainer-clean-generic \
+ mostlyclean mostlyclean-generic mostlyclean-libtool pdf pdf-am \
+ ps ps-am uninstall uninstall-am uninstall-local \
+ uninstall-moduleSCRIPTS
+
+
+all: $(ASSEMBLY_FILE) theme-icons
+
+run:
+ @pushd $(top_builddir); \
+ make run; \
+ popd;
+
+# uncommented for now.
+# tests are currently excuted from Makefile in $(top_builddir)
+#test:
+# @pushd $(top_builddir)/tests; \
+# make $(ASSEMBLY); \
+# popd;
+
+build-debug:
+ @echo $(DEP_LINK)
+
+$(ASSEMBLY_FILE).mdb: $(ASSEMBLY_FILE)
+
+$(ASSEMBLY_FILE): $(SOURCES_BUILD) $(RESOURCES_EXPANDED) $(DEP_LINK)
+ @mkdir -p $(top_builddir)/bin
+ @if [ ! "x$(ENABLE_RELEASE)" = "xyes" ]; then \
+ $(top_srcdir)/build/dll-map-makefile-verifier $(srcdir)/Makefile.am $(srcdir)/$(notdir $@.config) && \
+ $(MONO) $(top_builddir)/build/dll-map-verifier.exe $(srcdir)/$(notdir $@.config) -iwinmm -ilibbanshee -ilibbnpx11 -ilibc -ilibc.so.6 -iintl -ilibmtp.dll -ilibigemacintegration.dylib -iCFRelease $(SOURCES_BUILD); \
+ fi;
+ $(MCS) \
+ $(GMCS_FLAGS) \
+ $(ASSEMBLY_BUILD_FLAGS) \
+ -nowarn:0278 -nowarn:0078 $$warn \
+ -define:HAVE_GTK_2_10 -define:NET_2_0 \
+ -debug -target:$(TARGET) -out:$@ \
+ $(BUILD_DEFINES) $(ENABLE_TESTS_FLAG) $(ENABLE_ATK_FLAG) \
+ $(FILTERED_LINK) $(RESOURCES_BUILD) $(SOURCES_BUILD)
+ @if [ -e $(srcdir)/$(notdir $@.config) ]; then \
+ cp $(srcdir)/$(notdir $@.config) $(top_builddir)/bin; \
+ fi;
+ @if [ ! -z "$(EXTRA_BUNDLE)" ]; then \
+ cp $(EXTRA_BUNDLE) $(top_builddir)/bin; \
+ fi;
+
+theme-icons: $(THEME_ICONS_SOURCE)
+ @$(INSTALL_ICONS) -il "$(BUILD_DATA_DIR)" "$(srcdir)" $(THEME_ICONS_RELATIVE)
+
+install-data-local: $(THEME_ICONS_SOURCE)
+ @$(INSTALL_ICONS) -i "$(DESTDIR)$(pkgdatadir)" "$(srcdir)" $(THEME_ICONS_RELATIVE)
+
+uninstall-local: $(THEME_ICONS_SOURCE)
+ @$(INSTALL_ICONS) -u "$(DESTDIR)$(pkgdatadir)" "$(srcdir)" $(THEME_ICONS_RELATIVE)
# 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/extensions/Exporters/SmugMugExport/Makefile.am b/extensions/Exporters/SmugMugExport/Makefile.am
index 166de02..d0b4fea 100644
--- a/extensions/Exporters/SmugMugExport/Makefile.am
+++ b/extensions/Exporters/SmugMugExport/Makefile.am
@@ -1,58 +1,15 @@
-include $(top_srcdir)/Makefile.include
+ASSEMBLY = FSpot.Exporters.SmugMugExport
+TARGET = library
+LINK = $(REF_FSPOT_EXTENSION_SMUGMUGEXPORT)
+INSTALL_DIR = $(EXTENSIONS_INSTALL_DIR)
-PLUGIN_NAME = SmugMugExport
+SOURCES = SmugMugExport.cs
-PLUGIN_MANIFEST = $(PLUGIN_NAME).addin.xml
+RESOURCES = \
+ SmugMugExport.addin.xml \
+ SmugMugExport.glade
-PLUGIN_ASSEMBLY = $(PLUGIN_NAME).dll
-
-PLUGIN_SOURCES = \
- $(srcdir)/SmugMugExport.cs
-
-REFS = \
- -r:$(top_builddir)/src/f-spot.exe \
- -r:$(top_builddir)/src/FSpot.Core.dll \
- -r:$(top_builddir)/src/FSpot.Utils.dll \
- -r:SmugMugNet/SmugMugNet.dll \
- $(LINK_SEMWEB) \
- $(LINK_GIOSHARP) \
- $(LINK_GPHOTO2) \
- $(LINK_GTKSHARPBEANS) \
- $(LINK_KEYRING) \
- $(LINK_UNIQUESHARP) \
- -r:Mono.Posix
-
-PKGS = \
- -pkg:gtk-sharp-2.0 \
- -pkg:glade-sharp-2.0
-
-RESOURCES = \
- -resource:$(srcdir)/$(PLUGIN_MANIFEST) \
- -resource:$(srcdir)/$(PLUGIN_NAME).glade
-
-SUBDIRS = \
+SUBDIRS = \
SmugMugNet
-mpack: $(PLUGIN_ASSEMBLY)
- mautil p $(PLUGIN_ASSEMBLY)
-
-$(PLUGIN_ASSEMBLY): $(PLUGIN_SOURCES) $(PLUGIN_MANIFEST)
- $(CSC_LIB) -out:$@ $(PLUGIN_SOURCES) $(REFS) $(PKGS) $(ASSEMBLIES) $(RESOURCES)
-
-plugindir = $(pkglibdir)/extensions
-
-install-data-hook:
- if [ -w $(DESTDIR)$(plugindir)/$(PLUGIN_NAME).addin.xml ] ; then rm -f $(DESTDIR)$(plugindir)/$(PLUGIN_NAME).addin.xml; fi
-
-plugin_DATA = \
- $(PLUGIN_ASSEMBLY)
-
-EXTRA_DIST = \
- $(PLUGIN_SOURCES) \
- $(PLUGIN_MANIFEST) \
- $(PLUGIN_NAME).glade
-
-CLEANFILES = \
- $(PLUGIN_ASSEMBLY) \
- $(PLUGIN_ASSEMBLY).mdb \
- *.mpack
+include $(top_srcdir)/build/build.mk
diff --git a/extensions/Exporters/SmugMugExport/Makefile.in b/extensions/Exporters/SmugMugExport/Makefile.in
index 857fbbd..0df3620 100644
--- a/extensions/Exporters/SmugMugExport/Makefile.in
+++ b/extensions/Exporters/SmugMugExport/Makefile.in
@@ -35,13 +35,22 @@ POST_UNINSTALL = :
build_triplet = @build@
host_triplet = @host@
DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in \
- $(top_srcdir)/Makefile.include
+ $(top_srcdir)/build/build.environment.mk \
+ $(top_srcdir)/build/build.mk \
+ $(top_srcdir)/build/build.rules.mk
+ at ENABLE_TESTS_TRUE@am__append_1 = " $(NUNIT_LIBS)"
subdir = extensions/Exporters/SmugMugExport
ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
am__aclocal_m4_deps = $(top_srcdir)/build/m4/shave/shave.m4 \
$(top_srcdir)/build/m4/shamrock/expansions.m4 \
+ $(top_srcdir)/build/m4/shamrock/gnome-doc.m4 \
$(top_srcdir)/build/m4/shamrock/mono.m4 \
+ $(top_srcdir)/build/m4/shamrock/nunit.m4 \
$(top_srcdir)/build/m4/shamrock/programs.m4 \
+ $(top_srcdir)/build/m4/f-spot/flickrnet.m4 \
+ $(top_srcdir)/build/m4/f-spot/gnome-keyring-sharp.m4 \
+ $(top_srcdir)/build/m4/f-spot/gtk-sharp.m4 \
+ $(top_srcdir)/build/m4/f-spot/mono-addins.m4 \
$(top_srcdir)/acinclude.m4 $(top_srcdir)/configure.ac
am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
$(ACLOCAL_M4)
@@ -49,15 +58,6 @@ mkinstalldirs = $(install_sh) -d
CONFIG_HEADER = $(top_builddir)/config.h
CONFIG_CLEAN_FILES =
CONFIG_CLEAN_VPATH_FILES =
-SOURCES =
-DIST_SOURCES =
-RECURSIVE_TARGETS = all-recursive check-recursive dvi-recursive \
- html-recursive info-recursive install-data-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
am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`;
am__vpath_adj = case $$p in \
$(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \
@@ -79,8 +79,16 @@ am__nobase_list = $(am__nobase_strip_setup); \
am__base_list = \
sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \
sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g'
-am__installdirs = "$(DESTDIR)$(plugindir)"
-DATA = $(plugin_DATA)
+am__installdirs = "$(DESTDIR)$(moduledir)"
+SCRIPTS = $(module_SCRIPTS)
+DIST_SOURCES =
+RECURSIVE_TARGETS = all-recursive check-recursive dvi-recursive \
+ html-recursive info-recursive install-data-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
AM_RECURSIVE_TARGETS = $(RECURSIVE_TARGETS:-recursive=) \
@@ -159,6 +167,8 @@ EXIF_SOVERSION = @EXIF_SOVERSION@
F77 = @F77@
FC = @FC@
FGREP = @FGREP@
+FLICKRNET_CFLAGS = @FLICKRNET_CFLAGS@
+FLICKRNET_LIBS = @FLICKRNET_LIBS@
F_CFLAGS = @F_CFLAGS@
F_LIBS = @F_LIBS@
GAPI2CODEGEN = @GAPI2CODEGEN@
@@ -172,6 +182,8 @@ GCONF_SHARP_LIBS = @GCONF_SHARP_LIBS@
GETTEXT_PACKAGE = @GETTEXT_PACKAGE@
GIO_CFLAGS = @GIO_CFLAGS@
GIO_LIBS = @GIO_LIBS@
+GLIBSHARP_2_12_7_CFLAGS = @GLIBSHARP_2_12_7_CFLAGS@
+GLIBSHARP_2_12_7_LIBS = @GLIBSHARP_2_12_7_LIBS@
GLIBSHARP_CFLAGS = @GLIBSHARP_CFLAGS@
GLIBSHARP_LIBS = @GLIBSHARP_LIBS@
GLIB_CFLAGS = @GLIB_CFLAGS@
@@ -187,6 +199,10 @@ GNOME_SHARP_CFLAGS = @GNOME_SHARP_CFLAGS@
GNOME_SHARP_LIBS = @GNOME_SHARP_LIBS@
GOBJECT_QUERY = @GOBJECT_QUERY@
GREP = @GREP@
+GTKSHARP_A11Y_CFLAGS = @GTKSHARP_A11Y_CFLAGS@
+GTKSHARP_A11Y_LIBS = @GTKSHARP_A11Y_LIBS@
+GTKSHARP_CFLAGS = @GTKSHARP_CFLAGS@
+GTKSHARP_LIBS = @GTKSHARP_LIBS@
HELP_DIR = @HELP_DIR@
ICONS_DIRECTORY = @ICONS_DIRECTORY@
INSTALL = @INSTALL@
@@ -200,14 +216,14 @@ INTLTOOL_EXTRACT = @INTLTOOL_EXTRACT@
INTLTOOL_MERGE = @INTLTOOL_MERGE@
INTLTOOL_PERL = @INTLTOOL_PERL@
INTLTOOL_UPDATE = @INTLTOOL_UPDATE@
+KEYRINGSHARP_CFLAGS = @KEYRINGSHARP_CFLAGS@
+KEYRINGSHARP_LIBS = @KEYRINGSHARP_LIBS@
LCMS_CFLAGS = @LCMS_CFLAGS@
LCMS_LIBS = @LCMS_LIBS@
LD = @LD@
LDFLAGS = @LDFLAGS@
LIBEXIF_VERSION_CHECK_CFLAGS = @LIBEXIF_VERSION_CHECK_CFLAGS@
LIBEXIF_VERSION_CHECK_LIBS = @LIBEXIF_VERSION_CHECK_LIBS@
-LIBGPHOTO2_CFLAGS = @LIBGPHOTO2_CFLAGS@
-LIBGPHOTO2_LIBS = @LIBGPHOTO2_LIBS@
LIBJPEG = @LIBJPEG@
LIBOBJS = @LIBOBJS@
LIBS = @LIBS@
@@ -222,6 +238,12 @@ MCS = @MCS@
MKDIR_P = @MKDIR_P@
MKINSTALLDIRS = @MKINSTALLDIRS@
MONO = @MONO@
+MONO_ADDINS_CFLAGS = @MONO_ADDINS_CFLAGS@
+MONO_ADDINS_GUI_CFLAGS = @MONO_ADDINS_GUI_CFLAGS@
+MONO_ADDINS_GUI_LIBS = @MONO_ADDINS_GUI_LIBS@
+MONO_ADDINS_LIBS = @MONO_ADDINS_LIBS@
+MONO_ADDINS_SETUP_CFLAGS = @MONO_ADDINS_SETUP_CFLAGS@
+MONO_ADDINS_SETUP_LIBS = @MONO_ADDINS_SETUP_LIBS@
MONO_MODULE_CFLAGS = @MONO_MODULE_CFLAGS@
MONO_MODULE_LIBS = @MONO_MODULE_LIBS@
MSGFMT = @MSGFMT@
@@ -232,7 +254,6 @@ NDESK_DBUS_LIBS = @NDESK_DBUS_LIBS@
NM = @NM@
NMEDIT = @NMEDIT@
NUNIT_CFLAGS = @NUNIT_CFLAGS@
-NUNIT_DEFINES = @NUNIT_DEFINES@
NUNIT_LIBS = @NUNIT_LIBS@
OBJC = @OBJC@
OBJDUMP = @OBJDUMP@
@@ -324,77 +345,233 @@ target_alias = @target_alias@
top_build_prefix = @top_build_prefix@
top_builddir = @top_builddir@
top_srcdir = @top_srcdir@
+ASSEMBLY = FSpot.Exporters.SmugMugExport
+TARGET = library
+LINK = $(REF_FSPOT_EXTENSION_SMUGMUGEXPORT) $(am__append_1)
+INSTALL_DIR = $(EXTENSIONS_INSTALL_DIR)
+SOURCES = SmugMugExport.cs
+RESOURCES = \
+ SmugMugExport.addin.xml \
+ SmugMugExport.glade
+
+SUBDIRS = \
+ SmugMugNet
+
+
+# Initializers
+MONO_BASE_PATH =
+MONO_ADDINS_PATH =
+
+# Install Paths
+DEFAULT_INSTALL_DIR = $(pkglibdir)
+BACKENDS_INSTALL_DIR = $(DEFAULT_INSTALL_DIR)/Backends
+EXTENSIONS_INSTALL_DIR = $(DEFAULT_INSTALL_DIR)/Extensions
DIR_DOCS = $(top_builddir)/docs
DIR_EXTENSIONS = $(top_builddir)/extensions
-DIR_GPHOTO2 = $(top_builddir)/lib/libgphoto2-sharp
DIR_ICONS = $(top_builddir)/icons
DIR_JPEGTRAN = $(top_builddir)/lib/libjpegtran
-DIR_KEYRING = $(top_builddir)/lib/gnome-keyring-sharp
DIR_LIBFSPOT = $(top_builddir)/lib/libfspot
DIR_SEMWEB = $(top_builddir)/lib/semweb
DIR_SRC = $(top_builddir)/src
DIR_GIOSHARP = $(top_builddir)/lib/gio-sharp/gio
DIR_GTKSHARPBEANS = $(top_builddir)/lib/gtk-sharp-beans
DIR_UNIQUESHARP = $(top_builddir)/lib/unique-sharp/unique
-LINK_KEYRING = -r:$(DIR_KEYRING)/gnome-keyring-sharp.dll
-LINK_GPHOTO2 = -r:$(DIR_GPHOTO2)/libgphoto2-sharp.dll
-LINK_SEMWEB = -r:$(DIR_SEMWEB)/SemWeb.dll
-LINK_GIOSHARP = -r:$(DIR_GIOSHARP)/gio-sharp.dll
-LINK_GTKSHARPBEANS = -r:$(DIR_GTKSHARPBEANS)/gtk-sharp-beans.dll
-LINK_UNIQUESHARP = -r:$(DIR_UNIQUESHARP)/unique-sharp.dll
-CSC_FLAGS = -debug
-CSC = $(MCS) $(CSC_FLAGS) -target:exe
-CSC_LIB = $(MCS) $(CSC_FLAGS) -target:library
-MONO_DEBUGFLAGS = --debug
-RUNTIME = mono $(MONO_DEBUGFLAGS)
-PLUGIN_NAME = SmugMugExport
-PLUGIN_MANIFEST = $(PLUGIN_NAME).addin.xml
-PLUGIN_ASSEMBLY = $(PLUGIN_NAME).dll
-PLUGIN_SOURCES = \
- $(srcdir)/SmugMugExport.cs
-
-REFS = \
- -r:$(top_builddir)/src/f-spot.exe \
- -r:$(top_builddir)/src/FSpot.Core.dll \
- -r:$(top_builddir)/src/FSpot.Utils.dll \
- -r:SmugMugNet/SmugMugNet.dll \
- $(LINK_SEMWEB) \
- $(LINK_GIOSHARP) \
- $(LINK_GPHOTO2) \
- $(LINK_GTKSHARPBEANS) \
- $(LINK_KEYRING) \
- $(LINK_UNIQUESHARP) \
- -r:Mono.Posix
-
-PKGS = \
- -pkg:gtk-sharp-2.0 \
- -pkg:glade-sharp-2.0
-
-RESOURCES = \
- -resource:$(srcdir)/$(PLUGIN_MANIFEST) \
- -resource:$(srcdir)/$(PLUGIN_NAME).glade
-
-SUBDIRS = \
- SmugMugNet
-
-plugindir = $(pkglibdir)/extensions
-plugin_DATA = \
- $(PLUGIN_ASSEMBLY)
-
-EXTRA_DIST = \
- $(PLUGIN_SOURCES) \
- $(PLUGIN_MANIFEST) \
- $(PLUGIN_NAME).glade
-
-CLEANFILES = \
- $(PLUGIN_ASSEMBLY) \
- $(PLUGIN_ASSEMBLY).mdb \
- *.mpack
-
+DIR_BIN = $(top_builddir)/bin
+
+# External libraries to link against, generated from configure
+LINK_SYSTEM = -r:System
+LINK_SYSTEMDATA = -r:System.Data
+LINK_SYSTEM_WEB = -r:System.Web
+LINK_MONO_POSIX = -r:Mono.Posix
+LINK_MONO_CAIRO = -r:Mono.Cairo
+LINK_MONO_SIMD = -r:Mono.Simd
+LINK_MONODATA = -r:Mono.Data
+LINK_MONO_DATA_SQLITECLIENT = -r:Mono.Data.SqliteClient
+LINK_ICSHARP_ZIP_LIB = -r:ICSharpCode.SharpZipLib
+LINK_KEYRING = $(KEYRINGSHARP_LIBS)
+LINK_GLIB = $(GLIBSHARP_LIBS)
+LINK_GTK = $(GTKSHARP_LIBS)
+LINK_GNOME = $(GNOME_SHARP_LIBS)
+LINK_GCONF = $(GCONF_SHARP_LIBS)
+LINK_GLADE = -pkg:glade-sharp-2.0
+LINK_FLICKRNET = -pkg:flickrnet
+LINK_DBUS = $(NDESK_DBUS_LIBS) $(NDESK_DBUS_GLIB_LIBS)
+LINK_DBUS_NO_GLIB = $(NDESK_DBUS_LIBS)
+LINK_MONO_ADDINS_DEPS = $(MONO_ADDINS_LIBS)
+LINK_MONO_ADDINS_SETUP_DEPS = $(MONO_ADDINS_SETUP_LIBS)
+LINK_MONO_ADDINS_GUI_DEPS = $(MONO_ADDINS_GUI_LIBS)
+
+# GIO
+REF_GIO =
+LINK_GIO = -r:$(DIR_GIOSHARP)/gio-sharp.dll
+LINK_GIO_DEPS = $(REF_GIO) $(LINK_GIO)
+
+# Gtk Beans
+REF_GTK_BEANS = $(LINK_GIO_DEPS)
+LINK_GTK_BEANS = -r:$(DIR_GTKSHARPBEANS)/gtk-sharp-beans.dll
+LINK_GTK_BEANS_DEPS = $(REF_GTK_BEANS) $(LINK_GTK_BEANS)
+
+# Uniqe
+REF_UNIQUE =
+LINK_UNIQUE = -r:$(DIR_UNIQUESHARP)/unique-sharp.dll
+LINK_UNIQUE_DEPS = $(REF_UNIQUE) $(LINK_UNIQUE)
+
+# Hyena
+REF_HYENA = $(LINK_SYSTEM) $(LINK_MONO_POSIX)
+LINK_HYENA = -r:$(DIR_BIN)/Hyena.dll
+LINK_HYENA_DEPS = $(REF_HYENA) $(LINK_HYENA)
+
+# Semweb
+REF_SEMWEB = $(LINK_SYSTEMDATA) $(LINK_HYENA_DEPS)
+LINK_SEMWEB = -r:$(DIR_BIN)/SemWeb.dll
+LINK_SEMWEB_DEPS = $(REF_SEMWEB) $(LINK_SEMWEB)
+
+# Hyena.Data.Sqlite
+REF_HYENA_DATA_SQLITE = $(LINK_SQLITE)
+LINK_HYENA_DATA_SQLITE = -r:$(DIR_BIN)/Hyena.Data.Sqlite.dll
+LINK_HYENA_DATA_SQLITE_DEPS = $(REF_HYENA_DATA_SQLITE) $(LINK_HYENA_DATA_SQLITE)
+
+# Hyena.Gui
+REF_HYENA_GUI = $(LINK_HYENA_DEPS)
+LINK_HYENA_GUI = -r:$(DIR_BIN)/Hyena.Gui.dll
+LINK_HENA_GUI_DEPS = $(REF_HYENA_GUI) $(LINK_HYENA_GUI)
+
+# FSpot.Cms
+REF_FSPOT_CMS = $(LINK_GTK)
+LINK_FSPOT_CMS = -r:$(DIR_BIN)/FSpot.Cms.dll
+LINK_FSPOT_CMS_DEPS = $(REF_FSPOT_CMS) $(LINK_FSPOT_CMS)
+
+# FSpot.Utils
+REF_FSPOT_UTILS = $(LINK_HYENA_DEPS) $(LINK_GTK) $(LINK_GIO) $(LINK_MONO_CAIRO)
+LINK_FSPOT_UTILS = -r:$(DIR_BIN)/FSpot.Utils.dll
+LINK_FSPOT_UTILS_DEPS = $(REF_FSPOT_UTILS) $(LINK_FSPOT_UTILS)
+
+# FSpot.Core
+REF_FSPOT_CORE = $(LINK_FSPOT_UTILS_DEPS) $(LINK_FSPOT_CMS_DEPS)
+LINK_FSPOT_CORE = -r:$(DIR_BIN)/FSpot.Core.dll
+LINK_FSPOT_CORE_DEPS = $(REF_FSPOT_CORE) $(LINK_FSPOT_CORE)
+
+# FSpot.Query
+REF_FSPOT_QUERY = $(LINK_FSPOT_CORE_DEPS)
+LINK_FSPOT_QUERY = -r:$(DIR_BIN)/FSpot.Query.dll
+LINK_FSPOT_QUERY_DEPS = $(REF_FSPOT_QUERY) $(LINK_FSPOT_QUERY)
+
+# FSpot.JobScheduler
+REF_FSPOT_JOB_SCHEDULER = $(LINK_HYENA_DEPS)
+LINK_FSPOT_JOB_SCHEDULER = -r:$(DIR_BIN)/FSpot.JobScheduler.dll
+LINK_FSPOT_JOB_SCHEDULER_DEPS = $(REF_FSPOT_JOB_SCHEDULER) $(LINK_FSPOT_JOB_SCHEDULER)
+
+# FSpot.Bling
+REF_FSPOT_BLING = $(LINK_GTK_BEANS_DEPS) $(LINK_GLIB)
+LINK_FSPOT_BLING = -r:$(DIR_BIN)/FSpot.Bling.dll
+LINK_FSPOT_BLING_DEPS = $(REF_FSPOT_BLING) $(LINK_FSPOT_BLING)
+
+# FSpot.Platform
+REF_FSPOT_PLATFORM = $(LINK_GCONF) $(LINK_GTK) $(LINK_FSPOT_CORE_DEPS) $(LINK_DBUS)
+LINK_FSPOT_PLATFORM = -r:$(DIR_BIN)/FSpot.Platform.dll
+LINK_FSPOT_PLATFORM_DEPS = $(REF_FSPOT_PLATFORM) $(LINK_FSPOT_PLATFORM)
+
+# FSpot.Widgets
+REF_FSPOT_WIDGETS = $(LINK_FSPOT_CORE_DEPS) $(LINK_FSPOT_BLING_DEPS)
+LINK_FSPOT_WIDGETS = -r:$(DIR_BIN)/FSpot.Widgets.dll
+LINK_FSPOT_WIDGETS_DEPS = $(REF_FSPOT_WIDGETS) $(LINK_FSPOT_WIDGETS)
+
+# FSpot (executable)
+REF_FSPOT = $(LINK_FSPOT_WIDGETS_DEPS) $(LINK_FSPOT_PLATFORM_DEPS) $(LINK_FSPOT_QUERY_DEPS) \
+ $(LINK_GLIB) $(LINK_MONO_ADDINS_DEPS) $(LINK_UNIQUE_DEPS) $(LINK_MONO_ADDINS_SETUP_DEPS) \
+ $(LINK_SEMWEB_DEPS) $(LINK_GLADE) $(LINK_MONODATA) $(LINK_MONO_DATA_SQLITECLIENT) \
+ $(LINK_MONO_ADDINS_GUI_DEPS) $(LINK_FSPOT_JOB_SCHEDULER_DEPS) $(LINK_ICSHARP_ZIP_LIB) \
+ $(LINK_GNOME)
+
+# FIXME: do not link executables
+LINK_FSPOT = -r:$(DIR_BIN)/f-spot.exe
+LINK_FSPOT_DEPS = $(REF_FSPOT) $(LINK_FSPOT)
+
+# Extensions
+REF_FSPOT_EXTENSION_BLACKOUTEDITOR = $(LINK_FSPOT_DEPS)
+REF_FSPOT_EXTENSION_BWEDITOR = $(LINK_FSPOT_DEPS) $(LINK_MONO_SIMD)
+REF_FSPOT_EXTENSION_FLIPEDITOR = $(LINK_FSPOT_DEPS)
+REF_FSPOT_EXTENSION_PIXELATEEDITOR = $(LINK_FSPOT_DEPS)
+REF_FSPOT_EXTENSION_RESIZEEDITOR = $(LINK_FSPOT_DEPS)
+REF_FSPOT_EXTENSION_CDEXPORT = $(LINK_FSPOT_DEPS)
+REF_FSPOT_EXTENSION_FACEBOOKEXPORT = $(LINK_FSPOT_DEPS) $(LINK_KEYRING)
+REF_FSPOT_EXTENSION_FLICKREXPORT = $(LINK_FSPOT_DEPS) $(LINK_FLICKRNET)
+REF_FSPOT_EXTENSION_FOLDEREXPORT = $(LINK_FSPOT_DEPS) $(LINK_SYSTEM_WEB)
+REF_FSPOT_EXTENSION_GALLERYEXPORT = $(LINK_FSPOT_DEPS)
+REF_MONO_GOOGLE = $(LINK_HYENA_DEPS)
+LINK_MONO_GOOGLE = -r:$(DIR_BIN)/Mono.Google.dll
+LINK_MONO_GOOGLE_DEPS = $(REF_MONO_GOOGLE) $(LINK_MONO_GOOGLE)
+REF_FSPOT_EXTENSION_PICASAWEBEXPORT = $(LINK_FSPOT_DEPS) $(LINK_MONO_GOOGLE) $(LINK_KEYRING)
+REF_SMUGMUGNET = $(LINK_FSPOT_DEPS)
+LINK_SMUGMUGNET = -r:$(DIR_BIN)/SmugMugNet.dll
+LINK_SMUGMUGNET_DEPS = $(REF_SMUGMUGNET) $(LINK_SMUGMUGNET)
+REF_FSPOT_EXTENSION_SMUGMUGEXPORT = $(LINK_SMUGMUGNET_DEPS) $(LINK_KEYRING)
+REF_MONO_TABBLO = $(LINK_HYENA_DEPS)
+LINK_MONO_TABBLO = -r:$(DIR_BIN)/Mono.Tabblo.dll
+LINK_MONO_TABBLO_DEPS = $(REF_MONO_TABBLO) $(LINK_MONO_TABBLO)
+REF_FSPOT_EXTENSION_TABBLOEXPORT = $(LINK_FSPOT_DEPS) $(LINK_KEYRING) $(LINK_MONO_TABBLO_DEPS)
+REF_FSPOT_EXTENSION_ZIPEXPORT = $(LINK_FSPOT_DEPS)
+REF_FSPOT_EXTENSION_CHANGEPHOTOPATH = $(LINK_FSPOT_DEPS)
+REF_FSPOT_EXTENSION_DEVELOPINUFRAW = $(LINK_FSPOT_DEPS)
+REF_FSPOT_EXTENSION_HASHJOB = $(LINK_FSPOT_DEPS)
+REF_FSPOT_EXTENSION_LIVEWEBGALLERY = $(LINK_FSPOT_DEPS)
+REF_FSPOT_EXTENSION_MERGEDB = $(LINK_FSPOT_DEPS)
+REF_FSPOT_EXTENSION_RAWPLUSJPEG = $(LINK_FSPOT_DEPS)
+REF_FSPOT_EXTENSION_RETROACTIVEROLL = $(LINK_FSPOT_DEPS)
+REF_FSPOT_EXTENSION_SCREENSAVERCONFIG = $(LINK_FSPOT_DEPS)
+REF_FSPOT_EXTENSION_COVERTRANSITION = $(LINK_FSPOT_DEPS)
+
+# Cute hack to replace a space with something
+colon := :
+empty :=
+space := $(empty) $(empty)
+
+# Build path to allow running uninstalled
+RUN_PATH = $(subst $(space),$(colon), $(MONO_BASE_PATH))
+UNIQUE_FILTER_PIPE = tr [:space:] \\n | sort | uniq
+BUILD_DATA_DIR = $(top_builddir)/bin/share/$(PACKAGE)
+
+# Since all other attempts failed, we currently go this way:
+# This code adds the file specified in ASSEMBLY_INFO_SOURCE to SOURCES_BUILD.
+# If no such file is specified, the default AssemblyInfo.cs is used.
+ASSEMBLY_INFO_SOURCE_REAL = \
+ $(shell if [ "$(ASSEMBLY_INFO_SOURCE)" ]; \
+ then \
+ echo "$(addprefix $(srcdir)/, $(ASSEMBLY_INFO_SOURCE))"; \
+ else \
+ echo "$(top_srcdir)/src/AssemblyInfo.cs"; \
+ fi)
+
+SOURCES_BUILD = $(addprefix $(srcdir)/, $(SOURCES)) \
+ $(ASSEMBLY_INFO_SOURCE_REAL)
+RESOURCES_EXPANDED = $(addprefix $(srcdir)/, $(RESOURCES))
+RESOURCES_BUILD = $(foreach resource, $(RESOURCES_EXPANDED), \
+ -resource:$(resource),$(notdir $(resource)))
+
+INSTALL_ICONS = $(top_srcdir)/build/private-icon-theme-installer "$(mkinstalldirs)" "$(INSTALL_DATA)"
+THEME_ICONS_SOURCE = $(wildcard $(srcdir)/ThemeIcons/*/*/*.png) $(wildcard $(srcdir)/ThemeIcons/scalable/*/*.svg)
+THEME_ICONS_RELATIVE = $(subst $(srcdir)/ThemeIcons/, , $(THEME_ICONS_SOURCE))
+ASSEMBLY_EXTENSION = $(strip $(patsubst library, dll, $(TARGET)))
+ASSEMBLY_FILE = $(top_builddir)/bin/$(ASSEMBLY).$(ASSEMBLY_EXTENSION)
+INSTALL_DIR_RESOLVED = $(firstword $(subst , $(DEFAULT_INSTALL_DIR), $(INSTALL_DIR)))
+ at ENABLE_TESTS_TRUE@ENABLE_TESTS_FLAG = "-define:ENABLE_TESTS"
+ at ENABLE_ATK_TRUE@ENABLE_ATK_FLAG = "-define:ENABLE_ATK"
+FILTERED_LINK = $(shell echo "$(LINK)" | $(UNIQUE_FILTER_PIPE))
+DEP_LINK = $(shell echo "$(LINK)" | $(UNIQUE_FILTER_PIPE) | sed s,-r:,,g | grep '$(top_builddir)/bin/')
+OUTPUT_FILES = \
+ $(ASSEMBLY_FILE) \
+ $(ASSEMBLY_FILE).mdb
+
+moduledir = $(INSTALL_DIR_RESOLVED)
+module_SCRIPTS = $(OUTPUT_FILES)
+EXTRA_DIST = $(SOURCES_BUILD) $(RESOURCES_EXPANDED) $(THEME_ICONS_SOURCE)
+CLEANFILES = $(OUTPUT_FILES) $(ASSEMBLY_FILE).config
+DISTCLEANFILES = *.pidb
+MAINTAINERCLEANFILES = Makefile.in
all: all-recursive
.SUFFIXES:
-$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(top_srcdir)/Makefile.include $(am__configure_deps)
+$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(top_srcdir)/build/build.mk $(top_srcdir)/build/build.environment.mk $(top_srcdir)/build/build.rules.mk $(am__configure_deps)
@for dep in $?; do \
case '$(am__configure_deps)' in \
*$$dep*) \
@@ -424,32 +601,46 @@ $(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps)
$(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps)
cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
$(am__aclocal_m4_deps):
+install-moduleSCRIPTS: $(module_SCRIPTS)
+ @$(NORMAL_INSTALL)
+ test -z "$(moduledir)" || $(MKDIR_P) "$(DESTDIR)$(moduledir)"
+ @list='$(module_SCRIPTS)'; test -n "$(moduledir)" || list=; \
+ for p in $$list; do \
+ if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \
+ if test -f "$$d$$p"; then echo "$$d$$p"; echo "$$p"; else :; fi; \
+ done | \
+ sed -e 'p;s,.*/,,;n' \
+ -e 'h;s|.*|.|' \
+ -e 'p;x;s,.*/,,;$(transform)' | sed 'N;N;N;s,\n, ,g' | \
+ $(AWK) 'BEGIN { files["."] = ""; dirs["."] = 1; } \
+ { d=$$3; if (dirs[d] != 1) { print "d", d; dirs[d] = 1 } \
+ if ($$2 == $$4) { files[d] = files[d] " " $$1; \
+ if (++n[d] == $(am__install_max)) { \
+ print "f", d, files[d]; n[d] = 0; files[d] = "" } } \
+ else { print "f", d "/" $$4, $$1 } } \
+ END { for (d in files) print "f", d, files[d] }' | \
+ while read type dir files; do \
+ if test "$$dir" = .; then dir=; else dir=/$$dir; fi; \
+ test -z "$$files" || { \
+ echo " $(INSTALL_SCRIPT) $$files '$(DESTDIR)$(moduledir)$$dir'"; \
+ $(INSTALL_SCRIPT) $$files "$(DESTDIR)$(moduledir)$$dir" || exit $$?; \
+ } \
+ ; done
+
+uninstall-moduleSCRIPTS:
+ @$(NORMAL_UNINSTALL)
+ @list='$(module_SCRIPTS)'; test -n "$(moduledir)" || exit 0; \
+ files=`for p in $$list; do echo "$$p"; done | \
+ sed -e 's,.*/,,;$(transform)'`; \
+ test -n "$$list" || exit 0; \
+ echo " ( cd '$(DESTDIR)$(moduledir)' && rm -f" $$files ")"; \
+ cd "$(DESTDIR)$(moduledir)" && rm -f $$files
mostlyclean-libtool:
-rm -f *.lo
clean-libtool:
-rm -rf .libs _libs
-install-pluginDATA: $(plugin_DATA)
- @$(NORMAL_INSTALL)
- test -z "$(plugindir)" || $(MKDIR_P) "$(DESTDIR)$(plugindir)"
- @list='$(plugin_DATA)'; test -n "$(plugindir)" || list=; \
- for p in $$list; do \
- if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \
- echo "$$d$$p"; \
- done | $(am__base_list) | \
- while read files; do \
- echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(plugindir)'"; \
- $(INSTALL_DATA) $$files "$(DESTDIR)$(plugindir)" || exit $$?; \
- done
-
-uninstall-pluginDATA:
- @$(NORMAL_UNINSTALL)
- @list='$(plugin_DATA)'; test -n "$(plugindir)" || list=; \
- files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \
- test -n "$$files" || exit 0; \
- echo " ( cd '$(DESTDIR)$(plugindir)' && rm -f" $$files ")"; \
- cd "$(DESTDIR)$(plugindir)" && rm -f $$files
# This directory's subdirectories are mostly independent; you can cd
# into them and run `make' without going through this Makefile.
@@ -646,10 +837,10 @@ distdir: $(DISTFILES)
done
check-am: all-am
check: check-recursive
-all-am: Makefile $(DATA)
+all-am: Makefile $(SCRIPTS)
installdirs: installdirs-recursive
installdirs-am:
- for dir in "$(DESTDIR)$(plugindir)"; do \
+ for dir in "$(DESTDIR)$(moduledir)"; do \
test -z "$$dir" || $(MKDIR_P) "$$dir"; \
done
install: install-recursive
@@ -674,10 +865,12 @@ clean-generic:
distclean-generic:
-test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
-test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES)
+ -test -z "$(DISTCLEANFILES)" || rm -f $(DISTCLEANFILES)
maintainer-clean-generic:
@echo "This command is intended for maintainers to use"
@echo "it deletes files that may require special tools to rebuild."
+ -test -z "$(MAINTAINERCLEANFILES)" || rm -f $(MAINTAINERCLEANFILES)
clean: clean-recursive
clean-am: clean-generic clean-libtool mostlyclean-am
@@ -698,9 +891,8 @@ info: info-recursive
info-am:
-install-data-am: install-pluginDATA
- @$(NORMAL_INSTALL)
- $(MAKE) $(AM_MAKEFLAGS) install-data-hook
+install-data-am: install-data-local install-moduleSCRIPTS
+
install-dvi: install-dvi-recursive
install-dvi-am:
@@ -743,35 +935,75 @@ ps: ps-recursive
ps-am:
-uninstall-am: uninstall-pluginDATA
+uninstall-am: uninstall-local uninstall-moduleSCRIPTS
.MAKE: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) ctags-recursive \
- install-am install-data-am install-strip tags-recursive
+ install-am install-strip tags-recursive
.PHONY: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) CTAGS GTAGS \
all all-am check check-am clean clean-generic clean-libtool \
ctags ctags-recursive distclean 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-data-hook install-dvi install-dvi-am \
+ install-data-am install-data-local 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-pluginDATA install-ps install-ps-am \
+ install-info install-info-am install-man install-moduleSCRIPTS \
+ 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-generic mostlyclean-libtool pdf pdf-am \
ps ps-am tags tags-recursive uninstall uninstall-am \
- uninstall-pluginDATA
-
-
-mpack: $(PLUGIN_ASSEMBLY)
- mautil p $(PLUGIN_ASSEMBLY)
-
-$(PLUGIN_ASSEMBLY): $(PLUGIN_SOURCES) $(PLUGIN_MANIFEST)
- $(CSC_LIB) -out:$@ $(PLUGIN_SOURCES) $(REFS) $(PKGS) $(ASSEMBLIES) $(RESOURCES)
-
-install-data-hook:
- if [ -w $(DESTDIR)$(plugindir)/$(PLUGIN_NAME).addin.xml ] ; then rm -f $(DESTDIR)$(plugindir)/$(PLUGIN_NAME).addin.xml; fi
+ uninstall-local uninstall-moduleSCRIPTS
+
+
+all: $(ASSEMBLY_FILE) theme-icons
+
+run:
+ @pushd $(top_builddir); \
+ make run; \
+ popd;
+
+# uncommented for now.
+# tests are currently excuted from Makefile in $(top_builddir)
+#test:
+# @pushd $(top_builddir)/tests; \
+# make $(ASSEMBLY); \
+# popd;
+
+build-debug:
+ @echo $(DEP_LINK)
+
+$(ASSEMBLY_FILE).mdb: $(ASSEMBLY_FILE)
+
+$(ASSEMBLY_FILE): $(SOURCES_BUILD) $(RESOURCES_EXPANDED) $(DEP_LINK)
+ @mkdir -p $(top_builddir)/bin
+ @if [ ! "x$(ENABLE_RELEASE)" = "xyes" ]; then \
+ $(top_srcdir)/build/dll-map-makefile-verifier $(srcdir)/Makefile.am $(srcdir)/$(notdir $@.config) && \
+ $(MONO) $(top_builddir)/build/dll-map-verifier.exe $(srcdir)/$(notdir $@.config) -iwinmm -ilibbanshee -ilibbnpx11 -ilibc -ilibc.so.6 -iintl -ilibmtp.dll -ilibigemacintegration.dylib -iCFRelease $(SOURCES_BUILD); \
+ fi;
+ $(MCS) \
+ $(GMCS_FLAGS) \
+ $(ASSEMBLY_BUILD_FLAGS) \
+ -nowarn:0278 -nowarn:0078 $$warn \
+ -define:HAVE_GTK_2_10 -define:NET_2_0 \
+ -debug -target:$(TARGET) -out:$@ \
+ $(BUILD_DEFINES) $(ENABLE_TESTS_FLAG) $(ENABLE_ATK_FLAG) \
+ $(FILTERED_LINK) $(RESOURCES_BUILD) $(SOURCES_BUILD)
+ @if [ -e $(srcdir)/$(notdir $@.config) ]; then \
+ cp $(srcdir)/$(notdir $@.config) $(top_builddir)/bin; \
+ fi;
+ @if [ ! -z "$(EXTRA_BUNDLE)" ]; then \
+ cp $(EXTRA_BUNDLE) $(top_builddir)/bin; \
+ fi;
+
+theme-icons: $(THEME_ICONS_SOURCE)
+ @$(INSTALL_ICONS) -il "$(BUILD_DATA_DIR)" "$(srcdir)" $(THEME_ICONS_RELATIVE)
+
+install-data-local: $(THEME_ICONS_SOURCE)
+ @$(INSTALL_ICONS) -i "$(DESTDIR)$(pkgdatadir)" "$(srcdir)" $(THEME_ICONS_RELATIVE)
+
+uninstall-local: $(THEME_ICONS_SOURCE)
+ @$(INSTALL_ICONS) -u "$(DESTDIR)$(pkgdatadir)" "$(srcdir)" $(THEME_ICONS_RELATIVE)
# 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/extensions/Exporters/SmugMugExport/SmugMugExport.cs b/extensions/Exporters/SmugMugExport/SmugMugExport.cs
index 7c935ea..19439b4 100644
--- a/extensions/Exporters/SmugMugExport/SmugMugExport.cs
+++ b/extensions/Exporters/SmugMugExport/SmugMugExport.cs
@@ -23,7 +23,7 @@ using Gtk;
using FSpot;
using FSpot.Filters;
using FSpot.Widgets;
-using FSpot.Utils;
+using Hyena;
using FSpot.UI.Dialog;
using Gnome.Keyring;
@@ -568,7 +568,7 @@ namespace FSpotSmugMugExport {
progress_dialog.Fraction = ((photo_index) / (double) items.Length);
photo_index++;
- FilterRequest request = new FilterRequest (item.DefaultVersionUri);
+ FilterRequest request = new FilterRequest (item.DefaultVersion.Uri);
filters.Convert (request);
diff --git a/extensions/Exporters/SmugMugExport/SmugMugNet/Makefile.am b/extensions/Exporters/SmugMugExport/SmugMugNet/Makefile.am
index 59e236f..dd9899a 100644
--- a/extensions/Exporters/SmugMugExport/SmugMugNet/Makefile.am
+++ b/extensions/Exporters/SmugMugExport/SmugMugNet/Makefile.am
@@ -1,29 +1,12 @@
-include $(top_srcdir)/Makefile.include
+ASSEMBLY = SmugMugNet
+TARGET = library
+LINK = $(REF_SMUGMUGNET)
+INSTALL_DIR = $(EXTENSIONS_INSTALL_DIR)
-ASSEMBLY_NAME = SmugMugNet
+SOURCES = \
+ SmugMugApi.cs \
+ NoCheckCertificatePolicy.cs
-ASSEMBLY_SOURCES = \
- $(srcdir)/SmugMugApi.cs \
- $(srcdir)/NoCheckCertificatePolicy.cs
+RESOURCES =
-REFS = \
- -r:$(top_builddir)/src/FSpot.Utils.dll \
- -r:System.Web
-
-PKGS =
-
-ASSEMBLY = $(ASSEMBLY_NAME).dll
-
-all: $(ASSEMBLY)
-
-$(ASSEMBLY): $(ASSEMBLY_SOURCES)
- $(CSC_LIB) -out:$@ $(PKGS) $(REFS) $(ASSEMBLY_SOURCES)
-
-assemblydir = $(pkglibdir)
-assembly_DATA = $(ASSEMBLY)
-
-EXTRA_DIST = $(ASSEMBLY_SOURCES)
-
-CLEANFILES = \
- $(ASSEMBLY) \
- $(ASSEMBLY).mdb
+include $(top_srcdir)/build/build.mk
diff --git a/extensions/Exporters/SmugMugExport/SmugMugNet/Makefile.in b/extensions/Exporters/SmugMugExport/SmugMugNet/Makefile.in
index 0e5fab2..28eceb2 100644
--- a/extensions/Exporters/SmugMugExport/SmugMugNet/Makefile.in
+++ b/extensions/Exporters/SmugMugExport/SmugMugNet/Makefile.in
@@ -35,13 +35,22 @@ POST_UNINSTALL = :
build_triplet = @build@
host_triplet = @host@
DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in \
- $(top_srcdir)/Makefile.include
+ $(top_srcdir)/build/build.environment.mk \
+ $(top_srcdir)/build/build.mk \
+ $(top_srcdir)/build/build.rules.mk
+ at ENABLE_TESTS_TRUE@am__append_1 = " $(NUNIT_LIBS)"
subdir = extensions/Exporters/SmugMugExport/SmugMugNet
ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
am__aclocal_m4_deps = $(top_srcdir)/build/m4/shave/shave.m4 \
$(top_srcdir)/build/m4/shamrock/expansions.m4 \
+ $(top_srcdir)/build/m4/shamrock/gnome-doc.m4 \
$(top_srcdir)/build/m4/shamrock/mono.m4 \
+ $(top_srcdir)/build/m4/shamrock/nunit.m4 \
$(top_srcdir)/build/m4/shamrock/programs.m4 \
+ $(top_srcdir)/build/m4/f-spot/flickrnet.m4 \
+ $(top_srcdir)/build/m4/f-spot/gnome-keyring-sharp.m4 \
+ $(top_srcdir)/build/m4/f-spot/gtk-sharp.m4 \
+ $(top_srcdir)/build/m4/f-spot/mono-addins.m4 \
$(top_srcdir)/acinclude.m4 $(top_srcdir)/configure.ac
am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
$(ACLOCAL_M4)
@@ -49,8 +58,6 @@ mkinstalldirs = $(install_sh) -d
CONFIG_HEADER = $(top_builddir)/config.h
CONFIG_CLEAN_FILES =
CONFIG_CLEAN_VPATH_FILES =
-SOURCES =
-DIST_SOURCES =
am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`;
am__vpath_adj = case $$p in \
$(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \
@@ -72,8 +79,9 @@ am__nobase_list = $(am__nobase_strip_setup); \
am__base_list = \
sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \
sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g'
-am__installdirs = "$(DESTDIR)$(assemblydir)"
-DATA = $(assembly_DATA)
+am__installdirs = "$(DESTDIR)$(moduledir)"
+SCRIPTS = $(module_SCRIPTS)
+DIST_SOURCES =
DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
ACLOCAL = @ACLOCAL@
ACLOCAL_AMFLAGS = @ACLOCAL_AMFLAGS@
@@ -119,6 +127,8 @@ EXIF_SOVERSION = @EXIF_SOVERSION@
F77 = @F77@
FC = @FC@
FGREP = @FGREP@
+FLICKRNET_CFLAGS = @FLICKRNET_CFLAGS@
+FLICKRNET_LIBS = @FLICKRNET_LIBS@
F_CFLAGS = @F_CFLAGS@
F_LIBS = @F_LIBS@
GAPI2CODEGEN = @GAPI2CODEGEN@
@@ -132,6 +142,8 @@ GCONF_SHARP_LIBS = @GCONF_SHARP_LIBS@
GETTEXT_PACKAGE = @GETTEXT_PACKAGE@
GIO_CFLAGS = @GIO_CFLAGS@
GIO_LIBS = @GIO_LIBS@
+GLIBSHARP_2_12_7_CFLAGS = @GLIBSHARP_2_12_7_CFLAGS@
+GLIBSHARP_2_12_7_LIBS = @GLIBSHARP_2_12_7_LIBS@
GLIBSHARP_CFLAGS = @GLIBSHARP_CFLAGS@
GLIBSHARP_LIBS = @GLIBSHARP_LIBS@
GLIB_CFLAGS = @GLIB_CFLAGS@
@@ -147,6 +159,10 @@ GNOME_SHARP_CFLAGS = @GNOME_SHARP_CFLAGS@
GNOME_SHARP_LIBS = @GNOME_SHARP_LIBS@
GOBJECT_QUERY = @GOBJECT_QUERY@
GREP = @GREP@
+GTKSHARP_A11Y_CFLAGS = @GTKSHARP_A11Y_CFLAGS@
+GTKSHARP_A11Y_LIBS = @GTKSHARP_A11Y_LIBS@
+GTKSHARP_CFLAGS = @GTKSHARP_CFLAGS@
+GTKSHARP_LIBS = @GTKSHARP_LIBS@
HELP_DIR = @HELP_DIR@
ICONS_DIRECTORY = @ICONS_DIRECTORY@
INSTALL = @INSTALL@
@@ -160,14 +176,14 @@ INTLTOOL_EXTRACT = @INTLTOOL_EXTRACT@
INTLTOOL_MERGE = @INTLTOOL_MERGE@
INTLTOOL_PERL = @INTLTOOL_PERL@
INTLTOOL_UPDATE = @INTLTOOL_UPDATE@
+KEYRINGSHARP_CFLAGS = @KEYRINGSHARP_CFLAGS@
+KEYRINGSHARP_LIBS = @KEYRINGSHARP_LIBS@
LCMS_CFLAGS = @LCMS_CFLAGS@
LCMS_LIBS = @LCMS_LIBS@
LD = @LD@
LDFLAGS = @LDFLAGS@
LIBEXIF_VERSION_CHECK_CFLAGS = @LIBEXIF_VERSION_CHECK_CFLAGS@
LIBEXIF_VERSION_CHECK_LIBS = @LIBEXIF_VERSION_CHECK_LIBS@
-LIBGPHOTO2_CFLAGS = @LIBGPHOTO2_CFLAGS@
-LIBGPHOTO2_LIBS = @LIBGPHOTO2_LIBS@
LIBJPEG = @LIBJPEG@
LIBOBJS = @LIBOBJS@
LIBS = @LIBS@
@@ -182,6 +198,12 @@ MCS = @MCS@
MKDIR_P = @MKDIR_P@
MKINSTALLDIRS = @MKINSTALLDIRS@
MONO = @MONO@
+MONO_ADDINS_CFLAGS = @MONO_ADDINS_CFLAGS@
+MONO_ADDINS_GUI_CFLAGS = @MONO_ADDINS_GUI_CFLAGS@
+MONO_ADDINS_GUI_LIBS = @MONO_ADDINS_GUI_LIBS@
+MONO_ADDINS_LIBS = @MONO_ADDINS_LIBS@
+MONO_ADDINS_SETUP_CFLAGS = @MONO_ADDINS_SETUP_CFLAGS@
+MONO_ADDINS_SETUP_LIBS = @MONO_ADDINS_SETUP_LIBS@
MONO_MODULE_CFLAGS = @MONO_MODULE_CFLAGS@
MONO_MODULE_LIBS = @MONO_MODULE_LIBS@
MSGFMT = @MSGFMT@
@@ -192,7 +214,6 @@ NDESK_DBUS_LIBS = @NDESK_DBUS_LIBS@
NM = @NM@
NMEDIT = @NMEDIT@
NUNIT_CFLAGS = @NUNIT_CFLAGS@
-NUNIT_DEFINES = @NUNIT_DEFINES@
NUNIT_LIBS = @NUNIT_LIBS@
OBJC = @OBJC@
OBJDUMP = @OBJDUMP@
@@ -284,51 +305,230 @@ target_alias = @target_alias@
top_build_prefix = @top_build_prefix@
top_builddir = @top_builddir@
top_srcdir = @top_srcdir@
+ASSEMBLY = SmugMugNet
+TARGET = library
+LINK = $(REF_SMUGMUGNET) $(am__append_1)
+INSTALL_DIR = $(EXTENSIONS_INSTALL_DIR)
+SOURCES = \
+ SmugMugApi.cs \
+ NoCheckCertificatePolicy.cs
+
+RESOURCES =
+
+# Initializers
+MONO_BASE_PATH =
+MONO_ADDINS_PATH =
+
+# Install Paths
+DEFAULT_INSTALL_DIR = $(pkglibdir)
+BACKENDS_INSTALL_DIR = $(DEFAULT_INSTALL_DIR)/Backends
+EXTENSIONS_INSTALL_DIR = $(DEFAULT_INSTALL_DIR)/Extensions
DIR_DOCS = $(top_builddir)/docs
DIR_EXTENSIONS = $(top_builddir)/extensions
-DIR_GPHOTO2 = $(top_builddir)/lib/libgphoto2-sharp
DIR_ICONS = $(top_builddir)/icons
DIR_JPEGTRAN = $(top_builddir)/lib/libjpegtran
-DIR_KEYRING = $(top_builddir)/lib/gnome-keyring-sharp
DIR_LIBFSPOT = $(top_builddir)/lib/libfspot
DIR_SEMWEB = $(top_builddir)/lib/semweb
DIR_SRC = $(top_builddir)/src
DIR_GIOSHARP = $(top_builddir)/lib/gio-sharp/gio
DIR_GTKSHARPBEANS = $(top_builddir)/lib/gtk-sharp-beans
DIR_UNIQUESHARP = $(top_builddir)/lib/unique-sharp/unique
-LINK_KEYRING = -r:$(DIR_KEYRING)/gnome-keyring-sharp.dll
-LINK_GPHOTO2 = -r:$(DIR_GPHOTO2)/libgphoto2-sharp.dll
-LINK_SEMWEB = -r:$(DIR_SEMWEB)/SemWeb.dll
-LINK_GIOSHARP = -r:$(DIR_GIOSHARP)/gio-sharp.dll
-LINK_GTKSHARPBEANS = -r:$(DIR_GTKSHARPBEANS)/gtk-sharp-beans.dll
-LINK_UNIQUESHARP = -r:$(DIR_UNIQUESHARP)/unique-sharp.dll
-CSC_FLAGS = -debug
-CSC = $(MCS) $(CSC_FLAGS) -target:exe
-CSC_LIB = $(MCS) $(CSC_FLAGS) -target:library
-MONO_DEBUGFLAGS = --debug
-RUNTIME = mono $(MONO_DEBUGFLAGS)
-ASSEMBLY_NAME = SmugMugNet
-ASSEMBLY_SOURCES = \
- $(srcdir)/SmugMugApi.cs \
- $(srcdir)/NoCheckCertificatePolicy.cs
-
-REFS = \
- -r:$(top_builddir)/src/FSpot.Utils.dll \
- -r:System.Web
-
-PKGS =
-ASSEMBLY = $(ASSEMBLY_NAME).dll
-assemblydir = $(pkglibdir)
-assembly_DATA = $(ASSEMBLY)
-EXTRA_DIST = $(ASSEMBLY_SOURCES)
-CLEANFILES = \
- $(ASSEMBLY) \
- $(ASSEMBLY).mdb
-
+DIR_BIN = $(top_builddir)/bin
+
+# External libraries to link against, generated from configure
+LINK_SYSTEM = -r:System
+LINK_SYSTEMDATA = -r:System.Data
+LINK_SYSTEM_WEB = -r:System.Web
+LINK_MONO_POSIX = -r:Mono.Posix
+LINK_MONO_CAIRO = -r:Mono.Cairo
+LINK_MONO_SIMD = -r:Mono.Simd
+LINK_MONODATA = -r:Mono.Data
+LINK_MONO_DATA_SQLITECLIENT = -r:Mono.Data.SqliteClient
+LINK_ICSHARP_ZIP_LIB = -r:ICSharpCode.SharpZipLib
+LINK_KEYRING = $(KEYRINGSHARP_LIBS)
+LINK_GLIB = $(GLIBSHARP_LIBS)
+LINK_GTK = $(GTKSHARP_LIBS)
+LINK_GNOME = $(GNOME_SHARP_LIBS)
+LINK_GCONF = $(GCONF_SHARP_LIBS)
+LINK_GLADE = -pkg:glade-sharp-2.0
+LINK_FLICKRNET = -pkg:flickrnet
+LINK_DBUS = $(NDESK_DBUS_LIBS) $(NDESK_DBUS_GLIB_LIBS)
+LINK_DBUS_NO_GLIB = $(NDESK_DBUS_LIBS)
+LINK_MONO_ADDINS_DEPS = $(MONO_ADDINS_LIBS)
+LINK_MONO_ADDINS_SETUP_DEPS = $(MONO_ADDINS_SETUP_LIBS)
+LINK_MONO_ADDINS_GUI_DEPS = $(MONO_ADDINS_GUI_LIBS)
+
+# GIO
+REF_GIO =
+LINK_GIO = -r:$(DIR_GIOSHARP)/gio-sharp.dll
+LINK_GIO_DEPS = $(REF_GIO) $(LINK_GIO)
+
+# Gtk Beans
+REF_GTK_BEANS = $(LINK_GIO_DEPS)
+LINK_GTK_BEANS = -r:$(DIR_GTKSHARPBEANS)/gtk-sharp-beans.dll
+LINK_GTK_BEANS_DEPS = $(REF_GTK_BEANS) $(LINK_GTK_BEANS)
+
+# Uniqe
+REF_UNIQUE =
+LINK_UNIQUE = -r:$(DIR_UNIQUESHARP)/unique-sharp.dll
+LINK_UNIQUE_DEPS = $(REF_UNIQUE) $(LINK_UNIQUE)
+
+# Hyena
+REF_HYENA = $(LINK_SYSTEM) $(LINK_MONO_POSIX)
+LINK_HYENA = -r:$(DIR_BIN)/Hyena.dll
+LINK_HYENA_DEPS = $(REF_HYENA) $(LINK_HYENA)
+
+# Semweb
+REF_SEMWEB = $(LINK_SYSTEMDATA) $(LINK_HYENA_DEPS)
+LINK_SEMWEB = -r:$(DIR_BIN)/SemWeb.dll
+LINK_SEMWEB_DEPS = $(REF_SEMWEB) $(LINK_SEMWEB)
+
+# Hyena.Data.Sqlite
+REF_HYENA_DATA_SQLITE = $(LINK_SQLITE)
+LINK_HYENA_DATA_SQLITE = -r:$(DIR_BIN)/Hyena.Data.Sqlite.dll
+LINK_HYENA_DATA_SQLITE_DEPS = $(REF_HYENA_DATA_SQLITE) $(LINK_HYENA_DATA_SQLITE)
+
+# Hyena.Gui
+REF_HYENA_GUI = $(LINK_HYENA_DEPS)
+LINK_HYENA_GUI = -r:$(DIR_BIN)/Hyena.Gui.dll
+LINK_HENA_GUI_DEPS = $(REF_HYENA_GUI) $(LINK_HYENA_GUI)
+
+# FSpot.Cms
+REF_FSPOT_CMS = $(LINK_GTK)
+LINK_FSPOT_CMS = -r:$(DIR_BIN)/FSpot.Cms.dll
+LINK_FSPOT_CMS_DEPS = $(REF_FSPOT_CMS) $(LINK_FSPOT_CMS)
+
+# FSpot.Utils
+REF_FSPOT_UTILS = $(LINK_HYENA_DEPS) $(LINK_GTK) $(LINK_GIO) $(LINK_MONO_CAIRO)
+LINK_FSPOT_UTILS = -r:$(DIR_BIN)/FSpot.Utils.dll
+LINK_FSPOT_UTILS_DEPS = $(REF_FSPOT_UTILS) $(LINK_FSPOT_UTILS)
+
+# FSpot.Core
+REF_FSPOT_CORE = $(LINK_FSPOT_UTILS_DEPS) $(LINK_FSPOT_CMS_DEPS)
+LINK_FSPOT_CORE = -r:$(DIR_BIN)/FSpot.Core.dll
+LINK_FSPOT_CORE_DEPS = $(REF_FSPOT_CORE) $(LINK_FSPOT_CORE)
+
+# FSpot.Query
+REF_FSPOT_QUERY = $(LINK_FSPOT_CORE_DEPS)
+LINK_FSPOT_QUERY = -r:$(DIR_BIN)/FSpot.Query.dll
+LINK_FSPOT_QUERY_DEPS = $(REF_FSPOT_QUERY) $(LINK_FSPOT_QUERY)
+
+# FSpot.JobScheduler
+REF_FSPOT_JOB_SCHEDULER = $(LINK_HYENA_DEPS)
+LINK_FSPOT_JOB_SCHEDULER = -r:$(DIR_BIN)/FSpot.JobScheduler.dll
+LINK_FSPOT_JOB_SCHEDULER_DEPS = $(REF_FSPOT_JOB_SCHEDULER) $(LINK_FSPOT_JOB_SCHEDULER)
+
+# FSpot.Bling
+REF_FSPOT_BLING = $(LINK_GTK_BEANS_DEPS) $(LINK_GLIB)
+LINK_FSPOT_BLING = -r:$(DIR_BIN)/FSpot.Bling.dll
+LINK_FSPOT_BLING_DEPS = $(REF_FSPOT_BLING) $(LINK_FSPOT_BLING)
+
+# FSpot.Platform
+REF_FSPOT_PLATFORM = $(LINK_GCONF) $(LINK_GTK) $(LINK_FSPOT_CORE_DEPS) $(LINK_DBUS)
+LINK_FSPOT_PLATFORM = -r:$(DIR_BIN)/FSpot.Platform.dll
+LINK_FSPOT_PLATFORM_DEPS = $(REF_FSPOT_PLATFORM) $(LINK_FSPOT_PLATFORM)
+
+# FSpot.Widgets
+REF_FSPOT_WIDGETS = $(LINK_FSPOT_CORE_DEPS) $(LINK_FSPOT_BLING_DEPS)
+LINK_FSPOT_WIDGETS = -r:$(DIR_BIN)/FSpot.Widgets.dll
+LINK_FSPOT_WIDGETS_DEPS = $(REF_FSPOT_WIDGETS) $(LINK_FSPOT_WIDGETS)
+
+# FSpot (executable)
+REF_FSPOT = $(LINK_FSPOT_WIDGETS_DEPS) $(LINK_FSPOT_PLATFORM_DEPS) $(LINK_FSPOT_QUERY_DEPS) \
+ $(LINK_GLIB) $(LINK_MONO_ADDINS_DEPS) $(LINK_UNIQUE_DEPS) $(LINK_MONO_ADDINS_SETUP_DEPS) \
+ $(LINK_SEMWEB_DEPS) $(LINK_GLADE) $(LINK_MONODATA) $(LINK_MONO_DATA_SQLITECLIENT) \
+ $(LINK_MONO_ADDINS_GUI_DEPS) $(LINK_FSPOT_JOB_SCHEDULER_DEPS) $(LINK_ICSHARP_ZIP_LIB) \
+ $(LINK_GNOME)
+
+# FIXME: do not link executables
+LINK_FSPOT = -r:$(DIR_BIN)/f-spot.exe
+LINK_FSPOT_DEPS = $(REF_FSPOT) $(LINK_FSPOT)
+
+# Extensions
+REF_FSPOT_EXTENSION_BLACKOUTEDITOR = $(LINK_FSPOT_DEPS)
+REF_FSPOT_EXTENSION_BWEDITOR = $(LINK_FSPOT_DEPS) $(LINK_MONO_SIMD)
+REF_FSPOT_EXTENSION_FLIPEDITOR = $(LINK_FSPOT_DEPS)
+REF_FSPOT_EXTENSION_PIXELATEEDITOR = $(LINK_FSPOT_DEPS)
+REF_FSPOT_EXTENSION_RESIZEEDITOR = $(LINK_FSPOT_DEPS)
+REF_FSPOT_EXTENSION_CDEXPORT = $(LINK_FSPOT_DEPS)
+REF_FSPOT_EXTENSION_FACEBOOKEXPORT = $(LINK_FSPOT_DEPS) $(LINK_KEYRING)
+REF_FSPOT_EXTENSION_FLICKREXPORT = $(LINK_FSPOT_DEPS) $(LINK_FLICKRNET)
+REF_FSPOT_EXTENSION_FOLDEREXPORT = $(LINK_FSPOT_DEPS) $(LINK_SYSTEM_WEB)
+REF_FSPOT_EXTENSION_GALLERYEXPORT = $(LINK_FSPOT_DEPS)
+REF_MONO_GOOGLE = $(LINK_HYENA_DEPS)
+LINK_MONO_GOOGLE = -r:$(DIR_BIN)/Mono.Google.dll
+LINK_MONO_GOOGLE_DEPS = $(REF_MONO_GOOGLE) $(LINK_MONO_GOOGLE)
+REF_FSPOT_EXTENSION_PICASAWEBEXPORT = $(LINK_FSPOT_DEPS) $(LINK_MONO_GOOGLE) $(LINK_KEYRING)
+REF_SMUGMUGNET = $(LINK_FSPOT_DEPS)
+LINK_SMUGMUGNET = -r:$(DIR_BIN)/SmugMugNet.dll
+LINK_SMUGMUGNET_DEPS = $(REF_SMUGMUGNET) $(LINK_SMUGMUGNET)
+REF_FSPOT_EXTENSION_SMUGMUGEXPORT = $(LINK_SMUGMUGNET_DEPS) $(LINK_KEYRING)
+REF_MONO_TABBLO = $(LINK_HYENA_DEPS)
+LINK_MONO_TABBLO = -r:$(DIR_BIN)/Mono.Tabblo.dll
+LINK_MONO_TABBLO_DEPS = $(REF_MONO_TABBLO) $(LINK_MONO_TABBLO)
+REF_FSPOT_EXTENSION_TABBLOEXPORT = $(LINK_FSPOT_DEPS) $(LINK_KEYRING) $(LINK_MONO_TABBLO_DEPS)
+REF_FSPOT_EXTENSION_ZIPEXPORT = $(LINK_FSPOT_DEPS)
+REF_FSPOT_EXTENSION_CHANGEPHOTOPATH = $(LINK_FSPOT_DEPS)
+REF_FSPOT_EXTENSION_DEVELOPINUFRAW = $(LINK_FSPOT_DEPS)
+REF_FSPOT_EXTENSION_HASHJOB = $(LINK_FSPOT_DEPS)
+REF_FSPOT_EXTENSION_LIVEWEBGALLERY = $(LINK_FSPOT_DEPS)
+REF_FSPOT_EXTENSION_MERGEDB = $(LINK_FSPOT_DEPS)
+REF_FSPOT_EXTENSION_RAWPLUSJPEG = $(LINK_FSPOT_DEPS)
+REF_FSPOT_EXTENSION_RETROACTIVEROLL = $(LINK_FSPOT_DEPS)
+REF_FSPOT_EXTENSION_SCREENSAVERCONFIG = $(LINK_FSPOT_DEPS)
+REF_FSPOT_EXTENSION_COVERTRANSITION = $(LINK_FSPOT_DEPS)
+
+# Cute hack to replace a space with something
+colon := :
+empty :=
+space := $(empty) $(empty)
+
+# Build path to allow running uninstalled
+RUN_PATH = $(subst $(space),$(colon), $(MONO_BASE_PATH))
+UNIQUE_FILTER_PIPE = tr [:space:] \\n | sort | uniq
+BUILD_DATA_DIR = $(top_builddir)/bin/share/$(PACKAGE)
+
+# Since all other attempts failed, we currently go this way:
+# This code adds the file specified in ASSEMBLY_INFO_SOURCE to SOURCES_BUILD.
+# If no such file is specified, the default AssemblyInfo.cs is used.
+ASSEMBLY_INFO_SOURCE_REAL = \
+ $(shell if [ "$(ASSEMBLY_INFO_SOURCE)" ]; \
+ then \
+ echo "$(addprefix $(srcdir)/, $(ASSEMBLY_INFO_SOURCE))"; \
+ else \
+ echo "$(top_srcdir)/src/AssemblyInfo.cs"; \
+ fi)
+
+SOURCES_BUILD = $(addprefix $(srcdir)/, $(SOURCES)) \
+ $(ASSEMBLY_INFO_SOURCE_REAL)
+RESOURCES_EXPANDED = $(addprefix $(srcdir)/, $(RESOURCES))
+RESOURCES_BUILD = $(foreach resource, $(RESOURCES_EXPANDED), \
+ -resource:$(resource),$(notdir $(resource)))
+
+INSTALL_ICONS = $(top_srcdir)/build/private-icon-theme-installer "$(mkinstalldirs)" "$(INSTALL_DATA)"
+THEME_ICONS_SOURCE = $(wildcard $(srcdir)/ThemeIcons/*/*/*.png) $(wildcard $(srcdir)/ThemeIcons/scalable/*/*.svg)
+THEME_ICONS_RELATIVE = $(subst $(srcdir)/ThemeIcons/, , $(THEME_ICONS_SOURCE))
+ASSEMBLY_EXTENSION = $(strip $(patsubst library, dll, $(TARGET)))
+ASSEMBLY_FILE = $(top_builddir)/bin/$(ASSEMBLY).$(ASSEMBLY_EXTENSION)
+INSTALL_DIR_RESOLVED = $(firstword $(subst , $(DEFAULT_INSTALL_DIR), $(INSTALL_DIR)))
+ at ENABLE_TESTS_TRUE@ENABLE_TESTS_FLAG = "-define:ENABLE_TESTS"
+ at ENABLE_ATK_TRUE@ENABLE_ATK_FLAG = "-define:ENABLE_ATK"
+FILTERED_LINK = $(shell echo "$(LINK)" | $(UNIQUE_FILTER_PIPE))
+DEP_LINK = $(shell echo "$(LINK)" | $(UNIQUE_FILTER_PIPE) | sed s,-r:,,g | grep '$(top_builddir)/bin/')
+OUTPUT_FILES = \
+ $(ASSEMBLY_FILE) \
+ $(ASSEMBLY_FILE).mdb
+
+moduledir = $(INSTALL_DIR_RESOLVED)
+module_SCRIPTS = $(OUTPUT_FILES)
+EXTRA_DIST = $(SOURCES_BUILD) $(RESOURCES_EXPANDED) $(THEME_ICONS_SOURCE)
+CLEANFILES = $(OUTPUT_FILES) $(ASSEMBLY_FILE).config
+DISTCLEANFILES = *.pidb
+MAINTAINERCLEANFILES = Makefile.in
all: all-am
.SUFFIXES:
-$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(top_srcdir)/Makefile.include $(am__configure_deps)
+$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(top_srcdir)/build/build.mk $(top_srcdir)/build/build.environment.mk $(top_srcdir)/build/build.rules.mk $(am__configure_deps)
@for dep in $?; do \
case '$(am__configure_deps)' in \
*$$dep*) \
@@ -358,32 +558,46 @@ $(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps)
$(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps)
cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
$(am__aclocal_m4_deps):
+install-moduleSCRIPTS: $(module_SCRIPTS)
+ @$(NORMAL_INSTALL)
+ test -z "$(moduledir)" || $(MKDIR_P) "$(DESTDIR)$(moduledir)"
+ @list='$(module_SCRIPTS)'; test -n "$(moduledir)" || list=; \
+ for p in $$list; do \
+ if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \
+ if test -f "$$d$$p"; then echo "$$d$$p"; echo "$$p"; else :; fi; \
+ done | \
+ sed -e 'p;s,.*/,,;n' \
+ -e 'h;s|.*|.|' \
+ -e 'p;x;s,.*/,,;$(transform)' | sed 'N;N;N;s,\n, ,g' | \
+ $(AWK) 'BEGIN { files["."] = ""; dirs["."] = 1; } \
+ { d=$$3; if (dirs[d] != 1) { print "d", d; dirs[d] = 1 } \
+ if ($$2 == $$4) { files[d] = files[d] " " $$1; \
+ if (++n[d] == $(am__install_max)) { \
+ print "f", d, files[d]; n[d] = 0; files[d] = "" } } \
+ else { print "f", d "/" $$4, $$1 } } \
+ END { for (d in files) print "f", d, files[d] }' | \
+ while read type dir files; do \
+ if test "$$dir" = .; then dir=; else dir=/$$dir; fi; \
+ test -z "$$files" || { \
+ echo " $(INSTALL_SCRIPT) $$files '$(DESTDIR)$(moduledir)$$dir'"; \
+ $(INSTALL_SCRIPT) $$files "$(DESTDIR)$(moduledir)$$dir" || exit $$?; \
+ } \
+ ; done
+
+uninstall-moduleSCRIPTS:
+ @$(NORMAL_UNINSTALL)
+ @list='$(module_SCRIPTS)'; test -n "$(moduledir)" || exit 0; \
+ files=`for p in $$list; do echo "$$p"; done | \
+ sed -e 's,.*/,,;$(transform)'`; \
+ test -n "$$list" || exit 0; \
+ echo " ( cd '$(DESTDIR)$(moduledir)' && rm -f" $$files ")"; \
+ cd "$(DESTDIR)$(moduledir)" && rm -f $$files
mostlyclean-libtool:
-rm -f *.lo
clean-libtool:
-rm -rf .libs _libs
-install-assemblyDATA: $(assembly_DATA)
- @$(NORMAL_INSTALL)
- test -z "$(assemblydir)" || $(MKDIR_P) "$(DESTDIR)$(assemblydir)"
- @list='$(assembly_DATA)'; test -n "$(assemblydir)" || list=; \
- for p in $$list; do \
- if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \
- echo "$$d$$p"; \
- done | $(am__base_list) | \
- while read files; do \
- echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(assemblydir)'"; \
- $(INSTALL_DATA) $$files "$(DESTDIR)$(assemblydir)" || exit $$?; \
- done
-
-uninstall-assemblyDATA:
- @$(NORMAL_UNINSTALL)
- @list='$(assembly_DATA)'; test -n "$(assemblydir)" || list=; \
- files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \
- test -n "$$files" || exit 0; \
- echo " ( cd '$(DESTDIR)$(assemblydir)' && rm -f" $$files ")"; \
- cd "$(DESTDIR)$(assemblydir)" && rm -f $$files
tags: TAGS
TAGS:
@@ -423,9 +637,9 @@ distdir: $(DISTFILES)
done
check-am: all-am
check: check-am
-all-am: Makefile $(DATA)
+all-am: Makefile $(SCRIPTS)
installdirs:
- for dir in "$(DESTDIR)$(assemblydir)"; do \
+ for dir in "$(DESTDIR)$(moduledir)"; do \
test -z "$$dir" || $(MKDIR_P) "$$dir"; \
done
install: install-am
@@ -450,10 +664,12 @@ clean-generic:
distclean-generic:
-test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
-test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES)
+ -test -z "$(DISTCLEANFILES)" || rm -f $(DISTCLEANFILES)
maintainer-clean-generic:
@echo "This command is intended for maintainers to use"
@echo "it deletes files that may require special tools to rebuild."
+ -test -z "$(MAINTAINERCLEANFILES)" || rm -f $(MAINTAINERCLEANFILES)
clean: clean-am
clean-am: clean-generic clean-libtool mostlyclean-am
@@ -474,7 +690,7 @@ info: info-am
info-am:
-install-data-am: install-assemblyDATA
+install-data-am: install-data-local install-moduleSCRIPTS
install-dvi: install-dvi-am
@@ -518,27 +734,72 @@ ps: ps-am
ps-am:
-uninstall-am: uninstall-assemblyDATA
+uninstall-am: uninstall-local uninstall-moduleSCRIPTS
.MAKE: install-am install-strip
.PHONY: all all-am check check-am clean clean-generic clean-libtool \
distclean distclean-generic distclean-libtool distdir dvi \
dvi-am html html-am info info-am install install-am \
- install-assemblyDATA install-data install-data-am install-dvi \
+ install-data install-data-am install-data-local 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-generic mostlyclean-libtool pdf pdf-am ps ps-am \
- uninstall uninstall-am uninstall-assemblyDATA
-
-
-all: $(ASSEMBLY)
-
-$(ASSEMBLY): $(ASSEMBLY_SOURCES)
- $(CSC_LIB) -out:$@ $(PKGS) $(REFS) $(ASSEMBLY_SOURCES)
+ install-moduleSCRIPTS install-pdf install-pdf-am install-ps \
+ install-ps-am install-strip installcheck installcheck-am \
+ installdirs maintainer-clean maintainer-clean-generic \
+ mostlyclean mostlyclean-generic mostlyclean-libtool pdf pdf-am \
+ ps ps-am uninstall uninstall-am uninstall-local \
+ uninstall-moduleSCRIPTS
+
+
+all: $(ASSEMBLY_FILE) theme-icons
+
+run:
+ @pushd $(top_builddir); \
+ make run; \
+ popd;
+
+# uncommented for now.
+# tests are currently excuted from Makefile in $(top_builddir)
+#test:
+# @pushd $(top_builddir)/tests; \
+# make $(ASSEMBLY); \
+# popd;
+
+build-debug:
+ @echo $(DEP_LINK)
+
+$(ASSEMBLY_FILE).mdb: $(ASSEMBLY_FILE)
+
+$(ASSEMBLY_FILE): $(SOURCES_BUILD) $(RESOURCES_EXPANDED) $(DEP_LINK)
+ @mkdir -p $(top_builddir)/bin
+ @if [ ! "x$(ENABLE_RELEASE)" = "xyes" ]; then \
+ $(top_srcdir)/build/dll-map-makefile-verifier $(srcdir)/Makefile.am $(srcdir)/$(notdir $@.config) && \
+ $(MONO) $(top_builddir)/build/dll-map-verifier.exe $(srcdir)/$(notdir $@.config) -iwinmm -ilibbanshee -ilibbnpx11 -ilibc -ilibc.so.6 -iintl -ilibmtp.dll -ilibigemacintegration.dylib -iCFRelease $(SOURCES_BUILD); \
+ fi;
+ $(MCS) \
+ $(GMCS_FLAGS) \
+ $(ASSEMBLY_BUILD_FLAGS) \
+ -nowarn:0278 -nowarn:0078 $$warn \
+ -define:HAVE_GTK_2_10 -define:NET_2_0 \
+ -debug -target:$(TARGET) -out:$@ \
+ $(BUILD_DEFINES) $(ENABLE_TESTS_FLAG) $(ENABLE_ATK_FLAG) \
+ $(FILTERED_LINK) $(RESOURCES_BUILD) $(SOURCES_BUILD)
+ @if [ -e $(srcdir)/$(notdir $@.config) ]; then \
+ cp $(srcdir)/$(notdir $@.config) $(top_builddir)/bin; \
+ fi;
+ @if [ ! -z "$(EXTRA_BUNDLE)" ]; then \
+ cp $(EXTRA_BUNDLE) $(top_builddir)/bin; \
+ fi;
+
+theme-icons: $(THEME_ICONS_SOURCE)
+ @$(INSTALL_ICONS) -il "$(BUILD_DATA_DIR)" "$(srcdir)" $(THEME_ICONS_RELATIVE)
+
+install-data-local: $(THEME_ICONS_SOURCE)
+ @$(INSTALL_ICONS) -i "$(DESTDIR)$(pkgdatadir)" "$(srcdir)" $(THEME_ICONS_RELATIVE)
+
+uninstall-local: $(THEME_ICONS_SOURCE)
+ @$(INSTALL_ICONS) -u "$(DESTDIR)$(pkgdatadir)" "$(srcdir)" $(THEME_ICONS_RELATIVE)
# 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/extensions/Exporters/SmugMugExport/SmugMugNet/SmugMugApi.cs b/extensions/Exporters/SmugMugExport/SmugMugNet/SmugMugApi.cs
index 196d487..8947282 100644
--- a/extensions/Exporters/SmugMugExport/SmugMugNet/SmugMugApi.cs
+++ b/extensions/Exporters/SmugMugExport/SmugMugNet/SmugMugApi.cs
@@ -18,6 +18,7 @@ using System.Text.RegularExpressions;
using System.Xml;
using System.Collections.Specialized;
using FSpot.Utils;
+using Hyena;
namespace SmugMugNet
{
diff --git a/extensions/Exporters/TabbloExport/ApplicationCentricCertificatePolicy.cs b/extensions/Exporters/TabbloExport/ApplicationCentricCertificatePolicy.cs
index f5abfd7..ef100d7 100644
--- a/extensions/Exporters/TabbloExport/ApplicationCentricCertificatePolicy.cs
+++ b/extensions/Exporters/TabbloExport/ApplicationCentricCertificatePolicy.cs
@@ -37,7 +37,7 @@ using System.Runtime.Serialization;
using System.Runtime.Serialization.Formatters.Binary;
using System.Security.Cryptography.X509Certificates;
-using FSpot.Utils;
+using Hyena;
namespace FSpotTabbloExport {
@@ -62,7 +62,7 @@ namespace FSpotTabbloExport {
WebRequest request,
int problem)
{
- Log.Debug ("Checking validation result for {0}: "
+ Log.DebugFormat ("Checking validation result for {0}: "
+ "problem={1}",
request.RequestUri, problem);
diff --git a/extensions/Exporters/TabbloExport/BlindTrustCertificatePolicy.cs b/extensions/Exporters/TabbloExport/BlindTrustCertificatePolicy.cs
index cfe157e..3046d15 100644
--- a/extensions/Exporters/TabbloExport/BlindTrustCertificatePolicy.cs
+++ b/extensions/Exporters/TabbloExport/BlindTrustCertificatePolicy.cs
@@ -30,7 +30,7 @@
using System.Net;
using System.Security.Cryptography.X509Certificates;
-using FSpot.Utils;
+using Hyena;
namespace FSpotTabbloExport {
class BlindTrustCertificatePolicy : ICertificatePolicy {
diff --git a/extensions/Exporters/TabbloExport/FSpotTraceListener.cs b/extensions/Exporters/TabbloExport/FSpotTraceListener.cs
index a094d3b..a7484c1 100644
--- a/extensions/Exporters/TabbloExport/FSpotTraceListener.cs
+++ b/extensions/Exporters/TabbloExport/FSpotTraceListener.cs
@@ -27,13 +27,15 @@
// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
//
+using Hyena;
+
namespace FSpotTabbloExport {
class FSpotTraceListener : System.Diagnostics.TraceListener {
public override void Write (string message)
{
- FSpot.Utils.Log.Debug ("Mono.Tabblo", message);
+ Log.Debug ("Mono.Tabblo", message);
}
public override void WriteLine (string message)
diff --git a/extensions/Exporters/TabbloExport/Makefile.am b/extensions/Exporters/TabbloExport/Makefile.am
index 056be8d..94a5d32 100644
--- a/extensions/Exporters/TabbloExport/Makefile.am
+++ b/extensions/Exporters/TabbloExport/Makefile.am
@@ -1,70 +1,26 @@
-include $(top_srcdir)/Makefile.include
+ASSEMBLY = FSpot.Exporters.TabbloExport
+TARGET = library
+LINK = $(REF_FSPOT_EXTENSION_TABBLOEXPORT)
+INSTALL_DIR = $(EXTENSIONS_INSTALL_DIR)
+
+SOURCES = \
+ ApplicationCentricCertificatePolicy.cs \
+ BlindTrustCertificatePolicy.cs \
+ FSpotTraceListener.cs \
+ FSpotUploadProgress.cs \
+ TabbloExport.cs \
+ TabbloExportModel.cs \
+ TabbloExportView.cs \
+ UserDecisionCertificatePolicy.cs
-PLUGIN_NAME = TabbloExport
-
-PLUGIN_MANIFEST = $(PLUGIN_NAME).addin.xml
-
-PLUGIN_ASSEMBLY = $(PLUGIN_NAME).dll
-
-PLUGIN_SOURCES = \
- $(srcdir)/ApplicationCentricCertificatePolicy.cs \
- $(srcdir)/AssemblyInfo.cs \
- $(srcdir)/BlindTrustCertificatePolicy.cs \
- $(srcdir)/FSpotTraceListener.cs \
- $(srcdir)/FSpotUploadProgress.cs \
- $(srcdir)/TabbloExport.cs \
- $(srcdir)/TabbloExportModel.cs \
- $(srcdir)/TabbloExportView.cs \
- $(srcdir)/UserDecisionCertificatePolicy.cs
-
-PLUGIN_INPUT = \
- $(PLUGIN_SOURCES) \
- $(PLUGIN_MANIFEST) \
- ui/$(PLUGIN_NAME).ui \
+RESOURCES = \
+ TabbloExport.addin.xml \
+ ui/TabbloExport.ui \
ui/TrustError.ui
-
-REFS = \
- -r:$(top_builddir)/src/f-spot.exe \
- -r:$(top_builddir)/src/FSpot.Core.dll \
- -r:$(top_builddir)/src/FSpot.Utils.dll \
- -r:Tabblo/Mono.Tabblo.dll \
- $(LINK_KEYRING) \
- $(LINK_SEMWEB) \
- $(LINK_GIOSHARP) \
- $(LINK_GTKSHARPBEANS) \
- $(LINK_GPHOTO2) \
- $(LINK_UNIQUESHARP) \
- -r:Mono.Posix.dll
-
-PKGS = \
- -pkg:gtk-sharp-2.0
+ASSEMBLY_INFO_SOURCE = AssemblyInfo.cs
SUBDIRS = \
Tabblo
-RESOURCES = \
- -resource:$(srcdir)/$(PLUGIN_MANIFEST) \
- -resource:$(srcdir)/ui/$(PLUGIN_NAME).ui \
- -resource:$(srcdir)/ui/TrustError.ui
-
-mpack: $(PLUGIN_ASSEMBLY)
- mautil p $(PLUGIN_ASSEMBLY)
-
-$(PLUGIN_ASSEMBLY): $(PLUGIN_INPUT)
- $(CSC_LIB) -out:$@ $(PLUGIN_SOURCES) $(REFS) $(PKGS) $(ASSEMBLIES) $(RESOURCES)
-
-plugindir = $(pkglibdir)/extensions
-
-install-data-hook:
- if [ -w $(DESTDIR)$(plugindir)/$(PLUGIN_NAME).addin.xml ] ; then rm -f $(DESTDIR)$(plugindir)/$(PLUGIN_NAME).addin.xml; fi
-
-plugin_DATA = \
- $(PLUGIN_ASSEMBLY)
-
-EXTRA_DIST = $(PLUGIN_INPUT)
-
-CLEANFILES = \
- $(PLUGIN_ASSEMBLY) \
- $(PLUGIN_ASSEMBLY).mdb \
- *.mpack
+include $(top_srcdir)/build/build.mk
diff --git a/extensions/Exporters/TabbloExport/Makefile.in b/extensions/Exporters/TabbloExport/Makefile.in
index 04dde6d..9271366 100644
--- a/extensions/Exporters/TabbloExport/Makefile.in
+++ b/extensions/Exporters/TabbloExport/Makefile.in
@@ -35,13 +35,22 @@ POST_UNINSTALL = :
build_triplet = @build@
host_triplet = @host@
DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in \
- $(top_srcdir)/Makefile.include
+ $(top_srcdir)/build/build.environment.mk \
+ $(top_srcdir)/build/build.mk \
+ $(top_srcdir)/build/build.rules.mk
+ at ENABLE_TESTS_TRUE@am__append_1 = " $(NUNIT_LIBS)"
subdir = extensions/Exporters/TabbloExport
ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
am__aclocal_m4_deps = $(top_srcdir)/build/m4/shave/shave.m4 \
$(top_srcdir)/build/m4/shamrock/expansions.m4 \
+ $(top_srcdir)/build/m4/shamrock/gnome-doc.m4 \
$(top_srcdir)/build/m4/shamrock/mono.m4 \
+ $(top_srcdir)/build/m4/shamrock/nunit.m4 \
$(top_srcdir)/build/m4/shamrock/programs.m4 \
+ $(top_srcdir)/build/m4/f-spot/flickrnet.m4 \
+ $(top_srcdir)/build/m4/f-spot/gnome-keyring-sharp.m4 \
+ $(top_srcdir)/build/m4/f-spot/gtk-sharp.m4 \
+ $(top_srcdir)/build/m4/f-spot/mono-addins.m4 \
$(top_srcdir)/acinclude.m4 $(top_srcdir)/configure.ac
am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
$(ACLOCAL_M4)
@@ -49,15 +58,6 @@ mkinstalldirs = $(install_sh) -d
CONFIG_HEADER = $(top_builddir)/config.h
CONFIG_CLEAN_FILES =
CONFIG_CLEAN_VPATH_FILES =
-SOURCES =
-DIST_SOURCES =
-RECURSIVE_TARGETS = all-recursive check-recursive dvi-recursive \
- html-recursive info-recursive install-data-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
am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`;
am__vpath_adj = case $$p in \
$(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \
@@ -79,8 +79,16 @@ am__nobase_list = $(am__nobase_strip_setup); \
am__base_list = \
sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \
sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g'
-am__installdirs = "$(DESTDIR)$(plugindir)"
-DATA = $(plugin_DATA)
+am__installdirs = "$(DESTDIR)$(moduledir)"
+SCRIPTS = $(module_SCRIPTS)
+DIST_SOURCES =
+RECURSIVE_TARGETS = all-recursive check-recursive dvi-recursive \
+ html-recursive info-recursive install-data-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
AM_RECURSIVE_TARGETS = $(RECURSIVE_TARGETS:-recursive=) \
@@ -159,6 +167,8 @@ EXIF_SOVERSION = @EXIF_SOVERSION@
F77 = @F77@
FC = @FC@
FGREP = @FGREP@
+FLICKRNET_CFLAGS = @FLICKRNET_CFLAGS@
+FLICKRNET_LIBS = @FLICKRNET_LIBS@
F_CFLAGS = @F_CFLAGS@
F_LIBS = @F_LIBS@
GAPI2CODEGEN = @GAPI2CODEGEN@
@@ -172,6 +182,8 @@ GCONF_SHARP_LIBS = @GCONF_SHARP_LIBS@
GETTEXT_PACKAGE = @GETTEXT_PACKAGE@
GIO_CFLAGS = @GIO_CFLAGS@
GIO_LIBS = @GIO_LIBS@
+GLIBSHARP_2_12_7_CFLAGS = @GLIBSHARP_2_12_7_CFLAGS@
+GLIBSHARP_2_12_7_LIBS = @GLIBSHARP_2_12_7_LIBS@
GLIBSHARP_CFLAGS = @GLIBSHARP_CFLAGS@
GLIBSHARP_LIBS = @GLIBSHARP_LIBS@
GLIB_CFLAGS = @GLIB_CFLAGS@
@@ -187,6 +199,10 @@ GNOME_SHARP_CFLAGS = @GNOME_SHARP_CFLAGS@
GNOME_SHARP_LIBS = @GNOME_SHARP_LIBS@
GOBJECT_QUERY = @GOBJECT_QUERY@
GREP = @GREP@
+GTKSHARP_A11Y_CFLAGS = @GTKSHARP_A11Y_CFLAGS@
+GTKSHARP_A11Y_LIBS = @GTKSHARP_A11Y_LIBS@
+GTKSHARP_CFLAGS = @GTKSHARP_CFLAGS@
+GTKSHARP_LIBS = @GTKSHARP_LIBS@
HELP_DIR = @HELP_DIR@
ICONS_DIRECTORY = @ICONS_DIRECTORY@
INSTALL = @INSTALL@
@@ -200,14 +216,14 @@ INTLTOOL_EXTRACT = @INTLTOOL_EXTRACT@
INTLTOOL_MERGE = @INTLTOOL_MERGE@
INTLTOOL_PERL = @INTLTOOL_PERL@
INTLTOOL_UPDATE = @INTLTOOL_UPDATE@
+KEYRINGSHARP_CFLAGS = @KEYRINGSHARP_CFLAGS@
+KEYRINGSHARP_LIBS = @KEYRINGSHARP_LIBS@
LCMS_CFLAGS = @LCMS_CFLAGS@
LCMS_LIBS = @LCMS_LIBS@
LD = @LD@
LDFLAGS = @LDFLAGS@
LIBEXIF_VERSION_CHECK_CFLAGS = @LIBEXIF_VERSION_CHECK_CFLAGS@
LIBEXIF_VERSION_CHECK_LIBS = @LIBEXIF_VERSION_CHECK_LIBS@
-LIBGPHOTO2_CFLAGS = @LIBGPHOTO2_CFLAGS@
-LIBGPHOTO2_LIBS = @LIBGPHOTO2_LIBS@
LIBJPEG = @LIBJPEG@
LIBOBJS = @LIBOBJS@
LIBS = @LIBS@
@@ -222,6 +238,12 @@ MCS = @MCS@
MKDIR_P = @MKDIR_P@
MKINSTALLDIRS = @MKINSTALLDIRS@
MONO = @MONO@
+MONO_ADDINS_CFLAGS = @MONO_ADDINS_CFLAGS@
+MONO_ADDINS_GUI_CFLAGS = @MONO_ADDINS_GUI_CFLAGS@
+MONO_ADDINS_GUI_LIBS = @MONO_ADDINS_GUI_LIBS@
+MONO_ADDINS_LIBS = @MONO_ADDINS_LIBS@
+MONO_ADDINS_SETUP_CFLAGS = @MONO_ADDINS_SETUP_CFLAGS@
+MONO_ADDINS_SETUP_LIBS = @MONO_ADDINS_SETUP_LIBS@
MONO_MODULE_CFLAGS = @MONO_MODULE_CFLAGS@
MONO_MODULE_LIBS = @MONO_MODULE_LIBS@
MSGFMT = @MSGFMT@
@@ -232,7 +254,6 @@ NDESK_DBUS_LIBS = @NDESK_DBUS_LIBS@
NM = @NM@
NMEDIT = @NMEDIT@
NUNIT_CFLAGS = @NUNIT_CFLAGS@
-NUNIT_DEFINES = @NUNIT_DEFINES@
NUNIT_LIBS = @NUNIT_LIBS@
OBJC = @OBJC@
OBJDUMP = @OBJDUMP@
@@ -324,87 +345,244 @@ target_alias = @target_alias@
top_build_prefix = @top_build_prefix@
top_builddir = @top_builddir@
top_srcdir = @top_srcdir@
+ASSEMBLY = FSpot.Exporters.TabbloExport
+TARGET = library
+LINK = $(REF_FSPOT_EXTENSION_TABBLOEXPORT) $(am__append_1)
+INSTALL_DIR = $(EXTENSIONS_INSTALL_DIR)
+SOURCES = \
+ ApplicationCentricCertificatePolicy.cs \
+ BlindTrustCertificatePolicy.cs \
+ FSpotTraceListener.cs \
+ FSpotUploadProgress.cs \
+ TabbloExport.cs \
+ TabbloExportModel.cs \
+ TabbloExportView.cs \
+ UserDecisionCertificatePolicy.cs
+
+RESOURCES = \
+ TabbloExport.addin.xml \
+ ui/TabbloExport.ui \
+ ui/TrustError.ui
+
+ASSEMBLY_INFO_SOURCE = AssemblyInfo.cs
+SUBDIRS = \
+ Tabblo
+
+
+# Initializers
+MONO_BASE_PATH =
+MONO_ADDINS_PATH =
+
+# Install Paths
+DEFAULT_INSTALL_DIR = $(pkglibdir)
+BACKENDS_INSTALL_DIR = $(DEFAULT_INSTALL_DIR)/Backends
+EXTENSIONS_INSTALL_DIR = $(DEFAULT_INSTALL_DIR)/Extensions
DIR_DOCS = $(top_builddir)/docs
DIR_EXTENSIONS = $(top_builddir)/extensions
-DIR_GPHOTO2 = $(top_builddir)/lib/libgphoto2-sharp
DIR_ICONS = $(top_builddir)/icons
DIR_JPEGTRAN = $(top_builddir)/lib/libjpegtran
-DIR_KEYRING = $(top_builddir)/lib/gnome-keyring-sharp
DIR_LIBFSPOT = $(top_builddir)/lib/libfspot
DIR_SEMWEB = $(top_builddir)/lib/semweb
DIR_SRC = $(top_builddir)/src
DIR_GIOSHARP = $(top_builddir)/lib/gio-sharp/gio
DIR_GTKSHARPBEANS = $(top_builddir)/lib/gtk-sharp-beans
DIR_UNIQUESHARP = $(top_builddir)/lib/unique-sharp/unique
-LINK_KEYRING = -r:$(DIR_KEYRING)/gnome-keyring-sharp.dll
-LINK_GPHOTO2 = -r:$(DIR_GPHOTO2)/libgphoto2-sharp.dll
-LINK_SEMWEB = -r:$(DIR_SEMWEB)/SemWeb.dll
-LINK_GIOSHARP = -r:$(DIR_GIOSHARP)/gio-sharp.dll
-LINK_GTKSHARPBEANS = -r:$(DIR_GTKSHARPBEANS)/gtk-sharp-beans.dll
-LINK_UNIQUESHARP = -r:$(DIR_UNIQUESHARP)/unique-sharp.dll
-CSC_FLAGS = -debug
-CSC = $(MCS) $(CSC_FLAGS) -target:exe
-CSC_LIB = $(MCS) $(CSC_FLAGS) -target:library
-MONO_DEBUGFLAGS = --debug
-RUNTIME = mono $(MONO_DEBUGFLAGS)
-PLUGIN_NAME = TabbloExport
-PLUGIN_MANIFEST = $(PLUGIN_NAME).addin.xml
-PLUGIN_ASSEMBLY = $(PLUGIN_NAME).dll
-PLUGIN_SOURCES = \
- $(srcdir)/ApplicationCentricCertificatePolicy.cs \
- $(srcdir)/AssemblyInfo.cs \
- $(srcdir)/BlindTrustCertificatePolicy.cs \
- $(srcdir)/FSpotTraceListener.cs \
- $(srcdir)/FSpotUploadProgress.cs \
- $(srcdir)/TabbloExport.cs \
- $(srcdir)/TabbloExportModel.cs \
- $(srcdir)/TabbloExportView.cs \
- $(srcdir)/UserDecisionCertificatePolicy.cs
-
-PLUGIN_INPUT = \
- $(PLUGIN_SOURCES) \
- $(PLUGIN_MANIFEST) \
- ui/$(PLUGIN_NAME).ui \
- ui/TrustError.ui
-
-REFS = \
- -r:$(top_builddir)/src/f-spot.exe \
- -r:$(top_builddir)/src/FSpot.Core.dll \
- -r:$(top_builddir)/src/FSpot.Utils.dll \
- -r:Tabblo/Mono.Tabblo.dll \
- $(LINK_KEYRING) \
- $(LINK_SEMWEB) \
- $(LINK_GIOSHARP) \
- $(LINK_GTKSHARPBEANS) \
- $(LINK_GPHOTO2) \
- $(LINK_UNIQUESHARP) \
- -r:Mono.Posix.dll
-
-PKGS = \
- -pkg:gtk-sharp-2.0
-
-SUBDIRS = \
- Tabblo
-
-RESOURCES = \
- -resource:$(srcdir)/$(PLUGIN_MANIFEST) \
- -resource:$(srcdir)/ui/$(PLUGIN_NAME).ui \
- -resource:$(srcdir)/ui/TrustError.ui
-
-plugindir = $(pkglibdir)/extensions
-plugin_DATA = \
- $(PLUGIN_ASSEMBLY)
-
-EXTRA_DIST = $(PLUGIN_INPUT)
-CLEANFILES = \
- $(PLUGIN_ASSEMBLY) \
- $(PLUGIN_ASSEMBLY).mdb \
- *.mpack
-
+DIR_BIN = $(top_builddir)/bin
+
+# External libraries to link against, generated from configure
+LINK_SYSTEM = -r:System
+LINK_SYSTEMDATA = -r:System.Data
+LINK_SYSTEM_WEB = -r:System.Web
+LINK_MONO_POSIX = -r:Mono.Posix
+LINK_MONO_CAIRO = -r:Mono.Cairo
+LINK_MONO_SIMD = -r:Mono.Simd
+LINK_MONODATA = -r:Mono.Data
+LINK_MONO_DATA_SQLITECLIENT = -r:Mono.Data.SqliteClient
+LINK_ICSHARP_ZIP_LIB = -r:ICSharpCode.SharpZipLib
+LINK_KEYRING = $(KEYRINGSHARP_LIBS)
+LINK_GLIB = $(GLIBSHARP_LIBS)
+LINK_GTK = $(GTKSHARP_LIBS)
+LINK_GNOME = $(GNOME_SHARP_LIBS)
+LINK_GCONF = $(GCONF_SHARP_LIBS)
+LINK_GLADE = -pkg:glade-sharp-2.0
+LINK_FLICKRNET = -pkg:flickrnet
+LINK_DBUS = $(NDESK_DBUS_LIBS) $(NDESK_DBUS_GLIB_LIBS)
+LINK_DBUS_NO_GLIB = $(NDESK_DBUS_LIBS)
+LINK_MONO_ADDINS_DEPS = $(MONO_ADDINS_LIBS)
+LINK_MONO_ADDINS_SETUP_DEPS = $(MONO_ADDINS_SETUP_LIBS)
+LINK_MONO_ADDINS_GUI_DEPS = $(MONO_ADDINS_GUI_LIBS)
+
+# GIO
+REF_GIO =
+LINK_GIO = -r:$(DIR_GIOSHARP)/gio-sharp.dll
+LINK_GIO_DEPS = $(REF_GIO) $(LINK_GIO)
+
+# Gtk Beans
+REF_GTK_BEANS = $(LINK_GIO_DEPS)
+LINK_GTK_BEANS = -r:$(DIR_GTKSHARPBEANS)/gtk-sharp-beans.dll
+LINK_GTK_BEANS_DEPS = $(REF_GTK_BEANS) $(LINK_GTK_BEANS)
+
+# Uniqe
+REF_UNIQUE =
+LINK_UNIQUE = -r:$(DIR_UNIQUESHARP)/unique-sharp.dll
+LINK_UNIQUE_DEPS = $(REF_UNIQUE) $(LINK_UNIQUE)
+
+# Hyena
+REF_HYENA = $(LINK_SYSTEM) $(LINK_MONO_POSIX)
+LINK_HYENA = -r:$(DIR_BIN)/Hyena.dll
+LINK_HYENA_DEPS = $(REF_HYENA) $(LINK_HYENA)
+
+# Semweb
+REF_SEMWEB = $(LINK_SYSTEMDATA) $(LINK_HYENA_DEPS)
+LINK_SEMWEB = -r:$(DIR_BIN)/SemWeb.dll
+LINK_SEMWEB_DEPS = $(REF_SEMWEB) $(LINK_SEMWEB)
+
+# Hyena.Data.Sqlite
+REF_HYENA_DATA_SQLITE = $(LINK_SQLITE)
+LINK_HYENA_DATA_SQLITE = -r:$(DIR_BIN)/Hyena.Data.Sqlite.dll
+LINK_HYENA_DATA_SQLITE_DEPS = $(REF_HYENA_DATA_SQLITE) $(LINK_HYENA_DATA_SQLITE)
+
+# Hyena.Gui
+REF_HYENA_GUI = $(LINK_HYENA_DEPS)
+LINK_HYENA_GUI = -r:$(DIR_BIN)/Hyena.Gui.dll
+LINK_HENA_GUI_DEPS = $(REF_HYENA_GUI) $(LINK_HYENA_GUI)
+
+# FSpot.Cms
+REF_FSPOT_CMS = $(LINK_GTK)
+LINK_FSPOT_CMS = -r:$(DIR_BIN)/FSpot.Cms.dll
+LINK_FSPOT_CMS_DEPS = $(REF_FSPOT_CMS) $(LINK_FSPOT_CMS)
+
+# FSpot.Utils
+REF_FSPOT_UTILS = $(LINK_HYENA_DEPS) $(LINK_GTK) $(LINK_GIO) $(LINK_MONO_CAIRO)
+LINK_FSPOT_UTILS = -r:$(DIR_BIN)/FSpot.Utils.dll
+LINK_FSPOT_UTILS_DEPS = $(REF_FSPOT_UTILS) $(LINK_FSPOT_UTILS)
+
+# FSpot.Core
+REF_FSPOT_CORE = $(LINK_FSPOT_UTILS_DEPS) $(LINK_FSPOT_CMS_DEPS)
+LINK_FSPOT_CORE = -r:$(DIR_BIN)/FSpot.Core.dll
+LINK_FSPOT_CORE_DEPS = $(REF_FSPOT_CORE) $(LINK_FSPOT_CORE)
+
+# FSpot.Query
+REF_FSPOT_QUERY = $(LINK_FSPOT_CORE_DEPS)
+LINK_FSPOT_QUERY = -r:$(DIR_BIN)/FSpot.Query.dll
+LINK_FSPOT_QUERY_DEPS = $(REF_FSPOT_QUERY) $(LINK_FSPOT_QUERY)
+
+# FSpot.JobScheduler
+REF_FSPOT_JOB_SCHEDULER = $(LINK_HYENA_DEPS)
+LINK_FSPOT_JOB_SCHEDULER = -r:$(DIR_BIN)/FSpot.JobScheduler.dll
+LINK_FSPOT_JOB_SCHEDULER_DEPS = $(REF_FSPOT_JOB_SCHEDULER) $(LINK_FSPOT_JOB_SCHEDULER)
+
+# FSpot.Bling
+REF_FSPOT_BLING = $(LINK_GTK_BEANS_DEPS) $(LINK_GLIB)
+LINK_FSPOT_BLING = -r:$(DIR_BIN)/FSpot.Bling.dll
+LINK_FSPOT_BLING_DEPS = $(REF_FSPOT_BLING) $(LINK_FSPOT_BLING)
+
+# FSpot.Platform
+REF_FSPOT_PLATFORM = $(LINK_GCONF) $(LINK_GTK) $(LINK_FSPOT_CORE_DEPS) $(LINK_DBUS)
+LINK_FSPOT_PLATFORM = -r:$(DIR_BIN)/FSpot.Platform.dll
+LINK_FSPOT_PLATFORM_DEPS = $(REF_FSPOT_PLATFORM) $(LINK_FSPOT_PLATFORM)
+
+# FSpot.Widgets
+REF_FSPOT_WIDGETS = $(LINK_FSPOT_CORE_DEPS) $(LINK_FSPOT_BLING_DEPS)
+LINK_FSPOT_WIDGETS = -r:$(DIR_BIN)/FSpot.Widgets.dll
+LINK_FSPOT_WIDGETS_DEPS = $(REF_FSPOT_WIDGETS) $(LINK_FSPOT_WIDGETS)
+
+# FSpot (executable)
+REF_FSPOT = $(LINK_FSPOT_WIDGETS_DEPS) $(LINK_FSPOT_PLATFORM_DEPS) $(LINK_FSPOT_QUERY_DEPS) \
+ $(LINK_GLIB) $(LINK_MONO_ADDINS_DEPS) $(LINK_UNIQUE_DEPS) $(LINK_MONO_ADDINS_SETUP_DEPS) \
+ $(LINK_SEMWEB_DEPS) $(LINK_GLADE) $(LINK_MONODATA) $(LINK_MONO_DATA_SQLITECLIENT) \
+ $(LINK_MONO_ADDINS_GUI_DEPS) $(LINK_FSPOT_JOB_SCHEDULER_DEPS) $(LINK_ICSHARP_ZIP_LIB) \
+ $(LINK_GNOME)
+
+# FIXME: do not link executables
+LINK_FSPOT = -r:$(DIR_BIN)/f-spot.exe
+LINK_FSPOT_DEPS = $(REF_FSPOT) $(LINK_FSPOT)
+
+# Extensions
+REF_FSPOT_EXTENSION_BLACKOUTEDITOR = $(LINK_FSPOT_DEPS)
+REF_FSPOT_EXTENSION_BWEDITOR = $(LINK_FSPOT_DEPS) $(LINK_MONO_SIMD)
+REF_FSPOT_EXTENSION_FLIPEDITOR = $(LINK_FSPOT_DEPS)
+REF_FSPOT_EXTENSION_PIXELATEEDITOR = $(LINK_FSPOT_DEPS)
+REF_FSPOT_EXTENSION_RESIZEEDITOR = $(LINK_FSPOT_DEPS)
+REF_FSPOT_EXTENSION_CDEXPORT = $(LINK_FSPOT_DEPS)
+REF_FSPOT_EXTENSION_FACEBOOKEXPORT = $(LINK_FSPOT_DEPS) $(LINK_KEYRING)
+REF_FSPOT_EXTENSION_FLICKREXPORT = $(LINK_FSPOT_DEPS) $(LINK_FLICKRNET)
+REF_FSPOT_EXTENSION_FOLDEREXPORT = $(LINK_FSPOT_DEPS) $(LINK_SYSTEM_WEB)
+REF_FSPOT_EXTENSION_GALLERYEXPORT = $(LINK_FSPOT_DEPS)
+REF_MONO_GOOGLE = $(LINK_HYENA_DEPS)
+LINK_MONO_GOOGLE = -r:$(DIR_BIN)/Mono.Google.dll
+LINK_MONO_GOOGLE_DEPS = $(REF_MONO_GOOGLE) $(LINK_MONO_GOOGLE)
+REF_FSPOT_EXTENSION_PICASAWEBEXPORT = $(LINK_FSPOT_DEPS) $(LINK_MONO_GOOGLE) $(LINK_KEYRING)
+REF_SMUGMUGNET = $(LINK_FSPOT_DEPS)
+LINK_SMUGMUGNET = -r:$(DIR_BIN)/SmugMugNet.dll
+LINK_SMUGMUGNET_DEPS = $(REF_SMUGMUGNET) $(LINK_SMUGMUGNET)
+REF_FSPOT_EXTENSION_SMUGMUGEXPORT = $(LINK_SMUGMUGNET_DEPS) $(LINK_KEYRING)
+REF_MONO_TABBLO = $(LINK_HYENA_DEPS)
+LINK_MONO_TABBLO = -r:$(DIR_BIN)/Mono.Tabblo.dll
+LINK_MONO_TABBLO_DEPS = $(REF_MONO_TABBLO) $(LINK_MONO_TABBLO)
+REF_FSPOT_EXTENSION_TABBLOEXPORT = $(LINK_FSPOT_DEPS) $(LINK_KEYRING) $(LINK_MONO_TABBLO_DEPS)
+REF_FSPOT_EXTENSION_ZIPEXPORT = $(LINK_FSPOT_DEPS)
+REF_FSPOT_EXTENSION_CHANGEPHOTOPATH = $(LINK_FSPOT_DEPS)
+REF_FSPOT_EXTENSION_DEVELOPINUFRAW = $(LINK_FSPOT_DEPS)
+REF_FSPOT_EXTENSION_HASHJOB = $(LINK_FSPOT_DEPS)
+REF_FSPOT_EXTENSION_LIVEWEBGALLERY = $(LINK_FSPOT_DEPS)
+REF_FSPOT_EXTENSION_MERGEDB = $(LINK_FSPOT_DEPS)
+REF_FSPOT_EXTENSION_RAWPLUSJPEG = $(LINK_FSPOT_DEPS)
+REF_FSPOT_EXTENSION_RETROACTIVEROLL = $(LINK_FSPOT_DEPS)
+REF_FSPOT_EXTENSION_SCREENSAVERCONFIG = $(LINK_FSPOT_DEPS)
+REF_FSPOT_EXTENSION_COVERTRANSITION = $(LINK_FSPOT_DEPS)
+
+# Cute hack to replace a space with something
+colon := :
+empty :=
+space := $(empty) $(empty)
+
+# Build path to allow running uninstalled
+RUN_PATH = $(subst $(space),$(colon), $(MONO_BASE_PATH))
+UNIQUE_FILTER_PIPE = tr [:space:] \\n | sort | uniq
+BUILD_DATA_DIR = $(top_builddir)/bin/share/$(PACKAGE)
+
+# Since all other attempts failed, we currently go this way:
+# This code adds the file specified in ASSEMBLY_INFO_SOURCE to SOURCES_BUILD.
+# If no such file is specified, the default AssemblyInfo.cs is used.
+ASSEMBLY_INFO_SOURCE_REAL = \
+ $(shell if [ "$(ASSEMBLY_INFO_SOURCE)" ]; \
+ then \
+ echo "$(addprefix $(srcdir)/, $(ASSEMBLY_INFO_SOURCE))"; \
+ else \
+ echo "$(top_srcdir)/src/AssemblyInfo.cs"; \
+ fi)
+
+SOURCES_BUILD = $(addprefix $(srcdir)/, $(SOURCES)) \
+ $(ASSEMBLY_INFO_SOURCE_REAL)
+RESOURCES_EXPANDED = $(addprefix $(srcdir)/, $(RESOURCES))
+RESOURCES_BUILD = $(foreach resource, $(RESOURCES_EXPANDED), \
+ -resource:$(resource),$(notdir $(resource)))
+
+INSTALL_ICONS = $(top_srcdir)/build/private-icon-theme-installer "$(mkinstalldirs)" "$(INSTALL_DATA)"
+THEME_ICONS_SOURCE = $(wildcard $(srcdir)/ThemeIcons/*/*/*.png) $(wildcard $(srcdir)/ThemeIcons/scalable/*/*.svg)
+THEME_ICONS_RELATIVE = $(subst $(srcdir)/ThemeIcons/, , $(THEME_ICONS_SOURCE))
+ASSEMBLY_EXTENSION = $(strip $(patsubst library, dll, $(TARGET)))
+ASSEMBLY_FILE = $(top_builddir)/bin/$(ASSEMBLY).$(ASSEMBLY_EXTENSION)
+INSTALL_DIR_RESOLVED = $(firstword $(subst , $(DEFAULT_INSTALL_DIR), $(INSTALL_DIR)))
+ at ENABLE_TESTS_TRUE@ENABLE_TESTS_FLAG = "-define:ENABLE_TESTS"
+ at ENABLE_ATK_TRUE@ENABLE_ATK_FLAG = "-define:ENABLE_ATK"
+FILTERED_LINK = $(shell echo "$(LINK)" | $(UNIQUE_FILTER_PIPE))
+DEP_LINK = $(shell echo "$(LINK)" | $(UNIQUE_FILTER_PIPE) | sed s,-r:,,g | grep '$(top_builddir)/bin/')
+OUTPUT_FILES = \
+ $(ASSEMBLY_FILE) \
+ $(ASSEMBLY_FILE).mdb
+
+moduledir = $(INSTALL_DIR_RESOLVED)
+module_SCRIPTS = $(OUTPUT_FILES)
+EXTRA_DIST = $(SOURCES_BUILD) $(RESOURCES_EXPANDED) $(THEME_ICONS_SOURCE)
+CLEANFILES = $(OUTPUT_FILES) $(ASSEMBLY_FILE).config
+DISTCLEANFILES = *.pidb
+MAINTAINERCLEANFILES = Makefile.in
all: all-recursive
.SUFFIXES:
-$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(top_srcdir)/Makefile.include $(am__configure_deps)
+$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(top_srcdir)/build/build.mk $(top_srcdir)/build/build.environment.mk $(top_srcdir)/build/build.rules.mk $(am__configure_deps)
@for dep in $?; do \
case '$(am__configure_deps)' in \
*$$dep*) \
@@ -434,32 +612,46 @@ $(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps)
$(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps)
cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
$(am__aclocal_m4_deps):
+install-moduleSCRIPTS: $(module_SCRIPTS)
+ @$(NORMAL_INSTALL)
+ test -z "$(moduledir)" || $(MKDIR_P) "$(DESTDIR)$(moduledir)"
+ @list='$(module_SCRIPTS)'; test -n "$(moduledir)" || list=; \
+ for p in $$list; do \
+ if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \
+ if test -f "$$d$$p"; then echo "$$d$$p"; echo "$$p"; else :; fi; \
+ done | \
+ sed -e 'p;s,.*/,,;n' \
+ -e 'h;s|.*|.|' \
+ -e 'p;x;s,.*/,,;$(transform)' | sed 'N;N;N;s,\n, ,g' | \
+ $(AWK) 'BEGIN { files["."] = ""; dirs["."] = 1; } \
+ { d=$$3; if (dirs[d] != 1) { print "d", d; dirs[d] = 1 } \
+ if ($$2 == $$4) { files[d] = files[d] " " $$1; \
+ if (++n[d] == $(am__install_max)) { \
+ print "f", d, files[d]; n[d] = 0; files[d] = "" } } \
+ else { print "f", d "/" $$4, $$1 } } \
+ END { for (d in files) print "f", d, files[d] }' | \
+ while read type dir files; do \
+ if test "$$dir" = .; then dir=; else dir=/$$dir; fi; \
+ test -z "$$files" || { \
+ echo " $(INSTALL_SCRIPT) $$files '$(DESTDIR)$(moduledir)$$dir'"; \
+ $(INSTALL_SCRIPT) $$files "$(DESTDIR)$(moduledir)$$dir" || exit $$?; \
+ } \
+ ; done
+
+uninstall-moduleSCRIPTS:
+ @$(NORMAL_UNINSTALL)
+ @list='$(module_SCRIPTS)'; test -n "$(moduledir)" || exit 0; \
+ files=`for p in $$list; do echo "$$p"; done | \
+ sed -e 's,.*/,,;$(transform)'`; \
+ test -n "$$list" || exit 0; \
+ echo " ( cd '$(DESTDIR)$(moduledir)' && rm -f" $$files ")"; \
+ cd "$(DESTDIR)$(moduledir)" && rm -f $$files
mostlyclean-libtool:
-rm -f *.lo
clean-libtool:
-rm -rf .libs _libs
-install-pluginDATA: $(plugin_DATA)
- @$(NORMAL_INSTALL)
- test -z "$(plugindir)" || $(MKDIR_P) "$(DESTDIR)$(plugindir)"
- @list='$(plugin_DATA)'; test -n "$(plugindir)" || list=; \
- for p in $$list; do \
- if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \
- echo "$$d$$p"; \
- done | $(am__base_list) | \
- while read files; do \
- echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(plugindir)'"; \
- $(INSTALL_DATA) $$files "$(DESTDIR)$(plugindir)" || exit $$?; \
- done
-
-uninstall-pluginDATA:
- @$(NORMAL_UNINSTALL)
- @list='$(plugin_DATA)'; test -n "$(plugindir)" || list=; \
- files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \
- test -n "$$files" || exit 0; \
- echo " ( cd '$(DESTDIR)$(plugindir)' && rm -f" $$files ")"; \
- cd "$(DESTDIR)$(plugindir)" && rm -f $$files
# This directory's subdirectories are mostly independent; you can cd
# into them and run `make' without going through this Makefile.
@@ -656,10 +848,10 @@ distdir: $(DISTFILES)
done
check-am: all-am
check: check-recursive
-all-am: Makefile $(DATA)
+all-am: Makefile $(SCRIPTS)
installdirs: installdirs-recursive
installdirs-am:
- for dir in "$(DESTDIR)$(plugindir)"; do \
+ for dir in "$(DESTDIR)$(moduledir)"; do \
test -z "$$dir" || $(MKDIR_P) "$$dir"; \
done
install: install-recursive
@@ -684,10 +876,12 @@ clean-generic:
distclean-generic:
-test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
-test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES)
+ -test -z "$(DISTCLEANFILES)" || rm -f $(DISTCLEANFILES)
maintainer-clean-generic:
@echo "This command is intended for maintainers to use"
@echo "it deletes files that may require special tools to rebuild."
+ -test -z "$(MAINTAINERCLEANFILES)" || rm -f $(MAINTAINERCLEANFILES)
clean: clean-recursive
clean-am: clean-generic clean-libtool mostlyclean-am
@@ -708,9 +902,8 @@ info: info-recursive
info-am:
-install-data-am: install-pluginDATA
- @$(NORMAL_INSTALL)
- $(MAKE) $(AM_MAKEFLAGS) install-data-hook
+install-data-am: install-data-local install-moduleSCRIPTS
+
install-dvi: install-dvi-recursive
install-dvi-am:
@@ -753,35 +946,75 @@ ps: ps-recursive
ps-am:
-uninstall-am: uninstall-pluginDATA
+uninstall-am: uninstall-local uninstall-moduleSCRIPTS
.MAKE: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) ctags-recursive \
- install-am install-data-am install-strip tags-recursive
+ install-am install-strip tags-recursive
.PHONY: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) CTAGS GTAGS \
all all-am check check-am clean clean-generic clean-libtool \
ctags ctags-recursive distclean 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-data-hook install-dvi install-dvi-am \
+ install-data-am install-data-local 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-pluginDATA install-ps install-ps-am \
+ install-info install-info-am install-man install-moduleSCRIPTS \
+ 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-generic mostlyclean-libtool pdf pdf-am \
ps ps-am tags tags-recursive uninstall uninstall-am \
- uninstall-pluginDATA
-
-
-mpack: $(PLUGIN_ASSEMBLY)
- mautil p $(PLUGIN_ASSEMBLY)
-
-$(PLUGIN_ASSEMBLY): $(PLUGIN_INPUT)
- $(CSC_LIB) -out:$@ $(PLUGIN_SOURCES) $(REFS) $(PKGS) $(ASSEMBLIES) $(RESOURCES)
-
-install-data-hook:
- if [ -w $(DESTDIR)$(plugindir)/$(PLUGIN_NAME).addin.xml ] ; then rm -f $(DESTDIR)$(plugindir)/$(PLUGIN_NAME).addin.xml; fi
+ uninstall-local uninstall-moduleSCRIPTS
+
+
+all: $(ASSEMBLY_FILE) theme-icons
+
+run:
+ @pushd $(top_builddir); \
+ make run; \
+ popd;
+
+# uncommented for now.
+# tests are currently excuted from Makefile in $(top_builddir)
+#test:
+# @pushd $(top_builddir)/tests; \
+# make $(ASSEMBLY); \
+# popd;
+
+build-debug:
+ @echo $(DEP_LINK)
+
+$(ASSEMBLY_FILE).mdb: $(ASSEMBLY_FILE)
+
+$(ASSEMBLY_FILE): $(SOURCES_BUILD) $(RESOURCES_EXPANDED) $(DEP_LINK)
+ @mkdir -p $(top_builddir)/bin
+ @if [ ! "x$(ENABLE_RELEASE)" = "xyes" ]; then \
+ $(top_srcdir)/build/dll-map-makefile-verifier $(srcdir)/Makefile.am $(srcdir)/$(notdir $@.config) && \
+ $(MONO) $(top_builddir)/build/dll-map-verifier.exe $(srcdir)/$(notdir $@.config) -iwinmm -ilibbanshee -ilibbnpx11 -ilibc -ilibc.so.6 -iintl -ilibmtp.dll -ilibigemacintegration.dylib -iCFRelease $(SOURCES_BUILD); \
+ fi;
+ $(MCS) \
+ $(GMCS_FLAGS) \
+ $(ASSEMBLY_BUILD_FLAGS) \
+ -nowarn:0278 -nowarn:0078 $$warn \
+ -define:HAVE_GTK_2_10 -define:NET_2_0 \
+ -debug -target:$(TARGET) -out:$@ \
+ $(BUILD_DEFINES) $(ENABLE_TESTS_FLAG) $(ENABLE_ATK_FLAG) \
+ $(FILTERED_LINK) $(RESOURCES_BUILD) $(SOURCES_BUILD)
+ @if [ -e $(srcdir)/$(notdir $@.config) ]; then \
+ cp $(srcdir)/$(notdir $@.config) $(top_builddir)/bin; \
+ fi;
+ @if [ ! -z "$(EXTRA_BUNDLE)" ]; then \
+ cp $(EXTRA_BUNDLE) $(top_builddir)/bin; \
+ fi;
+
+theme-icons: $(THEME_ICONS_SOURCE)
+ @$(INSTALL_ICONS) -il "$(BUILD_DATA_DIR)" "$(srcdir)" $(THEME_ICONS_RELATIVE)
+
+install-data-local: $(THEME_ICONS_SOURCE)
+ @$(INSTALL_ICONS) -i "$(DESTDIR)$(pkgdatadir)" "$(srcdir)" $(THEME_ICONS_RELATIVE)
+
+uninstall-local: $(THEME_ICONS_SOURCE)
+ @$(INSTALL_ICONS) -u "$(DESTDIR)$(pkgdatadir)" "$(srcdir)" $(THEME_ICONS_RELATIVE)
# 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/extensions/Exporters/TabbloExport/Tabblo/Makefile.am b/extensions/Exporters/TabbloExport/Tabblo/Makefile.am
index 822253c..5283b77 100644
--- a/extensions/Exporters/TabbloExport/Tabblo/Makefile.am
+++ b/extensions/Exporters/TabbloExport/Tabblo/Makefile.am
@@ -1,38 +1,21 @@
-include $(top_srcdir)/Makefile.include
-
-ASSEMBLY_NAME = Mono.Tabblo
-
-ASSEMBLY_SOURCES = \
- $(srcdir)/AssemblyInfo.cs \
- $(srcdir)/Connection.cs \
- $(srcdir)/IPreferences.cs \
- $(srcdir)/MultipartRequest.cs \
- $(srcdir)/Picture.cs \
- $(srcdir)/TabbloException.cs \
- $(srcdir)/TotalUploadProgress.cs \
- $(srcdir)/Uploader.cs \
- $(srcdir)/UploadProgressEventArgs.cs \
- $(srcdir)/UploadProgressEventHandler.cs
-
-REFS = \
- -r:Mono.Posix.dll \
- -r:System.Web.dll
-
-PKGS =
-
-ASSEMBLY = $(ASSEMBLY_NAME).dll
-
-all: $(ASSEMBLY)
-
-$(ASSEMBLY): $(ASSEMBLY_SOURCES)
- $(CSC_LIB) -out:$@ $(PKGS) $(REFS) $(ASSEMBLY_SOURCES)
-
-assemblydir = $(pkglibdir)
-assembly_DATA = $(ASSEMBLY)
-
-EXTRA_DIST = \
- $(ASSEMBLY_SOURCES)
-
-CLEANFILES = \
- $(ASSEMBLY) \
- $(ASSEMBLY).mdb
+ASSEMBLY = Mono.Tabblo
+TARGET = library
+LINK = $(REF_MONO_TABBLO)
+INSTALL_DIR = $(EXTENSIONS_INSTALL_DIR)
+
+SOURCES = \
+ Connection.cs \
+ IPreferences.cs \
+ MultipartRequest.cs \
+ Picture.cs \
+ TabbloException.cs \
+ TotalUploadProgress.cs \
+ Uploader.cs \
+ UploadProgressEventArgs.cs \
+ UploadProgressEventHandler.cs
+
+RESOURCES =
+
+ASSEMBLY_INFO_SOURCE = AssemblyInfo.cs
+
+include $(top_srcdir)/build/build.mk
diff --git a/extensions/Exporters/TabbloExport/Tabblo/Makefile.in b/extensions/Exporters/TabbloExport/Tabblo/Makefile.in
index 28aabe3..c2ef7ef 100644
--- a/extensions/Exporters/TabbloExport/Tabblo/Makefile.in
+++ b/extensions/Exporters/TabbloExport/Tabblo/Makefile.in
@@ -35,13 +35,22 @@ POST_UNINSTALL = :
build_triplet = @build@
host_triplet = @host@
DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in \
- $(top_srcdir)/Makefile.include
+ $(top_srcdir)/build/build.environment.mk \
+ $(top_srcdir)/build/build.mk \
+ $(top_srcdir)/build/build.rules.mk
+ at ENABLE_TESTS_TRUE@am__append_1 = " $(NUNIT_LIBS)"
subdir = extensions/Exporters/TabbloExport/Tabblo
ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
am__aclocal_m4_deps = $(top_srcdir)/build/m4/shave/shave.m4 \
$(top_srcdir)/build/m4/shamrock/expansions.m4 \
+ $(top_srcdir)/build/m4/shamrock/gnome-doc.m4 \
$(top_srcdir)/build/m4/shamrock/mono.m4 \
+ $(top_srcdir)/build/m4/shamrock/nunit.m4 \
$(top_srcdir)/build/m4/shamrock/programs.m4 \
+ $(top_srcdir)/build/m4/f-spot/flickrnet.m4 \
+ $(top_srcdir)/build/m4/f-spot/gnome-keyring-sharp.m4 \
+ $(top_srcdir)/build/m4/f-spot/gtk-sharp.m4 \
+ $(top_srcdir)/build/m4/f-spot/mono-addins.m4 \
$(top_srcdir)/acinclude.m4 $(top_srcdir)/configure.ac
am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
$(ACLOCAL_M4)
@@ -49,8 +58,6 @@ mkinstalldirs = $(install_sh) -d
CONFIG_HEADER = $(top_builddir)/config.h
CONFIG_CLEAN_FILES =
CONFIG_CLEAN_VPATH_FILES =
-SOURCES =
-DIST_SOURCES =
am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`;
am__vpath_adj = case $$p in \
$(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \
@@ -72,8 +79,9 @@ am__nobase_list = $(am__nobase_strip_setup); \
am__base_list = \
sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \
sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g'
-am__installdirs = "$(DESTDIR)$(assemblydir)"
-DATA = $(assembly_DATA)
+am__installdirs = "$(DESTDIR)$(moduledir)"
+SCRIPTS = $(module_SCRIPTS)
+DIST_SOURCES =
DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
ACLOCAL = @ACLOCAL@
ACLOCAL_AMFLAGS = @ACLOCAL_AMFLAGS@
@@ -119,6 +127,8 @@ EXIF_SOVERSION = @EXIF_SOVERSION@
F77 = @F77@
FC = @FC@
FGREP = @FGREP@
+FLICKRNET_CFLAGS = @FLICKRNET_CFLAGS@
+FLICKRNET_LIBS = @FLICKRNET_LIBS@
F_CFLAGS = @F_CFLAGS@
F_LIBS = @F_LIBS@
GAPI2CODEGEN = @GAPI2CODEGEN@
@@ -132,6 +142,8 @@ GCONF_SHARP_LIBS = @GCONF_SHARP_LIBS@
GETTEXT_PACKAGE = @GETTEXT_PACKAGE@
GIO_CFLAGS = @GIO_CFLAGS@
GIO_LIBS = @GIO_LIBS@
+GLIBSHARP_2_12_7_CFLAGS = @GLIBSHARP_2_12_7_CFLAGS@
+GLIBSHARP_2_12_7_LIBS = @GLIBSHARP_2_12_7_LIBS@
GLIBSHARP_CFLAGS = @GLIBSHARP_CFLAGS@
GLIBSHARP_LIBS = @GLIBSHARP_LIBS@
GLIB_CFLAGS = @GLIB_CFLAGS@
@@ -147,6 +159,10 @@ GNOME_SHARP_CFLAGS = @GNOME_SHARP_CFLAGS@
GNOME_SHARP_LIBS = @GNOME_SHARP_LIBS@
GOBJECT_QUERY = @GOBJECT_QUERY@
GREP = @GREP@
+GTKSHARP_A11Y_CFLAGS = @GTKSHARP_A11Y_CFLAGS@
+GTKSHARP_A11Y_LIBS = @GTKSHARP_A11Y_LIBS@
+GTKSHARP_CFLAGS = @GTKSHARP_CFLAGS@
+GTKSHARP_LIBS = @GTKSHARP_LIBS@
HELP_DIR = @HELP_DIR@
ICONS_DIRECTORY = @ICONS_DIRECTORY@
INSTALL = @INSTALL@
@@ -160,14 +176,14 @@ INTLTOOL_EXTRACT = @INTLTOOL_EXTRACT@
INTLTOOL_MERGE = @INTLTOOL_MERGE@
INTLTOOL_PERL = @INTLTOOL_PERL@
INTLTOOL_UPDATE = @INTLTOOL_UPDATE@
+KEYRINGSHARP_CFLAGS = @KEYRINGSHARP_CFLAGS@
+KEYRINGSHARP_LIBS = @KEYRINGSHARP_LIBS@
LCMS_CFLAGS = @LCMS_CFLAGS@
LCMS_LIBS = @LCMS_LIBS@
LD = @LD@
LDFLAGS = @LDFLAGS@
LIBEXIF_VERSION_CHECK_CFLAGS = @LIBEXIF_VERSION_CHECK_CFLAGS@
LIBEXIF_VERSION_CHECK_LIBS = @LIBEXIF_VERSION_CHECK_LIBS@
-LIBGPHOTO2_CFLAGS = @LIBGPHOTO2_CFLAGS@
-LIBGPHOTO2_LIBS = @LIBGPHOTO2_LIBS@
LIBJPEG = @LIBJPEG@
LIBOBJS = @LIBOBJS@
LIBS = @LIBS@
@@ -182,6 +198,12 @@ MCS = @MCS@
MKDIR_P = @MKDIR_P@
MKINSTALLDIRS = @MKINSTALLDIRS@
MONO = @MONO@
+MONO_ADDINS_CFLAGS = @MONO_ADDINS_CFLAGS@
+MONO_ADDINS_GUI_CFLAGS = @MONO_ADDINS_GUI_CFLAGS@
+MONO_ADDINS_GUI_LIBS = @MONO_ADDINS_GUI_LIBS@
+MONO_ADDINS_LIBS = @MONO_ADDINS_LIBS@
+MONO_ADDINS_SETUP_CFLAGS = @MONO_ADDINS_SETUP_CFLAGS@
+MONO_ADDINS_SETUP_LIBS = @MONO_ADDINS_SETUP_LIBS@
MONO_MODULE_CFLAGS = @MONO_MODULE_CFLAGS@
MONO_MODULE_LIBS = @MONO_MODULE_LIBS@
MSGFMT = @MSGFMT@
@@ -192,7 +214,6 @@ NDESK_DBUS_LIBS = @NDESK_DBUS_LIBS@
NM = @NM@
NMEDIT = @NMEDIT@
NUNIT_CFLAGS = @NUNIT_CFLAGS@
-NUNIT_DEFINES = @NUNIT_DEFINES@
NUNIT_LIBS = @NUNIT_LIBS@
OBJC = @OBJC@
OBJDUMP = @OBJDUMP@
@@ -284,61 +305,238 @@ target_alias = @target_alias@
top_build_prefix = @top_build_prefix@
top_builddir = @top_builddir@
top_srcdir = @top_srcdir@
+ASSEMBLY = Mono.Tabblo
+TARGET = library
+LINK = $(REF_MONO_TABBLO) $(am__append_1)
+INSTALL_DIR = $(EXTENSIONS_INSTALL_DIR)
+SOURCES = \
+ Connection.cs \
+ IPreferences.cs \
+ MultipartRequest.cs \
+ Picture.cs \
+ TabbloException.cs \
+ TotalUploadProgress.cs \
+ Uploader.cs \
+ UploadProgressEventArgs.cs \
+ UploadProgressEventHandler.cs
+
+RESOURCES =
+ASSEMBLY_INFO_SOURCE = AssemblyInfo.cs
+
+# Initializers
+MONO_BASE_PATH =
+MONO_ADDINS_PATH =
+
+# Install Paths
+DEFAULT_INSTALL_DIR = $(pkglibdir)
+BACKENDS_INSTALL_DIR = $(DEFAULT_INSTALL_DIR)/Backends
+EXTENSIONS_INSTALL_DIR = $(DEFAULT_INSTALL_DIR)/Extensions
DIR_DOCS = $(top_builddir)/docs
DIR_EXTENSIONS = $(top_builddir)/extensions
-DIR_GPHOTO2 = $(top_builddir)/lib/libgphoto2-sharp
DIR_ICONS = $(top_builddir)/icons
DIR_JPEGTRAN = $(top_builddir)/lib/libjpegtran
-DIR_KEYRING = $(top_builddir)/lib/gnome-keyring-sharp
DIR_LIBFSPOT = $(top_builddir)/lib/libfspot
DIR_SEMWEB = $(top_builddir)/lib/semweb
DIR_SRC = $(top_builddir)/src
DIR_GIOSHARP = $(top_builddir)/lib/gio-sharp/gio
DIR_GTKSHARPBEANS = $(top_builddir)/lib/gtk-sharp-beans
DIR_UNIQUESHARP = $(top_builddir)/lib/unique-sharp/unique
-LINK_KEYRING = -r:$(DIR_KEYRING)/gnome-keyring-sharp.dll
-LINK_GPHOTO2 = -r:$(DIR_GPHOTO2)/libgphoto2-sharp.dll
-LINK_SEMWEB = -r:$(DIR_SEMWEB)/SemWeb.dll
-LINK_GIOSHARP = -r:$(DIR_GIOSHARP)/gio-sharp.dll
-LINK_GTKSHARPBEANS = -r:$(DIR_GTKSHARPBEANS)/gtk-sharp-beans.dll
-LINK_UNIQUESHARP = -r:$(DIR_UNIQUESHARP)/unique-sharp.dll
-CSC_FLAGS = -debug
-CSC = $(MCS) $(CSC_FLAGS) -target:exe
-CSC_LIB = $(MCS) $(CSC_FLAGS) -target:library
-MONO_DEBUGFLAGS = --debug
-RUNTIME = mono $(MONO_DEBUGFLAGS)
-ASSEMBLY_NAME = Mono.Tabblo
-ASSEMBLY_SOURCES = \
- $(srcdir)/AssemblyInfo.cs \
- $(srcdir)/Connection.cs \
- $(srcdir)/IPreferences.cs \
- $(srcdir)/MultipartRequest.cs \
- $(srcdir)/Picture.cs \
- $(srcdir)/TabbloException.cs \
- $(srcdir)/TotalUploadProgress.cs \
- $(srcdir)/Uploader.cs \
- $(srcdir)/UploadProgressEventArgs.cs \
- $(srcdir)/UploadProgressEventHandler.cs
-
-REFS = \
- -r:Mono.Posix.dll \
- -r:System.Web.dll
-
-PKGS =
-ASSEMBLY = $(ASSEMBLY_NAME).dll
-assemblydir = $(pkglibdir)
-assembly_DATA = $(ASSEMBLY)
-EXTRA_DIST = \
- $(ASSEMBLY_SOURCES)
-
-CLEANFILES = \
- $(ASSEMBLY) \
- $(ASSEMBLY).mdb
-
+DIR_BIN = $(top_builddir)/bin
+
+# External libraries to link against, generated from configure
+LINK_SYSTEM = -r:System
+LINK_SYSTEMDATA = -r:System.Data
+LINK_SYSTEM_WEB = -r:System.Web
+LINK_MONO_POSIX = -r:Mono.Posix
+LINK_MONO_CAIRO = -r:Mono.Cairo
+LINK_MONO_SIMD = -r:Mono.Simd
+LINK_MONODATA = -r:Mono.Data
+LINK_MONO_DATA_SQLITECLIENT = -r:Mono.Data.SqliteClient
+LINK_ICSHARP_ZIP_LIB = -r:ICSharpCode.SharpZipLib
+LINK_KEYRING = $(KEYRINGSHARP_LIBS)
+LINK_GLIB = $(GLIBSHARP_LIBS)
+LINK_GTK = $(GTKSHARP_LIBS)
+LINK_GNOME = $(GNOME_SHARP_LIBS)
+LINK_GCONF = $(GCONF_SHARP_LIBS)
+LINK_GLADE = -pkg:glade-sharp-2.0
+LINK_FLICKRNET = -pkg:flickrnet
+LINK_DBUS = $(NDESK_DBUS_LIBS) $(NDESK_DBUS_GLIB_LIBS)
+LINK_DBUS_NO_GLIB = $(NDESK_DBUS_LIBS)
+LINK_MONO_ADDINS_DEPS = $(MONO_ADDINS_LIBS)
+LINK_MONO_ADDINS_SETUP_DEPS = $(MONO_ADDINS_SETUP_LIBS)
+LINK_MONO_ADDINS_GUI_DEPS = $(MONO_ADDINS_GUI_LIBS)
+
+# GIO
+REF_GIO =
+LINK_GIO = -r:$(DIR_GIOSHARP)/gio-sharp.dll
+LINK_GIO_DEPS = $(REF_GIO) $(LINK_GIO)
+
+# Gtk Beans
+REF_GTK_BEANS = $(LINK_GIO_DEPS)
+LINK_GTK_BEANS = -r:$(DIR_GTKSHARPBEANS)/gtk-sharp-beans.dll
+LINK_GTK_BEANS_DEPS = $(REF_GTK_BEANS) $(LINK_GTK_BEANS)
+
+# Uniqe
+REF_UNIQUE =
+LINK_UNIQUE = -r:$(DIR_UNIQUESHARP)/unique-sharp.dll
+LINK_UNIQUE_DEPS = $(REF_UNIQUE) $(LINK_UNIQUE)
+
+# Hyena
+REF_HYENA = $(LINK_SYSTEM) $(LINK_MONO_POSIX)
+LINK_HYENA = -r:$(DIR_BIN)/Hyena.dll
+LINK_HYENA_DEPS = $(REF_HYENA) $(LINK_HYENA)
+
+# Semweb
+REF_SEMWEB = $(LINK_SYSTEMDATA) $(LINK_HYENA_DEPS)
+LINK_SEMWEB = -r:$(DIR_BIN)/SemWeb.dll
+LINK_SEMWEB_DEPS = $(REF_SEMWEB) $(LINK_SEMWEB)
+
+# Hyena.Data.Sqlite
+REF_HYENA_DATA_SQLITE = $(LINK_SQLITE)
+LINK_HYENA_DATA_SQLITE = -r:$(DIR_BIN)/Hyena.Data.Sqlite.dll
+LINK_HYENA_DATA_SQLITE_DEPS = $(REF_HYENA_DATA_SQLITE) $(LINK_HYENA_DATA_SQLITE)
+
+# Hyena.Gui
+REF_HYENA_GUI = $(LINK_HYENA_DEPS)
+LINK_HYENA_GUI = -r:$(DIR_BIN)/Hyena.Gui.dll
+LINK_HENA_GUI_DEPS = $(REF_HYENA_GUI) $(LINK_HYENA_GUI)
+
+# FSpot.Cms
+REF_FSPOT_CMS = $(LINK_GTK)
+LINK_FSPOT_CMS = -r:$(DIR_BIN)/FSpot.Cms.dll
+LINK_FSPOT_CMS_DEPS = $(REF_FSPOT_CMS) $(LINK_FSPOT_CMS)
+
+# FSpot.Utils
+REF_FSPOT_UTILS = $(LINK_HYENA_DEPS) $(LINK_GTK) $(LINK_GIO) $(LINK_MONO_CAIRO)
+LINK_FSPOT_UTILS = -r:$(DIR_BIN)/FSpot.Utils.dll
+LINK_FSPOT_UTILS_DEPS = $(REF_FSPOT_UTILS) $(LINK_FSPOT_UTILS)
+
+# FSpot.Core
+REF_FSPOT_CORE = $(LINK_FSPOT_UTILS_DEPS) $(LINK_FSPOT_CMS_DEPS)
+LINK_FSPOT_CORE = -r:$(DIR_BIN)/FSpot.Core.dll
+LINK_FSPOT_CORE_DEPS = $(REF_FSPOT_CORE) $(LINK_FSPOT_CORE)
+
+# FSpot.Query
+REF_FSPOT_QUERY = $(LINK_FSPOT_CORE_DEPS)
+LINK_FSPOT_QUERY = -r:$(DIR_BIN)/FSpot.Query.dll
+LINK_FSPOT_QUERY_DEPS = $(REF_FSPOT_QUERY) $(LINK_FSPOT_QUERY)
+
+# FSpot.JobScheduler
+REF_FSPOT_JOB_SCHEDULER = $(LINK_HYENA_DEPS)
+LINK_FSPOT_JOB_SCHEDULER = -r:$(DIR_BIN)/FSpot.JobScheduler.dll
+LINK_FSPOT_JOB_SCHEDULER_DEPS = $(REF_FSPOT_JOB_SCHEDULER) $(LINK_FSPOT_JOB_SCHEDULER)
+
+# FSpot.Bling
+REF_FSPOT_BLING = $(LINK_GTK_BEANS_DEPS) $(LINK_GLIB)
+LINK_FSPOT_BLING = -r:$(DIR_BIN)/FSpot.Bling.dll
+LINK_FSPOT_BLING_DEPS = $(REF_FSPOT_BLING) $(LINK_FSPOT_BLING)
+
+# FSpot.Platform
+REF_FSPOT_PLATFORM = $(LINK_GCONF) $(LINK_GTK) $(LINK_FSPOT_CORE_DEPS) $(LINK_DBUS)
+LINK_FSPOT_PLATFORM = -r:$(DIR_BIN)/FSpot.Platform.dll
+LINK_FSPOT_PLATFORM_DEPS = $(REF_FSPOT_PLATFORM) $(LINK_FSPOT_PLATFORM)
+
+# FSpot.Widgets
+REF_FSPOT_WIDGETS = $(LINK_FSPOT_CORE_DEPS) $(LINK_FSPOT_BLING_DEPS)
+LINK_FSPOT_WIDGETS = -r:$(DIR_BIN)/FSpot.Widgets.dll
+LINK_FSPOT_WIDGETS_DEPS = $(REF_FSPOT_WIDGETS) $(LINK_FSPOT_WIDGETS)
+
+# FSpot (executable)
+REF_FSPOT = $(LINK_FSPOT_WIDGETS_DEPS) $(LINK_FSPOT_PLATFORM_DEPS) $(LINK_FSPOT_QUERY_DEPS) \
+ $(LINK_GLIB) $(LINK_MONO_ADDINS_DEPS) $(LINK_UNIQUE_DEPS) $(LINK_MONO_ADDINS_SETUP_DEPS) \
+ $(LINK_SEMWEB_DEPS) $(LINK_GLADE) $(LINK_MONODATA) $(LINK_MONO_DATA_SQLITECLIENT) \
+ $(LINK_MONO_ADDINS_GUI_DEPS) $(LINK_FSPOT_JOB_SCHEDULER_DEPS) $(LINK_ICSHARP_ZIP_LIB) \
+ $(LINK_GNOME)
+
+# FIXME: do not link executables
+LINK_FSPOT = -r:$(DIR_BIN)/f-spot.exe
+LINK_FSPOT_DEPS = $(REF_FSPOT) $(LINK_FSPOT)
+
+# Extensions
+REF_FSPOT_EXTENSION_BLACKOUTEDITOR = $(LINK_FSPOT_DEPS)
+REF_FSPOT_EXTENSION_BWEDITOR = $(LINK_FSPOT_DEPS) $(LINK_MONO_SIMD)
+REF_FSPOT_EXTENSION_FLIPEDITOR = $(LINK_FSPOT_DEPS)
+REF_FSPOT_EXTENSION_PIXELATEEDITOR = $(LINK_FSPOT_DEPS)
+REF_FSPOT_EXTENSION_RESIZEEDITOR = $(LINK_FSPOT_DEPS)
+REF_FSPOT_EXTENSION_CDEXPORT = $(LINK_FSPOT_DEPS)
+REF_FSPOT_EXTENSION_FACEBOOKEXPORT = $(LINK_FSPOT_DEPS) $(LINK_KEYRING)
+REF_FSPOT_EXTENSION_FLICKREXPORT = $(LINK_FSPOT_DEPS) $(LINK_FLICKRNET)
+REF_FSPOT_EXTENSION_FOLDEREXPORT = $(LINK_FSPOT_DEPS) $(LINK_SYSTEM_WEB)
+REF_FSPOT_EXTENSION_GALLERYEXPORT = $(LINK_FSPOT_DEPS)
+REF_MONO_GOOGLE = $(LINK_HYENA_DEPS)
+LINK_MONO_GOOGLE = -r:$(DIR_BIN)/Mono.Google.dll
+LINK_MONO_GOOGLE_DEPS = $(REF_MONO_GOOGLE) $(LINK_MONO_GOOGLE)
+REF_FSPOT_EXTENSION_PICASAWEBEXPORT = $(LINK_FSPOT_DEPS) $(LINK_MONO_GOOGLE) $(LINK_KEYRING)
+REF_SMUGMUGNET = $(LINK_FSPOT_DEPS)
+LINK_SMUGMUGNET = -r:$(DIR_BIN)/SmugMugNet.dll
+LINK_SMUGMUGNET_DEPS = $(REF_SMUGMUGNET) $(LINK_SMUGMUGNET)
+REF_FSPOT_EXTENSION_SMUGMUGEXPORT = $(LINK_SMUGMUGNET_DEPS) $(LINK_KEYRING)
+REF_MONO_TABBLO = $(LINK_HYENA_DEPS)
+LINK_MONO_TABBLO = -r:$(DIR_BIN)/Mono.Tabblo.dll
+LINK_MONO_TABBLO_DEPS = $(REF_MONO_TABBLO) $(LINK_MONO_TABBLO)
+REF_FSPOT_EXTENSION_TABBLOEXPORT = $(LINK_FSPOT_DEPS) $(LINK_KEYRING) $(LINK_MONO_TABBLO_DEPS)
+REF_FSPOT_EXTENSION_ZIPEXPORT = $(LINK_FSPOT_DEPS)
+REF_FSPOT_EXTENSION_CHANGEPHOTOPATH = $(LINK_FSPOT_DEPS)
+REF_FSPOT_EXTENSION_DEVELOPINUFRAW = $(LINK_FSPOT_DEPS)
+REF_FSPOT_EXTENSION_HASHJOB = $(LINK_FSPOT_DEPS)
+REF_FSPOT_EXTENSION_LIVEWEBGALLERY = $(LINK_FSPOT_DEPS)
+REF_FSPOT_EXTENSION_MERGEDB = $(LINK_FSPOT_DEPS)
+REF_FSPOT_EXTENSION_RAWPLUSJPEG = $(LINK_FSPOT_DEPS)
+REF_FSPOT_EXTENSION_RETROACTIVEROLL = $(LINK_FSPOT_DEPS)
+REF_FSPOT_EXTENSION_SCREENSAVERCONFIG = $(LINK_FSPOT_DEPS)
+REF_FSPOT_EXTENSION_COVERTRANSITION = $(LINK_FSPOT_DEPS)
+
+# Cute hack to replace a space with something
+colon := :
+empty :=
+space := $(empty) $(empty)
+
+# Build path to allow running uninstalled
+RUN_PATH = $(subst $(space),$(colon), $(MONO_BASE_PATH))
+UNIQUE_FILTER_PIPE = tr [:space:] \\n | sort | uniq
+BUILD_DATA_DIR = $(top_builddir)/bin/share/$(PACKAGE)
+
+# Since all other attempts failed, we currently go this way:
+# This code adds the file specified in ASSEMBLY_INFO_SOURCE to SOURCES_BUILD.
+# If no such file is specified, the default AssemblyInfo.cs is used.
+ASSEMBLY_INFO_SOURCE_REAL = \
+ $(shell if [ "$(ASSEMBLY_INFO_SOURCE)" ]; \
+ then \
+ echo "$(addprefix $(srcdir)/, $(ASSEMBLY_INFO_SOURCE))"; \
+ else \
+ echo "$(top_srcdir)/src/AssemblyInfo.cs"; \
+ fi)
+
+SOURCES_BUILD = $(addprefix $(srcdir)/, $(SOURCES)) \
+ $(ASSEMBLY_INFO_SOURCE_REAL)
+RESOURCES_EXPANDED = $(addprefix $(srcdir)/, $(RESOURCES))
+RESOURCES_BUILD = $(foreach resource, $(RESOURCES_EXPANDED), \
+ -resource:$(resource),$(notdir $(resource)))
+
+INSTALL_ICONS = $(top_srcdir)/build/private-icon-theme-installer "$(mkinstalldirs)" "$(INSTALL_DATA)"
+THEME_ICONS_SOURCE = $(wildcard $(srcdir)/ThemeIcons/*/*/*.png) $(wildcard $(srcdir)/ThemeIcons/scalable/*/*.svg)
+THEME_ICONS_RELATIVE = $(subst $(srcdir)/ThemeIcons/, , $(THEME_ICONS_SOURCE))
+ASSEMBLY_EXTENSION = $(strip $(patsubst library, dll, $(TARGET)))
+ASSEMBLY_FILE = $(top_builddir)/bin/$(ASSEMBLY).$(ASSEMBLY_EXTENSION)
+INSTALL_DIR_RESOLVED = $(firstword $(subst , $(DEFAULT_INSTALL_DIR), $(INSTALL_DIR)))
+ at ENABLE_TESTS_TRUE@ENABLE_TESTS_FLAG = "-define:ENABLE_TESTS"
+ at ENABLE_ATK_TRUE@ENABLE_ATK_FLAG = "-define:ENABLE_ATK"
+FILTERED_LINK = $(shell echo "$(LINK)" | $(UNIQUE_FILTER_PIPE))
+DEP_LINK = $(shell echo "$(LINK)" | $(UNIQUE_FILTER_PIPE) | sed s,-r:,,g | grep '$(top_builddir)/bin/')
+OUTPUT_FILES = \
+ $(ASSEMBLY_FILE) \
+ $(ASSEMBLY_FILE).mdb
+
+moduledir = $(INSTALL_DIR_RESOLVED)
+module_SCRIPTS = $(OUTPUT_FILES)
+EXTRA_DIST = $(SOURCES_BUILD) $(RESOURCES_EXPANDED) $(THEME_ICONS_SOURCE)
+CLEANFILES = $(OUTPUT_FILES) $(ASSEMBLY_FILE).config
+DISTCLEANFILES = *.pidb
+MAINTAINERCLEANFILES = Makefile.in
all: all-am
.SUFFIXES:
-$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(top_srcdir)/Makefile.include $(am__configure_deps)
+$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(top_srcdir)/build/build.mk $(top_srcdir)/build/build.environment.mk $(top_srcdir)/build/build.rules.mk $(am__configure_deps)
@for dep in $?; do \
case '$(am__configure_deps)' in \
*$$dep*) \
@@ -368,32 +566,46 @@ $(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps)
$(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps)
cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
$(am__aclocal_m4_deps):
+install-moduleSCRIPTS: $(module_SCRIPTS)
+ @$(NORMAL_INSTALL)
+ test -z "$(moduledir)" || $(MKDIR_P) "$(DESTDIR)$(moduledir)"
+ @list='$(module_SCRIPTS)'; test -n "$(moduledir)" || list=; \
+ for p in $$list; do \
+ if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \
+ if test -f "$$d$$p"; then echo "$$d$$p"; echo "$$p"; else :; fi; \
+ done | \
+ sed -e 'p;s,.*/,,;n' \
+ -e 'h;s|.*|.|' \
+ -e 'p;x;s,.*/,,;$(transform)' | sed 'N;N;N;s,\n, ,g' | \
+ $(AWK) 'BEGIN { files["."] = ""; dirs["."] = 1; } \
+ { d=$$3; if (dirs[d] != 1) { print "d", d; dirs[d] = 1 } \
+ if ($$2 == $$4) { files[d] = files[d] " " $$1; \
+ if (++n[d] == $(am__install_max)) { \
+ print "f", d, files[d]; n[d] = 0; files[d] = "" } } \
+ else { print "f", d "/" $$4, $$1 } } \
+ END { for (d in files) print "f", d, files[d] }' | \
+ while read type dir files; do \
+ if test "$$dir" = .; then dir=; else dir=/$$dir; fi; \
+ test -z "$$files" || { \
+ echo " $(INSTALL_SCRIPT) $$files '$(DESTDIR)$(moduledir)$$dir'"; \
+ $(INSTALL_SCRIPT) $$files "$(DESTDIR)$(moduledir)$$dir" || exit $$?; \
+ } \
+ ; done
+
+uninstall-moduleSCRIPTS:
+ @$(NORMAL_UNINSTALL)
+ @list='$(module_SCRIPTS)'; test -n "$(moduledir)" || exit 0; \
+ files=`for p in $$list; do echo "$$p"; done | \
+ sed -e 's,.*/,,;$(transform)'`; \
+ test -n "$$list" || exit 0; \
+ echo " ( cd '$(DESTDIR)$(moduledir)' && rm -f" $$files ")"; \
+ cd "$(DESTDIR)$(moduledir)" && rm -f $$files
mostlyclean-libtool:
-rm -f *.lo
clean-libtool:
-rm -rf .libs _libs
-install-assemblyDATA: $(assembly_DATA)
- @$(NORMAL_INSTALL)
- test -z "$(assemblydir)" || $(MKDIR_P) "$(DESTDIR)$(assemblydir)"
- @list='$(assembly_DATA)'; test -n "$(assemblydir)" || list=; \
- for p in $$list; do \
- if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \
- echo "$$d$$p"; \
- done | $(am__base_list) | \
- while read files; do \
- echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(assemblydir)'"; \
- $(INSTALL_DATA) $$files "$(DESTDIR)$(assemblydir)" || exit $$?; \
- done
-
-uninstall-assemblyDATA:
- @$(NORMAL_UNINSTALL)
- @list='$(assembly_DATA)'; test -n "$(assemblydir)" || list=; \
- files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \
- test -n "$$files" || exit 0; \
- echo " ( cd '$(DESTDIR)$(assemblydir)' && rm -f" $$files ")"; \
- cd "$(DESTDIR)$(assemblydir)" && rm -f $$files
tags: TAGS
TAGS:
@@ -433,9 +645,9 @@ distdir: $(DISTFILES)
done
check-am: all-am
check: check-am
-all-am: Makefile $(DATA)
+all-am: Makefile $(SCRIPTS)
installdirs:
- for dir in "$(DESTDIR)$(assemblydir)"; do \
+ for dir in "$(DESTDIR)$(moduledir)"; do \
test -z "$$dir" || $(MKDIR_P) "$$dir"; \
done
install: install-am
@@ -460,10 +672,12 @@ clean-generic:
distclean-generic:
-test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
-test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES)
+ -test -z "$(DISTCLEANFILES)" || rm -f $(DISTCLEANFILES)
maintainer-clean-generic:
@echo "This command is intended for maintainers to use"
@echo "it deletes files that may require special tools to rebuild."
+ -test -z "$(MAINTAINERCLEANFILES)" || rm -f $(MAINTAINERCLEANFILES)
clean: clean-am
clean-am: clean-generic clean-libtool mostlyclean-am
@@ -484,7 +698,7 @@ info: info-am
info-am:
-install-data-am: install-assemblyDATA
+install-data-am: install-data-local install-moduleSCRIPTS
install-dvi: install-dvi-am
@@ -528,27 +742,72 @@ ps: ps-am
ps-am:
-uninstall-am: uninstall-assemblyDATA
+uninstall-am: uninstall-local uninstall-moduleSCRIPTS
.MAKE: install-am install-strip
.PHONY: all all-am check check-am clean clean-generic clean-libtool \
distclean distclean-generic distclean-libtool distdir dvi \
dvi-am html html-am info info-am install install-am \
- install-assemblyDATA install-data install-data-am install-dvi \
+ install-data install-data-am install-data-local 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-generic mostlyclean-libtool pdf pdf-am ps ps-am \
- uninstall uninstall-am uninstall-assemblyDATA
-
-
-all: $(ASSEMBLY)
-
-$(ASSEMBLY): $(ASSEMBLY_SOURCES)
- $(CSC_LIB) -out:$@ $(PKGS) $(REFS) $(ASSEMBLY_SOURCES)
+ install-moduleSCRIPTS install-pdf install-pdf-am install-ps \
+ install-ps-am install-strip installcheck installcheck-am \
+ installdirs maintainer-clean maintainer-clean-generic \
+ mostlyclean mostlyclean-generic mostlyclean-libtool pdf pdf-am \
+ ps ps-am uninstall uninstall-am uninstall-local \
+ uninstall-moduleSCRIPTS
+
+
+all: $(ASSEMBLY_FILE) theme-icons
+
+run:
+ @pushd $(top_builddir); \
+ make run; \
+ popd;
+
+# uncommented for now.
+# tests are currently excuted from Makefile in $(top_builddir)
+#test:
+# @pushd $(top_builddir)/tests; \
+# make $(ASSEMBLY); \
+# popd;
+
+build-debug:
+ @echo $(DEP_LINK)
+
+$(ASSEMBLY_FILE).mdb: $(ASSEMBLY_FILE)
+
+$(ASSEMBLY_FILE): $(SOURCES_BUILD) $(RESOURCES_EXPANDED) $(DEP_LINK)
+ @mkdir -p $(top_builddir)/bin
+ @if [ ! "x$(ENABLE_RELEASE)" = "xyes" ]; then \
+ $(top_srcdir)/build/dll-map-makefile-verifier $(srcdir)/Makefile.am $(srcdir)/$(notdir $@.config) && \
+ $(MONO) $(top_builddir)/build/dll-map-verifier.exe $(srcdir)/$(notdir $@.config) -iwinmm -ilibbanshee -ilibbnpx11 -ilibc -ilibc.so.6 -iintl -ilibmtp.dll -ilibigemacintegration.dylib -iCFRelease $(SOURCES_BUILD); \
+ fi;
+ $(MCS) \
+ $(GMCS_FLAGS) \
+ $(ASSEMBLY_BUILD_FLAGS) \
+ -nowarn:0278 -nowarn:0078 $$warn \
+ -define:HAVE_GTK_2_10 -define:NET_2_0 \
+ -debug -target:$(TARGET) -out:$@ \
+ $(BUILD_DEFINES) $(ENABLE_TESTS_FLAG) $(ENABLE_ATK_FLAG) \
+ $(FILTERED_LINK) $(RESOURCES_BUILD) $(SOURCES_BUILD)
+ @if [ -e $(srcdir)/$(notdir $@.config) ]; then \
+ cp $(srcdir)/$(notdir $@.config) $(top_builddir)/bin; \
+ fi;
+ @if [ ! -z "$(EXTRA_BUNDLE)" ]; then \
+ cp $(EXTRA_BUNDLE) $(top_builddir)/bin; \
+ fi;
+
+theme-icons: $(THEME_ICONS_SOURCE)
+ @$(INSTALL_ICONS) -il "$(BUILD_DATA_DIR)" "$(srcdir)" $(THEME_ICONS_RELATIVE)
+
+install-data-local: $(THEME_ICONS_SOURCE)
+ @$(INSTALL_ICONS) -i "$(DESTDIR)$(pkgdatadir)" "$(srcdir)" $(THEME_ICONS_RELATIVE)
+
+uninstall-local: $(THEME_ICONS_SOURCE)
+ @$(INSTALL_ICONS) -u "$(DESTDIR)$(pkgdatadir)" "$(srcdir)" $(THEME_ICONS_RELATIVE)
# 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/extensions/Exporters/TabbloExport/TabbloExport.cs b/extensions/Exporters/TabbloExport/TabbloExport.cs
index 6d05ba8..6cfdf55 100644
--- a/extensions/Exporters/TabbloExport/TabbloExport.cs
+++ b/extensions/Exporters/TabbloExport/TabbloExport.cs
@@ -36,7 +36,7 @@ using System.Diagnostics;
using System.Net;
using System.Threading;
-using FSpot.Utils;
+using Hyena;
using FSpot.UI.Dialog;
namespace FSpotTabbloExport {
@@ -319,7 +319,7 @@ namespace FSpotTabbloExport {
Catalog.GetString ("Error");
// FIXME: Retry logic?
// progressDialog.PerformRetrySkip ();
- Console.WriteLine (e);
+ Log.Exception (e);
} finally {
OnUploadFinished ();
}
@@ -373,7 +373,7 @@ namespace FSpotTabbloExport {
PhotoStore photo_store = FSpot.App.Instance.Database.Photos;
FSpot.Photo photo = photo_store.GetByUri (
- item.DefaultVersionUri);
+ item.DefaultVersion.Uri);
Debug.Assert (null != photo);
if (null == photo) {
return;
@@ -395,11 +395,11 @@ namespace FSpotTabbloExport {
FSpot.IBrowsableItem [] items = model.Photos;
for (int i = 0; i < pictures.Length; ++i) {
- string mime_type = GLib.FileFactory.NewForUri (items [i].DefaultVersionUri).
+ string mime_type = GLib.FileFactory.NewForUri (items [i].DefaultVersion.Uri).
QueryInfo ("standard::content-type", GLib.FileQueryInfoFlags.None, null).ContentType;
pictures [i] = new Picture (items [i].Name,
- items [i].DefaultVersionUri,
+ new Uri (items [i].DefaultVersion.Uri.AbsoluteUri),
mime_type,
model.Privacy);
}
diff --git a/extensions/Exporters/TabbloExport/TabbloExportModel.cs b/extensions/Exporters/TabbloExport/TabbloExportModel.cs
index aca8abf..bfc6728 100644
--- a/extensions/Exporters/TabbloExport/TabbloExportModel.cs
+++ b/extensions/Exporters/TabbloExport/TabbloExportModel.cs
@@ -27,7 +27,7 @@
// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
//
-using FSpot.Utils;
+using Hyena;
using Mono.Tabblo;
@@ -270,13 +270,13 @@ namespace FSpotTabbloExport {
Gnome.Keyring.Ring.Find (
type, attrs);
if (1 < items.Length) {
- Log.Warning ("More than one {0} "
+ Log.WarningFormat ("More than one {0} "
+ " found in keyring",
KeyringItemName);
}
if (1 <= items.Length) {
- Log.Debug ("{0} data found in "
+ Log.DebugFormat ("{0} data found in "
+ "keyring",
KeyringItemName);
attrs = items [0].Attributes;
diff --git a/extensions/Exporters/TabbloExport/UserDecisionCertificatePolicy.cs b/extensions/Exporters/TabbloExport/UserDecisionCertificatePolicy.cs
index fb5bce9..e5ea72a 100644
--- a/extensions/Exporters/TabbloExport/UserDecisionCertificatePolicy.cs
+++ b/extensions/Exporters/TabbloExport/UserDecisionCertificatePolicy.cs
@@ -34,7 +34,7 @@ using System.Reflection;
using System.Security.Cryptography.X509Certificates;
using System.Threading;
-using FSpot.Utils;
+using Hyena;
namespace FSpotTabbloExport {
diff --git a/extensions/Exporters/ZipExport/Makefile.am b/extensions/Exporters/ZipExport/Makefile.am
index 52b0378..4831935 100644
--- a/extensions/Exporters/ZipExport/Makefile.am
+++ b/extensions/Exporters/ZipExport/Makefile.am
@@ -1,55 +1,12 @@
-include $(top_srcdir)/Makefile.include
+ASSEMBLY = FSpot.Exporters.ZipExport
+TARGET = library
+LINK = $(REF_FSPOT_EXTENSION_ZIPEXPORT)
+INSTALL_DIR = $(EXTENSIONS_INSTALL_DIR)
-PLUGIN_NAME = ZipExport
+SOURCES = ZipExport.cs
-PLUGIN_MANIFEST = $(PLUGIN_NAME).addin.xml
+RESOURCES = \
+ ZipExport.addin.xml \
+ ZipExport.glade
-PLUGIN_ASSEMBLY = $(PLUGIN_NAME).dll
-
-PLUGIN_SOURCES = \
- $(srcdir)/ZipExport.cs
-
-REFS = \
- -r:$(top_builddir)/src/f-spot.exe \
- -r:$(top_builddir)/src/FSpot.Core.dll \
- -r:$(top_builddir)/src/FSpot.Utils.dll \
- $(LINK_SEMWEB) \
- $(LINK_GPHOTO2) \
- $(LINK_GTKSHARPBEANS) \
- $(LINK_GIOSHARP) \
- $(LINK_UNIQUESHARP) \
- -r:System.Web \
- -r:ICSharpCode.SharpZipLib \
- -r:Mono.Posix
-
-PKGS = \
- -pkg:gtk-sharp-2.0 \
- -pkg:glade-sharp-2.0 \
- -pkg:mono-addins
-
-RESOURCES = \
- -resource:$(srcdir)/$(PLUGIN_MANIFEST) \
- -resource:$(srcdir)/$(PLUGIN_NAME).glade
-
-all: $(PLUGIN_ASSEMBLY)
-
-mpack: $(PLUGIN_ASSEMBLY)
- mautil p $(PLUGIN_ASSEMBLY)
-
-$(PLUGIN_ASSEMBLY): $(PLUGIN_SOURCES) $(PLUGIN_MANIFEST)
- $(CSC_LIB) -out:$@ $(PLUGIN_SOURCES) $(REFS) $(PKGS) $(ASSEMBLIES) $(RESOURCES)
-
-plugindir = $(pkglibdir)/extensions
-
-plugin_DATA = \
- $(PLUGIN_ASSEMBLY)
-
-EXTRA_DIST = \
- $(PLUGIN_SOURCES) \
- $(PLUGIN_MANIFEST) \
- $(PLUGIN_NAME).glade
-
-CLEANFILES = \
- $(PLUGIN_ASSEMBLY) \
- $(PLUGIN_ASSEMBLY).mdb \
- *.mpack
+include $(top_srcdir)/build/build.mk
diff --git a/extensions/Exporters/ZipExport/Makefile.in b/extensions/Exporters/ZipExport/Makefile.in
index b659af7..56f9cd5 100644
--- a/extensions/Exporters/ZipExport/Makefile.in
+++ b/extensions/Exporters/ZipExport/Makefile.in
@@ -35,13 +35,22 @@ POST_UNINSTALL = :
build_triplet = @build@
host_triplet = @host@
DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in \
- $(top_srcdir)/Makefile.include
+ $(top_srcdir)/build/build.environment.mk \
+ $(top_srcdir)/build/build.mk \
+ $(top_srcdir)/build/build.rules.mk
+ at ENABLE_TESTS_TRUE@am__append_1 = " $(NUNIT_LIBS)"
subdir = extensions/Exporters/ZipExport
ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
am__aclocal_m4_deps = $(top_srcdir)/build/m4/shave/shave.m4 \
$(top_srcdir)/build/m4/shamrock/expansions.m4 \
+ $(top_srcdir)/build/m4/shamrock/gnome-doc.m4 \
$(top_srcdir)/build/m4/shamrock/mono.m4 \
+ $(top_srcdir)/build/m4/shamrock/nunit.m4 \
$(top_srcdir)/build/m4/shamrock/programs.m4 \
+ $(top_srcdir)/build/m4/f-spot/flickrnet.m4 \
+ $(top_srcdir)/build/m4/f-spot/gnome-keyring-sharp.m4 \
+ $(top_srcdir)/build/m4/f-spot/gtk-sharp.m4 \
+ $(top_srcdir)/build/m4/f-spot/mono-addins.m4 \
$(top_srcdir)/acinclude.m4 $(top_srcdir)/configure.ac
am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
$(ACLOCAL_M4)
@@ -49,8 +58,6 @@ mkinstalldirs = $(install_sh) -d
CONFIG_HEADER = $(top_builddir)/config.h
CONFIG_CLEAN_FILES =
CONFIG_CLEAN_VPATH_FILES =
-SOURCES =
-DIST_SOURCES =
am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`;
am__vpath_adj = case $$p in \
$(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \
@@ -72,8 +79,9 @@ am__nobase_list = $(am__nobase_strip_setup); \
am__base_list = \
sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \
sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g'
-am__installdirs = "$(DESTDIR)$(plugindir)"
-DATA = $(plugin_DATA)
+am__installdirs = "$(DESTDIR)$(moduledir)"
+SCRIPTS = $(module_SCRIPTS)
+DIST_SOURCES =
DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
ACLOCAL = @ACLOCAL@
ACLOCAL_AMFLAGS = @ACLOCAL_AMFLAGS@
@@ -119,6 +127,8 @@ EXIF_SOVERSION = @EXIF_SOVERSION@
F77 = @F77@
FC = @FC@
FGREP = @FGREP@
+FLICKRNET_CFLAGS = @FLICKRNET_CFLAGS@
+FLICKRNET_LIBS = @FLICKRNET_LIBS@
F_CFLAGS = @F_CFLAGS@
F_LIBS = @F_LIBS@
GAPI2CODEGEN = @GAPI2CODEGEN@
@@ -132,6 +142,8 @@ GCONF_SHARP_LIBS = @GCONF_SHARP_LIBS@
GETTEXT_PACKAGE = @GETTEXT_PACKAGE@
GIO_CFLAGS = @GIO_CFLAGS@
GIO_LIBS = @GIO_LIBS@
+GLIBSHARP_2_12_7_CFLAGS = @GLIBSHARP_2_12_7_CFLAGS@
+GLIBSHARP_2_12_7_LIBS = @GLIBSHARP_2_12_7_LIBS@
GLIBSHARP_CFLAGS = @GLIBSHARP_CFLAGS@
GLIBSHARP_LIBS = @GLIBSHARP_LIBS@
GLIB_CFLAGS = @GLIB_CFLAGS@
@@ -147,6 +159,10 @@ GNOME_SHARP_CFLAGS = @GNOME_SHARP_CFLAGS@
GNOME_SHARP_LIBS = @GNOME_SHARP_LIBS@
GOBJECT_QUERY = @GOBJECT_QUERY@
GREP = @GREP@
+GTKSHARP_A11Y_CFLAGS = @GTKSHARP_A11Y_CFLAGS@
+GTKSHARP_A11Y_LIBS = @GTKSHARP_A11Y_LIBS@
+GTKSHARP_CFLAGS = @GTKSHARP_CFLAGS@
+GTKSHARP_LIBS = @GTKSHARP_LIBS@
HELP_DIR = @HELP_DIR@
ICONS_DIRECTORY = @ICONS_DIRECTORY@
INSTALL = @INSTALL@
@@ -160,14 +176,14 @@ INTLTOOL_EXTRACT = @INTLTOOL_EXTRACT@
INTLTOOL_MERGE = @INTLTOOL_MERGE@
INTLTOOL_PERL = @INTLTOOL_PERL@
INTLTOOL_UPDATE = @INTLTOOL_UPDATE@
+KEYRINGSHARP_CFLAGS = @KEYRINGSHARP_CFLAGS@
+KEYRINGSHARP_LIBS = @KEYRINGSHARP_LIBS@
LCMS_CFLAGS = @LCMS_CFLAGS@
LCMS_LIBS = @LCMS_LIBS@
LD = @LD@
LDFLAGS = @LDFLAGS@
LIBEXIF_VERSION_CHECK_CFLAGS = @LIBEXIF_VERSION_CHECK_CFLAGS@
LIBEXIF_VERSION_CHECK_LIBS = @LIBEXIF_VERSION_CHECK_LIBS@
-LIBGPHOTO2_CFLAGS = @LIBGPHOTO2_CFLAGS@
-LIBGPHOTO2_LIBS = @LIBGPHOTO2_LIBS@
LIBJPEG = @LIBJPEG@
LIBOBJS = @LIBOBJS@
LIBS = @LIBS@
@@ -182,6 +198,12 @@ MCS = @MCS@
MKDIR_P = @MKDIR_P@
MKINSTALLDIRS = @MKINSTALLDIRS@
MONO = @MONO@
+MONO_ADDINS_CFLAGS = @MONO_ADDINS_CFLAGS@
+MONO_ADDINS_GUI_CFLAGS = @MONO_ADDINS_GUI_CFLAGS@
+MONO_ADDINS_GUI_LIBS = @MONO_ADDINS_GUI_LIBS@
+MONO_ADDINS_LIBS = @MONO_ADDINS_LIBS@
+MONO_ADDINS_SETUP_CFLAGS = @MONO_ADDINS_SETUP_CFLAGS@
+MONO_ADDINS_SETUP_LIBS = @MONO_ADDINS_SETUP_LIBS@
MONO_MODULE_CFLAGS = @MONO_MODULE_CFLAGS@
MONO_MODULE_LIBS = @MONO_MODULE_LIBS@
MSGFMT = @MSGFMT@
@@ -192,7 +214,6 @@ NDESK_DBUS_LIBS = @NDESK_DBUS_LIBS@
NM = @NM@
NMEDIT = @NMEDIT@
NUNIT_CFLAGS = @NUNIT_CFLAGS@
-NUNIT_DEFINES = @NUNIT_DEFINES@
NUNIT_LIBS = @NUNIT_LIBS@
OBJC = @OBJC@
OBJDUMP = @OBJDUMP@
@@ -284,75 +305,230 @@ target_alias = @target_alias@
top_build_prefix = @top_build_prefix@
top_builddir = @top_builddir@
top_srcdir = @top_srcdir@
+ASSEMBLY = FSpot.Exporters.ZipExport
+TARGET = library
+LINK = $(REF_FSPOT_EXTENSION_ZIPEXPORT) $(am__append_1)
+INSTALL_DIR = $(EXTENSIONS_INSTALL_DIR)
+SOURCES = ZipExport.cs
+RESOURCES = \
+ ZipExport.addin.xml \
+ ZipExport.glade
+
+
+# Initializers
+MONO_BASE_PATH =
+MONO_ADDINS_PATH =
+
+# Install Paths
+DEFAULT_INSTALL_DIR = $(pkglibdir)
+BACKENDS_INSTALL_DIR = $(DEFAULT_INSTALL_DIR)/Backends
+EXTENSIONS_INSTALL_DIR = $(DEFAULT_INSTALL_DIR)/Extensions
DIR_DOCS = $(top_builddir)/docs
DIR_EXTENSIONS = $(top_builddir)/extensions
-DIR_GPHOTO2 = $(top_builddir)/lib/libgphoto2-sharp
DIR_ICONS = $(top_builddir)/icons
DIR_JPEGTRAN = $(top_builddir)/lib/libjpegtran
-DIR_KEYRING = $(top_builddir)/lib/gnome-keyring-sharp
DIR_LIBFSPOT = $(top_builddir)/lib/libfspot
DIR_SEMWEB = $(top_builddir)/lib/semweb
DIR_SRC = $(top_builddir)/src
DIR_GIOSHARP = $(top_builddir)/lib/gio-sharp/gio
DIR_GTKSHARPBEANS = $(top_builddir)/lib/gtk-sharp-beans
DIR_UNIQUESHARP = $(top_builddir)/lib/unique-sharp/unique
-LINK_KEYRING = -r:$(DIR_KEYRING)/gnome-keyring-sharp.dll
-LINK_GPHOTO2 = -r:$(DIR_GPHOTO2)/libgphoto2-sharp.dll
-LINK_SEMWEB = -r:$(DIR_SEMWEB)/SemWeb.dll
-LINK_GIOSHARP = -r:$(DIR_GIOSHARP)/gio-sharp.dll
-LINK_GTKSHARPBEANS = -r:$(DIR_GTKSHARPBEANS)/gtk-sharp-beans.dll
-LINK_UNIQUESHARP = -r:$(DIR_UNIQUESHARP)/unique-sharp.dll
-CSC_FLAGS = -debug
-CSC = $(MCS) $(CSC_FLAGS) -target:exe
-CSC_LIB = $(MCS) $(CSC_FLAGS) -target:library
-MONO_DEBUGFLAGS = --debug
-RUNTIME = mono $(MONO_DEBUGFLAGS)
-PLUGIN_NAME = ZipExport
-PLUGIN_MANIFEST = $(PLUGIN_NAME).addin.xml
-PLUGIN_ASSEMBLY = $(PLUGIN_NAME).dll
-PLUGIN_SOURCES = \
- $(srcdir)/ZipExport.cs
-
-REFS = \
- -r:$(top_builddir)/src/f-spot.exe \
- -r:$(top_builddir)/src/FSpot.Core.dll \
- -r:$(top_builddir)/src/FSpot.Utils.dll \
- $(LINK_SEMWEB) \
- $(LINK_GPHOTO2) \
- $(LINK_GTKSHARPBEANS) \
- $(LINK_GIOSHARP) \
- $(LINK_UNIQUESHARP) \
- -r:System.Web \
- -r:ICSharpCode.SharpZipLib \
- -r:Mono.Posix
-
-PKGS = \
- -pkg:gtk-sharp-2.0 \
- -pkg:glade-sharp-2.0 \
- -pkg:mono-addins
-
-RESOURCES = \
- -resource:$(srcdir)/$(PLUGIN_MANIFEST) \
- -resource:$(srcdir)/$(PLUGIN_NAME).glade
-
-plugindir = $(pkglibdir)/extensions
-plugin_DATA = \
- $(PLUGIN_ASSEMBLY)
-
-EXTRA_DIST = \
- $(PLUGIN_SOURCES) \
- $(PLUGIN_MANIFEST) \
- $(PLUGIN_NAME).glade
-
-CLEANFILES = \
- $(PLUGIN_ASSEMBLY) \
- $(PLUGIN_ASSEMBLY).mdb \
- *.mpack
-
+DIR_BIN = $(top_builddir)/bin
+
+# External libraries to link against, generated from configure
+LINK_SYSTEM = -r:System
+LINK_SYSTEMDATA = -r:System.Data
+LINK_SYSTEM_WEB = -r:System.Web
+LINK_MONO_POSIX = -r:Mono.Posix
+LINK_MONO_CAIRO = -r:Mono.Cairo
+LINK_MONO_SIMD = -r:Mono.Simd
+LINK_MONODATA = -r:Mono.Data
+LINK_MONO_DATA_SQLITECLIENT = -r:Mono.Data.SqliteClient
+LINK_ICSHARP_ZIP_LIB = -r:ICSharpCode.SharpZipLib
+LINK_KEYRING = $(KEYRINGSHARP_LIBS)
+LINK_GLIB = $(GLIBSHARP_LIBS)
+LINK_GTK = $(GTKSHARP_LIBS)
+LINK_GNOME = $(GNOME_SHARP_LIBS)
+LINK_GCONF = $(GCONF_SHARP_LIBS)
+LINK_GLADE = -pkg:glade-sharp-2.0
+LINK_FLICKRNET = -pkg:flickrnet
+LINK_DBUS = $(NDESK_DBUS_LIBS) $(NDESK_DBUS_GLIB_LIBS)
+LINK_DBUS_NO_GLIB = $(NDESK_DBUS_LIBS)
+LINK_MONO_ADDINS_DEPS = $(MONO_ADDINS_LIBS)
+LINK_MONO_ADDINS_SETUP_DEPS = $(MONO_ADDINS_SETUP_LIBS)
+LINK_MONO_ADDINS_GUI_DEPS = $(MONO_ADDINS_GUI_LIBS)
+
+# GIO
+REF_GIO =
+LINK_GIO = -r:$(DIR_GIOSHARP)/gio-sharp.dll
+LINK_GIO_DEPS = $(REF_GIO) $(LINK_GIO)
+
+# Gtk Beans
+REF_GTK_BEANS = $(LINK_GIO_DEPS)
+LINK_GTK_BEANS = -r:$(DIR_GTKSHARPBEANS)/gtk-sharp-beans.dll
+LINK_GTK_BEANS_DEPS = $(REF_GTK_BEANS) $(LINK_GTK_BEANS)
+
+# Uniqe
+REF_UNIQUE =
+LINK_UNIQUE = -r:$(DIR_UNIQUESHARP)/unique-sharp.dll
+LINK_UNIQUE_DEPS = $(REF_UNIQUE) $(LINK_UNIQUE)
+
+# Hyena
+REF_HYENA = $(LINK_SYSTEM) $(LINK_MONO_POSIX)
+LINK_HYENA = -r:$(DIR_BIN)/Hyena.dll
+LINK_HYENA_DEPS = $(REF_HYENA) $(LINK_HYENA)
+
+# Semweb
+REF_SEMWEB = $(LINK_SYSTEMDATA) $(LINK_HYENA_DEPS)
+LINK_SEMWEB = -r:$(DIR_BIN)/SemWeb.dll
+LINK_SEMWEB_DEPS = $(REF_SEMWEB) $(LINK_SEMWEB)
+
+# Hyena.Data.Sqlite
+REF_HYENA_DATA_SQLITE = $(LINK_SQLITE)
+LINK_HYENA_DATA_SQLITE = -r:$(DIR_BIN)/Hyena.Data.Sqlite.dll
+LINK_HYENA_DATA_SQLITE_DEPS = $(REF_HYENA_DATA_SQLITE) $(LINK_HYENA_DATA_SQLITE)
+
+# Hyena.Gui
+REF_HYENA_GUI = $(LINK_HYENA_DEPS)
+LINK_HYENA_GUI = -r:$(DIR_BIN)/Hyena.Gui.dll
+LINK_HENA_GUI_DEPS = $(REF_HYENA_GUI) $(LINK_HYENA_GUI)
+
+# FSpot.Cms
+REF_FSPOT_CMS = $(LINK_GTK)
+LINK_FSPOT_CMS = -r:$(DIR_BIN)/FSpot.Cms.dll
+LINK_FSPOT_CMS_DEPS = $(REF_FSPOT_CMS) $(LINK_FSPOT_CMS)
+
+# FSpot.Utils
+REF_FSPOT_UTILS = $(LINK_HYENA_DEPS) $(LINK_GTK) $(LINK_GIO) $(LINK_MONO_CAIRO)
+LINK_FSPOT_UTILS = -r:$(DIR_BIN)/FSpot.Utils.dll
+LINK_FSPOT_UTILS_DEPS = $(REF_FSPOT_UTILS) $(LINK_FSPOT_UTILS)
+
+# FSpot.Core
+REF_FSPOT_CORE = $(LINK_FSPOT_UTILS_DEPS) $(LINK_FSPOT_CMS_DEPS)
+LINK_FSPOT_CORE = -r:$(DIR_BIN)/FSpot.Core.dll
+LINK_FSPOT_CORE_DEPS = $(REF_FSPOT_CORE) $(LINK_FSPOT_CORE)
+
+# FSpot.Query
+REF_FSPOT_QUERY = $(LINK_FSPOT_CORE_DEPS)
+LINK_FSPOT_QUERY = -r:$(DIR_BIN)/FSpot.Query.dll
+LINK_FSPOT_QUERY_DEPS = $(REF_FSPOT_QUERY) $(LINK_FSPOT_QUERY)
+
+# FSpot.JobScheduler
+REF_FSPOT_JOB_SCHEDULER = $(LINK_HYENA_DEPS)
+LINK_FSPOT_JOB_SCHEDULER = -r:$(DIR_BIN)/FSpot.JobScheduler.dll
+LINK_FSPOT_JOB_SCHEDULER_DEPS = $(REF_FSPOT_JOB_SCHEDULER) $(LINK_FSPOT_JOB_SCHEDULER)
+
+# FSpot.Bling
+REF_FSPOT_BLING = $(LINK_GTK_BEANS_DEPS) $(LINK_GLIB)
+LINK_FSPOT_BLING = -r:$(DIR_BIN)/FSpot.Bling.dll
+LINK_FSPOT_BLING_DEPS = $(REF_FSPOT_BLING) $(LINK_FSPOT_BLING)
+
+# FSpot.Platform
+REF_FSPOT_PLATFORM = $(LINK_GCONF) $(LINK_GTK) $(LINK_FSPOT_CORE_DEPS) $(LINK_DBUS)
+LINK_FSPOT_PLATFORM = -r:$(DIR_BIN)/FSpot.Platform.dll
+LINK_FSPOT_PLATFORM_DEPS = $(REF_FSPOT_PLATFORM) $(LINK_FSPOT_PLATFORM)
+
+# FSpot.Widgets
+REF_FSPOT_WIDGETS = $(LINK_FSPOT_CORE_DEPS) $(LINK_FSPOT_BLING_DEPS)
+LINK_FSPOT_WIDGETS = -r:$(DIR_BIN)/FSpot.Widgets.dll
+LINK_FSPOT_WIDGETS_DEPS = $(REF_FSPOT_WIDGETS) $(LINK_FSPOT_WIDGETS)
+
+# FSpot (executable)
+REF_FSPOT = $(LINK_FSPOT_WIDGETS_DEPS) $(LINK_FSPOT_PLATFORM_DEPS) $(LINK_FSPOT_QUERY_DEPS) \
+ $(LINK_GLIB) $(LINK_MONO_ADDINS_DEPS) $(LINK_UNIQUE_DEPS) $(LINK_MONO_ADDINS_SETUP_DEPS) \
+ $(LINK_SEMWEB_DEPS) $(LINK_GLADE) $(LINK_MONODATA) $(LINK_MONO_DATA_SQLITECLIENT) \
+ $(LINK_MONO_ADDINS_GUI_DEPS) $(LINK_FSPOT_JOB_SCHEDULER_DEPS) $(LINK_ICSHARP_ZIP_LIB) \
+ $(LINK_GNOME)
+
+# FIXME: do not link executables
+LINK_FSPOT = -r:$(DIR_BIN)/f-spot.exe
+LINK_FSPOT_DEPS = $(REF_FSPOT) $(LINK_FSPOT)
+
+# Extensions
+REF_FSPOT_EXTENSION_BLACKOUTEDITOR = $(LINK_FSPOT_DEPS)
+REF_FSPOT_EXTENSION_BWEDITOR = $(LINK_FSPOT_DEPS) $(LINK_MONO_SIMD)
+REF_FSPOT_EXTENSION_FLIPEDITOR = $(LINK_FSPOT_DEPS)
+REF_FSPOT_EXTENSION_PIXELATEEDITOR = $(LINK_FSPOT_DEPS)
+REF_FSPOT_EXTENSION_RESIZEEDITOR = $(LINK_FSPOT_DEPS)
+REF_FSPOT_EXTENSION_CDEXPORT = $(LINK_FSPOT_DEPS)
+REF_FSPOT_EXTENSION_FACEBOOKEXPORT = $(LINK_FSPOT_DEPS) $(LINK_KEYRING)
+REF_FSPOT_EXTENSION_FLICKREXPORT = $(LINK_FSPOT_DEPS) $(LINK_FLICKRNET)
+REF_FSPOT_EXTENSION_FOLDEREXPORT = $(LINK_FSPOT_DEPS) $(LINK_SYSTEM_WEB)
+REF_FSPOT_EXTENSION_GALLERYEXPORT = $(LINK_FSPOT_DEPS)
+REF_MONO_GOOGLE = $(LINK_HYENA_DEPS)
+LINK_MONO_GOOGLE = -r:$(DIR_BIN)/Mono.Google.dll
+LINK_MONO_GOOGLE_DEPS = $(REF_MONO_GOOGLE) $(LINK_MONO_GOOGLE)
+REF_FSPOT_EXTENSION_PICASAWEBEXPORT = $(LINK_FSPOT_DEPS) $(LINK_MONO_GOOGLE) $(LINK_KEYRING)
+REF_SMUGMUGNET = $(LINK_FSPOT_DEPS)
+LINK_SMUGMUGNET = -r:$(DIR_BIN)/SmugMugNet.dll
+LINK_SMUGMUGNET_DEPS = $(REF_SMUGMUGNET) $(LINK_SMUGMUGNET)
+REF_FSPOT_EXTENSION_SMUGMUGEXPORT = $(LINK_SMUGMUGNET_DEPS) $(LINK_KEYRING)
+REF_MONO_TABBLO = $(LINK_HYENA_DEPS)
+LINK_MONO_TABBLO = -r:$(DIR_BIN)/Mono.Tabblo.dll
+LINK_MONO_TABBLO_DEPS = $(REF_MONO_TABBLO) $(LINK_MONO_TABBLO)
+REF_FSPOT_EXTENSION_TABBLOEXPORT = $(LINK_FSPOT_DEPS) $(LINK_KEYRING) $(LINK_MONO_TABBLO_DEPS)
+REF_FSPOT_EXTENSION_ZIPEXPORT = $(LINK_FSPOT_DEPS)
+REF_FSPOT_EXTENSION_CHANGEPHOTOPATH = $(LINK_FSPOT_DEPS)
+REF_FSPOT_EXTENSION_DEVELOPINUFRAW = $(LINK_FSPOT_DEPS)
+REF_FSPOT_EXTENSION_HASHJOB = $(LINK_FSPOT_DEPS)
+REF_FSPOT_EXTENSION_LIVEWEBGALLERY = $(LINK_FSPOT_DEPS)
+REF_FSPOT_EXTENSION_MERGEDB = $(LINK_FSPOT_DEPS)
+REF_FSPOT_EXTENSION_RAWPLUSJPEG = $(LINK_FSPOT_DEPS)
+REF_FSPOT_EXTENSION_RETROACTIVEROLL = $(LINK_FSPOT_DEPS)
+REF_FSPOT_EXTENSION_SCREENSAVERCONFIG = $(LINK_FSPOT_DEPS)
+REF_FSPOT_EXTENSION_COVERTRANSITION = $(LINK_FSPOT_DEPS)
+
+# Cute hack to replace a space with something
+colon := :
+empty :=
+space := $(empty) $(empty)
+
+# Build path to allow running uninstalled
+RUN_PATH = $(subst $(space),$(colon), $(MONO_BASE_PATH))
+UNIQUE_FILTER_PIPE = tr [:space:] \\n | sort | uniq
+BUILD_DATA_DIR = $(top_builddir)/bin/share/$(PACKAGE)
+
+# Since all other attempts failed, we currently go this way:
+# This code adds the file specified in ASSEMBLY_INFO_SOURCE to SOURCES_BUILD.
+# If no such file is specified, the default AssemblyInfo.cs is used.
+ASSEMBLY_INFO_SOURCE_REAL = \
+ $(shell if [ "$(ASSEMBLY_INFO_SOURCE)" ]; \
+ then \
+ echo "$(addprefix $(srcdir)/, $(ASSEMBLY_INFO_SOURCE))"; \
+ else \
+ echo "$(top_srcdir)/src/AssemblyInfo.cs"; \
+ fi)
+
+SOURCES_BUILD = $(addprefix $(srcdir)/, $(SOURCES)) \
+ $(ASSEMBLY_INFO_SOURCE_REAL)
+RESOURCES_EXPANDED = $(addprefix $(srcdir)/, $(RESOURCES))
+RESOURCES_BUILD = $(foreach resource, $(RESOURCES_EXPANDED), \
+ -resource:$(resource),$(notdir $(resource)))
+
+INSTALL_ICONS = $(top_srcdir)/build/private-icon-theme-installer "$(mkinstalldirs)" "$(INSTALL_DATA)"
+THEME_ICONS_SOURCE = $(wildcard $(srcdir)/ThemeIcons/*/*/*.png) $(wildcard $(srcdir)/ThemeIcons/scalable/*/*.svg)
+THEME_ICONS_RELATIVE = $(subst $(srcdir)/ThemeIcons/, , $(THEME_ICONS_SOURCE))
+ASSEMBLY_EXTENSION = $(strip $(patsubst library, dll, $(TARGET)))
+ASSEMBLY_FILE = $(top_builddir)/bin/$(ASSEMBLY).$(ASSEMBLY_EXTENSION)
+INSTALL_DIR_RESOLVED = $(firstword $(subst , $(DEFAULT_INSTALL_DIR), $(INSTALL_DIR)))
+ at ENABLE_TESTS_TRUE@ENABLE_TESTS_FLAG = "-define:ENABLE_TESTS"
+ at ENABLE_ATK_TRUE@ENABLE_ATK_FLAG = "-define:ENABLE_ATK"
+FILTERED_LINK = $(shell echo "$(LINK)" | $(UNIQUE_FILTER_PIPE))
+DEP_LINK = $(shell echo "$(LINK)" | $(UNIQUE_FILTER_PIPE) | sed s,-r:,,g | grep '$(top_builddir)/bin/')
+OUTPUT_FILES = \
+ $(ASSEMBLY_FILE) \
+ $(ASSEMBLY_FILE).mdb
+
+moduledir = $(INSTALL_DIR_RESOLVED)
+module_SCRIPTS = $(OUTPUT_FILES)
+EXTRA_DIST = $(SOURCES_BUILD) $(RESOURCES_EXPANDED) $(THEME_ICONS_SOURCE)
+CLEANFILES = $(OUTPUT_FILES) $(ASSEMBLY_FILE).config
+DISTCLEANFILES = *.pidb
+MAINTAINERCLEANFILES = Makefile.in
all: all-am
.SUFFIXES:
-$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(top_srcdir)/Makefile.include $(am__configure_deps)
+$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(top_srcdir)/build/build.mk $(top_srcdir)/build/build.environment.mk $(top_srcdir)/build/build.rules.mk $(am__configure_deps)
@for dep in $?; do \
case '$(am__configure_deps)' in \
*$$dep*) \
@@ -382,32 +558,46 @@ $(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps)
$(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps)
cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
$(am__aclocal_m4_deps):
+install-moduleSCRIPTS: $(module_SCRIPTS)
+ @$(NORMAL_INSTALL)
+ test -z "$(moduledir)" || $(MKDIR_P) "$(DESTDIR)$(moduledir)"
+ @list='$(module_SCRIPTS)'; test -n "$(moduledir)" || list=; \
+ for p in $$list; do \
+ if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \
+ if test -f "$$d$$p"; then echo "$$d$$p"; echo "$$p"; else :; fi; \
+ done | \
+ sed -e 'p;s,.*/,,;n' \
+ -e 'h;s|.*|.|' \
+ -e 'p;x;s,.*/,,;$(transform)' | sed 'N;N;N;s,\n, ,g' | \
+ $(AWK) 'BEGIN { files["."] = ""; dirs["."] = 1; } \
+ { d=$$3; if (dirs[d] != 1) { print "d", d; dirs[d] = 1 } \
+ if ($$2 == $$4) { files[d] = files[d] " " $$1; \
+ if (++n[d] == $(am__install_max)) { \
+ print "f", d, files[d]; n[d] = 0; files[d] = "" } } \
+ else { print "f", d "/" $$4, $$1 } } \
+ END { for (d in files) print "f", d, files[d] }' | \
+ while read type dir files; do \
+ if test "$$dir" = .; then dir=; else dir=/$$dir; fi; \
+ test -z "$$files" || { \
+ echo " $(INSTALL_SCRIPT) $$files '$(DESTDIR)$(moduledir)$$dir'"; \
+ $(INSTALL_SCRIPT) $$files "$(DESTDIR)$(moduledir)$$dir" || exit $$?; \
+ } \
+ ; done
+
+uninstall-moduleSCRIPTS:
+ @$(NORMAL_UNINSTALL)
+ @list='$(module_SCRIPTS)'; test -n "$(moduledir)" || exit 0; \
+ files=`for p in $$list; do echo "$$p"; done | \
+ sed -e 's,.*/,,;$(transform)'`; \
+ test -n "$$list" || exit 0; \
+ echo " ( cd '$(DESTDIR)$(moduledir)' && rm -f" $$files ")"; \
+ cd "$(DESTDIR)$(moduledir)" && rm -f $$files
mostlyclean-libtool:
-rm -f *.lo
clean-libtool:
-rm -rf .libs _libs
-install-pluginDATA: $(plugin_DATA)
- @$(NORMAL_INSTALL)
- test -z "$(plugindir)" || $(MKDIR_P) "$(DESTDIR)$(plugindir)"
- @list='$(plugin_DATA)'; test -n "$(plugindir)" || list=; \
- for p in $$list; do \
- if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \
- echo "$$d$$p"; \
- done | $(am__base_list) | \
- while read files; do \
- echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(plugindir)'"; \
- $(INSTALL_DATA) $$files "$(DESTDIR)$(plugindir)" || exit $$?; \
- done
-
-uninstall-pluginDATA:
- @$(NORMAL_UNINSTALL)
- @list='$(plugin_DATA)'; test -n "$(plugindir)" || list=; \
- files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \
- test -n "$$files" || exit 0; \
- echo " ( cd '$(DESTDIR)$(plugindir)' && rm -f" $$files ")"; \
- cd "$(DESTDIR)$(plugindir)" && rm -f $$files
tags: TAGS
TAGS:
@@ -447,9 +637,9 @@ distdir: $(DISTFILES)
done
check-am: all-am
check: check-am
-all-am: Makefile $(DATA)
+all-am: Makefile $(SCRIPTS)
installdirs:
- for dir in "$(DESTDIR)$(plugindir)"; do \
+ for dir in "$(DESTDIR)$(moduledir)"; do \
test -z "$$dir" || $(MKDIR_P) "$$dir"; \
done
install: install-am
@@ -474,10 +664,12 @@ clean-generic:
distclean-generic:
-test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
-test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES)
+ -test -z "$(DISTCLEANFILES)" || rm -f $(DISTCLEANFILES)
maintainer-clean-generic:
@echo "This command is intended for maintainers to use"
@echo "it deletes files that may require special tools to rebuild."
+ -test -z "$(MAINTAINERCLEANFILES)" || rm -f $(MAINTAINERCLEANFILES)
clean: clean-am
clean-am: clean-generic clean-libtool mostlyclean-am
@@ -498,7 +690,7 @@ info: info-am
info-am:
-install-data-am: install-pluginDATA
+install-data-am: install-data-local install-moduleSCRIPTS
install-dvi: install-dvi-am
@@ -542,30 +734,72 @@ ps: ps-am
ps-am:
-uninstall-am: uninstall-pluginDATA
+uninstall-am: uninstall-local uninstall-moduleSCRIPTS
.MAKE: install-am install-strip
.PHONY: all all-am check check-am clean clean-generic clean-libtool \
distclean distclean-generic distclean-libtool distdir dvi \
dvi-am html html-am info info-am 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-pluginDATA install-ps install-ps-am \
- install-strip installcheck installcheck-am installdirs \
- maintainer-clean maintainer-clean-generic mostlyclean \
- mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \
- uninstall uninstall-am uninstall-pluginDATA
-
-
-all: $(PLUGIN_ASSEMBLY)
-
-mpack: $(PLUGIN_ASSEMBLY)
- mautil p $(PLUGIN_ASSEMBLY)
-
-$(PLUGIN_ASSEMBLY): $(PLUGIN_SOURCES) $(PLUGIN_MANIFEST)
- $(CSC_LIB) -out:$@ $(PLUGIN_SOURCES) $(REFS) $(PKGS) $(ASSEMBLIES) $(RESOURCES)
+ install-data install-data-am install-data-local install-dvi \
+ install-dvi-am install-exec install-exec-am install-html \
+ install-html-am install-info install-info-am install-man \
+ install-moduleSCRIPTS install-pdf install-pdf-am install-ps \
+ install-ps-am install-strip installcheck installcheck-am \
+ installdirs maintainer-clean maintainer-clean-generic \
+ mostlyclean mostlyclean-generic mostlyclean-libtool pdf pdf-am \
+ ps ps-am uninstall uninstall-am uninstall-local \
+ uninstall-moduleSCRIPTS
+
+
+all: $(ASSEMBLY_FILE) theme-icons
+
+run:
+ @pushd $(top_builddir); \
+ make run; \
+ popd;
+
+# uncommented for now.
+# tests are currently excuted from Makefile in $(top_builddir)
+#test:
+# @pushd $(top_builddir)/tests; \
+# make $(ASSEMBLY); \
+# popd;
+
+build-debug:
+ @echo $(DEP_LINK)
+
+$(ASSEMBLY_FILE).mdb: $(ASSEMBLY_FILE)
+
+$(ASSEMBLY_FILE): $(SOURCES_BUILD) $(RESOURCES_EXPANDED) $(DEP_LINK)
+ @mkdir -p $(top_builddir)/bin
+ @if [ ! "x$(ENABLE_RELEASE)" = "xyes" ]; then \
+ $(top_srcdir)/build/dll-map-makefile-verifier $(srcdir)/Makefile.am $(srcdir)/$(notdir $@.config) && \
+ $(MONO) $(top_builddir)/build/dll-map-verifier.exe $(srcdir)/$(notdir $@.config) -iwinmm -ilibbanshee -ilibbnpx11 -ilibc -ilibc.so.6 -iintl -ilibmtp.dll -ilibigemacintegration.dylib -iCFRelease $(SOURCES_BUILD); \
+ fi;
+ $(MCS) \
+ $(GMCS_FLAGS) \
+ $(ASSEMBLY_BUILD_FLAGS) \
+ -nowarn:0278 -nowarn:0078 $$warn \
+ -define:HAVE_GTK_2_10 -define:NET_2_0 \
+ -debug -target:$(TARGET) -out:$@ \
+ $(BUILD_DEFINES) $(ENABLE_TESTS_FLAG) $(ENABLE_ATK_FLAG) \
+ $(FILTERED_LINK) $(RESOURCES_BUILD) $(SOURCES_BUILD)
+ @if [ -e $(srcdir)/$(notdir $@.config) ]; then \
+ cp $(srcdir)/$(notdir $@.config) $(top_builddir)/bin; \
+ fi;
+ @if [ ! -z "$(EXTRA_BUNDLE)" ]; then \
+ cp $(EXTRA_BUNDLE) $(top_builddir)/bin; \
+ fi;
+
+theme-icons: $(THEME_ICONS_SOURCE)
+ @$(INSTALL_ICONS) -il "$(BUILD_DATA_DIR)" "$(srcdir)" $(THEME_ICONS_RELATIVE)
+
+install-data-local: $(THEME_ICONS_SOURCE)
+ @$(INSTALL_ICONS) -i "$(DESTDIR)$(pkgdatadir)" "$(srcdir)" $(THEME_ICONS_RELATIVE)
+
+uninstall-local: $(THEME_ICONS_SOURCE)
+ @$(INSTALL_ICONS) -u "$(DESTDIR)$(pkgdatadir)" "$(srcdir)" $(THEME_ICONS_RELATIVE)
# 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/extensions/Exporters/ZipExport/ZipExport.cs b/extensions/Exporters/ZipExport/ZipExport.cs
index 7d25d25..6c73aae 100644
--- a/extensions/Exporters/ZipExport/ZipExport.cs
+++ b/extensions/Exporters/ZipExport/ZipExport.cs
@@ -16,7 +16,7 @@ using FSpot;
using FSpot.UI.Dialog;
using FSpot.Extensions;
using FSpot.Filters;
-using FSpot.Utils;
+using Hyena;
using System;
using System.IO;
using System.Collections;
@@ -42,7 +42,7 @@ namespace ZipExport {
public void Run (IBrowsableCollection p) {
Log.Information ("Executing ZipExport extension");
if (p.Count == 0) {
- HigMessageDialog md = new HigMessageDialog (MainWindow.Toplevel.Window, DialogFlags.DestroyWithParent,
+ HigMessageDialog md = new HigMessageDialog (App.Instance.Organizer.Window, DialogFlags.DestroyWithParent,
Gtk.MessageType.Error, ButtonsType.Ok,
Catalog.GetString ("No selection available"),
Catalog.GetString ("This tool requires an active selection. Please select one or more pictures and try again"));
@@ -94,10 +94,10 @@ namespace ZipExport {
System.Uri dest = new System.Uri (uri_chooser.Uri);
Crc32 crc = new Crc32 ();
string filedest = dest.LocalPath + "/" + filename.Text;
- Log.Debug ("Creating zip file {0}", filedest);
+ Log.DebugFormat ("Creating zip file {0}", filedest);
ZipOutputStream s = new ZipOutputStream (File.Create(filedest));
if (scale_check.Active)
- Log.Debug ("Scaling to {0}", scale_size.ValueAsInt);
+ Log.DebugFormat ("Scaling to {0}", scale_size.ValueAsInt);
ProgressDialog progress_dialog = new ProgressDialog (Catalog.GetString ("Exporting files"),
ProgressDialog.CancelButtonType.Stop,
@@ -115,17 +115,17 @@ namespace ZipExport {
FilterSet filters = new FilterSet ();
filters.Add (new JpegFilter ());
filters.Add (new ResizeFilter ((uint) scale_size.ValueAsInt));
- FilterRequest freq = new FilterRequest (photos [i].DefaultVersionUri);
+ FilterRequest freq = new FilterRequest (photos [i].DefaultVersion.Uri);
filters.Convert (freq);
f = freq.Current.LocalPath;
} else {
- f = photos [i].DefaultVersionUri.LocalPath;
+ f = photos [i].DefaultVersion.Uri.LocalPath;
}
FileStream fs = File.OpenRead (f);
byte [] buffer = new byte [fs.Length];
fs.Read (buffer, 0, buffer.Length);
- ZipEntry entry = new ZipEntry (System.IO.Path.GetFileName (photos [i].DefaultVersionUri.LocalPath));
+ ZipEntry entry = new ZipEntry (System.IO.Path.GetFileName (photos [i].DefaultVersion.Uri.LocalPath));
entry.DateTime = DateTime.Now;
diff --git a/extensions/Makefile.am b/extensions/Makefile.am
index 6b51acf..628616f 100644
--- a/extensions/Makefile.am
+++ b/extensions/Makefile.am
@@ -1,7 +1,6 @@
SUBDIRS = \
Editors \
Exporters \
- Services \
Tools \
Transitions
diff --git a/extensions/Makefile.in b/extensions/Makefile.in
index 73a7a95..0179bc8 100644
--- a/extensions/Makefile.in
+++ b/extensions/Makefile.in
@@ -39,8 +39,14 @@ DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in
ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
am__aclocal_m4_deps = $(top_srcdir)/build/m4/shave/shave.m4 \
$(top_srcdir)/build/m4/shamrock/expansions.m4 \
+ $(top_srcdir)/build/m4/shamrock/gnome-doc.m4 \
$(top_srcdir)/build/m4/shamrock/mono.m4 \
+ $(top_srcdir)/build/m4/shamrock/nunit.m4 \
$(top_srcdir)/build/m4/shamrock/programs.m4 \
+ $(top_srcdir)/build/m4/f-spot/flickrnet.m4 \
+ $(top_srcdir)/build/m4/f-spot/gnome-keyring-sharp.m4 \
+ $(top_srcdir)/build/m4/f-spot/gtk-sharp.m4 \
+ $(top_srcdir)/build/m4/f-spot/mono-addins.m4 \
$(top_srcdir)/acinclude.m4 $(top_srcdir)/configure.ac
am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
$(ACLOCAL_M4)
@@ -158,6 +164,8 @@ EXIF_SOVERSION = @EXIF_SOVERSION@
F77 = @F77@
FC = @FC@
FGREP = @FGREP@
+FLICKRNET_CFLAGS = @FLICKRNET_CFLAGS@
+FLICKRNET_LIBS = @FLICKRNET_LIBS@
F_CFLAGS = @F_CFLAGS@
F_LIBS = @F_LIBS@
GAPI2CODEGEN = @GAPI2CODEGEN@
@@ -171,6 +179,8 @@ GCONF_SHARP_LIBS = @GCONF_SHARP_LIBS@
GETTEXT_PACKAGE = @GETTEXT_PACKAGE@
GIO_CFLAGS = @GIO_CFLAGS@
GIO_LIBS = @GIO_LIBS@
+GLIBSHARP_2_12_7_CFLAGS = @GLIBSHARP_2_12_7_CFLAGS@
+GLIBSHARP_2_12_7_LIBS = @GLIBSHARP_2_12_7_LIBS@
GLIBSHARP_CFLAGS = @GLIBSHARP_CFLAGS@
GLIBSHARP_LIBS = @GLIBSHARP_LIBS@
GLIB_CFLAGS = @GLIB_CFLAGS@
@@ -186,6 +196,10 @@ GNOME_SHARP_CFLAGS = @GNOME_SHARP_CFLAGS@
GNOME_SHARP_LIBS = @GNOME_SHARP_LIBS@
GOBJECT_QUERY = @GOBJECT_QUERY@
GREP = @GREP@
+GTKSHARP_A11Y_CFLAGS = @GTKSHARP_A11Y_CFLAGS@
+GTKSHARP_A11Y_LIBS = @GTKSHARP_A11Y_LIBS@
+GTKSHARP_CFLAGS = @GTKSHARP_CFLAGS@
+GTKSHARP_LIBS = @GTKSHARP_LIBS@
HELP_DIR = @HELP_DIR@
ICONS_DIRECTORY = @ICONS_DIRECTORY@
INSTALL = @INSTALL@
@@ -199,14 +213,14 @@ INTLTOOL_EXTRACT = @INTLTOOL_EXTRACT@
INTLTOOL_MERGE = @INTLTOOL_MERGE@
INTLTOOL_PERL = @INTLTOOL_PERL@
INTLTOOL_UPDATE = @INTLTOOL_UPDATE@
+KEYRINGSHARP_CFLAGS = @KEYRINGSHARP_CFLAGS@
+KEYRINGSHARP_LIBS = @KEYRINGSHARP_LIBS@
LCMS_CFLAGS = @LCMS_CFLAGS@
LCMS_LIBS = @LCMS_LIBS@
LD = @LD@
LDFLAGS = @LDFLAGS@
LIBEXIF_VERSION_CHECK_CFLAGS = @LIBEXIF_VERSION_CHECK_CFLAGS@
LIBEXIF_VERSION_CHECK_LIBS = @LIBEXIF_VERSION_CHECK_LIBS@
-LIBGPHOTO2_CFLAGS = @LIBGPHOTO2_CFLAGS@
-LIBGPHOTO2_LIBS = @LIBGPHOTO2_LIBS@
LIBJPEG = @LIBJPEG@
LIBOBJS = @LIBOBJS@
LIBS = @LIBS@
@@ -221,6 +235,12 @@ MCS = @MCS@
MKDIR_P = @MKDIR_P@
MKINSTALLDIRS = @MKINSTALLDIRS@
MONO = @MONO@
+MONO_ADDINS_CFLAGS = @MONO_ADDINS_CFLAGS@
+MONO_ADDINS_GUI_CFLAGS = @MONO_ADDINS_GUI_CFLAGS@
+MONO_ADDINS_GUI_LIBS = @MONO_ADDINS_GUI_LIBS@
+MONO_ADDINS_LIBS = @MONO_ADDINS_LIBS@
+MONO_ADDINS_SETUP_CFLAGS = @MONO_ADDINS_SETUP_CFLAGS@
+MONO_ADDINS_SETUP_LIBS = @MONO_ADDINS_SETUP_LIBS@
MONO_MODULE_CFLAGS = @MONO_MODULE_CFLAGS@
MONO_MODULE_LIBS = @MONO_MODULE_LIBS@
MSGFMT = @MSGFMT@
@@ -231,7 +251,6 @@ NDESK_DBUS_LIBS = @NDESK_DBUS_LIBS@
NM = @NM@
NMEDIT = @NMEDIT@
NUNIT_CFLAGS = @NUNIT_CFLAGS@
-NUNIT_DEFINES = @NUNIT_DEFINES@
NUNIT_LIBS = @NUNIT_LIBS@
OBJC = @OBJC@
OBJDUMP = @OBJDUMP@
@@ -326,7 +345,6 @@ top_srcdir = @top_srcdir@
SUBDIRS = \
Editors \
Exporters \
- Services \
Tools \
Transitions
diff --git a/extensions/Services/DBusService/DBusProxy.cs b/extensions/Services/DBusService/DBusProxy.cs
deleted file mode 100644
index d8036c0..0000000
--- a/extensions/Services/DBusService/DBusProxy.cs
+++ /dev/null
@@ -1,464 +0,0 @@
-using System;
-using System.Collections.Generic;
-using System.IO;
-using System.Text;
-
-using FSpot;
-using FSpot.Query;
-using FSpot.Utils;
-using NDesk.DBus;
-
-namespace DBusService {
- public delegate void RemoteUp();
- public delegate void RemoteDown();
-
- public class DBusException : Exception {
- public DBusException (string message)
- : base (message)
- {}
-
- public DBusException (string message, params object [] format_params)
- : this (string.Format (message, format_params))
- {}
- }
-
- public class DBusProxy {
- public event RemoteUp RemoteUp;
- public event RemoteDown RemoteDown;
-
- internal void OnRemoteUp ()
- {
- if (RemoteUp != null)
- RemoteUp ();
- }
-
- internal void OnRemoteDown ()
- {
- if (RemoteDown != null)
- RemoteDown ();
- }
- }
-
- public class DBusProxyFactory {
- private const string SERVICE_PATH = "org.gnome.FSpot";
- private const string TAG_PROXY_PATH = "/org/gnome/FSpot/TagRemoteControl";
- private const string PHOTO_PROXY_PATH = "/org/gnome/FSpot/PhotoRemoteControl";
-
- private static TagProxy tag_remote;
- private static PhotoProxy photo_remote;
-
- public static void Load (Db db)
- {
- tag_remote = new TagProxy (db.Tags);
- Bus.Session.Register (SERVICE_PATH, new ObjectPath (TAG_PROXY_PATH), tag_remote);
- tag_remote.OnRemoteUp ();
-
- photo_remote = new PhotoProxy (db);
- Bus.Session.Register (SERVICE_PATH, new ObjectPath (PHOTO_PROXY_PATH), photo_remote);
- photo_remote.OnRemoteUp ();
- }
-
- public static void EmitRemoteDown ()
- {
- tag_remote.OnRemoteDown ();
- photo_remote.OnRemoteDown ();
- }
-
- }
-
- [Interface ("org.gnome.FSpot.TagRemoteControl")]
- public interface ITagRemoteControl {
- // info, included for backward compatibility with times
- // where this was embedded in f-spot core
- bool IsReadOnly ();
-
- // get all
- string[] GetTagNames ();
- uint[] GetTagIds ();
-
- // get info for one tag
- IDictionary<string, object> GetTagByName (string name);
- IDictionary<string, object> GetTagById (int id);
-
- event RemoteUp RemoteUp;
- event RemoteDown RemoteDown;
-
- // tag creators
- int CreateTag (string name);
- int CreateTagWithParent (string parent, string name);
-
- // tag removers
- bool RemoveTagByName (string name);
- bool RemoveTagById (int id);
- }
-
- // Class exposing all photos on the dbus
- public class TagProxy : DBusProxy, ITagRemoteControl {
- protected TagStore tag_store;
-
- public TagStore Store {
- get { return tag_store; }
- }
-
- internal TagProxy (TagStore store)
- {
- tag_store = store;
- }
-
- #region Interface methods
- public bool IsReadOnly () {
- return false;
- }
-
- public string[] GetTagNames ()
- {
- List<string> tags = new List<string> ();
- AddTagNameToList (tags, tag_store.RootCategory);
-
- return tags.ToArray ();
- }
-
- public uint[] GetTagIds ()
- {
- List<uint> tags = new List<uint> ();
- AddTagIdToList (tags, tag_store.RootCategory);
-
- return tags.ToArray ();
- }
-
- public IDictionary<string, object> GetTagByName (string name)
- {
- Tag t = tag_store.GetTagByName (name);
-
- if (t == null)
- throw new DBusException ("Tag with name {0} does not exist.", name);
-
- return CreateDictFromTag (t);
- }
-
- public IDictionary<string, object> GetTagById (int id)
- {
- Tag t = tag_store.GetTagById (id);
-
- if (t == null)
- throw new DBusException ("Tag with id {0} does not exist.", id);
-
- return CreateDictFromTag (t);
- }
-
- public int CreateTag (string name)
- {
- return CreateTagPriv (null, name);
- }
-
- public int CreateTagWithParent (string parent, string name)
- {
- Tag parent_tag = tag_store.GetTagByName (parent);
-
- if (!(parent_tag is Category))
- parent_tag = null;
-
- return CreateTagPriv (parent_tag as Category, name);
- }
-
- public bool RemoveTagByName (string name)
- {
- Tag tag = tag_store.GetTagByName (name);
-
- return RemoveTag (tag);
- }
-
- public bool RemoveTagById (int id)
- {
- Tag tag = tag_store.GetTagById (id);
-
- return RemoveTag (tag);
- }
-
- #endregion
-
- #region Helper methods
- private void AddTagNameToList (List<string> list, Tag tag)
- {
- if (tag != tag_store.RootCategory)
- list.Add (tag.Name);
-
- if (tag is Category) {
- foreach (Tag child in (tag as Category).Children)
- AddTagNameToList (list, child);
- }
- }
-
- private void AddTagIdToList (List<uint> list, Tag tag)
- {
- if (tag != tag_store.RootCategory)
- list.Add (tag.Id);
-
- if (tag is Category) {
- foreach (Tag child in (tag as Category).Children)
- AddTagIdToList (list, child);
- }
- }
-
- private IDictionary<string, object> CreateDictFromTag (Tag t)
- {
- Dictionary<string, object> result = new Dictionary<string, object> ();
-
- result.Add ("Id", t.Id);
- result.Add ("Name", t.Name);
-
- StringBuilder builder = new StringBuilder ();
-
- if (t is Category) {
- foreach (Tag child in (t as Category).Children) {
- if (builder.Length > 0)
- builder.Append (",");
-
- builder.Append (child.Name);
- }
- }
-
- result.Add ("Children", builder.ToString ());
-
- return result;
- }
-
- private int CreateTagPriv (Category parent_tag, string name)
- {
- try {
- Tag created = tag_store.CreateCategory (parent_tag, name, false);
- return (int)created.Id;
- }
- catch {
- throw new DBusException ("Failed to create tag.");
- }
- }
-
- private bool RemoveTag (Tag t)
- {
- if (t == null)
- return false;
-
- try {
- // remove tags from photos first
- App.Instance.Database.Photos.Remove (new Tag [] { t });
- // then remove tag
- tag_store.Remove (t);
- return true;
- }
- catch {
- return false;
- }
- }
- #endregion
- }
-
-
- [Interface ("org.gnome.FSpot.PhotoRemoteControl")]
- public interface IPhotoRemoteControl {
- // info; included for backward compatibility
- // with previous version where this was embedded in f-spot
- bool IsReadOnly ();
-
- // get all
- uint[] GetPhotoIds ();
-
- // import prepare
- void PrepareRoll ();
- void FinishRoll ();
-
- // import
- int ImportPhoto (string path, bool copy, string []tags);
-
- // photo properties
- IDictionary<string, object> GetPhotoProperties (uint id);
-
- // photo remove
- void RemovePhoto (uint id);
-
- // query
- uint[] Query (string []tags);
- uint[] QueryByDate (long start_time, long end_time);
-
- // events
- event RemoteUp RemoteUp;
- event RemoteDown RemoteDown;
- }
-
- // Class exposing all photos on the dbus
- public class PhotoProxy : DBusProxy, IPhotoRemoteControl {
- protected Db db;
- private Roll current_roll;
-
- public Db Database {
- get { return db; }
- }
-
- internal PhotoProxy (Db db)
- {
- this.db = db;
- }
-
- public bool IsReadOnly ()
- {
- return false;
- }
-
- public uint[] GetPhotoIds ()
- {
- List<uint> ids = new List<uint> ();
-
- foreach (Photo p in QueryAll ())
- ids.Add (p.Id);
-
- return ids.ToArray ();
- }
-
- public IDictionary<string, object> GetPhotoProperties (uint id)
- {
- Dictionary<string, object> dict = new Dictionary<string, object> ();
-
- Photo p = db.Photos.Get (id) as Photo;
-
- if (p == null)
- throw new DBusException ("Photo with id {0} does not exist.", id);
-
- dict.Add ("Uri", p.DefaultVersionUri.ToString());
- dict.Add ("Id", p.Id);
- dict.Add ("Name", p.Name);
- dict.Add ("Description", p.Description ?? string.Empty);
-
- StringBuilder builder = new StringBuilder ();
-
- foreach (Tag t in p.Tags) {
- if (builder.Length > 0)
- builder.Append (",");
-
- builder.AppendFormat (t.Name);
- }
-
- dict.Add ("Tags", builder.ToString ());
-
- return dict;
- }
-
- public uint[] Query (string []tags)
- {
- List<Tag> tag_list = GetTagsByNames (tags);
-
- Photo []photos = db.Photos.Query (tag_list.ToArray ());
-
- uint []ids = new uint[photos.Length];
-
- for (int i = 0; i < ids.Length; i++)
- ids[i] = photos[i].Id;
-
- return ids;
- }
-
- public uint[] QueryByDate (long start_time, long end_time)
- {
- DateTime start = DbUtils.DateTimeFromUnixTime (start_time);
- DateTime end = DbUtils.DateTimeFromUnixTime (end_time);
-
- Photo []photos = db.Photos.Query (new DateRange (start, end));
- uint []ids = new uint[photos.Length];
-
- for (int i = 0; i < ids.Length; i++)
- ids[i] = photos[i].Id;
-
- return ids;
- }
-
- protected Photo[] QueryAll ()
- {
- return db.Photos.Query ((Tag [])null);
- }
-
- protected List<Tag> GetTagsByNames (string []names)
- {
- // add tags that exist in tag store
- List<Tag> tag_list = new List<Tag> ();
-
- foreach (string tag_name in names) {
- Tag t = db.Tags.GetTagByName (tag_name);
-
- if (t == null)
- continue;
-
- tag_list.Add (t);
- }
-
- return tag_list;
- }
-
- public void PrepareRoll ()
- {
- if (current_roll != null)
- return;
-
- current_roll = db.Rolls.Create ();
- }
-
- public void FinishRoll ()
- {
- current_roll = null;
- }
-
- public int ImportPhoto (string path, bool copy, string []tags)
- {
- if (current_roll == null)
- throw new DBusException ("You must use PrepareRoll before you can import a photo.");
-
- // add tags that exist in tag store
- List<Tag> tag_list = GetTagsByNames (tags);
-
- Gdk.Pixbuf pixbuf = null;
-
- // FIXME: this is more or less a copy of the file import backend code
- // this should be streamlined
- try {
- string new_path = path;
-
- if (copy)
- new_path = FileImportBackend.ChooseLocation (path);
-
- if (new_path != path)
- System.IO.File.Copy (path, new_path);
-
- Photo created = db.Photos.CreateOverDBus (new_path, path, current_roll.Id, out pixbuf);
-
- try {
- File.SetAttributes (new_path, File.GetAttributes (new_path) & ~FileAttributes.ReadOnly);
- DateTime create = File.GetCreationTime (path);
- File.SetCreationTime (new_path, create);
- DateTime mod = File.GetLastWriteTime (path);
- File.SetLastWriteTime (new_path, mod);
- } catch (IOException) {
- // we don't want an exception here to be fatal.
- }
-
- // attach tags we got
- if (tag_list.Count > 0) {
- created.AddTag (tag_list.ToArray ());
- db.Photos.Commit (created);
- }
-
- return (int)created.Id;
- // indicate failure
- } catch {
- throw new DBusException ("Failed to import the photo.");
- }
- }
-
- public void RemovePhoto (uint id)
- {
- Photo p = db.Photos.Get (id) as Photo;
-
- if (p == null)
- throw new DBusException ("Photo with id {0} does not exist.", id);
-
- db.Photos.RemoveOverDBus (p);
- }
- }
-}
diff --git a/extensions/Services/DBusService/DBusService.addin.xml b/extensions/Services/DBusService/DBusService.addin.xml
deleted file mode 100644
index 73ca21f..0000000
--- a/extensions/Services/DBusService/DBusService.addin.xml
+++ /dev/null
@@ -1,16 +0,0 @@
-<Addin namespace="FSpot"
- id="DBusService"
- version="0.7"
- name="DBus Service"
- description="Expose F-Spot Photos over DBus"
- author="Thomas Van Machelen"
- url="http://f-spot.org/Extensions"
- defaultEnabled="false"
- category="Services">
- <Dependencies>
- <Addin id="Core" version="0.7"/>
- </Dependencies>
- <Extension path = "/FSpot/Services">
- <Service class="DBusService.DBusService"/>
- </Extension>
-</Addin>
diff --git a/extensions/Services/DBusService/DBusService.cs b/extensions/Services/DBusService/DBusService.cs
deleted file mode 100644
index b7374db..0000000
--- a/extensions/Services/DBusService/DBusService.cs
+++ /dev/null
@@ -1,41 +0,0 @@
-/*
- * DBusService.DBusService.cs
- *
- * Author(s):
- * Thomas Van Machelen <thomas.vanmachelen at gmail.com>
- *
- * This is free software. See COPYING for details.
- *
- */
-
-using System;
-using FSpot;
-using FSpot.Extensions;
-using FSpot.Utils;
-
-namespace DBusService {
- public class DBusService : IService
- {
- public bool Start ()
- {
- uint timer = Log.InformationTimerStart ("Starting DBusService");
- try {
- DBusProxyFactory.Load (App.Instance.Database);
- } catch {
- Log.Warning ("unable init DBus service");
- }
- Log.DebugTimerPrint (timer, "DBusService startup took {0}");
- return true;
- }
-
- public bool Stop ()
- {
- uint timer = Log.InformationTimerStart ("Stopping DBusService");
-
- DBusProxyFactory.EmitRemoteDown ();
-
- Log.DebugTimerPrint (timer, "DBusService stop took {0}");
- return true;
- }
- }
-}
diff --git a/extensions/Services/DBusService/Makefile.am b/extensions/Services/DBusService/Makefile.am
deleted file mode 100644
index cd633c9..0000000
--- a/extensions/Services/DBusService/Makefile.am
+++ /dev/null
@@ -1,20 +0,0 @@
-addin = DBusService
-
-addin_manifest = $(addin).addin.xml
-
-addin_sources = \
- $(addin).cs \
- DBusProxy.cs
-
-addin_resources = \
- $(addin_manifest)
-
-addin_references =
-addin_packages = \
- gtk-sharp-2.0
-
-addin_extraflags = \
- $(NDESK_DBUS_LIBS)
-addin_extradist =
-
-include $(top_srcdir)/Makefile.addins
diff --git a/extensions/Services/DBusService/Makefile.in b/extensions/Services/DBusService/Makefile.in
deleted file mode 100644
index 90ab8fb..0000000
--- a/extensions/Services/DBusService/Makefile.in
+++ /dev/null
@@ -1,579 +0,0 @@
-# Makefile.in generated by automake 1.11.1 from Makefile.am.
-# @configure_input@
-
-# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
-# 2003, 2004, 2005, 2006, 2007, 2008, 2009 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.
-
-# This program is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
-# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
-# PARTICULAR PURPOSE.
-
- at SET_MAKE@
-
-VPATH = @srcdir@
-pkgdatadir = $(datadir)/@PACKAGE@
-pkgincludedir = $(includedir)/@PACKAGE@
-pkglibdir = $(libdir)/@PACKAGE@
-pkglibexecdir = $(libexecdir)/@PACKAGE@
-am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
-install_sh_DATA = $(install_sh) -c -m 644
-install_sh_PROGRAM = $(install_sh) -c
-install_sh_SCRIPT = $(install_sh) -c
-INSTALL_HEADER = $(INSTALL_DATA)
-transform = $(program_transform_name)
-NORMAL_INSTALL = :
-PRE_INSTALL = :
-POST_INSTALL = :
-NORMAL_UNINSTALL = :
-PRE_UNINSTALL = :
-POST_UNINSTALL = :
-build_triplet = @build@
-host_triplet = @host@
-DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in \
- $(top_srcdir)/Makefile.addins $(top_srcdir)/Makefile.include
-subdir = extensions/Services/DBusService
-ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
-am__aclocal_m4_deps = $(top_srcdir)/build/m4/shave/shave.m4 \
- $(top_srcdir)/build/m4/shamrock/expansions.m4 \
- $(top_srcdir)/build/m4/shamrock/mono.m4 \
- $(top_srcdir)/build/m4/shamrock/programs.m4 \
- $(top_srcdir)/acinclude.m4 $(top_srcdir)/configure.ac
-am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
- $(ACLOCAL_M4)
-mkinstalldirs = $(install_sh) -d
-CONFIG_HEADER = $(top_builddir)/config.h
-CONFIG_CLEAN_FILES =
-CONFIG_CLEAN_VPATH_FILES =
-SOURCES =
-DIST_SOURCES =
-am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`;
-am__vpath_adj = case $$p in \
- $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \
- *) f=$$p;; \
- esac;
-am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`;
-am__install_max = 40
-am__nobase_strip_setup = \
- srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'`
-am__nobase_strip = \
- for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||"
-am__nobase_list = $(am__nobase_strip_setup); \
- for p in $$list; do echo "$$p $$p"; done | \
- sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \
- $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \
- if (++n[$$2] == $(am__install_max)) \
- { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \
- END { for (dir in files) print dir, files[dir] }'
-am__base_list = \
- sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \
- sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g'
-am__installdirs = "$(DESTDIR)$(addindir)"
-DATA = $(addin_DATA)
-DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
-ACLOCAL = @ACLOCAL@
-ACLOCAL_AMFLAGS = @ACLOCAL_AMFLAGS@
-ALL_LINGUAS = @ALL_LINGUAS@
-AMTAR = @AMTAR@
-AM_MAKEFLAGS = @AM_MAKEFLAGS@
-API_VERSION = @API_VERSION@
-AR = @AR@
-ASM_VERSION = @ASM_VERSION@
-AUTOCONF = @AUTOCONF@
-AUTOHEADER = @AUTOHEADER@
-AUTOMAKE = @AUTOMAKE@
-AWK = @AWK@
-CATALOGS = @CATALOGS@
-CATOBJEXT = @CATOBJEXT@
-CC = @CC@
-CCDEPMODE = @CCDEPMODE@
-CFLAGS = @CFLAGS@
-CPP = @CPP@
-CPPFLAGS = @CPPFLAGS@
-CSC_DEFINES = @CSC_DEFINES@
-CXX = @CXX@
-CXXCPP = @CXXCPP@
-CXXDEPMODE = @CXXDEPMODE@
-CXXFLAGS = @CXXFLAGS@
-CYGPATH_W = @CYGPATH_W@
-DATADIRNAME = @DATADIRNAME@
-DEFS = @DEFS@
-DEPDIR = @DEPDIR@
-DISPLAY_VERSION = @DISPLAY_VERSION@
-DISTCHECK_CONFIGURE_FLAGS = @DISTCHECK_CONFIGURE_FLAGS@
-DOC_USER_FORMATS = @DOC_USER_FORMATS@
-DSYMUTIL = @DSYMUTIL@
-DUMPBIN = @DUMPBIN@
-ECHO_C = @ECHO_C@
-ECHO_N = @ECHO_N@
-ECHO_T = @ECHO_T@
-EGREP = @EGREP@
-EXEEXT = @EXEEXT@
-EXIF_CFLAGS = @EXIF_CFLAGS@
-EXIF_LIBS = @EXIF_LIBS@
-EXIF_SOVERSION = @EXIF_SOVERSION@
-F77 = @F77@
-FC = @FC@
-FGREP = @FGREP@
-F_CFLAGS = @F_CFLAGS@
-F_LIBS = @F_LIBS@
-GAPI2CODEGEN = @GAPI2CODEGEN@
-GAPI2FIXUP = @GAPI2FIXUP@
-GAPI2PARSER = @GAPI2PARSER@
-GCONFTOOL = @GCONFTOOL@
-GCONF_SCHEMA_CONFIG_SOURCE = @GCONF_SCHEMA_CONFIG_SOURCE@
-GCONF_SCHEMA_FILE_DIR = @GCONF_SCHEMA_FILE_DIR@
-GCONF_SHARP_CFLAGS = @GCONF_SHARP_CFLAGS@
-GCONF_SHARP_LIBS = @GCONF_SHARP_LIBS@
-GETTEXT_PACKAGE = @GETTEXT_PACKAGE@
-GIO_CFLAGS = @GIO_CFLAGS@
-GIO_LIBS = @GIO_LIBS@
-GLIBSHARP_CFLAGS = @GLIBSHARP_CFLAGS@
-GLIBSHARP_LIBS = @GLIBSHARP_LIBS@
-GLIB_CFLAGS = @GLIB_CFLAGS@
-GLIB_GENMARSHAL = @GLIB_GENMARSHAL@
-GLIB_LIBS = @GLIB_LIBS@
-GLIB_MKENUMS = @GLIB_MKENUMS@
-GMOFILES = @GMOFILES@
-GMSGFMT = @GMSGFMT@
-GNOME_ICON_THEME_PREFIX = @GNOME_ICON_THEME_PREFIX@
-GNOME_SCREENSAVER_SAVERDIR = @GNOME_SCREENSAVER_SAVERDIR@
-GNOME_SCREENSAVER_THEMESDIR = @GNOME_SCREENSAVER_THEMESDIR@
-GNOME_SHARP_CFLAGS = @GNOME_SHARP_CFLAGS@
-GNOME_SHARP_LIBS = @GNOME_SHARP_LIBS@
-GOBJECT_QUERY = @GOBJECT_QUERY@
-GREP = @GREP@
-HELP_DIR = @HELP_DIR@
-ICONS_DIRECTORY = @ICONS_DIRECTORY@
-INSTALL = @INSTALL@
-INSTALL_DATA = @INSTALL_DATA@
-INSTALL_PROGRAM = @INSTALL_PROGRAM@
-INSTALL_SCRIPT = @INSTALL_SCRIPT@
-INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
-INSTOBJEXT = @INSTOBJEXT@
-INTLLIBS = @INTLLIBS@
-INTLTOOL_EXTRACT = @INTLTOOL_EXTRACT@
-INTLTOOL_MERGE = @INTLTOOL_MERGE@
-INTLTOOL_PERL = @INTLTOOL_PERL@
-INTLTOOL_UPDATE = @INTLTOOL_UPDATE@
-LCMS_CFLAGS = @LCMS_CFLAGS@
-LCMS_LIBS = @LCMS_LIBS@
-LD = @LD@
-LDFLAGS = @LDFLAGS@
-LIBEXIF_VERSION_CHECK_CFLAGS = @LIBEXIF_VERSION_CHECK_CFLAGS@
-LIBEXIF_VERSION_CHECK_LIBS = @LIBEXIF_VERSION_CHECK_LIBS@
-LIBGPHOTO2_CFLAGS = @LIBGPHOTO2_CFLAGS@
-LIBGPHOTO2_LIBS = @LIBGPHOTO2_LIBS@
-LIBJPEG = @LIBJPEG@
-LIBOBJS = @LIBOBJS@
-LIBS = @LIBS@
-LIBTOOL = @LIBTOOL@
-LIPO = @LIPO@
-LN_S = @LN_S@
-LTLIBOBJS = @LTLIBOBJS@
-MAINT = @MAINT@
-MAKEFLAGS = @MAKEFLAGS@
-MAKEINFO = @MAKEINFO@
-MCS = @MCS@
-MKDIR_P = @MKDIR_P@
-MKINSTALLDIRS = @MKINSTALLDIRS@
-MONO = @MONO@
-MONO_MODULE_CFLAGS = @MONO_MODULE_CFLAGS@
-MONO_MODULE_LIBS = @MONO_MODULE_LIBS@
-MSGFMT = @MSGFMT@
-MSGFMT_OPTS = @MSGFMT_OPTS@
-MSGMERGE = @MSGMERGE@
-NDESK_DBUS_CFLAGS = @NDESK_DBUS_CFLAGS@
-NDESK_DBUS_LIBS = @NDESK_DBUS_LIBS@
-NM = @NM@
-NMEDIT = @NMEDIT@
-NUNIT_CFLAGS = @NUNIT_CFLAGS@
-NUNIT_DEFINES = @NUNIT_DEFINES@
-NUNIT_LIBS = @NUNIT_LIBS@
-OBJC = @OBJC@
-OBJDUMP = @OBJDUMP@
-OBJEXT = @OBJEXT@
-OMF_DIR = @OMF_DIR@
-OTOOL = @OTOOL@
-OTOOL64 = @OTOOL64@
-PACKAGE = @PACKAGE@
-PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
-PACKAGE_NAME = @PACKAGE_NAME@
-PACKAGE_STRING = @PACKAGE_STRING@
-PACKAGE_TARNAME = @PACKAGE_TARNAME@
-PACKAGE_URL = @PACKAGE_URL@
-PACKAGE_VERSION = @PACKAGE_VERSION@
-PATH_SEPARATOR = @PATH_SEPARATOR@
-PKG_CONFIG = @PKG_CONFIG@
-POFILES = @POFILES@
-POSUB = @POSUB@
-PO_IN_DATADIR_FALSE = @PO_IN_DATADIR_FALSE@
-PO_IN_DATADIR_TRUE = @PO_IN_DATADIR_TRUE@
-Q = @Q@
-RANLIB = @RANLIB@
-SED = @SED@
-SET_MAKE = @SET_MAKE@
-SHELL = @SHELL@
-STRIP = @STRIP@
-TURTLEDIR = @TURTLEDIR@
-UNIQUE_CFLAGS = @UNIQUE_CFLAGS@
-UNIQUE_LIBS = @UNIQUE_LIBS@
-USE_NLS = @USE_NLS@
-V = @V@
-VERSION = @VERSION@
-WARN_CFLAGS = @WARN_CFLAGS@
-XGETTEXT = @XGETTEXT@
-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_DUMPBIN = @ac_ct_DUMPBIN@
-am__include = @am__include@
-am__leading_dot = @am__leading_dot@
-am__quote = @am__quote@
-am__tar = @am__tar@
-am__untar = @am__untar@
-bindir = @bindir@
-build = @build@
-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@
-expanded_bindir = @expanded_bindir@
-expanded_datadir = @expanded_datadir@
-expanded_libdir = @expanded_libdir@
-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@
-lt_ECHO = @lt_ECHO@
-mandir = @mandir@
-mkdir_p = @mkdir_p@
-oldincludedir = @oldincludedir@
-pdfdir = @pdfdir@
-prefix = @prefix@
-program_transform_name = @program_transform_name@
-psdir = @psdir@
-sbindir = @sbindir@
-sharedstatedir = @sharedstatedir@
-shavedir = @shavedir@
-srcdir = @srcdir@
-sysconfdir = @sysconfdir@
-target_alias = @target_alias@
-top_build_prefix = @top_build_prefix@
-top_builddir = @top_builddir@
-top_srcdir = @top_srcdir@
-addin = DBusService
-addin_manifest = $(addin).addin.xml
-addin_sources = \
- $(addin).cs \
- DBusProxy.cs
-
-addin_resources = \
- $(addin_manifest)
-
-addin_references =
-addin_packages = \
- gtk-sharp-2.0
-
-addin_extraflags = \
- $(NDESK_DBUS_LIBS)
-
-addin_extradist =
-ASSEMBLY = $(addin).dll
-DIR_DOCS = $(top_builddir)/docs
-DIR_EXTENSIONS = $(top_builddir)/extensions
-DIR_GPHOTO2 = $(top_builddir)/lib/libgphoto2-sharp
-DIR_ICONS = $(top_builddir)/icons
-DIR_JPEGTRAN = $(top_builddir)/lib/libjpegtran
-DIR_KEYRING = $(top_builddir)/lib/gnome-keyring-sharp
-DIR_LIBFSPOT = $(top_builddir)/lib/libfspot
-DIR_SEMWEB = $(top_builddir)/lib/semweb
-DIR_SRC = $(top_builddir)/src
-DIR_GIOSHARP = $(top_builddir)/lib/gio-sharp/gio
-DIR_GTKSHARPBEANS = $(top_builddir)/lib/gtk-sharp-beans
-DIR_UNIQUESHARP = $(top_builddir)/lib/unique-sharp/unique
-LINK_KEYRING = -r:$(DIR_KEYRING)/gnome-keyring-sharp.dll
-LINK_GPHOTO2 = -r:$(DIR_GPHOTO2)/libgphoto2-sharp.dll
-LINK_SEMWEB = -r:$(DIR_SEMWEB)/SemWeb.dll
-LINK_GIOSHARP = -r:$(DIR_GIOSHARP)/gio-sharp.dll
-LINK_GTKSHARPBEANS = -r:$(DIR_GTKSHARPBEANS)/gtk-sharp-beans.dll
-LINK_UNIQUESHARP = -r:$(DIR_UNIQUESHARP)/unique-sharp.dll
-CSC_FLAGS = -debug
-CSC = $(MCS) $(CSC_FLAGS) -target:exe
-CSC_LIB = $(MCS) $(CSC_FLAGS) -target:library
-MONO_DEBUGFLAGS = --debug
-RUNTIME = mono $(MONO_DEBUGFLAGS)
-dep_resources = $(addprefix $(srcdir)/, $(addin_resources))
-build_resources = $(foreach res, $(dep_resources), $(addprefix -resource:, $(res)),$(notdir $(res)))
-build_sources = $(addprefix $(srcdir)/, $(addin_sources))
-build_packages = \
- $(addprefix -pkg:, $(addin_packages)) \
- -pkg:mono-addins
-
-build_references = \
- $(addprefix -r:, $(addin_references)) \
- -r:$(top_builddir)/src/f-spot.exe \
- -r:$(top_builddir)/src/Cms.dll \
- -r:$(top_builddir)/src/FSpot.Core.dll \
- -r:$(top_builddir)/src/FSpot.Platform.dll \
- -r:$(top_builddir)/src/FSpot.Query.dll \
- -r:$(top_builddir)/src/FSpot.Utils.dll \
- -r:$(top_builddir)/src/FSpot.Widgets.dll \
- $(LINK_SEMWEB) \
- $(LINK_GPHOTO2) \
- $(LINK_GIOSHARP) \
- $(LINK_UNIQUESHARP) \
- $(LINK_GTKSHARPBEANS)
-
-addin_SOURCES = \
- $(build_sources)
-
-addindir = $(pkglibdir)/extensions
-addin_DATA = $(ASSEMBLY)
-CLEANFILES = $(ASSEMBLY) $(ASSEMBLY).mdb *.mpack
-EXTRA_DIST = \
- $(build_sources) \
- $(dep_resources) \
- $(addin_extradist)
-
-all: all-am
-
-.SUFFIXES:
-$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(top_srcdir)/Makefile.addins $(top_srcdir)/Makefile.include $(am__configure_deps)
- @for dep in $?; do \
- case '$(am__configure_deps)' in \
- *$$dep*) \
- ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \
- && { if test -f $@; then exit 0; else break; fi; }; \
- exit 1;; \
- esac; \
- done; \
- echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign extensions/Services/DBusService/Makefile'; \
- $(am__cd) $(top_srcdir) && \
- $(AUTOMAKE) --foreign extensions/Services/DBusService/Makefile
-.PRECIOUS: Makefile
-Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
- @case '$?' in \
- *config.status*) \
- cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \
- *) \
- echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \
- cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \
- esac;
-
-$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
- cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
-
-$(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps)
- cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
-$(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps)
- cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
-$(am__aclocal_m4_deps):
-
-mostlyclean-libtool:
- -rm -f *.lo
-
-clean-libtool:
- -rm -rf .libs _libs
-install-addinDATA: $(addin_DATA)
- @$(NORMAL_INSTALL)
- test -z "$(addindir)" || $(MKDIR_P) "$(DESTDIR)$(addindir)"
- @list='$(addin_DATA)'; test -n "$(addindir)" || list=; \
- for p in $$list; do \
- if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \
- echo "$$d$$p"; \
- done | $(am__base_list) | \
- while read files; do \
- echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(addindir)'"; \
- $(INSTALL_DATA) $$files "$(DESTDIR)$(addindir)" || exit $$?; \
- done
-
-uninstall-addinDATA:
- @$(NORMAL_UNINSTALL)
- @list='$(addin_DATA)'; test -n "$(addindir)" || list=; \
- files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \
- test -n "$$files" || exit 0; \
- echo " ( cd '$(DESTDIR)$(addindir)' && rm -f" $$files ")"; \
- cd "$(DESTDIR)$(addindir)" && rm -f $$files
-tags: TAGS
-TAGS:
-
-ctags: CTAGS
-CTAGS:
-
-
-distdir: $(DISTFILES)
- @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; \
- if test -d $$d/$$file; then \
- dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \
- if test -d "$(distdir)/$$file"; then \
- find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
- fi; \
- if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
- cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \
- find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
- fi; \
- cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \
- else \
- test -f "$(distdir)/$$file" \
- || cp -p $$d/$$file "$(distdir)/$$file" \
- || exit 1; \
- fi; \
- done
-check-am: all-am
-check: check-am
-all-am: Makefile $(DATA)
-installdirs:
- for dir in "$(DESTDIR)$(addindir)"; do \
- test -z "$$dir" || $(MKDIR_P) "$$dir"; \
- done
-install: install-am
-install-exec: install-exec-am
-install-data: install-data-am
-uninstall: uninstall-am
-
-install-am: all-am
- @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
-
-installcheck: installcheck-am
-install-strip:
- $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
- install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
- `test -z '$(STRIP)' || \
- echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install
-mostlyclean-generic:
-
-clean-generic:
- -test -z "$(CLEANFILES)" || rm -f $(CLEANFILES)
-
-distclean-generic:
- -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
- -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES)
-
-maintainer-clean-generic:
- @echo "This command is intended for maintainers to use"
- @echo "it deletes files that may require special tools to rebuild."
-clean: clean-am
-
-clean-am: clean-generic clean-libtool mostlyclean-am
-
-distclean: distclean-am
- -rm -f Makefile
-distclean-am: clean-am distclean-generic
-
-dvi: dvi-am
-
-dvi-am:
-
-html: html-am
-
-html-am:
-
-info: info-am
-
-info-am:
-
-install-data-am: install-addinDATA
-
-install-dvi: install-dvi-am
-
-install-dvi-am:
-
-install-exec-am:
-
-install-html: install-html-am
-
-install-html-am:
-
-install-info: install-info-am
-
-install-info-am:
-
-install-man:
-
-install-pdf: install-pdf-am
-
-install-pdf-am:
-
-install-ps: install-ps-am
-
-install-ps-am:
-
-installcheck-am:
-
-maintainer-clean: maintainer-clean-am
- -rm -f Makefile
-maintainer-clean-am: distclean-am maintainer-clean-generic
-
-mostlyclean: mostlyclean-am
-
-mostlyclean-am: mostlyclean-generic mostlyclean-libtool
-
-pdf: pdf-am
-
-pdf-am:
-
-ps: ps-am
-
-ps-am:
-
-uninstall-am: uninstall-addinDATA
-
-.MAKE: install-am install-strip
-
-.PHONY: all all-am check check-am clean clean-generic clean-libtool \
- distclean distclean-generic distclean-libtool distdir dvi \
- dvi-am html html-am info info-am install install-addinDATA \
- 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-generic mostlyclean-libtool pdf pdf-am ps ps-am \
- uninstall uninstall-addinDATA uninstall-am
-
-
-mpack: $(ASSEMBLY)
- mautil p $(ASSEMBLY)
-
-$(ASSEMBLY): $(addin_SOURCES) $(dep_resources)
- $(CSC_LIB) -out:$@ $(addin_extraflags) $(build_sources) $(build_references) $(build_packages) $(build_resources)
-
-# 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.
-.NOEXPORT:
diff --git a/extensions/Services/Makefile.am b/extensions/Services/Makefile.am
deleted file mode 100644
index a6f990e..0000000
--- a/extensions/Services/Makefile.am
+++ /dev/null
@@ -1,2 +0,0 @@
-SUBDIRS = \
- DBusService
diff --git a/extensions/Services/Makefile.in b/extensions/Services/Makefile.in
deleted file mode 100644
index a3b8a6e..0000000
--- a/extensions/Services/Makefile.in
+++ /dev/null
@@ -1,654 +0,0 @@
-# Makefile.in generated by automake 1.11.1 from Makefile.am.
-# @configure_input@
-
-# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
-# 2003, 2004, 2005, 2006, 2007, 2008, 2009 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.
-
-# This program is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
-# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
-# PARTICULAR PURPOSE.
-
- at SET_MAKE@
-VPATH = @srcdir@
-pkgdatadir = $(datadir)/@PACKAGE@
-pkgincludedir = $(includedir)/@PACKAGE@
-pkglibdir = $(libdir)/@PACKAGE@
-pkglibexecdir = $(libexecdir)/@PACKAGE@
-am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
-install_sh_DATA = $(install_sh) -c -m 644
-install_sh_PROGRAM = $(install_sh) -c
-install_sh_SCRIPT = $(install_sh) -c
-INSTALL_HEADER = $(INSTALL_DATA)
-transform = $(program_transform_name)
-NORMAL_INSTALL = :
-PRE_INSTALL = :
-POST_INSTALL = :
-NORMAL_UNINSTALL = :
-PRE_UNINSTALL = :
-POST_UNINSTALL = :
-build_triplet = @build@
-host_triplet = @host@
-subdir = extensions/Services
-DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in
-ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
-am__aclocal_m4_deps = $(top_srcdir)/build/m4/shave/shave.m4 \
- $(top_srcdir)/build/m4/shamrock/expansions.m4 \
- $(top_srcdir)/build/m4/shamrock/mono.m4 \
- $(top_srcdir)/build/m4/shamrock/programs.m4 \
- $(top_srcdir)/acinclude.m4 $(top_srcdir)/configure.ac
-am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
- $(ACLOCAL_M4)
-mkinstalldirs = $(install_sh) -d
-CONFIG_HEADER = $(top_builddir)/config.h
-CONFIG_CLEAN_FILES =
-CONFIG_CLEAN_VPATH_FILES =
-SOURCES =
-DIST_SOURCES =
-RECURSIVE_TARGETS = all-recursive check-recursive dvi-recursive \
- html-recursive info-recursive install-data-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
-AM_RECURSIVE_TARGETS = $(RECURSIVE_TARGETS:-recursive=) \
- $(RECURSIVE_CLEAN_TARGETS:-recursive=) tags TAGS ctags CTAGS \
- distdir
-ETAGS = etags
-CTAGS = ctags
-DIST_SUBDIRS = $(SUBDIRS)
-DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
-am__relativize = \
- dir0=`pwd`; \
- sed_first='s,^\([^/]*\)/.*$$,\1,'; \
- sed_rest='s,^[^/]*/*,,'; \
- sed_last='s,^.*/\([^/]*\)$$,\1,'; \
- sed_butlast='s,/*[^/]*$$,,'; \
- while test -n "$$dir1"; do \
- first=`echo "$$dir1" | sed -e "$$sed_first"`; \
- if test "$$first" != "."; then \
- if test "$$first" = ".."; then \
- dir2=`echo "$$dir0" | sed -e "$$sed_last"`/"$$dir2"; \
- dir0=`echo "$$dir0" | sed -e "$$sed_butlast"`; \
- else \
- first2=`echo "$$dir2" | sed -e "$$sed_first"`; \
- if test "$$first2" = "$$first"; then \
- dir2=`echo "$$dir2" | sed -e "$$sed_rest"`; \
- else \
- dir2="../$$dir2"; \
- fi; \
- dir0="$$dir0"/"$$first"; \
- fi; \
- fi; \
- dir1=`echo "$$dir1" | sed -e "$$sed_rest"`; \
- done; \
- reldir="$$dir2"
-ACLOCAL = @ACLOCAL@
-ACLOCAL_AMFLAGS = @ACLOCAL_AMFLAGS@
-ALL_LINGUAS = @ALL_LINGUAS@
-AMTAR = @AMTAR@
-AM_MAKEFLAGS = @AM_MAKEFLAGS@
-API_VERSION = @API_VERSION@
-AR = @AR@
-ASM_VERSION = @ASM_VERSION@
-AUTOCONF = @AUTOCONF@
-AUTOHEADER = @AUTOHEADER@
-AUTOMAKE = @AUTOMAKE@
-AWK = @AWK@
-CATALOGS = @CATALOGS@
-CATOBJEXT = @CATOBJEXT@
-CC = @CC@
-CCDEPMODE = @CCDEPMODE@
-CFLAGS = @CFLAGS@
-CPP = @CPP@
-CPPFLAGS = @CPPFLAGS@
-CSC_DEFINES = @CSC_DEFINES@
-CXX = @CXX@
-CXXCPP = @CXXCPP@
-CXXDEPMODE = @CXXDEPMODE@
-CXXFLAGS = @CXXFLAGS@
-CYGPATH_W = @CYGPATH_W@
-DATADIRNAME = @DATADIRNAME@
-DEFS = @DEFS@
-DEPDIR = @DEPDIR@
-DISPLAY_VERSION = @DISPLAY_VERSION@
-DISTCHECK_CONFIGURE_FLAGS = @DISTCHECK_CONFIGURE_FLAGS@
-DOC_USER_FORMATS = @DOC_USER_FORMATS@
-DSYMUTIL = @DSYMUTIL@
-DUMPBIN = @DUMPBIN@
-ECHO_C = @ECHO_C@
-ECHO_N = @ECHO_N@
-ECHO_T = @ECHO_T@
-EGREP = @EGREP@
-EXEEXT = @EXEEXT@
-EXIF_CFLAGS = @EXIF_CFLAGS@
-EXIF_LIBS = @EXIF_LIBS@
-EXIF_SOVERSION = @EXIF_SOVERSION@
-F77 = @F77@
-FC = @FC@
-FGREP = @FGREP@
-F_CFLAGS = @F_CFLAGS@
-F_LIBS = @F_LIBS@
-GAPI2CODEGEN = @GAPI2CODEGEN@
-GAPI2FIXUP = @GAPI2FIXUP@
-GAPI2PARSER = @GAPI2PARSER@
-GCONFTOOL = @GCONFTOOL@
-GCONF_SCHEMA_CONFIG_SOURCE = @GCONF_SCHEMA_CONFIG_SOURCE@
-GCONF_SCHEMA_FILE_DIR = @GCONF_SCHEMA_FILE_DIR@
-GCONF_SHARP_CFLAGS = @GCONF_SHARP_CFLAGS@
-GCONF_SHARP_LIBS = @GCONF_SHARP_LIBS@
-GETTEXT_PACKAGE = @GETTEXT_PACKAGE@
-GIO_CFLAGS = @GIO_CFLAGS@
-GIO_LIBS = @GIO_LIBS@
-GLIBSHARP_CFLAGS = @GLIBSHARP_CFLAGS@
-GLIBSHARP_LIBS = @GLIBSHARP_LIBS@
-GLIB_CFLAGS = @GLIB_CFLAGS@
-GLIB_GENMARSHAL = @GLIB_GENMARSHAL@
-GLIB_LIBS = @GLIB_LIBS@
-GLIB_MKENUMS = @GLIB_MKENUMS@
-GMOFILES = @GMOFILES@
-GMSGFMT = @GMSGFMT@
-GNOME_ICON_THEME_PREFIX = @GNOME_ICON_THEME_PREFIX@
-GNOME_SCREENSAVER_SAVERDIR = @GNOME_SCREENSAVER_SAVERDIR@
-GNOME_SCREENSAVER_THEMESDIR = @GNOME_SCREENSAVER_THEMESDIR@
-GNOME_SHARP_CFLAGS = @GNOME_SHARP_CFLAGS@
-GNOME_SHARP_LIBS = @GNOME_SHARP_LIBS@
-GOBJECT_QUERY = @GOBJECT_QUERY@
-GREP = @GREP@
-HELP_DIR = @HELP_DIR@
-ICONS_DIRECTORY = @ICONS_DIRECTORY@
-INSTALL = @INSTALL@
-INSTALL_DATA = @INSTALL_DATA@
-INSTALL_PROGRAM = @INSTALL_PROGRAM@
-INSTALL_SCRIPT = @INSTALL_SCRIPT@
-INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
-INSTOBJEXT = @INSTOBJEXT@
-INTLLIBS = @INTLLIBS@
-INTLTOOL_EXTRACT = @INTLTOOL_EXTRACT@
-INTLTOOL_MERGE = @INTLTOOL_MERGE@
-INTLTOOL_PERL = @INTLTOOL_PERL@
-INTLTOOL_UPDATE = @INTLTOOL_UPDATE@
-LCMS_CFLAGS = @LCMS_CFLAGS@
-LCMS_LIBS = @LCMS_LIBS@
-LD = @LD@
-LDFLAGS = @LDFLAGS@
-LIBEXIF_VERSION_CHECK_CFLAGS = @LIBEXIF_VERSION_CHECK_CFLAGS@
-LIBEXIF_VERSION_CHECK_LIBS = @LIBEXIF_VERSION_CHECK_LIBS@
-LIBGPHOTO2_CFLAGS = @LIBGPHOTO2_CFLAGS@
-LIBGPHOTO2_LIBS = @LIBGPHOTO2_LIBS@
-LIBJPEG = @LIBJPEG@
-LIBOBJS = @LIBOBJS@
-LIBS = @LIBS@
-LIBTOOL = @LIBTOOL@
-LIPO = @LIPO@
-LN_S = @LN_S@
-LTLIBOBJS = @LTLIBOBJS@
-MAINT = @MAINT@
-MAKEFLAGS = @MAKEFLAGS@
-MAKEINFO = @MAKEINFO@
-MCS = @MCS@
-MKDIR_P = @MKDIR_P@
-MKINSTALLDIRS = @MKINSTALLDIRS@
-MONO = @MONO@
-MONO_MODULE_CFLAGS = @MONO_MODULE_CFLAGS@
-MONO_MODULE_LIBS = @MONO_MODULE_LIBS@
-MSGFMT = @MSGFMT@
-MSGFMT_OPTS = @MSGFMT_OPTS@
-MSGMERGE = @MSGMERGE@
-NDESK_DBUS_CFLAGS = @NDESK_DBUS_CFLAGS@
-NDESK_DBUS_LIBS = @NDESK_DBUS_LIBS@
-NM = @NM@
-NMEDIT = @NMEDIT@
-NUNIT_CFLAGS = @NUNIT_CFLAGS@
-NUNIT_DEFINES = @NUNIT_DEFINES@
-NUNIT_LIBS = @NUNIT_LIBS@
-OBJC = @OBJC@
-OBJDUMP = @OBJDUMP@
-OBJEXT = @OBJEXT@
-OMF_DIR = @OMF_DIR@
-OTOOL = @OTOOL@
-OTOOL64 = @OTOOL64@
-PACKAGE = @PACKAGE@
-PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
-PACKAGE_NAME = @PACKAGE_NAME@
-PACKAGE_STRING = @PACKAGE_STRING@
-PACKAGE_TARNAME = @PACKAGE_TARNAME@
-PACKAGE_URL = @PACKAGE_URL@
-PACKAGE_VERSION = @PACKAGE_VERSION@
-PATH_SEPARATOR = @PATH_SEPARATOR@
-PKG_CONFIG = @PKG_CONFIG@
-POFILES = @POFILES@
-POSUB = @POSUB@
-PO_IN_DATADIR_FALSE = @PO_IN_DATADIR_FALSE@
-PO_IN_DATADIR_TRUE = @PO_IN_DATADIR_TRUE@
-Q = @Q@
-RANLIB = @RANLIB@
-SED = @SED@
-SET_MAKE = @SET_MAKE@
-SHELL = @SHELL@
-STRIP = @STRIP@
-TURTLEDIR = @TURTLEDIR@
-UNIQUE_CFLAGS = @UNIQUE_CFLAGS@
-UNIQUE_LIBS = @UNIQUE_LIBS@
-USE_NLS = @USE_NLS@
-V = @V@
-VERSION = @VERSION@
-WARN_CFLAGS = @WARN_CFLAGS@
-XGETTEXT = @XGETTEXT@
-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_DUMPBIN = @ac_ct_DUMPBIN@
-am__include = @am__include@
-am__leading_dot = @am__leading_dot@
-am__quote = @am__quote@
-am__tar = @am__tar@
-am__untar = @am__untar@
-bindir = @bindir@
-build = @build@
-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@
-expanded_bindir = @expanded_bindir@
-expanded_datadir = @expanded_datadir@
-expanded_libdir = @expanded_libdir@
-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@
-lt_ECHO = @lt_ECHO@
-mandir = @mandir@
-mkdir_p = @mkdir_p@
-oldincludedir = @oldincludedir@
-pdfdir = @pdfdir@
-prefix = @prefix@
-program_transform_name = @program_transform_name@
-psdir = @psdir@
-sbindir = @sbindir@
-sharedstatedir = @sharedstatedir@
-shavedir = @shavedir@
-srcdir = @srcdir@
-sysconfdir = @sysconfdir@
-target_alias = @target_alias@
-top_build_prefix = @top_build_prefix@
-top_builddir = @top_builddir@
-top_srcdir = @top_srcdir@
-SUBDIRS = \
- DBusService
-
-all: all-recursive
-
-.SUFFIXES:
-$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(am__configure_deps)
- @for dep in $?; do \
- case '$(am__configure_deps)' in \
- *$$dep*) \
- ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \
- && { if test -f $@; then exit 0; else break; fi; }; \
- exit 1;; \
- esac; \
- done; \
- echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign extensions/Services/Makefile'; \
- $(am__cd) $(top_srcdir) && \
- $(AUTOMAKE) --foreign extensions/Services/Makefile
-.PRECIOUS: Makefile
-Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
- @case '$?' in \
- *config.status*) \
- cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \
- *) \
- echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \
- cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \
- esac;
-
-$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
- cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
-
-$(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps)
- cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
-$(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps)
- cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
-$(am__aclocal_m4_deps):
-
-mostlyclean-libtool:
- -rm -f *.lo
-
-clean-libtool:
- -rm -rf .libs _libs
-
-# 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,
-# (1) if the variable is set in `config.status', edit `config.status'
-# (which will cause the Makefiles to be regenerated when you run `make');
-# (2) otherwise, pass the desired values on the `make' command line.
-$(RECURSIVE_TARGETS):
- @fail= failcom='exit 1'; \
- for f in x $$MAKEFLAGS; do \
- case $$f in \
- *=* | --[!k]*);; \
- *k*) failcom='fail=yes';; \
- esac; \
- done; \
- dot_seen=no; \
- target=`echo $@ | sed s/-recursive//`; \
- list='$(SUBDIRS)'; for subdir in $$list; do \
- echo "Making $$target in $$subdir"; \
- if test "$$subdir" = "."; then \
- dot_seen=yes; \
- local_target="$$target-am"; \
- else \
- local_target="$$target"; \
- fi; \
- ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \
- || eval $$failcom; \
- done; \
- if test "$$dot_seen" = "no"; then \
- $(MAKE) $(AM_MAKEFLAGS) "$$target-am" || exit 1; \
- fi; test -z "$$fail"
-
-$(RECURSIVE_CLEAN_TARGETS):
- @fail= failcom='exit 1'; \
- for f in x $$MAKEFLAGS; do \
- case $$f in \
- *=* | --[!k]*);; \
- *k*) failcom='fail=yes';; \
- esac; \
- done; \
- dot_seen=no; \
- case "$@" in \
- distclean-* | maintainer-clean-*) list='$(DIST_SUBDIRS)' ;; \
- *) list='$(SUBDIRS)' ;; \
- esac; \
- rev=''; for subdir in $$list; do \
- if test "$$subdir" = "."; then :; else \
- rev="$$subdir $$rev"; \
- fi; \
- done; \
- rev="$$rev ."; \
- target=`echo $@ | sed s/-recursive//`; \
- for subdir in $$rev; do \
- echo "Making $$target in $$subdir"; \
- if test "$$subdir" = "."; then \
- local_target="$$target-am"; \
- else \
- local_target="$$target"; \
- fi; \
- ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \
- || eval $$failcom; \
- done && test -z "$$fail"
-tags-recursive:
- list='$(SUBDIRS)'; for subdir in $$list; do \
- test "$$subdir" = . || ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) tags); \
- done
-ctags-recursive:
- list='$(SUBDIRS)'; for subdir in $$list; do \
- test "$$subdir" = . || ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) ctags); \
- done
-
-ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES)
- list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
- unique=`for i in $$list; do \
- if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
- done | \
- $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
- END { if (nonempty) { for (i in files) print i; }; }'`; \
- mkid -fID $$unique
-tags: TAGS
-
-TAGS: tags-recursive $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \
- $(TAGS_FILES) $(LISP)
- set x; \
- here=`pwd`; \
- if ($(ETAGS) --etags-include --version) >/dev/null 2>&1; then \
- include_option=--etags-include; \
- empty_fix=.; \
- else \
- include_option=--include; \
- empty_fix=; \
- fi; \
- list='$(SUBDIRS)'; for subdir in $$list; do \
- if test "$$subdir" = .; then :; else \
- test ! -f $$subdir/TAGS || \
- set "$$@" "$$include_option=$$here/$$subdir/TAGS"; \
- fi; \
- done; \
- list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
- unique=`for i in $$list; do \
- if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
- done | \
- $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
- END { if (nonempty) { for (i in files) print i; }; }'`; \
- shift; \
- if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \
- test -n "$$unique" || unique=$$empty_fix; \
- if test $$# -gt 0; then \
- $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
- "$$@" $$unique; \
- else \
- $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
- $$unique; \
- fi; \
- fi
-ctags: CTAGS
-CTAGS: ctags-recursive $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \
- $(TAGS_FILES) $(LISP)
- list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
- unique=`for i in $$list; do \
- if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
- done | \
- $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
- END { if (nonempty) { for (i in files) print i; }; }'`; \
- test -z "$(CTAGS_ARGS)$$unique" \
- || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \
- $$unique
-
-GTAGS:
- here=`$(am__cd) $(top_builddir) && pwd` \
- && $(am__cd) $(top_srcdir) \
- && gtags -i $(GTAGS_ARGS) "$$here"
-
-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)'; \
- 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; \
- if test -d $$d/$$file; then \
- dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \
- if test -d "$(distdir)/$$file"; then \
- find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
- fi; \
- if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
- cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \
- find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
- fi; \
- cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \
- else \
- test -f "$(distdir)/$$file" \
- || cp -p $$d/$$file "$(distdir)/$$file" \
- || exit 1; \
- fi; \
- done
- @list='$(DIST_SUBDIRS)'; for subdir in $$list; do \
- if test "$$subdir" = .; then :; else \
- test -d "$(distdir)/$$subdir" \
- || $(MKDIR_P) "$(distdir)/$$subdir" \
- || exit 1; \
- fi; \
- done
- @list='$(DIST_SUBDIRS)'; for subdir in $$list; do \
- if test "$$subdir" = .; then :; else \
- dir1=$$subdir; dir2="$(distdir)/$$subdir"; \
- $(am__relativize); \
- new_distdir=$$reldir; \
- dir1=$$subdir; dir2="$(top_distdir)"; \
- $(am__relativize); \
- new_top_distdir=$$reldir; \
- echo " (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) top_distdir="$$new_top_distdir" distdir="$$new_distdir" \\"; \
- echo " am__remove_distdir=: am__skip_length_check=: am__skip_mode_fix=: distdir)"; \
- ($(am__cd) $$subdir && \
- $(MAKE) $(AM_MAKEFLAGS) \
- top_distdir="$$new_top_distdir" \
- distdir="$$new_distdir" \
- am__remove_distdir=: \
- am__skip_length_check=: \
- am__skip_mode_fix=: \
- distdir) \
- || exit 1; \
- fi; \
- done
-check-am: all-am
-check: check-recursive
-all-am: Makefile
-installdirs: installdirs-recursive
-installdirs-am:
-install: install-recursive
-install-exec: install-exec-recursive
-install-data: install-data-recursive
-uninstall: uninstall-recursive
-
-install-am: all-am
- @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
-
-installcheck: installcheck-recursive
-install-strip:
- $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
- install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
- `test -z '$(STRIP)' || \
- echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install
-mostlyclean-generic:
-
-clean-generic:
-
-distclean-generic:
- -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
- -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES)
-
-maintainer-clean-generic:
- @echo "This command is intended for maintainers to use"
- @echo "it deletes files that may require special tools to rebuild."
-clean: clean-recursive
-
-clean-am: clean-generic clean-libtool mostlyclean-am
-
-distclean: distclean-recursive
- -rm -f Makefile
-distclean-am: clean-am distclean-generic distclean-tags
-
-dvi: dvi-recursive
-
-dvi-am:
-
-html: html-recursive
-
-html-am:
-
-info: info-recursive
-
-info-am:
-
-install-data-am:
-
-install-dvi: install-dvi-recursive
-
-install-dvi-am:
-
-install-exec-am:
-
-install-html: install-html-recursive
-
-install-html-am:
-
-install-info: install-info-recursive
-
-install-info-am:
-
-install-man:
-
-install-pdf: install-pdf-recursive
-
-install-pdf-am:
-
-install-ps: install-ps-recursive
-
-install-ps-am:
-
-installcheck-am:
-
-maintainer-clean: maintainer-clean-recursive
- -rm -f Makefile
-maintainer-clean-am: distclean-am maintainer-clean-generic
-
-mostlyclean: mostlyclean-recursive
-
-mostlyclean-am: mostlyclean-generic mostlyclean-libtool
-
-pdf: pdf-recursive
-
-pdf-am:
-
-ps: ps-recursive
-
-ps-am:
-
-uninstall-am:
-
-.MAKE: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) ctags-recursive \
- install-am install-strip tags-recursive
-
-.PHONY: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) CTAGS GTAGS \
- all all-am check check-am clean clean-generic clean-libtool \
- ctags ctags-recursive distclean 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-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-generic \
- mostlyclean-libtool pdf pdf-am ps ps-am tags tags-recursive \
- 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.
-.NOEXPORT:
diff --git a/extensions/Tools/ChangePhotoPath/ChangePhotoPathController.cs b/extensions/Tools/ChangePhotoPath/ChangePhotoPathController.cs
index 01d78be..8d0378e 100644
--- a/extensions/Tools/ChangePhotoPath/ChangePhotoPathController.cs
+++ b/extensions/Tools/ChangePhotoPath/ChangePhotoPathController.cs
@@ -14,6 +14,7 @@ using System;
using System.IO;
using System.Collections;
using System.Collections.Specialized;
+using Hyena;
/*
Need to
@@ -63,7 +64,7 @@ namespace ChangePhotoPath
gui_controller = gui;
total_photos = photo_store.TotalPhotos;
orig_base_path = EnsureEndsWithOneDirectorySeparator (FindOrigBasePath()); // NOT URI
- string new_base_path = EnsureEndsWithOneDirectorySeparator (FSpot.Global.PhotoDirectory); // NOT URI
+ string new_base_path = EnsureEndsWithOneDirectorySeparator (FSpot.Global.PhotoUri.LocalPath); // NOT URI
gui_controller.DisplayDefaultPaths (orig_base_path, new_base_path);
user_cancelled = false;
}
@@ -104,7 +105,7 @@ namespace ChangePhotoPath
string res_path = null;
foreach ( IBrowsableItem photo in photo_store.Query ( "SELECT * FROM photos " ) ) {
- string tmp_path = (photo as Photo).DefaultVersionUri.AbsolutePath;
+ string tmp_path = (photo as Photo).DefaultVersion.Uri.AbsolutePath;
res_path = IsThisPhotoOnOrigBasePath (tmp_path);
if (res_path != null)
break;
@@ -182,7 +183,8 @@ namespace ChangePhotoPath
if (photo == null)
photo = photo_store.Get ( (uint) photo_id_array[index]) as Photo;
PhotoVersion version = photo.GetVersion ( (uint) version_id_array[index]) as PhotoVersion;
- version.Uri = new System.Uri ( path );
+ version.BaseUri = new SafeUri ( path ).GetBaseUri ();
+ version.Filename = new SafeUri ( path ).GetFilename ();
photo.Changes.UriChanged = true;
photo.Changes.ChangeVersion ( (uint) version_id_array[index] );
}
@@ -201,11 +203,11 @@ namespace ChangePhotoPath
}
UpdateThisUri (k, old_path_array[k], ref photo);
- System.Console.WriteLine ("R : {0} - {1}", k, old_path_array[k]);
+ Log.DebugFormat ("R : {0} - {1}", k, old_path_array[k]);
}
if (photo != null)
photo_store.Commit (photo);
- System.Console.WriteLine ("Changing path failed due to above error. Have reverted any modification that took place.");
+ Log.Debug ("Changing path failed due to above error. Have reverted any modification that took place.");
}
public ProcessResult ChangeAllUris ( ref int last_index)
@@ -218,7 +220,7 @@ namespace ChangePhotoPath
for (last_index = 0; last_index < photo_id_array.Count; last_index++) {
if (gui_controller.UpdateProgressBar ("Changing photos base path", "Changing photo", photo_id_array.Count)) {
- Console.WriteLine("User aborted the change of paths...");
+ Log.Debug("User aborted the change of paths...");
return ProcessResult.Cancelled;
}
@@ -228,7 +230,7 @@ namespace ChangePhotoPath
}
UpdateThisUri (last_index, new_path_array[last_index], ref photo);
- System.Console.WriteLine ("U : {0} - {1}", last_index, new_path_array[last_index]);
+ Log.DebugFormat ("U : {0} - {1}", last_index, new_path_array[last_index]);
// DEBUG ONLY
// Cause an TEST exception on 6'th URI to be changed.
@@ -237,7 +239,7 @@ namespace ChangePhotoPath
if (photo != null)
photo_store.Commit (photo);
} catch (Exception e) {
- Console.WriteLine(e);
+ Log.Exception(e);
return ProcessResult.Error;
}
return ProcessResult.Ok;
@@ -260,9 +262,9 @@ namespace ChangePhotoPath
Photo photo = photo_store.Get ( (uint) photo_id_array[test_index]) as Photo;
PhotoVersion version = photo.GetVersion ( (uint) version_id_array[test_index]) as PhotoVersion;
if (version.Uri.AbsolutePath.ToString() == path_array[ test_index ])
- System.Console.WriteLine ("Test URI ({0}) matches --- Should be finished", test_index);
+ Log.DebugFormat ("Test URI ({0}) matches --- Should be finished", test_index);
else
- System.Console.WriteLine ("Test URI ({0}) DO NOT match --- Should NOT BE finished", test_index);
+ Log.DebugFormat ("Test URI ({0}) DO NOT match --- Should NOT BE finished", test_index);
}
*/
diff --git a/extensions/Tools/ChangePhotoPath/ChangePhotoPathGui.cs b/extensions/Tools/ChangePhotoPath/ChangePhotoPathGui.cs
index 4c797e1..351aeb3 100644
--- a/extensions/Tools/ChangePhotoPath/ChangePhotoPathGui.cs
+++ b/extensions/Tools/ChangePhotoPath/ChangePhotoPathGui.cs
@@ -12,6 +12,7 @@ using FSpot.UI.Dialog;
using System;
//using Gnome.Vfs;
using Gtk;
+using Hyena;
namespace ChangePhotoPath
{
@@ -35,7 +36,7 @@ namespace ChangePhotoPath
try {
contr = new ChangePathController ( this );
} catch (Exception e) {
- Console.WriteLine(e);
+ Log.Exception(e);
return false;
}
return true;
@@ -148,7 +149,7 @@ namespace ChangePhotoPath
break;
case ProcessResult.NoPhotosFound : DisplayNoPhotosFoundMsg();
break;
- case ProcessResult.Processing : System.Console.WriteLine ("processing");
+ case ProcessResult.Processing : Log.Debug ("processing");
break;
}
} else
@@ -197,7 +198,7 @@ namespace ChangePhotoPath
try {
LaunchDialog( );
} catch (Exception e) {
- Console.WriteLine(e);
+ Log.Exception(e);
}
}
}
diff --git a/extensions/Tools/ChangePhotoPath/Makefile.am b/extensions/Tools/ChangePhotoPath/Makefile.am
index 86a7386..10fc230 100755
--- a/extensions/Tools/ChangePhotoPath/Makefile.am
+++ b/extensions/Tools/ChangePhotoPath/Makefile.am
@@ -1,24 +1,15 @@
-addin = ChangePhotoPath
-
-addin_manifest = $(addin).addin.xml
-
-addin_sources = \
- ChangePhotoPathController.cs \
- ChangePhotoPathGui.cs \
- IChangePhotoPathGui.cs
-
-addin_resources = \
- $(addin_manifest) \
- ChangePhotoPath.glade
-
-addin_references = \
- Mono.Posix
-
-addin_packages = \
- gtk-sharp-2.0 \
- glade-sharp-2.0
-
-addin_extradist = \
+ASSEMBLY = FSpot.Exporters.ChangePhotoPath
+TARGET = library
+LINK = $(REF_FSPOT_EXTENSION_CHANGEPHOTOPATH)
+INSTALL_DIR = $(EXTENSIONS_INSTALL_DIR)
+
+SOURCES = \
+ IChangePhotoPathGui.cs \
+ ChangePhotoPathGui.cs \
+ ChangePhotoPathController.cs
+
+RESOURCES = \
+ ChangePhotoPath.addin.xml \
ChangePhotoPath.glade
-include $(top_srcdir)/Makefile.addins
+include $(top_srcdir)/build/build.mk
diff --git a/extensions/Tools/ChangePhotoPath/Makefile.in b/extensions/Tools/ChangePhotoPath/Makefile.in
index 09aea16..8893a2a 100644
--- a/extensions/Tools/ChangePhotoPath/Makefile.in
+++ b/extensions/Tools/ChangePhotoPath/Makefile.in
@@ -35,13 +35,22 @@ POST_UNINSTALL = :
build_triplet = @build@
host_triplet = @host@
DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in \
- $(top_srcdir)/Makefile.addins $(top_srcdir)/Makefile.include
+ $(top_srcdir)/build/build.environment.mk \
+ $(top_srcdir)/build/build.mk \
+ $(top_srcdir)/build/build.rules.mk
+ at ENABLE_TESTS_TRUE@am__append_1 = " $(NUNIT_LIBS)"
subdir = extensions/Tools/ChangePhotoPath
ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
am__aclocal_m4_deps = $(top_srcdir)/build/m4/shave/shave.m4 \
$(top_srcdir)/build/m4/shamrock/expansions.m4 \
+ $(top_srcdir)/build/m4/shamrock/gnome-doc.m4 \
$(top_srcdir)/build/m4/shamrock/mono.m4 \
+ $(top_srcdir)/build/m4/shamrock/nunit.m4 \
$(top_srcdir)/build/m4/shamrock/programs.m4 \
+ $(top_srcdir)/build/m4/f-spot/flickrnet.m4 \
+ $(top_srcdir)/build/m4/f-spot/gnome-keyring-sharp.m4 \
+ $(top_srcdir)/build/m4/f-spot/gtk-sharp.m4 \
+ $(top_srcdir)/build/m4/f-spot/mono-addins.m4 \
$(top_srcdir)/acinclude.m4 $(top_srcdir)/configure.ac
am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
$(ACLOCAL_M4)
@@ -49,8 +58,6 @@ mkinstalldirs = $(install_sh) -d
CONFIG_HEADER = $(top_builddir)/config.h
CONFIG_CLEAN_FILES =
CONFIG_CLEAN_VPATH_FILES =
-SOURCES =
-DIST_SOURCES =
am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`;
am__vpath_adj = case $$p in \
$(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \
@@ -72,8 +79,9 @@ am__nobase_list = $(am__nobase_strip_setup); \
am__base_list = \
sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \
sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g'
-am__installdirs = "$(DESTDIR)$(addindir)"
-DATA = $(addin_DATA)
+am__installdirs = "$(DESTDIR)$(moduledir)"
+SCRIPTS = $(module_SCRIPTS)
+DIST_SOURCES =
DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
ACLOCAL = @ACLOCAL@
ACLOCAL_AMFLAGS = @ACLOCAL_AMFLAGS@
@@ -119,6 +127,8 @@ EXIF_SOVERSION = @EXIF_SOVERSION@
F77 = @F77@
FC = @FC@
FGREP = @FGREP@
+FLICKRNET_CFLAGS = @FLICKRNET_CFLAGS@
+FLICKRNET_LIBS = @FLICKRNET_LIBS@
F_CFLAGS = @F_CFLAGS@
F_LIBS = @F_LIBS@
GAPI2CODEGEN = @GAPI2CODEGEN@
@@ -132,6 +142,8 @@ GCONF_SHARP_LIBS = @GCONF_SHARP_LIBS@
GETTEXT_PACKAGE = @GETTEXT_PACKAGE@
GIO_CFLAGS = @GIO_CFLAGS@
GIO_LIBS = @GIO_LIBS@
+GLIBSHARP_2_12_7_CFLAGS = @GLIBSHARP_2_12_7_CFLAGS@
+GLIBSHARP_2_12_7_LIBS = @GLIBSHARP_2_12_7_LIBS@
GLIBSHARP_CFLAGS = @GLIBSHARP_CFLAGS@
GLIBSHARP_LIBS = @GLIBSHARP_LIBS@
GLIB_CFLAGS = @GLIB_CFLAGS@
@@ -147,6 +159,10 @@ GNOME_SHARP_CFLAGS = @GNOME_SHARP_CFLAGS@
GNOME_SHARP_LIBS = @GNOME_SHARP_LIBS@
GOBJECT_QUERY = @GOBJECT_QUERY@
GREP = @GREP@
+GTKSHARP_A11Y_CFLAGS = @GTKSHARP_A11Y_CFLAGS@
+GTKSHARP_A11Y_LIBS = @GTKSHARP_A11Y_LIBS@
+GTKSHARP_CFLAGS = @GTKSHARP_CFLAGS@
+GTKSHARP_LIBS = @GTKSHARP_LIBS@
HELP_DIR = @HELP_DIR@
ICONS_DIRECTORY = @ICONS_DIRECTORY@
INSTALL = @INSTALL@
@@ -160,14 +176,14 @@ INTLTOOL_EXTRACT = @INTLTOOL_EXTRACT@
INTLTOOL_MERGE = @INTLTOOL_MERGE@
INTLTOOL_PERL = @INTLTOOL_PERL@
INTLTOOL_UPDATE = @INTLTOOL_UPDATE@
+KEYRINGSHARP_CFLAGS = @KEYRINGSHARP_CFLAGS@
+KEYRINGSHARP_LIBS = @KEYRINGSHARP_LIBS@
LCMS_CFLAGS = @LCMS_CFLAGS@
LCMS_LIBS = @LCMS_LIBS@
LD = @LD@
LDFLAGS = @LDFLAGS@
LIBEXIF_VERSION_CHECK_CFLAGS = @LIBEXIF_VERSION_CHECK_CFLAGS@
LIBEXIF_VERSION_CHECK_LIBS = @LIBEXIF_VERSION_CHECK_LIBS@
-LIBGPHOTO2_CFLAGS = @LIBGPHOTO2_CFLAGS@
-LIBGPHOTO2_LIBS = @LIBGPHOTO2_LIBS@
LIBJPEG = @LIBJPEG@
LIBOBJS = @LIBOBJS@
LIBS = @LIBS@
@@ -182,6 +198,12 @@ MCS = @MCS@
MKDIR_P = @MKDIR_P@
MKINSTALLDIRS = @MKINSTALLDIRS@
MONO = @MONO@
+MONO_ADDINS_CFLAGS = @MONO_ADDINS_CFLAGS@
+MONO_ADDINS_GUI_CFLAGS = @MONO_ADDINS_GUI_CFLAGS@
+MONO_ADDINS_GUI_LIBS = @MONO_ADDINS_GUI_LIBS@
+MONO_ADDINS_LIBS = @MONO_ADDINS_LIBS@
+MONO_ADDINS_SETUP_CFLAGS = @MONO_ADDINS_SETUP_CFLAGS@
+MONO_ADDINS_SETUP_LIBS = @MONO_ADDINS_SETUP_LIBS@
MONO_MODULE_CFLAGS = @MONO_MODULE_CFLAGS@
MONO_MODULE_LIBS = @MONO_MODULE_LIBS@
MSGFMT = @MSGFMT@
@@ -192,7 +214,6 @@ NDESK_DBUS_LIBS = @NDESK_DBUS_LIBS@
NM = @NM@
NMEDIT = @NMEDIT@
NUNIT_CFLAGS = @NUNIT_CFLAGS@
-NUNIT_DEFINES = @NUNIT_DEFINES@
NUNIT_LIBS = @NUNIT_LIBS@
OBJC = @OBJC@
OBJDUMP = @OBJDUMP@
@@ -284,88 +305,234 @@ target_alias = @target_alias@
top_build_prefix = @top_build_prefix@
top_builddir = @top_builddir@
top_srcdir = @top_srcdir@
-addin = ChangePhotoPath
-addin_manifest = $(addin).addin.xml
-addin_sources = \
- ChangePhotoPathController.cs \
- ChangePhotoPathGui.cs \
- IChangePhotoPathGui.cs
-
-addin_resources = \
- $(addin_manifest) \
+ASSEMBLY = FSpot.Exporters.ChangePhotoPath
+TARGET = library
+LINK = $(REF_FSPOT_EXTENSION_CHANGEPHOTOPATH) $(am__append_1)
+INSTALL_DIR = $(EXTENSIONS_INSTALL_DIR)
+SOURCES = \
+ IChangePhotoPathGui.cs \
+ ChangePhotoPathGui.cs \
+ ChangePhotoPathController.cs
+
+RESOURCES = \
+ ChangePhotoPath.addin.xml \
ChangePhotoPath.glade
-addin_references = \
- Mono.Posix
-addin_packages = \
- gtk-sharp-2.0 \
- glade-sharp-2.0
+# Initializers
+MONO_BASE_PATH =
+MONO_ADDINS_PATH =
-addin_extradist = \
- ChangePhotoPath.glade
-
-ASSEMBLY = $(addin).dll
+# Install Paths
+DEFAULT_INSTALL_DIR = $(pkglibdir)
+BACKENDS_INSTALL_DIR = $(DEFAULT_INSTALL_DIR)/Backends
+EXTENSIONS_INSTALL_DIR = $(DEFAULT_INSTALL_DIR)/Extensions
DIR_DOCS = $(top_builddir)/docs
DIR_EXTENSIONS = $(top_builddir)/extensions
-DIR_GPHOTO2 = $(top_builddir)/lib/libgphoto2-sharp
DIR_ICONS = $(top_builddir)/icons
DIR_JPEGTRAN = $(top_builddir)/lib/libjpegtran
-DIR_KEYRING = $(top_builddir)/lib/gnome-keyring-sharp
DIR_LIBFSPOT = $(top_builddir)/lib/libfspot
DIR_SEMWEB = $(top_builddir)/lib/semweb
DIR_SRC = $(top_builddir)/src
DIR_GIOSHARP = $(top_builddir)/lib/gio-sharp/gio
DIR_GTKSHARPBEANS = $(top_builddir)/lib/gtk-sharp-beans
DIR_UNIQUESHARP = $(top_builddir)/lib/unique-sharp/unique
-LINK_KEYRING = -r:$(DIR_KEYRING)/gnome-keyring-sharp.dll
-LINK_GPHOTO2 = -r:$(DIR_GPHOTO2)/libgphoto2-sharp.dll
-LINK_SEMWEB = -r:$(DIR_SEMWEB)/SemWeb.dll
-LINK_GIOSHARP = -r:$(DIR_GIOSHARP)/gio-sharp.dll
-LINK_GTKSHARPBEANS = -r:$(DIR_GTKSHARPBEANS)/gtk-sharp-beans.dll
-LINK_UNIQUESHARP = -r:$(DIR_UNIQUESHARP)/unique-sharp.dll
-CSC_FLAGS = -debug
-CSC = $(MCS) $(CSC_FLAGS) -target:exe
-CSC_LIB = $(MCS) $(CSC_FLAGS) -target:library
-MONO_DEBUGFLAGS = --debug
-RUNTIME = mono $(MONO_DEBUGFLAGS)
-dep_resources = $(addprefix $(srcdir)/, $(addin_resources))
-build_resources = $(foreach res, $(dep_resources), $(addprefix -resource:, $(res)),$(notdir $(res)))
-build_sources = $(addprefix $(srcdir)/, $(addin_sources))
-build_packages = \
- $(addprefix -pkg:, $(addin_packages)) \
- -pkg:mono-addins
-
-build_references = \
- $(addprefix -r:, $(addin_references)) \
- -r:$(top_builddir)/src/f-spot.exe \
- -r:$(top_builddir)/src/Cms.dll \
- -r:$(top_builddir)/src/FSpot.Core.dll \
- -r:$(top_builddir)/src/FSpot.Platform.dll \
- -r:$(top_builddir)/src/FSpot.Query.dll \
- -r:$(top_builddir)/src/FSpot.Utils.dll \
- -r:$(top_builddir)/src/FSpot.Widgets.dll \
- $(LINK_SEMWEB) \
- $(LINK_GPHOTO2) \
- $(LINK_GIOSHARP) \
- $(LINK_UNIQUESHARP) \
- $(LINK_GTKSHARPBEANS)
-
-addin_SOURCES = \
- $(build_sources)
-
-addindir = $(pkglibdir)/extensions
-addin_DATA = $(ASSEMBLY)
-CLEANFILES = $(ASSEMBLY) $(ASSEMBLY).mdb *.mpack
-EXTRA_DIST = \
- $(build_sources) \
- $(dep_resources) \
- $(addin_extradist)
-
+DIR_BIN = $(top_builddir)/bin
+
+# External libraries to link against, generated from configure
+LINK_SYSTEM = -r:System
+LINK_SYSTEMDATA = -r:System.Data
+LINK_SYSTEM_WEB = -r:System.Web
+LINK_MONO_POSIX = -r:Mono.Posix
+LINK_MONO_CAIRO = -r:Mono.Cairo
+LINK_MONO_SIMD = -r:Mono.Simd
+LINK_MONODATA = -r:Mono.Data
+LINK_MONO_DATA_SQLITECLIENT = -r:Mono.Data.SqliteClient
+LINK_ICSHARP_ZIP_LIB = -r:ICSharpCode.SharpZipLib
+LINK_KEYRING = $(KEYRINGSHARP_LIBS)
+LINK_GLIB = $(GLIBSHARP_LIBS)
+LINK_GTK = $(GTKSHARP_LIBS)
+LINK_GNOME = $(GNOME_SHARP_LIBS)
+LINK_GCONF = $(GCONF_SHARP_LIBS)
+LINK_GLADE = -pkg:glade-sharp-2.0
+LINK_FLICKRNET = -pkg:flickrnet
+LINK_DBUS = $(NDESK_DBUS_LIBS) $(NDESK_DBUS_GLIB_LIBS)
+LINK_DBUS_NO_GLIB = $(NDESK_DBUS_LIBS)
+LINK_MONO_ADDINS_DEPS = $(MONO_ADDINS_LIBS)
+LINK_MONO_ADDINS_SETUP_DEPS = $(MONO_ADDINS_SETUP_LIBS)
+LINK_MONO_ADDINS_GUI_DEPS = $(MONO_ADDINS_GUI_LIBS)
+
+# GIO
+REF_GIO =
+LINK_GIO = -r:$(DIR_GIOSHARP)/gio-sharp.dll
+LINK_GIO_DEPS = $(REF_GIO) $(LINK_GIO)
+
+# Gtk Beans
+REF_GTK_BEANS = $(LINK_GIO_DEPS)
+LINK_GTK_BEANS = -r:$(DIR_GTKSHARPBEANS)/gtk-sharp-beans.dll
+LINK_GTK_BEANS_DEPS = $(REF_GTK_BEANS) $(LINK_GTK_BEANS)
+
+# Uniqe
+REF_UNIQUE =
+LINK_UNIQUE = -r:$(DIR_UNIQUESHARP)/unique-sharp.dll
+LINK_UNIQUE_DEPS = $(REF_UNIQUE) $(LINK_UNIQUE)
+
+# Hyena
+REF_HYENA = $(LINK_SYSTEM) $(LINK_MONO_POSIX)
+LINK_HYENA = -r:$(DIR_BIN)/Hyena.dll
+LINK_HYENA_DEPS = $(REF_HYENA) $(LINK_HYENA)
+
+# Semweb
+REF_SEMWEB = $(LINK_SYSTEMDATA) $(LINK_HYENA_DEPS)
+LINK_SEMWEB = -r:$(DIR_BIN)/SemWeb.dll
+LINK_SEMWEB_DEPS = $(REF_SEMWEB) $(LINK_SEMWEB)
+
+# Hyena.Data.Sqlite
+REF_HYENA_DATA_SQLITE = $(LINK_SQLITE)
+LINK_HYENA_DATA_SQLITE = -r:$(DIR_BIN)/Hyena.Data.Sqlite.dll
+LINK_HYENA_DATA_SQLITE_DEPS = $(REF_HYENA_DATA_SQLITE) $(LINK_HYENA_DATA_SQLITE)
+
+# Hyena.Gui
+REF_HYENA_GUI = $(LINK_HYENA_DEPS)
+LINK_HYENA_GUI = -r:$(DIR_BIN)/Hyena.Gui.dll
+LINK_HENA_GUI_DEPS = $(REF_HYENA_GUI) $(LINK_HYENA_GUI)
+
+# FSpot.Cms
+REF_FSPOT_CMS = $(LINK_GTK)
+LINK_FSPOT_CMS = -r:$(DIR_BIN)/FSpot.Cms.dll
+LINK_FSPOT_CMS_DEPS = $(REF_FSPOT_CMS) $(LINK_FSPOT_CMS)
+
+# FSpot.Utils
+REF_FSPOT_UTILS = $(LINK_HYENA_DEPS) $(LINK_GTK) $(LINK_GIO) $(LINK_MONO_CAIRO)
+LINK_FSPOT_UTILS = -r:$(DIR_BIN)/FSpot.Utils.dll
+LINK_FSPOT_UTILS_DEPS = $(REF_FSPOT_UTILS) $(LINK_FSPOT_UTILS)
+
+# FSpot.Core
+REF_FSPOT_CORE = $(LINK_FSPOT_UTILS_DEPS) $(LINK_FSPOT_CMS_DEPS)
+LINK_FSPOT_CORE = -r:$(DIR_BIN)/FSpot.Core.dll
+LINK_FSPOT_CORE_DEPS = $(REF_FSPOT_CORE) $(LINK_FSPOT_CORE)
+
+# FSpot.Query
+REF_FSPOT_QUERY = $(LINK_FSPOT_CORE_DEPS)
+LINK_FSPOT_QUERY = -r:$(DIR_BIN)/FSpot.Query.dll
+LINK_FSPOT_QUERY_DEPS = $(REF_FSPOT_QUERY) $(LINK_FSPOT_QUERY)
+
+# FSpot.JobScheduler
+REF_FSPOT_JOB_SCHEDULER = $(LINK_HYENA_DEPS)
+LINK_FSPOT_JOB_SCHEDULER = -r:$(DIR_BIN)/FSpot.JobScheduler.dll
+LINK_FSPOT_JOB_SCHEDULER_DEPS = $(REF_FSPOT_JOB_SCHEDULER) $(LINK_FSPOT_JOB_SCHEDULER)
+
+# FSpot.Bling
+REF_FSPOT_BLING = $(LINK_GTK_BEANS_DEPS) $(LINK_GLIB)
+LINK_FSPOT_BLING = -r:$(DIR_BIN)/FSpot.Bling.dll
+LINK_FSPOT_BLING_DEPS = $(REF_FSPOT_BLING) $(LINK_FSPOT_BLING)
+
+# FSpot.Platform
+REF_FSPOT_PLATFORM = $(LINK_GCONF) $(LINK_GTK) $(LINK_FSPOT_CORE_DEPS) $(LINK_DBUS)
+LINK_FSPOT_PLATFORM = -r:$(DIR_BIN)/FSpot.Platform.dll
+LINK_FSPOT_PLATFORM_DEPS = $(REF_FSPOT_PLATFORM) $(LINK_FSPOT_PLATFORM)
+
+# FSpot.Widgets
+REF_FSPOT_WIDGETS = $(LINK_FSPOT_CORE_DEPS) $(LINK_FSPOT_BLING_DEPS)
+LINK_FSPOT_WIDGETS = -r:$(DIR_BIN)/FSpot.Widgets.dll
+LINK_FSPOT_WIDGETS_DEPS = $(REF_FSPOT_WIDGETS) $(LINK_FSPOT_WIDGETS)
+
+# FSpot (executable)
+REF_FSPOT = $(LINK_FSPOT_WIDGETS_DEPS) $(LINK_FSPOT_PLATFORM_DEPS) $(LINK_FSPOT_QUERY_DEPS) \
+ $(LINK_GLIB) $(LINK_MONO_ADDINS_DEPS) $(LINK_UNIQUE_DEPS) $(LINK_MONO_ADDINS_SETUP_DEPS) \
+ $(LINK_SEMWEB_DEPS) $(LINK_GLADE) $(LINK_MONODATA) $(LINK_MONO_DATA_SQLITECLIENT) \
+ $(LINK_MONO_ADDINS_GUI_DEPS) $(LINK_FSPOT_JOB_SCHEDULER_DEPS) $(LINK_ICSHARP_ZIP_LIB) \
+ $(LINK_GNOME)
+
+# FIXME: do not link executables
+LINK_FSPOT = -r:$(DIR_BIN)/f-spot.exe
+LINK_FSPOT_DEPS = $(REF_FSPOT) $(LINK_FSPOT)
+
+# Extensions
+REF_FSPOT_EXTENSION_BLACKOUTEDITOR = $(LINK_FSPOT_DEPS)
+REF_FSPOT_EXTENSION_BWEDITOR = $(LINK_FSPOT_DEPS) $(LINK_MONO_SIMD)
+REF_FSPOT_EXTENSION_FLIPEDITOR = $(LINK_FSPOT_DEPS)
+REF_FSPOT_EXTENSION_PIXELATEEDITOR = $(LINK_FSPOT_DEPS)
+REF_FSPOT_EXTENSION_RESIZEEDITOR = $(LINK_FSPOT_DEPS)
+REF_FSPOT_EXTENSION_CDEXPORT = $(LINK_FSPOT_DEPS)
+REF_FSPOT_EXTENSION_FACEBOOKEXPORT = $(LINK_FSPOT_DEPS) $(LINK_KEYRING)
+REF_FSPOT_EXTENSION_FLICKREXPORT = $(LINK_FSPOT_DEPS) $(LINK_FLICKRNET)
+REF_FSPOT_EXTENSION_FOLDEREXPORT = $(LINK_FSPOT_DEPS) $(LINK_SYSTEM_WEB)
+REF_FSPOT_EXTENSION_GALLERYEXPORT = $(LINK_FSPOT_DEPS)
+REF_MONO_GOOGLE = $(LINK_HYENA_DEPS)
+LINK_MONO_GOOGLE = -r:$(DIR_BIN)/Mono.Google.dll
+LINK_MONO_GOOGLE_DEPS = $(REF_MONO_GOOGLE) $(LINK_MONO_GOOGLE)
+REF_FSPOT_EXTENSION_PICASAWEBEXPORT = $(LINK_FSPOT_DEPS) $(LINK_MONO_GOOGLE) $(LINK_KEYRING)
+REF_SMUGMUGNET = $(LINK_FSPOT_DEPS)
+LINK_SMUGMUGNET = -r:$(DIR_BIN)/SmugMugNet.dll
+LINK_SMUGMUGNET_DEPS = $(REF_SMUGMUGNET) $(LINK_SMUGMUGNET)
+REF_FSPOT_EXTENSION_SMUGMUGEXPORT = $(LINK_SMUGMUGNET_DEPS) $(LINK_KEYRING)
+REF_MONO_TABBLO = $(LINK_HYENA_DEPS)
+LINK_MONO_TABBLO = -r:$(DIR_BIN)/Mono.Tabblo.dll
+LINK_MONO_TABBLO_DEPS = $(REF_MONO_TABBLO) $(LINK_MONO_TABBLO)
+REF_FSPOT_EXTENSION_TABBLOEXPORT = $(LINK_FSPOT_DEPS) $(LINK_KEYRING) $(LINK_MONO_TABBLO_DEPS)
+REF_FSPOT_EXTENSION_ZIPEXPORT = $(LINK_FSPOT_DEPS)
+REF_FSPOT_EXTENSION_CHANGEPHOTOPATH = $(LINK_FSPOT_DEPS)
+REF_FSPOT_EXTENSION_DEVELOPINUFRAW = $(LINK_FSPOT_DEPS)
+REF_FSPOT_EXTENSION_HASHJOB = $(LINK_FSPOT_DEPS)
+REF_FSPOT_EXTENSION_LIVEWEBGALLERY = $(LINK_FSPOT_DEPS)
+REF_FSPOT_EXTENSION_MERGEDB = $(LINK_FSPOT_DEPS)
+REF_FSPOT_EXTENSION_RAWPLUSJPEG = $(LINK_FSPOT_DEPS)
+REF_FSPOT_EXTENSION_RETROACTIVEROLL = $(LINK_FSPOT_DEPS)
+REF_FSPOT_EXTENSION_SCREENSAVERCONFIG = $(LINK_FSPOT_DEPS)
+REF_FSPOT_EXTENSION_COVERTRANSITION = $(LINK_FSPOT_DEPS)
+
+# Cute hack to replace a space with something
+colon := :
+empty :=
+space := $(empty) $(empty)
+
+# Build path to allow running uninstalled
+RUN_PATH = $(subst $(space),$(colon), $(MONO_BASE_PATH))
+UNIQUE_FILTER_PIPE = tr [:space:] \\n | sort | uniq
+BUILD_DATA_DIR = $(top_builddir)/bin/share/$(PACKAGE)
+
+# Since all other attempts failed, we currently go this way:
+# This code adds the file specified in ASSEMBLY_INFO_SOURCE to SOURCES_BUILD.
+# If no such file is specified, the default AssemblyInfo.cs is used.
+ASSEMBLY_INFO_SOURCE_REAL = \
+ $(shell if [ "$(ASSEMBLY_INFO_SOURCE)" ]; \
+ then \
+ echo "$(addprefix $(srcdir)/, $(ASSEMBLY_INFO_SOURCE))"; \
+ else \
+ echo "$(top_srcdir)/src/AssemblyInfo.cs"; \
+ fi)
+
+SOURCES_BUILD = $(addprefix $(srcdir)/, $(SOURCES)) \
+ $(ASSEMBLY_INFO_SOURCE_REAL)
+RESOURCES_EXPANDED = $(addprefix $(srcdir)/, $(RESOURCES))
+RESOURCES_BUILD = $(foreach resource, $(RESOURCES_EXPANDED), \
+ -resource:$(resource),$(notdir $(resource)))
+
+INSTALL_ICONS = $(top_srcdir)/build/private-icon-theme-installer "$(mkinstalldirs)" "$(INSTALL_DATA)"
+THEME_ICONS_SOURCE = $(wildcard $(srcdir)/ThemeIcons/*/*/*.png) $(wildcard $(srcdir)/ThemeIcons/scalable/*/*.svg)
+THEME_ICONS_RELATIVE = $(subst $(srcdir)/ThemeIcons/, , $(THEME_ICONS_SOURCE))
+ASSEMBLY_EXTENSION = $(strip $(patsubst library, dll, $(TARGET)))
+ASSEMBLY_FILE = $(top_builddir)/bin/$(ASSEMBLY).$(ASSEMBLY_EXTENSION)
+INSTALL_DIR_RESOLVED = $(firstword $(subst , $(DEFAULT_INSTALL_DIR), $(INSTALL_DIR)))
+ at ENABLE_TESTS_TRUE@ENABLE_TESTS_FLAG = "-define:ENABLE_TESTS"
+ at ENABLE_ATK_TRUE@ENABLE_ATK_FLAG = "-define:ENABLE_ATK"
+FILTERED_LINK = $(shell echo "$(LINK)" | $(UNIQUE_FILTER_PIPE))
+DEP_LINK = $(shell echo "$(LINK)" | $(UNIQUE_FILTER_PIPE) | sed s,-r:,,g | grep '$(top_builddir)/bin/')
+OUTPUT_FILES = \
+ $(ASSEMBLY_FILE) \
+ $(ASSEMBLY_FILE).mdb
+
+moduledir = $(INSTALL_DIR_RESOLVED)
+module_SCRIPTS = $(OUTPUT_FILES)
+EXTRA_DIST = $(SOURCES_BUILD) $(RESOURCES_EXPANDED) $(THEME_ICONS_SOURCE)
+CLEANFILES = $(OUTPUT_FILES) $(ASSEMBLY_FILE).config
+DISTCLEANFILES = *.pidb
+MAINTAINERCLEANFILES = Makefile.in
all: all-am
.SUFFIXES:
-$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(top_srcdir)/Makefile.addins $(top_srcdir)/Makefile.include $(am__configure_deps)
+$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(top_srcdir)/build/build.mk $(top_srcdir)/build/build.environment.mk $(top_srcdir)/build/build.rules.mk $(am__configure_deps)
@for dep in $?; do \
case '$(am__configure_deps)' in \
*$$dep*) \
@@ -395,32 +562,46 @@ $(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps)
$(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps)
cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
$(am__aclocal_m4_deps):
+install-moduleSCRIPTS: $(module_SCRIPTS)
+ @$(NORMAL_INSTALL)
+ test -z "$(moduledir)" || $(MKDIR_P) "$(DESTDIR)$(moduledir)"
+ @list='$(module_SCRIPTS)'; test -n "$(moduledir)" || list=; \
+ for p in $$list; do \
+ if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \
+ if test -f "$$d$$p"; then echo "$$d$$p"; echo "$$p"; else :; fi; \
+ done | \
+ sed -e 'p;s,.*/,,;n' \
+ -e 'h;s|.*|.|' \
+ -e 'p;x;s,.*/,,;$(transform)' | sed 'N;N;N;s,\n, ,g' | \
+ $(AWK) 'BEGIN { files["."] = ""; dirs["."] = 1; } \
+ { d=$$3; if (dirs[d] != 1) { print "d", d; dirs[d] = 1 } \
+ if ($$2 == $$4) { files[d] = files[d] " " $$1; \
+ if (++n[d] == $(am__install_max)) { \
+ print "f", d, files[d]; n[d] = 0; files[d] = "" } } \
+ else { print "f", d "/" $$4, $$1 } } \
+ END { for (d in files) print "f", d, files[d] }' | \
+ while read type dir files; do \
+ if test "$$dir" = .; then dir=; else dir=/$$dir; fi; \
+ test -z "$$files" || { \
+ echo " $(INSTALL_SCRIPT) $$files '$(DESTDIR)$(moduledir)$$dir'"; \
+ $(INSTALL_SCRIPT) $$files "$(DESTDIR)$(moduledir)$$dir" || exit $$?; \
+ } \
+ ; done
+
+uninstall-moduleSCRIPTS:
+ @$(NORMAL_UNINSTALL)
+ @list='$(module_SCRIPTS)'; test -n "$(moduledir)" || exit 0; \
+ files=`for p in $$list; do echo "$$p"; done | \
+ sed -e 's,.*/,,;$(transform)'`; \
+ test -n "$$list" || exit 0; \
+ echo " ( cd '$(DESTDIR)$(moduledir)' && rm -f" $$files ")"; \
+ cd "$(DESTDIR)$(moduledir)" && rm -f $$files
mostlyclean-libtool:
-rm -f *.lo
clean-libtool:
-rm -rf .libs _libs
-install-addinDATA: $(addin_DATA)
- @$(NORMAL_INSTALL)
- test -z "$(addindir)" || $(MKDIR_P) "$(DESTDIR)$(addindir)"
- @list='$(addin_DATA)'; test -n "$(addindir)" || list=; \
- for p in $$list; do \
- if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \
- echo "$$d$$p"; \
- done | $(am__base_list) | \
- while read files; do \
- echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(addindir)'"; \
- $(INSTALL_DATA) $$files "$(DESTDIR)$(addindir)" || exit $$?; \
- done
-
-uninstall-addinDATA:
- @$(NORMAL_UNINSTALL)
- @list='$(addin_DATA)'; test -n "$(addindir)" || list=; \
- files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \
- test -n "$$files" || exit 0; \
- echo " ( cd '$(DESTDIR)$(addindir)' && rm -f" $$files ")"; \
- cd "$(DESTDIR)$(addindir)" && rm -f $$files
tags: TAGS
TAGS:
@@ -460,9 +641,9 @@ distdir: $(DISTFILES)
done
check-am: all-am
check: check-am
-all-am: Makefile $(DATA)
+all-am: Makefile $(SCRIPTS)
installdirs:
- for dir in "$(DESTDIR)$(addindir)"; do \
+ for dir in "$(DESTDIR)$(moduledir)"; do \
test -z "$$dir" || $(MKDIR_P) "$$dir"; \
done
install: install-am
@@ -487,10 +668,12 @@ clean-generic:
distclean-generic:
-test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
-test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES)
+ -test -z "$(DISTCLEANFILES)" || rm -f $(DISTCLEANFILES)
maintainer-clean-generic:
@echo "This command is intended for maintainers to use"
@echo "it deletes files that may require special tools to rebuild."
+ -test -z "$(MAINTAINERCLEANFILES)" || rm -f $(MAINTAINERCLEANFILES)
clean: clean-am
clean-am: clean-generic clean-libtool mostlyclean-am
@@ -511,7 +694,7 @@ info: info-am
info-am:
-install-data-am: install-addinDATA
+install-data-am: install-data-local install-moduleSCRIPTS
install-dvi: install-dvi-am
@@ -555,28 +738,72 @@ ps: ps-am
ps-am:
-uninstall-am: uninstall-addinDATA
+uninstall-am: uninstall-local uninstall-moduleSCRIPTS
.MAKE: install-am install-strip
.PHONY: all all-am check check-am clean clean-generic clean-libtool \
distclean distclean-generic distclean-libtool distdir dvi \
- dvi-am html html-am info info-am install install-addinDATA \
- install-am install-data install-data-am install-dvi \
+ dvi-am html html-am info info-am install install-am \
+ install-data install-data-am install-data-local 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-generic mostlyclean-libtool pdf pdf-am ps ps-am \
- uninstall uninstall-addinDATA uninstall-am
-
-
-mpack: $(ASSEMBLY)
- mautil p $(ASSEMBLY)
-
-$(ASSEMBLY): $(addin_SOURCES) $(dep_resources)
- $(CSC_LIB) -out:$@ $(addin_extraflags) $(build_sources) $(build_references) $(build_packages) $(build_resources)
+ install-moduleSCRIPTS install-pdf install-pdf-am install-ps \
+ install-ps-am install-strip installcheck installcheck-am \
+ installdirs maintainer-clean maintainer-clean-generic \
+ mostlyclean mostlyclean-generic mostlyclean-libtool pdf pdf-am \
+ ps ps-am uninstall uninstall-am uninstall-local \
+ uninstall-moduleSCRIPTS
+
+
+all: $(ASSEMBLY_FILE) theme-icons
+
+run:
+ @pushd $(top_builddir); \
+ make run; \
+ popd;
+
+# uncommented for now.
+# tests are currently excuted from Makefile in $(top_builddir)
+#test:
+# @pushd $(top_builddir)/tests; \
+# make $(ASSEMBLY); \
+# popd;
+
+build-debug:
+ @echo $(DEP_LINK)
+
+$(ASSEMBLY_FILE).mdb: $(ASSEMBLY_FILE)
+
+$(ASSEMBLY_FILE): $(SOURCES_BUILD) $(RESOURCES_EXPANDED) $(DEP_LINK)
+ @mkdir -p $(top_builddir)/bin
+ @if [ ! "x$(ENABLE_RELEASE)" = "xyes" ]; then \
+ $(top_srcdir)/build/dll-map-makefile-verifier $(srcdir)/Makefile.am $(srcdir)/$(notdir $@.config) && \
+ $(MONO) $(top_builddir)/build/dll-map-verifier.exe $(srcdir)/$(notdir $@.config) -iwinmm -ilibbanshee -ilibbnpx11 -ilibc -ilibc.so.6 -iintl -ilibmtp.dll -ilibigemacintegration.dylib -iCFRelease $(SOURCES_BUILD); \
+ fi;
+ $(MCS) \
+ $(GMCS_FLAGS) \
+ $(ASSEMBLY_BUILD_FLAGS) \
+ -nowarn:0278 -nowarn:0078 $$warn \
+ -define:HAVE_GTK_2_10 -define:NET_2_0 \
+ -debug -target:$(TARGET) -out:$@ \
+ $(BUILD_DEFINES) $(ENABLE_TESTS_FLAG) $(ENABLE_ATK_FLAG) \
+ $(FILTERED_LINK) $(RESOURCES_BUILD) $(SOURCES_BUILD)
+ @if [ -e $(srcdir)/$(notdir $@.config) ]; then \
+ cp $(srcdir)/$(notdir $@.config) $(top_builddir)/bin; \
+ fi;
+ @if [ ! -z "$(EXTRA_BUNDLE)" ]; then \
+ cp $(EXTRA_BUNDLE) $(top_builddir)/bin; \
+ fi;
+
+theme-icons: $(THEME_ICONS_SOURCE)
+ @$(INSTALL_ICONS) -il "$(BUILD_DATA_DIR)" "$(srcdir)" $(THEME_ICONS_RELATIVE)
+
+install-data-local: $(THEME_ICONS_SOURCE)
+ @$(INSTALL_ICONS) -i "$(DESTDIR)$(pkgdatadir)" "$(srcdir)" $(THEME_ICONS_RELATIVE)
+
+uninstall-local: $(THEME_ICONS_SOURCE)
+ @$(INSTALL_ICONS) -u "$(DESTDIR)$(pkgdatadir)" "$(srcdir)" $(THEME_ICONS_RELATIVE)
# 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/extensions/Tools/DevelopInUFraw/DevelopInUFRaw.cs b/extensions/Tools/DevelopInUFraw/DevelopInUFRaw.cs
index 97ad4da..6e67a0c 100644
--- a/extensions/Tools/DevelopInUFraw/DevelopInUFRaw.cs
+++ b/extensions/Tools/DevelopInUFraw/DevelopInUFRaw.cs
@@ -12,6 +12,7 @@ using System.IO;
using Mono.Unix;
+using Hyena;
using FSpot;
using FSpot.Utils;
using FSpot.Extensions;
@@ -29,7 +30,7 @@ namespace DevelopInUFRawExtension
{
Log.Information ("Executing DevelopInUFRaw extension");
- foreach (Photo p in MainWindow.Toplevel.SelectedPhotos ()) {
+ foreach (Photo p in App.Instance.Organizer.SelectedPhotos ()) {
DevelopPhoto (p);
}
}
@@ -45,11 +46,11 @@ namespace DevelopInUFRawExtension
{
ProgressDialog pdialog = new ProgressDialog(Catalog.GetString ("Developing photos"),
ProgressDialog.CancelButtonType.Cancel,
- MainWindow.Toplevel.SelectedPhotos ().Length,
- MainWindow.Toplevel.Window);
+ App.Instance.Organizer.SelectedPhotos ().Length,
+ App.Instance.Organizer.Window);
Log.Information ("Executing DevelopInUFRaw extension in batch mode");
- foreach (Photo p in MainWindow.Toplevel.SelectedPhotos ()) {
+ foreach (Photo p in App.Instance.Organizer.SelectedPhotos ()) {
bool cancelled = pdialog.Update(String.Format(Catalog.GetString ("Developing {0}"), p.Name));
if (cancelled) {
break;
@@ -148,7 +149,7 @@ namespace DevelopInUFRawExtension
File.Move (Path.ChangeExtension (developed.LocalPath, ".ufraw"), Path.ChangeExtension (raw.Uri.LocalPath, ".ufraw"));
}
- p.DefaultVersionId = p.AddVersion (developed, name, true);
+ p.DefaultVersionId = p.AddVersion (new SafeUri (developed).GetBaseUri (),new SafeUri (developed).GetFilename (), name, true);
p.Changes.DataChanged = true;
App.Instance.Database.Photos.Commit (p);
}
@@ -176,8 +177,7 @@ namespace DevelopInUFRawExtension
private static string DirectoryPath (Photo p)
{
- System.Uri uri = p.VersionUri (Photo.OriginalVersionId);
- return uri.Scheme + "://" + uri.Host + System.IO.Path.GetDirectoryName (uri.AbsolutePath);
+ return p.VersionUri (Photo.OriginalVersionId).GetBaseUri ();
}
void LoadPreference (string key)
diff --git a/extensions/Tools/DevelopInUFraw/Makefile.am b/extensions/Tools/DevelopInUFraw/Makefile.am
index 1880cd8..a59d3d4 100644
--- a/extensions/Tools/DevelopInUFraw/Makefile.am
+++ b/extensions/Tools/DevelopInUFraw/Makefile.am
@@ -1,19 +1,12 @@
-addin = DevelopInUFRaw
+ASSEMBLY = FSpot.Exporters.DevelopInUFRaw
+TARGET = library
+LINK = $(REF_FSPOT_EXTENSION_DEVELOPINUFRAW)
+INSTALL_DIR = $(EXTENSIONS_INSTALL_DIR)
-addin_manifest = $(addin).addin.xml
+SOURCES = \
+ DevelopInUFRaw.cs
-addin_sources = \
- $(addin).cs
+RESOURCES = \
+ DevelopInUFRaw.addin.xml
-addin_resources = \
- $(addin_manifest)
-
-addin_references = \
- Mono.Posix
-
-addin_packages = \
- gtk-sharp-2.0
-
-addin_extradist =
-
-include $(top_srcdir)/Makefile.addins
+include $(top_srcdir)/build/build.mk
diff --git a/extensions/Tools/DevelopInUFraw/Makefile.in b/extensions/Tools/DevelopInUFraw/Makefile.in
index cbd8adf..11bc453 100644
--- a/extensions/Tools/DevelopInUFraw/Makefile.in
+++ b/extensions/Tools/DevelopInUFraw/Makefile.in
@@ -35,13 +35,22 @@ POST_UNINSTALL = :
build_triplet = @build@
host_triplet = @host@
DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in \
- $(top_srcdir)/Makefile.addins $(top_srcdir)/Makefile.include
+ $(top_srcdir)/build/build.environment.mk \
+ $(top_srcdir)/build/build.mk \
+ $(top_srcdir)/build/build.rules.mk
+ at ENABLE_TESTS_TRUE@am__append_1 = " $(NUNIT_LIBS)"
subdir = extensions/Tools/DevelopInUFraw
ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
am__aclocal_m4_deps = $(top_srcdir)/build/m4/shave/shave.m4 \
$(top_srcdir)/build/m4/shamrock/expansions.m4 \
+ $(top_srcdir)/build/m4/shamrock/gnome-doc.m4 \
$(top_srcdir)/build/m4/shamrock/mono.m4 \
+ $(top_srcdir)/build/m4/shamrock/nunit.m4 \
$(top_srcdir)/build/m4/shamrock/programs.m4 \
+ $(top_srcdir)/build/m4/f-spot/flickrnet.m4 \
+ $(top_srcdir)/build/m4/f-spot/gnome-keyring-sharp.m4 \
+ $(top_srcdir)/build/m4/f-spot/gtk-sharp.m4 \
+ $(top_srcdir)/build/m4/f-spot/mono-addins.m4 \
$(top_srcdir)/acinclude.m4 $(top_srcdir)/configure.ac
am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
$(ACLOCAL_M4)
@@ -49,8 +58,6 @@ mkinstalldirs = $(install_sh) -d
CONFIG_HEADER = $(top_builddir)/config.h
CONFIG_CLEAN_FILES =
CONFIG_CLEAN_VPATH_FILES =
-SOURCES =
-DIST_SOURCES =
am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`;
am__vpath_adj = case $$p in \
$(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \
@@ -72,8 +79,9 @@ am__nobase_list = $(am__nobase_strip_setup); \
am__base_list = \
sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \
sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g'
-am__installdirs = "$(DESTDIR)$(addindir)"
-DATA = $(addin_DATA)
+am__installdirs = "$(DESTDIR)$(moduledir)"
+SCRIPTS = $(module_SCRIPTS)
+DIST_SOURCES =
DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
ACLOCAL = @ACLOCAL@
ACLOCAL_AMFLAGS = @ACLOCAL_AMFLAGS@
@@ -119,6 +127,8 @@ EXIF_SOVERSION = @EXIF_SOVERSION@
F77 = @F77@
FC = @FC@
FGREP = @FGREP@
+FLICKRNET_CFLAGS = @FLICKRNET_CFLAGS@
+FLICKRNET_LIBS = @FLICKRNET_LIBS@
F_CFLAGS = @F_CFLAGS@
F_LIBS = @F_LIBS@
GAPI2CODEGEN = @GAPI2CODEGEN@
@@ -132,6 +142,8 @@ GCONF_SHARP_LIBS = @GCONF_SHARP_LIBS@
GETTEXT_PACKAGE = @GETTEXT_PACKAGE@
GIO_CFLAGS = @GIO_CFLAGS@
GIO_LIBS = @GIO_LIBS@
+GLIBSHARP_2_12_7_CFLAGS = @GLIBSHARP_2_12_7_CFLAGS@
+GLIBSHARP_2_12_7_LIBS = @GLIBSHARP_2_12_7_LIBS@
GLIBSHARP_CFLAGS = @GLIBSHARP_CFLAGS@
GLIBSHARP_LIBS = @GLIBSHARP_LIBS@
GLIB_CFLAGS = @GLIB_CFLAGS@
@@ -147,6 +159,10 @@ GNOME_SHARP_CFLAGS = @GNOME_SHARP_CFLAGS@
GNOME_SHARP_LIBS = @GNOME_SHARP_LIBS@
GOBJECT_QUERY = @GOBJECT_QUERY@
GREP = @GREP@
+GTKSHARP_A11Y_CFLAGS = @GTKSHARP_A11Y_CFLAGS@
+GTKSHARP_A11Y_LIBS = @GTKSHARP_A11Y_LIBS@
+GTKSHARP_CFLAGS = @GTKSHARP_CFLAGS@
+GTKSHARP_LIBS = @GTKSHARP_LIBS@
HELP_DIR = @HELP_DIR@
ICONS_DIRECTORY = @ICONS_DIRECTORY@
INSTALL = @INSTALL@
@@ -160,14 +176,14 @@ INTLTOOL_EXTRACT = @INTLTOOL_EXTRACT@
INTLTOOL_MERGE = @INTLTOOL_MERGE@
INTLTOOL_PERL = @INTLTOOL_PERL@
INTLTOOL_UPDATE = @INTLTOOL_UPDATE@
+KEYRINGSHARP_CFLAGS = @KEYRINGSHARP_CFLAGS@
+KEYRINGSHARP_LIBS = @KEYRINGSHARP_LIBS@
LCMS_CFLAGS = @LCMS_CFLAGS@
LCMS_LIBS = @LCMS_LIBS@
LD = @LD@
LDFLAGS = @LDFLAGS@
LIBEXIF_VERSION_CHECK_CFLAGS = @LIBEXIF_VERSION_CHECK_CFLAGS@
LIBEXIF_VERSION_CHECK_LIBS = @LIBEXIF_VERSION_CHECK_LIBS@
-LIBGPHOTO2_CFLAGS = @LIBGPHOTO2_CFLAGS@
-LIBGPHOTO2_LIBS = @LIBGPHOTO2_LIBS@
LIBJPEG = @LIBJPEG@
LIBOBJS = @LIBOBJS@
LIBS = @LIBS@
@@ -182,6 +198,12 @@ MCS = @MCS@
MKDIR_P = @MKDIR_P@
MKINSTALLDIRS = @MKINSTALLDIRS@
MONO = @MONO@
+MONO_ADDINS_CFLAGS = @MONO_ADDINS_CFLAGS@
+MONO_ADDINS_GUI_CFLAGS = @MONO_ADDINS_GUI_CFLAGS@
+MONO_ADDINS_GUI_LIBS = @MONO_ADDINS_GUI_LIBS@
+MONO_ADDINS_LIBS = @MONO_ADDINS_LIBS@
+MONO_ADDINS_SETUP_CFLAGS = @MONO_ADDINS_SETUP_CFLAGS@
+MONO_ADDINS_SETUP_LIBS = @MONO_ADDINS_SETUP_LIBS@
MONO_MODULE_CFLAGS = @MONO_MODULE_CFLAGS@
MONO_MODULE_LIBS = @MONO_MODULE_LIBS@
MSGFMT = @MSGFMT@
@@ -192,7 +214,6 @@ NDESK_DBUS_LIBS = @NDESK_DBUS_LIBS@
NM = @NM@
NMEDIT = @NMEDIT@
NUNIT_CFLAGS = @NUNIT_CFLAGS@
-NUNIT_DEFINES = @NUNIT_DEFINES@
NUNIT_LIBS = @NUNIT_LIBS@
OBJC = @OBJC@
OBJDUMP = @OBJDUMP@
@@ -284,82 +305,231 @@ target_alias = @target_alias@
top_build_prefix = @top_build_prefix@
top_builddir = @top_builddir@
top_srcdir = @top_srcdir@
-addin = DevelopInUFRaw
-addin_manifest = $(addin).addin.xml
-addin_sources = \
- $(addin).cs
+ASSEMBLY = FSpot.Exporters.DevelopInUFRaw
+TARGET = library
+LINK = $(REF_FSPOT_EXTENSION_DEVELOPINUFRAW) $(am__append_1)
+INSTALL_DIR = $(EXTENSIONS_INSTALL_DIR)
+SOURCES = \
+ DevelopInUFRaw.cs
-addin_resources = \
- $(addin_manifest)
+RESOURCES = \
+ DevelopInUFRaw.addin.xml
-addin_references = \
- Mono.Posix
-addin_packages = \
- gtk-sharp-2.0
+# Initializers
+MONO_BASE_PATH =
+MONO_ADDINS_PATH =
-addin_extradist =
-ASSEMBLY = $(addin).dll
+# Install Paths
+DEFAULT_INSTALL_DIR = $(pkglibdir)
+BACKENDS_INSTALL_DIR = $(DEFAULT_INSTALL_DIR)/Backends
+EXTENSIONS_INSTALL_DIR = $(DEFAULT_INSTALL_DIR)/Extensions
DIR_DOCS = $(top_builddir)/docs
DIR_EXTENSIONS = $(top_builddir)/extensions
-DIR_GPHOTO2 = $(top_builddir)/lib/libgphoto2-sharp
DIR_ICONS = $(top_builddir)/icons
DIR_JPEGTRAN = $(top_builddir)/lib/libjpegtran
-DIR_KEYRING = $(top_builddir)/lib/gnome-keyring-sharp
DIR_LIBFSPOT = $(top_builddir)/lib/libfspot
DIR_SEMWEB = $(top_builddir)/lib/semweb
DIR_SRC = $(top_builddir)/src
DIR_GIOSHARP = $(top_builddir)/lib/gio-sharp/gio
DIR_GTKSHARPBEANS = $(top_builddir)/lib/gtk-sharp-beans
DIR_UNIQUESHARP = $(top_builddir)/lib/unique-sharp/unique
-LINK_KEYRING = -r:$(DIR_KEYRING)/gnome-keyring-sharp.dll
-LINK_GPHOTO2 = -r:$(DIR_GPHOTO2)/libgphoto2-sharp.dll
-LINK_SEMWEB = -r:$(DIR_SEMWEB)/SemWeb.dll
-LINK_GIOSHARP = -r:$(DIR_GIOSHARP)/gio-sharp.dll
-LINK_GTKSHARPBEANS = -r:$(DIR_GTKSHARPBEANS)/gtk-sharp-beans.dll
-LINK_UNIQUESHARP = -r:$(DIR_UNIQUESHARP)/unique-sharp.dll
-CSC_FLAGS = -debug
-CSC = $(MCS) $(CSC_FLAGS) -target:exe
-CSC_LIB = $(MCS) $(CSC_FLAGS) -target:library
-MONO_DEBUGFLAGS = --debug
-RUNTIME = mono $(MONO_DEBUGFLAGS)
-dep_resources = $(addprefix $(srcdir)/, $(addin_resources))
-build_resources = $(foreach res, $(dep_resources), $(addprefix -resource:, $(res)),$(notdir $(res)))
-build_sources = $(addprefix $(srcdir)/, $(addin_sources))
-build_packages = \
- $(addprefix -pkg:, $(addin_packages)) \
- -pkg:mono-addins
-
-build_references = \
- $(addprefix -r:, $(addin_references)) \
- -r:$(top_builddir)/src/f-spot.exe \
- -r:$(top_builddir)/src/Cms.dll \
- -r:$(top_builddir)/src/FSpot.Core.dll \
- -r:$(top_builddir)/src/FSpot.Platform.dll \
- -r:$(top_builddir)/src/FSpot.Query.dll \
- -r:$(top_builddir)/src/FSpot.Utils.dll \
- -r:$(top_builddir)/src/FSpot.Widgets.dll \
- $(LINK_SEMWEB) \
- $(LINK_GPHOTO2) \
- $(LINK_GIOSHARP) \
- $(LINK_UNIQUESHARP) \
- $(LINK_GTKSHARPBEANS)
-
-addin_SOURCES = \
- $(build_sources)
-
-addindir = $(pkglibdir)/extensions
-addin_DATA = $(ASSEMBLY)
-CLEANFILES = $(ASSEMBLY) $(ASSEMBLY).mdb *.mpack
-EXTRA_DIST = \
- $(build_sources) \
- $(dep_resources) \
- $(addin_extradist)
-
+DIR_BIN = $(top_builddir)/bin
+
+# External libraries to link against, generated from configure
+LINK_SYSTEM = -r:System
+LINK_SYSTEMDATA = -r:System.Data
+LINK_SYSTEM_WEB = -r:System.Web
+LINK_MONO_POSIX = -r:Mono.Posix
+LINK_MONO_CAIRO = -r:Mono.Cairo
+LINK_MONO_SIMD = -r:Mono.Simd
+LINK_MONODATA = -r:Mono.Data
+LINK_MONO_DATA_SQLITECLIENT = -r:Mono.Data.SqliteClient
+LINK_ICSHARP_ZIP_LIB = -r:ICSharpCode.SharpZipLib
+LINK_KEYRING = $(KEYRINGSHARP_LIBS)
+LINK_GLIB = $(GLIBSHARP_LIBS)
+LINK_GTK = $(GTKSHARP_LIBS)
+LINK_GNOME = $(GNOME_SHARP_LIBS)
+LINK_GCONF = $(GCONF_SHARP_LIBS)
+LINK_GLADE = -pkg:glade-sharp-2.0
+LINK_FLICKRNET = -pkg:flickrnet
+LINK_DBUS = $(NDESK_DBUS_LIBS) $(NDESK_DBUS_GLIB_LIBS)
+LINK_DBUS_NO_GLIB = $(NDESK_DBUS_LIBS)
+LINK_MONO_ADDINS_DEPS = $(MONO_ADDINS_LIBS)
+LINK_MONO_ADDINS_SETUP_DEPS = $(MONO_ADDINS_SETUP_LIBS)
+LINK_MONO_ADDINS_GUI_DEPS = $(MONO_ADDINS_GUI_LIBS)
+
+# GIO
+REF_GIO =
+LINK_GIO = -r:$(DIR_GIOSHARP)/gio-sharp.dll
+LINK_GIO_DEPS = $(REF_GIO) $(LINK_GIO)
+
+# Gtk Beans
+REF_GTK_BEANS = $(LINK_GIO_DEPS)
+LINK_GTK_BEANS = -r:$(DIR_GTKSHARPBEANS)/gtk-sharp-beans.dll
+LINK_GTK_BEANS_DEPS = $(REF_GTK_BEANS) $(LINK_GTK_BEANS)
+
+# Uniqe
+REF_UNIQUE =
+LINK_UNIQUE = -r:$(DIR_UNIQUESHARP)/unique-sharp.dll
+LINK_UNIQUE_DEPS = $(REF_UNIQUE) $(LINK_UNIQUE)
+
+# Hyena
+REF_HYENA = $(LINK_SYSTEM) $(LINK_MONO_POSIX)
+LINK_HYENA = -r:$(DIR_BIN)/Hyena.dll
+LINK_HYENA_DEPS = $(REF_HYENA) $(LINK_HYENA)
+
+# Semweb
+REF_SEMWEB = $(LINK_SYSTEMDATA) $(LINK_HYENA_DEPS)
+LINK_SEMWEB = -r:$(DIR_BIN)/SemWeb.dll
+LINK_SEMWEB_DEPS = $(REF_SEMWEB) $(LINK_SEMWEB)
+
+# Hyena.Data.Sqlite
+REF_HYENA_DATA_SQLITE = $(LINK_SQLITE)
+LINK_HYENA_DATA_SQLITE = -r:$(DIR_BIN)/Hyena.Data.Sqlite.dll
+LINK_HYENA_DATA_SQLITE_DEPS = $(REF_HYENA_DATA_SQLITE) $(LINK_HYENA_DATA_SQLITE)
+
+# Hyena.Gui
+REF_HYENA_GUI = $(LINK_HYENA_DEPS)
+LINK_HYENA_GUI = -r:$(DIR_BIN)/Hyena.Gui.dll
+LINK_HENA_GUI_DEPS = $(REF_HYENA_GUI) $(LINK_HYENA_GUI)
+
+# FSpot.Cms
+REF_FSPOT_CMS = $(LINK_GTK)
+LINK_FSPOT_CMS = -r:$(DIR_BIN)/FSpot.Cms.dll
+LINK_FSPOT_CMS_DEPS = $(REF_FSPOT_CMS) $(LINK_FSPOT_CMS)
+
+# FSpot.Utils
+REF_FSPOT_UTILS = $(LINK_HYENA_DEPS) $(LINK_GTK) $(LINK_GIO) $(LINK_MONO_CAIRO)
+LINK_FSPOT_UTILS = -r:$(DIR_BIN)/FSpot.Utils.dll
+LINK_FSPOT_UTILS_DEPS = $(REF_FSPOT_UTILS) $(LINK_FSPOT_UTILS)
+
+# FSpot.Core
+REF_FSPOT_CORE = $(LINK_FSPOT_UTILS_DEPS) $(LINK_FSPOT_CMS_DEPS)
+LINK_FSPOT_CORE = -r:$(DIR_BIN)/FSpot.Core.dll
+LINK_FSPOT_CORE_DEPS = $(REF_FSPOT_CORE) $(LINK_FSPOT_CORE)
+
+# FSpot.Query
+REF_FSPOT_QUERY = $(LINK_FSPOT_CORE_DEPS)
+LINK_FSPOT_QUERY = -r:$(DIR_BIN)/FSpot.Query.dll
+LINK_FSPOT_QUERY_DEPS = $(REF_FSPOT_QUERY) $(LINK_FSPOT_QUERY)
+
+# FSpot.JobScheduler
+REF_FSPOT_JOB_SCHEDULER = $(LINK_HYENA_DEPS)
+LINK_FSPOT_JOB_SCHEDULER = -r:$(DIR_BIN)/FSpot.JobScheduler.dll
+LINK_FSPOT_JOB_SCHEDULER_DEPS = $(REF_FSPOT_JOB_SCHEDULER) $(LINK_FSPOT_JOB_SCHEDULER)
+
+# FSpot.Bling
+REF_FSPOT_BLING = $(LINK_GTK_BEANS_DEPS) $(LINK_GLIB)
+LINK_FSPOT_BLING = -r:$(DIR_BIN)/FSpot.Bling.dll
+LINK_FSPOT_BLING_DEPS = $(REF_FSPOT_BLING) $(LINK_FSPOT_BLING)
+
+# FSpot.Platform
+REF_FSPOT_PLATFORM = $(LINK_GCONF) $(LINK_GTK) $(LINK_FSPOT_CORE_DEPS) $(LINK_DBUS)
+LINK_FSPOT_PLATFORM = -r:$(DIR_BIN)/FSpot.Platform.dll
+LINK_FSPOT_PLATFORM_DEPS = $(REF_FSPOT_PLATFORM) $(LINK_FSPOT_PLATFORM)
+
+# FSpot.Widgets
+REF_FSPOT_WIDGETS = $(LINK_FSPOT_CORE_DEPS) $(LINK_FSPOT_BLING_DEPS)
+LINK_FSPOT_WIDGETS = -r:$(DIR_BIN)/FSpot.Widgets.dll
+LINK_FSPOT_WIDGETS_DEPS = $(REF_FSPOT_WIDGETS) $(LINK_FSPOT_WIDGETS)
+
+# FSpot (executable)
+REF_FSPOT = $(LINK_FSPOT_WIDGETS_DEPS) $(LINK_FSPOT_PLATFORM_DEPS) $(LINK_FSPOT_QUERY_DEPS) \
+ $(LINK_GLIB) $(LINK_MONO_ADDINS_DEPS) $(LINK_UNIQUE_DEPS) $(LINK_MONO_ADDINS_SETUP_DEPS) \
+ $(LINK_SEMWEB_DEPS) $(LINK_GLADE) $(LINK_MONODATA) $(LINK_MONO_DATA_SQLITECLIENT) \
+ $(LINK_MONO_ADDINS_GUI_DEPS) $(LINK_FSPOT_JOB_SCHEDULER_DEPS) $(LINK_ICSHARP_ZIP_LIB) \
+ $(LINK_GNOME)
+
+# FIXME: do not link executables
+LINK_FSPOT = -r:$(DIR_BIN)/f-spot.exe
+LINK_FSPOT_DEPS = $(REF_FSPOT) $(LINK_FSPOT)
+
+# Extensions
+REF_FSPOT_EXTENSION_BLACKOUTEDITOR = $(LINK_FSPOT_DEPS)
+REF_FSPOT_EXTENSION_BWEDITOR = $(LINK_FSPOT_DEPS) $(LINK_MONO_SIMD)
+REF_FSPOT_EXTENSION_FLIPEDITOR = $(LINK_FSPOT_DEPS)
+REF_FSPOT_EXTENSION_PIXELATEEDITOR = $(LINK_FSPOT_DEPS)
+REF_FSPOT_EXTENSION_RESIZEEDITOR = $(LINK_FSPOT_DEPS)
+REF_FSPOT_EXTENSION_CDEXPORT = $(LINK_FSPOT_DEPS)
+REF_FSPOT_EXTENSION_FACEBOOKEXPORT = $(LINK_FSPOT_DEPS) $(LINK_KEYRING)
+REF_FSPOT_EXTENSION_FLICKREXPORT = $(LINK_FSPOT_DEPS) $(LINK_FLICKRNET)
+REF_FSPOT_EXTENSION_FOLDEREXPORT = $(LINK_FSPOT_DEPS) $(LINK_SYSTEM_WEB)
+REF_FSPOT_EXTENSION_GALLERYEXPORT = $(LINK_FSPOT_DEPS)
+REF_MONO_GOOGLE = $(LINK_HYENA_DEPS)
+LINK_MONO_GOOGLE = -r:$(DIR_BIN)/Mono.Google.dll
+LINK_MONO_GOOGLE_DEPS = $(REF_MONO_GOOGLE) $(LINK_MONO_GOOGLE)
+REF_FSPOT_EXTENSION_PICASAWEBEXPORT = $(LINK_FSPOT_DEPS) $(LINK_MONO_GOOGLE) $(LINK_KEYRING)
+REF_SMUGMUGNET = $(LINK_FSPOT_DEPS)
+LINK_SMUGMUGNET = -r:$(DIR_BIN)/SmugMugNet.dll
+LINK_SMUGMUGNET_DEPS = $(REF_SMUGMUGNET) $(LINK_SMUGMUGNET)
+REF_FSPOT_EXTENSION_SMUGMUGEXPORT = $(LINK_SMUGMUGNET_DEPS) $(LINK_KEYRING)
+REF_MONO_TABBLO = $(LINK_HYENA_DEPS)
+LINK_MONO_TABBLO = -r:$(DIR_BIN)/Mono.Tabblo.dll
+LINK_MONO_TABBLO_DEPS = $(REF_MONO_TABBLO) $(LINK_MONO_TABBLO)
+REF_FSPOT_EXTENSION_TABBLOEXPORT = $(LINK_FSPOT_DEPS) $(LINK_KEYRING) $(LINK_MONO_TABBLO_DEPS)
+REF_FSPOT_EXTENSION_ZIPEXPORT = $(LINK_FSPOT_DEPS)
+REF_FSPOT_EXTENSION_CHANGEPHOTOPATH = $(LINK_FSPOT_DEPS)
+REF_FSPOT_EXTENSION_DEVELOPINUFRAW = $(LINK_FSPOT_DEPS)
+REF_FSPOT_EXTENSION_HASHJOB = $(LINK_FSPOT_DEPS)
+REF_FSPOT_EXTENSION_LIVEWEBGALLERY = $(LINK_FSPOT_DEPS)
+REF_FSPOT_EXTENSION_MERGEDB = $(LINK_FSPOT_DEPS)
+REF_FSPOT_EXTENSION_RAWPLUSJPEG = $(LINK_FSPOT_DEPS)
+REF_FSPOT_EXTENSION_RETROACTIVEROLL = $(LINK_FSPOT_DEPS)
+REF_FSPOT_EXTENSION_SCREENSAVERCONFIG = $(LINK_FSPOT_DEPS)
+REF_FSPOT_EXTENSION_COVERTRANSITION = $(LINK_FSPOT_DEPS)
+
+# Cute hack to replace a space with something
+colon := :
+empty :=
+space := $(empty) $(empty)
+
+# Build path to allow running uninstalled
+RUN_PATH = $(subst $(space),$(colon), $(MONO_BASE_PATH))
+UNIQUE_FILTER_PIPE = tr [:space:] \\n | sort | uniq
+BUILD_DATA_DIR = $(top_builddir)/bin/share/$(PACKAGE)
+
+# Since all other attempts failed, we currently go this way:
+# This code adds the file specified in ASSEMBLY_INFO_SOURCE to SOURCES_BUILD.
+# If no such file is specified, the default AssemblyInfo.cs is used.
+ASSEMBLY_INFO_SOURCE_REAL = \
+ $(shell if [ "$(ASSEMBLY_INFO_SOURCE)" ]; \
+ then \
+ echo "$(addprefix $(srcdir)/, $(ASSEMBLY_INFO_SOURCE))"; \
+ else \
+ echo "$(top_srcdir)/src/AssemblyInfo.cs"; \
+ fi)
+
+SOURCES_BUILD = $(addprefix $(srcdir)/, $(SOURCES)) \
+ $(ASSEMBLY_INFO_SOURCE_REAL)
+RESOURCES_EXPANDED = $(addprefix $(srcdir)/, $(RESOURCES))
+RESOURCES_BUILD = $(foreach resource, $(RESOURCES_EXPANDED), \
+ -resource:$(resource),$(notdir $(resource)))
+
+INSTALL_ICONS = $(top_srcdir)/build/private-icon-theme-installer "$(mkinstalldirs)" "$(INSTALL_DATA)"
+THEME_ICONS_SOURCE = $(wildcard $(srcdir)/ThemeIcons/*/*/*.png) $(wildcard $(srcdir)/ThemeIcons/scalable/*/*.svg)
+THEME_ICONS_RELATIVE = $(subst $(srcdir)/ThemeIcons/, , $(THEME_ICONS_SOURCE))
+ASSEMBLY_EXTENSION = $(strip $(patsubst library, dll, $(TARGET)))
+ASSEMBLY_FILE = $(top_builddir)/bin/$(ASSEMBLY).$(ASSEMBLY_EXTENSION)
+INSTALL_DIR_RESOLVED = $(firstword $(subst , $(DEFAULT_INSTALL_DIR), $(INSTALL_DIR)))
+ at ENABLE_TESTS_TRUE@ENABLE_TESTS_FLAG = "-define:ENABLE_TESTS"
+ at ENABLE_ATK_TRUE@ENABLE_ATK_FLAG = "-define:ENABLE_ATK"
+FILTERED_LINK = $(shell echo "$(LINK)" | $(UNIQUE_FILTER_PIPE))
+DEP_LINK = $(shell echo "$(LINK)" | $(UNIQUE_FILTER_PIPE) | sed s,-r:,,g | grep '$(top_builddir)/bin/')
+OUTPUT_FILES = \
+ $(ASSEMBLY_FILE) \
+ $(ASSEMBLY_FILE).mdb
+
+moduledir = $(INSTALL_DIR_RESOLVED)
+module_SCRIPTS = $(OUTPUT_FILES)
+EXTRA_DIST = $(SOURCES_BUILD) $(RESOURCES_EXPANDED) $(THEME_ICONS_SOURCE)
+CLEANFILES = $(OUTPUT_FILES) $(ASSEMBLY_FILE).config
+DISTCLEANFILES = *.pidb
+MAINTAINERCLEANFILES = Makefile.in
all: all-am
.SUFFIXES:
-$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(top_srcdir)/Makefile.addins $(top_srcdir)/Makefile.include $(am__configure_deps)
+$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(top_srcdir)/build/build.mk $(top_srcdir)/build/build.environment.mk $(top_srcdir)/build/build.rules.mk $(am__configure_deps)
@for dep in $?; do \
case '$(am__configure_deps)' in \
*$$dep*) \
@@ -389,32 +559,46 @@ $(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps)
$(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps)
cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
$(am__aclocal_m4_deps):
+install-moduleSCRIPTS: $(module_SCRIPTS)
+ @$(NORMAL_INSTALL)
+ test -z "$(moduledir)" || $(MKDIR_P) "$(DESTDIR)$(moduledir)"
+ @list='$(module_SCRIPTS)'; test -n "$(moduledir)" || list=; \
+ for p in $$list; do \
+ if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \
+ if test -f "$$d$$p"; then echo "$$d$$p"; echo "$$p"; else :; fi; \
+ done | \
+ sed -e 'p;s,.*/,,;n' \
+ -e 'h;s|.*|.|' \
+ -e 'p;x;s,.*/,,;$(transform)' | sed 'N;N;N;s,\n, ,g' | \
+ $(AWK) 'BEGIN { files["."] = ""; dirs["."] = 1; } \
+ { d=$$3; if (dirs[d] != 1) { print "d", d; dirs[d] = 1 } \
+ if ($$2 == $$4) { files[d] = files[d] " " $$1; \
+ if (++n[d] == $(am__install_max)) { \
+ print "f", d, files[d]; n[d] = 0; files[d] = "" } } \
+ else { print "f", d "/" $$4, $$1 } } \
+ END { for (d in files) print "f", d, files[d] }' | \
+ while read type dir files; do \
+ if test "$$dir" = .; then dir=; else dir=/$$dir; fi; \
+ test -z "$$files" || { \
+ echo " $(INSTALL_SCRIPT) $$files '$(DESTDIR)$(moduledir)$$dir'"; \
+ $(INSTALL_SCRIPT) $$files "$(DESTDIR)$(moduledir)$$dir" || exit $$?; \
+ } \
+ ; done
+
+uninstall-moduleSCRIPTS:
+ @$(NORMAL_UNINSTALL)
+ @list='$(module_SCRIPTS)'; test -n "$(moduledir)" || exit 0; \
+ files=`for p in $$list; do echo "$$p"; done | \
+ sed -e 's,.*/,,;$(transform)'`; \
+ test -n "$$list" || exit 0; \
+ echo " ( cd '$(DESTDIR)$(moduledir)' && rm -f" $$files ")"; \
+ cd "$(DESTDIR)$(moduledir)" && rm -f $$files
mostlyclean-libtool:
-rm -f *.lo
clean-libtool:
-rm -rf .libs _libs
-install-addinDATA: $(addin_DATA)
- @$(NORMAL_INSTALL)
- test -z "$(addindir)" || $(MKDIR_P) "$(DESTDIR)$(addindir)"
- @list='$(addin_DATA)'; test -n "$(addindir)" || list=; \
- for p in $$list; do \
- if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \
- echo "$$d$$p"; \
- done | $(am__base_list) | \
- while read files; do \
- echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(addindir)'"; \
- $(INSTALL_DATA) $$files "$(DESTDIR)$(addindir)" || exit $$?; \
- done
-
-uninstall-addinDATA:
- @$(NORMAL_UNINSTALL)
- @list='$(addin_DATA)'; test -n "$(addindir)" || list=; \
- files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \
- test -n "$$files" || exit 0; \
- echo " ( cd '$(DESTDIR)$(addindir)' && rm -f" $$files ")"; \
- cd "$(DESTDIR)$(addindir)" && rm -f $$files
tags: TAGS
TAGS:
@@ -454,9 +638,9 @@ distdir: $(DISTFILES)
done
check-am: all-am
check: check-am
-all-am: Makefile $(DATA)
+all-am: Makefile $(SCRIPTS)
installdirs:
- for dir in "$(DESTDIR)$(addindir)"; do \
+ for dir in "$(DESTDIR)$(moduledir)"; do \
test -z "$$dir" || $(MKDIR_P) "$$dir"; \
done
install: install-am
@@ -481,10 +665,12 @@ clean-generic:
distclean-generic:
-test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
-test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES)
+ -test -z "$(DISTCLEANFILES)" || rm -f $(DISTCLEANFILES)
maintainer-clean-generic:
@echo "This command is intended for maintainers to use"
@echo "it deletes files that may require special tools to rebuild."
+ -test -z "$(MAINTAINERCLEANFILES)" || rm -f $(MAINTAINERCLEANFILES)
clean: clean-am
clean-am: clean-generic clean-libtool mostlyclean-am
@@ -505,7 +691,7 @@ info: info-am
info-am:
-install-data-am: install-addinDATA
+install-data-am: install-data-local install-moduleSCRIPTS
install-dvi: install-dvi-am
@@ -549,28 +735,72 @@ ps: ps-am
ps-am:
-uninstall-am: uninstall-addinDATA
+uninstall-am: uninstall-local uninstall-moduleSCRIPTS
.MAKE: install-am install-strip
.PHONY: all all-am check check-am clean clean-generic clean-libtool \
distclean distclean-generic distclean-libtool distdir dvi \
- dvi-am html html-am info info-am install install-addinDATA \
- install-am install-data install-data-am install-dvi \
+ dvi-am html html-am info info-am install install-am \
+ install-data install-data-am install-data-local 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-generic mostlyclean-libtool pdf pdf-am ps ps-am \
- uninstall uninstall-addinDATA uninstall-am
-
-
-mpack: $(ASSEMBLY)
- mautil p $(ASSEMBLY)
-
-$(ASSEMBLY): $(addin_SOURCES) $(dep_resources)
- $(CSC_LIB) -out:$@ $(addin_extraflags) $(build_sources) $(build_references) $(build_packages) $(build_resources)
+ install-moduleSCRIPTS install-pdf install-pdf-am install-ps \
+ install-ps-am install-strip installcheck installcheck-am \
+ installdirs maintainer-clean maintainer-clean-generic \
+ mostlyclean mostlyclean-generic mostlyclean-libtool pdf pdf-am \
+ ps ps-am uninstall uninstall-am uninstall-local \
+ uninstall-moduleSCRIPTS
+
+
+all: $(ASSEMBLY_FILE) theme-icons
+
+run:
+ @pushd $(top_builddir); \
+ make run; \
+ popd;
+
+# uncommented for now.
+# tests are currently excuted from Makefile in $(top_builddir)
+#test:
+# @pushd $(top_builddir)/tests; \
+# make $(ASSEMBLY); \
+# popd;
+
+build-debug:
+ @echo $(DEP_LINK)
+
+$(ASSEMBLY_FILE).mdb: $(ASSEMBLY_FILE)
+
+$(ASSEMBLY_FILE): $(SOURCES_BUILD) $(RESOURCES_EXPANDED) $(DEP_LINK)
+ @mkdir -p $(top_builddir)/bin
+ @if [ ! "x$(ENABLE_RELEASE)" = "xyes" ]; then \
+ $(top_srcdir)/build/dll-map-makefile-verifier $(srcdir)/Makefile.am $(srcdir)/$(notdir $@.config) && \
+ $(MONO) $(top_builddir)/build/dll-map-verifier.exe $(srcdir)/$(notdir $@.config) -iwinmm -ilibbanshee -ilibbnpx11 -ilibc -ilibc.so.6 -iintl -ilibmtp.dll -ilibigemacintegration.dylib -iCFRelease $(SOURCES_BUILD); \
+ fi;
+ $(MCS) \
+ $(GMCS_FLAGS) \
+ $(ASSEMBLY_BUILD_FLAGS) \
+ -nowarn:0278 -nowarn:0078 $$warn \
+ -define:HAVE_GTK_2_10 -define:NET_2_0 \
+ -debug -target:$(TARGET) -out:$@ \
+ $(BUILD_DEFINES) $(ENABLE_TESTS_FLAG) $(ENABLE_ATK_FLAG) \
+ $(FILTERED_LINK) $(RESOURCES_BUILD) $(SOURCES_BUILD)
+ @if [ -e $(srcdir)/$(notdir $@.config) ]; then \
+ cp $(srcdir)/$(notdir $@.config) $(top_builddir)/bin; \
+ fi;
+ @if [ ! -z "$(EXTRA_BUNDLE)" ]; then \
+ cp $(EXTRA_BUNDLE) $(top_builddir)/bin; \
+ fi;
+
+theme-icons: $(THEME_ICONS_SOURCE)
+ @$(INSTALL_ICONS) -il "$(BUILD_DATA_DIR)" "$(srcdir)" $(THEME_ICONS_RELATIVE)
+
+install-data-local: $(THEME_ICONS_SOURCE)
+ @$(INSTALL_ICONS) -i "$(DESTDIR)$(pkgdatadir)" "$(srcdir)" $(THEME_ICONS_RELATIVE)
+
+uninstall-local: $(THEME_ICONS_SOURCE)
+ @$(INSTALL_ICONS) -u "$(DESTDIR)$(pkgdatadir)" "$(srcdir)" $(THEME_ICONS_RELATIVE)
# 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/extensions/Tools/HashJob/HashJob.cs b/extensions/Tools/HashJob/HashJob.cs
index 477aa0b..2f36fe7 100644
--- a/extensions/Tools/HashJob/HashJob.cs
+++ b/extensions/Tools/HashJob/HashJob.cs
@@ -36,9 +36,9 @@ namespace HashJobExtension {
{
// This query is not very fast, but it's a 'one-time' so don't care much...
SqliteDataReader reader = FSpot.App.Instance.Database.Database.Query (
- "SELECT COUNT(*) FROM photos p WHERE md5_sum IS NULL OR md5_sum = '' OR EXISTS " +
- "(SELECT * FROM photo_versions pv WHERE p.id=pv.photo_id AND version_id <> '1' AND " +
- "(pv.md5_sum IS NULL OR pv.md5_sum = ''))");
+ "SELECT COUNT(*) FROM photos p WHERE EXISTS " +
+ "(SELECT * FROM photo_versions pv WHERE p.id=pv.photo_id AND " +
+ "(pv.import_md5 IS NULL OR pv.import_md5 = ''))");
reader.Read ();
uint missing_md5 = Convert.ToUInt32 (reader[0]);
reader.Close ();
@@ -91,9 +91,9 @@ namespace HashJobExtension {
void HandleExecuteClicked (object o, EventArgs e)
{
SqliteDataReader reader = FSpot.App.Instance.Database.Database.Query (
- "SELECT id FROM photos p WHERE md5_sum IS NULL OR md5_sum = '' OR EXISTS " +
- "(SELECT * FROM photo_versions pv WHERE p.id=pv.photo_id AND version_id <> '1' AND " +
- "(pv.md5_sum IS NULL OR pv.md5_sum = '') )");
+ "SELECT id FROM photos p WHERE EXISTS " +
+ "(SELECT * FROM photo_versions pv WHERE p.id=pv.photo_id AND " +
+ "(pv.import_md5 IS NULL OR pv.import_md5 = '') )");
FSpot.App.Instance.Database.Database.BeginTransaction ();
while (reader.Read ())
FSpot.Jobs.CalculateHashJob.Create (FSpot.App.Instance.Database.Jobs, Convert.ToUInt32 (reader[0]));
diff --git a/extensions/Tools/HashJob/Makefile.am b/extensions/Tools/HashJob/Makefile.am
index b936065..051c1f2 100644
--- a/extensions/Tools/HashJob/Makefile.am
+++ b/extensions/Tools/HashJob/Makefile.am
@@ -1,20 +1,9 @@
-addin = HashJob
+ASSEMBLY = FSpot.Exporters.HashJob
+TARGET = library
+LINK = $(REF_FSPOT_EXTENSION_HASHJOB)
+INSTALL_DIR = $(EXTENSIONS_INSTALL_DIR)
-addin_manifest = $(addin).addin.xml
+SOURCES = HashJob.cs
+RESOURCES = HashJob.addin.xml
-addin_sources = \
- $(addin).cs
-
-addin_resources = \
- $(addin_manifest)
-
-addin_references = \
- Mono.Posix \
- Mono.Data.SqliteClient
-
-addin_packages = \
- gtk-sharp-2.0
-
-addin_extra_dist =
-
-include $(top_srcdir)/Makefile.addins
+include $(top_srcdir)/build/build.mk
diff --git a/extensions/Tools/HashJob/Makefile.in b/extensions/Tools/HashJob/Makefile.in
index 59cfe81..2e731d5 100644
--- a/extensions/Tools/HashJob/Makefile.in
+++ b/extensions/Tools/HashJob/Makefile.in
@@ -35,13 +35,22 @@ POST_UNINSTALL = :
build_triplet = @build@
host_triplet = @host@
DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in \
- $(top_srcdir)/Makefile.addins $(top_srcdir)/Makefile.include
+ $(top_srcdir)/build/build.environment.mk \
+ $(top_srcdir)/build/build.mk \
+ $(top_srcdir)/build/build.rules.mk
+ at ENABLE_TESTS_TRUE@am__append_1 = " $(NUNIT_LIBS)"
subdir = extensions/Tools/HashJob
ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
am__aclocal_m4_deps = $(top_srcdir)/build/m4/shave/shave.m4 \
$(top_srcdir)/build/m4/shamrock/expansions.m4 \
+ $(top_srcdir)/build/m4/shamrock/gnome-doc.m4 \
$(top_srcdir)/build/m4/shamrock/mono.m4 \
+ $(top_srcdir)/build/m4/shamrock/nunit.m4 \
$(top_srcdir)/build/m4/shamrock/programs.m4 \
+ $(top_srcdir)/build/m4/f-spot/flickrnet.m4 \
+ $(top_srcdir)/build/m4/f-spot/gnome-keyring-sharp.m4 \
+ $(top_srcdir)/build/m4/f-spot/gtk-sharp.m4 \
+ $(top_srcdir)/build/m4/f-spot/mono-addins.m4 \
$(top_srcdir)/acinclude.m4 $(top_srcdir)/configure.ac
am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
$(ACLOCAL_M4)
@@ -49,8 +58,6 @@ mkinstalldirs = $(install_sh) -d
CONFIG_HEADER = $(top_builddir)/config.h
CONFIG_CLEAN_FILES =
CONFIG_CLEAN_VPATH_FILES =
-SOURCES =
-DIST_SOURCES =
am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`;
am__vpath_adj = case $$p in \
$(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \
@@ -72,8 +79,9 @@ am__nobase_list = $(am__nobase_strip_setup); \
am__base_list = \
sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \
sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g'
-am__installdirs = "$(DESTDIR)$(addindir)"
-DATA = $(addin_DATA)
+am__installdirs = "$(DESTDIR)$(moduledir)"
+SCRIPTS = $(module_SCRIPTS)
+DIST_SOURCES =
DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
ACLOCAL = @ACLOCAL@
ACLOCAL_AMFLAGS = @ACLOCAL_AMFLAGS@
@@ -119,6 +127,8 @@ EXIF_SOVERSION = @EXIF_SOVERSION@
F77 = @F77@
FC = @FC@
FGREP = @FGREP@
+FLICKRNET_CFLAGS = @FLICKRNET_CFLAGS@
+FLICKRNET_LIBS = @FLICKRNET_LIBS@
F_CFLAGS = @F_CFLAGS@
F_LIBS = @F_LIBS@
GAPI2CODEGEN = @GAPI2CODEGEN@
@@ -132,6 +142,8 @@ GCONF_SHARP_LIBS = @GCONF_SHARP_LIBS@
GETTEXT_PACKAGE = @GETTEXT_PACKAGE@
GIO_CFLAGS = @GIO_CFLAGS@
GIO_LIBS = @GIO_LIBS@
+GLIBSHARP_2_12_7_CFLAGS = @GLIBSHARP_2_12_7_CFLAGS@
+GLIBSHARP_2_12_7_LIBS = @GLIBSHARP_2_12_7_LIBS@
GLIBSHARP_CFLAGS = @GLIBSHARP_CFLAGS@
GLIBSHARP_LIBS = @GLIBSHARP_LIBS@
GLIB_CFLAGS = @GLIB_CFLAGS@
@@ -147,6 +159,10 @@ GNOME_SHARP_CFLAGS = @GNOME_SHARP_CFLAGS@
GNOME_SHARP_LIBS = @GNOME_SHARP_LIBS@
GOBJECT_QUERY = @GOBJECT_QUERY@
GREP = @GREP@
+GTKSHARP_A11Y_CFLAGS = @GTKSHARP_A11Y_CFLAGS@
+GTKSHARP_A11Y_LIBS = @GTKSHARP_A11Y_LIBS@
+GTKSHARP_CFLAGS = @GTKSHARP_CFLAGS@
+GTKSHARP_LIBS = @GTKSHARP_LIBS@
HELP_DIR = @HELP_DIR@
ICONS_DIRECTORY = @ICONS_DIRECTORY@
INSTALL = @INSTALL@
@@ -160,14 +176,14 @@ INTLTOOL_EXTRACT = @INTLTOOL_EXTRACT@
INTLTOOL_MERGE = @INTLTOOL_MERGE@
INTLTOOL_PERL = @INTLTOOL_PERL@
INTLTOOL_UPDATE = @INTLTOOL_UPDATE@
+KEYRINGSHARP_CFLAGS = @KEYRINGSHARP_CFLAGS@
+KEYRINGSHARP_LIBS = @KEYRINGSHARP_LIBS@
LCMS_CFLAGS = @LCMS_CFLAGS@
LCMS_LIBS = @LCMS_LIBS@
LD = @LD@
LDFLAGS = @LDFLAGS@
LIBEXIF_VERSION_CHECK_CFLAGS = @LIBEXIF_VERSION_CHECK_CFLAGS@
LIBEXIF_VERSION_CHECK_LIBS = @LIBEXIF_VERSION_CHECK_LIBS@
-LIBGPHOTO2_CFLAGS = @LIBGPHOTO2_CFLAGS@
-LIBGPHOTO2_LIBS = @LIBGPHOTO2_LIBS@
LIBJPEG = @LIBJPEG@
LIBOBJS = @LIBOBJS@
LIBS = @LIBS@
@@ -182,6 +198,12 @@ MCS = @MCS@
MKDIR_P = @MKDIR_P@
MKINSTALLDIRS = @MKINSTALLDIRS@
MONO = @MONO@
+MONO_ADDINS_CFLAGS = @MONO_ADDINS_CFLAGS@
+MONO_ADDINS_GUI_CFLAGS = @MONO_ADDINS_GUI_CFLAGS@
+MONO_ADDINS_GUI_LIBS = @MONO_ADDINS_GUI_LIBS@
+MONO_ADDINS_LIBS = @MONO_ADDINS_LIBS@
+MONO_ADDINS_SETUP_CFLAGS = @MONO_ADDINS_SETUP_CFLAGS@
+MONO_ADDINS_SETUP_LIBS = @MONO_ADDINS_SETUP_LIBS@
MONO_MODULE_CFLAGS = @MONO_MODULE_CFLAGS@
MONO_MODULE_LIBS = @MONO_MODULE_LIBS@
MSGFMT = @MSGFMT@
@@ -192,7 +214,6 @@ NDESK_DBUS_LIBS = @NDESK_DBUS_LIBS@
NM = @NM@
NMEDIT = @NMEDIT@
NUNIT_CFLAGS = @NUNIT_CFLAGS@
-NUNIT_DEFINES = @NUNIT_DEFINES@
NUNIT_LIBS = @NUNIT_LIBS@
OBJC = @OBJC@
OBJDUMP = @OBJDUMP@
@@ -284,83 +305,227 @@ target_alias = @target_alias@
top_build_prefix = @top_build_prefix@
top_builddir = @top_builddir@
top_srcdir = @top_srcdir@
-addin = HashJob
-addin_manifest = $(addin).addin.xml
-addin_sources = \
- $(addin).cs
-
-addin_resources = \
- $(addin_manifest)
-
-addin_references = \
- Mono.Posix \
- Mono.Data.SqliteClient
-
-addin_packages = \
- gtk-sharp-2.0
-
-addin_extra_dist =
-ASSEMBLY = $(addin).dll
+ASSEMBLY = FSpot.Exporters.HashJob
+TARGET = library
+LINK = $(REF_FSPOT_EXTENSION_HASHJOB) $(am__append_1)
+INSTALL_DIR = $(EXTENSIONS_INSTALL_DIR)
+SOURCES = HashJob.cs
+RESOURCES = HashJob.addin.xml
+
+# Initializers
+MONO_BASE_PATH =
+MONO_ADDINS_PATH =
+
+# Install Paths
+DEFAULT_INSTALL_DIR = $(pkglibdir)
+BACKENDS_INSTALL_DIR = $(DEFAULT_INSTALL_DIR)/Backends
+EXTENSIONS_INSTALL_DIR = $(DEFAULT_INSTALL_DIR)/Extensions
DIR_DOCS = $(top_builddir)/docs
DIR_EXTENSIONS = $(top_builddir)/extensions
-DIR_GPHOTO2 = $(top_builddir)/lib/libgphoto2-sharp
DIR_ICONS = $(top_builddir)/icons
DIR_JPEGTRAN = $(top_builddir)/lib/libjpegtran
-DIR_KEYRING = $(top_builddir)/lib/gnome-keyring-sharp
DIR_LIBFSPOT = $(top_builddir)/lib/libfspot
DIR_SEMWEB = $(top_builddir)/lib/semweb
DIR_SRC = $(top_builddir)/src
DIR_GIOSHARP = $(top_builddir)/lib/gio-sharp/gio
DIR_GTKSHARPBEANS = $(top_builddir)/lib/gtk-sharp-beans
DIR_UNIQUESHARP = $(top_builddir)/lib/unique-sharp/unique
-LINK_KEYRING = -r:$(DIR_KEYRING)/gnome-keyring-sharp.dll
-LINK_GPHOTO2 = -r:$(DIR_GPHOTO2)/libgphoto2-sharp.dll
-LINK_SEMWEB = -r:$(DIR_SEMWEB)/SemWeb.dll
-LINK_GIOSHARP = -r:$(DIR_GIOSHARP)/gio-sharp.dll
-LINK_GTKSHARPBEANS = -r:$(DIR_GTKSHARPBEANS)/gtk-sharp-beans.dll
-LINK_UNIQUESHARP = -r:$(DIR_UNIQUESHARP)/unique-sharp.dll
-CSC_FLAGS = -debug
-CSC = $(MCS) $(CSC_FLAGS) -target:exe
-CSC_LIB = $(MCS) $(CSC_FLAGS) -target:library
-MONO_DEBUGFLAGS = --debug
-RUNTIME = mono $(MONO_DEBUGFLAGS)
-dep_resources = $(addprefix $(srcdir)/, $(addin_resources))
-build_resources = $(foreach res, $(dep_resources), $(addprefix -resource:, $(res)),$(notdir $(res)))
-build_sources = $(addprefix $(srcdir)/, $(addin_sources))
-build_packages = \
- $(addprefix -pkg:, $(addin_packages)) \
- -pkg:mono-addins
-
-build_references = \
- $(addprefix -r:, $(addin_references)) \
- -r:$(top_builddir)/src/f-spot.exe \
- -r:$(top_builddir)/src/Cms.dll \
- -r:$(top_builddir)/src/FSpot.Core.dll \
- -r:$(top_builddir)/src/FSpot.Platform.dll \
- -r:$(top_builddir)/src/FSpot.Query.dll \
- -r:$(top_builddir)/src/FSpot.Utils.dll \
- -r:$(top_builddir)/src/FSpot.Widgets.dll \
- $(LINK_SEMWEB) \
- $(LINK_GPHOTO2) \
- $(LINK_GIOSHARP) \
- $(LINK_UNIQUESHARP) \
- $(LINK_GTKSHARPBEANS)
-
-addin_SOURCES = \
- $(build_sources)
-
-addindir = $(pkglibdir)/extensions
-addin_DATA = $(ASSEMBLY)
-CLEANFILES = $(ASSEMBLY) $(ASSEMBLY).mdb *.mpack
-EXTRA_DIST = \
- $(build_sources) \
- $(dep_resources) \
- $(addin_extradist)
-
+DIR_BIN = $(top_builddir)/bin
+
+# External libraries to link against, generated from configure
+LINK_SYSTEM = -r:System
+LINK_SYSTEMDATA = -r:System.Data
+LINK_SYSTEM_WEB = -r:System.Web
+LINK_MONO_POSIX = -r:Mono.Posix
+LINK_MONO_CAIRO = -r:Mono.Cairo
+LINK_MONO_SIMD = -r:Mono.Simd
+LINK_MONODATA = -r:Mono.Data
+LINK_MONO_DATA_SQLITECLIENT = -r:Mono.Data.SqliteClient
+LINK_ICSHARP_ZIP_LIB = -r:ICSharpCode.SharpZipLib
+LINK_KEYRING = $(KEYRINGSHARP_LIBS)
+LINK_GLIB = $(GLIBSHARP_LIBS)
+LINK_GTK = $(GTKSHARP_LIBS)
+LINK_GNOME = $(GNOME_SHARP_LIBS)
+LINK_GCONF = $(GCONF_SHARP_LIBS)
+LINK_GLADE = -pkg:glade-sharp-2.0
+LINK_FLICKRNET = -pkg:flickrnet
+LINK_DBUS = $(NDESK_DBUS_LIBS) $(NDESK_DBUS_GLIB_LIBS)
+LINK_DBUS_NO_GLIB = $(NDESK_DBUS_LIBS)
+LINK_MONO_ADDINS_DEPS = $(MONO_ADDINS_LIBS)
+LINK_MONO_ADDINS_SETUP_DEPS = $(MONO_ADDINS_SETUP_LIBS)
+LINK_MONO_ADDINS_GUI_DEPS = $(MONO_ADDINS_GUI_LIBS)
+
+# GIO
+REF_GIO =
+LINK_GIO = -r:$(DIR_GIOSHARP)/gio-sharp.dll
+LINK_GIO_DEPS = $(REF_GIO) $(LINK_GIO)
+
+# Gtk Beans
+REF_GTK_BEANS = $(LINK_GIO_DEPS)
+LINK_GTK_BEANS = -r:$(DIR_GTKSHARPBEANS)/gtk-sharp-beans.dll
+LINK_GTK_BEANS_DEPS = $(REF_GTK_BEANS) $(LINK_GTK_BEANS)
+
+# Uniqe
+REF_UNIQUE =
+LINK_UNIQUE = -r:$(DIR_UNIQUESHARP)/unique-sharp.dll
+LINK_UNIQUE_DEPS = $(REF_UNIQUE) $(LINK_UNIQUE)
+
+# Hyena
+REF_HYENA = $(LINK_SYSTEM) $(LINK_MONO_POSIX)
+LINK_HYENA = -r:$(DIR_BIN)/Hyena.dll
+LINK_HYENA_DEPS = $(REF_HYENA) $(LINK_HYENA)
+
+# Semweb
+REF_SEMWEB = $(LINK_SYSTEMDATA) $(LINK_HYENA_DEPS)
+LINK_SEMWEB = -r:$(DIR_BIN)/SemWeb.dll
+LINK_SEMWEB_DEPS = $(REF_SEMWEB) $(LINK_SEMWEB)
+
+# Hyena.Data.Sqlite
+REF_HYENA_DATA_SQLITE = $(LINK_SQLITE)
+LINK_HYENA_DATA_SQLITE = -r:$(DIR_BIN)/Hyena.Data.Sqlite.dll
+LINK_HYENA_DATA_SQLITE_DEPS = $(REF_HYENA_DATA_SQLITE) $(LINK_HYENA_DATA_SQLITE)
+
+# Hyena.Gui
+REF_HYENA_GUI = $(LINK_HYENA_DEPS)
+LINK_HYENA_GUI = -r:$(DIR_BIN)/Hyena.Gui.dll
+LINK_HENA_GUI_DEPS = $(REF_HYENA_GUI) $(LINK_HYENA_GUI)
+
+# FSpot.Cms
+REF_FSPOT_CMS = $(LINK_GTK)
+LINK_FSPOT_CMS = -r:$(DIR_BIN)/FSpot.Cms.dll
+LINK_FSPOT_CMS_DEPS = $(REF_FSPOT_CMS) $(LINK_FSPOT_CMS)
+
+# FSpot.Utils
+REF_FSPOT_UTILS = $(LINK_HYENA_DEPS) $(LINK_GTK) $(LINK_GIO) $(LINK_MONO_CAIRO)
+LINK_FSPOT_UTILS = -r:$(DIR_BIN)/FSpot.Utils.dll
+LINK_FSPOT_UTILS_DEPS = $(REF_FSPOT_UTILS) $(LINK_FSPOT_UTILS)
+
+# FSpot.Core
+REF_FSPOT_CORE = $(LINK_FSPOT_UTILS_DEPS) $(LINK_FSPOT_CMS_DEPS)
+LINK_FSPOT_CORE = -r:$(DIR_BIN)/FSpot.Core.dll
+LINK_FSPOT_CORE_DEPS = $(REF_FSPOT_CORE) $(LINK_FSPOT_CORE)
+
+# FSpot.Query
+REF_FSPOT_QUERY = $(LINK_FSPOT_CORE_DEPS)
+LINK_FSPOT_QUERY = -r:$(DIR_BIN)/FSpot.Query.dll
+LINK_FSPOT_QUERY_DEPS = $(REF_FSPOT_QUERY) $(LINK_FSPOT_QUERY)
+
+# FSpot.JobScheduler
+REF_FSPOT_JOB_SCHEDULER = $(LINK_HYENA_DEPS)
+LINK_FSPOT_JOB_SCHEDULER = -r:$(DIR_BIN)/FSpot.JobScheduler.dll
+LINK_FSPOT_JOB_SCHEDULER_DEPS = $(REF_FSPOT_JOB_SCHEDULER) $(LINK_FSPOT_JOB_SCHEDULER)
+
+# FSpot.Bling
+REF_FSPOT_BLING = $(LINK_GTK_BEANS_DEPS) $(LINK_GLIB)
+LINK_FSPOT_BLING = -r:$(DIR_BIN)/FSpot.Bling.dll
+LINK_FSPOT_BLING_DEPS = $(REF_FSPOT_BLING) $(LINK_FSPOT_BLING)
+
+# FSpot.Platform
+REF_FSPOT_PLATFORM = $(LINK_GCONF) $(LINK_GTK) $(LINK_FSPOT_CORE_DEPS) $(LINK_DBUS)
+LINK_FSPOT_PLATFORM = -r:$(DIR_BIN)/FSpot.Platform.dll
+LINK_FSPOT_PLATFORM_DEPS = $(REF_FSPOT_PLATFORM) $(LINK_FSPOT_PLATFORM)
+
+# FSpot.Widgets
+REF_FSPOT_WIDGETS = $(LINK_FSPOT_CORE_DEPS) $(LINK_FSPOT_BLING_DEPS)
+LINK_FSPOT_WIDGETS = -r:$(DIR_BIN)/FSpot.Widgets.dll
+LINK_FSPOT_WIDGETS_DEPS = $(REF_FSPOT_WIDGETS) $(LINK_FSPOT_WIDGETS)
+
+# FSpot (executable)
+REF_FSPOT = $(LINK_FSPOT_WIDGETS_DEPS) $(LINK_FSPOT_PLATFORM_DEPS) $(LINK_FSPOT_QUERY_DEPS) \
+ $(LINK_GLIB) $(LINK_MONO_ADDINS_DEPS) $(LINK_UNIQUE_DEPS) $(LINK_MONO_ADDINS_SETUP_DEPS) \
+ $(LINK_SEMWEB_DEPS) $(LINK_GLADE) $(LINK_MONODATA) $(LINK_MONO_DATA_SQLITECLIENT) \
+ $(LINK_MONO_ADDINS_GUI_DEPS) $(LINK_FSPOT_JOB_SCHEDULER_DEPS) $(LINK_ICSHARP_ZIP_LIB) \
+ $(LINK_GNOME)
+
+# FIXME: do not link executables
+LINK_FSPOT = -r:$(DIR_BIN)/f-spot.exe
+LINK_FSPOT_DEPS = $(REF_FSPOT) $(LINK_FSPOT)
+
+# Extensions
+REF_FSPOT_EXTENSION_BLACKOUTEDITOR = $(LINK_FSPOT_DEPS)
+REF_FSPOT_EXTENSION_BWEDITOR = $(LINK_FSPOT_DEPS) $(LINK_MONO_SIMD)
+REF_FSPOT_EXTENSION_FLIPEDITOR = $(LINK_FSPOT_DEPS)
+REF_FSPOT_EXTENSION_PIXELATEEDITOR = $(LINK_FSPOT_DEPS)
+REF_FSPOT_EXTENSION_RESIZEEDITOR = $(LINK_FSPOT_DEPS)
+REF_FSPOT_EXTENSION_CDEXPORT = $(LINK_FSPOT_DEPS)
+REF_FSPOT_EXTENSION_FACEBOOKEXPORT = $(LINK_FSPOT_DEPS) $(LINK_KEYRING)
+REF_FSPOT_EXTENSION_FLICKREXPORT = $(LINK_FSPOT_DEPS) $(LINK_FLICKRNET)
+REF_FSPOT_EXTENSION_FOLDEREXPORT = $(LINK_FSPOT_DEPS) $(LINK_SYSTEM_WEB)
+REF_FSPOT_EXTENSION_GALLERYEXPORT = $(LINK_FSPOT_DEPS)
+REF_MONO_GOOGLE = $(LINK_HYENA_DEPS)
+LINK_MONO_GOOGLE = -r:$(DIR_BIN)/Mono.Google.dll
+LINK_MONO_GOOGLE_DEPS = $(REF_MONO_GOOGLE) $(LINK_MONO_GOOGLE)
+REF_FSPOT_EXTENSION_PICASAWEBEXPORT = $(LINK_FSPOT_DEPS) $(LINK_MONO_GOOGLE) $(LINK_KEYRING)
+REF_SMUGMUGNET = $(LINK_FSPOT_DEPS)
+LINK_SMUGMUGNET = -r:$(DIR_BIN)/SmugMugNet.dll
+LINK_SMUGMUGNET_DEPS = $(REF_SMUGMUGNET) $(LINK_SMUGMUGNET)
+REF_FSPOT_EXTENSION_SMUGMUGEXPORT = $(LINK_SMUGMUGNET_DEPS) $(LINK_KEYRING)
+REF_MONO_TABBLO = $(LINK_HYENA_DEPS)
+LINK_MONO_TABBLO = -r:$(DIR_BIN)/Mono.Tabblo.dll
+LINK_MONO_TABBLO_DEPS = $(REF_MONO_TABBLO) $(LINK_MONO_TABBLO)
+REF_FSPOT_EXTENSION_TABBLOEXPORT = $(LINK_FSPOT_DEPS) $(LINK_KEYRING) $(LINK_MONO_TABBLO_DEPS)
+REF_FSPOT_EXTENSION_ZIPEXPORT = $(LINK_FSPOT_DEPS)
+REF_FSPOT_EXTENSION_CHANGEPHOTOPATH = $(LINK_FSPOT_DEPS)
+REF_FSPOT_EXTENSION_DEVELOPINUFRAW = $(LINK_FSPOT_DEPS)
+REF_FSPOT_EXTENSION_HASHJOB = $(LINK_FSPOT_DEPS)
+REF_FSPOT_EXTENSION_LIVEWEBGALLERY = $(LINK_FSPOT_DEPS)
+REF_FSPOT_EXTENSION_MERGEDB = $(LINK_FSPOT_DEPS)
+REF_FSPOT_EXTENSION_RAWPLUSJPEG = $(LINK_FSPOT_DEPS)
+REF_FSPOT_EXTENSION_RETROACTIVEROLL = $(LINK_FSPOT_DEPS)
+REF_FSPOT_EXTENSION_SCREENSAVERCONFIG = $(LINK_FSPOT_DEPS)
+REF_FSPOT_EXTENSION_COVERTRANSITION = $(LINK_FSPOT_DEPS)
+
+# Cute hack to replace a space with something
+colon := :
+empty :=
+space := $(empty) $(empty)
+
+# Build path to allow running uninstalled
+RUN_PATH = $(subst $(space),$(colon), $(MONO_BASE_PATH))
+UNIQUE_FILTER_PIPE = tr [:space:] \\n | sort | uniq
+BUILD_DATA_DIR = $(top_builddir)/bin/share/$(PACKAGE)
+
+# Since all other attempts failed, we currently go this way:
+# This code adds the file specified in ASSEMBLY_INFO_SOURCE to SOURCES_BUILD.
+# If no such file is specified, the default AssemblyInfo.cs is used.
+ASSEMBLY_INFO_SOURCE_REAL = \
+ $(shell if [ "$(ASSEMBLY_INFO_SOURCE)" ]; \
+ then \
+ echo "$(addprefix $(srcdir)/, $(ASSEMBLY_INFO_SOURCE))"; \
+ else \
+ echo "$(top_srcdir)/src/AssemblyInfo.cs"; \
+ fi)
+
+SOURCES_BUILD = $(addprefix $(srcdir)/, $(SOURCES)) \
+ $(ASSEMBLY_INFO_SOURCE_REAL)
+RESOURCES_EXPANDED = $(addprefix $(srcdir)/, $(RESOURCES))
+RESOURCES_BUILD = $(foreach resource, $(RESOURCES_EXPANDED), \
+ -resource:$(resource),$(notdir $(resource)))
+
+INSTALL_ICONS = $(top_srcdir)/build/private-icon-theme-installer "$(mkinstalldirs)" "$(INSTALL_DATA)"
+THEME_ICONS_SOURCE = $(wildcard $(srcdir)/ThemeIcons/*/*/*.png) $(wildcard $(srcdir)/ThemeIcons/scalable/*/*.svg)
+THEME_ICONS_RELATIVE = $(subst $(srcdir)/ThemeIcons/, , $(THEME_ICONS_SOURCE))
+ASSEMBLY_EXTENSION = $(strip $(patsubst library, dll, $(TARGET)))
+ASSEMBLY_FILE = $(top_builddir)/bin/$(ASSEMBLY).$(ASSEMBLY_EXTENSION)
+INSTALL_DIR_RESOLVED = $(firstword $(subst , $(DEFAULT_INSTALL_DIR), $(INSTALL_DIR)))
+ at ENABLE_TESTS_TRUE@ENABLE_TESTS_FLAG = "-define:ENABLE_TESTS"
+ at ENABLE_ATK_TRUE@ENABLE_ATK_FLAG = "-define:ENABLE_ATK"
+FILTERED_LINK = $(shell echo "$(LINK)" | $(UNIQUE_FILTER_PIPE))
+DEP_LINK = $(shell echo "$(LINK)" | $(UNIQUE_FILTER_PIPE) | sed s,-r:,,g | grep '$(top_builddir)/bin/')
+OUTPUT_FILES = \
+ $(ASSEMBLY_FILE) \
+ $(ASSEMBLY_FILE).mdb
+
+moduledir = $(INSTALL_DIR_RESOLVED)
+module_SCRIPTS = $(OUTPUT_FILES)
+EXTRA_DIST = $(SOURCES_BUILD) $(RESOURCES_EXPANDED) $(THEME_ICONS_SOURCE)
+CLEANFILES = $(OUTPUT_FILES) $(ASSEMBLY_FILE).config
+DISTCLEANFILES = *.pidb
+MAINTAINERCLEANFILES = Makefile.in
all: all-am
.SUFFIXES:
-$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(top_srcdir)/Makefile.addins $(top_srcdir)/Makefile.include $(am__configure_deps)
+$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(top_srcdir)/build/build.mk $(top_srcdir)/build/build.environment.mk $(top_srcdir)/build/build.rules.mk $(am__configure_deps)
@for dep in $?; do \
case '$(am__configure_deps)' in \
*$$dep*) \
@@ -390,32 +555,46 @@ $(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps)
$(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps)
cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
$(am__aclocal_m4_deps):
+install-moduleSCRIPTS: $(module_SCRIPTS)
+ @$(NORMAL_INSTALL)
+ test -z "$(moduledir)" || $(MKDIR_P) "$(DESTDIR)$(moduledir)"
+ @list='$(module_SCRIPTS)'; test -n "$(moduledir)" || list=; \
+ for p in $$list; do \
+ if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \
+ if test -f "$$d$$p"; then echo "$$d$$p"; echo "$$p"; else :; fi; \
+ done | \
+ sed -e 'p;s,.*/,,;n' \
+ -e 'h;s|.*|.|' \
+ -e 'p;x;s,.*/,,;$(transform)' | sed 'N;N;N;s,\n, ,g' | \
+ $(AWK) 'BEGIN { files["."] = ""; dirs["."] = 1; } \
+ { d=$$3; if (dirs[d] != 1) { print "d", d; dirs[d] = 1 } \
+ if ($$2 == $$4) { files[d] = files[d] " " $$1; \
+ if (++n[d] == $(am__install_max)) { \
+ print "f", d, files[d]; n[d] = 0; files[d] = "" } } \
+ else { print "f", d "/" $$4, $$1 } } \
+ END { for (d in files) print "f", d, files[d] }' | \
+ while read type dir files; do \
+ if test "$$dir" = .; then dir=; else dir=/$$dir; fi; \
+ test -z "$$files" || { \
+ echo " $(INSTALL_SCRIPT) $$files '$(DESTDIR)$(moduledir)$$dir'"; \
+ $(INSTALL_SCRIPT) $$files "$(DESTDIR)$(moduledir)$$dir" || exit $$?; \
+ } \
+ ; done
+
+uninstall-moduleSCRIPTS:
+ @$(NORMAL_UNINSTALL)
+ @list='$(module_SCRIPTS)'; test -n "$(moduledir)" || exit 0; \
+ files=`for p in $$list; do echo "$$p"; done | \
+ sed -e 's,.*/,,;$(transform)'`; \
+ test -n "$$list" || exit 0; \
+ echo " ( cd '$(DESTDIR)$(moduledir)' && rm -f" $$files ")"; \
+ cd "$(DESTDIR)$(moduledir)" && rm -f $$files
mostlyclean-libtool:
-rm -f *.lo
clean-libtool:
-rm -rf .libs _libs
-install-addinDATA: $(addin_DATA)
- @$(NORMAL_INSTALL)
- test -z "$(addindir)" || $(MKDIR_P) "$(DESTDIR)$(addindir)"
- @list='$(addin_DATA)'; test -n "$(addindir)" || list=; \
- for p in $$list; do \
- if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \
- echo "$$d$$p"; \
- done | $(am__base_list) | \
- while read files; do \
- echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(addindir)'"; \
- $(INSTALL_DATA) $$files "$(DESTDIR)$(addindir)" || exit $$?; \
- done
-
-uninstall-addinDATA:
- @$(NORMAL_UNINSTALL)
- @list='$(addin_DATA)'; test -n "$(addindir)" || list=; \
- files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \
- test -n "$$files" || exit 0; \
- echo " ( cd '$(DESTDIR)$(addindir)' && rm -f" $$files ")"; \
- cd "$(DESTDIR)$(addindir)" && rm -f $$files
tags: TAGS
TAGS:
@@ -455,9 +634,9 @@ distdir: $(DISTFILES)
done
check-am: all-am
check: check-am
-all-am: Makefile $(DATA)
+all-am: Makefile $(SCRIPTS)
installdirs:
- for dir in "$(DESTDIR)$(addindir)"; do \
+ for dir in "$(DESTDIR)$(moduledir)"; do \
test -z "$$dir" || $(MKDIR_P) "$$dir"; \
done
install: install-am
@@ -482,10 +661,12 @@ clean-generic:
distclean-generic:
-test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
-test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES)
+ -test -z "$(DISTCLEANFILES)" || rm -f $(DISTCLEANFILES)
maintainer-clean-generic:
@echo "This command is intended for maintainers to use"
@echo "it deletes files that may require special tools to rebuild."
+ -test -z "$(MAINTAINERCLEANFILES)" || rm -f $(MAINTAINERCLEANFILES)
clean: clean-am
clean-am: clean-generic clean-libtool mostlyclean-am
@@ -506,7 +687,7 @@ info: info-am
info-am:
-install-data-am: install-addinDATA
+install-data-am: install-data-local install-moduleSCRIPTS
install-dvi: install-dvi-am
@@ -550,28 +731,72 @@ ps: ps-am
ps-am:
-uninstall-am: uninstall-addinDATA
+uninstall-am: uninstall-local uninstall-moduleSCRIPTS
.MAKE: install-am install-strip
.PHONY: all all-am check check-am clean clean-generic clean-libtool \
distclean distclean-generic distclean-libtool distdir dvi \
- dvi-am html html-am info info-am install install-addinDATA \
- install-am install-data install-data-am install-dvi \
+ dvi-am html html-am info info-am install install-am \
+ install-data install-data-am install-data-local 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-generic mostlyclean-libtool pdf pdf-am ps ps-am \
- uninstall uninstall-addinDATA uninstall-am
-
-
-mpack: $(ASSEMBLY)
- mautil p $(ASSEMBLY)
-
-$(ASSEMBLY): $(addin_SOURCES) $(dep_resources)
- $(CSC_LIB) -out:$@ $(addin_extraflags) $(build_sources) $(build_references) $(build_packages) $(build_resources)
+ install-moduleSCRIPTS install-pdf install-pdf-am install-ps \
+ install-ps-am install-strip installcheck installcheck-am \
+ installdirs maintainer-clean maintainer-clean-generic \
+ mostlyclean mostlyclean-generic mostlyclean-libtool pdf pdf-am \
+ ps ps-am uninstall uninstall-am uninstall-local \
+ uninstall-moduleSCRIPTS
+
+
+all: $(ASSEMBLY_FILE) theme-icons
+
+run:
+ @pushd $(top_builddir); \
+ make run; \
+ popd;
+
+# uncommented for now.
+# tests are currently excuted from Makefile in $(top_builddir)
+#test:
+# @pushd $(top_builddir)/tests; \
+# make $(ASSEMBLY); \
+# popd;
+
+build-debug:
+ @echo $(DEP_LINK)
+
+$(ASSEMBLY_FILE).mdb: $(ASSEMBLY_FILE)
+
+$(ASSEMBLY_FILE): $(SOURCES_BUILD) $(RESOURCES_EXPANDED) $(DEP_LINK)
+ @mkdir -p $(top_builddir)/bin
+ @if [ ! "x$(ENABLE_RELEASE)" = "xyes" ]; then \
+ $(top_srcdir)/build/dll-map-makefile-verifier $(srcdir)/Makefile.am $(srcdir)/$(notdir $@.config) && \
+ $(MONO) $(top_builddir)/build/dll-map-verifier.exe $(srcdir)/$(notdir $@.config) -iwinmm -ilibbanshee -ilibbnpx11 -ilibc -ilibc.so.6 -iintl -ilibmtp.dll -ilibigemacintegration.dylib -iCFRelease $(SOURCES_BUILD); \
+ fi;
+ $(MCS) \
+ $(GMCS_FLAGS) \
+ $(ASSEMBLY_BUILD_FLAGS) \
+ -nowarn:0278 -nowarn:0078 $$warn \
+ -define:HAVE_GTK_2_10 -define:NET_2_0 \
+ -debug -target:$(TARGET) -out:$@ \
+ $(BUILD_DEFINES) $(ENABLE_TESTS_FLAG) $(ENABLE_ATK_FLAG) \
+ $(FILTERED_LINK) $(RESOURCES_BUILD) $(SOURCES_BUILD)
+ @if [ -e $(srcdir)/$(notdir $@.config) ]; then \
+ cp $(srcdir)/$(notdir $@.config) $(top_builddir)/bin; \
+ fi;
+ @if [ ! -z "$(EXTRA_BUNDLE)" ]; then \
+ cp $(EXTRA_BUNDLE) $(top_builddir)/bin; \
+ fi;
+
+theme-icons: $(THEME_ICONS_SOURCE)
+ @$(INSTALL_ICONS) -il "$(BUILD_DATA_DIR)" "$(srcdir)" $(THEME_ICONS_RELATIVE)
+
+install-data-local: $(THEME_ICONS_SOURCE)
+ @$(INSTALL_ICONS) -i "$(DESTDIR)$(pkgdatadir)" "$(srcdir)" $(THEME_ICONS_RELATIVE)
+
+uninstall-local: $(THEME_ICONS_SOURCE)
+ @$(INSTALL_ICONS) -u "$(DESTDIR)$(pkgdatadir)" "$(srcdir)" $(THEME_ICONS_RELATIVE)
# 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/extensions/Tools/LiveWebGallery/GalleryRequestHandler.cs b/extensions/Tools/LiveWebGallery/GalleryRequestHandler.cs
index 40f77d0..a288403 100644
--- a/extensions/Tools/LiveWebGallery/GalleryRequestHandler.cs
+++ b/extensions/Tools/LiveWebGallery/GalleryRequestHandler.cs
@@ -145,10 +145,10 @@ namespace LiveWebGalleryExtension
case QueryType.ByTag:
return App.Instance.Database.Photos.Query (new Tag[] {query_tag});
case QueryType.CurrentView:
- return MainWindow.Toplevel.Query.Photos;
+ return App.Instance.Organizer.Query.Photos;
case QueryType.Selected:
default:
- return MainWindow.Toplevel.SelectedPhotos ();
+ return App.Instance.Organizer.SelectedPhotos ();
}
}
diff --git a/extensions/Tools/LiveWebGallery/Makefile.am b/extensions/Tools/LiveWebGallery/Makefile.am
index 74eeea2..8545e4d 100644
--- a/extensions/Tools/LiveWebGallery/Makefile.am
+++ b/extensions/Tools/LiveWebGallery/Makefile.am
@@ -1,33 +1,21 @@
-addin = LiveWebGallery
-
-addin_manifest = $(addin).addin.xml
-
-addin_sources = \
- LiveWebGallery.cs \
- LiveWebGalleryDialog.cs \
- SimpleWebServer.cs \
- GalleryRequestHandler.cs \
- PhotoRequestHandler.cs \
- ResourceRequestHandler.cs
-
-addin_references = \
- Mono.Posix
-
-addin_packages = \
- gtk-sharp-2.0 \
- gnome-sharp-2.0
-
-addin_resources = \
- $(addin_manifest) \
- ui/$(addin).ui \
- ui/empty.png \
- ui/f-spot.css \
- ui/f-spot.js \
- ui/gallery.html
-
-addin_packages = \
- gtk-sharp-2.0
-
-addin_extradist =
-
-include $(top_srcdir)/Makefile.addins
+ASSEMBLY = FSpot.Exporters.LiveWebGallery
+TARGET = library
+LINK = $(REF_FSPOT_EXTENSION_LIVEWEBGALLERY)
+INSTALL_DIR = $(EXTENSIONS_INSTALL_DIR)
+
+SOURCES = \
+ GalleryRequestHandler.cs \
+ LiveWebGallery.cs \
+ LiveWebGalleryDialog.cs \
+ PhotoRequestHandler.cs \
+ ResourceRequestHandler.cs \
+ SimpleWebServer.cs
+
+RESOURCES = \
+ LiveWebGallery.addin.xml \
+ ui/LiveWebGallery.ui \
+ ui/gallery.html \
+ ui/f-spot.css \
+ ui/f-spot.js
+
+include $(top_srcdir)/build/build.mk
diff --git a/extensions/Tools/LiveWebGallery/Makefile.in b/extensions/Tools/LiveWebGallery/Makefile.in
index 16a2de3..1aa7e20 100644
--- a/extensions/Tools/LiveWebGallery/Makefile.in
+++ b/extensions/Tools/LiveWebGallery/Makefile.in
@@ -35,13 +35,22 @@ POST_UNINSTALL = :
build_triplet = @build@
host_triplet = @host@
DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in \
- $(top_srcdir)/Makefile.addins $(top_srcdir)/Makefile.include
+ $(top_srcdir)/build/build.environment.mk \
+ $(top_srcdir)/build/build.mk \
+ $(top_srcdir)/build/build.rules.mk
+ at ENABLE_TESTS_TRUE@am__append_1 = " $(NUNIT_LIBS)"
subdir = extensions/Tools/LiveWebGallery
ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
am__aclocal_m4_deps = $(top_srcdir)/build/m4/shave/shave.m4 \
$(top_srcdir)/build/m4/shamrock/expansions.m4 \
+ $(top_srcdir)/build/m4/shamrock/gnome-doc.m4 \
$(top_srcdir)/build/m4/shamrock/mono.m4 \
+ $(top_srcdir)/build/m4/shamrock/nunit.m4 \
$(top_srcdir)/build/m4/shamrock/programs.m4 \
+ $(top_srcdir)/build/m4/f-spot/flickrnet.m4 \
+ $(top_srcdir)/build/m4/f-spot/gnome-keyring-sharp.m4 \
+ $(top_srcdir)/build/m4/f-spot/gtk-sharp.m4 \
+ $(top_srcdir)/build/m4/f-spot/mono-addins.m4 \
$(top_srcdir)/acinclude.m4 $(top_srcdir)/configure.ac
am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
$(ACLOCAL_M4)
@@ -49,8 +58,6 @@ mkinstalldirs = $(install_sh) -d
CONFIG_HEADER = $(top_builddir)/config.h
CONFIG_CLEAN_FILES =
CONFIG_CLEAN_VPATH_FILES =
-SOURCES =
-DIST_SOURCES =
am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`;
am__vpath_adj = case $$p in \
$(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \
@@ -72,8 +79,9 @@ am__nobase_list = $(am__nobase_strip_setup); \
am__base_list = \
sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \
sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g'
-am__installdirs = "$(DESTDIR)$(addindir)"
-DATA = $(addin_DATA)
+am__installdirs = "$(DESTDIR)$(moduledir)"
+SCRIPTS = $(module_SCRIPTS)
+DIST_SOURCES =
DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
ACLOCAL = @ACLOCAL@
ACLOCAL_AMFLAGS = @ACLOCAL_AMFLAGS@
@@ -119,6 +127,8 @@ EXIF_SOVERSION = @EXIF_SOVERSION@
F77 = @F77@
FC = @FC@
FGREP = @FGREP@
+FLICKRNET_CFLAGS = @FLICKRNET_CFLAGS@
+FLICKRNET_LIBS = @FLICKRNET_LIBS@
F_CFLAGS = @F_CFLAGS@
F_LIBS = @F_LIBS@
GAPI2CODEGEN = @GAPI2CODEGEN@
@@ -132,6 +142,8 @@ GCONF_SHARP_LIBS = @GCONF_SHARP_LIBS@
GETTEXT_PACKAGE = @GETTEXT_PACKAGE@
GIO_CFLAGS = @GIO_CFLAGS@
GIO_LIBS = @GIO_LIBS@
+GLIBSHARP_2_12_7_CFLAGS = @GLIBSHARP_2_12_7_CFLAGS@
+GLIBSHARP_2_12_7_LIBS = @GLIBSHARP_2_12_7_LIBS@
GLIBSHARP_CFLAGS = @GLIBSHARP_CFLAGS@
GLIBSHARP_LIBS = @GLIBSHARP_LIBS@
GLIB_CFLAGS = @GLIB_CFLAGS@
@@ -147,6 +159,10 @@ GNOME_SHARP_CFLAGS = @GNOME_SHARP_CFLAGS@
GNOME_SHARP_LIBS = @GNOME_SHARP_LIBS@
GOBJECT_QUERY = @GOBJECT_QUERY@
GREP = @GREP@
+GTKSHARP_A11Y_CFLAGS = @GTKSHARP_A11Y_CFLAGS@
+GTKSHARP_A11Y_LIBS = @GTKSHARP_A11Y_LIBS@
+GTKSHARP_CFLAGS = @GTKSHARP_CFLAGS@
+GTKSHARP_LIBS = @GTKSHARP_LIBS@
HELP_DIR = @HELP_DIR@
ICONS_DIRECTORY = @ICONS_DIRECTORY@
INSTALL = @INSTALL@
@@ -160,14 +176,14 @@ INTLTOOL_EXTRACT = @INTLTOOL_EXTRACT@
INTLTOOL_MERGE = @INTLTOOL_MERGE@
INTLTOOL_PERL = @INTLTOOL_PERL@
INTLTOOL_UPDATE = @INTLTOOL_UPDATE@
+KEYRINGSHARP_CFLAGS = @KEYRINGSHARP_CFLAGS@
+KEYRINGSHARP_LIBS = @KEYRINGSHARP_LIBS@
LCMS_CFLAGS = @LCMS_CFLAGS@
LCMS_LIBS = @LCMS_LIBS@
LD = @LD@
LDFLAGS = @LDFLAGS@
LIBEXIF_VERSION_CHECK_CFLAGS = @LIBEXIF_VERSION_CHECK_CFLAGS@
LIBEXIF_VERSION_CHECK_LIBS = @LIBEXIF_VERSION_CHECK_LIBS@
-LIBGPHOTO2_CFLAGS = @LIBGPHOTO2_CFLAGS@
-LIBGPHOTO2_LIBS = @LIBGPHOTO2_LIBS@
LIBJPEG = @LIBJPEG@
LIBOBJS = @LIBOBJS@
LIBS = @LIBS@
@@ -182,6 +198,12 @@ MCS = @MCS@
MKDIR_P = @MKDIR_P@
MKINSTALLDIRS = @MKINSTALLDIRS@
MONO = @MONO@
+MONO_ADDINS_CFLAGS = @MONO_ADDINS_CFLAGS@
+MONO_ADDINS_GUI_CFLAGS = @MONO_ADDINS_GUI_CFLAGS@
+MONO_ADDINS_GUI_LIBS = @MONO_ADDINS_GUI_LIBS@
+MONO_ADDINS_LIBS = @MONO_ADDINS_LIBS@
+MONO_ADDINS_SETUP_CFLAGS = @MONO_ADDINS_SETUP_CFLAGS@
+MONO_ADDINS_SETUP_LIBS = @MONO_ADDINS_SETUP_LIBS@
MONO_MODULE_CFLAGS = @MONO_MODULE_CFLAGS@
MONO_MODULE_LIBS = @MONO_MODULE_LIBS@
MSGFMT = @MSGFMT@
@@ -192,7 +214,6 @@ NDESK_DBUS_LIBS = @NDESK_DBUS_LIBS@
NM = @NM@
NMEDIT = @NMEDIT@
NUNIT_CFLAGS = @NUNIT_CFLAGS@
-NUNIT_DEFINES = @NUNIT_DEFINES@
NUNIT_LIBS = @NUNIT_LIBS@
OBJC = @OBJC@
OBJDUMP = @OBJDUMP@
@@ -284,92 +305,240 @@ target_alias = @target_alias@
top_build_prefix = @top_build_prefix@
top_builddir = @top_builddir@
top_srcdir = @top_srcdir@
-addin = LiveWebGallery
-addin_manifest = $(addin).addin.xml
-addin_sources = \
- LiveWebGallery.cs \
- LiveWebGalleryDialog.cs \
- SimpleWebServer.cs \
- GalleryRequestHandler.cs \
- PhotoRequestHandler.cs \
- ResourceRequestHandler.cs
-
-addin_references = \
- Mono.Posix
-
-addin_packages = \
- gtk-sharp-2.0
-
-addin_resources = \
- $(addin_manifest) \
- ui/$(addin).ui \
- ui/empty.png \
- ui/f-spot.css \
- ui/f-spot.js \
- ui/gallery.html
-
-addin_extradist =
-ASSEMBLY = $(addin).dll
+ASSEMBLY = FSpot.Exporters.LiveWebGallery
+TARGET = library
+LINK = $(REF_FSPOT_EXTENSION_LIVEWEBGALLERY) $(am__append_1)
+INSTALL_DIR = $(EXTENSIONS_INSTALL_DIR)
+SOURCES = \
+ GalleryRequestHandler.cs \
+ LiveWebGallery.cs \
+ LiveWebGalleryDialog.cs \
+ PhotoRequestHandler.cs \
+ ResourceRequestHandler.cs \
+ SimpleWebServer.cs
+
+RESOURCES = \
+ LiveWebGallery.addin.xml \
+ ui/LiveWebGallery.ui \
+ ui/gallery.html \
+ ui/f-spot.css \
+ ui/f-spot.js
+
+
+# Initializers
+MONO_BASE_PATH =
+MONO_ADDINS_PATH =
+
+# Install Paths
+DEFAULT_INSTALL_DIR = $(pkglibdir)
+BACKENDS_INSTALL_DIR = $(DEFAULT_INSTALL_DIR)/Backends
+EXTENSIONS_INSTALL_DIR = $(DEFAULT_INSTALL_DIR)/Extensions
DIR_DOCS = $(top_builddir)/docs
DIR_EXTENSIONS = $(top_builddir)/extensions
-DIR_GPHOTO2 = $(top_builddir)/lib/libgphoto2-sharp
DIR_ICONS = $(top_builddir)/icons
DIR_JPEGTRAN = $(top_builddir)/lib/libjpegtran
-DIR_KEYRING = $(top_builddir)/lib/gnome-keyring-sharp
DIR_LIBFSPOT = $(top_builddir)/lib/libfspot
DIR_SEMWEB = $(top_builddir)/lib/semweb
DIR_SRC = $(top_builddir)/src
DIR_GIOSHARP = $(top_builddir)/lib/gio-sharp/gio
DIR_GTKSHARPBEANS = $(top_builddir)/lib/gtk-sharp-beans
DIR_UNIQUESHARP = $(top_builddir)/lib/unique-sharp/unique
-LINK_KEYRING = -r:$(DIR_KEYRING)/gnome-keyring-sharp.dll
-LINK_GPHOTO2 = -r:$(DIR_GPHOTO2)/libgphoto2-sharp.dll
-LINK_SEMWEB = -r:$(DIR_SEMWEB)/SemWeb.dll
-LINK_GIOSHARP = -r:$(DIR_GIOSHARP)/gio-sharp.dll
-LINK_GTKSHARPBEANS = -r:$(DIR_GTKSHARPBEANS)/gtk-sharp-beans.dll
-LINK_UNIQUESHARP = -r:$(DIR_UNIQUESHARP)/unique-sharp.dll
-CSC_FLAGS = -debug
-CSC = $(MCS) $(CSC_FLAGS) -target:exe
-CSC_LIB = $(MCS) $(CSC_FLAGS) -target:library
-MONO_DEBUGFLAGS = --debug
-RUNTIME = mono $(MONO_DEBUGFLAGS)
-dep_resources = $(addprefix $(srcdir)/, $(addin_resources))
-build_resources = $(foreach res, $(dep_resources), $(addprefix -resource:, $(res)),$(notdir $(res)))
-build_sources = $(addprefix $(srcdir)/, $(addin_sources))
-build_packages = \
- $(addprefix -pkg:, $(addin_packages)) \
- -pkg:mono-addins
-
-build_references = \
- $(addprefix -r:, $(addin_references)) \
- -r:$(top_builddir)/src/f-spot.exe \
- -r:$(top_builddir)/src/Cms.dll \
- -r:$(top_builddir)/src/FSpot.Core.dll \
- -r:$(top_builddir)/src/FSpot.Platform.dll \
- -r:$(top_builddir)/src/FSpot.Query.dll \
- -r:$(top_builddir)/src/FSpot.Utils.dll \
- -r:$(top_builddir)/src/FSpot.Widgets.dll \
- $(LINK_SEMWEB) \
- $(LINK_GPHOTO2) \
- $(LINK_GIOSHARP) \
- $(LINK_UNIQUESHARP) \
- $(LINK_GTKSHARPBEANS)
-
-addin_SOURCES = \
- $(build_sources)
-
-addindir = $(pkglibdir)/extensions
-addin_DATA = $(ASSEMBLY)
-CLEANFILES = $(ASSEMBLY) $(ASSEMBLY).mdb *.mpack
-EXTRA_DIST = \
- $(build_sources) \
- $(dep_resources) \
- $(addin_extradist)
-
+DIR_BIN = $(top_builddir)/bin
+
+# External libraries to link against, generated from configure
+LINK_SYSTEM = -r:System
+LINK_SYSTEMDATA = -r:System.Data
+LINK_SYSTEM_WEB = -r:System.Web
+LINK_MONO_POSIX = -r:Mono.Posix
+LINK_MONO_CAIRO = -r:Mono.Cairo
+LINK_MONO_SIMD = -r:Mono.Simd
+LINK_MONODATA = -r:Mono.Data
+LINK_MONO_DATA_SQLITECLIENT = -r:Mono.Data.SqliteClient
+LINK_ICSHARP_ZIP_LIB = -r:ICSharpCode.SharpZipLib
+LINK_KEYRING = $(KEYRINGSHARP_LIBS)
+LINK_GLIB = $(GLIBSHARP_LIBS)
+LINK_GTK = $(GTKSHARP_LIBS)
+LINK_GNOME = $(GNOME_SHARP_LIBS)
+LINK_GCONF = $(GCONF_SHARP_LIBS)
+LINK_GLADE = -pkg:glade-sharp-2.0
+LINK_FLICKRNET = -pkg:flickrnet
+LINK_DBUS = $(NDESK_DBUS_LIBS) $(NDESK_DBUS_GLIB_LIBS)
+LINK_DBUS_NO_GLIB = $(NDESK_DBUS_LIBS)
+LINK_MONO_ADDINS_DEPS = $(MONO_ADDINS_LIBS)
+LINK_MONO_ADDINS_SETUP_DEPS = $(MONO_ADDINS_SETUP_LIBS)
+LINK_MONO_ADDINS_GUI_DEPS = $(MONO_ADDINS_GUI_LIBS)
+
+# GIO
+REF_GIO =
+LINK_GIO = -r:$(DIR_GIOSHARP)/gio-sharp.dll
+LINK_GIO_DEPS = $(REF_GIO) $(LINK_GIO)
+
+# Gtk Beans
+REF_GTK_BEANS = $(LINK_GIO_DEPS)
+LINK_GTK_BEANS = -r:$(DIR_GTKSHARPBEANS)/gtk-sharp-beans.dll
+LINK_GTK_BEANS_DEPS = $(REF_GTK_BEANS) $(LINK_GTK_BEANS)
+
+# Uniqe
+REF_UNIQUE =
+LINK_UNIQUE = -r:$(DIR_UNIQUESHARP)/unique-sharp.dll
+LINK_UNIQUE_DEPS = $(REF_UNIQUE) $(LINK_UNIQUE)
+
+# Hyena
+REF_HYENA = $(LINK_SYSTEM) $(LINK_MONO_POSIX)
+LINK_HYENA = -r:$(DIR_BIN)/Hyena.dll
+LINK_HYENA_DEPS = $(REF_HYENA) $(LINK_HYENA)
+
+# Semweb
+REF_SEMWEB = $(LINK_SYSTEMDATA) $(LINK_HYENA_DEPS)
+LINK_SEMWEB = -r:$(DIR_BIN)/SemWeb.dll
+LINK_SEMWEB_DEPS = $(REF_SEMWEB) $(LINK_SEMWEB)
+
+# Hyena.Data.Sqlite
+REF_HYENA_DATA_SQLITE = $(LINK_SQLITE)
+LINK_HYENA_DATA_SQLITE = -r:$(DIR_BIN)/Hyena.Data.Sqlite.dll
+LINK_HYENA_DATA_SQLITE_DEPS = $(REF_HYENA_DATA_SQLITE) $(LINK_HYENA_DATA_SQLITE)
+
+# Hyena.Gui
+REF_HYENA_GUI = $(LINK_HYENA_DEPS)
+LINK_HYENA_GUI = -r:$(DIR_BIN)/Hyena.Gui.dll
+LINK_HENA_GUI_DEPS = $(REF_HYENA_GUI) $(LINK_HYENA_GUI)
+
+# FSpot.Cms
+REF_FSPOT_CMS = $(LINK_GTK)
+LINK_FSPOT_CMS = -r:$(DIR_BIN)/FSpot.Cms.dll
+LINK_FSPOT_CMS_DEPS = $(REF_FSPOT_CMS) $(LINK_FSPOT_CMS)
+
+# FSpot.Utils
+REF_FSPOT_UTILS = $(LINK_HYENA_DEPS) $(LINK_GTK) $(LINK_GIO) $(LINK_MONO_CAIRO)
+LINK_FSPOT_UTILS = -r:$(DIR_BIN)/FSpot.Utils.dll
+LINK_FSPOT_UTILS_DEPS = $(REF_FSPOT_UTILS) $(LINK_FSPOT_UTILS)
+
+# FSpot.Core
+REF_FSPOT_CORE = $(LINK_FSPOT_UTILS_DEPS) $(LINK_FSPOT_CMS_DEPS)
+LINK_FSPOT_CORE = -r:$(DIR_BIN)/FSpot.Core.dll
+LINK_FSPOT_CORE_DEPS = $(REF_FSPOT_CORE) $(LINK_FSPOT_CORE)
+
+# FSpot.Query
+REF_FSPOT_QUERY = $(LINK_FSPOT_CORE_DEPS)
+LINK_FSPOT_QUERY = -r:$(DIR_BIN)/FSpot.Query.dll
+LINK_FSPOT_QUERY_DEPS = $(REF_FSPOT_QUERY) $(LINK_FSPOT_QUERY)
+
+# FSpot.JobScheduler
+REF_FSPOT_JOB_SCHEDULER = $(LINK_HYENA_DEPS)
+LINK_FSPOT_JOB_SCHEDULER = -r:$(DIR_BIN)/FSpot.JobScheduler.dll
+LINK_FSPOT_JOB_SCHEDULER_DEPS = $(REF_FSPOT_JOB_SCHEDULER) $(LINK_FSPOT_JOB_SCHEDULER)
+
+# FSpot.Bling
+REF_FSPOT_BLING = $(LINK_GTK_BEANS_DEPS) $(LINK_GLIB)
+LINK_FSPOT_BLING = -r:$(DIR_BIN)/FSpot.Bling.dll
+LINK_FSPOT_BLING_DEPS = $(REF_FSPOT_BLING) $(LINK_FSPOT_BLING)
+
+# FSpot.Platform
+REF_FSPOT_PLATFORM = $(LINK_GCONF) $(LINK_GTK) $(LINK_FSPOT_CORE_DEPS) $(LINK_DBUS)
+LINK_FSPOT_PLATFORM = -r:$(DIR_BIN)/FSpot.Platform.dll
+LINK_FSPOT_PLATFORM_DEPS = $(REF_FSPOT_PLATFORM) $(LINK_FSPOT_PLATFORM)
+
+# FSpot.Widgets
+REF_FSPOT_WIDGETS = $(LINK_FSPOT_CORE_DEPS) $(LINK_FSPOT_BLING_DEPS)
+LINK_FSPOT_WIDGETS = -r:$(DIR_BIN)/FSpot.Widgets.dll
+LINK_FSPOT_WIDGETS_DEPS = $(REF_FSPOT_WIDGETS) $(LINK_FSPOT_WIDGETS)
+
+# FSpot (executable)
+REF_FSPOT = $(LINK_FSPOT_WIDGETS_DEPS) $(LINK_FSPOT_PLATFORM_DEPS) $(LINK_FSPOT_QUERY_DEPS) \
+ $(LINK_GLIB) $(LINK_MONO_ADDINS_DEPS) $(LINK_UNIQUE_DEPS) $(LINK_MONO_ADDINS_SETUP_DEPS) \
+ $(LINK_SEMWEB_DEPS) $(LINK_GLADE) $(LINK_MONODATA) $(LINK_MONO_DATA_SQLITECLIENT) \
+ $(LINK_MONO_ADDINS_GUI_DEPS) $(LINK_FSPOT_JOB_SCHEDULER_DEPS) $(LINK_ICSHARP_ZIP_LIB) \
+ $(LINK_GNOME)
+
+# FIXME: do not link executables
+LINK_FSPOT = -r:$(DIR_BIN)/f-spot.exe
+LINK_FSPOT_DEPS = $(REF_FSPOT) $(LINK_FSPOT)
+
+# Extensions
+REF_FSPOT_EXTENSION_BLACKOUTEDITOR = $(LINK_FSPOT_DEPS)
+REF_FSPOT_EXTENSION_BWEDITOR = $(LINK_FSPOT_DEPS) $(LINK_MONO_SIMD)
+REF_FSPOT_EXTENSION_FLIPEDITOR = $(LINK_FSPOT_DEPS)
+REF_FSPOT_EXTENSION_PIXELATEEDITOR = $(LINK_FSPOT_DEPS)
+REF_FSPOT_EXTENSION_RESIZEEDITOR = $(LINK_FSPOT_DEPS)
+REF_FSPOT_EXTENSION_CDEXPORT = $(LINK_FSPOT_DEPS)
+REF_FSPOT_EXTENSION_FACEBOOKEXPORT = $(LINK_FSPOT_DEPS) $(LINK_KEYRING)
+REF_FSPOT_EXTENSION_FLICKREXPORT = $(LINK_FSPOT_DEPS) $(LINK_FLICKRNET)
+REF_FSPOT_EXTENSION_FOLDEREXPORT = $(LINK_FSPOT_DEPS) $(LINK_SYSTEM_WEB)
+REF_FSPOT_EXTENSION_GALLERYEXPORT = $(LINK_FSPOT_DEPS)
+REF_MONO_GOOGLE = $(LINK_HYENA_DEPS)
+LINK_MONO_GOOGLE = -r:$(DIR_BIN)/Mono.Google.dll
+LINK_MONO_GOOGLE_DEPS = $(REF_MONO_GOOGLE) $(LINK_MONO_GOOGLE)
+REF_FSPOT_EXTENSION_PICASAWEBEXPORT = $(LINK_FSPOT_DEPS) $(LINK_MONO_GOOGLE) $(LINK_KEYRING)
+REF_SMUGMUGNET = $(LINK_FSPOT_DEPS)
+LINK_SMUGMUGNET = -r:$(DIR_BIN)/SmugMugNet.dll
+LINK_SMUGMUGNET_DEPS = $(REF_SMUGMUGNET) $(LINK_SMUGMUGNET)
+REF_FSPOT_EXTENSION_SMUGMUGEXPORT = $(LINK_SMUGMUGNET_DEPS) $(LINK_KEYRING)
+REF_MONO_TABBLO = $(LINK_HYENA_DEPS)
+LINK_MONO_TABBLO = -r:$(DIR_BIN)/Mono.Tabblo.dll
+LINK_MONO_TABBLO_DEPS = $(REF_MONO_TABBLO) $(LINK_MONO_TABBLO)
+REF_FSPOT_EXTENSION_TABBLOEXPORT = $(LINK_FSPOT_DEPS) $(LINK_KEYRING) $(LINK_MONO_TABBLO_DEPS)
+REF_FSPOT_EXTENSION_ZIPEXPORT = $(LINK_FSPOT_DEPS)
+REF_FSPOT_EXTENSION_CHANGEPHOTOPATH = $(LINK_FSPOT_DEPS)
+REF_FSPOT_EXTENSION_DEVELOPINUFRAW = $(LINK_FSPOT_DEPS)
+REF_FSPOT_EXTENSION_HASHJOB = $(LINK_FSPOT_DEPS)
+REF_FSPOT_EXTENSION_LIVEWEBGALLERY = $(LINK_FSPOT_DEPS)
+REF_FSPOT_EXTENSION_MERGEDB = $(LINK_FSPOT_DEPS)
+REF_FSPOT_EXTENSION_RAWPLUSJPEG = $(LINK_FSPOT_DEPS)
+REF_FSPOT_EXTENSION_RETROACTIVEROLL = $(LINK_FSPOT_DEPS)
+REF_FSPOT_EXTENSION_SCREENSAVERCONFIG = $(LINK_FSPOT_DEPS)
+REF_FSPOT_EXTENSION_COVERTRANSITION = $(LINK_FSPOT_DEPS)
+
+# Cute hack to replace a space with something
+colon := :
+empty :=
+space := $(empty) $(empty)
+
+# Build path to allow running uninstalled
+RUN_PATH = $(subst $(space),$(colon), $(MONO_BASE_PATH))
+UNIQUE_FILTER_PIPE = tr [:space:] \\n | sort | uniq
+BUILD_DATA_DIR = $(top_builddir)/bin/share/$(PACKAGE)
+
+# Since all other attempts failed, we currently go this way:
+# This code adds the file specified in ASSEMBLY_INFO_SOURCE to SOURCES_BUILD.
+# If no such file is specified, the default AssemblyInfo.cs is used.
+ASSEMBLY_INFO_SOURCE_REAL = \
+ $(shell if [ "$(ASSEMBLY_INFO_SOURCE)" ]; \
+ then \
+ echo "$(addprefix $(srcdir)/, $(ASSEMBLY_INFO_SOURCE))"; \
+ else \
+ echo "$(top_srcdir)/src/AssemblyInfo.cs"; \
+ fi)
+
+SOURCES_BUILD = $(addprefix $(srcdir)/, $(SOURCES)) \
+ $(ASSEMBLY_INFO_SOURCE_REAL)
+RESOURCES_EXPANDED = $(addprefix $(srcdir)/, $(RESOURCES))
+RESOURCES_BUILD = $(foreach resource, $(RESOURCES_EXPANDED), \
+ -resource:$(resource),$(notdir $(resource)))
+
+INSTALL_ICONS = $(top_srcdir)/build/private-icon-theme-installer "$(mkinstalldirs)" "$(INSTALL_DATA)"
+THEME_ICONS_SOURCE = $(wildcard $(srcdir)/ThemeIcons/*/*/*.png) $(wildcard $(srcdir)/ThemeIcons/scalable/*/*.svg)
+THEME_ICONS_RELATIVE = $(subst $(srcdir)/ThemeIcons/, , $(THEME_ICONS_SOURCE))
+ASSEMBLY_EXTENSION = $(strip $(patsubst library, dll, $(TARGET)))
+ASSEMBLY_FILE = $(top_builddir)/bin/$(ASSEMBLY).$(ASSEMBLY_EXTENSION)
+INSTALL_DIR_RESOLVED = $(firstword $(subst , $(DEFAULT_INSTALL_DIR), $(INSTALL_DIR)))
+ at ENABLE_TESTS_TRUE@ENABLE_TESTS_FLAG = "-define:ENABLE_TESTS"
+ at ENABLE_ATK_TRUE@ENABLE_ATK_FLAG = "-define:ENABLE_ATK"
+FILTERED_LINK = $(shell echo "$(LINK)" | $(UNIQUE_FILTER_PIPE))
+DEP_LINK = $(shell echo "$(LINK)" | $(UNIQUE_FILTER_PIPE) | sed s,-r:,,g | grep '$(top_builddir)/bin/')
+OUTPUT_FILES = \
+ $(ASSEMBLY_FILE) \
+ $(ASSEMBLY_FILE).mdb
+
+moduledir = $(INSTALL_DIR_RESOLVED)
+module_SCRIPTS = $(OUTPUT_FILES)
+EXTRA_DIST = $(SOURCES_BUILD) $(RESOURCES_EXPANDED) $(THEME_ICONS_SOURCE)
+CLEANFILES = $(OUTPUT_FILES) $(ASSEMBLY_FILE).config
+DISTCLEANFILES = *.pidb
+MAINTAINERCLEANFILES = Makefile.in
all: all-am
.SUFFIXES:
-$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(top_srcdir)/Makefile.addins $(top_srcdir)/Makefile.include $(am__configure_deps)
+$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(top_srcdir)/build/build.mk $(top_srcdir)/build/build.environment.mk $(top_srcdir)/build/build.rules.mk $(am__configure_deps)
@for dep in $?; do \
case '$(am__configure_deps)' in \
*$$dep*) \
@@ -399,32 +568,46 @@ $(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps)
$(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps)
cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
$(am__aclocal_m4_deps):
+install-moduleSCRIPTS: $(module_SCRIPTS)
+ @$(NORMAL_INSTALL)
+ test -z "$(moduledir)" || $(MKDIR_P) "$(DESTDIR)$(moduledir)"
+ @list='$(module_SCRIPTS)'; test -n "$(moduledir)" || list=; \
+ for p in $$list; do \
+ if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \
+ if test -f "$$d$$p"; then echo "$$d$$p"; echo "$$p"; else :; fi; \
+ done | \
+ sed -e 'p;s,.*/,,;n' \
+ -e 'h;s|.*|.|' \
+ -e 'p;x;s,.*/,,;$(transform)' | sed 'N;N;N;s,\n, ,g' | \
+ $(AWK) 'BEGIN { files["."] = ""; dirs["."] = 1; } \
+ { d=$$3; if (dirs[d] != 1) { print "d", d; dirs[d] = 1 } \
+ if ($$2 == $$4) { files[d] = files[d] " " $$1; \
+ if (++n[d] == $(am__install_max)) { \
+ print "f", d, files[d]; n[d] = 0; files[d] = "" } } \
+ else { print "f", d "/" $$4, $$1 } } \
+ END { for (d in files) print "f", d, files[d] }' | \
+ while read type dir files; do \
+ if test "$$dir" = .; then dir=; else dir=/$$dir; fi; \
+ test -z "$$files" || { \
+ echo " $(INSTALL_SCRIPT) $$files '$(DESTDIR)$(moduledir)$$dir'"; \
+ $(INSTALL_SCRIPT) $$files "$(DESTDIR)$(moduledir)$$dir" || exit $$?; \
+ } \
+ ; done
+
+uninstall-moduleSCRIPTS:
+ @$(NORMAL_UNINSTALL)
+ @list='$(module_SCRIPTS)'; test -n "$(moduledir)" || exit 0; \
+ files=`for p in $$list; do echo "$$p"; done | \
+ sed -e 's,.*/,,;$(transform)'`; \
+ test -n "$$list" || exit 0; \
+ echo " ( cd '$(DESTDIR)$(moduledir)' && rm -f" $$files ")"; \
+ cd "$(DESTDIR)$(moduledir)" && rm -f $$files
mostlyclean-libtool:
-rm -f *.lo
clean-libtool:
-rm -rf .libs _libs
-install-addinDATA: $(addin_DATA)
- @$(NORMAL_INSTALL)
- test -z "$(addindir)" || $(MKDIR_P) "$(DESTDIR)$(addindir)"
- @list='$(addin_DATA)'; test -n "$(addindir)" || list=; \
- for p in $$list; do \
- if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \
- echo "$$d$$p"; \
- done | $(am__base_list) | \
- while read files; do \
- echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(addindir)'"; \
- $(INSTALL_DATA) $$files "$(DESTDIR)$(addindir)" || exit $$?; \
- done
-
-uninstall-addinDATA:
- @$(NORMAL_UNINSTALL)
- @list='$(addin_DATA)'; test -n "$(addindir)" || list=; \
- files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \
- test -n "$$files" || exit 0; \
- echo " ( cd '$(DESTDIR)$(addindir)' && rm -f" $$files ")"; \
- cd "$(DESTDIR)$(addindir)" && rm -f $$files
tags: TAGS
TAGS:
@@ -464,9 +647,9 @@ distdir: $(DISTFILES)
done
check-am: all-am
check: check-am
-all-am: Makefile $(DATA)
+all-am: Makefile $(SCRIPTS)
installdirs:
- for dir in "$(DESTDIR)$(addindir)"; do \
+ for dir in "$(DESTDIR)$(moduledir)"; do \
test -z "$$dir" || $(MKDIR_P) "$$dir"; \
done
install: install-am
@@ -491,10 +674,12 @@ clean-generic:
distclean-generic:
-test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
-test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES)
+ -test -z "$(DISTCLEANFILES)" || rm -f $(DISTCLEANFILES)
maintainer-clean-generic:
@echo "This command is intended for maintainers to use"
@echo "it deletes files that may require special tools to rebuild."
+ -test -z "$(MAINTAINERCLEANFILES)" || rm -f $(MAINTAINERCLEANFILES)
clean: clean-am
clean-am: clean-generic clean-libtool mostlyclean-am
@@ -515,7 +700,7 @@ info: info-am
info-am:
-install-data-am: install-addinDATA
+install-data-am: install-data-local install-moduleSCRIPTS
install-dvi: install-dvi-am
@@ -559,28 +744,72 @@ ps: ps-am
ps-am:
-uninstall-am: uninstall-addinDATA
+uninstall-am: uninstall-local uninstall-moduleSCRIPTS
.MAKE: install-am install-strip
.PHONY: all all-am check check-am clean clean-generic clean-libtool \
distclean distclean-generic distclean-libtool distdir dvi \
- dvi-am html html-am info info-am install install-addinDATA \
- install-am install-data install-data-am install-dvi \
+ dvi-am html html-am info info-am install install-am \
+ install-data install-data-am install-data-local 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-generic mostlyclean-libtool pdf pdf-am ps ps-am \
- uninstall uninstall-addinDATA uninstall-am
-
-
-mpack: $(ASSEMBLY)
- mautil p $(ASSEMBLY)
-
-$(ASSEMBLY): $(addin_SOURCES) $(dep_resources)
- $(CSC_LIB) -out:$@ $(addin_extraflags) $(build_sources) $(build_references) $(build_packages) $(build_resources)
+ install-moduleSCRIPTS install-pdf install-pdf-am install-ps \
+ install-ps-am install-strip installcheck installcheck-am \
+ installdirs maintainer-clean maintainer-clean-generic \
+ mostlyclean mostlyclean-generic mostlyclean-libtool pdf pdf-am \
+ ps ps-am uninstall uninstall-am uninstall-local \
+ uninstall-moduleSCRIPTS
+
+
+all: $(ASSEMBLY_FILE) theme-icons
+
+run:
+ @pushd $(top_builddir); \
+ make run; \
+ popd;
+
+# uncommented for now.
+# tests are currently excuted from Makefile in $(top_builddir)
+#test:
+# @pushd $(top_builddir)/tests; \
+# make $(ASSEMBLY); \
+# popd;
+
+build-debug:
+ @echo $(DEP_LINK)
+
+$(ASSEMBLY_FILE).mdb: $(ASSEMBLY_FILE)
+
+$(ASSEMBLY_FILE): $(SOURCES_BUILD) $(RESOURCES_EXPANDED) $(DEP_LINK)
+ @mkdir -p $(top_builddir)/bin
+ @if [ ! "x$(ENABLE_RELEASE)" = "xyes" ]; then \
+ $(top_srcdir)/build/dll-map-makefile-verifier $(srcdir)/Makefile.am $(srcdir)/$(notdir $@.config) && \
+ $(MONO) $(top_builddir)/build/dll-map-verifier.exe $(srcdir)/$(notdir $@.config) -iwinmm -ilibbanshee -ilibbnpx11 -ilibc -ilibc.so.6 -iintl -ilibmtp.dll -ilibigemacintegration.dylib -iCFRelease $(SOURCES_BUILD); \
+ fi;
+ $(MCS) \
+ $(GMCS_FLAGS) \
+ $(ASSEMBLY_BUILD_FLAGS) \
+ -nowarn:0278 -nowarn:0078 $$warn \
+ -define:HAVE_GTK_2_10 -define:NET_2_0 \
+ -debug -target:$(TARGET) -out:$@ \
+ $(BUILD_DEFINES) $(ENABLE_TESTS_FLAG) $(ENABLE_ATK_FLAG) \
+ $(FILTERED_LINK) $(RESOURCES_BUILD) $(SOURCES_BUILD)
+ @if [ -e $(srcdir)/$(notdir $@.config) ]; then \
+ cp $(srcdir)/$(notdir $@.config) $(top_builddir)/bin; \
+ fi;
+ @if [ ! -z "$(EXTRA_BUNDLE)" ]; then \
+ cp $(EXTRA_BUNDLE) $(top_builddir)/bin; \
+ fi;
+
+theme-icons: $(THEME_ICONS_SOURCE)
+ @$(INSTALL_ICONS) -il "$(BUILD_DATA_DIR)" "$(srcdir)" $(THEME_ICONS_RELATIVE)
+
+install-data-local: $(THEME_ICONS_SOURCE)
+ @$(INSTALL_ICONS) -i "$(DESTDIR)$(pkgdatadir)" "$(srcdir)" $(THEME_ICONS_RELATIVE)
+
+uninstall-local: $(THEME_ICONS_SOURCE)
+ @$(INSTALL_ICONS) -u "$(DESTDIR)$(pkgdatadir)" "$(srcdir)" $(THEME_ICONS_RELATIVE)
# 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/extensions/Tools/LiveWebGallery/PhotoRequestHandler.cs b/extensions/Tools/LiveWebGallery/PhotoRequestHandler.cs
index 0885a60..508ed81 100644
--- a/extensions/Tools/LiveWebGallery/PhotoRequestHandler.cs
+++ b/extensions/Tools/LiveWebGallery/PhotoRequestHandler.cs
@@ -14,6 +14,7 @@ using System.Text;
using FSpot;
using FSpot.Filters;
using FSpot.Utils;
+using Hyena;
namespace LiveWebGalleryExtension
{
@@ -36,7 +37,7 @@ namespace LiveWebGalleryExtension
protected virtual void SendImage (Photo photo, Stream stream)
{
- string path = photo.DefaultVersionUri.LocalPath;
+ string path = photo.DefaultVersion.Uri.LocalPath;
FileInfo file_info = new FileInfo(path);
if (!file_info.Exists) {
SendError (stream, "404 The file is not on the disk");
@@ -48,7 +49,7 @@ namespace LiveWebGalleryExtension
filters.Add (new ResizeFilter (1600));
filters.Add (new OrientationFilter ());
- using (FilterRequest request = new FilterRequest (photo.DefaultVersionUri)) {
+ using (FilterRequest request = new FilterRequest (photo.DefaultVersion.Uri)) {
filters.Convert (request);
file_info = new FileInfo (request.Current.LocalPath);
SendFile (file_info, photo, stream);
@@ -61,7 +62,7 @@ namespace LiveWebGalleryExtension
protected void SendFile (FileInfo file, Photo photo, Stream dest)
{
stats.BytesSent += (int)file.Length;
- Log.Debug ("Sending {0}, {1} kb", file.FullName, file.Length / 1024);
+ Log.DebugFormat ("Sending {0}, {1} kb", file.FullName, file.Length / 1024);
SendHeadersAndStartContent(dest, "Content-Type: " + MimeTypeForExt (file.Extension),
"Content-Length: " + file.Length,
"Last-Modified: " + photo.Time.ToString ("r"));
@@ -82,7 +83,7 @@ namespace LiveWebGalleryExtension
protected override void SendImage (Photo photo, Stream dest)
{
- Gdk.Pixbuf thumb = FSpot.Platform.ThumbnailFactory.LoadThumbnail (photo.DefaultVersionUri);
+ Gdk.Pixbuf thumb = XdgThumbnailSpec.LoadThumbnail (photo.DefaultVersion.Uri, ThumbnailSize.Large);
byte[] buf = thumb.SaveToBuffer ("png");
SendHeadersAndStartContent(dest, "Content-Type: " + MimeTypeForExt (".png"),
"Content-Length: " + buf.Length,
diff --git a/extensions/Tools/LiveWebGallery/SimpleWebServer.cs b/extensions/Tools/LiveWebGallery/SimpleWebServer.cs
index 9a07637..2cec0bd 100644
--- a/extensions/Tools/LiveWebGallery/SimpleWebServer.cs
+++ b/extensions/Tools/LiveWebGallery/SimpleWebServer.cs
@@ -18,7 +18,7 @@ using System.Threading;
using FSpot;
using FSpot.Extensions;
-using FSpot.Utils;
+using Hyena;
namespace LiveWebGalleryExtension
{
diff --git a/extensions/Tools/LiveWebGallery/ui/empty.png b/extensions/Tools/LiveWebGallery/ui/empty.png
deleted file mode 100644
index 49b383b..0000000
Binary files a/extensions/Tools/LiveWebGallery/ui/empty.png and /dev/null differ
diff --git a/extensions/Tools/Makefile.in b/extensions/Tools/Makefile.in
index ddd9b19..63461bc 100644
--- a/extensions/Tools/Makefile.in
+++ b/extensions/Tools/Makefile.in
@@ -38,8 +38,14 @@ DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in
ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
am__aclocal_m4_deps = $(top_srcdir)/build/m4/shave/shave.m4 \
$(top_srcdir)/build/m4/shamrock/expansions.m4 \
+ $(top_srcdir)/build/m4/shamrock/gnome-doc.m4 \
$(top_srcdir)/build/m4/shamrock/mono.m4 \
+ $(top_srcdir)/build/m4/shamrock/nunit.m4 \
$(top_srcdir)/build/m4/shamrock/programs.m4 \
+ $(top_srcdir)/build/m4/f-spot/flickrnet.m4 \
+ $(top_srcdir)/build/m4/f-spot/gnome-keyring-sharp.m4 \
+ $(top_srcdir)/build/m4/f-spot/gtk-sharp.m4 \
+ $(top_srcdir)/build/m4/f-spot/mono-addins.m4 \
$(top_srcdir)/acinclude.m4 $(top_srcdir)/configure.ac
am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
$(ACLOCAL_M4)
@@ -134,6 +140,8 @@ EXIF_SOVERSION = @EXIF_SOVERSION@
F77 = @F77@
FC = @FC@
FGREP = @FGREP@
+FLICKRNET_CFLAGS = @FLICKRNET_CFLAGS@
+FLICKRNET_LIBS = @FLICKRNET_LIBS@
F_CFLAGS = @F_CFLAGS@
F_LIBS = @F_LIBS@
GAPI2CODEGEN = @GAPI2CODEGEN@
@@ -147,6 +155,8 @@ GCONF_SHARP_LIBS = @GCONF_SHARP_LIBS@
GETTEXT_PACKAGE = @GETTEXT_PACKAGE@
GIO_CFLAGS = @GIO_CFLAGS@
GIO_LIBS = @GIO_LIBS@
+GLIBSHARP_2_12_7_CFLAGS = @GLIBSHARP_2_12_7_CFLAGS@
+GLIBSHARP_2_12_7_LIBS = @GLIBSHARP_2_12_7_LIBS@
GLIBSHARP_CFLAGS = @GLIBSHARP_CFLAGS@
GLIBSHARP_LIBS = @GLIBSHARP_LIBS@
GLIB_CFLAGS = @GLIB_CFLAGS@
@@ -162,6 +172,10 @@ GNOME_SHARP_CFLAGS = @GNOME_SHARP_CFLAGS@
GNOME_SHARP_LIBS = @GNOME_SHARP_LIBS@
GOBJECT_QUERY = @GOBJECT_QUERY@
GREP = @GREP@
+GTKSHARP_A11Y_CFLAGS = @GTKSHARP_A11Y_CFLAGS@
+GTKSHARP_A11Y_LIBS = @GTKSHARP_A11Y_LIBS@
+GTKSHARP_CFLAGS = @GTKSHARP_CFLAGS@
+GTKSHARP_LIBS = @GTKSHARP_LIBS@
HELP_DIR = @HELP_DIR@
ICONS_DIRECTORY = @ICONS_DIRECTORY@
INSTALL = @INSTALL@
@@ -175,14 +189,14 @@ INTLTOOL_EXTRACT = @INTLTOOL_EXTRACT@
INTLTOOL_MERGE = @INTLTOOL_MERGE@
INTLTOOL_PERL = @INTLTOOL_PERL@
INTLTOOL_UPDATE = @INTLTOOL_UPDATE@
+KEYRINGSHARP_CFLAGS = @KEYRINGSHARP_CFLAGS@
+KEYRINGSHARP_LIBS = @KEYRINGSHARP_LIBS@
LCMS_CFLAGS = @LCMS_CFLAGS@
LCMS_LIBS = @LCMS_LIBS@
LD = @LD@
LDFLAGS = @LDFLAGS@
LIBEXIF_VERSION_CHECK_CFLAGS = @LIBEXIF_VERSION_CHECK_CFLAGS@
LIBEXIF_VERSION_CHECK_LIBS = @LIBEXIF_VERSION_CHECK_LIBS@
-LIBGPHOTO2_CFLAGS = @LIBGPHOTO2_CFLAGS@
-LIBGPHOTO2_LIBS = @LIBGPHOTO2_LIBS@
LIBJPEG = @LIBJPEG@
LIBOBJS = @LIBOBJS@
LIBS = @LIBS@
@@ -197,6 +211,12 @@ MCS = @MCS@
MKDIR_P = @MKDIR_P@
MKINSTALLDIRS = @MKINSTALLDIRS@
MONO = @MONO@
+MONO_ADDINS_CFLAGS = @MONO_ADDINS_CFLAGS@
+MONO_ADDINS_GUI_CFLAGS = @MONO_ADDINS_GUI_CFLAGS@
+MONO_ADDINS_GUI_LIBS = @MONO_ADDINS_GUI_LIBS@
+MONO_ADDINS_LIBS = @MONO_ADDINS_LIBS@
+MONO_ADDINS_SETUP_CFLAGS = @MONO_ADDINS_SETUP_CFLAGS@
+MONO_ADDINS_SETUP_LIBS = @MONO_ADDINS_SETUP_LIBS@
MONO_MODULE_CFLAGS = @MONO_MODULE_CFLAGS@
MONO_MODULE_LIBS = @MONO_MODULE_LIBS@
MSGFMT = @MSGFMT@
@@ -207,7 +227,6 @@ NDESK_DBUS_LIBS = @NDESK_DBUS_LIBS@
NM = @NM@
NMEDIT = @NMEDIT@
NUNIT_CFLAGS = @NUNIT_CFLAGS@
-NUNIT_DEFINES = @NUNIT_DEFINES@
NUNIT_LIBS = @NUNIT_LIBS@
OBJC = @OBJC@
OBJDUMP = @OBJDUMP@
diff --git a/extensions/Tools/MergeDb/Makefile.am b/extensions/Tools/MergeDb/Makefile.am
index a59b482..7aa6041 100644
--- a/extensions/Tools/MergeDb/Makefile.am
+++ b/extensions/Tools/MergeDb/Makefile.am
@@ -1,24 +1,15 @@
-addin = MergeDb
-
-addin_manifest = $(addin).addin.xml
-
-addin_sources = \
- $(addin).cs \
- MergeDbDialog.cs \
+ASSEMBLY = FSpot.Exporters.MergeDb
+TARGET = library
+LINK = $(REF_FSPOT_EXTENSION_MERGEDB)
+INSTALL_DIR = $(EXTENSIONS_INSTALL_DIR)
+
+SOURCES = \
+ MergeDb.cs \
+ MergeDbDialog.cs \
PickFolderDialog.cs
-addin_resources = \
- $(addin_manifest) \
- $(addin).glade
-
-addin_references = \
- Mono.Posix
-
-addin_packages = \
- gtk-sharp-2.0 \
- glade-sharp-2.0
-
-addin_extradist =
-
-include $(top_srcdir)/Makefile.addins
+RESOURCES = \
+ MergeDb.addin.xml \
+ MergeDb.glade
+include $(top_srcdir)/build/build.mk
diff --git a/extensions/Tools/MergeDb/Makefile.in b/extensions/Tools/MergeDb/Makefile.in
index 22022cb..08f5e36 100644
--- a/extensions/Tools/MergeDb/Makefile.in
+++ b/extensions/Tools/MergeDb/Makefile.in
@@ -35,13 +35,22 @@ POST_UNINSTALL = :
build_triplet = @build@
host_triplet = @host@
DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in \
- $(top_srcdir)/Makefile.addins $(top_srcdir)/Makefile.include
+ $(top_srcdir)/build/build.environment.mk \
+ $(top_srcdir)/build/build.mk \
+ $(top_srcdir)/build/build.rules.mk
+ at ENABLE_TESTS_TRUE@am__append_1 = " $(NUNIT_LIBS)"
subdir = extensions/Tools/MergeDb
ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
am__aclocal_m4_deps = $(top_srcdir)/build/m4/shave/shave.m4 \
$(top_srcdir)/build/m4/shamrock/expansions.m4 \
+ $(top_srcdir)/build/m4/shamrock/gnome-doc.m4 \
$(top_srcdir)/build/m4/shamrock/mono.m4 \
+ $(top_srcdir)/build/m4/shamrock/nunit.m4 \
$(top_srcdir)/build/m4/shamrock/programs.m4 \
+ $(top_srcdir)/build/m4/f-spot/flickrnet.m4 \
+ $(top_srcdir)/build/m4/f-spot/gnome-keyring-sharp.m4 \
+ $(top_srcdir)/build/m4/f-spot/gtk-sharp.m4 \
+ $(top_srcdir)/build/m4/f-spot/mono-addins.m4 \
$(top_srcdir)/acinclude.m4 $(top_srcdir)/configure.ac
am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
$(ACLOCAL_M4)
@@ -49,8 +58,6 @@ mkinstalldirs = $(install_sh) -d
CONFIG_HEADER = $(top_builddir)/config.h
CONFIG_CLEAN_FILES =
CONFIG_CLEAN_VPATH_FILES =
-SOURCES =
-DIST_SOURCES =
am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`;
am__vpath_adj = case $$p in \
$(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \
@@ -72,8 +79,9 @@ am__nobase_list = $(am__nobase_strip_setup); \
am__base_list = \
sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \
sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g'
-am__installdirs = "$(DESTDIR)$(addindir)"
-DATA = $(addin_DATA)
+am__installdirs = "$(DESTDIR)$(moduledir)"
+SCRIPTS = $(module_SCRIPTS)
+DIST_SOURCES =
DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
ACLOCAL = @ACLOCAL@
ACLOCAL_AMFLAGS = @ACLOCAL_AMFLAGS@
@@ -119,6 +127,8 @@ EXIF_SOVERSION = @EXIF_SOVERSION@
F77 = @F77@
FC = @FC@
FGREP = @FGREP@
+FLICKRNET_CFLAGS = @FLICKRNET_CFLAGS@
+FLICKRNET_LIBS = @FLICKRNET_LIBS@
F_CFLAGS = @F_CFLAGS@
F_LIBS = @F_LIBS@
GAPI2CODEGEN = @GAPI2CODEGEN@
@@ -132,6 +142,8 @@ GCONF_SHARP_LIBS = @GCONF_SHARP_LIBS@
GETTEXT_PACKAGE = @GETTEXT_PACKAGE@
GIO_CFLAGS = @GIO_CFLAGS@
GIO_LIBS = @GIO_LIBS@
+GLIBSHARP_2_12_7_CFLAGS = @GLIBSHARP_2_12_7_CFLAGS@
+GLIBSHARP_2_12_7_LIBS = @GLIBSHARP_2_12_7_LIBS@
GLIBSHARP_CFLAGS = @GLIBSHARP_CFLAGS@
GLIBSHARP_LIBS = @GLIBSHARP_LIBS@
GLIB_CFLAGS = @GLIB_CFLAGS@
@@ -147,6 +159,10 @@ GNOME_SHARP_CFLAGS = @GNOME_SHARP_CFLAGS@
GNOME_SHARP_LIBS = @GNOME_SHARP_LIBS@
GOBJECT_QUERY = @GOBJECT_QUERY@
GREP = @GREP@
+GTKSHARP_A11Y_CFLAGS = @GTKSHARP_A11Y_CFLAGS@
+GTKSHARP_A11Y_LIBS = @GTKSHARP_A11Y_LIBS@
+GTKSHARP_CFLAGS = @GTKSHARP_CFLAGS@
+GTKSHARP_LIBS = @GTKSHARP_LIBS@
HELP_DIR = @HELP_DIR@
ICONS_DIRECTORY = @ICONS_DIRECTORY@
INSTALL = @INSTALL@
@@ -160,14 +176,14 @@ INTLTOOL_EXTRACT = @INTLTOOL_EXTRACT@
INTLTOOL_MERGE = @INTLTOOL_MERGE@
INTLTOOL_PERL = @INTLTOOL_PERL@
INTLTOOL_UPDATE = @INTLTOOL_UPDATE@
+KEYRINGSHARP_CFLAGS = @KEYRINGSHARP_CFLAGS@
+KEYRINGSHARP_LIBS = @KEYRINGSHARP_LIBS@
LCMS_CFLAGS = @LCMS_CFLAGS@
LCMS_LIBS = @LCMS_LIBS@
LD = @LD@
LDFLAGS = @LDFLAGS@
LIBEXIF_VERSION_CHECK_CFLAGS = @LIBEXIF_VERSION_CHECK_CFLAGS@
LIBEXIF_VERSION_CHECK_LIBS = @LIBEXIF_VERSION_CHECK_LIBS@
-LIBGPHOTO2_CFLAGS = @LIBGPHOTO2_CFLAGS@
-LIBGPHOTO2_LIBS = @LIBGPHOTO2_LIBS@
LIBJPEG = @LIBJPEG@
LIBOBJS = @LIBOBJS@
LIBS = @LIBS@
@@ -182,6 +198,12 @@ MCS = @MCS@
MKDIR_P = @MKDIR_P@
MKINSTALLDIRS = @MKINSTALLDIRS@
MONO = @MONO@
+MONO_ADDINS_CFLAGS = @MONO_ADDINS_CFLAGS@
+MONO_ADDINS_GUI_CFLAGS = @MONO_ADDINS_GUI_CFLAGS@
+MONO_ADDINS_GUI_LIBS = @MONO_ADDINS_GUI_LIBS@
+MONO_ADDINS_LIBS = @MONO_ADDINS_LIBS@
+MONO_ADDINS_SETUP_CFLAGS = @MONO_ADDINS_SETUP_CFLAGS@
+MONO_ADDINS_SETUP_LIBS = @MONO_ADDINS_SETUP_LIBS@
MONO_MODULE_CFLAGS = @MONO_MODULE_CFLAGS@
MONO_MODULE_LIBS = @MONO_MODULE_LIBS@
MSGFMT = @MSGFMT@
@@ -192,7 +214,6 @@ NDESK_DBUS_LIBS = @NDESK_DBUS_LIBS@
NM = @NM@
NMEDIT = @NMEDIT@
NUNIT_CFLAGS = @NUNIT_CFLAGS@
-NUNIT_DEFINES = @NUNIT_DEFINES@
NUNIT_LIBS = @NUNIT_LIBS@
OBJC = @OBJC@
OBJDUMP = @OBJDUMP@
@@ -284,86 +305,234 @@ target_alias = @target_alias@
top_build_prefix = @top_build_prefix@
top_builddir = @top_builddir@
top_srcdir = @top_srcdir@
-addin = MergeDb
-addin_manifest = $(addin).addin.xml
-addin_sources = \
- $(addin).cs \
- MergeDbDialog.cs \
+ASSEMBLY = FSpot.Exporters.MergeDb
+TARGET = library
+LINK = $(REF_FSPOT_EXTENSION_MERGEDB) $(am__append_1)
+INSTALL_DIR = $(EXTENSIONS_INSTALL_DIR)
+SOURCES = \
+ MergeDb.cs \
+ MergeDbDialog.cs \
PickFolderDialog.cs
-addin_resources = \
- $(addin_manifest) \
- $(addin).glade
+RESOURCES = \
+ MergeDb.addin.xml \
+ MergeDb.glade
-addin_references = \
- Mono.Posix
-addin_packages = \
- gtk-sharp-2.0 \
- glade-sharp-2.0
+# Initializers
+MONO_BASE_PATH =
+MONO_ADDINS_PATH =
-addin_extradist =
-ASSEMBLY = $(addin).dll
+# Install Paths
+DEFAULT_INSTALL_DIR = $(pkglibdir)
+BACKENDS_INSTALL_DIR = $(DEFAULT_INSTALL_DIR)/Backends
+EXTENSIONS_INSTALL_DIR = $(DEFAULT_INSTALL_DIR)/Extensions
DIR_DOCS = $(top_builddir)/docs
DIR_EXTENSIONS = $(top_builddir)/extensions
-DIR_GPHOTO2 = $(top_builddir)/lib/libgphoto2-sharp
DIR_ICONS = $(top_builddir)/icons
DIR_JPEGTRAN = $(top_builddir)/lib/libjpegtran
-DIR_KEYRING = $(top_builddir)/lib/gnome-keyring-sharp
DIR_LIBFSPOT = $(top_builddir)/lib/libfspot
DIR_SEMWEB = $(top_builddir)/lib/semweb
DIR_SRC = $(top_builddir)/src
DIR_GIOSHARP = $(top_builddir)/lib/gio-sharp/gio
DIR_GTKSHARPBEANS = $(top_builddir)/lib/gtk-sharp-beans
DIR_UNIQUESHARP = $(top_builddir)/lib/unique-sharp/unique
-LINK_KEYRING = -r:$(DIR_KEYRING)/gnome-keyring-sharp.dll
-LINK_GPHOTO2 = -r:$(DIR_GPHOTO2)/libgphoto2-sharp.dll
-LINK_SEMWEB = -r:$(DIR_SEMWEB)/SemWeb.dll
-LINK_GIOSHARP = -r:$(DIR_GIOSHARP)/gio-sharp.dll
-LINK_GTKSHARPBEANS = -r:$(DIR_GTKSHARPBEANS)/gtk-sharp-beans.dll
-LINK_UNIQUESHARP = -r:$(DIR_UNIQUESHARP)/unique-sharp.dll
-CSC_FLAGS = -debug
-CSC = $(MCS) $(CSC_FLAGS) -target:exe
-CSC_LIB = $(MCS) $(CSC_FLAGS) -target:library
-MONO_DEBUGFLAGS = --debug
-RUNTIME = mono $(MONO_DEBUGFLAGS)
-dep_resources = $(addprefix $(srcdir)/, $(addin_resources))
-build_resources = $(foreach res, $(dep_resources), $(addprefix -resource:, $(res)),$(notdir $(res)))
-build_sources = $(addprefix $(srcdir)/, $(addin_sources))
-build_packages = \
- $(addprefix -pkg:, $(addin_packages)) \
- -pkg:mono-addins
-
-build_references = \
- $(addprefix -r:, $(addin_references)) \
- -r:$(top_builddir)/src/f-spot.exe \
- -r:$(top_builddir)/src/Cms.dll \
- -r:$(top_builddir)/src/FSpot.Core.dll \
- -r:$(top_builddir)/src/FSpot.Platform.dll \
- -r:$(top_builddir)/src/FSpot.Query.dll \
- -r:$(top_builddir)/src/FSpot.Utils.dll \
- -r:$(top_builddir)/src/FSpot.Widgets.dll \
- $(LINK_SEMWEB) \
- $(LINK_GPHOTO2) \
- $(LINK_GIOSHARP) \
- $(LINK_UNIQUESHARP) \
- $(LINK_GTKSHARPBEANS)
-
-addin_SOURCES = \
- $(build_sources)
-
-addindir = $(pkglibdir)/extensions
-addin_DATA = $(ASSEMBLY)
-CLEANFILES = $(ASSEMBLY) $(ASSEMBLY).mdb *.mpack
-EXTRA_DIST = \
- $(build_sources) \
- $(dep_resources) \
- $(addin_extradist)
-
+DIR_BIN = $(top_builddir)/bin
+
+# External libraries to link against, generated from configure
+LINK_SYSTEM = -r:System
+LINK_SYSTEMDATA = -r:System.Data
+LINK_SYSTEM_WEB = -r:System.Web
+LINK_MONO_POSIX = -r:Mono.Posix
+LINK_MONO_CAIRO = -r:Mono.Cairo
+LINK_MONO_SIMD = -r:Mono.Simd
+LINK_MONODATA = -r:Mono.Data
+LINK_MONO_DATA_SQLITECLIENT = -r:Mono.Data.SqliteClient
+LINK_ICSHARP_ZIP_LIB = -r:ICSharpCode.SharpZipLib
+LINK_KEYRING = $(KEYRINGSHARP_LIBS)
+LINK_GLIB = $(GLIBSHARP_LIBS)
+LINK_GTK = $(GTKSHARP_LIBS)
+LINK_GNOME = $(GNOME_SHARP_LIBS)
+LINK_GCONF = $(GCONF_SHARP_LIBS)
+LINK_GLADE = -pkg:glade-sharp-2.0
+LINK_FLICKRNET = -pkg:flickrnet
+LINK_DBUS = $(NDESK_DBUS_LIBS) $(NDESK_DBUS_GLIB_LIBS)
+LINK_DBUS_NO_GLIB = $(NDESK_DBUS_LIBS)
+LINK_MONO_ADDINS_DEPS = $(MONO_ADDINS_LIBS)
+LINK_MONO_ADDINS_SETUP_DEPS = $(MONO_ADDINS_SETUP_LIBS)
+LINK_MONO_ADDINS_GUI_DEPS = $(MONO_ADDINS_GUI_LIBS)
+
+# GIO
+REF_GIO =
+LINK_GIO = -r:$(DIR_GIOSHARP)/gio-sharp.dll
+LINK_GIO_DEPS = $(REF_GIO) $(LINK_GIO)
+
+# Gtk Beans
+REF_GTK_BEANS = $(LINK_GIO_DEPS)
+LINK_GTK_BEANS = -r:$(DIR_GTKSHARPBEANS)/gtk-sharp-beans.dll
+LINK_GTK_BEANS_DEPS = $(REF_GTK_BEANS) $(LINK_GTK_BEANS)
+
+# Uniqe
+REF_UNIQUE =
+LINK_UNIQUE = -r:$(DIR_UNIQUESHARP)/unique-sharp.dll
+LINK_UNIQUE_DEPS = $(REF_UNIQUE) $(LINK_UNIQUE)
+
+# Hyena
+REF_HYENA = $(LINK_SYSTEM) $(LINK_MONO_POSIX)
+LINK_HYENA = -r:$(DIR_BIN)/Hyena.dll
+LINK_HYENA_DEPS = $(REF_HYENA) $(LINK_HYENA)
+
+# Semweb
+REF_SEMWEB = $(LINK_SYSTEMDATA) $(LINK_HYENA_DEPS)
+LINK_SEMWEB = -r:$(DIR_BIN)/SemWeb.dll
+LINK_SEMWEB_DEPS = $(REF_SEMWEB) $(LINK_SEMWEB)
+
+# Hyena.Data.Sqlite
+REF_HYENA_DATA_SQLITE = $(LINK_SQLITE)
+LINK_HYENA_DATA_SQLITE = -r:$(DIR_BIN)/Hyena.Data.Sqlite.dll
+LINK_HYENA_DATA_SQLITE_DEPS = $(REF_HYENA_DATA_SQLITE) $(LINK_HYENA_DATA_SQLITE)
+
+# Hyena.Gui
+REF_HYENA_GUI = $(LINK_HYENA_DEPS)
+LINK_HYENA_GUI = -r:$(DIR_BIN)/Hyena.Gui.dll
+LINK_HENA_GUI_DEPS = $(REF_HYENA_GUI) $(LINK_HYENA_GUI)
+
+# FSpot.Cms
+REF_FSPOT_CMS = $(LINK_GTK)
+LINK_FSPOT_CMS = -r:$(DIR_BIN)/FSpot.Cms.dll
+LINK_FSPOT_CMS_DEPS = $(REF_FSPOT_CMS) $(LINK_FSPOT_CMS)
+
+# FSpot.Utils
+REF_FSPOT_UTILS = $(LINK_HYENA_DEPS) $(LINK_GTK) $(LINK_GIO) $(LINK_MONO_CAIRO)
+LINK_FSPOT_UTILS = -r:$(DIR_BIN)/FSpot.Utils.dll
+LINK_FSPOT_UTILS_DEPS = $(REF_FSPOT_UTILS) $(LINK_FSPOT_UTILS)
+
+# FSpot.Core
+REF_FSPOT_CORE = $(LINK_FSPOT_UTILS_DEPS) $(LINK_FSPOT_CMS_DEPS)
+LINK_FSPOT_CORE = -r:$(DIR_BIN)/FSpot.Core.dll
+LINK_FSPOT_CORE_DEPS = $(REF_FSPOT_CORE) $(LINK_FSPOT_CORE)
+
+# FSpot.Query
+REF_FSPOT_QUERY = $(LINK_FSPOT_CORE_DEPS)
+LINK_FSPOT_QUERY = -r:$(DIR_BIN)/FSpot.Query.dll
+LINK_FSPOT_QUERY_DEPS = $(REF_FSPOT_QUERY) $(LINK_FSPOT_QUERY)
+
+# FSpot.JobScheduler
+REF_FSPOT_JOB_SCHEDULER = $(LINK_HYENA_DEPS)
+LINK_FSPOT_JOB_SCHEDULER = -r:$(DIR_BIN)/FSpot.JobScheduler.dll
+LINK_FSPOT_JOB_SCHEDULER_DEPS = $(REF_FSPOT_JOB_SCHEDULER) $(LINK_FSPOT_JOB_SCHEDULER)
+
+# FSpot.Bling
+REF_FSPOT_BLING = $(LINK_GTK_BEANS_DEPS) $(LINK_GLIB)
+LINK_FSPOT_BLING = -r:$(DIR_BIN)/FSpot.Bling.dll
+LINK_FSPOT_BLING_DEPS = $(REF_FSPOT_BLING) $(LINK_FSPOT_BLING)
+
+# FSpot.Platform
+REF_FSPOT_PLATFORM = $(LINK_GCONF) $(LINK_GTK) $(LINK_FSPOT_CORE_DEPS) $(LINK_DBUS)
+LINK_FSPOT_PLATFORM = -r:$(DIR_BIN)/FSpot.Platform.dll
+LINK_FSPOT_PLATFORM_DEPS = $(REF_FSPOT_PLATFORM) $(LINK_FSPOT_PLATFORM)
+
+# FSpot.Widgets
+REF_FSPOT_WIDGETS = $(LINK_FSPOT_CORE_DEPS) $(LINK_FSPOT_BLING_DEPS)
+LINK_FSPOT_WIDGETS = -r:$(DIR_BIN)/FSpot.Widgets.dll
+LINK_FSPOT_WIDGETS_DEPS = $(REF_FSPOT_WIDGETS) $(LINK_FSPOT_WIDGETS)
+
+# FSpot (executable)
+REF_FSPOT = $(LINK_FSPOT_WIDGETS_DEPS) $(LINK_FSPOT_PLATFORM_DEPS) $(LINK_FSPOT_QUERY_DEPS) \
+ $(LINK_GLIB) $(LINK_MONO_ADDINS_DEPS) $(LINK_UNIQUE_DEPS) $(LINK_MONO_ADDINS_SETUP_DEPS) \
+ $(LINK_SEMWEB_DEPS) $(LINK_GLADE) $(LINK_MONODATA) $(LINK_MONO_DATA_SQLITECLIENT) \
+ $(LINK_MONO_ADDINS_GUI_DEPS) $(LINK_FSPOT_JOB_SCHEDULER_DEPS) $(LINK_ICSHARP_ZIP_LIB) \
+ $(LINK_GNOME)
+
+# FIXME: do not link executables
+LINK_FSPOT = -r:$(DIR_BIN)/f-spot.exe
+LINK_FSPOT_DEPS = $(REF_FSPOT) $(LINK_FSPOT)
+
+# Extensions
+REF_FSPOT_EXTENSION_BLACKOUTEDITOR = $(LINK_FSPOT_DEPS)
+REF_FSPOT_EXTENSION_BWEDITOR = $(LINK_FSPOT_DEPS) $(LINK_MONO_SIMD)
+REF_FSPOT_EXTENSION_FLIPEDITOR = $(LINK_FSPOT_DEPS)
+REF_FSPOT_EXTENSION_PIXELATEEDITOR = $(LINK_FSPOT_DEPS)
+REF_FSPOT_EXTENSION_RESIZEEDITOR = $(LINK_FSPOT_DEPS)
+REF_FSPOT_EXTENSION_CDEXPORT = $(LINK_FSPOT_DEPS)
+REF_FSPOT_EXTENSION_FACEBOOKEXPORT = $(LINK_FSPOT_DEPS) $(LINK_KEYRING)
+REF_FSPOT_EXTENSION_FLICKREXPORT = $(LINK_FSPOT_DEPS) $(LINK_FLICKRNET)
+REF_FSPOT_EXTENSION_FOLDEREXPORT = $(LINK_FSPOT_DEPS) $(LINK_SYSTEM_WEB)
+REF_FSPOT_EXTENSION_GALLERYEXPORT = $(LINK_FSPOT_DEPS)
+REF_MONO_GOOGLE = $(LINK_HYENA_DEPS)
+LINK_MONO_GOOGLE = -r:$(DIR_BIN)/Mono.Google.dll
+LINK_MONO_GOOGLE_DEPS = $(REF_MONO_GOOGLE) $(LINK_MONO_GOOGLE)
+REF_FSPOT_EXTENSION_PICASAWEBEXPORT = $(LINK_FSPOT_DEPS) $(LINK_MONO_GOOGLE) $(LINK_KEYRING)
+REF_SMUGMUGNET = $(LINK_FSPOT_DEPS)
+LINK_SMUGMUGNET = -r:$(DIR_BIN)/SmugMugNet.dll
+LINK_SMUGMUGNET_DEPS = $(REF_SMUGMUGNET) $(LINK_SMUGMUGNET)
+REF_FSPOT_EXTENSION_SMUGMUGEXPORT = $(LINK_SMUGMUGNET_DEPS) $(LINK_KEYRING)
+REF_MONO_TABBLO = $(LINK_HYENA_DEPS)
+LINK_MONO_TABBLO = -r:$(DIR_BIN)/Mono.Tabblo.dll
+LINK_MONO_TABBLO_DEPS = $(REF_MONO_TABBLO) $(LINK_MONO_TABBLO)
+REF_FSPOT_EXTENSION_TABBLOEXPORT = $(LINK_FSPOT_DEPS) $(LINK_KEYRING) $(LINK_MONO_TABBLO_DEPS)
+REF_FSPOT_EXTENSION_ZIPEXPORT = $(LINK_FSPOT_DEPS)
+REF_FSPOT_EXTENSION_CHANGEPHOTOPATH = $(LINK_FSPOT_DEPS)
+REF_FSPOT_EXTENSION_DEVELOPINUFRAW = $(LINK_FSPOT_DEPS)
+REF_FSPOT_EXTENSION_HASHJOB = $(LINK_FSPOT_DEPS)
+REF_FSPOT_EXTENSION_LIVEWEBGALLERY = $(LINK_FSPOT_DEPS)
+REF_FSPOT_EXTENSION_MERGEDB = $(LINK_FSPOT_DEPS)
+REF_FSPOT_EXTENSION_RAWPLUSJPEG = $(LINK_FSPOT_DEPS)
+REF_FSPOT_EXTENSION_RETROACTIVEROLL = $(LINK_FSPOT_DEPS)
+REF_FSPOT_EXTENSION_SCREENSAVERCONFIG = $(LINK_FSPOT_DEPS)
+REF_FSPOT_EXTENSION_COVERTRANSITION = $(LINK_FSPOT_DEPS)
+
+# Cute hack to replace a space with something
+colon := :
+empty :=
+space := $(empty) $(empty)
+
+# Build path to allow running uninstalled
+RUN_PATH = $(subst $(space),$(colon), $(MONO_BASE_PATH))
+UNIQUE_FILTER_PIPE = tr [:space:] \\n | sort | uniq
+BUILD_DATA_DIR = $(top_builddir)/bin/share/$(PACKAGE)
+
+# Since all other attempts failed, we currently go this way:
+# This code adds the file specified in ASSEMBLY_INFO_SOURCE to SOURCES_BUILD.
+# If no such file is specified, the default AssemblyInfo.cs is used.
+ASSEMBLY_INFO_SOURCE_REAL = \
+ $(shell if [ "$(ASSEMBLY_INFO_SOURCE)" ]; \
+ then \
+ echo "$(addprefix $(srcdir)/, $(ASSEMBLY_INFO_SOURCE))"; \
+ else \
+ echo "$(top_srcdir)/src/AssemblyInfo.cs"; \
+ fi)
+
+SOURCES_BUILD = $(addprefix $(srcdir)/, $(SOURCES)) \
+ $(ASSEMBLY_INFO_SOURCE_REAL)
+RESOURCES_EXPANDED = $(addprefix $(srcdir)/, $(RESOURCES))
+RESOURCES_BUILD = $(foreach resource, $(RESOURCES_EXPANDED), \
+ -resource:$(resource),$(notdir $(resource)))
+
+INSTALL_ICONS = $(top_srcdir)/build/private-icon-theme-installer "$(mkinstalldirs)" "$(INSTALL_DATA)"
+THEME_ICONS_SOURCE = $(wildcard $(srcdir)/ThemeIcons/*/*/*.png) $(wildcard $(srcdir)/ThemeIcons/scalable/*/*.svg)
+THEME_ICONS_RELATIVE = $(subst $(srcdir)/ThemeIcons/, , $(THEME_ICONS_SOURCE))
+ASSEMBLY_EXTENSION = $(strip $(patsubst library, dll, $(TARGET)))
+ASSEMBLY_FILE = $(top_builddir)/bin/$(ASSEMBLY).$(ASSEMBLY_EXTENSION)
+INSTALL_DIR_RESOLVED = $(firstword $(subst , $(DEFAULT_INSTALL_DIR), $(INSTALL_DIR)))
+ at ENABLE_TESTS_TRUE@ENABLE_TESTS_FLAG = "-define:ENABLE_TESTS"
+ at ENABLE_ATK_TRUE@ENABLE_ATK_FLAG = "-define:ENABLE_ATK"
+FILTERED_LINK = $(shell echo "$(LINK)" | $(UNIQUE_FILTER_PIPE))
+DEP_LINK = $(shell echo "$(LINK)" | $(UNIQUE_FILTER_PIPE) | sed s,-r:,,g | grep '$(top_builddir)/bin/')
+OUTPUT_FILES = \
+ $(ASSEMBLY_FILE) \
+ $(ASSEMBLY_FILE).mdb
+
+moduledir = $(INSTALL_DIR_RESOLVED)
+module_SCRIPTS = $(OUTPUT_FILES)
+EXTRA_DIST = $(SOURCES_BUILD) $(RESOURCES_EXPANDED) $(THEME_ICONS_SOURCE)
+CLEANFILES = $(OUTPUT_FILES) $(ASSEMBLY_FILE).config
+DISTCLEANFILES = *.pidb
+MAINTAINERCLEANFILES = Makefile.in
all: all-am
.SUFFIXES:
-$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(top_srcdir)/Makefile.addins $(top_srcdir)/Makefile.include $(am__configure_deps)
+$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(top_srcdir)/build/build.mk $(top_srcdir)/build/build.environment.mk $(top_srcdir)/build/build.rules.mk $(am__configure_deps)
@for dep in $?; do \
case '$(am__configure_deps)' in \
*$$dep*) \
@@ -393,32 +562,46 @@ $(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps)
$(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps)
cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
$(am__aclocal_m4_deps):
+install-moduleSCRIPTS: $(module_SCRIPTS)
+ @$(NORMAL_INSTALL)
+ test -z "$(moduledir)" || $(MKDIR_P) "$(DESTDIR)$(moduledir)"
+ @list='$(module_SCRIPTS)'; test -n "$(moduledir)" || list=; \
+ for p in $$list; do \
+ if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \
+ if test -f "$$d$$p"; then echo "$$d$$p"; echo "$$p"; else :; fi; \
+ done | \
+ sed -e 'p;s,.*/,,;n' \
+ -e 'h;s|.*|.|' \
+ -e 'p;x;s,.*/,,;$(transform)' | sed 'N;N;N;s,\n, ,g' | \
+ $(AWK) 'BEGIN { files["."] = ""; dirs["."] = 1; } \
+ { d=$$3; if (dirs[d] != 1) { print "d", d; dirs[d] = 1 } \
+ if ($$2 == $$4) { files[d] = files[d] " " $$1; \
+ if (++n[d] == $(am__install_max)) { \
+ print "f", d, files[d]; n[d] = 0; files[d] = "" } } \
+ else { print "f", d "/" $$4, $$1 } } \
+ END { for (d in files) print "f", d, files[d] }' | \
+ while read type dir files; do \
+ if test "$$dir" = .; then dir=; else dir=/$$dir; fi; \
+ test -z "$$files" || { \
+ echo " $(INSTALL_SCRIPT) $$files '$(DESTDIR)$(moduledir)$$dir'"; \
+ $(INSTALL_SCRIPT) $$files "$(DESTDIR)$(moduledir)$$dir" || exit $$?; \
+ } \
+ ; done
+
+uninstall-moduleSCRIPTS:
+ @$(NORMAL_UNINSTALL)
+ @list='$(module_SCRIPTS)'; test -n "$(moduledir)" || exit 0; \
+ files=`for p in $$list; do echo "$$p"; done | \
+ sed -e 's,.*/,,;$(transform)'`; \
+ test -n "$$list" || exit 0; \
+ echo " ( cd '$(DESTDIR)$(moduledir)' && rm -f" $$files ")"; \
+ cd "$(DESTDIR)$(moduledir)" && rm -f $$files
mostlyclean-libtool:
-rm -f *.lo
clean-libtool:
-rm -rf .libs _libs
-install-addinDATA: $(addin_DATA)
- @$(NORMAL_INSTALL)
- test -z "$(addindir)" || $(MKDIR_P) "$(DESTDIR)$(addindir)"
- @list='$(addin_DATA)'; test -n "$(addindir)" || list=; \
- for p in $$list; do \
- if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \
- echo "$$d$$p"; \
- done | $(am__base_list) | \
- while read files; do \
- echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(addindir)'"; \
- $(INSTALL_DATA) $$files "$(DESTDIR)$(addindir)" || exit $$?; \
- done
-
-uninstall-addinDATA:
- @$(NORMAL_UNINSTALL)
- @list='$(addin_DATA)'; test -n "$(addindir)" || list=; \
- files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \
- test -n "$$files" || exit 0; \
- echo " ( cd '$(DESTDIR)$(addindir)' && rm -f" $$files ")"; \
- cd "$(DESTDIR)$(addindir)" && rm -f $$files
tags: TAGS
TAGS:
@@ -458,9 +641,9 @@ distdir: $(DISTFILES)
done
check-am: all-am
check: check-am
-all-am: Makefile $(DATA)
+all-am: Makefile $(SCRIPTS)
installdirs:
- for dir in "$(DESTDIR)$(addindir)"; do \
+ for dir in "$(DESTDIR)$(moduledir)"; do \
test -z "$$dir" || $(MKDIR_P) "$$dir"; \
done
install: install-am
@@ -485,10 +668,12 @@ clean-generic:
distclean-generic:
-test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
-test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES)
+ -test -z "$(DISTCLEANFILES)" || rm -f $(DISTCLEANFILES)
maintainer-clean-generic:
@echo "This command is intended for maintainers to use"
@echo "it deletes files that may require special tools to rebuild."
+ -test -z "$(MAINTAINERCLEANFILES)" || rm -f $(MAINTAINERCLEANFILES)
clean: clean-am
clean-am: clean-generic clean-libtool mostlyclean-am
@@ -509,7 +694,7 @@ info: info-am
info-am:
-install-data-am: install-addinDATA
+install-data-am: install-data-local install-moduleSCRIPTS
install-dvi: install-dvi-am
@@ -553,28 +738,72 @@ ps: ps-am
ps-am:
-uninstall-am: uninstall-addinDATA
+uninstall-am: uninstall-local uninstall-moduleSCRIPTS
.MAKE: install-am install-strip
.PHONY: all all-am check check-am clean clean-generic clean-libtool \
distclean distclean-generic distclean-libtool distdir dvi \
- dvi-am html html-am info info-am install install-addinDATA \
- install-am install-data install-data-am install-dvi \
+ dvi-am html html-am info info-am install install-am \
+ install-data install-data-am install-data-local 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-generic mostlyclean-libtool pdf pdf-am ps ps-am \
- uninstall uninstall-addinDATA uninstall-am
-
-
-mpack: $(ASSEMBLY)
- mautil p $(ASSEMBLY)
-
-$(ASSEMBLY): $(addin_SOURCES) $(dep_resources)
- $(CSC_LIB) -out:$@ $(addin_extraflags) $(build_sources) $(build_references) $(build_packages) $(build_resources)
+ install-moduleSCRIPTS install-pdf install-pdf-am install-ps \
+ install-ps-am install-strip installcheck installcheck-am \
+ installdirs maintainer-clean maintainer-clean-generic \
+ mostlyclean mostlyclean-generic mostlyclean-libtool pdf pdf-am \
+ ps ps-am uninstall uninstall-am uninstall-local \
+ uninstall-moduleSCRIPTS
+
+
+all: $(ASSEMBLY_FILE) theme-icons
+
+run:
+ @pushd $(top_builddir); \
+ make run; \
+ popd;
+
+# uncommented for now.
+# tests are currently excuted from Makefile in $(top_builddir)
+#test:
+# @pushd $(top_builddir)/tests; \
+# make $(ASSEMBLY); \
+# popd;
+
+build-debug:
+ @echo $(DEP_LINK)
+
+$(ASSEMBLY_FILE).mdb: $(ASSEMBLY_FILE)
+
+$(ASSEMBLY_FILE): $(SOURCES_BUILD) $(RESOURCES_EXPANDED) $(DEP_LINK)
+ @mkdir -p $(top_builddir)/bin
+ @if [ ! "x$(ENABLE_RELEASE)" = "xyes" ]; then \
+ $(top_srcdir)/build/dll-map-makefile-verifier $(srcdir)/Makefile.am $(srcdir)/$(notdir $@.config) && \
+ $(MONO) $(top_builddir)/build/dll-map-verifier.exe $(srcdir)/$(notdir $@.config) -iwinmm -ilibbanshee -ilibbnpx11 -ilibc -ilibc.so.6 -iintl -ilibmtp.dll -ilibigemacintegration.dylib -iCFRelease $(SOURCES_BUILD); \
+ fi;
+ $(MCS) \
+ $(GMCS_FLAGS) \
+ $(ASSEMBLY_BUILD_FLAGS) \
+ -nowarn:0278 -nowarn:0078 $$warn \
+ -define:HAVE_GTK_2_10 -define:NET_2_0 \
+ -debug -target:$(TARGET) -out:$@ \
+ $(BUILD_DEFINES) $(ENABLE_TESTS_FLAG) $(ENABLE_ATK_FLAG) \
+ $(FILTERED_LINK) $(RESOURCES_BUILD) $(SOURCES_BUILD)
+ @if [ -e $(srcdir)/$(notdir $@.config) ]; then \
+ cp $(srcdir)/$(notdir $@.config) $(top_builddir)/bin; \
+ fi;
+ @if [ ! -z "$(EXTRA_BUNDLE)" ]; then \
+ cp $(EXTRA_BUNDLE) $(top_builddir)/bin; \
+ fi;
+
+theme-icons: $(THEME_ICONS_SOURCE)
+ @$(INSTALL_ICONS) -il "$(BUILD_DATA_DIR)" "$(srcdir)" $(THEME_ICONS_RELATIVE)
+
+install-data-local: $(THEME_ICONS_SOURCE)
+ @$(INSTALL_ICONS) -i "$(DESTDIR)$(pkgdatadir)" "$(srcdir)" $(THEME_ICONS_RELATIVE)
+
+uninstall-local: $(THEME_ICONS_SOURCE)
+ @$(INSTALL_ICONS) -u "$(DESTDIR)$(pkgdatadir)" "$(srcdir)" $(THEME_ICONS_RELATIVE)
# 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/extensions/Tools/MergeDb/MergeDb.cs b/extensions/Tools/MergeDb/MergeDb.cs
index 043885e..b1a4c66 100644
--- a/extensions/Tools/MergeDb/MergeDb.cs
+++ b/extensions/Tools/MergeDb/MergeDb.cs
@@ -15,10 +15,10 @@ using Gtk;
using FSpot;
using FSpot.Extensions;
-using FSpot.Utils;
using FSpot.Query;
using FSpot.UI.Dialog;
using Mono.Unix;
+using Hyena;
namespace MergeDbExtension
{
@@ -109,7 +109,7 @@ namespace MergeDbExtension
public static void Merge (string path, Db to_db)
{
- Log.Warning ("Will merge db {0} into main f-spot db {1}", path, FSpot.Global.BaseDirectory + "/photos.db" );
+ Log.WarningFormat ("Will merge db {0} into main f-spot db {1}", path, FSpot.Global.BaseDirectory + "/photos.db" );
Db from_db = new Db ();
from_db.Init (path, true);
//MergeDb mdb = new MergeDb (from_db, to_db);
@@ -187,8 +187,7 @@ namespace MergeDbExtension
void ImportPhoto (Photo photo, bool copy)
{
- Log.Warning ("Importing {0}", photo.Name);
- PhotoStore from_store = from_db.Photos;
+ Log.WarningFormat ("Importing {0}", photo.Name);
PhotoStore to_store = to_db.Photos;
string photo_path = photo.VersionUri (Photo.OriginalVersionId).AbsolutePath;
@@ -198,7 +197,7 @@ namespace MergeDbExtension
foreach (string key in PathMap.Keys) {
string path = photo_path;
path = path.Replace (key, PathMap [key]);
- Log.Debug ("Replaced path {0}", path);
+ Log.DebugFormat ("Replaced path {0}", path);
if (System.IO.File.Exists (path)) {
photo_path = path;
break;;
@@ -218,32 +217,35 @@ namespace MergeDbExtension
pfd.Dialog.Destroy ();
if (new_folder == null) //Skip
return;
- Log.Debug ("{0} maps to {1}", folder, new_folder);
+ Log.DebugFormat ("{0} maps to {1}", folder, new_folder);
PathMap[folder] = new_folder;
} else
- Console.WriteLine ("point me to the file");
- Console.WriteLine ("FNF: {0}", photo_path);
+ Log.Debug ("point me to the file");
+ Log.DebugFormat ("FNF: {0}", photo_path);
}
string destination;
- Gdk.Pixbuf pixbuf;
Photo newp;
if (copy)
- destination = FileImportBackend.ChooseLocation (photo_path, null);
+ destination = FindImportDestination (new SafeUri (photo_path), photo.Time).AbsolutePath;
else
destination = photo_path;
+ var dest_uri = new SafeUri (photo_path);
- // Don't copy if we are already home
- if (photo_path == destination)
- newp = to_store.Create (UriUtils.PathToFileUri (destination), roll_map [photo.RollId], out pixbuf);
- else {
+ photo.DefaultVersionId = 1;
+ photo.DefaultVersion.Uri = dest_uri;
+
+ if (photo.DefaultVersion.ImportMD5 == String.Empty) {
+ (photo.DefaultVersion as PhotoVersion).ImportMD5 = Photo.GenerateMD5 (photo.DefaultVersion.Uri);
+ }
+
+ if (photo_path != destination) {
System.IO.File.Copy (photo_path, destination);
- newp = to_store.Create (UriUtils.PathToFileUri (destination), UriUtils.PathToFileUri (photo_path), roll_map [photo.RollId], out pixbuf);
try {
File.SetAttributes (destination, File.GetAttributes (destination) & ~FileAttributes.ReadOnly);
DateTime create = File.GetCreationTime (photo_path);
@@ -255,18 +257,20 @@ namespace MergeDbExtension
}
}
+ newp = to_store.CreateFrom (photo, roll_map [photo.RollId]);
+
if (newp == null)
return;
foreach (Tag t in photo.Tags) {
- Log.Warning ("Tagging with {0}", t.Name);
+ Log.WarningFormat ("Tagging with {0}", t.Name);
newp.AddTag (tag_map [t.Id]);
}
foreach (uint version_id in photo.VersionIds)
if (version_id != Photo.OriginalVersionId) {
PhotoVersion version = photo.GetVersion (version_id) as PhotoVersion;
- uint newv = newp.AddVersion (version.Uri, version.Name, version.IsProtected);
+ uint newv = newp.AddVersion (version.BaseUri, version.Filename, version.Name, version.IsProtected);
if (version_id == photo.DefaultVersionId)
newp.DefaultVersionId = newv;
}
@@ -278,5 +282,46 @@ namespace MergeDbExtension
to_store.Commit (newp);
}
+
+ SafeUri FindImportDestination (SafeUri uri, DateTime time)
+ {
+ // Find a new unique location inside the photo folder
+ string name = uri.GetFilename ();
+
+ var dest_uri = FSpot.Global.PhotoUri.Append (time.Year.ToString ())
+ .Append (String.Format ("{0:D2}", time.Month))
+ .Append (String.Format ("{0:D2}", time.Day));
+ EnsureDirectory (dest_uri);
+
+ // If the destination we'd like to use is the file itself return that
+ if (dest_uri.Append (name) == uri)
+ return uri;
+
+ // Find an unused name
+ int i = 1;
+ var dest = dest_uri.Append (name);
+ var file = GLib.FileFactory.NewForUri (dest);
+ while (file.Exists) {
+ var filename = uri.GetFilenameWithoutExtension ();
+ var extension = uri.GetExtension ();
+ dest = dest_uri.Append (String.Format ("{0}-{1}{2}", filename, i++, extension));
+ file = GLib.FileFactory.NewForUri (dest);
+ }
+
+ return dest;
+ }
+
+ void EnsureDirectory (SafeUri uri)
+ {
+ var parts = uri.AbsolutePath.Split('/');
+ SafeUri current = new SafeUri (uri.Scheme + ":///", true);
+ for (int i = 0; i < parts.Length; i++) {
+ current = current.Append (parts [i]);
+ var file = GLib.FileFactory.NewForUri (current);
+ if (!file.Exists) {
+ file.MakeDirectory (null);
+ }
+ }
+ }
}
}
diff --git a/extensions/Tools/MergeDb/MergeDbDialog.cs b/extensions/Tools/MergeDb/MergeDbDialog.cs
index 7efbf2d..e2bcf0b 100644
--- a/extensions/Tools/MergeDb/MergeDbDialog.cs
+++ b/extensions/Tools/MergeDb/MergeDbDialog.cs
@@ -17,7 +17,6 @@ namespace MergeDbExtension
{
[Glade.Widget] Gtk.Dialog mergedb_dialog;
[Glade.Widget] Gtk.Button apply_button;
- [Glade.Widget] Gtk.Button cancel_button;
[Glade.Widget] Gtk.FileChooserButton db_filechooser;
[Glade.Widget] Gtk.RadioButton newrolls_radio;
[Glade.Widget] Gtk.RadioButton allrolls_radio;
diff --git a/extensions/Tools/MergeDb/PickFolderDialog.cs b/extensions/Tools/MergeDb/PickFolderDialog.cs
index f11d563..a416ca1 100644
--- a/extensions/Tools/MergeDb/PickFolderDialog.cs
+++ b/extensions/Tools/MergeDb/PickFolderDialog.cs
@@ -11,6 +11,7 @@ using System;
using FSpot;
using FSpot.Query;
using Mono.Unix;
+using Hyena;
namespace MergeDbExtension
{
@@ -24,7 +25,7 @@ namespace MergeDbExtension
{
Glade.XML xml = new Glade.XML (null, "MergeDb.glade", "pickfolder_dialog", "f-spot");
xml.Autoconnect (this);
- Console.WriteLine ("new pickfolder");
+ Log.Debug ("new pickfolder");
pickfolder_dialog.Modal = false;
pickfolder_dialog.TransientFor = parent;
diff --git a/extensions/Tools/RawPlusJpeg/Makefile.am b/extensions/Tools/RawPlusJpeg/Makefile.am
index 876e527..7fe9b4c 100644
--- a/extensions/Tools/RawPlusJpeg/Makefile.am
+++ b/extensions/Tools/RawPlusJpeg/Makefile.am
@@ -1,20 +1,10 @@
-addin = RawPlusJpeg
+ASSEMBLY = FSpot.Exporters.RawPlusJpeg
+TARGET = library
+LINK = $(REF_FSPOT_EXTENSION_RAWPLUSJPEG)
+INSTALL_DIR = $(EXTENSIONS_INSTALL_DIR)
-addin_manifest = $(addin).addin.xml
+SOURCES = RawPlusJpeg.cs
-addin_sources = \
- $(addin).cs
+RESOURCES = RawPlusJpeg.addin.xml
-addin_resources = \
- $(addin_manifest)
-
-addin_references = \
- Mono.Posix
-
-addin_packages = \
- gtk-sharp-2.0 \
- glade-sharp-2.0
-
-addin_extradist =
-
-include $(top_srcdir)/Makefile.addins
+include $(top_srcdir)/build/build.mk
diff --git a/extensions/Tools/RawPlusJpeg/Makefile.in b/extensions/Tools/RawPlusJpeg/Makefile.in
index 9399f91..c4cbfd1 100644
--- a/extensions/Tools/RawPlusJpeg/Makefile.in
+++ b/extensions/Tools/RawPlusJpeg/Makefile.in
@@ -35,13 +35,22 @@ POST_UNINSTALL = :
build_triplet = @build@
host_triplet = @host@
DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in \
- $(top_srcdir)/Makefile.addins $(top_srcdir)/Makefile.include
+ $(top_srcdir)/build/build.environment.mk \
+ $(top_srcdir)/build/build.mk \
+ $(top_srcdir)/build/build.rules.mk
+ at ENABLE_TESTS_TRUE@am__append_1 = " $(NUNIT_LIBS)"
subdir = extensions/Tools/RawPlusJpeg
ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
am__aclocal_m4_deps = $(top_srcdir)/build/m4/shave/shave.m4 \
$(top_srcdir)/build/m4/shamrock/expansions.m4 \
+ $(top_srcdir)/build/m4/shamrock/gnome-doc.m4 \
$(top_srcdir)/build/m4/shamrock/mono.m4 \
+ $(top_srcdir)/build/m4/shamrock/nunit.m4 \
$(top_srcdir)/build/m4/shamrock/programs.m4 \
+ $(top_srcdir)/build/m4/f-spot/flickrnet.m4 \
+ $(top_srcdir)/build/m4/f-spot/gnome-keyring-sharp.m4 \
+ $(top_srcdir)/build/m4/f-spot/gtk-sharp.m4 \
+ $(top_srcdir)/build/m4/f-spot/mono-addins.m4 \
$(top_srcdir)/acinclude.m4 $(top_srcdir)/configure.ac
am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
$(ACLOCAL_M4)
@@ -49,8 +58,6 @@ mkinstalldirs = $(install_sh) -d
CONFIG_HEADER = $(top_builddir)/config.h
CONFIG_CLEAN_FILES =
CONFIG_CLEAN_VPATH_FILES =
-SOURCES =
-DIST_SOURCES =
am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`;
am__vpath_adj = case $$p in \
$(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \
@@ -72,8 +79,9 @@ am__nobase_list = $(am__nobase_strip_setup); \
am__base_list = \
sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \
sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g'
-am__installdirs = "$(DESTDIR)$(addindir)"
-DATA = $(addin_DATA)
+am__installdirs = "$(DESTDIR)$(moduledir)"
+SCRIPTS = $(module_SCRIPTS)
+DIST_SOURCES =
DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
ACLOCAL = @ACLOCAL@
ACLOCAL_AMFLAGS = @ACLOCAL_AMFLAGS@
@@ -119,6 +127,8 @@ EXIF_SOVERSION = @EXIF_SOVERSION@
F77 = @F77@
FC = @FC@
FGREP = @FGREP@
+FLICKRNET_CFLAGS = @FLICKRNET_CFLAGS@
+FLICKRNET_LIBS = @FLICKRNET_LIBS@
F_CFLAGS = @F_CFLAGS@
F_LIBS = @F_LIBS@
GAPI2CODEGEN = @GAPI2CODEGEN@
@@ -132,6 +142,8 @@ GCONF_SHARP_LIBS = @GCONF_SHARP_LIBS@
GETTEXT_PACKAGE = @GETTEXT_PACKAGE@
GIO_CFLAGS = @GIO_CFLAGS@
GIO_LIBS = @GIO_LIBS@
+GLIBSHARP_2_12_7_CFLAGS = @GLIBSHARP_2_12_7_CFLAGS@
+GLIBSHARP_2_12_7_LIBS = @GLIBSHARP_2_12_7_LIBS@
GLIBSHARP_CFLAGS = @GLIBSHARP_CFLAGS@
GLIBSHARP_LIBS = @GLIBSHARP_LIBS@
GLIB_CFLAGS = @GLIB_CFLAGS@
@@ -147,6 +159,10 @@ GNOME_SHARP_CFLAGS = @GNOME_SHARP_CFLAGS@
GNOME_SHARP_LIBS = @GNOME_SHARP_LIBS@
GOBJECT_QUERY = @GOBJECT_QUERY@
GREP = @GREP@
+GTKSHARP_A11Y_CFLAGS = @GTKSHARP_A11Y_CFLAGS@
+GTKSHARP_A11Y_LIBS = @GTKSHARP_A11Y_LIBS@
+GTKSHARP_CFLAGS = @GTKSHARP_CFLAGS@
+GTKSHARP_LIBS = @GTKSHARP_LIBS@
HELP_DIR = @HELP_DIR@
ICONS_DIRECTORY = @ICONS_DIRECTORY@
INSTALL = @INSTALL@
@@ -160,14 +176,14 @@ INTLTOOL_EXTRACT = @INTLTOOL_EXTRACT@
INTLTOOL_MERGE = @INTLTOOL_MERGE@
INTLTOOL_PERL = @INTLTOOL_PERL@
INTLTOOL_UPDATE = @INTLTOOL_UPDATE@
+KEYRINGSHARP_CFLAGS = @KEYRINGSHARP_CFLAGS@
+KEYRINGSHARP_LIBS = @KEYRINGSHARP_LIBS@
LCMS_CFLAGS = @LCMS_CFLAGS@
LCMS_LIBS = @LCMS_LIBS@
LD = @LD@
LDFLAGS = @LDFLAGS@
LIBEXIF_VERSION_CHECK_CFLAGS = @LIBEXIF_VERSION_CHECK_CFLAGS@
LIBEXIF_VERSION_CHECK_LIBS = @LIBEXIF_VERSION_CHECK_LIBS@
-LIBGPHOTO2_CFLAGS = @LIBGPHOTO2_CFLAGS@
-LIBGPHOTO2_LIBS = @LIBGPHOTO2_LIBS@
LIBJPEG = @LIBJPEG@
LIBOBJS = @LIBOBJS@
LIBS = @LIBS@
@@ -182,6 +198,12 @@ MCS = @MCS@
MKDIR_P = @MKDIR_P@
MKINSTALLDIRS = @MKINSTALLDIRS@
MONO = @MONO@
+MONO_ADDINS_CFLAGS = @MONO_ADDINS_CFLAGS@
+MONO_ADDINS_GUI_CFLAGS = @MONO_ADDINS_GUI_CFLAGS@
+MONO_ADDINS_GUI_LIBS = @MONO_ADDINS_GUI_LIBS@
+MONO_ADDINS_LIBS = @MONO_ADDINS_LIBS@
+MONO_ADDINS_SETUP_CFLAGS = @MONO_ADDINS_SETUP_CFLAGS@
+MONO_ADDINS_SETUP_LIBS = @MONO_ADDINS_SETUP_LIBS@
MONO_MODULE_CFLAGS = @MONO_MODULE_CFLAGS@
MONO_MODULE_LIBS = @MONO_MODULE_LIBS@
MSGFMT = @MSGFMT@
@@ -192,7 +214,6 @@ NDESK_DBUS_LIBS = @NDESK_DBUS_LIBS@
NM = @NM@
NMEDIT = @NMEDIT@
NUNIT_CFLAGS = @NUNIT_CFLAGS@
-NUNIT_DEFINES = @NUNIT_DEFINES@
NUNIT_LIBS = @NUNIT_LIBS@
OBJC = @OBJC@
OBJDUMP = @OBJDUMP@
@@ -284,83 +305,227 @@ target_alias = @target_alias@
top_build_prefix = @top_build_prefix@
top_builddir = @top_builddir@
top_srcdir = @top_srcdir@
-addin = RawPlusJpeg
-addin_manifest = $(addin).addin.xml
-addin_sources = \
- $(addin).cs
-
-addin_resources = \
- $(addin_manifest)
-
-addin_references = \
- Mono.Posix
-
-addin_packages = \
- gtk-sharp-2.0 \
- glade-sharp-2.0
-
-addin_extradist =
-ASSEMBLY = $(addin).dll
+ASSEMBLY = FSpot.Exporters.RawPlusJpeg
+TARGET = library
+LINK = $(REF_FSPOT_EXTENSION_RAWPLUSJPEG) $(am__append_1)
+INSTALL_DIR = $(EXTENSIONS_INSTALL_DIR)
+SOURCES = RawPlusJpeg.cs
+RESOURCES = RawPlusJpeg.addin.xml
+
+# Initializers
+MONO_BASE_PATH =
+MONO_ADDINS_PATH =
+
+# Install Paths
+DEFAULT_INSTALL_DIR = $(pkglibdir)
+BACKENDS_INSTALL_DIR = $(DEFAULT_INSTALL_DIR)/Backends
+EXTENSIONS_INSTALL_DIR = $(DEFAULT_INSTALL_DIR)/Extensions
DIR_DOCS = $(top_builddir)/docs
DIR_EXTENSIONS = $(top_builddir)/extensions
-DIR_GPHOTO2 = $(top_builddir)/lib/libgphoto2-sharp
DIR_ICONS = $(top_builddir)/icons
DIR_JPEGTRAN = $(top_builddir)/lib/libjpegtran
-DIR_KEYRING = $(top_builddir)/lib/gnome-keyring-sharp
DIR_LIBFSPOT = $(top_builddir)/lib/libfspot
DIR_SEMWEB = $(top_builddir)/lib/semweb
DIR_SRC = $(top_builddir)/src
DIR_GIOSHARP = $(top_builddir)/lib/gio-sharp/gio
DIR_GTKSHARPBEANS = $(top_builddir)/lib/gtk-sharp-beans
DIR_UNIQUESHARP = $(top_builddir)/lib/unique-sharp/unique
-LINK_KEYRING = -r:$(DIR_KEYRING)/gnome-keyring-sharp.dll
-LINK_GPHOTO2 = -r:$(DIR_GPHOTO2)/libgphoto2-sharp.dll
-LINK_SEMWEB = -r:$(DIR_SEMWEB)/SemWeb.dll
-LINK_GIOSHARP = -r:$(DIR_GIOSHARP)/gio-sharp.dll
-LINK_GTKSHARPBEANS = -r:$(DIR_GTKSHARPBEANS)/gtk-sharp-beans.dll
-LINK_UNIQUESHARP = -r:$(DIR_UNIQUESHARP)/unique-sharp.dll
-CSC_FLAGS = -debug
-CSC = $(MCS) $(CSC_FLAGS) -target:exe
-CSC_LIB = $(MCS) $(CSC_FLAGS) -target:library
-MONO_DEBUGFLAGS = --debug
-RUNTIME = mono $(MONO_DEBUGFLAGS)
-dep_resources = $(addprefix $(srcdir)/, $(addin_resources))
-build_resources = $(foreach res, $(dep_resources), $(addprefix -resource:, $(res)),$(notdir $(res)))
-build_sources = $(addprefix $(srcdir)/, $(addin_sources))
-build_packages = \
- $(addprefix -pkg:, $(addin_packages)) \
- -pkg:mono-addins
-
-build_references = \
- $(addprefix -r:, $(addin_references)) \
- -r:$(top_builddir)/src/f-spot.exe \
- -r:$(top_builddir)/src/Cms.dll \
- -r:$(top_builddir)/src/FSpot.Core.dll \
- -r:$(top_builddir)/src/FSpot.Platform.dll \
- -r:$(top_builddir)/src/FSpot.Query.dll \
- -r:$(top_builddir)/src/FSpot.Utils.dll \
- -r:$(top_builddir)/src/FSpot.Widgets.dll \
- $(LINK_SEMWEB) \
- $(LINK_GPHOTO2) \
- $(LINK_GIOSHARP) \
- $(LINK_UNIQUESHARP) \
- $(LINK_GTKSHARPBEANS)
-
-addin_SOURCES = \
- $(build_sources)
-
-addindir = $(pkglibdir)/extensions
-addin_DATA = $(ASSEMBLY)
-CLEANFILES = $(ASSEMBLY) $(ASSEMBLY).mdb *.mpack
-EXTRA_DIST = \
- $(build_sources) \
- $(dep_resources) \
- $(addin_extradist)
-
+DIR_BIN = $(top_builddir)/bin
+
+# External libraries to link against, generated from configure
+LINK_SYSTEM = -r:System
+LINK_SYSTEMDATA = -r:System.Data
+LINK_SYSTEM_WEB = -r:System.Web
+LINK_MONO_POSIX = -r:Mono.Posix
+LINK_MONO_CAIRO = -r:Mono.Cairo
+LINK_MONO_SIMD = -r:Mono.Simd
+LINK_MONODATA = -r:Mono.Data
+LINK_MONO_DATA_SQLITECLIENT = -r:Mono.Data.SqliteClient
+LINK_ICSHARP_ZIP_LIB = -r:ICSharpCode.SharpZipLib
+LINK_KEYRING = $(KEYRINGSHARP_LIBS)
+LINK_GLIB = $(GLIBSHARP_LIBS)
+LINK_GTK = $(GTKSHARP_LIBS)
+LINK_GNOME = $(GNOME_SHARP_LIBS)
+LINK_GCONF = $(GCONF_SHARP_LIBS)
+LINK_GLADE = -pkg:glade-sharp-2.0
+LINK_FLICKRNET = -pkg:flickrnet
+LINK_DBUS = $(NDESK_DBUS_LIBS) $(NDESK_DBUS_GLIB_LIBS)
+LINK_DBUS_NO_GLIB = $(NDESK_DBUS_LIBS)
+LINK_MONO_ADDINS_DEPS = $(MONO_ADDINS_LIBS)
+LINK_MONO_ADDINS_SETUP_DEPS = $(MONO_ADDINS_SETUP_LIBS)
+LINK_MONO_ADDINS_GUI_DEPS = $(MONO_ADDINS_GUI_LIBS)
+
+# GIO
+REF_GIO =
+LINK_GIO = -r:$(DIR_GIOSHARP)/gio-sharp.dll
+LINK_GIO_DEPS = $(REF_GIO) $(LINK_GIO)
+
+# Gtk Beans
+REF_GTK_BEANS = $(LINK_GIO_DEPS)
+LINK_GTK_BEANS = -r:$(DIR_GTKSHARPBEANS)/gtk-sharp-beans.dll
+LINK_GTK_BEANS_DEPS = $(REF_GTK_BEANS) $(LINK_GTK_BEANS)
+
+# Uniqe
+REF_UNIQUE =
+LINK_UNIQUE = -r:$(DIR_UNIQUESHARP)/unique-sharp.dll
+LINK_UNIQUE_DEPS = $(REF_UNIQUE) $(LINK_UNIQUE)
+
+# Hyena
+REF_HYENA = $(LINK_SYSTEM) $(LINK_MONO_POSIX)
+LINK_HYENA = -r:$(DIR_BIN)/Hyena.dll
+LINK_HYENA_DEPS = $(REF_HYENA) $(LINK_HYENA)
+
+# Semweb
+REF_SEMWEB = $(LINK_SYSTEMDATA) $(LINK_HYENA_DEPS)
+LINK_SEMWEB = -r:$(DIR_BIN)/SemWeb.dll
+LINK_SEMWEB_DEPS = $(REF_SEMWEB) $(LINK_SEMWEB)
+
+# Hyena.Data.Sqlite
+REF_HYENA_DATA_SQLITE = $(LINK_SQLITE)
+LINK_HYENA_DATA_SQLITE = -r:$(DIR_BIN)/Hyena.Data.Sqlite.dll
+LINK_HYENA_DATA_SQLITE_DEPS = $(REF_HYENA_DATA_SQLITE) $(LINK_HYENA_DATA_SQLITE)
+
+# Hyena.Gui
+REF_HYENA_GUI = $(LINK_HYENA_DEPS)
+LINK_HYENA_GUI = -r:$(DIR_BIN)/Hyena.Gui.dll
+LINK_HENA_GUI_DEPS = $(REF_HYENA_GUI) $(LINK_HYENA_GUI)
+
+# FSpot.Cms
+REF_FSPOT_CMS = $(LINK_GTK)
+LINK_FSPOT_CMS = -r:$(DIR_BIN)/FSpot.Cms.dll
+LINK_FSPOT_CMS_DEPS = $(REF_FSPOT_CMS) $(LINK_FSPOT_CMS)
+
+# FSpot.Utils
+REF_FSPOT_UTILS = $(LINK_HYENA_DEPS) $(LINK_GTK) $(LINK_GIO) $(LINK_MONO_CAIRO)
+LINK_FSPOT_UTILS = -r:$(DIR_BIN)/FSpot.Utils.dll
+LINK_FSPOT_UTILS_DEPS = $(REF_FSPOT_UTILS) $(LINK_FSPOT_UTILS)
+
+# FSpot.Core
+REF_FSPOT_CORE = $(LINK_FSPOT_UTILS_DEPS) $(LINK_FSPOT_CMS_DEPS)
+LINK_FSPOT_CORE = -r:$(DIR_BIN)/FSpot.Core.dll
+LINK_FSPOT_CORE_DEPS = $(REF_FSPOT_CORE) $(LINK_FSPOT_CORE)
+
+# FSpot.Query
+REF_FSPOT_QUERY = $(LINK_FSPOT_CORE_DEPS)
+LINK_FSPOT_QUERY = -r:$(DIR_BIN)/FSpot.Query.dll
+LINK_FSPOT_QUERY_DEPS = $(REF_FSPOT_QUERY) $(LINK_FSPOT_QUERY)
+
+# FSpot.JobScheduler
+REF_FSPOT_JOB_SCHEDULER = $(LINK_HYENA_DEPS)
+LINK_FSPOT_JOB_SCHEDULER = -r:$(DIR_BIN)/FSpot.JobScheduler.dll
+LINK_FSPOT_JOB_SCHEDULER_DEPS = $(REF_FSPOT_JOB_SCHEDULER) $(LINK_FSPOT_JOB_SCHEDULER)
+
+# FSpot.Bling
+REF_FSPOT_BLING = $(LINK_GTK_BEANS_DEPS) $(LINK_GLIB)
+LINK_FSPOT_BLING = -r:$(DIR_BIN)/FSpot.Bling.dll
+LINK_FSPOT_BLING_DEPS = $(REF_FSPOT_BLING) $(LINK_FSPOT_BLING)
+
+# FSpot.Platform
+REF_FSPOT_PLATFORM = $(LINK_GCONF) $(LINK_GTK) $(LINK_FSPOT_CORE_DEPS) $(LINK_DBUS)
+LINK_FSPOT_PLATFORM = -r:$(DIR_BIN)/FSpot.Platform.dll
+LINK_FSPOT_PLATFORM_DEPS = $(REF_FSPOT_PLATFORM) $(LINK_FSPOT_PLATFORM)
+
+# FSpot.Widgets
+REF_FSPOT_WIDGETS = $(LINK_FSPOT_CORE_DEPS) $(LINK_FSPOT_BLING_DEPS)
+LINK_FSPOT_WIDGETS = -r:$(DIR_BIN)/FSpot.Widgets.dll
+LINK_FSPOT_WIDGETS_DEPS = $(REF_FSPOT_WIDGETS) $(LINK_FSPOT_WIDGETS)
+
+# FSpot (executable)
+REF_FSPOT = $(LINK_FSPOT_WIDGETS_DEPS) $(LINK_FSPOT_PLATFORM_DEPS) $(LINK_FSPOT_QUERY_DEPS) \
+ $(LINK_GLIB) $(LINK_MONO_ADDINS_DEPS) $(LINK_UNIQUE_DEPS) $(LINK_MONO_ADDINS_SETUP_DEPS) \
+ $(LINK_SEMWEB_DEPS) $(LINK_GLADE) $(LINK_MONODATA) $(LINK_MONO_DATA_SQLITECLIENT) \
+ $(LINK_MONO_ADDINS_GUI_DEPS) $(LINK_FSPOT_JOB_SCHEDULER_DEPS) $(LINK_ICSHARP_ZIP_LIB) \
+ $(LINK_GNOME)
+
+# FIXME: do not link executables
+LINK_FSPOT = -r:$(DIR_BIN)/f-spot.exe
+LINK_FSPOT_DEPS = $(REF_FSPOT) $(LINK_FSPOT)
+
+# Extensions
+REF_FSPOT_EXTENSION_BLACKOUTEDITOR = $(LINK_FSPOT_DEPS)
+REF_FSPOT_EXTENSION_BWEDITOR = $(LINK_FSPOT_DEPS) $(LINK_MONO_SIMD)
+REF_FSPOT_EXTENSION_FLIPEDITOR = $(LINK_FSPOT_DEPS)
+REF_FSPOT_EXTENSION_PIXELATEEDITOR = $(LINK_FSPOT_DEPS)
+REF_FSPOT_EXTENSION_RESIZEEDITOR = $(LINK_FSPOT_DEPS)
+REF_FSPOT_EXTENSION_CDEXPORT = $(LINK_FSPOT_DEPS)
+REF_FSPOT_EXTENSION_FACEBOOKEXPORT = $(LINK_FSPOT_DEPS) $(LINK_KEYRING)
+REF_FSPOT_EXTENSION_FLICKREXPORT = $(LINK_FSPOT_DEPS) $(LINK_FLICKRNET)
+REF_FSPOT_EXTENSION_FOLDEREXPORT = $(LINK_FSPOT_DEPS) $(LINK_SYSTEM_WEB)
+REF_FSPOT_EXTENSION_GALLERYEXPORT = $(LINK_FSPOT_DEPS)
+REF_MONO_GOOGLE = $(LINK_HYENA_DEPS)
+LINK_MONO_GOOGLE = -r:$(DIR_BIN)/Mono.Google.dll
+LINK_MONO_GOOGLE_DEPS = $(REF_MONO_GOOGLE) $(LINK_MONO_GOOGLE)
+REF_FSPOT_EXTENSION_PICASAWEBEXPORT = $(LINK_FSPOT_DEPS) $(LINK_MONO_GOOGLE) $(LINK_KEYRING)
+REF_SMUGMUGNET = $(LINK_FSPOT_DEPS)
+LINK_SMUGMUGNET = -r:$(DIR_BIN)/SmugMugNet.dll
+LINK_SMUGMUGNET_DEPS = $(REF_SMUGMUGNET) $(LINK_SMUGMUGNET)
+REF_FSPOT_EXTENSION_SMUGMUGEXPORT = $(LINK_SMUGMUGNET_DEPS) $(LINK_KEYRING)
+REF_MONO_TABBLO = $(LINK_HYENA_DEPS)
+LINK_MONO_TABBLO = -r:$(DIR_BIN)/Mono.Tabblo.dll
+LINK_MONO_TABBLO_DEPS = $(REF_MONO_TABBLO) $(LINK_MONO_TABBLO)
+REF_FSPOT_EXTENSION_TABBLOEXPORT = $(LINK_FSPOT_DEPS) $(LINK_KEYRING) $(LINK_MONO_TABBLO_DEPS)
+REF_FSPOT_EXTENSION_ZIPEXPORT = $(LINK_FSPOT_DEPS)
+REF_FSPOT_EXTENSION_CHANGEPHOTOPATH = $(LINK_FSPOT_DEPS)
+REF_FSPOT_EXTENSION_DEVELOPINUFRAW = $(LINK_FSPOT_DEPS)
+REF_FSPOT_EXTENSION_HASHJOB = $(LINK_FSPOT_DEPS)
+REF_FSPOT_EXTENSION_LIVEWEBGALLERY = $(LINK_FSPOT_DEPS)
+REF_FSPOT_EXTENSION_MERGEDB = $(LINK_FSPOT_DEPS)
+REF_FSPOT_EXTENSION_RAWPLUSJPEG = $(LINK_FSPOT_DEPS)
+REF_FSPOT_EXTENSION_RETROACTIVEROLL = $(LINK_FSPOT_DEPS)
+REF_FSPOT_EXTENSION_SCREENSAVERCONFIG = $(LINK_FSPOT_DEPS)
+REF_FSPOT_EXTENSION_COVERTRANSITION = $(LINK_FSPOT_DEPS)
+
+# Cute hack to replace a space with something
+colon := :
+empty :=
+space := $(empty) $(empty)
+
+# Build path to allow running uninstalled
+RUN_PATH = $(subst $(space),$(colon), $(MONO_BASE_PATH))
+UNIQUE_FILTER_PIPE = tr [:space:] \\n | sort | uniq
+BUILD_DATA_DIR = $(top_builddir)/bin/share/$(PACKAGE)
+
+# Since all other attempts failed, we currently go this way:
+# This code adds the file specified in ASSEMBLY_INFO_SOURCE to SOURCES_BUILD.
+# If no such file is specified, the default AssemblyInfo.cs is used.
+ASSEMBLY_INFO_SOURCE_REAL = \
+ $(shell if [ "$(ASSEMBLY_INFO_SOURCE)" ]; \
+ then \
+ echo "$(addprefix $(srcdir)/, $(ASSEMBLY_INFO_SOURCE))"; \
+ else \
+ echo "$(top_srcdir)/src/AssemblyInfo.cs"; \
+ fi)
+
+SOURCES_BUILD = $(addprefix $(srcdir)/, $(SOURCES)) \
+ $(ASSEMBLY_INFO_SOURCE_REAL)
+RESOURCES_EXPANDED = $(addprefix $(srcdir)/, $(RESOURCES))
+RESOURCES_BUILD = $(foreach resource, $(RESOURCES_EXPANDED), \
+ -resource:$(resource),$(notdir $(resource)))
+
+INSTALL_ICONS = $(top_srcdir)/build/private-icon-theme-installer "$(mkinstalldirs)" "$(INSTALL_DATA)"
+THEME_ICONS_SOURCE = $(wildcard $(srcdir)/ThemeIcons/*/*/*.png) $(wildcard $(srcdir)/ThemeIcons/scalable/*/*.svg)
+THEME_ICONS_RELATIVE = $(subst $(srcdir)/ThemeIcons/, , $(THEME_ICONS_SOURCE))
+ASSEMBLY_EXTENSION = $(strip $(patsubst library, dll, $(TARGET)))
+ASSEMBLY_FILE = $(top_builddir)/bin/$(ASSEMBLY).$(ASSEMBLY_EXTENSION)
+INSTALL_DIR_RESOLVED = $(firstword $(subst , $(DEFAULT_INSTALL_DIR), $(INSTALL_DIR)))
+ at ENABLE_TESTS_TRUE@ENABLE_TESTS_FLAG = "-define:ENABLE_TESTS"
+ at ENABLE_ATK_TRUE@ENABLE_ATK_FLAG = "-define:ENABLE_ATK"
+FILTERED_LINK = $(shell echo "$(LINK)" | $(UNIQUE_FILTER_PIPE))
+DEP_LINK = $(shell echo "$(LINK)" | $(UNIQUE_FILTER_PIPE) | sed s,-r:,,g | grep '$(top_builddir)/bin/')
+OUTPUT_FILES = \
+ $(ASSEMBLY_FILE) \
+ $(ASSEMBLY_FILE).mdb
+
+moduledir = $(INSTALL_DIR_RESOLVED)
+module_SCRIPTS = $(OUTPUT_FILES)
+EXTRA_DIST = $(SOURCES_BUILD) $(RESOURCES_EXPANDED) $(THEME_ICONS_SOURCE)
+CLEANFILES = $(OUTPUT_FILES) $(ASSEMBLY_FILE).config
+DISTCLEANFILES = *.pidb
+MAINTAINERCLEANFILES = Makefile.in
all: all-am
.SUFFIXES:
-$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(top_srcdir)/Makefile.addins $(top_srcdir)/Makefile.include $(am__configure_deps)
+$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(top_srcdir)/build/build.mk $(top_srcdir)/build/build.environment.mk $(top_srcdir)/build/build.rules.mk $(am__configure_deps)
@for dep in $?; do \
case '$(am__configure_deps)' in \
*$$dep*) \
@@ -390,32 +555,46 @@ $(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps)
$(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps)
cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
$(am__aclocal_m4_deps):
+install-moduleSCRIPTS: $(module_SCRIPTS)
+ @$(NORMAL_INSTALL)
+ test -z "$(moduledir)" || $(MKDIR_P) "$(DESTDIR)$(moduledir)"
+ @list='$(module_SCRIPTS)'; test -n "$(moduledir)" || list=; \
+ for p in $$list; do \
+ if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \
+ if test -f "$$d$$p"; then echo "$$d$$p"; echo "$$p"; else :; fi; \
+ done | \
+ sed -e 'p;s,.*/,,;n' \
+ -e 'h;s|.*|.|' \
+ -e 'p;x;s,.*/,,;$(transform)' | sed 'N;N;N;s,\n, ,g' | \
+ $(AWK) 'BEGIN { files["."] = ""; dirs["."] = 1; } \
+ { d=$$3; if (dirs[d] != 1) { print "d", d; dirs[d] = 1 } \
+ if ($$2 == $$4) { files[d] = files[d] " " $$1; \
+ if (++n[d] == $(am__install_max)) { \
+ print "f", d, files[d]; n[d] = 0; files[d] = "" } } \
+ else { print "f", d "/" $$4, $$1 } } \
+ END { for (d in files) print "f", d, files[d] }' | \
+ while read type dir files; do \
+ if test "$$dir" = .; then dir=; else dir=/$$dir; fi; \
+ test -z "$$files" || { \
+ echo " $(INSTALL_SCRIPT) $$files '$(DESTDIR)$(moduledir)$$dir'"; \
+ $(INSTALL_SCRIPT) $$files "$(DESTDIR)$(moduledir)$$dir" || exit $$?; \
+ } \
+ ; done
+
+uninstall-moduleSCRIPTS:
+ @$(NORMAL_UNINSTALL)
+ @list='$(module_SCRIPTS)'; test -n "$(moduledir)" || exit 0; \
+ files=`for p in $$list; do echo "$$p"; done | \
+ sed -e 's,.*/,,;$(transform)'`; \
+ test -n "$$list" || exit 0; \
+ echo " ( cd '$(DESTDIR)$(moduledir)' && rm -f" $$files ")"; \
+ cd "$(DESTDIR)$(moduledir)" && rm -f $$files
mostlyclean-libtool:
-rm -f *.lo
clean-libtool:
-rm -rf .libs _libs
-install-addinDATA: $(addin_DATA)
- @$(NORMAL_INSTALL)
- test -z "$(addindir)" || $(MKDIR_P) "$(DESTDIR)$(addindir)"
- @list='$(addin_DATA)'; test -n "$(addindir)" || list=; \
- for p in $$list; do \
- if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \
- echo "$$d$$p"; \
- done | $(am__base_list) | \
- while read files; do \
- echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(addindir)'"; \
- $(INSTALL_DATA) $$files "$(DESTDIR)$(addindir)" || exit $$?; \
- done
-
-uninstall-addinDATA:
- @$(NORMAL_UNINSTALL)
- @list='$(addin_DATA)'; test -n "$(addindir)" || list=; \
- files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \
- test -n "$$files" || exit 0; \
- echo " ( cd '$(DESTDIR)$(addindir)' && rm -f" $$files ")"; \
- cd "$(DESTDIR)$(addindir)" && rm -f $$files
tags: TAGS
TAGS:
@@ -455,9 +634,9 @@ distdir: $(DISTFILES)
done
check-am: all-am
check: check-am
-all-am: Makefile $(DATA)
+all-am: Makefile $(SCRIPTS)
installdirs:
- for dir in "$(DESTDIR)$(addindir)"; do \
+ for dir in "$(DESTDIR)$(moduledir)"; do \
test -z "$$dir" || $(MKDIR_P) "$$dir"; \
done
install: install-am
@@ -482,10 +661,12 @@ clean-generic:
distclean-generic:
-test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
-test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES)
+ -test -z "$(DISTCLEANFILES)" || rm -f $(DISTCLEANFILES)
maintainer-clean-generic:
@echo "This command is intended for maintainers to use"
@echo "it deletes files that may require special tools to rebuild."
+ -test -z "$(MAINTAINERCLEANFILES)" || rm -f $(MAINTAINERCLEANFILES)
clean: clean-am
clean-am: clean-generic clean-libtool mostlyclean-am
@@ -506,7 +687,7 @@ info: info-am
info-am:
-install-data-am: install-addinDATA
+install-data-am: install-data-local install-moduleSCRIPTS
install-dvi: install-dvi-am
@@ -550,28 +731,72 @@ ps: ps-am
ps-am:
-uninstall-am: uninstall-addinDATA
+uninstall-am: uninstall-local uninstall-moduleSCRIPTS
.MAKE: install-am install-strip
.PHONY: all all-am check check-am clean clean-generic clean-libtool \
distclean distclean-generic distclean-libtool distdir dvi \
- dvi-am html html-am info info-am install install-addinDATA \
- install-am install-data install-data-am install-dvi \
+ dvi-am html html-am info info-am install install-am \
+ install-data install-data-am install-data-local 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-generic mostlyclean-libtool pdf pdf-am ps ps-am \
- uninstall uninstall-addinDATA uninstall-am
-
-
-mpack: $(ASSEMBLY)
- mautil p $(ASSEMBLY)
-
-$(ASSEMBLY): $(addin_SOURCES) $(dep_resources)
- $(CSC_LIB) -out:$@ $(addin_extraflags) $(build_sources) $(build_references) $(build_packages) $(build_resources)
+ install-moduleSCRIPTS install-pdf install-pdf-am install-ps \
+ install-ps-am install-strip installcheck installcheck-am \
+ installdirs maintainer-clean maintainer-clean-generic \
+ mostlyclean mostlyclean-generic mostlyclean-libtool pdf pdf-am \
+ ps ps-am uninstall uninstall-am uninstall-local \
+ uninstall-moduleSCRIPTS
+
+
+all: $(ASSEMBLY_FILE) theme-icons
+
+run:
+ @pushd $(top_builddir); \
+ make run; \
+ popd;
+
+# uncommented for now.
+# tests are currently excuted from Makefile in $(top_builddir)
+#test:
+# @pushd $(top_builddir)/tests; \
+# make $(ASSEMBLY); \
+# popd;
+
+build-debug:
+ @echo $(DEP_LINK)
+
+$(ASSEMBLY_FILE).mdb: $(ASSEMBLY_FILE)
+
+$(ASSEMBLY_FILE): $(SOURCES_BUILD) $(RESOURCES_EXPANDED) $(DEP_LINK)
+ @mkdir -p $(top_builddir)/bin
+ @if [ ! "x$(ENABLE_RELEASE)" = "xyes" ]; then \
+ $(top_srcdir)/build/dll-map-makefile-verifier $(srcdir)/Makefile.am $(srcdir)/$(notdir $@.config) && \
+ $(MONO) $(top_builddir)/build/dll-map-verifier.exe $(srcdir)/$(notdir $@.config) -iwinmm -ilibbanshee -ilibbnpx11 -ilibc -ilibc.so.6 -iintl -ilibmtp.dll -ilibigemacintegration.dylib -iCFRelease $(SOURCES_BUILD); \
+ fi;
+ $(MCS) \
+ $(GMCS_FLAGS) \
+ $(ASSEMBLY_BUILD_FLAGS) \
+ -nowarn:0278 -nowarn:0078 $$warn \
+ -define:HAVE_GTK_2_10 -define:NET_2_0 \
+ -debug -target:$(TARGET) -out:$@ \
+ $(BUILD_DEFINES) $(ENABLE_TESTS_FLAG) $(ENABLE_ATK_FLAG) \
+ $(FILTERED_LINK) $(RESOURCES_BUILD) $(SOURCES_BUILD)
+ @if [ -e $(srcdir)/$(notdir $@.config) ]; then \
+ cp $(srcdir)/$(notdir $@.config) $(top_builddir)/bin; \
+ fi;
+ @if [ ! -z "$(EXTRA_BUNDLE)" ]; then \
+ cp $(EXTRA_BUNDLE) $(top_builddir)/bin; \
+ fi;
+
+theme-icons: $(THEME_ICONS_SOURCE)
+ @$(INSTALL_ICONS) -il "$(BUILD_DATA_DIR)" "$(srcdir)" $(THEME_ICONS_RELATIVE)
+
+install-data-local: $(THEME_ICONS_SOURCE)
+ @$(INSTALL_ICONS) -i "$(DESTDIR)$(pkgdatadir)" "$(srcdir)" $(THEME_ICONS_RELATIVE)
+
+uninstall-local: $(THEME_ICONS_SOURCE)
+ @$(INSTALL_ICONS) -u "$(DESTDIR)$(pkgdatadir)" "$(srcdir)" $(THEME_ICONS_RELATIVE)
# 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/extensions/Tools/RawPlusJpeg/RawPlusJpeg.cs b/extensions/Tools/RawPlusJpeg/RawPlusJpeg.cs
index e348a49..92fbb02 100644
--- a/extensions/Tools/RawPlusJpeg/RawPlusJpeg.cs
+++ b/extensions/Tools/RawPlusJpeg/RawPlusJpeg.cs
@@ -16,16 +16,18 @@ using FSpot;
using FSpot.UI.Dialog;
using FSpot.Extensions;
+using Hyena;
+
namespace RawPlusJpegExtension
{
public class RawPlusJpeg : ICommand
{
public void Run (object o, EventArgs e)
{
- Console.WriteLine ("EXECUTING RAW PLUS JPEG EXTENSION");
+ Log.Debug ("EXECUTING RAW PLUS JPEG EXTENSION");
if (ResponseType.Ok != HigMessageDialog.RunHigConfirmation (
- MainWindow.Toplevel.Window,
+ App.Instance.Organizer.Window,
DialogFlags.DestroyWithParent,
MessageType.Warning,
"Merge Raw+Jpegs",
@@ -34,7 +36,7 @@ namespace RawPlusJpegExtension
return;
Photo [] photos = App.Instance.Database.Photos.Query ((Tag [])null, null, null, null);
- Array.Sort (photos, new Photo.CompareDirectory ());
+ Array.Sort (photos, new IBrowsableItemComparer.CompareDirectory ());
Photo raw = null;
Photo jpeg = null;
@@ -62,7 +64,7 @@ namespace RawPlusJpegExtension
foreach (MergeRequest mr in merge_requests)
mr.Merge ();
- MainWindow.Toplevel.UpdateQuery ();
+ App.Instance.Organizer.UpdateQuery ();
}
private static bool SamePlaceAndName (Photo p1, Photo p2)
@@ -74,8 +76,7 @@ namespace RawPlusJpegExtension
private static string DirectoryPath (Photo p)
{
- System.Uri uri = p.VersionUri (Photo.OriginalVersionId);
- return uri.Scheme + "://" + uri.Host + System.IO.Path.GetDirectoryName (uri.AbsolutePath);
+ return p.VersionUri (Photo.OriginalVersionId).GetBaseUri ();
}
class MergeRequest
@@ -91,7 +92,7 @@ namespace RawPlusJpegExtension
public void Merge ()
{
- Console.WriteLine ("Merging {0} and {1}", raw.VersionUri (Photo.OriginalVersionId), jpeg.VersionUri (Photo.OriginalVersionId));
+ Log.DebugFormat ("Merging {0} and {1}", raw.VersionUri (Photo.OriginalVersionId), jpeg.VersionUri (Photo.OriginalVersionId));
foreach (uint version_id in jpeg.VersionIds) {
string name = jpeg.GetVersion (version_id).Name;
try {
@@ -101,7 +102,7 @@ namespace RawPlusJpegExtension
else
raw.RenameVersion (raw.DefaultVersionId, name);
} catch (Exception e) {
- Console.WriteLine (e);
+ Log.Exception (e);
}
}
raw.AddTag (jpeg.Tags);
@@ -111,7 +112,7 @@ namespace RawPlusJpegExtension
try {
jpeg.DeleteVersion (version_id, true, true);
} catch (Exception e) {
- Console.WriteLine (e);
+ Log.Exception (e);
}
}
raw.Changes.DataChanged = true;
diff --git a/extensions/Tools/RetroactiveRoll/Makefile.am b/extensions/Tools/RetroactiveRoll/Makefile.am
index 0ddb099..91e3a16 100644
--- a/extensions/Tools/RetroactiveRoll/Makefile.am
+++ b/extensions/Tools/RetroactiveRoll/Makefile.am
@@ -1,20 +1,10 @@
-addin = RetroactiveRoll
+ASSEMBLY = FSpot.Exporters.RetroactiveRoll
+TARGET = library
+LINK = $(REF_FSPOT_EXTENSION_RETROACTIVEROLL)
+INSTALL_DIR = $(EXTENSIONS_INSTALL_DIR)
-addin_manifest = $(addin).addin.xml
+SOURCES = RetroactiveRoll.cs
-addin_sources = \
- $(addin).cs
+RESOURCES = RetroactiveRoll.addin.xml
-addin_resources = \
- $(addin_manifest)
-
-addin_references = \
- Mono.Posix \
- Mono.Data.SqliteClient
-
-addin_packages = \
- gtk-sharp-2.0
-
-addin_extradist =
-
-include $(top_srcdir)/Makefile.addins
+include $(top_srcdir)/build/build.mk
diff --git a/extensions/Tools/RetroactiveRoll/Makefile.in b/extensions/Tools/RetroactiveRoll/Makefile.in
index 5a66b7a..0a284db 100644
--- a/extensions/Tools/RetroactiveRoll/Makefile.in
+++ b/extensions/Tools/RetroactiveRoll/Makefile.in
@@ -35,13 +35,22 @@ POST_UNINSTALL = :
build_triplet = @build@
host_triplet = @host@
DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in \
- $(top_srcdir)/Makefile.addins $(top_srcdir)/Makefile.include
+ $(top_srcdir)/build/build.environment.mk \
+ $(top_srcdir)/build/build.mk \
+ $(top_srcdir)/build/build.rules.mk
+ at ENABLE_TESTS_TRUE@am__append_1 = " $(NUNIT_LIBS)"
subdir = extensions/Tools/RetroactiveRoll
ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
am__aclocal_m4_deps = $(top_srcdir)/build/m4/shave/shave.m4 \
$(top_srcdir)/build/m4/shamrock/expansions.m4 \
+ $(top_srcdir)/build/m4/shamrock/gnome-doc.m4 \
$(top_srcdir)/build/m4/shamrock/mono.m4 \
+ $(top_srcdir)/build/m4/shamrock/nunit.m4 \
$(top_srcdir)/build/m4/shamrock/programs.m4 \
+ $(top_srcdir)/build/m4/f-spot/flickrnet.m4 \
+ $(top_srcdir)/build/m4/f-spot/gnome-keyring-sharp.m4 \
+ $(top_srcdir)/build/m4/f-spot/gtk-sharp.m4 \
+ $(top_srcdir)/build/m4/f-spot/mono-addins.m4 \
$(top_srcdir)/acinclude.m4 $(top_srcdir)/configure.ac
am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
$(ACLOCAL_M4)
@@ -49,8 +58,6 @@ mkinstalldirs = $(install_sh) -d
CONFIG_HEADER = $(top_builddir)/config.h
CONFIG_CLEAN_FILES =
CONFIG_CLEAN_VPATH_FILES =
-SOURCES =
-DIST_SOURCES =
am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`;
am__vpath_adj = case $$p in \
$(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \
@@ -72,8 +79,9 @@ am__nobase_list = $(am__nobase_strip_setup); \
am__base_list = \
sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \
sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g'
-am__installdirs = "$(DESTDIR)$(addindir)"
-DATA = $(addin_DATA)
+am__installdirs = "$(DESTDIR)$(moduledir)"
+SCRIPTS = $(module_SCRIPTS)
+DIST_SOURCES =
DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
ACLOCAL = @ACLOCAL@
ACLOCAL_AMFLAGS = @ACLOCAL_AMFLAGS@
@@ -119,6 +127,8 @@ EXIF_SOVERSION = @EXIF_SOVERSION@
F77 = @F77@
FC = @FC@
FGREP = @FGREP@
+FLICKRNET_CFLAGS = @FLICKRNET_CFLAGS@
+FLICKRNET_LIBS = @FLICKRNET_LIBS@
F_CFLAGS = @F_CFLAGS@
F_LIBS = @F_LIBS@
GAPI2CODEGEN = @GAPI2CODEGEN@
@@ -132,6 +142,8 @@ GCONF_SHARP_LIBS = @GCONF_SHARP_LIBS@
GETTEXT_PACKAGE = @GETTEXT_PACKAGE@
GIO_CFLAGS = @GIO_CFLAGS@
GIO_LIBS = @GIO_LIBS@
+GLIBSHARP_2_12_7_CFLAGS = @GLIBSHARP_2_12_7_CFLAGS@
+GLIBSHARP_2_12_7_LIBS = @GLIBSHARP_2_12_7_LIBS@
GLIBSHARP_CFLAGS = @GLIBSHARP_CFLAGS@
GLIBSHARP_LIBS = @GLIBSHARP_LIBS@
GLIB_CFLAGS = @GLIB_CFLAGS@
@@ -147,6 +159,10 @@ GNOME_SHARP_CFLAGS = @GNOME_SHARP_CFLAGS@
GNOME_SHARP_LIBS = @GNOME_SHARP_LIBS@
GOBJECT_QUERY = @GOBJECT_QUERY@
GREP = @GREP@
+GTKSHARP_A11Y_CFLAGS = @GTKSHARP_A11Y_CFLAGS@
+GTKSHARP_A11Y_LIBS = @GTKSHARP_A11Y_LIBS@
+GTKSHARP_CFLAGS = @GTKSHARP_CFLAGS@
+GTKSHARP_LIBS = @GTKSHARP_LIBS@
HELP_DIR = @HELP_DIR@
ICONS_DIRECTORY = @ICONS_DIRECTORY@
INSTALL = @INSTALL@
@@ -160,14 +176,14 @@ INTLTOOL_EXTRACT = @INTLTOOL_EXTRACT@
INTLTOOL_MERGE = @INTLTOOL_MERGE@
INTLTOOL_PERL = @INTLTOOL_PERL@
INTLTOOL_UPDATE = @INTLTOOL_UPDATE@
+KEYRINGSHARP_CFLAGS = @KEYRINGSHARP_CFLAGS@
+KEYRINGSHARP_LIBS = @KEYRINGSHARP_LIBS@
LCMS_CFLAGS = @LCMS_CFLAGS@
LCMS_LIBS = @LCMS_LIBS@
LD = @LD@
LDFLAGS = @LDFLAGS@
LIBEXIF_VERSION_CHECK_CFLAGS = @LIBEXIF_VERSION_CHECK_CFLAGS@
LIBEXIF_VERSION_CHECK_LIBS = @LIBEXIF_VERSION_CHECK_LIBS@
-LIBGPHOTO2_CFLAGS = @LIBGPHOTO2_CFLAGS@
-LIBGPHOTO2_LIBS = @LIBGPHOTO2_LIBS@
LIBJPEG = @LIBJPEG@
LIBOBJS = @LIBOBJS@
LIBS = @LIBS@
@@ -182,6 +198,12 @@ MCS = @MCS@
MKDIR_P = @MKDIR_P@
MKINSTALLDIRS = @MKINSTALLDIRS@
MONO = @MONO@
+MONO_ADDINS_CFLAGS = @MONO_ADDINS_CFLAGS@
+MONO_ADDINS_GUI_CFLAGS = @MONO_ADDINS_GUI_CFLAGS@
+MONO_ADDINS_GUI_LIBS = @MONO_ADDINS_GUI_LIBS@
+MONO_ADDINS_LIBS = @MONO_ADDINS_LIBS@
+MONO_ADDINS_SETUP_CFLAGS = @MONO_ADDINS_SETUP_CFLAGS@
+MONO_ADDINS_SETUP_LIBS = @MONO_ADDINS_SETUP_LIBS@
MONO_MODULE_CFLAGS = @MONO_MODULE_CFLAGS@
MONO_MODULE_LIBS = @MONO_MODULE_LIBS@
MSGFMT = @MSGFMT@
@@ -192,7 +214,6 @@ NDESK_DBUS_LIBS = @NDESK_DBUS_LIBS@
NM = @NM@
NMEDIT = @NMEDIT@
NUNIT_CFLAGS = @NUNIT_CFLAGS@
-NUNIT_DEFINES = @NUNIT_DEFINES@
NUNIT_LIBS = @NUNIT_LIBS@
OBJC = @OBJC@
OBJDUMP = @OBJDUMP@
@@ -284,83 +305,227 @@ target_alias = @target_alias@
top_build_prefix = @top_build_prefix@
top_builddir = @top_builddir@
top_srcdir = @top_srcdir@
-addin = RetroactiveRoll
-addin_manifest = $(addin).addin.xml
-addin_sources = \
- $(addin).cs
-
-addin_resources = \
- $(addin_manifest)
-
-addin_references = \
- Mono.Posix \
- Mono.Data.SqliteClient
-
-addin_packages = \
- gtk-sharp-2.0
-
-addin_extradist =
-ASSEMBLY = $(addin).dll
+ASSEMBLY = FSpot.Exporters.RetroactiveRoll
+TARGET = library
+LINK = $(REF_FSPOT_EXTENSION_RETROACTIVEROLL) $(am__append_1)
+INSTALL_DIR = $(EXTENSIONS_INSTALL_DIR)
+SOURCES = RetroactiveRoll.cs
+RESOURCES = RetroactiveRoll.addin.xml
+
+# Initializers
+MONO_BASE_PATH =
+MONO_ADDINS_PATH =
+
+# Install Paths
+DEFAULT_INSTALL_DIR = $(pkglibdir)
+BACKENDS_INSTALL_DIR = $(DEFAULT_INSTALL_DIR)/Backends
+EXTENSIONS_INSTALL_DIR = $(DEFAULT_INSTALL_DIR)/Extensions
DIR_DOCS = $(top_builddir)/docs
DIR_EXTENSIONS = $(top_builddir)/extensions
-DIR_GPHOTO2 = $(top_builddir)/lib/libgphoto2-sharp
DIR_ICONS = $(top_builddir)/icons
DIR_JPEGTRAN = $(top_builddir)/lib/libjpegtran
-DIR_KEYRING = $(top_builddir)/lib/gnome-keyring-sharp
DIR_LIBFSPOT = $(top_builddir)/lib/libfspot
DIR_SEMWEB = $(top_builddir)/lib/semweb
DIR_SRC = $(top_builddir)/src
DIR_GIOSHARP = $(top_builddir)/lib/gio-sharp/gio
DIR_GTKSHARPBEANS = $(top_builddir)/lib/gtk-sharp-beans
DIR_UNIQUESHARP = $(top_builddir)/lib/unique-sharp/unique
-LINK_KEYRING = -r:$(DIR_KEYRING)/gnome-keyring-sharp.dll
-LINK_GPHOTO2 = -r:$(DIR_GPHOTO2)/libgphoto2-sharp.dll
-LINK_SEMWEB = -r:$(DIR_SEMWEB)/SemWeb.dll
-LINK_GIOSHARP = -r:$(DIR_GIOSHARP)/gio-sharp.dll
-LINK_GTKSHARPBEANS = -r:$(DIR_GTKSHARPBEANS)/gtk-sharp-beans.dll
-LINK_UNIQUESHARP = -r:$(DIR_UNIQUESHARP)/unique-sharp.dll
-CSC_FLAGS = -debug
-CSC = $(MCS) $(CSC_FLAGS) -target:exe
-CSC_LIB = $(MCS) $(CSC_FLAGS) -target:library
-MONO_DEBUGFLAGS = --debug
-RUNTIME = mono $(MONO_DEBUGFLAGS)
-dep_resources = $(addprefix $(srcdir)/, $(addin_resources))
-build_resources = $(foreach res, $(dep_resources), $(addprefix -resource:, $(res)),$(notdir $(res)))
-build_sources = $(addprefix $(srcdir)/, $(addin_sources))
-build_packages = \
- $(addprefix -pkg:, $(addin_packages)) \
- -pkg:mono-addins
-
-build_references = \
- $(addprefix -r:, $(addin_references)) \
- -r:$(top_builddir)/src/f-spot.exe \
- -r:$(top_builddir)/src/Cms.dll \
- -r:$(top_builddir)/src/FSpot.Core.dll \
- -r:$(top_builddir)/src/FSpot.Platform.dll \
- -r:$(top_builddir)/src/FSpot.Query.dll \
- -r:$(top_builddir)/src/FSpot.Utils.dll \
- -r:$(top_builddir)/src/FSpot.Widgets.dll \
- $(LINK_SEMWEB) \
- $(LINK_GPHOTO2) \
- $(LINK_GIOSHARP) \
- $(LINK_UNIQUESHARP) \
- $(LINK_GTKSHARPBEANS)
-
-addin_SOURCES = \
- $(build_sources)
-
-addindir = $(pkglibdir)/extensions
-addin_DATA = $(ASSEMBLY)
-CLEANFILES = $(ASSEMBLY) $(ASSEMBLY).mdb *.mpack
-EXTRA_DIST = \
- $(build_sources) \
- $(dep_resources) \
- $(addin_extradist)
-
+DIR_BIN = $(top_builddir)/bin
+
+# External libraries to link against, generated from configure
+LINK_SYSTEM = -r:System
+LINK_SYSTEMDATA = -r:System.Data
+LINK_SYSTEM_WEB = -r:System.Web
+LINK_MONO_POSIX = -r:Mono.Posix
+LINK_MONO_CAIRO = -r:Mono.Cairo
+LINK_MONO_SIMD = -r:Mono.Simd
+LINK_MONODATA = -r:Mono.Data
+LINK_MONO_DATA_SQLITECLIENT = -r:Mono.Data.SqliteClient
+LINK_ICSHARP_ZIP_LIB = -r:ICSharpCode.SharpZipLib
+LINK_KEYRING = $(KEYRINGSHARP_LIBS)
+LINK_GLIB = $(GLIBSHARP_LIBS)
+LINK_GTK = $(GTKSHARP_LIBS)
+LINK_GNOME = $(GNOME_SHARP_LIBS)
+LINK_GCONF = $(GCONF_SHARP_LIBS)
+LINK_GLADE = -pkg:glade-sharp-2.0
+LINK_FLICKRNET = -pkg:flickrnet
+LINK_DBUS = $(NDESK_DBUS_LIBS) $(NDESK_DBUS_GLIB_LIBS)
+LINK_DBUS_NO_GLIB = $(NDESK_DBUS_LIBS)
+LINK_MONO_ADDINS_DEPS = $(MONO_ADDINS_LIBS)
+LINK_MONO_ADDINS_SETUP_DEPS = $(MONO_ADDINS_SETUP_LIBS)
+LINK_MONO_ADDINS_GUI_DEPS = $(MONO_ADDINS_GUI_LIBS)
+
+# GIO
+REF_GIO =
+LINK_GIO = -r:$(DIR_GIOSHARP)/gio-sharp.dll
+LINK_GIO_DEPS = $(REF_GIO) $(LINK_GIO)
+
+# Gtk Beans
+REF_GTK_BEANS = $(LINK_GIO_DEPS)
+LINK_GTK_BEANS = -r:$(DIR_GTKSHARPBEANS)/gtk-sharp-beans.dll
+LINK_GTK_BEANS_DEPS = $(REF_GTK_BEANS) $(LINK_GTK_BEANS)
+
+# Uniqe
+REF_UNIQUE =
+LINK_UNIQUE = -r:$(DIR_UNIQUESHARP)/unique-sharp.dll
+LINK_UNIQUE_DEPS = $(REF_UNIQUE) $(LINK_UNIQUE)
+
+# Hyena
+REF_HYENA = $(LINK_SYSTEM) $(LINK_MONO_POSIX)
+LINK_HYENA = -r:$(DIR_BIN)/Hyena.dll
+LINK_HYENA_DEPS = $(REF_HYENA) $(LINK_HYENA)
+
+# Semweb
+REF_SEMWEB = $(LINK_SYSTEMDATA) $(LINK_HYENA_DEPS)
+LINK_SEMWEB = -r:$(DIR_BIN)/SemWeb.dll
+LINK_SEMWEB_DEPS = $(REF_SEMWEB) $(LINK_SEMWEB)
+
+# Hyena.Data.Sqlite
+REF_HYENA_DATA_SQLITE = $(LINK_SQLITE)
+LINK_HYENA_DATA_SQLITE = -r:$(DIR_BIN)/Hyena.Data.Sqlite.dll
+LINK_HYENA_DATA_SQLITE_DEPS = $(REF_HYENA_DATA_SQLITE) $(LINK_HYENA_DATA_SQLITE)
+
+# Hyena.Gui
+REF_HYENA_GUI = $(LINK_HYENA_DEPS)
+LINK_HYENA_GUI = -r:$(DIR_BIN)/Hyena.Gui.dll
+LINK_HENA_GUI_DEPS = $(REF_HYENA_GUI) $(LINK_HYENA_GUI)
+
+# FSpot.Cms
+REF_FSPOT_CMS = $(LINK_GTK)
+LINK_FSPOT_CMS = -r:$(DIR_BIN)/FSpot.Cms.dll
+LINK_FSPOT_CMS_DEPS = $(REF_FSPOT_CMS) $(LINK_FSPOT_CMS)
+
+# FSpot.Utils
+REF_FSPOT_UTILS = $(LINK_HYENA_DEPS) $(LINK_GTK) $(LINK_GIO) $(LINK_MONO_CAIRO)
+LINK_FSPOT_UTILS = -r:$(DIR_BIN)/FSpot.Utils.dll
+LINK_FSPOT_UTILS_DEPS = $(REF_FSPOT_UTILS) $(LINK_FSPOT_UTILS)
+
+# FSpot.Core
+REF_FSPOT_CORE = $(LINK_FSPOT_UTILS_DEPS) $(LINK_FSPOT_CMS_DEPS)
+LINK_FSPOT_CORE = -r:$(DIR_BIN)/FSpot.Core.dll
+LINK_FSPOT_CORE_DEPS = $(REF_FSPOT_CORE) $(LINK_FSPOT_CORE)
+
+# FSpot.Query
+REF_FSPOT_QUERY = $(LINK_FSPOT_CORE_DEPS)
+LINK_FSPOT_QUERY = -r:$(DIR_BIN)/FSpot.Query.dll
+LINK_FSPOT_QUERY_DEPS = $(REF_FSPOT_QUERY) $(LINK_FSPOT_QUERY)
+
+# FSpot.JobScheduler
+REF_FSPOT_JOB_SCHEDULER = $(LINK_HYENA_DEPS)
+LINK_FSPOT_JOB_SCHEDULER = -r:$(DIR_BIN)/FSpot.JobScheduler.dll
+LINK_FSPOT_JOB_SCHEDULER_DEPS = $(REF_FSPOT_JOB_SCHEDULER) $(LINK_FSPOT_JOB_SCHEDULER)
+
+# FSpot.Bling
+REF_FSPOT_BLING = $(LINK_GTK_BEANS_DEPS) $(LINK_GLIB)
+LINK_FSPOT_BLING = -r:$(DIR_BIN)/FSpot.Bling.dll
+LINK_FSPOT_BLING_DEPS = $(REF_FSPOT_BLING) $(LINK_FSPOT_BLING)
+
+# FSpot.Platform
+REF_FSPOT_PLATFORM = $(LINK_GCONF) $(LINK_GTK) $(LINK_FSPOT_CORE_DEPS) $(LINK_DBUS)
+LINK_FSPOT_PLATFORM = -r:$(DIR_BIN)/FSpot.Platform.dll
+LINK_FSPOT_PLATFORM_DEPS = $(REF_FSPOT_PLATFORM) $(LINK_FSPOT_PLATFORM)
+
+# FSpot.Widgets
+REF_FSPOT_WIDGETS = $(LINK_FSPOT_CORE_DEPS) $(LINK_FSPOT_BLING_DEPS)
+LINK_FSPOT_WIDGETS = -r:$(DIR_BIN)/FSpot.Widgets.dll
+LINK_FSPOT_WIDGETS_DEPS = $(REF_FSPOT_WIDGETS) $(LINK_FSPOT_WIDGETS)
+
+# FSpot (executable)
+REF_FSPOT = $(LINK_FSPOT_WIDGETS_DEPS) $(LINK_FSPOT_PLATFORM_DEPS) $(LINK_FSPOT_QUERY_DEPS) \
+ $(LINK_GLIB) $(LINK_MONO_ADDINS_DEPS) $(LINK_UNIQUE_DEPS) $(LINK_MONO_ADDINS_SETUP_DEPS) \
+ $(LINK_SEMWEB_DEPS) $(LINK_GLADE) $(LINK_MONODATA) $(LINK_MONO_DATA_SQLITECLIENT) \
+ $(LINK_MONO_ADDINS_GUI_DEPS) $(LINK_FSPOT_JOB_SCHEDULER_DEPS) $(LINK_ICSHARP_ZIP_LIB) \
+ $(LINK_GNOME)
+
+# FIXME: do not link executables
+LINK_FSPOT = -r:$(DIR_BIN)/f-spot.exe
+LINK_FSPOT_DEPS = $(REF_FSPOT) $(LINK_FSPOT)
+
+# Extensions
+REF_FSPOT_EXTENSION_BLACKOUTEDITOR = $(LINK_FSPOT_DEPS)
+REF_FSPOT_EXTENSION_BWEDITOR = $(LINK_FSPOT_DEPS) $(LINK_MONO_SIMD)
+REF_FSPOT_EXTENSION_FLIPEDITOR = $(LINK_FSPOT_DEPS)
+REF_FSPOT_EXTENSION_PIXELATEEDITOR = $(LINK_FSPOT_DEPS)
+REF_FSPOT_EXTENSION_RESIZEEDITOR = $(LINK_FSPOT_DEPS)
+REF_FSPOT_EXTENSION_CDEXPORT = $(LINK_FSPOT_DEPS)
+REF_FSPOT_EXTENSION_FACEBOOKEXPORT = $(LINK_FSPOT_DEPS) $(LINK_KEYRING)
+REF_FSPOT_EXTENSION_FLICKREXPORT = $(LINK_FSPOT_DEPS) $(LINK_FLICKRNET)
+REF_FSPOT_EXTENSION_FOLDEREXPORT = $(LINK_FSPOT_DEPS) $(LINK_SYSTEM_WEB)
+REF_FSPOT_EXTENSION_GALLERYEXPORT = $(LINK_FSPOT_DEPS)
+REF_MONO_GOOGLE = $(LINK_HYENA_DEPS)
+LINK_MONO_GOOGLE = -r:$(DIR_BIN)/Mono.Google.dll
+LINK_MONO_GOOGLE_DEPS = $(REF_MONO_GOOGLE) $(LINK_MONO_GOOGLE)
+REF_FSPOT_EXTENSION_PICASAWEBEXPORT = $(LINK_FSPOT_DEPS) $(LINK_MONO_GOOGLE) $(LINK_KEYRING)
+REF_SMUGMUGNET = $(LINK_FSPOT_DEPS)
+LINK_SMUGMUGNET = -r:$(DIR_BIN)/SmugMugNet.dll
+LINK_SMUGMUGNET_DEPS = $(REF_SMUGMUGNET) $(LINK_SMUGMUGNET)
+REF_FSPOT_EXTENSION_SMUGMUGEXPORT = $(LINK_SMUGMUGNET_DEPS) $(LINK_KEYRING)
+REF_MONO_TABBLO = $(LINK_HYENA_DEPS)
+LINK_MONO_TABBLO = -r:$(DIR_BIN)/Mono.Tabblo.dll
+LINK_MONO_TABBLO_DEPS = $(REF_MONO_TABBLO) $(LINK_MONO_TABBLO)
+REF_FSPOT_EXTENSION_TABBLOEXPORT = $(LINK_FSPOT_DEPS) $(LINK_KEYRING) $(LINK_MONO_TABBLO_DEPS)
+REF_FSPOT_EXTENSION_ZIPEXPORT = $(LINK_FSPOT_DEPS)
+REF_FSPOT_EXTENSION_CHANGEPHOTOPATH = $(LINK_FSPOT_DEPS)
+REF_FSPOT_EXTENSION_DEVELOPINUFRAW = $(LINK_FSPOT_DEPS)
+REF_FSPOT_EXTENSION_HASHJOB = $(LINK_FSPOT_DEPS)
+REF_FSPOT_EXTENSION_LIVEWEBGALLERY = $(LINK_FSPOT_DEPS)
+REF_FSPOT_EXTENSION_MERGEDB = $(LINK_FSPOT_DEPS)
+REF_FSPOT_EXTENSION_RAWPLUSJPEG = $(LINK_FSPOT_DEPS)
+REF_FSPOT_EXTENSION_RETROACTIVEROLL = $(LINK_FSPOT_DEPS)
+REF_FSPOT_EXTENSION_SCREENSAVERCONFIG = $(LINK_FSPOT_DEPS)
+REF_FSPOT_EXTENSION_COVERTRANSITION = $(LINK_FSPOT_DEPS)
+
+# Cute hack to replace a space with something
+colon := :
+empty :=
+space := $(empty) $(empty)
+
+# Build path to allow running uninstalled
+RUN_PATH = $(subst $(space),$(colon), $(MONO_BASE_PATH))
+UNIQUE_FILTER_PIPE = tr [:space:] \\n | sort | uniq
+BUILD_DATA_DIR = $(top_builddir)/bin/share/$(PACKAGE)
+
+# Since all other attempts failed, we currently go this way:
+# This code adds the file specified in ASSEMBLY_INFO_SOURCE to SOURCES_BUILD.
+# If no such file is specified, the default AssemblyInfo.cs is used.
+ASSEMBLY_INFO_SOURCE_REAL = \
+ $(shell if [ "$(ASSEMBLY_INFO_SOURCE)" ]; \
+ then \
+ echo "$(addprefix $(srcdir)/, $(ASSEMBLY_INFO_SOURCE))"; \
+ else \
+ echo "$(top_srcdir)/src/AssemblyInfo.cs"; \
+ fi)
+
+SOURCES_BUILD = $(addprefix $(srcdir)/, $(SOURCES)) \
+ $(ASSEMBLY_INFO_SOURCE_REAL)
+RESOURCES_EXPANDED = $(addprefix $(srcdir)/, $(RESOURCES))
+RESOURCES_BUILD = $(foreach resource, $(RESOURCES_EXPANDED), \
+ -resource:$(resource),$(notdir $(resource)))
+
+INSTALL_ICONS = $(top_srcdir)/build/private-icon-theme-installer "$(mkinstalldirs)" "$(INSTALL_DATA)"
+THEME_ICONS_SOURCE = $(wildcard $(srcdir)/ThemeIcons/*/*/*.png) $(wildcard $(srcdir)/ThemeIcons/scalable/*/*.svg)
+THEME_ICONS_RELATIVE = $(subst $(srcdir)/ThemeIcons/, , $(THEME_ICONS_SOURCE))
+ASSEMBLY_EXTENSION = $(strip $(patsubst library, dll, $(TARGET)))
+ASSEMBLY_FILE = $(top_builddir)/bin/$(ASSEMBLY).$(ASSEMBLY_EXTENSION)
+INSTALL_DIR_RESOLVED = $(firstword $(subst , $(DEFAULT_INSTALL_DIR), $(INSTALL_DIR)))
+ at ENABLE_TESTS_TRUE@ENABLE_TESTS_FLAG = "-define:ENABLE_TESTS"
+ at ENABLE_ATK_TRUE@ENABLE_ATK_FLAG = "-define:ENABLE_ATK"
+FILTERED_LINK = $(shell echo "$(LINK)" | $(UNIQUE_FILTER_PIPE))
+DEP_LINK = $(shell echo "$(LINK)" | $(UNIQUE_FILTER_PIPE) | sed s,-r:,,g | grep '$(top_builddir)/bin/')
+OUTPUT_FILES = \
+ $(ASSEMBLY_FILE) \
+ $(ASSEMBLY_FILE).mdb
+
+moduledir = $(INSTALL_DIR_RESOLVED)
+module_SCRIPTS = $(OUTPUT_FILES)
+EXTRA_DIST = $(SOURCES_BUILD) $(RESOURCES_EXPANDED) $(THEME_ICONS_SOURCE)
+CLEANFILES = $(OUTPUT_FILES) $(ASSEMBLY_FILE).config
+DISTCLEANFILES = *.pidb
+MAINTAINERCLEANFILES = Makefile.in
all: all-am
.SUFFIXES:
-$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(top_srcdir)/Makefile.addins $(top_srcdir)/Makefile.include $(am__configure_deps)
+$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(top_srcdir)/build/build.mk $(top_srcdir)/build/build.environment.mk $(top_srcdir)/build/build.rules.mk $(am__configure_deps)
@for dep in $?; do \
case '$(am__configure_deps)' in \
*$$dep*) \
@@ -390,32 +555,46 @@ $(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps)
$(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps)
cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
$(am__aclocal_m4_deps):
+install-moduleSCRIPTS: $(module_SCRIPTS)
+ @$(NORMAL_INSTALL)
+ test -z "$(moduledir)" || $(MKDIR_P) "$(DESTDIR)$(moduledir)"
+ @list='$(module_SCRIPTS)'; test -n "$(moduledir)" || list=; \
+ for p in $$list; do \
+ if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \
+ if test -f "$$d$$p"; then echo "$$d$$p"; echo "$$p"; else :; fi; \
+ done | \
+ sed -e 'p;s,.*/,,;n' \
+ -e 'h;s|.*|.|' \
+ -e 'p;x;s,.*/,,;$(transform)' | sed 'N;N;N;s,\n, ,g' | \
+ $(AWK) 'BEGIN { files["."] = ""; dirs["."] = 1; } \
+ { d=$$3; if (dirs[d] != 1) { print "d", d; dirs[d] = 1 } \
+ if ($$2 == $$4) { files[d] = files[d] " " $$1; \
+ if (++n[d] == $(am__install_max)) { \
+ print "f", d, files[d]; n[d] = 0; files[d] = "" } } \
+ else { print "f", d "/" $$4, $$1 } } \
+ END { for (d in files) print "f", d, files[d] }' | \
+ while read type dir files; do \
+ if test "$$dir" = .; then dir=; else dir=/$$dir; fi; \
+ test -z "$$files" || { \
+ echo " $(INSTALL_SCRIPT) $$files '$(DESTDIR)$(moduledir)$$dir'"; \
+ $(INSTALL_SCRIPT) $$files "$(DESTDIR)$(moduledir)$$dir" || exit $$?; \
+ } \
+ ; done
+
+uninstall-moduleSCRIPTS:
+ @$(NORMAL_UNINSTALL)
+ @list='$(module_SCRIPTS)'; test -n "$(moduledir)" || exit 0; \
+ files=`for p in $$list; do echo "$$p"; done | \
+ sed -e 's,.*/,,;$(transform)'`; \
+ test -n "$$list" || exit 0; \
+ echo " ( cd '$(DESTDIR)$(moduledir)' && rm -f" $$files ")"; \
+ cd "$(DESTDIR)$(moduledir)" && rm -f $$files
mostlyclean-libtool:
-rm -f *.lo
clean-libtool:
-rm -rf .libs _libs
-install-addinDATA: $(addin_DATA)
- @$(NORMAL_INSTALL)
- test -z "$(addindir)" || $(MKDIR_P) "$(DESTDIR)$(addindir)"
- @list='$(addin_DATA)'; test -n "$(addindir)" || list=; \
- for p in $$list; do \
- if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \
- echo "$$d$$p"; \
- done | $(am__base_list) | \
- while read files; do \
- echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(addindir)'"; \
- $(INSTALL_DATA) $$files "$(DESTDIR)$(addindir)" || exit $$?; \
- done
-
-uninstall-addinDATA:
- @$(NORMAL_UNINSTALL)
- @list='$(addin_DATA)'; test -n "$(addindir)" || list=; \
- files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \
- test -n "$$files" || exit 0; \
- echo " ( cd '$(DESTDIR)$(addindir)' && rm -f" $$files ")"; \
- cd "$(DESTDIR)$(addindir)" && rm -f $$files
tags: TAGS
TAGS:
@@ -455,9 +634,9 @@ distdir: $(DISTFILES)
done
check-am: all-am
check: check-am
-all-am: Makefile $(DATA)
+all-am: Makefile $(SCRIPTS)
installdirs:
- for dir in "$(DESTDIR)$(addindir)"; do \
+ for dir in "$(DESTDIR)$(moduledir)"; do \
test -z "$$dir" || $(MKDIR_P) "$$dir"; \
done
install: install-am
@@ -482,10 +661,12 @@ clean-generic:
distclean-generic:
-test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
-test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES)
+ -test -z "$(DISTCLEANFILES)" || rm -f $(DISTCLEANFILES)
maintainer-clean-generic:
@echo "This command is intended for maintainers to use"
@echo "it deletes files that may require special tools to rebuild."
+ -test -z "$(MAINTAINERCLEANFILES)" || rm -f $(MAINTAINERCLEANFILES)
clean: clean-am
clean-am: clean-generic clean-libtool mostlyclean-am
@@ -506,7 +687,7 @@ info: info-am
info-am:
-install-data-am: install-addinDATA
+install-data-am: install-data-local install-moduleSCRIPTS
install-dvi: install-dvi-am
@@ -550,28 +731,72 @@ ps: ps-am
ps-am:
-uninstall-am: uninstall-addinDATA
+uninstall-am: uninstall-local uninstall-moduleSCRIPTS
.MAKE: install-am install-strip
.PHONY: all all-am check check-am clean clean-generic clean-libtool \
distclean distclean-generic distclean-libtool distdir dvi \
- dvi-am html html-am info info-am install install-addinDATA \
- install-am install-data install-data-am install-dvi \
+ dvi-am html html-am info info-am install install-am \
+ install-data install-data-am install-data-local 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-generic mostlyclean-libtool pdf pdf-am ps ps-am \
- uninstall uninstall-addinDATA uninstall-am
-
-
-mpack: $(ASSEMBLY)
- mautil p $(ASSEMBLY)
-
-$(ASSEMBLY): $(addin_SOURCES) $(dep_resources)
- $(CSC_LIB) -out:$@ $(addin_extraflags) $(build_sources) $(build_references) $(build_packages) $(build_resources)
+ install-moduleSCRIPTS install-pdf install-pdf-am install-ps \
+ install-ps-am install-strip installcheck installcheck-am \
+ installdirs maintainer-clean maintainer-clean-generic \
+ mostlyclean mostlyclean-generic mostlyclean-libtool pdf pdf-am \
+ ps ps-am uninstall uninstall-am uninstall-local \
+ uninstall-moduleSCRIPTS
+
+
+all: $(ASSEMBLY_FILE) theme-icons
+
+run:
+ @pushd $(top_builddir); \
+ make run; \
+ popd;
+
+# uncommented for now.
+# tests are currently excuted from Makefile in $(top_builddir)
+#test:
+# @pushd $(top_builddir)/tests; \
+# make $(ASSEMBLY); \
+# popd;
+
+build-debug:
+ @echo $(DEP_LINK)
+
+$(ASSEMBLY_FILE).mdb: $(ASSEMBLY_FILE)
+
+$(ASSEMBLY_FILE): $(SOURCES_BUILD) $(RESOURCES_EXPANDED) $(DEP_LINK)
+ @mkdir -p $(top_builddir)/bin
+ @if [ ! "x$(ENABLE_RELEASE)" = "xyes" ]; then \
+ $(top_srcdir)/build/dll-map-makefile-verifier $(srcdir)/Makefile.am $(srcdir)/$(notdir $@.config) && \
+ $(MONO) $(top_builddir)/build/dll-map-verifier.exe $(srcdir)/$(notdir $@.config) -iwinmm -ilibbanshee -ilibbnpx11 -ilibc -ilibc.so.6 -iintl -ilibmtp.dll -ilibigemacintegration.dylib -iCFRelease $(SOURCES_BUILD); \
+ fi;
+ $(MCS) \
+ $(GMCS_FLAGS) \
+ $(ASSEMBLY_BUILD_FLAGS) \
+ -nowarn:0278 -nowarn:0078 $$warn \
+ -define:HAVE_GTK_2_10 -define:NET_2_0 \
+ -debug -target:$(TARGET) -out:$@ \
+ $(BUILD_DEFINES) $(ENABLE_TESTS_FLAG) $(ENABLE_ATK_FLAG) \
+ $(FILTERED_LINK) $(RESOURCES_BUILD) $(SOURCES_BUILD)
+ @if [ -e $(srcdir)/$(notdir $@.config) ]; then \
+ cp $(srcdir)/$(notdir $@.config) $(top_builddir)/bin; \
+ fi;
+ @if [ ! -z "$(EXTRA_BUNDLE)" ]; then \
+ cp $(EXTRA_BUNDLE) $(top_builddir)/bin; \
+ fi;
+
+theme-icons: $(THEME_ICONS_SOURCE)
+ @$(INSTALL_ICONS) -il "$(BUILD_DATA_DIR)" "$(srcdir)" $(THEME_ICONS_RELATIVE)
+
+install-data-local: $(THEME_ICONS_SOURCE)
+ @$(INSTALL_ICONS) -i "$(DESTDIR)$(pkgdatadir)" "$(srcdir)" $(THEME_ICONS_RELATIVE)
+
+uninstall-local: $(THEME_ICONS_SOURCE)
+ @$(INSTALL_ICONS) -u "$(DESTDIR)$(pkgdatadir)" "$(srcdir)" $(THEME_ICONS_RELATIVE)
# 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/extensions/Tools/RetroactiveRoll/RetroactiveRoll.cs b/extensions/Tools/RetroactiveRoll/RetroactiveRoll.cs
index 019713a..310277f 100644
--- a/extensions/Tools/RetroactiveRoll/RetroactiveRoll.cs
+++ b/extensions/Tools/RetroactiveRoll/RetroactiveRoll.cs
@@ -14,6 +14,7 @@ using Mono.Unix;
using System;
using Mono.Data.SqliteClient;
using Banshee.Database;
+using Hyena;
namespace RetroactiveRoll
{
@@ -21,10 +22,10 @@ namespace RetroactiveRoll
{
public void Run (object o, EventArgs e)
{
- Photo[] photos = MainWindow.Toplevel.SelectedPhotos ();
+ Photo[] photos = App.Instance.Organizer.SelectedPhotos ();
if (photos.Length == 0) {
- Console.WriteLine ("no photos selected, returning");
+ Log.Debug ("no photos selected, returning");
return;
}
@@ -43,7 +44,7 @@ namespace RetroactiveRoll
App.Instance.Database.Database.ExecuteNonQuery (cmd);
p.RollId = roll.Id;
}
- Console.WriteLine ("RetroactiveRoll done: " + photos.Length + " photos in roll " + roll.Id);
+ Log.Debug ("RetroactiveRoll done: " + photos.Length + " photos in roll " + roll.Id);
}
}
}
diff --git a/extensions/Tools/ScreensaverConfig/Makefile.am b/extensions/Tools/ScreensaverConfig/Makefile.am
index e0016c8..1edc011 100644
--- a/extensions/Tools/ScreensaverConfig/Makefile.am
+++ b/extensions/Tools/ScreensaverConfig/Makefile.am
@@ -1,20 +1,12 @@
-addin = ScreensaverConfig
+ASSEMBLY = FSpot.Exporters.ScreensaverConfig
+TARGET = library
+LINK = $(REF_FSPOT_EXTENSION_SCREENSAVERCONFIG)
+INSTALL_DIR = $(EXTENSIONS_INSTALL_DIR)
-addin_manifest = $(addin).addin.xml
+SOURCES = ScreensaverConfig.cs
-addin_sources = \
- $(addin).cs
+RESOURCES = \
+ ScreensaverConfig.addin.xml \
+ ScreensaverConfigDialog.ui
-addin_resources = \
- ScreensaverConfigDialog.ui \
- $(addin_manifest)
-
-addin_references = \
- Mono.Posix
-
-addin_packages = \
- gtk-sharp-2.0
-
-addin_extradist =
-
-include $(top_srcdir)/Makefile.addins
+include $(top_srcdir)/build/build.mk
diff --git a/extensions/Tools/ScreensaverConfig/Makefile.in b/extensions/Tools/ScreensaverConfig/Makefile.in
index ed38f88..566270d 100644
--- a/extensions/Tools/ScreensaverConfig/Makefile.in
+++ b/extensions/Tools/ScreensaverConfig/Makefile.in
@@ -35,13 +35,22 @@ POST_UNINSTALL = :
build_triplet = @build@
host_triplet = @host@
DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in \
- $(top_srcdir)/Makefile.addins $(top_srcdir)/Makefile.include
+ $(top_srcdir)/build/build.environment.mk \
+ $(top_srcdir)/build/build.mk \
+ $(top_srcdir)/build/build.rules.mk
+ at ENABLE_TESTS_TRUE@am__append_1 = " $(NUNIT_LIBS)"
subdir = extensions/Tools/ScreensaverConfig
ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
am__aclocal_m4_deps = $(top_srcdir)/build/m4/shave/shave.m4 \
$(top_srcdir)/build/m4/shamrock/expansions.m4 \
+ $(top_srcdir)/build/m4/shamrock/gnome-doc.m4 \
$(top_srcdir)/build/m4/shamrock/mono.m4 \
+ $(top_srcdir)/build/m4/shamrock/nunit.m4 \
$(top_srcdir)/build/m4/shamrock/programs.m4 \
+ $(top_srcdir)/build/m4/f-spot/flickrnet.m4 \
+ $(top_srcdir)/build/m4/f-spot/gnome-keyring-sharp.m4 \
+ $(top_srcdir)/build/m4/f-spot/gtk-sharp.m4 \
+ $(top_srcdir)/build/m4/f-spot/mono-addins.m4 \
$(top_srcdir)/acinclude.m4 $(top_srcdir)/configure.ac
am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
$(ACLOCAL_M4)
@@ -49,8 +58,6 @@ mkinstalldirs = $(install_sh) -d
CONFIG_HEADER = $(top_builddir)/config.h
CONFIG_CLEAN_FILES =
CONFIG_CLEAN_VPATH_FILES =
-SOURCES =
-DIST_SOURCES =
am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`;
am__vpath_adj = case $$p in \
$(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \
@@ -72,8 +79,9 @@ am__nobase_list = $(am__nobase_strip_setup); \
am__base_list = \
sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \
sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g'
-am__installdirs = "$(DESTDIR)$(addindir)"
-DATA = $(addin_DATA)
+am__installdirs = "$(DESTDIR)$(moduledir)"
+SCRIPTS = $(module_SCRIPTS)
+DIST_SOURCES =
DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
ACLOCAL = @ACLOCAL@
ACLOCAL_AMFLAGS = @ACLOCAL_AMFLAGS@
@@ -119,6 +127,8 @@ EXIF_SOVERSION = @EXIF_SOVERSION@
F77 = @F77@
FC = @FC@
FGREP = @FGREP@
+FLICKRNET_CFLAGS = @FLICKRNET_CFLAGS@
+FLICKRNET_LIBS = @FLICKRNET_LIBS@
F_CFLAGS = @F_CFLAGS@
F_LIBS = @F_LIBS@
GAPI2CODEGEN = @GAPI2CODEGEN@
@@ -132,6 +142,8 @@ GCONF_SHARP_LIBS = @GCONF_SHARP_LIBS@
GETTEXT_PACKAGE = @GETTEXT_PACKAGE@
GIO_CFLAGS = @GIO_CFLAGS@
GIO_LIBS = @GIO_LIBS@
+GLIBSHARP_2_12_7_CFLAGS = @GLIBSHARP_2_12_7_CFLAGS@
+GLIBSHARP_2_12_7_LIBS = @GLIBSHARP_2_12_7_LIBS@
GLIBSHARP_CFLAGS = @GLIBSHARP_CFLAGS@
GLIBSHARP_LIBS = @GLIBSHARP_LIBS@
GLIB_CFLAGS = @GLIB_CFLAGS@
@@ -147,6 +159,10 @@ GNOME_SHARP_CFLAGS = @GNOME_SHARP_CFLAGS@
GNOME_SHARP_LIBS = @GNOME_SHARP_LIBS@
GOBJECT_QUERY = @GOBJECT_QUERY@
GREP = @GREP@
+GTKSHARP_A11Y_CFLAGS = @GTKSHARP_A11Y_CFLAGS@
+GTKSHARP_A11Y_LIBS = @GTKSHARP_A11Y_LIBS@
+GTKSHARP_CFLAGS = @GTKSHARP_CFLAGS@
+GTKSHARP_LIBS = @GTKSHARP_LIBS@
HELP_DIR = @HELP_DIR@
ICONS_DIRECTORY = @ICONS_DIRECTORY@
INSTALL = @INSTALL@
@@ -160,14 +176,14 @@ INTLTOOL_EXTRACT = @INTLTOOL_EXTRACT@
INTLTOOL_MERGE = @INTLTOOL_MERGE@
INTLTOOL_PERL = @INTLTOOL_PERL@
INTLTOOL_UPDATE = @INTLTOOL_UPDATE@
+KEYRINGSHARP_CFLAGS = @KEYRINGSHARP_CFLAGS@
+KEYRINGSHARP_LIBS = @KEYRINGSHARP_LIBS@
LCMS_CFLAGS = @LCMS_CFLAGS@
LCMS_LIBS = @LCMS_LIBS@
LD = @LD@
LDFLAGS = @LDFLAGS@
LIBEXIF_VERSION_CHECK_CFLAGS = @LIBEXIF_VERSION_CHECK_CFLAGS@
LIBEXIF_VERSION_CHECK_LIBS = @LIBEXIF_VERSION_CHECK_LIBS@
-LIBGPHOTO2_CFLAGS = @LIBGPHOTO2_CFLAGS@
-LIBGPHOTO2_LIBS = @LIBGPHOTO2_LIBS@
LIBJPEG = @LIBJPEG@
LIBOBJS = @LIBOBJS@
LIBS = @LIBS@
@@ -182,6 +198,12 @@ MCS = @MCS@
MKDIR_P = @MKDIR_P@
MKINSTALLDIRS = @MKINSTALLDIRS@
MONO = @MONO@
+MONO_ADDINS_CFLAGS = @MONO_ADDINS_CFLAGS@
+MONO_ADDINS_GUI_CFLAGS = @MONO_ADDINS_GUI_CFLAGS@
+MONO_ADDINS_GUI_LIBS = @MONO_ADDINS_GUI_LIBS@
+MONO_ADDINS_LIBS = @MONO_ADDINS_LIBS@
+MONO_ADDINS_SETUP_CFLAGS = @MONO_ADDINS_SETUP_CFLAGS@
+MONO_ADDINS_SETUP_LIBS = @MONO_ADDINS_SETUP_LIBS@
MONO_MODULE_CFLAGS = @MONO_MODULE_CFLAGS@
MONO_MODULE_LIBS = @MONO_MODULE_LIBS@
MSGFMT = @MSGFMT@
@@ -192,7 +214,6 @@ NDESK_DBUS_LIBS = @NDESK_DBUS_LIBS@
NM = @NM@
NMEDIT = @NMEDIT@
NUNIT_CFLAGS = @NUNIT_CFLAGS@
-NUNIT_DEFINES = @NUNIT_DEFINES@
NUNIT_LIBS = @NUNIT_LIBS@
OBJC = @OBJC@
OBJDUMP = @OBJDUMP@
@@ -284,83 +305,230 @@ target_alias = @target_alias@
top_build_prefix = @top_build_prefix@
top_builddir = @top_builddir@
top_srcdir = @top_srcdir@
-addin = ScreensaverConfig
-addin_manifest = $(addin).addin.xml
-addin_sources = \
- $(addin).cs
-
-addin_resources = \
- ScreensaverConfigDialog.ui \
- $(addin_manifest)
-
-addin_references = \
- Mono.Posix
-
-addin_packages = \
- gtk-sharp-2.0
-
-addin_extradist =
-ASSEMBLY = $(addin).dll
+ASSEMBLY = FSpot.Exporters.ScreensaverConfig
+TARGET = library
+LINK = $(REF_FSPOT_EXTENSION_SCREENSAVERCONFIG) $(am__append_1)
+INSTALL_DIR = $(EXTENSIONS_INSTALL_DIR)
+SOURCES = ScreensaverConfig.cs
+RESOURCES = \
+ ScreensaverConfig.addin.xml \
+ ScreensaverConfigDialog.ui
+
+
+# Initializers
+MONO_BASE_PATH =
+MONO_ADDINS_PATH =
+
+# Install Paths
+DEFAULT_INSTALL_DIR = $(pkglibdir)
+BACKENDS_INSTALL_DIR = $(DEFAULT_INSTALL_DIR)/Backends
+EXTENSIONS_INSTALL_DIR = $(DEFAULT_INSTALL_DIR)/Extensions
DIR_DOCS = $(top_builddir)/docs
DIR_EXTENSIONS = $(top_builddir)/extensions
-DIR_GPHOTO2 = $(top_builddir)/lib/libgphoto2-sharp
DIR_ICONS = $(top_builddir)/icons
DIR_JPEGTRAN = $(top_builddir)/lib/libjpegtran
-DIR_KEYRING = $(top_builddir)/lib/gnome-keyring-sharp
DIR_LIBFSPOT = $(top_builddir)/lib/libfspot
DIR_SEMWEB = $(top_builddir)/lib/semweb
DIR_SRC = $(top_builddir)/src
DIR_GIOSHARP = $(top_builddir)/lib/gio-sharp/gio
DIR_GTKSHARPBEANS = $(top_builddir)/lib/gtk-sharp-beans
DIR_UNIQUESHARP = $(top_builddir)/lib/unique-sharp/unique
-LINK_KEYRING = -r:$(DIR_KEYRING)/gnome-keyring-sharp.dll
-LINK_GPHOTO2 = -r:$(DIR_GPHOTO2)/libgphoto2-sharp.dll
-LINK_SEMWEB = -r:$(DIR_SEMWEB)/SemWeb.dll
-LINK_GIOSHARP = -r:$(DIR_GIOSHARP)/gio-sharp.dll
-LINK_GTKSHARPBEANS = -r:$(DIR_GTKSHARPBEANS)/gtk-sharp-beans.dll
-LINK_UNIQUESHARP = -r:$(DIR_UNIQUESHARP)/unique-sharp.dll
-CSC_FLAGS = -debug
-CSC = $(MCS) $(CSC_FLAGS) -target:exe
-CSC_LIB = $(MCS) $(CSC_FLAGS) -target:library
-MONO_DEBUGFLAGS = --debug
-RUNTIME = mono $(MONO_DEBUGFLAGS)
-dep_resources = $(addprefix $(srcdir)/, $(addin_resources))
-build_resources = $(foreach res, $(dep_resources), $(addprefix -resource:, $(res)),$(notdir $(res)))
-build_sources = $(addprefix $(srcdir)/, $(addin_sources))
-build_packages = \
- $(addprefix -pkg:, $(addin_packages)) \
- -pkg:mono-addins
-
-build_references = \
- $(addprefix -r:, $(addin_references)) \
- -r:$(top_builddir)/src/f-spot.exe \
- -r:$(top_builddir)/src/Cms.dll \
- -r:$(top_builddir)/src/FSpot.Core.dll \
- -r:$(top_builddir)/src/FSpot.Platform.dll \
- -r:$(top_builddir)/src/FSpot.Query.dll \
- -r:$(top_builddir)/src/FSpot.Utils.dll \
- -r:$(top_builddir)/src/FSpot.Widgets.dll \
- $(LINK_SEMWEB) \
- $(LINK_GPHOTO2) \
- $(LINK_GIOSHARP) \
- $(LINK_UNIQUESHARP) \
- $(LINK_GTKSHARPBEANS)
-
-addin_SOURCES = \
- $(build_sources)
-
-addindir = $(pkglibdir)/extensions
-addin_DATA = $(ASSEMBLY)
-CLEANFILES = $(ASSEMBLY) $(ASSEMBLY).mdb *.mpack
-EXTRA_DIST = \
- $(build_sources) \
- $(dep_resources) \
- $(addin_extradist)
-
+DIR_BIN = $(top_builddir)/bin
+
+# External libraries to link against, generated from configure
+LINK_SYSTEM = -r:System
+LINK_SYSTEMDATA = -r:System.Data
+LINK_SYSTEM_WEB = -r:System.Web
+LINK_MONO_POSIX = -r:Mono.Posix
+LINK_MONO_CAIRO = -r:Mono.Cairo
+LINK_MONO_SIMD = -r:Mono.Simd
+LINK_MONODATA = -r:Mono.Data
+LINK_MONO_DATA_SQLITECLIENT = -r:Mono.Data.SqliteClient
+LINK_ICSHARP_ZIP_LIB = -r:ICSharpCode.SharpZipLib
+LINK_KEYRING = $(KEYRINGSHARP_LIBS)
+LINK_GLIB = $(GLIBSHARP_LIBS)
+LINK_GTK = $(GTKSHARP_LIBS)
+LINK_GNOME = $(GNOME_SHARP_LIBS)
+LINK_GCONF = $(GCONF_SHARP_LIBS)
+LINK_GLADE = -pkg:glade-sharp-2.0
+LINK_FLICKRNET = -pkg:flickrnet
+LINK_DBUS = $(NDESK_DBUS_LIBS) $(NDESK_DBUS_GLIB_LIBS)
+LINK_DBUS_NO_GLIB = $(NDESK_DBUS_LIBS)
+LINK_MONO_ADDINS_DEPS = $(MONO_ADDINS_LIBS)
+LINK_MONO_ADDINS_SETUP_DEPS = $(MONO_ADDINS_SETUP_LIBS)
+LINK_MONO_ADDINS_GUI_DEPS = $(MONO_ADDINS_GUI_LIBS)
+
+# GIO
+REF_GIO =
+LINK_GIO = -r:$(DIR_GIOSHARP)/gio-sharp.dll
+LINK_GIO_DEPS = $(REF_GIO) $(LINK_GIO)
+
+# Gtk Beans
+REF_GTK_BEANS = $(LINK_GIO_DEPS)
+LINK_GTK_BEANS = -r:$(DIR_GTKSHARPBEANS)/gtk-sharp-beans.dll
+LINK_GTK_BEANS_DEPS = $(REF_GTK_BEANS) $(LINK_GTK_BEANS)
+
+# Uniqe
+REF_UNIQUE =
+LINK_UNIQUE = -r:$(DIR_UNIQUESHARP)/unique-sharp.dll
+LINK_UNIQUE_DEPS = $(REF_UNIQUE) $(LINK_UNIQUE)
+
+# Hyena
+REF_HYENA = $(LINK_SYSTEM) $(LINK_MONO_POSIX)
+LINK_HYENA = -r:$(DIR_BIN)/Hyena.dll
+LINK_HYENA_DEPS = $(REF_HYENA) $(LINK_HYENA)
+
+# Semweb
+REF_SEMWEB = $(LINK_SYSTEMDATA) $(LINK_HYENA_DEPS)
+LINK_SEMWEB = -r:$(DIR_BIN)/SemWeb.dll
+LINK_SEMWEB_DEPS = $(REF_SEMWEB) $(LINK_SEMWEB)
+
+# Hyena.Data.Sqlite
+REF_HYENA_DATA_SQLITE = $(LINK_SQLITE)
+LINK_HYENA_DATA_SQLITE = -r:$(DIR_BIN)/Hyena.Data.Sqlite.dll
+LINK_HYENA_DATA_SQLITE_DEPS = $(REF_HYENA_DATA_SQLITE) $(LINK_HYENA_DATA_SQLITE)
+
+# Hyena.Gui
+REF_HYENA_GUI = $(LINK_HYENA_DEPS)
+LINK_HYENA_GUI = -r:$(DIR_BIN)/Hyena.Gui.dll
+LINK_HENA_GUI_DEPS = $(REF_HYENA_GUI) $(LINK_HYENA_GUI)
+
+# FSpot.Cms
+REF_FSPOT_CMS = $(LINK_GTK)
+LINK_FSPOT_CMS = -r:$(DIR_BIN)/FSpot.Cms.dll
+LINK_FSPOT_CMS_DEPS = $(REF_FSPOT_CMS) $(LINK_FSPOT_CMS)
+
+# FSpot.Utils
+REF_FSPOT_UTILS = $(LINK_HYENA_DEPS) $(LINK_GTK) $(LINK_GIO) $(LINK_MONO_CAIRO)
+LINK_FSPOT_UTILS = -r:$(DIR_BIN)/FSpot.Utils.dll
+LINK_FSPOT_UTILS_DEPS = $(REF_FSPOT_UTILS) $(LINK_FSPOT_UTILS)
+
+# FSpot.Core
+REF_FSPOT_CORE = $(LINK_FSPOT_UTILS_DEPS) $(LINK_FSPOT_CMS_DEPS)
+LINK_FSPOT_CORE = -r:$(DIR_BIN)/FSpot.Core.dll
+LINK_FSPOT_CORE_DEPS = $(REF_FSPOT_CORE) $(LINK_FSPOT_CORE)
+
+# FSpot.Query
+REF_FSPOT_QUERY = $(LINK_FSPOT_CORE_DEPS)
+LINK_FSPOT_QUERY = -r:$(DIR_BIN)/FSpot.Query.dll
+LINK_FSPOT_QUERY_DEPS = $(REF_FSPOT_QUERY) $(LINK_FSPOT_QUERY)
+
+# FSpot.JobScheduler
+REF_FSPOT_JOB_SCHEDULER = $(LINK_HYENA_DEPS)
+LINK_FSPOT_JOB_SCHEDULER = -r:$(DIR_BIN)/FSpot.JobScheduler.dll
+LINK_FSPOT_JOB_SCHEDULER_DEPS = $(REF_FSPOT_JOB_SCHEDULER) $(LINK_FSPOT_JOB_SCHEDULER)
+
+# FSpot.Bling
+REF_FSPOT_BLING = $(LINK_GTK_BEANS_DEPS) $(LINK_GLIB)
+LINK_FSPOT_BLING = -r:$(DIR_BIN)/FSpot.Bling.dll
+LINK_FSPOT_BLING_DEPS = $(REF_FSPOT_BLING) $(LINK_FSPOT_BLING)
+
+# FSpot.Platform
+REF_FSPOT_PLATFORM = $(LINK_GCONF) $(LINK_GTK) $(LINK_FSPOT_CORE_DEPS) $(LINK_DBUS)
+LINK_FSPOT_PLATFORM = -r:$(DIR_BIN)/FSpot.Platform.dll
+LINK_FSPOT_PLATFORM_DEPS = $(REF_FSPOT_PLATFORM) $(LINK_FSPOT_PLATFORM)
+
+# FSpot.Widgets
+REF_FSPOT_WIDGETS = $(LINK_FSPOT_CORE_DEPS) $(LINK_FSPOT_BLING_DEPS)
+LINK_FSPOT_WIDGETS = -r:$(DIR_BIN)/FSpot.Widgets.dll
+LINK_FSPOT_WIDGETS_DEPS = $(REF_FSPOT_WIDGETS) $(LINK_FSPOT_WIDGETS)
+
+# FSpot (executable)
+REF_FSPOT = $(LINK_FSPOT_WIDGETS_DEPS) $(LINK_FSPOT_PLATFORM_DEPS) $(LINK_FSPOT_QUERY_DEPS) \
+ $(LINK_GLIB) $(LINK_MONO_ADDINS_DEPS) $(LINK_UNIQUE_DEPS) $(LINK_MONO_ADDINS_SETUP_DEPS) \
+ $(LINK_SEMWEB_DEPS) $(LINK_GLADE) $(LINK_MONODATA) $(LINK_MONO_DATA_SQLITECLIENT) \
+ $(LINK_MONO_ADDINS_GUI_DEPS) $(LINK_FSPOT_JOB_SCHEDULER_DEPS) $(LINK_ICSHARP_ZIP_LIB) \
+ $(LINK_GNOME)
+
+# FIXME: do not link executables
+LINK_FSPOT = -r:$(DIR_BIN)/f-spot.exe
+LINK_FSPOT_DEPS = $(REF_FSPOT) $(LINK_FSPOT)
+
+# Extensions
+REF_FSPOT_EXTENSION_BLACKOUTEDITOR = $(LINK_FSPOT_DEPS)
+REF_FSPOT_EXTENSION_BWEDITOR = $(LINK_FSPOT_DEPS) $(LINK_MONO_SIMD)
+REF_FSPOT_EXTENSION_FLIPEDITOR = $(LINK_FSPOT_DEPS)
+REF_FSPOT_EXTENSION_PIXELATEEDITOR = $(LINK_FSPOT_DEPS)
+REF_FSPOT_EXTENSION_RESIZEEDITOR = $(LINK_FSPOT_DEPS)
+REF_FSPOT_EXTENSION_CDEXPORT = $(LINK_FSPOT_DEPS)
+REF_FSPOT_EXTENSION_FACEBOOKEXPORT = $(LINK_FSPOT_DEPS) $(LINK_KEYRING)
+REF_FSPOT_EXTENSION_FLICKREXPORT = $(LINK_FSPOT_DEPS) $(LINK_FLICKRNET)
+REF_FSPOT_EXTENSION_FOLDEREXPORT = $(LINK_FSPOT_DEPS) $(LINK_SYSTEM_WEB)
+REF_FSPOT_EXTENSION_GALLERYEXPORT = $(LINK_FSPOT_DEPS)
+REF_MONO_GOOGLE = $(LINK_HYENA_DEPS)
+LINK_MONO_GOOGLE = -r:$(DIR_BIN)/Mono.Google.dll
+LINK_MONO_GOOGLE_DEPS = $(REF_MONO_GOOGLE) $(LINK_MONO_GOOGLE)
+REF_FSPOT_EXTENSION_PICASAWEBEXPORT = $(LINK_FSPOT_DEPS) $(LINK_MONO_GOOGLE) $(LINK_KEYRING)
+REF_SMUGMUGNET = $(LINK_FSPOT_DEPS)
+LINK_SMUGMUGNET = -r:$(DIR_BIN)/SmugMugNet.dll
+LINK_SMUGMUGNET_DEPS = $(REF_SMUGMUGNET) $(LINK_SMUGMUGNET)
+REF_FSPOT_EXTENSION_SMUGMUGEXPORT = $(LINK_SMUGMUGNET_DEPS) $(LINK_KEYRING)
+REF_MONO_TABBLO = $(LINK_HYENA_DEPS)
+LINK_MONO_TABBLO = -r:$(DIR_BIN)/Mono.Tabblo.dll
+LINK_MONO_TABBLO_DEPS = $(REF_MONO_TABBLO) $(LINK_MONO_TABBLO)
+REF_FSPOT_EXTENSION_TABBLOEXPORT = $(LINK_FSPOT_DEPS) $(LINK_KEYRING) $(LINK_MONO_TABBLO_DEPS)
+REF_FSPOT_EXTENSION_ZIPEXPORT = $(LINK_FSPOT_DEPS)
+REF_FSPOT_EXTENSION_CHANGEPHOTOPATH = $(LINK_FSPOT_DEPS)
+REF_FSPOT_EXTENSION_DEVELOPINUFRAW = $(LINK_FSPOT_DEPS)
+REF_FSPOT_EXTENSION_HASHJOB = $(LINK_FSPOT_DEPS)
+REF_FSPOT_EXTENSION_LIVEWEBGALLERY = $(LINK_FSPOT_DEPS)
+REF_FSPOT_EXTENSION_MERGEDB = $(LINK_FSPOT_DEPS)
+REF_FSPOT_EXTENSION_RAWPLUSJPEG = $(LINK_FSPOT_DEPS)
+REF_FSPOT_EXTENSION_RETROACTIVEROLL = $(LINK_FSPOT_DEPS)
+REF_FSPOT_EXTENSION_SCREENSAVERCONFIG = $(LINK_FSPOT_DEPS)
+REF_FSPOT_EXTENSION_COVERTRANSITION = $(LINK_FSPOT_DEPS)
+
+# Cute hack to replace a space with something
+colon := :
+empty :=
+space := $(empty) $(empty)
+
+# Build path to allow running uninstalled
+RUN_PATH = $(subst $(space),$(colon), $(MONO_BASE_PATH))
+UNIQUE_FILTER_PIPE = tr [:space:] \\n | sort | uniq
+BUILD_DATA_DIR = $(top_builddir)/bin/share/$(PACKAGE)
+
+# Since all other attempts failed, we currently go this way:
+# This code adds the file specified in ASSEMBLY_INFO_SOURCE to SOURCES_BUILD.
+# If no such file is specified, the default AssemblyInfo.cs is used.
+ASSEMBLY_INFO_SOURCE_REAL = \
+ $(shell if [ "$(ASSEMBLY_INFO_SOURCE)" ]; \
+ then \
+ echo "$(addprefix $(srcdir)/, $(ASSEMBLY_INFO_SOURCE))"; \
+ else \
+ echo "$(top_srcdir)/src/AssemblyInfo.cs"; \
+ fi)
+
+SOURCES_BUILD = $(addprefix $(srcdir)/, $(SOURCES)) \
+ $(ASSEMBLY_INFO_SOURCE_REAL)
+RESOURCES_EXPANDED = $(addprefix $(srcdir)/, $(RESOURCES))
+RESOURCES_BUILD = $(foreach resource, $(RESOURCES_EXPANDED), \
+ -resource:$(resource),$(notdir $(resource)))
+
+INSTALL_ICONS = $(top_srcdir)/build/private-icon-theme-installer "$(mkinstalldirs)" "$(INSTALL_DATA)"
+THEME_ICONS_SOURCE = $(wildcard $(srcdir)/ThemeIcons/*/*/*.png) $(wildcard $(srcdir)/ThemeIcons/scalable/*/*.svg)
+THEME_ICONS_RELATIVE = $(subst $(srcdir)/ThemeIcons/, , $(THEME_ICONS_SOURCE))
+ASSEMBLY_EXTENSION = $(strip $(patsubst library, dll, $(TARGET)))
+ASSEMBLY_FILE = $(top_builddir)/bin/$(ASSEMBLY).$(ASSEMBLY_EXTENSION)
+INSTALL_DIR_RESOLVED = $(firstword $(subst , $(DEFAULT_INSTALL_DIR), $(INSTALL_DIR)))
+ at ENABLE_TESTS_TRUE@ENABLE_TESTS_FLAG = "-define:ENABLE_TESTS"
+ at ENABLE_ATK_TRUE@ENABLE_ATK_FLAG = "-define:ENABLE_ATK"
+FILTERED_LINK = $(shell echo "$(LINK)" | $(UNIQUE_FILTER_PIPE))
+DEP_LINK = $(shell echo "$(LINK)" | $(UNIQUE_FILTER_PIPE) | sed s,-r:,,g | grep '$(top_builddir)/bin/')
+OUTPUT_FILES = \
+ $(ASSEMBLY_FILE) \
+ $(ASSEMBLY_FILE).mdb
+
+moduledir = $(INSTALL_DIR_RESOLVED)
+module_SCRIPTS = $(OUTPUT_FILES)
+EXTRA_DIST = $(SOURCES_BUILD) $(RESOURCES_EXPANDED) $(THEME_ICONS_SOURCE)
+CLEANFILES = $(OUTPUT_FILES) $(ASSEMBLY_FILE).config
+DISTCLEANFILES = *.pidb
+MAINTAINERCLEANFILES = Makefile.in
all: all-am
.SUFFIXES:
-$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(top_srcdir)/Makefile.addins $(top_srcdir)/Makefile.include $(am__configure_deps)
+$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(top_srcdir)/build/build.mk $(top_srcdir)/build/build.environment.mk $(top_srcdir)/build/build.rules.mk $(am__configure_deps)
@for dep in $?; do \
case '$(am__configure_deps)' in \
*$$dep*) \
@@ -390,32 +558,46 @@ $(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps)
$(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps)
cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
$(am__aclocal_m4_deps):
+install-moduleSCRIPTS: $(module_SCRIPTS)
+ @$(NORMAL_INSTALL)
+ test -z "$(moduledir)" || $(MKDIR_P) "$(DESTDIR)$(moduledir)"
+ @list='$(module_SCRIPTS)'; test -n "$(moduledir)" || list=; \
+ for p in $$list; do \
+ if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \
+ if test -f "$$d$$p"; then echo "$$d$$p"; echo "$$p"; else :; fi; \
+ done | \
+ sed -e 'p;s,.*/,,;n' \
+ -e 'h;s|.*|.|' \
+ -e 'p;x;s,.*/,,;$(transform)' | sed 'N;N;N;s,\n, ,g' | \
+ $(AWK) 'BEGIN { files["."] = ""; dirs["."] = 1; } \
+ { d=$$3; if (dirs[d] != 1) { print "d", d; dirs[d] = 1 } \
+ if ($$2 == $$4) { files[d] = files[d] " " $$1; \
+ if (++n[d] == $(am__install_max)) { \
+ print "f", d, files[d]; n[d] = 0; files[d] = "" } } \
+ else { print "f", d "/" $$4, $$1 } } \
+ END { for (d in files) print "f", d, files[d] }' | \
+ while read type dir files; do \
+ if test "$$dir" = .; then dir=; else dir=/$$dir; fi; \
+ test -z "$$files" || { \
+ echo " $(INSTALL_SCRIPT) $$files '$(DESTDIR)$(moduledir)$$dir'"; \
+ $(INSTALL_SCRIPT) $$files "$(DESTDIR)$(moduledir)$$dir" || exit $$?; \
+ } \
+ ; done
+
+uninstall-moduleSCRIPTS:
+ @$(NORMAL_UNINSTALL)
+ @list='$(module_SCRIPTS)'; test -n "$(moduledir)" || exit 0; \
+ files=`for p in $$list; do echo "$$p"; done | \
+ sed -e 's,.*/,,;$(transform)'`; \
+ test -n "$$list" || exit 0; \
+ echo " ( cd '$(DESTDIR)$(moduledir)' && rm -f" $$files ")"; \
+ cd "$(DESTDIR)$(moduledir)" && rm -f $$files
mostlyclean-libtool:
-rm -f *.lo
clean-libtool:
-rm -rf .libs _libs
-install-addinDATA: $(addin_DATA)
- @$(NORMAL_INSTALL)
- test -z "$(addindir)" || $(MKDIR_P) "$(DESTDIR)$(addindir)"
- @list='$(addin_DATA)'; test -n "$(addindir)" || list=; \
- for p in $$list; do \
- if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \
- echo "$$d$$p"; \
- done | $(am__base_list) | \
- while read files; do \
- echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(addindir)'"; \
- $(INSTALL_DATA) $$files "$(DESTDIR)$(addindir)" || exit $$?; \
- done
-
-uninstall-addinDATA:
- @$(NORMAL_UNINSTALL)
- @list='$(addin_DATA)'; test -n "$(addindir)" || list=; \
- files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \
- test -n "$$files" || exit 0; \
- echo " ( cd '$(DESTDIR)$(addindir)' && rm -f" $$files ")"; \
- cd "$(DESTDIR)$(addindir)" && rm -f $$files
tags: TAGS
TAGS:
@@ -455,9 +637,9 @@ distdir: $(DISTFILES)
done
check-am: all-am
check: check-am
-all-am: Makefile $(DATA)
+all-am: Makefile $(SCRIPTS)
installdirs:
- for dir in "$(DESTDIR)$(addindir)"; do \
+ for dir in "$(DESTDIR)$(moduledir)"; do \
test -z "$$dir" || $(MKDIR_P) "$$dir"; \
done
install: install-am
@@ -482,10 +664,12 @@ clean-generic:
distclean-generic:
-test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
-test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES)
+ -test -z "$(DISTCLEANFILES)" || rm -f $(DISTCLEANFILES)
maintainer-clean-generic:
@echo "This command is intended for maintainers to use"
@echo "it deletes files that may require special tools to rebuild."
+ -test -z "$(MAINTAINERCLEANFILES)" || rm -f $(MAINTAINERCLEANFILES)
clean: clean-am
clean-am: clean-generic clean-libtool mostlyclean-am
@@ -506,7 +690,7 @@ info: info-am
info-am:
-install-data-am: install-addinDATA
+install-data-am: install-data-local install-moduleSCRIPTS
install-dvi: install-dvi-am
@@ -550,28 +734,72 @@ ps: ps-am
ps-am:
-uninstall-am: uninstall-addinDATA
+uninstall-am: uninstall-local uninstall-moduleSCRIPTS
.MAKE: install-am install-strip
.PHONY: all all-am check check-am clean clean-generic clean-libtool \
distclean distclean-generic distclean-libtool distdir dvi \
- dvi-am html html-am info info-am install install-addinDATA \
- install-am install-data install-data-am install-dvi \
+ dvi-am html html-am info info-am install install-am \
+ install-data install-data-am install-data-local 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-generic mostlyclean-libtool pdf pdf-am ps ps-am \
- uninstall uninstall-addinDATA uninstall-am
-
-
-mpack: $(ASSEMBLY)
- mautil p $(ASSEMBLY)
-
-$(ASSEMBLY): $(addin_SOURCES) $(dep_resources)
- $(CSC_LIB) -out:$@ $(addin_extraflags) $(build_sources) $(build_references) $(build_packages) $(build_resources)
+ install-moduleSCRIPTS install-pdf install-pdf-am install-ps \
+ install-ps-am install-strip installcheck installcheck-am \
+ installdirs maintainer-clean maintainer-clean-generic \
+ mostlyclean mostlyclean-generic mostlyclean-libtool pdf pdf-am \
+ ps ps-am uninstall uninstall-am uninstall-local \
+ uninstall-moduleSCRIPTS
+
+
+all: $(ASSEMBLY_FILE) theme-icons
+
+run:
+ @pushd $(top_builddir); \
+ make run; \
+ popd;
+
+# uncommented for now.
+# tests are currently excuted from Makefile in $(top_builddir)
+#test:
+# @pushd $(top_builddir)/tests; \
+# make $(ASSEMBLY); \
+# popd;
+
+build-debug:
+ @echo $(DEP_LINK)
+
+$(ASSEMBLY_FILE).mdb: $(ASSEMBLY_FILE)
+
+$(ASSEMBLY_FILE): $(SOURCES_BUILD) $(RESOURCES_EXPANDED) $(DEP_LINK)
+ @mkdir -p $(top_builddir)/bin
+ @if [ ! "x$(ENABLE_RELEASE)" = "xyes" ]; then \
+ $(top_srcdir)/build/dll-map-makefile-verifier $(srcdir)/Makefile.am $(srcdir)/$(notdir $@.config) && \
+ $(MONO) $(top_builddir)/build/dll-map-verifier.exe $(srcdir)/$(notdir $@.config) -iwinmm -ilibbanshee -ilibbnpx11 -ilibc -ilibc.so.6 -iintl -ilibmtp.dll -ilibigemacintegration.dylib -iCFRelease $(SOURCES_BUILD); \
+ fi;
+ $(MCS) \
+ $(GMCS_FLAGS) \
+ $(ASSEMBLY_BUILD_FLAGS) \
+ -nowarn:0278 -nowarn:0078 $$warn \
+ -define:HAVE_GTK_2_10 -define:NET_2_0 \
+ -debug -target:$(TARGET) -out:$@ \
+ $(BUILD_DEFINES) $(ENABLE_TESTS_FLAG) $(ENABLE_ATK_FLAG) \
+ $(FILTERED_LINK) $(RESOURCES_BUILD) $(SOURCES_BUILD)
+ @if [ -e $(srcdir)/$(notdir $@.config) ]; then \
+ cp $(srcdir)/$(notdir $@.config) $(top_builddir)/bin; \
+ fi;
+ @if [ ! -z "$(EXTRA_BUNDLE)" ]; then \
+ cp $(EXTRA_BUNDLE) $(top_builddir)/bin; \
+ fi;
+
+theme-icons: $(THEME_ICONS_SOURCE)
+ @$(INSTALL_ICONS) -il "$(BUILD_DATA_DIR)" "$(srcdir)" $(THEME_ICONS_RELATIVE)
+
+install-data-local: $(THEME_ICONS_SOURCE)
+ @$(INSTALL_ICONS) -i "$(DESTDIR)$(pkgdatadir)" "$(srcdir)" $(THEME_ICONS_RELATIVE)
+
+uninstall-local: $(THEME_ICONS_SOURCE)
+ @$(INSTALL_ICONS) -u "$(DESTDIR)$(pkgdatadir)" "$(srcdir)" $(THEME_ICONS_RELATIVE)
# 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/extensions/Tools/ScreensaverConfig/ScreensaverConfig.cs b/extensions/Tools/ScreensaverConfig/ScreensaverConfig.cs
index 8824ddf..3a3644d 100644
--- a/extensions/Tools/ScreensaverConfig/ScreensaverConfig.cs
+++ b/extensions/Tools/ScreensaverConfig/ScreensaverConfig.cs
@@ -61,7 +61,7 @@ namespace ScreensaverConfig
req.Width += 100;
args.Requisition = req;
};
- TagMenu menu = new TagMenu (null, MainWindow.Toplevel.Database.Tags);
+ TagMenu menu = new TagMenu (null, App.Instance.Database.Tags);
menu.Populate (false);
menu.TagSelected += HandleTagSelected;
tag_button.Menu = menu;
@@ -88,7 +88,7 @@ namespace ScreensaverConfig
break;
case SCREENSAVER_TAG:
var screensaver_tag = Preferences.Get<int> (key);
- Tag t = MainWindow.Toplevel.Database.Tags.GetTagById (screensaver_tag);
+ Tag t = App.Instance.Database.Tags.GetTagById (screensaver_tag);
if (screensaver_tag == 0 || t == null) {
all_radio.Active = true;
tag_button.Sensitive = false;
diff --git a/extensions/Transitions/CoverTransition/Makefile.am b/extensions/Transitions/CoverTransition/Makefile.am
index db79db3..d55378a 100644
--- a/extensions/Transitions/CoverTransition/Makefile.am
+++ b/extensions/Transitions/CoverTransition/Makefile.am
@@ -1,19 +1,10 @@
-addin = CoverTransition
+ASSEMBLY = FSpot.Exporters.CoverTransition
+TARGET = library
+LINK = $(REF_FSPOT_EXTENSION_COVERTRANSITION)
+INSTALL_DIR = $(EXTENSIONS_INSTALL_DIR)
-addin_manifest = $(addin).addin.xml
+SOURCES = CoverTransition.cs
-addin_sources = \
- $(addin).cs
+RESOURCES = CoverTransition.addin.xml
-addin_resources = \
- $(addin_manifest)
-
-addin_references = \
- Mono.Cairo
-
-addin_packages = \
- gtk-sharp-2.0
-
-addin_extradist =
-
-include $(top_srcdir)/Makefile.addins
+include $(top_srcdir)/build/build.mk
diff --git a/extensions/Transitions/CoverTransition/Makefile.in b/extensions/Transitions/CoverTransition/Makefile.in
index 72abf3e..78ecba2 100644
--- a/extensions/Transitions/CoverTransition/Makefile.in
+++ b/extensions/Transitions/CoverTransition/Makefile.in
@@ -35,13 +35,22 @@ POST_UNINSTALL = :
build_triplet = @build@
host_triplet = @host@
DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in \
- $(top_srcdir)/Makefile.addins $(top_srcdir)/Makefile.include
+ $(top_srcdir)/build/build.environment.mk \
+ $(top_srcdir)/build/build.mk \
+ $(top_srcdir)/build/build.rules.mk
+ at ENABLE_TESTS_TRUE@am__append_1 = " $(NUNIT_LIBS)"
subdir = extensions/Transitions/CoverTransition
ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
am__aclocal_m4_deps = $(top_srcdir)/build/m4/shave/shave.m4 \
$(top_srcdir)/build/m4/shamrock/expansions.m4 \
+ $(top_srcdir)/build/m4/shamrock/gnome-doc.m4 \
$(top_srcdir)/build/m4/shamrock/mono.m4 \
+ $(top_srcdir)/build/m4/shamrock/nunit.m4 \
$(top_srcdir)/build/m4/shamrock/programs.m4 \
+ $(top_srcdir)/build/m4/f-spot/flickrnet.m4 \
+ $(top_srcdir)/build/m4/f-spot/gnome-keyring-sharp.m4 \
+ $(top_srcdir)/build/m4/f-spot/gtk-sharp.m4 \
+ $(top_srcdir)/build/m4/f-spot/mono-addins.m4 \
$(top_srcdir)/acinclude.m4 $(top_srcdir)/configure.ac
am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
$(ACLOCAL_M4)
@@ -49,8 +58,6 @@ mkinstalldirs = $(install_sh) -d
CONFIG_HEADER = $(top_builddir)/config.h
CONFIG_CLEAN_FILES =
CONFIG_CLEAN_VPATH_FILES =
-SOURCES =
-DIST_SOURCES =
am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`;
am__vpath_adj = case $$p in \
$(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \
@@ -72,8 +79,9 @@ am__nobase_list = $(am__nobase_strip_setup); \
am__base_list = \
sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \
sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g'
-am__installdirs = "$(DESTDIR)$(addindir)"
-DATA = $(addin_DATA)
+am__installdirs = "$(DESTDIR)$(moduledir)"
+SCRIPTS = $(module_SCRIPTS)
+DIST_SOURCES =
DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
ACLOCAL = @ACLOCAL@
ACLOCAL_AMFLAGS = @ACLOCAL_AMFLAGS@
@@ -119,6 +127,8 @@ EXIF_SOVERSION = @EXIF_SOVERSION@
F77 = @F77@
FC = @FC@
FGREP = @FGREP@
+FLICKRNET_CFLAGS = @FLICKRNET_CFLAGS@
+FLICKRNET_LIBS = @FLICKRNET_LIBS@
F_CFLAGS = @F_CFLAGS@
F_LIBS = @F_LIBS@
GAPI2CODEGEN = @GAPI2CODEGEN@
@@ -132,6 +142,8 @@ GCONF_SHARP_LIBS = @GCONF_SHARP_LIBS@
GETTEXT_PACKAGE = @GETTEXT_PACKAGE@
GIO_CFLAGS = @GIO_CFLAGS@
GIO_LIBS = @GIO_LIBS@
+GLIBSHARP_2_12_7_CFLAGS = @GLIBSHARP_2_12_7_CFLAGS@
+GLIBSHARP_2_12_7_LIBS = @GLIBSHARP_2_12_7_LIBS@
GLIBSHARP_CFLAGS = @GLIBSHARP_CFLAGS@
GLIBSHARP_LIBS = @GLIBSHARP_LIBS@
GLIB_CFLAGS = @GLIB_CFLAGS@
@@ -147,6 +159,10 @@ GNOME_SHARP_CFLAGS = @GNOME_SHARP_CFLAGS@
GNOME_SHARP_LIBS = @GNOME_SHARP_LIBS@
GOBJECT_QUERY = @GOBJECT_QUERY@
GREP = @GREP@
+GTKSHARP_A11Y_CFLAGS = @GTKSHARP_A11Y_CFLAGS@
+GTKSHARP_A11Y_LIBS = @GTKSHARP_A11Y_LIBS@
+GTKSHARP_CFLAGS = @GTKSHARP_CFLAGS@
+GTKSHARP_LIBS = @GTKSHARP_LIBS@
HELP_DIR = @HELP_DIR@
ICONS_DIRECTORY = @ICONS_DIRECTORY@
INSTALL = @INSTALL@
@@ -160,14 +176,14 @@ INTLTOOL_EXTRACT = @INTLTOOL_EXTRACT@
INTLTOOL_MERGE = @INTLTOOL_MERGE@
INTLTOOL_PERL = @INTLTOOL_PERL@
INTLTOOL_UPDATE = @INTLTOOL_UPDATE@
+KEYRINGSHARP_CFLAGS = @KEYRINGSHARP_CFLAGS@
+KEYRINGSHARP_LIBS = @KEYRINGSHARP_LIBS@
LCMS_CFLAGS = @LCMS_CFLAGS@
LCMS_LIBS = @LCMS_LIBS@
LD = @LD@
LDFLAGS = @LDFLAGS@
LIBEXIF_VERSION_CHECK_CFLAGS = @LIBEXIF_VERSION_CHECK_CFLAGS@
LIBEXIF_VERSION_CHECK_LIBS = @LIBEXIF_VERSION_CHECK_LIBS@
-LIBGPHOTO2_CFLAGS = @LIBGPHOTO2_CFLAGS@
-LIBGPHOTO2_LIBS = @LIBGPHOTO2_LIBS@
LIBJPEG = @LIBJPEG@
LIBOBJS = @LIBOBJS@
LIBS = @LIBS@
@@ -182,6 +198,12 @@ MCS = @MCS@
MKDIR_P = @MKDIR_P@
MKINSTALLDIRS = @MKINSTALLDIRS@
MONO = @MONO@
+MONO_ADDINS_CFLAGS = @MONO_ADDINS_CFLAGS@
+MONO_ADDINS_GUI_CFLAGS = @MONO_ADDINS_GUI_CFLAGS@
+MONO_ADDINS_GUI_LIBS = @MONO_ADDINS_GUI_LIBS@
+MONO_ADDINS_LIBS = @MONO_ADDINS_LIBS@
+MONO_ADDINS_SETUP_CFLAGS = @MONO_ADDINS_SETUP_CFLAGS@
+MONO_ADDINS_SETUP_LIBS = @MONO_ADDINS_SETUP_LIBS@
MONO_MODULE_CFLAGS = @MONO_MODULE_CFLAGS@
MONO_MODULE_LIBS = @MONO_MODULE_LIBS@
MSGFMT = @MSGFMT@
@@ -192,7 +214,6 @@ NDESK_DBUS_LIBS = @NDESK_DBUS_LIBS@
NM = @NM@
NMEDIT = @NMEDIT@
NUNIT_CFLAGS = @NUNIT_CFLAGS@
-NUNIT_DEFINES = @NUNIT_DEFINES@
NUNIT_LIBS = @NUNIT_LIBS@
OBJC = @OBJC@
OBJDUMP = @OBJDUMP@
@@ -284,82 +305,227 @@ target_alias = @target_alias@
top_build_prefix = @top_build_prefix@
top_builddir = @top_builddir@
top_srcdir = @top_srcdir@
-addin = CoverTransition
-addin_manifest = $(addin).addin.xml
-addin_sources = \
- $(addin).cs
-
-addin_resources = \
- $(addin_manifest)
-
-addin_references = \
- Mono.Cairo
-
-addin_packages = \
- gtk-sharp-2.0
-
-addin_extradist =
-ASSEMBLY = $(addin).dll
+ASSEMBLY = FSpot.Exporters.CoverTransition
+TARGET = library
+LINK = $(REF_FSPOT_EXTENSION_COVERTRANSITION) $(am__append_1)
+INSTALL_DIR = $(EXTENSIONS_INSTALL_DIR)
+SOURCES = CoverTransition.cs
+RESOURCES = CoverTransition.addin.xml
+
+# Initializers
+MONO_BASE_PATH =
+MONO_ADDINS_PATH =
+
+# Install Paths
+DEFAULT_INSTALL_DIR = $(pkglibdir)
+BACKENDS_INSTALL_DIR = $(DEFAULT_INSTALL_DIR)/Backends
+EXTENSIONS_INSTALL_DIR = $(DEFAULT_INSTALL_DIR)/Extensions
DIR_DOCS = $(top_builddir)/docs
DIR_EXTENSIONS = $(top_builddir)/extensions
-DIR_GPHOTO2 = $(top_builddir)/lib/libgphoto2-sharp
DIR_ICONS = $(top_builddir)/icons
DIR_JPEGTRAN = $(top_builddir)/lib/libjpegtran
-DIR_KEYRING = $(top_builddir)/lib/gnome-keyring-sharp
DIR_LIBFSPOT = $(top_builddir)/lib/libfspot
DIR_SEMWEB = $(top_builddir)/lib/semweb
DIR_SRC = $(top_builddir)/src
DIR_GIOSHARP = $(top_builddir)/lib/gio-sharp/gio
DIR_GTKSHARPBEANS = $(top_builddir)/lib/gtk-sharp-beans
DIR_UNIQUESHARP = $(top_builddir)/lib/unique-sharp/unique
-LINK_KEYRING = -r:$(DIR_KEYRING)/gnome-keyring-sharp.dll
-LINK_GPHOTO2 = -r:$(DIR_GPHOTO2)/libgphoto2-sharp.dll
-LINK_SEMWEB = -r:$(DIR_SEMWEB)/SemWeb.dll
-LINK_GIOSHARP = -r:$(DIR_GIOSHARP)/gio-sharp.dll
-LINK_GTKSHARPBEANS = -r:$(DIR_GTKSHARPBEANS)/gtk-sharp-beans.dll
-LINK_UNIQUESHARP = -r:$(DIR_UNIQUESHARP)/unique-sharp.dll
-CSC_FLAGS = -debug
-CSC = $(MCS) $(CSC_FLAGS) -target:exe
-CSC_LIB = $(MCS) $(CSC_FLAGS) -target:library
-MONO_DEBUGFLAGS = --debug
-RUNTIME = mono $(MONO_DEBUGFLAGS)
-dep_resources = $(addprefix $(srcdir)/, $(addin_resources))
-build_resources = $(foreach res, $(dep_resources), $(addprefix -resource:, $(res)),$(notdir $(res)))
-build_sources = $(addprefix $(srcdir)/, $(addin_sources))
-build_packages = \
- $(addprefix -pkg:, $(addin_packages)) \
- -pkg:mono-addins
-
-build_references = \
- $(addprefix -r:, $(addin_references)) \
- -r:$(top_builddir)/src/f-spot.exe \
- -r:$(top_builddir)/src/Cms.dll \
- -r:$(top_builddir)/src/FSpot.Core.dll \
- -r:$(top_builddir)/src/FSpot.Platform.dll \
- -r:$(top_builddir)/src/FSpot.Query.dll \
- -r:$(top_builddir)/src/FSpot.Utils.dll \
- -r:$(top_builddir)/src/FSpot.Widgets.dll \
- $(LINK_SEMWEB) \
- $(LINK_GPHOTO2) \
- $(LINK_GIOSHARP) \
- $(LINK_UNIQUESHARP) \
- $(LINK_GTKSHARPBEANS)
-
-addin_SOURCES = \
- $(build_sources)
-
-addindir = $(pkglibdir)/extensions
-addin_DATA = $(ASSEMBLY)
-CLEANFILES = $(ASSEMBLY) $(ASSEMBLY).mdb *.mpack
-EXTRA_DIST = \
- $(build_sources) \
- $(dep_resources) \
- $(addin_extradist)
-
+DIR_BIN = $(top_builddir)/bin
+
+# External libraries to link against, generated from configure
+LINK_SYSTEM = -r:System
+LINK_SYSTEMDATA = -r:System.Data
+LINK_SYSTEM_WEB = -r:System.Web
+LINK_MONO_POSIX = -r:Mono.Posix
+LINK_MONO_CAIRO = -r:Mono.Cairo
+LINK_MONO_SIMD = -r:Mono.Simd
+LINK_MONODATA = -r:Mono.Data
+LINK_MONO_DATA_SQLITECLIENT = -r:Mono.Data.SqliteClient
+LINK_ICSHARP_ZIP_LIB = -r:ICSharpCode.SharpZipLib
+LINK_KEYRING = $(KEYRINGSHARP_LIBS)
+LINK_GLIB = $(GLIBSHARP_LIBS)
+LINK_GTK = $(GTKSHARP_LIBS)
+LINK_GNOME = $(GNOME_SHARP_LIBS)
+LINK_GCONF = $(GCONF_SHARP_LIBS)
+LINK_GLADE = -pkg:glade-sharp-2.0
+LINK_FLICKRNET = -pkg:flickrnet
+LINK_DBUS = $(NDESK_DBUS_LIBS) $(NDESK_DBUS_GLIB_LIBS)
+LINK_DBUS_NO_GLIB = $(NDESK_DBUS_LIBS)
+LINK_MONO_ADDINS_DEPS = $(MONO_ADDINS_LIBS)
+LINK_MONO_ADDINS_SETUP_DEPS = $(MONO_ADDINS_SETUP_LIBS)
+LINK_MONO_ADDINS_GUI_DEPS = $(MONO_ADDINS_GUI_LIBS)
+
+# GIO
+REF_GIO =
+LINK_GIO = -r:$(DIR_GIOSHARP)/gio-sharp.dll
+LINK_GIO_DEPS = $(REF_GIO) $(LINK_GIO)
+
+# Gtk Beans
+REF_GTK_BEANS = $(LINK_GIO_DEPS)
+LINK_GTK_BEANS = -r:$(DIR_GTKSHARPBEANS)/gtk-sharp-beans.dll
+LINK_GTK_BEANS_DEPS = $(REF_GTK_BEANS) $(LINK_GTK_BEANS)
+
+# Uniqe
+REF_UNIQUE =
+LINK_UNIQUE = -r:$(DIR_UNIQUESHARP)/unique-sharp.dll
+LINK_UNIQUE_DEPS = $(REF_UNIQUE) $(LINK_UNIQUE)
+
+# Hyena
+REF_HYENA = $(LINK_SYSTEM) $(LINK_MONO_POSIX)
+LINK_HYENA = -r:$(DIR_BIN)/Hyena.dll
+LINK_HYENA_DEPS = $(REF_HYENA) $(LINK_HYENA)
+
+# Semweb
+REF_SEMWEB = $(LINK_SYSTEMDATA) $(LINK_HYENA_DEPS)
+LINK_SEMWEB = -r:$(DIR_BIN)/SemWeb.dll
+LINK_SEMWEB_DEPS = $(REF_SEMWEB) $(LINK_SEMWEB)
+
+# Hyena.Data.Sqlite
+REF_HYENA_DATA_SQLITE = $(LINK_SQLITE)
+LINK_HYENA_DATA_SQLITE = -r:$(DIR_BIN)/Hyena.Data.Sqlite.dll
+LINK_HYENA_DATA_SQLITE_DEPS = $(REF_HYENA_DATA_SQLITE) $(LINK_HYENA_DATA_SQLITE)
+
+# Hyena.Gui
+REF_HYENA_GUI = $(LINK_HYENA_DEPS)
+LINK_HYENA_GUI = -r:$(DIR_BIN)/Hyena.Gui.dll
+LINK_HENA_GUI_DEPS = $(REF_HYENA_GUI) $(LINK_HYENA_GUI)
+
+# FSpot.Cms
+REF_FSPOT_CMS = $(LINK_GTK)
+LINK_FSPOT_CMS = -r:$(DIR_BIN)/FSpot.Cms.dll
+LINK_FSPOT_CMS_DEPS = $(REF_FSPOT_CMS) $(LINK_FSPOT_CMS)
+
+# FSpot.Utils
+REF_FSPOT_UTILS = $(LINK_HYENA_DEPS) $(LINK_GTK) $(LINK_GIO) $(LINK_MONO_CAIRO)
+LINK_FSPOT_UTILS = -r:$(DIR_BIN)/FSpot.Utils.dll
+LINK_FSPOT_UTILS_DEPS = $(REF_FSPOT_UTILS) $(LINK_FSPOT_UTILS)
+
+# FSpot.Core
+REF_FSPOT_CORE = $(LINK_FSPOT_UTILS_DEPS) $(LINK_FSPOT_CMS_DEPS)
+LINK_FSPOT_CORE = -r:$(DIR_BIN)/FSpot.Core.dll
+LINK_FSPOT_CORE_DEPS = $(REF_FSPOT_CORE) $(LINK_FSPOT_CORE)
+
+# FSpot.Query
+REF_FSPOT_QUERY = $(LINK_FSPOT_CORE_DEPS)
+LINK_FSPOT_QUERY = -r:$(DIR_BIN)/FSpot.Query.dll
+LINK_FSPOT_QUERY_DEPS = $(REF_FSPOT_QUERY) $(LINK_FSPOT_QUERY)
+
+# FSpot.JobScheduler
+REF_FSPOT_JOB_SCHEDULER = $(LINK_HYENA_DEPS)
+LINK_FSPOT_JOB_SCHEDULER = -r:$(DIR_BIN)/FSpot.JobScheduler.dll
+LINK_FSPOT_JOB_SCHEDULER_DEPS = $(REF_FSPOT_JOB_SCHEDULER) $(LINK_FSPOT_JOB_SCHEDULER)
+
+# FSpot.Bling
+REF_FSPOT_BLING = $(LINK_GTK_BEANS_DEPS) $(LINK_GLIB)
+LINK_FSPOT_BLING = -r:$(DIR_BIN)/FSpot.Bling.dll
+LINK_FSPOT_BLING_DEPS = $(REF_FSPOT_BLING) $(LINK_FSPOT_BLING)
+
+# FSpot.Platform
+REF_FSPOT_PLATFORM = $(LINK_GCONF) $(LINK_GTK) $(LINK_FSPOT_CORE_DEPS) $(LINK_DBUS)
+LINK_FSPOT_PLATFORM = -r:$(DIR_BIN)/FSpot.Platform.dll
+LINK_FSPOT_PLATFORM_DEPS = $(REF_FSPOT_PLATFORM) $(LINK_FSPOT_PLATFORM)
+
+# FSpot.Widgets
+REF_FSPOT_WIDGETS = $(LINK_FSPOT_CORE_DEPS) $(LINK_FSPOT_BLING_DEPS)
+LINK_FSPOT_WIDGETS = -r:$(DIR_BIN)/FSpot.Widgets.dll
+LINK_FSPOT_WIDGETS_DEPS = $(REF_FSPOT_WIDGETS) $(LINK_FSPOT_WIDGETS)
+
+# FSpot (executable)
+REF_FSPOT = $(LINK_FSPOT_WIDGETS_DEPS) $(LINK_FSPOT_PLATFORM_DEPS) $(LINK_FSPOT_QUERY_DEPS) \
+ $(LINK_GLIB) $(LINK_MONO_ADDINS_DEPS) $(LINK_UNIQUE_DEPS) $(LINK_MONO_ADDINS_SETUP_DEPS) \
+ $(LINK_SEMWEB_DEPS) $(LINK_GLADE) $(LINK_MONODATA) $(LINK_MONO_DATA_SQLITECLIENT) \
+ $(LINK_MONO_ADDINS_GUI_DEPS) $(LINK_FSPOT_JOB_SCHEDULER_DEPS) $(LINK_ICSHARP_ZIP_LIB) \
+ $(LINK_GNOME)
+
+# FIXME: do not link executables
+LINK_FSPOT = -r:$(DIR_BIN)/f-spot.exe
+LINK_FSPOT_DEPS = $(REF_FSPOT) $(LINK_FSPOT)
+
+# Extensions
+REF_FSPOT_EXTENSION_BLACKOUTEDITOR = $(LINK_FSPOT_DEPS)
+REF_FSPOT_EXTENSION_BWEDITOR = $(LINK_FSPOT_DEPS) $(LINK_MONO_SIMD)
+REF_FSPOT_EXTENSION_FLIPEDITOR = $(LINK_FSPOT_DEPS)
+REF_FSPOT_EXTENSION_PIXELATEEDITOR = $(LINK_FSPOT_DEPS)
+REF_FSPOT_EXTENSION_RESIZEEDITOR = $(LINK_FSPOT_DEPS)
+REF_FSPOT_EXTENSION_CDEXPORT = $(LINK_FSPOT_DEPS)
+REF_FSPOT_EXTENSION_FACEBOOKEXPORT = $(LINK_FSPOT_DEPS) $(LINK_KEYRING)
+REF_FSPOT_EXTENSION_FLICKREXPORT = $(LINK_FSPOT_DEPS) $(LINK_FLICKRNET)
+REF_FSPOT_EXTENSION_FOLDEREXPORT = $(LINK_FSPOT_DEPS) $(LINK_SYSTEM_WEB)
+REF_FSPOT_EXTENSION_GALLERYEXPORT = $(LINK_FSPOT_DEPS)
+REF_MONO_GOOGLE = $(LINK_HYENA_DEPS)
+LINK_MONO_GOOGLE = -r:$(DIR_BIN)/Mono.Google.dll
+LINK_MONO_GOOGLE_DEPS = $(REF_MONO_GOOGLE) $(LINK_MONO_GOOGLE)
+REF_FSPOT_EXTENSION_PICASAWEBEXPORT = $(LINK_FSPOT_DEPS) $(LINK_MONO_GOOGLE) $(LINK_KEYRING)
+REF_SMUGMUGNET = $(LINK_FSPOT_DEPS)
+LINK_SMUGMUGNET = -r:$(DIR_BIN)/SmugMugNet.dll
+LINK_SMUGMUGNET_DEPS = $(REF_SMUGMUGNET) $(LINK_SMUGMUGNET)
+REF_FSPOT_EXTENSION_SMUGMUGEXPORT = $(LINK_SMUGMUGNET_DEPS) $(LINK_KEYRING)
+REF_MONO_TABBLO = $(LINK_HYENA_DEPS)
+LINK_MONO_TABBLO = -r:$(DIR_BIN)/Mono.Tabblo.dll
+LINK_MONO_TABBLO_DEPS = $(REF_MONO_TABBLO) $(LINK_MONO_TABBLO)
+REF_FSPOT_EXTENSION_TABBLOEXPORT = $(LINK_FSPOT_DEPS) $(LINK_KEYRING) $(LINK_MONO_TABBLO_DEPS)
+REF_FSPOT_EXTENSION_ZIPEXPORT = $(LINK_FSPOT_DEPS)
+REF_FSPOT_EXTENSION_CHANGEPHOTOPATH = $(LINK_FSPOT_DEPS)
+REF_FSPOT_EXTENSION_DEVELOPINUFRAW = $(LINK_FSPOT_DEPS)
+REF_FSPOT_EXTENSION_HASHJOB = $(LINK_FSPOT_DEPS)
+REF_FSPOT_EXTENSION_LIVEWEBGALLERY = $(LINK_FSPOT_DEPS)
+REF_FSPOT_EXTENSION_MERGEDB = $(LINK_FSPOT_DEPS)
+REF_FSPOT_EXTENSION_RAWPLUSJPEG = $(LINK_FSPOT_DEPS)
+REF_FSPOT_EXTENSION_RETROACTIVEROLL = $(LINK_FSPOT_DEPS)
+REF_FSPOT_EXTENSION_SCREENSAVERCONFIG = $(LINK_FSPOT_DEPS)
+REF_FSPOT_EXTENSION_COVERTRANSITION = $(LINK_FSPOT_DEPS)
+
+# Cute hack to replace a space with something
+colon := :
+empty :=
+space := $(empty) $(empty)
+
+# Build path to allow running uninstalled
+RUN_PATH = $(subst $(space),$(colon), $(MONO_BASE_PATH))
+UNIQUE_FILTER_PIPE = tr [:space:] \\n | sort | uniq
+BUILD_DATA_DIR = $(top_builddir)/bin/share/$(PACKAGE)
+
+# Since all other attempts failed, we currently go this way:
+# This code adds the file specified in ASSEMBLY_INFO_SOURCE to SOURCES_BUILD.
+# If no such file is specified, the default AssemblyInfo.cs is used.
+ASSEMBLY_INFO_SOURCE_REAL = \
+ $(shell if [ "$(ASSEMBLY_INFO_SOURCE)" ]; \
+ then \
+ echo "$(addprefix $(srcdir)/, $(ASSEMBLY_INFO_SOURCE))"; \
+ else \
+ echo "$(top_srcdir)/src/AssemblyInfo.cs"; \
+ fi)
+
+SOURCES_BUILD = $(addprefix $(srcdir)/, $(SOURCES)) \
+ $(ASSEMBLY_INFO_SOURCE_REAL)
+RESOURCES_EXPANDED = $(addprefix $(srcdir)/, $(RESOURCES))
+RESOURCES_BUILD = $(foreach resource, $(RESOURCES_EXPANDED), \
+ -resource:$(resource),$(notdir $(resource)))
+
+INSTALL_ICONS = $(top_srcdir)/build/private-icon-theme-installer "$(mkinstalldirs)" "$(INSTALL_DATA)"
+THEME_ICONS_SOURCE = $(wildcard $(srcdir)/ThemeIcons/*/*/*.png) $(wildcard $(srcdir)/ThemeIcons/scalable/*/*.svg)
+THEME_ICONS_RELATIVE = $(subst $(srcdir)/ThemeIcons/, , $(THEME_ICONS_SOURCE))
+ASSEMBLY_EXTENSION = $(strip $(patsubst library, dll, $(TARGET)))
+ASSEMBLY_FILE = $(top_builddir)/bin/$(ASSEMBLY).$(ASSEMBLY_EXTENSION)
+INSTALL_DIR_RESOLVED = $(firstword $(subst , $(DEFAULT_INSTALL_DIR), $(INSTALL_DIR)))
+ at ENABLE_TESTS_TRUE@ENABLE_TESTS_FLAG = "-define:ENABLE_TESTS"
+ at ENABLE_ATK_TRUE@ENABLE_ATK_FLAG = "-define:ENABLE_ATK"
+FILTERED_LINK = $(shell echo "$(LINK)" | $(UNIQUE_FILTER_PIPE))
+DEP_LINK = $(shell echo "$(LINK)" | $(UNIQUE_FILTER_PIPE) | sed s,-r:,,g | grep '$(top_builddir)/bin/')
+OUTPUT_FILES = \
+ $(ASSEMBLY_FILE) \
+ $(ASSEMBLY_FILE).mdb
+
+moduledir = $(INSTALL_DIR_RESOLVED)
+module_SCRIPTS = $(OUTPUT_FILES)
+EXTRA_DIST = $(SOURCES_BUILD) $(RESOURCES_EXPANDED) $(THEME_ICONS_SOURCE)
+CLEANFILES = $(OUTPUT_FILES) $(ASSEMBLY_FILE).config
+DISTCLEANFILES = *.pidb
+MAINTAINERCLEANFILES = Makefile.in
all: all-am
.SUFFIXES:
-$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(top_srcdir)/Makefile.addins $(top_srcdir)/Makefile.include $(am__configure_deps)
+$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(top_srcdir)/build/build.mk $(top_srcdir)/build/build.environment.mk $(top_srcdir)/build/build.rules.mk $(am__configure_deps)
@for dep in $?; do \
case '$(am__configure_deps)' in \
*$$dep*) \
@@ -389,32 +555,46 @@ $(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps)
$(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps)
cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
$(am__aclocal_m4_deps):
+install-moduleSCRIPTS: $(module_SCRIPTS)
+ @$(NORMAL_INSTALL)
+ test -z "$(moduledir)" || $(MKDIR_P) "$(DESTDIR)$(moduledir)"
+ @list='$(module_SCRIPTS)'; test -n "$(moduledir)" || list=; \
+ for p in $$list; do \
+ if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \
+ if test -f "$$d$$p"; then echo "$$d$$p"; echo "$$p"; else :; fi; \
+ done | \
+ sed -e 'p;s,.*/,,;n' \
+ -e 'h;s|.*|.|' \
+ -e 'p;x;s,.*/,,;$(transform)' | sed 'N;N;N;s,\n, ,g' | \
+ $(AWK) 'BEGIN { files["."] = ""; dirs["."] = 1; } \
+ { d=$$3; if (dirs[d] != 1) { print "d", d; dirs[d] = 1 } \
+ if ($$2 == $$4) { files[d] = files[d] " " $$1; \
+ if (++n[d] == $(am__install_max)) { \
+ print "f", d, files[d]; n[d] = 0; files[d] = "" } } \
+ else { print "f", d "/" $$4, $$1 } } \
+ END { for (d in files) print "f", d, files[d] }' | \
+ while read type dir files; do \
+ if test "$$dir" = .; then dir=; else dir=/$$dir; fi; \
+ test -z "$$files" || { \
+ echo " $(INSTALL_SCRIPT) $$files '$(DESTDIR)$(moduledir)$$dir'"; \
+ $(INSTALL_SCRIPT) $$files "$(DESTDIR)$(moduledir)$$dir" || exit $$?; \
+ } \
+ ; done
+
+uninstall-moduleSCRIPTS:
+ @$(NORMAL_UNINSTALL)
+ @list='$(module_SCRIPTS)'; test -n "$(moduledir)" || exit 0; \
+ files=`for p in $$list; do echo "$$p"; done | \
+ sed -e 's,.*/,,;$(transform)'`; \
+ test -n "$$list" || exit 0; \
+ echo " ( cd '$(DESTDIR)$(moduledir)' && rm -f" $$files ")"; \
+ cd "$(DESTDIR)$(moduledir)" && rm -f $$files
mostlyclean-libtool:
-rm -f *.lo
clean-libtool:
-rm -rf .libs _libs
-install-addinDATA: $(addin_DATA)
- @$(NORMAL_INSTALL)
- test -z "$(addindir)" || $(MKDIR_P) "$(DESTDIR)$(addindir)"
- @list='$(addin_DATA)'; test -n "$(addindir)" || list=; \
- for p in $$list; do \
- if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \
- echo "$$d$$p"; \
- done | $(am__base_list) | \
- while read files; do \
- echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(addindir)'"; \
- $(INSTALL_DATA) $$files "$(DESTDIR)$(addindir)" || exit $$?; \
- done
-
-uninstall-addinDATA:
- @$(NORMAL_UNINSTALL)
- @list='$(addin_DATA)'; test -n "$(addindir)" || list=; \
- files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \
- test -n "$$files" || exit 0; \
- echo " ( cd '$(DESTDIR)$(addindir)' && rm -f" $$files ")"; \
- cd "$(DESTDIR)$(addindir)" && rm -f $$files
tags: TAGS
TAGS:
@@ -454,9 +634,9 @@ distdir: $(DISTFILES)
done
check-am: all-am
check: check-am
-all-am: Makefile $(DATA)
+all-am: Makefile $(SCRIPTS)
installdirs:
- for dir in "$(DESTDIR)$(addindir)"; do \
+ for dir in "$(DESTDIR)$(moduledir)"; do \
test -z "$$dir" || $(MKDIR_P) "$$dir"; \
done
install: install-am
@@ -481,10 +661,12 @@ clean-generic:
distclean-generic:
-test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
-test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES)
+ -test -z "$(DISTCLEANFILES)" || rm -f $(DISTCLEANFILES)
maintainer-clean-generic:
@echo "This command is intended for maintainers to use"
@echo "it deletes files that may require special tools to rebuild."
+ -test -z "$(MAINTAINERCLEANFILES)" || rm -f $(MAINTAINERCLEANFILES)
clean: clean-am
clean-am: clean-generic clean-libtool mostlyclean-am
@@ -505,7 +687,7 @@ info: info-am
info-am:
-install-data-am: install-addinDATA
+install-data-am: install-data-local install-moduleSCRIPTS
install-dvi: install-dvi-am
@@ -549,28 +731,72 @@ ps: ps-am
ps-am:
-uninstall-am: uninstall-addinDATA
+uninstall-am: uninstall-local uninstall-moduleSCRIPTS
.MAKE: install-am install-strip
.PHONY: all all-am check check-am clean clean-generic clean-libtool \
distclean distclean-generic distclean-libtool distdir dvi \
- dvi-am html html-am info info-am install install-addinDATA \
- install-am install-data install-data-am install-dvi \
+ dvi-am html html-am info info-am install install-am \
+ install-data install-data-am install-data-local 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-generic mostlyclean-libtool pdf pdf-am ps ps-am \
- uninstall uninstall-addinDATA uninstall-am
-
-
-mpack: $(ASSEMBLY)
- mautil p $(ASSEMBLY)
-
-$(ASSEMBLY): $(addin_SOURCES) $(dep_resources)
- $(CSC_LIB) -out:$@ $(addin_extraflags) $(build_sources) $(build_references) $(build_packages) $(build_resources)
+ install-moduleSCRIPTS install-pdf install-pdf-am install-ps \
+ install-ps-am install-strip installcheck installcheck-am \
+ installdirs maintainer-clean maintainer-clean-generic \
+ mostlyclean mostlyclean-generic mostlyclean-libtool pdf pdf-am \
+ ps ps-am uninstall uninstall-am uninstall-local \
+ uninstall-moduleSCRIPTS
+
+
+all: $(ASSEMBLY_FILE) theme-icons
+
+run:
+ @pushd $(top_builddir); \
+ make run; \
+ popd;
+
+# uncommented for now.
+# tests are currently excuted from Makefile in $(top_builddir)
+#test:
+# @pushd $(top_builddir)/tests; \
+# make $(ASSEMBLY); \
+# popd;
+
+build-debug:
+ @echo $(DEP_LINK)
+
+$(ASSEMBLY_FILE).mdb: $(ASSEMBLY_FILE)
+
+$(ASSEMBLY_FILE): $(SOURCES_BUILD) $(RESOURCES_EXPANDED) $(DEP_LINK)
+ @mkdir -p $(top_builddir)/bin
+ @if [ ! "x$(ENABLE_RELEASE)" = "xyes" ]; then \
+ $(top_srcdir)/build/dll-map-makefile-verifier $(srcdir)/Makefile.am $(srcdir)/$(notdir $@.config) && \
+ $(MONO) $(top_builddir)/build/dll-map-verifier.exe $(srcdir)/$(notdir $@.config) -iwinmm -ilibbanshee -ilibbnpx11 -ilibc -ilibc.so.6 -iintl -ilibmtp.dll -ilibigemacintegration.dylib -iCFRelease $(SOURCES_BUILD); \
+ fi;
+ $(MCS) \
+ $(GMCS_FLAGS) \
+ $(ASSEMBLY_BUILD_FLAGS) \
+ -nowarn:0278 -nowarn:0078 $$warn \
+ -define:HAVE_GTK_2_10 -define:NET_2_0 \
+ -debug -target:$(TARGET) -out:$@ \
+ $(BUILD_DEFINES) $(ENABLE_TESTS_FLAG) $(ENABLE_ATK_FLAG) \
+ $(FILTERED_LINK) $(RESOURCES_BUILD) $(SOURCES_BUILD)
+ @if [ -e $(srcdir)/$(notdir $@.config) ]; then \
+ cp $(srcdir)/$(notdir $@.config) $(top_builddir)/bin; \
+ fi;
+ @if [ ! -z "$(EXTRA_BUNDLE)" ]; then \
+ cp $(EXTRA_BUNDLE) $(top_builddir)/bin; \
+ fi;
+
+theme-icons: $(THEME_ICONS_SOURCE)
+ @$(INSTALL_ICONS) -il "$(BUILD_DATA_DIR)" "$(srcdir)" $(THEME_ICONS_RELATIVE)
+
+install-data-local: $(THEME_ICONS_SOURCE)
+ @$(INSTALL_ICONS) -i "$(DESTDIR)$(pkgdatadir)" "$(srcdir)" $(THEME_ICONS_RELATIVE)
+
+uninstall-local: $(THEME_ICONS_SOURCE)
+ @$(INSTALL_ICONS) -u "$(DESTDIR)$(pkgdatadir)" "$(srcdir)" $(THEME_ICONS_RELATIVE)
# 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/extensions/Transitions/Makefile.in b/extensions/Transitions/Makefile.in
index 2a650cb..6205680 100644
--- a/extensions/Transitions/Makefile.in
+++ b/extensions/Transitions/Makefile.in
@@ -38,8 +38,14 @@ DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in
ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
am__aclocal_m4_deps = $(top_srcdir)/build/m4/shave/shave.m4 \
$(top_srcdir)/build/m4/shamrock/expansions.m4 \
+ $(top_srcdir)/build/m4/shamrock/gnome-doc.m4 \
$(top_srcdir)/build/m4/shamrock/mono.m4 \
+ $(top_srcdir)/build/m4/shamrock/nunit.m4 \
$(top_srcdir)/build/m4/shamrock/programs.m4 \
+ $(top_srcdir)/build/m4/f-spot/flickrnet.m4 \
+ $(top_srcdir)/build/m4/f-spot/gnome-keyring-sharp.m4 \
+ $(top_srcdir)/build/m4/f-spot/gtk-sharp.m4 \
+ $(top_srcdir)/build/m4/f-spot/mono-addins.m4 \
$(top_srcdir)/acinclude.m4 $(top_srcdir)/configure.ac
am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
$(ACLOCAL_M4)
@@ -134,6 +140,8 @@ EXIF_SOVERSION = @EXIF_SOVERSION@
F77 = @F77@
FC = @FC@
FGREP = @FGREP@
+FLICKRNET_CFLAGS = @FLICKRNET_CFLAGS@
+FLICKRNET_LIBS = @FLICKRNET_LIBS@
F_CFLAGS = @F_CFLAGS@
F_LIBS = @F_LIBS@
GAPI2CODEGEN = @GAPI2CODEGEN@
@@ -147,6 +155,8 @@ GCONF_SHARP_LIBS = @GCONF_SHARP_LIBS@
GETTEXT_PACKAGE = @GETTEXT_PACKAGE@
GIO_CFLAGS = @GIO_CFLAGS@
GIO_LIBS = @GIO_LIBS@
+GLIBSHARP_2_12_7_CFLAGS = @GLIBSHARP_2_12_7_CFLAGS@
+GLIBSHARP_2_12_7_LIBS = @GLIBSHARP_2_12_7_LIBS@
GLIBSHARP_CFLAGS = @GLIBSHARP_CFLAGS@
GLIBSHARP_LIBS = @GLIBSHARP_LIBS@
GLIB_CFLAGS = @GLIB_CFLAGS@
@@ -162,6 +172,10 @@ GNOME_SHARP_CFLAGS = @GNOME_SHARP_CFLAGS@
GNOME_SHARP_LIBS = @GNOME_SHARP_LIBS@
GOBJECT_QUERY = @GOBJECT_QUERY@
GREP = @GREP@
+GTKSHARP_A11Y_CFLAGS = @GTKSHARP_A11Y_CFLAGS@
+GTKSHARP_A11Y_LIBS = @GTKSHARP_A11Y_LIBS@
+GTKSHARP_CFLAGS = @GTKSHARP_CFLAGS@
+GTKSHARP_LIBS = @GTKSHARP_LIBS@
HELP_DIR = @HELP_DIR@
ICONS_DIRECTORY = @ICONS_DIRECTORY@
INSTALL = @INSTALL@
@@ -175,14 +189,14 @@ INTLTOOL_EXTRACT = @INTLTOOL_EXTRACT@
INTLTOOL_MERGE = @INTLTOOL_MERGE@
INTLTOOL_PERL = @INTLTOOL_PERL@
INTLTOOL_UPDATE = @INTLTOOL_UPDATE@
+KEYRINGSHARP_CFLAGS = @KEYRINGSHARP_CFLAGS@
+KEYRINGSHARP_LIBS = @KEYRINGSHARP_LIBS@
LCMS_CFLAGS = @LCMS_CFLAGS@
LCMS_LIBS = @LCMS_LIBS@
LD = @LD@
LDFLAGS = @LDFLAGS@
LIBEXIF_VERSION_CHECK_CFLAGS = @LIBEXIF_VERSION_CHECK_CFLAGS@
LIBEXIF_VERSION_CHECK_LIBS = @LIBEXIF_VERSION_CHECK_LIBS@
-LIBGPHOTO2_CFLAGS = @LIBGPHOTO2_CFLAGS@
-LIBGPHOTO2_LIBS = @LIBGPHOTO2_LIBS@
LIBJPEG = @LIBJPEG@
LIBOBJS = @LIBOBJS@
LIBS = @LIBS@
@@ -197,6 +211,12 @@ MCS = @MCS@
MKDIR_P = @MKDIR_P@
MKINSTALLDIRS = @MKINSTALLDIRS@
MONO = @MONO@
+MONO_ADDINS_CFLAGS = @MONO_ADDINS_CFLAGS@
+MONO_ADDINS_GUI_CFLAGS = @MONO_ADDINS_GUI_CFLAGS@
+MONO_ADDINS_GUI_LIBS = @MONO_ADDINS_GUI_LIBS@
+MONO_ADDINS_LIBS = @MONO_ADDINS_LIBS@
+MONO_ADDINS_SETUP_CFLAGS = @MONO_ADDINS_SETUP_CFLAGS@
+MONO_ADDINS_SETUP_LIBS = @MONO_ADDINS_SETUP_LIBS@
MONO_MODULE_CFLAGS = @MONO_MODULE_CFLAGS@
MONO_MODULE_LIBS = @MONO_MODULE_LIBS@
MSGFMT = @MSGFMT@
@@ -207,7 +227,6 @@ NDESK_DBUS_LIBS = @NDESK_DBUS_LIBS@
NM = @NM@
NMEDIT = @NMEDIT@
NUNIT_CFLAGS = @NUNIT_CFLAGS@
-NUNIT_DEFINES = @NUNIT_DEFINES@
NUNIT_LIBS = @NUNIT_LIBS@
OBJC = @OBJC@
OBJDUMP = @OBJDUMP@
diff --git a/extensions/f-spot.global.addins b/extensions/f-spot.global.addins
index 72be074..ccc2236 100644
--- a/extensions/f-spot.global.addins
+++ b/extensions/f-spot.global.addins
@@ -1,3 +1,3 @@
<Addins>
- <Directory>./extensions</Directory>
+ <Directory>./Extensions</Directory>
</Addins>
diff --git a/f-spot-import.desktop b/f-spot-import.desktop
deleted file mode 100644
index d81f444..0000000
--- a/f-spot-import.desktop
+++ /dev/null
@@ -1,227 +0,0 @@
-[Desktop Entry]
-Version=1.0
-Name=F-Spot
-Name[ar]=إف-سبوت
-Name[be at latin]=F-Spot
-Name[bg]=F-Spot
-Name[bn_IN]=F-Spot
-Name[ca]=F-Spot
-Name[cs]=F-Spot
-Name[da]=F-Spot
-Name[de]=F-Spot
-Name[dz]=ཨེཕ་-ཨིསི་པོཊི་
-Name[el]=F-Spot
-Name[en_CA]=F-Spot
-Name[en_GB]=F-Spot
-Name[es]=F-Spot
-Name[et]=F-Spot
-Name[eu]=F-Spot
-Name[fa]=اِف- اِسپات
-Name[fi]=F-Spot
-Name[fr]=F-Spot
-Name[gl]=F-Spot
-Name[he]=F-Spot
-Name[hi]=एफ़ स्पॉट
-Name[hu]=F-Spot
-Name[it]=F-Spot
-Name[ja]=F-Spot
-Name[ka]=F-სპოტ
-Name[kn]=F-Spot
-Name[ko]=F-Spot
-Name[lt]=F-Spot
-Name[lv]=F-Spot
-Name[mk]=F-Spot
-Name[mr]=F-Spot
-Name[nb]=F-Spot
-Name[nds]=F-Spot
-Name[or]=F-Spot
-Name[pa]=F-ਸਪੋਟ
-Name[pl]=F-Spot
-Name[pt]=F-Spot
-Name[pt_BR]=F-Spot
-Name[ro]=F-Spot
-Name[ru]=F-Spot
-Name[sk]=F-Spot
-Name[sl]=F-Spot
-Name[sr]=Ф-број
-Name[sr at latin]=F-broj
-Name[sv]=F-Spot
-Name[ta]=F-Spot
-Name[te]=F-Spot
-Name[th]=F-Spot
-Name[uk]=F-Spot
-Name[vi]=F-Spot
-Name[zh_CN]=F-Spot
-Name[zh_HK]=F-Spot
-Name[zh_TW]=F-Spot
-GenericName=Photo Manager
-GenericName[ar]=مدير الصور
-GenericName[as]=ফটো মেনেজাৰ
-GenericName[be at latin]=Kiraŭnik zdymkaŭ
-GenericName[bg]=Управление на снимки
-GenericName[bn_IN]=ফটো পরিচালন ব্যবস্থা
-GenericName[ca]=Gestor fotogràfic
-GenericName[cs]=Správce fotografií
-GenericName[da]=Fotohåndtering
-GenericName[de]=Fotoverwaltung
-GenericName[dz]=དཔར་འཛིན་སྐྱོང་པ་
-GenericName[el]=Διαχείριση φωτογραφιών
-GenericName[en_CA]=Photo Manager
-GenericName[en_GB]=Photo Manager
-GenericName[es]=Gestor de fotografías
-GenericName[et]=Fotode haldaja
-GenericName[eu]=Argazki-kudeatzailea
-GenericName[fa]=مدیر عکس
-GenericName[fi]=Valokuvien hallinta
-GenericName[fr]=Gestionnaire de photos
-GenericName[gl]=Xestor de fotos
-GenericName[gu]=ફોટો વ્યવસ્થાપક
-GenericName[he]=מנהל תמונות
-GenericName[hi]=फोटो प्रबंधक
-GenericName[hu]=Fényképkezelő
-GenericName[it]=Gestore di fotografie
-GenericName[ja]=写真マネージャ
-GenericName[ka]=ფოტო მენეჯერი
-GenericName[kn]=ಫೋಟೊ ವ್ಯವಸ್ಥಾಪಕ
-GenericName[ko]=사진 관리자
-GenericName[lt]=Fotografijų tvarkymo programa
-GenericName[lv]=Fotogrāfiju pārvaldnieks
-GenericName[mk]=Менаџер за слики
-GenericName[mr]=फोटो व्यवस्थापक
-GenericName[nb]=Fotobehandler
-GenericName[nl]=Fotobeheer
-GenericName[or]=ଫୋଟୋ ପରିଚାଳକ
-GenericName[pa]=ਫੋਟੋ ਮੈਨੇਜਰ
-GenericName[pl]=Menedżer zdjęć
-GenericName[pt]=Gestor de Fotografias
-GenericName[pt_BR]=Gerenciador de fotos
-GenericName[ro]=Manager Foto
-GenericName[ru]=Управление фотографиями
-GenericName[sk]=Správca fotiek
-GenericName[sl]=Upravljalnik fotografij
-GenericName[sr]=Фото албум
-GenericName[sr at latin]=Foto album
-GenericName[sv]=Fotohanterare
-GenericName[ta]=நிழற்பட மேலாளர்
-GenericName[te]=ఛాయాచిత్ర నిర్వాహిక
-GenericName[th]=โปรแกรมจัดการรูปถ่าย
-GenericName[uk]=Керування фотографіями
-GenericName[vi]=Bộ Quản Lý Ảnh Chụp
-GenericName[zh_CN]=照片管理器
-GenericName[zh_HK]=相片管理員
-GenericName[zh_TW]=相片管理員
-X-GNOME-FullName=F-Spot Photo Manager
-X-GNOME-FullName[ar]=مدير الصور إف-سبوت
-X-GNOME-FullName[as]=F-Spot ফটো মেনেজাৰ
-X-GNOME-FullName[be at latin]=Kiraŭnik zdymkaŭ F-Spot
-X-GNOME-FullName[bg]=Управление на снимки (F-Spot)
-X-GNOME-FullName[bn_IN]=F-Spot ফটো পরিচালন ব্যবস্থা
-X-GNOME-FullName[ca]=Gestor fotogràfic F-Spot
-X-GNOME-FullName[cs]=Správce fotografií F-Spot
-X-GNOME-FullName[da]=F-Spot fotohåndtering
-X-GNOME-FullName[de]=F-Spot Fotoverwaltung
-X-GNOME-FullName[dz]=ཨེཕ་-ཨིསི་པོཊི་ དཔར་འཛིན་སྐྱོང་པ་
-X-GNOME-FullName[el]=Διαχείριση φωτογραφιών
-X-GNOME-FullName[en_CA]=F-Spot Photo Manager
-X-GNOME-FullName[en_GB]=F-Spot Photo Manager
-X-GNOME-FullName[es]=Gestor de fotos F-Spot
-X-GNOME-FullName[et]=F-Spot fotoalbum
-X-GNOME-FullName[eu]=F-Spot argazki-kudeatzailea
-X-GNOME-FullName[fa]=مدیر عکس اِف-اِسپات
-X-GNOME-FullName[fi]=F-Spot - valokuvien hallinta
-X-GNOME-FullName[fr]=Gestionnaire de photos F-Spot
-X-GNOME-FullName[gl]=Xestor de fotos F-Spot
-X-GNOME-FullName[gu]=F-Spot ફોટો વ્યવસ્થાપક
-X-GNOME-FullName[he]=מנהל התמונות F-Spot
-X-GNOME-FullName[hi]=एफ़ स्पॉट फोटो प्रबंधक
-X-GNOME-FullName[hu]=F-Spot fotókezelő
-X-GNOME-FullName[it]=Gestore di fotografie F-spot
-X-GNOME-FullName[ja]=F-Spot 写真マネージャ
-X-GNOME-FullName[ka]=F-სპოტ ფოტო მენეჯერი
-X-GNOME-FullName[kn]=F-Spot ಫೋಟೋ ವ್ಯವಸ್ಥಾಪಕ
-X-GNOME-FullName[ko]=F-Spot 사진 관리자
-X-GNOME-FullName[lt]=Fotografijų tvarkymo programa F-Spot
-X-GNOME-FullName[lv]=F-Spot fotogrāfiju pārvaldnieks
-X-GNOME-FullName[mk]=F-Spot Менаџер за слики
-X-GNOME-FullName[mr]=F-Spot फोटो व्यवस्थापक
-X-GNOME-FullName[nb]=F-Spot bildebehandling
-X-GNOME-FullName[nl]=F-Spot fotobeheer
-X-GNOME-FullName[or]=F-Spot ଫୋଟୋ ପରିଚାଳକ
-X-GNOME-FullName[pa]=F-ਸਪੋਟ ਫੋਟੋ ਮੈਨੇਜਰ
-X-GNOME-FullName[pl]=Menedżer zdjęć F-Spot
-X-GNOME-FullName[pt]=Gestor de Fotografias do F-Spot
-X-GNOME-FullName[pt_BR]=Gerenciador de fotos F-Spot
-X-GNOME-FullName[ro]=Manager Foto F-Spot
-X-GNOME-FullName[ru]=Управление фотографиями в F-Spot
-X-GNOME-FullName[sk]=Správca fotiek F-Spot
-X-GNOME-FullName[sl]=F-spot upravljalnik fotografij
-X-GNOME-FullName[sr]=Ф-број фото албум
-X-GNOME-FullName[sr at latin]=F-broj foto album
-X-GNOME-FullName[sv]=Fotohanteraren F-Spot
-X-GNOME-FullName[ta]=F-Spot நிழற்பட மேலாளர்
-X-GNOME-FullName[te]=F-Spot ఛాయాచిత్ర నిర్వాహిక
-X-GNOME-FullName[th]=F-Spot: โปรแกรมจัดการรูปถ่าย
-X-GNOME-FullName[uk]=Керування фотографіями у F-Spot
-X-GNOME-FullName[vi]=Bộ Quản Lý Ảnh Chụp F-Spot
-X-GNOME-FullName[zh_CN]=F-Spot 照片管理器
-X-GNOME-FullName[zh_HK]=F-Spot 相片管理員
-X-GNOME-FullName[zh_TW]=F-Spot 相片管理員
-Comment=Import into F-Spot
-Comment[ar]=استيراد إلى إف-سبوت
-Comment[as]=F-Spot লৈ আমদানি কৰক
-Comment[bg]=Внасяне в F-Spot
-Comment[bn_IN]=F-Spot-এ ইম্পোর্ট করুন
-Comment[ca]=Importa a l'F-Spot
-Comment[cs]=Importovat do F-Spot
-Comment[da]=Importér til F-Spot
-Comment[de]=In F-Spot importieren
-Comment[el]=Εισαγωγή στο F-Spot
-Comment[en_GB]=Import into F-Spot
-Comment[es]=Importar en F-Spot
-Comment[et]=Impordi F-Spot'i
-Comment[eu]=Inportatu 'F-Spot'-era
-Comment[fi]=Tuo F-Spotiin
-Comment[fr]=Importer dans F-Spot
-Comment[gl]=Importar a F-Spot
-Comment[gu]=F-Spot માં આયાત કરો
-Comment[he]=ייבוא לתוך F-Spot
-Comment[hi]=F-Spot में लाएँ
-Comment[hu]=Importálás az F-Spotba
-Comment[it]=Importa in F-Spot
-Comment[ja]=F-Spot にインポート
-Comment[kn]=F-Spot ಗೆ ಆಮದು ಮಾಡಿಕೊಳ್ಳಿ
-Comment[ko]=F-스팟으로 가져오기
-Comment[lt]=Importuoti į F-Spot
-Comment[mk]=Увези во F-Spot
-Comment[mr]=F-Spot अंतर्गत आयात करा
-Comment[nb]=Importer til F-Spot
-Comment[or]=F-Spot ଭିତରେ ଆମଦାନୀ କରନ୍ତୁ
-Comment[pa]=F-ਸਪੋਟ ਵਿੱਚ ਇੰਪੋਰਟ ਕਰੋ
-Comment[pl]=Importowanie do programu F-Spot
-Comment[pt]=Importar para o F-Spot
-Comment[pt_BR]=Importar para o F-Spot
-Comment[ro]=Importă în F-Spot
-Comment[ru]=Импортировать в F-Spot
-Comment[sk]=Importovať do F-Spot
-Comment[sl]=Uvoz v F-Spot
-Comment[sr]=Увези у Ф-број
-Comment[sr at latin]=Uvezi u F-broj
-Comment[sv]=Importera till F-Spot
-Comment[ta]=F-Spotல் இறக்கவும்
-Comment[te]=F-Spotనకు దిగుమతి చేయుము
-Comment[uk]=Імпортувати до F-Spot
-Comment[zh_CN]=导入到 F-Spot
-Comment[zh_HK]=匯入至 F-Spot
-Comment[zh_TW]=匯入至 F-Spot
-NoDisplay=true
-Exec=f-spot-import %u
-Icon=f-spot
-MimeType=x-content/image-dcf;x-content/image-picturecd;
-StartupNotify=true
-Terminal=false
-Type=Application
-X-GNOME-Bugzilla-Bugzilla=GNOME
-X-GNOME-Bugzilla-Product=f-spot
-X-GNOME-Bugzilla-Component=General
-X-GNOME-Bugzilla-Version=0.6.2
-X-GNOME-DocPath=f-spot/f-spot.xml
diff --git a/f-spot-import.desktop.in b/f-spot-import.desktop.in
deleted file mode 100644
index fc7bf18..0000000
--- a/f-spot-import.desktop.in
+++ /dev/null
@@ -1,18 +0,0 @@
-[Desktop Entry]
-Version=1.0
-_Name=F-Spot
-_GenericName=Photo Manager
-_X-GNOME-FullName=F-Spot Photo Manager
-_Comment=Import into F-Spot
-NoDisplay=true
-Exec=f-spot-import %u
-Icon=f-spot
-MimeType=x-content/image-dcf;x-content/image-picturecd;
-StartupNotify=true
-Terminal=false
-Type=Application
-X-GNOME-Bugzilla-Bugzilla=GNOME
-X-GNOME-Bugzilla-Product=f-spot
-X-GNOME-Bugzilla-Component=General
-X-GNOME-Bugzilla-Version=0.6.2
-X-GNOME-DocPath=f-spot/f-spot.xml
diff --git a/f-spot-view.desktop b/f-spot-view.desktop
deleted file mode 100644
index c55957e..0000000
--- a/f-spot-view.desktop
+++ /dev/null
@@ -1,178 +0,0 @@
-[Desktop Entry]
-Version=1.0
-Name=F-Spot
-Name[ar]=إف-سبوت
-Name[be at latin]=F-Spot
-Name[bg]=F-Spot
-Name[bn_IN]=F-Spot
-Name[ca]=F-Spot
-Name[cs]=F-Spot
-Name[da]=F-Spot
-Name[de]=F-Spot
-Name[dz]=ཨེཕ་-ཨིསི་པོཊི་
-Name[el]=F-Spot
-Name[en_CA]=F-Spot
-Name[en_GB]=F-Spot
-Name[es]=F-Spot
-Name[et]=F-Spot
-Name[eu]=F-Spot
-Name[fa]=اِف- اِسپات
-Name[fi]=F-Spot
-Name[fr]=F-Spot
-Name[gl]=F-Spot
-Name[he]=F-Spot
-Name[hi]=एफ़ स्पॉट
-Name[hu]=F-Spot
-Name[it]=F-Spot
-Name[ja]=F-Spot
-Name[ka]=F-სპოტ
-Name[kn]=F-Spot
-Name[ko]=F-Spot
-Name[lt]=F-Spot
-Name[lv]=F-Spot
-Name[mk]=F-Spot
-Name[mr]=F-Spot
-Name[nb]=F-Spot
-Name[nds]=F-Spot
-Name[or]=F-Spot
-Name[pa]=F-ਸਪੋਟ
-Name[pl]=F-Spot
-Name[pt]=F-Spot
-Name[pt_BR]=F-Spot
-Name[ro]=F-Spot
-Name[ru]=F-Spot
-Name[sk]=F-Spot
-Name[sl]=F-Spot
-Name[sr]=Ф-број
-Name[sr at latin]=F-broj
-Name[sv]=F-Spot
-Name[ta]=F-Spot
-Name[te]=F-Spot
-Name[th]=F-Spot
-Name[uk]=F-Spot
-Name[vi]=F-Spot
-Name[zh_CN]=F-Spot
-Name[zh_HK]=F-Spot
-Name[zh_TW]=F-Spot
-GenericName=Photo Viewer
-GenericName[ar]=عارض الصور
-GenericName[as]=ফ'টো ভিৱাৰ
-GenericName[be at latin]=Prahladalnik zdymkaŭ
-GenericName[bg]=Преглед на снимки
-GenericName[bn_IN]=ফটো প্রদর্শন ব্যবস্থা
-GenericName[ca]=Visualitzador fotogràfic
-GenericName[cs]=Prohlížeč fotografií
-GenericName[da]=Fotofremviser
-GenericName[de]=Fotobetrachter
-GenericName[dz]=དཔར་མཐོང་བྱེད་
-GenericName[el]=Προβολή φωτογραφιών
-GenericName[en_CA]=Photo Viewer
-GenericName[en_GB]=Photo Viewer
-GenericName[es]=Visor de fotos
-GenericName[et]=Fotonäitaja
-GenericName[eu]=Argazki-ikustailea
-GenericName[fa]=نمایشدهندهٔ عکس
-GenericName[fi]=Valokuvien katselin
-GenericName[fr]=Visionneur de photos
-GenericName[gl]=Visualizador de fotos
-GenericName[gu]=ફોટો દર્શક
-GenericName[he]=מציג התמונות
-GenericName[hi]=फोटो प्रदर्शक
-GenericName[hu]=Fotómegjelenítő
-GenericName[it]=Visualizzatore di fotografie
-GenericName[ja]=写真ビューア
-GenericName[ka]=ფოტო დამთვალიერებელი
-GenericName[kn]=ಫೋಟೋ ವೀಕ್ಷಕ
-GenericName[ko]=사진 보기
-GenericName[lt]=Fotografijų peržiūros programa
-GenericName[lv]=Bilžu skatītājs
-GenericName[mk]=Прегледувач за слики
-GenericName[mr]=फोटो प्रदर्शक
-GenericName[nb]=Fotovisning
-GenericName[nl]=Fotoweergave
-GenericName[or]=ଫୋଟୋ ପ୍ରଦର୍ଶକ
-GenericName[pa]=ਤਸਵੀਰ ਦਰਸ਼ਕ
-GenericName[pl]=Przeglądarka zdjęć
-GenericName[pt]=Visualizador de Fotografias
-GenericName[pt_BR]=Visualizador de fotos
-GenericName[ro]=Vizualizator de fotografii
-GenericName[ru]=Просмотр снимков
-GenericName[sk]=Prehliadač fotiek
-GenericName[sl]=Pregledovalnik fotografij
-GenericName[sr]=Прегледник фотографија
-GenericName[sr at latin]=Preglednik fotografija
-GenericName[sv]=Fotovisare
-GenericName[ta]=நிழற்பட காட்டி
-GenericName[te]=ఛాయాచిత్ర దర్శిని
-GenericName[uk]=Перегляд фотографій
-GenericName[vi]=Bộ Xem Ảnh Chụp
-GenericName[zh_CN]=照片查看器
-GenericName[zh_HK]=相片檢視器
-GenericName[zh_TW]=相片檢視器
-X-GNOME-FullName=F-Spot Photo Viewer
-X-GNOME-FullName[ar]=عارض صور إف-سبوت
-X-GNOME-FullName[as]=F-Spot ফ'টো প্ৰদৰ্শক
-X-GNOME-FullName[be at latin]=Prahladalnik zdymkaŭ F-Spot
-X-GNOME-FullName[bg]=Преглед на снимки с F-Spot
-X-GNOME-FullName[bn_IN]=F-Spot ফটো প্রদর্শন ব্যবস্থা
-X-GNOME-FullName[ca]=Visualitzador fotogràfic F-Spot
-X-GNOME-FullName[cs]=Prohlížeč fotografií F-Spot
-X-GNOME-FullName[da]=F-Spot fotofremviser
-X-GNOME-FullName[de]=F-Spot Fotobetrachter
-X-GNOME-FullName[dz]=ཨེཕ་-ཨིསི་པོཊི་ དཔར་མཐོང་བྱེད་
-X-GNOME-FullName[el]=F-Spot προβολή φωτογραφιών
-X-GNOME-FullName[en_CA]=F-Spot Photo Viewer
-X-GNOME-FullName[en_GB]=F-Spot Photo Viewer
-X-GNOME-FullName[es]=Visor de fotos F-Spot
-X-GNOME-FullName[et]=F-Spot fotonäitaja
-X-GNOME-FullName[eu]=F-Spot argazki-ikustailea
-X-GNOME-FullName[fa]=نمایشدهندهٔ عکس اِف-اِسپات
-X-GNOME-FullName[fi]=F-Spot - valokuvien hallinta
-X-GNOME-FullName[fr]=Visionneur de photos F-Spot
-X-GNOME-FullName[gl]=Visualizador de fotos F-Spot
-X-GNOME-FullName[gu]=F-Spot ફોટો દર્શક
-X-GNOME-FullName[he]=מציג התמונות F-Spot
-X-GNOME-FullName[hi]=एफ़ स्पॉट फोटो प्रदर्शक
-X-GNOME-FullName[hu]=F-Spot fotómegjelenítő
-X-GNOME-FullName[it]=Visualizzatore di fotografie F-Spot
-X-GNOME-FullName[ja]=F-Spot 写真ビューア
-X-GNOME-FullName[ka]=F-სპოტ ფოტო დამთვალიერებელი
-X-GNOME-FullName[kn]=F-Spot ಫೋಟೋ ವೀಕ್ಷಕ
-X-GNOME-FullName[ko]=F-Spot 사진 보기
-X-GNOME-FullName[lt]=Fotografijų peržiūros programa F-Spot
-X-GNOME-FullName[lv]=F-Spot bilžu skatītājs
-X-GNOME-FullName[mk]=F-Spot Прегледувач за слики
-X-GNOME-FullName[mr]=F-Spot फोटो प्रदर्शक
-X-GNOME-FullName[nb]=F-spot bildebehandling
-X-GNOME-FullName[nl]=F-Spot fotoweergave
-X-GNOME-FullName[or]=F-Spot ଫୋଟୋ ପ୍ରଦର୍ଶକ
-X-GNOME-FullName[pa]=F-ਸਪੋਟ ਫੋਟੋ ਦਰਸ਼ਕ
-X-GNOME-FullName[pl]=Przeglądarka zdjęć F-Spot
-X-GNOME-FullName[pt]=Visualizador de Fotografias do F-Spot
-X-GNOME-FullName[pt_BR]=Visualizador de fotos F-Spot
-X-GNOME-FullName[ro]=Vizualizatorul de fotografii F-Spot
-X-GNOME-FullName[ru]=Просмотр снимков в F-Spot
-X-GNOME-FullName[sk]=Prehliadač fotiek F-Spot
-X-GNOME-FullName[sl]=F-_Spot preledovalnik fotografij
-X-GNOME-FullName[sr]=Ф-број прегледач фотографија
-X-GNOME-FullName[sr at latin]=F-broj pregledač fotografija
-X-GNOME-FullName[sv]=Fotovisaren F-Spot
-X-GNOME-FullName[ta]=F-Spot நிழற்படக் காட்டி
-X-GNOME-FullName[te]=F-Spot ఛాయాచిత్ర దర్శని
-X-GNOME-FullName[uk]=Перегляд фотографій F-Spot
-X-GNOME-FullName[vi]=Bộ xem ảnh chụp F-Spot
-X-GNOME-FullName[zh_CN]=F-Spot 照片查看器
-X-GNOME-FullName[zh_HK]=F-Spot 相片檢視器
-X-GNOME-FullName[zh_TW]=F-Spot 相片檢視器
-TryExec=f-spot
-Exec=f-spot --view %U
-NoDisplay=true
-Icon=f-spot
-StartupNotify=false
-Terminal=false
-Type=Application
-X-GNOME-Bugzilla-Bugzilla=GNOME
-X-GNOME-Bugzilla-Product=f-spot
-X-GNOME-Bugzilla-Component=General
-X-GNOME-Bugzilla-Version=0.6.2
-MimeType=image/bmp;image/gif;image/jpeg;image/jpg;image/pjpeg;image/png;image/svg+xml;image/tiff;image/x-bmp;image/x-gray;image/x-icb;image/x-ico;image/x-png;image/x-portable-anymap;image/x-portable-bitmap;image/x-portable-graymap;image/x-portable-pixmap;image/x-psd;image/x-xbitmap;image/x-xpixmap;image/x-pcx;image/x-dcraw;image/x-ciff;image/x-mrw;image/x-x3f;image/x-orf;image/x-nef;image/x-cr2;image/x-raf;
diff --git a/f-spot-view.desktop.in b/f-spot-view.desktop.in
deleted file mode 100644
index 3d2165c..0000000
--- a/f-spot-view.desktop.in
+++ /dev/null
@@ -1,17 +0,0 @@
-[Desktop Entry]
-Version=1.0
-_Name=F-Spot
-_GenericName=Photo Viewer
-_X-GNOME-FullName=F-Spot Photo Viewer
-TryExec=f-spot
-Exec=f-spot --view %U
-NoDisplay=true
-Icon=f-spot
-StartupNotify=false
-Terminal=false
-Type=Application
-X-GNOME-Bugzilla-Bugzilla=GNOME
-X-GNOME-Bugzilla-Product=f-spot
-X-GNOME-Bugzilla-Component=General
-X-GNOME-Bugzilla-Version=0.6.2
-MimeType=image/bmp;image/gif;image/jpeg;image/jpg;image/pjpeg;image/png;image/svg+xml;image/tiff;image/x-bmp;image/x-gray;image/x-icb;image/x-ico;image/x-png;image/x-portable-anymap;image/x-portable-bitmap;image/x-portable-graymap;image/x-portable-pixmap;image/x-psd;image/x-xbitmap;image/x-xpixmap;image/x-pcx;image/x-dcraw;image/x-ciff;image/x-mrw;image/x-x3f;image/x-orf;image/x-nef;image/x-cr2;image/x-raf;
diff --git a/f-spot.desktop b/f-spot.desktop
deleted file mode 100644
index 9ab6639..0000000
--- a/f-spot.desktop
+++ /dev/null
@@ -1,234 +0,0 @@
-[Desktop Entry]
-Version=1.0
-Name=F-Spot
-Name[ar]=إف-سبوت
-Name[be at latin]=F-Spot
-Name[bg]=F-Spot
-Name[bn_IN]=F-Spot
-Name[ca]=F-Spot
-Name[cs]=F-Spot
-Name[da]=F-Spot
-Name[de]=F-Spot
-Name[dz]=ཨེཕ་-ཨིསི་པོཊི་
-Name[el]=F-Spot
-Name[en_CA]=F-Spot
-Name[en_GB]=F-Spot
-Name[es]=F-Spot
-Name[et]=F-Spot
-Name[eu]=F-Spot
-Name[fa]=اِف- اِسپات
-Name[fi]=F-Spot
-Name[fr]=F-Spot
-Name[gl]=F-Spot
-Name[he]=F-Spot
-Name[hi]=एफ़ स्पॉट
-Name[hu]=F-Spot
-Name[it]=F-Spot
-Name[ja]=F-Spot
-Name[ka]=F-სპოტ
-Name[kn]=F-Spot
-Name[ko]=F-Spot
-Name[lt]=F-Spot
-Name[lv]=F-Spot
-Name[mk]=F-Spot
-Name[mr]=F-Spot
-Name[nb]=F-Spot
-Name[nds]=F-Spot
-Name[or]=F-Spot
-Name[pa]=F-ਸਪੋਟ
-Name[pl]=F-Spot
-Name[pt]=F-Spot
-Name[pt_BR]=F-Spot
-Name[ro]=F-Spot
-Name[ru]=F-Spot
-Name[sk]=F-Spot
-Name[sl]=F-Spot
-Name[sr]=Ф-број
-Name[sr at latin]=F-broj
-Name[sv]=F-Spot
-Name[ta]=F-Spot
-Name[te]=F-Spot
-Name[th]=F-Spot
-Name[uk]=F-Spot
-Name[vi]=F-Spot
-Name[zh_CN]=F-Spot
-Name[zh_HK]=F-Spot
-Name[zh_TW]=F-Spot
-GenericName=Photo Manager
-GenericName[ar]=مدير الصور
-GenericName[as]=ফটো মেনেজাৰ
-GenericName[be at latin]=Kiraŭnik zdymkaŭ
-GenericName[bg]=Управление на снимки
-GenericName[bn_IN]=ফটো পরিচালন ব্যবস্থা
-GenericName[ca]=Gestor fotogràfic
-GenericName[cs]=Správce fotografií
-GenericName[da]=Fotohåndtering
-GenericName[de]=Fotoverwaltung
-GenericName[dz]=དཔར་འཛིན་སྐྱོང་པ་
-GenericName[el]=Διαχείριση φωτογραφιών
-GenericName[en_CA]=Photo Manager
-GenericName[en_GB]=Photo Manager
-GenericName[es]=Gestor de fotografías
-GenericName[et]=Fotode haldaja
-GenericName[eu]=Argazki-kudeatzailea
-GenericName[fa]=مدیر عکس
-GenericName[fi]=Valokuvien hallinta
-GenericName[fr]=Gestionnaire de photos
-GenericName[gl]=Xestor de fotos
-GenericName[gu]=ફોટો વ્યવસ્થાપક
-GenericName[he]=מנהל תמונות
-GenericName[hi]=फोटो प्रबंधक
-GenericName[hu]=Fényképkezelő
-GenericName[it]=Gestore di fotografie
-GenericName[ja]=写真マネージャ
-GenericName[ka]=ფოტო მენეჯერი
-GenericName[kn]=ಫೋಟೊ ವ್ಯವಸ್ಥಾಪಕ
-GenericName[ko]=사진 관리자
-GenericName[lt]=Fotografijų tvarkymo programa
-GenericName[lv]=Fotogrāfiju pārvaldnieks
-GenericName[mk]=Менаџер за слики
-GenericName[mr]=फोटो व्यवस्थापक
-GenericName[nb]=Fotobehandler
-GenericName[nl]=Fotobeheer
-GenericName[or]=ଫୋଟୋ ପରିଚାଳକ
-GenericName[pa]=ਫੋਟੋ ਮੈਨੇਜਰ
-GenericName[pl]=Menedżer zdjęć
-GenericName[pt]=Gestor de Fotografias
-GenericName[pt_BR]=Gerenciador de fotos
-GenericName[ro]=Manager Foto
-GenericName[ru]=Управление фотографиями
-GenericName[sk]=Správca fotiek
-GenericName[sl]=Upravljalnik fotografij
-GenericName[sr]=Фото албум
-GenericName[sr at latin]=Foto album
-GenericName[sv]=Fotohanterare
-GenericName[ta]=நிழற்பட மேலாளர்
-GenericName[te]=ఛాయాచిత్ర నిర్వాహిక
-GenericName[th]=โปรแกรมจัดการรูปถ่าย
-GenericName[uk]=Керування фотографіями
-GenericName[vi]=Bộ Quản Lý Ảnh Chụp
-GenericName[zh_CN]=照片管理器
-GenericName[zh_HK]=相片管理員
-GenericName[zh_TW]=相片管理員
-X-GNOME-FullName=F-Spot Photo Manager
-X-GNOME-FullName[ar]=مدير الصور إف-سبوت
-X-GNOME-FullName[as]=F-Spot ফটো মেনেজাৰ
-X-GNOME-FullName[be at latin]=Kiraŭnik zdymkaŭ F-Spot
-X-GNOME-FullName[bg]=Управление на снимки (F-Spot)
-X-GNOME-FullName[bn_IN]=F-Spot ফটো পরিচালন ব্যবস্থা
-X-GNOME-FullName[ca]=Gestor fotogràfic F-Spot
-X-GNOME-FullName[cs]=Správce fotografií F-Spot
-X-GNOME-FullName[da]=F-Spot fotohåndtering
-X-GNOME-FullName[de]=F-Spot Fotoverwaltung
-X-GNOME-FullName[dz]=ཨེཕ་-ཨིསི་པོཊི་ དཔར་འཛིན་སྐྱོང་པ་
-X-GNOME-FullName[el]=Διαχείριση φωτογραφιών
-X-GNOME-FullName[en_CA]=F-Spot Photo Manager
-X-GNOME-FullName[en_GB]=F-Spot Photo Manager
-X-GNOME-FullName[es]=Gestor de fotos F-Spot
-X-GNOME-FullName[et]=F-Spot fotoalbum
-X-GNOME-FullName[eu]=F-Spot argazki-kudeatzailea
-X-GNOME-FullName[fa]=مدیر عکس اِف-اِسپات
-X-GNOME-FullName[fi]=F-Spot - valokuvien hallinta
-X-GNOME-FullName[fr]=Gestionnaire de photos F-Spot
-X-GNOME-FullName[gl]=Xestor de fotos F-Spot
-X-GNOME-FullName[gu]=F-Spot ફોટો વ્યવસ્થાપક
-X-GNOME-FullName[he]=מנהל התמונות F-Spot
-X-GNOME-FullName[hi]=एफ़ स्पॉट फोटो प्रबंधक
-X-GNOME-FullName[hu]=F-Spot fotókezelő
-X-GNOME-FullName[it]=Gestore di fotografie F-spot
-X-GNOME-FullName[ja]=F-Spot 写真マネージャ
-X-GNOME-FullName[ka]=F-სპოტ ფოტო მენეჯერი
-X-GNOME-FullName[kn]=F-Spot ಫೋಟೋ ವ್ಯವಸ್ಥಾಪಕ
-X-GNOME-FullName[ko]=F-Spot 사진 관리자
-X-GNOME-FullName[lt]=Fotografijų tvarkymo programa F-Spot
-X-GNOME-FullName[lv]=F-Spot fotogrāfiju pārvaldnieks
-X-GNOME-FullName[mk]=F-Spot Менаџер за слики
-X-GNOME-FullName[mr]=F-Spot फोटो व्यवस्थापक
-X-GNOME-FullName[nb]=F-Spot bildebehandling
-X-GNOME-FullName[nl]=F-Spot fotobeheer
-X-GNOME-FullName[or]=F-Spot ଫୋଟୋ ପରିଚାଳକ
-X-GNOME-FullName[pa]=F-ਸਪੋਟ ਫੋਟੋ ਮੈਨੇਜਰ
-X-GNOME-FullName[pl]=Menedżer zdjęć F-Spot
-X-GNOME-FullName[pt]=Gestor de Fotografias do F-Spot
-X-GNOME-FullName[pt_BR]=Gerenciador de fotos F-Spot
-X-GNOME-FullName[ro]=Manager Foto F-Spot
-X-GNOME-FullName[ru]=Управление фотографиями в F-Spot
-X-GNOME-FullName[sk]=Správca fotiek F-Spot
-X-GNOME-FullName[sl]=F-spot upravljalnik fotografij
-X-GNOME-FullName[sr]=Ф-број фото албум
-X-GNOME-FullName[sr at latin]=F-broj foto album
-X-GNOME-FullName[sv]=Fotohanteraren F-Spot
-X-GNOME-FullName[ta]=F-Spot நிழற்பட மேலாளர்
-X-GNOME-FullName[te]=F-Spot ఛాయాచిత్ర నిర్వాహిక
-X-GNOME-FullName[th]=F-Spot: โปรแกรมจัดการรูปถ่าย
-X-GNOME-FullName[uk]=Керування фотографіями у F-Spot
-X-GNOME-FullName[vi]=Bộ Quản Lý Ảnh Chụp F-Spot
-X-GNOME-FullName[zh_CN]=F-Spot 照片管理器
-X-GNOME-FullName[zh_HK]=F-Spot 相片管理員
-X-GNOME-FullName[zh_TW]=F-Spot 相片管理員
-Comment=Organize, enjoy, and share your photos
-Comment[ar]=نظم, تمتع, وقم بمشاركة الصور
-Comment[as]=আপোনাৰ ফটোবোৰ সজাওক, ভাগ বতৰা কৰক আৰু উপভোগ কৰক
-Comment[be at latin]=Kiruj svaimi zdymkami i dzialisia imi
-Comment[bg]=Организирайте, наслаждавайте се и споделете снимките си
-Comment[bn_IN]=আপনার ফটোর সংকলন সুবিন্যস্ত, উপভোগ ও বিনিময় করুন
-Comment[ca]=Organitzeu, visualitzeu i compartiu fotografies
-Comment[cs]=Organizuje, prohlíží a sdílí vaše fotografie
-Comment[da]=Organisér, nyd og del dine fotos
-Comment[de]=Fotos anschauen, sortieren und weitergeben
-Comment[dz]=ཁྱོད་ཀྱི་དཔར་ཚུ་ འགོ་འདྲེན་འཐབ་ སྤྲོ་བ་སྟོན་ དེ་ལས་ རུབ་སྤྱོད་འབད་
-Comment[el]=Οργανώστε, απολαύστε και μοιραστείτε τις φωτογραφίες σας με το F-Spot
-Comment[en_CA]=Organize, enjoy, and share your photos
-Comment[en_GB]=Organise, enjoy, and share your photos
-Comment[es]=Organice, diviértase y comparta sus fotografías
-Comment[et]=Naudi fotoalbumi korrastamist ning fotode jagamist
-Comment[eu]=Antolatu, ikusi eta partekatu zure argazkiak
-Comment[fa]=عکسهای خود را سازماندهی کنید، از آنها لذت ببرید، و با دیگران قسمت کنید
-Comment[fi]=Järjestele ja jaa valokuviasi
-Comment[fr]=Organisez, partagez et profitez de vos photos
-Comment[gl]=Organiza, comparte e divírtete coas túas fotos
-Comment[gu]=તમારા ફોટોને સંચાલિત, આનંદ માણો, અને વહેંચો
-Comment[he]=ארגן, תהנה ושתף את התמונות שלך.
-Comment[hi]=संगठित करें, आनंद लें, और अपने फोटो को साझा करें
-Comment[hu]=Fényképek rendszerezése, megjelenítése és megosztása
-Comment[it]=Organizza, mostra e condivide le proprie fotografie
-Comment[ja]=写真を整理し、楽しみ、共有します
-Comment[ka]=ორგანიზირება, დათვალიერება და გაზიარება
-Comment[kn]=ನಿಮ್ಮ ಫೋಟೊಗಳನ್ನು ವ್ಯವಸ್ಥಿತವಾಗಿ ಜೋಡಿಸಿ, ಆನಂದಿಸಿ ಹಾಗು ಇತರರೊಂದಿಗೆ ಹಂಚಿಕೊಳ್ಳಿ
-Comment[ko]=여러분의 사진을 관리하고 공유하세요
-Comment[lt]=Rūšiuokite, mėgaukitės ir dalinkitės savo fotografijomis
-Comment[lv]=Sarīkojoiet, baudiet un dalaties ar savām bildem
-Comment[mk]=Организирајте ги, споделете ги и уживајте во Вашите слики
-Comment[mr]=तुमचे फोटो आयोजीत करा, मजा लूटा व सहभागीय करा
-Comment[nb]=Organiser, verdsett og del bildene dine
-Comment[nl]=Beheer, deel en geniet van uw foto's
-Comment[or]=ଆପଣଙ୍କ ଫୋଟୋଗୁଡ଼ିକୁ ସୁସଂଗଠନ କରନ୍ତୁ, ଉପଭୋଗ କରନ୍ତୁ, ଏବଂ ସହଭାଗ କରନ୍ତୁ
-Comment[pa]=ਆਪਣੀਆਂ ਫੋਟੋ ਵੇਖੋ, ਸਾਂਝੀਆਂ ਕਰੋ
-Comment[pl]=Organizowanie i dzielenie się zdjęciami
-Comment[pt]=Organize, divirta-se e partilhe as suas fotos
-Comment[pt_BR]=Organize, compartilhe e divirta-se com suas fotos
-Comment[ro]=Organizați, priviți și partajați fotografii
-Comment[ru]=Организация, просмотр и передача фотографий
-Comment[sk]=Organizovať, mať potešenie a zdielať vaše fotky
-Comment[sl]=Urejajte, uživajte in delite vaše fotografije.
-Comment[sr]=Организујте, уживајте и поделите ваше фотографије
-Comment[sr at latin]=Organizujte, uživajte i podelite vaše fotografije
-Comment[sv]=Organisera, njut av, och dela med dig av dina foton
-Comment[ta]=உங்கள் நிழற்படங்களை ஒழுங்குபடுத்தி, பகிர்ந்து, மகிழவும்
-Comment[te]=నిర్వహించు, ఆనందించు, మరియు మీ ఛాయాచిత్రములను పంచుకొనుము
-Comment[uk]=Організація, перегляд та передача фотографій
-Comment[vi]=Tổ chức, thích thú và chia ra các ảnh chụp của bạn
-Comment[zh_CN]=组织、欣赏及共享您的照片
-Comment[zh_HK]=組織、享受、並分享你的相片
-Comment[zh_TW]=組織、享受、並分享您的相片
-Exec=f-spot
-Icon=f-spot
-StartupNotify=true
-Terminal=false
-Type=Application
-Categories=Graphics;Photography;GNOME;GTK;
-X-GNOME-Bugzilla-Bugzilla=GNOME
-X-GNOME-Bugzilla-Product=f-spot
-X-GNOME-Bugzilla-Component=General
-X-GNOME-Bugzilla-Version=0.6.2
-X-GNOME-DocPath=f-spot/f-spot.xml
diff --git a/f-spot.desktop.in b/f-spot.desktop.in
deleted file mode 100644
index 99916b1..0000000
--- a/f-spot.desktop.in
+++ /dev/null
@@ -1,17 +0,0 @@
-[Desktop Entry]
-Version=1.0
-_Name=F-Spot
-_GenericName=Photo Manager
-_X-GNOME-FullName=F-Spot Photo Manager
-_Comment=Organize, enjoy, and share your photos
-Exec=f-spot
-Icon=f-spot
-StartupNotify=true
-Terminal=false
-Type=Application
-Categories=Graphics;Photography;GNOME;GTK;
-X-GNOME-Bugzilla-Bugzilla=GNOME
-X-GNOME-Bugzilla-Product=f-spot
-X-GNOME-Bugzilla-Component=General
-X-GNOME-Bugzilla-Version=0.6.2
-X-GNOME-DocPath=f-spot/f-spot.xml
diff --git a/f-spot.schemas.in b/f-spot.schemas.in
index d5f91de..551d5d3 100644
--- a/f-spot.schemas.in
+++ b/f-spot.schemas.in
@@ -53,7 +53,6 @@
<key>/schemas/desktop/gnome/f-spot/ui/main_window_x</key>
<applyto>/desktop/gnome/f-spot/ui/main_window_x</applyto>
<type>int</type>
- <default></default>
<locale name="C">
<short>X position of the main window.</short>
<long>The X position to use for the main window.</long>
@@ -64,7 +63,6 @@
<key>/schemas/desktop/gnome/f-spot/ui/main_window_y</key>
<applyto>/desktop/gnome/f-spot/ui/main_window_y</applyto>
<type>int</type>
- <default></default>
<locale name="C">
<short>Y position of the main window.</short>
<long>The Y position to use for the main window.</long>
@@ -253,7 +251,6 @@
<key>/schemas/desktop/gnome/f-spot/ui/viewer_x</key>
<applyto>/desktop/gnome/f-spot/ui/viewer_x</applyto>
<type>int</type>
- <default></default>
<locale name="C">
<short>X position of the photo viewer window.</short>
<long>The X position to use for the photo viewer window.</long>
@@ -264,7 +261,6 @@
<key>/schemas/desktop/gnome/f-spot/ui/viewer_y</key>
<applyto>/desktop/gnome/f-spot/ui/viewer_y</applyto>
<type>int</type>
- <default></default>
<locale name="C">
<short>Y position of the photo viewer window.</short>
<long>The Y position to use for the photo viewer window.</long>
diff --git a/f-spot.spec b/f-spot.spec
deleted file mode 100644
index 8535971..0000000
--- a/f-spot.spec
+++ /dev/null
@@ -1,47 +0,0 @@
-Summary: F-Spot
-Name: f-spot
-Version: 0.6.2
-Release: 1
-License: GPL
-Group: Applications/Imaging
-Source: f-spot-%{version}.tar.gz
-BuildRoot: /var/tmp/%{name}-root
-BuildPrereq: mono
-Prefix: /opt/gnome
-
-%description
-An application to organize your photographs.
-
-%prep
-%setup -q
-
-%build
-./configure --prefix=%{_prefix} \
- --localstatedir=/var/lib \
- --datadir=%{_prefix}/share
-make
-
-%install
-rm -rf $RPM_BUILD_ROOT
-MAKE=${MAKE:-make}
-DESTDIR=${DESTDIR:-"$RPM_BUILD_ROOT"}
-case "${RPM_COMMAND:-all}" in
-install|all)
- make install DESTDIR=${DESTDIR}
- ;;
-esac
-
-%clean
-rm -rf $RPM_BUILD_ROOT
-
-%post
-
-%files
-%defattr(-,root,root)
-%doc COPYING README
-%{_lib}/f-spot/*
-%{_prefix}/bin/f-spot
-
-%changelog
-* Thu Aug 27 2004 Nat Friedman <nat at novell.com>
-- initial packaging of 0.0.2
diff --git a/f-spot.spec.in b/f-spot.spec.in
deleted file mode 100644
index ae0d037..0000000
--- a/f-spot.spec.in
+++ /dev/null
@@ -1,47 +0,0 @@
-Summary: F-Spot
-Name: f-spot
-Version: @VERSION@
-Release: 1
-License: GPL
-Group: Applications/Imaging
-Source: f-spot-%{version}.tar.gz
-BuildRoot: /var/tmp/%{name}-root
-BuildPrereq: mono
-Prefix: /opt/gnome
-
-%description
-An application to organize your photographs.
-
-%prep
-%setup -q
-
-%build
-./configure --prefix=%{_prefix} \
- --localstatedir=/var/lib \
- --datadir=%{_prefix}/share
-make
-
-%install
-rm -rf $RPM_BUILD_ROOT
-MAKE=${MAKE:-make}
-DESTDIR=${DESTDIR:-"$RPM_BUILD_ROOT"}
-case "${RPM_COMMAND:-all}" in
-install|all)
- make install DESTDIR=${DESTDIR}
- ;;
-esac
-
-%clean
-rm -rf $RPM_BUILD_ROOT
-
-%post
-
-%files
-%defattr(-,root,root)
-%doc COPYING README
-%{_lib}/f-spot/*
-%{_prefix}/bin/f-spot
-
-%changelog
-* Thu Aug 27 2004 Nat Friedman <nat at novell.com>
-- initial packaging of 0.0.2
diff --git a/help/C/23hq.page b/help/C/23hq.page
new file mode 100644
index 0000000..10f7360
--- /dev/null
+++ b/help/C/23hq.page
@@ -0,0 +1,19 @@
+<page xmlns="http://projectmallard.org/1.0/"
+ xmlns:e="http://projectmallard.org/experimental/"
+ type="topic"
+ id="23hq">
+
+ <info>
+ <link type="guide" xref="upload-to-web"/>
+ <desc>Upload photos to 23hq</desc>
+ </info>
+
+ <title>
+ 23hq
+ </title>
+
+ <p>To upload photos to 23hq you will need a 23hq account, as well as
+ internet access. Also, the 23hq
+ <link xref="extensions">extension</link> must be installed and enabled.
+ </p>
+</page>
diff --git a/help/C/adjust-color.page b/help/C/adjust-color.page
new file mode 100644
index 0000000..11da61e
--- /dev/null
+++ b/help/C/adjust-color.page
@@ -0,0 +1,55 @@
+<page xmlns="http://projectmallard.org/1.0/"
+ type="topic"
+ id="adjust-color">
+ <info>
+ <link type="guide" xref="colors"/>
+ <desc>Adjusting the colors of a photo</desc>
+ </info>
+
+ <title>
+ Adjust Color
+ </title>
+ <p>As far as the editing tools in F-Spot, adjusting the color is easily the
+ most powerful. The color editor allows you to adjust:</p>
+ <terms>
+ <item>
+ <title>Exposure</title>
+ <p>This adjustment simulates lengthening or shortening the exposure time.
+ </p>
+ </item>
+ <item>
+ <title>Saturation</title>
+ <p>This adjustment simulates adjusting the amount of color in the image, i.e.
+ sliding it to the left decrease color, making it black and white,
+ while sliding it to the right will increase the vibrancy of colors.
+ </p>
+ </item>
+ <item>
+ <title>Brightness</title>
+ <p>This adjustment increase the brightness of colors. Increasing this
+ too much will make colors appear "washed out", while decreasing it
+ too much will make the image too dark and lacking in contrast. </p>
+ </item>
+ <item>
+ <title>Hue</title>
+ <p>This adjustment causes colors to "rotate" along the color wheel.</p>
+ </item>
+ <item>
+ <title>Contrast</title>
+ <p>This adjustment adjusts the contrast ratio, that is, the ratio of
+ difference between dark and light pixels. Sliding to the left
+ decreases contrast, while sliding to the right will increase contrast.
+ </p>
+ </item>
+ <item>
+ <title>Temp</title>
+ <p>This adjust changes the color temperature, measured in degrees Kelvin.
+ </p>
+ </item>
+ <item>
+ <title>Tint</title>
+ <p>This adjustment allows you to tinge the photo with a color.</p>
+ </item>
+ </terms>
+</page>
+
diff --git a/help/C/cd.page b/help/C/cd.page
new file mode 100644
index 0000000..1647ea0
--- /dev/null
+++ b/help/C/cd.page
@@ -0,0 +1,14 @@
+<page xmlns="http://projectmallard.org/1.0/"
+ xmlns:e="http://projectmallard.org/experimental/"
+ type="topic"
+ id="cd">
+
+ <info>
+ <link type="guide" xref="index#sharing"/>
+ <desc>Burn photos to a CD</desc>
+ </info>
+
+ <title>
+ CD Export
+ </title>
+</page>
diff --git a/help/C/colors.page b/help/C/colors.page
new file mode 100644
index 0000000..44c8758
--- /dev/null
+++ b/help/C/colors.page
@@ -0,0 +1,28 @@
+<page xmlns="http://projectmallard.org/1.0/"
+ type="guide"
+ id="colors">
+ <info>
+ <link type="guide" xref="index#editing" group="colors"/>
+ <desc>Edit the colors of your photos</desc>
+ </info>
+
+ <title>
+ Color Editing
+ </title>
+ <p><app>F-Spot</app> supports several modes of color manipulation.</p>
+ <terms>
+ <item>
+ <title>Desaturate</title>
+ <p>This mode eliminates all saturation, turning a color image into a
+ black and white image.</p>
+ </item>
+ <item>
+ <title>Sepia Tone</title>
+ <p>This mode simulates a photo being created with sepia toner.</p>
+ </item>
+ <item>
+ <title>Auto Color</title>
+ <p>This mode automatically adjusts the colors to a set profile.</p>
+ </item>
+ </terms>
+</page>
diff --git a/help/C/date-search.page b/help/C/date-search.page
new file mode 100644
index 0000000..4c5863c
--- /dev/null
+++ b/help/C/date-search.page
@@ -0,0 +1,49 @@
+<page xmlns="http://projectmallard.org/1.0/"
+ xmlns:e="http://projectmallard.org/experimental/"
+ type="topic"
+ id="date-search">
+
+ <info>
+ <link type="guide" xref="index#searching"/>
+ <desc>Search photos by date</desc>
+ </info>
+
+ <title>
+ Search by Date
+ </title>
+
+ <p>To search by date:</p>
+ <steps>
+ <item>
+ <p>Select <guiseq><gui>Find</gui><gui>By Date</gui>
+ <gui>Set Date Range...</gui></guiseq>.</p>
+ </item>
+ <item>
+ <p>Select a time period to from which to view photos.
+ This can by done by selecting a set period, such as a week, or by
+ specifying dates.</p>
+ </item>
+ <item>
+ <p>Click <gui>Ok</gui>.</p>
+ </item>
+ </steps>
+ <p>Alternatively, you can use the timeline. To use the timeline:</p>
+ <steps>
+ <item>
+ <p>Make sure the timeline is enabled by selecting <guiseq><gui>View</gui>
+ <gui>Components</gui></guiseq> and making sure that <gui>Timeline</gui>
+ is checked.</p>
+ </item>
+ <item>
+ <p>In the timeline, click the bar corresponding to the time period you
+ wish to look at.</p>
+ </item>
+ </steps>
+ <p>To stop searching by date:</p>
+ <steps>
+ <item>
+ <p>Select <guiseq><gui>Find</gui><gui>By Date</gui>
+ <gui>Clear Date Range</gui></guiseq>.</p>
+ </item>
+ </steps>
+</page>
diff --git a/help/C/enhancements.page b/help/C/enhancements.page
new file mode 100644
index 0000000..47b7afe
--- /dev/null
+++ b/help/C/enhancements.page
@@ -0,0 +1,42 @@
+<page xmlns="http://projectmallard.org/1.0/"
+ type="topic"
+ id="enhancements">
+ <info>
+ <link type="guide" xref="index#editing" group="enhancements"/>
+ <desc>Simple enhancements for your photos</desc>
+ </info>
+
+ <title>
+ Enhancements
+ </title>
+
+ <p>Currently, there are two main enhancements that <app>F-Spot</app>
+ supports: red-eye removal and the automatic enhancement of color.</p>
+ <p>To remove red-eye:</p>
+ <steps>
+ <item>
+ <p>By double-clicking, select the photo on which you wish to use the
+ red-eye removal tool.</p>
+ </item>
+ <item>
+ <p>Click <gui>Red-Eye Removal</gui> in the Edit panel.</p>
+ </item>
+ <item>
+ <p>Select the area from which you wish to remove red-eye. Note: If
+ the contains many red areas, you may wish to select each eye
+ individually.</p>
+ </item>
+ <item>
+ <p>Click <gui>Fix!</gui>.</p>
+ </item>
+ </steps>
+ <p>To automatically enhance the colors of the photo:</p>
+ <steps>
+ <item>
+ <p>By double-clicking, select the photo which you wish to enhance.</p>
+ </item>
+ <item>
+ <p>Click <gui>Auto Color</gui>.</p>
+ </item>
+ </steps>
+</page>
diff --git a/help/C/extensions.page b/help/C/extensions.page
new file mode 100644
index 0000000..7e844dd
--- /dev/null
+++ b/help/C/extensions.page
@@ -0,0 +1,85 @@
+<page xmlns="http://projectmallard.org/1.0/"
+ xmlns:e="http://projectmallard.org/experimental/"
+ type="topic"
+ id="extensions">
+
+ <info>
+ <link type="guide" xref="index#advanced"/>
+ <desc>Working with <app>F-Spot</app> extensions</desc>
+ </info>
+
+ <title>
+ Extensions
+ </title>
+
+ <p><app>F-Spot</app> allows for the use of extensions to provide additional
+ functionality.</p>
+
+ <p>To open the extension manager, select <guiseq><gui>Edit</gui>
+ <gui>Manage Extensions</gui></guiseq>.</p>
+
+ <p>To install extensions:</p>
+ <steps>
+ <item>
+ <p>Open the extension manager.</p>
+ </item>
+ <item>
+ <p>Click <gui>Install Add-ins</gui>.</p>
+ </item>
+ <item>
+ <p>Select an add-on to install from the list.</p>
+ </item>
+ <item>
+ <p>Click <gui>Forward</gui>.</p>
+ </item>
+ <item>
+ <p>Verify all information, and click <gui>Forward</gui> again.</p>
+ </item>
+ <item>
+ <p>Click <gui>Ok</gui>.</p>
+ </item>
+ </steps>
+
+ <p>To enable plugins that are already installed:</p>
+ <steps>
+ <item>
+ <p>Open the extension manager.</p>
+ </item>
+ <item>
+ <p>Select the extension you wish to enable.</p>
+ </item>
+ <item>
+ <p>Click <gui>Enable</gui>.</p>
+ </item>
+ </steps>
+ <p>To disable plugins that are installed:</p>
+ <steps>
+ <item>
+ <p>Open the extension manager.</p>
+ </item>
+ <item>
+ <p>Select the extension you wish to disable.</p>
+ </item>
+ <item>
+ <p>Click <gui>Disable</gui>.</p>
+ </item>
+ </steps>
+ <p>To uninstall plugins:</p>
+ <steps>
+ <item>
+ <p>Open the extension manager.</p>
+ </item>
+ <item>
+ <p>Select the extension you wish to uninstall.</p>
+ </item>
+ <item>
+ <p>Click <gui>Uninstall</gui>.</p>
+ </item>
+ <item>
+ <p>Click <gui>Forward</gui>.</p>
+ </item>
+ <item>
+ <p>Click <gui>Ok</gui>.</p>
+ </item>
+ </steps>
+</page>
diff --git a/help/C/facebook.page b/help/C/facebook.page
new file mode 100644
index 0000000..44b42d3
--- /dev/null
+++ b/help/C/facebook.page
@@ -0,0 +1,42 @@
+<page xmlns="http://projectmallard.org/1.0/"
+ xmlns:e="http://projectmallard.org/experimental/"
+ type="topic"
+ id="facebook">
+
+ <info>
+ <link type="guide" xref="upload-to-web"/>
+ <desc>Upload photos to Facebook</desc>
+ </info>
+
+ <title>
+ Facebook
+ </title>
+
+ <p>To upload photos to Facebook you will need a Facebook account, as well as
+ internet access. Also, the Facebook
+ <link xref="extensions">extension</link> must be installed and enabled.
+ </p>
+
+ <p>To post selected photos to Facebook:</p>
+ <steps>
+ <item>
+ <p>Select <guiseq><gui>Photo</gui><gui>Export To</gui><gui>Facebook</gui>
+ </guiseq>.</p>
+ </item>
+ <item>
+ <p>Click <gui>Login</gui>. A browser window will be brought up. Log in
+ to Facebook and click "Allow" to allow F-Spot access to your Facebook
+ profile.</p>
+ </item>
+ <item>
+ <p>Select whether to create a new album or add to an existing album. If
+ you are creating a new album, fill in the relevant information.</p>
+ </item>
+ <item>
+ <p>Edit captions for each photo, if so desired.</p>
+ </item>
+ <item>
+ <p>When finished, click <gui>Add</gui>.</p>
+ </item>
+ </steps>
+</page>
diff --git a/docs/C/figures/f-spot-adjust-colors.png b/help/C/figures/f-spot-adjust-colors.png
similarity index 100%
rename from docs/C/figures/f-spot-adjust-colors.png
rename to help/C/figures/f-spot-adjust-colors.png
diff --git a/docs/C/figures/f-spot-autocolor.png b/help/C/figures/f-spot-autocolor.png
similarity index 100%
rename from docs/C/figures/f-spot-autocolor.png
rename to help/C/figures/f-spot-autocolor.png
diff --git a/docs/C/figures/f-spot-crop.png b/help/C/figures/f-spot-crop.png
similarity index 100%
rename from docs/C/figures/f-spot-crop.png
rename to help/C/figures/f-spot-crop.png
diff --git a/docs/C/figures/f-spot-desaturate.png b/help/C/figures/f-spot-desaturate.png
similarity index 100%
rename from docs/C/figures/f-spot-desaturate.png
rename to help/C/figures/f-spot-desaturate.png
diff --git a/docs/C/figures/f-spot-fullscreen.png b/help/C/figures/f-spot-fullscreen.png
similarity index 100%
rename from docs/C/figures/f-spot-fullscreen.png
rename to help/C/figures/f-spot-fullscreen.png
diff --git a/docs/C/figures/f-spot-red-eye.png b/help/C/figures/f-spot-red-eye.png
similarity index 100%
rename from docs/C/figures/f-spot-red-eye.png
rename to help/C/figures/f-spot-red-eye.png
diff --git a/docs/C/figures/f-spot-sepia.png b/help/C/figures/f-spot-sepia.png
similarity index 100%
rename from docs/C/figures/f-spot-sepia.png
rename to help/C/figures/f-spot-sepia.png
diff --git a/docs/C/figures/f-spot-slideshow.png b/help/C/figures/f-spot-slideshow.png
similarity index 100%
rename from docs/C/figures/f-spot-slideshow.png
rename to help/C/figures/f-spot-slideshow.png
diff --git a/docs/C/figures/f-spot-soft-focus.png b/help/C/figures/f-spot-soft-focus.png
similarity index 100%
rename from docs/C/figures/f-spot-soft-focus.png
rename to help/C/figures/f-spot-soft-focus.png
diff --git a/docs/C/figures/f-spot-straighten.png b/help/C/figures/f-spot-straighten.png
similarity index 100%
rename from docs/C/figures/f-spot-straighten.png
rename to help/C/figures/f-spot-straighten.png
diff --git a/help/C/file-management.page b/help/C/file-management.page
new file mode 100644
index 0000000..3ff40ef
--- /dev/null
+++ b/help/C/file-management.page
@@ -0,0 +1,40 @@
+<page xmlns="http://projectmallard.org/1.0/"
+ xmlns:e="http://projectmallard.org/experimental/"
+ type="topic"
+ id="file-management">
+
+ <info>
+ <link type="guide" xref="index#basic-functions" group="management"/>
+ <desc>Manage files already imported</desc>
+ </info>
+
+ <title>
+ File Management
+ </title>
+
+ <p><app>F-Spot</app> allows for some control over the contents of your
+ catalog, that is, removing files from your catalog as well as deleting
+ files from your catalog.</p>
+ <p>To remove files from your catalog:</p>
+ <steps>
+ <item>
+ <p>Select the photos you wish to remove from the catalog.</p>
+ </item>
+ <item>
+ <p>Right-click the photos, select <gui>Remove From Catalog</gui>.
+ Alternatively, select <guiseq><gui>Edit</gui><gui>Remove From
+ Catalog</gui></guiseq> or press the Delete key on your keyboard.</p>
+ </item>
+ </steps>
+ <p>To delete photos from your computer:</p>
+ <steps>
+ <item>
+ <p>Select the photos you wish to delete.</p>
+ </item>
+ <item>
+ <p>Right-click the photos, select <gui>Delete From Drive</gui>.
+ Alternatively, select <guiseq><gui>Edit</gui><gui>Delete
+ From Drive</gui></guiseq> or press Shift+Delete on your keyboard.</p>
+ </item>
+ </steps>
+</page>
diff --git a/help/C/flickr.page b/help/C/flickr.page
new file mode 100644
index 0000000..6313613
--- /dev/null
+++ b/help/C/flickr.page
@@ -0,0 +1,19 @@
+<page xmlns="http://projectmallard.org/1.0/"
+ xmlns:e="http://projectmallard.org/experimental/"
+ type="topic"
+ id="flickr">
+
+ <info>
+ <link type="guide" xref="upload-to-web"/>
+ <desc>Upload photos to Flickr</desc>
+ </info>
+
+ <title>
+ Flickr
+ </title>
+
+ <p>To upload photos to Flickr you will need a Flickr account, as well as
+ internet access. Also, the Flickr
+ <link xref="extensions">extension</link> must be installed and enabled.
+ </p>
+</page>
diff --git a/help/C/folder.page b/help/C/folder.page
new file mode 100644
index 0000000..fd8c9f8
--- /dev/null
+++ b/help/C/folder.page
@@ -0,0 +1,42 @@
+<page xmlns="http://projectmallard.org/1.0/"
+ xmlns:e="http://projectmallard.org/experimental/"
+ type="topic"
+ id="folder">
+
+ <info>
+ <link type="guide" xref="index#sharing"/>
+ <desc>Send photos to a folder</desc>
+ </info>
+
+ <title>
+ Folder Export
+ </title>
+
+ <p><app>F-Spot</app> allows you to export to a folder. In order to do so,
+ however, you will need to have the folder export
+ <link xref="extensions">extension</link> installed and enabled.</p>
+ <p>To export selected photos to a folder:</p>
+ <steps>
+ <item>
+ <p>Select <guiseq><gui>Photo</gui><gui>Export To</gui><gui>Folder...</gui>
+ </guiseq>.</p>
+ </item>
+ <item>
+ <p>Select a folder.</p>
+ </item>
+ <item>
+ <p>Name the gallery and give it a description.</p>
+ </item>
+ <item>
+ <p>Select an export method. <gui>Create Standalone Web Gallery</gui>
+ will create a folder with contents fit to be uploaded to a web
+ server to present pictures in a gallery. <gui>Save the files
+ only</gui> will only move photos to the selected folder.
+ <gui>Create gallery using "Original"</gui> will create a folder
+ with contents suitable for using with Original Photo Gallery.</p>
+ </item>
+ <item>
+ <p>Click <gui>Export</gui>.</p>
+ </item>
+ </steps>
+</page>
diff --git a/help/C/general-editing.page b/help/C/general-editing.page
new file mode 100644
index 0000000..ef8d78d
--- /dev/null
+++ b/help/C/general-editing.page
@@ -0,0 +1,60 @@
+<page xmlns="http://projectmallard.org/1.0/"
+ type="topic"
+ id="general-editing">
+ <info>
+ <link type="guide" xref="index#editing" group="general"/>
+ <desc>Make simple edits to your photos</desc>
+ </info>
+
+ <title>
+ General Editing
+ </title>
+
+ <p><app>F-Spot</app> allows you to make simple general edits, including
+ straightening, cropping, and rotating your photos.</p>
+ <p>There are three ways to rotate a selected photo:</p>
+ <steps>
+ <item>
+ <p>Click the appropriate rotate button, to the right of the import
+ button.</p>
+ </item>
+ <item>
+ <p>Select the appropriate option from within the <gui>Edit</gui> menu.
+ </p>
+ </item>
+ <item>
+ <p>Use the bracket keys to rotate the photo.</p>
+ </item>
+ </steps>
+ <p>To straighten a selected photo:</p>
+ <steps>
+ <item>
+ <p>From within the editing pane, select <app>Straighten</app>.</p>
+ </item>
+ <item>
+ <p>Select a rotation, ranging from -45 to 45 degrees.</p>
+ </item>
+ <item>
+ <p>Click <gui>Straighten</gui>.</p>
+ </item>
+ </steps>
+ <p>To crop a selected photo:</p>
+ <steps>
+ <item>
+ <p>Click the <gui>Crop</gui> button in the Edit pane.</p>
+ </item>
+ <item>
+ <p>Select a contraining aspect ratio, that is, a proportion of height
+ to width to which the new photo must fit. Examples of contraining
+ aspect ratios include 4x3, 4x6, and 5x7.</p>
+ </item>
+ <item>
+ <p>Click and drag to select the desired area to keep. This box can be
+ dragged around after being sized.</p>
+ </item>
+ <item>
+ <p>When you have selected your area to crop to, click <gui>Crop</gui>.
+ </p>
+ </item>
+ </steps>
+</page>
diff --git a/help/C/import-photos.page b/help/C/import-photos.page
new file mode 100644
index 0000000..803ac10
--- /dev/null
+++ b/help/C/import-photos.page
@@ -0,0 +1,36 @@
+<page xmlns="http://projectmallard.org/1.0/"
+ type="topic"
+ id="import-photos">
+ <info>
+ <link type="guide" xref="index#basic-functions" group="import"/>
+ <desc>Import photos to be managed</desc>
+ </info>
+
+ <title>
+ Importing Photos
+ </title>
+ <p>
+ Chances are, the first thing you will want to do is import photos.
+ </p>
+ <p>
+ To import photos:
+ </p>
+ <steps>
+ <item>
+ <p>Select <guiseq><gui>Photo</gui><gui>Import...</gui></guiseq>.
+ Alternatively, click the <gui>Import</gui> button.</p>
+ </item>
+ <item>
+ <p>Select a source from which to import, such as a device or a folder.</p>
+ </item>
+ <item>
+ <p>It may take a while for F-Spot to index the files. When it is done
+ indexing, your photos will be presented to you. At this time, you
+ can attach <link xref="tags">tags</link> to all photos, or you can
+ leave that task for later.</p>
+ </item>
+ <item>
+ <p>When you are ready to finish importing photos, click <gui>Import</gui>.</p>
+ </item>
+ </steps>
+</page>
diff --git a/help/C/import-roll-search.page b/help/C/import-roll-search.page
new file mode 100644
index 0000000..6364665
--- /dev/null
+++ b/help/C/import-roll-search.page
@@ -0,0 +1,38 @@
+<page xmlns="http://projectmallard.org/1.0/"
+ xmlns:e="http://projectmallard.org/experimental/"
+ type="topic"
+ id="import-roll-search">
+
+ <info>
+ <link type="guide" xref="index#searching"/>
+ <desc>Searching by date of import</desc>
+ </info>
+
+ <title>
+ Search by Import Roll
+ </title>
+
+ <p>Import rolls are "batches" of imported photos. Regardless of the date the
+ photo was taken, the import roll timestamp is decided when you import photos.
+ </p>
+ <p>To search by latest import roll:</p>
+ <steps>
+ <item>
+ <p>Select <guiseq><gui>Find</gui><gui>By Import Roll</gui><gui>Last Import
+ Roll</gui></guiseq>.</p>
+ </item>
+ </steps>
+ <p>To select a previous import roll:</p>
+ <steps>
+ <item>
+ <p>Select <guiseq><gui>Find</gui><gui>By Import Roll</gui><gui>Select Import
+ Rolls</gui></guiseq>.</p>
+ </item>
+ <item>
+ <p>Select an import roll to search, or select a range by choosing
+ <gui>Between</gui> and select the dates you wish to include.</p>
+ </item>
+ </steps>
+ <p>To stop searching by import rolls, select <guiseq><gui>Find</gui><gui>By
+ Import Roll</gui><gui>Clear Roll Filter</gui></guiseq>.</p>
+</page>
diff --git a/help/C/index.page b/help/C/index.page
new file mode 100644
index 0000000..ffebc24
--- /dev/null
+++ b/help/C/index.page
@@ -0,0 +1,34 @@
+<page xmlns="http://projectmallard.org/1.0/"
+ xmlns:e="http://projectmallard.org/experimental/"
+ type="guide"
+ id="index">
+
+ <info>
+ <title type="link">F-Spot photo manager</title>
+ <title type="text">F-Spot photo manager</title>
+ </info>
+
+ <title>
+ F-Spot photo manager
+ </title>
+
+ <section id="basic-functions" style="2column" groups="import tag rate management">
+ <title>Basic Functions</title>
+ </section>
+
+ <section id="searching" style="2column">
+ <title>Searching</title>
+ </section>
+
+ <section id="editing" style="2column" groups="general colors enhancements">
+ <title>Photo Editing</title>
+ </section>
+
+ <section id="sharing" style="2column">
+ <title>Sharing</title>
+ </section>
+
+ <section id="advanced" style="2column">
+ <title>Advanced Options</title>
+ </section>
+</page>
diff --git a/help/C/introduction.page b/help/C/introduction.page
new file mode 100644
index 0000000..dfe247d
--- /dev/null
+++ b/help/C/introduction.page
@@ -0,0 +1,17 @@
+<page xmlns="http://projectmallard.org/1.0/"
+ type="topic"
+ id="introduction">
+ <info>
+ <link type="guide" xref="index"/>
+ <desc>A brief introduction to F-Spot</desc>
+ </info>
+
+ <title>
+ Introduction
+ </title>
+ <p><app>F-Spot</app> is a full-featured photo manager for the GNOME Desktop,
+ allowing you to tag, rate, and date photos, edit photo metadata, and
+ even includes a simple in-program photo editor.</p>
+ <p>For help getting started using <app>F-Spot</app>, check out the <link
+ xref="index#basic-functions">basic functions</link> of the help file.</p>
+</page>
diff --git a/help/C/picasa.page b/help/C/picasa.page
new file mode 100644
index 0000000..1a3e9df
--- /dev/null
+++ b/help/C/picasa.page
@@ -0,0 +1,39 @@
+<page xmlns="http://projectmallard.org/1.0/"
+ xmlns:e="http://projectmallard.org/experimental/"
+ type="topic"
+ id="picasa">
+
+ <info>
+ <link type="guide" xref="upload-to-web"/>
+ <desc>Upload photos to Google's PicasaWeb</desc>
+ </info>
+
+ <title>
+ Picasa
+ </title>
+
+ <p>To upload photos to Picasa you will need a Picasa account, as well as
+ internet access. Also, the PicasaWeb
+ <link xref="extensions">extension</link> must be installed and enabled.
+ </p>
+ <steps>
+ <item>
+ <p>Select the photos you wish to upload.</p>
+ </item>
+ <item>
+ <p>Click <guiseq><gui>Photo</gui><gui>Export To</gui>
+ <gui>PicasaWeb...</gui></guiseq>.</p>
+ </item>
+ <item>
+ <p>Add a gallery by clicking <gui>Add</gui> and supplying a username and
+ password.</p>
+ </item>j
+ <item>
+ <p>Select a gallery to export to, or click <gui>Add</gui> to create a new
+ gallery.</p>
+ </item>
+ <item>
+ <p>Click <gui>Export</gui>.</p>
+ </item>
+ </steps>
+</page>
diff --git a/help/C/rate-search.page b/help/C/rate-search.page
new file mode 100644
index 0000000..d197c6c
--- /dev/null
+++ b/help/C/rate-search.page
@@ -0,0 +1,35 @@
+<page xmlns="http://projectmallard.org/1.0/"
+ xmlns:e="http://projectmallard.org/experimental/"
+ type="topic"
+ id="rate-search">
+
+ <info>
+ <link type="guide" xref="index#searching"/>
+ <desc>Search photos by star rating</desc>
+ </info>
+
+ <title>
+ Search by Rating
+ </title>
+
+ <p>To search by rating:</p>
+ <steps>
+ <item>
+ <p>Select <guiseq><gui>Find</gui><gui>By Rating</gui><gui>Set Rating
+ Filter...</gui></guiseq>.</p>
+ </item>
+ <item>
+ <p>Select the rating range which you wish to view.</p>
+ </item>
+ <item>
+ <p>Click <gui>Ok</gui>.</p>
+ </item>
+ </steps>
+ <p>To stop searching by rating:</p>
+ <steps>
+ <item>
+ <p>Select <guiseq><gui>Find</gui><gui>By Rating</gui><gui>Set Rating
+ Filter</gui></guiseq>.</p>
+ </item>
+ </steps>
+</page>
diff --git a/help/C/ratings.page b/help/C/ratings.page
new file mode 100644
index 0000000..0bf8770
--- /dev/null
+++ b/help/C/ratings.page
@@ -0,0 +1,35 @@
+<page xmlns="http://projectmallard.org/1.0/"
+ type="topic"
+ id="ratings">
+ <info>
+ <link type="guide" xref="index#basic-functions" group="rate"/>
+ <desc>Rate your photos from one to five stars</desc>
+ </info>
+
+ <title>
+ Rating your photos
+ </title>
+ <p><app>F-Spot</app> allows you to rate your photos from one to five stars.
+ There are two ways to rate photos.</p>
+ <p>Method One:</p>
+ <steps>
+ <item>
+ <p>By double-clicking, select the photo you wish to rate.</p>
+ </item>
+ <item>
+ <p>In the lower-right corner, you will see five dots, corresponding to
+ the rating you wish to give; to give a rating of one star, for
+ example, click the first dot.</p>
+ </item>
+ </steps>
+ <p>Method Two:</p>
+ <steps>
+ <item>
+ <p>Select the photo(s) you wish to rate.</p>
+ </item>
+ <item>
+ <p>Right-click the photo(s) you wish to rate, and select a rating at the
+ bottom of the right-click menu by clicking the corresponding dot.</p>
+ </item>
+ </steps>
+</page>
diff --git a/help/C/smugmug.page b/help/C/smugmug.page
new file mode 100644
index 0000000..079ad3b
--- /dev/null
+++ b/help/C/smugmug.page
@@ -0,0 +1,19 @@
+<page xmlns="http://projectmallard.org/1.0/"
+ xmlns:e="http://projectmallard.org/experimental/"
+ type="topic"
+ id="smugmug">
+
+ <info>
+ <link type="guide" xref="upload-to-web"/>
+ <desc>Upload photos to SmugMug</desc>
+ </info>
+
+ <title>
+ SmugMug
+ </title>
+
+ <p>To upload photos to SmugMug you will need a SmugMug account, as well as
+ internet access. Also, the SmugMug
+ <link xref="extensions">extension</link> must be installed and enabled.
+ </p>
+</page>
diff --git a/help/C/tag-attach.page b/help/C/tag-attach.page
new file mode 100644
index 0000000..a30f1e5
--- /dev/null
+++ b/help/C/tag-attach.page
@@ -0,0 +1,42 @@
+<page xmlns="http://projectmallard.org/1.0/"
+ type="topic"
+ id="tag-attach">
+ <info>
+ <link type="guide" xref="tags#tag-functions" group="attach"/>
+ <desc>Attaching tags to photos</desc>
+ </info>
+
+ <title>
+ Attaching
+ </title>
+ <p>By attaching tags you have <link xref="tag-creation">created</link> you
+ make it easier to search through your photos. As with creating tags,
+ there is more than one method of attaching tags to photos.</p>
+ <p>Method One:</p>
+ <steps>
+ <item>
+ <p>Select photos to which to attach a tag.</p>
+ </item>
+ <item>
+ <p>In the tag pane, select a tag to attach to the photos you have
+ selected.</p>
+ </item>
+ <item>
+ <p>Click <guiseq><gui>Tags</gui><gui>Attach Tag to Selection</gui>
+ </guiseq>. Alternatively, press Ctrl+T.</p>
+ </item>
+ </steps>
+ <p>Method Two:</p>
+ <steps>
+ <item>
+ <p>Select photos to which to attach a tag.</p>
+ </item>
+ <item>
+ <p>Right click the photos.</p>
+ </item>
+ <item>
+ <p>Select <gui>Attach Tag</gui> and select the tag you wish to attach.
+ </p>
+ </item>
+ </steps>
+</page>
diff --git a/help/C/tag-creation.page b/help/C/tag-creation.page
new file mode 100644
index 0000000..9db50b5
--- /dev/null
+++ b/help/C/tag-creation.page
@@ -0,0 +1,72 @@
+<page xmlns="http://projectmallard.org/1.0/"
+ type="topic"
+ id="tag-creation">
+ <info>
+ <link type="guide" xref="tags#tag-functions" group="create"/>
+ <desc>Creating tags to be attached to photos</desc>
+ </info>
+
+ <title>
+ Creating
+ </title>
+ <p>In order to use tags, you need to first create a set of tags which you
+ wish to use. There are three main methods to create tags.</p>
+ <p>Method One:</p>
+ <steps>
+ <item>
+ <p>Select <guiseq><gui>Tags</gui><gui>Create New Tag...</gui></guiseq>.
+ </p>
+ </item>
+ <item>
+ <p>Select a parent tag for the new tag to appear under, such as people
+ or events. If you wish to create a new tag without a parent, select
+ <gui>(None)</gui>.</p>
+ </item>
+ <item>
+ <p>Name the tag.</p>
+ </item>
+ <item>
+ <p>Click <gui>Create</gui></p>
+ </item>
+ </steps>
+ <p>Method Two:</p>
+ <steps>
+ <item>
+ <p>In the tags page, right click, and select <gui>Create New Tag...</gui>
+ </p>
+ </item>
+ <item>
+ <p>Select a parent tag for the new tag to appear under, such as people
+ or events. If you wish to create a new tag without a parent, select
+ <gui>(None)</gui>.</p>
+ </item>
+ <item>
+ <p>Name the tag.</p>
+ </item>
+ <item>
+ <p>Click <gui>Create</gui></p>
+ </item>
+ </steps>
+ <p>Method three has the advantage of also <link xref="tag-attach">
+ attaching</link> the new tag to the photos selected. To do this:</p>
+ <steps>
+ <item>
+ <p>Select the photos to which you wish to attach the new tag.</p>
+ </item>
+ <item>
+ <p>Right-click on the photos, and select <guiseq><gui>Attach Tag</gui>
+ <gui>Create New Tag...</gui></guiseq>.</p>
+ </item>
+ <item>
+ <p>Select a parent tag for the new tag to appear under, such as people
+ or events. If you wish to create a new tag without a parent, select
+ <gui>(None)</gui>.</p>
+ </item>
+ <item>
+ <p>Name the tag.</p>
+ </item>
+ <item>
+ <p>Click <gui>Create</gui></p>
+ </item>
+ </steps>
+</page>
diff --git a/help/C/tag-delete.page b/help/C/tag-delete.page
new file mode 100644
index 0000000..651523f
--- /dev/null
+++ b/help/C/tag-delete.page
@@ -0,0 +1,25 @@
+<page xmlns="http://projectmallard.org/1.0/"
+ type="topic"
+ id="tag-delete">
+ <info>
+ <link type="guide" xref="tags#tag-functions" group="delete"/>
+ <desc>Deleting tags from the system</desc>
+ </info>
+
+ <title>
+ Deleting
+ </title>
+ <p>Deleting tags removes them entirely from your system, but leaves behind
+ any photos to which that tag is attached.</p>
+ <p>To delete a tag:</p>
+ <steps>
+ <item>
+ <p>Select the tag you wish to delete from within the tag pane.</p>
+ </item>
+ <item>
+ <p>Click <guiseq><gui>Tags</gui><gui>Delete Select Tag</gui></guiseq>.
+ Alternatively, right click the tag within the pane, and click
+ <gui>Delete Tag</gui>.</p>
+ </item>
+ </steps>
+</page>
diff --git a/help/C/tag-remove.page b/help/C/tag-remove.page
new file mode 100644
index 0000000..86c1b7e
--- /dev/null
+++ b/help/C/tag-remove.page
@@ -0,0 +1,41 @@
+<page xmlns="http://projectmallard.org/1.0/"
+ type="topic"
+ id="tag-remove">
+ <info>
+ <link type="guide" xref="tags#tag-functions" group="remove"/>
+ <desc>Removing tags from photos</desc>
+ </info>
+
+ <title>
+ Removing
+ </title>
+ <p>As with attaching tags, there are two main methods of removing tags
+ from photos.</p>
+ <p>Method One:</p>
+ <steps>
+ <item>
+ <p>Select photos from which to remove a tag.</p>
+ </item>
+ <item>
+ <p>In the tag pane, select a tag to remove from the photos you have
+ selected.</p>
+ </item>
+ <item>
+ <p>Click <guiseq><gui>Tags</gui><gui>Remove Tag From Selection</gui>
+ </guiseq>.</p>
+ </item>
+ </steps>
+ <p>Method Two:</p>
+ <steps>
+ <item>
+ <p>Select photos from which to remove a tag.</p>
+ </item>
+ <item>
+ <p>Right click the photos.</p>
+ </item>
+ <item>
+ <p>Select <gui>Remove Tag</gui> and select the tag you wish to remove.
+ </p>
+ </item>
+ </steps>
+</page>
diff --git a/help/C/tag-search.page b/help/C/tag-search.page
new file mode 100644
index 0000000..2b3b28f
--- /dev/null
+++ b/help/C/tag-search.page
@@ -0,0 +1,40 @@
+<page xmlns="http://projectmallard.org/1.0/"
+ xmlns:e="http://projectmallard.org/experimental/"
+ type="topic"
+ id="tag-search">
+
+ <info>
+ <link type="guide" xref="index#searching"/>
+ <desc>Search photos using tags</desc>
+ </info>
+
+ <title>
+ Search by Tag
+ </title>
+
+ <p>There are several methods to search by tags.</p>
+ <p>Method One: Double-click the tags you wish to search for.</p>
+ <p>Method Two:</p>
+ <steps>
+ <item>
+ <p>Enable the Find bar by clicking <guiseq><gui>Find</gui>
+ <gui>Show Find bar</gui></guiseq>.</p>
+ </item>
+ <item>
+ <p>Drag the tags you wish to search for into the newly-enabled Find bar.
+ </p>
+ </item>
+ <p>To remove a tag from your search, right-click the tag in the Find bar and
+ click <gui>Remove From Search</gui>.</p>
+ </steps>
+ <p>To exclude a tag from your search:</p>
+ <steps>
+ <item>
+ <p>In the tag pane, double-click the tag you wish to exclude. This will
+ add it to the Find bar.</p>
+ </item>
+ <item>
+ <p>In the Find bar, double-click the tag you wish to exclude.</p>
+ </item>
+ </steps>
+</page>
diff --git a/help/C/tags.page b/help/C/tags.page
new file mode 100644
index 0000000..68d3fe9
--- /dev/null
+++ b/help/C/tags.page
@@ -0,0 +1,19 @@
+<page xmlns="http://projectmallard.org/1.0/"
+ type="guide"
+ id="tags">
+ <info>
+ <link type="guide" xref="index#basic-functions" group="tag"/>
+ <desc>A brief introduction to the tagging capabilities of F-Spot</desc>
+ </info>
+
+ <title>
+ Tags
+ </title>
+ <p>Like certain other photo managers, <app>F-Spot</app> lets you tag your photos,
+ allowing for quick, easy content-based searching of your photos. You can
+ tag people, events, places, favorite things, or even make your own groups
+ of tags.</p>
+ <section id="tag-functions" style="2column" groups="create attach remove delete">
+ <title>Working with Tags</title>
+ </section>
+</page>
diff --git a/help/C/upload-to-web.page b/help/C/upload-to-web.page
new file mode 100644
index 0000000..42efd9b
--- /dev/null
+++ b/help/C/upload-to-web.page
@@ -0,0 +1,16 @@
+<page xmlns="http://projectmallard.org/1.0/"
+ xmlns:e="http://projectmallard.org/experimental/"
+ type="guide"
+ id="upload-to-web">
+
+ <info>
+ <link type="guide" xref="index#sharing"/>
+ <desc>Upload photos to various web services</desc>
+ </info>
+
+ <title>
+ Upload to Web
+ </title>
+ <p><app>F-Spot</app> allows you to upload photos to popular web services,
+ including Google's PicasaWeb and Flickr.</p>
+</page>
diff --git a/help/C/versioning.page b/help/C/versioning.page
new file mode 100644
index 0000000..ff7a266
--- /dev/null
+++ b/help/C/versioning.page
@@ -0,0 +1,28 @@
+<page xmlns="http://projectmallard.org/1.0/"
+ xmlns:e="http://projectmallard.org/experimental/"
+ type="topic"
+ id="versions">
+
+ <info>
+ <link type="guide" xref="index#advanced"/>
+ <desc>Track different versions of your photos</desc>
+ </info>
+
+ <title>
+ Versioning
+ </title>
+ <p><app>F-Spot</app> allows you to keep multiple versions of your photos.
+ This is especially useful when editing photos, as you can quickly see the
+ difference between the edited version and the original.</p>
+ <p>To switch between versions while editing:</p>
+ <steps>
+ <item>
+ <p>Double-click the photo you wish to edit.</p>
+ </item>
+ <item>
+ <p>In the sidebar, you will see a drop-down box labeled
+ <gui>Version:</gui>. To select a version to view, select it in the
+ drop-down box.</p>
+ </item>
+ </steps>
+</page>
diff --git a/help/C/zooomr.page b/help/C/zooomr.page
new file mode 100644
index 0000000..21c3ca3
--- /dev/null
+++ b/help/C/zooomr.page
@@ -0,0 +1,19 @@
+<page xmlns="http://projectmallard.org/1.0/"
+ xmlns:e="http://projectmallard.org/experimental/"
+ type="topic"
+ id="zooomr">
+
+ <info>
+ <link type="guide" xref="upload-to-web"/>
+ <desc>Upload photos to Zooomr</desc>
+ </info>
+
+ <title>
+ Zooomr
+ </title>
+
+ <p>To upload photos to Zooomr you will need a Zooomr account, as well as
+ internet access. Also, the Zooomr
+ <link xref="extensions">extension</link> must be installed and enabled.
+ </p>
+</page>
diff --git a/help/Makefile.am b/help/Makefile.am
new file mode 100644
index 0000000..c0f070e
--- /dev/null
+++ b/help/Makefile.am
@@ -0,0 +1,52 @@
+if ENABLE_GNOME_DOCS
+include $(top_srcdir)/gnome-doc-utils.make
+
+DOC_ID = f-spot
+DOC_INCLUDES =
+
+DOC_PAGES = \
+ 23hq.page \
+ adjust-color.page \
+ cd.page \
+ colors.page \
+ date-search.page \
+ enhancements.page \
+ extensions.page \
+ facebook.page \
+ file-management.page \
+ flickr.page \
+ folder.page \
+ general-editing.page \
+ import-photos.page \
+ import-roll-search.page \
+ index.page \
+ introduction.page \
+ picasa.page \
+ rate-search.page \
+ ratings.page \
+ smugmug.page \
+ tag-attach.page \
+ tag-creation.page \
+ tag-delete.page \
+ tag-remove.page \
+ tag-search.page \
+ tags.page \
+ upload-to-web.page \
+ versioning.page \
+ zooomr.page
+
+DOC_FIGURES = \
+ figures/f-spot-adjust-colors.png \
+ figures/f-spot-autocolor.png \
+ figures/f-spot-crop.png \
+ figures/f-spot-desaturate.png \
+ figures/f-spot-fullscreen.png \
+ figures/f-spot-red-eye.png \
+ figures/f-spot-sepia.png \
+ figures/f-spot-slideshow.png \
+ figures/f-spot-soft-focus.png \
+ figures/f-spot-straighten.png
+
+DOC_LINGUAS =
+dist-hook: doc-dist-hook
+endif
diff --git a/help/Makefile.in b/help/Makefile.in
new file mode 100644
index 0000000..99909d8
--- /dev/null
+++ b/help/Makefile.in
@@ -0,0 +1,1079 @@
+# Makefile.in generated by automake 1.11.1 from Makefile.am.
+# @configure_input@
+
+# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
+# 2003, 2004, 2005, 2006, 2007, 2008, 2009 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.
+
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
+# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
+# PARTICULAR PURPOSE.
+
+ at SET_MAKE@
+
+# gnome-doc-utils.make - make magic for building documentation
+# Copyright (C) 2004-2005 Shaun McCance <shaunm at gnome.org>
+#
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 2 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software Foundation,
+# Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+#
+# As a special exception to the GNU General Public License, if you
+# distribute this file as part of a program that contains a
+# configuration script generated by Autoconf, you may include it under
+# the same distribution terms that you use for the rest of that program.
+
+################################################################################
+VPATH = @srcdir@
+pkgdatadir = $(datadir)/@PACKAGE@
+pkgincludedir = $(includedir)/@PACKAGE@
+pkglibdir = $(libdir)/@PACKAGE@
+pkglibexecdir = $(libexecdir)/@PACKAGE@
+am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
+install_sh_DATA = $(install_sh) -c -m 644
+install_sh_PROGRAM = $(install_sh) -c
+install_sh_SCRIPT = $(install_sh) -c
+INSTALL_HEADER = $(INSTALL_DATA)
+transform = $(program_transform_name)
+NORMAL_INSTALL = :
+PRE_INSTALL = :
+POST_INSTALL = :
+NORMAL_UNINSTALL = :
+PRE_UNINSTALL = :
+POST_UNINSTALL = :
+build_triplet = @build@
+host_triplet = @host@
+DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in \
+ $(top_srcdir)/gnome-doc-utils.make
+subdir = help
+ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
+am__aclocal_m4_deps = $(top_srcdir)/build/m4/shave/shave.m4 \
+ $(top_srcdir)/build/m4/shamrock/expansions.m4 \
+ $(top_srcdir)/build/m4/shamrock/gnome-doc.m4 \
+ $(top_srcdir)/build/m4/shamrock/mono.m4 \
+ $(top_srcdir)/build/m4/shamrock/nunit.m4 \
+ $(top_srcdir)/build/m4/shamrock/programs.m4 \
+ $(top_srcdir)/build/m4/f-spot/flickrnet.m4 \
+ $(top_srcdir)/build/m4/f-spot/gnome-keyring-sharp.m4 \
+ $(top_srcdir)/build/m4/f-spot/gtk-sharp.m4 \
+ $(top_srcdir)/build/m4/f-spot/mono-addins.m4 \
+ $(top_srcdir)/acinclude.m4 $(top_srcdir)/configure.ac
+am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
+ $(ACLOCAL_M4)
+mkinstalldirs = $(install_sh) -d
+CONFIG_HEADER = $(top_builddir)/config.h
+CONFIG_CLEAN_FILES =
+CONFIG_CLEAN_VPATH_FILES =
+SOURCES =
+DIST_SOURCES =
+DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
+ACLOCAL = @ACLOCAL@
+ACLOCAL_AMFLAGS = @ACLOCAL_AMFLAGS@
+ALL_LINGUAS = @ALL_LINGUAS@
+AMTAR = @AMTAR@
+AM_MAKEFLAGS = @AM_MAKEFLAGS@
+API_VERSION = @API_VERSION@
+AR = @AR@
+ASM_VERSION = @ASM_VERSION@
+AUTOCONF = @AUTOCONF@
+AUTOHEADER = @AUTOHEADER@
+AUTOMAKE = @AUTOMAKE@
+AWK = @AWK@
+CATALOGS = @CATALOGS@
+CATOBJEXT = @CATOBJEXT@
+CC = @CC@
+CCDEPMODE = @CCDEPMODE@
+CFLAGS = @CFLAGS@
+CPP = @CPP@
+CPPFLAGS = @CPPFLAGS@
+CSC_DEFINES = @CSC_DEFINES@
+CXX = @CXX@
+CXXCPP = @CXXCPP@
+CXXDEPMODE = @CXXDEPMODE@
+CXXFLAGS = @CXXFLAGS@
+CYGPATH_W = @CYGPATH_W@
+DATADIRNAME = @DATADIRNAME@
+DEFS = @DEFS@
+DEPDIR = @DEPDIR@
+DISPLAY_VERSION = @DISPLAY_VERSION@
+DISTCHECK_CONFIGURE_FLAGS = @DISTCHECK_CONFIGURE_FLAGS@
+DOC_USER_FORMATS = @DOC_USER_FORMATS@
+DSYMUTIL = @DSYMUTIL@
+DUMPBIN = @DUMPBIN@
+ECHO_C = @ECHO_C@
+ECHO_N = @ECHO_N@
+ECHO_T = @ECHO_T@
+EGREP = @EGREP@
+EXEEXT = @EXEEXT@
+EXIF_CFLAGS = @EXIF_CFLAGS@
+EXIF_LIBS = @EXIF_LIBS@
+EXIF_SOVERSION = @EXIF_SOVERSION@
+F77 = @F77@
+FC = @FC@
+FGREP = @FGREP@
+FLICKRNET_CFLAGS = @FLICKRNET_CFLAGS@
+FLICKRNET_LIBS = @FLICKRNET_LIBS@
+F_CFLAGS = @F_CFLAGS@
+F_LIBS = @F_LIBS@
+GAPI2CODEGEN = @GAPI2CODEGEN@
+GAPI2FIXUP = @GAPI2FIXUP@
+GAPI2PARSER = @GAPI2PARSER@
+GCONFTOOL = @GCONFTOOL@
+GCONF_SCHEMA_CONFIG_SOURCE = @GCONF_SCHEMA_CONFIG_SOURCE@
+GCONF_SCHEMA_FILE_DIR = @GCONF_SCHEMA_FILE_DIR@
+GCONF_SHARP_CFLAGS = @GCONF_SHARP_CFLAGS@
+GCONF_SHARP_LIBS = @GCONF_SHARP_LIBS@
+GETTEXT_PACKAGE = @GETTEXT_PACKAGE@
+GIO_CFLAGS = @GIO_CFLAGS@
+GIO_LIBS = @GIO_LIBS@
+GLIBSHARP_2_12_7_CFLAGS = @GLIBSHARP_2_12_7_CFLAGS@
+GLIBSHARP_2_12_7_LIBS = @GLIBSHARP_2_12_7_LIBS@
+GLIBSHARP_CFLAGS = @GLIBSHARP_CFLAGS@
+GLIBSHARP_LIBS = @GLIBSHARP_LIBS@
+GLIB_CFLAGS = @GLIB_CFLAGS@
+GLIB_GENMARSHAL = @GLIB_GENMARSHAL@
+GLIB_LIBS = @GLIB_LIBS@
+GLIB_MKENUMS = @GLIB_MKENUMS@
+GMOFILES = @GMOFILES@
+GMSGFMT = @GMSGFMT@
+GNOME_ICON_THEME_PREFIX = @GNOME_ICON_THEME_PREFIX@
+GNOME_SCREENSAVER_SAVERDIR = @GNOME_SCREENSAVER_SAVERDIR@
+GNOME_SCREENSAVER_THEMESDIR = @GNOME_SCREENSAVER_THEMESDIR@
+GNOME_SHARP_CFLAGS = @GNOME_SHARP_CFLAGS@
+GNOME_SHARP_LIBS = @GNOME_SHARP_LIBS@
+GOBJECT_QUERY = @GOBJECT_QUERY@
+GREP = @GREP@
+GTKSHARP_A11Y_CFLAGS = @GTKSHARP_A11Y_CFLAGS@
+GTKSHARP_A11Y_LIBS = @GTKSHARP_A11Y_LIBS@
+GTKSHARP_CFLAGS = @GTKSHARP_CFLAGS@
+GTKSHARP_LIBS = @GTKSHARP_LIBS@
+HELP_DIR = @HELP_DIR@
+ICONS_DIRECTORY = @ICONS_DIRECTORY@
+INSTALL = @INSTALL@
+INSTALL_DATA = @INSTALL_DATA@
+INSTALL_PROGRAM = @INSTALL_PROGRAM@
+INSTALL_SCRIPT = @INSTALL_SCRIPT@
+INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
+INSTOBJEXT = @INSTOBJEXT@
+INTLLIBS = @INTLLIBS@
+INTLTOOL_EXTRACT = @INTLTOOL_EXTRACT@
+INTLTOOL_MERGE = @INTLTOOL_MERGE@
+INTLTOOL_PERL = @INTLTOOL_PERL@
+INTLTOOL_UPDATE = @INTLTOOL_UPDATE@
+KEYRINGSHARP_CFLAGS = @KEYRINGSHARP_CFLAGS@
+KEYRINGSHARP_LIBS = @KEYRINGSHARP_LIBS@
+LCMS_CFLAGS = @LCMS_CFLAGS@
+LCMS_LIBS = @LCMS_LIBS@
+LD = @LD@
+LDFLAGS = @LDFLAGS@
+LIBEXIF_VERSION_CHECK_CFLAGS = @LIBEXIF_VERSION_CHECK_CFLAGS@
+LIBEXIF_VERSION_CHECK_LIBS = @LIBEXIF_VERSION_CHECK_LIBS@
+LIBJPEG = @LIBJPEG@
+LIBOBJS = @LIBOBJS@
+LIBS = @LIBS@
+LIBTOOL = @LIBTOOL@
+LIPO = @LIPO@
+LN_S = @LN_S@
+LTLIBOBJS = @LTLIBOBJS@
+MAINT = @MAINT@
+MAKEFLAGS = @MAKEFLAGS@
+MAKEINFO = @MAKEINFO@
+MCS = @MCS@
+MKDIR_P = @MKDIR_P@
+MKINSTALLDIRS = @MKINSTALLDIRS@
+MONO = @MONO@
+MONO_ADDINS_CFLAGS = @MONO_ADDINS_CFLAGS@
+MONO_ADDINS_GUI_CFLAGS = @MONO_ADDINS_GUI_CFLAGS@
+MONO_ADDINS_GUI_LIBS = @MONO_ADDINS_GUI_LIBS@
+MONO_ADDINS_LIBS = @MONO_ADDINS_LIBS@
+MONO_ADDINS_SETUP_CFLAGS = @MONO_ADDINS_SETUP_CFLAGS@
+MONO_ADDINS_SETUP_LIBS = @MONO_ADDINS_SETUP_LIBS@
+MONO_MODULE_CFLAGS = @MONO_MODULE_CFLAGS@
+MONO_MODULE_LIBS = @MONO_MODULE_LIBS@
+MSGFMT = @MSGFMT@
+MSGFMT_OPTS = @MSGFMT_OPTS@
+MSGMERGE = @MSGMERGE@
+NDESK_DBUS_CFLAGS = @NDESK_DBUS_CFLAGS@
+NDESK_DBUS_LIBS = @NDESK_DBUS_LIBS@
+NM = @NM@
+NMEDIT = @NMEDIT@
+NUNIT_CFLAGS = @NUNIT_CFLAGS@
+NUNIT_LIBS = @NUNIT_LIBS@
+OBJC = @OBJC@
+OBJDUMP = @OBJDUMP@
+OBJEXT = @OBJEXT@
+OMF_DIR = @OMF_DIR@
+OTOOL = @OTOOL@
+OTOOL64 = @OTOOL64@
+PACKAGE = @PACKAGE@
+PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
+PACKAGE_NAME = @PACKAGE_NAME@
+PACKAGE_STRING = @PACKAGE_STRING@
+PACKAGE_TARNAME = @PACKAGE_TARNAME@
+PACKAGE_URL = @PACKAGE_URL@
+PACKAGE_VERSION = @PACKAGE_VERSION@
+PATH_SEPARATOR = @PATH_SEPARATOR@
+PKG_CONFIG = @PKG_CONFIG@
+POFILES = @POFILES@
+POSUB = @POSUB@
+PO_IN_DATADIR_FALSE = @PO_IN_DATADIR_FALSE@
+PO_IN_DATADIR_TRUE = @PO_IN_DATADIR_TRUE@
+Q = @Q@
+RANLIB = @RANLIB@
+SED = @SED@
+SET_MAKE = @SET_MAKE@
+SHELL = @SHELL@
+STRIP = @STRIP@
+TURTLEDIR = @TURTLEDIR@
+UNIQUE_CFLAGS = @UNIQUE_CFLAGS@
+UNIQUE_LIBS = @UNIQUE_LIBS@
+USE_NLS = @USE_NLS@
+V = @V@
+VERSION = @VERSION@
+WARN_CFLAGS = @WARN_CFLAGS@
+XGETTEXT = @XGETTEXT@
+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_DUMPBIN = @ac_ct_DUMPBIN@
+am__include = @am__include@
+am__leading_dot = @am__leading_dot@
+am__quote = @am__quote@
+am__tar = @am__tar@
+am__untar = @am__untar@
+bindir = @bindir@
+build = @build@
+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@
+expanded_bindir = @expanded_bindir@
+expanded_datadir = @expanded_datadir@
+expanded_libdir = @expanded_libdir@
+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@
+lt_ECHO = @lt_ECHO@
+mandir = @mandir@
+mkdir_p = @mkdir_p@
+oldincludedir = @oldincludedir@
+pdfdir = @pdfdir@
+prefix = @prefix@
+program_transform_name = @program_transform_name@
+psdir = @psdir@
+sbindir = @sbindir@
+sharedstatedir = @sharedstatedir@
+shavedir = @shavedir@
+srcdir = @srcdir@
+sysconfdir = @sysconfdir@
+target_alias = @target_alias@
+top_build_prefix = @top_build_prefix@
+top_builddir = @top_builddir@
+top_srcdir = @top_srcdir@
+ at ENABLE_GNOME_DOCS_TRUE@_clean_doc_header = $(if $(DOC_H_FILE),clean-doc-header)
+ at ENABLE_GNOME_DOCS_TRUE@_DOC_REAL_FORMATS = $(if $(DOC_USER_FORMATS),$(DOC_USER_FORMATS),$(DOC_FORMATS))
+ at ENABLE_GNOME_DOCS_TRUE@_DOC_REAL_LINGUAS = $(if $(filter environment,$(origin LINGUAS)), \
+ at ENABLE_GNOME_DOCS_TRUE@ $(filter $(LINGUAS),$(DOC_LINGUAS)), \
+ at ENABLE_GNOME_DOCS_TRUE@ $(DOC_LINGUAS))
+
+ at ENABLE_GNOME_DOCS_TRUE@_DOC_ABS_SRCDIR = @abs_srcdir@
+ at ENABLE_GNOME_DOCS_TRUE@_xml2po_mode = $(if $(DOC_ID),mallard,docbook)
+ at ENABLE_GNOME_DOCS_TRUE@@ENABLE_SK_TRUE at _ENABLE_SK = true
+
+################################################################################
+ at ENABLE_GNOME_DOCS_TRUE@db2omf_args = \
+ at ENABLE_GNOME_DOCS_TRUE@ --stringparam db2omf.basename $(DOC_MODULE) \
+ at ENABLE_GNOME_DOCS_TRUE@ --stringparam db2omf.format $(3) \
+ at ENABLE_GNOME_DOCS_TRUE@ --stringparam db2omf.dtd \
+ at ENABLE_GNOME_DOCS_TRUE@ $(shell xmllint --format $(2) | grep -h PUBLIC | head -n 1 \
+ at ENABLE_GNOME_DOCS_TRUE@ | sed -e 's/.*PUBLIC \(\"[^\"]*\"\).*/\1/') \
+ at ENABLE_GNOME_DOCS_TRUE@ --stringparam db2omf.lang $(notdir $(patsubst %/$(notdir $(2)),%,$(2))) \
+ at ENABLE_GNOME_DOCS_TRUE@ --stringparam db2omf.omf_dir "$(OMF_DIR)" \
+ at ENABLE_GNOME_DOCS_TRUE@ --stringparam db2omf.help_dir "$(HELP_DIR)" \
+ at ENABLE_GNOME_DOCS_TRUE@ --stringparam db2omf.omf_in "$(_DOC_OMF_IN)" \
+ at ENABLE_GNOME_DOCS_TRUE@ $(if $(_ENABLE_SK), \
+ at ENABLE_GNOME_DOCS_TRUE@ --stringparam db2omf.scrollkeeper_cl "$(_skcontentslist)") \
+ at ENABLE_GNOME_DOCS_TRUE@ $(_db2omf) $(2)
+
+ at ENABLE_GNOME_DOCS_TRUE@_DOC_OMF_IN = $(if $(DOC_MODULE),$(wildcard $(_DOC_ABS_SRCDIR)/$(DOC_MODULE).omf.in))
+ at ENABLE_GNOME_DOCS_TRUE@_DOC_OMF_DB = $(if $(_DOC_OMF_IN), \
+ at ENABLE_GNOME_DOCS_TRUE@ $(foreach lc,C $(_DOC_REAL_LINGUAS),$(DOC_MODULE)-$(lc).omf))
+
+ at ENABLE_GNOME_DOCS_TRUE@_DOC_OMF_HTML = $(if $(_DOC_OMF_IN), \
+ at ENABLE_GNOME_DOCS_TRUE@ $(foreach lc,C $(_DOC_REAL_LINGUAS),$(DOC_MODULE)-html-$(lc).omf))
+
+
+# FIXME
+ at ENABLE_GNOME_DOCS_TRUE@_DOC_OMF_ALL = \
+ at ENABLE_GNOME_DOCS_TRUE@ $(if $(filter docbook,$(_DOC_REAL_FORMATS)),$(_DOC_OMF_DB)) \
+ at ENABLE_GNOME_DOCS_TRUE@ $(if $(filter html HTML,$(_DOC_REAL_FORMATS)),$(_DOC_OMF_HTML))
+
+
+################################################################################
+ at ENABLE_GNOME_DOCS_TRUE@_DOC_C_MODULE = $(if $(DOC_MODULE),C/$(DOC_MODULE).xml)
+ at ENABLE_GNOME_DOCS_TRUE@_DOC_C_PAGES = $(foreach page,$(DOC_PAGES),C/$(page))
+ at ENABLE_GNOME_DOCS_TRUE@_DOC_C_ENTITIES = $(foreach ent,$(DOC_ENTITIES),C/$(ent))
+ at ENABLE_GNOME_DOCS_TRUE@_DOC_C_INCLUDES = $(foreach inc,$(DOC_INCLUDES),C/$(inc))
+ at ENABLE_GNOME_DOCS_TRUE@_DOC_C_DOCS = \
+ at ENABLE_GNOME_DOCS_TRUE@ $(_DOC_C_ENTITIES) $(_DOC_C_INCLUDES) \
+ at ENABLE_GNOME_DOCS_TRUE@ $(_DOC_C_PAGES) $(_DOC_C_MODULE)
+
+ at ENABLE_GNOME_DOCS_TRUE@_DOC_C_DOCS_NOENT = \
+ at ENABLE_GNOME_DOCS_TRUE@ $(_DOC_C_MODULE) $(_DOC_C_INCLUDES) \
+ at ENABLE_GNOME_DOCS_TRUE@ $(_DOC_C_PAGES)
+
+ at ENABLE_GNOME_DOCS_TRUE@_DOC_C_FIGURES = $(if $(DOC_FIGURES), \
+ at ENABLE_GNOME_DOCS_TRUE@ $(foreach fig,$(DOC_FIGURES),C/$(fig)), \
+ at ENABLE_GNOME_DOCS_TRUE@ $(patsubst $(srcdir)/%,%,$(wildcard $(srcdir)/C/figures/*.png)))
+
+
+# FIXME: probably have to shell escape to determine the file names
+ at ENABLE_GNOME_DOCS_TRUE@_DOC_C_HTML = $(foreach f, \
+ at ENABLE_GNOME_DOCS_TRUE@ $(shell xsltproc --xinclude \
+ at ENABLE_GNOME_DOCS_TRUE@ --stringparam db.chunk.basename "$(DOC_MODULE)" \
+ at ENABLE_GNOME_DOCS_TRUE@ $(_chunks) "C/$(DOC_MODULE).xml"), \
+ at ENABLE_GNOME_DOCS_TRUE@ C/$(f).xhtml)
+
+
+###############################################################################
+ at ENABLE_GNOME_DOCS_TRUE@_DOC_POFILES = $(if $(DOC_MODULE)$(DOC_ID), \
+ at ENABLE_GNOME_DOCS_TRUE@ $(foreach lc,$(_DOC_REAL_LINGUAS),$(lc)/$(lc).po))
+
+ at ENABLE_GNOME_DOCS_TRUE@_DOC_MOFILES = $(patsubst %.po,%.mo,$(_DOC_POFILES))
+ at ENABLE_GNOME_DOCS_TRUE@_DOC_LC_MODULES = $(if $(DOC_MODULE), \
+ at ENABLE_GNOME_DOCS_TRUE@ $(foreach lc,$(_DOC_REAL_LINGUAS),$(lc)/$(DOC_MODULE).xml))
+
+ at ENABLE_GNOME_DOCS_TRUE@_DOC_LC_PAGES = \
+ at ENABLE_GNOME_DOCS_TRUE@ $(foreach lc,$(_DOC_REAL_LINGUAS),$(foreach page,$(_DOC_C_PAGES), \
+ at ENABLE_GNOME_DOCS_TRUE@ $(lc)/$(notdir $(page)) ))
+
+ at ENABLE_GNOME_DOCS_TRUE@_DOC_LC_INCLUDES = \
+ at ENABLE_GNOME_DOCS_TRUE@ $(foreach lc,$(_DOC_REAL_LINGUAS),$(foreach inc,$(_DOC_C_INCLUDES), \
+ at ENABLE_GNOME_DOCS_TRUE@ $(lc)/$(notdir $(inc)) ))
+
+
+# FIXME: probably have to shell escape to determine the file names
+ at ENABLE_GNOME_DOCS_TRUE@_DOC_LC_HTML = \
+ at ENABLE_GNOME_DOCS_TRUE@ $(foreach lc,$(_DOC_REAL_LINGUAS),$(foreach doc,$(_DOC_C_HTML), \
+ at ENABLE_GNOME_DOCS_TRUE@ $(lc)/$(notdir $(doc)) ))
+
+ at ENABLE_GNOME_DOCS_TRUE@_DOC_LC_DOCS = \
+ at ENABLE_GNOME_DOCS_TRUE@ $(_DOC_LC_MODULES) $(_DOC_LC_INCLUDES) $(_DOC_LC_PAGES) \
+ at ENABLE_GNOME_DOCS_TRUE@ $(if $(filter html HTML,$(_DOC_REAL_FORMATS)),$(_DOC_LC_HTML))
+
+ at ENABLE_GNOME_DOCS_TRUE@_DOC_LC_FIGURES = $(foreach lc,$(_DOC_REAL_LINGUAS), \
+ at ENABLE_GNOME_DOCS_TRUE@ $(patsubst C/%,$(lc)/%,$(_DOC_C_FIGURES)) )
+
+ at ENABLE_GNOME_DOCS_TRUE@_DOC_SRC_FIGURES = \
+ at ENABLE_GNOME_DOCS_TRUE@ $(foreach fig,$(_DOC_C_FIGURES), $(foreach lc,C $(_DOC_REAL_LINGUAS), \
+ at ENABLE_GNOME_DOCS_TRUE@ $(wildcard $(srcdir)/$(lc)/$(patsubst C/%,%,$(fig))) ))
+
+ at ENABLE_GNOME_DOCS_TRUE@_DOC_POT = $(if $(DOC_MODULE),$(DOC_MODULE).pot)
+
+################################################################################
+ at ENABLE_GNOME_DOCS_TRUE@_DOC_HTML_ALL = $(if $(filter html HTML,$(_DOC_REAL_FORMATS)), \
+ at ENABLE_GNOME_DOCS_TRUE@ $(_DOC_C_HTML) $(_DOC_LC_HTML))
+
+ at ENABLE_GNOME_DOCS_TRUE@_DOC_HTML_TOPS = $(foreach lc,C $(_DOC_REAL_LINGUAS),$(lc)/$(DOC_MODULE).xhtml)
+ at ENABLE_GNOME_DOCS_TRUE@_clean_omf = $(if $(_DOC_OMF_IN),clean-doc-omf)
+ at ENABLE_GNOME_DOCS_TRUE@_clean_dsk = $(if $(_DOC_DSK_IN),clean-doc-dsk)
+ at ENABLE_GNOME_DOCS_TRUE@_clean_lc = $(if $(_DOC_REAL_LINGUAS),clean-doc-lc)
+ at ENABLE_GNOME_DOCS_TRUE@_clean_dir = $(if $(DOC_MODULE)$(DOC_ID),clean-doc-dir)
+ at ENABLE_GNOME_DOCS_TRUE@_doc_install_dir = $(if $(DOC_ID),$(DOC_ID),$(DOC_MODULE))
+ at ENABLE_GNOME_DOCS_TRUE@DOC_ID = f-spot
+ at ENABLE_GNOME_DOCS_TRUE@DOC_INCLUDES =
+ at ENABLE_GNOME_DOCS_TRUE@DOC_PAGES = \
+ at ENABLE_GNOME_DOCS_TRUE@ 23hq.page \
+ at ENABLE_GNOME_DOCS_TRUE@ adjust-color.page \
+ at ENABLE_GNOME_DOCS_TRUE@ cd.page \
+ at ENABLE_GNOME_DOCS_TRUE@ colors.page \
+ at ENABLE_GNOME_DOCS_TRUE@ date-search.page \
+ at ENABLE_GNOME_DOCS_TRUE@ enhancements.page \
+ at ENABLE_GNOME_DOCS_TRUE@ extensions.page \
+ at ENABLE_GNOME_DOCS_TRUE@ facebook.page \
+ at ENABLE_GNOME_DOCS_TRUE@ file-management.page \
+ at ENABLE_GNOME_DOCS_TRUE@ flickr.page \
+ at ENABLE_GNOME_DOCS_TRUE@ folder.page \
+ at ENABLE_GNOME_DOCS_TRUE@ general-editing.page \
+ at ENABLE_GNOME_DOCS_TRUE@ import-photos.page \
+ at ENABLE_GNOME_DOCS_TRUE@ import-roll-search.page \
+ at ENABLE_GNOME_DOCS_TRUE@ index.page \
+ at ENABLE_GNOME_DOCS_TRUE@ introduction.page \
+ at ENABLE_GNOME_DOCS_TRUE@ picasa.page \
+ at ENABLE_GNOME_DOCS_TRUE@ rate-search.page \
+ at ENABLE_GNOME_DOCS_TRUE@ ratings.page \
+ at ENABLE_GNOME_DOCS_TRUE@ smugmug.page \
+ at ENABLE_GNOME_DOCS_TRUE@ tag-attach.page \
+ at ENABLE_GNOME_DOCS_TRUE@ tag-creation.page \
+ at ENABLE_GNOME_DOCS_TRUE@ tag-delete.page \
+ at ENABLE_GNOME_DOCS_TRUE@ tag-remove.page \
+ at ENABLE_GNOME_DOCS_TRUE@ tag-search.page \
+ at ENABLE_GNOME_DOCS_TRUE@ tags.page \
+ at ENABLE_GNOME_DOCS_TRUE@ upload-to-web.page \
+ at ENABLE_GNOME_DOCS_TRUE@ versioning.page \
+ at ENABLE_GNOME_DOCS_TRUE@ zooomr.page
+
+ at ENABLE_GNOME_DOCS_TRUE@DOC_FIGURES = \
+ at ENABLE_GNOME_DOCS_TRUE@ figures/f-spot-adjust-colors.png \
+ at ENABLE_GNOME_DOCS_TRUE@ figures/f-spot-autocolor.png \
+ at ENABLE_GNOME_DOCS_TRUE@ figures/f-spot-crop.png \
+ at ENABLE_GNOME_DOCS_TRUE@ figures/f-spot-desaturate.png \
+ at ENABLE_GNOME_DOCS_TRUE@ figures/f-spot-fullscreen.png \
+ at ENABLE_GNOME_DOCS_TRUE@ figures/f-spot-red-eye.png \
+ at ENABLE_GNOME_DOCS_TRUE@ figures/f-spot-sepia.png \
+ at ENABLE_GNOME_DOCS_TRUE@ figures/f-spot-slideshow.png \
+ at ENABLE_GNOME_DOCS_TRUE@ figures/f-spot-soft-focus.png \
+ at ENABLE_GNOME_DOCS_TRUE@ figures/f-spot-straighten.png
+
+ at ENABLE_GNOME_DOCS_TRUE@DOC_LINGUAS =
+all: all-am
+
+.SUFFIXES:
+$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(top_srcdir)/gnome-doc-utils.make $(am__configure_deps)
+ @for dep in $?; do \
+ case '$(am__configure_deps)' in \
+ *$$dep*) \
+ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \
+ && { if test -f $@; then exit 0; else break; fi; }; \
+ exit 1;; \
+ esac; \
+ done; \
+ echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign help/Makefile'; \
+ $(am__cd) $(top_srcdir) && \
+ $(AUTOMAKE) --foreign help/Makefile
+.PRECIOUS: Makefile
+Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
+ @case '$?' in \
+ *config.status*) \
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \
+ *) \
+ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \
+ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \
+ esac;
+
+$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+
+$(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps)
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps)
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(am__aclocal_m4_deps):
+
+mostlyclean-libtool:
+ -rm -f *.lo
+
+clean-libtool:
+ -rm -rf .libs _libs
+tags: TAGS
+TAGS:
+
+ctags: CTAGS
+CTAGS:
+
+ at ENABLE_GNOME_DOCS_FALSE@dist-hook:
+
+distdir: $(DISTFILES)
+ @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; \
+ if test -d $$d/$$file; then \
+ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \
+ if test -d "$(distdir)/$$file"; then \
+ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
+ fi; \
+ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
+ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \
+ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
+ fi; \
+ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \
+ else \
+ test -f "$(distdir)/$$file" \
+ || cp -p $$d/$$file "$(distdir)/$$file" \
+ || exit 1; \
+ fi; \
+ done
+ $(MAKE) $(AM_MAKEFLAGS) \
+ top_distdir="$(top_distdir)" distdir="$(distdir)" \
+ dist-hook
+check-am: all-am
+check: check-am
+all-am: Makefile
+installdirs:
+install: install-am
+install-exec: install-exec-am
+install-data: install-data-am
+uninstall: uninstall-am
+
+install-am: all-am
+ @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
+
+installcheck: installcheck-am
+install-strip:
+ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+ `test -z '$(STRIP)' || \
+ echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install
+mostlyclean-generic:
+
+clean-generic:
+
+distclean-generic:
+ -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
+ -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES)
+
+maintainer-clean-generic:
+ @echo "This command is intended for maintainers to use"
+ @echo "it deletes files that may require special tools to rebuild."
+ at ENABLE_GNOME_DOCS_FALSE@uninstall-local:
+ at ENABLE_GNOME_DOCS_FALSE@distclean-local:
+ at ENABLE_GNOME_DOCS_FALSE@install-data-local:
+ at ENABLE_GNOME_DOCS_FALSE@maintainer-clean-local:
+ at ENABLE_GNOME_DOCS_FALSE@mostlyclean-local:
+ at ENABLE_GNOME_DOCS_FALSE@clean-local:
+clean: clean-am
+
+clean-am: clean-generic clean-libtool clean-local mostlyclean-am
+
+distclean: distclean-am
+ -rm -f Makefile
+distclean-am: clean-am distclean-generic distclean-local
+
+dvi: dvi-am
+
+dvi-am:
+
+html: html-am
+
+html-am:
+
+info: info-am
+
+info-am:
+
+install-data-am: install-data-local
+
+install-dvi: install-dvi-am
+
+install-dvi-am:
+
+install-exec-am:
+
+install-html: install-html-am
+
+install-html-am:
+
+install-info: install-info-am
+
+install-info-am:
+
+install-man:
+
+install-pdf: install-pdf-am
+
+install-pdf-am:
+
+install-ps: install-ps-am
+
+install-ps-am:
+
+installcheck-am:
+
+maintainer-clean: maintainer-clean-am
+ -rm -f Makefile
+maintainer-clean-am: distclean-am maintainer-clean-generic \
+ maintainer-clean-local
+
+mostlyclean: mostlyclean-am
+
+mostlyclean-am: mostlyclean-generic mostlyclean-libtool \
+ mostlyclean-local
+
+pdf: pdf-am
+
+pdf-am:
+
+ps: ps-am
+
+ps-am:
+
+uninstall-am: uninstall-local
+
+.MAKE: install-am install-strip
+
+.PHONY: all all-am check check-am clean clean-generic clean-libtool \
+ clean-local dist-hook distclean distclean-generic \
+ distclean-libtool distclean-local distdir dvi dvi-am html \
+ html-am info info-am install install-am install-data \
+ install-data-am install-data-local 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 maintainer-clean-local mostlyclean \
+ mostlyclean-generic mostlyclean-libtool mostlyclean-local pdf \
+ pdf-am ps ps-am uninstall uninstall-am uninstall-local
+
+
+ at ENABLE_GNOME_DOCS_TRUE@DOC_H_FILE ?=
+
+ at ENABLE_GNOME_DOCS_TRUE@DOC_H_DOCS ?=
+
+ at ENABLE_GNOME_DOCS_TRUE@$(DOC_H_FILE): $(DOC_H_DOCS);
+ at ENABLE_GNOME_DOCS_TRUE@ @rm -f $@.tmp; touch $@.tmp;
+ at ENABLE_GNOME_DOCS_TRUE@ echo 'const gchar* documentation_credits[] = {' >> $@.tmp
+ at ENABLE_GNOME_DOCS_TRUE@ list='$(DOC_H_DOCS)'; for doc in $$list; do \
+ at ENABLE_GNOME_DOCS_TRUE@ xmlpath="`echo $$doc | sed -e 's/^\(.*\/\).*/\1/' -e '/\//!s/.*//'`:$(srcdir)/`echo $$doc | sed -e 's/^\(.*\/\).*/\1/' -e '/\//!s/.*//'`"; \
+ at ENABLE_GNOME_DOCS_TRUE@ if ! test -f "$$doc"; then doc="$(srcdir)/$$doc"; fi; \
+ at ENABLE_GNOME_DOCS_TRUE@ xsltproc --path "$$xmlpath" $(_credits) $$doc; \
+ at ENABLE_GNOME_DOCS_TRUE@ done | sort | uniq \
+ at ENABLE_GNOME_DOCS_TRUE@ | awk 'BEGIN{s=""}{n=split($$0,w,"<");if(s!=""&&s!=substr(w[1],1,length(w[1])-1)){print s};if(n>1){print $$0;s=""}else{s=$$0}};END{if(s!=""){print s}}' \
+ at ENABLE_GNOME_DOCS_TRUE@ | sed -e 's/\\/\\\\/' -e 's/"/\\"/' -e 's/\(.*\)/\t"\1",/' >> $@.tmp
+ at ENABLE_GNOME_DOCS_TRUE@ echo ' NULL' >> $@.tmp
+ at ENABLE_GNOME_DOCS_TRUE@ echo '};' >> $@.tmp
+ at ENABLE_GNOME_DOCS_TRUE@ echo >> $@.tmp
+ at ENABLE_GNOME_DOCS_TRUE@ list='$(DOC_H_DOCS)'; for doc in $$list; do \
+ at ENABLE_GNOME_DOCS_TRUE@ xmlpath="`echo $$doc | sed -e 's/^\(.*\/\).*/\1/' -e '/\//!s/.*//'`:$(srcdir)/`echo $$doc | sed -e 's/^\(.*\/\).*/\1/' -e '/\//!s/.*//'`"; \
+ at ENABLE_GNOME_DOCS_TRUE@ if ! test -f "$$doc"; then doc="$(srcdir)/$$doc"; fi; \
+ at ENABLE_GNOME_DOCS_TRUE@ docid=`echo "$$doc" | sed -e 's/.*\/\([^/]*\)\.xml/\1/' \
+ at ENABLE_GNOME_DOCS_TRUE@ | sed -e 's/[^a-zA-Z_]/_/g' | tr 'a-z' 'A-Z'`; \
+ at ENABLE_GNOME_DOCS_TRUE@ echo $$xmlpath; \
+ at ENABLE_GNOME_DOCS_TRUE@ ids=`xsltproc --xinclude --path "$$xmlpath" $(_ids) $$doc`; \
+ at ENABLE_GNOME_DOCS_TRUE@ for id in $$ids; do \
+ at ENABLE_GNOME_DOCS_TRUE@ echo '#define HELP_'`echo $$docid`'_'`echo $$id \
+ at ENABLE_GNOME_DOCS_TRUE@ | sed -e 's/[^a-zA-Z_]/_/g' | tr 'a-z' 'A-Z'`' "'$$id'"' >> $@.tmp; \
+ at ENABLE_GNOME_DOCS_TRUE@ done; \
+ at ENABLE_GNOME_DOCS_TRUE@ echo >> $@.tmp; \
+ at ENABLE_GNOME_DOCS_TRUE@ done;
+ at ENABLE_GNOME_DOCS_TRUE@ cp $@.tmp $@ && rm -f $@.tmp
+
+ at ENABLE_GNOME_DOCS_TRUE@dist-check-gdu:
+ at ENABLE_GNOME_DOCS_TRUE@@HAVE_GNOME_DOC_UTILS_FALSE@ @echo "*** GNOME Doc Utils must be installed in order to make dist"
+ at ENABLE_GNOME_DOCS_TRUE@@HAVE_GNOME_DOC_UTILS_FALSE@ @false
+
+ at ENABLE_GNOME_DOCS_TRUE@.PHONY: dist-doc-header
+ at ENABLE_GNOME_DOCS_TRUE@dist-doc-header: $(DOC_H_FILE)
+ at ENABLE_GNOME_DOCS_TRUE@ @if test -f "$(DOC_H_FILE)"; then d=; else d="$(srcdir)/"; fi; \
+ at ENABLE_GNOME_DOCS_TRUE@ echo "$(INSTALL_DATA) $${d}$(DOC_H_FILE) $(distdir)/$(DOC_H_FILE)"; \
+ at ENABLE_GNOME_DOCS_TRUE@ $(INSTALL_DATA) "$${d}$(DOC_H_FILE)" "$(distdir)/$(DOC_H_FILE)";
+
+ at ENABLE_GNOME_DOCS_TRUE@doc-dist-hook: dist-check-gdu $(if $(DOC_H_FILE),dist-doc-header)
+
+ at ENABLE_GNOME_DOCS_TRUE@.PHONY: clean-doc-header
+ at ENABLE_GNOME_DOCS_TRUE@clean-local: $(_clean_doc_header)
+ at ENABLE_GNOME_DOCS_TRUE@distclean-local: $(_clean_doc_header)
+ at ENABLE_GNOME_DOCS_TRUE@mostlyclean-local: $(_clean_doc_header)
+ at ENABLE_GNOME_DOCS_TRUE@maintainer-clean-local: $(_clean_doc_header)
+ at ENABLE_GNOME_DOCS_TRUE@clean-doc-header:
+ at ENABLE_GNOME_DOCS_TRUE@ rm -f $(DOC_H_FILE)
+
+ at ENABLE_GNOME_DOCS_TRUE@all: $(DOC_H_FILE)
+
+################################################################################
+
+ at ENABLE_GNOME_DOCS_TRUE@DOC_MODULE ?=
+
+ at ENABLE_GNOME_DOCS_TRUE@DOC_ID ?=
+
+ at ENABLE_GNOME_DOCS_TRUE@DOC_PAGES ?=
+
+ at ENABLE_GNOME_DOCS_TRUE@DOC_ENTITIES ?=
+
+ at ENABLE_GNOME_DOCS_TRUE@DOC_INCLUDES ?=
+
+ at ENABLE_GNOME_DOCS_TRUE@DOC_FIGURES ?=
+
+ at ENABLE_GNOME_DOCS_TRUE@DOC_FORMATS ?= docbook
+
+ at ENABLE_GNOME_DOCS_TRUE@DOC_LINGUAS ?=
+
+################################################################################
+
+ at ENABLE_GNOME_DOCS_TRUE@_xml2po ?= `which xml2po`
+
+ at ENABLE_GNOME_DOCS_TRUE@_db2html ?= `$(PKG_CONFIG) --variable db2html gnome-doc-utils`
+ at ENABLE_GNOME_DOCS_TRUE@_db2omf ?= `$(PKG_CONFIG) --variable db2omf gnome-doc-utils`
+ at ENABLE_GNOME_DOCS_TRUE@_malrng ?= `$(PKG_CONFIG) --variable malrng gnome-doc-utils`
+ at ENABLE_GNOME_DOCS_TRUE@_chunks ?= `$(PKG_CONFIG) --variable xmldir gnome-doc-utils`/gnome/xslt/docbook/utils/chunks.xsl
+ at ENABLE_GNOME_DOCS_TRUE@_credits ?= `$(PKG_CONFIG) --variable xmldir gnome-doc-utils`/gnome/xslt/docbook/utils/credits.xsl
+ at ENABLE_GNOME_DOCS_TRUE@_ids ?= `$(PKG_CONFIG) --variable xmldir gnome-doc-utils`/gnome/xslt/docbook/utils/ids.xsl
+ at ENABLE_GNOME_DOCS_TRUE@@ENABLE_SK_TRUE at _skpkgdatadir ?= `scrollkeeper-config --pkgdatadir`
+ at ENABLE_GNOME_DOCS_TRUE@@ENABLE_SK_TRUE at _sklocalstatedir ?= `scrollkeeper-config --pkglocalstatedir`
+ at ENABLE_GNOME_DOCS_TRUE@@ENABLE_SK_TRUE at _skcontentslist ?= $(_skpkgdatadir)/Templates/C/scrollkeeper_cl.xml
+
+ at ENABLE_GNOME_DOCS_TRUE@$(_DOC_OMF_DB) : $(_DOC_OMF_IN)
+ at ENABLE_GNOME_DOCS_TRUE@$(_DOC_OMF_DB) : $(DOC_MODULE)-%.omf : %/$(DOC_MODULE).xml
+ at ENABLE_GNOME_DOCS_TRUE@ @test "x$(_ENABLE_SK)" != "xtrue" -o -f "$(_skcontentslist)" || { \
+ at ENABLE_GNOME_DOCS_TRUE@ echo "The file '$(_skcontentslist)' does not exist." >&2; \
+ at ENABLE_GNOME_DOCS_TRUE@ echo "Please check your ScrollKeeper installation." >&2; \
+ at ENABLE_GNOME_DOCS_TRUE@ exit 1; }
+ at ENABLE_GNOME_DOCS_TRUE@ xsltproc -o $@ $(call db2omf_args,$@,$<,'docbook') || { rm -f "$@"; exit 1; }
+
+ at ENABLE_GNOME_DOCS_TRUE@$(_DOC_OMF_HTML) : $(_DOC_OMF_IN)
+ at ENABLE_GNOME_DOCS_TRUE@$(_DOC_OMF_HTML) : $(DOC_MODULE)-html-%.omf : %/$(DOC_MODULE).xml
+ at ENABLE_GNOME_DOCS_TRUE@@ENABLE_SK_TRUE@ @test "x$(_ENABLE_SK)" != "xtrue" -o -f "$(_skcontentslist)" || { \
+ at ENABLE_GNOME_DOCS_TRUE@@ENABLE_SK_TRUE@ echo "The file '$(_skcontentslist)' does not exist" >&2; \
+ at ENABLE_GNOME_DOCS_TRUE@@ENABLE_SK_TRUE@ echo "Please check your ScrollKeeper installation." >&2; \
+ at ENABLE_GNOME_DOCS_TRUE@@ENABLE_SK_TRUE@ exit 1; }
+ at ENABLE_GNOME_DOCS_TRUE@ xsltproc -o $@ $(call db2omf_args,$@,$<,'xhtml') || { rm -f "$@"; exit 1; }
+
+ at ENABLE_GNOME_DOCS_TRUE@.PHONY: omf
+ at ENABLE_GNOME_DOCS_TRUE@omf: $(_DOC_OMF_ALL)
+
+ at ENABLE_GNOME_DOCS_TRUE@.PHONY: po
+ at ENABLE_GNOME_DOCS_TRUE@po: $(_DOC_POFILES)
+
+ at ENABLE_GNOME_DOCS_TRUE@.PHONY: mo
+ at ENABLE_GNOME_DOCS_TRUE@mo: $(_DOC_MOFILES)
+
+ at ENABLE_GNOME_DOCS_TRUE@$(_DOC_POFILES):
+ at ENABLE_GNOME_DOCS_TRUE@ @if ! test -d $(dir $@); then \
+ at ENABLE_GNOME_DOCS_TRUE@ echo "mkdir $(dir $@)"; \
+ at ENABLE_GNOME_DOCS_TRUE@ mkdir "$(dir $@)"; \
+ at ENABLE_GNOME_DOCS_TRUE@ fi
+ at ENABLE_GNOME_DOCS_TRUE@ @if test ! -f $@ -a -f $(srcdir)/$@; then \
+ at ENABLE_GNOME_DOCS_TRUE@ echo "cp $(srcdir)/$@ $@"; \
+ at ENABLE_GNOME_DOCS_TRUE@ cp "$(srcdir)/$@" "$@"; \
+ at ENABLE_GNOME_DOCS_TRUE@ fi;
+ at ENABLE_GNOME_DOCS_TRUE@ @docs=; \
+ at ENABLE_GNOME_DOCS_TRUE@ list='$(_DOC_C_DOCS_NOENT)'; for doc in $$list; do \
+ at ENABLE_GNOME_DOCS_TRUE@ docs="$$docs $(_DOC_ABS_SRCDIR)/$$doc"; \
+ at ENABLE_GNOME_DOCS_TRUE@ done; \
+ at ENABLE_GNOME_DOCS_TRUE@ if ! test -f $@; then \
+ at ENABLE_GNOME_DOCS_TRUE@ echo "(cd $(dir $@) && \
+ at ENABLE_GNOME_DOCS_TRUE@ $(_xml2po) -m $(_xml2po_mode) -e $$docs > $(notdir $@).tmp && \
+ at ENABLE_GNOME_DOCS_TRUE@ cp $(notdir $@).tmp $(notdir $@) && rm -f $(notdir $@).tmp)"; \
+ at ENABLE_GNOME_DOCS_TRUE@ (cd $(dir $@) && \
+ at ENABLE_GNOME_DOCS_TRUE@ $(_xml2po) -m $(_xml2po_mode) -e $$docs > $(notdir $@).tmp && \
+ at ENABLE_GNOME_DOCS_TRUE@ cp $(notdir $@).tmp $(notdir $@) && rm -f $(notdir $@).tmp); \
+ at ENABLE_GNOME_DOCS_TRUE@ else \
+ at ENABLE_GNOME_DOCS_TRUE@ echo "(cd $(dir $@) && \
+ at ENABLE_GNOME_DOCS_TRUE@ $(_xml2po) -m $(_xml2po_mode) -e -u $(notdir $@) $$docs)"; \
+ at ENABLE_GNOME_DOCS_TRUE@ (cd $(dir $@) && \
+ at ENABLE_GNOME_DOCS_TRUE@ $(_xml2po) -m $(_xml2po_mode) -e -u $(notdir $@) $$docs); \
+ at ENABLE_GNOME_DOCS_TRUE@ fi
+
+ at ENABLE_GNOME_DOCS_TRUE@$(_DOC_MOFILES): %.mo: %.po
+ at ENABLE_GNOME_DOCS_TRUE@ @if ! test -d $(dir $@); then \
+ at ENABLE_GNOME_DOCS_TRUE@ echo "mkdir $(dir $@)"; \
+ at ENABLE_GNOME_DOCS_TRUE@ mkdir "$(dir $@)"; \
+ at ENABLE_GNOME_DOCS_TRUE@ fi
+ at ENABLE_GNOME_DOCS_TRUE@ msgfmt -o $@ $<
+
+# FIXME: fix the dependancy
+# FIXME: hook xml2po up
+ at ENABLE_GNOME_DOCS_TRUE@$(_DOC_LC_DOCS) : $(_DOC_MOFILES)
+ at ENABLE_GNOME_DOCS_TRUE@$(_DOC_LC_DOCS) : $(_DOC_C_DOCS)
+ at ENABLE_GNOME_DOCS_TRUE@ if ! test -d $(dir $@); then mkdir $(dir $@); fi
+ at ENABLE_GNOME_DOCS_TRUE@ if [ -f "C/$(notdir $@)" ]; then d="../"; else d="$(_DOC_ABS_SRCDIR)/"; fi; \
+ at ENABLE_GNOME_DOCS_TRUE@ mo="$(dir $@)$(patsubst %/$(notdir $@),%,$@).mo"; \
+ at ENABLE_GNOME_DOCS_TRUE@ if [ -f "$${mo}" ]; then mo="../$${mo}"; else mo="$(_DOC_ABS_SRCDIR)/$${mo}"; fi; \
+ at ENABLE_GNOME_DOCS_TRUE@ (cd $(dir $@) && \
+ at ENABLE_GNOME_DOCS_TRUE@ $(_xml2po) -m $(_xml2po_mode) -e -t "$${mo}" \
+ at ENABLE_GNOME_DOCS_TRUE@ "$${d}C/$(notdir $@)" > $(notdir $@).tmp && \
+ at ENABLE_GNOME_DOCS_TRUE@ cp $(notdir $@).tmp $(notdir $@) && rm -f $(notdir $@).tmp)
+ at ENABLE_GNOME_DOCS_TRUE@.PHONY: pot
+ at ENABLE_GNOME_DOCS_TRUE@pot: $(_DOC_POT)
+ at ENABLE_GNOME_DOCS_TRUE@$(_DOC_POT): $(_DOC_C_DOCS_NOENT)
+ at ENABLE_GNOME_DOCS_TRUE@ $(_xml2po) -m $(_xml2po_mode) -e -o $@ $^
+
+ at ENABLE_GNOME_DOCS_TRUE@$(_DOC_HTML_TOPS): $(_DOC_C_DOCS) $(_DOC_LC_DOCS)
+ at ENABLE_GNOME_DOCS_TRUE@ xsltproc -o $@ --xinclude --param db.chunk.chunk_top "false()" --stringparam db.chunk.basename "$(DOC_MODULE)" --stringparam db.chunk.extension ".xhtml" $(_db2html) $(patsubst %.xhtml,%.xml,$@)
+
+################################################################################
+
+ at ENABLE_GNOME_DOCS_TRUE@all: \
+ at ENABLE_GNOME_DOCS_TRUE@ $(_DOC_C_DOCS) $(_DOC_LC_DOCS) \
+ at ENABLE_GNOME_DOCS_TRUE@ $(_DOC_OMF_ALL) $(_DOC_DSK_ALL) \
+ at ENABLE_GNOME_DOCS_TRUE@ $(_DOC_HTML_ALL) $(_DOC_POFILES)
+
+################################################################################
+
+ at ENABLE_GNOME_DOCS_TRUE@.PHONY: clean-doc-omf clean-doc-dsk clean-doc-lc clean-doc-dir
+
+ at ENABLE_GNOME_DOCS_TRUE@clean-doc-omf: ; rm -f $(_DOC_OMF_DB) $(_DOC_OMF_HTML)
+ at ENABLE_GNOME_DOCS_TRUE@clean-doc-dsk: ; rm -f $(_DOC_DSK_DB) $(_DOC_DSK_HTML)
+ at ENABLE_GNOME_DOCS_TRUE@clean-doc-lc:
+ at ENABLE_GNOME_DOCS_TRUE@ rm -f $(_DOC_LC_DOCS)
+ at ENABLE_GNOME_DOCS_TRUE@ rm -f $(_DOC_MOFILES)
+ at ENABLE_GNOME_DOCS_TRUE@ @list='$(_DOC_POFILES)'; for po in $$list; do \
+ at ENABLE_GNOME_DOCS_TRUE@ if ! test "$$po" -ef "$(srcdir)/$$po"; then \
+ at ENABLE_GNOME_DOCS_TRUE@ echo "rm -f $$po"; \
+ at ENABLE_GNOME_DOCS_TRUE@ rm -f "$$po"; \
+ at ENABLE_GNOME_DOCS_TRUE@ fi; \
+ at ENABLE_GNOME_DOCS_TRUE@ done
+# .xml2.po.mo cleaning is obsolete as of 0.18.1 and could be removed in 0.20.x
+ at ENABLE_GNOME_DOCS_TRUE@ @for lc in C $(_DOC_REAL_LINGUAS); do \
+ at ENABLE_GNOME_DOCS_TRUE@ if test -f "$$lc/.xml2po.mo"; then \
+ at ENABLE_GNOME_DOCS_TRUE@ echo "rm -f $$lc/.xml2po.mo"; \
+ at ENABLE_GNOME_DOCS_TRUE@ rm -f "$$lc/.xml2po.mo"; \
+ at ENABLE_GNOME_DOCS_TRUE@ fi; \
+ at ENABLE_GNOME_DOCS_TRUE@ done
+ at ENABLE_GNOME_DOCS_TRUE@clean-doc-dir: clean-doc-lc
+ at ENABLE_GNOME_DOCS_TRUE@ @for lc in C $(_DOC_REAL_LINGUAS); do \
+ at ENABLE_GNOME_DOCS_TRUE@ for dir in `find $$lc -depth -type d`; do \
+ at ENABLE_GNOME_DOCS_TRUE@ if ! test $$dir -ef $(srcdir)/$$dir; then \
+ at ENABLE_GNOME_DOCS_TRUE@ echo "rmdir $$dir"; \
+ at ENABLE_GNOME_DOCS_TRUE@ rmdir "$$dir"; \
+ at ENABLE_GNOME_DOCS_TRUE@ fi; \
+ at ENABLE_GNOME_DOCS_TRUE@ done; \
+ at ENABLE_GNOME_DOCS_TRUE@ done
+
+ at ENABLE_GNOME_DOCS_TRUE@clean-local: \
+ at ENABLE_GNOME_DOCS_TRUE@ $(_clean_omf) $(_clean_dsk) \
+ at ENABLE_GNOME_DOCS_TRUE@ $(_clean_lc) $(_clean_dir)
+ at ENABLE_GNOME_DOCS_TRUE@distclean-local: \
+ at ENABLE_GNOME_DOCS_TRUE@ $(_clean_omf) $(_clean_dsk) \
+ at ENABLE_GNOME_DOCS_TRUE@ $(_clean_lc) $(_clean_dir)
+ at ENABLE_GNOME_DOCS_TRUE@mostlyclean-local: \
+ at ENABLE_GNOME_DOCS_TRUE@ $(_clean_omf) $(_clean_dsk) \
+ at ENABLE_GNOME_DOCS_TRUE@ $(_clean_lc) $(_clean_dir)
+ at ENABLE_GNOME_DOCS_TRUE@maintainer-clean-local: \
+ at ENABLE_GNOME_DOCS_TRUE@ $(_clean_omf) $(_clean_dsk) \
+ at ENABLE_GNOME_DOCS_TRUE@ $(_clean_lc) $(_clean_dir)
+
+################################################################################
+
+ at ENABLE_GNOME_DOCS_TRUE@.PHONY: dist-doc-docs dist-doc-pages dist-doc-figs dist-doc-omf dist-doc-dsk
+ at ENABLE_GNOME_DOCS_TRUE@doc-dist-hook: \
+ at ENABLE_GNOME_DOCS_TRUE@ $(if $(DOC_MODULE)$(DOC_ID),dist-doc-docs) \
+ at ENABLE_GNOME_DOCS_TRUE@ $(if $(_DOC_C_FIGURES),dist-doc-figs) \
+ at ENABLE_GNOME_DOCS_TRUE@ $(if $(_DOC_OMF_IN),dist-doc-omf)
+# $(if $(_DOC_DSK_IN),dist-doc-dsk)
+
+ at ENABLE_GNOME_DOCS_TRUE@dist-doc-docs: $(_DOC_C_DOCS) $(_DOC_LC_DOCS) $(_DOC_POFILES)
+ at ENABLE_GNOME_DOCS_TRUE@ @for lc in C $(_DOC_REAL_LINGUAS); do \
+ at ENABLE_GNOME_DOCS_TRUE@ echo " $(mkinstalldirs) $(distdir)/$$lc"; \
+ at ENABLE_GNOME_DOCS_TRUE@ $(mkinstalldirs) "$(distdir)/$$lc"; \
+ at ENABLE_GNOME_DOCS_TRUE@ done
+ at ENABLE_GNOME_DOCS_TRUE@ @list='$(_DOC_C_DOCS) $(_DOC_LC_DOCS) $(_DOC_POFILES)'; \
+ at ENABLE_GNOME_DOCS_TRUE@ for doc in $$list; do \
+ at ENABLE_GNOME_DOCS_TRUE@ if test -f "$$doc"; then d=; else d="$(srcdir)/"; fi; \
+ at ENABLE_GNOME_DOCS_TRUE@ docdir=`echo $$doc | sed -e 's/^\(.*\/\).*/\1/' -e '/\//!s/.*//'`; \
+ at ENABLE_GNOME_DOCS_TRUE@ if ! test -d "$(distdir)/$$docdir"; then \
+ at ENABLE_GNOME_DOCS_TRUE@ echo "$(mkinstalldirs) $(distdir)/$$docdir"; \
+ at ENABLE_GNOME_DOCS_TRUE@ $(mkinstalldirs) "$(distdir)/$$docdir"; \
+ at ENABLE_GNOME_DOCS_TRUE@ fi; \
+ at ENABLE_GNOME_DOCS_TRUE@ echo "$(INSTALL_DATA) $$d$$doc $(distdir)/$$doc"; \
+ at ENABLE_GNOME_DOCS_TRUE@ $(INSTALL_DATA) "$$d$$doc" "$(distdir)/$$doc"; \
+ at ENABLE_GNOME_DOCS_TRUE@ done
+
+ at ENABLE_GNOME_DOCS_TRUE@dist-doc-figs: $(_DOC_SRC_FIGURES)
+ at ENABLE_GNOME_DOCS_TRUE@ @list='$(_DOC_C_FIGURES) $(_DOC_LC_FIGURES)'; \
+ at ENABLE_GNOME_DOCS_TRUE@ for fig in $$list; do \
+ at ENABLE_GNOME_DOCS_TRUE@ if test -f "$$fig"; then d=; else d="$(srcdir)/"; fi; \
+ at ENABLE_GNOME_DOCS_TRUE@ if test -f "$$d$$fig"; then \
+ at ENABLE_GNOME_DOCS_TRUE@ figdir=`echo $$fig | sed -e 's/^\(.*\/\).*/\1/' -e '/\//!s/.*//'`; \
+ at ENABLE_GNOME_DOCS_TRUE@ if ! test -d "$(distdir)/$$figdir"; then \
+ at ENABLE_GNOME_DOCS_TRUE@ echo "$(mkinstalldirs) $(distdir)/$$figdir"; \
+ at ENABLE_GNOME_DOCS_TRUE@ $(mkinstalldirs) "$(distdir)/$$figdir"; \
+ at ENABLE_GNOME_DOCS_TRUE@ fi; \
+ at ENABLE_GNOME_DOCS_TRUE@ echo "$(INSTALL_DATA) $$d$$fig $(distdir)/$$fig"; \
+ at ENABLE_GNOME_DOCS_TRUE@ $(INSTALL_DATA) "$$d$$fig" "$(distdir)/$$fig"; \
+ at ENABLE_GNOME_DOCS_TRUE@ fi; \
+ at ENABLE_GNOME_DOCS_TRUE@ done;
+
+ at ENABLE_GNOME_DOCS_TRUE@dist-doc-omf:
+ at ENABLE_GNOME_DOCS_TRUE@ @if test -f "$(_DOC_OMF_IN)"; then d=; else d="$(srcdir)/"; fi; \
+ at ENABLE_GNOME_DOCS_TRUE@ echo "$(INSTALL_DATA) $$d$(_DOC_OMF_IN) $(distdir)/$(notdir $(_DOC_OMF_IN))"; \
+ at ENABLE_GNOME_DOCS_TRUE@ $(INSTALL_DATA) "$$d$(_DOC_OMF_IN)" "$(distdir)/$(notdir $(_DOC_OMF_IN))"
+
+ at ENABLE_GNOME_DOCS_TRUE@dist-doc-dsk:
+ at ENABLE_GNOME_DOCS_TRUE@ @if test -f "$(_DOC_DSK_IN)"; then d=; else d="$(srcdir)/"; fi; \
+ at ENABLE_GNOME_DOCS_TRUE@ echo "$(INSTALL_DATA) $$d$(_DOC_DSK_IN) $(distdir)/$(notdir $(_DOC_DSK_IN))"; \
+ at ENABLE_GNOME_DOCS_TRUE@ $(INSTALL_DATA) "$$d$(_DOC_DSK_IN)" "$(distdir)/$(notdir $(_DOC_DSK_IN))"
+
+################################################################################
+
+ at ENABLE_GNOME_DOCS_TRUE@.PHONY: check-doc-docs check-doc-omf
+ at ENABLE_GNOME_DOCS_TRUE@check: \
+ at ENABLE_GNOME_DOCS_TRUE@ $(if $(DOC_MODULE),check-doc-docs) \
+ at ENABLE_GNOME_DOCS_TRUE@ $(if $(DOC_ID),check-doc-pages) \
+ at ENABLE_GNOME_DOCS_TRUE@ $(if $(_DOC_OMF_IN),check-doc-omf)
+
+ at ENABLE_GNOME_DOCS_TRUE@check-doc-docs: $(_DOC_C_DOCS) $(_DOC_LC_DOCS)
+ at ENABLE_GNOME_DOCS_TRUE@ @for lc in C $(_DOC_REAL_LINGUAS); do \
+ at ENABLE_GNOME_DOCS_TRUE@ if test -f "$$lc"; \
+ at ENABLE_GNOME_DOCS_TRUE@ then d=; \
+ at ENABLE_GNOME_DOCS_TRUE@ xmlpath="$$lc"; \
+ at ENABLE_GNOME_DOCS_TRUE@ else \
+ at ENABLE_GNOME_DOCS_TRUE@ d="$(srcdir)/"; \
+ at ENABLE_GNOME_DOCS_TRUE@ xmlpath="$$lc:$(srcdir)/$$lc"; \
+ at ENABLE_GNOME_DOCS_TRUE@ fi; \
+ at ENABLE_GNOME_DOCS_TRUE@ echo "xmllint --noout --noent --path $$xmlpath --xinclude --postvalid $$d$$lc/$(DOC_MODULE).xml"; \
+ at ENABLE_GNOME_DOCS_TRUE@ xmllint --noout --noent --path "$$xmlpath" --xinclude --postvalid "$$d$$lc/$(DOC_MODULE).xml"; \
+ at ENABLE_GNOME_DOCS_TRUE@ done
+
+ at ENABLE_GNOME_DOCS_TRUE@check-doc-pages: $(_DOC_C_PAGES) $(_DOC_LC_PAGES)
+ at ENABLE_GNOME_DOCS_TRUE@ for lc in C $(_DOC_REAL_LINGUAS); do \
+ at ENABLE_GNOME_DOCS_TRUE@ if test -f "$$lc"; \
+ at ENABLE_GNOME_DOCS_TRUE@ then d=; \
+ at ENABLE_GNOME_DOCS_TRUE@ xmlpath="$$lc"; \
+ at ENABLE_GNOME_DOCS_TRUE@ else \
+ at ENABLE_GNOME_DOCS_TRUE@ d="$(srcdir)/"; \
+ at ENABLE_GNOME_DOCS_TRUE@ xmlpath="$$lc:$(srcdir)/$$lc"; \
+ at ENABLE_GNOME_DOCS_TRUE@ fi; \
+ at ENABLE_GNOME_DOCS_TRUE@ for page in $(DOC_PAGES); do \
+ at ENABLE_GNOME_DOCS_TRUE@ echo "xmllint --noout --noent --path $$xmlpath --xinclude --relaxng $(_malrng) $$d$$lc/$$page"; \
+ at ENABLE_GNOME_DOCS_TRUE@ xmllint --noout --noent --path "$$xmlpath" --xinclude --relaxng "$(_malrng)" "$$d$$lc/$$page"; \
+ at ENABLE_GNOME_DOCS_TRUE@ done; \
+ at ENABLE_GNOME_DOCS_TRUE@ done
+
+ at ENABLE_GNOME_DOCS_TRUE@check-doc-omf: $(_DOC_OMF_ALL)
+ at ENABLE_GNOME_DOCS_TRUE@ @list='$(_DOC_OMF_ALL)'; for omf in $$list; do \
+ at ENABLE_GNOME_DOCS_TRUE@ echo "xmllint --noout --xinclude --dtdvalid 'http://scrollkeeper.sourceforge.net/dtds/scrollkeeper-omf-1.0/scrollkeeper-omf.dtd' $$omf"; \
+ at ENABLE_GNOME_DOCS_TRUE@ xmllint --noout --xinclude --dtdvalid 'http://scrollkeeper.sourceforge.net/dtds/scrollkeeper-omf-1.0/scrollkeeper-omf.dtd' $$omf; \
+ at ENABLE_GNOME_DOCS_TRUE@ done
+
+################################################################################
+
+ at ENABLE_GNOME_DOCS_TRUE@.PHONY: install-doc-docs install-doc-html install-doc-figs install-doc-omf install-doc-dsk
+
+ at ENABLE_GNOME_DOCS_TRUE@install-data-local: \
+ at ENABLE_GNOME_DOCS_TRUE@ $(if $(DOC_MODULE)$(DOC_ID),install-doc-docs) \
+ at ENABLE_GNOME_DOCS_TRUE@ $(if $(_DOC_HTML_ALL),install-doc-html) \
+ at ENABLE_GNOME_DOCS_TRUE@ $(if $(_DOC_C_FIGURES),install-doc-figs) \
+ at ENABLE_GNOME_DOCS_TRUE@ $(if $(_DOC_OMF_IN),install-doc-omf)
+# $(if $(_DOC_DSK_IN),install-doc-dsk)
+
+ at ENABLE_GNOME_DOCS_TRUE@install-doc-docs:
+ at ENABLE_GNOME_DOCS_TRUE@ @for lc in C $(_DOC_REAL_LINGUAS); do \
+ at ENABLE_GNOME_DOCS_TRUE@ echo "$(mkinstalldirs) $(DESTDIR)$(HELP_DIR)/$(_doc_install_dir)/$$lc"; \
+ at ENABLE_GNOME_DOCS_TRUE@ $(mkinstalldirs) $(DESTDIR)$(HELP_DIR)/$(_doc_install_dir)/$$lc; \
+ at ENABLE_GNOME_DOCS_TRUE@ done
+ at ENABLE_GNOME_DOCS_TRUE@ @list='$(_DOC_C_DOCS) $(_DOC_LC_DOCS)'; for doc in $$list; do \
+ at ENABLE_GNOME_DOCS_TRUE@ if test -f "$$doc"; then d=; else d="$(srcdir)/"; fi; \
+ at ENABLE_GNOME_DOCS_TRUE@ docdir="$$lc/"`echo $$doc | sed -e 's/^\(.*\/\).*/\1/' -e '/\//!s/.*//'`; \
+ at ENABLE_GNOME_DOCS_TRUE@ docdir="$(DESTDIR)$(HELP_DIR)/$(_doc_install_dir)/$$docdir"; \
+ at ENABLE_GNOME_DOCS_TRUE@ if ! test -d "$$docdir"; then \
+ at ENABLE_GNOME_DOCS_TRUE@ echo "$(mkinstalldirs) $$docdir"; \
+ at ENABLE_GNOME_DOCS_TRUE@ $(mkinstalldirs) "$$docdir"; \
+ at ENABLE_GNOME_DOCS_TRUE@ fi; \
+ at ENABLE_GNOME_DOCS_TRUE@ echo "$(INSTALL_DATA) $$d$$doc $(DESTDIR)$(HELP_DIR)/$(_doc_install_dir)/$$doc"; \
+ at ENABLE_GNOME_DOCS_TRUE@ $(INSTALL_DATA) $$d$$doc $(DESTDIR)$(HELP_DIR)/$(_doc_install_dir)/$$doc; \
+ at ENABLE_GNOME_DOCS_TRUE@ done
+
+ at ENABLE_GNOME_DOCS_TRUE@install-doc-figs:
+ at ENABLE_GNOME_DOCS_TRUE@ @list='$(patsubst C/%,%,$(_DOC_C_FIGURES))'; for fig in $$list; do \
+ at ENABLE_GNOME_DOCS_TRUE@ for lc in C $(_DOC_REAL_LINGUAS); do \
+ at ENABLE_GNOME_DOCS_TRUE@ figsymlink=false; \
+ at ENABLE_GNOME_DOCS_TRUE@ if test -f "$$lc/$$fig"; then \
+ at ENABLE_GNOME_DOCS_TRUE@ figfile="$$lc/$$fig"; \
+ at ENABLE_GNOME_DOCS_TRUE@ elif test -f "$(srcdir)/$$lc/$$fig"; then \
+ at ENABLE_GNOME_DOCS_TRUE@ figfile="$(srcdir)/$$lc/$$fig"; \
+ at ENABLE_GNOME_DOCS_TRUE@ else \
+ at ENABLE_GNOME_DOCS_TRUE@ figsymlink=true; \
+ at ENABLE_GNOME_DOCS_TRUE@ fi; \
+ at ENABLE_GNOME_DOCS_TRUE@ figdir="$$lc/"`echo $$fig | sed -e 's/^\(.*\/\).*/\1/' -e '/\//!s/.*//'`; \
+ at ENABLE_GNOME_DOCS_TRUE@ figdir="$(DESTDIR)$(HELP_DIR)/$(_doc_install_dir)/$$figdir"; \
+ at ENABLE_GNOME_DOCS_TRUE@ if ! test -d "$$figdir"; then \
+ at ENABLE_GNOME_DOCS_TRUE@ echo "$(mkinstalldirs) $$figdir"; \
+ at ENABLE_GNOME_DOCS_TRUE@ $(mkinstalldirs) "$$figdir"; \
+ at ENABLE_GNOME_DOCS_TRUE@ fi; \
+ at ENABLE_GNOME_DOCS_TRUE@ figbase=`echo $$fig | sed -e 's/^.*\///'`; \
+ at ENABLE_GNOME_DOCS_TRUE@ if $$figsymlink; then \
+ at ENABLE_GNOME_DOCS_TRUE@ echo "cd $$figdir && $(LN_S) -f ../../C/$$fig $$figbase"; \
+ at ENABLE_GNOME_DOCS_TRUE@ ( cd "$$figdir" && $(LN_S) -f "../../C/$$fig" "$$figbase" ); \
+ at ENABLE_GNOME_DOCS_TRUE@ else \
+ at ENABLE_GNOME_DOCS_TRUE@ echo "$(INSTALL_DATA) $$figfile $$figdir$$figbase"; \
+ at ENABLE_GNOME_DOCS_TRUE@ $(INSTALL_DATA) "$$figfile" "$$figdir$$figbase"; \
+ at ENABLE_GNOME_DOCS_TRUE@ fi; \
+ at ENABLE_GNOME_DOCS_TRUE@ done; \
+ at ENABLE_GNOME_DOCS_TRUE@ done
+
+ at ENABLE_GNOME_DOCS_TRUE@install-doc-html:
+ at ENABLE_GNOME_DOCS_TRUE@ echo install-html
+
+ at ENABLE_GNOME_DOCS_TRUE@install-doc-omf:
+ at ENABLE_GNOME_DOCS_TRUE@ $(mkinstalldirs) $(DESTDIR)$(OMF_DIR)/$(_doc_install_dir)
+ at ENABLE_GNOME_DOCS_TRUE@ @list='$(_DOC_OMF_ALL)'; for omf in $$list; do \
+ at ENABLE_GNOME_DOCS_TRUE@ echo "$(INSTALL_DATA) $$omf $(DESTDIR)$(OMF_DIR)/$(_doc_install_dir)/$$omf"; \
+ at ENABLE_GNOME_DOCS_TRUE@ $(INSTALL_DATA) $$omf $(DESTDIR)$(OMF_DIR)/$(_doc_install_dir)/$$omf; \
+ at ENABLE_GNOME_DOCS_TRUE@ done
+ at ENABLE_GNOME_DOCS_TRUE@ @if test "x$(_ENABLE_SK)" = "xtrue"; then \
+ at ENABLE_GNOME_DOCS_TRUE@ echo "scrollkeeper-update -p $(DESTDIR)$(_sklocalstatedir) -o $(DESTDIR)$(OMF_DIR)/$(_doc_install_dir)"; \
+ at ENABLE_GNOME_DOCS_TRUE@ scrollkeeper-update -p "$(DESTDIR)$(_sklocalstatedir)" -o "$(DESTDIR)$(OMF_DIR)/$(_doc_install_dir)"; \
+ at ENABLE_GNOME_DOCS_TRUE@ fi;
+
+ at ENABLE_GNOME_DOCS_TRUE@install-doc-dsk:
+ at ENABLE_GNOME_DOCS_TRUE@ echo install-dsk
+
+################################################################################
+
+ at ENABLE_GNOME_DOCS_TRUE@.PHONY: uninstall-doc-docs uninstall-doc-html uninstall-doc-figs uninstall-doc-omf uninstall-doc-dsk
+ at ENABLE_GNOME_DOCS_TRUE@uninstall-local: \
+ at ENABLE_GNOME_DOCS_TRUE@ $(if $(DOC_MODULE)$(DOC_ID),uninstall-doc-docs) \
+ at ENABLE_GNOME_DOCS_TRUE@ $(if $(_DOC_HTML_ALL),uninstall-doc-html) \
+ at ENABLE_GNOME_DOCS_TRUE@ $(if $(_DOC_C_FIGURES),uninstall-doc-figs) \
+ at ENABLE_GNOME_DOCS_TRUE@ $(if $(_DOC_OMF_IN),uninstall-doc-omf)
+# $(if $(_DOC_DSK_IN),uninstall-doc-dsk)
+
+ at ENABLE_GNOME_DOCS_TRUE@uninstall-doc-docs:
+ at ENABLE_GNOME_DOCS_TRUE@ @list='$(_DOC_C_DOCS) $(_DOC_LC_DOCS)'; for doc in $$list; do \
+ at ENABLE_GNOME_DOCS_TRUE@ echo " rm -f $(DESTDIR)$(HELP_DIR)/$(_doc_install_dir)/$$doc"; \
+ at ENABLE_GNOME_DOCS_TRUE@ rm -f "$(DESTDIR)$(HELP_DIR)/$(_doc_install_dir)/$$doc"; \
+ at ENABLE_GNOME_DOCS_TRUE@ done
+
+ at ENABLE_GNOME_DOCS_TRUE@uninstall-doc-figs:
+ at ENABLE_GNOME_DOCS_TRUE@ @list='$(_DOC_C_FIGURES) $(_DOC_LC_FIGURES)'; for fig in $$list; do \
+ at ENABLE_GNOME_DOCS_TRUE@ echo "rm -f $(DESTDIR)$(HELP_DIR)/$(_doc_install_dir)/$$fig"; \
+ at ENABLE_GNOME_DOCS_TRUE@ rm -f "$(DESTDIR)$(HELP_DIR)/$(_doc_install_dir)/$$fig"; \
+ at ENABLE_GNOME_DOCS_TRUE@ done;
+
+ at ENABLE_GNOME_DOCS_TRUE@uninstall-doc-omf:
+ at ENABLE_GNOME_DOCS_TRUE@ @list='$(_DOC_OMF_ALL)'; for omf in $$list; do \
+ at ENABLE_GNOME_DOCS_TRUE@ if test "x$(_ENABLE_SK)" = "xtrue"; then \
+ at ENABLE_GNOME_DOCS_TRUE@ echo "scrollkeeper-uninstall -p $(_sklocalstatedir) $(DESTDIR)$(OMF_DIR)/$(_doc_install_dir)/$$omf"; \
+ at ENABLE_GNOME_DOCS_TRUE@ scrollkeeper-uninstall -p "$(_sklocalstatedir)" "$(DESTDIR)$(OMF_DIR)/$(_doc_install_dir)/$$omf"; \
+ at ENABLE_GNOME_DOCS_TRUE@ fi; \
+ at ENABLE_GNOME_DOCS_TRUE@ echo "rm -f $(DESTDIR)$(OMF_DIR)/$(_doc_install_dir)/$$omf"; \
+ at ENABLE_GNOME_DOCS_TRUE@ rm -f "$(DESTDIR)$(OMF_DIR)/$(_doc_install_dir)/$$omf"; \
+ at ENABLE_GNOME_DOCS_TRUE@ done
+ at ENABLE_GNOME_DOCS_TRUE@dist-hook: doc-dist-hook
+
+# 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.
+.NOEXPORT:
diff --git a/icons/Makefile.am b/icons/Makefile.am
index 455d2f9..422c081 100644
--- a/icons/Makefile.am
+++ b/icons/Makefile.am
@@ -63,6 +63,7 @@ theme_icons = \
apps,f-spot-22.png \
apps,f-spot-24.png \
apps,f-spot-32.png \
+ apps,f-spot-128.png \
apps,f-spot-256.png \
devices,camera-photo-16.png \
devices,camera-photo-22.png \
@@ -118,6 +119,8 @@ install-data-local:
$(INSTALL_DATA) $(srcdir)/f-spot-32.png $(hicolordir)/32x32/apps/f-spot.png
$(mkinstalldirs) $(hicolordir)/48x48/apps
$(INSTALL_DATA) $(srcdir)/f-spot-48.png $(hicolordir)/48x48/apps/f-spot.png
+ $(mkinstalldirs) $(hicolordir)/128x128/apps
+ $(INSTALL_DATA) $(srcdir)/f-spot-128.png $(hicolordir)/128x128/apps/f-spot.png
$(mkinstalldirs) $(hicolordir)/256x256/apps
$(INSTALL_DATA) $(srcdir)/f-spot-256.png $(hicolordir)/256x256/apps/f-spot.png
@@ -128,6 +131,7 @@ uninstall-hook:
rm -f $(hicolordir)/24x24/apps/f-spot.png
rm -f $(hicolordir)/32x32/apps/f-spot.png
rm -f $(hicolordir)/48x48/apps/f-spot.png
+ rm -f $(hicolordir)/128x128/apps/f-spot.png
rm -f $(hicolordir)/256x256/apps/f-spot.png
diff --git a/icons/Makefile.in b/icons/Makefile.in
index 51d9605..2baceff 100644
--- a/icons/Makefile.in
+++ b/icons/Makefile.in
@@ -38,8 +38,14 @@ DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in
ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
am__aclocal_m4_deps = $(top_srcdir)/build/m4/shave/shave.m4 \
$(top_srcdir)/build/m4/shamrock/expansions.m4 \
+ $(top_srcdir)/build/m4/shamrock/gnome-doc.m4 \
$(top_srcdir)/build/m4/shamrock/mono.m4 \
+ $(top_srcdir)/build/m4/shamrock/nunit.m4 \
$(top_srcdir)/build/m4/shamrock/programs.m4 \
+ $(top_srcdir)/build/m4/f-spot/flickrnet.m4 \
+ $(top_srcdir)/build/m4/f-spot/gnome-keyring-sharp.m4 \
+ $(top_srcdir)/build/m4/f-spot/gtk-sharp.m4 \
+ $(top_srcdir)/build/m4/f-spot/mono-addins.m4 \
$(top_srcdir)/acinclude.m4 $(top_srcdir)/configure.ac
am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
$(ACLOCAL_M4)
@@ -94,6 +100,8 @@ EXIF_SOVERSION = @EXIF_SOVERSION@
F77 = @F77@
FC = @FC@
FGREP = @FGREP@
+FLICKRNET_CFLAGS = @FLICKRNET_CFLAGS@
+FLICKRNET_LIBS = @FLICKRNET_LIBS@
F_CFLAGS = @F_CFLAGS@
F_LIBS = @F_LIBS@
GAPI2CODEGEN = @GAPI2CODEGEN@
@@ -107,6 +115,8 @@ GCONF_SHARP_LIBS = @GCONF_SHARP_LIBS@
GETTEXT_PACKAGE = @GETTEXT_PACKAGE@
GIO_CFLAGS = @GIO_CFLAGS@
GIO_LIBS = @GIO_LIBS@
+GLIBSHARP_2_12_7_CFLAGS = @GLIBSHARP_2_12_7_CFLAGS@
+GLIBSHARP_2_12_7_LIBS = @GLIBSHARP_2_12_7_LIBS@
GLIBSHARP_CFLAGS = @GLIBSHARP_CFLAGS@
GLIBSHARP_LIBS = @GLIBSHARP_LIBS@
GLIB_CFLAGS = @GLIB_CFLAGS@
@@ -122,6 +132,10 @@ GNOME_SHARP_CFLAGS = @GNOME_SHARP_CFLAGS@
GNOME_SHARP_LIBS = @GNOME_SHARP_LIBS@
GOBJECT_QUERY = @GOBJECT_QUERY@
GREP = @GREP@
+GTKSHARP_A11Y_CFLAGS = @GTKSHARP_A11Y_CFLAGS@
+GTKSHARP_A11Y_LIBS = @GTKSHARP_A11Y_LIBS@
+GTKSHARP_CFLAGS = @GTKSHARP_CFLAGS@
+GTKSHARP_LIBS = @GTKSHARP_LIBS@
HELP_DIR = @HELP_DIR@
ICONS_DIRECTORY = @ICONS_DIRECTORY@
INSTALL = @INSTALL@
@@ -135,14 +149,14 @@ INTLTOOL_EXTRACT = @INTLTOOL_EXTRACT@
INTLTOOL_MERGE = @INTLTOOL_MERGE@
INTLTOOL_PERL = @INTLTOOL_PERL@
INTLTOOL_UPDATE = @INTLTOOL_UPDATE@
+KEYRINGSHARP_CFLAGS = @KEYRINGSHARP_CFLAGS@
+KEYRINGSHARP_LIBS = @KEYRINGSHARP_LIBS@
LCMS_CFLAGS = @LCMS_CFLAGS@
LCMS_LIBS = @LCMS_LIBS@
LD = @LD@
LDFLAGS = @LDFLAGS@
LIBEXIF_VERSION_CHECK_CFLAGS = @LIBEXIF_VERSION_CHECK_CFLAGS@
LIBEXIF_VERSION_CHECK_LIBS = @LIBEXIF_VERSION_CHECK_LIBS@
-LIBGPHOTO2_CFLAGS = @LIBGPHOTO2_CFLAGS@
-LIBGPHOTO2_LIBS = @LIBGPHOTO2_LIBS@
LIBJPEG = @LIBJPEG@
LIBOBJS = @LIBOBJS@
LIBS = @LIBS@
@@ -157,6 +171,12 @@ MCS = @MCS@
MKDIR_P = @MKDIR_P@
MKINSTALLDIRS = @MKINSTALLDIRS@
MONO = @MONO@
+MONO_ADDINS_CFLAGS = @MONO_ADDINS_CFLAGS@
+MONO_ADDINS_GUI_CFLAGS = @MONO_ADDINS_GUI_CFLAGS@
+MONO_ADDINS_GUI_LIBS = @MONO_ADDINS_GUI_LIBS@
+MONO_ADDINS_LIBS = @MONO_ADDINS_LIBS@
+MONO_ADDINS_SETUP_CFLAGS = @MONO_ADDINS_SETUP_CFLAGS@
+MONO_ADDINS_SETUP_LIBS = @MONO_ADDINS_SETUP_LIBS@
MONO_MODULE_CFLAGS = @MONO_MODULE_CFLAGS@
MONO_MODULE_LIBS = @MONO_MODULE_LIBS@
MSGFMT = @MSGFMT@
@@ -167,7 +187,6 @@ NDESK_DBUS_LIBS = @NDESK_DBUS_LIBS@
NM = @NM@
NMEDIT = @NMEDIT@
NUNIT_CFLAGS = @NUNIT_CFLAGS@
-NUNIT_DEFINES = @NUNIT_DEFINES@
NUNIT_LIBS = @NUNIT_LIBS@
OBJC = @OBJC@
OBJDUMP = @OBJDUMP@
@@ -323,6 +342,7 @@ theme_icons = \
apps,f-spot-22.png \
apps,f-spot-24.png \
apps,f-spot-32.png \
+ apps,f-spot-128.png \
apps,f-spot-256.png \
devices,camera-photo-16.png \
devices,camera-photo-22.png \
@@ -570,6 +590,8 @@ install-data-local:
$(INSTALL_DATA) $(srcdir)/f-spot-32.png $(hicolordir)/32x32/apps/f-spot.png
$(mkinstalldirs) $(hicolordir)/48x48/apps
$(INSTALL_DATA) $(srcdir)/f-spot-48.png $(hicolordir)/48x48/apps/f-spot.png
+ $(mkinstalldirs) $(hicolordir)/128x128/apps
+ $(INSTALL_DATA) $(srcdir)/f-spot-128.png $(hicolordir)/128x128/apps/f-spot.png
$(mkinstalldirs) $(hicolordir)/256x256/apps
$(INSTALL_DATA) $(srcdir)/f-spot-256.png $(hicolordir)/256x256/apps/f-spot.png
@@ -580,6 +602,7 @@ uninstall-hook:
rm -f $(hicolordir)/24x24/apps/f-spot.png
rm -f $(hicolordir)/32x32/apps/f-spot.png
rm -f $(hicolordir)/48x48/apps/f-spot.png
+ rm -f $(hicolordir)/128x128/apps/f-spot.png
rm -f $(hicolordir)/256x256/apps/f-spot.png
# Tell versions [3.59,3.63) of GNU make to not export all variables.
diff --git a/lib/GKeyFile/Makefile.in b/lib/GKeyFile/Makefile.in
index 87136c7..9781d54 100644
--- a/lib/GKeyFile/Makefile.in
+++ b/lib/GKeyFile/Makefile.in
@@ -15,6 +15,11 @@
@SET_MAKE@
+# Makefile.include
+# FSpot wide helper
+
+# Directories
+
VPATH = @srcdir@
pkgdatadir = $(datadir)/@PACKAGE@
pkgincludedir = $(includedir)/@PACKAGE@
@@ -40,8 +45,14 @@ subdir = lib/GKeyFile
ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
am__aclocal_m4_deps = $(top_srcdir)/build/m4/shave/shave.m4 \
$(top_srcdir)/build/m4/shamrock/expansions.m4 \
+ $(top_srcdir)/build/m4/shamrock/gnome-doc.m4 \
$(top_srcdir)/build/m4/shamrock/mono.m4 \
+ $(top_srcdir)/build/m4/shamrock/nunit.m4 \
$(top_srcdir)/build/m4/shamrock/programs.m4 \
+ $(top_srcdir)/build/m4/f-spot/flickrnet.m4 \
+ $(top_srcdir)/build/m4/f-spot/gnome-keyring-sharp.m4 \
+ $(top_srcdir)/build/m4/f-spot/gtk-sharp.m4 \
+ $(top_srcdir)/build/m4/f-spot/mono-addins.m4 \
$(top_srcdir)/acinclude.m4 $(top_srcdir)/configure.ac
am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
$(ACLOCAL_M4)
@@ -119,6 +130,8 @@ EXIF_SOVERSION = @EXIF_SOVERSION@
F77 = @F77@
FC = @FC@
FGREP = @FGREP@
+FLICKRNET_CFLAGS = @FLICKRNET_CFLAGS@
+FLICKRNET_LIBS = @FLICKRNET_LIBS@
F_CFLAGS = @F_CFLAGS@
F_LIBS = @F_LIBS@
GAPI2CODEGEN = @GAPI2CODEGEN@
@@ -132,6 +145,8 @@ GCONF_SHARP_LIBS = @GCONF_SHARP_LIBS@
GETTEXT_PACKAGE = @GETTEXT_PACKAGE@
GIO_CFLAGS = @GIO_CFLAGS@
GIO_LIBS = @GIO_LIBS@
+GLIBSHARP_2_12_7_CFLAGS = @GLIBSHARP_2_12_7_CFLAGS@
+GLIBSHARP_2_12_7_LIBS = @GLIBSHARP_2_12_7_LIBS@
GLIBSHARP_CFLAGS = @GLIBSHARP_CFLAGS@
GLIBSHARP_LIBS = @GLIBSHARP_LIBS@
GLIB_CFLAGS = @GLIB_CFLAGS@
@@ -147,6 +162,10 @@ GNOME_SHARP_CFLAGS = @GNOME_SHARP_CFLAGS@
GNOME_SHARP_LIBS = @GNOME_SHARP_LIBS@
GOBJECT_QUERY = @GOBJECT_QUERY@
GREP = @GREP@
+GTKSHARP_A11Y_CFLAGS = @GTKSHARP_A11Y_CFLAGS@
+GTKSHARP_A11Y_LIBS = @GTKSHARP_A11Y_LIBS@
+GTKSHARP_CFLAGS = @GTKSHARP_CFLAGS@
+GTKSHARP_LIBS = @GTKSHARP_LIBS@
HELP_DIR = @HELP_DIR@
ICONS_DIRECTORY = @ICONS_DIRECTORY@
INSTALL = @INSTALL@
@@ -160,14 +179,14 @@ INTLTOOL_EXTRACT = @INTLTOOL_EXTRACT@
INTLTOOL_MERGE = @INTLTOOL_MERGE@
INTLTOOL_PERL = @INTLTOOL_PERL@
INTLTOOL_UPDATE = @INTLTOOL_UPDATE@
+KEYRINGSHARP_CFLAGS = @KEYRINGSHARP_CFLAGS@
+KEYRINGSHARP_LIBS = @KEYRINGSHARP_LIBS@
LCMS_CFLAGS = @LCMS_CFLAGS@
LCMS_LIBS = @LCMS_LIBS@
LD = @LD@
LDFLAGS = @LDFLAGS@
LIBEXIF_VERSION_CHECK_CFLAGS = @LIBEXIF_VERSION_CHECK_CFLAGS@
LIBEXIF_VERSION_CHECK_LIBS = @LIBEXIF_VERSION_CHECK_LIBS@
-LIBGPHOTO2_CFLAGS = @LIBGPHOTO2_CFLAGS@
-LIBGPHOTO2_LIBS = @LIBGPHOTO2_LIBS@
LIBJPEG = @LIBJPEG@
LIBOBJS = @LIBOBJS@
LIBS = @LIBS@
@@ -182,6 +201,12 @@ MCS = @MCS@
MKDIR_P = @MKDIR_P@
MKINSTALLDIRS = @MKINSTALLDIRS@
MONO = @MONO@
+MONO_ADDINS_CFLAGS = @MONO_ADDINS_CFLAGS@
+MONO_ADDINS_GUI_CFLAGS = @MONO_ADDINS_GUI_CFLAGS@
+MONO_ADDINS_GUI_LIBS = @MONO_ADDINS_GUI_LIBS@
+MONO_ADDINS_LIBS = @MONO_ADDINS_LIBS@
+MONO_ADDINS_SETUP_CFLAGS = @MONO_ADDINS_SETUP_CFLAGS@
+MONO_ADDINS_SETUP_LIBS = @MONO_ADDINS_SETUP_LIBS@
MONO_MODULE_CFLAGS = @MONO_MODULE_CFLAGS@
MONO_MODULE_LIBS = @MONO_MODULE_LIBS@
MSGFMT = @MSGFMT@
@@ -192,7 +217,6 @@ NDESK_DBUS_LIBS = @NDESK_DBUS_LIBS@
NM = @NM@
NMEDIT = @NMEDIT@
NUNIT_CFLAGS = @NUNIT_CFLAGS@
-NUNIT_DEFINES = @NUNIT_DEFINES@
NUNIT_LIBS = @NUNIT_LIBS@
OBJC = @OBJC@
OBJDUMP = @OBJDUMP@
@@ -284,24 +308,8 @@ target_alias = @target_alias@
top_build_prefix = @top_build_prefix@
top_builddir = @top_builddir@
top_srcdir = @top_srcdir@
-DIR_DOCS = $(top_builddir)/docs
-DIR_EXTENSIONS = $(top_builddir)/extensions
-DIR_GPHOTO2 = $(top_builddir)/lib/libgphoto2-sharp
-DIR_ICONS = $(top_builddir)/icons
-DIR_JPEGTRAN = $(top_builddir)/lib/libjpegtran
-DIR_KEYRING = $(top_builddir)/lib/gnome-keyring-sharp
-DIR_LIBFSPOT = $(top_builddir)/lib/libfspot
-DIR_SEMWEB = $(top_builddir)/lib/semweb
-DIR_SRC = $(top_builddir)/src
DIR_GIOSHARP = $(top_builddir)/lib/gio-sharp/gio
-DIR_GTKSHARPBEANS = $(top_builddir)/lib/gtk-sharp-beans
-DIR_UNIQUESHARP = $(top_builddir)/lib/unique-sharp/unique
-LINK_KEYRING = -r:$(DIR_KEYRING)/gnome-keyring-sharp.dll
-LINK_GPHOTO2 = -r:$(DIR_GPHOTO2)/libgphoto2-sharp.dll
-LINK_SEMWEB = -r:$(DIR_SEMWEB)/SemWeb.dll
LINK_GIOSHARP = -r:$(DIR_GIOSHARP)/gio-sharp.dll
-LINK_GTKSHARPBEANS = -r:$(DIR_GTKSHARPBEANS)/gtk-sharp-beans.dll
-LINK_UNIQUESHARP = -r:$(DIR_UNIQUESHARP)/unique-sharp.dll
CSC_FLAGS = -debug
CSC = $(MCS) $(CSC_FLAGS) -target:exe
CSC_LIB = $(MCS) $(CSC_FLAGS) -target:library
diff --git a/lib/Hyena/src/Hyena.Data.Sqlite/Hyena.Data.Sqlite/DatabaseColumn.cs b/lib/Hyena/src/Hyena.Data.Sqlite/Hyena.Data.Sqlite/DatabaseColumn.cs
new file mode 100644
index 0000000..e37bbbc
--- /dev/null
+++ b/lib/Hyena/src/Hyena.Data.Sqlite/Hyena.Data.Sqlite/DatabaseColumn.cs
@@ -0,0 +1,202 @@
+//
+// DatabaseColumn.cs
+//
+// Author:
+// Scott Peterson <lunchtimemama at gmail.com>
+//
+// Copyright (C) 2007 Novell, Inc.
+//
+// Permission is hereby granted, free of charge, to any person obtaining
+// a copy of this software and associated documentation files (the
+// "Software"), to deal in the Software without restriction, including
+// without limitation the rights to use, copy, modify, merge, publish,
+// distribute, sublicense, and/or sell copies of the Software, and to
+// permit persons to whom the Software is furnished to do so, subject to
+// the following conditions:
+//
+// The above copyright notice and this permission notice shall be
+// included in all copies or substantial portions of the Software.
+//
+// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
+// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
+// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
+// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+//
+
+using System;
+using System.Data;
+using System.Reflection;
+using System.Text;
+
+namespace Hyena.Data.Sqlite
+{
+ public abstract class AbstractDatabaseColumn
+ {
+ private readonly FieldInfo field_info;
+ private readonly PropertyInfo property_info;
+ private readonly Type type;
+ private readonly string column_type;
+ private readonly string name;
+
+ protected AbstractDatabaseColumn (FieldInfo field_info, AbstractDatabaseColumnAttribute attribute)
+ : this (attribute, field_info, field_info.FieldType)
+ {
+ this.field_info = field_info;
+ }
+
+ protected AbstractDatabaseColumn (PropertyInfo property_info, AbstractDatabaseColumnAttribute attribute) :
+ this (attribute, property_info, property_info.PropertyType)
+ {
+ if (!property_info.CanRead || (attribute.Select && !property_info.CanWrite)) {
+ throw new Exception (String.Format (
+ "{0}: The property {1} must have both a get and a set " +
+ "block in order to be bound to a database column.",
+ property_info.DeclaringType,
+ property_info.Name)
+ );
+ }
+ this.property_info = property_info;
+ }
+
+ private AbstractDatabaseColumn (AbstractDatabaseColumnAttribute attribute, MemberInfo member_info, Type type)
+ {
+ try {
+ column_type = SqliteUtils.GetType (type);
+ } catch (Exception e) {
+ throw new Exception(string.Format(
+ "{0}.{1}: {2}", member_info.DeclaringType, member_info.Name, e.Message));
+ }
+ this.name = attribute.ColumnName ?? member_info.Name;
+ this.type = type;
+ }
+
+ public object GetRawValue (object target)
+ {
+ return field_info != null ? field_info.GetValue (target) : property_info.GetValue (target, null);
+ }
+
+ public object GetValue (object target)
+ {
+ object result = field_info != null
+ ? field_info.GetValue (target)
+ : property_info.GetValue (target, null);
+ return SqliteUtils.ToDbFormat (type, result);
+ }
+
+ public void SetValue (object target, IDataReader reader, int column)
+ {
+ // FIXME should we insist on nullable types?
+ object value = reader.IsDBNull (column) ? null : reader.GetValue (column);
+ SetValue (target, SqliteUtils.FromDbFormat(type, value));
+ }
+
+ public void SetValue (object target, object value)
+ {
+ if (field_info != null) {
+ field_info.SetValue (target, value);
+ } else {
+ property_info.SetValue (target, value, null);
+ }
+ }
+
+ public string Name {
+ get { return name; }
+ }
+
+ public string Type {
+ get { return column_type; }
+ }
+ }
+
+ public sealed class DatabaseColumn : AbstractDatabaseColumn
+ {
+ private DatabaseColumnAttribute attribute;
+
+ public DatabaseColumn (FieldInfo field_info, DatabaseColumnAttribute attribute)
+ : base (field_info, attribute)
+ {
+ this.attribute = attribute;
+ }
+
+ public DatabaseColumn (PropertyInfo property_info, DatabaseColumnAttribute attribute)
+ : base (property_info, attribute)
+ {
+ this.attribute = attribute;
+ }
+
+ public DatabaseColumnConstraints Constraints {
+ get { return attribute.Constraints; }
+ }
+
+ public string DefaultValue {
+ get { return attribute.DefaultValue; }
+ }
+
+ public string Index {
+ get { return attribute.Index; }
+ }
+
+ public string Schema {
+ get {
+ return SqliteUtils.BuildColumnSchema (Type, Name, attribute.DefaultValue, attribute.Constraints);
+ }
+ }
+
+ public override bool Equals (object o)
+ {
+ DatabaseColumn column = o as DatabaseColumn;
+ return o != null && column.Name.Equals (Name);
+ }
+
+ public override int GetHashCode ()
+ {
+ return Name.GetHashCode ();
+ }
+ }
+
+ internal sealed class VirtualDatabaseColumn : AbstractDatabaseColumn
+ {
+ private VirtualDatabaseColumnAttribute attribute;
+
+ public VirtualDatabaseColumn (FieldInfo field_info, VirtualDatabaseColumnAttribute attribute)
+ : base (field_info, attribute)
+ {
+ this.attribute = attribute;
+ }
+
+ public VirtualDatabaseColumn (PropertyInfo property_info, VirtualDatabaseColumnAttribute attribute)
+ : base (property_info, attribute)
+ {
+ this.attribute = attribute;
+ }
+
+ public string TargetTable {
+ get { return attribute.TargetTable; }
+ }
+
+ public string LocalKey {
+ get { return attribute.LocalKey; }
+ }
+
+ public string ForeignKey {
+ get { return attribute.ForeignKey; }
+ }
+ }
+
+ public struct DbColumn
+ {
+ public readonly string Name;
+ public readonly DatabaseColumnConstraints Constraints;
+ public readonly string DefaultValue;
+
+ public DbColumn(string name, DatabaseColumnConstraints constraints, string default_value)
+ {
+ Name = name;
+ Constraints = constraints;
+ DefaultValue = default_value;
+ }
+ }
+}
diff --git a/lib/Hyena/src/Hyena.Data.Sqlite/Hyena.Data.Sqlite/DatabaseColumnAttribute.cs b/lib/Hyena/src/Hyena.Data.Sqlite/Hyena.Data.Sqlite/DatabaseColumnAttribute.cs
new file mode 100644
index 0000000..dc022ed
--- /dev/null
+++ b/lib/Hyena/src/Hyena.Data.Sqlite/Hyena.Data.Sqlite/DatabaseColumnAttribute.cs
@@ -0,0 +1,127 @@
+//
+// DatabaseColumnAttribute.cs
+//
+// Author:
+// Scott Peterson <lunchtimemama at gmail.com>
+//
+// Copyright (C) 2007 Novell, Inc.
+//
+// Permission is hereby granted, free of charge, to any person obtaining
+// a copy of this software and associated documentation files (the
+// "Software"), to deal in the Software without restriction, including
+// without limitation the rights to use, copy, modify, merge, publish,
+// distribute, sublicense, and/or sell copies of the Software, and to
+// permit persons to whom the Software is furnished to do so, subject to
+// the following conditions:
+//
+// The above copyright notice and this permission notice shall be
+// included in all copies or substantial portions of the Software.
+//
+// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
+// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
+// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
+// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+//
+
+using System;
+using System.Collections.Generic;
+using System.Data;
+using System.Reflection;
+using System.Text;
+
+namespace Hyena.Data.Sqlite
+{
+ [Flags]
+ public enum DatabaseColumnConstraints
+ {
+ NotNull = 1,
+ PrimaryKey = 2,
+ Unique = 4
+ }
+
+ public abstract class AbstractDatabaseColumnAttribute : Attribute
+ {
+ private string column_name;
+ private bool select = true;
+
+ public AbstractDatabaseColumnAttribute ()
+ {
+ }
+
+ public AbstractDatabaseColumnAttribute (string column_name)
+ {
+ this.column_name = column_name;
+ }
+
+ public string ColumnName {
+ get { return column_name; }
+ }
+
+ public bool Select {
+ get { return select; }
+ set { select = value; }
+ }
+ }
+
+ [AttributeUsage(AttributeTargets.Field | AttributeTargets.Property)]
+ public sealed class DatabaseColumnAttribute : AbstractDatabaseColumnAttribute
+ {
+ private DatabaseColumnConstraints contraints;
+ private string default_value;
+ private string index;
+
+ public DatabaseColumnAttribute ()
+ {
+ }
+
+ public DatabaseColumnAttribute (string column_name) : base (column_name)
+ {
+ }
+
+ public DatabaseColumnConstraints Constraints {
+ get { return contraints; }
+ set { contraints = value; }
+ }
+
+ public string DefaultValue {
+ get { return default_value; }
+ set { default_value = value; }
+ }
+
+ public string Index {
+ get { return index; }
+ set { index = value; }
+ }
+ }
+
+ [AttributeUsage(AttributeTargets.Field | AttributeTargets.Property)]
+ public sealed class VirtualDatabaseColumnAttribute : AbstractDatabaseColumnAttribute
+ {
+ private string target_table;
+ private string local_key;
+ private string foreign_key;
+
+ public VirtualDatabaseColumnAttribute (string column_name, string target_table, string local_key, string foreign_key)
+ : base (column_name)
+ {
+ this.target_table = target_table;
+ this.local_key = local_key;
+ this.foreign_key = foreign_key;
+ }
+
+ public string TargetTable {
+ get { return target_table; }
+ }
+
+ public string LocalKey {
+ get { return local_key; }
+ }
+
+ public string ForeignKey {
+ get { return foreign_key; }
+ }
+ }
+}
diff --git a/lib/Hyena/src/Hyena.Data.Sqlite/Hyena.Data.Sqlite/HyenaSqliteArrayDataReader.cs b/lib/Hyena/src/Hyena.Data.Sqlite/Hyena.Data.Sqlite/HyenaSqliteArrayDataReader.cs
new file mode 100644
index 0000000..7653995
--- /dev/null
+++ b/lib/Hyena/src/Hyena.Data.Sqlite/Hyena.Data.Sqlite/HyenaSqliteArrayDataReader.cs
@@ -0,0 +1,392 @@
+//
+// HyenaSqliteArrayDataReader.cs
+//
+// Authors:
+// Vladimir Vukicevic <vladimir at pobox.com>
+// Everaldo Canuto <everaldo_canuto at yahoo.com.br>
+// Joshua Tauberer <tauberer at for.net>
+// John Millikin <jmillikin at gmail.com>
+//
+// Copyright (C) 2002 Vladimir Vukicevic
+//
+// Permission is hereby granted, free of charge, to any person obtaining
+// a copy of this software and associated documentation files (the
+// "Software"), to deal in the Software without restriction, including
+// without limitation the rights to use, copy, modify, merge, publish,
+// distribute, sublicense, and/or sell copies of the Software, and to
+// permit persons to whom the Software is furnished to do so, subject to
+// the following conditions:
+//
+// The above copyright notice and this permission notice shall be
+// included in all copies or substantial portions of the Software.
+//
+// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
+// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
+// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
+// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+//
+
+using System;
+using System.Data;
+using System.Data.Common;
+using System.Text;
+using System.Collections;
+using System.Collections.Generic;
+using Mono.Data.Sqlite;
+
+namespace Hyena.Data.Sqlite
+{
+ /*
+ * Adapted from Mono.Data.SqliteClient.SqliteDataReader
+ *
+ * The new data reader in Mono.Data.Sqlite lazily loads the resultset
+ * from the underlying database cursor. This class reads the entire
+ * resultset into memory, allowing further queries to be executed before
+ * all data readers have been exhausted.
+ *
+ */
+
+ internal class HyenaSqliteArrayDataReader : MarshalByRefObject, IEnumerable, IDataReader, IDisposable, IDataRecord
+ {
+ #region Fields
+
+ private List<object[]> rows;
+ private string[] columns;
+ private Dictionary<string, int> column_names;
+ private int current_row;
+ private bool closed;
+ private int records_affected;
+ private string[] decltypes;
+
+ #endregion
+
+ #region Constructors and destructors
+
+ internal HyenaSqliteArrayDataReader (SqliteDataReader reader)
+ {
+ rows = new List<object[]> ();
+ column_names = new Dictionary<string, int> ();
+ closed = false;
+ current_row = -1;
+ ReadAllRows (reader);
+ reader.Dispose ();
+ }
+
+ #endregion
+
+ #region Properties
+
+ public int Depth {
+ get { return 0; }
+ }
+
+ public int FieldCount {
+ get { return columns.Length; }
+ }
+
+ public object this[string name] {
+ get {
+ return GetValue (GetOrdinal (name));
+ }
+ }
+
+ public object this[int i] {
+ get { return GetValue (i); }
+ }
+
+ public bool IsClosed {
+ get { return closed; }
+ }
+
+ public int RecordsAffected {
+ get { return records_affected; }
+ }
+
+ #endregion
+
+ private void ReadAllRows (SqliteDataReader reader)
+ {
+ int ii, field_count = reader.FieldCount;
+
+ /* Metadata */
+ records_affected = reader.RecordsAffected;
+
+ decltypes = new string[field_count];
+ for (ii = 0; ii < field_count; ii++) {
+ decltypes[ii] = reader.GetDataTypeName (ii);
+ }
+
+ columns = new string[field_count];
+ for (ii = 0; ii < field_count; ii++) {
+ string column_name = reader.GetName (ii);
+ columns[ii] = column_name;
+ column_names[column_name] = ii;
+ column_names[column_name.ToUpper ()] = ii;
+ }
+
+ /* Read all rows, store in this->rows */
+ while (reader.Read ()) {
+ object[] data_row = new object[field_count];
+ for (ii = 0; ii < field_count; ii++) {
+ object value = reader.GetValue (ii);
+ if (Convert.IsDBNull (value))
+ value = null;
+ data_row[ii] = value;
+ }
+
+ rows.Add (data_row);
+ }
+ }
+
+ #region Public Methods
+
+ public void Close ()
+ {
+ closed = true;
+ }
+
+ public void Dispose ()
+ {
+ Close ();
+ }
+
+ IEnumerator IEnumerable.GetEnumerator ()
+ {
+ return new DbEnumerator (this);
+ }
+
+ public DataTable GetSchemaTable ()
+ {
+ DataTable dataTableSchema = new DataTable ();
+
+ dataTableSchema.Columns.Add ("ColumnName", typeof (String));
+ dataTableSchema.Columns.Add ("ColumnOrdinal", typeof (Int32));
+ dataTableSchema.Columns.Add ("ColumnSize", typeof (Int32));
+ dataTableSchema.Columns.Add ("NumericPrecision", typeof (Int32));
+ dataTableSchema.Columns.Add ("NumericScale", typeof (Int32));
+ dataTableSchema.Columns.Add ("IsUnique", typeof (Boolean));
+ dataTableSchema.Columns.Add ("IsKey", typeof (Boolean));
+ dataTableSchema.Columns.Add ("BaseCatalogName", typeof (String));
+ dataTableSchema.Columns.Add ("BaseColumnName", typeof (String));
+ dataTableSchema.Columns.Add ("BaseSchemaName", typeof (String));
+ dataTableSchema.Columns.Add ("BaseTableName", typeof (String));
+ dataTableSchema.Columns.Add ("DataType", typeof(Type));
+ dataTableSchema.Columns.Add ("AllowDBNull", typeof (Boolean));
+ dataTableSchema.Columns.Add ("ProviderType", typeof (Int32));
+ dataTableSchema.Columns.Add ("IsAliased", typeof (Boolean));
+ dataTableSchema.Columns.Add ("IsExpression", typeof (Boolean));
+ dataTableSchema.Columns.Add ("IsIdentity", typeof (Boolean));
+ dataTableSchema.Columns.Add ("IsAutoIncrement", typeof (Boolean));
+ dataTableSchema.Columns.Add ("IsRowVersion", typeof (Boolean));
+ dataTableSchema.Columns.Add ("IsHidden", typeof (Boolean));
+ dataTableSchema.Columns.Add ("IsLong", typeof (Boolean));
+ dataTableSchema.Columns.Add ("IsReadOnly", typeof (Boolean));
+
+ dataTableSchema.BeginLoadData();
+ for (int i = 0; i < this.FieldCount; i += 1 ) {
+
+ DataRow schemaRow = dataTableSchema.NewRow ();
+
+ schemaRow["ColumnName"] = columns[i];
+ schemaRow["ColumnOrdinal"] = i;
+ schemaRow["ColumnSize"] = 0;
+ schemaRow["NumericPrecision"] = 0;
+ schemaRow["NumericScale"] = 0;
+ schemaRow["IsUnique"] = false;
+ schemaRow["IsKey"] = false;
+ schemaRow["BaseCatalogName"] = "";
+ schemaRow["BaseColumnName"] = columns[i];
+ schemaRow["BaseSchemaName"] = "";
+ schemaRow["BaseTableName"] = "";
+ schemaRow["DataType"] = typeof(string);
+ schemaRow["AllowDBNull"] = true;
+ schemaRow["ProviderType"] = 0;
+ schemaRow["IsAliased"] = false;
+ schemaRow["IsExpression"] = false;
+ schemaRow["IsIdentity"] = false;
+ schemaRow["IsAutoIncrement"] = false;
+ schemaRow["IsRowVersion"] = false;
+ schemaRow["IsHidden"] = false;
+ schemaRow["IsLong"] = false;
+ schemaRow["IsReadOnly"] = false;
+
+ dataTableSchema.Rows.Add (schemaRow);
+ schemaRow.AcceptChanges();
+ }
+ dataTableSchema.EndLoadData();
+
+ return dataTableSchema;
+ }
+
+ public bool NextResult ()
+ {
+ current_row++;
+
+ return current_row < rows.Count;
+ }
+
+ public bool Read ()
+ {
+ return NextResult ();
+ }
+
+ #endregion
+
+ #region IDataRecord getters
+
+ public bool GetBoolean (int i)
+ {
+ return Convert.ToBoolean (rows[current_row][i]);
+ }
+
+ public byte GetByte (int i)
+ {
+ return Convert.ToByte (rows[current_row][i]);
+ }
+
+ public long GetBytes (int i, long fieldOffset, byte[] buffer, int bufferOffset, int length)
+ {
+ byte[] data = (byte[])(rows[current_row][i]);
+ if (buffer != null)
+ Array.Copy (data, fieldOffset, buffer, bufferOffset, length);
+ return data.LongLength - fieldOffset;
+ }
+
+ public char GetChar (int i)
+ {
+ return Convert.ToChar (rows[current_row][i]);
+ }
+
+ public long GetChars (int i, long fieldOffset, char[] buffer, int bufferOffset, int length)
+ {
+ char[] data = (char[])(rows[current_row][i]);
+ if (buffer != null)
+ Array.Copy (data, fieldOffset, buffer, bufferOffset, length);
+ return data.LongLength - fieldOffset;
+ }
+
+ public IDataReader GetData (int i)
+ {
+ return ((IDataReader) this [i]);
+ }
+
+ public string GetDataTypeName (int i)
+ {
+ if (decltypes != null && decltypes[i] != null)
+ return decltypes[i];
+ return "text"; // SQL Lite data type
+ }
+
+ public DateTime GetDateTime (int i)
+ {
+ return Convert.ToDateTime (rows[current_row][i]);
+ }
+
+ public decimal GetDecimal (int i)
+ {
+ return Convert.ToDecimal (rows[current_row][i]);
+ }
+
+ public double GetDouble (int i)
+ {
+ return Convert.ToDouble (rows[current_row][i]);
+ }
+
+ public Type GetFieldType (int i)
+ {
+ int row = current_row;
+ if (row == -1 && rows.Count == 0) return typeof(string);
+ if (row == -1) row = 0;
+ object element = rows[row][i];
+ if (element != null)
+ return element.GetType();
+ else
+ return typeof (string);
+
+ // Note that the return value isn't guaranteed to
+ // be the same as the rows are read if different
+ // types of information are stored in the column.
+ }
+
+ public float GetFloat (int i)
+ {
+ return Convert.ToSingle (rows[current_row][i]);
+ }
+
+ public Guid GetGuid (int i)
+ {
+ object value = GetValue (i);
+ if (!(value is Guid)) {
+ if (value is DBNull)
+ throw new SqliteException ("Column value must not be null");
+ throw new InvalidCastException ("Type is " + value.GetType ().ToString ());
+ }
+ return ((Guid) value);
+ }
+
+ public short GetInt16 (int i)
+ {
+ return Convert.ToInt16 (rows[current_row][i]);
+ }
+
+ public int GetInt32 (int i)
+ {
+ return Convert.ToInt32 (rows[current_row][i]);
+ }
+
+ public long GetInt64 (int i)
+ {
+ return Convert.ToInt64 (rows[current_row][i]);
+ }
+
+ public string GetName (int i)
+ {
+ return columns[i];
+ }
+
+ public int GetOrdinal (string name)
+ {
+ int v = -1;
+ if (!column_names.TryGetValue (name, out v)) {
+ if (!column_names.TryGetValue (name.ToUpper (), out v)) {
+ throw new ArgumentException("Column does not exist.");
+ }
+ }
+ return v;
+ }
+
+ public string GetString (int i)
+ {
+ return rows[current_row][i].ToString();
+ }
+
+ public object GetValue (int i)
+ {
+ return rows[current_row][i];
+ }
+
+ public int GetValues (object[] values)
+ {
+ int num_to_fill = System.Math.Min (values.Length, columns.Length);
+ for (int i = 0; i < num_to_fill; i++) {
+ if (rows[current_row][i] != null) {
+ values[i] = rows[current_row][i];
+ } else {
+ values[i] = null;
+ }
+ }
+ return num_to_fill;
+ }
+
+ public bool IsDBNull (int i)
+ {
+ return rows[current_row][i] == null;
+ }
+
+ #endregion
+ }
+}
+// vi:tabstop=4:expandtab
diff --git a/lib/Hyena/src/Hyena.Data.Sqlite/Hyena.Data.Sqlite/HyenaSqliteCommand.cs b/lib/Hyena/src/Hyena.Data.Sqlite/Hyena.Data.Sqlite/HyenaSqliteCommand.cs
new file mode 100644
index 0000000..a550d0a
--- /dev/null
+++ b/lib/Hyena/src/Hyena.Data.Sqlite/Hyena.Data.Sqlite/HyenaSqliteCommand.cs
@@ -0,0 +1,290 @@
+//
+// HyenaSqliteCommand.cs
+//
+// Authors:
+// Aaron Bockover <abockover at novell.com>
+// Gabriel Burt <gburt at novell.com>
+//
+// Copyright (C) 2007-2008 Novell, Inc.
+//
+// Permission is hereby granted, free of charge, to any person obtaining
+// a copy of this software and associated documentation files (the
+// "Software"), to deal in the Software without restriction, including
+// without limitation the rights to use, copy, modify, merge, publish,
+// distribute, sublicense, and/or sell copies of the Software, and to
+// permit persons to whom the Software is furnished to do so, subject to
+// the following conditions:
+//
+// The above copyright notice and this permission notice shall be
+// included in all copies or substantial portions of the Software.
+//
+// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
+// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
+// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
+// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+//
+
+using System;
+using System.IO;
+using System.Data;
+using System.Text;
+using System.Threading;
+using Mono.Data.Sqlite;
+
+namespace Hyena.Data.Sqlite
+{
+ public class CommandExecutedArgs : EventArgs
+ {
+ public CommandExecutedArgs (string sql, int ms)
+ {
+ Sql = sql;
+ Ms = ms;
+ }
+
+ public string Sql;
+ public int Ms;
+ }
+
+ public class HyenaSqliteCommand
+ {
+ private object result = null;
+ private Exception execution_exception = null;
+ private bool finished = false;
+
+ private ManualResetEvent finished_event = new ManualResetEvent (true);
+ private string command;
+ private string command_format = null;
+ private string command_formatted = null;
+ private int parameter_count = 0;
+ private object [] current_values;
+ private int ticks;
+
+ public string Text {
+ get { return command; }
+ }
+
+ internal HyenaCommandType CommandType;
+
+ public HyenaSqliteCommand (string command)
+ {
+ this.command = command;
+ }
+
+ public HyenaSqliteCommand (string command, params object [] param_values)
+ {
+ this.command = command;
+ ApplyValues (param_values);
+ }
+
+ internal void Execute (HyenaSqliteConnection hconnection, SqliteConnection connection)
+ {
+ if (finished) {
+ throw new Exception ("Command is already set to finished; result needs to be claimed before command can be rerun");
+ }
+
+ execution_exception = null;
+ result = null;
+ int execution_ms = 0;
+
+ using (SqliteCommand sql_command = new SqliteCommand (CurrentSqlText)) {
+ sql_command.Connection = connection;
+
+ hconnection.OnExecuting (sql_command);
+
+ try {
+ ticks = System.Environment.TickCount;
+
+ switch (CommandType) {
+ case HyenaCommandType.Reader:
+ using (SqliteDataReader reader = sql_command.ExecuteReader ()) {
+ result = new HyenaSqliteArrayDataReader (reader);
+ }
+ break;
+
+ case HyenaCommandType.Scalar:
+ result = sql_command.ExecuteScalar ();
+ break;
+
+ case HyenaCommandType.Execute:
+ default:
+ sql_command.ExecuteNonQuery ();
+ result = sql_command.LastInsertRowID ();
+ break;
+ }
+
+ execution_ms = System.Environment.TickCount - ticks;
+ if (log_all) {
+ Log.DebugFormat ("Executed in {0}ms {1}", execution_ms, sql_command.CommandText);
+ }
+ } catch (Exception e) {
+ Log.DebugFormat ("Exception executing command: {0}", sql_command.CommandText);
+ execution_exception = e;
+ }
+ }
+
+ // capture the text
+ string raise_text = null;
+ if (raise_command_executed && execution_ms >= raise_command_executed_threshold_ms) {
+ raise_text = Text;
+ }
+
+ finished_event.Reset ();
+ finished = true;
+
+ if (raise_command_executed && execution_ms >= raise_command_executed_threshold_ms) {
+ var handler = CommandExecuted;
+ if (handler != null) {
+
+ // Don't raise this on this thread; this thread is dedicated for use by the db connection
+ ThreadAssist.ProxyToMain (delegate {
+ handler (this, new CommandExecutedArgs (raise_text, execution_ms));
+ });
+ }
+ }
+ }
+
+ internal object WaitForResult (HyenaSqliteConnection conn)
+ {
+ while (!finished) {
+ conn.ResultReadySignal.WaitOne ();
+ }
+
+ // Reference the results since they could be overwritten
+ object ret = result;
+ var exception = execution_exception;
+
+ // Reset to false in case run again
+ finished = false;
+
+ conn.ClaimResult ();
+ finished_event.Set ();
+
+ if (exception != null) {
+ throw exception;
+ }
+
+ return ret;
+ }
+
+ internal void WaitIfNotFinished ()
+ {
+ finished_event.WaitOne ();
+ }
+
+ internal HyenaSqliteCommand ApplyValues (params object [] param_values)
+ {
+ if (command_format == null) {
+ CreateParameters ();
+ }
+
+ // Special case for if a single null values is the paramter array
+ if (parameter_count == 1 && param_values == null) {
+ current_values = new object [] { "NULL" };
+ command_formatted = null;
+ return this;
+ }
+
+ if (param_values.Length != parameter_count) {
+ throw new ArgumentException (String.Format (
+ "Command {2} has {0} parameters, but {1} values given.", parameter_count, param_values.Length, command
+ ));
+ }
+
+ // Transform values as necessary - not needed for numerical types
+ for (int i = 0; i < parameter_count; i++) {
+ param_values[i] = SqlifyObject (param_values[i]);
+ }
+
+ current_values = param_values;
+ command_formatted = null;
+ return this;
+ }
+
+ public static object SqlifyObject (object o)
+ {
+ if (o is string) {
+ return String.Format ("'{0}'", (o as string).Replace ("'", "''"));
+ } else if (o is DateTime) {
+ return DateTimeUtil.FromDateTime ((DateTime) o);
+ } else if (o is bool) {
+ return ((bool)o) ? "1" : "0";
+ } else if (o == null) {
+ return "NULL";
+ } else if (o is byte[]) {
+ string hex = BitConverter.ToString (o as byte[]).Replace ("-", "");
+ return String.Format ("X'{0}'", hex);
+ } else if (o is Array) {
+ StringBuilder sb = new StringBuilder ();
+ bool first = true;
+ foreach (object i in (o as Array)) {
+ if (!first)
+ sb.Append (",");
+ else
+ first = false;
+
+ sb.Append (SqlifyObject (i));
+ }
+ return sb.ToString ();
+ } else {
+ return o;
+ }
+ }
+
+ private string CurrentSqlText {
+ get {
+ if (command_format == null) {
+ return command;
+ }
+
+ if (command_formatted == null) {
+ command_formatted = String.Format (System.Globalization.CultureInfo.InvariantCulture, command_format, current_values);
+ }
+
+ return command_formatted;
+ }
+ }
+
+ private void CreateParameters ()
+ {
+ StringBuilder sb = new StringBuilder ();
+ foreach (char c in command) {
+ if (c == '?') {
+ sb.Append ('{');
+ sb.Append (parameter_count++);
+ sb.Append ('}');
+ } else {
+ sb.Append (c);
+ }
+ }
+ command_format = sb.ToString ();
+ }
+
+ #region Static Debugging Facilities
+
+ private static bool log_all = false;
+ public static bool LogAll {
+ get { return log_all; }
+ set { log_all = value; }
+ }
+
+ public delegate void CommandExecutedHandler (object o, CommandExecutedArgs args);
+ public static event CommandExecutedHandler CommandExecuted;
+
+ private static bool raise_command_executed = false;
+ public static bool RaiseCommandExecuted {
+ get { return raise_command_executed; }
+ set { raise_command_executed = value; }
+ }
+
+ private static int raise_command_executed_threshold_ms = 400;
+ public static int RaiseCommandExecutedThresholdMs {
+ get { return raise_command_executed_threshold_ms; }
+ set { raise_command_executed_threshold_ms = value; }
+ }
+
+ #endregion
+ }
+}
diff --git a/lib/Hyena/src/Hyena.Data.Sqlite/Hyena.Data.Sqlite/HyenaSqliteConnection.cs b/lib/Hyena/src/Hyena.Data.Sqlite/Hyena.Data.Sqlite/HyenaSqliteConnection.cs
new file mode 100644
index 0000000..99c6aa0
--- /dev/null
+++ b/lib/Hyena/src/Hyena.Data.Sqlite/Hyena.Data.Sqlite/HyenaSqliteConnection.cs
@@ -0,0 +1,477 @@
+//
+// HyenaSqliteConnection.cs
+//
+// Authors:
+// Aaron Bockover <abockover at novell.com>
+// Gabriel Burt <gburt at novell.com>
+//
+// Copyright (C) 2005-2008 Novell, Inc.
+//
+// Permission is hereby granted, free of charge, to any person obtaining
+// a copy of this software and associated documentation files (the
+// "Software"), to deal in the Software without restriction, including
+// without limitation the rights to use, copy, modify, merge, publish,
+// distribute, sublicense, and/or sell copies of the Software, and to
+// permit persons to whom the Software is furnished to do so, subject to
+// the following conditions:
+//
+// The above copyright notice and this permission notice shall be
+// included in all copies or substantial portions of the Software.
+//
+// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
+// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
+// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
+// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+//
+
+using System;
+using System.Data;
+using System.Threading;
+using System.Collections.Generic;
+using Mono.Data.Sqlite;
+
+namespace Hyena.Data.Sqlite
+{
+ public class HyenaDataReader : IDisposable
+ {
+ private IDataReader reader;
+ private bool read = false;
+
+ public IDataReader Reader {
+ get { return reader; }
+ }
+
+ public HyenaDataReader (IDataReader reader)
+ {
+ this.reader = reader;
+ }
+
+ public T Get<T> (int i)
+ {
+ if (!read) {
+ Read ();
+ }
+ return (T) SqliteUtils.FromDbFormat (typeof(T), reader[i]);
+ }
+
+ public bool Read ()
+ {
+ read = true;
+ return reader.Read ();
+ }
+
+ public void Dispose ()
+ {
+ reader.Dispose ();
+ reader = null;
+ }
+ }
+
+ public class ExecutingEventArgs : EventArgs
+ {
+ public readonly SqliteCommand Command;
+ public ExecutingEventArgs (SqliteCommand command)
+ {
+ Command = command;
+ }
+ }
+
+ public enum HyenaCommandType {
+ Reader,
+ Scalar,
+ Execute,
+ }
+
+ public class HyenaSqliteConnection : IDisposable
+ {
+ private SqliteConnection connection;
+ private string dbpath;
+
+ // These are 'parallel' queues; that is, when a value is pushed or popped to
+ // one, a value is pushed or popped to all three.
+ // The 1st contains the command object itself, and the 2nd and 3rd contain the
+ // arguments to be applied to that command (filled in for any ? placeholder in the command).
+ // The 3rd exists as an optimization to avoid making an object [] for a single arg.
+ private Queue<HyenaSqliteCommand> command_queue = new Queue<HyenaSqliteCommand>();
+ private Queue<object[]> args_queue = new Queue<object[]>();
+ private Queue<object> arg_queue = new Queue<object>();
+
+ private Thread queue_thread;
+ private volatile bool dispose_requested = false;
+ private volatile int results_ready = 0;
+ private AutoResetEvent queue_signal = new AutoResetEvent (false);
+ internal ManualResetEvent ResultReadySignal = new ManualResetEvent (false);
+
+ private volatile Thread transaction_thread = null;
+ private ManualResetEvent transaction_signal = new ManualResetEvent (true);
+
+ private Thread warn_if_called_from_thread;
+ public Thread WarnIfCalledFromThread {
+ get { return warn_if_called_from_thread; }
+ set { warn_if_called_from_thread = value; }
+ }
+
+ public event EventHandler<ExecutingEventArgs> Executing;
+
+ public HyenaSqliteConnection(string dbpath)
+ {
+ this.dbpath = dbpath;
+ queue_thread = new Thread(ProcessQueue);
+ queue_thread.Name = String.Format ("HyenaSqliteConnection ({0})", dbpath);
+ queue_thread.IsBackground = true;
+ queue_thread.Start();
+ }
+
+#region Public Query Methods
+
+ // TODO special case for single object param to avoid object []
+
+ // SELECT multiple column queries
+ public IDataReader Query (HyenaSqliteCommand command)
+ {
+ command.CommandType = HyenaCommandType.Reader;
+ QueueCommand (command);
+ return command.WaitForResult (this) as IDataReader;
+ }
+
+ public IDataReader Query (HyenaSqliteCommand command, params object [] param_values)
+ {
+ command.CommandType = HyenaCommandType.Reader;
+ QueueCommand (command, param_values);
+ return command.WaitForResult (this) as IDataReader;
+ }
+
+ public IDataReader Query (string command_str, params object [] param_values)
+ {
+ return Query (new HyenaSqliteCommand (command_str, param_values));
+ }
+
+ public IDataReader Query (object command)
+ {
+ return Query (new HyenaSqliteCommand (command.ToString ()));
+ }
+
+ // SELECT single column, multiple rows queries
+ public IEnumerable<T> QueryEnumerable<T> (HyenaSqliteCommand command)
+ {
+ Type type = typeof (T);
+ using (IDataReader reader = Query (command)) {
+ while (reader.Read ()) {
+ yield return (T) SqliteUtils.FromDbFormat (type, reader[0]);
+ }
+ }
+ }
+
+ public IEnumerable<T> QueryEnumerable<T> (HyenaSqliteCommand command, params object [] param_values)
+ {
+ Type type = typeof (T);
+ using (IDataReader reader = Query (command, param_values)) {
+ while (reader.Read ()) {
+ yield return (T) SqliteUtils.FromDbFormat (type, reader[0]);
+ }
+ }
+ }
+
+ public IEnumerable<T> QueryEnumerable<T> (string command_str, params object [] param_values)
+ {
+ return QueryEnumerable<T> (new HyenaSqliteCommand (command_str, param_values));
+ }
+
+ public IEnumerable<T> QueryEnumerable<T> (object command)
+ {
+ return QueryEnumerable<T> (new HyenaSqliteCommand (command.ToString ()));
+ }
+
+ // SELECT single column, single row queries
+ public T Query<T> (HyenaSqliteCommand command)
+ {
+ command.CommandType = HyenaCommandType.Scalar;
+ QueueCommand (command);
+ object result = command.WaitForResult (this);
+ return (T)SqliteUtils.FromDbFormat (typeof (T), result);
+ }
+
+ public T Query<T> (HyenaSqliteCommand command, params object [] param_values)
+ {
+ command.CommandType = HyenaCommandType.Scalar;
+ QueueCommand (command, param_values);
+ object result = command.WaitForResult (this);
+ return (T)SqliteUtils.FromDbFormat (typeof (T), result);
+ }
+
+ public T Query<T> (string command_str, params object [] param_values)
+ {
+ return Query<T> (new HyenaSqliteCommand (command_str, param_values));
+ }
+
+ public T Query<T> (object command)
+ {
+ return Query<T> (new HyenaSqliteCommand (command.ToString ()));
+ }
+
+ // INSERT, UPDATE, DELETE queries
+ public int Execute (HyenaSqliteCommand command)
+ {
+ command.CommandType = HyenaCommandType.Execute;;
+ QueueCommand(command);
+ return Convert.ToInt32 (command.WaitForResult (this));
+ }
+
+ public int Execute (HyenaSqliteCommand command, params object [] param_values)
+ {
+ command.CommandType = HyenaCommandType.Execute;;
+ QueueCommand(command, param_values);
+ return Convert.ToInt32 (command.WaitForResult (this));
+ }
+
+ public int Execute (string command_str, params object [] param_values)
+ {
+ return Execute (new HyenaSqliteCommand (command_str, param_values));
+ }
+
+ public int Execute (object command)
+ {
+ return Execute (new HyenaSqliteCommand (command.ToString ()));
+ }
+
+#endregion
+
+#region Public Utility Methods
+
+ public void BeginTransaction ()
+ {
+ if (transaction_thread == Thread.CurrentThread) {
+ throw new Exception ("Can't start a recursive transaction");
+ }
+
+ while (transaction_thread != Thread.CurrentThread) {
+ if (transaction_thread != null) {
+ // Wait for the existing transaction to finish before this thread proceeds
+ transaction_signal.WaitOne ();
+ }
+
+ lock (command_queue) {
+ if (transaction_thread == null) {
+ transaction_thread = Thread.CurrentThread;
+ transaction_signal.Reset ();
+ }
+ }
+ }
+
+ Execute ("BEGIN TRANSACTION");
+ }
+
+ public void CommitTransaction ()
+ {
+ if (transaction_thread != Thread.CurrentThread) {
+ throw new Exception ("Can't commit from outside a transaction");
+ }
+
+ Execute ("COMMIT TRANSACTION");
+
+ lock (command_queue) {
+ transaction_thread = null;
+ // Let any other threads continue
+ transaction_signal.Set ();
+ }
+ }
+
+ public void RollbackTransaction ()
+ {
+ if (transaction_thread != Thread.CurrentThread) {
+ throw new Exception ("Can't rollback from outside a transaction");
+ }
+
+ Execute ("ROLLBACK");
+
+ lock (command_queue) {
+ transaction_thread = null;
+
+ // Let any other threads continue
+ transaction_signal.Set ();
+ }
+ }
+
+ public bool TableExists (string tableName)
+ {
+ return Exists ("table", tableName);
+ }
+
+ public bool IndexExists (string indexName)
+ {
+ return Exists ("index", indexName);
+ }
+
+ private bool Exists (string type, string name)
+ {
+ return Exists (type, name, "sqlite_master") || Exists (type, name, "sqlite_temp_master");
+ }
+
+ private bool Exists (string type, string name, string master)
+ {
+ return Query<int> (String.Format (
+ "SELECT COUNT(*) FROM {0} WHERE Type='{1}' AND Name='{2}'",
+ master, type, name)
+ ) > 0;
+ }
+
+ private delegate void SchemaHandler (string column);
+
+ private void SchemaClosure (string table_name, SchemaHandler code)
+ {
+ string sql = Query<string> (String.Format (
+ "SELECT sql FROM sqlite_master WHERE Name='{0}'", table_name));
+ if (String.IsNullOrEmpty (sql)) {
+ return;
+ }
+ sql = sql.Substring (sql.IndexOf ('(') + 1);
+ foreach (string column_def in sql.Split (',')) {
+ string column_def_t = column_def.Trim ();
+ int ws_index = column_def_t.IndexOfAny (ws_chars);
+ code (column_def_t.Substring (0, ws_index));
+ }
+ }
+
+ public bool ColumnExists (string tableName, string columnName)
+ {
+ bool value = false;
+ SchemaClosure (tableName, delegate (string column) {
+ if (column == columnName) {
+ value = true;
+ return;
+ }
+ });
+ return value;
+ }
+
+ private static readonly char [] ws_chars = new char [] { ' ', '\t', '\n', '\r' };
+ public IDictionary<string, string> GetSchema (string table_name)
+ {
+ Dictionary<string, string> schema = new Dictionary<string,string> ();
+ SchemaClosure (table_name, delegate (string column) {
+ schema.Add (column.ToLower (), null);
+ });
+ return schema;
+ }
+
+#endregion
+
+#region Private Queue Methods
+
+ private void QueueCommand(HyenaSqliteCommand command, object [] args)
+ {
+ QueueCommand (command, null, args);
+ }
+
+ // TODO optimize object vs object [] code paths?
+ /*private void QueueCommand(HyenaSqliteCommand command, object arg)
+ {
+ QueueCommand (command, arg, null);
+ }*/
+
+ private void QueueCommand(HyenaSqliteCommand command)
+ {
+ QueueCommand (command, null, null);
+ }
+
+ private void QueueCommand(HyenaSqliteCommand command, object arg, object [] args)
+ {
+ if (warn_if_called_from_thread != null && Thread.CurrentThread == warn_if_called_from_thread) {
+ Hyena.Log.Warning ("HyenaSqliteConnection command issued from the main thread");
+ }
+
+ while (true) {
+ lock (command_queue) {
+ if (transaction_thread == null || Thread.CurrentThread == transaction_thread) {
+ command_queue.Enqueue (command);
+ args_queue.Enqueue (args);
+ arg_queue.Enqueue (arg);
+ break;
+ }
+ }
+
+ transaction_signal.WaitOne ();
+ }
+ queue_signal.Set ();
+ }
+
+ internal void ClaimResult ()
+ {
+ lock (command_queue) {
+ results_ready--;
+ if (results_ready == 0) {
+ ResultReadySignal.Reset ();
+ }
+ }
+ }
+
+ private void ProcessQueue()
+ {
+ if (connection == null) {
+ connection = new SqliteConnection (String.Format ("Version=3,URI=file:{0}", dbpath));
+ connection.Open ();
+ }
+
+ // Keep handling queries
+ while (!dispose_requested) {
+ while (command_queue.Count > 0) {
+ HyenaSqliteCommand command;
+ object [] args;
+ object arg;
+ lock (command_queue) {
+ command = command_queue.Dequeue ();
+ args = args_queue.Dequeue ();
+ arg = arg_queue.Dequeue ();
+ }
+
+ // Ensure the command is not altered while applying values or executing
+ lock (command) {
+ command.WaitIfNotFinished ();
+
+ if (arg != null) {
+ command.ApplyValues (arg);
+ } else if (args != null) {
+ command.ApplyValues (args);
+ }
+
+ command.Execute (this, connection);
+ }
+
+ lock (command_queue) {
+ results_ready++;
+ ResultReadySignal.Set ();
+ }
+ }
+
+ queue_signal.WaitOne ();
+ }
+
+ // Finish
+ connection.Close ();
+ }
+
+ internal void OnExecuting (SqliteCommand command)
+ {
+ EventHandler<ExecutingEventArgs> handler = Executing;
+ if (handler != null) {
+ handler (this, new ExecutingEventArgs (command));
+ }
+ }
+
+#endregion
+
+ public void Dispose()
+ {
+ dispose_requested = true;
+ queue_signal.Set ();
+ queue_thread.Join ();
+
+ queue_signal.Close ();
+ ResultReadySignal.Close ();
+ transaction_signal.Close ();
+ }
+ }
+}
diff --git a/lib/Hyena/src/Hyena.Data.Sqlite/Hyena.Data.Sqlite/ICacheableDatabaseModel.cs b/lib/Hyena/src/Hyena.Data.Sqlite/Hyena.Data.Sqlite/ICacheableDatabaseModel.cs
new file mode 100644
index 0000000..c0768ee
--- /dev/null
+++ b/lib/Hyena/src/Hyena.Data.Sqlite/Hyena.Data.Sqlite/ICacheableDatabaseModel.cs
@@ -0,0 +1,46 @@
+//
+// ICacheableDatabaseModel.cs
+//
+// Author:
+// Gabriel Burt <gburt at novell.com>
+//
+// Copyright (C) 2007 Novell, Inc.
+//
+// Permission is hereby granted, free of charge, to any person obtaining
+// a copy of this software and associated documentation files (the
+// "Software"), to deal in the Software without restriction, including
+// without limitation the rights to use, copy, modify, merge, publish,
+// distribute, sublicense, and/or sell copies of the Software, and to
+// permit persons to whom the Software is furnished to do so, subject to
+// the following conditions:
+//
+// The above copyright notice and this permission notice shall be
+// included in all copies or substantial portions of the Software.
+//
+// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
+// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
+// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
+// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+//
+
+using System.Data;
+
+using Hyena.Data;
+
+namespace Hyena.Data.Sqlite
+{
+ public interface ICacheableDatabaseModel : ICacheableModel
+ {
+ string ReloadFragment { get; }
+ string SelectAggregates { get; }
+ string JoinTable { get; }
+ string JoinFragment { get; }
+ string JoinPrimaryKey { get; }
+ string JoinColumn { get; }
+ bool CachesJoinTableEntries { get; }
+ bool CachesValues { get; }
+ }
+}
diff --git a/lib/Hyena/src/Hyena.Data.Sqlite/Hyena.Data.Sqlite/SqliteModelCache.cs b/lib/Hyena/src/Hyena.Data.Sqlite/Hyena.Data.Sqlite/SqliteModelCache.cs
new file mode 100644
index 0000000..e171362
--- /dev/null
+++ b/lib/Hyena/src/Hyena.Data.Sqlite/Hyena.Data.Sqlite/SqliteModelCache.cs
@@ -0,0 +1,503 @@
+//
+// SqliteModelCache.cs
+//
+// Authors:
+// Gabriel Burt <gburt at novell.com>
+// Scott Peterson <lunchtimemama at gmail.com>
+//
+// Copyright (C) 2007-2008 Novell, Inc.
+//
+// Permission is hereby granted, free of charge, to any person obtaining
+// a copy of this software and associated documentation files (the
+// "Software"), to deal in the Software without restriction, including
+// without limitation the rights to use, copy, modify, merge, publish,
+// distribute, sublicense, and/or sell copies of the Software, and to
+// permit persons to whom the Software is furnished to do so, subject to
+// the following conditions:
+//
+// The above copyright notice and this permission notice shall be
+// included in all copies or substantial portions of the Software.
+//
+// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
+// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
+// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
+// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+//
+
+using System;
+using System.Collections.Generic;
+using System.Data;
+using System.Text;
+
+using Hyena.Query;
+
+namespace Hyena.Data.Sqlite
+{
+ public class SqliteModelCache<T> : DictionaryModelCache<T> where T : ICacheableItem, new ()
+ {
+ private HyenaSqliteConnection connection;
+ private ICacheableDatabaseModel model;
+ private SqliteModelProvider<T> provider;
+ private HyenaSqliteCommand select_range_command;
+ private HyenaSqliteCommand select_single_command;
+ private HyenaSqliteCommand select_first_command;
+ private HyenaSqliteCommand count_command;
+ private HyenaSqliteCommand delete_selection_command;
+ private HyenaSqliteCommand save_selection_command;
+ private HyenaSqliteCommand get_selection_command;
+ private HyenaSqliteCommand indexof_command;
+
+ private string select_str;
+ private string reload_sql;
+ private string last_indexof_where_fragment;
+ private long uid;
+ private long selection_uid;
+ private long rows;
+ // private bool warm;
+ private long first_order_id;
+
+ public event Action<IDataReader> AggregatesUpdated;
+
+ public SqliteModelCache (HyenaSqliteConnection connection,
+ string uuid,
+ ICacheableDatabaseModel model,
+ SqliteModelProvider<T> provider)
+ : base (model)
+ {
+ this.connection = connection;
+ this.model = model;
+ this.provider = provider;
+
+ CheckCacheTable ();
+
+ if (model.SelectAggregates != null) {
+ if (model.CachesJoinTableEntries) {
+ count_command = new HyenaSqliteCommand (String.Format (@"
+ SELECT count(*), {0} FROM {1}{2} j
+ WHERE j.{4} IN (SELECT ItemID FROM {3} WHERE ModelID = ?)
+ AND {5} = j.{6}",
+ model.SelectAggregates, // eg sum(FileSize), sum(Duration)
+ provider.TableName, // eg CoreTracks
+ model.JoinFragment, // eg , CorePlaylistEntries
+ CacheTableName, // eg CoreCache
+ model.JoinPrimaryKey, // eg EntryID
+ provider.PrimaryKey, // eg CoreTracks.TrackID
+ model.JoinColumn // eg TrackID
+ ));
+ } else {
+ count_command = new HyenaSqliteCommand (String.Format (
+ "SELECT count(*), {0} FROM {1} WHERE {2} IN (SELECT ItemID FROM {3} WHERE ModelID = ?)",
+ model.SelectAggregates, provider.TableName, provider.PrimaryKey, CacheTableName
+ ));
+ }
+ } else {
+ count_command = new HyenaSqliteCommand (String.Format (
+ "SELECT COUNT(*) FROM {0} WHERE ModelID = ?", CacheTableName
+ ));
+ }
+
+ uid = FindOrCreateCacheModelId (String.Format ("{0}-{1}", uuid, typeof(T).Name));
+
+ if (model.Selection != null) {
+ selection_uid = FindOrCreateCacheModelId (String.Format ("{0}-{1}-Selection", uuid, typeof(T).Name));
+ }
+
+ if (model.CachesJoinTableEntries) {
+ select_str = String.Format (
+ @"SELECT {0} {10}, OrderID, {5}.ItemID FROM {1}
+ INNER JOIN {2}
+ ON {3} = {2}.{4}
+ INNER JOIN {5}
+ ON {2}.{6} = {5}.ItemID {11}
+ WHERE
+ {5}.ModelID = {7} {8} {9}",
+ provider.Select, provider.From,
+ model.JoinTable, provider.PrimaryKey, model.JoinColumn,
+ CacheTableName, model.JoinPrimaryKey, uid,
+ String.IsNullOrEmpty (provider.Where) ? null : "AND",
+ provider.Where, "{0}", "{1}"
+ );
+
+ reload_sql = String.Format (@"
+ DELETE FROM {0} WHERE ModelID = {1};
+ INSERT INTO {0} (ModelID, ItemID) SELECT {1}, {2} ",
+ CacheTableName, uid, model.JoinPrimaryKey
+ );
+ } else if (model.CachesValues) {
+ // The duplication of OrderID/ItemID in the select below is intentional!
+ // The first is used construct the QueryFilterInfo value, the last internally
+ // to this class
+ select_str = String.Format (
+ @"SELECT OrderID, ItemID {2}, OrderID, ItemID FROM {0} {3} WHERE {0}.ModelID = {1}",
+ CacheTableName, uid, "{0}", "{1}"
+ );
+
+ reload_sql = String.Format (@"
+ DELETE FROM {0} WHERE ModelID = {1};
+ INSERT INTO {0} (ModelID, ItemID) SELECT DISTINCT {1}, {2} ",
+ CacheTableName, uid, provider.Select
+ );
+ } else {
+ select_str = String.Format (
+ @"SELECT {0} {7}, OrderID, {2}.ItemID FROM {1}
+ INNER JOIN {2}
+ ON {3} = {2}.ItemID {8}
+ WHERE
+ {2}.ModelID = {4} {5} {6}",
+ provider.Select, provider.From, CacheTableName,
+ provider.PrimaryKey, uid,
+ String.IsNullOrEmpty (provider.Where) ? String.Empty : "AND",
+ provider.Where, "{0}", "{1}"
+ );
+
+ reload_sql = String.Format (@"
+ DELETE FROM {0} WHERE ModelID = {1};
+ INSERT INTO {0} (ModelID, ItemID) SELECT {1}, {2} ",
+ CacheTableName, uid, provider.PrimaryKey
+ );
+ }
+
+ select_single_command = new HyenaSqliteCommand (
+ String.Format (@"
+ SELECT OrderID FROM {0}
+ WHERE
+ ModelID = {1} AND
+ ItemID = ?",
+ CacheTableName, uid
+ )
+ );
+
+ select_range_command = new HyenaSqliteCommand (
+ String.Format (String.Format ("{0} {1}", select_str, "LIMIT ?, ?"), null, null)
+ );
+
+ select_first_command = new HyenaSqliteCommand (
+ String.Format (
+ "SELECT OrderID FROM {0} WHERE ModelID = {1} LIMIT 1",
+ CacheTableName, uid
+ )
+ );
+
+ if (model.Selection != null) {
+ delete_selection_command = new HyenaSqliteCommand (String.Format (
+ "DELETE FROM {0} WHERE ModelID = {1}", CacheTableName, selection_uid
+ ));
+
+ save_selection_command = new HyenaSqliteCommand (String.Format (
+ "INSERT INTO {0} (ModelID, ItemID) SELECT {1}, ItemID FROM {0} WHERE ModelID = {2} LIMIT ?, ?",
+ CacheTableName, selection_uid, uid
+ ));
+
+ get_selection_command = new HyenaSqliteCommand (String.Format (
+ "SELECT OrderID FROM {0} WHERE ModelID = {1} AND ItemID IN (SELECT ItemID FROM {0} WHERE ModelID = {2})",
+ CacheTableName, uid, selection_uid
+ ));
+ }
+ }
+
+ private bool has_select_all_item = false;
+ public bool HasSelectAllItem {
+ get { return has_select_all_item; }
+ set { has_select_all_item = value; }
+ }
+
+ // The idea behind this was we could preserve the CoreCache table across restarts of Banshee,
+ // and indicate whether the cache was already primed via this property. It's not used, and may never be.
+ public bool Warm {
+ //get { return warm; }
+ get { return false; }
+ }
+
+ public long Count {
+ get { return rows; }
+ }
+
+ public long CacheId {
+ get { return uid; }
+ }
+
+ protected virtual string CacheModelsTableName {
+ get { return "HyenaCacheModels"; }
+ }
+
+ protected virtual string CacheTableName {
+ get { return "HyenaCache"; }
+ }
+
+ private long FirstOrderId {
+ get {
+ lock (this) {
+ if (first_order_id == -1) {
+ first_order_id = connection.Query<long> (select_first_command);
+ }
+ return first_order_id;
+ }
+ }
+ }
+
+ public long IndexOf (string where_fragment, long offset)
+ {
+ if (String.IsNullOrEmpty (where_fragment)) {
+ return -1;
+ }
+
+ if (!where_fragment.Equals (last_indexof_where_fragment)) {
+ last_indexof_where_fragment = where_fragment;
+
+ if (!where_fragment.Trim ().ToLower ().StartsWith ("and ")) {
+ where_fragment = " AND " + where_fragment;
+ }
+
+ string sql = String.Format ("{0} {1} LIMIT ?, 1", select_str, where_fragment);
+ indexof_command = new HyenaSqliteCommand (String.Format (sql, null, null));
+ }
+
+ lock (this) {
+ using (IDataReader reader = connection.Query (indexof_command, offset)) {
+ if (reader.Read ()) {
+ long target_id = (long) reader[reader.FieldCount - 2];
+ if (target_id == 0) {
+ return -1;
+ }
+ return target_id - FirstOrderId;
+ }
+ }
+
+ return -1;
+ }
+ }
+
+ public long IndexOf (ICacheableItem item)
+ {
+ if (item == null || item.CacheModelId != CacheId) {
+ return -1;
+ }
+
+ return IndexOf (item.CacheEntryId);
+ }
+
+ public long IndexOf (object item_id)
+ {
+ lock (this) {
+ if (rows == 0) {
+ return -1;
+ }
+
+ long target_id = connection.Query<long> (select_single_command, item_id);
+ if (target_id == 0) {
+ return -1;
+ }
+ return target_id - FirstOrderId;
+ }
+ }
+
+ public T GetSingleWhere (string conditionOrderFragment, params object [] args)
+ {
+ return GetSingle (null, null, conditionOrderFragment, args);
+ }
+
+ private HyenaSqliteCommand get_single_command;
+ private string last_get_single_select_fragment, last_get_single_condition_fragment, last_get_single_from_fragment;
+ public T GetSingle (string selectFragment, string fromFragment, string conditionOrderFragment, params object [] args)
+ {
+ if (selectFragment != last_get_single_select_fragment
+ || conditionOrderFragment != last_get_single_condition_fragment
+ ||fromFragment != last_get_single_from_fragment
+ || get_single_command == null)
+ {
+ last_get_single_select_fragment = selectFragment;
+ last_get_single_condition_fragment = conditionOrderFragment;
+ last_get_single_from_fragment = fromFragment;
+ get_single_command = new HyenaSqliteCommand (String.Format (String.Format (
+ "{0} {1} {2}", select_str, conditionOrderFragment, "LIMIT 1"), selectFragment, fromFragment
+ ));
+ }
+
+ using (IDataReader reader = connection.Query (get_single_command, args)) {
+ if (reader.Read ()) {
+ T item = provider.Load (reader);
+ item.CacheEntryId = reader[reader.FieldCount - 1];
+ item.CacheModelId = uid;
+ return item;
+ }
+ }
+ return default(T);
+ }
+
+ private HyenaSqliteCommand last_reload_command;
+ private string last_reload_fragment;
+
+ public override void Reload ()
+ {
+ lock (this) {
+ if (last_reload_fragment != model.ReloadFragment || last_reload_command == null) {
+ last_reload_fragment = model.ReloadFragment;
+ last_reload_command = new HyenaSqliteCommand (String.Format ("{0}{1}", reload_sql, last_reload_fragment));
+ }
+
+ Clear ();
+ //Log.DebugFormat ("Reloading {0} with {1}", model, last_reload_command.Text);
+ connection.Execute (last_reload_command);
+ }
+ }
+
+ public override void Clear ()
+ {
+ lock (this) {
+ base.Clear ();
+ first_order_id = -1;
+ }
+ }
+
+ private bool saved_selection = false;
+ private ICacheableItem saved_focus_item = null;
+ public void SaveSelection ()
+ {
+ if (model.Selection != null && model.Selection.Count > 0 &&
+ !(has_select_all_item && model.Selection.AllSelected))
+ {
+ connection.Execute (delete_selection_command);
+ saved_selection = true;
+
+ if (!has_select_all_item && model.Selection.FocusedIndex != -1) {
+ T item = GetValue (model.Selection.FocusedIndex);
+ if (item != null) {
+ saved_focus_item = GetValue (model.Selection.FocusedIndex);
+ }
+ }
+
+ long start, end;
+ foreach (Hyena.Collections.RangeCollection.Range range in model.Selection.Ranges) {
+ start = range.Start;
+ end = range.End;
+
+ // Compensate for the first, fake 'All *' item
+ if (has_select_all_item) {
+ start -= 1;
+ end -= 1;
+ }
+
+ connection.Execute (save_selection_command, start, end - start + 1);
+ }
+ } else {
+ saved_selection = false;
+ }
+ }
+
+ public void RestoreSelection ()
+ {
+ if (saved_selection) {
+ long selected_id = -1;
+ long first_id = FirstOrderId;
+
+ // Compensate for the first, fake 'All *' item
+ if (has_select_all_item) {
+ first_id -= 1;
+ }
+
+ model.Selection.Clear (false);
+
+ foreach (long order_id in connection.QueryEnumerable<long> (get_selection_command)) {
+ selected_id = order_id - first_id;
+ model.Selection.QuietSelect ((int)selected_id);
+ }
+
+ if (has_select_all_item && model.Selection.Count == 0) {
+ model.Selection.QuietSelect (0);
+ } if (saved_focus_item != null) {
+ long i = IndexOf (saved_focus_item);
+ if (i != -1) {
+ // TODO get rid of int cast
+ model.Selection.FocusedIndex = (int)i;
+ }
+ }
+ saved_selection = false;
+ saved_focus_item = null;
+ }
+ }
+
+ protected override void FetchSet (long offset, long limit)
+ {
+ lock (this) {
+ using (IDataReader reader = connection.Query (select_range_command, offset, limit)) {
+ T item;
+ while (reader.Read ()) {
+ if (!ContainsKey (offset)) {
+ item = provider.Load (reader);
+ item.CacheEntryId = reader[reader.FieldCount - 1];
+ item.CacheModelId = uid;
+ Add (offset, item);
+ }
+ offset++;
+ }
+ }
+ }
+ }
+
+ public void UpdateAggregates ()
+ {
+ using (IDataReader reader = connection.Query (count_command, uid)) {
+ if (reader.Read ()) {
+ rows = Convert.ToInt64 (reader[0]);
+
+ Action<IDataReader> handler = AggregatesUpdated;
+ if (handler != null) {
+ handler (reader);
+ }
+ }
+ }
+ }
+
+ private long FindOrCreateCacheModelId (string id)
+ {
+ long model_id = connection.Query<long> (String.Format (
+ "SELECT CacheID FROM {0} WHERE ModelID = '{1}'",
+ CacheModelsTableName, id
+ ));
+
+ if (model_id == 0) {
+ //Console.WriteLine ("Didn't find existing cache for {0}, creating", id);
+ model_id = connection.Execute (new HyenaSqliteCommand (String.Format (
+ "INSERT INTO {0} (ModelID) VALUES (?)", CacheModelsTableName
+ ), id
+ ));
+ } else {
+ //Console.WriteLine ("Found existing cache for {0}: {1}", id, uid);
+ //warm = true;
+ //Clear ();
+ //UpdateAggregates ();
+ }
+
+ return model_id;
+ }
+
+ private static string checked_cache_table;
+ private void CheckCacheTable ()
+ {
+ if (CacheTableName == checked_cache_table) {
+ return;
+ }
+
+ if (!connection.TableExists (CacheTableName)) {
+ connection.Execute (String.Format (@"
+ CREATE TEMP TABLE {0} (
+ OrderID INTEGER PRIMARY KEY,
+ ModelID INTEGER,
+ ItemID TEXT)", CacheTableName
+ ));
+ }
+
+ if (!connection.TableExists (CacheModelsTableName)) {
+ connection.Execute (String.Format (
+ "CREATE TABLE {0} (CacheID INTEGER PRIMARY KEY, ModelID TEXT UNIQUE)",
+ CacheModelsTableName
+ ));
+ }
+
+ checked_cache_table = CacheTableName;
+ }
+ }
+}
diff --git a/lib/Hyena/src/Hyena.Data.Sqlite/Hyena.Data.Sqlite/SqliteModelProvider.cs b/lib/Hyena/src/Hyena.Data.Sqlite/Hyena.Data.Sqlite/SqliteModelProvider.cs
new file mode 100644
index 0000000..073467f
--- /dev/null
+++ b/lib/Hyena/src/Hyena.Data.Sqlite/Hyena.Data.Sqlite/SqliteModelProvider.cs
@@ -0,0 +1,792 @@
+//
+// SqliteModelProvider.cs
+//
+// Author:
+// Scott Peterson <lunchtimemama at gmail.com>
+//
+// Copyright (C) 2007 Novell, Inc.
+//
+// Permission is hereby granted, free of charge, to any person obtaining
+// a copy of this software and associated documentation files (the
+// "Software"), to deal in the Software without restriction, including
+// without limitation the rights to use, copy, modify, merge, publish,
+// distribute, sublicense, and/or sell copies of the Software, and to
+// permit persons to whom the Software is furnished to do so, subject to
+// the following conditions:
+//
+// The above copyright notice and this permission notice shall be
+// included in all copies or substantial portions of the Software.
+//
+// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
+// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
+// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
+// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+//
+
+using System;
+using System.Collections.Generic;
+using System.Data;
+using System.Reflection;
+using System.Text;
+
+namespace Hyena.Data.Sqlite
+{
+ public class SqliteModelProvider<T> where T : new ()
+ {
+ private readonly List<DatabaseColumn> columns = new List<DatabaseColumn> ();
+ private readonly List<DatabaseColumn> select_columns = new List<DatabaseColumn> ();
+ private readonly List<VirtualDatabaseColumn> virtual_columns = new List<VirtualDatabaseColumn> ();
+
+ private DatabaseColumn key;
+ private int key_select_column_index;
+ private HyenaSqliteConnection connection;
+ private bool check_table = true;
+
+ private HyenaSqliteCommand create_command;
+ private HyenaSqliteCommand insert_command;
+ private HyenaSqliteCommand update_command;
+ private HyenaSqliteCommand delete_command;
+ private HyenaSqliteCommand select_command;
+ private HyenaSqliteCommand select_range_command;
+ private HyenaSqliteCommand select_single_command;
+
+ private string table_name;
+ private string primary_key;
+ private string select;
+ private string from;
+ private string where;
+
+ private const string HYENA_DATABASE_NAME = "hyena_database_master";
+
+ public virtual string TableName { get { return table_name; } }
+
+ protected virtual int ModelVersion { get { return 1; } }
+
+ protected virtual int DatabaseVersion { get { return 1; } }
+
+ protected virtual void MigrateTable (int old_version)
+ {
+ }
+
+ protected virtual void MigrateDatabase (int old_version)
+ {
+ }
+
+ protected virtual T MakeNewObject ()
+ {
+ return new T ();
+ }
+
+ protected virtual string HyenaTableName {
+ get { return "HyenaModelVersions"; }
+ }
+
+ public HyenaSqliteConnection Connection {
+ get { return connection; }
+ }
+
+ protected SqliteModelProvider (HyenaSqliteConnection connection)
+ {
+ this.connection = connection;
+ }
+
+ public SqliteModelProvider (HyenaSqliteConnection connection, string table_name) : this (connection, table_name, true)
+ {
+ }
+
+ public SqliteModelProvider (HyenaSqliteConnection connection, string table_name, bool checkTable) : this (connection)
+ {
+ this.table_name = table_name;
+ this.check_table = checkTable;
+ Init ();
+ }
+
+ protected void Init ()
+ {
+ foreach (FieldInfo field in typeof(T).GetFields (BindingFlags.Instance | BindingFlags.Public)) {
+ foreach (Attribute attribute in field.GetCustomAttributes (true)) {
+ AddColumn (field, attribute);
+ }
+ }
+ foreach (FieldInfo field in typeof(T).GetFields (BindingFlags.Instance | BindingFlags.NonPublic)) {
+ foreach (Attribute attribute in field.GetCustomAttributes (true)) {
+ AddColumn (field, attribute);
+ }
+ }
+ foreach (PropertyInfo property in typeof(T).GetProperties (BindingFlags.Instance | BindingFlags.Public)) {
+ foreach (Attribute attribute in property.GetCustomAttributes (true)) {
+ AddColumn (property, attribute);
+ }
+ }
+ foreach (PropertyInfo property in typeof(T).GetProperties (BindingFlags.Instance | BindingFlags.NonPublic)) {
+ foreach (Attribute attribute in property.GetCustomAttributes (true)) {
+ AddColumn (property, attribute);
+ }
+ }
+ if (key == null) {
+ throw new Exception (String.Format ("The {0} table does not have a primary key", TableName));
+ }
+
+ key_select_column_index = select_columns.IndexOf (key);
+
+ if (check_table) {
+ CheckVersion ();
+ CheckTable ();
+ }
+ }
+
+ protected virtual void CheckVersion ()
+ {
+ if (connection.TableExists (HyenaTableName)) {
+ using (IDataReader reader = connection.Query (SelectVersionSql (TableName))) {
+ if (reader.Read ()) {
+ int table_version = reader.GetInt32 (0);
+ if (table_version < ModelVersion) {
+ MigrateTable (table_version);
+ UpdateVersion (TableName, ModelVersion);
+ }
+ } else {
+ InsertVersion (TableName, ModelVersion);
+ }
+ }
+ int db_version = connection.Query<int> (SelectVersionSql (HYENA_DATABASE_NAME));
+ if (db_version < DatabaseVersion) {
+ MigrateDatabase (db_version);
+ UpdateVersion (HYENA_DATABASE_NAME, DatabaseVersion);
+ }
+ }
+ else {
+ connection.Execute (String.Format (
+ @"CREATE TABLE {0} (
+ id INTEGER PRIMARY KEY,
+ name TEXT UNIQUE,
+ version INTEGER)",
+ HyenaTableName)
+ );
+
+ InsertVersion (HYENA_DATABASE_NAME, DatabaseVersion);
+ InsertVersion (TableName, ModelVersion);
+ }
+ }
+
+ private string SelectVersionSql (string name)
+ {
+ return String.Format (
+ "SELECT version FROM {0} WHERE name='{1}'",
+ HyenaTableName, name);
+ }
+
+ private void UpdateVersion (string name, int version)
+ {
+ connection.Execute (String.Format (
+ "UPDATE {0} SET version={1} WHERE name='{2}'",
+ HyenaTableName, version, name));
+ }
+
+ private void InsertVersion (string name, int version)
+ {
+ connection.Execute (String.Format (
+ "INSERT INTO {0} (name, version) VALUES ('{1}', {2})",
+ HyenaTableName, name, version));
+ }
+
+ protected void CheckTable ()
+ {
+ //Console.WriteLine ("In {0} checking for table {1}", this, TableName);
+ IDictionary<string, string> schema = connection.GetSchema (TableName);
+ if (schema.Count > 0) {
+ foreach (DatabaseColumn column in columns) {
+ if (!schema.ContainsKey (column.Name.ToLower ())) {
+ AddColumnToTable (column.Schema);
+ }
+ if (column.Index != null && !connection.IndexExists (column.Index)) {
+ connection.Execute (String.Format (
+ "CREATE INDEX {0} ON {1}({2})",
+ column.Index, TableName, column.Name)
+ );
+ }
+ }
+ } else {
+ CreateTable ();
+ }
+ }
+
+ private void AddColumn (MemberInfo member, Attribute attribute)
+ {
+ DatabaseColumnAttribute column = attribute as DatabaseColumnAttribute;
+ if (column != null) {
+ DatabaseColumn c = member is FieldInfo
+ ? new DatabaseColumn ((FieldInfo)member, column)
+ : new DatabaseColumn ((PropertyInfo)member, column);
+
+ AddColumn (c, column.Select);
+ }
+ VirtualDatabaseColumnAttribute virtual_column = attribute as VirtualDatabaseColumnAttribute;
+ if (virtual_column != null) {
+ if (member is FieldInfo) {
+ virtual_columns.Add (new VirtualDatabaseColumn ((FieldInfo) member, virtual_column));
+ } else {
+ virtual_columns.Add (new VirtualDatabaseColumn ((PropertyInfo) member, virtual_column));
+ }
+ }
+ }
+
+ protected void AddColumn (DatabaseColumn c, bool select)
+ {
+ foreach (DatabaseColumn col in columns) {
+ if (col.Name == c.Name) {
+ throw new Exception (String.Format (
+ "{0} has multiple columns named {1}",
+ TableName, c.Name)
+ );
+ }
+ if (col.Index != null && col.Index == c.Index) {
+ throw new Exception (String.Format (
+ "{0} has multiple indecies named {1}",
+ TableName, c.Name)
+ );
+ }
+ }
+
+ columns.Add (c);
+
+ if (select) {
+ select_columns.Add (c);
+ }
+
+ if ((c.Constraints & DatabaseColumnConstraints.PrimaryKey) > 0) {
+ if (key != null) {
+ throw new Exception (String.Format (
+ "Multiple primary keys in the {0} table", TableName)
+ );
+ }
+ key = c;
+ }
+ }
+
+ protected virtual void CreateTable ()
+ {
+ connection.Execute (CreateCommand);
+ foreach (DatabaseColumn column in columns) {
+ if (column.Index != null) {
+ connection.Execute (String.Format (
+ "CREATE INDEX {0} ON {1}({2})",
+ column.Index, TableName, column.Name)
+ );
+ }
+ }
+ }
+
+ protected void CreateIndex (string name, string columns)
+ {
+ Connection.Execute (String.Format (
+ "CREATE INDEX {0} ON {1} ({2})",
+ name, TableName, columns
+ ));
+ }
+
+ public virtual void Save (T target, bool force_insert)
+ {
+ try {
+ if (Convert.ToInt32 (key.GetRawValue (target)) > 0 && !force_insert) {
+ Update (target);
+ } else {
+ key.SetValue (target, Insert (target));
+ }
+ } catch (Exception e) {
+ Hyena.Log.Exception (e);
+ Hyena.Log.DebugFormat ("type of key value: {0}", key.GetRawValue (target).GetType ());
+ throw;
+ }
+
+ }
+
+ public virtual void Save (T target)
+ {
+ Save (target, false);
+ }
+
+ protected virtual object [] GetInsertParams (T target)
+ {
+ // TODO create an instance variable object array and reuse it? beware threading issues
+ object [] values = new object [columns.Count - 1];
+ int j = 0;
+ for (int i = 0; i < columns.Count; i++) {
+ if (columns[i] != key) {
+ values[j] = columns[i].GetValue (target);
+ j++;
+ }
+ }
+ return values;
+ }
+
+ protected int Insert (T target)
+ {
+ return connection.Execute (InsertCommand, GetInsertParams (target));
+ }
+
+ protected object [] GetUpdateParams (T target)
+ {
+ // TODO create an instance variable object array and reuse it? beware threading issues
+ object [] values = new object [columns.Count];
+ int j = 0;
+ for (int i = 0; i < columns.Count; i++) {
+ if (columns[i] != key) {
+ values[j] = columns[i].GetValue (target);
+ j++;
+ }
+ }
+ values[j] = key.GetValue (target);
+ return values;
+ }
+
+ protected void Update (T target)
+ {
+ connection.Execute (UpdateCommand, GetUpdateParams (target));
+ }
+
+ public virtual T Load (IDataReader reader)
+ {
+ T item = MakeNewObject ();
+ Load (reader, item);
+ return item;
+ }
+
+ public void Load (IDataReader reader, T target)
+ {
+ int i = 0;
+
+ AbstractDatabaseColumn bad_column = null;
+ try {
+ foreach (DatabaseColumn column in select_columns) {
+ bad_column = column;
+ column.SetValue (target, reader, i++);
+ }
+
+ foreach (VirtualDatabaseColumn column in virtual_columns) {
+ bad_column = column;
+ column.SetValue (target, reader, i++);
+ }
+ } catch (Exception e) {
+ Log.Debug (
+ String.Format ("Caught exception trying to load database column {0}", bad_column == null ? "[unknown]" : bad_column.Name),
+ e.ToString ()
+ );
+ }
+ }
+
+ public IEnumerable<T> FetchAll ()
+ {
+ using (IDataReader reader = connection.Query (SelectCommand)) {
+ while (reader.Read ()) {
+ yield return Load (reader);
+ }
+ }
+ }
+
+ public T FetchFirstMatching (string condition, params object [] vals)
+ {
+ foreach (T item in FetchAllMatching (String.Format ("{0} LIMIT 1", condition), vals)) {
+ return item;
+ }
+ return default(T);
+ }
+
+ public IEnumerable<T> FetchAllMatching (string condition, params object [] vals)
+ {
+ HyenaSqliteCommand fetch_matching_command = CreateFetchCommand (condition);
+ using (IDataReader reader = connection.Query (fetch_matching_command, vals)) {
+ while (reader.Read ()) {
+ yield return Load (reader);
+ }
+ }
+ }
+
+ public HyenaSqliteCommand CreateFetchCommand (string condition)
+ {
+ return new HyenaSqliteCommand (String.Format ("{0} AND {1}", SelectCommand.Text, condition));
+ }
+
+ public IEnumerable<T> FetchRange (int offset, int limit)
+ {
+ using (IDataReader reader = connection.Query (SelectRangeCommand, offset, limit)) {
+ while (reader.Read ()) {
+ yield return Load (reader);
+ }
+ }
+ }
+
+ public T FetchSingle (int id)
+ {
+ return FetchSingle ((long) id);
+ }
+
+ public virtual T FetchSingle (long id)
+ {
+ using (IDataReader reader = connection.Query (SelectSingleCommand, id)) {
+ if (reader.Read ()) {
+ return Load (reader);
+ }
+ }
+ return default(T);
+ }
+
+ protected long PrimaryKeyFor (T item)
+ {
+ return Convert.ToInt64 (key.GetValue (item));
+ }
+
+ protected long PrimaryKeyFor (IDataReader reader)
+ {
+ return Convert.ToInt64 (reader[key_select_column_index]);
+ }
+
+ public virtual void Delete (long id)
+ {
+ if (id > 0)
+ connection.Execute (DeleteCommand, id);
+ }
+
+ public void Delete (T item)
+ {
+ Delete (PrimaryKeyFor (item));
+ }
+
+ public void Delete (string condition, params object [] vals)
+ {
+ connection.Execute (String.Format ("DELETE FROM {0} WHERE {1}", TableName, condition), vals);
+ }
+
+ public virtual void Delete (IEnumerable<T> items)
+ {
+ List<long> ids = new List<long> ();
+ long id;
+ foreach (T item in items) {
+ id = PrimaryKeyFor (item);
+ if (id > 0)
+ ids.Add (id);
+ }
+
+ if (ids.Count > 0)
+ connection.Execute (DeleteCommand, ids.ToArray ());
+ }
+
+ public bool Refresh (T item)
+ {
+ if (key == null || item == null)
+ return false;
+
+ int id = (int) key.GetValue (item);
+ if (id < 1)
+ return false;
+
+ using (IDataReader reader = connection.Query (SelectSingleCommand, id)) {
+ if (reader.Read ()) {
+ Load (reader, item);
+ return true;
+ }
+ }
+ return false;
+ }
+
+ public void Copy (T original, T copy)
+ {
+ foreach (DatabaseColumn column in select_columns) {
+ if (column != key) {
+ column.SetValue (copy, column.GetRawValue (original));
+ }
+ }
+ foreach (var column in virtual_columns) {
+ column.SetValue (copy, column.GetRawValue (original));
+ }
+ }
+
+ protected virtual HyenaSqliteCommand CreateCommand {
+ get {
+ if (create_command == null) {
+ StringBuilder builder = new StringBuilder ();
+ builder.Append ("CREATE TABLE ");
+ builder.Append (TableName);
+ builder.Append ('(');
+ bool first = true;
+ foreach (DatabaseColumn column in columns) {
+ if (first) {
+ first = false;
+ } else {
+ builder.Append (',');
+ }
+ builder.Append (column.Schema);
+ }
+ builder.Append (')');
+ create_command = new HyenaSqliteCommand (builder.ToString ());
+ }
+ return create_command;
+ }
+ }
+
+ protected virtual HyenaSqliteCommand InsertCommand {
+ get {
+ // FIXME can this string building be done more nicely?
+ if (insert_command == null) {
+ StringBuilder cols = new StringBuilder ();
+ StringBuilder vals = new StringBuilder ();
+ bool first = true;
+ foreach (DatabaseColumn column in columns) {
+ if (column != key) {
+ if (first) {
+ first = false;
+ } else {
+ cols.Append (',');
+ vals.Append (',');
+ }
+ cols.Append (column.Name);
+ vals.Append ('?');
+ }
+ }
+
+ insert_command = new HyenaSqliteCommand (String.Format (
+ "INSERT INTO {0} ({1}) VALUES ({2})",
+ TableName, cols.ToString (), vals.ToString ())
+ );
+ }
+ return insert_command;
+ }
+ }
+
+ protected virtual HyenaSqliteCommand UpdateCommand {
+ get {
+ if (update_command == null) {
+ StringBuilder builder = new StringBuilder ();
+ builder.Append ("UPDATE ");
+ builder.Append (TableName);
+ builder.Append (" SET ");
+ bool first = true;
+ foreach (DatabaseColumn column in columns) {
+ if (column != key) {
+ if (first) {
+ first = false;
+ } else {
+ builder.Append (',');
+ }
+ builder.Append (column.Name);
+ builder.Append (" = ?");
+ }
+ }
+ builder.Append (" WHERE ");
+ builder.Append (key.Name);
+ builder.Append (" = ?");
+ update_command = new HyenaSqliteCommand (builder.ToString ());
+ }
+ return update_command;
+ }
+ }
+
+ protected virtual HyenaSqliteCommand SelectCommand {
+ get {
+ if (select_command == null) {
+ select_command = new HyenaSqliteCommand (
+ String.Format (
+ "SELECT {0} FROM {1} WHERE {2}",
+ Select, From, String.IsNullOrEmpty (Where) ? "1=1" : Where
+ )
+ );
+ }
+ return select_command;
+ }
+ }
+
+ protected virtual HyenaSqliteCommand SelectRangeCommand {
+ get {
+ if (select_range_command == null) {
+ select_range_command = new HyenaSqliteCommand (
+ String.Format (
+ "SELECT {0} FROM {1}{2}{3} LIMIT ?, ?",
+ Select, From,
+ (String.IsNullOrEmpty (Where) ? String.Empty : " WHERE "),
+ Where
+ )
+ );
+ }
+ return select_range_command;
+ }
+ }
+
+ protected virtual HyenaSqliteCommand SelectSingleCommand {
+ get {
+ if (select_single_command == null) {
+ select_single_command = new HyenaSqliteCommand (
+ String.Format (
+ "SELECT {0} FROM {1} WHERE {2}{3}{4} = ?",
+ Select, From, Where,
+ (String.IsNullOrEmpty (Where) ? String.Empty : " AND "),
+ PrimaryKey
+ )
+ );
+ }
+ return select_single_command;
+ }
+ }
+
+ protected virtual HyenaSqliteCommand DeleteCommand {
+ get {
+ if (delete_command == null) {
+ delete_command = new HyenaSqliteCommand (String.Format (
+ "DELETE FROM {0} WHERE {1} IN (?)", TableName, PrimaryKey
+ ));
+ }
+ return delete_command;
+ }
+ }
+
+ public virtual string Select {
+ get {
+ if (select == null) {
+ BuildQuerySql ();
+ }
+ return select;
+ }
+ }
+
+ public virtual string From {
+ get {
+ if (from == null) {
+ BuildQuerySql ();
+ }
+ return from;
+ }
+ }
+
+ public virtual string Where {
+ get {
+ if (where == null) {
+ BuildQuerySql ();
+ }
+ return where;
+ }
+ }
+
+ public string PrimaryKey {
+ get {
+ if (primary_key == null) {
+ primary_key = String.Format ("{0}.{1}", TableName, key.Name);
+ }
+ return primary_key;
+ }
+ protected set { primary_key = value; }
+ }
+
+ private void BuildQuerySql ()
+ {
+ StringBuilder select_builder = new StringBuilder ();
+ bool first = true;
+ foreach (DatabaseColumn column in select_columns) {
+ if (first) {
+ first = false;
+ } else {
+ select_builder.Append (',');
+ }
+ select_builder.Append (TableName);
+ select_builder.Append ('.');
+ select_builder.Append (column.Name);
+ }
+
+ StringBuilder where_builder = new StringBuilder ();
+ Dictionary<string, string> tables = new Dictionary<string,string> (virtual_columns.Count + 1);
+ bool first_virtual = true;
+ foreach (VirtualDatabaseColumn column in virtual_columns) {
+ if (first) {
+ first = false;
+ } else {
+ select_builder.Append (',');
+ }
+
+ select_builder.Append (column.TargetTable);
+ select_builder.Append ('.');
+ select_builder.Append (column.Name);
+
+ bool table_not_joined = !tables.ContainsKey (column.TargetTable);
+ if (first_virtual) {
+ first_virtual = false;
+ } else if (table_not_joined) {
+ where_builder.Append (" AND ");
+ }
+
+ if (table_not_joined) {
+ where_builder.Append (column.TargetTable);
+ where_builder.Append ('.');
+ where_builder.Append (column.ForeignKey);
+ where_builder.Append (" = ");
+ where_builder.Append (TableName);
+ where_builder.Append ('.');
+ where_builder.Append (column.LocalKey);
+
+ tables.Add (column.TargetTable, null);
+ }
+ }
+
+ StringBuilder from_builder = new StringBuilder ();
+ from_builder.Append (TableName);
+ foreach (KeyValuePair<string, string> pair in tables) {
+ from_builder.Append (',');
+ from_builder.Append (pair.Key);
+ }
+
+ select = select_builder.ToString ();
+ from = from_builder.ToString ();
+ where = where_builder.ToString ();
+ }
+
+ public U GetProperty <U> (T item, DbColumn column)
+ {
+ CheckProperty (typeof (U), column);
+
+ return connection.Query<U> (String.Format (
+ "SELECT {0} FROM {1} WHERE {2}={3}",
+ column.Name, TableName, key.Name, key.GetValue (item)));
+ }
+
+ public void SetProperty <U> (T item, U value, DbColumn column)
+ {
+ CheckProperty (typeof (U), column);
+
+ connection.Execute (String.Format (
+ "UPDATE {0} SET {1}='{2}' WHERE {3}={4}",
+ TableName, column.Name,
+ SqliteUtils.ToDbFormat (typeof (U), value),
+ key.Name, key.GetValue (item)));
+ }
+
+ public void ClearProperty <U> (DbColumn column)
+ {
+ if (!connection.ColumnExists (TableName, column.Name)) {
+ AddColumnToTable (SqliteUtils.BuildColumnSchema (
+ SqliteUtils.GetType (typeof (U)),
+ column.Name, column.DefaultValue, column.Constraints));
+ } else {
+ connection.Execute (string.Format (
+ "UPDATE {0} SET {1}='{2}'",
+ TableName, column.Name, column.DefaultValue));
+ }
+ }
+
+ private void CheckProperty (Type type, DbColumn column)
+ {
+ if (!connection.ColumnExists (TableName, column.Name)) {
+ AddColumnToTable (SqliteUtils.BuildColumnSchema (
+ SqliteUtils.GetType (type),
+ column.Name, column.DefaultValue, column.Constraints));
+ }
+ }
+
+ private void AddColumnToTable (string column_schema)
+ {
+ connection.Execute (String.Format (
+ "ALTER TABLE {0} ADD {1}",
+ TableName, column_schema)
+ );
+ }
+ }
+}
diff --git a/lib/Hyena/src/Hyena.Data.Sqlite/Hyena.Data.Sqlite/SqliteUtils.cs b/lib/Hyena/src/Hyena.Data.Sqlite/Hyena.Data.Sqlite/SqliteUtils.cs
new file mode 100644
index 0000000..31a8626
--- /dev/null
+++ b/lib/Hyena/src/Hyena.Data.Sqlite/Hyena.Data.Sqlite/SqliteUtils.cs
@@ -0,0 +1,211 @@
+//
+// SqliteUtils.cs
+//
+// Author:
+// Scott Peterson <lunchtimemama at gmail.com>
+//
+// Copyright (C) 2007 Novell, Inc.
+//
+// Permission is hereby granted, free of charge, to any person obtaining
+// a copy of this software and associated documentation files (the
+// "Software"), to deal in the Software without restriction, including
+// without limitation the rights to use, copy, modify, merge, publish,
+// distribute, sublicense, and/or sell copies of the Software, and to
+// permit persons to whom the Software is furnished to do so, subject to
+// the following conditions:
+//
+// The above copyright notice and this permission notice shall be
+// included in all copies or substantial portions of the Software.
+//
+// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
+// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
+// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
+// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+//
+
+using System;
+using System.Reflection;
+using System.Text;
+using Mono.Data.Sqlite;
+using System.Collections.Generic;
+
+namespace Hyena.Data.Sqlite
+{
+ public static class SqliteUtils
+ {
+ internal static string GetType (Type type)
+ {
+ if (type == typeof (string)) {
+ return "TEXT";
+ } else if (type == typeof (int) || type == typeof (long) || type == typeof (bool)
+ || type == typeof (DateTime) || type == typeof (TimeSpan) || type.IsEnum) {
+ return "INTEGER";
+ } else if (type == typeof (int?) || type == typeof (long?) || type == typeof (bool?)
+ || type == typeof (uint?)) {
+ return "INTEGER NULL";
+ } else if (type == typeof (byte[])) {
+ return "BLOB";
+ } else if (type == typeof (double)) {
+ return "REAL";
+ } else if (type == typeof (double?)) {
+ return "REAL NULL";
+ } else {
+ throw new Exception (String.Format (
+ "The type {0} cannot be bound to a database column.", type.Name));
+ }
+ }
+
+ public static object ToDbFormat (Type type, object value)
+ {
+ if (type == typeof (string)) {
+ // Treat blank strings or strings with only whitespace as null
+ return value == null || String.IsNullOrEmpty (((string)value).Trim ())
+ ? null
+ : value;
+ } else if (type == typeof (DateTime)) {
+ return DateTime.MinValue.Equals ((DateTime)value)
+ ? (object)null
+ : DateTimeUtil.FromDateTime ((DateTime)value);
+ } else if (type == typeof (TimeSpan)) {
+ return TimeSpan.MinValue.Equals ((TimeSpan)value)
+ ? (object)null
+ : ((TimeSpan)value).TotalMilliseconds;
+ } else if (type.IsEnum) {
+ return Convert.ChangeType (value, Enum.GetUnderlyingType (type));
+ } else if (type == typeof (bool)) {
+ return ((bool)value) ? 1 : 0;
+ }
+
+ return value;
+ }
+
+ public static object FromDbFormat (Type type, object value)
+ {
+ if (Convert.IsDBNull (value))
+ value = null;
+
+ if (type == typeof (DateTime)) {
+ return value == null
+ ? DateTime.MinValue
+ : DateTimeUtil.ToDateTime (Convert.ToInt64 (value));
+ } else if (type == typeof (TimeSpan)) {
+ return value == null
+ ? TimeSpan.MinValue
+ : TimeSpan.FromMilliseconds (Convert.ToInt64 (value));
+ } else if (value == null) {
+ if (type.IsValueType) {
+ return Activator.CreateInstance (type);
+ } else {
+ return null;
+ }
+ } else if (type.IsEnum) {
+ return Enum.ToObject (type, value);
+ } else if (type == typeof (bool)) {
+ return ((long)value == 1);
+ } else if (type == typeof (double?)) {
+ if (value == null)
+ return null;
+
+ double double_value = ((Single?) value).Value;
+ return (double?) double_value;
+ } else {
+ return Convert.ChangeType (value, type);
+ }
+ }
+
+ internal static string BuildColumnSchema (string type, string name, string default_value,
+ DatabaseColumnConstraints constraints)
+ {
+ StringBuilder builder = new StringBuilder ();
+ builder.Append (name);
+ builder.Append (' ');
+ builder.Append (type);
+ if ((constraints & DatabaseColumnConstraints.NotNull) > 0) {
+ builder.Append (" NOT NULL");
+ }
+ if ((constraints & DatabaseColumnConstraints.Unique) > 0) {
+ builder.Append (" UNIQUE");
+ }
+ if ((constraints & DatabaseColumnConstraints.PrimaryKey) > 0) {
+ builder.Append (" PRIMARY KEY");
+ }
+ if (default_value != null) {
+ builder.Append (" DEFAULT ");
+ builder.Append (default_value);
+ }
+ return builder.ToString ();
+ }
+ }
+
+ [SqliteFunction (Name = "HYENA_BINARY_FUNCTION", FuncType = FunctionType.Scalar, Arguments = 3)]
+ public sealed class BinaryFunction : SqliteFunction
+ {
+ private static Dictionary<string, Func<object, object, object>> funcs = new Dictionary<string, Func<object, object, object>> ();
+
+ public static void Add (string functionId, Func<object, object, object> func)
+ {
+ lock (funcs) {
+ if (funcs.ContainsKey (functionId)) {
+ throw new ArgumentException (String.Format ("{0} is already taken", functionId), "functionId");
+ }
+
+ funcs[functionId] = func;
+ }
+ }
+
+ public static void Remove (string functionId)
+ {
+ lock (funcs) {
+ if (!funcs.ContainsKey (functionId)) {
+ throw new ArgumentException (String.Format ("{0} does not exist", functionId), "functionId");
+ }
+
+ funcs.Remove (functionId);
+ }
+ }
+
+ public override object Invoke (object[] args)
+ {
+ Func<object, object, object> func;
+ if (!funcs.TryGetValue (args[0] as string, out func))
+ throw new ArgumentException (args[0] as string, "HYENA_BINARY_FUNCTION name (arg 0)");
+
+ return func (args[1], args[2]);
+ }
+ }
+
+ [SqliteFunction (Name = "HYENA_COLLATION_KEY", FuncType = FunctionType.Scalar, Arguments = 1)]
+ internal class CollationKeyFunction : SqliteFunction
+ {
+ public override object Invoke (object[] args)
+ {
+ return Hyena.StringUtil.SortKey (args[0] as string);
+ }
+ }
+
+ [SqliteFunction (Name = "HYENA_SEARCH_KEY", FuncType = FunctionType.Scalar, Arguments = 1)]
+ internal class SearchKeyFunction : SqliteFunction
+ {
+ public override object Invoke (object[] args)
+ {
+ return Hyena.StringUtil.SearchKey (args[0] as string);
+ }
+ }
+
+ [SqliteFunction (Name = "HYENA_MD5", FuncType = FunctionType.Scalar, Arguments = -1)]
+ internal class Md5Function : SqliteFunction
+ {
+ public override object Invoke (object[] args)
+ {
+ int n_args = (int)(long) args[0];
+ var sb = new StringBuilder ();
+ for (int i = 1; i <= n_args; i++) {
+ sb.Append (args[i]);
+ }
+ return Hyena.CryptoUtil.Md5Encode (sb.ToString (), System.Text.Encoding.UTF8);
+ }
+ }
+}
diff --git a/lib/Hyena/src/Hyena.Data.Sqlite/Hyena.Data.Sqlite/Tests/DbBoundType.cs b/lib/Hyena/src/Hyena.Data.Sqlite/Hyena.Data.Sqlite/Tests/DbBoundType.cs
new file mode 100644
index 0000000..58b7dc6
--- /dev/null
+++ b/lib/Hyena/src/Hyena.Data.Sqlite/Hyena.Data.Sqlite/Tests/DbBoundType.cs
@@ -0,0 +1,318 @@
+//
+// DbBoundType.cs
+//
+// Author:
+// Scott Peterson <lunchtimemama at gmail.com>
+//
+// Copyright (C) 2008 Scott Peterson
+//
+// Permission is hereby granted, free of charge, to any person obtaining
+// a copy of this software and associated documentation files (the
+// "Software"), to deal in the Software without restriction, including
+// without limitation the rights to use, copy, modify, merge, publish,
+// distribute, sublicense, and/or sell copies of the Software, and to
+// permit persons to whom the Software is furnished to do so, subject to
+// the following conditions:
+//
+// The above copyright notice and this permission notice shall be
+// included in all copies or substantial portions of the Software.
+//
+// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
+// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
+// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
+// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+//
+
+#if ENABLE_TESTS
+
+using System;
+using Hyena.Data.Sqlite;
+
+namespace Hyena.Data.Sqlite.Tests
+{
+ internal enum IntEnum : int
+ {
+ Zero,
+ One,
+ Two,
+ Three
+ }
+
+ internal enum LongEnum : long
+ {
+ Cero,
+ Uno,
+ Dos,
+ Tres
+ }
+
+ internal class ModelProvider : SqliteModelProvider<DbBoundType>
+ {
+ public ModelProvider (HyenaSqliteConnection connection) : base (connection)
+ {
+ Init ();
+ }
+
+ public override string TableName {
+ get { return "TestTable"; }
+ }
+ protected override int ModelVersion {
+ get { return 1; }
+ }
+ protected override int DatabaseVersion {
+ get { return 1; }
+ }
+
+ protected override void MigrateTable (int old_version)
+ {
+ }
+ protected override void MigrateDatabase (int old_version)
+ {
+ }
+ protected override DbBoundType MakeNewObject ()
+ {
+ return new DbBoundType ();
+ }
+ }
+
+ internal class DbBoundType
+ {
+ [DatabaseColumn ("PrimaryKey", Constraints = DatabaseColumnConstraints.PrimaryKey)]
+ public int PrimaryKey;
+
+ [DatabaseColumn ("PublicIntField")]
+ public int PublicIntField;
+ [DatabaseColumn ("PublicLongField")]
+ public long PublicLongField;
+ [DatabaseColumn ("PublicStringField")]
+ public string PublicStringField;
+ [DatabaseColumn ("PublicDateTimeField")]
+ public DateTime PublicDateTimeField;
+ [DatabaseColumn ("PublicTimeSpanField")]
+ public TimeSpan PublicTimeSpanField;
+ [DatabaseColumn ("PublicIntEnumField")]
+ public IntEnum PublicIntEnumField;
+ [DatabaseColumn ("PublicLongEnumField")]
+ public LongEnum PublicLongEnumField;
+
+ private int public_int_property_field;
+ [DatabaseColumn ("PublicIntProperty")]
+ public int PublicIntProperty {
+ get { return public_int_property_field; }
+ set { public_int_property_field = value; }
+ }
+ private long public_long_property_field;
+ [DatabaseColumn ("PublicLongProperty")]
+ public long PublicLongProperty {
+ get { return public_long_property_field; }
+ set { public_long_property_field = value; }
+ }
+ private string public_string_property_field;
+ [DatabaseColumn ("PublicStringProperty")]
+ public string PublicStringProperty {
+ get { return public_string_property_field; }
+ set { public_string_property_field = value; }
+ }
+ private DateTime public_date_time_proprety_field;
+ [DatabaseColumn ("PublicDateTimeProperty")]
+ public DateTime PublicDateTimeProperty {
+ get { return public_date_time_proprety_field; }
+ set { public_date_time_proprety_field = value; }
+ }
+ private TimeSpan public_time_span_property_field;
+ [DatabaseColumn ("PublicTimeSpanProperty")]
+ public TimeSpan PublicTimeSpanProperty {
+ get { return public_time_span_property_field; }
+ set { public_time_span_property_field = value; }
+ }
+ private IntEnum public_int_enum_property_field;
+ [DatabaseColumn ("PublicIntEnumProperty")]
+ public IntEnum PublicIntEnumProperty {
+ get { return public_int_enum_property_field; }
+ set { public_int_enum_property_field = value; }
+ }
+ private LongEnum public_long_enum_property_field;
+ [DatabaseColumn ("PublicLongEnumProperty")]
+ public LongEnum PublicLongEnumProperty {
+ get { return public_long_enum_property_field; }
+ set { public_long_enum_property_field = value; }
+ }
+
+ [DatabaseColumn ("PrivateIntField")]
+ private int private_int_field;
+ [DatabaseColumn ("PrivateLongField")]
+ private long private_long_field;
+ [DatabaseColumn ("PrivateStringField")]
+ private string private_string_field;
+ [DatabaseColumn ("PrivateDateTimeField")]
+ private DateTime private_date_time_field;
+ [DatabaseColumn ("PrivateTimeSpanField")]
+ private TimeSpan private_time_span_field;
+ [DatabaseColumn ("PrivateIntEnumField")]
+ private IntEnum private_int_enum_field;
+ [DatabaseColumn ("PrivateLongEnumField")]
+ private LongEnum private_long_enum_field;
+
+ public int GetPrivateIntField ()
+ {
+ return private_int_field;
+ }
+ public void SetPrivateIntField (int value)
+ {
+ private_int_field = value;
+ }
+ public long GetPrivateLongField ()
+ {
+ return private_long_field;
+ }
+ public void SetPrivateLongField (long value)
+ {
+ private_long_field = value;
+ }
+ public string GetPrivateStringField ()
+ {
+ return private_string_field;
+ }
+ public void SetPrivateStringField (string value)
+ {
+ private_string_field = value;
+ }
+ public DateTime GetPrivateDateTimeField ()
+ {
+ return private_date_time_field;
+ }
+ public void SetPrivateDateTimeField (DateTime value)
+ {
+ private_date_time_field = value;
+ }
+ public TimeSpan GetPrivateTimeSpanField ()
+ {
+ return private_time_span_field;
+ }
+ public void SetPrivateTimeSpanField (TimeSpan value)
+ {
+ private_time_span_field = value;
+ }
+ public IntEnum GetPrivateIntEnumField ()
+ {
+ return private_int_enum_field;
+ }
+ public void SetPrivateIntEnumField (IntEnum value)
+ {
+ private_int_enum_field = value;
+ }
+ public LongEnum GetPrivateLongEnumField ()
+ {
+ return private_long_enum_field;
+ }
+ public void SetPrivateLongEnumField (LongEnum value)
+ {
+ private_long_enum_field = value;
+ }
+
+ private int private_int_property_field;
+ [DatabaseColumn ("PrivateIntProperty")]
+ private int private_int_property {
+ get { return private_int_property_field; }
+ set { private_int_property_field = value; }
+ }
+ private long private_long_property_field;
+ [DatabaseColumn ("PrivateLongProperty")]
+ private long private_long_property {
+ get { return private_long_property_field; }
+ set { private_long_property_field = value; }
+ }
+ private string private_string_property_field;
+ [DatabaseColumn ("PrivateStringProperty")]
+ private string private_string_property {
+ get { return private_string_property_field; }
+ set { private_string_property_field = value; }
+ }
+ private DateTime private_date_time_property_field;
+ [DatabaseColumn ("PrivateDateTimeProperty")]
+ private DateTime private_date_time_property {
+ get { return private_date_time_property_field; }
+ set { private_date_time_property_field = value; }
+ }
+ private TimeSpan private_time_span_property_field;
+ [DatabaseColumn ("PrivateTimeSpanProperty")]
+ private TimeSpan private_time_span_property {
+ get { return private_time_span_property_field; }
+ set { private_time_span_property_field = value; }
+ }
+ private IntEnum private_int_enum_property_field;
+ [DatabaseColumn ("PrivateIntEnumProperty")]
+ private IntEnum private_int_enum_property {
+ get { return private_int_enum_property_field; }
+ set { private_int_enum_property_field = value; }
+ }
+ private LongEnum private_long_enum_property_field;
+ [DatabaseColumn ("PrivateLongEnumProperty")]
+ private LongEnum private_long_enum_property {
+ get { return private_long_enum_property_field; }
+ set { private_long_enum_property_field = value; }
+ }
+
+ public int GetPrivateIntProperty ()
+ {
+ return private_int_property;
+ }
+ public void SetPrivateIntProperty (int value)
+ {
+ private_int_property = value;
+ }
+ public long GetPrivateLongProperty ()
+ {
+ return private_long_property;
+ }
+ public void SetPrivateLongProperty (long value)
+ {
+ private_long_property = value;
+ }
+ public string GetPrivateStringProperty ()
+ {
+ return private_string_property;
+ }
+ public void SetPrivateStringProperty (string value)
+ {
+ private_string_property = value;
+ }
+ public DateTime GetPrivateDateTimeProperty ()
+ {
+ return private_date_time_property;
+ }
+ public void SetPrivateDateTimeProperty (DateTime value)
+ {
+ private_date_time_property = value;
+ }
+ public TimeSpan GetPrivateTimeSpanProperty ()
+ {
+ return private_time_span_property;
+ }
+ public void SetPrivateTimeSpanProperty (TimeSpan value)
+ {
+ private_time_span_property = value;
+ }
+ public IntEnum GetPrivateIntEnumProperty ()
+ {
+ return private_int_enum_property;
+ }
+ public void SetPrivateIntEnumProperty (IntEnum value)
+ {
+ private_int_enum_property = value;
+ }
+ public LongEnum GetPrivateLongEnumProperty ()
+ {
+ return private_long_enum_property;
+ }
+ public void SetPrivateLongEnumProperty (LongEnum value)
+ {
+ private_long_enum_property = value;
+ }
+ }
+}
+
+#endif
diff --git a/lib/Hyena/src/Hyena.Data.Sqlite/Hyena.Data.Sqlite/Tests/SqliteCommandTests.cs b/lib/Hyena/src/Hyena.Data.Sqlite/Hyena.Data.Sqlite/Tests/SqliteCommandTests.cs
new file mode 100644
index 0000000..e212010
--- /dev/null
+++ b/lib/Hyena/src/Hyena.Data.Sqlite/Hyena.Data.Sqlite/Tests/SqliteCommandTests.cs
@@ -0,0 +1,184 @@
+//
+// SqliteCommandTests.cs
+//
+// Author:
+// Gabriel Burt <gburt at novell.com>
+//
+// Copyright (C) 2008 Novell, Inc.
+//
+// Permission is hereby granted, free of charge, to any person obtaining
+// a copy of this software and associated documentation files (the
+// "Software"), to deal in the Software without restriction, including
+// without limitation the rights to use, copy, modify, merge, publish,
+// distribute, sublicense, and/or sell copies of the Software, and to
+// permit persons to whom the Software is furnished to do so, subject to
+// the following conditions:
+//
+// The above copyright notice and this permission notice shall be
+// included in all copies or substantial portions of the Software.
+//
+// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
+// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
+// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
+// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+//
+
+#if ENABLE_TESTS
+
+using System;
+using System.Reflection;
+using NUnit.Framework;
+using Hyena.Data.Sqlite;
+
+namespace Hyena.Data.Sqlite.Tests
+{
+ [TestFixture]
+ public class SqliteCommandTests
+ {
+ [Test]
+ public void IdentifiesParameters ()
+ {
+ HyenaSqliteCommand cmd = null;
+ try {
+ cmd = new HyenaSqliteCommand ("select foo from bar where baz = ?, bbz = ?, this = ?",
+ "a", 32);
+ Assert.Fail ("Should not have been able to pass 2 values to ApplyValues without exception");
+ } catch {}
+
+ try {
+ cmd = new HyenaSqliteCommand ("select foo from bar where baz = ?, bbz = ?, this = ?",
+ "a", 32, "22");
+ } catch {
+ Assert.Fail ("Should have been able to pass 3 values to ApplyValues without exception");
+ }
+
+ Assert.AreEqual ("select foo from bar where baz = 'a', bbz = 32, this = '22'", GetGeneratedSql (cmd));
+ }
+
+ [Test]
+ public void Constructor ()
+ {
+ HyenaSqliteCommand cmd = new HyenaSqliteCommand ("select foo from bar where baz = ?, bbz = ?, this = ?", "a", 32, "22");
+ Assert.AreEqual ("select foo from bar where baz = 'a', bbz = 32, this = '22'", GetGeneratedSql (cmd));
+ }
+
+ [Test]
+ public void CultureInvariant ()
+ {
+ HyenaSqliteCommand cmd = new HyenaSqliteCommand ("select foo from bar where baz = ?", 32.2);
+ Assert.AreEqual ("select foo from bar where baz = 32.2", GetGeneratedSql (cmd));
+ }
+
+ [Test]
+ public void ParameterSerialization ()
+ {
+ HyenaSqliteCommand cmd = new HyenaSqliteCommand ("select foo from bar where baz = ?");
+
+ Assert.AreEqual ("select foo from bar where baz = NULL", GetGeneratedSql (cmd, null));
+ Assert.AreEqual ("select foo from bar where baz = 'It''s complicated, \"but\" ''''why not''''?'", GetGeneratedSql (cmd, "It's complicated, \"but\" ''why not''?"));
+ Assert.AreEqual ("select foo from bar where baz = 0", GetGeneratedSql (cmd, new DateTime (1970, 1, 1).ToLocalTime ()));
+ Assert.AreEqual ("select foo from bar where baz = 931309200", GetGeneratedSql (cmd, new DateTime (1999, 7, 7).ToLocalTime ()));
+ Assert.AreEqual ("select foo from bar where baz = 555.55", GetGeneratedSql (cmd, 555.55f));
+ Assert.AreEqual ("select foo from bar where baz = 555.55", GetGeneratedSql (cmd, 555.55));
+ Assert.AreEqual ("select foo from bar where baz = 555", GetGeneratedSql (cmd, 555));
+ Assert.AreEqual ("select foo from bar where baz = 1", GetGeneratedSql (cmd, true));
+ Assert.AreEqual ("select foo from bar where baz = 0", GetGeneratedSql (cmd, false));
+
+ HyenaSqliteCommand cmd2 = new HyenaSqliteCommand ("select foo from bar where baz = ?, bar = ?, boo = ?");
+ Assert.AreEqual ("select foo from bar where baz = NULL, bar = NULL, boo = 22", GetGeneratedSql (cmd2, null, null, 22));
+
+ HyenaSqliteCommand cmd3 = new HyenaSqliteCommand ("select foo from bar where id in (?) and foo not in (?)");
+ Assert.AreEqual ("select foo from bar where id in (1,2,4) and foo not in ('foo','baz')",
+ GetGeneratedSql (cmd3, new int [] {1, 2, 4}, new string [] {"foo", "baz"}));
+ }
+
+ [Test]
+ public void ExecuteMustDisposeSqliteCommand ()
+ {
+ using(var connection = new HyenaSqliteConnection (":memory:")) {
+ bool disposed = false;
+ connection.Executing += delegate (object sender, ExecutingEventArgs args) {
+ args.Command.Disposed += delegate {
+ disposed = true;
+ };
+ };
+
+ connection.Query<int> ("SELECT 42");
+
+ Assert.IsTrue (disposed);
+ }
+ }
+
+ static PropertyInfo tf = typeof(HyenaSqliteCommand).GetProperty ("CurrentSqlText", BindingFlags.Instance | BindingFlags.NonPublic);
+ private static string GetGeneratedSql (HyenaSqliteCommand cmd, params object [] p)
+ {
+ return tf.GetValue ((new HyenaSqliteCommand (cmd.Text, p)), null) as string;
+ }
+
+ private static string GetGeneratedSql (HyenaSqliteCommand cmd)
+ {
+ return tf.GetValue (cmd, null) as string;
+ }
+ }
+
+ [TestFixture]
+ public class ObjectToSqlTests
+ {
+ protected void AssertToSql (object o, object expected)
+ {
+ Assert.AreEqual (expected, HyenaSqliteCommand.SqlifyObject (o));
+ }
+
+ [Test]
+ public void TestNull ()
+ {
+ AssertToSql (null, "NULL");
+ }
+
+ [Test]
+ public void TestBool ()
+ {
+ AssertToSql (false, "0");
+ AssertToSql (true, "1");
+ }
+
+ [Test]
+ public void TestString ()
+ {
+ AssertToSql ("", "''");
+ AssertToSql ("test", "'test'");
+ AssertToSql ("te'st", "'te''st'");
+ }
+
+ [Test]
+ public void TestByteArray ()
+ {
+ // BLOB notation
+ AssertToSql (new byte[] {}, "X''");
+ AssertToSql (new byte[] {0x10, 0x20, 0x30}, "X'102030'");
+ }
+
+ [Test]
+ public void TestOtherArray ()
+ {
+ AssertToSql (new object[] {}, "");
+ AssertToSql (new object[] {"a"}, "'a'");
+ AssertToSql (new object[] {"a", "b"}, "'a','b'");
+ }
+
+ [Test]
+ public void TestDateTime ()
+ {
+ // Returned using local time, not UTC
+ AssertToSql (new DateTime (2000, 1, 2), 946792800);
+
+ // Disregards milliseconds
+ AssertToSql (new DateTime (2000, 1, 2, 10, 9, 8, 7), 946829348);
+ }
+ }
+}
+
+#endif
diff --git a/lib/Hyena/src/Hyena.Data.Sqlite/Hyena.Data.Sqlite/Tests/SqliteModelProviderTests.cs b/lib/Hyena/src/Hyena.Data.Sqlite/Hyena.Data.Sqlite/Tests/SqliteModelProviderTests.cs
new file mode 100644
index 0000000..7b12c5d
--- /dev/null
+++ b/lib/Hyena/src/Hyena.Data.Sqlite/Hyena.Data.Sqlite/Tests/SqliteModelProviderTests.cs
@@ -0,0 +1,248 @@
+//
+// SqliteModelProviderTests.cs
+//
+// Author:
+// Scott Peterson <lunchtimemama at gmail.com>
+//
+// Copyright (C) 2008 Scott Peterson
+//
+// Permission is hereby granted, free of charge, to any person obtaining
+// a copy of this software and associated documentation files (the
+// "Software"), to deal in the Software without restriction, including
+// without limitation the rights to use, copy, modify, merge, publish,
+// distribute, sublicense, and/or sell copies of the Software, and to
+// permit persons to whom the Software is furnished to do so, subject to
+// the following conditions:
+//
+// The above copyright notice and this permission notice shall be
+// included in all copies or substantial portions of the Software.
+//
+// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
+// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
+// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
+// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+//
+
+#if ENABLE_TESTS
+
+using System;
+using System.Data;
+using System.IO;
+using NUnit.Framework;
+using Hyena.Data.Sqlite;
+
+namespace Hyena.Data.Sqlite.Tests
+{
+ [TestFixture]
+ public class SqliteModelProviderTests
+ {
+ private HyenaSqliteConnection connection;
+ private ModelProvider provider;
+
+ [TestFixtureSetUp]
+ public void Init ()
+ {
+ connection = new HyenaSqliteConnection ("test.db");
+ provider = new ModelProvider (connection);
+ }
+
+ [TestFixtureTearDown]
+ public void Dispose ()
+ {
+ connection.Dispose ();
+ File.Delete ("test.db");
+ }
+
+ [Test]
+ public void IntMembers ()
+ {
+ DbBoundType newed_item = new DbBoundType ();
+ newed_item.PublicIntField = 3141592;
+ newed_item.PublicIntProperty = 13;
+ newed_item.SetPrivateIntField (128);
+ newed_item.SetPrivateIntProperty (42);
+
+ provider.Save (newed_item);
+
+ DbBoundType loaded_item = provider.FetchSingle (newed_item.PrimaryKey);
+ Assert.AreEqual (newed_item.PublicIntField, loaded_item.PublicIntField);
+ Assert.AreEqual (newed_item.PublicIntProperty, loaded_item.PublicIntProperty);
+ Assert.AreEqual (newed_item.GetPrivateIntField (), loaded_item.GetPrivateIntField ());
+ Assert.AreEqual (newed_item.GetPrivateIntProperty (), loaded_item.GetPrivateIntProperty ());
+ }
+
+ [Test]
+ public void LongMembers ()
+ {
+ DbBoundType newed_item = new DbBoundType ();
+ newed_item.PublicLongField = 4926227057;
+ newed_item.PublicLongProperty = -932;
+ newed_item.SetPrivateLongField (3243);
+ newed_item.SetPrivateLongProperty (1);
+
+ provider.Save (newed_item);
+
+ DbBoundType loaded_item = provider.FetchSingle (newed_item.PrimaryKey);
+ Assert.AreEqual (newed_item.PublicLongField, loaded_item.PublicLongField);
+ Assert.AreEqual (newed_item.PublicLongProperty, loaded_item.PublicLongProperty);
+ Assert.AreEqual (newed_item.GetPrivateLongField (), loaded_item.GetPrivateLongField ());
+ Assert.AreEqual (newed_item.GetPrivateLongProperty (), loaded_item.GetPrivateLongProperty ());
+ }
+
+ [Test]
+ public void StringMembers ()
+ {
+ DbBoundType newed_item = new DbBoundType ();
+ newed_item.PublicStringField = "Surely you're joking, Mr. Feynman.";
+ newed_item.PublicStringProperty = "Even as a splitted bark, so sunder we: This way fall I to death.";
+ newed_item.SetPrivateStringField ("Who is John Galt?");
+ newed_item.SetPrivateStringProperty ("The most formidable weapon against errors of every kind is Reason.");
+
+ provider.Save (newed_item);
+
+ DbBoundType loaded_item = provider.FetchSingle (newed_item.PrimaryKey);
+ Assert.AreEqual (newed_item.PublicStringField, loaded_item.PublicStringField);
+ Assert.AreEqual (newed_item.PublicStringProperty, loaded_item.PublicStringProperty);
+ Assert.AreEqual (newed_item.GetPrivateStringField (), loaded_item.GetPrivateStringField ());
+ Assert.AreEqual (newed_item.GetPrivateStringProperty (), loaded_item.GetPrivateStringProperty ());
+ }
+
+ [Test]
+ public void BlankStringMembers ()
+ {
+ DbBoundType newed_item = new DbBoundType ();
+ newed_item.PublicStringField = "";
+ newed_item.PublicStringProperty = null;
+ newed_item.SetPrivateStringField (" \t ");
+ newed_item.SetPrivateStringProperty (" foo ");
+
+ provider.Save (newed_item);
+
+ DbBoundType loaded_item = provider.FetchSingle (newed_item.PrimaryKey);
+ Assert.AreEqual (null, loaded_item.PublicStringField);
+ Assert.AreEqual (null, loaded_item.PublicStringProperty);
+ Assert.AreEqual (null, loaded_item.GetPrivateStringField ());
+ Assert.AreEqual (" foo ", loaded_item.GetPrivateStringProperty ());
+ }
+
+ [Test]
+ public void NullStringMembers ()
+ {
+ DbBoundType newed_item = new DbBoundType ();
+ newed_item.PublicStringField = null;
+ newed_item.PublicStringProperty = null;
+ newed_item.SetPrivateStringField (null);
+ newed_item.SetPrivateStringProperty (null);
+
+ provider.Save (newed_item);
+
+ DbBoundType loaded_item = provider.FetchSingle (newed_item.PrimaryKey);
+ Assert.AreEqual (newed_item.PublicStringField, loaded_item.PublicStringField);
+ Assert.AreEqual (newed_item.PublicStringProperty, loaded_item.PublicStringProperty);
+ Assert.AreEqual (newed_item.GetPrivateStringField (), loaded_item.GetPrivateStringField ());
+ Assert.AreEqual (newed_item.GetPrivateStringProperty (), loaded_item.GetPrivateStringProperty ());
+ }
+
+ // Some fidelity is lost in the conversion from DT to DB time format
+ private void AssertArePrettyClose (DateTime time1, DateTime time2)
+ {
+ Assert.AreEqual (time1.Year, time2.Year);
+ Assert.AreEqual (time1.Month, time2.Month);
+ Assert.AreEqual (time1.Day, time2.Day);
+ Assert.AreEqual (time1.Hour, time2.Hour);
+ Assert.AreEqual (time1.Minute, time2.Minute);
+ Assert.AreEqual (time1.Second, time2.Second);
+ }
+
+ [Test]
+ public void DateTimeMembers ()
+ {
+ DbBoundType newed_item = new DbBoundType ();
+ newed_item.PublicDateTimeField = DateTime.Now;
+ newed_item.PublicDateTimeProperty = new DateTime (1986, 4, 23);
+ newed_item.SetPrivateDateTimeField (DateTime.MinValue);
+ newed_item.SetPrivateDateTimeProperty (DateTime.Now);
+
+ provider.Save (newed_item);
+
+ string command = String.Format ("SELECT PrivateDateTimeField FROM {0} WHERE PrimaryKey = {1}", provider.TableName, newed_item.PrimaryKey);
+
+ using (IDataReader reader = connection.Query (command)) {
+ reader.Read ();
+ Assert.IsTrue (reader.IsDBNull (0));
+ }
+
+ DbBoundType loaded_item = provider.FetchSingle (newed_item.PrimaryKey);
+ AssertArePrettyClose (newed_item.PublicDateTimeField, loaded_item.PublicDateTimeField);
+ AssertArePrettyClose (newed_item.PublicDateTimeProperty, loaded_item.PublicDateTimeProperty);
+ AssertArePrettyClose (newed_item.GetPrivateDateTimeField (), loaded_item.GetPrivateDateTimeField ());
+ AssertArePrettyClose (newed_item.GetPrivateDateTimeProperty (), loaded_item.GetPrivateDateTimeProperty ());
+ }
+
+ [Test]
+ public void TimeSpanMembers ()
+ {
+ DbBoundType newed_item = new DbBoundType ();
+ newed_item.PublicTimeSpanField = new TimeSpan (0, 0, 1);
+ newed_item.PublicTimeSpanProperty = new TimeSpan (1, 0, 0);
+ newed_item.SetPrivateTimeSpanField (new TimeSpan (1, 39, 12));
+ newed_item.SetPrivateTimeSpanProperty (TimeSpan.MinValue);
+
+ provider.Save (newed_item);
+
+ string command = String.Format ("SELECT PrivateTimeSpanProperty FROM {0} WHERE PrimaryKey = {1}", provider.TableName, newed_item.PrimaryKey);
+ using (IDataReader reader = connection.Query (command)) {
+ reader.Read ();
+ Assert.IsTrue (reader.IsDBNull (0));
+ }
+
+ // NUnit boxes and uses reference equality, rather than Equals()
+ DbBoundType loaded_item = provider.FetchSingle (newed_item.PrimaryKey);
+ Assert.AreEqual (newed_item.PublicTimeSpanField, loaded_item.PublicTimeSpanField);
+ Assert.AreEqual (newed_item.PublicTimeSpanProperty, loaded_item.PublicTimeSpanProperty);
+ Assert.AreEqual (newed_item.GetPrivateTimeSpanField (), loaded_item.GetPrivateTimeSpanField ());
+ Assert.AreEqual (newed_item.GetPrivateTimeSpanProperty (), loaded_item.GetPrivateTimeSpanProperty ());
+ }
+
+ [Test]
+ public void IntEnumMembers ()
+ {
+ DbBoundType newed_item = new DbBoundType ();
+ newed_item.PublicIntEnumField = IntEnum.Zero;
+ newed_item.PublicIntEnumProperty = IntEnum.One;
+ newed_item.SetPrivateIntEnumField (IntEnum.Two);
+ newed_item.SetPrivateIntEnumProperty (IntEnum.Three);
+
+ provider.Save (newed_item);
+
+ DbBoundType loaded_item = provider.FetchSingle (newed_item.PrimaryKey);
+ Assert.AreEqual (newed_item.PublicIntEnumField, loaded_item.PublicIntEnumField);
+ Assert.AreEqual (newed_item.PublicIntEnumProperty, loaded_item.PublicIntEnumProperty);
+ Assert.AreEqual (newed_item.GetPrivateIntEnumField (), loaded_item.GetPrivateIntEnumField ());
+ Assert.AreEqual (newed_item.GetPrivateIntEnumProperty (), loaded_item.GetPrivateIntEnumProperty ());
+ }
+
+ [Test]
+ public void LongEnumMembers ()
+ {
+ DbBoundType newed_item = new DbBoundType ();
+ newed_item.PublicLongEnumField = LongEnum.Cero;
+ newed_item.PublicLongEnumProperty = LongEnum.Uno;
+ newed_item.SetPrivateLongEnumField (LongEnum.Dos);
+ newed_item.SetPrivateLongEnumProperty (LongEnum.Tres);
+
+ provider.Save (newed_item);
+
+ DbBoundType loaded_item = provider.FetchSingle (newed_item.PrimaryKey);
+ Assert.AreEqual (newed_item.PublicLongEnumField, loaded_item.PublicLongEnumField);
+ Assert.AreEqual (newed_item.PublicLongEnumProperty, loaded_item.PublicLongEnumProperty);
+ Assert.AreEqual (newed_item.GetPrivateLongEnumField (), loaded_item.GetPrivateLongEnumField ());
+ Assert.AreEqual (newed_item.GetPrivateLongEnumProperty (), loaded_item.GetPrivateLongEnumProperty ());
+ }
+ }
+}
+
+#endif
diff --git a/lib/Hyena/src/Hyena.Data.Sqlite/Hyena.Data.Sqlite/Tests/SqliteUtilTests.cs b/lib/Hyena/src/Hyena.Data.Sqlite/Hyena.Data.Sqlite/Tests/SqliteUtilTests.cs
new file mode 100644
index 0000000..2ccc8be
--- /dev/null
+++ b/lib/Hyena/src/Hyena.Data.Sqlite/Hyena.Data.Sqlite/Tests/SqliteUtilTests.cs
@@ -0,0 +1,86 @@
+//
+// SqliteUtilTests.cs
+//
+// Author:
+// John Millikin <jmillikin at gmail.com>
+//
+// Permission is hereby granted, free of charge, to any person obtaining
+// a copy of this software and associated documentation files (the
+// "Software"), to deal in the Software without restriction, including
+// without limitation the rights to use, copy, modify, merge, publish,
+// distribute, sublicense, and/or sell copies of the Software, and to
+// permit persons to whom the Software is furnished to do so, subject to
+// the following conditions:
+//
+// The above copyright notice and this permission notice shall be
+// included in all copies or substantial portions of the Software.
+//
+// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
+// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
+// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
+// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+//
+
+#if ENABLE_TESTS
+
+using NUnit.Framework;
+using Hyena.Data.Sqlite;
+
+namespace Hyena.Data.Sqlite.Tests
+{
+ [TestFixture]
+ public class CollationKeyTests
+ {
+ protected void CollationKeyTest (object before, object after)
+ {
+ Assert.AreEqual (after, (new CollationKeyFunction ()).Invoke (new object[] {before}));
+ }
+
+ [Test]
+ public void TestNull ()
+ {
+ CollationKeyTest (null, null);
+ CollationKeyTest (System.DBNull.Value, null);
+ }
+
+ [Test]
+ public void TestKey ()
+ {
+ // See Hyena.StringUtil.Tests for full tests. This just checks that
+ // the collation function is actually being used.
+ CollationKeyTest ("", new byte[] {1, 1, 1, 1, 0});
+ CollationKeyTest ("\u0104", new byte[] {14, 2, 1, 27, 1, 1, 1, 0});
+ }
+ }
+
+ [TestFixture]
+ public class SearchKeyTests
+ {
+ protected void SearchKeyTest (object before, object after)
+ {
+ Assert.AreEqual (after, (new SearchKeyFunction ()).Invoke (new object[] {before}));
+ }
+
+ [Test]
+ public void TestNull ()
+ {
+ SearchKeyTest (null, null);
+ SearchKeyTest (System.DBNull.Value, null);
+ }
+
+ [Test]
+ public void TestKey ()
+ {
+ // See Hyena.StringUtil.Tests for full tests. This just checks that
+ // the search key function is actually being used.
+ SearchKeyTest ("", "");
+ SearchKeyTest ("\u0104", "a");
+ }
+ }
+}
+
+#endif
+
diff --git a/lib/Hyena/src/Hyena.Data.Sqlite/Hyena.Metrics/DbSampleStore.cs b/lib/Hyena/src/Hyena.Data.Sqlite/Hyena.Metrics/DbSampleStore.cs
new file mode 100644
index 0000000..ff6a9f3
--- /dev/null
+++ b/lib/Hyena/src/Hyena.Data.Sqlite/Hyena.Metrics/DbSampleStore.cs
@@ -0,0 +1,57 @@
+//
+// DbSampleStore.cs
+//
+// Author:
+// Gabriel Burt <gabriel.burt at gmail.com>
+//
+// Copyright (c) 2010 Novell, Inc.
+//
+// Permission is hereby granted, free of charge, to any person obtaining a copy
+// of this software and associated documentation files (the "Software"), to deal
+// in the Software without restriction, including without limitation the rights
+// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+// copies of the Software, and to permit persons to whom the Software is
+// furnished to do so, subject to the following conditions:
+//
+// The above copyright notice and this permission notice shall be included in
+// all copies or substantial portions of the Software.
+//
+// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+// THE SOFTWARE.
+
+using System;
+using Hyena.Data.Sqlite;
+using System.Collections.Generic;
+
+namespace Hyena.Metrics
+{
+ public class DbSampleStore : SqliteModelProvider<Sample>, ISampleStore
+ {
+ private HyenaSqliteConnection conn;
+
+ public DbSampleStore (HyenaSqliteConnection conn, string tableName) : base(conn, tableName, true)
+ {
+ this.conn = conn;
+ }
+
+ public void Add (Sample sample)
+ {
+ Save (sample);
+ }
+
+ public IEnumerable<Sample> GetFor (Metric metric)
+ {
+ return FetchAllMatching ("MetricName = ? ORDER BY Stamp ASC", metric.Name);
+ }
+
+ public void Clear ()
+ {
+ conn.Execute (String.Format ("DELETE FROM {0}", TableName));
+ }
+ }
+}
diff --git a/lib/Hyena/src/Hyena.Data.Sqlite/Hyena.Metrics/HttpPoster.cs b/lib/Hyena/src/Hyena.Data.Sqlite/Hyena.Metrics/HttpPoster.cs
new file mode 100644
index 0000000..774b2ba
--- /dev/null
+++ b/lib/Hyena/src/Hyena.Data.Sqlite/Hyena.Metrics/HttpPoster.cs
@@ -0,0 +1,73 @@
+//
+// HttpPoster.cs
+//
+// Author:
+// Gabriel Burt <gabriel.burt at gmail.com>
+//
+// Copyright (c) 2010 Novell, Inc.
+//
+// Permission is hereby granted, free of charge, to any person obtaining a copy
+// of this software and associated documentation files (the "Software"), to deal
+// in the Software without restriction, including without limitation the rights
+// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+// copies of the Software, and to permit persons to whom the Software is
+// furnished to do so, subject to the following conditions:
+//
+// The above copyright notice and this permission notice shall be included in
+// all copies or substantial portions of the Software.
+//
+// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+// THE SOFTWARE.
+
+using System;
+using System.IO;
+using System.Net;
+
+namespace Hyena.Metrics
+{
+ public class HttpPoster
+ {
+ private string url;
+ private MetricsCollection metrics;
+
+ public HttpPoster (string url, MetricsCollection metrics)
+ {
+ this.url = url;
+ this.metrics = metrics;
+ }
+
+ public bool Post ()
+ {
+ var request = (HttpWebRequest) WebRequest.Create (url);
+ request.Timeout = 30 * 1000;
+ request.Method = "POST";
+ request.KeepAlive = false;
+ request.ContentType = "text/json";
+ request.AllowAutoRedirect = true;
+
+ try {
+ using (var stream = request.GetRequestStream ()) {
+ using (var writer = new StreamWriter (stream)) {
+ // TODO gzip the data
+ writer.Write (metrics.ToJsonString ());
+ }
+ }
+
+ var response = (HttpWebResponse) request.GetResponse ();
+ using (var strm = new StreamReader (response.GetResponseStream ())) {
+ Console.WriteLine (strm.ReadToEnd ());
+ }
+ return response.StatusCode == HttpStatusCode.OK;
+ } catch (Exception e) {
+ Log.Exception ("Error posting metrics", e);
+ }
+
+ return false;
+ }
+ }
+}
\ No newline at end of file
diff --git a/lib/Hyena/src/Hyena.Data.Sqlite/Hyena.Metrics/ISampleStore.cs b/lib/Hyena/src/Hyena.Data.Sqlite/Hyena.Metrics/ISampleStore.cs
new file mode 100644
index 0000000..40c3c41
--- /dev/null
+++ b/lib/Hyena/src/Hyena.Data.Sqlite/Hyena.Metrics/ISampleStore.cs
@@ -0,0 +1,38 @@
+//
+// ISampleStore.cs
+//
+// Author:
+// Gabriel Burt <gabriel.burt at gmail.com>
+//
+// Copyright (c) 2010 Novell, Inc.
+//
+// Permission is hereby granted, free of charge, to any person obtaining a copy
+// of this software and associated documentation files (the "Software"), to deal
+// in the Software without restriction, including without limitation the rights
+// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+// copies of the Software, and to permit persons to whom the Software is
+// furnished to do so, subject to the following conditions:
+//
+// The above copyright notice and this permission notice shall be included in
+// all copies or substantial portions of the Software.
+//
+// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+// THE SOFTWARE.
+
+using System;
+using System.Collections.Generic;
+
+namespace Hyena.Metrics
+{
+ public interface ISampleStore
+ {
+ void Add (Sample sample);
+ IEnumerable<Sample> GetFor (Metric metric);
+ void Clear ();
+ }
+}
diff --git a/lib/Hyena/src/Hyena.Data.Sqlite/Hyena.Metrics/MemorySampleStore.cs b/lib/Hyena/src/Hyena.Data.Sqlite/Hyena.Metrics/MemorySampleStore.cs
new file mode 100644
index 0000000..00ad1a4
--- /dev/null
+++ b/lib/Hyena/src/Hyena.Data.Sqlite/Hyena.Metrics/MemorySampleStore.cs
@@ -0,0 +1,52 @@
+//
+// MemorySampleStore.cs
+//
+// Author:
+// Gabriel Burt <gabriel.burt at gmail.com>
+//
+// Copyright (c) 2010 Novell, Inc.
+//
+// Permission is hereby granted, free of charge, to any person obtaining a copy
+// of this software and associated documentation files (the "Software"), to deal
+// in the Software without restriction, including without limitation the rights
+// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+// copies of the Software, and to permit persons to whom the Software is
+// furnished to do so, subject to the following conditions:
+//
+// The above copyright notice and this permission notice shall be included in
+// all copies or substantial portions of the Software.
+//
+// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+// THE SOFTWARE.
+
+using System;
+using System.Collections.Generic;
+
+namespace Hyena.Metrics
+{
+ public class MemorySampleStore : Dictionary<string, List<Sample>>, ISampleStore
+ {
+ public MemorySampleStore ()
+ {
+ }
+
+ public void Add (Sample sample)
+ {
+ if (!ContainsKey (sample.MetricName)) {
+ this[sample.MetricName] = new List<Sample> ();
+ }
+
+ this[sample.MetricName].Add (sample);
+ }
+
+ public IEnumerable<Sample> GetFor (Metric metric)
+ {
+ return this[metric.Name];
+ }
+ }
+}
diff --git a/lib/Hyena/src/Hyena.Data.Sqlite/Hyena.Metrics/Metric.cs b/lib/Hyena/src/Hyena.Data.Sqlite/Hyena.Metrics/Metric.cs
new file mode 100644
index 0000000..773a5bd
--- /dev/null
+++ b/lib/Hyena/src/Hyena.Data.Sqlite/Hyena.Metrics/Metric.cs
@@ -0,0 +1,84 @@
+//
+// Metric.cs
+//
+// Author:
+// Gabriel Burt <gabriel.burt at gmail.com>
+//
+// Copyright (c) 2010 Novell, Inc.
+//
+// Permission is hereby granted, free of charge, to any person obtaining a copy
+// of this software and associated documentation files (the "Software"), to deal
+// in the Software without restriction, including without limitation the rights
+// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+// copies of the Software, and to permit persons to whom the Software is
+// furnished to do so, subject to the following conditions:
+//
+// The above copyright notice and this permission notice shall be included in
+// all copies or substantial portions of the Software.
+//
+// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+// THE SOFTWARE.
+
+using System;
+using System.Collections.Generic;
+using System.Reflection;
+
+namespace Hyena.Metrics
+{
+ public sealed class Metric : IDisposable
+ {
+ public string Name { get; private set; }
+ public bool CanTakeSample { get { return sample_func != null; } }
+
+ private ISampleStore store;
+ private Func<object> sample_func;
+
+ internal Metric (string name, ISampleStore store)
+ {
+ Name = name;
+ this.store = store;
+ }
+
+ internal Metric (string name, ISampleStore store, Func<object> sampleFunc) : this (name, store)
+ {
+ sample_func = sampleFunc;
+ }
+
+ internal Metric (string name, ISampleStore store, object value) : this (name, store)
+ {
+ PushSample (value);
+ }
+
+ public void Dispose ()
+ {
+ }
+
+ public void PushSample (object sampleValue)
+ {
+ try {
+ store.Add (new Sample (this, sampleValue));
+ } catch (Exception e) {
+ Log.Exception ("Error taking sample", e);
+ }
+ }
+
+ public void TakeSample ()
+ {
+ if (sample_func == null) {
+ Log.Warning ("sampleFunc is null. Are you calling TakeSample on a non-event-driven metric?");
+ return;
+ }
+
+ try {
+ store.Add (new Sample (this, sample_func ()));
+ } catch (Exception e) {
+ Log.Exception ("Error taking sample", e);
+ }
+ }
+ }
+}
diff --git a/lib/Hyena/src/Hyena.Data.Sqlite/Hyena.Metrics/MetricsCollection.cs b/lib/Hyena/src/Hyena.Data.Sqlite/Hyena.Metrics/MetricsCollection.cs
new file mode 100644
index 0000000..a421ece
--- /dev/null
+++ b/lib/Hyena/src/Hyena.Data.Sqlite/Hyena.Metrics/MetricsCollection.cs
@@ -0,0 +1,112 @@
+//
+// MetricsCollection.cs
+//
+// Author:
+// Gabriel Burt <gabriel.burt at gmail.com>
+//
+// Copyright (c) 2010 Novell, Inc.
+//
+// Permission is hereby granted, free of charge, to any person obtaining a copy
+// of this software and associated documentation files (the "Software"), to deal
+// in the Software without restriction, including without limitation the rights
+// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+// copies of the Software, and to permit persons to whom the Software is
+// furnished to do so, subject to the following conditions:
+//
+// The above copyright notice and this permission notice shall be included in
+// all copies or substantial portions of the Software.
+//
+// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+// THE SOFTWARE.
+
+using System;
+using System.Linq;
+using System.Collections.Generic;
+using System.Text;
+using System.Reflection;
+
+using Hyena;
+using Hyena.Json;
+
+namespace Hyena.Metrics
+{
+ public sealed class MetricsCollection : List<Metric>, IDisposable
+ {
+ public static readonly int FormatVersion = 1;
+
+ public string AnonymousUserId { get; private set; }
+ public ISampleStore Store { get; private set; }
+
+ public MetricsCollection (string uniqueUserId, ISampleStore store)
+ {
+ AnonymousUserId = uniqueUserId;
+ Store = store;
+ }
+
+ public Metric Add (string name)
+ {
+ return Add (new Metric (name, Store));
+ }
+
+ public Metric Add (string name, object value)
+ {
+ return Add (new Metric (name, Store, value));
+ }
+
+ public Metric Add (string name, Func<object> sampleFunc)
+ {
+ return Add (new Metric (name, Store, sampleFunc));
+ }
+
+ public new Metric Add (Metric metric)
+ {
+ base.Add (metric);
+ return metric;
+ }
+
+ public void Dispose ()
+ {
+ foreach (var m in this) {
+ m.Dispose ();
+ }
+ Clear ();
+ }
+
+ public string ToJsonString ()
+ {
+ var report = new Dictionary<string, object> ();
+
+ report["ID"] = AnonymousUserId;
+ report["Now"] = DateTimeUtil.ToInvariantString (DateTime.Now);
+ report["FormatVersion"] = FormatVersion;
+
+ var metrics = new Dictionary<string, object> ();
+ foreach (var metric in this.OrderBy (m => m.Name)) {
+ metrics[metric.Name] = Store.GetFor (metric).Select (s => new object [] { DateTimeUtil.ToInvariantString (s.Stamp), s.Value ?? "" });
+ }
+ report["Metrics"] = metrics;
+
+ return new Serializer (report).Serialize ();
+ }
+
+ public void AddDefaults ()
+ {
+ Add ("Env/OS Platform", PlatformDetection.SystemName);
+ Add ("Env/OS Version", System.Environment.OSVersion);
+ Add ("Env/Processor Count", System.Environment.ProcessorCount);
+ Add ("Env/.NET Runtime Version", System.Environment.Version);
+ Add ("Env/Debugging", ApplicationContext.Debugging);
+ Add ("Env/CultureInfo", System.Globalization.CultureInfo.CurrentCulture.Name);
+
+ foreach (var asm in AppDomain.CurrentDomain.GetAssemblies ()) {
+ var name = asm.GetName ();
+ Add (String.Format ("Assemblies/{0}", name.Name), name.Version);
+ }
+ }
+ }
+}
\ No newline at end of file
diff --git a/lib/Hyena/src/Hyena.Data.Sqlite/Hyena.Metrics/Sample.cs b/lib/Hyena/src/Hyena.Data.Sqlite/Hyena.Metrics/Sample.cs
new file mode 100644
index 0000000..ceb6e27
--- /dev/null
+++ b/lib/Hyena/src/Hyena.Data.Sqlite/Hyena.Metrics/Sample.cs
@@ -0,0 +1,67 @@
+//
+// Sample.cs
+//
+// Author:
+// Gabriel Burt <gabriel.burt at gmail.com>
+//
+// Copyright (c) 2010 Novell, Inc.
+//
+// Permission is hereby granted, free of charge, to any person obtaining a copy
+// of this software and associated documentation files (the "Software"), to deal
+// in the Software without restriction, including without limitation the rights
+// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+// copies of the Software, and to permit persons to whom the Software is
+// furnished to do so, subject to the following conditions:
+//
+// The above copyright notice and this permission notice shall be included in
+// all copies or substantial portions of the Software.
+//
+// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+// THE SOFTWARE.
+
+using System;
+using Hyena.Data.Sqlite;
+
+namespace Hyena.Metrics
+{
+ public class Sample
+ {
+ [DatabaseColumn (Constraints = DatabaseColumnConstraints.PrimaryKey)]
+ protected long Id { get; set; }
+
+ [DatabaseColumn]
+ public string MetricName { get; protected set; }
+
+ [DatabaseColumn]
+ public DateTime Stamp { get; protected set; }
+
+ [DatabaseColumn]
+ public string Value { get; protected set; }
+
+ // For SqliteModelProvider's use
+ public Sample () {}
+
+ public Sample (Metric metric, object value)
+ {
+ MetricName = metric.Name;
+ Stamp = DateTime.Now;
+ SetValue (value);
+ }
+
+ protected void SetValue (object value)
+ {
+ if (value == null) {
+ Value = "";
+ } else if (value is DateTime) {
+ Value = Hyena.DateTimeUtil.ToInvariantString ((DateTime) value);
+ } else {
+ Value = value.ToString ();
+ }
+ }
+ }
+}
\ No newline at end of file
diff --git a/lib/Hyena/src/Hyena.Data.Sqlite/Hyena.Metrics/Tests/MetricsTests.cs b/lib/Hyena/src/Hyena.Data.Sqlite/Hyena.Metrics/Tests/MetricsTests.cs
new file mode 100644
index 0000000..c620a5c
--- /dev/null
+++ b/lib/Hyena/src/Hyena.Data.Sqlite/Hyena.Metrics/Tests/MetricsTests.cs
@@ -0,0 +1,76 @@
+//
+// MetricsTests.cs
+//
+// Author:
+// Gabriel Burt <gburt at novell.com>
+//
+// Copyright (C) 2010 Novell, Inc.
+//
+// Permission is hereby granted, free of charge, to any person obtaining
+// a copy of this software and associated documentation files (the
+// "Software"), to deal in the Software without restriction, including
+// without limitation the rights to use, copy, modify, merge, publish,
+// distribute, sublicense, and/or sell copies of the Software, and to
+// permit persons to whom the Software is furnished to do so, subject to
+// the following conditions:
+//
+// The above copyright notice and this permission notice shall be
+// included in all copies or substantial portions of the Software.
+//
+// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
+// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
+// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
+// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+//
+
+#if ENABLE_TESTS
+
+using System;
+using System.Linq;
+using System.IO;
+using NUnit.Framework;
+
+using Hyena;
+using Hyena.Json;
+using Hyena.Metrics;
+
+namespace Hyena.Tests
+{
+ [TestFixture]
+ public class MetricsTests
+ {
+ [Test]
+ public void MetricsCollection ()
+ {
+ string id = "myuniqueid";
+ var metrics = new MetricsCollection (id, new MemorySampleStore ());
+ Assert.AreEqual ("myuniqueid", metrics.AnonymousUserId);
+
+ metrics.AddDefaults ();
+ Assert.IsTrue (metrics.Count > 0);
+
+ string metrics_str = metrics.ToJsonString ();
+ Assert.IsTrue (metrics_str.Contains ("\"ID\":\"myuniqueid\""));
+
+ // tests/Makefile.am runs the tests with Locale=it_IT
+ Assert.IsTrue (metrics_str.Contains ("it-IT"));
+
+ // Make sure DateTime samples are saved as invariant strings
+ var now = DateTime.Now;
+ var time_metric = metrics.Add ("Foo", now);
+ Assert.AreEqual (Hyena.DateTimeUtil.ToInvariantString (now), metrics.Store.GetFor (time_metric).First ().Value);
+
+ // Make sure we can read the JSON back in
+ var ds = new Json.Deserializer ();
+ ds.SetInput (metrics.ToJsonString ());
+ var json_obj = ds.Deserialize () as JsonObject;
+ Assert.AreEqual (id, json_obj["ID"]);
+ Assert.IsTrue (json_obj["Metrics"] is JsonObject);
+ }
+ }
+}
+
+#endif
diff --git a/lib/Hyena/src/Hyena.Data.Sqlite/Makefile.am b/lib/Hyena/src/Hyena.Data.Sqlite/Makefile.am
new file mode 100644
index 0000000..9f44292
--- /dev/null
+++ b/lib/Hyena/src/Hyena.Data.Sqlite/Makefile.am
@@ -0,0 +1,30 @@
+ASSEMBLY = Hyena.Data.Sqlite
+TARGET = library
+LINK = -r:Mono.Posix -r:System -r:System.Core -r:System.Data \
+ -r:$(DIR_BIN)/Mono.Data.Sqlite.dll \
+ -r:$(DIR_BIN)/Hyena.dll
+SOURCES = \
+ Hyena.Data.Sqlite/DatabaseColumn.cs \
+ Hyena.Data.Sqlite/DatabaseColumnAttribute.cs \
+ Hyena.Data.Sqlite/HyenaSqliteArrayDataReader.cs \
+ Hyena.Data.Sqlite/HyenaSqliteCommand.cs \
+ Hyena.Data.Sqlite/HyenaSqliteConnection.cs \
+ Hyena.Data.Sqlite/ICacheableDatabaseModel.cs \
+ Hyena.Data.Sqlite/SqliteModelCache.cs \
+ Hyena.Data.Sqlite/SqliteModelProvider.cs \
+ Hyena.Data.Sqlite/SqliteUtils.cs \
+ Hyena.Data.Sqlite/Tests/DbBoundType.cs \
+ Hyena.Data.Sqlite/Tests/SqliteCommandTests.cs \
+ Hyena.Data.Sqlite/Tests/SqliteModelProviderTests.cs \
+ Hyena.Data.Sqlite/Tests/SqliteUtilTests.cs \
+ Hyena.Metrics/DbSampleStore.cs \
+ Hyena.Metrics/HttpPoster.cs \
+ Hyena.Metrics/ISampleStore.cs \
+ Hyena.Metrics/MemorySampleStore.cs \
+ Hyena.Metrics/Metric.cs \
+ Hyena.Metrics/MetricsCollection.cs \
+ Hyena.Metrics/Sample.cs \
+ Hyena.Metrics/Tests/MetricsTests.cs
+
+include $(top_srcdir)/build/build.mk
+EXTRA_DIST += hyena.data.sqlite.pc.in
diff --git a/lib/Hyena/src/Hyena.Data.Sqlite/Makefile.in b/lib/Hyena/src/Hyena.Data.Sqlite/Makefile.in
new file mode 100644
index 0000000..402e970
--- /dev/null
+++ b/lib/Hyena/src/Hyena.Data.Sqlite/Makefile.in
@@ -0,0 +1,826 @@
+# Makefile.in generated by automake 1.11.1 from Makefile.am.
+# @configure_input@
+
+# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
+# 2003, 2004, 2005, 2006, 2007, 2008, 2009 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.
+
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
+# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
+# PARTICULAR PURPOSE.
+
+ at SET_MAKE@
+
+VPATH = @srcdir@
+pkgdatadir = $(datadir)/@PACKAGE@
+pkgincludedir = $(includedir)/@PACKAGE@
+pkglibdir = $(libdir)/@PACKAGE@
+pkglibexecdir = $(libexecdir)/@PACKAGE@
+am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
+install_sh_DATA = $(install_sh) -c -m 644
+install_sh_PROGRAM = $(install_sh) -c
+install_sh_SCRIPT = $(install_sh) -c
+INSTALL_HEADER = $(INSTALL_DATA)
+transform = $(program_transform_name)
+NORMAL_INSTALL = :
+PRE_INSTALL = :
+POST_INSTALL = :
+NORMAL_UNINSTALL = :
+PRE_UNINSTALL = :
+POST_UNINSTALL = :
+build_triplet = @build@
+host_triplet = @host@
+DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in \
+ $(top_srcdir)/build/build.environment.mk \
+ $(top_srcdir)/build/build.mk \
+ $(top_srcdir)/build/build.rules.mk
+ at ENABLE_TESTS_TRUE@am__append_1 = " $(NUNIT_LIBS)"
+subdir = lib/Hyena/src/Hyena.Data.Sqlite
+ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
+am__aclocal_m4_deps = $(top_srcdir)/build/m4/shave/shave.m4 \
+ $(top_srcdir)/build/m4/shamrock/expansions.m4 \
+ $(top_srcdir)/build/m4/shamrock/gnome-doc.m4 \
+ $(top_srcdir)/build/m4/shamrock/mono.m4 \
+ $(top_srcdir)/build/m4/shamrock/nunit.m4 \
+ $(top_srcdir)/build/m4/shamrock/programs.m4 \
+ $(top_srcdir)/build/m4/f-spot/flickrnet.m4 \
+ $(top_srcdir)/build/m4/f-spot/gnome-keyring-sharp.m4 \
+ $(top_srcdir)/build/m4/f-spot/gtk-sharp.m4 \
+ $(top_srcdir)/build/m4/f-spot/mono-addins.m4 \
+ $(top_srcdir)/acinclude.m4 $(top_srcdir)/configure.ac
+am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
+ $(ACLOCAL_M4)
+mkinstalldirs = $(install_sh) -d
+CONFIG_HEADER = $(top_builddir)/config.h
+CONFIG_CLEAN_FILES =
+CONFIG_CLEAN_VPATH_FILES =
+am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`;
+am__vpath_adj = case $$p in \
+ $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \
+ *) f=$$p;; \
+ esac;
+am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`;
+am__install_max = 40
+am__nobase_strip_setup = \
+ srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'`
+am__nobase_strip = \
+ for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||"
+am__nobase_list = $(am__nobase_strip_setup); \
+ for p in $$list; do echo "$$p $$p"; done | \
+ sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \
+ $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \
+ if (++n[$$2] == $(am__install_max)) \
+ { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \
+ END { for (dir in files) print dir, files[dir] }'
+am__base_list = \
+ sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \
+ sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g'
+am__installdirs = "$(DESTDIR)$(moduledir)"
+SCRIPTS = $(module_SCRIPTS)
+DIST_SOURCES =
+DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
+ACLOCAL = @ACLOCAL@
+ACLOCAL_AMFLAGS = @ACLOCAL_AMFLAGS@
+ALL_LINGUAS = @ALL_LINGUAS@
+AMTAR = @AMTAR@
+AM_MAKEFLAGS = @AM_MAKEFLAGS@
+API_VERSION = @API_VERSION@
+AR = @AR@
+ASM_VERSION = @ASM_VERSION@
+AUTOCONF = @AUTOCONF@
+AUTOHEADER = @AUTOHEADER@
+AUTOMAKE = @AUTOMAKE@
+AWK = @AWK@
+CATALOGS = @CATALOGS@
+CATOBJEXT = @CATOBJEXT@
+CC = @CC@
+CCDEPMODE = @CCDEPMODE@
+CFLAGS = @CFLAGS@
+CPP = @CPP@
+CPPFLAGS = @CPPFLAGS@
+CSC_DEFINES = @CSC_DEFINES@
+CXX = @CXX@
+CXXCPP = @CXXCPP@
+CXXDEPMODE = @CXXDEPMODE@
+CXXFLAGS = @CXXFLAGS@
+CYGPATH_W = @CYGPATH_W@
+DATADIRNAME = @DATADIRNAME@
+DEFS = @DEFS@
+DEPDIR = @DEPDIR@
+DISPLAY_VERSION = @DISPLAY_VERSION@
+DISTCHECK_CONFIGURE_FLAGS = @DISTCHECK_CONFIGURE_FLAGS@
+DOC_USER_FORMATS = @DOC_USER_FORMATS@
+DSYMUTIL = @DSYMUTIL@
+DUMPBIN = @DUMPBIN@
+ECHO_C = @ECHO_C@
+ECHO_N = @ECHO_N@
+ECHO_T = @ECHO_T@
+EGREP = @EGREP@
+EXEEXT = @EXEEXT@
+EXIF_CFLAGS = @EXIF_CFLAGS@
+EXIF_LIBS = @EXIF_LIBS@
+EXIF_SOVERSION = @EXIF_SOVERSION@
+F77 = @F77@
+FC = @FC@
+FGREP = @FGREP@
+FLICKRNET_CFLAGS = @FLICKRNET_CFLAGS@
+FLICKRNET_LIBS = @FLICKRNET_LIBS@
+F_CFLAGS = @F_CFLAGS@
+F_LIBS = @F_LIBS@
+GAPI2CODEGEN = @GAPI2CODEGEN@
+GAPI2FIXUP = @GAPI2FIXUP@
+GAPI2PARSER = @GAPI2PARSER@
+GCONFTOOL = @GCONFTOOL@
+GCONF_SCHEMA_CONFIG_SOURCE = @GCONF_SCHEMA_CONFIG_SOURCE@
+GCONF_SCHEMA_FILE_DIR = @GCONF_SCHEMA_FILE_DIR@
+GCONF_SHARP_CFLAGS = @GCONF_SHARP_CFLAGS@
+GCONF_SHARP_LIBS = @GCONF_SHARP_LIBS@
+GETTEXT_PACKAGE = @GETTEXT_PACKAGE@
+GIO_CFLAGS = @GIO_CFLAGS@
+GIO_LIBS = @GIO_LIBS@
+GLIBSHARP_2_12_7_CFLAGS = @GLIBSHARP_2_12_7_CFLAGS@
+GLIBSHARP_2_12_7_LIBS = @GLIBSHARP_2_12_7_LIBS@
+GLIBSHARP_CFLAGS = @GLIBSHARP_CFLAGS@
+GLIBSHARP_LIBS = @GLIBSHARP_LIBS@
+GLIB_CFLAGS = @GLIB_CFLAGS@
+GLIB_GENMARSHAL = @GLIB_GENMARSHAL@
+GLIB_LIBS = @GLIB_LIBS@
+GLIB_MKENUMS = @GLIB_MKENUMS@
+GMOFILES = @GMOFILES@
+GMSGFMT = @GMSGFMT@
+GNOME_ICON_THEME_PREFIX = @GNOME_ICON_THEME_PREFIX@
+GNOME_SCREENSAVER_SAVERDIR = @GNOME_SCREENSAVER_SAVERDIR@
+GNOME_SCREENSAVER_THEMESDIR = @GNOME_SCREENSAVER_THEMESDIR@
+GNOME_SHARP_CFLAGS = @GNOME_SHARP_CFLAGS@
+GNOME_SHARP_LIBS = @GNOME_SHARP_LIBS@
+GOBJECT_QUERY = @GOBJECT_QUERY@
+GREP = @GREP@
+GTKSHARP_A11Y_CFLAGS = @GTKSHARP_A11Y_CFLAGS@
+GTKSHARP_A11Y_LIBS = @GTKSHARP_A11Y_LIBS@
+GTKSHARP_CFLAGS = @GTKSHARP_CFLAGS@
+GTKSHARP_LIBS = @GTKSHARP_LIBS@
+HELP_DIR = @HELP_DIR@
+ICONS_DIRECTORY = @ICONS_DIRECTORY@
+INSTALL = @INSTALL@
+INSTALL_DATA = @INSTALL_DATA@
+INSTALL_PROGRAM = @INSTALL_PROGRAM@
+INSTALL_SCRIPT = @INSTALL_SCRIPT@
+INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
+INSTOBJEXT = @INSTOBJEXT@
+INTLLIBS = @INTLLIBS@
+INTLTOOL_EXTRACT = @INTLTOOL_EXTRACT@
+INTLTOOL_MERGE = @INTLTOOL_MERGE@
+INTLTOOL_PERL = @INTLTOOL_PERL@
+INTLTOOL_UPDATE = @INTLTOOL_UPDATE@
+KEYRINGSHARP_CFLAGS = @KEYRINGSHARP_CFLAGS@
+KEYRINGSHARP_LIBS = @KEYRINGSHARP_LIBS@
+LCMS_CFLAGS = @LCMS_CFLAGS@
+LCMS_LIBS = @LCMS_LIBS@
+LD = @LD@
+LDFLAGS = @LDFLAGS@
+LIBEXIF_VERSION_CHECK_CFLAGS = @LIBEXIF_VERSION_CHECK_CFLAGS@
+LIBEXIF_VERSION_CHECK_LIBS = @LIBEXIF_VERSION_CHECK_LIBS@
+LIBJPEG = @LIBJPEG@
+LIBOBJS = @LIBOBJS@
+LIBS = @LIBS@
+LIBTOOL = @LIBTOOL@
+LIPO = @LIPO@
+LN_S = @LN_S@
+LTLIBOBJS = @LTLIBOBJS@
+MAINT = @MAINT@
+MAKEFLAGS = @MAKEFLAGS@
+MAKEINFO = @MAKEINFO@
+MCS = @MCS@
+MKDIR_P = @MKDIR_P@
+MKINSTALLDIRS = @MKINSTALLDIRS@
+MONO = @MONO@
+MONO_ADDINS_CFLAGS = @MONO_ADDINS_CFLAGS@
+MONO_ADDINS_GUI_CFLAGS = @MONO_ADDINS_GUI_CFLAGS@
+MONO_ADDINS_GUI_LIBS = @MONO_ADDINS_GUI_LIBS@
+MONO_ADDINS_LIBS = @MONO_ADDINS_LIBS@
+MONO_ADDINS_SETUP_CFLAGS = @MONO_ADDINS_SETUP_CFLAGS@
+MONO_ADDINS_SETUP_LIBS = @MONO_ADDINS_SETUP_LIBS@
+MONO_MODULE_CFLAGS = @MONO_MODULE_CFLAGS@
+MONO_MODULE_LIBS = @MONO_MODULE_LIBS@
+MSGFMT = @MSGFMT@
+MSGFMT_OPTS = @MSGFMT_OPTS@
+MSGMERGE = @MSGMERGE@
+NDESK_DBUS_CFLAGS = @NDESK_DBUS_CFLAGS@
+NDESK_DBUS_LIBS = @NDESK_DBUS_LIBS@
+NM = @NM@
+NMEDIT = @NMEDIT@
+NUNIT_CFLAGS = @NUNIT_CFLAGS@
+NUNIT_LIBS = @NUNIT_LIBS@
+OBJC = @OBJC@
+OBJDUMP = @OBJDUMP@
+OBJEXT = @OBJEXT@
+OMF_DIR = @OMF_DIR@
+OTOOL = @OTOOL@
+OTOOL64 = @OTOOL64@
+PACKAGE = @PACKAGE@
+PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
+PACKAGE_NAME = @PACKAGE_NAME@
+PACKAGE_STRING = @PACKAGE_STRING@
+PACKAGE_TARNAME = @PACKAGE_TARNAME@
+PACKAGE_URL = @PACKAGE_URL@
+PACKAGE_VERSION = @PACKAGE_VERSION@
+PATH_SEPARATOR = @PATH_SEPARATOR@
+PKG_CONFIG = @PKG_CONFIG@
+POFILES = @POFILES@
+POSUB = @POSUB@
+PO_IN_DATADIR_FALSE = @PO_IN_DATADIR_FALSE@
+PO_IN_DATADIR_TRUE = @PO_IN_DATADIR_TRUE@
+Q = @Q@
+RANLIB = @RANLIB@
+SED = @SED@
+SET_MAKE = @SET_MAKE@
+SHELL = @SHELL@
+STRIP = @STRIP@
+TURTLEDIR = @TURTLEDIR@
+UNIQUE_CFLAGS = @UNIQUE_CFLAGS@
+UNIQUE_LIBS = @UNIQUE_LIBS@
+USE_NLS = @USE_NLS@
+V = @V@
+VERSION = @VERSION@
+WARN_CFLAGS = @WARN_CFLAGS@
+XGETTEXT = @XGETTEXT@
+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_DUMPBIN = @ac_ct_DUMPBIN@
+am__include = @am__include@
+am__leading_dot = @am__leading_dot@
+am__quote = @am__quote@
+am__tar = @am__tar@
+am__untar = @am__untar@
+bindir = @bindir@
+build = @build@
+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@
+expanded_bindir = @expanded_bindir@
+expanded_datadir = @expanded_datadir@
+expanded_libdir = @expanded_libdir@
+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@
+lt_ECHO = @lt_ECHO@
+mandir = @mandir@
+mkdir_p = @mkdir_p@
+oldincludedir = @oldincludedir@
+pdfdir = @pdfdir@
+prefix = @prefix@
+program_transform_name = @program_transform_name@
+psdir = @psdir@
+sbindir = @sbindir@
+sharedstatedir = @sharedstatedir@
+shavedir = @shavedir@
+srcdir = @srcdir@
+sysconfdir = @sysconfdir@
+target_alias = @target_alias@
+top_build_prefix = @top_build_prefix@
+top_builddir = @top_builddir@
+top_srcdir = @top_srcdir@
+ASSEMBLY = Hyena.Data.Sqlite
+TARGET = library
+LINK = -r:Mono.Posix -r:System -r:System.Core -r:System.Data \
+ -r:$(DIR_BIN)/Mono.Data.Sqlite.dll -r:$(DIR_BIN)/Hyena.dll \
+ $(am__append_1)
+SOURCES = \
+ Hyena.Data.Sqlite/DatabaseColumn.cs \
+ Hyena.Data.Sqlite/DatabaseColumnAttribute.cs \
+ Hyena.Data.Sqlite/HyenaSqliteArrayDataReader.cs \
+ Hyena.Data.Sqlite/HyenaSqliteCommand.cs \
+ Hyena.Data.Sqlite/HyenaSqliteConnection.cs \
+ Hyena.Data.Sqlite/ICacheableDatabaseModel.cs \
+ Hyena.Data.Sqlite/SqliteModelCache.cs \
+ Hyena.Data.Sqlite/SqliteModelProvider.cs \
+ Hyena.Data.Sqlite/SqliteUtils.cs \
+ Hyena.Data.Sqlite/Tests/DbBoundType.cs \
+ Hyena.Data.Sqlite/Tests/SqliteCommandTests.cs \
+ Hyena.Data.Sqlite/Tests/SqliteModelProviderTests.cs \
+ Hyena.Data.Sqlite/Tests/SqliteUtilTests.cs \
+ Hyena.Metrics/DbSampleStore.cs \
+ Hyena.Metrics/HttpPoster.cs \
+ Hyena.Metrics/ISampleStore.cs \
+ Hyena.Metrics/MemorySampleStore.cs \
+ Hyena.Metrics/Metric.cs \
+ Hyena.Metrics/MetricsCollection.cs \
+ Hyena.Metrics/Sample.cs \
+ Hyena.Metrics/Tests/MetricsTests.cs
+
+
+# Initializers
+MONO_BASE_PATH =
+MONO_ADDINS_PATH =
+
+# Install Paths
+DEFAULT_INSTALL_DIR = $(pkglibdir)
+BACKENDS_INSTALL_DIR = $(DEFAULT_INSTALL_DIR)/Backends
+EXTENSIONS_INSTALL_DIR = $(DEFAULT_INSTALL_DIR)/Extensions
+DIR_DOCS = $(top_builddir)/docs
+DIR_EXTENSIONS = $(top_builddir)/extensions
+DIR_ICONS = $(top_builddir)/icons
+DIR_JPEGTRAN = $(top_builddir)/lib/libjpegtran
+DIR_LIBFSPOT = $(top_builddir)/lib/libfspot
+DIR_SEMWEB = $(top_builddir)/lib/semweb
+DIR_SRC = $(top_builddir)/src
+DIR_GIOSHARP = $(top_builddir)/lib/gio-sharp/gio
+DIR_GTKSHARPBEANS = $(top_builddir)/lib/gtk-sharp-beans
+DIR_UNIQUESHARP = $(top_builddir)/lib/unique-sharp/unique
+DIR_BIN = $(top_builddir)/bin
+
+# External libraries to link against, generated from configure
+LINK_SYSTEM = -r:System
+LINK_SYSTEMDATA = -r:System.Data
+LINK_SYSTEM_WEB = -r:System.Web
+LINK_MONO_POSIX = -r:Mono.Posix
+LINK_MONO_CAIRO = -r:Mono.Cairo
+LINK_MONO_SIMD = -r:Mono.Simd
+LINK_MONODATA = -r:Mono.Data
+LINK_MONO_DATA_SQLITECLIENT = -r:Mono.Data.SqliteClient
+LINK_ICSHARP_ZIP_LIB = -r:ICSharpCode.SharpZipLib
+LINK_KEYRING = $(KEYRINGSHARP_LIBS)
+LINK_GLIB = $(GLIBSHARP_LIBS)
+LINK_GTK = $(GTKSHARP_LIBS)
+LINK_GNOME = $(GNOME_SHARP_LIBS)
+LINK_GCONF = $(GCONF_SHARP_LIBS)
+LINK_GLADE = -pkg:glade-sharp-2.0
+LINK_FLICKRNET = -pkg:flickrnet
+LINK_DBUS = $(NDESK_DBUS_LIBS) $(NDESK_DBUS_GLIB_LIBS)
+LINK_DBUS_NO_GLIB = $(NDESK_DBUS_LIBS)
+LINK_MONO_ADDINS_DEPS = $(MONO_ADDINS_LIBS)
+LINK_MONO_ADDINS_SETUP_DEPS = $(MONO_ADDINS_SETUP_LIBS)
+LINK_MONO_ADDINS_GUI_DEPS = $(MONO_ADDINS_GUI_LIBS)
+
+# GIO
+REF_GIO =
+LINK_GIO = -r:$(DIR_GIOSHARP)/gio-sharp.dll
+LINK_GIO_DEPS = $(REF_GIO) $(LINK_GIO)
+
+# Gtk Beans
+REF_GTK_BEANS = $(LINK_GIO_DEPS)
+LINK_GTK_BEANS = -r:$(DIR_GTKSHARPBEANS)/gtk-sharp-beans.dll
+LINK_GTK_BEANS_DEPS = $(REF_GTK_BEANS) $(LINK_GTK_BEANS)
+
+# Uniqe
+REF_UNIQUE =
+LINK_UNIQUE = -r:$(DIR_UNIQUESHARP)/unique-sharp.dll
+LINK_UNIQUE_DEPS = $(REF_UNIQUE) $(LINK_UNIQUE)
+
+# Hyena
+REF_HYENA = $(LINK_SYSTEM) $(LINK_MONO_POSIX)
+LINK_HYENA = -r:$(DIR_BIN)/Hyena.dll
+LINK_HYENA_DEPS = $(REF_HYENA) $(LINK_HYENA)
+
+# Semweb
+REF_SEMWEB = $(LINK_SYSTEMDATA) $(LINK_HYENA_DEPS)
+LINK_SEMWEB = -r:$(DIR_BIN)/SemWeb.dll
+LINK_SEMWEB_DEPS = $(REF_SEMWEB) $(LINK_SEMWEB)
+
+# Hyena.Data.Sqlite
+REF_HYENA_DATA_SQLITE = $(LINK_SQLITE)
+LINK_HYENA_DATA_SQLITE = -r:$(DIR_BIN)/Hyena.Data.Sqlite.dll
+LINK_HYENA_DATA_SQLITE_DEPS = $(REF_HYENA_DATA_SQLITE) $(LINK_HYENA_DATA_SQLITE)
+
+# Hyena.Gui
+REF_HYENA_GUI = $(LINK_HYENA_DEPS)
+LINK_HYENA_GUI = -r:$(DIR_BIN)/Hyena.Gui.dll
+LINK_HENA_GUI_DEPS = $(REF_HYENA_GUI) $(LINK_HYENA_GUI)
+
+# FSpot.Cms
+REF_FSPOT_CMS = $(LINK_GTK)
+LINK_FSPOT_CMS = -r:$(DIR_BIN)/FSpot.Cms.dll
+LINK_FSPOT_CMS_DEPS = $(REF_FSPOT_CMS) $(LINK_FSPOT_CMS)
+
+# FSpot.Utils
+REF_FSPOT_UTILS = $(LINK_HYENA_DEPS) $(LINK_GTK) $(LINK_GIO) $(LINK_MONO_CAIRO)
+LINK_FSPOT_UTILS = -r:$(DIR_BIN)/FSpot.Utils.dll
+LINK_FSPOT_UTILS_DEPS = $(REF_FSPOT_UTILS) $(LINK_FSPOT_UTILS)
+
+# FSpot.Core
+REF_FSPOT_CORE = $(LINK_FSPOT_UTILS_DEPS) $(LINK_FSPOT_CMS_DEPS)
+LINK_FSPOT_CORE = -r:$(DIR_BIN)/FSpot.Core.dll
+LINK_FSPOT_CORE_DEPS = $(REF_FSPOT_CORE) $(LINK_FSPOT_CORE)
+
+# FSpot.Query
+REF_FSPOT_QUERY = $(LINK_FSPOT_CORE_DEPS)
+LINK_FSPOT_QUERY = -r:$(DIR_BIN)/FSpot.Query.dll
+LINK_FSPOT_QUERY_DEPS = $(REF_FSPOT_QUERY) $(LINK_FSPOT_QUERY)
+
+# FSpot.JobScheduler
+REF_FSPOT_JOB_SCHEDULER = $(LINK_HYENA_DEPS)
+LINK_FSPOT_JOB_SCHEDULER = -r:$(DIR_BIN)/FSpot.JobScheduler.dll
+LINK_FSPOT_JOB_SCHEDULER_DEPS = $(REF_FSPOT_JOB_SCHEDULER) $(LINK_FSPOT_JOB_SCHEDULER)
+
+# FSpot.Bling
+REF_FSPOT_BLING = $(LINK_GTK_BEANS_DEPS) $(LINK_GLIB)
+LINK_FSPOT_BLING = -r:$(DIR_BIN)/FSpot.Bling.dll
+LINK_FSPOT_BLING_DEPS = $(REF_FSPOT_BLING) $(LINK_FSPOT_BLING)
+
+# FSpot.Platform
+REF_FSPOT_PLATFORM = $(LINK_GCONF) $(LINK_GTK) $(LINK_FSPOT_CORE_DEPS) $(LINK_DBUS)
+LINK_FSPOT_PLATFORM = -r:$(DIR_BIN)/FSpot.Platform.dll
+LINK_FSPOT_PLATFORM_DEPS = $(REF_FSPOT_PLATFORM) $(LINK_FSPOT_PLATFORM)
+
+# FSpot.Widgets
+REF_FSPOT_WIDGETS = $(LINK_FSPOT_CORE_DEPS) $(LINK_FSPOT_BLING_DEPS)
+LINK_FSPOT_WIDGETS = -r:$(DIR_BIN)/FSpot.Widgets.dll
+LINK_FSPOT_WIDGETS_DEPS = $(REF_FSPOT_WIDGETS) $(LINK_FSPOT_WIDGETS)
+
+# FSpot (executable)
+REF_FSPOT = $(LINK_FSPOT_WIDGETS_DEPS) $(LINK_FSPOT_PLATFORM_DEPS) $(LINK_FSPOT_QUERY_DEPS) \
+ $(LINK_GLIB) $(LINK_MONO_ADDINS_DEPS) $(LINK_UNIQUE_DEPS) $(LINK_MONO_ADDINS_SETUP_DEPS) \
+ $(LINK_SEMWEB_DEPS) $(LINK_GLADE) $(LINK_MONODATA) $(LINK_MONO_DATA_SQLITECLIENT) \
+ $(LINK_MONO_ADDINS_GUI_DEPS) $(LINK_FSPOT_JOB_SCHEDULER_DEPS) $(LINK_ICSHARP_ZIP_LIB) \
+ $(LINK_GNOME)
+
+# FIXME: do not link executables
+LINK_FSPOT = -r:$(DIR_BIN)/f-spot.exe
+LINK_FSPOT_DEPS = $(REF_FSPOT) $(LINK_FSPOT)
+
+# Extensions
+REF_FSPOT_EXTENSION_BLACKOUTEDITOR = $(LINK_FSPOT_DEPS)
+REF_FSPOT_EXTENSION_BWEDITOR = $(LINK_FSPOT_DEPS) $(LINK_MONO_SIMD)
+REF_FSPOT_EXTENSION_FLIPEDITOR = $(LINK_FSPOT_DEPS)
+REF_FSPOT_EXTENSION_PIXELATEEDITOR = $(LINK_FSPOT_DEPS)
+REF_FSPOT_EXTENSION_RESIZEEDITOR = $(LINK_FSPOT_DEPS)
+REF_FSPOT_EXTENSION_CDEXPORT = $(LINK_FSPOT_DEPS)
+REF_FSPOT_EXTENSION_FACEBOOKEXPORT = $(LINK_FSPOT_DEPS) $(LINK_KEYRING)
+REF_FSPOT_EXTENSION_FLICKREXPORT = $(LINK_FSPOT_DEPS) $(LINK_FLICKRNET)
+REF_FSPOT_EXTENSION_FOLDEREXPORT = $(LINK_FSPOT_DEPS) $(LINK_SYSTEM_WEB)
+REF_FSPOT_EXTENSION_GALLERYEXPORT = $(LINK_FSPOT_DEPS)
+REF_MONO_GOOGLE = $(LINK_HYENA_DEPS)
+LINK_MONO_GOOGLE = -r:$(DIR_BIN)/Mono.Google.dll
+LINK_MONO_GOOGLE_DEPS = $(REF_MONO_GOOGLE) $(LINK_MONO_GOOGLE)
+REF_FSPOT_EXTENSION_PICASAWEBEXPORT = $(LINK_FSPOT_DEPS) $(LINK_MONO_GOOGLE) $(LINK_KEYRING)
+REF_SMUGMUGNET = $(LINK_FSPOT_DEPS)
+LINK_SMUGMUGNET = -r:$(DIR_BIN)/SmugMugNet.dll
+LINK_SMUGMUGNET_DEPS = $(REF_SMUGMUGNET) $(LINK_SMUGMUGNET)
+REF_FSPOT_EXTENSION_SMUGMUGEXPORT = $(LINK_SMUGMUGNET_DEPS) $(LINK_KEYRING)
+REF_MONO_TABBLO = $(LINK_HYENA_DEPS)
+LINK_MONO_TABBLO = -r:$(DIR_BIN)/Mono.Tabblo.dll
+LINK_MONO_TABBLO_DEPS = $(REF_MONO_TABBLO) $(LINK_MONO_TABBLO)
+REF_FSPOT_EXTENSION_TABBLOEXPORT = $(LINK_FSPOT_DEPS) $(LINK_KEYRING) $(LINK_MONO_TABBLO_DEPS)
+REF_FSPOT_EXTENSION_ZIPEXPORT = $(LINK_FSPOT_DEPS)
+REF_FSPOT_EXTENSION_CHANGEPHOTOPATH = $(LINK_FSPOT_DEPS)
+REF_FSPOT_EXTENSION_DEVELOPINUFRAW = $(LINK_FSPOT_DEPS)
+REF_FSPOT_EXTENSION_HASHJOB = $(LINK_FSPOT_DEPS)
+REF_FSPOT_EXTENSION_LIVEWEBGALLERY = $(LINK_FSPOT_DEPS)
+REF_FSPOT_EXTENSION_MERGEDB = $(LINK_FSPOT_DEPS)
+REF_FSPOT_EXTENSION_RAWPLUSJPEG = $(LINK_FSPOT_DEPS)
+REF_FSPOT_EXTENSION_RETROACTIVEROLL = $(LINK_FSPOT_DEPS)
+REF_FSPOT_EXTENSION_SCREENSAVERCONFIG = $(LINK_FSPOT_DEPS)
+REF_FSPOT_EXTENSION_COVERTRANSITION = $(LINK_FSPOT_DEPS)
+
+# Cute hack to replace a space with something
+colon := :
+empty :=
+space := $(empty) $(empty)
+
+# Build path to allow running uninstalled
+RUN_PATH = $(subst $(space),$(colon), $(MONO_BASE_PATH))
+UNIQUE_FILTER_PIPE = tr [:space:] \\n | sort | uniq
+BUILD_DATA_DIR = $(top_builddir)/bin/share/$(PACKAGE)
+
+# Since all other attempts failed, we currently go this way:
+# This code adds the file specified in ASSEMBLY_INFO_SOURCE to SOURCES_BUILD.
+# If no such file is specified, the default AssemblyInfo.cs is used.
+ASSEMBLY_INFO_SOURCE_REAL = \
+ $(shell if [ "$(ASSEMBLY_INFO_SOURCE)" ]; \
+ then \
+ echo "$(addprefix $(srcdir)/, $(ASSEMBLY_INFO_SOURCE))"; \
+ else \
+ echo "$(top_srcdir)/src/AssemblyInfo.cs"; \
+ fi)
+
+SOURCES_BUILD = $(addprefix $(srcdir)/, $(SOURCES)) \
+ $(ASSEMBLY_INFO_SOURCE_REAL)
+RESOURCES_EXPANDED = $(addprefix $(srcdir)/, $(RESOURCES))
+RESOURCES_BUILD = $(foreach resource, $(RESOURCES_EXPANDED), \
+ -resource:$(resource),$(notdir $(resource)))
+
+INSTALL_ICONS = $(top_srcdir)/build/private-icon-theme-installer "$(mkinstalldirs)" "$(INSTALL_DATA)"
+THEME_ICONS_SOURCE = $(wildcard $(srcdir)/ThemeIcons/*/*/*.png) $(wildcard $(srcdir)/ThemeIcons/scalable/*/*.svg)
+THEME_ICONS_RELATIVE = $(subst $(srcdir)/ThemeIcons/, , $(THEME_ICONS_SOURCE))
+ASSEMBLY_EXTENSION = $(strip $(patsubst library, dll, $(TARGET)))
+ASSEMBLY_FILE = $(top_builddir)/bin/$(ASSEMBLY).$(ASSEMBLY_EXTENSION)
+INSTALL_DIR_RESOLVED = $(firstword $(subst , $(DEFAULT_INSTALL_DIR), $(INSTALL_DIR)))
+ at ENABLE_TESTS_TRUE@ENABLE_TESTS_FLAG = "-define:ENABLE_TESTS"
+ at ENABLE_ATK_TRUE@ENABLE_ATK_FLAG = "-define:ENABLE_ATK"
+FILTERED_LINK = $(shell echo "$(LINK)" | $(UNIQUE_FILTER_PIPE))
+DEP_LINK = $(shell echo "$(LINK)" | $(UNIQUE_FILTER_PIPE) | sed s,-r:,,g | grep '$(top_builddir)/bin/')
+OUTPUT_FILES = \
+ $(ASSEMBLY_FILE) \
+ $(ASSEMBLY_FILE).mdb
+
+moduledir = $(INSTALL_DIR_RESOLVED)
+module_SCRIPTS = $(OUTPUT_FILES)
+EXTRA_DIST = $(SOURCES_BUILD) $(RESOURCES_EXPANDED) \
+ $(THEME_ICONS_SOURCE) hyena.data.sqlite.pc.in
+CLEANFILES = $(OUTPUT_FILES) $(ASSEMBLY_FILE).config
+DISTCLEANFILES = *.pidb
+MAINTAINERCLEANFILES = Makefile.in
+all: all-am
+
+.SUFFIXES:
+$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(top_srcdir)/build/build.mk $(top_srcdir)/build/build.environment.mk $(top_srcdir)/build/build.rules.mk $(am__configure_deps)
+ @for dep in $?; do \
+ case '$(am__configure_deps)' in \
+ *$$dep*) \
+ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \
+ && { if test -f $@; then exit 0; else break; fi; }; \
+ exit 1;; \
+ esac; \
+ done; \
+ echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign lib/Hyena/src/Hyena.Data.Sqlite/Makefile'; \
+ $(am__cd) $(top_srcdir) && \
+ $(AUTOMAKE) --foreign lib/Hyena/src/Hyena.Data.Sqlite/Makefile
+.PRECIOUS: Makefile
+Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
+ @case '$?' in \
+ *config.status*) \
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \
+ *) \
+ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \
+ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \
+ esac;
+
+$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+
+$(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps)
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps)
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(am__aclocal_m4_deps):
+install-moduleSCRIPTS: $(module_SCRIPTS)
+ @$(NORMAL_INSTALL)
+ test -z "$(moduledir)" || $(MKDIR_P) "$(DESTDIR)$(moduledir)"
+ @list='$(module_SCRIPTS)'; test -n "$(moduledir)" || list=; \
+ for p in $$list; do \
+ if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \
+ if test -f "$$d$$p"; then echo "$$d$$p"; echo "$$p"; else :; fi; \
+ done | \
+ sed -e 'p;s,.*/,,;n' \
+ -e 'h;s|.*|.|' \
+ -e 'p;x;s,.*/,,;$(transform)' | sed 'N;N;N;s,\n, ,g' | \
+ $(AWK) 'BEGIN { files["."] = ""; dirs["."] = 1; } \
+ { d=$$3; if (dirs[d] != 1) { print "d", d; dirs[d] = 1 } \
+ if ($$2 == $$4) { files[d] = files[d] " " $$1; \
+ if (++n[d] == $(am__install_max)) { \
+ print "f", d, files[d]; n[d] = 0; files[d] = "" } } \
+ else { print "f", d "/" $$4, $$1 } } \
+ END { for (d in files) print "f", d, files[d] }' | \
+ while read type dir files; do \
+ if test "$$dir" = .; then dir=; else dir=/$$dir; fi; \
+ test -z "$$files" || { \
+ echo " $(INSTALL_SCRIPT) $$files '$(DESTDIR)$(moduledir)$$dir'"; \
+ $(INSTALL_SCRIPT) $$files "$(DESTDIR)$(moduledir)$$dir" || exit $$?; \
+ } \
+ ; done
+
+uninstall-moduleSCRIPTS:
+ @$(NORMAL_UNINSTALL)
+ @list='$(module_SCRIPTS)'; test -n "$(moduledir)" || exit 0; \
+ files=`for p in $$list; do echo "$$p"; done | \
+ sed -e 's,.*/,,;$(transform)'`; \
+ test -n "$$list" || exit 0; \
+ echo " ( cd '$(DESTDIR)$(moduledir)' && rm -f" $$files ")"; \
+ cd "$(DESTDIR)$(moduledir)" && rm -f $$files
+
+mostlyclean-libtool:
+ -rm -f *.lo
+
+clean-libtool:
+ -rm -rf .libs _libs
+tags: TAGS
+TAGS:
+
+ctags: CTAGS
+CTAGS:
+
+
+distdir: $(DISTFILES)
+ @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; \
+ if test -d $$d/$$file; then \
+ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \
+ if test -d "$(distdir)/$$file"; then \
+ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
+ fi; \
+ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
+ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \
+ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
+ fi; \
+ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \
+ else \
+ test -f "$(distdir)/$$file" \
+ || cp -p $$d/$$file "$(distdir)/$$file" \
+ || exit 1; \
+ fi; \
+ done
+check-am: all-am
+check: check-am
+all-am: Makefile $(SCRIPTS)
+installdirs:
+ for dir in "$(DESTDIR)$(moduledir)"; do \
+ test -z "$$dir" || $(MKDIR_P) "$$dir"; \
+ done
+install: install-am
+install-exec: install-exec-am
+install-data: install-data-am
+uninstall: uninstall-am
+
+install-am: all-am
+ @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
+
+installcheck: installcheck-am
+install-strip:
+ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+ `test -z '$(STRIP)' || \
+ echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install
+mostlyclean-generic:
+
+clean-generic:
+ -test -z "$(CLEANFILES)" || rm -f $(CLEANFILES)
+
+distclean-generic:
+ -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
+ -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES)
+ -test -z "$(DISTCLEANFILES)" || rm -f $(DISTCLEANFILES)
+
+maintainer-clean-generic:
+ @echo "This command is intended for maintainers to use"
+ @echo "it deletes files that may require special tools to rebuild."
+ -test -z "$(MAINTAINERCLEANFILES)" || rm -f $(MAINTAINERCLEANFILES)
+clean: clean-am
+
+clean-am: clean-generic clean-libtool mostlyclean-am
+
+distclean: distclean-am
+ -rm -f Makefile
+distclean-am: clean-am distclean-generic
+
+dvi: dvi-am
+
+dvi-am:
+
+html: html-am
+
+html-am:
+
+info: info-am
+
+info-am:
+
+install-data-am: install-data-local install-moduleSCRIPTS
+
+install-dvi: install-dvi-am
+
+install-dvi-am:
+
+install-exec-am:
+
+install-html: install-html-am
+
+install-html-am:
+
+install-info: install-info-am
+
+install-info-am:
+
+install-man:
+
+install-pdf: install-pdf-am
+
+install-pdf-am:
+
+install-ps: install-ps-am
+
+install-ps-am:
+
+installcheck-am:
+
+maintainer-clean: maintainer-clean-am
+ -rm -f Makefile
+maintainer-clean-am: distclean-am maintainer-clean-generic
+
+mostlyclean: mostlyclean-am
+
+mostlyclean-am: mostlyclean-generic mostlyclean-libtool
+
+pdf: pdf-am
+
+pdf-am:
+
+ps: ps-am
+
+ps-am:
+
+uninstall-am: uninstall-local uninstall-moduleSCRIPTS
+
+.MAKE: install-am install-strip
+
+.PHONY: all all-am check check-am clean clean-generic clean-libtool \
+ distclean distclean-generic distclean-libtool distdir dvi \
+ dvi-am html html-am info info-am install install-am \
+ install-data install-data-am install-data-local install-dvi \
+ install-dvi-am install-exec install-exec-am install-html \
+ install-html-am install-info install-info-am install-man \
+ install-moduleSCRIPTS install-pdf install-pdf-am install-ps \
+ install-ps-am install-strip installcheck installcheck-am \
+ installdirs maintainer-clean maintainer-clean-generic \
+ mostlyclean mostlyclean-generic mostlyclean-libtool pdf pdf-am \
+ ps ps-am uninstall uninstall-am uninstall-local \
+ uninstall-moduleSCRIPTS
+
+
+all: $(ASSEMBLY_FILE) theme-icons
+
+run:
+ @pushd $(top_builddir); \
+ make run; \
+ popd;
+
+# uncommented for now.
+# tests are currently excuted from Makefile in $(top_builddir)
+#test:
+# @pushd $(top_builddir)/tests; \
+# make $(ASSEMBLY); \
+# popd;
+
+build-debug:
+ @echo $(DEP_LINK)
+
+$(ASSEMBLY_FILE).mdb: $(ASSEMBLY_FILE)
+
+$(ASSEMBLY_FILE): $(SOURCES_BUILD) $(RESOURCES_EXPANDED) $(DEP_LINK)
+ @mkdir -p $(top_builddir)/bin
+ @if [ ! "x$(ENABLE_RELEASE)" = "xyes" ]; then \
+ $(top_srcdir)/build/dll-map-makefile-verifier $(srcdir)/Makefile.am $(srcdir)/$(notdir $@.config) && \
+ $(MONO) $(top_builddir)/build/dll-map-verifier.exe $(srcdir)/$(notdir $@.config) -iwinmm -ilibbanshee -ilibbnpx11 -ilibc -ilibc.so.6 -iintl -ilibmtp.dll -ilibigemacintegration.dylib -iCFRelease $(SOURCES_BUILD); \
+ fi;
+ $(MCS) \
+ $(GMCS_FLAGS) \
+ $(ASSEMBLY_BUILD_FLAGS) \
+ -nowarn:0278 -nowarn:0078 $$warn \
+ -define:HAVE_GTK_2_10 -define:NET_2_0 \
+ -debug -target:$(TARGET) -out:$@ \
+ $(BUILD_DEFINES) $(ENABLE_TESTS_FLAG) $(ENABLE_ATK_FLAG) \
+ $(FILTERED_LINK) $(RESOURCES_BUILD) $(SOURCES_BUILD)
+ @if [ -e $(srcdir)/$(notdir $@.config) ]; then \
+ cp $(srcdir)/$(notdir $@.config) $(top_builddir)/bin; \
+ fi;
+ @if [ ! -z "$(EXTRA_BUNDLE)" ]; then \
+ cp $(EXTRA_BUNDLE) $(top_builddir)/bin; \
+ fi;
+
+theme-icons: $(THEME_ICONS_SOURCE)
+ @$(INSTALL_ICONS) -il "$(BUILD_DATA_DIR)" "$(srcdir)" $(THEME_ICONS_RELATIVE)
+
+install-data-local: $(THEME_ICONS_SOURCE)
+ @$(INSTALL_ICONS) -i "$(DESTDIR)$(pkgdatadir)" "$(srcdir)" $(THEME_ICONS_RELATIVE)
+
+uninstall-local: $(THEME_ICONS_SOURCE)
+ @$(INSTALL_ICONS) -u "$(DESTDIR)$(pkgdatadir)" "$(srcdir)" $(THEME_ICONS_RELATIVE)
+
+# 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.
+.NOEXPORT:
diff --git a/lib/Hyena/src/Hyena.Data.Sqlite/hyena.data.sqlite.pc.in b/lib/Hyena/src/Hyena.Data.Sqlite/hyena.data.sqlite.pc.in
new file mode 100644
index 0000000..860a16d
--- /dev/null
+++ b/lib/Hyena/src/Hyena.Data.Sqlite/hyena.data.sqlite.pc.in
@@ -0,0 +1,9 @@
+Assemblies=@expanded_libdir@/@PACKAGE@/Hyena.Data.Sqlite.dll @expanded_libdir@/@PACKAGE@/Mono.Data.Sqlite.dll
+Files=@expanded_libdir@/@PACKAGE@/Hyena.Data.Sqlite.dll.mdb @expanded_libdir@/@PACKAGE@/Mono.Data.Sqlite.dll.mdb
+
+Name: Hyena.Data.Sqlite
+Description: Hyena.Data.Sqlite
+Version: @VERSION@
+
+Requires:
+Libs: -r:@expanded_libdir@/@PACKAGE@/Hyena.Data.Sqlite.dll -r:@expanded_libdir@/@PACKAGE@/Mono.Data.Sqlite.dll
diff --git a/lib/Hyena/src/Hyena.Gui/Hyena.Data.Gui/Accessibility/ColumnCellAccessible.cs b/lib/Hyena/src/Hyena.Gui/Hyena.Data.Gui/Accessibility/ColumnCellAccessible.cs
new file mode 100644
index 0000000..f0e797a
--- /dev/null
+++ b/lib/Hyena/src/Hyena.Gui/Hyena.Data.Gui/Accessibility/ColumnCellAccessible.cs
@@ -0,0 +1,151 @@
+//
+// ColumnCellAccessible.cs
+//
+// Author:
+// Eitan Isaacson <eitan at ascender.com>
+//
+// Copyright (C) 2009 Eitan Isaacson.
+//
+// Permission is hereby granted, free of charge, to any person obtaining
+// a copy of this software and associated documentation files (the
+// "Software"), to deal in the Software without restriction, including
+// without limitation the rights to use, copy, modify, merge, publish,
+// distribute, sublicense, and/or sell copies of the Software, and to
+// permit persons to whom the Software is furnished to do so, subject to
+// the following conditions:
+//
+// The above copyright notice and this permission notice shall be
+// included in all copies or substantial portions of the Software.
+//
+// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
+// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
+// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
+// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+//
+
+using System;
+
+namespace Hyena.Data.Gui.Accessibility
+{
+ public class ColumnCellAccessible: Atk.Object, Atk.ComponentImplementor
+ {
+ protected ColumnCell cell;
+ protected object bound_object;
+ private ICellAccessibleParent cell_parent;
+
+ public ColumnCellAccessible (object bound_object, ColumnCell cell, ICellAccessibleParent parent)
+ {
+ Role = Atk.Role.TableCell;
+ this.bound_object = bound_object;
+ this.cell = cell;
+ cell_parent = parent;
+ Parent = (Atk.Object) parent;
+ }
+
+#if ENABLE_ATK
+ protected override Atk.StateSet OnRefStateSet ()
+ {
+ Atk.StateSet states = base.OnRefStateSet ();
+ states.AddState (Atk.StateType.Transient);
+ states.AddState (Atk.StateType.Focusable);
+ states.AddState (Atk.StateType.Enabled);
+ states.AddState (Atk.StateType.Sensitive);
+ states.AddState (Atk.StateType.Visible);
+
+ if (cell_parent.IsCellShowing (this))
+ states.AddState (Atk.StateType.Showing);
+
+ if (cell_parent.IsCellFocused (this))
+ states.AddState (Atk.StateType.Focused);
+
+ if (cell_parent.IsCellSelected (this))
+ states.AddState (Atk.StateType.Selected);
+
+ if (cell_parent.IsCellActive (this))
+ states.AddState (Atk.StateType.Active);
+
+ return states;
+ }
+
+ protected override int OnGetIndexInParent ()
+ {
+ return cell_parent.GetCellIndex (this);
+ }
+#endif
+
+ public double Alpha {
+ get { return 1.0; }
+ }
+
+ public bool SetSize (int w, int h)
+ {
+ return false;
+ }
+
+ public bool SetPosition (int x, int y, Atk.CoordType coordType)
+ {
+ return false;
+ }
+
+ public bool SetExtents (int x, int y, int w, int h, Atk.CoordType coordType)
+ {
+ return false;
+ }
+
+ public void RemoveFocusHandler (uint handlerId)
+ {
+ }
+
+ public bool GrabFocus ()
+ {
+ return false;
+ }
+
+ public void GetSize (out int w, out int h)
+ {
+ Gdk.Rectangle rectangle = cell_parent.GetCellExtents(this, Atk.CoordType.Screen);
+ w = rectangle.Width;
+ h = rectangle.Height;
+ }
+
+ public void GetPosition (out int x, out int y, Atk.CoordType coordType)
+ {
+ Gdk.Rectangle rectangle = cell_parent.GetCellExtents(this, coordType);
+
+ x = rectangle.X;
+ y = rectangle.Y;
+ }
+
+ public void GetExtents (out int x, out int y, out int w, out int h, Atk.CoordType coordType)
+ {
+ Gdk.Rectangle rectangle = cell_parent.GetCellExtents(this, coordType);
+
+ x = rectangle.X;
+ y = rectangle.Y;
+ w = rectangle.Width;
+ h = rectangle.Height;
+ }
+
+ public virtual Atk.Object RefAccessibleAtPoint (int x, int y, Atk.CoordType coordType)
+ {
+ return null;
+ }
+
+ public bool Contains (int x, int y, Atk.CoordType coordType)
+ {
+ return false;
+ }
+
+ public uint AddFocusHandler (Atk.FocusHandler handler)
+ {
+ return 0;
+ }
+
+ public virtual void Redrawn ()
+ {
+ }
+ }
+}
diff --git a/lib/Hyena/src/Hyena.Gui/Hyena.Data.Gui/Accessibility/ColumnCellTextAccessible.cs b/lib/Hyena/src/Hyena.Gui/Hyena.Data.Gui/Accessibility/ColumnCellTextAccessible.cs
new file mode 100644
index 0000000..76eb0c3
--- /dev/null
+++ b/lib/Hyena/src/Hyena.Gui/Hyena.Data.Gui/Accessibility/ColumnCellTextAccessible.cs
@@ -0,0 +1,40 @@
+//
+// ColumnCellTextAccessible.cs
+//
+// Author:
+// Eitan Isaacson <eitan at ascender.com>
+//
+// Copyright (C) 2009 Eitan Isaacson.
+//
+// Permission is hereby granted, free of charge, to any person obtaining
+// a copy of this software and associated documentation files (the
+// "Software"), to deal in the Software without restriction, including
+// without limitation the rights to use, copy, modify, merge, publish,
+// distribute, sublicense, and/or sell copies of the Software, and to
+// permit persons to whom the Software is furnished to do so, subject to
+// the following conditions:
+//
+// The above copyright notice and this permission notice shall be
+// included in all copies or substantial portions of the Software.
+//
+// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
+// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
+// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
+// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+//
+
+using System;
+
+namespace Hyena.Data.Gui.Accessibility
+{
+ class ColumnCellTextAccessible : ColumnCellAccessible
+ {
+ public ColumnCellTextAccessible (object bound_object, ColumnCellText cell, ICellAccessibleParent parent): base (bound_object, cell as ColumnCell, parent)
+ {
+ Name = cell.GetTextAlternative (bound_object);
+ }
+ }
+}
diff --git a/lib/Hyena/src/Hyena.Gui/Hyena.Data.Gui/Accessibility/ColumnHeaderCellTextAccessible.cs b/lib/Hyena/src/Hyena.Gui/Hyena.Data.Gui/Accessibility/ColumnHeaderCellTextAccessible.cs
new file mode 100644
index 0000000..2b6704f
--- /dev/null
+++ b/lib/Hyena/src/Hyena.Gui/Hyena.Data.Gui/Accessibility/ColumnHeaderCellTextAccessible.cs
@@ -0,0 +1,114 @@
+//
+// ColumnHeaderCellTextAccessible.cs
+//
+// Author:
+// Eitan Isaacson <eitan at ascender.com>
+//
+// Copyright (C) 2009 Eitan Isaacson.
+//
+// Permission is hereby granted, free of charge, to any person obtaining
+// a copy of this software and associated documentation files (the
+// "Software"), to deal in the Software without restriction, including
+// without limitation the rights to use, copy, modify, merge, publish,
+// distribute, sublicense, and/or sell copies of the Software, and to
+// permit persons to whom the Software is furnished to do so, subject to
+// the following conditions:
+//
+// The above copyright notice and this permission notice shall be
+// included in all copies or substantial portions of the Software.
+//
+// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
+// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
+// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
+// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+//
+
+using System;
+using Mono.Unix;
+
+namespace Hyena.Data.Gui.Accessibility
+{
+ class ColumnHeaderCellTextAccessible: ColumnCellTextAccessible, Atk.ActionImplementor
+ {
+ private static string [] action_descriptions = new string[] {"", Catalog.GetString ("open context menu")};
+ private static string [] action_names_localized = new string[] {Catalog.GetString ("click"), Catalog.GetString ("menu")};
+
+ private enum Actions {
+ Click,
+ Menu,
+ Last
+ };
+
+ public ColumnHeaderCellTextAccessible (object bound_object, ColumnHeaderCellText cell, ICellAccessibleParent parent)
+ : base (bound_object, cell as ColumnCellText, parent)
+ {
+ Role = Atk.Role.TableColumnHeader;
+ }
+
+#if ENABLE_ATK
+ protected override Atk.StateSet OnRefStateSet ()
+ {
+ Atk.StateSet states = base.OnRefStateSet ();
+ states.RemoveState (Atk.StateType.Selectable);
+ states.RemoveState (Atk.StateType.Transient);
+ return states;
+ }
+#endif
+
+ public string GetLocalizedName (int action)
+ {
+ if (action >= action_names_localized.Length)
+ return "";
+
+ return action_names_localized[action];
+ }
+
+ public string GetName (int action)
+ {
+ if (action >= (int)Actions.Last)
+ return "";
+
+ return ((Actions)action).ToString ().ToLower ();
+ }
+
+ public string GetDescription (int action)
+ {
+ if (action >= action_descriptions.Length)
+ return "";
+
+ return action_descriptions[action];
+ }
+
+ public string GetKeybinding (int action)
+ {
+ return "";
+ }
+
+ public int NActions {
+ get { return (int)Actions.Last; }
+ }
+
+ public bool DoAction (int action)
+ {
+ ICellAccessibleParent parent = (ICellAccessibleParent)Parent;
+ switch ((Actions)action) {
+ case Actions.Menu: parent.InvokeColumnHeaderMenu (this); break;
+ case Actions.Click: parent.ClickColumnHeader (this); break;
+ }
+
+ if (action == (int)Actions.Menu) {
+ ((ICellAccessibleParent)Parent).InvokeColumnHeaderMenu (this);
+ }
+
+ return true;
+ }
+
+ public bool SetDescription (int action, string description)
+ {
+ return false;
+ }
+ }
+}
diff --git a/lib/Hyena/src/Hyena.Gui/Hyena.Data.Gui/Accessibility/ICellAccessibleParent.cs b/lib/Hyena/src/Hyena.Gui/Hyena.Data.Gui/Accessibility/ICellAccessibleParent.cs
new file mode 100644
index 0000000..499a2ab
--- /dev/null
+++ b/lib/Hyena/src/Hyena.Gui/Hyena.Data.Gui/Accessibility/ICellAccessibleParent.cs
@@ -0,0 +1,45 @@
+//
+// ICellAccessibleParent.cs
+//
+// Author:
+// Eitan Isaacson <eitan at ascender.com>
+//
+// Copyright (C) 2009 Eitan Isaacson.
+//
+// Permission is hereby granted, free of charge, to any person obtaining
+// a copy of this software and associated documentation files (the
+// "Software"), to deal in the Software without restriction, including
+// without limitation the rights to use, copy, modify, merge, publish,
+// distribute, sublicense, and/or sell copies of the Software, and to
+// permit persons to whom the Software is furnished to do so, subject to
+// the following conditions:
+//
+// The above copyright notice and this permission notice shall be
+// included in all copies or substantial portions of the Software.
+//
+// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
+// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
+// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
+// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+//
+
+using System;
+
+namespace Hyena.Data.Gui.Accessibility
+{
+ public interface ICellAccessibleParent
+ {
+ Gdk.Rectangle GetCellExtents (ColumnCellAccessible cell, Atk.CoordType coord_type);
+ int GetCellIndex (ColumnCellAccessible cell);
+ bool IsCellShowing (ColumnCellAccessible cell);
+ bool IsCellFocused (ColumnCellAccessible cell);
+ bool IsCellSelected (ColumnCellAccessible cell);
+ bool IsCellActive (ColumnCellAccessible cell);
+ void InvokeColumnHeaderMenu (ColumnCellAccessible column);
+ void ClickColumnHeader (ColumnCellAccessible column);
+ void CellRedrawn (int column, int row);
+ }
+}
diff --git a/lib/Hyena/src/Hyena.Gui/Hyena.Data.Gui/Accessibility/ListViewAccessible.cs b/lib/Hyena/src/Hyena.Gui/Hyena.Data.Gui/Accessibility/ListViewAccessible.cs
new file mode 100644
index 0000000..a9ba835
--- /dev/null
+++ b/lib/Hyena/src/Hyena.Gui/Hyena.Data.Gui/Accessibility/ListViewAccessible.cs
@@ -0,0 +1,256 @@
+//
+// ListViewAccessible.cs
+//
+// Authors:
+// Eitan Isaacson <eitan at ascender.com>
+// Gabriel Burt <gburt at novell.com>
+//
+// Copyright (C) 2009 Novell, Inc.
+// Copyright (C) 2009 Eitan Isaacson
+//
+// Permission is hereby granted, free of charge, to any person obtaining
+// a copy of this software and associated documentation files (the
+// "Software"), to deal in the Software without restriction, including
+// without limitation the rights to use, copy, modify, merge, publish,
+// distribute, sublicense, and/or sell copies of the Software, and to
+// permit persons to whom the Software is furnished to do so, subject to
+// the following conditions:
+//
+// The above copyright notice and this permission notice shall be
+// included in all copies or substantial portions of the Software.
+//
+// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
+// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
+// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
+// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+//
+
+using System;
+using System.Linq;
+using System.Collections.Generic;
+
+using Hyena.Data.Gui;
+
+namespace Hyena.Data.Gui.Accessibility
+{
+#if ENABLE_ATK
+ public partial class ListViewAccessible<T> : Hyena.Gui.BaseWidgetAccessible, ICellAccessibleParent
+ {
+ private ListView<T> list_view;
+ private Dictionary<int, ColumnCellAccessible> cell_cache;
+
+ public ListViewAccessible (GLib.Object widget) : base (widget as Gtk.Widget)
+ {
+ list_view = widget as ListView<T>;
+ // TODO replace with list_view.Name?
+ Name = "ListView";
+ Description = "ListView";
+ Role = Atk.Role.Table;
+ Parent = list_view.Parent.RefAccessible ();
+
+ cell_cache = new Dictionary<int, ColumnCellAccessible> ();
+
+ list_view.ModelChanged += (o, a) => OnModelChanged ();
+ list_view.ModelReloaded += (o, a) => OnModelChanged ();
+ OnModelChanged ();
+
+ list_view.SelectionProxy.FocusChanged += OnSelectionFocusChanged;
+ list_view.ActiveColumnChanged += OnSelectionFocusChanged;
+
+ ListViewAccessible_Selection ();
+ ListViewAccessible_Table ();
+ }
+
+ protected override Atk.StateSet OnRefStateSet ()
+ {
+ Atk.StateSet states = base.OnRefStateSet ();
+ states.AddState (Atk.StateType.ManagesDescendants);
+
+ return states;
+ }
+
+ protected override int OnGetIndexInParent ()
+ {
+ for (int i=0; i < Parent.NAccessibleChildren; i++) {
+ if (Parent.RefAccessibleChild (i) == this) {
+ return i;
+ }
+ }
+
+ return -1;
+ }
+
+ protected override int OnGetNChildren ()
+ {
+ return n_columns * n_rows + n_columns;
+ }
+
+ protected override Atk.Object OnRefChild (int index)
+ {
+ ColumnCellAccessible child;
+
+ if (cell_cache.ContainsKey (index)) {
+ return cell_cache[index];
+ }
+
+ // FIXME workaround to prevent crashing on Grid ListViews
+ if (list_view.ColumnController == null)
+ return null;
+
+ var columns = list_view.ColumnController.Where (c => c.Visible);
+
+ if (index - n_columns < 0) {
+ child = columns.ElementAtOrDefault (index)
+ .HeaderCell
+ .GetAccessible (this) as ColumnCellAccessible;
+ } else {
+ int column = (index - n_columns) % n_columns;
+ int row = (index - n_columns) / n_columns;
+ var cell = columns.ElementAtOrDefault (column).GetCell (0);
+ cell.BindListItem (list_view.Model[row]);
+ child = (ColumnCellAccessible) cell.GetAccessible (this);
+ }
+
+ cell_cache.Add (index, child);
+
+ return child;
+ }
+
+ public override Atk.Object RefAccessibleAtPoint (int x, int y, Atk.CoordType coordType)
+ {
+ int row, col;
+ list_view.GetCellAtPoint (x, y, coordType, out row, out col);
+ return RefAt (row, col);
+ }
+
+ private void OnModelChanged ()
+ {
+ GLib.Signal.Emit (this, "model_changed");
+ cell_cache.Clear ();
+ /*var handler = ModelChanged;
+ if (handler != null) {
+ handler (this, EventArgs.Empty);
+ }*/
+ }
+
+ private void OnSelectionFocusChanged (object o, EventArgs a)
+ {
+ var cell = ActiveCell;
+ if (cell != null) {
+ GLib.Signal.Emit (this, "active-descendant-changed", cell.Handle);
+ }
+ }
+
+ private Atk.Object ActiveCell {
+ get {
+ if (list_view.HeaderFocused)
+ return OnRefChild (list_view.ActiveColumn);
+ else
+ return RefAt (list_view.Selection.FocusedIndex, list_view.ActiveColumn);
+ }
+ }
+
+ private int n_columns {
+ get {
+ return list_view.ColumnController != null
+ ? list_view.ColumnController.Count (c => c.Visible)
+ : 1;
+ }
+ }
+
+ private int n_rows {
+ get { return list_view.Model.Count; }
+ }
+
+ #region ICellAccessibleParent
+
+ public int GetCellIndex (ColumnCellAccessible cell)
+ {
+ foreach (KeyValuePair<int, ColumnCellAccessible> kv in cell_cache)
+ {
+ if ((ColumnCellAccessible)kv.Value == cell)
+ return (int)kv.Key;
+ }
+
+ return -1;
+ }
+
+ public Gdk.Rectangle GetCellExtents (ColumnCellAccessible cell, Atk.CoordType coord_type)
+ {
+ int cache_index = GetCellIndex (cell);
+ int minval = Int32.MinValue;
+ if (cache_index == -1)
+ return new Gdk.Rectangle (minval, minval, minval, minval);
+
+ if (cache_index - n_columns >= 0)
+ {
+ int column = (cache_index - NColumns)%NColumns;
+ int row = (cache_index - NColumns)/NColumns;
+ return list_view.GetColumnCellExtents (row, column, true, coord_type);
+ } else
+ {
+ return list_view.GetColumnHeaderCellExtents (cache_index, true, coord_type);
+ }
+ }
+
+ public bool IsCellShowing (ColumnCellAccessible cell)
+ {
+ Gdk.Rectangle cell_extents = GetCellExtents (cell, Atk.CoordType.Window);
+
+ if (cell_extents.X == Int32.MinValue && cell_extents.Y == Int32.MinValue)
+ return false;
+
+ return true;
+ }
+
+ public bool IsCellFocused (ColumnCellAccessible cell)
+ {
+ int cell_index = GetCellIndex (cell);
+ if (cell_index % NColumns != 0)
+ return false; // Only 0 column cells get focus now.
+
+ int row = cell_index / NColumns;
+
+ return row == list_view.Selection.FocusedIndex;
+ }
+
+ public bool IsCellSelected (ColumnCellAccessible cell)
+ {
+ return IsChildSelected (GetCellIndex (cell));
+ }
+
+ public bool IsCellActive (ColumnCellAccessible cell)
+ {
+ return (ActiveCell == (Atk.Object)cell);
+ }
+
+ public void InvokeColumnHeaderMenu (ColumnCellAccessible cell)
+ {
+ list_view.InvokeColumnHeaderMenu (GetCellIndex (cell));
+ }
+
+ public void ClickColumnHeader (ColumnCellAccessible cell)
+ {
+ list_view.ClickColumnHeader (GetCellIndex (cell));
+ }
+
+ public void CellRedrawn (int column, int row)
+ {
+ int index;
+ if (row >= 0)
+ index = row * n_columns + column + n_columns;
+ else
+ index = column;
+
+ if (cell_cache.ContainsKey (index)) {
+ cell_cache[index].Redrawn ();
+ }
+ }
+
+ #endregion
+ }
+#endif
+}
diff --git a/lib/Hyena/src/Hyena.Gui/Hyena.Data.Gui/Accessibility/ListViewAccessible_Selection.cs b/lib/Hyena/src/Hyena.Gui/Hyena.Data.Gui/Accessibility/ListViewAccessible_Selection.cs
new file mode 100644
index 0000000..caa6728
--- /dev/null
+++ b/lib/Hyena/src/Hyena.Gui/Hyena.Data.Gui/Accessibility/ListViewAccessible_Selection.cs
@@ -0,0 +1,92 @@
+//
+// ListViewAccessible_Selection.cs
+//
+// Authors:
+// Eitan Isaacson <eitan at ascender.com>
+// Gabriel Burt <gburt at novell.com>
+//
+// Copyright (C) 2009 Novell, Inc.
+// Copyright (C) 2009 Eitan Isaacson
+//
+// Permission is hereby granted, free of charge, to any person obtaining
+// a copy of this software and associated documentation files (the
+// "Software"), to deal in the Software without restriction, including
+// without limitation the rights to use, copy, modify, merge, publish,
+// distribute, sublicense, and/or sell copies of the Software, and to
+// permit persons to whom the Software is furnished to do so, subject to
+// the following conditions:
+//
+// The above copyright notice and this permission notice shall be
+// included in all copies or substantial portions of the Software.
+//
+// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
+// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
+// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
+// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+//
+
+using System;
+using System.Linq;
+using System.Collections.Generic;
+
+using Hyena.Data.Gui;
+
+namespace Hyena.Data.Gui.Accessibility
+{
+#if ENABLE_ATK
+ public partial class ListViewAccessible<T> : Atk.SelectionImplementor
+ {
+ public void ListViewAccessible_Selection ()
+ {
+ list_view.SelectionProxy.Changed += OnSelectionChanged;
+ }
+
+ public bool AddSelection (int index)
+ {
+ return AddRowSelection (GetRowAtIndex (index));
+ }
+
+ public bool ClearSelection ()
+ {
+ list_view.Selection.Clear ();
+ return true;
+ }
+
+ public bool IsChildSelected (int index)
+ {
+ return IsRowSelected (GetRowAtIndex (index));
+ }
+
+ public bool RemoveSelection (int index)
+ {
+ int row = list_view.Selection.RangeCollection [index / n_columns];
+ return RemoveRowSelection (row);
+ }
+
+ public Atk.Object RefSelection (int index)
+ {
+ int row = list_view.Selection.RangeCollection [index / n_columns];
+ int column = index % n_columns;
+ return RefAt (row, column);
+ }
+
+ public int SelectionCount {
+ get { return list_view.Selection.Count * n_columns; }
+ }
+
+ public bool SelectAllSelection ()
+ {
+ list_view.Selection.SelectAll ();
+ return true;
+ }
+
+ private void OnSelectionChanged (object o, EventArgs a)
+ {
+ GLib.Signal.Emit (this, "selection_changed");
+ }
+ }
+#endif
+}
diff --git a/lib/Hyena/src/Hyena.Gui/Hyena.Data.Gui/Accessibility/ListViewAccessible_Table.cs b/lib/Hyena/src/Hyena.Gui/Hyena.Data.Gui/Accessibility/ListViewAccessible_Table.cs
new file mode 100644
index 0000000..ed43a8c
--- /dev/null
+++ b/lib/Hyena/src/Hyena.Gui/Hyena.Data.Gui/Accessibility/ListViewAccessible_Table.cs
@@ -0,0 +1,192 @@
+//
+// ListViewAccessible_Table.cs
+//
+// Authors:
+// Eitan Isaacson <eitan at ascender.com>
+// Gabriel Burt <gburt at novell.com>
+//
+// Copyright (C) 2009 Novell, Inc.
+// Copyright (C) 2009 Eitan Isaacson
+//
+// Permission is hereby granted, free of charge, to any person obtaining
+// a copy of this software and associated documentation files (the
+// "Software"), to deal in the Software without restriction, including
+// without limitation the rights to use, copy, modify, merge, publish,
+// distribute, sublicense, and/or sell copies of the Software, and to
+// permit persons to whom the Software is furnished to do so, subject to
+// the following conditions:
+//
+// The above copyright notice and this permission notice shall be
+// included in all copies or substantial portions of the Software.
+//
+// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
+// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
+// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
+// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+//
+
+using System;
+using System.Linq;
+using System.Collections.Generic;
+
+using Hyena.Data.Gui;
+
+namespace Hyena.Data.Gui.Accessibility
+{
+#if ENABLE_ATK
+ public partial class ListViewAccessible<T> : Atk.TableImplementor
+ {
+ public void ListViewAccessible_Table ()
+ {
+ }
+
+ public Atk.Object Caption {
+ get { return new Atk.NoOpObject (list_view); }
+ set {}
+ }
+
+ public int NColumns {
+ get { return n_columns; }
+ set {}
+ }
+
+ public int NRows {
+ get { return n_rows; }
+ set {}
+ }
+
+ public Atk.Object Summary {
+ get { return new Atk.NoOpObject (list_view); }
+ set {}
+ }
+
+ public bool AddColumnSelection (int column)
+ {
+ return false;
+ }
+
+ public bool AddRowSelection (int row)
+ {
+ list_view.Selection.Select (row);
+ return true;
+ }
+
+ public int GetColumnAtIndex (int index)
+ {
+ return NColumns == 0 ? -1 : (index - NColumns) % NColumns;
+ }
+
+ public string GetColumnDescription (int column)
+ {
+ var col = list_view.ColumnController.Where (c => c.Visible).ElementAtOrDefault (column);
+ return col == null ? null : col.LongTitle;
+ }
+
+ public int GetColumnExtentAt (int row, int column)
+ {
+ return 1;
+ }
+
+ public Atk.Object GetColumnHeader (int column)
+ {
+ if (column >= NColumns)
+ return new Atk.NoOpObject (list_view);
+ else
+ return OnRefChild (column);
+ }
+
+ public int GetIndexAt (int row, int column)
+ {
+ return row * NColumns + column + NColumns;
+ }
+
+ public int GetRowAtIndex (int index)
+ {
+ if (NColumns == 0)
+ return -1;
+ return (index - NColumns) / NColumns;
+ }
+
+ public string GetRowDescription (int row)
+ {
+ return "";
+ }
+
+ public int GetRowExtentAt (int row, int column)
+ {
+ return 1;
+ }
+
+ public Atk.Object GetRowHeader (int row)
+ {
+ return new Atk.NoOpObject (list_view);
+ }
+
+// Ensure https://bugzilla.novell.com/show_bug.cgi?id=512477 is fixed
+#if ENABLE_ATK
+ private static readonly int [] empty_int_array = new int[0];
+ public int [] SelectedColumns {
+ get { return empty_int_array; }
+ }
+
+ public int [] SelectedRows {
+ get { return list_view.Selection.ToArray (); }
+ }
+#else
+ public int GetSelectedRows (out int row) { row = 0; return 0; }
+ public int GetSelectedColumns (out int cols) { cols = 0; return 0; }
+#endif
+
+ public bool IsColumnSelected (int column)
+ {
+ return false;
+ }
+
+ public bool IsRowSelected (int row)
+ {
+ return list_view.Selection.Contains (row);
+ }
+
+ public bool IsSelected (int row, int column)
+ {
+ return list_view.Selection.Contains (row);
+ }
+
+ public Atk.Object RefAt (int row, int column)
+ {
+ int index = NColumns * row + column + NColumns;
+ return OnRefChild (index);
+ }
+
+ public bool RemoveColumnSelection (int column)
+ {
+ return false;
+ }
+
+ public bool RemoveRowSelection (int row)
+ {
+ list_view.Selection.Unselect (row);
+ return true;
+ }
+
+ public void SetColumnDescription (int column, string description)
+ {
+ }
+
+ public void SetColumnHeader (int column, Atk.Object header)
+ {
+ }
+
+ public void SetRowDescription (int row, string description)
+ {
+ }
+
+ public void SetRowHeader (int row, Atk.Object header)
+ {
+ }
+ }
+#endif
+}
diff --git a/lib/Hyena/src/Hyena.Gui/Hyena.Data.Gui/CellContext.cs b/lib/Hyena/src/Hyena.Gui/Hyena.Data.Gui/CellContext.cs
new file mode 100644
index 0000000..8927060
--- /dev/null
+++ b/lib/Hyena/src/Hyena.Gui/Hyena.Data.Gui/CellContext.cs
@@ -0,0 +1,56 @@
+//
+// CellContext.cs
+//
+// Author:
+// Aaron Bockover <abockover at novell.com>
+//
+// Copyright (C) 2007 Novell, Inc.
+//
+// Permission is hereby granted, free of charge, to any person obtaining
+// a copy of this software and associated documentation files (the
+// "Software"), to deal in the Software without restriction, including
+// without limitation the rights to use, copy, modify, merge, publish,
+// distribute, sublicense, and/or sell copies of the Software, and to
+// permit persons to whom the Software is furnished to do so, subject to
+// the following conditions:
+//
+// The above copyright notice and this permission notice shall be
+// included in all copies or substantial portions of the Software.
+//
+// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
+// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
+// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
+// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+//
+
+using System;
+
+using Hyena.Gui.Theming;
+
+namespace Hyena.Data.Gui
+{
+ public class CellContext
+ {
+ public CellContext ()
+ {
+ Opaque = true;
+ }
+
+ public Cairo.Context Context { get; set; }
+ public Pango.Layout Layout { get; set; }
+ public Gtk.Widget Widget { get; set; }
+ public Gtk.StateType State { get; set; }
+ public Gdk.Drawable Drawable { get; set; }
+ public Theme Theme { get; set; }
+ public Gdk.Rectangle Area { get; set; }
+ public Gdk.Rectangle Clip { get; set; }
+ public bool TextAsForeground { get; set; }
+ public bool Opaque { get; set; }
+ public int ViewRowIndex { get; set; }
+ public int ViewColumnIndex { get; set; }
+ public int ModelRowIndex { get; set; }
+ }
+}
diff --git a/lib/Hyena/src/Hyena.Gui/Hyena.Data.Gui/Column.cs b/lib/Hyena/src/Hyena.Gui/Hyena.Data.Gui/Column.cs
new file mode 100644
index 0000000..5840764
--- /dev/null
+++ b/lib/Hyena/src/Hyena.Gui/Hyena.Data.Gui/Column.cs
@@ -0,0 +1,206 @@
+//
+// Column.cs
+//
+// Author:
+// Aaron Bockover <abockover at novell.com>
+//
+// Copyright (C) 2007 Novell, Inc.
+//
+// Permission is hereby granted, free of charge, to any person obtaining
+// a copy of this software and associated documentation files (the
+// "Software"), to deal in the Software without restriction, including
+// without limitation the rights to use, copy, modify, merge, publish,
+// distribute, sublicense, and/or sell copies of the Software, and to
+// permit persons to whom the Software is furnished to do so, subject to
+// the following conditions:
+//
+// The above copyright notice and this permission notice shall be
+// included in all copies or substantial portions of the Software.
+//
+// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
+// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
+// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
+// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+//
+
+using System;
+using System.Collections;
+using System.Collections.Generic;
+using Gtk;
+
+using Hyena;
+using Hyena.Data;
+
+namespace Hyena.Data.Gui
+{
+ public class Column : ColumnDescription, IEnumerable<ColumnCell>
+ {
+ private ColumnCell header_cell;
+ private List<ColumnCell> cells = new List<ColumnCell> ();
+
+ private int min_width = 0;
+ private int max_width = Int32.MaxValue;
+
+ public Column (ColumnDescription description) :
+ this (description, new ColumnCellText (description.Property, true))
+ {
+ }
+
+ public Column (ColumnDescription description, ColumnCell cell) :
+ this (description.Title, cell, description.Width, description.Visible)
+ {
+ }
+
+ public Column (string title, ColumnCell cell, double width)
+ : this (title, cell, width, true)
+ {
+ }
+
+ public Column (string title, ColumnCell cell, double width, bool visible)
+ : this (null, title, cell, width, visible)
+ {
+ }
+
+ public Column (ColumnCell headerCell, string title, ColumnCell cell, double width)
+ : this (headerCell, title, cell, width, true)
+ {
+ }
+
+ public Column (ColumnCell headerCell, string title, ColumnCell cell, double width, bool visible)
+ : this (headerCell, title, cell, width, visible, 0, Int32.MaxValue)
+ {
+ }
+
+ public Column (ColumnCell headerCell, string title, ColumnCell cell, double width, bool visible, int minWidth, int maxWidth)
+ : base (cell.Property, title, width, visible)
+ {
+ min_width = minWidth;
+ max_width = maxWidth;
+ header_cell = headerCell ?? new ColumnHeaderCellText (HeaderCellDataHandler);
+
+ ColumnCellText header_text = header_cell as ColumnCellText;
+ ColumnCellText cell_text = cell as ColumnCellText;
+ if (header_text != null && cell_text != null) {
+ header_text.Alignment = cell_text.Alignment;
+ }
+
+ PackStart (cell);
+ }
+
+ private Column HeaderCellDataHandler ()
+ {
+ return this;
+ }
+
+ public void PackStart (ColumnCell cell)
+ {
+ cells.Insert (0, cell);
+ }
+
+ public void PackEnd (ColumnCell cell)
+ {
+ cells.Add (cell);
+ }
+
+ public ColumnCell GetCell (int index)
+ {
+ return cells[index];
+ }
+
+ public void RemoveCell (int index)
+ {
+ cells.RemoveAt (index);
+ }
+
+ public void ClearCells ()
+ {
+ cells.Clear ();
+ }
+
+ IEnumerator IEnumerable.GetEnumerator ()
+ {
+ return cells.GetEnumerator ();
+ }
+
+ IEnumerator<ColumnCell> IEnumerable<ColumnCell>.GetEnumerator ()
+ {
+ return cells.GetEnumerator ();
+ }
+
+ public ColumnCell HeaderCell {
+ get { return header_cell; }
+ set { header_cell = value; }
+ }
+
+ public void CalculateWidths (Pango.Layout layout, bool headerVisible, int headerHeight)
+ {
+ bool min_was_zero = MinWidth == 0;
+ bool was_size_req = false;
+ ISizeRequestCell sr_cell = cells[0] as ISizeRequestCell;
+ if (sr_cell != null && sr_cell.RestrictSize) {
+ int min_w, max_w;
+ sr_cell.GetWidthRange (layout, out min_w, out max_w);
+ MinWidth = min_w == -1 ? MinWidth : min_w;
+ MaxWidth = max_w == -1 ? MaxWidth : max_w;
+ was_size_req = true;
+ }
+
+ if (headerVisible && (min_was_zero || was_size_req) && !String.IsNullOrEmpty (Title)) {
+ int w, h;
+ layout.SetText (Title);
+ //column_layout.SetText ("\u2026"); // ellipsis char
+ layout.GetPixelSize (out w, out h);
+
+ // Pretty sure the 3* is needed here only b/c of the " - 8" in ColumnCellText;
+ // See TODO there
+ w += 3 * ColumnHeaderCellText.Spacing;
+ if (this is ISortableColumn) {
+ w += ColumnHeaderCellText.GetArrowWidth (headerHeight);
+ }
+
+ MinWidth = Math.Max (MinWidth, w);
+
+ // If the min/max are sufficiently close (arbitrarily choosen as < 8px) then
+ // make them equal, so that the column doesn't appear resizable but in reality is on barely.
+ if (MaxWidth - MinWidth < 8) {
+ MinWidth = MaxWidth;
+ }
+ }
+ }
+
+ public int MinWidth {
+ get { return min_width; }
+ set {
+ min_width = value;
+ if (value > max_width) {
+ max_width = value;
+ }
+ }
+ }
+
+ public int MaxWidth {
+ get { return max_width; }
+ set {
+ max_width = value;
+ if (value < min_width) {
+ min_width = value;
+ }
+ }
+ }
+
+ private string id;
+ public string Id {
+ get {
+ if (id == null) {
+ id = GetCell (0).SubProperty ?? GetCell (0).Property;
+ id = StringUtil.CamelCaseToUnderCase (id);
+ }
+ return id;
+ }
+ set { id = value; }
+ }
+ }
+}
diff --git a/lib/Hyena/src/Hyena.Gui/Hyena.Data.Gui/ColumnCell.cs b/lib/Hyena/src/Hyena.Gui/Hyena.Data.Gui/ColumnCell.cs
new file mode 100644
index 0000000..20e8c57
--- /dev/null
+++ b/lib/Hyena/src/Hyena.Gui/Hyena.Data.Gui/ColumnCell.cs
@@ -0,0 +1,158 @@
+//
+// ColumnCell.cs
+//
+// Author:
+// Aaron Bockover <abockover at novell.com>
+//
+// Copyright (C) 2007 Novell, Inc.
+//
+// Permission is hereby granted, free of charge, to any person obtaining
+// a copy of this software and associated documentation files (the
+// "Software"), to deal in the Software without restriction, including
+// without limitation the rights to use, copy, modify, merge, publish,
+// distribute, sublicense, and/or sell copies of the Software, and to
+// permit persons to whom the Software is furnished to do so, subject to
+// the following conditions:
+//
+// The above copyright notice and this permission notice shall be
+// included in all copies or substantial portions of the Software.
+//
+// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
+// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
+// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
+// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+//
+
+using System;
+using System.Reflection;
+using Gtk;
+using Cairo;
+
+using Hyena.Data.Gui.Accessibility;
+
+namespace Hyena.Data.Gui
+{
+ public abstract class ColumnCell
+ {
+ private bool expand;
+ private string property, sub_property;
+ private PropertyInfo property_info, sub_property_info;
+ private object bound_object;
+ private object bound_object_parent;
+
+ public virtual Atk.Object GetAccessible (ICellAccessibleParent parent)
+ {
+ return new ColumnCellAccessible (BoundObject, this, parent);
+ }
+
+ public virtual string GetTextAlternative (object obj)
+ {
+ return "";
+ }
+
+ public ColumnCell (string property, bool expand)
+ {
+ Property = property;
+ Expand = expand;
+ }
+
+ public void BindListItem (object item)
+ {
+ if (item == null) {
+ bound_object_parent = null;
+ bound_object = null;
+ return;
+ }
+
+ bound_object_parent = item;
+
+ if (property != null) {
+ EnsurePropertyInfo ();
+ bound_object = property_info.GetValue (bound_object_parent, null);
+
+ if (sub_property != null) {
+ EnsurePropertyInfo (sub_property, ref sub_property_info, bound_object);
+ bound_object = sub_property_info.GetValue (bound_object, null);
+ }
+ } else {
+ bound_object = bound_object_parent;
+ }
+ }
+
+ private void EnsurePropertyInfo ()
+ {
+ EnsurePropertyInfo (property, ref property_info, bound_object_parent);
+ }
+
+ private void EnsurePropertyInfo (string name, ref PropertyInfo prop, object obj)
+ {
+ if (prop == null || prop.ReflectedType != obj.GetType ()) {
+ prop = obj.GetType ().GetProperty (name);
+ if (prop == null) {
+ throw new Exception (String.Format (
+ "In {0}, type {1} does not have property {2}",
+ this, obj.GetType (), name
+ ));
+ }
+ }
+ }
+
+ public virtual void NotifyThemeChange ()
+ {
+ }
+
+ protected Type BoundType {
+ get { return bound_object.GetType (); }
+ }
+
+ protected object BoundObject {
+ get { return bound_object; }
+ set {
+ if (property != null) {
+ EnsurePropertyInfo ();
+ property_info.SetValue (bound_object_parent, value, null);
+ }
+ }
+ }
+
+ protected object BoundObjectParent {
+ get { return bound_object_parent; }
+ }
+
+ public abstract void Render (CellContext context, StateType state, double cellWidth, double cellHeight);
+
+ public virtual Gdk.Size Measure (Gtk.Widget widget)
+ {
+ return Gdk.Size.Empty;
+ }
+
+ public bool Expand {
+ get { return expand; }
+ set { expand = value; }
+ }
+
+ public DataViewLayout ViewLayout { get; set; }
+
+ public string Property {
+ get { return property; }
+ set {
+ property = value;
+ if (value != null) {
+ int i = value.IndexOf (".");
+ if (i != -1) {
+ property = value.Substring (0, i);
+ SubProperty = value.Substring (i + 1, value.Length - i - 1);
+ }
+ }
+ }
+ }
+
+ public string SubProperty {
+ get { return sub_property; }
+ set { sub_property = value; }
+ }
+ }
+}
diff --git a/lib/Hyena/src/Hyena.Gui/Hyena.Data.Gui/ColumnCellCheckBox.cs b/lib/Hyena/src/Hyena.Gui/Hyena.Data.Gui/ColumnCellCheckBox.cs
new file mode 100644
index 0000000..bfed4bd
--- /dev/null
+++ b/lib/Hyena/src/Hyena.Gui/Hyena.Data.Gui/ColumnCellCheckBox.cs
@@ -0,0 +1,124 @@
+//
+// ColumnCellCheckBox.cs
+//
+// Author:
+// Aaron Bockover <abockover at novell.com>
+//
+// Copyright (C) 2008 Novell, Inc.
+//
+// Permission is hereby granted, free of charge, to any person obtaining
+// a copy of this software and associated documentation files (the
+// "Software"), to deal in the Software without restriction, including
+// without limitation the rights to use, copy, modify, merge, publish,
+// distribute, sublicense, and/or sell copies of the Software, and to
+// permit persons to whom the Software is furnished to do so, subject to
+// the following conditions:
+//
+// The above copyright notice and this permission notice shall be
+// included in all copies or substantial portions of the Software.
+//
+// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
+// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
+// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
+// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+//
+
+using System;
+using Gtk;
+
+namespace Hyena.Data.Gui
+{
+ public class ColumnCellCheckBox : ColumnCell, IInteractiveCell, ISizeRequestCell
+ {
+ public ColumnCellCheckBox (string property, bool expand) : base (property, expand)
+ {
+ }
+
+ public override void Render (CellContext context, StateType state, double cellWidth, double cellHeight)
+ {
+ int cell_width = context.Area.Width - 2 * Xpad;
+ int cell_height = context.Area.Height - 2 * Ypad;
+ int x = context.Area.X + xpad + ((cell_width - Size) / 2);
+ int y = context.Area.Y + ypad + ((cell_height - Size) / 2);
+
+ if (state == StateType.Normal && last_hover_bound == BoundObjectParent) {
+ state = StateType.Prelight;
+ }
+
+ Style.PaintCheck (context.Widget.Style, context.Drawable, state,
+ Value ? ShadowType.In : ShadowType.Out,
+ context.Clip, context.Widget, "cellcheck", x, y, Size, Size);
+ }
+
+ private object last_pressed_bound;
+ private object last_hover_bound;
+
+ public bool ButtonEvent (int x, int y, bool pressed, Gdk.EventButton evnt)
+ {
+ if (pressed) {
+ last_pressed_bound = BoundObjectParent;
+ return false;
+ }
+
+ if (last_pressed_bound != null && last_pressed_bound.Equals (BoundObjectParent)) {
+ Value = !Value;
+ last_pressed_bound = null;
+ }
+
+ return true;
+ }
+
+ public bool MotionEvent (int x, int y, Gdk.EventMotion evnt)
+ {
+ if (last_hover_bound == BoundObjectParent) {
+ return false;
+ }
+
+ last_hover_bound = BoundObjectParent;
+ return true;
+ }
+
+ public bool PointerLeaveEvent ()
+ {
+ last_hover_bound = null;
+ return true;
+ }
+
+ public void GetWidthRange (Pango.Layout layout, out int min, out int max)
+ {
+ min = max = 2 * Xpad + Size;
+ }
+
+ private bool restrict_size = true;
+ public bool RestrictSize {
+ get { return restrict_size; }
+ set { restrict_size = value; }
+ }
+
+ private bool Value {
+ get { return (bool)BoundObject; }
+ set { BoundObject = value; }
+ }
+
+ private int size = 13;
+ public int Size {
+ get { return size; }
+ set { size = value; }
+ }
+
+ private int xpad = 2;
+ public int Xpad {
+ get { return xpad; }
+ set { xpad = value; }
+ }
+
+ public int ypad = 2;
+ public int Ypad {
+ get { return ypad; }
+ set { ypad = value; }
+ }
+ }
+}
diff --git a/lib/Hyena/src/Hyena.Gui/Hyena.Data.Gui/ColumnCellRating.cs b/lib/Hyena/src/Hyena.Gui/Hyena.Data.Gui/ColumnCellRating.cs
new file mode 100644
index 0000000..e1efeb2
--- /dev/null
+++ b/lib/Hyena/src/Hyena.Gui/Hyena.Data.Gui/ColumnCellRating.cs
@@ -0,0 +1,158 @@
+//
+// ColumnCellRating.cs
+//
+// Author:
+// Aaron Bockover <abockover at novell.com>
+//
+// Copyright (C) 2008 Novell, Inc.
+//
+// Permission is hereby granted, free of charge, to any person obtaining
+// a copy of this software and associated documentation files (the
+// "Software"), to deal in the Software without restriction, including
+// without limitation the rights to use, copy, modify, merge, publish,
+// distribute, sublicense, and/or sell copies of the Software, and to
+// permit persons to whom the Software is furnished to do so, subject to
+// the following conditions:
+//
+// The above copyright notice and this permission notice shall be
+// included in all copies or substantial portions of the Software.
+//
+// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
+// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
+// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
+// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+//
+
+using System;
+using Gtk;
+
+using Hyena.Gui;
+using Hyena.Gui.Theming;
+
+namespace Hyena.Data.Gui
+{
+ public class ColumnCellRating : ColumnCell, IInteractiveCell, ISizeRequestCell
+ {
+ private object last_pressed_bound;
+ private object hover_bound;
+ private int hover_value;
+ private Gdk.Rectangle actual_area_hack;
+ private RatingRenderer renderer = new RatingRenderer ();
+
+ public ColumnCellRating (string property, bool expand) : base (property, expand)
+ {
+ Xpad = 0;
+ }
+
+ public override void Render (CellContext context, StateType state, double cellWidth, double cellHeight)
+ {
+ Gdk.Rectangle area = new Gdk.Rectangle (0, 0, context.Area.Width, context.Area.Height);
+
+ // FIXME: Compute font height and set to renderer.Size
+
+ renderer.Value = Value;
+ bool is_hovering = hover_bound == BoundObjectParent && hover_bound != null;
+ renderer.Render (context.Context, area, context.Theme.Colors.GetWidgetColor (GtkColorClass.Text, state),
+ is_hovering, is_hovering, hover_value, 0.8, 0.45, 0.35);
+
+ // FIXME: Something is hosed in the view when computing cell dimensions
+ // The cell width request is always smaller than the actual cell, so
+ // this value is preserved once we compute it from rendering so the
+ // input stuff can do its necessary calculations
+ actual_area_hack = area;
+ }
+
+ public bool ButtonEvent (int x, int y, bool pressed, Gdk.EventButton evnt)
+ {
+ if (ReadOnly) {
+ return false;
+ }
+
+ if (pressed) {
+ last_pressed_bound = BoundObjectParent;
+ return false;
+ }
+
+ if (last_pressed_bound == BoundObjectParent) {
+ Value = RatingFromPosition (x);
+ last_pressed_bound = null;
+ }
+
+ return true;
+ }
+
+ public bool MotionEvent (int x, int y, Gdk.EventMotion evnt)
+ {
+ if (ReadOnly) {
+ return false;
+ }
+
+ int value = RatingFromPosition (x);
+
+ if (hover_bound == BoundObjectParent && value == hover_value) {
+ return false;
+ }
+
+ hover_bound = BoundObjectParent;
+ hover_value = value;
+ return true;
+ }
+
+ public bool PointerLeaveEvent ()
+ {
+ hover_bound = null;
+ hover_value = MinRating - 1;
+ return true;
+ }
+
+ public void GetWidthRange (Pango.Layout layout, out int min, out int max)
+ {
+ min = max = renderer.Width;
+ }
+
+ private int RatingFromPosition (double x)
+ {
+ return renderer.RatingFromPosition (actual_area_hack, x);
+ }
+
+ private bool restrict_size = true;
+ public bool RestrictSize {
+ get { return restrict_size; }
+ set { restrict_size = value; }
+ }
+
+ private int Value {
+ get { return BoundObject == null ? MinRating : renderer.ClampValue ((int)BoundObject); }
+ set { BoundObject = renderer.ClampValue (value); }
+ }
+
+ public int MaxRating {
+ get { return renderer.MaxRating; }
+ set { renderer.MaxRating = value; }
+ }
+
+ public int MinRating {
+ get { return renderer.MinRating; }
+ set { renderer.MinRating = value; }
+ }
+
+ public int RatingLevels {
+ get { return renderer.RatingLevels; }
+ }
+
+ public int Xpad {
+ get { return renderer.Xpad; }
+ set { renderer.Xpad = value; }
+ }
+
+ public int Ypad {
+ get { return renderer.Ypad; }
+ set { renderer.Ypad = value; }
+ }
+
+ public bool ReadOnly { get; set; }
+ }
+}
diff --git a/lib/Hyena/src/Hyena.Gui/Hyena.Data.Gui/ColumnCellText.cs b/lib/Hyena/src/Hyena.Gui/Hyena.Data.Gui/ColumnCellText.cs
new file mode 100644
index 0000000..0a2c126
--- /dev/null
+++ b/lib/Hyena/src/Hyena.Gui/Hyena.Data.Gui/ColumnCellText.cs
@@ -0,0 +1,234 @@
+//
+// ColumnCellText.cs
+//
+// Author:
+// Aaron Bockover <abockover at novell.com>
+//
+// Copyright (C) 2007 Novell, Inc.
+//
+// Permission is hereby granted, free of charge, to any person obtaining
+// a copy of this software and associated documentation files (the
+// "Software"), to deal in the Software without restriction, including
+// without limitation the rights to use, copy, modify, merge, publish,
+// distribute, sublicense, and/or sell copies of the Software, and to
+// permit persons to whom the Software is furnished to do so, subject to
+// the following conditions:
+//
+// The above copyright notice and this permission notice shall be
+// included in all copies or substantial portions of the Software.
+//
+// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
+// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
+// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
+// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+//
+
+using System;
+using Gtk;
+using Cairo;
+
+using Hyena.Gui;
+using Hyena.Gui.Theming;
+using Hyena.Data.Gui.Accessibility;
+
+namespace Hyena.Data.Gui
+{
+ public class ColumnCellText : ColumnCell, ISizeRequestCell, ITextCell, ITooltipCell
+ {
+ internal const int Spacing = 4;
+
+ public delegate string DataHandler ();
+
+ private Pango.Weight font_weight = Pango.Weight.Normal;
+ private Pango.EllipsizeMode ellipsize_mode = Pango.EllipsizeMode.End;
+ private Pango.Alignment alignment = Pango.Alignment.Left;
+ private int text_width;
+ private int text_height;
+ private string text_format = null;
+ protected string MinString, MaxString;
+ private string last_text = null;
+ private bool use_markup;
+
+ public ColumnCellText (string property, bool expand) : base (property, expand)
+ {
+ }
+
+ public override Atk.Object GetAccessible (ICellAccessibleParent parent)
+ {
+ return new ColumnCellTextAccessible (BoundObject, this, parent);
+ }
+
+ public override string GetTextAlternative (object obj)
+ {
+ return GetText (obj);
+ }
+
+ public void SetMinMaxStrings (object min_max)
+ {
+ SetMinMaxStrings (min_max, min_max);
+ }
+
+ public void SetMinMaxStrings (object min, object max)
+ {
+ // Set the min/max strings from the min/max objects
+ MinString = GetText (min);
+ MaxString = GetText (max);
+ RestrictSize = true;
+ }
+
+ public override void Render (CellContext context, StateType state, double cellWidth, double cellHeight)
+ {
+ UpdateText (context, cellWidth);
+ if (String.IsNullOrEmpty (last_text)) {
+ return;
+ }
+
+ context.Context.Rectangle (0, 0, cellWidth, cellHeight);
+ context.Context.Clip ();
+ context.Context.MoveTo (Spacing, ((int)cellHeight - text_height) / 2);
+ Cairo.Color color = context.Theme.Colors.GetWidgetColor (
+ context.TextAsForeground ? GtkColorClass.Foreground : GtkColorClass.Text, state);
+ color.A = context.Opaque ? 1.0 : 0.5;
+ context.Context.Color = color;
+
+ PangoCairoHelper.ShowLayout (context.Context, context.Layout);
+ context.Context.ResetClip ();
+ }
+
+ public void UpdateText (CellContext context, double cellWidth)
+ {
+ string text = last_text = GetText (BoundObject);
+ if (String.IsNullOrEmpty (text)) {
+ return;
+ }
+
+ // TODO why doesn't Spacing (eg 4 atm) work here instead of 8? Rendering
+ // seems to be off when changed to Spacing/4
+ context.Layout.Width = (int)((cellWidth - 8) * Pango.Scale.PangoScale);
+ context.Layout.FontDescription.Weight = font_weight;
+ context.Layout.Ellipsize = EllipsizeMode;
+ context.Layout.Alignment = alignment;
+ UpdateLayout (context.Layout, text);
+ context.Layout.GetPixelSize (out text_width, out text_height);
+ is_ellipsized = context.Layout.IsEllipsized;
+ }
+
+ private static char[] lfcr = new char[] {'\n', '\r'};
+ private void UpdateLayout (Pango.Layout layout, string text)
+ {
+ string final_text = GetFormattedText (text);
+ if (final_text.IndexOfAny (lfcr) >= 0) {
+ final_text = final_text.Replace ("\r\n", "\x20").Replace ('\n', '\x20').Replace ('\r', '\x20');
+ }
+ if (use_markup) {
+ layout.SetMarkup (final_text);
+ } else {
+ layout.SetText (final_text);
+ }
+ }
+
+ public string GetTooltipMarkup (CellContext cellContext, double columnWidth)
+ {
+ UpdateText (cellContext, columnWidth);
+ return IsEllipsized ? GLib.Markup.EscapeText (Text) : null;
+ }
+
+ protected virtual string GetText (object obj)
+ {
+ return obj == null ? String.Empty : obj.ToString ();
+ }
+
+ private string GetFormattedText (string text)
+ {
+ if (text_format == null) {
+ return text;
+ }
+ return String.Format (text_format, text);
+ }
+
+ private bool is_ellipsized = false;
+ public bool IsEllipsized {
+ get { return is_ellipsized; }
+ }
+
+ public string Text {
+ get { return last_text; }
+ }
+
+ protected int TextWidth {
+ get { return text_width; }
+ }
+
+ protected int TextHeight {
+ get { return text_height; }
+ }
+
+ public string TextFormat {
+ get { return text_format; }
+ set { text_format = value; }
+ }
+
+ public Pango.Alignment Alignment {
+ get { return alignment; }
+ set { alignment = value; }
+ }
+
+ public virtual Pango.Weight FontWeight {
+ get { return font_weight; }
+ set { font_weight = value; }
+ }
+
+ public virtual Pango.EllipsizeMode EllipsizeMode {
+ get { return ellipsize_mode; }
+ set { ellipsize_mode = value; }
+ }
+
+ internal static int ComputeRowHeight (Widget widget)
+ {
+ int w_width, row_height;
+ Pango.Layout layout = new Pango.Layout (widget.PangoContext);
+ layout.SetText ("W");
+ layout.GetPixelSize (out w_width, out row_height);
+ layout.Dispose ();
+ return row_height + 8;
+ }
+
+ #region ISizeRequestCell implementation
+
+ public void GetWidthRange (Pango.Layout layout, out int min, out int max)
+ {
+ int height;
+ min = max = -1;
+
+ if (!String.IsNullOrEmpty (MinString)) {
+ UpdateLayout (layout, MinString);
+ layout.GetPixelSize (out min, out height);
+ min += 2*Spacing;
+ //Console.WriteLine ("for {0} got min {1} for {2}", this, min, MinString);
+ }
+
+ if (!String.IsNullOrEmpty (MaxString)) {
+ UpdateLayout (layout, MaxString);
+ layout.GetPixelSize (out max, out height);
+ max += 2*Spacing;
+ //Console.WriteLine ("for {0} got max {1} for {2}", this, max, MaxString);
+ }
+ }
+
+ private bool restrict_size = false;
+ public bool RestrictSize {
+ get { return restrict_size; }
+ set { restrict_size = value; }
+ }
+
+ public bool UseMarkup {
+ get { return use_markup; }
+ set { use_markup = value; }
+ }
+
+ #endregion
+ }
+}
diff --git a/lib/Hyena/src/Hyena.Gui/Hyena.Data.Gui/ColumnController.cs b/lib/Hyena/src/Hyena.Gui/Hyena.Data.Gui/ColumnController.cs
new file mode 100644
index 0000000..1ebb336
--- /dev/null
+++ b/lib/Hyena/src/Hyena.Gui/Hyena.Data.Gui/ColumnController.cs
@@ -0,0 +1,200 @@
+//
+// ColumnController.cs
+//
+// Author:
+// Aaron Bockover <abockover at novell.com>
+//
+// Copyright (C) 2007 Novell, Inc.
+//
+// Permission is hereby granted, free of charge, to any person obtaining
+// a copy of this software and associated documentation files (the
+// "Software"), to deal in the Software without restriction, including
+// without limitation the rights to use, copy, modify, merge, publish,
+// distribute, sublicense, and/or sell copies of the Software, and to
+// permit persons to whom the Software is furnished to do so, subject to
+// the following conditions:
+//
+// The above copyright notice and this permission notice shall be
+// included in all copies or substantial portions of the Software.
+//
+// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
+// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
+// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
+// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+//
+
+using System;
+using System.Collections;
+using System.Collections.Generic;
+
+namespace Hyena.Data.Gui
+{
+ public class ColumnController : IEnumerable<Column>
+ {
+ private List<Column> columns = new List<Column> ();
+ private ISortableColumn default_sort_column;
+ private ISortableColumn sort_column;
+
+ protected List<Column> Columns {
+ get { return columns; }
+ }
+
+ public event EventHandler Updated;
+
+ protected virtual void OnVisibilitiesChanged ()
+ {
+ OnUpdated ();
+ }
+
+ protected virtual void OnWidthsChanged ()
+ {
+ }
+
+ protected void OnUpdated ()
+ {
+ EventHandler handler = Updated;
+ if (handler != null) {
+ handler (this, EventArgs.Empty);
+ }
+ }
+
+ public void Clear ()
+ {
+ lock (this) {
+ foreach (Column column in columns) {
+ column.VisibilityChanged -= OnColumnVisibilityChanged;
+ column.WidthChanged -= OnColumnWidthChanged;
+ }
+ columns.Clear ();
+ }
+
+ OnUpdated ();
+ }
+
+ public void AddRange (params Column [] range)
+ {
+ lock (this) {
+ foreach (Column column in range) {
+ column.VisibilityChanged += OnColumnVisibilityChanged;
+ column.WidthChanged += OnColumnWidthChanged;
+ }
+ columns.AddRange (range);
+ }
+
+ OnUpdated ();
+ }
+
+ public void Add (Column column)
+ {
+ lock (this) {
+ column.VisibilityChanged += OnColumnVisibilityChanged;
+ column.WidthChanged += OnColumnWidthChanged;
+ columns.Add (column);
+ }
+
+ OnUpdated ();
+ }
+
+ public void Insert (Column column, int index)
+ {
+ lock (this) {
+ column.VisibilityChanged += OnColumnVisibilityChanged;
+ column.WidthChanged += OnColumnWidthChanged;
+ columns.Insert (index, column);
+ }
+
+ OnUpdated ();
+ }
+
+ public void Remove (Column column)
+ {
+ lock (this) {
+ column.VisibilityChanged -= OnColumnVisibilityChanged;
+ column.WidthChanged -= OnColumnWidthChanged;
+ columns.Remove (column);
+ }
+
+ OnUpdated ();
+ }
+
+ public void Remove (int index)
+ {
+ lock (this) {
+ Column column = columns[index];
+ column.VisibilityChanged -= OnColumnVisibilityChanged;
+ column.WidthChanged -= OnColumnWidthChanged;
+ columns.RemoveAt (index);
+ }
+
+ OnUpdated ();
+ }
+
+ public void Reorder (int index, int newIndex)
+ {
+ lock (this) {
+ Column column = columns[index];
+ columns.RemoveAt (index);
+ columns.Insert (newIndex, column);
+ }
+
+ OnUpdated ();
+ }
+
+ IEnumerator IEnumerable.GetEnumerator ()
+ {
+ return columns.GetEnumerator ();
+ }
+
+ IEnumerator<Column> IEnumerable<Column>.GetEnumerator ()
+ {
+ return columns.GetEnumerator ();
+ }
+
+ public int IndexOf (Column column)
+ {
+ lock (this) {
+ return columns.IndexOf (column);
+ }
+ }
+
+ public Column [] ToArray ()
+ {
+ return columns.ToArray ();
+ }
+
+ private void OnColumnVisibilityChanged (object o, EventArgs args)
+ {
+ OnVisibilitiesChanged ();
+ }
+
+ private void OnColumnWidthChanged (object o, EventArgs args)
+ {
+ OnWidthsChanged ();
+ }
+
+ public Column this[int index] {
+ get { return columns[index]; }
+ }
+
+ public ISortableColumn DefaultSortColumn {
+ get { return default_sort_column; }
+ set { default_sort_column = value; }
+ }
+
+ public virtual ISortableColumn SortColumn {
+ get { return sort_column; }
+ set { sort_column = value;}
+ }
+
+ public int Count {
+ get { return columns.Count; }
+ }
+
+ public virtual bool EnableColumnMenu {
+ get { return false; }
+ }
+ }
+}
diff --git a/lib/Hyena/src/Hyena.Gui/Hyena.Data.Gui/ColumnHeaderCellText.cs b/lib/Hyena/src/Hyena.Gui/Hyena.Data.Gui/ColumnHeaderCellText.cs
new file mode 100644
index 0000000..a5d17b6
--- /dev/null
+++ b/lib/Hyena/src/Hyena.Gui/Hyena.Data.Gui/ColumnHeaderCellText.cs
@@ -0,0 +1,97 @@
+//
+// ColumnHeaderCellText.cs
+//
+// Author:
+// Aaron Bockover <abockover at novell.com>
+//
+// Copyright (C) 2007 Novell, Inc.
+//
+// Permission is hereby granted, free of charge, to any person obtaining
+// a copy of this software and associated documentation files (the
+// "Software"), to deal in the Software without restriction, including
+// without limitation the rights to use, copy, modify, merge, publish,
+// distribute, sublicense, and/or sell copies of the Software, and to
+// permit persons to whom the Software is furnished to do so, subject to
+// the following conditions:
+//
+// The above copyright notice and this permission notice shall be
+// included in all copies or substantial portions of the Software.
+//
+// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
+// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
+// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
+// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+//
+
+using System;
+using Gtk;
+using Cairo;
+
+using Hyena.Data.Gui.Accessibility;
+
+namespace Hyena.Data.Gui
+{
+ public class ColumnHeaderCellText : ColumnCellText, IHeaderCell
+ {
+ public delegate Column DataHandler ();
+
+ private DataHandler data_handler;
+ private bool has_sort;
+
+ public ColumnHeaderCellText (DataHandler data_handler) : base (null, true)
+ {
+ this.data_handler = data_handler;
+ }
+
+ public override Atk.Object GetAccessible (ICellAccessibleParent parent)
+ {
+ return new ColumnHeaderCellTextAccessible (BoundObject, this, parent);
+ }
+
+ public override void Render (CellContext context, StateType state, double cellWidth, double cellHeight)
+ {
+ if (data_handler == null) {
+ return;
+ }
+
+ if (!has_sort) {
+ base.Render (context, state, cellWidth, cellHeight);
+ return;
+ }
+
+ Gdk.Rectangle arrow_alloc = new Gdk.Rectangle ();
+ arrow_alloc.Width = (int)(cellHeight / 3.0);
+ arrow_alloc.Height = (int)((double)arrow_alloc.Width / 1.6);
+ arrow_alloc.X = (int)cellWidth - arrow_alloc.Width - Spacing;
+ arrow_alloc.Y = ((int)cellHeight - arrow_alloc.Height) / 2;
+
+ double textWidth = arrow_alloc.X - Spacing;
+ if (textWidth > 0) {
+ base.Render (context, state, textWidth, cellHeight);
+ }
+
+ SortType sort_type = ((ISortableColumn)data_handler ()).SortType;
+ if (sort_type != SortType.None) {
+ context.Theme.DrawArrow (context.Context, arrow_alloc, sort_type);
+ }
+ }
+
+ protected override string GetText (object obj)
+ {
+ return data_handler ().Title;
+ }
+
+ public bool HasSort {
+ get { return has_sort; }
+ set { has_sort = value; }
+ }
+
+ public static int GetArrowWidth (int headerHeight)
+ {
+ return (int)(headerHeight / 3.0) + Spacing;
+ }
+ }
+}
diff --git a/lib/Hyena/src/Hyena.Gui/Hyena.Data.Gui/DataViewChild.cs b/lib/Hyena/src/Hyena.Gui/Hyena.Data.Gui/DataViewChild.cs
new file mode 100644
index 0000000..30c3886
--- /dev/null
+++ b/lib/Hyena/src/Hyena.Gui/Hyena.Data.Gui/DataViewChild.cs
@@ -0,0 +1,170 @@
+//
+// DataViewChild.cs
+//
+// Author:
+// Aaron Bockover <abockover at novell.com>
+//
+// Copyright 2010 Novell, Inc.
+//
+// Permission is hereby granted, free of charge, to any person obtaining
+// a copy of this software and associated documentation files (the
+// "Software"), to deal in the Software without restriction, including
+// without limitation the rights to use, copy, modify, merge, publish,
+// distribute, sublicense, and/or sell copies of the Software, and to
+// permit persons to whom the Software is furnished to do so, subject to
+// the following conditions:
+//
+// The above copyright notice and this permission notice shall be
+// included in all copies or substantial portions of the Software.
+//
+// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
+// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
+// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
+// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+//
+
+using System;
+using System.Reflection;
+
+using Hyena.Gui.Canvas;
+
+namespace Hyena.Data.Gui
+{
+ public abstract class DataViewChild : CanvasItem
+ {
+ public DataViewLayout ParentLayout { get; set; }
+ public int ModelRowIndex { get; set; }
+
+ protected override void OnInvalidate (Rect area)
+ {
+ ParentLayout.View.QueueDirtyRegion (area);
+ }
+
+#region Data Binding
+
+ private PropertyInfo property_info;
+ private PropertyInfo sub_property_info;
+
+ public void BindDataItem (object item)
+ {
+ if (item == null) {
+ BoundObjectParent = null;
+ bound_object = null;
+ return;
+ }
+
+ BoundObjectParent = item;
+
+ if (Property != null) {
+ EnsurePropertyInfo (Property, ref property_info, BoundObjectParent);
+ bound_object = property_info.GetValue (BoundObjectParent, null);
+
+ if (SubProperty != null) {
+ EnsurePropertyInfo (SubProperty, ref sub_property_info, bound_object);
+ bound_object = sub_property_info.GetValue (bound_object, null);
+ }
+ } else {
+ bound_object = BoundObjectParent;
+ }
+ }
+
+ private void EnsurePropertyInfo (string name, ref PropertyInfo prop, object obj)
+ {
+ if (prop == null || prop.ReflectedType != obj.GetType ()) {
+ prop = obj.GetType ().GetProperty (name);
+ if (prop == null) {
+ throw new Exception (String.Format (
+ "In {0}, type {1} does not have property {2}",
+ this, obj.GetType (), name));
+ }
+ }
+ }
+
+ protected Type BoundType {
+ get { return bound_object.GetType (); }
+ }
+
+ private object bound_object;
+ protected object BoundObject {
+ get { return bound_object; }
+ set {
+ if (Property != null) {
+ EnsurePropertyInfo (Property, ref property_info, BoundObjectParent);
+ property_info.SetValue (BoundObjectParent, value, null);
+ }
+ }
+ }
+
+ protected object BoundObjectParent { get; private set; }
+
+ private string property;
+ public string Property {
+ get { return property; }
+ set {
+ property = value;
+ if (value != null) {
+ int i = value.IndexOf (".");
+ if (i != -1) {
+ property = value.Substring (0, i);
+ SubProperty = value.Substring (i + 1, value.Length - i - 1);
+ }
+ }
+ }
+ }
+
+ public string SubProperty { get; set; }
+
+#endregion
+
+ }
+
+ public abstract class CanvasItem
+ {
+ public CanvasItem Parent { get; set; }
+ public Rect Allocation { get; set; }
+ public Rect VirtualAllocation { get; set; }
+
+ public Thickness Margin { get; set; }
+ public Thickness Padding { get; set; }
+
+ public abstract void Render (CellContext context);
+ public abstract void Arrange ();
+ public abstract Size Measure (Size available);
+
+ protected virtual void OnInvalidate (Rect area)
+ {
+ }
+
+ public void Invalidate (Rect area)
+ {
+ area.Offset (Allocation.X, Allocation.Y);
+ OnInvalidate (area);
+ }
+
+ public void Invalidate ()
+ {
+ Invalidate (Allocation);
+ }
+
+ public virtual bool ButtonEvent (Point cursor, bool pressed, uint button)
+ {
+ return false;
+ }
+
+ public virtual bool CursorMotionEvent (Point cursor)
+ {
+ return false;
+ }
+
+ public virtual void CursorEnterEvent ()
+ {
+ }
+
+ public virtual void CursorLeaveEvent ()
+ {
+ }
+ }
+}
diff --git a/lib/Hyena/src/Hyena.Gui/Hyena.Data.Gui/DataViewLayout.cs b/lib/Hyena/src/Hyena.Gui/Hyena.Data.Gui/DataViewLayout.cs
new file mode 100644
index 0000000..6609dfc
--- /dev/null
+++ b/lib/Hyena/src/Hyena.Gui/Hyena.Data.Gui/DataViewLayout.cs
@@ -0,0 +1,110 @@
+//
+// DataViewLayout.cs
+//
+// Author:
+// Aaron Bockover <abockover at novell.com>
+//
+// Copyright 2010 Novell, Inc.
+//
+// Permission is hereby granted, free of charge, to any person obtaining
+// a copy of this software and associated documentation files (the
+// "Software"), to deal in the Software without restriction, including
+// without limitation the rights to use, copy, modify, merge, publish,
+// distribute, sublicense, and/or sell copies of the Software, and to
+// permit persons to whom the Software is furnished to do so, subject to
+// the following conditions:
+//
+// The above copyright notice and this permission notice shall be
+// included in all copies or substantial portions of the Software.
+//
+// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
+// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
+// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
+// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+//
+
+using System;
+using System.Collections.Generic;
+
+using Hyena.Data;
+using Hyena.Gui.Canvas;
+
+namespace Hyena.Data.Gui
+{
+ public abstract class DataViewLayout
+ {
+ private List<DataViewChild> children = new List<DataViewChild> ();
+ protected List<DataViewChild> Children {
+ get { return children; }
+ }
+
+ public IListModel Model { get; set; }
+ public ListViewBase View { get; set; }
+
+ public Rect ActualAllocation { get; protected set; }
+ public Size VirtualSize { get; protected set; }
+ public Size ChildSize { get; protected set; }
+ public int XPosition { get; protected set; }
+ public int YPosition { get; protected set; }
+
+ public int ChildCount {
+ get { return Children.Count; }
+ }
+
+ public DataViewChild this[int index] {
+ get { return Children[index]; }
+ }
+
+ public void UpdatePosition (int x, int y)
+ {
+ XPosition = x;
+ YPosition = y;
+ InvalidateChildLayout ();
+ }
+
+ public void ModelUpdated ()
+ {
+ InvalidateVirtualSize ();
+ InvalidateChildLayout ();
+ }
+
+ public virtual void Allocate (Rect actualAllocation)
+ {
+ ActualAllocation = actualAllocation;
+
+ InvalidateChildSize ();
+ InvalidateChildCollection ();
+ InvalidateVirtualSize ();
+ InvalidateChildLayout ();
+ }
+
+ public virtual DataViewChild FindChildAtPoint (Point point)
+ {
+ return Children.Find (child => child.Allocation.Contains (
+ ActualAllocation.X + point.X, ActualAllocation.Y + point.Y));
+ }
+
+ public virtual DataViewChild FindChildAtModelRowIndex (int modelRowIndex)
+ {
+ return Children.Find (child => child.ModelRowIndex == modelRowIndex);
+ }
+
+ protected abstract void InvalidateChildSize ();
+ protected abstract void InvalidateVirtualSize ();
+ protected abstract void InvalidateChildCollection ();
+ protected abstract void InvalidateChildLayout ();
+
+ protected Rect GetChildVirtualAllocation (Rect childAllocation)
+ {
+ return new Rect () {
+ X = childAllocation.X - ActualAllocation.X,
+ Y = childAllocation.Y - ActualAllocation.Y,
+ Width = childAllocation.Width,
+ Height = childAllocation.Height
+ };
+ }
+ }
+}
diff --git a/lib/Hyena/src/Hyena.Gui/Hyena.Data.Gui/DataViewLayoutGrid.cs b/lib/Hyena/src/Hyena.Gui/Hyena.Data.Gui/DataViewLayoutGrid.cs
new file mode 100644
index 0000000..2828043
--- /dev/null
+++ b/lib/Hyena/src/Hyena.Gui/Hyena.Data.Gui/DataViewLayoutGrid.cs
@@ -0,0 +1,157 @@
+//
+// DataViewLayoutGrid.cs
+//
+// Author:
+// Aaron Bockover <abockover at novell.com>
+//
+// Copyright 2010 Novell, Inc.
+//
+// Permission is hereby granted, free of charge, to any person obtaining
+// a copy of this software and associated documentation files (the
+// "Software"), to deal in the Software without restriction, including
+// without limitation the rights to use, copy, modify, merge, publish,
+// distribute, sublicense, and/or sell copies of the Software, and to
+// permit persons to whom the Software is furnished to do so, subject to
+// the following conditions:
+//
+// The above copyright notice and this permission notice shall be
+// included in all copies or substantial portions of the Software.
+//
+// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
+// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
+// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
+// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+//
+
+using System;
+using System.Collections.Generic;
+
+using Hyena.Gui.Canvas;
+
+namespace Hyena.Data.Gui
+{
+ public class DataViewLayoutGrid : DataViewLayout
+ {
+ public int Rows { get; private set; }
+ public int Columns { get; private set; }
+
+ public Func<DataViewChild> ChildAllocator { get; set; }
+ public event EventHandler<EventArgs<int>> ChildCountChanged;
+
+ protected override void InvalidateChildSize ()
+ {
+ if (Children.Count <= 0) {
+ Children.Add (CreateChild ());
+ }
+
+ ChildSize = Children[0].Measure (Size.Empty);
+ }
+
+ protected override void InvalidateVirtualSize ()
+ {
+ double model_rows = Model == null ? 0 : Model.Count;
+ VirtualSize = new Size (
+ ChildSize.Width * Math.Max (Columns, 1),
+ ChildSize.Height * Math.Ceiling (model_rows / Math.Max (Columns, 1)));
+ }
+
+ protected override void InvalidateChildCollection ()
+ {
+ Rows = ChildSize.Height > 0
+ ? (int)Math.Ceiling ((ActualAllocation.Height +
+ ChildSize.Height) / (double)ChildSize.Height)
+ : 0;
+ Columns = ChildSize.Width > 0
+ ? (int)Math.Max (ActualAllocation.Width / ChildSize.Width, 1)
+ : 0;
+
+ ResizeChildCollection (Rows * Columns);
+
+ var handler = ChildCountChanged;
+ if (handler != null) {
+ handler (this, new EventArgs<int> (Rows * Columns));
+ }
+ }
+
+ protected override void InvalidateChildLayout ()
+ {
+ if (ChildSize.Width <= 0 || ChildSize.Height <= 0) {
+ // FIXME: empty/reset all child slots here?
+ return;
+ }
+
+ // Compute where we should start and end in the model
+ double offset = ActualAllocation.Y - YPosition % ChildSize.Height;
+ int first_model_row = (int)Math.Floor (YPosition / ChildSize.Height) * Columns;
+ int last_model_row = first_model_row + Rows * Columns;
+
+ // Setup for the layout iteration
+ int model_row_index = first_model_row;
+ int layout_child_index = 0;
+ int view_row_index = 0;
+ int view_column_index = 0;
+
+ // Allocation of the first child in the layout, this
+ // will change as we iterate the layout children
+ var child_allocation = new Rect () {
+ X = ActualAllocation.X,
+ Y = offset,
+ Width = ChildSize.Width,
+ Height = ChildSize.Height
+ };
+
+ // Iterate the layout children and configure them for the current
+ // view state to be consumed by interaction and rendering phases
+ for (; model_row_index < last_model_row; model_row_index++, layout_child_index++) {
+ var child = Children[layout_child_index];
+ child.Allocation = child_allocation;
+ child.VirtualAllocation = GetChildVirtualAllocation (child_allocation);
+ child.ModelRowIndex = model_row_index;
+ if (Model != null) {
+ child.BindDataItem (Model.GetItem (model_row_index));
+ }
+ child.Measure (ChildSize); // FIXME: Should not do this here...
+ child.Arrange ();
+
+ // Update the allocation for the next child
+ if (++view_column_index % Columns == 0) {
+ view_row_index++;
+ view_column_index = 0;
+
+ child_allocation.Y += ChildSize.Height;
+ child_allocation.X = ActualAllocation.X;
+ } else {
+ child_allocation.X += ChildSize.Width;
+ }
+
+ // FIXME: clear any layout children that go beyond the model
+ }
+ }
+
+ protected virtual DataViewChild CreateChild ()
+ {
+ if (ChildAllocator == null) {
+ throw new InvalidOperationException ("ChildAllocator is unset");
+ }
+
+ var child = ChildAllocator ();
+ child.ParentLayout = this;
+ return child;
+ }
+
+ private void ResizeChildCollection (int newChildCount)
+ {
+ int difference = Children.Count - newChildCount;
+ if (difference > 0) {
+ Children.RemoveRange (newChildCount, difference);
+ } else {
+ for (int i=0; i>difference; i--) {
+ Children.Add (CreateChild ());
+ }
+ }
+ }
+ }
+}
diff --git a/lib/Hyena/src/Hyena.Gui/Hyena.Data.Gui/IHeaderCell.cs b/lib/Hyena/src/Hyena.Gui/Hyena.Data.Gui/IHeaderCell.cs
new file mode 100644
index 0000000..a2c2b4b
--- /dev/null
+++ b/lib/Hyena/src/Hyena.Gui/Hyena.Data.Gui/IHeaderCell.cs
@@ -0,0 +1,36 @@
+//
+// IHeaderCell.cs
+//
+// Author:
+// Aaron Bockover <abockover at novell.com>
+//
+// Copyright (C) 2007 Novell, Inc.
+//
+// Permission is hereby granted, free of charge, to any person obtaining
+// a copy of this software and associated documentation files (the
+// "Software"), to deal in the Software without restriction, including
+// without limitation the rights to use, copy, modify, merge, publish,
+// distribute, sublicense, and/or sell copies of the Software, and to
+// permit persons to whom the Software is furnished to do so, subject to
+// the following conditions:
+//
+// The above copyright notice and this permission notice shall be
+// included in all copies or substantial portions of the Software.
+//
+// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
+// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
+// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
+// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+//
+
+using System;
+
+namespace Hyena.Data.Gui
+{
+ public interface IHeaderCell
+ {
+ }
+}
diff --git a/lib/Hyena/src/Hyena.Gui/Hyena.Data.Gui/IInteractiveCell.cs b/lib/Hyena/src/Hyena.Gui/Hyena.Data.Gui/IInteractiveCell.cs
new file mode 100644
index 0000000..f3ed4df
--- /dev/null
+++ b/lib/Hyena/src/Hyena.Gui/Hyena.Data.Gui/IInteractiveCell.cs
@@ -0,0 +1,40 @@
+//
+// IInteractiveCell.cs
+//
+// Author:
+// Aaron Bockover <abockover at novell.com>
+//
+// Copyright (C) 2008 Novell, Inc.
+//
+// Permission is hereby granted, free of charge, to any person obtaining
+// a copy of this software and associated documentation files (the
+// "Software"), to deal in the Software without restriction, including
+// without limitation the rights to use, copy, modify, merge, publish,
+// distribute, sublicense, and/or sell copies of the Software, and to
+// permit persons to whom the Software is furnished to do so, subject to
+// the following conditions:
+//
+// The above copyright notice and this permission notice shall be
+// included in all copies or substantial portions of the Software.
+//
+// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
+// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
+// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
+// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+//
+
+using System;
+using Gdk;
+
+namespace Hyena.Data.Gui
+{
+ public interface IInteractiveCell
+ {
+ bool ButtonEvent (int x, int y, bool pressed, Gdk.EventButton evnt);
+ bool MotionEvent (int x, int y, Gdk.EventMotion evnt);
+ bool PointerLeaveEvent ();
+ }
+}
\ No newline at end of file
diff --git a/lib/Hyena/src/Hyena.Gui/Hyena.Data.Gui/IListView.cs b/lib/Hyena/src/Hyena.Gui/Hyena.Data.Gui/IListView.cs
new file mode 100644
index 0000000..ac5fab7
--- /dev/null
+++ b/lib/Hyena/src/Hyena.Gui/Hyena.Data.Gui/IListView.cs
@@ -0,0 +1,47 @@
+//
+// IListView.cs
+//
+// Authors:
+// Gabriel Burt <gburt at novell.com>
+//
+// Copyright (C) 2008 Novell, Inc.
+//
+// Permission is hereby granted, free of charge, to any person obtaining
+// a copy of this software and associated documentation files (the
+// "Software"), to deal in the Software without restriction, including
+// without limitation the rights to use, copy, modify, merge, publish,
+// distribute, sublicense, and/or sell copies of the Software, and to
+// permit persons to whom the Software is furnished to do so, subject to
+// the following conditions:
+//
+// The above copyright notice and this permission notice shall be
+// included in all copies or substantial portions of the Software.
+//
+// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
+// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
+// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
+// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+//
+
+namespace Hyena.Data.Gui
+{
+ public interface IListView
+ {
+ Hyena.Collections.SelectionProxy SelectionProxy { get; }
+ Hyena.Collections.Selection Selection { get; }
+
+ void ScrollTo (int index);
+ void CenterOn (int index);
+ void GrabFocus ();
+ ColumnController ColumnController { get; set; }
+ }
+
+ public interface IListView<T> : IListView
+ {
+ void SetModel (IListModel<T> model);
+ IListModel<T> Model { get; }
+ }
+}
diff --git a/lib/Hyena/src/Hyena.Gui/Hyena.Data.Gui/ISizeRequestCell.cs b/lib/Hyena/src/Hyena.Gui/Hyena.Data.Gui/ISizeRequestCell.cs
new file mode 100644
index 0000000..473bd2a
--- /dev/null
+++ b/lib/Hyena/src/Hyena.Gui/Hyena.Data.Gui/ISizeRequestCell.cs
@@ -0,0 +1,39 @@
+//
+// ISizeRequestCell.cs
+//
+// Author:
+// Aaron Bockover <abockover at novell.com>
+//
+// Copyright (C) 2008 Novell, Inc.
+//
+// Permission is hereby granted, free of charge, to any person obtaining
+// a copy of this software and associated documentation files (the
+// "Software"), to deal in the Software without restriction, including
+// without limitation the rights to use, copy, modify, merge, publish,
+// distribute, sublicense, and/or sell copies of the Software, and to
+// permit persons to whom the Software is furnished to do so, subject to
+// the following conditions:
+//
+// The above copyright notice and this permission notice shall be
+// included in all copies or substantial portions of the Software.
+//
+// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
+// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
+// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
+// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+//
+
+
+using System;
+
+namespace Hyena.Data.Gui
+{
+ public interface ISizeRequestCell
+ {
+ bool RestrictSize { get; set; }
+ void GetWidthRange (Pango.Layout layout, out int min_width, out int max_width);
+ }
+}
diff --git a/lib/Hyena/src/Hyena.Gui/Hyena.Data.Gui/ITextCell.cs b/lib/Hyena/src/Hyena.Gui/Hyena.Data.Gui/ITextCell.cs
new file mode 100644
index 0000000..ca541cd
--- /dev/null
+++ b/lib/Hyena/src/Hyena.Gui/Hyena.Data.Gui/ITextCell.cs
@@ -0,0 +1,38 @@
+//
+// ITextCell.cs
+//
+// Author:
+// Gabriel Burt <gburt at novell.com>
+//
+// Copyright (C) 2008 Novell, Inc.
+//
+// Permission is hereby granted, free of charge, to any person obtaining
+// a copy of this software and associated documentation files (the
+// "Software"), to deal in the Software without restriction, including
+// without limitation the rights to use, copy, modify, merge, publish,
+// distribute, sublicense, and/or sell copies of the Software, and to
+// permit persons to whom the Software is furnished to do so, subject to
+// the following conditions:
+//
+// The above copyright notice and this permission notice shall be
+// included in all copies or substantial portions of the Software.
+//
+// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
+// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
+// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
+// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+//
+
+
+using System;
+
+namespace Hyena.Data.Gui
+{
+ public interface ITextCell
+ {
+ Pango.Weight FontWeight { get; set; }
+ }
+}
diff --git a/lib/Hyena/src/Hyena.Gui/Hyena.Data.Gui/ITooltipCell.cs b/lib/Hyena/src/Hyena.Gui/Hyena.Data.Gui/ITooltipCell.cs
new file mode 100644
index 0000000..14aab77
--- /dev/null
+++ b/lib/Hyena/src/Hyena.Gui/Hyena.Data.Gui/ITooltipCell.cs
@@ -0,0 +1,38 @@
+//
+// ITooltipCell.cs
+//
+// Author:
+// Gabriel Burt <gburt at novell.com>
+//
+// Copyright (C) 2009 Novell, Inc.
+//
+// Permission is hereby granted, free of charge, to any person obtaining
+// a copy of this software and associated documentation files (the
+// "Software"), to deal in the Software without restriction, including
+// without limitation the rights to use, copy, modify, merge, publish,
+// distribute, sublicense, and/or sell copies of the Software, and to
+// permit persons to whom the Software is furnished to do so, subject to
+// the following conditions:
+//
+// The above copyright notice and this permission notice shall be
+// included in all copies or substantial portions of the Software.
+//
+// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
+// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
+// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
+// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+//
+
+using System;
+using Gdk;
+
+namespace Hyena.Data.Gui
+{
+ public interface ITooltipCell
+ {
+ string GetTooltipMarkup (CellContext cellContext, double columnWidth);
+ }
+}
diff --git a/lib/Hyena/src/Hyena.Gui/Hyena.Data.Gui/ListView/ListView.cs b/lib/Hyena/src/Hyena.Gui/Hyena.Data.Gui/ListView/ListView.cs
new file mode 100644
index 0000000..e5398c6
--- /dev/null
+++ b/lib/Hyena/src/Hyena.Gui/Hyena.Data.Gui/ListView/ListView.cs
@@ -0,0 +1,93 @@
+//
+// ListView.cs
+//
+// Author:
+// Aaron Bockover <abockover at novell.com>
+//
+// Copyright (C) 2007-2008 Novell, Inc.
+//
+// Permission is hereby granted, free of charge, to any person obtaining
+// a copy of this software and associated documentation files (the
+// "Software"), to deal in the Software without restriction, including
+// without limitation the rights to use, copy, modify, merge, publish,
+// distribute, sublicense, and/or sell copies of the Software, and to
+// permit persons to whom the Software is furnished to do so, subject to
+// the following conditions:
+//
+// The above copyright notice and this permission notice shall be
+// included in all copies or substantial portions of the Software.
+//
+// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
+// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
+// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
+// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+//
+
+using System;
+
+namespace Hyena.Data.Gui
+{
+ public partial class ListView<T> : ListViewBase, IListView<T>
+ {
+ protected ListView (IntPtr ptr) : base (ptr)
+ {
+ }
+
+ public ListView ()
+ {
+ column_layout = new Pango.Layout (PangoContext);
+ CanFocus = true;
+ selection_proxy.Changed += delegate { InvalidateList (); };
+
+ HasTooltip = true;
+ QueryTooltip += OnQueryTooltip;
+ }
+
+ private void OnQueryTooltip (object o, Gtk.QueryTooltipArgs args)
+ {
+ if (cell_context != null && cell_context.Layout != null && !args.KeyboardTooltip) {
+ ITooltipCell cell;
+ Column column;
+ int row_index;
+
+ if (GetEventCell<ITooltipCell> (args.X, args.Y, out cell, out column, out row_index)) {
+ CachedColumn cached_column = GetCachedColumnForColumn (column);
+
+ string markup = cell.GetTooltipMarkup (cell_context, cached_column.Width);
+ if (!String.IsNullOrEmpty (markup)) {
+ Gdk.Rectangle rect = new Gdk.Rectangle ();
+ rect.X = list_interaction_alloc.X + cached_column.X1;
+
+ // get the y of the event in list coords
+ rect.Y = args.Y - list_interaction_alloc.Y;
+
+ // get the top of the cell pointed to by list_y
+ rect.Y -= VadjustmentValue % ChildSize.Height;
+ rect.Y -= rect.Y % ChildSize.Height;
+
+ // convert back to widget coords
+ rect.Y += list_interaction_alloc.Y;
+
+ // TODO is this right even if the list is wide enough to scroll horizontally?
+ rect.Width = cached_column.Width;
+
+ // TODO not right - could be smaller if at the top/bottom and only partially showing
+ rect.Height = ChildSize.Height;
+
+ args.Tooltip.Markup = markup;
+ args.Tooltip.TipArea = rect;
+ args.RetVal = true;
+ }
+ }
+ }
+
+ // Work around ref counting SIGSEGV, see http://bugzilla.gnome.org/show_bug.cgi?id=478519#c9
+ if (args.Tooltip != null) {
+ args.Tooltip.Dispose ();
+ }
+ }
+ }
+}
diff --git a/lib/Hyena/src/Hyena.Gui/Hyena.Data.Gui/ListView/ListViewBase.cs b/lib/Hyena/src/Hyena.Gui/Hyena.Data.Gui/ListView/ListViewBase.cs
new file mode 100644
index 0000000..da18c63
--- /dev/null
+++ b/lib/Hyena/src/Hyena.Gui/Hyena.Data.Gui/ListView/ListViewBase.cs
@@ -0,0 +1,65 @@
+//
+// ListViewBase.cs
+//
+// Author:
+// Aaron Bockover <abockover at novell.com>
+//
+// Copyright (C) 2008 Novell, Inc.
+//
+// Permission is hereby granted, free of charge, to any person obtaining
+// a copy of this software and associated documentation files (the
+// "Software"), to deal in the Software without restriction, including
+// without limitation the rights to use, copy, modify, merge, publish,
+// distribute, sublicense, and/or sell copies of the Software, and to
+// permit persons to whom the Software is furnished to do so, subject to
+// the following conditions:
+//
+// The above copyright notice and this permission notice shall be
+// included in all copies or substantial portions of the Software.
+//
+// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
+// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
+// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
+// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+//
+
+using System;
+using Gtk;
+
+namespace Hyena.Data.Gui
+{
+ public class ListViewBase : Widget
+ {
+ protected ListViewBase (IntPtr ptr) : base (ptr)
+ {
+ }
+
+ public ListViewBase ()
+ {
+ }
+
+ public void QueueDirtyRegion (Gdk.Rectangle region)
+ {
+ region.Intersect (Allocation);
+ QueueDrawArea (region.X, region.Y, region.Width, region.Height);
+ }
+
+ public void QueueDirtyRegion (Hyena.Gui.Canvas.Rect region)
+ {
+ QueueDirtyRegion ((Gdk.Rectangle)region);
+ }
+
+ public void QueueDirtyRegion (Cairo.Rectangle region)
+ {
+ QueueDirtyRegion (new Gdk.Rectangle () {
+ X = (int)Math.Floor (region.X),
+ Y = (int)Math.Floor (region.Y),
+ Width = (int)Math.Ceiling (region.Width),
+ Height = (int)Math.Ceiling (region.Height)
+ });
+ }
+ }
+}
diff --git a/lib/Hyena/src/Hyena.Gui/Hyena.Data.Gui/ListView/ListView_Accessible.cs b/lib/Hyena/src/Hyena.Gui/Hyena.Data.Gui/ListView/ListView_Accessible.cs
new file mode 100644
index 0000000..1646e9b
--- /dev/null
+++ b/lib/Hyena/src/Hyena.Gui/Hyena.Data.Gui/ListView/ListView_Accessible.cs
@@ -0,0 +1,177 @@
+//
+// ListView_Accessible.cs
+//
+// Authors:
+// Gabriel Burt <gburt at novell.com>
+// Eitan Isaacson <eitan at ascender.com>
+//
+// Copyright (C) 2009 Novell, Inc.
+// Copyright (C) 2009 Eitan Isaacson
+//
+// Permission is hereby granted, free of charge, to any person obtaining
+// a copy of this software and associated documentation files (the
+// "Software"), to deal in the Software without restriction, including
+// without limitation the rights to use, copy, modify, merge, publish,
+// distribute, sublicense, and/or sell copies of the Software, and to
+// permit persons to whom the Software is furnished to do so, subject to
+// the following conditions:
+//
+// The above copyright notice and this permission notice shall be
+// included in all copies or substantial portions of the Software.
+//
+// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
+// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
+// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
+// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+//
+
+using System;
+using System.Linq;
+using System.Collections.Generic;
+
+using Gtk;
+
+using Hyena.Data.Gui.Accessibility;
+
+namespace Hyena.Data.Gui
+{
+ public partial class ListView<T> : ListViewBase
+ {
+ static ListView ()
+ {
+#if ENABLE_ATK
+ ListViewAccessibleFactory<T>.Init ();
+#endif
+ }
+
+ public Gdk.Rectangle GetColumnCellExtents (int row, int column)
+ {
+ return GetColumnCellExtents (row, column, true);
+ }
+
+ public Gdk.Rectangle GetColumnCellExtents (int row, int column, bool clip) {
+ return GetColumnCellExtents (row, column, clip, Atk.CoordType.Window);
+ }
+
+ public Gdk.Rectangle GetColumnCellExtents (int row, int column, bool clip, Atk.CoordType coord_type)
+ {
+ int width = GetColumnWidth (column);
+ int height = ChildSize.Height;
+
+ int y = (int)GetViewPointForModelRow (row).Y - VadjustmentValue + ListAllocation.Y;
+
+ int x = ListAllocation.X - HadjustmentValue;
+ for (int index=0;index<column;index++)
+ x += GetColumnWidth (index);
+
+ Gdk.Rectangle rectangle = new Gdk.Rectangle (x, y, width, height);
+
+ if (clip && !ListAllocation.Contains (rectangle))
+ return new Gdk.Rectangle (Int32.MinValue, Int32.MinValue, Int32.MinValue, Int32.MinValue);
+
+ if (coord_type == Atk.CoordType.Window)
+ return rectangle;
+
+ int origin_x, origin_y;
+ GdkWindow.GetPosition (out origin_x, out origin_y);
+
+ rectangle.X += origin_x;
+ rectangle.Y += origin_y;
+
+ return rectangle;
+ }
+
+ public Gdk.Rectangle GetColumnHeaderCellExtents (int column, bool clip, Atk.CoordType coord_type)
+ {
+ if (!HeaderVisible)
+ return new Gdk.Rectangle (Int32.MinValue, Int32.MinValue, Int32.MinValue, Int32.MinValue);
+ int width = GetColumnWidth (column);
+ int height = HeaderHeight;
+
+ int x = header_rendering_alloc.X - HadjustmentValue + Theme.BorderWidth;
+ if (column != 0)
+ x += Theme.InnerBorderWidth;
+ for (int index=0;index<column;index++)
+ x += GetColumnWidth (index);
+
+ int y = Theme.BorderWidth + header_rendering_alloc.Y;
+
+ Gdk.Rectangle rectangle = new Gdk.Rectangle (x, y, width, height);
+
+ if (coord_type == Atk.CoordType.Window)
+ return rectangle;
+
+ int origin_x, origin_y;
+ GdkWindow.GetPosition (out origin_x, out origin_y);
+
+ rectangle.X += origin_x;
+ rectangle.Y += origin_y;
+
+ return rectangle;
+ }
+
+ public void GetCellAtPoint (int x, int y, Atk.CoordType coord_type, out int row, out int col)
+ {
+ int origin_x = 0;
+ int origin_y = 0;
+ if (coord_type == Atk.CoordType.Screen)
+ GdkWindow.GetPosition (out origin_x, out origin_y);
+
+ x = x - ListAllocation.X - origin_x;
+ y = y - ListAllocation.Y - origin_y;
+
+ Column column = GetColumnAt (x);
+
+ CachedColumn cached_column = GetCachedColumnForColumn (column);
+
+ row = GetModelRowAt (x, y);
+ col = cached_column.Index;
+ }
+
+ public void InvokeColumnHeaderMenu (int column)
+ {
+ Gdk.Rectangle rectangle = GetColumnHeaderCellExtents (column, true, Atk.CoordType.Window);
+ Column col = ColumnController.Where (c => c.Visible).ElementAtOrDefault (column);
+ OnColumnRightClicked (col, rectangle.X + rectangle.Width/2, rectangle.Y + rectangle.Height/2);
+ }
+
+ public void ClickColumnHeader (int column)
+ {
+ Column col = ColumnController.Where (c => c.Visible).ElementAtOrDefault (column);
+ OnColumnLeftClicked (col);
+ }
+
+ private void AccessibleCellRedrawn (int column, int row)
+ {
+ var accessible = Accessible as ICellAccessibleParent;
+ if (accessible != null) {
+ accessible.CellRedrawn (column, row);
+ }
+ }
+
+ }
+
+#if ENABLE_ATK
+ internal class ListViewAccessibleFactory<T> : Atk.ObjectFactory
+ {
+ public static void Init ()
+ {
+ new ListViewAccessibleFactory<T> ();
+ Atk.Global.DefaultRegistry.SetFactoryType ((GLib.GType)typeof (ListView<T>), (GLib.GType)typeof (ListViewAccessibleFactory<T>));
+ }
+
+ protected override Atk.Object OnCreateAccessible (GLib.Object obj)
+ {
+ return new ListViewAccessible<T> (obj);
+ }
+
+ protected override GLib.GType OnGetAccessibleType ()
+ {
+ return ListViewAccessible<T>.GType;
+ }
+ }
+#endif
+}
diff --git a/lib/Hyena/src/Hyena.Gui/Hyena.Data.Gui/ListView/ListView_DragAndDrop.cs b/lib/Hyena/src/Hyena.Gui/Hyena.Data.Gui/ListView/ListView_DragAndDrop.cs
new file mode 100644
index 0000000..2cdaea4
--- /dev/null
+++ b/lib/Hyena/src/Hyena.Gui/Hyena.Data.Gui/ListView/ListView_DragAndDrop.cs
@@ -0,0 +1,213 @@
+//
+// ListView_DragAndDrop.cs
+//
+// Author:
+// Aaron Bockover <abockover at novell.com>
+//
+// Copyright (C) 2008 Novell, Inc.
+//
+// Permission is hereby granted, free of charge, to any person obtaining
+// a copy of this software and associated documentation files (the
+// "Software"), to deal in the Software without restriction, including
+// without limitation the rights to use, copy, modify, merge, publish,
+// distribute, sublicense, and/or sell copies of the Software, and to
+// permit persons to whom the Software is furnished to do so, subject to
+// the following conditions:
+//
+// The above copyright notice and this permission notice shall be
+// included in all copies or substantial portions of the Software.
+//
+// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
+// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
+// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
+// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+//
+
+using System;
+using Gtk;
+
+namespace Hyena.Data.Gui
+{
+ public static class ListViewDragDropTarget
+ {
+ public enum TargetType
+ {
+ ModelSelection
+ }
+
+ public static readonly TargetEntry ModelSelection =
+ new TargetEntry ("application/x-hyena-data-model-selection", TargetFlags.App,
+ (uint)TargetType.ModelSelection);
+ }
+
+ public partial class ListView<T> : ListViewBase
+ {
+ private static TargetEntry [] drag_drop_dest_entries = new TargetEntry [] {
+ ListViewDragDropTarget.ModelSelection
+ };
+
+ protected virtual TargetEntry [] DragDropDestEntries {
+ get { return drag_drop_dest_entries; }
+ }
+
+ protected virtual TargetEntry [] DragDropSourceEntries {
+ get { return drag_drop_dest_entries; }
+ }
+
+ private bool is_reorderable = false;
+ public bool IsReorderable {
+ get { return is_reorderable && IsEverReorderable; }
+ set {
+ is_reorderable = value;
+ OnDragSourceSet ();
+ OnDragDestSet ();
+ }
+ }
+
+ private bool is_ever_reorderable = false;
+ public bool IsEverReorderable {
+ get { return is_ever_reorderable; }
+ set {
+ is_ever_reorderable = value;
+ OnDragSourceSet ();
+ OnDragDestSet ();
+ }
+ }
+
+ private bool force_drag_source_set = false;
+ protected bool ForceDragSourceSet {
+ get { return force_drag_source_set; }
+ set {
+ force_drag_source_set = true;
+ OnDragSourceSet ();
+ }
+ }
+
+ private bool force_drag_dest_set = false;
+ protected bool ForceDragDestSet {
+ get { return force_drag_dest_set; }
+ set {
+ force_drag_dest_set = true;
+ OnDragDestSet ();
+ }
+ }
+
+ protected virtual void OnDragDestSet ()
+ {
+ if (ForceDragDestSet || IsReorderable) {
+ Gtk.Drag.DestSet (this, DestDefaults.All, DragDropDestEntries, Gdk.DragAction.Move);
+ } else {
+ Gtk.Drag.DestUnset (this);
+ }
+ }
+
+ protected virtual void OnDragSourceSet ()
+ {
+ if (ForceDragSourceSet || IsReorderable) {
+ Gtk.Drag.SourceSet (this, Gdk.ModifierType.Button1Mask | Gdk.ModifierType.Button3Mask,
+ DragDropSourceEntries, Gdk.DragAction.Copy | Gdk.DragAction.Move);
+ } else {
+ Gtk.Drag.SourceUnset (this);
+ }
+ }
+
+ private uint drag_scroll_timeout_id;
+ private uint drag_scroll_timeout_duration = 50;
+ private double drag_scroll_velocity;
+ private double drag_scroll_velocity_max = 100.0;
+ private int drag_reorder_row_index = -1;
+ private int drag_reorder_motion_y = -1;
+
+ private void StopDragScroll ()
+ {
+ drag_scroll_velocity = 0.0;
+
+ if (drag_scroll_timeout_id > 0) {
+ GLib.Source.Remove (drag_scroll_timeout_id);
+ drag_scroll_timeout_id = 0;
+ }
+ }
+
+ private void OnDragScroll (GLib.TimeoutHandler handler, double threshold, int total, int position)
+ {
+ if (position < threshold) {
+ drag_scroll_velocity = -1.0 + (position / threshold);
+ } else if (position > total - threshold) {
+ drag_scroll_velocity = 1.0 - ((total - position) / threshold);
+ } else {
+ StopDragScroll ();
+ return;
+ }
+
+ if (drag_scroll_timeout_id == 0) {
+ drag_scroll_timeout_id = GLib.Timeout.Add (drag_scroll_timeout_duration, handler);
+ }
+ }
+
+ protected override bool OnDragMotion (Gdk.DragContext context, int x, int y, uint time)
+ {
+ if (!IsReorderable) {
+ StopDragScroll ();
+ drag_reorder_row_index = -1;
+ drag_reorder_motion_y = -1;
+ InvalidateList ();
+ return false;
+ }
+
+ drag_reorder_motion_y = y;
+ DragReorderUpdateRow ();
+
+ OnDragScroll (OnDragVScrollTimeout, Allocation.Height * 0.3, Allocation.Height, y);
+
+ return true;
+ }
+
+ protected override void OnDragLeave (Gdk.DragContext context, uint time)
+ {
+ StopDragScroll ();
+ }
+
+ protected override void OnDragEnd (Gdk.DragContext context)
+ {
+ StopDragScroll ();
+ drag_reorder_row_index = -1;
+ drag_reorder_motion_y = -1;
+ InvalidateList ();
+ }
+
+ private bool OnDragVScrollTimeout ()
+ {
+ ScrollToY (VadjustmentValue + (drag_scroll_velocity * drag_scroll_velocity_max));
+ DragReorderUpdateRow ();
+ return true;
+ }
+
+ private void DragReorderUpdateRow ()
+ {
+ int row = GetDragRow (drag_reorder_motion_y);
+ if (row != drag_reorder_row_index) {
+ drag_reorder_row_index = row;
+ InvalidateList ();
+ }
+ }
+
+ protected int GetDragRow (int y)
+ {
+ y = TranslateToListY (y);
+ int row = GetModelRowAt (0, y);
+
+ if (row == -1) {
+ return -1;
+ }
+
+ if (row != GetModelRowAt (0, y + ChildSize.Height / 2)) {
+ row++;
+ }
+
+ return row;
+ }
+ }
+}
diff --git a/lib/Hyena/src/Hyena.Gui/Hyena.Data.Gui/ListView/ListView_Header.cs b/lib/Hyena/src/Hyena.Gui/Hyena.Data.Gui/ListView/ListView_Header.cs
new file mode 100644
index 0000000..0706563
--- /dev/null
+++ b/lib/Hyena/src/Hyena.Gui/Hyena.Data.Gui/ListView/ListView_Header.cs
@@ -0,0 +1,634 @@
+//
+// ListView_Header.cs
+//
+// Author:
+// Aaron Bockover <abockover at novell.com>
+//
+// Copyright (C) 2007-2008 Novell, Inc.
+//
+// Permission is hereby granted, free of charge, to any person obtaining
+// a copy of this software and associated documentation files (the
+// "Software"), to deal in the Software without restriction, including
+// without limitation the rights to use, copy, modify, merge, publish,
+// distribute, sublicense, and/or sell copies of the Software, and to
+// permit persons to whom the Software is furnished to do so, subject to
+// the following conditions:
+//
+// The above copyright notice and this permission notice shall be
+// included in all copies or substantial portions of the Software.
+//
+// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
+// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
+// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
+// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+//
+
+using System;
+using System.Collections.Generic;
+using Mono.Unix;
+using Gtk;
+
+namespace Hyena.Data.Gui
+{
+ public partial class ListView<T> : ListViewBase
+ {
+ internal struct CachedColumn
+ {
+ public static readonly CachedColumn Zero;
+
+ public Column Column;
+ public int X1;
+ public int X2;
+ public int Width;
+ public int MinWidth;
+ public int MaxWidth;
+ public int ResizeX1;
+ public int ResizeX2;
+ public int Index;
+ public double ElasticWidth;
+ public double ElasticPercent;
+ }
+
+ private static Gdk.Cursor resize_x_cursor = new Gdk.Cursor (Gdk.CursorType.SbHDoubleArrow);
+ private static Gdk.Cursor drag_cursor = new Gdk.Cursor (Gdk.CursorType.Fleur);
+
+ private bool resizable;
+ private int header_width;
+ private double list_width, max_width;
+ private int sort_column_index = -1;
+ private int resizing_column_index = -1;
+ private int pressed_column_index = -1;
+ private int pressed_column_x = -1;
+ private int pressed_column_x_start = -1;
+ private int pressed_column_x_offset = -1;
+ private int pressed_column_x_drag = -1;
+ private int pressed_column_x_start_hadjustment = -1;
+ private bool pressed_column_is_dragging = false;
+ private bool pressed_column_drag_started = false;
+
+ private Pango.Layout column_layout;
+
+ private CachedColumn [] column_cache;
+ private List<int> elastic_columns;
+
+ public int Width {
+ get { return (int)list_width; }
+ }
+
+ public int MaxWidth {
+ get { return (int)max_width + Theme.TotalBorderWidth*2; }
+ }
+
+#region Columns
+
+ private void InvalidateColumnCache ()
+ {
+ column_cache = null;
+ }
+
+ private void GenerateColumnCache ()
+ {
+ column_cache = new CachedColumn[column_controller.Count];
+
+ int i = 0;
+ double total = 0.0;
+
+ foreach (Column column in column_controller) {
+ if (!column.Visible) {
+ continue;
+ }
+
+ // If we don't already have a MinWidth set, use the width of our Title text
+ column.CalculateWidths (column_layout, HeaderVisible, HeaderHeight);
+ column_cache[i] = new CachedColumn ();
+ column_cache[i].Column = column;
+ column_cache[i].Index = i;
+
+ total += column.Width;
+ i++;
+ }
+
+ Array.Resize (ref column_cache, i);
+
+ double scale_factor = 1.0 / total;
+
+ for (i = 0; i < column_cache.Length; i++) {
+ column_cache[i].Column.Width *= scale_factor;
+ if (column_cache[i].Column.Width <= 0) {
+ Hyena.Log.Warning ("Overriding 0-computed column cache width");
+ column_cache[i].Column.Width = 0.01;
+ }
+ }
+
+ RecalculateColumnSizes ();
+ }
+
+ private void RegenerateColumnCache ()
+ {
+ if (column_controller == null) {
+ return;
+ }
+
+ if (column_cache == null) {
+ GenerateColumnCache ();
+ }
+
+ for (int i = 0; i < column_cache.Length; i++) {
+ // Calculate this column's proportional share of the width, and set positions (X1/X2)
+ column_cache[i].Width = (int)Math.Round (((double)header_width * column_cache[i].Column.Width));
+ column_cache[i].X1 = i == 0 ? 0 : column_cache[i - 1].X2;
+ column_cache[i].X2 = column_cache[i].X1 + column_cache[i].Width;
+ column_cache[i].ResizeX1 = column_cache[i].X2;
+ column_cache[i].ResizeX2 = column_cache[i].ResizeX1 + 2;
+ }
+
+ // TODO handle max width
+ int index = column_cache.Length - 1;
+ if (index >= 0) {
+ column_cache[index].X2 = header_width;
+ column_cache[index].Width = column_cache[index].X2 - column_cache[index].X1;
+ }
+ }
+
+ private void RecalculateColumnSizes ()
+ {
+ if (column_cache == null) {
+ return;
+ }
+
+ ISortable sortable = Model as ISortable;
+ sort_column_index = -1;
+ int min_header_width = 0;
+ for (int i = 0; i < column_cache.Length; i++) {
+ if (sortable != null) {
+ ColumnHeaderCellText column_cell = column_cache[i].Column.HeaderCell as ColumnHeaderCellText;
+ if (column_cell != null) {
+ ISortableColumn sort_column = column_cache[i].Column as ISortableColumn;
+ column_cell.HasSort = sort_column != null && sortable.SortColumn == sort_column;
+ if (column_cell.HasSort) {
+ sort_column_index = i;
+ }
+ }
+ }
+
+ column_cache[i].Column.CalculateWidths (column_layout, HeaderVisible, HeaderHeight);
+ column_cache[i].MaxWidth = column_cache[i].Column.MaxWidth;
+ column_cache[i].MinWidth = column_cache[i].Column.MinWidth;
+ min_header_width += column_cache[i].MinWidth;
+ }
+
+ if (column_cache.Length == 1) {
+ column_cache[0].Column.Width = 1.0;
+ } else if (min_header_width >= header_interaction_alloc.Width) {
+ header_width = min_header_width;
+ resizable = false;
+ for (int i = 0; i < column_cache.Length; i++) {
+ column_cache[i].Column.Width = (double)column_cache[i].MinWidth / (double)header_width;
+ }
+ } else {
+ header_width = header_interaction_alloc.Width;
+ resizable = true;
+
+ if (elastic_columns == null) {
+ elastic_columns = new List<int> (column_cache.Length);
+ }
+ elastic_columns.Clear ();
+ for (int i = 0; i < column_cache.Length; i++) {
+ elastic_columns.Add (i);
+ column_cache[i].ElasticWidth = 0.0;
+ column_cache[i].ElasticPercent = column_cache[i].Column.Width * header_width;
+ }
+
+ double remaining_width = RecalculateColumnSizes (header_width, header_width);
+
+ while (Math.Round (remaining_width) != 0.0 && elastic_columns.Count > 0) {
+ double total_elastic_width = 0.0;
+ foreach (int i in elastic_columns) {
+ total_elastic_width += column_cache[i].ElasticWidth;
+ }
+ remaining_width = RecalculateColumnSizes (remaining_width, total_elastic_width);
+ }
+
+ for (int i = 0; i < column_cache.Length; i++) {
+ column_cache[i].Column.Width = column_cache[i].ElasticWidth / (double)header_width;
+ }
+ }
+
+ double tmp_width = 0.0;
+ double tmp_max = 0.0;
+ foreach (var col in column_cache) {
+ tmp_width += col.ElasticWidth;
+ tmp_max += col.MaxWidth == Int32.MaxValue ? col.MinWidth : col.MaxWidth;
+ }
+ list_width = tmp_width;
+ max_width = tmp_max;
+ }
+
+ private double RecalculateColumnSizes (double total_width, double total_elastic_width)
+ {
+ double remaining_width = total_width;
+
+ for (int index = 0; index < elastic_columns.Count; index++) {
+ int i = elastic_columns[index];
+ double percent = column_cache[i].ElasticPercent / total_elastic_width;
+ double delta = total_width * percent;
+
+ // TODO handle max widths
+ double width = column_cache[i].ElasticWidth + delta;
+ if (width < column_cache[i].MinWidth) {
+ delta = column_cache[i].MinWidth - column_cache[i].ElasticWidth;
+ elastic_columns.RemoveAt (index);
+ index--;
+ } else if (width > column_cache[i].MaxWidth) {
+ delta = column_cache[i].MaxWidth - column_cache[i].ElasticWidth;
+ elastic_columns.RemoveAt (index);
+ index--;
+ }
+
+ remaining_width -= delta;
+ column_cache[i].ElasticWidth += delta;
+ }
+
+ if (Math.Abs (total_width - remaining_width) < 1.0 || remaining_width == Double.NaN) {
+ Hyena.Log.Warning ("Forcefully breaking out of RCS loop b/c change in total_width less than 1.0");
+ return 0;
+ }
+
+ return Math.Round (remaining_width);
+ }
+
+ protected virtual void OnColumnControllerUpdated ()
+ {
+ InvalidateColumnCache ();
+ RegenerateColumnCache ();
+ UpdateAdjustments ();
+ QueueDirtyRegion ();
+ }
+
+ protected virtual void OnColumnLeftClicked (Column clickedColumn)
+ {
+ if (Model is ISortable && clickedColumn is ISortableColumn) {
+ ISortableColumn sort_column = clickedColumn as ISortableColumn;
+ ISortable sortable = Model as ISortable;
+
+ // Change the sort-type with every click
+ if (sort_column == ColumnController.SortColumn) {
+ switch (sort_column.SortType) {
+ case SortType.Ascending: sort_column.SortType = SortType.Descending; break;
+ case SortType.Descending: sort_column.SortType = SortType.None; break;
+ case SortType.None: sort_column.SortType = SortType.Ascending; break;
+ }
+ }
+
+ // If we're switching from a different column, or we aren't reorderable, make sure sort type isn't None
+ if ((sort_column != ColumnController.SortColumn || !IsEverReorderable) && sort_column.SortType == SortType.None) {
+ sort_column.SortType = SortType.Ascending;
+ }
+
+ sortable.Sort (sort_column);
+ ColumnController.SortColumn = sort_column;
+ IsReorderable = sortable.SortColumn == null || sortable.SortColumn.SortType == SortType.None;
+
+ Model.Reload ();
+ CenterOnSelection ();
+ RecalculateColumnSizes ();
+ RegenerateColumnCache ();
+ InvalidateHeader ();
+ }
+ }
+
+ protected virtual void OnColumnRightClicked (Column clickedColumn, int x, int y)
+ {
+ Column [] columns = ColumnController.ToArray ();
+ Array.Sort (columns, delegate (Column a, Column b) {
+ // Fully qualified type name to avoid Mono 1.2.4 bug
+ return System.String.Compare (a.Title, b.Title);
+ });
+
+ uint items = 0;
+
+ for (int i = 0; i < columns.Length; i++) {
+ if (columns[i].Id != null) {
+ items++;
+ }
+ }
+
+ uint max_items_per_column = 15;
+ if (items >= max_items_per_column * 2) {
+ max_items_per_column = (uint)Math.Ceiling (items / 3.0);
+ } else if (items >= max_items_per_column) {
+ max_items_per_column = (uint)Math.Ceiling (items / 2.0);
+ }
+
+ uint column_count = (uint)Math.Ceiling (items / (double)max_items_per_column);
+
+ Menu menu = new Menu ();
+ uint row_offset = 2;
+
+ if (clickedColumn.Id != null) { // FIXME: Also restrict if the column vis can't be changed
+ menu.Attach (new ColumnHideMenuItem (clickedColumn), 0, column_count, 0, 1);
+ menu.Attach (new SeparatorMenuItem (), 0, column_count, 1, 2);
+ }
+
+ items = 0;
+
+ for (uint i = 0, n = (uint)columns.Length, column = 0, row = 0; i < n; i++) {
+ if (columns[i].Id == null) {
+ continue;
+ }
+
+ row = items++ % max_items_per_column;
+
+ menu.Attach (new ColumnToggleMenuItem (columns[i]),
+ column, column + 1, row + row_offset, row + 1 + row_offset);
+
+ if (row == max_items_per_column - 1) {
+ column++;
+ }
+ }
+
+ menu.ShowAll ();
+ menu.Popup (null, null, delegate (Menu popup, out int pos_x, out int pos_y, out bool push_in) {
+ int win_x, win_y;
+ GdkWindow.GetOrigin (out win_x, out win_y);
+
+ pos_x = win_x + x;
+ pos_y = win_y + y;
+ push_in = true;
+ }, 3, Gtk.Global.CurrentEventTime);
+ }
+
+ private void ResizeColumn (double x)
+ {
+ CachedColumn resizing_column = column_cache[resizing_column_index];
+ double resize_delta = x - resizing_column.ResizeX2;
+
+ // If this column cannot be resized, check the columns to the left.
+ int real_resizing_column_index = resizing_column_index;
+ while (resizing_column.MinWidth == resizing_column.MaxWidth) {
+ if (real_resizing_column_index == 0) {
+ return;
+ }
+ resizing_column = column_cache[--real_resizing_column_index];
+ }
+
+ // Make sure the resize_delta won't make us smaller than the min
+ if (resizing_column.Width + resize_delta < resizing_column.MinWidth) {
+ resize_delta = resizing_column.MinWidth - resizing_column.Width;
+ }
+
+ // Make sure the resize_delta won't make us bigger than the max
+ if (resizing_column.Width + resize_delta > resizing_column.MaxWidth) {
+ resize_delta = resizing_column.MaxWidth - resizing_column.Width;
+ }
+
+ if (resize_delta == 0) {
+ return;
+ }
+
+ int sign = Math.Sign (resize_delta);
+ resize_delta = Math.Abs (resize_delta);
+ double total_elastic_width = 0.0;
+
+ for (int i = real_resizing_column_index + 1; i < column_cache.Length; i++) {
+ total_elastic_width += column_cache[i].ElasticWidth = sign == 1
+ ? column_cache[i].Width - column_cache[i].MinWidth
+ : column_cache[i].MaxWidth - column_cache[i].Width;
+ }
+
+ if (total_elastic_width == 0) {
+ return;
+ }
+
+ if (resize_delta > total_elastic_width) {
+ resize_delta = total_elastic_width;
+ }
+
+ // Convert to a proprotional width
+ resize_delta = sign * resize_delta / (double)header_width;
+
+ for (int i = real_resizing_column_index + 1; i < column_cache.Length; i++) {
+ column_cache[i].Column.Width += -resize_delta * (column_cache[i].ElasticWidth / total_elastic_width);
+ }
+
+ resizing_column.Column.Width += resize_delta;
+
+ RegenerateColumnCache ();
+ QueueDraw ();
+ }
+
+ private Column GetColumnForResizeHandle (int x)
+ {
+ if (column_cache == null || !resizable) {
+ return null;
+ }
+
+ x += HadjustmentValue;
+
+ for (int i = 0; i < column_cache.Length - 1; i++) {
+ if (x < column_cache[i].ResizeX1 - 2) {
+ // No point in checking other columns since their ResizeX1 are even larger
+ break;
+ } else if (x <= column_cache[i].ResizeX2 + 2 && CanResizeColumn (i)) {
+ return column_cache[i].Column;
+ }
+ }
+
+ return null;
+ }
+
+ protected int GetColumnWidth (int column_index)
+ {
+ CachedColumn cached_column = column_cache[column_index];
+ return cached_column.Width;
+ }
+
+ private bool CanResizeColumn (int column_index)
+ {
+ // At least one column to the left (including the one being resized) should be resizable.
+ bool found = false;
+ for (int i = column_index; i >= 0 ; i--) {
+ if (column_cache[i].Column.MaxWidth != column_cache[i].Column.MinWidth) {
+ found = true;
+ break;
+ }
+ }
+
+ if (!found) {
+ return false;
+ }
+
+ // At least one column to the right should be resizable as well.
+ for (int i = column_index + 1; i < column_cache.Length; i++) {
+ if (column_cache[i].Column.MaxWidth != column_cache[i].Column.MinWidth) {
+ return true;
+ }
+ }
+
+ return false;
+ }
+
+ private Column GetColumnAt (int x)
+ {
+ if (column_cache == null) {
+ return null;
+ }
+
+ x += HadjustmentValue;
+
+ foreach (CachedColumn column in column_cache) {
+ if (x >= column.X1 && x <= column.X2) {
+ return column.Column;
+ }
+ }
+
+ return null;
+ }
+
+ private CachedColumn GetCachedColumnForColumn (Column col)
+ {
+ foreach (CachedColumn ca_col in column_cache) {
+ if (ca_col.Column == col) {
+ return ca_col;
+ }
+ }
+
+ return CachedColumn.Zero;
+ }
+
+ private ColumnController column_controller;
+ public ColumnController ColumnController {
+ get { return column_controller; }
+ set {
+ if (column_controller == value) {
+ return;
+ }
+
+ if (column_controller != null) {
+ column_controller.Updated -= OnColumnControllerUpdatedHandler;
+ }
+
+ column_controller = value;
+
+ OnColumnControllerUpdated ();
+
+ if (column_controller != null) {
+ column_controller.Updated += OnColumnControllerUpdatedHandler;
+ }
+ }
+ }
+
+#endregion
+
+#region Header
+
+ private int header_height = 0;
+ private int HeaderHeight {
+ get {
+ // FIXME: ViewLayout should have the header info and never be null
+ if (!header_visible || ViewLayout != null) {
+ return 0;
+ }
+
+ if (header_height == 0) {
+ int w;
+ int h;
+ column_layout.SetText ("W");
+ column_layout.GetPixelSize (out w, out h);
+ header_height = h;
+ header_height += 10;
+ }
+
+ return header_height;
+ }
+ }
+
+ private bool header_visible = true;
+ public bool HeaderVisible {
+ get { return header_visible; }
+ set {
+ header_visible = value;
+ MoveResize (Allocation);
+ }
+ }
+
+#endregion
+
+#region Gtk.MenuItem Wrappers for the column context menu
+
+ private class ColumnToggleMenuItem : CheckMenuItem
+ {
+ private Column column;
+ private bool ready = false;
+ private Label label;
+
+ public ColumnToggleMenuItem (Column column) : base ()
+ {
+ this.column = column;
+ Active = column.Visible;
+ ready = true;
+
+ label = new Label ();
+ label.Xalign = 0.0f;
+ label.Text = column.LongTitle ?? String.Empty;
+ label.Show ();
+
+ Add (label);
+ }
+
+ protected override void OnStyleSet (Style previousStyle)
+ {
+ base.OnStyleSet (previousStyle);
+ label.ModifyFg (StateType.Prelight, Style.Foreground (StateType.Selected));
+ }
+
+ protected override void OnActivated ()
+ {
+ base.OnActivated ();
+
+ if (!ready) {
+ return;
+ }
+
+ column.Visible = Active;
+ }
+ }
+
+ private class ColumnHideMenuItem : ImageMenuItem
+ {
+ private Column column;
+ private Label label;
+
+ public ColumnHideMenuItem (Column column) : base ()
+ {
+ this.column = column;
+ this.Image = new Image (Stock.Remove, IconSize.Menu);
+
+ label = new Label ();
+ label.Xalign = 0.0f;
+ label.Markup = String.Format (Catalog.GetString ("Hide <i>{0}</i>"),
+ GLib.Markup.EscapeText (column.LongTitle));
+ label.Show ();
+
+ Add (label);
+ }
+
+ protected override void OnStyleSet (Style previousStyle)
+ {
+ base.OnStyleSet (previousStyle);
+ label.ModifyFg (StateType.Prelight, Style.Foreground (StateType.Selected));
+ }
+
+ protected override void OnActivated ()
+ {
+ column.Visible = false;
+ }
+ }
+
+#endregion
+
+ }
+}
diff --git a/lib/Hyena/src/Hyena.Gui/Hyena.Data.Gui/ListView/ListView_Interaction.cs b/lib/Hyena/src/Hyena.Gui/Hyena.Data.Gui/ListView/ListView_Interaction.cs
new file mode 100644
index 0000000..adc1df7
--- /dev/null
+++ b/lib/Hyena/src/Hyena.Gui/Hyena.Data.Gui/ListView/ListView_Interaction.cs
@@ -0,0 +1,1038 @@
+//
+// ListView_Interaction.cs
+//
+// Authors:
+// Aaron Bockover <abockover at novell.com>
+// Gabriel Burt <gburt at novell.com>
+// Eitan Isaacson <eitan at ascender.com>
+//
+// Copyright (C) 2007-2009 Novell, Inc.
+// Copyright (C) 2009 Eitan Isaacson
+//
+// Permission is hereby granted, free of charge, to any person obtaining
+// a copy of this software and associated documentation files (the
+// "Software"), to deal in the Software without restriction, including
+// without limitation the rights to use, copy, modify, merge, publish,
+// distribute, sublicense, and/or sell copies of the Software, and to
+// permit persons to whom the Software is furnished to do so, subject to
+// the following conditions:
+//
+// The above copyright notice and this permission notice shall be
+// included in all copies or substantial portions of the Software.
+//
+// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
+// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
+// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
+// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+//
+
+using System;
+using Gtk;
+
+using Hyena.Collections;
+using Hyena.Gui.Canvas;
+using Selection = Hyena.Collections.Selection;
+
+namespace Hyena.Data.Gui
+{
+ public partial class ListView<T> : ListViewBase
+ {
+ private bool header_focused = false;
+ public bool HeaderFocused {
+ get { return header_focused; }
+ set {
+ header_focused = value;
+ InvalidateHeader ();
+ InvalidateList ();
+ }
+ }
+
+ #pragma warning disable 0067
+ public event EventHandler ActiveColumnChanged;
+ #pragma warning restore 0067
+
+ private int active_column = 0;
+ public int ActiveColumn {
+ get { return active_column; }
+ set {
+ active_column = value;
+ var handler = ActiveColumnChanged;
+ if (handler != null) {
+ handler (this, EventArgs.Empty);
+ }
+ }
+ }
+
+ private Adjustment vadjustment;
+ public Adjustment Vadjustment {
+ get { return vadjustment; }
+ }
+
+ private Adjustment hadjustment;
+ public Adjustment Hadjustment {
+ get { return hadjustment; }
+ }
+
+ private SelectionProxy selection_proxy = new SelectionProxy ();
+ public SelectionProxy SelectionProxy {
+ get { return selection_proxy; }
+ }
+
+ public Selection Selection {
+ get { return model == null ? null : model.Selection; }
+ }
+
+ private int HadjustmentValue {
+ get { return hadjustment == null ? 0 : (int)hadjustment.Value; }
+ }
+
+ private int VadjustmentValue {
+ get { return vadjustment == null ? 0 : (int)vadjustment.Value; }
+ }
+
+ public event RowActivatedHandler<T> RowActivated;
+
+#region Row/Selection, Keyboard/Mouse Interaction
+
+ private bool KeyboardScroll (Gdk.ModifierType modifier, int relative_row, bool align_y)
+ {
+ if (Model == null) {
+ return true;
+ }
+
+ int row_limit;
+ if (relative_row < 0) {
+ if (Selection.FocusedIndex == -1) {
+ return false;
+ }
+
+ row_limit = 0;
+ } else {
+ row_limit = Model.Count - 1;
+ }
+
+ if (Selection.FocusedIndex == row_limit) {
+ return true;
+ }
+
+ int row_index = Math.Min (Model.Count - 1, Math.Max (0, Selection.FocusedIndex + relative_row));
+
+ if (Selection != null) {
+ if ((modifier & Gdk.ModifierType.ControlMask) != 0) {
+ // Don't change the selection
+ } else if ((modifier & Gdk.ModifierType.ShiftMask) != 0) {
+ // Behave like nautilus: if and arrow key + shift is pressed and the currently focused item
+ // is not selected, select it and don't move the focus or vadjustment.
+ // Otherwise, select the new row and scroll etc as necessary.
+ if (relative_row * relative_row != 1) {
+ Selection.SelectFromFirst (row_index, true);
+ } else if (Selection.Contains (Selection.FocusedIndex)) {
+ Selection.SelectFromFirst (row_index, true);
+ } else {
+ Selection.Select (Selection.FocusedIndex);
+ return true;
+ }
+ } else {
+ Selection.Clear (false);
+ Selection.Select (row_index);
+ }
+ }
+
+ // Scroll if needed
+ double y_at_row = GetViewPointForModelRow (row_index).Y;
+ if (align_y) {
+ if (y_at_row < VadjustmentValue) {
+ ScrollToY (y_at_row);
+ } else if (vadjustment != null) {
+ var bottom_of_item = y_at_row + ChildSize.Height;
+ var bottom_of_view = vadjustment.Value + vadjustment.PageSize;
+ if (bottom_of_item > bottom_of_view) {
+ // Scroll down just enough to put the item fully into view
+ ScrollToY (bottom_of_item - (vadjustment.PageSize));
+ }
+ }
+ } else if (vadjustment != null) {
+ ScrollToY (vadjustment.Value + y_at_row - GetViewPointForModelRow (Selection.FocusedIndex).Y);
+ }
+
+ Selection.FocusedIndex = row_index;
+ InvalidateList ();
+ return true;
+ }
+
+ protected override bool OnKeyPressEvent (Gdk.EventKey press)
+ {
+ bool handled = false;
+ // FIXME: hard-coded grid logic here...
+ bool grid = ViewLayout != null;
+ int items_per_row = grid ? (ViewLayout as DataViewLayoutGrid).Columns : 1;
+
+ switch (press.Key) {
+ case Gdk.Key.a:
+ if ((press.State & Gdk.ModifierType.ControlMask) != 0 && Model.Count > 0) {
+ SelectionProxy.Selection.SelectAll ();
+ handled = true;
+ }
+ break;
+
+ case Gdk.Key.A:
+ if ((press.State & Gdk.ModifierType.ControlMask) != 0 && Selection.Count > 0) {
+ SelectionProxy.Selection.Clear ();
+ handled = true;
+ }
+ break;
+
+ case Gdk.Key.k:
+ case Gdk.Key.K:
+ case Gdk.Key.Up:
+ case Gdk.Key.KP_Up:
+ if (!HeaderFocused) {
+ handled = KeyboardScroll (press.State, -items_per_row, true);
+ }
+ break;
+
+ case Gdk.Key.j:
+ case Gdk.Key.J:
+ case Gdk.Key.Down:
+ case Gdk.Key.KP_Down:
+ if (!HeaderFocused) {
+ handled = KeyboardScroll (press.State, items_per_row, true);
+ } else {
+ handled = true;
+ HeaderFocused = false;
+ }
+ break;
+ case Gdk.Key.Right:
+ case Gdk.Key.KP_Right:
+ handled = true;
+ if (grid && !HeaderFocused) {
+ handled = KeyboardScroll (press.State, 1, true);
+ } else if (ActiveColumn + 1 < column_cache.Length) {
+ ActiveColumn++;
+ InvalidateHeader ();
+ }
+ break;
+ case Gdk.Key.Left:
+ case Gdk.Key.KP_Left:
+ handled = true;
+ if (grid && !HeaderFocused) {
+ handled = KeyboardScroll (press.State, -1, true);
+ } else if (ActiveColumn - 1 >= 0) {
+ ActiveColumn--;
+ InvalidateHeader ();
+ }
+ break;
+ case Gdk.Key.Page_Up:
+ case Gdk.Key.KP_Page_Up:
+ if (!HeaderFocused)
+ handled = vadjustment != null && KeyboardScroll (press.State,
+ (int)(-vadjustment.PageIncrement / (double)ChildSize.Height) * items_per_row, false);
+ break;
+
+ case Gdk.Key.Page_Down:
+ case Gdk.Key.KP_Page_Down:
+ if (!HeaderFocused)
+ handled = vadjustment != null && KeyboardScroll (press.State,
+ (int)(vadjustment.PageIncrement / (double)ChildSize.Height) * items_per_row, false);
+ break;
+
+ case Gdk.Key.Home:
+ case Gdk.Key.KP_Home:
+ if (!HeaderFocused)
+ handled = KeyboardScroll (press.State, -10000000, true);
+ break;
+
+ case Gdk.Key.End:
+ case Gdk.Key.KP_End:
+ if (!HeaderFocused)
+ handled = KeyboardScroll (press.State, 10000000, true);
+ break;
+
+ case Gdk.Key.Return:
+ case Gdk.Key.KP_Enter:
+ if (!HeaderFocused) {
+ handled = ActivateSelection ();
+ } else if (HeaderFocused && ActiveColumn >= 0) {
+ OnColumnLeftClicked (
+ column_cache[ActiveColumn].Column);
+ handled = true;
+ }
+ break;
+
+ case Gdk.Key.Escape:
+ handled = CancelColumnDrag ();
+ break;
+
+ case Gdk.Key.space:
+ if (Selection != null && Selection.FocusedIndex != 1 &&
+ !HeaderFocused) {
+ Selection.ToggleSelect (Selection.FocusedIndex);
+ handled = true;
+ }
+ break;
+
+ case Gdk.Key.F10:
+ if ((press.State & Gdk.ModifierType.ShiftMask) != 0)
+ goto case Gdk.Key.Menu;
+ break;
+
+ case Gdk.Key.Menu:
+ // OnPopupMenu() is reserved for list items in derived classes.
+ if (HeaderFocused) {
+ InvokeColumnHeaderMenu (ActiveColumn);
+ handled = true;
+ }
+ break;
+ }
+
+ if (handled) {
+ return true;
+ }
+
+ return base.OnKeyPressEvent (press);
+ }
+
+ protected bool ActivateSelection ()
+ {
+ if (Selection != null && Selection.FocusedIndex != -1) {
+ Selection.Clear (false);
+ Selection.Select (Selection.FocusedIndex);
+ OnRowActivated ();
+ return true;
+ }
+ return false;
+ }
+
+#region DataViewLayout Interaction Events
+
+ private DataViewChild last_layout_child;
+
+ private bool LayoutChildHandlesEvent (Gdk.Event evnt, bool press)
+ {
+ if (ViewLayout == null) {
+ return false;
+ }
+
+ var point = new Point (0, 0);
+ bool handled = false;
+
+ var evnt_button = evnt as Gdk.EventButton;
+ var evnt_motion = evnt as Gdk.EventMotion;
+
+ if (evnt_motion != null) {
+ point = new Point (evnt_motion.X, evnt_motion.Y);
+ } else if (evnt_button != null) {
+ point = new Point (evnt_button.X, evnt_button.Y);
+ } else if (evnt is Gdk.EventCrossing && last_layout_child != null) {
+ last_layout_child.CursorLeaveEvent ();
+ last_layout_child = null;
+ return false;
+ }
+
+ var child = GetLayoutChildAt (point);
+ if (child == null) {
+ return false;
+ }
+
+ point.Offset (-child.VirtualAllocation.X, -child.VirtualAllocation.Y);
+
+ if (evnt_motion != null) {
+ if (last_layout_child != child) {
+ if (last_layout_child != null) {
+ last_layout_child.CursorLeaveEvent ();
+ }
+ last_layout_child = child;
+ child.CursorEnterEvent ();
+ }
+ handled = child.CursorMotionEvent (point);
+ } else if (evnt_button != null) {
+ handled = child.ButtonEvent (point, press, evnt_button.Button);
+ }
+
+ return handled;
+ }
+
+ private DataViewChild GetLayoutChildAt (Point point)
+ {
+ point.Offset (-list_interaction_alloc.X, -list_interaction_alloc.Y);
+ return ViewLayout.FindChildAtPoint (point);
+ }
+
+#endregion
+
+#region Cell Event Proxy (FIXME: THIS ENTIRE SECTION IS OBSOLETE YAY YAY YAY!)
+
+ private IInteractiveCell last_icell;
+ private Gdk.Rectangle last_icell_area = Gdk.Rectangle.Zero;
+
+ private void InvalidateLastIcell ()
+ {
+ if (last_icell != null && last_icell.PointerLeaveEvent ()) {
+ QueueDirtyRegion (last_icell_area);
+ last_icell = null;
+ last_icell_area = Gdk.Rectangle.Zero;
+ }
+ }
+
+ private void ProxyEventToCell (Gdk.Event evnt, bool press)
+ {
+ IInteractiveCell icell;
+ Gdk.Rectangle icell_area;
+ bool redraw = ProxyEventToCell (evnt, press, out icell, out icell_area);
+
+ int xoffset = HadjustmentValue;
+ int yoffset = VadjustmentValue;
+
+ if (last_icell_area != icell_area) {
+ if (last_icell != null && last_icell.PointerLeaveEvent ()) {
+ QueueDirtyRegion (new Gdk.Rectangle () {
+ X = last_icell_area.X - xoffset,
+ Y = last_icell_area.Y - yoffset,
+ Width = last_icell_area.Width,
+ Height = last_icell_area.Height
+ });
+ }
+ last_icell = icell;
+ last_icell_area = icell_area;
+ }
+
+ if (redraw) {
+ QueueDirtyRegion (new Gdk.Rectangle () {
+ X = icell_area.X - xoffset,
+ Y = icell_area.Y - yoffset,
+ Width = icell_area.Width,
+ Height = icell_area.Height
+ });
+ }
+ }
+
+ private bool ProxyEventToCell (Gdk.Event evnt, bool press,
+ out IInteractiveCell icell, out Gdk.Rectangle icell_area)
+ {
+ icell = null;
+ icell_area = Gdk.Rectangle.Zero;
+
+ int evnt_x, evnt_y;
+ int x, y, row_index;
+ x = y = row_index = 0;
+
+ var evnt_button = evnt as Gdk.EventButton;
+ var evnt_motion = evnt as Gdk.EventMotion;
+
+ if (evnt_motion != null) {
+ evnt_x = (int)evnt_motion.X;
+ evnt_y = (int)evnt_motion.Y;
+ } else if (evnt_button != null) {
+ evnt_x = (int)evnt_button.X;
+ evnt_y = (int)evnt_button.Y;
+ } else {
+ // Possibly EventCrossing, for the leave event
+ icell = last_icell;
+ return false;
+ }
+
+ Column column;
+ if (!GetEventCell<IInteractiveCell> (evnt_x, evnt_y, out icell, out column, out row_index)) {
+ return false;
+ }
+
+ x = evnt_x - list_interaction_alloc.X;
+ y = evnt_y - list_interaction_alloc.Y;
+
+ // Turn the view-absolute coordinates into cell-relative coordinates
+ CachedColumn cached_column = GetCachedColumnForColumn (column);
+ x -= cached_column.X1 - HadjustmentValue;
+ int page_offset = VadjustmentValue % ChildSize.Height;
+ y = (y + page_offset) % ChildSize.Height;
+
+ var view_point = GetViewPointForModelRow (row_index);
+ icell_area.Y = (int)view_point.Y + list_interaction_alloc.Y + Allocation.Y;
+ icell_area.X = cached_column.X1 + Allocation.X;
+ icell_area.Width = cached_column.Width;
+ icell_area.Height = ChildSize.Height;
+
+ // Send the cell a synthesized input event
+ if (evnt_motion != null) {
+ return icell.MotionEvent (x, y, evnt_motion);
+ } else {
+ return icell.ButtonEvent (x, y, press, evnt_button);
+ }
+ }
+
+ #pragma warning disable 0169
+
+ private bool GetEventCell<G> (int x, int y, out G icell, out Column column, out int row_index) where G : class
+ {
+ icell = null;
+ column = null;
+ row_index = 0;
+
+ if (Model == null) {
+ return false;
+ }
+
+ x -= list_interaction_alloc.X;
+ y -= list_interaction_alloc.Y;
+
+ row_index = GetModelRowAt (x, y);
+ if (row_index < 0 || row_index >= Model.Count) {
+ return false;
+ }
+
+ column = GetColumnAt (x);
+ if (column == null) {
+ return false;
+ }
+
+ ColumnCell cell = column.GetCell (0);
+ icell = cell as G;
+ if (icell == null) {
+ return false;
+ }
+
+ // Bind the row to the cell
+ cell.BindListItem (model[row_index]);
+ return true;
+ }
+
+ #pragma warning restore 0169
+
+#endregion
+
+#region OnButtonPress
+
+ protected override bool OnButtonPressEvent (Gdk.EventButton evnt)
+ {
+ HasFocus = true;
+ if (header_visible && header_interaction_alloc.Contains ((int)evnt.X, (int)evnt.Y)) {
+ HeaderFocused = true;
+ return OnHeaderButtonPressEvent (evnt);
+ } else if (list_interaction_alloc.Contains ((int)evnt.X, (int)evnt.Y) && model != null) {
+ HeaderFocused = false;
+ return OnListButtonPressEvent (evnt);
+ }
+ return true;
+ }
+
+ private bool OnHeaderButtonPressEvent (Gdk.EventButton evnt)
+ {
+ int x = (int)evnt.X - header_interaction_alloc.X;
+ int y = (int)evnt.Y - header_interaction_alloc.Y;
+
+ if (evnt.Button == 3 && ColumnController.EnableColumnMenu) {
+ Column menu_column = GetColumnAt (x);
+ if (menu_column != null) {
+ OnColumnRightClicked (menu_column, x + Allocation.X, y + Allocation.Y);
+ }
+ return true;
+ } else if (evnt.Button != 1) {
+ return true;
+ }
+
+ Gtk.Drag.SourceUnset (this);
+
+ Column column = GetColumnForResizeHandle (x);
+ if (column != null) {
+ resizing_column_index = GetCachedColumnForColumn (column).Index;
+ } else {
+ column = GetColumnAt (x);
+ if (column != null) {
+ CachedColumn column_c = GetCachedColumnForColumn (column);
+ pressed_column_index = column_c.Index;
+ pressed_column_x_start = x;
+ pressed_column_x_offset = pressed_column_x_start - column_c.X1;
+ pressed_column_x_start_hadjustment = HadjustmentValue;
+ }
+ }
+
+ return true;
+ }
+
+ private bool OnListButtonPressEvent (Gdk.EventButton evnt)
+ {
+ if (Model == null) {
+ return true;
+ }
+
+ int x = (int)evnt.X - list_interaction_alloc.X;
+ int y = (int)evnt.Y - list_interaction_alloc.Y;
+
+ GrabFocus ();
+
+ int row_index = GetModelRowAt (x, y);
+
+ if (row_index < 0 || row_index >= Model.Count) {
+ Gtk.Drag.SourceUnset (this);
+ return true;
+ }
+
+ if (LayoutChildHandlesEvent (evnt, true)) {
+ return true;
+ }
+
+ ProxyEventToCell (evnt, true);
+
+ object item = model[row_index];
+ if (item == null) {
+ return true;
+ }
+
+ if (evnt.Button == 1 && evnt.Type == Gdk.EventType.TwoButtonPress) {
+ // Double clicked
+ OnRowActivated ();
+ } else if (Selection != null) {
+ if ((evnt.State & Gdk.ModifierType.ControlMask) != 0) {
+ if (evnt.Button == 3) {
+ // Right clicked with ctrl pressed, so make sure row selected
+ if (!Selection.Contains (row_index)) {
+ Selection.Select (row_index);
+ }
+ } else {
+ // Normal ctrl-click, so toggle
+ Selection.ToggleSelect (row_index);
+ }
+ } else if ((evnt.State & Gdk.ModifierType.ShiftMask) != 0) {
+ // Shift-click, so select from first-row-selected (if any) to the current row
+ Selection.SelectFromFirst (row_index, true);
+ } else {
+ if (evnt.Button == 3) {
+ // Normal right-click, make sure row is only row selected
+ if (!Selection.Contains (row_index)) {
+ Selection.Clear (false);
+ Selection.Select (row_index);
+ }
+ } else {
+ // Normal click, if row not already selected, select only it right now,
+ // but if it's already selected, wait until the Release to unselect any others so that
+ // drag and drop of 2+ items works.
+ if (!Selection.Contains (row_index)) {
+ Selection.Clear (false);
+ Selection.Select (row_index);
+ }
+ }
+ }
+
+ FocusModelRow (row_index);
+
+ // Now that we've worked out the selections, open the context menu
+ if (evnt.Button == 3) {
+ OnPopupMenu ();
+ }
+ }
+
+ InvalidateList ();
+ return true;
+ }
+
+#endregion
+
+#region OnButtonRelease
+
+ protected override bool OnButtonReleaseEvent (Gdk.EventButton evnt)
+ {
+ OnDragSourceSet ();
+ StopDragScroll ();
+
+ if (resizing_column_index >= 0) {
+ pressed_column_index = -1;
+ resizing_column_index = -1;
+ GdkWindow.Cursor = null;
+ return true;
+ }
+
+ if (pressed_column_drag_started) {
+ CancelColumnDrag ();
+ pressed_column_drag_started = false;
+ return true;
+ }
+
+ if (header_visible && header_interaction_alloc.Contains ((int)evnt.X, (int)evnt.Y)) {
+ return OnHeaderButtonRelease (evnt);
+ } else if (list_interaction_alloc.Contains ((int)evnt.X, (int)evnt.Y) && model != null &&
+ (evnt.State & (Gdk.ModifierType.ShiftMask | Gdk.ModifierType.ControlMask)) == 0) {
+ if (LayoutChildHandlesEvent (evnt, false)) {
+ return true;
+ }
+ ProxyEventToCell (evnt, false);
+ return OnListButtonRelease (evnt);
+ }
+
+ return true;
+ }
+
+ private bool OnHeaderButtonRelease (Gdk.EventButton evnt)
+ {
+ if (pressed_column_index >= 0 && pressed_column_index < column_cache.Length) {
+ Column column = column_cache[pressed_column_index].Column;
+ ActiveColumn = pressed_column_index;
+ if (column != null)
+ OnColumnLeftClicked (column);
+
+ pressed_column_index = -1;
+ return true;
+ } else {
+ return false;
+ }
+ }
+
+ private bool OnListButtonRelease (Gdk.EventButton evnt)
+ {
+ if (Model == null) {
+ return true;
+ }
+
+ int x = (int)evnt.X - list_interaction_alloc.X;
+ int y = (int)evnt.Y - list_interaction_alloc.Y;
+
+ GrabFocus ();
+
+ int row_index = GetModelRowAt (x, y);
+
+ if (row_index >= Model.Count) {
+ return true;
+ }
+
+ object item = model[row_index];
+ if (item == null) {
+ return true;
+ }
+
+ //if (Selection != null && Selection.Contains (row_index) && Selection.Count > 1) {
+ if (Selection != null && evnt.Button == 1 && Hyena.Gui.GtkUtilities.NoImportantModifiersAreSet ()) {
+ if (Selection.Count > 1) {
+ Selection.Clear (false);
+ Selection.Select (row_index);
+ FocusModelRow (row_index);
+ InvalidateList ();
+ }
+ }
+
+ return true;
+ }
+
+#endregion
+
+ protected override bool OnMotionNotifyEvent (Gdk.EventMotion evnt)
+ {
+ int x = (int)evnt.X - header_interaction_alloc.X;
+
+ if (pressed_column_index >= 0 && !pressed_column_is_dragging &&
+ Gtk.Drag.CheckThreshold (this, pressed_column_x_start, 0, x, 0)) {
+ pressed_column_is_dragging = true;
+ pressed_column_drag_started = true;
+ InvalidateHeader ();
+ InvalidateList ();
+ }
+
+ pressed_column_x = x;
+
+ if (OnMotionNotifyEvent (x)) {
+ return true;
+ }
+
+ GdkWindow.Cursor = header_interaction_alloc.Contains ((int)evnt.X, (int)evnt.Y) &&
+ (resizing_column_index >= 0 || GetColumnForResizeHandle (x) != null)
+ ? resize_x_cursor
+ : null;
+
+ if (resizing_column_index >= 0) {
+ ResizeColumn (x);
+ }
+
+ if (LayoutChildHandlesEvent (evnt, false)) {
+ return true;
+ }
+
+ ProxyEventToCell (evnt, false);
+
+ return true;
+ }
+
+ private bool OnMotionNotifyEvent (int x)
+ {
+ if (!pressed_column_is_dragging) {
+ return false;
+ }
+
+ OnDragScroll (OnDragHScrollTimeout, header_interaction_alloc.Width * 0.1, header_interaction_alloc.Width, x);
+
+ GdkWindow.Cursor = drag_cursor;
+
+ Column swap_column = GetColumnAt (x);
+
+ if (swap_column != null) {
+ CachedColumn swap_column_c = GetCachedColumnForColumn (swap_column);
+ bool reorder = false;
+
+ if (swap_column_c.Index < pressed_column_index) {
+ // Moving from right to left
+ reorder = pressed_column_x_drag <= swap_column_c.X1 + swap_column_c.Width / 2;
+ } else if (swap_column_c.Index > pressed_column_index) {
+ if (column_cache.Length > pressed_column_index && pressed_column_index >= 0) {
+ // Moving from left to right
+ reorder = pressed_column_x_drag + column_cache[pressed_column_index].Width >=
+ swap_column_c.X1 + swap_column_c.Width / 2;
+ }
+ }
+
+ if (reorder) {
+ int actual_pressed_index = ColumnController.IndexOf (column_cache[pressed_column_index].Column);
+ int actual_swap_index = ColumnController.IndexOf (swap_column_c.Column);
+ ColumnController.Reorder (actual_pressed_index, actual_swap_index);
+ pressed_column_index = swap_column_c.Index;
+ RegenerateColumnCache ();
+ }
+ }
+
+ pressed_column_x_drag = x - pressed_column_x_offset - (pressed_column_x_start_hadjustment - HadjustmentValue);
+
+ QueueDraw ();
+ return true;
+ }
+
+ private bool OnDragHScrollTimeout ()
+ {
+ ScrollToY (hadjustment, HadjustmentValue + (drag_scroll_velocity * drag_scroll_velocity_max));
+ OnMotionNotifyEvent (pressed_column_x);
+ return true;
+ }
+
+ protected override bool OnLeaveNotifyEvent (Gdk.EventCrossing evnt)
+ {
+ if (evnt.Mode == Gdk.CrossingMode.Normal) {
+ GdkWindow.Cursor = null;
+ if (LayoutChildHandlesEvent (evnt, false)) {
+ return true;
+ }
+ ProxyEventToCell (evnt, false);
+ }
+ return base.OnLeaveNotifyEvent (evnt);
+ }
+
+ protected override bool OnFocused (Gtk.DirectionType directionType)
+ {
+ if (!HeaderVisible)
+ return base.OnFocused (directionType);
+
+ if (HasFocus) {
+ if (directionType == DirectionType.TabForward && HeaderFocused)
+ HeaderFocused = false;
+ else if (directionType == DirectionType.TabBackward && !HeaderFocused)
+ HeaderFocused = true;
+ else
+ return base.OnFocused (directionType);
+
+ return true;
+ } else {
+ if (directionType == DirectionType.TabForward )
+ HeaderFocused = true;
+ else if (directionType == DirectionType.TabBackward)
+ HeaderFocused = false;
+
+ return base.OnFocused (directionType);
+ }
+ }
+
+ protected virtual void OnRowActivated ()
+ {
+ if (Selection.FocusedIndex != -1) {
+ RowActivatedHandler<T> handler = RowActivated;
+ if (handler != null) {
+ handler (this, new RowActivatedArgs<T> (Selection.FocusedIndex, model[Selection.FocusedIndex]));
+ }
+ }
+ }
+
+ private bool CancelColumnDrag ()
+ {
+ if (pressed_column_index >= 0 && pressed_column_is_dragging) {
+ pressed_column_is_dragging = false;
+ pressed_column_index = -1;
+ GdkWindow.Cursor = null;
+ QueueDirtyRegion ();
+ return true;
+ }
+ return false;
+ }
+
+ // FIXME: replace all invocations with direct call to ViewLayout
+ protected int GetModelRowAt (int x, int y)
+ {
+ if (ViewLayout != null) {
+ var child = ViewLayout.FindChildAtPoint (new Point (x, y));
+ return child == null ? -1 : child.ModelRowIndex;
+ } else {
+ if (y < 0 || ChildSize.Height <= 0) {
+ return -1;
+ }
+
+ int v_page_offset = VadjustmentValue % ChildSize.Height;
+ int first_row = VadjustmentValue / ChildSize.Height;
+ int row_offset = (y + v_page_offset) / ChildSize.Height;
+ return first_row + row_offset;
+ }
+ }
+
+ protected Gdk.Point GetViewPointForModelRow (int row)
+ {
+ // FIXME: hard-coded grid logic
+ if (ViewLayout != null) {
+ int cols = ((DataViewLayoutGrid)ViewLayout).Columns;
+ if (cols == 0 || row == 0) {
+ return new Gdk.Point (0, 0);
+ } else {
+ return new Gdk.Point ((row % cols) * ChildSize.Width, (int)(Math.Floor ((double)row / (double)cols) * ChildSize.Height));
+ }
+ } else {
+ return new Gdk.Point (0, ChildSize.Height * row);
+ }
+ }
+
+ private void FocusModelRow (int index)
+ {
+ Selection.FocusedIndex = index;
+ }
+
+#endregion
+
+#region Adjustments & Scrolling
+
+ private void UpdateAdjustments ()
+ {
+ UpdateAdjustments (null, null);
+ }
+
+ private void UpdateAdjustments (Adjustment hadj, Adjustment vadj)
+ {
+ if (hadj != null) {
+ hadjustment = hadj;
+ }
+
+ if (vadj != null) {
+ vadjustment = vadj;
+ }
+
+ // FIXME: with ViewLayout, hadj and vadj should be unified
+ // since the layout will take the header into account...
+ if (hadjustment != null) {
+ hadjustment.Upper = header_width;
+ hadjustment.StepIncrement = 10.0;
+ if (hadjustment.Value + hadjustment.PageSize > hadjustment.Upper) {
+ hadjustment.Value = hadjustment.Upper - hadjustment.PageSize;
+ }
+ }
+
+ if (vadjustment != null && model != null) {
+ // FIXME: hard-coded grid logic
+ if (ViewLayout != null) {
+ vadjustment.Upper = ViewLayout.VirtualSize.Height;
+ vadjustment.StepIncrement = ViewLayout.ChildSize.Height;
+ } else {
+ vadjustment.Upper = ChildSize.Height * model.Count;
+ vadjustment.StepIncrement = ChildSize.Height;
+ }
+
+ if (vadjustment.Value + vadjustment.PageSize > vadjustment.Upper) {
+ vadjustment.Value = vadjustment.Upper - vadjustment.PageSize;
+ }
+ } else if (vadjustment != null) {
+ // model is null
+ vadjustment.Upper = 0;
+ vadjustment.Lower = 0;
+ }
+
+ if (hadjustment != null) {
+ hadjustment.Change ();
+ }
+
+ if (vadjustment != null) {
+ vadjustment.Change ();
+ }
+ }
+
+ private void OnHadjustmentChanged (object o, EventArgs args)
+ {
+ InvalidateLastIcell ();
+ InvalidateHeader ();
+ InvalidateList ();
+
+ if (ViewLayout != null) {
+ ViewLayout.UpdatePosition (HadjustmentValue, VadjustmentValue);
+ }
+ }
+
+ private void OnVadjustmentChanged (object o, EventArgs args)
+ {
+ InvalidateLastIcell ();
+ InvalidateList ();
+
+ if (ViewLayout != null) {
+ ViewLayout.UpdatePosition (HadjustmentValue, VadjustmentValue);
+ }
+ }
+
+ public void ScrollToY (double val)
+ {
+ ScrollToY (vadjustment, val);
+ }
+
+ private void ScrollToY (Adjustment adjustment, double val)
+ {
+ if (adjustment != null) {
+ adjustment.Value = Math.Max (0.0, Math.Min (val, adjustment.Upper - adjustment.PageSize));
+ }
+ }
+
+ public void ScrollTo (int index)
+ {
+ ScrollToY (GetViewPointForModelRow (index).Y);
+ }
+
+ public void CenterOn (int index)
+ {
+ ScrollTo (index - ItemsInView / 2 + 1);
+ }
+
+ public bool IsRowVisible (int index)
+ {
+ double y = GetViewPointForModelRow (index).Y;
+ return vadjustment.Value <= y && y < vadjustment.Value + vadjustment.PageSize;
+ }
+
+ protected void CenterOnSelection ()
+ {
+ if (Selection != null && Selection.Count > 0 && !Selection.AllSelected) {
+ bool selection_in_view = false;
+ int first_row = GetModelRowAt (0, 0);
+ for (int i = 0; i < ItemsInView; i++) {
+ if (Selection.Contains (first_row + i)) {
+ selection_in_view = true;
+ break;
+ }
+ }
+
+ if (!selection_in_view) {
+ CenterOn (Selection.Ranges[0].Start);
+ }
+ }
+ }
+
+ protected override void OnSetScrollAdjustments (Adjustment hadj, Adjustment vadj)
+ {
+ if (hadj == null || vadj == null) {
+ return;
+ }
+
+ hadj.ValueChanged += OnHadjustmentChanged;
+ vadj.ValueChanged += OnVadjustmentChanged;
+
+ UpdateAdjustments (hadj, vadj);
+ }
+
+#endregion
+
+ }
+}
diff --git a/lib/Hyena/src/Hyena.Gui/Hyena.Data.Gui/ListView/ListView_Model.cs b/lib/Hyena/src/Hyena.Gui/Hyena.Data.Gui/ListView/ListView_Model.cs
new file mode 100644
index 0000000..c342f71
--- /dev/null
+++ b/lib/Hyena/src/Hyena.Gui/Hyena.Data.Gui/ListView/ListView_Model.cs
@@ -0,0 +1,229 @@
+//
+// ListView_Model.cs
+//
+// Author:
+// Aaron Bockover <abockover at novell.com>
+//
+// Copyright (C) 2007-2008 Novell, Inc.
+//
+// Permission is hereby granted, free of charge, to any person obtaining
+// a copy of this software and associated documentation files (the
+// "Software"), to deal in the Software without restriction, including
+// without limitation the rights to use, copy, modify, merge, publish,
+// distribute, sublicense, and/or sell copies of the Software, and to
+// permit persons to whom the Software is furnished to do so, subject to
+// the following conditions:
+//
+// The above copyright notice and this permission notice shall be
+// included in all copies or substantial portions of the Software.
+//
+// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
+// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
+// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
+// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+//
+
+using System;
+using System.Reflection;
+
+using Gtk;
+
+namespace Hyena.Data.Gui
+{
+ public partial class ListView<T> : ListViewBase
+ {
+ #pragma warning disable 0067
+ public event EventHandler ModelChanged;
+ public event EventHandler ModelReloaded;
+ #pragma warning restore 0067
+
+ public void SetModel (IListModel<T> model)
+ {
+ SetModel (model, 0.0);
+ }
+
+ public virtual void SetModel (IListModel<T> value, double vpos)
+ {
+ if (model == value) {
+ return;
+ }
+
+ if (model != null) {
+ model.Cleared -= OnModelClearedHandler;
+ model.Reloaded -= OnModelReloadedHandler;
+ }
+
+ model = value;
+
+ if (model != null) {
+ model.Cleared += OnModelClearedHandler;
+ model.Reloaded += OnModelReloadedHandler;
+ selection_proxy.Selection = model.Selection;
+ IsEverReorderable = model.CanReorder;
+ }
+
+ ISortable sortable = model as ISortable;
+ if (sortable != null) {
+ ISortableColumn sort_column = ColumnController.SortColumn ?? ColumnController.DefaultSortColumn;
+ if (sort_column != null) {
+ sortable.Sort (sort_column);
+ RecalculateColumnSizes ();
+ RegenerateColumnCache ();
+ InvalidateHeader ();
+ IsReorderable = sortable.SortColumn == null || sortable.SortColumn.SortType == SortType.None;
+ }
+ }
+
+ if (ViewLayout != null) {
+ ViewLayout.Model = Model;
+ }
+
+ RefreshViewForModel (vpos);
+
+ var handler = ModelChanged;
+ if (handler != null) {
+ handler (this, EventArgs.Empty);
+ }
+ }
+
+ private void RefreshViewForModel (double? vpos)
+ {
+ if (Model == null) {
+ UpdateAdjustments ();
+ QueueDraw ();
+ return;
+ }
+
+ if (ViewLayout != null) {
+ ViewLayout.ModelUpdated ();
+ }
+
+ UpdateAdjustments ();
+
+ if (vpos != null) {
+ ScrollToY ((double) vpos);
+ } else if (Model.Count <= ItemsInView) {
+ // If our view fits all rows at once, make sure we're scrolled to the top
+ ScrollToY (0.0);
+ } else if (vadjustment != null) {
+ ScrollToY (vadjustment.Value);
+ }
+
+ if (Parent is ScrolledWindow) {
+ Parent.QueueDraw ();
+ }
+ }
+
+ private void OnModelClearedHandler (object o, EventArgs args)
+ {
+ OnModelCleared ();
+ }
+
+ private void OnModelReloadedHandler (object o, EventArgs args)
+ {
+ OnModelReloaded ();
+
+ var handler = ModelReloaded;
+ if (handler != null) {
+ handler (this, EventArgs.Empty);
+ }
+ }
+
+ private void OnColumnControllerUpdatedHandler (object o, EventArgs args)
+ {
+ OnColumnControllerUpdated ();
+ }
+
+ protected virtual void OnModelCleared ()
+ {
+ RefreshViewForModel (null);
+ }
+
+ protected virtual void OnModelReloaded ()
+ {
+ RefreshViewForModel (null);
+ }
+
+ private IListModel<T> model;
+ public virtual IListModel<T> Model {
+ get { return model; }
+ }
+
+ private string row_opaque_property_name = "Sensitive";
+ private PropertyInfo row_opaque_property_info;
+ bool row_opaque_property_invalid = false;
+
+ public string RowOpaquePropertyName {
+ get { return row_opaque_property_name; }
+ set {
+ if (value == row_opaque_property_name) {
+ return;
+ }
+
+ row_opaque_property_name = value;
+ row_opaque_property_info = null;
+ row_opaque_property_invalid = false;
+
+ InvalidateList ();
+ }
+ }
+
+ private bool IsRowOpaque (object item)
+ {
+ if (item == null || row_opaque_property_invalid) {
+ return true;
+ }
+
+ if (row_opaque_property_info == null || row_opaque_property_info.ReflectedType != item.GetType ()) {
+ row_opaque_property_info = item.GetType ().GetProperty (row_opaque_property_name);
+ if (row_opaque_property_info == null || row_opaque_property_info.PropertyType != typeof (bool)) {
+ row_opaque_property_info = null;
+ row_opaque_property_invalid = true;
+ return true;
+ }
+ }
+
+ return (bool)row_opaque_property_info.GetValue (item, null);
+ }
+
+ private string row_bold_property_name = "IsBold";
+ private PropertyInfo row_bold_property_info;
+ bool row_bold_property_invalid = false;
+
+ public string RowBoldPropertyName {
+ get { return row_bold_property_name; }
+ set {
+ if (value == row_bold_property_name) {
+ return;
+ }
+
+ row_bold_property_name = value;
+ row_bold_property_info = null;
+ row_bold_property_invalid = false;
+
+ InvalidateList ();
+ }
+ }
+
+ private bool IsRowBold (object item)
+ {
+ if (item == null || row_bold_property_invalid) {
+ return false;
+ }
+
+ if (row_bold_property_info == null || row_bold_property_info.ReflectedType != item.GetType ()) {
+ row_bold_property_info = item.GetType ().GetProperty (row_bold_property_name);
+ if (row_bold_property_info == null || row_bold_property_info.PropertyType != typeof (bool)) {
+ row_bold_property_info = null;
+ row_bold_property_invalid = true;
+ return false;
+ }
+ }
+
+ return (bool)row_bold_property_info.GetValue (item, null);
+ }
+ }
+}
diff --git a/lib/Hyena/src/Hyena.Gui/Hyena.Data.Gui/ListView/ListView_Rendering.cs b/lib/Hyena/src/Hyena.Gui/Hyena.Data.Gui/ListView/ListView_Rendering.cs
new file mode 100644
index 0000000..02ac248
--- /dev/null
+++ b/lib/Hyena/src/Hyena.Gui/Hyena.Data.Gui/ListView/ListView_Rendering.cs
@@ -0,0 +1,597 @@
+//
+// ListView_Rendering.cs
+//
+// Author:
+// Aaron Bockover <abockover at novell.com>
+//
+// Copyright (C) 2007-2008 Novell, Inc.
+//
+// Permission is hereby granted, free of charge, to any person obtaining
+// a copy of this software and associated documentation files (the
+// "Software"), to deal in the Software without restriction, including
+// without limitation the rights to use, copy, modify, merge, publish,
+// distribute, sublicense, and/or sell copies of the Software, and to
+// permit persons to whom the Software is furnished to do so, subject to
+// the following conditions:
+//
+// The above copyright notice and this permission notice shall be
+// included in all copies or substantial portions of the Software.
+//
+// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
+// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
+// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
+// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+//
+
+using System;
+using System.Collections.Generic;
+
+using Gtk;
+using Gdk;
+
+using Hyena.Gui;
+using Hyena.Gui.Theming;
+using Hyena.Gui.Canvas;
+using GtkColorClass=Hyena.Gui.Theming.GtkColorClass;
+
+namespace Hyena.Data.Gui
+{
+ public delegate int ListViewRowHeightHandler (Widget widget);
+
+ public partial class ListView<T> : ListViewBase
+ {
+ private Cairo.Context cairo_context;
+ private CellContext cell_context;
+ private Pango.Layout pango_layout;
+
+ private List<int> selected_rows = new List<int> ();
+
+ private Theme theme;
+ protected Theme Theme {
+ get { return theme; }
+ }
+
+ // Using an auto-property here makes the build fail with mono 1.9.1 (bnc#396633)
+ private bool do_not_render_null_model;
+ public bool DoNotRenderNullModel {
+ get { return do_not_render_null_model; }
+ set { do_not_render_null_model = value; }
+ }
+
+ private bool changing_style = false;
+
+ protected override void OnStyleSet (Style old_style)
+ {
+ if (changing_style) {
+ return;
+ }
+
+ changing_style = true;
+ GtkUtilities.AdaptGtkRcStyle (this, typeof (TreeView));
+ changing_style = false;
+
+ base.OnStyleSet (old_style);
+
+ // FIXME: legacy list foo
+ if (ViewLayout == null) {
+ OnInvalidateMeasure ();
+ }
+
+ theme = Hyena.Gui.Theming.ThemeEngine.CreateTheme (this);
+
+ // Save the drawable so we can reuse it
+ Gdk.Drawable drawable = cell_context != null ? cell_context.Drawable : null;
+
+ if (pango_layout != null) {
+ pango_layout.FontDescription.Dispose ();
+ pango_layout.Dispose ();
+ pango_layout = null;
+ }
+
+ cell_context = new CellContext ();
+ cell_context.Theme = theme;
+ cell_context.Widget = this;
+ cell_context.Drawable = drawable;
+ }
+
+ protected override bool OnExposeEvent (EventExpose evnt)
+ {
+ if (DoNotRenderNullModel && Model == null) {
+ return true;
+ }
+
+ var damage = new Rectangle ();
+ foreach (Rectangle rect in evnt.Region.GetRectangles ()) {
+ damage = damage.Union (rect);
+ }
+
+ cairo_context = CairoHelper.Create (evnt.Window);
+
+ if (pango_layout == null) {
+ pango_layout = CairoExtensions.CreateLayout (this, cairo_context);
+ }
+
+ cell_context.Context = cairo_context;
+ cell_context.Layout = pango_layout;
+
+ // FIXME: legacy list foo
+ if (ViewLayout == null) {
+ OnMeasure ();
+ }
+
+ Theme.DrawFrameBackground (cairo_context, Allocation, true);
+
+ // FIXME: ViewLayout will never be null in the future but we'll need
+ // to deterministically render a header somehow...
+ if (header_visible && ViewLayout == null && column_controller != null) {
+ PaintHeader (damage);
+ }
+
+ if (Model != null) {
+ // FIXME: ViewLayout will never be null in
+ // the future, PaintList will go away
+ if (ViewLayout == null) {
+ PaintList (damage);
+ } else {
+ PaintView ((Rect)damage);
+ }
+ }
+
+ Theme.DrawFrameBorder (cairo_context, Allocation);
+
+ PaintDraggingColumn (damage);
+
+ CairoExtensions.DisposeContext (cairo_context);
+
+ return true;
+ }
+
+#region Header Rendering
+
+ private void PaintHeader (Rectangle clip)
+ {
+ Rectangle rect = header_rendering_alloc;
+ rect.Height += Theme.BorderWidth;
+ clip.Intersect (rect);
+ cairo_context.Rectangle (clip.X, clip.Y, clip.Width, clip.Height);
+ cairo_context.Clip ();
+
+ Theme.DrawHeaderBackground (cairo_context, header_rendering_alloc);
+
+ Rectangle cell_area = new Rectangle ();
+ cell_area.Y = header_rendering_alloc.Y;
+ cell_area.Height = header_rendering_alloc.Height;
+
+ cell_context.Clip = clip;
+ cell_context.Opaque = true;
+ cell_context.TextAsForeground = true;
+
+ bool have_drawn_separator = false;
+
+ for (int ci = 0; ci < column_cache.Length; ci++) {
+ if (pressed_column_is_dragging && pressed_column_index == ci) {
+ continue;
+ }
+
+ cell_area.X = column_cache[ci].X1 + Theme.TotalBorderWidth + header_rendering_alloc.X - HadjustmentValue;
+ cell_area.Width = column_cache[ci].Width;
+ PaintHeaderCell (cell_area, ci, false, ref have_drawn_separator);
+ }
+
+ if (pressed_column_is_dragging && pressed_column_index >= 0) {
+ cell_area.X = pressed_column_x_drag + Allocation.X - HadjustmentValue;
+ cell_area.Width = column_cache[pressed_column_index].Width;
+ PaintHeaderCell (cell_area, pressed_column_index, true, ref have_drawn_separator);
+ }
+
+ cairo_context.ResetClip ();
+ }
+
+ private void PaintHeaderCell (Rectangle area, int ci, bool dragging, ref bool have_drawn_separator)
+ {
+ if (ci < 0 || column_cache.Length <= ci)
+ return;
+
+ if (ci == ActiveColumn && HasFocus && HeaderFocused) {
+ Theme.DrawColumnHeaderFocus (cairo_context, area);
+ }
+
+ if (dragging) {
+ Theme.DrawColumnHighlight (cairo_context, area,
+ CairoExtensions.ColorShade (Theme.Colors.GetWidgetColor (GtkColorClass.Dark, StateType.Normal), 0.9));
+
+ Cairo.Color stroke_color = CairoExtensions.ColorShade (Theme.Colors.GetWidgetColor (
+ GtkColorClass.Base, StateType.Normal), 0.0);
+ stroke_color.A = 0.3;
+
+ cairo_context.Color = stroke_color;
+ cairo_context.MoveTo (area.X + 0.5, area.Y + 1.0);
+ cairo_context.LineTo (area.X + 0.5, area.Bottom);
+ cairo_context.MoveTo (area.Right - 0.5, area.Y + 1.0);
+ cairo_context.LineTo (area.Right - 0.5, area.Bottom);
+ cairo_context.Stroke ();
+ }
+
+ ColumnCell cell = column_cache[ci].Column.HeaderCell;
+
+ if (cell != null) {
+ cairo_context.Save ();
+ cairo_context.Translate (area.X, area.Y);
+ cell_context.Area = area;
+ cell.Render (cell_context, StateType.Normal, area.Width, area.Height);
+ cairo_context.Restore ();
+ }
+
+ if (!dragging && ci < column_cache.Length - 1 && (have_drawn_separator ||
+ column_cache[ci].MaxWidth != column_cache[ci].MinWidth)) {
+ have_drawn_separator = true;
+ Theme.DrawHeaderSeparator (cairo_context, area, area.Right);
+ }
+ }
+
+#endregion
+
+#region List Rendering
+
+ private void PaintList (Rectangle clip)
+ {
+ if (ChildSize.Height <= 0) {
+ return;
+ }
+
+ // TODO factor this out?
+ // Render the sort effect to the GdkWindow.
+ if (sort_column_index != -1 && (!pressed_column_is_dragging || pressed_column_index != sort_column_index)) {
+ CachedColumn col = column_cache[sort_column_index];
+ Theme.DrawRowRule (cairo_context,
+ list_rendering_alloc.X + col.X1 - HadjustmentValue,
+ header_rendering_alloc.Bottom + Theme.BorderWidth,
+ col.Width, list_rendering_alloc.Height + Theme.InnerBorderWidth * 2);
+ }
+
+ clip.Intersect (list_rendering_alloc);
+ cairo_context.Rectangle (clip.X, clip.Y, clip.Width, clip.Height);
+ cairo_context.Clip ();
+
+ cell_context.Clip = clip;
+ cell_context.TextAsForeground = false;
+
+ int vadjustment_value = VadjustmentValue;
+ int first_row = vadjustment_value / ChildSize.Height;
+ int last_row = Math.Min (model.Count, first_row + RowsInView);
+ int offset = list_rendering_alloc.Y - vadjustment_value % ChildSize.Height;
+
+ Rectangle selected_focus_alloc = Rectangle.Zero;
+ Rectangle single_list_alloc = new Rectangle ();
+
+ single_list_alloc.X = list_rendering_alloc.X - HadjustmentValue;
+ single_list_alloc.Y = offset;
+ single_list_alloc.Width = list_rendering_alloc.Width + HadjustmentValue;
+ single_list_alloc.Height = ChildSize.Height;
+
+ int selection_height = 0;
+ int selection_y = 0;
+ selected_rows.Clear ();
+
+ for (int ri = first_row; ri < last_row; ri++) {
+ if (Selection != null && Selection.Contains (ri)) {
+ if (selection_height == 0) {
+ selection_y = single_list_alloc.Y;
+ }
+
+ selection_height += single_list_alloc.Height;
+ selected_rows.Add (ri);
+
+ if (Selection.FocusedIndex == ri) {
+ selected_focus_alloc = single_list_alloc;
+ }
+ } else {
+ if (rules_hint && ri % 2 != 0) {
+ Theme.DrawRowRule (cairo_context, single_list_alloc.X, single_list_alloc.Y,
+ single_list_alloc.Width, single_list_alloc.Height);
+ }
+
+ PaintReorderLine (ri, single_list_alloc);
+
+ if (Selection != null && Selection.FocusedIndex == ri && !Selection.Contains (ri) && HasFocus) {
+ CairoCorners corners = CairoCorners.All;
+
+ if (Selection.Contains (ri - 1)) {
+ corners &= ~(CairoCorners.TopLeft | CairoCorners.TopRight);
+ }
+
+ if (Selection.Contains (ri + 1)) {
+ corners &= ~(CairoCorners.BottomLeft | CairoCorners.BottomRight);
+ }
+
+ if (HasFocus && !HeaderFocused) // Cursor out of selection.
+ Theme.DrawRowCursor (cairo_context, single_list_alloc.X, single_list_alloc.Y,
+ single_list_alloc.Width, single_list_alloc.Height,
+ CairoExtensions.ColorShade (Theme.Colors.GetWidgetColor (GtkColorClass.Background, StateType.Selected), 0.85));
+ }
+
+ if (selection_height > 0) {
+ Cairo.Color selection_color = Theme.Colors.GetWidgetColor (GtkColorClass.Background, StateType.Selected);
+ if (!HasFocus || HeaderFocused)
+ selection_color = CairoExtensions.ColorShade (selection_color, 1.1);
+
+ Theme.DrawRowSelection (cairo_context, list_rendering_alloc.X, selection_y, list_rendering_alloc.Width, selection_height,
+ true, true, selection_color, CairoCorners.All);
+ selection_height = 0;
+ }
+
+ PaintRow (ri, single_list_alloc, StateType.Normal);
+ }
+
+ single_list_alloc.Y += single_list_alloc.Height;
+ }
+
+ // In case the user is dragging to the end of the list
+ PaintReorderLine (last_row, single_list_alloc);
+
+ if (selection_height > 0) {
+ Theme.DrawRowSelection (cairo_context, list_rendering_alloc.X, selection_y,
+ list_rendering_alloc.Width, selection_height);
+ }
+
+ if (Selection != null && Selection.Count > 1 &&
+ !selected_focus_alloc.Equals (Rectangle.Zero) &&
+ HasFocus && !HeaderFocused) { // Cursor inside selection.
+ Theme.DrawRowCursor (cairo_context, selected_focus_alloc.X, selected_focus_alloc.Y,
+ selected_focus_alloc.Width, selected_focus_alloc.Height,
+ Theme.Colors.GetWidgetColor (GtkColorClass.Text, StateType.Selected));
+ }
+
+ foreach (int ri in selected_rows) {
+ single_list_alloc.Y = offset + ((ri - first_row) * single_list_alloc.Height);
+ PaintRow (ri, single_list_alloc, StateType.Selected);
+ }
+
+ cairo_context.ResetClip ();
+ }
+
+ private void PaintReorderLine (int row_index, Rectangle single_list_alloc)
+ {
+ if (row_index == drag_reorder_row_index && IsReorderable) {
+ cairo_context.Save ();
+ cairo_context.LineWidth = 1.0;
+ cairo_context.Antialias = Cairo.Antialias.None;
+ cairo_context.MoveTo (single_list_alloc.Left, single_list_alloc.Top);
+ cairo_context.LineTo (single_list_alloc.Right, single_list_alloc.Top);
+ cairo_context.Color = Theme.Colors.GetWidgetColor (GtkColorClass.Text, StateType.Normal);
+ cairo_context.Stroke ();
+ cairo_context.Restore ();
+ }
+ }
+
+ private void PaintRow (int row_index, Rectangle area, StateType state)
+ {
+ if (column_cache == null) {
+ return;
+ }
+
+ object item = model[row_index];
+ bool opaque = IsRowOpaque (item);
+ bool bold = IsRowBold (item);
+
+ Rectangle cell_area = new Rectangle ();
+ cell_area.Height = ChildSize.Height;
+ cell_area.Y = area.Y;
+
+ cell_context.ViewRowIndex = cell_context.ModelRowIndex = row_index;
+
+ for (int ci = 0; ci < column_cache.Length; ci++) {
+ cell_context.ViewColumnIndex = ci;
+
+ if (pressed_column_is_dragging && pressed_column_index == ci) {
+ continue;
+ }
+
+ cell_area.Width = column_cache[ci].Width;
+ cell_area.X = column_cache[ci].X1 + area.X;
+ PaintCell (item, ci, row_index, cell_area, opaque, bold, state, false);
+ }
+
+ if (pressed_column_is_dragging && pressed_column_index >= 0) {
+ cell_area.Width = column_cache[pressed_column_index].Width;
+ cell_area.X = pressed_column_x_drag + list_rendering_alloc.X -
+ list_interaction_alloc.X - HadjustmentValue;
+ PaintCell (item, pressed_column_index, row_index, cell_area, opaque, bold, state, true);
+ }
+ }
+
+ private void PaintCell (object item, int column_index, int row_index, Rectangle area, bool opaque, bool bold,
+ StateType state, bool dragging)
+ {
+ ColumnCell cell = column_cache[column_index].Column.GetCell (0);
+ cell.BindListItem (item);
+ ColumnCellDataProvider (cell, item);
+
+ ITextCell text_cell = cell as ITextCell;
+ if (text_cell != null) {
+ text_cell.FontWeight = bold ? Pango.Weight.Bold : Pango.Weight.Normal;
+ }
+
+ if (dragging) {
+ Cairo.Color fill_color = Theme.Colors.GetWidgetColor (GtkColorClass.Base, StateType.Normal);
+ fill_color.A = 0.5;
+ cairo_context.Color = fill_color;
+ cairo_context.Rectangle (area.X, area.Y, area.Width, area.Height);
+ cairo_context.Fill ();
+ }
+
+ cairo_context.Save ();
+ cairo_context.Translate (area.X, area.Y);
+ cell_context.Area = area;
+ cell_context.Opaque = opaque;
+ cell.Render (cell_context, dragging ? StateType.Normal : state, area.Width, area.Height);
+ cairo_context.Restore ();
+
+ AccessibleCellRedrawn (column_index, row_index);
+ }
+
+ private void PaintDraggingColumn (Rectangle clip)
+ {
+ if (!pressed_column_is_dragging || pressed_column_index < 0) {
+ return;
+ }
+
+ CachedColumn column = column_cache[pressed_column_index];
+
+ int x = pressed_column_x_drag + Allocation.X + 1 - HadjustmentValue;
+
+ Cairo.Color fill_color = Theme.Colors.GetWidgetColor (GtkColorClass.Base, StateType.Normal);
+ fill_color.A = 0.45;
+
+ Cairo.Color stroke_color = CairoExtensions.ColorShade (Theme.Colors.GetWidgetColor (
+ GtkColorClass.Base, StateType.Normal), 0.0);
+ stroke_color.A = 0.3;
+
+ cairo_context.Rectangle (x, header_rendering_alloc.Bottom + 1, column.Width - 2,
+ list_rendering_alloc.Bottom - header_rendering_alloc.Bottom - 1);
+ cairo_context.Color = fill_color;
+ cairo_context.Fill ();
+
+ cairo_context.MoveTo (x - 0.5, header_rendering_alloc.Bottom + 0.5);
+ cairo_context.LineTo (x - 0.5, list_rendering_alloc.Bottom + 0.5);
+ cairo_context.LineTo (x + column.Width - 1.5, list_rendering_alloc.Bottom + 0.5);
+ cairo_context.LineTo (x + column.Width - 1.5, header_rendering_alloc.Bottom + 0.5);
+
+ cairo_context.Color = stroke_color;
+ cairo_context.LineWidth = 1.0;
+ cairo_context.Stroke ();
+ }
+
+#endregion
+
+#region View Layout Rendering
+
+ private void PaintView (Rect clip)
+ {
+ clip.Intersect ((Rect)list_rendering_alloc);
+ cairo_context.Rectangle ((Cairo.Rectangle)clip);
+ cairo_context.Clip ();
+
+ cell_context.Clip = (Gdk.Rectangle)clip;
+ cell_context.TextAsForeground = false;
+
+ selected_rows.Clear ();
+
+ for (int layout_index = 0; layout_index < ViewLayout.ChildCount; layout_index++) {
+ var layout_child = ViewLayout[layout_index];
+ var child_allocation = layout_child.Allocation;
+
+ if (!child_allocation.IntersectsWith (clip) || layout_child.ModelRowIndex >= Model.Count) {
+ continue;
+ }
+
+ if (Selection != null && Selection.Contains (layout_child.ModelRowIndex)) {
+ selected_rows.Add (layout_child.ModelRowIndex);
+
+ var selection_color = Theme.Colors.GetWidgetColor (GtkColorClass.Background, StateType.Selected);
+ if (!HasFocus || HeaderFocused) {
+ selection_color = CairoExtensions.ColorShade (selection_color, 1.1);
+ }
+
+ Theme.DrawRowSelection (cairo_context,
+ (int)child_allocation.X, (int)child_allocation.Y,
+ (int)child_allocation.Width, (int)child_allocation.Height,
+ true, true, selection_color, CairoCorners.All);
+
+ cell_context.State = StateType.Selected;
+ } else {
+ cell_context.State = StateType.Normal;
+ }
+
+ cairo_context.Save ();
+ cairo_context.Translate (child_allocation.X, child_allocation.Y);
+ layout_child.Render (cell_context);
+ cairo_context.Restore ();
+ }
+
+ cairo_context.ResetClip ();
+ }
+
+#endregion
+
+ protected void InvalidateList ()
+ {
+ if (IsRealized) {
+ QueueDirtyRegion (list_rendering_alloc);
+ }
+ }
+
+ private void InvalidateHeader ()
+ {
+ if (IsRealized) {
+ QueueDirtyRegion (header_rendering_alloc);
+ }
+ }
+
+ protected void QueueDirtyRegion ()
+ {
+ QueueDirtyRegion (list_rendering_alloc);
+ }
+
+ protected virtual void ColumnCellDataProvider (ColumnCell cell, object boundItem)
+ {
+ }
+
+ private bool rules_hint = false;
+ public bool RulesHint {
+ get { return rules_hint; }
+ set {
+ rules_hint = value;
+ InvalidateList ();
+ }
+ }
+
+// FIXME: Obsolete all this measure stuff on the view since it's in the layout
+#region Measuring
+
+ private Gdk.Size child_size = Gdk.Size.Empty;
+ public Gdk.Size ChildSize {
+ get {
+ return ViewLayout != null
+ ? new Gdk.Size ((int)ViewLayout.ChildSize.Width, (int)ViewLayout.ChildSize.Height)
+ : child_size;
+ }
+ }
+
+ private bool measure_pending;
+
+ protected virtual void OnInvalidateMeasure ()
+ {
+ measure_pending = true;
+ if (IsMapped && IsRealized) {
+ QueueDirtyRegion ();
+ }
+ }
+
+ protected virtual Gdk.Size OnMeasureChild ()
+ {
+ return ViewLayout != null
+ ? new Gdk.Size ((int)ViewLayout.ChildSize.Width, (int)ViewLayout.ChildSize.Height)
+ : new Gdk.Size (0, ColumnCellText.ComputeRowHeight (this));
+ }
+
+ private void OnMeasure ()
+ {
+ if (!measure_pending) {
+ return;
+ }
+
+ measure_pending = false;
+
+ header_height = 0;
+ child_size = OnMeasureChild ();
+ UpdateAdjustments ();
+ }
+
+#endregion
+
+ }
+}
diff --git a/lib/Hyena/src/Hyena.Gui/Hyena.Data.Gui/ListView/ListView_Windowing.cs b/lib/Hyena/src/Hyena.Gui/Hyena.Data.Gui/ListView/ListView_Windowing.cs
new file mode 100644
index 0000000..898e73f
--- /dev/null
+++ b/lib/Hyena/src/Hyena.Gui/Hyena.Data.Gui/ListView/ListView_Windowing.cs
@@ -0,0 +1,216 @@
+//
+// ListView_Windowing.cs
+//
+// Author:
+// Aaron Bockover <abockover at novell.com>
+//
+// Copyright (C) 2007-2008 Novell, Inc.
+//
+// Permission is hereby granted, free of charge, to any person obtaining
+// a copy of this software and associated documentation files (the
+// "Software"), to deal in the Software without restriction, including
+// without limitation the rights to use, copy, modify, merge, publish,
+// distribute, sublicense, and/or sell copies of the Software, and to
+// permit persons to whom the Software is furnished to do so, subject to
+// the following conditions:
+//
+// The above copyright notice and this permission notice shall be
+// included in all copies or substantial portions of the Software.
+//
+// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
+// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
+// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
+// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+//
+
+using System;
+using Gdk;
+using Gtk;
+
+using Hyena.Gui.Theming;
+
+namespace Hyena.Data.Gui
+{
+ public partial class ListView<T> : ListViewBase
+ {
+ private Rectangle list_rendering_alloc;
+ private Rectangle header_rendering_alloc;
+ private Rectangle list_interaction_alloc;
+ private Rectangle header_interaction_alloc;
+
+ private Gdk.Window event_window;
+
+ protected Rectangle ListAllocation {
+ get { return list_rendering_alloc; }
+ }
+
+ protected Gdk.Window EventWindow {
+ get { return event_window; }
+ }
+
+ protected override void OnRealized ()
+ {
+ WidgetFlags |= WidgetFlags.Realized | WidgetFlags.NoWindow;
+
+ GdkWindow = Parent.GdkWindow;
+ cell_context.Drawable = GdkWindow;
+
+ WindowAttr attributes = new WindowAttr ();
+ attributes.WindowType = Gdk.WindowType.Child;
+ attributes.X = Allocation.X;
+ attributes.Y = Allocation.Y;
+ attributes.Width = Allocation.Width;
+ attributes.Height = Allocation.Height;
+ attributes.Wclass = WindowClass.InputOnly;
+ attributes.EventMask = (int)(
+ EventMask.PointerMotionMask |
+ EventMask.KeyPressMask |
+ EventMask.KeyReleaseMask |
+ EventMask.ButtonPressMask |
+ EventMask.ButtonReleaseMask |
+ EventMask.LeaveNotifyMask |
+ EventMask.ExposureMask);
+
+ WindowAttributesType attributes_mask =
+ WindowAttributesType.X | WindowAttributesType.Y | WindowAttributesType.Wmclass;
+
+ event_window = new Gdk.Window (GdkWindow, attributes, attributes_mask);
+ event_window.UserData = Handle;
+
+ OnDragSourceSet ();
+ MoveResize (Allocation);
+
+ base.OnRealized ();
+ }
+
+ protected override void OnUnrealized ()
+ {
+ WidgetFlags &= ~WidgetFlags.Realized;
+
+ event_window.UserData = IntPtr.Zero;
+ Hyena.Gui.GtkWorkarounds.WindowDestroy (event_window);
+ event_window = null;
+
+ base.OnUnrealized ();
+ }
+
+ protected override void OnMapped ()
+ {
+ WidgetFlags |= WidgetFlags.Mapped;
+ event_window.Show ();
+ }
+
+ protected override void OnUnmapped ()
+ {
+ WidgetFlags &= ~WidgetFlags.Mapped;
+ event_window.Hide ();
+ }
+
+ protected int TranslateToListY (int y)
+ {
+ return y - list_interaction_alloc.Y;
+ }
+
+ private void MoveResize (Rectangle allocation)
+ {
+ if (Theme == null) {
+ return;
+ }
+
+ header_rendering_alloc = allocation;
+ header_rendering_alloc.Height = HeaderHeight;
+
+ list_rendering_alloc.X = header_rendering_alloc.X + Theme.TotalBorderWidth;
+ list_rendering_alloc.Y = header_rendering_alloc.Bottom + Theme.TotalBorderWidth;
+ list_rendering_alloc.Width = allocation.Width - Theme.TotalBorderWidth * 2;
+ list_rendering_alloc.Height = allocation.Height - (list_rendering_alloc.Y - allocation.Y) -
+ Theme.TotalBorderWidth;
+
+ header_interaction_alloc = header_rendering_alloc;
+ header_interaction_alloc.X = list_rendering_alloc.X;
+ header_interaction_alloc.Width = list_rendering_alloc.Width;
+ header_interaction_alloc.Height += Theme.BorderWidth;
+ header_interaction_alloc.Offset (-allocation.X, -allocation.Y);
+
+ list_interaction_alloc = list_rendering_alloc;
+ list_interaction_alloc.Offset (-allocation.X, -allocation.Y);
+
+ header_width = header_interaction_alloc.Width;
+ }
+
+ protected override void OnSizeRequested (ref Requisition requisition)
+ {
+ // TODO give the minimum height of the header
+ if (Theme == null) {
+ return;
+ }
+ requisition.Width = Theme.TotalBorderWidth * 2;
+ requisition.Height = HeaderHeight + Theme.TotalBorderWidth * 2;
+ }
+
+ protected override void OnSizeAllocated (Rectangle allocation)
+ {
+ base.OnSizeAllocated (allocation);
+
+ if (IsRealized) {
+ event_window.MoveResize (allocation);
+ }
+
+ MoveResize (allocation);
+ RecalculateColumnSizes ();
+ RegenerateColumnCache ();
+
+ if (ViewLayout != null) {
+ ViewLayout.Allocate ((Hyena.Gui.Canvas.Rect)list_rendering_alloc);
+ }
+
+ if (vadjustment != null) {
+ hadjustment.PageSize = header_interaction_alloc.Width;
+ hadjustment.PageIncrement = header_interaction_alloc.Width;
+ vadjustment.PageSize = list_rendering_alloc.Height;
+ vadjustment.PageIncrement = list_rendering_alloc.Height;
+ UpdateAdjustments ();
+ }
+
+ ICareAboutView model = Model as ICareAboutView;
+ if (model != null) {
+ model.RowsInView = RowsInView;
+ }
+
+ OnInvalidateMeasure ();
+ InvalidateList ();
+ }
+
+ protected int ItemsInView {
+ get {
+ // FIXME hardcoded grid
+ int columns = ViewLayout == null ? 1 : (ViewLayout as DataViewLayoutGrid).Columns;
+ return RowsInView * columns;
+ }
+ }
+
+ // FIXME: obsolete
+ protected int RowsInView {
+ get {
+ if (ChildSize.Height <= 0) {
+ return 0;
+ }
+
+ return (int)Math.Ceiling ((list_rendering_alloc.Height +
+ ChildSize.Height) / (double)ChildSize.Height);
+ }
+ }
+
+ private DataViewLayout view_layout;
+ protected DataViewLayout ViewLayout {
+ get { return view_layout; }
+ set {
+ view_layout = value;
+ QueueResize ();
+ }
+ }
+ }
+}
diff --git a/lib/Hyena/src/Hyena.Gui/Hyena.Data.Gui/ListViewTestModule.cs b/lib/Hyena/src/Hyena.Gui/Hyena.Data.Gui/ListViewTestModule.cs
new file mode 100644
index 0000000..e79a861
--- /dev/null
+++ b/lib/Hyena/src/Hyena.Gui/Hyena.Data.Gui/ListViewTestModule.cs
@@ -0,0 +1,217 @@
+//
+// ListViewTestModule.cs
+//
+// Author:
+// Aaron Bockover <abockover at novell.com>
+//
+// Copyright (C) 2008 Novell, Inc.
+//
+// Permission is hereby granted, free of charge, to any person obtaining
+// a copy of this software and associated documentation files (the
+// "Software"), to deal in the Software without restriction, including
+// without limitation the rights to use, copy, modify, merge, publish,
+// distribute, sublicense, and/or sell copies of the Software, and to
+// permit persons to whom the Software is furnished to do so, subject to
+// the following conditions:
+//
+// The above copyright notice and this permission notice shall be
+// included in all copies or substantial portions of the Software.
+//
+// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
+// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
+// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
+// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+//
+
+using System;
+using System.Collections.Generic;
+using Gtk;
+
+using Hyena.Data;
+using Hyena.Collections;
+using Hyena.Gui;
+
+using Selection = Hyena.Collections.Selection;
+
+namespace Hyena.Data.Gui
+{
+ [TestModule ("List View")]
+ public class ListViewTestModule : Window
+ {
+ private View view;
+ private Model model;
+
+ public ListViewTestModule () : base ("ListView")
+ {
+ WindowPosition = WindowPosition.Center;
+ SetDefaultSize (800, 600);
+
+ ScrolledWindow scroll = new ScrolledWindow ();
+ scroll.HscrollbarPolicy = PolicyType.Automatic;
+ scroll.VscrollbarPolicy = PolicyType.Automatic;
+
+ view = new View ();
+ model = new Model ();
+
+ scroll.Add (view);
+ Add (scroll);
+ ShowAll ();
+
+ view.SetModel (model);
+ }
+
+ private class View : ListView<ModelItem>
+ {
+ public View ()
+ {
+ ColumnController = new ColumnController ();
+ ColumnController.AddRange (
+ new Column (String.Empty, new ColumnCellCheckBox ("F", true), 1),
+ new Column ("Apples", new ColumnCellText ("B", true), 1),
+ new Column ("Pears", new ColumnCellText ("C", true), 1),
+ new Column ("How Hot", new ColumnCellRating ("G", true), 1),
+ new Column ("Peaches", new ColumnCellText ("D", true), 1),
+ new Column ("Doodle", new ColumnCellDoodle ("E", true), 1),
+ new Column ("GUIDs!OMG", new ColumnCellText ("A", true), 1)
+ );
+ }
+ }
+
+ private class Model : IListModel<ModelItem>
+ {
+ private List<ModelItem> store = new List<ModelItem> ();
+ private Selection selection = new Selection ();
+
+ public event EventHandler Cleared;
+ public event EventHandler Reloaded;
+
+ public Model ()
+ {
+ Random random = new Random (0);
+ for (int i = 0; i < 1000; i++) {
+ store.Add (new ModelItem (i, random));
+ }
+ }
+
+ public void Clear ()
+ {
+ }
+
+ public void Reload ()
+ {
+ }
+
+ public object GetItem (int index)
+ {
+ return this[index];
+ }
+
+ public int Count {
+ get { return store.Count; }
+ }
+
+ public bool CanReorder {
+ get { return false; }
+ }
+
+ public ModelItem this[int index] {
+ get { return store[index]; }
+ }
+
+ public Selection Selection {
+ get { return selection; }
+ }
+ }
+
+ private class ModelItem
+ {
+ public ModelItem (int i, Random rand)
+ {
+ a = Guid.NewGuid ().ToString ();
+ b = rand.Next (0, 255);
+ c = rand.NextDouble ();
+ d = String.Format ("Item {0}", i);
+ e = new List<Gdk.Point> ();
+ f = rand.Next (0, 1) == 1;
+ g = rand.Next (0, 5);
+ }
+
+ string a; public string A { get { return a; } }
+ int b; public int B { get { return b; } }
+ double c; public double C { get { return c; } }
+ string d; public string D { get { return d; } }
+ List<Gdk.Point> e; public List<Gdk.Point> E { get { return e; } }
+ bool f; public bool F { get { return f; } set { f = value; } }
+ int g; public int G { get { return g; } set { g = value; } }
+ }
+
+ private class ColumnCellDoodle : ColumnCell, IInteractiveCell
+ {
+ private Random random = new Random ();
+ private bool red = false;
+
+ public ColumnCellDoodle (string property, bool expand) : base (property, expand)
+ {
+ }
+
+ public override void Render (CellContext context, StateType state, double cellWidth, double cellHeight)
+ {
+ red = !red;
+ Cairo.Context cr = context.Context;
+ cr.Rectangle (0, 0, cellWidth, cellHeight);
+ cr.Color = CairoExtensions.RgbaToColor (red ? 0xff000099 : 0x00000099);
+ cr.Fill ();
+
+ List<Gdk.Point> points = Points;
+ for (int i = 0, n = points.Count; i < n; i++) {
+ if (i == 0) {
+ cr.MoveTo (points[i].X, points[i].Y);
+ } else {
+ cr.LineTo (points[i].X, points[i].Y);
+ }
+ }
+
+ cr.Color = CairoExtensions.RgbToColor ((uint)random.Next (0xffffff));
+ cr.LineWidth = 1;
+ cr.Stroke ();
+ }
+
+ private object last_pressed_bound;
+
+ public bool ButtonEvent (int x, int y, bool pressed, Gdk.EventButton evnt)
+ {
+ if (!pressed) {
+ last_pressed_bound = null;
+ return false;
+ }
+
+ last_pressed_bound = BoundObject;
+ Points.Add (new Gdk.Point (x, y));
+ return true;
+ }
+
+ public bool MotionEvent (int x, int y, Gdk.EventMotion evnt)
+ {
+ if (last_pressed_bound == BoundObject) {
+ Points.Add (new Gdk.Point (x, y));
+ return true;
+ }
+
+ return false;
+ }
+
+ public bool PointerLeaveEvent ()
+ {
+ last_pressed_bound = null;
+ return true;
+ }
+
+ private List<Gdk.Point> Points {
+ get { return (List<Gdk.Point>)BoundObject; }
+ }
+ }
+ }
+}
diff --git a/lib/Hyena/src/Hyena.Gui/Hyena.Data.Gui/ObjectListView.cs b/lib/Hyena/src/Hyena.Gui/Hyena.Data.Gui/ObjectListView.cs
new file mode 100644
index 0000000..b2525b4
--- /dev/null
+++ b/lib/Hyena/src/Hyena.Gui/Hyena.Data.Gui/ObjectListView.cs
@@ -0,0 +1,52 @@
+//
+// ObjectListView.cs
+//
+// Author:
+// Aaron Bockover <abockover at novell.com>
+//
+// Copyright (C) 2007 Novell, Inc.
+//
+// Permission is hereby granted, free of charge, to any person obtaining
+// a copy of this software and associated documentation files (the
+// "Software"), to deal in the Software without restriction, including
+// without limitation the rights to use, copy, modify, merge, publish,
+// distribute, sublicense, and/or sell copies of the Software, and to
+// permit persons to whom the Software is furnished to do so, subject to
+// the following conditions:
+//
+// The above copyright notice and this permission notice shall be
+// included in all copies or substantial portions of the Software.
+//
+// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
+// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
+// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
+// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+//
+
+using System;
+
+namespace Hyena.Data.Gui
+{
+ public class ObjectListView : ListView<object>
+ {
+ public ObjectListView () : base ()
+ {
+ ColumnController = new ColumnController();
+ }
+
+ protected override void OnModelReloaded ()
+ {
+ ColumnController.Clear ();
+ foreach (ColumnDescription column_description in Model.ColumnDescriptions) {
+ ColumnController.Add (new Column (column_description));
+ }
+ }
+
+ public new IObjectListModel Model {
+ get { return (IObjectListModel)base.Model; }
+ }
+ }
+}
diff --git a/lib/Hyena/src/Hyena.Gui/Hyena.Data.Gui/RowActivatedHandler.cs b/lib/Hyena/src/Hyena.Gui/Hyena.Data.Gui/RowActivatedHandler.cs
new file mode 100644
index 0000000..66dd52d
--- /dev/null
+++ b/lib/Hyena/src/Hyena.Gui/Hyena.Data.Gui/RowActivatedHandler.cs
@@ -0,0 +1,54 @@
+//
+// RowActivatedHandler.cs
+//
+// Author:
+// Aaron Bockover <abockover at novell.com>
+//
+// Copyright (C) 2008 Novell, Inc.
+//
+// Permission is hereby granted, free of charge, to any person obtaining
+// a copy of this software and associated documentation files (the
+// "Software"), to deal in the Software without restriction, including
+// without limitation the rights to use, copy, modify, merge, publish,
+// distribute, sublicense, and/or sell copies of the Software, and to
+// permit persons to whom the Software is furnished to do so, subject to
+// the following conditions:
+//
+// The above copyright notice and this permission notice shall be
+// included in all copies or substantial portions of the Software.
+//
+// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
+// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
+// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
+// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+//
+
+using System;
+
+namespace Hyena.Data.Gui
+{
+ public delegate void RowActivatedHandler<T> (object o, RowActivatedArgs<T> args);
+
+ public class RowActivatedArgs<T> : EventArgs
+ {
+ private int row;
+ private T row_value;
+
+ public RowActivatedArgs (int row, T rowValue)
+ {
+ this.row = row;
+ this.row_value = rowValue;
+ }
+
+ public int Row {
+ get { return row; }
+ }
+
+ public T RowValue {
+ get { return row_value; }
+ }
+ }
+}
diff --git a/lib/Hyena/src/Hyena.Gui/Hyena.Data.Gui/SortableColumn.cs b/lib/Hyena/src/Hyena.Gui/Hyena.Data.Gui/SortableColumn.cs
new file mode 100644
index 0000000..ebd2a45
--- /dev/null
+++ b/lib/Hyena/src/Hyena.Gui/Hyena.Data.Gui/SortableColumn.cs
@@ -0,0 +1,69 @@
+//
+// SortableColumn.cs
+//
+// Author:
+// Aaron Bockover <abockover at novell.com>
+//
+// Copyright (C) 2007 Novell, Inc.
+//
+// Permission is hereby granted, free of charge, to any person obtaining
+// a copy of this software and associated documentation files (the
+// "Software"), to deal in the Software without restriction, including
+// without limitation the rights to use, copy, modify, merge, publish,
+// distribute, sublicense, and/or sell copies of the Software, and to
+// permit persons to whom the Software is furnished to do so, subject to
+// the following conditions:
+//
+// The above copyright notice and this permission notice shall be
+// included in all copies or substantial portions of the Software.
+//
+// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
+// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
+// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
+// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+//
+
+using System;
+using System.Collections;
+using System.Collections.Generic;
+using Gtk;
+
+namespace Hyena.Data.Gui
+{
+ public class SortableColumn : Column, ISortableColumn
+ {
+ private string sort_key;
+ private SortType sort_type = SortType.Ascending;
+ private Hyena.Query.QueryField field;
+
+ public SortableColumn(string title, ColumnCell cell, double width, string sort_key, bool visible) :
+ base(title, cell, width, visible)
+ {
+ this.sort_key = sort_key;
+ }
+
+ public SortableColumn(ColumnCell header_cell, string title, ColumnCell cell, double width, string sort_key, bool visible) :
+ base(header_cell, title, cell, width, visible)
+ {
+ this.sort_key = sort_key;
+ }
+
+ public string SortKey {
+ get { return sort_key; }
+ set { sort_key = value; }
+ }
+
+ public SortType SortType {
+ get { return sort_type; }
+ set { sort_type = value; }
+ }
+
+ public Hyena.Query.QueryField Field {
+ get { return field; }
+ set { field = value; }
+ }
+ }
+}
diff --git a/lib/Hyena/src/Hyena.Gui/Hyena.Gui.Canvas/Point.cs b/lib/Hyena/src/Hyena.Gui/Hyena.Gui.Canvas/Point.cs
new file mode 100644
index 0000000..e05d75b
--- /dev/null
+++ b/lib/Hyena/src/Hyena.Gui/Hyena.Gui.Canvas/Point.cs
@@ -0,0 +1,86 @@
+//
+// Point.cs
+//
+// Author:
+// Aaron Bockover <abockover at novell.com>
+//
+// Copyright 2009-2010 Novell, Inc.
+//
+// Permission is hereby granted, free of charge, to any person obtaining
+// a copy of this software and associated documentation files (the
+// "Software"), to deal in the Software without restriction, including
+// without limitation the rights to use, copy, modify, merge, publish,
+// distribute, sublicense, and/or sell copies of the Software, and to
+// permit persons to whom the Software is furnished to do so, subject to
+// the following conditions:
+//
+// The above copyright notice and this permission notice shall be
+// included in all copies or substantial portions of the Software.
+//
+// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
+// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
+// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
+// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+//
+
+using System;
+
+namespace Hyena.Gui.Canvas
+{
+ public struct Point
+ {
+ public double X { get; set; }
+ public double Y { get; set; }
+
+ public Point (double x, double y) : this ()
+ {
+ X = x;
+ Y = y;
+ }
+
+ public void Offset (double dx, double dy)
+ {
+ X += dx;
+ Y += dy;
+ }
+
+ public void Offset (Point delta)
+ {
+ X += delta.X;
+ Y += delta.Y;
+ }
+
+ public override bool Equals (object o)
+ {
+ return o is Point ? Equals ((Point)o) : false;
+ }
+
+ public bool Equals (Point value)
+ {
+ return value.X == X && value.Y == Y;
+ }
+
+ public static bool operator == (Point point1, Point point2)
+ {
+ return point1.X == point2.X && point1.Y == point2.Y;
+ }
+
+ public static bool operator != (Point point1, Point point2)
+ {
+ return !(point1 == point2);
+ }
+
+ public override int GetHashCode ()
+ {
+ return X.GetHashCode () ^ Y.GetHashCode ();
+ }
+
+ public override string ToString ()
+ {
+ return String.Format ("{0},{1}", X, Y);
+ }
+ }
+}
diff --git a/lib/Hyena/src/Hyena.Gui/Hyena.Gui.Canvas/Rect.cs b/lib/Hyena/src/Hyena.Gui/Hyena.Gui.Canvas/Rect.cs
new file mode 100644
index 0000000..bb49fd7
--- /dev/null
+++ b/lib/Hyena/src/Hyena.Gui/Hyena.Gui.Canvas/Rect.cs
@@ -0,0 +1,276 @@
+//
+// Rect.cs
+//
+// Author:
+// Aaron Bockover <abockover at novell.com>
+//
+// Copyright 2009-2010 Novell, Inc.
+//
+// Permission is hereby granted, free of charge, to any person obtaining
+// a copy of this software and associated documentation files (the
+// "Software"), to deal in the Software without restriction, including
+// without limitation the rights to use, copy, modify, merge, publish,
+// distribute, sublicense, and/or sell copies of the Software, and to
+// permit persons to whom the Software is furnished to do so, subject to
+// the following conditions:
+//
+// The above copyright notice and this permission notice shall be
+// included in all copies or substantial portions of the Software.
+//
+// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
+// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
+// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
+// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+//
+
+using System;
+
+namespace Hyena.Gui.Canvas
+{
+ public struct Rect
+ {
+ private double x, y, w, h;
+
+ public Rect (double x, double y, double width, double height) : this ()
+ {
+ X = x;
+ Y = y;
+ Width = width;
+ Height = height;
+ }
+
+ public Rect (Point point1, Point point2) : this ()
+ {
+ X = Math.Min (point1.X, point2.X);
+ Y = Math.Min (point1.Y, point2.Y);
+ Width = Math.Abs (point2.X - point1.X);
+ Height = Math.Abs (point2.Y - point1.Y);
+ }
+
+ public Rect (Point location, Size size) : this ()
+ {
+ X = location.X;
+ Y = location.Y;
+ Width = size.Width;
+ Height = size.Height;
+ }
+
+ public override string ToString ()
+ {
+ if (IsEmpty) {
+ return "Empty";
+ }
+
+ return String.Format ("{0}+{1},{2}x{3}", x, y, w, h);
+ }
+
+ public double X {
+ get { return x; }
+ set { x = value; }
+ }
+
+ public double Y {
+ get { return y; }
+ set { y = value; }
+ }
+
+ public double Width {
+ get { return w; }
+ set {
+ if (value < 0) {
+ throw new ArgumentException ();
+ }
+
+ w = value;
+ }
+ }
+
+ public double Height {
+ get { return h; }
+ set {
+ if (value < 0) {
+ throw new ArgumentException ();
+ }
+
+ h = value;
+ }
+ }
+
+ public bool Contains (double px, double py)
+ {
+ return !(px < x || px > x + w || py < y || py > y + h);
+ }
+
+ public bool Contains (Point point)
+ {
+ return Contains (point.X, point.Y);
+ }
+
+ public bool IntersectsWith (Rect rect)
+ {
+ return !(Left > rect.Right ||
+ Right < rect.Left ||
+ Top > rect.Bottom ||
+ Bottom < rect.Top);
+ }
+
+ public static Rect Empty {
+ get {
+ var empty = new Rect (Double.PositiveInfinity, Double.PositiveInfinity, 0, 0);
+ empty.w = empty.h = Double.NegativeInfinity;
+ return empty;
+ }
+ }
+
+ public bool IsEmpty {
+ get { return w < 0 && h < 0; }
+ }
+
+ public double Left {
+ get { return x; }
+ }
+
+ public double Top {
+ get { return y; }
+ }
+
+ public double Right {
+ get { return IsEmpty ? Double.NegativeInfinity : x + w; }
+ }
+
+ public double Bottom {
+ get { return IsEmpty ? Double.NegativeInfinity : y + h; }
+ }
+
+ public void Intersect (Rect rect)
+ {
+ if (IsEmpty || rect.IsEmpty) {
+ this = Rect.Empty;
+ return;
+ }
+
+ double new_x = Math.Max (x, rect.x);
+ double new_y = Math.Max (y, rect.y);
+ double new_w = Math.Min (Right, rect.Right) - new_x;
+ double new_h = Math.Min (Bottom, rect.Bottom) - new_y;
+
+ x = new_x;
+ y = new_y;
+ w = new_w;
+ h = new_h;
+
+ if (w < 0 || h < 0) {
+ this = Rect.Empty;
+ }
+ }
+
+ public void Union (Rect rect)
+ {
+ if (IsEmpty) {
+ x = rect.x;
+ y = rect.y;
+ h = rect.h;
+ w = rect.w;
+ } else if (!rect.IsEmpty) {
+ double new_x = Math.Min (Left, rect.Left);
+ double new_y = Math.Min (Top, rect.Top);
+ double new_w = Math.Max (Right, rect.Right) - new_x;
+ double new_h = Math.Max (Bottom, rect.Bottom) - new_y;
+
+ x = new_x;
+ y = new_y;
+ w = new_w;
+ h = new_h;
+ }
+ }
+
+ public void Union (Point point)
+ {
+ Union (new Rect (point, point));
+ }
+
+ public void Offset (Rect rect)
+ {
+ x += rect.X;
+ y += rect.Y;
+ }
+
+ public void Offset (Point point)
+ {
+ x += point.X;
+ y += point.Y;
+ }
+
+ public void Offset (double dx, double dy)
+ {
+ x += dx;
+ y += dy;
+ }
+
+ public static bool operator == (Rect rect1, Rect rect2)
+ {
+ return rect1.x == rect2.x && rect1.y == rect2.y && rect1.w == rect2.w && rect1.h == rect2.h;
+ }
+
+ public static bool operator != (Rect rect1, Rect rect2)
+ {
+ return !(rect1 == rect2);
+ }
+
+ public override bool Equals (object o)
+ {
+ if (o is Rect) {
+ return this == (Rect)o;
+ }
+ return false;
+ }
+
+ public bool Equals (Rect value)
+ {
+ return this == value;
+ }
+
+ public override int GetHashCode ()
+ {
+ return x.GetHashCode () ^ y.GetHashCode () ^ w.GetHashCode () ^ h.GetHashCode ();
+ }
+
+#region GDK/Cairo extensions
+
+ public static explicit operator Rect (Gdk.Rectangle rect)
+ {
+ return new Rect () {
+ X = rect.X,
+ Y = rect.Y,
+ Width = rect.Width,
+ Height = rect.Height
+ };
+ }
+
+ public static explicit operator Gdk.Rectangle (Rect rect)
+ {
+ return new Gdk.Rectangle () {
+ X = (int)Math.Floor (rect.X),
+ Y = (int)Math.Floor (rect.Y),
+ Width = (int)Math.Ceiling (rect.Width),
+ Height = (int)Math.Ceiling (rect.Height)
+ };
+ }
+
+ public static explicit operator Rect (Cairo.Rectangle rect)
+ {
+ return new Rect (rect.X, rect.Y, rect.Width, rect.Height);
+ }
+
+ public static explicit operator Cairo.Rectangle (Rect rect)
+ {
+ return new Cairo.Rectangle (rect.X, rect.Y, rect.Width, rect.Height);
+ }
+
+#endregion
+
+ }
+}
diff --git a/lib/Hyena/src/Hyena.Gui/Hyena.Gui.Canvas/Size.cs b/lib/Hyena/src/Hyena.Gui/Hyena.Gui.Canvas/Size.cs
new file mode 100644
index 0000000..4d2cca7
--- /dev/null
+++ b/lib/Hyena/src/Hyena.Gui/Hyena.Gui.Canvas/Size.cs
@@ -0,0 +1,117 @@
+//
+// Size.cs
+//
+// Author:
+// Aaron Bockover <abockover at novell.com>
+//
+// Copyright 2009-2010 Novell, Inc.
+//
+// Permission is hereby granted, free of charge, to any person obtaining
+// a copy of this software and associated documentation files (the
+// "Software"), to deal in the Software without restriction, including
+// without limitation the rights to use, copy, modify, merge, publish,
+// distribute, sublicense, and/or sell copies of the Software, and to
+// permit persons to whom the Software is furnished to do so, subject to
+// the following conditions:
+//
+// The above copyright notice and this permission notice shall be
+// included in all copies or substantial portions of the Software.
+//
+// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
+// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
+// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
+// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+//
+
+using System;
+
+namespace Hyena.Gui.Canvas
+{
+ public struct Size
+ {
+ private double width;
+ private double height;
+
+ public Size (double width, double height) : this ()
+ {
+ Width = width;
+ Height = height;
+ }
+
+ public override bool Equals (object o)
+ {
+ if (!(o is Size)) {
+ return false;
+ }
+
+ return Equals ((Size)o);
+ }
+
+ public bool Equals (Size value)
+ {
+ return value.width == width && value.height == height;
+ }
+
+ public override int GetHashCode ()
+ {
+ return ((int)width) ^ ((int)height);
+ }
+
+ public static bool operator == (Size size1, Size size2)
+ {
+ return size1.width == size2.width && size1.height == size2.height;
+ }
+
+ public static bool operator != (Size size1, Size size2)
+ {
+ return size1.width != size2.width || size1.height != size2.height;
+ }
+
+ public double Height {
+ get { return height; }
+ set {
+ if (value < 0) {
+ throw new ArgumentException ();
+ }
+
+ height = value;
+ }
+ }
+
+ public double Width {
+ get { return width; }
+ set {
+ if (value < 0) {
+ throw new ArgumentException ();
+ }
+
+ width = value;
+ }
+ }
+
+ public bool IsEmpty {
+ get { return width == Double.NegativeInfinity && height == Double.NegativeInfinity; }
+ }
+
+ public static Size Empty {
+ get {
+ Size size = new Size ();
+ size.width = Double.NegativeInfinity;
+ size.height = Double.NegativeInfinity;
+ return size;
+ }
+ }
+
+ public override string ToString ()
+ {
+ if (IsEmpty) {
+ return "Empty";
+ }
+
+ return String.Format ("{0}x{1}", width, height);
+ }
+ }
+}
diff --git a/lib/Hyena/src/Hyena.Gui/Hyena.Gui.Canvas/Thickness.cs b/lib/Hyena/src/Hyena.Gui/Hyena.Gui.Canvas/Thickness.cs
new file mode 100644
index 0000000..9d25150
--- /dev/null
+++ b/lib/Hyena/src/Hyena.Gui/Hyena.Gui.Canvas/Thickness.cs
@@ -0,0 +1,126 @@
+//
+// Thickness.cs
+//
+// Author:
+// Aaron Bockover <abockover at novell.com>
+//
+// Copyright 2009-2010 Novell, Inc.
+//
+// Permission is hereby granted, free of charge, to any person obtaining
+// a copy of this software and associated documentation files (the
+// "Software"), to deal in the Software without restriction, including
+// without limitation the rights to use, copy, modify, merge, publish,
+// distribute, sublicense, and/or sell copies of the Software, and to
+// permit persons to whom the Software is furnished to do so, subject to
+// the following conditions:
+//
+// The above copyright notice and this permission notice shall be
+// included in all copies or substantial portions of the Software.
+//
+// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
+// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
+// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
+// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+//
+
+using System;
+
+namespace Hyena.Gui.Canvas
+{
+ public struct Thickness
+ {
+ private double left;
+ private double top;
+ private double right;
+ private double bottom;
+
+ public Thickness (double thickness)
+ : this (thickness, thickness, thickness, thickness)
+ {
+ }
+
+ public Thickness (double xthickness, double ythickness)
+ : this (xthickness, ythickness, xthickness, ythickness)
+ {
+ }
+
+ public Thickness (double left, double top, double right, double bottom)
+ {
+ this.left = left;
+ this.top = top;
+ this.right = right;
+ this.bottom = bottom;
+ }
+
+ public override string ToString ()
+ {
+ return string.Format ("{0},{1},{2},{3}", Double.IsNaN (left) ? "Auto" : left.ToString (),
+ Double.IsNaN (top) ? "Auto" : top.ToString (),
+ Double.IsNaN (right) ? "Auto" : right.ToString (),
+ Double.IsNaN (bottom) ? "Auto" : bottom.ToString ());
+ }
+
+ public override bool Equals (object o)
+ {
+ if (!(o is Thickness)) {
+ return false;
+ }
+
+ return this == (Thickness)o;
+ }
+
+ public bool Equals (Thickness thickness)
+ {
+ return this == thickness;
+ }
+
+ public override int GetHashCode ()
+ {
+ return left.GetHashCode () ^ top.GetHashCode () ^ right.GetHashCode () ^ bottom.GetHashCode ();
+ }
+
+ public static bool operator == (Thickness t1, Thickness t2)
+ {
+ return t1.left == t2.left &&
+ t1.right == t2.right &&
+ t1.top == t2.top &&
+ t1.bottom == t2.bottom;
+ }
+
+ public static bool operator != (Thickness t1, Thickness t2)
+ {
+ return !(t1 == t2);
+ }
+
+ public double Left {
+ get { return left; }
+ set { left = value; }
+ }
+
+ public double Top {
+ get { return top; }
+ set { top = value; }
+ }
+
+ public double Right {
+ get { return right; }
+ set { right = value; }
+ }
+
+ public double Bottom {
+ get { return bottom; }
+ set { bottom = value; }
+ }
+
+ public double X {
+ get { return Left + Right; }
+ }
+
+ public double Y {
+ get { return Top + Bottom; }
+ }
+ }
+}
diff --git a/lib/Hyena/src/Hyena.Gui/Hyena.Gui.Dialogs/ExceptionDialog.cs b/lib/Hyena/src/Hyena.Gui/Hyena.Gui.Dialogs/ExceptionDialog.cs
new file mode 100644
index 0000000..ad95a25
--- /dev/null
+++ b/lib/Hyena/src/Hyena.Gui/Hyena.Gui.Dialogs/ExceptionDialog.cs
@@ -0,0 +1,232 @@
+//
+// ExceptionDialog.cs
+//
+// Author:
+// Aaron Bockover <abockover at novell.com>
+//
+// Copyright (C) 2005-2007 Novell, Inc.
+//
+// Permission is hereby granted, free of charge, to any person obtaining
+// a copy of this software and associated documentation files (the
+// "Software"), to deal in the Software without restriction, including
+// without limitation the rights to use, copy, modify, merge, publish,
+// distribute, sublicense, and/or sell copies of the Software, and to
+// permit persons to whom the Software is furnished to do so, subject to
+// the following conditions:
+//
+// The above copyright notice and this permission notice shall be
+// included in all copies or substantial portions of the Software.
+//
+// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
+// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
+// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
+// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+//
+
+using System;
+using System.Reflection;
+using System.Resources;
+using System.Diagnostics;
+using System.Collections.Generic;
+using System.IO;
+using Mono.Unix;
+using Gtk;
+
+namespace Hyena.Gui.Dialogs
+{
+ public class ExceptionDialog : Dialog
+ {
+ private AccelGroup accel_group;
+ private string debugInfo;
+
+ public ExceptionDialog(Exception e) : base()
+ {
+ debugInfo = BuildExceptionMessage(e);
+
+ HasSeparator = false;
+ BorderWidth = 5;
+ Resizable = false;
+ Title = Catalog.GetString("Banshee Encountered a Fatal Error");
+
+ VBox.Spacing = 12;
+ ActionArea.Layout = ButtonBoxStyle.End;
+
+ accel_group = new AccelGroup();
+ AddAccelGroup(accel_group);
+
+ HBox hbox = new HBox(false, 12);
+ hbox.BorderWidth = 5;
+ VBox.PackStart(hbox, false, false, 0);
+
+ Image image = new Image(Stock.DialogError, IconSize.Dialog);
+ image.Yalign = 0.0f;
+ hbox.PackStart(image, true, true, 0);
+
+ VBox label_vbox = new VBox(false, 0);
+ label_vbox.Spacing = 12;
+ hbox.PackStart(label_vbox, false, false, 0);
+
+ Label label = new Label(String.Format("<b><big>{0}</big></b>", GLib.Markup.EscapeText(Title)));
+ label.UseMarkup = true;
+ label.Justify = Justification.Left;
+ label.LineWrap = true;
+ label.SetAlignment(0.0f, 0.5f);
+ label_vbox.PackStart(label, false, false, 0);
+
+ label = new Label(e.Message);
+
+ label.UseMarkup = true;
+ label.UseUnderline = false;
+ label.Justify = Gtk.Justification.Left;
+ label.LineWrap = true;
+ label.Selectable = true;
+ label.SetAlignment(0.0f, 0.5f);
+ label_vbox.PackStart(label, false, false, 0);
+
+ Label details_label = new Label(String.Format("<b>{0}</b>",
+ GLib.Markup.EscapeText(Catalog.GetString("Error Details"))));
+ details_label.UseMarkup = true;
+ Expander details_expander = new Expander("Details");
+ details_expander.LabelWidget = details_label;
+ label_vbox.PackStart(details_expander, true, true, 0);
+
+ ScrolledWindow scroll = new ScrolledWindow();
+ TextView view = new TextView();
+
+ scroll.HscrollbarPolicy = PolicyType.Automatic;
+ scroll.VscrollbarPolicy = PolicyType.Automatic;
+ scroll.AddWithViewport(view);
+
+ scroll.SetSizeRequest(450, 250);
+
+ view.Editable = false;
+ view.Buffer.Text = debugInfo;
+
+ details_expander.Add(scroll);
+
+ hbox.ShowAll();
+
+ AddButton(Stock.Close, ResponseType.Close, true);
+ }
+
+ private void AddButton(string stock_id, Gtk.ResponseType response, bool is_default)
+ {
+ Button button = new Button(stock_id);
+ button.CanDefault = true;
+ button.Show ();
+
+ AddActionWidget(button, response);
+
+ if(is_default) {
+ DefaultResponse = response;
+ button.AddAccelerator("activate", accel_group, (uint)Gdk.Key.Return,
+ 0, AccelFlags.Visible);
+ }
+ }
+
+ private string BuildExceptionMessage(Exception e)
+ {
+ System.Text.StringBuilder msg = new System.Text.StringBuilder();
+
+ msg.Append(Catalog.GetString("An unhandled exception was thrown: "));
+
+ Stack<Exception> exception_chain = new Stack<Exception> ();
+
+ while (e != null) {
+ exception_chain.Push (e);
+ e = e.InnerException;
+ }
+
+ while (exception_chain.Count > 0) {
+ e = exception_chain.Pop ();
+ msg.AppendFormat ("{0}\n\n{1}\n", e.Message, e.StackTrace);
+ };
+
+ msg.Append("\n");
+ msg.AppendFormat(".NET Version: {0}\n", Environment.Version);
+ msg.AppendFormat("OS Version: {0}\n", Environment.OSVersion);
+ msg.Append("\nAssembly Version Information:\n\n");
+
+ foreach(Assembly asm in AppDomain.CurrentDomain.GetAssemblies()) {
+ AssemblyName name = asm.GetName();
+ msg.AppendFormat("{0} ({1})\n", name.Name, name.Version);
+ }
+
+ if(Environment.OSVersion.Platform != PlatformID.Unix) {
+ return msg.ToString();
+ }
+
+ try {
+ msg.AppendFormat("\nPlatform Information: {0}", BuildPlatformString());
+
+ msg.Append("\n\nDisribution Information:\n\n");
+
+ Dictionary<string, string> lsb = LsbVersionInfo.Harvest;
+
+ foreach(string lsbfile in lsb.Keys) {
+ msg.AppendFormat("[{0}]\n", lsbfile);
+ msg.AppendFormat("{0}\n", lsb[lsbfile]);
+ }
+ } catch {
+ }
+
+ return msg.ToString();
+ }
+
+ private string BuildPlatformString()
+ {
+ ProcessStartInfo startInfo = new ProcessStartInfo();
+ startInfo.Arguments = "-sirom";
+ startInfo.RedirectStandardOutput = true;
+ startInfo.RedirectStandardError = true;
+ startInfo.UseShellExecute = false;
+
+ foreach(string unameprog in new string [] {
+ "/usr/bin/uname", "/bin/uname", "/usr/local/bin/uname",
+ "/sbin/uname", "/usr/sbin/uname", "/usr/local/sbin/uname"}) {
+ try {
+ startInfo.FileName = unameprog;
+ Process uname = Process.Start(startInfo);
+ return uname.StandardOutput.ReadLine().Trim();
+ } catch(Exception) {
+ continue;
+ }
+ }
+
+ return null;
+ }
+
+ private class LsbVersionInfo
+ {
+ private string [] filesToCheck = {
+ "*-release",
+ "slackware-version",
+ "debian_version"
+ };
+
+ private Dictionary<string, string> harvest = new Dictionary<string, string>();
+
+ public LsbVersionInfo()
+ {
+ foreach(string pattern in filesToCheck) {
+ foreach(string filename in Directory.GetFiles("/etc/", pattern)) {
+ using(FileStream fs = File.OpenRead(filename)) {
+ harvest[filename] = (new StreamReader(fs)).ReadToEnd();
+ }
+ }
+ }
+ }
+
+ public Dictionary<string, string> Findings {
+ get { return harvest; }
+ }
+
+ public static Dictionary<string, string> Harvest {
+ get { return (new LsbVersionInfo()).Findings; }
+ }
+ }
+ }
+}
diff --git a/lib/Hyena/src/Hyena.Gui/Hyena.Gui.Dialogs/VersionInformationDialog.cs b/lib/Hyena/src/Hyena.Gui/Hyena.Gui.Dialogs/VersionInformationDialog.cs
new file mode 100644
index 0000000..484dc0a
--- /dev/null
+++ b/lib/Hyena/src/Hyena.Gui/Hyena.Gui.Dialogs/VersionInformationDialog.cs
@@ -0,0 +1,132 @@
+//
+// VersionInformationDialog.cs
+//
+// Author:
+// Aaron Bockover <abockover at novell.com>
+//
+// Copyright (C) 2005-2007 Novell, Inc.
+//
+// Permission is hereby granted, free of charge, to any person obtaining
+// a copy of this software and associated documentation files (the
+// "Software"), to deal in the Software without restriction, including
+// without limitation the rights to use, copy, modify, merge, publish,
+// distribute, sublicense, and/or sell copies of the Software, and to
+// permit persons to whom the Software is furnished to do so, subject to
+// the following conditions:
+//
+// The above copyright notice and this permission notice shall be
+// included in all copies or substantial portions of the Software.
+//
+// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
+// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
+// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
+// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+//
+
+using System;
+using System.Reflection;
+using Gtk;
+using Mono.Unix;
+
+namespace Hyena.Gui.Dialogs
+{
+ public class VersionInformationDialog : Dialog
+ {
+ private Label path_label;
+ private TreeView version_tree;
+ private TreeStore version_store;
+
+ public VersionInformationDialog() : base()
+ {
+ AccelGroup accel_group = new AccelGroup();
+ AddAccelGroup(accel_group);
+ Modal = true;
+
+ Button button = new Button("gtk-close");
+ button.CanDefault = true;
+ button.UseStock = true;
+ button.Show();
+ DefaultResponse = ResponseType.Close;
+ button.AddAccelerator("activate", accel_group, (uint)Gdk.Key.Escape,
+ 0, Gtk.AccelFlags.Visible);
+
+ AddActionWidget(button, ResponseType.Close);
+
+ Title = Catalog.GetString("Assembly Version Information");
+ BorderWidth = 10;
+
+ version_tree = new TreeView();
+
+ version_tree.RulesHint = true;
+ version_tree.AppendColumn(Catalog.GetString("Assembly Name"),
+ new CellRendererText(), "text", 0);
+ version_tree.AppendColumn(Catalog.GetString("Version"),
+ new CellRendererText(), "text", 1);
+
+ version_tree.Model = FillStore();
+ version_tree.CursorChanged += OnCursorChanged;
+
+ ScrolledWindow scroll = new ScrolledWindow();
+ scroll.Add(version_tree);
+ scroll.ShadowType = ShadowType.In;
+ scroll.SetSizeRequest(420, 200);
+
+ VBox.PackStart(scroll, true, true, 0);
+ VBox.Spacing = 5;
+
+ path_label = new Label();
+ path_label.Ellipsize = Pango.EllipsizeMode.End;
+ path_label.Hide();
+ path_label.Xalign = 0.0f;
+ path_label.Yalign = 1.0f;
+ VBox.PackStart(path_label, false, true, 0);
+
+ scroll.ShowAll();
+ }
+
+ private void OnCursorChanged(object o, EventArgs args)
+ {
+ TreeIter iter;
+
+ if(!version_tree.Selection.GetSelected(out iter)) {
+ path_label.Hide();
+ return;
+ }
+
+ object path = version_store.GetValue(iter, 2);
+
+ if(path == null) {
+ path_label.Hide();
+ return;
+ }
+
+ path_label.Text = path as string;
+ path_label.Show();
+ }
+
+ private TreeStore FillStore()
+ {
+ version_store = new TreeStore(typeof(string),
+ typeof(string), typeof(string));
+
+ foreach(Assembly asm in AppDomain.CurrentDomain.GetAssemblies()) {
+ string loc;
+ AssemblyName name = asm.GetName();
+
+ try {
+ loc = System.IO.Path.GetFullPath(asm.Location);
+ } catch(Exception) {
+ loc = "dynamic";
+ }
+
+ version_store.AppendValues(name.Name, name.Version.ToString(), loc);
+ }
+
+ version_store.SetSortColumnId(0, SortType.Ascending);
+ return version_store;
+ }
+ }
+}
diff --git a/lib/Hyena/src/Hyena.Gui/Hyena.Gui.Theatrics/Actor.cs b/lib/Hyena/src/Hyena.Gui/Hyena.Gui.Theatrics/Actor.cs
new file mode 100644
index 0000000..e60898d
--- /dev/null
+++ b/lib/Hyena/src/Hyena.Gui/Hyena.Gui.Theatrics/Actor.cs
@@ -0,0 +1,95 @@
+//
+// Actor.cs
+//
+// Author:
+// Aaron Bockover <abockover at novell.com>
+//
+// Copyright (C) 2008 Novell, Inc.
+//
+// Permission is hereby granted, free of charge, to any person obtaining
+// a copy of this software and associated documentation files (the
+// "Software"), to deal in the Software without restriction, including
+// without limitation the rights to use, copy, modify, merge, publish,
+// distribute, sublicense, and/or sell copies of the Software, and to
+// permit persons to whom the Software is furnished to do so, subject to
+// the following conditions:
+//
+// The above copyright notice and this permission notice shall be
+// included in all copies or substantial portions of the Software.
+//
+// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
+// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
+// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
+// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+//
+
+using System;
+
+namespace Hyena.Gui.Theatrics
+{
+ public class Actor<T>
+ {
+ private DateTime start_time;
+ private DateTime last_step_time;
+
+ public Actor (T target, double duration)
+ {
+ Target = target;
+ Duration = duration;
+ CanExpire = true;
+ Reset ();
+ }
+
+ public void Reset ()
+ {
+ Reset (Duration);
+ }
+
+ public void Reset (double duration)
+ {
+ start_time = DateTime.Now;
+ last_step_time = DateTime.Now;
+ Frames = 0.0;
+ Percent = 0.0;
+ Duration = duration;
+ }
+
+ public virtual void Step ()
+ {
+ if (!CanExpire && Percent >= 1.0) {
+ Reset ();
+ }
+
+ StepDelta = (DateTime.Now - last_step_time).TotalMilliseconds;
+ last_step_time = DateTime.Now;
+ Percent = PClamp ((last_step_time - start_time).TotalMilliseconds / Duration);
+ StepDeltaPercent = PClamp (StepDelta / Duration);
+ Frames++;
+ }
+
+ private static double PClamp (double value)
+ {
+ return Math.Max (0.1, Math.Min (1.0, value));
+ }
+
+ public bool CanExpire { get; set; }
+ public T Target { get; private set; }
+ public double Duration { get; private set; }
+ public DateTime StartTime { get; private set; }
+ public double StepDelta { get; private set; }
+ public double StepDeltaPercent { get; private set; }
+ public double Percent { get; private set; }
+ public double Frames { get; private set; }
+
+ public double FramesPerSecond {
+ get { return Frames / ((double)Duration / 1000.0); }
+ }
+
+ public bool Expired {
+ get { return CanExpire && Percent >= 1.0; }
+ }
+ }
+}
diff --git a/lib/Hyena/src/Hyena.Gui/Hyena.Gui.Theatrics/Choreographer.cs b/lib/Hyena/src/Hyena.Gui/Hyena.Gui.Theatrics/Choreographer.cs
new file mode 100644
index 0000000..98a510f
--- /dev/null
+++ b/lib/Hyena/src/Hyena.Gui/Hyena.Gui.Theatrics/Choreographer.cs
@@ -0,0 +1,107 @@
+//
+// Choreographer.cs
+//
+// Authors:
+// Scott Peterson <lunchtimemama at gmail.com>
+//
+// Copyright (C) 2008 Scott Peterson
+//
+// Permission is hereby granted, free of charge, to any person obtaining
+// a copy of this software and associated documentation files (the
+// "Software"), to deal in the Software without restriction, including
+// without limitation the rights to use, copy, modify, merge, publish,
+// distribute, sublicense, and/or sell copies of the Software, and to
+// permit persons to whom the Software is furnished to do so, subject to
+// the following conditions:
+//
+// The above copyright notice and this permission notice shall be
+// included in all copies or substantial portions of the Software.
+//
+// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
+// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
+// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
+// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+//
+
+using System;
+using Hyena.Widgets;
+
+namespace Hyena.Widgets
+{
+ public enum Blocking
+ {
+ Upstage,
+ Downstage
+ }
+}
+
+namespace Hyena.Gui.Theatrics
+{
+ public enum Easing
+ {
+ Linear,
+ QuadraticIn,
+ QuadraticOut,
+ QuadraticInOut,
+ ExponentialIn,
+ ExponentialOut,
+ ExponentialInOut,
+ Sine,
+ }
+
+ public static class Choreographer
+ {
+ public static int PixelCompose (double percent, int size, Easing easing)
+ {
+ return (int)Math.Round (Compose (percent, size, easing));
+ }
+
+ public static double Compose (double percent, double scale, Easing easing)
+ {
+ return scale * Compose (percent, easing);
+ }
+
+ public static double Compose (double percent, Easing easing)
+ {
+ if (percent < 0.0 || percent > 1.0) {
+ throw new ArgumentOutOfRangeException ("percent", "must be between 0 and 1 inclusive");
+ }
+
+ switch (easing) {
+ case Easing.QuadraticIn:
+ return percent * percent;
+
+ case Easing.QuadraticOut:
+ return -1.0 * percent * (percent - 2.0);
+
+ case Easing.QuadraticInOut:
+ percent *= 2.0;
+ return percent < 1.0
+ ? percent * percent * 0.5
+ : -0.5 * (--percent * (percent - 2.0) - 1.0);
+
+ case Easing.ExponentialIn:
+ return Math.Pow (2.0, 10.0 * (percent - 1.0));
+
+ case Easing.ExponentialOut:
+ return -Math.Pow (2.0, -10.0 * percent) + 1.0;
+
+ case Easing.ExponentialInOut:
+ percent *= 2.0;
+ return percent < 1.0
+ ? 0.5 * Math.Pow (2.0, 10.0 * (percent - 1.0))
+ : 0.5 * (-Math.Pow (2.0, -10.0 * --percent) + 2.0);
+
+ case Easing.Sine:
+ return Math.Sin (percent * Math.PI);
+
+ case Easing.Linear:
+ default:
+ return percent;
+ }
+ }
+ }
+}
\ No newline at end of file
diff --git a/lib/Hyena/src/Hyena.Gui/Hyena.Gui.Theatrics/Pulsator.cs b/lib/Hyena/src/Hyena.Gui/Hyena.Gui.Theatrics/Pulsator.cs
new file mode 100644
index 0000000..6531e62
--- /dev/null
+++ b/lib/Hyena/src/Hyena.Gui/Hyena.Gui.Theatrics/Pulsator.cs
@@ -0,0 +1,120 @@
+//
+// Pulsator.cs
+//
+// Author:
+// Aaron Bockover <abockover at novell.com>
+//
+// Copyright (C) 2008 Novell, Inc.
+//
+// Permission is hereby granted, free of charge, to any person obtaining
+// a copy of this software and associated documentation files (the
+// "Software"), to deal in the Software without restriction, including
+// without limitation the rights to use, copy, modify, merge, publish,
+// distribute, sublicense, and/or sell copies of the Software, and to
+// permit persons to whom the Software is furnished to do so, subject to
+// the following conditions:
+//
+// The above copyright notice and this permission notice shall be
+// included in all copies or substantial portions of the Software.
+//
+// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
+// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
+// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
+// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+//
+
+using System;
+
+namespace Hyena.Gui.Theatrics
+{
+ public class Pulsator<T> where T : class
+ {
+ private Stage<T> stage;
+ public Stage<T> Stage {
+ get { return stage; }
+ set {
+ if (stage == value) {
+ return;
+ }
+
+ if (stage != null) {
+ stage.ActorStep -= OnActorStep;
+ }
+
+ stage = value;
+
+ if (stage != null) {
+ stage.ActorStep += OnActorStep;
+ }
+ }
+ }
+
+ private T target;
+ public T Target {
+ get { return target; }
+ set { target = value; }
+ }
+
+ public double Percent {
+ get { return IsPulsing ? stage[Target].Percent : 0; }
+ }
+
+ public bool IsPulsing {
+ get { return stage != null && stage.Contains (Target); }
+ }
+
+ public bool Stopping {
+ get { return !IsPulsing ? true : stage[Target].CanExpire; }
+ }
+
+ #pragma warning disable 0067
+ // FIXME: This is to mute gmcs: https://bugzilla.novell.com/show_bug.cgi?id=360455
+ public event EventHandler Pulse;
+ #pragma warning restore 0067
+
+ public Pulsator ()
+ {
+ }
+
+ public Pulsator (Stage<T> stage)
+ {
+ Stage = stage;
+ }
+
+ public void StartPulsing ()
+ {
+ if (!Stage.Contains (Target)) {
+ Stage.Add (Target);
+ }
+
+ Stage[Target].CanExpire = false;
+ }
+
+ public void StopPulsing ()
+ {
+ if (Stage.Contains (Target)) {
+ Stage[Target].CanExpire = true;
+ }
+ }
+
+ private bool OnActorStep (Actor<T> actor)
+ {
+ if (actor.Target == target) {
+ OnPulse ();
+ }
+
+ return true;
+ }
+
+ protected virtual void OnPulse ()
+ {
+ EventHandler handler = Pulse;
+ if (handler != null) {
+ handler (this, EventArgs.Empty);
+ }
+ }
+ }
+}
diff --git a/lib/Hyena/src/Hyena.Gui/Hyena.Gui.Theatrics/SingleActorStage.cs b/lib/Hyena/src/Hyena.Gui/Hyena.Gui.Theatrics/SingleActorStage.cs
new file mode 100644
index 0000000..04acc2c
--- /dev/null
+++ b/lib/Hyena/src/Hyena.Gui/Hyena.Gui.Theatrics/SingleActorStage.cs
@@ -0,0 +1,64 @@
+//
+// SingleActorStage.cs
+//
+// Author:
+// Aaron Bockover <abockover at novell.com>
+//
+// Copyright (C) 2008 Novell, Inc.
+//
+// Permission is hereby granted, free of charge, to any person obtaining
+// a copy of this software and associated documentation files (the
+// "Software"), to deal in the Software without restriction, including
+// without limitation the rights to use, copy, modify, merge, publish,
+// distribute, sublicense, and/or sell copies of the Software, and to
+// permit persons to whom the Software is furnished to do so, subject to
+// the following conditions:
+//
+// The above copyright notice and this permission notice shall be
+// included in all copies or substantial portions of the Software.
+//
+// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
+// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
+// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
+// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+//
+
+using System;
+
+namespace Hyena.Gui.Theatrics
+{
+ public class SingleActorStage : Stage<object>
+ {
+ private object target = new object ();
+
+ public SingleActorStage () : base ()
+ {
+ }
+
+ public SingleActorStage (uint actorDuration) : base (actorDuration)
+ {
+ }
+
+ protected override bool OnActorStep (Actor<object> actor)
+ {
+ return true;
+ }
+
+ public void Reset ()
+ {
+ AddOrReset (target);
+ }
+
+ public void Reset (uint duration)
+ {
+ AddOrReset (target, duration);
+ }
+
+ public Actor<object> Actor {
+ get { return this[target]; }
+ }
+ }
+}
diff --git a/lib/Hyena/src/Hyena.Gui/Hyena.Gui.Theatrics/Stage.cs b/lib/Hyena/src/Hyena.Gui/Hyena.Gui.Theatrics/Stage.cs
new file mode 100644
index 0000000..f60985d
--- /dev/null
+++ b/lib/Hyena/src/Hyena.Gui/Hyena.Gui.Theatrics/Stage.cs
@@ -0,0 +1,276 @@
+//
+// Stage.cs
+//
+// Author:
+// Aaron Bockover <abockover at novell.com>
+//
+// Copyright (C) 2008 Novell, Inc.
+//
+// Permission is hereby granted, free of charge, to any person obtaining
+// a copy of this software and associated documentation files (the
+// "Software"), to deal in the Software without restriction, including
+// without limitation the rights to use, copy, modify, merge, publish,
+// distribute, sublicense, and/or sell copies of the Software, and to
+// permit persons to whom the Software is furnished to do so, subject to
+// the following conditions:
+//
+// The above copyright notice and this permission notice shall be
+// included in all copies or substantial portions of the Software.
+//
+// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
+// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
+// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
+// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+//
+
+using System;
+using System.Collections.Generic;
+
+namespace Hyena.Gui.Theatrics
+{
+ public class Stage<T>
+ {
+ public delegate bool ActorStepHandler (Actor<T> actor);
+
+ private Dictionary<T, Actor<T>> actors = new Dictionary<T, Actor<T>> ();
+ private uint timeout_id;
+
+ private uint update_frequency = 30;
+ private uint default_duration = 1000;
+ private bool playing = true;
+
+ public event ActorStepHandler ActorStep;
+
+ #pragma warning disable 0067
+ // FIXME: This is to mute gmcs: https://bugzilla.novell.com/show_bug.cgi?id=360455
+ public event EventHandler Iteration;
+ #pragma warning restore 0067
+
+ public Stage ()
+ {
+ }
+
+ public Stage (uint actorDuration)
+ {
+ default_duration = actorDuration;
+ }
+
+ public Actor<T> this[T target] {
+ get {
+ if (actors.ContainsKey (target)) {
+ return actors[target];
+ }
+
+ return null;
+ }
+ }
+
+ public bool Contains (T target)
+ {
+ return actors.ContainsKey (target);
+ }
+
+ public Actor<T> Add (T target)
+ {
+ lock (this) {
+ return Add (target, default_duration);
+ }
+ }
+
+ public Actor<T> Add (T target, uint duration)
+ {
+ lock (this) {
+ if (Contains (target)) {
+ throw new InvalidOperationException ("Stage already contains this actor");
+ }
+
+ Actor<T> actor = new Actor<T> (target, duration);
+ actors.Add (target, actor);
+
+ CheckTimeout ();
+
+ return actor;
+ }
+ }
+
+ public Actor<T> AddOrReset (T target)
+ {
+ lock (this) {
+ return AddOrResetCore (target, null);
+ }
+ }
+
+ public Actor<T> AddOrReset (T target, uint duration)
+ {
+ lock (this) {
+ return AddOrResetCore (target, duration);
+ }
+ }
+
+ private Actor<T> AddOrResetCore (T target, uint? duration)
+ {
+ lock (this) {
+ if (Contains (target)) {
+ Actor<T> actor = this[target];
+
+ if (duration == null) {
+ actor.Reset ();
+ } else {
+ actor.Reset (duration.Value);
+ }
+
+ CheckTimeout ();
+
+ return actor;
+ }
+
+ return Add (target);
+ }
+ }
+
+ public void Reset (T target)
+ {
+ lock (this) {
+ ResetCore (target, null);
+ }
+ }
+
+ public void Reset (T target, uint duration)
+ {
+ lock (this) {
+ ResetCore (target, duration);
+ }
+ }
+
+ private void ResetCore (T target, uint? duration)
+ {
+ lock (this) {
+ if (!Contains (target)) {
+ throw new InvalidOperationException ("Stage does not contain this actor");
+ }
+
+ CheckTimeout ();
+
+ if (duration == null) {
+ this [target].Reset ();
+ } else {
+ this [target].Reset (duration.Value);
+ }
+ }
+ }
+
+ private void CheckTimeout ()
+ {
+ if ((!Playing || actors.Count == 0) && timeout_id > 0) {
+ GLib.Source.Remove (timeout_id);
+ timeout_id = 0;
+ return;
+ } else if (Playing && actors.Count > 0 && timeout_id <= 0) {
+ timeout_id = GLib.Timeout.Add (update_frequency, OnTimeout);
+ return;
+ }
+ }
+
+ private bool OnTimeout ()
+ {
+ if (!Playing || this.actors.Count == 0) {
+ timeout_id = 0;
+ return false;
+ }
+
+ Queue<Actor<T>> actors = new Queue<Actor<T>> (this.actors.Values);
+ while (actors.Count > 0) {
+ Actor<T> actor = actors.Dequeue ();
+ actor.Step ();
+
+ if (!OnActorStep (actor) || actor.Expired) {
+ this.actors.Remove (actor.Target);
+ }
+ }
+
+ OnIteration ();
+
+ return true;
+ }
+
+ protected virtual bool OnActorStep (Actor<T> actor)
+ {
+ ActorStepHandler handler = ActorStep;
+ if (handler != null) {
+ bool result = true;
+ foreach (ActorStepHandler del in handler.GetInvocationList ()) {
+ result &= del (actor);
+ }
+ return result;
+ }
+ return false;
+ }
+
+ protected virtual void OnIteration ()
+ {
+ EventHandler handler = Iteration;
+ if (handler != null) {
+ handler (this, EventArgs.Empty);
+ }
+ }
+
+ public void Play ()
+ {
+ lock (this) {
+ Playing = true;
+ }
+ }
+
+ public void Pause ()
+ {
+ lock (this) {
+ Playing = false;
+ }
+ }
+
+ public void Exeunt ()
+ {
+ lock (this) {
+ actors.Clear ();
+ CheckTimeout ();
+ }
+ }
+
+ public uint DefaultActorDuration {
+ get { return default_duration; }
+ set { lock (this) { default_duration = value; } }
+ }
+
+ public bool Playing {
+ get { return playing; }
+ set {
+ lock (this) {
+ if (playing == value) {
+ return;
+ }
+
+ playing = value;
+ CheckTimeout ();
+ }
+ }
+ }
+
+ public uint UpdateFrequency {
+ get { return update_frequency; }
+ set {
+ lock (this) {
+ bool _playing = Playing;
+ update_frequency = value;
+ Playing = _playing;
+ }
+ }
+ }
+
+ public int ActorCount {
+ get { return actors.Count; }
+ }
+ }
+}
diff --git a/lib/Hyena/src/Hyena.Gui/Hyena.Gui.Theatrics/Tests/ChoreographerTests.cs b/lib/Hyena/src/Hyena.Gui/Hyena.Gui.Theatrics/Tests/ChoreographerTests.cs
new file mode 100644
index 0000000..5447fca
--- /dev/null
+++ b/lib/Hyena/src/Hyena.Gui/Hyena.Gui.Theatrics/Tests/ChoreographerTests.cs
@@ -0,0 +1,116 @@
+//
+// ChoreographerTests.cs
+//
+// Author:
+// Aaron Bockover <abockover at novell.com>
+//
+// Copyright (C) 2008 Novell, Inc.
+//
+// Permission is hereby granted, free of charge, to any person obtaining
+// a copy of this software and associated documentation files (the
+// "Software"), to deal in the Software without restriction, including
+// without limitation the rights to use, copy, modify, merge, publish,
+// distribute, sublicense, and/or sell copies of the Software, and to
+// permit persons to whom the Software is furnished to do so, subject to
+// the following conditions:
+//
+// The above copyright notice and this permission notice shall be
+// included in all copies or substantial portions of the Software.
+//
+// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
+// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
+// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
+// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+//
+
+#if ENABLE_TESTS
+
+using System;
+using NUnit.Framework;
+
+using Hyena;
+using Hyena.Gui.Theatrics;
+
+namespace Hyena.Gui.Theatrics.Tests
+{
+ [TestFixture]
+ public class ChoreographerTests
+ {
+ private void _TestComposeRange (int [] values, Easing easing)
+ {
+ for (double i = 0, n = 100, p = 0, j = 0; i <= n; i += 5, p = i / n, j++) {
+ int value = Choreographer.PixelCompose (p, (int)n, easing);
+ Assert.AreEqual (values[(int)j], value);
+ }
+ }
+
+ [Test]
+ public void QuadraticInCompose ()
+ {
+ _TestComposeRange (new int [] {
+ 0, 0, 1, 2, 4, 6, 9, 12, 16, 20, 25, 30, 36, 42, 49, 56, 64, 72, 81, 90, 100
+ }, Easing.QuadraticIn);
+ }
+
+ [Test]
+ public void QuadraticOutCompose ()
+ {
+ _TestComposeRange (new int [] {
+ 0, 10, 19, 28, 36, 44, 51, 58, 64, 70, 75, 80, 84, 88, 91, 94, 96, 98, 99, 100, 100
+ }, Easing.QuadraticOut);
+ }
+
+ [Test]
+ public void QuadraticInOutCompose ()
+ {
+ _TestComposeRange (new int [] {
+ 0, 1, 2, 4, 8, 12, 18, 24, 32, 40, 50, 60, 68, 76, 82, 88, 92, 96, 98, 100, 100
+ }, Easing.QuadraticInOut);
+ }
+
+ [Test]
+ public void ExponentialInCompose ()
+ {
+ _TestComposeRange (new int [] {
+ 0, 0, 0, 0, 0, 1, 1, 1, 2, 2, 3, 4, 6, 9, 12, 18, 25, 35, 50, 71, 100
+ }, Easing.ExponentialIn);
+ }
+
+ [Test]
+ public void ExponentialOutCompose ()
+ {
+ _TestComposeRange (new int [] {
+ 0, 29, 50, 65, 75, 82, 88, 91, 94, 96, 97, 98, 98, 99, 99, 99, 100, 100, 100, 100, 100
+ }, Easing.ExponentialOut);
+ }
+
+ [Test]
+ public void ExponentialInOutCompose ()
+ {
+ _TestComposeRange (new int [] {
+ 0, 0, 0, 0, 1, 2, 3, 6, 13, 25, 50, 75, 88, 94, 97, 98, 99, 100, 100, 100, 100
+ }, Easing.ExponentialInOut);
+ }
+
+ [Test]
+ public void LinearCompose ()
+ {
+ _TestComposeRange (new int [] {
+ 0, 5, 10, 15, 20, 25, 30, 35, 40, 45, 50, 55, 60, 65, 70, 75, 80, 85, 90, 95, 100
+ }, Easing.Linear);
+ }
+
+ [Test]
+ public void SineCompose ()
+ {
+ _TestComposeRange (new int [] {
+ 0, 16, 31, 45, 59, 71, 81, 89, 95, 99, 100, 99, 95, 89, 81, 71, 59, 45, 31, 16, 0
+ }, Easing.Sine);
+ }
+ }
+}
+
+#endif
diff --git a/lib/Hyena/src/Hyena.Gui/Hyena.Gui.Theming/GtkColors.cs b/lib/Hyena/src/Hyena.Gui/Hyena.Gui.Theming/GtkColors.cs
new file mode 100644
index 0000000..4e73dec
--- /dev/null
+++ b/lib/Hyena/src/Hyena.Gui/Hyena.Gui.Theming/GtkColors.cs
@@ -0,0 +1,148 @@
+//
+// GtkColors.cs
+//
+// Author:
+// Aaron Bockover <abockover at novell.com>
+//
+// Copyright (C) 2007-2008 Novell, Inc.
+//
+// Permission is hereby granted, free of charge, to any person obtaining
+// a copy of this software and associated documentation files (the
+// "Software"), to deal in the Software without restriction, including
+// without limitation the rights to use, copy, modify, merge, publish,
+// distribute, sublicense, and/or sell copies of the Software, and to
+// permit persons to whom the Software is furnished to do so, subject to
+// the following conditions:
+//
+// The above copyright notice and this permission notice shall be
+// included in all copies or substantial portions of the Software.
+//
+// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
+// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
+// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
+// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+//
+
+using System;
+using Cairo;
+using Gtk;
+
+namespace Hyena.Gui.Theming
+{
+ public enum GtkColorClass
+ {
+ Light,
+ Mid,
+ Dark,
+ Base,
+ Text,
+ Background,
+ Foreground
+ }
+
+ public class GtkColors
+ {
+ private Cairo.Color [] gtk_colors;
+ private Widget widget;
+ private bool refreshing = false;
+
+ public event EventHandler Refreshed;
+
+ public Widget Widget {
+ get { return widget; }
+ set {
+ if (widget == value) {
+ return;
+ } else if (widget != null) {
+ widget.Realized -= OnWidgetRealized;
+ widget.StyleSet -= OnWidgetStyleSet;
+ }
+
+ widget = value;
+
+ if (widget.IsRealized) {
+ RefreshColors ();
+ }
+
+ widget.Realized += OnWidgetRealized;
+ widget.StyleSet += OnWidgetStyleSet;
+ }
+ }
+
+ public GtkColors ()
+ {
+ }
+
+ private void OnWidgetRealized (object o, EventArgs args)
+ {
+ RefreshColors ();
+ }
+
+ private void OnWidgetStyleSet (object o, StyleSetArgs args)
+ {
+ RefreshColors ();
+ }
+
+ public Cairo.Color GetWidgetColor (GtkColorClass @class, StateType state)
+ {
+ if (gtk_colors == null) {
+ RefreshColors ();
+ }
+
+ return gtk_colors[(int)@class * ((int)StateType.Insensitive + 1) + (int)state];
+ }
+
+ public void RefreshColors ()
+ {
+ if (refreshing) {
+ return;
+ }
+
+ refreshing = true;
+
+ int sn = (int)StateType.Insensitive + 1;
+ int cn = (int)GtkColorClass.Foreground + 1;
+
+ if (gtk_colors == null) {
+ gtk_colors = new Cairo.Color[sn * cn];
+ }
+
+ for (int c = 0, i = 0; c < cn; c++) {
+ for (int s = 0; s < sn; s++, i++) {
+ Gdk.Color color = Gdk.Color.Zero;
+
+ if (widget != null && widget.IsRealized) {
+ switch ((GtkColorClass)c) {
+ case GtkColorClass.Light: color = widget.Style.LightColors[s]; break;
+ case GtkColorClass.Mid: color = widget.Style.MidColors[s]; break;
+ case GtkColorClass.Dark: color = widget.Style.DarkColors[s]; break;
+ case GtkColorClass.Base: color = widget.Style.BaseColors[s]; break;
+ case GtkColorClass.Text: color = widget.Style.TextColors[s]; break;
+ case GtkColorClass.Background: color = widget.Style.Backgrounds[s]; break;
+ case GtkColorClass.Foreground: color = widget.Style.Foregrounds[s]; break;
+ }
+ } else {
+ color = new Gdk.Color (0, 0, 0);
+ }
+
+ gtk_colors[c * sn + s] = CairoExtensions.GdkColorToCairoColor (color);
+ }
+ }
+
+ OnRefreshed ();
+
+ refreshing = false;
+ }
+
+ protected virtual void OnRefreshed ()
+ {
+ EventHandler handler = Refreshed;
+ if (handler != null) {
+ handler (this, EventArgs.Empty);
+ }
+ }
+ }
+}
diff --git a/lib/Hyena/src/Hyena.Gui/Hyena.Gui.Theming/GtkTheme.cs b/lib/Hyena/src/Hyena.Gui/Hyena.Gui.Theming/GtkTheme.cs
new file mode 100644
index 0000000..20c155c
--- /dev/null
+++ b/lib/Hyena/src/Hyena.Gui/Hyena.Gui.Theming/GtkTheme.cs
@@ -0,0 +1,375 @@
+//
+// GtkTheme.cs
+//
+// Author:
+// Aaron Bockover <abockover at novell.com>
+//
+// Copyright (C) 2007-2008 Novell, Inc.
+//
+// Permission is hereby granted, free of charge, to any person obtaining
+// a copy of this software and associated documentation files (the
+// "Software"), to deal in the Software without restriction, including
+// without limitation the rights to use, copy, modify, merge, publish,
+// distribute, sublicense, and/or sell copies of the Software, and to
+// permit persons to whom the Software is furnished to do so, subject to
+// the following conditions:
+//
+// The above copyright notice and this permission notice shall be
+// included in all copies or substantial portions of the Software.
+//
+// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
+// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
+// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
+// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+//
+
+using System;
+using Cairo;
+using Gtk;
+
+namespace Hyena.Gui.Theming
+{
+ public class GtkTheme : Theme
+ {
+ private Cairo.Color rule_color;
+ private Cairo.Color border_color;
+
+ public GtkTheme (Widget widget) : base (widget)
+ {
+ }
+
+ public static Cairo.Color GetCairoTextMidColor (Widget widget)
+ {
+ Cairo.Color text_color = CairoExtensions.GdkColorToCairoColor (widget.Style.Foreground (StateType.Normal));
+ Cairo.Color background_color = CairoExtensions.GdkColorToCairoColor (widget.Style.Background (StateType.Normal));
+ return CairoExtensions.AlphaBlend (text_color, background_color, 0.5);
+ }
+
+ public static Gdk.Color GetGdkTextMidColor (Widget widget)
+ {
+ Cairo.Color color = GetCairoTextMidColor (widget);
+ Gdk.Color gdk_color = new Gdk.Color ((byte)(color.R * 255), (byte)(color.G * 255), (byte)(color.B * 255));
+ Gdk.Colormap.System.AllocColor (ref gdk_color, true, true);
+ return gdk_color;
+ }
+
+ protected override void OnColorsRefreshed ()
+ {
+ base.OnColorsRefreshed ();
+
+ rule_color = CairoExtensions.ColorShade (ViewFill, 0.95);
+ border_color = Colors.GetWidgetColor (GtkColorClass.Dark, StateType.Active);
+ }
+
+ public override void DrawPie (double fraction)
+ {
+ // Calculate the pie path
+ fraction = Theme.Clamp (0.0, 1.0, fraction);
+ double a1 = 3.0 * Math.PI / 2.0;
+ double a2 = a1 + 2.0 * Math.PI * fraction;
+
+ if (fraction == 0.0) {
+ return;
+ }
+
+ Context.Cairo.MoveTo (Context.X, Context.Y);
+ Context.Cairo.Arc (Context.X, Context.Y, Context.Radius, a1, a2);
+ Context.Cairo.LineTo (Context.X, Context.Y);
+
+ // Fill the pie
+ Color color_a = Colors.GetWidgetColor (GtkColorClass.Background, StateType.Selected);
+ Color color_b = CairoExtensions.ColorShade (color_a, 1.4);
+
+ RadialGradient fill = new RadialGradient (Context.X, Context.Y, 0,
+ Context.X, Context.Y, 2.0 * Context.Radius);
+ fill.AddColorStop (0, color_a);
+ fill.AddColorStop (1, color_b);
+ Context.Cairo.Pattern = fill;
+
+ Context.Cairo.FillPreserve ();
+ fill.Destroy ();
+
+ // Stroke the pie
+ Context.Cairo.Color = CairoExtensions.ColorShade (color_a, 0.8);
+ Context.Cairo.LineWidth = Context.LineWidth;
+ Context.Cairo.Stroke ();
+ }
+
+ public override void DrawArrow (Context cr, Gdk.Rectangle alloc, Hyena.Data.SortType type)
+ {
+ cr.LineWidth = 1;
+ cr.Translate (0.5, 0.5);
+ double x1 = alloc.X;
+ double x3 = alloc.X + alloc.Width / 2.0;
+ double x2 = x3 + (x3 - x1);
+ double y1 = alloc.Y;
+ double y2 = alloc.Bottom;
+
+ if (type == Hyena.Data.SortType.Ascending) {
+ cr.MoveTo (x1, y1);
+ cr.LineTo (x2, y1);
+ cr.LineTo (x3, y2);
+ cr.LineTo (x1, y1);
+ } else {
+ cr.MoveTo (x3, y1);
+ cr.LineTo (x2, y2);
+ cr.LineTo (x1, y2);
+ cr.LineTo (x3, y1);
+ }
+
+ cr.Color = Colors.GetWidgetColor (GtkColorClass.Base, StateType.Normal);
+ cr.FillPreserve ();
+ cr.Color = Colors.GetWidgetColor (GtkColorClass.Text, StateType.Normal);
+ cr.Stroke ();
+ cr.Translate (-0.5, -0.5);
+ }
+
+ public override void DrawFrameBackground (Cairo.Context cr, Gdk.Rectangle alloc, Cairo.Color color, Cairo.Pattern pattern)
+ {
+ color.A = Context.FillAlpha;
+ if (pattern != null) {
+ cr.Pattern = pattern;
+ } else {
+ cr.Color = color;
+ }
+ CairoExtensions.RoundedRectangle (cr, alloc.X, alloc.Y, alloc.Width, alloc.Height, Context.Radius, CairoCorners.All);
+ cr.Fill ();
+ }
+
+ public override void DrawFrameBorder (Cairo.Context cr, Gdk.Rectangle alloc)
+ {
+ var corners = CairoCorners.All;
+ double top_extend = 0;
+ double bottom_extend = 0;
+ double left_extend = 0;
+ double right_extend = 0;
+
+ if (Context.ToplevelBorderCollapse) {
+ if (Widget.Allocation.Top <= Widget.Toplevel.Allocation.Top) {
+ corners &= ~(CairoCorners.TopLeft | CairoCorners.TopRight);
+ top_extend = cr.LineWidth;
+ }
+
+ if (Widget.Allocation.Bottom >= Widget.Toplevel.Allocation.Bottom) {
+ corners &= ~(CairoCorners.BottomLeft | CairoCorners.BottomRight);
+ bottom_extend = cr.LineWidth;
+ }
+
+ if (Widget.Allocation.Left <= Widget.Toplevel.Allocation.Left) {
+ corners &= ~(CairoCorners.BottomLeft | CairoCorners.TopLeft);
+ left_extend = cr.LineWidth;
+ }
+
+ if (Widget.Allocation.Right >= Widget.Toplevel.Allocation.Right) {
+ corners &= ~(CairoCorners.BottomRight | CairoCorners.TopRight);
+ right_extend = cr.LineWidth;
+ }
+ }
+
+ if (Widget.HasFocus) {
+ cr.LineWidth = BorderWidth * 1.5;
+ cr.Color = CairoExtensions.ColorShade (border_color, 0.8);
+ } else {
+ cr.LineWidth = BorderWidth;
+ cr.Color = border_color;
+ }
+
+ double offset = (double)cr.LineWidth / 2.0;
+
+ CairoExtensions.RoundedRectangle (cr,
+ alloc.X + offset - left_extend,
+ alloc.Y + offset - top_extend,
+ alloc.Width - cr.LineWidth + left_extend + right_extend,
+ alloc.Height - cr.LineWidth - top_extend + bottom_extend,
+ Context.Radius,
+ corners);
+
+ cr.Stroke ();
+ }
+
+ public override void DrawColumnHighlight (Cairo.Context cr, Gdk.Rectangle alloc, Cairo.Color color)
+ {
+ Cairo.Color light_color = CairoExtensions.ColorShade (color, 1.6);
+ Cairo.Color dark_color = CairoExtensions.ColorShade (color, 1.3);
+
+ LinearGradient grad = new LinearGradient (alloc.X, alloc.Y, alloc.X, alloc.Bottom - 1);
+ grad.AddColorStop (0, light_color);
+ grad.AddColorStop (1, dark_color);
+
+ cr.Pattern = grad;
+ cr.Rectangle (alloc.X + 1.5, alloc.Y + 1.5, alloc.Width - 3, alloc.Height - 2);
+ cr.Fill ();
+ grad.Destroy ();
+ }
+
+ public override void DrawHeaderBackground (Cairo.Context cr, Gdk.Rectangle alloc)
+ {
+ Cairo.Color gtk_background_color = Colors.GetWidgetColor (GtkColorClass.Background, StateType.Normal);
+ Cairo.Color light_color = CairoExtensions.ColorShade (gtk_background_color, 1.1);
+ Cairo.Color dark_color = CairoExtensions.ColorShade (gtk_background_color, 0.95);
+
+ CairoCorners corners = CairoCorners.TopLeft | CairoCorners.TopRight;
+
+ LinearGradient grad = new LinearGradient (alloc.X, alloc.Y, alloc.X, alloc.Bottom);
+ grad.AddColorStop (0, light_color);
+ grad.AddColorStop (0.75, dark_color);
+ grad.AddColorStop (0, light_color);
+
+ cr.Pattern = grad;
+ CairoExtensions.RoundedRectangle (cr, alloc.X, alloc.Y, alloc.Width, alloc.Height, Context.Radius, corners);
+ cr.Fill ();
+
+ cr.Color = border_color;
+ cr.Rectangle (alloc.X, alloc.Bottom, alloc.Width, BorderWidth);
+ cr.Fill ();
+ grad.Destroy ();
+ }
+
+ public override void DrawColumnHeaderFocus (Cairo.Context cr, Gdk.Rectangle alloc)
+ {
+ double top_offset = 2.0;
+ double right_offset = 2.0;
+
+ double margin = 0.5;
+ double line_width = 0.7;
+
+ Cairo.Color stroke_color = CairoExtensions.ColorShade (
+ Colors.GetWidgetColor (GtkColorClass.Background, StateType.Selected), 0.8);
+
+ stroke_color.A = 0.1;
+ cr.Color = stroke_color;
+
+ CairoExtensions.RoundedRectangle (cr,
+ alloc.X + margin + line_width + right_offset,
+ alloc.Y + margin + line_width + top_offset,
+ alloc.Width - (margin + line_width)*2.0 - right_offset,
+ alloc.Height - (margin + line_width)*2.0 - top_offset,
+ Context.Radius/2.0, CairoCorners.None);
+
+ cr.Fill ();
+
+ stroke_color.A = 1.0;
+ cr.LineWidth = line_width;
+ cr.Color = stroke_color;
+ CairoExtensions.RoundedRectangle (cr,
+ alloc.X + margin + line_width + right_offset,
+ alloc.Y + margin + line_width + top_offset,
+ alloc.Width - (line_width + margin)*2.0 - right_offset,
+ alloc.Height - (line_width + margin)*2.0 - right_offset,
+ Context.Radius/2.0, CairoCorners.All);
+ cr.Stroke ();
+ }
+
+ public override void DrawHeaderSeparator (Cairo.Context cr, Gdk.Rectangle alloc, int x)
+ {
+ Cairo.Color gtk_background_color = Colors.GetWidgetColor (GtkColorClass.Background, StateType.Normal);
+ Cairo.Color dark_color = CairoExtensions.ColorShade (gtk_background_color, 0.80);
+ Cairo.Color light_color = CairoExtensions.ColorShade (gtk_background_color, 1.1);
+
+ int y_1 = alloc.Top + 4;
+ int y_2 = alloc.Bottom - 3;
+
+ cr.LineWidth = 1;
+ cr.Antialias = Cairo.Antialias.None;
+
+ cr.Color = dark_color;
+ cr.MoveTo (x, y_1);
+ cr.LineTo (x, y_2);
+ cr.Stroke ();
+
+ cr.Color = light_color;
+ cr.MoveTo (x + 1, y_1);
+ cr.LineTo (x + 1, y_2);
+ cr.Stroke ();
+
+ cr.Antialias = Cairo.Antialias.Default;
+ }
+
+ public override void DrawListBackground (Context cr, Gdk.Rectangle alloc, Color color)
+ {
+ color.A = Context.FillAlpha;
+ cr.Color = color;
+ cr.Rectangle (alloc.X, alloc.Y, alloc.Width, alloc.Height);
+ cr.Fill ();
+ }
+
+ public override void DrawRowCursor (Cairo.Context cr, int x, int y, int width, int height,
+ Cairo.Color color, CairoCorners corners)
+ {
+ cr.LineWidth = 1.25;
+ cr.Color = color;
+ CairoExtensions.RoundedRectangle (cr, x + cr.LineWidth/2.0, y + cr.LineWidth/2.0,
+ width - cr.LineWidth, height - cr.LineWidth, Context.Radius, corners, true);
+ cr.Stroke ();
+ }
+
+ public override void DrawRowSelection (Cairo.Context cr, int x, int y, int width, int height,
+ bool filled, bool stroked, Cairo.Color color, CairoCorners corners)
+ {
+ DrawRowSelection (cr, x, y, width, height, filled, stroked, color, corners, false);
+ }
+
+ public void DrawRowSelection (Cairo.Context cr, int x, int y, int width, int height,
+ bool filled, bool stroked, Cairo.Color color, CairoCorners corners, bool flat_fill)
+ {
+ Cairo.Color selection_color = color;
+ Cairo.Color selection_highlight = CairoExtensions.ColorShade (selection_color, 1.24);
+ Cairo.Color selection_stroke = CairoExtensions.ColorShade (selection_color, 0.85);
+ selection_highlight.A = 0.5;
+ selection_stroke.A = color.A;
+ LinearGradient grad = null;
+
+ if (filled) {
+ if (flat_fill) {
+ cr.Color = selection_color;
+ } else {
+ Cairo.Color selection_fill_light = CairoExtensions.ColorShade (selection_color, 1.12);
+ Cairo.Color selection_fill_dark = selection_color;
+
+ selection_fill_light.A = color.A;
+ selection_fill_dark.A = color.A;
+
+ grad = new LinearGradient (x, y, x, y + height);
+ grad.AddColorStop (0, selection_fill_light);
+ grad.AddColorStop (0.4, selection_fill_dark);
+ grad.AddColorStop (1, selection_fill_light);
+
+ cr.Pattern = grad;
+ }
+
+ CairoExtensions.RoundedRectangle (cr, x, y, width, height, Context.Radius, corners, true);
+ cr.Fill ();
+
+ if (grad != null) {
+ grad.Destroy ();
+ }
+ }
+
+ if (filled && stroked) {
+ cr.LineWidth = 1.0;
+ cr.Color = selection_highlight;
+ CairoExtensions.RoundedRectangle (cr, x + 1.5, y + 1.5, width - 3, height - 3,
+ Context.Radius - 1, corners, true);
+ cr.Stroke ();
+ }
+
+ if (stroked) {
+ cr.LineWidth = 1.0;
+ cr.Color = selection_stroke;
+ CairoExtensions.RoundedRectangle (cr, x + 0.5, y + 0.5, width - 1, height - 1,
+ Context.Radius, corners, true);
+ cr.Stroke ();
+ }
+ }
+
+ public override void DrawRowRule (Cairo.Context cr, int x, int y, int width, int height)
+ {
+ cr.Color = new Cairo.Color (rule_color.R, rule_color.G, rule_color.B, Context.FillAlpha);
+ cr.Rectangle (x, y, width, height);
+ cr.Fill ();
+ }
+ }
+}
diff --git a/lib/Hyena/src/Hyena.Gui/Hyena.Gui.Theming/Theme.cs b/lib/Hyena/src/Hyena.Gui/Hyena.Gui.Theming/Theme.cs
new file mode 100644
index 0000000..18d6de2
--- /dev/null
+++ b/lib/Hyena/src/Hyena.Gui/Hyena.Gui.Theming/Theme.cs
@@ -0,0 +1,263 @@
+//
+// Theme.cs
+//
+// Author:
+// Aaron Bockover <abockover at novell.com>
+//
+// Copyright (C) 2007-2008 Novell, Inc.
+//
+// Permission is hereby granted, free of charge, to any person obtaining
+// a copy of this software and associated documentation files (the
+// "Software"), to deal in the Software without restriction, including
+// without limitation the rights to use, copy, modify, merge, publish,
+// distribute, sublicense, and/or sell copies of the Software, and to
+// permit persons to whom the Software is furnished to do so, subject to
+// the following conditions:
+//
+// The above copyright notice and this permission notice shall be
+// included in all copies or substantial portions of the Software.
+//
+// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
+// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
+// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
+// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+//
+
+using System;
+using System.Collections.Generic;
+using Gtk;
+using Gdk;
+using Cairo;
+
+using Hyena.Gui;
+
+namespace Hyena.Gui.Theming
+{
+ public abstract class Theme
+ {
+ private static Cairo.Color black = new Cairo.Color (0, 0, 0);
+ private Stack<ThemeContext> contexts = new Stack<ThemeContext> ();
+ private GtkColors colors;
+
+ private Cairo.Color selection_fill;
+ private Cairo.Color selection_stroke;
+
+ private Cairo.Color view_fill;
+ private Cairo.Color view_fill_transparent;
+
+ private Cairo.Color text_mid;
+
+ public GtkColors Colors {
+ get { return colors; }
+ }
+
+ public Widget Widget { get; private set; }
+
+ public Theme (Widget widget) : this (widget, new GtkColors ())
+ {
+ }
+
+ public Theme (Widget widget, GtkColors colors)
+ {
+ this.Widget = widget;
+ this.colors = colors;
+ this.colors.Refreshed += delegate { OnColorsRefreshed (); };
+ this.colors.Widget = widget;
+
+ PushContext ();
+ }
+
+ protected virtual void OnColorsRefreshed ()
+ {
+ selection_fill = colors.GetWidgetColor (GtkColorClass.Dark, StateType.Active);
+ selection_stroke = colors.GetWidgetColor (GtkColorClass.Background, StateType.Selected);
+
+ view_fill = colors.GetWidgetColor (GtkColorClass.Base, StateType.Normal);
+ view_fill_transparent = view_fill;
+ view_fill_transparent.A = 0;
+
+ text_mid = CairoExtensions.AlphaBlend (
+ colors.GetWidgetColor (GtkColorClass.Base, StateType.Normal),
+ colors.GetWidgetColor (GtkColorClass.Text, StateType.Normal),
+ 0.5);
+ }
+
+#region Drawing
+
+ public abstract void DrawPie (double fraction);
+
+ public abstract void DrawArrow (Cairo.Context cr, Gdk.Rectangle alloc, Hyena.Data.SortType type);
+
+ public void DrawFrame (Cairo.Context cr, Gdk.Rectangle alloc, bool baseColor)
+ {
+ DrawFrameBackground (cr, alloc, baseColor);
+ DrawFrameBorder (cr, alloc);
+ }
+
+ public void DrawFrame (Cairo.Context cr, Gdk.Rectangle alloc, Cairo.Color color)
+ {
+ DrawFrameBackground (cr, alloc, color);
+ DrawFrameBorder (cr, alloc);
+ }
+
+ public void DrawFrameBackground (Cairo.Context cr, Gdk.Rectangle alloc, bool baseColor)
+ {
+ DrawFrameBackground (cr, alloc, baseColor
+ ? colors.GetWidgetColor (GtkColorClass.Base, StateType.Normal)
+ : colors.GetWidgetColor (GtkColorClass.Background, StateType.Normal));
+ }
+
+ public void DrawFrameBackground (Cairo.Context cr, Gdk.Rectangle alloc, Cairo.Color color)
+ {
+ DrawFrameBackground (cr, alloc, color, null);
+ }
+
+ public void DrawFrameBackground (Cairo.Context cr, Gdk.Rectangle alloc, Cairo.Pattern pattern)
+ {
+ DrawFrameBackground (cr, alloc, black , pattern);
+ }
+
+ public abstract void DrawFrameBackground (Cairo.Context cr, Gdk.Rectangle alloc, Cairo.Color color, Cairo.Pattern pattern);
+
+ public abstract void DrawFrameBorder (Cairo.Context cr, Gdk.Rectangle alloc);
+
+ public abstract void DrawHeaderBackground (Cairo.Context cr, Gdk.Rectangle alloc);
+
+ public abstract void DrawColumnHeaderFocus (Cairo.Context cr, Gdk.Rectangle alloc);
+
+ public abstract void DrawHeaderSeparator (Cairo.Context cr, Gdk.Rectangle alloc, int x);
+
+ public void DrawListBackground (Cairo.Context cr, Gdk.Rectangle alloc, bool baseColor)
+ {
+ DrawListBackground (cr, alloc, baseColor
+ ? colors.GetWidgetColor (GtkColorClass.Base, StateType.Normal)
+ : colors.GetWidgetColor (GtkColorClass.Background, StateType.Normal));
+ }
+
+ public abstract void DrawListBackground (Cairo.Context cr, Gdk.Rectangle alloc, Cairo.Color color);
+
+ public void DrawColumnHighlight (Cairo.Context cr, double cellWidth, double cellHeight)
+ {
+ Gdk.Rectangle alloc = new Gdk.Rectangle ();
+ alloc.Width = (int)cellWidth;
+ alloc.Height = (int)cellHeight;
+ DrawColumnHighlight (cr, alloc);
+ }
+
+ public void DrawColumnHighlight (Cairo.Context cr, Gdk.Rectangle alloc)
+ {
+ DrawColumnHighlight (cr, alloc, colors.GetWidgetColor (GtkColorClass.Background, StateType.Selected));
+ }
+
+ public abstract void DrawColumnHighlight (Cairo.Context cr, Gdk.Rectangle alloc, Cairo.Color color);
+
+ public void DrawRowSelection (Cairo.Context cr, int x, int y, int width, int height)
+ {
+ DrawRowSelection (cr, x, y, width, height, true);
+ }
+
+ public void DrawRowSelection (Cairo.Context cr, int x, int y, int width, int height, bool filled)
+ {
+ DrawRowSelection (cr, x, y, width, height, filled, true,
+ colors.GetWidgetColor (GtkColorClass.Background, StateType.Selected), CairoCorners.All);
+ }
+
+ public void DrawRowSelection (Cairo.Context cr, int x, int y, int width, int height,
+ bool filled, bool stroked, Cairo.Color color)
+ {
+ DrawRowSelection (cr, x, y, width, height, filled, stroked, color, CairoCorners.All);
+ }
+
+ public void DrawRowCursor (Cairo.Context cr, int x, int y, int width, int height)
+ {
+ DrawRowCursor (cr, x, y, width, height, colors.GetWidgetColor (GtkColorClass.Background, StateType.Selected));
+ }
+
+ public void DrawRowCursor (Cairo.Context cr, int x, int y, int width, int height, Cairo.Color color)
+ {
+ DrawRowCursor (cr, x, y, width, height, color, CairoCorners.All);
+ }
+
+ public abstract void DrawRowCursor (Cairo.Context cr, int x, int y, int width, int height, Cairo.Color color, CairoCorners corners);
+
+ public abstract void DrawRowSelection (Cairo.Context cr, int x, int y, int width, int height,
+ bool filled, bool stroked, Cairo.Color color, CairoCorners corners);
+
+ public abstract void DrawRowRule (Cairo.Context cr, int x, int y, int width, int height);
+
+ public Cairo.Color ViewFill {
+ get { return view_fill; }
+ }
+
+ public Cairo.Color ViewFillTransparent {
+ get { return view_fill_transparent; }
+ }
+
+ public Cairo.Color SelectionFill {
+ get { return selection_fill; }
+ }
+
+ public Cairo.Color SelectionStroke {
+ get { return selection_stroke; }
+ }
+
+ public Cairo.Color TextMidColor {
+ get { return text_mid; }
+ protected set { text_mid = value; }
+ }
+
+ public virtual int BorderWidth {
+ get { return 1; }
+ }
+
+ public virtual int InnerBorderWidth {
+ get { return 4; }
+ }
+
+ public int TotalBorderWidth {
+ get { return BorderWidth + InnerBorderWidth; }
+ }
+
+#endregion
+
+#region Contexts
+
+ public virtual void PushContext ()
+ {
+ PushContext (new ThemeContext ());
+ }
+
+ public virtual void PushContext (ThemeContext context)
+ {
+ lock (this) {
+ contexts.Push (context);
+ }
+ }
+
+ public virtual ThemeContext PopContext ()
+ {
+ lock (this) {
+ return contexts.Pop ();
+ }
+ }
+
+ public virtual ThemeContext Context {
+ get { lock (this) { return contexts.Peek (); } }
+ }
+
+#endregion
+
+#region Static Utilities
+
+ public static double Clamp (double min, double max, double value)
+ {
+ return Math.Max (min, Math.Min (max, value));
+ }
+
+#endregion
+
+ }
+}
diff --git a/lib/Hyena/src/Hyena.Gui/Hyena.Gui.Theming/ThemeContext.cs b/lib/Hyena/src/Hyena.Gui/Hyena.Gui.Theming/ThemeContext.cs
new file mode 100644
index 0000000..1f06569
--- /dev/null
+++ b/lib/Hyena/src/Hyena.Gui/Hyena.Gui.Theming/ThemeContext.cs
@@ -0,0 +1,80 @@
+//
+// Theme.cs
+//
+// Author:
+// Aaron Bockover <abockover at novell.com>
+//
+// Copyright (C) 2007-2008 Novell, Inc.
+//
+// Permission is hereby granted, free of charge, to any person obtaining
+// a copy of this software and associated documentation files (the
+// "Software"), to deal in the Software without restriction, including
+// without limitation the rights to use, copy, modify, merge, publish,
+// distribute, sublicense, and/or sell copies of the Software, and to
+// permit persons to whom the Software is furnished to do so, subject to
+// the following conditions:
+//
+// The above copyright notice and this permission notice shall be
+// included in all copies or substantial portions of the Software.
+//
+// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
+// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
+// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
+// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+//
+
+using System;
+using Cairo;
+
+namespace Hyena.Gui.Theming
+{
+ public class ThemeContext
+ {
+ public bool ToplevelBorderCollapse { get; set; }
+
+ private double radius = 0.0;
+ public double Radius {
+ get { return radius; }
+ set { radius = value; }
+ }
+
+ private double fill_alpha = 1.0;
+ public double FillAlpha {
+ get { return fill_alpha; }
+ set { fill_alpha = Theme.Clamp (0.0, 1.0, value); }
+ }
+
+ private double line_width = 1.0;
+ public double LineWidth {
+ get { return line_width; }
+ set { line_width = value; }
+ }
+
+ private bool show_stroke = true;
+ public bool ShowStroke {
+ get { return show_stroke; }
+ set { show_stroke = value; }
+ }
+
+ private double x;
+ public double X {
+ get { return x; }
+ set { x = value; }
+ }
+
+ private double y;
+ public double Y {
+ get { return y; }
+ set { y = value; }
+ }
+
+ private Cairo.Context cairo;
+ public Cairo.Context Cairo {
+ get { return cairo; }
+ set { cairo = value; }
+ }
+ }
+}
diff --git a/lib/Hyena/src/Hyena.Gui/Hyena.Gui.Theming/ThemeEngine.cs b/lib/Hyena/src/Hyena.Gui/Hyena.Gui.Theming/ThemeEngine.cs
new file mode 100644
index 0000000..ef3f3bc
--- /dev/null
+++ b/lib/Hyena/src/Hyena.Gui/Hyena.Gui.Theming/ThemeEngine.cs
@@ -0,0 +1,47 @@
+//
+// ThemeEngine.cs
+//
+// Author:
+// Aaron Bockover <abockover at novell.com>
+//
+// Copyright 2009 Aaron Bockover
+//
+// Permission is hereby granted, free of charge, to any person obtaining a copy
+// of this software and associated documentation files (the "Software"), to deal
+// in the Software without restriction, including without limitation the rights
+// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+// copies of the Software, and to permit persons to whom the Software is
+// furnished to do so, subject to the following conditions:
+//
+// The above copyright notice and this permission notice shall be included in
+// all copies or substantial portions of the Software.
+//
+// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+// THE SOFTWARE.
+
+using System;
+
+namespace Hyena.Gui.Theming
+{
+ public static class ThemeEngine
+ {
+ private static Type theme_type;
+
+ public static void SetCurrentTheme<T> () where T : Theme
+ {
+ theme_type = typeof (T);
+ }
+
+ public static Theme CreateTheme (Gtk.Widget widget)
+ {
+ return theme_type == null
+ ? new GtkTheme (widget)
+ : (Theme)Activator.CreateInstance (theme_type, new object [] { widget });
+ }
+ }
+}
\ No newline at end of file
diff --git a/lib/Hyena/src/Hyena.Gui/Hyena.Gui.Theming/ThemeTestModule.cs b/lib/Hyena/src/Hyena.Gui/Hyena.Gui.Theming/ThemeTestModule.cs
new file mode 100644
index 0000000..dbf0b18
--- /dev/null
+++ b/lib/Hyena/src/Hyena.Gui/Hyena.Gui.Theming/ThemeTestModule.cs
@@ -0,0 +1,103 @@
+//
+// ThemeTestModule.cs
+//
+// Author:
+// Aaron Bockover <abockover at novell.com>
+//
+// Copyright 2010 Novell, Inc.
+//
+// Permission is hereby granted, free of charge, to any person obtaining a copy
+// of this software and associated documentation files (the "Software"), to deal
+// in the Software without restriction, including without limitation the rights
+// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+// copies of the Software, and to permit persons to whom the Software is
+// furnished to do so, subject to the following conditions:
+//
+// The above copyright notice and this permission notice shall be included in
+// all copies or substantial portions of the Software.
+//
+// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+// THE SOFTWARE.
+
+using System;
+using Gtk;
+
+using Hyena.Gui;
+
+namespace Hyena.Gui.Theming
+{
+ [TestModule ("Theme")]
+ public class ThemeTestModule : Window
+ {
+ public ThemeTestModule () : base ("Theme")
+ {
+ var align = new Alignment (0.0f, 0.0f, 1.0f, 1.0f);
+ var theme_widget = new ThemeTestWidget ();
+ align.Add (theme_widget);
+ Add (align);
+ ShowAll ();
+
+ int state = 0;
+ uint[,] borders = {
+ {0, 0, 0, 0},
+ {10, 0, 0, 0},
+ {0, 10, 0, 0},
+ {0, 0, 10, 0},
+ {0, 0, 0, 10},
+ {10, 10, 0, 0},
+ {10, 10, 10, 0},
+ {10, 10, 10, 10},
+ {10, 0, 0, 10},
+ {0, 10, 10, 0}
+ };
+
+ GLib.Timeout.Add (2000, delegate {
+ Console.WriteLine (state);
+ align.TopPadding = borders[state, 0];
+ align.RightPadding = borders[state, 1];
+ align.BottomPadding = borders[state, 2];
+ align.LeftPadding = borders[state, 3];
+ if (++state % borders.GetLength (0) == 0) {
+ state = 0;
+ }
+ return true;
+ });
+ }
+
+ private class ThemeTestWidget : DrawingArea
+ {
+ private Theme theme;
+
+ protected override void OnStyleSet (Style previous_style)
+ {
+ base.OnStyleSet (previous_style);
+ theme = ThemeEngine.CreateTheme (this);
+ theme.Context.Radius = 10;
+ }
+
+ protected override bool OnExposeEvent (Gdk.EventExpose evnt)
+ {
+ Cairo.Context cr = null;
+ try {
+ var alloc = new Gdk.Rectangle () {
+ X = Allocation.X,
+ Y = Allocation.Y,
+ Width = Allocation.Width,
+ Height = Allocation.Height
+ };
+ cr = Gdk.CairoHelper.Create (evnt.Window);
+ theme.DrawListBackground (cr, alloc, true);
+ theme.DrawFrameBorder (cr, alloc);
+ } finally {
+ CairoExtensions.DisposeContext (cr);
+ }
+ return true;
+ }
+ }
+ }
+}
diff --git a/lib/Hyena/src/Hyena.Gui/Hyena.Gui.dll.config b/lib/Hyena/src/Hyena.Gui/Hyena.Gui.dll.config
new file mode 100644
index 0000000..abc0d01
--- /dev/null
+++ b/lib/Hyena/src/Hyena.Gui/Hyena.Gui.dll.config
@@ -0,0 +1,17 @@
+<configuration>
+ <dllmap dll="libgtk-win32-2.0-0.dll" target="libgtk-x11-2.0.so.0" os="!windows,osx"/>
+ <dllmap dll="libgdk-win32-2.0-0.dll" target="libgdk-x11-2.0.so.0" os="!windows,osx"/>
+ <dllmap dll="libglib-2.0-0.dll" target="libglib-2.0.so.0" os="!windows,osx"/>
+ <dllmap dll="libgobject-2.0-0.dll" target="libgobject-2.0.so.0" os="!windows,osx"/>
+ <dllmap dll="libgdk_pixbuf-2.0-0.dll" target="libgdk_pixbuf-2.0.so.0" os="!windows,osx"/>
+ <dllmap dll="libpangocairo-1.0-0.dll" target="libpangocairo-1.0.so.0" os="!windows,osx"/>
+ <dllmap dll="libcairo-2.dll" target="libcairo.so.2" os="!windows,osx"/>
+
+ <dllmap dll="libgtk-win32-2.0-0.dll" target="libgtk-quartz-2.0.dylib" os="osx"/>
+ <dllmap dll="libgdk-win32-2.0-0.dll" target="libgdk-quartz-2.0.dylib" os="osx"/>
+ <dllmap dll="libglib-2.0-0.dll" target="libglib-2.0.dylib" os="osx"/>
+ <dllmap dll="libgobject-2.0-0.dll" target="libgobject-2.0.dylib" os="osx"/>
+ <dllmap dll="libgdk_pixbuf-2.0-0.dll" target="libgdk_pixbuf-2.0.dylib" os="osx"/>
+ <dllmap dll="libpangocairo-1.0-0.dll" target="libpangocairo-1.0.dylib" os="osx"/>
+ <dllmap dll="libcairo-2.dll" target="libcairo.2.dylib" os="osx"/>
+</configuration>
diff --git a/lib/Hyena/src/Hyena.Gui/Hyena.Gui/ActionManager.cs b/lib/Hyena/src/Hyena.Gui/Hyena.Gui/ActionManager.cs
new file mode 100644
index 0000000..f1f0ba9
--- /dev/null
+++ b/lib/Hyena/src/Hyena.Gui/Hyena.Gui/ActionManager.cs
@@ -0,0 +1,170 @@
+//
+// ActionManager.cs
+//
+// Author:
+// Aaron Bockover <abockover at novell.com>
+//
+// Copyright (C) 2006-2007 Novell, Inc.
+//
+// Permission is hereby granted, free of charge, to any person obtaining
+// a copy of this software and associated documentation files (the
+// "Software"), to deal in the Software without restriction, including
+// without limitation the rights to use, copy, modify, merge, publish,
+// distribute, sublicense, and/or sell copies of the Software, and to
+// permit persons to whom the Software is furnished to do so, subject to
+// the following conditions:
+//
+// The above copyright notice and this permission notice shall be
+// included in all copies or substantial portions of the Software.
+//
+// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
+// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
+// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
+// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+//
+
+using System;
+using System.IO;
+using System.Reflection;
+using System.Collections.Generic;
+
+using Gtk;
+using Action = Gtk.Action;
+
+using Hyena;
+
+namespace Hyena.Gui
+{
+ public class ActionManager
+ {
+ private UIManager ui_manager;
+ private Dictionary<string, ActionGroup> action_groups = new Dictionary<string, ActionGroup> ();
+
+ public ActionManager ()
+ {
+ ui_manager = new UIManager ();
+ }
+
+ public virtual void Initialize ()
+ {
+ }
+
+ private void InnerAddActionGroup (ActionGroup group)
+ {
+ action_groups.Add (group.Name, group);
+ ui_manager.InsertActionGroup (group, 0);
+ }
+
+ public void AddActionGroup (string name)
+ {
+ lock (this) {
+ if (action_groups.ContainsKey (name)) {
+ throw new ApplicationException ("Group already exists");
+ }
+
+ InnerAddActionGroup (new ActionGroup (name));
+ }
+ }
+
+ public void AddActionGroup (ActionGroup group)
+ {
+ lock (this) {
+ if (action_groups.ContainsKey (group.Name)) {
+ throw new ApplicationException ("Group already exists");
+ }
+
+ InnerAddActionGroup (group);
+ }
+ }
+
+ public void RemoveActionGroup (string name)
+ {
+ lock (this) {
+ if (action_groups.ContainsKey (name)) {
+ ActionGroup group = action_groups[name];
+ ui_manager.RemoveActionGroup (group);
+ action_groups.Remove (name);
+ }
+ }
+ }
+
+ public void RemoveActionGroup (ActionGroup group)
+ {
+ RemoveActionGroup (group.Name);
+ }
+
+ public ActionGroup FindActionGroup (string actionGroupId)
+ {
+ foreach (ActionGroup group in action_groups.Values) {
+ if (group.Name == actionGroupId) {
+ return group;
+ }
+ }
+
+ return null;
+ }
+
+ public Gtk.Action FindAction (string actionId)
+ {
+ string [] parts = actionId.Split ('.');
+
+ if (parts == null || parts.Length < 2) {
+ return null;
+ }
+
+ string group_name = parts[0];
+ string action_name = parts[1];
+
+ ActionGroup group = FindActionGroup (group_name);
+ return group == null ? null : group.GetAction (action_name);
+ }
+
+ public void PopulateToolbarPlaceholder (Toolbar toolbar, string path, Widget item)
+ {
+ PopulateToolbarPlaceholder (toolbar, path, item, false);
+ }
+
+ public void PopulateToolbarPlaceholder (Toolbar toolbar, string path, Widget item, bool expand)
+ {
+ ToolItem placeholder = (ToolItem)UIManager.GetWidget (path);
+ int position = toolbar.GetItemIndex (placeholder);
+ toolbar.Remove (placeholder);
+
+ if (item is ToolItem) {
+ ((ToolItem)item).Expand = expand;
+ toolbar.Insert ((ToolItem)item, position);
+ } else {
+ ToolItem container_item = new Hyena.Widgets.GenericToolItem<Widget> (item);
+ container_item.Expand = expand;
+ container_item.Show ();
+ toolbar.Insert (container_item, position);
+ }
+ }
+
+ public uint AddUiFromFileInCurrentAssembly (string ui_file)
+ {
+ return AddUiFromFile (ui_file, Assembly.GetCallingAssembly ());
+ }
+
+ public uint AddUiFromFile (string ui_file, Assembly assembly)
+ {
+ if (ui_file != null) {
+ using (StreamReader reader = new StreamReader (assembly.GetManifestResourceStream (ui_file))) {
+ return ui_manager.AddUiFromString (reader.ReadToEnd ());
+ }
+ }
+ return 0;
+ }
+
+ public Gtk.Action this[string actionId] {
+ get { return FindAction (actionId); }
+ }
+
+ public UIManager UIManager {
+ get { return ui_manager; }
+ }
+ }
+}
diff --git a/lib/Hyena/src/Hyena.Gui/Hyena.Gui/BaseWidgetAccessible.cs b/lib/Hyena/src/Hyena.Gui/Hyena.Gui/BaseWidgetAccessible.cs
new file mode 100644
index 0000000..dea5da0
--- /dev/null
+++ b/lib/Hyena/src/Hyena.Gui/Hyena.Gui/BaseWidgetAccessible.cs
@@ -0,0 +1,262 @@
+//
+// BaseWidgetAccessible.cs
+//
+// Author:
+// Gabriel Burt <gburt at novell.com>
+//
+// Copyright (C) 2009 Novell, Inc.
+//
+// Permission is hereby granted, free of charge, to any person obtaining
+// a copy of this software and associated documentation files (the
+// "Software"), to deal in the Software without restriction, including
+// without limitation the rights to use, copy, modify, merge, publish,
+// distribute, sublicense, and/or sell copies of the Software, and to
+// permit persons to whom the Software is furnished to do so, subject to
+// the following conditions:
+//
+// The above copyright notice and this permission notice shall be
+// included in all copies or substantial portions of the Software.
+//
+// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
+// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
+// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
+// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+//
+
+using System;
+using System.Linq;
+using System.Collections.Generic;
+
+using Atk;
+
+namespace Hyena.Gui
+{
+#if ENABLE_ATK
+ public class BaseWidgetAccessible : Gtk.Accessible, Atk.ComponentImplementor
+ {
+ private Gtk.Widget widget;
+ private uint focus_id = 0;
+ private Dictionary<uint, Atk.FocusHandler> focus_handlers = new Dictionary<uint, Atk.FocusHandler> ();
+
+ public BaseWidgetAccessible (Gtk.Widget widget)
+ {
+ this.widget = widget;
+ widget.SizeAllocated += OnAllocated;
+ widget.Mapped += OnMap;
+ widget.Unmapped += OnMap;
+ widget.FocusInEvent += OnFocus;
+ widget.FocusOutEvent += OnFocus;
+ widget.AddNotification ("sensitive", (o, a) => NotifyStateChange (StateType.Sensitive, widget.Sensitive));
+ widget.AddNotification ("visible", (o, a) => NotifyStateChange (StateType.Visible, widget.Visible));
+ }
+
+ public virtual new Atk.Layer Layer {
+ get { return Layer.Widget; }
+ }
+
+ protected override Atk.StateSet OnRefStateSet ()
+ {
+ var s = base.OnRefStateSet ();
+
+ AddStateIf (s, widget.CanFocus, StateType.Focusable);
+ AddStateIf (s, widget.HasFocus, StateType.Focused);
+ AddStateIf (s, widget.Sensitive, StateType.Sensitive);
+ AddStateIf (s, widget.Sensitive, StateType.Enabled);
+ AddStateIf (s, widget.HasDefault, StateType.Default);
+ AddStateIf (s, widget.Visible, StateType.Visible);
+ AddStateIf (s, widget.Visible && widget.IsMapped, StateType.Showing);
+
+ return s;
+ }
+
+ private static void AddStateIf (StateSet s, bool condition, StateType t)
+ {
+ if (condition) {
+ s.AddState (t);
+ }
+ }
+
+ private void OnFocus (object o, EventArgs args)
+ {
+ NotifyStateChange (StateType.Focused, widget.HasFocus);
+ var handler = FocusChanged;
+ if (handler != null) {
+ handler (this, widget.HasFocus);
+ }
+ }
+
+ private void OnMap (object o, EventArgs args)
+ {
+ NotifyStateChange (StateType.Showing, widget.Visible && widget.IsMapped);
+ }
+
+ private void OnAllocated (object o, EventArgs args)
+ {
+ var a = widget.Allocation;
+ var bounds = new Atk.Rectangle () { X = a.X, Y = a.Y, Width = a.Width, Height = a.Height };
+ GLib.Signal.Emit (this, "bounds_changed", bounds);
+ /*var handler = BoundsChanged;
+ if (handler != null) {
+ handler (this, new BoundsChangedArgs () { Args = new object [] { bounds } });
+ }*/
+ }
+
+ private event FocusHandler FocusChanged;
+
+ #region Atk.Component
+
+ public uint AddFocusHandler (Atk.FocusHandler handler)
+ {
+ if (!focus_handlers.ContainsValue (handler)) {
+ FocusChanged += handler;
+ focus_handlers[++focus_id] = handler;
+ return focus_id;
+ }
+ return 0;
+ }
+
+ public bool Contains (int x, int y, Atk.CoordType coordType)
+ {
+ int x_extents, y_extents, w, h;
+ GetExtents (out x_extents, out y_extents, out w, out h, coordType);
+ Gdk.Rectangle extents = new Gdk.Rectangle (x_extents, y_extents, w, h);
+ return extents.Contains (x, y);
+ }
+
+ public virtual Atk.Object RefAccessibleAtPoint (int x, int y, Atk.CoordType coordType)
+ {
+ return new NoOpObject (widget);
+ }
+
+ public void GetExtents (out int x, out int y, out int w, out int h, Atk.CoordType coordType)
+ {
+ w = widget.Allocation.Width;
+ h = widget.Allocation.Height;
+
+ GetPosition (out x, out y, coordType);
+ }
+
+ public void GetPosition (out int x, out int y, Atk.CoordType coordType)
+ {
+ Gdk.Window window = null;
+
+ if (!widget.IsDrawable) {
+ x = y = Int32.MinValue;
+ return;
+ }
+
+ if (widget.Parent != null) {
+ x = widget.Allocation.X;
+ y = widget.Allocation.Y;
+ window = widget.ParentWindow;
+ } else {
+ x = 0;
+ y = 0;
+ window = widget.GdkWindow;
+ }
+
+ int x_window, y_window;
+ window.GetOrigin (out x_window, out y_window);
+ x += x_window;
+ y += y_window;
+
+ if (coordType == Atk.CoordType.Window) {
+ window = widget.GdkWindow.Toplevel;
+ int x_toplevel, y_toplevel;
+ window.GetOrigin (out x_toplevel, out y_toplevel);
+
+ x -= x_toplevel;
+ y -= y_toplevel;
+ }
+ }
+
+ public void GetSize (out int w, out int h)
+ {
+ w = widget.Allocation.Width;
+ h = widget.Allocation.Height;
+ }
+
+ public bool GrabFocus ()
+ {
+ if (!widget.CanFocus) {
+ return false;
+ }
+
+ widget.GrabFocus ();
+
+ var toplevel_window = widget.Toplevel as Gtk.Window;
+ if (toplevel_window != null) {
+ toplevel_window.Present ();
+ }
+
+ return true;
+ }
+
+ public void RemoveFocusHandler (uint handlerId)
+ {
+ if (focus_handlers.ContainsKey (handlerId)) {
+ FocusChanged -= focus_handlers[handlerId];
+ focus_handlers.Remove (handlerId);
+ }
+ }
+
+ public bool SetExtents (int x, int y, int w, int h, Atk.CoordType coordType)
+ {
+ return SetSizeAndPosition (x, y, w, h, coordType, true);
+ }
+
+ public bool SetPosition (int x, int y, Atk.CoordType coordType)
+ {
+ return SetSizeAndPosition (x, y, 0, 0, coordType, false);
+ }
+
+ private bool SetSizeAndPosition (int x, int y, int w, int h, Atk.CoordType coordType, bool setSize)
+ {
+ if (!widget.IsTopLevel) {
+ return false;
+ }
+
+ if (coordType == CoordType.Window) {
+ int x_off, y_off;
+ widget.GdkWindow.GetOrigin (out x_off, out y_off);
+ x += x_off;
+ y += y_off;
+
+ if (x < 0 || y < 0) {
+ return false;
+ }
+ }
+
+ #pragma warning disable 0612
+ widget.SetUposition (x, y);
+ #pragma warning restore 0612
+
+ if (setSize) {
+ widget.SetSizeRequest (w, h);
+ }
+
+ return true;
+ }
+
+ public bool SetSize (int w, int h)
+ {
+ if (widget.IsTopLevel) {
+ widget.SetSizeRequest (w, h);
+ return true;
+ } else {
+ return false;
+ }
+ }
+
+ public double Alpha {
+ get { return 1.0; }
+ }
+
+ #endregion Atk.Component
+
+ }
+#endif
+}
diff --git a/lib/Hyena/src/Hyena.Gui/Hyena.Gui/CairoDamageDebugger.cs b/lib/Hyena/src/Hyena.Gui/Hyena.Gui/CairoDamageDebugger.cs
new file mode 100644
index 0000000..8f35fa1
--- /dev/null
+++ b/lib/Hyena/src/Hyena.Gui/Hyena.Gui/CairoDamageDebugger.cs
@@ -0,0 +1,58 @@
+//
+// CairoDamageDebugger.cs
+//
+// Author:
+// Aaron Bockover <abockover at novell.com>
+//
+// Copyright 2010 Novell, Inc.
+//
+// Permission is hereby granted, free of charge, to any person obtaining
+// a copy of this software and associated documentation files (the
+// "Software"), to deal in the Software without restriction, including
+// without limitation the rights to use, copy, modify, merge, publish,
+// distribute, sublicense, and/or sell copies of the Software, and to
+// permit persons to whom the Software is furnished to do so, subject to
+// the following conditions:
+//
+// The above copyright notice and this permission notice shall be
+// included in all copies or substantial portions of the Software.
+//
+// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
+// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
+// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
+// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+//
+
+using System;
+using Cairo;
+
+namespace Hyena.Gui
+{
+ public static class CairoDamageDebugger
+ {
+ private static Random rand = new Random ();
+
+ public static void RenderDamage (this Context cr, Gdk.Rectangle damage)
+ {
+ RenderDamage (cr, damage.X, damage.Y, damage.Width, damage.Height);
+ }
+
+ public static void RenderDamage (this Context cr, Cairo.Rectangle damage)
+ {
+ RenderDamage (cr, damage.X, damage.Y, damage.Width, damage.Height);
+ }
+
+ public static void RenderDamage (this Context cr, double x, double y, double w, double h)
+ {
+ cr.Save ();
+ cr.LineWidth = 1.0;
+ cr.Color = CairoExtensions.RgbToColor ((uint)rand.Next (0, 0xffffff));
+ cr.Rectangle (x + 0.5, y + 0.5, w - 1, h - 1);
+ cr.Stroke ();
+ cr.Restore ();
+ }
+ }
+}
diff --git a/lib/Hyena/src/Hyena.Gui/Hyena.Gui/CairoExtensions.cs b/lib/Hyena/src/Hyena.Gui/Hyena.Gui/CairoExtensions.cs
new file mode 100644
index 0000000..80cc29d
--- /dev/null
+++ b/lib/Hyena/src/Hyena.Gui/Hyena.Gui/CairoExtensions.cs
@@ -0,0 +1,401 @@
+//
+// CairoExtensions.cs
+//
+// Author:
+// Aaron Bockover <abockover at novell.com>
+//
+// Copyright (C) 2007 Novell, Inc.
+//
+// Permission is hereby granted, free of charge, to any person obtaining
+// a copy of this software and associated documentation files (the
+// "Software"), to deal in the Software without restriction, including
+// without limitation the rights to use, copy, modify, merge, publish,
+// distribute, sublicense, and/or sell copies of the Software, and to
+// permit persons to whom the Software is furnished to do so, subject to
+// the following conditions:
+//
+// The above copyright notice and this permission notice shall be
+// included in all copies or substantial portions of the Software.
+//
+// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
+// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
+// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
+// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+//
+
+using System;
+using System.Reflection;
+using System.Runtime.InteropServices;
+
+using Gdk;
+using Cairo;
+
+namespace Hyena.Gui
+{
+ [Flags]
+ public enum CairoCorners
+ {
+ None = 0,
+ TopLeft = 1,
+ TopRight = 2,
+ BottomLeft = 4,
+ BottomRight = 8,
+ All = 15
+ }
+
+ public static class CairoExtensions
+ {
+ public static Pango.Layout CreateLayout (Gtk.Widget widget, Cairo.Context cairo_context)
+ {
+ Pango.Layout layout = PangoCairoHelper.CreateLayout (cairo_context);
+ layout.FontDescription = widget.PangoContext.FontDescription;
+
+ double resolution = widget.Screen.Resolution;
+ if (resolution != -1) {
+ Pango.Context context = PangoCairoHelper.LayoutGetContext (layout);
+ PangoCairoHelper.ContextSetResolution (context, resolution);
+ context.Dispose ();
+ }
+
+ Log.Debug ("Creating Pango.Layout, configuring Cairo.Context");
+
+ return layout;
+ }
+
+ public static Surface CreateSurfaceForPixbuf (Cairo.Context cr, Gdk.Pixbuf pixbuf)
+ {
+ Surface surface = cr.Target.CreateSimilar (cr.Target.Content, pixbuf.Width, pixbuf.Height);
+ Cairo.Context surface_cr = new Context (surface);
+ Gdk.CairoHelper.SetSourcePixbuf (surface_cr, pixbuf, 0, 0);
+ surface_cr.Paint ();
+ ((IDisposable)surface_cr).Dispose ();
+ return surface;
+ }
+
+ public static Cairo.Color AlphaBlend (Cairo.Color ca, Cairo.Color cb, double alpha)
+ {
+ return new Cairo.Color (
+ (1.0 - alpha) * ca.R + alpha * cb.R,
+ (1.0 - alpha) * ca.G + alpha * cb.G,
+ (1.0 - alpha) * ca.B + alpha * cb.B);
+ }
+
+ public static Cairo.Color GdkColorToCairoColor(Gdk.Color color)
+ {
+ return GdkColorToCairoColor(color, 1.0);
+ }
+
+ public static Cairo.Color GdkColorToCairoColor(Gdk.Color color, double alpha)
+ {
+ return new Cairo.Color(
+ (double)(color.Red >> 8) / 255.0,
+ (double)(color.Green >> 8) / 255.0,
+ (double)(color.Blue >> 8) / 255.0,
+ alpha);
+ }
+
+ public static Cairo.Color RgbToColor (uint rgbColor)
+ {
+ return RgbaToColor ((rgbColor << 8) | 0x000000ff);
+ }
+
+ public static Cairo.Color RgbaToColor (uint rgbaColor)
+ {
+ return new Cairo.Color (
+ (byte)(rgbaColor >> 24) / 255.0,
+ (byte)(rgbaColor >> 16) / 255.0,
+ (byte)(rgbaColor >> 8) / 255.0,
+ (byte)(rgbaColor & 0x000000ff) / 255.0);
+ }
+
+ public static bool ColorIsDark (Cairo.Color color)
+ {
+ double h, s, b;
+ HsbFromColor (color, out h, out s, out b);
+ return b < 0.5;
+ }
+
+ public static void HsbFromColor(Cairo.Color color, out double hue,
+ out double saturation, out double brightness)
+ {
+ double min, max, delta;
+ double red = color.R;
+ double green = color.G;
+ double blue = color.B;
+
+ hue = 0;
+ saturation = 0;
+ brightness = 0;
+
+ if(red > green) {
+ max = Math.Max(red, blue);
+ min = Math.Min(green, blue);
+ } else {
+ max = Math.Max(green, blue);
+ min = Math.Min(red, blue);
+ }
+
+ brightness = (max + min) / 2;
+
+ if(Math.Abs(max - min) < 0.0001) {
+ hue = 0;
+ saturation = 0;
+ } else {
+ saturation = brightness <= 0.5
+ ? (max - min) / (max + min)
+ : (max - min) / (2 - max - min);
+
+ delta = max - min;
+
+ if(red == max) {
+ hue = (green - blue) / delta;
+ } else if(green == max) {
+ hue = 2 + (blue - red) / delta;
+ } else if(blue == max) {
+ hue = 4 + (red - green) / delta;
+ }
+
+ hue *= 60;
+ if(hue < 0) {
+ hue += 360;
+ }
+ }
+ }
+
+ private static double Modula(double number, double divisor)
+ {
+ return ((int)number % divisor) + (number - (int)number);
+ }
+
+ public static Cairo.Color ColorFromHsb(double hue, double saturation, double brightness)
+ {
+ int i;
+ double [] hue_shift = { 0, 0, 0 };
+ double [] color_shift = { 0, 0, 0 };
+ double m1, m2, m3;
+
+ m2 = brightness <= 0.5
+ ? brightness * (1 + saturation)
+ : brightness + saturation - brightness * saturation;
+
+ m1 = 2 * brightness - m2;
+
+ hue_shift[0] = hue + 120;
+ hue_shift[1] = hue;
+ hue_shift[2] = hue - 120;
+
+ color_shift[0] = color_shift[1] = color_shift[2] = brightness;
+
+ i = saturation == 0 ? 3 : 0;
+
+ for(; i < 3; i++) {
+ m3 = hue_shift[i];
+
+ if(m3 > 360) {
+ m3 = Modula(m3, 360);
+ } else if(m3 < 0) {
+ m3 = 360 - Modula(Math.Abs(m3), 360);
+ }
+
+ if(m3 < 60) {
+ color_shift[i] = m1 + (m2 - m1) * m3 / 60;
+ } else if(m3 < 180) {
+ color_shift[i] = m2;
+ } else if(m3 < 240) {
+ color_shift[i] = m1 + (m2 - m1) * (240 - m3) / 60;
+ } else {
+ color_shift[i] = m1;
+ }
+ }
+
+ return new Cairo.Color(color_shift[0], color_shift[1], color_shift[2]);
+ }
+
+ public static Cairo.Color ColorShade (Cairo.Color @base, double ratio)
+ {
+ double h, s, b;
+
+ HsbFromColor (@base, out h, out s, out b);
+
+ b = Math.Max (Math.Min (b * ratio, 1), 0);
+ s = Math.Max (Math.Min (s * ratio, 1), 0);
+
+ Cairo.Color color = ColorFromHsb (h, s, b);
+ color.A = @base.A;
+ return color;
+ }
+
+ public static Cairo.Color ColorAdjustBrightness(Cairo.Color @base, double br)
+ {
+ double h, s, b;
+ HsbFromColor(@base, out h, out s, out b);
+ b = Math.Max(Math.Min(br, 1), 0);
+ return ColorFromHsb(h, s, b);
+ }
+
+ public static string ColorGetHex (Cairo.Color color, bool withAlpha)
+ {
+ if (withAlpha) {
+ return String.Format("#{0:x2}{1:x2}{2:x2}{3:x2}", (byte)(color.R * 255), (byte)(color.G * 255),
+ (byte)(color.B * 255), (byte)(color.A * 255));
+ } else {
+ return String.Format("#{0:x2}{1:x2}{2:x2}", (byte)(color.R * 255), (byte)(color.G * 255),
+ (byte)(color.B * 255));
+ }
+ }
+
+ public static void RoundedRectangle(Cairo.Context cr, double x, double y, double w, double h, double r)
+ {
+ RoundedRectangle(cr, x, y, w, h, r, CairoCorners.All, false);
+ }
+
+ public static void RoundedRectangle(Cairo.Context cr, double x, double y, double w, double h,
+ double r, CairoCorners corners)
+ {
+ RoundedRectangle(cr, x, y, w, h, r, corners, false);
+ }
+
+ public static void RoundedRectangle(Cairo.Context cr, double x, double y, double w, double h,
+ double r, CairoCorners corners, bool topBottomFallsThrough)
+ {
+ if(topBottomFallsThrough && corners == CairoCorners.None) {
+ cr.MoveTo(x, y - r);
+ cr.LineTo(x, y + h + r);
+ cr.MoveTo(x + w, y - r);
+ cr.LineTo(x + w, y + h + r);
+ return;
+ } else if(r < 0.0001 || corners == CairoCorners.None) {
+ cr.Rectangle(x, y, w, h);
+ return;
+ }
+
+ if((corners & (CairoCorners.TopLeft | CairoCorners.TopRight)) == 0 && topBottomFallsThrough) {
+ y -= r;
+ h += r;
+ cr.MoveTo(x + w, y);
+ } else {
+ if((corners & CairoCorners.TopLeft) != 0) {
+ cr.MoveTo(x + r, y);
+ } else {
+ cr.MoveTo(x, y);
+ }
+
+ if((corners & CairoCorners.TopRight) != 0) {
+ cr.Arc(x + w - r, y + r, r, Math.PI * 1.5, Math.PI * 2);
+ } else {
+ cr.LineTo(x + w, y);
+ }
+ }
+
+ if((corners & (CairoCorners.BottomLeft | CairoCorners.BottomRight)) == 0 && topBottomFallsThrough) {
+ h += r;
+ cr.LineTo(x + w, y + h);
+ cr.MoveTo(x, y + h);
+ cr.LineTo(x, y + r);
+ cr.Arc(x + r, y + r, r, Math.PI, Math.PI * 1.5);
+ } else {
+ if((corners & CairoCorners.BottomRight) != 0) {
+ cr.Arc(x + w - r, y + h - r, r, 0, Math.PI * 0.5);
+ } else {
+ cr.LineTo(x + w, y + h);
+ }
+
+ if((corners & CairoCorners.BottomLeft) != 0) {
+ cr.Arc(x + r, y + h - r, r, Math.PI * 0.5, Math.PI);
+ } else {
+ cr.LineTo(x, y + h);
+ }
+
+ if((corners & CairoCorners.TopLeft) != 0) {
+ cr.Arc(x + r, y + r, r, Math.PI, Math.PI * 1.5);
+ } else {
+ cr.LineTo(x, y);
+ }
+ }
+ }
+
+ public static void DisposeContext (Cairo.Context cr)
+ {
+ ((IDisposable)cr.Target).Dispose ();
+ ((IDisposable)cr).Dispose ();
+ }
+
+ private struct CairoInteropCall
+ {
+ public string Name;
+ public MethodInfo ManagedMethod;
+ public bool CallNative;
+
+ public CairoInteropCall (string name)
+ {
+ Name = name;
+ ManagedMethod = null;
+ CallNative = false;
+ }
+ }
+
+ private static bool CallCairoMethod (Cairo.Context cr, ref CairoInteropCall call)
+ {
+ if (call.ManagedMethod == null && !call.CallNative) {
+ MemberInfo [] members = typeof (Cairo.Context).GetMember (call.Name, MemberTypes.Method,
+ BindingFlags.InvokeMethod | BindingFlags.Instance | BindingFlags.Public);
+
+ if (members != null && members.Length > 0 && members[0] is MethodInfo) {
+ call.ManagedMethod = (MethodInfo)members[0];
+ } else {
+ call.CallNative = true;
+ }
+ }
+
+ if (call.ManagedMethod != null) {
+ call.ManagedMethod.Invoke (cr, null);
+ return true;
+ }
+
+ return false;
+ }
+
+ private static bool native_push_pop_exists = true;
+
+ [DllImport ("libcairo-2.dll")]
+ private static extern void cairo_push_group (IntPtr ptr);
+ private static CairoInteropCall cairo_push_group_call = new CairoInteropCall ("PushGroup");
+
+ public static void PushGroup (Cairo.Context cr)
+ {
+ if (!native_push_pop_exists) {
+ return;
+ }
+
+ try {
+ if (!CallCairoMethod (cr, ref cairo_push_group_call)) {
+ cairo_push_group (cr.Handle);
+ }
+ } catch {
+ native_push_pop_exists = false;
+ }
+ }
+
+ [DllImport ("libcairo-2.dll")]
+ private static extern void cairo_pop_group_to_source (IntPtr ptr);
+ private static CairoInteropCall cairo_pop_group_to_source_call = new CairoInteropCall ("PopGroupToSource");
+
+ public static void PopGroupToSource (Cairo.Context cr)
+ {
+ if (!native_push_pop_exists) {
+ return;
+ }
+
+ try {
+ if (!CallCairoMethod (cr, ref cairo_pop_group_to_source_call)) {
+ cairo_pop_group_to_source (cr.Handle);
+ }
+ } catch (EntryPointNotFoundException) {
+ native_push_pop_exists = false;
+ }
+ }
+ }
+}
diff --git a/lib/Hyena/src/Hyena.Gui/Hyena.Gui/CleanRoomStartup.cs b/lib/Hyena/src/Hyena.Gui/Hyena.Gui/CleanRoomStartup.cs
new file mode 100644
index 0000000..9f96b51
--- /dev/null
+++ b/lib/Hyena/src/Hyena.Gui/Hyena.Gui/CleanRoomStartup.cs
@@ -0,0 +1,67 @@
+//
+// CleanRoomStartup.cs
+//
+// Author:
+// Aaron Bockover <abockover at novell.com>
+//
+// Copyright (C) 2006-2007 Novell, Inc.
+//
+// Permission is hereby granted, free of charge, to any person obtaining
+// a copy of this software and associated documentation files (the
+// "Software"), to deal in the Software without restriction, including
+// without limitation the rights to use, copy, modify, merge, publish,
+// distribute, sublicense, and/or sell copies of the Software, and to
+// permit persons to whom the Software is furnished to do so, subject to
+// the following conditions:
+//
+// The above copyright notice and this permission notice shall be
+// included in all copies or substantial portions of the Software.
+//
+// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
+// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
+// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
+// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+//
+
+using System;
+
+namespace Hyena.Gui
+{
+ public static class CleanRoomStartup
+ {
+ public delegate void StartupInvocationHandler();
+
+ public static void Startup(StartupInvocationHandler startup)
+ {
+ bool disable_clean_room = false;
+
+ foreach(string arg in Environment.GetCommandLineArgs ()) {
+ if(arg == "--disable-clean-room") {
+ disable_clean_room = true;
+ break;
+ }
+ }
+
+ if(disable_clean_room) {
+ startup();
+ return;
+ }
+
+ try {
+ startup();
+ } catch(Exception e) {
+ Console.WriteLine(e.Message);
+ Console.WriteLine(e);
+
+ Gtk.Application.Init();
+ Hyena.Gui.Dialogs.ExceptionDialog dialog = new Hyena.Gui.Dialogs.ExceptionDialog(e);
+ dialog.Run();
+ dialog.Destroy();
+ System.Environment.Exit(1);
+ }
+ }
+ }
+}
diff --git a/lib/Hyena/src/Hyena.Gui/Hyena.Gui/CompositeUtils.cs b/lib/Hyena/src/Hyena.Gui/Hyena.Gui/CompositeUtils.cs
new file mode 100644
index 0000000..4d93bb8
--- /dev/null
+++ b/lib/Hyena/src/Hyena.Gui/Hyena.Gui/CompositeUtils.cs
@@ -0,0 +1,161 @@
+//
+// CompositeUtils.cs
+//
+// Author:
+// Larry Ewing <lewing at novell.com>
+//
+// Copyright (C) 2007-2008 Novell, Inc.
+//
+// Permission is hereby granted, free of charge, to any person obtaining
+// a copy of this software and associated documentation files (the
+// "Software"), to deal in the Software without restriction, including
+// without limitation the rights to use, copy, modify, merge, publish,
+// distribute, sublicense, and/or sell copies of the Software, and to
+// permit persons to whom the Software is furnished to do so, subject to
+// the following conditions:
+//
+// The above copyright notice and this permission notice shall be
+// included in all copies or substantial portions of the Software.
+//
+// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
+// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
+// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
+// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+//
+
+using System;
+using System.Runtime.InteropServices;
+using Gdk;
+using Gtk;
+
+namespace Hyena.Gui
+{
+ public static class CompositeUtils
+ {
+ [DllImport ("libgdk-win32-2.0-0.dll")]
+ private static extern IntPtr gdk_screen_get_rgba_visual (IntPtr screen);
+
+ [DllImport ("libgtk-win32-2.0-0.dll")]
+ private static extern void gtk_widget_input_shape_combine_mask (IntPtr raw, IntPtr shape_mask,
+ int offset_x, int offset_y);
+
+ [DllImport ("libgdk-win32-2.0-0.dll")]
+ private static extern IntPtr gdk_screen_get_rgba_colormap (IntPtr screen);
+
+ public static Colormap GetRgbaColormap (Screen screen)
+ {
+ try {
+ IntPtr raw_ret = gdk_screen_get_rgba_colormap (screen.Handle);
+ Gdk.Colormap ret = GLib.Object.GetObject(raw_ret) as Gdk.Colormap;
+ return ret;
+ } catch {
+ Gdk.Visual visual = Gdk.Visual.GetBestWithDepth (32);
+ if (visual != null) {
+ Gdk.Colormap cmap = new Gdk.Colormap (visual, false);
+ return cmap;
+ }
+ }
+
+ return null;
+ }
+
+ public static bool SetRgbaColormap (Widget w)
+ {
+ Gdk.Colormap cmap = GetRgbaColormap (w.Screen);
+
+ if (cmap != null) {
+ w.Colormap = cmap;
+ return true;
+ }
+
+ return false;
+ }
+
+ public static Visual GetRgbaVisual (Screen screen)
+ {
+ try {
+ IntPtr raw_ret = gdk_screen_get_rgba_visual (screen.Handle);
+ Gdk.Visual ret = GLib.Object.GetObject (raw_ret) as Gdk.Visual;
+ return ret;
+ } catch {
+ Gdk.Visual visual = Gdk.Visual.GetBestWithDepth (32);
+ if (visual != null) {
+ return visual;
+ }
+ }
+ return null;
+ }
+
+ [DllImport ("libgdk-win32-2.0-0.dll")]
+ private static extern void gdk_property_change (IntPtr window, IntPtr property, IntPtr type,
+ int format, int mode, uint [] data, int nelements);
+
+ [DllImport ("libgdk-win32-2.0-0.dll")]
+ private static extern void gdk_property_change (IntPtr window, IntPtr property, IntPtr type,
+ int format, int mode, byte [] data, int nelements);
+
+ public static void ChangeProperty (Gdk.Window win, Atom property, Atom type, PropMode mode, uint [] data)
+ {
+ gdk_property_change (win.Handle, property.Handle, type.Handle, 32, (int)mode, data, data.Length * 4);
+ }
+
+ public static void ChangeProperty (Gdk.Window win, Atom property, Atom type, PropMode mode, byte [] data)
+ {
+ gdk_property_change (win.Handle, property.Handle, type.Handle, 8, (int)mode, data, data.Length);
+ }
+
+ [DllImport ("libgdk-win32-2.0-0.dll")]
+ private static extern bool gdk_x11_screen_supports_net_wm_hint (IntPtr screen, IntPtr property);
+
+ public static bool SupportsHint (Screen screen, string name)
+ {
+ try {
+ Atom atom = Atom.Intern (name, false);
+ return gdk_x11_screen_supports_net_wm_hint (screen.Handle, atom.Handle);
+ } catch {
+ return false;
+ }
+ }
+
+ [DllImport ("libgdk-win32-2.0-0.dll")]
+ private static extern bool gdk_screen_is_composited (IntPtr screen);
+
+ public static bool IsComposited (Screen screen)
+ {
+ bool composited;
+ try {
+ composited = gdk_screen_is_composited (screen.Handle);
+ } catch (EntryPointNotFoundException) {
+ Atom atom = Atom.Intern (String.Format ("_NET_WM_CM_S{0}", screen.Number), false);
+ composited = Gdk.Selection.OwnerGetForDisplay (screen.Display, atom) != null;
+ }
+
+ // FIXME check for WINDOW_OPACITY so that we support compositing on older composite manager
+ // versions before they started supporting the real check given above
+ if (!composited) {
+ composited = CompositeUtils.SupportsHint (screen, "_NET_WM_WINDOW_OPACITY");
+ }
+
+ return composited;
+ }
+
+ public static void SetWinOpacity (Gtk.Window win, double opacity)
+ {
+ CompositeUtils.ChangeProperty (win.GdkWindow,
+ Atom.Intern ("_NET_WM_WINDOW_OPACITY", false),
+ Atom.Intern ("CARDINAL", false),
+ PropMode.Replace,
+ new uint [] { (uint) (0xffffffff * opacity) }
+ );
+ }
+
+ public static void InputShapeCombineMask (Widget w, Pixmap shape_mask, int offset_x, int offset_y)
+ {
+ gtk_widget_input_shape_combine_mask (w.Handle, shape_mask == null ? IntPtr.Zero : shape_mask.Handle,
+ offset_x, offset_y);
+ }
+ }
+}
diff --git a/lib/Hyena/src/Hyena.Gui/Hyena.Gui/Contrast.cs b/lib/Hyena/src/Hyena.Gui/Hyena.Gui/Contrast.cs
new file mode 100644
index 0000000..3b86921
--- /dev/null
+++ b/lib/Hyena/src/Hyena.Gui/Hyena.Gui/Contrast.cs
@@ -0,0 +1,331 @@
+//
+// Contrast.cs
+//
+// Authors:
+// David Trowbridge
+// Sebastian Dröge <slomo at circular-chaos.org>
+//
+// Copyright (C) 2006-2007 David Trowbridge
+// Copyright (C) 2008 Sebastian Dröge
+//
+// Permission is hereby granted, free of charge, to any person obtaining
+// a copy of this software and associated documentation files (the
+// "Software"), to deal in the Software without restriction, including
+// without limitation the rights to use, copy, modify, merge, publish,
+// distribute, sublicense, and/or sell copies of the Software, and to
+// permit persons to whom the Software is furnished to do so, subject to
+// the following conditions:
+//
+// The above copyright notice and this permission notice shall be
+// included in all copies or substantial portions of the Software.
+//
+// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
+// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
+// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
+// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+//
+
+using System;
+using Cairo;
+
+namespace Hyena.Gui
+{
+ /* Defined colors. Keep this list alphabetized if you add new ones,
+ * but set the enum value to be at the end of the color_regions table
+ * in contrast.c to maintain binary compatibility
+ */
+
+ public enum ContrastPaletteColor
+ {
+ Aqua = 0,
+ Black = 1,
+ Blue = 2,
+ Brown = 3,
+ Cyan = 4,
+ DarkBlue = 5,
+ DarkGreen = 6,
+ DarkGrey = 7,
+ DarkRed = 8,
+ Green = 9,
+ Grey = 10,
+ LightBlue = 11,
+ LightBrown = 12,
+ LightGreen = 13,
+ LightGrey = 14,
+ LightRed = 15,
+ Magenta = 16,
+ Orange = 17,
+ Purple = 18,
+ Red = 19,
+ Violet = 20,
+ White = 21,
+ Yellow = 22,
+ Last = 23
+ };
+
+ public static class Contrast
+ {
+
+ /* Data for color palette optimization.
+ *
+ * These numbers are completely arbitrary decisions, uninformed by the experts
+ * at crayola. These colors are defined as boxes within the CIE L*a*b* color
+ * space -- while they're not fully inclusive, they are "safe" in that anywhere
+ * within a given region is guaranteed to be the expected color. The data here
+ * are endpoints in each dimension of CIELAB, from which the 8 corners of the
+ * region are created to test.
+ *
+ * Add new entries to the end of this list.
+ */
+ private static readonly float[,] color_regions = {
+ {40.0f, 60.0f, -100.0f, -80.0f, -10.0f, 20.0f}, /* Aqua */
+ { 0.0f, 30.0f, 0.0f, 0.0f, 0.0f, 0.0f}, /* Black */
+ {25.0f, 35.0f, -100.0f, 0.0f, -100.0f, -50.0f}, /* Blue */
+ {30.0f, 60.0f, 30.0f, 50.0f, 70.0f, 100.0f}, /* Brown */
+ {50.0f, 65.0f, -100.0f, -30.0f, -100.0f, -50.0f}, /* Cyan */
+ { 0.0f, 20.0f, -40.0f, 50.0f, -100.0f, -60.0f}, /* Dark Blue */
+ {20.0f, 35.0f, -100.0f, -70.0f, 60.0f, 100.0f}, /* Dark Green */
+ {20.0f, 40.0f, 0.0f, 0.0f, 0.0f, 0.0f}, /* Dark Grey */
+ {10.0f, 40.0f, 90.0f, 100.0f, 70.0f, 100.0f}, /* Dark Red */
+ {15.0f, 40.0f, -100.0f, -80.0f, 80.0f, 100.0f}, /* Green */
+ {35.0f, 60.0f, 0.0f, 0.0f, 0.0f, 0.0f}, /* Grey */
+ {40.0f, 50.0f, -100.0f, 0.0f, -100.0f, -60.0f}, /* Light Blue */
+ {60.0f, 75.0f, 30.0f, 50.0f, 80.0f, 100.0f}, /* Light Brown */
+ {80.0f, 90.0f, -100.0f, -70.0f, 70.0f, 100.0f}, /* Light Green */
+ {50.0f, 80.0f, 0.0f, 0.0f, 0.0f, 0.0f}, /* Light Grey */
+ {55.0f, 65.0f, 80.0f, 90.0f, 75.0f, 100.0f}, /* Light Red */
+ {40.0f, 55.0f, 90.0f, 100.0f, -50.0f, 0.0f}, /* Magenta */
+ {65.0f, 80.0f, 20.0f, 65.0f, 90.0f, 100.0f}, /* Orange */
+ {35.0f, 45.0f, 85.0f, 100.0f, -90.0f, -80.0f}, /* Purple */
+ {40.0f, 50.0f, 80.0f, 100.0f, 75.0f, 100.0f}, /* Red */
+ {70.0f, 95.0f, 90.0f, 100.0f, -100.0f, 0.0f}, /* Violet */
+ {75.0f, 100.0f, 0.0f, 0.0f, 0.0f, 0.0f}, /* White */
+ {90.0f, 100.0f, 5.0f, 15.0f, 92.5f, 105.0f}, /* Yellow */
+ };
+
+ /* This performs the non-linear transformation that accounts for the gamma curve
+ * in sRGB, but avoids numerical problems.
+ */
+
+ private static float srgb_to_xyz_g (float K)
+ {
+ const float a = 0.055f;
+ const float gamma = 2.4f;
+
+
+ if (K > 0.04045f)
+ return (float) Math.Pow((K + a) / (1 + a), gamma);
+ else
+ return K / 12.92f;
+ }
+
+ private static float xyz_to_lab_f(float t)
+ {
+ if (t > 0.008856f)
+ return (float) Math.Pow(t, 1.0f/3.0f);
+ else
+ return 7.787f*t + 16.0f/116.0f;
+ }
+
+ private static void rgb_to_lab(ushort R, ushort G, ushort B, out float L, out float a, out float b)
+ {
+ float x, y, z, gr, gg, gb, fy;
+
+ /* This is the reference white point. Since we're treating "RGB" as
+ * sRGB, this is the D65 point.
+ */
+
+ const float Xn = 0.93819f;
+ const float Yn = 0.98705f;
+ const float Zn = 1.07475f;
+
+ gr = srgb_to_xyz_g(R / 65535.0f);
+ gg = srgb_to_xyz_g(G / 65535.0f);
+ gb = srgb_to_xyz_g(B / 65535.0f);
+
+ x = 0.412424f * gr + 0.357579f * gg + 0.180464f * gb;
+ y = 0.212656f * gr + 0.715158f * gg + 0.072186f * gb;
+ z = 0.019332f * gr + 0.119193f * gg + 0.950444f * gb;
+
+ fy = xyz_to_lab_f(y / Yn);
+
+ L = 116.0f * fy - 16.0f;
+ a = 500.0f * (xyz_to_lab_f(x / Xn) - fy);
+ b = 200.0f * (fy - xyz_to_lab_f(z / Zn));
+ }
+
+ private static float xyz_to_srgb_C(float K)
+ {
+ const float a = 0.055f;
+ const float gamma = 2.4f;
+
+
+ if (K > 0.00304f)
+ return (1.0f + a) * ((float) Math.Pow(K, (1.0f / gamma))) - a;
+ else
+ return K * 12.92f;
+ }
+
+ private static void lab_to_rgb(float L, float a, float b, out ushort R, out ushort G, out ushort B)
+ {
+ float x, y, z, fy, fx, fz, delta, delta2, rs, gs, bs;
+
+ const float Xn = 0.93819f;
+ const float Yn = 0.98705f;
+ const float Zn = 1.07475f;
+
+ fy = (L + 16.0f) / 116.0f;
+ fx = fy + a / 500.0f;
+ fz = fy - b / 200.0f;
+ delta = 6.0f / 29.0f;
+ delta2 = (float) Math.Pow(delta, 2.0f);
+
+ if (fx > delta)
+ x = Xn * ((float) Math.Pow(fx, 3.0f));
+ else
+ x = (fx - 16.0f/116.0f) * 3.0f * delta2 * Xn;
+
+ if (fy > delta)
+ y = Yn * ((float) Math.Pow(fy, 3.0f));
+ else
+ y = (fy - 16.0f/116.0f) * 3.0f * delta2 * Yn;
+
+
+ if (fz > delta)
+ z = Zn * ((float) Math.Pow(fz, 3.0f));
+ else
+ z = (fz - 16.0f/116.0f) * 3.0f * delta2 * Zn;
+
+
+ rs = 3.2410f * x - 1.5374f * y - 0.4986f * z;
+ gs = -0.9692f * x + 1.8760f * y + 0.0416f * z;
+ bs = 0.0556f * x - 0.2040f * y + 1.0570f * z;
+
+ float tmp;
+ tmp = (float) Math.Floor(xyz_to_srgb_C(rs) * 65535.0f + 0.5f);
+ if (tmp < 0.0f)
+ R = 0;
+ else if (tmp > 65535.0f)
+ R = 65535;
+ else
+ R = (ushort) tmp;
+
+ tmp = (float) Math.Floor(xyz_to_srgb_C(gs) * 65535.0f + 0.5f);
+ if (tmp < 0.0f)
+ G = 0;
+ else if (tmp > 65535.0f)
+ G = 65535;
+ else
+ G = (ushort) tmp;
+
+ tmp = (float) Math.Floor(xyz_to_srgb_C(bs) * 65535.0f + 0.5f);
+ if (tmp < 0.0f)
+ B = 0;
+ else if (tmp > 65535.0f)
+ B = 65535;
+ else
+ B = (ushort) tmp;
+ }
+
+ private static float lab_distance(float La, float aa, float ba, float Lb, float ab, float bb)
+ {
+ float dL, da, db;
+
+ dL = Math.Abs(Lb - La);
+ da = Math.Abs(ab - aa);
+ db = Math.Abs(bb - ba);
+
+ return (float) Math.Sqrt(dL*dL + da*da + db*db);
+ }
+
+ /* Creates a specific color value for a foreground color, optimizing for
+ * maximum readability against the background.
+ */
+
+ public static Color RenderForegroundColor(Color background, ContrastPaletteColor color)
+ {
+ float L, a, b;
+ int max_color;
+ float max_dist;
+ float[,] points = new float[8,3];
+ float ld, cd;
+ int i;
+
+ rgb_to_lab((ushort)(background.R * 255), (ushort)(background.G * 255),
+ (ushort)(background.B * 255), out L, out a, out b);
+
+ points[0,0] = color_regions[(int)color,0];
+ points[0,1] = color_regions[(int)color,2];
+ points[0,2] = color_regions[(int)color,4];
+
+ points[1,0] = color_regions[(int)color,0];
+ points[1,1] = color_regions[(int)color,2];
+ points[1,2] = color_regions[(int)color,5];
+
+ points[2,0] = color_regions[(int)color,0];
+ points[2,1] = color_regions[(int)color,3];
+ points[2,2] = color_regions[(int)color,4];
+
+ points[3,0] = color_regions[(int)color,0];
+ points[3,1] = color_regions[(int)color,3];
+ points[3,2] = color_regions[(int)color,5];
+
+ points[4,0] = color_regions[(int)color,1];
+ points[4,1] = color_regions[(int)color,2];
+ points[4,2] = color_regions[(int)color,4];
+
+ points[5,0] = color_regions[(int)color,1];
+ points[5,1] = color_regions[(int)color,2];
+ points[5,2] = color_regions[(int)color,5];
+
+ points[6,0] = color_regions[(int)color,1];
+ points[6,1] = color_regions[(int)color,3];
+ points[6,2] = color_regions[(int)color,4];
+
+ points[7,0] = color_regions[(int)color,1];
+ points[7,1] = color_regions[(int)color,3];
+ points[7,2] = color_regions[(int)color,5];
+
+ max_dist = 0;
+ max_color = 0;
+
+ for (i = 0; i < 8; i++) {
+ float dist = lab_distance(L, a, b, points[i,0], points[i,1], points[i,2]);
+
+ if (dist > max_dist) {
+ max_dist = dist;
+ max_color = i;
+ }
+ }
+
+ /* If the luminosity distance is really short, extend the vector further
+ * out. This may push it outside the bounds of the region that a color
+ * is specified in, but it keeps things readable when the background and
+ * foreground are really close.
+ */
+
+ ld = Math.Abs(L - points[max_color,0]);
+ cd = (float) Math.Sqrt (Math.Pow (Math.Abs (a - points[max_color,1]), 2.0f) + Math.Pow (Math.Abs (b - points[max_color,2]), 2.0f));
+
+ if ((ld < 10.0f) && (cd < 60.0f)) {
+ float dL, da, db;
+
+ dL = points[max_color,0] - L;
+ da = points[max_color,1] - a;
+ db = points[max_color,2] - b;
+ points[max_color,0] = L + (dL * 4.0f);
+ points[max_color,1] = a + (da * 1.5f);
+ points[max_color,2] = b + (db * 1.5f);
+ }
+
+ ushort red, green, blue;
+
+ lab_to_rgb(points[max_color,0], points[max_color,1], points[max_color,2], out red, out green, out blue);
+
+ return new Color (red / 255.0, green / 255.0, blue / 255.0);
+ }
+ }
+}
diff --git a/lib/Hyena/src/Hyena.Gui/Hyena.Gui/DragDropList.cs b/lib/Hyena/src/Hyena.Gui/Hyena.Gui/DragDropList.cs
new file mode 100644
index 0000000..d3d297a
--- /dev/null
+++ b/lib/Hyena/src/Hyena.Gui/Hyena.Gui/DragDropList.cs
@@ -0,0 +1,86 @@
+//
+// DragDropList.cs
+//
+// Author:
+// Aaron Bockover <abockover at novell.com>
+//
+// Copyright (C) 2005-2007 Novell, Inc.
+//
+// Permission is hereby granted, free of charge, to any person obtaining
+// a copy of this software and associated documentation files (the
+// "Software"), to deal in the Software without restriction, including
+// without limitation the rights to use, copy, modify, merge, publish,
+// distribute, sublicense, and/or sell copies of the Software, and to
+// permit persons to whom the Software is furnished to do so, subject to
+// the following conditions:
+//
+// The above copyright notice and this permission notice shall be
+// included in all copies or substantial portions of the Software.
+//
+// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
+// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
+// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
+// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+//
+
+using System;
+using System.Text;
+using System.Collections;
+using System.Collections.Generic;
+using System.Runtime.InteropServices;
+using Gtk;
+
+namespace Hyena.Gui
+{
+ public class DragDropList<T> : List<T>
+ {
+ public DragDropList() : base()
+ {
+ }
+
+ public DragDropList(T o) : base()
+ {
+ Add(o);
+ }
+
+ public DragDropList(T o, Gtk.SelectionData selectionData, Gdk.Atom target) : base()
+ {
+ Add(o);
+ AssignToSelection(selectionData, target);
+ }
+
+ public void AssignToSelection(Gtk.SelectionData selectionData, Gdk.Atom target)
+ {
+ byte [] data = this;
+ selectionData.Set(target, 8, data, data.Length);
+ }
+
+ public static implicit operator byte [](DragDropList<T> transferrable)
+ {
+ IntPtr handle = (IntPtr)GCHandle.Alloc(transferrable);
+ return System.Text.Encoding.ASCII.GetBytes(Convert.ToString(handle));
+ }
+
+ public static implicit operator DragDropList<T>(byte [] transferrable)
+ {
+ try {
+ string str_handle = System.Text.Encoding.ASCII.GetString(transferrable);
+ IntPtr handle_ptr = (IntPtr)Convert.ToInt64(str_handle);
+ GCHandle handle = (GCHandle)handle_ptr;
+ DragDropList<T> o = (DragDropList<T>)handle.Target;
+ handle.Free();
+ return o;
+ } catch {
+ return null;
+ }
+ }
+
+ public static implicit operator DragDropList<T>(Gtk.SelectionData transferrable)
+ {
+ return transferrable.Data;
+ }
+ }
+}
diff --git a/lib/Hyena/src/Hyena.Gui/Hyena.Gui/EditableEraseAction.cs b/lib/Hyena/src/Hyena.Gui/Hyena.Gui/EditableEraseAction.cs
new file mode 100644
index 0000000..e2883d4
--- /dev/null
+++ b/lib/Hyena/src/Hyena.Gui/Hyena.Gui/EditableEraseAction.cs
@@ -0,0 +1,101 @@
+//
+// EditableEraseAction.cs
+//
+// Author:
+// Aaron Bockover <abockover at novell.com>
+//
+// Copyright (C) 2007-2008 Novell, Inc.
+//
+// Permission is hereby granted, free of charge, to any person obtaining
+// a copy of this software and associated documentation files (the
+// "Software"), to deal in the Software without restriction, including
+// without limitation the rights to use, copy, modify, merge, publish,
+// distribute, sublicense, and/or sell copies of the Software, and to
+// permit persons to whom the Software is furnished to do so, subject to
+// the following conditions:
+//
+// The above copyright notice and this permission notice shall be
+// included in all copies or substantial portions of the Software.
+//
+// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
+// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
+// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
+// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+//
+
+using System;
+using Gtk;
+
+using Hyena;
+
+namespace Hyena.Gui
+{
+ internal class EditableEraseAction : IUndoAction
+ {
+ private Editable editable;
+ private string text;
+ private int start;
+ private int end;
+ private bool is_forward;
+ private bool is_cut;
+
+ public EditableEraseAction (Editable editable, int start, int end)
+ {
+ this.editable = editable;
+ this.text = editable.GetChars (start, end);
+ this.start = start;
+ this.end = end;
+ this.is_cut = end - start > 1;
+ this.is_forward = editable.Position < start;
+ }
+
+ public void Undo ()
+ {
+ int start_r = start;
+ editable.InsertText (text, ref start_r);
+ editable.Position = is_forward ? start_r : end;
+ }
+
+ public void Redo ()
+ {
+ editable.DeleteText (start, end);
+ editable.Position = start;
+ }
+
+ public void Merge (IUndoAction action)
+ {
+ EditableEraseAction erase = (EditableEraseAction)action;
+ if (start == erase.start) {
+ text += erase.text;
+ end += erase.end - erase.start;
+ } else {
+ text = erase.text + text;
+ start = erase.start;
+ }
+ }
+
+ public bool CanMerge (IUndoAction action)
+ {
+ EditableEraseAction erase = action as EditableEraseAction;
+ if (erase == null) {
+ return false;
+ }
+
+ return !(
+ is_cut || erase.is_cut || // don't group separate text cuts
+ start != (is_forward ? erase.start : erase.end) || // must meet eachother
+ is_forward != erase.is_forward || // don't group deletes with backspaces
+ text[0] == '\n' || // don't group more than one line (inclusive)
+ erase.text[0] == ' ' || erase.text[0] == '\t' // don't group more than one word (exclusive)
+ );
+ }
+
+ public override string ToString ()
+ {
+ return String.Format ("Erased: [{0}] ({1},{2})", text, start, end);
+ }
+ }
+}
diff --git a/lib/Hyena/src/Hyena.Gui/Hyena.Gui/EditableInsertAction.cs b/lib/Hyena/src/Hyena.Gui/Hyena.Gui/EditableInsertAction.cs
new file mode 100644
index 0000000..d19a4e3
--- /dev/null
+++ b/lib/Hyena/src/Hyena.Gui/Hyena.Gui/EditableInsertAction.cs
@@ -0,0 +1,89 @@
+//
+// EditableInsertAction.cs
+//
+// Author:
+// Aaron Bockover <abockover at novell.com>
+//
+// Copyright (C) 2007-2008 Novell, Inc.
+//
+// Permission is hereby granted, free of charge, to any person obtaining
+// a copy of this software and associated documentation files (the
+// "Software"), to deal in the Software without restriction, including
+// without limitation the rights to use, copy, modify, merge, publish,
+// distribute, sublicense, and/or sell copies of the Software, and to
+// permit persons to whom the Software is furnished to do so, subject to
+// the following conditions:
+//
+// The above copyright notice and this permission notice shall be
+// included in all copies or substantial portions of the Software.
+//
+// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
+// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
+// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
+// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+//
+
+using System;
+using Gtk;
+
+using Hyena;
+
+namespace Hyena.Gui
+{
+ internal class EditableInsertAction : IUndoAction
+ {
+ private Editable editable;
+ private string text;
+ private int index;
+ private bool is_paste;
+
+ public EditableInsertAction (Editable editable, int start, string text, int length)
+ {
+ this.editable = editable;
+ this.text = text;
+ this.index = start;
+ this.is_paste = length > 1;
+ }
+
+ public void Undo ()
+ {
+ editable.DeleteText (index, index + text.Length);
+ editable.Position = index;
+ }
+
+ public void Redo ()
+ {
+ int index_r = index;
+ editable.InsertText (text, ref index_r);
+ editable.Position = index_r;
+ }
+
+ public void Merge (IUndoAction action)
+ {
+ text += ((EditableInsertAction)action).text;
+ }
+
+ public bool CanMerge (IUndoAction action)
+ {
+ EditableInsertAction insert = action as EditableInsertAction;
+ if (insert == null || String.IsNullOrEmpty (text)) {
+ return false;
+ }
+
+ return !(
+ is_paste || insert.is_paste || // Don't group text pastes
+ insert.index != index + text.Length || // Must meet eachother
+ text[0] == '\n' || // Don't group more than one line (inclusive)
+ insert.text[0] == ' ' || insert.text[0] == '\t' // Don't group more than one word (exclusive)
+ );
+ }
+
+ public override string ToString ()
+ {
+ return String.Format ("Inserted: [{0}] ({1})", text, index);
+ }
+ }
+}
diff --git a/lib/Hyena/src/Hyena.Gui/Hyena.Gui/EditableUndoAdapter.cs b/lib/Hyena/src/Hyena.Gui/Hyena.Gui/EditableUndoAdapter.cs
new file mode 100644
index 0000000..fdd171d
--- /dev/null
+++ b/lib/Hyena/src/Hyena.Gui/Hyena.Gui/EditableUndoAdapter.cs
@@ -0,0 +1,146 @@
+//
+// EditableUndoAdapter.cs
+//
+// Author:
+// Aaron Bockover <abockover at novell.com>
+//
+// Copyright (C) 2007-2008 Novell, Inc.
+//
+// Permission is hereby granted, free of charge, to any person obtaining
+// a copy of this software and associated documentation files (the
+// "Software"), to deal in the Software without restriction, including
+// without limitation the rights to use, copy, modify, merge, publish,
+// distribute, sublicense, and/or sell copies of the Software, and to
+// permit persons to whom the Software is furnished to do so, subject to
+// the following conditions:
+//
+// The above copyright notice and this permission notice shall be
+// included in all copies or substantial portions of the Software.
+//
+// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
+// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
+// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
+// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+//
+
+using System;
+using System.Reflection;
+using Gtk;
+
+using Hyena;
+
+namespace Hyena.Gui
+{
+ public class EditableUndoAdapter<T> where T : Widget, Editable
+ {
+ private T editable;
+ private UndoManager undo_manager = new UndoManager ();
+ private AccelGroup accel_group = new AccelGroup ();
+ private EventInfo popup_event_info;
+ private Delegate populate_popup_handler;
+
+ public EditableUndoAdapter (T editable)
+ {
+ this.editable = editable;
+ popup_event_info = editable.GetType ().GetEvent ("PopulatePopup");
+ if (popup_event_info != null) {
+ populate_popup_handler = new PopulatePopupHandler (OnPopulatePopup);
+ }
+ }
+
+ public void Connect ()
+ {
+ editable.KeyPressEvent += OnKeyPressEvent;
+ editable.TextDeleted += OnTextDeleted;
+ editable.TextInserted += OnTextInserted;
+ TogglePopupConnection (true);
+ }
+
+ public void Disconnect ()
+ {
+ editable.KeyPressEvent -= OnKeyPressEvent;
+ editable.TextDeleted -= OnTextDeleted;
+ editable.TextInserted -= OnTextInserted;
+ TogglePopupConnection (false);
+ }
+
+ private void TogglePopupConnection (bool connect)
+ {
+ // Ugh, stupid Gtk+/Gtk# and lack of interfaces
+ if (popup_event_info != null && populate_popup_handler != null) {
+ if (connect) {
+ popup_event_info.AddEventHandler (editable, populate_popup_handler);
+ } else {
+ popup_event_info.RemoveEventHandler (editable, populate_popup_handler);
+ }
+ }
+ }
+
+ private void OnKeyPressEvent (object o, KeyPressEventArgs args)
+ {
+ if ((args.Event.State & Gdk.ModifierType.ControlMask) != 0) {
+ switch (args.Event.Key) {
+ case Gdk.Key.z:
+ undo_manager.Undo ();
+ args.RetVal = true;
+ break;
+ case Gdk.Key.Z:
+ case Gdk.Key.y:
+ undo_manager.Redo ();
+ args.RetVal = true;
+ break;
+ }
+ }
+
+ args.RetVal = false;
+ }
+
+ [GLib.ConnectBefore]
+ private void OnTextDeleted (object o, TextDeletedArgs args)
+ {
+ if (args.StartPos != args.EndPos) {
+ undo_manager.AddUndoAction (new EditableEraseAction (editable, args.StartPos, args.EndPos));
+ }
+ }
+
+ [GLib.ConnectBefore]
+ private void OnTextInserted (object o, TextInsertedArgs args)
+ {
+ undo_manager.AddUndoAction (new EditableInsertAction (editable, args.Position, args.Text, args.Length));
+ }
+
+ private void OnPopulatePopup (object o, PopulatePopupArgs args)
+ {
+ Menu menu = args.Menu;
+ MenuItem item;
+
+ item = new SeparatorMenuItem ();
+ item.Show ();
+ menu.Prepend (item);
+
+ item = new ImageMenuItem (Stock.Redo, null);
+ item.Sensitive = undo_manager.CanRedo;
+ item.Activated += delegate { undo_manager.Redo (); };
+ item.AddAccelerator ("activate", accel_group, (uint)Gdk.Key.z,
+ Gdk.ModifierType.ControlMask | Gdk.ModifierType.ShiftMask,
+ AccelFlags.Visible);
+ item.Show ();
+ menu.Prepend (item);
+
+ item = new ImageMenuItem (Stock.Undo, null);
+ item.Sensitive = undo_manager.CanUndo;
+ item.Activated += delegate { undo_manager.Undo (); };
+ item.AddAccelerator ("activate", accel_group, (uint)Gdk.Key.z,
+ Gdk.ModifierType.ControlMask, AccelFlags.Visible);
+ item.Show ();
+ menu.Prepend (item);
+ }
+
+ public UndoManager UndoManager {
+ get { return undo_manager; }
+ }
+ }
+}
diff --git a/lib/Hyena/src/Hyena.Gui/Hyena.Gui/GtkUtilities.cs b/lib/Hyena/src/Hyena.Gui/Hyena.Gui/GtkUtilities.cs
new file mode 100644
index 0000000..7b31440
--- /dev/null
+++ b/lib/Hyena/src/Hyena.Gui/Hyena.Gui/GtkUtilities.cs
@@ -0,0 +1,197 @@
+//
+// GtkUtilities.cs
+//
+// Author:
+// Aaron Bockover <abockover at novell.com>
+//
+// Copyright 2007-2010 Novell, Inc.
+//
+// Permission is hereby granted, free of charge, to any person obtaining
+// a copy of this software and associated documentation files (the
+// "Software"), to deal in the Software without restriction, including
+// without limitation the rights to use, copy, modify, merge, publish,
+// distribute, sublicense, and/or sell copies of the Software, and to
+// permit persons to whom the Software is furnished to do so, subject to
+// the following conditions:
+//
+// The above copyright notice and this permission notice shall be
+// included in all copies or substantial portions of the Software.
+//
+// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
+// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
+// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
+// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+//
+
+using System;
+using Gtk;
+
+namespace Hyena.Gui
+{
+ public delegate void WidgetAction<T> (T widget) where T : class;
+
+ public static class GtkUtilities
+ {
+ private static Gdk.ModifierType [] important_modifiers = new Gdk.ModifierType [] {
+ Gdk.ModifierType.ControlMask,
+ Gdk.ModifierType.ShiftMask
+ };
+
+ public static bool NoImportantModifiersAreSet ()
+ {
+ return NoImportantModifiersAreSet (important_modifiers);
+ }
+
+ public static bool NoImportantModifiersAreSet (params Gdk.ModifierType [] modifiers)
+ {
+ Gdk.ModifierType state;
+
+ if (Global.CurrentEvent is Gdk.EventKey) {
+ state = ((Gdk.EventKey)Global.CurrentEvent).State;
+ } else if (Global.CurrentEvent is Gdk.EventButton) {
+ state = ((Gdk.EventButton)Global.CurrentEvent).State;
+ } else {
+ return false;
+ }
+
+ foreach (Gdk.ModifierType modifier in modifiers) {
+ if ((state & modifier) == modifier) {
+ return false;
+ }
+ }
+
+ return true;
+ }
+
+ public static FileFilter GetFileFilter (string name, System.Collections.Generic.IEnumerable<string> extensions)
+ {
+ FileFilter filter = new FileFilter ();
+ filter.Name = name;
+ foreach (string extension in extensions) {
+ filter.AddPattern (String.Format ("*.{0}", extension.ToLower ()));
+ filter.AddPattern (String.Format ("*.{0}", extension.ToUpper ()));
+ }
+ return filter;
+ }
+
+ public static void SetChooserShortcuts (Gtk.FileChooserDialog chooser, params string [] shortcuts)
+ {
+ foreach (string shortcut in shortcuts) {
+ try {
+ chooser.AddShortcutFolder (shortcut);
+ } catch {}
+ }
+ }
+
+ public static Gdk.Color ColorBlend (Gdk.Color a, Gdk.Color b)
+ {
+ // at some point, might be nice to allow any blend?
+ double blend = 0.5;
+
+ if (blend < 0.0 || blend > 1.0) {
+ throw new ApplicationException ("blend < 0.0 || blend > 1.0");
+ }
+
+ double blendRatio = 1.0 - blend;
+
+ int aR = a.Red >> 8;
+ int aG = a.Green >> 8;
+ int aB = a.Blue >> 8;
+
+ int bR = b.Red >> 8;
+ int bG = b.Green >> 8;
+ int bB = b.Blue >> 8;
+
+ double mR = aR + bR;
+ double mG = aG + bG;
+ double mB = aB + bB;
+
+ double blR = mR * blendRatio;
+ double blG = mG * blendRatio;
+ double blB = mB * blendRatio;
+
+ Gdk.Color color = new Gdk.Color ((byte)blR, (byte)blG, (byte)blB);
+ Gdk.Colormap.System.AllocColor (ref color, true, true);
+ return color;
+ }
+
+ public static void AdaptGtkRcStyle (Widget adaptee, Type adapter)
+ {
+ GLib.GType type = (GLib.GType)adapter;
+ string path = String.Format ("*.{0}", type);
+ AdaptGtkRcStyle (adaptee, type, path, path);
+ }
+
+ public static void AdaptGtkRcStyle (Widget adaptee, GLib.GType adapter, string widgetPath, string classPath)
+ {
+ Style style = Gtk.Rc.GetStyleByPaths (adaptee.Settings, widgetPath, classPath, adapter);
+ if (style == null) {
+ return;
+ }
+
+ foreach (StateType state in Enum.GetValues (typeof (StateType))) {
+ adaptee.ModifyBase (state, style.Base (state));
+ adaptee.ModifyBg (state, style.Background (state));
+ adaptee.ModifyFg (state, style.Foreground (state));
+ adaptee.ModifyText (state, style.Text (state));
+ }
+ }
+
+ public static T StyleGetProperty<T> (Widget widget, string property, T default_value)
+ {
+ object result = widget.StyleGetProperty (property);
+ return result != null && result.GetType () == typeof (T) ? (T)result : default_value;
+ }
+
+ public static void ForeachWidget<T> (Container container, WidgetAction<T> action) where T : class
+ {
+ if (container == null) {
+ return;
+ }
+
+ foreach (Widget child in container.Children) {
+ T widget = child as T;
+ if (widget != null) {
+ action (widget);
+ } else {
+ Container child_container = child as Container;
+ if (child_container != null) {
+ ForeachWidget<T> (child_container, action);
+ }
+ }
+ }
+ }
+
+ public static bool ShowUri (string uri)
+ {
+ return ShowUri (null, uri);
+ }
+
+ public static bool ShowUri (Gdk.Screen screen, string uri)
+ {
+ return ShowUri (screen, uri, Gtk.Global.CurrentEventTime);
+ }
+
+ [System.Runtime.InteropServices.DllImport ("libgtk-win32-2.0-0.dll")]
+ private static extern unsafe bool gtk_show_uri (IntPtr screen, IntPtr uri, uint timestamp, out IntPtr error);
+
+ public static bool ShowUri (Gdk.Screen screen, string uri, uint timestamp)
+ {
+ var native_uri = GLib.Marshaller.StringToPtrGStrdup (uri);
+ var native_error = IntPtr.Zero;
+
+ try {
+ return gtk_show_uri (screen == null ? IntPtr.Zero : screen.Handle,
+ native_uri, timestamp, out native_error);
+ } finally {
+ GLib.Marshaller.Free (native_uri);
+ if (native_error != IntPtr.Zero) {
+ throw new GLib.GException (native_error);
+ }
+ }
+ }
+ }
+}
diff --git a/lib/Hyena/src/Hyena.Gui/Hyena.Gui/GtkWorkarounds.cs b/lib/Hyena/src/Hyena.Gui/Hyena.Gui/GtkWorkarounds.cs
new file mode 100644
index 0000000..fc2b1a0
--- /dev/null
+++ b/lib/Hyena/src/Hyena.Gui/Hyena.Gui/GtkWorkarounds.cs
@@ -0,0 +1,92 @@
+//
+// GtkWorkarounds.cs
+//
+// Author:
+// Aaron Bockover <abockover at novell.com>
+//
+// Copyright (C) 2008 Novell, Inc.
+//
+// Permission is hereby granted, free of charge, to any person obtaining
+// a copy of this software and associated documentation files (the
+// "Software"), to deal in the Software without restriction, including
+// without limitation the rights to use, copy, modify, merge, publish,
+// distribute, sublicense, and/or sell copies of the Software, and to
+// permit persons to whom the Software is furnished to do so, subject to
+// the following conditions:
+//
+// The above copyright notice and this permission notice shall be
+// included in all copies or substantial portions of the Software.
+//
+// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
+// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
+// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
+// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+//
+
+using System;
+using System.Reflection;
+
+namespace Hyena.Gui
+{
+ public static class GtkWorkarounds
+ {
+ private static bool toggle_ref_supported;
+ private static MethodInfo g_object_ref;
+ private static MethodInfo gdk_window_destroy;
+ private static object [] invoke_args;
+
+ static GtkWorkarounds ()
+ {
+ if (!(toggle_ref_supported = Assembly.GetAssembly (typeof (GLib.Object)).GetType (
+ "GLib.ToggleRef") != null)) {
+ return;
+ }
+
+ // Find the P/Invoke signatures we need so we can avoid a dllmap
+ g_object_ref = typeof (GLib.Object).GetMethod ("g_object_ref",
+ BindingFlags.NonPublic | BindingFlags.Static);
+
+ gdk_window_destroy = typeof (Gdk.Window).GetMethod ("gdk_window_destroy",
+ BindingFlags.NonPublic | BindingFlags.Static);
+ }
+
+ public static void WindowDestroy (Gdk.Window window)
+ {
+ // There is a bug in GDK, and subsequently in Gdk# 2.8.5 through 2.12.1
+ // where the managed Gdk.Window.Destroy function does not obtain a
+ // normal reference (non-toggle) on the GdkWindow before calling
+ // _destroy on it, which the native function apparently expects.
+
+ // https://bugzilla.novell.com/show_bug.cgi?id=382186
+ // http://anonsvn.mono-project.com/viewcvs/trunk/gtk-sharp/gdk/Window.custom?rev=101734&r1=42529&r2=101734
+
+ if (window == null) {
+ return;
+ }
+
+ if (!toggle_ref_supported) {
+ window.Destroy ();
+ return;
+ }
+
+ // If this ever happens I will move out west and start farming...
+ if (g_object_ref == null || gdk_window_destroy == null) {
+ window.Destroy ();
+ return;
+ }
+
+ if (invoke_args == null) {
+ invoke_args = new object[1];
+ }
+
+ invoke_args[0] = window.Handle;
+ g_object_ref.Invoke (null, invoke_args);
+ gdk_window_destroy.Invoke (null, invoke_args);
+
+ window.Dispose ();
+ }
+ }
+}
diff --git a/lib/Hyena/src/Hyena.Gui/Hyena.Gui/HyenaActionGroup.cs b/lib/Hyena/src/Hyena.Gui/Hyena.Gui/HyenaActionGroup.cs
new file mode 100644
index 0000000..c804bbc
--- /dev/null
+++ b/lib/Hyena/src/Hyena.Gui/Hyena.Gui/HyenaActionGroup.cs
@@ -0,0 +1,175 @@
+//
+// HyenaActionGroup.cs
+//
+// Author:
+// Gabriel Burt <gburt at novell.com>
+//
+// Copyright (C) 2007 Novell, Inc.
+//
+// Permission is hereby granted, free of charge, to any person obtaining
+// a copy of this software and associated documentation files (the
+// "Software"), to deal in the Software without restriction, including
+// without limitation the rights to use, copy, modify, merge, publish,
+// distribute, sublicense, and/or sell copies of the Software, and to
+// permit persons to whom the Software is furnished to do so, subject to
+// the following conditions:
+//
+// The above copyright notice and this permission notice shall be
+// included in all copies or substantial portions of the Software.
+//
+// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
+// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
+// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
+// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+//
+
+using System;
+using System.Collections.Generic;
+
+using Gtk;
+
+namespace Hyena.Gui
+{
+ public class HyenaActionGroup : ActionGroup
+ {
+ private List<uint> ui_merge_ids = new List<uint> ();
+ private ActionManager action_manager;
+
+ private bool important_by_default = true;
+ protected bool ImportantByDefault {
+ get { return important_by_default; }
+ set { important_by_default = value; }
+ }
+
+ public HyenaActionGroup (ActionManager action_manager, string name) : base (name)
+ {
+ this.action_manager = action_manager;
+ }
+
+ public void AddUiFromFile (string ui_file)
+ {
+ Hyena.ThreadAssist.AssertInMainThread ();
+ ui_merge_ids.Add (ActionManager.AddUiFromFile (ui_file, System.Reflection.Assembly.GetCallingAssembly ()));
+ }
+
+ public void Register ()
+ {
+ if (ActionManager.FindActionGroup (this.Name) == null) {
+ ActionManager.AddActionGroup (this);
+ }
+ }
+
+ public void UnRegister ()
+ {
+ if (ActionManager.FindActionGroup (this.Name) != null) {
+ ActionManager.RemoveActionGroup (this);
+ }
+ }
+
+ public override void Dispose ()
+ {
+ Hyena.ThreadAssist.ProxyToMain (delegate {
+ UnRegister ();
+
+ foreach (uint merge_id in ui_merge_ids) {
+ if (merge_id > 0) {
+ ActionManager.UIManager.RemoveUi (merge_id);
+ }
+ }
+ ui_merge_ids.Clear ();
+
+ base.Dispose ();
+ });
+ }
+
+ public new void Add (params ActionEntry [] action_entries)
+ {
+ if (ImportantByDefault) {
+ AddImportant (action_entries);
+ } else {
+ base.Add (action_entries);
+ }
+ }
+
+ public void AddImportant (params ActionEntry [] action_entries)
+ {
+ base.Add (action_entries);
+
+ foreach (ActionEntry entry in action_entries) {
+ this[entry.name].IsImportant = true;
+ }
+ }
+
+ public void AddImportant (params ToggleActionEntry [] action_entries)
+ {
+ base.Add (action_entries);
+
+ foreach (ToggleActionEntry entry in action_entries) {
+ this[entry.name].IsImportant = true;
+ }
+ }
+
+ public void Remove (string actionName)
+ {
+ Gtk.Action action = this[actionName];
+ if (action != null) {
+ Remove (action);
+ }
+ }
+
+ public void UpdateActions (bool visible, bool sensitive, params string [] action_names)
+ {
+ foreach (string name in action_names) {
+ UpdateAction (this[name], visible, sensitive);
+ }
+ }
+
+ public void UpdateAction (string action_name, bool visible_and_sensitive)
+ {
+ UpdateAction (this[action_name], visible_and_sensitive, visible_and_sensitive);
+ }
+
+ public void UpdateAction (string action_name, bool visible, bool sensitive)
+ {
+ UpdateAction (this[action_name], visible, sensitive);
+ }
+
+ public static void UpdateAction (Gtk.Action action, bool visible_and_sensitive)
+ {
+ UpdateAction (action, visible_and_sensitive, visible_and_sensitive);
+ }
+
+ public static void UpdateAction (Gtk.Action action, bool visible, bool sensitive)
+ {
+ action.Visible = visible;
+ action.Sensitive = visible && sensitive;
+ }
+
+ protected void ShowContextMenu (string menu_name)
+ {
+ Gtk.Menu menu = ActionManager.UIManager.GetWidget (menu_name) as Menu;
+ if (menu == null || menu.Children.Length == 0) {
+ return;
+ }
+
+ int visible_children = 0;
+ foreach (Widget child in menu)
+ if (child.Visible)
+ visible_children++;
+
+ if (visible_children == 0) {
+ return;
+ }
+
+ menu.Show ();
+ menu.Popup (null, null, null, 0, Gtk.Global.CurrentEventTime);
+ }
+
+ public ActionManager ActionManager {
+ get { return action_manager; }
+ }
+ }
+}
diff --git a/lib/Hyena/src/Hyena.Gui/Hyena.Gui/PangoCairoHelper.cs b/lib/Hyena/src/Hyena.Gui/Hyena.Gui/PangoCairoHelper.cs
new file mode 100644
index 0000000..0de07ad
--- /dev/null
+++ b/lib/Hyena/src/Hyena.Gui/Hyena.Gui/PangoCairoHelper.cs
@@ -0,0 +1,81 @@
+//
+// CairoHelper.cs
+//
+// Author:
+// Aaron Bockover <abockover at novell.com>
+//
+// Copyright (C) 2007 Novell, Inc.
+//
+// Permission is hereby granted, free of charge, to any person obtaining
+// a copy of this software and associated documentation files (the
+// "Software"), to deal in the Software without restriction, including
+// without limitation the rights to use, copy, modify, merge, publish,
+// distribute, sublicense, and/or sell copies of the Software, and to
+// permit persons to whom the Software is furnished to do so, subject to
+// the following conditions:
+//
+// The above copyright notice and this permission notice shall be
+// included in all copies or substantial portions of the Software.
+//
+// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
+// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
+// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
+// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+//
+
+using System;
+using System.Runtime.InteropServices;
+
+namespace Hyena.Gui
+{
+ public static class PangoCairoHelper
+ {
+ [DllImport ("libpangocairo-1.0-0.dll")]
+ private static extern void pango_cairo_show_layout (IntPtr cr, IntPtr layout);
+
+ public static void ShowLayout (Cairo.Context cr, Pango.Layout layout)
+ {
+ pango_cairo_show_layout (cr == null ? IntPtr.Zero : cr.Handle,
+ layout == null ? IntPtr.Zero : layout.Handle);
+ }
+
+ [DllImport ("libpangocairo-1.0-0.dll")]
+ private static extern IntPtr pango_cairo_create_layout (IntPtr cr);
+
+ public static Pango.Layout CreateLayout (Cairo.Context cr)
+ {
+ IntPtr raw_ret = pango_cairo_create_layout (cr == null ? IntPtr.Zero : cr.Handle);
+ return GLib.Object.GetObject (raw_ret) as Pango.Layout;
+ }
+
+ [DllImport ("libpangocairo-1.0-0.dll")]
+ private static extern void pango_cairo_layout_path (IntPtr cr, IntPtr layout);
+
+ public static void LayoutPath (Cairo.Context cr, Pango.Layout layout,
+ bool iUnderstandThePerformanceImplications)
+ {
+ pango_cairo_layout_path (cr == null ? IntPtr.Zero : cr.Handle,
+ layout == null ? IntPtr.Zero : layout.Handle);
+ }
+
+ [DllImport ("libpangocairo-1.0-0.dll")]
+ private static extern void pango_cairo_context_set_resolution (IntPtr pango_context, double dpi);
+
+ public static void ContextSetResolution (Pango.Context context, double dpi)
+ {
+ pango_cairo_context_set_resolution (context == null ? IntPtr.Zero : context.Handle, dpi);
+ }
+
+ [DllImport ("libpangocairo-1.0-0.dll")]
+ private static extern IntPtr pango_layout_get_context (IntPtr layout);
+
+ public static Pango.Context LayoutGetContext (Pango.Layout layout)
+ {
+ IntPtr handle = pango_layout_get_context (layout.Handle);
+ return handle.Equals (IntPtr.Zero) ? null : GLib.Object.GetObject (handle) as Pango.Context;
+ }
+ }
+}
diff --git a/lib/Hyena/src/Hyena.Gui/Hyena.Gui/PangoExtensions.cs b/lib/Hyena/src/Hyena.Gui/Hyena.Gui/PangoExtensions.cs
new file mode 100644
index 0000000..e593a50
--- /dev/null
+++ b/lib/Hyena/src/Hyena.Gui/Hyena.Gui/PangoExtensions.cs
@@ -0,0 +1,47 @@
+//
+// PangoExtensions.cs
+//
+// Author:
+// Aaron Bockover <abockover at novell.com>
+//
+// Copyright 2009 Novell, Inc.
+//
+// Permission is hereby granted, free of charge, to any person obtaining
+// a copy of this software and associated documentation files (the
+// "Software"), to deal in the Software without restriction, including
+// without limitation the rights to use, copy, modify, merge, publish,
+// distribute, sublicense, and/or sell copies of the Software, and to
+// permit persons to whom the Software is furnished to do so, subject to
+// the following conditions:
+//
+// The above copyright notice and this permission notice shall be
+// included in all copies or substantial portions of the Software.
+//
+// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
+// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
+// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
+// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+
+using System;
+using Pango;
+
+namespace Hyena.Gui
+{
+ public static class PangoExtensions
+ {
+ public static int MeasureTextHeight (this FontDescription description, Context context)
+ {
+ return MeasureTextHeight (description, context, context.Language);
+ }
+
+ public static int MeasureTextHeight (this FontDescription description, Context context, Language language)
+ {
+ using (var metrics = context.GetMetrics (description, language)) {
+ return ((int)(metrics.Ascent + metrics.Descent) + 512) >> 10; // PANGO_PIXELS (d)
+ }
+ }
+ }
+}
diff --git a/lib/Hyena/src/Hyena.Gui/Hyena.Gui/PixbufImageSurface.cs b/lib/Hyena/src/Hyena.Gui/Hyena.Gui/PixbufImageSurface.cs
new file mode 100644
index 0000000..a733802
--- /dev/null
+++ b/lib/Hyena/src/Hyena.Gui/Hyena.Gui/PixbufImageSurface.cs
@@ -0,0 +1,198 @@
+//
+// PixbufImageSurface.cs
+//
+// Author:
+// Aaron Bockover <abockover at novell.com>
+//
+// Copyright 2008-2010 Novell, Inc.
+//
+// Permission is hereby granted, free of charge, to any person obtaining
+// a copy of this software and associated documentation files (the
+// "Software"), to deal in the Software without restriction, including
+// without limitation the rights to use, copy, modify, merge, publish,
+// distribute, sublicense, and/or sell copies of the Software, and to
+// permit persons to whom the Software is furnished to do so, subject to
+// the following conditions:
+//
+// The above copyright notice and this permission notice shall be
+// included in all copies or substantial portions of the Software.
+//
+// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
+// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
+// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
+// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+//
+
+using System;
+using System.Runtime.InteropServices;
+
+using Cairo;
+
+namespace Hyena.Gui
+{
+ public class PixbufImageSurface : ImageSurface, IDisposable
+ {
+ private delegate void cairo_destroy_func_t (IntPtr userdata);
+
+ private static bool is_le = BitConverter.IsLittleEndian;
+ private static int user_data_key = 0;
+ private static cairo_destroy_func_t destroy_func;
+
+ private static void DestroyPixelData (IntPtr data)
+ {
+ Marshal.FreeHGlobal (data);
+ }
+
+ static PixbufImageSurface ()
+ {
+ destroy_func = new cairo_destroy_func_t (DestroyPixelData);
+ }
+
+ public static ImageSurface Create (Gdk.Pixbuf pixbuf)
+ {
+ return Create (pixbuf, false);
+ }
+
+ public static ImageSurface Create (Gdk.Pixbuf pixbuf, bool disposePixbuf)
+ {
+ if (pixbuf == null || pixbuf.Handle == IntPtr.Zero) {
+ return null;
+ }
+
+ if (!PlatformDetection.IsWindows) {
+ try {
+ return new PixbufImageSurface (pixbuf, disposePixbuf);
+ } catch {
+ return null;
+ }
+ } else {
+ // FIXME:
+ // Windows has some trouble running the PixbufImageSurface, so as a
+ // workaround a slower but working version of this factory method is
+ // implemented. One day we can come back and optimize this by finding
+ // out what's causing the PixbufImageSurface to result in access
+ // violations when the object is disposed.
+ ImageSurface target = new ImageSurface (Format.ARGB32, pixbuf.Width, pixbuf.Height);
+ Context context = new Context (target);
+ try {
+ Gdk.CairoHelper.SetSourcePixbuf (context, pixbuf, 0, 0);
+ context.Paint ();
+ } finally {
+ ((IDisposable)context).Dispose ();
+ if (disposePixbuf) {
+ ((IDisposable)pixbuf).Dispose ();
+ }
+ }
+
+ return target;
+ }
+ }
+
+ private IntPtr data;
+
+ public PixbufImageSurface (Gdk.Pixbuf pixbuf) : this (pixbuf, false)
+ {
+ }
+
+ public PixbufImageSurface (Gdk.Pixbuf pixbuf, bool disposePixbuf) : this (disposePixbuf ? pixbuf : null,
+ pixbuf.Width, pixbuf.Height, pixbuf.NChannels, pixbuf.Rowstride, pixbuf.Pixels)
+ {
+ }
+
+ // This ctor is to avoid multiple queries against the GdkPixbuf for width/height
+ private PixbufImageSurface (Gdk.Pixbuf pixbuf, int width, int height, int channels, int rowstride, IntPtr pixels)
+ : this (pixbuf, Marshal.AllocHGlobal (width * height * 4), width, height, channels, rowstride, pixels)
+ {
+ }
+
+ private PixbufImageSurface (Gdk.Pixbuf pixbuf, IntPtr data, int width, int height, int channels, int rowstride, IntPtr pixels)
+ : base (data, channels == 3 ? Format.Rgb24 : Format.Argb32, width, height, width * 4)
+ {
+ this.data = data;
+
+ CreateSurface (width, height, channels, rowstride, pixels);
+ SetDestroyFunc ();
+
+ if (pixbuf != null && pixbuf.Handle != IntPtr.Zero) {
+ pixbuf.Dispose ();
+ }
+ }
+
+ private unsafe void CreateSurface (int width, int height, int channels, int gdk_rowstride, IntPtr pixels)
+ {
+ byte *gdk_pixels = (byte *)pixels;
+ byte *cairo_pixels = (byte *)data;
+
+ for (int i = height; i > 0; i--) {
+ byte *p = gdk_pixels;
+ byte *q = cairo_pixels;
+
+ if (channels == 3) {
+ byte *end = p + 3 * width;
+ while (p < end) {
+ if (is_le) {
+ q[0] = p[2];
+ q[1] = p[1];
+ q[2] = p[0];
+ } else {
+ q[1] = p[0];
+ q[2] = p[1];
+ q[3] = p[2];
+ }
+
+ p += 3;
+ q += 4;
+ }
+ } else {
+ byte *end = p + 4 * width;
+ while (p < end) {
+ if (is_le) {
+ q[0] = Mult (p[2], p[3]);
+ q[1] = Mult (p[1], p[3]);
+ q[2] = Mult (p[0], p[3]);
+ q[3] = p[3];
+ } else {
+ q[0] = p[3];
+ q[1] = Mult (p[0], p[3]);
+ q[2] = Mult (p[1], p[3]);
+ q[3] = Mult (p[2], p[3]);
+ }
+
+ p += 4;
+ q += 4;
+ }
+ }
+
+ gdk_pixels += gdk_rowstride;
+ cairo_pixels += 4 * width;
+ }
+ }
+
+ private static byte Mult (byte c, byte a)
+ {
+ int t = c * a + 0x7f;
+ return (byte)(((t >> 8) + t) >> 8);
+ }
+
+ [DllImport ("libcairo-2.dll")]
+ private static extern Cairo.Status cairo_surface_set_user_data (IntPtr surface,
+ ref int key, IntPtr userdata, cairo_destroy_func_t destroy);
+
+ private void SetDestroyFunc ()
+ {
+ try {
+ Status status = cairo_surface_set_user_data (Handle, ref user_data_key, data, destroy_func);
+ if (status != Status.Success) {
+ throw new ApplicationException (String.Format (
+ "cairo_surface_set_user_data returned {0}", status));
+ }
+ } catch (Exception e) {
+ Console.Error.WriteLine ("WARNING: Image data will be leaked! ({0} bytes)", Width * Height * 4);
+ Console.Error.WriteLine (e);
+ }
+ }
+ }
+}
diff --git a/lib/Hyena/src/Hyena.Gui/Hyena.Gui/RatingRenderer.cs b/lib/Hyena/src/Hyena.Gui/Hyena.Gui/RatingRenderer.cs
new file mode 100644
index 0000000..8ee9ad6
--- /dev/null
+++ b/lib/Hyena/src/Hyena.Gui/Hyena.Gui/RatingRenderer.cs
@@ -0,0 +1,183 @@
+//
+// RatingRenderer.cs
+//
+// Author:
+// Aaron Bockover <abockover at novell.com>
+//
+// Copyright (C) 2008 Novell, Inc.
+//
+// Permission is hereby granted, free of charge, to any person obtaining
+// a copy of this software and associated documentation files (the
+// "Software"), to deal in the Software without restriction, including
+// without limitation the rights to use, copy, modify, merge, publish,
+// distribute, sublicense, and/or sell copies of the Software, and to
+// permit persons to whom the Software is furnished to do so, subject to
+// the following conditions:
+//
+// The above copyright notice and this permission notice shall be
+// included in all copies or substantial portions of the Software.
+//
+// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
+// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
+// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
+// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+//
+
+using System;
+using Gtk;
+using Cairo;
+
+namespace Hyena.Gui
+{
+ public class RatingRenderer
+ {
+ private static double [,] star_plot = new double[,] {
+ { 0, 0.425 },
+ { 0.375, 0.375 },
+ { 0.5, 0.05 },
+ { 0.625, 0.375 },
+ { 1, 0.425 },
+ { 0.75, 0.625 },
+ { 0.8, 0.95 },
+ { 0.5, 0.75 },
+ { 0.2, 0.95 },
+ { 0.25, 0.625 },
+ { 0, 0.425 },
+ };
+
+ public RatingRenderer ()
+ {
+ }
+
+ public virtual void Render (Context cr, Gdk.Rectangle area, Color color, bool showEmptyStars, bool isHovering,
+ int hoverValue, double fillOpacity, double hoverFillOpacity, double strokeOpacity)
+ {
+ if (Value == MinRating && !isHovering && !showEmptyStars) {
+ return;
+ }
+
+ Cairo.Color fill_color = color;
+ fill_color.A = fillOpacity;
+ Cairo.Color stroke_color = fill_color;
+ stroke_color.A = strokeOpacity;
+ Cairo.Color hover_fill_color = fill_color;
+ hover_fill_color.A = hoverFillOpacity;
+
+ double x, y;
+ ComputePosition (area, out x, out y);
+
+ cr.LineWidth = 1.0;
+ cr.Translate (0.5, 0.5);
+
+ for (int i = MinRating + 1, s = isHovering || showEmptyStars ? MaxRating : Value; i <= s; i++, x += Size) {
+ bool fill = i <= Value && Value > MinRating;
+ bool hover_fill = i <= hoverValue && hoverValue > MinRating;
+ double scale = fill || hover_fill ? Size : Size - 2;
+ double ofs = fill || hover_fill ? 0 : 1;
+
+ for (int p = 0, n = star_plot.GetLength (0); p < n; p++) {
+ double px = x + ofs + star_plot[p, 0] * scale;
+ double py = y + ofs + star_plot[p, 1] * scale;
+ if (p == 0) {
+ cr.MoveTo (px, py);
+ } else {
+ cr.LineTo (px, py);
+ }
+ }
+ cr.ClosePath ();
+
+ if (fill || hover_fill) {
+ if (!isHovering || hoverValue >= Value) {
+ cr.Color = fill ? fill_color : hover_fill_color;
+ } else {
+ cr.Color = hover_fill ? fill_color : hover_fill_color;
+ }
+ cr.Fill ();
+ } else {
+ cr.Color = stroke_color;
+ cr.Stroke ();
+ }
+ }
+ }
+
+ private void ComputePosition (Gdk.Rectangle area, out double x, out double y)
+ {
+ double cell_width = area.Width - 2 * Xpad;
+ double cell_height = area.Height - 2 * Ypad;
+
+ double stars_width = MaxRating * Size;
+ double stars_height = Size;
+
+ x = area.X + Xpad + (cell_width - stars_width) / 2.0;
+ y = area.Y + Ypad + (cell_height - stars_height) / 2.0;
+ }
+
+ public int RatingFromPosition (Gdk.Rectangle area, double x)
+ {
+ double r_x, r_y;
+ ComputePosition (area, out r_x, out r_y);
+ return x <= r_x ? 0 : Clamp (MinRating, MaxRating, (int)Math.Ceiling ((x - r_x) / Size) + MinRating);
+ }
+
+ private static int Clamp (int min, int max, int value)
+ {
+ return Math.Max (min, Math.Min (max, value));
+ }
+
+ public int ClampValue (int value)
+ {
+ return Clamp (MinRating, MaxRating, value);
+ }
+
+ private int value;
+ public int Value {
+ get { return ClampValue (this.value); }
+ set { this.value = ClampValue (value); }
+ }
+
+ private int size = 14;
+ public int Size {
+ get { return size; }
+ set { size = value; }
+ }
+
+ private int min_rating = 0;
+ public int MinRating {
+ get { return min_rating; }
+ set { min_rating = value; }
+ }
+
+ private int max_rating = 5;
+ public int MaxRating {
+ get { return max_rating; }
+ set { max_rating = value; }
+ }
+
+ public int RatingLevels {
+ get { return MaxRating - MinRating + 1; }
+ }
+
+ private int xpad = 2;
+ public int Xpad {
+ get { return xpad; }
+ set { xpad = value; }
+ }
+
+ public int ypad = 2;
+ public int Ypad {
+ get { return ypad; }
+ set { ypad = value; }
+ }
+
+ public int Width {
+ get { return Xpad * 2 + RatingLevels * Size; }
+ }
+
+ public int Height {
+ get { return Ypad * 2 + Size; }
+ }
+ }
+}
diff --git a/lib/Hyena/src/Hyena.Gui/Hyena.Gui/ShadingTestWindow.cs b/lib/Hyena/src/Hyena.Gui/Hyena.Gui/ShadingTestWindow.cs
new file mode 100644
index 0000000..d82d67b
--- /dev/null
+++ b/lib/Hyena/src/Hyena.Gui/Hyena.Gui/ShadingTestWindow.cs
@@ -0,0 +1,82 @@
+//
+// ShadingTestWindow.cs
+//
+// Author:
+// Aaron Bockover <abockover at novell.com>
+//
+// Copyright (C) 2008 Novell, Inc.
+//
+// Permission is hereby granted, free of charge, to any person obtaining
+// a copy of this software and associated documentation files (the
+// "Software"), to deal in the Software without restriction, including
+// without limitation the rights to use, copy, modify, merge, publish,
+// distribute, sublicense, and/or sell copies of the Software, and to
+// permit persons to whom the Software is furnished to do so, subject to
+// the following conditions:
+//
+// The above copyright notice and this permission notice shall be
+// included in all copies or substantial portions of the Software.
+//
+// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
+// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
+// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
+// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+//
+
+using System;
+using Gtk;
+
+namespace Hyena.Gui
+{
+ public class ShadingTestWindow : Window
+ {
+ private int steps = 16;
+
+ public ShadingTestWindow () : base ("Shading Test")
+ {
+ SetSizeRequest (512, 512);
+ }
+
+ protected override bool OnExposeEvent (Gdk.EventExpose evnt)
+ {
+ Cairo.Context cr = Gdk.CairoHelper.Create (evnt.Window);
+
+ double step_width = Allocation.Width / (double)steps;
+ double step_height = Allocation.Height / (double)steps;
+ double h = 1.0;
+ double s = 0.0;
+
+ for (int xi = 0, i = 0; xi < steps; xi++) {
+ for (int yi = 0; yi < steps; yi++, i++) {
+ double bg_b = (double)(i / 255.0);
+ double fg_b = 1.0 - bg_b;
+
+ double x = Allocation.X + xi * step_width;
+ double y = Allocation.Y + yi * step_height;
+
+ cr.Rectangle (x, y, step_width, step_height);
+ cr.Color = CairoExtensions.ColorFromHsb (h, s, bg_b);
+ cr.Fill ();
+
+ int tw, th;
+ Pango.Layout layout = new Pango.Layout (PangoContext);
+ layout.SetText (((int)(bg_b * 255.0)).ToString ());
+ layout.GetPixelSize (out tw, out th);
+
+ cr.Translate (0.5, 0.5);
+ cr.MoveTo (x + (step_width - tw) / 2.0, y + (step_height - th) / 2.0);
+ cr.Color = CairoExtensions.ColorFromHsb (h, s, fg_b);
+ PangoCairoHelper.ShowLayout (cr, layout);
+ cr.Translate (-0.5, -0.5);
+ }
+ }
+
+ CairoExtensions.DisposeContext (cr);
+ return true;
+ }
+
+ }
+}
diff --git a/lib/Hyena/src/Hyena.Gui/Hyena.Gui/TestModuleAttribute.cs b/lib/Hyena/src/Hyena.Gui/Hyena.Gui/TestModuleAttribute.cs
new file mode 100644
index 0000000..6b24d9b
--- /dev/null
+++ b/lib/Hyena/src/Hyena.Gui/Hyena.Gui/TestModuleAttribute.cs
@@ -0,0 +1,46 @@
+//
+// TestModuleAttribute.cs
+//
+// Author:
+// Aaron Bockover <abockover at novell.com>
+//
+// Copyright (C) 2008 Novell, Inc.
+//
+// Permission is hereby granted, free of charge, to any person obtaining
+// a copy of this software and associated documentation files (the
+// "Software"), to deal in the Software without restriction, including
+// without limitation the rights to use, copy, modify, merge, publish,
+// distribute, sublicense, and/or sell copies of the Software, and to
+// permit persons to whom the Software is furnished to do so, subject to
+// the following conditions:
+//
+// The above copyright notice and this permission notice shall be
+// included in all copies or substantial portions of the Software.
+//
+// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
+// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
+// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
+// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+//
+
+using System;
+
+namespace Hyena.Gui
+{
+ internal class TestModuleAttribute : Attribute
+ {
+ private string name;
+ public string Name {
+ get { return name; }
+ set { name = value; }
+ }
+
+ public TestModuleAttribute (string name)
+ {
+ this.name = name;
+ }
+ }
+}
diff --git a/lib/Hyena/src/Hyena.Gui/Hyena.Gui/TestModuleRunner.cs b/lib/Hyena/src/Hyena.Gui/Hyena.Gui/TestModuleRunner.cs
new file mode 100644
index 0000000..35c1cbc
--- /dev/null
+++ b/lib/Hyena/src/Hyena.Gui/Hyena.Gui/TestModuleRunner.cs
@@ -0,0 +1,101 @@
+//
+// TestModuleRunner.cs
+//
+// Author:
+// Aaron Bockover <abockover at novell.com>
+//
+// Copyright (C) 2008 Novell, Inc.
+//
+// Permission is hereby granted, free of charge, to any person obtaining
+// a copy of this software and associated documentation files (the
+// "Software"), to deal in the Software without restriction, including
+// without limitation the rights to use, copy, modify, merge, publish,
+// distribute, sublicense, and/or sell copies of the Software, and to
+// permit persons to whom the Software is furnished to do so, subject to
+// the following conditions:
+//
+// The above copyright notice and this permission notice shall be
+// included in all copies or substantial portions of the Software.
+//
+// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
+// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
+// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
+// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+//
+
+using System;
+using System.Reflection;
+using Gtk;
+
+namespace Hyena.Gui
+{
+ public class TestModuleRunner : Window
+ {
+ public static void Run ()
+ {
+ Application.Init ();
+ TestModuleRunner runner = new TestModuleRunner ();
+ runner.DeleteEvent += delegate { Application.Quit (); };
+ runner.ShowAll ();
+ Application.Run ();
+ }
+
+ private TreeStore store;
+
+ public TestModuleRunner () : base ("Hyena.Gui Module Tester")
+ {
+ SetSizeRequest (-1, 300);
+ Move (100, 100);
+
+ BuildModuleList ();
+ BuildView ();
+ }
+
+ private void BuildModuleList ()
+ {
+ store = new TreeStore (typeof (string), typeof (Type));
+
+ foreach (Type type in Assembly.GetExecutingAssembly ().GetTypes ()) {
+ foreach (TestModuleAttribute attr in type.GetCustomAttributes (typeof (TestModuleAttribute), false)) {
+ store.AppendValues (attr.Name, type);
+ }
+ }
+ }
+
+ private void BuildView ()
+ {
+ VBox box = new VBox ();
+ Add (box);
+
+ ScrolledWindow sw = new ScrolledWindow ();
+ sw.HscrollbarPolicy = PolicyType.Never;
+
+ TreeView view = new TreeView ();
+ view.RowActivated += delegate (object o, RowActivatedArgs args) {
+ TreeIter iter;
+ if (store.GetIter (out iter, args.Path)) {
+ Type type = (Type)store.GetValue (iter, 1);
+ Window window = (Window)Activator.CreateInstance (type);
+ window.WindowPosition = WindowPosition.Center;
+ window.DeleteEvent += delegate { window.Destroy (); };
+ window.Show ();
+ }
+ };
+ view.Model = store;
+ view.AppendColumn ("Module", new CellRendererText (), "text", 0);
+
+ sw.Add (view);
+ box.PackStart (sw, true, true, 0);
+ sw.ShowAll ();
+
+ Button button = new Button (Stock.Quit);
+ button.Clicked += delegate { Destroy (); Application.Quit (); };
+ box.PackStart (button, false, false, 0);
+
+ box.ShowAll ();
+ }
+ }
+}
diff --git a/lib/Hyena/src/Hyena.Gui/Hyena.Gui/TooltipSetter.cs b/lib/Hyena/src/Hyena.Gui/Hyena.Gui/TooltipSetter.cs
new file mode 100644
index 0000000..48323e7
--- /dev/null
+++ b/lib/Hyena/src/Hyena.Gui/Hyena.Gui/TooltipSetter.cs
@@ -0,0 +1,87 @@
+//
+// TooltipSetter.cs
+//
+// Author:
+// Aaron Bockover <abockover at novell.com>
+//
+// Copyright (C) 2008 Novell, Inc.
+//
+// Permission is hereby granted, free of charge, to any person obtaining
+// a copy of this software and associated documentation files (the
+// "Software"), to deal in the Software without restriction, including
+// without limitation the rights to use, copy, modify, merge, publish,
+// distribute, sublicense, and/or sell copies of the Software, and to
+// permit persons to whom the Software is furnished to do so, subject to
+// the following conditions:
+//
+// The above copyright notice and this permission notice shall be
+// included in all copies or substantial portions of the Software.
+//
+// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
+// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
+// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
+// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+//
+
+using System;
+using System.Reflection;
+
+using Gtk;
+
+namespace Hyena.Gui
+{
+ public static class TooltipSetter
+ {
+ private static Type host_type;
+ private static MethodInfo host_set_tip_method;
+ private static PropertyInfo tooltip_text_property;
+ private static bool reflected;
+
+ public static object CreateHost ()
+ {
+ if (tooltip_text_property != null) {
+ return null;
+ }
+
+ Type type = reflected ? null : typeof (Widget);
+
+ if (type != null) {
+ tooltip_text_property = type.GetProperty ("TooltipText", BindingFlags.Instance | BindingFlags.Public);
+ if (tooltip_text_property != null) {
+ reflected = true;
+ return null;
+ }
+ }
+
+ if (host_set_tip_method == null && !reflected) {
+ reflected = true;
+ host_type = Type.GetType (String.Format ("Gtk.Tooltips, {0}", type.Assembly.FullName));
+ if (type == null) {
+ return null;
+ }
+
+ host_set_tip_method = host_type.GetMethod ("SetTip", BindingFlags.Instance |
+ BindingFlags.Public | BindingFlags.InvokeMethod);
+ if (host_set_tip_method == null) {
+ return null;
+ }
+ }
+
+ return host_set_tip_method != null ? Activator.CreateInstance (host_type) : null;
+ }
+
+ public static void Set (object host, Widget widget, string textTip)
+ {
+ if (tooltip_text_property != null) {
+ tooltip_text_property.SetValue (widget, textTip, null);
+ } else if (host != null && host_set_tip_method != null) {
+ host_set_tip_method.Invoke (host, new object [] { widget, textTip, null });
+ } else {
+ throw new ApplicationException ("You must call TooltipSetter.CreateHost before calling TooltipSetter.Set");
+ }
+ }
+ }
+}
diff --git a/lib/Hyena/src/Hyena.Gui/Hyena.Query.Gui/DateQueryValueEntry.cs b/lib/Hyena/src/Hyena.Gui/Hyena.Query.Gui/DateQueryValueEntry.cs
new file mode 100644
index 0000000..0066d99
--- /dev/null
+++ b/lib/Hyena/src/Hyena.Gui/Hyena.Query.Gui/DateQueryValueEntry.cs
@@ -0,0 +1,97 @@
+//
+// DateQueryValueEntry.cs
+//
+// Authors:
+// Gabriel Burt <gburt at novell.com>
+//
+// Copyright (C) 2008 Novell, Inc.
+//
+// Permission is hereby granted, free of charge, to any person obtaining
+// a copy of this software and associated documentation files (the
+// "Software"), to deal in the Software without restriction, including
+// without limitation the rights to use, copy, modify, merge, publish,
+// distribute, sublicense, and/or sell copies of the Software, and to
+// permit persons to whom the Software is furnished to do so, subject to
+// the following conditions:
+//
+// The above copyright notice and this permission notice shall be
+// included in all copies or substantial portions of the Software.
+//
+// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
+// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
+// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
+// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+//
+
+using System;
+
+using Mono.Unix;
+
+using Hyena.Query;
+using Gtk;
+
+namespace Hyena.Query.Gui
+{
+ public class DateQueryValueEntry : QueryValueEntry
+ {
+ protected DateQueryValue query_value;
+
+ protected SpinButton year_entry = new SpinButton (Double.MinValue, Double.MaxValue, 1.0);
+ protected SpinButton month_entry = new SpinButton (0.0, 12.0, 1.0);
+ protected SpinButton day_entry = new SpinButton (0.0, 31.0, 1.0);
+
+ public DateQueryValueEntry () : base ()
+ {
+ year_entry.MaxLength = year_entry.WidthChars = 4;
+ month_entry.MaxLength = month_entry.WidthChars = 2;
+ day_entry.MaxLength = day_entry.WidthChars = 2;
+ year_entry.Numeric = month_entry.Numeric = day_entry.Numeric = true;
+ month_entry.Wrap = day_entry.Wrap = true;
+
+ year_entry.Value = (double) DateTime.Now.Year;
+ month_entry.Value = (double) DateTime.Now.Month;
+ day_entry.Value = (double) DateTime.Now.Day;
+
+ year_entry.Changed += HandleValueChanged;
+ month_entry.Changed += HandleValueChanged;
+ day_entry.Changed += HandleValueChanged;
+
+ Add (year_entry);
+ Add (new Label ("-"));
+ Add (month_entry);
+ Add (new Label ("-"));
+ Add (day_entry);
+ }
+
+ public override QueryValue QueryValue {
+ get { return query_value; }
+ set {
+ year_entry.Changed -= HandleValueChanged;
+ month_entry.Changed -= HandleValueChanged;
+ day_entry.Changed -= HandleValueChanged;
+
+ query_value = value as DateQueryValue;
+ year_entry.Value = (double) query_value.DateTime.Year;
+ month_entry.Value = (double) query_value.DateTime.Month;
+ day_entry.Value = (double) query_value.DateTime.Day;
+
+ year_entry.Changed += HandleValueChanged;
+ month_entry.Changed += HandleValueChanged;
+ day_entry.Changed += HandleValueChanged;
+ }
+ }
+
+ protected void HandleValueChanged (object o, EventArgs args)
+ {
+ try {
+ DateTime dt = new DateTime (year_entry.ValueAsInt, month_entry.ValueAsInt, day_entry.ValueAsInt);
+ query_value.SetValue (dt);
+ } catch {
+ Log.Debug ("Caught exception raised because of invalid date");
+ }
+ }
+ }
+}
diff --git a/lib/Hyena/src/Hyena.Gui/Hyena.Query.Gui/FileSizeQueryValueEntry.cs b/lib/Hyena/src/Hyena.Gui/Hyena.Query.Gui/FileSizeQueryValueEntry.cs
new file mode 100644
index 0000000..ba9ea15
--- /dev/null
+++ b/lib/Hyena/src/Hyena.Gui/Hyena.Query.Gui/FileSizeQueryValueEntry.cs
@@ -0,0 +1,91 @@
+//
+// FileSizeQueryValueEntry.cs
+//
+// Authors:
+// Gabriel Burt <gburt at novell.com>
+//
+// Copyright (C) 2008 Novell, Inc.
+//
+// Permission is hereby granted, free of charge, to any person obtaining
+// a copy of this software and associated documentation files (the
+// "Software"), to deal in the Software without restriction, including
+// without limitation the rights to use, copy, modify, merge, publish,
+// distribute, sublicense, and/or sell copies of the Software, and to
+// permit persons to whom the Software is furnished to do so, subject to
+// the following conditions:
+//
+// The above copyright notice and this permission notice shall be
+// included in all copies or substantial portions of the Software.
+//
+// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
+// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
+// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
+// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+//
+
+using System;
+
+using Mono.Unix;
+
+using Hyena.Query;
+using Gtk;
+
+namespace Hyena.Query.Gui
+{
+ public class FileSizeQueryValueEntry : QueryValueEntry
+ {
+ protected SpinButton spin_button;
+ protected ComboBox combo;
+ protected FileSizeQueryValue query_value;
+
+ protected static readonly FileSizeFactor [] factors = new FileSizeFactor [] {
+ FileSizeFactor.None, FileSizeFactor.KB, FileSizeFactor.MB, FileSizeFactor.GB
+ };
+
+ bool combo_set = false;
+
+ // Relative: [<|>] [num] [minutes|hours] ago
+ // TODO: Absolute: [>|>=|=|<|<=] [date/time]
+ public FileSizeQueryValueEntry () : base ()
+ {
+ spin_button = new SpinButton (0.0, 1.0, 1.0);
+ spin_button.Digits = 1;
+ spin_button.WidthChars = 4;
+ spin_button.SetRange (0.0, Double.MaxValue);
+ Add (spin_button);
+
+ combo = ComboBox.NewText ();
+ combo.AppendText (Catalog.GetString ("bytes"));
+ combo.AppendText (Catalog.GetString ("KB"));
+ combo.AppendText (Catalog.GetString ("MB"));
+ combo.AppendText (Catalog.GetString ("GB"));
+ combo.Realized += delegate { if (!combo_set) { combo.Active = 2; } };
+ Add (combo);
+
+ spin_button.ValueChanged += HandleValueChanged;
+ combo.Changed += HandleValueChanged;
+ }
+
+ public override QueryValue QueryValue {
+ get { return query_value; }
+ set {
+ spin_button.ValueChanged -= HandleValueChanged;
+ combo.Changed -= HandleValueChanged;
+ query_value = value as FileSizeQueryValue;
+ spin_button.Value = query_value.FactoredValue;
+ combo_set = true;
+ combo.Active = Array.IndexOf (factors, query_value.Factor);
+ spin_button.ValueChanged += HandleValueChanged;
+ combo.Changed += HandleValueChanged;
+ }
+ }
+
+ protected void HandleValueChanged (object o, EventArgs args)
+ {
+ query_value.SetValue (spin_button.Value, factors [combo.Active]);
+ }
+ }
+}
diff --git a/lib/Hyena/src/Hyena.Gui/Hyena.Query.Gui/IntegerQueryValueEntry.cs b/lib/Hyena/src/Hyena.Gui/Hyena.Query.Gui/IntegerQueryValueEntry.cs
new file mode 100644
index 0000000..f4ed1a9
--- /dev/null
+++ b/lib/Hyena/src/Hyena.Gui/Hyena.Query.Gui/IntegerQueryValueEntry.cs
@@ -0,0 +1,68 @@
+//
+// IntegerQueryValueEntry.cs
+//
+// Authors:
+// Gabriel Burt <gburt at novell.com>
+//
+// Copyright (C) 2008 Novell, Inc.
+//
+// Permission is hereby granted, free of charge, to any person obtaining
+// a copy of this software and associated documentation files (the
+// "Software"), to deal in the Software without restriction, including
+// without limitation the rights to use, copy, modify, merge, publish,
+// distribute, sublicense, and/or sell copies of the Software, and to
+// permit persons to whom the Software is furnished to do so, subject to
+// the following conditions:
+//
+// The above copyright notice and this permission notice shall be
+// included in all copies or substantial portions of the Software.
+//
+// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
+// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
+// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
+// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+//
+
+using System;
+
+using Hyena.Query;
+using Gtk;
+
+namespace Hyena.Query.Gui
+{
+ public class IntegerQueryValueEntry : QueryValueEntry
+ {
+ protected SpinButton spin_button;
+ protected IntegerQueryValue query_value;
+
+ public IntegerQueryValueEntry () : base ()
+ {
+ spin_button = new SpinButton (0.0, 1.0, 1.0);
+ spin_button.Digits = 0;
+ spin_button.WidthChars = 4;
+ spin_button.ValueChanged += HandleValueChanged;
+
+ Add (spin_button);
+ }
+
+ public override QueryValue QueryValue {
+ get { return query_value; }
+ set {
+ spin_button.ValueChanged -= HandleValueChanged;
+ query_value = value as IntegerQueryValue;
+ spin_button.SetRange (query_value.MinValue, query_value.MaxValue);
+ spin_button.Value = (double) (query_value.IsEmpty ? query_value.DefaultValue : query_value.IntValue);
+ query_value.SetValue (spin_button.ValueAsInt);
+ spin_button.ValueChanged += HandleValueChanged;
+ }
+ }
+
+ protected void HandleValueChanged (object o, EventArgs args)
+ {
+ query_value.SetValue (spin_button.ValueAsInt);
+ }
+ }
+}
diff --git a/lib/Hyena/src/Hyena.Gui/Hyena.Query.Gui/NullQueryValueEntry.cs b/lib/Hyena/src/Hyena.Gui/Hyena.Query.Gui/NullQueryValueEntry.cs
new file mode 100644
index 0000000..e14e42f
--- /dev/null
+++ b/lib/Hyena/src/Hyena.Gui/Hyena.Query.Gui/NullQueryValueEntry.cs
@@ -0,0 +1,49 @@
+//
+// NullQueryValueEntry.cs
+//
+// Authors:
+// Gabriel Burt <gburt at novell.com>
+//
+// Copyright (C) 2008 Novell, Inc.
+//
+// Permission is hereby granted, free of charge, to any person obtaining
+// a copy of this software and associated documentation files (the
+// "Software"), to deal in the Software without restriction, including
+// without limitation the rights to use, copy, modify, merge, publish,
+// distribute, sublicense, and/or sell copies of the Software, and to
+// permit persons to whom the Software is furnished to do so, subject to
+// the following conditions:
+//
+// The above copyright notice and this permission notice shall be
+// included in all copies or substantial portions of the Software.
+//
+// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
+// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
+// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
+// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+//
+
+using System;
+
+using Hyena.Query;
+using Gtk;
+
+namespace Hyena.Query.Gui
+{
+ public class NullQueryValueEntry : QueryValueEntry
+ {
+ protected NullQueryValue query_value;
+
+ public NullQueryValueEntry () : base ()
+ {
+ }
+
+ public override QueryValue QueryValue {
+ get { return query_value; }
+ set { query_value = value as NullQueryValue; }
+ }
+ }
+}
diff --git a/lib/Hyena/src/Hyena.Gui/Hyena.Query.Gui/QueryBox.cs b/lib/Hyena/src/Hyena.Gui/Hyena.Query.Gui/QueryBox.cs
new file mode 100644
index 0000000..0fe4562
--- /dev/null
+++ b/lib/Hyena/src/Hyena.Gui/Hyena.Query.Gui/QueryBox.cs
@@ -0,0 +1,176 @@
+//
+// QueryBox.cs
+//
+// Authors:
+// Aaron Bockover <abockover at novell.com>
+// Gabriel Burt <gburt at novell.com>
+//
+// Copyright (C) 2005-2008 Novell, Inc.
+//
+// Permission is hereby granted, free of charge, to any person obtaining
+// a copy of this software and associated documentation files (the
+// "Software"), to deal in the Software without restriction, including
+// without limitation the rights to use, copy, modify, merge, publish,
+// distribute, sublicense, and/or sell copies of the Software, and to
+// permit persons to whom the Software is furnished to do so, subject to
+// the following conditions:
+//
+// The above copyright notice and this permission notice shall be
+// included in all copies or substantial portions of the Software.
+//
+// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
+// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
+// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
+// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+//
+
+using System;
+using System.Collections.Generic;
+using System.Text;
+
+using Mono.Unix;
+
+using Gtk;
+using Hyena;
+using Hyena.Query;
+
+namespace Hyena.Query.Gui
+{
+ public class QueryBox : VBox
+ {
+ private QueryTermsBox terms_box;
+ private bool complex_query = false;
+
+ private HBox terms_entry_box;
+ private Entry terms_entry;
+
+ private QueryLimitBox limit_box;
+ public QueryLimitBox LimitBox {
+ get { return limit_box; }
+ }
+
+ private ComboBox terms_logic_combo;
+ private CheckButton terms_enabled_checkbox;
+ private Label terms_label;
+ private QueryFieldSet field_set;
+ private Frame matchesFrame;
+
+ public QueryBox (QueryFieldSet fieldSet, QueryOrder [] orders, QueryLimit [] limits) : base ()
+ {
+ //this.sorted_fields = fieldSet.Fields;
+ this.field_set = fieldSet;
+ terms_box = new QueryTermsBox (field_set);
+ limit_box = new QueryLimitBox (orders, limits);
+
+ BuildInterface ();
+ }
+
+ private void BuildInterface ()
+ {
+ NoShowAll = true;
+
+ Alignment matchesAlignment = new Alignment (0.0f, 0.0f, 1.0f, 1.0f);
+ matchesAlignment.SetPadding (5, 5, 5, 5);
+ matchesAlignment.Add (terms_box);
+
+ matchesFrame = new Frame (null);
+ matchesFrame.Add (matchesAlignment);
+ matchesFrame.LabelWidget = BuildMatchHeader ();
+ matchesFrame.ShowAll ();
+
+ terms_entry_box = new HBox ();
+ terms_entry_box.Spacing = 8;
+ terms_entry_box.PackStart (new Label (Catalog.GetString ("Condition:")), false, false, 0);
+ terms_entry = new Entry ();
+ terms_entry_box.PackStart (terms_entry, true, true, 0);
+
+ limit_box.ShowAll ();
+
+ PackStart(matchesFrame, true, true, 0);
+ PackStart(terms_entry_box, false, false, 0);
+ PackStart(limit_box, false, false, 0);
+
+ //ShowAll ();
+ }
+
+ private HBox BuildMatchHeader ()
+ {
+ HBox header = new HBox ();
+ header.Show ();
+
+ terms_enabled_checkbox = new CheckButton (Catalog.GetString ("_Match"));
+ terms_enabled_checkbox.Show ();
+ terms_enabled_checkbox.Active = true;
+ terms_enabled_checkbox.Toggled += OnMatchCheckBoxToggled;
+ header.PackStart (terms_enabled_checkbox, false, false, 0);
+
+ terms_logic_combo = ComboBox.NewText ();
+ terms_logic_combo.AppendText (Catalog.GetString ("all"));
+ terms_logic_combo.AppendText (Catalog.GetString ("any"));
+ terms_logic_combo.Show ();
+ terms_logic_combo.Active = 0;
+ header.PackStart (terms_logic_combo, false, false, 0);
+
+ terms_label = new Label (Catalog.GetString ("of the following:"));
+ terms_label.Show ();
+ terms_label.Xalign = 0.0f;
+ header.PackStart (terms_label, true, true, 0);
+
+ header.Spacing = 5;
+
+ return header;
+ }
+
+ private void OnMatchCheckBoxToggled (object o, EventArgs args)
+ {
+ terms_box.Sensitive = terms_enabled_checkbox.Active;
+ terms_logic_combo.Sensitive = terms_enabled_checkbox.Active;
+ terms_label.Sensitive = terms_enabled_checkbox.Active;
+ }
+
+ public QueryNode QueryNode {
+ get {
+ if (!complex_query && !terms_enabled_checkbox.Active) {
+ return null;
+ }
+
+ if (complex_query) {
+ return UserQueryParser.Parse (terms_entry.Text, field_set);
+ }
+
+ QueryListNode node = new QueryListNode (terms_logic_combo.Active == 0 ? Keyword.And : Keyword.Or);
+ foreach (QueryNode child in terms_box.QueryNodes) {
+ node.AddChild (child);
+ }
+ return node.Trim ();
+ }
+
+ set {
+ if (value != null) {
+ terms_enabled_checkbox.Active = true;
+
+ try {
+ if (value is QueryListNode) {
+ terms_logic_combo.Active = ((value as QueryListNode).Keyword == Keyword.And) ? 0 : 1;
+ terms_box.QueryNodes = (value as QueryListNode).Children;
+ } else {
+ List<QueryNode> nodes = new List<QueryNode> ();
+ nodes.Add (value);
+ terms_box.QueryNodes = nodes;
+ }
+ } catch (ArgumentException) {
+ complex_query = true;
+ matchesFrame.HideAll ();
+ terms_entry.Text = value.ToUserQuery ();
+ terms_entry_box.ShowAll ();
+ }
+ } else {
+ terms_enabled_checkbox.Active = false;
+ }
+ }
+ }
+ }
+}
diff --git a/lib/Hyena/src/Hyena.Gui/Hyena.Query.Gui/QueryDebugger.cs b/lib/Hyena/src/Hyena.Gui/Hyena.Query.Gui/QueryDebugger.cs
new file mode 100644
index 0000000..df8060e
--- /dev/null
+++ b/lib/Hyena/src/Hyena.Gui/Hyena.Query.Gui/QueryDebugger.cs
@@ -0,0 +1,139 @@
+//
+// QueryDebugger.cs
+//
+// Author:
+// Aaron Bockover <abockover at novell.com>
+//
+// Copyright (C) 2008 Novell, Inc.
+//
+// Permission is hereby granted, free of charge, to any person obtaining
+// a copy of this software and associated documentation files (the
+// "Software"), to deal in the Software without restriction, including
+// without limitation the rights to use, copy, modify, merge, publish,
+// distribute, sublicense, and/or sell copies of the Software, and to
+// permit persons to whom the Software is furnished to do so, subject to
+// the following conditions:
+//
+// The above copyright notice and this permission notice shall be
+// included in all copies or substantial portions of the Software.
+//
+// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
+// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
+// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
+// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+//
+
+using System;
+using System.IO;
+using System.Xml;
+using System.Reflection;
+using Gtk;
+
+using Hyena.Gui;
+using Hyena.Query;
+
+namespace Hyena.Query.Gui
+{
+ [TestModule ("Query Debugger")]
+ public class QueryDebugger : Window
+ {
+ private TextView input;
+ private TextView sql;
+ private TextView xml;
+
+ private QueryFieldSet query_field_set;
+
+ public QueryDebugger () : base ("Hyena.Query Debugger")
+ {
+ SetDefaultSize (800, 600);
+
+ VBox input_box = new VBox ();
+ input_box.Spacing = 8;
+ ScrolledWindow sw = new ScrolledWindow ();
+ sw.ShadowType = ShadowType.In;
+ sw.HscrollbarPolicy = PolicyType.Never;
+ input = new TextView ();
+ input.AcceptsTab = false;
+ input.KeyReleaseEvent += delegate (object o, KeyReleaseEventArgs args) {
+ if (args.Event.Key == Gdk.Key.Return || args.Event.Key == Gdk.Key.KP_Enter) {
+ input.Buffer.Text = input.Buffer.Text.Trim ();
+ OnParseUserQuery (null, EventArgs.Empty);
+ }
+ };
+ input.WrapMode = WrapMode.Word;
+ sw.Add (input);
+ input_box.PackStart (sw, true, true, 0);
+ HBox button_box = new HBox ();
+ Button parse = new Button ("Parse as User Query");
+ parse.Clicked += OnParseUserQuery;
+ button_box.PackStart (parse, false, false, 0);
+ input_box.PackStart (button_box, false, false, 0);
+
+ HBox output_box = new HBox ();
+ output_box.Spacing = 8;
+ sw = new ScrolledWindow ();
+ sw.ShadowType = ShadowType.In;
+ sw.HscrollbarPolicy = PolicyType.Never;
+ sql = new TextView ();
+ sql.WrapMode = WrapMode.Word;
+ sw.Add (sql);
+ output_box.PackStart (sw, true, true, 0);
+ sw = new ScrolledWindow ();
+ sw.ShadowType = ShadowType.In;
+ sw.HscrollbarPolicy = PolicyType.Never;
+ xml = new TextView ();
+ xml.WrapMode = WrapMode.Word;
+ sw.Add (xml);
+ output_box.PackStart (sw, true, true, 0);
+
+ VPaned pane = new VPaned ();
+ pane.Add1 (input_box);
+ pane.Add2 (output_box);
+ pane.Position = 100;
+
+ Add (pane);
+ pane.ShowAll ();
+
+ input.HasFocus = true;
+
+ LoadQueryFieldSet ();
+ }
+
+ private void LoadQueryFieldSet ()
+ {
+ Assembly asm = Assembly.LoadFile ("Banshee.Services.dll");
+ Type t = asm.GetType ("Banshee.Query.BansheeQuery");
+ FieldInfo f = t.GetField ("FieldSet", BindingFlags.Public | BindingFlags.Static);
+ query_field_set = (QueryFieldSet)f.GetValue (null);
+ }
+
+ private StreamReader StringToStream (string s)
+ {
+ return new StreamReader (new MemoryStream (System.Text.Encoding.UTF8.GetBytes (s)));
+ }
+
+ private void OnParseUserQuery (object o, EventArgs args)
+ {
+ UserQueryParser parser = new UserQueryParser ();
+ parser.InputReader = StringToStream (input.Buffer.Text);
+ QueryNode node = parser.BuildTree (query_field_set);
+
+ sql.Buffer.Text = node.ToSql (query_field_set) ?? String.Empty;
+
+ XmlDocument doc = new XmlDocument ();
+ doc.LoadXml (node.ToXml (query_field_set));
+
+ MemoryStream s = new MemoryStream ();
+ XmlTextWriter w = new XmlTextWriter (s, System.Text.Encoding.UTF8);
+ w.Formatting = Formatting.Indented;
+ doc.WriteContentTo (w);
+ w.Flush ();
+ s.Flush ();
+ s.Position = 0;
+ xml.Buffer.Text = new StreamReader (s).ReadToEnd ();
+ }
+ }
+}
diff --git a/lib/Hyena/src/Hyena.Gui/Hyena.Query.Gui/QueryLimitBox.cs b/lib/Hyena/src/Hyena.Gui/Hyena.Query.Gui/QueryLimitBox.cs
new file mode 100644
index 0000000..545b9e3
--- /dev/null
+++ b/lib/Hyena/src/Hyena.Gui/Hyena.Query.Gui/QueryLimitBox.cs
@@ -0,0 +1,147 @@
+//
+// QueryLimitBox.cs
+//
+// Authors:
+// Aaron Bockover <abockover at novell.com>
+// Gabriel Burt <gburt at novell.com>
+//
+// Copyright (C) 2005-2008 Novell, Inc.
+//
+// Permission is hereby granted, free of charge, to any person obtaining
+// a copy of this software and associated documentation files (the
+// "Software"), to deal in the Software without restriction, including
+// without limitation the rights to use, copy, modify, merge, publish,
+// distribute, sublicense, and/or sell copies of the Software, and to
+// permit persons to whom the Software is furnished to do so, subject to
+// the following conditions:
+//
+// The above copyright notice and this permission notice shall be
+// included in all copies or substantial portions of the Software.
+//
+// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
+// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
+// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
+// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+//
+
+using System;
+using System.Text;
+
+using Mono.Unix;
+using Gtk;
+
+using Hyena;
+using Hyena.Query;
+
+namespace Hyena.Query.Gui
+{
+ public class QueryLimitBox : HBox
+ {
+ private CheckButton enabled_checkbox;
+ private SpinButton count_spin;
+ private ComboBox limit_combo;
+ private ComboBox order_combo;
+
+ private QueryOrder [] orders;
+ private QueryLimit [] limits;
+
+ public QueryLimitBox (QueryOrder [] orders, QueryLimit [] limits) : base ()
+ {
+ this.orders = orders;
+ this.limits = limits;
+
+ Spacing = 5;
+
+ enabled_checkbox = new CheckButton (Catalog.GetString ("_Limit to"));
+ enabled_checkbox.Toggled += OnEnabledToggled;
+
+ count_spin = new SpinButton (0, Double.MaxValue, 1);
+ count_spin.Numeric = true;
+ count_spin.Digits = 0;
+ count_spin.Value = 25;
+ count_spin.SetSizeRequest (60, -1);
+
+ limit_combo = ComboBox.NewText ();
+ foreach (QueryLimit limit in limits) {
+ limit_combo.AppendText (limit.Label);
+ }
+
+ order_combo = ComboBox.NewText ();
+ order_combo.RowSeparatorFunc = IsRowSeparator;
+ foreach (QueryOrder order in orders) {
+ if (order == null) {
+ order_combo.AppendText (String.Empty);
+ } else {
+ order_combo.AppendText (order.Label);
+ }
+ }
+
+ PackStart (enabled_checkbox, false, false, 0);
+ PackStart (count_spin, false, false, 0);
+ PackStart (limit_combo, false, false, 0);
+ PackStart (new Label (Catalog.GetString ("selected by")), false, false, 0);
+ PackStart (order_combo, false, false, 0);
+
+ enabled_checkbox.Active = false;
+ limit_combo.Active = 0;
+ order_combo.Active = 0;
+
+ OnEnabledToggled (null, null);
+
+ ShowAll ();
+ }
+
+ private bool IsRowSeparator (TreeModel model, TreeIter iter)
+ {
+ return String.IsNullOrEmpty (model.GetValue (iter, 0) as string);
+ }
+
+ public QueryLimit Limit {
+ get { return Enabled ? limits [limit_combo.Active] : null; }
+ set {
+ if (value != null)
+ limit_combo.Active = Array.IndexOf (limits, value);
+ }
+ }
+
+ public IntegerQueryValue LimitValue {
+ get {
+ if (!Enabled)
+ return null;
+
+ IntegerQueryValue val = new IntegerQueryValue ();
+ val.SetValue (count_spin.ValueAsInt);
+ return val;
+ }
+
+ set {
+ if (value != null && !value.IsEmpty)
+ count_spin.Value = value.IntValue;
+ }
+ }
+
+ public QueryOrder Order {
+ get { return Enabled ? orders [order_combo.Active] : null; }
+ set {
+ if (value != null) {
+ order_combo.Active = Array.IndexOf (orders, value);
+ }
+ }
+ }
+
+ private void OnEnabledToggled (object o, EventArgs args)
+ {
+ count_spin.Sensitive = enabled_checkbox.Active;
+ limit_combo.Sensitive = enabled_checkbox.Active;
+ order_combo.Sensitive = enabled_checkbox.Active;
+ }
+
+ public bool Enabled {
+ get { return enabled_checkbox.Active; }
+ set { enabled_checkbox.Active = value; }
+ }
+ }
+}
diff --git a/lib/Hyena/src/Hyena.Gui/Hyena.Query.Gui/QueryTermBox.cs b/lib/Hyena/src/Hyena.Gui/Hyena.Query.Gui/QueryTermBox.cs
new file mode 100644
index 0000000..f5413d7
--- /dev/null
+++ b/lib/Hyena/src/Hyena.Gui/Hyena.Query.Gui/QueryTermBox.cs
@@ -0,0 +1,256 @@
+//
+// QueryTermBox.cs
+//
+// Authors:
+// Aaron Bockover <abockover at novell.com>
+// Gabriel Burt <gburt at novell.com>
+//
+// Copyright (C) 2005-2008 Novell, Inc.
+//
+// Permission is hereby granted, free of charge, to any person obtaining
+// a copy of this software and associated documentation files (the
+// "Software"), to deal in the Software without restriction, including
+// without limitation the rights to use, copy, modify, merge, publish,
+// distribute, sublicense, and/or sell copies of the Software, and to
+// permit persons to whom the Software is furnished to do so, subject to
+// the following conditions:
+//
+// The above copyright notice and this permission notice shall be
+// included in all copies or substantial portions of the Software.
+//
+// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
+// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
+// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
+// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+//
+
+using System;
+using System.Text;
+using System.Collections.Generic;
+
+using Gtk;
+using Hyena;
+using Hyena.Query;
+
+namespace Hyena.Query.Gui
+{
+ public class QueryTermBox
+ {
+ private Button add_button;
+ private Button remove_button;
+
+ public event EventHandler AddRequest;
+ public event EventHandler RemoveRequest;
+
+ private QueryField field;
+ private List<QueryValueEntry> value_entries = new List<QueryValueEntry> ();
+ private List<Operator> operators = new List<Operator> ();
+ private Dictionary<Operator, QueryValueEntry> operator_entries = new Dictionary<Operator, QueryValueEntry> ();
+ private QueryValueEntry current_value_entry;
+ private Operator op;
+
+ private QueryField [] sorted_fields;
+
+ private ComboBox field_chooser;
+ public ComboBox FieldChooser {
+ get { return field_chooser; }
+ }
+
+ private ComboBox op_chooser;
+ public ComboBox OpChooser {
+ get { return op_chooser; }
+ }
+
+ private HBox value_box;
+ public HBox ValueEntry {
+ get { return value_box; }
+ }
+
+ private HBox button_box;
+ public HBox Buttons {
+ get { return button_box; }
+ }
+
+ public QueryTermBox (QueryField [] sorted_fields) : base ()
+ {
+ this.sorted_fields = sorted_fields;
+ BuildInterface ();
+ }
+
+ private void BuildInterface ()
+ {
+ field_chooser = ComboBox.NewText ();
+ field_chooser.Changed += HandleFieldChanged;
+
+ op_chooser = ComboBox.NewText ();
+ op_chooser.RowSeparatorFunc = IsRowSeparator;
+ op_chooser.Changed += HandleOperatorChanged;
+
+ value_box = new HBox ();
+
+ remove_button = new Button (new Image ("gtk-remove", IconSize.Button));
+ remove_button.Relief = ReliefStyle.None;
+ remove_button.Clicked += OnButtonRemoveClicked;
+
+ add_button = new Button (new Image ("gtk-add", IconSize.Button));
+ add_button.Relief = ReliefStyle.None;
+ add_button.Clicked += OnButtonAddClicked;
+
+ button_box = new HBox ();
+ button_box.PackStart (remove_button, false, false, 0);
+ button_box.PackStart (add_button, false, false, 0);
+
+ foreach (QueryField field in sorted_fields) {
+ field_chooser.AppendText (field.Label);
+ }
+
+ Show ();
+ field_chooser.Active = 0;
+ }
+
+ private bool IsRowSeparator (TreeModel model, TreeIter iter)
+ {
+ return String.IsNullOrEmpty (model.GetValue (iter, 0) as string);
+ }
+
+ public void Show ()
+ {
+ field_chooser.ShowAll ();
+ op_chooser.ShowAll ();
+ value_box.ShowAll ();
+ button_box.ShowAll ();
+ }
+
+ private bool first = true;
+ private void SetValueEntry (QueryValueEntry entry)
+ {
+ if (first) {
+ first = false;
+ } else {
+ value_box.Remove (value_box.Children [0]);
+ }
+
+ current_value_entry = entry;
+ value_box.PackStart (current_value_entry, false, true, 0);
+ current_value_entry.ShowAll ();
+ }
+
+ private void HandleFieldChanged (object o, EventArgs args)
+ {
+ if (field_chooser.Active < 0 || field_chooser.Active >= sorted_fields.Length)
+ return;
+
+ QueryField field = sorted_fields [field_chooser.Active];
+
+ // Leave everything as is unless the new field is a different type
+ if (this.field != null && (field.ValueTypes.Length == 1 && this.field.ValueTypes.Length == 1 && field.ValueTypes[0] == this.field.ValueTypes[0])) {
+ this.field = field;
+ return;
+ }
+
+ op_chooser.Changed -= HandleOperatorChanged;
+
+ this.field = field;
+
+ // Remove old type's operators
+ while (op_chooser.Model.IterNChildren () > 0) {
+ op_chooser.RemoveText (0);
+ }
+
+ // Add new field's operators
+ int val_count = 0;
+ value_entries.Clear ();
+ operators.Clear ();
+ operator_entries.Clear ();
+ foreach (QueryValue val in this.field.CreateQueryValues ()) {
+ QueryValueEntry entry = QueryValueEntry.Create (val);
+ value_entries.Add (entry);
+
+ if (val_count++ > 0) {
+ op_chooser.AppendText (String.Empty);
+ operators.Add (null);
+ }
+
+ foreach (Operator op in val.OperatorSet) {
+ op_chooser.AppendText (op.Label);
+ operators.Add (op);
+ operator_entries [op] = entry;
+ }
+ }
+
+ SetValueEntry (value_entries[0]);
+
+ // TODO: If we have the same operator that was previously selected, select it
+ op_chooser.Changed += HandleOperatorChanged;
+ op_chooser.Active = 0;
+ }
+
+ private void HandleOperatorChanged (object o, EventArgs args)
+ {
+ if (op_chooser.Active < 0 || op_chooser.Active >= operators.Count) {
+ return;
+ }
+
+ this.op = operators [op_chooser.Active];
+ if (operator_entries [this.op] != current_value_entry) {
+ SetValueEntry (operator_entries [this.op]);
+ }
+
+ //value_entry = new QueryValueEntry <field.ValueType> ();
+ }
+
+ private void OnButtonAddClicked (object o, EventArgs args)
+ {
+ EventHandler handler = AddRequest;
+ if (handler != null)
+ handler (this, new EventArgs ());
+ }
+
+ private void OnButtonRemoveClicked (object o, EventArgs args)
+ {
+ EventHandler handler = RemoveRequest;
+ if (handler != null)
+ handler (this, new EventArgs ());
+ }
+
+ public bool CanDelete {
+ get { return remove_button.Sensitive; }
+ set { remove_button.Sensitive = value; }
+ }
+
+ public QueryTermNode QueryNode {
+ get {
+ QueryTermNode node = new QueryTermNode ();
+ node.Field = field;
+ node.Operator = op;
+ node.Value = current_value_entry.QueryValue;
+ return node;
+ }
+
+ set {
+ QueryTermNode node = value;
+ if (node == null) {
+ return;
+ }
+
+ field_chooser.Active = Array.IndexOf (sorted_fields, node.Field);
+
+ op_chooser.Active = operators.IndexOf (node.Operator);
+
+ current_value_entry.QueryValue = node.Value;
+ /*foreach (QueryValueEntry entry in value_entries) {
+ if (QueryValueEntry.GetValueType (entry) == node.Value.GetType ()) {
+ Console.WriteLine ("In QueryTermBox, setting QueryNode, got matching value types, value is {0}, empty? {1}", node.Value.ToString (), node.Value.IsEmpty);
+ entry.QueryValue = node.Value;
+ SetValueEntry (entry);
+ break;
+ }
+ }*/
+
+ }
+ }
+ }
+}
diff --git a/lib/Hyena/src/Hyena.Gui/Hyena.Query.Gui/QueryTermsBox.cs b/lib/Hyena/src/Hyena.Gui/Hyena.Query.Gui/QueryTermsBox.cs
new file mode 100644
index 0000000..5a9949d
--- /dev/null
+++ b/lib/Hyena/src/Hyena.Gui/Hyena.Query.Gui/QueryTermsBox.cs
@@ -0,0 +1,179 @@
+//
+// QueryTermsBox.cs
+//
+// Authors:
+// Aaron Bockover <abockover at novell.com>
+// Gabriel Burt <gburt at novell.com>
+// Alexander Kojevnikov <alexander at kojevnikov.com>
+//
+// Copyright (C) 2005-2008 Novell, Inc.
+// Copyright (C) 2009 Alexander Kojevnikov
+//
+// Permission is hereby granted, free of charge, to any person obtaining
+// a copy of this software and associated documentation files (the
+// "Software"), to deal in the Software without restriction, including
+// without limitation the rights to use, copy, modify, merge, publish,
+// distribute, sublicense, and/or sell copies of the Software, and to
+// permit persons to whom the Software is furnished to do so, subject to
+// the following conditions:
+//
+// The above copyright notice and this permission notice shall be
+// included in all copies or substantial portions of the Software.
+//
+// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
+// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
+// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
+// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+//
+
+using System;
+using System.Text;
+using System.Collections.Generic;
+using System.Linq;
+
+using Gtk;
+using Hyena;
+using Hyena.Query;
+
+namespace Hyena.Query.Gui
+{
+ public class QueryTermsBox : Table
+ {
+ private QueryField [] sorted_fields;
+ private List<QueryTermBox> terms = new List<QueryTermBox> ();
+
+ public QueryTermBox FirstRow {
+ get { return terms.Count > 0 ? terms[0] : null; }
+ }
+
+ public QueryTermsBox (QueryFieldSet fieldSet) : base (1, 4, false)
+ {
+ // Sort the fields alphabetically by their label
+ sorted_fields = fieldSet.OrderBy (f => f.Label).ToArray ();
+
+ ColumnSpacing = 5;
+ RowSpacing = 5;
+
+ CreateRow (false);
+ }
+
+ public List<QueryNode> QueryNodes {
+ get {
+ return terms.Select<QueryTermBox, QueryNode> (t => t.QueryNode).ToList ();
+ }
+ set {
+ ClearRows ();
+ first_add_node = true;
+ foreach (QueryNode child in value) {
+ AddNode (child);
+ }
+ }
+ }
+
+ private bool first_add_node;
+ protected void AddNode (QueryNode node)
+ {
+ if (node is QueryTermNode) {
+ QueryTermBox box = first_add_node ? FirstRow : CreateRow (true);
+ box.QueryNode = node as QueryTermNode;
+ first_add_node = false;
+ } else {
+ throw new ArgumentException ("Query is too complex for GUI query editor", "node");
+ }
+ }
+
+ protected QueryTermBox CreateRow (bool canDelete)
+ {
+ QueryTermBox row = new QueryTermBox (sorted_fields);
+
+ row.ValueEntry.HeightRequest = 31;
+ row.Buttons.HeightRequest = 31;
+
+ Resize ((uint) terms.Count + 1, NColumns);
+ Attach (row.FieldChooser, 0, 1, NRows - 1, NRows);
+ Attach (row.OpChooser, 1, 2, NRows - 1, NRows);
+ Attach (row.ValueEntry, 2, 3, NRows - 1, NRows);
+ Attach (row.Buttons, 3, 4, NRows - 1, NRows);
+
+ if (terms.Count > 0) {
+ row.FieldChooser.Active = terms[terms.Count - 1].FieldChooser.Active;
+ row.OpChooser.Active = terms[terms.Count - 1].OpChooser.Active;
+ }
+
+ row.Show ();
+
+ row.CanDelete = canDelete;
+ row.AddRequest += OnRowAddRequest;
+ row.RemoveRequest += OnRowRemoveRequest;
+
+ if (terms.Count == 0) {
+ //row.FieldBox.GrabFocus ();
+ }
+
+ terms.Add (row);
+
+ return row;
+ }
+
+ protected void OnRowAddRequest (object o, EventArgs args)
+ {
+ CreateRow (true);
+ UpdateCanDelete ();
+ }
+
+ protected void OnRowRemoveRequest (object o, EventArgs args)
+ {
+ RemoveRow (terms.IndexOf (o as QueryTermBox));
+ }
+
+ private void ClearRows ()
+ {
+ for (int index = terms.Count - 1; index > 0; index--) {
+ RemoveRow (index);
+ }
+ }
+
+ private void RemoveRow (int index)
+ {
+ FreezeChildNotify ();
+
+ QueryTermBox row = terms [index];
+ Remove (row.FieldChooser);
+ Remove (row.OpChooser);
+ Remove (row.ValueEntry);
+ Remove (row.Buttons);
+
+ for (int i = index + 1; i < terms.Count; i++) {
+ Remove (terms[i].FieldChooser);
+ Remove (terms[i].OpChooser);
+ Remove (terms[i].ValueEntry);
+ Remove (terms[i].Buttons);
+
+ Attach (terms[i].FieldChooser, 0, 1, (uint) i - 1, (uint) i);
+ Attach (terms[i].OpChooser, 1, 2, (uint) i - 1, (uint) i);
+ Attach (terms[i].ValueEntry, 2, 3, (uint) i - 1, (uint) i);
+ Attach (terms[i].Buttons, 3, 4, (uint) i - 1, (uint) i);
+ }
+
+ ThawChildNotify ();
+ terms.Remove (row);
+ UpdateCanDelete ();
+ }
+
+ protected void UpdateCanDelete ()
+ {
+ if (FirstRow != null) {
+ FirstRow.CanDelete = terms.Count > 1;
+ }
+ }
+
+ private new void Attach (Widget widget, uint left_attach, uint right_attach, uint top_attach, uint bottom_attach)
+ {
+ Attach (widget, left_attach, right_attach, top_attach, bottom_attach,
+ AttachOptions.Expand | AttachOptions.Fill, AttachOptions.Shrink, 0, 0);
+ }
+ }
+}
diff --git a/lib/Hyena/src/Hyena.Gui/Hyena.Query.Gui/QueryValueEntry.cs b/lib/Hyena/src/Hyena.Gui/Hyena.Query.Gui/QueryValueEntry.cs
new file mode 100644
index 0000000..e138152
--- /dev/null
+++ b/lib/Hyena/src/Hyena.Gui/Hyena.Query.Gui/QueryValueEntry.cs
@@ -0,0 +1,103 @@
+//
+// QueryValueEntry.cs
+//
+// Authors:
+// Gabriel Burt <gburt at novell.com>
+//
+// Copyright (C) 2008 Novell, Inc.
+//
+// Permission is hereby granted, free of charge, to any person obtaining
+// a copy of this software and associated documentation files (the
+// "Software"), to deal in the Software without restriction, including
+// without limitation the rights to use, copy, modify, merge, publish,
+// distribute, sublicense, and/or sell copies of the Software, and to
+// permit persons to whom the Software is furnished to do so, subject to
+// the following conditions:
+//
+// The above copyright notice and this permission notice shall be
+// included in all copies or substantial portions of the Software.
+//
+// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
+// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
+// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
+// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+//
+
+using System;
+using System.Collections.Generic;
+
+using Hyena.Query;
+using Gtk;
+
+namespace Hyena.Query.Gui
+{
+ public abstract class QueryValueEntry : HBox
+ {
+ private static Dictionary<Type, Type> types = new Dictionary<Type, Type> ();
+
+ protected int DefaultWidth {
+ get { return 170; }
+ }
+
+ public QueryValueEntry () : base ()
+ {
+ Spacing = 5;
+ }
+
+ public abstract QueryValue QueryValue { get; set; }
+
+ public static QueryValueEntry Create (QueryValue qv)
+ {
+ Type qv_type = qv.GetType ();
+ Type entry_type = null;
+
+ foreach (KeyValuePair<Type, Type> pair in types) {
+ if (pair.Value == qv_type) {
+ entry_type = pair.Key;
+ break;
+ }
+ }
+
+ // If we don't have an entry type that's exactly for our type, take a more generic one
+ if (entry_type == null) {
+ foreach (KeyValuePair<Type, Type> pair in types) {
+ if (qv_type.IsSubclassOf (pair.Value)) {
+ entry_type = pair.Key;
+ break;
+ }
+ }
+ }
+
+ if (entry_type != null) {
+ QueryValueEntry entry = Activator.CreateInstance (entry_type) as QueryValueEntry;
+ entry.QueryValue = qv;
+ return entry;
+ }
+
+ return null;
+ }
+
+ public static void AddSubType (Type entry_type, Type query_value_type)
+ {
+ types[entry_type] = query_value_type;
+ }
+
+ public static Type GetValueType (QueryValueEntry entry)
+ {
+ return types [entry.GetType ()];
+ }
+
+ static QueryValueEntry () {
+ AddSubType (typeof(StringQueryValueEntry), typeof(StringQueryValue));
+ AddSubType (typeof(IntegerQueryValueEntry), typeof(IntegerQueryValue));
+ AddSubType (typeof(DateQueryValueEntry), typeof(DateQueryValue));
+ AddSubType (typeof(FileSizeQueryValueEntry), typeof(FileSizeQueryValue));
+ AddSubType (typeof(TimeSpanQueryValueEntry), typeof(TimeSpanQueryValue));
+ AddSubType (typeof(RelativeTimeSpanQueryValueEntry), typeof(RelativeTimeSpanQueryValue));
+ AddSubType (typeof(NullQueryValueEntry), typeof(NullQueryValue));
+ }
+ }
+}
diff --git a/lib/Hyena/src/Hyena.Gui/Hyena.Query.Gui/RelativeTimeSpanQueryValueEntry.cs b/lib/Hyena/src/Hyena.Gui/Hyena.Query.Gui/RelativeTimeSpanQueryValueEntry.cs
new file mode 100644
index 0000000..ff10114
--- /dev/null
+++ b/lib/Hyena/src/Hyena.Gui/Hyena.Query.Gui/RelativeTimeSpanQueryValueEntry.cs
@@ -0,0 +1,50 @@
+//
+// RelativeTimeSpanQueryValueEntry.cs
+//
+// Authors:
+// Gabriel Burt <gburt at novell.com>
+//
+// Copyright (C) 2008 Novell, Inc.
+//
+// Permission is hereby granted, free of charge, to any person obtaining
+// a copy of this software and associated documentation files (the
+// "Software"), to deal in the Software without restriction, including
+// without limitation the rights to use, copy, modify, merge, publish,
+// distribute, sublicense, and/or sell copies of the Software, and to
+// permit persons to whom the Software is furnished to do so, subject to
+// the following conditions:
+//
+// The above copyright notice and this permission notice shall be
+// included in all copies or substantial portions of the Software.
+//
+// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
+// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
+// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
+// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+//
+
+using System;
+
+using Mono.Unix;
+
+using Hyena.Query;
+using Gtk;
+
+namespace Hyena.Query.Gui
+{
+ public class RelativeTimeSpanQueryValueEntry : TimeSpanQueryValueEntry
+ {
+ public RelativeTimeSpanQueryValueEntry () : base ()
+ {
+ Add (new Label (Catalog.GetString ("ago")));
+ }
+
+ protected override void HandleValueChanged (object o, EventArgs args)
+ {
+ query_value.SetRelativeValue (-spin_button.ValueAsInt, factors [combo.Active]);
+ }
+ }
+}
diff --git a/lib/Hyena/src/Hyena.Gui/Hyena.Query.Gui/StringQueryValueEntry.cs b/lib/Hyena/src/Hyena.Gui/Hyena.Query.Gui/StringQueryValueEntry.cs
new file mode 100644
index 0000000..f3bd1c7
--- /dev/null
+++ b/lib/Hyena/src/Hyena.Gui/Hyena.Query.Gui/StringQueryValueEntry.cs
@@ -0,0 +1,64 @@
+//
+// StringQueryValueEntry.cs
+//
+// Authors:
+// Gabriel Burt <gburt at novell.com>
+//
+// Copyright (C) 2008 Novell, Inc.
+//
+// Permission is hereby granted, free of charge, to any person obtaining
+// a copy of this software and associated documentation files (the
+// "Software"), to deal in the Software without restriction, including
+// without limitation the rights to use, copy, modify, merge, publish,
+// distribute, sublicense, and/or sell copies of the Software, and to
+// permit persons to whom the Software is furnished to do so, subject to
+// the following conditions:
+//
+// The above copyright notice and this permission notice shall be
+// included in all copies or substantial portions of the Software.
+//
+// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
+// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
+// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
+// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+//
+
+using System;
+
+using Hyena.Query;
+using Gtk;
+
+namespace Hyena.Query.Gui
+{
+ public class StringQueryValueEntry : QueryValueEntry
+ {
+ protected Gtk.Entry entry;
+ protected StringQueryValue query_value;
+
+ public StringQueryValueEntry () : base ()
+ {
+ entry = new Entry ();
+ entry.WidthRequest = DefaultWidth;
+ entry.Changed += HandleChanged;
+ Add (entry);
+ }
+
+ public override QueryValue QueryValue {
+ get { return query_value; }
+ set {
+ entry.Changed -= HandleChanged;
+ query_value = value as StringQueryValue;
+ entry.Text = (query_value.Value as string) ?? String.Empty;
+ entry.Changed += HandleChanged;
+ }
+ }
+
+ protected void HandleChanged (object o, EventArgs args)
+ {
+ query_value.ParseUserQuery (entry.Text);
+ }
+ }
+}
diff --git a/lib/Hyena/src/Hyena.Gui/Hyena.Query.Gui/TimeSpanQueryValueEntry.cs b/lib/Hyena/src/Hyena.Gui/Hyena.Query.Gui/TimeSpanQueryValueEntry.cs
new file mode 100644
index 0000000..0158ad1
--- /dev/null
+++ b/lib/Hyena/src/Hyena.Gui/Hyena.Query.Gui/TimeSpanQueryValueEntry.cs
@@ -0,0 +1,93 @@
+//
+// TimeSpanQueryValueEntry.cs
+//
+// Authors:
+// Gabriel Burt <gburt at novell.com>
+//
+// Copyright (C) 2008 Novell, Inc.
+//
+// Permission is hereby granted, free of charge, to any person obtaining
+// a copy of this software and associated documentation files (the
+// "Software"), to deal in the Software without restriction, including
+// without limitation the rights to use, copy, modify, merge, publish,
+// distribute, sublicense, and/or sell copies of the Software, and to
+// permit persons to whom the Software is furnished to do so, subject to
+// the following conditions:
+//
+// The above copyright notice and this permission notice shall be
+// included in all copies or substantial portions of the Software.
+//
+// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
+// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
+// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
+// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+//
+
+using System;
+
+using Mono.Unix;
+
+using Hyena.Query;
+using Gtk;
+
+namespace Hyena.Query.Gui
+{
+ public class TimeSpanQueryValueEntry : QueryValueEntry
+ {
+ protected SpinButton spin_button;
+ protected ComboBox combo;
+ protected TimeSpanQueryValue query_value;
+ private int set_combo = 1;
+
+ protected static readonly TimeFactor [] factors = new TimeFactor [] {
+ TimeFactor.Second, TimeFactor.Minute, TimeFactor.Hour, TimeFactor.Day,
+ TimeFactor.Week, TimeFactor.Month, TimeFactor.Year
+ };
+
+ public TimeSpanQueryValueEntry () : base ()
+ {
+ spin_button = new SpinButton (0.0, 1.0, 1.0);
+ spin_button.Digits = 1;
+ spin_button.WidthChars = 4;
+ spin_button.SetRange (0.0, Double.MaxValue);
+ Add (spin_button);
+
+ combo = ComboBox.NewText ();
+ combo.AppendText (Catalog.GetString ("seconds"));
+ combo.AppendText (Catalog.GetString ("minutes"));
+ combo.AppendText (Catalog.GetString ("hours"));
+ combo.AppendText (Catalog.GetString ("days"));
+ combo.AppendText (Catalog.GetString ("weeks"));
+ combo.AppendText (Catalog.GetString ("months"));
+ combo.AppendText (Catalog.GetString ("years"));
+ combo.Realized += delegate { combo.Active = set_combo; };
+ Add (combo);
+
+ spin_button.ValueChanged += HandleValueChanged;
+ combo.Changed += HandleValueChanged;
+ }
+
+ public override QueryValue QueryValue {
+ get { return query_value; }
+ set {
+ spin_button.ValueChanged -= HandleValueChanged;
+ combo.Changed -= HandleValueChanged;
+
+ query_value = value as TimeSpanQueryValue;
+ spin_button.Value = query_value.FactoredValue;
+ combo.Active = set_combo = Array.IndexOf (factors, query_value.Factor);
+
+ spin_button.ValueChanged += HandleValueChanged;
+ combo.Changed += HandleValueChanged;
+ }
+ }
+
+ protected virtual void HandleValueChanged (object o, EventArgs args)
+ {
+ query_value.SetRelativeValue (spin_button.Value, factors [combo.Active]);
+ }
+ }
+}
diff --git a/lib/Hyena/src/Hyena.Gui/Hyena.Widgets/AnimatedBox.cs b/lib/Hyena/src/Hyena.Gui/Hyena.Widgets/AnimatedBox.cs
new file mode 100644
index 0000000..4154570
--- /dev/null
+++ b/lib/Hyena/src/Hyena.Gui/Hyena.Widgets/AnimatedBox.cs
@@ -0,0 +1,549 @@
+//
+// AnimatedBox.cs
+//
+// Authors:
+// Scott Peterson <lunchtimemama at gmail.com>
+//
+// Copyright (C) 2008 Scott Peterson
+//
+// Permission is hereby granted, free of charge, to any person obtaining
+// a copy of this software and associated documentation files (the
+// "Software"), to deal in the Software without restriction, including
+// without limitation the rights to use, copy, modify, merge, publish,
+// distribute, sublicense, and/or sell copies of the Software, and to
+// permit persons to whom the Software is furnished to do so, subject to
+// the following conditions:
+//
+// The above copyright notice and this permission notice shall be
+// included in all copies or substantial portions of the Software.
+//
+// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
+// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
+// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
+// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+//
+
+using System;
+using System.Collections;
+using System.Collections.Generic;
+using Gdk;
+using Gtk;
+
+using Hyena.Gui.Theatrics;
+
+namespace Hyena.Widgets
+{
+ public abstract class AnimatedBox : Container
+ {
+ private readonly Stage<AnimatedWidget> stage = new Stage<AnimatedWidget> ();
+ private readonly LinkedList<AnimatedWidget> children = new LinkedList<AnimatedWidget> ();
+ private readonly SingleActorStage border_stage = new Hyena.Gui.Theatrics.SingleActorStage ();
+ private readonly bool horizontal;
+
+ private uint duration = 500;
+ private Easing easing = Easing.Linear;
+ private Blocking blocking = Blocking.Upstage;
+ private int start_padding;
+ private int end_padding;
+ private int spacing;
+ private int start_spacing;
+ private int end_spacing;
+ private int active_count;
+
+ private int start_border;
+ private int end_border;
+ private double border_bias;
+ private Easing border_easing;
+ private AnimationState border_state;
+
+ protected AnimatedBox (bool horizontal)
+ {
+ WidgetFlags |= WidgetFlags.NoWindow;
+ this.horizontal = horizontal;
+ stage.ActorStep += OnActorStep;
+ border_stage.Iteration += OnBorderIteration;
+ }
+
+ protected AnimatedBox (IntPtr raw) : base (raw)
+ {
+ }
+
+#region Private
+
+ private double Percent {
+ get { return border_stage.Actor.Percent * border_bias + (1.0 - border_bias); }
+ }
+
+ private bool OnActorStep (Actor<AnimatedWidget> actor)
+ {
+ switch (actor.Target.AnimationState) {
+ case AnimationState.Coming:
+ actor.Target.Percent = actor.Percent;
+ if (actor.Expired) {
+ actor.Target.AnimationState = AnimationState.Idle;
+ return false;
+ }
+ break;
+ case AnimationState.IntendingToGo:
+ actor.Target.AnimationState = AnimationState.Going;
+ actor.Target.Bias = actor.Percent;
+ actor.Reset ((uint)(actor.Target.Duration * actor.Percent));
+ break;
+ case AnimationState.Going:
+ if (actor.Expired) {
+ actor.Target.Unparent ();
+ children.Remove (actor.Target.Node);
+ return false;
+ } else {
+ actor.Target.Percent = 1.0 - actor.Percent;
+ }
+ break;
+ }
+
+ return true;
+ }
+
+ private void OnBorderIteration (object sender, EventArgs args)
+ {
+ if (border_stage.Actor == null) {
+ if (border_state == AnimationState.Coming) {
+ start_border = start_padding;
+ end_border = end_padding;
+ } else {
+ start_border = end_border = 0;
+ }
+ border_state = AnimationState.Idle;
+ } else {
+ double percent = border_state == AnimationState.Coming ? Percent : 1.0 - Percent;
+ start_border = Choreographer.PixelCompose (percent, start_padding, border_easing);
+ end_border = Choreographer.PixelCompose (percent, end_padding, border_easing);
+ }
+ QueueResizeNoRedraw ();
+ }
+
+ private void OnWidgetDestroyed (object sender, EventArgs args)
+ {
+ RemoveCore ((AnimatedWidget)sender);
+ }
+
+ private void RecalculateSpacings ()
+ {
+ int skip_count = 0;
+
+ foreach (AnimatedWidget animated_widget in Widgets) {
+ animated_widget.QueueResizeNoRedraw ();
+ if (skip_count > 1) {
+ skip_count--;
+ continue;
+ }
+ AnimatedWidget widget = animated_widget;
+
+ if (skip_count == 0) {
+ widget.StartPadding = start_spacing;
+ } else {
+ skip_count--;
+ }
+ widget.EndPadding = end_spacing;
+
+ if (widget.Node.Previous == null) {
+ while (true) {
+ widget.StartPadding = 0;
+ if (widget.AnimationState == AnimationState.Coming ||
+ widget.AnimationState == AnimationState.Idle || widget.Node.Next == null) {
+ break;
+ }
+ widget.EndPadding = spacing;
+ widget = widget.Node.Next.Value;
+ skip_count++;
+ }
+ }
+
+ if (widget.Node.Next == null) {
+ while (true) {
+ widget.EndPadding = 0;
+ if (widget.AnimationState == AnimationState.Coming ||
+ widget.AnimationState == AnimationState.Idle || widget.Node.Previous == null) {
+ break;
+ }
+ widget.StartPadding = spacing;
+ widget = widget.Node.Previous.Value;
+ }
+ }
+ }
+ }
+
+#endregion
+
+#region Protected Overrides
+
+ protected override void OnAdded (Widget widget)
+ {
+ PackStart (widget, duration, easing, blocking);
+ }
+
+ protected override void OnSizeRequested (ref Requisition requisition)
+ {
+ int width = 0;
+ int height = 0;
+
+ if (horizontal) {
+ width = start_border + end_border;
+ } else {
+ height = start_border + end_border;
+ }
+
+ foreach (AnimatedWidget widget in Widgets) {
+ Requisition req = widget.SizeRequest ();
+ if (horizontal) {
+ width += req.Width;
+ height = Math.Max (height, req.Height);
+ } else {
+ width = Math.Max (width, req.Width);
+ height += req.Height;
+ }
+ }
+
+ requisition.Width = width;
+ requisition.Height = height;
+ }
+
+ protected override void OnSizeAllocated (Rectangle allocation)
+ {
+ base.OnSizeAllocated (allocation);
+ if (horizontal) {
+ allocation.X += start_border;
+ allocation.Y += (int)BorderWidth;
+ allocation.Height -= (int)BorderWidth * 2;
+ } else {
+ allocation.X += (int)BorderWidth;
+ allocation.Y += start_border;
+ allocation.Width -= (int)BorderWidth * 2;
+ }
+
+ foreach (AnimatedWidget widget in Widgets) {
+ if (horizontal) {
+ allocation.Width = widget.Width;
+ widget.SizeAllocate (allocation);
+ allocation.X += allocation.Width;
+ } else {
+ allocation.Height = widget.Height;
+ widget.SizeAllocate (allocation);
+ allocation.Y += allocation.Height;
+ }
+ }
+ }
+
+ protected override void ForAll (bool include_internals, Callback callback)
+ {
+ foreach (AnimatedWidget child in Widgets) {
+ callback (child);
+ }
+ }
+
+#endregion
+
+#region Public
+
+#region Properties
+
+ public uint Duration {
+ get { return duration; }
+ set { duration = value; }
+ }
+
+ public Easing Easing {
+ get { return easing; }
+ set { easing = value; }
+ }
+
+ public Blocking Blocking {
+ get { return blocking; }
+ set { blocking = value; }
+ }
+
+ public int Spacing {
+ get { return spacing; }
+ set {
+ spacing = value;
+ double half = (double)value / 2.0;
+ start_spacing = (int)Math.Ceiling (half);
+ end_spacing = (int)Math.Floor (half);
+ }
+ }
+
+ public int StartPadding {
+ get { return start_padding - (int)BorderWidth; }
+ set { start_padding = value + (int)BorderWidth; }
+ }
+
+ public int EndPadding {
+ get { return end_padding - (int)BorderWidth; }
+ set { end_padding = value + (int)BorderWidth; }
+ }
+
+ internal IEnumerable<AnimatedWidget> Widgets {
+ get {
+ foreach (AnimatedWidget child in children) {
+ yield return child;
+ }
+ }
+ }
+
+#endregion
+
+#region Pack Methods
+
+ public void PackStart (Widget widget)
+ {
+ PackStart (widget, duration, easing, blocking);
+ }
+
+ public void PackStart (Widget widget, uint duration)
+ {
+ PackStart (widget, duration, easing, blocking);
+ }
+
+ public void PackStart (Widget widget, Easing easing)
+ {
+ PackStart (widget, duration, easing, blocking);
+ }
+
+ public void PackStart (Widget widget, uint duration, Easing easing)
+ {
+ PackStart (widget, duration, easing, blocking);
+ }
+
+ public void PackStart (Widget widget, Blocking blocking)
+ {
+ PackStart (widget, duration, easing, blocking);
+ }
+
+ public void PackStart (Widget widget, uint duration, Blocking blocking)
+ {
+ PackStart (widget, duration, easing, blocking);
+ }
+
+ public void PackStart (Widget widget, Easing easing, Blocking blocking)
+ {
+ PackStart (widget, duration, easing, blocking);
+ }
+
+ public void PackStart (Widget widget, uint duration, Easing easing, Blocking blocking)
+ {
+ Pack (widget, duration, easing, blocking, false);
+ }
+
+ public void PackEnd (Widget widget)
+ {
+ PackEnd (widget, duration, easing, blocking);
+ }
+
+ public void PackEnd (Widget widget, uint duration)
+ {
+ PackEnd (widget, duration, easing, blocking);
+ }
+
+ public void PackEnd (Widget widget, Easing easing)
+ {
+ PackEnd (widget, duration, easing, blocking);
+ }
+
+ public void PackEnd (Widget widget, uint duration, Easing easing)
+ {
+ PackEnd (widget, duration, easing, blocking);
+ }
+
+ public void PackEnd (Widget widget, Blocking blocking)
+ {
+ PackEnd (widget, duration, easing, blocking);
+ }
+
+ public void PackEnd (Widget widget, uint duration, Blocking blocking)
+ {
+ PackEnd (widget, duration, easing, blocking);
+ }
+
+ public void PackEnd (Widget widget, Easing easing, Blocking blocking)
+ {
+ PackEnd (widget, duration, easing, blocking);
+ }
+
+ public void PackEnd (Widget widget, uint duration, Easing easing, Blocking blocking)
+ {
+ Pack (widget, duration, easing, blocking, true);
+ }
+
+ private void Pack (Widget widget, uint duration, Easing easing, Blocking blocking, bool end)
+ {
+ if (widget == null) {
+ throw new ArgumentNullException ("widget");
+ }
+
+ AnimatedWidget animated_widget = new AnimatedWidget (widget, duration, easing, blocking, horizontal);
+ animated_widget.Parent = this;
+ animated_widget.WidgetDestroyed += OnWidgetDestroyed;
+ stage.Add (animated_widget, duration);
+ animated_widget.Node = end
+ ? children.AddLast (animated_widget)
+ : children.AddFirst (animated_widget);
+
+ RecalculateSpacings ();
+ if (active_count == 0) {
+ if (border_state == AnimationState.Going) {
+ border_bias = Percent;
+ } else {
+ border_easing = easing;
+ border_bias = 1.0;
+ }
+ border_state = AnimationState.Coming;
+ border_stage.Reset ((uint)(duration * border_bias));
+ }
+ active_count++;
+ }
+
+#endregion
+
+#region Remove Methods
+
+ public new void Remove (Widget widget)
+ {
+ RemoveCore (widget, 0, 0, 0, false, false);
+ }
+
+ public void Remove (Widget widget, uint duration)
+ {
+ RemoveCore (widget, duration, 0, 0, false, false);
+ }
+
+ public void Remove (Widget widget, Easing easing)
+ {
+ RemoveCore (widget, 0, easing, 0, true, false);
+ }
+
+ public void Remove (Widget widget, uint duration, Easing easing)
+ {
+ RemoveCore (widget, duration, easing, 0, true, false);
+ }
+
+ public void Remove (Widget widget, Blocking blocking)
+ {
+ RemoveCore (widget, 0, 0, blocking, false, true);
+ }
+
+ public void Remove (Widget widget, uint duration, Blocking blocking)
+ {
+ RemoveCore (widget, duration, 0, blocking, false, true);
+ }
+
+ public void Remove (Widget widget, Easing easing, Blocking blocking)
+ {
+ RemoveCore (widget, 0, easing, blocking, true, true);
+ }
+
+ public void Remove (Widget widget, uint duration, Easing easing, Blocking blocking)
+ {
+ RemoveCore (widget, duration, easing, blocking, true, true);
+ }
+
+ private void RemoveCore (Widget widget, uint duration, Easing easing, Blocking blocking, bool use_easing, bool use_blocking)
+ {
+ if (widget == null) {
+ throw new ArgumentNullException ("widget");
+ }
+
+ AnimatedWidget animated_widget = null;
+ foreach (AnimatedWidget child in Widgets) {
+ if (child.Widget == widget) {
+ animated_widget = child;
+ break;
+ }
+ }
+
+ if (animated_widget == null) {
+ throw new ArgumentException ("Cannot remove the specified widget because it has not been added to this container or it has already been removed.", "widget");
+ }
+
+ RemoveCore (animated_widget, duration, easing, blocking, use_easing, use_blocking);
+ RecalculateSpacings ();
+ }
+
+ private void RemoveCore (AnimatedWidget widget)
+ {
+ RemoveCore (widget, widget.Duration, 0, 0, false, false);
+ }
+
+ private void RemoveCore (AnimatedWidget widget, uint duration, Easing easing, Blocking blocking, bool use_easing, bool use_blocking)
+ {
+ if (duration > 0) {
+ widget.Duration = duration;
+ }
+
+ if (use_easing) {
+ widget.Easing = easing;
+ }
+
+ if (use_blocking) {
+ widget.Blocking = blocking;
+ }
+
+ if (widget.AnimationState == AnimationState.Coming) {
+ widget.AnimationState = AnimationState.IntendingToGo;
+ } else {
+ if (widget.Easing == Easing.QuadraticIn) {
+ widget.Easing = Easing.QuadraticOut;
+ } else if (widget.Easing == Easing.QuadraticOut) {
+ widget.Easing = Easing.QuadraticIn;
+ } else if (widget.Easing == Easing.ExponentialIn) {
+ widget.Easing = Easing.ExponentialOut;
+ } else if (widget.Easing == Easing.ExponentialOut) {
+ widget.Easing = Easing.ExponentialIn;
+ }
+ widget.AnimationState = AnimationState.Going;
+ stage.Add (widget, widget.Duration);
+ }
+
+ duration = widget.Duration;
+ easing = widget.Easing;
+
+ active_count--;
+ if (active_count == 0) {
+ if (border_state == AnimationState.Coming) {
+ border_bias = Percent;
+ } else {
+ border_easing = easing;
+ border_bias = 1.0;
+ }
+ border_state = AnimationState.Going;
+ border_stage.Reset ((uint)(duration * border_bias));
+ }
+ }
+
+ public void RemoveAll ()
+ {
+ foreach (AnimatedWidget child in Widgets) {
+ if (child.AnimationState != AnimationState.Going) {
+ RemoveCore (child);
+ }
+ }
+ RecalculateSpacings ();
+ }
+
+#endregion
+
+ public bool Contains (Widget widget)
+ {
+ foreach (AnimatedWidget child in Widgets) {
+ if (child.AnimationState != AnimationState.Going && child.Widget == widget) {
+ return true;
+ }
+ }
+ return false;
+ }
+
+#endregion
+
+ }
+}
\ No newline at end of file
diff --git a/lib/Hyena/src/Hyena.Gui/Hyena.Widgets/AnimatedHBox.cs b/lib/Hyena/src/Hyena.Gui/Hyena.Widgets/AnimatedHBox.cs
new file mode 100644
index 0000000..d121fc7
--- /dev/null
+++ b/lib/Hyena/src/Hyena.Gui/Hyena.Widgets/AnimatedHBox.cs
@@ -0,0 +1,45 @@
+//
+// AnimatedHBox.cs
+//
+// Authors:
+// Scott Peterson <lunchtimemama at gmail.com>
+//
+// Copyright (C) 2008 Scott Peterson
+//
+// Permission is hereby granted, free of charge, to any person obtaining
+// a copy of this software and associated documentation files (the
+// "Software"), to deal in the Software without restriction, including
+// without limitation the rights to use, copy, modify, merge, publish,
+// distribute, sublicense, and/or sell copies of the Software, and to
+// permit persons to whom the Software is furnished to do so, subject to
+// the following conditions:
+//
+// The above copyright notice and this permission notice shall be
+// included in all copies or substantial portions of the Software.
+//
+// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
+// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
+// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
+// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+//
+
+using System;
+using Gdk;
+using Gtk;
+
+namespace Hyena.Widgets
+{
+ public class AnimatedHBox : AnimatedBox
+ {
+ public AnimatedHBox () : base (true)
+ {
+ }
+
+ protected AnimatedHBox (IntPtr raw) : base (raw)
+ {
+ }
+ }
+}
diff --git a/lib/Hyena/src/Hyena.Gui/Hyena.Widgets/AnimatedImage.cs b/lib/Hyena/src/Hyena.Gui/Hyena.Widgets/AnimatedImage.cs
new file mode 100644
index 0000000..fe31d4c
--- /dev/null
+++ b/lib/Hyena/src/Hyena.Gui/Hyena.Widgets/AnimatedImage.cs
@@ -0,0 +1,189 @@
+//
+// AnimatedImage.cs
+//
+// Author:
+// Aaron Bockover <abockover at novell.com>
+//
+// Copyright (C) 2008 Novell, Inc.
+//
+// Permission is hereby granted, free of charge, to any person obtaining
+// a copy of this software and associated documentation files (the
+// "Software"), to deal in the Software without restriction, including
+// without limitation the rights to use, copy, modify, merge, publish,
+// distribute, sublicense, and/or sell copies of the Software, and to
+// permit persons to whom the Software is furnished to do so, subject to
+// the following conditions:
+//
+// The above copyright notice and this permission notice shall be
+// included in all copies or substantial portions of the Software.
+//
+// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
+// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
+// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
+// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+//
+
+using System;
+using Gtk;
+
+using Hyena.Gui;
+using Hyena.Gui.Theatrics;
+
+namespace Hyena.Widgets
+{
+ public class AnimatedImage : Image
+ {
+ private Gdk.Pixbuf pixbuf;
+ private Gdk.Pixbuf inactive_pixbuf;
+ private Gdk.Pixbuf [] frames;
+ private int frame_width;
+ private int frame_height;
+ private int max_frames;
+ private bool active_frozen;
+
+ private SingleActorStage stage = new SingleActorStage ();
+
+ public AnimatedImage ()
+ {
+ stage.Iteration += OnIteration;
+ stage.Reset ();
+ stage.Actor.CanExpire = false;
+ }
+
+ protected override void OnShown ()
+ {
+ base.OnShown ();
+
+ if (active_frozen && !stage.Playing) {
+ stage.Play ();
+ }
+ }
+
+ protected override void OnHidden ()
+ {
+ base.OnHidden ();
+
+ active_frozen = Active;
+ if (stage.Playing) {
+ stage.Pause ();
+ }
+ }
+
+ protected override void OnSizeAllocated (Gdk.Rectangle allocation)
+ {
+ if (allocation != Allocation) {
+ base.OnSizeAllocated (allocation);
+ }
+ }
+
+ public void Load ()
+ {
+ ExtractFrames ();
+ base.Pixbuf = frames[0];
+ }
+
+ private void OnIteration (object o, EventArgs args)
+ {
+ if (!Visible) {
+ return;
+ }
+
+ if (frames == null || frames.Length == 0) {
+ return;
+ } else if (frames.Length == 1) {
+ base.Pixbuf = frames[0];
+ return;
+ }
+
+ // The first frame is the idle frame, so skip it when animating
+ int index = (int)Math.Round ((double)(frames.Length - 2) * stage.Actor.Percent) + 1;
+ if (base.Pixbuf != frames[index]) {
+ base.Pixbuf = frames[index];
+ }
+ }
+
+ private void ExtractFrames ()
+ {
+ if (pixbuf == null) {
+ throw new ApplicationException ("No source pixbuf specified");
+ } else if (pixbuf.Width % frame_width != 0 || pixbuf.Height % frame_height != 0) {
+ throw new ApplicationException ("Invalid frame dimensions");
+ }
+
+ int rows = pixbuf.Height / frame_height;
+ int cols = pixbuf.Width / frame_width;
+ int frame_count = rows * cols;
+
+ frames = new Gdk.Pixbuf[max_frames > 0 ? max_frames : frame_count];
+
+ for (int y = 0, n = 0; y < rows; y++) {
+ for (int x = 0; x < cols; x++, n++) {
+ frames[n] = new Gdk.Pixbuf (pixbuf, x * frame_width, y * frame_height,
+ frame_width, frame_height);
+
+ if (max_frames > 0 && n >= max_frames - 1) {
+ return;
+ }
+ }
+ }
+ }
+
+ public bool Active {
+ get { return !Visible ? active_frozen : stage.Playing; }
+ set {
+ if (value) {
+ active_frozen = true;
+ if (Visible) {
+ stage.Play ();
+ }
+ } else {
+ active_frozen = false;
+ if (stage.Playing) {
+ stage.Pause ();
+ }
+
+ if (inactive_pixbuf != null) {
+ base.Pixbuf = inactive_pixbuf;
+ } else if (frames != null && frames.Length > 1) {
+ base.Pixbuf = frames[0];
+ } else {
+ base.Pixbuf = null;
+ }
+ }
+ }
+ }
+
+ public int FrameWidth {
+ get { return frame_width; }
+ set { frame_width = value; }
+ }
+
+ public int FrameHeight {
+ get { return frame_height; }
+ set { frame_height = value; }
+ }
+
+ public int MaxFrames {
+ get { return max_frames; }
+ set { max_frames = value; }
+ }
+
+ public new Gdk.Pixbuf Pixbuf {
+ get { return pixbuf; }
+ set { pixbuf = value; }
+ }
+
+ public Gdk.Pixbuf InactivePixbuf {
+ get { return inactive_pixbuf; }
+ set {
+ inactive_pixbuf = value;
+ if (!Active) {
+ base.Pixbuf = value;
+ }
+ }
+ }
+ }
+}
diff --git a/lib/Hyena/src/Hyena.Gui/Hyena.Widgets/AnimatedVBox.cs b/lib/Hyena/src/Hyena.Gui/Hyena.Widgets/AnimatedVBox.cs
new file mode 100644
index 0000000..0d59221
--- /dev/null
+++ b/lib/Hyena/src/Hyena.Gui/Hyena.Widgets/AnimatedVBox.cs
@@ -0,0 +1,45 @@
+//
+// AnimatedVBox.cs
+//
+// Authors:
+// Scott Peterson <lunchtimemama at gmail.com>
+//
+// Copyright (C) 2008 Scott Peterson
+//
+// Permission is hereby granted, free of charge, to any person obtaining
+// a copy of this software and associated documentation files (the
+// "Software"), to deal in the Software without restriction, including
+// without limitation the rights to use, copy, modify, merge, publish,
+// distribute, sublicense, and/or sell copies of the Software, and to
+// permit persons to whom the Software is furnished to do so, subject to
+// the following conditions:
+//
+// The above copyright notice and this permission notice shall be
+// included in all copies or substantial portions of the Software.
+//
+// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
+// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
+// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
+// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+//
+
+using System;
+using Gdk;
+using Gtk;
+
+namespace Hyena.Widgets
+{
+ public class AnimatedVBox : AnimatedBox
+ {
+ public AnimatedVBox () : base (false)
+ {
+ }
+
+ protected AnimatedVBox (IntPtr raw) : base (raw)
+ {
+ }
+ }
+}
\ No newline at end of file
diff --git a/lib/Hyena/src/Hyena.Gui/Hyena.Widgets/AnimatedWidget.cs b/lib/Hyena/src/Hyena.Gui/Hyena.Widgets/AnimatedWidget.cs
new file mode 100644
index 0000000..a77eadf
--- /dev/null
+++ b/lib/Hyena/src/Hyena.Gui/Hyena.Widgets/AnimatedWidget.cs
@@ -0,0 +1,198 @@
+//
+// AnimatedVboxActor.cs
+//
+// Authors:
+// Scott Peterson <lunchtimemama at gmail.com>
+//
+// Copyright (C) 2008 Scott Peterson
+//
+// Permission is hereby granted, free of charge, to any person obtaining
+// a copy of this software and associated documentation files (the
+// "Software"), to deal in the Software without restriction, including
+// without limitation the rights to use, copy, modify, merge, publish,
+// distribute, sublicense, and/or sell copies of the Software, and to
+// permit persons to whom the Software is furnished to do so, subject to
+// the following conditions:
+//
+// The above copyright notice and this permission notice shall be
+// included in all copies or substantial portions of the Software.
+//
+// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
+// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
+// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
+// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+//
+
+using System;
+using System.Collections.Generic;
+using Gdk;
+using Gtk;
+
+using Hyena.Gui.Theatrics;
+
+namespace Hyena.Widgets
+{
+ internal enum AnimationState
+ {
+ Coming,
+ Idle,
+ IntendingToGo,
+ Going
+ }
+
+ internal class AnimatedWidget : Container
+ {
+ public event EventHandler WidgetDestroyed;
+
+ public Widget Widget;
+ public Easing Easing;
+ public Blocking Blocking;
+ public AnimationState AnimationState;
+ public uint Duration;
+ public double Bias = 1.0;
+ public int Width;
+ public int Height;
+ public int StartPadding;
+ public int EndPadding;
+ public LinkedListNode <AnimatedWidget> Node;
+
+ private readonly bool horizontal;
+ private double percent;
+ private Rectangle widget_alloc;
+ private Pixmap canvas;
+
+ public AnimatedWidget (Widget widget, uint duration, Easing easing, Blocking blocking, bool horizontal)
+ {
+ this.horizontal = horizontal;
+ Widget = widget;
+ Duration = duration;
+ Easing = easing;
+ Blocking = blocking;
+ AnimationState = AnimationState.Coming;
+
+ Widget.Parent = this;
+ Widget.Destroyed += OnWidgetDestroyed;
+ ShowAll ();
+ }
+
+ protected AnimatedWidget (IntPtr raw) : base (raw)
+ {
+ }
+
+ public double Percent {
+ get { return percent; }
+ set {
+ percent = value * Bias;
+ QueueResizeNoRedraw ();
+ }
+ }
+
+ private void OnWidgetDestroyed (object sender, EventArgs args)
+ {
+ if (!IsRealized) {
+ return;
+ }
+
+ canvas = new Pixmap (GdkWindow, widget_alloc.Width, widget_alloc.Height);
+ canvas.DrawDrawable (Style.BackgroundGC (State), GdkWindow,
+ widget_alloc.X, widget_alloc.Y, 0, 0, widget_alloc.Width, widget_alloc.Height);
+
+ if (AnimationState != AnimationState.Going) {
+ WidgetDestroyed (this, args);
+ }
+ }
+
+#region Overrides
+
+ protected override void OnRemoved (Widget widget)
+ {
+ if (widget == Widget) {
+ widget.Unparent ();
+ Widget = null;
+ }
+ }
+
+ protected override void OnRealized ()
+ {
+ WidgetFlags |= WidgetFlags.Realized;
+
+ Gdk.WindowAttr attributes = new Gdk.WindowAttr ();
+ attributes.WindowType = Gdk.WindowType.Child;
+ attributes.Wclass = Gdk.WindowClass.InputOutput;
+ attributes.EventMask = (int)Gdk.EventMask.ExposureMask;
+
+ GdkWindow = new Gdk.Window (Parent.GdkWindow, attributes, 0);
+ GdkWindow.UserData = Handle;
+ GdkWindow.Background = Style.Background (State);
+ Style.Attach (GdkWindow);
+ }
+
+ protected override void OnSizeRequested (ref Requisition requisition)
+ {
+ if (Widget != null) {
+ Requisition req = Widget.SizeRequest ();
+ widget_alloc.Width = req.Width;
+ widget_alloc.Height = req.Height;
+ }
+
+ if (horizontal) {
+ Width = Choreographer.PixelCompose (percent, widget_alloc.Width + StartPadding + EndPadding, Easing);
+ Height = widget_alloc.Height;
+ } else {
+ Width = widget_alloc.Width;
+ Height = Choreographer.PixelCompose (percent, widget_alloc.Height + StartPadding + EndPadding, Easing);
+ }
+
+ requisition.Width = Width;
+ requisition.Height = Height;
+ }
+
+ protected override void OnSizeAllocated (Rectangle allocation)
+ {
+ base.OnSizeAllocated (allocation);
+ if (Widget != null) {
+ if (horizontal) {
+ widget_alloc.Height = allocation.Height;
+ widget_alloc.X = StartPadding;
+ if (Blocking == Blocking.Downstage) {
+ widget_alloc.X += allocation.Width - widget_alloc.Width;
+ }
+ } else {
+ widget_alloc.Width = allocation.Width;
+ widget_alloc.Y = StartPadding;
+ if (Blocking == Blocking.Downstage) {
+ widget_alloc.Y = allocation.Height - widget_alloc.Height;
+ }
+ }
+
+ if (widget_alloc.Height > 0 && widget_alloc.Width > 0) {
+ Widget.SizeAllocate (widget_alloc);
+ }
+ }
+ }
+
+ protected override bool OnExposeEvent (EventExpose evnt)
+ {
+ if (canvas != null) {
+ GdkWindow.DrawDrawable (Style.BackgroundGC (State), canvas,
+ 0, 0, widget_alloc.X, widget_alloc.Y, widget_alloc.Width, widget_alloc.Height);
+ return true;
+ } else {
+ return base.OnExposeEvent (evnt);
+ }
+ }
+
+ protected override void ForAll (bool include_internals, Callback callback)
+ {
+ if (Widget != null) {
+ callback (Widget);
+ }
+ }
+
+#endregion
+
+ }
+}
diff --git a/lib/Hyena/src/Hyena.Gui/Hyena.Widgets/ComplexMenuItem.cs b/lib/Hyena/src/Hyena.Gui/Hyena.Widgets/ComplexMenuItem.cs
new file mode 100644
index 0000000..5d3c9c0
--- /dev/null
+++ b/lib/Hyena/src/Hyena.Gui/Hyena.Widgets/ComplexMenuItem.cs
@@ -0,0 +1,157 @@
+//
+// ComplexMenuItem.cs
+//
+// Author:
+// Aaron Bockover <abockover at novell.com>
+// Gabriel Burt <gburt at novell.com>
+//
+// Copyright (C) 2007-2008 Novell, Inc.
+//
+// Permission is hereby granted, free of charge, to any person obtaining
+// a copy of this software and associated documentation files (the
+// "Software"), to deal in the Software without restriction, including
+// without limitation the rights to use, copy, modify, merge, publish,
+// distribute, sublicense, and/or sell copies of the Software, and to
+// permit persons to whom the Software is furnished to do so, subject to
+// the following conditions:
+//
+// The above copyright notice and this permission notice shall be
+// included in all copies or substantial portions of the Software.
+//
+// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
+// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
+// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
+// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+//
+
+using System;
+using Gtk;
+
+namespace Hyena.Widgets
+{
+ public class ComplexMenuItem : MenuItem
+ {
+ private bool is_selected = false;
+
+ public ComplexMenuItem() : base()
+ {
+ }
+
+ protected ComplexMenuItem (IntPtr raw) : base (raw)
+ {
+ }
+
+ // Override OnAdded and OnRemoved so we can work with Gtk.Action/Gtk.UIManager
+ // which otherwise would try to replace our child with a Label.
+ private bool first_add = true;
+ protected override void OnAdded (Widget widget)
+ {
+ if (first_add) {
+ first_add = false;
+ base.OnAdded (widget);
+ }
+ }
+
+ protected override void OnRemoved (Widget widget)
+ {
+ }
+
+ protected void ConnectChildExpose(Widget widget)
+ {
+ widget.ExposeEvent += OnChildExposeEvent;
+ }
+
+ [GLib.ConnectBefore]
+ private void OnChildExposeEvent(object o, ExposeEventArgs args)
+ {
+ // NOTE: This is a little insane, but it allows packing of EventBox based widgets
+ // into a GtkMenuItem without breaking the theme (leaving an unstyled void in the item).
+ // This method is called before the EventBox child does its drawing and the background
+ // is filled in with the proper style.
+
+ int x, y, width, height;
+ Widget widget = (Widget)o;
+
+ if(IsSelected) {
+ x = Allocation.X - widget.Allocation.X;
+ y = Allocation.Y - widget.Allocation.Y;
+ width = Allocation.Width;
+ height = Allocation.Height;
+
+ ShadowType shadow_type = (ShadowType)StyleGetProperty("selected-shadow-type");
+ Gtk.Style.PaintBox(Style, widget.GdkWindow, StateType.Prelight, shadow_type,
+ args.Event.Area, widget, "menuitem", x, y, width, height);
+ } else {
+ // Fill only the visible area in solid color, to be most efficient
+ widget.GdkWindow.DrawRectangle(Parent.Style.BackgroundGC(StateType.Normal),
+ true, 0, 0, widget.Allocation.Width, widget.Allocation.Height);
+
+ // FIXME: The above should not be necessary, but Clearlooks-based themes apparently
+ // don't provide any style for the menu background so we have to fill it first with
+ // the correct theme color. Weak.
+ //
+ // Do a complete style paint based on the size of the entire menu to be compatible with
+ // themes that provide a real style for "menu"
+ x = Parent.Allocation.X - widget.Allocation.X;
+ y = Parent.Allocation.Y - widget.Allocation.Y;
+ width = Parent.Allocation.Width;
+ height = Parent.Allocation.Height;
+
+ Gtk.Style.PaintBox(Style, widget.GdkWindow, StateType.Normal, ShadowType.Out,
+ args.Event.Area, widget, "menu", x, y, width, height);
+ }
+ }
+
+ protected override void OnSelected()
+ {
+ base.OnSelected();
+ is_selected = true;
+ }
+
+ protected override void OnDeselected()
+ {
+ base.OnDeselected();
+ is_selected = false;
+ }
+
+ protected override void OnParentSet(Widget previous_parent)
+ {
+ if(previous_parent != null) {
+ previous_parent.KeyPressEvent -= OnKeyPressEventProxy;
+ }
+
+ if(Parent != null) {
+ Parent.KeyPressEvent += OnKeyPressEventProxy;
+ }
+ }
+
+ [GLib.ConnectBefore]
+ private void OnKeyPressEventProxy(object o, KeyPressEventArgs args)
+ {
+ if(!IsSelected) {
+ return;
+ }
+
+ switch(args.Event.Key) {
+ case Gdk.Key.Up:
+ case Gdk.Key.Down:
+ case Gdk.Key.Escape:
+ return;
+ }
+
+ args.RetVal = OnKeyPressEvent(args.Event);
+ }
+
+ protected override bool OnKeyPressEvent(Gdk.EventKey evnt)
+ {
+ return false;
+ }
+
+ protected bool IsSelected {
+ get { return is_selected; }
+ }
+ }
+}
diff --git a/lib/Hyena/src/Hyena.Gui/Hyena.Widgets/EntryPopup.cs b/lib/Hyena/src/Hyena.Gui/Hyena.Widgets/EntryPopup.cs
new file mode 100644
index 0000000..e8da7fb
--- /dev/null
+++ b/lib/Hyena/src/Hyena.Gui/Hyena.Widgets/EntryPopup.cs
@@ -0,0 +1,263 @@
+//
+// EntryPopup.cs
+//
+// Author:
+// Neil Loknath <neil.loknath at gmail.com>
+//
+// Copyright (C) 2009 Neil Loknath
+//
+// Permission is hereby granted, free of charge, to any person obtaining
+// a copy of this software and associated documentation files (the
+// "Software"), to deal in the Software without restriction, including
+// without limitation the rights to use, copy, modify, merge, publish,
+// distribute, sublicense, and/or sell copies of the Software, and to
+// permit persons to whom the Software is furnished to do so, subject to
+// the following conditions:
+//
+// The above copyright notice and this permission notice shall be
+// included in all copies or substantial portions of the Software.
+//
+// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
+// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
+// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
+// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+//
+using System;
+using System.Timers;
+using Gdk;
+using Gtk;
+
+namespace Hyena.Widgets
+{
+ public class EntryPopup : Gtk.Window
+ {
+ private Entry text_entry;
+ private HBox hbox;
+ private uint timeout_id = 0;
+
+ public event EventHandler<EventArgs> Changed;
+ public event EventHandler<KeyPressEventArgs> KeyPressed;
+
+ public EntryPopup (string text) : this ()
+ {
+ Text = text;
+ }
+
+ public EntryPopup () : base (Gtk.WindowType.Popup)
+ {
+ CanFocus = true;
+ Resizable = false;
+ TypeHint = Gdk.WindowTypeHint.Utility;
+ Modal = true;
+
+ Frame frame = new Frame ();
+ frame.Shadow = ShadowType.EtchedIn;
+ Add (frame);
+
+ hbox = new HBox () { Spacing = 6 };
+ text_entry = new Entry();
+ hbox.PackStart (text_entry, true, true, 0);
+ hbox.BorderWidth = 3;
+
+ frame.Add (hbox);
+ frame.ShowAll ();
+
+ text_entry.Text = String.Empty;
+ text_entry.CanFocus = true;
+
+ //TODO figure out why this event does not get raised
+ text_entry.FocusOutEvent += (o, a) => {
+ if (hide_when_focus_lost) {
+ HidePopup ();
+ }
+ };
+
+ text_entry.KeyReleaseEvent += delegate (object o, KeyReleaseEventArgs args) {
+ if (args.Event.Key == Gdk.Key.Escape ||
+ args.Event.Key == Gdk.Key.Return ||
+ args.Event.Key == Gdk.Key.Tab) {
+
+ HidePopup ();
+ }
+
+ InitializeDelayedHide ();
+ };
+
+ text_entry.KeyPressEvent += (o, a) => OnKeyPressed (a);
+
+ text_entry.Changed += (o, a) => {
+ if (GdkWindow.IsVisible) {
+ OnChanged (a);
+ }
+ };
+ }
+
+ public new bool HasFocus {
+ get { return text_entry.HasFocus; }
+ set { text_entry.HasFocus = value; }
+ }
+
+ public string Text {
+ get { return text_entry.Text; }
+ set { text_entry.Text = value; }
+ }
+
+ public Entry Entry { get { return text_entry; } }
+ public HBox Box { get { return hbox; } }
+
+ private bool hide_after_timeout = true;
+ public bool HideAfterTimeout {
+ get { return hide_after_timeout; }
+ set { hide_after_timeout = value; }
+ }
+
+ private uint timeout = 5000;
+ public uint Timeout {
+ get { return timeout; }
+ set { timeout = value; }
+ }
+
+ private bool hide_when_focus_lost = true;
+ public bool HideOnFocusOut {
+ get { return hide_when_focus_lost; }
+ set { hide_when_focus_lost = value; }
+ }
+
+ private bool reset_when_hiding = true;
+ public bool ResetOnHide {
+ get { return reset_when_hiding; }
+ set { reset_when_hiding = value; }
+ }
+
+ public override void Dispose ()
+ {
+ text_entry.Dispose ();
+ base.Dispose ();
+ }
+
+ public new void GrabFocus ()
+ {
+ text_entry.GrabFocus ();
+ }
+
+ public void Position (Gdk.Window eventWindow)
+ {
+ int x, y;
+ int widget_x, widget_y;
+ int widget_height, widget_width;
+
+ Realize ();
+
+ Gdk.Window widget_window = eventWindow;
+ Gdk.Screen widget_screen = widget_window.Screen;
+
+ Gtk.Requisition popup_req;
+
+ widget_window.GetOrigin (out widget_x, out widget_y);
+ widget_window.GetSize (out widget_width, out widget_height);
+
+ popup_req = Requisition;
+
+ if (widget_x + widget_width > widget_screen.Width) {
+ x = widget_screen.Width - popup_req.Width;
+ } else if (widget_x + widget_width - popup_req.Width < 0) {
+ x = 0;
+ } else {
+ x = widget_x + widget_width - popup_req.Width;
+ }
+
+ if (widget_y + widget_height + popup_req.Height > widget_screen.Height) {
+ y = widget_screen.Height - popup_req.Height;
+ } else if (widget_y + widget_height < 0) {
+ y = 0;
+ } else {
+ y = widget_y + widget_height;
+ }
+
+ Move (x, y);
+ }
+
+ private void ResetDelayedHide ()
+ {
+ if (timeout_id > 0) {
+ GLib.Source.Remove (timeout_id);
+ timeout_id = 0;
+ }
+ }
+
+ private void InitializeDelayedHide ()
+ {
+ ResetDelayedHide ();
+ timeout_id = GLib.Timeout.Add (timeout, delegate {
+ HidePopup ();
+ return false;
+ });
+ }
+
+ private void HidePopup ()
+ {
+ ResetDelayedHide ();
+ Hide ();
+
+ if (reset_when_hiding) {
+ text_entry.Text = String.Empty;
+ }
+ }
+
+ protected virtual void OnChanged (EventArgs args)
+ {
+ var handler = Changed;
+ if (handler != null) {
+ handler (this, EventArgs.Empty);
+ }
+ }
+
+ protected virtual void OnKeyPressed (KeyPressEventArgs args)
+ {
+ var handler = KeyPressed;
+ if (handler != null) {
+ handler (this, args);
+ }
+ }
+
+ //TODO figure out why this event does not get raised
+ protected override bool OnFocusOutEvent (Gdk.EventFocus evnt)
+ {
+ if (hide_when_focus_lost) {
+ HidePopup ();
+ return true;
+ }
+
+ return base.OnFocusOutEvent (evnt);
+ }
+
+ protected override bool OnExposeEvent (Gdk.EventExpose evnt)
+ {
+ InitializeDelayedHide ();
+ return base.OnExposeEvent (evnt);
+ }
+
+ protected override bool OnButtonReleaseEvent (Gdk.EventButton evnt)
+ {
+ if (!text_entry.HasFocus && hide_when_focus_lost) {
+ HidePopup ();
+ return true;
+ }
+
+ return base.OnButtonReleaseEvent (evnt);
+ }
+
+ protected override bool OnButtonPressEvent (Gdk.EventButton evnt)
+ {
+ if (!text_entry.HasFocus && hide_when_focus_lost) {
+ HidePopup ();
+ return true;
+ }
+
+ return base.OnButtonPressEvent (evnt);
+ }
+ }
+}
diff --git a/lib/Hyena/src/Hyena.Gui/Hyena.Widgets/GenericToolItem.cs b/lib/Hyena/src/Hyena.Gui/Hyena.Widgets/GenericToolItem.cs
new file mode 100644
index 0000000..ec83d0e
--- /dev/null
+++ b/lib/Hyena/src/Hyena.Gui/Hyena.Widgets/GenericToolItem.cs
@@ -0,0 +1,48 @@
+//
+// GenericToolItem.cs
+//
+// Author:
+// Aaron Bockover <abockover at novell.com>
+//
+// Copyright (C) 2006-2007 Novell, Inc.
+//
+// Permission is hereby granted, free of charge, to any person obtaining
+// a copy of this software and associated documentation files (the
+// "Software"), to deal in the Software without restriction, including
+// without limitation the rights to use, copy, modify, merge, publish,
+// distribute, sublicense, and/or sell copies of the Software, and to
+// permit persons to whom the Software is furnished to do so, subject to
+// the following conditions:
+//
+// The above copyright notice and this permission notice shall be
+// included in all copies or substantial portions of the Software.
+//
+// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
+// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
+// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
+// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+//
+
+using System;
+using Gtk;
+
+namespace Hyena.Widgets
+{
+ public class GenericToolItem<T> : ToolItem where T : Widget
+ {
+ private T widget;
+
+ public GenericToolItem (T widget)
+ {
+ this.widget = widget;
+ Add (widget);
+ }
+
+ public T Widget {
+ get { return widget; }
+ }
+ }
+}
diff --git a/lib/Hyena/src/Hyena.Gui/Hyena.Widgets/HigMessageDialog.cs b/lib/Hyena/src/Hyena.Gui/Hyena.Widgets/HigMessageDialog.cs
new file mode 100644
index 0000000..fb3f609
--- /dev/null
+++ b/lib/Hyena/src/Hyena.Gui/Hyena.Widgets/HigMessageDialog.cs
@@ -0,0 +1,237 @@
+//
+// HigMessageDialog.cs
+//
+// Authors:
+// Aaron Bockover <abockover at novell.com>
+//
+// Copyright (C) 2007 Novell, Inc.
+//
+// Permission is hereby granted, free of charge, to any person obtaining
+// a copy of this software and associated documentation files (the
+// "Software"), to deal in the Software without restriction, including
+// without limitation the rights to use, copy, modify, merge, publish,
+// distribute, sublicense, and/or sell copies of the Software, and to
+// permit persons to whom the Software is furnished to do so, subject to
+// the following conditions:
+//
+// The above copyright notice and this permission notice shall be
+// included in all copies or substantial portions of the Software.
+//
+// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
+// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
+// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
+// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+//
+
+using System;
+
+namespace Hyena.Widgets
+{
+ public class HigMessageDialog : Gtk.Dialog
+ {
+ private Gtk.Image image;
+ private Gtk.VBox inner_vbox;
+ private Gtk.VBox label_vbox;
+ private Gtk.Label message_label;
+
+ public HigMessageDialog(Gtk.Window parent,
+ Gtk.DialogFlags flags,
+ Gtk.MessageType type,
+ Gtk.ButtonsType buttons,
+ string header,
+ string msg)
+ : base()
+ {
+ HasSeparator = false;
+ BorderWidth = 5;
+ Resizable = false;
+ Title = "";
+ SkipTaskbarHint = true;
+
+ VBox.Spacing = 12;
+ ActionArea.Layout = Gtk.ButtonBoxStyle.End;
+
+ Gtk.HBox hbox = new Gtk.HBox (false, 12);
+ hbox.BorderWidth = 5;
+ hbox.Show ();
+ VBox.PackStart (hbox, false, false, 0);
+
+ image = null;
+
+ switch (type) {
+ case Gtk.MessageType.Error:
+ image = new Gtk.Image (Gtk.Stock.DialogError, Gtk.IconSize.Dialog);
+ break;
+ case Gtk.MessageType.Question:
+ image = new Gtk.Image (Gtk.Stock.DialogQuestion, Gtk.IconSize.Dialog);
+ break;
+ case Gtk.MessageType.Info:
+ image = new Gtk.Image (Gtk.Stock.DialogInfo, Gtk.IconSize.Dialog);
+ break;
+ case Gtk.MessageType.Warning:
+ image = new Gtk.Image (Gtk.Stock.DialogWarning, Gtk.IconSize.Dialog);
+ break;
+ }
+
+ image.Yalign = 0.1f;
+ image.Show ();
+ hbox.PackStart (image, false, false, 0);
+
+ inner_vbox = new Gtk.VBox (false, 12);
+ inner_vbox.Show ();
+ hbox.PackStart (inner_vbox, true, true, 0);
+
+ label_vbox = new Gtk.VBox (false, 0);
+ label_vbox.Show ();
+ inner_vbox.PackStart (label_vbox, true, true, 0);
+
+ string title = String.Format ("<span weight='bold' size='larger'>{0}" +
+ "</span>\n",
+ header);
+
+ Gtk.Label label;
+
+ label = new Gtk.Label (title);
+ label.UseMarkup = true;
+ label.Justify = Gtk.Justification.Left;
+ label.LineWrap = true;
+ label.SetAlignment (0.0f, 0.5f);
+ label.Show ();
+ label_vbox.PackStart (label, false, false, 0);
+
+ message_label = label = new Gtk.Label ();
+ label.Markup = msg;
+ label.UseMarkup = true;
+ label.Justify = Gtk.Justification.Left;
+ label.LineWrap = true;
+ label.SetAlignment (0.0f, 0.5f);
+ label.Show ();
+ label_vbox.PackStart (label, false, false, 0);
+
+ switch (buttons) {
+ case Gtk.ButtonsType.None:
+ break;
+ case Gtk.ButtonsType.Ok:
+ AddButton (Gtk.Stock.Ok, Gtk.ResponseType.Ok, true);
+ break;
+ case Gtk.ButtonsType.Close:
+ AddButton (Gtk.Stock.Close, Gtk.ResponseType.Close, true);
+ break;
+ case Gtk.ButtonsType.Cancel:
+ AddButton (Gtk.Stock.Cancel, Gtk.ResponseType.Cancel, true);
+ break;
+ case Gtk.ButtonsType.YesNo:
+ AddButton (Gtk.Stock.No, Gtk.ResponseType.No, false);
+ AddButton (Gtk.Stock.Yes, Gtk.ResponseType.Yes, true);
+ break;
+ case Gtk.ButtonsType.OkCancel:
+ AddButton (Gtk.Stock.Cancel, Gtk.ResponseType.Cancel, false);
+ AddButton (Gtk.Stock.Ok, Gtk.ResponseType.Ok, true);
+ break;
+ }
+
+ if (parent != null)
+ TransientFor = parent;
+
+ if ((int) (flags & Gtk.DialogFlags.Modal) != 0)
+ Modal = true;
+
+ if ((int) (flags & Gtk.DialogFlags.DestroyWithParent) != 0)
+ DestroyWithParent = true;
+ }
+
+ // constructor for a HIG confirmation alert with two buttons
+ public HigMessageDialog (Gtk.Window parent,
+ Gtk.DialogFlags flags,
+ Gtk.MessageType type,
+ string header,
+ string msg,
+ string ok_caption)
+ : this (parent, flags, type, Gtk.ButtonsType.Cancel, header, msg)
+ {
+ AddButton (ok_caption, Gtk.ResponseType.Ok, false);
+ }
+
+ public Gtk.Button AddCustomButton (string message, Gtk.ResponseType response, bool isDefault)
+ {
+ Gtk.Button button = new Gtk.Button ();
+ button.Label = message;
+ button.CanDefault = true;
+ button.Show ();
+ AddButton (button, response, isDefault);
+ return button;
+ }
+
+ public void AddButton (string stock_id, Gtk.ResponseType response, bool isDefault)
+ {
+ Gtk.Button button = new Gtk.Button (stock_id);
+ button.CanDefault = true;
+ button.Show ();
+ AddButton (button, response, isDefault);
+ }
+
+ private void AddButton (Gtk.Button button, Gtk.ResponseType response, bool isDefault)
+ {
+ AddActionWidget (button, response);
+
+ if (isDefault) {
+ Default = button;
+ DefaultResponse = response;
+ button.GrabDefault ();
+ }
+ }
+
+ //run and destroy a standard dialog
+ public static Gtk.ResponseType RunHigMessageDialog(Gtk.Window parent,
+ Gtk.DialogFlags flags,
+ Gtk.MessageType type,
+ Gtk.ButtonsType buttons,
+ string header,
+ string msg)
+ {
+ HigMessageDialog hmd = new HigMessageDialog(parent, flags, type, buttons, header, msg);
+ try {
+ return (Gtk.ResponseType)hmd.Run();
+ } finally {
+ hmd.Destroy();
+ }
+ }
+
+ //Run and destroy a standard confirmation dialog
+ public static Gtk.ResponseType RunHigConfirmation(Gtk.Window parent,
+ Gtk.DialogFlags flags,
+ Gtk.MessageType type,
+ string header,
+ string msg,
+ string ok_caption)
+ {
+ HigMessageDialog hmd = new HigMessageDialog(parent, flags, type, header, msg, ok_caption);
+ try {
+ return (Gtk.ResponseType)hmd.Run();
+ } finally {
+ hmd.Destroy();
+ }
+ }
+
+ public Gdk.Pixbuf Image {
+ set {
+ image.Pixbuf = value;
+ }
+
+ get {
+ return image.Pixbuf;
+ }
+ }
+
+ public Gtk.Label MessageLabel {
+ get { return message_label; }
+ }
+
+ public Gtk.VBox LabelVBox {
+ get { return inner_vbox; }
+ }
+ }
+}
diff --git a/lib/Hyena/src/Hyena.Gui/Hyena.Widgets/ImageButton.cs b/lib/Hyena/src/Hyena.Gui/Hyena.Widgets/ImageButton.cs
new file mode 100644
index 0000000..5daa522
--- /dev/null
+++ b/lib/Hyena/src/Hyena.Gui/Hyena.Widgets/ImageButton.cs
@@ -0,0 +1,76 @@
+//
+// ImageButton.cs
+//
+// Authors:
+// Gabriel Burt <gburt at novell.com>
+//
+// Copyright (C) 2008 Novell, Inc.
+//
+// Permission is hereby granted, free of charge, to any person obtaining
+// a copy of this software and associated documentation files (the
+// "Software"), to deal in the Software without restriction, including
+// without limitation the rights to use, copy, modify, merge, publish,
+// distribute, sublicense, and/or sell copies of the Software, and to
+// permit persons to whom the Software is furnished to do so, subject to
+// the following conditions:
+//
+// The above copyright notice and this permission notice shall be
+// included in all copies or substantial portions of the Software.
+//
+// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
+// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
+// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
+// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+//
+
+using System;
+using Gtk;
+
+namespace Hyena.Widgets
+{
+ public class ImageButton : Button
+ {
+ private Image image;
+ private Label label;
+ private HBox hbox;
+
+ public Image ImageWidget { get { return image; } }
+ public Label LabelWidget { get { return label; } }
+
+ public uint InnerPadding {
+ get { return hbox.BorderWidth; }
+ set { hbox.BorderWidth = value; }
+ }
+
+ public int Spacing {
+ get { return hbox.Spacing; }
+ set { hbox.Spacing = value; }
+ }
+
+ public ImageButton (string text, string iconName) : this (text, iconName, Gtk.IconSize.Button)
+ {
+ }
+
+ public ImageButton (string text, string iconName, Gtk.IconSize iconSize) : base ()
+ {
+ image = new Image ();
+ image.IconName = iconName;
+ image.IconSize = (int) iconSize;
+
+ label = new Label ();
+ label.MarkupWithMnemonic = text;
+
+ hbox = new HBox ();
+ hbox.Spacing = 2;
+ hbox.PackStart (image, false, false, 0);
+ hbox.PackStart (label, true, true, 0);
+
+ Child = hbox;
+ CanDefault = true;
+ ShowAll ();
+ }
+ }
+}
diff --git a/lib/Hyena/src/Hyena.Gui/Hyena.Widgets/MenuButton.cs b/lib/Hyena/src/Hyena.Gui/Hyena.Widgets/MenuButton.cs
new file mode 100644
index 0000000..6df820c
--- /dev/null
+++ b/lib/Hyena/src/Hyena.Gui/Hyena.Widgets/MenuButton.cs
@@ -0,0 +1,174 @@
+//
+// MenuButton.cs
+//
+// Author:
+// Scott Peterson <lunchtimemama at gmail.com>
+//
+// Copyright (c) 2008 Scott Peterson
+//
+// Permission is hereby granted, free of charge, to any person obtaining a copy
+// of this software and associated documentation files (the "Software"), to deal
+// in the Software without restriction, including without limitation the rights
+// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+// copies of the Software, and to permit persons to whom the Software is
+// furnished to do so, subject to the following conditions:
+//
+// The above copyright notice and this permission notice shall be included in
+// all copies or substantial portions of the Software.
+//
+// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+// THE SOFTWARE.
+//
+
+using System;
+using Gtk;
+using Gdk;
+
+namespace Hyena.Widgets
+{
+ public class MenuButton : Container
+ {
+ private ToggleButton toggle_button = new ToggleButton ();
+ private HBox box = new HBox ();
+ private Alignment alignment;
+ private Arrow arrow;
+ private Widget button_widget;
+ private Menu menu;
+ private Widget size_widget;
+
+ protected MenuButton (IntPtr ptr) : base (ptr) {}
+
+ public MenuButton ()
+ {
+ }
+
+ public MenuButton (Widget buttonWidget, Menu menu, bool showArrow)
+ {
+ Construct (buttonWidget, menu, showArrow);
+ }
+
+ protected void Construct (Widget buttonWidget, Menu menu, bool showArrow)
+ {
+ WidgetFlags |= WidgetFlags.NoWindow;
+
+ button_widget = buttonWidget;
+ Menu = menu;
+
+ toggle_button.Parent = this;
+ toggle_button.FocusOnClick = false;
+ toggle_button.Relief = ReliefStyle.None;
+ toggle_button.Pressed += delegate { ShowMenu (); toggle_button.Active = true; };
+ toggle_button.Activated += delegate { ShowMenu (); };
+
+ box.Parent = this;
+
+ if (showArrow) {
+ box.PackStart (button_widget, true, true, 0);
+ alignment = new Alignment (0f, 0.5f, 0f, 0f);
+ arrow = new Arrow (ArrowType.Down, ShadowType.None);
+ alignment.Add (arrow);
+ box.PackStart (alignment, false, false, 5);
+ size_widget = box;
+ FocusChain = new Widget[] {toggle_button, box};
+ } else {
+ toggle_button.Add (button_widget);
+ size_widget = toggle_button;
+ }
+
+ ShowAll ();
+ }
+
+ public Widget ButtonWidget {
+ get { return button_widget; }
+ }
+
+ public Menu Menu {
+ get { return menu; }
+ set {
+ if (menu == value)
+ return;
+
+ if (menu != null)
+ menu.Deactivated -= OnMenuDeactivated;
+
+ menu = value;
+ menu.Deactivated += OnMenuDeactivated;
+ }
+ }
+
+ private void OnMenuDeactivated (object o, EventArgs args)
+ {
+ toggle_button.Active = false;
+ }
+
+ public ToggleButton ToggleButton {
+ get { return toggle_button; }
+ }
+
+ public Arrow Arrow {
+ get { return arrow; }
+ }
+
+ protected override void OnSizeRequested (ref Requisition requisition)
+ {
+ requisition = size_widget.SizeRequest ();
+ }
+
+ protected override void OnSizeAllocated (Rectangle allocation)
+ {
+ box.SizeAllocate (allocation);
+ toggle_button.SizeAllocate (allocation);
+ base.OnSizeAllocated (allocation);
+ }
+
+ protected override void ForAll (bool include_internals, Callback callback)
+ {
+ callback (toggle_button);
+ callback (box);
+ }
+
+ protected override void OnAdded (Widget widget)
+ {
+ }
+
+ protected override void OnRemoved (Widget widget)
+ {
+ }
+
+ protected void ShowMenu ()
+ {
+ menu.Popup (null, null, PositionMenu, 1, Gtk.Global.CurrentEventTime);
+ }
+
+ private void PositionMenu (Menu menu, out int x, out int y, out bool push_in)
+ {
+ Gtk.Requisition menu_req = menu.SizeRequest ();
+ int monitor_num = Screen.GetMonitorAtWindow (GdkWindow);
+ Gdk.Rectangle monitor = Screen.GetMonitorGeometry (monitor_num < 0 ? 0 : monitor_num);
+
+ GdkWindow.GetOrigin (out x, out y);
+
+ y += Allocation.Y;
+ x += Allocation.X + (Direction == TextDirection.Ltr
+ ? Math.Max (Allocation.Width - menu_req.Width, 0)
+ : - (menu_req.Width - Allocation.Width));
+
+ if (y + Allocation.Height + menu_req.Height <= monitor.Y + monitor.Height) {
+ y += Allocation.Height;
+ } else if (y - menu_req.Height >= monitor.Y) {
+ y -= menu_req.Height;
+ } else if (monitor.Y + monitor.Height - (y + Allocation.Height) > y) {
+ y += Allocation.Height;
+ } else {
+ y -= menu_req.Height;
+ }
+
+ push_in = false;
+ }
+ }
+}
diff --git a/lib/Hyena/src/Hyena.Gui/Hyena.Widgets/MessageBar.cs b/lib/Hyena/src/Hyena.Gui/Hyena.Widgets/MessageBar.cs
new file mode 100644
index 0000000..9582664
--- /dev/null
+++ b/lib/Hyena/src/Hyena.Gui/Hyena.Widgets/MessageBar.cs
@@ -0,0 +1,206 @@
+//
+// MessageBar.cs
+//
+// Author:
+// Aaron Bockover <abockover at novell.com>
+//
+// Copyright (C) 2008 Novell, Inc.
+//
+// Permission is hereby granted, free of charge, to any person obtaining
+// a copy of this software and associated documentation files (the
+// "Software"), to deal in the Software without restriction, including
+// without limitation the rights to use, copy, modify, merge, publish,
+// distribute, sublicense, and/or sell copies of the Software, and to
+// permit persons to whom the Software is furnished to do so, subject to
+// the following conditions:
+//
+// The above copyright notice and this permission notice shall be
+// included in all copies or substantial portions of the Software.
+//
+// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
+// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
+// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
+// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+//
+
+using System;
+using Gtk;
+
+using Hyena.Gui;
+using Hyena.Gui.Theming;
+
+namespace Hyena.Widgets
+{
+ public class MessageBar : Alignment
+ {
+ private HBox box;
+ private HBox button_box;
+ private AnimatedImage image;
+ private WrapLabel label;
+ private Button close_button;
+
+ private Window win;
+
+ private Theme theme;
+
+ public event EventHandler CloseClicked {
+ add { close_button.Clicked += value; }
+ remove { close_button.Clicked -= value; }
+ }
+
+ public MessageBar () : base (0.0f, 0.5f, 1.0f, 0.0f)
+ {
+ win = new Window (WindowType.Popup);
+ win.Name = "gtk-tooltips";
+ win.EnsureStyle ();
+ win.StyleSet += delegate {
+ Style = win.Style;
+ };
+
+ HBox shell_box = new HBox ();
+ shell_box.Spacing = 10;
+
+ box = new HBox ();
+ box.Spacing = 10;
+
+ image = new AnimatedImage ();
+ try {
+ image.Pixbuf = Gtk.IconTheme.Default.LoadIcon ("process-working", 22, IconLookupFlags.NoSvg);
+ image.FrameHeight = 22;
+ image.FrameWidth = 22;
+ Spinning = false;
+ image.Load ();
+ } catch {
+ }
+
+ label = new WrapLabel ();
+ label.Show ();
+
+ box.PackStart (image, false, false, 0);
+ box.PackStart (label, true, true, 0);
+ box.Show ();
+
+ button_box = new HBox ();
+ button_box.Spacing = 3;
+
+ close_button = new Button (new Image (Stock.Close, IconSize.Menu));
+ close_button.Relief = ReliefStyle.None;
+ close_button.Clicked += delegate { Hide (); };
+ close_button.ShowAll ();
+ close_button.Hide ();
+
+ shell_box.PackStart (box, true, true, 0);
+ shell_box.PackStart (button_box, false, false, 0);
+ shell_box.PackStart (close_button, false, false, 0);
+ shell_box.Show ();
+
+ Add (shell_box);
+
+ EnsureStyle ();
+
+ BorderWidth = 3;
+ }
+
+ protected override void OnShown ()
+ {
+ base.OnShown ();
+ image.Show ();
+ }
+
+ protected override void OnHidden ()
+ {
+ base.OnHidden ();
+ image.Hide ();
+ }
+
+ protected override void OnRealized ()
+ {
+ base.OnRealized ();
+ theme = Hyena.Gui.Theming.ThemeEngine.CreateTheme (this);
+ }
+
+ protected override void OnSizeAllocated (Gdk.Rectangle allocation)
+ {
+ base.OnSizeAllocated (allocation);
+ QueueDraw ();
+ }
+
+ protected override bool OnExposeEvent (Gdk.EventExpose evnt)
+ {
+ if (!IsDrawable) {
+ return false;
+ }
+
+ Cairo.Context cr = Gdk.CairoHelper.Create (evnt.Window);
+
+ try {
+ Gdk.Color color = Style.Background (StateType.Normal);
+ theme.DrawFrame (cr, Allocation, CairoExtensions.GdkColorToCairoColor (color));
+ return base.OnExposeEvent (evnt);
+ } finally {
+ CairoExtensions.DisposeContext (cr);
+ }
+ }
+
+ private bool changing_style = false;
+ protected override void OnStyleSet (Gtk.Style previousStyle)
+ {
+ if (changing_style) {
+ return;
+ }
+
+ changing_style = true;
+ Style = win.Style;
+ label.Style = Style;
+ changing_style = false;
+ }
+
+ public void RemoveButton (Button button)
+ {
+ button_box.Remove (button);
+ }
+
+ public void ClearButtons ()
+ {
+ foreach (Widget child in button_box.Children) {
+ button_box.Remove (child);
+ }
+ }
+
+ public void AddButton (Button button)
+ {
+ button_box.Show ();
+ button.Show ();
+ button_box.PackStart (button, false, false, 0);
+ }
+
+ public bool ShowCloseButton {
+ set {
+ close_button.Visible = value;
+ QueueDraw ();
+ }
+ }
+
+ public string Message {
+ set {
+ label.Markup = value;
+ QueueDraw ();
+ }
+ }
+
+ public Gdk.Pixbuf Pixbuf {
+ set {
+ image.InactivePixbuf = value;
+ QueueDraw ();
+ }
+ }
+
+ public bool Spinning {
+ get { return image.Active; }
+ set { image.Active = value; }
+ }
+ }
+}
diff --git a/lib/Hyena/src/Hyena.Gui/Hyena.Widgets/PulsingButton.cs b/lib/Hyena/src/Hyena.Gui/Hyena.Widgets/PulsingButton.cs
new file mode 100644
index 0000000..4ee6b8b
--- /dev/null
+++ b/lib/Hyena/src/Hyena.Gui/Hyena.Widgets/PulsingButton.cs
@@ -0,0 +1,135 @@
+//
+// PulsingButton.cs
+//
+// Author:
+// Aaron Bockover <abockover at novell.com>
+//
+// Copyright (C) 2008 Novell, Inc.
+//
+// Permission is hereby granted, free of charge, to any person obtaining
+// a copy of this software and associated documentation files (the
+// "Software"), to deal in the Software without restriction, including
+// without limitation the rights to use, copy, modify, merge, publish,
+// distribute, sublicense, and/or sell copies of the Software, and to
+// permit persons to whom the Software is furnished to do so, subject to
+// the following conditions:
+//
+// The above copyright notice and this permission notice shall be
+// included in all copies or substantial portions of the Software.
+//
+// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
+// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
+// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
+// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+//
+
+using System;
+using Gtk;
+
+using Hyena.Gui;
+using Hyena.Gui.Theatrics;
+
+namespace Hyena.Widgets
+{
+ public class PulsingButton : Button
+ {
+ private static Stage<PulsingButton> default_stage;
+ public static Stage<PulsingButton> DefaultStage {
+ get {
+ if (default_stage == null) {
+ default_stage = new Stage<PulsingButton> ();
+ default_stage.DefaultActorDuration = 1250;
+ }
+
+ return default_stage;
+ }
+ }
+
+ private Pulsator<PulsingButton> pulsator = new Pulsator<PulsingButton> ();
+
+ public Stage<PulsingButton> Stage {
+ get { return pulsator.Stage; }
+ set { pulsator.Stage = value; }
+ }
+
+ public PulsingButton () : base ()
+ {
+ Setup ();
+ }
+
+ public PulsingButton (string stock_id) : base (stock_id)
+ {
+ Setup ();
+ }
+
+ public PulsingButton (Widget widget) : base (widget)
+ {
+ Setup ();
+ }
+
+ protected PulsingButton (IntPtr raw) : base (raw)
+ {
+ Setup ();
+ }
+
+ private void Setup ()
+ {
+ Stage = DefaultStage;
+ pulsator.Target = this;
+ pulsator.Pulse += delegate { QueueDraw (); };
+ }
+
+ protected override bool OnExposeEvent (Gdk.EventExpose evnt)
+ {
+ if (!pulsator.IsPulsing) {
+ return base.OnExposeEvent (evnt);
+ }
+
+ Cairo.Context cr = Gdk.CairoHelper.Create (GdkWindow);
+
+ double x = Allocation.X + Allocation.Width / 2;
+ double y = Allocation.Y + Allocation.Height / 2;
+ double r = Math.Min (Allocation.Width, Allocation.Height) / 2;
+ double alpha = Choreographer.Compose (pulsator.Percent, Easing.Sine);
+
+ Cairo.Color color = CairoExtensions.GdkColorToCairoColor (Style.Background (StateType.Selected));
+ Cairo.RadialGradient fill = new Cairo.RadialGradient (x, y, 0, x, y, r);
+ color.A = alpha;
+ fill.AddColorStop (0, color);
+ fill.AddColorStop (0.5, color);
+ color.A = 0;
+ fill.AddColorStop (1, color);
+
+ cr.Arc (x, y, r, 0, 2 * Math.PI);
+ cr.Pattern = fill;
+ cr.Fill ();
+ fill.Destroy ();
+
+ CairoExtensions.DisposeContext (cr);
+ return base.OnExposeEvent (evnt);
+ }
+
+ public void StartPulsing ()
+ {
+ if (IsMapped && Sensitive) {
+ pulsator.StartPulsing ();
+ }
+ }
+
+ public void StopPulsing ()
+ {
+ pulsator.StopPulsing ();
+ }
+
+ protected override void OnStateChanged (StateType previous_state)
+ {
+ base.OnStateChanged (previous_state);
+ if (State == StateType.Insensitive) {
+ StopPulsing ();
+ }
+ }
+ }
+}
diff --git a/lib/Hyena/src/Hyena.Gui/Hyena.Widgets/RatingEntry.cs b/lib/Hyena/src/Hyena.Gui/Hyena.Widgets/RatingEntry.cs
new file mode 100644
index 0000000..f6678a8
--- /dev/null
+++ b/lib/Hyena/src/Hyena.Gui/Hyena.Widgets/RatingEntry.cs
@@ -0,0 +1,508 @@
+//
+// RatingEntry.cs
+//
+// Authors:
+// Aaron Bockover <abockover at novell.com>
+// Gabriel Burt <gabriel.burt at gmail.com>
+//
+// Copyright (C) 2006-2008 Novell, Inc.
+// Copyright (C) 2006 Gabriel Burt
+//
+// Permission is hereby granted, free of charge, to any person obtaining
+// a copy of this software and associated documentation files (the
+// "Software"), to deal in the Software without restriction, including
+// without limitation the rights to use, copy, modify, merge, publish,
+// distribute, sublicense, and/or sell copies of the Software, and to
+// permit persons to whom the Software is furnished to do so, subject to
+// the following conditions:
+//
+// The above copyright notice and this permission notice shall be
+// included in all copies or substantial portions of the Software.
+//
+// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+// NONINFRINGEMENT. IN NO SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
+// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
+// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
+// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+//
+
+using Gtk;
+using System;
+
+using Hyena.Gui;
+
+namespace Hyena.Widgets
+{
+ public class RatingEntry : Widget
+ {
+ private RatingRenderer renderer;
+ private Gdk.Rectangle event_alloc;
+ private int hover_value = -1;
+ private bool interior_focus;
+ private int focus_width;
+ private Gdk.Window event_window;
+
+ public event EventHandler Changing;
+ public event EventHandler Changed;
+
+ static RatingEntry ()
+ {
+#if ENABLE_ATK
+ RatingAccessibleFactory.Init ();
+#endif
+ }
+
+ public RatingEntry () : this (0)
+ {
+ WidgetFlags |= Gtk.WidgetFlags.NoWindow;
+ }
+
+ public RatingEntry (int rating)
+ {
+ renderer = new RatingRenderer ();
+ renderer.Value = rating;
+ CanFocus = true;
+ Name = "GtkEntry";
+ }
+
+ protected virtual void OnChanging ()
+ {
+ EventHandler handler = Changing;
+ if (handler != null) {
+ handler (this, new EventArgs ());
+ }
+ }
+
+ protected virtual void OnChanged ()
+ {
+ QueueDraw ();
+
+ EventHandler handler = Changed;
+ if (handler != null) {
+ handler (this, new EventArgs ());
+ }
+ }
+
+ internal void SetValueFromPosition (int x)
+ {
+ Value = renderer.RatingFromPosition (event_alloc, x);
+ }
+
+#region Public Properties
+
+ private bool always_show_empty_stars = false;
+ public bool AlwaysShowEmptyStars {
+ get { return always_show_empty_stars; }
+ set { always_show_empty_stars = value; }
+ }
+
+ private bool preview_on_hover = true;
+ public bool PreviewOnHover {
+ get { return preview_on_hover; }
+ set { preview_on_hover = value; }
+ }
+
+ private bool has_frame = true;
+ public bool HasFrame {
+ get { return has_frame; }
+ set { has_frame = value; QueueResize (); }
+ }
+
+ public int Value {
+ get { return renderer.Value; }
+ set {
+ if (renderer.Value != value && renderer.Value >= renderer.MinRating && value <= renderer.MaxRating) {
+ renderer.Value = value;
+ OnChanging ();
+ OnChanged ();
+ }
+ }
+ }
+
+ public int MaxRating {
+ get { return renderer.MaxRating; }
+ set { renderer.MaxRating = value; }
+ }
+
+ public int MinRating {
+ get { return renderer.MinRating; }
+ set { renderer.MinRating = value; }
+ }
+
+ public int RatingLevels {
+ get { return renderer.RatingLevels; }
+ }
+
+ private object rated_object;
+ public object RatedObject {
+ get { return rated_object; }
+ set { rated_object = value; }
+ }
+
+#endregion
+
+#region Protected Gtk.Widget Overrides
+
+ protected override void OnRealized ()
+ {
+ WidgetFlags |= WidgetFlags.Realized | WidgetFlags.NoWindow;
+ GdkWindow = Parent.GdkWindow;
+
+ Gdk.WindowAttr attributes = new Gdk.WindowAttr ();
+ attributes.WindowType = Gdk.WindowType.Child;
+ attributes.X = Allocation.X;
+ attributes.Y = Allocation.Y;
+ attributes.Width = Allocation.Width;
+ attributes.Height = Allocation.Height;
+ attributes.Wclass = Gdk.WindowClass.InputOnly;
+ attributes.EventMask = (int)(
+ Gdk.EventMask.PointerMotionMask |
+ Gdk.EventMask.EnterNotifyMask |
+ Gdk.EventMask.LeaveNotifyMask |
+ Gdk.EventMask.KeyPressMask |
+ Gdk.EventMask.KeyReleaseMask |
+ Gdk.EventMask.ButtonPressMask |
+ Gdk.EventMask.ButtonReleaseMask |
+ Gdk.EventMask.ExposureMask);
+
+ Gdk.WindowAttributesType attributes_mask =
+ Gdk.WindowAttributesType.X |
+ Gdk.WindowAttributesType.Y |
+ Gdk.WindowAttributesType.Wmclass;
+
+ event_window = new Gdk.Window (GdkWindow, attributes, attributes_mask);
+ event_window.UserData = Handle;
+
+ Style = Gtk.Rc.GetStyleByPaths (Settings, "*.GtkEntry", "*.GtkEntry", GType);
+
+ base.OnRealized ();
+ }
+
+ protected override void OnUnrealized ()
+ {
+ WidgetFlags &= ~WidgetFlags.Realized;
+
+ event_window.UserData = IntPtr.Zero;
+ Hyena.Gui.GtkWorkarounds.WindowDestroy (event_window);
+ event_window = null;
+
+ base.OnUnrealized ();
+ }
+
+ protected override void OnMapped ()
+ {
+ WidgetFlags |= WidgetFlags.Mapped;
+ event_window.Show ();
+ }
+
+ protected override void OnUnmapped ()
+ {
+ WidgetFlags &= ~WidgetFlags.Mapped;
+ event_window.Hide ();
+ }
+
+ private bool changing_style;
+ protected override void OnStyleSet (Style previous_style)
+ {
+ if (changing_style) {
+ return;
+ }
+
+ base.OnStyleSet (previous_style);
+
+ changing_style = true;
+ focus_width = (int)StyleGetProperty ("focus-line-width");
+ interior_focus = (bool)StyleGetProperty ("interior-focus");
+ changing_style = false;
+ }
+
+ protected override void OnSizeAllocated (Gdk.Rectangle allocation)
+ {
+ base.OnSizeAllocated (allocation);
+ event_alloc = new Gdk.Rectangle (0, 0, allocation.Width, allocation.Height);
+ if (IsRealized) {
+ event_window.MoveResize (allocation);
+ }
+ }
+
+ protected override void OnSizeRequested (ref Gtk.Requisition requisition)
+ {
+ EnsureStyle ();
+
+ Pango.FontMetrics metrics = PangoContext.GetMetrics (Style.FontDescription, PangoContext.Language);
+ renderer.Size = ((int)(metrics.Ascent + metrics.Descent) + 512) >> 10; // PANGO_PIXELS(d)
+ metrics.Dispose ();
+
+ if (HasFrame) {
+ renderer.Xpad = Style.Xthickness + (interior_focus ? focus_width : 0) + 2;
+ renderer.Ypad = Style.Ythickness + (interior_focus ? focus_width : 0) + 2;
+ } else {
+ renderer.Xpad = 0;
+ renderer.Ypad = 0;
+ }
+
+ requisition.Width = renderer.Width;
+ requisition.Height = renderer.Height;
+ }
+
+ protected override bool OnExposeEvent (Gdk.EventExpose evnt)
+ {
+ if (evnt.Window != GdkWindow) {
+ return true;
+ }
+
+ if (HasFrame) {
+ int y_mid = (int)Math.Round ((Allocation.Height - renderer.Height) / 2.0);
+ Gtk.Style.PaintFlatBox (Style, GdkWindow, State, ShadowType.None, evnt.Area, this, "entry",
+ Allocation.X, Allocation.Y + y_mid, Allocation.Width, renderer.Height);
+ Gtk.Style.PaintShadow (Style, GdkWindow, State, ShadowType.In,
+ evnt.Area, this, "entry", Allocation.X, Allocation.Y + y_mid, Allocation.Width, renderer.Height);
+ }
+
+ Cairo.Context cr = Gdk.CairoHelper.Create (GdkWindow);
+ renderer.Render (cr, Allocation,
+ CairoExtensions.GdkColorToCairoColor (HasFrame ? Parent.Style.Text (State) : Parent.Style.Foreground (State)),
+ AlwaysShowEmptyStars, PreviewOnHover && hover_value >= renderer.MinRating, hover_value,
+ State == StateType.Insensitive ? 1 : 0.90,
+ State == StateType.Insensitive ? 1 : 0.55,
+ State == StateType.Insensitive ? 1 : 0.45);
+ CairoExtensions.DisposeContext (cr);
+
+ return true;
+ }
+
+ protected override bool OnButtonPressEvent (Gdk.EventButton evnt)
+ {
+ if (evnt.Button != 1) {
+ return false;
+ }
+
+ HasFocus = true;
+ Value = renderer.RatingFromPosition (event_alloc, evnt.X);
+
+ return true;
+ }
+
+ protected override bool OnEnterNotifyEvent (Gdk.EventCrossing evnt)
+ {
+ hover_value = renderer.MinRating;
+ QueueDraw ();
+ return true;
+ }
+
+ protected override bool OnLeaveNotifyEvent (Gdk.EventCrossing crossing)
+ {
+ return HandleLeaveNotify (crossing);
+ }
+
+ protected override bool OnMotionNotifyEvent (Gdk.EventMotion motion)
+ {
+ return HandleMotionNotify (motion.State, motion.X);
+ }
+
+ protected override bool OnKeyPressEvent (Gdk.EventKey evnt)
+ {
+ switch (evnt.Key) {
+ case Gdk.Key.Up:
+ case Gdk.Key.Right:
+ case Gdk.Key.plus:
+ case Gdk.Key.equal:
+ Value++;
+ return true;
+
+ case Gdk.Key.Down:
+ case Gdk.Key.Left:
+ case Gdk.Key.minus:
+ Value--;
+ return true;
+ }
+
+ if (evnt.KeyValue >= (48 + MinRating) && evnt.KeyValue <= (48 + MaxRating) && evnt.KeyValue <= 59) {
+ Value = (int)evnt.KeyValue - 48;
+ return true;
+ }
+
+ return false;
+ }
+
+ protected override bool OnScrollEvent (Gdk.EventScroll args)
+ {
+ return HandleScroll (args);
+ }
+
+#endregion
+
+#region Internal API, primarily for RatingMenuItem
+
+ internal void ClearHover ()
+ {
+ hover_value = renderer.MinRating - 1;
+ }
+
+ internal bool HandleKeyPress (Gdk.EventKey evnt)
+ {
+ return this.OnKeyPressEvent (evnt);
+ }
+
+ internal bool HandleScroll (Gdk.EventScroll args)
+ {
+ switch (args.Direction) {
+ case Gdk.ScrollDirection.Up:
+ case Gdk.ScrollDirection.Right:
+ Value++;
+ return true;
+
+ case Gdk.ScrollDirection.Down:
+ case Gdk.ScrollDirection.Left:
+ Value--;
+ return true;
+ }
+
+ return false;
+ }
+
+ internal bool HandleMotionNotify (Gdk.ModifierType state, double x)
+ {
+ hover_value = renderer.RatingFromPosition (event_alloc, x);
+ /*if ((state & Gdk.ModifierType.Button1Mask) != 0) {
+ Value = hover_value;
+ }*/
+
+ QueueDraw ();
+ return true;
+ }
+
+ internal bool HandleLeaveNotify (Gdk.EventCrossing crossing)
+ {
+ ClearHover ();
+ QueueDraw ();
+ return true;
+ }
+
+#endregion
+
+ }
+
+#region Test Module
+
+#if ENABLE_ATK
+ public class RatingAccessible : Atk.Object, Atk.Value, Atk.ValueImplementor
+ {
+ private RatingEntry rating;
+
+ public RatingAccessible (IntPtr raw) : base (raw)
+ {
+ Hyena.Log.Information ("RatingAccessible raw ctor..");
+ }
+
+ public RatingAccessible (GLib.Object widget): base ()
+ {
+ rating = widget as RatingEntry;
+ Name = "Rating entry";
+ Description = "Rating entry, from 0 to 5 stars";
+ Role = Atk.Role.Slider;
+ }
+
+ public void GetMaximumValue (ref GLib.Value val)
+ {
+ val = new GLib.Value (5);
+ }
+
+ public void GetMinimumIncrement (ref GLib.Value val)
+ {
+ val = new GLib.Value (1);
+ }
+
+ public void GetMinimumValue (ref GLib.Value val)
+ {
+ val = new GLib.Value (0);
+ }
+
+ public void GetCurrentValue (ref GLib.Value val)
+ {
+ val = new GLib.Value (rating.Value);
+ }
+
+ public bool SetCurrentValue (GLib.Value val)
+ {
+ int r = (int) val.Val;
+ if (r <= 0 || r > 5) {
+ return false;
+ }
+
+ rating.Value = (int) val.Val;
+ return true;
+ }
+ }
+#endif
+
+#if ENABLE_ATK
+ internal class RatingAccessibleFactory : Atk.ObjectFactory
+ {
+ public static void Init ()
+ {
+ new RatingAccessibleFactory ();
+ Atk.Global.DefaultRegistry.SetFactoryType ((GLib.GType)typeof (RatingEntry), (GLib.GType)typeof (RatingAccessibleFactory));
+ }
+
+ protected override Atk.Object OnCreateAccessible (GLib.Object obj)
+ {
+ return new RatingAccessible (obj);
+ }
+
+ protected override GLib.GType OnGetAccessibleType ()
+ {
+ return RatingAccessible.GType;
+ }
+ }
+#endif
+
+ [Hyena.Gui.TestModule ("Rating Entry")]
+ internal class RatingEntryTestModule : Gtk.Window
+ {
+ public RatingEntryTestModule () : base ("Rating Entry")
+ {
+ VBox pbox = new VBox ();
+ Add (pbox);
+
+ Menu m = new Menu ();
+ MenuBar b = new MenuBar ();
+ MenuItem item = new MenuItem ("Rate Me!");
+ item.Submenu = m;
+ b.Append (item);
+ m.Append (new MenuItem ("Apples"));
+ m.Append (new MenuItem ("Pears"));
+ m.Append (new RatingMenuItem ());
+ m.Append (new ImageMenuItem ("gtk-remove", null));
+ m.ShowAll ();
+ pbox.PackStart (b, false, false, 0);
+
+ VBox box = new VBox ();
+ box.BorderWidth = 10;
+ box.Spacing = 10;
+ pbox.PackStart (box, true, true, 0);
+
+ RatingEntry entry1 = new RatingEntry ();
+ box.PackStart (entry1, true, true, 0);
+
+ RatingEntry entry2 = new RatingEntry ();
+ box.PackStart (entry2, false, false, 0);
+
+ box.PackStart (new Entry ("Normal GtkEntry"), false, false, 0);
+
+ RatingEntry entry3 = new RatingEntry ();
+ Pango.FontDescription fd = entry3.PangoContext.FontDescription.Copy ();
+ fd.Size = (int)(fd.Size * Pango.Scale.XXLarge);
+ entry3.ModifyFont (fd);
+ fd.Dispose ();
+ box.PackStart (entry3, true, true, 0);
+
+ pbox.ShowAll ();
+ }
+ }
+
+#endregion
+
+}
diff --git a/lib/Hyena/src/Hyena.Gui/Hyena.Widgets/RatingMenuItem.cs b/lib/Hyena/src/Hyena.Gui/Hyena.Widgets/RatingMenuItem.cs
new file mode 100644
index 0000000..32ee848
--- /dev/null
+++ b/lib/Hyena/src/Hyena.Gui/Hyena.Widgets/RatingMenuItem.cs
@@ -0,0 +1,133 @@
+//
+// RatingMenuItem.cs
+//
+// Author:
+// Aaron Bockover <abockover at novell.com>
+//
+// Copyright (C) 2007-2008 Novell, Inc.
+//
+// Permission is hereby granted, free of charge, to any person obtaining
+// a copy of this software and associated documentation files (the
+// "Software"), to deal in the Software without restriction, including
+// without limitation the rights to use, copy, modify, merge, publish,
+// distribute, sublicense, and/or sell copies of the Software, and to
+// permit persons to whom the Software is furnished to do so, subject to
+// the following conditions:
+//
+// The above copyright notice and this permission notice shall be
+// included in all copies or substantial portions of the Software.
+//
+// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
+// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
+// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
+// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+//
+
+using System;
+using Gtk;
+using Mono.Unix;
+
+namespace Hyena.Widgets
+{
+ public class RatingMenuItem : ComplexMenuItem
+ {
+ private RatingEntry entry;
+ private bool can_activate = true;
+ private Box box;
+
+ public RatingMenuItem () : base ()
+ {
+ box = new HBox ();
+ box.Spacing = 5;
+
+ Label label = new Label ();
+ label.Markup = String.Format ("<i>{0}</i>",
+ GLib.Markup.EscapeText (Catalog.GetString ("Rating:")));
+ box.PackStart (label, false, false, 0);
+ label.Show ();
+
+ entry = new RatingEntry ();
+ entry.HasFrame = false;
+ entry.PreviewOnHover = true;
+ entry.AlwaysShowEmptyStars = true;
+ entry.Changed += OnEntryChanged;
+ box.PackStart (entry, false, false, 0);
+
+ box.ShowAll ();
+ Add (box);
+ }
+
+ protected RatingMenuItem (IntPtr raw) : base (raw)
+ {
+ }
+
+ private int TransformX (double inx)
+ {
+ int x = (int)inx - entry.Allocation.X;
+
+ if (x < 0) {
+ x = 0;
+ } else if (x > entry.Allocation.Width) {
+ x = entry.Allocation.Width;
+ }
+
+ return x;
+ }
+
+ protected override bool OnButtonReleaseEvent (Gdk.EventButton evnt)
+ {
+ if (evnt.X == 0 && evnt.Y == 0) {
+ return false;
+ }
+ entry.SetValueFromPosition (TransformX (evnt.X));
+ return true;
+ }
+
+ protected override bool OnMotionNotifyEvent (Gdk.EventMotion evnt)
+ {
+ return entry.HandleMotionNotify (evnt.State, TransformX (evnt.X));
+ }
+
+ protected override bool OnLeaveNotifyEvent (Gdk.EventCrossing evnt)
+ {
+ return entry.HandleLeaveNotify (evnt);
+ }
+
+ protected override bool OnScrollEvent (Gdk.EventScroll evnt)
+ {
+ return entry.HandleScroll (evnt);
+ }
+
+ protected override bool OnKeyPressEvent (Gdk.EventKey evnt)
+ {
+ return entry.HandleKeyPress (evnt);
+ }
+
+ private void OnEntryChanged (object o, EventArgs args)
+ {
+ if (can_activate) {
+ Activate ();
+ }
+ }
+
+ public void Reset (int value)
+ {
+ can_activate = false;
+ Value = value;
+ entry.ClearHover ();
+ can_activate = true;
+ }
+
+ public int Value {
+ get { return entry.Value; }
+ set { entry.Value = value; }
+ }
+
+ public RatingEntry RatingEntry {
+ get { return entry; }
+ }
+ }
+}
diff --git a/lib/Hyena/src/Hyena.Gui/Hyena.Widgets/RoundedFrame.cs b/lib/Hyena/src/Hyena.Gui/Hyena.Widgets/RoundedFrame.cs
new file mode 100644
index 0000000..ac28bf0
--- /dev/null
+++ b/lib/Hyena/src/Hyena.Gui/Hyena.Widgets/RoundedFrame.cs
@@ -0,0 +1,206 @@
+//
+// RoundedFrame.cs
+//
+// Authors:
+// Aaron Bockover <abockover at novell.com>
+// Gabriel Burt <gburt at novell.com>
+//
+// Copyright (C) 2008 Novell, Inc.
+//
+// Permission is hereby granted, free of charge, to any person obtaining
+// a copy of this software and associated documentation files (the
+// "Software"), to deal in the Software without restriction, including
+// without limitation the rights to use, copy, modify, merge, publish,
+// distribute, sublicense, and/or sell copies of the Software, and to
+// permit persons to whom the Software is furnished to do so, subject to
+// the following conditions:
+//
+// The above copyright notice and this permission notice shall be
+// included in all copies or substantial portions of the Software.
+//
+// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
+// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
+// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
+// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+//
+
+using System;
+using Gtk;
+using Cairo;
+
+using Hyena.Gui;
+using Hyena.Gui.Theming;
+
+namespace Hyena.Widgets
+{
+ public class RoundedFrame : Bin
+ {
+ private Theme theme;
+ protected Theme Theme {
+ get { return theme; }
+ }
+
+ private Widget child;
+ private Gdk.Rectangle child_allocation;
+ private bool fill_color_set;
+ private Cairo.Color fill_color;
+ private bool draw_border = true;
+ private Pattern fill_pattern;
+ private int frame_width;
+
+ // Ugh, this is to avoid the GLib.MissingIntPtrCtorException seen by some; BGO #552169
+ protected RoundedFrame (IntPtr ptr) : base (ptr)
+ {
+ }
+
+ public RoundedFrame ()
+ {
+ }
+
+ public void SetFillColor (Cairo.Color color)
+ {
+ fill_color = color;
+ fill_color_set = true;
+ QueueDraw ();
+ }
+
+ public void UnsetFillColor ()
+ {
+ fill_color_set = false;
+ QueueDraw ();
+ }
+
+ public Pattern FillPattern {
+ get { return fill_pattern; }
+ set {
+ fill_pattern = value;
+ QueueDraw ();
+ }
+ }
+
+ public bool DrawBorder {
+ get { return draw_border; }
+ set { draw_border = value; QueueDraw (); }
+ }
+
+#region Gtk.Widget Overrides
+
+ protected override void OnStyleSet (Style previous_style)
+ {
+ base.OnStyleSet (previous_style);
+ theme = Hyena.Gui.Theming.ThemeEngine.CreateTheme (this);
+ frame_width = (int)theme.Context.Radius + 1;
+ }
+
+ protected override void OnSizeRequested (ref Requisition requisition)
+ {
+ if (child != null && child.Visible) {
+ // Add the child's width/height
+ Requisition child_requisition = child.SizeRequest ();
+ requisition.Width = Math.Max (0, child_requisition.Width);
+ requisition.Height = child_requisition.Height;
+ } else {
+ requisition.Width = 0;
+ requisition.Height = 0;
+ }
+
+ // Add the frame border
+ requisition.Width += ((int)BorderWidth + frame_width) * 2;
+ requisition.Height += ((int)BorderWidth + frame_width) * 2;
+ }
+
+ protected override void OnSizeAllocated (Gdk.Rectangle allocation)
+ {
+ base.OnSizeAllocated (allocation);
+
+ child_allocation = new Gdk.Rectangle ();
+
+ if (child == null || !child.Visible) {
+ return;
+ }
+
+ child_allocation.X = (int)BorderWidth + frame_width;
+ child_allocation.Y = (int)BorderWidth + frame_width;
+ child_allocation.Width = (int)Math.Max (1, Allocation.Width - child_allocation.X * 2);
+ child_allocation.Height = (int)Math.Max (1, Allocation.Height - child_allocation.Y -
+ (int)BorderWidth - frame_width);
+
+ child_allocation.X += Allocation.X;
+ child_allocation.Y += Allocation.Y;
+
+ child.SizeAllocate (child_allocation);
+ }
+
+ protected override void OnSetScrollAdjustments (Adjustment hadj, Adjustment vadj)
+ {
+ // This is to satisfy the gtk_widget_set_scroll_adjustments
+ // inside of GtkScrolledWindow so it doesn't complain about
+ // its child not being scrollable.
+ }
+
+ protected override bool OnExposeEvent (Gdk.EventExpose evnt)
+ {
+ if (!IsDrawable) {
+ return false;
+ }
+
+ Cairo.Context cr = Gdk.CairoHelper.Create (evnt.Window);
+
+ try {
+ DrawFrame (cr, evnt.Area);
+ if (child != null) {
+ PropagateExpose (child, evnt);
+ }
+ return false;
+ } finally {
+ CairoExtensions.DisposeContext (cr);
+ }
+ }
+
+ private void DrawFrame (Cairo.Context cr, Gdk.Rectangle clip)
+ {
+ int x = child_allocation.X - frame_width;
+ int y = child_allocation.Y - frame_width;
+ int width = child_allocation.Width + 2 * frame_width;
+ int height = child_allocation.Height + 2 * frame_width;
+
+ Gdk.Rectangle rect = new Gdk.Rectangle (x, y, width, height);
+
+ theme.Context.ShowStroke = draw_border;
+
+ if (fill_color_set) {
+ theme.DrawFrameBackground (cr, rect, fill_color);
+ } else if (fill_pattern != null) {
+ theme.DrawFrameBackground (cr, rect, fill_pattern);
+ } else {
+ theme.DrawFrameBackground (cr, rect, true);
+ theme.DrawFrameBorder (cr, rect);
+ }
+ }
+
+#endregion
+
+#region Gtk.Container Overrides
+
+ protected override void OnAdded (Widget widget)
+ {
+ child = widget;
+ base.OnAdded (widget);
+ }
+
+ protected override void OnRemoved (Widget widget)
+ {
+ if (child == widget) {
+ child = null;
+ }
+
+ base.OnRemoved (widget);
+ }
+
+#endregion
+
+ }
+}
diff --git a/lib/Hyena/src/Hyena.Gui/Hyena.Widgets/ScrolledWindow.cs b/lib/Hyena/src/Hyena.Gui/Hyena.Widgets/ScrolledWindow.cs
new file mode 100644
index 0000000..91bb0a2
--- /dev/null
+++ b/lib/Hyena/src/Hyena.Gui/Hyena.Widgets/ScrolledWindow.cs
@@ -0,0 +1,122 @@
+//
+// ScrolledWindow.cs
+//
+// Author:
+// Aaron Bockover <abockover at novell.com>
+//
+// Copyright (C) 2008 Novell, Inc.
+//
+// Permission is hereby granted, free of charge, to any person obtaining
+// a copy of this software and associated documentation files (the
+// "Software"), to deal in the Software without restriction, including
+// without limitation the rights to use, copy, modify, merge, publish,
+// distribute, sublicense, and/or sell copies of the Software, and to
+// permit persons to whom the Software is furnished to do so, subject to
+// the following conditions:
+//
+// The above copyright notice and this permission notice shall be
+// included in all copies or substantial portions of the Software.
+//
+// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
+// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
+// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
+// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+//
+
+using System;
+using System.Reflection;
+
+using Gtk;
+using Gdk;
+using Cairo;
+
+using Hyena.Gui;
+using Hyena.Data.Gui;
+
+namespace Hyena.Widgets
+{
+ public class ScrolledWindow : Gtk.ScrolledWindow
+ {
+ private Widget adjustable;
+ private RoundedFrame rounded_frame;
+
+ public ScrolledWindow ()
+ {
+ }
+
+ public void AddWithFrame (Widget widget)
+ {
+ RoundedFrame frame = new RoundedFrame ();
+ frame.Add (widget);
+ frame.Show ();
+
+ Add (frame);
+ ProbeAdjustable (widget);
+ }
+
+ protected override void OnAdded (Widget widget)
+ {
+ if (widget is RoundedFrame) {
+ rounded_frame = (RoundedFrame)widget;
+ rounded_frame.Added += OnFrameWidgetAdded;
+ rounded_frame.Removed += OnFrameWidgetRemoved;
+ }
+
+ base.OnAdded (widget);
+ }
+
+ protected override void OnRemoved (Widget widget)
+ {
+ if (widget == rounded_frame) {
+ rounded_frame.Added -= OnFrameWidgetAdded;
+ rounded_frame.Removed -= OnFrameWidgetRemoved;
+ rounded_frame = null;
+ }
+
+ base.OnRemoved (widget);
+ }
+
+ private void OnFrameWidgetAdded (object o, AddedArgs args)
+ {
+ if (rounded_frame != null) {
+ ProbeAdjustable (args.Widget);
+ }
+ }
+
+ private void OnFrameWidgetRemoved (object o, RemovedArgs args)
+ {
+ if (adjustable != null && adjustable == args.Widget) {
+ Hadjustment = null;
+ Vadjustment = null;
+ adjustable = null;
+ }
+ }
+
+ private void ProbeAdjustable (Widget widget)
+ {
+ Type type = widget.GetType ();
+
+ PropertyInfo hadj_prop = type.GetProperty ("Hadjustment");
+ PropertyInfo vadj_prop = type.GetProperty ("Vadjustment");
+
+ if (hadj_prop == null || vadj_prop == null) {
+ return;
+ }
+
+ object hadj_value = hadj_prop.GetValue (widget, null);
+ object vadj_value = vadj_prop.GetValue (widget, null);
+
+ if (hadj_value == null || vadj_value == null
+ || hadj_value.GetType () != typeof (Adjustment)
+ || vadj_value.GetType () != typeof (Adjustment)) {
+ return;
+ }
+
+ Hadjustment = (Adjustment)hadj_value;
+ Vadjustment = (Adjustment)vadj_value;
+ }
+ }
+}
diff --git a/lib/Hyena/src/Hyena.Gui/Hyena.Widgets/SegmentedBar.cs b/lib/Hyena/src/Hyena.Gui/Hyena.Widgets/SegmentedBar.cs
new file mode 100644
index 0000000..66e8fab
--- /dev/null
+++ b/lib/Hyena/src/Hyena.Gui/Hyena.Widgets/SegmentedBar.cs
@@ -0,0 +1,637 @@
+//
+// SegmentedBar.cs
+//
+// Author:
+// Aaron Bockover <abockover at novell.com>
+//
+// Copyright (C) 2008 Novell, Inc.
+//
+// Permission is hereby granted, free of charge, to any person obtaining
+// a copy of this software and associated documentation files (the
+// "Software"), to deal in the Software without restriction, including
+// without limitation the rights to use, copy, modify, merge, publish,
+// distribute, sublicense, and/or sell copies of the Software, and to
+// permit persons to whom the Software is furnished to do so, subject to
+// the following conditions:
+//
+// The above copyright notice and this permission notice shall be
+// included in all copies or substantial portions of the Software.
+//
+// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
+// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
+// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
+// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+//
+
+using System;
+using System.Collections.Generic;
+
+using Gtk;
+using Cairo;
+
+using Hyena.Gui;
+
+namespace Hyena.Widgets
+{
+ public class SegmentedBar : Widget
+ {
+ public delegate string BarValueFormatHandler (Segment segment);
+
+ public class Segment
+ {
+ private string title;
+ private double percent;
+ private Cairo.Color color;
+ private bool show_in_bar;
+
+ public Segment (string title, double percent, Cairo.Color color)
+ : this (title, percent, color, true)
+ {
+ }
+
+ public Segment (string title, double percent, Cairo.Color color, bool showInBar)
+ {
+ this.title = title;
+ this.percent = percent;
+ this.color = color;
+ this.show_in_bar = showInBar;
+ }
+
+ public string Title {
+ get { return title; }
+ set { title = value; }
+ }
+
+ public double Percent {
+ get { return percent; }
+ set { percent = value; }
+ }
+
+ public Cairo.Color Color {
+ get { return color; }
+ set { color = value; }
+ }
+
+ public bool ShowInBar {
+ get { return show_in_bar; }
+ set { show_in_bar = value; }
+ }
+
+ internal int LayoutWidth;
+ internal int LayoutHeight;
+ }
+
+ // State
+ private List<Segment> segments = new List<Segment> ();
+ private int layout_width;
+ private int layout_height;
+
+ // Properties
+ private int bar_height = 26;
+ private int bar_label_spacing = 8;
+ private int segment_label_spacing = 16;
+ private int segment_box_size = 12;
+ private int segment_box_spacing = 6;
+ private int h_padding = 0;
+
+ private bool show_labels = true;
+ private bool reflect = true;
+
+ private Color remainder_color = CairoExtensions.RgbToColor (0xeeeeee);
+
+ private BarValueFormatHandler format_handler;
+
+ public SegmentedBar ()
+ {
+ WidgetFlags |= WidgetFlags.NoWindow;
+ }
+
+ protected override void OnRealized ()
+ {
+ GdkWindow = Parent.GdkWindow;
+ base.OnRealized ();
+ }
+
+#region Size Calculations
+
+ protected override void OnSizeRequested (ref Requisition requisition)
+ {
+ requisition.Width = 200;
+ requisition.Height = 0;
+ }
+
+ protected override void OnSizeAllocated (Gdk.Rectangle allocation)
+ {
+ int _bar_height = reflect ? (int)Math.Ceiling (bar_height * 1.75) : bar_height;
+
+ if (show_labels) {
+ ComputeLayoutSize ();
+ HeightRequest = Math.Max (bar_height + bar_label_spacing + layout_height, _bar_height);
+ WidthRequest = layout_width + (2 * h_padding);
+ } else {
+ HeightRequest = _bar_height;
+ WidthRequest = bar_height + (2 * h_padding);
+ }
+
+ base.OnSizeAllocated (allocation);
+ }
+
+ private void ComputeLayoutSize ()
+ {
+ if (segments.Count == 0) {
+ return;
+ }
+
+ Pango.Layout layout = null;
+
+ layout_width = layout_height = 0;
+
+ for (int i = 0, n = segments.Count; i < n; i++) {
+ int aw, ah, bw, bh;
+
+ layout = CreateAdaptLayout (layout, false, true);
+ layout.SetText (FormatSegmentText (segments[i]));
+ layout.GetPixelSize (out aw, out ah);
+
+ layout = CreateAdaptLayout (layout, true, false);
+ layout.SetText (FormatSegmentValue (segments[i]));
+ layout.GetPixelSize (out bw, out bh);
+
+ int w = Math.Max (aw, bw);
+ int h = ah + bh;
+
+ segments[i].LayoutWidth = w;
+ segments[i].LayoutHeight = Math.Max (h, segment_box_size * 2);
+
+ layout_width += segments[i].LayoutWidth + segment_box_size + segment_box_spacing
+ + (i < n - 1 ? segment_label_spacing : 0);
+ layout_height = Math.Max (layout_height, segments[i].LayoutHeight);
+ }
+
+ layout.Dispose ();
+ }
+
+#endregion
+
+#region Public Methods
+
+ public void AddSegmentRgba (string title, double percent, uint rgbaColor)
+ {
+ AddSegment (title, percent, CairoExtensions.RgbaToColor (rgbaColor));
+ }
+
+ public void AddSegmentRgb (string title, double percent, uint rgbColor)
+ {
+ AddSegment (title, percent, CairoExtensions.RgbToColor (rgbColor));
+ }
+
+ public void AddSegment (string title, double percent, Color color)
+ {
+ AddSegment (new Segment (title, percent, color, true));
+ }
+
+ public void AddSegment (string title, double percent, Color color, bool showInBar)
+ {
+ AddSegment (new Segment (title, percent, color, showInBar));
+ }
+
+ public void AddSegment (Segment segment)
+ {
+ lock (segments) {
+ segments.Add (segment);
+ QueueDraw ();
+ }
+ }
+
+ public void UpdateSegment (int index, double percent)
+ {
+ segments[index].Percent = percent;
+ QueueDraw ();
+ }
+
+#endregion
+
+#region Public Properties
+
+ public BarValueFormatHandler ValueFormatter {
+ get { return format_handler; }
+ set { format_handler = value; }
+ }
+
+ public Color RemainderColor {
+ get { return remainder_color; }
+ set {
+ remainder_color = value;
+ QueueDraw ();
+ }
+ }
+
+ public int BarHeight {
+ get { return bar_height; }
+ set {
+ if (bar_height != value) {
+ bar_height = value;
+ QueueResize ();
+ }
+ }
+ }
+
+ public bool ShowReflection {
+ get { return reflect; }
+ set {
+ if (reflect != value) {
+ reflect = value;
+ QueueResize ();
+ }
+ }
+ }
+
+ public bool ShowLabels {
+ get { return show_labels; }
+ set {
+ if (show_labels != value) {
+ show_labels = value;
+ QueueResize ();
+ }
+ }
+ }
+
+ public int SegmentLabelSpacing {
+ get { return segment_label_spacing; }
+ set {
+ if (segment_label_spacing != value) {
+ segment_label_spacing = value;
+ QueueResize ();
+ }
+ }
+ }
+ public int SegmentBoxSize {
+ get { return segment_box_size; }
+ set {
+ if (segment_box_size != value) {
+ segment_box_size = value;
+ QueueResize ();
+ }
+ }
+ }
+
+ public int SegmentBoxSpacing {
+ get { return segment_box_spacing; }
+ set {
+ if (segment_box_spacing != value) {
+ segment_box_spacing = value;
+ QueueResize ();
+ }
+ }
+ }
+
+ public int BarLabelSpacing {
+ get { return bar_label_spacing; }
+ set {
+ if (bar_label_spacing != value) {
+ bar_label_spacing = value;
+ QueueResize ();
+ }
+ }
+ }
+
+ public int HorizontalPadding {
+ get { return h_padding; }
+ set {
+ if (h_padding != value) {
+ h_padding = value;
+ QueueResize ();
+ }
+ }
+ }
+
+#endregion
+
+#region Rendering
+
+ protected override bool OnExposeEvent (Gdk.EventExpose evnt)
+ {
+ if (evnt.Window != GdkWindow) {
+ return base.OnExposeEvent (evnt);
+ }
+
+ Cairo.Context cr = Gdk.CairoHelper.Create (evnt.Window);
+
+ if (reflect) {
+ CairoExtensions.PushGroup (cr);
+ }
+
+ cr.Operator = Operator.Over;
+ cr.Translate (Allocation.X + h_padding, Allocation.Y);
+ cr.Rectangle (0, 0, Allocation.Width - h_padding, Math.Max (2 * bar_height,
+ bar_height + bar_label_spacing + layout_height));
+ cr.Clip ();
+
+ Pattern bar = RenderBar (Allocation.Width - 2 * h_padding, bar_height);
+
+ cr.Save ();
+ cr.Source = bar;
+ cr.Paint ();
+ cr.Restore ();
+
+ if (reflect) {
+ cr.Save ();
+
+ cr.Rectangle (0, bar_height, Allocation.Width - h_padding, bar_height);
+ cr.Clip ();
+
+ Matrix matrix = new Matrix ();
+ matrix.InitScale (1, -1);
+ matrix.Translate (0, -(2 * bar_height) + 1);
+ cr.Transform (matrix);
+
+ cr.Pattern = bar;
+
+ LinearGradient mask = new LinearGradient (0, 0, 0, bar_height);
+
+ mask.AddColorStop (0.25, new Color (0, 0, 0, 0));
+ mask.AddColorStop (0.5, new Color (0, 0, 0, 0.125));
+ mask.AddColorStop (0.75, new Color (0, 0, 0, 0.4));
+ mask.AddColorStop (1.0, new Color (0, 0, 0, 0.7));
+
+ cr.Mask (mask);
+ mask.Destroy ();
+
+ cr.Restore ();
+
+ CairoExtensions.PopGroupToSource (cr);
+ cr.Paint ();
+ }
+
+ if (show_labels) {
+ cr.Translate ((reflect ? Allocation.X : -h_padding) + (Allocation.Width - layout_width) / 2,
+ (reflect ? Allocation.Y : 0) + bar_height + bar_label_spacing);
+
+ RenderLabels (cr);
+ }
+
+ bar.Destroy ();
+ CairoExtensions.DisposeContext (cr);
+
+ return true;
+ }
+
+ private Pattern RenderBar (int w, int h)
+ {
+ ImageSurface s = new ImageSurface (Format.Argb32, w, h);
+ Context cr = new Context (s);
+ RenderBar (cr, w, h, h / 2);
+// TODO Implement the new ctor - see http://bugzilla.gnome.org/show_bug.cgi?id=561394
+#pragma warning disable 0618
+ Pattern pattern = new Pattern (s);
+#pragma warning restore 0618
+ s.Destroy ();
+ ((IDisposable)cr).Dispose ();
+ return pattern;
+ }
+
+ private void RenderBar (Context cr, int w, int h, int r)
+ {
+ RenderBarSegments (cr, w, h, r);
+ RenderBarStrokes (cr, w, h, r);
+ }
+
+ private void RenderBarSegments (Context cr, int w, int h, int r)
+ {
+ LinearGradient grad = new LinearGradient (0, 0, w, 0);
+ double last = 0.0;
+
+ foreach (Segment segment in segments) {
+ if (segment.Percent > 0) {
+ grad.AddColorStop (last, segment.Color);
+ grad.AddColorStop (last += segment.Percent, segment.Color);
+ }
+ }
+
+ CairoExtensions.RoundedRectangle (cr, 0, 0, w, h, r);
+ cr.Pattern = grad;
+ cr.FillPreserve ();
+ cr.Pattern.Destroy ();
+
+ grad = new LinearGradient (0, 0, 0, h);
+ grad.AddColorStop (0.0, new Color (1, 1, 1, 0.125));
+ grad.AddColorStop (0.35, new Color (1, 1, 1, 0.255));
+ grad.AddColorStop (1, new Color (0, 0, 0, 0.4));
+
+ cr.Pattern = grad;
+ cr.Fill ();
+ cr.Pattern.Destroy ();
+ }
+
+ private void RenderBarStrokes (Context cr, int w, int h, int r)
+ {
+ LinearGradient stroke = MakeSegmentGradient (h, CairoExtensions.RgbaToColor (0x00000040));
+ LinearGradient seg_sep_light = MakeSegmentGradient (h, CairoExtensions.RgbaToColor (0xffffff20));
+ LinearGradient seg_sep_dark = MakeSegmentGradient (h, CairoExtensions.RgbaToColor (0x00000020));
+
+ cr.LineWidth = 1;
+
+ double seg_w = 20;
+ double x = seg_w > r ? seg_w : r;
+
+ while (x <= w - r) {
+ cr.MoveTo (x - 0.5, 1);
+ cr.LineTo (x - 0.5, h - 1);
+ cr.Pattern = seg_sep_light;
+ cr.Stroke ();
+
+ cr.MoveTo (x + 0.5, 1);
+ cr.LineTo (x + 0.5, h - 1);
+ cr.Pattern = seg_sep_dark;
+ cr.Stroke ();
+
+ x += seg_w;
+ }
+
+ CairoExtensions.RoundedRectangle (cr, 0.5, 0.5, w - 1, h - 1, r);
+ cr.Pattern = stroke;
+ cr.Stroke ();
+
+ stroke.Destroy ();
+ seg_sep_light.Destroy ();
+ seg_sep_dark.Destroy ();
+ }
+
+ private LinearGradient MakeSegmentGradient (int h, Color color)
+ {
+ return MakeSegmentGradient (h, color, false);
+ }
+
+ private LinearGradient MakeSegmentGradient (int h, Color color, bool diag)
+ {
+ LinearGradient grad = new LinearGradient (0, 0, 0, h);
+ grad.AddColorStop (0, CairoExtensions.ColorShade (color, 1.1));
+ grad.AddColorStop (0.35, CairoExtensions.ColorShade (color, 1.2));
+ grad.AddColorStop (1, CairoExtensions.ColorShade (color, 0.8));
+ return grad;
+ }
+
+ private void RenderLabels (Context cr)
+ {
+ if (segments.Count == 0) {
+ return;
+ }
+
+ Pango.Layout layout = null;
+ Color text_color = CairoExtensions.GdkColorToCairoColor (Style.Foreground (State));
+ Color box_stroke_color = new Color (0, 0, 0, 0.6);
+
+ int x = 0;
+
+ foreach (Segment segment in segments) {
+ cr.LineWidth = 1;
+ cr.Rectangle (x + 0.5, 2 + 0.5, segment_box_size - 1, segment_box_size - 1);
+ LinearGradient grad = MakeSegmentGradient (segment_box_size, segment.Color, true);
+ cr.Pattern = grad;
+ cr.FillPreserve ();
+ cr.Color = box_stroke_color;
+ cr.Stroke ();
+ grad.Destroy ();
+
+ x += segment_box_size + segment_box_spacing;
+
+ int lw, lh;
+ layout = CreateAdaptLayout (layout, false, true);
+ layout.SetText (FormatSegmentText (segment));
+ layout.GetPixelSize (out lw, out lh);
+
+ cr.MoveTo (x, 0);
+ text_color.A = 0.9;
+ cr.Color = text_color;
+ PangoCairoHelper.ShowLayout (cr, layout);
+ cr.Fill ();
+
+ layout = CreateAdaptLayout (layout, true, false);
+ layout.SetText (FormatSegmentValue (segment));
+
+ cr.MoveTo (x, lh);
+ text_color.A = 0.75;
+ cr.Color = text_color;
+ PangoCairoHelper.ShowLayout (cr, layout);
+ cr.Fill ();
+
+ x += segment.LayoutWidth + segment_label_spacing;
+ }
+
+ layout.Dispose ();
+ }
+
+#endregion
+
+#region Utilities
+
+ private int pango_size_normal;
+
+ private Pango.Layout CreateAdaptLayout (Pango.Layout layout, bool small, bool bold)
+ {
+ if (layout == null) {
+ Pango.Context context = CreatePangoContext ();
+ layout = new Pango.Layout (context);
+ layout.FontDescription = context.FontDescription;
+ pango_size_normal = layout.FontDescription.Size;
+ }
+
+ layout.FontDescription.Size = small
+ ? (int)(layout.FontDescription.Size * Pango.Scale.Small)
+ : pango_size_normal;
+
+ layout.FontDescription.Weight = bold
+ ? Pango.Weight.Bold
+ : Pango.Weight.Normal;
+
+ return layout;
+ }
+
+
+ private string FormatSegmentText (Segment segment)
+ {
+ return segment.Title;
+ }
+
+ private string FormatSegmentValue (Segment segment)
+ {
+ return format_handler == null
+ ? String.Format ("{0}%", segment.Percent * 100.0)
+ : format_handler (segment);
+ }
+
+#endregion
+
+ }
+
+#region Test Module
+
+ [TestModule ("Segmented Bar")]
+ internal class SegmentedBarTestModule : Window
+ {
+ private SegmentedBar bar;
+ private VBox box;
+ public SegmentedBarTestModule () : base ("Segmented Bar")
+ {
+ BorderWidth = 10;
+ AppPaintable = true;
+
+ box = new VBox ();
+ box.Spacing = 10;
+ Add (box);
+
+ int space = 55;
+ bar = new SegmentedBar ();
+ bar.HorizontalPadding = bar.BarHeight / 2;
+ bar.AddSegmentRgb ("Audio", 0.00187992456702332, 0x3465a4);
+ bar.AddSegmentRgb ("Other", 0.0788718162651326, 0xf57900);
+ bar.AddSegmentRgb ("Video", 0.0516869922033282, 0x73d216);
+ bar.AddSegment ("Free Space", 0.867561266964516, bar.RemainderColor, false);
+
+ bar.ValueFormatter = delegate (SegmentedBar.Segment segment) {
+ return String.Format ("{0} GB", space * segment.Percent);
+ };
+
+ HBox controls = new HBox ();
+ controls.Spacing = 5;
+
+ Label label = new Label ("Height:");
+ controls.PackStart (label, false, false, 0);
+
+ SpinButton height = new SpinButton (new Adjustment (bar.BarHeight, 5, 100, 1, 1, 1), 1, 0);
+ height.Activated += delegate { bar.BarHeight = height.ValueAsInt; };
+ height.Changed += delegate { bar.BarHeight = height.ValueAsInt; bar.HorizontalPadding = bar.BarHeight / 2; };
+ controls.PackStart (height, false, false, 0);
+
+ CheckButton reflect = new CheckButton ("Reflection");
+ reflect.Active = bar.ShowReflection;
+ reflect.Toggled += delegate { bar.ShowReflection = reflect.Active; };
+ controls.PackStart (reflect, false, false, 0);
+
+ CheckButton labels = new CheckButton ("Labels");
+ labels.Active = bar.ShowLabels;
+ labels.Toggled += delegate { bar.ShowLabels = labels.Active; };
+ controls.PackStart (labels, false, false, 0);
+
+ box.PackStart (controls, false, false, 0);
+ box.PackStart (new HSeparator (), false, false, 0);
+ box.PackStart (bar, false, false, 0);
+ box.ShowAll ();
+
+ SetSizeRequest (350, -1);
+
+ Gdk.Geometry limits = new Gdk.Geometry ();
+ limits.MinWidth = SizeRequest ().Width;
+ limits.MaxWidth = Gdk.Screen.Default.Width;
+ limits.MinHeight = -1;
+ limits.MaxHeight = -1;
+ SetGeometryHints (this, limits, Gdk.WindowHints.MaxSize | Gdk.WindowHints.MinSize);
+ }
+ }
+
+#endregion
+
+}
diff --git a/lib/Hyena/src/Hyena.Gui/Hyena.Widgets/SimpleTable.cs b/lib/Hyena/src/Hyena.Gui/Hyena.Widgets/SimpleTable.cs
new file mode 100644
index 0000000..15417c7
--- /dev/null
+++ b/lib/Hyena/src/Hyena.Gui/Hyena.Widgets/SimpleTable.cs
@@ -0,0 +1,103 @@
+//
+// SimpleTable.cs
+//
+// Author:
+// Gabriel Burt <gburt at novell.com>
+//
+// Copyright (C) 2009 Novell, Inc.
+//
+// Permission is hereby granted, free of charge, to any person obtaining
+// a copy of this software and associated documentation files (the
+// "Software"), to deal in the Software without restriction, including
+// without limitation the rights to use, copy, modify, merge, publish,
+// distribute, sublicense, and/or sell copies of the Software, and to
+// permit persons to whom the Software is furnished to do so, subject to
+// the following conditions:
+//
+// The above copyright notice and this permission notice shall be
+// included in all copies or substantial portions of the Software.
+//
+// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
+// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
+// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
+// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+//
+
+using System;
+using System.Collections.Generic;
+using Gtk;
+
+namespace Hyena.Widgets
+{
+ public class SimpleTable<T> : Table
+ {
+ private bool added_any;
+
+ private List<T> items = new List<T> ();
+ private Dictionary<T, Widget []> item_widgets = new Dictionary<T, Widget []> ();
+
+ public SimpleTable () : base (1, 2, false)
+ {
+ ColumnSpacing = 5;
+ RowSpacing = 5;
+ }
+
+ public void AddRow (T item, params Widget [] cols)
+ {
+ InsertRow (item, (uint)items.Count, cols);
+ }
+
+ public void InsertRow (T item, uint row, params Widget [] cols)
+ {
+ if (!added_any) {
+ added_any = true;
+ } else if (NColumns != cols.Length) {
+ throw new ArgumentException ("cols", String.Format ("Expected {0} column widgets, same as previous calls to Add", NColumns));
+ }
+
+ Resize ((uint) items.Count + 1, (uint) cols.Length);
+
+ for (int y = items.Count - 1; y >= row; y--) {
+ for (uint x = 0; x < NColumns; x++) {
+ var widget = item_widgets[items[y]][x];
+ Remove (widget);
+ Attach (widget, x, x + 1, (uint) y + 1, (uint) y + 2);
+ }
+ }
+
+ items.Insert ((int)row, item);
+ item_widgets[item] = cols;
+
+ for (uint x = 0; x < NColumns; x++) {
+ Attach (cols[x], x, x + 1, row, row + 1);
+ }
+ }
+
+ public void RemoveRow (T item)
+ {
+ FreezeChildNotify ();
+
+ foreach (var widget in item_widgets[item]) {
+ Remove (widget);
+ }
+
+ int index = items.IndexOf (item);
+ for (int y = index + 1; y < items.Count; y++) {
+ for (uint x = 0; x < NColumns; x++) {
+ var widget = item_widgets[items[y]][x];
+ Remove (widget);
+ Attach (widget, x, x + 1, (uint) y - 1, (uint) y);
+ }
+ }
+
+ Resize ((uint) Math.Max (1, items.Count - 1), NColumns);
+
+ ThawChildNotify ();
+ items.Remove (item);
+ item_widgets.Remove (item);
+ }
+ }
+}
diff --git a/lib/Hyena/src/Hyena.Gui/Hyena.Widgets/SmoothScrolledWindow.cs b/lib/Hyena/src/Hyena.Gui/Hyena.Widgets/SmoothScrolledWindow.cs
new file mode 100644
index 0000000..9b0ed79
--- /dev/null
+++ b/lib/Hyena/src/Hyena.Gui/Hyena.Widgets/SmoothScrolledWindow.cs
@@ -0,0 +1,143 @@
+// SmoothScrolledWindow.cs
+//
+// Copyright (c) 2008 Scott Peterson <lunchtimemama at gmail.com>
+//
+// Permission is hereby granted, free of charge, to any person obtaining a copy
+// of this software and associated documentation files (the "Software"), to deal
+// in the Software without restriction, including without limitation the rights
+// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+// copies of the Software, and to permit persons to whom the Software is
+// furnished to do so, subject to the following conditions:
+//
+// The above copyright notice and this permission notice shall be included in
+// all copies or substantial portions of the Software.
+//
+// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+// THE SOFTWARE.
+//
+
+using System;
+using Gdk;
+using Gtk;
+
+using Hyena.Gui.Theatrics;
+
+namespace Hyena.Widgets
+{
+ public class SmoothScrolledWindow : Gtk.ScrolledWindow
+ {
+ private bool ignore_value_changed;
+ private uint timeout;
+ private double value;
+ private double target_value;
+ private double velocity = 0;
+
+ private double Accelerate (double velocity)
+ {
+ return AccelerateCore (velocity);
+ }
+
+ private double Decelerate (double velocity)
+ {
+ return Math.Max (DecelerateCore (velocity), 0);
+ }
+
+ protected virtual double AccelerateCore (double velocity)
+ {
+ return velocity + 8;
+ }
+
+ protected virtual double DecelerateCore (double velocity)
+ {
+ return velocity - Math.Max (3, 0.2 * velocity);
+ }
+
+ private double TargetValue {
+ get { return target_value; }
+ set {
+ if (value == target_value) {
+ return;
+ }
+
+ target_value = value;
+ if (timeout == 0) {
+ timeout = GLib.Timeout.Add (20, OnTimeout);
+ }
+ }
+ }
+
+ // Smoothly get us to the target value
+ private bool OnTimeout ()
+ {
+ double delta = target_value - value;
+ if (delta == 0) {
+ velocity = 0;
+ timeout = 0;
+ return false;
+ }
+
+ int sign = Math.Sign (delta);
+ delta = Math.Abs (delta);
+
+ double hypothetical = delta;
+ double v = Accelerate (velocity);
+ while (v > 0 && hypothetical > 0) {
+ hypothetical -= v;
+ v = Decelerate (v);
+ }
+
+ velocity = hypothetical <= 0 ? Decelerate (velocity) : Accelerate (velocity);
+
+ // Minimum speed: 2 px / 20 ms = 100px / second
+ value = Math.Round (value + Math.Max (velocity, 2) * sign);
+
+ // Don't go past the target value
+ value = (sign == 1) ? Math.Min (value, target_value) : Math.Max (value, target_value);
+
+ ignore_value_changed = true;
+ Vadjustment.Value = Math.Round (value);
+ ignore_value_changed = false;
+
+ return true;
+ }
+
+ protected override bool OnScrollEvent (Gdk.EventScroll evnt)
+ {
+ switch (evnt.Direction) {
+ case ScrollDirection.Up:
+ TargetValue = Math.Max (TargetValue - Vadjustment.StepIncrement, 0);
+ break;
+ case ScrollDirection.Down:
+ TargetValue = Math.Min (TargetValue + Vadjustment.StepIncrement, Vadjustment.Upper - Vadjustment.PageSize);
+ break;
+ default:
+ return base.OnScrollEvent (evnt);
+ }
+ return true;
+ }
+
+ protected override void OnRealized ()
+ {
+ base.OnRealized ();
+ Vadjustment.ValueChanged += OnValueChanged;
+ }
+
+ protected override void OnUnrealized ()
+ {
+ Vadjustment.ValueChanged -= OnValueChanged;
+ base.OnUnrealized ();
+ }
+
+ private void OnValueChanged (object o, EventArgs args)
+ {
+ if (!ignore_value_changed) {
+ value = target_value = Vadjustment.Value;
+ }
+ }
+ }
+}
diff --git a/lib/Hyena/src/Hyena.Gui/Hyena.Widgets/TextViewEditable.cs b/lib/Hyena/src/Hyena.Gui/Hyena.Widgets/TextViewEditable.cs
new file mode 100644
index 0000000..5b25c80
--- /dev/null
+++ b/lib/Hyena/src/Hyena.Gui/Hyena.Widgets/TextViewEditable.cs
@@ -0,0 +1,159 @@
+//
+// TextViewEditable.cs
+//
+// Author:
+// Aaron Bockover <abockover at novell.com>
+//
+// Copyright (C) 2008 Novell, Inc.
+//
+// Permission is hereby granted, free of charge, to any person obtaining
+// a copy of this software and associated documentation files (the
+// "Software"), to deal in the Software without restriction, including
+// without limitation the rights to use, copy, modify, merge, publish,
+// distribute, sublicense, and/or sell copies of the Software, and to
+// permit persons to whom the Software is furnished to do so, subject to
+// the following conditions:
+//
+// The above copyright notice and this permission notice shall be
+// included in all copies or substantial portions of the Software.
+//
+// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
+// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
+// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
+// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+//
+
+using System;
+using Gtk;
+
+namespace Hyena.Widgets
+{
+ public class TextViewEditable : TextView, Editable
+ {
+ public TextViewEditable ()
+ {
+ Buffer.Changed += OnBufferChanged;
+ Buffer.InsertText += OnBufferInsertText;
+ Buffer.DeleteRange += OnBufferDeleteRange;
+ }
+
+ public event EventHandler Changed;
+ public event TextDeletedHandler TextDeleted;
+ public event TextInsertedHandler TextInserted;
+
+ private void OnBufferChanged (object o, EventArgs args)
+ {
+ EventHandler handler = Changed;
+ if (handler != null) {
+ handler (this, EventArgs.Empty);
+ }
+ }
+
+ private void OnBufferInsertText (object o, InsertTextArgs args)
+ {
+ TextInsertedHandler handler = TextInserted;
+ if (handler != null) {
+ TextInsertedArgs raise_args = new TextInsertedArgs ();
+ raise_args.Args = new object [] {
+ args.Text,
+ args.Length,
+ args.Pos.Offset
+ };
+ handler (this, raise_args);
+ }
+ }
+
+ private void OnBufferDeleteRange (object o, DeleteRangeArgs args)
+ {
+ TextDeletedHandler handler = TextDeleted;
+ if (handler != null) {
+ TextDeletedArgs raise_args = new TextDeletedArgs ();
+ raise_args.Args = new object [] {
+ args.Start.Offset,
+ args.End.Offset
+ };
+ handler (this, raise_args);
+ }
+ }
+
+ void Editable.PasteClipboard ()
+ {
+ }
+
+ void Editable.CutClipboard ()
+ {
+ }
+
+ void Editable.CopyClipboard ()
+ {
+ }
+
+ public void DeleteText (int start_pos, int end_pos)
+ {
+ start_pos--;
+ end_pos--;
+
+ TextIter start_iter = Buffer.GetIterAtOffset (start_pos);
+ TextIter end_iter = Buffer.GetIterAtOffset (start_pos + (end_pos - start_pos));
+ Buffer.Delete (ref start_iter, ref end_iter);
+ }
+
+ public void InsertText (string new_text, ref int position)
+ {
+ TextIter iter = Buffer.GetIterAtOffset (position - 1);
+ Buffer.Insert (ref iter, new_text);
+ position = iter.Offset + 1;
+ }
+
+ public string GetChars (int start_pos, int end_pos)
+ {
+ start_pos--;
+ end_pos--;
+
+ TextIter start_iter = Buffer.GetIterAtOffset (start_pos);
+ TextIter end_iter = Buffer.GetIterAtOffset (start_pos + (end_pos - start_pos));
+ return Buffer.GetText (start_iter, end_iter, true);
+ }
+
+ public void SelectRegion (int start, int end)
+ {
+ Buffer.SelectRange (Buffer.GetIterAtOffset (start - 1), Buffer.GetIterAtOffset (end - 1));
+ }
+
+ public bool GetSelectionBounds (out int start, out int end)
+ {
+ TextIter start_iter, end_iter;
+ start = 0;
+ end = 0;
+
+ if (Buffer.GetSelectionBounds (out start_iter, out end_iter)) {
+ start = start_iter.Offset + 1;
+ end = end_iter.Offset + 1;
+ return true;
+ }
+
+ return true;
+ }
+
+ public void DeleteSelection ()
+ {
+ TextIter start, end;
+ if (Buffer.GetSelectionBounds (out start, out end)) {
+ Buffer.Delete (ref start, ref end);
+ }
+ }
+
+ public int Position {
+ get { return Buffer.CursorPosition; }
+ set { Buffer.PlaceCursor (Buffer.GetIterAtOffset (Position)); }
+ }
+
+ public bool IsEditable {
+ get { return Editable; }
+ set { Editable = value; }
+ }
+ }
+}
diff --git a/lib/Hyena/src/Hyena.Gui/Hyena.Widgets/WrapLabel.cs b/lib/Hyena/src/Hyena.Gui/Hyena.Widgets/WrapLabel.cs
new file mode 100644
index 0000000..52d3224
--- /dev/null
+++ b/lib/Hyena/src/Hyena.Gui/Hyena.Widgets/WrapLabel.cs
@@ -0,0 +1,160 @@
+//
+// WrapLabel.cs
+//
+// Author:
+// Aaron Bockover <abockover at novell.com>
+//
+// Copyright (C) 2008 Novell, Inc.
+//
+// Permission is hereby granted, free of charge, to any person obtaining
+// a copy of this software and associated documentation files (the
+// "Software"), to deal in the Software without restriction, including
+// without limitation the rights to use, copy, modify, merge, publish,
+// distribute, sublicense, and/or sell copies of the Software, and to
+// permit persons to whom the Software is furnished to do so, subject to
+// the following conditions:
+//
+// The above copyright notice and this permission notice shall be
+// included in all copies or substantial portions of the Software.
+//
+// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
+// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
+// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
+// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+//
+
+using System;
+using Gtk;
+
+namespace Hyena.Widgets
+{
+ public class WrapLabel : Widget
+ {
+ private string text;
+ private bool use_markup = false;
+ private bool wrap = true;
+ private Pango.Layout layout;
+
+ public WrapLabel ()
+ {
+ WidgetFlags |= WidgetFlags.NoWindow;
+ }
+
+ private void CreateLayout ()
+ {
+ if (layout != null) {
+ layout.Dispose ();
+ }
+
+ layout = new Pango.Layout (PangoContext);
+ layout.Wrap = Pango.WrapMode.Word;
+ }
+
+ private void UpdateLayout ()
+ {
+ if (layout == null) {
+ CreateLayout ();
+ }
+
+ layout.Ellipsize = wrap ? Pango.EllipsizeMode.None : Pango.EllipsizeMode.End;
+
+ if (text == null) {
+ text = "";
+ }
+
+ if (use_markup) {
+ layout.SetMarkup (text);
+ } else {
+ layout.SetText (text);
+ }
+
+ QueueResize ();
+ }
+
+ protected override void OnStyleSet (Style previous_style)
+ {
+ CreateLayout ();
+ UpdateLayout ();
+ base.OnStyleSet (previous_style);
+ }
+
+ protected override void OnRealized ()
+ {
+ GdkWindow = Parent.GdkWindow;
+ base.OnRealized ();
+ }
+
+ protected override void OnSizeAllocated (Gdk.Rectangle allocation)
+ {
+ int lw, lh;
+
+ layout.Width = (int)(allocation.Width * Pango.Scale.PangoScale);
+ layout.GetPixelSize (out lw, out lh);
+
+ TooltipText = layout.IsEllipsized ? text : null;
+ HeightRequest = lh;
+
+ base.OnSizeAllocated (allocation);
+ }
+
+ protected override bool OnExposeEvent (Gdk.EventExpose evnt)
+ {
+ if (evnt.Window == GdkWindow) {
+ // Center the text vertically
+ int lw, lh;
+ layout.GetPixelSize (out lw, out lh);
+ int y = Allocation.Y + (Allocation.Height - lh) / 2;
+
+ Gtk.Style.PaintLayout (Style, GdkWindow, State, false,
+ evnt.Area, this, null, Allocation.X, y, layout);
+ }
+
+ return true;
+ }
+
+ public void MarkupFormat (string format, params object [] args)
+ {
+ if (args == null || args.Length == 0) {
+ Markup = format;
+ return;
+ }
+
+ for (int i = 0; i < args.Length; i++) {
+ if (args[i] is string) {
+ args[i] = GLib.Markup.EscapeText ((string)args[i]);
+ }
+ }
+
+ Markup = String.Format (format, args);
+ }
+
+ public bool Wrap {
+ get { return wrap; }
+ set {
+ wrap = value;
+ UpdateLayout ();
+ }
+ }
+
+ public string Markup {
+ get { return text; }
+ set {
+ use_markup = true;
+ text = value;
+ UpdateLayout ();
+ }
+ }
+
+ public string Text {
+ get { return text; }
+ set {
+ use_markup = false;
+ text = value;
+ UpdateLayout ();
+ }
+ }
+ }
+}
diff --git a/lib/Hyena/src/Hyena.Gui/Makefile.am b/lib/Hyena/src/Hyena.Gui/Makefile.am
new file mode 100644
index 0000000..c06d07a
--- /dev/null
+++ b/lib/Hyena/src/Hyena.Gui/Makefile.am
@@ -0,0 +1,123 @@
+ASSEMBLY = Hyena.Gui
+ASSEMBLY_BUILD_FLAGS = -unsafe
+TARGET = library
+LINK = -r:ICSharpCode.SharpZipLib -r:Mono.Posix -r:System -r:System.Core -r:Mono.Cairo \
+ $(GTKSHARP_LIBS) $(GLIBSHARP_LIBS) \
+ -r:$(DIR_BIN)/Hyena.dll
+SOURCES = \
+ Hyena.Data.Gui/Accessibility/ColumnCellAccessible.cs \
+ Hyena.Data.Gui/Accessibility/ColumnCellTextAccessible.cs \
+ Hyena.Data.Gui/Accessibility/ColumnHeaderCellTextAccessible.cs \
+ Hyena.Data.Gui/Accessibility/ICellAccessibleParent.cs \
+ Hyena.Data.Gui/Accessibility/ListViewAccessible.cs \
+ Hyena.Data.Gui/Accessibility/ListViewAccessible_Selection.cs \
+ Hyena.Data.Gui/Accessibility/ListViewAccessible_Table.cs \
+ Hyena.Data.Gui/CellContext.cs \
+ Hyena.Data.Gui/Column.cs \
+ Hyena.Data.Gui/ColumnCell.cs \
+ Hyena.Data.Gui/ColumnCellCheckBox.cs \
+ Hyena.Data.Gui/ColumnCellRating.cs \
+ Hyena.Data.Gui/ColumnCellText.cs \
+ Hyena.Data.Gui/ColumnController.cs \
+ Hyena.Data.Gui/ColumnHeaderCellText.cs \
+ Hyena.Data.Gui/DataViewChild.cs \
+ Hyena.Data.Gui/DataViewLayout.cs \
+ Hyena.Data.Gui/DataViewLayoutGrid.cs \
+ Hyena.Data.Gui/IHeaderCell.cs \
+ Hyena.Data.Gui/IInteractiveCell.cs \
+ Hyena.Data.Gui/IListView.cs \
+ Hyena.Data.Gui/ISizeRequestCell.cs \
+ Hyena.Data.Gui/ITextCell.cs \
+ Hyena.Data.Gui/ITooltipCell.cs \
+ Hyena.Data.Gui/ListView/ListView.cs \
+ Hyena.Data.Gui/ListView/ListView_Accessible.cs \
+ Hyena.Data.Gui/ListView/ListView_DragAndDrop.cs \
+ Hyena.Data.Gui/ListView/ListView_Header.cs \
+ Hyena.Data.Gui/ListView/ListView_Interaction.cs \
+ Hyena.Data.Gui/ListView/ListView_Model.cs \
+ Hyena.Data.Gui/ListView/ListView_Rendering.cs \
+ Hyena.Data.Gui/ListView/ListView_Windowing.cs \
+ Hyena.Data.Gui/ListView/ListViewBase.cs \
+ Hyena.Data.Gui/ListViewTestModule.cs \
+ Hyena.Data.Gui/ObjectListView.cs \
+ Hyena.Data.Gui/RowActivatedHandler.cs \
+ Hyena.Data.Gui/SortableColumn.cs \
+ Hyena.Gui.Canvas/Point.cs \
+ Hyena.Gui.Canvas/Rect.cs \
+ Hyena.Gui.Canvas/Size.cs \
+ Hyena.Gui.Canvas/Thickness.cs \
+ Hyena.Gui.Dialogs/ExceptionDialog.cs \
+ Hyena.Gui.Dialogs/VersionInformationDialog.cs \
+ Hyena.Gui.Theatrics/Actor.cs \
+ Hyena.Gui.Theatrics/Choreographer.cs \
+ Hyena.Gui.Theatrics/Pulsator.cs \
+ Hyena.Gui.Theatrics/SingleActorStage.cs \
+ Hyena.Gui.Theatrics/Stage.cs \
+ Hyena.Gui.Theatrics/Tests/ChoreographerTests.cs \
+ Hyena.Gui.Theming/GtkColors.cs \
+ Hyena.Gui.Theming/GtkTheme.cs \
+ Hyena.Gui.Theming/Theme.cs \
+ Hyena.Gui.Theming/ThemeContext.cs \
+ Hyena.Gui.Theming/ThemeEngine.cs \
+ Hyena.Gui.Theming/ThemeTestModule.cs \
+ Hyena.Gui/ActionManager.cs \
+ Hyena.Gui/BaseWidgetAccessible.cs \
+ Hyena.Gui/CairoDamageDebugger.cs \
+ Hyena.Gui/CairoExtensions.cs \
+ Hyena.Gui/CleanRoomStartup.cs \
+ Hyena.Gui/CompositeUtils.cs \
+ Hyena.Gui/Contrast.cs \
+ Hyena.Gui/DragDropList.cs \
+ Hyena.Gui/EditableEraseAction.cs \
+ Hyena.Gui/EditableInsertAction.cs \
+ Hyena.Gui/EditableUndoAdapter.cs \
+ Hyena.Gui/GtkUtilities.cs \
+ Hyena.Gui/GtkWorkarounds.cs \
+ Hyena.Gui/HyenaActionGroup.cs \
+ Hyena.Gui/PangoCairoHelper.cs \
+ Hyena.Gui/PangoExtensions.cs \
+ Hyena.Gui/PixbufImageSurface.cs \
+ Hyena.Gui/RatingRenderer.cs \
+ Hyena.Gui/ShadingTestWindow.cs \
+ Hyena.Gui/TestModuleAttribute.cs \
+ Hyena.Gui/TestModuleRunner.cs \
+ Hyena.Gui/TooltipSetter.cs \
+ Hyena.Query.Gui/DateQueryValueEntry.cs \
+ Hyena.Query.Gui/FileSizeQueryValueEntry.cs \
+ Hyena.Query.Gui/IntegerQueryValueEntry.cs \
+ Hyena.Query.Gui/NullQueryValueEntry.cs \
+ Hyena.Query.Gui/QueryBox.cs \
+ Hyena.Query.Gui/QueryDebugger.cs \
+ Hyena.Query.Gui/QueryLimitBox.cs \
+ Hyena.Query.Gui/QueryTermBox.cs \
+ Hyena.Query.Gui/QueryTermsBox.cs \
+ Hyena.Query.Gui/QueryValueEntry.cs \
+ Hyena.Query.Gui/RelativeTimeSpanQueryValueEntry.cs \
+ Hyena.Query.Gui/StringQueryValueEntry.cs \
+ Hyena.Query.Gui/TimeSpanQueryValueEntry.cs \
+ Hyena.Widgets/AnimatedBox.cs \
+ Hyena.Widgets/AnimatedHBox.cs \
+ Hyena.Widgets/AnimatedImage.cs \
+ Hyena.Widgets/AnimatedVBox.cs \
+ Hyena.Widgets/AnimatedWidget.cs \
+ Hyena.Widgets/ComplexMenuItem.cs \
+ Hyena.Widgets/EntryPopup.cs \
+ Hyena.Widgets/GenericToolItem.cs \
+ Hyena.Widgets/HigMessageDialog.cs \
+ Hyena.Widgets/ImageButton.cs \
+ Hyena.Widgets/MenuButton.cs \
+ Hyena.Widgets/MessageBar.cs \
+ Hyena.Widgets/PulsingButton.cs \
+ Hyena.Widgets/RatingEntry.cs \
+ Hyena.Widgets/RatingMenuItem.cs \
+ Hyena.Widgets/RoundedFrame.cs \
+ Hyena.Widgets/ScrolledWindow.cs \
+ Hyena.Widgets/SegmentedBar.cs \
+ Hyena.Widgets/SimpleTable.cs \
+ Hyena.Widgets/SmoothScrolledWindow.cs \
+ Hyena.Widgets/TextViewEditable.cs \
+ Hyena.Widgets/WrapLabel.cs
+
+include $(top_srcdir)/build/build.mk
+EXTRA_DIST += hyena.gui.pc.in Hyena.Gui.dll.config
+module_SCRIPTS += Hyena.Gui.dll.config
diff --git a/lib/Hyena/src/Hyena.Gui/Makefile.in b/lib/Hyena/src/Hyena.Gui/Makefile.in
new file mode 100644
index 0000000..5447d42
--- /dev/null
+++ b/lib/Hyena/src/Hyena.Gui/Makefile.in
@@ -0,0 +1,918 @@
+# Makefile.in generated by automake 1.11.1 from Makefile.am.
+# @configure_input@
+
+# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
+# 2003, 2004, 2005, 2006, 2007, 2008, 2009 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.
+
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
+# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
+# PARTICULAR PURPOSE.
+
+ at SET_MAKE@
+
+VPATH = @srcdir@
+pkgdatadir = $(datadir)/@PACKAGE@
+pkgincludedir = $(includedir)/@PACKAGE@
+pkglibdir = $(libdir)/@PACKAGE@
+pkglibexecdir = $(libexecdir)/@PACKAGE@
+am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
+install_sh_DATA = $(install_sh) -c -m 644
+install_sh_PROGRAM = $(install_sh) -c
+install_sh_SCRIPT = $(install_sh) -c
+INSTALL_HEADER = $(INSTALL_DATA)
+transform = $(program_transform_name)
+NORMAL_INSTALL = :
+PRE_INSTALL = :
+POST_INSTALL = :
+NORMAL_UNINSTALL = :
+PRE_UNINSTALL = :
+POST_UNINSTALL = :
+build_triplet = @build@
+host_triplet = @host@
+DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in \
+ $(top_srcdir)/build/build.environment.mk \
+ $(top_srcdir)/build/build.mk \
+ $(top_srcdir)/build/build.rules.mk
+ at ENABLE_TESTS_TRUE@am__append_1 = " $(NUNIT_LIBS)"
+subdir = lib/Hyena/src/Hyena.Gui
+ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
+am__aclocal_m4_deps = $(top_srcdir)/build/m4/shave/shave.m4 \
+ $(top_srcdir)/build/m4/shamrock/expansions.m4 \
+ $(top_srcdir)/build/m4/shamrock/gnome-doc.m4 \
+ $(top_srcdir)/build/m4/shamrock/mono.m4 \
+ $(top_srcdir)/build/m4/shamrock/nunit.m4 \
+ $(top_srcdir)/build/m4/shamrock/programs.m4 \
+ $(top_srcdir)/build/m4/f-spot/flickrnet.m4 \
+ $(top_srcdir)/build/m4/f-spot/gnome-keyring-sharp.m4 \
+ $(top_srcdir)/build/m4/f-spot/gtk-sharp.m4 \
+ $(top_srcdir)/build/m4/f-spot/mono-addins.m4 \
+ $(top_srcdir)/acinclude.m4 $(top_srcdir)/configure.ac
+am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
+ $(ACLOCAL_M4)
+mkinstalldirs = $(install_sh) -d
+CONFIG_HEADER = $(top_builddir)/config.h
+CONFIG_CLEAN_FILES =
+CONFIG_CLEAN_VPATH_FILES =
+am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`;
+am__vpath_adj = case $$p in \
+ $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \
+ *) f=$$p;; \
+ esac;
+am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`;
+am__install_max = 40
+am__nobase_strip_setup = \
+ srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'`
+am__nobase_strip = \
+ for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||"
+am__nobase_list = $(am__nobase_strip_setup); \
+ for p in $$list; do echo "$$p $$p"; done | \
+ sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \
+ $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \
+ if (++n[$$2] == $(am__install_max)) \
+ { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \
+ END { for (dir in files) print dir, files[dir] }'
+am__base_list = \
+ sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \
+ sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g'
+am__installdirs = "$(DESTDIR)$(moduledir)"
+SCRIPTS = $(module_SCRIPTS)
+DIST_SOURCES =
+DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
+ACLOCAL = @ACLOCAL@
+ACLOCAL_AMFLAGS = @ACLOCAL_AMFLAGS@
+ALL_LINGUAS = @ALL_LINGUAS@
+AMTAR = @AMTAR@
+AM_MAKEFLAGS = @AM_MAKEFLAGS@
+API_VERSION = @API_VERSION@
+AR = @AR@
+ASM_VERSION = @ASM_VERSION@
+AUTOCONF = @AUTOCONF@
+AUTOHEADER = @AUTOHEADER@
+AUTOMAKE = @AUTOMAKE@
+AWK = @AWK@
+CATALOGS = @CATALOGS@
+CATOBJEXT = @CATOBJEXT@
+CC = @CC@
+CCDEPMODE = @CCDEPMODE@
+CFLAGS = @CFLAGS@
+CPP = @CPP@
+CPPFLAGS = @CPPFLAGS@
+CSC_DEFINES = @CSC_DEFINES@
+CXX = @CXX@
+CXXCPP = @CXXCPP@
+CXXDEPMODE = @CXXDEPMODE@
+CXXFLAGS = @CXXFLAGS@
+CYGPATH_W = @CYGPATH_W@
+DATADIRNAME = @DATADIRNAME@
+DEFS = @DEFS@
+DEPDIR = @DEPDIR@
+DISPLAY_VERSION = @DISPLAY_VERSION@
+DISTCHECK_CONFIGURE_FLAGS = @DISTCHECK_CONFIGURE_FLAGS@
+DOC_USER_FORMATS = @DOC_USER_FORMATS@
+DSYMUTIL = @DSYMUTIL@
+DUMPBIN = @DUMPBIN@
+ECHO_C = @ECHO_C@
+ECHO_N = @ECHO_N@
+ECHO_T = @ECHO_T@
+EGREP = @EGREP@
+EXEEXT = @EXEEXT@
+EXIF_CFLAGS = @EXIF_CFLAGS@
+EXIF_LIBS = @EXIF_LIBS@
+EXIF_SOVERSION = @EXIF_SOVERSION@
+F77 = @F77@
+FC = @FC@
+FGREP = @FGREP@
+FLICKRNET_CFLAGS = @FLICKRNET_CFLAGS@
+FLICKRNET_LIBS = @FLICKRNET_LIBS@
+F_CFLAGS = @F_CFLAGS@
+F_LIBS = @F_LIBS@
+GAPI2CODEGEN = @GAPI2CODEGEN@
+GAPI2FIXUP = @GAPI2FIXUP@
+GAPI2PARSER = @GAPI2PARSER@
+GCONFTOOL = @GCONFTOOL@
+GCONF_SCHEMA_CONFIG_SOURCE = @GCONF_SCHEMA_CONFIG_SOURCE@
+GCONF_SCHEMA_FILE_DIR = @GCONF_SCHEMA_FILE_DIR@
+GCONF_SHARP_CFLAGS = @GCONF_SHARP_CFLAGS@
+GCONF_SHARP_LIBS = @GCONF_SHARP_LIBS@
+GETTEXT_PACKAGE = @GETTEXT_PACKAGE@
+GIO_CFLAGS = @GIO_CFLAGS@
+GIO_LIBS = @GIO_LIBS@
+GLIBSHARP_2_12_7_CFLAGS = @GLIBSHARP_2_12_7_CFLAGS@
+GLIBSHARP_2_12_7_LIBS = @GLIBSHARP_2_12_7_LIBS@
+GLIBSHARP_CFLAGS = @GLIBSHARP_CFLAGS@
+GLIBSHARP_LIBS = @GLIBSHARP_LIBS@
+GLIB_CFLAGS = @GLIB_CFLAGS@
+GLIB_GENMARSHAL = @GLIB_GENMARSHAL@
+GLIB_LIBS = @GLIB_LIBS@
+GLIB_MKENUMS = @GLIB_MKENUMS@
+GMOFILES = @GMOFILES@
+GMSGFMT = @GMSGFMT@
+GNOME_ICON_THEME_PREFIX = @GNOME_ICON_THEME_PREFIX@
+GNOME_SCREENSAVER_SAVERDIR = @GNOME_SCREENSAVER_SAVERDIR@
+GNOME_SCREENSAVER_THEMESDIR = @GNOME_SCREENSAVER_THEMESDIR@
+GNOME_SHARP_CFLAGS = @GNOME_SHARP_CFLAGS@
+GNOME_SHARP_LIBS = @GNOME_SHARP_LIBS@
+GOBJECT_QUERY = @GOBJECT_QUERY@
+GREP = @GREP@
+GTKSHARP_A11Y_CFLAGS = @GTKSHARP_A11Y_CFLAGS@
+GTKSHARP_A11Y_LIBS = @GTKSHARP_A11Y_LIBS@
+GTKSHARP_CFLAGS = @GTKSHARP_CFLAGS@
+GTKSHARP_LIBS = @GTKSHARP_LIBS@
+HELP_DIR = @HELP_DIR@
+ICONS_DIRECTORY = @ICONS_DIRECTORY@
+INSTALL = @INSTALL@
+INSTALL_DATA = @INSTALL_DATA@
+INSTALL_PROGRAM = @INSTALL_PROGRAM@
+INSTALL_SCRIPT = @INSTALL_SCRIPT@
+INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
+INSTOBJEXT = @INSTOBJEXT@
+INTLLIBS = @INTLLIBS@
+INTLTOOL_EXTRACT = @INTLTOOL_EXTRACT@
+INTLTOOL_MERGE = @INTLTOOL_MERGE@
+INTLTOOL_PERL = @INTLTOOL_PERL@
+INTLTOOL_UPDATE = @INTLTOOL_UPDATE@
+KEYRINGSHARP_CFLAGS = @KEYRINGSHARP_CFLAGS@
+KEYRINGSHARP_LIBS = @KEYRINGSHARP_LIBS@
+LCMS_CFLAGS = @LCMS_CFLAGS@
+LCMS_LIBS = @LCMS_LIBS@
+LD = @LD@
+LDFLAGS = @LDFLAGS@
+LIBEXIF_VERSION_CHECK_CFLAGS = @LIBEXIF_VERSION_CHECK_CFLAGS@
+LIBEXIF_VERSION_CHECK_LIBS = @LIBEXIF_VERSION_CHECK_LIBS@
+LIBJPEG = @LIBJPEG@
+LIBOBJS = @LIBOBJS@
+LIBS = @LIBS@
+LIBTOOL = @LIBTOOL@
+LIPO = @LIPO@
+LN_S = @LN_S@
+LTLIBOBJS = @LTLIBOBJS@
+MAINT = @MAINT@
+MAKEFLAGS = @MAKEFLAGS@
+MAKEINFO = @MAKEINFO@
+MCS = @MCS@
+MKDIR_P = @MKDIR_P@
+MKINSTALLDIRS = @MKINSTALLDIRS@
+MONO = @MONO@
+MONO_ADDINS_CFLAGS = @MONO_ADDINS_CFLAGS@
+MONO_ADDINS_GUI_CFLAGS = @MONO_ADDINS_GUI_CFLAGS@
+MONO_ADDINS_GUI_LIBS = @MONO_ADDINS_GUI_LIBS@
+MONO_ADDINS_LIBS = @MONO_ADDINS_LIBS@
+MONO_ADDINS_SETUP_CFLAGS = @MONO_ADDINS_SETUP_CFLAGS@
+MONO_ADDINS_SETUP_LIBS = @MONO_ADDINS_SETUP_LIBS@
+MONO_MODULE_CFLAGS = @MONO_MODULE_CFLAGS@
+MONO_MODULE_LIBS = @MONO_MODULE_LIBS@
+MSGFMT = @MSGFMT@
+MSGFMT_OPTS = @MSGFMT_OPTS@
+MSGMERGE = @MSGMERGE@
+NDESK_DBUS_CFLAGS = @NDESK_DBUS_CFLAGS@
+NDESK_DBUS_LIBS = @NDESK_DBUS_LIBS@
+NM = @NM@
+NMEDIT = @NMEDIT@
+NUNIT_CFLAGS = @NUNIT_CFLAGS@
+NUNIT_LIBS = @NUNIT_LIBS@
+OBJC = @OBJC@
+OBJDUMP = @OBJDUMP@
+OBJEXT = @OBJEXT@
+OMF_DIR = @OMF_DIR@
+OTOOL = @OTOOL@
+OTOOL64 = @OTOOL64@
+PACKAGE = @PACKAGE@
+PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
+PACKAGE_NAME = @PACKAGE_NAME@
+PACKAGE_STRING = @PACKAGE_STRING@
+PACKAGE_TARNAME = @PACKAGE_TARNAME@
+PACKAGE_URL = @PACKAGE_URL@
+PACKAGE_VERSION = @PACKAGE_VERSION@
+PATH_SEPARATOR = @PATH_SEPARATOR@
+PKG_CONFIG = @PKG_CONFIG@
+POFILES = @POFILES@
+POSUB = @POSUB@
+PO_IN_DATADIR_FALSE = @PO_IN_DATADIR_FALSE@
+PO_IN_DATADIR_TRUE = @PO_IN_DATADIR_TRUE@
+Q = @Q@
+RANLIB = @RANLIB@
+SED = @SED@
+SET_MAKE = @SET_MAKE@
+SHELL = @SHELL@
+STRIP = @STRIP@
+TURTLEDIR = @TURTLEDIR@
+UNIQUE_CFLAGS = @UNIQUE_CFLAGS@
+UNIQUE_LIBS = @UNIQUE_LIBS@
+USE_NLS = @USE_NLS@
+V = @V@
+VERSION = @VERSION@
+WARN_CFLAGS = @WARN_CFLAGS@
+XGETTEXT = @XGETTEXT@
+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_DUMPBIN = @ac_ct_DUMPBIN@
+am__include = @am__include@
+am__leading_dot = @am__leading_dot@
+am__quote = @am__quote@
+am__tar = @am__tar@
+am__untar = @am__untar@
+bindir = @bindir@
+build = @build@
+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@
+expanded_bindir = @expanded_bindir@
+expanded_datadir = @expanded_datadir@
+expanded_libdir = @expanded_libdir@
+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@
+lt_ECHO = @lt_ECHO@
+mandir = @mandir@
+mkdir_p = @mkdir_p@
+oldincludedir = @oldincludedir@
+pdfdir = @pdfdir@
+prefix = @prefix@
+program_transform_name = @program_transform_name@
+psdir = @psdir@
+sbindir = @sbindir@
+sharedstatedir = @sharedstatedir@
+shavedir = @shavedir@
+srcdir = @srcdir@
+sysconfdir = @sysconfdir@
+target_alias = @target_alias@
+top_build_prefix = @top_build_prefix@
+top_builddir = @top_builddir@
+top_srcdir = @top_srcdir@
+ASSEMBLY = Hyena.Gui
+ASSEMBLY_BUILD_FLAGS = -unsafe
+TARGET = library
+LINK = -r:ICSharpCode.SharpZipLib -r:Mono.Posix -r:System \
+ -r:System.Core -r:Mono.Cairo $(GTKSHARP_LIBS) \
+ $(GLIBSHARP_LIBS) -r:$(DIR_BIN)/Hyena.dll $(am__append_1)
+SOURCES = \
+ Hyena.Data.Gui/Accessibility/ColumnCellAccessible.cs \
+ Hyena.Data.Gui/Accessibility/ColumnCellTextAccessible.cs \
+ Hyena.Data.Gui/Accessibility/ColumnHeaderCellTextAccessible.cs \
+ Hyena.Data.Gui/Accessibility/ICellAccessibleParent.cs \
+ Hyena.Data.Gui/Accessibility/ListViewAccessible.cs \
+ Hyena.Data.Gui/Accessibility/ListViewAccessible_Selection.cs \
+ Hyena.Data.Gui/Accessibility/ListViewAccessible_Table.cs \
+ Hyena.Data.Gui/CellContext.cs \
+ Hyena.Data.Gui/Column.cs \
+ Hyena.Data.Gui/ColumnCell.cs \
+ Hyena.Data.Gui/ColumnCellCheckBox.cs \
+ Hyena.Data.Gui/ColumnCellRating.cs \
+ Hyena.Data.Gui/ColumnCellText.cs \
+ Hyena.Data.Gui/ColumnController.cs \
+ Hyena.Data.Gui/ColumnHeaderCellText.cs \
+ Hyena.Data.Gui/DataViewChild.cs \
+ Hyena.Data.Gui/DataViewLayout.cs \
+ Hyena.Data.Gui/DataViewLayoutGrid.cs \
+ Hyena.Data.Gui/IHeaderCell.cs \
+ Hyena.Data.Gui/IInteractiveCell.cs \
+ Hyena.Data.Gui/IListView.cs \
+ Hyena.Data.Gui/ISizeRequestCell.cs \
+ Hyena.Data.Gui/ITextCell.cs \
+ Hyena.Data.Gui/ITooltipCell.cs \
+ Hyena.Data.Gui/ListView/ListView.cs \
+ Hyena.Data.Gui/ListView/ListView_Accessible.cs \
+ Hyena.Data.Gui/ListView/ListView_DragAndDrop.cs \
+ Hyena.Data.Gui/ListView/ListView_Header.cs \
+ Hyena.Data.Gui/ListView/ListView_Interaction.cs \
+ Hyena.Data.Gui/ListView/ListView_Model.cs \
+ Hyena.Data.Gui/ListView/ListView_Rendering.cs \
+ Hyena.Data.Gui/ListView/ListView_Windowing.cs \
+ Hyena.Data.Gui/ListView/ListViewBase.cs \
+ Hyena.Data.Gui/ListViewTestModule.cs \
+ Hyena.Data.Gui/ObjectListView.cs \
+ Hyena.Data.Gui/RowActivatedHandler.cs \
+ Hyena.Data.Gui/SortableColumn.cs \
+ Hyena.Gui.Canvas/Point.cs \
+ Hyena.Gui.Canvas/Rect.cs \
+ Hyena.Gui.Canvas/Size.cs \
+ Hyena.Gui.Canvas/Thickness.cs \
+ Hyena.Gui.Dialogs/ExceptionDialog.cs \
+ Hyena.Gui.Dialogs/VersionInformationDialog.cs \
+ Hyena.Gui.Theatrics/Actor.cs \
+ Hyena.Gui.Theatrics/Choreographer.cs \
+ Hyena.Gui.Theatrics/Pulsator.cs \
+ Hyena.Gui.Theatrics/SingleActorStage.cs \
+ Hyena.Gui.Theatrics/Stage.cs \
+ Hyena.Gui.Theatrics/Tests/ChoreographerTests.cs \
+ Hyena.Gui.Theming/GtkColors.cs \
+ Hyena.Gui.Theming/GtkTheme.cs \
+ Hyena.Gui.Theming/Theme.cs \
+ Hyena.Gui.Theming/ThemeContext.cs \
+ Hyena.Gui.Theming/ThemeEngine.cs \
+ Hyena.Gui.Theming/ThemeTestModule.cs \
+ Hyena.Gui/ActionManager.cs \
+ Hyena.Gui/BaseWidgetAccessible.cs \
+ Hyena.Gui/CairoDamageDebugger.cs \
+ Hyena.Gui/CairoExtensions.cs \
+ Hyena.Gui/CleanRoomStartup.cs \
+ Hyena.Gui/CompositeUtils.cs \
+ Hyena.Gui/Contrast.cs \
+ Hyena.Gui/DragDropList.cs \
+ Hyena.Gui/EditableEraseAction.cs \
+ Hyena.Gui/EditableInsertAction.cs \
+ Hyena.Gui/EditableUndoAdapter.cs \
+ Hyena.Gui/GtkUtilities.cs \
+ Hyena.Gui/GtkWorkarounds.cs \
+ Hyena.Gui/HyenaActionGroup.cs \
+ Hyena.Gui/PangoCairoHelper.cs \
+ Hyena.Gui/PangoExtensions.cs \
+ Hyena.Gui/PixbufImageSurface.cs \
+ Hyena.Gui/RatingRenderer.cs \
+ Hyena.Gui/ShadingTestWindow.cs \
+ Hyena.Gui/TestModuleAttribute.cs \
+ Hyena.Gui/TestModuleRunner.cs \
+ Hyena.Gui/TooltipSetter.cs \
+ Hyena.Query.Gui/DateQueryValueEntry.cs \
+ Hyena.Query.Gui/FileSizeQueryValueEntry.cs \
+ Hyena.Query.Gui/IntegerQueryValueEntry.cs \
+ Hyena.Query.Gui/NullQueryValueEntry.cs \
+ Hyena.Query.Gui/QueryBox.cs \
+ Hyena.Query.Gui/QueryDebugger.cs \
+ Hyena.Query.Gui/QueryLimitBox.cs \
+ Hyena.Query.Gui/QueryTermBox.cs \
+ Hyena.Query.Gui/QueryTermsBox.cs \
+ Hyena.Query.Gui/QueryValueEntry.cs \
+ Hyena.Query.Gui/RelativeTimeSpanQueryValueEntry.cs \
+ Hyena.Query.Gui/StringQueryValueEntry.cs \
+ Hyena.Query.Gui/TimeSpanQueryValueEntry.cs \
+ Hyena.Widgets/AnimatedBox.cs \
+ Hyena.Widgets/AnimatedHBox.cs \
+ Hyena.Widgets/AnimatedImage.cs \
+ Hyena.Widgets/AnimatedVBox.cs \
+ Hyena.Widgets/AnimatedWidget.cs \
+ Hyena.Widgets/ComplexMenuItem.cs \
+ Hyena.Widgets/EntryPopup.cs \
+ Hyena.Widgets/GenericToolItem.cs \
+ Hyena.Widgets/HigMessageDialog.cs \
+ Hyena.Widgets/ImageButton.cs \
+ Hyena.Widgets/MenuButton.cs \
+ Hyena.Widgets/MessageBar.cs \
+ Hyena.Widgets/PulsingButton.cs \
+ Hyena.Widgets/RatingEntry.cs \
+ Hyena.Widgets/RatingMenuItem.cs \
+ Hyena.Widgets/RoundedFrame.cs \
+ Hyena.Widgets/ScrolledWindow.cs \
+ Hyena.Widgets/SegmentedBar.cs \
+ Hyena.Widgets/SimpleTable.cs \
+ Hyena.Widgets/SmoothScrolledWindow.cs \
+ Hyena.Widgets/TextViewEditable.cs \
+ Hyena.Widgets/WrapLabel.cs
+
+
+# Initializers
+MONO_BASE_PATH =
+MONO_ADDINS_PATH =
+
+# Install Paths
+DEFAULT_INSTALL_DIR = $(pkglibdir)
+BACKENDS_INSTALL_DIR = $(DEFAULT_INSTALL_DIR)/Backends
+EXTENSIONS_INSTALL_DIR = $(DEFAULT_INSTALL_DIR)/Extensions
+DIR_DOCS = $(top_builddir)/docs
+DIR_EXTENSIONS = $(top_builddir)/extensions
+DIR_ICONS = $(top_builddir)/icons
+DIR_JPEGTRAN = $(top_builddir)/lib/libjpegtran
+DIR_LIBFSPOT = $(top_builddir)/lib/libfspot
+DIR_SEMWEB = $(top_builddir)/lib/semweb
+DIR_SRC = $(top_builddir)/src
+DIR_GIOSHARP = $(top_builddir)/lib/gio-sharp/gio
+DIR_GTKSHARPBEANS = $(top_builddir)/lib/gtk-sharp-beans
+DIR_UNIQUESHARP = $(top_builddir)/lib/unique-sharp/unique
+DIR_BIN = $(top_builddir)/bin
+
+# External libraries to link against, generated from configure
+LINK_SYSTEM = -r:System
+LINK_SYSTEMDATA = -r:System.Data
+LINK_SYSTEM_WEB = -r:System.Web
+LINK_MONO_POSIX = -r:Mono.Posix
+LINK_MONO_CAIRO = -r:Mono.Cairo
+LINK_MONO_SIMD = -r:Mono.Simd
+LINK_MONODATA = -r:Mono.Data
+LINK_MONO_DATA_SQLITECLIENT = -r:Mono.Data.SqliteClient
+LINK_ICSHARP_ZIP_LIB = -r:ICSharpCode.SharpZipLib
+LINK_KEYRING = $(KEYRINGSHARP_LIBS)
+LINK_GLIB = $(GLIBSHARP_LIBS)
+LINK_GTK = $(GTKSHARP_LIBS)
+LINK_GNOME = $(GNOME_SHARP_LIBS)
+LINK_GCONF = $(GCONF_SHARP_LIBS)
+LINK_GLADE = -pkg:glade-sharp-2.0
+LINK_FLICKRNET = -pkg:flickrnet
+LINK_DBUS = $(NDESK_DBUS_LIBS) $(NDESK_DBUS_GLIB_LIBS)
+LINK_DBUS_NO_GLIB = $(NDESK_DBUS_LIBS)
+LINK_MONO_ADDINS_DEPS = $(MONO_ADDINS_LIBS)
+LINK_MONO_ADDINS_SETUP_DEPS = $(MONO_ADDINS_SETUP_LIBS)
+LINK_MONO_ADDINS_GUI_DEPS = $(MONO_ADDINS_GUI_LIBS)
+
+# GIO
+REF_GIO =
+LINK_GIO = -r:$(DIR_GIOSHARP)/gio-sharp.dll
+LINK_GIO_DEPS = $(REF_GIO) $(LINK_GIO)
+
+# Gtk Beans
+REF_GTK_BEANS = $(LINK_GIO_DEPS)
+LINK_GTK_BEANS = -r:$(DIR_GTKSHARPBEANS)/gtk-sharp-beans.dll
+LINK_GTK_BEANS_DEPS = $(REF_GTK_BEANS) $(LINK_GTK_BEANS)
+
+# Uniqe
+REF_UNIQUE =
+LINK_UNIQUE = -r:$(DIR_UNIQUESHARP)/unique-sharp.dll
+LINK_UNIQUE_DEPS = $(REF_UNIQUE) $(LINK_UNIQUE)
+
+# Hyena
+REF_HYENA = $(LINK_SYSTEM) $(LINK_MONO_POSIX)
+LINK_HYENA = -r:$(DIR_BIN)/Hyena.dll
+LINK_HYENA_DEPS = $(REF_HYENA) $(LINK_HYENA)
+
+# Semweb
+REF_SEMWEB = $(LINK_SYSTEMDATA) $(LINK_HYENA_DEPS)
+LINK_SEMWEB = -r:$(DIR_BIN)/SemWeb.dll
+LINK_SEMWEB_DEPS = $(REF_SEMWEB) $(LINK_SEMWEB)
+
+# Hyena.Data.Sqlite
+REF_HYENA_DATA_SQLITE = $(LINK_SQLITE)
+LINK_HYENA_DATA_SQLITE = -r:$(DIR_BIN)/Hyena.Data.Sqlite.dll
+LINK_HYENA_DATA_SQLITE_DEPS = $(REF_HYENA_DATA_SQLITE) $(LINK_HYENA_DATA_SQLITE)
+
+# Hyena.Gui
+REF_HYENA_GUI = $(LINK_HYENA_DEPS)
+LINK_HYENA_GUI = -r:$(DIR_BIN)/Hyena.Gui.dll
+LINK_HENA_GUI_DEPS = $(REF_HYENA_GUI) $(LINK_HYENA_GUI)
+
+# FSpot.Cms
+REF_FSPOT_CMS = $(LINK_GTK)
+LINK_FSPOT_CMS = -r:$(DIR_BIN)/FSpot.Cms.dll
+LINK_FSPOT_CMS_DEPS = $(REF_FSPOT_CMS) $(LINK_FSPOT_CMS)
+
+# FSpot.Utils
+REF_FSPOT_UTILS = $(LINK_HYENA_DEPS) $(LINK_GTK) $(LINK_GIO) $(LINK_MONO_CAIRO)
+LINK_FSPOT_UTILS = -r:$(DIR_BIN)/FSpot.Utils.dll
+LINK_FSPOT_UTILS_DEPS = $(REF_FSPOT_UTILS) $(LINK_FSPOT_UTILS)
+
+# FSpot.Core
+REF_FSPOT_CORE = $(LINK_FSPOT_UTILS_DEPS) $(LINK_FSPOT_CMS_DEPS)
+LINK_FSPOT_CORE = -r:$(DIR_BIN)/FSpot.Core.dll
+LINK_FSPOT_CORE_DEPS = $(REF_FSPOT_CORE) $(LINK_FSPOT_CORE)
+
+# FSpot.Query
+REF_FSPOT_QUERY = $(LINK_FSPOT_CORE_DEPS)
+LINK_FSPOT_QUERY = -r:$(DIR_BIN)/FSpot.Query.dll
+LINK_FSPOT_QUERY_DEPS = $(REF_FSPOT_QUERY) $(LINK_FSPOT_QUERY)
+
+# FSpot.JobScheduler
+REF_FSPOT_JOB_SCHEDULER = $(LINK_HYENA_DEPS)
+LINK_FSPOT_JOB_SCHEDULER = -r:$(DIR_BIN)/FSpot.JobScheduler.dll
+LINK_FSPOT_JOB_SCHEDULER_DEPS = $(REF_FSPOT_JOB_SCHEDULER) $(LINK_FSPOT_JOB_SCHEDULER)
+
+# FSpot.Bling
+REF_FSPOT_BLING = $(LINK_GTK_BEANS_DEPS) $(LINK_GLIB)
+LINK_FSPOT_BLING = -r:$(DIR_BIN)/FSpot.Bling.dll
+LINK_FSPOT_BLING_DEPS = $(REF_FSPOT_BLING) $(LINK_FSPOT_BLING)
+
+# FSpot.Platform
+REF_FSPOT_PLATFORM = $(LINK_GCONF) $(LINK_GTK) $(LINK_FSPOT_CORE_DEPS) $(LINK_DBUS)
+LINK_FSPOT_PLATFORM = -r:$(DIR_BIN)/FSpot.Platform.dll
+LINK_FSPOT_PLATFORM_DEPS = $(REF_FSPOT_PLATFORM) $(LINK_FSPOT_PLATFORM)
+
+# FSpot.Widgets
+REF_FSPOT_WIDGETS = $(LINK_FSPOT_CORE_DEPS) $(LINK_FSPOT_BLING_DEPS)
+LINK_FSPOT_WIDGETS = -r:$(DIR_BIN)/FSpot.Widgets.dll
+LINK_FSPOT_WIDGETS_DEPS = $(REF_FSPOT_WIDGETS) $(LINK_FSPOT_WIDGETS)
+
+# FSpot (executable)
+REF_FSPOT = $(LINK_FSPOT_WIDGETS_DEPS) $(LINK_FSPOT_PLATFORM_DEPS) $(LINK_FSPOT_QUERY_DEPS) \
+ $(LINK_GLIB) $(LINK_MONO_ADDINS_DEPS) $(LINK_UNIQUE_DEPS) $(LINK_MONO_ADDINS_SETUP_DEPS) \
+ $(LINK_SEMWEB_DEPS) $(LINK_GLADE) $(LINK_MONODATA) $(LINK_MONO_DATA_SQLITECLIENT) \
+ $(LINK_MONO_ADDINS_GUI_DEPS) $(LINK_FSPOT_JOB_SCHEDULER_DEPS) $(LINK_ICSHARP_ZIP_LIB) \
+ $(LINK_GNOME)
+
+# FIXME: do not link executables
+LINK_FSPOT = -r:$(DIR_BIN)/f-spot.exe
+LINK_FSPOT_DEPS = $(REF_FSPOT) $(LINK_FSPOT)
+
+# Extensions
+REF_FSPOT_EXTENSION_BLACKOUTEDITOR = $(LINK_FSPOT_DEPS)
+REF_FSPOT_EXTENSION_BWEDITOR = $(LINK_FSPOT_DEPS) $(LINK_MONO_SIMD)
+REF_FSPOT_EXTENSION_FLIPEDITOR = $(LINK_FSPOT_DEPS)
+REF_FSPOT_EXTENSION_PIXELATEEDITOR = $(LINK_FSPOT_DEPS)
+REF_FSPOT_EXTENSION_RESIZEEDITOR = $(LINK_FSPOT_DEPS)
+REF_FSPOT_EXTENSION_CDEXPORT = $(LINK_FSPOT_DEPS)
+REF_FSPOT_EXTENSION_FACEBOOKEXPORT = $(LINK_FSPOT_DEPS) $(LINK_KEYRING)
+REF_FSPOT_EXTENSION_FLICKREXPORT = $(LINK_FSPOT_DEPS) $(LINK_FLICKRNET)
+REF_FSPOT_EXTENSION_FOLDEREXPORT = $(LINK_FSPOT_DEPS) $(LINK_SYSTEM_WEB)
+REF_FSPOT_EXTENSION_GALLERYEXPORT = $(LINK_FSPOT_DEPS)
+REF_MONO_GOOGLE = $(LINK_HYENA_DEPS)
+LINK_MONO_GOOGLE = -r:$(DIR_BIN)/Mono.Google.dll
+LINK_MONO_GOOGLE_DEPS = $(REF_MONO_GOOGLE) $(LINK_MONO_GOOGLE)
+REF_FSPOT_EXTENSION_PICASAWEBEXPORT = $(LINK_FSPOT_DEPS) $(LINK_MONO_GOOGLE) $(LINK_KEYRING)
+REF_SMUGMUGNET = $(LINK_FSPOT_DEPS)
+LINK_SMUGMUGNET = -r:$(DIR_BIN)/SmugMugNet.dll
+LINK_SMUGMUGNET_DEPS = $(REF_SMUGMUGNET) $(LINK_SMUGMUGNET)
+REF_FSPOT_EXTENSION_SMUGMUGEXPORT = $(LINK_SMUGMUGNET_DEPS) $(LINK_KEYRING)
+REF_MONO_TABBLO = $(LINK_HYENA_DEPS)
+LINK_MONO_TABBLO = -r:$(DIR_BIN)/Mono.Tabblo.dll
+LINK_MONO_TABBLO_DEPS = $(REF_MONO_TABBLO) $(LINK_MONO_TABBLO)
+REF_FSPOT_EXTENSION_TABBLOEXPORT = $(LINK_FSPOT_DEPS) $(LINK_KEYRING) $(LINK_MONO_TABBLO_DEPS)
+REF_FSPOT_EXTENSION_ZIPEXPORT = $(LINK_FSPOT_DEPS)
+REF_FSPOT_EXTENSION_CHANGEPHOTOPATH = $(LINK_FSPOT_DEPS)
+REF_FSPOT_EXTENSION_DEVELOPINUFRAW = $(LINK_FSPOT_DEPS)
+REF_FSPOT_EXTENSION_HASHJOB = $(LINK_FSPOT_DEPS)
+REF_FSPOT_EXTENSION_LIVEWEBGALLERY = $(LINK_FSPOT_DEPS)
+REF_FSPOT_EXTENSION_MERGEDB = $(LINK_FSPOT_DEPS)
+REF_FSPOT_EXTENSION_RAWPLUSJPEG = $(LINK_FSPOT_DEPS)
+REF_FSPOT_EXTENSION_RETROACTIVEROLL = $(LINK_FSPOT_DEPS)
+REF_FSPOT_EXTENSION_SCREENSAVERCONFIG = $(LINK_FSPOT_DEPS)
+REF_FSPOT_EXTENSION_COVERTRANSITION = $(LINK_FSPOT_DEPS)
+
+# Cute hack to replace a space with something
+colon := :
+empty :=
+space := $(empty) $(empty)
+
+# Build path to allow running uninstalled
+RUN_PATH = $(subst $(space),$(colon), $(MONO_BASE_PATH))
+UNIQUE_FILTER_PIPE = tr [:space:] \\n | sort | uniq
+BUILD_DATA_DIR = $(top_builddir)/bin/share/$(PACKAGE)
+
+# Since all other attempts failed, we currently go this way:
+# This code adds the file specified in ASSEMBLY_INFO_SOURCE to SOURCES_BUILD.
+# If no such file is specified, the default AssemblyInfo.cs is used.
+ASSEMBLY_INFO_SOURCE_REAL = \
+ $(shell if [ "$(ASSEMBLY_INFO_SOURCE)" ]; \
+ then \
+ echo "$(addprefix $(srcdir)/, $(ASSEMBLY_INFO_SOURCE))"; \
+ else \
+ echo "$(top_srcdir)/src/AssemblyInfo.cs"; \
+ fi)
+
+SOURCES_BUILD = $(addprefix $(srcdir)/, $(SOURCES)) \
+ $(ASSEMBLY_INFO_SOURCE_REAL)
+RESOURCES_EXPANDED = $(addprefix $(srcdir)/, $(RESOURCES))
+RESOURCES_BUILD = $(foreach resource, $(RESOURCES_EXPANDED), \
+ -resource:$(resource),$(notdir $(resource)))
+
+INSTALL_ICONS = $(top_srcdir)/build/private-icon-theme-installer "$(mkinstalldirs)" "$(INSTALL_DATA)"
+THEME_ICONS_SOURCE = $(wildcard $(srcdir)/ThemeIcons/*/*/*.png) $(wildcard $(srcdir)/ThemeIcons/scalable/*/*.svg)
+THEME_ICONS_RELATIVE = $(subst $(srcdir)/ThemeIcons/, , $(THEME_ICONS_SOURCE))
+ASSEMBLY_EXTENSION = $(strip $(patsubst library, dll, $(TARGET)))
+ASSEMBLY_FILE = $(top_builddir)/bin/$(ASSEMBLY).$(ASSEMBLY_EXTENSION)
+INSTALL_DIR_RESOLVED = $(firstword $(subst , $(DEFAULT_INSTALL_DIR), $(INSTALL_DIR)))
+ at ENABLE_TESTS_TRUE@ENABLE_TESTS_FLAG = "-define:ENABLE_TESTS"
+ at ENABLE_ATK_TRUE@ENABLE_ATK_FLAG = "-define:ENABLE_ATK"
+FILTERED_LINK = $(shell echo "$(LINK)" | $(UNIQUE_FILTER_PIPE))
+DEP_LINK = $(shell echo "$(LINK)" | $(UNIQUE_FILTER_PIPE) | sed s,-r:,,g | grep '$(top_builddir)/bin/')
+OUTPUT_FILES = \
+ $(ASSEMBLY_FILE) \
+ $(ASSEMBLY_FILE).mdb
+
+moduledir = $(INSTALL_DIR_RESOLVED)
+module_SCRIPTS = $(OUTPUT_FILES) Hyena.Gui.dll.config
+EXTRA_DIST = $(SOURCES_BUILD) $(RESOURCES_EXPANDED) \
+ $(THEME_ICONS_SOURCE) hyena.gui.pc.in Hyena.Gui.dll.config
+CLEANFILES = $(OUTPUT_FILES) $(ASSEMBLY_FILE).config
+DISTCLEANFILES = *.pidb
+MAINTAINERCLEANFILES = Makefile.in
+all: all-am
+
+.SUFFIXES:
+$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(top_srcdir)/build/build.mk $(top_srcdir)/build/build.environment.mk $(top_srcdir)/build/build.rules.mk $(am__configure_deps)
+ @for dep in $?; do \
+ case '$(am__configure_deps)' in \
+ *$$dep*) \
+ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \
+ && { if test -f $@; then exit 0; else break; fi; }; \
+ exit 1;; \
+ esac; \
+ done; \
+ echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign lib/Hyena/src/Hyena.Gui/Makefile'; \
+ $(am__cd) $(top_srcdir) && \
+ $(AUTOMAKE) --foreign lib/Hyena/src/Hyena.Gui/Makefile
+.PRECIOUS: Makefile
+Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
+ @case '$?' in \
+ *config.status*) \
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \
+ *) \
+ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \
+ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \
+ esac;
+
+$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+
+$(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps)
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps)
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(am__aclocal_m4_deps):
+install-moduleSCRIPTS: $(module_SCRIPTS)
+ @$(NORMAL_INSTALL)
+ test -z "$(moduledir)" || $(MKDIR_P) "$(DESTDIR)$(moduledir)"
+ @list='$(module_SCRIPTS)'; test -n "$(moduledir)" || list=; \
+ for p in $$list; do \
+ if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \
+ if test -f "$$d$$p"; then echo "$$d$$p"; echo "$$p"; else :; fi; \
+ done | \
+ sed -e 'p;s,.*/,,;n' \
+ -e 'h;s|.*|.|' \
+ -e 'p;x;s,.*/,,;$(transform)' | sed 'N;N;N;s,\n, ,g' | \
+ $(AWK) 'BEGIN { files["."] = ""; dirs["."] = 1; } \
+ { d=$$3; if (dirs[d] != 1) { print "d", d; dirs[d] = 1 } \
+ if ($$2 == $$4) { files[d] = files[d] " " $$1; \
+ if (++n[d] == $(am__install_max)) { \
+ print "f", d, files[d]; n[d] = 0; files[d] = "" } } \
+ else { print "f", d "/" $$4, $$1 } } \
+ END { for (d in files) print "f", d, files[d] }' | \
+ while read type dir files; do \
+ if test "$$dir" = .; then dir=; else dir=/$$dir; fi; \
+ test -z "$$files" || { \
+ echo " $(INSTALL_SCRIPT) $$files '$(DESTDIR)$(moduledir)$$dir'"; \
+ $(INSTALL_SCRIPT) $$files "$(DESTDIR)$(moduledir)$$dir" || exit $$?; \
+ } \
+ ; done
+
+uninstall-moduleSCRIPTS:
+ @$(NORMAL_UNINSTALL)
+ @list='$(module_SCRIPTS)'; test -n "$(moduledir)" || exit 0; \
+ files=`for p in $$list; do echo "$$p"; done | \
+ sed -e 's,.*/,,;$(transform)'`; \
+ test -n "$$list" || exit 0; \
+ echo " ( cd '$(DESTDIR)$(moduledir)' && rm -f" $$files ")"; \
+ cd "$(DESTDIR)$(moduledir)" && rm -f $$files
+
+mostlyclean-libtool:
+ -rm -f *.lo
+
+clean-libtool:
+ -rm -rf .libs _libs
+tags: TAGS
+TAGS:
+
+ctags: CTAGS
+CTAGS:
+
+
+distdir: $(DISTFILES)
+ @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; \
+ if test -d $$d/$$file; then \
+ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \
+ if test -d "$(distdir)/$$file"; then \
+ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
+ fi; \
+ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
+ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \
+ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
+ fi; \
+ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \
+ else \
+ test -f "$(distdir)/$$file" \
+ || cp -p $$d/$$file "$(distdir)/$$file" \
+ || exit 1; \
+ fi; \
+ done
+check-am: all-am
+check: check-am
+all-am: Makefile $(SCRIPTS)
+installdirs:
+ for dir in "$(DESTDIR)$(moduledir)"; do \
+ test -z "$$dir" || $(MKDIR_P) "$$dir"; \
+ done
+install: install-am
+install-exec: install-exec-am
+install-data: install-data-am
+uninstall: uninstall-am
+
+install-am: all-am
+ @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
+
+installcheck: installcheck-am
+install-strip:
+ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+ `test -z '$(STRIP)' || \
+ echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install
+mostlyclean-generic:
+
+clean-generic:
+ -test -z "$(CLEANFILES)" || rm -f $(CLEANFILES)
+
+distclean-generic:
+ -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
+ -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES)
+ -test -z "$(DISTCLEANFILES)" || rm -f $(DISTCLEANFILES)
+
+maintainer-clean-generic:
+ @echo "This command is intended for maintainers to use"
+ @echo "it deletes files that may require special tools to rebuild."
+ -test -z "$(MAINTAINERCLEANFILES)" || rm -f $(MAINTAINERCLEANFILES)
+clean: clean-am
+
+clean-am: clean-generic clean-libtool mostlyclean-am
+
+distclean: distclean-am
+ -rm -f Makefile
+distclean-am: clean-am distclean-generic
+
+dvi: dvi-am
+
+dvi-am:
+
+html: html-am
+
+html-am:
+
+info: info-am
+
+info-am:
+
+install-data-am: install-data-local install-moduleSCRIPTS
+
+install-dvi: install-dvi-am
+
+install-dvi-am:
+
+install-exec-am:
+
+install-html: install-html-am
+
+install-html-am:
+
+install-info: install-info-am
+
+install-info-am:
+
+install-man:
+
+install-pdf: install-pdf-am
+
+install-pdf-am:
+
+install-ps: install-ps-am
+
+install-ps-am:
+
+installcheck-am:
+
+maintainer-clean: maintainer-clean-am
+ -rm -f Makefile
+maintainer-clean-am: distclean-am maintainer-clean-generic
+
+mostlyclean: mostlyclean-am
+
+mostlyclean-am: mostlyclean-generic mostlyclean-libtool
+
+pdf: pdf-am
+
+pdf-am:
+
+ps: ps-am
+
+ps-am:
+
+uninstall-am: uninstall-local uninstall-moduleSCRIPTS
+
+.MAKE: install-am install-strip
+
+.PHONY: all all-am check check-am clean clean-generic clean-libtool \
+ distclean distclean-generic distclean-libtool distdir dvi \
+ dvi-am html html-am info info-am install install-am \
+ install-data install-data-am install-data-local install-dvi \
+ install-dvi-am install-exec install-exec-am install-html \
+ install-html-am install-info install-info-am install-man \
+ install-moduleSCRIPTS install-pdf install-pdf-am install-ps \
+ install-ps-am install-strip installcheck installcheck-am \
+ installdirs maintainer-clean maintainer-clean-generic \
+ mostlyclean mostlyclean-generic mostlyclean-libtool pdf pdf-am \
+ ps ps-am uninstall uninstall-am uninstall-local \
+ uninstall-moduleSCRIPTS
+
+
+all: $(ASSEMBLY_FILE) theme-icons
+
+run:
+ @pushd $(top_builddir); \
+ make run; \
+ popd;
+
+# uncommented for now.
+# tests are currently excuted from Makefile in $(top_builddir)
+#test:
+# @pushd $(top_builddir)/tests; \
+# make $(ASSEMBLY); \
+# popd;
+
+build-debug:
+ @echo $(DEP_LINK)
+
+$(ASSEMBLY_FILE).mdb: $(ASSEMBLY_FILE)
+
+$(ASSEMBLY_FILE): $(SOURCES_BUILD) $(RESOURCES_EXPANDED) $(DEP_LINK)
+ @mkdir -p $(top_builddir)/bin
+ @if [ ! "x$(ENABLE_RELEASE)" = "xyes" ]; then \
+ $(top_srcdir)/build/dll-map-makefile-verifier $(srcdir)/Makefile.am $(srcdir)/$(notdir $@.config) && \
+ $(MONO) $(top_builddir)/build/dll-map-verifier.exe $(srcdir)/$(notdir $@.config) -iwinmm -ilibbanshee -ilibbnpx11 -ilibc -ilibc.so.6 -iintl -ilibmtp.dll -ilibigemacintegration.dylib -iCFRelease $(SOURCES_BUILD); \
+ fi;
+ $(MCS) \
+ $(GMCS_FLAGS) \
+ $(ASSEMBLY_BUILD_FLAGS) \
+ -nowarn:0278 -nowarn:0078 $$warn \
+ -define:HAVE_GTK_2_10 -define:NET_2_0 \
+ -debug -target:$(TARGET) -out:$@ \
+ $(BUILD_DEFINES) $(ENABLE_TESTS_FLAG) $(ENABLE_ATK_FLAG) \
+ $(FILTERED_LINK) $(RESOURCES_BUILD) $(SOURCES_BUILD)
+ @if [ -e $(srcdir)/$(notdir $@.config) ]; then \
+ cp $(srcdir)/$(notdir $@.config) $(top_builddir)/bin; \
+ fi;
+ @if [ ! -z "$(EXTRA_BUNDLE)" ]; then \
+ cp $(EXTRA_BUNDLE) $(top_builddir)/bin; \
+ fi;
+
+theme-icons: $(THEME_ICONS_SOURCE)
+ @$(INSTALL_ICONS) -il "$(BUILD_DATA_DIR)" "$(srcdir)" $(THEME_ICONS_RELATIVE)
+
+install-data-local: $(THEME_ICONS_SOURCE)
+ @$(INSTALL_ICONS) -i "$(DESTDIR)$(pkgdatadir)" "$(srcdir)" $(THEME_ICONS_RELATIVE)
+
+uninstall-local: $(THEME_ICONS_SOURCE)
+ @$(INSTALL_ICONS) -u "$(DESTDIR)$(pkgdatadir)" "$(srcdir)" $(THEME_ICONS_RELATIVE)
+
+# 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.
+.NOEXPORT:
diff --git a/lib/Hyena/src/Hyena.Gui/hyena.gui.pc.in b/lib/Hyena/src/Hyena.Gui/hyena.gui.pc.in
new file mode 100644
index 0000000..8189b8b
--- /dev/null
+++ b/lib/Hyena/src/Hyena.Gui/hyena.gui.pc.in
@@ -0,0 +1,9 @@
+Assemblies=@expanded_libdir@/@PACKAGE@/Hyena.Gui.dll
+Files=@expanded_libdir@/@PACKAGE@/Hyena.Gui.dll.config @expanded_libdir@/@PACKAGE@/Hyena.Gui.dll.mdb
+
+Name: Hyena.Gui
+Description: Hyena.Gui
+Version: @VERSION@
+
+Requires:
+Libs: -r:@expanded_libdir@/@PACKAGE@/Hyena.Gui.dll
diff --git a/lib/Hyena/src/Hyena/Hyena.Collections/CollectionExtensions.cs b/lib/Hyena/src/Hyena/Hyena.Collections/CollectionExtensions.cs
new file mode 100644
index 0000000..99ed0a1
--- /dev/null
+++ b/lib/Hyena/src/Hyena/Hyena.Collections/CollectionExtensions.cs
@@ -0,0 +1,87 @@
+//
+// CollectionExtensions.cs
+//
+// Author:
+// Aaron Bockover <abockover at novell.com>
+//
+// Copyright (C) 2008 Novell, Inc.
+//
+// Permission is hereby granted, free of charge, to any person obtaining
+// a copy of this software and associated documentation files (the
+// "Software"), to deal in the Software without restriction, including
+// without limitation the rights to use, copy, modify, merge, publish,
+// distribute, sublicense, and/or sell copies of the Software, and to
+// permit persons to whom the Software is furnished to do so, subject to
+// the following conditions:
+//
+// The above copyright notice and this permission notice shall be
+// included in all copies or substantial portions of the Software.
+//
+// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
+// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
+// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
+// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+//
+
+using System;
+using System.Text;
+using System.Collections.Generic;
+
+namespace Hyena.Collections
+{
+ public static class CollectionExtensions
+ {
+ public static void SortedInsert<T> (List<T> list, T value) where T : IComparable
+ {
+ if (list.Count == 0 || list[list.Count - 1].CompareTo (value) < 0) {
+ list.Add (value);
+ } else if (list[0].CompareTo (value) > 0) {
+ list.Insert (0, value);
+ } else {
+ int index = list.BinarySearch (value);
+ list.Insert (index < 0 ? ~index : index, value);
+ }
+ }
+
+ public static string Join<T> (IList<T> list)
+ {
+ return Join<T> (list, ", ");
+ }
+
+ public static string Join<T> (IList<T> list, string separator)
+ {
+ return Join<T> (list, null, null, separator);
+ }
+
+ public static string Join<T> (IList<T> list, string wrapper, string separator)
+ {
+ return Join<T> (list, wrapper, wrapper, separator);
+ }
+
+ public static string Join<T> (IList<T> list, string front, string back, string separator)
+ {
+ StringBuilder builder = new StringBuilder ();
+
+ for (int i = 0, n = list.Count; i < n; i++) {
+ if (front != null) {
+ builder.Append (front);
+ }
+
+ builder.Append (list[i]);
+
+ if (back != null) {
+ builder.Append (back);
+ }
+
+ if (i < n - 1) {
+ builder.Append (separator);
+ }
+ }
+
+ return builder.ToString ();
+ }
+ }
+}
diff --git a/lib/Hyena/src/Hyena/Hyena.Collections/IStackProvider.cs b/lib/Hyena/src/Hyena/Hyena.Collections/IStackProvider.cs
new file mode 100644
index 0000000..a6f0756
--- /dev/null
+++ b/lib/Hyena/src/Hyena/Hyena.Collections/IStackProvider.cs
@@ -0,0 +1,41 @@
+//
+// IStackProvider.cs
+//
+// Author:
+// Aaron Bockover <abockover at novell.com>
+//
+// Copyright (C) 2007 Novell, Inc.
+//
+// Permission is hereby granted, free of charge, to any person obtaining
+// a copy of this software and associated documentation files (the
+// "Software"), to deal in the Software without restriction, including
+// without limitation the rights to use, copy, modify, merge, publish,
+// distribute, sublicense, and/or sell copies of the Software, and to
+// permit persons to whom the Software is furnished to do so, subject to
+// the following conditions:
+//
+// The above copyright notice and this permission notice shall be
+// included in all copies or substantial portions of the Software.
+//
+// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
+// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
+// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
+// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+//
+
+using System;
+
+namespace Hyena.Collections
+{
+ public interface IStackProvider<T>
+ {
+ T Peek ();
+ T Pop ();
+ void Push (T t);
+ void Clear ();
+ int Count { get; }
+ }
+}
diff --git a/lib/Hyena/src/Hyena/Hyena.Collections/IntervalHeap.cs b/lib/Hyena/src/Hyena/Hyena.Collections/IntervalHeap.cs
new file mode 100644
index 0000000..2db698c
--- /dev/null
+++ b/lib/Hyena/src/Hyena/Hyena.Collections/IntervalHeap.cs
@@ -0,0 +1,404 @@
+//
+// IntervalHeap.cs
+//
+// Author:
+// Aaron Bockover <abockover at novell.com>
+//
+// Copyright (C) 2006-2007 Novell, Inc.
+//
+// Permission is hereby granted, free of charge, to any person obtaining
+// a copy of this software and associated documentation files (the
+// "Software"), to deal in the Software without restriction, including
+// without limitation the rights to use, copy, modify, merge, publish,
+// distribute, sublicense, and/or sell copies of the Software, and to
+// permit persons to whom the Software is furnished to do so, subject to
+// the following conditions:
+//
+// The above copyright notice and this permission notice shall be
+// included in all copies or substantial portions of the Software.
+//
+// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
+// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
+// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
+// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+//
+
+using System;
+using System.Collections;
+using System.Collections.Generic;
+
+namespace Hyena.Collections
+{
+ public class IntervalHeap<T> : ICollection<T>, ICollection
+ {
+ private const int MIN_CAPACITY = 16;
+
+ private int count;
+ private int generation;
+
+ private Interval [] heap;
+
+ public IntervalHeap ()
+ {
+ Clear ();
+ }
+
+ public virtual T Pop ()
+ {
+ if (count == 0) {
+ throw new InvalidOperationException ();
+ }
+
+ T item = heap[0].Item;
+ MoveDown (0, heap[--count]);
+ generation++;
+
+ return item;
+ }
+
+ public virtual T Peek ()
+ {
+ if (count == 0) {
+ throw new InvalidOperationException ();
+ }
+
+ return heap[0].Item;
+ }
+
+ public virtual void Push (T item, int priority)
+ {
+ if (item == null) {
+ throw new ArgumentNullException ("item");
+ }
+
+ if (count == heap.Length) {
+ OptimalArrayResize (ref heap, 1);
+ }
+
+ MoveUp (++count - 1, new Interval (item, priority));
+ generation++;
+ }
+
+ public virtual void Clear ()
+ {
+ generation = 0;
+ count = 0;
+ heap = new Interval[MIN_CAPACITY];
+ }
+
+ void ICollection.CopyTo (Array array, int index)
+ {
+ if (array == null) {
+ throw new ArgumentNullException ("array");
+ }
+
+ if (index < 0) {
+ throw new ArgumentOutOfRangeException ("index");
+ }
+
+ Array.Copy (heap, 0, array, index, count);
+ }
+
+ public virtual void CopyTo (T [] array, int index)
+ {
+ if (array == null) {
+ throw new ArgumentNullException ("array");
+ }
+
+ if (index < 0) {
+ throw new ArgumentOutOfRangeException ("index");
+ }
+
+ Array.Copy (heap, 0, array, index, count);
+ }
+
+ public virtual bool Contains (T item)
+ {
+ if (item == null) {
+ throw new ArgumentNullException ("item");
+ }
+
+ return FindItemHeapIndex (item) >= 0;
+ }
+
+ public virtual void Add (T item)
+ {
+ if (item == null) {
+ throw new ArgumentNullException ("item");
+ }
+
+ Push (item, 0);
+ }
+
+ public virtual bool Remove (T item)
+ {
+ if (item == null) {
+ throw new ArgumentNullException ("item");
+ }
+
+ int index = FindItemHeapIndex (item);
+
+ if (index < 0) {
+ return false;
+ }
+
+ MoveDown (index, heap[--count]);
+ generation++;
+
+ return true;
+ }
+
+ public virtual void TrimExcess ()
+ {
+ if (count < heap.Length * 0.9) {
+ Array.Resize (ref heap, count);
+ }
+ }
+
+ IEnumerator IEnumerable.GetEnumerator ()
+ {
+ return GetEnumerator ();
+ }
+
+ public virtual IEnumerator<T> GetEnumerator ()
+ {
+ return new IntervalHeapEnumerator (this);
+ }
+
+ public static IntervalHeap<T> Synchronized (IntervalHeap<T> heap)
+ {
+ if (heap == null) {
+ throw new ArgumentNullException ("heap");
+ }
+
+ return new SyncIntervalHeap (heap);
+ }
+
+ private int FindItemHeapIndex (T item)
+ {
+ for (int i = 0; i < count; i++) {
+ if (item.Equals (heap[i].Item)) {
+ return i;
+ }
+ }
+
+ return -1;
+ }
+
+ private int GetLeftChildIndex (int index)
+ {
+ return index * 2 + 1;
+ }
+
+ private int GetParentIndex (int index)
+ {
+ return (index - 1) / 2;
+ }
+
+ private static void OptimalArrayResize (ref Interval [] array, int grow)
+ {
+ int new_capacity = array.Length == 0 ? 1 : array.Length;
+ int min_capacity = array.Length == 0 ? MIN_CAPACITY : array.Length + grow;
+
+ while (new_capacity < min_capacity) {
+ new_capacity <<= 1;
+ }
+
+ Array.Resize (ref array, new_capacity);
+ }
+
+ private void MoveUp (int index, Interval node)
+ {
+ int parent_index = GetParentIndex (index);
+
+ while (index > 0 && heap[parent_index].Priority < node.Priority) {
+ heap[index] = heap[parent_index];
+ index = parent_index;
+ parent_index = GetParentIndex (index);
+ }
+
+ heap[index] = node;
+ }
+
+ private void MoveDown (int index, Interval node)
+ {
+ int child_index = GetLeftChildIndex (index);
+
+ while (child_index < count) {
+ if (child_index + 1 < count
+ && heap[child_index].Priority < heap[child_index + 1].Priority) {
+ child_index++;
+ }
+
+ heap[index] = heap[child_index];
+ index = child_index;
+ child_index = GetLeftChildIndex (index);
+ }
+
+ MoveUp (index, node);
+ }
+
+ public virtual int Count {
+ get { return count; }
+ }
+
+ public bool IsReadOnly {
+ get { return false; }
+ }
+
+ public virtual object SyncRoot {
+ get { return this; }
+ }
+
+ public virtual bool IsSynchronized {
+ get { return false; }
+ }
+
+ private struct Interval
+ {
+ private T item;
+ private int priority;
+
+ public Interval (T item, int priority)
+ {
+ this.item = item;
+ this.priority = priority;
+ }
+
+ public T Item {
+ get { return item; }
+ }
+
+ public int Priority {
+ get { return priority; }
+ }
+ }
+
+ private class SyncIntervalHeap : IntervalHeap<T>
+ {
+ private IntervalHeap<T> heap;
+
+ internal SyncIntervalHeap (IntervalHeap<T> heap)
+ {
+ this.heap = heap;
+ }
+
+ public override int Count {
+ get { lock (heap) { return heap.Count; } }
+ }
+
+ public override bool IsSynchronized {
+ get { return true; }
+ }
+
+ public override object SyncRoot {
+ get { return heap.SyncRoot; }
+ }
+
+ public override void Clear ()
+ {
+ lock (heap) { heap.Clear (); }
+ }
+
+ public override bool Contains(T item)
+ {
+ lock (heap) { return heap.Contains (item); }
+ }
+
+ public override T Pop()
+ {
+ lock (heap) { return heap.Pop (); }
+ }
+
+ public override T Peek ()
+ {
+ lock (heap) { return heap.Peek (); }
+ }
+
+ public override void Push (T item, int priority)
+ {
+ lock (heap) { heap.Push (item, priority); }
+ }
+
+ public override void Add (T item)
+ {
+ lock (heap) { heap.Add (item); }
+ }
+
+ public override bool Remove (T item)
+ {
+ lock (heap) { return heap.Remove (item); }
+ }
+
+ public override void TrimExcess ()
+ {
+ lock (heap) { heap.TrimExcess (); }
+ }
+
+ public override void CopyTo (T [] array, int index)
+ {
+ lock (heap) { heap.CopyTo (array, index); }
+ }
+
+ public override IEnumerator<T> GetEnumerator ()
+ {
+ lock (heap) { return new IntervalHeapEnumerator (this); }
+ }
+ }
+
+ private class IntervalHeapEnumerator : IEnumerator<T>, IEnumerator
+ {
+ private IntervalHeap<T> heap;
+ private int index;
+ private int generation;
+
+ public IntervalHeapEnumerator (IntervalHeap<T> heap)
+ {
+ this.heap = heap;
+ Reset ();
+ }
+
+ public void Reset ()
+ {
+ generation = heap.generation;
+ index = -1;
+ }
+
+ public void Dispose ()
+ {
+ heap = null;
+ }
+
+ public bool MoveNext ()
+ {
+ if (generation != heap.generation) {
+ throw new InvalidOperationException ();
+ }
+
+ if (index + 1 == heap.count) {
+ return false;
+ }
+
+ index++;
+ return true;
+ }
+
+ object IEnumerator.Current {
+ get { return Current; }
+ }
+
+ public T Current {
+ get {
+ if (generation != heap.generation) {
+ throw new InvalidOperationException ();
+ }
+
+ return heap.heap[index].Item;
+ }
+ }
+ }
+ }
+}
diff --git a/lib/Hyena/src/Hyena/Hyena.Collections/LruCache.cs b/lib/Hyena/src/Hyena/Hyena.Collections/LruCache.cs
new file mode 100644
index 0000000..a50e73c
--- /dev/null
+++ b/lib/Hyena/src/Hyena/Hyena.Collections/LruCache.cs
@@ -0,0 +1,213 @@
+//
+// LruCache.cs
+//
+// Author:
+// Aaron Bockover <abockover at novell.com>
+//
+// Copyright (C) 2008 Novell, Inc.
+//
+// Permission is hereby granted, free of charge, to any person obtaining
+// a copy of this software and associated documentation files (the
+// "Software"), to deal in the Software without restriction, including
+// without limitation the rights to use, copy, modify, merge, publish,
+// distribute, sublicense, and/or sell copies of the Software, and to
+// permit persons to whom the Software is furnished to do so, subject to
+// the following conditions:
+//
+// The above copyright notice and this permission notice shall be
+// included in all copies or substantial portions of the Software.
+//
+// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
+// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
+// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
+// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+//
+
+using System;
+using System.Collections;
+using System.Collections.Generic;
+
+namespace Hyena.Collections
+{
+ public struct CacheEntry<TKey, TValue>
+ {
+ private TKey key;
+ public TKey Key {
+ get { return key; }
+ set { key = value; }
+ }
+
+ private TValue value;
+ public TValue Value {
+ get { return this.value; }
+ set { this.value = value; }
+ }
+
+ internal DateTime LastUsed;
+ internal int UsedCount;
+ }
+
+ public class LruCache<TKey, TValue> : IEnumerable<CacheEntry<TKey, TValue>>
+ {
+ private Dictionary<TKey, CacheEntry<TKey, TValue>> cache;
+ private int max_count;
+ private long hits;
+ private long misses;
+ private double? minimum_hit_ratio;
+
+ public LruCache () : this (1024)
+ {
+ }
+
+ public LruCache (int maxCount) : this (maxCount, null)
+ {
+ }
+
+ public LruCache (int maxCount, double? minimumHitRatio)
+ {
+ max_count = maxCount;
+ minimum_hit_ratio = minimumHitRatio;
+ cache = new Dictionary<TKey, CacheEntry<TKey, TValue>> ();
+ }
+
+ public void Add (TKey key, TValue value)
+ {
+ lock (cache) {
+ CacheEntry<TKey, TValue> entry;
+ if (cache.TryGetValue (key, out entry)) {
+ Ref (ref entry);
+ cache[key] = entry;
+ return;
+ }
+
+ entry.Key = key;
+ entry.Value = value;
+ Ref (ref entry);
+ cache.Add (key, entry);
+
+ misses++;
+ EnsureMinimumHitRatio ();
+
+ if (Count > max_count) {
+ TKey expire = FindOldestEntry ();
+ ExpireItem (cache[expire].Value);
+ cache.Remove (expire);
+ }
+ }
+ }
+
+ public bool Contains (TKey key)
+ {
+ lock (cache) {
+ return cache.ContainsKey (key);
+ }
+ }
+
+ public void Remove (TKey key)
+ {
+ lock (cache) {
+ if (Contains (key)) {
+ ExpireItem (cache[key].Value);
+ cache.Remove (key);
+ }
+ }
+ }
+
+ public bool TryGetValue (TKey key, out TValue value)
+ {
+ lock (cache) {
+ CacheEntry<TKey, TValue> entry;
+ if (cache.TryGetValue (key, out entry)) {
+ value = entry.Value;
+ Ref (ref entry);
+ cache[key] = entry;
+ hits++;
+ return true;
+ }
+
+ misses++;
+ EnsureMinimumHitRatio ();
+ value = default (TValue);
+ return false;
+ }
+ }
+
+ private void EnsureMinimumHitRatio ()
+ {
+ if (minimum_hit_ratio != null && Count > MaxCount && HitRatio < minimum_hit_ratio) {
+ MaxCount = Count;
+ }
+ }
+
+ private void Ref (ref CacheEntry<TKey, TValue> entry)
+ {
+ entry.LastUsed = DateTime.Now;
+ entry.UsedCount++;
+ }
+
+ IEnumerator IEnumerable.GetEnumerator ()
+ {
+ return GetEnumerator ();
+ }
+
+ public IEnumerator<CacheEntry<TKey, TValue>> GetEnumerator ()
+ {
+ lock (cache) {
+ foreach (KeyValuePair<TKey, CacheEntry<TKey, TValue>> item in cache) {
+ yield return item.Value;
+ }
+ }
+ }
+
+ // Ok, this blows. I have no time to implement anything clever or proper here.
+ // Using a hashtable generally sucks for this, but it's not bad for a 15 minute
+ // hack. max_count will be sufficiently small in our case that this can't be
+ // felt anyway. Meh.
+
+ private TKey FindOldestEntry ()
+ {
+ lock (cache) {
+ DateTime oldest = DateTime.Now;
+ TKey oldest_key = default (TKey);
+ foreach (CacheEntry<TKey, TValue> item in this) {
+ if (item.LastUsed < oldest) {
+ oldest = item.LastUsed;
+ oldest_key = item.Key;
+ }
+ }
+ return oldest_key;
+ }
+ }
+
+ protected virtual void ExpireItem (TValue item)
+ {
+ }
+
+ public int MaxCount {
+ get { lock (cache) { return max_count; } }
+ set { lock (cache) { max_count = value; } }
+ }
+
+ public int Count {
+ get { lock (cache) { return cache.Count; } }
+ }
+
+ public double? MinimumHitRatio { get { return minimum_hit_ratio; } }
+
+ public long Hits { get { return hits; } }
+ public long Misses { get { return misses; } }
+
+ public double HitRatio {
+ get {
+ if (misses == 0) {
+ return 1.0;
+ } else {
+ return ((double)hits) / ((double)(hits + misses));
+ }
+ }
+ }
+ }
+}
diff --git a/lib/Hyena/src/Hyena/Hyena.Collections/QueuePipeline.cs b/lib/Hyena/src/Hyena/Hyena.Collections/QueuePipeline.cs
new file mode 100644
index 0000000..6c869a3
--- /dev/null
+++ b/lib/Hyena/src/Hyena/Hyena.Collections/QueuePipeline.cs
@@ -0,0 +1,117 @@
+//
+// QueuePipeline.cs
+//
+// Author:
+// Aaron Bockover <abockover at novell.com>
+//
+// Copyright (C) 2008 Novell, Inc.
+//
+// Permission is hereby granted, free of charge, to any person obtaining
+// a copy of this software and associated documentation files (the
+// "Software"), to deal in the Software without restriction, including
+// without limitation the rights to use, copy, modify, merge, publish,
+// distribute, sublicense, and/or sell copies of the Software, and to
+// permit persons to whom the Software is furnished to do so, subject to
+// the following conditions:
+//
+// The above copyright notice and this permission notice shall be
+// included in all copies or substantial portions of the Software.
+//
+// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
+// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
+// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
+// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+//
+
+using System;
+
+namespace Hyena.Collections
+{
+ public class QueuePipeline <T> where T : class
+ {
+ #pragma warning disable 0067
+ // FIXME: This is to mute gmcs: https://bugzilla.novell.com/show_bug.cgi?id=360455
+ public event EventHandler Finished;
+ #pragma warning restore 0067
+
+ private object sync = new object ();
+
+ private QueuePipelineElement<T> first_element;
+ internal QueuePipelineElement<T> FirstElement {
+ get { return first_element; }
+ }
+
+ public QueuePipeline ()
+ {
+ }
+
+ public void AddElement (QueuePipelineElement<T> element)
+ {
+ element.Finished += OnElementFinished;
+ lock (sync) {
+ if (first_element == null) {
+ first_element = element;
+ return;
+ }
+
+ QueuePipelineElement<T> current = first_element;
+
+ while (current != null) {
+ if (current.NextElement == null) {
+ current.NextElement = element;
+ break;
+ }
+
+ current = current.NextElement;
+ }
+ }
+ }
+
+ public virtual void Enqueue (T item)
+ {
+ if (first_element == null) {
+ throw new InvalidOperationException ("There are no elements in this pipeline");
+ }
+
+ first_element.Enqueue (item);
+ }
+
+ public virtual void Cancel ()
+ {
+ if (first_element != null) {
+ first_element.Cancel ();
+ }
+ }
+
+ private void OnElementFinished (object o, EventArgs args)
+ {
+ bool any_processing = false;
+
+ lock (sync) {
+ QueuePipelineElement<T> element = FirstElement;
+ while (element != null) {
+ any_processing |= element.Processing || element.ProcessedCount < element.TotalCount;
+ if (any_processing) {
+ break;
+ }
+ element = element.NextElement;
+ }
+ }
+
+ if (!any_processing) {
+ OnFinished ();
+ }
+ }
+
+ protected virtual void OnFinished ()
+ {
+ EventHandler handler = Finished;
+ if (handler != null) {
+ handler (this, EventArgs.Empty);
+ }
+ }
+ }
+}
diff --git a/lib/Hyena/src/Hyena/Hyena.Collections/QueuePipelineElement.cs b/lib/Hyena/src/Hyena/Hyena.Collections/QueuePipelineElement.cs
new file mode 100644
index 0000000..a088d6c
--- /dev/null
+++ b/lib/Hyena/src/Hyena/Hyena.Collections/QueuePipelineElement.cs
@@ -0,0 +1,220 @@
+//
+// QueuePipelineElement.cs
+//
+// Author:
+// Aaron Bockover <abockover at novell.com>
+//
+// Copyright (C) 2008 Novell, Inc.
+//
+// Permission is hereby granted, free of charge, to any person obtaining
+// a copy of this software and associated documentation files (the
+// "Software"), to deal in the Software without restriction, including
+// without limitation the rights to use, copy, modify, merge, publish,
+// distribute, sublicense, and/or sell copies of the Software, and to
+// permit persons to whom the Software is furnished to do so, subject to
+// the following conditions:
+//
+// The above copyright notice and this permission notice shall be
+// included in all copies or substantial portions of the Software.
+//
+// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
+// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
+// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
+// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+//
+
+using System;
+using System.Threading;
+using System.Collections.Generic;
+
+namespace Hyena.Collections
+{
+ internal class ElementProcessCanceledException : ApplicationException
+ {
+ }
+
+ public abstract class QueuePipelineElement<T> where T : class
+ {
+ #pragma warning disable 0067
+ // FIXME: This is to mute gmcs: https://bugzilla.novell.com/show_bug.cgi?id=360455
+ public event EventHandler Finished;
+ public event EventHandler ProcessedItem;
+ #pragma warning restore 0067
+
+ private Queue<T> queue = new Queue<T> ();
+ private object monitor = new object ();
+ private AutoResetEvent thread_wait;
+ private bool processing = false;
+ private bool threaded = true;
+ private bool canceled = false;
+
+ private int processed_count;
+ public int ProcessedCount {
+ get { return processed_count; }
+ }
+
+ private int total_count;
+ public int TotalCount {
+ get { return total_count; }
+ }
+
+ protected abstract T ProcessItem (T item);
+
+ protected virtual void OnFinished ()
+ {
+ lock (this) {
+ canceled = false;
+ }
+
+ lock (queue) {
+ total_count = 0;
+ processed_count = 0;
+ }
+
+ EventHandler handler = Finished;
+ if (handler != null) {
+ handler (this, EventArgs.Empty);
+ }
+ }
+
+ protected void OnProcessedItem ()
+ {
+ EventHandler handler = ProcessedItem;
+ if (handler != null) {
+ handler (this, EventArgs.Empty);
+ }
+ }
+
+ protected virtual void OnCanceled ()
+ {
+ lock (queue) {
+ queue.Clear ();
+ total_count = 0;
+ processed_count = 0;
+ }
+ }
+
+ public virtual void Enqueue (T item)
+ {
+ lock (this) {
+ lock (queue) {
+ queue.Enqueue (item);
+ total_count++;
+ }
+
+ if (!threaded) {
+ Processor (null);
+ return;
+ }
+
+ if (thread_wait == null) {
+ thread_wait = new AutoResetEvent (false);
+ }
+
+ if (Monitor.TryEnter (monitor)) {
+ Monitor.Exit (monitor);
+ ThreadPool.QueueUserWorkItem (Processor);
+ thread_wait.WaitOne ();
+ }
+ }
+ }
+
+ protected virtual void EnqueueDownstream (T item)
+ {
+ if (NextElement != null && item != null) {
+ NextElement.Enqueue (item);
+ }
+ }
+
+ private void Processor (object state)
+ {
+ lock (monitor) {
+ if (threaded) {
+ thread_wait.Set ();
+ }
+
+ lock (this) {
+ processing = true;
+ }
+
+ try {
+ while (queue.Count > 0) {
+ CheckForCanceled ();
+
+ T item = null;
+ lock (queue) {
+ item = queue.Dequeue ();
+ processed_count++;
+ }
+
+ EnqueueDownstream (ProcessItem (item));
+ OnProcessedItem ();
+ }
+ } catch (ElementProcessCanceledException) {
+ OnCanceled ();
+ }
+
+ lock (this) {
+ processing = false;
+ }
+
+ if (threaded) {
+ thread_wait.Close ();
+ thread_wait = null;
+ }
+
+ OnFinished ();
+ }
+ }
+
+ protected virtual void CheckForCanceled ()
+ {
+ lock (this) {
+ if (canceled) {
+ throw new ElementProcessCanceledException ();
+ }
+ }
+ }
+
+ public void Cancel ()
+ {
+ lock (this) {
+ if (processing) {
+ canceled = true;
+ }
+
+ if (NextElement != null) {
+ NextElement.Cancel ();
+ }
+ }
+ }
+
+ public bool Processing {
+ get { lock (this) { return processing; } }
+ }
+
+ public bool Threaded {
+ get { return threaded; }
+ set {
+ if (processing) {
+ throw new InvalidOperationException ("Cannot change threading model while the element is processing");
+ }
+
+ threaded = value;
+ }
+ }
+
+ protected Queue<T> Queue {
+ get { return queue; }
+ }
+
+ private QueuePipelineElement<T> next_element;
+ internal QueuePipelineElement<T> NextElement {
+ get { return next_element; }
+ set { next_element = value; }
+ }
+ }
+}
diff --git a/lib/Hyena/src/Hyena/Hyena.Collections/RangeCollection.cs b/lib/Hyena/src/Hyena/Hyena.Collections/RangeCollection.cs
new file mode 100644
index 0000000..7973e18
--- /dev/null
+++ b/lib/Hyena/src/Hyena/Hyena.Collections/RangeCollection.cs
@@ -0,0 +1,438 @@
+//
+// RangeCollection.cs
+//
+// Author:
+// Aaron Bockover <abockover at novell.com>
+//
+// Copyright (C) 2007-2008 Novell, Inc.
+//
+// Permission is hereby granted, free of charge, to any person obtaining
+// a copy of this software and associated documentation files (the
+// "Software"), to deal in the Software without restriction, including
+// without limitation the rights to use, copy, modify, merge, publish,
+// distribute, sublicense, and/or sell copies of the Software, and to
+// permit persons to whom the Software is furnished to do so, subject to
+// the following conditions:
+//
+// The above copyright notice and this permission notice shall be
+// included in all copies or substantial portions of the Software.
+//
+// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
+// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
+// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
+// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+//
+
+using System;
+using System.Collections;
+
+#if NET_2_0
+using System.Collections.Generic;
+#endif
+
+#if NET_1_1
+namespace System.Collections
+#else
+namespace Hyena.Collections
+#endif
+{
+#if NET_1_1
+ internal
+#else
+ public
+#endif
+
+ class RangeCollection :
+ ICloneable,
+#if NET_2_0
+ ICollection<int>
+#else
+ ICollection
+#endif
+ {
+ public struct Range
+ {
+ private int start;
+ private int end;
+
+ public Range (int start, int end)
+ {
+ this.start = start;
+ this.end = end;
+ }
+
+ public override string ToString ()
+ {
+ return String.Format ("{0}-{1} ({2})", Start, End, Count);
+ }
+
+ public int Start {
+ get { return start; }
+ set { start = value; }
+ }
+
+ public int End {
+ get { return end; }
+ set { end = value; }
+ }
+
+ public int Count {
+ get { return End - Start + 1; }
+ }
+ }
+
+ private const int MIN_CAPACITY = 16;
+ private Range [] ranges;
+ private int range_count;
+ private int index_count;
+ private int generation;
+ private int [] indexes_cache;
+ private int indexes_cache_generation;
+
+ public RangeCollection ()
+ {
+ Clear ();
+ }
+
+#region Private Array Logic
+
+ private void Shift (int start, int delta)
+ {
+ if (delta < 0) {
+ start -= delta;
+ }
+
+ if (start < range_count) {
+ Array.Copy (ranges, start, ranges, start + delta, range_count - start);
+ }
+
+ range_count += delta;
+ }
+
+ private void EnsureCapacity (int growBy)
+ {
+ int new_capacity = ranges.Length == 0 ? 1 : ranges.Length;
+ int min_capacity = ranges.Length == 0 ? MIN_CAPACITY : ranges.Length + growBy;
+
+ while (new_capacity < min_capacity) {
+ new_capacity <<= 1;
+ }
+
+#if NET_2_0
+ Array.Resize (ref ranges, new_capacity);
+#else
+ Range [] new_ranges = new Range[new_capacity];
+ Array.Copy (ranges, 0, new_ranges, 0, ranges.Length);
+ ranges = new_ranges;
+#endif
+ }
+
+ private void Insert (int position, Range range)
+ {
+ if (range_count == ranges.Length) {
+ EnsureCapacity (1);
+ }
+
+ Shift (position, 1);
+ ranges[position] = range;
+ }
+
+ private void RemoveAt (int position)
+ {
+ Shift (position, -1);
+ Array.Clear (ranges, range_count, 1);
+ }
+
+#endregion
+
+#region Private Range Logic
+
+ private bool RemoveIndexFromRange (int index)
+ {
+ int range_index = FindRangeIndexForValue (index);
+ if (range_index < 0) {
+ return false;
+ }
+
+ Range range = ranges[range_index];
+ if (range.Start == index && range.End == index) {
+ RemoveAt (range_index);
+ } else if (range.Start == index) {
+ ranges[range_index].Start++;
+ } else if (range.End == index) {
+ ranges[range_index].End--;
+ } else {
+ Range split_range = new Range (index + 1, range.End);
+ ranges[range_index].End = index - 1;
+ Insert (range_index + 1, split_range);
+ }
+
+ index_count--;
+ return true;
+ }
+
+ private void InsertRange (Range range)
+ {
+ int position = FindInsertionPosition (range);
+ bool merged_left = MergeLeft (range, position);
+ bool merged_right = MergeRight (range, position);
+
+ if (!merged_left && !merged_right) {
+ Insert (position, range);
+ } else if (merged_left && merged_right) {
+ ranges[position - 1].End = ranges[position].End;
+ RemoveAt (position);
+ }
+ }
+
+ private bool MergeLeft (Range range, int position)
+ {
+ int left = position - 1;
+ if (left >= 0 && ranges[left].End + 1 == range.Start) {
+ ranges[left].End = range.Start;
+ return true;
+ }
+
+ return false;
+ }
+
+ private bool MergeRight (Range range, int position)
+ {
+ if (position < range_count && ranges[position].Start - 1 == range.End) {
+ ranges[position].Start = range.End;
+ return true;
+ }
+
+ return false;
+ }
+
+ private static int CompareRanges (Range a, Range b)
+ {
+ return (a.Start + (a.End - a.Start)).CompareTo (b.Start + (b.End - b.Start));
+ }
+
+ private int FindInsertionPosition (Range range)
+ {
+ int min = 0;
+ int max = range_count - 1;
+
+ while (min <= max) {
+ int mid = min + ((max - min) / 2);
+ int cmp = CompareRanges (ranges[mid], range);
+
+ if (cmp == 0) {
+ return mid;
+ } else if (cmp > 0) {
+ if (mid > 0 && CompareRanges (ranges[mid - 1], range) < 0) {
+ return mid;
+ }
+
+ max = mid - 1;
+ } else {
+ min = mid + 1;
+ }
+ }
+
+ return min;
+ }
+
+ public int FindRangeIndexForValue (int value)
+ {
+ int min = 0;
+ int max = range_count - 1;
+
+ while (min <= max) {
+ int mid = min + ((max - min) / 2);
+ Range range = ranges[mid];
+ if (value >= range.Start && value <= range.End) {
+ return mid; // In Range
+ } else if (value < range.Start) {
+ max = mid - 1; // Below Range
+ } else {
+ min = mid + 1; // Above Range
+ }
+ }
+
+ return ~min;
+ }
+
+#endregion
+
+#region Public RangeCollection API
+
+ public Range [] Ranges {
+ get {
+ Range [] ranges_copy = new Range[range_count];
+ Array.Copy (ranges, ranges_copy, range_count);
+ return ranges_copy;
+ }
+ }
+
+ public int RangeCount {
+ get { return range_count; }
+ }
+
+#if NET_2_0
+ [Obsolete ("Do not use the Indexes property in 2.0 profiles if enumerating only; Indexes allocates an array to avoid boxing in the 1.1 profile")]
+#endif
+ public int [] Indexes {
+ get {
+ if (indexes_cache != null && generation == indexes_cache_generation) {
+ return indexes_cache;
+ }
+
+ indexes_cache = new int[Count];
+ indexes_cache_generation = generation;
+
+ for (int i = 0, j = 0; i < range_count; i++) {
+ for (int k = ranges[i].Start; k <= ranges[i].End; j++, k++) {
+ indexes_cache[j] = k;
+ }
+ }
+
+ return indexes_cache;
+ }
+ }
+
+ public int IndexOf (int value)
+ {
+ int offset = 0;
+
+ foreach (Range range in ranges) {
+ if (value >= range.Start && value <= range.End) {
+ return offset + (value - range.Start);
+ }
+
+ offset += range.End - range.Start + 1;
+ }
+
+ return -1;
+ }
+
+ public int this[int index] {
+ get {
+ for (int i = 0, cuml_count = 0; i < range_count && index >= 0; i++) {
+ if (index < (cuml_count += ranges[i].Count)) {
+ return ranges[i].End - (cuml_count - index) + 1;
+ }
+ }
+
+ throw new IndexOutOfRangeException (index.ToString ());
+ }
+ }
+
+#endregion
+
+#region ICollection Implementation
+
+ public bool Add (int value)
+ {
+ if (!Contains (value)) {
+ generation++;
+ InsertRange (new Range (value, value));
+ index_count++;
+ return true;
+ }
+
+ return false;
+ }
+
+ void
+#if NET_2_0
+ ICollection<int>.
+#else
+ ICollection.
+#endif
+ Add (int value)
+ {
+ Add (value);
+ }
+
+ public bool Remove (int value)
+ {
+ generation++;
+ return RemoveIndexFromRange (value);
+ }
+
+ public void Clear ()
+ {
+ range_count = 0;
+ index_count = 0;
+ generation++;
+ ranges = new Range[MIN_CAPACITY];
+ }
+
+ public bool Contains (int value)
+ {
+ return FindRangeIndexForValue (value) >= 0;
+ }
+
+ public void CopyTo (int [] array, int index)
+ {
+ throw new NotImplementedException ();
+ }
+
+ public void CopyTo (Array array, int index)
+ {
+ throw new NotImplementedException ();
+ }
+
+ public int Count {
+ get { return index_count; }
+ }
+
+ public bool IsReadOnly {
+ get { return false; }
+ }
+
+#if !NET_2_0
+ public bool IsSynchronized {
+ get { return false; }
+ }
+
+ public object SyncRoot {
+ get { return this; }
+ }
+#endif
+
+#endregion
+
+#region ICloneable Implementation
+
+ public object Clone ()
+ {
+ return MemberwiseClone ();
+ }
+
+#endregion
+
+#region IEnumerable Implementation
+
+#if NET_2_0
+ public IEnumerator<int> GetEnumerator ()
+ {
+ for (int i = 0; i < range_count; i++) {
+ for (int j = ranges[i].Start; j <= ranges[i].End; j++) {
+ yield return j;
+ }
+ }
+ }
+
+ IEnumerator IEnumerable.GetEnumerator ()
+ {
+ return GetEnumerator ();
+ }
+#else
+ public IEnumerator GetEnumerator ()
+ {
+ return Indexes.GetEnumerator ();
+ }
+#endif
+
+#endregion
+
+ }
+}
diff --git a/lib/Hyena/src/Hyena/Hyena.Collections/Selection.cs b/lib/Hyena/src/Hyena/Hyena.Collections/Selection.cs
new file mode 100644
index 0000000..39a86b1
--- /dev/null
+++ b/lib/Hyena/src/Hyena/Hyena.Collections/Selection.cs
@@ -0,0 +1,250 @@
+//
+// Selection.cs
+//
+// Author:
+// Aaron Bockover <abockover at novell.com>
+// Gabriel Burt <gburt at novell.com>
+//
+// Copyright (C) 2007 Novell, Inc.
+//
+// Permission is hereby granted, free of charge, to any person obtaining
+// a copy of this software and associated documentation files (the
+// "Software"), to deal in the Software without restriction, including
+// without limitation the rights to use, copy, modify, merge, publish,
+// distribute, sublicense, and/or sell copies of the Software, and to
+// permit persons to whom the Software is furnished to do so, subject to
+// the following conditions:
+//
+// The above copyright notice and this permission notice shall be
+// included in all copies or substantial portions of the Software.
+//
+// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
+// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
+// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
+// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+//
+
+using System;
+using System.Collections;
+
+#if NET_2_0
+using System.Collections.Generic;
+#endif
+
+namespace Hyena.Collections
+{
+#if NET_1_1
+ internal
+#else
+ public
+#endif
+
+ class Selection :
+#if NET_2_0
+ IEnumerable<int>
+#else
+ IEnumerable
+#endif
+ {
+ RangeCollection ranges = new RangeCollection ();
+ private int max_index;
+ private int first_selected_index;
+
+ public event EventHandler Changed;
+ public event EventHandler FocusChanged;
+ private int focused_index = -1;
+
+ public Selection ()
+ {
+ }
+
+ public int FocusedIndex {
+ get { return focused_index; }
+ set {
+ focused_index = value;
+ var handler = FocusChanged;
+ if (handler != null) {
+ handler (this, EventArgs.Empty);
+ }
+ }
+ }
+
+ protected virtual void OnChanged ()
+ {
+ EventHandler handler = Changed;
+ if (handler != null) {
+ handler (this, EventArgs.Empty);
+ }
+ }
+
+ public void ToggleSelect (int index)
+ {
+ if (!ranges.Remove (index)) {
+ ranges.Add (index);
+ }
+
+ OnChanged ();
+ }
+
+ public void Select (int index)
+ {
+ ranges.Add (index);
+ if (Count == 1)
+ first_selected_index = index;
+ OnChanged ();
+ }
+
+ public void QuietSelect (int index)
+ {
+ ranges.Add (index);
+ if (Count == 1)
+ first_selected_index = index;
+ }
+
+ public void Unselect (int index)
+ {
+ if (ranges.Remove (index))
+ OnChanged ();
+ }
+
+ public void QuietUnselect (int index)
+ {
+ ranges.Remove (index);
+ }
+
+ public bool Contains(int index)
+ {
+ return ranges.Contains (index);
+ }
+
+ public void SelectFromFirst (int end, bool clear)
+ {
+ bool contains = Contains (first_selected_index);
+
+ if (clear)
+ Clear(false);
+
+ if (contains)
+ SelectRange (first_selected_index, end);
+ else
+ Select (end);
+ }
+
+ public void SelectRange (int a, int b)
+ {
+ int start = Math.Min (a, b);
+ int end = Math.Max (a, b);
+
+ int i;
+ for (i = start; i <= end; i++) {
+ ranges.Add (i);
+ }
+
+ if (Count == i)
+ first_selected_index = a;
+
+ OnChanged ();
+ }
+
+ public void UnselectRange (int a, int b)
+ {
+ int start = Math.Min (a, b);
+ int end = Math.Max (a, b);
+
+ int i;
+ for (i = start; i <= end; i++) {
+ ranges.Remove (i);
+ }
+
+ OnChanged ();
+ }
+
+ public virtual void SelectAll ()
+ {
+ SelectRange (0, max_index);
+ }
+
+ public void Clear ()
+ {
+ Clear (true);
+ }
+
+ public void Clear (bool raise)
+ {
+ if (ranges.Count <= 0) {
+ return;
+ }
+
+ ranges.Clear ();
+ if (raise)
+ OnChanged ();
+ }
+
+ public int Count {
+ get { return ranges.Count; }
+ }
+
+ public int MaxIndex {
+ set { max_index = value; }
+ get { return max_index; }
+ }
+
+ public virtual bool AllSelected {
+ get {
+ if (ranges.RangeCount == 1) {
+ RangeCollection.Range range = ranges.Ranges[0];
+ return range.Start == 0 && range.End == max_index;
+ }
+
+ return false;
+ }
+ }
+
+ public RangeCollection RangeCollection {
+ get { return ranges; }
+ }
+
+ public RangeCollection.Range [] Ranges {
+ get { return ranges.Ranges; }
+ }
+
+ public int FirstIndex {
+ get { return Count > 0 ? ranges[0] : -1; }
+ }
+
+ public int LastIndex {
+ get { return Count > 0 ? ranges[Count - 1]: -1; }
+ }
+
+#if NET_2_0
+ public IEnumerator<int> GetEnumerator ()
+ {
+ return ranges.GetEnumerator ();
+ }
+
+ IEnumerator IEnumerable.GetEnumerator ()
+ {
+ return GetEnumerator ();
+ }
+#else
+ public IEnumerator GetEnumerator ()
+ {
+ return ranges.GetEnumerator ();
+ }
+#endif
+
+ public override string ToString ()
+ {
+ System.Text.StringBuilder sb = new System.Text.StringBuilder ();
+ sb.AppendFormat ("<Selection Count={0}", Count);
+ foreach (RangeCollection.Range range in Ranges) {
+ sb.AppendFormat (" ({0}, {1})", range.Start, range.End);
+ }
+ sb.Append (">");
+ return sb.ToString ();
+ }
+ }
+}
diff --git a/lib/Hyena/src/Hyena/Hyena.Collections/SelectionProxy.cs b/lib/Hyena/src/Hyena/Hyena.Collections/SelectionProxy.cs
new file mode 100644
index 0000000..812fd54
--- /dev/null
+++ b/lib/Hyena/src/Hyena/Hyena.Collections/SelectionProxy.cs
@@ -0,0 +1,97 @@
+//
+// SelectionProxy.cs
+//
+// Author:
+// Gabriel Burt <gburt at novell.com>
+//
+// Copyright (C) 2007 Novell, Inc.
+//
+// Permission is hereby granted, free of charge, to any person obtaining
+// a copy of this software and associated documentation files (the
+// "Software"), to deal in the Software without restriction, including
+// without limitation the rights to use, copy, modify, merge, publish,
+// distribute, sublicense, and/or sell copies of the Software, and to
+// permit persons to whom the Software is furnished to do so, subject to
+// the following conditions:
+//
+// The above copyright notice and this permission notice shall be
+// included in all copies or substantial portions of the Software.
+//
+// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
+// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
+// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
+// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+//
+
+using System;
+
+namespace Hyena.Collections
+{
+ public class SelectionProxy
+ {
+ private Selection selection;
+
+ public event EventHandler Changed;
+ public event EventHandler SelectionChanged;
+ public event EventHandler FocusChanged;
+
+ public Selection Selection {
+ get { return selection; }
+ set {
+ if (selection == value)
+ return;
+
+ if (selection != null) {
+ selection.Changed -= HandleSelectionChanged;
+ selection.FocusChanged -= HandleSelectionFocusChanged;
+ }
+
+ selection = value;
+
+ if (selection != null) {
+ selection.Changed += HandleSelectionChanged;
+ selection.FocusChanged += HandleSelectionFocusChanged;
+ }
+
+ OnSelectionChanged ();
+ }
+ }
+
+ protected virtual void OnChanged ()
+ {
+ EventHandler handler = Changed;
+ if (handler != null) {
+ handler (selection, EventArgs.Empty);
+ }
+ }
+
+ protected virtual void OnFocusChanged ()
+ {
+ EventHandler handler = FocusChanged;
+ if (handler != null) {
+ handler (selection, EventArgs.Empty);
+ }
+ }
+
+ protected virtual void OnSelectionChanged ()
+ {
+ EventHandler handler = SelectionChanged;
+ if (handler != null) {
+ handler (selection, EventArgs.Empty);
+ }
+ }
+
+ private void HandleSelectionChanged (object o, EventArgs args)
+ {
+ OnChanged ();
+ }
+
+ private void HandleSelectionFocusChanged (object o, EventArgs args)
+ {
+ OnFocusChanged ();
+ }
+ }
+}
diff --git a/lib/Hyena/src/Hyena/Hyena.Collections/Tests/IntervalHeapTests.cs b/lib/Hyena/src/Hyena/Hyena.Collections/Tests/IntervalHeapTests.cs
new file mode 100644
index 0000000..4fdf49e
--- /dev/null
+++ b/lib/Hyena/src/Hyena/Hyena.Collections/Tests/IntervalHeapTests.cs
@@ -0,0 +1,126 @@
+//
+// IntervalHeapTests.cs
+//
+// Author:
+// Aaron Bockover <abockover at novell.com>
+//
+// Copyright (C) 2008 Novell, Inc.
+//
+// Permission is hereby granted, free of charge, to any person obtaining
+// a copy of this software and associated documentation files (the
+// "Software"), to deal in the Software without restriction, including
+// without limitation the rights to use, copy, modify, merge, publish,
+// distribute, sublicense, and/or sell copies of the Software, and to
+// permit persons to whom the Software is furnished to do so, subject to
+// the following conditions:
+//
+// The above copyright notice and this permission notice shall be
+// included in all copies or substantial portions of the Software.
+//
+// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
+// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
+// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
+// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+//
+
+#if ENABLE_TESTS
+
+using System;
+using NUnit.Framework;
+
+using Hyena.Collections;
+
+namespace Hyena.Collections.Tests
+{
+ [TestFixture]
+ public class IntervalHeapTests
+ {
+ private IntervalHeap<int> heap;
+ private static int [] heap_data = new int[2048];
+
+ [TestFixtureSetUp]
+ public void Init()
+ {
+ heap = new IntervalHeap<int>();
+ for(int i = 0; i < heap_data.Length; i++) {
+ heap_data[i] = i;
+ }
+ }
+
+ private void PopulateHeap()
+ {
+ heap.Clear();
+
+ foreach(int i in heap_data) {
+ heap.Push(i, 0);
+ }
+
+ Assert.AreEqual(heap.Count, heap_data.Length);
+ }
+
+ [Test]
+ public void PopHeap()
+ {
+ PopulateHeap();
+
+ int i = 0;
+ while(heap.Count > 0) {
+ heap.Pop();
+ i++;
+ }
+
+ Assert.AreEqual(i, heap_data.Length);
+ }
+
+ [Test]
+ public void IterateHeap()
+ {
+ PopulateHeap();
+
+ int i = 0;
+ foreach(int x in heap) {
+ Assert.AreEqual(x, heap_data[i++]);
+ }
+
+ Assert.AreEqual(i, heap.Count);
+ }
+
+ [Test]
+ public void RemoveItemsFromHeap()
+ {
+ IntervalHeap<int> h = new IntervalHeap<int>();
+ for(int i = 0; i < 20; i++) {
+ h.Push(i, i);
+ }
+
+ h.Remove(10);
+ h.Remove(2);
+ h.Remove(11);
+ h.Remove(9);
+ h.Remove(19);
+ h.Remove(0);
+
+ Assert.AreEqual(h.Pop(), 18);
+ Assert.AreEqual(h.Pop(), 17);
+ Assert.AreEqual(h.Pop(), 16);
+ Assert.AreEqual(h.Pop(), 15);
+ Assert.AreEqual(h.Pop(), 14);
+ Assert.AreEqual(h.Pop(), 13);
+ Assert.AreEqual(h.Pop(), 12);
+ Assert.AreEqual(h.Pop(), 8);
+ Assert.AreEqual(h.Pop(), 7);
+ Assert.AreEqual(h.Pop(), 6);
+ Assert.AreEqual(h.Pop(), 5);
+ Assert.AreEqual(h.Pop(), 4);
+ Assert.AreEqual(h.Pop(), 3);
+ Assert.AreEqual(h.Pop(), 1);
+
+ Assert.AreEqual(h.Count, 0);
+ }
+ }
+}
+
+#endif
diff --git a/lib/Hyena/src/Hyena/Hyena.Collections/Tests/QueuePipelineTests.cs b/lib/Hyena/src/Hyena/Hyena.Collections/Tests/QueuePipelineTests.cs
new file mode 100644
index 0000000..1b96058
--- /dev/null
+++ b/lib/Hyena/src/Hyena/Hyena.Collections/Tests/QueuePipelineTests.cs
@@ -0,0 +1,85 @@
+//
+// ElementQueueProcessor.cs
+//
+// Author:
+// Aaron Bockover <abockover at novell.com>
+//
+// Copyright (C) 2008 Novell, Inc.
+//
+// Permission is hereby granted, free of charge, to any person obtaining
+// a copy of this software and associated documentation files (the
+// "Software"), to deal in the Software without restriction, including
+// without limitation the rights to use, copy, modify, merge, publish,
+// distribute, sublicense, and/or sell copies of the Software, and to
+// permit persons to whom the Software is furnished to do so, subject to
+// the following conditions:
+//
+// The above copyright notice and this permission notice shall be
+// included in all copies or substantial portions of the Software.
+//
+// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
+// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
+// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
+// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+//
+
+#if ENABLE_TESTS
+
+using System;
+using System.Threading;
+using System.Collections.Generic;
+using NUnit.Framework;
+
+using Hyena.Collections;
+
+namespace Hyena.Collections.Tests
+{
+ [TestFixture]
+ public class QueuePipelineTests
+ {
+ private class FakeElement : QueuePipelineElement<object>
+ {
+ protected override object ProcessItem (object item)
+ {
+ return null;
+ }
+ }
+
+ [Test]
+ public void BuildPipeline ()
+ {
+ BuildPipeline (1);
+ BuildPipeline (2);
+ BuildPipeline (3);
+ BuildPipeline (10);
+ BuildPipeline (1000);
+ }
+
+ private void BuildPipeline (int count)
+ {
+ List<FakeElement> elements = new List<FakeElement> ();
+ for (int i = 0; i < count; i++) {
+ elements.Add (new FakeElement ());
+ }
+
+ QueuePipeline<object> qp = new QueuePipeline<object> ();
+ foreach (FakeElement s in elements) {
+ qp.AddElement (s);
+ }
+
+ Assert.AreEqual (elements[0], qp.FirstElement);
+
+ int index = 0;
+ FakeElement element = (FakeElement)qp.FirstElement;
+ while (element != null) {
+ Assert.AreEqual (elements[index++], element);
+ element = (FakeElement)element.NextElement;
+ }
+ }
+ }
+}
+
+#endif
diff --git a/lib/Hyena/src/Hyena/Hyena.Collections/Tests/RangeCollectionTests.cs b/lib/Hyena/src/Hyena/Hyena.Collections/Tests/RangeCollectionTests.cs
new file mode 100644
index 0000000..b461573
--- /dev/null
+++ b/lib/Hyena/src/Hyena/Hyena.Collections/Tests/RangeCollectionTests.cs
@@ -0,0 +1,498 @@
+//
+// RangeCollectionTests.cs
+//
+// Author:
+// Aaron Bockover <abockover at novell.com>
+//
+// Copyright (C) 2007-2008 Novell, Inc.
+//
+// Permission is hereby granted, free of charge, to any person obtaining
+// a copy of this software and associated documentation files (the
+// "Software"), to deal in the Software without restriction, including
+// without limitation the rights to use, copy, modify, merge, publish,
+// distribute, sublicense, and/or sell copies of the Software, and to
+// permit persons to whom the Software is furnished to do so, subject to
+// the following conditions:
+//
+// The above copyright notice and this permission notice shall be
+// included in all copies or substantial portions of the Software.
+//
+// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
+// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
+// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
+// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+//
+
+#if ENABLE_TESTS
+
+using System;
+using System.Collections.Generic;
+using NUnit.Framework;
+using Hyena.Collections;
+
+namespace Hyena.Collections.Tests
+{
+ [TestFixture]
+ public class RangeCollectionTests
+ {
+ [Test]
+ public void SingleRanges ()
+ {
+ _TestRanges (new RangeCollection (), new int [] { 1, 11, 5, 7, 15, 32, 3, 9, 34 });
+ }
+
+ [Test]
+ public void MergedRanges ()
+ {
+ RangeCollection range = new RangeCollection ();
+ int [] indexes = new int [] { 0, 7, 5, 9, 1, 6, 8, 2, 10, 12 };
+
+ _TestRanges (range, indexes);
+ Assert.AreEqual (3, range.RangeCount);
+
+ int i= 0;
+ foreach (RangeCollection.Range r in range.Ranges) {
+ switch (i++) {
+ case 0:
+ Assert.AreEqual (0, r.Start);
+ Assert.AreEqual (2, r.End);
+ break;
+ case 1:
+ Assert.AreEqual (5, r.Start);
+ Assert.AreEqual (10, r.End);
+ break;
+ case 2:
+ Assert.AreEqual (12, r.Start);
+ Assert.AreEqual (12, r.End);
+ break;
+ default:
+ Assert.Fail ("This should not be reached!");
+ break;
+ }
+ }
+ }
+
+ [Test]
+ public void LargeSequentialContains ()
+ {
+ RangeCollection range = new RangeCollection ();
+ int i, n = 1000000;
+
+ for (i = 0; i < n; i++) {
+ range.Add (i);
+ }
+
+ for (i = 0; i < n; i++) {
+ Assert.AreEqual (true, range.Contains (i));
+ }
+ }
+
+ [Test]
+ public void LargeSequential ()
+ {
+ RangeCollection range = new RangeCollection ();
+ int i, n = 1000000;
+
+ for (i = 0; i < n; i++) {
+ range.Add (i);
+ Assert.AreEqual (1, range.RangeCount);
+ }
+
+ Assert.AreEqual (n, range.Count);
+
+ i = 0;
+ foreach (int j in range) {
+ Assert.AreEqual (i++, j);
+ }
+
+ Assert.AreEqual (n, i);
+ }
+
+ [Test]
+ public void LargeNonAdjacent ()
+ {
+ RangeCollection range = new RangeCollection ();
+ int i, n = 1000000;
+
+ for (i = 0; i < n; i += 2) {
+ range.Add (i);
+ }
+
+ Assert.AreEqual (n / 2, range.Count);
+
+ i = 0;
+ foreach (int j in range) {
+ Assert.AreEqual (i, j);
+ i += 2;
+ }
+
+ Assert.AreEqual (n, i);
+ }
+
+ private static void _TestRanges (RangeCollection range, int [] indexes)
+ {
+ foreach (int index in indexes) {
+ range.Add (index);
+ }
+
+ Assert.AreEqual (indexes.Length, range.Count);
+
+ Array.Sort (indexes);
+
+ int i = 0;
+ foreach (int index in range) {
+ Assert.AreEqual (indexes[i++], index);
+ }
+
+ #pragma warning disable 0618
+
+ i = 0;
+ foreach (int index in range.Indexes) {
+ Assert.AreEqual (indexes[i++], index);
+ }
+
+ for (i = 0; i < range.Indexes.Length; i++) {
+ Assert.AreEqual (indexes[i], range.Indexes[i]);
+ }
+
+ #pragma warning restore 0618
+
+ }
+
+ [Test]
+ public void RemoveSingles ()
+ {
+ RangeCollection range = new RangeCollection ();
+ int [] indexes = new int [] { 0, 2, 4, 6, 8, 10, 12, 14 };
+ foreach (int index in indexes) {
+ range.Add (index);
+ }
+
+ foreach (int index in indexes) {
+ Assert.AreEqual (true, range.Remove (index));
+ }
+ }
+
+ [Test]
+ public void RemoveStarts ()
+ {
+ RangeCollection range = _SetupTestRemoveMerges ();
+
+ Assert.AreEqual (true, range.Contains (0));
+ range.Remove (0);
+ Assert.AreEqual (false, range.Contains (0));
+ Assert.AreEqual (4, range.RangeCount);
+
+ Assert.AreEqual (true, range.Contains (2));
+ range.Remove (2);
+ Assert.AreEqual (false, range.Contains (2));
+ Assert.AreEqual (4, range.RangeCount);
+ Assert.AreEqual (3, range.Ranges[0].Start);
+ Assert.AreEqual (5, range.Ranges[0].End);
+
+ Assert.AreEqual (true, range.Contains (14));
+ range.Remove (14);
+ Assert.AreEqual (false, range.Contains (14));
+ Assert.AreEqual (4, range.RangeCount);
+ Assert.AreEqual (15, range.Ranges[2].Start);
+ Assert.AreEqual (15, range.Ranges[2].End);
+ }
+
+ [Test]
+ public void RemoveEnds ()
+ {
+ RangeCollection range = _SetupTestRemoveMerges ();
+
+ Assert.AreEqual (true, range.Contains (5));
+ range.Remove (5);
+ Assert.AreEqual (false, range.Contains (5));
+ Assert.AreEqual (5, range.RangeCount);
+ Assert.AreEqual (2, range.Ranges[1].Start);
+ Assert.AreEqual (4, range.Ranges[1].End);
+
+ Assert.AreEqual (true, range.Contains (15));
+ range.Remove (15);
+ Assert.AreEqual (false, range.Contains (15));
+ Assert.AreEqual (5, range.RangeCount);
+ Assert.AreEqual (14, range.Ranges[3].Start);
+ Assert.AreEqual (14, range.Ranges[3].End);
+ }
+
+ [Test]
+ public void RemoveMids ()
+ {
+ RangeCollection range = _SetupTestRemoveMerges ();
+
+ Assert.AreEqual (5, range.RangeCount);
+ Assert.AreEqual (14, range.Ranges[3].Start);
+ Assert.AreEqual (15, range.Ranges[3].End);
+ Assert.AreEqual (true, range.Contains (9));
+ range.Remove (9);
+ Assert.AreEqual (false, range.Contains (9));
+ Assert.AreEqual (6, range.RangeCount);
+ Assert.AreEqual (7, range.Ranges[2].Start);
+ Assert.AreEqual (8, range.Ranges[2].End);
+ Assert.AreEqual (10, range.Ranges[3].Start);
+ Assert.AreEqual (11, range.Ranges[3].End);
+ Assert.AreEqual (14, range.Ranges[4].Start);
+ Assert.AreEqual (15, range.Ranges[4].End);
+ }
+
+ private static RangeCollection _SetupTestRemoveMerges ()
+ {
+ RangeCollection range = new RangeCollection ();
+ int [] indexes = new int [] {
+ 0,
+ 2, 3, 4, 5,
+ 7, 8, 9, 10, 11,
+ 14, 15,
+ 17, 18, 19
+ };
+
+ foreach (int index in indexes) {
+ range.Add (index);
+ }
+
+ int i = 0;
+ foreach (RangeCollection.Range r in range.Ranges) {
+ switch (i++) {
+ case 0:
+ Assert.AreEqual (0, r.Start);
+ Assert.AreEqual (0, r.End);
+ break;
+ case 1:
+ Assert.AreEqual (2, r.Start);
+ Assert.AreEqual (5, r.End);
+ break;
+ case 2:
+ Assert.AreEqual (7, r.Start);
+ Assert.AreEqual (11, r.End);
+ break;
+ case 3:
+ Assert.AreEqual (14, r.Start);
+ Assert.AreEqual (15, r.End);
+ break;
+ case 4:
+ Assert.AreEqual (17, r.Start);
+ Assert.AreEqual (19, r.End);
+ break;
+ default:
+ Assert.Fail ("Should never reach here");
+ break;
+ }
+ }
+
+ return range;
+ }
+
+ #pragma warning disable 0618
+
+ [Test]
+ public void IndexesCacheGeneration ()
+ {
+ RangeCollection range = new RangeCollection ();
+ int [] index_cache = range.Indexes;
+
+ Assert.AreSame (index_cache, range.Indexes);
+
+ range.Add (0);
+ range.Add (5);
+
+ if (index_cache == range.Indexes) {
+ Assert.Fail ("Indexes Cache not regenerated after change");
+ }
+
+ index_cache = range.Indexes;
+ range.Remove (0);
+ range.Add (3);
+
+ if (index_cache == range.Indexes) {
+ Assert.Fail ("Indexes Cache not regenerated after change");
+ }
+ }
+
+ #pragma warning restore 0618
+
+ [Test]
+ public void IndexOf ()
+ {
+ RangeCollection range = new RangeCollection ();
+
+ range.Add (0);
+ range.Add (2);
+ range.Add (3);
+ range.Add (5);
+ range.Add (6);
+ range.Add (7);
+ range.Add (8);
+ range.Add (11);
+ range.Add (12);
+ range.Add (13);
+
+ Assert.AreEqual (0, range.IndexOf (0));
+ Assert.AreEqual (1, range.IndexOf (2));
+ Assert.AreEqual (2, range.IndexOf (3));
+ Assert.AreEqual (3, range.IndexOf (5));
+ Assert.AreEqual (4, range.IndexOf (6));
+ Assert.AreEqual (5, range.IndexOf (7));
+ Assert.AreEqual (6, range.IndexOf (8));
+ Assert.AreEqual (7, range.IndexOf (11));
+ Assert.AreEqual (8, range.IndexOf (12));
+ Assert.AreEqual (9, range.IndexOf (13));
+ Assert.AreEqual (-1, range.IndexOf (99));
+ }
+
+ [Test]
+ public void IndexerForGoodIndexes ()
+ {
+ RangeCollection range = new RangeCollection ();
+
+ /*
+ Range Idx Value
+ 0-2 0 -> 0
+ 1 -> 1
+ 2 -> 2
+
+ 7-9 3 -> 7
+ 4 -> 8
+ 5 -> 9
+
+ 11-13 6 -> 11
+ 7 -> 12
+ 8 -> 13
+ */
+
+ range.Add (0);
+ range.Add (1);
+ range.Add (2);
+ range.Add (7);
+ range.Add (8);
+ range.Add (9);
+ range.Add (11);
+ range.Add (12);
+ range.Add (13);
+
+ Assert.AreEqual (0, range[0]);
+ Assert.AreEqual (1, range[1]);
+ Assert.AreEqual (2, range[2]);
+ Assert.AreEqual (7, range[3]);
+ Assert.AreEqual (8, range[4]);
+ Assert.AreEqual (9, range[5]);
+ Assert.AreEqual (11, range[6]);
+ Assert.AreEqual (12, range[7]);
+ Assert.AreEqual (13, range[8]);
+ }
+
+ [Test]
+ public void StressForGoodIndexes ()
+ {
+ Random random = new Random (0xbeef);
+ RangeCollection ranges = new RangeCollection ();
+ List<int> indexes = new List<int> ();
+
+ for (int i = 0, n = 75000; i < n; i++) {
+ int value = random.Next (n);
+ if (ranges.Add (value)) {
+ CollectionExtensions.SortedInsert (indexes, value);
+ }
+ }
+
+ Assert.AreEqual (indexes.Count, ranges.Count);
+ for (int i = 0; i < indexes.Count; i++) {
+ Assert.AreEqual (indexes[i], ranges[i]);
+ }
+ }
+
+ [Test]
+ [ExpectedException (typeof (IndexOutOfRangeException))]
+ public void IndexerForNegativeBadIndex ()
+ {
+ RangeCollection range = new RangeCollection ();
+ Assert.AreEqual (0, range[1]);
+ }
+
+ [Test]
+ [ExpectedException (typeof (IndexOutOfRangeException))]
+ public void IndexerForZeroBadIndex ()
+ {
+ RangeCollection range = new RangeCollection ();
+ Assert.AreEqual (0, range[0]);
+ }
+
+ [Test]
+ [ExpectedException (typeof (IndexOutOfRangeException))]
+ public void IndexerForPositiveBadIndex ()
+ {
+ RangeCollection range = new RangeCollection ();
+ range.Add (1);
+ Assert.AreEqual (0, range[1]);
+ }
+
+ [Test]
+ public void ExplicitInterface ()
+ {
+ ICollection<int> range = new RangeCollection ();
+ range.Add (1);
+ range.Add (2);
+ range.Add (5);
+ range.Add (6);
+
+ Assert.AreEqual (4, range.Count);
+ }
+
+ [Test]
+ public void NegativeIndices ()
+ {
+ RangeCollection c = new RangeCollection ();
+ c.Add (-10);
+ c.Add (-5);
+ c.Add (5);
+ c.Add (-8);
+ c.Add (10);
+ c.Add (-9);
+ c.Add (-11);
+
+ Assert.IsTrue (c.Contains(-10), "#1");
+ Assert.IsTrue (c.Contains(-5), "#2");
+ Assert.IsTrue (c.Contains(5), "#3");
+ Assert.IsTrue (c.Contains(-8), "#4");
+ Assert.AreEqual (4, c.RangeCount, "#5");
+ Assert.AreEqual (new RangeCollection.Range (-11, -8), c.Ranges[0], "#6");
+ Assert.AreEqual (new RangeCollection.Range (-5, -5), c.Ranges[1], "#7");
+ Assert.AreEqual (new RangeCollection.Range (5, 5), c.Ranges[2], "#8");
+ Assert.AreEqual (new RangeCollection.Range (10, 10), c.Ranges[3], "#9");
+
+ Assert.AreEqual (0, c.FindRangeIndexForValue (-9), "#10");
+ Assert.IsTrue (c.FindRangeIndexForValue (-7) < 0, "#11");
+ }
+
+ [Test]
+ public void IPAddressRanges ()
+ {
+ RangeCollection ranges = new RangeCollection ();
+
+ int start = GetAddress ("127.0.0.1");
+ int end = GetAddress ("127.0.0.50");
+
+ for (int i = start; i <= end; i++) {
+ ranges.Add (i);
+ }
+
+ Assert.IsTrue (ranges.Contains (GetAddress ("127.0.0.15")));
+ Assert.IsFalse (ranges.Contains (GetAddress ("127.0.0.0")));
+ Assert.IsFalse (ranges.Contains (GetAddress ("127.0.0.51")));
+ }
+
+ private static int GetAddress (string addressStr)
+ {
+ System.Net.IPAddress address = System.Net.IPAddress.Parse (addressStr);
+ return (int)(System.Net.IPAddress.NetworkToHostOrder (
+ BitConverter.ToInt32 (address.GetAddressBytes (), 0)) >> 32);
+ }
+ }
+}
+
+#endif
diff --git a/lib/Hyena/src/Hyena/Hyena.Collections/WriteLineElement.cs b/lib/Hyena/src/Hyena/Hyena.Collections/WriteLineElement.cs
new file mode 100644
index 0000000..3d3b37f
--- /dev/null
+++ b/lib/Hyena/src/Hyena/Hyena.Collections/WriteLineElement.cs
@@ -0,0 +1,46 @@
+//
+// WriteLineElement.cs
+//
+// Author:
+// Aaron Bockover <abockover at novell.com>
+//
+// Copyright (C) 2008 Novell, Inc.
+//
+// Permission is hereby granted, free of charge, to any person obtaining
+// a copy of this software and associated documentation files (the
+// "Software"), to deal in the Software without restriction, including
+// without limitation the rights to use, copy, modify, merge, publish,
+// distribute, sublicense, and/or sell copies of the Software, and to
+// permit persons to whom the Software is furnished to do so, subject to
+// the following conditions:
+//
+// The above copyright notice and this permission notice shall be
+// included in all copies or substantial portions of the Software.
+//
+// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
+// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
+// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
+// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+//
+
+using System;
+
+namespace Hyena.Collections
+{
+ public class WriteLineElement<T> : QueuePipelineElement<T> where T : class
+ {
+ public WriteLineElement ()
+ {
+ Threaded = false;
+ }
+
+ protected override T ProcessItem (T item)
+ {
+ Console.WriteLine (item);
+ return null;
+ }
+ }
+}
diff --git a/lib/Hyena/src/Hyena/Hyena.CommandLine/CommandLineParser.cs b/lib/Hyena/src/Hyena/Hyena.CommandLine/CommandLineParser.cs
new file mode 100644
index 0000000..b5e5e19
--- /dev/null
+++ b/lib/Hyena/src/Hyena/Hyena.CommandLine/CommandLineParser.cs
@@ -0,0 +1,173 @@
+//
+// CommandLineParser.cs
+//
+// Author:
+// Aaron Bockover <abockover at novell.com>
+//
+// Copyright (C) 2007 Novell, Inc.
+//
+// Permission is hereby granted, free of charge, to any person obtaining
+// a copy of this software and associated documentation files (the
+// "Software"), to deal in the Software without restriction, including
+// without limitation the rights to use, copy, modify, merge, publish,
+// distribute, sublicense, and/or sell copies of the Software, and to
+// permit persons to whom the Software is furnished to do so, subject to
+// the following conditions:
+//
+// The above copyright notice and this permission notice shall be
+// included in all copies or substantial portions of the Software.
+//
+// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
+// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
+// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
+// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+//
+
+using System;
+using System.Collections.Generic;
+using System.Collections.ObjectModel;
+
+namespace Hyena.CommandLine
+{
+ public class CommandLineParser
+ {
+ private struct Argument
+ {
+ public int Order;
+ public string Value;
+
+ public Argument (int order, string value)
+ {
+ Order = order;
+ Value = value;
+ }
+ }
+
+ private int generation;
+ private int sorted_args_generation;
+ private int offset;
+ private string [] arguments;
+ private KeyValuePair<string, Argument> [] sorted_args;
+ private Dictionary<string, Argument> parsed_arguments = new Dictionary<string, Argument> ();
+ private List<string> file_list = new List<string> ();
+
+ public CommandLineParser () : this (Environment.GetCommandLineArgs (), 1)
+ {
+ }
+
+ public CommandLineParser (string [] arguments, int offset)
+ {
+ this.arguments = arguments;
+ this.offset = offset;
+
+ Parse ();
+ }
+
+ private void Parse ()
+ {
+ for (int i = offset; i < arguments.Length; i++) {
+ if (!IsOption (arguments[i])) {
+ file_list.Add (arguments[i]);
+ continue;
+ }
+
+ string name = OptionName (arguments[i]);
+ string value = String.Empty;
+
+ int eq_offset = name.IndexOf ('=');
+ if (eq_offset > 1) {
+ value = name.Substring (eq_offset + 1);
+ name = name.Substring (0, eq_offset);
+ }
+
+ if (parsed_arguments.ContainsKey (name)) {
+ parsed_arguments[name] = new Argument (i, value);
+ } else {
+ parsed_arguments.Add (name, new Argument (i, value));
+ }
+ }
+ }
+
+ private bool IsOption (string argument)
+ {
+ return argument.Length > 2 && argument.Substring (0, 2) == "--";
+ }
+
+ private string OptionName (string argument)
+ {
+ return argument.Substring (2);
+ }
+
+ public bool Contains (string name)
+ {
+ return parsed_arguments.ContainsKey (name);
+ }
+
+ public bool ContainsStart (string start)
+ {
+ foreach (string argument in parsed_arguments.Keys) {
+ if (argument.StartsWith (start)) {
+ return true;
+ }
+ }
+ return false;
+ }
+
+ public string this[string name] {
+ get { return Contains (name) ? parsed_arguments[name].Value : String.Empty; }
+ set {
+ Argument arg = parsed_arguments[name];
+ arg.Value = value;
+ parsed_arguments[name] = arg;
+ generation++;
+ }
+ }
+
+ public IEnumerable<KeyValuePair<string, string>> Arguments {
+ get {
+ if (sorted_args == null || sorted_args_generation != generation) {
+ sorted_args = new KeyValuePair<string, Argument>[parsed_arguments.Count];
+ int i = 0;
+
+ foreach (KeyValuePair<string, Argument> arg in parsed_arguments) {
+ sorted_args[i++] = arg;
+ }
+
+ Array.Sort (sorted_args, delegate (KeyValuePair<string, Argument> a, KeyValuePair<string, Argument> b) {
+ return a.Value.Order.CompareTo (b.Value.Order);
+ });
+
+ sorted_args_generation = generation;
+ }
+
+ foreach (KeyValuePair<string, Argument> arg in sorted_args) {
+ yield return new KeyValuePair<string, string> (arg.Key, arg.Value.Value);
+ }
+ }
+ }
+
+ public ReadOnlyCollection<string> Files {
+ get { return new ReadOnlyCollection<string> (file_list); }
+ }
+
+ public override string ToString ()
+ {
+ System.Text.StringBuilder builder = new System.Text.StringBuilder ();
+
+ builder.Append ("Parsed Arguments\n");
+ foreach (KeyValuePair<string, Argument> argument in parsed_arguments) {
+ builder.AppendFormat (" {0} = [{1}]\n", argument.Key, argument.Value.Value);
+ }
+
+ builder.Append ("\nFile List\n");
+ foreach (string file in file_list) {
+ builder.AppendFormat ("{0}\n", file);
+ }
+
+ return builder.ToString ();
+ }
+ }
+}
diff --git a/lib/Hyena/src/Hyena/Hyena.CommandLine/Layout.cs b/lib/Hyena/src/Hyena/Hyena.CommandLine/Layout.cs
new file mode 100644
index 0000000..665c198
--- /dev/null
+++ b/lib/Hyena/src/Hyena/Hyena.CommandLine/Layout.cs
@@ -0,0 +1,197 @@
+//
+// Layout.cs
+//
+// Author:
+// Aaron Bockover <abockover at novell.com>
+//
+// Copyright (C) 2007 Novell, Inc.
+//
+// Permission is hereby granted, free of charge, to any person obtaining
+// a copy of this software and associated documentation files (the
+// "Software"), to deal in the Software without restriction, including
+// without limitation the rights to use, copy, modify, merge, publish,
+// distribute, sublicense, and/or sell copies of the Software, and to
+// permit persons to whom the Software is furnished to do so, subject to
+// the following conditions:
+//
+// The above copyright notice and this permission notice shall be
+// included in all copies or substantial portions of the Software.
+//
+// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
+// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
+// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
+// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+//
+
+using System;
+using System.Text;
+using System.Collections.Generic;
+
+namespace Hyena.CommandLine
+{
+ public class Layout
+ {
+ private List<LayoutGroup> groups;
+
+ public Layout (List<LayoutGroup> groups)
+ {
+ this.groups = groups;
+ }
+
+ public Layout (params LayoutGroup [] groups) : this (new List<LayoutGroup> (groups))
+ {
+ }
+
+ private int TerminalWidth {
+ get { return Console.WindowWidth <= 0 ? 80 : Console.WindowWidth; }
+ }
+
+ public string ToString (params string [] groupIds)
+ {
+ return ToString (GroupIdsToGroups (groupIds));
+ }
+
+ public override string ToString ()
+ {
+ return ToString (groups);
+ }
+
+ public string ToString (IEnumerable<LayoutGroup> groups)
+ {
+ StringBuilder builder = new StringBuilder ();
+
+ int min_spacing = 6;
+
+ int group_index = 0;
+ int group_count = 0;
+ int max_option_length = 0;
+ int max_description_length = 0;
+ int description_alignment = 0;
+
+ foreach (LayoutGroup group in groups) {
+ foreach (LayoutOption option in group) {
+ if (option.Name.Length > max_option_length) {
+ max_option_length = option.Name.Length;
+ }
+ }
+ }
+
+ max_description_length = TerminalWidth - max_option_length - min_spacing - 4;
+ description_alignment = max_option_length + min_spacing + 4;
+
+ IEnumerator<LayoutGroup> enumerator = groups.GetEnumerator ();
+ while (enumerator.MoveNext ()) {
+ group_count++;
+ }
+
+ foreach (LayoutGroup group in groups) {
+ if (group.Id != "default") {
+ builder.Append (group.Title);
+ builder.AppendLine ();
+ builder.AppendLine ();
+ }
+
+ for (int i = 0, n = group.Count; i < n; i++) {
+ int spacing = (max_option_length - group[i].Name.Length) + min_spacing;
+ builder.AppendFormat (" --{0}{2}{1}", group[i].Name,
+ WrapAlign (group[i].Description, max_description_length,
+ description_alignment, i == n - 1),
+ String.Empty.PadRight (spacing));
+ builder.AppendLine ();
+ }
+
+ if (group_index++ < group_count - 1) {
+ builder.AppendLine ();
+ }
+ }
+
+ return builder.ToString ();
+ }
+
+ public string LayoutLine (string str)
+ {
+ return WrapAlign (str, TerminalWidth, 0, true);
+ }
+
+ private static string WrapAlign (string str, int width, int align, bool last)
+ {
+ StringBuilder builder = new StringBuilder ();
+ bool did_wrap = false;
+
+ for (int i = 0, b = 0; i < str.Length; i++, b++) {
+ if (str[i] == ' ') {
+ int word_length = 0;
+ for (int j = i + 1; j < str.Length && str[j] != ' '; word_length++, j++);
+
+ if (b + word_length >= width) {
+ builder.AppendLine ();
+ builder.Append (String.Empty.PadRight (align));
+ b = 0;
+ did_wrap = true;
+ continue;
+ }
+ }
+
+ builder.Append (str[i]);
+ }
+
+ if (did_wrap && !last) {
+ builder.AppendLine ();
+ }
+
+ return builder.ToString ();
+ }
+
+ public void Add (LayoutGroup group)
+ {
+ groups.Add (group);
+ }
+
+ public void Remove (LayoutGroup group)
+ {
+ groups.Remove (group);
+ }
+
+ public void Remove (string groupId)
+ {
+ LayoutGroup group = FindGroup (groupId);
+ if (group != null) {
+ groups.Remove (group);
+ }
+ }
+
+ private LayoutGroup FindGroup (string id)
+ {
+ foreach (LayoutGroup group in groups) {
+ if (group.Id == id) {
+ return group;
+ }
+ }
+
+ return null;
+ }
+
+ private IEnumerable<LayoutGroup> GroupIdsToGroups (string [] groupIds)
+ {
+ foreach (string group_id in groupIds) {
+ LayoutGroup group = FindGroup (group_id);
+ if (group != null) {
+ yield return group;
+ }
+ }
+ }
+
+ public static LayoutOption Option (string name, string description)
+ {
+ return new LayoutOption (name, description);
+ }
+
+ public static LayoutGroup Group (string id, string title, params LayoutOption [] options)
+ {
+ return new LayoutGroup (id, title, options);
+ }
+ }
+}
diff --git a/lib/Hyena/src/Hyena/Hyena.CommandLine/LayoutGroup.cs b/lib/Hyena/src/Hyena/Hyena.CommandLine/LayoutGroup.cs
new file mode 100644
index 0000000..757f559
--- /dev/null
+++ b/lib/Hyena/src/Hyena/Hyena.CommandLine/LayoutGroup.cs
@@ -0,0 +1,117 @@
+//
+// LayoutGroup.cs
+//
+// Author:
+// Aaron Bockover <abockover at novell.com>
+//
+// Copyright (C) 2007 Novell, Inc.
+//
+// Permission is hereby granted, free of charge, to any person obtaining
+// a copy of this software and associated documentation files (the
+// "Software"), to deal in the Software without restriction, including
+// without limitation the rights to use, copy, modify, merge, publish,
+// distribute, sublicense, and/or sell copies of the Software, and to
+// permit persons to whom the Software is furnished to do so, subject to
+// the following conditions:
+//
+// The above copyright notice and this permission notice shall be
+// included in all copies or substantial portions of the Software.
+//
+// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
+// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
+// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
+// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+//
+
+using System;
+using System.Collections.Generic;
+
+namespace Hyena.CommandLine
+{
+ public class LayoutGroup : IEnumerable<LayoutOption>
+ {
+ private List<LayoutOption> options;
+ private string id;
+ private string title;
+
+ public LayoutGroup (string id, string title, List<LayoutOption> options)
+ {
+ this.id = id;
+ this.title = title;
+ this.options = options;
+ }
+
+ public LayoutGroup (string id, string title, params LayoutOption [] options)
+ : this (id, title, new List<LayoutOption> (options))
+ {
+ }
+
+ public IEnumerator<LayoutOption> GetEnumerator ()
+ {
+ return options.GetEnumerator ();
+ }
+
+ System.Collections.IEnumerator System.Collections.IEnumerable.GetEnumerator ()
+ {
+ return GetEnumerator ();
+ }
+
+ public void Add (LayoutOption option)
+ {
+ options.Add (option);
+ }
+
+ public void Add (string name, string description)
+ {
+ options.Add (new LayoutOption (name, description));
+ }
+
+ public void Remove (LayoutOption option)
+ {
+ options.Remove (option);
+ }
+
+ public void Remove (string optionName)
+ {
+ LayoutOption option = FindOption (optionName);
+ if (option != null) {
+ options.Remove (option);
+ }
+ }
+
+ private LayoutOption FindOption (string name)
+ {
+ foreach (LayoutOption option in options) {
+ if (option.Name == name) {
+ return option;
+ }
+ }
+
+ return null;
+ }
+
+ public LayoutOption this[int index] {
+ get { return options[index]; }
+ set { options[index] = value; }
+ }
+
+ public int Count {
+ get { return options.Count; }
+ }
+
+ public string Id {
+ get { return id; }
+ }
+
+ public string Title {
+ get { return title; }
+ }
+
+ public IList<LayoutOption> Options {
+ get { return options; }
+ }
+ }
+}
diff --git a/lib/Hyena/src/Hyena/Hyena.CommandLine/LayoutOption.cs b/lib/Hyena/src/Hyena/Hyena.CommandLine/LayoutOption.cs
new file mode 100644
index 0000000..8a01041
--- /dev/null
+++ b/lib/Hyena/src/Hyena/Hyena.CommandLine/LayoutOption.cs
@@ -0,0 +1,50 @@
+//
+// LayoutOption.cs
+//
+// Author:
+// Aaron Bockover <abockover at novell.com>
+//
+// Copyright (C) 2007 Novell, Inc.
+//
+// Permission is hereby granted, free of charge, to any person obtaining
+// a copy of this software and associated documentation files (the
+// "Software"), to deal in the Software without restriction, including
+// without limitation the rights to use, copy, modify, merge, publish,
+// distribute, sublicense, and/or sell copies of the Software, and to
+// permit persons to whom the Software is furnished to do so, subject to
+// the following conditions:
+//
+// The above copyright notice and this permission notice shall be
+// included in all copies or substantial portions of the Software.
+//
+// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
+// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
+// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
+// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+//
+
+namespace Hyena.CommandLine
+{
+ public class LayoutOption
+ {
+ private string name;
+ private string description;
+
+ public LayoutOption (string name, string description)
+ {
+ this.name = name;
+ this.description = description;
+ }
+
+ public string Name {
+ get { return name; }
+ }
+
+ public string Description {
+ get { return description; }
+ }
+ }
+}
diff --git a/lib/Hyena/src/Hyena/Hyena.Data/ArrayModelCache.cs b/lib/Hyena/src/Hyena/Hyena.Data/ArrayModelCache.cs
new file mode 100644
index 0000000..09d09f1
--- /dev/null
+++ b/lib/Hyena/src/Hyena/Hyena.Data/ArrayModelCache.cs
@@ -0,0 +1,76 @@
+//
+// ArrayModelCache.cs
+//
+// Author:
+// Gabriel Burt <gburt at novell.com>
+//
+// Copyright (C) 2007 Novell, Inc.
+//
+// Permission is hereby granted, free of charge, to any person obtaining
+// a copy of this software and associated documentation files (the
+// "Software"), to deal in the Software without restriction, including
+// without limitation the rights to use, copy, modify, merge, publish,
+// distribute, sublicense, and/or sell copies of the Software, and to
+// permit persons to whom the Software is furnished to do so, subject to
+// the following conditions:
+//
+// The above copyright notice and this permission notice shall be
+// included in all copies or substantial portions of the Software.
+//
+// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
+// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
+// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
+// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+//
+
+using System;
+
+namespace Hyena.Data
+{
+ public abstract class ArrayModelCache<T> : ModelCache<T> where T : ICacheableItem, new ()
+ {
+ protected T [] cache;
+ protected long offset = -1;
+ protected long limit = 0;
+
+ public ArrayModelCache (ICacheableModel model) : base (model)
+ {
+ cache = new T [model.FetchCount];
+ }
+
+ public override bool ContainsKey (long i)
+ {
+ return (i >= offset &&
+ i <= (offset + limit));
+ }
+
+ public override void Add (long i, T item)
+ {
+ if (cache.Length != model.FetchCount) {
+ cache = new T [model.FetchCount];
+ Clear ();
+ }
+
+ if (offset == -1 || i < offset || i >= (offset + cache.Length)) {
+ offset = i;
+ limit = 0;
+ }
+
+ cache [i - offset] = item;
+ limit++;
+ }
+
+ public override T this [long i] {
+ get { return cache [i - offset]; }
+ }
+
+ public override void Clear ()
+ {
+ offset = -1;
+ limit = 0;
+ }
+ }
+}
diff --git a/lib/Hyena/src/Hyena/Hyena.Data/BaseListModel.cs b/lib/Hyena/src/Hyena/Hyena.Data/BaseListModel.cs
new file mode 100644
index 0000000..43f6800
--- /dev/null
+++ b/lib/Hyena/src/Hyena/Hyena.Data/BaseListModel.cs
@@ -0,0 +1,107 @@
+//
+// BaseListModel.cs
+//
+// Author:
+// Gabriel Burt <gburt at novell.com>
+// Aaron Bockover <abockover at novell.com>
+//
+// Copyright (C) 2007-2008 Novell, Inc.
+//
+// Permission is hereby granted, free of charge, to any person obtaining
+// a copy of this software and associated documentation files (the
+// "Software"), to deal in the Software without restriction, including
+// without limitation the rights to use, copy, modify, merge, publish,
+// distribute, sublicense, and/or sell copies of the Software, and to
+// permit persons to whom the Software is furnished to do so, subject to
+// the following conditions:
+//
+// The above copyright notice and this permission notice shall be
+// included in all copies or substantial portions of the Software.
+//
+// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
+// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
+// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
+// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+//
+
+using System;
+
+using Hyena.Collections;
+
+namespace Hyena.Data
+{
+ public abstract class BaseListModel<T> : IListModel<T>
+ {
+ private Selection selection;
+
+ public event EventHandler Cleared;
+ public event EventHandler Reloaded;
+
+ public BaseListModel () : base ()
+ {
+ }
+
+ protected virtual void OnCleared ()
+ {
+ Selection.MaxIndex = Count - 1;
+
+ EventHandler handler = Cleared;
+ if(handler != null) {
+ handler(this, EventArgs.Empty);
+ }
+ }
+
+ protected virtual void OnReloaded ()
+ {
+ Selection.MaxIndex = Count - 1;
+
+ EventHandler handler = Reloaded;
+ if(handler != null) {
+ handler(this, EventArgs.Empty);
+ }
+ }
+
+ public void RaiseReloaded ()
+ {
+ OnReloaded ();
+ }
+
+ public abstract void Clear();
+
+ public abstract void Reload();
+
+ public abstract T this[int index] { get; }
+
+ public abstract int Count { get; }
+
+ public virtual object GetItem (int index)
+ {
+ return this[index];
+ }
+
+ public virtual Selection Selection {
+ get { return selection; }
+ protected set { selection = value; }
+ }
+
+ protected ModelSelection<T> model_selection;
+ public virtual ModelSelection<T> SelectedItems {
+ get {
+ return model_selection ?? (model_selection = new ModelSelection<T> (this, Selection));
+ }
+ }
+
+ public T FocusedItem {
+ get { return Selection.FocusedIndex == -1 ? default(T) : this[Selection.FocusedIndex]; }
+ }
+
+ private bool can_reorder = false;
+ public bool CanReorder {
+ get { return can_reorder; }
+ set { can_reorder = value; }
+ }
+ }
+}
diff --git a/lib/Hyena/src/Hyena/Hyena.Data/ColumnDescription.cs b/lib/Hyena/src/Hyena/Hyena.Data/ColumnDescription.cs
new file mode 100644
index 0000000..5ddbb98
--- /dev/null
+++ b/lib/Hyena/src/Hyena/Hyena.Data/ColumnDescription.cs
@@ -0,0 +1,121 @@
+//
+// ColumnDescription.cs
+//
+// Author:
+// Aaron Bockover <abockover at novell.com>
+//
+// Copyright (C) 2007 Novell, Inc.
+//
+// Permission is hereby granted, free of charge, to any person obtaining
+// a copy of this software and associated documentation files (the
+// "Software"), to deal in the Software without restriction, including
+// without limitation the rights to use, copy, modify, merge, publish,
+// distribute, sublicense, and/or sell copies of the Software, and to
+// permit persons to whom the Software is furnished to do so, subject to
+// the following conditions:
+//
+// The above copyright notice and this permission notice shall be
+// included in all copies or substantial portions of the Software.
+//
+// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
+// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
+// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
+// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+//
+
+using System;
+
+namespace Hyena.Data
+{
+ public class ColumnDescription
+ {
+ private string title;
+ private string long_title;
+ private double width;
+ private bool visible;
+ private string property;
+
+ private bool initialized;
+
+ public event EventHandler VisibilityChanged;
+ public event EventHandler WidthChanged;
+
+ public ColumnDescription (string property, string title, double width) : this (property, title, width, true)
+ {
+ }
+
+ public ColumnDescription (string property, string title, double width, bool visible)
+ {
+ this.property = property;
+ this.title = title;
+ this.long_title = title;
+ Width = width;
+ Visible = visible;
+ initialized = true;
+ }
+
+ protected virtual void OnVisibilityChanged ()
+ {
+ EventHandler handler = VisibilityChanged;
+ if (handler != null) {
+ handler (this, EventArgs.Empty);
+ }
+ }
+
+ protected virtual void OnWidthChanged ()
+ {
+ EventHandler handler = WidthChanged;
+ if (handler != null) {
+ handler (this, EventArgs.Empty);
+ }
+ }
+
+ public string Title {
+ get { return title; }
+ set { title = value; }
+ }
+
+ public string LongTitle {
+ get { return long_title; }
+ set { long_title = value; }
+ }
+
+ public double Width {
+ get { return width; }
+ set {
+ if (Double.IsNaN (value)) {
+ return;
+ }
+
+ double old = width;
+ width = value;
+
+ if (initialized && value != old) {
+ OnWidthChanged ();
+ }
+ }
+ }
+
+ public int OrderHint { get; set; }
+
+ public string Property {
+ get { return property; }
+ set { property = value; }
+ }
+
+ public bool Visible {
+ get { return visible; }
+ set {
+ bool old = Visible;
+ visible = value;
+
+ if(initialized && value != old) {
+ OnVisibilityChanged ();
+ }
+ }
+ }
+ }
+}
diff --git a/lib/Hyena/src/Hyena/Hyena.Data/DictionaryModelCache.cs b/lib/Hyena/src/Hyena/Hyena.Data/DictionaryModelCache.cs
new file mode 100644
index 0000000..8f2e15f
--- /dev/null
+++ b/lib/Hyena/src/Hyena/Hyena.Data/DictionaryModelCache.cs
@@ -0,0 +1,62 @@
+//
+// DictionaryModelCache.cs
+//
+// Author:
+// Gabriel Burt <gburt at novell.com>
+//
+// Copyright (C) 2007 Novell, Inc.
+//
+// Permission is hereby granted, free of charge, to any person obtaining
+// a copy of this software and associated documentation files (the
+// "Software"), to deal in the Software without restriction, including
+// without limitation the rights to use, copy, modify, merge, publish,
+// distribute, sublicense, and/or sell copies of the Software, and to
+// permit persons to whom the Software is furnished to do so, subject to
+// the following conditions:
+//
+// The above copyright notice and this permission notice shall be
+// included in all copies or substantial portions of the Software.
+//
+// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
+// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
+// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
+// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+//
+
+using System;
+using System.Collections.Generic;
+
+namespace Hyena.Data
+{
+ public abstract class DictionaryModelCache<T> : ModelCache<T> where T : ICacheableItem, new ()
+ {
+ protected Dictionary<long, T> cache;
+
+ public DictionaryModelCache (ICacheableModel model) : base (model)
+ {
+ cache = new Dictionary<long, T> (model.FetchCount);
+ }
+
+ public override bool ContainsKey (long i)
+ {
+ return cache.ContainsKey (i);
+ }
+
+ public override void Add (long i, T item)
+ {
+ cache.Add (i, item);
+ }
+
+ public override T this [long i] {
+ get { return cache [i]; }
+ }
+
+ public override void Clear ()
+ {
+ cache.Clear ();
+ }
+ }
+}
diff --git a/lib/Hyena/src/Hyena/Hyena.Data/ICacheableItem.cs b/lib/Hyena/src/Hyena/Hyena.Data/ICacheableItem.cs
new file mode 100644
index 0000000..e370a18
--- /dev/null
+++ b/lib/Hyena/src/Hyena/Hyena.Data/ICacheableItem.cs
@@ -0,0 +1,38 @@
+//
+// ICacheableItem.cs
+//
+// Author:
+// Gabriel Burt <gburt at novell.com>
+//
+// Copyright (C) 2008 Novell, Inc.
+//
+// Permission is hereby granted, free of charge, to any person obtaining
+// a copy of this software and associated documentation files (the
+// "Software"), to deal in the Software without restriction, including
+// without limitation the rights to use, copy, modify, merge, publish,
+// distribute, sublicense, and/or sell copies of the Software, and to
+// permit persons to whom the Software is furnished to do so, subject to
+// the following conditions:
+//
+// The above copyright notice and this permission notice shall be
+// included in all copies or substantial portions of the Software.
+//
+// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
+// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
+// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
+// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+//
+
+using Hyena.Data;
+
+namespace Hyena.Data
+{
+ public interface ICacheableItem
+ {
+ object CacheEntryId { get; set; }
+ long CacheModelId { get; set; }
+ }
+}
diff --git a/lib/Hyena/src/Hyena/Hyena.Data/ICacheableModel.cs b/lib/Hyena/src/Hyena/Hyena.Data/ICacheableModel.cs
new file mode 100644
index 0000000..8001dec
--- /dev/null
+++ b/lib/Hyena/src/Hyena/Hyena.Data/ICacheableModel.cs
@@ -0,0 +1,38 @@
+//
+// ICacheableModel.cs
+//
+// Author:
+// Gabriel Burt <gburt at novell.com>
+//
+// Copyright (C) 2007 Novell, Inc.
+//
+// Permission is hereby granted, free of charge, to any person obtaining
+// a copy of this software and associated documentation files (the
+// "Software"), to deal in the Software without restriction, including
+// without limitation the rights to use, copy, modify, merge, publish,
+// distribute, sublicense, and/or sell copies of the Software, and to
+// permit persons to whom the Software is furnished to do so, subject to
+// the following conditions:
+//
+// The above copyright notice and this permission notice shall be
+// included in all copies or substantial portions of the Software.
+//
+// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
+// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
+// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
+// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+//
+
+using System;
+using System.Collections.Generic;
+
+namespace Hyena.Data
+{
+ public interface ICacheableModel : ISelectable
+ {
+ int FetchCount { get; }
+ }
+}
\ No newline at end of file
diff --git a/lib/Hyena/src/Hyena/Hyena.Data/ICareAboutView.cs b/lib/Hyena/src/Hyena/Hyena.Data/ICareAboutView.cs
new file mode 100644
index 0000000..5418e2a
--- /dev/null
+++ b/lib/Hyena/src/Hyena/Hyena.Data/ICareAboutView.cs
@@ -0,0 +1,35 @@
+//
+// ICareAboutView.cs
+//
+// Author:
+// Aaron Bockover <abockover at novell.com>
+//
+// Copyright (C) 2007 Novell, Inc.
+//
+// Permission is hereby granted, free of charge, to any person obtaining
+// a copy of this software and associated documentation files (the
+// "Software"), to deal in the Software without restriction, including
+// without limitation the rights to use, copy, modify, merge, publish,
+// distribute, sublicense, and/or sell copies of the Software, and to
+// permit persons to whom the Software is furnished to do so, subject to
+// the following conditions:
+//
+// The above copyright notice and this permission notice shall be
+// included in all copies or substantial portions of the Software.
+//
+// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
+// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
+// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
+// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+//
+
+namespace Hyena.Data
+{
+ public interface ICareAboutView
+ {
+ int RowsInView { set; }
+ }
+}
diff --git a/lib/Hyena/src/Hyena/Hyena.Data/IFilterable.cs b/lib/Hyena/src/Hyena/Hyena.Data/IFilterable.cs
new file mode 100644
index 0000000..7161d32
--- /dev/null
+++ b/lib/Hyena/src/Hyena/Hyena.Data/IFilterable.cs
@@ -0,0 +1,36 @@
+//
+// IFilterable.cs
+//
+// Author:
+// Aaron Bockover <abockover at novell.com>
+//
+// Copyright (C) 2007 Novell, Inc.
+//
+// Permission is hereby granted, free of charge, to any person obtaining
+// a copy of this software and associated documentation files (the
+// "Software"), to deal in the Software without restriction, including
+// without limitation the rights to use, copy, modify, merge, publish,
+// distribute, sublicense, and/or sell copies of the Software, and to
+// permit persons to whom the Software is furnished to do so, subject to
+// the following conditions:
+//
+// The above copyright notice and this permission notice shall be
+// included in all copies or substantial portions of the Software.
+//
+// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
+// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
+// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
+// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+//
+
+namespace Hyena.Data
+{
+ public interface IFilterable
+ {
+ string UserQuery { get; set; }
+ int UnfilteredCount { get; }
+ }
+}
diff --git a/lib/Hyena/src/Hyena/Hyena.Data/IListModel.cs b/lib/Hyena/src/Hyena/Hyena.Data/IListModel.cs
new file mode 100644
index 0000000..1d0a773
--- /dev/null
+++ b/lib/Hyena/src/Hyena/Hyena.Data/IListModel.cs
@@ -0,0 +1,58 @@
+//
+// IListModel.cs
+//
+// Author:
+// Aaron Bockover <abockover at novell.com>
+//
+// Copyright (C) 2007 Novell, Inc.
+//
+// Permission is hereby granted, free of charge, to any person obtaining
+// a copy of this software and associated documentation files (the
+// "Software"), to deal in the Software without restriction, including
+// without limitation the rights to use, copy, modify, merge, publish,
+// distribute, sublicense, and/or sell copies of the Software, and to
+// permit persons to whom the Software is furnished to do so, subject to
+// the following conditions:
+//
+// The above copyright notice and this permission notice shall be
+// included in all copies or substantial portions of the Software.
+//
+// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
+// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
+// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
+// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+//
+
+using System;
+
+using Hyena.Collections;
+
+namespace Hyena.Data
+{
+ public interface IListModel : ISelectable
+ {
+ event EventHandler Cleared;
+ event EventHandler Reloaded;
+
+ void Clear ();
+ void Reload ();
+
+ int Count { get; }
+ bool CanReorder { get; }
+
+ object GetItem (int index);
+ }
+
+ public interface IListModel<T> : IListModel
+ {
+ T this[int index] { get; }
+ }
+
+ public interface IObjectListModel : IListModel<object>
+ {
+ ColumnDescription [] ColumnDescriptions { get; }
+ }
+}
\ No newline at end of file
diff --git a/lib/Hyena/src/Hyena/Hyena.Data/IPropertyStoreExpose.cs b/lib/Hyena/src/Hyena/Hyena.Data/IPropertyStoreExpose.cs
new file mode 100644
index 0000000..d8c4381
--- /dev/null
+++ b/lib/Hyena/src/Hyena/Hyena.Data/IPropertyStoreExpose.cs
@@ -0,0 +1,37 @@
+//
+// IPropertyStoreExpose.cs
+//
+// Author:
+// Aaron Bockover <abockover at novell.com>
+//
+// Copyright (C) 2007 Novell, Inc.
+//
+// Permission is hereby granted, free of charge, to any person obtaining
+// a copy of this software and associated documentation files (the
+// "Software"), to deal in the Software without restriction, including
+// without limitation the rights to use, copy, modify, merge, publish,
+// distribute, sublicense, and/or sell copies of the Software, and to
+// permit persons to whom the Software is furnished to do so, subject to
+// the following conditions:
+//
+// The above copyright notice and this permission notice shall be
+// included in all copies or substantial portions of the Software.
+//
+// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
+// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
+// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
+// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+//
+
+using System;
+
+namespace Hyena.Data
+{
+ public interface IPropertyStoreExpose
+ {
+ PropertyStore PropertyStore { get; }
+ }
+}
diff --git a/lib/Hyena/src/Hyena/Hyena.Data/ISelectable.cs b/lib/Hyena/src/Hyena/Hyena.Data/ISelectable.cs
new file mode 100644
index 0000000..b653a78
--- /dev/null
+++ b/lib/Hyena/src/Hyena/Hyena.Data/ISelectable.cs
@@ -0,0 +1,39 @@
+//
+// ISelectable.cs
+//
+// Author:
+// Aaron Bockover <abockover at novell.com>
+//
+// Copyright (C) 2007 Novell, Inc.
+//
+// Permission is hereby granted, free of charge, to any person obtaining
+// a copy of this software and associated documentation files (the
+// "Software"), to deal in the Software without restriction, including
+// without limitation the rights to use, copy, modify, merge, publish,
+// distribute, sublicense, and/or sell copies of the Software, and to
+// permit persons to whom the Software is furnished to do so, subject to
+// the following conditions:
+//
+// The above copyright notice and this permission notice shall be
+// included in all copies or substantial portions of the Software.
+//
+// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
+// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
+// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
+// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+//
+
+using System;
+
+using Hyena.Collections;
+
+namespace Hyena.Data
+{
+ public interface ISelectable
+ {
+ Selection Selection { get; }
+ }
+}
diff --git a/lib/Hyena/src/Hyena/Hyena.Data/ISortable.cs b/lib/Hyena/src/Hyena/Hyena.Data/ISortable.cs
new file mode 100644
index 0000000..a838989
--- /dev/null
+++ b/lib/Hyena/src/Hyena/Hyena.Data/ISortable.cs
@@ -0,0 +1,36 @@
+//
+// ISortable.cs
+//
+// Author:
+// Aaron Bockover <abockover at novell.com>
+//
+// Copyright (C) 2007 Novell, Inc.
+//
+// Permission is hereby granted, free of charge, to any person obtaining
+// a copy of this software and associated documentation files (the
+// "Software"), to deal in the Software without restriction, including
+// without limitation the rights to use, copy, modify, merge, publish,
+// distribute, sublicense, and/or sell copies of the Software, and to
+// permit persons to whom the Software is furnished to do so, subject to
+// the following conditions:
+//
+// The above copyright notice and this permission notice shall be
+// included in all copies or substantial portions of the Software.
+//
+// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
+// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
+// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
+// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+//
+
+namespace Hyena.Data
+{
+ public interface ISortable
+ {
+ bool Sort (ISortableColumn column);
+ ISortableColumn SortColumn { get; }
+ }
+}
diff --git a/lib/Hyena/src/Hyena/Hyena.Data/ISortableColumn.cs b/lib/Hyena/src/Hyena/Hyena.Data/ISortableColumn.cs
new file mode 100644
index 0000000..86689be
--- /dev/null
+++ b/lib/Hyena/src/Hyena/Hyena.Data/ISortableColumn.cs
@@ -0,0 +1,38 @@
+//
+// ISortableColumn.cs
+//
+// Author:
+// Aaron Bockover <abockover at novell.com>
+//
+// Copyright (C) 2007 Novell, Inc.
+//
+// Permission is hereby granted, free of charge, to any person obtaining
+// a copy of this software and associated documentation files (the
+// "Software"), to deal in the Software without restriction, including
+// without limitation the rights to use, copy, modify, merge, publish,
+// distribute, sublicense, and/or sell copies of the Software, and to
+// permit persons to whom the Software is furnished to do so, subject to
+// the following conditions:
+//
+// The above copyright notice and this permission notice shall be
+// included in all copies or substantial portions of the Software.
+//
+// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
+// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
+// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
+// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+//
+
+namespace Hyena.Data
+{
+ public interface ISortableColumn
+ {
+ string SortKey { get; }
+ SortType SortType { get; set; }
+ Hyena.Query.QueryField Field { get; }
+ string Id { get; }
+ }
+}
diff --git a/lib/Hyena/src/Hyena/Hyena.Data/MemoryListModel.cs b/lib/Hyena/src/Hyena/Hyena.Data/MemoryListModel.cs
new file mode 100644
index 0000000..cdc2822
--- /dev/null
+++ b/lib/Hyena/src/Hyena/Hyena.Data/MemoryListModel.cs
@@ -0,0 +1,101 @@
+//
+// MemoryListModel.cs
+//
+// Author:
+// Gabriel Burt <gburt at novell.com>
+//
+// Copyright (C) 2009 Novell, Inc.
+//
+// Permission is hereby granted, free of charge, to any person obtaining
+// a copy of this software and associated documentation files (the
+// "Software"), to deal in the Software without restriction, including
+// without limitation the rights to use, copy, modify, merge, publish,
+// distribute, sublicense, and/or sell copies of the Software, and to
+// permit persons to whom the Software is furnished to do so, subject to
+// the following conditions:
+//
+// The above copyright notice and this permission notice shall be
+// included in all copies or substantial portions of the Software.
+//
+// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
+// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
+// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
+// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+//
+
+using System;
+using System.Collections.Generic;
+
+using Hyena.Collections;
+
+namespace Hyena.Data
+{
+ public class MemoryListModel<T> : BaseListModel<T>
+ {
+ private List<T> list;
+
+ public MemoryListModel ()
+ {
+ list = new List<T> ();
+ Selection = new Selection ();
+ }
+
+ public override void Clear ()
+ {
+ lock (list) {
+ list.Clear ();
+ }
+
+ OnCleared ();
+ }
+
+ public override void Reload ()
+ {
+ OnReloaded ();
+ }
+
+ public int IndexOf (T item)
+ {
+ lock (list) {
+ return list.IndexOf (item);
+ }
+ }
+
+ public void Add (T item)
+ {
+ lock (list) {
+ list.Add (item);
+ }
+ }
+
+ public void Remove (T item)
+ {
+ lock (list) {
+ list.Remove (item);
+ }
+ }
+
+ public override T this[int index] {
+ get {
+ lock (list) {
+ if (list.Count <= index || index < 0) {
+ return default (T);
+ }
+
+ return list[index];
+ }
+ }
+ }
+
+ public override int Count {
+ get {
+ lock (list) {
+ return list.Count;
+ }
+ }
+ }
+ }
+}
diff --git a/lib/Hyena/src/Hyena/Hyena.Data/ModelCache.cs b/lib/Hyena/src/Hyena/Hyena.Data/ModelCache.cs
new file mode 100644
index 0000000..fe610b2
--- /dev/null
+++ b/lib/Hyena/src/Hyena/Hyena.Data/ModelCache.cs
@@ -0,0 +1,69 @@
+//
+// ModelCache.cs
+//
+// Author:
+// Gabriel Burt <gburt at novell.com>
+//
+// Copyright (C) 2007 Novell, Inc.
+//
+// Permission is hereby granted, free of charge, to any person obtaining
+// a copy of this software and associated documentation files (the
+// "Software"), to deal in the Software without restriction, including
+// without limitation the rights to use, copy, modify, merge, publish,
+// distribute, sublicense, and/or sell copies of the Software, and to
+// permit persons to whom the Software is furnished to do so, subject to
+// the following conditions:
+//
+// The above copyright notice and this permission notice shall be
+// included in all copies or substantial portions of the Software.
+//
+// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
+// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
+// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
+// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+//
+
+using System;
+using System.Collections.Generic;
+
+namespace Hyena.Data
+{
+ public abstract class ModelCache<T> where T : ICacheableItem, new ()
+ {
+ protected ICacheableModel model;
+
+ public ModelCache (ICacheableModel model)
+ {
+ this.model = model;
+ }
+
+ public virtual T GetValue (long index)
+ {
+ lock (this) {
+ if (ContainsKey (index))
+ return this[index];
+
+ FetchSet (index, model.FetchCount);
+
+ if (ContainsKey (index))
+ return this[index];
+
+ return default (T);
+ }
+ }
+
+ // Responsible for fetching a set of items and placing them in the cache
+ protected abstract void FetchSet (long offset, long limit);
+
+ // Regenerate the cache
+ public abstract void Reload ();
+
+ public abstract bool ContainsKey (long i);
+ public abstract void Add (long i, T item);
+ public abstract T this[long i] { get; }
+ public abstract void Clear ();
+ }
+}
diff --git a/lib/Hyena/src/Hyena/Hyena.Data/ModelSelection.cs b/lib/Hyena/src/Hyena/Hyena.Data/ModelSelection.cs
new file mode 100644
index 0000000..35eb130
--- /dev/null
+++ b/lib/Hyena/src/Hyena/Hyena.Data/ModelSelection.cs
@@ -0,0 +1,89 @@
+//
+// ModelSelection.cs.cs
+//
+// Author:
+// Gabriel Burt <gburt at novell.com>
+//
+// Copyright (C) 2007 Novell, Inc.
+//
+// Permission is hereby granted, free of charge, to any person obtaining
+// a copy of this software and associated documentation files (the
+// "Software"), to deal in the Software without restriction, including
+// without limitation the rights to use, copy, modify, merge, publish,
+// distribute, sublicense, and/or sell copies of the Software, and to
+// permit persons to whom the Software is furnished to do so, subject to
+// the following conditions:
+//
+// The above copyright notice and this permission notice shall be
+// included in all copies or substantial portions of the Software.
+//
+// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
+// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
+// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
+// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+//
+
+using System;
+using System.Collections;
+using System.Collections.Generic;
+
+using Hyena.Collections;
+
+namespace Hyena.Data
+{
+ //public class ModelSelection<T> : IList<T>
+ public class ModelSelection<T> : IEnumerable<T>
+ {
+ private IListModel<T> model;
+ private Selection selection;
+
+#region Properties
+
+ /*public T this [int index] {
+ get {
+ if (index >= selection.Count)
+ throw new ArgumentOutOfRangeException ("index");
+ //return model [selection [index]];
+ return default(T);
+ }
+ }*/
+
+ public int Count {
+ get { return selection.Count; }
+ }
+
+#endregion
+
+ public ModelSelection (IListModel<T> model, Selection selection)
+ {
+ this.model = model;
+ this.selection = selection;
+ }
+
+#region Methods
+
+ /*public int IndexOf (T value)
+ {
+ //selection.IndexOf (model.IndexOf (value));
+ return -1;
+ }*/
+
+ public IEnumerator<T> GetEnumerator ()
+ {
+ foreach (int i in selection) {
+ yield return model [i];
+ }
+ }
+
+ IEnumerator IEnumerable.GetEnumerator ()
+ {
+ return GetEnumerator ();
+ }
+
+#endregion
+
+ }
+}
diff --git a/lib/Hyena/src/Hyena/Hyena.Data/PropertyStore.cs b/lib/Hyena/src/Hyena/Hyena.Data/PropertyStore.cs
new file mode 100644
index 0000000..60a5af8
--- /dev/null
+++ b/lib/Hyena/src/Hyena/Hyena.Data/PropertyStore.cs
@@ -0,0 +1,221 @@
+//
+// PropertyStore.cs
+//
+// Author:
+// Aaron Bockover <abockover at novell.com>
+//
+// Copyright (C) 2007 Novell, Inc.
+//
+// Permission is hereby granted, free of charge, to any person obtaining
+// a copy of this software and associated documentation files (the
+// "Software"), to deal in the Software without restriction, including
+// without limitation the rights to use, copy, modify, merge, publish,
+// distribute, sublicense, and/or sell copies of the Software, and to
+// permit persons to whom the Software is furnished to do so, subject to
+// the following conditions:
+//
+// The above copyright notice and this permission notice shall be
+// included in all copies or substantial portions of the Software.
+//
+// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
+// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
+// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
+// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+//
+
+using System;
+using System.Collections.Generic;
+
+namespace Hyena.Data
+{
+ public delegate void PropertyChangeEventHandler(object o, PropertyChangeEventArgs args);
+
+ public class PropertyChangeEventArgs : EventArgs
+ {
+ private string property_name;
+ private bool added;
+ private bool removed;
+ private object old_value;
+ private object new_value;
+
+ public PropertyChangeEventArgs(string propertyName, bool added, bool removed, object oldValue, object newValue)
+ {
+ this.property_name = propertyName;
+ this.added = added;
+ this.removed = removed;
+ this.old_value = oldValue;
+ this.new_value = newValue;
+ }
+
+ public string PropertyName {
+ get { return property_name; }
+ }
+
+ public bool Added {
+ get { return added; }
+ }
+
+ public bool Removed {
+ get { return removed; }
+ }
+
+ public object OldValue {
+ get { return old_value; }
+ }
+
+ public object NewValue {
+ get { return new_value; }
+ }
+ }
+
+ public class PropertyStore
+ {
+ private Dictionary<string, object> object_store;
+
+ public event PropertyChangeEventHandler PropertyChanged;
+
+ public PropertyStore()
+ {
+ }
+
+ protected virtual void OnPropertyChanged(string propertyName, bool added, bool removed,
+ object oldValue, object newValue)
+ {
+ PropertyChangeEventHandler handler = PropertyChanged;
+ if(handler != null) {
+ PropertyChangeEventArgs args = new PropertyChangeEventArgs(propertyName,
+ added, removed, oldValue, newValue);
+ handler(this, args);
+ }
+ }
+
+ public void Remove(string name)
+ {
+ bool raise = false;
+ object old_value = null;
+ lock(this) {
+ if(object_store.ContainsKey(name)) {
+ old_value = object_store[name];
+ object_store.Remove(name);
+ raise = true;
+ }
+ }
+
+ if (raise) {
+ OnPropertyChanged(name, false, true, old_value, null);
+ }
+ }
+
+ public void RemoveStartingWith (string prefix)
+ {
+ lock(this) {
+ Queue<string> to_remove = null;
+
+ foreach (KeyValuePair<string, object> item in object_store) {
+ if (item.Key.StartsWith (prefix)) {
+ if (to_remove == null) {
+ to_remove = new Queue<string> ();
+ }
+
+ to_remove.Enqueue (item.Key);
+ }
+ }
+
+ while (to_remove != null && to_remove.Count > 0) {
+ Remove (to_remove.Dequeue ());
+ }
+ }
+ }
+
+ public void Set<T>(string name, T value)
+ {
+ bool added = false;
+ T old_value = default(T);
+ lock(this) {
+ if(object_store == null) {
+ object_store = new Dictionary<string, object>();
+ }
+
+ if(object_store.ContainsKey(name)) {
+ old_value = (T)object_store[name];
+ if ((value == null && old_value == null) || value.Equals (old_value))
+ return;
+ object_store[name] = value;
+ } else {
+ added = true;
+ object_store.Add(name, value);
+ }
+ }
+ OnPropertyChanged(name, added, false, old_value, value);
+ }
+
+ public T Get<T>(string name)
+ {
+ lock(this) {
+ if(object_store != null && object_store.ContainsKey(name)) {
+ return (T)object_store[name];
+ }
+
+ return default(T);
+ }
+ }
+
+ public int GetInteger(string name)
+ {
+ return Get<int>(name);
+ }
+
+ public void SetInteger(string name, int value)
+ {
+ Set<int>(name, value);
+ }
+
+ // No longer used, since it causes strings to be marked for translation
+ /*public string GetString(string name)
+ {
+ return Get<string>(name);
+ }*/
+
+ public void SetString(string name, string value)
+ {
+ Set<string>(name, value);
+ }
+
+ public string [] GetStringList(string name)
+ {
+ return Get<string []>(name);
+ }
+
+ public void SetStringList(string name, params string [] value)
+ {
+ Set<string []>(name, value);
+ }
+
+ public bool GetBoolean(string name)
+ {
+ return Get<bool>(name);
+ }
+
+ public void SetBoolean(string name, bool value)
+ {
+ Set<bool>(name, value);
+ }
+
+ public bool Contains(string name)
+ {
+ lock(this) {
+ return object_store != null && object_store.ContainsKey(name);
+ }
+ }
+
+ public Type GetType(string name)
+ {
+ lock(this) {
+ return Contains(name) ? object_store[name].GetType() : null;
+ }
+ }
+ }
+}
diff --git a/lib/Hyena/src/Hyena/Hyena.Data/SortType.cs b/lib/Hyena/src/Hyena/Hyena.Data/SortType.cs
new file mode 100644
index 0000000..fb8bd2e
--- /dev/null
+++ b/lib/Hyena/src/Hyena/Hyena.Data/SortType.cs
@@ -0,0 +1,37 @@
+//
+// SortType.cs
+//
+// Author:
+// Aaron Bockover <abockover at novell.com>
+//
+// Copyright (C) 2007 Novell, Inc.
+//
+// Permission is hereby granted, free of charge, to any person obtaining
+// a copy of this software and associated documentation files (the
+// "Software"), to deal in the Software without restriction, including
+// without limitation the rights to use, copy, modify, merge, publish,
+// distribute, sublicense, and/or sell copies of the Software, and to
+// permit persons to whom the Software is furnished to do so, subject to
+// the following conditions:
+//
+// The above copyright notice and this permission notice shall be
+// included in all copies or substantial portions of the Software.
+//
+// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
+// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
+// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
+// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+//
+
+namespace Hyena.Data
+{
+ public enum SortType
+ {
+ None,
+ Ascending,
+ Descending
+ }
+}
diff --git a/lib/Hyena/src/Hyena/Hyena.Jobs/Job.cs b/lib/Hyena/src/Hyena/Hyena.Jobs/Job.cs
new file mode 100644
index 0000000..0fdaa44
--- /dev/null
+++ b/lib/Hyena/src/Hyena/Hyena.Jobs/Job.cs
@@ -0,0 +1,315 @@
+//
+// Job.cs
+//
+// Author:
+// Gabriel Burt <gburt at novell.com>
+//
+// Copyright (C) 2009 Novell, Inc.
+//
+// Permission is hereby granted, free of charge, to any person obtaining
+// a copy of this software and associated documentation files (the
+// "Software"), to deal in the Software without restriction, including
+// without limitation the rights to use, copy, modify, merge, publish,
+// distribute, sublicense, and/or sell copies of the Software, and to
+// permit persons to whom the Software is furnished to do so, subject to
+// the following conditions:
+//
+// The above copyright notice and this permission notice shall be
+// included in all copies or substantial portions of the Software.
+//
+// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
+// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
+// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
+// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+//
+
+using System;
+using System.Linq;
+using System.Threading;
+using System.Collections.Generic;
+using System.Collections.ObjectModel;
+
+namespace Hyena.Jobs
+{
+ public enum JobState {
+ None,
+ Scheduled,
+ Running,
+ Paused,
+ Cancelled,
+ Completed
+ };
+
+ public class Job
+ {
+ public event EventHandler Updated;
+ public event EventHandler Finished;
+ public event EventHandler CancelRequested;
+
+ private int update_freeze_ref;
+ private JobState state = JobState.None;
+
+ private ManualResetEvent pause_event;
+ private DateTime created_at = DateTime.Now;
+ private TimeSpan run_time = TimeSpan.Zero;
+ private Object sync = new Object ();
+
+ public bool IsCancelRequested { get; private set; }
+
+#region Internal Properties
+
+ internal bool IsScheduled {
+ get { return state == JobState.Scheduled; }
+ }
+
+ internal bool IsRunning {
+ get { return state == JobState.Running; }
+ }
+
+ internal bool IsPaused {
+ get { return state == JobState.Paused; }
+ }
+
+ public bool IsFinished {
+ get {
+ lock (sync) {
+ return state == JobState.Cancelled || state == JobState.Completed;
+ }
+ }
+ }
+
+ internal DateTime CreatedAt {
+ get { return created_at; }
+ }
+
+ internal TimeSpan RunTime {
+ get { return run_time; }
+ }
+
+#endregion
+
+#region Scheduler Methods
+
+ internal void Start ()
+ {
+ Log.Debug ("Starting", Title);
+ lock (sync) {
+ if (state != JobState.Scheduled && state != JobState.Paused) {
+ Log.DebugFormat ("Job {0} in {1} state is not runnable", Title, state);
+ return;
+ }
+
+ State = JobState.Running;
+
+ if (pause_event != null) {
+ pause_event.Set ();
+ }
+
+ RunJob ();
+ }
+ }
+
+ internal void Cancel ()
+ {
+ lock (sync) {
+ if (!IsFinished) {
+ IsCancelRequested = true;
+ State = JobState.Cancelled;
+ EventHandler handler = CancelRequested;
+ if (handler != null) {
+ handler (this, EventArgs.Empty);
+ }
+ }
+ }
+ Log.Debug ("Canceled", Title);
+ }
+
+ internal void Preempt ()
+ {
+ Log.Debug ("Preemptd", Title);
+ Pause (false);
+ }
+
+ internal bool Pause ()
+ {
+ Log.Debug ("Pausing ", Title);
+ return Pause (true);
+ }
+
+ private bool Pause (bool unschedule)
+ {
+ lock (sync) {
+ if (IsFinished) {
+ Log.DebugFormat ("Job {0} in {1} state is not pausable", Title, state);
+ return false;
+ }
+
+ State = unschedule ? JobState.Paused : JobState.Scheduled;
+ if (pause_event != null) {
+ pause_event.Reset ();
+ }
+ }
+
+ return true;
+ }
+
+#endregion
+
+ private string title;
+ private string status;
+ private string [] icon_names;
+ private double progress;
+
+#region Public Properties
+
+ public string Title {
+ get { return title; }
+ set {
+ title = value;
+ OnUpdated ();
+ }
+ }
+
+ public string Status {
+ get { return status; }
+ set {
+ status = value;
+ OnUpdated ();
+ }
+ }
+
+ public double Progress {
+ get { return progress; }
+ set {
+ progress = Math.Max (0.0, Math.Min (1.0, value));
+ OnUpdated ();
+ }
+ }
+
+ public string [] IconNames {
+ get { return icon_names; }
+ set {
+ if (value != null) {
+ icon_names = value;
+ OnUpdated ();
+ }
+ }
+ }
+
+ public bool IsBackground { get; set; }
+ public bool CanCancel { get; set; }
+ public string CancelMessage { get; set; }
+ public bool DelayShow { get; set; }
+
+ public PriorityHints PriorityHints { get; set; }
+
+ // Causes runtime method-not-found error in mono 2.0.1
+ //public IEnumerable<Resource> Resources { get; protected set; }
+ internal Resource [] Resources;
+
+ public JobState State {
+ get { return state; }
+ internal set {
+ state = value;
+ OnUpdated ();
+ }
+ }
+
+ public void SetResources (params Resource [] resources)
+ {
+ Resources = resources;
+ }
+
+#endregion
+
+#region Constructor
+
+ public Job () : this (null, PriorityHints.None)
+ {
+ }
+
+ public Job (string title, PriorityHints hints, params Resource [] resources)
+ {
+ Title = title;
+ PriorityHints = hints;
+ Resources = resources;
+ }
+
+#endregion
+
+#region Abstract Methods
+
+ protected virtual void RunJob ()
+ {
+ }
+
+#endregion
+
+#region Protected Methods
+
+ public void Update (string title, string status, double progress)
+ {
+ Title = title;
+ Status = status;
+ Progress = progress;
+ }
+
+ protected void FreezeUpdate ()
+ {
+ System.Threading.Interlocked.Increment (ref update_freeze_ref);
+ }
+
+ protected void ThawUpdate (bool raiseUpdate)
+ {
+ System.Threading.Interlocked.Decrement (ref update_freeze_ref);
+ if (raiseUpdate) {
+ OnUpdated ();
+ }
+ }
+
+ protected void OnUpdated ()
+ {
+ if (update_freeze_ref != 0) {
+ return;
+ }
+
+ EventHandler handler = Updated;
+ if (handler != null) {
+ handler (this, EventArgs.Empty);
+ }
+ }
+
+ public void YieldToScheduler ()
+ {
+ if (IsPaused || IsScheduled) {
+ if (pause_event == null) {
+ pause_event = new ManualResetEvent (false);
+ }
+
+ pause_event.WaitOne ();
+ }
+ }
+
+ protected void OnFinished ()
+ {
+ Log.Debug ("Finished", Title);
+ pause_event = null;
+
+ if (state != JobState.Cancelled) {
+ State = JobState.Completed;
+ }
+
+ EventHandler handler = Finished;
+ if (handler != null) {
+ handler (this, EventArgs.Empty);
+ }
+ }
+
+#endregion
+
+ internal bool HasScheduler { get; set; }
+ }
+}
diff --git a/lib/Hyena/src/Hyena/Hyena.Jobs/JobExtensions.cs b/lib/Hyena/src/Hyena/Hyena.Jobs/JobExtensions.cs
new file mode 100644
index 0000000..0c15568
--- /dev/null
+++ b/lib/Hyena/src/Hyena/Hyena.Jobs/JobExtensions.cs
@@ -0,0 +1,69 @@
+//
+// JobExtensions.cs
+//
+// Author:
+// Gabriel Burt <gburt at novell.com>
+//
+// Copyright (C) 2009 Novell, Inc.
+//
+// Permission is hereby granted, free of charge, to any person obtaining
+// a copy of this software and associated documentation files (the
+// "Software"), to deal in the Software without restriction, including
+// without limitation the rights to use, copy, modify, merge, publish,
+// distribute, sublicense, and/or sell copies of the Software, and to
+// permit persons to whom the Software is furnished to do so, subject to
+// the following conditions:
+//
+// The above copyright notice and this permission notice shall be
+// included in all copies or substantial portions of the Software.
+//
+// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
+// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
+// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
+// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+//
+
+using System;
+using System.Linq;
+using System.Collections.Generic;
+
+namespace Hyena.Jobs
+{
+ public static class JobExtensions
+ {
+ internal static IEnumerable<T> Without<T> (this IEnumerable<T> source, PriorityHints hints) where T : Job
+ {
+ return source.Where (j => !j.Has (hints));
+ }
+
+ internal static IEnumerable<T> With<T> (this IEnumerable<T> source, PriorityHints hints) where T : Job
+ {
+ return source.Where (j => j.Has (hints));
+ }
+
+ internal static IEnumerable<T> SharingResourceWith<T> (this IEnumerable<T> source, Job job) where T : Job
+ {
+ return source.Where (j => j.Resources.Intersect (job.Resources).Any ());
+ }
+
+ public static void ForEach<T> (this IEnumerable<T> source, Action<T> func)
+ {
+ foreach (T item in source)
+ func (item);
+ }
+
+ public static bool Has<T> (this T job, PriorityHints hints) where T : Job
+ {
+ return (job.PriorityHints & hints) == hints;
+ }
+
+ // Useful..
+ /*public static bool Include (this Enum source, Enum flags)
+ {
+ return ((int)source & (int)flags) == (int)flags;
+ }*/
+ }
+}
diff --git a/lib/Hyena/src/Hyena/Hyena.Jobs/PriorityHints.cs b/lib/Hyena/src/Hyena/Hyena.Jobs/PriorityHints.cs
new file mode 100644
index 0000000..125b3b8
--- /dev/null
+++ b/lib/Hyena/src/Hyena/Hyena.Jobs/PriorityHints.cs
@@ -0,0 +1,41 @@
+//
+// PriorityHints.cs
+//
+// Author:
+// Gabriel Burt <gburt at novell.com>
+//
+// Copyright (C) 2009 Novell, Inc.
+//
+// Permission is hereby granted, free of charge, to any person obtaining
+// a copy of this software and associated documentation files (the
+// "Software"), to deal in the Software without restriction, including
+// without limitation the rights to use, copy, modify, merge, publish,
+// distribute, sublicense, and/or sell copies of the Software, and to
+// permit persons to whom the Software is furnished to do so, subject to
+// the following conditions:
+//
+// The above copyright notice and this permission notice shall be
+// included in all copies or substantial portions of the Software.
+//
+// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
+// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
+// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
+// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+//
+
+using System;
+
+namespace Hyena.Jobs
+{
+ [Flags]
+ public enum PriorityHints
+ {
+ None = 0,
+ DataLossIfStopped = 1,
+ SpeedSensitive = 2,
+ LongRunning = 4
+ }
+}
diff --git a/lib/Hyena/src/Hyena/Hyena.Jobs/Resource.cs b/lib/Hyena/src/Hyena/Hyena.Jobs/Resource.cs
new file mode 100644
index 0000000..bf99a97
--- /dev/null
+++ b/lib/Hyena/src/Hyena/Hyena.Jobs/Resource.cs
@@ -0,0 +1,43 @@
+//
+// Resource.cs
+//
+// Author:
+// Gabriel Burt <gburt at novell.com>
+//
+// Copyright (C) 2009 Novell, Inc.
+//
+// Permission is hereby granted, free of charge, to any person obtaining
+// a copy of this software and associated documentation files (the
+// "Software"), to deal in the Software without restriction, including
+// without limitation the rights to use, copy, modify, merge, publish,
+// distribute, sublicense, and/or sell copies of the Software, and to
+// permit persons to whom the Software is furnished to do so, subject to
+// the following conditions:
+//
+// The above copyright notice and this permission notice shall be
+// included in all copies or substantial portions of the Software.
+//
+// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
+// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
+// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
+// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+//
+
+using System;
+
+namespace Hyena.Jobs
+{
+ public class Resource
+ {
+ // Convenience Resources for programs to use
+ public static readonly Resource Cpu = new Resource { Id = "cpu", Name = "CPU" };
+ public static readonly Resource Disk = new Resource { Id = "disk", Name = "Disk" };
+ public static readonly Resource Database = new Resource { Id = "db", Name = "Database" };
+
+ public string Id { get; set; }
+ public string Name { get; set; }
+ }
+}
diff --git a/lib/Hyena/src/Hyena/Hyena.Jobs/Scheduler.cs b/lib/Hyena/src/Hyena/Hyena.Jobs/Scheduler.cs
new file mode 100644
index 0000000..4573d1d
--- /dev/null
+++ b/lib/Hyena/src/Hyena/Hyena.Jobs/Scheduler.cs
@@ -0,0 +1,230 @@
+//
+// Scheduler.cs
+//
+// Author:
+// Gabriel Burt <gburt at novell.com>
+//
+// Copyright (C) 2009 Novell, Inc.
+//
+// Permission is hereby granted, free of charge, to any person obtaining
+// a copy of this software and associated documentation files (the
+// "Software"), to deal in the Software without restriction, including
+// without limitation the rights to use, copy, modify, merge, publish,
+// distribute, sublicense, and/or sell copies of the Software, and to
+// permit persons to whom the Software is furnished to do so, subject to
+// the following conditions:
+//
+// The above copyright notice and this permission notice shall be
+// included in all copies or substantial portions of the Software.
+//
+// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
+// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
+// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
+// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+//
+
+using System;
+using System.Linq;
+using System.Threading;
+using System.Collections.Generic;
+using System.Collections.ObjectModel;
+
+using Hyena;
+
+namespace Hyena.Jobs
+{
+ public class Scheduler
+ {
+ private List<Job> jobs;
+
+ public event Action<Job> JobAdded;
+ public event Action<Job> JobRemoved;
+
+ public IEnumerable<Job> Jobs { get; private set; }
+
+ public int JobCount {
+ get { lock (jobs) { return jobs.Count; } }
+ }
+
+ public bool HasAnyDataLossJobs {
+ get {
+ lock (jobs) {
+ return jobs.With (PriorityHints.DataLossIfStopped).Any ();
+ }
+ }
+ }
+
+ public Scheduler ()
+ {
+ jobs = new List<Job> ();
+ Jobs = new ReadOnlyCollection<Job> (jobs);
+ }
+
+ public void Add (Job job)
+ {
+ lock (jobs) {
+ lock (job) {
+ if (jobs.Contains (job) || job.HasScheduler) {
+ throw new ArgumentException ("Job not schedulable", "job");
+ }
+
+ job.HasScheduler = true;
+ }
+
+ jobs.Add (job);
+ job.State = JobState.Scheduled;
+ job.Finished += OnJobFinished;
+
+ if (CanStart (job)) {
+ StartJob (job);
+ }
+ }
+
+ Action<Job> handler = JobAdded;
+ if (handler != null) {
+ handler (job);
+ }
+ }
+
+ public void Cancel (Job job)
+ {
+ lock (jobs) {
+ if (jobs.Contains (job)) {
+ // Cancel will call OnJobFinished which will call Schedule
+ job.Cancel ();
+ }
+ }
+ }
+
+ public void Pause (Job job)
+ {
+ lock (jobs) {
+ if (jobs.Contains (job)) {
+ if (job.Pause ()) {
+ // See if any scheduled jobs can now be started
+ Schedule ();
+ }
+ }
+ }
+ }
+
+ public void Resume (Job job)
+ {
+ lock (jobs) {
+ if (jobs.Contains (job) && CanStartJob (job, true)) {
+ StartJob (job);
+ }
+ }
+ }
+
+ public void CancelAll (bool evenDataLossJobs)
+ {
+ lock (jobs) {
+ List<Job> jobs_copy = new List<Job> (jobs);
+ foreach (var job in jobs_copy) {
+ if (evenDataLossJobs || !job.Has (PriorityHints.DataLossIfStopped)) {
+ job.Cancel ();
+ }
+ }
+ }
+ }
+
+ private void OnJobFinished (object o, EventArgs args)
+ {
+ Job job = o as Job;
+
+ lock (jobs) {
+ jobs.Remove (job);
+ }
+
+ Action<Job> handler = JobRemoved;
+ if (handler != null) {
+ handler (job);
+ }
+
+ Schedule ();
+ }
+
+ private void Schedule ()
+ {
+ lock (jobs) {
+ // First try to start any non-LongRunning jobs
+ jobs.Without (PriorityHints.LongRunning)
+ .Where (CanStart)
+ .ForEach (StartJob);
+
+ // Then start any LongRunning ones
+ jobs.With (PriorityHints.LongRunning)
+ .Where (CanStart)
+ .ForEach (StartJob);
+ }
+ }
+
+#region Job Query helpers
+
+ private bool IsRunning (Job job)
+ {
+ return job.IsRunning;
+ }
+
+ private bool CanStart (Job job)
+ {
+ return CanStartJob (job, false);
+ }
+
+ private bool CanStartJob (Job job, bool pausedJob)
+ {
+ if (!job.IsScheduled && !(pausedJob && job.IsPaused))
+ return false;
+
+ if (job.Has (PriorityHints.SpeedSensitive))
+ return true;
+
+ // Run only one non-SpeedSensitive job that uses a given Resource
+ if (job.Has (PriorityHints.LongRunning))
+ return jobs.Where (IsRunning)
+ .SharingResourceWith (job)
+ .Any () == false;
+
+ // With the exception that non-LongRunning jobs will preempt LongRunning ones
+ return jobs.Where (IsRunning)
+ .Without (PriorityHints.LongRunning)
+ .SharingResourceWith (job)
+ .Any () == false;
+ }
+
+ private void StartJob (Job job)
+ {
+ ConflictingJobs (job).ForEach (PreemptJob);
+ job.Start ();
+ }
+
+ private void PreemptJob (Job job)
+ {
+ job.Preempt ();
+ }
+
+ private IEnumerable<Job> ConflictingJobs (Job job)
+ {
+ if (job.Has (PriorityHints.SpeedSensitive)) {
+ // Preempt non-SpeedSensitive jobs that use the same Resource(s)
+ return jobs.Where (IsRunning)
+ .Without (PriorityHints.SpeedSensitive)
+ .SharingResourceWith (job);
+ } else if (!job.Has (PriorityHints.LongRunning)) {
+ // Preempt any LongRunning jobs that use the same Resource(s)
+ return jobs.Where (IsRunning)
+ .With (PriorityHints.LongRunning)
+ .SharingResourceWith (job);
+ }
+
+ return Enumerable.Empty<Job> ();
+ }
+
+#endregion
+
+ }
+}
diff --git a/lib/Hyena/src/Hyena/Hyena.Jobs/SimpleAsyncJob.cs b/lib/Hyena/src/Hyena/Hyena.Jobs/SimpleAsyncJob.cs
new file mode 100644
index 0000000..0b0df75
--- /dev/null
+++ b/lib/Hyena/src/Hyena/Hyena.Jobs/SimpleAsyncJob.cs
@@ -0,0 +1,79 @@
+//
+// SimpleAsyncJob.cs
+//
+// Author:
+// Gabriel Burt <gburt at novell.com>
+//
+// Copyright (C) 2009 Novell, Inc.
+//
+// Permission is hereby granted, free of charge, to any person obtaining
+// a copy of this software and associated documentation files (the
+// "Software"), to deal in the Software without restriction, including
+// without limitation the rights to use, copy, modify, merge, publish,
+// distribute, sublicense, and/or sell copies of the Software, and to
+// permit persons to whom the Software is furnished to do so, subject to
+// the following conditions:
+//
+// The above copyright notice and this permission notice shall be
+// included in all copies or substantial portions of the Software.
+//
+// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
+// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
+// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
+// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+//
+
+using System;
+using System.Linq;
+using System.Threading;
+using System.Collections.Generic;
+using System.Collections.ObjectModel;
+
+namespace Hyena.Jobs
+{
+ public abstract class SimpleAsyncJob : Job
+ {
+ private Thread thread;
+
+ public SimpleAsyncJob ()
+ {
+ }
+
+ public SimpleAsyncJob (string name, PriorityHints hints, params Resource [] resources)
+ : base (name, hints, resources)
+ {
+ }
+
+ protected override void RunJob ()
+ {
+ if (thread == null) {
+ thread = new Thread (InnerStart);
+ thread.Name = String.Format ("Hyena.Jobs.JobRunner ({0})", Title);
+ thread.Priority = this.Has (PriorityHints.SpeedSensitive) ? ThreadPriority.Normal : ThreadPriority.Lowest;
+ thread.Start ();
+ }
+ }
+
+ protected void AbortThread ()
+ {
+ if (thread != null) {
+ thread.Abort ();
+ }
+ }
+
+ private void InnerStart ()
+ {
+ try {
+ Run ();
+ } catch (ThreadAbortException) {
+ } catch (Exception e) {
+ Log.Exception (e);
+ }
+ }
+
+ protected abstract void Run ();
+ }
+}
diff --git a/lib/Hyena/src/Hyena/Hyena.Jobs/Tests/SchedulerTests.cs b/lib/Hyena/src/Hyena/Hyena.Jobs/Tests/SchedulerTests.cs
new file mode 100644
index 0000000..262075f
--- /dev/null
+++ b/lib/Hyena/src/Hyena/Hyena.Jobs/Tests/SchedulerTests.cs
@@ -0,0 +1,205 @@
+//
+// SchedulerTests.cs
+//
+// Author:
+// Gabriel Burt <gburt at novell.com>
+//
+// Copyright (C) 2009 Novell, Inc.
+//
+// Permission is hereby granted, free of charge, to any person obtaining
+// a copy of this software and associated documentation files (the
+// "Software"), to deal in the Software without restriction, including
+// without limitation the rights to use, copy, modify, merge, publish,
+// distribute, sublicense, and/or sell copies of the Software, and to
+// permit persons to whom the Software is furnished to do so, subject to
+// the following conditions:
+//
+// The above copyright notice and this permission notice shall be
+// included in all copies or substantial portions of the Software.
+//
+// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
+// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
+// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
+// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+//
+
+#if ENABLE_TESTS
+
+using System;
+using System.Linq;
+using System.Threading;
+
+using NUnit.Framework;
+
+using Hyena;
+
+namespace Hyena.Jobs
+{
+ [TestFixture]
+ public class SchedulerTests
+ {
+ private Scheduler scheduler;
+
+ [SetUp]
+ public void Setup ()
+ {
+ //Log.Debugging = true;
+ TestJob.job_count = 0;
+ Log.Debug ("New job scheduler test");
+ }
+
+ [TearDown]
+ public void TearDown ()
+ {
+ if (scheduler != null) {
+ // Ensure the scheduler's jobs are all finished, otherwise
+ // their job threads will be killed, throwing an exception
+ while (scheduler.JobCount > 0);
+ }
+
+ //Log.Debugging = false;
+ }
+
+ [Test]
+ public void TestSimultaneousSpeedJobs ()
+ {
+ scheduler = new Scheduler ();
+ scheduler.Add (new TestJob (200, PriorityHints.SpeedSensitive, Resource.Cpu, Resource.Disk));
+ scheduler.Add (new TestJob (200, PriorityHints.SpeedSensitive, Resource.Cpu, Resource.Disk));
+ scheduler.Add (new TestJob (200, PriorityHints.None, Resource.Cpu, Resource.Disk));
+
+ // Test that two SpeedSensitive jobs with the same Resources will run simultaneously
+ AssertJobsRunning (2);
+
+ // but that the third that isn't SpeedSensitive won't run until they are both done
+ while (scheduler.JobCount > 1);
+ Assert.AreEqual (PriorityHints.None, scheduler.Jobs.First ().PriorityHints);
+ }
+
+ [Test]
+ public void TestOneNonSpeedJobPerResource ()
+ {
+ // Test that two SpeedSensitive jobs with the same Resources will run simultaneously
+ scheduler = new Scheduler ();
+ scheduler.Add (new TestJob (200, PriorityHints.None, Resource.Cpu, Resource.Disk));
+ scheduler.Add (new TestJob (200, PriorityHints.None, Resource.Cpu, Resource.Disk));
+ AssertJobsRunning (1);
+ }
+
+ [Test]
+ public void TestSpeedJobPreemptsNonSpeedJobs ()
+ {
+ scheduler = new Scheduler ();
+ TestJob a = new TestJob (200, PriorityHints.None, Resource.Cpu);
+ TestJob b = new TestJob (200, PriorityHints.None, Resource.Disk);
+ TestJob c = new TestJob (200, PriorityHints.LongRunning, Resource.Database);
+ scheduler.Add (a);
+ scheduler.Add (b);
+ scheduler.Add (c);
+
+ // Test that three jobs got started
+ AssertJobsRunning (3);
+
+ scheduler.Add (new TestJob (200, PriorityHints.SpeedSensitive, Resource.Cpu, Resource.Disk));
+
+ // Make sure the SpeedSensitive jobs has caused the Cpu and Disk jobs to be paused
+ AssertJobsRunning (2);
+ Assert.AreEqual (true, a.IsScheduled);
+ Assert.AreEqual (true, b.IsScheduled);
+ Assert.AreEqual (true, c.IsRunning);
+ }
+
+ /*[Test]
+ public void TestManyJobs ()
+ {
+ var timer = System.Diagnostics.Stopwatch.StartNew ();
+ scheduler = new Scheduler ("TestManyJobs");
+
+ // First add some long running jobs
+ for (int i = 0; i < 100; i++) {
+ scheduler.Add (new TestJob (20, PriorityHints.LongRunning, Resource.Cpu));
+ }
+
+ // Then add some normal jobs that will prempt them
+ for (int i = 0; i < 100; i++) {
+ scheduler.Add (new TestJob (10, PriorityHints.None, Resource.Cpu));
+ }
+
+ // Then add some SpeedSensitive jobs that will prempt all of them
+ for (int i = 0; i < 100; i++) {
+ scheduler.Add (new TestJob (5, PriorityHints.SpeedSensitive, Resource.Cpu));
+ }
+
+ while (scheduler.Jobs.Count > 0);
+ Log.DebugFormat ("Took {0} to schedule and process all jobs", timer.Elapsed);
+ //scheduler.StopAll ();
+ }*/
+
+ /*[Test]
+ public void TestCannotDisposeWhileDatalossJobsScheduled ()
+ {
+ scheduler = new Scheduler ();
+ TestJob loss_job;
+ scheduler.Add (new TestJob (200, PriorityHints.SpeedSensitive, Resource.Cpu));
+ scheduler.Add (loss_job = new TestJob (200, PriorityHints.DataLossIfStopped, Resource.Cpu));
+
+ AssertJobsRunning (1);
+ Assert.AreEqual (false, scheduler.JobInfo[loss_job].IsRunning);
+
+ try {
+ //scheduler.StopAll ();
+ Assert.Fail ("Cannot stop with dataloss job scheduled");
+ } catch {
+ }
+ }
+
+ public void TestCannotDisposeWhileDatalossJobsRunning ()
+ {
+ scheduler = new Scheduler ();
+ scheduler.Add (new TestJob (200, PriorityHints.DataLossIfStopped, Resource.Cpu));
+ AssertJobsRunning (1);
+
+ try {
+ //scheduler.StopAll ();
+ Assert.Fail ("Cannot stop with dataloss job running");
+ } catch {
+ }
+ }*/
+
+ private void AssertJobsRunning (int count)
+ {
+ Assert.AreEqual (count, scheduler.Jobs.Count (j => j.IsRunning));
+ }
+
+ private class TestJob : SimpleAsyncJob
+ {
+ internal static int job_count;
+ int iteration;
+ int sleep_time;
+
+ public TestJob (int sleep_time, PriorityHints hints, params Resource [] resources)
+ : base (String.Format ("{0} ( {1}, {2})", job_count++, hints, resources.Aggregate ("", (a, b) => a += b.Id + " ")),
+ hints,
+ resources)
+ {
+ this.sleep_time = sleep_time;
+ }
+
+ protected override void Run ()
+ {
+ for (int i = 0; !IsCancelRequested && i < 2; i++) {
+ YieldToScheduler ();
+ Hyena.Log.DebugFormat ("{0} iteration {1}", Title, iteration++);
+ System.Threading.Thread.Sleep (sleep_time);
+ }
+
+ OnFinished ();
+ }
+ }
+ }
+}
+
+#endif
diff --git a/lib/Hyena/src/Hyena/Hyena.Json/Deserializer.cs b/lib/Hyena/src/Hyena/Hyena.Json/Deserializer.cs
new file mode 100644
index 0000000..f54b6d7
--- /dev/null
+++ b/lib/Hyena/src/Hyena/Hyena.Json/Deserializer.cs
@@ -0,0 +1,163 @@
+//
+// Deserializer.cs
+//
+// Author:
+// Aaron Bockover <abockover at novell.com>
+//
+// Copyright (C) 2008 Novell, Inc.
+//
+// Permission is hereby granted, free of charge, to any person obtaining
+// a copy of this software and associated documentation files (the
+// "Software"), to deal in the Software without restriction, including
+// without limitation the rights to use, copy, modify, merge, publish,
+// distribute, sublicense, and/or sell copies of the Software, and to
+// permit persons to whom the Software is furnished to do so, subject to
+// the following conditions:
+//
+// The above copyright notice and this permission notice shall be
+// included in all copies or substantial portions of the Software.
+//
+// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
+// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
+// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
+// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+//
+
+using System;
+using System.IO;
+
+namespace Hyena.Json
+{
+ public class Deserializer
+ {
+ private Tokenizer tokenizer = new Tokenizer ();
+
+ public Deserializer () { }
+ public Deserializer (string input) { SetInput (input); }
+ public Deserializer (Stream stream) { SetInput (stream); }
+ public Deserializer (StreamReader reader) { SetInput (reader); }
+
+ public Deserializer SetInput (StreamReader reader)
+ {
+ tokenizer.SetInput (reader);
+ return this;
+ }
+
+ public Deserializer SetInput (Stream stream)
+ {
+ tokenizer.SetInput (stream);
+ return this;
+ }
+
+ public Deserializer SetInput (string input)
+ {
+ tokenizer.SetInput (input);
+ return this;
+ }
+
+ public object Deserialize ()
+ {
+ Token token = CheckScan (TokenType.Value, true);
+ if (token == null) {
+ return null;
+ }
+
+ return Parse (token);
+ }
+
+ private object Parse (Token token)
+ {
+ if (token.Type == TokenType.ObjectStart) {
+ return ParseObject ();
+ } else if (token.Type == TokenType.ArrayStart) {
+ return ParseArray ();
+ }
+
+ return token.Value;
+ }
+
+ private JsonObject ParseObject ()
+ {
+ JsonObject obj = new JsonObject ();
+
+ while (true) {
+ Token key = CheckScan (TokenType.String | TokenType.ObjectFinish);
+ if (key.Type == TokenType.ObjectFinish) {
+ break;
+ }
+
+ CheckScan (TokenType.Colon);
+ Token value = CheckScan (TokenType.Value);
+
+ object value_val = value.Value;
+ if (value.Type == TokenType.ArrayStart) {
+ value_val = ParseArray ();
+ } else if (value.Type == TokenType.ObjectStart) {
+ value_val = ParseObject ();
+ }
+
+ obj.Add ((string)key.Value, value_val);
+
+ Token token = CheckScan (TokenType.Comma | TokenType.ObjectFinish);
+ if (token.Type == TokenType.ObjectFinish) {
+ break;
+ }
+ }
+
+ return obj;
+ }
+
+ private JsonArray ParseArray ()
+ {
+ JsonArray array = new JsonArray ();
+
+ while (true) {
+ Token value = CheckScan (TokenType.Value | TokenType.ArrayFinish);
+ if (value.Type == TokenType.ArrayFinish) {
+ break;
+ }
+
+ array.Add (Parse (value));
+
+ Token token = CheckScan (TokenType.Comma | TokenType.ArrayFinish);
+ if (token.Type == TokenType.ArrayFinish) {
+ break;
+ }
+ }
+
+ return array;
+ }
+
+ private Token CheckScan (TokenType expected)
+ {
+ return CheckScan (expected, false);
+ }
+
+ private Token CheckScan (TokenType expected, bool eofok)
+ {
+ Token token = tokenizer.Scan ();
+ if (token == null && eofok) {
+ return null;
+ } else if (token == null) {
+ UnexpectedEof (expected);
+ } else if ((expected & token.Type) == 0) {
+ UnexpectedToken (expected, token);
+ }
+ return token;
+ }
+
+ private void UnexpectedToken (TokenType expected, Token got)
+ {
+ throw new ApplicationException (String.Format ("Unexpected token {0} at [{1}:{2}]; expected {3}",
+ got.Type, got.SourceLine, got.SourceColumn, expected));
+ }
+
+ private void UnexpectedEof (TokenType expected)
+ {
+ throw new ApplicationException (String.Format ("Unexpected End of File; expected {0}", expected));
+ }
+ }
+}
diff --git a/lib/Hyena/src/Hyena/Hyena.Json/IJsonCollection.cs b/lib/Hyena/src/Hyena/Hyena.Json/IJsonCollection.cs
new file mode 100644
index 0000000..8c653e8
--- /dev/null
+++ b/lib/Hyena/src/Hyena/Hyena.Json/IJsonCollection.cs
@@ -0,0 +1,40 @@
+//
+// IJsonCollection.cs
+//
+// Author:
+// Aaron Bockover <abockover at novell.com>
+//
+// Copyright (C) 2008 Novell, Inc.
+//
+// Permission is hereby granted, free of charge, to any person obtaining
+// a copy of this software and associated documentation files (the
+// "Software"), to deal in the Software without restriction, including
+// without limitation the rights to use, copy, modify, merge, publish,
+// distribute, sublicense, and/or sell copies of the Software, and to
+// permit persons to whom the Software is furnished to do so, subject to
+// the following conditions:
+//
+// The above copyright notice and this permission notice shall be
+// included in all copies or substantial portions of the Software.
+//
+// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
+// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
+// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
+// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+//
+
+using System;
+using System.Collections;
+using System.Text;
+
+namespace Hyena.Json
+{
+ public interface IJsonCollection : ICollection
+ {
+ void Dump ();
+ void Dump (int count);
+ }
+}
diff --git a/lib/Hyena/src/Hyena/Hyena.Json/JsonArray.cs b/lib/Hyena/src/Hyena/Hyena.Json/JsonArray.cs
new file mode 100644
index 0000000..6f551d6
--- /dev/null
+++ b/lib/Hyena/src/Hyena/Hyena.Json/JsonArray.cs
@@ -0,0 +1,53 @@
+//
+// JsonArray.cs
+//
+// Author:
+// Aaron Bockover <abockover at novell.com>
+//
+// Copyright (C) 2008 Novell, Inc.
+//
+// Permission is hereby granted, free of charge, to any person obtaining
+// a copy of this software and associated documentation files (the
+// "Software"), to deal in the Software without restriction, including
+// without limitation the rights to use, copy, modify, merge, publish,
+// distribute, sublicense, and/or sell copies of the Software, and to
+// permit persons to whom the Software is furnished to do so, subject to
+// the following conditions:
+//
+// The above copyright notice and this permission notice shall be
+// included in all copies or substantial portions of the Software.
+//
+// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
+// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
+// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
+// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+//
+
+using System;
+using System.Linq;
+using System.Collections.Generic;
+using System.Text;
+
+namespace Hyena.Json
+{
+ public class JsonArray : List<object>, IJsonCollection
+ {
+ public void Dump ()
+ {
+ Dump (1);
+ }
+
+ public void Dump (int level)
+ {
+ Console.Write (ToString ());
+ }
+
+ public override string ToString ()
+ {
+ return new Serializer (this).Serialize ();
+ }
+ }
+}
diff --git a/lib/Hyena/src/Hyena/Hyena.Json/JsonObject.cs b/lib/Hyena/src/Hyena/Hyena.Json/JsonObject.cs
new file mode 100644
index 0000000..34f8328
--- /dev/null
+++ b/lib/Hyena/src/Hyena/Hyena.Json/JsonObject.cs
@@ -0,0 +1,53 @@
+//
+// JsonObject.cs
+//
+// Author:
+// Aaron Bockover <abockover at novell.com>
+//
+// Copyright (C) 2008 Novell, Inc.
+//
+// Permission is hereby granted, free of charge, to any person obtaining
+// a copy of this software and associated documentation files (the
+// "Software"), to deal in the Software without restriction, including
+// without limitation the rights to use, copy, modify, merge, publish,
+// distribute, sublicense, and/or sell copies of the Software, and to
+// permit persons to whom the Software is furnished to do so, subject to
+// the following conditions:
+//
+// The above copyright notice and this permission notice shall be
+// included in all copies or substantial portions of the Software.
+//
+// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
+// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
+// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
+// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+//
+
+using System;
+using System.Linq;
+using System.Collections.Generic;
+using System.Text;
+
+namespace Hyena.Json
+{
+ public class JsonObject : Dictionary<string, object>, IJsonCollection
+ {
+ public void Dump ()
+ {
+ Dump (1);
+ }
+
+ public void Dump (int level)
+ {
+ Console.Write (ToString ());
+ }
+
+ public override string ToString ()
+ {
+ return new Serializer (this).Serialize ();
+ }
+ }
+}
diff --git a/lib/Hyena/src/Hyena/Hyena.Json/Serializer.cs b/lib/Hyena/src/Hyena/Hyena.Json/Serializer.cs
new file mode 100644
index 0000000..a298528
--- /dev/null
+++ b/lib/Hyena/src/Hyena/Hyena.Json/Serializer.cs
@@ -0,0 +1,155 @@
+//
+// Serializer.cs
+//
+// Copyright (c) 2009 Novell, Inc. (http://www.novell.com)
+//
+// Authors:
+// Sandy Armstrong <sanfordarmstrong at gmail.com>
+//
+// Permission is hereby granted, free of charge, to any person obtaining
+// a copy of this software and associated documentation files (the
+// "Software"), to deal in the Software without restriction, including
+// without limitation the rights to use, copy, modify, merge, publish,
+// distribute, sublicense, and/or sell copies of the Software, and to
+// permit persons to whom the Software is furnished to do so, subject to
+// the following conditions:
+//
+// The above copyright notice and this permission notice shall be
+// included in all copies or substantial portions of the Software.
+//
+// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
+// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
+// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
+// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+//
+
+using System;
+using System.Collections;
+using System.Collections.Generic;
+using System.IO;
+using System.Text;
+
+namespace Hyena.Json
+{
+ public class Serializer
+ {
+ private const string serializedNull = "null";
+ private const string serializedTrue = "true";
+ private const string serializedFalse = "false";
+
+ private object input;
+
+ public Serializer () { }
+ public Serializer (object input) { SetInput (input); }
+
+ public void SetInput (object input)
+ {
+ this.input = input;
+ }
+
+ // TODO: Support serialize to stream?
+
+ public string Serialize ()
+ {
+ return Serialize (input);
+ }
+
+ private string SerializeBool (bool val)
+ {
+ return val ? serializedTrue : serializedFalse;
+ }
+
+ private string SerializeInt (int val)
+ {
+ return val.ToString ();
+ }
+
+ private string SerializeDouble (double val)
+ {
+ return val.ToString (System.Globalization.CultureInfo.InvariantCulture.NumberFormat);
+ }
+
+ // TODO: exponent stuff
+
+ private string SerializeString (string val)
+ {
+ // TODO: More work, escaping, etc
+ return "\"" +
+ val.Replace ("\\", "\\\\").
+ Replace ("\"", "\\\"").
+ Replace ("\b", "\\b").
+ Replace ("\f", "\\f").
+ Replace ("\n", "\\n").
+ Replace ("\r", "\\r").
+ Replace ("\t", "\\t") +
+ "\"";
+ }
+
+ private string SerializeEnumerable (IEnumerable array)
+ {
+ StringBuilder builder = new StringBuilder ("[");
+ int i = 0;
+ foreach (var obj in array) {
+ builder.Append (Serialize (obj));
+ builder.Append (",");
+ i++;
+ }
+ // Get rid of trailing comma
+ if (i > 0)
+ builder.Remove (builder.Length - 1, 1);
+ builder.Append ("]");
+ return builder.ToString ();
+ }
+
+ private string SerializeDictionary (Dictionary<string, object> obj)
+ {
+ StringBuilder builder = new StringBuilder ("{");
+ foreach (var pair in obj) {
+ builder.Append (SerializeString (pair.Key));
+ builder.Append (":");
+ builder.Append (Serialize (pair.Value));
+ builder.Append (",");
+ }
+ // Get rid of trailing comma
+ if (obj.Count > 0)
+ builder.Remove (builder.Length - 1, 1);
+ builder.Append ("}");
+ return builder.ToString ();
+ }
+
+ private string Serialize (object unknownObj)
+ {
+ if (unknownObj == null)
+ return serializedNull;
+
+ bool? b = unknownObj as bool?;
+ if (b.HasValue)
+ return SerializeBool (b.Value);
+
+ int? i = unknownObj as int?;
+ if (i.HasValue)
+ return SerializeInt (i.Value);
+
+ double? d = unknownObj as double?;
+ if (d.HasValue)
+ return SerializeDouble (d.Value);
+
+ string s = unknownObj as string;
+ if (s != null)
+ return SerializeString (s);
+
+ var o = unknownObj as Dictionary<string, object>;
+ if (o != null)
+ return SerializeDictionary (o);
+
+ var a = unknownObj as IEnumerable;
+ if (a != null)
+ return SerializeEnumerable (a);
+
+ throw new ArgumentException ("Cannot serialize anything but doubles, integers, strings, JsonObjects, and JsonArrays");
+ }
+ }
+}
diff --git a/lib/Hyena/src/Hyena/Hyena.Json/Tests/DeserializerTests.cs b/lib/Hyena/src/Hyena/Hyena.Json/Tests/DeserializerTests.cs
new file mode 100644
index 0000000..7c1bda8
--- /dev/null
+++ b/lib/Hyena/src/Hyena/Hyena.Json/Tests/DeserializerTests.cs
@@ -0,0 +1,102 @@
+//
+// DeserializerTests.cs
+//
+// Author:
+// Aaron Bockover <abockover at novell.com>
+//
+// Copyright (C) 2008 Novell, Inc.
+//
+// Permission is hereby granted, free of charge, to any person obtaining
+// a copy of this software and associated documentation files (the
+// "Software"), to deal in the Software without restriction, including
+// without limitation the rights to use, copy, modify, merge, publish,
+// distribute, sublicense, and/or sell copies of the Software, and to
+// permit persons to whom the Software is furnished to do so, subject to
+// the following conditions:
+//
+// The above copyright notice and this permission notice shall be
+// included in all copies or substantial portions of the Software.
+//
+// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
+// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
+// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
+// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+//
+
+#if ENABLE_TESTS
+
+using System;
+using System.Reflection;
+using NUnit.Framework;
+
+using Hyena.Json;
+
+namespace Hyena.Json.Tests
+{
+ [TestFixture]
+ public class DeserializerTests : Hyena.Tests.TestBase
+ {
+ private Deserializer deserializer;
+
+ [TestFixtureSetUp]
+ public void Setup ()
+ {
+ deserializer = new Deserializer ();
+ }
+
+ [Test]
+ public void Literal ()
+ {
+ Assert.AreEqual ("hello", (string)deserializer.SetInput ("\"hello\"").Deserialize ());
+ Assert.AreEqual (-1.76e-3, (double)deserializer.SetInput ("-1.76e-3").Deserialize ());
+ Assert.AreEqual (null, deserializer.SetInput ("null").Deserialize ());
+ Assert.AreEqual (true, (bool)deserializer.SetInput ("true").Deserialize ());
+ Assert.AreEqual (false, (bool)deserializer.SetInput ("false").Deserialize ());
+ }
+
+ [Test]
+ public void Array ()
+ {
+ JsonArray array = (JsonArray)deserializer.SetInput ("[]").Deserialize ();
+ Assert.AreEqual (0, array.Count);
+
+ array = (JsonArray)deserializer.SetInput ("[[]]").Deserialize ();
+ Assert.AreEqual (1, array.Count);
+ Assert.AreEqual (0, ((JsonArray)array[0]).Count);
+
+ array = (JsonArray)deserializer.SetInput ("[[true,[]]]").Deserialize ();
+ Assert.AreEqual (1, array.Count);
+ Assert.AreEqual (2, ((JsonArray)array[0]).Count);
+ Assert.AreEqual (0, ((JsonArray)((JsonArray)array[0])[1]).Count);
+
+ array = (JsonArray)deserializer.SetInput ("[\"a\", 1.0, true]").Deserialize ();
+ Assert.AreEqual (3, array.Count);
+ Assert.AreEqual ("a", (string)array[0]);
+ Assert.AreEqual (1, (double)array[1]);
+ Assert.AreEqual (true, (bool)array[2]);
+ }
+
+ [Test]
+ public void Object ()
+ {
+ JsonObject obj = (JsonObject)deserializer.SetInput ("{}").Deserialize ();
+ Assert.AreEqual (0, obj.Count);
+
+ obj = (JsonObject)deserializer.SetInput ("{\"a\":{}}").Deserialize ();
+ Assert.AreEqual (1, obj.Count);
+ Assert.AreEqual (0, ((JsonObject)obj["a"]).Count);
+
+ obj = (JsonObject)deserializer.SetInput ("{\"a\":[{\"b\":false},\"c\"]}").Deserialize ();
+ Assert.AreEqual (1, obj.Count);
+ JsonArray arr = (JsonArray)obj["a"];
+ Assert.AreEqual (2, arr.Count);
+ Assert.AreEqual (false, ((JsonObject)arr[0])["b"]);
+ Assert.AreEqual ("c", (string)arr[1]);
+ }
+ }
+}
+
+#endif
diff --git a/lib/Hyena/src/Hyena/Hyena.Json/Tests/SerializerTests.cs b/lib/Hyena/src/Hyena/Hyena.Json/Tests/SerializerTests.cs
new file mode 100644
index 0000000..12dee24
--- /dev/null
+++ b/lib/Hyena/src/Hyena/Hyena.Json/Tests/SerializerTests.cs
@@ -0,0 +1,169 @@
+//
+// SerializerTests.cs
+//
+// Authors:
+// Sandy Armstrong <sanfordarmstrong at gmail.com>
+//
+// Copyright (c) 2009 Novell, Inc. (http://www.novell.com)
+//
+// Permission is hereby granted, free of charge, to any person obtaining
+// a copy of this software and associated documentation files (the
+// "Software"), to deal in the Software without restriction, including
+// without limitation the rights to use, copy, modify, merge, publish,
+// distribute, sublicense, and/or sell copies of the Software, and to
+// permit persons to whom the Software is furnished to do so, subject to
+// the following conditions:
+//
+// The above copyright notice and this permission notice shall be
+// included in all copies or substantial portions of the Software.
+//
+// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
+// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
+// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
+// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+//
+
+#if ENABLE_TESTS
+
+using System;
+
+using Hyena.Json;
+
+using NUnit.Framework;
+
+namespace Hyena.Json.Tests
+{
+ [TestFixture]
+ public class SerializerTests : Hyena.Tests.TestBase
+ {
+ [Test]
+ public void SerializeBoolTest ()
+ {
+ Serializer ser = new Serializer (true);
+ Assert.AreEqual ("true", ser.Serialize ());
+ ser.SetInput (false);
+ Assert.AreEqual ("false", ser.Serialize ());
+ }
+
+ [Test]
+ public void SerializeIntTest ()
+ {
+ Serializer ser = new Serializer (12);
+ Assert.AreEqual ("12", ser.Serialize ());
+ ser.SetInput (-658);
+ Assert.AreEqual ("-658", ser.Serialize ());
+ ser.SetInput (0);
+ Assert.AreEqual ("0", ser.Serialize ());
+ }
+
+ [Test]
+ public void SerializeDoubleTest ()
+ {
+ Serializer ser = new Serializer (12.5);
+ Assert.AreEqual ("12.5", ser.Serialize ());
+ ser.SetInput (-658.1);
+ Assert.AreEqual ("-658.1", ser.Serialize ());
+ ser.SetInput (0.0);
+ Assert.AreEqual ("0", ser.Serialize ());
+ ser.SetInput (0.1);
+ Assert.AreEqual ("0.1", ser.Serialize ());
+ }
+
+ [Test]
+ public void SerializeStringTest ()
+ {
+ VerifyString ("The cat\njumped \"over\" the rat! We escape with \\\"",
+ @"""The cat\njumped \""over\"" the rat! We escape with \\\""""");
+ }
+
+ [Test]
+ public void EscapedCharactersTest ()
+ {
+ VerifyString ("\\", @"""\\""");
+ VerifyString ("\b", @"""\b""");
+ VerifyString ("\f", @"""\f""");
+ VerifyString ("\n", @"""\n""");
+ VerifyString ("\r", @"""\r""");
+ VerifyString ("\t", @"""\t""");
+ VerifyString ("\u2022", "\"\u2022\"");
+ }
+
+ private void VerifyString (string original, string expectedSerialized)
+ {
+ Serializer ser = new Serializer (original);
+ string output = ser.Serialize ();
+ Assert.AreEqual (expectedSerialized, output, "Serialized Output");
+ Assert.AreEqual (original, new Deserializer (output).Deserialize (),
+ "Input should be identical after serialized then deserialized back to string");
+ }
+
+ [Test]
+ public void SerializeNullTest ()
+ {
+ Serializer ser = new Serializer (null);
+ Assert.AreEqual ("null", ser.Serialize ());
+ }
+
+ [Test]
+ public void SerializeArrayTest ()
+ {
+ JsonArray simpleArray = new JsonArray ();
+ simpleArray.Add (1);
+ simpleArray.Add ("text");
+ simpleArray.Add (0.1);
+ simpleArray.Add ("5");
+ simpleArray.Add (false);
+ simpleArray.Add (null);
+
+ Serializer ser = new Serializer (simpleArray);
+ Assert.AreEqual ("[1,\"text\",0.1,\"5\",false,null]",
+ ser.Serialize ());
+
+ JsonArray emptyArray = new JsonArray ();
+ ser.SetInput (emptyArray);
+ Assert.AreEqual ("[]", ser.Serialize ());
+ }
+
+ // TODO: Test arrays/objects in each other, various levels deep
+
+ [Test]
+ public void SerializeObjectTest ()
+ {
+ JsonObject obj1 = new JsonObject ();
+ obj1 ["intfield"] = 1;
+ obj1 ["text field"] = "text";
+ obj1 ["double-field"] = 0.1;
+ obj1 ["Boolean, Field"] = true;
+ obj1 ["\"Null\"\nfield"] = null;
+
+ Serializer ser = new Serializer (obj1);
+ // Test object equality, since order not guaranteed
+ string output = ser.Serialize ();
+ JsonObject reconstitutedObj1 = (JsonObject) new Deserializer (output).Deserialize ();
+ AssertJsonObjectsEqual (obj1, reconstitutedObj1);
+
+ JsonObject obj2 = new JsonObject ();
+ obj2 ["double-field"] = 0.1;
+ obj2 ["\"Null\"\nfield"] = null;
+ ser.SetInput (obj2);
+ output = ser.Serialize ();
+ Assert.IsTrue ((output == "{\"double-field\":0.1,\"\\\"Null\\\"\\nfield\":null}") ||
+ (output == "{\"\\\"Null\\\"\\nfield\":null,\"double-field\":0.1}"),
+ "Serialized output format");
+ }
+
+ private void AssertJsonObjectsEqual (JsonObject expectedObj, JsonObject actualObj)
+ {
+ Assert.AreEqual (expectedObj.Count, actualObj.Count, "Field count");
+ foreach (var expectedPair in expectedObj)
+ Assert.AreEqual (expectedPair.Value,
+ actualObj [expectedPair.Key],
+ expectedPair.Key + " field");
+ }
+ }
+}
+
+#endif
diff --git a/lib/Hyena/src/Hyena/Hyena.Json/Tests/TokenizerTests.cs b/lib/Hyena/src/Hyena/Hyena.Json/Tests/TokenizerTests.cs
new file mode 100644
index 0000000..146acb6
--- /dev/null
+++ b/lib/Hyena/src/Hyena/Hyena.Json/Tests/TokenizerTests.cs
@@ -0,0 +1,207 @@
+//
+// TokenizerTests.cs
+//
+// Author:
+// Aaron Bockover <abockover at novell.com>
+//
+// Copyright (C) 2008 Novell, Inc.
+//
+// Permission is hereby granted, free of charge, to any person obtaining
+// a copy of this software and associated documentation files (the
+// "Software"), to deal in the Software without restriction, including
+// without limitation the rights to use, copy, modify, merge, publish,
+// distribute, sublicense, and/or sell copies of the Software, and to
+// permit persons to whom the Software is furnished to do so, subject to
+// the following conditions:
+//
+// The above copyright notice and this permission notice shall be
+// included in all copies or substantial portions of the Software.
+//
+// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
+// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
+// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
+// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+//
+
+#if ENABLE_TESTS
+
+using System;
+using System.Reflection;
+using NUnit.Framework;
+
+using Hyena.Json;
+
+namespace Hyena.Json.Tests
+{
+ [TestFixture]
+ public class TokenizerTests : Hyena.Tests.TestBase
+ {
+ private Tokenizer tokenizer;
+
+ [TestFixtureSetUp]
+ public void Setup ()
+ {
+ tokenizer = new Tokenizer ();
+ }
+
+ [Test]
+ public void Whitespace ()
+ {
+ AssertTokenStream ("");
+ AssertTokenStream (" ");
+ AssertTokenStream ("\f\n\r\t ");
+ }
+
+ [Test]
+ public void BoolNull ()
+ {
+ // Boolean/null tests
+ AssertTokenStream ("true", Token.Bool (true));
+ AssertTokenStream ("false", Token.Bool (false));
+ AssertTokenStream ("null", Token.Null);
+ }
+
+ [Test]
+ public void NumberInt ()
+ {
+ AssertTokenStream ("0", Token.Integer (0));
+ AssertTokenStream ("-0", Token.Integer (-0));
+
+ AssertTokenStream ("9", Token.Integer (9));
+ AssertTokenStream ("-9", Token.Integer (-9));
+
+ AssertTokenStream ("14", Token.Integer (14));
+ AssertTokenStream ("-14", Token.Integer (-14));
+
+ AssertTokenStream ("15309", Token.Integer (15309));
+ AssertTokenStream ("-15309", Token.Integer (-15309));
+ }
+
+ [Test]
+ public void NumberFloat ()
+ {
+ AssertTokenStream ("0.0", Token.Number (0.0));
+ AssertTokenStream ("-0.0", Token.Number (-0.0));
+
+ AssertTokenStream ("1.9", Token.Number (1.9));
+ AssertTokenStream ("-1.9", Token.Number (-1.9));
+
+ AssertTokenStream ("9.1", Token.Number (9.1));
+ AssertTokenStream ("-9.1", Token.Number (-9.1));
+
+ AssertTokenStream ("15309.0", Token.Number (15309.0));
+ AssertTokenStream ("15309.9", Token.Number (15309.9));
+ AssertTokenStream ("-15309.01", Token.Number (-15309.01));
+ AssertTokenStream ("-15309.9009", Token.Number (-15309.9009));
+ }
+
+ [Test]
+ public void NumberExponent ()
+ {
+ AssertTokenStream ("20.6e3", Token.Number (20.6e3));
+ AssertTokenStream ("20.6e+3", Token.Number (20.6e+3));
+ AssertTokenStream ("20.6e-3", Token.Number (20.6e-3));
+ AssertTokenStream ("-20.6e3", Token.Number (-20.6e3));
+ AssertTokenStream ("-20.6e+3", Token.Number (-20.6e+3));
+ AssertTokenStream ("-20.6e-3", Token.Number (-20.6e-3));
+
+ AssertTokenStream ("1e1", Token.Number (1e1));
+ AssertTokenStream ("1E2", Token.Number (1E2));
+ AssertTokenStream ("1.0e1", Token.Number (1.0e1));
+ AssertTokenStream ("1.0E1", Token.Number (1.0E1));
+ }
+
+ [Test]
+ public void Strings ()
+ {
+ AssertTokenStream (@"""""", Token.String (""));
+ AssertTokenStream (@"""a""", Token.String ("a"));
+ AssertTokenStream (@"""ab""", Token.String ("ab"));
+ AssertTokenStream (@" ""a b"" ", Token.String ("a b"));
+ AssertTokenStream (@"""\""\""""", Token.String ("\"\""));
+ AssertTokenStream (@" ""a \"" \"" b"" ", Token.String ("a \" \" b"));
+ AssertTokenStream (@"""\ubeef""", Token.String ("\ubeef"));
+ AssertTokenStream (@"""\u00a9""", Token.String ("\u00a9"));
+ AssertTokenStream (@"""\u0000\u0001\u0002""", Token.String ("\u0000\u0001\u0002"));
+ AssertTokenStream (@"""1\uabcdef0""", Token.String ("1\uabcdef0"));
+ AssertTokenStream (@"""\b\f\n\r\t""", Token.String ("\b\f\n\r\t"));
+ }
+
+ [Test]
+ public void Container ()
+ {
+ AssertTokenStream ("{}", Token.ObjectStart, Token.ObjectFinish);
+ AssertTokenStream ("[]", Token.ArrayStart, Token.ArrayFinish);
+ AssertTokenStream ("{ }", Token.ObjectStart, Token.ObjectFinish);
+ AssertTokenStream ("[ ]", Token.ArrayStart, Token.ArrayFinish);
+ AssertTokenStream ("[{}]", Token.ArrayStart, Token.ObjectStart, Token.ObjectFinish, Token.ArrayFinish);
+ AssertTokenStream ("[[[ { } ]]]",
+ Token.ArrayStart, Token.ArrayStart, Token.ArrayStart,
+ Token.ObjectStart, Token.ObjectFinish,
+ Token.ArrayFinish, Token.ArrayFinish, Token.ArrayFinish);
+ }
+
+ [Test]
+ public void Array ()
+ {
+ AssertTokenStream ("[1]", Token.ArrayStart, Token.Integer (1), Token.ArrayFinish);
+ AssertTokenStream ("[1,0]", Token.ArrayStart, Token.Integer (1), Token.Comma, Token.Integer (0), Token.ArrayFinish);
+ AssertTokenStream ("[\"a\",true,null]", Token.ArrayStart, Token.String ("a"), Token.Comma,
+ Token.Bool (true), Token.Comma, Token.Null, Token.ArrayFinish);
+ AssertTokenStream ("[0,1,[[2,[4]],5],6]", Token.ArrayStart, Token.Integer (0), Token.Comma, Token.Integer (1),
+ Token.Comma, Token.ArrayStart, Token.ArrayStart, Token.Integer (2), Token.Comma, Token.ArrayStart,
+ Token.Integer (4), Token.ArrayFinish, Token.ArrayFinish, Token.Comma, Token.Integer (5), Token.ArrayFinish,
+ Token.Comma, Token.Integer (6), Token.ArrayFinish);
+ }
+
+ [Test]
+ public void Object ()
+ {
+ AssertTokenStream ("{\"a\":{}}", Token.ObjectStart, Token.String ("a"), Token.Colon, Token.ObjectStart,
+ Token.ObjectFinish, Token.ObjectFinish);
+ AssertTokenStream ("{\"a\":{\"b\":[],\"c\":false}}", Token.ObjectStart, Token.String ("a"),
+ Token.Colon, Token.ObjectStart, Token.String ("b"), Token.Colon, Token.ArrayStart, Token.ArrayFinish,
+ Token.Comma, Token.String ("c"), Token.Colon, Token.Bool (false), Token.ObjectFinish, Token.ObjectFinish);
+ AssertTokenStream ("[{\"a\":{},{}]", Token.ArrayStart, Token.ObjectStart, Token.String ("a"), Token.Colon,
+ Token.ObjectStart, Token.ObjectFinish, Token.Comma, Token.ObjectStart, Token.ObjectFinish, Token.ArrayFinish);
+ }
+
+ private void AssertTokenStream (string input, params Token [] tokens)
+ {
+ int cmp_idx = 0;
+ tokenizer.SetInput (input);
+
+ while (true) {
+ Token token = tokenizer.Scan ();
+ if (token == null) {
+ if (cmp_idx != tokens.Length) {
+ throw new ApplicationException ("Unexpected EOF");
+ }
+ break;
+ }
+
+ Token compare = tokens[cmp_idx++];
+ if (compare.Type != token.Type) {
+ throw new ApplicationException (String.Format ("TokenTypes do not match (exp {0}, got {1}",
+ compare.Type, token.Type));
+ }
+
+ if (compare.Value == null && token.Value == null) {
+ continue;
+ }
+
+ if ((compare.Type == TokenType.Integer && (int)compare.Value != (int)token.Value) ||
+ (compare.Type == TokenType.Number && (double)compare.Value != (double)token.Value) ||
+ (compare.Type == TokenType.String && (string)compare.Value != (string)token.Value) ||
+ (compare.Type == TokenType.Boolean && (bool)compare.Value != (bool)token.Value)) {
+ throw new ApplicationException ("Token values do not match");
+ }
+ }
+ }
+ }
+}
+
+#endif
diff --git a/lib/Hyena/src/Hyena/Hyena.Json/Token.cs b/lib/Hyena/src/Hyena/Hyena.Json/Token.cs
new file mode 100644
index 0000000..4f9de6f
--- /dev/null
+++ b/lib/Hyena/src/Hyena/Hyena.Json/Token.cs
@@ -0,0 +1,116 @@
+//
+// Token.cs
+//
+// Author:
+// Aaron Bockover <abockover at novell.com>
+//
+// Copyright (C) 2008 Novell, Inc.
+//
+// Permission is hereby granted, free of charge, to any person obtaining
+// a copy of this software and associated documentation files (the
+// "Software"), to deal in the Software without restriction, including
+// without limitation the rights to use, copy, modify, merge, publish,
+// distribute, sublicense, and/or sell copies of the Software, and to
+// permit persons to whom the Software is furnished to do so, subject to
+// the following conditions:
+//
+// The above copyright notice and this permission notice shall be
+// included in all copies or substantial portions of the Software.
+//
+// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
+// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
+// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
+// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+//
+
+using System;
+
+namespace Hyena.Json
+{
+ internal class Token
+ {
+ public Token (TokenType type) : this (type, null)
+ {
+ }
+
+ public Token (TokenType type, object value)
+ {
+ this.type = type;
+ this.value = value;
+ }
+
+ private TokenType type;
+ public TokenType Type {
+ get { return type; }
+ }
+
+ private object value;
+ public object Value {
+ get { return value; }
+ set { this.value = value; }
+ }
+
+ private int source_line;
+ public int SourceLine {
+ get { return source_line; }
+ internal set { source_line = value; }
+ }
+
+ private int source_column;
+ public int SourceColumn {
+ get { return source_column; }
+ internal set { source_column = value; }
+ }
+
+ internal static Token ObjectStart {
+ get { return new Token (TokenType.ObjectStart); }
+ }
+
+ internal static Token ObjectFinish {
+ get { return new Token (TokenType.ObjectFinish); }
+ }
+
+ internal static Token ArrayStart {
+ get { return new Token (TokenType.ArrayStart); }
+ }
+
+ internal static Token ArrayFinish {
+ get { return new Token (TokenType.ArrayFinish); }
+ }
+
+ internal static Token Null {
+ get { return new Token (TokenType.Null); }
+ }
+
+ internal static Token Comma {
+ get { return new Token (TokenType.Comma); }
+ }
+
+ internal static Token Colon {
+ get { return new Token (TokenType.Colon); }
+ }
+
+ internal static Token Number (double value)
+ {
+ return new Token (TokenType.Number, value);
+ }
+
+ internal static Token Integer (int value)
+ {
+ return new Token (TokenType.Integer, value);
+ }
+
+ internal static Token String (string value)
+ {
+ return new Token (TokenType.String, value);
+ }
+
+ internal static Token Bool (bool value)
+ {
+ return new Token (TokenType.Boolean, value);
+ }
+ }
+}
diff --git a/lib/Hyena/src/Hyena/Hyena.Json/TokenType.cs b/lib/Hyena/src/Hyena/Hyena.Json/TokenType.cs
new file mode 100644
index 0000000..09b14a7
--- /dev/null
+++ b/lib/Hyena/src/Hyena/Hyena.Json/TokenType.cs
@@ -0,0 +1,52 @@
+//
+// TokenType.cs
+//
+// Author:
+// Aaron Bockover <abockover at novell.com>
+//
+// Copyright (C) 2008 Novell, Inc.
+//
+// Permission is hereby granted, free of charge, to any person obtaining
+// a copy of this software and associated documentation files (the
+// "Software"), to deal in the Software without restriction, including
+// without limitation the rights to use, copy, modify, merge, publish,
+// distribute, sublicense, and/or sell copies of the Software, and to
+// permit persons to whom the Software is furnished to do so, subject to
+// the following conditions:
+//
+// The above copyright notice and this permission notice shall be
+// included in all copies or substantial portions of the Software.
+//
+// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
+// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
+// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
+// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+//
+
+using System;
+
+namespace Hyena.Json
+{
+ [Flags]
+ internal enum TokenType
+ {
+ None = 0 << 0,
+ ObjectStart = 1 << 0,
+ ObjectFinish = 1 << 1,
+ ArrayStart = 1 << 2,
+ ArrayFinish = 1 << 3,
+ Boolean = 1 << 4,
+ String = 1 << 5,
+ Null = 1 << 6,
+ Number = 1 << 7,
+ Integer = 1 << 8,
+ Comma = 1 << 9,
+ Colon = 1 << 10,
+
+ Literal = String | Number | Boolean | Null | Integer,
+ Value = ObjectStart | ArrayStart | Literal
+ }
+}
diff --git a/lib/Hyena/src/Hyena/Hyena.Json/Tokenizer.cs b/lib/Hyena/src/Hyena/Hyena.Json/Tokenizer.cs
new file mode 100644
index 0000000..bf6d781
--- /dev/null
+++ b/lib/Hyena/src/Hyena/Hyena.Json/Tokenizer.cs
@@ -0,0 +1,329 @@
+//
+// Tokenizer.cs
+//
+// Author:
+// Aaron Bockover <abockover at novell.com>
+//
+// Copyright (C) 2008 Novell, Inc.
+//
+// Permission is hereby granted, free of charge, to any person obtaining
+// a copy of this software and associated documentation files (the
+// "Software"), to deal in the Software without restriction, including
+// without limitation the rights to use, copy, modify, merge, publish,
+// distribute, sublicense, and/or sell copies of the Software, and to
+// permit persons to whom the Software is furnished to do so, subject to
+// the following conditions:
+//
+// The above copyright notice and this permission notice shall be
+// included in all copies or substantial portions of the Software.
+//
+// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
+// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
+// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
+// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+//
+
+using System;
+using System.IO;
+using System.Text;
+
+namespace Hyena.Json
+{
+ internal class Tokenizer
+ {
+ private StreamReader reader;
+ private StringBuilder string_buffer;
+
+ private char peek = ' ';
+ private int current_line = 1;
+ private int current_column = 1;
+ private int token_start_line;
+ private int token_start_column;
+
+ public Tokenizer () { Reset (); }
+ public Tokenizer (string input) { SetInput (input); }
+ public Tokenizer (Stream stream) { SetInput (stream); }
+ public Tokenizer (StreamReader reader) { SetInput (reader); }
+
+ private void Reset ()
+ {
+ peek = ' ';
+ current_line = 1;
+ current_column = 1;
+ token_start_line = 0;
+ token_start_column = 0;
+ }
+
+ public void SetInput (StreamReader reader)
+ {
+ this.reader = reader;
+ Reset ();
+ }
+
+ public void SetInput (Stream stream)
+ {
+ SetInput (new StreamReader (stream));
+ }
+
+ public void SetInput (string input)
+ {
+ SetInput (new MemoryStream (Encoding.UTF8.GetBytes (input)));
+ }
+
+ private void ReadChar ()
+ {
+ int val = reader.Read ();
+ peek = val == -1 ? Char.MaxValue : (char)val;
+ current_column++;
+ }
+
+ private void UnexpectedCharacter (char ch)
+ {
+ throw new ApplicationException (String.Format ("Unexpected character '{0}' at [{1}:{2}]",
+ ch, current_line, current_column - 1));
+ }
+
+ private void InvalidSyntax (string message)
+ {
+ throw new ApplicationException (String.Format ("Invalid syntax: {0} at [{1}:{2}]",
+ message, current_line, current_column));
+ }
+
+ private StringBuilder GetStringBuilder ()
+ {
+ if (string_buffer == null) {
+ string_buffer = new StringBuilder (64);
+ return string_buffer;
+ }
+
+ string_buffer.Remove (0, string_buffer.Length);
+ return string_buffer;
+ }
+
+ private string LexString ()
+ {
+ StringBuilder buffer = GetStringBuilder ();
+ bool read = true;
+
+ while (!reader.EndOfStream) {
+ if (read) {
+ ReadChar ();
+ }
+
+ read = true;
+
+ if (peek == '\\') {
+ ReadChar ();
+ switch (peek) {
+ case 'u':
+ ReadChar ();
+ buffer.Append ((char)LexInt (true, 4));
+ read = false;
+ break;
+ case '"':
+ case '\\':
+ case '/': buffer.Append (peek); break;
+ case 'b': buffer.Append ('\b'); break;
+ case 'f': buffer.Append ('\f'); break;
+ case 'n': buffer.Append ('\n'); break;
+ case 'r': buffer.Append ('\r'); break;
+ case 't': buffer.Append ('\t'); break;
+ default:
+ UnexpectedCharacter (peek);
+ break;
+ }
+ } else if (peek == '"') {
+ ReadChar ();
+ return buffer.ToString ();
+ } else {
+ buffer.Append (peek);
+ }
+ }
+
+ if (peek != '"') {
+ InvalidSyntax ("Unterminated string, expected '\"' termination, got '" + peek + "'");
+ } else if (!read && reader.EndOfStream) {
+ ReadChar ();
+ }
+
+ return buffer.ToString ();
+ }
+
+ private string LexId ()
+ {
+ StringBuilder buffer = GetStringBuilder ();
+
+ do {
+ buffer.Append (peek);
+ ReadChar ();
+ } while (Char.IsLetterOrDigit (peek));
+
+ return buffer.ToString ();
+ }
+
+ private int LexInt ()
+ {
+ return LexInt (false, 0);
+ }
+
+ private int LexInt (bool hex, int maxDigits)
+ {
+ int value = 0;
+ int count = 0;
+
+ do {
+ value = (hex ? 16 : 10) * value + (hex
+ ? peek >= 'A' && peek <= 'F'
+ ? 10 + peek - 'A'
+ : (peek >= 'a' && peek <= 'f'
+ ? 10 + peek - 'a'
+ : peek - '0')
+ : peek - '0');
+
+ if (maxDigits > 0 && ++count >= maxDigits) {
+ ReadChar ();
+ return value;
+ }
+
+ ReadChar ();
+ } while (Char.IsDigit (peek) || (hex && ((peek >= 'a' && peek <= 'f') || (peek >= 'A' && peek <= 'F'))));
+
+ return value;
+ }
+
+ private double LexFraction ()
+ {
+ double fraction = 0;
+ double d = 10;
+
+ while (true) {
+ ReadChar ();
+
+ if (!Char.IsDigit (peek)) {
+ break;
+ }
+
+ fraction += (peek - '0') / d;
+ d *= 10;
+ }
+
+ return fraction;
+ }
+
+ private object LexNumber (out bool isDouble)
+ {
+ isDouble = false;
+ int intVal = 0;
+ double doubleVal = 0.0;
+ bool negate = peek == '-';
+ if (negate) {
+ ReadChar ();
+ }
+
+ if (peek != '0') {
+ doubleVal = intVal = LexInt ();
+ } else {
+ ReadChar ();
+ }
+
+ if (peek == '.') {
+ isDouble = true;
+ doubleVal += LexFraction ();
+ }
+
+ if (peek == 'e' || peek == 'E') {
+ isDouble = true;
+ ReadChar ();
+ if (peek == '-') {
+ ReadChar ();
+ doubleVal /= Math.Pow (10, LexInt ());
+ } else if (peek == '+') {
+ ReadChar ();
+ doubleVal *= Math.Pow (10, LexInt ());
+ } else if (Char.IsDigit (peek)) {
+ doubleVal *= Math.Pow (10, LexInt ());
+ } else {
+ InvalidSyntax ("Malformed exponent");
+ }
+ }
+
+ if (Char.IsDigit (peek)) {
+ InvalidSyntax ("Numbers starting with 0 must be followed by a . or not " +
+ "followed by a digit (octal syntax not legal)");
+ }
+
+ if (!isDouble)
+ return negate ? -1 * intVal : intVal;
+ else
+ return negate ? -1.0 * doubleVal : doubleVal;
+ }
+
+ public Token Scan ()
+ {
+ Token token = InnerScan ();
+ if (token == null) {
+ return null;
+ }
+
+ token.SourceLine = token_start_line;
+ token.SourceColumn = token_start_column - 1;
+ return token;
+ }
+
+ private Token InnerScan ()
+ {
+ for (; ; ReadChar ()) {
+ if (Char.IsWhiteSpace (peek) && peek != '\n') {
+ continue;
+ } else if (peek == '\n') {
+ current_line++;
+ current_column = 0;
+ } else {
+ break;
+ }
+ }
+
+ token_start_column = current_column;
+ token_start_line = current_line;
+
+ switch (peek) {
+ case '{': ReadChar (); return new Token (TokenType.ObjectStart);
+ case '}': ReadChar (); return new Token (TokenType.ObjectFinish);
+ case '[': ReadChar (); return new Token (TokenType.ArrayStart);
+ case ']': ReadChar (); return new Token (TokenType.ArrayFinish);
+ case ',': ReadChar (); return new Token (TokenType.Comma);
+ case ':': ReadChar (); return new Token (TokenType.Colon);
+ case '"': return new Token (TokenType.String, LexString ());
+ default:
+ if (peek == '-' || Char.IsDigit (peek)) {
+ bool isDouble;
+ object num = LexNumber (out isDouble);
+ if (!isDouble)
+ return new Token (TokenType.Integer, num);
+ else
+ return new Token (TokenType.Number, num);
+ } else if (Char.IsLetter (peek)) {
+ string identifier = LexId ();
+ switch (identifier) {
+ case "true": return new Token (TokenType.Boolean, true);
+ case "false": return new Token (TokenType.Boolean, false);
+ case "null": return new Token (TokenType.Null);
+ default:
+ InvalidSyntax ("Invalid identifier '" + identifier + "'");
+ break;
+ }
+ }
+
+ if (peek != Char.MaxValue) {
+ UnexpectedCharacter (peek);
+ }
+ break;
+ }
+
+ return null;
+ }
+ }
+}
diff --git a/lib/Hyena/src/Hyena/Hyena.Query/AliasedObjectSet.cs b/lib/Hyena/src/Hyena/Hyena.Query/AliasedObjectSet.cs
new file mode 100644
index 0000000..ba8ad48
--- /dev/null
+++ b/lib/Hyena/src/Hyena/Hyena.Query/AliasedObjectSet.cs
@@ -0,0 +1,113 @@
+//
+// AliasedObjectSet.cs
+//
+// Authors:
+// Gabriel Burt <gburt at novell.com>
+// Aaron Bockover <abockover at novell.com>
+//
+// Copyright (C) 2007-2008 Novell, Inc.
+//
+// Permission is hereby granted, free of charge, to any person obtaining
+// a copy of this software and associated documentation files (the
+// "Software"), to deal in the Software without restriction, including
+// without limitation the rights to use, copy, modify, merge, publish,
+// distribute, sublicense, and/or sell copies of the Software, and to
+// permit persons to whom the Software is furnished to do so, subject to
+// the following conditions:
+//
+// The above copyright notice and this permission notice shall be
+// included in all copies or substantial portions of the Software.
+//
+// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
+// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
+// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
+// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+//
+
+using System;
+using System.Text;
+using System.Collections;
+using System.Collections.Generic;
+
+namespace Hyena.Query
+{
+ public interface IAliasedObject
+ {
+ string Name { get; }
+ string [] Aliases { get; }
+ }
+
+ public class AliasedObjectSet<T> : IEnumerable<T> where T : IAliasedObject
+ {
+ protected Dictionary<string, T> map = new Dictionary<string, T> ();
+ protected List<string> aliases = new List<string> ();
+ protected T [] objects;
+
+ public AliasedObjectSet (params T [] objects)
+ {
+ this.objects = objects;
+ foreach (T obj in objects) {
+ map [obj.Name.ToLower ()] = obj;
+ foreach (string alias in obj.Aliases) {
+ if (!String.IsNullOrEmpty (alias) && alias.IndexOf (" ") == -1) {
+ foreach (string sub_alias in alias.Split(',')) {
+ string lower_alias = sub_alias.ToLower ();
+ map [lower_alias] = obj;
+ if (!aliases.Contains (lower_alias)) {
+ aliases.Add (lower_alias);
+ }
+ }
+ }
+ }
+ }
+ aliases.Sort (SortByLongest);
+ }
+
+ private int SortByLongest (string a, string b)
+ {
+ return b.Length.CompareTo (a.Length);
+ }
+
+ public string FindAlias (string input)
+ {
+ input = input.ToLower ();
+ foreach (string alias in aliases) {
+ if (input.StartsWith (alias)) {
+ return alias;
+ }
+ }
+ return null;
+ }
+
+ public T [] Objects {
+ get { return objects; }
+ }
+
+ public T First {
+ get { return objects [0]; }
+ }
+
+ public IEnumerator<T> GetEnumerator ()
+ {
+ foreach (T o in objects) {
+ yield return o;
+ }
+ }
+
+ IEnumerator IEnumerable.GetEnumerator ()
+ {
+ return GetEnumerator ();
+ }
+
+ public T this [string alias] {
+ get {
+ if (!String.IsNullOrEmpty (alias) && map.ContainsKey (alias.ToLower ()))
+ return map[alias.ToLower ()];
+ return default(T);
+ }
+ }
+ }
+}
diff --git a/lib/Hyena/src/Hyena/Hyena.Query/DateQueryValue.cs b/lib/Hyena/src/Hyena/Hyena.Query/DateQueryValue.cs
new file mode 100644
index 0000000..4a5e062
--- /dev/null
+++ b/lib/Hyena/src/Hyena/Hyena.Query/DateQueryValue.cs
@@ -0,0 +1,122 @@
+//
+// DateQueryValue.cs
+//
+// Authors:
+// Gabriel Burt <gburt at novell.com>
+//
+// Copyright (C) 2007-2008 Novell, Inc.
+//
+// Permission is hereby granted, free of charge, to any person obtaining
+// a copy of this software and associated documentation files (the
+// "Software"), to deal in the Software without restriction, including
+// without limitation the rights to use, copy, modify, merge, publish,
+// distribute, sublicense, and/or sell copies of the Software, and to
+// permit persons to whom the Software is furnished to do so, subject to
+// the following conditions:
+//
+// The above copyright notice and this permission notice shall be
+// included in all copies or substantial portions of the Software.
+//
+// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
+// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
+// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
+// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+//
+
+using System;
+using System.Collections.Generic;
+using System.Xml;
+using System.Text;
+using System.Text.RegularExpressions;
+
+using Mono.Unix;
+
+using Hyena;
+
+namespace Hyena.Query
+{
+ public class DateQueryValue : QueryValue
+ {
+ //public static readonly Operator Equal = new Operator ("equals", "= {0}", "==", "=", ":");
+ //public static readonly Operator NotEqual = new Operator ("notEqual", "!= {0}", true, "!=", "!:");
+ //public static readonly Operator LessThanEqual = new Operator ("lessThanEquals", "<= {0}", "<=");
+ //public static readonly Operator GreaterThanEqual = new Operator ("greaterThanEquals", ">= {0}", ">=");
+ public static readonly Operator LessThan = new Operator ("lessThan", Catalog.GetString ("before"), "< {0}", true, "<");
+ public static readonly Operator GreaterThan = new Operator ("greaterThan", Catalog.GetString ("after"), ">= {0}", ">");
+
+ protected DateTime value = DateTime.Now;
+
+ public override string XmlElementName {
+ get { return "date"; }
+ }
+
+ //protected static AliasedObjectSet<Operator> operators = new AliasedObjectSet<Operator> (Equal, NotEqual, LessThan, GreaterThan, LessThanEqual, GreaterThanEqual);
+ protected static AliasedObjectSet<Operator> operators = new AliasedObjectSet<Operator> (LessThan, GreaterThan);
+ public override AliasedObjectSet<Operator> OperatorSet {
+ get { return operators; }
+ }
+
+ public override object Value {
+ get { return value; }
+ }
+
+ public override void ParseUserQuery (string input)
+ {
+ try {
+ value = DateTime.Parse (input);
+ IsEmpty = false;
+ } catch {
+ IsEmpty = true;
+ }
+ }
+
+ public override string ToUserQuery ()
+ {
+ if (value.Hour == 0 && value.Minute == 0 && value.Second == 0) {
+ return value.ToString ("yyyy-MM-dd");
+ } else {
+ return value.ToString ();
+ }
+ }
+
+ public void SetValue (DateTime date)
+ {
+ value = date;
+ IsEmpty = false;
+ }
+
+ public override void LoadString (string val)
+ {
+ try {
+ SetValue (DateTime.Parse (val));
+ } catch {
+ IsEmpty = true;
+ }
+ }
+
+ public override void ParseXml (XmlElement node)
+ {
+ try {
+ LoadString (node.InnerText);
+ } catch {
+ IsEmpty = true;
+ }
+ }
+
+ public override string ToSql (Operator op)
+ {
+ if (op == GreaterThan) {
+ return DateTimeUtil.FromDateTime (value.AddDays (1.0)).ToString (System.Globalization.CultureInfo.InvariantCulture);
+ } else {
+ return DateTimeUtil.FromDateTime (value).ToString (System.Globalization.CultureInfo.InvariantCulture);
+ }
+ }
+
+ public DateTime DateTime {
+ get { return value; }
+ }
+ }
+}
diff --git a/lib/Hyena/src/Hyena/Hyena.Query/EnumQueryValue.cs b/lib/Hyena/src/Hyena/Hyena.Query/EnumQueryValue.cs
new file mode 100644
index 0000000..6b83945
--- /dev/null
+++ b/lib/Hyena/src/Hyena/Hyena.Query/EnumQueryValue.cs
@@ -0,0 +1,111 @@
+//
+// EnumQueryValue.cs
+//
+// Author:
+// Alexander Kojevnikov <alexander at kojevnikov.com>
+//
+// Copyright (C) 2009 Alexander Kojevnikov
+//
+// Permission is hereby granted, free of charge, to any person obtaining
+// a copy of this software and associated documentation files (the
+// "Software"), to deal in the Software without restriction, including
+// without limitation the rights to use, copy, modify, merge, publish,
+// distribute, sublicense, and/or sell copies of the Software, and to
+// permit persons to whom the Software is furnished to do so, subject to
+// the following conditions:
+//
+// The above copyright notice and this permission notice shall be
+// included in all copies or substantial portions of the Software.
+//
+// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
+// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
+// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
+// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+//
+
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Xml;
+using System.Text;
+
+using Mono.Unix;
+
+using Hyena;
+
+namespace Hyena.Query
+{
+ public abstract class EnumQueryValue : QueryValue
+ {
+ public static readonly Operator Equal = new Operator ("equals", Catalog.GetString ("is"), "= {0}", "=", "==", ":");
+ public static readonly Operator NotEqual = new Operator ("notEqual", Catalog.GetString ("is not"), "!= {0}", true, "!=", "!:");
+
+ protected int value;
+
+ public abstract IEnumerable<EnumQueryValueItem> Items { get; }
+
+ public override string XmlElementName {
+ get { return "int"; }
+ }
+
+ public override object Value {
+ get { return value; }
+ }
+
+ public void SetValue (int value)
+ {
+ this.value = value;
+ IsEmpty = false;
+ }
+
+ protected static AliasedObjectSet<Operator> operators = new AliasedObjectSet<Operator> (Equal, NotEqual);
+ public override AliasedObjectSet<Operator> OperatorSet {
+ get { return operators; }
+ }
+
+ public override void ParseUserQuery (string input)
+ {
+ foreach (var item in Items) {
+ if (input == item.ID.ToString () || input == item.Name || item.Aliases.Contains (input)) {
+ value = item.ID;
+ IsEmpty = false;
+ break;
+ }
+ }
+ }
+
+ public override void ParseXml (XmlElement node)
+ {
+ IsEmpty = !Int32.TryParse (node.InnerText, out value);
+ }
+
+ public override void LoadString (string str)
+ {
+ ParseUserQuery (str);
+ }
+
+ public override string ToSql (Operator op)
+ {
+ return Convert.ToString (value, System.Globalization.CultureInfo.InvariantCulture);
+ }
+ }
+
+ public sealed class EnumQueryValueItem : IAliasedObject
+ {
+ public int ID { get; private set; }
+ public string Name { get; private set; }
+ public string DisplayName { get; private set; }
+ public string[] Aliases { get; private set; }
+
+ public EnumQueryValueItem (int id, string name, string display_name, params string[] aliases)
+ {
+ ID = id;
+ Name = name;
+ DisplayName = display_name;
+ Aliases = aliases;
+ }
+ }
+}
diff --git a/lib/Hyena/src/Hyena/Hyena.Query/ExactStringQueryValue.cs b/lib/Hyena/src/Hyena/Hyena.Query/ExactStringQueryValue.cs
new file mode 100644
index 0000000..28da5bc
--- /dev/null
+++ b/lib/Hyena/src/Hyena/Hyena.Query/ExactStringQueryValue.cs
@@ -0,0 +1,45 @@
+//
+// ExactStringQueryValue.cs
+//
+// Authors:
+// John Millikin <jmillikin at gmail.com>
+//
+// Copyright (C) 2009 John Millikin
+//
+// Permission is hereby granted, free of charge, to any person obtaining
+// a copy of this software and associated documentation files (the
+// "Software"), to deal in the Software without restriction, including
+// without limitation the rights to use, copy, modify, merge, publish,
+// distribute, sublicense, and/or sell copies of the Software, and to
+// permit persons to whom the Software is furnished to do so, subject to
+// the following conditions:
+//
+// The above copyright notice and this permission notice shall be
+// included in all copies or substantial portions of the Software.
+//
+// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
+// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
+// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
+// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+//
+
+using System;
+
+namespace Hyena.Query
+{
+ // A query value that requires the string match exactly
+ public class ExactStringQueryValue : StringQueryValue
+ {
+ public override string ToSql (Operator op)
+ {
+ return String.IsNullOrEmpty (value) ? null : EscapeString (op, StringValue);
+ }
+
+ protected virtual string StringValue {
+ get { return value.ToLower (); }
+ }
+ }
+}
diff --git a/lib/Hyena/src/Hyena/Hyena.Query/ExactUriStringQueryValue.cs b/lib/Hyena/src/Hyena/Hyena.Query/ExactUriStringQueryValue.cs
new file mode 100644
index 0000000..01640c7
--- /dev/null
+++ b/lib/Hyena/src/Hyena/Hyena.Query/ExactUriStringQueryValue.cs
@@ -0,0 +1,39 @@
+//
+// ExactUriStringQueryValue.cs
+//
+// Authors:
+// Andrés G. Aragoneses <knocte at gmail.com>
+//
+// Copyright (C) 2010 Andrés G. Aragoneses
+//
+// Permission is hereby granted, free of charge, to any person obtaining
+// a copy of this software and associated documentation files (the
+// "Software"), to deal in the Software without restriction, including
+// without limitation the rights to use, copy, modify, merge, publish,
+// distribute, sublicense, and/or sell copies of the Software, and to
+// permit persons to whom the Software is furnished to do so, subject to
+// the following conditions:
+//
+// The above copyright notice and this permission notice shall be
+// included in all copies or substantial portions of the Software.
+//
+// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
+// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
+// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
+// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+//
+
+using System;
+
+namespace Hyena.Query
+{
+ public class ExactUriStringQueryValue : ExactStringQueryValue
+ {
+ protected override string StringValue {
+ get { return Uri.EscapeUriString (base.StringValue); }
+ }
+ }
+}
diff --git a/lib/Hyena/src/Hyena/Hyena.Query/FileSizeQueryValue.cs b/lib/Hyena/src/Hyena/Hyena.Query/FileSizeQueryValue.cs
new file mode 100644
index 0000000..ba0ad75
--- /dev/null
+++ b/lib/Hyena/src/Hyena/Hyena.Query/FileSizeQueryValue.cs
@@ -0,0 +1,148 @@
+//
+// FileSizeQueryValue.cs
+//
+// Authors:
+// Gabriel Burt <gburt at novell.com>
+// Aaron Bockover <abockover at novell.com>
+//
+// Copyright (C) 2007-2008 Novell, Inc.
+//
+// Permission is hereby granted, free of charge, to any person obtaining
+// a copy of this software and associated documentation files (the
+// "Software"), to deal in the Software without restriction, including
+// without limitation the rights to use, copy, modify, merge, publish,
+// distribute, sublicense, and/or sell copies of the Software, and to
+// permit persons to whom the Software is furnished to do so, subject to
+// the following conditions:
+//
+// The above copyright notice and this permission notice shall be
+// included in all copies or substantial portions of the Software.
+//
+// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
+// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
+// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
+// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+//
+
+using System;
+using System.Xml;
+using System.Text;
+
+using Hyena;
+
+namespace Hyena.Query
+{
+ public enum FileSizeFactor : long {
+ None = 1,
+ KB = 1024,
+ MB = 1048576,
+ GB = 1073741824,
+ TB = 1099511627776,
+ PB = 1125899906842624
+ }
+
+ public class FileSizeQueryValue : IntegerQueryValue
+ {
+ private FileSizeFactor factor = FileSizeFactor.None;
+ public FileSizeFactor Factor {
+ get { return factor; }
+ }
+
+ public FileSizeQueryValue ()
+ {
+ }
+
+ public FileSizeQueryValue (long bytes)
+ {
+ value = bytes;
+ IsEmpty = false;
+ DetermineFactor ();
+ }
+
+ public double FactoredValue {
+ get { return (double)value / (double)factor; }
+ }
+
+ public override void ParseUserQuery (string input)
+ {
+ if (input.Length > 1 && (input[input.Length - 1] == 'b' || input[input.Length - 1] == 'B')) {
+ input = input.Substring (0, input.Length - 1);
+ }
+
+ double double_value;
+ IsEmpty = !Double.TryParse (input, out double_value);
+
+ if (IsEmpty && input.Length > 1) {
+ IsEmpty = !Double.TryParse (input.Substring (0, input.Length - 1), out double_value);
+ }
+
+ if (!IsEmpty) {
+ switch (input[input.Length - 1]) {
+ case 'k': case 'K': factor = FileSizeFactor.KB; break;
+ case 'm': case 'M': factor = FileSizeFactor.MB; break;
+ case 'g': case 'G': factor = FileSizeFactor.GB; break;
+ case 't': case 'T': factor = FileSizeFactor.TB; break;
+ case 'p': case 'P': factor = FileSizeFactor.PB; break;
+ default : factor = FileSizeFactor.None; break;
+ }
+ value = (long)((double)factor * double_value);
+ }
+ }
+
+ public override void ParseXml (XmlElement node)
+ {
+ base.ParseUserQuery (node.InnerText);
+ if (node.HasAttribute ("factor")) {
+ this.factor = (FileSizeFactor) Enum.Parse (typeof(FileSizeFactor), node.GetAttribute ("factor"));
+ } else {
+ DetermineFactor ();
+ }
+ }
+
+ public override void AppendXml (XmlElement node)
+ {
+ base.AppendXml (node);
+ node.SetAttribute ("factor", factor.ToString ());
+ }
+
+ public void SetValue (double value, FileSizeFactor factor)
+ {
+ this.value = (long)(value * (double)factor);
+ this.factor = factor;
+ IsEmpty = false;
+ }
+
+ protected void DetermineFactor ()
+ {
+ if (!IsEmpty && value != 0) {
+ foreach (FileSizeFactor factor in Enum.GetValues (typeof(FileSizeFactor))) {
+ if (value >= (double)factor) {
+ this.factor = factor;
+ }
+ }
+ }
+ }
+
+ public override string ToUserQuery ()
+ {
+ return ToUserQuery (false);
+ }
+
+ public string ToUserQuery (bool always_decimal)
+ {
+ if (factor != FileSizeFactor.None) {
+ return String.Format ("{0} {1}",
+ IntValue == 0
+ ? "0"
+ : StringUtil.DoubleToTenthsPrecision (((double)IntValue / (double)factor), always_decimal),
+ factor.ToString ()
+ );
+ } else {
+ return base.ToUserQuery ();
+ }
+ }
+ }
+}
diff --git a/lib/Hyena/src/Hyena/Hyena.Query/IntegerKeyedObjectQueryValue.cs b/lib/Hyena/src/Hyena/Hyena.Query/IntegerKeyedObjectQueryValue.cs
new file mode 100644
index 0000000..7cbc9b0
--- /dev/null
+++ b/lib/Hyena/src/Hyena/Hyena.Query/IntegerKeyedObjectQueryValue.cs
@@ -0,0 +1,54 @@
+//
+// IntegerKeyedObjectQueryValue.cs
+//
+// Authors:
+// Scott Peterson <lunchtimemama at gmail.com>
+//
+// Copyright (C) 2008 Scott Peterson
+//
+// Permission is hereby granted, free of charge, to any person obtaining
+// a copy of this software and associated documentation files (the
+// "Software"), to deal in the Software without restriction, including
+// without limitation the rights to use, copy, modify, merge, publish,
+// distribute, sublicense, and/or sell copies of the Software, and to
+// permit persons to whom the Software is furnished to do so, subject to
+// the following conditions:
+//
+// The above copyright notice and this permission notice shall be
+// included in all copies or substantial portions of the Software.
+//
+// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
+// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
+// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
+// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+//
+
+using System;
+
+namespace Hyena.Query
+{
+ public abstract class IntegerKeyedObjectQueryValue<T> : IntegerQueryValue where T : class
+ {
+ private T object_value;
+
+ public override void SetValue (long value)
+ {
+ object_value = null;
+ base.SetValue (value);
+ }
+
+ public T ObjectValue {
+ get {
+ if (object_value == null) {
+ object_value = Resolve ();
+ }
+ return object_value;
+ }
+ }
+
+ protected abstract T Resolve ();
+ }
+}
diff --git a/lib/Hyena/src/Hyena/Hyena.Query/IntegerQueryValue.cs b/lib/Hyena/src/Hyena/Hyena.Query/IntegerQueryValue.cs
new file mode 100644
index 0000000..abb3245
--- /dev/null
+++ b/lib/Hyena/src/Hyena/Hyena.Query/IntegerQueryValue.cs
@@ -0,0 +1,110 @@
+//
+// IntegerQueryValue.cs
+//
+// Authors:
+// Gabriel Burt <gburt at novell.com>
+//
+// Copyright (C) 2007-2008 Novell, Inc.
+//
+// Permission is hereby granted, free of charge, to any person obtaining
+// a copy of this software and associated documentation files (the
+// "Software"), to deal in the Software without restriction, including
+// without limitation the rights to use, copy, modify, merge, publish,
+// distribute, sublicense, and/or sell copies of the Software, and to
+// permit persons to whom the Software is furnished to do so, subject to
+// the following conditions:
+//
+// The above copyright notice and this permission notice shall be
+// included in all copies or substantial portions of the Software.
+//
+// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
+// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
+// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
+// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+//
+
+using System;
+using System.Xml;
+using System.Text;
+
+using Mono.Unix;
+
+using Hyena;
+
+namespace Hyena.Query
+{
+ public class IntegerQueryValue : QueryValue
+ {
+ public static readonly Operator Equal = new Operator ("equals", Catalog.GetString ("is"), "= {0}", "=", "==", ":");
+ public static readonly Operator NotEqual = new Operator ("notEqual", Catalog.GetString ("is not"), "!= {0}", true, "!=", "!:");
+ public static readonly Operator LessThanEqual = new Operator ("lessThanEquals", Catalog.GetString ("at most"), "<= {0}", "<=");
+ public static readonly Operator GreaterThanEqual = new Operator ("greaterThanEquals", Catalog.GetString ("at least"), ">= {0}", ">=");
+ public static readonly Operator LessThan = new Operator ("lessThan", Catalog.GetString ("less than"), "< {0}", "<");
+ public static readonly Operator GreaterThan = new Operator ("greaterThan", Catalog.GetString ("more than"), "> {0}", ">");
+
+ protected long value;
+
+ public override string XmlElementName {
+ get { return "int"; }
+ }
+
+ public override void ParseUserQuery (string input)
+ {
+ IsEmpty = !Int64.TryParse (input, out value);
+ }
+
+ public override void LoadString (string input)
+ {
+ ParseUserQuery (input);
+ }
+
+ public override void ParseXml (XmlElement node)
+ {
+ ParseUserQuery (node.InnerText);
+ }
+
+ public void SetValue (int value)
+ {
+ SetValue ((long) value);
+ }
+
+ public virtual void SetValue (long value)
+ {
+ this.value = value;
+ IsEmpty = false;
+ }
+
+ protected static AliasedObjectSet<Operator> operators = new AliasedObjectSet<Operator> (Equal, NotEqual, LessThan, GreaterThan, LessThanEqual, GreaterThanEqual);
+ public override AliasedObjectSet<Operator> OperatorSet {
+ get { return operators; }
+ }
+
+ public override object Value {
+ get { return value; }
+ }
+
+ public long IntValue {
+ get { return value; }
+ }
+
+ public virtual long DefaultValue {
+ get { return 0; }
+ }
+
+ public virtual long MinValue {
+ get { return Int64.MinValue; }
+ }
+
+ public virtual long MaxValue {
+ get { return Int64.MaxValue; }
+ }
+
+ public override string ToSql (Operator op)
+ {
+ return Convert.ToString (value, System.Globalization.CultureInfo.InvariantCulture);
+ }
+ }
+}
diff --git a/lib/Hyena/src/Hyena/Hyena.Query/NullQueryValue.cs b/lib/Hyena/src/Hyena/Hyena.Query/NullQueryValue.cs
new file mode 100644
index 0000000..e1eac54
--- /dev/null
+++ b/lib/Hyena/src/Hyena/Hyena.Query/NullQueryValue.cs
@@ -0,0 +1,89 @@
+//
+// NullQueryValue.cs
+//
+// Authors:
+// Gabriel Burt <gburt at novell.com>
+//
+// Copyright (C) 2008 Novell, Inc.
+//
+// Permission is hereby granted, free of charge, to any person obtaining
+// a copy of this software and associated documentation files (the
+// "Software"), to deal in the Software without restriction, including
+// without limitation the rights to use, copy, modify, merge, publish,
+// distribute, sublicense, and/or sell copies of the Software, and to
+// permit persons to whom the Software is furnished to do so, subject to
+// the following conditions:
+//
+// The above copyright notice and this permission notice shall be
+// included in all copies or substantial portions of the Software.
+//
+// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
+// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
+// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
+// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+//
+
+using System;
+using System.Xml;
+using System.Text;
+
+using Mono.Unix;
+
+using Hyena;
+
+namespace Hyena.Query
+{
+ public class NullQueryValue : QueryValue
+ {
+ public static readonly Operator IsNullOrEmpty = new Operator ("empty", Catalog.GetString ("empty"), "IN (NULL, '', 0)", true, "!");
+
+ public static readonly NullQueryValue Instance = new NullQueryValue ();
+
+ public override string XmlElementName {
+ get { return "empty"; }
+ }
+
+ public override object Value {
+ get { return null; }
+ }
+
+ protected static AliasedObjectSet<Operator> operators = new AliasedObjectSet<Operator> (IsNullOrEmpty);
+ public override AliasedObjectSet<Operator> OperatorSet {
+ get { return operators; }
+ }
+
+ private NullQueryValue ()
+ {
+ IsEmpty = false;
+ }
+
+ public override void ParseUserQuery (string input)
+ {
+ }
+
+ public override void LoadString (string input)
+ {
+ }
+
+ public override void ParseXml (XmlElement node)
+ {
+ }
+
+ public override void AppendXml (XmlElement node)
+ {
+ node.InnerText = String.Empty;
+ }
+
+ public void SetValue (string str)
+ {
+ }
+
+ public override string ToSql (Operator op)
+ {
+ return null;
+ }
+ }
+}
diff --git a/lib/Hyena/src/Hyena/Hyena.Query/QueryField.cs b/lib/Hyena/src/Hyena/Hyena.Query/QueryField.cs
new file mode 100644
index 0000000..75288d2
--- /dev/null
+++ b/lib/Hyena/src/Hyena/Hyena.Query/QueryField.cs
@@ -0,0 +1,186 @@
+//
+// QueryField.cs
+//
+// Authors:
+// Gabriel Burt <gburt at novell.com>
+// Aaron Bockover <abockover at novell.com>
+//
+// Copyright (C) 2007-2008 Novell, Inc.
+//
+// Permission is hereby granted, free of charge, to any person obtaining
+// a copy of this software and associated documentation files (the
+// "Software"), to deal in the Software without restriction, including
+// without limitation the rights to use, copy, modify, merge, publish,
+// distribute, sublicense, and/or sell copies of the Software, and to
+// permit persons to whom the Software is furnished to do so, subject to
+// the following conditions:
+//
+// The above copyright notice and this permission notice shall be
+// included in all copies or substantial portions of the Software.
+//
+// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
+// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
+// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
+// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+//
+
+using System;
+using System.Text;
+using System.Collections.Generic;
+
+namespace Hyena.Query
+{
+ public class QueryField : IAliasedObject
+ {
+ private bool no_custom_format;
+ private bool column_lowered;
+
+ private Type [] value_types;
+ public Type [] ValueTypes {
+ get { return value_types; }
+ }
+
+ private string name;
+ public string Name {
+ get { return name; }
+ set { name = value; }
+ }
+
+ private string property_name;
+ public string PropertyName {
+ get { return property_name; }
+ set { property_name = value; }
+ }
+
+ private string label;
+ public string Label {
+ get { return label; }
+ set { label = value; }
+ }
+
+ private string short_label;
+ public string ShortLabel {
+ get { return short_label ?? label; }
+ set { short_label = value; }
+ }
+
+ private string [] aliases;
+ public string [] Aliases {
+ get { return aliases; }
+ }
+
+ public string PrimaryAlias {
+ get { return aliases[0]; }
+ }
+
+ private string column;
+ public string Column {
+ get { return column; }
+ }
+
+ private bool is_default;
+ public bool IsDefault {
+ get { return is_default; }
+ }
+
+ public QueryField (string name, string propertyName, string label, string column, params string [] aliases)
+ : this (name, propertyName, label, column, false, aliases)
+ {
+ }
+
+ public QueryField (string name, string propertyName, string label, string column, bool isDefault, params string [] aliases)
+ : this (name, propertyName, label, column, new Type [] {typeof(StringQueryValue)}, isDefault, aliases)
+ {
+ }
+
+ public QueryField (string name, string propertyName, string label, string column, Type valueType, params string [] aliases)
+ : this (name, propertyName, label, column, new Type [] {valueType}, false, aliases)
+ {
+ }
+
+ public QueryField (string name, string propertyName, string label, string column, Type [] valueTypes, params string [] aliases)
+ : this (name, propertyName, label, column, valueTypes, false, aliases)
+ {
+ }
+
+ public QueryField (string name, string propertyName, string label, string column, Type [] valueTypes, bool isDefault, params string [] aliases)
+ {
+ this.name = name;
+ this.property_name = propertyName;
+ this.label = label;
+ this.column = column;
+ this.value_types = valueTypes;
+ this.is_default = isDefault;
+ this.aliases = aliases;
+
+ this.no_custom_format = (Column.IndexOf ("{0}") == -1 && Column.IndexOf ("{1}") == -1);
+ this.column_lowered = (Column.IndexOf ("Lowered") != -1);
+
+ if (!no_custom_format) {
+ // Ensure we have parens around any custom 'columns' that may be an OR of two columns
+ this.column = String.Format ("({0})", this.column);
+ }
+
+ foreach (Type value_type in valueTypes) {
+ QueryValue.AddValueType (value_type);
+ }
+ }
+
+ public IEnumerable<QueryValue> CreateQueryValues ()
+ {
+ foreach (Type type in ValueTypes) {
+ yield return Activator.CreateInstance (type) as QueryValue;
+ }
+ }
+
+ public string ToTermString (string op, string value)
+ {
+ return ToTermString (PrimaryAlias, op, value);
+ }
+
+ public string ToSql (Operator op, QueryValue qv)
+ {
+ string value = qv.ToSql (op) ?? String.Empty;
+
+ if (op == null) op = qv.OperatorSet.First;
+
+ StringBuilder sb = new StringBuilder ();
+
+ if (no_custom_format) {
+ string column_with_key = Column;
+ if (qv is StringQueryValue && !(column_lowered || qv is ExactStringQueryValue)) {
+ column_with_key = String.Format ("HYENA_SEARCH_KEY({0})", Column);
+ }
+ sb.AppendFormat ("{0} {1}", column_with_key, String.Format (op.SqlFormat, value));
+
+ if (op.IsNot) {
+ return String.Format ("({0} OR {1} IS NULL)", sb.ToString (), Column);
+ } else {
+ return String.Format ("({0} AND {1} IS NOT NULL)", sb.ToString (), Column);
+ }
+ } else {
+ sb.AppendFormat (
+ Column, String.Format (op.SqlFormat, value),
+ value, op.IsNot ? "NOT" : null
+ );
+ }
+
+ return sb.ToString ();
+ }
+
+ public static string ToTermString (string alias, string op, string value)
+ {
+ value = String.Format (
+ "{1}{0}{1}",
+ value, value.IndexOf (" ") == -1 ? String.Empty : "\""
+ );
+
+ return String.IsNullOrEmpty (alias)
+ ? value
+ : String.Format ("{0}{1}{2}", alias, op, value);
+ }
+ }
+}
diff --git a/lib/Hyena/src/Hyena/Hyena.Query/QueryFieldSet.cs b/lib/Hyena/src/Hyena/Hyena.Query/QueryFieldSet.cs
new file mode 100644
index 0000000..024f7cf
--- /dev/null
+++ b/lib/Hyena/src/Hyena/Hyena.Query/QueryFieldSet.cs
@@ -0,0 +1,46 @@
+//
+// QueryFieldSet.cs
+//
+// Authors:
+// Gabriel Burt <gburt at novell.com>
+// Aaron Bockover <abockover at novell.com>
+//
+// Copyright (C) 2007-2008 Novell, Inc.
+//
+// Permission is hereby granted, free of charge, to any person obtaining
+// a copy of this software and associated documentation files (the
+// "Software"), to deal in the Software without restriction, including
+// without limitation the rights to use, copy, modify, merge, publish,
+// distribute, sublicense, and/or sell copies of the Software, and to
+// permit persons to whom the Software is furnished to do so, subject to
+// the following conditions:
+//
+// The above copyright notice and this permission notice shall be
+// included in all copies or substantial portions of the Software.
+//
+// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
+// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
+// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
+// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+//
+
+using System;
+using System.Text;
+using System.Collections.Generic;
+
+namespace Hyena.Query
+{
+ public class QueryFieldSet : AliasedObjectSet<QueryField>
+ {
+ public QueryFieldSet (params QueryField [] fields) : base (fields)
+ {
+ }
+
+ public QueryField [] Fields {
+ get { return Objects; }
+ }
+ }
+}
diff --git a/lib/Hyena/src/Hyena/Hyena.Query/QueryLimit.cs b/lib/Hyena/src/Hyena/Hyena.Query/QueryLimit.cs
new file mode 100644
index 0000000..c9b788e
--- /dev/null
+++ b/lib/Hyena/src/Hyena/Hyena.Query/QueryLimit.cs
@@ -0,0 +1,81 @@
+//
+// QueryLimit.cs
+//
+// Authors:
+// Gabriel Burt <gburt at novell.com>
+//
+// Copyright (C) 2008 Novell, Inc.
+//
+// Permission is hereby granted, free of charge, to any person obtaining
+// a copy of this software and associated documentation files (the
+// "Software"), to deal in the Software without restriction, including
+// without limitation the rights to use, copy, modify, merge, publish,
+// distribute, sublicense, and/or sell copies of the Software, and to
+// permit persons to whom the Software is furnished to do so, subject to
+// the following conditions:
+//
+// The above copyright notice and this permission notice shall be
+// included in all copies or substantial portions of the Software.
+//
+// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
+// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
+// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
+// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+//
+
+using System;
+using System.Text;
+using System.Collections.Generic;
+
+namespace Hyena.Query
+{
+ public class QueryLimit
+ {
+ private string name;
+ public string Name {
+ get { return name; }
+ }
+
+ private string label;
+ public string Label {
+ get { return label; }
+ set { label = value; }
+ }
+
+ private bool row_based;
+ public bool RowBased {
+ get { return row_based; }
+ }
+
+ private int factor = 1;
+ public int Factor {
+ get { return factor; }
+ }
+
+ private string column;
+ public string Column {
+ get { return column; }
+ }
+
+ public QueryLimit (string name, string label, string column, int factor) : this (name, label, false)
+ {
+ this.column = column;
+ this.factor = factor;
+ }
+
+ public QueryLimit (string name, string label, bool row_based)
+ {
+ this.name = name;
+ this.label = label;
+ this.row_based = row_based;
+ }
+
+ public string ToSql (IntegerQueryValue limit_value)
+ {
+ return RowBased ? String.Format ("LIMIT {0}", limit_value.ToSql ()) : null;
+ }
+ }
+}
diff --git a/lib/Hyena/src/Hyena/Hyena.Query/QueryListNode.cs b/lib/Hyena/src/Hyena/Hyena.Query/QueryListNode.cs
new file mode 100644
index 0000000..366481b
--- /dev/null
+++ b/lib/Hyena/src/Hyena/Hyena.Query/QueryListNode.cs
@@ -0,0 +1,249 @@
+//
+// QueryListNode.cs
+//
+// Author:
+// Aaron Bockover <abockover at novell.com>
+// Gabriel Burt <gburt at novell.com>
+//
+// Copyright (C) 2007-2008 Novell, Inc.
+//
+// Permission is hereby granted, free of charge, to any person obtaining
+// a copy of this software and associated documentation files (the
+// "Software"), to deal in the Software without restriction, including
+// without limitation the rights to use, copy, modify, merge, publish,
+// distribute, sublicense, and/or sell copies of the Software, and to
+// permit persons to whom the Software is furnished to do so, subject to
+// the following conditions:
+//
+// The above copyright notice and this permission notice shall be
+// included in all copies or substantial portions of the Software.
+//
+// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
+// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
+// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
+// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+//
+
+using System;
+using System.Xml;
+using System.Text;
+using System.Collections.Generic;
+
+namespace Hyena.Query
+{
+ public enum Keyword {
+ Not,
+ Or,
+ And
+ }
+
+ public class QueryListNode : QueryNode
+ {
+ private List<QueryNode> children = new List<QueryNode>();
+ private Keyword keyword;
+
+ public QueryListNode(Keyword keyword) : base()
+ {
+ this.keyword = keyword;
+ }
+
+ public QueryListNode(Keyword keyword, QueryListNode parent) : base(parent)
+ {
+ this.keyword = keyword;
+ }
+
+ public void AddChild(QueryNode child)
+ {
+ child.Parent = this;
+ children.Add(child);
+ }
+
+ public void RemoveChild(QueryNode child)
+ {
+ child.Parent = null;
+ children.Remove(child);
+ }
+
+ public void TakeChildren (QueryListNode from)
+ {
+ foreach (QueryNode child in from.Children) {
+ AddChild (child);
+ }
+ from.Children.Clear ();
+ }
+
+ public void ReplaceChild(QueryNode old_child, QueryNode new_child)
+ {
+ int index = children.IndexOf(old_child);
+ if(index < 0) {
+ throw new ApplicationException("old_child does not exist");
+ }
+
+ children.RemoveAt(index);
+ children.Insert(index, new_child);
+ }
+
+ public void InsertChild(int index, QueryNode child)
+ {
+ child.Parent = this;
+ children.Insert(index, child);
+ }
+
+ public int IndexOfChild(QueryNode child)
+ {
+ return children.IndexOf(child);
+ }
+
+ internal override void Dump(int depth)
+ {
+ PrintIndent(depth);
+ Console.WriteLine("<{0}>", Keyword);
+
+ foreach(QueryNode child in children) {
+ child.Dump(depth + 1);
+ }
+
+ PrintIndent(depth);
+ Console.WriteLine("</{0}>", Keyword);
+ }
+
+ public QueryNode GetLeftSibling(QueryNode node)
+ {
+ int index = IndexOfChild(node);
+ if(index >= 1) {
+ return Children[index - 1];
+ }
+
+ return null;
+ }
+
+ public QueryNode GetRightSibling(QueryNode node)
+ {
+ int index = IndexOfChild(node);
+ if(index < 0 || index > ChildCount - 2) {
+ return null;
+ }
+ return Children[index + 1];
+ }
+
+ public override QueryNode Trim ()
+ {
+ // Trim depth first
+ List<QueryNode> copy = new List<QueryNode> (Children);
+ foreach (QueryNode child in copy)
+ child.Trim ();
+
+ if (Keyword == Keyword.Not) {
+ if (ChildCount != 1) {
+ if (Parent != null) {
+ Parent.RemoveChild (this);
+ } else {
+ return null;
+ }
+ }
+ } else {
+ if (ChildCount <= 1) {
+ if (Parent != null) {
+ QueryListNode p = Parent;
+ p.RemoveChild (this);
+ p.TakeChildren (this);
+ } else if (ChildCount == 1) {
+ Children[0].Parent = null;
+ return Children[0];
+ }
+ }
+ }
+
+ return this;
+ }
+
+ public override void AppendXml (XmlDocument doc, XmlNode parent, QueryFieldSet fieldSet)
+ {
+ if (ChildCount == 0)
+ return;
+
+ XmlElement node = doc.CreateElement (Keyword.ToString ().ToLower ());
+ parent.AppendChild (node);
+ foreach (QueryNode child in Children)
+ child.AppendXml (doc, node, fieldSet);
+ }
+
+ public override void AppendUserQuery (StringBuilder sb)
+ {
+ if (ChildCount == 0)
+ return;
+
+ if (Keyword != Keyword.Not) {
+ if (ChildCount > 1 && Parent != null)
+ sb.Append ("(");
+ bool first = true;
+ foreach (QueryNode child in Children) {
+ if (!first) {
+ if (Keyword == Keyword.Or) {
+ // FIXME translate
+ sb.Append (" or ");
+ } else {
+ sb.Append (" ");
+ }
+ } else {
+ first = false;
+ }
+ child.AppendUserQuery (sb);
+ }
+ if (ChildCount > 1 && Parent != null)
+ sb.Append (")");
+ } else {
+ sb.Append ("-");
+ Children [0].AppendUserQuery (sb);
+ }
+ }
+
+ public override void AppendSql (StringBuilder sb, QueryFieldSet fieldSet)
+ {
+ if (ChildCount == 0)
+ return;
+
+ if (Keyword != Keyword.Not) {
+ sb.Append ("(");
+ bool first = true;
+ foreach (QueryNode child in Children) {
+ if (!first) {
+ sb.AppendFormat (" {0} ", Keyword);
+ } else {
+ first = false;
+ }
+ child.AppendSql (sb, fieldSet);
+ }
+ sb.Append (")");
+ } else {
+ sb.Append ("NOT(");
+ Children [0].AppendSql (sb, fieldSet);
+ sb.Append (")");
+ }
+ }
+
+ public bool IsEmpty {
+ get { return ChildCount == 0; }
+ }
+
+ public List<QueryNode> Children {
+ get { return children; }
+ }
+
+ public QueryNode LastChild {
+ get { return ChildCount > 0 ? children[ChildCount - 1] : null; }
+ }
+
+ public int ChildCount {
+ get { return children.Count; }
+ }
+
+ public Keyword Keyword {
+ get { return keyword; }
+ set { keyword = value; }
+ }
+ }
+}
diff --git a/lib/Hyena/src/Hyena/Hyena.Query/QueryNode.cs b/lib/Hyena/src/Hyena/Hyena.Query/QueryNode.cs
new file mode 100644
index 0000000..0634c8c
--- /dev/null
+++ b/lib/Hyena/src/Hyena/Hyena.Query/QueryNode.cs
@@ -0,0 +1,233 @@
+//
+// QueryNode.cs
+//
+// Author:
+// Aaron Bockover <abockover at novell.com>
+// Gabriel Burt <gburt at novell.com>
+//
+// Copyright (C) 2007-2008 Novell, Inc.
+//
+// Permission is hereby granted, free of charge, to any person obtaining
+// a copy of this software and associated documentation files (the
+// "Software"), to deal in the Software without restriction, including
+// without limitation the rights to use, copy, modify, merge, publish,
+// distribute, sublicense, and/or sell copies of the Software, and to
+// permit persons to whom the Software is furnished to do so, subject to
+// the following conditions:
+//
+// The above copyright notice and this permission notice shall be
+// included in all copies or substantial portions of the Software.
+//
+// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
+// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
+// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
+// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+//
+
+using System;
+using System.Collections.Generic;
+using System.Xml;
+using System.IO;
+using System.Text;
+
+namespace Hyena.Query
+{
+ public enum QueryNodeSearchMethod
+ {
+ DepthFirst,
+ BreadthFirst
+ }
+
+ public abstract class QueryNode
+ {
+ private QueryListNode parent;
+ private int source_column;
+ private int source_line;
+
+ public QueryNode()
+ {
+ }
+
+ public QueryNode(QueryListNode parent)
+ {
+ Parent = parent;
+ Parent.AddChild(this);
+ }
+
+ protected void PrintIndent(int depth)
+ {
+ Console.Write(String.Empty.PadLeft(depth * 2, ' '));
+ }
+
+ public void Dump()
+ {
+ Dump(0);
+ }
+
+ internal virtual void Dump(int depth)
+ {
+ PrintIndent(depth);
+ Console.WriteLine(this);
+ }
+
+ public abstract QueryNode Trim ();
+
+ public string ToUserQuery ()
+ {
+ StringBuilder sb = new StringBuilder ();
+ AppendUserQuery (sb);
+ return sb.ToString ();
+ }
+
+ public abstract void AppendUserQuery (StringBuilder sb);
+
+ public string ToXml (QueryFieldSet fieldSet)
+ {
+ return ToXml (fieldSet, false);
+ }
+
+ public virtual string ToXml (QueryFieldSet fieldSet, bool pretty)
+ {
+ XmlDocument doc = new XmlDocument ();
+
+ XmlElement request = doc.CreateElement ("request");
+ doc.AppendChild (request);
+
+ XmlElement query = doc.CreateElement ("query");
+ query.SetAttribute ("banshee-version", "1");
+ request.AppendChild (query);
+
+ AppendXml (doc, query, fieldSet);
+
+ if (!pretty) {
+ return doc.OuterXml;
+ }
+
+ using (StringWriter sw = new StringWriter ()) {
+ using (XmlTextWriter xtw = new XmlTextWriter (sw)) {
+ xtw.Formatting = System.Xml.Formatting.Indented;
+ xtw.Indentation = 2;
+ doc.WriteTo (xtw);
+ return sw.ToString ();
+ }
+ }
+ }
+
+ public IEnumerable<T> SearchForValues<T> () where T : QueryValue
+ {
+ return SearchForValues<T> (QueryNodeSearchMethod.DepthFirst);
+ }
+
+ public IEnumerable<T> SearchForValues<T> (QueryNodeSearchMethod method) where T : QueryValue
+ {
+ if (method == QueryNodeSearchMethod.DepthFirst) {
+ return SearchForValuesByDepth<T> (this);
+ } else {
+ return SearchForValuesByBreadth<T> ();
+ }
+ }
+
+ private static IEnumerable<T> SearchForValuesByDepth<T> (QueryNode node) where T : QueryValue
+ {
+ QueryListNode list = node as QueryListNode;
+ if (list != null) {
+ foreach (QueryNode child in list.Children) {
+ foreach (T item in SearchForValuesByDepth<T> (child)) {
+ yield return item;
+ }
+ }
+ } else {
+ QueryTermNode term = node as QueryTermNode;
+ if (term != null) {
+ T value = term.Value as T;
+ if (value != null) {
+ yield return value;
+ }
+ }
+ }
+ }
+
+ private IEnumerable<T> SearchForValuesByBreadth<T> () where T : QueryValue
+ {
+ Queue<QueryNode> queue = new Queue<QueryNode> ();
+ queue.Enqueue (this);
+ do {
+ QueryNode node = queue.Dequeue ();
+ QueryListNode list = node as QueryListNode;
+ if (list != null) {
+ foreach (QueryNode child in list.Children) {
+ queue.Enqueue (child);
+ }
+ } else {
+ QueryTermNode term = node as QueryTermNode;
+ if (term != null) {
+ T value = term.Value as T;
+ if (value != null) {
+ yield return value;
+ }
+ }
+ }
+ } while (queue.Count > 0);
+ }
+
+ public IEnumerable<QueryField> GetFields ()
+ {
+ foreach (QueryTermNode term in GetTerms ())
+ yield return term.Field;
+ }
+
+ public IEnumerable<QueryTermNode> GetTerms ()
+ {
+ Queue<QueryNode> queue = new Queue<QueryNode> ();
+ queue.Enqueue (this);
+ do {
+ QueryNode node = queue.Dequeue ();
+ QueryListNode list = node as QueryListNode;
+ if (list != null) {
+ foreach (QueryNode child in list.Children) {
+ queue.Enqueue (child);
+ }
+ } else {
+ QueryTermNode term = node as QueryTermNode;
+ if (term != null) {
+ yield return term;
+ }
+ }
+ } while (queue.Count > 0);
+ }
+
+ public override string ToString ()
+ {
+ return ToUserQuery ();
+ }
+
+ public abstract void AppendXml (XmlDocument doc, XmlNode parent, QueryFieldSet fieldSet);
+
+ public virtual string ToSql (QueryFieldSet fieldSet)
+ {
+ StringBuilder sb = new StringBuilder ();
+ AppendSql (sb, fieldSet);
+ return sb.ToString ();
+ }
+
+ public abstract void AppendSql (StringBuilder sb, QueryFieldSet fieldSet);
+
+ public QueryListNode Parent {
+ get { return parent; }
+ set { parent = value; }
+ }
+
+ public int SourceColumn {
+ get { return source_column; }
+ set { source_column = value; }
+ }
+
+ public int SourceLine {
+ get { return source_line; }
+ set { source_line = value; }
+ }
+ }
+}
diff --git a/lib/Hyena/src/Hyena/Hyena.Query/QueryOperator.cs b/lib/Hyena/src/Hyena/Hyena.Query/QueryOperator.cs
new file mode 100644
index 0000000..db46ddb
--- /dev/null
+++ b/lib/Hyena/src/Hyena/Hyena.Query/QueryOperator.cs
@@ -0,0 +1,83 @@
+//
+// QueryOperator.cs
+//
+// Author:
+// Aaron Bockover <abockover at novell.com>
+// Gabriel Burt <gburt at novell.com>
+//
+// Copyright (C) 2007-2008 Novell, Inc.
+//
+// Permission is hereby granted, free of charge, to any person obtaining
+// a copy of this software and associated documentation files (the
+// "Software"), to deal in the Software without restriction, including
+// without limitation the rights to use, copy, modify, merge, publish,
+// distribute, sublicense, and/or sell copies of the Software, and to
+// permit persons to whom the Software is furnished to do so, subject to
+// the following conditions:
+//
+// The above copyright notice and this permission notice shall be
+// included in all copies or substantial portions of the Software.
+//
+// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
+// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
+// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
+// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+//
+
+using System;
+using System.Xml;
+using System.Text;
+using System.Collections.Generic;
+
+namespace Hyena.Query
+{
+ public class Operator : IAliasedObject
+ {
+ public string name;
+ public string Name {
+ get { return name; }
+ }
+
+ public string label;
+ public string Label {
+ get { return label ?? Name; }
+ set { label = value; }
+ }
+
+ private string [] aliases;
+ public string [] Aliases {
+ get { return aliases; }
+ }
+
+ public string PrimaryAlias {
+ get { return aliases [0]; }
+ }
+
+ private string sql_format;
+ public string SqlFormat {
+ get { return sql_format; }
+ }
+
+ // FIXME get rid of this
+ private bool is_not;
+ public bool IsNot {
+ get { return is_not; }
+ }
+
+ internal Operator (string name, string label, string sql_format, params string [] userOps) : this (name, label, sql_format, false, userOps)
+ {
+ }
+
+ internal Operator (string name, string label, string sql_format, bool is_not, params string [] userOps)
+ {
+ this.name = name;
+ this.label = label;
+ this.sql_format = sql_format;
+ this.aliases = userOps;
+ this.is_not = is_not;
+ }
+ }
+}
diff --git a/lib/Hyena/src/Hyena/Hyena.Query/QueryOrder.cs b/lib/Hyena/src/Hyena/Hyena.Query/QueryOrder.cs
new file mode 100644
index 0000000..71e98e6
--- /dev/null
+++ b/lib/Hyena/src/Hyena/Hyena.Query/QueryOrder.cs
@@ -0,0 +1,72 @@
+//
+// QueryOrder.cs
+//
+// Authors:
+// Gabriel Burt <gburt at novell.com>
+// Aaron Bockover <abockover at novell.com>
+//
+// Copyright (C) 2007-2008 Novell, Inc.
+//
+// Permission is hereby granted, free of charge, to any person obtaining
+// a copy of this software and associated documentation files (the
+// "Software"), to deal in the Software without restriction, including
+// without limitation the rights to use, copy, modify, merge, publish,
+// distribute, sublicense, and/or sell copies of the Software, and to
+// permit persons to whom the Software is furnished to do so, subject to
+// the following conditions:
+//
+// The above copyright notice and this permission notice shall be
+// included in all copies or substantial portions of the Software.
+//
+// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
+// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
+// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
+// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+//
+
+using System;
+using System.Text;
+using System.Collections.Generic;
+
+namespace Hyena.Query
+{
+ public class QueryOrder
+ {
+ private string name;
+ public string Name {
+ get { return name; }
+ }
+
+ private string label;
+ public string Label {
+ get { return label; }
+ set { label = value; }
+ }
+
+ private string order_sql;
+ public string OrderSql {
+ get { return order_sql; }
+ }
+
+ private QueryField field;
+ public QueryField Field {
+ get { return field; }
+ }
+
+ public QueryOrder (string name, string label, string order_sql, QueryField field)
+ {
+ this.name = name;
+ this.label = label;
+ this.order_sql = order_sql;
+ this.field = field;
+ }
+
+ public string ToSql ()
+ {
+ return String.Format ("ORDER BY {0}", order_sql);
+ }
+ }
+}
diff --git a/lib/Hyena/src/Hyena/Hyena.Query/QueryParser.cs b/lib/Hyena/src/Hyena/Hyena.Query/QueryParser.cs
new file mode 100644
index 0000000..97dd46e
--- /dev/null
+++ b/lib/Hyena/src/Hyena/Hyena.Query/QueryParser.cs
@@ -0,0 +1,66 @@
+//
+// QueryParser.cs
+//
+// Author:
+// Aaron Bockover <abockover at novell.com>
+// Gabriel Burt <gburt at novell.com>
+//
+// Copyright (C) 2007 Novell, Inc.
+//
+// Permission is hereby granted, free of charge, to any person obtaining
+// a copy of this software and associated documentation files (the
+// "Software"), to deal in the Software without restriction, including
+// without limitation the rights to use, copy, modify, merge, publish,
+// distribute, sublicense, and/or sell copies of the Software, and to
+// permit persons to whom the Software is furnished to do so, subject to
+// the following conditions:
+//
+// The above copyright notice and this permission notice shall be
+// included in all copies or substantial portions of the Software.
+//
+// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
+// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
+// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
+// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+//
+
+using System;
+using System.IO;
+using System.Text;
+
+namespace Hyena.Query
+{
+ public abstract class QueryParser
+ {
+ protected StreamReader reader;
+
+ public QueryParser()
+ {
+ Reset ();
+ }
+
+ public QueryParser(string inputQuery) : this(new MemoryStream(Encoding.UTF8.GetBytes(inputQuery)))
+ {
+ }
+
+ public QueryParser(Stream stream) : this(new StreamReader(stream))
+ {
+ }
+
+ public QueryParser(StreamReader reader) : this()
+ {
+ InputReader = reader;
+ }
+
+ public abstract QueryNode BuildTree (QueryFieldSet fieldSet);
+ public abstract void Reset ();
+
+ public StreamReader InputReader {
+ get { return reader; }
+ set { reader = value; }
+ }
+ }
+}
diff --git a/lib/Hyena/src/Hyena/Hyena.Query/QueryTermNode.cs b/lib/Hyena/src/Hyena/Hyena.Query/QueryTermNode.cs
new file mode 100644
index 0000000..27c50ab
--- /dev/null
+++ b/lib/Hyena/src/Hyena/Hyena.Query/QueryTermNode.cs
@@ -0,0 +1,164 @@
+//
+// QueryTermNode.cs
+//
+// Author:
+// Aaron Bockover <abockover at novell.com>
+// Gabriel Burt <gburt at novell.com>
+//
+// Copyright (C) 2007-2008 Novell, Inc.
+//
+// Permission is hereby granted, free of charge, to any person obtaining
+// a copy of this software and associated documentation files (the
+// "Software"), to deal in the Software without restriction, including
+// without limitation the rights to use, copy, modify, merge, publish,
+// distribute, sublicense, and/or sell copies of the Software, and to
+// permit persons to whom the Software is furnished to do so, subject to
+// the following conditions:
+//
+// The above copyright notice and this permission notice shall be
+// included in all copies or substantial portions of the Software.
+//
+// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
+// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
+// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
+// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+//
+
+using System;
+using System.Xml;
+using System.Text;
+using System.Collections.Generic;
+
+namespace Hyena.Query
+{
+ public class QueryTermNode : QueryNode
+ {
+ private QueryField field;
+ private Operator op;
+ private QueryValue qvalue;
+
+ public static QueryTermNode ParseUserQuery (QueryFieldSet field_set, string token)
+ {
+ QueryTermNode term = new QueryTermNode ();
+
+ // See if the query specifies a field, and if so, pull out the operator as well
+ string field_alias = field_set.FindAlias (token);
+ if (field_alias != null) {
+ term.Field = field_set [field_alias];
+ string token_without_field = token.Substring (field_alias.Length);
+
+ foreach (QueryValue val in term.Field.CreateQueryValues ()) {
+ term.Value = val;
+
+ string op_alias = term.Value.OperatorSet.FindAlias (token_without_field);
+ if (op_alias != null) {
+ term.Operator = term.Value.OperatorSet [op_alias];
+ int field_separator = token.IndexOf (op_alias);
+ string temp = token.Substring (field_separator + op_alias.Length);
+
+ term.Value.ParseUserQuery (temp);
+
+ if (!term.Value.IsEmpty) {
+ break;
+ }
+ }
+
+ term.Operator = null;
+ term.Value = null;
+ }
+ }
+
+ if (term.Value == null) {
+ term.Field = null;
+ term.Value = QueryValue.CreateFromUserQuery (token, term.Field);
+ term.Operator = StringQueryValue.Contains;
+ }
+
+ return term;
+ }
+
+ public QueryTermNode () : base ()
+ {
+ }
+
+ public override QueryNode Trim ()
+ {
+ if (Parent != null && (qvalue == null || qvalue.IsEmpty || (field != null && op == null))) {
+ Parent.RemoveChild (this);
+ }
+ return this;
+ }
+
+ public override void AppendUserQuery (StringBuilder sb)
+ {
+ sb.Append (Field == null ? Value.ToUserQuery () : Field.ToTermString (Operator.PrimaryAlias, Value.ToUserQuery ()));
+ }
+
+ public override void AppendXml (XmlDocument doc, XmlNode parent, QueryFieldSet fieldSet)
+ {
+ XmlElement op_node = doc.CreateElement (op == null ? "contains" : op.Name);
+ parent.AppendChild (op_node);
+
+ QueryField field = Field;
+ if (field != null) {
+ XmlElement field_node = doc.CreateElement ("field");
+ field_node.SetAttribute ("name", field.Name);
+ op_node.AppendChild (field_node);
+ }
+
+ XmlElement val_node = doc.CreateElement (Value.XmlElementName);
+ Value.AppendXml (val_node);
+ op_node.AppendChild (val_node);
+ }
+
+ public override void AppendSql (StringBuilder sb, QueryFieldSet fieldSet)
+ {
+ if (Field == null) {
+ sb.Append ("(");
+ int emitted = 0;
+
+ foreach (QueryField field in fieldSet.Fields) {
+ if (field.IsDefault)
+ if (EmitTermMatch (sb, field, emitted > 0))
+ emitted++;
+ }
+
+ sb.Append (")");
+ } else {
+ EmitTermMatch (sb, Field, false);
+ }
+ }
+
+ private bool EmitTermMatch (StringBuilder sb, QueryField field, bool emit_or)
+ {
+ if (Value.IsEmpty) {
+ return false;
+ }
+
+ if (emit_or) {
+ sb.Append (" OR ");
+ }
+
+ sb.Append (field.ToSql (Operator, Value));
+ return true;
+ }
+
+ public QueryField Field {
+ get { return field; }
+ set { field = value; }
+ }
+
+ public Operator Operator {
+ get { return op; }
+ set { op = value; }
+ }
+
+ public QueryValue Value {
+ get { return qvalue; }
+ set { qvalue = value; }
+ }
+ }
+}
diff --git a/lib/Hyena/src/Hyena/Hyena.Query/QueryToken.cs b/lib/Hyena/src/Hyena/Hyena.Query/QueryToken.cs
new file mode 100644
index 0000000..aa7a363
--- /dev/null
+++ b/lib/Hyena/src/Hyena/Hyena.Query/QueryToken.cs
@@ -0,0 +1,93 @@
+//
+// QueryToken.cs
+//
+// Author:
+// Aaron Bockover <abockover at novell.com>
+//
+// Copyright (C) 2007 Novell, Inc.
+//
+// Permission is hereby granted, free of charge, to any person obtaining
+// a copy of this software and associated documentation files (the
+// "Software"), to deal in the Software without restriction, including
+// without limitation the rights to use, copy, modify, merge, publish,
+// distribute, sublicense, and/or sell copies of the Software, and to
+// permit persons to whom the Software is furnished to do so, subject to
+// the following conditions:
+//
+// The above copyright notice and this permission notice shall be
+// included in all copies or substantial portions of the Software.
+//
+// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
+// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
+// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
+// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+//
+
+using System;
+
+namespace Hyena.Query
+{
+ public enum TokenID {
+ Unknown,
+ OpenParen,
+ CloseParen,
+ Not,
+ Or,
+ And,
+ Range,
+ Term
+ }
+
+ public class QueryToken
+ {
+ private TokenID id;
+ private int line;
+ private int column;
+ private string term;
+
+ public QueryToken()
+ {
+ }
+
+ public QueryToken(string term)
+ {
+ this.id = TokenID.Term;
+ this.term = term;
+ }
+
+ public QueryToken(TokenID id)
+ {
+ this.id = id;
+ }
+
+ public QueryToken(TokenID id, int line, int column)
+ {
+ this.id = id;
+ this.line = line;
+ this.column = column;
+ }
+
+ public TokenID ID {
+ get { return id; }
+ set { id = value; }
+ }
+
+ public int Line {
+ get { return line; }
+ set { line = value; }
+ }
+
+ public int Column {
+ get { return column; }
+ set { column = value; }
+ }
+
+ public string Term {
+ get { return term; }
+ set { term = value; }
+ }
+ }
+}
diff --git a/lib/Hyena/src/Hyena/Hyena.Query/QueryValue.cs b/lib/Hyena/src/Hyena/Hyena.Query/QueryValue.cs
new file mode 100644
index 0000000..875517a
--- /dev/null
+++ b/lib/Hyena/src/Hyena/Hyena.Query/QueryValue.cs
@@ -0,0 +1,151 @@
+//
+// QueryValue.cs
+//
+// Authors:
+// Gabriel Burt <gburt at novell.com>
+//
+// Copyright (C) 2007-2008 Novell, Inc.
+//
+// Permission is hereby granted, free of charge, to any person obtaining
+// a copy of this software and associated documentation files (the
+// "Software"), to deal in the Software without restriction, including
+// without limitation the rights to use, copy, modify, merge, publish,
+// distribute, sublicense, and/or sell copies of the Software, and to
+// permit persons to whom the Software is furnished to do so, subject to
+// the following conditions:
+//
+// The above copyright notice and this permission notice shall be
+// included in all copies or substantial portions of the Software.
+//
+// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
+// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
+// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
+// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+//
+
+using System;
+using System.Collections.Generic;
+using System.Xml;
+using System.Text;
+
+using Hyena;
+
+namespace Hyena.Query
+{
+ public abstract class QueryValue
+ {
+ private static List<Type> subtypes = new List<Type> ();
+ public static void AddValueType (Type type)
+ {
+ if (!subtypes.Contains (type)) {
+ subtypes.Add (type);
+ }
+ }
+
+ public static QueryValue CreateFromUserQuery (string input, QueryField field)
+ {
+ if (field == null) {
+ QueryValue val = new StringQueryValue ();
+ val.ParseUserQuery (input);
+ return val;
+ } else {
+ foreach (QueryValue val in field.CreateQueryValues ()) {
+ val.ParseUserQuery (input);
+ if (!val.IsEmpty) {
+ return val;
+ }
+ }
+ }
+
+ return null;
+ }
+
+ public static QueryValue CreateFromStringValue (string input, QueryField field)
+ {
+ if (field == null) {
+ QueryValue val = new StringQueryValue ();
+ val.LoadString (input);
+ return val;
+ } else {
+ foreach (QueryValue val in field.CreateQueryValues ()) {
+ val.LoadString (input);
+ if (!val.IsEmpty) {
+ return val;
+ }
+ }
+ }
+
+ return null;
+ }
+
+ public static QueryValue CreateFromXml (XmlElement parent, QueryField field)
+ {
+ if (field != null) {
+ foreach (QueryValue val in field.CreateQueryValues ()) {
+ if (CreateFromXml (val, parent)) {
+ return val;
+ }
+ }
+ return null;
+ } else {
+ foreach (Type subtype in subtypes) {
+ QueryValue val = Activator.CreateInstance (subtype) as QueryValue;
+ if (CreateFromXml (val, parent)) {
+ return val;
+ }
+ }
+ }
+ return null;
+ }
+
+ private static bool CreateFromXml (QueryValue val, XmlElement parent)
+ {
+ XmlElement val_node = parent[val.XmlElementName];
+ if (val_node != null) {
+ val.ParseXml (val_node);
+ return !val.IsEmpty;
+ }
+ return false;
+ }
+
+ private bool is_empty = true;
+ public bool IsEmpty {
+ get { return is_empty; }
+ protected set { is_empty = value; }
+ }
+
+ public abstract object Value { get; }
+ public abstract string XmlElementName { get; }
+ public abstract AliasedObjectSet<Operator> OperatorSet { get; }
+
+ public abstract void LoadString (string input);
+ public abstract void ParseXml (XmlElement node);
+
+ public virtual void AppendXml (XmlElement node)
+ {
+ node.InnerText = Value.ToString ();
+ }
+
+ public abstract void ParseUserQuery (string input);
+
+ public virtual string ToUserQuery ()
+ {
+ return Value.ToString ();
+ }
+
+ public override string ToString ()
+ {
+ return Value.ToString ();
+ }
+
+ public string ToSql ()
+ {
+ return ToSql (null);
+ }
+
+ public abstract string ToSql (Operator op);
+ }
+}
diff --git a/lib/Hyena/src/Hyena/Hyena.Query/RelativeTimeSpanQueryValue.cs b/lib/Hyena/src/Hyena/Hyena.Query/RelativeTimeSpanQueryValue.cs
new file mode 100644
index 0000000..bd9d271
--- /dev/null
+++ b/lib/Hyena/src/Hyena/Hyena.Query/RelativeTimeSpanQueryValue.cs
@@ -0,0 +1,93 @@
+//
+// RelativeTimeSpanQueryValue.cs
+//
+// Authors:
+// Gabriel Burt <gburt at novell.com>
+//
+// Copyright (C) 2007-2008 Novell, Inc.
+//
+// Permission is hereby granted, free of charge, to any person obtaining
+// a copy of this software and associated documentation files (the
+// "Software"), to deal in the Software without restriction, including
+// without limitation the rights to use, copy, modify, merge, publish,
+// distribute, sublicense, and/or sell copies of the Software, and to
+// permit persons to whom the Software is furnished to do so, subject to
+// the following conditions:
+//
+// The above copyright notice and this permission notice shall be
+// included in all copies or substantial portions of the Software.
+//
+// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
+// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
+// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
+// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+//
+
+using System;
+using System.Collections.Generic;
+using System.Xml;
+using System.Text;
+using System.Text.RegularExpressions;
+
+using Mono.Unix;
+
+using Hyena;
+
+namespace Hyena.Query
+{
+ public class RelativeTimeSpanQueryValue : TimeSpanQueryValue
+ {
+ // The SQL operators in these Operators are reversed from normal on purpose
+ public static new readonly Operator GreaterThan = new Operator ("greaterThan", Catalog.GetString ("more than"), "< {0}", true, ">");
+ public static new readonly Operator LessThan = new Operator ("lessThan", Catalog.GetString ("less than"), "> {0}", "<");
+ public static new readonly Operator GreaterThanEqual = new Operator ("greaterThanEquals", Catalog.GetString ("at least"), "<= {0}", true, ">=");
+ public static new readonly Operator LessThanEqual = new Operator ("lessThanEquals", Catalog.GetString ("at most"), ">= {0}", "<=");
+
+ protected static new AliasedObjectSet<Operator> operators = new AliasedObjectSet<Operator> (GreaterThan, LessThan, GreaterThanEqual, LessThanEqual);
+ public override AliasedObjectSet<Operator> OperatorSet {
+ get { return operators; }
+ }
+
+ public static RelativeTimeSpanQueryValue RelativeToNow (DateTime since)
+ {
+ RelativeTimeSpanQueryValue qv = new RelativeTimeSpanQueryValue ();
+ qv.SetRelativeValue ((since - DateTime.Now).TotalSeconds, TimeFactor.Second);
+ qv.DetermineFactor ();
+ return qv;
+ }
+
+ public override string XmlElementName {
+ get { return "date"; }
+ }
+
+ public override double Offset {
+ get { return -offset; }
+ }
+
+ public override void SetUserRelativeValue (double offset, TimeFactor factor)
+ {
+ SetRelativeValue (-offset, factor);
+ }
+
+ public override void AppendXml (XmlElement node)
+ {
+ base.AppendXml (node);
+ node.SetAttribute ("type", "rel");
+ }
+
+ public override string ToSql (Operator op)
+ {
+ return DateTimeUtil.FromDateTime (DateTime.Now + TimeSpan.FromSeconds ((double) offset)).ToString (System.Globalization.CultureInfo.InvariantCulture);
+ }
+
+ protected override string FactorString (TimeFactor factor, double count, bool translate)
+ {
+ string result = base.FactorString (factor, count, translate);
+ return (result == null) ? null : String.Format (
+ translate ? Catalog.GetString ("{0} ago") : "{0} ago", result);
+ }
+ }
+}
diff --git a/lib/Hyena/src/Hyena/Hyena.Query/StringQueryValue.cs b/lib/Hyena/src/Hyena/Hyena.Query/StringQueryValue.cs
new file mode 100644
index 0000000..2572e91
--- /dev/null
+++ b/lib/Hyena/src/Hyena/Hyena.Query/StringQueryValue.cs
@@ -0,0 +1,99 @@
+//
+// StringQueryValue.cs
+//
+// Authors:
+// Gabriel Burt <gburt at novell.com>
+//
+// Copyright (C) 2007-2008 Novell, Inc.
+//
+// Permission is hereby granted, free of charge, to any person obtaining
+// a copy of this software and associated documentation files (the
+// "Software"), to deal in the Software without restriction, including
+// without limitation the rights to use, copy, modify, merge, publish,
+// distribute, sublicense, and/or sell copies of the Software, and to
+// permit persons to whom the Software is furnished to do so, subject to
+// the following conditions:
+//
+// The above copyright notice and this permission notice shall be
+// included in all copies or substantial portions of the Software.
+//
+// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
+// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
+// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
+// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+//
+
+using System;
+using System.Xml;
+using System.Text;
+
+using Mono.Unix;
+
+using Hyena;
+
+namespace Hyena.Query
+{
+ public class StringQueryValue : QueryValue
+ {
+ private const string ESCAPE_CLAUSE = " ESCAPE '\\'";
+
+ public static readonly Operator Contains = new Operator ("contains", Catalog.GetString ("contains"), "LIKE '%{0}%'" + ESCAPE_CLAUSE, ":");
+ public static readonly Operator DoesNotContain = new Operator ("doesNotContain", Catalog.GetString ("doesn't contain"), "NOT LIKE '%{0}%'" + ESCAPE_CLAUSE, true, "!:");
+ public static readonly Operator Equal = new Operator ("equals", Catalog.GetString ("is"), "= '{0}'", "==");
+ public static readonly Operator NotEqual = new Operator ("notEqual", Catalog.GetString ("is not"), "!= '{0}'", true, "!=");
+ public static readonly Operator StartsWith = new Operator ("startsWith", Catalog.GetString ("starts with"), "LIKE '{0}%'" + ESCAPE_CLAUSE, "=");
+ public static readonly Operator EndsWith = new Operator ("endsWith", Catalog.GetString ("ends with"), "LIKE '%{0}'" + ESCAPE_CLAUSE, ":=");
+
+ protected string value;
+
+ public override string XmlElementName {
+ get { return "string"; }
+ }
+
+ public override object Value {
+ get { return value; }
+ }
+
+ protected static AliasedObjectSet<Operator> operators = new AliasedObjectSet<Operator> (Contains, DoesNotContain, Equal, NotEqual, StartsWith, EndsWith);
+ public override AliasedObjectSet<Operator> OperatorSet {
+ get { return operators; }
+ }
+
+ public override void ParseUserQuery (string input)
+ {
+ value = input;
+ IsEmpty = String.IsNullOrEmpty (value);
+ }
+
+ public override void ParseXml (XmlElement node)
+ {
+ value = node.InnerText;
+ IsEmpty = String.IsNullOrEmpty (value);
+ }
+
+ public override void LoadString (string str)
+ {
+ ParseUserQuery (str);
+ }
+
+ public override string ToSql (Operator op)
+ {
+ return String.IsNullOrEmpty (value) ? null : EscapeString (op, Hyena.StringUtil.SearchKey (value));
+ }
+
+ protected static string EscapeString (Operator op, string orig)
+ {
+ orig = orig.Replace ("'", "''");
+
+ if (op == Contains || op == DoesNotContain ||
+ op == StartsWith || op == EndsWith) {
+ return StringUtil.EscapeLike (orig);
+ }
+
+ return orig;
+ }
+ }
+}
diff --git a/lib/Hyena/src/Hyena/Hyena.Query/Tests/QueryTests.cs b/lib/Hyena/src/Hyena/Hyena.Query/Tests/QueryTests.cs
new file mode 100644
index 0000000..4fde91b
--- /dev/null
+++ b/lib/Hyena/src/Hyena/Hyena.Query/Tests/QueryTests.cs
@@ -0,0 +1,260 @@
+//
+// QueryTests.cs
+//
+// Author:
+// Gabriel Burt <gburt at novell.com>
+//
+// Copyright (C) 2008 Novell, Inc.
+//
+// Permission is hereby granted, free of charge, to any person obtaining
+// a copy of this software and associated documentation files (the
+// "Software"), to deal in the Software without restriction, including
+// without limitation the rights to use, copy, modify, merge, publish,
+// distribute, sublicense, and/or sell copies of the Software, and to
+// permit persons to whom the Software is furnished to do so, subject to
+// the following conditions:
+//
+// The above copyright notice and this permission notice shall be
+// included in all copies or substantial portions of the Software.
+//
+// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
+// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
+// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
+// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+//
+
+#if ENABLE_TESTS
+
+using System;
+using System.Reflection;
+using NUnit.Framework;
+
+using Hyena.Query;
+
+namespace Hyena.Query.Tests
+{
+ [TestFixture]
+ public class QueryTests : Hyena.Tests.TestBase
+ {
+ private static QueryField ArtistField = new QueryField (
+ "artist", "ArtistName", "Artist", "CoreArtists.NameLowered", true,
+ "by", "artist", "artists"
+ );
+
+ private static QueryField AlbumField = new QueryField (
+ "album", "AlbumTitle", "Album", "CoreAlbums.TitleLowered", true,
+ "on", "album", "from", "albumtitle"
+ );
+
+ private static QueryField PlayCountField = new QueryField (
+ "playcount", "PlayCount", "Play Count", "CoreTracks.PlayCount", typeof(IntegerQueryValue),
+ "plays", "playcount", "numberofplays", "listens"
+ );
+
+ private static QueryField DurationField = new QueryField (
+ "duration", "Duration", "Duration", "CoreTracks.Duration", typeof(TimeSpanQueryValue),
+ "duration", "length", "time"
+ );
+
+ private static QueryField MimeTypeField = new QueryField (
+ "mimetype", "MimeType", "Mime Type", "CoreTracks.MimeType {0} OR CoreTracks.Uri {0}", typeof(ExactStringQueryValue),
+ "type", "mimetype", "format", "ext", "mime"
+ );
+
+ private static QueryField UriField = new QueryField (
+ "uri", "Uri", "File Location", "CoreTracks.Uri", typeof(ExactUriStringQueryValue),
+ "uri", "path", "file", "location"
+ );
+
+ private static QueryFieldSet FieldSet = new QueryFieldSet (
+ ArtistField, AlbumField, PlayCountField, MimeTypeField, DurationField
+ );
+
+ [Test]
+ public void QueryValueSql ()
+ {
+ QueryValue qv;
+
+ qv = new DateQueryValue (); qv.ParseUserQuery ("2007-03-9");
+ Assert.AreEqual (new DateTime (2007, 3, 9), qv.Value);
+ Assert.AreEqual ("2007-03-09", qv.ToUserQuery ());
+ Assert.AreEqual ("1173420000", qv.ToSql ());
+
+ qv = new StringQueryValue (); qv.ParseUserQuery ("foo 'bar'");
+ Assert.AreEqual ("foo 'bar'", qv.Value);
+ Assert.AreEqual ("foo 'bar'", qv.ToUserQuery ());
+ Assert.AreEqual ("foo bar", qv.ToSql ());
+
+ qv = new StringQueryValue (); qv.ParseUserQuery ("Foo Baño");
+ Assert.AreEqual ("Foo Baño", qv.Value);
+ Assert.AreEqual ("Foo Baño", qv.ToUserQuery ());
+ Assert.AreEqual ("foo bano", qv.ToSql ());
+
+ qv = new ExactStringQueryValue (); qv.ParseUserQuery ("foo 'bar'");
+ Assert.AreEqual ("foo 'bar'", qv.Value);
+ Assert.AreEqual ("foo 'bar'", qv.ToUserQuery ());
+ Assert.AreEqual ("foo ''bar''", qv.ToSql ());
+
+ qv = new IntegerQueryValue (); qv.ParseUserQuery ("22");
+ Assert.AreEqual (22, qv.Value);
+ Assert.AreEqual ("22", qv.ToUserQuery ());
+ Assert.AreEqual ("22", qv.ToSql ());
+
+ qv = new FileSizeQueryValue (); qv.ParseUserQuery ("2048 KB");
+ Assert.AreEqual (2097152, qv.Value);
+ Assert.AreEqual ("2.048 KB", qv.ToUserQuery ());
+ Assert.AreEqual ("2097152", qv.ToSql ());
+
+ // TODO this will break once an it_IT translation for "days ago" etc is committed
+ qv = new RelativeTimeSpanQueryValue (); qv.ParseUserQuery ("2 days ago");
+ Assert.AreEqual (-172800, qv.Value);
+ Assert.AreEqual ("2 days ago", qv.ToUserQuery ());
+
+ // TODO this will break once an it_IT translation for "minutes" etc is committed
+ qv = new TimeSpanQueryValue (); qv.ParseUserQuery ("4 minutes");
+ Assert.AreEqual (240, qv.Value);
+ Assert.AreEqual ("4 minutes", qv.ToUserQuery ());
+ Assert.AreEqual ("240000", qv.ToSql ());
+ }
+
+ [Test]
+ public void QueryParsing ()
+ {
+ string [] tests = new string [] {
+ "foo",
+ "foo bar",
+ "foo -bar",
+ "-foo -bar",
+ "-(foo bar)",
+ "-(foo or bar)",
+ "-(foo (-bar or baz))",
+ "-(foo (-bar or -baz))",
+ "by:foo",
+ "-by:foo",
+ "-by!=foo",
+ "duration>\"2 minutes\"",
+ "plays>3",
+ "-plays>3",
+ "by:baz -on:bar",
+ "by:baz -on:bar",
+ "by:baz (plays>3 or plays<2)",
+ "by:on", // bgo#601065
+ "on:by",
+ };
+
+ AssertForEach<string> (tests, UserQueryParsesAndGenerates);
+ }
+
+ [Test]
+ public void CustomFormatParenthesisBugFixed ()
+ {
+ QueryValue val = new StringQueryValue ();
+ val.ParseUserQuery ("mp3");
+
+ Assert.AreEqual (
+ "(CoreTracks.MimeType LIKE '%mp3%' ESCAPE '\\' OR CoreTracks.Uri LIKE '%mp3%' ESCAPE '\\')",
+ MimeTypeField.ToSql (StringQueryValue.Contains, val)
+ );
+ }
+
+ [Test]
+ public void EscapeSingleQuotes ()
+ {
+ QueryValue val = new StringQueryValue ();
+ val.ParseUserQuery ("Kelli O'Hara");
+
+ Assert.AreEqual (
+ "(CoreArtists.NameLowered LIKE '%kelli ohara%' ESCAPE '\\' AND CoreArtists.NameLowered IS NOT NULL)",
+ ArtistField.ToSql (StringQueryValue.Contains, val)
+ );
+ }
+
+ [Test] // http://bugzilla.gnome.org/show_bug.cgi?id=570312
+ public void EscapeSqliteWildcards1 ()
+ {
+ QueryValue val = new StringQueryValue ();
+ val.ParseUserQuery ("100% Techno");
+
+ Assert.AreEqual (
+ "(CoreAlbums.TitleLowered LIKE '%100 techno%' ESCAPE '\\' AND CoreAlbums.TitleLowered IS NOT NULL)",
+ AlbumField.ToSql (StringQueryValue.Contains, val)
+ );
+ }
+
+ [Test] // http://bugzilla.gnome.org/show_bug.cgi?id=570312
+ public void EscapeSqliteWildcards2 ()
+ {
+ QueryValue val = new StringQueryValue ();
+ val.ParseUserQuery ("-_-");
+
+ Assert.AreEqual (
+ "(CoreAlbums.TitleLowered LIKE '%-\\_-%' ESCAPE '\\' AND CoreAlbums.TitleLowered IS NOT NULL)",
+ AlbumField.ToSql (StringQueryValue.Contains, val)
+ );
+ }
+
+ [Test] // http://bugzilla.gnome.org/show_bug.cgi?id=570312
+ public void EscapeSqliteWildcards3 ()
+ {
+ QueryValue val = new StringQueryValue ();
+ val.ParseUserQuery ("Metallic/\\");
+
+ Assert.AreEqual (
+ "(CoreAlbums.TitleLowered LIKE '%metallic%' ESCAPE '\\' AND CoreAlbums.TitleLowered IS NOT NULL)",
+ AlbumField.ToSql (StringQueryValue.Contains, val)
+ );
+ }
+
+ [Test] // http://bugzilla.gnome.org/show_bug.cgi?id=570312
+ public void EscapeSqliteWildcards4Real ()
+ {
+ QueryValue val = new ExactStringQueryValue ();
+ val.ParseUserQuery ("/\\_%`'");
+
+ Assert.AreEqual (
+ "(CoreTracks.MimeType LIKE '%/\\\\\\_\\%`''%' ESCAPE '\\' OR CoreTracks.Uri LIKE '%/\\\\\\_\\%`''%' ESCAPE '\\')",
+ MimeTypeField.ToSql (StringQueryValue.Contains, val)
+ );
+ }
+
+ [Test] // http://bugzilla.gnome.org/show_bug.cgi?id=612152
+ public void EscapeUri ()
+ {
+ QueryValue val = new ExactUriStringQueryValue ();
+ val.ParseUserQuery ("space 3quotes`'\"underscore_percentage%slash/backslash\\");
+
+ Assert.AreEqual (
+ @"(CoreTracks.Uri LIKE '%space\%203quotes\%60''\%22underscore\_percentage\%25slash/backslash\%5C%' ESCAPE '\' AND CoreTracks.Uri IS NOT NULL)",
+ UriField.ToSql (StringQueryValue.Contains, val)
+ );
+ }
+
+ [Test]
+ // Test behavior issues described in
+ // http://bugzilla.gnome.org/show_bug.cgi?id=547078
+ public void ParenthesesInQuotes ()
+ {
+ string query = "artist==\"foo (disc 2)\"";
+
+ QueryNode query_tree = UserQueryParser.Parse (query, FieldSet);
+ Assert.IsNotNull (query_tree, "Query should parse");
+ Assert.AreEqual ("by==\"foo (disc 2)\"", query_tree.ToUserQuery ());
+ }
+
+ private static void UserQueryParsesAndGenerates (string query)
+ {
+ QueryNode node = UserQueryParser.Parse (query, FieldSet);
+ if (query == null || query.Trim () == String.Empty) {
+ Assert.AreEqual (node, null);
+ return;
+ }
+
+ Assert.AreEqual (query, node.ToUserQuery ());
+ }
+ }
+}
+
+#endif
diff --git a/lib/Hyena/src/Hyena/Hyena.Query/TimeSpanQueryValue.cs b/lib/Hyena/src/Hyena/Hyena.Query/TimeSpanQueryValue.cs
new file mode 100644
index 0000000..108b1e9
--- /dev/null
+++ b/lib/Hyena/src/Hyena/Hyena.Query/TimeSpanQueryValue.cs
@@ -0,0 +1,204 @@
+//
+// TimeSpanQueryValue.cs
+//
+// Authors:
+// Gabriel Burt <gburt at novell.com>
+//
+// Copyright (C) 2007-2008 Novell, Inc.
+//
+// Permission is hereby granted, free of charge, to any person obtaining
+// a copy of this software and associated documentation files (the
+// "Software"), to deal in the Software without restriction, including
+// without limitation the rights to use, copy, modify, merge, publish,
+// distribute, sublicense, and/or sell copies of the Software, and to
+// permit persons to whom the Software is furnished to do so, subject to
+// the following conditions:
+//
+// The above copyright notice and this permission notice shall be
+// included in all copies or substantial portions of the Software.
+//
+// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
+// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
+// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
+// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+//
+
+using System;
+using System.Collections.Generic;
+using System.Globalization;
+using System.Xml;
+using System.Text;
+using System.Text.RegularExpressions;
+
+using Mono.Unix;
+
+using Hyena;
+
+namespace Hyena.Query
+{
+ public enum TimeFactor {
+ Second = 1,
+ Minute = 60,
+ Hour = 3600,
+ Day = 3600*24,
+ Week = 3600*24*7,
+ Month = 3600*24*30,
+ Year = 3600*24*365
+ }
+
+ public class TimeSpanQueryValue : IntegerQueryValue
+ {
+ /*public static readonly Operator Equal = new Operator ("equals", "= {0}", "==", "=", ":");
+ public static readonly Operator NotEqual = new Operator ("notEqual", "!= {0}", true, "!=", "!:");
+ public static readonly Operator LessThanEqual = new Operator ("lessThanEquals", "<= {0}", "<=");
+ public static readonly Operator GreaterThanEqual = new Operator ("greaterThanEquals", ">= {0}", ">=");
+ public static readonly Operator LessThan = new Operator ("lessThan", "< {0}", "<");
+ public static readonly Operator GreaterThan = new Operator ("greaterThan", "> {0}", ">");*/
+
+ protected double offset = 0;
+ protected TimeFactor factor = TimeFactor.Second;
+
+ public override string XmlElementName {
+ get { return "timespan"; }
+ }
+
+ //protected static AliasedObjectSet<Operator> operators = new AliasedObjectSet<Operator> (Equal, NotEqual, LessThan, GreaterThan, LessThanEqual, GreaterThanEqual);
+ protected static AliasedObjectSet<Operator> ops = new AliasedObjectSet<Operator> (LessThan, GreaterThan, LessThanEqual, GreaterThanEqual);
+ public override AliasedObjectSet<Operator> OperatorSet {
+ get { return operators; }
+ }
+
+ public override object Value {
+ get { return offset; }
+ }
+
+ public virtual double Offset {
+ get { return offset; }
+ }
+
+ public TimeFactor Factor {
+ get { return factor; }
+ }
+
+ public double FactoredValue {
+ get { return Offset / (double) factor; }
+ }
+
+ // FIXME replace period in following with culture-dependent character
+ private static Regex number_regex = new Regex ("\\d+(\\.\\d+)?", RegexOptions.Compiled);
+ public override void ParseUserQuery (string input)
+ {
+ Match match = number_regex.Match (input);
+ if (match != Match.Empty && match.Groups.Count > 0) {
+ double val;
+ try {
+ val = Convert.ToDouble (match.Groups[0].Captures[0].Value);
+ } catch (FormatException) {
+ val = Convert.ToDouble (match.Groups[0].Captures[0].Value, NumberFormatInfo.InvariantInfo);
+ }
+ foreach (TimeFactor factor in Enum.GetValues (typeof(TimeFactor))) {
+ if (input == FactorString (factor, val, true) || input == FactorString (factor, val, false)) {
+ SetUserRelativeValue (val, factor);
+ return;
+ }
+ }
+ }
+ IsEmpty = true;
+ }
+
+ public override string ToUserQuery ()
+ {
+ return FactorString (factor, FactoredValue, true);
+ }
+
+ public virtual void SetUserRelativeValue (double offset, TimeFactor factor)
+ {
+ SetRelativeValue (offset, factor);
+ }
+
+ public void SetRelativeValue (double offset, TimeFactor factor)
+ {
+ this.factor = factor;
+ this.offset = (long) (offset * (double)factor);
+ IsEmpty = false;
+ }
+
+ public override void LoadString (string val)
+ {
+ try {
+ SetRelativeValue (Convert.ToDouble (val), TimeFactor.Second);
+ DetermineFactor ();
+ } catch {
+ IsEmpty = true;
+ }
+ }
+
+ protected void DetermineFactor ()
+ {
+ double val = Math.Abs (offset);
+ foreach (TimeFactor factor in Enum.GetValues (typeof(TimeFactor))) {
+ if (val >= (double) factor) {
+ this.factor = factor;
+ }
+ }
+ }
+
+ public override void ParseXml (XmlElement node)
+ {
+ try {
+ LoadString (node.InnerText);
+ if (node.HasAttribute ("factor")) {
+ this.factor = (TimeFactor) Enum.Parse (typeof(TimeFactor), node.GetAttribute ("factor"));
+ }
+ } catch {
+ IsEmpty = true;
+ }
+ }
+
+ public override void AppendXml (XmlElement node)
+ {
+ base.AppendXml (node);
+ node.SetAttribute ("factor", factor.ToString ());
+ }
+
+ public override string ToSql (Operator op)
+ {
+ return Convert.ToString (offset * 1000, System.Globalization.CultureInfo.InvariantCulture);
+ }
+
+ protected virtual string FactorString (TimeFactor factor, double count, bool translate)
+ {
+ string result = null;
+ int plural_count = StringUtil.DoubleToPluralInt (count);
+ if (translate) {
+ switch (factor) {
+ case TimeFactor.Second: result = Catalog.GetPluralString ("{0} second", "{0} seconds", plural_count); break;
+ case TimeFactor.Minute: result = Catalog.GetPluralString ("{0} minute", "{0} minutes", plural_count); break;
+ case TimeFactor.Hour: result = Catalog.GetPluralString ("{0} hour", "{0} hours", plural_count); break;
+ case TimeFactor.Day: result = Catalog.GetPluralString ("{0} day", "{0} days", plural_count); break;
+ case TimeFactor.Week: result = Catalog.GetPluralString ("{0} week", "{0} weeks", plural_count); break;
+ case TimeFactor.Month: result = Catalog.GetPluralString ("{0} month", "{0} months", plural_count); break;
+ case TimeFactor.Year: result = Catalog.GetPluralString ("{0} year", "{0} years", plural_count); break;
+ default: return null;
+ }
+ } else {
+ switch (factor) {
+ case TimeFactor.Second: result = plural_count == 1 ? "{0} second" : "{0} seconds"; break;
+ case TimeFactor.Minute: result = plural_count == 1 ? "{0} minute" : "{0} minutes"; break;
+ case TimeFactor.Hour: result = plural_count == 1 ? "{0} hour" : "{0} hours"; break;
+ case TimeFactor.Day: result = plural_count == 1 ? "{0} day" : "{0} days"; break;
+ case TimeFactor.Week: result = plural_count == 1 ? "{0} week" : "{0} weeks"; break;
+ case TimeFactor.Month: result = plural_count == 1 ? "{0} month" : "{0} months"; break;
+ case TimeFactor.Year: result = plural_count == 1 ? "{0} year" : "{0} years"; break;
+ default: return null;
+ }
+ }
+
+ return String.Format (result, StringUtil.DoubleToTenthsPrecision (
+ count, false, translate ? NumberFormatInfo.CurrentInfo : NumberFormatInfo.InvariantInfo));
+ }
+ }
+}
\ No newline at end of file
diff --git a/lib/Hyena/src/Hyena/Hyena.Query/UserQueryParser.cs b/lib/Hyena/src/Hyena/Hyena.Query/UserQueryParser.cs
new file mode 100644
index 0000000..ee7b49e
--- /dev/null
+++ b/lib/Hyena/src/Hyena/Hyena.Query/UserQueryParser.cs
@@ -0,0 +1,274 @@
+//
+// UserQueryParser.cs
+//
+// Author:
+// Aaron Bockover <abockover at novell.com>
+// Gabriel Burt <gburt at novell.com>
+//
+// Copyright (C) 2007-2008 Novell, Inc.
+//
+// Permission is hereby granted, free of charge, to any person obtaining
+// a copy of this software and associated documentation files (the
+// "Software"), to deal in the Software without restriction, including
+// without limitation the rights to use, copy, modify, merge, publish,
+// distribute, sublicense, and/or sell copies of the Software, and to
+// permit persons to whom the Software is furnished to do so, subject to
+// the following conditions:
+//
+// The above copyright notice and this permission notice shall be
+// included in all copies or substantial portions of the Software.
+//
+// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
+// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
+// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
+// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+//
+
+using System;
+using System.IO;
+using System.Text;
+
+namespace Hyena.Query
+{
+ public class UserQueryParser : QueryParser
+ {
+ private QueryListNode current_parent;
+
+ private char peek;
+ private int current_column;
+ private int current_line;
+ private int token_start_column;
+ private int token_start_line;
+ private bool eos_consumed;
+
+ private QueryListNode root;
+ private QueryFieldSet field_set;
+
+ public static QueryNode Parse (string input, QueryFieldSet fieldSet)
+ {
+ return new UserQueryParser (input).BuildTree (fieldSet);
+ }
+
+ public UserQueryParser () : base () {}
+ public UserQueryParser (string inputQuery) : base (inputQuery) {}
+ public UserQueryParser (Stream stream) : base (stream) {}
+ public UserQueryParser (StreamReader reader) : base (reader) {}
+
+ public override QueryNode BuildTree (QueryFieldSet fieldSet)
+ {
+ field_set = fieldSet;
+ root = current_parent = new QueryListNode (Keyword.And);
+ bool last_was_term = false;
+
+ while (true) {
+ QueryToken token = Scan ();
+
+ if (token.ID == TokenID.Unknown) {
+ break;
+ }
+
+ token.Column = token_start_column;
+ token.Line = token_start_line;
+
+ // If we have two terms in a row, put an AND between them
+ if (last_was_term && token.ID == TokenID.Term)
+ ParseToken (new QueryToken (TokenID.And));
+
+ ParseToken (token);
+
+ last_was_term = token.ID == TokenID.Term;
+ }
+
+ return root.Trim ();
+ }
+
+ private void DepthPush ()
+ {
+ current_parent = new QueryListNode (Keyword.And, current_parent);
+ }
+
+ private void DepthPop ()
+ {
+ // Avoid trying to pop more than is possible
+ if (current_parent.Parent != null)
+ current_parent = current_parent.Parent;
+ }
+
+ private void NodePush (QueryNode node)
+ {
+ if (current_parent == null && node is QueryListNode) {
+ root = current_parent = node as QueryListNode;
+ return;
+ }
+
+ if (current_parent.Keyword == Keyword.Not && current_parent.ChildCount == 1)
+ DepthPop ();
+
+ current_parent.AddChild (node);
+
+ // If the node is a list, it's our new parent
+ QueryListNode list = node as QueryListNode;
+ if (list != null) {
+ current_parent = list;
+ }
+ }
+
+ private void ParseToken (QueryToken token)
+ {
+ switch (token.ID) {
+ case TokenID.OpenParen:
+ DepthPush ();
+ break;
+
+ case TokenID.CloseParen:
+ DepthPop ();
+ break;
+
+ case TokenID.Not:
+ NodePush (new QueryListNode (Keyword.Not));
+ break;
+
+ case TokenID.Or:
+ case TokenID.And:
+ // Only push a node if the current_parent is not the same as this token
+ if (current_parent.Keyword == Keyword.Not ||
+ current_parent.Keyword == (token.ID == TokenID.Or ? Keyword.And : Keyword.Or)) {
+
+ QueryListNode list = new QueryListNode (token.ID == TokenID.Or ? Keyword.Or : Keyword.And);
+ QueryListNode p = current_parent.Parent;
+
+ if (p != null) {
+ current_parent.Parent.RemoveChild (current_parent);
+ }
+
+ if (current_parent.Keyword == Keyword.Not || current_parent.ChildCount > 1) {
+ list.AddChild (current_parent);
+ } else {
+ list.TakeChildren (current_parent);
+ }
+
+ current_parent = p;
+ NodePush (list);
+ }
+ break;
+
+ case TokenID.Term:
+ NodePush (QueryTermNode.ParseUserQuery (field_set, token.Term));
+ break;
+ }
+ }
+
+ private QueryToken Scan ()
+ {
+ if (reader.EndOfStream) {
+ if (eos_consumed)
+ return new QueryToken (TokenID.Unknown);
+ else
+ eos_consumed = true;
+ }
+
+ for (; ; ReadChar ()) {
+ if (Char.IsWhiteSpace (peek) && peek != '\n') {
+ continue;
+ } else if (peek == '\n') {
+ current_line++;
+ current_column = 0;
+ } else {
+ break;
+ }
+ }
+
+ token_start_column = current_column;
+ token_start_line = current_line;
+
+ if (peek == '(') {
+ ReadChar ();
+ return new QueryToken (TokenID.OpenParen);
+ } else if (peek == ')') {
+ ReadChar ();
+ return new QueryToken (TokenID.CloseParen);
+ } else if (peek == '-') {
+ ReadChar ();
+ return new QueryToken (TokenID.Not);
+ } else if (peek == '|' || peek == ',') {
+ ReadChar ();
+ return new QueryToken (TokenID.Or);
+ } else {
+ string token = ScanString ();
+
+ if (reader.EndOfStream)
+ eos_consumed = true;
+
+ switch (token) {
+ case "or":
+ case "OR":
+ return new QueryToken (TokenID.Or);
+ case "NOT":
+ return new QueryToken (TokenID.Not);
+ default:
+ return new QueryToken (token);
+ }
+ }
+ }
+
+ // TODO: Allow white space before/after term operators
+
+ private bool IsStringTerminationChar (char ch)
+ {
+ return Char.IsWhiteSpace (ch) || ch == '(' || ch == ')' || ch == '|' || ch == ',';
+ }
+
+ private string ScanString ()
+ {
+ StringBuilder buffer = new StringBuilder ();
+ bool in_string = false;
+
+ while (true) {
+ if (!in_string && IsStringTerminationChar (peek)) {
+ break;
+ } else if (peek == '"') {
+ in_string = !in_string;
+ } else {
+ buffer.Append (peek);
+ if (reader.EndOfStream) {
+ break;
+ }
+ }
+
+ ReadChar ();
+
+ if (reader.EndOfStream) {
+ if (!IsStringTerminationChar (peek) && peek != '"') {
+ buffer.Append (peek);
+ }
+
+ break;
+ }
+ }
+
+ return buffer.ToString ();
+ }
+
+ public override void Reset ()
+ {
+ peek = ' ';
+ current_column = 0;
+ current_line = 0;
+ token_start_column = 0;
+ token_start_line = 0;
+ }
+
+ private void ReadChar ()
+ {
+ if (peek == Char.MinValue) {
+ return;
+ }
+
+ peek = (char)reader.Read ();
+ current_column++;
+ }
+ }
+}
diff --git a/lib/Hyena/src/Hyena/Hyena.Query/XmlQueryParser.cs b/lib/Hyena/src/Hyena/Hyena.Query/XmlQueryParser.cs
new file mode 100644
index 0000000..622d2d2
--- /dev/null
+++ b/lib/Hyena/src/Hyena/Hyena.Query/XmlQueryParser.cs
@@ -0,0 +1,129 @@
+//
+// XmlQueryParser.cs
+//
+// Author:
+// Gabriel Burt <gburt at novell.com>
+//
+// Copyright (C) 2007-2008 Novell, Inc.
+//
+// Permission is hereby granted, free of charge, to any person obtaining
+// a copy of this software and associated documentation files (the
+// "Software"), to deal in the Software without restriction, including
+// without limitation the rights to use, copy, modify, merge, publish,
+// distribute, sublicense, and/or sell copies of the Software, and to
+// permit persons to whom the Software is furnished to do so, subject to
+// the following conditions:
+//
+// The above copyright notice and this permission notice shall be
+// included in all copies or substantial portions of the Software.
+//
+// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
+// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
+// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
+// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+//
+
+using System;
+using System.IO;
+using System.Text;
+using System.Xml;
+
+namespace Hyena.Query
+{
+ public class XmlQueryParser : QueryParser
+ {
+ private string str;
+ private QueryFieldSet field_set;
+
+ public static QueryNode Parse (string input, QueryFieldSet fieldSet)
+ {
+ return new XmlQueryParser (input).BuildTree (fieldSet);
+ }
+
+ public XmlQueryParser () : base () {}
+
+ public XmlQueryParser (string str)
+ {
+ this.str = str;
+ }
+
+ public override QueryNode BuildTree (QueryFieldSet fieldSet)
+ {
+ field_set = fieldSet;
+ XmlDocument doc = new XmlDocument ();
+ try {
+ doc.LoadXml (str);
+ XmlElement request = doc.FirstChild as XmlElement;
+ if (request == null || request.Name != "request")
+ throw new Exception ("Invalid request");
+
+ XmlElement query = request.FirstChild as XmlElement;
+ if (query == null || query.Name != "query" || query.GetAttribute ("banshee-version") != "1")
+ throw new Exception ("Invalid query");
+
+ QueryNode node = Parse (query.FirstChild as XmlElement, null);
+ return (node != null) ? node.Trim () : null;
+ } catch (Exception) {
+ }
+ return null;
+ }
+
+ private QueryNode Parse (XmlElement node, QueryListNode parent)
+ {
+ if (node == null)
+ return null;
+
+ QueryListNode list = null;
+ //Console.WriteLine ("Parsing node: {0}", node.Name);
+ switch (node.Name.ToLower ()) {
+ case "and":
+ list = new QueryListNode (Keyword.And);
+ break;
+ case "or":
+ list = new QueryListNode (Keyword.Or);
+ break;
+ case "not":
+ list = new QueryListNode (Keyword.Not);
+ break;
+ default:
+ QueryTermNode term = new QueryTermNode ();
+
+ // Get the field (if any) that this term applies to
+ if (node["field"] != null)
+ term.Field = field_set [node["field"].GetAttribute ("name")];
+
+ // Get the value
+ term.Value = QueryValue.CreateFromXml (node, term.Field);
+
+ // Get the operator from the term's name
+ term.Operator = term.Value.OperatorSet [node.Name];
+
+
+ if (parent != null) {
+ parent.AddChild (term);
+ }
+
+ return term;
+ }
+
+ if (list != null) {
+ if (parent != null)
+ parent.AddChild (list);
+
+ // Recursively parse the children of a QueryListNode
+ foreach (XmlNode child in node.ChildNodes) {
+ Parse (child as XmlElement, list);
+ }
+ }
+
+ return list;
+ }
+
+ public override void Reset ()
+ {
+ }
+ }
+}
diff --git a/lib/Hyena/src/Hyena/Hyena.SExpEngine/ArithmeticFunctionSet.cs b/lib/Hyena/src/Hyena/Hyena.SExpEngine/ArithmeticFunctionSet.cs
new file mode 100644
index 0000000..3b92d77
--- /dev/null
+++ b/lib/Hyena/src/Hyena/Hyena.SExpEngine/ArithmeticFunctionSet.cs
@@ -0,0 +1,157 @@
+//
+// ArithmeticFunctionSet.cs
+//
+// Author:
+// Aaron Bockover <abockover at novell.com>
+//
+// Copyright (C) 2007-2008 Novell, Inc.
+//
+// Permission is hereby granted, free of charge, to any person obtaining
+// a copy of this software and associated documentation files (the
+// "Software"), to deal in the Software without restriction, including
+// without limitation the rights to use, copy, modify, merge, publish,
+// distribute, sublicense, and/or sell copies of the Software, and to
+// permit persons to whom the Software is furnished to do so, subject to
+// the following conditions:
+//
+// The above copyright notice and this permission notice shall be
+// included in all copies or substantial portions of the Software.
+//
+// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
+// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
+// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
+// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+//
+
+using System;
+
+namespace Hyena.SExpEngine
+{
+ public class ArithmeticFunctionSet : FunctionSet
+ {
+ public enum ArithmeticOperation
+ {
+ Add,
+ Subtract,
+ Multiply,
+ Divide,
+ Modulo
+ }
+
+ public virtual TreeNode OnPerformArithmetic(TreeNode [] args, ArithmeticOperation operation)
+ {
+ double result = 0.0;
+ bool as_int = true;
+
+ for(int i = 0; i < args.Length; i++) {
+ TreeNode arg = Evaluate(args[i]);
+
+ if(arg is IntLiteral || arg is DoubleLiteral) {
+ double arg_value;
+
+ if(arg is DoubleLiteral) {
+ as_int = false;
+ arg_value = (arg as DoubleLiteral).Value;
+ } else {
+ arg_value = (int)(arg as IntLiteral).Value;
+ }
+
+ if(i == 0) {
+ result = arg_value;
+ continue;
+ }
+
+ switch(operation) {
+ case ArithmeticOperation.Add:
+ result += arg_value;
+ break;
+ case ArithmeticOperation.Subtract:
+ result -= arg_value;
+ break;
+ case ArithmeticOperation.Multiply:
+ result *= arg_value;
+ break;
+ case ArithmeticOperation.Divide:
+ result /= arg_value;
+ break;
+ case ArithmeticOperation.Modulo:
+ if(!(arg is IntLiteral)) {
+ throw new ArgumentException("Modulo requires int arguments");
+ }
+
+ result %= (int)arg_value;
+ break;
+ }
+ } else {
+ throw new ArgumentException("arguments must be double or int");
+ }
+ }
+
+ return as_int ?
+ ((TreeNode)new IntLiteral((int)result)) :
+ ((TreeNode)new DoubleLiteral(result));
+ }
+
+ [Function("add", "+")]
+ public virtual TreeNode OnAdd(TreeNode [] args)
+ {
+ TreeNode first = Evaluate(args[0]);
+
+ if(first is StringLiteral) {
+ return StringFunctionSet.ConcatenateStrings(Evaluator, args);
+ }
+
+ return OnPerformArithmetic(args, ArithmeticOperation.Add);
+ }
+
+ [Function("sub", "-")]
+ public virtual TreeNode OnSubtract(TreeNode [] args)
+ {
+ return OnPerformArithmetic(args, ArithmeticOperation.Subtract);
+ }
+
+ [Function("mul", "*")]
+ public virtual TreeNode OnMultiply(TreeNode [] args)
+ {
+ return OnPerformArithmetic(args, ArithmeticOperation.Multiply);
+ }
+
+ [Function("div", "/")]
+ public virtual TreeNode OnDivide(TreeNode [] args)
+ {
+ return OnPerformArithmetic(args, ArithmeticOperation.Divide);
+ }
+
+ [Function("mod", "%")]
+ public virtual TreeNode OnModulo(TreeNode [] args)
+ {
+ return OnPerformArithmetic(args, ArithmeticOperation.Modulo);
+ }
+
+ [Function("++")]
+ public virtual TreeNode OnIncrement(TreeNode [] args)
+ {
+ return IntegerUpdate(args, 1);
+ }
+
+ [Function("--")]
+ public virtual TreeNode OnDecrement(TreeNode [] args)
+ {
+ return IntegerUpdate(args, -1);
+ }
+
+ private TreeNode IntegerUpdate(TreeNode [] args, int value)
+ {
+ TreeNode variable_node = (FunctionNode)args[0];
+ TreeNode result = Evaluate(variable_node);
+ TreeNode new_result = new IntLiteral(((IntLiteral)result).Value + value);
+
+ FunctionFunctionSet.VariableSet(Evaluator, args[0], new_result);
+
+ return new_result;
+ }
+ }
+}
diff --git a/lib/Hyena/src/Hyena/Hyena.SExpEngine/CastFunctionSet.cs b/lib/Hyena/src/Hyena/Hyena.SExpEngine/CastFunctionSet.cs
new file mode 100644
index 0000000..ba3063d
--- /dev/null
+++ b/lib/Hyena/src/Hyena/Hyena.SExpEngine/CastFunctionSet.cs
@@ -0,0 +1,89 @@
+//
+// CastFunctionSet.cs
+//
+// Author:
+// Aaron Bockover <abockover at novell.com>
+//
+// Copyright (C) 2007-2008 Novell, Inc.
+//
+// Permission is hereby granted, free of charge, to any person obtaining
+// a copy of this software and associated documentation files (the
+// "Software"), to deal in the Software without restriction, including
+// without limitation the rights to use, copy, modify, merge, publish,
+// distribute, sublicense, and/or sell copies of the Software, and to
+// permit persons to whom the Software is furnished to do so, subject to
+// the following conditions:
+//
+// The above copyright notice and this permission notice shall be
+// included in all copies or substantial portions of the Software.
+//
+// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
+// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
+// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
+// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+//
+
+using System;
+
+namespace Hyena.SExpEngine
+{
+ public class CastFunctionSet : FunctionSet
+ {
+ [Function("cast-double")]
+ public virtual TreeNode OnCastDouble(TreeNode [] args)
+ {
+ if(args.Length != 1) {
+ throw new ArgumentException("cast must have only one argument");
+ }
+
+ TreeNode arg = Evaluate(args[0]);
+
+ if(arg is DoubleLiteral) {
+ return arg;
+ } else if(arg is IntLiteral) {
+ return new DoubleLiteral((int)(arg as IntLiteral).Value);
+ } else if(arg is StringLiteral) {
+ return new DoubleLiteral(Convert.ToDouble((arg as StringLiteral).Value));
+ }
+
+ throw new ArgumentException("can only cast double, int, or string literals");
+ }
+
+ [Function("cast-int")]
+ public virtual TreeNode OnCastInt(TreeNode [] args)
+ {
+ DoubleLiteral result = (DoubleLiteral)OnCastDouble(args);
+ return new IntLiteral((int)result.Value);
+ }
+
+ [Function("cast-bool")]
+ public virtual TreeNode OnCastBool(TreeNode [] args)
+ {
+ DoubleLiteral result = (DoubleLiteral)OnCastDouble(args);
+ return new BooleanLiteral((int)result.Value != 0);
+ }
+
+ [Function("cast-string")]
+ public virtual TreeNode OnCastString(TreeNode [] args)
+ {
+ if(args.Length != 1) {
+ throw new ArgumentException("cast must have only one argument");
+ }
+
+ TreeNode arg = Evaluate(args[0]);
+
+ if(arg is DoubleLiteral) {
+ return new StringLiteral(Convert.ToString((arg as DoubleLiteral).Value));
+ } else if(arg is IntLiteral) {
+ return new StringLiteral(Convert.ToString((arg as IntLiteral).Value));
+ } else if(arg is StringLiteral) {
+ return arg;
+ }
+
+ throw new ArgumentException("can only cast double, int, or string literals");
+ }
+ }
+}
diff --git a/lib/Hyena/src/Hyena/Hyena.SExpEngine/CompareFunctionSet.cs b/lib/Hyena/src/Hyena/Hyena.SExpEngine/CompareFunctionSet.cs
new file mode 100644
index 0000000..1c3adaf
--- /dev/null
+++ b/lib/Hyena/src/Hyena/Hyena.SExpEngine/CompareFunctionSet.cs
@@ -0,0 +1,119 @@
+//
+// CompareFunctionSet.cs
+//
+// Author:
+// Aaron Bockover <abockover at novell.com>
+//
+// Copyright (C) 2007-2008 Novell, Inc.
+//
+// Permission is hereby granted, free of charge, to any person obtaining
+// a copy of this software and associated documentation files (the
+// "Software"), to deal in the Software without restriction, including
+// without limitation the rights to use, copy, modify, merge, publish,
+// distribute, sublicense, and/or sell copies of the Software, and to
+// permit persons to whom the Software is furnished to do so, subject to
+// the following conditions:
+//
+// The above copyright notice and this permission notice shall be
+// included in all copies or substantial portions of the Software.
+//
+// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
+// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
+// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
+// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+//
+
+using System;
+
+namespace Hyena.SExpEngine
+{
+ public class CompareFunctionSet : FunctionSet
+ {
+ [Function("compare-to")]
+ public virtual TreeNode OnCompareTo(TreeNode [] args)
+ {
+ if(args.Length != 2) {
+ throw new ArgumentException("must have two arguments");
+ }
+
+ return Compare(Evaluator, args[0], args[1]);
+ }
+
+ public static TreeNode Compare(EvaluatorBase evaluator, TreeNode a, TreeNode b)
+ {
+ TreeNode arg_a = evaluator.Evaluate(a);
+ TreeNode arg_b = evaluator.Evaluate(b);
+
+ if(arg_a.GetType() != arg_b.GetType()) {
+ throw new ArgumentException("arguments must be of the same type to compare");
+ }
+
+ int result = 0;
+
+ if(arg_a is IntLiteral) {
+ result = (arg_a as IntLiteral).Value.CompareTo(
+ (arg_b as IntLiteral).Value);
+ } else if(arg_a is DoubleLiteral) {
+ result = (arg_a as DoubleLiteral).Value.CompareTo(
+ (arg_b as DoubleLiteral).Value);
+ } else if(arg_a is StringLiteral) {
+ result = (arg_a as StringLiteral).Value.CompareTo(
+ (arg_b as StringLiteral).Value);
+ } else if(arg_a is BooleanLiteral) {
+ result = (arg_a as BooleanLiteral).Value.CompareTo(
+ (arg_b as BooleanLiteral).Value);
+ } else {
+ throw new ArgumentException("invalid type for comparison");
+ }
+
+ return new IntLiteral(result);
+ }
+
+ [Function("less-than", "<")]
+ public virtual TreeNode OnCompareLessThan(TreeNode [] args)
+ {
+ IntLiteral result = (IntLiteral)OnCompareTo(args);
+ return new BooleanLiteral(result.Value < 0);
+ }
+
+ [Function("greater-than", ">")]
+ public virtual TreeNode OnCompareGreaterThan(TreeNode [] args)
+ {
+ IntLiteral result = (IntLiteral)OnCompareTo(args);
+ return new BooleanLiteral(result.Value > 0);
+ }
+
+ [Function("equal", "=")]
+ public virtual TreeNode OnCompareEqual(TreeNode [] args)
+ {
+ IntLiteral result = (IntLiteral)OnCompareTo(args);
+ return new BooleanLiteral(result.Value == 0);
+ }
+
+ [Function("not-equal", "!=")]
+ public virtual TreeNode OnCompareNotEqual(TreeNode [] args)
+ {
+ BooleanLiteral result = (BooleanLiteral)OnCompareEqual(args);
+ return new BooleanLiteral(!result.Value);
+ }
+
+ [Function("less-than-or-equal", "<=")]
+ public virtual TreeNode OnCompareLessThanOrEqual(TreeNode [] args)
+ {
+ BooleanLiteral a = (BooleanLiteral)OnCompareLessThan(args);
+ BooleanLiteral b = (BooleanLiteral)OnCompareEqual(args);
+ return new BooleanLiteral(a.Value || b.Value);
+ }
+
+ [Function("greater-than-or-equal", ">=")]
+ public virtual TreeNode OnCompareGreaterThanOrEqual(TreeNode [] args)
+ {
+ BooleanLiteral a = (BooleanLiteral)OnCompareGreaterThan(args);
+ BooleanLiteral b = (BooleanLiteral)OnCompareEqual(args);
+ return new BooleanLiteral(a.Value || b.Value);
+ }
+ }
+}
diff --git a/lib/Hyena/src/Hyena/Hyena.SExpEngine/ControlFunctionSet.cs b/lib/Hyena/src/Hyena/Hyena.SExpEngine/ControlFunctionSet.cs
new file mode 100644
index 0000000..b803e7c
--- /dev/null
+++ b/lib/Hyena/src/Hyena/Hyena.SExpEngine/ControlFunctionSet.cs
@@ -0,0 +1,116 @@
+//
+// ControlFunctionSet.cs
+//
+// Author:
+// Aaron Bockover <abockover at novell.com>
+//
+// Copyright (C) 2007-2008 Novell, Inc.
+//
+// Permission is hereby granted, free of charge, to any person obtaining
+// a copy of this software and associated documentation files (the
+// "Software"), to deal in the Software without restriction, including
+// without limitation the rights to use, copy, modify, merge, publish,
+// distribute, sublicense, and/or sell copies of the Software, and to
+// permit persons to whom the Software is furnished to do so, subject to
+// the following conditions:
+//
+// The above copyright notice and this permission notice shall be
+// included in all copies or substantial portions of the Software.
+//
+// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
+// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
+// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
+// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+//
+
+using System;
+
+namespace Hyena.SExpEngine
+{
+ public class ControlFunctionSet : FunctionSet
+ {
+ [Function("if")]
+ public virtual TreeNode OnIf(TreeNode [] args)
+ {
+ if(args == null || args.Length < 2 || args.Length > 3) {
+ throw new ArgumentException("if accepts 2 or 3 arguments");
+ }
+
+ TreeNode arg = Evaluate(args[0]);
+ if(!(arg is BooleanLiteral)) {
+ throw new ArgumentException("first if argument must be boolean");
+ }
+
+ BooleanLiteral conditional = (BooleanLiteral)arg;
+
+ if(conditional.Value) {
+ return Evaluate(args[1]);
+ } else if(args.Length == 3) {
+ return Evaluate(args[2]);
+ }
+
+ return new VoidLiteral();
+ }
+
+ [Function("while")]
+ public virtual TreeNode OnWhile(TreeNode [] args)
+ {
+ if(args == null || args.Length < 1 || args.Length > 2) {
+ throw new ArgumentException("while accepts a condition and an expression or just an expression");
+ }
+
+ while(true) {
+ if(args.Length == 2) {
+ TreeNode result = Evaluate(args[0]);
+ if(!(result is BooleanLiteral)) {
+ throw new ArgumentException("condition is not boolean");
+ }
+
+ if(!(result as BooleanLiteral).Value) {
+ break;
+ }
+ }
+
+ try {
+ Evaluate(args[args.Length - 1]);
+ } catch(Exception e) {
+ if(BreakHandler(e)) {
+ break;
+ }
+ }
+ }
+
+ return new VoidLiteral();
+ }
+
+ [Function("break")]
+ public virtual TreeNode OnBreak(TreeNode [] args)
+ {
+ throw new BreakException();
+ }
+
+ private class BreakException : Exception
+ {
+ public BreakException()
+ {
+ }
+ }
+
+ public static bool BreakHandler(Exception e)
+ {
+ Exception parent_e = e;
+
+ while(parent_e != null) {
+ if(parent_e is BreakException) {
+ return true;
+ }
+ parent_e = parent_e.InnerException;
+ }
+
+ throw e;
+ }
+ }
+}
diff --git a/lib/Hyena/src/Hyena/Hyena.SExpEngine/Evaluator.cs b/lib/Hyena/src/Hyena/Hyena.SExpEngine/Evaluator.cs
new file mode 100644
index 0000000..294b0da
--- /dev/null
+++ b/lib/Hyena/src/Hyena/Hyena.SExpEngine/Evaluator.cs
@@ -0,0 +1,63 @@
+//
+// Evaluator.cs
+//
+// Author:
+// Aaron Bockover <abockover at novell.com>
+//
+// Copyright (C) 2007-2008 Novell, Inc.
+//
+// Permission is hereby granted, free of charge, to any person obtaining
+// a copy of this software and associated documentation files (the
+// "Software"), to deal in the Software without restriction, including
+// without limitation the rights to use, copy, modify, merge, publish,
+// distribute, sublicense, and/or sell copies of the Software, and to
+// permit persons to whom the Software is furnished to do so, subject to
+// the following conditions:
+//
+// The above copyright notice and this permission notice shall be
+// included in all copies or substantial portions of the Software.
+//
+// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
+// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
+// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
+// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+//
+
+using System;
+
+namespace Hyena.SExpEngine
+{
+ public class Evaluator : EvaluatorBase
+ {
+ public Evaluator() : base()
+ {
+ RegisterFunctions();
+ }
+
+ public Evaluator(TreeNode expression) : base(expression)
+ {
+ RegisterFunctions();
+ }
+
+ public Evaluator(string expression) : base(expression)
+ {
+ RegisterFunctions();
+ }
+
+ private void RegisterFunctions()
+ {
+ RegisterFunctionSet(new ControlFunctionSet());
+ RegisterFunctionSet(new LogicFunctionSet());
+ RegisterFunctionSet(new FunctionFunctionSet());
+ RegisterFunctionSet(new CastFunctionSet());
+ RegisterFunctionSet(new CompareFunctionSet());
+ RegisterFunctionSet(new ArithmeticFunctionSet());
+ RegisterFunctionSet(new StringFunctionSet());
+ RegisterFunctionSet(new UtilityFunctionSet());
+ RegisterFunctionSet(new ListFunctionSet());
+ }
+ }
+}
diff --git a/lib/Hyena/src/Hyena/Hyena.SExpEngine/EvaluatorBase.cs b/lib/Hyena/src/Hyena/Hyena.SExpEngine/EvaluatorBase.cs
new file mode 100644
index 0000000..2076cdd
--- /dev/null
+++ b/lib/Hyena/src/Hyena/Hyena.SExpEngine/EvaluatorBase.cs
@@ -0,0 +1,333 @@
+//
+// EvaluatorBase.cs
+//
+// Author:
+// Aaron Bockover <abockover at novell.com>
+//
+// Copyright (C) 2007-2008 Novell, Inc.
+//
+// Permission is hereby granted, free of charge, to any person obtaining
+// a copy of this software and associated documentation files (the
+// "Software"), to deal in the Software without restriction, including
+// without limitation the rights to use, copy, modify, merge, publish,
+// distribute, sublicense, and/or sell copies of the Software, and to
+// permit persons to whom the Software is furnished to do so, subject to
+// the following conditions:
+//
+// The above copyright notice and this permission notice shall be
+// included in all copies or substantial portions of the Software.
+//
+// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
+// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
+// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
+// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+//
+
+using System;
+using System.Reflection;
+using System.Collections.Generic;
+using System.Collections.ObjectModel;
+
+namespace Hyena.SExpEngine
+{
+ public delegate TreeNode SExpFunctionHandler(EvaluatorBase evaluator, TreeNode [] args);
+ public delegate TreeNode SExpVariableResolutionHandler(TreeNode node);
+
+ public class EvaluationException : ApplicationException
+ {
+ public EvaluationException(TreeNode node, string token, Exception inner) : base(String.Format(
+ "Evaluation exception at token `{0} ({1})' [{2},{3}]",
+ node.GetType(), token, node.Line, node.Column), inner)
+ {
+ }
+ }
+
+ public class UnknownVariableException : ApplicationException
+ {
+ public UnknownVariableException(string var) : base(var)
+ {
+ }
+ }
+
+ public class EvaluatorBase
+ {
+ private class MethodInfoContainer
+ {
+ public object Object;
+ public MethodInfo MethodInfo;
+ public bool EvaluateVariables;
+ }
+
+ private TreeNode expression;
+ private TreeNode function_table_expression = new TreeNode();
+
+ private string input;
+ private Dictionary<string, object> functions = new Dictionary<string, object>();
+ private List<Exception> exceptions = new List<Exception>();
+
+ public EvaluatorBase()
+ {
+ expression = function_table_expression;
+ }
+
+ public EvaluatorBase(TreeNode expression)
+ {
+ this.expression = expression;
+ }
+
+ public EvaluatorBase(string input)
+ {
+ expression = function_table_expression;
+ this.input = input;
+ }
+
+ public void RegisterVariable(string name, string value)
+ {
+ expression.RegisterFunction(name, value);
+ }
+
+ public void RegisterVariable(string name, bool value)
+ {
+ expression.RegisterFunction(name, value);
+ }
+
+ public void RegisterVariable(string name, int value)
+ {
+ expression.RegisterFunction(name, value);
+ }
+
+ public void RegisterVariable(string name, double value)
+ {
+ expression.RegisterFunction(name, value);
+ }
+
+ public void RegisterVariable(string name, SExpVariableResolutionHandler value)
+ {
+ expression.RegisterFunction(name, value);
+ }
+
+ public void RegisterVariable(string name, TreeNode value)
+ {
+ expression.RegisterFunction(name, value);
+ }
+
+ public void RegisterFunction(SExpFunctionHandler handler, params string [] names)
+ {
+ foreach(string name in names) {
+ if(functions.ContainsKey(name)) {
+ functions.Remove(name);
+ }
+
+ functions.Add(name, handler);
+ }
+ }
+
+ public void RegisterFunction(object o, MethodInfo method, string [] names)
+ {
+ RegisterFunction(o, method, names, true);
+ }
+
+ public void RegisterFunction(object o, MethodInfo method, string [] names, bool evaluateVariables)
+ {
+ MethodInfoContainer container = new MethodInfoContainer();
+ container.MethodInfo = method;
+ container.Object = o;
+ container.EvaluateVariables = evaluateVariables;
+
+ foreach(string name in names) {
+ if(functions.ContainsKey(name)) {
+ functions.Remove(name);
+ }
+
+ functions.Add(name, container);
+ }
+ }
+
+ public void RegisterFunctionSet(FunctionSet functionSet)
+ {
+ functionSet.Load(this);
+ }
+
+ public TreeNode EvaluateTree(TreeNode expression)
+ {
+ this.expression = expression;
+ this.input = null;
+ return Evaluate();
+ }
+
+ public TreeNode EvaluateString(string input)
+ {
+ this.expression = null;
+ this.input = input;
+ return Evaluate();
+ }
+
+ public TreeNode Evaluate()
+ {
+ exceptions.Clear();
+
+ try {
+ if(expression == null) {
+ Parser parser = new Parser();
+ expression = parser.Parse(input);
+ expression.CopyFunctionsFrom(function_table_expression);
+ }
+
+ return Evaluate(expression);
+ } catch(Exception e) {
+ Exception next = e;
+
+ do {
+ if(next != null) {
+ exceptions.Add(next);
+ next = next.InnerException;
+ }
+ } while(next != null && next.InnerException != null);
+
+ if(next != null) {
+ exceptions.Add(next);
+ }
+ }
+
+ return null;
+ }
+
+ public TreeNode Evaluate(TreeNode node)
+ {
+ if(!node.HasChildren || node is FunctionNode) {
+ return EvaluateNode(node);
+ }
+
+ TreeNode final_result_node = new TreeNode();
+
+ foreach(TreeNode child_node in node.Children) {
+ TreeNode result_node = EvaluateNode(child_node);
+
+ if(result_node != null) {
+ final_result_node.AddChild(result_node);
+ }
+
+ if(child_node is FunctionNode) {
+ if(functions.ContainsKey((child_node as FunctionNode).Function)) {
+ break;
+ }
+
+ FunctionNode impl = ResolveFunction(child_node as FunctionNode);
+ if(impl != null && impl.RequiresArguments) {
+ break;
+ }
+ }
+ }
+
+ return final_result_node.ChildCount == 1 ? final_result_node.Children[0] : final_result_node;
+ }
+
+ private TreeNode EvaluateNode(TreeNode node)
+ {
+ TreeNode result_node = null;
+
+ if(node is FunctionNode) {
+ try {
+ result_node = EvaluateFunction(node as FunctionNode);
+ } catch(Exception e) {
+ Exception ee = e;
+ if(e is TargetInvocationException) {
+ ee = e.InnerException;
+ }
+
+ throw new EvaluationException(node, (node as FunctionNode).Function, ee);
+ }
+ } else if(node is LiteralNodeBase) {
+ result_node = node;
+ } else {
+ result_node = Evaluate(node);
+ }
+
+ return result_node;
+ }
+
+ private TreeNode EvaluateFunction(FunctionNode node)
+ {
+ object handler = null;
+
+ TreeNode parent = node.Parent;
+ TreeNode [] args = null;
+
+ if(!functions.ContainsKey(node.Function)) {
+ handler = ResolveFunction(node);
+ if(handler == null) {
+ throw new InvalidFunctionException(node.Function);
+ }
+ } else {
+ handler = functions[node.Function];
+ }
+
+ if(parent.Children[0] == node) {
+ args = new TreeNode[parent.ChildCount - 1];
+
+ for(int i = 0; i < args.Length; i++) {
+ args[i] = parent.Children[i + 1];
+
+ if(handler is MethodInfoContainer && !(handler as MethodInfoContainer).EvaluateVariables) {
+ continue;
+ }
+ }
+ }
+
+ if(handler is FunctionNode) {
+ return (handler as FunctionNode).Evaluate(this, args);
+ } else if(handler is SExpFunctionHandler) {
+ return ((SExpFunctionHandler)handler)(this, args);
+ } else if(handler is MethodInfoContainer) {
+ MethodInfoContainer container = (MethodInfoContainer)handler;
+ return (TreeNode)container.MethodInfo.Invoke(container.Object, new object [] { args });
+ } else {
+ throw new InvalidFunctionException(String.Format(
+ "Unknown runtime method handler type {1}", handler.GetType()));
+ }
+ }
+
+ internal FunctionNode ResolveFunction(FunctionNode node)
+ {
+ TreeNode shift_node = node;
+
+ do {
+ if(shift_node.Functions.ContainsKey(node.Function)) {
+ return shift_node.Functions[node.Function];
+ }
+
+ shift_node = shift_node.Parent;
+ } while(shift_node != null);
+
+ return null;
+ }
+
+ public bool Success {
+ get { return exceptions.Count == 0; }
+ }
+
+ public TreeNode ExpressionTree {
+ get { return expression; }
+ }
+
+ public ReadOnlyCollection<Exception> Exceptions {
+ get { return new ReadOnlyCollection<Exception>(exceptions); }
+ }
+
+ public string ErrorMessage {
+ get {
+ if(exceptions.Count == 0) {
+ return null;
+ } else if(exceptions.Count >= 2) {
+ return String.Format("{0}: {1}", exceptions[exceptions.Count - 2].Message,
+ exceptions[exceptions.Count - 1].Message);
+ }
+
+ return exceptions[0].Message;
+ }
+ }
+ }
+}
diff --git a/lib/Hyena/src/Hyena/Hyena.SExpEngine/FunctionFunctionSet.cs b/lib/Hyena/src/Hyena/Hyena.SExpEngine/FunctionFunctionSet.cs
new file mode 100644
index 0000000..96a3ba6
--- /dev/null
+++ b/lib/Hyena/src/Hyena/Hyena.SExpEngine/FunctionFunctionSet.cs
@@ -0,0 +1,100 @@
+//
+// FunctionFunctionSet.cs
+//
+// Author:
+// Aaron Bockover <abockover at novell.com>
+//
+// Copyright (C) 2007-2008 Novell, Inc.
+//
+// Permission is hereby granted, free of charge, to any person obtaining
+// a copy of this software and associated documentation files (the
+// "Software"), to deal in the Software without restriction, including
+// without limitation the rights to use, copy, modify, merge, publish,
+// distribute, sublicense, and/or sell copies of the Software, and to
+// permit persons to whom the Software is furnished to do so, subject to
+// the following conditions:
+//
+// The above copyright notice and this permission notice shall be
+// included in all copies or substantial portions of the Software.
+//
+// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
+// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
+// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
+// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+//
+
+using System;
+
+namespace Hyena.SExpEngine
+{
+ public class FunctionFunctionSet : FunctionSet
+ {
+ [Function(false, "set")]
+ public virtual TreeNode OnSet(TreeNode [] args)
+ {
+ return VariableSet(Evaluator, args, true);
+ }
+
+ public static TreeNode VariableSet(EvaluatorBase evaluator, TreeNode var, TreeNode value)
+ {
+ return VariableSet(evaluator, new TreeNode[] { var, value }, true);
+ }
+
+ public static TreeNode VariableSet(EvaluatorBase evaluator, TreeNode [] args, bool update)
+ {
+ if(args.Length != 2) {
+ throw new ArgumentException("must have two arguments");
+ }
+
+ if(!(args[0] is FunctionNode)) {
+ throw new ArgumentException("first argument must be a variable");
+ }
+
+ FunctionNode variable_node = evaluator.ResolveFunction(args[0] as FunctionNode);
+ if(variable_node != null) {
+ variable_node.Body = evaluator.Evaluate(args[1]);
+ } else {
+ TreeNode parent = args[0].Parent;
+ parent = parent.Parent ?? parent;
+
+ parent.RegisterFunction((args[0] as FunctionNode).Function, evaluator.Evaluate(args[1]));
+ }
+
+ return new VoidLiteral();
+ }
+
+ [Function(false, "define")]
+ public virtual TreeNode OnDefine(TreeNode [] args)
+ {
+ if(args.Length < 2 || args.Length > 3) {
+ throw new ArgumentException("define must have two or three arguments");
+ }
+
+ if(!(args[0] is FunctionNode)) {
+ throw new ArgumentException("first define argument must be a variable");
+ }
+
+ FunctionNode function = new FunctionNode((args[0] as FunctionNode).Function, args[args.Length - 1]);
+
+ if(args.Length == 3 && args[1].HasChildren) {
+ foreach(TreeNode function_arg in args[1].Children) {
+ if(!(function_arg is FunctionNode)) {
+ throw new ArgumentException("define function arguments must be variable tokens");
+ }
+
+ function.RegisterFunction((function_arg as FunctionNode).Function, new VoidLiteral());
+ }
+ }
+
+ TreeNode parent = args[0].Parent;
+ parent = parent.Parent ?? parent;
+
+ parent.RegisterFunction(function.Function, function);
+
+ return new VoidLiteral();
+ }
+ }
+}
diff --git a/lib/Hyena/src/Hyena/Hyena.SExpEngine/FunctionNode.cs b/lib/Hyena/src/Hyena/Hyena.SExpEngine/FunctionNode.cs
new file mode 100644
index 0000000..966be3c
--- /dev/null
+++ b/lib/Hyena/src/Hyena/Hyena.SExpEngine/FunctionNode.cs
@@ -0,0 +1,123 @@
+//
+// FunctionNode.cs
+//
+// Author:
+// Aaron Bockover <abockover at novell.com>
+//
+// Copyright (C) 2007-2008 Novell, Inc.
+//
+// Permission is hereby granted, free of charge, to any person obtaining
+// a copy of this software and associated documentation files (the
+// "Software"), to deal in the Software without restriction, including
+// without limitation the rights to use, copy, modify, merge, publish,
+// distribute, sublicense, and/or sell copies of the Software, and to
+// permit persons to whom the Software is furnished to do so, subject to
+// the following conditions:
+//
+// The above copyright notice and this permission notice shall be
+// included in all copies or substantial portions of the Software.
+//
+// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
+// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
+// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
+// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+//
+
+using System;
+using System.Collections.Generic;
+
+namespace Hyena.SExpEngine
+{
+ public class InvalidFunctionException : Exception
+ {
+ public InvalidFunctionException(string message) : base(message)
+ {
+ }
+ }
+
+ public class FunctionNode : TreeNode
+ {
+ private string function;
+ private object body;
+
+ public FunctionNode(string function)
+ {
+ this.function = function;
+ }
+
+ public FunctionNode(string function, object body)
+ {
+ this.function = function;
+ this.body = body;
+ }
+
+ public TreeNode Evaluate(EvaluatorBase evaluator, TreeNode [] args)
+ {
+ if(args != null && args.Length != FunctionCount && RequiresArguments) {
+ throw new ArgumentException("Function " + function + " takes "
+ + FunctionCount + " arguments, not " + args.Length);
+ }
+
+ if(args != null && RequiresArguments) {
+ int i = 0;
+ string [] names = new string[args.Length];
+
+ foreach(KeyValuePair<string, FunctionNode> var in Functions) {
+ names[i++] = var.Key;
+ }
+
+ for(i = 0; i < args.Length; i++) {
+ (body as TreeNode).RegisterFunction(names[i], evaluator.Evaluate(args[i]));
+ }
+ }
+
+ return evaluator.Evaluate(ResolveBody(evaluator));
+ }
+
+ private TreeNode ResolveBody(EvaluatorBase evaluator)
+ {
+ if(body == null) {
+ throw new UnknownVariableException(Function);
+ }
+
+ if(body is string) {
+ return new StringLiteral((string)body);
+ } else if(body is double) {
+ return new DoubleLiteral((double)body);
+ } else if(body is int) {
+ return new IntLiteral((int)body);
+ } else if(body is bool) {
+ return new BooleanLiteral((bool)body);
+ } else if(body is SExpVariableResolutionHandler) {
+ return ((SExpVariableResolutionHandler)body)(this);
+ } else if(body is TreeNode) {
+ return evaluator.Evaluate((TreeNode)body);
+ }
+
+ throw new UnknownVariableException(String.Format(
+ "Unknown function type `{0}' for function `{1}'",
+ body.GetType(), Function));
+ }
+
+ public override string ToString()
+ {
+ return Function;
+ }
+
+ internal object Body {
+ get { return body; }
+ set { body = value; }
+ }
+
+ internal bool RequiresArguments {
+ get { return FunctionCount > 0 && body is TreeNode; }
+ }
+
+ public string Function {
+ get { return function; }
+ }
+ }
+}
diff --git a/lib/Hyena/src/Hyena/Hyena.SExpEngine/FunctionSet.cs b/lib/Hyena/src/Hyena/Hyena.SExpEngine/FunctionSet.cs
new file mode 100644
index 0000000..97cb4ab
--- /dev/null
+++ b/lib/Hyena/src/Hyena/Hyena.SExpEngine/FunctionSet.cs
@@ -0,0 +1,98 @@
+//
+// FunctionSet.cs
+//
+// Author:
+// Aaron Bockover <abockover at novell.com>
+//
+// Copyright (C) 2007-2008 Novell, Inc.
+//
+// Permission is hereby granted, free of charge, to any person obtaining
+// a copy of this software and associated documentation files (the
+// "Software"), to deal in the Software without restriction, including
+// without limitation the rights to use, copy, modify, merge, publish,
+// distribute, sublicense, and/or sell copies of the Software, and to
+// permit persons to whom the Software is furnished to do so, subject to
+// the following conditions:
+//
+// The above copyright notice and this permission notice shall be
+// included in all copies or substantial portions of the Software.
+//
+// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
+// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
+// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
+// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+//
+
+using System;
+using System.Reflection;
+
+namespace Hyena.SExpEngine
+{
+ [AttributeUsage(AttributeTargets.Method)]
+ public class FunctionAttribute : Attribute
+ {
+ private string [] names;
+ private bool evaluate_variables;
+
+ public FunctionAttribute(params string [] names)
+ {
+ this.evaluate_variables = true;
+ this.names = names;
+ }
+
+ public FunctionAttribute(bool evaluateVariables, params string [] names)
+ {
+ this.evaluate_variables = evaluateVariables;
+ this.names = names;
+ }
+
+ public string [] Names {
+ get { return names; }
+ }
+
+ public bool EvaluateVariables {
+ get { return evaluate_variables; }
+ }
+ }
+
+ public abstract class FunctionSet
+ {
+ private EvaluatorBase evaluator;
+
+ public void Load(EvaluatorBase evaluator)
+ {
+ this.evaluator = evaluator;
+
+ foreach(MethodInfo method in GetType().GetMethods()) {
+ string [] names = null;
+ bool evaluate_variables = true;
+
+ foreach(Attribute attr in method.GetCustomAttributes(false)) {
+ if(attr is FunctionAttribute) {
+ names = (attr as FunctionAttribute).Names;
+ evaluate_variables = (attr as FunctionAttribute).EvaluateVariables;
+ break;
+ }
+ }
+
+ if(names == null || names.Length == 0) {
+ continue;
+ }
+
+ evaluator.RegisterFunction(this, method, names, evaluate_variables);
+ }
+ }
+
+ public TreeNode Evaluate(TreeNode node)
+ {
+ return evaluator.Evaluate(node);
+ }
+
+ protected EvaluatorBase Evaluator {
+ get { return evaluator; }
+ }
+ }
+}
diff --git a/lib/Hyena/src/Hyena/Hyena.SExpEngine/ListFunctionSet.cs b/lib/Hyena/src/Hyena/Hyena.SExpEngine/ListFunctionSet.cs
new file mode 100644
index 0000000..e834d02
--- /dev/null
+++ b/lib/Hyena/src/Hyena/Hyena.SExpEngine/ListFunctionSet.cs
@@ -0,0 +1,190 @@
+//
+// ListFunctionSet.cs
+//
+// Author:
+// Aaron Bockover <abockover at novell.com>
+//
+// Copyright (C) 2007-2008 Novell, Inc.
+//
+// Permission is hereby granted, free of charge, to any person obtaining
+// a copy of this software and associated documentation files (the
+// "Software"), to deal in the Software without restriction, including
+// without limitation the rights to use, copy, modify, merge, publish,
+// distribute, sublicense, and/or sell copies of the Software, and to
+// permit persons to whom the Software is furnished to do so, subject to
+// the following conditions:
+//
+// The above copyright notice and this permission notice shall be
+// included in all copies or substantial portions of the Software.
+//
+// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
+// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
+// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
+// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+//
+
+using System;
+
+namespace Hyena.SExpEngine
+{
+ public class ListFunctionSet : FunctionSet
+ {
+ // FIXME: Why is this here? --Aaron
+ //
+ // private TreeNode EvaluateList(TreeNode node)
+ // {
+ // TreeNode list = new TreeNode();
+ //
+ // foreach(TreeNode child in node.Children) {
+ // list.AddChild(Evaluate(child));
+ // }
+ //
+ // return list;
+ // }
+
+ private bool IsList(TreeNode node)
+ {
+ return !(node is LiteralNodeBase) && !(node is FunctionNode);
+ }
+
+ public void CheckList(TreeNode node)
+ {
+ if(!IsList(node)) {
+ throw new ArgumentException("argument must be a list");
+ }
+ }
+
+ [Function("is-list")]
+ public virtual TreeNode OnIsList(TreeNode [] args)
+ {
+ return new BooleanLiteral(IsList(args[0]));
+ }
+
+ [Function("item-at")]
+ public virtual TreeNode OnItemAt(TreeNode [] args)
+ {
+ TreeNode list = Evaluate(args[0]);
+ CheckList(list);
+
+ TreeNode node = Evaluate(args[1]);
+ int index = 0;
+
+ if(!(node is IntLiteral)) {
+ throw new ArgumentException("argument must be an index");
+ }
+
+ index = (node as IntLiteral).Value;
+
+ return Evaluate(list.Children[index]);
+ }
+
+ [Function("remove-at")]
+ public virtual TreeNode OnRemoveAt(TreeNode [] args)
+ {
+ TreeNode list = Evaluate(args[0]);
+ CheckList(list);
+
+ TreeNode node = Evaluate(args[1]);
+ int index = 0;
+
+ if(!(node is IntLiteral)) {
+ throw new ArgumentException("argument must be an index");
+ }
+
+ index = (node as IntLiteral).Value;
+
+ list.Children.RemoveAt(index);
+
+ return list;
+ }
+
+ [Function("remove")]
+ public virtual TreeNode OnRemove(TreeNode [] args)
+ {
+ TreeNode list = Evaluate(args[0]);
+ CheckList(list);
+
+ TreeNode node = Evaluate(args[1]);
+
+ foreach(TreeNode compare_node in list.Children) {
+ if(((IntLiteral)CompareFunctionSet.Compare(Evaluator, node, compare_node)).Value == 0) {
+ list.Children.Remove(compare_node);
+ break;
+ }
+ }
+
+ return list;
+ }
+
+ [Function("append")]
+ public virtual TreeNode OnAppend(TreeNode [] args)
+ {
+ TreeNode list = Evaluate(args[0]);
+ CheckList(list);
+ list.Children.Add(Evaluate(args[1]));
+ return list;
+ }
+
+ [Function("prepend")]
+ public virtual TreeNode OnPrepend(TreeNode [] args)
+ {
+ TreeNode list = Evaluate(args[0]);
+ CheckList(list);
+ list.Children.Insert(0, Evaluate(args[1]));
+ return list;
+ }
+
+ [Function("insert")]
+ public virtual TreeNode OnInsert(TreeNode [] args)
+ {
+ TreeNode list = Evaluate(args[0]);
+ CheckList(list);
+
+ TreeNode node = Evaluate(args[1]);
+ int index = 0;
+
+ if(!(node is IntLiteral)) {
+ throw new ArgumentException("argument must be an index");
+ }
+
+ index = (node as IntLiteral).Value;
+ list.Children.Insert(index, Evaluate(args[2]));
+
+ return list;
+ }
+
+ [Function("foreach")]
+ public virtual TreeNode OnForeach(TreeNode [] args)
+ {
+ TreeNode list = Evaluate(args[1]);
+ CheckList(list);
+ FunctionNode item_variable = (FunctionNode)args[0];
+ TreeNode function = args[2];
+
+ TreeNode self = args[0].Parent.Children[0];
+ self.Parent.RegisterFunction(item_variable.Function, item_variable);
+
+ foreach(TreeNode child in list.Children) {
+ item_variable.Body = child;
+
+ try {
+ if(function is FunctionNode) {
+ FunctionNode function_impl = Evaluator.ResolveFunction(function as FunctionNode);
+ function_impl.Evaluate(Evaluator, new TreeNode [] { child });
+ } else {
+ Evaluate(function);
+ }
+ } catch(Exception e) {
+ if(ControlFunctionSet.BreakHandler(e)) {
+ break;
+ }
+ }
+ }
+
+ return new VoidLiteral();
+ }
+ }
+}
diff --git a/lib/Hyena/src/Hyena/Hyena.SExpEngine/Literals.cs b/lib/Hyena/src/Hyena/Hyena.SExpEngine/Literals.cs
new file mode 100644
index 0000000..217b273
--- /dev/null
+++ b/lib/Hyena/src/Hyena/Hyena.SExpEngine/Literals.cs
@@ -0,0 +1,114 @@
+//
+// Literals.cs
+//
+// Author:
+// Aaron Bockover <abockover at novell.com>
+//
+// Copyright (C) 2007-2008 Novell, Inc.
+//
+// Permission is hereby granted, free of charge, to any person obtaining
+// a copy of this software and associated documentation files (the
+// "Software"), to deal in the Software without restriction, including
+// without limitation the rights to use, copy, modify, merge, publish,
+// distribute, sublicense, and/or sell copies of the Software, and to
+// permit persons to whom the Software is furnished to do so, subject to
+// the following conditions:
+//
+// The above copyright notice and this permission notice shall be
+// included in all copies or substantial portions of the Software.
+//
+// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
+// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
+// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
+// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+//
+
+using System;
+
+namespace Hyena.SExpEngine
+{
+ public class LiteralNodeBase : TreeNode
+ {
+ private Type type = null;
+
+ public Type EnclosedType {
+ get { return type ?? GetType(); }
+ set { type = value; }
+ }
+ }
+
+ public class LiteralNode<T> : LiteralNodeBase
+ {
+ private T value;
+
+ public LiteralNode(T value)
+ {
+ this.value = value;
+ EnclosedType = typeof(T);
+ }
+
+ public override string ToString()
+ {
+ return Value.ToString();
+ }
+
+ public T Value {
+ get { return value; }
+ }
+ }
+
+ // Literal Types
+
+ public class VoidLiteral : LiteralNodeBase
+ {
+ public override string ToString()
+ {
+ return "void";
+ }
+ }
+
+ public class DoubleLiteral : LiteralNode<double>
+ {
+ private static System.Globalization.CultureInfo culture_info = new System.Globalization.CultureInfo("en-US");
+
+ public DoubleLiteral(double value) : base(value)
+ {
+ }
+
+ public override string ToString()
+ {
+ return (Value - (int)Value) == 0.0
+ ? String.Format("{0}.0", Value.ToString(culture_info))
+ : Value.ToString(culture_info);
+ }
+ }
+
+ public class BooleanLiteral : LiteralNode<bool>
+ {
+ public BooleanLiteral(bool value) : base(value)
+ {
+ }
+
+ public override string ToString()
+ {
+ return Value ? "true" : "false";
+ }
+ }
+
+ public class IntLiteral : LiteralNode<int>
+ {
+ public IntLiteral(int value) : base(value)
+ {
+ }
+ }
+
+ public class StringLiteral : LiteralNode<string>
+ {
+ public StringLiteral(string value) : base(value)
+ {
+ }
+ }
+}
diff --git a/lib/Hyena/src/Hyena/Hyena.SExpEngine/LogicFunctionSet.cs b/lib/Hyena/src/Hyena/Hyena.SExpEngine/LogicFunctionSet.cs
new file mode 100644
index 0000000..88c9b67
--- /dev/null
+++ b/lib/Hyena/src/Hyena/Hyena.SExpEngine/LogicFunctionSet.cs
@@ -0,0 +1,94 @@
+//
+// LogicFunctionSet.cs
+//
+// Author:
+// Aaron Bockover <abockover at novell.com>
+//
+// Copyright (C) 2007-2008 Novell, Inc.
+//
+// Permission is hereby granted, free of charge, to any person obtaining
+// a copy of this software and associated documentation files (the
+// "Software"), to deal in the Software without restriction, including
+// without limitation the rights to use, copy, modify, merge, publish,
+// distribute, sublicense, and/or sell copies of the Software, and to
+// permit persons to whom the Software is furnished to do so, subject to
+// the following conditions:
+//
+// The above copyright notice and this permission notice shall be
+// included in all copies or substantial portions of the Software.
+//
+// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
+// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
+// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
+// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+//
+
+using System;
+
+namespace Hyena.SExpEngine
+{
+ public class LogicFunctionSet : FunctionSet
+ {
+ [Function("not", "!")]
+ public virtual TreeNode OnNot(TreeNode [] args)
+ {
+ if(args.Length != 1) {
+ throw new ArgumentException("not must have only one argument");
+ }
+
+ TreeNode arg = Evaluate(args[0]);
+
+ if(!(arg is BooleanLiteral)) {
+ throw new ArgumentException("can only not a boolean");
+ }
+
+ return new BooleanLiteral(!(arg as BooleanLiteral).Value);
+ }
+
+ [Function("or", "|")]
+ public virtual TreeNode OnOr(TreeNode [] args)
+ {
+ return OnAndOr(args, false);
+ }
+
+ [Function("and", "|")]
+ public virtual TreeNode OnAnd(TreeNode [] args)
+ {
+ return OnAndOr(args, true);
+ }
+
+ private TreeNode OnAndOr(TreeNode [] args, bool and)
+ {
+ if(args.Length < 2) {
+ throw new ArgumentException("must have two or more boolean arguments");
+ }
+
+ bool result = false;
+
+ for(int i = 0; i < args.Length; i++) {
+ TreeNode node = Evaluate(args[i]);
+ if(!(node is BooleanLiteral)) {
+ throw new ArgumentException("arguments must be boolean");
+ }
+
+ BooleanLiteral arg = (BooleanLiteral)node;
+
+ if(i == 0) {
+ result = arg.Value;
+ continue;
+ }
+
+ if(and) {
+ result &= arg.Value;
+ } else {
+ result |= arg.Value;
+ }
+ }
+
+ return new BooleanLiteral(result);
+ }
+ }
+}
diff --git a/lib/Hyena/src/Hyena/Hyena.SExpEngine/Parser.cs b/lib/Hyena/src/Hyena/Hyena.SExpEngine/Parser.cs
new file mode 100644
index 0000000..53939ab
--- /dev/null
+++ b/lib/Hyena/src/Hyena/Hyena.SExpEngine/Parser.cs
@@ -0,0 +1,253 @@
+//
+// Parser.cs
+//
+// Author:
+// Aaron Bockover <abockover at novell.com>
+//
+// Copyright (C) 2007-2008 Novell, Inc.
+//
+// Permission is hereby granted, free of charge, to any person obtaining
+// a copy of this software and associated documentation files (the
+// "Software"), to deal in the Software without restriction, including
+// without limitation the rights to use, copy, modify, merge, publish,
+// distribute, sublicense, and/or sell copies of the Software, and to
+// permit persons to whom the Software is furnished to do so, subject to
+// the following conditions:
+//
+// The above copyright notice and this permission notice shall be
+// included in all copies or substantial portions of the Software.
+//
+// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
+// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
+// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
+// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+//
+
+using System;
+using System.IO;
+using System.Text;
+using System.Text.RegularExpressions;
+using System.Globalization;
+
+namespace Hyena.SExpEngine
+{
+ public class ParserException : ApplicationException
+ {
+ public ParserException(string token, int line, int col, Exception inner) : base(String.Format(
+ "Parser exception at token `{0}' [{1},{2}]: {3}",
+ token, line, col, inner == null ? "Unknown error" : inner.Message), inner)
+ {
+ }
+ }
+
+ public class Parser
+ {
+ private static Regex number_regex = new Regex(@"^[-+]?(0x[\dA-Fa-f]+)?[\d]*\.?[\d]*([eE][-+]?[\d]+)?$");
+ private static System.Globalization.CultureInfo culture_info = new System.Globalization.CultureInfo("en-US");
+
+ private StreamReader reader;
+ private bool debug;
+
+ private StringBuilder current_token;
+ private TreeNode root_node ;
+ private TreeNode current_parent;
+ private int scope;
+ private int line;
+ private int column;
+
+ public Parser()
+ {
+ }
+
+ public TreeNode Parse(string input)
+ {
+ return Parse(new MemoryStream(Encoding.UTF8.GetBytes(input)));
+ }
+
+ public TreeNode Parse(Stream stream)
+ {
+ return Parse(new StreamReader(stream));
+ }
+
+ public TreeNode Parse(StreamReader reader)
+ {
+ this.reader = reader;
+
+ current_token = new StringBuilder();
+ root_node = new TreeNode();
+ current_parent = root_node;
+ scope = 0;
+ line = 1;
+ column = 0;
+
+ try {
+ Tokenize();
+
+ if(scope != 0) {
+ throw new ApplicationException("Scope does pop back to zero");
+ }
+ } catch(Exception e) {
+ throw new ParserException(current_token.ToString(), line, column, e);
+ }
+
+ return root_node;
+ }
+
+ private void Tokenize()
+ {
+ bool in_string = false;
+ bool in_comment = false;
+
+ while(true) {
+ int ich = reader.Read();
+ char ch = (char)ich;
+
+ if(ich < 0) {
+ break;
+ }
+
+ if(ch == '\n') {
+ line++;
+ column = 0;
+ } else {
+ column++;
+ }
+
+ if(in_comment) {
+ if(ch == '\r' || ch == '\n') {
+ in_comment = false;
+ }
+
+ continue;
+ }
+
+ switch(ch) {
+ case '(':
+ case ')':
+ if(!in_string) {
+ TokenPush(false);
+
+ if(ch == '(') {
+ ScopePush();
+ } else {
+ ScopePop();
+ }
+ } else {
+ current_token.Append(ch);
+ }
+ break;
+ case '"':
+ if(in_string) {
+ in_string = false;
+ TokenPush(true);
+ } else {
+ in_string = true;
+ }
+ break;
+ case '\\':
+ if((char)reader.Peek() == '"') {
+ current_token.Append((char)reader.Read());
+ }
+ break;
+ case ';':
+ if(in_string) {
+ current_token.Append(ch);
+ } else {
+ TokenPush(false);
+ in_comment = true;
+ }
+ break;
+ default:
+ if(Char.IsWhiteSpace(ch)) {
+ if(in_string) {
+ current_token.Append(ch);
+ } else {
+ TokenPush(false);
+ }
+ } else {
+ current_token.Append(ch);
+ }
+ break;
+ }
+ }
+
+ TokenPush(false);
+
+ reader.Close();
+ }
+
+ private void ScopePush()
+ {
+ current_parent = new TreeNode(current_parent);
+ scope++;
+ }
+
+ private void ScopePop()
+ {
+ current_parent = current_parent.Parent;
+ scope--;
+ }
+
+ private void TokenPush(bool as_string)
+ {
+ if(current_token.Length == 0 && !as_string) {
+ return;
+ }
+
+ TreeNode node = null;
+ string token = current_token.ToString();
+
+ if(Debug) {
+ Console.Write("{3}[{0}] TOKEN({4},{5}): [{2}{1}{2}]", scope, token,
+ as_string ? "\"" : String.Empty, String.Empty.PadLeft(scope - 1, ' '),
+ line, column - current_token.Length);
+ }
+
+ if(as_string) {
+ node = new StringLiteral(token);
+ } else if(token == "#t") {
+ node = new BooleanLiteral(true);
+ } else if(token == "#f") {
+ node = new BooleanLiteral(false);
+ } else if(token.Length > 0 && token != "." && token != "-" &&
+ token != "+" && number_regex.IsMatch(token)) {
+ try {
+ if(token.StartsWith("0x") || token.StartsWith("-0x")) {
+ int offset = token[0] == '-' ? 3 : 2;
+ int value = Int32.Parse(token.Substring(offset),
+ NumberStyles.HexNumber, culture_info.NumberFormat);
+ node = new IntLiteral(value * (offset == 3 ? -1 : 1));
+ } else if(token.Contains(".")) {
+ node = new DoubleLiteral(Double.Parse(token,
+ NumberStyles.Float, culture_info.NumberFormat));
+ } else {
+ node = new IntLiteral(Int32.Parse(token,
+ NumberStyles.Integer, culture_info.NumberFormat));
+ }
+ } catch {
+ throw new FormatException("Invalid number format: " + token);
+ }
+ } else {
+ node = new FunctionNode(token);
+ }
+
+ if(Debug) {
+ Console.WriteLine(" => [{0}]", node);
+ }
+
+ node.Line = line;
+ node.Column = column;
+ current_parent.AddChild(node);
+
+ current_token.Remove(0, current_token.Length);
+ }
+
+ public bool Debug {
+ get { return debug; }
+ set { debug = value; }
+ }
+ }
+}
diff --git a/lib/Hyena/src/Hyena/Hyena.SExpEngine/StringFunctionSet.cs b/lib/Hyena/src/Hyena/Hyena.SExpEngine/StringFunctionSet.cs
new file mode 100644
index 0000000..5b55791
--- /dev/null
+++ b/lib/Hyena/src/Hyena/Hyena.SExpEngine/StringFunctionSet.cs
@@ -0,0 +1,176 @@
+//
+// StringFunctionSet.cs
+//
+// Author:
+// Aaron Bockover <abockover at novell.com>
+//
+// Copyright (C) 2007-2008 Novell, Inc.
+//
+// Permission is hereby granted, free of charge, to any person obtaining
+// a copy of this software and associated documentation files (the
+// "Software"), to deal in the Software without restriction, including
+// without limitation the rights to use, copy, modify, merge, publish,
+// distribute, sublicense, and/or sell copies of the Software, and to
+// permit persons to whom the Software is furnished to do so, subject to
+// the following conditions:
+//
+// The above copyright notice and this permission notice shall be
+// included in all copies or substantial portions of the Software.
+//
+// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
+// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
+// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
+// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+//
+
+using System;
+using System.Text;
+using System.Text.RegularExpressions;
+
+namespace Hyena.SExpEngine
+{
+ public class StringFunctionSet : FunctionSet
+ {
+ [Function("string-concat")]
+ public virtual TreeNode OnConcatenateStrings(TreeNode [] args)
+ {
+ return ConcatenateStrings(Evaluator, args);
+ }
+
+ public static TreeNode ConcatenateStrings(EvaluatorBase evaluator, TreeNode [] args)
+ {
+ StringBuilder result = new StringBuilder();
+
+ foreach(TreeNode arg in args) {
+ TreeNode eval_arg = evaluator.Evaluate(arg);
+ if(!(eval_arg is VoidLiteral)) {
+ result.Append(eval_arg);
+ }
+ }
+
+ return new StringLiteral(result.ToString());
+ }
+
+ private void CheckArgumentCount(TreeNode [] args, int expected)
+ {
+ CheckArgumentCount(args, expected, expected);
+ }
+
+ private void CheckArgumentCount(TreeNode [] args, int expected_min, int expected_max)
+ {
+ if(args.Length < expected_min || args.Length > expected_max) {
+ throw new ArgumentException("expects " + expected_min + " <= args <= "
+ + expected_max + " arguments");
+ }
+ }
+
+ private string GetArgumentString(TreeNode [] args, int index)
+ {
+ TreeNode node = Evaluate(args[index]);
+ if(!(node is StringLiteral)) {
+ throw new ArgumentException("argument " + index + " must be a string");
+ }
+
+ return (node as StringLiteral).Value;
+ }
+
+ private int GetArgumentInteger(TreeNode [] args, int index)
+ {
+ TreeNode node = Evaluate(args[index]);
+ if(!(node is IntLiteral)) {
+ throw new ArgumentException("argument " + index + " must be an integer");
+ }
+
+ return (node as IntLiteral).Value;
+ }
+
+ [Function("length")]
+ public virtual TreeNode OnLength(TreeNode [] args)
+ {
+ CheckArgumentCount(args, 1);
+
+ TreeNode node = Evaluate(args[0]);
+
+ if(node is StringLiteral) {
+ return new IntLiteral((node as StringLiteral).Value.Length);
+ } else if(!(node is LiteralNodeBase) && !(node is FunctionNode)) {
+ return new IntLiteral(node.ChildCount);
+ }
+
+ return new IntLiteral(0);
+ }
+
+ [Function("contains")]
+ public virtual TreeNode OnContains(TreeNode [] args)
+ {
+ CheckArgumentCount(args, 2);
+ return new BooleanLiteral(GetArgumentString(args, 0).Contains(GetArgumentString(args, 1)));
+ }
+
+ [Function("index-of")]
+ public virtual TreeNode OnIndexOf(TreeNode [] args)
+ {
+ CheckArgumentCount(args, 2);
+ return new IntLiteral(GetArgumentString(args, 0).IndexOf(GetArgumentString(args, 1)));
+ }
+
+ [Function("last-index-of")]
+ public virtual TreeNode OnLastIndexOf(TreeNode [] args)
+ {
+ CheckArgumentCount(args, 2);
+ return new IntLiteral(GetArgumentString(args, 0).LastIndexOf(GetArgumentString(args, 1)));
+ }
+
+ [Function("starts-with")]
+ public virtual TreeNode OnStartsWith(TreeNode [] args)
+ {
+ CheckArgumentCount(args, 2);
+ return new BooleanLiteral(GetArgumentString(args, 0).StartsWith(GetArgumentString(args, 1)));
+ }
+
+ [Function("ends-with")]
+ public virtual TreeNode OnEndsWith(TreeNode [] args)
+ {
+ CheckArgumentCount(args, 2);
+ return new BooleanLiteral(GetArgumentString(args, 0).EndsWith(GetArgumentString(args, 1)));
+ }
+
+ [Function("substring")]
+ public virtual TreeNode OnSubstring(TreeNode [] args)
+ {
+ CheckArgumentCount(args, 2, 3);
+ if(args.Length == 2) {
+ return new StringLiteral(GetArgumentString(args, 0).Substring(GetArgumentInteger(args, 1)));
+ } else {
+ return new StringLiteral(GetArgumentString(args, 0).Substring(
+ GetArgumentInteger(args, 1), GetArgumentInteger(args, 2)));
+ }
+ }
+
+ [Function("split")]
+ public virtual TreeNode OnSplit(TreeNode [] args)
+ {
+ CheckArgumentCount(args, 2);
+
+ TreeNode result = new TreeNode();
+ string str = GetArgumentString(args, 0);
+ string pattern = GetArgumentString(args, 1);
+
+ foreach(string item in Regex.Split(str, pattern)) {
+ result.AddChild(new StringLiteral(item));
+ }
+
+ return result;
+ }
+
+ [Function("trim")]
+ public virtual TreeNode OnTrim(TreeNode [] args)
+ {
+ CheckArgumentCount(args, 1);
+ return new StringLiteral(GetArgumentString(args, 0).Trim());
+ }
+ }
+}
diff --git a/lib/Hyena/src/Hyena/Hyena.SExpEngine/TreeNode.cs b/lib/Hyena/src/Hyena/Hyena.SExpEngine/TreeNode.cs
new file mode 100644
index 0000000..fd3bd88
--- /dev/null
+++ b/lib/Hyena/src/Hyena/Hyena.SExpEngine/TreeNode.cs
@@ -0,0 +1,196 @@
+//
+// TreeNode.cs
+//
+// Author:
+// Aaron Bockover <abockover at novell.com>
+//
+// Copyright (C) 2007-2008 Novell, Inc.
+//
+// Permission is hereby granted, free of charge, to any person obtaining
+// a copy of this software and associated documentation files (the
+// "Software"), to deal in the Software without restriction, including
+// without limitation the rights to use, copy, modify, merge, publish,
+// distribute, sublicense, and/or sell copies of the Software, and to
+// permit persons to whom the Software is furnished to do so, subject to
+// the following conditions:
+//
+// The above copyright notice and this permission notice shall be
+// included in all copies or substantial portions of the Software.
+//
+// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
+// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
+// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
+// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+//
+
+using System;
+using System.Collections.Generic;
+using System.Collections.ObjectModel;
+
+namespace Hyena.SExpEngine
+{
+ public class TreeNode
+ {
+ private List<TreeNode> children = new List<TreeNode>();
+ private Dictionary<string, FunctionNode> functions = new Dictionary<string, FunctionNode>();
+ private TreeNode parent;
+ private int column;
+ private int line;
+
+ public TreeNode()
+ {
+ }
+
+ public TreeNode(TreeNode parent)
+ {
+ this.parent = parent;
+ parent.AddChild(this);
+ }
+
+ internal void CopyFunctionsFrom(TreeNode node)
+ {
+ foreach(KeyValuePair<string, FunctionNode> function in node.Functions) {
+ RegisterFunction(function.Key, function.Value);
+ }
+ }
+
+ internal void RegisterFunction(string name, object value)
+ {
+ if(functions.ContainsKey(name)) {
+ functions[name] = new FunctionNode(name, value);
+ } else {
+ functions.Add(name, new FunctionNode(name, value));
+ }
+ }
+
+ internal void RegisterFunction(string name, FunctionNode function)
+ {
+ if(functions.ContainsKey(name)) {
+ functions[name] = function;
+ } else {
+ functions.Add(name, function);
+ }
+ }
+
+ public TreeNode Flatten()
+ {
+ TreeNode result_node = new TreeNode();
+ Flatten(result_node, this);
+
+ return result_node.ChildCount == 1 ? result_node.Children[0] : result_node;
+ }
+
+ private void Flatten(TreeNode result_node, TreeNode node)
+ {
+ if(node == null) {
+ return;
+ }
+
+ if(!node.HasChildren && !(node is VoidLiteral)) {
+ result_node.AddChild(node);
+ return;
+ }
+
+ foreach(TreeNode child_node in node.Children) {
+ Flatten(result_node, child_node);
+ }
+ }
+
+ public void AddChild(TreeNode child)
+ {
+ child.Parent = this;
+ children.Add(child);
+ }
+
+ public TreeNode Parent {
+ get { return parent; }
+ set { parent = value; }
+ }
+
+ public int ChildCount {
+ get { return children.Count; }
+ }
+
+ public bool HasChildren {
+ get { return ChildCount > 0; }
+ }
+
+ public int Line {
+ get { return line; }
+ set { line = value; }
+ }
+
+ public int Column {
+ get { return column; }
+ set { column = value; }
+ }
+
+ public List<TreeNode> Children {
+ get { return children; }
+ }
+
+ public IDictionary<string, FunctionNode> Functions {
+ get { return functions; }
+ }
+
+ public int FunctionCount {
+ get { return functions.Count; }
+ }
+
+ public bool Empty {
+ get { return ChildCount == 0 && !(this is LiteralNodeBase) && !(this is FunctionNode); }
+ }
+
+ public void Dump()
+ {
+ DumpTree(this);
+ }
+
+ public TreeNode FindRootNode()
+ {
+ TreeNode shift_node = this;
+
+ while(shift_node.Parent != null) {
+ shift_node = shift_node.Parent;
+ }
+
+ return shift_node;
+ }
+
+ public static void DumpTree(TreeNode node)
+ {
+ DumpTree(node, 0);
+ }
+
+ private static void DumpTree(TreeNode node, int depth)
+ {
+ if(node is LiteralNodeBase || node is FunctionNode) {
+ PrintIndent(depth, node);
+ } else if(node != null) {
+ int i = 0;
+ Console.Write("{0}+ [", String.Empty.PadLeft(depth * 2, ' '));
+ foreach(KeyValuePair<string, FunctionNode> function in node.Functions) {
+ Console.Write("{0}{1}", function.Key, i++ < node.FunctionCount - 1 ? ", " : String.Empty);
+ }
+ Console.WriteLine("]");
+ foreach(TreeNode child in node.Children) {
+ DumpTree(child, depth + 1);
+ }
+ }
+ }
+
+ private static void PrintIndent(int depth, TreeNode node)
+ {
+ Console.Write(String.Empty.PadLeft(depth * 2, ' '));
+
+ if(node is FunctionNode) {
+ Console.WriteLine((node as FunctionNode).Function);
+ } else {
+ Console.WriteLine(node);
+ }
+ }
+ }
+}
diff --git a/lib/Hyena/src/Hyena/Hyena.SExpEngine/UtilityFunctionSet.cs b/lib/Hyena/src/Hyena/Hyena.SExpEngine/UtilityFunctionSet.cs
new file mode 100644
index 0000000..cf576b8
--- /dev/null
+++ b/lib/Hyena/src/Hyena/Hyena.SExpEngine/UtilityFunctionSet.cs
@@ -0,0 +1,69 @@
+//
+// UtilityFunctionSet.cs
+//
+// Author:
+// Aaron Bockover <abockover at novell.com>
+//
+// Copyright (C) 2007-2008 Novell, Inc.
+//
+// Permission is hereby granted, free of charge, to any person obtaining
+// a copy of this software and associated documentation files (the
+// "Software"), to deal in the Software without restriction, including
+// without limitation the rights to use, copy, modify, merge, publish,
+// distribute, sublicense, and/or sell copies of the Software, and to
+// permit persons to whom the Software is furnished to do so, subject to
+// the following conditions:
+//
+// The above copyright notice and this permission notice shall be
+// included in all copies or substantial portions of the Software.
+//
+// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
+// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
+// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
+// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+//
+
+using System;
+
+namespace Hyena.SExpEngine
+{
+ public class UtilityFunctionSet : FunctionSet
+ {
+ [Function("print")]
+ public virtual TreeNode OnPrint(TreeNode [] args)
+ {
+ if(args.Length != 1) {
+ throw new ArgumentException("print must have only one argument");
+ }
+
+ Console.WriteLine(Evaluate(args[0]));
+
+ return new VoidLiteral();
+ }
+
+ [Function("print-type")]
+ public virtual TreeNode OnPrintType(TreeNode [] args)
+ {
+ if(args.Length != 1) {
+ throw new ArgumentException("print-type must have only one argument");
+ }
+
+ Console.WriteLine(Evaluate(args[0]).GetType());
+
+ return new VoidLiteral();
+ }
+
+ [Function("dump")]
+ public virtual TreeNode OnDump(TreeNode [] args)
+ {
+ foreach(TreeNode arg in args) {
+ Evaluate(arg).Dump();
+ }
+
+ return new VoidLiteral();
+ }
+ }
+}
diff --git a/lib/Hyena/src/Hyena/Hyena/ApplicationContext.cs b/lib/Hyena/src/Hyena/Hyena/ApplicationContext.cs
new file mode 100644
index 0000000..c215028
--- /dev/null
+++ b/lib/Hyena/src/Hyena/Hyena/ApplicationContext.cs
@@ -0,0 +1,114 @@
+//
+// ApplicationContext.cs
+//
+// Author:
+// Aaron Bockover <abockover at novell.com>
+//
+// Copyright (C) 2007 Novell, Inc.
+//
+// Permission is hereby granted, free of charge, to any person obtaining
+// a copy of this software and associated documentation files (the
+// "Software"), to deal in the Software without restriction, including
+// without limitation the rights to use, copy, modify, merge, publish,
+// distribute, sublicense, and/or sell copies of the Software, and to
+// permit persons to whom the Software is furnished to do so, subject to
+// the following conditions:
+//
+// The above copyright notice and this permission notice shall be
+// included in all copies or substantial portions of the Software.
+//
+// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
+// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
+// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
+// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+//
+
+using System;
+using System.Text;
+using System.Runtime.InteropServices;
+
+using Hyena.CommandLine;
+
+namespace Hyena
+{
+ public delegate void InvokeHandler ();
+
+ public static class ApplicationContext
+ {
+ public static readonly DateTime StartedAt = DateTime.Now;
+
+ static ApplicationContext ()
+ {
+ Log.Debugging = Debugging;
+ }
+
+ private static CommandLineParser command_line = new CommandLineParser ();
+ public static CommandLineParser CommandLine {
+ set { command_line = value; }
+ get { return command_line; }
+ }
+
+ private static Layout command_line_layout;
+ public static Layout CommandLineLayout {
+ get { return command_line_layout; }
+ set { command_line_layout = value; }
+ }
+
+ private static bool? debugging = null;
+ public static bool Debugging {
+ get {
+ if (debugging == null) {
+ debugging = CommandLine.Contains ("debug");
+ debugging |= CommandLine.Contains ("debug-sql");
+ debugging |= EnvironmentIsSet ("BANSHEE_DEBUG");
+ }
+
+ return debugging.Value;
+ }
+ }
+
+ public static bool EnvironmentIsSet (string env)
+ {
+ return !String.IsNullOrEmpty (Environment.GetEnvironmentVariable (env));
+ }
+
+ public static System.Globalization.CultureInfo InternalCultureInfo {
+ get { return System.Globalization.CultureInfo.InvariantCulture; }
+ }
+
+ [DllImport ("libc")] // Linux
+ private static extern int prctl (int option, byte [] arg2, IntPtr arg3, IntPtr arg4, IntPtr arg5);
+
+ [DllImport ("libc")] // BSD
+ private static extern void setproctitle (byte [] fmt, byte [] str_arg);
+
+ private static void SetProcessName (string name)
+ {
+ if (Environment.OSVersion.Platform != PlatformID.Unix) {
+ return;
+ }
+
+ try {
+ if (prctl (15 /* PR_SET_NAME */, Encoding.ASCII.GetBytes (name + "\0"),
+ IntPtr.Zero, IntPtr.Zero, IntPtr.Zero) != 0) {
+ throw new ApplicationException ("Error setting process name: " +
+ Mono.Unix.Native.Stdlib.GetLastError ());
+ }
+ } catch (EntryPointNotFoundException) {
+ setproctitle (Encoding.ASCII.GetBytes ("%s\0"),
+ Encoding.ASCII.GetBytes (name + "\0"));
+ }
+ }
+
+ public static void TrySetProcessName (string name)
+ {
+ try {
+ SetProcessName (name);
+ } catch {
+ }
+ }
+ }
+}
diff --git a/lib/Hyena/src/Hyena/Hyena/ConsoleCrayon.cs b/lib/Hyena/src/Hyena/Hyena/ConsoleCrayon.cs
new file mode 100644
index 0000000..c55dcd3
--- /dev/null
+++ b/lib/Hyena/src/Hyena/Hyena/ConsoleCrayon.cs
@@ -0,0 +1,251 @@
+//
+// ConsoleCrayon.cs
+//
+// Author:
+// Aaron Bockover <abockover at novell.com>
+//
+// Copyright (C) 2008 Novell, Inc.
+//
+// Permission is hereby granted, free of charge, to any person obtaining
+// a copy of this software and associated documentation files (the
+// "Software"), to deal in the Software without restriction, including
+// without limitation the rights to use, copy, modify, merge, publish,
+// distribute, sublicense, and/or sell copies of the Software, and to
+// permit persons to whom the Software is furnished to do so, subject to
+// the following conditions:
+//
+// The above copyright notice and this permission notice shall be
+// included in all copies or substantial portions of the Software.
+//
+// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
+// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
+// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
+// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+//
+
+using System;
+
+namespace Hyena
+{
+ public static class ConsoleCrayon
+ {
+
+#region Public API
+
+ private static ConsoleColor foreground_color;
+ public static ConsoleColor ForegroundColor {
+ get { return foreground_color; }
+ set {
+ foreground_color = value;
+ SetColor (foreground_color, true);
+ }
+ }
+
+ private static ConsoleColor background_color;
+ public static ConsoleColor BackgroundColor {
+ get { return background_color; }
+ set {
+ background_color = value;
+ SetColor (background_color, false);
+ }
+ }
+
+ public static void ResetColor ()
+ {
+ if (XtermColors) {
+ Console.Write (GetAnsiResetControlCode ());
+ } else if (Environment.OSVersion.Platform != PlatformID.Unix && !RuntimeIsMono) {
+ Console.ResetColor ();
+ }
+ }
+
+ private static void SetColor (ConsoleColor color, bool isForeground)
+ {
+ if (color < ConsoleColor.Black || color > ConsoleColor.White) {
+ throw new ArgumentOutOfRangeException ("color", "Not a ConsoleColor value.");
+ }
+
+ if (XtermColors) {
+ Console.Write (GetAnsiColorControlCode (color, isForeground));
+ } else if (Environment.OSVersion.Platform != PlatformID.Unix && !RuntimeIsMono) {
+ if (isForeground) {
+ Console.ForegroundColor = color;
+ } else {
+ Console.BackgroundColor = color;
+ }
+ }
+ }
+
+#endregion
+
+#region Ansi/VT Code Calculation
+
+ // Modified from Mono's System.TermInfoDriver
+ // License: MIT/X11
+ // Authors: Gonzalo Paniagua Javier <gonzalo at ximian.com>
+ // (C) 2005-2006 Novell, Inc <http://www.novell.com>
+
+ private static int TranslateColor (ConsoleColor desired, out bool light)
+ {
+ light = false;
+ switch (desired) {
+ // Dark colors
+ case ConsoleColor.Black: return 0;
+ case ConsoleColor.DarkRed: return 1;
+ case ConsoleColor.DarkGreen: return 2;
+ case ConsoleColor.DarkYellow: return 3;
+ case ConsoleColor.DarkBlue: return 4;
+ case ConsoleColor.DarkMagenta: return 5;
+ case ConsoleColor.DarkCyan: return 6;
+ case ConsoleColor.Gray: return 7;
+
+ // Light colors
+ case ConsoleColor.DarkGray: light = true; return 0;
+ case ConsoleColor.Red: light = true; return 1;
+ case ConsoleColor.Green: light = true; return 2;
+ case ConsoleColor.Yellow: light = true; return 3;
+ case ConsoleColor.Blue: light = true; return 4;
+ case ConsoleColor.Magenta: light = true; return 5;
+ case ConsoleColor.Cyan: light = true; return 6;
+ case ConsoleColor.White: default: light = true; return 7;
+ }
+ }
+
+ private static string GetAnsiColorControlCode (ConsoleColor color, bool isForeground)
+ {
+ // lighter fg colours are 90 -> 97 rather than 30 -> 37
+ // lighter bg colours are 100 -> 107 rather than 40 -> 47
+ bool light;
+ int code = TranslateColor (color, out light) + (isForeground ? 30 : 40) + (light ? 60 : 0);
+ return String.Format ("\x001b[{0}m", code);
+ }
+
+ private static string GetAnsiResetControlCode ()
+ {
+ return "\x001b[0m";
+ }
+
+#endregion
+
+#region xterm Detection
+
+ private static bool? xterm_colors = null;
+ public static bool XtermColors {
+ get {
+ if (xterm_colors == null) {
+ DetectXtermColors ();
+ }
+
+ return xterm_colors.Value;
+ }
+ }
+
+ [System.Runtime.InteropServices.DllImport ("libc", EntryPoint="isatty")]
+ private extern static int _isatty (int fd);
+
+ private static bool isatty (int fd)
+ {
+ try {
+ return _isatty (fd) == 1;
+ } catch {
+ return false;
+ }
+ }
+
+ private static void DetectXtermColors ()
+ {
+ bool _xterm_colors = false;
+
+ switch (Environment.GetEnvironmentVariable ("TERM")) {
+ case "xterm":
+ case "rxvt":
+ case "rxvt-unicode":
+ if (Environment.GetEnvironmentVariable ("COLORTERM") != null) {
+ _xterm_colors = true;
+ }
+ break;
+ case "xterm-color":
+ _xterm_colors = true;
+ break;
+ }
+
+ xterm_colors = _xterm_colors && isatty (1) && isatty (2);
+ }
+
+#endregion
+
+#region Runtime Detection
+
+ private static bool? runtime_is_mono;
+ public static bool RuntimeIsMono {
+ get {
+ if (runtime_is_mono == null) {
+ runtime_is_mono = Type.GetType ("System.MonoType") != null;
+ }
+
+ return runtime_is_mono.Value;
+ }
+ }
+
+#endregion
+
+#region Tests
+
+ public static void Test ()
+ {
+ TestSelf ();
+ Console.WriteLine ();
+ TestAnsi ();
+ Console.WriteLine ();
+ TestRuntime ();
+ }
+
+ private static void TestSelf ()
+ {
+ Console.WriteLine ("==SELF TEST==");
+ foreach (ConsoleColor color in Enum.GetValues (typeof (ConsoleColor))) {
+ ForegroundColor = color;
+ Console.Write (color);
+ ResetColor ();
+ Console.Write (" :: ");
+ BackgroundColor = color;
+ Console.Write (color);
+ ResetColor ();
+ Console.WriteLine ();
+ }
+ }
+
+ private static void TestAnsi ()
+ {
+ Console.WriteLine ("==ANSI TEST==");
+ foreach (ConsoleColor color in Enum.GetValues (typeof (ConsoleColor))) {
+ string color_code_fg = GetAnsiColorControlCode (color, true);
+ string color_code_bg = GetAnsiColorControlCode (color, false);
+ Console.Write ("{0}{1}: {2}{3} :: {4}{1}: {5}{3}", color_code_fg, color, color_code_fg.Substring (2),
+ GetAnsiResetControlCode (), color_code_bg, color_code_bg.Substring (2));
+ Console.WriteLine ();
+ }
+ }
+
+ private static void TestRuntime ()
+ {
+ Console.WriteLine ("==RUNTIME TEST==");
+ foreach (ConsoleColor color in Enum.GetValues (typeof (ConsoleColor))) {
+ Console.ForegroundColor = color;
+ Console.Write (color);
+ Console.ResetColor ();
+ Console.Write (" :: ");
+ Console.BackgroundColor = color;
+ Console.Write (color);
+ Console.ResetColor ();
+ Console.WriteLine ();
+ }
+ }
+
+#endregion
+
+ }
+}
diff --git a/lib/Hyena/src/Hyena/Hyena/CryptoUtil.cs b/lib/Hyena/src/Hyena/Hyena/CryptoUtil.cs
new file mode 100644
index 0000000..dbc2039
--- /dev/null
+++ b/lib/Hyena/src/Hyena/Hyena/CryptoUtil.cs
@@ -0,0 +1,87 @@
+//
+// CryptoUtil.cs
+//
+// Author:
+// Aaron Bockover <abockover at novell.com>
+//
+// Copyright (C) 2008 Novell, Inc.
+//
+// Permission is hereby granted, free of charge, to any person obtaining
+// a copy of this software and associated documentation files (the
+// "Software"), to deal in the Software without restriction, including
+// without limitation the rights to use, copy, modify, merge, publish,
+// distribute, sublicense, and/or sell copies of the Software, and to
+// permit persons to whom the Software is furnished to do so, subject to
+// the following conditions:
+//
+// The above copyright notice and this permission notice shall be
+// included in all copies or substantial portions of the Software.
+//
+// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
+// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
+// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
+// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+//
+
+using System;
+using System.IO;
+using System.Text;
+using System.Text.RegularExpressions;
+using System.Security.Cryptography;
+
+namespace Hyena
+{
+ public static class CryptoUtil
+ {
+ // A-Z is ignored on purpose
+ private static Regex md5_regex = new Regex ("^[a-f0-9]{32}$", RegexOptions.Compiled);
+ private static MD5 md5 = MD5.Create ();
+
+ public static bool IsMd5Encoded (string text)
+ {
+ return text == null || text.Length != 32 ? false : md5_regex.IsMatch (text);
+ }
+
+ public static string Md5Encode (string text)
+ {
+ return Md5Encode (text, Encoding.ASCII);
+ }
+
+ public static string Md5Encode (string text, Encoding encoding)
+ {
+ if (String.IsNullOrEmpty (text)) {
+ return String.Empty;
+ }
+
+ byte [] hash;
+ lock (md5) {
+ hash = md5.ComputeHash (encoding.GetBytes (text));
+ }
+
+ return ToHex (hash);
+ }
+
+ public static string Md5EncodeStream (Stream stream)
+ {
+ byte [] hash;
+ lock (md5) {
+ hash = md5.ComputeHash (stream);
+ }
+
+ return ToHex (hash);
+ }
+
+ private static string ToHex (byte [] hash)
+ {
+ StringBuilder shash = new StringBuilder ();
+ for (int i = 0; i < hash.Length; i++) {
+ shash.Append (hash[i].ToString ("x2"));
+ }
+
+ return shash.ToString ();
+ }
+ }
+}
diff --git a/lib/Hyena/src/Hyena/Hyena/DateTimeUtil.cs b/lib/Hyena/src/Hyena/Hyena/DateTimeUtil.cs
new file mode 100644
index 0000000..4b4b46a
--- /dev/null
+++ b/lib/Hyena/src/Hyena/Hyena/DateTimeUtil.cs
@@ -0,0 +1,87 @@
+//
+// Utilities.cs
+//
+// Author:
+// Aaron Bockover <abockover at novell.com>
+//
+// Copyright (C) 2007 Novell, Inc.
+//
+// Permission is hereby granted, free of charge, to any person obtaining
+// a copy of this software and associated documentation files (the
+// "Software"), to deal in the Software without restriction, including
+// without limitation the rights to use, copy, modify, merge, publish,
+// distribute, sublicense, and/or sell copies of the Software, and to
+// permit persons to whom the Software is furnished to do so, subject to
+// the following conditions:
+//
+// The above copyright notice and this permission notice shall be
+// included in all copies or substantial portions of the Software.
+//
+// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
+// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
+// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
+// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+//
+
+using System;
+using System.Globalization;
+
+namespace Hyena
+{
+ public class DateTimeUtil
+ {
+ // FIXME I don't think having a local-unix-epoch makes any sense, I think we should be using
+ // all UTC values. Depending on the time of year in daylight savings timezones, the
+ // local-seconds-since-epoch value will differ, which will cause errors, no?
+ public static readonly DateTime LocalUnixEpoch = new DateTime (1970, 1, 1).ToLocalTime ();
+
+ public static DateTime ToDateTime (long time)
+ {
+ return FromTimeT (time);
+ }
+
+ public static long FromDateTime (DateTime time)
+ {
+ return ToTimeT (time);
+ }
+
+ private static long super_ugly_min_hack = -15768000000; // 500 yrs before epoch...ewww
+ public static DateTime FromTimeT (long time)
+ {
+ return (time <= super_ugly_min_hack) ? DateTime.MinValue : LocalUnixEpoch.AddSeconds (time);
+ }
+
+ public static long ToTimeT (DateTime time)
+ {
+ return (long)time.Subtract (LocalUnixEpoch).TotalSeconds;
+ }
+
+ public static string FormatDuration (long time) {
+ return FormatDuration (TimeSpan.FromSeconds (time));
+ }
+
+ public static string FormatDuration (TimeSpan time) {
+ return FormatDuration (time.Hours, time.Minutes, time.Seconds);
+ }
+
+ public static string FormatDuration (int hours, int minutes, int seconds) {
+ return (hours > 0 ?
+ String.Format ("{0}:{1:00}:{2:00}", hours, minutes, seconds) :
+ String.Format ("{0}:{1:00}", minutes, seconds));
+ }
+
+ const string INVARIANT_FMT = "yyyy-MM-dd HH:mm:ss.fff zzz";
+ public static string ToInvariantString (DateTime dt)
+ {
+ return dt.ToString (INVARIANT_FMT, CultureInfo.InvariantCulture);
+ }
+
+ public static bool TryParseInvariant (string str, out DateTime dt)
+ {
+ return DateTime.TryParseExact (str, INVARIANT_FMT, CultureInfo.InvariantCulture, DateTimeStyles.None, out dt);
+ }
+ }
+}
\ No newline at end of file
diff --git a/lib/Hyena/src/Hyena/Hyena/Delegates.cs b/lib/Hyena/src/Hyena/Hyena/Delegates.cs
new file mode 100644
index 0000000..667220d
--- /dev/null
+++ b/lib/Hyena/src/Hyena/Hyena/Delegates.cs
@@ -0,0 +1,32 @@
+//
+// Delegates.cs
+//
+// Author:
+// Aaron Bockover <abockover at novell.com>
+//
+// Copyright (C) 2008 Novell, Inc.
+//
+// Permission is hereby granted, free of charge, to any person obtaining
+// a copy of this software and associated documentation files (the
+// "Software"), to deal in the Software without restriction, including
+// without limitation the rights to use, copy, modify, merge, publish,
+// distribute, sublicense, and/or sell copies of the Software, and to
+// permit persons to whom the Software is furnished to do so, subject to
+// the following conditions:
+//
+// The above copyright notice and this permission notice shall be
+// included in all copies or substantial portions of the Software.
+//
+// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
+// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
+// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
+// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+//
+
+namespace Hyena
+{
+ public delegate void Action ();
+}
diff --git a/lib/Hyena/src/Hyena/Hyena/EventArgs.cs b/lib/Hyena/src/Hyena/Hyena/EventArgs.cs
new file mode 100644
index 0000000..7ac9ccc
--- /dev/null
+++ b/lib/Hyena/src/Hyena/Hyena/EventArgs.cs
@@ -0,0 +1,63 @@
+//
+// EventArgs.cs
+//
+// Author:
+// Alexander Kojevnikov <alexander at kojevnikov.com>
+//
+// Copyright (C) 2009-2010 Alexander Kojevnikov
+//
+// Permission is hereby granted, free of charge, to any person obtaining
+// a copy of this software and associated documentation files (the
+// "Software"), to deal in the Software without restriction, including
+// without limitation the rights to use, copy, modify, merge, publish,
+// distribute, sublicense, and/or sell copies of the Software, and to
+// permit persons to whom the Software is furnished to do so, subject to
+// the following conditions:
+//
+// The above copyright notice and this permission notice shall be
+// included in all copies or substantial portions of the Software.
+//
+// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
+// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
+// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
+// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+//
+
+using System;
+
+namespace Hyena
+{
+ public class EventArgs<T> : System.EventArgs
+ {
+ private readonly T value;
+
+ public EventArgs (T value)
+ {
+ this.value = value;
+ }
+
+ public T Value {
+ get { return value; }
+ }
+ }
+
+ public static class EventExtensions
+ {
+ public static void SafeInvoke<T> (this T @event, params object[] args) where T : class
+ {
+ var multicast = @event as MulticastDelegate;
+ if (multicast != null) {
+ foreach (var handler in multicast.GetInvocationList ()) {
+ try {
+ handler.DynamicInvoke (args);
+ } catch (Exception e) {
+ Log.Exception (e);
+ }
+ }
+ }
+ }
+ }
+}
diff --git a/lib/Hyena/src/Hyena/Hyena/IUndoAction.cs b/lib/Hyena/src/Hyena/Hyena/IUndoAction.cs
new file mode 100644
index 0000000..c5906fb
--- /dev/null
+++ b/lib/Hyena/src/Hyena/Hyena/IUndoAction.cs
@@ -0,0 +1,38 @@
+//
+// IUndoAction.cs
+//
+// Author:
+// Aaron Bockover <abockover at novell.com>
+//
+// Copyright (C) 2007-2008 Novell, Inc.
+//
+// Permission is hereby granted, free of charge, to any person obtaining
+// a copy of this software and associated documentation files (the
+// "Software"), to deal in the Software without restriction, including
+// without limitation the rights to use, copy, modify, merge, publish,
+// distribute, sublicense, and/or sell copies of the Software, and to
+// permit persons to whom the Software is furnished to do so, subject to
+// the following conditions:
+//
+// The above copyright notice and this permission notice shall be
+// included in all copies or substantial portions of the Software.
+//
+// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
+// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
+// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
+// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+//
+
+namespace Hyena
+{
+ public interface IUndoAction
+ {
+ void Undo ();
+ void Redo ();
+ void Merge (IUndoAction action);
+ bool CanMerge (IUndoAction action);
+ }
+}
diff --git a/lib/Hyena/src/Hyena/Hyena/Log.cs b/lib/Hyena/src/Hyena/Hyena/Log.cs
new file mode 100644
index 0000000..6a925fb
--- /dev/null
+++ b/lib/Hyena/src/Hyena/Hyena/Log.cs
@@ -0,0 +1,417 @@
+//
+// Log.cs
+//
+// Author:
+// Aaron Bockover <abockover at novell.com>
+//
+// Copyright (C) 2005-2007 Novell, Inc.
+//
+// Permission is hereby granted, free of charge, to any person obtaining
+// a copy of this software and associated documentation files (the
+// "Software"), to deal in the Software without restriction, including
+// without limitation the rights to use, copy, modify, merge, publish,
+// distribute, sublicense, and/or sell copies of the Software, and to
+// permit persons to whom the Software is furnished to do so, subject to
+// the following conditions:
+//
+// The above copyright notice and this permission notice shall be
+// included in all copies or substantial portions of the Software.
+//
+// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
+// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
+// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
+// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+//
+
+using System;
+using System.Text;
+using System.Collections.Generic;
+using System.Threading;
+
+namespace Hyena
+{
+ public delegate void LogNotifyHandler (LogNotifyArgs args);
+
+ public class LogNotifyArgs : EventArgs
+ {
+ private LogEntry entry;
+
+ public LogNotifyArgs (LogEntry entry)
+ {
+ this.entry = entry;
+ }
+
+ public LogEntry Entry {
+ get { return entry; }
+ }
+ }
+
+ public enum LogEntryType
+ {
+ Debug,
+ Warning,
+ Error,
+ Information
+ }
+
+ public class LogEntry
+ {
+ private LogEntryType type;
+ private string message;
+ private string details;
+ private DateTime timestamp;
+
+ internal LogEntry (LogEntryType type, string message, string details)
+ {
+ this.type = type;
+ this.message = message;
+ this.details = details;
+ this.timestamp = DateTime.Now;
+ }
+
+ public LogEntryType Type {
+ get { return type; }
+ }
+
+ public string Message {
+ get { return message; }
+ }
+
+ public string Details {
+ get { return details; }
+ }
+
+ public DateTime TimeStamp {
+ get { return timestamp; }
+ }
+ }
+
+ public static class Log
+ {
+ public static event LogNotifyHandler Notify;
+
+ private static Dictionary<uint, DateTime> timers = new Dictionary<uint, DateTime> ();
+ private static uint next_timer_id = 1;
+
+ private static bool debugging = false;
+ public static bool Debugging {
+ get { return debugging; }
+ set { debugging = value; }
+ }
+
+ public static void Commit (LogEntryType type, string message, string details, bool showUser)
+ {
+ if (type == LogEntryType.Debug && !Debugging) {
+ return;
+ }
+
+ if (type != LogEntryType.Information || (type == LogEntryType.Information && !showUser)) {
+ switch (type) {
+ case LogEntryType.Error: ConsoleCrayon.ForegroundColor = ConsoleColor.Red; break;
+ case LogEntryType.Warning: ConsoleCrayon.ForegroundColor = ConsoleColor.DarkYellow; break;
+ case LogEntryType.Information: ConsoleCrayon.ForegroundColor = ConsoleColor.Green; break;
+ case LogEntryType.Debug: ConsoleCrayon.ForegroundColor = ConsoleColor.Blue; break;
+ }
+
+ var thread_name = String.Empty;
+ if (Debugging) {
+ var thread = Thread.CurrentThread;
+ thread_name = String.Format ("{0} ", thread.ManagedThreadId);
+ }
+
+ Console.Write ("[{5}{0} {1:00}:{2:00}:{3:00}.{4:000}]", TypeString (type), DateTime.Now.Hour,
+ DateTime.Now.Minute, DateTime.Now.Second, DateTime.Now.Millisecond, thread_name);
+
+ ConsoleCrayon.ResetColor ();
+
+ if (details != null) {
+ Console.WriteLine (" {0} - {1}", message, details);
+ } else {
+ Console.WriteLine (" {0}", message);
+ }
+ }
+
+ if (showUser) {
+ OnNotify (new LogEntry (type, message, details));
+ }
+ }
+
+ private static string TypeString (LogEntryType type)
+ {
+ switch (type) {
+ case LogEntryType.Debug: return "Debug";
+ case LogEntryType.Warning: return "Warn ";
+ case LogEntryType.Error: return "Error";
+ case LogEntryType.Information: return "Info ";
+ }
+ return null;
+ }
+
+ private static void OnNotify (LogEntry entry)
+ {
+ LogNotifyHandler handler = Notify;
+ if (handler != null) {
+ handler (new LogNotifyArgs (entry));
+ }
+ }
+
+ #region Timer Methods
+
+ public static uint DebugTimerStart (string message)
+ {
+ return TimerStart (message, false);
+ }
+
+ public static uint InformationTimerStart (string message)
+ {
+ return TimerStart (message, true);
+ }
+
+ private static uint TimerStart (string message, bool isInfo)
+ {
+ if (!Debugging && !isInfo) {
+ return 0;
+ }
+
+ if (isInfo) {
+ Information (message);
+ } else {
+ Debug (message);
+ }
+
+ return TimerStart (isInfo);
+ }
+
+ public static uint DebugTimerStart ()
+ {
+ return TimerStart (false);
+ }
+
+ public static uint InformationTimerStart ()
+ {
+ return TimerStart (true);
+ }
+
+ private static uint TimerStart (bool isInfo)
+ {
+ if (!Debugging && !isInfo) {
+ return 0;
+ }
+
+ uint timer_id = next_timer_id++;
+ timers.Add (timer_id, DateTime.Now);
+ return timer_id;
+ }
+
+ public static void DebugTimerPrint (uint id)
+ {
+ if (!Debugging) {
+ return;
+ }
+
+ TimerPrint (id, "Operation duration: {0}", false);
+ }
+
+ public static void DebugTimerPrint (uint id, string message)
+ {
+ if (!Debugging) {
+ return;
+ }
+
+ TimerPrint (id, message, false);
+ }
+
+ public static void InformationTimerPrint (uint id)
+ {
+ TimerPrint (id, "Operation duration: {0}", true);
+ }
+
+ public static void InformationTimerPrint (uint id, string message)
+ {
+ TimerPrint (id, message, true);
+ }
+
+ private static void TimerPrint (uint id, string message, bool isInfo)
+ {
+ if (!Debugging && !isInfo) {
+ return;
+ }
+
+ DateTime finish = DateTime.Now;
+
+ if (!timers.ContainsKey (id)) {
+ return;
+ }
+
+ TimeSpan duration = finish - timers[id];
+ string d_message;
+ if (duration.TotalSeconds < 60) {
+ d_message = duration.TotalSeconds.ToString ();
+ } else {
+ d_message = duration.ToString ();
+ }
+
+ if (isInfo) {
+ InformationFormat (message, d_message);
+ } else {
+ DebugFormat (message, d_message);
+ }
+ }
+
+ #endregion
+
+ #region Public Debug Methods
+
+ public static void Debug (string message, string details)
+ {
+ if (Debugging) {
+ Commit (LogEntryType.Debug, message, details, false);
+ }
+ }
+
+ public static void Debug (string message)
+ {
+ if (Debugging) {
+ Debug (message, null);
+ }
+ }
+
+ public static void DebugFormat (string format, params object [] args)
+ {
+ if (Debugging) {
+ Debug (String.Format (format, args));
+ }
+ }
+
+ #endregion
+
+ #region Public Information Methods
+
+ public static void Information (string message)
+ {
+ Information (message, null);
+ }
+
+ public static void Information (string message, string details)
+ {
+ Information (message, details, false);
+ }
+
+ public static void Information (string message, string details, bool showUser)
+ {
+ Commit (LogEntryType.Information, message, details, showUser);
+ }
+
+ public static void Information (string message, bool showUser)
+ {
+ Information (message, null, showUser);
+ }
+
+ public static void InformationFormat (string format, params object [] args)
+ {
+ Information (String.Format (format, args));
+ }
+
+ #endregion
+
+ #region Public Warning Methods
+
+ public static void Warning (string message)
+ {
+ Warning (message, null);
+ }
+
+ public static void Warning (string message, string details)
+ {
+ Warning (message, details, false);
+ }
+
+ public static void Warning (string message, string details, bool showUser)
+ {
+ Commit (LogEntryType.Warning, message, details, showUser);
+ }
+
+ public static void Warning (string message, bool showUser)
+ {
+ Warning (message, null, showUser);
+ }
+
+ public static void WarningFormat (string format, params object [] args)
+ {
+ Warning (String.Format (format, args));
+ }
+
+ #endregion
+
+ #region Public Error Methods
+
+ public static void Error (string message)
+ {
+ Error (message, null);
+ }
+
+ public static void Error (string message, string details)
+ {
+ Error (message, details, false);
+ }
+
+ public static void Error (string message, string details, bool showUser)
+ {
+ Commit (LogEntryType.Error, message, details, showUser);
+ }
+
+ public static void Error (string message, bool showUser)
+ {
+ Error (message, null, showUser);
+ }
+
+ public static void ErrorFormat (string format, params object [] args)
+ {
+ Error (String.Format (format, args));
+ }
+
+ #endregion
+
+ #region Public Exception Methods
+
+ public static void DebugException (Exception e)
+ {
+ if (Debugging) {
+ Exception (e);
+ }
+ }
+
+ public static void Exception (Exception e)
+ {
+ Exception (null, e);
+ }
+
+ public static void Exception (string message, Exception e)
+ {
+ Stack<Exception> exception_chain = new Stack<Exception> ();
+ StringBuilder builder = new StringBuilder ();
+
+ while (e != null) {
+ exception_chain.Push (e);
+ e = e.InnerException;
+ }
+
+ while (exception_chain.Count > 0) {
+ e = exception_chain.Pop ();
+ builder.AppendFormat ("{0}: {1} (in `{2}')", e.GetType (), e.Message, e.Source).AppendLine ();
+ builder.Append (e.StackTrace);
+ if (exception_chain.Count > 0) {
+ builder.AppendLine ();
+ }
+ }
+
+ // FIXME: We should save these to an actual log file
+ Log.Warning (message ?? "Caught an exception", builder.ToString (), false);
+ }
+
+ #endregion
+ }
+}
diff --git a/lib/Hyena/src/Hyena/Hyena/Paths.cs b/lib/Hyena/src/Hyena/Hyena/Paths.cs
new file mode 100644
index 0000000..1294d3a
--- /dev/null
+++ b/lib/Hyena/src/Hyena/Hyena/Paths.cs
@@ -0,0 +1,253 @@
+//
+// Paths.cs
+//
+// Author:
+// Aaron Bockover <abockover at novell.com>
+// Ruben Vermeersch <ruben at savanne.be>
+//
+// Copyright (C) 2005-2008 Novell, Inc.
+//
+// Permission is hereby granted, free of charge, to any person obtaining
+// a copy of this software and associated documentation files (the
+// "Software"), to deal in the Software without restriction, including
+// without limitation the rights to use, copy, modify, merge, publish,
+// distribute, sublicense, and/or sell copies of the Software, and to
+// permit persons to whom the Software is furnished to do so, subject to
+// the following conditions:
+//
+// The above copyright notice and this permission notice shall be
+// included in all copies or substantial portions of the Software.
+//
+// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
+// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
+// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
+// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+//
+
+using System.IO;
+using System;
+using System.Text;
+
+namespace Hyena
+{
+ public class Paths
+ {
+ public static string GetTempFileName (string dir)
+ {
+ return GetTempFileName (dir, null);
+ }
+
+ public static string GetTempFileName (string dir, string extension)
+ {
+ return GetTempFileName (new DirectoryInfo (dir), extension);
+ }
+
+ public static string GetTempFileName (DirectoryInfo dir, string extension)
+ {
+ string path = null;
+
+ if (dir == null || !dir.Exists) {
+ throw new DirectoryNotFoundException ();
+ }
+
+ do {
+ string guid = Guid.NewGuid ().ToString ();
+ string file = extension == null ? guid : String.Format ("{0}.{1}", guid, extension);
+ path = Path.Combine (dir.FullName, file);
+ } while (File.Exists (path));
+
+ return path;
+ }
+
+ public static string Combine (string first, params string [] components)
+ {
+ if (String.IsNullOrEmpty (first)) {
+ throw new ArgumentException ("First component must not be null or empty", "first");
+ } else if (components == null || components.Length < 1) {
+ throw new ArgumentException ("One or more path components must be provided", "components");
+ }
+
+ string result = first;
+
+ foreach (string component in components) {
+ result = Path.Combine (result, component);
+ }
+
+ return result;
+ }
+
+ public static string FindProgramInPath (string command)
+ {
+ foreach (string path in GetExecPaths ()) {
+ string full_path = Path.Combine (path, command);
+ try {
+ FileInfo info = new FileInfo (full_path);
+ // FIXME: System.IO is super lame, should check for 0755
+ if (info.Exists) {
+ return full_path;
+ }
+ } catch {
+ }
+ }
+
+ return null;
+ }
+
+ private static string [] GetExecPaths ()
+ {
+ string path = Environment.GetEnvironmentVariable ("PATH");
+ if (String.IsNullOrEmpty (path)) {
+ return new string [] { "/bin", "/usr/bin", "/usr/local/bin" };
+ }
+
+ // this is super lame, should handle quoting/escaping
+ return path.Split (':');
+ }
+
+ public static string MakePathRelative (string path, string to)
+ {
+ if (String.IsNullOrEmpty (path) || String.IsNullOrEmpty (to)) {
+ return null;
+ }
+
+ if (Path.IsPathRooted (path) ^ Path.IsPathRooted (to))
+ {
+ // one path is absolute, one path is relative, impossible to compare
+ return null;
+ }
+
+ if (path == to) {
+ return String.Empty;
+ }
+
+ if (to[to.Length - 1] != Path.DirectorySeparatorChar) {
+ to = to + Path.DirectorySeparatorChar;
+ }
+
+ if (path.StartsWith (to))
+ {
+ return path.Substring (to.Length);
+ }
+
+ return BuildRelativePath (path, to);
+ }
+
+ private static string BuildRelativePath (string path, string to)
+ {
+ var toParts = to.Split (Path.DirectorySeparatorChar);
+ var pathParts = path.Split (Path.DirectorySeparatorChar);
+
+ var i = 0;
+ while (i < toParts.Length && i < pathParts.Length && toParts [i] == pathParts [i]) {
+ i++;
+ }
+
+ var relativePath = new StringBuilder ();
+ for (int j = 0; j < toParts.Length - i - 1; j++) {
+ relativePath.Append ("..");
+ relativePath.Append (Path.DirectorySeparatorChar);
+ }
+
+ var required = new string [pathParts.Length - i];
+ for (int j = i; j < pathParts.Length; j++) {
+ required [j - i] = pathParts [j];
+ }
+ relativePath.Append (String.Join (Path.DirectorySeparatorChar.ToString (), required));
+
+ return relativePath.ToString ();
+ }
+
+ public static string ApplicationData {
+ get; private set;
+ }
+
+ public static string ApplicationCache {
+ get; private set;
+ }
+
+ private static string application_name = null;
+
+ public static string ApplicationName {
+ get {
+ if (application_name == null) {
+ throw new ApplicationException ("Paths.ApplicationName must be set first");
+ }
+ return application_name;
+ }
+ set { application_name = value; InitializePaths (); }
+ }
+
+ // This can only happen after ApplicationName is set.
+ private static void InitializePaths ()
+ {
+ ApplicationCache = Path.Combine (XdgBaseDirectorySpec.GetUserDirectory (
+ "XDG_CACHE_HOME", ".cache"), ApplicationName);
+
+ ApplicationData = Path.Combine (Environment.GetFolderPath (
+ Environment.SpecialFolder.ApplicationData), ApplicationName);
+ if (!Directory.Exists (ApplicationData)) {
+ Directory.CreateDirectory (ApplicationData);
+ }
+ }
+
+
+ public static string ExtensionCacheRoot {
+ get { return Path.Combine (ApplicationCache, "extensions"); }
+ }
+
+ public static string SystemTempDir {
+ get { return "/tmp/"; }
+ }
+
+ public static string TempDir {
+ get {
+ string dir = Path.Combine (ApplicationCache, "temp");
+
+ if (File.Exists (dir)) {
+ File.Delete (dir);
+ }
+
+ Directory.CreateDirectory (dir);
+ return dir;
+ }
+ }
+
+ private static string installed_application_prefix = null;
+ public static string InstalledApplicationPrefix {
+ get {
+ if (installed_application_prefix == null) {
+ installed_application_prefix = Path.GetDirectoryName (
+ System.Reflection.Assembly.GetExecutingAssembly ().Location);
+
+ if (Directory.Exists (Paths.Combine (installed_application_prefix, "share", ApplicationName))) {
+ return installed_application_prefix;
+ }
+
+ DirectoryInfo entry_directory = new DirectoryInfo (installed_application_prefix);
+
+ if (entry_directory != null && entry_directory.Parent != null && entry_directory.Parent.Parent != null) {
+ installed_application_prefix = entry_directory.Parent.Parent.FullName;
+ }
+ }
+
+ return installed_application_prefix;
+ }
+ }
+
+ public static string InstalledApplicationDataRoot {
+ get { return Path.Combine (InstalledApplicationPrefix, "share"); }
+ }
+
+ public static string InstalledApplicationData {
+ get { return Path.Combine (InstalledApplicationDataRoot, ApplicationName); }
+ }
+
+ public static string GetInstalledDataDirectory (string path)
+ {
+ return Path.Combine (InstalledApplicationData, path);
+ }
+ }
+}
diff --git a/lib/Hyena/src/Hyena/Hyena/PlatformDetection.cs b/lib/Hyena/src/Hyena/Hyena/PlatformDetection.cs
new file mode 100644
index 0000000..c63b225
--- /dev/null
+++ b/lib/Hyena/src/Hyena/Hyena/PlatformDetection.cs
@@ -0,0 +1,96 @@
+//
+// PlatformUtil.cs
+//
+// Author:
+// Aaron Bockover <abockover at novell.com>
+//
+// Copyright 2010 Novell, Inc.
+//
+// Permission is hereby granted, free of charge, to any person obtaining
+// a copy of this software and associated documentation files (the
+// "Software"), to deal in the Software without restriction, including
+// without limitation the rights to use, copy, modify, merge, publish,
+// distribute, sublicense, and/or sell copies of the Software, and to
+// permit persons to whom the Software is furnished to do so, subject to
+// the following conditions:
+//
+// The above copyright notice and this permission notice shall be
+// included in all copies or substantial portions of the Software.
+//
+// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
+// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
+// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
+// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+//
+
+using System;
+using System.Runtime.InteropServices;
+
+namespace Hyena
+{
+ public static class PlatformDetection
+ {
+ public static readonly bool IsMac;
+ public static readonly bool IsWindows;
+ public static readonly bool IsLinux;
+ public static readonly bool IsUnix;
+ public static readonly bool IsMeeGo;
+
+ public static readonly string PosixSystemName;
+ public static readonly string SystemName;
+
+ [DllImport ("libc")]
+ private static extern int uname (IntPtr utsname);
+
+ static PlatformDetection ()
+ {
+ // From http://www.mono-project.com/FAQ:_Technical
+ int p = (int)Environment.OSVersion.Platform;
+ IsUnix = p == 4 || p == 6 || p == 128;
+ IsWindows = p < 4;
+
+ if (IsWindows) {
+ SystemName = "Windows";
+ return;
+ }
+
+ // uname expects a pointer to a utsname structure, but we are
+ // tricky here - this structure's first field is the field we
+ // care about (char sysname []); the size of the structure is
+ // unknown, as it varies on all platforms. Darwin uses only
+ // the five POSIX fields, each 256 bytes, so the total size is
+ // total size is 5 * 256 = 1280 bytes. Arbitrarily using 8192.
+ var utsname = IntPtr.Zero;
+ try {
+ utsname = Marshal.AllocHGlobal (8192);
+ if (uname (utsname) == 0) {
+ PosixSystemName = Marshal.PtrToStringAnsi (utsname);
+ }
+ } catch {
+ } finally {
+ if (utsname != IntPtr.Zero) {
+ Marshal.FreeHGlobal (utsname);
+ }
+ }
+
+ if (PosixSystemName == null) {
+ if (IsUnix) {
+ SystemName = "Unix";
+ }
+ return;
+ }
+
+ switch (PosixSystemName) {
+ case "Darwin": IsMac = true; break;
+ case "Linux": IsLinux = true; break;
+ }
+
+ SystemName = PosixSystemName;
+
+ IsMeeGo = System.IO.File.Exists ("/etc/meego-release");
+ }
+ }
+}
diff --git a/lib/Hyena/src/Hyena/Hyena/StringUtil.cs b/lib/Hyena/src/Hyena/Hyena/StringUtil.cs
new file mode 100644
index 0000000..232641e
--- /dev/null
+++ b/lib/Hyena/src/Hyena/Hyena/StringUtil.cs
@@ -0,0 +1,341 @@
+//
+// StringUtil.cs
+//
+// Author:
+// Aaron Bockover <abockover at novell.com>
+//
+// Copyright (C) 2006-2008 Novell, Inc.
+//
+// Permission is hereby granted, free of charge, to any person obtaining
+// a copy of this software and associated documentation files (the
+// "Software"), to deal in the Software without restriction, including
+// without limitation the rights to use, copy, modify, merge, publish,
+// distribute, sublicense, and/or sell copies of the Software, and to
+// permit persons to whom the Software is furnished to do so, subject to
+// the following conditions:
+//
+// The above copyright notice and this permission notice shall be
+// included in all copies or substantial portions of the Software.
+//
+// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
+// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
+// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
+// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+//
+
+using System;
+using System.Collections.Generic;
+using System.IO;
+using System.Text;
+using System.Globalization;
+using System.Text.RegularExpressions;
+
+namespace Hyena
+{
+ public static class StringUtil
+ {
+ private static CompareOptions compare_options =
+ CompareOptions.IgnoreCase | CompareOptions.IgnoreNonSpace |
+ CompareOptions.IgnoreKanaType | CompareOptions.IgnoreWidth;
+
+ public static int RelaxedIndexOf (string haystack, string needle)
+ {
+ return CultureInfo.CurrentCulture.CompareInfo.IndexOf (haystack, needle, compare_options);
+ }
+
+ public static int RelaxedCompare (string a, string b)
+ {
+ if (a == null && b == null) {
+ return 0;
+ } else if (a != null && b == null) {
+ return 1;
+ } else if (a == null && b != null) {
+ return -1;
+ }
+
+ int a_offset = a.StartsWith ("the ") ? 4 : 0;
+ int b_offset = b.StartsWith ("the ") ? 4 : 0;
+
+ return CultureInfo.CurrentCulture.CompareInfo.Compare (a, a_offset, a.Length - a_offset,
+ b, b_offset, b.Length - b_offset, compare_options);
+ }
+
+ public static string CamelCaseToUnderCase (string s)
+ {
+ return CamelCaseToUnderCase (s, '_');
+ }
+
+ private static Regex camelcase = new Regex ("([A-Z]{1}[a-z]+)", RegexOptions.Compiled);
+ public static string CamelCaseToUnderCase (string s, char underscore)
+ {
+ if (String.IsNullOrEmpty (s)) {
+ return null;
+ }
+
+ StringBuilder undercase = new StringBuilder ();
+ string [] tokens = camelcase.Split (s);
+
+ for (int i = 0; i < tokens.Length; i++) {
+ if (tokens[i] == String.Empty) {
+ continue;
+ }
+
+ undercase.Append (tokens[i].ToLower (System.Globalization.CultureInfo.InvariantCulture));
+ if (i < tokens.Length - 2) {
+ undercase.Append (underscore);
+ }
+ }
+
+ return undercase.ToString ();
+ }
+
+ public static string UnderCaseToCamelCase (string s)
+ {
+ if (String.IsNullOrEmpty (s)) {
+ return null;
+ }
+
+ StringBuilder builder = new StringBuilder ();
+
+ for (int i = 0, n = s.Length, b = -1; i < n; i++) {
+ if (b < 0 && s[i] != '_') {
+ builder.Append (Char.ToUpper (s[i]));
+ b = i;
+ } else if (s[i] == '_' && i + 1 < n && s[i + 1] != '_') {
+ if (builder.Length > 0 && Char.IsUpper (builder[builder.Length - 1])) {
+ builder.Append (Char.ToLower (s[i + 1]));
+ } else {
+ builder.Append (Char.ToUpper (s[i + 1]));
+ }
+ i++;
+ b = i;
+ } else if (s[i] != '_') {
+ builder.Append (Char.ToLower (s[i]));
+ b = i;
+ }
+ }
+
+ return builder.ToString ();
+ }
+
+ public static string RemoveNewlines (string input)
+ {
+ if (input != null) {
+ return input.Replace ("\r\n", String.Empty).Replace ("\n", String.Empty);
+ }
+ return null;
+ }
+
+ private static Regex tags = new Regex ("<[^>]+>", RegexOptions.Compiled | RegexOptions.Multiline);
+ public static string RemoveHtml (string input)
+ {
+ if (input == null) {
+ return input;
+ }
+
+ return tags.Replace (input, String.Empty);
+ }
+
+ public static string DoubleToTenthsPrecision (double num)
+ {
+ return DoubleToTenthsPrecision (num, false);
+ }
+
+ public static string DoubleToTenthsPrecision (double num, bool always_decimal)
+ {
+ return DoubleToTenthsPrecision (num, always_decimal, NumberFormatInfo.CurrentInfo);
+ }
+
+ public static string DoubleToTenthsPrecision (double num, bool always_decimal, IFormatProvider provider)
+ {
+ num = Math.Round (num, 1, MidpointRounding.ToEven);
+ return String.Format (provider, !always_decimal && num == (int)num ? "{0:N0}" : "{0:N1}", num);
+ }
+
+ // This method helps us pluralize doubles. Probably a horrible i18n idea.
+ public static int DoubleToPluralInt (double num)
+ {
+ if (num == (int)num)
+ return (int)num;
+ else
+ return (int)num + 1;
+ }
+
+ // A mapping of non-Latin characters to be considered the same as
+ // a Latin equivalent.
+ private static Dictionary<char, char> BuildSpecialCases ()
+ {
+ Dictionary<char, char> dict = new Dictionary<char, char> ();
+ dict['\u00f8'] = 'o';
+ dict['\u0142'] = 'l';
+ return dict;
+ }
+ private static Dictionary<char, char> searchkey_special_cases = BuildSpecialCases ();
+
+ // Removes accents from Latin characters, and some kinds of punctuation.
+ public static string SearchKey (string val)
+ {
+ if (String.IsNullOrEmpty (val)) {
+ return val;
+ }
+
+ val = val.ToLower ();
+ StringBuilder sb = new StringBuilder ();
+ UnicodeCategory category;
+ bool previous_was_letter = false;
+ bool got_space = false;
+
+ // Normalizing to KD splits into (base, combining) so we can check for letters
+ // and then strip off any NonSpacingMarks following them
+ foreach (char orig_c in val.TrimStart ().Normalize (NormalizationForm.FormKD)) {
+
+ // Check for a special case *before* whitespace. This way, if
+ // a special case is ever added that maps to ' ' or '\t', it
+ // won't cause a run of whitespace in the result.
+ char c = orig_c;
+ if (searchkey_special_cases.ContainsKey (c)) {
+ c = searchkey_special_cases[c];
+ }
+
+ if (c == ' ' || c == '\t') {
+ got_space = true;
+ continue;
+ }
+
+ category = Char.GetUnicodeCategory (c);
+ if (category == UnicodeCategory.OtherPunctuation) {
+ // Skip punctuation
+ } else if (!(previous_was_letter && category == UnicodeCategory.NonSpacingMark)) {
+ if (got_space) {
+ sb.Append (" ");
+ got_space = false;
+ }
+ sb.Append (c);
+ }
+
+ // Can ignore A-Z because we've already lowercased the char
+ previous_was_letter = Char.IsLetter (c);
+ }
+
+ string result = sb.ToString ();
+ try {
+ result = result.Normalize (NormalizationForm.FormKC);
+ }
+ catch {
+ // FIXME: work-around, see http://bugzilla.gnome.org/show_bug.cgi?id=590478
+ }
+ return result;
+ }
+
+ private static Regex invalid_path_regex = BuildInvalidPathRegex ();
+
+ private static Regex BuildInvalidPathRegex ()
+ {
+ char [] invalid_path_characters = new char [] {
+ // Control characters: there's no reason to ever have one of these in a track name anyway,
+ // and they're invalid in all Windows filesystems.
+ '\x00', '\x01', '\x02', '\x03', '\x04', '\x05', '\x06', '\x07',
+ '\x08', '\x09', '\x0A', '\x0B', '\x0C', '\x0D', '\x0E', '\x0F',
+ '\x10', '\x11', '\x12', '\x13', '\x14', '\x15', '\x16', '\x17',
+ '\x18', '\x19', '\x1A', '\x1B', '\x1C', '\x1D', '\x1E', '\x1F',
+
+ // Invalid in FAT32 / NTFS: " \ / : * | ? < >
+ // Invalid in HFS :
+ // Invalid in ext3 /
+ '"', '\\', '/', ':', '*', '|', '?', '<', '>'
+ };
+
+ string regex_str = "[";
+ for (int i = 0; i < invalid_path_characters.Length; i++) {
+ regex_str += "\\" + invalid_path_characters[i];
+ }
+ regex_str += "]+";
+
+ return new Regex (regex_str, RegexOptions.Compiled);
+ }
+
+ private static CompareInfo culture_compare_info = CultureInfo.CurrentCulture.CompareInfo;
+ public static byte[] SortKey (string orig)
+ {
+ if (orig == null) { return null; }
+ return culture_compare_info.GetSortKey (orig, CompareOptions.IgnoreCase).KeyData;
+ }
+
+ private static readonly char[] escape_path_trim_chars = new char[] {'.', '\x20'};
+ public static string EscapeFilename (string input)
+ {
+ if (input == null)
+ return "";
+
+ // Remove leading and trailing dots and spaces.
+ input = input.Trim (escape_path_trim_chars);
+
+ return invalid_path_regex.Replace (input, "_");
+ }
+
+ public static string EscapePath (string input)
+ {
+ if (input == null)
+ return "";
+
+ // This method should be called before the full path is constructed.
+ if (Path.IsPathRooted (input)) {
+ return input;
+ }
+
+ StringBuilder builder = new StringBuilder ();
+ foreach (string name in input.Split (Path.DirectorySeparatorChar)) {
+ // Escape the directory or the file name.
+ string escaped = EscapeFilename (name);
+ // Skip empty names.
+ if (escaped.Length > 0) {
+ builder.Append (escaped);
+ builder.Append (Path.DirectorySeparatorChar);
+ }
+ }
+
+ // Chop off the last character.
+ if (builder.Length > 0) {
+ builder.Length--;
+ }
+
+ return builder.ToString ();
+ }
+
+ public static string MaybeFallback (string input, string fallback)
+ {
+ string trimmed = input == null ? null : input.Trim ();
+ return String.IsNullOrEmpty (trimmed) ? fallback : trimmed;
+ }
+
+ public static uint SubstringCount (string haystack, string needle)
+ {
+ if (String.IsNullOrEmpty (haystack) || String.IsNullOrEmpty (needle)) {
+ return 0;
+ }
+
+ int position = 0;
+ uint count = 0;
+ while (true) {
+ int index = haystack.IndexOf (needle, position);
+ if (index < 0) {
+ return count;
+ }
+ count++;
+ position = index + 1;
+ }
+ }
+
+ private static readonly char[] escaped_like_chars = new char[] {'\\', '%', '_'};
+ public static string EscapeLike (string s)
+ {
+ if (s.IndexOfAny (escaped_like_chars) != -1) {
+ return s.Replace (@"\", @"\\").Replace ("%", @"\%").Replace ("_", @"\_");
+ }
+ return s;
+ }
+ }
+}
diff --git a/lib/Hyena/src/Hyena/Hyena/Tests/CryptoUtilTests.cs b/lib/Hyena/src/Hyena/Hyena/Tests/CryptoUtilTests.cs
new file mode 100644
index 0000000..b2901b7
--- /dev/null
+++ b/lib/Hyena/src/Hyena/Hyena/Tests/CryptoUtilTests.cs
@@ -0,0 +1,88 @@
+//
+// CryptoUtilTests.cs
+//
+// Author:
+// Aaron Bockover <abockover at novell.com>
+//
+// Copyright (C) 2008 Novell, Inc.
+//
+// Permission is hereby granted, free of charge, to any person obtaining
+// a copy of this software and associated documentation files (the
+// "Software"), to deal in the Software without restriction, including
+// without limitation the rights to use, copy, modify, merge, publish,
+// distribute, sublicense, and/or sell copies of the Software, and to
+// permit persons to whom the Software is furnished to do so, subject to
+// the following conditions:
+//
+// The above copyright notice and this permission notice shall be
+// included in all copies or substantial portions of the Software.
+//
+// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
+// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
+// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
+// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+//
+
+#if ENABLE_TESTS
+
+using System;
+using System.IO;
+using NUnit.Framework;
+using Hyena;
+
+namespace Hyena.Tests
+{
+ [TestFixture]
+ public class CryptoUtilTests
+ {
+ [Test]
+ public void Md5Encode ()
+ {
+ Assert.AreEqual ("ae2b1fca515949e5d54fb22b8ed95575", CryptoUtil.Md5Encode ("testing"));
+ Assert.AreEqual ("", CryptoUtil.Md5Encode (null));
+ Assert.AreEqual ("", CryptoUtil.Md5Encode (""));
+ }
+
+ [Test]
+ public void IsMd5Encoded ()
+ {
+ Assert.IsTrue (CryptoUtil.IsMd5Encoded ("ae2b1fca515949e5d54fb22b8ed95575"));
+ Assert.IsFalse (CryptoUtil.IsMd5Encoded ("abc233"));
+ Assert.IsFalse (CryptoUtil.IsMd5Encoded ("lebowski"));
+ Assert.IsFalse (CryptoUtil.IsMd5Encoded ("ae2b1fca515949e5g54fb22b8ed95575"));
+ Assert.IsFalse (CryptoUtil.IsMd5Encoded (null));
+ Assert.IsFalse (CryptoUtil.IsMd5Encoded (""));
+ }
+
+ [Test]
+ public void Md5EncodeStream ()
+ {
+ var file = Path.GetTempFileName ();
+ var tw = new StreamWriter (file);
+ tw.Write ("testing");
+ tw.Close ();
+
+ var stream = new FileStream (file, FileMode.Open);
+ Assert.AreEqual ("ae2b1fca515949e5d54fb22b8ed95575", CryptoUtil.Md5EncodeStream (stream));
+ stream.Close ();
+
+ File.Delete (file);
+ }
+
+ /*[Test]
+ public void Md5Performance ()
+ {
+ int max = 10000;
+ using (new Timer (String.Format ("Computed {0} MD5 hashes", max))) {
+ for (int i = 0; i < max; i++) {
+ CryptoUtil.Md5Encode ("LkaJSd Flkjdf234234lkj3WlkejewrVlkdf @343434 dsfjk 3497u34 l 2008 lkjdf");
+ }
+ }
+ }*/
+ }
+}
+
+#endif
diff --git a/lib/Hyena/src/Hyena/Hyena/Tests/DateTimeUtilTests.cs b/lib/Hyena/src/Hyena/Hyena/Tests/DateTimeUtilTests.cs
new file mode 100644
index 0000000..b016202
--- /dev/null
+++ b/lib/Hyena/src/Hyena/Hyena/Tests/DateTimeUtilTests.cs
@@ -0,0 +1,77 @@
+//
+// DateTimeUtilTests.cs
+//
+// Author:
+// Gabriel Burt <gabriel.burt at gmail.com>
+//
+// Copyright (c) 2010 Novell, Inc.
+//
+// Permission is hereby granted, free of charge, to any person obtaining a copy
+// of this software and associated documentation files (the "Software"), to deal
+// in the Software without restriction, including without limitation the rights
+// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+// copies of the Software, and to permit persons to whom the Software is
+// furnished to do so, subject to the following conditions:
+//
+// The above copyright notice and this permission notice shall be included in
+// all copies or substantial portions of the Software.
+//
+// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+// THE SOFTWARE.
+
+#if ENABLE_TESTS
+
+using System;
+using NUnit.Framework;
+using Hyena;
+
+namespace Hyena.Tests
+{
+ [TestFixture]
+ public class DateTimeUtilTests
+ {
+ [Test]
+ public void InvariantString ()
+ {
+ // Tests are run in Chicago timezone, UTC -6 in the winter, -5 in the summer
+ TestInv ("2010-02-18 02:41:00.000 -06:00", new DateTime (2010, 2, 18, 2, 41, 0, 0));
+ TestInv ("2010-02-18 02:41:50.123 -06:00", new DateTime (2010, 2, 18, 2, 41, 50, 123));
+ TestInv ("2010-10-18 02:01:00.000 -05:00", new DateTime (2010, 10, 18, 2, 1, 0, 0));
+ }
+
+ private void TestInv (string inv_string, DateTime dt)
+ {
+ // Make sure we can generate the given string from the DateTime
+ Assert.AreEqual (inv_string, DateTimeUtil.ToInvariantString (dt));
+
+ // And vice versa
+ DateTime parsed_dt;
+ if (DateTimeUtil.TryParseInvariant (inv_string, out parsed_dt))
+ Assert.AreEqual (dt, parsed_dt);
+ else
+ Assert.Fail (String.Format ("TryParseInvariant failed on {0}", inv_string));
+ }
+
+ [Test]
+ public void FromToSymmetry ()
+ {
+ // ToTimeT only has precision to the second; so strip off the remainding ticks
+ DateTime now = DateTime.Now;
+ now = now.Subtract (TimeSpan.FromTicks (now.Ticks % TimeSpan.TicksPerSecond));
+
+ long time_t = DateTimeUtil.ToTimeT (now);
+ DateTime now_t = DateTimeUtil.FromTimeT (time_t);
+
+ Assert.AreEqual (DateTimeKind.Local, now.Kind);
+ Assert.AreEqual (DateTimeKind.Local, now_t.Kind);
+ Assert.AreEqual (now, now_t);
+ }
+ }
+}
+
+#endif
diff --git a/lib/Hyena/src/Hyena/Hyena/Tests/StringUtilTests.cs b/lib/Hyena/src/Hyena/Hyena/Tests/StringUtilTests.cs
new file mode 100644
index 0000000..ecf331e
--- /dev/null
+++ b/lib/Hyena/src/Hyena/Hyena/Tests/StringUtilTests.cs
@@ -0,0 +1,411 @@
+//
+// StringUtilTests.cs
+//
+// Author:
+// Aaron Bockover <abockover at novell.com>
+// Gabriel Burt <gburt at novell.com>
+//
+// Copyright (C) 2008 Novell, Inc.
+//
+// Permission is hereby granted, free of charge, to any person obtaining
+// a copy of this software and associated documentation files (the
+// "Software"), to deal in the Software without restriction, including
+// without limitation the rights to use, copy, modify, merge, publish,
+// distribute, sublicense, and/or sell copies of the Software, and to
+// permit persons to whom the Software is furnished to do so, subject to
+// the following conditions:
+//
+// The above copyright notice and this permission notice shall be
+// included in all copies or substantial portions of the Software.
+//
+// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
+// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
+// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
+// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+//
+
+#if ENABLE_TESTS
+
+using System;
+using System.IO;
+using NUnit.Framework;
+using Hyena;
+
+namespace Hyena.Tests
+{
+ [TestFixture]
+ public class StringUtilTests
+ {
+ private class Map
+ {
+ public Map (string camel, string under)
+ {
+ Camel = camel;
+ Under = under;
+ }
+
+ public string Camel;
+ public string Under;
+ }
+
+ private Map [] u_to_c_maps = new Map [] {
+ new Map ("Hello", "hello"),
+ new Map ("HelloWorld", "hello_world"),
+ new Map ("HelloWorld", "hello__world"),
+ new Map ("HelloWorld", "hello___world"),
+ new Map ("HelloWorld", "hello____world"),
+ new Map ("HelloWorld", "_hello_world"),
+ new Map ("HelloWorld", "__hello__world"),
+ new Map ("HelloWorld", "___hello_world_"),
+ new Map ("HelloWorldHowAreYou", "_hello_World_HOW_ARE__YOU__"),
+ new Map (null, ""),
+ new Map ("H", "h")
+ };
+
+ [Test]
+ public void UnderCaseToCamelCase ()
+ {
+ foreach (Map map in u_to_c_maps) {
+ Assert.AreEqual (map.Camel, StringUtil.UnderCaseToCamelCase (map.Under));
+ }
+ }
+
+ private Map [] c_to_u_maps = new Map [] {
+ new Map ("Hello", "hello"),
+ new Map ("HelloWorld", "hello_world"),
+ new Map ("HiWorldHowAreYouDoingToday", "hi_world_how_are_you_doing_today"),
+ new Map ("SRSLYHowAreYou", "srsly_how_are_you"),
+ new Map ("OMGThisShitIsBananas", "omg_this_shit_is_bananas"),
+ new Map ("KTHXBAI", "kthxbai"),
+ new Map ("nereid.track_view_columns.MusicLibrarySource-Library/composer", "nereid.track_view_columns._music_library_source_-_library/composer"),
+ new Map ("", null),
+ new Map ("H", "h")
+ };
+
+ [Test]
+ public void CamelCaseToUnderCase ()
+ {
+ foreach (Map map in c_to_u_maps) {
+ Assert.AreEqual (map.Under, StringUtil.CamelCaseToUnderCase (map.Camel));
+ }
+ }
+
+ [Test]
+ public void DoubleToTenthsPrecision ()
+ {
+ // Note we are testing with locale = it_IT, hence the commas
+ Assert.AreEqual ("15", StringUtil.DoubleToTenthsPrecision (15.0));
+ Assert.AreEqual ("15", StringUtil.DoubleToTenthsPrecision (15.0334));
+ Assert.AreEqual ("15,1", StringUtil.DoubleToTenthsPrecision (15.052));
+ Assert.AreEqual ("15,5", StringUtil.DoubleToTenthsPrecision (15.5234));
+ Assert.AreEqual ("15", StringUtil.DoubleToTenthsPrecision (14.9734));
+ Assert.AreEqual ("14,9", StringUtil.DoubleToTenthsPrecision (14.92));
+ Assert.AreEqual ("0,4", StringUtil.DoubleToTenthsPrecision (0.421));
+ Assert.AreEqual ("0", StringUtil.DoubleToTenthsPrecision (0.01));
+ Assert.AreEqual ("1.000,3", StringUtil.DoubleToTenthsPrecision (1000.32));
+ Assert.AreEqual ("9.233", StringUtil.DoubleToTenthsPrecision (9233));
+ }
+
+ [Test]
+ public void DoubleToPluralInt ()
+ {
+ // This method helps us pluralize doubles. Probably a horrible i18n idea.
+ Assert.AreEqual (0, StringUtil.DoubleToPluralInt (0));
+ Assert.AreEqual (1, StringUtil.DoubleToPluralInt (1));
+ Assert.AreEqual (2, StringUtil.DoubleToPluralInt (2));
+ Assert.AreEqual (1, StringUtil.DoubleToPluralInt (0.5));
+ Assert.AreEqual (2, StringUtil.DoubleToPluralInt (1.8));
+ Assert.AreEqual (22, StringUtil.DoubleToPluralInt (21.3));
+ }
+
+ [Test]
+ public void RemovesNewlines ()
+ {
+ Assert.AreEqual ("", StringUtil.RemoveNewlines (""));
+ Assert.AreEqual (null, StringUtil.RemoveNewlines (null));
+ Assert.AreEqual ("foobar", StringUtil.RemoveNewlines (@"foo
+bar"));
+ Assert.AreEqual ("foobar baz", StringUtil.RemoveNewlines ("foo\nbar \nbaz"));
+ Assert.AreEqual ("haswindows newline andunix", StringUtil.RemoveNewlines ("has\nwindows\r\n newline \nandunix"));
+ }
+
+ [Test]
+ public void RemovesHtml ()
+ {
+ Assert.AreEqual ("", StringUtil.RemoveHtml (""));
+ Assert.AreEqual (null, StringUtil.RemoveHtml (null));
+ Assert.AreEqual ("foobar", StringUtil.RemoveHtml ("foobar"));
+ Assert.AreEqual ("foobar", StringUtil.RemoveHtml ("foo<baz>bar"));
+ Assert.AreEqual ("foobar", StringUtil.RemoveHtml ("foo<baz/>bar"));
+ Assert.AreEqual ("foobar", StringUtil.RemoveHtml ("foo</baz>bar"));
+ Assert.AreEqual ("foobazbar", StringUtil.RemoveHtml ("foo<a href=\"http://lkjdflkjdflkjj\">baz</a>bar"));
+ Assert.AreEqual ("foobaz foo bar", StringUtil.RemoveHtml (@"foo<a
+href=http://lkjdflkjdflkjj>baz foo< /a> bar"));
+ }
+ }
+
+ [TestFixture]
+ public class SearchKeyTests
+ {
+ private void AssertSearchKey (string before, string after)
+ {
+ Assert.AreEqual (after, StringUtil.SearchKey (before));
+ }
+
+ [Test]
+ public void TestEmpty ()
+ {
+ AssertSearchKey ("", "");
+ AssertSearchKey (null, null);
+ }
+
+ // Test that resulting search keys are in lower-case
+ [Test]
+ public void TestLowercase ()
+ {
+ AssertSearchKey ("A", "a");
+ AssertSearchKey ("\u0104", "a");
+ }
+
+ // Test that combining diacritics are removed from Latin characters.
+ [Test]
+ public void TestRemoveDiacritics ()
+ {
+ AssertSearchKey ("\u00e9", "e");
+ AssertSearchKey ("e\u0301", "e");
+
+ AssertSearchKey ("\u014d", "o");
+ AssertSearchKey ("o\u0304", "o");
+
+ AssertSearchKey ("Español", "espanol");
+ AssertSearchKey ("30 años de la revolución iraní", "30 anos de la revolucion irani");
+ AssertSearchKey ("FRANCÉS", "frances");
+
+ // Polish letters
+ AssertSearchKey ("ą", "a");
+ AssertSearchKey ("Ą", "a");
+ AssertSearchKey ("ć", "c");
+ AssertSearchKey ("Ć", "c");
+ AssertSearchKey ("ę", "e");
+ AssertSearchKey ("Ę", "e");
+ AssertSearchKey ("ł", "l");
+ AssertSearchKey ("Ł", "l");
+ AssertSearchKey ("ń", "n");
+ AssertSearchKey ("Ń", "n");
+ AssertSearchKey ("ó", "o");
+ AssertSearchKey ("Ó", "o");
+ AssertSearchKey ("ś", "s");
+ AssertSearchKey ("Ś", "s");
+ AssertSearchKey ("ź", "z");
+ AssertSearchKey ("Ź", "z");
+ AssertSearchKey ("ż", "z");
+ AssertSearchKey ("Ż", "z");
+
+ // Hiragana
+ AssertSearchKey ("\u304c", "\u304b");
+
+ // Cyrillic
+ AssertSearchKey ("\u0451", "\u0435");
+ AssertSearchKey ("\u0401", "\u0435");
+ AssertSearchKey ("\u0439", "\u0438");
+ AssertSearchKey ("\u0419", "\u0438");
+ }
+
+ // Test that some non-Latin characters are converted to Latin counterparts.
+ [Test]
+ public void TestEquivalents ()
+ {
+ AssertSearchKey ("\u00f8", "o");
+ AssertSearchKey ("\u0142", "l");
+ }
+
+ // Test that some kinds of punctuation are removed.
+ [Test]
+ public void TestRemovePunctuation ()
+ {
+ AssertSearchKey ("'", "");
+ AssertSearchKey ("\"", "");
+ AssertSearchKey ("!", "");
+ AssertSearchKey ("?", "");
+ AssertSearchKey ("/", "");
+ }
+
+ [Test] // http://bugzilla.gnome.org/show_bug.cgi?id=573484
+ public void TestCollapseSpaces ()
+ {
+ AssertSearchKey (" a \t b ", "a b");
+ AssertSearchKey ("100 % techno", "100 techno");
+
+ // Character in the set of special overrides
+ AssertSearchKey ("a \u00f8", "a o");
+
+ // Invalid combining character
+ AssertSearchKey ("a \u0301", "a");
+ }
+ }
+
+ [TestFixture]
+ public class EscapeFilenameTests
+ {
+ private void AssertProduces (string input, string output)
+ {
+ Assert.AreEqual (output, StringUtil.EscapeFilename (input));
+ }
+
+ private void AssertProducesSame (string input)
+ {
+ AssertProduces (input, input);
+ }
+
+ [Test]
+ public void TestEmpty ()
+ {
+ AssertProduces (null, "");
+ AssertProduces ("", "");
+ AssertProduces (" ", "");
+ AssertProduces (" ", "");
+ }
+
+ [Test]
+ public void TestNotChanged ()
+ {
+ AssertProducesSame ("a");
+ AssertProducesSame ("aaa");
+ AssertProducesSame ("Foo Bar");
+ AssertProducesSame ("03-Nur geträumt");
+ AssertProducesSame ("你好");
+ AssertProducesSame ("nǐ hǎo");
+ }
+
+ [Test]
+ public void TestStripped ()
+ {
+ AssertProduces ("Foo*bar", "Foo_bar");
+ AssertProduces ("</foo:bar?>", "_foo_bar_");
+ AssertProduces ("</:?>", "_");
+ AssertProduces ("Greetings! -* 你好?", "Greetings! -_ 你好_");
+ }
+ }
+
+ [TestFixture]
+ public class SortKeyTests
+ {
+ private void AssertSortKey (string before, object after)
+ {
+ Assert.AreEqual (after, StringUtil.SortKey (before));
+ }
+
+ [Test]
+ public void TestNull ()
+ {
+ AssertSortKey (null, null);
+ }
+
+ [Test]
+ public void TestEmpty ()
+ {
+ AssertSortKey ("", new byte[] {1, 1, 1, 1, 0});
+ }
+
+ [Test]
+ public void TestSortKey ()
+ {
+ AssertSortKey ("a", new byte[] {14, 2, 1, 1, 1, 1, 0});
+ AssertSortKey ("A", new byte[] {14, 2, 1, 1, 1, 1, 0});
+ AssertSortKey ("\u0104", new byte[] {14, 2, 1, 27, 1, 1, 1, 0,});
+ }
+ }
+
+ [TestFixture]
+ public class EscapePathTests
+ {
+ private readonly char dir_sep = Path.DirectorySeparatorChar;
+
+ private void AssertProduces (string input, string output)
+ {
+ Assert.AreEqual (output, StringUtil.EscapePath (input));
+ }
+
+ private void AssertProducesSame (string input)
+ {
+ AssertProduces (input, input);
+ }
+
+ [Test]
+ public void TestEmpty ()
+ {
+ AssertProduces (null, "");
+ AssertProduces ("", "");
+ AssertProduces (" ", "");
+ AssertProduces (" ", "");
+ }
+
+ [Test]
+ public void TestNotChanged ()
+ {
+ AssertProducesSame ("a");
+ AssertProducesSame ("aaa");
+ AssertProducesSame ("Foo Bar");
+ AssertProducesSame ("03-Nur geträumt");
+ AssertProducesSame ("превед");
+ AssertProducesSame ("nǐ hǎo");
+
+ AssertProducesSame (String.Format ("a{0}b.ogg", dir_sep));
+ AssertProducesSame (String.Format ("foo{0}bar{0}01. baz.ogg", dir_sep));
+ AssertProducesSame (String.Format ("{0}foo*?:", dir_sep)); // rooted, shouldn't change
+ }
+
+ [Test]
+ public void TestStripped ()
+ {
+ AssertProduces (
+ String.Format ("foo*bar{0}ham:spam.ogg", dir_sep),
+ String.Format ("foo_bar{0}ham_spam.ogg", dir_sep));
+ AssertProduces (
+ String.Format ("..lots..{0}o.f.{0}.dots.ogg.", dir_sep),
+ String.Format ("lots{0}o.f{0}dots.ogg", dir_sep));
+ AssertProduces (
+ String.Format ("foo{0}..{0}bar.ogg", dir_sep),
+ String.Format ("foo{0}bar.ogg", dir_sep));
+ AssertProduces (
+ String.Format (". foo{0}01. bar.ogg. ", dir_sep),
+ String.Format ("foo{0}01. bar.ogg", dir_sep));
+ }
+ }
+
+ [TestFixture]
+ public class SubstringCountTests
+ {
+ private void AssertCount (string haystack, string needle, uint expected)
+ {
+ Assert.AreEqual (expected, StringUtil.SubstringCount (haystack, needle));
+ }
+
+ [Test]
+ public void TestEmpty ()
+ {
+ AssertCount ("", "a", 0);
+ AssertCount ("a", "", 0);
+ }
+
+ [Test]
+ public void TestNoMatches ()
+ {
+ AssertCount ("a", "b", 0);
+ AssertCount ("with needle in", "long needle", 0);
+ }
+
+ [Test]
+ public void TestMatches ()
+ {
+ AssertCount ("abbcbba", "a", 2);
+ AssertCount ("abbcbba", "b", 4);
+ AssertCount ("with needle in", "needle", 1);
+ }
+ }
+}
+
+#endif
diff --git a/lib/Hyena/src/Hyena/Hyena/Tests/TestBase.cs b/lib/Hyena/src/Hyena/Hyena/Tests/TestBase.cs
new file mode 100644
index 0000000..f008d23
--- /dev/null
+++ b/lib/Hyena/src/Hyena/Hyena/Tests/TestBase.cs
@@ -0,0 +1,106 @@
+//
+// BansheeTests.cs
+//
+// Author:
+// Gabriel Burt <gburt at novell.com>
+//
+// Copyright (C) 2008 Novell, Inc.
+//
+// Permission is hereby granted, free of charge, to any person obtaining
+// a copy of this software and associated documentation files (the
+// "Software"), to deal in the Software without restriction, including
+// without limitation the rights to use, copy, modify, merge, publish,
+// distribute, sublicense, and/or sell copies of the Software, and to
+// permit persons to whom the Software is furnished to do so, subject to
+// the following conditions:
+//
+// The above copyright notice and this permission notice shall be
+// included in all copies or substantial portions of the Software.
+//
+// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
+// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
+// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
+// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+//
+
+#if ENABLE_TESTS
+
+using System;
+using System.IO;
+using System.Collections.Generic;
+using System.Reflection;
+using System.Threading;
+
+using NUnit.Framework;
+
+using Hyena;
+
+namespace Hyena.Tests
+{
+ public struct TransformPair<F, T>
+ {
+ public F From;
+ public T To;
+
+ public TransformPair (F from, T to)
+ {
+ From = from;
+ To = to;
+ }
+
+ public static TransformPair<F, T> [] GetFrom (params object [] objects)
+ {
+ TransformPair<F, T> [] pairs = new TransformPair<F, T> [objects.Length / 2];
+ for (int i = 0; i < objects.Length; i += 2) {
+ pairs[i/2] = new TransformPair<F, T> ((F)objects[i], (T)objects[i+1]);
+ }
+ return pairs;
+ }
+
+ public override string ToString ()
+ {
+ return From.ToString ();
+ }
+ }
+
+ public delegate To Transform<F, To> (F from);
+
+ public abstract class TestBase
+ {
+ private static string bin_dir;
+ public static string BinDir {
+ get { return bin_dir ?? (bin_dir = Path.GetDirectoryName (Assembly.GetExecutingAssembly ().Location)); }
+ }
+
+ private static string tests_dir;
+ public static string TestsDir {
+ get { return tests_dir ?? (tests_dir = Path.Combine (Path.GetDirectoryName (BinDir), "tests")); }
+ }
+
+ public static void AssertForEach<T> (IEnumerable<T> objects, Action<T> runner)
+ {
+ System.Text.StringBuilder sb = new System.Text.StringBuilder ();
+ foreach (T o in objects) {
+ try { runner (o); }
+ catch (AssertionException e) { sb.AppendFormat ("Failed assertion on {0}: {1}\n", o, e.Message); }
+ catch (Exception e) { sb.AppendFormat ("\nCaught exception on {0}: {1}\n", o, e.ToString ()); }
+ }
+
+ if (sb.Length > 0)
+ Assert.Fail ("\n" + sb.ToString ());
+ }
+
+ // Fails to compile, causes SIGABRT in gmcs; boo
+ /*public static void AssertTransformsEach<A, B> (IEnumerable<TransformPair<A, B>> pairs, Transform<A, B> transform)
+ {
+ AssertForEach (pairs, delegate (TransformPair<A, B> pair) {
+ Assert.AreEqual (pair.To, transform (pair.From));
+ });
+ }*/
+ }
+}
+
+#endif
diff --git a/lib/Hyena/src/Hyena/Hyena/ThreadAssist.cs b/lib/Hyena/src/Hyena/Hyena/ThreadAssist.cs
new file mode 100644
index 0000000..c685046
--- /dev/null
+++ b/lib/Hyena/src/Hyena/Hyena/ThreadAssist.cs
@@ -0,0 +1,128 @@
+//
+// ThreadAssist.cs
+//
+// Author:
+// Aaron Bockover <abockover at novell.com>
+// Gabriel Burt <gburt at novell.com>
+//
+// Copyright (C) 2005-2009 Novell, Inc.
+//
+// Permission is hereby granted, free of charge, to any person obtaining
+// a copy of this software and associated documentation files (the
+// "Software"), to deal in the Software without restriction, including
+// without limitation the rights to use, copy, modify, merge, publish,
+// distribute, sublicense, and/or sell copies of the Software, and to
+// permit persons to whom the Software is furnished to do so, subject to
+// the following conditions:
+//
+// The above copyright notice and this permission notice shall be
+// included in all copies or substantial portions of the Software.
+//
+// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
+// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
+// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
+// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+//
+
+using System;
+using System.Threading;
+
+namespace Hyena
+{
+ public static class ThreadAssist
+ {
+ private static Thread main_thread;
+
+ public static Thread MainThread {
+ get { return main_thread; }
+ }
+
+ public static Action<InvokeHandler> ProxyToMainHandler { get; set; }
+
+ public static void InitializeMainThread ()
+ {
+ main_thread = Thread.CurrentThread;
+ main_thread.Name = "Main Thread";
+ }
+
+ public static bool InMainThread {
+ get {
+ if (main_thread == null) {
+ throw new ApplicationException ("ThreadAssist.InitializeMainThread must be called first");
+ }
+
+ return main_thread.Equals (Thread.CurrentThread);
+ }
+ }
+
+ public static void AssertNotInMainThread ()
+ {
+ if (ApplicationContext.Debugging && InMainThread) {
+ Hyena.Log.Warning ("In GUI thread, will probably block it", System.Environment.StackTrace);
+ }
+ }
+
+ public static void AssertInMainThread ()
+ {
+ if (ApplicationContext.Debugging && !InMainThread) {
+ Hyena.Log.Warning ("Not in main thread!", System.Environment.StackTrace);
+ }
+ }
+
+ public static void BlockingProxyToMain (InvokeHandler handler)
+ {
+ if (!InMainThread) {
+ var reset_event = new System.Threading.ManualResetEvent (false);
+
+ ProxyToMainHandler (delegate {
+ try {
+ handler ();
+ } finally {
+ reset_event.Set ();
+ }
+ });
+
+ reset_event.WaitOne ();
+ } else {
+ handler ();
+ }
+ }
+
+ public static void ProxyToMain (InvokeHandler handler)
+ {
+ if (!InMainThread) {
+ ProxyToMainHandler (handler);
+ } else {
+ handler ();
+ }
+ }
+
+ public static void SpawnFromMain (ThreadStart threadedMethod)
+ {
+ if (InMainThread) {
+ Spawn (threadedMethod, true);
+ } else {
+ threadedMethod ();
+ }
+ }
+
+ public static Thread Spawn (ThreadStart threadedMethod, bool autoStart)
+ {
+ Thread thread = new Thread (threadedMethod);
+ thread.Name = String.Format ("Spawned: {0}", threadedMethod);
+ thread.IsBackground = true;
+ if (autoStart) {
+ thread.Start ();
+ }
+ return thread;
+ }
+
+ public static Thread Spawn (ThreadStart threadedMethod)
+ {
+ return Spawn (threadedMethod, true);
+ }
+ }
+}
diff --git a/lib/Hyena/src/Hyena/Hyena/Timer.cs b/lib/Hyena/src/Hyena/Hyena/Timer.cs
new file mode 100644
index 0000000..1c83e04
--- /dev/null
+++ b/lib/Hyena/src/Hyena/Hyena/Timer.cs
@@ -0,0 +1,62 @@
+//
+// Timer.cs
+//
+// Author:
+// Aaron Bockover <abockover at novell.com>
+//
+// Copyright (C) 2007 Novell, Inc.
+//
+// Permission is hereby granted, free of charge, to any person obtaining
+// a copy of this software and associated documentation files (the
+// "Software"), to deal in the Software without restriction, including
+// without limitation the rights to use, copy, modify, merge, publish,
+// distribute, sublicense, and/or sell copies of the Software, and to
+// permit persons to whom the Software is furnished to do so, subject to
+// the following conditions:
+//
+// The above copyright notice and this permission notice shall be
+// included in all copies or substantial portions of the Software.
+//
+// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
+// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
+// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
+// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+//
+
+using System;
+
+namespace Hyena
+{
+ public class Timer : IDisposable
+ {
+ private DateTime start;
+ private string label;
+
+ public Timer (string format, params object [] vals) : this (String.Format (format, vals))
+ {
+ }
+
+ public Timer (string label)
+ {
+ this.label = label;
+ start = DateTime.Now;
+ }
+
+ public TimeSpan ElapsedTime {
+ get { return DateTime.Now - start; }
+ }
+
+ public void WriteElapsed (string message)
+ {
+ Console.Error.WriteLine ("{0} {1} {2}", label, message, ElapsedTime);
+ }
+
+ public void Dispose ()
+ {
+ WriteElapsed ("timer stopped:");
+ }
+ }
+}
diff --git a/lib/Hyena/src/Hyena/Hyena/UndoManager.cs b/lib/Hyena/src/Hyena/Hyena/UndoManager.cs
new file mode 100644
index 0000000..f702a77
--- /dev/null
+++ b/lib/Hyena/src/Hyena/Hyena/UndoManager.cs
@@ -0,0 +1,147 @@
+//
+// UndoManager.cs
+//
+// Author:
+// Aaron Bockover <abockover at novell.com>
+//
+// Copyright (C) 2007 Novell, Inc.
+//
+// Permission is hereby granted, free of charge, to any person obtaining
+// a copy of this software and associated documentation files (the
+// "Software"), to deal in the Software without restriction, including
+// without limitation the rights to use, copy, modify, merge, publish,
+// distribute, sublicense, and/or sell copies of the Software, and to
+// permit persons to whom the Software is furnished to do so, subject to
+// the following conditions:
+//
+// The above copyright notice and this permission notice shall be
+// included in all copies or substantial portions of the Software.
+//
+// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
+// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
+// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
+// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+//
+
+using System;
+using System.Collections.Generic;
+
+namespace Hyena
+{
+ public class UndoManager
+ {
+ private Stack<IUndoAction> undo_stack = new Stack<IUndoAction>();
+ private Stack<IUndoAction> redo_stack = new Stack<IUndoAction>();
+ private int frozen_count;
+ private bool try_merge;
+
+ public event EventHandler UndoChanged;
+
+ public void Undo()
+ {
+ lock(this) {
+ UndoRedo(undo_stack, redo_stack, true);
+ }
+ }
+
+ public void Redo()
+ {
+ lock(this) {
+ UndoRedo(redo_stack, undo_stack, false);
+ }
+ }
+
+ public void Clear()
+ {
+ lock(this) {
+ frozen_count = 0;
+ try_merge = false;
+ undo_stack.Clear();
+ redo_stack.Clear();
+ OnUndoChanged();
+ }
+ }
+
+ public void AddUndoAction(IUndoAction action)
+ {
+ lock(this) {
+ if(frozen_count != 0) {
+ return;
+ }
+
+ if(try_merge && undo_stack.Count > 0) {
+ IUndoAction top = undo_stack.Peek();
+ if(top.CanMerge(action)) {
+ top.Merge(action);
+ return;
+ }
+ }
+
+ undo_stack.Push(action);
+ redo_stack.Clear();
+
+ try_merge = true;
+
+ OnUndoChanged();
+ }
+ }
+
+ protected virtual void OnUndoChanged()
+ {
+ EventHandler handler = UndoChanged;
+ if(handler != null) {
+ handler(this, EventArgs.Empty);
+ }
+ }
+
+ private void UndoRedo(Stack<IUndoAction> pop_from, Stack<IUndoAction> push_to, bool is_undo)
+ {
+ if(pop_from.Count == 0) {
+ return;
+ }
+
+ IUndoAction action = pop_from.Pop();
+
+ frozen_count++;
+ if(is_undo) {
+ action.Undo();
+ } else {
+ action.Redo();
+ }
+ frozen_count--;
+
+ push_to.Push(action);
+
+ try_merge = true;
+
+ OnUndoChanged();
+ }
+
+ public bool CanUndo {
+ get { return undo_stack.Count > 0; }
+ }
+
+ public bool CanRedo {
+ get { return redo_stack.Count > 0; }
+ }
+
+ public IUndoAction UndoAction {
+ get {
+ lock (this) {
+ return CanUndo ? undo_stack.Peek () : null;
+ }
+ }
+ }
+
+ public IUndoAction RedoAction {
+ get {
+ lock (this) {
+ return CanRedo ? redo_stack.Peek () : null;
+ }
+ }
+ }
+ }
+}
diff --git a/lib/Hyena/src/Hyena/Hyena/XdgBaseDirectorySpec.cs b/lib/Hyena/src/Hyena/Hyena/XdgBaseDirectorySpec.cs
new file mode 100644
index 0000000..b190f8d
--- /dev/null
+++ b/lib/Hyena/src/Hyena/Hyena/XdgBaseDirectorySpec.cs
@@ -0,0 +1,94 @@
+//
+// XdgBaseDirectorySpec.cs
+//
+// Author:
+// Aaron Bockover <abockover at novell.com>
+//
+// Copyright (C) 2006-2008 Novell, Inc.
+//
+// Permission is hereby granted, free of charge, to any person obtaining
+// a copy of this software and associated documentation files (the
+// "Software"), to deal in the Software without restriction, including
+// without limitation the rights to use, copy, modify, merge, publish,
+// distribute, sublicense, and/or sell copies of the Software, and to
+// permit persons to whom the Software is furnished to do so, subject to
+// the following conditions:
+//
+// The above copyright notice and this permission notice shall be
+// included in all copies or substantial portions of the Software.
+//
+// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
+// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
+// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
+// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+//
+
+using System;
+using System.IO;
+
+namespace Hyena
+{
+ public static class XdgBaseDirectorySpec
+ {
+ public static string GetUserDirectory (string key, string fallback)
+ {
+ string home_dir = Environment.GetFolderPath (Environment.SpecialFolder.Personal);
+ string config_dir = Environment.GetFolderPath (Environment.SpecialFolder.ApplicationData);
+
+ string env_path = Environment.GetEnvironmentVariable (key);
+ if (!String.IsNullOrEmpty (env_path)) {
+ return env_path;
+ }
+
+ string user_dirs_path = Path.Combine (config_dir, "user-dirs.dirs");
+
+ if (!File.Exists (user_dirs_path)) {
+ return Path.Combine (home_dir, fallback);
+ }
+
+ try {
+ using (StreamReader reader = new StreamReader (user_dirs_path)) {
+ string line;
+ while ((line = reader.ReadLine ()) != null) {
+ line = line.Trim ();
+ int delim_index = line.IndexOf ('=');
+ if (delim_index > 8 && line.Substring (0, delim_index) == key) {
+ string path = line.Substring (delim_index + 1).Trim ('"');
+ bool relative = false;
+
+ if (path.StartsWith ("$HOME/")) {
+ relative = true;
+ path = path.Substring (6);
+ } else if (path.StartsWith ("~")) {
+ relative = true;
+ path = path.Substring (1);
+ } else if (!path.StartsWith ("/")) {
+ relative = true;
+ }
+
+ return relative ? Path.Combine (home_dir, path) : path;
+ }
+ }
+ }
+ } catch (FileNotFoundException) {
+ }
+
+ return Path.Combine (home_dir, fallback);
+ }
+
+ public static string GetXdgDirectoryUnderHome (string key, string fallback)
+ {
+ string xdg_dir = XdgBaseDirectorySpec.GetUserDirectory (key, fallback);
+ string home_dir = Environment.GetFolderPath (Environment.SpecialFolder.Personal);
+
+ if (xdg_dir == null || xdg_dir == home_dir || !xdg_dir.StartsWith (home_dir)) {
+ xdg_dir = Path.Combine (home_dir, fallback);
+ }
+
+ return xdg_dir;
+ }
+ }
+}
diff --git a/lib/Hyena/src/Hyena/Makefile.am b/lib/Hyena/src/Hyena/Makefile.am
new file mode 100644
index 0000000..cd40fe6
--- /dev/null
+++ b/lib/Hyena/src/Hyena/Makefile.am
@@ -0,0 +1,123 @@
+ASSEMBLY = Hyena
+TARGET = library
+LINK = -r:Mono.Posix -r:System -r:System.Core
+SOURCES = \
+ Hyena.Collections/CollectionExtensions.cs \
+ Hyena.Collections/IntervalHeap.cs \
+ Hyena.Collections/IStackProvider.cs \
+ Hyena.Collections/LruCache.cs \
+ Hyena.Collections/QueuePipeline.cs \
+ Hyena.Collections/QueuePipelineElement.cs \
+ Hyena.Collections/RangeCollection.cs \
+ Hyena.Collections/Selection.cs \
+ Hyena.Collections/SelectionProxy.cs \
+ Hyena.Collections/Tests/IntervalHeapTests.cs \
+ Hyena.Collections/Tests/QueuePipelineTests.cs \
+ Hyena.Collections/Tests/RangeCollectionTests.cs \
+ Hyena.Collections/WriteLineElement.cs \
+ Hyena.CommandLine/CommandLineParser.cs \
+ Hyena.CommandLine/Layout.cs \
+ Hyena.CommandLine/LayoutGroup.cs \
+ Hyena.CommandLine/LayoutOption.cs \
+ Hyena.Data/ArrayModelCache.cs \
+ Hyena.Data/BaseListModel.cs \
+ Hyena.Data/ColumnDescription.cs \
+ Hyena.Data/DictionaryModelCache.cs \
+ Hyena.Data/ICacheableItem.cs \
+ Hyena.Data/ICacheableModel.cs \
+ Hyena.Data/ICareAboutView.cs \
+ Hyena.Data/IFilterable.cs \
+ Hyena.Data/IListModel.cs \
+ Hyena.Data/IPropertyStoreExpose.cs \
+ Hyena.Data/ISelectable.cs \
+ Hyena.Data/ISortable.cs \
+ Hyena.Data/ISortableColumn.cs \
+ Hyena.Data/MemoryListModel.cs \
+ Hyena.Data/ModelCache.cs \
+ Hyena.Data/ModelSelection.cs \
+ Hyena.Data/PropertyStore.cs \
+ Hyena.Data/SortType.cs \
+ Hyena.Jobs/Job.cs \
+ Hyena.Jobs/JobExtensions.cs \
+ Hyena.Jobs/PriorityHints.cs \
+ Hyena.Jobs/Resource.cs \
+ Hyena.Jobs/Scheduler.cs \
+ Hyena.Jobs/SimpleAsyncJob.cs \
+ Hyena.Jobs/Tests/SchedulerTests.cs \
+ Hyena.Json/Deserializer.cs \
+ Hyena.Json/IJsonCollection.cs \
+ Hyena.Json/JsonArray.cs \
+ Hyena.Json/JsonObject.cs \
+ Hyena.Json/Serializer.cs \
+ Hyena.Json/Tests/DeserializerTests.cs \
+ Hyena.Json/Tests/SerializerTests.cs \
+ Hyena.Json/Tests/TokenizerTests.cs \
+ Hyena.Json/Token.cs \
+ Hyena.Json/Tokenizer.cs \
+ Hyena.Json/TokenType.cs \
+ Hyena.Query/AliasedObjectSet.cs \
+ Hyena.Query/DateQueryValue.cs \
+ Hyena.Query/EnumQueryValue.cs \
+ Hyena.Query/ExactStringQueryValue.cs \
+ Hyena.Query/ExactUriStringQueryValue.cs \
+ Hyena.Query/FileSizeQueryValue.cs \
+ Hyena.Query/IntegerKeyedObjectQueryValue.cs \
+ Hyena.Query/IntegerQueryValue.cs \
+ Hyena.Query/NullQueryValue.cs \
+ Hyena.Query/QueryField.cs \
+ Hyena.Query/QueryFieldSet.cs \
+ Hyena.Query/QueryLimit.cs \
+ Hyena.Query/QueryListNode.cs \
+ Hyena.Query/QueryNode.cs \
+ Hyena.Query/QueryOperator.cs \
+ Hyena.Query/QueryOrder.cs \
+ Hyena.Query/QueryParser.cs \
+ Hyena.Query/QueryTermNode.cs \
+ Hyena.Query/QueryToken.cs \
+ Hyena.Query/QueryValue.cs \
+ Hyena.Query/RelativeTimeSpanQueryValue.cs \
+ Hyena.Query/StringQueryValue.cs \
+ Hyena.Query/Tests/QueryTests.cs \
+ Hyena.Query/TimeSpanQueryValue.cs \
+ Hyena.Query/UserQueryParser.cs \
+ Hyena.Query/XmlQueryParser.cs \
+ Hyena.SExpEngine/ArithmeticFunctionSet.cs \
+ Hyena.SExpEngine/CastFunctionSet.cs \
+ Hyena.SExpEngine/CompareFunctionSet.cs \
+ Hyena.SExpEngine/ControlFunctionSet.cs \
+ Hyena.SExpEngine/Evaluator.cs \
+ Hyena.SExpEngine/EvaluatorBase.cs \
+ Hyena.SExpEngine/FunctionFunctionSet.cs \
+ Hyena.SExpEngine/FunctionNode.cs \
+ Hyena.SExpEngine/FunctionSet.cs \
+ Hyena.SExpEngine/ListFunctionSet.cs \
+ Hyena.SExpEngine/Literals.cs \
+ Hyena.SExpEngine/LogicFunctionSet.cs \
+ Hyena.SExpEngine/Parser.cs \
+ Hyena.SExpEngine/StringFunctionSet.cs \
+ Hyena.SExpEngine/TreeNode.cs \
+ Hyena.SExpEngine/UtilityFunctionSet.cs \
+ Hyena/ApplicationContext.cs \
+ Hyena/ConsoleCrayon.cs \
+ Hyena/CryptoUtil.cs \
+ Hyena/DateTimeUtil.cs \
+ Hyena/Delegates.cs \
+ Hyena/EventArgs.cs \
+ Hyena/IUndoAction.cs \
+ Hyena/Log.cs \
+ Hyena/Paths.cs \
+ Hyena/PlatformDetection.cs \
+ Hyena/StringUtil.cs \
+ Hyena/Tests/CryptoUtilTests.cs \
+ Hyena/Tests/DateTimeUtilTests.cs \
+ Hyena/Tests/StringUtilTests.cs \
+ Hyena/Tests/TestBase.cs \
+ Hyena/ThreadAssist.cs \
+ Hyena/Timer.cs \
+ Hyena/UndoManager.cs \
+ Hyena/XdgBaseDirectorySpec.cs \
+ System.Web/Helpers.cs \
+ System.Web/HttpUtility.cs
+
+include $(top_srcdir)/build/build.mk
+EXTRA_DIST += hyena.pc.in
diff --git a/lib/Hyena/src/Hyena/Makefile.in b/lib/Hyena/src/Hyena/Makefile.in
new file mode 100644
index 0000000..5dc6c7a
--- /dev/null
+++ b/lib/Hyena/src/Hyena/Makefile.in
@@ -0,0 +1,919 @@
+# Makefile.in generated by automake 1.11.1 from Makefile.am.
+# @configure_input@
+
+# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
+# 2003, 2004, 2005, 2006, 2007, 2008, 2009 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.
+
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
+# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
+# PARTICULAR PURPOSE.
+
+ at SET_MAKE@
+
+VPATH = @srcdir@
+pkgdatadir = $(datadir)/@PACKAGE@
+pkgincludedir = $(includedir)/@PACKAGE@
+pkglibdir = $(libdir)/@PACKAGE@
+pkglibexecdir = $(libexecdir)/@PACKAGE@
+am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
+install_sh_DATA = $(install_sh) -c -m 644
+install_sh_PROGRAM = $(install_sh) -c
+install_sh_SCRIPT = $(install_sh) -c
+INSTALL_HEADER = $(INSTALL_DATA)
+transform = $(program_transform_name)
+NORMAL_INSTALL = :
+PRE_INSTALL = :
+POST_INSTALL = :
+NORMAL_UNINSTALL = :
+PRE_UNINSTALL = :
+POST_UNINSTALL = :
+build_triplet = @build@
+host_triplet = @host@
+DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in \
+ $(top_srcdir)/build/build.environment.mk \
+ $(top_srcdir)/build/build.mk \
+ $(top_srcdir)/build/build.rules.mk
+ at ENABLE_TESTS_TRUE@am__append_1 = " $(NUNIT_LIBS)"
+subdir = lib/Hyena/src/Hyena
+ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
+am__aclocal_m4_deps = $(top_srcdir)/build/m4/shave/shave.m4 \
+ $(top_srcdir)/build/m4/shamrock/expansions.m4 \
+ $(top_srcdir)/build/m4/shamrock/gnome-doc.m4 \
+ $(top_srcdir)/build/m4/shamrock/mono.m4 \
+ $(top_srcdir)/build/m4/shamrock/nunit.m4 \
+ $(top_srcdir)/build/m4/shamrock/programs.m4 \
+ $(top_srcdir)/build/m4/f-spot/flickrnet.m4 \
+ $(top_srcdir)/build/m4/f-spot/gnome-keyring-sharp.m4 \
+ $(top_srcdir)/build/m4/f-spot/gtk-sharp.m4 \
+ $(top_srcdir)/build/m4/f-spot/mono-addins.m4 \
+ $(top_srcdir)/acinclude.m4 $(top_srcdir)/configure.ac
+am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
+ $(ACLOCAL_M4)
+mkinstalldirs = $(install_sh) -d
+CONFIG_HEADER = $(top_builddir)/config.h
+CONFIG_CLEAN_FILES =
+CONFIG_CLEAN_VPATH_FILES =
+am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`;
+am__vpath_adj = case $$p in \
+ $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \
+ *) f=$$p;; \
+ esac;
+am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`;
+am__install_max = 40
+am__nobase_strip_setup = \
+ srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'`
+am__nobase_strip = \
+ for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||"
+am__nobase_list = $(am__nobase_strip_setup); \
+ for p in $$list; do echo "$$p $$p"; done | \
+ sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \
+ $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \
+ if (++n[$$2] == $(am__install_max)) \
+ { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \
+ END { for (dir in files) print dir, files[dir] }'
+am__base_list = \
+ sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \
+ sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g'
+am__installdirs = "$(DESTDIR)$(moduledir)"
+SCRIPTS = $(module_SCRIPTS)
+DIST_SOURCES =
+DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
+ACLOCAL = @ACLOCAL@
+ACLOCAL_AMFLAGS = @ACLOCAL_AMFLAGS@
+ALL_LINGUAS = @ALL_LINGUAS@
+AMTAR = @AMTAR@
+AM_MAKEFLAGS = @AM_MAKEFLAGS@
+API_VERSION = @API_VERSION@
+AR = @AR@
+ASM_VERSION = @ASM_VERSION@
+AUTOCONF = @AUTOCONF@
+AUTOHEADER = @AUTOHEADER@
+AUTOMAKE = @AUTOMAKE@
+AWK = @AWK@
+CATALOGS = @CATALOGS@
+CATOBJEXT = @CATOBJEXT@
+CC = @CC@
+CCDEPMODE = @CCDEPMODE@
+CFLAGS = @CFLAGS@
+CPP = @CPP@
+CPPFLAGS = @CPPFLAGS@
+CSC_DEFINES = @CSC_DEFINES@
+CXX = @CXX@
+CXXCPP = @CXXCPP@
+CXXDEPMODE = @CXXDEPMODE@
+CXXFLAGS = @CXXFLAGS@
+CYGPATH_W = @CYGPATH_W@
+DATADIRNAME = @DATADIRNAME@
+DEFS = @DEFS@
+DEPDIR = @DEPDIR@
+DISPLAY_VERSION = @DISPLAY_VERSION@
+DISTCHECK_CONFIGURE_FLAGS = @DISTCHECK_CONFIGURE_FLAGS@
+DOC_USER_FORMATS = @DOC_USER_FORMATS@
+DSYMUTIL = @DSYMUTIL@
+DUMPBIN = @DUMPBIN@
+ECHO_C = @ECHO_C@
+ECHO_N = @ECHO_N@
+ECHO_T = @ECHO_T@
+EGREP = @EGREP@
+EXEEXT = @EXEEXT@
+EXIF_CFLAGS = @EXIF_CFLAGS@
+EXIF_LIBS = @EXIF_LIBS@
+EXIF_SOVERSION = @EXIF_SOVERSION@
+F77 = @F77@
+FC = @FC@
+FGREP = @FGREP@
+FLICKRNET_CFLAGS = @FLICKRNET_CFLAGS@
+FLICKRNET_LIBS = @FLICKRNET_LIBS@
+F_CFLAGS = @F_CFLAGS@
+F_LIBS = @F_LIBS@
+GAPI2CODEGEN = @GAPI2CODEGEN@
+GAPI2FIXUP = @GAPI2FIXUP@
+GAPI2PARSER = @GAPI2PARSER@
+GCONFTOOL = @GCONFTOOL@
+GCONF_SCHEMA_CONFIG_SOURCE = @GCONF_SCHEMA_CONFIG_SOURCE@
+GCONF_SCHEMA_FILE_DIR = @GCONF_SCHEMA_FILE_DIR@
+GCONF_SHARP_CFLAGS = @GCONF_SHARP_CFLAGS@
+GCONF_SHARP_LIBS = @GCONF_SHARP_LIBS@
+GETTEXT_PACKAGE = @GETTEXT_PACKAGE@
+GIO_CFLAGS = @GIO_CFLAGS@
+GIO_LIBS = @GIO_LIBS@
+GLIBSHARP_2_12_7_CFLAGS = @GLIBSHARP_2_12_7_CFLAGS@
+GLIBSHARP_2_12_7_LIBS = @GLIBSHARP_2_12_7_LIBS@
+GLIBSHARP_CFLAGS = @GLIBSHARP_CFLAGS@
+GLIBSHARP_LIBS = @GLIBSHARP_LIBS@
+GLIB_CFLAGS = @GLIB_CFLAGS@
+GLIB_GENMARSHAL = @GLIB_GENMARSHAL@
+GLIB_LIBS = @GLIB_LIBS@
+GLIB_MKENUMS = @GLIB_MKENUMS@
+GMOFILES = @GMOFILES@
+GMSGFMT = @GMSGFMT@
+GNOME_ICON_THEME_PREFIX = @GNOME_ICON_THEME_PREFIX@
+GNOME_SCREENSAVER_SAVERDIR = @GNOME_SCREENSAVER_SAVERDIR@
+GNOME_SCREENSAVER_THEMESDIR = @GNOME_SCREENSAVER_THEMESDIR@
+GNOME_SHARP_CFLAGS = @GNOME_SHARP_CFLAGS@
+GNOME_SHARP_LIBS = @GNOME_SHARP_LIBS@
+GOBJECT_QUERY = @GOBJECT_QUERY@
+GREP = @GREP@
+GTKSHARP_A11Y_CFLAGS = @GTKSHARP_A11Y_CFLAGS@
+GTKSHARP_A11Y_LIBS = @GTKSHARP_A11Y_LIBS@
+GTKSHARP_CFLAGS = @GTKSHARP_CFLAGS@
+GTKSHARP_LIBS = @GTKSHARP_LIBS@
+HELP_DIR = @HELP_DIR@
+ICONS_DIRECTORY = @ICONS_DIRECTORY@
+INSTALL = @INSTALL@
+INSTALL_DATA = @INSTALL_DATA@
+INSTALL_PROGRAM = @INSTALL_PROGRAM@
+INSTALL_SCRIPT = @INSTALL_SCRIPT@
+INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
+INSTOBJEXT = @INSTOBJEXT@
+INTLLIBS = @INTLLIBS@
+INTLTOOL_EXTRACT = @INTLTOOL_EXTRACT@
+INTLTOOL_MERGE = @INTLTOOL_MERGE@
+INTLTOOL_PERL = @INTLTOOL_PERL@
+INTLTOOL_UPDATE = @INTLTOOL_UPDATE@
+KEYRINGSHARP_CFLAGS = @KEYRINGSHARP_CFLAGS@
+KEYRINGSHARP_LIBS = @KEYRINGSHARP_LIBS@
+LCMS_CFLAGS = @LCMS_CFLAGS@
+LCMS_LIBS = @LCMS_LIBS@
+LD = @LD@
+LDFLAGS = @LDFLAGS@
+LIBEXIF_VERSION_CHECK_CFLAGS = @LIBEXIF_VERSION_CHECK_CFLAGS@
+LIBEXIF_VERSION_CHECK_LIBS = @LIBEXIF_VERSION_CHECK_LIBS@
+LIBJPEG = @LIBJPEG@
+LIBOBJS = @LIBOBJS@
+LIBS = @LIBS@
+LIBTOOL = @LIBTOOL@
+LIPO = @LIPO@
+LN_S = @LN_S@
+LTLIBOBJS = @LTLIBOBJS@
+MAINT = @MAINT@
+MAKEFLAGS = @MAKEFLAGS@
+MAKEINFO = @MAKEINFO@
+MCS = @MCS@
+MKDIR_P = @MKDIR_P@
+MKINSTALLDIRS = @MKINSTALLDIRS@
+MONO = @MONO@
+MONO_ADDINS_CFLAGS = @MONO_ADDINS_CFLAGS@
+MONO_ADDINS_GUI_CFLAGS = @MONO_ADDINS_GUI_CFLAGS@
+MONO_ADDINS_GUI_LIBS = @MONO_ADDINS_GUI_LIBS@
+MONO_ADDINS_LIBS = @MONO_ADDINS_LIBS@
+MONO_ADDINS_SETUP_CFLAGS = @MONO_ADDINS_SETUP_CFLAGS@
+MONO_ADDINS_SETUP_LIBS = @MONO_ADDINS_SETUP_LIBS@
+MONO_MODULE_CFLAGS = @MONO_MODULE_CFLAGS@
+MONO_MODULE_LIBS = @MONO_MODULE_LIBS@
+MSGFMT = @MSGFMT@
+MSGFMT_OPTS = @MSGFMT_OPTS@
+MSGMERGE = @MSGMERGE@
+NDESK_DBUS_CFLAGS = @NDESK_DBUS_CFLAGS@
+NDESK_DBUS_LIBS = @NDESK_DBUS_LIBS@
+NM = @NM@
+NMEDIT = @NMEDIT@
+NUNIT_CFLAGS = @NUNIT_CFLAGS@
+NUNIT_LIBS = @NUNIT_LIBS@
+OBJC = @OBJC@
+OBJDUMP = @OBJDUMP@
+OBJEXT = @OBJEXT@
+OMF_DIR = @OMF_DIR@
+OTOOL = @OTOOL@
+OTOOL64 = @OTOOL64@
+PACKAGE = @PACKAGE@
+PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
+PACKAGE_NAME = @PACKAGE_NAME@
+PACKAGE_STRING = @PACKAGE_STRING@
+PACKAGE_TARNAME = @PACKAGE_TARNAME@
+PACKAGE_URL = @PACKAGE_URL@
+PACKAGE_VERSION = @PACKAGE_VERSION@
+PATH_SEPARATOR = @PATH_SEPARATOR@
+PKG_CONFIG = @PKG_CONFIG@
+POFILES = @POFILES@
+POSUB = @POSUB@
+PO_IN_DATADIR_FALSE = @PO_IN_DATADIR_FALSE@
+PO_IN_DATADIR_TRUE = @PO_IN_DATADIR_TRUE@
+Q = @Q@
+RANLIB = @RANLIB@
+SED = @SED@
+SET_MAKE = @SET_MAKE@
+SHELL = @SHELL@
+STRIP = @STRIP@
+TURTLEDIR = @TURTLEDIR@
+UNIQUE_CFLAGS = @UNIQUE_CFLAGS@
+UNIQUE_LIBS = @UNIQUE_LIBS@
+USE_NLS = @USE_NLS@
+V = @V@
+VERSION = @VERSION@
+WARN_CFLAGS = @WARN_CFLAGS@
+XGETTEXT = @XGETTEXT@
+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_DUMPBIN = @ac_ct_DUMPBIN@
+am__include = @am__include@
+am__leading_dot = @am__leading_dot@
+am__quote = @am__quote@
+am__tar = @am__tar@
+am__untar = @am__untar@
+bindir = @bindir@
+build = @build@
+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@
+expanded_bindir = @expanded_bindir@
+expanded_datadir = @expanded_datadir@
+expanded_libdir = @expanded_libdir@
+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@
+lt_ECHO = @lt_ECHO@
+mandir = @mandir@
+mkdir_p = @mkdir_p@
+oldincludedir = @oldincludedir@
+pdfdir = @pdfdir@
+prefix = @prefix@
+program_transform_name = @program_transform_name@
+psdir = @psdir@
+sbindir = @sbindir@
+sharedstatedir = @sharedstatedir@
+shavedir = @shavedir@
+srcdir = @srcdir@
+sysconfdir = @sysconfdir@
+target_alias = @target_alias@
+top_build_prefix = @top_build_prefix@
+top_builddir = @top_builddir@
+top_srcdir = @top_srcdir@
+ASSEMBLY = Hyena
+TARGET = library
+LINK = -r:Mono.Posix -r:System -r:System.Core $(am__append_1)
+SOURCES = \
+ Hyena.Collections/CollectionExtensions.cs \
+ Hyena.Collections/IntervalHeap.cs \
+ Hyena.Collections/IStackProvider.cs \
+ Hyena.Collections/LruCache.cs \
+ Hyena.Collections/QueuePipeline.cs \
+ Hyena.Collections/QueuePipelineElement.cs \
+ Hyena.Collections/RangeCollection.cs \
+ Hyena.Collections/Selection.cs \
+ Hyena.Collections/SelectionProxy.cs \
+ Hyena.Collections/Tests/IntervalHeapTests.cs \
+ Hyena.Collections/Tests/QueuePipelineTests.cs \
+ Hyena.Collections/Tests/RangeCollectionTests.cs \
+ Hyena.Collections/WriteLineElement.cs \
+ Hyena.CommandLine/CommandLineParser.cs \
+ Hyena.CommandLine/Layout.cs \
+ Hyena.CommandLine/LayoutGroup.cs \
+ Hyena.CommandLine/LayoutOption.cs \
+ Hyena.Data/ArrayModelCache.cs \
+ Hyena.Data/BaseListModel.cs \
+ Hyena.Data/ColumnDescription.cs \
+ Hyena.Data/DictionaryModelCache.cs \
+ Hyena.Data/ICacheableItem.cs \
+ Hyena.Data/ICacheableModel.cs \
+ Hyena.Data/ICareAboutView.cs \
+ Hyena.Data/IFilterable.cs \
+ Hyena.Data/IListModel.cs \
+ Hyena.Data/IPropertyStoreExpose.cs \
+ Hyena.Data/ISelectable.cs \
+ Hyena.Data/ISortable.cs \
+ Hyena.Data/ISortableColumn.cs \
+ Hyena.Data/MemoryListModel.cs \
+ Hyena.Data/ModelCache.cs \
+ Hyena.Data/ModelSelection.cs \
+ Hyena.Data/PropertyStore.cs \
+ Hyena.Data/SortType.cs \
+ Hyena.Jobs/Job.cs \
+ Hyena.Jobs/JobExtensions.cs \
+ Hyena.Jobs/PriorityHints.cs \
+ Hyena.Jobs/Resource.cs \
+ Hyena.Jobs/Scheduler.cs \
+ Hyena.Jobs/SimpleAsyncJob.cs \
+ Hyena.Jobs/Tests/SchedulerTests.cs \
+ Hyena.Json/Deserializer.cs \
+ Hyena.Json/IJsonCollection.cs \
+ Hyena.Json/JsonArray.cs \
+ Hyena.Json/JsonObject.cs \
+ Hyena.Json/Serializer.cs \
+ Hyena.Json/Tests/DeserializerTests.cs \
+ Hyena.Json/Tests/SerializerTests.cs \
+ Hyena.Json/Tests/TokenizerTests.cs \
+ Hyena.Json/Token.cs \
+ Hyena.Json/Tokenizer.cs \
+ Hyena.Json/TokenType.cs \
+ Hyena.Query/AliasedObjectSet.cs \
+ Hyena.Query/DateQueryValue.cs \
+ Hyena.Query/EnumQueryValue.cs \
+ Hyena.Query/ExactStringQueryValue.cs \
+ Hyena.Query/ExactUriStringQueryValue.cs \
+ Hyena.Query/FileSizeQueryValue.cs \
+ Hyena.Query/IntegerKeyedObjectQueryValue.cs \
+ Hyena.Query/IntegerQueryValue.cs \
+ Hyena.Query/NullQueryValue.cs \
+ Hyena.Query/QueryField.cs \
+ Hyena.Query/QueryFieldSet.cs \
+ Hyena.Query/QueryLimit.cs \
+ Hyena.Query/QueryListNode.cs \
+ Hyena.Query/QueryNode.cs \
+ Hyena.Query/QueryOperator.cs \
+ Hyena.Query/QueryOrder.cs \
+ Hyena.Query/QueryParser.cs \
+ Hyena.Query/QueryTermNode.cs \
+ Hyena.Query/QueryToken.cs \
+ Hyena.Query/QueryValue.cs \
+ Hyena.Query/RelativeTimeSpanQueryValue.cs \
+ Hyena.Query/StringQueryValue.cs \
+ Hyena.Query/Tests/QueryTests.cs \
+ Hyena.Query/TimeSpanQueryValue.cs \
+ Hyena.Query/UserQueryParser.cs \
+ Hyena.Query/XmlQueryParser.cs \
+ Hyena.SExpEngine/ArithmeticFunctionSet.cs \
+ Hyena.SExpEngine/CastFunctionSet.cs \
+ Hyena.SExpEngine/CompareFunctionSet.cs \
+ Hyena.SExpEngine/ControlFunctionSet.cs \
+ Hyena.SExpEngine/Evaluator.cs \
+ Hyena.SExpEngine/EvaluatorBase.cs \
+ Hyena.SExpEngine/FunctionFunctionSet.cs \
+ Hyena.SExpEngine/FunctionNode.cs \
+ Hyena.SExpEngine/FunctionSet.cs \
+ Hyena.SExpEngine/ListFunctionSet.cs \
+ Hyena.SExpEngine/Literals.cs \
+ Hyena.SExpEngine/LogicFunctionSet.cs \
+ Hyena.SExpEngine/Parser.cs \
+ Hyena.SExpEngine/StringFunctionSet.cs \
+ Hyena.SExpEngine/TreeNode.cs \
+ Hyena.SExpEngine/UtilityFunctionSet.cs \
+ Hyena/ApplicationContext.cs \
+ Hyena/ConsoleCrayon.cs \
+ Hyena/CryptoUtil.cs \
+ Hyena/DateTimeUtil.cs \
+ Hyena/Delegates.cs \
+ Hyena/EventArgs.cs \
+ Hyena/IUndoAction.cs \
+ Hyena/Log.cs \
+ Hyena/Paths.cs \
+ Hyena/PlatformDetection.cs \
+ Hyena/StringUtil.cs \
+ Hyena/Tests/CryptoUtilTests.cs \
+ Hyena/Tests/DateTimeUtilTests.cs \
+ Hyena/Tests/StringUtilTests.cs \
+ Hyena/Tests/TestBase.cs \
+ Hyena/ThreadAssist.cs \
+ Hyena/Timer.cs \
+ Hyena/UndoManager.cs \
+ Hyena/XdgBaseDirectorySpec.cs \
+ System.Web/Helpers.cs \
+ System.Web/HttpUtility.cs
+
+
+# Initializers
+MONO_BASE_PATH =
+MONO_ADDINS_PATH =
+
+# Install Paths
+DEFAULT_INSTALL_DIR = $(pkglibdir)
+BACKENDS_INSTALL_DIR = $(DEFAULT_INSTALL_DIR)/Backends
+EXTENSIONS_INSTALL_DIR = $(DEFAULT_INSTALL_DIR)/Extensions
+DIR_DOCS = $(top_builddir)/docs
+DIR_EXTENSIONS = $(top_builddir)/extensions
+DIR_ICONS = $(top_builddir)/icons
+DIR_JPEGTRAN = $(top_builddir)/lib/libjpegtran
+DIR_LIBFSPOT = $(top_builddir)/lib/libfspot
+DIR_SEMWEB = $(top_builddir)/lib/semweb
+DIR_SRC = $(top_builddir)/src
+DIR_GIOSHARP = $(top_builddir)/lib/gio-sharp/gio
+DIR_GTKSHARPBEANS = $(top_builddir)/lib/gtk-sharp-beans
+DIR_UNIQUESHARP = $(top_builddir)/lib/unique-sharp/unique
+DIR_BIN = $(top_builddir)/bin
+
+# External libraries to link against, generated from configure
+LINK_SYSTEM = -r:System
+LINK_SYSTEMDATA = -r:System.Data
+LINK_SYSTEM_WEB = -r:System.Web
+LINK_MONO_POSIX = -r:Mono.Posix
+LINK_MONO_CAIRO = -r:Mono.Cairo
+LINK_MONO_SIMD = -r:Mono.Simd
+LINK_MONODATA = -r:Mono.Data
+LINK_MONO_DATA_SQLITECLIENT = -r:Mono.Data.SqliteClient
+LINK_ICSHARP_ZIP_LIB = -r:ICSharpCode.SharpZipLib
+LINK_KEYRING = $(KEYRINGSHARP_LIBS)
+LINK_GLIB = $(GLIBSHARP_LIBS)
+LINK_GTK = $(GTKSHARP_LIBS)
+LINK_GNOME = $(GNOME_SHARP_LIBS)
+LINK_GCONF = $(GCONF_SHARP_LIBS)
+LINK_GLADE = -pkg:glade-sharp-2.0
+LINK_FLICKRNET = -pkg:flickrnet
+LINK_DBUS = $(NDESK_DBUS_LIBS) $(NDESK_DBUS_GLIB_LIBS)
+LINK_DBUS_NO_GLIB = $(NDESK_DBUS_LIBS)
+LINK_MONO_ADDINS_DEPS = $(MONO_ADDINS_LIBS)
+LINK_MONO_ADDINS_SETUP_DEPS = $(MONO_ADDINS_SETUP_LIBS)
+LINK_MONO_ADDINS_GUI_DEPS = $(MONO_ADDINS_GUI_LIBS)
+
+# GIO
+REF_GIO =
+LINK_GIO = -r:$(DIR_GIOSHARP)/gio-sharp.dll
+LINK_GIO_DEPS = $(REF_GIO) $(LINK_GIO)
+
+# Gtk Beans
+REF_GTK_BEANS = $(LINK_GIO_DEPS)
+LINK_GTK_BEANS = -r:$(DIR_GTKSHARPBEANS)/gtk-sharp-beans.dll
+LINK_GTK_BEANS_DEPS = $(REF_GTK_BEANS) $(LINK_GTK_BEANS)
+
+# Uniqe
+REF_UNIQUE =
+LINK_UNIQUE = -r:$(DIR_UNIQUESHARP)/unique-sharp.dll
+LINK_UNIQUE_DEPS = $(REF_UNIQUE) $(LINK_UNIQUE)
+
+# Hyena
+REF_HYENA = $(LINK_SYSTEM) $(LINK_MONO_POSIX)
+LINK_HYENA = -r:$(DIR_BIN)/Hyena.dll
+LINK_HYENA_DEPS = $(REF_HYENA) $(LINK_HYENA)
+
+# Semweb
+REF_SEMWEB = $(LINK_SYSTEMDATA) $(LINK_HYENA_DEPS)
+LINK_SEMWEB = -r:$(DIR_BIN)/SemWeb.dll
+LINK_SEMWEB_DEPS = $(REF_SEMWEB) $(LINK_SEMWEB)
+
+# Hyena.Data.Sqlite
+REF_HYENA_DATA_SQLITE = $(LINK_SQLITE)
+LINK_HYENA_DATA_SQLITE = -r:$(DIR_BIN)/Hyena.Data.Sqlite.dll
+LINK_HYENA_DATA_SQLITE_DEPS = $(REF_HYENA_DATA_SQLITE) $(LINK_HYENA_DATA_SQLITE)
+
+# Hyena.Gui
+REF_HYENA_GUI = $(LINK_HYENA_DEPS)
+LINK_HYENA_GUI = -r:$(DIR_BIN)/Hyena.Gui.dll
+LINK_HENA_GUI_DEPS = $(REF_HYENA_GUI) $(LINK_HYENA_GUI)
+
+# FSpot.Cms
+REF_FSPOT_CMS = $(LINK_GTK)
+LINK_FSPOT_CMS = -r:$(DIR_BIN)/FSpot.Cms.dll
+LINK_FSPOT_CMS_DEPS = $(REF_FSPOT_CMS) $(LINK_FSPOT_CMS)
+
+# FSpot.Utils
+REF_FSPOT_UTILS = $(LINK_HYENA_DEPS) $(LINK_GTK) $(LINK_GIO) $(LINK_MONO_CAIRO)
+LINK_FSPOT_UTILS = -r:$(DIR_BIN)/FSpot.Utils.dll
+LINK_FSPOT_UTILS_DEPS = $(REF_FSPOT_UTILS) $(LINK_FSPOT_UTILS)
+
+# FSpot.Core
+REF_FSPOT_CORE = $(LINK_FSPOT_UTILS_DEPS) $(LINK_FSPOT_CMS_DEPS)
+LINK_FSPOT_CORE = -r:$(DIR_BIN)/FSpot.Core.dll
+LINK_FSPOT_CORE_DEPS = $(REF_FSPOT_CORE) $(LINK_FSPOT_CORE)
+
+# FSpot.Query
+REF_FSPOT_QUERY = $(LINK_FSPOT_CORE_DEPS)
+LINK_FSPOT_QUERY = -r:$(DIR_BIN)/FSpot.Query.dll
+LINK_FSPOT_QUERY_DEPS = $(REF_FSPOT_QUERY) $(LINK_FSPOT_QUERY)
+
+# FSpot.JobScheduler
+REF_FSPOT_JOB_SCHEDULER = $(LINK_HYENA_DEPS)
+LINK_FSPOT_JOB_SCHEDULER = -r:$(DIR_BIN)/FSpot.JobScheduler.dll
+LINK_FSPOT_JOB_SCHEDULER_DEPS = $(REF_FSPOT_JOB_SCHEDULER) $(LINK_FSPOT_JOB_SCHEDULER)
+
+# FSpot.Bling
+REF_FSPOT_BLING = $(LINK_GTK_BEANS_DEPS) $(LINK_GLIB)
+LINK_FSPOT_BLING = -r:$(DIR_BIN)/FSpot.Bling.dll
+LINK_FSPOT_BLING_DEPS = $(REF_FSPOT_BLING) $(LINK_FSPOT_BLING)
+
+# FSpot.Platform
+REF_FSPOT_PLATFORM = $(LINK_GCONF) $(LINK_GTK) $(LINK_FSPOT_CORE_DEPS) $(LINK_DBUS)
+LINK_FSPOT_PLATFORM = -r:$(DIR_BIN)/FSpot.Platform.dll
+LINK_FSPOT_PLATFORM_DEPS = $(REF_FSPOT_PLATFORM) $(LINK_FSPOT_PLATFORM)
+
+# FSpot.Widgets
+REF_FSPOT_WIDGETS = $(LINK_FSPOT_CORE_DEPS) $(LINK_FSPOT_BLING_DEPS)
+LINK_FSPOT_WIDGETS = -r:$(DIR_BIN)/FSpot.Widgets.dll
+LINK_FSPOT_WIDGETS_DEPS = $(REF_FSPOT_WIDGETS) $(LINK_FSPOT_WIDGETS)
+
+# FSpot (executable)
+REF_FSPOT = $(LINK_FSPOT_WIDGETS_DEPS) $(LINK_FSPOT_PLATFORM_DEPS) $(LINK_FSPOT_QUERY_DEPS) \
+ $(LINK_GLIB) $(LINK_MONO_ADDINS_DEPS) $(LINK_UNIQUE_DEPS) $(LINK_MONO_ADDINS_SETUP_DEPS) \
+ $(LINK_SEMWEB_DEPS) $(LINK_GLADE) $(LINK_MONODATA) $(LINK_MONO_DATA_SQLITECLIENT) \
+ $(LINK_MONO_ADDINS_GUI_DEPS) $(LINK_FSPOT_JOB_SCHEDULER_DEPS) $(LINK_ICSHARP_ZIP_LIB) \
+ $(LINK_GNOME)
+
+# FIXME: do not link executables
+LINK_FSPOT = -r:$(DIR_BIN)/f-spot.exe
+LINK_FSPOT_DEPS = $(REF_FSPOT) $(LINK_FSPOT)
+
+# Extensions
+REF_FSPOT_EXTENSION_BLACKOUTEDITOR = $(LINK_FSPOT_DEPS)
+REF_FSPOT_EXTENSION_BWEDITOR = $(LINK_FSPOT_DEPS) $(LINK_MONO_SIMD)
+REF_FSPOT_EXTENSION_FLIPEDITOR = $(LINK_FSPOT_DEPS)
+REF_FSPOT_EXTENSION_PIXELATEEDITOR = $(LINK_FSPOT_DEPS)
+REF_FSPOT_EXTENSION_RESIZEEDITOR = $(LINK_FSPOT_DEPS)
+REF_FSPOT_EXTENSION_CDEXPORT = $(LINK_FSPOT_DEPS)
+REF_FSPOT_EXTENSION_FACEBOOKEXPORT = $(LINK_FSPOT_DEPS) $(LINK_KEYRING)
+REF_FSPOT_EXTENSION_FLICKREXPORT = $(LINK_FSPOT_DEPS) $(LINK_FLICKRNET)
+REF_FSPOT_EXTENSION_FOLDEREXPORT = $(LINK_FSPOT_DEPS) $(LINK_SYSTEM_WEB)
+REF_FSPOT_EXTENSION_GALLERYEXPORT = $(LINK_FSPOT_DEPS)
+REF_MONO_GOOGLE = $(LINK_HYENA_DEPS)
+LINK_MONO_GOOGLE = -r:$(DIR_BIN)/Mono.Google.dll
+LINK_MONO_GOOGLE_DEPS = $(REF_MONO_GOOGLE) $(LINK_MONO_GOOGLE)
+REF_FSPOT_EXTENSION_PICASAWEBEXPORT = $(LINK_FSPOT_DEPS) $(LINK_MONO_GOOGLE) $(LINK_KEYRING)
+REF_SMUGMUGNET = $(LINK_FSPOT_DEPS)
+LINK_SMUGMUGNET = -r:$(DIR_BIN)/SmugMugNet.dll
+LINK_SMUGMUGNET_DEPS = $(REF_SMUGMUGNET) $(LINK_SMUGMUGNET)
+REF_FSPOT_EXTENSION_SMUGMUGEXPORT = $(LINK_SMUGMUGNET_DEPS) $(LINK_KEYRING)
+REF_MONO_TABBLO = $(LINK_HYENA_DEPS)
+LINK_MONO_TABBLO = -r:$(DIR_BIN)/Mono.Tabblo.dll
+LINK_MONO_TABBLO_DEPS = $(REF_MONO_TABBLO) $(LINK_MONO_TABBLO)
+REF_FSPOT_EXTENSION_TABBLOEXPORT = $(LINK_FSPOT_DEPS) $(LINK_KEYRING) $(LINK_MONO_TABBLO_DEPS)
+REF_FSPOT_EXTENSION_ZIPEXPORT = $(LINK_FSPOT_DEPS)
+REF_FSPOT_EXTENSION_CHANGEPHOTOPATH = $(LINK_FSPOT_DEPS)
+REF_FSPOT_EXTENSION_DEVELOPINUFRAW = $(LINK_FSPOT_DEPS)
+REF_FSPOT_EXTENSION_HASHJOB = $(LINK_FSPOT_DEPS)
+REF_FSPOT_EXTENSION_LIVEWEBGALLERY = $(LINK_FSPOT_DEPS)
+REF_FSPOT_EXTENSION_MERGEDB = $(LINK_FSPOT_DEPS)
+REF_FSPOT_EXTENSION_RAWPLUSJPEG = $(LINK_FSPOT_DEPS)
+REF_FSPOT_EXTENSION_RETROACTIVEROLL = $(LINK_FSPOT_DEPS)
+REF_FSPOT_EXTENSION_SCREENSAVERCONFIG = $(LINK_FSPOT_DEPS)
+REF_FSPOT_EXTENSION_COVERTRANSITION = $(LINK_FSPOT_DEPS)
+
+# Cute hack to replace a space with something
+colon := :
+empty :=
+space := $(empty) $(empty)
+
+# Build path to allow running uninstalled
+RUN_PATH = $(subst $(space),$(colon), $(MONO_BASE_PATH))
+UNIQUE_FILTER_PIPE = tr [:space:] \\n | sort | uniq
+BUILD_DATA_DIR = $(top_builddir)/bin/share/$(PACKAGE)
+
+# Since all other attempts failed, we currently go this way:
+# This code adds the file specified in ASSEMBLY_INFO_SOURCE to SOURCES_BUILD.
+# If no such file is specified, the default AssemblyInfo.cs is used.
+ASSEMBLY_INFO_SOURCE_REAL = \
+ $(shell if [ "$(ASSEMBLY_INFO_SOURCE)" ]; \
+ then \
+ echo "$(addprefix $(srcdir)/, $(ASSEMBLY_INFO_SOURCE))"; \
+ else \
+ echo "$(top_srcdir)/src/AssemblyInfo.cs"; \
+ fi)
+
+SOURCES_BUILD = $(addprefix $(srcdir)/, $(SOURCES)) \
+ $(ASSEMBLY_INFO_SOURCE_REAL)
+RESOURCES_EXPANDED = $(addprefix $(srcdir)/, $(RESOURCES))
+RESOURCES_BUILD = $(foreach resource, $(RESOURCES_EXPANDED), \
+ -resource:$(resource),$(notdir $(resource)))
+
+INSTALL_ICONS = $(top_srcdir)/build/private-icon-theme-installer "$(mkinstalldirs)" "$(INSTALL_DATA)"
+THEME_ICONS_SOURCE = $(wildcard $(srcdir)/ThemeIcons/*/*/*.png) $(wildcard $(srcdir)/ThemeIcons/scalable/*/*.svg)
+THEME_ICONS_RELATIVE = $(subst $(srcdir)/ThemeIcons/, , $(THEME_ICONS_SOURCE))
+ASSEMBLY_EXTENSION = $(strip $(patsubst library, dll, $(TARGET)))
+ASSEMBLY_FILE = $(top_builddir)/bin/$(ASSEMBLY).$(ASSEMBLY_EXTENSION)
+INSTALL_DIR_RESOLVED = $(firstword $(subst , $(DEFAULT_INSTALL_DIR), $(INSTALL_DIR)))
+ at ENABLE_TESTS_TRUE@ENABLE_TESTS_FLAG = "-define:ENABLE_TESTS"
+ at ENABLE_ATK_TRUE@ENABLE_ATK_FLAG = "-define:ENABLE_ATK"
+FILTERED_LINK = $(shell echo "$(LINK)" | $(UNIQUE_FILTER_PIPE))
+DEP_LINK = $(shell echo "$(LINK)" | $(UNIQUE_FILTER_PIPE) | sed s,-r:,,g | grep '$(top_builddir)/bin/')
+OUTPUT_FILES = \
+ $(ASSEMBLY_FILE) \
+ $(ASSEMBLY_FILE).mdb
+
+moduledir = $(INSTALL_DIR_RESOLVED)
+module_SCRIPTS = $(OUTPUT_FILES)
+EXTRA_DIST = $(SOURCES_BUILD) $(RESOURCES_EXPANDED) \
+ $(THEME_ICONS_SOURCE) hyena.pc.in
+CLEANFILES = $(OUTPUT_FILES) $(ASSEMBLY_FILE).config
+DISTCLEANFILES = *.pidb
+MAINTAINERCLEANFILES = Makefile.in
+all: all-am
+
+.SUFFIXES:
+$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(top_srcdir)/build/build.mk $(top_srcdir)/build/build.environment.mk $(top_srcdir)/build/build.rules.mk $(am__configure_deps)
+ @for dep in $?; do \
+ case '$(am__configure_deps)' in \
+ *$$dep*) \
+ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \
+ && { if test -f $@; then exit 0; else break; fi; }; \
+ exit 1;; \
+ esac; \
+ done; \
+ echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign lib/Hyena/src/Hyena/Makefile'; \
+ $(am__cd) $(top_srcdir) && \
+ $(AUTOMAKE) --foreign lib/Hyena/src/Hyena/Makefile
+.PRECIOUS: Makefile
+Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
+ @case '$?' in \
+ *config.status*) \
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \
+ *) \
+ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \
+ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \
+ esac;
+
+$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+
+$(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps)
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps)
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(am__aclocal_m4_deps):
+install-moduleSCRIPTS: $(module_SCRIPTS)
+ @$(NORMAL_INSTALL)
+ test -z "$(moduledir)" || $(MKDIR_P) "$(DESTDIR)$(moduledir)"
+ @list='$(module_SCRIPTS)'; test -n "$(moduledir)" || list=; \
+ for p in $$list; do \
+ if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \
+ if test -f "$$d$$p"; then echo "$$d$$p"; echo "$$p"; else :; fi; \
+ done | \
+ sed -e 'p;s,.*/,,;n' \
+ -e 'h;s|.*|.|' \
+ -e 'p;x;s,.*/,,;$(transform)' | sed 'N;N;N;s,\n, ,g' | \
+ $(AWK) 'BEGIN { files["."] = ""; dirs["."] = 1; } \
+ { d=$$3; if (dirs[d] != 1) { print "d", d; dirs[d] = 1 } \
+ if ($$2 == $$4) { files[d] = files[d] " " $$1; \
+ if (++n[d] == $(am__install_max)) { \
+ print "f", d, files[d]; n[d] = 0; files[d] = "" } } \
+ else { print "f", d "/" $$4, $$1 } } \
+ END { for (d in files) print "f", d, files[d] }' | \
+ while read type dir files; do \
+ if test "$$dir" = .; then dir=; else dir=/$$dir; fi; \
+ test -z "$$files" || { \
+ echo " $(INSTALL_SCRIPT) $$files '$(DESTDIR)$(moduledir)$$dir'"; \
+ $(INSTALL_SCRIPT) $$files "$(DESTDIR)$(moduledir)$$dir" || exit $$?; \
+ } \
+ ; done
+
+uninstall-moduleSCRIPTS:
+ @$(NORMAL_UNINSTALL)
+ @list='$(module_SCRIPTS)'; test -n "$(moduledir)" || exit 0; \
+ files=`for p in $$list; do echo "$$p"; done | \
+ sed -e 's,.*/,,;$(transform)'`; \
+ test -n "$$list" || exit 0; \
+ echo " ( cd '$(DESTDIR)$(moduledir)' && rm -f" $$files ")"; \
+ cd "$(DESTDIR)$(moduledir)" && rm -f $$files
+
+mostlyclean-libtool:
+ -rm -f *.lo
+
+clean-libtool:
+ -rm -rf .libs _libs
+tags: TAGS
+TAGS:
+
+ctags: CTAGS
+CTAGS:
+
+
+distdir: $(DISTFILES)
+ @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; \
+ if test -d $$d/$$file; then \
+ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \
+ if test -d "$(distdir)/$$file"; then \
+ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
+ fi; \
+ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
+ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \
+ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
+ fi; \
+ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \
+ else \
+ test -f "$(distdir)/$$file" \
+ || cp -p $$d/$$file "$(distdir)/$$file" \
+ || exit 1; \
+ fi; \
+ done
+check-am: all-am
+check: check-am
+all-am: Makefile $(SCRIPTS)
+installdirs:
+ for dir in "$(DESTDIR)$(moduledir)"; do \
+ test -z "$$dir" || $(MKDIR_P) "$$dir"; \
+ done
+install: install-am
+install-exec: install-exec-am
+install-data: install-data-am
+uninstall: uninstall-am
+
+install-am: all-am
+ @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
+
+installcheck: installcheck-am
+install-strip:
+ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+ `test -z '$(STRIP)' || \
+ echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install
+mostlyclean-generic:
+
+clean-generic:
+ -test -z "$(CLEANFILES)" || rm -f $(CLEANFILES)
+
+distclean-generic:
+ -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
+ -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES)
+ -test -z "$(DISTCLEANFILES)" || rm -f $(DISTCLEANFILES)
+
+maintainer-clean-generic:
+ @echo "This command is intended for maintainers to use"
+ @echo "it deletes files that may require special tools to rebuild."
+ -test -z "$(MAINTAINERCLEANFILES)" || rm -f $(MAINTAINERCLEANFILES)
+clean: clean-am
+
+clean-am: clean-generic clean-libtool mostlyclean-am
+
+distclean: distclean-am
+ -rm -f Makefile
+distclean-am: clean-am distclean-generic
+
+dvi: dvi-am
+
+dvi-am:
+
+html: html-am
+
+html-am:
+
+info: info-am
+
+info-am:
+
+install-data-am: install-data-local install-moduleSCRIPTS
+
+install-dvi: install-dvi-am
+
+install-dvi-am:
+
+install-exec-am:
+
+install-html: install-html-am
+
+install-html-am:
+
+install-info: install-info-am
+
+install-info-am:
+
+install-man:
+
+install-pdf: install-pdf-am
+
+install-pdf-am:
+
+install-ps: install-ps-am
+
+install-ps-am:
+
+installcheck-am:
+
+maintainer-clean: maintainer-clean-am
+ -rm -f Makefile
+maintainer-clean-am: distclean-am maintainer-clean-generic
+
+mostlyclean: mostlyclean-am
+
+mostlyclean-am: mostlyclean-generic mostlyclean-libtool
+
+pdf: pdf-am
+
+pdf-am:
+
+ps: ps-am
+
+ps-am:
+
+uninstall-am: uninstall-local uninstall-moduleSCRIPTS
+
+.MAKE: install-am install-strip
+
+.PHONY: all all-am check check-am clean clean-generic clean-libtool \
+ distclean distclean-generic distclean-libtool distdir dvi \
+ dvi-am html html-am info info-am install install-am \
+ install-data install-data-am install-data-local install-dvi \
+ install-dvi-am install-exec install-exec-am install-html \
+ install-html-am install-info install-info-am install-man \
+ install-moduleSCRIPTS install-pdf install-pdf-am install-ps \
+ install-ps-am install-strip installcheck installcheck-am \
+ installdirs maintainer-clean maintainer-clean-generic \
+ mostlyclean mostlyclean-generic mostlyclean-libtool pdf pdf-am \
+ ps ps-am uninstall uninstall-am uninstall-local \
+ uninstall-moduleSCRIPTS
+
+
+all: $(ASSEMBLY_FILE) theme-icons
+
+run:
+ @pushd $(top_builddir); \
+ make run; \
+ popd;
+
+# uncommented for now.
+# tests are currently excuted from Makefile in $(top_builddir)
+#test:
+# @pushd $(top_builddir)/tests; \
+# make $(ASSEMBLY); \
+# popd;
+
+build-debug:
+ @echo $(DEP_LINK)
+
+$(ASSEMBLY_FILE).mdb: $(ASSEMBLY_FILE)
+
+$(ASSEMBLY_FILE): $(SOURCES_BUILD) $(RESOURCES_EXPANDED) $(DEP_LINK)
+ @mkdir -p $(top_builddir)/bin
+ @if [ ! "x$(ENABLE_RELEASE)" = "xyes" ]; then \
+ $(top_srcdir)/build/dll-map-makefile-verifier $(srcdir)/Makefile.am $(srcdir)/$(notdir $@.config) && \
+ $(MONO) $(top_builddir)/build/dll-map-verifier.exe $(srcdir)/$(notdir $@.config) -iwinmm -ilibbanshee -ilibbnpx11 -ilibc -ilibc.so.6 -iintl -ilibmtp.dll -ilibigemacintegration.dylib -iCFRelease $(SOURCES_BUILD); \
+ fi;
+ $(MCS) \
+ $(GMCS_FLAGS) \
+ $(ASSEMBLY_BUILD_FLAGS) \
+ -nowarn:0278 -nowarn:0078 $$warn \
+ -define:HAVE_GTK_2_10 -define:NET_2_0 \
+ -debug -target:$(TARGET) -out:$@ \
+ $(BUILD_DEFINES) $(ENABLE_TESTS_FLAG) $(ENABLE_ATK_FLAG) \
+ $(FILTERED_LINK) $(RESOURCES_BUILD) $(SOURCES_BUILD)
+ @if [ -e $(srcdir)/$(notdir $@.config) ]; then \
+ cp $(srcdir)/$(notdir $@.config) $(top_builddir)/bin; \
+ fi;
+ @if [ ! -z "$(EXTRA_BUNDLE)" ]; then \
+ cp $(EXTRA_BUNDLE) $(top_builddir)/bin; \
+ fi;
+
+theme-icons: $(THEME_ICONS_SOURCE)
+ @$(INSTALL_ICONS) -il "$(BUILD_DATA_DIR)" "$(srcdir)" $(THEME_ICONS_RELATIVE)
+
+install-data-local: $(THEME_ICONS_SOURCE)
+ @$(INSTALL_ICONS) -i "$(DESTDIR)$(pkgdatadir)" "$(srcdir)" $(THEME_ICONS_RELATIVE)
+
+uninstall-local: $(THEME_ICONS_SOURCE)
+ @$(INSTALL_ICONS) -u "$(DESTDIR)$(pkgdatadir)" "$(srcdir)" $(THEME_ICONS_RELATIVE)
+
+# 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.
+.NOEXPORT:
diff --git a/lib/Hyena/src/Hyena/System.Web/Helpers.cs b/lib/Hyena/src/Hyena/System.Web/Helpers.cs
new file mode 100644
index 0000000..2026a96
--- /dev/null
+++ b/lib/Hyena/src/Hyena/System.Web/Helpers.cs
@@ -0,0 +1,38 @@
+//
+// System.Web.Util.Helpers
+//
+// Authors:
+// Marek Habersack (mhabersack at novell.com)
+//
+// (C) 2009 Novell, Inc (http://novell.com)
+
+//
+// Permission is hereby granted, free of charge, to any person obtaining
+// a copy of this software and associated documentation files (the
+// "Software"), to deal in the Software without restriction, including
+// without limitation the rights to use, copy, modify, merge, publish,
+// distribute, sublicense, and/or sell copies of the Software, and to
+// permit persons to whom the Software is furnished to do so, subject to
+// the following conditions:
+//
+// The above copyright notice and this permission notice shall be
+// included in all copies or substantial portions of the Software.
+//
+// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
+// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
+// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
+// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+//
+using System;
+using System.Globalization;
+
+namespace System.Web.Util
+{
+ class Helpers
+ {
+ public static readonly CultureInfo InvariantCulture = CultureInfo.InvariantCulture;
+ }
+}
diff --git a/lib/Hyena/src/Hyena/System.Web/HttpUtility.cs b/lib/Hyena/src/Hyena/System.Web/HttpUtility.cs
new file mode 100644
index 0000000..4ffdc1d
--- /dev/null
+++ b/lib/Hyena/src/Hyena/System.Web/HttpUtility.cs
@@ -0,0 +1,1136 @@
+//
+// System.Web.HttpUtility
+//
+// Authors:
+// Patrik Torstensson (Patrik.Torstensson at labs2.com)
+// Wictor Wilén (decode/encode functions) (wictor at ibizkit.se)
+// Tim Coleman (tim at timcoleman.com)
+// Gonzalo Paniagua Javier (gonzalo at ximian.com)
+//
+// Copyright (C) 2005 Novell, Inc (http://www.novell.com)
+//
+// Permission is hereby granted, free of charge, to any person obtaining
+// a copy of this software and associated documentation files (the
+// "Software"), to deal in the Software without restriction, including
+// without limitation the rights to use, copy, modify, merge, publish,
+// distribute, sublicense, and/or sell copies of the Software, and to
+// permit persons to whom the Software is furnished to do so, subject to
+// the following conditions:
+//
+// The above copyright notice and this permission notice shall be
+// included in all copies or substantial portions of the Software.
+//
+// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
+// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
+// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
+// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+//
+
+using System.Collections;
+using System.Collections.Specialized;
+using System.Globalization;
+using System.IO;
+using System.Security.Permissions;
+using System.Text;
+using System.Web.Util;
+
+#if NET_2_0
+using System.Collections.Generic;
+#endif
+
+namespace System.Web {
+
+#if !MONOTOUCH
+ // CAS - no InheritanceDemand here as the class is sealed
+ [AspNetHostingPermission (SecurityAction.LinkDemand, Level = AspNetHostingPermissionLevel.Minimal)]
+#endif
+
+ public sealed class HttpUtility {
+ #region Fields
+
+ static Hashtable entities;
+ static object lock_ = new object ();
+
+ #endregion // Fields
+
+ static Hashtable Entities {
+ get {
+ lock (lock_) {
+ if (entities == null)
+ InitEntities ();
+
+ return entities;
+ }
+ }
+ }
+
+ #region Constructors
+
+ static void InitEntities ()
+ {
+ // Build the hash table of HTML entity references. This list comes
+ // from the HTML 4.01 W3C recommendation.
+ entities = new Hashtable ();
+ entities.Add ("nbsp", '\u00A0');
+ entities.Add ("iexcl", '\u00A1');
+ entities.Add ("cent", '\u00A2');
+ entities.Add ("pound", '\u00A3');
+ entities.Add ("curren", '\u00A4');
+ entities.Add ("yen", '\u00A5');
+ entities.Add ("brvbar", '\u00A6');
+ entities.Add ("sect", '\u00A7');
+ entities.Add ("uml", '\u00A8');
+ entities.Add ("copy", '\u00A9');
+ entities.Add ("ordf", '\u00AA');
+ entities.Add ("laquo", '\u00AB');
+ entities.Add ("not", '\u00AC');
+ entities.Add ("shy", '\u00AD');
+ entities.Add ("reg", '\u00AE');
+ entities.Add ("macr", '\u00AF');
+ entities.Add ("deg", '\u00B0');
+ entities.Add ("plusmn", '\u00B1');
+ entities.Add ("sup2", '\u00B2');
+ entities.Add ("sup3", '\u00B3');
+ entities.Add ("acute", '\u00B4');
+ entities.Add ("micro", '\u00B5');
+ entities.Add ("para", '\u00B6');
+ entities.Add ("middot", '\u00B7');
+ entities.Add ("cedil", '\u00B8');
+ entities.Add ("sup1", '\u00B9');
+ entities.Add ("ordm", '\u00BA');
+ entities.Add ("raquo", '\u00BB');
+ entities.Add ("frac14", '\u00BC');
+ entities.Add ("frac12", '\u00BD');
+ entities.Add ("frac34", '\u00BE');
+ entities.Add ("iquest", '\u00BF');
+ entities.Add ("Agrave", '\u00C0');
+ entities.Add ("Aacute", '\u00C1');
+ entities.Add ("Acirc", '\u00C2');
+ entities.Add ("Atilde", '\u00C3');
+ entities.Add ("Auml", '\u00C4');
+ entities.Add ("Aring", '\u00C5');
+ entities.Add ("AElig", '\u00C6');
+ entities.Add ("Ccedil", '\u00C7');
+ entities.Add ("Egrave", '\u00C8');
+ entities.Add ("Eacute", '\u00C9');
+ entities.Add ("Ecirc", '\u00CA');
+ entities.Add ("Euml", '\u00CB');
+ entities.Add ("Igrave", '\u00CC');
+ entities.Add ("Iacute", '\u00CD');
+ entities.Add ("Icirc", '\u00CE');
+ entities.Add ("Iuml", '\u00CF');
+ entities.Add ("ETH", '\u00D0');
+ entities.Add ("Ntilde", '\u00D1');
+ entities.Add ("Ograve", '\u00D2');
+ entities.Add ("Oacute", '\u00D3');
+ entities.Add ("Ocirc", '\u00D4');
+ entities.Add ("Otilde", '\u00D5');
+ entities.Add ("Ouml", '\u00D6');
+ entities.Add ("times", '\u00D7');
+ entities.Add ("Oslash", '\u00D8');
+ entities.Add ("Ugrave", '\u00D9');
+ entities.Add ("Uacute", '\u00DA');
+ entities.Add ("Ucirc", '\u00DB');
+ entities.Add ("Uuml", '\u00DC');
+ entities.Add ("Yacute", '\u00DD');
+ entities.Add ("THORN", '\u00DE');
+ entities.Add ("szlig", '\u00DF');
+ entities.Add ("agrave", '\u00E0');
+ entities.Add ("aacute", '\u00E1');
+ entities.Add ("acirc", '\u00E2');
+ entities.Add ("atilde", '\u00E3');
+ entities.Add ("auml", '\u00E4');
+ entities.Add ("aring", '\u00E5');
+ entities.Add ("aelig", '\u00E6');
+ entities.Add ("ccedil", '\u00E7');
+ entities.Add ("egrave", '\u00E8');
+ entities.Add ("eacute", '\u00E9');
+ entities.Add ("ecirc", '\u00EA');
+ entities.Add ("euml", '\u00EB');
+ entities.Add ("igrave", '\u00EC');
+ entities.Add ("iacute", '\u00ED');
+ entities.Add ("icirc", '\u00EE');
+ entities.Add ("iuml", '\u00EF');
+ entities.Add ("eth", '\u00F0');
+ entities.Add ("ntilde", '\u00F1');
+ entities.Add ("ograve", '\u00F2');
+ entities.Add ("oacute", '\u00F3');
+ entities.Add ("ocirc", '\u00F4');
+ entities.Add ("otilde", '\u00F5');
+ entities.Add ("ouml", '\u00F6');
+ entities.Add ("divide", '\u00F7');
+ entities.Add ("oslash", '\u00F8');
+ entities.Add ("ugrave", '\u00F9');
+ entities.Add ("uacute", '\u00FA');
+ entities.Add ("ucirc", '\u00FB');
+ entities.Add ("uuml", '\u00FC');
+ entities.Add ("yacute", '\u00FD');
+ entities.Add ("thorn", '\u00FE');
+ entities.Add ("yuml", '\u00FF');
+ entities.Add ("fnof", '\u0192');
+ entities.Add ("Alpha", '\u0391');
+ entities.Add ("Beta", '\u0392');
+ entities.Add ("Gamma", '\u0393');
+ entities.Add ("Delta", '\u0394');
+ entities.Add ("Epsilon", '\u0395');
+ entities.Add ("Zeta", '\u0396');
+ entities.Add ("Eta", '\u0397');
+ entities.Add ("Theta", '\u0398');
+ entities.Add ("Iota", '\u0399');
+ entities.Add ("Kappa", '\u039A');
+ entities.Add ("Lambda", '\u039B');
+ entities.Add ("Mu", '\u039C');
+ entities.Add ("Nu", '\u039D');
+ entities.Add ("Xi", '\u039E');
+ entities.Add ("Omicron", '\u039F');
+ entities.Add ("Pi", '\u03A0');
+ entities.Add ("Rho", '\u03A1');
+ entities.Add ("Sigma", '\u03A3');
+ entities.Add ("Tau", '\u03A4');
+ entities.Add ("Upsilon", '\u03A5');
+ entities.Add ("Phi", '\u03A6');
+ entities.Add ("Chi", '\u03A7');
+ entities.Add ("Psi", '\u03A8');
+ entities.Add ("Omega", '\u03A9');
+ entities.Add ("alpha", '\u03B1');
+ entities.Add ("beta", '\u03B2');
+ entities.Add ("gamma", '\u03B3');
+ entities.Add ("delta", '\u03B4');
+ entities.Add ("epsilon", '\u03B5');
+ entities.Add ("zeta", '\u03B6');
+ entities.Add ("eta", '\u03B7');
+ entities.Add ("theta", '\u03B8');
+ entities.Add ("iota", '\u03B9');
+ entities.Add ("kappa", '\u03BA');
+ entities.Add ("lambda", '\u03BB');
+ entities.Add ("mu", '\u03BC');
+ entities.Add ("nu", '\u03BD');
+ entities.Add ("xi", '\u03BE');
+ entities.Add ("omicron", '\u03BF');
+ entities.Add ("pi", '\u03C0');
+ entities.Add ("rho", '\u03C1');
+ entities.Add ("sigmaf", '\u03C2');
+ entities.Add ("sigma", '\u03C3');
+ entities.Add ("tau", '\u03C4');
+ entities.Add ("upsilon", '\u03C5');
+ entities.Add ("phi", '\u03C6');
+ entities.Add ("chi", '\u03C7');
+ entities.Add ("psi", '\u03C8');
+ entities.Add ("omega", '\u03C9');
+ entities.Add ("thetasym", '\u03D1');
+ entities.Add ("upsih", '\u03D2');
+ entities.Add ("piv", '\u03D6');
+ entities.Add ("bull", '\u2022');
+ entities.Add ("hellip", '\u2026');
+ entities.Add ("prime", '\u2032');
+ entities.Add ("Prime", '\u2033');
+ entities.Add ("oline", '\u203E');
+ entities.Add ("frasl", '\u2044');
+ entities.Add ("weierp", '\u2118');
+ entities.Add ("image", '\u2111');
+ entities.Add ("real", '\u211C');
+ entities.Add ("trade", '\u2122');
+ entities.Add ("alefsym", '\u2135');
+ entities.Add ("larr", '\u2190');
+ entities.Add ("uarr", '\u2191');
+ entities.Add ("rarr", '\u2192');
+ entities.Add ("darr", '\u2193');
+ entities.Add ("harr", '\u2194');
+ entities.Add ("crarr", '\u21B5');
+ entities.Add ("lArr", '\u21D0');
+ entities.Add ("uArr", '\u21D1');
+ entities.Add ("rArr", '\u21D2');
+ entities.Add ("dArr", '\u21D3');
+ entities.Add ("hArr", '\u21D4');
+ entities.Add ("forall", '\u2200');
+ entities.Add ("part", '\u2202');
+ entities.Add ("exist", '\u2203');
+ entities.Add ("empty", '\u2205');
+ entities.Add ("nabla", '\u2207');
+ entities.Add ("isin", '\u2208');
+ entities.Add ("notin", '\u2209');
+ entities.Add ("ni", '\u220B');
+ entities.Add ("prod", '\u220F');
+ entities.Add ("sum", '\u2211');
+ entities.Add ("minus", '\u2212');
+ entities.Add ("lowast", '\u2217');
+ entities.Add ("radic", '\u221A');
+ entities.Add ("prop", '\u221D');
+ entities.Add ("infin", '\u221E');
+ entities.Add ("ang", '\u2220');
+ entities.Add ("and", '\u2227');
+ entities.Add ("or", '\u2228');
+ entities.Add ("cap", '\u2229');
+ entities.Add ("cup", '\u222A');
+ entities.Add ("int", '\u222B');
+ entities.Add ("there4", '\u2234');
+ entities.Add ("sim", '\u223C');
+ entities.Add ("cong", '\u2245');
+ entities.Add ("asymp", '\u2248');
+ entities.Add ("ne", '\u2260');
+ entities.Add ("equiv", '\u2261');
+ entities.Add ("le", '\u2264');
+ entities.Add ("ge", '\u2265');
+ entities.Add ("sub", '\u2282');
+ entities.Add ("sup", '\u2283');
+ entities.Add ("nsub", '\u2284');
+ entities.Add ("sube", '\u2286');
+ entities.Add ("supe", '\u2287');
+ entities.Add ("oplus", '\u2295');
+ entities.Add ("otimes", '\u2297');
+ entities.Add ("perp", '\u22A5');
+ entities.Add ("sdot", '\u22C5');
+ entities.Add ("lceil", '\u2308');
+ entities.Add ("rceil", '\u2309');
+ entities.Add ("lfloor", '\u230A');
+ entities.Add ("rfloor", '\u230B');
+ entities.Add ("lang", '\u2329');
+ entities.Add ("rang", '\u232A');
+ entities.Add ("loz", '\u25CA');
+ entities.Add ("spades", '\u2660');
+ entities.Add ("clubs", '\u2663');
+ entities.Add ("hearts", '\u2665');
+ entities.Add ("diams", '\u2666');
+ entities.Add ("quot", '\u0022');
+ entities.Add ("amp", '\u0026');
+ entities.Add ("lt", '\u003C');
+ entities.Add ("gt", '\u003E');
+ entities.Add ("OElig", '\u0152');
+ entities.Add ("oelig", '\u0153');
+ entities.Add ("Scaron", '\u0160');
+ entities.Add ("scaron", '\u0161');
+ entities.Add ("Yuml", '\u0178');
+ entities.Add ("circ", '\u02C6');
+ entities.Add ("tilde", '\u02DC');
+ entities.Add ("ensp", '\u2002');
+ entities.Add ("emsp", '\u2003');
+ entities.Add ("thinsp", '\u2009');
+ entities.Add ("zwnj", '\u200C');
+ entities.Add ("zwj", '\u200D');
+ entities.Add ("lrm", '\u200E');
+ entities.Add ("rlm", '\u200F');
+ entities.Add ("ndash", '\u2013');
+ entities.Add ("mdash", '\u2014');
+ entities.Add ("lsquo", '\u2018');
+ entities.Add ("rsquo", '\u2019');
+ entities.Add ("sbquo", '\u201A');
+ entities.Add ("ldquo", '\u201C');
+ entities.Add ("rdquo", '\u201D');
+ entities.Add ("bdquo", '\u201E');
+ entities.Add ("dagger", '\u2020');
+ entities.Add ("Dagger", '\u2021');
+ entities.Add ("permil", '\u2030');
+ entities.Add ("lsaquo", '\u2039');
+ entities.Add ("rsaquo", '\u203A');
+ entities.Add ("euro", '\u20AC');
+ }
+
+ public HttpUtility ()
+ {
+ }
+
+ #endregion // Constructors
+
+ #region Methods
+
+ public static void HtmlAttributeEncode (string s, TextWriter output)
+ {
+ output.Write(HtmlAttributeEncode(s));
+ }
+
+ public static string HtmlAttributeEncode (string s)
+ {
+ if (null == s)
+ return null;
+
+ bool needEncode = false;
+ for (int i = 0; i < s.Length; i++) {
+ if (s [i] == '&' || s [i] == '"' || s [i] == '<') {
+ needEncode = true;
+ break;
+ }
+ }
+
+ if (!needEncode)
+ return s;
+
+ StringBuilder output = new StringBuilder ();
+ int len = s.Length;
+ for (int i = 0; i < len; i++)
+ switch (s [i]) {
+ case '&' :
+ output.Append ("&");
+ break;
+ case '"' :
+ output.Append (""");
+ break;
+ case '<':
+ output.Append ("<");
+ break;
+ default:
+ output.Append (s [i]);
+ break;
+ }
+
+ return output.ToString();
+ }
+
+ public static string UrlDecode (string str)
+ {
+ return UrlDecode(str, Encoding.UTF8);
+ }
+
+ static char [] GetChars (MemoryStream b, Encoding e)
+ {
+ return e.GetChars (b.GetBuffer (), 0, (int) b.Length);
+ }
+
+ static void WriteCharBytes (IList buf, char ch, Encoding e)
+ {
+ if (ch > 255) {
+ foreach (byte b in e.GetBytes (new char[] { ch }))
+ buf.Add (b);
+ } else
+ buf.Add ((byte)ch);
+ }
+
+ public static string UrlDecode (string s, Encoding e)
+ {
+ if (null == s)
+ return null;
+
+ if (s.IndexOf ('%') == -1 && s.IndexOf ('+') == -1)
+ return s;
+
+ if (e == null)
+ e = Encoding.UTF8;
+
+ long len = s.Length;
+#if NET_2_0
+ var bytes = new List <byte> ();
+#else
+ ArrayList bytes = new ArrayList ();
+#endif
+ int xchar;
+ char ch;
+
+ for (int i = 0; i < len; i++) {
+ ch = s [i];
+ if (ch == '%' && i + 2 < len && s [i + 1] != '%') {
+ if (s [i + 1] == 'u' && i + 5 < len) {
+ // unicode hex sequence
+ xchar = GetChar (s, i + 2, 4);
+ if (xchar != -1) {
+ WriteCharBytes (bytes, (char)xchar, e);
+ i += 5;
+ } else
+ WriteCharBytes (bytes, '%', e);
+ } else if ((xchar = GetChar (s, i + 1, 2)) != -1) {
+ WriteCharBytes (bytes, (char)xchar, e);
+ i += 2;
+ } else {
+ WriteCharBytes (bytes, '%', e);
+ }
+ continue;
+ }
+
+ if (ch == '+')
+ WriteCharBytes (bytes, ' ', e);
+ else
+ WriteCharBytes (bytes, ch, e);
+ }
+
+#if NET_2_0
+ byte[] buf = bytes.ToArray ();
+#else
+ byte[] buf = (byte[])bytes.ToArray (typeof (byte));
+#endif
+ bytes = null;
+ return e.GetString (buf);
+
+ }
+
+ public static string UrlDecode (byte [] bytes, Encoding e)
+ {
+ if (bytes == null)
+ return null;
+
+ return UrlDecode (bytes, 0, bytes.Length, e);
+ }
+
+ static int GetInt (byte b)
+ {
+ char c = (char) b;
+ if (c >= '0' && c <= '9')
+ return c - '0';
+
+ if (c >= 'a' && c <= 'f')
+ return c - 'a' + 10;
+
+ if (c >= 'A' && c <= 'F')
+ return c - 'A' + 10;
+
+ return -1;
+ }
+
+ static int GetChar (byte [] bytes, int offset, int length)
+ {
+ int value = 0;
+ int end = length + offset;
+ for (int i = offset; i < end; i++) {
+ int current = GetInt (bytes [i]);
+ if (current == -1)
+ return -1;
+ value = (value << 4) + current;
+ }
+
+ return value;
+ }
+
+ static int GetChar (string str, int offset, int length)
+ {
+ int val = 0;
+ int end = length + offset;
+ for (int i = offset; i < end; i++) {
+ char c = str [i];
+ if (c > 127)
+ return -1;
+
+ int current = GetInt ((byte) c);
+ if (current == -1)
+ return -1;
+ val = (val << 4) + current;
+ }
+
+ return val;
+ }
+
+ public static string UrlDecode (byte [] bytes, int offset, int count, Encoding e)
+ {
+ if (bytes == null)
+ return null;
+ if (count == 0)
+ return String.Empty;
+
+ if (bytes == null)
+ throw new ArgumentNullException ("bytes");
+
+ if (offset < 0 || offset > bytes.Length)
+ throw new ArgumentOutOfRangeException ("offset");
+
+ if (count < 0 || offset + count > bytes.Length)
+ throw new ArgumentOutOfRangeException ("count");
+
+ StringBuilder output = new StringBuilder ();
+ MemoryStream acc = new MemoryStream ();
+
+ int end = count + offset;
+ int xchar;
+ for (int i = offset; i < end; i++) {
+ if (bytes [i] == '%' && i + 2 < count && bytes [i + 1] != '%') {
+ if (bytes [i + 1] == (byte) 'u' && i + 5 < end) {
+ if (acc.Length > 0) {
+ output.Append (GetChars (acc, e));
+ acc.SetLength (0);
+ }
+ xchar = GetChar (bytes, i + 2, 4);
+ if (xchar != -1) {
+ output.Append ((char) xchar);
+ i += 5;
+ continue;
+ }
+ } else if ((xchar = GetChar (bytes, i + 1, 2)) != -1) {
+ acc.WriteByte ((byte) xchar);
+ i += 2;
+ continue;
+ }
+ }
+
+ if (acc.Length > 0) {
+ output.Append (GetChars (acc, e));
+ acc.SetLength (0);
+ }
+
+ if (bytes [i] == '+') {
+ output.Append (' ');
+ } else {
+ output.Append ((char) bytes [i]);
+ }
+ }
+
+ if (acc.Length > 0) {
+ output.Append (GetChars (acc, e));
+ }
+
+ acc = null;
+ return output.ToString ();
+ }
+
+ public static byte [] UrlDecodeToBytes (byte [] bytes)
+ {
+ if (bytes == null)
+ return null;
+
+ return UrlDecodeToBytes (bytes, 0, bytes.Length);
+ }
+
+ public static byte [] UrlDecodeToBytes (string str)
+ {
+ return UrlDecodeToBytes (str, Encoding.UTF8);
+ }
+
+ public static byte [] UrlDecodeToBytes (string str, Encoding e)
+ {
+ if (str == null)
+ return null;
+
+ if (e == null)
+ throw new ArgumentNullException ("e");
+
+ return UrlDecodeToBytes (e.GetBytes (str));
+ }
+
+ public static byte [] UrlDecodeToBytes (byte [] bytes, int offset, int count)
+ {
+ if (bytes == null)
+ return null;
+ if (count == 0)
+ return new byte [0];
+
+ int len = bytes.Length;
+ if (offset < 0 || offset >= len)
+ throw new ArgumentOutOfRangeException("offset");
+
+ if (count < 0 || offset > len - count)
+ throw new ArgumentOutOfRangeException("count");
+
+ MemoryStream result = new MemoryStream ();
+ int end = offset + count;
+ for (int i = offset; i < end; i++){
+ char c = (char) bytes [i];
+ if (c == '+') {
+ c = ' ';
+ } else if (c == '%' && i < end - 2) {
+ int xchar = GetChar (bytes, i + 1, 2);
+ if (xchar != -1) {
+ c = (char) xchar;
+ i += 2;
+ }
+ }
+ result.WriteByte ((byte) c);
+ }
+
+ return result.ToArray ();
+ }
+
+ public static string UrlEncode(string str)
+ {
+ return UrlEncode(str, Encoding.UTF8);
+ }
+
+ public static string UrlEncode (string s, Encoding Enc)
+ {
+ if (s == null)
+ return null;
+
+ if (s == "")
+ return "";
+
+ bool needEncode = false;
+ int len = s.Length;
+ for (int i = 0; i < len; i++) {
+ char c = s [i];
+ if ((c < '0') || (c < 'A' && c > '9') || (c > 'Z' && c < 'a') || (c > 'z')) {
+ if (NotEncoded (c))
+ continue;
+
+ needEncode = true;
+ break;
+ }
+ }
+
+ if (!needEncode)
+ return s;
+
+ // avoided GetByteCount call
+ byte [] bytes = new byte[Enc.GetMaxByteCount(s.Length)];
+ int realLen = Enc.GetBytes (s, 0, s.Length, bytes, 0);
+ return Encoding.ASCII.GetString (UrlEncodeToBytes (bytes, 0, realLen));
+ }
+
+ public static string UrlEncode (byte [] bytes)
+ {
+ if (bytes == null)
+ return null;
+
+ if (bytes.Length == 0)
+ return "";
+
+ return Encoding.ASCII.GetString (UrlEncodeToBytes (bytes, 0, bytes.Length));
+ }
+
+ public static string UrlEncode (byte [] bytes, int offset, int count)
+ {
+ if (bytes == null)
+ return null;
+
+ if (bytes.Length == 0)
+ return "";
+
+ return Encoding.ASCII.GetString (UrlEncodeToBytes (bytes, offset, count));
+ }
+
+ public static byte [] UrlEncodeToBytes (string str)
+ {
+ return UrlEncodeToBytes (str, Encoding.UTF8);
+ }
+
+ public static byte [] UrlEncodeToBytes (string str, Encoding e)
+ {
+ if (str == null)
+ return null;
+
+ if (str == "")
+ return new byte [0];
+
+ byte [] bytes = e.GetBytes (str);
+ return UrlEncodeToBytes (bytes, 0, bytes.Length);
+ }
+
+ public static byte [] UrlEncodeToBytes (byte [] bytes)
+ {
+ if (bytes == null)
+ return null;
+
+ if (bytes.Length == 0)
+ return new byte [0];
+
+ return UrlEncodeToBytes (bytes, 0, bytes.Length);
+ }
+
+ static char [] hexChars = "0123456789abcdef".ToCharArray ();
+
+ static bool NotEncoded (char c)
+ {
+ return (c == '!' || c == '\'' || c == '(' || c == ')' || c == '*' || c == '-' || c == '.' || c == '_');
+ }
+
+ static void UrlEncodeChar (char c, Stream result, bool isUnicode) {
+ if (c > 255) {
+ //FIXME: what happens when there is an internal error?
+ //if (!isUnicode)
+ // throw new ArgumentOutOfRangeException ("c", c, "c must be less than 256");
+ int idx;
+ int i = (int) c;
+
+ result.WriteByte ((byte)'%');
+ result.WriteByte ((byte)'u');
+ idx = i >> 12;
+ result.WriteByte ((byte)hexChars [idx]);
+ idx = (i >> 8) & 0x0F;
+ result.WriteByte ((byte)hexChars [idx]);
+ idx = (i >> 4) & 0x0F;
+ result.WriteByte ((byte)hexChars [idx]);
+ idx = i & 0x0F;
+ result.WriteByte ((byte)hexChars [idx]);
+ return;
+ }
+
+ if (c > ' ' && NotEncoded (c)) {
+ result.WriteByte ((byte)c);
+ return;
+ }
+ if (c==' ') {
+ result.WriteByte ((byte)'+');
+ return;
+ }
+ if ( (c < '0') ||
+ (c < 'A' && c > '9') ||
+ (c > 'Z' && c < 'a') ||
+ (c > 'z')) {
+ if (isUnicode && c > 127) {
+ result.WriteByte ((byte)'%');
+ result.WriteByte ((byte)'u');
+ result.WriteByte ((byte)'0');
+ result.WriteByte ((byte)'0');
+ }
+ else
+ result.WriteByte ((byte)'%');
+
+ int idx = ((int) c) >> 4;
+ result.WriteByte ((byte)hexChars [idx]);
+ idx = ((int) c) & 0x0F;
+ result.WriteByte ((byte)hexChars [idx]);
+ }
+ else
+ result.WriteByte ((byte)c);
+ }
+
+ public static byte [] UrlEncodeToBytes (byte [] bytes, int offset, int count)
+ {
+ if (bytes == null)
+ return null;
+
+ int len = bytes.Length;
+ if (len == 0)
+ return new byte [0];
+
+ if (offset < 0 || offset >= len)
+ throw new ArgumentOutOfRangeException("offset");
+
+ if (count < 0 || count > len - offset)
+ throw new ArgumentOutOfRangeException("count");
+
+ MemoryStream result = new MemoryStream (count);
+ int end = offset + count;
+ for (int i = offset; i < end; i++)
+ UrlEncodeChar ((char)bytes [i], result, false);
+
+ return result.ToArray();
+ }
+
+ public static string UrlEncodeUnicode (string str)
+ {
+ if (str == null)
+ return null;
+
+ return Encoding.ASCII.GetString (UrlEncodeUnicodeToBytes (str));
+ }
+
+ public static byte [] UrlEncodeUnicodeToBytes (string str)
+ {
+ if (str == null)
+ return null;
+
+ if (str == "")
+ return new byte [0];
+
+ MemoryStream result = new MemoryStream (str.Length);
+ foreach (char c in str){
+ UrlEncodeChar (c, result, true);
+ }
+ return result.ToArray ();
+ }
+
+ /// <summary>
+ /// Decodes an HTML-encoded string and returns the decoded string.
+ /// </summary>
+ /// <param name="s">The HTML string to decode. </param>
+ /// <returns>The decoded text.</returns>
+ public static string HtmlDecode (string s)
+ {
+ if (s == null)
+ throw new ArgumentNullException ("s");
+
+ if (s.IndexOf ('&') == -1)
+ return s;
+
+ StringBuilder entity = new StringBuilder ();
+ StringBuilder output = new StringBuilder ();
+ int len = s.Length;
+ // 0 -> nothing,
+ // 1 -> right after '&'
+ // 2 -> between '&' and ';' but no '#'
+ // 3 -> '#' found after '&' and getting numbers
+ int state = 0;
+ int number = 0;
+ bool have_trailing_digits = false;
+
+ for (int i = 0; i < len; i++) {
+ char c = s [i];
+ if (state == 0) {
+ if (c == '&') {
+ entity.Append (c);
+ state = 1;
+ } else {
+ output.Append (c);
+ }
+ continue;
+ }
+
+ if (c == '&') {
+ state = 1;
+ if (have_trailing_digits) {
+ entity.Append (number.ToString (Helpers.InvariantCulture));
+ have_trailing_digits = false;
+ }
+
+ output.Append (entity.ToString ());
+ entity.Length = 0;
+ entity.Append ('&');
+ continue;
+ }
+
+ if (state == 1) {
+ if (c == ';') {
+ state = 0;
+ output.Append (entity.ToString ());
+ output.Append (c);
+ entity.Length = 0;
+ } else {
+ number = 0;
+ if (c != '#') {
+ state = 2;
+ } else {
+ state = 3;
+ }
+ entity.Append (c);
+ }
+ } else if (state == 2) {
+ entity.Append (c);
+ if (c == ';') {
+ string key = entity.ToString ();
+ if (key.Length > 1 && Entities.ContainsKey (key.Substring (1, key.Length - 2)))
+ key = Entities [key.Substring (1, key.Length - 2)].ToString ();
+
+ output.Append (key);
+ state = 0;
+ entity.Length = 0;
+ }
+ } else if (state == 3) {
+ if (c == ';') {
+ if (number > 65535) {
+ output.Append ("&#");
+ output.Append (number.ToString (Helpers.InvariantCulture));
+ output.Append (";");
+ } else {
+ output.Append ((char) number);
+ }
+ state = 0;
+ entity.Length = 0;
+ have_trailing_digits = false;
+ } else if (Char.IsDigit (c)) {
+ number = number * 10 + ((int) c - '0');
+ have_trailing_digits = true;
+ } else {
+ state = 2;
+ if (have_trailing_digits) {
+ entity.Append (number.ToString (Helpers.InvariantCulture));
+ have_trailing_digits = false;
+ }
+ entity.Append (c);
+ }
+ }
+ }
+
+ if (entity.Length > 0) {
+ output.Append (entity.ToString ());
+ } else if (have_trailing_digits) {
+ output.Append (number.ToString (Helpers.InvariantCulture));
+ }
+ return output.ToString ();
+ }
+
+ /// <summary>
+ /// Decodes an HTML-encoded string and sends the resulting output to a TextWriter output stream.
+ /// </summary>
+ /// <param name="s">The HTML string to decode</param>
+ /// <param name="output">The TextWriter output stream containing the decoded string. </param>
+ public static void HtmlDecode(string s, TextWriter output)
+ {
+ if (s != null)
+ output.Write (HtmlDecode (s));
+ }
+
+ /// <summary>
+ /// HTML-encodes a string and returns the encoded string.
+ /// </summary>
+ /// <param name="s">The text string to encode. </param>
+ /// <returns>The HTML-encoded text.</returns>
+ public static string HtmlEncode (string s)
+ {
+ if (s == null)
+ return null;
+
+ bool needEncode = false;
+ for (int i = 0; i < s.Length; i++) {
+ char c = s [i];
+ if (c == '&' || c == '"' || c == '<' || c == '>' || c > 159) {
+ needEncode = true;
+ break;
+ }
+ }
+
+ if (!needEncode)
+ return s;
+
+ StringBuilder output = new StringBuilder ();
+
+ int len = s.Length;
+ for (int i = 0; i < len; i++)
+ switch (s [i]) {
+ case '&' :
+ output.Append ("&");
+ break;
+ case '>' :
+ output.Append (">");
+ break;
+ case '<' :
+ output.Append ("<");
+ break;
+ case '"' :
+ output.Append (""");
+ break;
+ default:
+ // MS starts encoding with &# from 160 and stops at 255.
+ // We don't do that. One reason is the 65308/65310 unicode
+ // characters that look like '<' and '>'.
+#if TARGET_JVM
+ if (s [i] > 159 && s [i] < 256) {
+#else
+ if (s [i] > 159) {
+#endif
+ output.Append ("&#");
+ output.Append (((int) s [i]).ToString (Helpers.InvariantCulture));
+ output.Append (";");
+ } else {
+ output.Append (s [i]);
+ }
+ break;
+ }
+ return output.ToString ();
+ }
+
+ /// <summary>
+ /// HTML-encodes a string and sends the resulting output to a TextWriter output stream.
+ /// </summary>
+ /// <param name="s">The string to encode. </param>
+ /// <param name="output">The TextWriter output stream containing the encoded string. </param>
+ public static void HtmlEncode(string s, TextWriter output)
+ {
+ if (s != null)
+ output.Write (HtmlEncode (s));
+ }
+
+#if NET_1_1
+ public static string UrlPathEncode (string s)
+ {
+ if (s == null || s.Length == 0)
+ return s;
+
+ MemoryStream result = new MemoryStream ();
+ int length = s.Length;
+ for (int i = 0; i < length; i++) {
+ UrlPathEncodeChar (s [i], result);
+ }
+ return Encoding.ASCII.GetString (result.ToArray ());
+ }
+
+ static void UrlPathEncodeChar (char c, Stream result) {
+#if NET_2_0
+ if (c < 33 || c > 126) {
+#else
+ if (c > 127) {
+#endif
+ byte [] bIn = Encoding.UTF8.GetBytes (c.ToString ());
+ for (int i = 0; i < bIn.Length; i++) {
+ result.WriteByte ((byte) '%');
+ int idx = ((int) bIn [i]) >> 4;
+ result.WriteByte ((byte) hexChars [idx]);
+ idx = ((int) bIn [i]) & 0x0F;
+ result.WriteByte ((byte) hexChars [idx]);
+ }
+ }
+ else if (c == ' ') {
+ result.WriteByte ((byte) '%');
+ result.WriteByte ((byte) '2');
+ result.WriteByte ((byte) '0');
+ }
+ else
+ result.WriteByte ((byte) c);
+ }
+#endif
+
+#if NET_2_0
+ class HttpQSCollection : NameValueCollection {
+ public override string ToString ()
+ {
+ int count = Count;
+ if (count == 0)
+ return "";
+ StringBuilder sb = new StringBuilder ();
+ string [] keys = AllKeys;
+ for (int i = 0; i < count; i++) {
+ sb.AppendFormat ("{0}={1}&", keys [i], this [keys [i]]);
+ }
+ if (sb.Length > 0)
+ sb.Length--;
+ return sb.ToString ();
+ }
+ }
+
+ public static NameValueCollection ParseQueryString (string query)
+ {
+ return ParseQueryString (query, Encoding.UTF8);
+ }
+
+ public static NameValueCollection ParseQueryString (string query, Encoding encoding)
+ {
+ if (query == null)
+ throw new ArgumentNullException ("query");
+ if (encoding == null)
+ throw new ArgumentNullException ("encoding");
+ if (query.Length == 0 || (query.Length == 1 && query[0] == '?'))
+ return new NameValueCollection ();
+ if (query[0] == '?')
+ query = query.Substring (1);
+
+ NameValueCollection result = new HttpQSCollection ();
+ ParseQueryString (query, encoding, result);
+ return result;
+ }
+#endif
+
+ internal static void ParseQueryString (string query, Encoding encoding, NameValueCollection result)
+ {
+ if (query.Length == 0)
+ return;
+
+ string decoded = HtmlDecode (query);
+ int decodedLength = decoded.Length;
+ int namePos = 0;
+ bool first = true;
+ while (namePos <= decodedLength) {
+ int valuePos = -1, valueEnd = -1;
+ for (int q = namePos; q < decodedLength; q++) {
+ if (valuePos == -1 && decoded [q] == '=') {
+ valuePos = q + 1;
+ } else if (decoded [q] == '&') {
+ valueEnd = q;
+ break;
+ }
+ }
+
+ if (first) {
+ first = false;
+ if (decoded [namePos] == '?')
+ namePos++;
+ }
+
+ string name, value;
+ if (valuePos == -1) {
+ name = null;
+ valuePos = namePos;
+ } else {
+ name = UrlDecode (decoded.Substring (namePos, valuePos - namePos - 1), encoding);
+ }
+ if (valueEnd < 0) {
+ namePos = -1;
+ valueEnd = decoded.Length;
+ } else {
+ namePos = valueEnd + 1;
+ }
+ value = UrlDecode (decoded.Substring (valuePos, valueEnd - valuePos), encoding);
+
+ result.Add (name, value);
+ if (namePos == -1)
+ break;
+ }
+ }
+ #endregion // Methods
+ }
+}
+
diff --git a/lib/Hyena/src/Hyena/hyena.pc.in b/lib/Hyena/src/Hyena/hyena.pc.in
new file mode 100644
index 0000000..b8bef68
--- /dev/null
+++ b/lib/Hyena/src/Hyena/hyena.pc.in
@@ -0,0 +1,9 @@
+Assemblies=@expanded_libdir@/@PACKAGE@/Hyena.dll
+Files=@expanded_libdir@/@PACKAGE@/Hyena.dll.mdb
+
+Name: Hyena
+Description: Hyena
+Version: @VERSION@
+
+Requires:
+Libs: -r:@expanded_libdir@/@PACKAGE@/Hyena.dll
diff --git a/lib/Hyena/src/Mono.Data.Sqlite/Makefile.am b/lib/Hyena/src/Mono.Data.Sqlite/Makefile.am
new file mode 100644
index 0000000..8516b25
--- /dev/null
+++ b/lib/Hyena/src/Mono.Data.Sqlite/Makefile.am
@@ -0,0 +1,30 @@
+ASSEMBLY = Mono.Data.Sqlite
+TARGET = library
+LINK = -r:System -r:System.Data -r:System.Transactions
+ASSEMBLY_BUILD_FLAGS = -unsafe -d:MONO_BACKWARD_COMPAT
+SOURCES = \
+ Mono.Data.Sqlite/SQLite3.cs \
+ Mono.Data.Sqlite/SQLite3_UTF16.cs \
+ Mono.Data.Sqlite/SQLiteBase.cs \
+ Mono.Data.Sqlite/SQLiteCommand.cs \
+ Mono.Data.Sqlite/SQLiteCommandBuilder.cs \
+ Mono.Data.Sqlite/SQLiteConnection.cs \
+ Mono.Data.Sqlite/SQLiteConnectionStringBuilder.cs \
+ Mono.Data.Sqlite/SQLiteConvert.cs \
+ Mono.Data.Sqlite/SQLiteDataAdapter.cs \
+ Mono.Data.Sqlite/SQLiteDataReader.cs \
+ Mono.Data.Sqlite/SqliteDataSourceEnumerator.cs \
+ Mono.Data.Sqlite/SQLiteEnlistment.cs \
+ Mono.Data.Sqlite/SQLiteException.cs \
+ Mono.Data.Sqlite/SQLiteFactory.cs \
+ Mono.Data.Sqlite/SQLiteFunction.cs \
+ Mono.Data.Sqlite/SQLiteFunctionAttribute.cs \
+ Mono.Data.Sqlite/SQLiteMetaDataCollectionNames.cs \
+ Mono.Data.Sqlite/SQLiteParameter.cs \
+ Mono.Data.Sqlite/SQLiteParameterCollection.cs \
+ Mono.Data.Sqlite/SQLiteStatement.cs \
+ Mono.Data.Sqlite/SQLiteTransaction.cs \
+ Mono.Data.Sqlite/SR.Designer.cs \
+ Mono.Data.Sqlite/UnsafeNativeMethods.cs
+
+include $(top_srcdir)/build/build.mk
diff --git a/lib/Hyena/src/Mono.Data.Sqlite/Makefile.in b/lib/Hyena/src/Mono.Data.Sqlite/Makefile.in
new file mode 100644
index 0000000..78e7e77
--- /dev/null
+++ b/lib/Hyena/src/Mono.Data.Sqlite/Makefile.in
@@ -0,0 +1,826 @@
+# Makefile.in generated by automake 1.11.1 from Makefile.am.
+# @configure_input@
+
+# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
+# 2003, 2004, 2005, 2006, 2007, 2008, 2009 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.
+
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
+# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
+# PARTICULAR PURPOSE.
+
+ at SET_MAKE@
+
+VPATH = @srcdir@
+pkgdatadir = $(datadir)/@PACKAGE@
+pkgincludedir = $(includedir)/@PACKAGE@
+pkglibdir = $(libdir)/@PACKAGE@
+pkglibexecdir = $(libexecdir)/@PACKAGE@
+am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
+install_sh_DATA = $(install_sh) -c -m 644
+install_sh_PROGRAM = $(install_sh) -c
+install_sh_SCRIPT = $(install_sh) -c
+INSTALL_HEADER = $(INSTALL_DATA)
+transform = $(program_transform_name)
+NORMAL_INSTALL = :
+PRE_INSTALL = :
+POST_INSTALL = :
+NORMAL_UNINSTALL = :
+PRE_UNINSTALL = :
+POST_UNINSTALL = :
+build_triplet = @build@
+host_triplet = @host@
+DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in \
+ $(top_srcdir)/build/build.environment.mk \
+ $(top_srcdir)/build/build.mk \
+ $(top_srcdir)/build/build.rules.mk
+ at ENABLE_TESTS_TRUE@am__append_1 = " $(NUNIT_LIBS)"
+subdir = lib/Hyena/src/Mono.Data.Sqlite
+ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
+am__aclocal_m4_deps = $(top_srcdir)/build/m4/shave/shave.m4 \
+ $(top_srcdir)/build/m4/shamrock/expansions.m4 \
+ $(top_srcdir)/build/m4/shamrock/gnome-doc.m4 \
+ $(top_srcdir)/build/m4/shamrock/mono.m4 \
+ $(top_srcdir)/build/m4/shamrock/nunit.m4 \
+ $(top_srcdir)/build/m4/shamrock/programs.m4 \
+ $(top_srcdir)/build/m4/f-spot/flickrnet.m4 \
+ $(top_srcdir)/build/m4/f-spot/gnome-keyring-sharp.m4 \
+ $(top_srcdir)/build/m4/f-spot/gtk-sharp.m4 \
+ $(top_srcdir)/build/m4/f-spot/mono-addins.m4 \
+ $(top_srcdir)/acinclude.m4 $(top_srcdir)/configure.ac
+am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
+ $(ACLOCAL_M4)
+mkinstalldirs = $(install_sh) -d
+CONFIG_HEADER = $(top_builddir)/config.h
+CONFIG_CLEAN_FILES =
+CONFIG_CLEAN_VPATH_FILES =
+am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`;
+am__vpath_adj = case $$p in \
+ $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \
+ *) f=$$p;; \
+ esac;
+am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`;
+am__install_max = 40
+am__nobase_strip_setup = \
+ srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'`
+am__nobase_strip = \
+ for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||"
+am__nobase_list = $(am__nobase_strip_setup); \
+ for p in $$list; do echo "$$p $$p"; done | \
+ sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \
+ $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \
+ if (++n[$$2] == $(am__install_max)) \
+ { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \
+ END { for (dir in files) print dir, files[dir] }'
+am__base_list = \
+ sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \
+ sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g'
+am__installdirs = "$(DESTDIR)$(moduledir)"
+SCRIPTS = $(module_SCRIPTS)
+DIST_SOURCES =
+DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
+ACLOCAL = @ACLOCAL@
+ACLOCAL_AMFLAGS = @ACLOCAL_AMFLAGS@
+ALL_LINGUAS = @ALL_LINGUAS@
+AMTAR = @AMTAR@
+AM_MAKEFLAGS = @AM_MAKEFLAGS@
+API_VERSION = @API_VERSION@
+AR = @AR@
+ASM_VERSION = @ASM_VERSION@
+AUTOCONF = @AUTOCONF@
+AUTOHEADER = @AUTOHEADER@
+AUTOMAKE = @AUTOMAKE@
+AWK = @AWK@
+CATALOGS = @CATALOGS@
+CATOBJEXT = @CATOBJEXT@
+CC = @CC@
+CCDEPMODE = @CCDEPMODE@
+CFLAGS = @CFLAGS@
+CPP = @CPP@
+CPPFLAGS = @CPPFLAGS@
+CSC_DEFINES = @CSC_DEFINES@
+CXX = @CXX@
+CXXCPP = @CXXCPP@
+CXXDEPMODE = @CXXDEPMODE@
+CXXFLAGS = @CXXFLAGS@
+CYGPATH_W = @CYGPATH_W@
+DATADIRNAME = @DATADIRNAME@
+DEFS = @DEFS@
+DEPDIR = @DEPDIR@
+DISPLAY_VERSION = @DISPLAY_VERSION@
+DISTCHECK_CONFIGURE_FLAGS = @DISTCHECK_CONFIGURE_FLAGS@
+DOC_USER_FORMATS = @DOC_USER_FORMATS@
+DSYMUTIL = @DSYMUTIL@
+DUMPBIN = @DUMPBIN@
+ECHO_C = @ECHO_C@
+ECHO_N = @ECHO_N@
+ECHO_T = @ECHO_T@
+EGREP = @EGREP@
+EXEEXT = @EXEEXT@
+EXIF_CFLAGS = @EXIF_CFLAGS@
+EXIF_LIBS = @EXIF_LIBS@
+EXIF_SOVERSION = @EXIF_SOVERSION@
+F77 = @F77@
+FC = @FC@
+FGREP = @FGREP@
+FLICKRNET_CFLAGS = @FLICKRNET_CFLAGS@
+FLICKRNET_LIBS = @FLICKRNET_LIBS@
+F_CFLAGS = @F_CFLAGS@
+F_LIBS = @F_LIBS@
+GAPI2CODEGEN = @GAPI2CODEGEN@
+GAPI2FIXUP = @GAPI2FIXUP@
+GAPI2PARSER = @GAPI2PARSER@
+GCONFTOOL = @GCONFTOOL@
+GCONF_SCHEMA_CONFIG_SOURCE = @GCONF_SCHEMA_CONFIG_SOURCE@
+GCONF_SCHEMA_FILE_DIR = @GCONF_SCHEMA_FILE_DIR@
+GCONF_SHARP_CFLAGS = @GCONF_SHARP_CFLAGS@
+GCONF_SHARP_LIBS = @GCONF_SHARP_LIBS@
+GETTEXT_PACKAGE = @GETTEXT_PACKAGE@
+GIO_CFLAGS = @GIO_CFLAGS@
+GIO_LIBS = @GIO_LIBS@
+GLIBSHARP_2_12_7_CFLAGS = @GLIBSHARP_2_12_7_CFLAGS@
+GLIBSHARP_2_12_7_LIBS = @GLIBSHARP_2_12_7_LIBS@
+GLIBSHARP_CFLAGS = @GLIBSHARP_CFLAGS@
+GLIBSHARP_LIBS = @GLIBSHARP_LIBS@
+GLIB_CFLAGS = @GLIB_CFLAGS@
+GLIB_GENMARSHAL = @GLIB_GENMARSHAL@
+GLIB_LIBS = @GLIB_LIBS@
+GLIB_MKENUMS = @GLIB_MKENUMS@
+GMOFILES = @GMOFILES@
+GMSGFMT = @GMSGFMT@
+GNOME_ICON_THEME_PREFIX = @GNOME_ICON_THEME_PREFIX@
+GNOME_SCREENSAVER_SAVERDIR = @GNOME_SCREENSAVER_SAVERDIR@
+GNOME_SCREENSAVER_THEMESDIR = @GNOME_SCREENSAVER_THEMESDIR@
+GNOME_SHARP_CFLAGS = @GNOME_SHARP_CFLAGS@
+GNOME_SHARP_LIBS = @GNOME_SHARP_LIBS@
+GOBJECT_QUERY = @GOBJECT_QUERY@
+GREP = @GREP@
+GTKSHARP_A11Y_CFLAGS = @GTKSHARP_A11Y_CFLAGS@
+GTKSHARP_A11Y_LIBS = @GTKSHARP_A11Y_LIBS@
+GTKSHARP_CFLAGS = @GTKSHARP_CFLAGS@
+GTKSHARP_LIBS = @GTKSHARP_LIBS@
+HELP_DIR = @HELP_DIR@
+ICONS_DIRECTORY = @ICONS_DIRECTORY@
+INSTALL = @INSTALL@
+INSTALL_DATA = @INSTALL_DATA@
+INSTALL_PROGRAM = @INSTALL_PROGRAM@
+INSTALL_SCRIPT = @INSTALL_SCRIPT@
+INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
+INSTOBJEXT = @INSTOBJEXT@
+INTLLIBS = @INTLLIBS@
+INTLTOOL_EXTRACT = @INTLTOOL_EXTRACT@
+INTLTOOL_MERGE = @INTLTOOL_MERGE@
+INTLTOOL_PERL = @INTLTOOL_PERL@
+INTLTOOL_UPDATE = @INTLTOOL_UPDATE@
+KEYRINGSHARP_CFLAGS = @KEYRINGSHARP_CFLAGS@
+KEYRINGSHARP_LIBS = @KEYRINGSHARP_LIBS@
+LCMS_CFLAGS = @LCMS_CFLAGS@
+LCMS_LIBS = @LCMS_LIBS@
+LD = @LD@
+LDFLAGS = @LDFLAGS@
+LIBEXIF_VERSION_CHECK_CFLAGS = @LIBEXIF_VERSION_CHECK_CFLAGS@
+LIBEXIF_VERSION_CHECK_LIBS = @LIBEXIF_VERSION_CHECK_LIBS@
+LIBJPEG = @LIBJPEG@
+LIBOBJS = @LIBOBJS@
+LIBS = @LIBS@
+LIBTOOL = @LIBTOOL@
+LIPO = @LIPO@
+LN_S = @LN_S@
+LTLIBOBJS = @LTLIBOBJS@
+MAINT = @MAINT@
+MAKEFLAGS = @MAKEFLAGS@
+MAKEINFO = @MAKEINFO@
+MCS = @MCS@
+MKDIR_P = @MKDIR_P@
+MKINSTALLDIRS = @MKINSTALLDIRS@
+MONO = @MONO@
+MONO_ADDINS_CFLAGS = @MONO_ADDINS_CFLAGS@
+MONO_ADDINS_GUI_CFLAGS = @MONO_ADDINS_GUI_CFLAGS@
+MONO_ADDINS_GUI_LIBS = @MONO_ADDINS_GUI_LIBS@
+MONO_ADDINS_LIBS = @MONO_ADDINS_LIBS@
+MONO_ADDINS_SETUP_CFLAGS = @MONO_ADDINS_SETUP_CFLAGS@
+MONO_ADDINS_SETUP_LIBS = @MONO_ADDINS_SETUP_LIBS@
+MONO_MODULE_CFLAGS = @MONO_MODULE_CFLAGS@
+MONO_MODULE_LIBS = @MONO_MODULE_LIBS@
+MSGFMT = @MSGFMT@
+MSGFMT_OPTS = @MSGFMT_OPTS@
+MSGMERGE = @MSGMERGE@
+NDESK_DBUS_CFLAGS = @NDESK_DBUS_CFLAGS@
+NDESK_DBUS_LIBS = @NDESK_DBUS_LIBS@
+NM = @NM@
+NMEDIT = @NMEDIT@
+NUNIT_CFLAGS = @NUNIT_CFLAGS@
+NUNIT_LIBS = @NUNIT_LIBS@
+OBJC = @OBJC@
+OBJDUMP = @OBJDUMP@
+OBJEXT = @OBJEXT@
+OMF_DIR = @OMF_DIR@
+OTOOL = @OTOOL@
+OTOOL64 = @OTOOL64@
+PACKAGE = @PACKAGE@
+PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
+PACKAGE_NAME = @PACKAGE_NAME@
+PACKAGE_STRING = @PACKAGE_STRING@
+PACKAGE_TARNAME = @PACKAGE_TARNAME@
+PACKAGE_URL = @PACKAGE_URL@
+PACKAGE_VERSION = @PACKAGE_VERSION@
+PATH_SEPARATOR = @PATH_SEPARATOR@
+PKG_CONFIG = @PKG_CONFIG@
+POFILES = @POFILES@
+POSUB = @POSUB@
+PO_IN_DATADIR_FALSE = @PO_IN_DATADIR_FALSE@
+PO_IN_DATADIR_TRUE = @PO_IN_DATADIR_TRUE@
+Q = @Q@
+RANLIB = @RANLIB@
+SED = @SED@
+SET_MAKE = @SET_MAKE@
+SHELL = @SHELL@
+STRIP = @STRIP@
+TURTLEDIR = @TURTLEDIR@
+UNIQUE_CFLAGS = @UNIQUE_CFLAGS@
+UNIQUE_LIBS = @UNIQUE_LIBS@
+USE_NLS = @USE_NLS@
+V = @V@
+VERSION = @VERSION@
+WARN_CFLAGS = @WARN_CFLAGS@
+XGETTEXT = @XGETTEXT@
+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_DUMPBIN = @ac_ct_DUMPBIN@
+am__include = @am__include@
+am__leading_dot = @am__leading_dot@
+am__quote = @am__quote@
+am__tar = @am__tar@
+am__untar = @am__untar@
+bindir = @bindir@
+build = @build@
+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@
+expanded_bindir = @expanded_bindir@
+expanded_datadir = @expanded_datadir@
+expanded_libdir = @expanded_libdir@
+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@
+lt_ECHO = @lt_ECHO@
+mandir = @mandir@
+mkdir_p = @mkdir_p@
+oldincludedir = @oldincludedir@
+pdfdir = @pdfdir@
+prefix = @prefix@
+program_transform_name = @program_transform_name@
+psdir = @psdir@
+sbindir = @sbindir@
+sharedstatedir = @sharedstatedir@
+shavedir = @shavedir@
+srcdir = @srcdir@
+sysconfdir = @sysconfdir@
+target_alias = @target_alias@
+top_build_prefix = @top_build_prefix@
+top_builddir = @top_builddir@
+top_srcdir = @top_srcdir@
+ASSEMBLY = Mono.Data.Sqlite
+TARGET = library
+LINK = -r:System -r:System.Data -r:System.Transactions $(am__append_1)
+ASSEMBLY_BUILD_FLAGS = -unsafe -d:MONO_BACKWARD_COMPAT
+SOURCES = \
+ Mono.Data.Sqlite/SQLite3.cs \
+ Mono.Data.Sqlite/SQLite3_UTF16.cs \
+ Mono.Data.Sqlite/SQLiteBase.cs \
+ Mono.Data.Sqlite/SQLiteCommand.cs \
+ Mono.Data.Sqlite/SQLiteCommandBuilder.cs \
+ Mono.Data.Sqlite/SQLiteConnection.cs \
+ Mono.Data.Sqlite/SQLiteConnectionStringBuilder.cs \
+ Mono.Data.Sqlite/SQLiteConvert.cs \
+ Mono.Data.Sqlite/SQLiteDataAdapter.cs \
+ Mono.Data.Sqlite/SQLiteDataReader.cs \
+ Mono.Data.Sqlite/SqliteDataSourceEnumerator.cs \
+ Mono.Data.Sqlite/SQLiteEnlistment.cs \
+ Mono.Data.Sqlite/SQLiteException.cs \
+ Mono.Data.Sqlite/SQLiteFactory.cs \
+ Mono.Data.Sqlite/SQLiteFunction.cs \
+ Mono.Data.Sqlite/SQLiteFunctionAttribute.cs \
+ Mono.Data.Sqlite/SQLiteMetaDataCollectionNames.cs \
+ Mono.Data.Sqlite/SQLiteParameter.cs \
+ Mono.Data.Sqlite/SQLiteParameterCollection.cs \
+ Mono.Data.Sqlite/SQLiteStatement.cs \
+ Mono.Data.Sqlite/SQLiteTransaction.cs \
+ Mono.Data.Sqlite/SR.Designer.cs \
+ Mono.Data.Sqlite/UnsafeNativeMethods.cs
+
+
+# Initializers
+MONO_BASE_PATH =
+MONO_ADDINS_PATH =
+
+# Install Paths
+DEFAULT_INSTALL_DIR = $(pkglibdir)
+BACKENDS_INSTALL_DIR = $(DEFAULT_INSTALL_DIR)/Backends
+EXTENSIONS_INSTALL_DIR = $(DEFAULT_INSTALL_DIR)/Extensions
+DIR_DOCS = $(top_builddir)/docs
+DIR_EXTENSIONS = $(top_builddir)/extensions
+DIR_ICONS = $(top_builddir)/icons
+DIR_JPEGTRAN = $(top_builddir)/lib/libjpegtran
+DIR_LIBFSPOT = $(top_builddir)/lib/libfspot
+DIR_SEMWEB = $(top_builddir)/lib/semweb
+DIR_SRC = $(top_builddir)/src
+DIR_GIOSHARP = $(top_builddir)/lib/gio-sharp/gio
+DIR_GTKSHARPBEANS = $(top_builddir)/lib/gtk-sharp-beans
+DIR_UNIQUESHARP = $(top_builddir)/lib/unique-sharp/unique
+DIR_BIN = $(top_builddir)/bin
+
+# External libraries to link against, generated from configure
+LINK_SYSTEM = -r:System
+LINK_SYSTEMDATA = -r:System.Data
+LINK_SYSTEM_WEB = -r:System.Web
+LINK_MONO_POSIX = -r:Mono.Posix
+LINK_MONO_CAIRO = -r:Mono.Cairo
+LINK_MONO_SIMD = -r:Mono.Simd
+LINK_MONODATA = -r:Mono.Data
+LINK_MONO_DATA_SQLITECLIENT = -r:Mono.Data.SqliteClient
+LINK_ICSHARP_ZIP_LIB = -r:ICSharpCode.SharpZipLib
+LINK_KEYRING = $(KEYRINGSHARP_LIBS)
+LINK_GLIB = $(GLIBSHARP_LIBS)
+LINK_GTK = $(GTKSHARP_LIBS)
+LINK_GNOME = $(GNOME_SHARP_LIBS)
+LINK_GCONF = $(GCONF_SHARP_LIBS)
+LINK_GLADE = -pkg:glade-sharp-2.0
+LINK_FLICKRNET = -pkg:flickrnet
+LINK_DBUS = $(NDESK_DBUS_LIBS) $(NDESK_DBUS_GLIB_LIBS)
+LINK_DBUS_NO_GLIB = $(NDESK_DBUS_LIBS)
+LINK_MONO_ADDINS_DEPS = $(MONO_ADDINS_LIBS)
+LINK_MONO_ADDINS_SETUP_DEPS = $(MONO_ADDINS_SETUP_LIBS)
+LINK_MONO_ADDINS_GUI_DEPS = $(MONO_ADDINS_GUI_LIBS)
+
+# GIO
+REF_GIO =
+LINK_GIO = -r:$(DIR_GIOSHARP)/gio-sharp.dll
+LINK_GIO_DEPS = $(REF_GIO) $(LINK_GIO)
+
+# Gtk Beans
+REF_GTK_BEANS = $(LINK_GIO_DEPS)
+LINK_GTK_BEANS = -r:$(DIR_GTKSHARPBEANS)/gtk-sharp-beans.dll
+LINK_GTK_BEANS_DEPS = $(REF_GTK_BEANS) $(LINK_GTK_BEANS)
+
+# Uniqe
+REF_UNIQUE =
+LINK_UNIQUE = -r:$(DIR_UNIQUESHARP)/unique-sharp.dll
+LINK_UNIQUE_DEPS = $(REF_UNIQUE) $(LINK_UNIQUE)
+
+# Hyena
+REF_HYENA = $(LINK_SYSTEM) $(LINK_MONO_POSIX)
+LINK_HYENA = -r:$(DIR_BIN)/Hyena.dll
+LINK_HYENA_DEPS = $(REF_HYENA) $(LINK_HYENA)
+
+# Semweb
+REF_SEMWEB = $(LINK_SYSTEMDATA) $(LINK_HYENA_DEPS)
+LINK_SEMWEB = -r:$(DIR_BIN)/SemWeb.dll
+LINK_SEMWEB_DEPS = $(REF_SEMWEB) $(LINK_SEMWEB)
+
+# Hyena.Data.Sqlite
+REF_HYENA_DATA_SQLITE = $(LINK_SQLITE)
+LINK_HYENA_DATA_SQLITE = -r:$(DIR_BIN)/Hyena.Data.Sqlite.dll
+LINK_HYENA_DATA_SQLITE_DEPS = $(REF_HYENA_DATA_SQLITE) $(LINK_HYENA_DATA_SQLITE)
+
+# Hyena.Gui
+REF_HYENA_GUI = $(LINK_HYENA_DEPS)
+LINK_HYENA_GUI = -r:$(DIR_BIN)/Hyena.Gui.dll
+LINK_HENA_GUI_DEPS = $(REF_HYENA_GUI) $(LINK_HYENA_GUI)
+
+# FSpot.Cms
+REF_FSPOT_CMS = $(LINK_GTK)
+LINK_FSPOT_CMS = -r:$(DIR_BIN)/FSpot.Cms.dll
+LINK_FSPOT_CMS_DEPS = $(REF_FSPOT_CMS) $(LINK_FSPOT_CMS)
+
+# FSpot.Utils
+REF_FSPOT_UTILS = $(LINK_HYENA_DEPS) $(LINK_GTK) $(LINK_GIO) $(LINK_MONO_CAIRO)
+LINK_FSPOT_UTILS = -r:$(DIR_BIN)/FSpot.Utils.dll
+LINK_FSPOT_UTILS_DEPS = $(REF_FSPOT_UTILS) $(LINK_FSPOT_UTILS)
+
+# FSpot.Core
+REF_FSPOT_CORE = $(LINK_FSPOT_UTILS_DEPS) $(LINK_FSPOT_CMS_DEPS)
+LINK_FSPOT_CORE = -r:$(DIR_BIN)/FSpot.Core.dll
+LINK_FSPOT_CORE_DEPS = $(REF_FSPOT_CORE) $(LINK_FSPOT_CORE)
+
+# FSpot.Query
+REF_FSPOT_QUERY = $(LINK_FSPOT_CORE_DEPS)
+LINK_FSPOT_QUERY = -r:$(DIR_BIN)/FSpot.Query.dll
+LINK_FSPOT_QUERY_DEPS = $(REF_FSPOT_QUERY) $(LINK_FSPOT_QUERY)
+
+# FSpot.JobScheduler
+REF_FSPOT_JOB_SCHEDULER = $(LINK_HYENA_DEPS)
+LINK_FSPOT_JOB_SCHEDULER = -r:$(DIR_BIN)/FSpot.JobScheduler.dll
+LINK_FSPOT_JOB_SCHEDULER_DEPS = $(REF_FSPOT_JOB_SCHEDULER) $(LINK_FSPOT_JOB_SCHEDULER)
+
+# FSpot.Bling
+REF_FSPOT_BLING = $(LINK_GTK_BEANS_DEPS) $(LINK_GLIB)
+LINK_FSPOT_BLING = -r:$(DIR_BIN)/FSpot.Bling.dll
+LINK_FSPOT_BLING_DEPS = $(REF_FSPOT_BLING) $(LINK_FSPOT_BLING)
+
+# FSpot.Platform
+REF_FSPOT_PLATFORM = $(LINK_GCONF) $(LINK_GTK) $(LINK_FSPOT_CORE_DEPS) $(LINK_DBUS)
+LINK_FSPOT_PLATFORM = -r:$(DIR_BIN)/FSpot.Platform.dll
+LINK_FSPOT_PLATFORM_DEPS = $(REF_FSPOT_PLATFORM) $(LINK_FSPOT_PLATFORM)
+
+# FSpot.Widgets
+REF_FSPOT_WIDGETS = $(LINK_FSPOT_CORE_DEPS) $(LINK_FSPOT_BLING_DEPS)
+LINK_FSPOT_WIDGETS = -r:$(DIR_BIN)/FSpot.Widgets.dll
+LINK_FSPOT_WIDGETS_DEPS = $(REF_FSPOT_WIDGETS) $(LINK_FSPOT_WIDGETS)
+
+# FSpot (executable)
+REF_FSPOT = $(LINK_FSPOT_WIDGETS_DEPS) $(LINK_FSPOT_PLATFORM_DEPS) $(LINK_FSPOT_QUERY_DEPS) \
+ $(LINK_GLIB) $(LINK_MONO_ADDINS_DEPS) $(LINK_UNIQUE_DEPS) $(LINK_MONO_ADDINS_SETUP_DEPS) \
+ $(LINK_SEMWEB_DEPS) $(LINK_GLADE) $(LINK_MONODATA) $(LINK_MONO_DATA_SQLITECLIENT) \
+ $(LINK_MONO_ADDINS_GUI_DEPS) $(LINK_FSPOT_JOB_SCHEDULER_DEPS) $(LINK_ICSHARP_ZIP_LIB) \
+ $(LINK_GNOME)
+
+# FIXME: do not link executables
+LINK_FSPOT = -r:$(DIR_BIN)/f-spot.exe
+LINK_FSPOT_DEPS = $(REF_FSPOT) $(LINK_FSPOT)
+
+# Extensions
+REF_FSPOT_EXTENSION_BLACKOUTEDITOR = $(LINK_FSPOT_DEPS)
+REF_FSPOT_EXTENSION_BWEDITOR = $(LINK_FSPOT_DEPS) $(LINK_MONO_SIMD)
+REF_FSPOT_EXTENSION_FLIPEDITOR = $(LINK_FSPOT_DEPS)
+REF_FSPOT_EXTENSION_PIXELATEEDITOR = $(LINK_FSPOT_DEPS)
+REF_FSPOT_EXTENSION_RESIZEEDITOR = $(LINK_FSPOT_DEPS)
+REF_FSPOT_EXTENSION_CDEXPORT = $(LINK_FSPOT_DEPS)
+REF_FSPOT_EXTENSION_FACEBOOKEXPORT = $(LINK_FSPOT_DEPS) $(LINK_KEYRING)
+REF_FSPOT_EXTENSION_FLICKREXPORT = $(LINK_FSPOT_DEPS) $(LINK_FLICKRNET)
+REF_FSPOT_EXTENSION_FOLDEREXPORT = $(LINK_FSPOT_DEPS) $(LINK_SYSTEM_WEB)
+REF_FSPOT_EXTENSION_GALLERYEXPORT = $(LINK_FSPOT_DEPS)
+REF_MONO_GOOGLE = $(LINK_HYENA_DEPS)
+LINK_MONO_GOOGLE = -r:$(DIR_BIN)/Mono.Google.dll
+LINK_MONO_GOOGLE_DEPS = $(REF_MONO_GOOGLE) $(LINK_MONO_GOOGLE)
+REF_FSPOT_EXTENSION_PICASAWEBEXPORT = $(LINK_FSPOT_DEPS) $(LINK_MONO_GOOGLE) $(LINK_KEYRING)
+REF_SMUGMUGNET = $(LINK_FSPOT_DEPS)
+LINK_SMUGMUGNET = -r:$(DIR_BIN)/SmugMugNet.dll
+LINK_SMUGMUGNET_DEPS = $(REF_SMUGMUGNET) $(LINK_SMUGMUGNET)
+REF_FSPOT_EXTENSION_SMUGMUGEXPORT = $(LINK_SMUGMUGNET_DEPS) $(LINK_KEYRING)
+REF_MONO_TABBLO = $(LINK_HYENA_DEPS)
+LINK_MONO_TABBLO = -r:$(DIR_BIN)/Mono.Tabblo.dll
+LINK_MONO_TABBLO_DEPS = $(REF_MONO_TABBLO) $(LINK_MONO_TABBLO)
+REF_FSPOT_EXTENSION_TABBLOEXPORT = $(LINK_FSPOT_DEPS) $(LINK_KEYRING) $(LINK_MONO_TABBLO_DEPS)
+REF_FSPOT_EXTENSION_ZIPEXPORT = $(LINK_FSPOT_DEPS)
+REF_FSPOT_EXTENSION_CHANGEPHOTOPATH = $(LINK_FSPOT_DEPS)
+REF_FSPOT_EXTENSION_DEVELOPINUFRAW = $(LINK_FSPOT_DEPS)
+REF_FSPOT_EXTENSION_HASHJOB = $(LINK_FSPOT_DEPS)
+REF_FSPOT_EXTENSION_LIVEWEBGALLERY = $(LINK_FSPOT_DEPS)
+REF_FSPOT_EXTENSION_MERGEDB = $(LINK_FSPOT_DEPS)
+REF_FSPOT_EXTENSION_RAWPLUSJPEG = $(LINK_FSPOT_DEPS)
+REF_FSPOT_EXTENSION_RETROACTIVEROLL = $(LINK_FSPOT_DEPS)
+REF_FSPOT_EXTENSION_SCREENSAVERCONFIG = $(LINK_FSPOT_DEPS)
+REF_FSPOT_EXTENSION_COVERTRANSITION = $(LINK_FSPOT_DEPS)
+
+# Cute hack to replace a space with something
+colon := :
+empty :=
+space := $(empty) $(empty)
+
+# Build path to allow running uninstalled
+RUN_PATH = $(subst $(space),$(colon), $(MONO_BASE_PATH))
+UNIQUE_FILTER_PIPE = tr [:space:] \\n | sort | uniq
+BUILD_DATA_DIR = $(top_builddir)/bin/share/$(PACKAGE)
+
+# Since all other attempts failed, we currently go this way:
+# This code adds the file specified in ASSEMBLY_INFO_SOURCE to SOURCES_BUILD.
+# If no such file is specified, the default AssemblyInfo.cs is used.
+ASSEMBLY_INFO_SOURCE_REAL = \
+ $(shell if [ "$(ASSEMBLY_INFO_SOURCE)" ]; \
+ then \
+ echo "$(addprefix $(srcdir)/, $(ASSEMBLY_INFO_SOURCE))"; \
+ else \
+ echo "$(top_srcdir)/src/AssemblyInfo.cs"; \
+ fi)
+
+SOURCES_BUILD = $(addprefix $(srcdir)/, $(SOURCES)) \
+ $(ASSEMBLY_INFO_SOURCE_REAL)
+RESOURCES_EXPANDED = $(addprefix $(srcdir)/, $(RESOURCES))
+RESOURCES_BUILD = $(foreach resource, $(RESOURCES_EXPANDED), \
+ -resource:$(resource),$(notdir $(resource)))
+
+INSTALL_ICONS = $(top_srcdir)/build/private-icon-theme-installer "$(mkinstalldirs)" "$(INSTALL_DATA)"
+THEME_ICONS_SOURCE = $(wildcard $(srcdir)/ThemeIcons/*/*/*.png) $(wildcard $(srcdir)/ThemeIcons/scalable/*/*.svg)
+THEME_ICONS_RELATIVE = $(subst $(srcdir)/ThemeIcons/, , $(THEME_ICONS_SOURCE))
+ASSEMBLY_EXTENSION = $(strip $(patsubst library, dll, $(TARGET)))
+ASSEMBLY_FILE = $(top_builddir)/bin/$(ASSEMBLY).$(ASSEMBLY_EXTENSION)
+INSTALL_DIR_RESOLVED = $(firstword $(subst , $(DEFAULT_INSTALL_DIR), $(INSTALL_DIR)))
+ at ENABLE_TESTS_TRUE@ENABLE_TESTS_FLAG = "-define:ENABLE_TESTS"
+ at ENABLE_ATK_TRUE@ENABLE_ATK_FLAG = "-define:ENABLE_ATK"
+FILTERED_LINK = $(shell echo "$(LINK)" | $(UNIQUE_FILTER_PIPE))
+DEP_LINK = $(shell echo "$(LINK)" | $(UNIQUE_FILTER_PIPE) | sed s,-r:,,g | grep '$(top_builddir)/bin/')
+OUTPUT_FILES = \
+ $(ASSEMBLY_FILE) \
+ $(ASSEMBLY_FILE).mdb
+
+moduledir = $(INSTALL_DIR_RESOLVED)
+module_SCRIPTS = $(OUTPUT_FILES)
+EXTRA_DIST = $(SOURCES_BUILD) $(RESOURCES_EXPANDED) $(THEME_ICONS_SOURCE)
+CLEANFILES = $(OUTPUT_FILES) $(ASSEMBLY_FILE).config
+DISTCLEANFILES = *.pidb
+MAINTAINERCLEANFILES = Makefile.in
+all: all-am
+
+.SUFFIXES:
+$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(top_srcdir)/build/build.mk $(top_srcdir)/build/build.environment.mk $(top_srcdir)/build/build.rules.mk $(am__configure_deps)
+ @for dep in $?; do \
+ case '$(am__configure_deps)' in \
+ *$$dep*) \
+ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \
+ && { if test -f $@; then exit 0; else break; fi; }; \
+ exit 1;; \
+ esac; \
+ done; \
+ echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign lib/Hyena/src/Mono.Data.Sqlite/Makefile'; \
+ $(am__cd) $(top_srcdir) && \
+ $(AUTOMAKE) --foreign lib/Hyena/src/Mono.Data.Sqlite/Makefile
+.PRECIOUS: Makefile
+Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
+ @case '$?' in \
+ *config.status*) \
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \
+ *) \
+ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \
+ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \
+ esac;
+
+$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+
+$(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps)
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps)
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(am__aclocal_m4_deps):
+install-moduleSCRIPTS: $(module_SCRIPTS)
+ @$(NORMAL_INSTALL)
+ test -z "$(moduledir)" || $(MKDIR_P) "$(DESTDIR)$(moduledir)"
+ @list='$(module_SCRIPTS)'; test -n "$(moduledir)" || list=; \
+ for p in $$list; do \
+ if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \
+ if test -f "$$d$$p"; then echo "$$d$$p"; echo "$$p"; else :; fi; \
+ done | \
+ sed -e 'p;s,.*/,,;n' \
+ -e 'h;s|.*|.|' \
+ -e 'p;x;s,.*/,,;$(transform)' | sed 'N;N;N;s,\n, ,g' | \
+ $(AWK) 'BEGIN { files["."] = ""; dirs["."] = 1; } \
+ { d=$$3; if (dirs[d] != 1) { print "d", d; dirs[d] = 1 } \
+ if ($$2 == $$4) { files[d] = files[d] " " $$1; \
+ if (++n[d] == $(am__install_max)) { \
+ print "f", d, files[d]; n[d] = 0; files[d] = "" } } \
+ else { print "f", d "/" $$4, $$1 } } \
+ END { for (d in files) print "f", d, files[d] }' | \
+ while read type dir files; do \
+ if test "$$dir" = .; then dir=; else dir=/$$dir; fi; \
+ test -z "$$files" || { \
+ echo " $(INSTALL_SCRIPT) $$files '$(DESTDIR)$(moduledir)$$dir'"; \
+ $(INSTALL_SCRIPT) $$files "$(DESTDIR)$(moduledir)$$dir" || exit $$?; \
+ } \
+ ; done
+
+uninstall-moduleSCRIPTS:
+ @$(NORMAL_UNINSTALL)
+ @list='$(module_SCRIPTS)'; test -n "$(moduledir)" || exit 0; \
+ files=`for p in $$list; do echo "$$p"; done | \
+ sed -e 's,.*/,,;$(transform)'`; \
+ test -n "$$list" || exit 0; \
+ echo " ( cd '$(DESTDIR)$(moduledir)' && rm -f" $$files ")"; \
+ cd "$(DESTDIR)$(moduledir)" && rm -f $$files
+
+mostlyclean-libtool:
+ -rm -f *.lo
+
+clean-libtool:
+ -rm -rf .libs _libs
+tags: TAGS
+TAGS:
+
+ctags: CTAGS
+CTAGS:
+
+
+distdir: $(DISTFILES)
+ @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; \
+ if test -d $$d/$$file; then \
+ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \
+ if test -d "$(distdir)/$$file"; then \
+ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
+ fi; \
+ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
+ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \
+ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
+ fi; \
+ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \
+ else \
+ test -f "$(distdir)/$$file" \
+ || cp -p $$d/$$file "$(distdir)/$$file" \
+ || exit 1; \
+ fi; \
+ done
+check-am: all-am
+check: check-am
+all-am: Makefile $(SCRIPTS)
+installdirs:
+ for dir in "$(DESTDIR)$(moduledir)"; do \
+ test -z "$$dir" || $(MKDIR_P) "$$dir"; \
+ done
+install: install-am
+install-exec: install-exec-am
+install-data: install-data-am
+uninstall: uninstall-am
+
+install-am: all-am
+ @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
+
+installcheck: installcheck-am
+install-strip:
+ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+ `test -z '$(STRIP)' || \
+ echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install
+mostlyclean-generic:
+
+clean-generic:
+ -test -z "$(CLEANFILES)" || rm -f $(CLEANFILES)
+
+distclean-generic:
+ -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
+ -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES)
+ -test -z "$(DISTCLEANFILES)" || rm -f $(DISTCLEANFILES)
+
+maintainer-clean-generic:
+ @echo "This command is intended for maintainers to use"
+ @echo "it deletes files that may require special tools to rebuild."
+ -test -z "$(MAINTAINERCLEANFILES)" || rm -f $(MAINTAINERCLEANFILES)
+clean: clean-am
+
+clean-am: clean-generic clean-libtool mostlyclean-am
+
+distclean: distclean-am
+ -rm -f Makefile
+distclean-am: clean-am distclean-generic
+
+dvi: dvi-am
+
+dvi-am:
+
+html: html-am
+
+html-am:
+
+info: info-am
+
+info-am:
+
+install-data-am: install-data-local install-moduleSCRIPTS
+
+install-dvi: install-dvi-am
+
+install-dvi-am:
+
+install-exec-am:
+
+install-html: install-html-am
+
+install-html-am:
+
+install-info: install-info-am
+
+install-info-am:
+
+install-man:
+
+install-pdf: install-pdf-am
+
+install-pdf-am:
+
+install-ps: install-ps-am
+
+install-ps-am:
+
+installcheck-am:
+
+maintainer-clean: maintainer-clean-am
+ -rm -f Makefile
+maintainer-clean-am: distclean-am maintainer-clean-generic
+
+mostlyclean: mostlyclean-am
+
+mostlyclean-am: mostlyclean-generic mostlyclean-libtool
+
+pdf: pdf-am
+
+pdf-am:
+
+ps: ps-am
+
+ps-am:
+
+uninstall-am: uninstall-local uninstall-moduleSCRIPTS
+
+.MAKE: install-am install-strip
+
+.PHONY: all all-am check check-am clean clean-generic clean-libtool \
+ distclean distclean-generic distclean-libtool distdir dvi \
+ dvi-am html html-am info info-am install install-am \
+ install-data install-data-am install-data-local install-dvi \
+ install-dvi-am install-exec install-exec-am install-html \
+ install-html-am install-info install-info-am install-man \
+ install-moduleSCRIPTS install-pdf install-pdf-am install-ps \
+ install-ps-am install-strip installcheck installcheck-am \
+ installdirs maintainer-clean maintainer-clean-generic \
+ mostlyclean mostlyclean-generic mostlyclean-libtool pdf pdf-am \
+ ps ps-am uninstall uninstall-am uninstall-local \
+ uninstall-moduleSCRIPTS
+
+
+all: $(ASSEMBLY_FILE) theme-icons
+
+run:
+ @pushd $(top_builddir); \
+ make run; \
+ popd;
+
+# uncommented for now.
+# tests are currently excuted from Makefile in $(top_builddir)
+#test:
+# @pushd $(top_builddir)/tests; \
+# make $(ASSEMBLY); \
+# popd;
+
+build-debug:
+ @echo $(DEP_LINK)
+
+$(ASSEMBLY_FILE).mdb: $(ASSEMBLY_FILE)
+
+$(ASSEMBLY_FILE): $(SOURCES_BUILD) $(RESOURCES_EXPANDED) $(DEP_LINK)
+ @mkdir -p $(top_builddir)/bin
+ @if [ ! "x$(ENABLE_RELEASE)" = "xyes" ]; then \
+ $(top_srcdir)/build/dll-map-makefile-verifier $(srcdir)/Makefile.am $(srcdir)/$(notdir $@.config) && \
+ $(MONO) $(top_builddir)/build/dll-map-verifier.exe $(srcdir)/$(notdir $@.config) -iwinmm -ilibbanshee -ilibbnpx11 -ilibc -ilibc.so.6 -iintl -ilibmtp.dll -ilibigemacintegration.dylib -iCFRelease $(SOURCES_BUILD); \
+ fi;
+ $(MCS) \
+ $(GMCS_FLAGS) \
+ $(ASSEMBLY_BUILD_FLAGS) \
+ -nowarn:0278 -nowarn:0078 $$warn \
+ -define:HAVE_GTK_2_10 -define:NET_2_0 \
+ -debug -target:$(TARGET) -out:$@ \
+ $(BUILD_DEFINES) $(ENABLE_TESTS_FLAG) $(ENABLE_ATK_FLAG) \
+ $(FILTERED_LINK) $(RESOURCES_BUILD) $(SOURCES_BUILD)
+ @if [ -e $(srcdir)/$(notdir $@.config) ]; then \
+ cp $(srcdir)/$(notdir $@.config) $(top_builddir)/bin; \
+ fi;
+ @if [ ! -z "$(EXTRA_BUNDLE)" ]; then \
+ cp $(EXTRA_BUNDLE) $(top_builddir)/bin; \
+ fi;
+
+theme-icons: $(THEME_ICONS_SOURCE)
+ @$(INSTALL_ICONS) -il "$(BUILD_DATA_DIR)" "$(srcdir)" $(THEME_ICONS_RELATIVE)
+
+install-data-local: $(THEME_ICONS_SOURCE)
+ @$(INSTALL_ICONS) -i "$(DESTDIR)$(pkgdatadir)" "$(srcdir)" $(THEME_ICONS_RELATIVE)
+
+uninstall-local: $(THEME_ICONS_SOURCE)
+ @$(INSTALL_ICONS) -u "$(DESTDIR)$(pkgdatadir)" "$(srcdir)" $(THEME_ICONS_RELATIVE)
+
+# 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.
+.NOEXPORT:
diff --git a/lib/Hyena/src/Mono.Data.Sqlite/Mono.Data.Sqlite/SQLite3.cs b/lib/Hyena/src/Mono.Data.Sqlite/Mono.Data.Sqlite/SQLite3.cs
new file mode 100644
index 0000000..2b8ed01
--- /dev/null
+++ b/lib/Hyena/src/Mono.Data.Sqlite/Mono.Data.Sqlite/SQLite3.cs
@@ -0,0 +1,674 @@
+//
+// Mono.Data.Sqlite.SQLite3.cs
+//
+// Author(s):
+// Robert Simpson (robert at blackcastlesoft.com)
+//
+// Adapted and modified for the Mono Project by
+// Marek Habersack (grendello at gmail.com)
+//
+//
+// Copyright (C) 2006 Novell, Inc (http://www.novell.com)
+// Copyright (C) 2007 Marek Habersack
+//
+// Permission is hereby granted, free of charge, to any person obtaining
+// a copy of this software and associated documentation files (the
+// "Software"), to deal in the Software without restriction, including
+// without limitation the rights to use, copy, modify, merge, publish,
+// distribute, sublicense, and/or sell copies of the Software, and to
+// permit persons to whom the Software is furnished to do so, subject to
+// the following conditions:
+//
+// The above copyright notice and this permission notice shall be
+// included in all copies or substantial portions of the Software.
+//
+// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
+// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
+// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
+// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+//
+
+/********************************************************
+ * ADO.NET 2.0 Data Provider for Sqlite Version 3.X
+ * Written by Robert Simpson (robert at blackcastlesoft.com)
+ *
+ * Released to the public domain, use at your own risk!
+ ********************************************************/
+#if NET_2_0
+namespace Mono.Data.Sqlite
+{
+ using System;
+ using System.Data;
+ using System.Runtime.InteropServices;
+ using System.Collections.Generic;
+ using System.Globalization;
+
+ /// <summary>
+ /// This class implements SqliteBase completely, and is the guts of the code that interop's Sqlite with .NET
+ /// </summary>
+ internal class Sqlite3 : SqliteBase
+ {
+ /// <summary>
+ /// The opaque pointer returned to us by the sqlite provider
+ /// </summary>
+ protected IntPtr _sql;
+ /// <summary>
+ /// The user-defined functions registered on this connection
+ /// </summary>
+ protected SqliteFunction[] _functionsArray;
+
+ internal Sqlite3(SqliteDateFormats fmt)
+ : base(fmt)
+ {
+ }
+
+ protected override void Dispose(bool bDisposing)
+ {
+ Close();
+ }
+
+ internal override void Close()
+ {
+ if (_sql != IntPtr.Zero)
+ {
+ int n = UnsafeNativeMethods.sqlite3_close(_sql);
+ if (n > 0) throw new SqliteException(n, SqliteLastError());
+ }
+ _sql = IntPtr.Zero;
+ }
+
+ internal override void Cancel()
+ {
+ UnsafeNativeMethods.sqlite3_interrupt(_sql);
+ }
+
+ internal override string Version
+ {
+ get
+ {
+ return ToString (UnsafeNativeMethods.sqlite3_libversion());
+ }
+ }
+
+ internal override int Changes
+ {
+ get
+ {
+ return UnsafeNativeMethods.sqlite3_changes(_sql);
+ }
+ }
+
+ internal override void Open(string strFilename)
+ {
+ if (_sql != IntPtr.Zero) return;
+ int n = UnsafeNativeMethods.sqlite3_open(ToUTF8(strFilename), out _sql);
+ if (n > 0) throw new SqliteException(n, SqliteLastError());
+
+ _functionsArray = SqliteFunction.BindFunctions(this);
+ }
+
+ internal override void SetTimeout(int nTimeoutMS)
+ {
+ int n = UnsafeNativeMethods.sqlite3_busy_timeout(_sql, nTimeoutMS);
+ if (n > 0) throw new SqliteException(n, SqliteLastError());
+ }
+
+ internal override bool Step(SqliteStatement stmt)
+ {
+ int n;
+ long timeout = 0;
+ Random rnd = null;
+
+ while (true)
+ {
+ n = UnsafeNativeMethods.sqlite3_step(stmt._sqlite_stmt);
+
+ if (n == 100) return true;
+ if (n == 101) return false;
+
+ if (n > 0)
+ {
+ int r;
+
+ // An error occurred, attempt to reset the statement. If the reset worked because the
+ // schema has changed, re-try the step again. If it errored our because the database
+ // is locked, then keep retrying until the command timeout occurs.
+ r = Reset(stmt);
+
+ if (r == 0)
+ throw new SqliteException(n, SqliteLastError());
+
+ else if (r == 6 && stmt._command != null) // SQLITE_LOCKED
+ {
+ // Keep trying
+ if (timeout == 0) // First time we've encountered the lock
+ {
+ timeout = Environment.TickCount + (stmt._command._commandTimeout * 1000);
+ rnd = new Random();
+ }
+ // If we've exceeded the command's timeout, give up and throw an error
+ if (Environment.TickCount - timeout > 0)
+ {
+ throw new SqliteException(r, SqliteLastError());
+ }
+ else
+ {
+ // Otherwise sleep for a random amount of time up to 250ms
+ UnsafeNativeMethods.sqlite3_sleep((uint)rnd.Next(1, 250));
+ }
+ }
+
+ }
+ }
+ }
+
+ internal override void FinalizeStatement(SqliteStatement stmt)
+ {
+ if (stmt._sqlite_stmt != IntPtr.Zero)
+ {
+ int n = UnsafeNativeMethods.sqlite3_finalize(stmt._sqlite_stmt);
+ if (n > 0) throw new SqliteException(n, SqliteLastError());
+ }
+ stmt._sqlite_stmt = IntPtr.Zero;
+ }
+
+ internal override int Reset(SqliteStatement stmt)
+ {
+ int n;
+
+ n = UnsafeNativeMethods.sqlite3_reset(stmt._sqlite_stmt);
+
+ // If the schema changed, try and re-prepare it
+ if (n == 17) // SQLITE_SCHEMA
+ {
+ // Recreate a dummy statement
+ string str;
+ using (SqliteStatement tmp = Prepare(stmt._sqlStatement, null, out str))
+ {
+ // Finalize the existing statement
+ FinalizeStatement(stmt);
+
+ // Reassign a new statement pointer to the old statement and clear the temporary one
+ stmt._sqlite_stmt = tmp._sqlite_stmt;
+ tmp._sqlite_stmt = IntPtr.Zero;
+
+ // Reapply parameters
+ stmt.BindParameters();
+ }
+ return -1; // Reset was OK, with schema change
+ }
+ else if (n == 6) // SQLITE_LOCKED
+ return n;
+
+ if (n > 0)
+ throw new SqliteException(n, SqliteLastError());
+
+ return 0; // We reset OK, no schema changes
+ }
+
+ internal override string SqliteLastError()
+ {
+ return ToString(UnsafeNativeMethods.sqlite3_errmsg(_sql));
+ }
+
+ internal override SqliteStatement Prepare(string strSql, SqliteStatement previous, out string strRemain)
+ {
+ IntPtr stmt = IntPtr.Zero;
+ IntPtr ptr = IntPtr.Zero;
+ int n = 17;
+ int retries = 0;
+ byte[] b = ToUTF8(strSql);
+ string typedefs = null;
+ SqliteStatement cmd = null;
+ GCHandle handle = GCHandle.Alloc(b, GCHandleType.Pinned);
+ IntPtr psql = handle.AddrOfPinnedObject();
+
+ try
+ {
+ while (n == 17 && retries < 3)
+ {
+ try {
+ n = UnsafeNativeMethods.sqlite3_prepare_v2(_sql, psql, b.Length - 1, out stmt, out ptr);
+ } catch (EntryPointNotFoundException) {
+ n = UnsafeNativeMethods.sqlite3_prepare (_sql, psql, b.Length - 1, out stmt, out ptr);
+ }
+
+ retries++;
+
+ if (n == 1)
+ {
+ if (String.Compare(SqliteLastError(), "near \"TYPES\": syntax error", StringComparison.OrdinalIgnoreCase) == 0)
+ {
+ int pos = strSql.IndexOf(';');
+ if (pos == -1) pos = strSql.Length - 1;
+
+ typedefs = strSql.Substring(0, pos + 1);
+ strSql = strSql.Substring(pos + 1);
+
+ strRemain = "";
+
+ while (cmd == null && strSql.Length > 0)
+ {
+ cmd = Prepare(strSql, previous, out strRemain);
+ strSql = strRemain;
+ }
+
+ if (cmd != null)
+ cmd.SetTypes(typedefs);
+
+ return cmd;
+ }
+ }
+ }
+
+ if (n > 0) throw new SqliteException(n, SqliteLastError());
+
+ strRemain = UTF8ToString(ptr);
+
+ if (stmt != IntPtr.Zero) cmd = new SqliteStatement(this, stmt, strSql.Substring(0, strSql.Length - strRemain.Length), previous);
+
+ return cmd;
+ }
+ finally
+ {
+ handle.Free();
+ }
+ }
+
+ internal override void Bind_Double(SqliteStatement stmt, int index, double value)
+ {
+ int n = UnsafeNativeMethods.sqlite3_bind_double(stmt._sqlite_stmt, index, value);
+ if (n > 0) throw new SqliteException(n, SqliteLastError());
+ }
+
+ internal override void Bind_Int32(SqliteStatement stmt, int index, int value)
+ {
+ int n = UnsafeNativeMethods.sqlite3_bind_int(stmt._sqlite_stmt, index, value);
+ if (n > 0) throw new SqliteException(n, SqliteLastError());
+ }
+
+ internal override void Bind_Int64(SqliteStatement stmt, int index, long value)
+ {
+ int n = UnsafeNativeMethods.sqlite3_bind_int64(stmt._sqlite_stmt, index, value);
+ if (n > 0) throw new SqliteException(n, SqliteLastError());
+ }
+
+ internal override void Bind_Text(SqliteStatement stmt, int index, string value)
+ {
+ byte[] b = ToUTF8(value);
+ int n = UnsafeNativeMethods.sqlite3_bind_text(stmt._sqlite_stmt, index, b, b.Length - 1, (IntPtr)(-1));
+ if (n > 0) throw new SqliteException(n, SqliteLastError());
+ }
+
+ internal override void Bind_DateTime(SqliteStatement stmt, int index, DateTime dt)
+ {
+ byte[] b = ToUTF8(dt);
+ int n = UnsafeNativeMethods.sqlite3_bind_text(stmt._sqlite_stmt, index, b, b.Length - 1, (IntPtr)(-1));
+ if (n > 0) throw new SqliteException(n, SqliteLastError());
+ }
+
+ internal override void Bind_Blob(SqliteStatement stmt, int index, byte[] blobData)
+ {
+ int n = UnsafeNativeMethods.sqlite3_bind_blob(stmt._sqlite_stmt, index, blobData, blobData.Length, (IntPtr)(-1));
+ if (n > 0) throw new SqliteException(n, SqliteLastError());
+ }
+
+ internal override void Bind_Null(SqliteStatement stmt, int index)
+ {
+ int n = UnsafeNativeMethods.sqlite3_bind_null(stmt._sqlite_stmt, index);
+ if (n > 0) throw new SqliteException(n, SqliteLastError());
+ }
+
+ internal override int Bind_ParamCount(SqliteStatement stmt)
+ {
+ return UnsafeNativeMethods.sqlite3_bind_parameter_count(stmt._sqlite_stmt);
+ }
+
+ internal override string Bind_ParamName(SqliteStatement stmt, int index)
+ {
+ return ToString(UnsafeNativeMethods.sqlite3_bind_parameter_name(stmt._sqlite_stmt, index));
+ }
+
+ internal override int Bind_ParamIndex(SqliteStatement stmt, string paramName)
+ {
+ return UnsafeNativeMethods.sqlite3_bind_parameter_index(stmt._sqlite_stmt, ToUTF8(paramName));
+ }
+
+ internal override int ColumnCount(SqliteStatement stmt)
+ {
+ return UnsafeNativeMethods.sqlite3_column_count(stmt._sqlite_stmt);
+ }
+
+ internal override string ColumnName(SqliteStatement stmt, int index)
+ {
+ return ToString(UnsafeNativeMethods.sqlite3_column_name(stmt._sqlite_stmt, index));
+ }
+
+ internal override TypeAffinity ColumnAffinity(SqliteStatement stmt, int index)
+ {
+ return UnsafeNativeMethods.sqlite3_column_type(stmt._sqlite_stmt, index);
+ }
+
+ internal override string ColumnType(SqliteStatement stmt, int index, out TypeAffinity nAffinity)
+ {
+ IntPtr p = UnsafeNativeMethods.sqlite3_column_decltype(stmt._sqlite_stmt, index);
+ nAffinity = ColumnAffinity(stmt, index);
+
+ if (p != IntPtr.Zero) return base.ToString(p);
+ else
+ {
+ string[] ar = stmt.TypeDefinitions;
+ if (ar != null)
+ {
+ if (index < ar.Length)
+ return ar[index];
+ }
+
+ switch (nAffinity)
+ {
+ case TypeAffinity.Int64:
+ return "BIGINT";
+ case TypeAffinity.Double:
+ return "DOUBLE";
+ case TypeAffinity.Blob:
+ return "BLOB";
+ default:
+ return "TEXT";
+ }
+ }
+ }
+
+ internal override int ColumnIndex(SqliteStatement stmt, string columnName)
+ {
+ int x = ColumnCount(stmt);
+
+ for (int n = 0; n < x; n++)
+ {
+ if (String.Compare(columnName, ColumnName(stmt, n), true, CultureInfo.InvariantCulture) == 0)
+ return n;
+ }
+ return -1;
+ }
+
+ internal override string ColumnOriginalName(SqliteStatement stmt, int index)
+ {
+ return ToString(UnsafeNativeMethods.sqlite3_column_origin_name(stmt._sqlite_stmt, index));
+ }
+
+ internal override string ColumnDatabaseName(SqliteStatement stmt, int index)
+ {
+ return ToString(UnsafeNativeMethods.sqlite3_column_database_name(stmt._sqlite_stmt, index));
+ }
+
+ internal override string ColumnTableName(SqliteStatement stmt, int index)
+ {
+ return ToString(UnsafeNativeMethods.sqlite3_column_table_name(stmt._sqlite_stmt, index));
+ }
+
+ internal override void ColumnMetaData(string dataBase, string table, string column, out string dataType,
+ out string collateSequence, out bool notNull, out bool primaryKey,
+ out bool autoIncrement)
+ {
+ IntPtr dataTypePtr;
+ IntPtr collSeqPtr;
+ int nnotNull;
+ int nprimaryKey;
+ int nautoInc;
+ int n;
+
+ n = UnsafeNativeMethods.sqlite3_table_column_metadata(_sql, ToUTF8(dataBase), ToUTF8(table), ToUTF8(column),
+ out dataTypePtr, out collSeqPtr, out nnotNull,
+ out nprimaryKey, out nautoInc);
+ if (n > 0) throw new SqliteException(n, SqliteLastError());
+
+ dataType = base.ToString(dataTypePtr);
+ collateSequence = base.ToString(collSeqPtr);
+
+ notNull = (nnotNull == 1);
+ primaryKey = (nprimaryKey == 1);
+ autoIncrement = (nautoInc == 1);
+ }
+
+ internal override double GetDouble(SqliteStatement stmt, int index)
+ {
+ return UnsafeNativeMethods.sqlite3_column_double(stmt._sqlite_stmt, index);
+ }
+
+ internal override int GetInt32(SqliteStatement stmt, int index)
+ {
+ return UnsafeNativeMethods.sqlite3_column_int(stmt._sqlite_stmt, index);
+ }
+
+ internal override long GetInt64(SqliteStatement stmt, int index)
+ {
+ return UnsafeNativeMethods.sqlite3_column_int64(stmt._sqlite_stmt, index);
+ }
+
+ internal override string GetText(SqliteStatement stmt, int index)
+ {
+ return ToString (UnsafeNativeMethods.sqlite3_column_text(stmt._sqlite_stmt, index));
+ }
+
+ internal override DateTime GetDateTime(SqliteStatement stmt, int index)
+ {
+ return ToDateTime(GetText (stmt, index));
+ }
+
+ internal override long GetBytes(SqliteStatement stmt, int index, int nDataOffset, byte[] bDest, int nStart, int nLength)
+ {
+ IntPtr ptr;
+ int nlen;
+ int nCopied = nLength;
+
+ nlen = UnsafeNativeMethods.sqlite3_column_bytes(stmt._sqlite_stmt, index);
+ ptr = UnsafeNativeMethods.sqlite3_column_blob(stmt._sqlite_stmt, index);
+
+ if (bDest == null) return nlen;
+
+ if (nCopied + nStart > bDest.Length) nCopied = bDest.Length - nStart;
+ if (nCopied + nDataOffset > nlen) nCopied = nlen - nDataOffset;
+
+ unsafe {
+ if (nCopied > 0)
+ Marshal.Copy((IntPtr)((byte*)ptr + nDataOffset), bDest, nStart, nCopied);
+ else nCopied = 0;
+ }
+
+ return nCopied;
+ }
+
+ internal override long GetChars(SqliteStatement stmt, int index, int nDataOffset, char[] bDest, int nStart, int nLength)
+ {
+ int nlen;
+ int nCopied = nLength;
+
+ string str = GetText(stmt, index);
+ nlen = str.Length;
+
+ if (bDest == null) return nlen;
+
+ if (nCopied + nStart > bDest.Length) nCopied = bDest.Length - nStart;
+ if (nCopied + nDataOffset > nlen) nCopied = nlen - nDataOffset;
+
+ if (nCopied > 0)
+ str.CopyTo(nDataOffset, bDest, nStart, nCopied);
+ else nCopied = 0;
+
+ return nCopied;
+ }
+
+ internal override bool IsNull(SqliteStatement stmt, int index)
+ {
+ return (ColumnAffinity(stmt, index) == TypeAffinity.Null);
+ }
+
+ internal override int AggregateCount(IntPtr context)
+ {
+ return UnsafeNativeMethods.sqlite3_aggregate_count(context);
+ }
+
+ internal override void CreateFunction(string strFunction, int nArgs, SqliteCallback func, SqliteCallback funcstep, SqliteFinalCallback funcfinal)
+ {
+ int n = UnsafeNativeMethods.sqlite3_create_function(_sql, ToUTF8(strFunction), nArgs, 1, IntPtr.Zero, func, funcstep, funcfinal);
+ if (n > 0) throw new SqliteException(n, SqliteLastError());
+ }
+
+ internal override void CreateCollation(string strCollation, SqliteCollation func)
+ {
+ int n = UnsafeNativeMethods.sqlite3_create_collation(_sql, ToUTF8(strCollation), 1, IntPtr.Zero, func);
+ if (n > 0) throw new SqliteException(n, SqliteLastError());
+ }
+
+ internal override long GetParamValueBytes(IntPtr p, int nDataOffset, byte[] bDest, int nStart, int nLength)
+ {
+ IntPtr ptr;
+ int nlen;
+ int nCopied = nLength;
+
+ nlen = UnsafeNativeMethods.sqlite3_value_bytes(p);
+ ptr = UnsafeNativeMethods.sqlite3_value_blob(p);
+
+ if (bDest == null) return nlen;
+
+ if (nCopied + nStart > bDest.Length) nCopied = bDest.Length - nStart;
+ if (nCopied + nDataOffset > nlen) nCopied = nlen - nDataOffset;
+
+ unsafe {
+ if (nCopied > 0)
+ Marshal.Copy((IntPtr)((byte*)ptr + nDataOffset), bDest, nStart, nCopied);
+ else nCopied = 0;
+ }
+
+ return nCopied;
+ }
+
+ internal override double GetParamValueDouble(IntPtr ptr)
+ {
+ return UnsafeNativeMethods.sqlite3_value_double(ptr);
+ }
+
+ internal override int GetParamValueInt32(IntPtr ptr)
+ {
+ return UnsafeNativeMethods.sqlite3_value_int(ptr);
+ }
+
+ internal override long GetParamValueInt64(IntPtr ptr)
+ {
+ return UnsafeNativeMethods.sqlite3_value_int64(ptr);
+ }
+
+ internal override string GetParamValueText(IntPtr ptr)
+ {
+ return ToString(UnsafeNativeMethods.sqlite3_value_text(ptr));
+ }
+
+ internal override TypeAffinity GetParamValueType(IntPtr ptr)
+ {
+ return UnsafeNativeMethods.sqlite3_value_type(ptr);
+ }
+
+ internal override void ReturnBlob(IntPtr context, byte[] value)
+ {
+ UnsafeNativeMethods.sqlite3_result_blob(context, value, value.Length, (IntPtr)(-1));
+ }
+
+ internal override void ReturnDouble(IntPtr context, double value)
+ {
+ UnsafeNativeMethods.sqlite3_result_double(context, value);
+ }
+
+ internal override void ReturnError(IntPtr context, string value)
+ {
+ UnsafeNativeMethods.sqlite3_result_error(context, ToUTF8(value), value.Length);
+ }
+
+ internal override void ReturnInt32(IntPtr context, int value)
+ {
+ UnsafeNativeMethods.sqlite3_result_int(context, value);
+ }
+
+ internal override void ReturnInt64(IntPtr context, long value)
+ {
+ UnsafeNativeMethods.sqlite3_result_int64(context, value);
+ }
+
+ internal override void ReturnNull(IntPtr context)
+ {
+ UnsafeNativeMethods.sqlite3_result_null(context);
+ }
+
+ internal override void ReturnText(IntPtr context, string value)
+ {
+ byte[] b = ToUTF8(value);
+ UnsafeNativeMethods.sqlite3_result_text(context, ToUTF8(value), b.Length - 1, (IntPtr)(-1));
+ }
+
+ internal override IntPtr AggregateContext(IntPtr context)
+ {
+ return UnsafeNativeMethods.sqlite3_aggregate_context(context, 1);
+ }
+
+ internal override void SetUpdateHook(SqliteUpdateCallback func)
+ {
+ UnsafeNativeMethods.sqlite3_update_hook(_sql, func);
+ }
+
+ internal override void SetCommitHook(SqliteCommitCallback func)
+ {
+ UnsafeNativeMethods.sqlite3_commit_hook(_sql, func);
+ }
+
+ internal override void SetRollbackHook(SqliteRollbackCallback func)
+ {
+ UnsafeNativeMethods.sqlite3_rollback_hook(_sql, func);
+ }
+
+ /// <summary>
+ /// Helper function to retrieve a column of data from an active statement.
+ /// </summary>
+ /// <param name="stmt">The statement being step()'d through</param>
+ /// <param name="index">The column index to retrieve</param>
+ /// <param name="typ">The type of data contained in the column. If Uninitialized, this function will retrieve the datatype information.</param>
+ /// <returns>Returns the data in the column</returns>
+ internal override object GetValue(SqliteStatement stmt, int index, SqliteType typ)
+ {
+ if (typ.Affinity == 0) typ = SqliteConvert.ColumnToType(stmt, index);
+ if (IsNull(stmt, index)) return DBNull.Value;
+
+ Type t = SqliteConvert.SqliteTypeToType(typ);
+
+ switch (TypeToAffinity(t))
+ {
+ case TypeAffinity.Blob:
+ if (typ.Type == DbType.Guid && typ.Affinity == TypeAffinity.Text)
+ return new Guid(GetText(stmt, index));
+
+ int n = (int)GetBytes(stmt, index, 0, null, 0, 0);
+ byte[] b = new byte[n];
+ GetBytes(stmt, index, 0, b, 0, n);
+
+ if (typ.Type == DbType.Guid && n == 16)
+ return new Guid(b);
+
+ return b;
+ case TypeAffinity.DateTime:
+ return GetDateTime(stmt, index);
+ case TypeAffinity.Double:
+ return Convert.ChangeType(GetDouble(stmt, index), t, null);
+ case TypeAffinity.Int64:
+ return Convert.ChangeType(GetInt64(stmt, index), t, null);
+ default:
+ return GetText(stmt, index);
+ }
+ }
+
+ internal override long GetLastInsertRowId ()
+ {
+ return UnsafeNativeMethods.sqlite3_last_insert_rowid (_sql);
+ }
+ }
+}
+#endif
diff --git a/lib/Hyena/src/Mono.Data.Sqlite/Mono.Data.Sqlite/SQLite3_UTF16.cs b/lib/Hyena/src/Mono.Data.Sqlite/Mono.Data.Sqlite/SQLite3_UTF16.cs
new file mode 100644
index 0000000..0babde8
--- /dev/null
+++ b/lib/Hyena/src/Mono.Data.Sqlite/Mono.Data.Sqlite/SQLite3_UTF16.cs
@@ -0,0 +1,162 @@
+//
+// Mono.Data.Sqlite.SQLite3_UTF16.cs
+//
+// Author(s):
+// Robert Simpson (robert at blackcastlesoft.com)
+//
+// Adapted and modified for the Mono Project by
+// Marek Habersack (grendello at gmail.com)
+//
+//
+// Copyright (C) 2006 Novell, Inc (http://www.novell.com)
+// Copyright (C) 2007 Marek Habersack
+//
+// Permission is hereby granted, free of charge, to any person obtaining
+// a copy of this software and associated documentation files (the
+// "Software"), to deal in the Software without restriction, including
+// without limitation the rights to use, copy, modify, merge, publish,
+// distribute, sublicense, and/or sell copies of the Software, and to
+// permit persons to whom the Software is furnished to do so, subject to
+// the following conditions:
+//
+// The above copyright notice and this permission notice shall be
+// included in all copies or substantial portions of the Software.
+//
+// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
+// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
+// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
+// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+//
+
+/********************************************************
+ * ADO.NET 2.0 Data Provider for SQLite Version 3.X
+ * Written by Robert Simpson (robert at blackcastlesoft.com)
+ *
+ * Released to the public domain, use at your own risk!
+ ********************************************************/
+#if NET_2_0
+namespace Mono.Data.Sqlite
+{
+ using System;
+ using System.Runtime.InteropServices;
+
+ /// <summary>
+ /// Alternate Sqlite3 object, overriding many text behaviors to support UTF-16 (Unicode)
+ /// </summary>
+ internal class Sqlite3_UTF16 : Sqlite3
+ {
+ internal Sqlite3_UTF16(SqliteDateFormats fmt)
+ : base(fmt)
+ {
+ }
+
+ /// <summary>
+ /// Overrides SqliteConvert.ToString() to marshal UTF-16 strings instead of UTF-8
+ /// </summary>
+ /// <param name="b">A pointer to a UTF-16 string</param>
+ /// <param name="nbytelen">The length (IN BYTES) of the string</param>
+ /// <returns>A .NET string</returns>
+ public override string ToString(IntPtr b)
+ {
+ return Marshal.PtrToStringUni(b);
+ }
+
+ internal override string Version
+ {
+ get
+ {
+ return base.ToString(UnsafeNativeMethods.sqlite3_libversion());
+ }
+ }
+
+ internal override void Open(string strFilename)
+ {
+ if (_sql != IntPtr.Zero) return;
+ int n = UnsafeNativeMethods.sqlite3_open16(strFilename, out _sql);
+ if (n > 0) throw new SqliteException(n, SqliteLastError());
+
+ _functionsArray = SqliteFunction.BindFunctions(this);
+ }
+
+ internal override string SqliteLastError()
+ {
+ return ToString(UnsafeNativeMethods.sqlite3_errmsg16(_sql));
+ }
+
+ internal override void Bind_DateTime(SqliteStatement stmt, int index, DateTime dt)
+ {
+ Bind_Text(stmt, index, ToString(dt));
+ }
+
+ internal override string Bind_ParamName(SqliteStatement stmt, int index)
+ {
+ return base.ToString(UnsafeNativeMethods.sqlite3_bind_parameter_name(stmt._sqlite_stmt, index));
+ }
+
+ internal override void Bind_Text(SqliteStatement stmt, int index, string value)
+ {
+ int n = UnsafeNativeMethods.sqlite3_bind_text16(stmt._sqlite_stmt, index, value, value.Length * 2, -1);
+ if (n > 0) throw new SqliteException(n, SqliteLastError());
+ }
+
+ internal override string ColumnName(SqliteStatement stmt, int index)
+ {
+ return ToString(UnsafeNativeMethods.sqlite3_column_name16(stmt._sqlite_stmt, index));
+ }
+
+ internal override DateTime GetDateTime(SqliteStatement stmt, int index)
+ {
+ return ToDateTime(GetText(stmt, index));
+ }
+ internal override string GetText(SqliteStatement stmt, int index)
+ {
+ return ToString (UnsafeNativeMethods.sqlite3_column_text16(stmt._sqlite_stmt, index));
+ }
+
+ internal override string ColumnOriginalName(SqliteStatement stmt, int index)
+ {
+ return ToString(UnsafeNativeMethods.sqlite3_column_origin_name16(stmt._sqlite_stmt, index));
+ }
+
+ internal override string ColumnDatabaseName(SqliteStatement stmt, int index)
+ {
+ return ToString(UnsafeNativeMethods.sqlite3_column_database_name16(stmt._sqlite_stmt, index));
+ }
+
+ internal override string ColumnTableName(SqliteStatement stmt, int index)
+ {
+ return ToString(UnsafeNativeMethods.sqlite3_column_table_name16(stmt._sqlite_stmt, index));
+ }
+
+ internal override void CreateFunction(string strFunction, int nArgs, SqliteCallback func, SqliteCallback funcstep, SqliteFinalCallback funcfinal)
+ {
+ int n = UnsafeNativeMethods.sqlite3_create_function16(_sql, strFunction, nArgs, 4, IntPtr.Zero, func, funcstep, funcfinal);
+ if (n > 0) throw new SqliteException(n, SqliteLastError());
+ }
+
+ internal override void CreateCollation(string strCollation, SqliteCollation func)
+ {
+ int n = UnsafeNativeMethods.sqlite3_create_collation16(_sql, strCollation, 4, IntPtr.Zero, func);
+ if (n > 0) throw new SqliteException(n, SqliteLastError());
+ }
+
+ internal override string GetParamValueText(IntPtr ptr)
+ {
+ return ToString(UnsafeNativeMethods.sqlite3_value_text16(ptr));
+ }
+
+ internal override void ReturnError(IntPtr context, string value)
+ {
+ UnsafeNativeMethods.sqlite3_result_error16(context, value, value.Length);
+ }
+
+ internal override void ReturnText(IntPtr context, string value)
+ {
+ UnsafeNativeMethods.sqlite3_result_text16(context, value, value.Length, (IntPtr)(-1));
+ }
+ }
+}
+#endif
diff --git a/lib/Hyena/src/Mono.Data.Sqlite/Mono.Data.Sqlite/SQLiteBase.cs b/lib/Hyena/src/Mono.Data.Sqlite/Mono.Data.Sqlite/SQLiteBase.cs
new file mode 100644
index 0000000..a7e3394
--- /dev/null
+++ b/lib/Hyena/src/Mono.Data.Sqlite/Mono.Data.Sqlite/SQLiteBase.cs
@@ -0,0 +1,195 @@
+//
+// Mono.Data.Sqlite.SQLiteBase.cs
+//
+// Author(s):
+// Robert Simpson (robert at blackcastlesoft.com)
+//
+// Adapted and modified for the Mono Project by
+// Marek Habersack (grendello at gmail.com)
+//
+//
+// Copyright (C) 2006 Novell, Inc (http://www.novell.com)
+// Copyright (C) 2007 Marek Habersack
+//
+// Permission is hereby granted, free of charge, to any person obtaining
+// a copy of this software and associated documentation files (the
+// "Software"), to deal in the Software without restriction, including
+// without limitation the rights to use, copy, modify, merge, publish,
+// distribute, sublicense, and/or sell copies of the Software, and to
+// permit persons to whom the Software is furnished to do so, subject to
+// the following conditions:
+//
+// The above copyright notice and this permission notice shall be
+// included in all copies or substantial portions of the Software.
+//
+// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
+// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
+// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
+// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+//
+
+/********************************************************
+ * ADO.NET 2.0 Data Provider for SQLite Version 3.X
+ * Written by Robert Simpson (robert at blackcastlesoft.com)
+ *
+ * Released to the public domain, use at your own risk!
+ ********************************************************/
+#if NET_2_0
+namespace Mono.Data.Sqlite
+{
+ using System;
+ using System.Data;
+ using System.Runtime.InteropServices;
+ using System.Collections.Generic;
+
+ /// <summary>
+ /// This internal class provides the foundation of Sqlite support. It defines all the abstract members needed to implement
+ /// a Sqlite data provider, and inherits from SqliteConvert which allows for simple translations of string to and from Sqlite.
+ /// </summary>
+ internal abstract class SqliteBase : SqliteConvert, IDisposable
+ {
+ internal SqliteBase(SqliteDateFormats fmt)
+ : base(fmt) {}
+
+ /// <summary>
+ /// Returns a string representing the active version of Sqlite
+ /// </summary>
+ internal abstract string Version { get; }
+ /// <summary>
+ /// Returns the number of changes the last executing insert/update caused.
+ /// </summary>
+ internal abstract int Changes { get; }
+ /// <summary>
+ /// Opens a database.
+ /// </summary>
+ /// <remarks>
+ /// Implementers should call SqliteFunction.BindFunctions() and save the array after opening a connection
+ /// to bind all attributed user-defined functions and collating sequences to the new connection.
+ /// </remarks>
+ /// <param name="strFilename">The filename of the database to open. Sqlite automatically creates it if it doesn't exist.</param>
+ internal abstract void Open(string strFilename);
+ /// <summary>
+ /// Closes the currently-open database.
+ /// </summary>
+ /// <remarks>
+ /// After the database has been closed implemeters should call SqliteFunction.UnbindFunctions() to deallocate all interop allocated
+ /// memory associated with the user-defined functions and collating sequences tied to the closed connection.
+ /// </remarks>
+ internal abstract void Close();
+ /// <summary>
+ /// Sets the busy timeout on the connection. SqliteCommand will call this before executing any command.
+ /// </summary>
+ /// <param name="nTimeoutMS">The number of milliseconds to wait before returning SQLITE_BUSY</param>
+ internal abstract void SetTimeout(int nTimeoutMS);
+ /// <summary>
+ /// Returns the text of the last error issued by Sqlite
+ /// </summary>
+ /// <returns></returns>
+ internal abstract string SqliteLastError();
+
+ /// <summary>
+ /// Prepares a SQL statement for execution.
+ /// </summary>
+ /// <param name="strSql">The SQL command text to prepare</param>
+ /// <param name="previous">The previous statement in a multi-statement command, or null if no previous statement exists</param>
+ /// <param name="strRemain">The remainder of the statement that was not processed. Each call to prepare parses the
+ /// SQL up to to either the end of the text or to the first semi-colon delimiter. The remaining text is returned
+ /// here for a subsequent call to Prepare() until all the text has been processed.</param>
+ /// <returns>Returns an initialized SqliteStatement.</returns>
+ internal abstract SqliteStatement Prepare(string strSql, SqliteStatement previous, out string strRemain);
+ /// <summary>
+ /// Steps through a prepared statement.
+ /// </summary>
+ /// <param name="stmt">The SqliteStatement to step through</param>
+ /// <returns>True if a row was returned, False if not.</returns>
+ internal abstract bool Step(SqliteStatement stmt);
+ /// <summary>
+ /// Finalizes a prepared statement.
+ /// </summary>
+ /// <param name="stmt">The statement to finalize</param>
+ internal abstract void FinalizeStatement(SqliteStatement stmt);
+ /// <summary>
+ /// Resets a prepared statement so it can be executed again. If the error returned is SQLITE_SCHEMA,
+ /// transparently attempt to rebuild the SQL statement and throw an error if that was not possible.
+ /// </summary>
+ /// <param name="stmt">The statement to reset</param>
+ /// <returns>Returns -1 if the schema changed while resetting, 0 if the reset was sucessful or 6 (SQLITE_LOCKED) if the reset failed due to a lock</returns>
+ internal abstract int Reset(SqliteStatement stmt);
+
+ internal abstract void Cancel();
+
+ internal abstract void Bind_Double(SqliteStatement stmt, int index, double value);
+ internal abstract void Bind_Int32(SqliteStatement stmt, int index, Int32 value);
+ internal abstract void Bind_Int64(SqliteStatement stmt, int index, Int64 value);
+ internal abstract void Bind_Text(SqliteStatement stmt, int index, string value);
+ internal abstract void Bind_Blob(SqliteStatement stmt, int index, byte[] blobData);
+ internal abstract void Bind_DateTime(SqliteStatement stmt, int index, DateTime dt);
+ internal abstract void Bind_Null(SqliteStatement stmt, int index);
+
+ internal abstract int Bind_ParamCount(SqliteStatement stmt);
+ internal abstract string Bind_ParamName(SqliteStatement stmt, int index);
+ internal abstract int Bind_ParamIndex(SqliteStatement stmt, string paramName);
+
+ internal abstract int ColumnCount(SqliteStatement stmt);
+ internal abstract string ColumnName(SqliteStatement stmt, int index);
+ internal abstract TypeAffinity ColumnAffinity(SqliteStatement stmt, int index);
+ internal abstract string ColumnType(SqliteStatement stmt, int index, out TypeAffinity nAffinity);
+ internal abstract int ColumnIndex(SqliteStatement stmt, string columnName);
+ internal abstract string ColumnOriginalName(SqliteStatement stmt, int index);
+ internal abstract string ColumnDatabaseName(SqliteStatement stmt, int index);
+ internal abstract string ColumnTableName(SqliteStatement stmt, int index);
+ internal abstract void ColumnMetaData(string dataBase, string table, string column, out string dataType, out string collateSequence, out bool notNull, out bool primaryKey, out bool autoIncrement);
+
+ internal abstract double GetDouble(SqliteStatement stmt, int index);
+ internal abstract Int32 GetInt32(SqliteStatement stmt, int index);
+ internal abstract Int64 GetInt64(SqliteStatement stmt, int index);
+ internal abstract string GetText(SqliteStatement stmt, int index);
+ internal abstract long GetBytes(SqliteStatement stmt, int index, int nDataoffset, byte[] bDest, int nStart, int nLength);
+ internal abstract long GetChars(SqliteStatement stmt, int index, int nDataoffset, char[] bDest, int nStart, int nLength);
+ internal abstract DateTime GetDateTime(SqliteStatement stmt, int index);
+ internal abstract bool IsNull(SqliteStatement stmt, int index);
+
+ internal abstract void CreateCollation(string strCollation, SqliteCollation func);
+ internal abstract void CreateFunction(string strFunction, int nArgs, SqliteCallback func, SqliteCallback funcstep, SqliteFinalCallback funcfinal);
+
+ internal abstract int AggregateCount(IntPtr context);
+ internal abstract IntPtr AggregateContext(IntPtr context);
+
+ internal abstract long GetParamValueBytes(IntPtr ptr, int nDataOffset, byte[] bDest, int nStart, int nLength);
+ internal abstract double GetParamValueDouble(IntPtr ptr);
+ internal abstract int GetParamValueInt32(IntPtr ptr);
+ internal abstract Int64 GetParamValueInt64(IntPtr ptr);
+ internal abstract string GetParamValueText(IntPtr ptr);
+ internal abstract TypeAffinity GetParamValueType(IntPtr ptr);
+
+ internal abstract void ReturnBlob(IntPtr context, byte[] value);
+ internal abstract void ReturnDouble(IntPtr context, double value);
+ internal abstract void ReturnError(IntPtr context, string value);
+ internal abstract void ReturnInt32(IntPtr context, Int32 value);
+ internal abstract void ReturnInt64(IntPtr context, Int64 value);
+ internal abstract void ReturnNull(IntPtr context);
+ internal abstract void ReturnText(IntPtr context, string value);
+
+ internal abstract void SetUpdateHook(SqliteUpdateCallback func);
+ internal abstract void SetCommitHook(SqliteCommitCallback func);
+ internal abstract void SetRollbackHook(SqliteRollbackCallback func);
+
+ internal abstract long GetLastInsertRowId ();
+
+ internal abstract object GetValue(SqliteStatement stmt, int index, SqliteType typ);
+
+ protected virtual void Dispose(bool bDisposing)
+ {
+ }
+
+ public void Dispose()
+ {
+ Dispose(true);
+ GC.SuppressFinalize(this);
+ }
+ }
+}
+#endif
diff --git a/lib/Hyena/src/Mono.Data.Sqlite/Mono.Data.Sqlite/SQLiteCommand.cs b/lib/Hyena/src/Mono.Data.Sqlite/Mono.Data.Sqlite/SQLiteCommand.cs
new file mode 100644
index 0000000..eb9d039
--- /dev/null
+++ b/lib/Hyena/src/Mono.Data.Sqlite/Mono.Data.Sqlite/SQLiteCommand.cs
@@ -0,0 +1,657 @@
+//
+// Mono.Data.Sqlite.SQLiteCommand.cs
+//
+// Author(s):
+// Robert Simpson (robert at blackcastlesoft.com)
+//
+// Adapted and modified for the Mono Project by
+// Marek Habersack (grendello at gmail.com)
+//
+//
+// Copyright (C) 2006 Novell, Inc (http://www.novell.com)
+// Copyright (C) 2007 Marek Habersack
+//
+// Permission is hereby granted, free of charge, to any person obtaining
+// a copy of this software and associated documentation files (the
+// "Software"), to deal in the Software without restriction, including
+// without limitation the rights to use, copy, modify, merge, publish,
+// distribute, sublicense, and/or sell copies of the Software, and to
+// permit persons to whom the Software is furnished to do so, subject to
+// the following conditions:
+//
+// The above copyright notice and this permission notice shall be
+// included in all copies or substantial portions of the Software.
+//
+// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
+// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
+// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
+// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+//
+
+/********************************************************
+ * ADO.NET 2.0 Data Provider for SQLite Version 3.X
+ * Written by Robert Simpson (robert at blackcastlesoft.com)
+ *
+ * Released to the public domain, use at your own risk!
+ ********************************************************/
+#if NET_2_0
+namespace Mono.Data.Sqlite
+{
+ using System;
+ using System.Data;
+ using System.Data.Common;
+ using System.Collections.Generic;
+ using System.ComponentModel;
+
+ /// <summary>
+ /// Sqlite implementation of DbCommand.
+ /// </summary>
+#if !PLATFORM_COMPACTFRAMEWORK
+ [Designer("Sqlite.Designer.SqliteCommandDesigner, Sqlite.Designer, Version=1.0.31.0, Culture=neutral, PublicKeyToken=db937bc2d44ff139"), ToolboxItem(true)]
+#endif
+ public sealed class SqliteCommand : DbCommand, ICloneable
+ {
+ /// <summary>
+ /// The command text this command is based on
+ /// </summary>
+ private string _commandText;
+ /// <summary>
+ /// The connection the command is associated with
+ /// </summary>
+ private SqliteConnection _cnn;
+ /// <summary>
+ /// Indicates whether or not a DataReader is active on the command.
+ /// </summary>
+ private SqliteDataReader _activeReader;
+ /// <summary>
+ /// The timeout for the command, kludged because Sqlite doesn't support per-command timeout values
+ /// </summary>
+ internal int _commandTimeout;
+ /// <summary>
+ /// Designer support
+ /// </summary>
+ private bool _designTimeVisible;
+ /// <summary>
+ /// Used by DbDataAdapter to determine updating behavior
+ /// </summary>
+ private UpdateRowSource _updateRowSource;
+ /// <summary>
+ /// The collection of parameters for the command
+ /// </summary>
+ private SqliteParameterCollection _parameterCollection;
+ /// <summary>
+ /// The SQL command text, broken into individual SQL statements as they are executed
+ /// </summary>
+ internal List<SqliteStatement> _statementList;
+ /// <summary>
+ /// Unprocessed SQL text that has not been executed
+ /// </summary>
+ internal string _remainingText;
+ /// <summary>
+ /// Transaction associated with this command
+ /// </summary>
+ private SqliteTransaction _transaction;
+
+ ///<overloads>
+ /// Constructs a new SqliteCommand
+ /// </overloads>
+ /// <summary>
+ /// Default constructor
+ /// </summary>
+ public SqliteCommand() :this(null, null)
+ {
+ }
+
+ /// <summary>
+ /// Initializes the command with the given command text
+ /// </summary>
+ /// <param name="commandText">The SQL command text</param>
+ public SqliteCommand(string commandText)
+ : this(commandText, null, null)
+ {
+ }
+
+ /// <summary>
+ /// Initializes the command with the given SQL command text and attach the command to the specified
+ /// connection.
+ /// </summary>
+ /// <param name="commandText">The SQL command text</param>
+ /// <param name="connection">The connection to associate with the command</param>
+ public SqliteCommand(string commandText, SqliteConnection connection)
+ : this(commandText, connection, null)
+ {
+ }
+
+ /// <summary>
+ /// Initializes the command and associates it with the specified connection.
+ /// </summary>
+ /// <param name="connection">The connection to associate with the command</param>
+ public SqliteCommand(SqliteConnection connection)
+ : this(null, connection, null)
+ {
+ }
+
+ private SqliteCommand(SqliteCommand source) : this(source.CommandText, source.Connection, source.Transaction)
+ {
+ CommandTimeout = source.CommandTimeout;
+ DesignTimeVisible = source.DesignTimeVisible;
+ UpdatedRowSource = source.UpdatedRowSource;
+
+ foreach (SqliteParameter param in source._parameterCollection)
+ {
+ Parameters.Add(param.Clone());
+ }
+ }
+
+ /// <summary>
+ /// Initializes a command with the given SQL, connection and transaction
+ /// </summary>
+ /// <param name="commandText">The SQL command text</param>
+ /// <param name="connection">The connection to associate with the command</param>
+ /// <param name="transaction">The transaction the command should be associated with</param>
+ public SqliteCommand(string commandText, SqliteConnection connection, SqliteTransaction transaction)
+ {
+ _statementList = null;
+ _activeReader = null;
+ _commandTimeout = connection != null ? connection._busyTimeout : 30;
+ _parameterCollection = new SqliteParameterCollection(this);
+ _designTimeVisible = true;
+ _updateRowSource = UpdateRowSource.FirstReturnedRecord;
+ _transaction = null;
+
+ if (commandText != null)
+ CommandText = commandText;
+
+ if (connection != null)
+ DbConnection = connection;
+
+ if (transaction != null)
+ Transaction = transaction;
+ }
+
+ /// <summary>
+ /// Disposes of the command and clears all member variables
+ /// </summary>
+ /// <param name="disposing">Whether or not the class is being explicitly or implicitly disposed</param>
+ protected override void Dispose(bool disposing)
+ {
+ base.Dispose(disposing);
+
+ // If a reader is active on this command, don't destroy it completely
+ if (_activeReader != null)
+ {
+ _activeReader._disposeCommand = true;
+ return;
+ }
+
+ Connection = null;
+ _parameterCollection.Clear();
+ _commandText = null;
+ }
+
+ /// <summary>
+ /// Clears and destroys all statements currently prepared
+ /// </summary>
+ internal void ClearCommands()
+ {
+ if (_activeReader != null)
+ _activeReader.Close();
+
+ if (_statementList == null) return;
+
+ int x = _statementList.Count;
+ for (int n = 0; n < x; n++)
+ _statementList[n].Dispose();
+
+ _statementList = null;
+
+ _parameterCollection.Unbind();
+ }
+
+ /// <summary>
+ /// Builds an array of prepared statements for each complete SQL statement in the command text
+ /// </summary>
+ internal SqliteStatement BuildNextCommand()
+ {
+ SqliteStatement stmt = null;
+
+ try
+ {
+ if (_statementList == null)
+ _remainingText = _commandText;
+
+ stmt = _cnn._sql.Prepare(_remainingText, (_statementList == null) ? null : _statementList[_statementList.Count - 1], out _remainingText);
+ if (stmt != null)
+ {
+ stmt._command = this;
+ if (_statementList == null)
+ _statementList = new List<SqliteStatement>();
+
+ _statementList.Add(stmt);
+
+ _parameterCollection.MapParameters(stmt);
+ stmt.BindParameters();
+ }
+ return stmt;
+ }
+ catch (Exception)
+ {
+ if (stmt != null)
+ {
+ if (_statementList.Contains(stmt))
+ _statementList.Remove(stmt);
+
+ stmt.Dispose();
+ }
+
+ // If we threw an error compiling the statement, we cannot continue on so set the remaining text to null.
+ _remainingText = null;
+
+ throw;
+ }
+ }
+
+ internal SqliteStatement GetStatement(int index)
+ {
+ // Haven't built any statements yet
+ if (_statementList == null) return BuildNextCommand();
+
+ // If we're at the last built statement and want the next unbuilt statement, then build it
+ if (index == _statementList.Count)
+ {
+ if (String.IsNullOrEmpty(_remainingText) == false) return BuildNextCommand();
+ else return null; // No more commands
+ }
+
+ SqliteStatement stmt = _statementList[index];
+ stmt.BindParameters();
+
+ return stmt;
+ }
+
+ /// <summary>
+ /// Not implemented
+ /// </summary>
+ public override void Cancel()
+ {
+ }
+
+ /// <summary>
+ /// The SQL command text associated with the command
+ /// </summary>
+#if !PLATFORM_COMPACTFRAMEWORK
+ [DefaultValue(""), RefreshProperties(RefreshProperties.All), Editor("Microsoft.VSDesigner.Data.SQL.Design.SqlCommandTextEditor, Microsoft.VSDesigner, Version=8.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a", "System.Drawing.Design.UITypeEditor, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a")]
+#endif
+ public override string CommandText
+ {
+ get
+ {
+ return _commandText;
+ }
+ set
+ {
+ if (_commandText == value) return;
+
+ if (_activeReader != null)
+ {
+ throw new InvalidOperationException("Cannot set CommandText while a DataReader is active");
+ }
+
+ ClearCommands();
+ _commandText = value;
+
+ if (_cnn == null) return;
+ }
+ }
+
+ /// <summary>
+ /// The amount of time to wait for the connection to become available before erroring out
+ /// </summary>
+#if !PLATFORM_COMPACTFRAMEWORK
+ [DefaultValue((int)30)]
+#endif
+ public override int CommandTimeout
+ {
+ get
+ {
+ return _commandTimeout;
+ }
+ set
+ {
+ _commandTimeout = value;
+ }
+ }
+
+ /// <summary>
+ /// The type of the command. Sqlite only supports CommandType.Text
+ /// </summary>
+#if !PLATFORM_COMPACTFRAMEWORK
+ [RefreshProperties(RefreshProperties.All), DefaultValue(CommandType.Text)]
+#endif
+ public override CommandType CommandType
+ {
+ get
+ {
+ return CommandType.Text;
+ }
+ set
+ {
+ if (value != CommandType.Text)
+ {
+ throw new NotSupportedException();
+ }
+ }
+ }
+
+ /// <summary>
+ /// Forwards to the local CreateParameter() function
+ /// </summary>
+ /// <returns></returns>
+ protected override DbParameter CreateDbParameter()
+ {
+ return CreateParameter();
+ }
+
+ /// <summary>
+ /// Create a new parameter
+ /// </summary>
+ /// <returns></returns>
+ public new SqliteParameter CreateParameter()
+ {
+ return new SqliteParameter();
+ }
+
+ /// <summary>
+ /// The connection associated with this command
+ /// </summary>
+#if !PLATFORM_COMPACTFRAMEWORK
+ [DefaultValue((string)null), Editor("Microsoft.VSDesigner.Data.Design.DbConnectionEditor, Microsoft.VSDesigner, Version=8.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a", "System.Drawing.Design.UITypeEditor, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a")]
+#endif
+ public new SqliteConnection Connection
+ {
+ get { return _cnn; }
+ set
+ {
+ if (_activeReader != null)
+ throw new InvalidOperationException("Cannot set Connection while a DataReader is active");
+
+ if (_cnn != null)
+ {
+ ClearCommands();
+ _cnn.RemoveCommand(this);
+ }
+
+ _cnn = value;
+
+ if (_cnn != null)
+ _cnn.AddCommand(this);
+ }
+ }
+
+ /// <summary>
+ /// Forwards to the local Connection property
+ /// </summary>
+ protected override DbConnection DbConnection
+ {
+ get
+ {
+ return Connection;
+ }
+ set
+ {
+ Connection = (SqliteConnection)value;
+ }
+ }
+
+ /// <summary>
+ /// Returns the SqliteParameterCollection for the given command
+ /// </summary>
+#if !PLATFORM_COMPACTFRAMEWORK
+ [DesignerSerializationVisibility(DesignerSerializationVisibility.Content)]
+#endif
+ public new SqliteParameterCollection Parameters
+ {
+ get { return _parameterCollection; }
+ }
+
+ /// <summary>
+ /// Forwards to the local Parameters property
+ /// </summary>
+ protected override DbParameterCollection DbParameterCollection
+ {
+ get
+ {
+ return Parameters;
+ }
+ }
+
+ /// <summary>
+ /// The transaction associated with this command. Sqlite only supports one transaction per connection, so this property forwards to the
+ /// command's underlying connection.
+ /// </summary>
+#if !PLATFORM_COMPACTFRAMEWORK
+ [Browsable(false), DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)]
+#endif
+ public new SqliteTransaction Transaction
+ {
+ get { return _transaction; }
+ set
+ {
+ if (_cnn != null)
+ {
+ if (_activeReader != null)
+ throw new InvalidOperationException("Cannot set Transaction while a DataReader is active");
+
+ if (value != null)
+ {
+ if (value._cnn != _cnn)
+ throw new ArgumentException("Transaction is not associated with the command's connection");
+ }
+ _transaction = value;
+ }
+ else if (value != null)
+ throw new ArgumentOutOfRangeException("SqliteTransaction", "Not associated with a connection");
+ }
+ }
+
+ /// <summary>
+ /// Forwards to the local Transaction property
+ /// </summary>
+ protected override DbTransaction DbTransaction
+ {
+ get
+ {
+ return Transaction;
+ }
+ set
+ {
+ Transaction = (SqliteTransaction)value;
+ }
+ }
+
+ /// <summary>
+ /// This function ensures there are no active readers, that we have a valid connection,
+ /// that the connection is open, that all statements are prepared and all parameters are assigned
+ /// in preparation for allocating a data reader.
+ /// </summary>
+ private void InitializeForReader()
+ {
+ if (_activeReader != null)
+ throw new InvalidOperationException("DataReader already active on this command");
+
+ if (_cnn == null)
+ throw new InvalidOperationException("No connection associated with this command");
+
+ if (_cnn.State != ConnectionState.Open)
+ throw new InvalidOperationException("Database is not open");
+
+ // Map all parameters for statements already built
+ _parameterCollection.MapParameters(null);
+
+ // Set the default command timeout
+ _cnn._sql.SetTimeout(_commandTimeout * 1000);
+ }
+
+ /// <summary>
+ /// Creates a new SqliteDataReader to execute/iterate the array of Sqlite prepared statements
+ /// </summary>
+ /// <param name="behavior">The behavior the data reader should adopt</param>
+ /// <returns>Returns a SqliteDataReader object</returns>
+ protected override DbDataReader ExecuteDbDataReader(CommandBehavior behavior)
+ {
+ return ExecuteReader(behavior);
+ }
+
+ /// <summary>
+ /// Overrides the default behavior to return a SqliteDataReader specialization class
+ /// </summary>
+ /// <param name="behavior">The flags to be associated with the reader</param>
+ /// <returns>A SqliteDataReader</returns>
+ public new SqliteDataReader ExecuteReader(CommandBehavior behavior)
+ {
+ InitializeForReader();
+
+ SqliteDataReader rd = new SqliteDataReader(this, behavior);
+ _activeReader = rd;
+
+ return rd;
+ }
+
+ /// <summary>
+ /// Overrides the default behavior of DbDataReader to return a specialized SqliteDataReader class
+ /// </summary>
+ /// <returns>A SqliteDataReader</returns>
+ public new SqliteDataReader ExecuteReader()
+ {
+ return ExecuteReader(CommandBehavior.Default);
+ }
+
+ /// <summary>
+ /// Called by the SqliteDataReader when the data reader is closed.
+ /// </summary>
+ internal void ClearDataReader()
+ {
+ _activeReader = null;
+ }
+
+ /// <summary>
+ /// Execute the command and return the number of rows inserted/updated affected by it.
+ /// </summary>
+ /// <returns></returns>
+ public override int ExecuteNonQuery()
+ {
+ InitializeForReader();
+
+ int nAffected = 0;
+ int x = 0;
+ SqliteStatement stmt;
+
+ for(;;)
+ {
+ stmt = GetStatement(x);
+ x++;
+ if (stmt == null) break;
+
+ _cnn._sql.Step(stmt);
+ nAffected += _cnn._sql.Changes;
+ _cnn._sql.Reset(stmt);
+ }
+
+ return nAffected;
+ }
+
+ /// <summary>
+ /// Execute the command and return the first column of the first row of the resultset
+ /// (if present), or null if no resultset was returned.
+ /// </summary>
+ /// <returns>The first column of the first row of the first resultset from the query</returns>
+ public override object ExecuteScalar()
+ {
+ InitializeForReader();
+
+ int x = 0;
+ object ret = null;
+ SqliteType typ = new SqliteType();
+ SqliteStatement stmt;
+
+ // We step through every statement in the command, but only grab the first row of the first resultset.
+ // We keep going even after obtaining it.
+ for (;;)
+ {
+ stmt = GetStatement(x);
+ x++;
+ if (stmt == null) break;
+
+ if (_cnn._sql.Step(stmt) == true && ret == null)
+ {
+ ret = _cnn._sql.GetValue(stmt, 0, typ);
+ }
+ _cnn._sql.Reset(stmt);
+ }
+
+ return ret;
+ }
+
+ /// <summary>
+ /// Does nothing. Commands are prepared as they are executed the first time, and kept in prepared state afterwards.
+ /// </summary>
+ public override void Prepare()
+ {
+ }
+
+ /// <summary>
+ /// Sets the method the SqliteCommandBuilder uses to determine how to update inserted or updated rows in a DataTable.
+ /// </summary>
+ [DefaultValue(UpdateRowSource.FirstReturnedRecord)]
+ public override UpdateRowSource UpdatedRowSource
+ {
+ get
+ {
+ return _updateRowSource;
+ }
+ set
+ {
+ _updateRowSource = value;
+ }
+ }
+
+ /// <summary>
+ /// Determines if the command is visible at design time. Defaults to True.
+ /// </summary>
+#if !PLATFORM_COMPACTFRAMEWORK
+ [DesignOnly(true), Browsable(false), DefaultValue(true), EditorBrowsable(EditorBrowsableState.Never)]
+#endif
+ public override bool DesignTimeVisible
+ {
+ get
+ {
+ return _designTimeVisible;
+ }
+ set
+ {
+ _designTimeVisible = value;
+#if !PLATFORM_COMPACTFRAMEWORK
+ TypeDescriptor.Refresh(this);
+#endif
+ }
+ }
+
+ /// <summary>
+ /// Clones a command, including all its parameters
+ /// </summary>
+ /// <returns>A new SqliteCommand with the same commandtext, connection and parameters</returns>
+ public object Clone()
+ {
+ return new SqliteCommand(this);
+ }
+
+ public long LastInsertRowID ()
+ {
+ return _cnn.LastInsertRowId;
+ }
+ }
+}
+#endif
diff --git a/lib/Hyena/src/Mono.Data.Sqlite/Mono.Data.Sqlite/SQLiteCommandBuilder.cs b/lib/Hyena/src/Mono.Data.Sqlite/Mono.Data.Sqlite/SQLiteCommandBuilder.cs
new file mode 100644
index 0000000..0910a2d
--- /dev/null
+++ b/lib/Hyena/src/Mono.Data.Sqlite/Mono.Data.Sqlite/SQLiteCommandBuilder.cs
@@ -0,0 +1,375 @@
+//
+// Mono.Data.Sqlite.SQLiteCommandBuilder.cs
+//
+// Author(s):
+// Robert Simpson (robert at blackcastlesoft.com)
+//
+// Adapted and modified for the Mono Project by
+// Marek Habersack (grendello at gmail.com)
+//
+//
+// Copyright (C) 2006 Novell, Inc (http://www.novell.com)
+// Copyright (C) 2007 Marek Habersack
+//
+// Permission is hereby granted, free of charge, to any person obtaining
+// a copy of this software and associated documentation files (the
+// "Software"), to deal in the Software without restriction, including
+// without limitation the rights to use, copy, modify, merge, publish,
+// distribute, sublicense, and/or sell copies of the Software, and to
+// permit persons to whom the Software is furnished to do so, subject to
+// the following conditions:
+//
+// The above copyright notice and this permission notice shall be
+// included in all copies or substantial portions of the Software.
+//
+// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
+// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
+// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
+// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+//
+
+/********************************************************
+ * ADO.NET 2.0 Data Provider for Sqlite Version 3.X
+ * Written by Robert Simpson (robert at blackcastlesoft.com)
+ *
+ * Released to the public domain, use at your own risk!
+ ********************************************************/
+#if NET_2_0
+namespace Mono.Data.Sqlite
+{
+ using System;
+ using System.Data;
+ using System.Data.Common;
+ using System.Globalization;
+ using System.ComponentModel;
+
+ /// <summary>
+ /// Sqlite implementation of DbCommandBuilder.
+ /// </summary>
+ public sealed class SqliteCommandBuilder : DbCommandBuilder
+ {
+ private EventHandler<RowUpdatingEventArgs> _handler;
+
+ /// <summary>
+ /// Default constructor
+ /// </summary>
+ public SqliteCommandBuilder() : this(null)
+ {
+ }
+
+ /// <summary>
+ /// Initializes the command builder and associates it with the specified data adapter.
+ /// </summary>
+ /// <param name="adp"></param>
+ public SqliteCommandBuilder(SqliteDataAdapter adp)
+ {
+ QuotePrefix = "[";
+ QuoteSuffix = "]";
+ DataAdapter = adp;
+ }
+
+ /// <summary>
+ /// Minimal amount of parameter processing. Primarily sets the DbType for the parameter equal to the provider type in the schema
+ /// </summary>
+ /// <param name="parameter">The parameter to use in applying custom behaviors to a row</param>
+ /// <param name="row">The row to apply the parameter to</param>
+ /// <param name="statementType">The type of statement</param>
+ /// <param name="whereClause">Whether the application of the parameter is part of a WHERE clause</param>
+ protected override void ApplyParameterInfo(DbParameter parameter, DataRow row, StatementType statementType, bool whereClause)
+ {
+ SqliteParameter param = (SqliteParameter)parameter;
+ param.DbType = (DbType)row[SchemaTableColumn.ProviderType];
+ }
+
+ /// <summary>
+ /// Returns a valid named parameter
+ /// </summary>
+ /// <param name="parameterName">The name of the parameter</param>
+ /// <returns>Error</returns>
+ protected override string GetParameterName(string parameterName)
+ {
+ return String.Format(CultureInfo.InvariantCulture, "@{0}", parameterName);
+ }
+
+ /// <summary>
+ /// Returns a named parameter for the given ordinal
+ /// </summary>
+ /// <param name="parameterOrdinal">The i of the parameter</param>
+ /// <returns>Error</returns>
+ protected override string GetParameterName(int parameterOrdinal)
+ {
+ return String.Format(CultureInfo.InvariantCulture, "@param{0}", parameterOrdinal);
+ }
+
+ /// <summary>
+ /// Returns a placeholder character for the specified parameter i.
+ /// </summary>
+ /// <param name="parameterOrdinal">The index of the parameter to provide a placeholder for</param>
+ /// <returns>Returns a named parameter</returns>
+ protected override string GetParameterPlaceholder(int parameterOrdinal)
+ {
+ return GetParameterName(parameterOrdinal);
+ }
+
+ /// <summary>
+ /// Sets the handler for receiving row updating events. Used by the DbCommandBuilder to autogenerate SQL
+ /// statements that may not have previously been generated.
+ /// </summary>
+ /// <param name="adapter">A data adapter to receive events on.</param>
+ protected override void SetRowUpdatingHandler(DbDataAdapter adapter)
+ {
+ SqliteDataAdapter adp = (SqliteDataAdapter)adapter;
+
+ _handler = new EventHandler<RowUpdatingEventArgs>(RowUpdatingEventHandler);
+ adp.RowUpdating += _handler;
+ }
+
+ private void RowUpdatingEventHandler(object sender, RowUpdatingEventArgs e)
+ {
+ base.RowUpdatingHandler(e);
+ }
+
+ /// <summary>
+ /// Gets/sets the DataAdapter for this CommandBuilder
+ /// </summary>
+ public new SqliteDataAdapter DataAdapter
+ {
+ get { return (SqliteDataAdapter)base.DataAdapter; }
+ set { base.DataAdapter = value; }
+ }
+
+ /// <summary>
+ /// Returns the automatically-generated Sqlite command to delete rows from the database
+ /// </summary>
+ /// <returns></returns>
+ public new SqliteCommand GetDeleteCommand()
+ {
+ return (SqliteCommand)base.GetDeleteCommand();
+ }
+
+ /// <summary>
+ /// Returns the automatically-generated Sqlite command to delete rows from the database
+ /// </summary>
+ /// <param name="useColumnsForParameterNames"></param>
+ /// <returns></returns>
+ public new SqliteCommand GetDeleteCommand(bool useColumnsForParameterNames)
+ {
+ return (SqliteCommand)base.GetDeleteCommand(useColumnsForParameterNames);
+ }
+
+ /// <summary>
+ /// Returns the automatically-generated Sqlite command to update rows in the database
+ /// </summary>
+ /// <returns></returns>
+ public new SqliteCommand GetUpdateCommand()
+ {
+ return (SqliteCommand)base.GetUpdateCommand();
+ }
+
+ /// <summary>
+ /// Returns the automatically-generated Sqlite command to update rows in the database
+ /// </summary>
+ /// <param name="useColumnsForParameterNames"></param>
+ /// <returns></returns>
+ public new SqliteCommand GetUpdateCommand(bool useColumnsForParameterNames)
+ {
+ return (SqliteCommand)base.GetUpdateCommand(useColumnsForParameterNames);
+ }
+
+ /// <summary>
+ /// Returns the automatically-generated Sqlite command to insert rows into the database
+ /// </summary>
+ /// <returns></returns>
+ public new SqliteCommand GetInsertCommand()
+ {
+ return (SqliteCommand)base.GetInsertCommand();
+ }
+
+ /// <summary>
+ /// Returns the automatically-generated Sqlite command to insert rows into the database
+ /// </summary>
+ /// <param name="useColumnsForParameterNames"></param>
+ /// <returns></returns>
+ public new SqliteCommand GetInsertCommand(bool useColumnsForParameterNames)
+ {
+ return (SqliteCommand)base.GetInsertCommand(useColumnsForParameterNames);
+ }
+
+ /// <summary>
+ /// Overridden to hide its property from the designer
+ /// </summary>
+#if !PLATFORM_COMPACTFRAMEWORK
+ [Browsable(false)]
+#endif
+ public override CatalogLocation CatalogLocation
+ {
+ get
+ {
+ return base.CatalogLocation;
+ }
+ set
+ {
+ base.CatalogLocation = value;
+ }
+ }
+
+ /// <summary>
+ /// Overridden to hide its property from the designer
+ /// </summary>
+#if !PLATFORM_COMPACTFRAMEWORK
+ [Browsable(false)]
+#endif
+ public override string CatalogSeparator
+ {
+ get
+ {
+ return base.CatalogSeparator;
+ }
+ set
+ {
+ base.CatalogSeparator = value;
+ }
+ }
+
+ /// <summary>
+ /// Overridden to hide its property from the designer
+ /// </summary>
+#if !PLATFORM_COMPACTFRAMEWORK
+ [Browsable(false)]
+#endif
+ [DefaultValue("[")]
+ public override string QuotePrefix
+ {
+ get
+ {
+ return base.QuotePrefix;
+ }
+ set
+ {
+ base.QuotePrefix = value;
+ }
+ }
+
+ /// <summary>
+ /// Overridden to hide its property from the designer
+ /// </summary>
+#if !PLATFORM_COMPACTFRAMEWORK
+ [Browsable(false)]
+#endif
+ public override string QuoteSuffix
+ {
+ get
+ {
+ return base.QuoteSuffix;
+ }
+ set
+ {
+ base.QuoteSuffix = value;
+ }
+ }
+
+ /// <summary>
+ /// Places brackets around an identifier
+ /// </summary>
+ /// <param name="unquotedIdentifier">The identifier to quote</param>
+ /// <returns>The bracketed identifier</returns>
+ public override string QuoteIdentifier(string unquotedIdentifier)
+ {
+ if (String.IsNullOrEmpty(QuotePrefix)
+ || String.IsNullOrEmpty(QuoteSuffix)
+ || String.IsNullOrEmpty(unquotedIdentifier))
+ return unquotedIdentifier;
+
+ return QuotePrefix + unquotedIdentifier.Replace(QuoteSuffix, QuoteSuffix + QuoteSuffix) + QuoteSuffix;
+ }
+
+ /// <summary>
+ /// Removes brackets around an identifier
+ /// </summary>
+ /// <param name="quotedIdentifier">The quoted (bracketed) identifier</param>
+ /// <returns>The undecorated identifier</returns>
+ public override string UnquoteIdentifier(string quotedIdentifier)
+ {
+ if (String.IsNullOrEmpty(QuotePrefix)
+ || String.IsNullOrEmpty(QuoteSuffix)
+ || String.IsNullOrEmpty(quotedIdentifier))
+ return quotedIdentifier;
+
+ if (quotedIdentifier.StartsWith(QuotePrefix, StringComparison.InvariantCultureIgnoreCase) == false
+ || quotedIdentifier.EndsWith(QuoteSuffix, StringComparison.InvariantCultureIgnoreCase) == false)
+ return quotedIdentifier;
+
+ return quotedIdentifier.Substring(QuotePrefix.Length, quotedIdentifier.Length - (QuotePrefix.Length + QuoteSuffix.Length)).Replace(QuoteSuffix + QuoteSuffix, QuoteSuffix);
+ }
+
+ /// <summary>
+ /// Overridden to hide its property from the designer
+ /// </summary>
+#if !PLATFORM_COMPACTFRAMEWORK
+ [Browsable(false)]
+#endif
+ public override string SchemaSeparator
+ {
+ get
+ {
+ return base.SchemaSeparator;
+ }
+ set
+ {
+ base.SchemaSeparator = value;
+ }
+ }
+
+ /// <summary>
+ /// Override helper, which can help the base command builder choose the right keys for the given query
+ /// </summary>
+ /// <param name="sourceCommand"></param>
+ /// <returns></returns>
+ protected override DataTable GetSchemaTable(DbCommand sourceCommand)
+ {
+ using (IDataReader reader = sourceCommand.ExecuteReader(CommandBehavior.KeyInfo | CommandBehavior.SchemaOnly))
+ {
+ DataTable schema = reader.GetSchemaTable();
+
+ // If the query contains a primary key, turn off the IsUnique property
+ // for all the non-key columns
+ if (HasSchemaPrimaryKey(schema))
+ ResetIsUniqueSchemaColumn(schema);
+
+ // if table has no primary key we use unique columns as a fall back
+ return schema;
+ }
+ }
+
+ private bool HasSchemaPrimaryKey(DataTable schema)
+ {
+ DataColumn IsKeyColumn = schema.Columns[SchemaTableColumn.IsKey];
+
+ foreach (DataRow schemaRow in schema.Rows)
+ {
+ if ((bool)schemaRow[IsKeyColumn] == true)
+ return true;
+ }
+
+ return false;
+ }
+
+ private void ResetIsUniqueSchemaColumn(DataTable schema)
+ {
+ DataColumn IsUniqueColumn = schema.Columns[SchemaTableColumn.IsUnique];
+ DataColumn IsKeyColumn = schema.Columns[SchemaTableColumn.IsKey];
+
+ foreach (DataRow schemaRow in schema.Rows)
+ {
+ if ((bool)schemaRow[IsKeyColumn] == false)
+ schemaRow[IsUniqueColumn] = false;
+ }
+
+ schema.AcceptChanges();
+ }
+ }
+}
+#endif
diff --git a/lib/Hyena/src/Mono.Data.Sqlite/Mono.Data.Sqlite/SQLiteConnection.cs b/lib/Hyena/src/Mono.Data.Sqlite/Mono.Data.Sqlite/SQLiteConnection.cs
new file mode 100644
index 0000000..968501d
--- /dev/null
+++ b/lib/Hyena/src/Mono.Data.Sqlite/Mono.Data.Sqlite/SQLiteConnection.cs
@@ -0,0 +1,2078 @@
+//
+// Mono.Data.Sqlite.SQLiteConnection.cs
+//
+// Author(s):
+// Robert Simpson (robert at blackcastlesoft.com)
+//
+// Adapted and modified for the Mono Project by
+// Marek Habersack (grendello at gmail.com)
+//
+//
+// Copyright (C) 2006 Novell, Inc (http://www.novell.com)
+// Copyright (C) 2007 Marek Habersack
+//
+// Permission is hereby granted, free of charge, to any person obtaining
+// a copy of this software and associated documentation files (the
+// "Software"), to deal in the Software without restriction, including
+// without limitation the rights to use, copy, modify, merge, publish,
+// distribute, sublicense, and/or sell copies of the Software, and to
+// permit persons to whom the Software is furnished to do so, subject to
+// the following conditions:
+//
+// The above copyright notice and this permission notice shall be
+// included in all copies or substantial portions of the Software.
+//
+// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
+// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
+// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
+// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+//
+
+/********************************************************
+ * ADO.NET 2.0 Data Provider for Sqlite Version 3.X
+ * Written by Robert Simpson (robert at blackcastlesoft.com)
+ *
+ * Released to the public domain, use at your own risk!
+ ********************************************************/
+#if NET_2_0
+namespace Mono.Data.Sqlite
+{
+ using System;
+ using System.Data;
+ using System.Data.Common;
+ using System.Collections.Generic;
+ using System.Globalization;
+ using System.ComponentModel;
+
+ /// <summary>
+ /// Sqlite implentation of DbConnection.
+ /// </summary>
+ /// <remarks>
+ /// The <see cref="ConnectionString">ConnectionString</see> property of the SqliteConnection class can contain the following parameter(s), delimited with a semi-colon:
+ /// <list type="table">
+ /// <listheader>
+ /// <term>Parameter</term>
+ /// <term>Values</term>
+ /// <term>Required</term>
+ /// <term>Default</term>
+ /// </listheader>
+ /// <item>
+ /// <description>Data Source</description>
+ /// <description>{filename}</description>
+ /// <description>Y</description>
+ /// <description></description>
+ /// </item>
+ /// <item>
+ /// <description>Version</description>
+ /// <description>3</description>
+ /// <description>N</description>
+ /// <description>3</description>
+ /// </item>
+ /// <item>
+ /// <description>UseUTF16Encoding</description>
+ /// <description><b>True</b><br/><b>False</b></description>
+ /// <description>N</description>
+ /// <description>False</description>
+ /// </item>
+ /// <item>
+ /// <description>DateTimeFormat</description>
+ /// <description><b>Ticks</b> - Use DateTime.Ticks<br/><b>ISO8601</b> - Use ISO8601 DateTime format</description>
+ /// <description>N</description>
+ /// <description>ISO8601</description>
+ /// </item>
+ /// <item>
+ /// <description>BinaryGUID</description>
+ /// <description><b>True</b> - Store GUID columns in binary form<br/><b>False</b> - Store GUID columns as text</description>
+ /// <description>N</description>
+ /// <description>True</description>
+ /// </item>
+ /// <item>
+ /// <description>Cache Size</description>
+ /// <description>{size in bytes}</description>
+ /// <description>N</description>
+ /// <description>2000</description>
+ /// </item>
+ /// <item>
+ /// <description>Synchronous</description>
+ /// <description><b>Normal</b> - Normal file flushing behavior<br/><b>Full</b> - Full flushing after all writes<br/><b>Off</b> - Underlying OS flushes I/O's</description>
+ /// <description>N</description>
+ /// <description>Normal</description>
+ /// </item>
+ /// <item>
+ /// <description>Page Size</description>
+ /// <description>{size in bytes}</description>
+ /// <description>N</description>
+ /// <description>1024</description>
+ /// </item>
+ /// <item>
+ /// <description>Password</description>
+ /// <description>{password}</description>
+ /// <description>N</description>
+ /// <description></description>
+ /// </item>
+ /// <item>
+ /// <description>Enlist</description>
+ /// <description><B>Y</B> - Automatically enlist in distributed transactions<br/><b>N</b> - No automatic enlistment</description>
+ /// <description>N</description>
+ /// <description>Y</description>
+ /// </item>
+ /// </list>
+ /// </remarks>
+ public sealed class SqliteConnection : DbConnection, ICloneable
+ {
+ private const string _dataDirectory = "|DataDirectory|";
+
+ /// <summary>
+ /// State of the current connection
+ /// </summary>
+ private ConnectionState _connectionState;
+ /// <summary>
+ /// The connection string
+ /// </summary>
+ private string _connectionString;
+ /// <summary>
+ /// Nesting level of the transactions open on the connection
+ /// </summary>
+ internal int _transactionLevel;
+ /// <summary>
+ /// Busy command timeout value. Defaults to 30
+ /// </summary>
+ internal int _busyTimeout;
+
+#if !PLATFORM_COMPACTFRAMEWORK
+ /// <summary>
+ /// Whether or not the connection is enlisted in a distrubuted transaction
+ /// </summary>
+ internal SqliteEnlistment _enlistment;
+#endif
+ /// <summary>
+ /// The base Sqlite object to interop with
+ /// </summary>
+ internal SqliteBase _sql;
+ /// <summary>
+ /// Commands associated with this connection
+ /// </summary>
+ internal List<SqliteCommand> _commandList;
+ /// <summary>
+ /// The database filename minus path and extension
+ /// </summary>
+ private string _dataSource;
+#if MONO_SUPPORT_PASSWORDS
+ /// <summary>
+ /// Temporary password storage, emptied after the database has been opened
+ /// </summary>
+ private byte[] _password;
+#endif
+
+ internal bool _binaryGuid;
+
+ internal long _version;
+
+ private event SqliteUpdateEventHandler _updateHandler;
+ private event SqliteCommitHandler _commitHandler;
+ private event EventHandler _rollbackHandler;
+
+ private SqliteUpdateCallback _updateCallback;
+ private SqliteCommitCallback _commitCallback;
+ private SqliteRollbackCallback _rollbackCallback;
+
+ /// <summary>
+ /// This event is raised whenever the database is opened or closed.
+ /// </summary>
+ //public override event StateChangeEventHandler StateChange;
+
+ /// <summary>
+ /// This event is raised whenever Sqlite makes an update/delete/insert into the database on
+ /// this connection. It only applies to the given connection.
+ /// </summary>
+ public event SqliteUpdateEventHandler Update
+ {
+ add
+ {
+ if (_updateHandler == null)
+ {
+ _updateCallback = new SqliteUpdateCallback(UpdateCallback);
+ _sql.SetUpdateHook(_updateCallback);
+ }
+ _updateHandler += value;
+ }
+ remove
+ {
+ _updateHandler -= value;
+ if (_updateHandler == null)
+ {
+ _sql.SetUpdateHook(null);
+ _updateCallback = null;
+ }
+ }
+ }
+
+ private void UpdateCallback(int type, IntPtr database, int databaseLen, IntPtr table, int tableLen, Int64 rowid)
+ {
+ _updateHandler(this, new UpdateEventArgs(
+ _sql.UTF8ToString(database),
+ _sql.UTF8ToString(table),
+ (UpdateEventType)type,
+ rowid));
+ }
+
+ /// <summary>
+ /// This event is raised whenever Sqlite is committing a transaction.
+ /// Return non-zero to trigger a rollback
+ /// </summary>
+ public event SqliteCommitHandler Commit
+ {
+ add
+ {
+ if (_commitHandler == null)
+ {
+ _commitCallback = new SqliteCommitCallback(CommitCallback);
+ _sql.SetCommitHook(_commitCallback);
+ }
+ _commitHandler += value;
+ }
+ remove
+ {
+ _commitHandler -= value;
+ if (_commitHandler == null)
+ {
+ _sql.SetCommitHook(null);
+ _commitCallback = null;
+ }
+ }
+ }
+
+ /// <summary>
+ /// This event is raised whenever Sqlite is committing a transaction.
+ /// Return non-zero to trigger a rollback
+ /// </summary>
+ public event EventHandler RollBack
+ {
+ add
+ {
+ if (_rollbackHandler == null)
+ {
+ _rollbackCallback = new SqliteRollbackCallback(RollbackCallback);
+ _sql.SetRollbackHook(_rollbackCallback);
+ }
+ _rollbackHandler += value;
+ }
+ remove
+ {
+ _rollbackHandler -= value;
+ if (_rollbackHandler == null)
+ {
+ _sql.SetRollbackHook(null);
+ _rollbackCallback = null;
+ }
+ }
+ }
+
+
+ private int CommitCallback()
+ {
+ CommitEventArgs e = new CommitEventArgs();
+ _commitHandler(this, e);
+ return (e.AbortTransaction == true) ? 1 : 0;
+ }
+
+ private void RollbackCallback()
+ {
+ _rollbackHandler(this, EventArgs.Empty);
+ }
+
+ ///<overloads>
+ /// Constructs a new SqliteConnection object
+ /// </overloads>
+ /// <summary>
+ /// Default constructor
+ /// </summary>
+ public SqliteConnection() : this("")
+ {
+ }
+
+ /// <summary>
+ /// Initializes the connection with the specified connection string
+ /// </summary>
+ /// <param name="connectionString">The connection string to use on the connection</param>
+ public SqliteConnection(string connectionString)
+ {
+ _sql = null;
+ _connectionState = ConnectionState.Closed;
+ _connectionString = "";
+ _transactionLevel = 0;
+ _busyTimeout = 30;
+ _version = 0;
+ _commandList = new List<SqliteCommand>();
+
+ if (connectionString != null)
+ ConnectionString = connectionString;
+ }
+
+ /// <summary>
+ /// Clones the settings and connection string from an existing connection. If the existing connection is already open, this
+ /// function will open its own connection, enumerate any attached databases of the original connection, and automatically
+ /// attach to them.
+ /// </summary>
+ /// <param name="connection"></param>
+ public SqliteConnection(SqliteConnection connection) : this(connection.ConnectionString)
+ {
+ string str;
+
+ if (connection.State == ConnectionState.Open)
+ {
+ Open();
+
+ // Reattach all attached databases from the existing connection
+ using (DataTable tbl = connection.GetSchema("Catalogs"))
+ {
+ foreach (DataRow row in tbl.Rows)
+ {
+ str = row[0].ToString();
+ if (String.Compare(str, "main", true, CultureInfo.InvariantCulture) != 0
+ && String.Compare(str, "temp", true, CultureInfo.InvariantCulture) != 0)
+ {
+ using (SqliteCommand cmd = CreateCommand())
+ {
+ cmd.CommandText = String.Format(CultureInfo.InvariantCulture, "ATTACH DATABASE '{0}' AS [{1}]", row[1], row[0]);
+ cmd.ExecuteNonQuery();
+ }
+ }
+ }
+ }
+ }
+ }
+
+ /// <summary>
+ /// Creates a clone of the connection. All attached databases and user-defined functions are cloned. If the existing connection is open, the cloned connection
+ /// will also be opened.
+ /// </summary>
+ /// <returns></returns>
+ public object Clone()
+ {
+ return new SqliteConnection(this);
+ }
+
+ /// <summary>
+ /// Disposes of the SqliteConnection, closing it if it is active.
+ /// </summary>
+ /// <param name="disposing">True if the connection is being explicitly closed.</param>
+ protected override void Dispose(bool disposing)
+ {
+ base.Dispose(disposing);
+ Close();
+ }
+
+ /// <summary>
+ /// Creates a database file. This just creates a zero-byte file which Sqlite
+ /// will turn into a database when the file is opened properly.
+ /// </summary>
+ /// <param name="databaseFileName">The file to create</param>
+ static public void CreateFile(string databaseFileName)
+ {
+ System.IO.FileStream fs = System.IO.File.Create(databaseFileName);
+ fs.Close();
+ }
+
+ /// <summary>
+ /// On NTFS volumes, this function turns on the compression attribute for the given file.
+ /// It must not be open or referenced at the time of the function call.
+ /// </summary>
+ /// <param name="databaseFileName">The file to compress</param>
+ static public void CompressFile(string databaseFileName)
+ {
+ UnsafeNativeMethods.sqlite3_compressfile(databaseFileName);
+ }
+
+ /// <summary>
+ /// On NTFS volumes, this function removes the compression attribute for the given file.
+ /// It must not be open or referenced at the time of the function call.
+ /// </summary>
+ /// <param name="databaseFileName">The file to decompress</param>
+ static public void DecompressFile(string databaseFileName)
+ {
+ UnsafeNativeMethods.sqlite3_decompressfile(databaseFileName);
+ }
+
+ /// <summary>
+ /// Raises the state change event when the state of the connection changes
+ /// </summary>
+ /// <param name="newState">The new state. If it is different from the previous state, an event is raised.</param>
+ internal void OnStateChange(ConnectionState newState)
+ {
+ // FIXME: breaks when the commented out code is used
+ ConnectionState oldState = _connectionState;
+ _connectionState = newState;
+
+// if (StateChange != null && oldState != newState)
+ if (oldState != newState)
+ {
+ StateChangeEventArgs e = new StateChangeEventArgs(oldState, newState);
+ //StateChange(this, e);
+ base.OnStateChange (e);
+ }
+ }
+
+ /// <summary>
+ /// Creates a new SqliteTransaction if one isn't already active on the connection.
+ /// </summary>
+ /// <param name="isolationLevel">Sqlite doesn't support varying isolation levels, so this parameter is ignored.</param>
+ /// <param name="deferredLock">When TRUE, Sqlite defers obtaining a write lock until a write operation is requested.
+ /// When FALSE, a writelock is obtained immediately. The default is TRUE, but in a multi-threaded multi-writer
+ /// environment, one may instead choose to lock the database immediately to avoid any possible writer deadlock.</param>
+ /// <returns>Returns a SqliteTransaction object.</returns>
+ public SqliteTransaction BeginTransaction(System.Data.IsolationLevel isolationLevel, bool deferredLock)
+ {
+ return BeginTransaction(deferredLock);
+ }
+
+ /// <summary>
+ /// Creates a new SqliteTransaction if one isn't already active on the connection.
+ /// </summary>
+ /// <param name="deferredLock">When TRUE, Sqlite defers obtaining a write lock until a write operation is requested.
+ /// When FALSE, a writelock is obtained immediately. The default is TRUE, but in a multi-threaded multi-writer
+ /// environment, one may instead choose to lock the database immediately to avoid any possible writer deadlock.</param>
+ /// <returns>Returns a SqliteTransaction object.</returns>
+ public SqliteTransaction BeginTransaction(bool deferredLock)
+ {
+ if (_connectionState != ConnectionState.Open)
+ throw new InvalidOperationException();
+
+ return new SqliteTransaction(this, deferredLock);
+ }
+
+ /// <summary>
+ /// Creates a new SqliteTransaction if one isn't already active on the connection.
+ /// </summary>
+ /// <param name="isolationLevel">Sqlite supports only serializable transactions.</param>
+ /// <returns>Returns a SqliteTransaction object.</returns>
+ public new SqliteTransaction BeginTransaction(System.Data.IsolationLevel isolationLevel)
+ {
+ return BeginTransaction(false);
+ }
+
+ /// <summary>
+ /// Creates a new SqliteTransaction if one isn't already active on the connection.
+ /// </summary>
+ /// <returns>Returns a SqliteTransaction object.</returns>
+ public new SqliteTransaction BeginTransaction()
+ {
+ return BeginTransaction(false);
+ }
+
+ /// <summary>
+ /// Forwards to the local BeginTransaction() function
+ /// </summary>
+ /// <param name="isolationLevel"></param>
+ /// <returns></returns>
+ protected override DbTransaction BeginDbTransaction(System.Data.IsolationLevel isolationLevel)
+ {
+ return BeginTransaction(false);
+ }
+
+ /// <summary>
+ /// Not implemented
+ /// </summary>
+ /// <param name="databaseName"></param>
+ public override void ChangeDatabase(string databaseName)
+ {
+ throw new NotImplementedException();
+ }
+
+ /// <summary>
+ /// When the database connection is closed, all commands linked to this connection are automatically reset.
+ /// </summary>
+ public override void Close()
+ {
+ if (_sql != null)
+ {
+ // Force any commands associated with this connection to release their unmanaged
+ // resources. The commands are still valid and will automatically re-acquire the
+ // unmanaged resources the next time they are run -- provided this connection is
+ // re-opened before then.
+ lock (_commandList)
+ {
+ foreach (SqliteCommand cmd in _commandList)
+ cmd.ClearCommands();
+ }
+
+#if !PLATFORM_COMPACTFRAMEWORK
+ if (_enlistment != null)
+ {
+ // If the connection is enlisted in a transaction scope and the scope is still active,
+ // we cannot truly shut down this connection until the scope has completed. Therefore make a
+ // hidden connection temporarily to hold open the connection until the scope has completed.
+ SqliteConnection cnn = new SqliteConnection();
+ cnn._sql = _sql;
+ cnn._transactionLevel = _transactionLevel;
+ cnn._enlistment = _enlistment;
+ cnn._connectionState = _connectionState;
+ cnn._version = _version;
+
+ cnn._enlistment._transaction._cnn = cnn;
+ cnn._enlistment._disposeConnection = true;
+ }
+ else
+ {
+ _sql.Close();
+ }
+ _enlistment = null;
+#else
+ _sql.Close();
+#endif
+ _sql = null;
+ _transactionLevel = 0;
+ }
+
+ OnStateChange(ConnectionState.Closed);
+ }
+
+ /// <summary>
+ /// The connection string containing the parameters for the connection
+ /// </summary>
+ /// <remarks>
+ /// <list type="table">
+ /// <listheader>
+ /// <term>Parameter</term>
+ /// <term>Values</term>
+ /// <term>Required</term>
+ /// <term>Default</term>
+ /// </listheader>
+ /// <item>
+ /// <description>Data Source</description>
+ /// <description>{filename}</description>
+ /// <description>Y</description>
+ /// <description></description>
+ /// </item>
+ /// <item>
+ /// <description>Version</description>
+ /// <description>3</description>
+ /// <description>N</description>
+ /// <description>3</description>
+ /// </item>
+ /// <item>
+ /// <description>UseUTF16Encoding</description>
+ /// <description><b>True</b><br/><b>False</b></description>
+ /// <description>N</description>
+ /// <description>False</description>
+ /// </item>
+ /// <item>
+ /// <description>DateTimeFormat</description>
+ /// <description><b>Ticks</b> - Use DateTime.Ticks<br/><b>ISO8601</b> - Use ISO8601 DateTime format</description>
+ /// <description>N</description>
+ /// <description>ISO8601</description>
+ /// </item>
+ /// <item>
+ /// <description>BinaryGUID</description>
+ /// <description><b>Yes/On/1</b> - Store GUID columns in binary form<br/><b>No/Off/0</b> - Store GUID columns as text</description>
+ /// <description>N</description>
+ /// <description>On</description>
+ /// </item>
+ /// <item>
+ /// <description>Cache Size</description>
+ /// <description>{size in bytes}</description>
+ /// <description>N</description>
+ /// <description>2000</description>
+ /// </item>
+ /// <item>
+ /// <description>Synchronous</description>
+ /// <description><b>Normal</b> - Normal file flushing behavior<br/><b>Full</b> - Full flushing after all writes<br/><b>Off</b> - Underlying OS flushes I/O's</description>
+ /// <description>N</description>
+ /// <description>Normal</description>
+ /// </item>
+ /// <item>
+ /// <description>Page Size</description>
+ /// <description>{size in bytes}</description>
+ /// <description>N</description>
+ /// <description>1024</description>
+ /// </item>
+ /// <item>
+ /// <description>Password</description>
+ /// <description>{password}</description>
+ /// <description>N</description>
+ /// <description></description>
+ /// </item>
+ /// <item>
+ /// <description>Enlist</description>
+ /// <description><B>Y</B> - Automatically enlist in distributed transactions<br/><b>N</b> - No automatic enlistment</description>
+ /// <description>N</description>
+ /// <description>Y</description>
+ /// </item>
+ /// </list>
+ /// </remarks>
+#if !PLATFORM_COMPACTFRAMEWORK
+ [RefreshProperties(RefreshProperties.All), DefaultValue("")]
+ [Editor("Sqlite.Designer.SqliteConnectionStringEditor, Sqlite.Designer, Version=1.0.31.0, Culture=neutral, PublicKeyToken=db937bc2d44ff139", "System.Drawing.Design.UITypeEditor, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a")]
+#endif
+ public override string ConnectionString
+ {
+ get
+ {
+ return _connectionString;
+ }
+ set
+ {
+ if (value == null)
+ throw new ArgumentNullException();
+
+ else if (_connectionState != ConnectionState.Closed)
+ throw new InvalidOperationException();
+
+ _connectionString = value;
+ }
+ }
+
+ /// <summary>
+ /// Create a new SqliteCommand and associate it with this connection.
+ /// </summary>
+ /// <returns>Returns an instantiated SqliteCommand object already assigned to this connection.</returns>
+ public new SqliteCommand CreateCommand()
+ {
+ return new SqliteCommand(this);
+ }
+
+ /// <summary>
+ /// Forwards to the local CreateCommand() function
+ /// </summary>
+ /// <returns></returns>
+ protected override DbCommand CreateDbCommand()
+ {
+ return CreateCommand();
+ }
+
+ /// <summary>
+ /// Returns the filename without extension or path
+ /// </summary>
+#if !PLATFORM_COMPACTFRAMEWORK
+ [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)]
+#endif
+ public override string DataSource
+ {
+ get
+ {
+ return _dataSource;
+ }
+ }
+
+ /// <summary>
+ /// Returns "main'
+ /// </summary>
+#if !PLATFORM_COMPACTFRAMEWORK
+ [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)]
+#endif
+ public override string Database
+ {
+ get
+ {
+ return "main";
+ }
+ }
+
+ /// <summary>
+ /// Maps mono-specific connection string keywords to the standard ones
+ /// </summary>
+ /// <returns>The mapped keyword name</returns>
+ internal void MapMonoKeyword (string[] arPiece, List<KeyValuePair<string, string>> ls)
+ {
+ string keyword, value;
+
+ switch (arPiece[0].ToLower (CultureInfo.InvariantCulture)) {
+ case "uri":
+ keyword = "Data Source";
+ value = MapMonoUriPath (arPiece[1]);
+ break;
+
+ default:
+ keyword = arPiece[0];
+ value = arPiece[1];
+ break;
+ }
+
+ ls.Add(new KeyValuePair<string, string>(keyword, value));
+ }
+
+ internal string MapMonoUriPath (string path)
+ {
+ if (path.StartsWith ("file://")) {
+ return path.Substring (7);
+ } else if (path.StartsWith ("file:")) {
+ return path.Substring (5);
+ } else if (path.StartsWith ("/")) {
+ return path;
+ } else {
+ throw new InvalidOperationException ("Invalid connection string: invalid URI");
+ }
+ }
+
+ /// <summary>
+ /// Parses the connection string into component parts
+ /// </summary>
+ /// <returns>An array of key-value pairs representing each parameter of the connection string</returns>
+ internal KeyValuePair<string, string>[] ParseConnectionString()
+ {
+ string s = _connectionString.Replace (',', ';'); // Mono compatibility
+ int n;
+ List<KeyValuePair<string, string>> ls = new List<KeyValuePair<string, string>>();
+
+ // First split into semi-colon delimited values. The Split() function of SqliteBase accounts for and properly
+ // skips semi-colons in quoted strings
+ string[] arParts = SqliteConvert.Split(s, ';');
+ string[] arPiece;
+
+ int x = arParts.Length;
+ // For each semi-colon piece, split into key and value pairs by the presence of the = sign
+ for (n = 0; n < x; n++)
+ {
+ arPiece = SqliteConvert.Split(arParts[n], '=');
+ if (arPiece.Length == 2)
+ MapMonoKeyword (arPiece, ls);
+ else throw new ArgumentException(String.Format(CultureInfo.CurrentCulture, "Invalid ConnectionString format for parameter \"{0}\"", (arPiece.Length > 0) ? arPiece[0] : "null"));
+ }
+ KeyValuePair<string, string>[] ar = new KeyValuePair<string, string>[ls.Count];
+ ls.CopyTo(ar, 0);
+
+ // Return the array of key-value pairs
+ return ar;
+ }
+
+#if !PLATFORM_COMPACTFRAMEWORK
+ /// <summary>
+ /// Manual distributed transaction enlistment support
+ /// </summary>
+ /// <param name="transaction">The distributed transaction to enlist in</param>
+ public override void EnlistTransaction(System.Transactions.Transaction transaction)
+ {
+ if (_transactionLevel > 0 && transaction != null)
+ throw new ArgumentException("Unable to enlist in transaction, a local transaction already exists");
+
+ if (_enlistment != null && transaction != _enlistment._scope)
+ throw new ArgumentException("Already enlisted in a transaction");
+
+ _enlistment = new SqliteEnlistment(this, transaction);
+ }
+#endif
+
+ /// <summary>
+ /// Looks for a key in the array of key/values of the parameter string. If not found, return the specified default value
+ /// </summary>
+ /// <param name="opts">The Key/Value pair array to look in</param>
+ /// <param name="key">The key to find</param>
+ /// <param name="defValue">The default value to return if the key is not found</param>
+ /// <returns>The value corresponding to the specified key, or the default value if not found.</returns>
+ static internal string FindKey(KeyValuePair<string, string>[] opts, string key, string defValue)
+ {
+ int x = opts.Length;
+ for (int n = 0; n < x; n++)
+ {
+ if (String.Compare(opts[n].Key, key, true, CultureInfo.InvariantCulture) == 0)
+ {
+ return opts[n].Value;
+ }
+ }
+ return defValue;
+ }
+
+ /// <summary>
+ /// Opens the connection using the parameters found in the <see cref="ConnectionString">ConnectionString</see>
+ /// </summary>
+ public override void Open()
+ {
+ if (_connectionState != ConnectionState.Closed)
+ throw new InvalidOperationException();
+
+ Close();
+
+ KeyValuePair<string, string>[] opts = ParseConnectionString();
+ string fileName;
+
+ if (Convert.ToInt32(FindKey(opts, "Version", "3"), CultureInfo.InvariantCulture) != 3)
+ throw new NotSupportedException("Only Sqlite Version 3 is supported at this time");
+
+ fileName = FindKey(opts, "Data Source", "");
+
+ if (String.IsNullOrEmpty(fileName))
+ throw new ArgumentException("Data Source cannot be empty. Use :memory: to open an in-memory database");
+
+ if (String.Compare(fileName, ":MEMORY:", true, CultureInfo.InvariantCulture) == 0)
+ fileName = ":memory:";
+#if PLATFORM_COMPACTFRAMEWORK
+ else if (fileName.StartsWith(".\\"))
+ fileName = System.IO.Path.GetDirectoryName(System.Reflection.Assembly.GetCallingAssembly().GetName().CodeBase) + fileName.Substring(1);
+#endif
+ string bt = FindKey (opts, "busy_timeout", "30");
+ try {
+ _busyTimeout = Int32.Parse (bt);
+ } catch (Exception) {
+ // ignore
+ }
+
+ try
+ {
+ bool bUTF16 = (Convert.ToBoolean(FindKey(opts, "UseUTF16Encoding", "False"), CultureInfo.InvariantCulture) == true);
+ SqliteDateFormats dateFormat = String.Compare(FindKey(opts, "DateTimeFormat", "ISO8601"), "ticks", true, CultureInfo.InvariantCulture) == 0 ? SqliteDateFormats.Ticks : SqliteDateFormats.ISO8601;
+
+ if (bUTF16) // Sqlite automatically sets the encoding of the database to UTF16 if called from sqlite3_open16()
+ _sql = new Sqlite3_UTF16(dateFormat);
+ else
+ _sql = new Sqlite3(dateFormat);
+
+ fileName = ExpandFileName(fileName);
+
+ try
+ {
+ if (System.IO.File.Exists(fileName) == false)
+ throw new System.IO.FileNotFoundException(String.Format(CultureInfo.CurrentCulture, "Unable to locate file \"{0}\", creating new database.", fileName));
+ }
+ catch
+ {
+ }
+
+ _sql.Open(fileName);
+
+ _binaryGuid = (Convert.ToBoolean(FindKey(opts, "BinaryGUID", "True"), CultureInfo.InvariantCulture) == true);
+
+#if MONO_SUPPORT_PASSWORDS
+ // Not used under mono now
+ string password = FindKey(opts, "Password", null);
+
+ if (String.IsNullOrEmpty(password) == false)
+ _sql.SetPassword(System.Text.UTF8Encoding.UTF8.GetBytes(password));
+ else if (_password != null)
+ _sql.SetPassword(_password);
+ _password = null;
+#endif
+ _dataSource = System.IO.Path.GetFileNameWithoutExtension(fileName);
+
+ OnStateChange(ConnectionState.Open);
+ _version++;
+
+ using (SqliteCommand cmd = CreateCommand())
+ {
+ string defValue;
+
+ defValue = FindKey(opts, "Synchronous", "Normal");
+ if (String.Compare(defValue, "Normal", true, CultureInfo.InvariantCulture) != 0)
+ {
+ cmd.CommandText = String.Format(CultureInfo.InvariantCulture, "PRAGMA Synchronous={0}", defValue);
+ cmd.ExecuteNonQuery();
+ }
+
+ defValue = FindKey(opts, "Cache Size", "2000");
+ if (Convert.ToInt32(defValue) != 2000)
+ {
+ cmd.CommandText = String.Format(CultureInfo.InvariantCulture, "PRAGMA Cache_Size={0}", defValue);
+ cmd.ExecuteNonQuery();
+ }
+
+ if (fileName != ":memory:")
+ {
+ defValue = FindKey(opts, "Page Size", "1024");
+ if (Convert.ToInt32(defValue) != 1024)
+ {
+ cmd.CommandText = String.Format(CultureInfo.InvariantCulture, "PRAGMA Page_Size={0}", defValue);
+ cmd.ExecuteNonQuery();
+ }
+ }
+ }
+
+#if !PLATFORM_COMPACTFRAMEWORK
+ if (FindKey(opts, "Enlist", "Y").ToUpper()[0] == 'Y' && System.Transactions.Transaction.Current != null)
+ EnlistTransaction(System.Transactions.Transaction.Current);
+#endif
+ }
+ catch (SqliteException)
+ {
+ OnStateChange(ConnectionState.Broken);
+ throw;
+ }
+ }
+
+ /// <summary>
+ /// Returns the version of the underlying Sqlite database engine
+ /// </summary>
+#if !PLATFORM_COMPACTFRAMEWORK
+ [Browsable(false), DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)]
+#endif
+ public override string ServerVersion
+ {
+ get
+ {
+ if (_connectionState != ConnectionState.Open)
+ throw new InvalidOperationException();
+
+ return _sql.Version;
+ }
+ }
+
+ /// <summary>
+ /// Returns the state of the connection.
+ /// </summary>
+#if !PLATFORM_COMPACTFRAMEWORK
+ [Browsable(false), DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)]
+#endif
+ public override ConnectionState State
+ {
+ get
+ {
+ return _connectionState;
+ }
+ }
+
+#if MONO_SUPPORT_PASSWORDS // Not used on mono now
+ /// <summary>
+ /// Change the password (or assign a password) to an open database.
+ /// </summary>
+ /// <remarks>
+ /// No readers or writers may be active for this process. The database must already be open
+ /// and if it already was password protected, the existing password must already have been supplied.
+ /// </remarks>
+ /// <param name="newPassword">The new password to assign to the database</param>
+ public void ChangePassword(string newPassword)
+ {
+ ChangePassword(String.IsNullOrEmpty(newPassword) ? null : System.Text.UTF8Encoding.UTF8.GetBytes(newPassword));
+ }
+
+ /// <summary>
+ /// Change the password (or assign a password) to an open database.
+ /// </summary>
+ /// <remarks>
+ /// No readers or writers may be active for this process. The database must already be open
+ /// and if it already was password protected, the existing password must already have been supplied.
+ /// </remarks>
+ /// <param name="newPassword">The new password to assign to the database</param>
+ public void ChangePassword(byte[] newPassword)
+ {
+ if (_connectionState != ConnectionState.Open)
+ throw new InvalidOperationException("Database must be opened before changing the password.");
+
+ _sql.ChangePassword(newPassword);
+ }
+
+ /// <summary>
+ /// Sets the password for a password-protected database. A password-protected database is
+ /// unusable for any operation until the password has been set.
+ /// </summary>
+ /// <param name="databasePassword">The password for the database</param>
+ public void SetPassword(string databasePassword)
+ {
+ SetPassword(String.IsNullOrEmpty(databasePassword) ? null : System.Text.UTF8Encoding.UTF8.GetBytes(databasePassword));
+ }
+
+ /// <summary>
+ /// Sets the password for a password-protected database. A password-protected database is
+ /// unusable for any operation until the password has been set.
+ /// </summary>
+ /// <param name="databasePassword">The password for the database</param>
+ public void SetPassword(byte[] databasePassword)
+ {
+ if (_connectionState != ConnectionState.Closed)
+ throw new InvalidOperationException("Password can only be set before the database is opened.");
+
+ if (databasePassword != null)
+ if (databasePassword.Length == 0) databasePassword = null;
+
+ _password = databasePassword;
+ }
+#endif
+
+ /// <summary>
+ /// Expand the filename of the data source, resolving the |DataDirectory| macro as appropriate.
+ /// </summary>
+ /// <param name="sourceFile">The database filename to expand</param>
+ /// <returns>The expanded path and filename of the filename</returns>
+ private string ExpandFileName(string sourceFile)
+ {
+ if (String.IsNullOrEmpty(sourceFile)) return sourceFile;
+
+ if (sourceFile.StartsWith(_dataDirectory, StringComparison.OrdinalIgnoreCase))
+ {
+ string dataDirectory;
+
+#if PLATFORM_COMPACTFRAMEWORK
+ dataDirectory = System.IO.Path.GetDirectoryName(System.Reflection.Assembly.GetCallingAssembly().GetName().CodeBase);
+#else
+ dataDirectory = AppDomain.CurrentDomain.GetData("DataDirectory") as string;
+ if (String.IsNullOrEmpty(dataDirectory))
+ dataDirectory = AppDomain.CurrentDomain.BaseDirectory;
+#endif
+
+ if (sourceFile.Length > _dataDirectory.Length)
+ {
+ if (sourceFile[_dataDirectory.Length] == System.IO.Path.DirectorySeparatorChar ||
+ sourceFile[_dataDirectory.Length] == System.IO.Path.AltDirectorySeparatorChar)
+ sourceFile = sourceFile.Remove(_dataDirectory.Length, 1);
+ }
+ sourceFile = System.IO.Path.Combine(dataDirectory, sourceFile.Substring(_dataDirectory.Length));
+ }
+
+ return sourceFile;
+ }
+ ///<overloads>
+ /// The following commands are used to extract schema information out of the database. Valid schema types are:
+ /// <list type="bullet">
+ /// <item>
+ /// <description>MetaDataCollections</description>
+ /// </item>
+ /// <item>
+ /// <description>DataSourceInformation</description>
+ /// </item>
+ /// <item>
+ /// <description>Catalogs</description>
+ /// </item>
+ /// <item>
+ /// <description>Columns</description>
+ /// </item>
+ /// <item>
+ /// <description>ForeignKeys</description>
+ /// </item>
+ /// <item>
+ /// <description>Indexes</description>
+ /// </item>
+ /// <item>
+ /// <description>IndexColumns</description>
+ /// </item>
+ /// <item>
+ /// <description>Tables</description>
+ /// </item>
+ /// <item>
+ /// <description>Views</description>
+ /// </item>
+ /// <item>
+ /// <description>ViewColumns</description>
+ /// </item>
+ /// </list>
+ /// </overloads>
+ /// <summary>
+ /// Returns the MetaDataCollections schema
+ /// </summary>
+ /// <returns>A DataTable of the MetaDataCollections schema</returns>
+ public override DataTable GetSchema()
+ {
+ return GetSchema("MetaDataCollections", null);
+ }
+
+ /// <summary>
+ /// Returns schema information of the specified collection
+ /// </summary>
+ /// <param name="collectionName">The schema collection to retrieve</param>
+ /// <returns>A DataTable of the specified collection</returns>
+ public override DataTable GetSchema(string collectionName)
+ {
+ return GetSchema(collectionName, new string[0]);
+ }
+
+ /// <summary>
+ /// Retrieves schema information using the specified constraint(s) for the specified collection
+ /// </summary>
+ /// <param name="collectionName">The collection to retrieve</param>
+ /// <param name="restrictionValues">The restrictions to impose</param>
+ /// <returns>A DataTable of the specified collection</returns>
+ public override DataTable GetSchema(string collectionName, string[] restrictionValues)
+ {
+ if (_connectionState != ConnectionState.Open)
+ throw new InvalidOperationException();
+
+ string[] parms = new string[5];
+
+ if (restrictionValues == null) restrictionValues = new string[0];
+ restrictionValues.CopyTo(parms, 0);
+
+ switch (collectionName.ToUpper(CultureInfo.InvariantCulture))
+ {
+ case "METADATACOLLECTIONS":
+ return Schema_MetaDataCollections();
+ case "DATASOURCEINFORMATION":
+ return Schema_DataSourceInformation();
+ case "DATATYPES":
+ return Schema_DataTypes();
+ case "COLUMNS":
+ return Schema_Columns(parms[0], parms[2], parms[3]);
+ case "INDEXES":
+ return Schema_Indexes(parms[0], parms[2], parms[4]);
+ case "INDEXCOLUMNS":
+ return Schema_IndexColumns(parms[0], parms[2], parms[3], parms[4]);
+ case "TABLES":
+ return Schema_Tables(parms[0], parms[2], parms[3]);
+ case "VIEWS":
+ return Schema_Views(parms[0], parms[2]);
+ case "VIEWCOLUMNS":
+ return Schema_ViewColumns(parms[0], parms[2], parms[3]);
+ case "FOREIGNKEYS":
+ return Schema_ForeignKeys(parms[0], parms[2], parms[3]);
+ case "CATALOGS":
+ return Schema_Catalogs(parms[0]);
+ case "RESERVEDWORDS":
+ return Schema_ReservedWords();
+ }
+ throw new NotSupportedException();
+ }
+
+ private static DataTable Schema_ReservedWords()
+ {
+ DataTable tbl = new DataTable("MetaDataCollections");
+
+ tbl.Locale = CultureInfo.InvariantCulture;
+ tbl.Columns.Add("ReservedWord", typeof(string));
+ tbl.Columns.Add("MaximumVersion", typeof(string));
+ tbl.Columns.Add("MinimumVersion", typeof(string));
+
+ tbl.BeginLoadData();
+ DataRow row;
+ foreach (string word in SR.Keywords.Split(new char[] { ',' }))
+ {
+ row = tbl.NewRow();
+ row[0] = word;
+ tbl.Rows.Add(row);
+ }
+
+ tbl.AcceptChanges();
+ tbl.EndLoadData();
+
+ return tbl;
+ }
+
+ /// <summary>
+ /// Builds a MetaDataCollections schema datatable
+ /// </summary>
+ /// <returns>DataTable</returns>
+ private static DataTable Schema_MetaDataCollections()
+ {
+ DataTable tbl = new DataTable("MetaDataCollections");
+
+ tbl.Locale = CultureInfo.InvariantCulture;
+ tbl.Columns.Add("CollectionName", typeof(string));
+ tbl.Columns.Add("NumberOfRestrictions", typeof(int));
+ tbl.Columns.Add("NumberOfIdentifierParts", typeof(int));
+
+ tbl.BeginLoadData();
+
+ System.IO.StringReader reader = new System.IO.StringReader(SR.MetaDataCollections);
+ tbl.ReadXml(reader);
+ reader.Close();
+
+ tbl.AcceptChanges();
+ tbl.EndLoadData();
+
+ return tbl;
+ }
+
+ /// <summary>
+ /// Builds a DataSourceInformation datatable
+ /// </summary>
+ /// <returns>DataTable</returns>
+ private DataTable Schema_DataSourceInformation()
+ {
+ DataTable tbl = new DataTable("DataSourceInformation");
+ DataRow row;
+
+ tbl.Locale = CultureInfo.InvariantCulture;
+ tbl.Columns.Add(DbMetaDataColumnNames.CompositeIdentifierSeparatorPattern, typeof(string));
+ tbl.Columns.Add(DbMetaDataColumnNames.DataSourceProductName, typeof(string));
+ tbl.Columns.Add(DbMetaDataColumnNames.DataSourceProductVersion, typeof(string));
+ tbl.Columns.Add(DbMetaDataColumnNames.DataSourceProductVersionNormalized, typeof(string));
+ tbl.Columns.Add(DbMetaDataColumnNames.GroupByBehavior, typeof(int));
+ tbl.Columns.Add(DbMetaDataColumnNames.IdentifierPattern, typeof(string));
+ tbl.Columns.Add(DbMetaDataColumnNames.IdentifierCase, typeof(int));
+ tbl.Columns.Add(DbMetaDataColumnNames.OrderByColumnsInSelect, typeof(bool));
+ tbl.Columns.Add(DbMetaDataColumnNames.ParameterMarkerFormat, typeof(string));
+ tbl.Columns.Add(DbMetaDataColumnNames.ParameterMarkerPattern, typeof(string));
+ tbl.Columns.Add(DbMetaDataColumnNames.ParameterNameMaxLength, typeof(int));
+ tbl.Columns.Add(DbMetaDataColumnNames.ParameterNamePattern, typeof(string));
+ tbl.Columns.Add(DbMetaDataColumnNames.QuotedIdentifierPattern, typeof(string));
+ tbl.Columns.Add(DbMetaDataColumnNames.QuotedIdentifierCase, typeof(int));
+ tbl.Columns.Add(DbMetaDataColumnNames.StatementSeparatorPattern, typeof(string));
+ tbl.Columns.Add(DbMetaDataColumnNames.StringLiteralPattern, typeof(string));
+ tbl.Columns.Add(DbMetaDataColumnNames.SupportedJoinOperators, typeof(int));
+
+ tbl.BeginLoadData();
+
+ row = tbl.NewRow();
+ row.ItemArray = new object[] {
+ null,
+ "Sqlite",
+ _sql.Version,
+ _sql.Version,
+ 3,
+ @"(^\[\p{Lo}\p{Lu}\p{Ll}_@#][\p{Lo}\p{Lu}\p{Ll}\p{Nd}@$#_]*$)|(^\[[^\]\0]|\]\]+\]$)|(^\""[^\""\0]|\""\""+\""$)",
+ 1,
+ false,
+ "{0}",
+ @"@[\p{Lo}\p{Lu}\p{Ll}\p{Lm}_@#][\p{Lo}\p{Lu}\p{Ll}\p{Lm}\p{Nd}\uff3f_@#\$]*(?=\s+|$)",
+ 255,
+ @"^[\p{Lo}\p{Lu}\p{Ll}\p{Lm}_@#][\p{Lo}\p{Lu}\p{Ll}\p{Lm}\p{Nd}\uff3f_@#\$]*(?=\s+|$)",
+ @"(([^\[]|\]\])*)",
+ 1,
+ ";",
+ @"'(([^']|'')*)'", // ' a bug in c-sharp mode for emacs
+ 15
+ };
+ tbl.Rows.Add(row);
+
+ tbl.AcceptChanges();
+ tbl.EndLoadData();
+
+ return tbl;
+ }
+
+ /// <summary>
+ /// Build a Columns schema
+ /// </summary>
+ /// <param name="strCatalog">The catalog (attached database) to query, can be null</param>
+ /// <param name="strTable">The table to retrieve schema information for, must not be null</param>
+ /// <param name="strColumn">The column to retrieve schema information for, can be null</param>
+ /// <returns>DataTable</returns>
+ private DataTable Schema_Columns(string strCatalog, string strTable, string strColumn)
+ {
+ DataTable tbl = new DataTable("Columns");
+ DataRow row;
+
+ tbl.Locale = CultureInfo.InvariantCulture;
+ tbl.Columns.Add("TABLE_CATALOG", typeof(string));
+ tbl.Columns.Add("TABLE_SCHEMA", typeof(string));
+ tbl.Columns.Add("TABLE_NAME", typeof(string));
+ tbl.Columns.Add("COLUMN_NAME", typeof(string));
+ tbl.Columns.Add("COLUMN_GUID", typeof(Guid));
+ tbl.Columns.Add("COLUMN_PROPID", typeof(long));
+ tbl.Columns.Add("ORDINAL_POSITION", typeof(int));
+ tbl.Columns.Add("COLUMN_HASDEFAULT", typeof(bool));
+ tbl.Columns.Add("COLUMN_DEFAULT", typeof(string));
+ tbl.Columns.Add("COLUMN_FLAGS", typeof(long));
+ tbl.Columns.Add("IS_NULLABLE", typeof(bool));
+ tbl.Columns.Add("DATA_TYPE", typeof(string));
+ tbl.Columns.Add("TYPE_GUID", typeof(Guid));
+ tbl.Columns.Add("CHARACTER_MAXIMUM_LENGTH", typeof(int));
+ tbl.Columns.Add("CHARACTER_OCTET_LENGTH", typeof(int));
+ tbl.Columns.Add("NUMERIC_PRECISION", typeof(int));
+ tbl.Columns.Add("NUMERIC_SCALE", typeof(int));
+ tbl.Columns.Add("DATETIME_PRECISION", typeof(long));
+ tbl.Columns.Add("CHARACTER_SET_CATALOG", typeof(string));
+ tbl.Columns.Add("CHARACTER_SET_SCHEMA", typeof(string));
+ tbl.Columns.Add("CHARACTER_SET_NAME", typeof(string));
+ tbl.Columns.Add("COLLATION_CATALOG", typeof(string));
+ tbl.Columns.Add("COLLATION_SCHEMA", typeof(string));
+ tbl.Columns.Add("COLLATION_NAME", typeof(string));
+ tbl.Columns.Add("DOMAIN_CATALOG", typeof(string));
+ tbl.Columns.Add("DOMAIN_NAME", typeof(string));
+ tbl.Columns.Add("DESCRIPTION", typeof(string));
+ tbl.Columns.Add("PRIMARY_KEY", typeof(bool));
+
+ tbl.BeginLoadData();
+
+ if (String.IsNullOrEmpty(strCatalog)) strCatalog = "main";
+
+ using (SqliteCommand cmdTables = new SqliteCommand(String.Format(CultureInfo.InvariantCulture, "SELECT * FROM [{0}].[sqlite_master] WHERE [type] LIKE 'table' OR [type] LIKE 'view'", strCatalog), this))
+ using (SqliteDataReader rdTables = cmdTables.ExecuteReader())
+ {
+ while (rdTables.Read())
+ {
+ if (String.IsNullOrEmpty(strTable) || String.Compare(strTable, rdTables.GetString(2), true, CultureInfo.InvariantCulture) == 0)
+ {
+ using (SqliteCommand cmd = new SqliteCommand(String.Format(CultureInfo.InvariantCulture, "SELECT * FROM [{0}].[{1}]", strCatalog, rdTables.GetString(2)), this))
+ using (SqliteDataReader rd = (SqliteDataReader)cmd.ExecuteReader(CommandBehavior.SchemaOnly))
+ using (DataTable tblSchema = rd.GetSchemaTable(false, true))
+ {
+ foreach (DataRow schemaRow in tblSchema.Rows)
+ {
+ if (String.Compare(schemaRow[SchemaTableColumn.ColumnName].ToString(), strColumn, true, CultureInfo.InvariantCulture) == 0
+ || strColumn == null)
+ {
+ row = tbl.NewRow();
+
+ row["TABLE_NAME"] = rdTables.GetString(2);
+ row["COLUMN_NAME"] = schemaRow[SchemaTableColumn.ColumnName];
+ row["TABLE_CATALOG"] = strCatalog;
+ row["ORDINAL_POSITION"] = schemaRow[SchemaTableColumn.ColumnOrdinal];
+ row["COLUMN_HASDEFAULT"] = (schemaRow[SchemaTableOptionalColumn.DefaultValue] != DBNull.Value);
+ row["COLUMN_DEFAULT"] = schemaRow[SchemaTableOptionalColumn.DefaultValue];
+ row["IS_NULLABLE"] = schemaRow[SchemaTableColumn.AllowDBNull];
+ row["DATA_TYPE"] = schemaRow["DataTypeName"]; // SqliteConvert.DbTypeToType((DbType)schemaRow[SchemaTableColumn.ProviderType]).ToString();
+ row["CHARACTER_MAXIMUM_LENGTH"] = schemaRow[SchemaTableColumn.ColumnSize];
+ row["TABLE_SCHEMA"] = schemaRow[SchemaTableColumn.BaseSchemaName];
+ row["PRIMARY_KEY"] = schemaRow[SchemaTableColumn.IsKey];
+
+ tbl.Rows.Add(row);
+ }
+ }
+ }
+ }
+ }
+ }
+
+ tbl.AcceptChanges();
+ tbl.EndLoadData();
+
+ return tbl;
+ }
+
+ /// <summary>
+ /// Returns index information for the given database and catalog
+ /// </summary>
+ /// <param name="strCatalog">The catalog (attached database) to query, can be null</param>
+ /// <param name="strIndex">The name of the index to retrieve information for, can be null</param>
+ /// <param name="strTable">The table to retrieve index information for, can be null</param>
+ /// <returns>DataTable</returns>
+ private DataTable Schema_Indexes(string strCatalog, string strTable, string strIndex)
+ {
+ DataTable tbl = new DataTable("Indexes");
+ DataRow row;
+ System.Collections.Generic.List<int> primaryKeys = new List<int>();
+ bool maybeRowId;
+
+ tbl.Locale = CultureInfo.InvariantCulture;
+ tbl.Columns.Add("TABLE_CATALOG", typeof(string));
+ tbl.Columns.Add("TABLE_SCHEMA", typeof(string));
+ tbl.Columns.Add("TABLE_NAME", typeof(string));
+ tbl.Columns.Add("INDEX_CATALOG", typeof(string));
+ tbl.Columns.Add("INDEX_SCHEMA", typeof(string));
+ tbl.Columns.Add("INDEX_NAME", typeof(string));
+ tbl.Columns.Add("PRIMARY_KEY", typeof(bool));
+ tbl.Columns.Add("UNIQUE", typeof(bool));
+ tbl.Columns.Add("CLUSTERED", typeof(bool));
+ tbl.Columns.Add("TYPE", typeof(int));
+ tbl.Columns.Add("FILL_FACTOR", typeof(int));
+ tbl.Columns.Add("INITIAL_SIZE", typeof(int));
+ tbl.Columns.Add("NULLS", typeof(int));
+ tbl.Columns.Add("SORT_BOOKMARKS", typeof(bool));
+ tbl.Columns.Add("AUTO_UPDATE", typeof(bool));
+ tbl.Columns.Add("NULL_COLLATION", typeof(int));
+ tbl.Columns.Add("ORDINAL_POSITION", typeof(int));
+ tbl.Columns.Add("COLUMN_NAME", typeof(string));
+ tbl.Columns.Add("COLUMN_GUID", typeof(Guid));
+ tbl.Columns.Add("COLUMN_PROPID", typeof(long));
+ tbl.Columns.Add("COLLATION", typeof(short));
+ tbl.Columns.Add("CARDINALITY", typeof(Decimal));
+ tbl.Columns.Add("PAGES", typeof(int));
+ tbl.Columns.Add("FILTER_CONDITION", typeof(string));
+ tbl.Columns.Add("INTEGRATED", typeof(bool));
+
+ tbl.BeginLoadData();
+
+ if (String.IsNullOrEmpty(strCatalog)) strCatalog = "main";
+
+ using (SqliteCommand cmdTables = new SqliteCommand(String.Format(CultureInfo.InvariantCulture, "SELECT * FROM [{0}].[sqlite_master] WHERE [type] LIKE 'table'", strCatalog), this))
+ using (SqliteDataReader rdTables = cmdTables.ExecuteReader())
+ {
+ while (rdTables.Read())
+ {
+ maybeRowId = false;
+ primaryKeys.Clear();
+ if (String.IsNullOrEmpty(strTable) || String.Compare(rdTables.GetString(2), strTable, true, CultureInfo.InvariantCulture) == 0)
+ {
+ // First, look for any rowid indexes -- which sqlite defines are INTEGER PRIMARY KEY columns.
+ // Such indexes are not listed in the indexes list but count as indexes just the same.
+ using (SqliteCommand cmdTable = new SqliteCommand(String.Format(CultureInfo.InvariantCulture, "PRAGMA [{0}].table_info([{1}])", strCatalog, rdTables.GetString(2)), this))
+ using (SqliteDataReader rdTable = cmdTable.ExecuteReader())
+ {
+ while (rdTable.Read())
+ {
+ if (rdTable.GetInt32(5) == 1)
+ {
+ primaryKeys.Add(rdTable.GetInt32(0));
+
+ // If the primary key is of type INTEGER, then its a rowid and we need to make a fake index entry for it.
+ if (String.Compare(rdTable.GetString(2), "INTEGER", true, CultureInfo.InvariantCulture) == 0)
+ maybeRowId = true;
+ }
+ }
+ }
+
+ if (primaryKeys.Count == 1 && maybeRowId == true)
+ {
+ row = tbl.NewRow();
+
+ row["TABLE_CATALOG"] = strCatalog;
+ row["TABLE_NAME"] = rdTables.GetString(2);
+ row["INDEX_CATALOG"] = strCatalog;
+ row["PRIMARY_KEY"] = true;
+ row["INDEX_NAME"] = String.Format(CultureInfo.InvariantCulture, "sqlite_master_PK_{0}", rdTables.GetString(2));
+ row["UNIQUE"] = true;
+
+ if (String.Compare((string)row["INDEX_NAME"], strIndex, true, CultureInfo.InvariantCulture) == 0
+ || strIndex == null)
+ {
+ tbl.Rows.Add(row);
+ }
+
+ primaryKeys.Clear();
+ }
+
+ // Now fetch all the rest of the indexes.
+ using (SqliteCommand cmd = new SqliteCommand(String.Format(CultureInfo.InvariantCulture, "PRAGMA [{0}].index_list([{1}])", strCatalog, rdTables.GetString(2)), this))
+ using (SqliteDataReader rd = (SqliteDataReader)cmd.ExecuteReader())
+ {
+ while (rd.Read())
+ {
+ if (String.Compare(rd.GetString(1), strIndex, true, CultureInfo.InvariantCulture) == 0
+ || strIndex == null)
+ {
+ row = tbl.NewRow();
+
+ row["TABLE_CATALOG"] = strCatalog;
+ row["TABLE_NAME"] = rdTables.GetString(2);
+ row["INDEX_CATALOG"] = strCatalog;
+ row["INDEX_NAME"] = rd.GetString(1);
+ row["UNIQUE"] = rd.GetBoolean(2);
+ row["PRIMARY_KEY"] = false;
+
+ // Now for the really hard work. Figure out which index is the primary key index.
+ // The only way to figure it out is to check if the index was an autoindex and if we have a non-rowid
+ // primary key, and all the columns in the given index match the primary key columns
+ if (primaryKeys.Count > 0 && rd.GetString(1).StartsWith("sqlite_autoindex_" + rdTables.GetString(2), StringComparison.InvariantCultureIgnoreCase) == true)
+ {
+ using (SqliteCommand cmdDetails = new SqliteCommand(String.Format(CultureInfo.InvariantCulture, "PRAGMA [{0}].index_info([{1}])", strCatalog, rd.GetString(1)), this))
+ using (SqliteDataReader rdDetails = cmdDetails.ExecuteReader())
+ {
+ int nMatches = 0;
+ while (rdDetails.Read())
+ {
+ if (primaryKeys.Contains(rdDetails.GetInt32(1)) == false)
+ {
+ nMatches = 0;
+ break;
+ }
+ nMatches++;
+ }
+ if (nMatches == primaryKeys.Count)
+ {
+ row["PRIMARY_KEY"] = true;
+ primaryKeys.Clear();
+ }
+ }
+ }
+
+ tbl.Rows.Add(row);
+ }
+ }
+ }
+ }
+ }
+ }
+
+ tbl.AcceptChanges();
+ tbl.EndLoadData();
+
+ return tbl;
+ }
+
+ /// <summary>
+ /// Retrieves table schema information for the database and catalog
+ /// </summary>
+ /// <param name="strCatalog">The catalog (attached database) to retrieve tables on</param>
+ /// <param name="strTable">The table to retrieve, can be null</param>
+ /// <param name="strType">The table type, can be null</param>
+ /// <returns>DataTable</returns>
+ private DataTable Schema_Tables(string strCatalog, string strTable, string strType)
+ {
+ DataTable tbl = new DataTable("Tables");
+ DataRow row;
+ string strItem;
+
+ tbl.Locale = CultureInfo.InvariantCulture;
+ tbl.Columns.Add("TABLE_CATALOG", typeof(string));
+ tbl.Columns.Add("TABLE_SCHEMA", typeof(string));
+ tbl.Columns.Add("TABLE_NAME", typeof(string));
+ tbl.Columns.Add("TABLE_TYPE", typeof(string));
+ tbl.Columns.Add("TABLE_ID", typeof(long));
+ tbl.Columns.Add("TABLE_ROOTPAGE", typeof(int));
+
+ tbl.BeginLoadData();
+
+ if (String.IsNullOrEmpty(strCatalog)) strCatalog = "main";
+
+ using (SqliteCommand cmd = new SqliteCommand(String.Format(CultureInfo.InvariantCulture, "SELECT [type], [name], [tbl_name], [rootpage], [sql], [rowid] FROM [{0}].[sqlite_master] WHERE [type] LIKE 'table'", strCatalog), this))
+ using (SqliteDataReader rd = (SqliteDataReader)cmd.ExecuteReader())
+ {
+ while (rd.Read())
+ {
+ strItem = rd.GetString(0);
+ if (String.Compare(rd.GetString(2), 0, "SQLITE_", 0, 7, true, CultureInfo.InvariantCulture) == 0)
+ strItem = "SYSTEM_TABLE";
+
+ if (String.Compare(strType, strItem, true, CultureInfo.InvariantCulture) == 0
+ || strType == null)
+ {
+ if (String.Compare(rd.GetString(2), strTable, true, CultureInfo.InvariantCulture) == 0
+ || strTable == null)
+ {
+ row = tbl.NewRow();
+
+ row["TABLE_CATALOG"] = strCatalog;
+ row["TABLE_NAME"] = rd.GetString(2);
+ row["TABLE_TYPE"] = strItem;
+ row["TABLE_ID"] = rd.GetInt64(5);
+ row["TABLE_ROOTPAGE"] = rd.GetInt32(3);
+
+ tbl.Rows.Add(row);
+ }
+ }
+ }
+ }
+
+ tbl.AcceptChanges();
+ tbl.EndLoadData();
+
+ return tbl;
+ }
+
+ /// <summary>
+ /// Retrieves view schema information for the database
+ /// </summary>
+ /// <param name="strCatalog">The catalog (attached database) to retrieve views on</param>
+ /// <param name="strView">The view name, can be null</param>
+ /// <returns>DataTable</returns>
+ private DataTable Schema_Views(string strCatalog, string strView)
+ {
+ DataTable tbl = new DataTable("Views");
+ DataRow row;
+ string strItem;
+ int nPos;
+
+ tbl.Locale = CultureInfo.InvariantCulture;
+ tbl.Columns.Add("TABLE_CATALOG", typeof(string));
+ tbl.Columns.Add("TABLE_SCHEMA", typeof(string));
+ tbl.Columns.Add("TABLE_NAME", typeof(string));
+ tbl.Columns.Add("VIEW_DEFINITION", typeof(string));
+ tbl.Columns.Add("CHECK_OPTION", typeof(bool));
+ tbl.Columns.Add("IS_UPDATABLE", typeof(bool));
+ tbl.Columns.Add("DESCRIPTION", typeof(string));
+ tbl.Columns.Add("DATE_CREATED", typeof(DateTime));
+ tbl.Columns.Add("DATE_MODIFIED", typeof(DateTime));
+
+ tbl.BeginLoadData();
+
+ if (String.IsNullOrEmpty(strCatalog)) strCatalog = "main";
+
+ using (SqliteCommand cmd = new SqliteCommand(String.Format(CultureInfo.InvariantCulture, "SELECT * FROM [{0}].[sqlite_master] WHERE [type] LIKE 'view'", strCatalog), this))
+ using (SqliteDataReader rd = (SqliteDataReader)cmd.ExecuteReader())
+ {
+ while (rd.Read())
+ {
+ if (String.Compare(rd.GetString(1), strView, true, CultureInfo.InvariantCulture) == 0
+ || String.IsNullOrEmpty(strView))
+ {
+ strItem = rd.GetString(4).Replace('\r', ' ').Replace('\n', ' ').Replace('\t', ' ');
+ nPos = System.Globalization.CultureInfo.InvariantCulture.CompareInfo.IndexOf(strItem, " AS ", CompareOptions.IgnoreCase);
+ if (nPos > -1)
+ {
+ strItem = strItem.Substring(nPos + 4).Trim();
+ row = tbl.NewRow();
+
+ row["TABLE_CATALOG"] = strCatalog;
+ row["TABLE_NAME"] = rd.GetString(2);
+ row["IS_UPDATABLE"] = false;
+ row["VIEW_DEFINITION"] = strItem;
+
+ tbl.Rows.Add(row);
+ }
+ }
+ }
+ }
+
+ tbl.AcceptChanges();
+ tbl.EndLoadData();
+
+ return tbl;
+ }
+
+ /// <summary>
+ /// Retrieves catalog (attached databases) schema information for the database
+ /// </summary>
+ /// <param name="strCatalog">The catalog to retrieve, can be null</param>
+ /// <returns>DataTable</returns>
+ private DataTable Schema_Catalogs(string strCatalog)
+ {
+ DataTable tbl = new DataTable("Catalogs");
+ DataRow row;
+
+ tbl.Locale = CultureInfo.InvariantCulture;
+ tbl.Columns.Add("CATALOG_NAME", typeof(string));
+ tbl.Columns.Add("DESCRIPTION", typeof(string));
+ tbl.Columns.Add("ID", typeof(long));
+
+ tbl.BeginLoadData();
+
+ using (SqliteCommand cmd = new SqliteCommand("PRAGMA database_list", this))
+ using (SqliteDataReader rd = (SqliteDataReader)cmd.ExecuteReader())
+ {
+ while (rd.Read())
+ {
+ if (String.Compare(rd.GetString(1), strCatalog, true, CultureInfo.InvariantCulture) == 0
+ || strCatalog == null)
+ {
+ row = tbl.NewRow();
+
+ row["CATALOG_NAME"] = rd.GetString(1);
+ row["DESCRIPTION"] = rd.GetString(2);
+ row["ID"] = rd.GetInt64(0);
+
+ tbl.Rows.Add(row);
+ }
+ }
+ }
+
+ tbl.AcceptChanges();
+ tbl.EndLoadData();
+
+ return tbl;
+ }
+
+ private DataTable Schema_DataTypes()
+ {
+ DataTable tbl = new DataTable("DataTypes");
+
+ tbl.Locale = CultureInfo.InvariantCulture;
+ tbl.Columns.Add("TypeName", typeof(String));
+ tbl.Columns.Add("ProviderDbType", typeof(int));
+ tbl.Columns.Add("ColumnSize", typeof(long));
+ tbl.Columns.Add("CreateFormat", typeof(String));
+ tbl.Columns.Add("CreateParameters", typeof(String));
+ tbl.Columns.Add("DataType", typeof(String));
+ tbl.Columns.Add("IsAutoIncrementable", typeof(bool));
+ tbl.Columns.Add("IsBestMatch", typeof(bool));
+ tbl.Columns.Add("IsCaseSensitive", typeof(bool));
+ tbl.Columns.Add("IsFixedLength", typeof(bool));
+ tbl.Columns.Add("IsFixedPrecisionScale", typeof(bool));
+ tbl.Columns.Add("IsLong", typeof(bool));
+ tbl.Columns.Add("IsNullable", typeof(bool));
+ tbl.Columns.Add("IsSearchable", typeof(bool));
+ tbl.Columns.Add("IsSearchableWithLike", typeof(bool));
+ tbl.Columns.Add("IsLiteralSupported", typeof(bool));
+ tbl.Columns.Add("LiteralPrefix", typeof(String));
+ tbl.Columns.Add("LiteralSuffix", typeof(String));
+ tbl.Columns.Add("IsUnsigned", typeof(bool));
+ tbl.Columns.Add("MaximumScale", typeof(short));
+ tbl.Columns.Add("MinimumScale", typeof(short));
+ tbl.Columns.Add("IsConcurrencyType", typeof(bool));
+
+ tbl.BeginLoadData();
+
+ System.IO.StringReader reader = new System.IO.StringReader(SR.DataTypes);
+ tbl.ReadXml(reader);
+ reader.Close();
+
+ tbl.AcceptChanges();
+ tbl.EndLoadData();
+
+ return tbl;
+ }
+
+ /// <summary>
+ /// Returns the base column information for indexes in a database
+ /// </summary>
+ /// <param name="strCatalog">The catalog to retrieve indexes for (can be null)</param>
+ /// <param name="strTable">The table to restrict index information by (can be null)</param>
+ /// <param name="strIndex">The index to restrict index information by (can be null)</param>
+ /// <param name="strColumn">The source column to restrict index information by (can be null)</param>
+ /// <returns>A DataTable containing the results</returns>
+ private DataTable Schema_IndexColumns(string strCatalog, string strTable, string strIndex, string strColumn)
+ {
+ DataTable tbl = new DataTable("IndexColumns");
+ DataRow row;
+ List<KeyValuePair<int, string>> primaryKeys = new List<KeyValuePair<int, string>>();
+ bool maybeRowId;
+
+ tbl.Locale = CultureInfo.InvariantCulture;
+ tbl.Columns.Add("CONSTRAINT_CATALOG", typeof(string));
+ tbl.Columns.Add("CONSTRAINT_SCHEMA", typeof(string));
+ tbl.Columns.Add("CONSTRAINT_NAME", typeof(string));
+ tbl.Columns.Add("TABLE_CATALOG", typeof(string));
+ tbl.Columns.Add("TABLE_SCHEMA", typeof(string));
+ tbl.Columns.Add("TABLE_NAME", typeof(string));
+ tbl.Columns.Add("COLUMN_NAME", typeof(string));
+ tbl.Columns.Add("ORDINAL_POSITION", typeof(int));
+ tbl.Columns.Add("INDEX_NAME", typeof(string));
+
+ if (String.IsNullOrEmpty(strCatalog)) strCatalog = "main";
+
+ tbl.BeginLoadData();
+
+ using (SqliteCommand cmdTables = new SqliteCommand(String.Format(CultureInfo.InvariantCulture, "SELECT * FROM [{0}].[sqlite_master] WHERE [type] LIKE 'table'", strCatalog), this))
+ using (SqliteDataReader rdTables = cmdTables.ExecuteReader())
+ {
+ while (rdTables.Read())
+ {
+ maybeRowId = false;
+ primaryKeys.Clear();
+ if (String.IsNullOrEmpty(strTable) || String.Compare(rdTables.GetString(2), strTable, true, CultureInfo.InvariantCulture) == 0)
+ {
+ using (SqliteCommand cmdTable = new SqliteCommand(String.Format(CultureInfo.InvariantCulture, "PRAGMA [{0}].table_info([{1}])", strCatalog, rdTables.GetString(2)), this))
+ using (SqliteDataReader rdTable = cmdTable.ExecuteReader())
+ {
+ while (rdTable.Read())
+ {
+ if (rdTable.GetInt32(5) == 1) // is a primary key
+ {
+ primaryKeys.Add(new KeyValuePair<int, string>(rdTable.GetInt32(0), rdTable.GetString(1)));
+ // Is an integer -- could be a rowid if no other primary keys exist in the table
+ if (String.Compare(rdTable.GetString(2), "INTEGER", true, CultureInfo.InvariantCulture) == 0)
+ maybeRowId = true;
+ }
+ }
+ }
+ if (primaryKeys.Count == 1 && maybeRowId == true)
+ {
+ row = tbl.NewRow();
+ row["CONSTRAINT_CATALOG"] = strCatalog;
+ row["CONSTRAINT_NAME"] = String.Format(CultureInfo.InvariantCulture, "sqlite_master_PK_{0}", rdTables.GetString(2));
+ row["TABLE_CATALOG"] = strCatalog;
+ row["TABLE_NAME"] = rdTables.GetString(2);
+ row["COLUMN_NAME"] = primaryKeys[0].Value;
+ row["INDEX_NAME"] = row["CONSTRAINT_NAME"];
+ row["ORDINAL_POSITION"] = primaryKeys[0].Key;
+
+ if (String.IsNullOrEmpty(strIndex) || String.Compare(strIndex, (string)row["INDEX_NAME"], true, CultureInfo.InvariantCulture) == 0)
+ tbl.Rows.Add(row);
+ }
+
+ using (SqliteCommand cmdIndexes = new SqliteCommand(String.Format(CultureInfo.InvariantCulture, "SELECT * FROM [{0}].[sqlite_master] WHERE [type] LIKE 'index' AND [tbl_name] LIKE '{1}'", strCatalog, rdTables.GetString(2).Replace("'", "''")), this))
+ using (SqliteDataReader rdIndexes = cmdIndexes.ExecuteReader())
+ {
+ while (rdIndexes.Read())
+ {
+ if (String.IsNullOrEmpty(strIndex) || String.Compare(strIndex, rdIndexes.GetString(1), true, CultureInfo.InvariantCulture) == 0)
+ {
+ using (SqliteCommand cmdIndex = new SqliteCommand(String.Format(CultureInfo.InvariantCulture, "PRAGMA [{0}].index_info([{1}])", strCatalog, rdIndexes.GetString(1)), this))
+ using (SqliteDataReader rdIndex = cmdIndex.ExecuteReader())
+ {
+ while (rdIndex.Read())
+ {
+ row = tbl.NewRow();
+ row["CONSTRAINT_CATALOG"] = strCatalog;
+ row["CONSTRAINT_NAME"] = rdIndexes.GetString(1);
+ row["TABLE_CATALOG"] = strCatalog;
+ row["TABLE_NAME"] = rdIndexes.GetString(2);
+ row["COLUMN_NAME"] = rdIndex.GetString(2);
+ row["INDEX_NAME"] = rdIndexes.GetString(1);
+ row["ORDINAL_POSITION"] = rdIndex.GetInt32(1);
+
+ if (String.IsNullOrEmpty(strColumn) || String.Compare(strColumn, row["COLUMN_NAME"].ToString(), true, CultureInfo.InvariantCulture) == 0)
+ tbl.Rows.Add(row);
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+
+ tbl.EndLoadData();
+ tbl.AcceptChanges();
+
+ return tbl;
+ }
+
+ /// <summary>
+ /// Returns detailed column information for a specified view
+ /// </summary>
+ /// <param name="strCatalog">The catalog to retrieve columns for (can be null)</param>
+ /// <param name="strView">The view to restrict column information by (can be null)</param>
+ /// <param name="strColumn">The source column to restrict column information by (can be null)</param>
+ /// <returns>A DataTable containing the results</returns>
+ private DataTable Schema_ViewColumns(string strCatalog, string strView, string strColumn)
+ {
+ DataTable tbl = new DataTable("ViewColumns");
+ DataRow row;
+ string strSql;
+ int n;
+ DataRow schemaRow;
+ DataRow viewRow;
+
+ tbl.Locale = CultureInfo.InvariantCulture;
+ tbl.Columns.Add("VIEW_CATALOG", typeof(string));
+ tbl.Columns.Add("VIEW_SCHEMA", typeof(string));
+ tbl.Columns.Add("VIEW_NAME", typeof(string));
+ tbl.Columns.Add("VIEW_COLUMN_NAME", typeof(String));
+ tbl.Columns.Add("TABLE_CATALOG", typeof(string));
+ tbl.Columns.Add("TABLE_SCHEMA", typeof(string));
+ tbl.Columns.Add("TABLE_NAME", typeof(string));
+ tbl.Columns.Add("COLUMN_NAME", typeof(string));
+
+ if (String.IsNullOrEmpty(strCatalog)) strCatalog = "main";
+
+ tbl.BeginLoadData();
+
+ using (SqliteCommand cmdViews = new SqliteCommand(String.Format(CultureInfo.InvariantCulture, "SELECT * FROM [{0}].[sqlite_master] WHERE [type] LIKE 'view'", strCatalog), this))
+ using (SqliteDataReader rdViews = cmdViews.ExecuteReader())
+ {
+ while (rdViews.Read())
+ {
+ if (String.IsNullOrEmpty(strView) || String.Compare(strView, rdViews.GetString(2), true, CultureInfo.InvariantCulture) == 0)
+ {
+ using (SqliteCommand cmdViewSelect = new SqliteCommand(String.Format(CultureInfo.InvariantCulture, "SELECT * FROM [{0}].[{1}]", strCatalog, rdViews.GetString(2)), this))
+ {
+ strSql = rdViews.GetString(4).Replace('\r', ' ').Replace('\n', ' ').Replace('\t', ' ');
+ n = CultureInfo.InvariantCulture.CompareInfo.IndexOf(strSql, " AS ", CompareOptions.IgnoreCase);
+ if (n < 0)
+ continue;
+
+ strSql = strSql.Substring(n + 4);
+
+ using (SqliteCommand cmd = new SqliteCommand(strSql, this))
+ using (SqliteDataReader rdViewSelect = cmdViewSelect.ExecuteReader(CommandBehavior.SchemaOnly))
+ using (SqliteDataReader rd = (SqliteDataReader)cmd.ExecuteReader(CommandBehavior.SchemaOnly))
+ using (DataTable tblSchemaView = rdViewSelect.GetSchemaTable(false, false))
+ using (DataTable tblSchema = rd.GetSchemaTable(false, false))
+ {
+ for (n = 0; n < tblSchema.Rows.Count; n++)
+ {
+ viewRow = tblSchemaView.Rows[n];
+ schemaRow = tblSchema.Rows[n];
+
+ if (String.Compare(viewRow[SchemaTableColumn.ColumnName].ToString(), strColumn, true, CultureInfo.InvariantCulture) == 0
+ || strColumn == null)
+ {
+ row = tbl.NewRow();
+
+ row["VIEW_CATALOG"] = strCatalog;
+ row["VIEW_NAME"] = rdViews.GetString(2);
+ row["TABLE_CATALOG"] = strCatalog;
+ row["TABLE_SCHEMA"] = schemaRow[SchemaTableColumn.BaseSchemaName];
+ row["TABLE_NAME"] = schemaRow[SchemaTableColumn.BaseTableName];
+ row["COLUMN_NAME"] = schemaRow[SchemaTableColumn.ColumnName];
+ row["VIEW_COLUMN_NAME"] = viewRow[SchemaTableColumn.ColumnName];
+
+ tbl.Rows.Add(row);
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+
+ tbl.EndLoadData();
+ tbl.AcceptChanges();
+
+ return tbl;
+ }
+
+ /// <summary>
+ /// Retrieves foreign key information from the specified set of filters
+ /// </summary>
+ /// <param name="strCatalog">An optional catalog to restrict results on</param>
+ /// <param name="strTable">An optional table to restrict results on</param>
+ /// <param name="strKeyName">An optional foreign key name to restrict results on</param>
+ /// <returns>A DataTable with the results of the query</returns>
+ private DataTable Schema_ForeignKeys(string strCatalog, string strTable, string strKeyName)
+ {
+ DataTable tbl = new DataTable("ForeignKeys");
+ DataRow row;
+
+ tbl.Locale = CultureInfo.InvariantCulture;
+ tbl.Columns.Add("CONSTRAINT_CATALOG", typeof(string));
+ tbl.Columns.Add("CONSTRAINT_SCHEMA", typeof(string));
+ tbl.Columns.Add("CONSTRAINT_NAME", typeof(string));
+ tbl.Columns.Add("TABLE_CATALOG", typeof(string));
+ tbl.Columns.Add("TABLE_SCHEMA", typeof(string));
+ tbl.Columns.Add("TABLE_NAME", typeof(string));
+ tbl.Columns.Add("CONSTRAINT_TYPE", typeof(string));
+ tbl.Columns.Add("IS_DEFERRABLE", typeof(bool));
+ tbl.Columns.Add("INITIALLY_DEFERRED", typeof(bool));
+ tbl.Columns.Add("FKEY_FROM_COLUMN", typeof(string));
+ tbl.Columns.Add("FKEY_FROM_ORDINAL_POSITION", typeof(int));
+ tbl.Columns.Add("FKEY_TO_CATALOG", typeof(string));
+ tbl.Columns.Add("FKEY_TO_SCHEMA", typeof(string));
+ tbl.Columns.Add("FKEY_TO_TABLE", typeof(string));
+ tbl.Columns.Add("FKEY_TO_COLUMN", typeof(string));
+
+ if (String.IsNullOrEmpty(strCatalog)) strCatalog = "main";
+
+ tbl.BeginLoadData();
+
+ using (SqliteCommand cmdTables = new SqliteCommand(String.Format(CultureInfo.InvariantCulture, "SELECT * FROM [{0}].[sqlite_master] WHERE [type] LIKE 'table'", strCatalog), this))
+ using (SqliteDataReader rdTables = cmdTables.ExecuteReader())
+ {
+ while (rdTables.Read())
+ {
+ if (String.IsNullOrEmpty(strTable) || String.Compare(strTable, rdTables.GetString(2), true, CultureInfo.InvariantCulture) == 0)
+ {
+ using (SqliteCommand cmdTable = new SqliteCommand(String.Format(CultureInfo.InvariantCulture, "SELECT * FROM [{0}].[{1}]", strCatalog, rdTables.GetString(2)), this))
+ using (SqliteDataReader rdTable = cmdTable.ExecuteReader(CommandBehavior.SchemaOnly))
+ using (SqliteCommand cmdKey = new SqliteCommand(String.Format(CultureInfo.InvariantCulture, "PRAGMA [{0}].foreign_key_list([{1}])", strCatalog, rdTables.GetString(2)), this))
+ using (SqliteDataReader rdKey = cmdKey.ExecuteReader())
+ {
+ while (rdKey.Read())
+ {
+ row = tbl.NewRow();
+ row["CONSTRAINT_CATALOG"] = strCatalog;
+ row["CONSTRAINT_NAME"] = String.Format(CultureInfo.InvariantCulture, "FK_{0}_{1}_{2}", rdTables.GetString(2), rdKey.GetString(3), rdKey.GetString(4));
+ row["TABLE_CATALOG"] = strCatalog;
+ row["TABLE_NAME"] = rdTables.GetString(2);
+ row["CONSTRAINT_TYPE"] = "FOREIGN KEY";
+ row["IS_DEFERRABLE"] = false;
+ row["INITIALLY_DEFERRED"] = false;
+ row["FKEY_FROM_COLUMN"] = rdKey.GetString(3);
+ row["FKEY_FROM_ORDINAL_POSITION"] = rdTable.GetOrdinal(row["FKEY_FROM_COLUMN"].ToString());
+ row["FKEY_TO_CATALOG"] = strCatalog;
+ row["FKEY_TO_TABLE"] = rdKey.GetString(2);
+ row["FKEY_TO_COLUMN"] = rdKey.GetString(4);
+
+ if (String.IsNullOrEmpty(strKeyName) || String.Compare(strKeyName, row["CONSTRAINT_NAME"].ToString(), true, CultureInfo.InvariantCulture) == 0)
+ tbl.Rows.Add(row);
+ }
+ }
+ }
+ }
+ }
+
+ tbl.EndLoadData();
+ tbl.AcceptChanges();
+
+ return tbl;
+ }
+
+ internal void AddCommand(SqliteCommand cmd)
+ {
+ lock (_commandList)
+ {
+ _commandList.Add(cmd);
+ }
+ }
+
+ internal void RemoveCommand(SqliteCommand cmd)
+ {
+ lock (_commandList)
+ {
+ _commandList.Remove(cmd);
+ }
+ }
+
+#if MONO_BACKWARD_COMPAT
+ /// <summary>
+ /// Obsolete
+ /// </summary>
+ public override int ConnectionTimeout
+ {
+ get
+ {
+ return 30;
+ }
+ }
+
+ public int Version {
+ get { return 3; }
+ }
+
+ public long LastInsertRowId {
+ get { return _sql.GetLastInsertRowId (); }
+ }
+
+ public int BusyTimeout {
+ get { return _busyTimeout; }
+ }
+#endif
+ }
+
+ /// <summary>
+ /// The I/O file cache flushing behavior for the connection
+ /// </summary>
+ public enum SynchronizationModes
+ {
+ /// <summary>
+ /// Normal file flushing at critical sections of the code
+ /// </summary>
+ Normal = 0,
+ /// <summary>
+ /// Full file flushing after every write operation
+ /// </summary>
+ Full = 1,
+ /// <summary>
+ /// Use the default operating system's file flushing, Sqlite does not explicitly flush the file buffers after writing
+ /// </summary>
+ Off = 2,
+ }
+
+ internal delegate void SqliteUpdateCallback(int type, IntPtr database, int databaseLen, IntPtr table, int tableLen, Int64 rowid);
+ internal delegate int SqliteCommitCallback();
+ internal delegate void SqliteRollbackCallback();
+
+ /// <summary>
+ /// Raised when a transaction is about to be committed. To roll back a transaction, set the
+ /// rollbackTrans boolean value to true.
+ /// </summary>
+ /// <param name="sender">The connection committing the transaction</param>
+ /// <param name="e">Event arguments on the transaction</param>
+ public delegate void SqliteCommitHandler(object sender, CommitEventArgs e);
+
+ /// <summary>
+ /// Raised when data is inserted, updated and deleted on a given connection
+ /// </summary>
+ /// <param name="sender">The connection committing the transaction</param>
+ /// <param name="e">The event parameters which triggered the event</param>
+ public delegate void SqliteUpdateEventHandler(object sender, UpdateEventArgs e);
+
+ /// <summary>
+ /// Whenever an update event is triggered on a connection, this enum will indicate
+ /// exactly what type of operation is being performed.
+ /// </summary>
+ public enum UpdateEventType
+ {
+ /// <summary>
+ /// A row is being deleted from the given database and table
+ /// </summary>
+ Delete = 9,
+ /// <summary>
+ /// A row is being inserted into the table.
+ /// </summary>
+ Insert = 18,
+ /// <summary>
+ /// A row is being updated in the table.
+ /// </summary>
+ Update = 23,
+ }
+
+ /// <summary>
+ /// Passed during an Update callback, these event arguments detail the type of update operation being performed
+ /// on the given connection.
+ /// </summary>
+ public class UpdateEventArgs : EventArgs
+ {
+ /// <summary>
+ /// The name of the database being updated (usually "main" but can be any attached or temporary database)
+ /// </summary>
+ public readonly string Database;
+
+ /// <summary>
+ /// The name of the table being updated
+ /// </summary>
+ public readonly string Table;
+
+ /// <summary>
+ /// The type of update being performed (insert/update/delete)
+ /// </summary>
+ public readonly UpdateEventType Event;
+
+ /// <summary>
+ /// The RowId affected by this update.
+ /// </summary>
+ public readonly Int64 RowId;
+
+ internal UpdateEventArgs(string database, string table, UpdateEventType eventType, Int64 rowid)
+ {
+ Database = database;
+ Table = table;
+ Event = eventType;
+ RowId = rowid;
+ }
+ }
+
+ /// <summary>
+ /// Event arguments raised when a transaction is being committed
+ /// </summary>
+ public class CommitEventArgs : EventArgs
+ {
+ internal CommitEventArgs()
+ {
+ }
+
+ /// <summary>
+ /// Set to true to abort the transaction and trigger a rollback
+ /// </summary>
+ public bool AbortTransaction;
+ }
+}
+#endif
diff --git a/lib/Hyena/src/Mono.Data.Sqlite/Mono.Data.Sqlite/SQLiteConnectionStringBuilder.cs b/lib/Hyena/src/Mono.Data.Sqlite/Mono.Data.Sqlite/SQLiteConnectionStringBuilder.cs
new file mode 100644
index 0000000..bb813f0
--- /dev/null
+++ b/lib/Hyena/src/Mono.Data.Sqlite/Mono.Data.Sqlite/SQLiteConnectionStringBuilder.cs
@@ -0,0 +1,323 @@
+//
+// Mono.Data.Sqlite.SQLiteConnectionStringBuilder.cs
+//
+// Author(s):
+// Robert Simpson (robert at blackcastlesoft.com)
+//
+// Adapted and modified for the Mono Project by
+// Marek Habersack (grendello at gmail.com)
+//
+//
+// Copyright (C) 2006 Novell, Inc (http://www.novell.com)
+// Copyright (C) 2007 Marek Habersack
+//
+// Permission is hereby granted, free of charge, to any person obtaining
+// a copy of this software and associated documentation files (the
+// "Software"), to deal in the Software without restriction, including
+// without limitation the rights to use, copy, modify, merge, publish,
+// distribute, sublicense, and/or sell copies of the Software, and to
+// permit persons to whom the Software is furnished to do so, subject to
+// the following conditions:
+//
+// The above copyright notice and this permission notice shall be
+// included in all copies or substantial portions of the Software.
+//
+// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
+// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
+// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
+// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+//
+
+/********************************************************
+ * ADO.NET 2.0 Data Provider for Sqlite Version 3.X
+ * Written by Robert Simpson (robert at blackcastlesoft.com)
+ *
+ * Released to the public domain, use at your own risk!
+ ********************************************************/
+#if NET_2_0
+namespace Mono.Data.Sqlite
+{
+ using System;
+ using System.Data.Common;
+ using System.ComponentModel;
+ using System.Collections;
+ using System.Globalization;
+ using System.Reflection;
+
+#if !PLATFORM_COMPACTFRAMEWORK
+ using System.ComponentModel.Design;
+
+ /// <summary>
+ /// Sqlite implementation of DbConnectionStringBuilder.
+ /// </summary>
+ [DefaultProperty("DataSource")]
+ [DefaultMember("Item")]
+ public sealed class SqliteConnectionStringBuilder : DbConnectionStringBuilder
+ {
+ /// <summary>
+ /// Properties of this class
+ /// </summary>
+ private Hashtable _properties;
+
+ /// <overloads>
+ /// Constructs a new instance of the class
+ /// </overloads>
+ /// <summary>
+ /// Default constructor
+ /// </summary>
+ public SqliteConnectionStringBuilder()
+ {
+ Initialize(null);
+ }
+
+ /// <summary>
+ /// Constructs a new instance of the class using the specified connection string.
+ /// </summary>
+ /// <param name="connectionString">The connection string to parse</param>
+ public SqliteConnectionStringBuilder(string connectionString)
+ {
+ Initialize(connectionString);
+ }
+
+ /// <summary>
+ /// Private initializer, which assigns the connection string and resets the builder
+ /// </summary>
+ /// <param name="cnnString">The connection string to assign</param>
+ private void Initialize(string cnnString)
+ {
+ _properties = new Hashtable();
+ base.GetProperties(_properties);
+
+ if (String.IsNullOrEmpty(cnnString) == false)
+ ConnectionString = cnnString;
+ }
+
+ /// <summary>
+ /// Gets/Sets the default version of the Sqlite engine to instantiate. Currently the only valid value is 3, indicating version 3 of the sqlite library.
+ /// </summary>
+ [Browsable(true)]
+ [DefaultValue(3)]
+ public int Version
+ {
+ get
+ {
+ if (ContainsKey("Version") == false) return 3;
+
+ return Convert.ToInt32(this["Version"], CultureInfo.CurrentCulture);
+ }
+ set
+ {
+ if (value != 3)
+ throw new NotSupportedException();
+
+ this["Version"] = value;
+ }
+ }
+
+ /// <summary>
+ /// Gets/Sets the synchronous mode of the connection string. Default is "Normal".
+ /// </summary>
+ [DisplayName("Synchronous")]
+ [Browsable(true)]
+ [DefaultValue(SynchronizationModes.Normal)]
+ public SynchronizationModes SyncMode
+ {
+ get
+ {
+ return (SynchronizationModes)TypeDescriptor.GetConverter(typeof(SynchronizationModes)).ConvertFrom(this["Synchronous"]);
+ }
+ set
+ {
+ this["Synchronous"] = value;
+ }
+ }
+
+ /// <summary>
+ /// Gets/Sets the encoding for the connection string. The default is "False" which indicates UTF-8 encoding.
+ /// </summary>
+ [Browsable(true)]
+ [DefaultValue(false)]
+ public bool UseUTF16Encoding
+ {
+ get
+ {
+ return Convert.ToBoolean(this["UseUTF16Encoding"], CultureInfo.CurrentCulture);
+ }
+ set
+ {
+ this["UseUTF16Encoding"] = value;
+ }
+ }
+
+ /// <summary>
+ /// Gets/Sets the filename to open on the connection string.
+ /// </summary>
+ [DisplayName("Data Source")]
+ [Browsable(true)]
+ public string DataSource
+ {
+ get
+ {
+ if (ContainsKey("Data Source") == false) return "";
+
+ return this["Data Source"].ToString();
+ }
+ set
+ {
+ this["Data Source"] = value;
+ }
+ }
+
+#region Mono-specific
+ /// <summary>
+ /// Gets/Sets the filename to open on the connection string (Mono-specific, uses DataSource).
+ /// </summary>
+ [DisplayName("Data Source")]
+ [Browsable(true)]
+ public string Uri
+ {
+ get
+ {
+ return DataSource;
+ }
+ set
+ {
+ DataSource = value;
+ }
+ }
+#endregion
+
+ /// <summary>
+ /// Determines whether or not the connection will automatically participate
+ /// in the current distributed transaction (if one exists)
+ /// </summary>
+ [DisplayName("Automatic Enlistment")]
+ [Browsable(true)]
+ [DefaultValue(true)]
+ public bool Enlist
+ {
+ get
+ {
+ if (ContainsKey("Enlist") == false) return true;
+
+ return (this["Enlist"].ToString() == "Y");
+ }
+ set
+ {
+ this["Enlist"] = (value == true) ? "Y" : "N";
+ }
+ }
+ /// <summary>
+ /// Gets/sets the database encryption password
+ /// </summary>
+ [Browsable(true)]
+ [PasswordPropertyText(true)]
+ public string Password
+ {
+ get
+ {
+ if (ContainsKey("Password") == false) return "";
+
+ return this["Password"].ToString();
+ }
+ set
+ {
+ this["Password"] = value;
+ }
+ }
+
+ /// <summary>
+ /// Gets/Sets the page size for the connection.
+ /// </summary>
+ [DisplayName("Page Size")]
+ [Browsable(true)]
+ [DefaultValue(1024)]
+ public int PageSize
+ {
+ get
+ {
+ if (ContainsKey("Page Size") == false) return 1024;
+ return Convert.ToInt32(this["Page Size"], CultureInfo.InvariantCulture);
+ }
+ set
+ {
+ this["Page Size"] = value;
+ }
+ }
+
+ /// <summary>
+ /// Gets/Sets the cache size for the connection.
+ /// </summary>
+ [DisplayName("Cache Size")]
+ [Browsable(true)]
+ [DefaultValue(2000)]
+ public int CacheSize
+ {
+ get
+ {
+ if (ContainsKey("Cache Size") == false) return 2000;
+ return Convert.ToInt32(this["Cache Size"], CultureInfo.InvariantCulture);
+ }
+ set
+ {
+ this["Cache Size"] = value;
+ }
+ }
+
+ /// <summary>
+ /// Gets/Sets the datetime format for the connection.
+ /// </summary>
+ [Browsable(true)]
+ [DefaultValue(SqliteDateFormats.ISO8601)]
+ public SqliteDateFormats DateTimeFormat
+ {
+ get
+ {
+ if (ContainsKey("DateTimeFormat") == false) return SqliteDateFormats.ISO8601;
+
+ return (SqliteDateFormats)TypeDescriptor.GetConverter(typeof(SqliteDateFormats)).ConvertFrom(this["DateTimeFormat"]);
+ }
+ set
+ {
+ this["DateTimeFormat"] = value;
+ }
+ }
+
+ /// <summary>
+ /// Helper function for retrieving values from the connectionstring
+ /// </summary>
+ /// <param name="keyword">The keyword to retrieve settings for</param>
+ /// <param name="value">The resulting parameter value</param>
+ /// <returns>Returns true if the value was found and returned</returns>
+ public override bool TryGetValue(string keyword, out object value)
+ {
+ bool b = base.TryGetValue(keyword, out value);
+
+ if (!_properties.ContainsKey(keyword)) return b;
+
+ PropertyDescriptor pd = _properties[keyword] as PropertyDescriptor;
+
+ if (pd == null) return b;
+
+ if (b)
+ {
+ value = TypeDescriptor.GetConverter(pd.PropertyType).ConvertFrom(value);
+ }
+ else
+ {
+ DefaultValueAttribute att = pd.Attributes[typeof(DefaultValueAttribute)] as DefaultValueAttribute;
+ if (att != null)
+ {
+ value = att.Value;
+ b = true;
+ }
+ }
+ return b;
+ }
+ }
+#endif
+}
+#endif
diff --git a/lib/Hyena/src/Mono.Data.Sqlite/Mono.Data.Sqlite/SQLiteConvert.cs b/lib/Hyena/src/Mono.Data.Sqlite/Mono.Data.Sqlite/SQLiteConvert.cs
new file mode 100644
index 0000000..c168d44
--- /dev/null
+++ b/lib/Hyena/src/Mono.Data.Sqlite/Mono.Data.Sqlite/SQLiteConvert.cs
@@ -0,0 +1,641 @@
+//
+// Mono.Data.Sqlite.SQLiteConvert.cs
+//
+// Author(s):
+// Robert Simpson (robert at blackcastlesoft.com)
+//
+// Adapted and modified for the Mono Project by
+// Marek Habersack (grendello at gmail.com)
+//
+//
+// Copyright (C) 2006 Novell, Inc (http://www.novell.com)
+// Copyright (C) 2007 Marek Habersack
+//
+// Permission is hereby granted, free of charge, to any person obtaining
+// a copy of this software and associated documentation files (the
+// "Software"), to deal in the Software without restriction, including
+// without limitation the rights to use, copy, modify, merge, publish,
+// distribute, sublicense, and/or sell copies of the Software, and to
+// permit persons to whom the Software is furnished to do so, subject to
+// the following conditions:
+//
+// The above copyright notice and this permission notice shall be
+// included in all copies or substantial portions of the Software.
+//
+// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
+// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
+// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
+// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+//
+
+/********************************************************
+ * ADO.NET 2.0 Data Provider for Sqlite Version 3.X
+ * Written by Robert Simpson (robert at blackcastlesoft.com)
+ *
+ * Released to the public domain, use at your own risk!
+ ********************************************************/
+#if NET_2_0
+namespace Mono.Data.Sqlite
+{
+ using System;
+ using System.Data;
+ using System.Runtime.InteropServices;
+ using System.Collections.Generic;
+ using System.ComponentModel;
+ using System.Globalization;
+ using System.Text;
+
+#if !PLATFORM_COMPACTFRAMEWORK
+ using System.ComponentModel.Design;
+#endif
+
+ /// <summary>
+ /// Sqlite has very limited types, and is inherently text-based. The first 5 types below represent the sum of all types Sqlite
+ /// understands. The DateTime extension to the spec is for internal use only.
+ /// </summary>
+ public enum TypeAffinity
+ {
+ /// <summary>
+ /// Not used
+ /// </summary>
+ Uninitialized = 0,
+ /// <summary>
+ /// All integers in Sqlite default to Int64
+ /// </summary>
+ Int64 = 1,
+ /// <summary>
+ /// All floating point numbers in Sqlite default to double
+ /// </summary>
+ Double = 2,
+ /// <summary>
+ /// The default data type of Sqlite is text
+ /// </summary>
+ Text = 3,
+ /// <summary>
+ /// Typically blob types are only seen when returned from a function
+ /// </summary>
+ Blob = 4,
+ /// <summary>
+ /// Null types can be returned from functions
+ /// </summary>
+ Null = 5,
+ /// <summary>
+ /// Used internally by this provider
+ /// </summary>
+ DateTime = 10,
+ /// <summary>
+ /// Used internally
+ /// </summary>
+ None = 11,
+ }
+
+ /// <summary>
+ /// This implementation of Sqlite for ADO.NET can process date/time fields in databases in only one of two formats. Ticks and ISO8601.
+ /// Ticks is inherently more accurate, but less compatible with 3rd party tools that query the database, and renders the DateTime field
+ /// unreadable without post-processing.
+ /// ISO8601 is more compatible, readable, fully-processable, but less accurate as it doesn't provide time down to fractions of a second.
+ /// </summary>
+ public enum SqliteDateFormats
+ {
+ /// <summary>
+ /// Using ticks is more accurate but less compatible with other viewers and utilities that access your database.
+ /// </summary>
+ Ticks = 0,
+ /// <summary>
+ /// The default format for this provider.
+ /// </summary>
+ ISO8601 = 1,
+ }
+
+ /// <summary>
+ /// Struct used internally to determine the datatype of a column in a resultset
+ /// </summary>
+ internal class SqliteType
+ {
+ /// <summary>
+ /// The DbType of the column, or DbType.Object if it cannot be determined
+ /// </summary>
+ internal DbType Type;
+ /// <summary>
+ /// The affinity of a column, used for expressions or when Type is DbType.Object
+ /// </summary>
+ internal TypeAffinity Affinity;
+ }
+
+ /// <summary>
+ /// This base class provides datatype conversion services for the Sqlite provider.
+ /// </summary>
+ public abstract class SqliteConvert
+ {
+ /// <summary>
+ /// An array of ISO8601 datetime formats we support conversion from
+ /// </summary>
+ private static string[] _datetimeFormats = new string[] {
+ "yyyy-MM-dd HH:mm:ss.fffffff",
+ "yyyy-MM-dd HH:mm:ss",
+ "yyyy-MM-dd HH:mm",
+ "yyyyMMddHHmmss",
+ "yyyyMMddHHmm",
+ "yyyyMMddTHHmmssfffffff",
+ "yyyy-MM-dd",
+ "yy-MM-dd",
+ "yyyyMMdd",
+ "HH:mm:ss",
+ "HH:mm",
+ "THHmmss",
+ "THHmm",
+ "yyyy-MM-dd HH:mm:ss.fff",
+ "yyyy-MM-ddTHH:mm",
+ "yyyy-MM-ddTHH:mm:ss",
+ "yyyy-MM-ddTHH:mm:ss.fff",
+ "yyyy-MM-ddTHH:mm:ss.ffffff",
+ "HH:mm:ss.fff"
+ };
+
+ /// <summary>
+ /// An UTF-8 Encoding instance, so we can convert strings to and from UTF-8
+ /// </summary>
+ private Encoding _utf8 = new UTF8Encoding();
+ /// <summary>
+ /// The default DateTime format for this instance
+ /// </summary>
+ internal SqliteDateFormats _datetimeFormat;
+ /// <summary>
+ /// Initializes the conversion class
+ /// </summary>
+ /// <param name="fmt">The default date/time format to use for this instance</param>
+ internal SqliteConvert(SqliteDateFormats fmt)
+ {
+ _datetimeFormat = fmt;
+ }
+
+ #region UTF-8 Conversion Functions
+ /// <summary>
+ /// Converts a string to a UTF-8 encoded byte array sized to include a null-terminating character.
+ /// </summary>
+ /// <param name="sourceText">The string to convert to UTF-8</param>
+ /// <returns>A byte array containing the converted string plus an extra 0 terminating byte at the end of the array.</returns>
+ public byte[] ToUTF8(string sourceText)
+ {
+ Byte[] byteArray;
+ int nlen = _utf8.GetByteCount(sourceText) + 1;
+
+ byteArray = new byte[nlen];
+ nlen = _utf8.GetBytes(sourceText, 0, sourceText.Length, byteArray, 0);
+ byteArray[nlen] = 0;
+
+ return byteArray;
+ }
+
+ /// <summary>
+ /// Convert a DateTime to a UTF-8 encoded, zero-terminated byte array.
+ /// </summary>
+ /// <remarks>
+ /// This function is a convenience function, which first calls ToString() on the DateTime, and then calls ToUTF8() with the
+ /// string result.
+ /// </remarks>
+ /// <param name="dateTimeValue">The DateTime to convert.</param>
+ /// <returns>The UTF-8 encoded string, including a 0 terminating byte at the end of the array.</returns>
+ public byte[] ToUTF8(DateTime dateTimeValue)
+ {
+ return ToUTF8(ToString(dateTimeValue));
+ }
+
+ /// <summary>
+ /// Converts a UTF-8 encoded IntPtr of the specified length into a .NET string
+ /// </summary>
+ /// <param name="nativestring">The pointer to the memory where the UTF-8 string is encoded</param>
+ /// <param name="nativestringlen">The number of bytes to decode</param>
+ /// <returns>A string containing the translated character(s)</returns>
+ public virtual string ToString(IntPtr nativestring)
+ {
+ return UTF8ToString(nativestring);
+ }
+
+ /// <summary>
+ /// Converts a UTF-8 encoded IntPtr of the specified length into a .NET string
+ /// </summary>
+ /// <param name="nativestring">The pointer to the memory where the UTF-8 string is encoded</param>
+ /// <param name="nativestringlen">The number of bytes to decode</param>
+ /// <returns>A string containing the translated character(s)</returns>
+ public virtual string UTF8ToString(IntPtr nativestring)
+ {
+ if (nativestring == IntPtr.Zero)
+ return null;
+
+ // This assumes a single byte terminates the string.
+
+ int len = 0;
+ while (Marshal.ReadByte (nativestring, len) != 0)
+ checked {++len;}
+
+ unsafe {
+ string s = new string ((sbyte*) nativestring, 0, len, _utf8);
+ len = s.Length;
+ while (len > 0 && s [len-1] == 0)
+ --len;
+ if (len == s.Length)
+ return s;
+ return s.Substring (0, len);
+ }
+ }
+
+
+ #endregion
+
+ #region DateTime Conversion Functions
+ /// <summary>
+ /// Converts a string into a DateTime, using the current DateTimeFormat specified for the connection when it was opened.
+ /// </summary>
+ /// <remarks>
+ /// Acceptable ISO8601 DateTime formats are:
+ /// yyyy-MM-dd HH:mm:ss
+ /// yyyyMMddHHmmss
+ /// yyyyMMddTHHmmssfffffff
+ /// yyyy-MM-dd
+ /// yy-MM-dd
+ /// yyyyMMdd
+ /// HH:mm:ss
+ /// THHmmss
+ /// </remarks>
+ /// <param name="dateText">The string containing either a Tick value or an ISO8601-format string</param>
+ /// <returns>A DateTime value</returns>
+ public DateTime ToDateTime(string dateText)
+ {
+ switch (_datetimeFormat)
+ {
+ case SqliteDateFormats.Ticks:
+ return new DateTime(Convert.ToInt64(dateText, CultureInfo.InvariantCulture));
+ default:
+ return DateTime.ParseExact(dateText, _datetimeFormats, DateTimeFormatInfo.InvariantInfo, DateTimeStyles.None);
+ }
+ }
+
+ /// <summary>
+ /// Converts a DateTime to a string value, using the current DateTimeFormat specified for the connection when it was opened.
+ /// </summary>
+ /// <param name="dateValue">The DateTime value to convert</param>
+ /// <returns>Either a string consisting of the tick count for DateTimeFormat.Ticks, or a date/time in ISO8601 format.</returns>
+ public string ToString(DateTime dateValue)
+ {
+ switch (_datetimeFormat)
+ {
+ case SqliteDateFormats.Ticks:
+ return dateValue.Ticks.ToString(CultureInfo.InvariantCulture);
+ default:
+ return dateValue.ToString(_datetimeFormats[0], CultureInfo.InvariantCulture);
+ }
+ }
+
+ /// <summary>
+ /// Internal function to convert a UTF-8 encoded IntPtr of the specified length to a DateTime.
+ /// </summary>
+ /// <remarks>
+ /// This is a convenience function, which first calls ToString() on the IntPtr to convert it to a string, then calls
+ /// ToDateTime() on the string to return a DateTime.
+ /// </remarks>
+ /// <param name="ptr">A pointer to the UTF-8 encoded string</param>
+ /// <param name="len">The length in bytes of the string</param>
+ /// <returns>The parsed DateTime value</returns>
+ internal DateTime ToDateTime(IntPtr ptr)
+ {
+ return ToDateTime(ToString(ptr));
+ }
+ #endregion
+
+ /// <summary>
+ /// Smart method of splitting a string. Skips quoted elements, removes the quotes.
+ /// </summary>
+ /// <remarks>
+ /// This split function works somewhat like the String.Split() function in that it breaks apart a string into
+ /// pieces and returns the pieces as an array. The primary differences are:
+ /// <list type="bullet">
+ /// <item><description>Only one character can be provided as a separator character</description></item>
+ /// <item><description>Quoted text inside the string is skipped over when searching for the separator, and the quotes are removed.</description></item>
+ /// </list>
+ /// Thus, if splitting the following string looking for a comma:<br/>
+ /// One,Two, "Three, Four", Five<br/>
+ /// <br/>
+ /// The resulting array would contain<br/>
+ /// [0] One<br/>
+ /// [1] Two<br/>
+ /// [2] Three, Four<br/>
+ /// [3] Five<br/>
+ /// <br/>
+ /// Note that the leading and trailing spaces were removed from each item during the split.
+ /// </remarks>
+ /// <param name="source">Source string to split apart</param>
+ /// <param name="separator">Separator character</param>
+ /// <returns>A string array of the split up elements</returns>
+ public static string[] Split(string source, char separator)
+ {
+ char[] toks = new char[2] { '\"', separator };
+ char[] quot = new char[1] { '\"' };
+ int n = 0;
+ List<string> ls = new List<string>();
+ string s;
+
+ while (source.Length > 0)
+ {
+ n = source.IndexOfAny(toks, n);
+ if (n == -1) break;
+ if (source[n] == toks[0])
+ {
+ source = source.Remove(n, 1);
+ n = source.IndexOfAny(quot, n);
+ if (n == -1)
+ {
+ source = "\"" + source;
+ break;
+ }
+ source = source.Remove(n, 1);
+ }
+ else
+ {
+ s = source.Substring(0, n).Trim();
+ source = source.Substring(n + 1).Trim();
+ if (s.Length > 0) ls.Add(s);
+ n = 0;
+ }
+ }
+ if (source.Length > 0) ls.Add(source);
+
+ string[] ar = new string[ls.Count];
+ ls.CopyTo(ar, 0);
+
+ return ar;
+ }
+
+ #region Type Conversions
+ /// <summary>
+ /// Determines the data type of a column in a statement
+ /// </summary>
+ /// <param name="stmt">The statement to retrieve information for</param>
+ /// <param name="i">The column to retrieve type information on</param>
+ /// <returns>Returns a SqliteType struct</returns>
+ internal static SqliteType ColumnToType(SqliteStatement stmt, int i)
+ {
+ SqliteType typ = new SqliteType ();
+
+ typ.Type = TypeNameToDbType(stmt._sql.ColumnType(stmt, i, out typ.Affinity));
+
+ return typ;
+ }
+
+ /// <summary>
+ /// Converts a SqliteType to a .NET Type object
+ /// </summary>
+ /// <param name="t">The SqliteType to convert</param>
+ /// <returns>Returns a .NET Type object</returns>
+ internal static Type SqliteTypeToType(SqliteType t)
+ {
+ if (t.Type != DbType.Object)
+ return SqliteConvert.DbTypeToType(t.Type);
+
+ return _typeaffinities[(int)t.Affinity];
+ }
+
+ static Type[] _typeaffinities = {
+ null,
+ typeof(Int64),
+ typeof(Double),
+ typeof(string),
+ typeof(byte[]),
+ typeof(DBNull),
+ null,
+ null,
+ null,
+ null,
+ typeof(DateTime),
+ null,
+ };
+
+ /// <summary>
+ /// For a given intrinsic type, return a DbType
+ /// </summary>
+ /// <param name="typ">The native type to convert</param>
+ /// <returns>The corresponding (closest match) DbType</returns>
+ internal static DbType TypeToDbType(Type typ)
+ {
+ TypeCode tc = Type.GetTypeCode(typ);
+ if (tc == TypeCode.Object)
+ {
+ if (typ == typeof(byte[])) return DbType.Binary;
+ if (typ == typeof(Guid)) return DbType.Guid;
+ return DbType.String;
+ }
+ return _typetodbtype[(int)tc];
+ }
+
+ private static DbType[] _typetodbtype = {
+ DbType.Object,
+ DbType.Binary,
+ DbType.Object,
+ DbType.Boolean,
+ DbType.SByte,
+ DbType.SByte,
+ DbType.Byte,
+ DbType.Int16, // 7
+ DbType.UInt16,
+ DbType.Int32,
+ DbType.UInt32,
+ DbType.Int64, // 11
+ DbType.UInt64,
+ DbType.Single,
+ DbType.Double,
+ DbType.Decimal,
+ DbType.DateTime,
+ DbType.Object,
+ DbType.String,
+ };
+
+ /// <summary>
+ /// Returns the ColumnSize for the given DbType
+ /// </summary>
+ /// <param name="typ">The DbType to get the size of</param>
+ /// <returns></returns>
+ internal static int DbTypeToColumnSize(DbType typ)
+ {
+ return _dbtypetocolumnsize[(int)typ];
+ }
+
+ private static int[] _dbtypetocolumnsize = {
+ 2147483647, // 0
+ 2147483647, // 1
+ 1, // 2
+ 1, // 3
+ 8, // 4
+ 8, // 5
+ 8, // 6
+ 8, // 7
+ 8, // 8
+ 16, // 9
+ 2,
+ 4,
+ 8,
+ 2147483647,
+ 1,
+ 4,
+ 2147483647,
+ 8,
+ 2,
+ 4,
+ 8,
+ 8,
+ 2147483647,
+ 2147483647,
+ 2147483647,
+ 2147483647, // 25 (Xml)
+ };
+
+ /// <summary>
+ /// Convert a DbType to a Type
+ /// </summary>
+ /// <param name="typ">The DbType to convert from</param>
+ /// <returns>The closest-match .NET type</returns>
+ internal static Type DbTypeToType(DbType typ)
+ {
+ return _dbtypeToType[(int)typ];
+ }
+
+ private static Type[] _dbtypeToType = {
+ typeof(string), // 0
+ typeof(byte[]), // 1
+ typeof(byte), // 2
+ typeof(bool), // 3
+ typeof(decimal), // 4
+ typeof(DateTime), // 5
+ typeof(DateTime), // 6
+ typeof(decimal), // 7
+ typeof(double), // 8
+ typeof(Guid), // 9
+ typeof(Int16),
+ typeof(Int32),
+ typeof(Int64),
+ typeof(object),
+ typeof(sbyte),
+ typeof(float),
+ typeof(string),
+ typeof(DateTime),
+ typeof(UInt16),
+ typeof(UInt32),
+ typeof(UInt64),
+ typeof(double),
+ typeof(string),
+ typeof(string),
+ typeof(string),
+ typeof(string), // 25 (Xml)
+ };
+
+ /// <summary>
+ /// For a given type, return the closest-match Sqlite TypeAffinity, which only understands a very limited subset of types.
+ /// </summary>
+ /// <param name="typ">The type to evaluate</param>
+ /// <returns>The Sqlite type affinity for that type.</returns>
+ internal static TypeAffinity TypeToAffinity(Type typ)
+ {
+ TypeCode tc = Type.GetTypeCode(typ);
+ if (tc == TypeCode.Object)
+ {
+ if (typ == typeof(byte[]) || typ == typeof(Guid))
+ return TypeAffinity.Blob;
+ else
+ return TypeAffinity.Text;
+ }
+ return _typecodeAffinities[(int)tc];
+ }
+
+ private static TypeAffinity[] _typecodeAffinities = {
+ TypeAffinity.Null,
+ TypeAffinity.Blob,
+ TypeAffinity.Null,
+ TypeAffinity.Int64,
+ TypeAffinity.Int64,
+ TypeAffinity.Int64,
+ TypeAffinity.Int64,
+ TypeAffinity.Int64, // 7
+ TypeAffinity.Int64,
+ TypeAffinity.Int64,
+ TypeAffinity.Int64,
+ TypeAffinity.Int64, // 11
+ TypeAffinity.Int64,
+ TypeAffinity.Double,
+ TypeAffinity.Double,
+ TypeAffinity.Double,
+ TypeAffinity.DateTime,
+ TypeAffinity.Null,
+ TypeAffinity.Text,
+ };
+
+ /// <summary>
+ /// For a given type name, return a closest-match .NET type
+ /// </summary>
+ /// <param name="Name">The name of the type to match</param>
+ /// <returns>The .NET DBType the text evaluates to.</returns>
+ internal static DbType TypeNameToDbType(string Name)
+ {
+ if (String.IsNullOrEmpty(Name)) return DbType.Object;
+
+ DbType t;
+ if (_typeNames.TryGetValue(Name, out t)) {
+ return t;
+ } else if (_typeNames.TryGetValue (Name.ToUpperInvariant (), out t)) {
+ _typeNames[Name] = t;
+ return t;
+ }
+ return DbType.Object;
+ }
+ #endregion
+
+ // All the strings below must be uppercase
+ private static Dictionary<string, DbType> _typeNames = new Dictionary<string, DbType>() {
+ {"COUNTER", DbType.Int64},
+ {"AUTOINCREMENT", DbType.Int64},
+ {"IDENTITY", DbType.Int64},
+ {"LONGTEXT", DbType.String},
+ {"LONGCHAR", DbType.String},
+ {"LONGVARCHAR", DbType.String},
+ {"LONG", DbType.Int64},
+ {"TINYINT", DbType.Byte},
+ {"INTEGER", DbType.Int64},
+ {"INT", DbType.Int32},
+ {"VARCHAR", DbType.String},
+ {"NVARCHAR", DbType.String},
+ {"CHAR", DbType.String},
+ {"NCHAR", DbType.String},
+ {"TEXT", DbType.String},
+ {"NTEXT", DbType.String},
+ {"STRING", DbType.String},
+ {"DOUBLE", DbType.Double},
+ {"FLOAT", DbType.Double},
+ {"REAL", DbType.Single},
+ {"BIT", DbType.Boolean},
+ {"YESNO", DbType.Boolean},
+ {"LOGICAL", DbType.Boolean},
+ {"BOOL", DbType.Boolean},
+ {"NUMERIC", DbType.Decimal},
+ {"DECIMAL", DbType.Decimal},
+ {"MONEY", DbType.Decimal},
+ {"CURRENCY", DbType.Decimal},
+ {"TIME", DbType.DateTime},
+ {"DATE", DbType.DateTime},
+ {"SMALLDATE", DbType.DateTime},
+ {"BLOB", DbType.Binary},
+ {"BINARY", DbType.Binary},
+ {"VARBINARY", DbType.Binary},
+ {"IMAGE", DbType.Binary},
+ {"GENERAL", DbType.Binary},
+ {"OLEOBJECT", DbType.Binary},
+ {"GUID", DbType.Guid},
+ {"UNIQUEIDENTIFIER", DbType.Guid},
+ {"MEMO", DbType.String},
+ {"NOTE", DbType.String},
+ {"SMALLINT", DbType.Int16},
+ {"BIGINT", DbType.Int64},
+ };
+ }
+}
+#endif
diff --git a/lib/Hyena/src/Mono.Data.Sqlite/Mono.Data.Sqlite/SQLiteDataAdapter.cs b/lib/Hyena/src/Mono.Data.Sqlite/Mono.Data.Sqlite/SQLiteDataAdapter.cs
new file mode 100644
index 0000000..592f901
--- /dev/null
+++ b/lib/Hyena/src/Mono.Data.Sqlite/Mono.Data.Sqlite/SQLiteDataAdapter.cs
@@ -0,0 +1,192 @@
+//
+// Mono.Data.Sqlite.SQLiteDataAdapter.cs
+//
+// Author(s):
+// Robert Simpson (robert at blackcastlesoft.com)
+//
+// Adapted and modified for the Mono Project by
+// Marek Habersack (grendello at gmail.com)
+//
+//
+// Copyright (C) 2006 Novell, Inc (http://www.novell.com)
+// Copyright (C) 2007 Marek Habersack
+//
+// Permission is hereby granted, free of charge, to any person obtaining
+// a copy of this software and associated documentation files (the
+// "Software"), to deal in the Software without restriction, including
+// without limitation the rights to use, copy, modify, merge, publish,
+// distribute, sublicense, and/or sell copies of the Software, and to
+// permit persons to whom the Software is furnished to do so, subject to
+// the following conditions:
+//
+// The above copyright notice and this permission notice shall be
+// included in all copies or substantial portions of the Software.
+//
+// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
+// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
+// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
+// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+//
+
+/********************************************************
+ * ADO.NET 2.0 Data Provider for Sqlite Version 3.X
+ * Written by Robert Simpson (robert at blackcastlesoft.com)
+ *
+ * Released to the public domain, use at your own risk!
+ ********************************************************/
+#if NET_2_0
+namespace Mono.Data.Sqlite
+{
+ using System;
+ using System.Data;
+ using System.Data.Common;
+ using System.ComponentModel;
+
+ /// <summary>
+ /// Sqlite implementation of DbDataAdapter.
+ /// </summary>
+#if !PLATFORM_COMPACTFRAMEWORK
+ [DefaultEvent("RowUpdated")]
+ [ToolboxItem("Sqlite.Designer.SqliteDataAdapterToolboxItem, Sqlite.Designer, Version=1.0.31.0, Culture=neutral, PublicKeyToken=db937bc2d44ff139")]
+ [Designer("Microsoft.VSDesigner.Data.VS.SqlDataAdapterDesigner, Microsoft.VSDesigner, Version=8.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a")]
+#endif
+ public sealed class SqliteDataAdapter : DbDataAdapter
+ {
+ private static object _updatingEventPH = new object();
+ private static object _updatedEventPH = new object();
+
+ /// <overloads>
+ /// This class is just a shell around the DbDataAdapter. Nothing from DbDataAdapter is overridden here, just a few constructors are defined.
+ /// </overloads>
+ /// <summary>
+ /// Default constructor.
+ /// </summary>
+ public SqliteDataAdapter()
+ {
+ }
+
+ /// <summary>
+ /// Constructs a data adapter using the specified select command.
+ /// </summary>
+ /// <param name="cmd">The select command to associate with the adapter.</param>
+ public SqliteDataAdapter(SqliteCommand cmd)
+ {
+ SelectCommand = cmd;
+ }
+
+ /// <summary>
+ /// Constructs a data adapter with the supplied select command text and associated with the specified connection.
+ /// </summary>
+ /// <param name="commandText">The select command text to associate with the data adapter.</param>
+ /// <param name="connection">The connection to associate with the select command.</param>
+ public SqliteDataAdapter(string commandText, SqliteConnection connection)
+ {
+ SelectCommand = new SqliteCommand(commandText, connection);
+ }
+
+ /// <summary>
+ /// Constructs a data adapter with the specified select command text, and using the specified database connection string.
+ /// </summary>
+ /// <param name="commandText">The select command text to use to construct a select command.</param>
+ /// <param name="connectionString">A connection string suitable for passing to a new SqliteConnection, which is associated with the select command.</param>
+ public SqliteDataAdapter(string commandText, string connectionString)
+ {
+ SqliteConnection cnn = new SqliteConnection(connectionString);
+ SelectCommand = new SqliteCommand(commandText, cnn);
+ }
+
+ /// <summary>
+ /// Row updating event handler
+ /// </summary>
+ public event EventHandler<RowUpdatingEventArgs> RowUpdating
+ {
+ add { base.Events.AddHandler(_updatingEventPH, value); }
+ remove { base.Events.RemoveHandler(_updatingEventPH, value); }
+ }
+
+ /// <summary>
+ /// Row updated event handler
+ /// </summary>
+ public event EventHandler<RowUpdatedEventArgs> RowUpdated
+ {
+ add { base.Events.AddHandler(_updatedEventPH, value); }
+ remove { base.Events.RemoveHandler(_updatedEventPH, value); }
+ }
+
+ /// <summary>
+ /// Raised by the underlying DbDataAdapter when a row is being updated
+ /// </summary>
+ /// <param name="value">The event's specifics</param>
+ protected override void OnRowUpdating(RowUpdatingEventArgs value)
+ {
+ EventHandler<RowUpdatingEventArgs> handler = base.Events[_updatingEventPH] as EventHandler<RowUpdatingEventArgs>;
+
+ if (handler != null)
+ handler(this, value);
+ }
+
+ /// <summary>
+ /// Raised by DbDataAdapter after a row is updated
+ /// </summary>
+ /// <param name="value">The event's specifics</param>
+ protected override void OnRowUpdated(RowUpdatedEventArgs value)
+ {
+ EventHandler<RowUpdatedEventArgs> handler = base.Events[_updatedEventPH] as EventHandler<RowUpdatedEventArgs>;
+
+ if (handler != null)
+ handler(this, value);
+ }
+
+ /// <summary>
+ /// Gets/sets the select command for this DataAdapter
+ /// </summary>
+#if !PLATFORM_COMPACTFRAMEWORK
+ [DefaultValue((string)null), Editor("Microsoft.VSDesigner.Data.Design.DBCommandEditor, Microsoft.VSDesigner, Version=8.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a", "System.Drawing.Design.UITypeEditor, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a")]
+#endif
+ public new SqliteCommand SelectCommand
+ {
+ get { return (SqliteCommand)base.SelectCommand; }
+ set { base.SelectCommand = value; }
+ }
+
+ /// <summary>
+ /// Gets/sets the insert command for this DataAdapter
+ /// </summary>
+#if !PLATFORM_COMPACTFRAMEWORK
+ [DefaultValue((string)null), Editor("Microsoft.VSDesigner.Data.Design.DBCommandEditor, Microsoft.VSDesigner, Version=8.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a", "System.Drawing.Design.UITypeEditor, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a")]
+#endif
+ public new SqliteCommand InsertCommand
+ {
+ get { return (SqliteCommand)base.InsertCommand; }
+ set { base.InsertCommand = value; }
+ }
+
+ /// <summary>
+ /// Gets/sets the update command for this DataAdapter
+ /// </summary>
+#if !PLATFORM_COMPACTFRAMEWORK
+ [DefaultValue((string)null), Editor("Microsoft.VSDesigner.Data.Design.DBCommandEditor, Microsoft.VSDesigner, Version=8.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a", "System.Drawing.Design.UITypeEditor, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a")]
+#endif
+ public new SqliteCommand UpdateCommand
+ {
+ get { return (SqliteCommand)base.UpdateCommand; }
+ set { base.UpdateCommand = value; }
+ }
+
+ /// <summary>
+ /// Gets/sets the delete command for this DataAdapter
+ /// </summary>
+#if !PLATFORM_COMPACTFRAMEWORK
+ [DefaultValue((string)null), Editor("Microsoft.VSDesigner.Data.Design.DBCommandEditor, Microsoft.VSDesigner, Version=8.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a", "System.Drawing.Design.UITypeEditor, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a")]
+#endif
+ public new SqliteCommand DeleteCommand
+ {
+ get { return (SqliteCommand)base.DeleteCommand; }
+ set { base.DeleteCommand = value; }
+ }
+ }
+}
+#endif
diff --git a/lib/Hyena/src/Mono.Data.Sqlite/Mono.Data.Sqlite/SQLiteDataReader.cs b/lib/Hyena/src/Mono.Data.Sqlite/Mono.Data.Sqlite/SQLiteDataReader.cs
new file mode 100644
index 0000000..3a38363
--- /dev/null
+++ b/lib/Hyena/src/Mono.Data.Sqlite/Mono.Data.Sqlite/SQLiteDataReader.cs
@@ -0,0 +1,1079 @@
+//
+// Mono.Data.Sqlite.SQLiteDataReader.cs
+//
+// Author(s):
+// Robert Simpson (robert at blackcastlesoft.com)
+//
+// Adapted and modified for the Mono Project by
+// Marek Habersack (grendello at gmail.com)
+//
+//
+// Copyright (C) 2006 Novell, Inc (http://www.novell.com)
+// Copyright (C) 2007 Marek Habersack
+//
+// Permission is hereby granted, free of charge, to any person obtaining
+// a copy of this software and associated documentation files (the
+// "Software"), to deal in the Software without restriction, including
+// without limitation the rights to use, copy, modify, merge, publish,
+// distribute, sublicense, and/or sell copies of the Software, and to
+// permit persons to whom the Software is furnished to do so, subject to
+// the following conditions:
+//
+// The above copyright notice and this permission notice shall be
+// included in all copies or substantial portions of the Software.
+//
+// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
+// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
+// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
+// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+//
+
+/********************************************************
+ * ADO.NET 2.0 Data Provider for Sqlite Version 3.X
+ * Written by Robert Simpson (robert at blackcastlesoft.com)
+ *
+ * Released to the public domain, use at your own risk!
+ ********************************************************/
+#if NET_2_0
+namespace Mono.Data.Sqlite
+{
+ using System;
+ using System.Data;
+ using System.Data.Common;
+ using System.Collections;
+ using System.Collections.Generic;
+ using System.Globalization;
+ using System.Reflection;
+
+ /// <summary>
+ /// Sqlite implementation of DbDataReader.
+ /// </summary>
+ public class SqliteDataReader : DbDataReader
+ {
+ /// <summary>
+ /// Underlying command this reader is attached to
+ /// </summary>
+ private SqliteCommand _command;
+ /// <summary>
+ /// Index of the current statement in the command being processed
+ /// </summary>
+ private int _activeStatementIndex;
+ /// <summary>
+ /// Current statement being Read()
+ /// </summary>
+ private SqliteStatement _activeStatement;
+ /// <summary>
+ /// State of the current statement being processed.
+ /// -1 = First Step() executed, so the first Read() will be ignored
+ /// 0 = Actively reading
+ /// 1 = Finished reading
+ /// 2 = Non-row-returning statement, no records
+ /// </summary>
+ private int _readingState;
+ /// <summary>
+ /// Number of records affected by the insert/update statements executed on the command
+ /// </summary>
+ private int _rowsAffected;
+ /// <summary>
+ /// Count of fields (columns) in the row-returning statement currently being processed
+ /// </summary>
+ private int _fieldCount;
+ /// <summary>
+ /// Datatypes of active fields (columns) in the current statement, used for type-restricting data
+ /// </summary>
+ private SqliteType[] _fieldTypeArray;
+
+ /// <summary>
+ /// The behavior of the datareader
+ /// </summary>
+ private CommandBehavior _commandBehavior;
+
+ /// <summary>
+ /// If set, then dispose of the command object when the reader is finished
+ /// </summary>
+ internal bool _disposeCommand;
+
+#if MONO_SUPPORT_KEYREADER
+ /// <summary>
+ /// An array of rowid's for the active statement if CommandBehavior.KeyInfo is specified
+ /// </summary>
+ private SqliteKeyReader _keyInfo;
+#endif
+
+ /// <summary>
+ /// Internal constructor, initializes the datareader and sets up to begin executing statements
+ /// </summary>
+ /// <param name="cmd">The SqliteCommand this data reader is for</param>
+ /// <param name="behave">The expected behavior of the data reader</param>
+ internal SqliteDataReader(SqliteCommand cmd, CommandBehavior behave)
+ {
+ _command = cmd;
+ _commandBehavior = behave;
+ _activeStatementIndex = -1;
+ _activeStatement = null;
+ _rowsAffected = -1;
+ _fieldCount = -1;
+
+ if (_command != null)
+ NextResult();
+ }
+
+ /// <summary>
+ /// Closes the datareader, potentially closing the connection as well if CommandBehavior.CloseConnection was specified.
+ /// </summary>
+ public override void Close()
+ {
+ if (_command != null)
+ {
+ while (NextResult())
+ {
+ }
+ _command.ClearDataReader();
+
+ // If the datareader's behavior includes closing the connection, then do so here.
+ if ((_commandBehavior & CommandBehavior.CloseConnection) != 0 && _command.Connection != null)
+ _command.Connection.Close();
+
+ if (_disposeCommand)
+ ((IDisposable)_command).Dispose();
+ }
+
+ _command = null;
+ _activeStatement = null;
+ _fieldTypeArray = null;
+
+#if MONO_SUPPORT_KEYREADER
+ if (_keyInfo != null)
+ {
+ _keyInfo.Dispose();
+ _keyInfo = null;
+ }
+#endif
+ }
+
+ /// <summary>
+ /// Disposes the datareader. Calls Close() to ensure everything is cleaned up.
+ /// </summary>
+ protected override void Dispose(bool disposing)
+ {
+ base.Dispose(disposing);
+ GC.SuppressFinalize(this);
+ }
+
+ /// <summary>
+ /// Throw an error if the datareader is closed
+ /// </summary>
+ private void CheckClosed()
+ {
+ if (_command == null)
+ throw new InvalidOperationException("DataReader has been closed");
+ }
+
+ /// <summary>
+ /// Throw an error if a row is not loaded
+ /// </summary>
+ private void CheckValidRow()
+ {
+ if (_readingState != 0)
+ throw new InvalidOperationException("No current row");
+ }
+
+ /// <summary>
+ /// Enumerator support
+ /// </summary>
+ /// <returns>Returns a DbEnumerator object.</returns>
+ public override System.Collections.IEnumerator GetEnumerator()
+ {
+ return new DbEnumerator(this);
+ }
+
+ /// <summary>
+ /// Not implemented. Returns 0
+ /// </summary>
+ public override int Depth
+ {
+ get
+ {
+ CheckClosed();
+ return 0;
+ }
+ }
+
+ /// <summary>
+ /// Returns the number of columns in the current resultset
+ /// </summary>
+ public override int FieldCount
+ {
+ get
+ {
+ CheckClosed();
+#if MONO_SUPPORT_KEYREADER
+ if (_keyInfo == null)
+ return _fieldCount;
+
+ return _fieldCount + _keyInfo.Count;
+#else
+ return _fieldCount;
+#endif
+ }
+ }
+
+ /// <summary>
+ /// Returns the number of visible fielsd in the current resultset
+ /// </summary>
+ public override int VisibleFieldCount
+ {
+ get
+ {
+ CheckClosed();
+ return _fieldCount;
+ }
+ }
+
+ /// <summary>
+ /// Sqlite is inherently un-typed. All datatypes in Sqlite are natively strings. The definition of the columns of a table
+ /// and the affinity of returned types are all we have to go on to type-restrict data in the reader.
+ ///
+ /// This function attempts to verify that the type of data being requested of a column matches the datatype of the column. In
+ /// the case of columns that are not backed into a table definition, we attempt to match up the affinity of a column (int, double, string or blob)
+ /// to a set of known types that closely match that affinity. It's not an exact science, but its the best we can do.
+ /// </summary>
+ /// <returns>
+ /// This function throws an InvalidTypeCast() exception if the requested type doesn't match the column's definition or affinity.
+ /// </returns>
+ /// <param name="i">The index of the column to type-check</param>
+ /// <param name="typ">The type we want to get out of the column</param>
+ private TypeAffinity VerifyType(int i, DbType typ)
+ {
+ CheckClosed();
+ CheckValidRow();
+ TypeAffinity affinity;
+
+ affinity = _activeStatement._sql.ColumnAffinity(_activeStatement, i);
+
+ switch (affinity)
+ {
+ case TypeAffinity.Int64:
+ if (typ == DbType.Int16) return affinity;
+ if (typ == DbType.Int32) return affinity;
+ if (typ == DbType.Int64) return affinity;
+ if (typ == DbType.Boolean) return affinity;
+ if (typ == DbType.Byte) return affinity;
+ if (typ == DbType.DateTime && _command.Connection._sql._datetimeFormat == SqliteDateFormats.Ticks) return affinity;
+ if (typ == DbType.Single) return affinity;
+ if (typ == DbType.Double) return affinity;
+ if (typ == DbType.Decimal) return affinity;
+ break;
+ case TypeAffinity.Double:
+ if (typ == DbType.Single) return affinity;
+ if (typ == DbType.Double) return affinity;
+ if (typ == DbType.Decimal) return affinity;
+ break;
+ case TypeAffinity.Text:
+ if (typ == DbType.SByte) return affinity;
+ if (typ == DbType.String) return affinity;
+ if (typ == DbType.SByte) return affinity;
+ if (typ == DbType.Guid) return affinity;
+ if (typ == DbType.DateTime) return affinity;
+ break;
+ case TypeAffinity.Blob:
+ if (typ == DbType.Guid) return affinity;
+ if (typ == DbType.String) return affinity;
+ if (typ == DbType.Binary) return affinity;
+ break;
+ }
+
+ throw new InvalidCastException();
+ }
+
+ /// <summary>
+ /// Retrieves the column as a boolean value
+ /// </summary>
+ /// <param name="i">The index of the column to retrieve</param>
+ /// <returns>bool</returns>
+ public override bool GetBoolean(int i)
+ {
+#if MONO_SUPPORT_KEYREADER
+ if (i >= VisibleFieldCount && _keyInfo != null)
+ return _keyInfo.GetBoolean(i - VisibleFieldCount);
+#endif
+
+ VerifyType(i, DbType.Boolean);
+ return Convert.ToBoolean(GetValue(i), CultureInfo.CurrentCulture);
+ }
+
+ /// <summary>
+ /// Retrieves the column as a single byte value
+ /// </summary>
+ /// <param name="i">The index of the column to retrieve</param>
+ /// <returns>byte</returns>
+ public override byte GetByte(int i)
+ {
+#if MONO_SUPPORT_KEYREADER
+ if (i >= VisibleFieldCount && _keyInfo != null)
+ return _keyInfo.GetByte(i - VisibleFieldCount);
+#endif
+
+ VerifyType(i, DbType.Byte);
+ return Convert.ToByte(_activeStatement._sql.GetInt32(_activeStatement, i));
+ }
+
+ /// <summary>
+ /// Retrieves a column as an array of bytes (blob)
+ /// </summary>
+ /// <param name="i">The index of the column to retrieve</param>
+ /// <param name="fieldOffset">The zero-based index of where to begin reading the data</param>
+ /// <param name="buffer">The buffer to write the bytes into</param>
+ /// <param name="bufferoffset">The zero-based index of where to begin writing into the array</param>
+ /// <param name="length">The number of bytes to retrieve</param>
+ /// <returns>The actual number of bytes written into the array</returns>
+ /// <remarks>
+ /// To determine the number of bytes in the column, pass a null value for the buffer. The total length will be returned.
+ /// </remarks>
+ public override long GetBytes(int i, long fieldOffset, byte[] buffer, int bufferoffset, int length)
+ {
+#if MONO_SUPPORT_KEYREADER
+ if (i >= VisibleFieldCount && _keyInfo != null)
+ return _keyInfo.GetBytes(i - VisibleFieldCount, fieldOffset, buffer, bufferoffset, length);
+#endif
+
+ VerifyType(i, DbType.Binary);
+ return _activeStatement._sql.GetBytes(_activeStatement, i, (int)fieldOffset, buffer, bufferoffset, length);
+ }
+
+ /// <summary>
+ /// Returns the column as a single character
+ /// </summary>
+ /// <param name="i">The index of the column to retrieve</param>
+ /// <returns>char</returns>
+ public override char GetChar(int i)
+ {
+#if MONO_SUPPORT_KEYREADER
+ if (i >= VisibleFieldCount && _keyInfo != null)
+ return _keyInfo.GetChar(i - VisibleFieldCount);
+#endif
+
+ VerifyType(i, DbType.SByte);
+ return Convert.ToChar(_activeStatement._sql.GetInt32(_activeStatement, i));
+ }
+
+ /// <summary>
+ /// Retrieves a column as an array of chars (blob)
+ /// </summary>
+ /// <param name="i">The index of the column to retrieve</param>
+ /// <param name="fieldoffset">The zero-based index of where to begin reading the data</param>
+ /// <param name="buffer">The buffer to write the characters into</param>
+ /// <param name="bufferoffset">The zero-based index of where to begin writing into the array</param>
+ /// <param name="length">The number of bytes to retrieve</param>
+ /// <returns>The actual number of characters written into the array</returns>
+ /// <remarks>
+ /// To determine the number of characters in the column, pass a null value for the buffer. The total length will be returned.
+ /// </remarks>
+ public override long GetChars(int i, long fieldoffset, char[] buffer, int bufferoffset, int length)
+ {
+#if MONO_SUPPORT_KEYREADER
+ if (i >= VisibleFieldCount && _keyInfo != null)
+ return _keyInfo.GetChars(i - VisibleFieldCount, fieldoffset, buffer, bufferoffset, length);
+#endif
+
+ VerifyType(i, DbType.String);
+ return _activeStatement._sql.GetChars(_activeStatement, i, (int)fieldoffset, buffer, bufferoffset, length);
+ }
+
+ /// <summary>
+ /// Retrieves the name of the back-end datatype of the column
+ /// </summary>
+ /// <param name="i">The index of the column to retrieve</param>
+ /// <returns>string</returns>
+ public override string GetDataTypeName(int i)
+ {
+ CheckClosed();
+
+#if MONO_SUPPORT_KEYREADER
+ if (i >= VisibleFieldCount && _keyInfo != null)
+ return _keyInfo.GetDataTypeName(i - VisibleFieldCount);
+#endif
+
+ SqliteType typ = GetSqliteType(i);
+ if (typ.Type == DbType.Object) return SqliteConvert.SqliteTypeToType(typ).Name;
+ return _activeStatement._sql.ColumnType(_activeStatement, i, out typ.Affinity);
+ }
+
+ /// <summary>
+ /// Retrieve the column as a date/time value
+ /// </summary>
+ /// <param name="i">The index of the column to retrieve</param>
+ /// <returns>DateTime</returns>
+ public override DateTime GetDateTime(int i)
+ {
+#if MONO_SUPPORT_KEYREADER
+ if (i >= VisibleFieldCount && _keyInfo != null)
+ return _keyInfo.GetDateTime(i - VisibleFieldCount);
+#endif
+
+ VerifyType(i, DbType.DateTime);
+ return _activeStatement._sql.GetDateTime(_activeStatement, i);
+ }
+
+ /// <summary>
+ /// Retrieve the column as a decimal value
+ /// </summary>
+ /// <param name="i">The index of the column to retrieve</param>
+ /// <returns>decimal</returns>
+ public override decimal GetDecimal(int i)
+ {
+#if MONO_SUPPORT_KEYREADER
+ if (i >= VisibleFieldCount && _keyInfo != null)
+ return _keyInfo.GetDecimal(i - VisibleFieldCount);
+#endif
+
+ VerifyType(i, DbType.Decimal);
+ return Convert.ToDecimal(_activeStatement._sql.GetDouble(_activeStatement, i));
+ }
+
+ /// <summary>
+ /// Returns the column as a double
+ /// </summary>
+ /// <param name="i">The index of the column to retrieve</param>
+ /// <returns>double</returns>
+ public override double GetDouble(int i)
+ {
+#if MONO_SUPPORT_KEYREADER
+ if (i >= VisibleFieldCount && _keyInfo != null)
+ return _keyInfo.GetDouble(i - VisibleFieldCount);
+#endif
+
+ VerifyType(i, DbType.Double);
+ return _activeStatement._sql.GetDouble(_activeStatement, i);
+ }
+
+ /// <summary>
+ /// Returns the .NET type of a given column
+ /// </summary>
+ /// <param name="i">The index of the column to retrieve</param>
+ /// <returns>Type</returns>
+ public override Type GetFieldType(int i)
+ {
+ CheckClosed();
+
+#if MONO_SUPPORT_KEYREADER
+ if (i >= VisibleFieldCount && _keyInfo != null)
+ return _keyInfo.GetFieldType(i - VisibleFieldCount);
+#endif
+
+ return SqliteConvert.SqliteTypeToType(GetSqliteType(i));
+ }
+
+ /// <summary>
+ /// Returns a column as a float value
+ /// </summary>
+ /// <param name="i">The index of the column to retrieve</param>
+ /// <returns>float</returns>
+ public override float GetFloat(int i)
+ {
+#if MONO_SUPPORT_KEYREADER
+ if (i >= VisibleFieldCount && _keyInfo != null)
+ return _keyInfo.GetFloat(i - VisibleFieldCount);
+#endif
+
+ VerifyType(i, DbType.Single);
+ return Convert.ToSingle(_activeStatement._sql.GetDouble(_activeStatement, i));
+ }
+
+ /// <summary>
+ /// Returns the column as a Guid
+ /// </summary>
+ /// <param name="i">The index of the column to retrieve</param>
+ /// <returns>Guid</returns>
+ public override Guid GetGuid(int i)
+ {
+#if MONO_SUPPORT_KEYREADER
+ if (i >= VisibleFieldCount && _keyInfo != null)
+ return _keyInfo.GetGuid(i - VisibleFieldCount);
+#endif
+
+ TypeAffinity affinity = VerifyType(i, DbType.Guid);
+ if (affinity == TypeAffinity.Blob)
+ {
+ byte[] buffer = new byte[16];
+ _activeStatement._sql.GetBytes(_activeStatement, i, 0, buffer, 0, 16);
+ return new Guid(buffer);
+ }
+ else
+ return new Guid(_activeStatement._sql.GetText(_activeStatement, i));
+ }
+
+ /// <summary>
+ /// Returns the column as a short
+ /// </summary>
+ /// <param name="i">The index of the column to retrieve</param>
+ /// <returns>Int16</returns>
+ public override Int16 GetInt16(int i)
+ {
+#if MONO_SUPPORT_KEYREADER
+ if (i >= VisibleFieldCount && _keyInfo != null)
+ return _keyInfo.GetInt16(i - VisibleFieldCount);
+#endif
+
+ VerifyType(i, DbType.Int16);
+ return Convert.ToInt16(_activeStatement._sql.GetInt32(_activeStatement, i));
+ }
+
+ /// <summary>
+ /// Retrieves the column as an int
+ /// </summary>
+ /// <param name="i">The index of the column to retrieve</param>
+ /// <returns>Int32</returns>
+ public override Int32 GetInt32(int i)
+ {
+#if MONO_SUPPORT_KEYREADER
+ if (i >= VisibleFieldCount && _keyInfo != null)
+ return _keyInfo.GetInt32(i - VisibleFieldCount);
+#endif
+
+ VerifyType(i, DbType.Int32);
+ return _activeStatement._sql.GetInt32(_activeStatement, i);
+ }
+
+ /// <summary>
+ /// Retrieves the column as a long
+ /// </summary>
+ /// <param name="i">The index of the column to retrieve</param>
+ /// <returns>Int64</returns>
+ public override Int64 GetInt64(int i)
+ {
+#if MONO_SUPPORT_KEYREADER
+ if (i >= VisibleFieldCount && _keyInfo != null)
+ return _keyInfo.GetInt64(i - VisibleFieldCount);
+#endif
+
+ VerifyType(i, DbType.Int64);
+ return _activeStatement._sql.GetInt64(_activeStatement, i);
+ }
+
+ /// <summary>
+ /// Retrieves the name of the column
+ /// </summary>
+ /// <param name="i">The index of the column to retrieve</param>
+ /// <returns>string</returns>
+ public override string GetName(int i)
+ {
+ CheckClosed();
+#if MONO_SUPPORT_KEYREADER
+ if (i >= VisibleFieldCount && _keyInfo != null)
+ return _keyInfo.GetName(i - VisibleFieldCount);
+#endif
+
+ return _activeStatement._sql.ColumnName(_activeStatement, i);
+ }
+
+ /// <summary>
+ /// Retrieves the i of a column, given its name
+ /// </summary>
+ /// <param name="name">The name of the column to retrieve</param>
+ /// <returns>The int i of the column</returns>
+ public override int GetOrdinal(string name)
+ {
+ CheckClosed();
+ int r = _activeStatement._sql.ColumnIndex(_activeStatement, name);
+#if MONO_SUPPORT_KEYREADER
+ if (r == -1 && _keyInfo != null)
+ {
+ r = _keyInfo.GetOrdinal(name);
+ if (r > -1) r += VisibleFieldCount;
+ }
+#endif
+
+ return r;
+ }
+
+ /// <summary>
+ /// Schema information in Sqlite is difficult to map into .NET conventions, so a lot of work must be done
+ /// to gather the necessary information so it can be represented in an ADO.NET manner.
+ /// </summary>
+ /// <returns>Returns a DataTable containing the schema information for the active SELECT statement being processed.</returns>
+ public override DataTable GetSchemaTable()
+ {
+ return GetSchemaTable(true, false);
+ }
+
+ internal DataTable GetSchemaTable(bool wantUniqueInfo, bool wantDefaultValue)
+ {
+ CheckClosed();
+
+ DataTable tbl = new DataTable("SchemaTable");
+ DataTable tblIndexes = null;
+ DataTable tblIndexColumns;
+ DataRow row;
+ string temp;
+ string strCatalog = "";
+ string strTable = "";
+ string strColumn = "";
+
+ tbl.Locale = CultureInfo.InvariantCulture;
+ tbl.Columns.Add(SchemaTableColumn.ColumnName, typeof(String));
+ tbl.Columns.Add(SchemaTableColumn.ColumnOrdinal, typeof(int));
+ tbl.Columns.Add(SchemaTableColumn.ColumnSize, typeof(int));
+ tbl.Columns.Add(SchemaTableColumn.NumericPrecision, typeof(short));
+ tbl.Columns.Add(SchemaTableColumn.NumericScale, typeof(short));
+ tbl.Columns.Add(SchemaTableColumn.IsUnique, typeof(Boolean));
+ tbl.Columns.Add(SchemaTableColumn.IsKey, typeof(Boolean));
+ tbl.Columns.Add(SchemaTableOptionalColumn.BaseServerName, typeof(string));
+ tbl.Columns.Add(SchemaTableOptionalColumn.BaseCatalogName, typeof(String));
+ tbl.Columns.Add(SchemaTableColumn.BaseColumnName, typeof(String));
+ tbl.Columns.Add(SchemaTableColumn.BaseSchemaName, typeof(String));
+ tbl.Columns.Add(SchemaTableColumn.BaseTableName, typeof(String));
+ tbl.Columns.Add(SchemaTableColumn.DataType, typeof(Type));
+ tbl.Columns.Add(SchemaTableColumn.AllowDBNull, typeof(Boolean));
+ tbl.Columns.Add(SchemaTableColumn.ProviderType, typeof(int));
+ tbl.Columns.Add(SchemaTableColumn.IsAliased, typeof(Boolean));
+ tbl.Columns.Add(SchemaTableColumn.IsExpression, typeof(Boolean));
+ tbl.Columns.Add(SchemaTableOptionalColumn.IsAutoIncrement, typeof(Boolean));
+ tbl.Columns.Add(SchemaTableOptionalColumn.IsRowVersion, typeof(Boolean));
+ tbl.Columns.Add(SchemaTableOptionalColumn.IsHidden, typeof(Boolean));
+ tbl.Columns.Add(SchemaTableColumn.IsLong, typeof(Boolean));
+ tbl.Columns.Add(SchemaTableOptionalColumn.IsReadOnly, typeof(Boolean));
+ tbl.Columns.Add(SchemaTableOptionalColumn.ProviderSpecificDataType, typeof(Type));
+ tbl.Columns.Add(SchemaTableOptionalColumn.DefaultValue, typeof(object));
+ tbl.Columns.Add("DataTypeName", typeof(string));
+
+ tbl.BeginLoadData();
+
+ for (int n = 0; n < _fieldCount; n++)
+ {
+ row = tbl.NewRow();
+
+ // Default settings for the column
+ row[SchemaTableColumn.ColumnName] = GetName(n);
+ row[SchemaTableColumn.ColumnOrdinal] = n;
+ row[SchemaTableColumn.ColumnSize] = SqliteConvert.DbTypeToColumnSize(GetSqliteType(n).Type);
+ row[SchemaTableColumn.NumericPrecision] = 255;
+ row[SchemaTableColumn.NumericScale] = 255;
+ row[SchemaTableColumn.ProviderType] = GetSqliteType(n).Type;
+ row[SchemaTableColumn.IsLong] = (GetSqliteType(n).Type == DbType.Binary);
+ row[SchemaTableColumn.AllowDBNull] = true;
+ row[SchemaTableOptionalColumn.IsReadOnly] = false;
+ row[SchemaTableOptionalColumn.IsRowVersion] = false;
+ row[SchemaTableColumn.IsUnique] = false;
+ row[SchemaTableColumn.IsKey] = false;
+ row[SchemaTableOptionalColumn.IsAutoIncrement] = false;
+ row[SchemaTableOptionalColumn.IsReadOnly] = false;
+ row[SchemaTableColumn.DataType] = GetFieldType(n);
+ row[SchemaTableOptionalColumn.IsHidden] = false;
+
+ strColumn = _command.Connection._sql.ColumnOriginalName(_activeStatement, n);
+ if (String.IsNullOrEmpty(strColumn) == false) row[SchemaTableColumn.BaseColumnName] = strColumn;
+
+ row[SchemaTableColumn.IsExpression] = String.IsNullOrEmpty(strColumn);
+ row[SchemaTableColumn.IsAliased] = (String.Compare(GetName(n), strColumn, true, CultureInfo.InvariantCulture) != 0);
+
+ temp = _command.Connection._sql.ColumnTableName(_activeStatement, n);
+ if (String.IsNullOrEmpty(temp) == false) row[SchemaTableColumn.BaseTableName] = temp;
+
+ temp = _command.Connection._sql.ColumnDatabaseName(_activeStatement, n);
+ if (String.IsNullOrEmpty(temp) == false) row[SchemaTableOptionalColumn.BaseCatalogName] = temp;
+
+ string dataType = null;
+ // If we have a table-bound column, extract the extra information from it
+ if (String.IsNullOrEmpty(strColumn) == false)
+ {
+ string collSeq;
+ bool bNotNull;
+ bool bPrimaryKey;
+ bool bAutoIncrement;
+ string[] arSize;
+
+ // Get the column meta data
+ _command.Connection._sql.ColumnMetaData(
+ (string)row[SchemaTableOptionalColumn.BaseCatalogName],
+ (string)row[SchemaTableColumn.BaseTableName],
+ strColumn,
+ out dataType, out collSeq, out bNotNull, out bPrimaryKey, out bAutoIncrement);
+
+ if (bNotNull || bPrimaryKey) row[SchemaTableColumn.AllowDBNull] = false;
+
+ row[SchemaTableColumn.IsKey] = bPrimaryKey;
+ row[SchemaTableOptionalColumn.IsAutoIncrement] = bAutoIncrement;
+
+ // For types like varchar(50) and such, extract the size
+ arSize = dataType.Split('(');
+ if (arSize.Length > 1)
+ {
+ dataType = arSize[0];
+ arSize = arSize[1].Split(')');
+ if (arSize.Length > 1)
+ {
+ arSize = arSize[0].Split(',', '.');
+ if (GetSqliteType(n).Type == DbType.String || GetSqliteType(n).Type == DbType.Binary)
+ {
+ row[SchemaTableColumn.ColumnSize] = Convert.ToInt32(arSize[0], CultureInfo.InvariantCulture);
+ }
+ else
+ {
+ row[SchemaTableColumn.NumericPrecision] = Convert.ToInt32(arSize[0], CultureInfo.InvariantCulture);
+ if (arSize.Length > 1)
+ row[SchemaTableColumn.NumericScale] = Convert.ToInt32(arSize[1], CultureInfo.InvariantCulture);
+ }
+ }
+ }
+
+ if (wantDefaultValue)
+ {
+ // Determine the default value for the column, which sucks because we have to query the schema for each column
+ using (SqliteCommand cmdTable = new SqliteCommand(String.Format(CultureInfo.InvariantCulture, "PRAGMA [{0}].TABLE_INFO([{1}])",
+ row[SchemaTableOptionalColumn.BaseCatalogName],
+ row[SchemaTableColumn.BaseTableName]
+ ), _command.Connection))
+ using (DbDataReader rdTable = cmdTable.ExecuteReader())
+ {
+ // Find the matching column
+ while (rdTable.Read())
+ {
+ if (String.Compare((string)row[SchemaTableColumn.BaseColumnName], rdTable.GetString(1), true, CultureInfo.InvariantCulture) == 0)
+ {
+ if (rdTable.IsDBNull(4) == false)
+ row[SchemaTableOptionalColumn.DefaultValue] = rdTable[4];
+
+ break;
+ }
+ }
+ }
+ }
+
+ // Determine IsUnique properly, which is a pain in the butt!
+ if (wantUniqueInfo)
+ {
+ if ((string)row[SchemaTableOptionalColumn.BaseCatalogName] != strCatalog
+ || (string)row[SchemaTableColumn.BaseTableName] != strTable)
+ {
+ strCatalog = (string)row[SchemaTableOptionalColumn.BaseCatalogName];
+ strTable = (string)row[SchemaTableColumn.BaseTableName];
+
+ tblIndexes = _command.Connection.GetSchema("Indexes", new string[] {
+ (string)row[SchemaTableOptionalColumn.BaseCatalogName],
+ null,
+ (string)row[SchemaTableColumn.BaseTableName],
+ null });
+ }
+
+ foreach (DataRow rowIndexes in tblIndexes.Rows)
+ {
+ tblIndexColumns = _command.Connection.GetSchema("IndexColumns", new string[] {
+ (string)row[SchemaTableOptionalColumn.BaseCatalogName],
+ null,
+ (string)row[SchemaTableColumn.BaseTableName],
+ (string)rowIndexes["INDEX_NAME"],
+ null
+ });
+ foreach (DataRow rowColumnIndex in tblIndexColumns.Rows)
+ {
+ if (String.Compare((string)rowColumnIndex["COLUMN_NAME"], strColumn, true, CultureInfo.InvariantCulture) == 0)
+ {
+ if (tblIndexColumns.Rows.Count == 1 && (bool)row[SchemaTableColumn.AllowDBNull] == false)
+ row[SchemaTableColumn.IsUnique] = rowIndexes["UNIQUE"];
+
+ break;
+ }
+ }
+ }
+ }
+ }
+
+ if (String.IsNullOrEmpty(dataType))
+ {
+ TypeAffinity affin;
+ dataType = _activeStatement._sql.ColumnType(_activeStatement, n, out affin);
+ }
+
+ if (String.IsNullOrEmpty(dataType) == false)
+ row["DataTypeName"] = dataType;
+
+ tbl.Rows.Add(row);
+ }
+
+#if MONO_SUPPORT_KEYREADER
+ if (_keyInfo != null)
+ _keyInfo.AppendSchemaTable(tbl);
+#endif
+
+ tbl.AcceptChanges();
+ tbl.EndLoadData();
+
+ return tbl;
+ }
+
+ /// <summary>
+ /// Retrieves the column as a string
+ /// </summary>
+ /// <param name="i">The index of the column to retrieve</param>
+ /// <returns>string</returns>
+ public override string GetString(int i)
+ {
+#if MONO_SUPPORT_KEYREADER
+ if (i >= VisibleFieldCount && _keyInfo != null)
+ return _keyInfo.GetString(i - VisibleFieldCount);
+#endif
+
+ VerifyType(i, DbType.String);
+ return _activeStatement._sql.GetText(_activeStatement, i);
+ }
+
+ /// <summary>
+ /// Retrieves the column as an object corresponding to the underlying datatype of the column
+ /// </summary>
+ /// <param name="i">The index of the column to retrieve</param>
+ /// <returns>object</returns>
+ public override object GetValue(int i)
+ {
+ CheckClosed();
+
+#if MONO_SUPPORT_KEYREADER
+ if (i >= VisibleFieldCount && _keyInfo != null)
+ return _keyInfo.GetValue(i - VisibleFieldCount);
+#endif
+ SqliteType typ = GetSqliteType(i);
+ typ.Affinity = _activeStatement._sql.ColumnAffinity(_activeStatement, i);
+ return _activeStatement._sql.GetValue(_activeStatement, i, typ);
+ }
+
+ /// <summary>
+ /// Retreives the values of multiple columns, up to the size of the supplied array
+ /// </summary>
+ /// <param name="values">The array to fill with values from the columns in the current resultset</param>
+ /// <returns>The number of columns retrieved</returns>
+ public override int GetValues(object[] values)
+ {
+ int nMax = FieldCount;
+ if (values.Length < nMax) nMax = values.Length;
+
+ for (int n = 0; n < nMax; n++)
+ {
+ values[n] = GetValue(n);
+ }
+
+ return nMax;
+ }
+
+ /// <summary>
+ /// Returns True if the resultset has rows that can be fetched
+ /// </summary>
+ public override bool HasRows
+ {
+ get
+ {
+ CheckClosed();
+ return (_readingState != 1);
+ }
+ }
+
+ /// <summary>
+ /// Returns True if the data reader is closed
+ /// </summary>
+ public override bool IsClosed
+ {
+ get { return (_command == null); }
+ }
+
+ /// <summary>
+ /// Returns True if the specified column is null
+ /// </summary>
+ /// <param name="i">The index of the column to retrieve</param>
+ /// <returns>True or False</returns>
+ public override bool IsDBNull(int i)
+ {
+ CheckClosed();
+#if MONO_SUPPORT_KEYREADER
+ if (i >= VisibleFieldCount && _keyInfo != null)
+ return _keyInfo.IsDBNull(i - VisibleFieldCount);
+#endif
+ return _activeStatement._sql.IsNull(_activeStatement, i);
+ }
+
+ /// <summary>
+ /// Moves to the next resultset in multiple row-returning SQL command.
+ /// </summary>
+ /// <returns>True if the command was successful and a new resultset is available, False otherwise.</returns>
+ public override bool NextResult()
+ {
+ CheckClosed();
+
+ SqliteStatement stmt = null;
+ int fieldCount;
+
+ while (true)
+ {
+ if (_activeStatement != null && stmt == null)
+ {
+ // Reset the previously-executed statement
+ _activeStatement._sql.Reset(_activeStatement);
+
+ // If we're only supposed to return a single rowset, step through all remaining statements once until
+ // they are all done and return false to indicate no more resultsets exist.
+ if ((_commandBehavior & CommandBehavior.SingleResult) != 0)
+ {
+ for (; ; )
+ {
+ stmt = _command.GetStatement(_activeStatementIndex + 1);
+ if (stmt == null) break;
+ _activeStatementIndex++;
+
+ stmt._sql.Step(stmt);
+ if (stmt._sql.ColumnCount(stmt) == 0)
+ {
+ if (_rowsAffected == -1) _rowsAffected = 0;
+ _rowsAffected += stmt._sql.Changes;
+ }
+ stmt._sql.Reset(stmt); // Gotta reset after every step to release any locks and such!
+ }
+ return false;
+ }
+ }
+
+ // Get the next statement to execute
+ stmt = _command.GetStatement(_activeStatementIndex + 1);
+
+ // If we've reached the end of the statements, return false, no more resultsets
+ if (stmt == null)
+ return false;
+
+ // If we were on a current resultset, set the state to "done reading" for it
+ if (_readingState < 1)
+ _readingState = 1;
+
+ _activeStatementIndex++;
+
+ fieldCount = stmt._sql.ColumnCount(stmt);
+
+ // If the statement is not a select statement or we're not retrieving schema only, then perform the initial step
+ if ((_commandBehavior & CommandBehavior.SchemaOnly) == 0 || fieldCount == 0)
+ {
+ if (stmt._sql.Step(stmt))
+ {
+ _readingState = -1;
+ }
+ else if (fieldCount == 0) // No rows returned, if fieldCount is zero, skip to the next statement
+ {
+ if (_rowsAffected == -1) _rowsAffected = 0;
+ _rowsAffected += stmt._sql.Changes;
+ stmt._sql.Reset(stmt);
+ continue; // Skip this command and move to the next, it was not a row-returning resultset
+ }
+ else // No rows, fieldCount is non-zero so stop here
+ {
+ _readingState = 1; // This command returned columns but no rows, so return true, but HasRows = false and Read() returns false
+ }
+ }
+
+ // Ahh, we found a row-returning resultset eligible to be returned!
+ _activeStatement = stmt;
+ _fieldCount = fieldCount;
+ _fieldTypeArray = null;
+
+ if ((_commandBehavior & CommandBehavior.KeyInfo) != 0)
+ LoadKeyInfo();
+
+ return true;
+ }
+ }
+
+ /// <summary>
+ /// Retrieves the SqliteType for a given column, and caches it to avoid repetetive interop calls.
+ /// </summary>
+ /// <param name="i">The index of the column to retrieve</param>
+ /// <returns>A SqliteType structure</returns>
+ private SqliteType GetSqliteType(int i)
+ {
+ SqliteType typ;
+
+ // Initialize the field types array if not already initialized
+ if (_fieldTypeArray == null) _fieldTypeArray = new SqliteType[VisibleFieldCount];
+
+ // Initialize this column's field type instance
+ if (_fieldTypeArray[i] == null) _fieldTypeArray[i] = new SqliteType();
+
+ typ = _fieldTypeArray[i];
+
+ // If not initialized, then fetch the declared column datatype and attempt to convert it
+ // to a known DbType.
+ if (typ.Affinity == TypeAffinity.Uninitialized)
+ typ.Type = SqliteConvert.TypeNameToDbType(_activeStatement._sql.ColumnType(_activeStatement, i, out typ.Affinity));
+ else
+ typ.Affinity = _activeStatement._sql.ColumnAffinity(_activeStatement, i);
+
+ return typ;
+ }
+
+ /// <summary>
+ /// Reads the next row from the resultset
+ /// </summary>
+ /// <returns>True if a new row was successfully loaded and is ready for processing</returns>
+ public override bool Read()
+ {
+ CheckClosed();
+
+ if (_readingState == -1) // First step was already done at the NextResult() level, so don't step again, just return true.
+ {
+ _readingState = 0;
+ return true;
+ }
+ else if (_readingState == 0) // Actively reading rows
+ {
+ if (_activeStatement._sql.Step(_activeStatement) == true)
+ {
+#if MONO_SUPPORT_KEYREADER
+ if (_keyInfo != null)
+ _keyInfo.Reset();
+#endif
+
+ return true;
+ }
+
+ _readingState = 1; // Finished reading rows
+ }
+
+ return false;
+ }
+
+ /// <summary>
+ /// Retrieve the count of records affected by an update/insert command. Only valid once the data reader is closed!
+ /// </summary>
+ public override int RecordsAffected
+ {
+ get { return _rowsAffected; }
+ }
+
+ /// <summary>
+ /// Indexer to retrieve data from a column given its name
+ /// </summary>
+ /// <param name="name">The name of the column to retrieve data for</param>
+ /// <returns>The value contained in the column</returns>
+ public override object this[string name]
+ {
+ get { return GetValue(GetOrdinal(name)); }
+ }
+
+ /// <summary>
+ /// Indexer to retrieve data from a column given its i
+ /// </summary>
+ /// <param name="i">The index of the column to retrieve</param>
+ /// <returns>The value contained in the column</returns>
+ public override object this[int i]
+ {
+ get { return GetValue(i); }
+ }
+
+ private void LoadKeyInfo()
+ {
+#if MONO_SUPPORT_KEYREADER
+ if (_keyInfo != null)
+ _keyInfo.Dispose();
+
+ _keyInfo = new SqliteKeyReader(_command.Connection, this, _activeStatement);
+#endif
+ }
+ }
+}
+#endif
diff --git a/lib/Hyena/src/Mono.Data.Sqlite/Mono.Data.Sqlite/SQLiteEnlistment.cs b/lib/Hyena/src/Mono.Data.Sqlite/Mono.Data.Sqlite/SQLiteEnlistment.cs
new file mode 100644
index 0000000..e2caed7
--- /dev/null
+++ b/lib/Hyena/src/Mono.Data.Sqlite/Mono.Data.Sqlite/SQLiteEnlistment.cs
@@ -0,0 +1,127 @@
+//
+// Mono.Data.Sqlite.SQLiteEnlistment.cs
+//
+// Author(s):
+// Robert Simpson (robert at blackcastlesoft.com)
+//
+// Adapted and modified for the Mono Project by
+// Marek Habersack (grendello at gmail.com)
+//
+//
+// Copyright (C) 2006 Novell, Inc (http://www.novell.com)
+// Copyright (C) 2007 Marek Habersack
+//
+// Permission is hereby granted, free of charge, to any person obtaining
+// a copy of this software and associated documentation files (the
+// "Software"), to deal in the Software without restriction, including
+// without limitation the rights to use, copy, modify, merge, publish,
+// distribute, sublicense, and/or sell copies of the Software, and to
+// permit persons to whom the Software is furnished to do so, subject to
+// the following conditions:
+//
+// The above copyright notice and this permission notice shall be
+// included in all copies or substantial portions of the Software.
+//
+// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
+// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
+// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
+// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+//
+
+/*******************************************************
+ * ADO.NET 2.0 Data Provider for Sqlite Version 3.X
+ * Written by Robert Simpson (robert at blackcastlesoft.com)
+ *
+ * Released to the public domain, use at your own risk!
+ ********************************************************/
+#if NET_2_0
+#if !PLATFORM_COMPACTFRAMEWORK
+namespace Mono.Data.Sqlite
+{
+ using System;
+ using System.Data;
+ using System.Data.Common;
+ using System.Transactions;
+
+ internal class SqliteEnlistment : IEnlistmentNotification
+ {
+ internal SqliteTransaction _transaction;
+ internal Transaction _scope;
+ internal bool _disposeConnection;
+
+ internal SqliteEnlistment(SqliteConnection cnn, Transaction scope)
+ {
+ _transaction = cnn.BeginTransaction();
+ _scope = scope;
+ _disposeConnection = false;
+
+ _scope.EnlistVolatile(this, System.Transactions.EnlistmentOptions.None);
+ }
+
+ private void Cleanup(SqliteConnection cnn)
+ {
+ if (_disposeConnection)
+ cnn.Dispose();
+
+ _transaction = null;
+ _scope = null;
+ }
+
+ #region IEnlistmentNotification Members
+
+ public void Commit(Enlistment enlistment)
+ {
+ SqliteConnection cnn = _transaction.Connection;
+ cnn._enlistment = null;
+
+ try
+ {
+ _transaction.IsValid(true);
+ _transaction.Connection._transactionLevel = 1;
+ _transaction.Commit();
+
+ enlistment.Done();
+ }
+ finally
+ {
+ Cleanup(cnn);
+ }
+ }
+
+ public void InDoubt(Enlistment enlistment)
+ {
+ enlistment.Done();
+ }
+
+ public void Prepare(PreparingEnlistment preparingEnlistment)
+ {
+ if (_transaction.IsValid(false) == false)
+ preparingEnlistment.ForceRollback();
+ else
+ preparingEnlistment.Prepared();
+ }
+
+ public void Rollback(Enlistment enlistment)
+ {
+ SqliteConnection cnn = _transaction.Connection;
+ cnn._enlistment = null;
+
+ try
+ {
+ _transaction.Rollback();
+ enlistment.Done();
+ }
+ finally
+ {
+ Cleanup(cnn);
+ }
+ }
+
+ #endregion
+ }
+}
+#endif // !PLATFORM_COMPACT_FRAMEWORK
+#endif
diff --git a/lib/Hyena/src/Mono.Data.Sqlite/Mono.Data.Sqlite/SQLiteException.cs b/lib/Hyena/src/Mono.Data.Sqlite/Mono.Data.Sqlite/SQLiteException.cs
new file mode 100644
index 0000000..820dcce
--- /dev/null
+++ b/lib/Hyena/src/Mono.Data.Sqlite/Mono.Data.Sqlite/SQLiteException.cs
@@ -0,0 +1,293 @@
+//
+// Mono.Data.Sqlite.SQLiteException.cs
+//
+// Author(s):
+// Robert Simpson (robert at blackcastlesoft.com)
+//
+// Adapted and modified for the Mono Project by
+// Marek Habersack (grendello at gmail.com)
+//
+//
+// Copyright (C) 2006 Novell, Inc (http://www.novell.com)
+// Copyright (C) 2007 Marek Habersack
+//
+// Permission is hereby granted, free of charge, to any person obtaining
+// a copy of this software and associated documentation files (the
+// "Software"), to deal in the Software without restriction, including
+// without limitation the rights to use, copy, modify, merge, publish,
+// distribute, sublicense, and/or sell copies of the Software, and to
+// permit persons to whom the Software is furnished to do so, subject to
+// the following conditions:
+//
+// The above copyright notice and this permission notice shall be
+// included in all copies or substantial portions of the Software.
+//
+// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
+// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
+// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
+// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+//
+
+/********************************************************
+ * ADO.NET 2.0 Data Provider for Sqlite Version 3.X
+ * Written by Robert Simpson (robert at blackcastlesoft.com)
+ *
+ * Released to the public domain, use at your own risk!
+ ********************************************************/
+#if NET_2_0
+namespace Mono.Data.Sqlite
+{
+ using System;
+ using System.Collections.Generic;
+ using System.Text;
+ using System.Data.Common;
+
+#if !PLATFORM_COMPACTFRAMEWORK
+ using System.Runtime.Serialization;
+#endif
+
+ /// <summary>
+ /// Sqlite exception class.
+ /// </summary>
+#if !PLATFORM_COMPACTFRAMEWORK
+ [Serializable]
+ public class SqliteException : DbException
+#else
+ public class SqliteException : Exception
+#endif
+ {
+ private SqliteErrorCode _errorCode;
+
+#if !PLATFORM_COMPACTFRAMEWORK
+ private SqliteException(SerializationInfo info, StreamingContext context)
+ : base(info, context)
+ {
+ }
+#endif
+
+ /// <summary>
+ /// Public constructor for generating a Sqlite error given the base error code
+ /// </summary>
+ /// <param name="errorCode">The Sqlite error code to report</param>
+ /// <param name="extendedInformation">Extra text to go along with the error message text</param>
+ public SqliteException(int errorCode, string extendedInformation)
+ : base(GetStockErrorMessage(errorCode, extendedInformation))
+ {
+ _errorCode = (SqliteErrorCode)errorCode;
+ }
+
+ /// <summary>
+ /// Various public constructors that just pass along to the base Exception
+ /// </summary>
+ /// <param name="message">Passed verbatim to Exception</param>
+ public SqliteException(string message)
+ : base(message)
+ {
+ }
+
+ /// <summary>
+ /// Various public constructors that just pass along to the base Exception
+ /// </summary>
+ public SqliteException()
+ {
+ }
+
+ /// <summary>
+ /// Various public constructors that just pass along to the base Exception
+ /// <param name="message">Passed to Exception</param>
+ /// <param name="innerException">Passed to Exception</param>
+ /// </summary>
+ public SqliteException(string message, Exception innerException)
+ : base(message, innerException)
+ {
+ }
+
+ /// <summary>
+ /// Retrieves the underlying Sqlite error code for this exception
+ /// </summary>
+#if !PLATFORM_COMPACTFRAMEWORK
+ public new SqliteErrorCode ErrorCode
+#else
+ public SqliteErrorCode ErrorCode
+#endif
+ {
+ get { return _errorCode; }
+ }
+
+ /// <summary>
+ /// Initializes the exception class with the Sqlite error code.
+ /// </summary>
+ /// <param name="errorCode">The Sqlite error code</param>
+ /// <param name="errorMessage">A detailed error message</param>
+ /// <returns>An error message string</returns>
+ private static string GetStockErrorMessage(int errorCode, string errorMessage)
+ {
+ if (errorMessage == null) errorMessage = "";
+
+ if (errorMessage.Length > 0)
+ errorMessage = "\r\n" + errorMessage;
+
+ if (errorCode < 0 || errorCode >= _errorMessages.Length)
+ errorCode = 1;
+
+ return _errorMessages[errorCode] + errorMessage;
+ }
+
+ private static string[] _errorMessages = {
+ "Sqlite OK",
+ "Sqlite error",
+ "An internal logic error in Sqlite",
+ "Access permission denied",
+ "Callback routine requested an abort",
+ "The database file is locked",
+ "A table in the database is locked",
+ "malloc() failed",
+ "Attempt to write a read-only database",
+ "Operation terminated by sqlite3_interrupt()",
+ "Some kind of disk I/O error occurred",
+ "The database disk image is malformed",
+ "Table or record not found",
+ "Insertion failed because the database is full",
+ "Unable to open the database file",
+ "Database lock protocol error",
+ "Database is empty",
+ "The database schema changed",
+ "Too much data for one row of a table",
+ "Abort due to constraint violation",
+ "Data type mismatch",
+ "Library used incorrectly",
+ "Uses OS features not supported on host",
+ "Authorization denied",
+ "Auxiliary database format error",
+ "2nd parameter to sqlite3_bind() out of range",
+ "File opened that is not a database file",
+ };
+ }
+
+ /// <summary>
+ /// Sqlite error codes
+ /// </summary>
+ public enum SqliteErrorCode
+ {
+ /// <summary>
+ /// Success
+ /// </summary>
+ Ok = 0,
+ /// <summary>
+ /// SQL error or missing database
+ /// </summary>
+ Error,
+ /// <summary>
+ /// Internal logic error in Sqlite
+ /// </summary>
+ Internal,
+ /// <summary>
+ /// Access permission denied
+ /// </summary>
+ Perm,
+ /// <summary>
+ /// Callback routine requested an abort
+ /// </summary>
+ Abort,
+ /// <summary>
+ /// The database file is locked
+ /// </summary>
+ Busy,
+ /// <summary>
+ /// A table in the database is locked
+ /// </summary>
+ Locked,
+ /// <summary>
+ /// malloc() failed
+ /// </summary>
+ NoMem,
+ /// <summary>
+ /// Attempt to write a read-only database
+ /// </summary>
+ ReadOnly,
+ /// <summary>
+ /// Operation terminated by sqlite3_interrupt()
+ /// </summary>
+ Interrupt,
+ /// <summary>
+ /// Some kind of disk I/O error occurred
+ /// </summary>
+ IOErr,
+ /// <summary>
+ /// The database disk image is malformed
+ /// </summary>
+ Corrupt,
+ /// <summary>
+ /// Table or record not found
+ /// </summary>
+ NotFound,
+ /// <summary>
+ /// Insertion failed because database is full
+ /// </summary>
+ Full,
+ /// <summary>
+ /// Unable to open the database file
+ /// </summary>
+ CantOpen,
+ /// <summary>
+ /// Database lock protocol error
+ /// </summary>
+ Protocol,
+ /// <summary>
+ /// Database is empty
+ /// </summary>
+ Empty,
+ /// <summary>
+ /// The database schema changed
+ /// </summary>
+ Schema,
+ /// <summary>
+ /// Too much data for one row of a table
+ /// </summary>
+ TooBig,
+ /// <summary>
+ /// Abort due to constraint violation
+ /// </summary>
+ Constraint,
+ /// <summary>
+ /// Data type mismatch
+ /// </summary>
+ Mismatch,
+ /// <summary>
+ /// Library used incorrectly
+ /// </summary>
+ Misuse,
+ /// <summary>
+ /// Uses OS features not supported on host
+ /// </summary>
+ NOLFS,
+ /// <summary>
+ /// Authorization denied
+ /// </summary>
+ Auth,
+ /// <summary>
+ /// Auxiliary database format error
+ /// </summary>
+ Format,
+ /// <summary>
+ /// 2nd parameter to sqlite3_bind out of range
+ /// </summary>
+ Range,
+ /// <summary>
+ /// File opened that is not a database file
+ /// </summary>
+ NotADatabase,
+ /// <summary>
+ /// sqlite3_step() has another row ready
+ /// </summary>
+ Row = 100,
+ /// <summary>
+ /// sqlite3_step() has finished executing
+ /// </summary>
+ Done = 101,
+ }
+}
+#endif
diff --git a/lib/Hyena/src/Mono.Data.Sqlite/Mono.Data.Sqlite/SQLiteFactory.cs b/lib/Hyena/src/Mono.Data.Sqlite/Mono.Data.Sqlite/SQLiteFactory.cs
new file mode 100644
index 0000000..a9a5bce
--- /dev/null
+++ b/lib/Hyena/src/Mono.Data.Sqlite/Mono.Data.Sqlite/SQLiteFactory.cs
@@ -0,0 +1,113 @@
+//
+// Mono.Data.Sqlite.SQLiteFactory.cs
+//
+// Author(s):
+// Robert Simpson (robert at blackcastlesoft.com)
+//
+// Adapted and modified for the Mono Project by
+// Marek Habersack (grendello at gmail.com)
+//
+//
+// Copyright (C) 2006 Novell, Inc (http://www.novell.com)
+// Copyright (C) 2007 Marek Habersack
+//
+// Permission is hereby granted, free of charge, to any person obtaining
+// a copy of this software and associated documentation files (the
+// "Software"), to deal in the Software without restriction, including
+// without limitation the rights to use, copy, modify, merge, publish,
+// distribute, sublicense, and/or sell copies of the Software, and to
+// permit persons to whom the Software is furnished to do so, subject to
+// the following conditions:
+//
+// The above copyright notice and this permission notice shall be
+// included in all copies or substantial portions of the Software.
+//
+// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
+// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
+// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
+// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+//
+
+/********************************************************
+ * ADO.NET 2.0 Data Provider for Sqlite Version 3.X
+ * Written by Robert Simpson (robert at blackcastlesoft.com)
+ *
+ * Released to the public domain, use at your own risk!
+ ********************************************************/
+#if NET_2_0
+namespace Mono.Data.Sqlite
+{
+ using System;
+ using System.Data.Common;
+
+#if !PLATFORM_COMPACTFRAMEWORK
+ /// <summary>
+ /// Sqlite implementation of DbProviderFactory.
+ /// </summary>
+ public sealed class SqliteFactory : DbProviderFactory
+ {
+ /// <summary>
+ /// Static instance member which returns an instanced SqliteFactory class.
+ /// </summary>
+ public static readonly SqliteFactory Instance = new SqliteFactory();
+
+ /// <summary>
+ /// Returns a new SqliteCommand object.
+ /// </summary>
+ /// <returns>A SqliteCommand object.</returns>
+ public override DbCommand CreateCommand()
+ {
+ return new SqliteCommand();
+ }
+
+ /// <summary>
+ /// Returns a new SqliteCommandBuilder object.
+ /// </summary>
+ /// <returns>A SqliteCommandBuilder object.</returns>
+ public override DbCommandBuilder CreateCommandBuilder()
+ {
+ return new SqliteCommandBuilder();
+ }
+
+ /// <summary>
+ /// Creates a new SqliteConnection.
+ /// </summary>
+ /// <returns>A SqliteConnection object.</returns>
+ public override DbConnection CreateConnection()
+ {
+ return new SqliteConnection();
+ }
+
+ /// <summary>
+ /// Creates a new SqliteConnectionStringBuilder.
+ /// </summary>
+ /// <returns>A SqliteConnectionStringBuilder object.</returns>
+ public override DbConnectionStringBuilder CreateConnectionStringBuilder()
+ {
+ return new SqliteConnectionStringBuilder();
+ }
+
+ /// <summary>
+ /// Creates a new SqliteDataAdapter.
+ /// </summary>
+ /// <returns>A SqliteDataAdapter object.</returns>
+ public override DbDataAdapter CreateDataAdapter()
+ {
+ return new SqliteDataAdapter();
+ }
+
+ /// <summary>
+ /// Creates a new SqliteParameter.
+ /// </summary>
+ /// <returns>A SqliteParameter object.</returns>
+ public override DbParameter CreateParameter()
+ {
+ return new SqliteParameter();
+ }
+ }
+#endif
+}
+#endif
diff --git a/lib/Hyena/src/Mono.Data.Sqlite/Mono.Data.Sqlite/SQLiteFunction.cs b/lib/Hyena/src/Mono.Data.Sqlite/Mono.Data.Sqlite/SQLiteFunction.cs
new file mode 100644
index 0000000..7f0a38b
--- /dev/null
+++ b/lib/Hyena/src/Mono.Data.Sqlite/Mono.Data.Sqlite/SQLiteFunction.cs
@@ -0,0 +1,557 @@
+//
+// Mono.Data.Sqlite.SQLiteFunction.cs
+//
+// Author(s):
+// Robert Simpson (robert at blackcastlesoft.com)
+//
+// Adapted and modified for the Mono Project by
+// Marek Habersack (grendello at gmail.com)
+//
+//
+// Copyright (C) 2006 Novell, Inc (http://www.novell.com)
+// Copyright (C) 2007 Marek Habersack
+//
+// Permission is hereby granted, free of charge, to any person obtaining
+// a copy of this software and associated documentation files (the
+// "Software"), to deal in the Software without restriction, including
+// without limitation the rights to use, copy, modify, merge, publish,
+// distribute, sublicense, and/or sell copies of the Software, and to
+// permit persons to whom the Software is furnished to do so, subject to
+// the following conditions:
+//
+// The above copyright notice and this permission notice shall be
+// included in all copies or substantial portions of the Software.
+//
+// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
+// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
+// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
+// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+//
+
+/********************************************************
+ * ADO.NET 2.0 Data Provider for Sqlite Version 3.X
+ * Written by Robert Simpson (robert at blackcastlesoft.com)
+ *
+ * Released to the public domain, use at your own risk!
+ ********************************************************/
+#if NET_2_0
+namespace Mono.Data.Sqlite
+{
+ using System;
+ using System.Collections;
+ using System.Collections.Generic;
+ using System.Runtime.InteropServices;
+ using System.Globalization;
+
+ /// <summary>
+ /// The type of user-defined function to declare
+ /// </summary>
+ public enum FunctionType
+ {
+ /// <summary>
+ /// Scalar functions are designed to be called and return a result immediately. Examples include ABS(), Upper(), Lower(), etc.
+ /// </summary>
+ Scalar = 0,
+ /// <summary>
+ /// Aggregate functions are designed to accumulate data until the end of a call and then return a result gleaned from the accumulated data.
+ /// Examples include SUM(), COUNT(), AVG(), etc.
+ /// </summary>
+ Aggregate = 1,
+ /// <summary>
+ /// Collation sequences are used to sort textual data in a custom manner, and appear in an ORDER BY clause. Typically text in an ORDER BY is
+ /// sorted using a straight case-insensitive comparison function. Custom collating sequences can be used to alter the behavior of text sorting
+ /// in a user-defined manner.
+ /// </summary>
+ Collation = 2,
+ }
+
+ /// <summary>
+ /// An internal callback delegate declaration.
+ /// </summary>
+ /// <param name="context">Raw context pointer for the user function</param>
+ /// <param name="nArgs">Count of arguments to the function</param>
+ /// <param name="argsptr">A pointer to the array of argument pointers</param>
+ internal delegate void SqliteCallback(IntPtr context, int nArgs, IntPtr argsptr);
+ /// <summary>
+ /// An internal callback delegate declaration.
+ /// </summary>
+ /// <param name="context">Raw context pointer for the user function</param>
+ internal delegate void SqliteFinalCallback(IntPtr context);
+ /// <summary>
+ /// Internal callback delegate for implementing collation sequences
+ /// </summary>
+ /// <param name="len1">Length of the string pv1</param>
+ /// <param name="pv1">Pointer to the first string to compare</param>
+ /// <param name="len2">Length of the string pv2</param>
+ /// <param name="pv2">Pointer to the second string to compare</param>
+ /// <returns>Returns -1 if the first string is less than the second. 0 if they are equal, or 1 if the first string is greater
+ /// than the second.</returns>
+ internal delegate int SqliteCollation(int len1, IntPtr pv1, int len2, IntPtr pv2);
+
+ /// <summary>
+ /// This abstract class is designed to handle user-defined functions easily. An instance of the derived class is made for each
+ /// connection to the database.
+ /// </summary>
+ /// <remarks>
+ /// Although there is one instance of a class derived from SqliteFunction per database connection, the derived class has no access
+ /// to the underlying connection. This is necessary to deter implementers from thinking it would be a good idea to make database
+ /// calls during processing.
+ ///
+ /// It is important to distinguish between a per-connection instance, and a per-SQL statement context. One instance of this class
+ /// services all SQL statements being stepped through on that connection, and there can be many. One should never store per-statement
+ /// information in member variables of user-defined function classes.
+ ///
+ /// For aggregate functions, always create and store your per-statement data in the contextData object on the 1st step. This data will
+ /// be automatically freed for you (and Dispose() called if the item supports IDisposable) when the statement completes.
+ /// </remarks>
+ public abstract class SqliteFunction : IDisposable
+ {
+ /// <summary>
+ /// The base connection this function is attached to
+ /// </summary>
+ private SqliteBase _base;
+ /// <summary>
+ /// Internal array used to keep track of aggregate function context data
+ /// </summary>
+ private Dictionary<long, object> _contextDataList;
+
+ /// <summary>
+ /// Holds a reference to the callback function for user functions
+ /// </summary>
+ private SqliteCallback _InvokeFunc;
+ /// <summary>
+ /// Holds a reference to the callbakc function for stepping in an aggregate function
+ /// </summary>
+ private SqliteCallback _StepFunc;
+ /// <summary>
+ /// Holds a reference to the callback function for finalizing an aggregate function
+ /// </summary>
+ private SqliteFinalCallback _FinalFunc;
+ /// <summary>
+ /// Holds a reference to the callback function for collation sequences
+ /// </summary>
+ private SqliteCollation _CompareFunc;
+
+ /// <summary>
+ /// This static list contains all the user-defined functions declared using the proper attributes.
+ /// </summary>
+ private static List<SqliteFunctionAttribute> _registeredFunctions = new List<SqliteFunctionAttribute>();
+
+ /// <summary>
+ /// Internal constructor, initializes the function's internal variables.
+ /// </summary>
+ protected SqliteFunction()
+ {
+ _contextDataList = new Dictionary<long, object>();
+ }
+
+ /// <summary>
+ /// Returns a reference to the underlying connection's SqliteConvert class, which can be used to convert
+ /// strings and DateTime's into the current connection's encoding schema.
+ /// </summary>
+ public SqliteConvert SqliteConvert
+ {
+ get
+ {
+ return _base;
+ }
+ }
+
+ /// <summary>
+ /// Scalar functions override this method to do their magic.
+ /// </summary>
+ /// <remarks>
+ /// Parameters passed to functions have only an affinity for a certain data type, there is no underlying schema available
+ /// to force them into a certain type. Therefore the only types you will ever see as parameters are
+ /// DBNull.Value, Int64, Double, String or byte[] array.
+ /// </remarks>
+ /// <param name="args">The arguments for the command to process</param>
+ /// <returns>You may return most simple types as a return value, null or DBNull.Value to return null, DateTime, or
+ /// you may return an Exception-derived class if you wish to return an error to Sqlite. Do not actually throw the error,
+ /// just return it!</returns>
+ public virtual object Invoke(object[] args)
+ {
+ return null;
+ }
+
+ /// <summary>
+ /// Aggregate functions override this method to do their magic.
+ /// </summary>
+ /// <remarks>
+ /// Typically you'll be updating whatever you've placed in the contextData field and returning as quickly as possible.
+ /// </remarks>
+ /// <param name="args">The arguments for the command to process</param>
+ /// <param name="stepNumber">The 1-based step number. This is incrememted each time the step method is called.</param>
+ /// <param name="contextData">A placeholder for implementers to store contextual data pertaining to the current context.</param>
+ public virtual void Step(object[] args, int stepNumber, ref object contextData)
+ {
+ }
+
+ /// <summary>
+ /// Aggregate functions override this method to finish their aggregate processing.
+ /// </summary>
+ /// <remarks>
+ /// If you implemented your aggregate function properly,
+ /// you've been recording and keeping track of your data in the contextData object provided, and now at this stage you should have
+ /// all the information you need in there to figure out what to return.
+ /// NOTE: It is possible to arrive here without receiving a previous call to Step(), in which case the contextData will
+ /// be null. This can happen when no rows were returned. You can either return null, or 0 or some other custom return value
+ /// if that is the case.
+ /// </remarks>
+ /// <param name="contextData">Your own assigned contextData, provided for you so you can return your final results.</param>
+ /// <returns>You may return most simple types as a return value, null or DBNull.Value to return null, DateTime, or
+ /// you may return an Exception-derived class if you wish to return an error to Sqlite. Do not actually throw the error,
+ /// just return it!
+ /// </returns>
+ public virtual object Final(object contextData)
+ {
+ return null;
+ }
+
+ /// <summary>
+ /// User-defined collation sequences override this method to provide a custom string sorting algorithm.
+ /// </summary>
+ /// <param name="param1">The first string to compare</param>
+ /// <param name="param2">The second strnig to compare</param>
+ /// <returns>1 if param1 is greater than param2, 0 if they are equal, or -1 if param1 is less than param2</returns>
+ public virtual int Compare(string param1, string param2)
+ {
+ return 0;
+ }
+
+ /// <summary>
+ /// Converts an IntPtr array of context arguments to an object array containing the resolved parameters the pointers point to.
+ /// </summary>
+ /// <remarks>
+ /// Parameters passed to functions have only an affinity for a certain data type, there is no underlying schema available
+ /// to force them into a certain type. Therefore the only types you will ever see as parameters are
+ /// DBNull.Value, Int64, Double, String or byte[] array.
+ /// </remarks>
+ /// <param name="nArgs">The number of arguments</param>
+ /// <param name="argsptr">A pointer to the array of arguments</param>
+ /// <returns>An object array of the arguments once they've been converted to .NET values</returns>
+ internal object[] ConvertParams(int nArgs, IntPtr argsptr)
+ {
+ object[] parms = new object[nArgs];
+#if !PLATFORM_COMPACTFRAMEWORK
+ IntPtr[] argint = new IntPtr[nArgs];
+#else
+ int[] argint = new int[nArgs];
+#endif
+ Marshal.Copy(argsptr, argint, 0, nArgs);
+
+ for (int n = 0; n < nArgs; n++)
+ {
+ switch (_base.GetParamValueType((IntPtr)argint[n]))
+ {
+ case TypeAffinity.Null:
+ parms[n] = DBNull.Value;
+ break;
+ case TypeAffinity.Int64:
+ parms[n] = _base.GetParamValueInt64((IntPtr)argint[n]);
+ break;
+ case TypeAffinity.Double:
+ parms[n] = _base.GetParamValueDouble((IntPtr)argint[n]);
+ break;
+ case TypeAffinity.Text:
+ parms[n] = _base.GetParamValueText((IntPtr)argint[n]);
+ break;
+ case TypeAffinity.Blob:
+ {
+ int x;
+ byte[] blob;
+
+ x = (int)_base.GetParamValueBytes((IntPtr)argint[n], 0, null, 0, 0);
+ blob = new byte[x];
+ _base.GetParamValueBytes((IntPtr)argint[n], 0, blob, 0, x);
+ parms[n] = blob;
+ }
+ break;
+ case TypeAffinity.DateTime: // Never happens here but what the heck, maybe it will one day.
+ parms[n] = _base.ToDateTime(_base.GetParamValueText((IntPtr)argint[n]));
+ break;
+ }
+ }
+ return parms;
+ }
+
+ /// <summary>
+ /// Takes the return value from Invoke() and Final() and figures out how to return it to Sqlite's context.
+ /// </summary>
+ /// <param name="context">The context the return value applies to</param>
+ /// <param name="returnValue">The parameter to return to Sqlite</param>
+ void SetReturnValue(IntPtr context, object returnValue)
+ {
+ if (returnValue == null || returnValue == DBNull.Value)
+ {
+ _base.ReturnNull(context);
+ return;
+ }
+
+ Type t = returnValue.GetType();
+ if (t == typeof(DateTime))
+ {
+ _base.ReturnText(context, _base.ToString((DateTime)returnValue));
+ return;
+ }
+ else
+ {
+ Exception r = returnValue as Exception;
+
+ if (r != null)
+ {
+ _base.ReturnError(context, r.Message);
+ return;
+ }
+ }
+
+ switch (SqliteConvert.TypeToAffinity(t))
+ {
+ case TypeAffinity.Null:
+ _base.ReturnNull(context);
+ return;
+ case TypeAffinity.Int64:
+ _base.ReturnInt64(context, Convert.ToInt64(returnValue, CultureInfo.CurrentCulture));
+ return;
+ case TypeAffinity.Double:
+ _base.ReturnDouble(context, Convert.ToDouble(returnValue, CultureInfo.CurrentCulture));
+ return;
+ case TypeAffinity.Text:
+ _base.ReturnText(context, returnValue.ToString());
+ return;
+ case TypeAffinity.Blob:
+ _base.ReturnBlob(context, (byte[])returnValue);
+ return;
+ }
+ }
+
+ /// <summary>
+ /// Internal scalar callback function, which wraps the raw context pointer and calls the virtual Invoke() method.
+ /// </summary>
+ /// <param name="context">A raw context pointer</param>
+ /// <param name="nArgs">Number of arguments passed in</param>
+ /// <param name="argsptr">A pointer to the array of arguments</param>
+ internal void ScalarCallback(IntPtr context, int nArgs, IntPtr argsptr)
+ {
+ SetReturnValue(context, Invoke(ConvertParams(nArgs, argsptr)));
+ }
+
+ /// <summary>
+ /// Internal collation sequence function, which wraps up the raw string pointers and executes the Compare() virtual function.
+ /// </summary>
+ /// <param name="len1">Length of the string pv1</param>
+ /// <param name="ptr1">Pointer to the first string to compare</param>
+ /// <param name="len2">Length of the string pv2</param>
+ /// <param name="ptr2">Pointer to the second string to compare</param>
+ /// <returns>Returns -1 if the first string is less than the second. 0 if they are equal, or 1 if the first string is greater
+ /// than the second.</returns>
+ internal int CompareCallback(int len1, IntPtr ptr1, int len2, IntPtr ptr2)
+ {
+ return Compare(_base.ToString(ptr1), _base.ToString(ptr2));
+ }
+
+ /// <summary>
+ /// The internal aggregate Step function callback, which wraps the raw context pointer and calls the virtual Step() method.
+ /// </summary>
+ /// <remarks>
+ /// This function takes care of doing the lookups and getting the important information put together to call the Step() function.
+ /// That includes pulling out the user's contextData and updating it after the call is made. We use a sorted list for this so
+ /// binary searches can be done to find the data.
+ /// </remarks>
+ /// <param name="context">A raw context pointer</param>
+ /// <param name="nArgs">Number of arguments passed in</param>
+ /// <param name="argsptr">A pointer to the array of arguments</param>
+ internal void StepCallback(IntPtr context, int nArgs, IntPtr argsptr)
+ {
+ int n = _base.AggregateCount(context);
+ long nAux;
+ object obj = null;
+
+ nAux = (long)_base.AggregateContext(context);
+ if (n > 1) obj = _contextDataList[nAux];
+
+ Step(ConvertParams(nArgs, argsptr), n, ref obj);
+ _contextDataList[nAux] = obj;
+ }
+
+ /// <summary>
+ /// An internal aggregate Final function callback, which wraps the context pointer and calls the virtual Final() method.
+ /// </summary>
+ /// <param name="context">A raw context pointer</param>
+ internal void FinalCallback(IntPtr context)
+ {
+ long n = (long)_base.AggregateContext(context);
+ object obj = null;
+
+ if (_contextDataList.ContainsKey(n))
+ {
+ obj = _contextDataList[n];
+ _contextDataList.Remove(n);
+ }
+
+ SetReturnValue(context, Final(obj));
+
+ IDisposable disp = obj as IDisposable;
+ if (disp != null) disp.Dispose();
+ }
+
+ /// <summary>
+ /// Placeholder for a user-defined disposal routine
+ /// </summary>
+ /// <param name="disposing">True if the object is being disposed explicitly</param>
+ protected virtual void Dispose(bool disposing)
+ {
+ }
+
+ /// <summary>
+ /// Disposes of any active contextData variables that were not automatically cleaned up. Sometimes this can happen if
+ /// someone closes the connection while a DataReader is open.
+ /// </summary>
+ public void Dispose()
+ {
+ Dispose(true);
+
+ IDisposable disp;
+
+ foreach (KeyValuePair<long, object> kv in _contextDataList)
+ {
+ disp = kv.Value as IDisposable;
+ if (disp != null)
+ disp.Dispose();
+ }
+ _contextDataList.Clear();
+
+ _InvokeFunc = null;
+ _StepFunc = null;
+ _FinalFunc = null;
+ _CompareFunc = null;
+ _base = null;
+ _contextDataList = null;
+
+ GC.SuppressFinalize(this);
+ }
+
+#if !PLATFORM_COMPACTFRAMEWORK
+ /// <summary>
+ /// Using reflection, enumerate all assemblies in the current appdomain looking for classes that
+ /// have a SqliteFunctionAttribute attribute, and registering them accordingly.
+ /// </summary>
+ static SqliteFunction()
+ {
+ SqliteFunctionAttribute at;
+ System.Reflection.Assembly[] arAssemblies = System.AppDomain.CurrentDomain.GetAssemblies();
+ int w = arAssemblies.Length;
+ System.Reflection.AssemblyName sqlite = System.Reflection.Assembly.GetCallingAssembly().GetName();
+
+ for (int n = 0; n < w; n++)
+ {
+ Type[] arTypes;
+ bool found = false;
+ System.Reflection.AssemblyName[] references;
+ try
+ {
+ // Inspect only assemblies that reference SQLite
+ references = arAssemblies[n].GetReferencedAssemblies();
+ int t = references.Length;
+ for (int z = 0; z < t; z++)
+ {
+ if (references[z].Name == sqlite.Name)
+ {
+ found = true;
+ break;
+ }
+ }
+
+ if (found == false)
+ continue;
+
+ arTypes = arAssemblies[n].GetTypes();
+ }
+ catch (System.Reflection.ReflectionTypeLoadException e)
+ {
+ arTypes = e.Types;
+ }
+
+ int v = arTypes.Length;
+ for (int x = 0; x < v; x++)
+ {
+ if (arTypes[x] == null) continue;
+
+ object[] arAtt = arTypes[x].GetCustomAttributes(typeof(SqliteFunctionAttribute), false);
+ int u = arAtt.Length;
+ for (int y = 0; y < u; y++)
+ {
+ at = arAtt[y] as SqliteFunctionAttribute;
+ if (at != null)
+ {
+ at._instanceType = arTypes[x];
+ _registeredFunctions.Add(at);
+ }
+ }
+ }
+ }
+ }
+#else
+ /// <summary>
+ /// Manual method of registering a function. The type must still have the SqliteFunctionAttributes in order to work
+ /// properly, but this is a workaround for the Compact Framework where enumerating assemblies is not currently supported.
+ /// </summary>
+ /// <param name="typ">The type of the function to register</param>
+ public static void RegisterFunction(Type typ)
+ {
+ object[] arAtt = typ.GetCustomAttributes(typeof(SqliteFunctionAttribute), false);
+ int u = arAtt.Length;
+ SqliteFunctionAttribute at;
+
+ for (int y = 0; y < u; y++)
+ {
+ at = arAtt[y] as SqliteFunctionAttribute;
+ if (at != null)
+ {
+ at._instanceType = typ;
+ _registeredFunctions.Add(at);
+ }
+ }
+ }
+#endif
+
+ /// <summary>
+ /// Called by SqliteBase derived classes, this function binds all user-defined functions to a connection.
+ /// It is done this way so that all user-defined functions will access the database using the same encoding scheme
+ /// as the connection (UTF-8 or UTF-16).
+ /// </summary>
+ /// <param name="sqlbase">The base object on which the functions are to bind</param>
+ /// <returns>Returns an array of functions which the connection object should retain until the connection is closed.</returns>
+ internal static SqliteFunction[] BindFunctions(SqliteBase sqlbase)
+ {
+ SqliteFunction f;
+ List<SqliteFunction> lFunctions = new List<SqliteFunction>();
+
+ foreach (SqliteFunctionAttribute pr in _registeredFunctions)
+ {
+ f = (SqliteFunction)Activator.CreateInstance(pr._instanceType);
+ f._base = sqlbase;
+ f._InvokeFunc = (pr.FuncType == FunctionType.Scalar) ? new SqliteCallback(f.ScalarCallback) : null;
+ f._StepFunc = (pr.FuncType == FunctionType.Aggregate) ? new SqliteCallback(f.StepCallback) : null;
+ f._FinalFunc = (pr.FuncType == FunctionType.Aggregate) ? new SqliteFinalCallback(f.FinalCallback) : null;
+ f._CompareFunc = (pr.FuncType == FunctionType.Collation) ? new SqliteCollation(f.CompareCallback) : null;
+
+ if (pr.FuncType != FunctionType.Collation)
+ sqlbase.CreateFunction(pr.Name, pr.Arguments, f._InvokeFunc, f._StepFunc, f._FinalFunc);
+ else
+ sqlbase.CreateCollation(pr.Name, f._CompareFunc);
+ lFunctions.Add(f);
+ }
+
+ SqliteFunction[] arFunctions = new SqliteFunction[lFunctions.Count];
+ lFunctions.CopyTo(arFunctions, 0);
+
+ return arFunctions;
+
+ }
+ }
+}
+#endif
diff --git a/lib/Hyena/src/Mono.Data.Sqlite/Mono.Data.Sqlite/SQLiteFunctionAttribute.cs b/lib/Hyena/src/Mono.Data.Sqlite/Mono.Data.Sqlite/SQLiteFunctionAttribute.cs
new file mode 100644
index 0000000..bd774b6
--- /dev/null
+++ b/lib/Hyena/src/Mono.Data.Sqlite/Mono.Data.Sqlite/SQLiteFunctionAttribute.cs
@@ -0,0 +1,96 @@
+//
+// Mono.Data.Sqlite.SQLiteFunctionAttribute.cs
+//
+// Author(s):
+// Robert Simpson (robert at blackcastlesoft.com)
+//
+// Adapted and modified for the Mono Project by
+// Marek Habersack (grendello at gmail.com)
+//
+//
+// Copyright (C) 2006 Novell, Inc (http://www.novell.com)
+// Copyright (C) 2007 Marek Habersack
+//
+// Permission is hereby granted, free of charge, to any person obtaining
+// a copy of this software and associated documentation files (the
+// "Software"), to deal in the Software without restriction, including
+// without limitation the rights to use, copy, modify, merge, publish,
+// distribute, sublicense, and/or sell copies of the Software, and to
+// permit persons to whom the Software is furnished to do so, subject to
+// the following conditions:
+//
+// The above copyright notice and this permission notice shall be
+// included in all copies or substantial portions of the Software.
+//
+// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
+// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
+// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
+// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+//
+
+/********************************************************
+ * ADO.NET 2.0 Data Provider for Sqlite Version 3.X
+ * Written by Robert Simpson (robert at blackcastlesoft.com)
+ *
+ * Released to the public domain, use at your own risk!
+ ********************************************************/
+#if NET_2_0
+namespace Mono.Data.Sqlite
+{
+ using System;
+ using System.Runtime.InteropServices;
+
+ /// <summary>
+ /// A simple custom attribute to enable us to easily find user-defined functions in
+ /// the loaded assemblies and initialize them in Sqlite as connections are made.
+ /// </summary>
+ [AttributeUsage(AttributeTargets.Class, Inherited = false, AllowMultiple = true)]
+ public class SqliteFunctionAttribute : Attribute
+ {
+ private string _name;
+ private int _arguments;
+ private FunctionType _functionType;
+ internal Type _instanceType;
+
+ /// <summary>
+ /// Default constructor, initializes the internal variables for the function.
+ /// </summary>
+ public SqliteFunctionAttribute()
+ {
+ Name = "";
+ Arguments = -1;
+ FuncType = FunctionType.Scalar;
+ }
+
+ /// <summary>
+ /// The function's name as it will be used in Sqlite command text.
+ /// </summary>
+ public string Name
+ {
+ get { return _name; }
+ set { _name = value; }
+ }
+
+ /// <summary>
+ /// The number of arguments this function expects. -1 if the number of arguments is variable.
+ /// </summary>
+ public int Arguments
+ {
+ get { return _arguments; }
+ set { _arguments = value; }
+ }
+
+ /// <summary>
+ /// The type of function this implementation will be.
+ /// </summary>
+ public FunctionType FuncType
+ {
+ get { return _functionType; }
+ set { _functionType = value; }
+ }
+ }
+}
+#endif
diff --git a/lib/Hyena/src/Mono.Data.Sqlite/Mono.Data.Sqlite/SQLiteMetaDataCollectionNames.cs b/lib/Hyena/src/Mono.Data.Sqlite/Mono.Data.Sqlite/SQLiteMetaDataCollectionNames.cs
new file mode 100644
index 0000000..abebe04
--- /dev/null
+++ b/lib/Hyena/src/Mono.Data.Sqlite/Mono.Data.Sqlite/SQLiteMetaDataCollectionNames.cs
@@ -0,0 +1,84 @@
+//
+// Mono.Data.Sqlite.SQLiteMetaDataCollectionNames.cs
+//
+// Author(s):
+// Robert Simpson (robert at blackcastlesoft.com)
+//
+// Adapted and modified for the Mono Project by
+// Marek Habersack (grendello at gmail.com)
+//
+//
+// Copyright (C) 2006 Novell, Inc (http://www.novell.com)
+// Copyright (C) 2007 Marek Habersack
+//
+// Permission is hereby granted, free of charge, to any person obtaining
+// a copy of this software and associated documentation files (the
+// "Software"), to deal in the Software without restriction, including
+// without limitation the rights to use, copy, modify, merge, publish,
+// distribute, sublicense, and/or sell copies of the Software, and to
+// permit persons to whom the Software is furnished to do so, subject to
+// the following conditions:
+//
+// The above copyright notice and this permission notice shall be
+// included in all copies or substantial portions of the Software.
+//
+// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
+// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
+// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
+// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+//
+
+/********************************************************
+ * ADO.NET 2.0 Data Provider for Sqlite Version 3.X
+ * Written by Robert Simpson (robert at blackcastlesoft.com)
+ *
+ * Released to the public domain, use at your own risk!
+ ********************************************************/
+#if NET_2_0
+namespace Mono.Data.Sqlite
+{
+ using System;
+
+ /// <summary>
+ /// MetaDataCollections specific to Sqlite
+ /// </summary>
+ public static class SqliteMetaDataCollectionNames
+ {
+ /// <summary>
+ /// Returns a list of databases attached to the connection
+ /// </summary>
+ public static readonly string Catalogs = "Catalogs";
+ /// <summary>
+ /// Returns column information for the specified table
+ /// </summary>
+ public static readonly string Columns = "Columns";
+ /// <summary>
+ /// Returns index information for the optionally-specified table
+ /// </summary>
+ public static readonly string Indexes = "Indexes";
+ /// <summary>
+ /// Returns base columns for the given index
+ /// </summary>
+ public static readonly string IndexColumns = "IndexColumns";
+ /// <summary>
+ /// Returns the tables in the given catalog
+ /// </summary>
+ public static readonly string Tables = "Tables";
+ /// <summary>
+ /// Returns user-defined views in the given catalog
+ /// </summary>
+ public static readonly string Views = "Views";
+ /// <summary>
+ /// Returns underlying column information on the given view
+ /// </summary>
+ public static readonly string ViewColumns = "ViewColumns";
+ /// <summary>
+ /// Returns foreign key information for the given catalog
+ /// </summary>
+ public static readonly string ForeignKeys = "ForeignKeys";
+ }
+}
+#endif
diff --git a/lib/Hyena/src/Mono.Data.Sqlite/Mono.Data.Sqlite/SQLiteParameter.cs b/lib/Hyena/src/Mono.Data.Sqlite/Mono.Data.Sqlite/SQLiteParameter.cs
new file mode 100644
index 0000000..4dba90f
--- /dev/null
+++ b/lib/Hyena/src/Mono.Data.Sqlite/Mono.Data.Sqlite/SQLiteParameter.cs
@@ -0,0 +1,481 @@
+//
+// Mono.Data.Sqlite.SQLiteParameter.cs
+//
+// Author(s):
+// Robert Simpson (robert at blackcastlesoft.com)
+//
+// Adapted and modified for the Mono Project by
+// Marek Habersack (grendello at gmail.com)
+//
+//
+// Copyright (C) 2006 Novell, Inc (http://www.novell.com)
+// Copyright (C) 2007 Marek Habersack
+//
+// Permission is hereby granted, free of charge, to any person obtaining
+// a copy of this software and associated documentation files (the
+// "Software"), to deal in the Software without restriction, including
+// without limitation the rights to use, copy, modify, merge, publish,
+// distribute, sublicense, and/or sell copies of the Software, and to
+// permit persons to whom the Software is furnished to do so, subject to
+// the following conditions:
+//
+// The above copyright notice and this permission notice shall be
+// included in all copies or substantial portions of the Software.
+//
+// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
+// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
+// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
+// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+//
+
+/********************************************************
+ * ADO.NET 2.0 Data Provider for Sqlite Version 3.X
+ * Written by Robert Simpson (robert at blackcastlesoft.com)
+ *
+ * Released to the public domain, use at your own risk!
+ ********************************************************/
+#if NET_2_0
+namespace Mono.Data.Sqlite
+{
+ using System;
+ using System.Data;
+ using System.Data.Common;
+ using System.ComponentModel;
+
+ /// <summary>
+ /// Sqlite implementation of DbParameter.
+ /// </summary>
+ public sealed class SqliteParameter : DbParameter, ICloneable
+ {
+ /// <summary>
+ /// The data type of the parameter
+ /// </summary>
+ internal int _dbType;
+ /// <summary>
+ /// The version information for mapping the parameter
+ /// </summary>
+ private DataRowVersion _rowVersion;
+ /// <summary>
+ /// The value of the data in the parameter
+ /// </summary>
+ private Object _objValue;
+ /// <summary>
+ /// The source column for the parameter
+ /// </summary>
+ private string _sourceColumn;
+ /// <summary>
+ /// The column name
+ /// </summary>
+ private string _parameterName;
+ /// <summary>
+ /// The data size, unused by Sqlite
+ /// </summary>
+ private int _dataSize;
+
+ private bool _nullable;
+ private bool _nullMapping;
+
+ /// <summary>
+ /// Default constructor
+ /// </summary>
+ public SqliteParameter()
+ : this(null, (DbType)(-1), 0, null, DataRowVersion.Current)
+ {
+ }
+
+ /// <summary>
+ /// Constructs a named parameter given the specified parameter name
+ /// </summary>
+ /// <param name="parameterName">The parameter name</param>
+ public SqliteParameter(string parameterName)
+ : this(parameterName, (DbType)(-1), 0, null, DataRowVersion.Current)
+ {
+ }
+
+ /// <summary>
+ /// Constructs a named parameter given the specified parameter name and initial value
+ /// </summary>
+ /// <param name="parameterName">The parameter name</param>
+ /// <param name="value">The initial value of the parameter</param>
+ public SqliteParameter(string parameterName, object value)
+ : this(parameterName, (DbType)(-1), 0, null, DataRowVersion.Current)
+ {
+ Value = value;
+ }
+
+ /// <summary>
+ /// Constructs a named parameter of the specified type
+ /// </summary>
+ /// <param name="parameterName">The parameter name</param>
+ /// <param name="dbType">The datatype of the parameter</param>
+ public SqliteParameter(string parameterName, DbType dbType)
+ : this(parameterName, dbType, 0, null, DataRowVersion.Current)
+ {
+ }
+
+ /// <summary>
+ /// Constructs a named parameter of the specified type and source column reference
+ /// </summary>
+ /// <param name="parameterName">The parameter name</param>
+ /// <param name="dbType">The data type</param>
+ /// <param name="sourceColumn">The source column</param>
+ public SqliteParameter(string parameterName, DbType dbType, string sourceColumn)
+ : this(parameterName, dbType, 0, sourceColumn, DataRowVersion.Current)
+ {
+ }
+
+ /// <summary>
+ /// Constructs a named parameter of the specified type, source column and row version
+ /// </summary>
+ /// <param name="parameterName">The parameter name</param>
+ /// <param name="dbType">The data type</param>
+ /// <param name="sourceColumn">The source column</param>
+ /// <param name="rowVersion">The row version information</param>
+ public SqliteParameter(string parameterName, DbType dbType, string sourceColumn, DataRowVersion rowVersion)
+ : this(parameterName, dbType, 0, sourceColumn, rowVersion)
+ {
+ }
+
+ /// <summary>
+ /// Constructs an unnamed parameter of the specified data type
+ /// </summary>
+ /// <param name="dbType">The datatype of the parameter</param>
+ public SqliteParameter(DbType dbType)
+ : this(null, dbType, 0, null, DataRowVersion.Current)
+ {
+ }
+
+ /// <summary>
+ /// Constructs an unnamed parameter of the specified data type and sets the initial value
+ /// </summary>
+ /// <param name="dbType">The datatype of the parameter</param>
+ /// <param name="value">The initial value of the parameter</param>
+ public SqliteParameter(DbType dbType, object value)
+ : this(null, dbType, 0, null, DataRowVersion.Current)
+ {
+ Value = value;
+ }
+
+ /// <summary>
+ /// Constructs an unnamed parameter of the specified data type and source column
+ /// </summary>
+ /// <param name="dbType">The datatype of the parameter</param>
+ /// <param name="sourceColumn">The source column</param>
+ public SqliteParameter(DbType dbType, string sourceColumn)
+ : this(null, dbType, 0, sourceColumn, DataRowVersion.Current)
+ {
+ }
+
+ /// <summary>
+ /// Constructs an unnamed parameter of the specified data type, source column and row version
+ /// </summary>
+ /// <param name="dbType">The data type</param>
+ /// <param name="sourceColumn">The source column</param>
+ /// <param name="rowVersion">The row version information</param>
+ public SqliteParameter(DbType dbType, string sourceColumn, DataRowVersion rowVersion)
+ : this(null, dbType, 0, sourceColumn, rowVersion)
+ {
+ }
+
+ /// <summary>
+ /// Constructs a named parameter of the specified type and size
+ /// </summary>
+ /// <param name="parameterName">The parameter name</param>
+ /// <param name="parameterType">The data type</param>
+ /// <param name="parameterSize">The size of the parameter</param>
+ public SqliteParameter(string parameterName, DbType parameterType, int parameterSize)
+ : this(parameterName, parameterType, parameterSize, null, DataRowVersion.Current)
+ {
+ }
+
+ /// <summary>
+ /// Constructs a named parameter of the specified type, size and source column
+ /// </summary>
+ /// <param name="parameterName">The name of the parameter</param>
+ /// <param name="parameterType">The data type</param>
+ /// <param name="parameterSize">The size of the parameter</param>
+ /// <param name="sourceColumn">The source column</param>
+ public SqliteParameter(string parameterName, DbType parameterType, int parameterSize, string sourceColumn)
+ : this(parameterName, parameterType, parameterSize, sourceColumn, DataRowVersion.Current)
+ {
+ }
+
+ /// <summary>
+ /// Constructs a named parameter of the specified type, size, source column and row version
+ /// </summary>
+ /// <param name="parameterName">The name of the parameter</param>
+ /// <param name="parameterType">The data type</param>
+ /// <param name="parameterSize">The size of the parameter</param>
+ /// <param name="sourceColumn">The source column</param>
+ /// <param name="rowVersion">The row version information</param>
+ public SqliteParameter(string parameterName, DbType parameterType, int parameterSize, string sourceColumn, DataRowVersion rowVersion)
+ {
+ _parameterName = parameterName;
+ _dbType = (int)parameterType;
+ _sourceColumn = sourceColumn;
+ _rowVersion = rowVersion;
+ _objValue = null;
+ _dataSize = parameterSize;
+ _nullMapping = false;
+ _nullable = true;
+ }
+
+ private SqliteParameter(SqliteParameter source)
+ : this(source.ParameterName, (DbType)source._dbType, 0, source.Direction, source.IsNullable, 0, 0, source.SourceColumn, source.SourceVersion, source.Value)
+ {
+ _nullMapping = source._nullMapping;
+ }
+
+ /// <summary>
+ /// Constructs a named parameter of the specified type, size, source column and row version
+ /// </summary>
+ /// <param name="parameterName">The name of the parameter</param>
+ /// <param name="parameterType">The data type</param>
+ /// <param name="parameterSize">The size of the parameter</param>
+ /// <param name="direction">Only input parameters are supported in Sqlite</param>
+ /// <param name="isNullable">Ignored</param>
+ /// <param name="precision">Ignored</param>
+ /// <param name="scale">Ignored</param>
+ /// <param name="sourceColumn">The source column</param>
+ /// <param name="rowVersion">The row version information</param>
+ /// <param name="value">The initial value to assign the parameter</param>
+#if !PLATFORM_COMPACTFRAMEWORK
+ [EditorBrowsable(EditorBrowsableState.Advanced)]
+#endif
+ public SqliteParameter(string parameterName, DbType parameterType, int parameterSize, ParameterDirection direction, bool isNullable, byte precision, byte scale, string sourceColumn, DataRowVersion rowVersion, object value)
+ : this(parameterName, parameterType, parameterSize, sourceColumn, rowVersion)
+ {
+ Direction = direction;
+ IsNullable = isNullable;
+ Value = value;
+ }
+
+ /// <summary>
+ /// Constructs a named parameter, yet another flavor
+ /// </summary>
+ /// <param name="parameterName">The name of the parameter</param>
+ /// <param name="parameterType">The data type</param>
+ /// <param name="parameterSize">The size of the parameter</param>
+ /// <param name="direction">Only input parameters are supported in Sqlite</param>
+ /// <param name="precision">Ignored</param>
+ /// <param name="scale">Ignored</param>
+ /// <param name="sourceColumn">The source column</param>
+ /// <param name="rowVersion">The row version information</param>
+ /// <param name="sourceColumnNullMapping">Whether or not this parameter is for comparing NULL's</param>
+ /// <param name="value">The intial value to assign the parameter</param>
+#if !PLATFORM_COMPACTFRAMEWORK
+ [EditorBrowsable(EditorBrowsableState.Advanced)]
+#endif
+ public SqliteParameter(string parameterName, DbType parameterType, int parameterSize, ParameterDirection direction, byte precision, byte scale, string sourceColumn, DataRowVersion rowVersion, bool sourceColumnNullMapping, object value)
+ : this(parameterName, parameterType, parameterSize, sourceColumn, rowVersion)
+ {
+ Direction = direction;
+ SourceColumnNullMapping = sourceColumnNullMapping;
+ Value = value;
+ }
+
+ /// <summary>
+ /// Constructs an unnamed parameter of the specified type and size
+ /// </summary>
+ /// <param name="parameterType">The data type</param>
+ /// <param name="parameterSize">The size of the parameter</param>
+ public SqliteParameter(DbType parameterType, int parameterSize)
+ : this(null, parameterType, parameterSize, null, DataRowVersion.Current)
+ {
+ }
+
+ /// <summary>
+ /// Constructs an unnamed parameter of the specified type, size, and source column
+ /// </summary>
+ /// <param name="parameterType">The data type</param>
+ /// <param name="parameterSize">The size of the parameter</param>
+ /// <param name="sourceColumn">The source column</param>
+ public SqliteParameter(DbType parameterType, int parameterSize, string sourceColumn)
+ : this(null, parameterType, parameterSize, sourceColumn, DataRowVersion.Current)
+ {
+ }
+
+ /// <summary>
+ /// Constructs an unnamed parameter of the specified type, size, source column and row version
+ /// </summary>
+ /// <param name="parameterType">The data type</param>
+ /// <param name="parameterSize">The size of the parameter</param>
+ /// <param name="sourceColumn">The source column</param>
+ /// <param name="rowVersion">The row version information</param>
+ public SqliteParameter(DbType parameterType, int parameterSize, string sourceColumn, DataRowVersion rowVersion)
+ : this(null, parameterType, parameterSize, sourceColumn, rowVersion)
+ {
+ }
+
+ /// <summary>
+ /// Whether or not the parameter can contain a null value
+ /// </summary>
+ public override bool IsNullable
+ {
+ get
+ {
+ return _nullable;
+ }
+ set
+ {
+ _nullable = value;
+ }
+ }
+
+ /// <summary>
+ /// Returns the datatype of the parameter
+ /// </summary>
+#if !PLATFORM_COMPACTFRAMEWORK
+ [DbProviderSpecificTypeProperty(true)]
+ [RefreshProperties(RefreshProperties.All)]
+#endif
+ public override DbType DbType
+ {
+ get
+ {
+ if (_dbType == -1) return DbType.String; // Unassigned default value is String
+ return (DbType)_dbType;
+ }
+ set
+ {
+ _dbType = (int)value;
+ }
+ }
+
+ /// <summary>
+ /// Supports only input parameters
+ /// </summary>
+ public override ParameterDirection Direction
+ {
+ get
+ {
+ return ParameterDirection.Input;
+ }
+ set
+ {
+ if (value != ParameterDirection.Input)
+ throw new NotSupportedException();
+ }
+ }
+
+ /// <summary>
+ /// Returns the parameter name
+ /// </summary>
+ public override string ParameterName
+ {
+ get
+ {
+ return _parameterName;
+ }
+ set
+ {
+ _parameterName = value;
+ }
+ }
+
+ /// <summary>
+ /// Not implemented
+ /// </summary>
+ public override void ResetDbType()
+ {
+ }
+
+ /// <summary>
+ /// Returns the size of the parameter
+ /// </summary>
+#if !PLATFORM_COMPACTFRAMEWORK
+ [DefaultValue((int)0)]
+#endif
+ public override int Size
+ {
+ get
+ {
+ return _dataSize;
+ }
+ set
+ {
+ _dataSize = value;
+ }
+ }
+
+ /// <summary>
+ /// Gets/sets the source column
+ /// </summary>
+ public override string SourceColumn
+ {
+ get
+ {
+ return _sourceColumn;
+ }
+ set
+ {
+ _sourceColumn = value;
+ }
+ }
+
+ /// <summary>
+ /// Used by DbCommandBuilder to determine the mapping for nullable fields
+ /// </summary>
+ public override bool SourceColumnNullMapping
+ {
+ get
+ {
+ return _nullMapping;
+ }
+ set
+ {
+ _nullMapping = value;
+ }
+ }
+
+ /// <summary>
+ /// Gets and sets the row version
+ /// </summary>
+ public override DataRowVersion SourceVersion
+ {
+ get
+ {
+ return _rowVersion;
+ }
+ set
+ {
+ _rowVersion = value;
+ }
+ }
+
+ /// <summary>
+ /// Gets and sets the parameter value. If no datatype was specified, the datatype will assume the type from the value given.
+ /// </summary>
+#if !PLATFORM_COMPACTFRAMEWORK
+ [TypeConverter(typeof(StringConverter)), RefreshProperties(RefreshProperties.All)]
+#endif
+ public override object Value
+ {
+ get
+ {
+ return _objValue;
+ }
+ set
+ {
+ _objValue = value;
+ if (_dbType == -1 && _objValue != null && _objValue != DBNull.Value) // If the DbType has never been assigned, try to glean one from the value's datatype
+ _dbType = (int)SqliteConvert.TypeToDbType(_objValue.GetType());
+ }
+ }
+
+ /// <summary>
+ /// Clones a parameter
+ /// </summary>
+ /// <returns>A new, unassociated SqliteParameter</returns>
+ public object Clone()
+ {
+ SqliteParameter newparam = new SqliteParameter(this);
+
+ return newparam;
+ }
+ }
+}
+#endif
diff --git a/lib/Hyena/src/Mono.Data.Sqlite/Mono.Data.Sqlite/SQLiteParameterCollection.cs b/lib/Hyena/src/Mono.Data.Sqlite/Mono.Data.Sqlite/SQLiteParameterCollection.cs
new file mode 100644
index 0000000..c0f8b0a
--- /dev/null
+++ b/lib/Hyena/src/Mono.Data.Sqlite/Mono.Data.Sqlite/SQLiteParameterCollection.cs
@@ -0,0 +1,507 @@
+//
+// Mono.Data.Sqlite.SQLiteParameterCollection.cs
+//
+// Author(s):
+// Robert Simpson (robert at blackcastlesoft.com)
+//
+// Adapted and modified for the Mono Project by
+// Marek Habersack (grendello at gmail.com)
+//
+//
+// Copyright (C) 2006 Novell, Inc (http://www.novell.com)
+// Copyright (C) 2007 Marek Habersack
+//
+// Permission is hereby granted, free of charge, to any person obtaining
+// a copy of this software and associated documentation files (the
+// "Software"), to deal in the Software without restriction, including
+// without limitation the rights to use, copy, modify, merge, publish,
+// distribute, sublicense, and/or sell copies of the Software, and to
+// permit persons to whom the Software is furnished to do so, subject to
+// the following conditions:
+//
+// The above copyright notice and this permission notice shall be
+// included in all copies or substantial portions of the Software.
+//
+// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
+// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
+// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
+// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+//
+
+/********************************************************
+ * ADO.NET 2.0 Data Provider for Sqlite Version 3.X
+ * Written by Robert Simpson (robert at blackcastlesoft.com)
+ *
+ * Released to the public domain, use at your own risk!
+ ********************************************************/
+#if NET_2_0
+namespace Mono.Data.Sqlite
+{
+ using System;
+ using System.Data;
+ using System.Data.Common;
+ using System.Collections.Generic;
+ using System.Globalization;
+ using System.ComponentModel;
+ using System.Reflection;
+
+ /// <summary>
+ /// Sqlite implementation of DbParameterCollection.
+ /// </summary>
+#if !PLATFORM_COMPACTFRAMEWORK
+ [Editor("Microsoft.VSDesigner.Data.Design.DBParametersEditor, Microsoft.VSDesigner, Version=8.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a", "System.Drawing.Design.UITypeEditor, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a"), ListBindable(false)]
+#endif
+ public sealed class SqliteParameterCollection : DbParameterCollection
+ {
+ /// <summary>
+ /// The underlying command to which this collection belongs
+ /// </summary>
+ private SqliteCommand _command;
+ /// <summary>
+ /// The internal array of parameters in this collection
+ /// </summary>
+ private List<SqliteParameter> _parameterList;
+ /// <summary>
+ /// Determines whether or not all parameters have been bound to their statement(s)
+ /// </summary>
+ private bool _unboundFlag;
+
+ /// <summary>
+ /// Initializes the collection
+ /// </summary>
+ /// <param name="cmd">The command to which the collection belongs</param>
+ internal SqliteParameterCollection(SqliteCommand cmd)
+ {
+ _command = cmd;
+ _parameterList = new List<SqliteParameter>();
+ _unboundFlag = true;
+ }
+
+ /// <summary>
+ /// Returns true
+ /// </summary>
+ public override bool IsSynchronized
+ {
+ get { return true; }
+ }
+
+ /// <summary>
+ /// Returns false
+ /// </summary>
+ public override bool IsFixedSize
+ {
+ get { return false; }
+ }
+
+ /// <summary>
+ /// Returns false
+ /// </summary>
+ public override bool IsReadOnly
+ {
+ get { return false; }
+ }
+
+ /// <summary>
+ /// Returns null
+ /// </summary>
+ public override object SyncRoot
+ {
+ get { return null; }
+ }
+
+ /// <summary>
+ /// Retrieves an enumerator for the collection
+ /// </summary>
+ /// <returns>An enumerator for the underlying array</returns>
+ public override System.Collections.IEnumerator GetEnumerator()
+ {
+ return _parameterList.GetEnumerator();
+ }
+
+ /// <summary>
+ /// Adds a parameter to the collection
+ /// </summary>
+ /// <param name="parameterName">The parameter name</param>
+ /// <param name="parameterType">The data type</param>
+ /// <param name="parameterSize">The size of the value</param>
+ /// <param name="sourceColumn">The source column</param>
+ /// <returns>A SqliteParameter object</returns>
+ public SqliteParameter Add(string parameterName, DbType parameterType, int parameterSize, string sourceColumn)
+ {
+ SqliteParameter param = new SqliteParameter(parameterName, parameterType, parameterSize, sourceColumn);
+ Add(param);
+
+ return param;
+ }
+
+ /// <summary>
+ /// Adds a parameter to the collection
+ /// </summary>
+ /// <param name="parameterName">The parameter name</param>
+ /// <param name="parameterType">The data type</param>
+ /// <param name="parameterSize">The size of the value</param>
+ /// <returns>A SqliteParameter object</returns>
+ public SqliteParameter Add(string parameterName, DbType parameterType, int parameterSize)
+ {
+ SqliteParameter param = new SqliteParameter(parameterName, parameterType, parameterSize);
+ Add(param);
+
+ return param;
+ }
+
+ /// <summary>
+ /// Adds a parameter to the collection
+ /// </summary>
+ /// <param name="parameterName">The parameter name</param>
+ /// <param name="parameterType">The data type</param>
+ /// <returns>A SqliteParameter object</returns>
+ public SqliteParameter Add(string parameterName, DbType parameterType)
+ {
+ SqliteParameter param = new SqliteParameter(parameterName, parameterType);
+ Add(param);
+
+ return param;
+ }
+
+ /// <summary>
+ /// Adds a parameter to the collection
+ /// </summary>
+ /// <param name="parameter">The parameter to add</param>
+ /// <returns>A zero-based index of where the parameter is located in the array</returns>
+ public int Add(SqliteParameter parameter)
+ {
+ int n = -1;
+
+ if (parameter.ParameterName != null)
+ {
+ n = IndexOf(parameter.ParameterName);
+ }
+
+ if (n == -1)
+ {
+ n = _parameterList.Count;
+ _parameterList.Add((SqliteParameter)parameter);
+ }
+
+ SetParameter(n, parameter);
+
+ return n;
+ }
+
+ /// <summary>
+ /// Adds a parameter to the collection
+ /// </summary>
+ /// <param name="value">The parameter to add</param>
+ /// <returns>A zero-based index of where the parameter is located in the array</returns>
+#if !PLATFORM_COMPACTFRAMEWORK
+ [EditorBrowsable(EditorBrowsableState.Never)]
+#endif
+ public override int Add(object value)
+ {
+ return Add((SqliteParameter)value);
+ }
+
+ /// <summary>
+ /// Adds a named/unnamed parameter and its value to the parameter collection.
+ /// </summary>
+ /// <param name="parameterName">Name of the parameter, or null to indicate an unnamed parameter</param>
+ /// <param name="value">The initial value of the parameter</param>
+ /// <returns>Returns the SqliteParameter object created during the call.</returns>
+ public SqliteParameter AddWithValue(string parameterName, object value)
+ {
+ SqliteParameter param = new SqliteParameter(parameterName, value);
+ Add(param);
+
+ return param;
+ }
+
+ /// <summary>
+ /// Adds an array of parameters to the collection
+ /// </summary>
+ /// <param name="values">The array of parameters to add</param>
+ public void AddRange(SqliteParameter[] values)
+ {
+ int x = values.Length;
+ for (int n = 0; n < x; n++)
+ Add(values[n]);
+ }
+
+ /// <summary>
+ /// Adds an array of parameters to the collection
+ /// </summary>
+ /// <param name="values">The array of parameters to add</param>
+ public override void AddRange(Array values)
+ {
+ int x = values.Length;
+ for (int n = 0; n < x; n++)
+ Add((SqliteParameter)(values.GetValue(n)));
+ }
+
+ /// <summary>
+ /// Clears the array and resets the collection
+ /// </summary>
+ public override void Clear()
+ {
+ _unboundFlag = true;
+ _parameterList.Clear();
+ }
+
+ /// <summary>
+ /// Determines if the named parameter exists in the collection
+ /// </summary>
+ /// <param name="parameterName">The name of the parameter to check</param>
+ /// <returns>True if the parameter is in the collection</returns>
+ public override bool Contains(string parameterName)
+ {
+ return (IndexOf(parameterName) != -1);
+ }
+
+ /// <summary>
+ /// Determines if the parameter exists in the collection
+ /// </summary>
+ /// <param name="value">The SqliteParameter to check</param>
+ /// <returns>True if the parameter is in the collection</returns>
+ public override bool Contains(object value)
+ {
+ return _parameterList.Contains((SqliteParameter)value);
+ }
+
+ /// <summary>
+ /// Not implemented
+ /// </summary>
+ /// <param name="array"></param>
+ /// <param name="index"></param>
+ public override void CopyTo(Array array, int index)
+ {
+ throw new NotImplementedException();
+ }
+
+ /// <summary>
+ /// Returns a count of parameters in the collection
+ /// </summary>
+ public override int Count
+ {
+ get { return _parameterList.Count; }
+ }
+
+ /// <summary>
+ /// Overloaded to specialize the return value of the default indexer
+ /// </summary>
+ /// <param name="parameterName">Name of the parameter to get/set</param>
+ /// <returns>The specified named Sqlite parameter</returns>
+ public new SqliteParameter this[string parameterName]
+ {
+ get
+ {
+ return (SqliteParameter)GetParameter(parameterName);
+ }
+ set
+ {
+ SetParameter(parameterName, value);
+ }
+ }
+
+ /// <summary>
+ /// Overloaded to specialize the return value of the default indexer
+ /// </summary>
+ /// <param name="index">The index of the parameter to get/set</param>
+ /// <returns>The specified Sqlite parameter</returns>
+ public new SqliteParameter this[int index]
+ {
+ get
+ {
+ return (SqliteParameter)GetParameter(index);
+ }
+ set
+ {
+ SetParameter(index, value);
+ }
+ }
+ /// <summary>
+ /// Retrieve a parameter by name from the collection
+ /// </summary>
+ /// <param name="parameterName">The name of the parameter to fetch</param>
+ /// <returns>A DbParameter object</returns>
+ protected override DbParameter GetParameter(string parameterName)
+ {
+ return GetParameter(IndexOf(parameterName));
+ }
+
+ /// <summary>
+ /// Retrieves a parameter by its index in the collection
+ /// </summary>
+ /// <param name="index">The index of the parameter to retrieve</param>
+ /// <returns>A DbParameter object</returns>
+ protected override DbParameter GetParameter(int index)
+ {
+ return _parameterList[index];
+ }
+
+ /// <summary>
+ /// Returns the index of a parameter given its name
+ /// </summary>
+ /// <param name="parameterName">The name of the parameter to find</param>
+ /// <returns>-1 if not found, otherwise a zero-based index of the parameter</returns>
+ public override int IndexOf(string parameterName)
+ {
+ int x = _parameterList.Count;
+ for (int n = 0; n < x; n++)
+ {
+ if (String.Compare(parameterName, _parameterList[n].ParameterName, true, CultureInfo.InvariantCulture) == 0)
+ return n;
+ }
+ return -1;
+ }
+
+ /// <summary>
+ /// Returns the index of a parameter
+ /// </summary>
+ /// <param name="value">The parameter to find</param>
+ /// <returns>-1 if not found, otherwise a zero-based index of the parameter</returns>
+ public override int IndexOf(object value)
+ {
+ return _parameterList.IndexOf((SqliteParameter)value);
+ }
+
+ /// <summary>
+ /// Inserts a parameter into the array at the specified location
+ /// </summary>
+ /// <param name="index">The zero-based index to insert the parameter at</param>
+ /// <param name="value">The parameter to insert</param>
+ public override void Insert(int index, object value)
+ {
+ _unboundFlag = true;
+ _parameterList.Insert(index, (SqliteParameter)value);
+ }
+
+ /// <summary>
+ /// Removes a parameter from the collection
+ /// </summary>
+ /// <param name="value">The parameter to remove</param>
+ public override void Remove(object value)
+ {
+ _unboundFlag = true;
+ _parameterList.Remove((SqliteParameter)value);
+ }
+
+ /// <summary>
+ /// Removes a parameter from the collection given its name
+ /// </summary>
+ /// <param name="parameterName">The name of the parameter to remove</param>
+ public override void RemoveAt(string parameterName)
+ {
+ RemoveAt(IndexOf(parameterName));
+ }
+
+ /// <summary>
+ /// Removes a parameter from the collection given its index
+ /// </summary>
+ /// <param name="index">The zero-based parameter index to remove</param>
+ public override void RemoveAt(int index)
+ {
+ _unboundFlag = true;
+ _parameterList.RemoveAt(index);
+ }
+
+ /// <summary>
+ /// Re-assign the named parameter to a new parameter object
+ /// </summary>
+ /// <param name="parameterName">The name of the parameter to replace</param>
+ /// <param name="value">The new parameter</param>
+ protected override void SetParameter(string parameterName, DbParameter value)
+ {
+ SetParameter(IndexOf(parameterName), value);
+ }
+
+ /// <summary>
+ /// Re-assign a parameter at the specified index
+ /// </summary>
+ /// <param name="index">The zero-based index of the parameter to replace</param>
+ /// <param name="value">The new parameter</param>
+ protected override void SetParameter(int index, DbParameter value)
+ {
+ _unboundFlag = true;
+ _parameterList[index] = (SqliteParameter)value;
+ }
+
+ /// <summary>
+ /// Un-binds all parameters from their statements
+ /// </summary>
+ internal void Unbind()
+ {
+ _unboundFlag = true;
+ }
+
+ /// <summary>
+ /// This function attempts to map all parameters in the collection to all statements in a Command.
+ /// Since named parameters may span multiple statements, this function makes sure all statements are bound
+ /// to the same named parameter. Unnamed parameters are bound in sequence.
+ /// </summary>
+ internal void MapParameters(SqliteStatement activeStatement)
+ {
+ if (_unboundFlag == false || _parameterList.Count == 0 || _command._statementList == null) return;
+
+ int nUnnamed = 0;
+ string s;
+ int n;
+ int y = -1;
+ SqliteStatement stmt;
+
+ foreach(SqliteParameter p in _parameterList)
+ {
+ y ++;
+ s = p.ParameterName;
+ if (s == null)
+ {
+ s = String.Format(CultureInfo.InvariantCulture, ";{0}", nUnnamed);
+ nUnnamed++;
+ }
+
+ int x;
+ bool isMapped = false;
+
+ if (activeStatement == null)
+ x = _command._statementList.Count;
+ else
+ x = 1;
+
+ stmt = activeStatement;
+ for (n = 0; n < x; n++)
+ {
+ isMapped = false;
+ if (stmt == null) stmt = _command._statementList[n];
+ if (stmt._paramNames != null)
+ {
+ if (stmt.MapParameter(s, p) == true)
+ isMapped = true;
+ }
+ stmt = null;
+ }
+
+ // If the parameter has a name, but the SQL statement uses unnamed references, this can happen -- attempt to map
+ // the parameter by its index in the collection
+ if (isMapped == false)
+ {
+ s = String.Format(CultureInfo.InvariantCulture, ";{0}", y);
+
+ stmt = activeStatement;
+ for (n = 0; n < x; n++)
+ {
+ if (stmt == null) stmt = _command._statementList[n];
+ if (stmt._paramNames != null)
+ {
+ if (stmt.MapParameter(s, p) == true)
+ isMapped = true;
+ }
+ stmt = null;
+ }
+ }
+ }
+ if (activeStatement == null) _unboundFlag = false;
+ }
+ }
+}
+#endif
diff --git a/lib/Hyena/src/Mono.Data.Sqlite/Mono.Data.Sqlite/SQLiteStatement.cs b/lib/Hyena/src/Mono.Data.Sqlite/Mono.Data.Sqlite/SQLiteStatement.cs
new file mode 100644
index 0000000..d12f72c
--- /dev/null
+++ b/lib/Hyena/src/Mono.Data.Sqlite/Mono.Data.Sqlite/SQLiteStatement.cs
@@ -0,0 +1,281 @@
+//
+// Mono.Data.Sqlite.SQLiteStatement.cs
+//
+// Author(s):
+// Robert Simpson (robert at blackcastlesoft.com)
+//
+// Adapted and modified for the Mono Project by
+// Marek Habersack (grendello at gmail.com)
+//
+//
+// Copyright (C) 2006 Novell, Inc (http://www.novell.com)
+// Copyright (C) 2007 Marek Habersack
+//
+// Permission is hereby granted, free of charge, to any person obtaining
+// a copy of this software and associated documentation files (the
+// "Software"), to deal in the Software without restriction, including
+// without limitation the rights to use, copy, modify, merge, publish,
+// distribute, sublicense, and/or sell copies of the Software, and to
+// permit persons to whom the Software is furnished to do so, subject to
+// the following conditions:
+//
+// The above copyright notice and this permission notice shall be
+// included in all copies or substantial portions of the Software.
+//
+// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
+// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
+// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
+// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+//
+
+/********************************************************
+ * ADO.NET 2.0 Data Provider for Sqlite Version 3.X
+ * Written by Robert Simpson (robert at blackcastlesoft.com)
+ *
+ * Released to the public domain, use at your own risk!
+ ********************************************************/
+#if NET_2_0
+namespace Mono.Data.Sqlite
+{
+ using System;
+ using System.Data;
+ using System.Collections.Generic;
+ using System.Globalization;
+
+ /// <summary>
+ /// Represents a single SQL statement in Sqlite.
+ /// </summary>
+ internal sealed class SqliteStatement : IDisposable
+ {
+ /// <summary>
+ /// The underlying Sqlite object this statement is bound to
+ /// </summary>
+ internal SqliteBase _sql;
+ /// <summary>
+ /// The command text of this SQL statement
+ /// </summary>
+ internal string _sqlStatement;
+ /// <summary>
+ /// The actual statement pointer
+ /// </summary>
+ internal IntPtr _sqlite_stmt;
+ /// <summary>
+ /// An index from which unnamed parameters begin
+ /// </summary>
+ internal int _unnamedParameters;
+ /// <summary>
+ /// Names of the parameters as Sqlite understands them to be
+ /// </summary>
+ internal string[] _paramNames;
+ /// <summary>
+ /// Parameters for this statement
+ /// </summary>
+ internal SqliteParameter[] _paramValues;
+ /// <summary>
+ /// Command this statement belongs to (if any)
+ /// </summary>
+ internal SqliteCommand _command;
+
+ private string[] _types;
+
+ /// <summary>
+ /// Initializes the statement and attempts to get all information about parameters in the statement
+ /// </summary>
+ /// <param name="sqlbase">The base Sqlite object</param>
+ /// <param name="stmt">The statement</param>
+ /// <param name="strCommand">The command text for this statement</param>
+ /// <param name="previous">The previous command in a multi-statement command</param>
+ internal SqliteStatement(SqliteBase sqlbase, IntPtr stmt, string strCommand, SqliteStatement previous)
+ {
+ _sql = sqlbase;
+ _sqlite_stmt = stmt;
+ _sqlStatement = strCommand;
+
+ // Determine parameters for this statement (if any) and prepare space for them.
+ int nCmdStart = 0;
+ int n = _sql.Bind_ParamCount(this);
+ int x;
+ string s;
+
+ if (n > 0)
+ {
+ if (previous != null)
+ nCmdStart = previous._unnamedParameters;
+
+ _paramNames = new string[n];
+ _paramValues = new SqliteParameter[n];
+
+ for (x = 0; x < n; x++)
+ {
+ s = _sql.Bind_ParamName(this, x + 1);
+ if (String.IsNullOrEmpty(s))
+ {
+ s = String.Format(CultureInfo.InvariantCulture, ";{0}", nCmdStart);
+ nCmdStart++;
+ _unnamedParameters++;
+ }
+ _paramNames[x] = s;
+ _paramValues[x] = null;
+ }
+ }
+ }
+
+ /// <summary>
+ /// Called by SqliteParameterCollection, this function determines if the specified parameter name belongs to
+ /// this statement, and if so, keeps a reference to the parameter so it can be bound later.
+ /// </summary>
+ /// <param name="s">The parameter name to map</param>
+ /// <param name="p">The parameter to assign it</param>
+ internal bool MapParameter(string s, SqliteParameter p)
+ {
+ if (_paramNames == null) return false;
+
+ int startAt = 0;
+ if (s.Length > 0)
+ {
+ if (":$@;".IndexOf(s[0]) == -1)
+ startAt = 1;
+ }
+
+ int x = _paramNames.Length;
+ for (int n = 0; n < x; n++)
+ {
+ if (String.Compare(_paramNames[n], startAt, s, 0, Math.Max(_paramNames[n].Length - startAt, s.Length), true, CultureInfo.InvariantCulture) == 0)
+ {
+ _paramValues[n] = p;
+ return true;
+ }
+ }
+ return false;
+ }
+
+ #region IDisposable Members
+ /// <summary>
+ /// Disposes and finalizes the statement
+ /// </summary>
+ public void Dispose()
+ {
+ _sql.FinalizeStatement(this);
+
+ _paramNames = null;
+ _paramValues = null;
+ _sql = null;
+ _sqlStatement = null;
+
+ GC.SuppressFinalize(this);
+ }
+ #endregion
+
+ /// <summary>
+ /// Bind all parameters, making sure the caller didn't miss any
+ /// </summary>
+ internal void BindParameters()
+ {
+ if (_paramNames == null) return;
+
+ int x = _paramNames.Length;
+ for (int n = 0; n < x; n++)
+ {
+ BindParameter(n + 1, _paramValues[n]);
+ }
+ }
+
+ /// <summary>
+ /// Perform the bind operation for an individual parameter
+ /// </summary>
+ /// <param name="index">The index of the parameter to bind</param>
+ /// <param name="param">The parameter we're binding</param>
+ private void BindParameter(int index, SqliteParameter param)
+ {
+ if (param == null)
+ throw new SqliteException((int)SqliteErrorCode.Error, "Insufficient parameters supplied to the command");
+
+ object obj = param.Value;
+ DbType objType = param.DbType;
+
+ if (Convert.IsDBNull(obj) || obj == null)
+ {
+ _sql.Bind_Null(this, index);
+ return;
+ }
+
+ if (objType == DbType.Object)
+ objType = SqliteConvert.TypeToDbType(obj.GetType());
+
+ switch (objType)
+ {
+ case DbType.Date:
+ case DbType.Time:
+ case DbType.DateTime:
+ _sql.Bind_DateTime(this, index, Convert.ToDateTime(obj, CultureInfo.CurrentCulture));
+ break;
+ case DbType.Int64:
+ case DbType.UInt64:
+ _sql.Bind_Int64(this, index, Convert.ToInt64(obj, CultureInfo.CurrentCulture));
+ break;
+ case DbType.Boolean:
+ case DbType.Int16:
+ case DbType.Int32:
+ case DbType.UInt16:
+ case DbType.UInt32:
+ case DbType.SByte:
+ case DbType.Byte:
+ _sql.Bind_Int32(this, index, Convert.ToInt32(obj, CultureInfo.CurrentCulture));
+ break;
+ case DbType.Single:
+ case DbType.Double:
+ case DbType.Currency:
+ case DbType.Decimal:
+ _sql.Bind_Double(this, index, Convert.ToDouble(obj, CultureInfo.CurrentCulture));
+ break;
+ case DbType.Binary:
+ _sql.Bind_Blob(this, index, (byte[])obj);
+ break;
+ case DbType.Guid:
+ if (_command.Connection._binaryGuid == true)
+ _sql.Bind_Blob(this, index, ((Guid)obj).ToByteArray());
+ else
+ _sql.Bind_Text(this, index, obj.ToString());
+
+ break;
+ default:
+ _sql.Bind_Text(this, index, obj.ToString());
+ break;
+ }
+ }
+
+ internal string[] TypeDefinitions
+ {
+ get { return _types; }
+ }
+
+ internal void SetTypes(string typedefs)
+ {
+ int pos = typedefs.IndexOf("TYPES", 0, StringComparison.OrdinalIgnoreCase);
+ if (pos == -1) throw new ArgumentOutOfRangeException();
+
+ string[] types = typedefs.Substring(pos + 6).Replace(" ", "").Replace(";", "").Replace("\"", "").Replace("[", "").Replace("]", "").Split(',', '\r', '\n', '\t');
+
+ int cols = 0;
+ int n;
+ for (n = 0; n < types.Length; n++)
+ {
+ if (String.IsNullOrEmpty(types[n]) == false)
+ cols++;
+ }
+
+ _types = new string[cols];
+
+ cols = 0;
+ for (n = 0; n < types.Length; n++)
+ {
+ if (String.IsNullOrEmpty(types[n]) == false)
+ _types[cols++] = types[n];
+ }
+ }
+ }
+}
+#endif
diff --git a/lib/Hyena/src/Mono.Data.Sqlite/Mono.Data.Sqlite/SQLiteTransaction.cs b/lib/Hyena/src/Mono.Data.Sqlite/Mono.Data.Sqlite/SQLiteTransaction.cs
new file mode 100644
index 0000000..9678f0a
--- /dev/null
+++ b/lib/Hyena/src/Mono.Data.Sqlite/Mono.Data.Sqlite/SQLiteTransaction.cs
@@ -0,0 +1,206 @@
+//
+// Mono.Data.Sqlite.SQLiteTransaction.cs
+//
+// Author(s):
+// Robert Simpson (robert at blackcastlesoft.com)
+//
+// Adapted and modified for the Mono Project by
+// Marek Habersack (grendello at gmail.com)
+//
+//
+// Copyright (C) 2006 Novell, Inc (http://www.novell.com)
+// Copyright (C) 2007 Marek Habersack
+//
+// Permission is hereby granted, free of charge, to any person obtaining
+// a copy of this software and associated documentation files (the
+// "Software"), to deal in the Software without restriction, including
+// without limitation the rights to use, copy, modify, merge, publish,
+// distribute, sublicense, and/or sell copies of the Software, and to
+// permit persons to whom the Software is furnished to do so, subject to
+// the following conditions:
+//
+// The above copyright notice and this permission notice shall be
+// included in all copies or substantial portions of the Software.
+//
+// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
+// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
+// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
+// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+//
+
+/********************************************************
+ * ADO.NET 2.0 Data Provider for Sqlite Version 3.X
+ * Written by Robert Simpson (robert at blackcastlesoft.com)
+ *
+ * Released to the public domain, use at your own risk!
+ ********************************************************/
+#if NET_2_0
+namespace Mono.Data.Sqlite
+{
+ using System;
+ using System.Data;
+ using System.Data.Common;
+
+ /// <summary>
+ /// Sqlite implementation of DbTransaction.
+ /// </summary>
+ public sealed class SqliteTransaction : DbTransaction
+ {
+ /// <summary>
+ /// The connection to which this transaction is bound
+ /// </summary>
+ internal SqliteConnection _cnn;
+ internal long _version; // Matches the version of the connection
+
+ /// <summary>
+ /// Constructs the transaction object, binding it to the supplied connection
+ /// </summary>
+ /// <param name="connection">The connection to open a transaction on</param>
+ /// <param name="deferredLock">TRUE to defer the writelock, or FALSE to lock immediately</param>
+ internal SqliteTransaction(SqliteConnection connection, bool deferredLock)
+ {
+ _cnn = connection;
+ _version = _cnn._version;
+
+ if (_cnn._transactionLevel++ == 0)
+ {
+ try
+ {
+ using (SqliteCommand cmd = _cnn.CreateCommand())
+ {
+ if (!deferredLock)
+ cmd.CommandText = "BEGIN IMMEDIATE";
+ else
+ cmd.CommandText = "BEGIN";
+
+ cmd.ExecuteNonQuery();
+ }
+ }
+ catch (SqliteException)
+ {
+ _cnn._transactionLevel--;
+ _cnn = null;
+ throw;
+ }
+ }
+ }
+
+ /// <summary>
+ /// Commits the current transaction.
+ /// </summary>
+ public override void Commit()
+ {
+ IsValid(true);
+
+ if (--_cnn._transactionLevel == 0)
+ {
+ try
+ {
+ using (SqliteCommand cmd = _cnn.CreateCommand())
+ {
+ cmd.CommandText = "COMMIT";
+ cmd.ExecuteNonQuery();
+ }
+ }
+ finally
+ {
+ _cnn = null;
+ }
+ }
+ else
+ {
+ _cnn = null;
+ }
+ }
+
+ /// <summary>
+ /// Returns the underlying connection to which this transaction applies.
+ /// </summary>
+ public new SqliteConnection Connection
+ {
+ get { return _cnn; }
+ }
+
+ /// <summary>
+ /// Forwards to the local Connection property
+ /// </summary>
+ protected override DbConnection DbConnection
+ {
+ get { return Connection; }
+ }
+
+ /// <summary>
+ /// Disposes the transaction. If it is currently active, any changes are rolled back.
+ /// </summary>
+ protected override void Dispose(bool disposing)
+ {
+ if (IsValid(false))
+ Rollback();
+
+ _cnn = null;
+
+ base.Dispose(disposing);
+ }
+
+ /// <summary>
+ /// Gets the isolation level of the transaction. Sqlite only supports Serializable transactions.
+ /// </summary>
+ public override IsolationLevel IsolationLevel
+ {
+ get { return IsolationLevel.Serializable; }
+ }
+
+ /// <summary>
+ /// Rolls back the active transaction.
+ /// </summary>
+ public override void Rollback()
+ {
+ IsValid(true);
+
+ try
+ {
+ using (SqliteCommand cmd = _cnn.CreateCommand())
+ {
+ cmd.CommandText = "ROLLBACK";
+ cmd.ExecuteNonQuery();
+ }
+ _cnn._transactionLevel = 0;
+ }
+ finally
+ {
+ _cnn = null;
+ }
+ }
+
+ internal bool IsValid(bool throwError)
+ {
+ if (_cnn == null)
+ {
+ if (throwError == true) throw new ArgumentNullException("No connection associated with this transaction");
+ else return false;
+ }
+
+ if (_cnn._transactionLevel == 0)
+ {
+ if (throwError == true) throw new SqliteException((int)SqliteErrorCode.Misuse, "No transaction is active on this connection");
+ else return false;
+ }
+ if (_cnn._version != _version)
+ {
+ if (throwError == true) throw new SqliteException((int)SqliteErrorCode.Misuse, "The connection was closed and re-opened, changes were rolled back");
+ else return false;
+ }
+ if (_cnn.State != ConnectionState.Open)
+ {
+ if (throwError == true) throw new SqliteException((int)SqliteErrorCode.Misuse, "Connection was closed");
+ else return false;
+ }
+
+ return true;
+ }
+ }
+}
+#endif
diff --git a/lib/Hyena/src/Mono.Data.Sqlite/Mono.Data.Sqlite/SR.Designer.cs b/lib/Hyena/src/Mono.Data.Sqlite/Mono.Data.Sqlite/SR.Designer.cs
new file mode 100644
index 0000000..944c047
--- /dev/null
+++ b/lib/Hyena/src/Mono.Data.Sqlite/Mono.Data.Sqlite/SR.Designer.cs
@@ -0,0 +1,148 @@
+//
+// Mono.Data.Sqlite.SR.Designer.cs
+//
+// Author(s):
+// Robert Simpson (robert at blackcastlesoft.com)
+//
+// Adapted and modified for the Mono Project by
+// Marek Habersack (grendello at gmail.com)
+//
+//
+// Copyright (C) 2006 Novell, Inc (http://www.novell.com)
+// Copyright (C) 2007 Marek Habersack
+//
+// Permission is hereby granted, free of charge, to any person obtaining
+// a copy of this software and associated documentation files (the
+// "Software"), to deal in the Software without restriction, including
+// without limitation the rights to use, copy, modify, merge, publish,
+// distribute, sublicense, and/or sell copies of the Software, and to
+// permit persons to whom the Software is furnished to do so, subject to
+// the following conditions:
+//
+// The above copyright notice and this permission notice shall be
+// included in all copies or substantial portions of the Software.
+//
+// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
+// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
+// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
+// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+//
+
+//------------------------------------------------------------------------------
+// <auto-generated>
+// This code was generated by a tool.
+// Runtime Version:2.0.50727.42
+//
+// Changes to this file may cause incorrect behavior and will be lost if
+// the code is regenerated.
+// </auto-generated>
+//------------------------------------------------------------------------------
+#if NET_2_0
+namespace Mono.Data.Sqlite {
+ using System;
+
+
+ /// <summary>
+ /// A strongly-typed resource class, for looking up localized strings, etc.
+ /// </summary>
+ // This class was auto-generated by the StronglyTypedResourceBuilder
+ // class via a tool like ResGen or Visual Studio.
+ // To add or remove a member, edit your .ResX file then rerun ResGen
+ // with the /str option, or rebuild your VS project.
+ [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "2.0.0.0")]
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+ internal class SR {
+
+ private static global::System.Resources.ResourceManager resourceMan;
+
+ private static global::System.Globalization.CultureInfo resourceCulture;
+
+ [global::System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode")]
+ internal SR() {
+ }
+
+ /// <summary>
+ /// Returns the cached ResourceManager instance used by this class.
+ /// </summary>
+ [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]
+ internal static global::System.Resources.ResourceManager ResourceManager {
+ get {
+ if (object.ReferenceEquals(resourceMan, null)) {
+ global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager("SR", typeof(SR).Assembly);
+ resourceMan = temp;
+ }
+ return resourceMan;
+ }
+ }
+
+ /// <summary>
+ /// Overrides the current thread's CurrentUICulture property for all
+ /// resource lookups using this strongly typed resource class.
+ /// </summary>
+ [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]
+ internal static global::System.Globalization.CultureInfo Culture {
+ get {
+ return resourceCulture;
+ }
+ set {
+ resourceCulture = value;
+ }
+ }
+
+ /// <summary>
+ /// Looks up a localized string similar to <?xml version="1.0" standalone="yes"?>
+ ///<DocumentElement>
+ /// <DataTypes>
+ /// <TypeName>smallint</TypeName>
+ /// <ProviderDbType>10</ProviderDbType>
+ /// <ColumnSize>5</ColumnSize>
+ /// <DataType>System.Int16</DataType>
+ /// <CreateFormat>smallint</CreateFormat>
+ /// <IsAutoIncrementable>false</IsAutoIncrementable>
+ /// <IsCaseSensitive>false</IsCaseSensitive>
+ /// <IsFixedLength>true</IsFixedLength>
+ /// <IsFixedPrecisionScale>true</IsFixedPrecisionScale>
+ /// <IsLong>false</IsLong>
+ /// <IsNullable>true</ [rest of string was truncated]";.
+ /// </summary>
+ internal static string DataTypes {
+ get {
+ return ResourceManager.GetString("DataTypes", resourceCulture);
+ }
+ }
+
+ /// <summary>
+ /// Looks up a localized string similar to ALL,ALTER,AND,AS,AUTOINCREMENT,BETWEEN,BY,CASE,CHECK,COLLATE,COMMIT,CONSTRAINT,CREATE,CROSS,DEFAULT,DEFERRABLE,DELETE,DISTINCT,DROP,ELSE,ESCAPE,EXCEPT,FOREIGN,FROM,FULL,GROUP,HAVING,IN,INDEX,INNER,INSERT,INTERSECT,INTO,IS,ISNULL,JOIN,LEFT,LIMIT,NATURAL,NOT,NOTNULL,NULL,ON,OR,ORDER,OUTER,PRIMARY,REFERENCES,RIGHT,ROLLBACK,SELECT,SET,TABLE,THEN,TO,TRANSACTION,UNION,UNIQUE,UPDATE,USING,VALUES,WHEN,WHERE.
+ /// </summary>
+ internal static string Keywords {
+ get {
+ return ResourceManager.GetString("Keywords", resourceCulture);
+ }
+ }
+
+ /// <summary>
+ /// Looks up a localized string similar to <?xml version="1.0" encoding="utf-8" ?>
+ ///<DocumentElement>
+ /// <MetaDataCollections>
+ /// <CollectionName>MetaDataCollections</CollectionName>
+ /// <NumberOfRestrictions>0</NumberOfRestrictions>
+ /// <NumberOfIdentifierParts>0</NumberOfIdentifierParts>
+ /// </MetaDataCollections>
+ /// <MetaDataCollections>
+ /// <CollectionName>DataSourceInformation</CollectionName>
+ /// <NumberOfRestrictions>0</NumberOfRestrictions>
+ /// <NumberOfIdentifierParts>0</NumberOfIdentifierParts>
+ /// </MetaDataCollections>
+ /// <MetaDataC [rest of string was truncated]";.
+ /// </summary>
+ internal static string MetaDataCollections {
+ get {
+ return ResourceManager.GetString("MetaDataCollections", resourceCulture);
+ }
+ }
+ }
+}
+#endif
diff --git a/lib/Hyena/src/Mono.Data.Sqlite/Mono.Data.Sqlite/SqliteDataSourceEnumerator.cs b/lib/Hyena/src/Mono.Data.Sqlite/Mono.Data.Sqlite/SqliteDataSourceEnumerator.cs
new file mode 100644
index 0000000..2ac1c8a
--- /dev/null
+++ b/lib/Hyena/src/Mono.Data.Sqlite/Mono.Data.Sqlite/SqliteDataSourceEnumerator.cs
@@ -0,0 +1,79 @@
+//
+// Mono.Data.Sqlite.SqliteDataSourceEnumerator.cs
+//
+// Author(s):
+// Chris Toshok (toshok at ximian.com)
+// Marek Habersack (grendello at gmail.com)
+//
+//
+// Copyright (C) 2006 Novell, Inc (http://www.novell.com)
+// Copyright (C) 2007 Marek Habersack
+//
+// Permission is hereby granted, free of charge, to any person obtaining
+// a copy of this software and associated documentation files (the
+// "Software"), to deal in the Software without restriction, including
+// without limitation the rights to use, copy, modify, merge, publish,
+// distribute, sublicense, and/or sell copies of the Software, and to
+// permit persons to whom the Software is furnished to do so, subject to
+// the following conditions:
+//
+// The above copyright notice and this permission notice shall be
+// included in all copies or substantial portions of the Software.
+//
+// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
+// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
+// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
+// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+//
+
+#if NET_2_0
+
+using System;
+using System.Data;
+using System.Data.Common;
+
+namespace Mono.Data.Sqlite
+{
+ public class SqliteDataSourceEnumerator : DbDataSourceEnumerator
+ {
+ public SqliteDataSourceEnumerator ()
+ {
+ }
+
+ public override DataTable GetDataSources ()
+ {
+ DataTable dt = new DataTable ();
+ DataColumn col;
+
+ col = new DataColumn ("ServerName", typeof (string));
+ dt.Columns.Add (col);
+
+ col = new DataColumn ("InstanceName", typeof (string));
+ dt.Columns.Add (col);
+
+ col = new DataColumn ("IsClustered", typeof (bool));
+ dt.Columns.Add (col);
+
+ col = new DataColumn ("Version", typeof (string));
+ dt.Columns.Add (col);
+
+ col = new DataColumn ("FactoryName", typeof (string));
+ dt.Columns.Add (col);
+
+ DataRow dr = dt.NewRow ();
+ dr [0] = "Sqlite Embedded Database";
+ dr [1] = "Sqlite Default Instance";
+ dr [2] = false;
+ dr [3] = "?";
+ dr [4] = "Mono.Data.Sqlite.SqliteConnectionFactory";
+ dt.Rows.Add (dr);
+
+ return dt;
+ }
+ }
+}
+
+#endif
diff --git a/lib/Hyena/src/Mono.Data.Sqlite/Mono.Data.Sqlite/UnsafeNativeMethods.cs b/lib/Hyena/src/Mono.Data.Sqlite/Mono.Data.Sqlite/UnsafeNativeMethods.cs
new file mode 100644
index 0000000..b68a7b9
--- /dev/null
+++ b/lib/Hyena/src/Mono.Data.Sqlite/Mono.Data.Sqlite/UnsafeNativeMethods.cs
@@ -0,0 +1,311 @@
+//
+// Mono.Data.Sqlite.UnsafeNativeMethods.cs
+//
+// Author(s):
+// Robert Simpson (robert at blackcastlesoft.com)
+//
+// Adapted and modified for the Mono Project by
+// Marek Habersack (grendello at gmail.com)
+//
+//
+// Copyright (C) 2006 Novell, Inc (http://www.novell.com)
+// Copyright (C) 2007 Marek Habersack
+//
+// Permission is hereby granted, free of charge, to any person obtaining
+// a copy of this software and associated documentation files (the
+// "Software"), to deal in the Software without restriction, including
+// without limitation the rights to use, copy, modify, merge, publish,
+// distribute, sublicense, and/or sell copies of the Software, and to
+// permit persons to whom the Software is furnished to do so, subject to
+// the following conditions:
+//
+// The above copyright notice and this permission notice shall be
+// included in all copies or substantial portions of the Software.
+//
+// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
+// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
+// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
+// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+//
+
+/********************************************************
+ * ADO.NET 2.0 Data Provider for Sqlite Version 3.X
+ * Written by Robert Simpson (robert at blackcastlesoft.com)
+ *
+ * Released to the public domain, use at your own risk!
+ ********************************************************/
+#if NET_2_0
+namespace Mono.Data.Sqlite
+{
+ using System;
+ using System.Security;
+ using System.Runtime.InteropServices;
+
+#if !PLATFORM_COMPACTFRAMEWORK
+ [SuppressUnmanagedCodeSecurity]
+#endif
+ internal sealed class UnsafeNativeMethods
+ {
+ private const string SQLITE_DLL = "sqlite3";
+
+ private UnsafeNativeMethods()
+ {
+ }
+
+ [DllImport(SQLITE_DLL)]
+ internal static extern void sqlite3_sleep(uint dwMilliseconds);
+
+ [DllImport(SQLITE_DLL)]
+ internal static extern IntPtr sqlite3_libversion();
+
+ [DllImport(SQLITE_DLL)]
+ internal static extern void sqlite3_free(IntPtr p);
+
+ [DllImport(SQLITE_DLL)]
+ internal static extern int sqlite3_open(byte[] utf8Filename, out IntPtr db);
+
+ [DllImport(SQLITE_DLL)]
+ internal static extern void sqlite3_interrupt(IntPtr db);
+
+ [DllImport(SQLITE_DLL)]
+ internal static extern int sqlite3_close(IntPtr db);
+
+ [DllImport(SQLITE_DLL)]
+ internal static extern int sqlite3_exec(IntPtr db, byte[] strSql, IntPtr pvCallback, IntPtr pvParam, out IntPtr errMsg, out int len);
+
+ [DllImport(SQLITE_DLL)]
+ internal static extern IntPtr sqlite3_errmsg(IntPtr db);
+
+ [DllImport(SQLITE_DLL)]
+ internal static extern int sqlite3_changes(IntPtr db);
+
+ [DllImport(SQLITE_DLL)]
+ internal static extern int sqlite3_busy_timeout(IntPtr db, int ms);
+
+ [DllImport(SQLITE_DLL)]
+ internal static extern int sqlite3_prepare_v2(IntPtr db, IntPtr pSql, int nBytes, out IntPtr stmt, out IntPtr ptrRemain);
+
+ [DllImport(SQLITE_DLL)]
+ internal static extern int sqlite3_prepare(IntPtr db, IntPtr pSql, int nBytes, out IntPtr stmt, out IntPtr ptrRemain);
+
+ [DllImport(SQLITE_DLL)]
+ internal static extern int sqlite3_bind_blob(IntPtr stmt, int index, Byte[] value, int nSize, IntPtr nTransient);
+
+ [DllImport(SQLITE_DLL)]
+ internal static extern int sqlite3_bind_double(IntPtr stmt, int index, double value);
+
+ [DllImport(SQLITE_DLL)]
+ internal static extern int sqlite3_bind_int(IntPtr stmt, int index, int value);
+
+ [DllImport(SQLITE_DLL)]
+ internal static extern int sqlite3_bind_int64(IntPtr stmt, int index, long value);
+
+ [DllImport(SQLITE_DLL)]
+ internal static extern int sqlite3_bind_null(IntPtr stmt, int index);
+
+ [DllImport(SQLITE_DLL)]
+ internal static extern int sqlite3_bind_text(IntPtr stmt, int index, byte[] value, int nlen, IntPtr pvReserved);
+
+ [DllImport(SQLITE_DLL)]
+ internal static extern int sqlite3_bind_parameter_count(IntPtr stmt);
+
+ [DllImport(SQLITE_DLL)]
+ internal static extern IntPtr sqlite3_bind_parameter_name(IntPtr stmt, int index);
+
+ [DllImport(SQLITE_DLL)]
+ internal static extern int sqlite3_bind_parameter_index(IntPtr stmt, byte[] strName);
+
+ [DllImport(SQLITE_DLL)]
+ internal static extern int sqlite3_column_count(IntPtr stmt);
+
+ [DllImport(SQLITE_DLL)]
+ internal static extern IntPtr sqlite3_column_name(IntPtr stmt, int index);
+
+ [DllImport(SQLITE_DLL)]
+ internal static extern IntPtr sqlite3_column_decltype(IntPtr stmt, int index);
+
+ [DllImport(SQLITE_DLL)]
+ internal static extern int sqlite3_step(IntPtr stmt);
+
+ [DllImport(SQLITE_DLL)]
+ internal static extern double sqlite3_column_double(IntPtr stmt, int index);
+
+ [DllImport(SQLITE_DLL)]
+ internal static extern int sqlite3_column_int(IntPtr stmt, int index);
+
+ [DllImport(SQLITE_DLL)]
+ internal static extern Int64 sqlite3_column_int64(IntPtr stmt, int index);
+
+ [DllImport(SQLITE_DLL)]
+ internal static extern IntPtr sqlite3_column_text(IntPtr stmt, int index);
+
+ [DllImport(SQLITE_DLL)]
+ internal static extern IntPtr sqlite3_column_blob(IntPtr stmt, int index);
+
+ [DllImport(SQLITE_DLL)]
+ internal static extern int sqlite3_column_bytes(IntPtr stmt, int index);
+
+ [DllImport(SQLITE_DLL)]
+ internal static extern TypeAffinity sqlite3_column_type(IntPtr stmt, int index);
+
+ [DllImport(SQLITE_DLL)]
+ internal static extern int sqlite3_finalize(IntPtr stmt);
+
+ [DllImport(SQLITE_DLL)]
+ internal static extern int sqlite3_reset(IntPtr stmt);
+
+ [DllImport(SQLITE_DLL)]
+ internal static extern int sqlite3_create_collation(IntPtr db, byte[] strName, int eTextRep, IntPtr ctx, SqliteCollation fcompare);
+
+ [DllImport(SQLITE_DLL)]
+ internal static extern int sqlite3_create_function(IntPtr db, byte[] strName, int nArgs, int eTextRep, IntPtr app, SqliteCallback func, SqliteCallback fstep, SqliteFinalCallback ffinal);
+
+ [DllImport(SQLITE_DLL)]
+ internal static extern int sqlite3_aggregate_count(IntPtr context);
+
+ [DllImport(SQLITE_DLL)]
+ internal static extern IntPtr sqlite3_value_blob(IntPtr p);
+
+ [DllImport(SQLITE_DLL)]
+ internal static extern int sqlite3_value_bytes(IntPtr p);
+
+ [DllImport(SQLITE_DLL)]
+ internal static extern double sqlite3_value_double(IntPtr p);
+
+ [DllImport(SQLITE_DLL)]
+ internal static extern int sqlite3_value_int(IntPtr p);
+
+ [DllImport(SQLITE_DLL)]
+ internal static extern Int64 sqlite3_value_int64(IntPtr p);
+
+ [DllImport(SQLITE_DLL)]
+ internal static extern IntPtr sqlite3_value_text(IntPtr p);
+
+ [DllImport(SQLITE_DLL)]
+ internal static extern TypeAffinity sqlite3_value_type(IntPtr p);
+
+ [DllImport(SQLITE_DLL)]
+ internal static extern void sqlite3_result_blob(IntPtr context, byte[] value, int nSize, IntPtr pvReserved);
+
+ [DllImport(SQLITE_DLL)]
+ internal static extern void sqlite3_result_double(IntPtr context, double value);
+
+ [DllImport(SQLITE_DLL)]
+ internal static extern void sqlite3_result_error(IntPtr context, byte[] strErr, int nLen);
+
+ [DllImport(SQLITE_DLL)]
+ internal static extern void sqlite3_result_int(IntPtr context, int value);
+
+ [DllImport(SQLITE_DLL)]
+ internal static extern void sqlite3_result_int64(IntPtr context, Int64 value);
+
+ [DllImport(SQLITE_DLL)]
+ internal static extern void sqlite3_result_null(IntPtr context);
+
+ [DllImport(SQLITE_DLL)]
+ internal static extern void sqlite3_result_text(IntPtr context, byte[] value, int nLen, IntPtr pvReserved);
+
+ [DllImport(SQLITE_DLL)]
+ internal static extern IntPtr sqlite3_aggregate_context(IntPtr context, int nBytes);
+
+ [DllImport(SQLITE_DLL)]
+ internal static extern int sqlite3_table_column_metadata(IntPtr db, byte[] dbName, byte[] tblName, byte[] colName, out IntPtr ptrDataType, out IntPtr ptrCollSeq, out int notNull, out int primaryKey, out int autoInc);
+
+ [DllImport(SQLITE_DLL)]
+ internal static extern IntPtr sqlite3_column_database_name(IntPtr stmt, int index);
+
+ [DllImport(SQLITE_DLL)]
+ internal static extern IntPtr sqlite3_column_database_name16(IntPtr stmt, int index);
+
+ [DllImport(SQLITE_DLL)]
+ internal static extern IntPtr sqlite3_column_table_name(IntPtr stmt, int index);
+
+ [DllImport(SQLITE_DLL)]
+ internal static extern IntPtr sqlite3_column_table_name16(IntPtr stmt, int index);
+
+ [DllImport(SQLITE_DLL)]
+ internal static extern IntPtr sqlite3_column_origin_name(IntPtr stmt, int index);
+
+ [DllImport(SQLITE_DLL)]
+ internal static extern IntPtr sqlite3_column_origin_name16(IntPtr stmt, int index);
+
+ [DllImport(SQLITE_DLL)]
+ internal static extern IntPtr sqlite3_column_text16(IntPtr stmt, int index);
+
+ [DllImport(SQLITE_DLL, CharSet = CharSet.Unicode)]
+ internal static extern int sqlite3_open16(string utf16Filename, out IntPtr db);
+
+ [DllImport(SQLITE_DLL)]
+ internal static extern IntPtr sqlite3_errmsg16(IntPtr db);
+
+ [DllImport(SQLITE_DLL, CharSet = CharSet.Unicode)]
+ internal static extern int sqlite3_prepare16_v2(IntPtr db, IntPtr pSql, int sqlLen, out IntPtr stmt, out IntPtr ptrRemain);
+
+ [DllImport(SQLITE_DLL, CharSet = CharSet.Unicode)]
+ internal static extern int sqlite3_bind_text16(IntPtr stmt, int index, string value, int nlen, int nTransient);
+
+ [DllImport(SQLITE_DLL)]
+ internal static extern IntPtr sqlite3_column_name16(IntPtr stmt, int index);
+
+ [DllImport(SQLITE_DLL)]
+ internal static extern IntPtr sqlite3_column_decltype16(IntPtr stmt, int index, out int len);
+
+ [DllImport(SQLITE_DLL, CharSet = CharSet.Unicode)]
+ internal static extern int sqlite3_create_collation16(IntPtr db, string strName, int eTextRep, IntPtr ctx, SqliteCollation fcompare);
+
+ [DllImport(SQLITE_DLL, CharSet = CharSet.Unicode)]
+ internal static extern int sqlite3_create_function16(IntPtr db, string strName, int nArgs, int eTextRep, IntPtr app, SqliteCallback func, SqliteCallback funcstep, SqliteFinalCallback funcfinal);
+
+ [DllImport(SQLITE_DLL)]
+ internal static extern IntPtr sqlite3_value_text16(IntPtr p);
+
+ [DllImport(SQLITE_DLL, CharSet = CharSet.Unicode)]
+ internal static extern void sqlite3_result_error16(IntPtr context, string strName, int nLen);
+
+ [DllImport(SQLITE_DLL, CharSet = CharSet.Unicode)]
+ internal static extern void sqlite3_result_text16(IntPtr context, string strName, int nLen, IntPtr pvReserved);
+
+ [DllImport(SQLITE_DLL, CharSet = CharSet.Unicode, SetLastError = true)]
+ internal static extern int sqlite3_encryptfile(string fileName);
+
+ [DllImport(SQLITE_DLL, CharSet = CharSet.Unicode, SetLastError = true)]
+ internal static extern int sqlite3_decryptfile(string fileName);
+
+ [DllImport(SQLITE_DLL, CharSet = CharSet.Unicode, SetLastError = true)]
+ internal static extern int sqlite3_encryptedstatus(string fileName, out int fileStatus);
+
+ [DllImport(SQLITE_DLL, CharSet = CharSet.Unicode, SetLastError = true)]
+ internal static extern int sqlite3_compressfile(string fileName);
+
+ [DllImport(SQLITE_DLL, CharSet = CharSet.Unicode, SetLastError = true)]
+ internal static extern int sqlite3_decompressfile(string fileName);
+
+ [DllImport(SQLITE_DLL)]
+ internal static extern int sqlite3_key(IntPtr db, byte[] key, int keylen);
+
+ [DllImport(SQLITE_DLL)]
+ internal static extern int sqlite3_rekey(IntPtr db, byte[] key, int keylen);
+
+ [DllImport(SQLITE_DLL)]
+ internal static extern IntPtr sqlite3_update_hook(IntPtr db, SqliteUpdateCallback func);
+
+ [DllImport(SQLITE_DLL)]
+ internal static extern IntPtr sqlite3_commit_hook(IntPtr db, SqliteCommitCallback func);
+
+ [DllImport(SQLITE_DLL)]
+ internal static extern IntPtr sqlite3_rollback_hook(IntPtr db, SqliteRollbackCallback func);
+
+ [DllImport(SQLITE_DLL)]
+ internal static extern int sqlite3_cursor_rowid(IntPtr stmt, int cursor, out long rowid);
+
+ [DllImport(SQLITE_DLL)]
+ internal static extern int sqlite3_table_cursor(IntPtr stmt, int db, int tableRootPage);
+
+ [DllImport(SQLITE_DLL)]
+ internal static extern long sqlite3_last_insert_rowid(IntPtr db);
+ }
+}
+#endif
diff --git a/lib/Makefile.am b/lib/Makefile.am
index a4c9d3e..fa5e6ab 100644
--- a/lib/Makefile.am
+++ b/lib/Makefile.am
@@ -1,23 +1,14 @@
# Note the list below is sorted by alphabet, with the exception of libjpegtran,
-# it needs to be built before libfspot.
-
-UNCONDITIONAL_SUBDIRS = \
+# it needs to be built before libfspot. Dpap-sharp isn't built.
+SUBDIRS = \
GKeyFile \
gio-sharp \
- gnome-keyring-sharp \
gtk-sharp-beans \
+ Hyena/src/Hyena \
+ Hyena/src/Mono.Data.Sqlite \
+ Hyena/src/Hyena.Data.Sqlite \
+ Hyena/src/Hyena.Gui \
libjpegtran \
libfspot \
- libgphoto2-sharp \
semweb \
unique-sharp
-
-# dpap-sharp isn't built, but it is shipped.
-
-SUBDIRS = \
- $(UNCONDITIONAL_SUBDIRS)
-
-DIST_SUBDIRS = \
- dpap-sharp \
- $(UNCONDITIONAL_SUBDIRS)
-
diff --git a/lib/Makefile.in b/lib/Makefile.in
index 97dd102..aa98f1e 100644
--- a/lib/Makefile.in
+++ b/lib/Makefile.in
@@ -14,9 +14,6 @@
# PARTICULAR PURPOSE.
@SET_MAKE@
-
-# Note the list below is sorted by alphabet, with the exception of libjpegtran,
-# it needs to be built before libfspot.
VPATH = @srcdir@
pkgdatadir = $(datadir)/@PACKAGE@
pkgincludedir = $(includedir)/@PACKAGE@
@@ -41,8 +38,14 @@ DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in
ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
am__aclocal_m4_deps = $(top_srcdir)/build/m4/shave/shave.m4 \
$(top_srcdir)/build/m4/shamrock/expansions.m4 \
+ $(top_srcdir)/build/m4/shamrock/gnome-doc.m4 \
$(top_srcdir)/build/m4/shamrock/mono.m4 \
+ $(top_srcdir)/build/m4/shamrock/nunit.m4 \
$(top_srcdir)/build/m4/shamrock/programs.m4 \
+ $(top_srcdir)/build/m4/f-spot/flickrnet.m4 \
+ $(top_srcdir)/build/m4/f-spot/gnome-keyring-sharp.m4 \
+ $(top_srcdir)/build/m4/f-spot/gtk-sharp.m4 \
+ $(top_srcdir)/build/m4/f-spot/mono-addins.m4 \
$(top_srcdir)/acinclude.m4 $(top_srcdir)/configure.ac
am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
$(ACLOCAL_M4)
@@ -66,6 +69,7 @@ AM_RECURSIVE_TARGETS = $(RECURSIVE_TARGETS:-recursive=) \
distdir
ETAGS = etags
CTAGS = ctags
+DIST_SUBDIRS = $(SUBDIRS)
DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
am__relativize = \
dir0=`pwd`; \
@@ -136,6 +140,8 @@ EXIF_SOVERSION = @EXIF_SOVERSION@
F77 = @F77@
FC = @FC@
FGREP = @FGREP@
+FLICKRNET_CFLAGS = @FLICKRNET_CFLAGS@
+FLICKRNET_LIBS = @FLICKRNET_LIBS@
F_CFLAGS = @F_CFLAGS@
F_LIBS = @F_LIBS@
GAPI2CODEGEN = @GAPI2CODEGEN@
@@ -149,6 +155,8 @@ GCONF_SHARP_LIBS = @GCONF_SHARP_LIBS@
GETTEXT_PACKAGE = @GETTEXT_PACKAGE@
GIO_CFLAGS = @GIO_CFLAGS@
GIO_LIBS = @GIO_LIBS@
+GLIBSHARP_2_12_7_CFLAGS = @GLIBSHARP_2_12_7_CFLAGS@
+GLIBSHARP_2_12_7_LIBS = @GLIBSHARP_2_12_7_LIBS@
GLIBSHARP_CFLAGS = @GLIBSHARP_CFLAGS@
GLIBSHARP_LIBS = @GLIBSHARP_LIBS@
GLIB_CFLAGS = @GLIB_CFLAGS@
@@ -164,6 +172,10 @@ GNOME_SHARP_CFLAGS = @GNOME_SHARP_CFLAGS@
GNOME_SHARP_LIBS = @GNOME_SHARP_LIBS@
GOBJECT_QUERY = @GOBJECT_QUERY@
GREP = @GREP@
+GTKSHARP_A11Y_CFLAGS = @GTKSHARP_A11Y_CFLAGS@
+GTKSHARP_A11Y_LIBS = @GTKSHARP_A11Y_LIBS@
+GTKSHARP_CFLAGS = @GTKSHARP_CFLAGS@
+GTKSHARP_LIBS = @GTKSHARP_LIBS@
HELP_DIR = @HELP_DIR@
ICONS_DIRECTORY = @ICONS_DIRECTORY@
INSTALL = @INSTALL@
@@ -177,14 +189,14 @@ INTLTOOL_EXTRACT = @INTLTOOL_EXTRACT@
INTLTOOL_MERGE = @INTLTOOL_MERGE@
INTLTOOL_PERL = @INTLTOOL_PERL@
INTLTOOL_UPDATE = @INTLTOOL_UPDATE@
+KEYRINGSHARP_CFLAGS = @KEYRINGSHARP_CFLAGS@
+KEYRINGSHARP_LIBS = @KEYRINGSHARP_LIBS@
LCMS_CFLAGS = @LCMS_CFLAGS@
LCMS_LIBS = @LCMS_LIBS@
LD = @LD@
LDFLAGS = @LDFLAGS@
LIBEXIF_VERSION_CHECK_CFLAGS = @LIBEXIF_VERSION_CHECK_CFLAGS@
LIBEXIF_VERSION_CHECK_LIBS = @LIBEXIF_VERSION_CHECK_LIBS@
-LIBGPHOTO2_CFLAGS = @LIBGPHOTO2_CFLAGS@
-LIBGPHOTO2_LIBS = @LIBGPHOTO2_LIBS@
LIBJPEG = @LIBJPEG@
LIBOBJS = @LIBOBJS@
LIBS = @LIBS@
@@ -199,6 +211,12 @@ MCS = @MCS@
MKDIR_P = @MKDIR_P@
MKINSTALLDIRS = @MKINSTALLDIRS@
MONO = @MONO@
+MONO_ADDINS_CFLAGS = @MONO_ADDINS_CFLAGS@
+MONO_ADDINS_GUI_CFLAGS = @MONO_ADDINS_GUI_CFLAGS@
+MONO_ADDINS_GUI_LIBS = @MONO_ADDINS_GUI_LIBS@
+MONO_ADDINS_LIBS = @MONO_ADDINS_LIBS@
+MONO_ADDINS_SETUP_CFLAGS = @MONO_ADDINS_SETUP_CFLAGS@
+MONO_ADDINS_SETUP_LIBS = @MONO_ADDINS_SETUP_LIBS@
MONO_MODULE_CFLAGS = @MONO_MODULE_CFLAGS@
MONO_MODULE_LIBS = @MONO_MODULE_LIBS@
MSGFMT = @MSGFMT@
@@ -209,7 +227,6 @@ NDESK_DBUS_LIBS = @NDESK_DBUS_LIBS@
NM = @NM@
NMEDIT = @NMEDIT@
NUNIT_CFLAGS = @NUNIT_CFLAGS@
-NUNIT_DEFINES = @NUNIT_DEFINES@
NUNIT_LIBS = @NUNIT_LIBS@
OBJC = @OBJC@
OBJDUMP = @OBJDUMP@
@@ -301,26 +318,22 @@ target_alias = @target_alias@
top_build_prefix = @top_build_prefix@
top_builddir = @top_builddir@
top_srcdir = @top_srcdir@
-UNCONDITIONAL_SUBDIRS = \
+
+# Note the list below is sorted by alphabet, with the exception of libjpegtran,
+# it needs to be built before libfspot. Dpap-sharp isn't built.
+SUBDIRS = \
GKeyFile \
gio-sharp \
- gnome-keyring-sharp \
gtk-sharp-beans \
+ Hyena/src/Hyena \
+ Hyena/src/Mono.Data.Sqlite \
+ Hyena/src/Hyena.Data.Sqlite \
+ Hyena/src/Hyena.Gui \
libjpegtran \
libfspot \
- libgphoto2-sharp \
semweb \
unique-sharp
-
-# dpap-sharp isn't built, but it is shipped.
-SUBDIRS = \
- $(UNCONDITIONAL_SUBDIRS)
-
-DIST_SUBDIRS = \
- dpap-sharp \
- $(UNCONDITIONAL_SUBDIRS)
-
all: all-recursive
.SUFFIXES:
diff --git a/lib/dpap-sharp/DPAPBrowser/DPAPBrowser.addin.xml b/lib/dpap-sharp/DPAPBrowser/DPAPBrowser.addin.xml
deleted file mode 100644
index 36ed760..0000000
--- a/lib/dpap-sharp/DPAPBrowser/DPAPBrowser.addin.xml
+++ /dev/null
@@ -1,17 +0,0 @@
-<Addin namespace="FSpot"
- id="DPAPBrowser"
- version="0.6"
- name="DPAP Browser"
- description="Browser iPhoto shares"
- author="Andrzej Wytyczak-Partyka"
- url="http://f-spot.org/Extensions"
- category="Services">
- <Dependencies>
- <Addin id="Core" version="0.6"/>
- </Dependencies>
- <Extension path = "/FSpot/Sidebar">
- <SidebarPage sidebar_page_type="DPAP.DPAPBrowser"/>
- </Extension>
-</Addin>
-
-
diff --git a/lib/dpap-sharp/DPAPBrowser/DPAPBrowser.cs b/lib/dpap-sharp/DPAPBrowser/DPAPBrowser.cs
deleted file mode 100644
index 6725537..0000000
--- a/lib/dpap-sharp/DPAPBrowser/DPAPBrowser.cs
+++ /dev/null
@@ -1,181 +0,0 @@
-// DPAPBrowser.cs
-//
-// Author:
-// Andrzej Wytyczak-Partyka <iapart at gmail.com>
-// Copyright (C) 2008 Andrzej Wytyczak-Partyka
-//
-// This program is free software; you can redistribute it and/or modify
-// it under the terms of the GNU General Public License as published by
-// the Free Software Foundation; either version 2 of the License, or
-// (at your option) any later version.
-//
-// This program is distributed in the hope that it will be useful,
-// but WITHOUT ANY WARRANTY; without even the implied warranty of
-// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-// GNU General Public License for more details.
-//
-// You should have received a copy of the GNU General Public License
-// along with this program; if not, write to the Free Software
-// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
-//
-//
-
-using System;
-using FSpot;
-using FSpot.Extensions;
-using FSpot.Utils;
-using FSpot.Widgets;
-
-using System.IO;
-using DPAP;
-using Gtk;
-
-namespace DPAP {
-
- public class DPAPPageWidget : ScrolledWindow {
- TreeView tree;
- TreeStore list;
- ServiceDiscovery sd;
- Client client;
-
- public DPAPPageWidget ()
- {
- Console.WriteLine ("DPAP Page widget ctor!");
- tree = new TreeView ();
- Add (tree);
- TreeViewColumn albumColumn = new Gtk.TreeViewColumn ();
- //albumColumn.Title = "album";
-
- Gtk.CellRendererText albumNameCell = new Gtk.CellRendererText ();
- albumNameCell.Visible = true;
- albumColumn.PackStart (albumNameCell,false);
- tree.AppendColumn (albumColumn);
-
- list = new TreeStore (typeof (string));
- tree.Model = list;
-
- albumColumn.AddAttribute (albumNameCell, "text", 0);
-
- tree.Selection.Changed += OnSelectionChanged;
- sd = new DPAP.ServiceDiscovery ();
- sd.Found += OnServiceFound;
- sd.Removed += OnServiceRemoved;
- sd.Start ();
- }
-
- private void OnSelectionChanged (object o, EventArgs args)
- {
- Gtk.TreeSelection selection = (Gtk.TreeSelection) o;
- Gtk.TreeModel model;
- Gtk.TreeIter iter;
- string data;
- if (selection.GetSelected (out model, out iter)) {
- GLib.Value val = GLib.Value.Empty;
- model.GetValue (iter, 0, ref val);
- data = (string) val.Val;
-
- if (list.IterDepth (iter) == 0)
- Connect (data);
- else
- ViewAlbum (data);
- val.Dispose ();
- }
-
- }
-
- private void ViewAlbum (string name)
- {
- Console.WriteLine ("View Album !");
- Database d = client.Databases [0];
-
- Directory.CreateDirectory ("/tmp/" + client.Databases [0].Name);
- //Console.WriteLine ("Looking for album '" + name + "'");
- foreach (DPAP.Album alb in d.Albums)
- {
- //Console.WriteLine ("\t -- album '" + alb.Name + "'");
- if (!alb.Name.Equals (name))
- continue;
-
- Directory.CreateDirectory (System.Environment.GetFolderPath (System.Environment.SpecialFolder.Personal) + "/.cache/DPAP/" + client.Name + "/" + alb.Name);
- foreach (DPAP.Photo ph in alb.Photos)
- if (ph != null)
- d.DownloadPhoto (ph, System.Environment.GetFolderPath (System.Environment.SpecialFolder.Personal) + "/.cache/DPAP/" + client.Name + "/" + alb.Name + "/" + ph.FileName);
-
- FSpot.Core.FindInstance ().View ( System.Environment.GetFolderPath (System.Environment.SpecialFolder.Personal) + "/.cache/DPAP/" + client.Name + "/" + alb.Name);
- break;
- }
-
-
- }
-
- private void Connect (string svcName)
- {
- Service service = sd.ServiceByName (svcName);
- System.Console.WriteLine ("Connecting to {0} at {1}:{2}", service.Name, service.Address, service.Port);
-
- client = new Client (service);
- TreeIter iter;
- list.GetIterFirst (out iter);
- foreach (Database d in client.Databases){
-
- // list.AppendValues (iter,d.Name);
- Console.WriteLine ("Database " + d.Name);
-
- foreach (Album alb in d.Albums)
- list.AppendValues (iter, alb.Name);
-
- // Console.WriteLine ("\tAlbum: "+alb.Name + ", id=" + alb.getId () + " number of items:" + alb.Photos.Count);
- // Console.WriteLine (d.Photos [0].FileName);
-
- }
- }
-
- private void OnServiceFound (object o, ServiceArgs args)
- {
- Service service = args.Service;
- Console.WriteLine ("ServiceFound " + service.Name);
- if (service.Name.Equals (System.Environment.UserName + " f-spot photos")) return;
- list.AppendValues (service.Name);
-
-/* System.Console.WriteLine ("Connecting to {0} at {1}:{2}", service.Name, service.Address, service.Port);
-
- //client.Logout ();
- //Console.WriteLine ("Press <enter> to exit...");
-*/
-
- }
-
- private void OnServiceRemoved (object o, ServiceArgs args)
- {
- Service service = args.Service;
- Console.WriteLine ("Service removed " + service.Name);
- TreeIter root = TreeIter.Zero;
- TreeIter iter = TreeIter.Zero;
-
- bool valid = tree.Model.GetIterFirst (out root);
-
- while (valid) {
- if(((String)tree.Model.GetValue(root,0)).Equals(service.Name))
- (tree.Model as TreeStore).Remove(ref root);
- valid = tree.Model.IterNext (ref root);
- }
- if (Directory.Exists (System.Environment.GetFolderPath (System.Environment.SpecialFolder.Personal) + "/.cache/DPAP/" + service.Name))
- Directory.Delete (System.Environment.GetFolderPath (System.Environment.SpecialFolder.Personal) + "/.cache/DPAP/" + service.Name, true);
-
- }
- }
-
- public class DPAPBrowser : SidebarPage
- {
- //public DPAPPage () { }
- private static DPAPPageWidget widget;
- public DPAPBrowser () : base (new DPAPPageWidget (), "Shared items", "gtk-new")
- {
- Console.WriteLine ("Starting DPAP client...");
- widget = (DPAPPageWidget)SidebarWidget;
- }
-
-
- }
-
-}
diff --git a/lib/dpap-sharp/DPAPBrowser/Makefile.am b/lib/dpap-sharp/DPAPBrowser/Makefile.am
deleted file mode 100644
index 3c6b424..0000000
--- a/lib/dpap-sharp/DPAPBrowser/Makefile.am
+++ /dev/null
@@ -1,46 +0,0 @@
-include $(top_srcdir)/Makefile.include
-
-PLUGIN_NAME = DPAPBrowser
-
-PLUGIN_MANIFEST = $(PLUGIN_NAME).addin.xml
-
-PLUGIN_ASSEMBLY = $(PLUGIN_NAME).dll
-
-PLUGIN_SOURCES = \
- $(srcdir)/DPAPBrowser.cs
-
-
-REFS = \
- -r:../../src/f-spot.exe \
- -r:../../src/FSpot.Core.dll \
- -r:../../src/FSpot.Widgets.dll \
- -r:../../src/FSpot.Utils.dll \
- -r:../lib/dpap-sharp.dll
-
-PKGS = \
- -pkg:gtk-sharp-2.0
-
-RESOURCES = \
- -resource:$(srcdir)/$(PLUGIN_MANIFEST)
-
-all: $(PLUGIN_ASSEMBLY)
-
-mpack: $(PLUGIN_ASSEMBLY)
- mautil p $(PLUGIN_ASSEMBLY)
-
-$(PLUGIN_ASSEMBLY): $(PLUGIN_SOURCES) $(PLUGIN_MANIFEST)
- $(CSC_LIB) -out:$@ $(CSC_DEFINES) $(PLUGIN_SOURCES) $(REFS) $(PKGS) $(ASSEMBLIES) $(RESOURCES)
-
-plugindir = $(pkglibdir)/extensions
-
-plugin_DATA = \
- $(PLUGIN_ASSEMBLY)
-
-EXTRA_DIST = \
- $(PLUGIN_SOURCES) \
- $(PLUGIN_MANIFEST)
-
-CLEANFILES = \
- $(PLUGIN_ASSEMBLY) \
- $(PLUGIN_ASSEMBLY).mdb \
- *.mpack
diff --git a/lib/dpap-sharp/DPAPBrowser/Makefile.in b/lib/dpap-sharp/DPAPBrowser/Makefile.in
deleted file mode 100644
index 92543dd..0000000
--- a/lib/dpap-sharp/DPAPBrowser/Makefile.in
+++ /dev/null
@@ -1,562 +0,0 @@
-# Makefile.in generated by automake 1.11.1 from Makefile.am.
-# @configure_input@
-
-# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
-# 2003, 2004, 2005, 2006, 2007, 2008, 2009 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.
-
-# This program is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
-# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
-# PARTICULAR PURPOSE.
-
- at SET_MAKE@
-
-VPATH = @srcdir@
-pkgdatadir = $(datadir)/@PACKAGE@
-pkgincludedir = $(includedir)/@PACKAGE@
-pkglibdir = $(libdir)/@PACKAGE@
-pkglibexecdir = $(libexecdir)/@PACKAGE@
-am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
-install_sh_DATA = $(install_sh) -c -m 644
-install_sh_PROGRAM = $(install_sh) -c
-install_sh_SCRIPT = $(install_sh) -c
-INSTALL_HEADER = $(INSTALL_DATA)
-transform = $(program_transform_name)
-NORMAL_INSTALL = :
-PRE_INSTALL = :
-POST_INSTALL = :
-NORMAL_UNINSTALL = :
-PRE_UNINSTALL = :
-POST_UNINSTALL = :
-build_triplet = @build@
-host_triplet = @host@
-DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in \
- $(top_srcdir)/Makefile.include
-subdir = lib/dpap-sharp/DPAPBrowser
-ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
-am__aclocal_m4_deps = $(top_srcdir)/build/m4/shave/shave.m4 \
- $(top_srcdir)/build/m4/shamrock/expansions.m4 \
- $(top_srcdir)/build/m4/shamrock/mono.m4 \
- $(top_srcdir)/build/m4/shamrock/programs.m4 \
- $(top_srcdir)/acinclude.m4 $(top_srcdir)/configure.ac
-am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
- $(ACLOCAL_M4)
-mkinstalldirs = $(install_sh) -d
-CONFIG_HEADER = $(top_builddir)/config.h
-CONFIG_CLEAN_FILES =
-CONFIG_CLEAN_VPATH_FILES =
-SOURCES =
-DIST_SOURCES =
-am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`;
-am__vpath_adj = case $$p in \
- $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \
- *) f=$$p;; \
- esac;
-am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`;
-am__install_max = 40
-am__nobase_strip_setup = \
- srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'`
-am__nobase_strip = \
- for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||"
-am__nobase_list = $(am__nobase_strip_setup); \
- for p in $$list; do echo "$$p $$p"; done | \
- sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \
- $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \
- if (++n[$$2] == $(am__install_max)) \
- { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \
- END { for (dir in files) print dir, files[dir] }'
-am__base_list = \
- sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \
- sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g'
-am__installdirs = "$(DESTDIR)$(plugindir)"
-DATA = $(plugin_DATA)
-DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
-ACLOCAL = @ACLOCAL@
-ACLOCAL_AMFLAGS = @ACLOCAL_AMFLAGS@
-ALL_LINGUAS = @ALL_LINGUAS@
-AMTAR = @AMTAR@
-AM_MAKEFLAGS = @AM_MAKEFLAGS@
-API_VERSION = @API_VERSION@
-AR = @AR@
-ASM_VERSION = @ASM_VERSION@
-AUTOCONF = @AUTOCONF@
-AUTOHEADER = @AUTOHEADER@
-AUTOMAKE = @AUTOMAKE@
-AWK = @AWK@
-CATALOGS = @CATALOGS@
-CATOBJEXT = @CATOBJEXT@
-CC = @CC@
-CCDEPMODE = @CCDEPMODE@
-CFLAGS = @CFLAGS@
-CPP = @CPP@
-CPPFLAGS = @CPPFLAGS@
-CSC_DEFINES = @CSC_DEFINES@
-CXX = @CXX@
-CXXCPP = @CXXCPP@
-CXXDEPMODE = @CXXDEPMODE@
-CXXFLAGS = @CXXFLAGS@
-CYGPATH_W = @CYGPATH_W@
-DATADIRNAME = @DATADIRNAME@
-DEFS = @DEFS@
-DEPDIR = @DEPDIR@
-DISPLAY_VERSION = @DISPLAY_VERSION@
-DISTCHECK_CONFIGURE_FLAGS = @DISTCHECK_CONFIGURE_FLAGS@
-DOC_USER_FORMATS = @DOC_USER_FORMATS@
-DSYMUTIL = @DSYMUTIL@
-DUMPBIN = @DUMPBIN@
-ECHO_C = @ECHO_C@
-ECHO_N = @ECHO_N@
-ECHO_T = @ECHO_T@
-EGREP = @EGREP@
-EXEEXT = @EXEEXT@
-EXIF_CFLAGS = @EXIF_CFLAGS@
-EXIF_LIBS = @EXIF_LIBS@
-EXIF_SOVERSION = @EXIF_SOVERSION@
-F77 = @F77@
-FC = @FC@
-FGREP = @FGREP@
-F_CFLAGS = @F_CFLAGS@
-F_LIBS = @F_LIBS@
-GAPI2CODEGEN = @GAPI2CODEGEN@
-GAPI2FIXUP = @GAPI2FIXUP@
-GAPI2PARSER = @GAPI2PARSER@
-GCONFTOOL = @GCONFTOOL@
-GCONF_SCHEMA_CONFIG_SOURCE = @GCONF_SCHEMA_CONFIG_SOURCE@
-GCONF_SCHEMA_FILE_DIR = @GCONF_SCHEMA_FILE_DIR@
-GCONF_SHARP_CFLAGS = @GCONF_SHARP_CFLAGS@
-GCONF_SHARP_LIBS = @GCONF_SHARP_LIBS@
-GETTEXT_PACKAGE = @GETTEXT_PACKAGE@
-GIO_CFLAGS = @GIO_CFLAGS@
-GIO_LIBS = @GIO_LIBS@
-GLIBSHARP_CFLAGS = @GLIBSHARP_CFLAGS@
-GLIBSHARP_LIBS = @GLIBSHARP_LIBS@
-GLIB_CFLAGS = @GLIB_CFLAGS@
-GLIB_GENMARSHAL = @GLIB_GENMARSHAL@
-GLIB_LIBS = @GLIB_LIBS@
-GLIB_MKENUMS = @GLIB_MKENUMS@
-GMOFILES = @GMOFILES@
-GMSGFMT = @GMSGFMT@
-GNOME_ICON_THEME_PREFIX = @GNOME_ICON_THEME_PREFIX@
-GNOME_SCREENSAVER_SAVERDIR = @GNOME_SCREENSAVER_SAVERDIR@
-GNOME_SCREENSAVER_THEMESDIR = @GNOME_SCREENSAVER_THEMESDIR@
-GNOME_SHARP_CFLAGS = @GNOME_SHARP_CFLAGS@
-GNOME_SHARP_LIBS = @GNOME_SHARP_LIBS@
-GOBJECT_QUERY = @GOBJECT_QUERY@
-GREP = @GREP@
-HELP_DIR = @HELP_DIR@
-ICONS_DIRECTORY = @ICONS_DIRECTORY@
-INSTALL = @INSTALL@
-INSTALL_DATA = @INSTALL_DATA@
-INSTALL_PROGRAM = @INSTALL_PROGRAM@
-INSTALL_SCRIPT = @INSTALL_SCRIPT@
-INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
-INSTOBJEXT = @INSTOBJEXT@
-INTLLIBS = @INTLLIBS@
-INTLTOOL_EXTRACT = @INTLTOOL_EXTRACT@
-INTLTOOL_MERGE = @INTLTOOL_MERGE@
-INTLTOOL_PERL = @INTLTOOL_PERL@
-INTLTOOL_UPDATE = @INTLTOOL_UPDATE@
-LCMS_CFLAGS = @LCMS_CFLAGS@
-LCMS_LIBS = @LCMS_LIBS@
-LD = @LD@
-LDFLAGS = @LDFLAGS@
-LIBEXIF_VERSION_CHECK_CFLAGS = @LIBEXIF_VERSION_CHECK_CFLAGS@
-LIBEXIF_VERSION_CHECK_LIBS = @LIBEXIF_VERSION_CHECK_LIBS@
-LIBGPHOTO2_CFLAGS = @LIBGPHOTO2_CFLAGS@
-LIBGPHOTO2_LIBS = @LIBGPHOTO2_LIBS@
-LIBJPEG = @LIBJPEG@
-LIBOBJS = @LIBOBJS@
-LIBS = @LIBS@
-LIBTOOL = @LIBTOOL@
-LIPO = @LIPO@
-LN_S = @LN_S@
-LTLIBOBJS = @LTLIBOBJS@
-MAINT = @MAINT@
-MAKEFLAGS = @MAKEFLAGS@
-MAKEINFO = @MAKEINFO@
-MCS = @MCS@
-MKDIR_P = @MKDIR_P@
-MKINSTALLDIRS = @MKINSTALLDIRS@
-MONO = @MONO@
-MONO_MODULE_CFLAGS = @MONO_MODULE_CFLAGS@
-MONO_MODULE_LIBS = @MONO_MODULE_LIBS@
-MSGFMT = @MSGFMT@
-MSGFMT_OPTS = @MSGFMT_OPTS@
-MSGMERGE = @MSGMERGE@
-NDESK_DBUS_CFLAGS = @NDESK_DBUS_CFLAGS@
-NDESK_DBUS_LIBS = @NDESK_DBUS_LIBS@
-NM = @NM@
-NMEDIT = @NMEDIT@
-NUNIT_CFLAGS = @NUNIT_CFLAGS@
-NUNIT_DEFINES = @NUNIT_DEFINES@
-NUNIT_LIBS = @NUNIT_LIBS@
-OBJC = @OBJC@
-OBJDUMP = @OBJDUMP@
-OBJEXT = @OBJEXT@
-OMF_DIR = @OMF_DIR@
-OTOOL = @OTOOL@
-OTOOL64 = @OTOOL64@
-PACKAGE = @PACKAGE@
-PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
-PACKAGE_NAME = @PACKAGE_NAME@
-PACKAGE_STRING = @PACKAGE_STRING@
-PACKAGE_TARNAME = @PACKAGE_TARNAME@
-PACKAGE_URL = @PACKAGE_URL@
-PACKAGE_VERSION = @PACKAGE_VERSION@
-PATH_SEPARATOR = @PATH_SEPARATOR@
-PKG_CONFIG = @PKG_CONFIG@
-POFILES = @POFILES@
-POSUB = @POSUB@
-PO_IN_DATADIR_FALSE = @PO_IN_DATADIR_FALSE@
-PO_IN_DATADIR_TRUE = @PO_IN_DATADIR_TRUE@
-Q = @Q@
-RANLIB = @RANLIB@
-SED = @SED@
-SET_MAKE = @SET_MAKE@
-SHELL = @SHELL@
-STRIP = @STRIP@
-TURTLEDIR = @TURTLEDIR@
-UNIQUE_CFLAGS = @UNIQUE_CFLAGS@
-UNIQUE_LIBS = @UNIQUE_LIBS@
-USE_NLS = @USE_NLS@
-V = @V@
-VERSION = @VERSION@
-WARN_CFLAGS = @WARN_CFLAGS@
-XGETTEXT = @XGETTEXT@
-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_DUMPBIN = @ac_ct_DUMPBIN@
-am__include = @am__include@
-am__leading_dot = @am__leading_dot@
-am__quote = @am__quote@
-am__tar = @am__tar@
-am__untar = @am__untar@
-bindir = @bindir@
-build = @build@
-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@
-expanded_bindir = @expanded_bindir@
-expanded_datadir = @expanded_datadir@
-expanded_libdir = @expanded_libdir@
-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@
-lt_ECHO = @lt_ECHO@
-mandir = @mandir@
-mkdir_p = @mkdir_p@
-oldincludedir = @oldincludedir@
-pdfdir = @pdfdir@
-prefix = @prefix@
-program_transform_name = @program_transform_name@
-psdir = @psdir@
-sbindir = @sbindir@
-sharedstatedir = @sharedstatedir@
-shavedir = @shavedir@
-srcdir = @srcdir@
-sysconfdir = @sysconfdir@
-target_alias = @target_alias@
-top_build_prefix = @top_build_prefix@
-top_builddir = @top_builddir@
-top_srcdir = @top_srcdir@
-DIR_DOCS = $(top_builddir)/docs
-DIR_EXTENSIONS = $(top_builddir)/extensions
-DIR_GPHOTO2 = $(top_builddir)/lib/libgphoto2-sharp
-DIR_ICONS = $(top_builddir)/icons
-DIR_JPEGTRAN = $(top_builddir)/lib/libjpegtran
-DIR_KEYRING = $(top_builddir)/lib/gnome-keyring-sharp
-DIR_LIBFSPOT = $(top_builddir)/lib/libfspot
-DIR_SEMWEB = $(top_builddir)/lib/semweb
-DIR_SRC = $(top_builddir)/src
-DIR_GIOSHARP = $(top_builddir)/lib/gio-sharp/gio
-DIR_GTKSHARPBEANS = $(top_builddir)/lib/gtk-sharp-beans
-DIR_UNIQUESHARP = $(top_builddir)/lib/unique-sharp/unique
-LINK_KEYRING = -r:$(DIR_KEYRING)/gnome-keyring-sharp.dll
-LINK_GPHOTO2 = -r:$(DIR_GPHOTO2)/libgphoto2-sharp.dll
-LINK_SEMWEB = -r:$(DIR_SEMWEB)/SemWeb.dll
-LINK_GIOSHARP = -r:$(DIR_GIOSHARP)/gio-sharp.dll
-LINK_GTKSHARPBEANS = -r:$(DIR_GTKSHARPBEANS)/gtk-sharp-beans.dll
-LINK_UNIQUESHARP = -r:$(DIR_UNIQUESHARP)/unique-sharp.dll
-CSC_FLAGS = -debug
-CSC = $(MCS) $(CSC_FLAGS) -target:exe
-CSC_LIB = $(MCS) $(CSC_FLAGS) -target:library
-MONO_DEBUGFLAGS = --debug
-RUNTIME = mono $(MONO_DEBUGFLAGS)
-PLUGIN_NAME = DPAPBrowser
-PLUGIN_MANIFEST = $(PLUGIN_NAME).addin.xml
-PLUGIN_ASSEMBLY = $(PLUGIN_NAME).dll
-PLUGIN_SOURCES = \
- $(srcdir)/DPAPBrowser.cs
-
-REFS = \
- -r:../../src/f-spot.exe \
- -r:../../src/FSpot.Core.dll \
- -r:../../src/FSpot.Widgets.dll \
- -r:../../src/FSpot.Utils.dll \
- -r:../lib/dpap-sharp.dll
-
-PKGS = \
- -pkg:gtk-sharp-2.0
-
-RESOURCES = \
- -resource:$(srcdir)/$(PLUGIN_MANIFEST)
-
-plugindir = $(pkglibdir)/extensions
-plugin_DATA = \
- $(PLUGIN_ASSEMBLY)
-
-EXTRA_DIST = \
- $(PLUGIN_SOURCES) \
- $(PLUGIN_MANIFEST)
-
-CLEANFILES = \
- $(PLUGIN_ASSEMBLY) \
- $(PLUGIN_ASSEMBLY).mdb \
- *.mpack
-
-all: all-am
-
-.SUFFIXES:
-$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(top_srcdir)/Makefile.include $(am__configure_deps)
- @for dep in $?; do \
- case '$(am__configure_deps)' in \
- *$$dep*) \
- ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \
- && { if test -f $@; then exit 0; else break; fi; }; \
- exit 1;; \
- esac; \
- done; \
- echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign lib/dpap-sharp/DPAPBrowser/Makefile'; \
- $(am__cd) $(top_srcdir) && \
- $(AUTOMAKE) --foreign lib/dpap-sharp/DPAPBrowser/Makefile
-.PRECIOUS: Makefile
-Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
- @case '$?' in \
- *config.status*) \
- cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \
- *) \
- echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \
- cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \
- esac;
-
-$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
- cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
-
-$(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps)
- cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
-$(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps)
- cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
-$(am__aclocal_m4_deps):
-
-mostlyclean-libtool:
- -rm -f *.lo
-
-clean-libtool:
- -rm -rf .libs _libs
-install-pluginDATA: $(plugin_DATA)
- @$(NORMAL_INSTALL)
- test -z "$(plugindir)" || $(MKDIR_P) "$(DESTDIR)$(plugindir)"
- @list='$(plugin_DATA)'; test -n "$(plugindir)" || list=; \
- for p in $$list; do \
- if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \
- echo "$$d$$p"; \
- done | $(am__base_list) | \
- while read files; do \
- echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(plugindir)'"; \
- $(INSTALL_DATA) $$files "$(DESTDIR)$(plugindir)" || exit $$?; \
- done
-
-uninstall-pluginDATA:
- @$(NORMAL_UNINSTALL)
- @list='$(plugin_DATA)'; test -n "$(plugindir)" || list=; \
- files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \
- test -n "$$files" || exit 0; \
- echo " ( cd '$(DESTDIR)$(plugindir)' && rm -f" $$files ")"; \
- cd "$(DESTDIR)$(plugindir)" && rm -f $$files
-tags: TAGS
-TAGS:
-
-ctags: CTAGS
-CTAGS:
-
-
-distdir: $(DISTFILES)
- @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; \
- if test -d $$d/$$file; then \
- dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \
- if test -d "$(distdir)/$$file"; then \
- find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
- fi; \
- if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
- cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \
- find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
- fi; \
- cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \
- else \
- test -f "$(distdir)/$$file" \
- || cp -p $$d/$$file "$(distdir)/$$file" \
- || exit 1; \
- fi; \
- done
-check-am: all-am
-check: check-am
-all-am: Makefile $(DATA)
-installdirs:
- for dir in "$(DESTDIR)$(plugindir)"; do \
- test -z "$$dir" || $(MKDIR_P) "$$dir"; \
- done
-install: install-am
-install-exec: install-exec-am
-install-data: install-data-am
-uninstall: uninstall-am
-
-install-am: all-am
- @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
-
-installcheck: installcheck-am
-install-strip:
- $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
- install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
- `test -z '$(STRIP)' || \
- echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install
-mostlyclean-generic:
-
-clean-generic:
- -test -z "$(CLEANFILES)" || rm -f $(CLEANFILES)
-
-distclean-generic:
- -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
- -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES)
-
-maintainer-clean-generic:
- @echo "This command is intended for maintainers to use"
- @echo "it deletes files that may require special tools to rebuild."
-clean: clean-am
-
-clean-am: clean-generic clean-libtool mostlyclean-am
-
-distclean: distclean-am
- -rm -f Makefile
-distclean-am: clean-am distclean-generic
-
-dvi: dvi-am
-
-dvi-am:
-
-html: html-am
-
-html-am:
-
-info: info-am
-
-info-am:
-
-install-data-am: install-pluginDATA
-
-install-dvi: install-dvi-am
-
-install-dvi-am:
-
-install-exec-am:
-
-install-html: install-html-am
-
-install-html-am:
-
-install-info: install-info-am
-
-install-info-am:
-
-install-man:
-
-install-pdf: install-pdf-am
-
-install-pdf-am:
-
-install-ps: install-ps-am
-
-install-ps-am:
-
-installcheck-am:
-
-maintainer-clean: maintainer-clean-am
- -rm -f Makefile
-maintainer-clean-am: distclean-am maintainer-clean-generic
-
-mostlyclean: mostlyclean-am
-
-mostlyclean-am: mostlyclean-generic mostlyclean-libtool
-
-pdf: pdf-am
-
-pdf-am:
-
-ps: ps-am
-
-ps-am:
-
-uninstall-am: uninstall-pluginDATA
-
-.MAKE: install-am install-strip
-
-.PHONY: all all-am check check-am clean clean-generic clean-libtool \
- distclean distclean-generic distclean-libtool distdir dvi \
- dvi-am html html-am info info-am 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-pluginDATA install-ps install-ps-am \
- install-strip installcheck installcheck-am installdirs \
- maintainer-clean maintainer-clean-generic mostlyclean \
- mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \
- uninstall uninstall-am uninstall-pluginDATA
-
-
-all: $(PLUGIN_ASSEMBLY)
-
-mpack: $(PLUGIN_ASSEMBLY)
- mautil p $(PLUGIN_ASSEMBLY)
-
-$(PLUGIN_ASSEMBLY): $(PLUGIN_SOURCES) $(PLUGIN_MANIFEST)
- $(CSC_LIB) -out:$@ $(CSC_DEFINES) $(PLUGIN_SOURCES) $(REFS) $(PKGS) $(ASSEMBLIES) $(RESOURCES)
-
-# 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.
-.NOEXPORT:
diff --git a/lib/dpap-sharp/DPAPService/DPAPService.addin.xml b/lib/dpap-sharp/DPAPService/DPAPService.addin.xml
deleted file mode 100644
index c228b84..0000000
--- a/lib/dpap-sharp/DPAPService/DPAPService.addin.xml
+++ /dev/null
@@ -1,17 +0,0 @@
-<Addin namespace="FSpot"
- id="DPAPService"
- version="0.6"
- name="DPAP Service"
- description="Notify Beagle on image changes"
- author="Stephane Delcroix"
- url="http://f-spot.org/Extensions"
- category="Services">
- <Dependencies>
- <Addin id="Core" version="0.6"/>
- </Dependencies>
- <Extension path = "/FSpot/Services">
- <Service class="DPAP.DPAPService"/>
- </Extension>
-</Addin>
-
-
diff --git a/lib/dpap-sharp/DPAPService/DPAPService.cs b/lib/dpap-sharp/DPAPService/DPAPService.cs
deleted file mode 100644
index 8d04893..0000000
--- a/lib/dpap-sharp/DPAPService/DPAPService.cs
+++ /dev/null
@@ -1,164 +0,0 @@
-// DPAPService.cs : DPAP Server for f-spot
-//
-// Author:
-// Andrzej Wytyczak-Partyka <iapart at gmail.com>
-// Copyright (C) 2008 Andrzej Wytyczak-Partyka
-//
-// This program is free software; you can redistribute it and/or modify
-// it under the terms of the GNU General Public License as published by
-// the Free Software Foundation; either version 2 of the License, or
-// (at your option) any later version.
-//
-// This program is distributed in the hope that it will be useful,
-// but WITHOUT ANY WARRANTY; without even the implied warranty of
-// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-// GNU General Public License for more details.
-//
-// You should have received a copy of the GNU General Public License
-// along with this program; if not, write to the Free Software
-// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
-//
-//
-
-using System;
-using FSpot;
-using FSpot.Extensions;
-using FSpot.Utils;
-using FSpot.Widgets;
-
-using System.IO;
-using DPAP;
-using Gtk;
-
-namespace DPAP {
-
-
- public class DPAPService : IService
- {
- static ServiceDiscovery sd;
- public bool Start ()
- {
- Console.WriteLine ("Starting DPAP!");
- uint timer = Log.InformationTimerStart ("Starting DPAP");
- StartServer ();
-
- return true;
- }
- private void StartServer ()
- {
- Console.WriteLine ("Starting DPAP server");
-
- DPAP.Database database = new DPAP.Database ("DPAP");
-
- DPAP.Server server = new Server (System.Environment.UserName.ToString() + " f-spot photos");
- server.Port = 8770;
- server.AuthenticationMethod = AuthenticationMethod.None;
- int collision_count = 0;
- server.Collision += delegate {
- server.Name = System.Environment.UserName.ToString() + " f-spot photos" + "[" + ++collision_count + "]";
- };
-
-
- //FSpot.Photo photo = (FSpot.Photo) Core.Database.Photos.Get (1);
-
- try {
- Album a = new Album ("test album");
- Tag t = Core.Database.Tags.GetTagByName ("Shared items");
-
- Tag []tags = {t};
- FSpot.Photo [] photos = Core.Database.Photos.Query (tags);
- int i=0;
-
- foreach (FSpot.Photo photo in photos) {
- string thumbnail_path = Gnome.Thumbnail.PathForUri (photo.DefaultVersionUri.ToString(), Gnome.ThumbnailSize.Large);
- FileInfo f = new FileInfo (thumbnail_path);
- DPAP.Photo p = new DPAP.Photo ();
-
- p.FileName = photo.Name;
- p.Thumbnail = thumbnail_path;
- p.ThumbSize = (int)f.Length;
- p.Path = photo.DefaultVersionUri.ToString ().Substring (7);
- f = new FileInfo (photo.DefaultVersionUri.ToString ().Substring (7));
- if (!f.Exists)
- continue;
-
- //if (++i > 2) break;
- Console.WriteLine ("Found photo " + p.Path + ", thumb " + thumbnail_path);
- p.Title = f.Name;
- p.Size = (int)f.Length;
- p.Format = "JPEG";
- database.AddPhoto (p);
- a.AddPhoto (p);
- }
-
- database.AddAlbum (a);
- Console.WriteLine ("Album count is now " + database.Albums.Count);
- server.AddDatabase (database);
-
- //server.GetServerInfoNode ();
- try {
- server.Start();
- } catch (System.Net.Sockets.SocketException) {
- Console.WriteLine ("Server socket exception!");
- server.Port = 0;
- server.Start();
- }
-
- //DaapPlugin.ServerEnabledSchema.Set (true);
-
- // if(!initial_db_committed) {
- server.Commit();
-
- // initial_db_committed = true;
- // }
- } catch (Exception e) {
- Console.WriteLine ("Failed starting dpap server \n{0}", e);
- }
- }
-
- public bool Stop ()
- {
- uint timer = Log.InformationTimerStart ("Stopping DPAP");
- if (sd != null) {
- sd.Stop ();
- sd.Found -= OnServiceFound;
- //locator.Removed -= OnServiceRemoved;
- sd = null;
- }
- return true;
- }
-
- private static void OnServiceFound (object o, ServiceArgs args)
- {
- Service service = args.Service;
- Client client;
-// ThreadAssist.Spawn (delegate {
- // try {
-
- System.Console.WriteLine ("Connecting to {0} at {1}:{2}", service.Name, service.Address, service.Port);
- client = new Client (service);
-
-
- /*foreach (Database d in client.Databases){
-
- Console.WriteLine ("Database " + d.Name);
-
- foreach (Album alb in d.Albums)
- Console.WriteLine ("\tAlbum: "+alb.Name + ", id=" + alb.getId () + " number of items:" + alb.Photos.Count);
-
- Console.WriteLine (d.Photos [0].FileName);
- foreach (DPAP.Photo ph in d.Photos)
- {
- if (ph != null)
- {
- Console.WriteLine ("\t\tFile: " + ph.Title + " format = " + ph.Format + "size=" + ph.Width +"x" +ph.Height + " ID=" + ph.Id);
- d.DownloadPhoto (ph,"./"+ph.Title);
- }
- }
-
- }*/
- //client.Logout ();
- // Console.WriteLine ("Press <enter> to exit...");
- }
- }
-}
diff --git a/lib/dpap-sharp/DPAPService/Makefile.am b/lib/dpap-sharp/DPAPService/Makefile.am
deleted file mode 100644
index 12a0cf9..0000000
--- a/lib/dpap-sharp/DPAPService/Makefile.am
+++ /dev/null
@@ -1,47 +0,0 @@
-include $(top_srcdir)/Makefile.include
-
-PLUGIN_NAME = DPAPService
-
-PLUGIN_MANIFEST = $(PLUGIN_NAME).addin.xml
-
-PLUGIN_ASSEMBLY = $(PLUGIN_NAME).dll
-
-PLUGIN_SOURCES = \
- $(srcdir)/DPAPService.cs
-
-
-REFS = \
- -r:../../src/f-spot.exe \
- -r:../../src/FSpot.Core.dll \
- -r:../../src/FSpot.Widgets.dll \
- -r:../../src/FSpot.Utils.dll \
- -r:../lib/dpap-sharp.dll
-
-PKGS = \
- -pkg:gnome-sharp-2.0 \
- -pkg:gtk-sharp-2.0
-
-RESOURCES = \
- -resource:$(srcdir)/$(PLUGIN_MANIFEST)
-
-all: $(PLUGIN_ASSEMBLY)
-
-mpack: $(PLUGIN_ASSEMBLY)
- mautil p $(PLUGIN_ASSEMBLY)
-
-$(PLUGIN_ASSEMBLY): $(PLUGIN_SOURCES) $(PLUGIN_MANIFEST)
- $(CSC_LIB) -out:$@ $(CSC_DEFINES) $(PLUGIN_SOURCES) $(REFS) $(PKGS) $(ASSEMBLIES) $(RESOURCES)
-
-plugindir = $(pkglibdir)/extensions
-
-plugin_DATA = \
- $(PLUGIN_ASSEMBLY)
-
-EXTRA_DIST = \
- $(PLUGIN_SOURCES) \
- $(PLUGIN_MANIFEST)
-
-CLEANFILES = \
- $(PLUGIN_ASSEMBLY) \
- $(PLUGIN_ASSEMBLY).mdb \
- *.mpack
diff --git a/lib/dpap-sharp/DPAPService/Makefile.in b/lib/dpap-sharp/DPAPService/Makefile.in
deleted file mode 100644
index 6383251..0000000
--- a/lib/dpap-sharp/DPAPService/Makefile.in
+++ /dev/null
@@ -1,563 +0,0 @@
-# Makefile.in generated by automake 1.11.1 from Makefile.am.
-# @configure_input@
-
-# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
-# 2003, 2004, 2005, 2006, 2007, 2008, 2009 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.
-
-# This program is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
-# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
-# PARTICULAR PURPOSE.
-
- at SET_MAKE@
-
-VPATH = @srcdir@
-pkgdatadir = $(datadir)/@PACKAGE@
-pkgincludedir = $(includedir)/@PACKAGE@
-pkglibdir = $(libdir)/@PACKAGE@
-pkglibexecdir = $(libexecdir)/@PACKAGE@
-am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
-install_sh_DATA = $(install_sh) -c -m 644
-install_sh_PROGRAM = $(install_sh) -c
-install_sh_SCRIPT = $(install_sh) -c
-INSTALL_HEADER = $(INSTALL_DATA)
-transform = $(program_transform_name)
-NORMAL_INSTALL = :
-PRE_INSTALL = :
-POST_INSTALL = :
-NORMAL_UNINSTALL = :
-PRE_UNINSTALL = :
-POST_UNINSTALL = :
-build_triplet = @build@
-host_triplet = @host@
-DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in \
- $(top_srcdir)/Makefile.include
-subdir = lib/dpap-sharp/DPAPService
-ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
-am__aclocal_m4_deps = $(top_srcdir)/build/m4/shave/shave.m4 \
- $(top_srcdir)/build/m4/shamrock/expansions.m4 \
- $(top_srcdir)/build/m4/shamrock/mono.m4 \
- $(top_srcdir)/build/m4/shamrock/programs.m4 \
- $(top_srcdir)/acinclude.m4 $(top_srcdir)/configure.ac
-am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
- $(ACLOCAL_M4)
-mkinstalldirs = $(install_sh) -d
-CONFIG_HEADER = $(top_builddir)/config.h
-CONFIG_CLEAN_FILES =
-CONFIG_CLEAN_VPATH_FILES =
-SOURCES =
-DIST_SOURCES =
-am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`;
-am__vpath_adj = case $$p in \
- $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \
- *) f=$$p;; \
- esac;
-am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`;
-am__install_max = 40
-am__nobase_strip_setup = \
- srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'`
-am__nobase_strip = \
- for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||"
-am__nobase_list = $(am__nobase_strip_setup); \
- for p in $$list; do echo "$$p $$p"; done | \
- sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \
- $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \
- if (++n[$$2] == $(am__install_max)) \
- { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \
- END { for (dir in files) print dir, files[dir] }'
-am__base_list = \
- sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \
- sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g'
-am__installdirs = "$(DESTDIR)$(plugindir)"
-DATA = $(plugin_DATA)
-DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
-ACLOCAL = @ACLOCAL@
-ACLOCAL_AMFLAGS = @ACLOCAL_AMFLAGS@
-ALL_LINGUAS = @ALL_LINGUAS@
-AMTAR = @AMTAR@
-AM_MAKEFLAGS = @AM_MAKEFLAGS@
-API_VERSION = @API_VERSION@
-AR = @AR@
-ASM_VERSION = @ASM_VERSION@
-AUTOCONF = @AUTOCONF@
-AUTOHEADER = @AUTOHEADER@
-AUTOMAKE = @AUTOMAKE@
-AWK = @AWK@
-CATALOGS = @CATALOGS@
-CATOBJEXT = @CATOBJEXT@
-CC = @CC@
-CCDEPMODE = @CCDEPMODE@
-CFLAGS = @CFLAGS@
-CPP = @CPP@
-CPPFLAGS = @CPPFLAGS@
-CSC_DEFINES = @CSC_DEFINES@
-CXX = @CXX@
-CXXCPP = @CXXCPP@
-CXXDEPMODE = @CXXDEPMODE@
-CXXFLAGS = @CXXFLAGS@
-CYGPATH_W = @CYGPATH_W@
-DATADIRNAME = @DATADIRNAME@
-DEFS = @DEFS@
-DEPDIR = @DEPDIR@
-DISPLAY_VERSION = @DISPLAY_VERSION@
-DISTCHECK_CONFIGURE_FLAGS = @DISTCHECK_CONFIGURE_FLAGS@
-DOC_USER_FORMATS = @DOC_USER_FORMATS@
-DSYMUTIL = @DSYMUTIL@
-DUMPBIN = @DUMPBIN@
-ECHO_C = @ECHO_C@
-ECHO_N = @ECHO_N@
-ECHO_T = @ECHO_T@
-EGREP = @EGREP@
-EXEEXT = @EXEEXT@
-EXIF_CFLAGS = @EXIF_CFLAGS@
-EXIF_LIBS = @EXIF_LIBS@
-EXIF_SOVERSION = @EXIF_SOVERSION@
-F77 = @F77@
-FC = @FC@
-FGREP = @FGREP@
-F_CFLAGS = @F_CFLAGS@
-F_LIBS = @F_LIBS@
-GAPI2CODEGEN = @GAPI2CODEGEN@
-GAPI2FIXUP = @GAPI2FIXUP@
-GAPI2PARSER = @GAPI2PARSER@
-GCONFTOOL = @GCONFTOOL@
-GCONF_SCHEMA_CONFIG_SOURCE = @GCONF_SCHEMA_CONFIG_SOURCE@
-GCONF_SCHEMA_FILE_DIR = @GCONF_SCHEMA_FILE_DIR@
-GCONF_SHARP_CFLAGS = @GCONF_SHARP_CFLAGS@
-GCONF_SHARP_LIBS = @GCONF_SHARP_LIBS@
-GETTEXT_PACKAGE = @GETTEXT_PACKAGE@
-GIO_CFLAGS = @GIO_CFLAGS@
-GIO_LIBS = @GIO_LIBS@
-GLIBSHARP_CFLAGS = @GLIBSHARP_CFLAGS@
-GLIBSHARP_LIBS = @GLIBSHARP_LIBS@
-GLIB_CFLAGS = @GLIB_CFLAGS@
-GLIB_GENMARSHAL = @GLIB_GENMARSHAL@
-GLIB_LIBS = @GLIB_LIBS@
-GLIB_MKENUMS = @GLIB_MKENUMS@
-GMOFILES = @GMOFILES@
-GMSGFMT = @GMSGFMT@
-GNOME_ICON_THEME_PREFIX = @GNOME_ICON_THEME_PREFIX@
-GNOME_SCREENSAVER_SAVERDIR = @GNOME_SCREENSAVER_SAVERDIR@
-GNOME_SCREENSAVER_THEMESDIR = @GNOME_SCREENSAVER_THEMESDIR@
-GNOME_SHARP_CFLAGS = @GNOME_SHARP_CFLAGS@
-GNOME_SHARP_LIBS = @GNOME_SHARP_LIBS@
-GOBJECT_QUERY = @GOBJECT_QUERY@
-GREP = @GREP@
-HELP_DIR = @HELP_DIR@
-ICONS_DIRECTORY = @ICONS_DIRECTORY@
-INSTALL = @INSTALL@
-INSTALL_DATA = @INSTALL_DATA@
-INSTALL_PROGRAM = @INSTALL_PROGRAM@
-INSTALL_SCRIPT = @INSTALL_SCRIPT@
-INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
-INSTOBJEXT = @INSTOBJEXT@
-INTLLIBS = @INTLLIBS@
-INTLTOOL_EXTRACT = @INTLTOOL_EXTRACT@
-INTLTOOL_MERGE = @INTLTOOL_MERGE@
-INTLTOOL_PERL = @INTLTOOL_PERL@
-INTLTOOL_UPDATE = @INTLTOOL_UPDATE@
-LCMS_CFLAGS = @LCMS_CFLAGS@
-LCMS_LIBS = @LCMS_LIBS@
-LD = @LD@
-LDFLAGS = @LDFLAGS@
-LIBEXIF_VERSION_CHECK_CFLAGS = @LIBEXIF_VERSION_CHECK_CFLAGS@
-LIBEXIF_VERSION_CHECK_LIBS = @LIBEXIF_VERSION_CHECK_LIBS@
-LIBGPHOTO2_CFLAGS = @LIBGPHOTO2_CFLAGS@
-LIBGPHOTO2_LIBS = @LIBGPHOTO2_LIBS@
-LIBJPEG = @LIBJPEG@
-LIBOBJS = @LIBOBJS@
-LIBS = @LIBS@
-LIBTOOL = @LIBTOOL@
-LIPO = @LIPO@
-LN_S = @LN_S@
-LTLIBOBJS = @LTLIBOBJS@
-MAINT = @MAINT@
-MAKEFLAGS = @MAKEFLAGS@
-MAKEINFO = @MAKEINFO@
-MCS = @MCS@
-MKDIR_P = @MKDIR_P@
-MKINSTALLDIRS = @MKINSTALLDIRS@
-MONO = @MONO@
-MONO_MODULE_CFLAGS = @MONO_MODULE_CFLAGS@
-MONO_MODULE_LIBS = @MONO_MODULE_LIBS@
-MSGFMT = @MSGFMT@
-MSGFMT_OPTS = @MSGFMT_OPTS@
-MSGMERGE = @MSGMERGE@
-NDESK_DBUS_CFLAGS = @NDESK_DBUS_CFLAGS@
-NDESK_DBUS_LIBS = @NDESK_DBUS_LIBS@
-NM = @NM@
-NMEDIT = @NMEDIT@
-NUNIT_CFLAGS = @NUNIT_CFLAGS@
-NUNIT_DEFINES = @NUNIT_DEFINES@
-NUNIT_LIBS = @NUNIT_LIBS@
-OBJC = @OBJC@
-OBJDUMP = @OBJDUMP@
-OBJEXT = @OBJEXT@
-OMF_DIR = @OMF_DIR@
-OTOOL = @OTOOL@
-OTOOL64 = @OTOOL64@
-PACKAGE = @PACKAGE@
-PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
-PACKAGE_NAME = @PACKAGE_NAME@
-PACKAGE_STRING = @PACKAGE_STRING@
-PACKAGE_TARNAME = @PACKAGE_TARNAME@
-PACKAGE_URL = @PACKAGE_URL@
-PACKAGE_VERSION = @PACKAGE_VERSION@
-PATH_SEPARATOR = @PATH_SEPARATOR@
-PKG_CONFIG = @PKG_CONFIG@
-POFILES = @POFILES@
-POSUB = @POSUB@
-PO_IN_DATADIR_FALSE = @PO_IN_DATADIR_FALSE@
-PO_IN_DATADIR_TRUE = @PO_IN_DATADIR_TRUE@
-Q = @Q@
-RANLIB = @RANLIB@
-SED = @SED@
-SET_MAKE = @SET_MAKE@
-SHELL = @SHELL@
-STRIP = @STRIP@
-TURTLEDIR = @TURTLEDIR@
-UNIQUE_CFLAGS = @UNIQUE_CFLAGS@
-UNIQUE_LIBS = @UNIQUE_LIBS@
-USE_NLS = @USE_NLS@
-V = @V@
-VERSION = @VERSION@
-WARN_CFLAGS = @WARN_CFLAGS@
-XGETTEXT = @XGETTEXT@
-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_DUMPBIN = @ac_ct_DUMPBIN@
-am__include = @am__include@
-am__leading_dot = @am__leading_dot@
-am__quote = @am__quote@
-am__tar = @am__tar@
-am__untar = @am__untar@
-bindir = @bindir@
-build = @build@
-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@
-expanded_bindir = @expanded_bindir@
-expanded_datadir = @expanded_datadir@
-expanded_libdir = @expanded_libdir@
-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@
-lt_ECHO = @lt_ECHO@
-mandir = @mandir@
-mkdir_p = @mkdir_p@
-oldincludedir = @oldincludedir@
-pdfdir = @pdfdir@
-prefix = @prefix@
-program_transform_name = @program_transform_name@
-psdir = @psdir@
-sbindir = @sbindir@
-sharedstatedir = @sharedstatedir@
-shavedir = @shavedir@
-srcdir = @srcdir@
-sysconfdir = @sysconfdir@
-target_alias = @target_alias@
-top_build_prefix = @top_build_prefix@
-top_builddir = @top_builddir@
-top_srcdir = @top_srcdir@
-DIR_DOCS = $(top_builddir)/docs
-DIR_EXTENSIONS = $(top_builddir)/extensions
-DIR_GPHOTO2 = $(top_builddir)/lib/libgphoto2-sharp
-DIR_ICONS = $(top_builddir)/icons
-DIR_JPEGTRAN = $(top_builddir)/lib/libjpegtran
-DIR_KEYRING = $(top_builddir)/lib/gnome-keyring-sharp
-DIR_LIBFSPOT = $(top_builddir)/lib/libfspot
-DIR_SEMWEB = $(top_builddir)/lib/semweb
-DIR_SRC = $(top_builddir)/src
-DIR_GIOSHARP = $(top_builddir)/lib/gio-sharp/gio
-DIR_GTKSHARPBEANS = $(top_builddir)/lib/gtk-sharp-beans
-DIR_UNIQUESHARP = $(top_builddir)/lib/unique-sharp/unique
-LINK_KEYRING = -r:$(DIR_KEYRING)/gnome-keyring-sharp.dll
-LINK_GPHOTO2 = -r:$(DIR_GPHOTO2)/libgphoto2-sharp.dll
-LINK_SEMWEB = -r:$(DIR_SEMWEB)/SemWeb.dll
-LINK_GIOSHARP = -r:$(DIR_GIOSHARP)/gio-sharp.dll
-LINK_GTKSHARPBEANS = -r:$(DIR_GTKSHARPBEANS)/gtk-sharp-beans.dll
-LINK_UNIQUESHARP = -r:$(DIR_UNIQUESHARP)/unique-sharp.dll
-CSC_FLAGS = -debug
-CSC = $(MCS) $(CSC_FLAGS) -target:exe
-CSC_LIB = $(MCS) $(CSC_FLAGS) -target:library
-MONO_DEBUGFLAGS = --debug
-RUNTIME = mono $(MONO_DEBUGFLAGS)
-PLUGIN_NAME = DPAPService
-PLUGIN_MANIFEST = $(PLUGIN_NAME).addin.xml
-PLUGIN_ASSEMBLY = $(PLUGIN_NAME).dll
-PLUGIN_SOURCES = \
- $(srcdir)/DPAPService.cs
-
-REFS = \
- -r:../../src/f-spot.exe \
- -r:../../src/FSpot.Core.dll \
- -r:../../src/FSpot.Widgets.dll \
- -r:../../src/FSpot.Utils.dll \
- -r:../lib/dpap-sharp.dll
-
-PKGS = \
- -pkg:gnome-sharp-2.0 \
- -pkg:gtk-sharp-2.0
-
-RESOURCES = \
- -resource:$(srcdir)/$(PLUGIN_MANIFEST)
-
-plugindir = $(pkglibdir)/extensions
-plugin_DATA = \
- $(PLUGIN_ASSEMBLY)
-
-EXTRA_DIST = \
- $(PLUGIN_SOURCES) \
- $(PLUGIN_MANIFEST)
-
-CLEANFILES = \
- $(PLUGIN_ASSEMBLY) \
- $(PLUGIN_ASSEMBLY).mdb \
- *.mpack
-
-all: all-am
-
-.SUFFIXES:
-$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(top_srcdir)/Makefile.include $(am__configure_deps)
- @for dep in $?; do \
- case '$(am__configure_deps)' in \
- *$$dep*) \
- ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \
- && { if test -f $@; then exit 0; else break; fi; }; \
- exit 1;; \
- esac; \
- done; \
- echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign lib/dpap-sharp/DPAPService/Makefile'; \
- $(am__cd) $(top_srcdir) && \
- $(AUTOMAKE) --foreign lib/dpap-sharp/DPAPService/Makefile
-.PRECIOUS: Makefile
-Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
- @case '$?' in \
- *config.status*) \
- cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \
- *) \
- echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \
- cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \
- esac;
-
-$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
- cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
-
-$(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps)
- cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
-$(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps)
- cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
-$(am__aclocal_m4_deps):
-
-mostlyclean-libtool:
- -rm -f *.lo
-
-clean-libtool:
- -rm -rf .libs _libs
-install-pluginDATA: $(plugin_DATA)
- @$(NORMAL_INSTALL)
- test -z "$(plugindir)" || $(MKDIR_P) "$(DESTDIR)$(plugindir)"
- @list='$(plugin_DATA)'; test -n "$(plugindir)" || list=; \
- for p in $$list; do \
- if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \
- echo "$$d$$p"; \
- done | $(am__base_list) | \
- while read files; do \
- echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(plugindir)'"; \
- $(INSTALL_DATA) $$files "$(DESTDIR)$(plugindir)" || exit $$?; \
- done
-
-uninstall-pluginDATA:
- @$(NORMAL_UNINSTALL)
- @list='$(plugin_DATA)'; test -n "$(plugindir)" || list=; \
- files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \
- test -n "$$files" || exit 0; \
- echo " ( cd '$(DESTDIR)$(plugindir)' && rm -f" $$files ")"; \
- cd "$(DESTDIR)$(plugindir)" && rm -f $$files
-tags: TAGS
-TAGS:
-
-ctags: CTAGS
-CTAGS:
-
-
-distdir: $(DISTFILES)
- @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; \
- if test -d $$d/$$file; then \
- dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \
- if test -d "$(distdir)/$$file"; then \
- find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
- fi; \
- if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
- cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \
- find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
- fi; \
- cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \
- else \
- test -f "$(distdir)/$$file" \
- || cp -p $$d/$$file "$(distdir)/$$file" \
- || exit 1; \
- fi; \
- done
-check-am: all-am
-check: check-am
-all-am: Makefile $(DATA)
-installdirs:
- for dir in "$(DESTDIR)$(plugindir)"; do \
- test -z "$$dir" || $(MKDIR_P) "$$dir"; \
- done
-install: install-am
-install-exec: install-exec-am
-install-data: install-data-am
-uninstall: uninstall-am
-
-install-am: all-am
- @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
-
-installcheck: installcheck-am
-install-strip:
- $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
- install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
- `test -z '$(STRIP)' || \
- echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install
-mostlyclean-generic:
-
-clean-generic:
- -test -z "$(CLEANFILES)" || rm -f $(CLEANFILES)
-
-distclean-generic:
- -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
- -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES)
-
-maintainer-clean-generic:
- @echo "This command is intended for maintainers to use"
- @echo "it deletes files that may require special tools to rebuild."
-clean: clean-am
-
-clean-am: clean-generic clean-libtool mostlyclean-am
-
-distclean: distclean-am
- -rm -f Makefile
-distclean-am: clean-am distclean-generic
-
-dvi: dvi-am
-
-dvi-am:
-
-html: html-am
-
-html-am:
-
-info: info-am
-
-info-am:
-
-install-data-am: install-pluginDATA
-
-install-dvi: install-dvi-am
-
-install-dvi-am:
-
-install-exec-am:
-
-install-html: install-html-am
-
-install-html-am:
-
-install-info: install-info-am
-
-install-info-am:
-
-install-man:
-
-install-pdf: install-pdf-am
-
-install-pdf-am:
-
-install-ps: install-ps-am
-
-install-ps-am:
-
-installcheck-am:
-
-maintainer-clean: maintainer-clean-am
- -rm -f Makefile
-maintainer-clean-am: distclean-am maintainer-clean-generic
-
-mostlyclean: mostlyclean-am
-
-mostlyclean-am: mostlyclean-generic mostlyclean-libtool
-
-pdf: pdf-am
-
-pdf-am:
-
-ps: ps-am
-
-ps-am:
-
-uninstall-am: uninstall-pluginDATA
-
-.MAKE: install-am install-strip
-
-.PHONY: all all-am check check-am clean clean-generic clean-libtool \
- distclean distclean-generic distclean-libtool distdir dvi \
- dvi-am html html-am info info-am 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-pluginDATA install-ps install-ps-am \
- install-strip installcheck installcheck-am installdirs \
- maintainer-clean maintainer-clean-generic mostlyclean \
- mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \
- uninstall uninstall-am uninstall-pluginDATA
-
-
-all: $(PLUGIN_ASSEMBLY)
-
-mpack: $(PLUGIN_ASSEMBLY)
- mautil p $(PLUGIN_ASSEMBLY)
-
-$(PLUGIN_ASSEMBLY): $(PLUGIN_SOURCES) $(PLUGIN_MANIFEST)
- $(CSC_LIB) -out:$@ $(CSC_DEFINES) $(PLUGIN_SOURCES) $(REFS) $(PKGS) $(ASSEMBLIES) $(RESOURCES)
-
-# 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.
-.NOEXPORT:
diff --git a/lib/dpap-sharp/Makefile.am b/lib/dpap-sharp/Makefile.am
deleted file mode 100644
index 002d73e..0000000
--- a/lib/dpap-sharp/Makefile.am
+++ /dev/null
@@ -1,6 +0,0 @@
-SUBDIRS = \
- lib \
- dpap-server \
- DPAPService \
- DPAPBrowser \
- dpap-client
diff --git a/lib/dpap-sharp/Makefile.in b/lib/dpap-sharp/Makefile.in
deleted file mode 100644
index 637debe..0000000
--- a/lib/dpap-sharp/Makefile.in
+++ /dev/null
@@ -1,658 +0,0 @@
-# Makefile.in generated by automake 1.11.1 from Makefile.am.
-# @configure_input@
-
-# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
-# 2003, 2004, 2005, 2006, 2007, 2008, 2009 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.
-
-# This program is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
-# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
-# PARTICULAR PURPOSE.
-
- at SET_MAKE@
-VPATH = @srcdir@
-pkgdatadir = $(datadir)/@PACKAGE@
-pkgincludedir = $(includedir)/@PACKAGE@
-pkglibdir = $(libdir)/@PACKAGE@
-pkglibexecdir = $(libexecdir)/@PACKAGE@
-am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
-install_sh_DATA = $(install_sh) -c -m 644
-install_sh_PROGRAM = $(install_sh) -c
-install_sh_SCRIPT = $(install_sh) -c
-INSTALL_HEADER = $(INSTALL_DATA)
-transform = $(program_transform_name)
-NORMAL_INSTALL = :
-PRE_INSTALL = :
-POST_INSTALL = :
-NORMAL_UNINSTALL = :
-PRE_UNINSTALL = :
-POST_UNINSTALL = :
-build_triplet = @build@
-host_triplet = @host@
-subdir = lib/dpap-sharp
-DIST_COMMON = README $(srcdir)/Makefile.am $(srcdir)/Makefile.in
-ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
-am__aclocal_m4_deps = $(top_srcdir)/build/m4/shave/shave.m4 \
- $(top_srcdir)/build/m4/shamrock/expansions.m4 \
- $(top_srcdir)/build/m4/shamrock/mono.m4 \
- $(top_srcdir)/build/m4/shamrock/programs.m4 \
- $(top_srcdir)/acinclude.m4 $(top_srcdir)/configure.ac
-am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
- $(ACLOCAL_M4)
-mkinstalldirs = $(install_sh) -d
-CONFIG_HEADER = $(top_builddir)/config.h
-CONFIG_CLEAN_FILES =
-CONFIG_CLEAN_VPATH_FILES =
-SOURCES =
-DIST_SOURCES =
-RECURSIVE_TARGETS = all-recursive check-recursive dvi-recursive \
- html-recursive info-recursive install-data-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
-AM_RECURSIVE_TARGETS = $(RECURSIVE_TARGETS:-recursive=) \
- $(RECURSIVE_CLEAN_TARGETS:-recursive=) tags TAGS ctags CTAGS \
- distdir
-ETAGS = etags
-CTAGS = ctags
-DIST_SUBDIRS = $(SUBDIRS)
-DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
-am__relativize = \
- dir0=`pwd`; \
- sed_first='s,^\([^/]*\)/.*$$,\1,'; \
- sed_rest='s,^[^/]*/*,,'; \
- sed_last='s,^.*/\([^/]*\)$$,\1,'; \
- sed_butlast='s,/*[^/]*$$,,'; \
- while test -n "$$dir1"; do \
- first=`echo "$$dir1" | sed -e "$$sed_first"`; \
- if test "$$first" != "."; then \
- if test "$$first" = ".."; then \
- dir2=`echo "$$dir0" | sed -e "$$sed_last"`/"$$dir2"; \
- dir0=`echo "$$dir0" | sed -e "$$sed_butlast"`; \
- else \
- first2=`echo "$$dir2" | sed -e "$$sed_first"`; \
- if test "$$first2" = "$$first"; then \
- dir2=`echo "$$dir2" | sed -e "$$sed_rest"`; \
- else \
- dir2="../$$dir2"; \
- fi; \
- dir0="$$dir0"/"$$first"; \
- fi; \
- fi; \
- dir1=`echo "$$dir1" | sed -e "$$sed_rest"`; \
- done; \
- reldir="$$dir2"
-ACLOCAL = @ACLOCAL@
-ACLOCAL_AMFLAGS = @ACLOCAL_AMFLAGS@
-ALL_LINGUAS = @ALL_LINGUAS@
-AMTAR = @AMTAR@
-AM_MAKEFLAGS = @AM_MAKEFLAGS@
-API_VERSION = @API_VERSION@
-AR = @AR@
-ASM_VERSION = @ASM_VERSION@
-AUTOCONF = @AUTOCONF@
-AUTOHEADER = @AUTOHEADER@
-AUTOMAKE = @AUTOMAKE@
-AWK = @AWK@
-CATALOGS = @CATALOGS@
-CATOBJEXT = @CATOBJEXT@
-CC = @CC@
-CCDEPMODE = @CCDEPMODE@
-CFLAGS = @CFLAGS@
-CPP = @CPP@
-CPPFLAGS = @CPPFLAGS@
-CSC_DEFINES = @CSC_DEFINES@
-CXX = @CXX@
-CXXCPP = @CXXCPP@
-CXXDEPMODE = @CXXDEPMODE@
-CXXFLAGS = @CXXFLAGS@
-CYGPATH_W = @CYGPATH_W@
-DATADIRNAME = @DATADIRNAME@
-DEFS = @DEFS@
-DEPDIR = @DEPDIR@
-DISPLAY_VERSION = @DISPLAY_VERSION@
-DISTCHECK_CONFIGURE_FLAGS = @DISTCHECK_CONFIGURE_FLAGS@
-DOC_USER_FORMATS = @DOC_USER_FORMATS@
-DSYMUTIL = @DSYMUTIL@
-DUMPBIN = @DUMPBIN@
-ECHO_C = @ECHO_C@
-ECHO_N = @ECHO_N@
-ECHO_T = @ECHO_T@
-EGREP = @EGREP@
-EXEEXT = @EXEEXT@
-EXIF_CFLAGS = @EXIF_CFLAGS@
-EXIF_LIBS = @EXIF_LIBS@
-EXIF_SOVERSION = @EXIF_SOVERSION@
-F77 = @F77@
-FC = @FC@
-FGREP = @FGREP@
-F_CFLAGS = @F_CFLAGS@
-F_LIBS = @F_LIBS@
-GAPI2CODEGEN = @GAPI2CODEGEN@
-GAPI2FIXUP = @GAPI2FIXUP@
-GAPI2PARSER = @GAPI2PARSER@
-GCONFTOOL = @GCONFTOOL@
-GCONF_SCHEMA_CONFIG_SOURCE = @GCONF_SCHEMA_CONFIG_SOURCE@
-GCONF_SCHEMA_FILE_DIR = @GCONF_SCHEMA_FILE_DIR@
-GCONF_SHARP_CFLAGS = @GCONF_SHARP_CFLAGS@
-GCONF_SHARP_LIBS = @GCONF_SHARP_LIBS@
-GETTEXT_PACKAGE = @GETTEXT_PACKAGE@
-GIO_CFLAGS = @GIO_CFLAGS@
-GIO_LIBS = @GIO_LIBS@
-GLIBSHARP_CFLAGS = @GLIBSHARP_CFLAGS@
-GLIBSHARP_LIBS = @GLIBSHARP_LIBS@
-GLIB_CFLAGS = @GLIB_CFLAGS@
-GLIB_GENMARSHAL = @GLIB_GENMARSHAL@
-GLIB_LIBS = @GLIB_LIBS@
-GLIB_MKENUMS = @GLIB_MKENUMS@
-GMOFILES = @GMOFILES@
-GMSGFMT = @GMSGFMT@
-GNOME_ICON_THEME_PREFIX = @GNOME_ICON_THEME_PREFIX@
-GNOME_SCREENSAVER_SAVERDIR = @GNOME_SCREENSAVER_SAVERDIR@
-GNOME_SCREENSAVER_THEMESDIR = @GNOME_SCREENSAVER_THEMESDIR@
-GNOME_SHARP_CFLAGS = @GNOME_SHARP_CFLAGS@
-GNOME_SHARP_LIBS = @GNOME_SHARP_LIBS@
-GOBJECT_QUERY = @GOBJECT_QUERY@
-GREP = @GREP@
-HELP_DIR = @HELP_DIR@
-ICONS_DIRECTORY = @ICONS_DIRECTORY@
-INSTALL = @INSTALL@
-INSTALL_DATA = @INSTALL_DATA@
-INSTALL_PROGRAM = @INSTALL_PROGRAM@
-INSTALL_SCRIPT = @INSTALL_SCRIPT@
-INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
-INSTOBJEXT = @INSTOBJEXT@
-INTLLIBS = @INTLLIBS@
-INTLTOOL_EXTRACT = @INTLTOOL_EXTRACT@
-INTLTOOL_MERGE = @INTLTOOL_MERGE@
-INTLTOOL_PERL = @INTLTOOL_PERL@
-INTLTOOL_UPDATE = @INTLTOOL_UPDATE@
-LCMS_CFLAGS = @LCMS_CFLAGS@
-LCMS_LIBS = @LCMS_LIBS@
-LD = @LD@
-LDFLAGS = @LDFLAGS@
-LIBEXIF_VERSION_CHECK_CFLAGS = @LIBEXIF_VERSION_CHECK_CFLAGS@
-LIBEXIF_VERSION_CHECK_LIBS = @LIBEXIF_VERSION_CHECK_LIBS@
-LIBGPHOTO2_CFLAGS = @LIBGPHOTO2_CFLAGS@
-LIBGPHOTO2_LIBS = @LIBGPHOTO2_LIBS@
-LIBJPEG = @LIBJPEG@
-LIBOBJS = @LIBOBJS@
-LIBS = @LIBS@
-LIBTOOL = @LIBTOOL@
-LIPO = @LIPO@
-LN_S = @LN_S@
-LTLIBOBJS = @LTLIBOBJS@
-MAINT = @MAINT@
-MAKEFLAGS = @MAKEFLAGS@
-MAKEINFO = @MAKEINFO@
-MCS = @MCS@
-MKDIR_P = @MKDIR_P@
-MKINSTALLDIRS = @MKINSTALLDIRS@
-MONO = @MONO@
-MONO_MODULE_CFLAGS = @MONO_MODULE_CFLAGS@
-MONO_MODULE_LIBS = @MONO_MODULE_LIBS@
-MSGFMT = @MSGFMT@
-MSGFMT_OPTS = @MSGFMT_OPTS@
-MSGMERGE = @MSGMERGE@
-NDESK_DBUS_CFLAGS = @NDESK_DBUS_CFLAGS@
-NDESK_DBUS_LIBS = @NDESK_DBUS_LIBS@
-NM = @NM@
-NMEDIT = @NMEDIT@
-NUNIT_CFLAGS = @NUNIT_CFLAGS@
-NUNIT_DEFINES = @NUNIT_DEFINES@
-NUNIT_LIBS = @NUNIT_LIBS@
-OBJC = @OBJC@
-OBJDUMP = @OBJDUMP@
-OBJEXT = @OBJEXT@
-OMF_DIR = @OMF_DIR@
-OTOOL = @OTOOL@
-OTOOL64 = @OTOOL64@
-PACKAGE = @PACKAGE@
-PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
-PACKAGE_NAME = @PACKAGE_NAME@
-PACKAGE_STRING = @PACKAGE_STRING@
-PACKAGE_TARNAME = @PACKAGE_TARNAME@
-PACKAGE_URL = @PACKAGE_URL@
-PACKAGE_VERSION = @PACKAGE_VERSION@
-PATH_SEPARATOR = @PATH_SEPARATOR@
-PKG_CONFIG = @PKG_CONFIG@
-POFILES = @POFILES@
-POSUB = @POSUB@
-PO_IN_DATADIR_FALSE = @PO_IN_DATADIR_FALSE@
-PO_IN_DATADIR_TRUE = @PO_IN_DATADIR_TRUE@
-Q = @Q@
-RANLIB = @RANLIB@
-SED = @SED@
-SET_MAKE = @SET_MAKE@
-SHELL = @SHELL@
-STRIP = @STRIP@
-TURTLEDIR = @TURTLEDIR@
-UNIQUE_CFLAGS = @UNIQUE_CFLAGS@
-UNIQUE_LIBS = @UNIQUE_LIBS@
-USE_NLS = @USE_NLS@
-V = @V@
-VERSION = @VERSION@
-WARN_CFLAGS = @WARN_CFLAGS@
-XGETTEXT = @XGETTEXT@
-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_DUMPBIN = @ac_ct_DUMPBIN@
-am__include = @am__include@
-am__leading_dot = @am__leading_dot@
-am__quote = @am__quote@
-am__tar = @am__tar@
-am__untar = @am__untar@
-bindir = @bindir@
-build = @build@
-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@
-expanded_bindir = @expanded_bindir@
-expanded_datadir = @expanded_datadir@
-expanded_libdir = @expanded_libdir@
-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@
-lt_ECHO = @lt_ECHO@
-mandir = @mandir@
-mkdir_p = @mkdir_p@
-oldincludedir = @oldincludedir@
-pdfdir = @pdfdir@
-prefix = @prefix@
-program_transform_name = @program_transform_name@
-psdir = @psdir@
-sbindir = @sbindir@
-sharedstatedir = @sharedstatedir@
-shavedir = @shavedir@
-srcdir = @srcdir@
-sysconfdir = @sysconfdir@
-target_alias = @target_alias@
-top_build_prefix = @top_build_prefix@
-top_builddir = @top_builddir@
-top_srcdir = @top_srcdir@
-SUBDIRS = \
- lib \
- dpap-server \
- DPAPService \
- DPAPBrowser \
- dpap-client
-
-all: all-recursive
-
-.SUFFIXES:
-$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(am__configure_deps)
- @for dep in $?; do \
- case '$(am__configure_deps)' in \
- *$$dep*) \
- ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \
- && { if test -f $@; then exit 0; else break; fi; }; \
- exit 1;; \
- esac; \
- done; \
- echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign lib/dpap-sharp/Makefile'; \
- $(am__cd) $(top_srcdir) && \
- $(AUTOMAKE) --foreign lib/dpap-sharp/Makefile
-.PRECIOUS: Makefile
-Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
- @case '$?' in \
- *config.status*) \
- cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \
- *) \
- echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \
- cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \
- esac;
-
-$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
- cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
-
-$(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps)
- cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
-$(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps)
- cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
-$(am__aclocal_m4_deps):
-
-mostlyclean-libtool:
- -rm -f *.lo
-
-clean-libtool:
- -rm -rf .libs _libs
-
-# 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,
-# (1) if the variable is set in `config.status', edit `config.status'
-# (which will cause the Makefiles to be regenerated when you run `make');
-# (2) otherwise, pass the desired values on the `make' command line.
-$(RECURSIVE_TARGETS):
- @fail= failcom='exit 1'; \
- for f in x $$MAKEFLAGS; do \
- case $$f in \
- *=* | --[!k]*);; \
- *k*) failcom='fail=yes';; \
- esac; \
- done; \
- dot_seen=no; \
- target=`echo $@ | sed s/-recursive//`; \
- list='$(SUBDIRS)'; for subdir in $$list; do \
- echo "Making $$target in $$subdir"; \
- if test "$$subdir" = "."; then \
- dot_seen=yes; \
- local_target="$$target-am"; \
- else \
- local_target="$$target"; \
- fi; \
- ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \
- || eval $$failcom; \
- done; \
- if test "$$dot_seen" = "no"; then \
- $(MAKE) $(AM_MAKEFLAGS) "$$target-am" || exit 1; \
- fi; test -z "$$fail"
-
-$(RECURSIVE_CLEAN_TARGETS):
- @fail= failcom='exit 1'; \
- for f in x $$MAKEFLAGS; do \
- case $$f in \
- *=* | --[!k]*);; \
- *k*) failcom='fail=yes';; \
- esac; \
- done; \
- dot_seen=no; \
- case "$@" in \
- distclean-* | maintainer-clean-*) list='$(DIST_SUBDIRS)' ;; \
- *) list='$(SUBDIRS)' ;; \
- esac; \
- rev=''; for subdir in $$list; do \
- if test "$$subdir" = "."; then :; else \
- rev="$$subdir $$rev"; \
- fi; \
- done; \
- rev="$$rev ."; \
- target=`echo $@ | sed s/-recursive//`; \
- for subdir in $$rev; do \
- echo "Making $$target in $$subdir"; \
- if test "$$subdir" = "."; then \
- local_target="$$target-am"; \
- else \
- local_target="$$target"; \
- fi; \
- ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \
- || eval $$failcom; \
- done && test -z "$$fail"
-tags-recursive:
- list='$(SUBDIRS)'; for subdir in $$list; do \
- test "$$subdir" = . || ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) tags); \
- done
-ctags-recursive:
- list='$(SUBDIRS)'; for subdir in $$list; do \
- test "$$subdir" = . || ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) ctags); \
- done
-
-ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES)
- list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
- unique=`for i in $$list; do \
- if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
- done | \
- $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
- END { if (nonempty) { for (i in files) print i; }; }'`; \
- mkid -fID $$unique
-tags: TAGS
-
-TAGS: tags-recursive $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \
- $(TAGS_FILES) $(LISP)
- set x; \
- here=`pwd`; \
- if ($(ETAGS) --etags-include --version) >/dev/null 2>&1; then \
- include_option=--etags-include; \
- empty_fix=.; \
- else \
- include_option=--include; \
- empty_fix=; \
- fi; \
- list='$(SUBDIRS)'; for subdir in $$list; do \
- if test "$$subdir" = .; then :; else \
- test ! -f $$subdir/TAGS || \
- set "$$@" "$$include_option=$$here/$$subdir/TAGS"; \
- fi; \
- done; \
- list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
- unique=`for i in $$list; do \
- if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
- done | \
- $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
- END { if (nonempty) { for (i in files) print i; }; }'`; \
- shift; \
- if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \
- test -n "$$unique" || unique=$$empty_fix; \
- if test $$# -gt 0; then \
- $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
- "$$@" $$unique; \
- else \
- $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
- $$unique; \
- fi; \
- fi
-ctags: CTAGS
-CTAGS: ctags-recursive $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \
- $(TAGS_FILES) $(LISP)
- list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
- unique=`for i in $$list; do \
- if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
- done | \
- $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
- END { if (nonempty) { for (i in files) print i; }; }'`; \
- test -z "$(CTAGS_ARGS)$$unique" \
- || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \
- $$unique
-
-GTAGS:
- here=`$(am__cd) $(top_builddir) && pwd` \
- && $(am__cd) $(top_srcdir) \
- && gtags -i $(GTAGS_ARGS) "$$here"
-
-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)'; \
- 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; \
- if test -d $$d/$$file; then \
- dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \
- if test -d "$(distdir)/$$file"; then \
- find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
- fi; \
- if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
- cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \
- find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
- fi; \
- cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \
- else \
- test -f "$(distdir)/$$file" \
- || cp -p $$d/$$file "$(distdir)/$$file" \
- || exit 1; \
- fi; \
- done
- @list='$(DIST_SUBDIRS)'; for subdir in $$list; do \
- if test "$$subdir" = .; then :; else \
- test -d "$(distdir)/$$subdir" \
- || $(MKDIR_P) "$(distdir)/$$subdir" \
- || exit 1; \
- fi; \
- done
- @list='$(DIST_SUBDIRS)'; for subdir in $$list; do \
- if test "$$subdir" = .; then :; else \
- dir1=$$subdir; dir2="$(distdir)/$$subdir"; \
- $(am__relativize); \
- new_distdir=$$reldir; \
- dir1=$$subdir; dir2="$(top_distdir)"; \
- $(am__relativize); \
- new_top_distdir=$$reldir; \
- echo " (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) top_distdir="$$new_top_distdir" distdir="$$new_distdir" \\"; \
- echo " am__remove_distdir=: am__skip_length_check=: am__skip_mode_fix=: distdir)"; \
- ($(am__cd) $$subdir && \
- $(MAKE) $(AM_MAKEFLAGS) \
- top_distdir="$$new_top_distdir" \
- distdir="$$new_distdir" \
- am__remove_distdir=: \
- am__skip_length_check=: \
- am__skip_mode_fix=: \
- distdir) \
- || exit 1; \
- fi; \
- done
-check-am: all-am
-check: check-recursive
-all-am: Makefile
-installdirs: installdirs-recursive
-installdirs-am:
-install: install-recursive
-install-exec: install-exec-recursive
-install-data: install-data-recursive
-uninstall: uninstall-recursive
-
-install-am: all-am
- @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
-
-installcheck: installcheck-recursive
-install-strip:
- $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
- install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
- `test -z '$(STRIP)' || \
- echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install
-mostlyclean-generic:
-
-clean-generic:
-
-distclean-generic:
- -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
- -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES)
-
-maintainer-clean-generic:
- @echo "This command is intended for maintainers to use"
- @echo "it deletes files that may require special tools to rebuild."
-clean: clean-recursive
-
-clean-am: clean-generic clean-libtool mostlyclean-am
-
-distclean: distclean-recursive
- -rm -f Makefile
-distclean-am: clean-am distclean-generic distclean-tags
-
-dvi: dvi-recursive
-
-dvi-am:
-
-html: html-recursive
-
-html-am:
-
-info: info-recursive
-
-info-am:
-
-install-data-am:
-
-install-dvi: install-dvi-recursive
-
-install-dvi-am:
-
-install-exec-am:
-
-install-html: install-html-recursive
-
-install-html-am:
-
-install-info: install-info-recursive
-
-install-info-am:
-
-install-man:
-
-install-pdf: install-pdf-recursive
-
-install-pdf-am:
-
-install-ps: install-ps-recursive
-
-install-ps-am:
-
-installcheck-am:
-
-maintainer-clean: maintainer-clean-recursive
- -rm -f Makefile
-maintainer-clean-am: distclean-am maintainer-clean-generic
-
-mostlyclean: mostlyclean-recursive
-
-mostlyclean-am: mostlyclean-generic mostlyclean-libtool
-
-pdf: pdf-recursive
-
-pdf-am:
-
-ps: ps-recursive
-
-ps-am:
-
-uninstall-am:
-
-.MAKE: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) ctags-recursive \
- install-am install-strip tags-recursive
-
-.PHONY: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) CTAGS GTAGS \
- all all-am check check-am clean clean-generic clean-libtool \
- ctags ctags-recursive distclean 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-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-generic \
- mostlyclean-libtool pdf pdf-am ps ps-am tags tags-recursive \
- 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.
-.NOEXPORT:
diff --git a/lib/dpap-sharp/README b/lib/dpap-sharp/README
deleted file mode 100644
index 783847f..0000000
--- a/lib/dpap-sharp/README
+++ /dev/null
@@ -1,40 +0,0 @@
-1. Overview
-----------------
- This package consists of the dpap-sharp library and two f-spot addins (DPAPService and DPAPBrowser) that provide the interface for dpap-sharp's server and client capabilities.
-
-2. Protocol
------------------
- The DPAP protocol is very similar to DAAP as both inherit from DMAP. Since it's a proprietary protocol some of the information provided here may be incorrect as they are based on reverse engineering.
-
- The DPAP protocol runs over HTTP and issuing standard HTTP/1.1 GET commands to the DPAP server in a telnet session allows one to test the protocols behaviour.
-
- An important concept of DPAP (and DAAP and DMAP) are the content-codes. In response to the GET /content-codes request the server returns a list of content-codes that contains the code (which is usually a 4 character ascii string, i.e. aply), it's full name (i.e. dpap.albums) and type (i.e. container). Issuing a GET /content-codes command by the client is an important part of the DPAP session - if skipped or not done correctly the client won't be able to parse the server's responses. It happens that the content-codes returned by the server are screwed up and they have to be fixed manually. That is the case for iPhoto '08 which returns a wrong content type for dpap.databasecontainers (aply) and we have to manually set that to ContentType.Container.
-
-3. Library
-----------------
- The library consists of the client (Client.cs), the server (Server.cs) and the common code shared among the two (Database.cs, Photo.cs, etc.).
-
-
-4. Add-ins
-----------------
-
- 4.1 Server
- ----------
- The server add-in is a /FSpot/Services extension which instantiates the server code in the library. It advertises itself using Mono.Zeroconf in the .local domain. Currently a default album is created and all the pictures from f-spot's database that are tagged 'Shared items' are placed in that album and therefore can be seen over the network.
-
- 4.2 Client
- ----------
- The client add-in lives as a sidebar extension and provides a 'Shared items' entry in the sidebar's menu. It discovers and lists the DPAP shares advertised in the .local domain. After selecting a certain share it connects to the specified server and downloads the list of albums. Selecting a certain album opens up a f-spot --view window in the folder with downloaded thumbnails for that album.
-
-5. Known Issues
-----------------
-* All thumbnails are downloaded at once which will make the UI unresponsive - should be moved to a thread.
-* The thumbnails are viewed as normal files, after downloading them into ~/.cache/DPAP. There's no way to go from browsing thumbnails to browsing hi-res photos.
-* The database update mechanism is not working.
-* After installing the DPAPService addin a tag called 'Shared items' has to be created and appropriate photos should be tagged with it.
-
-
-6. Further reading
-------------------
-* A very good resource on the DAAP protocol (which can give an idea about DPAP) http://www.tapjam.net/daap/
-
diff --git a/lib/dpap-sharp/dpap-client/Main.cs b/lib/dpap-sharp/dpap-client/Main.cs
deleted file mode 100644
index c058d6b..0000000
--- a/lib/dpap-sharp/dpap-client/Main.cs
+++ /dev/null
@@ -1,91 +0,0 @@
-// Main.cs
-// dpap-sharp client test program
-// Author:
-// Andrzej Wytyczak-Partyka <iapart at gmail.com>
-//
-// Copyright (C) 2008 Andrzej Wytyczak-Partyka
-//
-// This program is free software; you can redistribute it and/or modify
-// it under the terms of the GNU General Public License as published by
-// the Free Software Foundation; either version 2 of the License, or
-// (at your option) any later version.
-//
-// This program is distributed in the hope that it will be useful,
-// but WITHOUT ANY WARRANTY; without even the implied warranty of
-// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-// GNU General Public License for more details.
-//
-// You should have received a copy of the GNU General Public License
-// along with this program; if not, write to the Free Software
-// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
-//
-//
-using System;
-using System.IO;
-using System.Collections.Generic;
-using System.Collections;
-using Mono.Unix;
-//using Gtk;
-
-using DPAP;
-
-
-
-namespace DPAP {
-
- class MainClass
- {
-
- public static void Main (string [] args)
- {
-
- ServiceDiscovery sd = new ServiceDiscovery ();
- sd.Found += OnServiceFound;
- sd.Start ();
-
-
-// sd.Services [0];
- Console.ReadLine ();
- if (sd != null) {
- sd.Stop ();
- sd.Found -= OnServiceFound;
- //locator.Removed -= OnServiceRemoved;
- sd = null;
- }
-
- }
- private static void OnServiceFound (object o, ServiceArgs args)
- {
- Service service = args.Service;
- Client client;
-// ThreadAssist.Spawn (delegate {
- // try {
-
- System.Console.WriteLine ("Connecting to {0} at {1}:{2}", service.Name, service.Address, service.Port);
- client = new Client (service);
-
-
- foreach (Database d in client.Databases){
-
- Console.WriteLine ("Database " + d.Name);
-
- foreach (Album alb in d.Albums)
- Console.WriteLine ("\tAlbum: "+alb.Name + ", id=" + alb.getId () + " number of items:" + alb.Photos.Count);
- Console.WriteLine (d.Photos [0].FileName);
- foreach (Photo ph in d.Photos)
- {
- if (ph != null)
- {
- Console.WriteLine ("\t\tFile: " + ph.Title + " format = " + ph.Format + "size=" + ph.Width +"x" +ph.Height + " ID=" + ph.Id);
- d.DownloadPhoto (ph,"./"+ph.Title);
- }
- }
-
- }
- //client.Logout ();
- //Console.WriteLine ("Press <enter> to exit...");
-
-
- }
- }
-}
diff --git a/lib/dpap-sharp/dpap-client/Makefile.am b/lib/dpap-sharp/dpap-client/Makefile.am
deleted file mode 100644
index 26cb89b..0000000
--- a/lib/dpap-sharp/dpap-client/Makefile.am
+++ /dev/null
@@ -1,29 +0,0 @@
-include $(top_srcdir)/Makefile.include
-
-ASSEMBLY_NAME = dpap-client
-
-ASSEMBLY_SOURCES = Main.cs
-
-REFS = \
- -r:../lib/dpap-sharp.dll \
- -r:Mono.Posix
-
-ASSEMBLY = $(ASSEMBLY_NAME).exe
-
-all: $(ASSEMBLY)
-
-$(ASSEMBLY): $(ASSEMBLY_SOURCES)
- $(CSC) -out:$@ $(PKGS) $(REFS) $(ASSEMBLY_SOURCES)
-
-assemblydir = $(pkglibdir)
-assembly_DATA = \
- $(ASSEMBLY)
-
-EXTRA_DIST = \
- $(ASSEMBLY_SOURCES)
-
-CLEANFILES = \
- $(ASSEMBLY) \
- $(ASSEMBLY).mdb
-
-
diff --git a/lib/dpap-sharp/dpap-client/Makefile.in b/lib/dpap-sharp/dpap-client/Makefile.in
deleted file mode 100644
index 301b7d3..0000000
--- a/lib/dpap-sharp/dpap-client/Makefile.in
+++ /dev/null
@@ -1,545 +0,0 @@
-# Makefile.in generated by automake 1.11.1 from Makefile.am.
-# @configure_input@
-
-# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
-# 2003, 2004, 2005, 2006, 2007, 2008, 2009 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.
-
-# This program is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
-# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
-# PARTICULAR PURPOSE.
-
- at SET_MAKE@
-
-VPATH = @srcdir@
-pkgdatadir = $(datadir)/@PACKAGE@
-pkgincludedir = $(includedir)/@PACKAGE@
-pkglibdir = $(libdir)/@PACKAGE@
-pkglibexecdir = $(libexecdir)/@PACKAGE@
-am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
-install_sh_DATA = $(install_sh) -c -m 644
-install_sh_PROGRAM = $(install_sh) -c
-install_sh_SCRIPT = $(install_sh) -c
-INSTALL_HEADER = $(INSTALL_DATA)
-transform = $(program_transform_name)
-NORMAL_INSTALL = :
-PRE_INSTALL = :
-POST_INSTALL = :
-NORMAL_UNINSTALL = :
-PRE_UNINSTALL = :
-POST_UNINSTALL = :
-build_triplet = @build@
-host_triplet = @host@
-DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in \
- $(top_srcdir)/Makefile.include
-subdir = lib/dpap-sharp/dpap-client
-ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
-am__aclocal_m4_deps = $(top_srcdir)/build/m4/shave/shave.m4 \
- $(top_srcdir)/build/m4/shamrock/expansions.m4 \
- $(top_srcdir)/build/m4/shamrock/mono.m4 \
- $(top_srcdir)/build/m4/shamrock/programs.m4 \
- $(top_srcdir)/acinclude.m4 $(top_srcdir)/configure.ac
-am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
- $(ACLOCAL_M4)
-mkinstalldirs = $(install_sh) -d
-CONFIG_HEADER = $(top_builddir)/config.h
-CONFIG_CLEAN_FILES =
-CONFIG_CLEAN_VPATH_FILES =
-SOURCES =
-DIST_SOURCES =
-am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`;
-am__vpath_adj = case $$p in \
- $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \
- *) f=$$p;; \
- esac;
-am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`;
-am__install_max = 40
-am__nobase_strip_setup = \
- srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'`
-am__nobase_strip = \
- for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||"
-am__nobase_list = $(am__nobase_strip_setup); \
- for p in $$list; do echo "$$p $$p"; done | \
- sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \
- $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \
- if (++n[$$2] == $(am__install_max)) \
- { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \
- END { for (dir in files) print dir, files[dir] }'
-am__base_list = \
- sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \
- sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g'
-am__installdirs = "$(DESTDIR)$(assemblydir)"
-DATA = $(assembly_DATA)
-DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
-ACLOCAL = @ACLOCAL@
-ACLOCAL_AMFLAGS = @ACLOCAL_AMFLAGS@
-ALL_LINGUAS = @ALL_LINGUAS@
-AMTAR = @AMTAR@
-AM_MAKEFLAGS = @AM_MAKEFLAGS@
-API_VERSION = @API_VERSION@
-AR = @AR@
-ASM_VERSION = @ASM_VERSION@
-AUTOCONF = @AUTOCONF@
-AUTOHEADER = @AUTOHEADER@
-AUTOMAKE = @AUTOMAKE@
-AWK = @AWK@
-CATALOGS = @CATALOGS@
-CATOBJEXT = @CATOBJEXT@
-CC = @CC@
-CCDEPMODE = @CCDEPMODE@
-CFLAGS = @CFLAGS@
-CPP = @CPP@
-CPPFLAGS = @CPPFLAGS@
-CSC_DEFINES = @CSC_DEFINES@
-CXX = @CXX@
-CXXCPP = @CXXCPP@
-CXXDEPMODE = @CXXDEPMODE@
-CXXFLAGS = @CXXFLAGS@
-CYGPATH_W = @CYGPATH_W@
-DATADIRNAME = @DATADIRNAME@
-DEFS = @DEFS@
-DEPDIR = @DEPDIR@
-DISPLAY_VERSION = @DISPLAY_VERSION@
-DISTCHECK_CONFIGURE_FLAGS = @DISTCHECK_CONFIGURE_FLAGS@
-DOC_USER_FORMATS = @DOC_USER_FORMATS@
-DSYMUTIL = @DSYMUTIL@
-DUMPBIN = @DUMPBIN@
-ECHO_C = @ECHO_C@
-ECHO_N = @ECHO_N@
-ECHO_T = @ECHO_T@
-EGREP = @EGREP@
-EXEEXT = @EXEEXT@
-EXIF_CFLAGS = @EXIF_CFLAGS@
-EXIF_LIBS = @EXIF_LIBS@
-EXIF_SOVERSION = @EXIF_SOVERSION@
-F77 = @F77@
-FC = @FC@
-FGREP = @FGREP@
-F_CFLAGS = @F_CFLAGS@
-F_LIBS = @F_LIBS@
-GAPI2CODEGEN = @GAPI2CODEGEN@
-GAPI2FIXUP = @GAPI2FIXUP@
-GAPI2PARSER = @GAPI2PARSER@
-GCONFTOOL = @GCONFTOOL@
-GCONF_SCHEMA_CONFIG_SOURCE = @GCONF_SCHEMA_CONFIG_SOURCE@
-GCONF_SCHEMA_FILE_DIR = @GCONF_SCHEMA_FILE_DIR@
-GCONF_SHARP_CFLAGS = @GCONF_SHARP_CFLAGS@
-GCONF_SHARP_LIBS = @GCONF_SHARP_LIBS@
-GETTEXT_PACKAGE = @GETTEXT_PACKAGE@
-GIO_CFLAGS = @GIO_CFLAGS@
-GIO_LIBS = @GIO_LIBS@
-GLIBSHARP_CFLAGS = @GLIBSHARP_CFLAGS@
-GLIBSHARP_LIBS = @GLIBSHARP_LIBS@
-GLIB_CFLAGS = @GLIB_CFLAGS@
-GLIB_GENMARSHAL = @GLIB_GENMARSHAL@
-GLIB_LIBS = @GLIB_LIBS@
-GLIB_MKENUMS = @GLIB_MKENUMS@
-GMOFILES = @GMOFILES@
-GMSGFMT = @GMSGFMT@
-GNOME_ICON_THEME_PREFIX = @GNOME_ICON_THEME_PREFIX@
-GNOME_SCREENSAVER_SAVERDIR = @GNOME_SCREENSAVER_SAVERDIR@
-GNOME_SCREENSAVER_THEMESDIR = @GNOME_SCREENSAVER_THEMESDIR@
-GNOME_SHARP_CFLAGS = @GNOME_SHARP_CFLAGS@
-GNOME_SHARP_LIBS = @GNOME_SHARP_LIBS@
-GOBJECT_QUERY = @GOBJECT_QUERY@
-GREP = @GREP@
-HELP_DIR = @HELP_DIR@
-ICONS_DIRECTORY = @ICONS_DIRECTORY@
-INSTALL = @INSTALL@
-INSTALL_DATA = @INSTALL_DATA@
-INSTALL_PROGRAM = @INSTALL_PROGRAM@
-INSTALL_SCRIPT = @INSTALL_SCRIPT@
-INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
-INSTOBJEXT = @INSTOBJEXT@
-INTLLIBS = @INTLLIBS@
-INTLTOOL_EXTRACT = @INTLTOOL_EXTRACT@
-INTLTOOL_MERGE = @INTLTOOL_MERGE@
-INTLTOOL_PERL = @INTLTOOL_PERL@
-INTLTOOL_UPDATE = @INTLTOOL_UPDATE@
-LCMS_CFLAGS = @LCMS_CFLAGS@
-LCMS_LIBS = @LCMS_LIBS@
-LD = @LD@
-LDFLAGS = @LDFLAGS@
-LIBEXIF_VERSION_CHECK_CFLAGS = @LIBEXIF_VERSION_CHECK_CFLAGS@
-LIBEXIF_VERSION_CHECK_LIBS = @LIBEXIF_VERSION_CHECK_LIBS@
-LIBGPHOTO2_CFLAGS = @LIBGPHOTO2_CFLAGS@
-LIBGPHOTO2_LIBS = @LIBGPHOTO2_LIBS@
-LIBJPEG = @LIBJPEG@
-LIBOBJS = @LIBOBJS@
-LIBS = @LIBS@
-LIBTOOL = @LIBTOOL@
-LIPO = @LIPO@
-LN_S = @LN_S@
-LTLIBOBJS = @LTLIBOBJS@
-MAINT = @MAINT@
-MAKEFLAGS = @MAKEFLAGS@
-MAKEINFO = @MAKEINFO@
-MCS = @MCS@
-MKDIR_P = @MKDIR_P@
-MKINSTALLDIRS = @MKINSTALLDIRS@
-MONO = @MONO@
-MONO_MODULE_CFLAGS = @MONO_MODULE_CFLAGS@
-MONO_MODULE_LIBS = @MONO_MODULE_LIBS@
-MSGFMT = @MSGFMT@
-MSGFMT_OPTS = @MSGFMT_OPTS@
-MSGMERGE = @MSGMERGE@
-NDESK_DBUS_CFLAGS = @NDESK_DBUS_CFLAGS@
-NDESK_DBUS_LIBS = @NDESK_DBUS_LIBS@
-NM = @NM@
-NMEDIT = @NMEDIT@
-NUNIT_CFLAGS = @NUNIT_CFLAGS@
-NUNIT_DEFINES = @NUNIT_DEFINES@
-NUNIT_LIBS = @NUNIT_LIBS@
-OBJC = @OBJC@
-OBJDUMP = @OBJDUMP@
-OBJEXT = @OBJEXT@
-OMF_DIR = @OMF_DIR@
-OTOOL = @OTOOL@
-OTOOL64 = @OTOOL64@
-PACKAGE = @PACKAGE@
-PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
-PACKAGE_NAME = @PACKAGE_NAME@
-PACKAGE_STRING = @PACKAGE_STRING@
-PACKAGE_TARNAME = @PACKAGE_TARNAME@
-PACKAGE_URL = @PACKAGE_URL@
-PACKAGE_VERSION = @PACKAGE_VERSION@
-PATH_SEPARATOR = @PATH_SEPARATOR@
-PKG_CONFIG = @PKG_CONFIG@
-POFILES = @POFILES@
-POSUB = @POSUB@
-PO_IN_DATADIR_FALSE = @PO_IN_DATADIR_FALSE@
-PO_IN_DATADIR_TRUE = @PO_IN_DATADIR_TRUE@
-Q = @Q@
-RANLIB = @RANLIB@
-SED = @SED@
-SET_MAKE = @SET_MAKE@
-SHELL = @SHELL@
-STRIP = @STRIP@
-TURTLEDIR = @TURTLEDIR@
-UNIQUE_CFLAGS = @UNIQUE_CFLAGS@
-UNIQUE_LIBS = @UNIQUE_LIBS@
-USE_NLS = @USE_NLS@
-V = @V@
-VERSION = @VERSION@
-WARN_CFLAGS = @WARN_CFLAGS@
-XGETTEXT = @XGETTEXT@
-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_DUMPBIN = @ac_ct_DUMPBIN@
-am__include = @am__include@
-am__leading_dot = @am__leading_dot@
-am__quote = @am__quote@
-am__tar = @am__tar@
-am__untar = @am__untar@
-bindir = @bindir@
-build = @build@
-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@
-expanded_bindir = @expanded_bindir@
-expanded_datadir = @expanded_datadir@
-expanded_libdir = @expanded_libdir@
-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@
-lt_ECHO = @lt_ECHO@
-mandir = @mandir@
-mkdir_p = @mkdir_p@
-oldincludedir = @oldincludedir@
-pdfdir = @pdfdir@
-prefix = @prefix@
-program_transform_name = @program_transform_name@
-psdir = @psdir@
-sbindir = @sbindir@
-sharedstatedir = @sharedstatedir@
-shavedir = @shavedir@
-srcdir = @srcdir@
-sysconfdir = @sysconfdir@
-target_alias = @target_alias@
-top_build_prefix = @top_build_prefix@
-top_builddir = @top_builddir@
-top_srcdir = @top_srcdir@
-DIR_DOCS = $(top_builddir)/docs
-DIR_EXTENSIONS = $(top_builddir)/extensions
-DIR_GPHOTO2 = $(top_builddir)/lib/libgphoto2-sharp
-DIR_ICONS = $(top_builddir)/icons
-DIR_JPEGTRAN = $(top_builddir)/lib/libjpegtran
-DIR_KEYRING = $(top_builddir)/lib/gnome-keyring-sharp
-DIR_LIBFSPOT = $(top_builddir)/lib/libfspot
-DIR_SEMWEB = $(top_builddir)/lib/semweb
-DIR_SRC = $(top_builddir)/src
-DIR_GIOSHARP = $(top_builddir)/lib/gio-sharp/gio
-DIR_GTKSHARPBEANS = $(top_builddir)/lib/gtk-sharp-beans
-DIR_UNIQUESHARP = $(top_builddir)/lib/unique-sharp/unique
-LINK_KEYRING = -r:$(DIR_KEYRING)/gnome-keyring-sharp.dll
-LINK_GPHOTO2 = -r:$(DIR_GPHOTO2)/libgphoto2-sharp.dll
-LINK_SEMWEB = -r:$(DIR_SEMWEB)/SemWeb.dll
-LINK_GIOSHARP = -r:$(DIR_GIOSHARP)/gio-sharp.dll
-LINK_GTKSHARPBEANS = -r:$(DIR_GTKSHARPBEANS)/gtk-sharp-beans.dll
-LINK_UNIQUESHARP = -r:$(DIR_UNIQUESHARP)/unique-sharp.dll
-CSC_FLAGS = -debug
-CSC = $(MCS) $(CSC_FLAGS) -target:exe
-CSC_LIB = $(MCS) $(CSC_FLAGS) -target:library
-MONO_DEBUGFLAGS = --debug
-RUNTIME = mono $(MONO_DEBUGFLAGS)
-ASSEMBLY_NAME = dpap-client
-ASSEMBLY_SOURCES = Main.cs
-REFS = \
- -r:../lib/dpap-sharp.dll \
- -r:Mono.Posix
-
-ASSEMBLY = $(ASSEMBLY_NAME).exe
-assemblydir = $(pkglibdir)
-assembly_DATA = \
- $(ASSEMBLY)
-
-EXTRA_DIST = \
- $(ASSEMBLY_SOURCES)
-
-CLEANFILES = \
- $(ASSEMBLY) \
- $(ASSEMBLY).mdb
-
-all: all-am
-
-.SUFFIXES:
-$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(top_srcdir)/Makefile.include $(am__configure_deps)
- @for dep in $?; do \
- case '$(am__configure_deps)' in \
- *$$dep*) \
- ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \
- && { if test -f $@; then exit 0; else break; fi; }; \
- exit 1;; \
- esac; \
- done; \
- echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign lib/dpap-sharp/dpap-client/Makefile'; \
- $(am__cd) $(top_srcdir) && \
- $(AUTOMAKE) --foreign lib/dpap-sharp/dpap-client/Makefile
-.PRECIOUS: Makefile
-Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
- @case '$?' in \
- *config.status*) \
- cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \
- *) \
- echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \
- cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \
- esac;
-
-$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
- cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
-
-$(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps)
- cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
-$(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps)
- cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
-$(am__aclocal_m4_deps):
-
-mostlyclean-libtool:
- -rm -f *.lo
-
-clean-libtool:
- -rm -rf .libs _libs
-install-assemblyDATA: $(assembly_DATA)
- @$(NORMAL_INSTALL)
- test -z "$(assemblydir)" || $(MKDIR_P) "$(DESTDIR)$(assemblydir)"
- @list='$(assembly_DATA)'; test -n "$(assemblydir)" || list=; \
- for p in $$list; do \
- if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \
- echo "$$d$$p"; \
- done | $(am__base_list) | \
- while read files; do \
- echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(assemblydir)'"; \
- $(INSTALL_DATA) $$files "$(DESTDIR)$(assemblydir)" || exit $$?; \
- done
-
-uninstall-assemblyDATA:
- @$(NORMAL_UNINSTALL)
- @list='$(assembly_DATA)'; test -n "$(assemblydir)" || list=; \
- files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \
- test -n "$$files" || exit 0; \
- echo " ( cd '$(DESTDIR)$(assemblydir)' && rm -f" $$files ")"; \
- cd "$(DESTDIR)$(assemblydir)" && rm -f $$files
-tags: TAGS
-TAGS:
-
-ctags: CTAGS
-CTAGS:
-
-
-distdir: $(DISTFILES)
- @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; \
- if test -d $$d/$$file; then \
- dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \
- if test -d "$(distdir)/$$file"; then \
- find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
- fi; \
- if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
- cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \
- find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
- fi; \
- cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \
- else \
- test -f "$(distdir)/$$file" \
- || cp -p $$d/$$file "$(distdir)/$$file" \
- || exit 1; \
- fi; \
- done
-check-am: all-am
-check: check-am
-all-am: Makefile $(DATA)
-installdirs:
- for dir in "$(DESTDIR)$(assemblydir)"; do \
- test -z "$$dir" || $(MKDIR_P) "$$dir"; \
- done
-install: install-am
-install-exec: install-exec-am
-install-data: install-data-am
-uninstall: uninstall-am
-
-install-am: all-am
- @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
-
-installcheck: installcheck-am
-install-strip:
- $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
- install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
- `test -z '$(STRIP)' || \
- echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install
-mostlyclean-generic:
-
-clean-generic:
- -test -z "$(CLEANFILES)" || rm -f $(CLEANFILES)
-
-distclean-generic:
- -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
- -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES)
-
-maintainer-clean-generic:
- @echo "This command is intended for maintainers to use"
- @echo "it deletes files that may require special tools to rebuild."
-clean: clean-am
-
-clean-am: clean-generic clean-libtool mostlyclean-am
-
-distclean: distclean-am
- -rm -f Makefile
-distclean-am: clean-am distclean-generic
-
-dvi: dvi-am
-
-dvi-am:
-
-html: html-am
-
-html-am:
-
-info: info-am
-
-info-am:
-
-install-data-am: install-assemblyDATA
-
-install-dvi: install-dvi-am
-
-install-dvi-am:
-
-install-exec-am:
-
-install-html: install-html-am
-
-install-html-am:
-
-install-info: install-info-am
-
-install-info-am:
-
-install-man:
-
-install-pdf: install-pdf-am
-
-install-pdf-am:
-
-install-ps: install-ps-am
-
-install-ps-am:
-
-installcheck-am:
-
-maintainer-clean: maintainer-clean-am
- -rm -f Makefile
-maintainer-clean-am: distclean-am maintainer-clean-generic
-
-mostlyclean: mostlyclean-am
-
-mostlyclean-am: mostlyclean-generic mostlyclean-libtool
-
-pdf: pdf-am
-
-pdf-am:
-
-ps: ps-am
-
-ps-am:
-
-uninstall-am: uninstall-assemblyDATA
-
-.MAKE: install-am install-strip
-
-.PHONY: all all-am check check-am clean clean-generic clean-libtool \
- distclean distclean-generic distclean-libtool distdir dvi \
- dvi-am html html-am info info-am install install-am \
- install-assemblyDATA 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-generic mostlyclean-libtool pdf pdf-am ps ps-am \
- uninstall uninstall-am uninstall-assemblyDATA
-
-
-all: $(ASSEMBLY)
-
-$(ASSEMBLY): $(ASSEMBLY_SOURCES)
- $(CSC) -out:$@ $(PKGS) $(REFS) $(ASSEMBLY_SOURCES)
-
-# 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.
-.NOEXPORT:
diff --git a/lib/dpap-sharp/dpap-server/AssemblyInfo.cs b/lib/dpap-sharp/dpap-server/AssemblyInfo.cs
deleted file mode 100644
index 9a8a1e8..0000000
--- a/lib/dpap-sharp/dpap-server/AssemblyInfo.cs
+++ /dev/null
@@ -1,30 +0,0 @@
-// AssemblyInfo.cs created with MonoDevelop
-// User: andrzej at 11:03 2008-07-17
-//
-// To change standard headers go to Edit->Preferences->Coding->Standard Headers
-//
-using System.Reflection;
-using System.Runtime.CompilerServices;
-
-// Information about this assembly is defined by the following attributes.
-// Change them to the values specific to your project.
-
-[assembly: AssemblyTitle("dpap-server")]
-[assembly: AssemblyDescription("")]
-[assembly: AssemblyConfiguration("")]
-[assembly: AssemblyCompany("")]
-[assembly: AssemblyProduct("")]
-[assembly: AssemblyCopyright("")]
-[assembly: AssemblyTrademark("")]
-[assembly: AssemblyCulture("")]
-
-// The assembly version has the format "{Major}.{Minor}.{Build}.{Revision}".
-// If the build and revision are set to '*' they will be updated automatically.
-
-[assembly: AssemblyVersion("1.0.*.*")]
-
-// The following attributes are used to specify the signing key for the assembly,
-// if desired. See the Mono documentation for more information about signing.
-
-[assembly: AssemblyDelaySign(false)]
-[assembly: AssemblyKeyFile("")]
diff --git a/lib/dpap-sharp/dpap-server/Main.cs b/lib/dpap-sharp/dpap-server/Main.cs
deleted file mode 100644
index 1abb32c..0000000
--- a/lib/dpap-sharp/dpap-server/Main.cs
+++ /dev/null
@@ -1,110 +0,0 @@
-// Main.cs
-// dpap-sharp server test program
-//
-// Authors:
-// Andrzej Wytyczak-Partyka <iapart at gmail.com>
-//
-// Copyright (C) 2008 Andrzej Wytyczak-Partyka
-//
-// This program is free software; you can redistribute it and/or modify
-// it under the terms of the GNU General Public License as published by
-// the Free Software Foundation; either version 2 of the License, or
-// (at your option) any later version.
-//
-// This program is distributed in the hope that it will be useful,
-// but WITHOUT ANY WARRANTY; without even the implied warranty of
-// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-// GNU General Public License for more details.
-//
-// You should have received a copy of the GNU General Public License
-// along with this program; if not, write to the Free Software
-// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
-//
-//
-
-using System;
-using System.IO;
-using System.Collections.Generic;
-using System.Collections;
-using Mono.Unix;
-using System.Text.RegularExpressions;
-//using Gtk;
-
-using DPAP;
-
-
-
-namespace DPAP {
-
- class MainClass
- {
-
- public static void Main(string[] args)
- {
- //Regex dbPhotoRegex = new Regex ("/databases/([0-9]*?)/items?session-id=([0-9]*)&meta=.*&query=('dmap.itemid:([0-9]*)')");
-
-// string path = "/databases/1/items?session-id=9527&meta=dpap.thumb,dmap.itemid,dpap.filedata&query=('dmap.itemid:35')$";
- //string path = "'dmap.itemid:35'";
- // Console.WriteLine("regex:"+rg.IsMatch(path));
-
- Console.WriteLine("Starting DPAP server");
- DPAP.Database database = new DPAP.Database("DPAP");
- DPAP.Server server = new Server("f-spot photos");
- server.Port = 8770;
- server.AuthenticationMethod = AuthenticationMethod.None;
- int collision_count = 0;
- server.Collision += delegate {
- server.Name = "f-spot photos" + " [" + ++collision_count + "]";
- };
-
- Photo p = new Photo();
- p.Thumbnail = "./test3-thumb.jpg";
- p.ThumbSize = 44786;
- p.FileName = "test3.jpg";
- p.Path = "./test3.jpg";
- p.Title = "test1";
- p.Format = "JPEG";
- p.Size = 1088386;
- database.AddPhoto(p);
-
- Photo p1 = new Photo();
- p1.Thumbnail = "./test2-thumb.jpg";
- p1.ThumbSize = 11357;
- p1.FileName = "test2.jpg";
- p1.Path = "./test2.jpg";
- p1.Title = "test2";
- p1.Format = "JPEG";
- p1.Size = 35209;
- database.AddPhoto(p1);
-
- Album a = new Album("test album");
- a.AddPhoto(p);
- a.AddPhoto(p1);
- database.AddAlbum(a);
- Console.WriteLine("Album count is now " + database.Albums.Count);
- Console.WriteLine("Photo name is " + database.Photos[0].FileName);
- server.AddDatabase(database);
-
- //server.GetServerInfoNode();
- try {
- server.Start();
- } catch (System.Net.Sockets.SocketException) {
- Console.WriteLine("Server socket exception!");
- server.Port = 0;
- server.Start();
- }
-
- //DaapPlugin.ServerEnabledSchema.Set(true);
-
- // if(!initial_db_committed) {
- server.Commit();
- // initial_db_committed = true;
- // }
-
-
- Console.ReadLine();
-
-
- }
- }
-}
diff --git a/lib/dpap-sharp/dpap-server/Makefile.am b/lib/dpap-sharp/dpap-server/Makefile.am
deleted file mode 100644
index d1bb7f9..0000000
--- a/lib/dpap-sharp/dpap-server/Makefile.am
+++ /dev/null
@@ -1,34 +0,0 @@
-include $(top_srcdir)/Makefile.include
-
-ASSEMBLY_NAME = dpap-server
-
-ASSEMBLY_SOURCES = \
- AssemblyInfo.cs \
- Main.cs
-
-REFS = \
- -r:Mono.Posix \
- -r:ICSharpCode.SharpZipLib \
- -r:../lib/dpap-sharp.dll
-
-PKGS =
-
-ASSEMBLY = $(ASSEMBLY_NAME).exe
-
-all: $(ASSEMBLY)
-
-$(ASSEMBLY): $(ASSEMBLY_SOURCES)
- $(CSC) -out:$@ $(PKGS) $(REFS) $(ASSEMBLY_SOURCES)
-
-assemblydir = $(pkglibdir)
-assembly_DATA = \
- $(ASSEMBLY)
-
-EXTRA_DIST = \
- $(ASSEMBLY_SOURCES)
-
-CLEANFILES = \
- $(ASSEMBLY) \
- $(ASSEMBLY).mdb
-
-
diff --git a/lib/dpap-sharp/dpap-server/Makefile.in b/lib/dpap-sharp/dpap-server/Makefile.in
deleted file mode 100644
index e1c8b75..0000000
--- a/lib/dpap-sharp/dpap-server/Makefile.in
+++ /dev/null
@@ -1,550 +0,0 @@
-# Makefile.in generated by automake 1.11.1 from Makefile.am.
-# @configure_input@
-
-# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
-# 2003, 2004, 2005, 2006, 2007, 2008, 2009 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.
-
-# This program is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
-# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
-# PARTICULAR PURPOSE.
-
- at SET_MAKE@
-
-VPATH = @srcdir@
-pkgdatadir = $(datadir)/@PACKAGE@
-pkgincludedir = $(includedir)/@PACKAGE@
-pkglibdir = $(libdir)/@PACKAGE@
-pkglibexecdir = $(libexecdir)/@PACKAGE@
-am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
-install_sh_DATA = $(install_sh) -c -m 644
-install_sh_PROGRAM = $(install_sh) -c
-install_sh_SCRIPT = $(install_sh) -c
-INSTALL_HEADER = $(INSTALL_DATA)
-transform = $(program_transform_name)
-NORMAL_INSTALL = :
-PRE_INSTALL = :
-POST_INSTALL = :
-NORMAL_UNINSTALL = :
-PRE_UNINSTALL = :
-POST_UNINSTALL = :
-build_triplet = @build@
-host_triplet = @host@
-DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in \
- $(top_srcdir)/Makefile.include
-subdir = lib/dpap-sharp/dpap-server
-ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
-am__aclocal_m4_deps = $(top_srcdir)/build/m4/shave/shave.m4 \
- $(top_srcdir)/build/m4/shamrock/expansions.m4 \
- $(top_srcdir)/build/m4/shamrock/mono.m4 \
- $(top_srcdir)/build/m4/shamrock/programs.m4 \
- $(top_srcdir)/acinclude.m4 $(top_srcdir)/configure.ac
-am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
- $(ACLOCAL_M4)
-mkinstalldirs = $(install_sh) -d
-CONFIG_HEADER = $(top_builddir)/config.h
-CONFIG_CLEAN_FILES =
-CONFIG_CLEAN_VPATH_FILES =
-SOURCES =
-DIST_SOURCES =
-am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`;
-am__vpath_adj = case $$p in \
- $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \
- *) f=$$p;; \
- esac;
-am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`;
-am__install_max = 40
-am__nobase_strip_setup = \
- srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'`
-am__nobase_strip = \
- for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||"
-am__nobase_list = $(am__nobase_strip_setup); \
- for p in $$list; do echo "$$p $$p"; done | \
- sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \
- $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \
- if (++n[$$2] == $(am__install_max)) \
- { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \
- END { for (dir in files) print dir, files[dir] }'
-am__base_list = \
- sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \
- sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g'
-am__installdirs = "$(DESTDIR)$(assemblydir)"
-DATA = $(assembly_DATA)
-DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
-ACLOCAL = @ACLOCAL@
-ACLOCAL_AMFLAGS = @ACLOCAL_AMFLAGS@
-ALL_LINGUAS = @ALL_LINGUAS@
-AMTAR = @AMTAR@
-AM_MAKEFLAGS = @AM_MAKEFLAGS@
-API_VERSION = @API_VERSION@
-AR = @AR@
-ASM_VERSION = @ASM_VERSION@
-AUTOCONF = @AUTOCONF@
-AUTOHEADER = @AUTOHEADER@
-AUTOMAKE = @AUTOMAKE@
-AWK = @AWK@
-CATALOGS = @CATALOGS@
-CATOBJEXT = @CATOBJEXT@
-CC = @CC@
-CCDEPMODE = @CCDEPMODE@
-CFLAGS = @CFLAGS@
-CPP = @CPP@
-CPPFLAGS = @CPPFLAGS@
-CSC_DEFINES = @CSC_DEFINES@
-CXX = @CXX@
-CXXCPP = @CXXCPP@
-CXXDEPMODE = @CXXDEPMODE@
-CXXFLAGS = @CXXFLAGS@
-CYGPATH_W = @CYGPATH_W@
-DATADIRNAME = @DATADIRNAME@
-DEFS = @DEFS@
-DEPDIR = @DEPDIR@
-DISPLAY_VERSION = @DISPLAY_VERSION@
-DISTCHECK_CONFIGURE_FLAGS = @DISTCHECK_CONFIGURE_FLAGS@
-DOC_USER_FORMATS = @DOC_USER_FORMATS@
-DSYMUTIL = @DSYMUTIL@
-DUMPBIN = @DUMPBIN@
-ECHO_C = @ECHO_C@
-ECHO_N = @ECHO_N@
-ECHO_T = @ECHO_T@
-EGREP = @EGREP@
-EXEEXT = @EXEEXT@
-EXIF_CFLAGS = @EXIF_CFLAGS@
-EXIF_LIBS = @EXIF_LIBS@
-EXIF_SOVERSION = @EXIF_SOVERSION@
-F77 = @F77@
-FC = @FC@
-FGREP = @FGREP@
-F_CFLAGS = @F_CFLAGS@
-F_LIBS = @F_LIBS@
-GAPI2CODEGEN = @GAPI2CODEGEN@
-GAPI2FIXUP = @GAPI2FIXUP@
-GAPI2PARSER = @GAPI2PARSER@
-GCONFTOOL = @GCONFTOOL@
-GCONF_SCHEMA_CONFIG_SOURCE = @GCONF_SCHEMA_CONFIG_SOURCE@
-GCONF_SCHEMA_FILE_DIR = @GCONF_SCHEMA_FILE_DIR@
-GCONF_SHARP_CFLAGS = @GCONF_SHARP_CFLAGS@
-GCONF_SHARP_LIBS = @GCONF_SHARP_LIBS@
-GETTEXT_PACKAGE = @GETTEXT_PACKAGE@
-GIO_CFLAGS = @GIO_CFLAGS@
-GIO_LIBS = @GIO_LIBS@
-GLIBSHARP_CFLAGS = @GLIBSHARP_CFLAGS@
-GLIBSHARP_LIBS = @GLIBSHARP_LIBS@
-GLIB_CFLAGS = @GLIB_CFLAGS@
-GLIB_GENMARSHAL = @GLIB_GENMARSHAL@
-GLIB_LIBS = @GLIB_LIBS@
-GLIB_MKENUMS = @GLIB_MKENUMS@
-GMOFILES = @GMOFILES@
-GMSGFMT = @GMSGFMT@
-GNOME_ICON_THEME_PREFIX = @GNOME_ICON_THEME_PREFIX@
-GNOME_SCREENSAVER_SAVERDIR = @GNOME_SCREENSAVER_SAVERDIR@
-GNOME_SCREENSAVER_THEMESDIR = @GNOME_SCREENSAVER_THEMESDIR@
-GNOME_SHARP_CFLAGS = @GNOME_SHARP_CFLAGS@
-GNOME_SHARP_LIBS = @GNOME_SHARP_LIBS@
-GOBJECT_QUERY = @GOBJECT_QUERY@
-GREP = @GREP@
-HELP_DIR = @HELP_DIR@
-ICONS_DIRECTORY = @ICONS_DIRECTORY@
-INSTALL = @INSTALL@
-INSTALL_DATA = @INSTALL_DATA@
-INSTALL_PROGRAM = @INSTALL_PROGRAM@
-INSTALL_SCRIPT = @INSTALL_SCRIPT@
-INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
-INSTOBJEXT = @INSTOBJEXT@
-INTLLIBS = @INTLLIBS@
-INTLTOOL_EXTRACT = @INTLTOOL_EXTRACT@
-INTLTOOL_MERGE = @INTLTOOL_MERGE@
-INTLTOOL_PERL = @INTLTOOL_PERL@
-INTLTOOL_UPDATE = @INTLTOOL_UPDATE@
-LCMS_CFLAGS = @LCMS_CFLAGS@
-LCMS_LIBS = @LCMS_LIBS@
-LD = @LD@
-LDFLAGS = @LDFLAGS@
-LIBEXIF_VERSION_CHECK_CFLAGS = @LIBEXIF_VERSION_CHECK_CFLAGS@
-LIBEXIF_VERSION_CHECK_LIBS = @LIBEXIF_VERSION_CHECK_LIBS@
-LIBGPHOTO2_CFLAGS = @LIBGPHOTO2_CFLAGS@
-LIBGPHOTO2_LIBS = @LIBGPHOTO2_LIBS@
-LIBJPEG = @LIBJPEG@
-LIBOBJS = @LIBOBJS@
-LIBS = @LIBS@
-LIBTOOL = @LIBTOOL@
-LIPO = @LIPO@
-LN_S = @LN_S@
-LTLIBOBJS = @LTLIBOBJS@
-MAINT = @MAINT@
-MAKEFLAGS = @MAKEFLAGS@
-MAKEINFO = @MAKEINFO@
-MCS = @MCS@
-MKDIR_P = @MKDIR_P@
-MKINSTALLDIRS = @MKINSTALLDIRS@
-MONO = @MONO@
-MONO_MODULE_CFLAGS = @MONO_MODULE_CFLAGS@
-MONO_MODULE_LIBS = @MONO_MODULE_LIBS@
-MSGFMT = @MSGFMT@
-MSGFMT_OPTS = @MSGFMT_OPTS@
-MSGMERGE = @MSGMERGE@
-NDESK_DBUS_CFLAGS = @NDESK_DBUS_CFLAGS@
-NDESK_DBUS_LIBS = @NDESK_DBUS_LIBS@
-NM = @NM@
-NMEDIT = @NMEDIT@
-NUNIT_CFLAGS = @NUNIT_CFLAGS@
-NUNIT_DEFINES = @NUNIT_DEFINES@
-NUNIT_LIBS = @NUNIT_LIBS@
-OBJC = @OBJC@
-OBJDUMP = @OBJDUMP@
-OBJEXT = @OBJEXT@
-OMF_DIR = @OMF_DIR@
-OTOOL = @OTOOL@
-OTOOL64 = @OTOOL64@
-PACKAGE = @PACKAGE@
-PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
-PACKAGE_NAME = @PACKAGE_NAME@
-PACKAGE_STRING = @PACKAGE_STRING@
-PACKAGE_TARNAME = @PACKAGE_TARNAME@
-PACKAGE_URL = @PACKAGE_URL@
-PACKAGE_VERSION = @PACKAGE_VERSION@
-PATH_SEPARATOR = @PATH_SEPARATOR@
-PKG_CONFIG = @PKG_CONFIG@
-POFILES = @POFILES@
-POSUB = @POSUB@
-PO_IN_DATADIR_FALSE = @PO_IN_DATADIR_FALSE@
-PO_IN_DATADIR_TRUE = @PO_IN_DATADIR_TRUE@
-Q = @Q@
-RANLIB = @RANLIB@
-SED = @SED@
-SET_MAKE = @SET_MAKE@
-SHELL = @SHELL@
-STRIP = @STRIP@
-TURTLEDIR = @TURTLEDIR@
-UNIQUE_CFLAGS = @UNIQUE_CFLAGS@
-UNIQUE_LIBS = @UNIQUE_LIBS@
-USE_NLS = @USE_NLS@
-V = @V@
-VERSION = @VERSION@
-WARN_CFLAGS = @WARN_CFLAGS@
-XGETTEXT = @XGETTEXT@
-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_DUMPBIN = @ac_ct_DUMPBIN@
-am__include = @am__include@
-am__leading_dot = @am__leading_dot@
-am__quote = @am__quote@
-am__tar = @am__tar@
-am__untar = @am__untar@
-bindir = @bindir@
-build = @build@
-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@
-expanded_bindir = @expanded_bindir@
-expanded_datadir = @expanded_datadir@
-expanded_libdir = @expanded_libdir@
-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@
-lt_ECHO = @lt_ECHO@
-mandir = @mandir@
-mkdir_p = @mkdir_p@
-oldincludedir = @oldincludedir@
-pdfdir = @pdfdir@
-prefix = @prefix@
-program_transform_name = @program_transform_name@
-psdir = @psdir@
-sbindir = @sbindir@
-sharedstatedir = @sharedstatedir@
-shavedir = @shavedir@
-srcdir = @srcdir@
-sysconfdir = @sysconfdir@
-target_alias = @target_alias@
-top_build_prefix = @top_build_prefix@
-top_builddir = @top_builddir@
-top_srcdir = @top_srcdir@
-DIR_DOCS = $(top_builddir)/docs
-DIR_EXTENSIONS = $(top_builddir)/extensions
-DIR_GPHOTO2 = $(top_builddir)/lib/libgphoto2-sharp
-DIR_ICONS = $(top_builddir)/icons
-DIR_JPEGTRAN = $(top_builddir)/lib/libjpegtran
-DIR_KEYRING = $(top_builddir)/lib/gnome-keyring-sharp
-DIR_LIBFSPOT = $(top_builddir)/lib/libfspot
-DIR_SEMWEB = $(top_builddir)/lib/semweb
-DIR_SRC = $(top_builddir)/src
-DIR_GIOSHARP = $(top_builddir)/lib/gio-sharp/gio
-DIR_GTKSHARPBEANS = $(top_builddir)/lib/gtk-sharp-beans
-DIR_UNIQUESHARP = $(top_builddir)/lib/unique-sharp/unique
-LINK_KEYRING = -r:$(DIR_KEYRING)/gnome-keyring-sharp.dll
-LINK_GPHOTO2 = -r:$(DIR_GPHOTO2)/libgphoto2-sharp.dll
-LINK_SEMWEB = -r:$(DIR_SEMWEB)/SemWeb.dll
-LINK_GIOSHARP = -r:$(DIR_GIOSHARP)/gio-sharp.dll
-LINK_GTKSHARPBEANS = -r:$(DIR_GTKSHARPBEANS)/gtk-sharp-beans.dll
-LINK_UNIQUESHARP = -r:$(DIR_UNIQUESHARP)/unique-sharp.dll
-CSC_FLAGS = -debug
-CSC = $(MCS) $(CSC_FLAGS) -target:exe
-CSC_LIB = $(MCS) $(CSC_FLAGS) -target:library
-MONO_DEBUGFLAGS = --debug
-RUNTIME = mono $(MONO_DEBUGFLAGS)
-ASSEMBLY_NAME = dpap-server
-ASSEMBLY_SOURCES = \
- AssemblyInfo.cs \
- Main.cs
-
-REFS = \
- -r:Mono.Posix \
- -r:ICSharpCode.SharpZipLib \
- -r:../lib/dpap-sharp.dll
-
-PKGS =
-ASSEMBLY = $(ASSEMBLY_NAME).exe
-assemblydir = $(pkglibdir)
-assembly_DATA = \
- $(ASSEMBLY)
-
-EXTRA_DIST = \
- $(ASSEMBLY_SOURCES)
-
-CLEANFILES = \
- $(ASSEMBLY) \
- $(ASSEMBLY).mdb
-
-all: all-am
-
-.SUFFIXES:
-$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(top_srcdir)/Makefile.include $(am__configure_deps)
- @for dep in $?; do \
- case '$(am__configure_deps)' in \
- *$$dep*) \
- ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \
- && { if test -f $@; then exit 0; else break; fi; }; \
- exit 1;; \
- esac; \
- done; \
- echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign lib/dpap-sharp/dpap-server/Makefile'; \
- $(am__cd) $(top_srcdir) && \
- $(AUTOMAKE) --foreign lib/dpap-sharp/dpap-server/Makefile
-.PRECIOUS: Makefile
-Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
- @case '$?' in \
- *config.status*) \
- cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \
- *) \
- echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \
- cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \
- esac;
-
-$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
- cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
-
-$(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps)
- cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
-$(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps)
- cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
-$(am__aclocal_m4_deps):
-
-mostlyclean-libtool:
- -rm -f *.lo
-
-clean-libtool:
- -rm -rf .libs _libs
-install-assemblyDATA: $(assembly_DATA)
- @$(NORMAL_INSTALL)
- test -z "$(assemblydir)" || $(MKDIR_P) "$(DESTDIR)$(assemblydir)"
- @list='$(assembly_DATA)'; test -n "$(assemblydir)" || list=; \
- for p in $$list; do \
- if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \
- echo "$$d$$p"; \
- done | $(am__base_list) | \
- while read files; do \
- echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(assemblydir)'"; \
- $(INSTALL_DATA) $$files "$(DESTDIR)$(assemblydir)" || exit $$?; \
- done
-
-uninstall-assemblyDATA:
- @$(NORMAL_UNINSTALL)
- @list='$(assembly_DATA)'; test -n "$(assemblydir)" || list=; \
- files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \
- test -n "$$files" || exit 0; \
- echo " ( cd '$(DESTDIR)$(assemblydir)' && rm -f" $$files ")"; \
- cd "$(DESTDIR)$(assemblydir)" && rm -f $$files
-tags: TAGS
-TAGS:
-
-ctags: CTAGS
-CTAGS:
-
-
-distdir: $(DISTFILES)
- @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; \
- if test -d $$d/$$file; then \
- dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \
- if test -d "$(distdir)/$$file"; then \
- find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
- fi; \
- if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
- cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \
- find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
- fi; \
- cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \
- else \
- test -f "$(distdir)/$$file" \
- || cp -p $$d/$$file "$(distdir)/$$file" \
- || exit 1; \
- fi; \
- done
-check-am: all-am
-check: check-am
-all-am: Makefile $(DATA)
-installdirs:
- for dir in "$(DESTDIR)$(assemblydir)"; do \
- test -z "$$dir" || $(MKDIR_P) "$$dir"; \
- done
-install: install-am
-install-exec: install-exec-am
-install-data: install-data-am
-uninstall: uninstall-am
-
-install-am: all-am
- @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
-
-installcheck: installcheck-am
-install-strip:
- $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
- install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
- `test -z '$(STRIP)' || \
- echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install
-mostlyclean-generic:
-
-clean-generic:
- -test -z "$(CLEANFILES)" || rm -f $(CLEANFILES)
-
-distclean-generic:
- -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
- -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES)
-
-maintainer-clean-generic:
- @echo "This command is intended for maintainers to use"
- @echo "it deletes files that may require special tools to rebuild."
-clean: clean-am
-
-clean-am: clean-generic clean-libtool mostlyclean-am
-
-distclean: distclean-am
- -rm -f Makefile
-distclean-am: clean-am distclean-generic
-
-dvi: dvi-am
-
-dvi-am:
-
-html: html-am
-
-html-am:
-
-info: info-am
-
-info-am:
-
-install-data-am: install-assemblyDATA
-
-install-dvi: install-dvi-am
-
-install-dvi-am:
-
-install-exec-am:
-
-install-html: install-html-am
-
-install-html-am:
-
-install-info: install-info-am
-
-install-info-am:
-
-install-man:
-
-install-pdf: install-pdf-am
-
-install-pdf-am:
-
-install-ps: install-ps-am
-
-install-ps-am:
-
-installcheck-am:
-
-maintainer-clean: maintainer-clean-am
- -rm -f Makefile
-maintainer-clean-am: distclean-am maintainer-clean-generic
-
-mostlyclean: mostlyclean-am
-
-mostlyclean-am: mostlyclean-generic mostlyclean-libtool
-
-pdf: pdf-am
-
-pdf-am:
-
-ps: ps-am
-
-ps-am:
-
-uninstall-am: uninstall-assemblyDATA
-
-.MAKE: install-am install-strip
-
-.PHONY: all all-am check check-am clean clean-generic clean-libtool \
- distclean distclean-generic distclean-libtool distdir dvi \
- dvi-am html html-am info info-am install install-am \
- install-assemblyDATA 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-generic mostlyclean-libtool pdf pdf-am ps ps-am \
- uninstall uninstall-am uninstall-assemblyDATA
-
-
-all: $(ASSEMBLY)
-
-$(ASSEMBLY): $(ASSEMBLY_SOURCES)
- $(CSC) -out:$@ $(PKGS) $(REFS) $(ASSEMBLY_SOURCES)
-
-# 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.
-.NOEXPORT:
diff --git a/lib/dpap-sharp/lib/Album.cs b/lib/dpap-sharp/lib/Album.cs
deleted file mode 100644
index 96e399a..0000000
--- a/lib/dpap-sharp/lib/Album.cs
+++ /dev/null
@@ -1,224 +0,0 @@
-// Album.cs
-//
-// Authors:
-// Andrzej Wytyczak-Partyka <iapart at gmail.com>
-// James Willcox <snorp at snorp.net>
-//
-// Copyright (C) 2008 Andrzej Wytyczak-Partyka
-// Copyright (C) 2005 James Willcox <snorp at snorp.net>
-//
-// This program is free software; you can redistribute it and/or modify
-// it under the terms of the GNU General Public License as published by
-// the Free Software Foundation; either version 2 of the License, or
-// (at your option) any later version.
-//
-// This program is distributed in the hope that it will be useful,
-// but WITHOUT ANY WARRANTY; without even the implied warranty of
-// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-// GNU General Public License for more details.
-//
-// You should have received a copy of the GNU General Public License
-// along with this program; if not, write to the Free Software
-// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
-//
-//
-
- using System;
-using System.Collections;
-using System.Collections.Generic;
-using System.Collections.ObjectModel;
-
-namespace DPAP
-{
- public delegate void AlbumPhotoHandler (object o, int index, Photo track);
-
- public class Album
- {
- private static int nextid = 1;
-
- private int id;
- private string name = String.Empty;
- private List<Photo> photos = new List<Photo> ();
- private List<int> container_ids = new List<int> ();
-
- public event AlbumPhotoHandler PhotoAdded;
- public event AlbumPhotoHandler PhotoRemoved;
- public event EventHandler NameChanged;
-
- public Photo this [int index] {
- get {
- if (photos.Count > index)
- return photos [index];
- else
- return null;
- }
- set { photos [index] = value; }
- }
-
- public IList<Photo> Photos {
- get { return new ReadOnlyCollection<Photo> (photos); }
- }
-
- internal int Id {
- get { return id; }
- set { id = value; }
- }
-
- public string Name {
- get { return name; }
- set {
- name = value;
- if (NameChanged != null)
- NameChanged (this, new EventArgs ());
- }
- }
-
- internal Album () {
- id = nextid++;
- }
-
- public Album (string name) : this () {
- this.name = name;
- }
-
- public void InsertPhoto (int index, Photo photo) {
- InsertPhoto (index, photo, photos.Count + 1);
- }
-
- internal void InsertPhoto (int index, Photo photo, int id) {
- photos.Insert (index, photo);
- container_ids.Insert (index, id);
-
- if (PhotoAdded != null)
- PhotoAdded (this, index, photo);
- }
-
- public void Clear () {
- photos.Clear ();
- }
-
- public void AddPhoto (Photo photo) {
- AddPhoto (photo, photos.Count + 1);
- }
-
- internal void AddPhoto (Photo photo, int id) {
- photos.Add (photo);
- container_ids.Add (id);
-
- if (PhotoAdded != null)
- PhotoAdded (this, photos.Count - 1, photo);
- }
-
- public void RemoveAt (int index) {
- Photo photo = (Photo) photos [index];
- photos.RemoveAt (index);
- container_ids.RemoveAt (index);
-
- if (PhotoRemoved != null)
- PhotoRemoved (this, index, photo);
- }
-
- public bool RemovePhoto (Photo photo) {
- int index;
- bool ret = false;
-
- while ( (index = IndexOf (photo)) >= 0) {
- ret = true;
- RemoveAt (index);
- }
-
- return ret;
- }
-
- public int IndexOf (Photo photo) {
- return photos.IndexOf (photo);
- }
-
- internal int GetContainerId (int index) {
- return (int) container_ids [index];
- }
-
- internal ContentNode ToPhotosNode (string [] fields) {
- ArrayList photo_nodes = new ArrayList ();
-
- for (int i = 0; i < photos.Count; i++) {
- Photo photo = photos [i] as Photo;
- photo_nodes.Add (photo.ToAlbumNode (fields));
- //photo_nodes.Add (photo.ToAlbumsNode ( (int) container_ids [i]));
- }
-
- /*ArrayList deletedNodes = null;
- if (deletedIds.Length > 0) {
- deletedNodes = new ArrayList ();
-
- foreach (int id in deletedIds) {
- deletedNodes.Add (new ContentNode ("dmap.itemid", id));
- }
- }
-*/
- ArrayList children = new ArrayList ();
- children.Add (new ContentNode ("dmap.status", 200));
- children.Add (new ContentNode ("dmap.updatetype", (byte) 0));
- children.Add (new ContentNode ("dmap.specifiedtotalcount", photos.Count));
- children.Add (new ContentNode ("dmap.returnedcount", photos.Count));
- children.Add (new ContentNode ("dmap.listing", photo_nodes));
-
- // if (deletedNodes != null)
- // children.Add (new ContentNode ("dmap.deletedidlisting", deletedNodes));
-
-
- return new ContentNode ("dpap.playlistsongs", children);
- }
-
- internal ContentNode ToNode (bool baseAlbum) {
-
- ArrayList nodes = new ArrayList ();
-
- nodes.Add (new ContentNode ("dmap.itemid", id));
- nodes.Add (new ContentNode ("dmap.persistentid", (long) id));
- nodes.Add (new ContentNode ("dmap.itemname", name));
- nodes.Add (new ContentNode ("dmap.itemcount", photos.Count));
- if (baseAlbum)
- nodes.Add (new ContentNode ("dpap.baseplaylist", (byte) 1));
-
- return new ContentNode ("dmap.listingitem", nodes);
- }
-
- internal static Album FromNode (ContentNode node) {
- Album pl = new Album ();
-
- foreach (ContentNode child in (ContentNode []) node.Value) {
- switch (child.Name) {
- case "dpap.baseplaylist":
- return null;
- case "dmap.itemid":
- pl.Id = (int) child.Value;
- break;
- case "dmap.itemname":
- pl.Name = (string) child.Value;
- break;
- default:
- break;
- }
- }
-
- return pl;
- }
-
- internal void Update (Album pl) {
- if (pl.Name == name)
- return;
-
- Name = pl.Name;
- }
-
- internal int LookupIndexByContainerId (int id) {
- return container_ids.IndexOf (id);
- }
-
- public int getId () {
- return Id;
- }
- }
-
-}
diff --git a/lib/dpap-sharp/lib/AssemblyInfo.cs b/lib/dpap-sharp/lib/AssemblyInfo.cs
deleted file mode 100644
index 8d203e8..0000000
--- a/lib/dpap-sharp/lib/AssemblyInfo.cs
+++ /dev/null
@@ -1,30 +0,0 @@
-// AssemblyInfo.cs created with MonoDevelop
-// User: andrzej at 12:50 2008-04-23
-//
-// To change standard headers go to Edit->Preferences->Coding->Standard Headers
-//
-using System.Reflection;
-using System.Runtime.CompilerServices;
-
-// Information about this assembly is defined by the following attributes.
-// Change them to the values specific to your project.
-
- [assembly: AssemblyTitle ("dpap-sharp")]
- [assembly: AssemblyDescription ("")]
- [assembly: AssemblyConfiguration ("")]
- [assembly: AssemblyCompany ("")]
- [assembly: AssemblyProduct ("")]
- [assembly: AssemblyCopyright ("")]
- [assembly: AssemblyTrademark ("")]
- [assembly: AssemblyCulture ("")]
-
-// The assembly version has the format "{Major}.{Minor}.{Build}.{Revision}".
-// If the build and revision are set to '*' they will be updated automatically.
-
- [assembly: AssemblyVersion ("1.0.*.*")]
-
-// The following attributes are used to specify the signing key for the assembly,
-// if desired. See the Mono documentation for more information about signing.
-
- [assembly: AssemblyDelaySign (false)]
- [assembly: AssemblyKeyFile ("")]
diff --git a/lib/dpap-sharp/lib/AuthenticationException.cs b/lib/dpap-sharp/lib/AuthenticationException.cs
deleted file mode 100644
index 5351090..0000000
--- a/lib/dpap-sharp/lib/AuthenticationException.cs
+++ /dev/null
@@ -1,32 +0,0 @@
-// AuthenticationException.cs
-//
-// Author:
-// James Willcox <snorp at snorp.net>
-//
-// Copyright (C) 2005 James Willcox <snorp at snorp.net>
-//
-// This program is free software; you can redistribute it and/or modify
-// it under the terms of the GNU General Public License as published by
-// the Free Software Foundation; either version 2 of the License, or
-// (at your option) any later version.
-//
-// This program is distributed in the hope that it will be useful,
-// but WITHOUT ANY WARRANTY; without even the implied warranty of
-// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-// GNU General Public License for more details.
-//
-// You should have received a copy of the GNU General Public License
-// along with this program; if not, write to the Free Software
-// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
-//
-//
-using System;
-
-namespace DPAP {
-
- public class AuthenticationException : ApplicationException {
-
- public AuthenticationException (string msg) : base (msg) {
- }
- }
-}
diff --git a/lib/dpap-sharp/lib/BrokenMD5.cs b/lib/dpap-sharp/lib/BrokenMD5.cs
deleted file mode 100644
index 384e1ea..0000000
--- a/lib/dpap-sharp/lib/BrokenMD5.cs
+++ /dev/null
@@ -1,522 +0,0 @@
-// BrokenMD5.cs
-//
-// Author:
-// James Willcox <snorp at snorp.net>
-//
-// Copyright (C) 2005 James Willcox <snorp at snorp.net>
-//
-// This library is free software; you can redistribute it and/or
-// modify it under the terms of the GNU Lesser General Public
-// License as published by the Free Software Foundation; either
-// version 2.1 of the License, or (at your option) any later version.
-//
-// This library is distributed in the hope that it will be useful,
-// but WITHOUT ANY WARRANTY; without even the implied warranty of
-// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-// Lesser General Public License for more details.
-//
-// You should have received a copy of the GNU Lesser General Public
-// License along with this library; if not, write to the Free Software
-// Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
-//
-//
-// BrokenMD5 Class implementation
-//
-// Authors:
-// Matthew S. Ford (Matthew.S.Ford at Rose-Hulman.Edu)
-// Sebastien Pouliot (sebastien at ximian.com)
-// Jon Lech Johansen (jon at nanocrew.net)
-//
-// Copyright 2001 by Matthew S. Ford.
-// Copyright (C) 2004-2005 Novell, Inc (http://www.novell.com)
-//
-// Permission is hereby granted, free of charge, to any person obtaining
-// a copy of this software and associated documentation files (the
-// "Software"), to deal in the Software without restriction, including
-// without limitation the rights to use, copy, modify, merge, publish,
-// distribute, sublicense, and/or sell copies of the Software, and to
-// permit persons to whom the Software is furnished to do so, subject to
-// the following conditions:
-//
-// The above copyright notice and this permission notice shall be
-// included in all copies or substantial portions of the Software.
-//
-// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
-// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
-// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
-// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
-// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
-// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
-// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
-//
-
-using System;
-using System.Runtime.InteropServices;
-using System.Security.Cryptography;
-
-namespace DPAP {
-
- internal class BrokenMD5 : MD5 {
- private const int BLOCK_SIZE_BYTES = 64;
- private const int HASH_SIZE_BYTES = 16;
- private uint [] _H;
- private uint [] buff;
- private ulong count;
- private byte [] _ProcessingBuffer; // Used to start data when passed less than a block worth.
- private int _ProcessingBufferCount; // Counts how much data we have stored that still needs processed.
- private int _version;
-
- public BrokenMD5 ( int version )
- {
- _H = new uint [4];
- buff = new uint [16];
- _ProcessingBuffer = new byte [BLOCK_SIZE_BYTES];
- _version = version;
-
- Initialize ();
- }
-
- ~BrokenMD5 ()
- {
- Dispose (false);
- }
-
- protected override void Dispose (bool disposing)
- {
- if (_ProcessingBuffer != null) {
- Array.Clear (_ProcessingBuffer, 0, _ProcessingBuffer.Length);
- _ProcessingBuffer = null;
- }
- if (_H != null) {
- Array.Clear (_H, 0, _H.Length);
- _H = null;
- }
- if (buff != null) {
- Array.Clear (buff, 0, buff.Length);
- buff = null;
- }
- }
-
- protected override void HashCore (byte [] rgb, int start, int size)
- {
- int i;
- State = 1;
-
- if (_ProcessingBufferCount != 0) {
- if (size < (BLOCK_SIZE_BYTES - _ProcessingBufferCount)) {
- System.Buffer.BlockCopy (rgb, start, _ProcessingBuffer, _ProcessingBufferCount, size);
- _ProcessingBufferCount += size;
- return;
- }
- else {
- i = (BLOCK_SIZE_BYTES - _ProcessingBufferCount);
- System.Buffer.BlockCopy (rgb, start, _ProcessingBuffer, _ProcessingBufferCount, i);
- ProcessBlock (_ProcessingBuffer, 0);
- _ProcessingBufferCount = 0;
- start += i;
- size -= i;
- }
- }
-
- for (i=0; i<size-size%BLOCK_SIZE_BYTES; i += BLOCK_SIZE_BYTES) {
- ProcessBlock (rgb, start+i);
- }
-
- if (size%BLOCK_SIZE_BYTES != 0) {
- System.Buffer.BlockCopy (rgb, size-size%BLOCK_SIZE_BYTES+start, _ProcessingBuffer, 0, size%BLOCK_SIZE_BYTES);
- _ProcessingBufferCount = size%BLOCK_SIZE_BYTES;
- }
- }
-
- protected override byte [] HashFinal ()
- {
- byte [] hash = new byte [16];
- int i, j;
-
- ProcessFinalBlock (_ProcessingBuffer, 0, _ProcessingBufferCount);
-
- for (i=0; i<4; i++) {
- for (j=0; j<4; j++) {
- hash [i*4+j] = (byte) (_H [i] >> j*8);
- }
- }
-
- return hash;
- }
-
- public override void Initialize ()
- {
- count = 0;
- _ProcessingBufferCount = 0;
-
- _H [0] = 0x67452301;
- _H [1] = 0xefcdab89;
- _H [2] = 0x98badcfe;
- _H [3] = 0x10325476;
- }
-
- private void ProcessBlock (byte [] inputBuffer, int inputOffset)
- {
- uint a, b, c, d;
- int i;
-
- count += BLOCK_SIZE_BYTES;
-
- for (i=0; i<16; i++) {
- buff [i] = (uint) (inputBuffer [inputOffset+4*i])
- | ( ( (uint) (inputBuffer [inputOffset+4*i+1])) << 8)
- | ( ( (uint) (inputBuffer [inputOffset+4*i+2])) << 16)
- | ( ( (uint) (inputBuffer [inputOffset+4*i+3])) << 24);
- }
-
- a = _H [0];
- b = _H [1];
- c = _H [2];
- d = _H [3];
-
- // This function was unrolled because it seems to be doubling our performance with current compiler/VM.
- // Possibly roll up if this changes.
-
- // ---- Round 1 --------
-
- a += ( ( (c ^ d) & b) ^ d) + (uint) K [0] + buff [0];
- a = (a << 7) | (a >> 25);
- a += b;
-
- d += ( ( (b ^ c) & a) ^ c) + (uint) K [1] + buff [1];
- d = (d << 12) | (d >> 20);
- d += a;
-
- c += ( ( (a ^ b) & d) ^ b) + (uint) K [2] + buff [2];
- c = (c << 17) | (c >> 15);
- c += d;
-
- b += ( ( (d ^ a) & c) ^ a) + (uint) K [3] + buff [3];
- b = (b << 22) | (b >> 10);
- b += c;
-
- a += ( ( (c ^ d) & b) ^ d) + (uint) K [4] + buff [4];
- a = (a << 7) | (a >> 25);
- a += b;
-
- d += ( ( (b ^ c) & a) ^ c) + (uint) K [5] + buff [5];
- d = (d << 12) | (d >> 20);
- d += a;
-
- c += ( ( (a ^ b) & d) ^ b) + (uint) K [6] + buff [6];
- c = (c << 17) | (c >> 15);
- c += d;
-
- b += ( ( (d ^ a) & c) ^ a) + (uint) K [7] + buff [7];
- b = (b << 22) | (b >> 10);
- b += c;
-
- a += ( ( (c ^ d) & b) ^ d) + (uint) K [8] + buff [8];
- a = (a << 7) | (a >> 25);
- a += b;
-
- d += ( ( (b ^ c) & a) ^ c) + (uint) K [9] + buff [9];
- d = (d << 12) | (d >> 20);
- d += a;
-
- c += ( ( (a ^ b) & d) ^ b) + (uint) K [10] + buff [10];
- c = (c << 17) | (c >> 15);
- c += d;
-
- b += ( ( (d ^ a) & c) ^ a) + (uint) K [11] + buff [11];
- b = (b << 22) | (b >> 10);
- b += c;
-
- a += ( ( (c ^ d) & b) ^ d) + (uint) K [12] + buff [12];
- a = (a << 7) | (a >> 25);
- a += b;
-
- d += ( ( (b ^ c) & a) ^ c) + (uint) K [13] + buff [13];
- d = (d << 12) | (d >> 20);
- d += a;
-
- c += ( ( (a ^ b) & d) ^ b) + (uint) K [14] + buff [14];
- c = (c << 17) | (c >> 15);
- c += d;
-
- b += ( ( (d ^ a) & c) ^ a) + (uint) K [15] + buff [15];
- b = (b << 22) | (b >> 10);
- b += c;
-
-
- // ---- Round 2 --------
-
- a += ( ( (b ^ c) & d) ^ c) + (uint) K [16] + buff [1];
- a = (a << 5) | (a >> 27);
- a += b;
-
- d += ( ( (a ^ b) & c) ^ b) + (uint) K [17] + buff [6];
- d = (d << 9) | (d >> 23);
- d += a;
-
- c += ( ( (d ^ a) & b) ^ a) + (uint) K [18] + buff [11];
- c = (c << 14) | (c >> 18);
- c += d;
-
- b += ( ( (c ^ d) & a) ^ d) + (uint) K [19] + buff [0];
- b = (b << 20) | (b >> 12);
- b += c;
-
- a += ( ( (b ^ c) & d) ^ c) + (uint) K [20] + buff [5];
- a = (a << 5) | (a >> 27);
- a += b;
-
- d += ( ( (a ^ b) & c) ^ b) + (uint) K [21] + buff [10];
- d = (d << 9) | (d >> 23);
- d += a;
-
- c += ( ( (d ^ a) & b) ^ a) + (uint) K [22] + buff [15];
- c = (c << 14) | (c >> 18);
- c += d;
-
- b += ( ( (c ^ d) & a) ^ d) + (uint) K [23] + buff [4];
- b = (b << 20) | (b >> 12);
- b += c;
-
- a += ( ( (b ^ c) & d) ^ c) + (uint) K [24] + buff [9];
- a = (a << 5) | (a >> 27);
- a += b;
-
- d += ( ( (a ^ b) & c) ^ b) + (uint) K [25] + buff [14];
- d = (d << 9) | (d >> 23);
- d += a;
-
- c += ( ( (d ^ a) & b) ^ a) + (uint) K [26] + buff [3];
- c = (c << 14) | (c >> 18);
- c += d;
-
- if ( _version == 1 )
- {
- b += ( ( (c ^ d) & a) ^ d) + (uint) 0x445a14ed + buff [8];
- b = (b << 20) | (b >> 12);
- b += c;
- }
- else
- {
- b += ( ( (c ^ d) & a) ^ d) + (uint) K [27] + buff [8];
- b = (b << 20) | (b >> 12);
- b += c;
- }
-
- a += ( ( (b ^ c) & d) ^ c) + (uint) K [28] + buff [13];
- a = (a << 5) | (a >> 27);
- a += b;
-
- d += ( ( (a ^ b) & c) ^ b) + (uint) K [29] + buff [2];
- d = (d << 9) | (d >> 23);
- d += a;
-
- c += ( ( (d ^ a) & b) ^ a) + (uint) K [30] + buff [7];
- c = (c << 14) | (c >> 18);
- c += d;
-
- b += ( ( (c ^ d) & a) ^ d) + (uint) K [31] + buff [12];
- b = (b << 20) | (b >> 12);
- b += c;
-
-
- // ---- Round 3 --------
-
- a += (b ^ c ^ d) + (uint) K [32] + buff [5];
- a = (a << 4) | (a >> 28);
- a += b;
-
- d += (a ^ b ^ c) + (uint) K [33] + buff [8];
- d = (d << 11) | (d >> 21);
- d += a;
-
- c += (d ^ a ^ b) + (uint) K [34] + buff [11];
- c = (c << 16) | (c >> 16);
- c += d;
-
- b += (c ^ d ^ a) + (uint) K [35] + buff [14];
- b = (b << 23) | (b >> 9);
- b += c;
-
- a += (b ^ c ^ d) + (uint) K [36] + buff [1];
- a = (a << 4) | (a >> 28);
- a += b;
-
- d += (a ^ b ^ c) + (uint) K [37] + buff [4];
- d = (d << 11) | (d >> 21);
- d += a;
-
- c += (d ^ a ^ b) + (uint) K [38] + buff [7];
- c = (c << 16) | (c >> 16);
- c += d;
-
- b += (c ^ d ^ a) + (uint) K [39] + buff [10];
- b = (b << 23) | (b >> 9);
- b += c;
-
- a += (b ^ c ^ d) + (uint) K [40] + buff [13];
- a = (a << 4) | (a >> 28);
- a += b;
-
- d += (a ^ b ^ c) + (uint) K [41] + buff [0];
- d = (d << 11) | (d >> 21);
- d += a;
-
- c += (d ^ a ^ b) + (uint) K [42] + buff [3];
- c = (c << 16) | (c >> 16);
- c += d;
-
- b += (c ^ d ^ a) + (uint) K [43] + buff [6];
- b = (b << 23) | (b >> 9);
- b += c;
-
- a += (b ^ c ^ d) + (uint) K [44] + buff [9];
- a = (a << 4) | (a >> 28);
- a += b;
-
- d += (a ^ b ^ c) + (uint) K [45] + buff [12];
- d = (d << 11) | (d >> 21);
- d += a;
-
- c += (d ^ a ^ b) + (uint) K [46] + buff [15];
- c = (c << 16) | (c >> 16);
- c += d;
-
- b += (c ^ d ^ a) + (uint) K [47] + buff [2];
- b = (b << 23) | (b >> 9);
- b += c;
-
-
- // ---- Round 4 --------
-
- a += ( ( (~d) | b) ^ c) + (uint) K [48] + buff [0];
- a = (a << 6) | (a >> 26);
- a += b;
-
- d += ( ( (~c) | a) ^ b) + (uint) K [49] + buff [7];
- d = (d << 10) | (d >> 22);
- d += a;
-
- c += ( ( (~b) | d) ^ a) + (uint) K [50] + buff [14];
- c = (c << 15) | (c >> 17);
- c += d;
-
- b += ( ( (~a) | c) ^ d) + (uint) K [51] + buff [5];
- b = (b << 21) | (b >> 11);
- b += c;
-
- a += ( ( (~d) | b) ^ c) + (uint) K [52] + buff [12];
- a = (a << 6) | (a >> 26);
- a += b;
-
- d += ( ( (~c) | a) ^ b) + (uint) K [53] + buff [3];
- d = (d << 10) | (d >> 22);
- d += a;
-
- c += ( ( (~b) | d) ^ a) + (uint) K [54] + buff [10];
- c = (c << 15) | (c >> 17);
- c += d;
-
- b += ( ( (~a) | c) ^ d) + (uint) K [55] + buff [1];
- b = (b << 21) | (b >> 11);
- b += c;
-
- a += ( ( (~d) | b) ^ c) + (uint) K [56] + buff [8];
- a = (a << 6) | (a >> 26);
- a += b;
-
- d += ( ( (~c) | a) ^ b) + (uint) K [57] + buff [15];
- d = (d << 10) | (d >> 22);
- d += a;
-
- c += ( ( (~b) | d) ^ a) + (uint) K [58] + buff [6];
- c = (c << 15) | (c >> 17);
- c += d;
-
- b += ( ( (~a) | c) ^ d) + (uint) K [59] + buff [13];
- b = (b << 21) | (b >> 11);
- b += c;
-
- a += ( ( (~d) | b) ^ c) + (uint) K [60] + buff [4];
- a = (a << 6) | (a >> 26);
- a += b;
-
- d += ( ( (~c) | a) ^ b) + (uint) K [61] + buff [11];
- d = (d << 10) | (d >> 22);
- d += a;
-
- c += ( ( (~b) | d) ^ a) + (uint) K [62] + buff [2];
- c = (c << 15) | (c >> 17);
- c += d;
-
- b += ( ( (~a) | c) ^ d) + (uint) K [63] + buff [9];
- b = (b << 21) | (b >> 11);
- b += c;
-
- _H [0] += a;
- _H [1] += b;
- _H [2] += c;
- _H [3] += d;
- }
-
- private void ProcessFinalBlock (byte [] inputBuffer, int inputOffset, int inputCount)
- {
- ulong total = count + (ulong)inputCount;
- int paddingSize = (int) (56 - total % BLOCK_SIZE_BYTES);
-
- if (paddingSize < 1)
- paddingSize += BLOCK_SIZE_BYTES;
-
- byte [] fooBuffer = new byte [inputCount+paddingSize+8];
-
- for (int i=0; i<inputCount; i++) {
- fooBuffer [i] = inputBuffer [i+inputOffset];
- }
-
- fooBuffer [inputCount] = 0x80;
- for (int i=inputCount+1; i<inputCount+paddingSize; i++) {
- fooBuffer [i] = 0x00;
- }
-
- // I deal in bytes. The algorithm deals in bits.
- ulong size = total << 3;
- AddLength (size, fooBuffer, inputCount+paddingSize);
- ProcessBlock (fooBuffer, 0);
-
- if (inputCount+paddingSize+8 == 128) {
- ProcessBlock (fooBuffer, 64);
- }
- }
-
- internal void AddLength (ulong length, byte [] buffer, int position)
- {
- buffer [position++] = (byte) (length);
- buffer [position++] = (byte) (length >> 8);
- buffer [position++] = (byte) (length >> 16);
- buffer [position++] = (byte) (length >> 24);
- buffer [position++] = (byte) (length >> 32);
- buffer [position++] = (byte) (length >> 40);
- buffer [position++] = (byte) (length >> 48);
- buffer [position] = (byte) (length >> 56);
- }
-
- private readonly static uint [] K = {
- 0xd76aa478, 0xe8c7b756, 0x242070db, 0xc1bdceee,
- 0xf57c0faf, 0x4787c62a, 0xa8304613, 0xfd469501,
- 0x698098d8, 0x8b44f7af, 0xffff5bb1, 0x895cd7be,
- 0x6b901122, 0xfd987193, 0xa679438e, 0x49b40821,
- 0xf61e2562, 0xc040b340, 0x265e5a51, 0xe9b6c7aa,
- 0xd62f105d, 0x02441453, 0xd8a1e681, 0xe7d3fbc8,
- 0x21e1cde6, 0xc33707d6, 0xf4d50d87, 0x455a14ed,
- 0xa9e3e905, 0xfcefa3f8, 0x676f02d9, 0x8d2a4c8a,
- 0xfffa3942, 0x8771f681, 0x6d9d6122, 0xfde5380c,
- 0xa4beea44, 0x4bdecfa9, 0xf6bb4b60, 0xbebfbc70,
- 0x289b7ec6, 0xeaa127fa, 0xd4ef3085, 0x04881d05,
- 0xd9d4d039, 0xe6db99e5, 0x1fa27cf8, 0xc4ac5665,
- 0xf4292244, 0x432aff97, 0xab9423a7, 0xfc93a039,
- 0x655b59c3, 0x8f0ccc92, 0xffeff47d, 0x85845dd1,
- 0x6fa87e4f, 0xfe2ce6e0, 0xa3014314, 0x4e0811a1,
- 0xf7537e82, 0xbd3af235, 0x2ad7d2bb, 0xeb86d391
- };
- }
-}
diff --git a/lib/dpap-sharp/lib/Client.cs b/lib/dpap-sharp/lib/Client.cs
deleted file mode 100644
index fcadf6a..0000000
--- a/lib/dpap-sharp/lib/Client.cs
+++ /dev/null
@@ -1,250 +0,0 @@
-// Client.cs
-//
-// Authors:
-// Andrzej Wytyczak-Partyka <iapart at gmail.com>
-// James Willcox <snorp at snorp.net>
-//
-// Copyright (C) 2008 Andrzej Wytyczak-Partyka
-// Copyright (C) 2005 James Willcox <snorp at snorp.net>
-//
-// This program is free software; you can redistribute it and/or modify
-// it under the terms of the GNU General Public License as published by
-// the Free Software Foundation; either version 2 of the License, or
-// (at your option) any later version.
-//
-// This program is distributed in the hope that it will be useful,
-// but WITHOUT ANY WARRANTY; without even the implied warranty of
-// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-// GNU General Public License for more details.
-//
-// You should have received a copy of the GNU General Public License
-// along with this program; if not, write to the Free Software
-// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
-//
-//
-
-using System;
-using System.Runtime.InteropServices;
-using System.Threading;
-using System.IO;
-using System.Web;
-using System.Net;
-using System.Text;
-using System.Collections;
-using System.Collections.Generic;
-using System.Collections.ObjectModel;
-
-namespace DPAP
-{
-
-
- public class Client
- {
-
- private const int UpdateSleepInterval = 2 * 60 * 1000; // 2 minutes
-
- private IPAddress address;
- private UInt16 port;
- private ContentCodeBag bag;
- private ServerInfo server_info;
- private List<Database> databases = new List<Database> ();
- private ContentFetcher fetcher;
- private int revision;
- private bool update_running;
- private string service_name;
-
- public event EventHandler Updated;
-
- internal int Revision {
- get { return revision; }
- }
-
- public string Name {
- get { return service_name; }
- }
-
- public IPAddress Address {
- get { return address; }
- }
-
- public ushort Port {
- get { return port; }
- }
-
- public AuthenticationMethod AuthenticationMethod {
- get { return server_info.AuthenticationMethod; }
- }
-
- public IList<Database> Databases {
- get { return new ReadOnlyCollection<Database> (databases); }
- }
-
- internal ContentCodeBag Bag {
- get { return bag; }
- }
-
- internal ContentFetcher Fetcher {
- get { return fetcher; }
- }
-
- public Client (Service service) : this (service.Address, service.Port, service.Name) {
- }
-
- public Client (string host, UInt16 port) : this (Dns.GetHostEntry (host).AddressList [0], port, "") {
- }
-
- public Client (IPAddress address, UInt16 port, String name) {
- this.address = address;
- this.port = port;
- this.service_name = name;
- fetcher = new ContentFetcher (address, port);
- Login (null,null);
-
- }
-
- ~Client () {
- Dispose ();
- }
-
- public void Dispose () {
- update_running = false;
-
- if (fetcher != null) {
- fetcher.Dispose ();
- fetcher = null;
- }
- }
-
- private void ParseSessionId (ContentNode node) {
- fetcher.SessionId = (int) node.GetChild ("dmap.sessionid").Value;
- }
-
- public void Login () {
- Login (null, null);
- }
-
- public void Login (string password) {
- Login (null, password);
- }
-
- public void Login (string username, string password) {
- fetcher.Username = username;
- fetcher.Password = password;
-
- try {
- bag = ContentCodeBag.ParseCodes (fetcher.Fetch ("/content-codes"));
-
- ContentNode node = ContentParser.Parse (bag, fetcher.Fetch ("/login"));
- ParseSessionId (node);
-
- FetchDatabases ();
- Refresh ();
- // FIXME - the update handling mechanism is currently disabled
- /* if (server_info.SupportsUpdate) {
- update_running = true;
- Thread thread = new Thread (UpdateLoop);
- thread.IsBackground = true;
- thread.Start ();
- }*/
- } catch (WebException e) {
- if (e.Response != null && (e.Response as HttpWebResponse).StatusCode == HttpStatusCode.Unauthorized)
- throw new AuthenticationException ("Username or password incorrect");
- else
- throw new LoginException ("Failed to login", e);
- } catch (Exception e) {
- throw new LoginException ("Failed to login", e);
- }
- }
-
- public void Logout () {
- try {
- update_running = false;
- fetcher.KillAll ();
- fetcher.Fetch ("/logout");
- } catch (WebException) {
- // some servers don't implement this, etc.
- }
-
- fetcher.SessionId = 0;
- }
-
- private void FetchDatabases () {
- ContentNode dbnode = ContentParser.Parse (bag, fetcher.Fetch ("/databases"));
- // DEBUG
- //dbnode.Dump ();
-
- foreach (ContentNode child in (ContentNode []) dbnode.Value) {
- if (child.Name != "dmap.listing")
- continue;
-
- foreach (ContentNode item in (ContentNode []) child.Value) {
- // DEBUG
- //item.Dump ();
- Database db = new Database (this, item);
- Console.WriteLine ("Adding database {0} with id={1} and album count={2}." , db.Name,db.Id,db.Albums.Count);
- //Console.WriteLine ("Photo " + db.Photos [0].FileName);
- databases.Add (db);
- }
- }
- }
-
- private int GetCurrentRevision () {
- ContentNode rev_node = ContentParser.Parse (bag, fetcher.Fetch ("/update"), "dmap.serverrevision");
- return (int) rev_node.Value;
- }
-
- private int WaitForRevision (int currentRevision) {
- ContentNode rev_node = ContentParser.Parse (bag, fetcher.Fetch ("/update",
- "revision-number=" + currentRevision));
-
- return (int) rev_node.GetChild ("dmap.serverrevision").Value;
- }
-
- private void Refresh () {
- int newrev = 0;
-
- /* if (server_info.SupportsUpdate) {
- if (revision == 0)
- newrev = GetCurrentRevision ();
- else
- newrev = WaitForRevision (revision);
-
- if (newrev == revision)
- return;
- }
- */
- // Console.WriteLine ("Got new revision: " + newrev);
- foreach (Database db in databases) {
- db.Refresh (newrev);
- }
-
- revision = newrev;
- if (Updated != null)
- Updated (this, new EventArgs ());
- }
-
- private void UpdateLoop () {
- while (true) {
- try {
- if (!update_running)
- break;
-
- Refresh ();
- } catch (WebException) {
- if (!update_running)
- break;
-
- // chill out for a while, maybe the server went down
- // temporarily or something.
- Thread.Sleep (UpdateSleepInterval);
- } catch (Exception e) {
- if (!update_running)
- break;
-
- Console.Error.WriteLine ("Exception in update loop: " + e);
- Thread.Sleep (UpdateSleepInterval);
- }
- }
- }
- }
-}
diff --git a/lib/dpap-sharp/lib/ContentCodeBag.cs b/lib/dpap-sharp/lib/ContentCodeBag.cs
deleted file mode 100644
index bb8d2dc..0000000
--- a/lib/dpap-sharp/lib/ContentCodeBag.cs
+++ /dev/null
@@ -1,208 +0,0 @@
-// ContentCodeBag.cs
-//
-// Authors:
-// Andrzej Wytyczak-Partyka <iapart at gmail.com>
-// James Willcox <snorp at snorp.net>
-//
-// Copyright (C) 2008 Andrzej Wytyczak-Partyka
-// Copyright (C) 2005 James Willcox <snorp at snorp.net>
-//
-// This program is free software; you can redistribute it and/or modify
-// it under the terms of the GNU General Public License as published by
-// the Free Software Foundation; either version 2 of the License, or
-// (at your option) any later version.
-//
-// This program is distributed in the hope that it will be useful,
-// but WITHOUT ANY WARRANTY; without even the implied warranty of
-// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-// GNU General Public License for more details.
-//
-// You should have received a copy of the GNU General Public License
-// along with this program; if not, write to the Free Software
-// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
-//
-//
-using System;
-using System.Reflection;
-using System.IO;
-using System.Collections;
-using System.Text;
-using System.Net;
-
-namespace DPAP {
-
- internal enum ContentType : short {
- Char = 1,
- SignedLong = 2,
- Short = 3,
- Long = 5,
- LongLong = 7,
- String = 9,
- Date = 10,
- Version = 11,
- Container = 12,
- FileData = 13
- }
-
- internal struct ContentCode {
- public int Number;
- public string Name;
- public ContentType Type;
-
- public static ContentCode Zero = new ContentCode ();
- }
-
- internal class ContentCodeBag {
-
- private const int ChunkLength = 8192;
-
- private static ContentCodeBag default_bag;
- private Hashtable codes = new Hashtable ();
-
- public static ContentCodeBag Default {
- get {
- Console.WriteLine ("getting default content codebag");
- if (default_bag == null) {
-
- // this is crappy
- foreach (string name in Assembly.GetExecutingAssembly ().GetManifestResourceNames ()) {
- Console.WriteLine ("resource " +name);
- using (BinaryReader reader = new BinaryReader (Assembly.GetExecutingAssembly ().GetManifestResourceStream (name))) {
- MemoryStream buf = new MemoryStream ();
- byte [] bytes = null;
-
- do {
- bytes = reader.ReadBytes (ChunkLength);
- buf.Write (bytes, 0, bytes.Length);
- } while (bytes.Length == ChunkLength);
-
- default_bag = ContentCodeBag.ParseCodes (buf.GetBuffer ());
-
- // FIXME this shouldn't be here, should work from the content-codes file, but doesn't
- default_bag.AddCode ("aply", "dpap.databasecontainers", ContentType.Container);
- }
- }
- }
-
- return default_bag;
- }
- }
-
- private ContentCodeBag () {
- }
-
- public ContentCode Lookup (int number) {
- if (codes.ContainsKey (number))
- return (ContentCode) codes [number];
- else
- return ContentCode.Zero;
- }
-
- public ContentCode Lookup (string name) {
- foreach (ContentCode code in codes.Values) {
- if (code.Name == name)
- return code;
- }
-
- return ContentCode.Zero;
- }
-
- private static int GetIntFormat (string code) {
- return IPAddress.NetworkToHostOrder (BitConverter.ToInt32 (Encoding.ASCII.GetBytes (code), 0));
- }
-
- internal static string GetStringFormat (int code) {
- return Encoding.ASCII.GetString (BitConverter.GetBytes (IPAddress.HostToNetworkOrder (code)));
- }
-
- private void AddCode (string num, string name, ContentType type) {
- ContentCode code = new ContentCode ();
- code.Number = GetIntFormat (num);
- code.Name = name;
- code.Type = type;
-
- codes [code.Number] = code;
- }
-
- internal ContentNode ToNode () {
- ArrayList nodes = new ArrayList ();
-
- foreach (int number in codes.Keys) {
- ContentCode code = (ContentCode) codes [number];
-
- ArrayList contents = new ArrayList ();
- contents.Add (new ContentNode ("dmap.contentcodesnumber", code.Number));
- contents.Add (new ContentNode ("dmap.contentcodesname", code.Name));
- contents.Add (new ContentNode ("dmap.contentcodestype", code.Type));
-
- ContentNode dict = new ContentNode ("dmap.dictionary", contents);
- nodes.Add (dict);
- }
-
- ContentNode status = new ContentNode ("dmap.status", 200);
- return new ContentNode ("dmap.contentcodesresponse", status, nodes);
- }
-
- public static ContentCodeBag ParseCodes (byte [] buffer) {
- ContentCodeBag bag = new ContentCodeBag ();
-
- // add some codes to bootstrap us
- bag.AddCode ("mccr", "dmap.contentcodesresponse", ContentType.Container);
- bag.AddCode ("mdcl", "dmap.dictionary", ContentType.Container);
- bag.AddCode ("mcnm", "dmap.contentcodesnumber", ContentType.Long);
- bag.AddCode ("mcna", "dmap.contentcodesname", ContentType.String);
- bag.AddCode ("mcty", "dmap.contentcodestype", ContentType.Short);
- bag.AddCode ("mstt", "dmap.status", ContentType.Long);
-
- // some photo-specific codes
- // shouldn't be needed now
- bag.AddCode ("ppro", "dpap.protocolversion", ContentType.Long);
- bag.AddCode ("pret", "dpap.blah", ContentType.Container);
- bag.AddCode ("avdb", "dpap.serverdatabases", ContentType.Container);
- bag.AddCode ("aply", "dpap.databasecontainers", ContentType.Container);
- bag.AddCode ("abpl", "dpap.baseplaylist", ContentType.Char);
- bag.AddCode ("apso", "dpap.playlistsongs", ContentType.Container);
- bag.AddCode ("pasp", "dpap.aspectratio", ContentType.String);
- bag.AddCode ("adbs", "dpap.databasesongs", ContentType.Container);
- bag.AddCode ("picd", "dpap.creationdate", ContentType.Long);
- bag.AddCode ("pifs", "dpap.imagefilesize", ContentType.Long);
- bag.AddCode ("pwth", "dpap.imagepixelwidth", ContentType.Long);
- bag.AddCode ("phgt", "dpap.imagepixelheight", ContentType.Long);
- bag.AddCode ("pcmt", "dpap.imagecomments", ContentType.String);
- bag.AddCode ("prat", "dpap.imagerating", ContentType.Long);
- bag.AddCode ("pimf", "dpap.imagefilename", ContentType.String);
- bag.AddCode ("pfmt", "dpap.imageformat", ContentType.String);
- bag.AddCode ("plsz", "dpap.imagelargefilesize", ContentType.Long);
- bag.AddCode ("pfdt", "dpap.filedata", ContentType.FileData);
-
-
-
- ContentNode node = ContentParser.Parse (bag, buffer);
-
- foreach (ContentNode dictNode in (node.Value as ContentNode [])) {
- if (dictNode.Name != "dmap.dictionary") {
- continue;
- }
-
- ContentCode code = new ContentCode ();
-
- foreach (ContentNode item in (dictNode.Value as ContentNode [])) {
- switch (item.Name) {
- case "dmap.contentcodesnumber":
- code.Number = (int) item.Value;
- break;
- case "dmap.contentcodesname":
- code.Name = (string) item.Value;
- break;
- case "dmap.contentcodestype":
- code.Type = (ContentType) Enum.ToObject (typeof (ContentType), (short) item.Value);
- break;
- }
- }
-
- bag.codes [code.Number] = code;
- }
- return bag;
- }
- }
-}
diff --git a/lib/dpap-sharp/lib/ContentFetcher.cs b/lib/dpap-sharp/lib/ContentFetcher.cs
deleted file mode 100644
index 262218e..0000000
--- a/lib/dpap-sharp/lib/ContentFetcher.cs
+++ /dev/null
@@ -1,219 +0,0 @@
-// ContentFetcher.cs
-//
-// Authors:
-// Andrzej Wytyczak-Partyka <iapart at gmail.com>
-// James Willcox <snorp at snorp.net>
-//
-// Copyright (C) 2008 Andrzej Wytyczak-Partyka
-// Copyright (C) 2005 James Willcox <snorp at snorp.net>
-//
-// This program is free software; you can redistribute it and/or modify
-// it under the terms of the GNU General Public License as published by
-// the Free Software Foundation; either version 2 of the License, or
-// (at your option) any later version.
-//
-// This program is distributed in the hope that it will be useful,
-// but WITHOUT ANY WARRANTY; without even the implied warranty of
-// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-// GNU General Public License for more details.
-//
-// You should have received a copy of the GNU General Public License
-// along with this program; if not, write to the Free Software
-// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
-//
-//
-
-using System;
-using System.Collections;
-using System.Collections.Generic;
-using System.IO;
-using System.Web;
-using System.Text;
-using System.Net;
-using System.Runtime.InteropServices;
-using ICSharpCode.SharpZipLib.GZip;
-
-namespace DPAP {
-
- internal class ContentFetcher : IDisposable {
- private IPAddress address;
- private UInt16 port;
- private int session_id;
- private int request_id = 10;
-
- private DAAPCredentials creds = new DAAPCredentials ();
- private List<WebRequest> requests = new List<WebRequest> ();
-
- public string Username {
- get { return creds.Username; }
- set { creds.Username = value; }
- }
-
- public string Password {
- get { return creds.Password; }
- set { creds.Password = value; }
- }
-
- public int SessionId {
- get { return session_id; }
- set { session_id = value; }
- }
-
- public ContentFetcher (IPAddress address, UInt16 port) {
- this.address = address;
- this.port = port;
- }
-
- public void Dispose () {
- KillAll ();
- }
-
- public void KillAll () {
- lock (requests) {
- foreach (WebRequest request in requests) {
- request.Abort ();
- }
-
- requests.Clear ();
- }
- }
-
- public byte [] Fetch (string path) {
- return Fetch (path, null, null, 0);
- }
-
- public byte [] Fetch (string path, string query) {
- return Fetch (path, query, null, 0);
- }
-
- public byte [] Fetch (string path, string query, WebHeaderCollection extraHeaders,
- int request_id) {
-
- HttpWebResponse response = FetchResponse (path, -1, query, extraHeaders, request_id, false);
-
- MemoryStream data = new MemoryStream ();
- BinaryReader reader = new BinaryReader (GetResponseStream (response));
- try {
- if (response.ContentLength < 0)
- return null;
-
- byte [] buf;
- while (true) {
- buf = reader.ReadBytes (8192);
- if (buf.Length == 0)
- break;
-
- data.Write (buf, 0, buf.Length);
- //Console.Write (buf.);
- }
-
- data.Flush ();
- return data.GetBuffer ();
- } finally {
- data.Close ();
- reader.Close ();
- response.Close ();
- }
- }
-
- public HttpWebResponse FetchResponse (string path, string query, WebHeaderCollection headers) {
- return FetchResponse (path, -1, query, headers, ++request_id, false);
- }
-
- public HttpWebResponse FetchFile (string path, long offset) {
- return FetchResponse (path, offset, null, null, ++request_id, true);
- }
-
- public HttpWebResponse FetchResponse (string path, long offset, string query,
- WebHeaderCollection extraHeaders,
- int request_id, bool disableKeepalive) {
- UriBuilder builder = new UriBuilder ("http", address.ToString ());
- builder.Port = port;
- builder.Path = path;
-
- if (session_id != 0)
- query = String.Format ("session-id={0}&", session_id) + query;
-
- if (query != null)
- builder.Query += query;
-
- HttpWebRequest request = (HttpWebRequest) WebRequest.Create (builder.Uri);
- request.PreAuthenticate = true;
- request.Timeout = System.Threading.Timeout.Infinite;
- //request.Headers.Add ("Accept-Encoding", "gzip");
-
- if (offset > 0) {
- request.AddRange ("bytes", (int) offset);
- }
-
- request.ServicePoint.ConnectionLimit = 3;
-
- if (extraHeaders != null)
- request.Headers = extraHeaders;
-
- request.Accept = "*/*";
-
- request.KeepAlive = !disableKeepalive;
-
- string hash = Hasher.GenerateHash (3, builder.Uri.PathAndQuery, 2, request_id);
-
- request.UserAgent = "iPhoto/5.0.2 (Macintosh; PPC)";
- request.Headers.Set ("Client-DMAP-Version", "1.0");
- request.Headers.Set ("Client-DPAP-Version", "1.1");
- /*request.Headers.Set ("Client-DPAP-Validation", hash);
- request.Headers.Set ("Client-DPAP-Access-Index", "2");
- */
-// DEBUG data
- Console.Write (path + "?"+query);
- Console.Write (request.Headers);
-
- if (request_id >= 0)
- request.Headers.Set ("Client-DPAP-Request-ID", request_id.ToString ());
-
- request.Credentials = creds;
- request.PreAuthenticate = true;
-
- try {
- lock (requests) {
- requests.Add (request);
- }
- HttpWebResponse response = (HttpWebResponse) request.GetResponse ();
- //if (!response.StatusCode.Equals ("OK"))
- // Console.Write (response.StatusCode);
- return response;
- } finally {
- lock (requests) {
- requests.Remove (request);
- }
- }
- }
-
- public Stream GetResponseStream (HttpWebResponse response) {
- if (response.ContentEncoding == "gzip") {
- return new GZipInputStream (response.GetResponseStream ());
- } else {
- return response.GetResponseStream ();
- }
- }
-
- private class DAAPCredentials : ICredentials {
-
- private string username;
- private string password;
-
- public string Username {
- get { return username; }
- set { username = value; }
- }
-
- public string Password {
- get { return password; }
- set { password = value; }
- }
-
- public NetworkCredential GetCredential (Uri uri, string type) {
- return new NetworkCredential (username == null ? "none" : username, password);
- }
- }
- }
-}
diff --git a/lib/dpap-sharp/lib/ContentParser.cs b/lib/dpap-sharp/lib/ContentParser.cs
deleted file mode 100644
index 255ca5a..0000000
--- a/lib/dpap-sharp/lib/ContentParser.cs
+++ /dev/null
@@ -1,211 +0,0 @@
-// ContentParser.cs
-//
-// Authors:
-// Andrzej Wytyczak-Partyka <iapart at gmail.com>
-// James Willcox <snorp at snorp.net>
-//
-// Copyright (C) 2008 Andrzej Wytyczak-Partyka
-// Copyright (C) 2005 James Willcox <snorp at snorp.net>
-//
-// This program is free software; you can redistribute it and/or modify
-// it under the terms of the GNU General Public License as published by
-// the Free Software Foundation; either version 2 of the License, or
-// (at your option) any later version.
-//
-// This program is distributed in the hope that it will be useful,
-// but WITHOUT ANY WARRANTY; without even the implied warranty of
-// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-// GNU General Public License for more details.
-//
-// You should have received a copy of the GNU General Public License
-// along with this program; if not, write to the Free Software
-// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
-//
-//
-
-using System;
-using System.Text;
-using System.Net;
-using System.Collections;
-
-namespace DPAP {
-
- public class ContentException : ApplicationException {
-
- public ContentException (string msg) : base (msg) {
- }
- }
-
- internal class ContentNode {
- public string Name;
- public object Value;
-
- public ContentNode () {
- }
-
- public ContentNode (string name, params object [] values) {
- this.Name = name;
-
- ArrayList vals = new ArrayList ();
- foreach (object v in values) {
- if (v is ICollection) {
- vals.AddRange ( (ICollection) v);
- } else {
- vals.Add (v);
- }
- }
-
- if (vals.Count == 1 && vals [0].GetType () != typeof (ContentNode))
- this.Value = vals [0];
- else
- this.Value = (object) vals.ToArray (typeof (ContentNode));
- }
-
- public void Dump () {
- Dump (0);
- }
-
- private void Dump (int level) {
- Console.WriteLine ("{0}Name: {1}", String.Empty.PadRight (level * 4), Name);
-
- if (Value is ContentNode []) {
- foreach (ContentNode child in (Value as ContentNode [])) {
- child.Dump (level + 1);
- }
- } else {
- Console.WriteLine ("{0}Value ({1}): {2}", String.Empty.PadRight (level * 4),
- Value.GetType (), Value);
- Console.WriteLine ();
- }
- }
-
- public ContentNode GetChild (string name) {
- if (name == this.Name)
- return this;
-
- ContentNode [] children = Value as ContentNode [];
- if (children == null)
- return null;
-
- foreach (ContentNode child in children) {
- ContentNode needle = child.GetChild (name);
- if (needle != null)
- return needle;
- }
-
- return null;
- }
- }
-
- internal class ContentParser {
-
- private static ContentNode [] ParseChildren (ContentCodeBag bag, byte [] buffer,
- int offset, int length) {
- ArrayList children = new ArrayList ();
-
- int position = offset;
-
- while (position < offset + length) {
- children.Add (Parse (bag, buffer, null, ref position));
- }
-
- return (ContentNode []) children.ToArray (typeof (ContentNode));
- }
-
- public static ContentNode Parse (ContentCodeBag bag, byte [] buffer, string root,
- ref int offset) {
-
- ContentNode node = new ContentNode ();
- int num = IPAddress.NetworkToHostOrder (BitConverter.ToInt32 (buffer, offset));
- ContentCode code;
- // This is a fix for iPhoto '08 which gives wrong content-type for dpap.databasecontainers (aply)
- if (num == 1634757753) {
- code = new ContentCode ();
- code.Name = "dpap.databasecontainers";
- code.Type = ContentType.Container;
- }
- else
- code = bag.Lookup (num);
-
- if (code.Name.Equals ("dpap.filedata"))
- code.Type = ContentType.FileData;
-
- if (code.Equals (ContentCode.Zero)) {
- // probably a buggy server. fallback to our internal code bag
- Console.WriteLine ("fallback to internal code bag");
- Console.WriteLine ("Code number: "+num);
- throw new Exception ("Content code not found!");
- }
-
- int length = IPAddress.NetworkToHostOrder (BitConverter.ToInt32 (buffer, offset + 4));
-
- if (code.Equals (ContentCode.Zero)) {
- throw new ContentException (String.Format ("Failed to find content code for '{0}'. Data length is {1}",
- ContentCodeBag.GetStringFormat (num), length));
- }
-
- node.Name = code.Name;
-
- Console.WriteLine ("name = " + node.Name + "Code=" +code.Type.ToString () + " num=" +num);
-
- switch (code.Type) {
- case ContentType.Char:
- node.Value = (byte) buffer [offset + 8];
- break;
- case ContentType.Short:
- node.Value = IPAddress.NetworkToHostOrder (BitConverter.ToInt16 (buffer, offset + 8));
- break;
- case ContentType.SignedLong:
- case ContentType.Long:
- node.Value = IPAddress.NetworkToHostOrder (BitConverter.ToInt32 (buffer, offset + 8));
- break;
- case ContentType.LongLong:
- node.Value = IPAddress.NetworkToHostOrder (BitConverter.ToInt64 (buffer, offset + 8));
- break;
- case ContentType.String:
- node.Value = Encoding.UTF8.GetString (buffer, offset + 8, length);
- break;
- case ContentType.Date:
- node.Value = Utility.ToDateTime (IPAddress.NetworkToHostOrder (BitConverter.ToInt32 (buffer, offset + 8)));
- break;
- case ContentType.Version:
- int major = IPAddress.NetworkToHostOrder (BitConverter.ToInt16 (buffer, offset + 8));
- int minor = (int) buffer [offset + 10];
- int micro = (int) buffer [offset + 11];
-
- node.Value = new Version (major, minor, micro);
- break;
- case ContentType.Container:
- node.Value = ParseChildren (bag, buffer, offset + 8, length);
- break;
- case ContentType.FileData:
- node.Value = offset+8;
- break;
- default:
- throw new ContentException (String.Format ("Unknown content type '{0}' for '{1}'",
- code.Type, code.Name));
- }
-
- offset += length + 8;
-
- if (root != null) {
- ContentNode root_node = node.GetChild (root);
-
- if (root_node == null)
- throw new ContentException (String.Format ("Could not find root node '{0}'", root));
-
- return root_node;
- } else
- return node;
- }
-
- public static ContentNode Parse (ContentCodeBag bag, byte [] buffer, string root) {
- int offset = 0;
- return Parse (bag, buffer, root, ref offset);
- }
-
- public static ContentNode Parse (ContentCodeBag bag, byte [] buffer) {
- return Parse (bag, buffer, null);
- }
- }
-}
diff --git a/lib/dpap-sharp/lib/ContentWriter.cs b/lib/dpap-sharp/lib/ContentWriter.cs
deleted file mode 100644
index f1dab76..0000000
--- a/lib/dpap-sharp/lib/ContentWriter.cs
+++ /dev/null
@@ -1,149 +0,0 @@
-// ContentWriter.cs
-//
-// Authors:
-// Andrzej Wytyczak-Partyka <iapart at gmail.com>
-// James Willcox <snorp at snorp.net>
-//
-// Copyright (C) 2008 Andrzej Wytyczak-Partyka
-// Copyright (C) 2005 James Willcox <snorp at snorp.net>
-//
-// This program is free software; you can redistribute it and/or modify
-// it under the terms of the GNU General Public License as published by
-// the Free Software Foundation; either version 2 of the License, or
-// (at your option) any later version.
-//
-// This program is distributed in the hope that it will be useful,
-// but WITHOUT ANY WARRANTY; without even the implied warranty of
-// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-// GNU General Public License for more details.
-//
-// You should have received a copy of the GNU General Public License
-// along with this program; if not, write to the Free Software
-// Foundation, Inc., 51 Franklin Street,Fifth Floor, Boston, MA 02110-1301 USA
-//
-//
-
-using System;
-using System.Text;
-using System.Net;
-using System.IO;
-
-namespace DPAP {
-
- internal class ContentWriter {
-
-
- private static void Write (ContentCodeBag bag, ContentNode node, BinaryWriter writer) {
-
- ContentCode code = bag.Lookup (node.Name);
- if (code.Equals (ContentCode.Zero)) {
- throw new ContentException ("Failed to get content code for: " + node.Name);
- }
-
- writer.Write (IPAddress.HostToNetworkOrder (code.Number));
-
- switch (code.Type) {
- case ContentType.Char:
- writer.Write (IPAddress.HostToNetworkOrder (1));
- writer.Write ( (byte) node.Value);
- break;
- case ContentType.Short:
- writer.Write (IPAddress.HostToNetworkOrder (2));
- writer.Write (IPAddress.HostToNetworkOrder ( (short) node.Value));
- break;
- case ContentType.SignedLong:
- case ContentType.Long:
- writer.Write (IPAddress.HostToNetworkOrder (4));
- writer.Write (IPAddress.HostToNetworkOrder ( (int) node.Value));
- break;
- case ContentType.LongLong:
- writer.Write (IPAddress.HostToNetworkOrder (8));
- writer.Write (IPAddress.HostToNetworkOrder ( (long) node.Value));
- break;
- case ContentType.String:
- byte [] data = Encoding.UTF8.GetBytes ( (string) node.Value);
- writer.Write (IPAddress.HostToNetworkOrder (data.Length));
- writer.Write (data);
- break;
- case ContentType.Date:
- writer.Write (IPAddress.HostToNetworkOrder (4));
- writer.Write (IPAddress.HostToNetworkOrder (Utility.FromDateTime ( (DateTime) node.Value)));
- break;
- case ContentType.Version:
- Version version = (Version) node.Value;
- writer.Write (IPAddress.HostToNetworkOrder (4));
-
- writer.Write ( (short) IPAddress.HostToNetworkOrder ( (short) version.Major));
- writer.Write ( (byte) version.Minor);
- writer.Write ( (byte) version.Build);
- break;
- case ContentType.FileData:
- // after "pfdt" we should send the file size and then immediately the file's contents
- // DEBUG
- //Console.WriteLine ("ContentWriter FileData!");
- ContentNode [] nodes = (ContentNode []) node.Value;
-
- //Console.WriteLine (nodes [0].Value);
- writer.Write (IPAddress.HostToNetworkOrder ( (int)nodes [0].Value));
- FileInfo info = new FileInfo ( (string)nodes [1].Value);
- //Console.WriteLine ("reading file " + nodes [1].Value + ", length=" +info.Length);
-
-
- FileStream stream = info.Open (FileMode.Open, FileAccess.Read, FileShare.Read);
- int offset = -1;
- using (BinaryReader reader = new BinaryReader (stream)) {
- if (offset > 0) {
- reader.BaseStream.Seek (offset, SeekOrigin.Begin);
- }
-
- long count = 0;
- long len = info.Length;
- while (count < len) {
- byte [] buf = reader.ReadBytes (Math.Min (8192, (int) len - (int) count));
- if (buf.Length == 0) {
- break;
- }
-
- writer.Write (buf);
- count += buf.Length;
- }
- }
- break;
- case ContentType.Container:
- MemoryStream child_stream = new MemoryStream ();
- BinaryWriter child_writer = new BinaryWriter (child_stream);
-
- foreach (ContentNode child in (ContentNode []) node.Value) {
- Write (bag, child, child_writer);
- }
-
- child_writer.Flush ();
- byte [] bytes = child_stream.GetBuffer ();
- int len = (int) child_stream.Length;
-
- writer.Write (IPAddress.HostToNetworkOrder (len));
- writer.Write (bytes, 0, len);
- child_writer.Close ();
- break;
- default:
- Console.Error.WriteLine ("Cannot write node of type: " + code.Type);
- break;
- }
- }
-
- public static byte [] Write (ContentCodeBag bag, ContentNode node) {
- MemoryStream stream = new MemoryStream ();
- BinaryWriter writer = new BinaryWriter (stream);
- Write (bag, node, writer);
- writer.Flush ();
-
- byte [] buf = stream.GetBuffer ();
- long len = stream.Length;
- writer.Close ();
-
- byte [] ret = new byte [len];
- Array.Copy (buf, ret, len);
- return ret;
- }
- }
-}
diff --git a/lib/dpap-sharp/lib/Database.cs b/lib/dpap-sharp/lib/Database.cs
deleted file mode 100644
index a7e1860..0000000
--- a/lib/dpap-sharp/lib/Database.cs
+++ /dev/null
@@ -1,573 +0,0 @@
-// Database.cs
-//
-// Authors:
-// Andrzej Wytyczak-Partyka <iapart at gmail.com>
-// James Willcox <snorp at snorp.net>
-//
-// Copyright (C) 2008 Andrzej Wytyczak-Partyka
-// Copyright (C) 2005 James Willcox <snorp at snorp.net>
-//
-// This program is free software; you can redistribute it and/or modify
-// it under the terms of the GNU General Public License as published by
-// the Free Software Foundation; either version 2 of the License, or
-// (at your option) any later version.
-//
-// This program is distributed in the hope that it will be useful,
-// but WITHOUT ANY WARRANTY; without even the implied warranty of
-// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-// GNU General Public License for more details.
-//
-// You should have received a copy of the GNU General Public License
-// along with this program; if not, write to the Free Software
-// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
-//
-//
-
-using System;
-using System.Net;
-using System.IO;
-using System.Collections;
-using System.Collections.Generic;
-using System.Collections.ObjectModel;
-using System.Threading;
-
-namespace DPAP {
-
- public delegate void PhotoHandler (object o, PhotoArgs args);
-
- public class PhotoArgs : EventArgs {
- private Photo photo;
-
- public Photo Photo {
- get { return photo; }
- }
-
- public PhotoArgs (Photo photo) {
- this.photo = photo;
- }
- }
-
- public delegate void AlbumHandler (object o, AlbumArgs args);
-
- public class AlbumArgs : EventArgs {
- private Album pl;
-
- public Album Album {
- get { return pl; }
- }
-
- public AlbumArgs (Album pl) {
- this.pl = pl;
- }
- }
-
- public class Database : ICloneable {
-
- private const int chunk_length = 8192;
-
- private const string photo_query = "meta=dpap.aspectratio,dmap.itemid,dmap.itemname,dpap.imagefilename," +
- "dpap.imagefilesize,dpap.creationdate,dpap.imagepixelwidth," +
- "dpap.imagepixelheight,dpap.imageformat,dpap.imagerating," +
- "dpap.imagecomments,dpap.imagelargefilesize,dpap.filedata&type=photo";
-
-
- private static int nextid = 1;
- private Client client;
- private int id;
- private long persistent_id;
- private string name;
-
- private List<Photo> photos = new List<Photo> ();
- private List<Album> albums = new List<Album> ();
- private Album base_album = new Album ();
- private int next_photo_id = 1;
-
- public event PhotoHandler PhotoAdded;
- public event PhotoHandler PhotoRemoved;
- public event AlbumHandler AlbumAdded;
- public event AlbumHandler AlbumRemoved;
-
- public int Id {
- get { return id; }
- }
-
- public string Name {
- get { return name; }
- set {
- name = value;
- base_album.Name = value;
- }
- }
-
- public IList<Photo> Photos {
- get {
- return new ReadOnlyCollection<Photo> (photos);
- }
- }
-
- public int PhotoCount {
- get { return photos.Count; }
- }
-
- public Photo PhotoAt (int index)
- {
- return photos [index] as Photo;
- }
-
- public IList<Album> Albums {
- get {
- return new ReadOnlyCollection<Album> (albums);
- }
- }
-
- internal Client Client {
- get { return client; }
- }
-
- private Database () {
- this.id = nextid++;
- }
-
- public Database (string name) : this () {
- this.Name = name;
- }
-
- internal Database (Client client, ContentNode dbNode) : this () {
- this.client = client;
-
- Parse (dbNode);
- }
-
- private void Parse (ContentNode dbNode) {
- foreach (ContentNode item in (ContentNode []) dbNode.Value) {
-
- switch (item.Name) {
- case "dmap.itemid":
- id = (int) item.Value;
- break;
- case "dmap.persistentid":
- persistent_id = (long) item.Value;
- break;
- case "dmap.itemname":
- name = (string) item.Value;
- break;
- default:
- break;
- }
- }
- }
-
- public Photo LookupPhotoById (int id) {
- foreach (Photo photo in photos) {
- if (photo.Id == id)
- return photo;
- }
-
- return null;
- }
-
- public Album LookupAlbumById (int id) {
- if (id == base_album.Id)
- return base_album;
-
- foreach (Album pl in albums) {
- if (pl.Id == id)
- return pl;
- }
-
- return null;
- }
-
- internal ContentNode ToPhotosNode (string [] fields, int [] deleted_ids) {
-
- ArrayList photo_nodes = new ArrayList ();
- foreach (Photo photo in photos) {
- photo_nodes.Add (photo.ToNode (fields));
- }
-
- ArrayList deleted_nodes = null;
-
- if (deleted_ids.Length > 0) {
- deleted_nodes = new ArrayList ();
-
- foreach (int id in deleted_ids) {
- deleted_nodes.Add (new ContentNode ("dmap.itemid", id));
- }
- }
-
- ArrayList children = new ArrayList ();
- children.Add (new ContentNode ("dmap.status", 200));
- children.Add (new ContentNode ("dmap.updatetype", deleted_nodes == null ? (byte) 0 : (byte) 1));
- children.Add (new ContentNode ("dmap.specifiedtotalcount", photos.Count));
- children.Add (new ContentNode ("dmap.returnedcount", photos.Count));
- children.Add (new ContentNode ("dmap.listing", photo_nodes));
-
- if (deleted_nodes != null) {
- children.Add (new ContentNode ("dmap.deletedidlisting", deleted_nodes));
- }
-
- return new ContentNode ("dpap.databasesongs", children);
- }
-
- internal ContentNode ToAlbumsNode () {
- ArrayList nodes = new ArrayList ();
-
- nodes.Add (base_album.ToNode (true));
-
- foreach (Album pl in albums) {
- nodes.Add (pl.ToNode (false));
- }
-
- return new ContentNode ("dpap.databasecontainers",
- new ContentNode ("dmap.status", 200),
- new ContentNode ("dmap.updatetype", (byte) 0),
- new ContentNode ("dmap.specifiedtotalcount", nodes.Count),
- new ContentNode ("dmap.returnedcount", nodes.Count),
- new ContentNode ("dmap.listing", nodes));
- }
-
- internal ContentNode ToDatabaseNode () {
- return new ContentNode ("dmap.listingitem",
- new ContentNode ("dmap.itemid", id),
- new ContentNode ("dmap.persistentid", (long) id),
- new ContentNode ("dmap.itemname", name),
- new ContentNode ("dmap.itemcount", photos.Count),
- new ContentNode ("dmap.containercount", albums.Count + 1));
- }
-
- public void Clear () {
- if (client != null)
- throw new InvalidOperationException ("cannot clear client databases");
-
- ClearAlbums ();
- ClearPhotos ();
- }
-
- private void ClearAlbums () {
- foreach (Album pl in new List<Album> (albums)) {
- RemoveAlbum (pl);
- }
- }
-
- private void ClearPhotos () {
- foreach (Photo photo in new List<Photo> (photos)) {
- RemovePhoto (photo);
- }
- }
-
- private bool IsUpdateResponse (ContentNode node) {
- return node.Name == "dmap.updateresponse";
- }
-
- private void RefreshAlbums (string revquery) {
- byte [] albums_data;
-
- try {
- albums_data = client.Fetcher.Fetch (String.Format ("/databases/{0}/containers", id), "meta=dpap.aspectratio,dmap.itemid,dmap.itemname,dpap.imagefilename,dpap.imagefilesize,dpap.creationdate,dpap.imagepixelwidth,dpap.imagepixelheight,dpap.imageformat,dpap.imagerating,dpap.imagecomments,dpap.imagelargefilesize&type=photo");
- } catch (WebException) {
- return;
- }
-
- ContentNode albums_node = ContentParser.Parse (client.Bag, albums_data);
- // DEBUG data
- albums_node.Dump ();
- Console.WriteLine ("after dump!");
-
- if (IsUpdateResponse (albums_node))
- return;
-
- // handle album additions/changes
- ArrayList plids = new ArrayList ();
- if (albums_node.GetChild ("dmap.listing")==null) return;
-
- foreach (ContentNode albumNode in (ContentNode []) albums_node.GetChild ("dmap.listing").Value) {
-
- // DEBUG
- Console.WriteLine ("foreach loop");
- Album pl = Album.FromNode (albumNode);
- if (pl != null) {
- plids.Add (pl.Id);
- Album existing = LookupAlbumById (pl.Id);
-
- if (existing == null) {
- AddAlbum (pl);
- } else {
- existing.Update (pl);
- }
- }
- }
- // DEBUG
- Console.WriteLine ("delete albums that don't exist");
- // delete albums that no longer exist
- foreach (Album pl in new List<Album> (albums)) {
- if (!plids.Contains (pl.Id)) {
- RemoveAlbum (pl);
- }
- }
-
- plids = null;
- // DEBUG
- Console.WriteLine ("Add/remove photos in the albums");
- // add/remove photos in the albums
- foreach (Album pl in albums) {
- byte [] album_photos_data = client.Fetcher.Fetch (String.Format ("/databases/{0}/containers/{1}/items",
- id, pl.Id), "meta=dpap.aspectratio,dmap.itemid,dmap.itemname,dpap.imagefilename,dpap.imagefilesize,dpap.creationdate,dpap.imagepixelwidth,dpap.imagepixelheight,dpap.imageformat,dpap.imagerating,dpap.imagecomments,dpap.imagelargefilesize&type=photo");
- ContentNode album_photos_node = ContentParser.Parse (client.Bag, album_photos_data);
-
- if (IsUpdateResponse (album_photos_node))
- return;
-
- if ( (byte) album_photos_node.GetChild ("dmap.updatetype").Value == 1) {
-
- // handle album photo deletions
- ContentNode delete_list = album_photos_node.GetChild ("dmap.deletedidlisting");
-
- if (delete_list != null) {
- foreach (ContentNode deleted in (ContentNode []) delete_list.Value) {
- int index = pl.LookupIndexByContainerId ( (int) deleted.Value);
-
- if (index < 0)
- continue;
-
- pl.RemoveAt (index);
- }
- }
- }
-
- // add new photos, or reorder existing ones
-
- int plindex = 0;
- foreach (ContentNode pl_photo_node in (ContentNode []) album_photos_node.GetChild ("dmap.listing").Value) {
- Photo plphoto = null;
- int container_id = 0;
- Photo.FromAlbumNode (this, pl_photo_node, out plphoto, out container_id);
-
- if (pl [plindex] != null && pl.GetContainerId (plindex) != container_id) {
- pl.RemoveAt (plindex);
- pl.InsertPhoto (plindex, plphoto, container_id);
- } else if (pl [plindex] == null) {
- pl.InsertPhoto (plindex, plphoto, container_id);
- }
-
- plindex++;
- }
- }
- }
-
- private void RefreshPhotos (string revquery) {
- foreach (Album pl in albums){
- //Console.WriteLine ("Refreshing photos in album " + pl.Name);
- byte [] photos_data = client.Fetcher.Fetch (String.Format ("/databases/{0}/containers/{1}/items", id,pl.getId ()),
- photo_query);
- ContentNode photos_node = ContentParser.Parse (client.Bag, photos_data);
- //photos_node.Dump ();
- //if (IsUpdateResponse (photos_node))
- // return;
-
- // handle photo additions/changes
- foreach (ContentNode photoNode in (ContentNode []) photos_node.GetChild ("dmap.listing").Value) {
- // DEBUG data
- //photoNode.Dump ();
- Photo photo = Photo.FromNode (photoNode);
-
- Photo existing = LookupPhotoById (photo.Id);
- pl.AddPhoto (photo);
- if (existing == null){
- Console.WriteLine ("adding " + photo.Title + " to album " +pl.Name);
-
- AddPhoto (photo);
- }
- else
- {
- Console.WriteLine ("updating " + existing.Title);
- existing.Update (photo);
- }
- }
-
- if ( (byte) photos_node.GetChild ("dmap.updatetype").Value == 1) {
-
- // handle photo deletions
- ContentNode delete_list = photos_node.GetChild ("dmap.deletedidlisting");
-
- if (delete_list != null) {
- foreach (ContentNode deleted in (ContentNode []) delete_list.Value) {
- Photo photo = LookupPhotoById ( (int) deleted.Value);
-
- if (photo != null)
- RemovePhoto (photo);
- }
- }
- }
- }
- }
-
- internal void Refresh (int newrev) {
- if (client == null)
- throw new InvalidOperationException ("cannot refresh server databases");
-
- string revquery = null;
-
- if (client.Revision != 0)
- revquery = String.Format ("revision-number={0}&delta={1}", newrev, newrev - client.Revision);
-
- RefreshAlbums ("");
- RefreshPhotos ("");
- }
-
- private HttpWebResponse FetchPhoto (Photo photo, long offset) {
- return client.Fetcher.FetchResponse (String.Format ("/databases/{0}/items",id), offset,
- String.Format ("meta=dpap.filedata&query=('dmap.itemid:{0}')",photo.Id),
- null, 1, true);
-
- }
-
- public Stream StreamPhoto (Photo photo, out long length) {
- return StreamPhoto (photo, -1, out length);
- }
-
- public Stream StreamPhoto (Photo photo, long offset, out long length) {
- HttpWebResponse response = FetchPhoto (photo, offset);
- length = response.ContentLength;
- return response.GetResponseStream ();
- }
-
- public void DownloadPhoto (Photo photo, string dest) {
-
-/* BinaryWriter writer = new BinaryWriter (File.Open (dest, FileMode.Create));
- MemoryStream data = new MemoryStream ();
- try {
- long len;
- using (BinaryReader reader = new BinaryReader (StreamPhoto (photo, out len))) {
- int count = 0;
- byte [] buf = new byte [chunk_length];
-
- // Skip the header
- //count = reader.Read (buf,0,89);
-
- //if (count < 89)
- // count+=reader.Read (buf,0,89-count);
-
- while (true) {
- buf = reader.ReadBytes (8192);
- if (buf.Length == 0)
- break;
-
- data.Write (buf, 0, buf.Length);
- //Console.Write (buf.);
- }
-
- */
-/* do {
- count = reader.Read (buf, 0, chunk_length);
- writer.Write (buf, 0, count);
- data.Write (buf, 0, count);
- } while (count != 0);
- */
- /*data.Flush ();
-
- ContentNode node = ContentParser.Parse (client.Bag, data.GetBuffer ());
- node.Dump ();
- reader.Close ();
-
- }
- } finally {
- data.Close ();
-
- writer.Close ();
- }*/
- // maybe use FetchResponse to get a stream and feed it to pixbuf?
- byte [] photos_data = client.Fetcher.Fetch (String.Format ("/databases/{0}/items",id),
- String.Format ("meta=dpap.thumb,dpap.filedata&query=('dmap.itemid:{0}')",photo.Id));
- ContentNode node = ContentParser.Parse (client.Bag, photos_data);
-
- // DEBUG
- Console.WriteLine ("About to dump the photo!");
- node.Dump ();
- ContentNode filedata_node = node.GetChild ("dpap.filedata");
- Console.WriteLine ("Photo starts at index " + filedata_node.Value);
- BinaryWriter writer = new BinaryWriter (File.Open (dest, FileMode.Create));
-
- int count = 0;
- int off = System.Int32.Parse (filedata_node.Value.ToString ());
- byte [] photo_buf;
- MemoryStream data = new MemoryStream ();
- writer.Write (photos_data, (int)off, (int)photos_data.Length-off);
- data.Position = 0;
- // Gdk.Pixbuf pb = new Gdk.Pixbuf (data);
- data.Close ();
- Console.Write ("Written " + count + " out of " + (photos_data.Length-off));
- }
-
- public void AddPhoto (Photo photo) {
- if (photo.Id == 0)
- photo.SetId (next_photo_id++);
-
- photos.Add (photo);
- base_album.AddPhoto (photo);
-
- if (PhotoAdded != null)
- PhotoAdded (this, new PhotoArgs (photo));
- }
-
- public void RemovePhoto (Photo photo) {
- photos.Remove (photo);
- base_album.RemovePhoto (photo);
-
- foreach (Album pl in albums) {
- pl.RemovePhoto (photo);
- }
-
- if (PhotoRemoved != null)
- PhotoRemoved (this, new PhotoArgs (photo));
- }
-
- public void AddAlbum (Album pl) {
- // DEBUG
- Console.WriteLine ("Adding album " + pl.Name);
- albums.Add (pl);
- if (AlbumAdded != null)
- AlbumAdded (this, new AlbumArgs (pl));
- }
-
- public void RemoveAlbum (Album pl) {
- albums.Remove (pl);
-
- if (AlbumRemoved != null)
- AlbumRemoved (this, new AlbumArgs (pl));
- }
-
- private Album CloneAlbum (Database db, Album pl) {
- Album clone_pl = new Album (pl.Name);
- clone_pl.Id = pl.Id;
-
- IList<Photo> plphotos = pl.Photos;
- for (int i = 0; i < plphotos.Count; i++) {
- clone_pl.AddPhoto (db.LookupPhotoById (plphotos [i].Id), pl.GetContainerId (i));
- }
-
- return clone_pl;
- }
-
- public object Clone () {
- Database db = new Database (this.name);
- db.id = id;
- db.persistent_id = persistent_id;
-
- List<Photo> clone_photos = new List<Photo> ();
- foreach (Photo photo in photos) {
- clone_photos.Add ( (Photo) photo.Clone ());
- }
-
- db.photos = clone_photos;
-
- List<Album> clone_albums = new List<Album> ();
- foreach (Album pl in albums) {
- clone_albums.Add (CloneAlbum (db, pl));
- }
-
- db.albums = clone_albums;
- db.base_album = CloneAlbum (db, base_album);
- return db;
- }
- }
-}
diff --git a/lib/dpap-sharp/lib/Discovery.cs b/lib/dpap-sharp/lib/Discovery.cs
deleted file mode 100644
index 35ecb7e..0000000
--- a/lib/dpap-sharp/lib/Discovery.cs
+++ /dev/null
@@ -1,177 +0,0 @@
-// Discovery.cs
-//
-// Authors:
-// Andrzej Wytyczak-Partyka <iapart at gmail.com>
-// James Willcox <snorp at snorp.net>
-//
-// Copyright (C) 2008 Andrzej Wytyczak-Partyka
-// Copyright (C) 2005 James Willcox <snorp at snorp.net>
-//
-// This program is free software; you can redistribute it and/or modify
-// it under the terms of the GNU General Public License as published by
-// the Free Software Foundation; either version 2 of the License, or
-// (at your option) any later version.
-//
-// This program is distributed in the hope that it will be useful,
-// but WITHOUT ANY WARRANTY; without even the implied warranty of
-// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-// GNU General Public License for more details.
-//
-// You should have received a copy of the GNU General Public License
-// along with this program; if not, write to the Free Software
-// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
-//
-//
-
-using System;
-using System.Net;
-using System.Text;
-using System.Collections;
-using Mono.Zeroconf;
-
-namespace DPAP {
-
- public delegate void ServiceHandler (object o, ServiceArgs args);
-
- public class ServiceArgs : EventArgs {
-
- private Service service;
-
- public Service Service {
- get { return service; }
- }
-
- public ServiceArgs (Service service) {
- this.service = service;
- }
- }
-
-
- public class Service {
- private IPAddress address;
- private ushort port;
- private string name;
- private bool isprotected;
- private string machine_id;
-
- public IPAddress Address {
- get { return address; }
- }
-
- public ushort Port {
- get { return port; }
- }
-
- public string Name {
- get { return name; }
- }
-
- public bool IsProtected {
- get { return isprotected; }
- }
-
- public string MachineId {
- get { return machine_id; }
- }
-
- public Service (IPAddress address, ushort port, string name, bool isprotected, string machine_id) {
- this.address = address;
- this.port = port;
- this.name = name;
- this.isprotected = isprotected;
- this.machine_id = machine_id;
- }
-
- public override string ToString ()
- {
- return String.Format ("{0}:{1} ({2})", Address, Port, Name);
- }
- }
-
- public class ServiceDiscovery{
-
- private ServiceBrowser browser;
- private Hashtable services = new Hashtable ();
-
- public event ServiceHandler Found;
- public event ServiceHandler Removed;
-
- public IEnumerable Services {
- get { return services; }
- }
-
- //
- // Configure the code that will be called back when the information
- // becomes available
- //
-
- public void Start () {
- browser = new ServiceBrowser ();
-
- browser.ServiceAdded += OnServiceAdded;
- browser.ServiceRemoved += OnServiceRemoved;
-
- browser.Browse ("_dpap._tcp","local");
- }
-
- public void Stop () {
- browser.Dispose ();
- browser = null;
- services.Clear ();
- }
-
- private void OnServiceAdded (object o, ServiceBrowseEventArgs args){
- Console.WriteLine ("Found Service: {0}", args.Service.Name);
- args.Service.Resolved += OnServiceResolved;
- args.Service.Resolve ();
- }
-
- public Service ServiceByName (string svcName)
- {
- return (Service)services [svcName];
- }
-
- private void OnServiceResolved (object o, ServiceResolvedEventArgs args){
-
- IResolvableService s = (IResolvableService)args.Service;
-
- string name = s.Name;
- string machine_id = null;
- bool pwRequired = false;
-
- Console.WriteLine ("Resolved Service: {0} - {1}:{2} ({3} TXT record entries)",
- s.FullName, s.HostEntry.AddressList [0], s.Port, s.TxtRecord.Count);
-
- if (name.EndsWith ("_PW")) {
- name = name.Substring (0, name.Length - 3);
- pwRequired = true;
- }
-
- foreach (TxtRecordItem item in s.TxtRecord) {
- if (item.Key.ToLower () == "password") {
- pwRequired = item.ValueString.ToLower () == "true";
- } else if (item.Key.ToLower () == "machine name") {
- name = item.ValueString;
- } else if (item.Key.ToLower () == "machine id") {
- machine_id = item.ValueString;
- }
- }
-
- DPAP.Service svc = new DPAP.Service (s.HostEntry.AddressList [0], (ushort)s.Port,
- name, pwRequired, machine_id);
-
- services [svc.Name] = svc;
-
- if (Found != null)
- Found (this, new ServiceArgs (svc));
- }
-
- private void OnServiceRemoved (object o, ServiceBrowseEventArgs args){
-
- IResolvableService s = args.Service;
-
- Removed (this, new ServiceArgs (new DPAP.Service (null, 0, s.Name, false, null)));
-
- }
- }
-}
\ No newline at end of file
diff --git a/lib/dpap-sharp/lib/Hasher.cs b/lib/dpap-sharp/lib/Hasher.cs
deleted file mode 100644
index 16a9bb9..0000000
--- a/lib/dpap-sharp/lib/Hasher.cs
+++ /dev/null
@@ -1,222 +0,0 @@
-// Hasher.cs
-//
-// Author:
-// James Willcox <snorp at snorp.net>
-//
-// Copyright (C) 2005 James Willcox <snorp at snorp.net>
-//
-// This library is free software; you can redistribute it and/or
-// modify it under the terms of the GNU Lesser General Public
-// License as published by the Free Software Foundation; either
-// version 2.1 of the License, or (at your option) any later version.
-//
-// This library is distributed in the hope that it will be useful,
-// but WITHOUT ANY WARRANTY; without even the implied warranty of
-// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-// Lesser General Public License for more details.
-//
-// You should have received a copy of the GNU Lesser General Public
-// License along with this library; if not, write to the Free Software
-// Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
-//
-// Copyright (C) 2004 David Hammerton <david at crazney.net>
-// Copyright (C) 2005 Jon Lech Johansen <jon at nanocrew.net>
-//
-// Permission is hereby granted, free of charge, to any person
-// obtaining a copy of this software and associated documentation
-// files (the "Software"), to deal in the Software without
-// restriction, including without limitation the rights to use,
-// copy, modify, merge, publish, distribute, sublicense, and/or
-// sell copies of the Software, and to permit persons to whom the
-// Software is furnished to do so, subject to the following conditions:
-//
-// The above copyright notice and this permission notice shall be
-// included in all copies or substantial portions of the Software.
-//
-// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
-// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES
-// OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
-// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
-// HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
-// WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
-// FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
-// OTHER DEALINGS IN THE SOFTWARE.
-//
-
-using System;
-using System.Text;
-
-namespace DPAP {
-
- internal class Hasher
- {
- private static byte [] _hasht42 = null;
- private static byte [] _hasht45 = null;
-
- private static byte [] _hexchars =
- Encoding.ASCII.GetBytes ( "0123456789ABCDEF" );
- private static byte [] _copyright = Convert.FromBase64String (
- "Q29weXJpZ2h0IDIwMDMgQXBwbGUgQ29tcHV0ZXIsIEluYy4=" );
-
- private static void HashToString ( byte [] hash, byte [] str, int offset )
- {
- for ( int i = 0; i < hash.Length; i++ )
- {
- byte tmp = hash [ i ];
- str [ i * 2 + 1 + offset ] = _hexchars [ tmp & 0xF ];
- str [ i * 2 + 0 + offset ] = _hexchars [ (tmp >> 4) & 0xF ];
- }
- }
-
- private static void TransformString ( BrokenMD5 md5, string str, bool final )
- {
- byte [] tmp = Encoding.ASCII.GetBytes ( str );
-
- if ( final )
- md5.TransformFinalBlock ( tmp, 0, tmp.Length );
- else
- md5.TransformBlock ( tmp, 0, tmp.Length, tmp, 0 );
- }
-
- private static void GenerateTable42 ()
- {
- int i;
-
- _hasht42 = new byte [ 256 * 32 ];
-
- for ( i = 0; i < 256; i++ )
- {
- BrokenMD5 md5 = new BrokenMD5 ( 0 );
-
- if ( ( i & 0x80 ) != 0 )
- TransformString ( md5, "Accept-Language", false );
- else
- TransformString ( md5, "user-agent", false );
-
- if ( ( i & 0x40 ) != 0 )
- TransformString ( md5, "max-age", false );
- else
- TransformString ( md5, "Authorization", false );
-
- if ( ( i & 0x20 ) != 0 )
- TransformString ( md5, "Client-DAAP-Version", false );
- else
- TransformString ( md5, "Accept-Encoding", false );
-
- if ( ( i & 0x10 ) != 0 )
- TransformString ( md5, "daap.protocolversion", false );
- else
- TransformString ( md5, "daap.songartist", false );
-
- if ( ( i & 0x08 ) != 0 )
- TransformString ( md5, "daap.songcomposer", false );
- else
- TransformString ( md5, "daap.songdatemodified", false );
-
- if ( ( i & 0x04 ) != 0 )
- TransformString ( md5, "daap.songdiscnumber", false );
- else
- TransformString ( md5, "daap.songdisabled", false );
-
- if ( ( i & 0x02 ) != 0 )
- TransformString ( md5, "playlist-item-spec", false );
- else
- TransformString ( md5, "revision-number", false );
-
- if ( ( i & 0x01 ) != 0 )
- TransformString ( md5, "session-id", true );
- else
- TransformString ( md5, "content-codes", true );
-
- HashToString ( md5.Hash, _hasht42, i * 32 );
- }
- }
-
- private static void GenerateTable45 ()
- {
- int i;
-
- _hasht45 = new byte [ 256 * 32 ];
-
- for ( i = 0; i < 256; i++ )
- {
- BrokenMD5 md5 = new BrokenMD5 ( 1 );
-
- if ( ( i & 0x40 ) != 0 )
- TransformString ( md5, "eqwsdxcqwesdc", false );
- else
- TransformString ( md5, "op [;lm,piojkmn", false );
-
- if ( ( i & 0x20 ) != 0 )
- TransformString ( md5, "876trfvb 34rtgbvc", false );
- else
- TransformString ( md5, "=-0ol.,m3ewrdfv", false );
-
- if ( ( i & 0x10 ) != 0 )
- TransformString ( md5, "87654323e4rgbv ", false );
- else
- TransformString ( md5, "1535753690868867974342659792", false );
-
- if ( ( i & 0x08 ) != 0 )
- TransformString ( md5, "Song Name", false );
- else
- TransformString ( md5, "DAAP-CLIENT-ID:", false );
-
- if ( ( i & 0x04 ) != 0 )
- TransformString ( md5, "111222333444555", false );
- else
- TransformString ( md5, "4089961010", false );
-
- if ( ( i & 0x02 ) != 0 )
- TransformString ( md5, "playlist-item-spec", false );
- else
- TransformString ( md5, "revision-number", false );
-
- if ( ( i & 0x01 ) != 0 )
- TransformString ( md5, "session-id", false );
- else
- TransformString ( md5, "content-codes", false );
-
- if ( ( i & 0x80 ) != 0 )
- TransformString ( md5, "IUYHGFDCXWEDFGHN", true );
- else
- TransformString ( md5, "iuytgfdxwerfghjm", true );
-
- HashToString ( md5.Hash, _hasht45, i * 32 );
- }
- }
-
- public static string GenerateHash (int version_major, string url,
- int hash_select, int request_id )
- {
- if ( _hasht42 == null )
- GenerateTable42 ();
- if ( _hasht45 == null )
- GenerateTable45 ();
-
- byte [] hashtable = (version_major == 3) ? _hasht45 : _hasht42;
- BrokenMD5 md5 = new BrokenMD5 ( (version_major == 3) ? 1 : 0 );
- byte [] hash = new byte [ 32 ];
-
- byte [] tmp = Encoding.ASCII.GetBytes ( url );
- md5.TransformBlock ( tmp, 0, tmp.Length, tmp, 0 );
- md5.TransformBlock ( _copyright, 0, _copyright.Length, _copyright, 0 );
-
- if ( request_id > 0 && version_major == 3 )
- {
- md5.TransformBlock ( hashtable, hash_select * 32, 32,
- hashtable, hash_select * 32 );
- tmp = Encoding.ASCII.GetBytes ( request_id.ToString () );
- md5.TransformFinalBlock ( tmp, 0, tmp.Length );
- }
- else
- {
- md5.TransformFinalBlock ( hashtable, hash_select * 32, 32 );
- }
-
- HashToString ( md5.Hash, hash, 0 );
-
- return Encoding.ASCII.GetString ( hash );
- }
- }
-}
diff --git a/lib/dpap-sharp/lib/LoginException.cs b/lib/dpap-sharp/lib/LoginException.cs
deleted file mode 100644
index 13c2b0f..0000000
--- a/lib/dpap-sharp/lib/LoginException.cs
+++ /dev/null
@@ -1,34 +0,0 @@
-// LoginException.cs
-//
-// Author:
-// James Willcox <snorp at snorp.net>
-//
-// Copyright (C) 2005 James Willcox <snorp at snorp.net>
-//
-// This program is free software; you can redistribute it and/or modify
-// it under the terms of the GNU General Public License as published by
-// the Free Software Foundation; either version 2 of the License, or
-// (at your option) any later version.
-//
-// This program is distributed in the hope that it will be useful,
-// but WITHOUT ANY WARRANTY; without even the implied warranty of
-// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-// GNU General Public License for more details.
-//
-// You should have received a copy of the GNU General Public License
-// along with this program; if not, write to the Free Software
-// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
-//
-//
-
-
-using System;
-
-namespace DPAP {
-
- public class LoginException : ApplicationException {
-
- public LoginException (string msg, Exception e) : base (msg, e) {
- }
- }
-}
diff --git a/lib/dpap-sharp/lib/Makefile.am b/lib/dpap-sharp/lib/Makefile.am
deleted file mode 100644
index 3bd3120..0000000
--- a/lib/dpap-sharp/lib/Makefile.am
+++ /dev/null
@@ -1,50 +0,0 @@
-include $(top_srcdir)/Makefile.include
-
-ASSEMBLY_NAME = dpap-sharp
-
-ASSEMBLY_SOURCES = \
- $(srcdir)/AssemblyInfo.cs \
- $(srcdir)/Album.cs \
- $(srcdir)/AuthenticationException.cs \
- $(srcdir)/BrokenMD5.cs \
- $(srcdir)/Client.cs \
- $(srcdir)/ContentCodeBag.cs \
- $(srcdir)/ContentFetcher.cs \
- $(srcdir)/ContentParser.cs \
- $(srcdir)/ContentWriter.cs \
- $(srcdir)/Database.cs \
- $(srcdir)/Discovery.cs \
- $(srcdir)/Hasher.cs \
- $(srcdir)/LoginException.cs \
- $(srcdir)/Photo.cs \
- $(srcdir)/Server.cs \
- $(srcdir)/ServerInfo.cs \
- $(srcdir)/User.cs \
- $(srcdir)/Utility.cs
-
-REFS = \
- -r:ICSharpCode.SharpZipLib \
- -resource:content-codes
-
-PKGS = \
- -pkg:mono-zeroconf
-
-ASSEMBLY = $(ASSEMBLY_NAME).dll
-
-all: $(ASSEMBLY)
-
-$(ASSEMBLY): $(ASSEMBLY_SOURCES)
- $(CSC_LIB) -out:$@ $(PKGS) $(REFS) $(ASSEMBLY_SOURCES)
-
-assemblydir = $(pkglibdir)
-assembly_DATA = \
- $(ASSEMBLY)
-
-EXTRA_DIST = \
- $(ASSEMBLY_SOURCES)
-
-CLEANFILES = \
- $(ASSEMBLY) \
- $(ASSEMBLY).mdb
-
-
diff --git a/lib/dpap-sharp/lib/Makefile.in b/lib/dpap-sharp/lib/Makefile.in
deleted file mode 100644
index 5a23266..0000000
--- a/lib/dpap-sharp/lib/Makefile.in
+++ /dev/null
@@ -1,567 +0,0 @@
-# Makefile.in generated by automake 1.11.1 from Makefile.am.
-# @configure_input@
-
-# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
-# 2003, 2004, 2005, 2006, 2007, 2008, 2009 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.
-
-# This program is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
-# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
-# PARTICULAR PURPOSE.
-
- at SET_MAKE@
-
-VPATH = @srcdir@
-pkgdatadir = $(datadir)/@PACKAGE@
-pkgincludedir = $(includedir)/@PACKAGE@
-pkglibdir = $(libdir)/@PACKAGE@
-pkglibexecdir = $(libexecdir)/@PACKAGE@
-am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
-install_sh_DATA = $(install_sh) -c -m 644
-install_sh_PROGRAM = $(install_sh) -c
-install_sh_SCRIPT = $(install_sh) -c
-INSTALL_HEADER = $(INSTALL_DATA)
-transform = $(program_transform_name)
-NORMAL_INSTALL = :
-PRE_INSTALL = :
-POST_INSTALL = :
-NORMAL_UNINSTALL = :
-PRE_UNINSTALL = :
-POST_UNINSTALL = :
-build_triplet = @build@
-host_triplet = @host@
-DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in \
- $(top_srcdir)/Makefile.include
-subdir = lib/dpap-sharp/lib
-ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
-am__aclocal_m4_deps = $(top_srcdir)/build/m4/shave/shave.m4 \
- $(top_srcdir)/build/m4/shamrock/expansions.m4 \
- $(top_srcdir)/build/m4/shamrock/mono.m4 \
- $(top_srcdir)/build/m4/shamrock/programs.m4 \
- $(top_srcdir)/acinclude.m4 $(top_srcdir)/configure.ac
-am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
- $(ACLOCAL_M4)
-mkinstalldirs = $(install_sh) -d
-CONFIG_HEADER = $(top_builddir)/config.h
-CONFIG_CLEAN_FILES =
-CONFIG_CLEAN_VPATH_FILES =
-SOURCES =
-DIST_SOURCES =
-am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`;
-am__vpath_adj = case $$p in \
- $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \
- *) f=$$p;; \
- esac;
-am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`;
-am__install_max = 40
-am__nobase_strip_setup = \
- srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'`
-am__nobase_strip = \
- for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||"
-am__nobase_list = $(am__nobase_strip_setup); \
- for p in $$list; do echo "$$p $$p"; done | \
- sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \
- $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \
- if (++n[$$2] == $(am__install_max)) \
- { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \
- END { for (dir in files) print dir, files[dir] }'
-am__base_list = \
- sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \
- sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g'
-am__installdirs = "$(DESTDIR)$(assemblydir)"
-DATA = $(assembly_DATA)
-DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
-ACLOCAL = @ACLOCAL@
-ACLOCAL_AMFLAGS = @ACLOCAL_AMFLAGS@
-ALL_LINGUAS = @ALL_LINGUAS@
-AMTAR = @AMTAR@
-AM_MAKEFLAGS = @AM_MAKEFLAGS@
-API_VERSION = @API_VERSION@
-AR = @AR@
-ASM_VERSION = @ASM_VERSION@
-AUTOCONF = @AUTOCONF@
-AUTOHEADER = @AUTOHEADER@
-AUTOMAKE = @AUTOMAKE@
-AWK = @AWK@
-CATALOGS = @CATALOGS@
-CATOBJEXT = @CATOBJEXT@
-CC = @CC@
-CCDEPMODE = @CCDEPMODE@
-CFLAGS = @CFLAGS@
-CPP = @CPP@
-CPPFLAGS = @CPPFLAGS@
-CSC_DEFINES = @CSC_DEFINES@
-CXX = @CXX@
-CXXCPP = @CXXCPP@
-CXXDEPMODE = @CXXDEPMODE@
-CXXFLAGS = @CXXFLAGS@
-CYGPATH_W = @CYGPATH_W@
-DATADIRNAME = @DATADIRNAME@
-DEFS = @DEFS@
-DEPDIR = @DEPDIR@
-DISPLAY_VERSION = @DISPLAY_VERSION@
-DISTCHECK_CONFIGURE_FLAGS = @DISTCHECK_CONFIGURE_FLAGS@
-DOC_USER_FORMATS = @DOC_USER_FORMATS@
-DSYMUTIL = @DSYMUTIL@
-DUMPBIN = @DUMPBIN@
-ECHO_C = @ECHO_C@
-ECHO_N = @ECHO_N@
-ECHO_T = @ECHO_T@
-EGREP = @EGREP@
-EXEEXT = @EXEEXT@
-EXIF_CFLAGS = @EXIF_CFLAGS@
-EXIF_LIBS = @EXIF_LIBS@
-EXIF_SOVERSION = @EXIF_SOVERSION@
-F77 = @F77@
-FC = @FC@
-FGREP = @FGREP@
-F_CFLAGS = @F_CFLAGS@
-F_LIBS = @F_LIBS@
-GAPI2CODEGEN = @GAPI2CODEGEN@
-GAPI2FIXUP = @GAPI2FIXUP@
-GAPI2PARSER = @GAPI2PARSER@
-GCONFTOOL = @GCONFTOOL@
-GCONF_SCHEMA_CONFIG_SOURCE = @GCONF_SCHEMA_CONFIG_SOURCE@
-GCONF_SCHEMA_FILE_DIR = @GCONF_SCHEMA_FILE_DIR@
-GCONF_SHARP_CFLAGS = @GCONF_SHARP_CFLAGS@
-GCONF_SHARP_LIBS = @GCONF_SHARP_LIBS@
-GETTEXT_PACKAGE = @GETTEXT_PACKAGE@
-GIO_CFLAGS = @GIO_CFLAGS@
-GIO_LIBS = @GIO_LIBS@
-GLIBSHARP_CFLAGS = @GLIBSHARP_CFLAGS@
-GLIBSHARP_LIBS = @GLIBSHARP_LIBS@
-GLIB_CFLAGS = @GLIB_CFLAGS@
-GLIB_GENMARSHAL = @GLIB_GENMARSHAL@
-GLIB_LIBS = @GLIB_LIBS@
-GLIB_MKENUMS = @GLIB_MKENUMS@
-GMOFILES = @GMOFILES@
-GMSGFMT = @GMSGFMT@
-GNOME_ICON_THEME_PREFIX = @GNOME_ICON_THEME_PREFIX@
-GNOME_SCREENSAVER_SAVERDIR = @GNOME_SCREENSAVER_SAVERDIR@
-GNOME_SCREENSAVER_THEMESDIR = @GNOME_SCREENSAVER_THEMESDIR@
-GNOME_SHARP_CFLAGS = @GNOME_SHARP_CFLAGS@
-GNOME_SHARP_LIBS = @GNOME_SHARP_LIBS@
-GOBJECT_QUERY = @GOBJECT_QUERY@
-GREP = @GREP@
-HELP_DIR = @HELP_DIR@
-ICONS_DIRECTORY = @ICONS_DIRECTORY@
-INSTALL = @INSTALL@
-INSTALL_DATA = @INSTALL_DATA@
-INSTALL_PROGRAM = @INSTALL_PROGRAM@
-INSTALL_SCRIPT = @INSTALL_SCRIPT@
-INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
-INSTOBJEXT = @INSTOBJEXT@
-INTLLIBS = @INTLLIBS@
-INTLTOOL_EXTRACT = @INTLTOOL_EXTRACT@
-INTLTOOL_MERGE = @INTLTOOL_MERGE@
-INTLTOOL_PERL = @INTLTOOL_PERL@
-INTLTOOL_UPDATE = @INTLTOOL_UPDATE@
-LCMS_CFLAGS = @LCMS_CFLAGS@
-LCMS_LIBS = @LCMS_LIBS@
-LD = @LD@
-LDFLAGS = @LDFLAGS@
-LIBEXIF_VERSION_CHECK_CFLAGS = @LIBEXIF_VERSION_CHECK_CFLAGS@
-LIBEXIF_VERSION_CHECK_LIBS = @LIBEXIF_VERSION_CHECK_LIBS@
-LIBGPHOTO2_CFLAGS = @LIBGPHOTO2_CFLAGS@
-LIBGPHOTO2_LIBS = @LIBGPHOTO2_LIBS@
-LIBJPEG = @LIBJPEG@
-LIBOBJS = @LIBOBJS@
-LIBS = @LIBS@
-LIBTOOL = @LIBTOOL@
-LIPO = @LIPO@
-LN_S = @LN_S@
-LTLIBOBJS = @LTLIBOBJS@
-MAINT = @MAINT@
-MAKEFLAGS = @MAKEFLAGS@
-MAKEINFO = @MAKEINFO@
-MCS = @MCS@
-MKDIR_P = @MKDIR_P@
-MKINSTALLDIRS = @MKINSTALLDIRS@
-MONO = @MONO@
-MONO_MODULE_CFLAGS = @MONO_MODULE_CFLAGS@
-MONO_MODULE_LIBS = @MONO_MODULE_LIBS@
-MSGFMT = @MSGFMT@
-MSGFMT_OPTS = @MSGFMT_OPTS@
-MSGMERGE = @MSGMERGE@
-NDESK_DBUS_CFLAGS = @NDESK_DBUS_CFLAGS@
-NDESK_DBUS_LIBS = @NDESK_DBUS_LIBS@
-NM = @NM@
-NMEDIT = @NMEDIT@
-NUNIT_CFLAGS = @NUNIT_CFLAGS@
-NUNIT_DEFINES = @NUNIT_DEFINES@
-NUNIT_LIBS = @NUNIT_LIBS@
-OBJC = @OBJC@
-OBJDUMP = @OBJDUMP@
-OBJEXT = @OBJEXT@
-OMF_DIR = @OMF_DIR@
-OTOOL = @OTOOL@
-OTOOL64 = @OTOOL64@
-PACKAGE = @PACKAGE@
-PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
-PACKAGE_NAME = @PACKAGE_NAME@
-PACKAGE_STRING = @PACKAGE_STRING@
-PACKAGE_TARNAME = @PACKAGE_TARNAME@
-PACKAGE_URL = @PACKAGE_URL@
-PACKAGE_VERSION = @PACKAGE_VERSION@
-PATH_SEPARATOR = @PATH_SEPARATOR@
-PKG_CONFIG = @PKG_CONFIG@
-POFILES = @POFILES@
-POSUB = @POSUB@
-PO_IN_DATADIR_FALSE = @PO_IN_DATADIR_FALSE@
-PO_IN_DATADIR_TRUE = @PO_IN_DATADIR_TRUE@
-Q = @Q@
-RANLIB = @RANLIB@
-SED = @SED@
-SET_MAKE = @SET_MAKE@
-SHELL = @SHELL@
-STRIP = @STRIP@
-TURTLEDIR = @TURTLEDIR@
-UNIQUE_CFLAGS = @UNIQUE_CFLAGS@
-UNIQUE_LIBS = @UNIQUE_LIBS@
-USE_NLS = @USE_NLS@
-V = @V@
-VERSION = @VERSION@
-WARN_CFLAGS = @WARN_CFLAGS@
-XGETTEXT = @XGETTEXT@
-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_DUMPBIN = @ac_ct_DUMPBIN@
-am__include = @am__include@
-am__leading_dot = @am__leading_dot@
-am__quote = @am__quote@
-am__tar = @am__tar@
-am__untar = @am__untar@
-bindir = @bindir@
-build = @build@
-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@
-expanded_bindir = @expanded_bindir@
-expanded_datadir = @expanded_datadir@
-expanded_libdir = @expanded_libdir@
-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@
-lt_ECHO = @lt_ECHO@
-mandir = @mandir@
-mkdir_p = @mkdir_p@
-oldincludedir = @oldincludedir@
-pdfdir = @pdfdir@
-prefix = @prefix@
-program_transform_name = @program_transform_name@
-psdir = @psdir@
-sbindir = @sbindir@
-sharedstatedir = @sharedstatedir@
-shavedir = @shavedir@
-srcdir = @srcdir@
-sysconfdir = @sysconfdir@
-target_alias = @target_alias@
-top_build_prefix = @top_build_prefix@
-top_builddir = @top_builddir@
-top_srcdir = @top_srcdir@
-DIR_DOCS = $(top_builddir)/docs
-DIR_EXTENSIONS = $(top_builddir)/extensions
-DIR_GPHOTO2 = $(top_builddir)/lib/libgphoto2-sharp
-DIR_ICONS = $(top_builddir)/icons
-DIR_JPEGTRAN = $(top_builddir)/lib/libjpegtran
-DIR_KEYRING = $(top_builddir)/lib/gnome-keyring-sharp
-DIR_LIBFSPOT = $(top_builddir)/lib/libfspot
-DIR_SEMWEB = $(top_builddir)/lib/semweb
-DIR_SRC = $(top_builddir)/src
-DIR_GIOSHARP = $(top_builddir)/lib/gio-sharp/gio
-DIR_GTKSHARPBEANS = $(top_builddir)/lib/gtk-sharp-beans
-DIR_UNIQUESHARP = $(top_builddir)/lib/unique-sharp/unique
-LINK_KEYRING = -r:$(DIR_KEYRING)/gnome-keyring-sharp.dll
-LINK_GPHOTO2 = -r:$(DIR_GPHOTO2)/libgphoto2-sharp.dll
-LINK_SEMWEB = -r:$(DIR_SEMWEB)/SemWeb.dll
-LINK_GIOSHARP = -r:$(DIR_GIOSHARP)/gio-sharp.dll
-LINK_GTKSHARPBEANS = -r:$(DIR_GTKSHARPBEANS)/gtk-sharp-beans.dll
-LINK_UNIQUESHARP = -r:$(DIR_UNIQUESHARP)/unique-sharp.dll
-CSC_FLAGS = -debug
-CSC = $(MCS) $(CSC_FLAGS) -target:exe
-CSC_LIB = $(MCS) $(CSC_FLAGS) -target:library
-MONO_DEBUGFLAGS = --debug
-RUNTIME = mono $(MONO_DEBUGFLAGS)
-ASSEMBLY_NAME = dpap-sharp
-ASSEMBLY_SOURCES = \
- $(srcdir)/AssemblyInfo.cs \
- $(srcdir)/Album.cs \
- $(srcdir)/AuthenticationException.cs \
- $(srcdir)/BrokenMD5.cs \
- $(srcdir)/Client.cs \
- $(srcdir)/ContentCodeBag.cs \
- $(srcdir)/ContentFetcher.cs \
- $(srcdir)/ContentParser.cs \
- $(srcdir)/ContentWriter.cs \
- $(srcdir)/Database.cs \
- $(srcdir)/Discovery.cs \
- $(srcdir)/Hasher.cs \
- $(srcdir)/LoginException.cs \
- $(srcdir)/Photo.cs \
- $(srcdir)/Server.cs \
- $(srcdir)/ServerInfo.cs \
- $(srcdir)/User.cs \
- $(srcdir)/Utility.cs
-
-REFS = \
- -r:ICSharpCode.SharpZipLib \
- -resource:content-codes
-
-PKGS = \
- -pkg:mono-zeroconf
-
-ASSEMBLY = $(ASSEMBLY_NAME).dll
-assemblydir = $(pkglibdir)
-assembly_DATA = \
- $(ASSEMBLY)
-
-EXTRA_DIST = \
- $(ASSEMBLY_SOURCES)
-
-CLEANFILES = \
- $(ASSEMBLY) \
- $(ASSEMBLY).mdb
-
-all: all-am
-
-.SUFFIXES:
-$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(top_srcdir)/Makefile.include $(am__configure_deps)
- @for dep in $?; do \
- case '$(am__configure_deps)' in \
- *$$dep*) \
- ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \
- && { if test -f $@; then exit 0; else break; fi; }; \
- exit 1;; \
- esac; \
- done; \
- echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign lib/dpap-sharp/lib/Makefile'; \
- $(am__cd) $(top_srcdir) && \
- $(AUTOMAKE) --foreign lib/dpap-sharp/lib/Makefile
-.PRECIOUS: Makefile
-Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
- @case '$?' in \
- *config.status*) \
- cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \
- *) \
- echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \
- cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \
- esac;
-
-$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
- cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
-
-$(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps)
- cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
-$(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps)
- cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
-$(am__aclocal_m4_deps):
-
-mostlyclean-libtool:
- -rm -f *.lo
-
-clean-libtool:
- -rm -rf .libs _libs
-install-assemblyDATA: $(assembly_DATA)
- @$(NORMAL_INSTALL)
- test -z "$(assemblydir)" || $(MKDIR_P) "$(DESTDIR)$(assemblydir)"
- @list='$(assembly_DATA)'; test -n "$(assemblydir)" || list=; \
- for p in $$list; do \
- if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \
- echo "$$d$$p"; \
- done | $(am__base_list) | \
- while read files; do \
- echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(assemblydir)'"; \
- $(INSTALL_DATA) $$files "$(DESTDIR)$(assemblydir)" || exit $$?; \
- done
-
-uninstall-assemblyDATA:
- @$(NORMAL_UNINSTALL)
- @list='$(assembly_DATA)'; test -n "$(assemblydir)" || list=; \
- files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \
- test -n "$$files" || exit 0; \
- echo " ( cd '$(DESTDIR)$(assemblydir)' && rm -f" $$files ")"; \
- cd "$(DESTDIR)$(assemblydir)" && rm -f $$files
-tags: TAGS
-TAGS:
-
-ctags: CTAGS
-CTAGS:
-
-
-distdir: $(DISTFILES)
- @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; \
- if test -d $$d/$$file; then \
- dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \
- if test -d "$(distdir)/$$file"; then \
- find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
- fi; \
- if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
- cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \
- find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
- fi; \
- cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \
- else \
- test -f "$(distdir)/$$file" \
- || cp -p $$d/$$file "$(distdir)/$$file" \
- || exit 1; \
- fi; \
- done
-check-am: all-am
-check: check-am
-all-am: Makefile $(DATA)
-installdirs:
- for dir in "$(DESTDIR)$(assemblydir)"; do \
- test -z "$$dir" || $(MKDIR_P) "$$dir"; \
- done
-install: install-am
-install-exec: install-exec-am
-install-data: install-data-am
-uninstall: uninstall-am
-
-install-am: all-am
- @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
-
-installcheck: installcheck-am
-install-strip:
- $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
- install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
- `test -z '$(STRIP)' || \
- echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install
-mostlyclean-generic:
-
-clean-generic:
- -test -z "$(CLEANFILES)" || rm -f $(CLEANFILES)
-
-distclean-generic:
- -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
- -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES)
-
-maintainer-clean-generic:
- @echo "This command is intended for maintainers to use"
- @echo "it deletes files that may require special tools to rebuild."
-clean: clean-am
-
-clean-am: clean-generic clean-libtool mostlyclean-am
-
-distclean: distclean-am
- -rm -f Makefile
-distclean-am: clean-am distclean-generic
-
-dvi: dvi-am
-
-dvi-am:
-
-html: html-am
-
-html-am:
-
-info: info-am
-
-info-am:
-
-install-data-am: install-assemblyDATA
-
-install-dvi: install-dvi-am
-
-install-dvi-am:
-
-install-exec-am:
-
-install-html: install-html-am
-
-install-html-am:
-
-install-info: install-info-am
-
-install-info-am:
-
-install-man:
-
-install-pdf: install-pdf-am
-
-install-pdf-am:
-
-install-ps: install-ps-am
-
-install-ps-am:
-
-installcheck-am:
-
-maintainer-clean: maintainer-clean-am
- -rm -f Makefile
-maintainer-clean-am: distclean-am maintainer-clean-generic
-
-mostlyclean: mostlyclean-am
-
-mostlyclean-am: mostlyclean-generic mostlyclean-libtool
-
-pdf: pdf-am
-
-pdf-am:
-
-ps: ps-am
-
-ps-am:
-
-uninstall-am: uninstall-assemblyDATA
-
-.MAKE: install-am install-strip
-
-.PHONY: all all-am check check-am clean clean-generic clean-libtool \
- distclean distclean-generic distclean-libtool distdir dvi \
- dvi-am html html-am info info-am install install-am \
- install-assemblyDATA 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-generic mostlyclean-libtool pdf pdf-am ps ps-am \
- uninstall uninstall-am uninstall-assemblyDATA
-
-
-all: $(ASSEMBLY)
-
-$(ASSEMBLY): $(ASSEMBLY_SOURCES)
- $(CSC_LIB) -out:$@ $(PKGS) $(REFS) $(ASSEMBLY_SOURCES)
-
-# 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.
-.NOEXPORT:
diff --git a/lib/dpap-sharp/lib/Photo.cs b/lib/dpap-sharp/lib/Photo.cs
deleted file mode 100644
index 2f1838b..0000000
--- a/lib/dpap-sharp/lib/Photo.cs
+++ /dev/null
@@ -1,461 +0,0 @@
-// Photo.cs
-//
-// Authors:
-// Andrzej Wytyczak-Partyka <iapart at gmail.com>
-// James Willcox <snorp at snorp.net>
-//
-// Copyright (C) 2008 Andrzej Wytyczak-Partyka
-// Copyright (C) 2005 James Willcox <snorp at snorp.net>
-//
-// This program is free software; you can redistribute it and/or modify
-// it under the terms of the GNU General Public License as published by
-// the Free Software Foundation; either version 2 of the License, or
-// (at your option) any later version.
-//
-// This program is distributed in the hope that it will be useful,
-// but WITHOUT ANY WARRANTY; without even the implied warranty of
-// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-// GNU General Public License for more details.
-//
-// You should have received a copy of the GNU General Public License
-// along with this program; if not, write to the Free Software
-// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
-//
-//
-
-using System;
-using System.Collections;
-namespace DPAP
-{
-
-
- public class Photo
- {
- private string author;
- private string album;
- private string title;
- private int year;
- private string format;
- private TimeSpan duration;
- private int id;
- private int size;
- private int width;
- private int height;
- private string genre;
- private int photo_number;
- private int photo_count;
- private string filename;
- private string thumbnail;
- private string path;
- private int thumbsize;
- private DateTime date_added = DateTime.Now;
- private DateTime date_modified = DateTime.Now;
- private short bitrate;
-
- public event EventHandler Updated;
-
- public string Author {
- get { return author; }
- set {
- author = value;
- EmitUpdated ();
- }
- }
-
- public string Album {
- get { return album; }
- set {
- album = value;
- EmitUpdated ();
- }
- }
-
- public string Title {
- get { return title; }
- set {
- title = value;
- EmitUpdated ();
- }
- }
-
- public int Year {
- get { return year; }
- set {
- year = value;
- EmitUpdated ();
- }
- }
-
- public string Format {
- get { return format; }
- set {
- format = value;
- EmitUpdated ();
- }
- }
-
- public TimeSpan Duration {
- get { return duration; }
- set {
- duration = value;
- EmitUpdated ();
- }
- }
-
- public int Id {
- get { return id; }
- }
-
- public int Size {
- get { return size; }
- set {
- size = value;
- EmitUpdated ();
- }
- }
-
- public string FileName {
- get { return filename; }
- set {
- filename = value;
- EmitUpdated ();
- }
- }
-
- public string Path {
- get { return path; }
- set {
- path = value;
- EmitUpdated ();
- }
- }
-
- public string Thumbnail {
- get { return thumbnail; }
- set {
- thumbnail = value;
- EmitUpdated ();
- }
- }
-
- public int ThumbSize {
- get { return thumbsize; }
- set {
- thumbsize = value;
- EmitUpdated ();
- }
- }
-
- public int Width {
- get { return width; }
- set {
- width = value;
- EmitUpdated ();
- }
- }
-
- public int Height {
- get { return height; }
- set {
- height = value;
- EmitUpdated ();
- }
- }
-
- public DateTime DateAdded {
- get { return date_added; }
- set {
- date_added = value;
- EmitUpdated ();
- }
- }
-
- public DateTime DateModified {
- get { return date_modified; }
- set {
- date_modified = value;
- EmitUpdated ();
- }
- }
-
-
- public object Clone () {
- Photo photo = new Photo ();
- photo.author = author;
- photo.album = album;
- photo.title = title;
- photo.year = year;
- photo.format = format;
- photo.duration = duration;
- photo.id = id;
- photo.size = size;
- photo.filename = filename;
- photo.thumbnail = thumbnail;
- photo.thumbsize = thumbsize;
- photo.date_added = date_added;
- photo.date_modified = date_modified;
- photo.path = path;
- return photo;
- }
-
- public override string ToString () {
- return String.Format ("fname={0}, title={1}, format={2}, id={3}, path={4}", filename, title, format, id, path);
- }
-
- internal void SetId (int id) {
- this.id = id;
- }
- internal ContentNode ToFileData (bool thumb) {
-
- ArrayList nodes = new ArrayList ();
- Console.WriteLine ("Requested "+ ( (thumb)?"thumb":"file") +", thumbnail=" + thumbnail + ", hires=" + path);
- nodes.Add (new ContentNode ("dmap.itemkind", (byte)3));
- nodes.Add (new ContentNode ("dmap.itemid", id));
-
- // pass the appropriate file path, depending on wether
- //we are sending the thumbnail or the hi-res image
-
- nodes.Add (new ContentNode ("dpap.filedata",
- new ContentNode ("dpap.imagefilesize", (thumb)?thumbsize:size),
- new ContentNode ("dpap.imagefilename", (thumb)?thumbnail:path),
- new ContentNode ("dpap.imagefilename", (thumb)?thumbnail:filename)));
-
- return (new ContentNode ("dmap.listingitem", nodes));
-
- }
- internal ContentNode ToNode (string [] fields) {
-
- ArrayList nodes = new ArrayList ();
-
- foreach (string field in fields) {
- object val = null;
-
- switch (field) {
- case "dmap.itemid":
- val = id;
- break;
- case "dmap.itemname":
- val = title;
- break;
- case "dmap.itemkind":
- val = (byte) 3;
- break;
- case "dmap.persistentid":
- val = (long) id;
- break;
- case "dpap.photoalbum":
- val = album;
- break;
-
- case "dpap.author":
- val = author;
- break;
-
- case "dpap.imageformat":
- val = format;
- break;
- case "dpap.imagefilename":
- val = filename;
- break;
- case "dpap.imagefilesize":
- val = thumbsize;
- break;
- case "dpap.imagelargefilesize":
- val = size;
- break;
- /*case "dpap.aspectratio":
- val = "0";
- break;*/
- case "dpap.creationdate":
- val = 7799;
- break;
- case "dpap.pixelheight":
- val = 0;
- break;
- case "dpap.pixelwidth":
- val = 0;
- break;
- case "dpap.imagerating":
- val = 0;
- break;
-
- default:
- break;
- }
-
- if (val != null) {
- // iTunes wants this to go first, sigh
- if (field == "dmap.itemkind")
- nodes.Insert (0, new ContentNode (field, val));
- else
- nodes.Add (new ContentNode (field, val));
- }
- }
-
- return new ContentNode ("dmap.listingitem", nodes);
- }
-
- internal static Photo FromNode (ContentNode node) {
- Photo photo = new Photo ();
-
- foreach (ContentNode field in (ContentNode []) node.Value) {
- switch (field.Name) {
- case "dmap.itemid":
- photo.id = (int) field.Value;
- break;
- case "dmap.itemname":
- photo.title = (string) field.Value;
- break;
- case "dpap.imageformat":
- photo.format = (string) field.Value;
- break;
- case "dpap.imagefilename":
- photo.filename = (string) field.Value;
- break;
- /* case "dpap.imagefilesize":
- photo.size = (int) field.Value;
- break;
- case "dpap.imagepixelwidth":
- photo.width = (int) field.Value;
- break;
- case "dpap.imagepixelheight":
- photo.height = (int) field.Value;
- break;*/
- default:
- break;
- }
- }
-
- return photo;
- }
-
- internal ContentNode ToAlbumNode (string [] fields) {
- ArrayList nodes = new ArrayList ();
-
- foreach (string field in fields) {
- object val = null;
-
- switch (field) {
- case "dmap.itemid":
- val = id;
- break;
- case "dmap.itemname":
- val = title;
- break;
- case "dmap.itemkind":
- val = (byte) 3;
- break;
- case "dmap.persistentid":
- val = (long) id;
- break;
- case "dpap.photoalbum":
- val = album;
- break;
-
- case "dpap.author":
- val = author;
- break;
-
- case "dpap.imageformat":
- val = format;
- break;
- case "dpap.imagefilename":
- val = filename;
- break;
- case "dpap.imagefilesize":
- val = thumbsize;
- break;
- case "dpap.imagelargefilesize":
- val = size;
- break;
- // Apparently this has to be sent even with bogus data,
- // otherwise iPhoto '08 wont show the thumbnails
- case "dpap.aspectratio":
- val = "1.522581";
- break;
- case "dpap.creationdate":
- val = 7799;
- break;
- case "dpap.pixelheight":
- val = 0;
- break;
- case "dpap.pixelwidth":
- val = 0;
- break;
- case "dpap.imagerating":
- val = 0;
- break;
-
- default:
- break;
- }
-
- if (val != null) {
- // iTunes wants this to go first, sigh
- if (field == "dmap.itemkind")
- nodes.Insert (0, new ContentNode (field, val));
- else
- nodes.Add (new ContentNode (field, val));
- }
- }
- return new ContentNode ("dmap.listingitem",
- new ContentNode ("dmap.itemkind", (byte) 3),
- nodes);
- /* new ContentNode ("dpap.imagefilename", filename),
- new ContentNode ("dmap.itemid", Id),
- //new ContentNode ("dmap.containeritemid", containerId),
- new ContentNode ("dmap.itemname", Title == null ? String.Empty : Title));
- */
- }
-
- internal static void FromAlbumNode (Database db, ContentNode node, out Photo photo, out int containerId) {
- photo = null;
- containerId = 0;
-
- foreach (ContentNode field in (ContentNode []) node.Value) {
- switch (field.Name) {
- case "dmap.itemid":
- photo = db.LookupPhotoById ( (int) field.Value);
- break;
- case "dmap.containeritemid":
- containerId = (int) field.Value;
- break;
- default:
- break;
- }
- }
- }
-
- private bool Equals (Photo photo) {
- return author == photo.Author &&
- album == photo.Album &&
- title == photo.Title &&
- year == photo.Year &&
- format == photo.Format &&
- size == photo.Size &&
- date_added == photo.DateAdded &&
- date_modified == photo.DateModified;
- }
-
- internal void Update (Photo photo) {
- if (Equals (photo))
- return;
-
- author = photo.Author;
- album = photo.Album;
- title = photo.Title;
- year = photo.Year;
- format = photo.Format;
- size = photo.Size;
- date_added = photo.DateAdded;
- date_modified = photo.DateModified;
-
- EmitUpdated ();
- }
-
- private void EmitUpdated () {
- if (Updated != null)
- Updated (this, new EventArgs ());
- }
- }
-}
\ No newline at end of file
diff --git a/lib/dpap-sharp/lib/Server.cs b/lib/dpap-sharp/lib/Server.cs
deleted file mode 100644
index 49b9b19..0000000
--- a/lib/dpap-sharp/lib/Server.cs
+++ /dev/null
@@ -1,961 +0,0 @@
-// Server.cs
-//
-// Authors:
-// Andrzej Wytyczak-Partyka <iapart at gmail.com>
-// James Willcox <snorp at snorp.net>
-//
-// Copyright (C) 2008 Andrzej Wytyczak-Partyka
-// Copyright (C) 2005 James Willcox <snorp at snorp.net>
-//
-// This program is free software; you can redistribute it and/or modify
-// it under the terms of the GNU General Public License as published by
-// the Free Software Foundation; either version 2 of the License, or
-// (at your option) any later version.
-//
-// This program is distributed in the hope that it will be useful,
-// but WITHOUT ANY WARRANTY; without even the implied warranty of
-// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-// GNU General Public License for more details.
-//
-// You should have received a copy of the GNU General Public License
-// along with this program; if not, write to the Free Software
-// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
-//
-//
-
-using System;
-using System.Text;
-using System.Text.RegularExpressions;
-using System.IO;
-using System.Threading;
-using System.Collections;
-using System.Collections.Generic;
-using System.Collections.ObjectModel;
-using System.Collections.Specialized;
-using System.Net;
-using System.Net.Sockets;
-using System.Web;
-
-using Mono.Zeroconf;
-
-namespace DPAP {
-
- internal delegate bool WebHandler (Socket client, string user, string path, NameValueCollection query, int range);
-
- internal class WebServer {
-
- private const int ChunkLength = 8192;
-
- private UInt16 port;
- private Socket server;
- private WebHandler handler;
- private bool running;
- private List<NetworkCredential> creds = new List<NetworkCredential> ();
- private ArrayList clients = new ArrayList ();
- private string realm;
- private AuthenticationMethod auth_method = AuthenticationMethod.None;
-
- public ushort RequestedPort {
- get { return port; }
- set { port = value; }
- }
-
- public ushort BoundPort {
- get { return (ushort) (server.LocalEndPoint as IPEndPoint).Port; }
- }
-
- public IList<NetworkCredential> Credentials {
- get { return new ReadOnlyCollection<NetworkCredential> (creds); }
- }
-
- public AuthenticationMethod AuthenticationMethod {
- get { return auth_method; }
- set { auth_method = value; }
- }
-
- public string Realm {
- get { return realm; }
- set { realm = value; }
- }
-
- public WebServer (UInt16 port, WebHandler handler) {
- this.port = port;
- this.handler = handler;
- }
-
- public void Start () {
- server = new Socket (AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.IP);
- server.Bind (new IPEndPoint (IPAddress.Any, port));
- server.Listen (10);
-
- running = true;
- Thread thread = new Thread (ServerLoop);
- thread.IsBackground = true;
- thread.Start ();
- }
-
- public void Stop () {
- running = false;
-
- if (server != null) {
- server.Close ();
- server = null;
- }
-
- foreach (Socket client in (ArrayList) clients.Clone ()) {
- // do not pass go, do not collect $200...
- client.Close ();
- }
- }
-
- public void AddCredential (NetworkCredential cred) {
- creds.Add (cred);
- }
-
- public void RemoveCredential (NetworkCredential cred) {
- creds.Remove (cred);
- }
-
- public void WriteResponse (Socket client, ContentNode node) {
- WriteResponse (client, HttpStatusCode.OK,
- ContentWriter.Write (ContentCodeBag.Default, node));
- }
-
- public void WriteResponse (Socket client, HttpStatusCode code, string body) {
- WriteResponse (client, code, Encoding.UTF8.GetBytes (body));
- }
-
- public void WriteResponse (Socket client, HttpStatusCode code, byte [] body) {
- if (!client.Connected)
- return;
-
- using (BinaryWriter writer = new BinaryWriter (new NetworkStream (client, false))) {
- writer.Write (Encoding.UTF8.GetBytes (String.Format ("HTTP/1.1 {0} {1}\r\n", (int) code, code.ToString ())));
- writer.Write (Encoding.UTF8.GetBytes ("DPAP-Server: dpap-sharp\r\n"));
- writer.Write (Encoding.UTF8.GetBytes ("Content-Type: application/x-dmap-tagged\r\n"));
- writer.Write (Encoding.UTF8.GetBytes (String.Format ("Content-Length: {0}\r\n", body.Length)));
- writer.Write (Encoding.UTF8.GetBytes ("\r\n"));
- writer.Write (body);
- }
- }
-
- public void WriteResponseFile (Socket client, string file, long offset) {
- // DEBUG data
- Console.WriteLine ("WriteResponseFile!!");
- FileInfo info = new FileInfo (file);
-
- FileStream stream = info.Open (FileMode.Open, FileAccess.Read, FileShare.Read);
- WriteResponseStream (client, stream, info.Length, offset);
- }
-
- public void WriteResponseStream (Socket client, Stream response, long len) {
- WriteResponseStream (client, response, len, -1);
- }
-
- public void WriteResponseStream (Socket client, Stream response, long len, long offset) {
- using (BinaryWriter writer = new BinaryWriter (new NetworkStream (client, false))) {
-
- if (offset > 0) {
- writer.Write (Encoding.UTF8.GetBytes ("HTTP/1.1 206 Partial Content\r\n"));
- writer.Write (Encoding.UTF8.GetBytes (String.Format ("Content-Range: bytes {0}-{1}/{2}\r\n",
- offset, len, len + 1)));
- writer.Write (Encoding.UTF8.GetBytes ("Accept-Range: bytes\r\n"));
- len = len - offset;
- } else {
- writer.Write (Encoding.UTF8.GetBytes ("HTTP/1.1 200 OK\r\n"));
- }
-
- writer.Write (Encoding.UTF8.GetBytes (String.Format ("Content-Length: {0}\r\n", len)));
- writer.Write (Encoding.UTF8.GetBytes ("\r\n"));
-
- using (BinaryReader reader = new BinaryReader (response)) {
- if (offset > 0) {
- reader.BaseStream.Seek (offset, SeekOrigin.Begin);
- }
-
- long count = 0;
- while (count < len) {
- byte [] buf = reader.ReadBytes (Math.Min (ChunkLength, (int) len - (int) count));
- if (buf.Length == 0) {
- break;
- }
-
- writer.Write (buf);
- count += buf.Length;
- }
- }
- }
- }
-
- public void WriteAccessDenied (Socket client) {
- string msg = "Authorization Required";
-
- using (BinaryWriter writer = new BinaryWriter (new NetworkStream (client, false))) {
- writer.Write (Encoding.UTF8.GetBytes ("HTTP/1.1 401 Denied\r\n"));
- writer.Write (Encoding.UTF8.GetBytes (String.Format ("WWW-Authenticate: Basic realm=\"{0}\"",
- realm)));
- writer.Write (Encoding.UTF8.GetBytes ("Content-Type: text/plain\r\n"));
- writer.Write (Encoding.UTF8.GetBytes (String.Format ("Content-Length: {0}\r\n", msg.Length)));
- writer.Write (Encoding.UTF8.GetBytes ("\r\n"));
- writer.Write (msg);
- }
- }
-
- private bool IsValidAuth (string user, string pass) {
- if (auth_method == AuthenticationMethod.None)
- return true;
-
- foreach (NetworkCredential cred in creds) {
-
- if ( (auth_method != AuthenticationMethod.UserAndPassword || cred.UserName == user) &&
- cred.Password == pass)
- return true;
- }
-
- return false;
- }
-
- private bool HandleRequest (Socket client) {
-
- if (!client.Connected)
- return false;
-
- bool ret = true;
-
- using (StreamReader reader = new StreamReader (new NetworkStream (client, false))) {
-
- string request = reader.ReadLine ();
- if (request == null)
- return false;
-
- string line = null;
- string user = null;
- string password = null;
- int range = -1;
-
- // read the rest of the request
- do {
- line = reader.ReadLine ();
-
- if (line == "Connection: close") {
- ret = false;
- } else if (line != null && line.StartsWith ("Authorization: Basic")) {
- string [] splitLine = line.Split (' ');
-
- if (splitLine.Length != 3)
- continue;
-
- string userpass = Encoding.UTF8.GetString (Convert.FromBase64String (splitLine [2]));
-
- string [] splitUserPass = userpass.Split (new char [] {':'}, 2);
- user = splitUserPass [0];
- password = splitUserPass [1];
- } else if (line != null && line.StartsWith ("Range: ")) {
- // we currently expect 'Range: bytes=<offset>-'
- string [] splitLine = line.Split ('=');
-
- if (splitLine.Length != 2)
- continue;
-
- string rangestr = splitLine [1];
- if (!rangestr.EndsWith ("-"))
- continue;
-
- try {
- range = Int32.Parse (rangestr.Substring (0, rangestr.Length - 1));
- } catch (FormatException) {
- }
- }
- } while (line != String.Empty && line != null);
-
-
- string [] splitRequest = request.Split ();
- if (splitRequest.Length < 3) {
- WriteResponse (client, HttpStatusCode.BadRequest, "Bad Request");
- } else {
- try {
- string path = splitRequest [1];
- if (!path.StartsWith ("dpap://")) {
- Console.WriteLine ("Path is not correct - " + path);
- path = String.Format ("dpap://localhost{0}", path);
- }
-
- Uri uri = new Uri (path);
- NameValueCollection query = new NameValueCollection ();
-
- if (uri.Query != null && uri.Query != String.Empty) {
- string [] splitquery = uri.Query.Substring (1).Split ('&');
-
- foreach (string queryItem in splitquery) {
- if (queryItem == String.Empty)
- continue;
-
- string [] splitQueryItem = queryItem.Split ('=');
- query [splitQueryItem [0]] = splitQueryItem [1];
- }
- }
-
- if (auth_method != AuthenticationMethod.None && uri.AbsolutePath == "/login" &&
- !IsValidAuth (user, password)) {
- WriteAccessDenied (client);
- return true;
- }
-
- return handler (client, user, uri.AbsolutePath, query, range);
- } catch (IOException) {
- ret = false;
- } catch (Exception e) {
- ret = false;
- Console.Error.WriteLine ("Trouble handling request {0}: {1}", splitRequest [1], e);
- }
- }
- }
-
- return ret;
- }
-
- private void HandleConnection (object o) {
- Socket client = (Socket) o;
-
- try {
- while (HandleRequest (client)) { }
- } catch (IOException) {
- // ignore
- } catch (Exception e) {
- Console.Error.WriteLine ("Error handling request: " + e);
- } finally {
- clients.Remove (client);
- client.Close ();
- }
- }
-
- private void ServerLoop () {
- while (true) {
- try {
- if (!running)
- break;
-
- Socket client = server.Accept ();
- clients.Add (client);
- ThreadPool.QueueUserWorkItem (HandleConnection, client);
- } catch (SocketException) {
- break;
- }
- }
- }
- }
-
- internal class RevisionManager {
-
- private Dictionary<int, List<Database>> revisions = new Dictionary<int, List<Database>> ();
- private int current = 1;
- private int limit = 3;
-
- public int Current {
- get { return current; }
- }
-
- public int HistoryLimit {
- get { return limit; }
- set { limit = value; }
- }
-
- public void AddRevision (List<Database> databases) {
- revisions [++current] = databases;
-
- if (revisions.Keys.Count > limit) {
- // remove the oldest
-
- int oldest = current;
- foreach (int rev in revisions.Keys) {
- if (rev < oldest) {
- oldest = rev;
- }
- }
-
- RemoveRevision (oldest);
- }
- }
-
- public void RemoveRevision (int rev) {
- revisions.Remove (rev);
- }
-
- public List<Database> GetRevision (int rev) {
- if (rev == 0)
- return revisions [current];
- else
- return revisions [rev];
- }
-
- public Database GetDatabase (int rev, int id) {
- List<Database> dbs = GetRevision (rev);
-
- if (dbs == null)
- return null;
-
- foreach (Database db in dbs) {
- if (db.Id == id)
- return db;
- }
-
- return null;
- }
- }
-
- public class PhotoRequestedArgs : EventArgs {
-
- private string user;
- private IPAddress host;
- private Database db;
- private Photo photo;
-
- public string UserName {
- get { return user; }
- }
-
- public IPAddress Host {
- get { return host; }
- }
-
- public Database Database {
- get { return db; }
- }
-
- public Photo Photo {
- get { return photo; }
- }
-
- public PhotoRequestedArgs (string user, IPAddress host, Database db, Photo photo) {
- this.user = user;
- this.host = host;
- this.db = db;
- this.photo = photo;
- }
- }
-
- public delegate void PhotoRequestedHandler (object o, PhotoRequestedArgs args);
-
- public class Server {
-
- internal static readonly TimeSpan DefaultTimeout = TimeSpan.FromMinutes (30);
-
- private static Regex dbItemsRegex = new Regex ("/databases/([0-9]*?)/items$");
- private static Regex dbPhotoRegex0 = new Regex ("/databases/([0-9]*?)/items$");
- private static Regex dbPhotoRegex = new Regex (".*'dmap.itemid:([0-9]*)'.*");
- private static Regex dbContainersRegex = new Regex ("/databases/([0-9]*?)/containers$");
- private static Regex dbContainerItemsRegex = new Regex ("/databases/([0-9]*?)/containers/([0-9]*?)/items$");
-
- private WebServer ws;
- private ArrayList databases = new ArrayList ();
- private Dictionary<int, User> sessions = new Dictionary<int, User> ();
- private Random random = new Random ();
- private UInt16 port = 8770;
- private ServerInfo serverInfo = new ServerInfo ();
- private bool publish = true;
- private int maxUsers = 0;
- private bool running;
- private string machineId;
-
- private RegisterService zc_service;
-
- private object eglock = new object ();
- private RevisionManager revmgr = new RevisionManager ();
-
- public event EventHandler Collision;
- public event PhotoRequestedHandler PhotoRequested;
- public event UserHandler UserLogin;
- public event UserHandler UserLogout;
-
- public IList<User> Users {
- get {
- lock (sessions) {
- return new ReadOnlyCollection<User> (new List<User> (sessions.Values));
- }
- }
- }
-
- public string Name {
- get { return serverInfo.Name; }
- set {
- serverInfo.Name = value;
- ws.Realm = value;
-
- if (publish)
- RegisterService ();
- }
- }
-
- public string MachineId {
- get { return machineId; }
- set { machineId = value; }
- }
-
- public UInt16 Port {
- get { return port; }
- set {
- port = value;
- ws.RequestedPort = value;
- }
- }
-
- public bool IsPublished {
- get { return publish; }
- set {
- publish = value;
-
- if (running && publish)
- RegisterService ();
- else if (running && !publish)
- UnregisterService ();
- }
- }
-
- public bool IsRunning {
- get { return running; }
- }
-
- public AuthenticationMethod AuthenticationMethod {
- get { return serverInfo.AuthenticationMethod; }
- set {
- serverInfo.AuthenticationMethod = value;
- ws.AuthenticationMethod = value;
- }
- }
-
- public IList<NetworkCredential> Credentials {
- get { return ws.Credentials; }
- }
-
- public int MaxUsers {
- get { return maxUsers; }
- set { maxUsers = value; }
- }
-
- public Server (string name) {
- ws = new WebServer (port, OnHandleRequest);
- serverInfo.Name = name;
- ws.Realm = name;
- }
-
- public void Start () {
- running = true;
- ws.Start ();
-
- // if (publish)
- RegisterService ();
- }
-
- public void Stop () {
- running = false;
-
- ws.Stop ();
- UnregisterService ();
-
- // get that thread to wake up and exit
- lock (revmgr) {
- Monitor.PulseAll (revmgr);
- }
- }
-
- public void AddDatabase (Database db) {
- databases.Add (db);
- }
-
- public void RemoveDatabase (Database db) {
- databases.Remove (db);
- }
-
- public void AddCredential (NetworkCredential cred) {
- ws.AddCredential (cred);
- }
-
- public void RemoveCredential (NetworkCredential cred) {
- ws.RemoveCredential (cred);
- }
-
- public void Commit () {
- List<Database> clones = new List<Database> ();
- foreach (Database db in databases) {
- clones.Add ( (Database) db.Clone ());
- }
-
- lock (revmgr) {
- revmgr.AddRevision (clones);
- Monitor.PulseAll (revmgr);
- }
- }
-
- private void RegisterService () {
- lock (eglock) {
- if (zc_service != null) {
- UnregisterService ();
- }
-
- string auth = serverInfo.AuthenticationMethod == AuthenticationMethod.None ? "false" : "true";
-
- zc_service = new RegisterService ();
- zc_service.Name = serverInfo.Name;
- zc_service.RegType = "_dpap._tcp";
- zc_service.Port = 8770; // (short)ws.BoundPort;
- zc_service.TxtRecord = new TxtRecord ();
- zc_service.TxtRecord.Add ("Password", auth);
- zc_service.TxtRecord.Add ("Machine Name", serverInfo.Name);
-
- if (machineId != null) {
- zc_service.TxtRecord.Add ("Machine ID", machineId);
- }
-
- zc_service.TxtRecord.Add ("txtvers", "1");
- zc_service.TxtRecord.Add ("Version", "65537");
- zc_service.ReplyDomain = "local.";
- zc_service.Response += OnRegisterServiceResponse;
- zc_service.Register ();
- }
- }
-
- private void UnregisterService () {
- lock (eglock) {
- if (zc_service == null) {
- return;
- }
-
- try {
- zc_service.Dispose ();
- } catch {
- }
- zc_service = null;
- }
- }
-
- private void OnRegisterServiceResponse (object o, RegisterServiceEventArgs args) {
- if (args.ServiceError == ServiceErrorCode.AlreadyRegistered && Collision != null) {
- Collision (this, new EventArgs ());
- }
- }
-
- private void ExpireSessions () {
- lock (sessions) {
- foreach (int s in new List<int> (sessions.Keys)) {
- User user = sessions [s];
-
- if (DateTime.Now - user.LastActionTime > DefaultTimeout) {
- sessions.Remove (s);
- OnUserLogout (user);
- }
- }
- }
- }
-
- private void OnUserLogin (User user) {
- UserHandler handler = UserLogin;
- if (handler != null) {
- try {
- handler (this, new UserArgs (user));
- } catch (Exception e) {
- Console.Error.WriteLine ("Exception in UserLogin event handler: " + e);
- }
- }
- }
-
- private void OnUserLogout (User user) {
- UserHandler handler = UserLogout;
- if (handler != null) {
- try {
- handler (this, new UserArgs (user));
- } catch (Exception e) {
- Console.Error.WriteLine ("Exception in UserLogout event handler: " + e);
- }
- }
- }
-
- internal bool OnHandleRequest (Socket client, string username, string path, NameValueCollection query, int range) {
- string photoQuery;
- if (query ["query"] != null)
- photoQuery = query ["query"];
- else
- photoQuery = "";
-
- int session = 0;
- if (query ["session-id"] != null) {
- session = Int32.Parse (query ["session-id"]);
- }
-
-/* if (!sessions.ContainsKey (session) && path != "/server-info" && path != "/content-codes" &&
- path != "/login") {
- ws.WriteResponse (client, HttpStatusCode.Forbidden, "invalid session id");
- return true;
- }
-*/
- if (session != 0) {
- sessions [session].LastActionTime = DateTime.Now;
- }
-
- int clientRev = 0;
- if (query ["revision-number"] != null) {
- clientRev = Int32.Parse (query ["revision-number"]);
- }
-
- int delta = 0;
- if (query ["delta"] != null) {
- delta = Int32.Parse (query ["delta"]);
- }
- // DEBUG data
- Console.WriteLine ("Before returning resources for path " + path + ", meta " + query ["meta"] + " query " + photoQuery);
- if (dbItemsRegex.IsMatch (path)) //&& photoQuery.Length==0
- Console.WriteLine ("\tThis is a database/items request!");
-
- if (path == "/server-info") {
- ws.WriteResponse (client, GetServerInfoNode ());
- } else if (path == "/content-codes") {
- ws.WriteResponse (client, ContentCodeBag.Default.ToNode ());
- } else if (path == "/login") {
- ExpireSessions ();
-
- if (maxUsers > 0 && sessions.Count + 1 > maxUsers) {
- ws.WriteResponse (client, HttpStatusCode.ServiceUnavailable, "too many users");
- return true;
- }
-
- session = random.Next ();
- User user = new User (DateTime.Now, (client.RemoteEndPoint as IPEndPoint).Address, username);
-
- lock (sessions) {
- sessions [session] = user;
- }
-
- ws.WriteResponse (client, GetLoginNode (session));
- OnUserLogin (user);
- } else if (path == "/logout") {
- Console.WriteLine("logout!");
- User user = sessions [session];
-
- lock (sessions) {
- sessions.Remove (session);
- }
-
- ws.WriteResponse (client, HttpStatusCode.OK, new byte [0]);
- OnUserLogout (user);
-
- return false;
- } else if (path == "/databases") {
- Console.WriteLine ("path==/databases");
- ws.WriteResponse (client, GetDatabasesNode ());
- } else if (dbItemsRegex.IsMatch (path) && photoQuery.Length==0 ){ //&& !dbPhotoRegex.IsMatch (query ["query"])) {
- Console.WriteLine ("dbItemsRegex, query=" + query ["query"] + " meta=" + query ["meta"]);
- int dbid = Int32.Parse (dbItemsRegex.Match (path).Groups [1].Value);
-
- Database curdb = revmgr.GetDatabase (clientRev, dbid);
-
- if (curdb == null) {
- ws.WriteResponse (client, HttpStatusCode.BadRequest, "invalid database id");
- return true;
- }
-
- ArrayList deletedIds = new ArrayList ();
-
- if (delta > 0) {
- Database olddb = revmgr.GetDatabase (clientRev - delta, dbid);
-
- if (olddb != null) {
- foreach (Photo photo in olddb.Photos) {
- if (curdb.LookupPhotoById (photo.Id) == null)
- deletedIds.Add (photo.Id);
- }
- }
- }
-
- ContentNode node = curdb.ToPhotosNode (query ["meta"].Split (','),
- (int []) deletedIds.ToArray (typeof (int)));
- ws.WriteResponse (client, node);
- } else if (dbPhotoRegex.IsMatch (photoQuery)) {
- Console.WriteLine ("dbPhotoRegex");
- Console.WriteLine ("dbPhotosRegex, query=" + query ["query"] + " meta=" + query ["meta"]);
- string [] photoIds = query ["query"].Split (',');
- Match match = dbPhotoRegex0.Match (path);
- int dbid = Int32.Parse (match.Groups [1].Value);
- int photoid = 0;
-
-
- //match = dbPhotoRegex.Match (photoQuery);
-
- Database db = revmgr.GetDatabase (clientRev, dbid);
- if (db == null) {
- ws.WriteResponse (client, HttpStatusCode.BadRequest, "invalid database id");
- return true;
- }
- ArrayList photoNodes = new ArrayList ();
- Photo photo = db.LookupPhotoById (1);
-
- foreach (string photoId in photoIds) {
- match = dbPhotoRegex.Match (photoId);
- photoid = Int32.Parse (match.Groups [1].Value);
- photo = db.LookupPhotoById (photoid);
- photoNodes.Add (photo.ToFileData (query ["meta"].Contains ("dpap.thumb")));
- // DEBUG
- //Console.WriteLine ("Requested photo id=" + photoid);
- }
-
- ArrayList children = new ArrayList ();
- children.Add (new ContentNode ("dmap.status", 200));
- children.Add (new ContentNode ("dmap.updatetype", (byte) 0));
- children.Add (new ContentNode ("dmap.specifiedtotalcount", 2));
- children.Add (new ContentNode ("dmap.returnedcount", 2));
- children.Add (new ContentNode ("dmap.listing", photoNodes));
- ContentNode dbsongs = new ContentNode ("dpap.databasesongs", children);
-
- if (photo == null) {
- ws.WriteResponse (client, HttpStatusCode.BadRequest, "invalid photo id");
- return true;
- }
-
- try {
- try {
- if (PhotoRequested != null)
- PhotoRequested (this, new PhotoRequestedArgs (username,
- (client.RemoteEndPoint as IPEndPoint).Address,
- db, photo));
- } catch {}
-
- if (photo.FileName != null) {
- // DEBUG
- //Console.WriteLine ("photo.Filename != null" + query ["meta"].Split (',') [0]);
- //ContentNode node = photo.ToFileData ();
- //node.Dump ();
-
- ws.WriteResponse (client, dbsongs);
-
- } else if (db.Client != null) {
- Console.WriteLine ("db.Client != null");
- long photoLength = 0;
- Stream photoStream = db.StreamPhoto (photo, out photoLength);
-
- try {
- ws.WriteResponseStream (client, photoStream, photoLength);
- } catch (IOException) {
- Console.WriteLine("IOException!");
- }
- } else {
- Console.WriteLine ("Else - internal error");
- ws.WriteResponse (client, HttpStatusCode.InternalServerError, "no file");
- }
- } finally {
- // commented out because it breaks the connection after sending a hires photo
- // client.Close()
- }
- } else if (dbContainersRegex.IsMatch (path)) {
- int dbid = Int32.Parse (dbContainersRegex.Match (path).Groups [1].Value);
-
- Database db = revmgr.GetDatabase (clientRev, dbid);
- if (db == null) {
- ws.WriteResponse (client, HttpStatusCode.BadRequest, "invalid database id");
- return true;
- }
-
- ws.WriteResponse (client, db.ToAlbumsNode ());
- } else if (dbContainerItemsRegex.IsMatch (path)) {
- // DEBUG
- Console.WriteLine ("ContainerItems ! path=" + path);
-
- Match match = dbContainerItemsRegex.Match (path);
- int dbid = Int32.Parse (match.Groups [1].Value);
- int plid = Int32.Parse (match.Groups [2].Value);
-
- Database curdb = revmgr.GetDatabase (clientRev, dbid);
- if (curdb == null) {
- ws.WriteResponse (client, HttpStatusCode.BadRequest, "invalid database id");
- return true;
- }
-
- Album curpl = curdb.LookupAlbumById (plid);
- if (curdb == null) {
- ws.WriteResponse (client, HttpStatusCode.BadRequest, "invalid playlist id");
- return true;
- }
- // DEBUG
- Console.WriteLine("db and album ready!");
- ArrayList deletedIds = new ArrayList ();
- if (delta > 0) {
- Database olddb = revmgr.GetDatabase (clientRev - delta, dbid);
-
- if (olddb != null) {
- Album oldpl = olddb.LookupAlbumById (plid);
-
- if (oldpl != null) {
- IList<Photo> oldplPhotos = oldpl.Photos;
- for (int i = 0; i < oldplPhotos.Count; i++) {
- int id = oldpl.GetContainerId (i);
- if (curpl.LookupIndexByContainerId (id) < 0) {
- deletedIds.Add (id);
- }
- }
- }
- }
- }
- Console.WriteLine("About to send response... meta=" + query["meta"]);
- curpl.ToPhotosNode (query ["meta"].Split (',')).Dump ();
-
- ws.WriteResponse (client, curpl.ToPhotosNode (query ["meta"].Split (',')));
- //, (int []) deletedIds.ToArray (typeof (int))));
- } else if (path == "/update") {
- int retrev;
-
- lock (revmgr) {
- // if they have the current revision, wait for a change
- if (clientRev == revmgr.Current) {
- Monitor.Wait (revmgr);
- }
-
- retrev = revmgr.Current;
- }
-
- if (!running) {
- ws.WriteResponse (client, HttpStatusCode.NotFound, "server has been stopped");
- } else {
- ws.WriteResponse (client, GetUpdateNode (retrev));
- }
- } else {
- ws.WriteResponse (client, HttpStatusCode.Forbidden, "GO AWAY");
- }
-
- return true;
- }
-
- private ContentNode GetLoginNode (int id) {
- return new ContentNode ("dmap.loginresponse",
- new ContentNode ("dmap.status", 200),
- new ContentNode ("dmap.sessionid", id));
- }
-
- private ContentNode GetServerInfoNode () {
-
- return serverInfo.ToNode (databases.Count);
- }
-
- private ContentNode GetDatabasesNode () {
- ArrayList databaseNodes = new ArrayList ();
-
- List<Database> dbs = revmgr.GetRevision (revmgr.Current);
- if (dbs != null) {
- foreach (Database db in revmgr.GetRevision (revmgr.Current)) {
- databaseNodes.Add (db.ToDatabaseNode ());
- }
- }
-
- ContentNode node = new ContentNode ("dpap.serverdatabases",
- new ContentNode ("dmap.status", 200),
- new ContentNode ("dmap.updatetype", (byte) 0),
- new ContentNode ("dmap.specifiedtotalcount", databases.Count),
- new ContentNode ("dmap.returnedcount", databases.Count),
- new ContentNode ("dmap.listing", databaseNodes));
-
- return node;
- }
-
- private ContentNode GetUpdateNode (int revision) {
- return new ContentNode ("dmap.updateresponse",
- new ContentNode ("dmap.status", 200),
- new ContentNode ("dmap.serverrevision", revision));
- }
- }
-}
diff --git a/lib/dpap-sharp/lib/ServerInfo.cs b/lib/dpap-sharp/lib/ServerInfo.cs
deleted file mode 100644
index 1814d51..0000000
--- a/lib/dpap-sharp/lib/ServerInfo.cs
+++ /dev/null
@@ -1,104 +0,0 @@
-// ServerInfo.cs
-//
-// Authors:
-// Andrzej Wytyczak-Partyka <iapart at gmail.com>
-// James Willcox <snorp at snorp.net>
-//
-// Copyright (C) 2008 Andrzej Wytyczak-Partyka
-// Copyright (C) 2005 James Willcox <snorp at snorp.net>
-//
-// This program is free software; you can redistribute it and/or modify
-// it under the terms of the GNU General Public License as published by
-// the Free Software Foundation; either version 2 of the License, or
-// (at your option) any later version.
-//
-// This program is distributed in the hope that it will be useful,
-// but WITHOUT ANY WARRANTY; without even the implied warranty of
-// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-// GNU General Public License for more details.
-//
-// You should have received a copy of the GNU General Public License
-// along with this program; if not, write to the Free Software
-// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
-//
-//
-
-
-using System;
-using System.Text;
-using System.Net;
-
-namespace DPAP {
-
- public enum AuthenticationMethod : byte {
- None,
- UserAndPassword,
- Password,
- }
-
- internal class ServerInfo {
-
- private string name;
- private AuthenticationMethod auth_method;
- private bool supports_update;
-
- public string Name {
- get { return name; }
- set { name = value; }
- }
-
- public AuthenticationMethod AuthenticationMethod {
- get { return auth_method; }
- set { auth_method = value; }
- }
-
- public bool SupportsUpdate {
- get { return supports_update; }
- set { supports_update = value; }
- }
-
- internal static ServerInfo FromNode (ContentNode node) {
- ServerInfo info = new ServerInfo ();
-
- if (node.Name != "dmap.serverinforesponse")
- return null;
-
- foreach (ContentNode child in (node.Value as ContentNode [])) {
- switch (child.Name) {
- case "dmap.itemname":
- info.Name = (string) child.Value;
- break;
- case "dmap.authenticationmethod":
- info.AuthenticationMethod = (AuthenticationMethod) child.Value;
- break;
- case "dmap.supportsupdate":
- info.SupportsUpdate = (byte) child.Value == 1;
- break;
- }
- }
-
- return info;
- }
-
- internal ContentNode ToNode (int dbCount) {
- return new ContentNode ("dmap.serverinforesponse",
- new ContentNode ("dmap.status", 200),
- new ContentNode ("dmap.protocolversion", new Version (2, 0, 0)),
- new ContentNode ("dpap.protocolversion", new Version (1, 0, 1)),
- new ContentNode ("dmap.itemname", "photos"),
- new ContentNode ("dmap.loginrequired", (byte) 1),
- // new ContentNode ("dmap.authenticationmethod", (byte) auth_method),
- new ContentNode ("dmap.timeoutinterval", (int) Server.DefaultTimeout.TotalSeconds),
- new ContentNode ("dmap.supportsautologout", (byte) 1),
- // new ContentNode ("dmap.supportsupdate", (byte) 1),
- // new ContentNode ("dmap.supportspersistentids", (byte) 1),
- // new ContentNode ("dmap.supportsextensions", (byte) 1),
- // new ContentNode ("dmap.supportsbrowse", (byte) 1),
- // new ContentNode ("dmap.supportsquery", (byte) 1),
- new ContentNode ("dmap.supportsindex", (byte) 1),
- // new ContentNode ("dmap.supportsresolve", (byte) 0),
- new ContentNode ("dmap.databasescount", dbCount));
- }
-
- }
-}
diff --git a/lib/dpap-sharp/lib/User.cs b/lib/dpap-sharp/lib/User.cs
deleted file mode 100644
index 365d8ad..0000000
--- a/lib/dpap-sharp/lib/User.cs
+++ /dev/null
@@ -1,73 +0,0 @@
-// User.cs
-//
-// Author:
-// James Willcox <snorp at snorp.net>
-//
-// Copyright (C) 2005 James Willcox <snorp at snorp.net>
-//
-// This program is free software; you can redistribute it and/or modify
-// it under the terms of the GNU General Public License as published by
-// the Free Software Foundation; either version 2 of the License, or
-// (at your option) any later version.
-//
-// This program is distributed in the hope that it will be useful,
-// but WITHOUT ANY WARRANTY; without even the implied warranty of
-// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-// GNU General Public License for more details.
-//
-// You should have received a copy of the GNU General Public License
-// along with this program; if not, write to the Free Software
-// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
-//
-//
-
-using System;
-using System.Net;
-
-namespace DPAP {
-
- public delegate void UserHandler (object o, UserArgs args);
-
- public class UserArgs : EventArgs {
-
- private User user;
-
- public User User {
- get { return user; }
- }
-
- public UserArgs (User user) {
- this.user = user;
- }
- }
-
- public class User {
- private DateTime loginTime;
- private DateTime lastAction;
- private IPAddress address;
- private string user;
-
- public DateTime LoginTime {
- get { return loginTime; }
- }
-
- public DateTime LastActionTime {
- get { return lastAction; }
- internal set { lastAction = value; }
- }
-
- public IPAddress Address {
- get { return address; }
- }
-
- public string UserName {
- get { return user; }
- }
-
- internal User (DateTime loginTime, IPAddress address, string user) {
- this.loginTime = loginTime;
- this.address = address;
- this.user = user;
- }
- }
-}
diff --git a/lib/dpap-sharp/lib/Utility.cs b/lib/dpap-sharp/lib/Utility.cs
deleted file mode 100644
index 2b984e4..0000000
--- a/lib/dpap-sharp/lib/Utility.cs
+++ /dev/null
@@ -1,40 +0,0 @@
-// Utility.cs
-//
-// Author:
-// James Willcox <snorp at snorp.net>
-//
-// Copyright (C) 2005 James Willcox <snorp at snorp.net>
-//
-// This program is free software; you can redistribute it and/or modify
-// it under the terms of the GNU General Public License as published by
-// the Free Software Foundation; either version 2 of the License, or
-// (at your option) any later version.
-//
-// This program is distributed in the hope that it will be useful,
-// but WITHOUT ANY WARRANTY; without even the implied warranty of
-// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-// GNU General Public License for more details.
-//
-// You should have received a copy of the GNU General Public License
-// along with this program; if not, write to the Free Software
-// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
-//
-//
-
-using System;
-
-namespace DPAP {
-
- internal class Utility {
-
- private static DateTime epoch = new DateTime (1970, 1, 1).ToLocalTime ();
-
- public static DateTime ToDateTime (int time) {
- return epoch.AddSeconds (time);
- }
-
- public static int FromDateTime (DateTime time) {
- return (int) time.Subtract (epoch).TotalSeconds;
- }
- }
-}
diff --git a/lib/gio-sharp/Makefile.am b/lib/gio-sharp/Makefile.am
index b739437..bbab0a0 100644
--- a/lib/gio-sharp/Makefile.am
+++ b/lib/gio-sharp/Makefile.am
@@ -10,9 +10,10 @@ update:
cp fetch/generator/*.cs generator/
cp fetch/gio/*.custom \
fetch/gio/*.cs \
- fetch/gio/gio-api.raw \
+ fetch/gio/gio-api-2.22.raw \
fetch/gio/Gio.metadata \
fetch/gio/gtk-sharp.snk \
gio
+ mv gio/gio-api-2.22.raw gio/gio-api.raw
.PHONY: fetch update
diff --git a/lib/gio-sharp/Makefile.in b/lib/gio-sharp/Makefile.in
index cabc019..99e6e2d 100644
--- a/lib/gio-sharp/Makefile.in
+++ b/lib/gio-sharp/Makefile.in
@@ -38,8 +38,14 @@ DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in
ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
am__aclocal_m4_deps = $(top_srcdir)/build/m4/shave/shave.m4 \
$(top_srcdir)/build/m4/shamrock/expansions.m4 \
+ $(top_srcdir)/build/m4/shamrock/gnome-doc.m4 \
$(top_srcdir)/build/m4/shamrock/mono.m4 \
+ $(top_srcdir)/build/m4/shamrock/nunit.m4 \
$(top_srcdir)/build/m4/shamrock/programs.m4 \
+ $(top_srcdir)/build/m4/f-spot/flickrnet.m4 \
+ $(top_srcdir)/build/m4/f-spot/gnome-keyring-sharp.m4 \
+ $(top_srcdir)/build/m4/f-spot/gtk-sharp.m4 \
+ $(top_srcdir)/build/m4/f-spot/mono-addins.m4 \
$(top_srcdir)/acinclude.m4 $(top_srcdir)/configure.ac
am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
$(ACLOCAL_M4)
@@ -134,6 +140,8 @@ EXIF_SOVERSION = @EXIF_SOVERSION@
F77 = @F77@
FC = @FC@
FGREP = @FGREP@
+FLICKRNET_CFLAGS = @FLICKRNET_CFLAGS@
+FLICKRNET_LIBS = @FLICKRNET_LIBS@
F_CFLAGS = @F_CFLAGS@
F_LIBS = @F_LIBS@
GAPI2CODEGEN = @GAPI2CODEGEN@
@@ -147,6 +155,8 @@ GCONF_SHARP_LIBS = @GCONF_SHARP_LIBS@
GETTEXT_PACKAGE = @GETTEXT_PACKAGE@
GIO_CFLAGS = @GIO_CFLAGS@
GIO_LIBS = @GIO_LIBS@
+GLIBSHARP_2_12_7_CFLAGS = @GLIBSHARP_2_12_7_CFLAGS@
+GLIBSHARP_2_12_7_LIBS = @GLIBSHARP_2_12_7_LIBS@
GLIBSHARP_CFLAGS = @GLIBSHARP_CFLAGS@
GLIBSHARP_LIBS = @GLIBSHARP_LIBS@
GLIB_CFLAGS = @GLIB_CFLAGS@
@@ -162,6 +172,10 @@ GNOME_SHARP_CFLAGS = @GNOME_SHARP_CFLAGS@
GNOME_SHARP_LIBS = @GNOME_SHARP_LIBS@
GOBJECT_QUERY = @GOBJECT_QUERY@
GREP = @GREP@
+GTKSHARP_A11Y_CFLAGS = @GTKSHARP_A11Y_CFLAGS@
+GTKSHARP_A11Y_LIBS = @GTKSHARP_A11Y_LIBS@
+GTKSHARP_CFLAGS = @GTKSHARP_CFLAGS@
+GTKSHARP_LIBS = @GTKSHARP_LIBS@
HELP_DIR = @HELP_DIR@
ICONS_DIRECTORY = @ICONS_DIRECTORY@
INSTALL = @INSTALL@
@@ -175,14 +189,14 @@ INTLTOOL_EXTRACT = @INTLTOOL_EXTRACT@
INTLTOOL_MERGE = @INTLTOOL_MERGE@
INTLTOOL_PERL = @INTLTOOL_PERL@
INTLTOOL_UPDATE = @INTLTOOL_UPDATE@
+KEYRINGSHARP_CFLAGS = @KEYRINGSHARP_CFLAGS@
+KEYRINGSHARP_LIBS = @KEYRINGSHARP_LIBS@
LCMS_CFLAGS = @LCMS_CFLAGS@
LCMS_LIBS = @LCMS_LIBS@
LD = @LD@
LDFLAGS = @LDFLAGS@
LIBEXIF_VERSION_CHECK_CFLAGS = @LIBEXIF_VERSION_CHECK_CFLAGS@
LIBEXIF_VERSION_CHECK_LIBS = @LIBEXIF_VERSION_CHECK_LIBS@
-LIBGPHOTO2_CFLAGS = @LIBGPHOTO2_CFLAGS@
-LIBGPHOTO2_LIBS = @LIBGPHOTO2_LIBS@
LIBJPEG = @LIBJPEG@
LIBOBJS = @LIBOBJS@
LIBS = @LIBS@
@@ -197,6 +211,12 @@ MCS = @MCS@
MKDIR_P = @MKDIR_P@
MKINSTALLDIRS = @MKINSTALLDIRS@
MONO = @MONO@
+MONO_ADDINS_CFLAGS = @MONO_ADDINS_CFLAGS@
+MONO_ADDINS_GUI_CFLAGS = @MONO_ADDINS_GUI_CFLAGS@
+MONO_ADDINS_GUI_LIBS = @MONO_ADDINS_GUI_LIBS@
+MONO_ADDINS_LIBS = @MONO_ADDINS_LIBS@
+MONO_ADDINS_SETUP_CFLAGS = @MONO_ADDINS_SETUP_CFLAGS@
+MONO_ADDINS_SETUP_LIBS = @MONO_ADDINS_SETUP_LIBS@
MONO_MODULE_CFLAGS = @MONO_MODULE_CFLAGS@
MONO_MODULE_LIBS = @MONO_MODULE_LIBS@
MSGFMT = @MSGFMT@
@@ -207,7 +227,6 @@ NDESK_DBUS_LIBS = @NDESK_DBUS_LIBS@
NM = @NM@
NMEDIT = @NMEDIT@
NUNIT_CFLAGS = @NUNIT_CFLAGS@
-NUNIT_DEFINES = @NUNIT_DEFINES@
NUNIT_LIBS = @NUNIT_LIBS@
OBJC = @OBJC@
OBJDUMP = @OBJDUMP@
@@ -658,10 +677,11 @@ update:
cp fetch/generator/*.cs generator/
cp fetch/gio/*.custom \
fetch/gio/*.cs \
- fetch/gio/gio-api.raw \
+ fetch/gio/gio-api-2.22.raw \
fetch/gio/Gio.metadata \
fetch/gio/gtk-sharp.snk \
gio
+ mv gio/gio-api-2.22.raw gio/gio-api.raw
.PHONY: fetch update
diff --git a/lib/gio-sharp/generator/InterfaceGen.cs b/lib/gio-sharp/generator/InterfaceGen.cs
index 00cd892..85b93fa 100644
--- a/lib/gio-sharp/generator/InterfaceGen.cs
+++ b/lib/gio-sharp/generator/InterfaceGen.cs
@@ -363,7 +363,7 @@ namespace GtkSharp.Generation {
foreach (Method method in methods.Values) {
if (IgnoreMethod (method, this))
continue;
- method.GenerateDecl (sw);
+ method.GenerateDecl (sw, true);
}
foreach (Property prop in props.Values)
diff --git a/lib/gio-sharp/generator/Makefile.in b/lib/gio-sharp/generator/Makefile.in
index cf1f916..e83e957 100644
--- a/lib/gio-sharp/generator/Makefile.in
+++ b/lib/gio-sharp/generator/Makefile.in
@@ -14,6 +14,11 @@
# PARTICULAR PURPOSE.
@SET_MAKE@
+
+# Makefile.include
+# FSpot wide helper
+
+# Directories
VPATH = @srcdir@
pkgdatadir = $(datadir)/@PACKAGE@
pkgincludedir = $(includedir)/@PACKAGE@
@@ -39,8 +44,14 @@ subdir = lib/gio-sharp/generator
ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
am__aclocal_m4_deps = $(top_srcdir)/build/m4/shave/shave.m4 \
$(top_srcdir)/build/m4/shamrock/expansions.m4 \
+ $(top_srcdir)/build/m4/shamrock/gnome-doc.m4 \
$(top_srcdir)/build/m4/shamrock/mono.m4 \
+ $(top_srcdir)/build/m4/shamrock/nunit.m4 \
$(top_srcdir)/build/m4/shamrock/programs.m4 \
+ $(top_srcdir)/build/m4/f-spot/flickrnet.m4 \
+ $(top_srcdir)/build/m4/f-spot/gnome-keyring-sharp.m4 \
+ $(top_srcdir)/build/m4/f-spot/gtk-sharp.m4 \
+ $(top_srcdir)/build/m4/f-spot/mono-addins.m4 \
$(top_srcdir)/acinclude.m4 $(top_srcdir)/configure.ac
am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
$(ACLOCAL_M4)
@@ -95,6 +106,8 @@ EXIF_SOVERSION = @EXIF_SOVERSION@
F77 = @F77@
FC = @FC@
FGREP = @FGREP@
+FLICKRNET_CFLAGS = @FLICKRNET_CFLAGS@
+FLICKRNET_LIBS = @FLICKRNET_LIBS@
F_CFLAGS = @F_CFLAGS@
F_LIBS = @F_LIBS@
GAPI2CODEGEN = @GAPI2CODEGEN@
@@ -108,6 +121,8 @@ GCONF_SHARP_LIBS = @GCONF_SHARP_LIBS@
GETTEXT_PACKAGE = @GETTEXT_PACKAGE@
GIO_CFLAGS = @GIO_CFLAGS@
GIO_LIBS = @GIO_LIBS@
+GLIBSHARP_2_12_7_CFLAGS = @GLIBSHARP_2_12_7_CFLAGS@
+GLIBSHARP_2_12_7_LIBS = @GLIBSHARP_2_12_7_LIBS@
GLIBSHARP_CFLAGS = @GLIBSHARP_CFLAGS@
GLIBSHARP_LIBS = @GLIBSHARP_LIBS@
GLIB_CFLAGS = @GLIB_CFLAGS@
@@ -123,6 +138,10 @@ GNOME_SHARP_CFLAGS = @GNOME_SHARP_CFLAGS@
GNOME_SHARP_LIBS = @GNOME_SHARP_LIBS@
GOBJECT_QUERY = @GOBJECT_QUERY@
GREP = @GREP@
+GTKSHARP_A11Y_CFLAGS = @GTKSHARP_A11Y_CFLAGS@
+GTKSHARP_A11Y_LIBS = @GTKSHARP_A11Y_LIBS@
+GTKSHARP_CFLAGS = @GTKSHARP_CFLAGS@
+GTKSHARP_LIBS = @GTKSHARP_LIBS@
HELP_DIR = @HELP_DIR@
ICONS_DIRECTORY = @ICONS_DIRECTORY@
INSTALL = @INSTALL@
@@ -136,14 +155,14 @@ INTLTOOL_EXTRACT = @INTLTOOL_EXTRACT@
INTLTOOL_MERGE = @INTLTOOL_MERGE@
INTLTOOL_PERL = @INTLTOOL_PERL@
INTLTOOL_UPDATE = @INTLTOOL_UPDATE@
+KEYRINGSHARP_CFLAGS = @KEYRINGSHARP_CFLAGS@
+KEYRINGSHARP_LIBS = @KEYRINGSHARP_LIBS@
LCMS_CFLAGS = @LCMS_CFLAGS@
LCMS_LIBS = @LCMS_LIBS@
LD = @LD@
LDFLAGS = @LDFLAGS@
LIBEXIF_VERSION_CHECK_CFLAGS = @LIBEXIF_VERSION_CHECK_CFLAGS@
LIBEXIF_VERSION_CHECK_LIBS = @LIBEXIF_VERSION_CHECK_LIBS@
-LIBGPHOTO2_CFLAGS = @LIBGPHOTO2_CFLAGS@
-LIBGPHOTO2_LIBS = @LIBGPHOTO2_LIBS@
LIBJPEG = @LIBJPEG@
LIBOBJS = @LIBOBJS@
LIBS = @LIBS@
@@ -158,6 +177,12 @@ MCS = @MCS@
MKDIR_P = @MKDIR_P@
MKINSTALLDIRS = @MKINSTALLDIRS@
MONO = @MONO@
+MONO_ADDINS_CFLAGS = @MONO_ADDINS_CFLAGS@
+MONO_ADDINS_GUI_CFLAGS = @MONO_ADDINS_GUI_CFLAGS@
+MONO_ADDINS_GUI_LIBS = @MONO_ADDINS_GUI_LIBS@
+MONO_ADDINS_LIBS = @MONO_ADDINS_LIBS@
+MONO_ADDINS_SETUP_CFLAGS = @MONO_ADDINS_SETUP_CFLAGS@
+MONO_ADDINS_SETUP_LIBS = @MONO_ADDINS_SETUP_LIBS@
MONO_MODULE_CFLAGS = @MONO_MODULE_CFLAGS@
MONO_MODULE_LIBS = @MONO_MODULE_LIBS@
MSGFMT = @MSGFMT@
@@ -168,7 +193,6 @@ NDESK_DBUS_LIBS = @NDESK_DBUS_LIBS@
NM = @NM@
NMEDIT = @NMEDIT@
NUNIT_CFLAGS = @NUNIT_CFLAGS@
-NUNIT_DEFINES = @NUNIT_DEFINES@
NUNIT_LIBS = @NUNIT_LIBS@
OBJC = @OBJC@
OBJDUMP = @OBJDUMP@
@@ -260,24 +284,8 @@ target_alias = @target_alias@
top_build_prefix = @top_build_prefix@
top_builddir = @top_builddir@
top_srcdir = @top_srcdir@
-DIR_DOCS = $(top_builddir)/docs
-DIR_EXTENSIONS = $(top_builddir)/extensions
-DIR_GPHOTO2 = $(top_builddir)/lib/libgphoto2-sharp
-DIR_ICONS = $(top_builddir)/icons
-DIR_JPEGTRAN = $(top_builddir)/lib/libjpegtran
-DIR_KEYRING = $(top_builddir)/lib/gnome-keyring-sharp
-DIR_LIBFSPOT = $(top_builddir)/lib/libfspot
-DIR_SEMWEB = $(top_builddir)/lib/semweb
-DIR_SRC = $(top_builddir)/src
DIR_GIOSHARP = $(top_builddir)/lib/gio-sharp/gio
-DIR_GTKSHARPBEANS = $(top_builddir)/lib/gtk-sharp-beans
-DIR_UNIQUESHARP = $(top_builddir)/lib/unique-sharp/unique
-LINK_KEYRING = -r:$(DIR_KEYRING)/gnome-keyring-sharp.dll
-LINK_GPHOTO2 = -r:$(DIR_GPHOTO2)/libgphoto2-sharp.dll
-LINK_SEMWEB = -r:$(DIR_SEMWEB)/SemWeb.dll
LINK_GIOSHARP = -r:$(DIR_GIOSHARP)/gio-sharp.dll
-LINK_GTKSHARPBEANS = -r:$(DIR_GTKSHARPBEANS)/gtk-sharp-beans.dll
-LINK_UNIQUESHARP = -r:$(DIR_UNIQUESHARP)/unique-sharp.dll
CSC_FLAGS = -debug
CSC = $(MCS) $(CSC_FLAGS) -target:exe
CSC_LIB = $(MCS) $(CSC_FLAGS) -target:library
diff --git a/lib/gio-sharp/generator/Method.cs b/lib/gio-sharp/generator/Method.cs
index 76cd721..3ecf077 100644
--- a/lib/gio-sharp/generator/Method.cs
+++ b/lib/gio-sharp/generator/Method.cs
@@ -105,7 +105,12 @@ namespace GtkSharp.Generation {
}
}
- private void GenerateDeclCommon (StreamWriter sw, ClassBase implementor)
+ private void GenerateDeclCommon (StreamWriter sw, ClassBase implementor)
+ {
+ GenerateDeclCommon (sw, implementor, false);
+ }
+
+ private void GenerateDeclCommon (StreamWriter sw, ClassBase implementor, bool is_interface)
{
if (IsStatic)
sw.Write("static ");
@@ -116,7 +121,7 @@ namespace GtkSharp.Generation {
if (implementor != null)
dup = implementor.GetMethodRecursively (Name);
- if (Name == "ToString" && Parameters.Count == 0)
+ if (Name == "ToString" && Parameters.Count == 0 && !is_interface)
sw.Write("override ");
else if (Name == "GetGType" && container_type is ObjectGen)
sw.Write("new ");
@@ -146,7 +151,12 @@ namespace GtkSharp.Generation {
}
}
- public void GenerateDecl (StreamWriter sw)
+ public void GenerateDecl (StreamWriter sw)
+ {
+ GenerateDecl (sw, false);
+ }
+
+ public void GenerateDecl (StreamWriter sw, bool is_interface)
{
if (IsStatic)
return;
@@ -173,7 +183,7 @@ namespace GtkSharp.Generation {
else
{
sw.Write("\t\t");
- GenerateDeclCommon (sw, null);
+ GenerateDeclCommon (sw, null, is_interface);
sw.WriteLine (";");
}
diff --git a/lib/gio-sharp/gio/AppInfoAdapter.custom b/lib/gio-sharp/gio/AppInfoAdapter.custom
index 1c4a337..a57d95b 100644
--- a/lib/gio-sharp/gio/AppInfoAdapter.custom
+++ b/lib/gio-sharp/gio/AppInfoAdapter.custom
@@ -1,22 +1,30 @@
-// AppInfoAdapter.custom - customizations to GLib.AppInfoAdapter
//
-// Authors: Stephane Delcroix <stephane at delcroix.org>
+// AppInfoAdapter.custom
//
-// Copyright (c) 2008 Novell, Inc.
+// Author:
+// Stephane Delcroix <stephane at delcroix.org>
//
-// This program is free software; you can redistribute it and/or
-// modify it under the terms of version 2 of the Lesser GNU General
-// Public License as published by the Free Software Foundation.
+// Copyright (C) 2008 Novell, Inc.
//
-// This program is distributed in the hope that it will be useful,
-// but WITHOUT ANY WARRANTY; without even the implied warranty of
-// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-// Lesser General Public License for more details.
+// Permission is hereby granted, free of charge, to any person obtaining
+// a copy of this software and associated documentation files (the
+// "Software"), to deal in the Software without restriction, including
+// without limitation the rights to use, copy, modify, merge, publish,
+// distribute, sublicense, and/or sell copies of the Software, and to
+// permit persons to whom the Software is furnished to do so, subject to
+// the following conditions:
+//
+// The above copyright notice and this permission notice shall be
+// included in all copies or substantial portions of the Software.
+//
+// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
+// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
+// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
+// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
//
-// You should have received a copy of the GNU Lesser General Public
-// License along with this program; if not, write to the
-// Free Software Foundation, Inc., 59 Temple Place - Suite 330,
-// Boston, MA 02111-1307, USA.
[DllImport("libgio-2.0-0.dll")]
static extern IntPtr g_app_info_get_all();
diff --git a/lib/gio-sharp/gio/AssemblyInfo.cs b/lib/gio-sharp/gio/AssemblyInfo.cs
index a061da1..56378fd 100644
--- a/lib/gio-sharp/gio/AssemblyInfo.cs
+++ b/lib/gio-sharp/gio/AssemblyInfo.cs
@@ -3,5 +3,5 @@ using System.Runtime.CompilerServices;
[assembly:AssemblyVersion("2.14.0.0")]
[assembly:AssemblyDelaySign(false)]
-[assembly:AssemblyKeyFile("gtk-sharp.snk")]
+[assembly:AssemblyKeyFile("./gtk-sharp.snk")]
[assembly:GLib.IgnoreClassInitializers]
diff --git a/lib/gio-sharp/gio/File.custom b/lib/gio-sharp/gio/File.custom
index f764de7..23519f8 100644
--- a/lib/gio-sharp/gio/File.custom
+++ b/lib/gio-sharp/gio/File.custom
@@ -2,30 +2,31 @@
//
// Authors: Stephane Delcroix <stephane at delcroix.org>
//
-// Copyright (c) 2008 Novell, Inc.
+// Copyright (C) 2008 Novell, Inc.
//
-// This program is free software; you can redistribute it and/or
-// modify it under the terms of version 2 of the Lesser GNU General
-// Public License as published by the Free Software Foundation.
+// Permission is hereby granted, free of charge, to any person obtaining
+// a copy of this software and associated documentation files (the
+// "Software"), to deal in the Software without restriction, including
+// without limitation the rights to use, copy, modify, merge, publish,
+// distribute, sublicense, and/or sell copies of the Software, and to
+// permit persons to whom the Software is furnished to do so, subject to
+// the following conditions:
//
-// This program is distributed in the hope that it will be useful,
-// but WITHOUT ANY WARRANTY; without even the implied warranty of
-// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-// Lesser General Public License for more details.
+// The above copyright notice and this permission notice shall be
+// included in all copies or substantial portions of the Software.
+//
+// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
+// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
+// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
+// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
//
-// You should have received a copy of the GNU Lesser General Public
-// License along with this program; if not, write to the
-// Free Software Foundation, Inc., 59 Temple Place - Suite 330,
-// Boston, MA 02111-1307, USA.
bool Exists
{
get;
}
-System.Uri Uri
-{
- get;
-}
-
bool Delete();
diff --git a/lib/gio-sharp/gio/FileAdapter.custom b/lib/gio-sharp/gio/FileAdapter.custom
index bab7ab7..5ec0661 100644
--- a/lib/gio-sharp/gio/FileAdapter.custom
+++ b/lib/gio-sharp/gio/FileAdapter.custom
@@ -1,26 +1,33 @@
// FileAdapter.custom - customizations to GLib.FileAdapter
//
-// Authors: Stephane Delcroix <stephane at delcroix.org>
+// Author:
+// Stephane Delcroix <stephane at delcroix.org>
//
-// Copyright (c) 2008 Novell, Inc.
+// Copyright (C) 2008 Novell, Inc.
//
-// This program is free software; you can redistribute it and/or
-// modify it under the terms of version 2 of the Lesser GNU General
-// Public License as published by the Free Software Foundation.
+// Permission is hereby granted, free of charge, to any person obtaining
+// a copy of this software and associated documentation files (the
+// "Software"), to deal in the Software without restriction, including
+// without limitation the rights to use, copy, modify, merge, publish,
+// distribute, sublicense, and/or sell copies of the Software, and to
+// permit persons to whom the Software is furnished to do so, subject to
+// the following conditions:
//
-// This program is distributed in the hope that it will be useful,
-// but WITHOUT ANY WARRANTY; without even the implied warranty of
-// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-// Lesser General Public License for more details.
+// The above copyright notice and this permission notice shall be
+// included in all copies or substantial portions of the Software.
+//
+// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
+// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
+// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
+// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
//
-// You should have received a copy of the GNU Lesser General Public
-// License along with this program; if not, write to the
-// Free Software Foundation, Inc., 59 Temple Place - Suite 330,
-// Boston, MA 02111-1307, USA.
public override string ToString ()
{
- return Uri.ToString ();
+ return Uri;
}
public bool Exists {
@@ -32,15 +39,3 @@ public bool Delete ()
return Delete (null);
}
-[DllImport("libgio-2.0-0.dll")]
-static extern IntPtr g_file_get_uri(IntPtr raw);
-
-public System.Uri Uri {
- get {
- IntPtr raw_ret = g_file_get_uri(Handle);
- string ret = GLib.Marshaller.PtrToStringGFree(raw_ret);
- return new System.Uri (ret);
- }
-}
-
-
diff --git a/lib/gio-sharp/gio/FileEnumerator.custom b/lib/gio-sharp/gio/FileEnumerator.custom
index acd4832..4c8001a 100644
--- a/lib/gio-sharp/gio/FileEnumerator.custom
+++ b/lib/gio-sharp/gio/FileEnumerator.custom
@@ -4,19 +4,25 @@
//
// Copyright (c) 2008 Novell, Inc.
//
-// This program is free software; you can redistribute it and/or
-// modify it under the terms of version 2 of the Lesser GNU General
-// Public License as published by the Free Software Foundation.
+// Permission is hereby granted, free of charge, to any person obtaining
+// a copy of this software and associated documentation files (the
+// "Software"), to deal in the Software without restriction, including
+// without limitation the rights to use, copy, modify, merge, publish,
+// distribute, sublicense, and/or sell copies of the Software, and to
+// permit persons to whom the Software is furnished to do so, subject to
+// the following conditions:
//
-// This program is distributed in the hope that it will be useful,
-// but WITHOUT ANY WARRANTY; without even the implied warranty of
-// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-// Lesser General Public License for more details.
+// The above copyright notice and this permission notice shall be
+// included in all copies or substantial portions of the Software.
+//
+// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
+// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
+// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
+// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
//
-// You should have received a copy of the GNU Lesser General Public
-// License along with this program; if not, write to the
-// Free Software Foundation, Inc., 59 Temple Place - Suite 330,
-// Boston, MA 02111-1307, USA.
public IEnumerator GetEnumerator ()
{
diff --git a/lib/gio-sharp/gio/FileFactory.cs b/lib/gio-sharp/gio/FileFactory.cs
index 8fa3a58..8a5661c 100644
--- a/lib/gio-sharp/gio/FileFactory.cs
+++ b/lib/gio-sharp/gio/FileFactory.cs
@@ -6,19 +6,25 @@
//
// Copyright (c) 2008 Stephane Delcroix
//
-// This program is free software; you can redistribute it and/or
-// modify it under the terms of version 2 of the Lesser GNU General
-// Public License as published by the Free Software Foundation.
+// Permission is hereby granted, free of charge, to any person obtaining
+// a copy of this software and associated documentation files (the
+// "Software"), to deal in the Software without restriction, including
+// without limitation the rights to use, copy, modify, merge, publish,
+// distribute, sublicense, and/or sell copies of the Software, and to
+// permit persons to whom the Software is furnished to do so, subject to
+// the following conditions:
//
-// This program is distributed in the hope that it will be useful,
-// but WITHOUT ANY WARRANTY; without even the implied warranty of
-// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-// Lesser General Public License for more details.
+// The above copyright notice and this permission notice shall be
+// included in all copies or substantial portions of the Software.
+//
+// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
+// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
+// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
+// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
//
-// You should have received a copy of the GNU Lesser General Public
-// License along with this program; if not, write to the
-// Free Software Foundation, Inc., 59 Temple Place - Suite 330,
-// Boston, MA 02111-1307, USA.
using System;
using System.Runtime.InteropServices;
diff --git a/lib/gio-sharp/gio/FileInfo.custom b/lib/gio-sharp/gio/FileInfo.custom
new file mode 100644
index 0000000..9fdeb3e
--- /dev/null
+++ b/lib/gio-sharp/gio/FileInfo.custom
@@ -0,0 +1,28 @@
+// FileInfo.custom - customizations to GLib.FileInfo
+//
+// Authors: Ruben Vermeersch <ruben at savanne.be>
+//
+// Permission is hereby granted, free of charge, to any person obtaining
+// a copy of this software and associated documentation files (the
+// "Software"), to deal in the Software without restriction, including
+// without limitation the rights to use, copy, modify, merge, publish,
+// distribute, sublicense, and/or sell copies of the Software, and to
+// permit persons to whom the Software is furnished to do so, subject to
+// the following conditions:
+//
+// The above copyright notice and this permission notice shall be
+// included in all copies or substantial portions of the Software.
+//
+// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
+// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
+// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
+// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+//
+
+~FileInfo ()
+{
+ Dispose ();
+}
diff --git a/lib/gio-sharp/gio/Gio.metadata b/lib/gio-sharp/gio/Gio.metadata
index 81716fc..ab82fbf 100644
--- a/lib/gio-sharp/gio/Gio.metadata
+++ b/lib/gio-sharp/gio/Gio.metadata
@@ -12,7 +12,6 @@
<attr path="/api/namespace/interface[@cname='GAppInfo']/method[@name='SupportsUris']" name="name">GetSupportsUris</attr>
<attr path="/api/namespace/interface[@cname='GDrive']" name="consume_only">1</attr>
<attr path="/api/namespace/interface[@cname='GFile']/method[@name='GetParseName']" name="name">GetParsedName</attr>
- <attr path="/api/namespace/interface[@cname='GFile']/method[@name='GetUri']" name="hidden">1</attr>
<attr path="/api/namespace/interface[@cname='GLoadableIcon']/method[@name='LoadAsync']/*/*[@type='GAsyncReadyCallback']" name="scope">async</attr>
<attr path="/api/namespace/interface/method/*/*[@type='GAsyncReadyCallback']" name="scope">async</attr>
<attr path="/api/namespace/interface[@cname='GMount']" name="consume_only">1</attr>
@@ -58,4 +57,23 @@
<attr path="/api/namespace/object[@cname='GVolumeMonitor']/method[@name='GetConnectedDrives']/return-type" name="element_type">GDrive*</attr>
<attr path="/api/namespace/object[@cname='GVolumeMonitor']/method[@name='GetConnectedDrives']/return-type" name="owned">true</attr>
<attr path="/api/namespace/struct[@cname='GFileAttributeInfoList']/field[@name='Infos']" name="array">1</attr>
+
+ <attr path="/api/namespace/enum[@cname='GSocketFamily']" name="hidden">1</attr>
+ <attr path="/api/namespace/enum[@cname='GSocketMsgFlags']" name="hidden">1</attr>
+ <attr path="/api/namespace/enum[@cname='GSocketProtocol']" name="hidden">1</attr>
+ <attr path="/api/namespace/enum[@cname='GSocketType']" name="hidden">1</attr>
+ <attr path="/api/namespace/enum[@cname='GResolverError']" name="hidden">1</attr>
+ <attr path="/api/namespace/struct[@cname='GResolver']" name="hidden">1</attr>
+ <attr path="/api/namespace/struct[@cname='GSocket']" name="hidden">1</attr>
+ <attr path="/api/namespace/struct[@cname='GSocketAddress']" name="hidden">1</attr>
+ <attr path="/api/namespace/struct[@cname='GSocketAddressEnumerator']" name="hidden">1</attr>
+ <attr path="/api/namespace/struct[@cname='GSocketClient']" name="hidden">1</attr>
+ <attr path="/api/namespace/struct[@cname='GSocketConnectable']" name="hidden">1</attr>
+ <attr path="/api/namespace/struct[@cname='GSocketConnection']" name="hidden">1</attr>
+ <attr path="/api/namespace/struct[@cname='GSocketControlMessage']" name="hidden">1</attr>
+ <attr path="/api/namespace/struct[@cname='GSocketListener']" name="hidden">1</attr>
+ <attr path="/api/namespace/struct[@cname='GSocketService']" name="hidden">1</attr>
+ <attr path="/api/namespace/struct[@cname='GThreadedSocketService']" name="hidden">1</attr>
+ <attr path="/api/namespace/struct[@cname='GTcpConnection']" name="hidden">1</attr>
+
</metadata>
diff --git a/lib/gio-sharp/gio/GioStream.cs b/lib/gio-sharp/gio/GioStream.cs
index 03d1696..b0be69e 100644
--- a/lib/gio-sharp/gio/GioStream.cs
+++ b/lib/gio-sharp/gio/GioStream.cs
@@ -1,32 +1,33 @@
-/*
- * GioStream.cs: provide a System.IO.Stream api to [Input|Output]Streams
- *
- * Author(s):
- * Stephane Delcroix (stephane at delcroix.org)
- *
- * Copyright (c) 2008 Novell, Inc.
- *
- *
- * Permission is hereby granted, free of charge, to any person obtaining
- * a copy of this software and associated documentation files (the
- * "Software"), to deal in the Software without restriction, including
- * without limitation the rights to use, copy, modify, merge, publish,
- * distribute, sublicense, and/or sell copies of the Software, and to
- * permit persons to whom the Software is furnished to do so, subject to
- * the following conditions:
- *
- * The above copyright notice and this permission notice shall be
- * included in all copies or substantial portions of the Software.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
- * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
- * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
- * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
- * LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
- * OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
- * WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
- *
- */
+//
+// GioStream.cs - provide a System.IO.Stream api to [Input|Output]Streams
+//
+// Author(s):
+// Stephane Delcroix <stephane at delcroix.org>
+// Gabriel Burt <gabriel.burt at gmail.com>
+//
+// Copyright (c) 2008 Stephane Delcroix
+// Copyright (c) 2010 Novell, Inc.
+//
+// Permission is hereby granted, free of charge, to any person obtaining
+// a copy of this software and associated documentation files (the
+// "Software"), to deal in the Software without restriction, including
+// without limitation the rights to use, copy, modify, merge, publish,
+// distribute, sublicense, and/or sell copies of the Software, and to
+// permit persons to whom the Software is furnished to do so, subject to
+// the following conditions:
+//
+// The above copyright notice and this permission notice shall be
+// included in all copies or substantial portions of the Software.
+//
+// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
+// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
+// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
+// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+//
+
using System;
namespace GLib
@@ -63,6 +64,16 @@ namespace GLib
can_seek = stream is Seekable && (stream as Seekable).CanSeek;
}
+#if GIO_SHARP_2_22
+ public GioStream (IOStream stream)
+ {
+ this.stream = stream;
+ can_read = true;
+ can_write = true;
+ can_seek = stream is Seekable && (stream as Seekable).CanSeek;
+ }
+#endif
+
public override bool CanSeek {
get { return can_seek; }
}
@@ -90,6 +101,12 @@ namespace GLib
FileInfo info = (stream as FileOutputStream).QueryInfo ("standard::size", null);
return info.Size;
}
+#if GIO_SHARP_2_22
+ if (stream is FileIOStream) {
+ FileInfo info = (stream as FileIOStream).QueryInfo ("standard::size", null);
+ return info.Size;
+ }
+#endif
throw new NotImplementedException (String.Format ("not implemented for {0} streams", stream.GetType()));
}
}
@@ -127,7 +144,13 @@ namespace GLib
throw new NotSupportedException ("The stream does not support reading");
if (is_disposed)
throw new ObjectDisposedException ("The stream is closed");
- InputStream input_stream = stream as InputStream;
+ InputStream input_stream = null;
+ if (stream is InputStream)
+ input_stream = stream as InputStream;
+#if GIO_SHARP_2_22
+ else if (stream is IOStream)
+ input_stream = (stream as IOStream).InputStream;
+#endif
if (input_stream == null)
throw new System.Exception ("this shouldn't happen");
@@ -155,7 +178,13 @@ namespace GLib
throw new NotSupportedException ("The stream does not support writing");
if (is_disposed)
throw new ObjectDisposedException ("The stream is closed");
- OutputStream output_stream = stream as OutputStream;
+ OutputStream output_stream = null;
+ if (stream is OutputStream)
+ output_stream = stream as OutputStream;
+#if GIO_SHARP_2_22
+ else if (stream is IOStream)
+ output_stream = (stream as IOStream).OutputStream;
+#endif
if (output_stream == null)
throw new System.Exception ("this shouldn't happen");
if (offset == 0) {
@@ -198,9 +227,16 @@ namespace GLib
{
if (!CanSeek || !CanWrite)
throw new NotSupportedException ("This stream doesn't support seeking");
+
+ var seekable = stream as Seekable;
+
+ if (!seekable.CanTruncate ())
+ throw new NotSupportedException ("This stream doesn't support truncating");
+
if (is_disposed)
throw new ObjectDisposedException ("The stream is closed");
- throw new NotImplementedException ();
+
+ seekable.Truncate (value, null);
}
public override void Close ()
@@ -209,6 +245,10 @@ namespace GLib
(stream as InputStream).Close (null);
if (stream is OutputStream)
(stream as OutputStream).Close (null);
+#if GIO_SHARP_2_22
+ if (stream is IOStream)
+ (stream as IOStream).Close (null);
+#endif
is_disposed = true;
}
}
diff --git a/lib/gio-sharp/gio/Makefile.am b/lib/gio-sharp/gio/Makefile.am
index 32c0293..19ecb46 100644
--- a/lib/gio-sharp/gio/Makefile.am
+++ b/lib/gio-sharp/gio/Makefile.am
@@ -12,7 +12,8 @@ CUSTOMS = \
$(srcdir)/AppInfoAdapter.custom \
$(srcdir)/FileAdapter.custom \
$(srcdir)/File.custom \
- $(srcdir)/FileEnumerator.custom
+ $(srcdir)/FileEnumerator.custom \
+ $(srcdir)/FileInfo.custom
SNK = $(srcdir)/snk
@@ -39,7 +40,7 @@ gtk-sharp.snk: $(SNK)
gio-sharp.dll: generated/File.cs $(SRCS) gtk-sharp.snk
@echo -e "\n*** Building $@"
- $(CSC) -target:library -out:$@ $(UNSAFE) $(DEBUG) $(ASSEMBLIES) $(SRCS) generated/*.cs
+ $(CSC) -d:GIO_SHARP_2_22 -target:library -out:$@ $(UNSAFE) $(DEBUG) $(ASSEMBLIES) $(SRCS) generated/*.cs
assemblydir = $(pkglibdir)
assembly_DATA = \
diff --git a/lib/gio-sharp/gio/Makefile.in b/lib/gio-sharp/gio/Makefile.in
index d50f8b1..b6a8550 100644
--- a/lib/gio-sharp/gio/Makefile.in
+++ b/lib/gio-sharp/gio/Makefile.in
@@ -15,6 +15,11 @@
@SET_MAKE@
+# Makefile.include
+# FSpot wide helper
+
+# Directories
+
VPATH = @srcdir@
pkgdatadir = $(datadir)/@PACKAGE@
pkgincludedir = $(includedir)/@PACKAGE@
@@ -40,8 +45,14 @@ subdir = lib/gio-sharp/gio
ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
am__aclocal_m4_deps = $(top_srcdir)/build/m4/shave/shave.m4 \
$(top_srcdir)/build/m4/shamrock/expansions.m4 \
+ $(top_srcdir)/build/m4/shamrock/gnome-doc.m4 \
$(top_srcdir)/build/m4/shamrock/mono.m4 \
+ $(top_srcdir)/build/m4/shamrock/nunit.m4 \
$(top_srcdir)/build/m4/shamrock/programs.m4 \
+ $(top_srcdir)/build/m4/f-spot/flickrnet.m4 \
+ $(top_srcdir)/build/m4/f-spot/gnome-keyring-sharp.m4 \
+ $(top_srcdir)/build/m4/f-spot/gtk-sharp.m4 \
+ $(top_srcdir)/build/m4/f-spot/mono-addins.m4 \
$(top_srcdir)/acinclude.m4 $(top_srcdir)/configure.ac
am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
$(ACLOCAL_M4)
@@ -119,6 +130,8 @@ EXIF_SOVERSION = @EXIF_SOVERSION@
F77 = @F77@
FC = @FC@
FGREP = @FGREP@
+FLICKRNET_CFLAGS = @FLICKRNET_CFLAGS@
+FLICKRNET_LIBS = @FLICKRNET_LIBS@
F_CFLAGS = @F_CFLAGS@
F_LIBS = @F_LIBS@
GAPI2CODEGEN = @GAPI2CODEGEN@
@@ -132,6 +145,8 @@ GCONF_SHARP_LIBS = @GCONF_SHARP_LIBS@
GETTEXT_PACKAGE = @GETTEXT_PACKAGE@
GIO_CFLAGS = @GIO_CFLAGS@
GIO_LIBS = @GIO_LIBS@
+GLIBSHARP_2_12_7_CFLAGS = @GLIBSHARP_2_12_7_CFLAGS@
+GLIBSHARP_2_12_7_LIBS = @GLIBSHARP_2_12_7_LIBS@
GLIBSHARP_CFLAGS = @GLIBSHARP_CFLAGS@
GLIBSHARP_LIBS = @GLIBSHARP_LIBS@
GLIB_CFLAGS = @GLIB_CFLAGS@
@@ -147,6 +162,10 @@ GNOME_SHARP_CFLAGS = @GNOME_SHARP_CFLAGS@
GNOME_SHARP_LIBS = @GNOME_SHARP_LIBS@
GOBJECT_QUERY = @GOBJECT_QUERY@
GREP = @GREP@
+GTKSHARP_A11Y_CFLAGS = @GTKSHARP_A11Y_CFLAGS@
+GTKSHARP_A11Y_LIBS = @GTKSHARP_A11Y_LIBS@
+GTKSHARP_CFLAGS = @GTKSHARP_CFLAGS@
+GTKSHARP_LIBS = @GTKSHARP_LIBS@
HELP_DIR = @HELP_DIR@
ICONS_DIRECTORY = @ICONS_DIRECTORY@
INSTALL = @INSTALL@
@@ -160,14 +179,14 @@ INTLTOOL_EXTRACT = @INTLTOOL_EXTRACT@
INTLTOOL_MERGE = @INTLTOOL_MERGE@
INTLTOOL_PERL = @INTLTOOL_PERL@
INTLTOOL_UPDATE = @INTLTOOL_UPDATE@
+KEYRINGSHARP_CFLAGS = @KEYRINGSHARP_CFLAGS@
+KEYRINGSHARP_LIBS = @KEYRINGSHARP_LIBS@
LCMS_CFLAGS = @LCMS_CFLAGS@
LCMS_LIBS = @LCMS_LIBS@
LD = @LD@
LDFLAGS = @LDFLAGS@
LIBEXIF_VERSION_CHECK_CFLAGS = @LIBEXIF_VERSION_CHECK_CFLAGS@
LIBEXIF_VERSION_CHECK_LIBS = @LIBEXIF_VERSION_CHECK_LIBS@
-LIBGPHOTO2_CFLAGS = @LIBGPHOTO2_CFLAGS@
-LIBGPHOTO2_LIBS = @LIBGPHOTO2_LIBS@
LIBJPEG = @LIBJPEG@
LIBOBJS = @LIBOBJS@
LIBS = @LIBS@
@@ -182,6 +201,12 @@ MCS = @MCS@
MKDIR_P = @MKDIR_P@
MKINSTALLDIRS = @MKINSTALLDIRS@
MONO = @MONO@
+MONO_ADDINS_CFLAGS = @MONO_ADDINS_CFLAGS@
+MONO_ADDINS_GUI_CFLAGS = @MONO_ADDINS_GUI_CFLAGS@
+MONO_ADDINS_GUI_LIBS = @MONO_ADDINS_GUI_LIBS@
+MONO_ADDINS_LIBS = @MONO_ADDINS_LIBS@
+MONO_ADDINS_SETUP_CFLAGS = @MONO_ADDINS_SETUP_CFLAGS@
+MONO_ADDINS_SETUP_LIBS = @MONO_ADDINS_SETUP_LIBS@
MONO_MODULE_CFLAGS = @MONO_MODULE_CFLAGS@
MONO_MODULE_LIBS = @MONO_MODULE_LIBS@
MSGFMT = @MSGFMT@
@@ -192,7 +217,6 @@ NDESK_DBUS_LIBS = @NDESK_DBUS_LIBS@
NM = @NM@
NMEDIT = @NMEDIT@
NUNIT_CFLAGS = @NUNIT_CFLAGS@
-NUNIT_DEFINES = @NUNIT_DEFINES@
NUNIT_LIBS = @NUNIT_LIBS@
OBJC = @OBJC@
OBJDUMP = @OBJDUMP@
@@ -284,24 +308,8 @@ target_alias = @target_alias@
top_build_prefix = @top_build_prefix@
top_builddir = @top_builddir@
top_srcdir = @top_srcdir@
-DIR_DOCS = $(top_builddir)/docs
-DIR_EXTENSIONS = $(top_builddir)/extensions
-DIR_GPHOTO2 = $(top_builddir)/lib/libgphoto2-sharp
-DIR_ICONS = $(top_builddir)/icons
-DIR_JPEGTRAN = $(top_builddir)/lib/libjpegtran
-DIR_KEYRING = $(top_builddir)/lib/gnome-keyring-sharp
-DIR_LIBFSPOT = $(top_builddir)/lib/libfspot
-DIR_SEMWEB = $(top_builddir)/lib/semweb
-DIR_SRC = $(top_builddir)/src
DIR_GIOSHARP = $(top_builddir)/lib/gio-sharp/gio
-DIR_GTKSHARPBEANS = $(top_builddir)/lib/gtk-sharp-beans
-DIR_UNIQUESHARP = $(top_builddir)/lib/unique-sharp/unique
-LINK_KEYRING = -r:$(DIR_KEYRING)/gnome-keyring-sharp.dll
-LINK_GPHOTO2 = -r:$(DIR_GPHOTO2)/libgphoto2-sharp.dll
-LINK_SEMWEB = -r:$(DIR_SEMWEB)/SemWeb.dll
LINK_GIOSHARP = -r:$(DIR_GIOSHARP)/gio-sharp.dll
-LINK_GTKSHARPBEANS = -r:$(DIR_GTKSHARPBEANS)/gtk-sharp-beans.dll
-LINK_UNIQUESHARP = -r:$(DIR_UNIQUESHARP)/unique-sharp.dll
CSC_FLAGS = -debug
CSC = $(MCS) $(CSC_FLAGS) -target:exe
CSC_LIB = $(MCS) $(CSC_FLAGS) -target:library
@@ -318,7 +326,8 @@ CUSTOMS = \
$(srcdir)/AppInfoAdapter.custom \
$(srcdir)/FileAdapter.custom \
$(srcdir)/File.custom \
- $(srcdir)/FileEnumerator.custom
+ $(srcdir)/FileEnumerator.custom \
+ $(srcdir)/FileInfo.custom
SNK = $(srcdir)/snk
ASSEMBLIES = \
@@ -577,7 +586,7 @@ gtk-sharp.snk: $(SNK)
gio-sharp.dll: generated/File.cs $(SRCS) gtk-sharp.snk
@echo -e "\n*** Building $@"
- $(CSC) -target:library -out:$@ $(UNSAFE) $(DEBUG) $(ASSEMBLIES) $(SRCS) generated/*.cs
+ $(CSC) -d:GIO_SHARP_2_22 -target:library -out:$@ $(UNSAFE) $(DEBUG) $(ASSEMBLIES) $(SRCS) generated/*.cs
# 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/lib/gio-sharp/gio/gio-api.raw b/lib/gio-sharp/gio/gio-api.raw
index e2c4e01..450fa73 100644
--- a/lib/gio-sharp/gio/gio-api.raw
+++ b/lib/gio-sharp/gio/gio-api.raw
@@ -30,6 +30,16 @@
<member cname="G_DATA_STREAM_NEWLINE_TYPE_CR_LF" name="CrLf" />
<member cname="G_DATA_STREAM_NEWLINE_TYPE_ANY" name="Any" />
</enum>
+ <enum name="DriveStartFlags" cname="GDriveStartFlags" gtype="g_drive_start_flags_get_type" type="enum">
+ <member cname="G_DRIVE_START_NONE" name="None" />
+ </enum>
+ <enum name="DriveStartStopType" cname="GDriveStartStopType" gtype="g_drive_start_stop_type_get_type" type="enum">
+ <member cname="G_DRIVE_START_STOP_TYPE_UNKNOWN" name="Unknown" />
+ <member cname="G_DRIVE_START_STOP_TYPE_SHUTDOWN" name="Shutdown" />
+ <member cname="G_DRIVE_START_STOP_TYPE_NETWORK" name="Network" />
+ <member cname="G_DRIVE_START_STOP_TYPE_MULTIDISK" name="Multidisk" />
+ <member cname="G_DRIVE_START_STOP_TYPE_PASSWORD" name="Password" />
+ </enum>
<enum name="EmblemOrigin" cname="GEmblemOrigin" gtype="g_emblem_origin_get_type" type="enum">
<member cname="G_EMBLEM_ORIGIN_UNKNOWN" name="Unknown" />
<member cname="G_EMBLEM_ORIGIN_DEVICE" name="Device" />
@@ -56,6 +66,7 @@
<member cname="G_FILE_ATTRIBUTE_TYPE_UINT64" name="Uint64" />
<member cname="G_FILE_ATTRIBUTE_TYPE_INT64" name="Int64" />
<member cname="G_FILE_ATTRIBUTE_TYPE_OBJECT" name="Object" />
+ <member cname="G_FILE_ATTRIBUTE_TYPE_STRINGV" name="Stringv" />
</enum>
<enum name="FileCopyFlags" cname="GFileCopyFlags" gtype="g_file_copy_flags_get_type" type="flags">
<member cname="G_FILE_COPY_NONE" name="None" />
@@ -64,10 +75,12 @@
<member cname="G_FILE_COPY_NOFOLLOW_SYMLINKS" name="NofollowSymlinks" value="1 << 2" />
<member cname="G_FILE_COPY_ALL_METADATA" name="AllMetadata" value="1 << 3" />
<member cname="G_FILE_COPY_NO_FALLBACK_FOR_MOVE" name="NoFallbackForMove" value="1 << 4" />
+ <member cname="G_FILE_COPY_TARGET_DEFAULT_PERMS" name="TargetDefaultPerms" value="1 << 5" />
</enum>
<enum name="FileCreateFlags" cname="GFileCreateFlags" gtype="g_file_create_flags_get_type" type="flags">
<member cname="G_FILE_CREATE_NONE" name="None" />
<member cname="G_FILE_CREATE_PRIVATE" name="Private" value="1 << 0" />
+ <member cname="G_FILE_CREATE_REPLACE_DESTINATION" name="ReplaceDestination" value="1 << 1" />
</enum>
<enum name="FileMonitorEvent" cname="GFileMonitorEvent" gtype="g_file_monitor_event_get_type" type="enum">
<member cname="G_FILE_MONITOR_EVENT_CHANGED" name="Changed" />
@@ -132,6 +145,9 @@
<member cname="G_IO_ERROR_HOST_NOT_FOUND" name="HostNotFound" />
<member cname="G_IO_ERROR_WOULD_MERGE" name="WouldMerge" />
<member cname="G_IO_ERROR_FAILED_HANDLED" name="FailedHandled" />
+ <member cname="G_IO_ERROR_TOO_MANY_OPEN_FILES" name="TooManyOpenFiles" />
+ <member cname="G_IO_ERROR_NOT_INITIALIZED" name="NotInitialized" />
+ <member cname="G_IO_ERROR_ADDRESS_IN_USE" name="AddressInUse" />
</enum>
<enum name="MountMountFlags" cname="GMountMountFlags" gtype="g_mount_mount_flags_get_type" type="enum">
<member cname="G_MOUNT_MOUNT_NONE" name="None" />
@@ -155,6 +171,36 @@
<member cname="G_PASSWORD_SAVE_FOR_SESSION" name="ForSession" />
<member cname="G_PASSWORD_SAVE_PERMANENTLY" name="Permanently" />
</enum>
+ <enum name="ResolverError" cname="GResolverError" gtype="g_resolver_error_get_type" type="enum">
+ <member cname="G_RESOLVER_ERROR_NOT_FOUND" name="NotFound" />
+ <member cname="G_RESOLVER_ERROR_TEMPORARY_FAILURE" name="TemporaryFailure" />
+ <member cname="G_RESOLVER_ERROR_INTERNAL" name="Internal" />
+ </enum>
+ <enum name="SocketFamily" cname="GSocketFamily" gtype="g_socket_family_get_type" type="enum">
+ <member cname="G_SOCKET_FAMILY_INVALID" name="Invalid" />
+ <member cname="G_SOCKET_FAMILY_UNIX" name="Unix" value="GLIB_SYSDEF_AF_UNIX" />
+ <member cname="G_SOCKET_FAMILY_IPV4" name="Ipv4" value="GLIB_SYSDEF_AF_INET" />
+ <member cname="G_SOCKET_FAMILY_IPV6" name="Ipv6" value="GLIB_SYSDEF_AF_INET6" />
+ </enum>
+ <enum name="SocketMsgFlags" cname="GSocketMsgFlags" gtype="g_socket_msg_flags_get_type" type="enum">
+ <member cname="G_SOCKET_MSG_NONE" name="None" />
+ <member cname="G_SOCKET_MSG_OOB" name="Oob" value="GLIB_SYSDEF_MSG_OOB" />
+ <member cname="G_SOCKET_MSG_PEEK" name="Peek" value="GLIB_SYSDEF_MSG_PEEK" />
+ <member cname="G_SOCKET_MSG_DONTROUTE" name="Dontroute" value="GLIB_SYSDEF_MSG_DONTROUTE" />
+ </enum>
+ <enum name="SocketProtocol" cname="GSocketProtocol" gtype="g_socket_protocol_get_type" type="enum">
+ <member cname="G_SOCKET_PROTOCOL_UNKNOWN" name="Unknown" value="-1" />
+ <member cname="G_SOCKET_PROTOCOL_DEFAULT" name="Default" />
+ <member cname="G_SOCKET_PROTOCOL_TCP" name="Tcp" value="6" />
+ <member cname="G_SOCKET_PROTOCOL_UDP" name="Udp" value="17" />
+ <member cname="G_SOCKET_PROTOCOL_SCTP" name="Sctp" value="132" />
+ </enum>
+ <enum name="SocketType" cname="GSocketType" gtype="g_socket_type_get_type" type="enum">
+ <member cname="G_SOCKET_TYPE_INVALID" name="Invalid" />
+ <member cname="G_SOCKET_TYPE_STREAM" name="Stream" />
+ <member cname="G_SOCKET_TYPE_DATAGRAM" name="Datagram" />
+ <member cname="G_SOCKET_TYPE_SEQPACKET" name="Seqpacket" />
+ </enum>
<callback name="AsyncReadyCallback" cname="GAsyncReadyCallback">
<return-type type="void" />
<parameters>
@@ -202,6 +248,14 @@
<parameter type="GCancellable*" name="cancellable" />
</parameters>
</callback>
+ <callback name="SocketSourceFunc" cname="GSocketSourceFunc">
+ <return-type type="gboolean" />
+ <parameters>
+ <parameter type="GSocket*" name="socket" />
+ <parameter type="GIOCondition" name="condition" />
+ <parameter type="gpointer" name="user_data" />
+ </parameters>
+ </callback>
<interface name="AppInfo" cname="GAppInfo">
<virtual_method name="Dup" cname="dup">
<return-type type="GAppInfo*" />
@@ -296,6 +350,18 @@
<parameter type="GError**" name="error" />
</parameters>
</virtual_method>
+ <virtual_method name="CanDelete" cname="can_delete">
+ <return-type type="gboolean" />
+ <parameters>
+ <parameter type="GAppInfo*" name="appinfo" />
+ </parameters>
+ </virtual_method>
+ <virtual_method name="DoDelete" cname="do_delete">
+ <return-type type="gboolean" />
+ <parameters>
+ <parameter type="GAppInfo*" name="appinfo" />
+ </parameters>
+ </virtual_method>
<method name="AddSupportsType" cname="g_app_info_add_supports_type">
<return-type type="gboolean" />
<parameters>
@@ -303,6 +369,9 @@
<parameter type="GError**" name="error" />
</parameters>
</method>
+ <method name="CanDelete" cname="g_app_info_can_delete">
+ <return-type type="gboolean" />
+ </method>
<method name="CanRemoveSupportsType" cname="g_app_info_can_remove_supports_type">
<return-type type="gboolean" />
</method>
@@ -315,6 +384,9 @@
<parameter type="GError**" name="error" />
</parameters>
</method>
+ <method name="Delete" cname="g_app_info_delete">
+ <return-type type="gboolean" />
+ </method>
<method name="Dup" cname="g_app_info_dup">
<return-type type="GAppInfo*" />
</method>
@@ -333,6 +405,9 @@
<parameter type="const-char*" name="content_type" />
</parameters>
</method>
+ <method name="GetCommandline" cname="g_app_info_get_commandline">
+ <return-type type="const-char*" />
+ </method>
<method name="GetDefaultForType" cname="g_app_info_get_default_for_type" shared="true">
<return-type type="GAppInfo*" />
<parameters>
@@ -395,6 +470,12 @@
<parameter type="GError**" name="error" />
</parameters>
</method>
+ <method name="ResetTypeAssociations" cname="g_app_info_reset_type_associations" shared="true">
+ <return-type type="void" />
+ <parameters>
+ <parameter type="const-char*" name="content_type" />
+ </parameters>
+ </method>
<method name="SetAsDefaultForExtension" cname="g_app_info_set_as_default_for_extension">
<return-type type="gboolean" />
<parameters>
@@ -419,6 +500,85 @@
<return-type type="gboolean" />
</method>
</interface>
+ <interface name="AsyncInitable" cname="GAsyncInitable">
+ <virtual_method name="InitAsync" cname="init_async">
+ <return-type type="void" />
+ <parameters>
+ <parameter type="GAsyncInitable*" name="initable" />
+ <parameter type="int" name="io_priority" />
+ <parameter type="GCancellable*" name="cancellable" />
+ <parameter type="GAsyncReadyCallback" name="callback" />
+ <parameter type="gpointer" name="user_data" />
+ </parameters>
+ </virtual_method>
+ <virtual_method name="InitFinish" cname="init_finish">
+ <return-type type="gboolean" />
+ <parameters>
+ <parameter type="GAsyncInitable*" name="initable" />
+ <parameter type="GAsyncResult*" name="res" />
+ <parameter type="GError**" name="error" />
+ </parameters>
+ </virtual_method>
+ <method name="GetType" cname="g_async_initable_get_type" shared="true">
+ <return-type type="GType" />
+ </method>
+ <method name="InitAsync" cname="g_async_initable_init_async">
+ <return-type type="void" />
+ <parameters>
+ <parameter type="int" name="io_priority" />
+ <parameter type="GCancellable*" name="cancellable" />
+ <parameter type="GAsyncReadyCallback" name="callback" />
+ <parameter type="gpointer" name="user_data" />
+ </parameters>
+ </method>
+ <method name="InitFinish" cname="g_async_initable_init_finish">
+ <return-type type="gboolean" />
+ <parameters>
+ <parameter type="GAsyncResult*" name="res" />
+ <parameter type="GError**" name="error" />
+ </parameters>
+ </method>
+ <constructor cname="g_async_initable_new_async">
+ <parameters>
+ <parameter type="GType" name="object_type" />
+ <parameter type="int" name="io_priority" />
+ <parameter type="GCancellable*" name="cancellable" />
+ <parameter type="GAsyncReadyCallback" name="callback" />
+ <parameter type="gpointer" name="user_data" />
+ <parameter type="const-gchar*" name="first_property_name" />
+ <parameter ellipsis="true" />
+ </parameters>
+ </constructor>
+ <constructor cname="g_async_initable_new_finish">
+ <parameters>
+ <parameter type="GAsyncInitable*" name="initable" />
+ <parameter type="GAsyncResult*" name="res" />
+ <parameter type="GError**" name="error" />
+ </parameters>
+ </constructor>
+ <constructor cname="g_async_initable_new_valist_async">
+ <parameters>
+ <parameter type="GType" name="object_type" />
+ <parameter type="const-gchar*" name="first_property_name" />
+ <parameter type="va_list" name="var_args" />
+ <parameter type="int" name="io_priority" />
+ <parameter type="GCancellable*" name="cancellable" />
+ <parameter type="GAsyncReadyCallback" name="callback" />
+ <parameter type="gpointer" name="user_data" />
+ </parameters>
+ </constructor>
+ <constructor cname="g_async_initable_newv_async">
+ <parameters>
+ <parameter type="GType" name="object_type" />
+ <parameter type="guint" name="n_parameters" />
+ <parameter type="GParameter*" name="parameters" />
+ <parameter type="int" name="io_priority" />
+ <parameter type="GCancellable*" name="cancellable" />
+ <parameter type="GAsyncReadyCallback" name="callback" />
+ <parameter type="gpointer" name="user_data" />
+ </parameters>
+ </constructor>
+ </interface>
<interface name="AsyncResult" cname="GAsyncResult">
<virtual_method name="GetUserData" cname="get_user_data">
<return-type type="gpointer" />
@@ -581,13 +741,109 @@
<parameter type="GDrive*" name="drive" />
</parameters>
</virtual_method>
+ <virtual_method name="GetStartStopType" cname="get_start_stop_type">
+ <return-type type="GDriveStartStopType" />
+ <parameters>
+ <parameter type="GDrive*" name="drive" />
+ </parameters>
+ </virtual_method>
+ <virtual_method name="CanStart" cname="can_start">
+ <return-type type="gboolean" />
+ <parameters>
+ <parameter type="GDrive*" name="drive" />
+ </parameters>
+ </virtual_method>
+ <virtual_method name="CanStartDegraded" cname="can_start_degraded">
+ <return-type type="gboolean" />
+ <parameters>
+ <parameter type="GDrive*" name="drive" />
+ </parameters>
+ </virtual_method>
+ <virtual_method name="Start" cname="start">
+ <return-type type="void" />
+ <parameters>
+ <parameter type="GDrive*" name="drive" />
+ <parameter type="GDriveStartFlags" name="flags" />
+ <parameter type="GMountOperation*" name="mount_operation" />
+ <parameter type="GCancellable*" name="cancellable" />
+ <parameter type="GAsyncReadyCallback" name="callback" />
+ <parameter type="gpointer" name="user_data" />
+ </parameters>
+ </virtual_method>
+ <virtual_method name="StartFinish" cname="start_finish">
+ <return-type type="gboolean" />
+ <parameters>
+ <parameter type="GDrive*" name="drive" />
+ <parameter type="GAsyncResult*" name="result" />
+ <parameter type="GError**" name="error" />
+ </parameters>
+ </virtual_method>
+ <virtual_method name="CanStop" cname="can_stop">
+ <return-type type="gboolean" />
+ <parameters>
+ <parameter type="GDrive*" name="drive" />
+ </parameters>
+ </virtual_method>
+ <virtual_method name="Stop" cname="stop">
+ <return-type type="void" />
+ <parameters>
+ <parameter type="GDrive*" name="drive" />
+ <parameter type="GMountUnmountFlags" name="flags" />
+ <parameter type="GMountOperation*" name="mount_operation" />
+ <parameter type="GCancellable*" name="cancellable" />
+ <parameter type="GAsyncReadyCallback" name="callback" />
+ <parameter type="gpointer" name="user_data" />
+ </parameters>
+ </virtual_method>
+ <virtual_method name="StopFinish" cname="stop_finish">
+ <return-type type="gboolean" />
+ <parameters>
+ <parameter type="GDrive*" name="drive" />
+ <parameter type="GAsyncResult*" name="result" />
+ <parameter type="GError**" name="error" />
+ </parameters>
+ </virtual_method>
+ <signal name="StopButton" cname="stop-button" when="LAST" field_name="stop_button">
+ <return-type type="void" />
+ <parameters>
+ <parameter type="GDrive*" name="drive" />
+ </parameters>
+ </signal>
+ <virtual_method name="EjectWithOperation" cname="eject_with_operation">
+ <return-type type="void" />
+ <parameters>
+ <parameter type="GDrive*" name="drive" />
+ <parameter type="GMountUnmountFlags" name="flags" />
+ <parameter type="GMountOperation*" name="mount_operation" />
+ <parameter type="GCancellable*" name="cancellable" />
+ <parameter type="GAsyncReadyCallback" name="callback" />
+ <parameter type="gpointer" name="user_data" />
+ </parameters>
+ </virtual_method>
+ <virtual_method name="EjectWithOperationFinish" cname="eject_with_operation_finish">
+ <return-type type="gboolean" />
+ <parameters>
+ <parameter type="GDrive*" name="drive" />
+ <parameter type="GAsyncResult*" name="result" />
+ <parameter type="GError**" name="error" />
+ </parameters>
+ </virtual_method>
<method name="CanEject" cname="g_drive_can_eject">
<return-type type="gboolean" />
</method>
<method name="CanPollForMedia" cname="g_drive_can_poll_for_media">
<return-type type="gboolean" />
</method>
- <method name="Eject" cname="g_drive_eject">
+ <method name="CanStart" cname="g_drive_can_start">
+ <return-type type="gboolean" />
+ </method>
+ <method name="CanStartDegraded" cname="g_drive_can_start_degraded">
+ <return-type type="gboolean" />
+ </method>
+ <method name="CanStop" cname="g_drive_can_stop">
+ <return-type type="gboolean" />
+ </method>
+ <method name="Eject" cname="g_drive_eject" deprecated="1">
<return-type type="void" />
<parameters>
<parameter type="GMountUnmountFlags" name="flags" />
@@ -596,7 +852,24 @@
<parameter type="gpointer" name="user_data" />
</parameters>
</method>
- <method name="EjectFinish" cname="g_drive_eject_finish">
+ <method name="EjectFinish" cname="g_drive_eject_finish" deprecated="1">
+ <return-type type="gboolean" />
+ <parameters>
+ <parameter type="GAsyncResult*" name="result" />
+ <parameter type="GError**" name="error" />
+ </parameters>
+ </method>
+ <method name="EjectWithOperation" cname="g_drive_eject_with_operation">
+ <return-type type="void" />
+ <parameters>
+ <parameter type="GMountUnmountFlags" name="flags" />
+ <parameter type="GMountOperation*" name="mount_operation" />
+ <parameter type="GCancellable*" name="cancellable" />
+ <parameter type="GAsyncReadyCallback" name="callback" />
+ <parameter type="gpointer" name="user_data" />
+ </parameters>
+ </method>
+ <method name="EjectWithOperationFinish" cname="g_drive_eject_with_operation_finish">
<return-type type="gboolean" />
<parameters>
<parameter type="GAsyncResult*" name="result" />
@@ -618,6 +891,9 @@
<method name="GetName" cname="g_drive_get_name">
<return-type type="char*" />
</method>
+ <method name="GetStartStopType" cname="g_drive_get_start_stop_type">
+ <return-type type="GDriveStartStopType" />
+ </method>
<method name="GetType" cname="g_drive_get_type" shared="true">
<return-type type="GType" />
</method>
@@ -651,6 +927,40 @@
<parameter type="GError**" name="error" />
</parameters>
</method>
+ <method name="Start" cname="g_drive_start">
+ <return-type type="void" />
+ <parameters>
+ <parameter type="GDriveStartFlags" name="flags" />
+ <parameter type="GMountOperation*" name="mount_operation" />
+ <parameter type="GCancellable*" name="cancellable" />
+ <parameter type="GAsyncReadyCallback" name="callback" />
+ <parameter type="gpointer" name="user_data" />
+ </parameters>
+ </method>
+ <method name="StartFinish" cname="g_drive_start_finish">
+ <return-type type="gboolean" />
+ <parameters>
+ <parameter type="GAsyncResult*" name="result" />
+ <parameter type="GError**" name="error" />
+ </parameters>
+ </method>
+ <method name="Stop" cname="g_drive_stop">
+ <return-type type="void" />
+ <parameters>
+ <parameter type="GMountUnmountFlags" name="flags" />
+ <parameter type="GMountOperation*" name="mount_operation" />
+ <parameter type="GCancellable*" name="cancellable" />
+ <parameter type="GAsyncReadyCallback" name="callback" />
+ <parameter type="gpointer" name="user_data" />
+ </parameters>
+ </method>
+ <method name="StopFinish" cname="g_drive_stop_finish">
+ <return-type type="gboolean" />
+ <parameters>
+ <parameter type="GAsyncResult*" name="result" />
+ <parameter type="GError**" name="error" />
+ </parameters>
+ </method>
</interface>
<interface name="File" cname="GFile">
<virtual_method name="Dup" cname="dup">
@@ -1278,6 +1588,185 @@
<parameter type="GError**" name="error" />
</parameters>
</virtual_method>
+ <virtual_method name="OpenReadwrite" cname="open_readwrite">
+ <return-type type="GFileIOStream*" />
+ <parameters>
+ <parameter type="GFile*" name="file" />
+ <parameter type="GCancellable*" name="cancellable" />
+ <parameter type="GError**" name="error" />
+ </parameters>
+ </virtual_method>
+ <virtual_method name="OpenReadwriteAsync" cname="open_readwrite_async">
+ <return-type type="void" />
+ <parameters>
+ <parameter type="GFile*" name="file" />
+ <parameter type="int" name="io_priority" />
+ <parameter type="GCancellable*" name="cancellable" />
+ <parameter type="GAsyncReadyCallback" name="callback" />
+ <parameter type="gpointer" name="user_data" />
+ </parameters>
+ </virtual_method>
+ <virtual_method name="OpenReadwriteFinish" cname="open_readwrite_finish">
+ <return-type type="GFileIOStream*" />
+ <parameters>
+ <parameter type="GFile*" name="file" />
+ <parameter type="GAsyncResult*" name="res" />
+ <parameter type="GError**" name="error" />
+ </parameters>
+ </virtual_method>
+ <virtual_method name="CreateReadwrite" cname="create_readwrite">
+ <return-type type="GFileIOStream*" />
+ <parameters>
+ <parameter type="GFile*" name="file" />
+ <parameter type="GFileCreateFlags" name="flags" />
+ <parameter type="GCancellable*" name="cancellable" />
+ <parameter type="GError**" name="error" />
+ </parameters>
+ </virtual_method>
+ <virtual_method name="CreateReadwriteAsync" cname="create_readwrite_async">
+ <return-type type="void" />
+ <parameters>
+ <parameter type="GFile*" name="file" />
+ <parameter type="GFileCreateFlags" name="flags" />
+ <parameter type="int" name="io_priority" />
+ <parameter type="GCancellable*" name="cancellable" />
+ <parameter type="GAsyncReadyCallback" name="callback" />
+ <parameter type="gpointer" name="user_data" />
+ </parameters>
+ </virtual_method>
+ <virtual_method name="CreateReadwriteFinish" cname="create_readwrite_finish">
+ <return-type type="GFileIOStream*" />
+ <parameters>
+ <parameter type="GFile*" name="file" />
+ <parameter type="GAsyncResult*" name="res" />
+ <parameter type="GError**" name="error" />
+ </parameters>
+ </virtual_method>
+ <virtual_method name="ReplaceReadwrite" cname="replace_readwrite">
+ <return-type type="GFileIOStream*" />
+ <parameters>
+ <parameter type="GFile*" name="file" />
+ <parameter type="const-char*" name="etag" />
+ <parameter type="gboolean" name="make_backup" />
+ <parameter type="GFileCreateFlags" name="flags" />
+ <parameter type="GCancellable*" name="cancellable" />
+ <parameter type="GError**" name="error" />
+ </parameters>
+ </virtual_method>
+ <virtual_method name="ReplaceReadwriteAsync" cname="replace_readwrite_async">
+ <return-type type="void" />
+ <parameters>
+ <parameter type="GFile*" name="file" />
+ <parameter type="const-char*" name="etag" />
+ <parameter type="gboolean" name="make_backup" />
+ <parameter type="GFileCreateFlags" name="flags" />
+ <parameter type="int" name="io_priority" />
+ <parameter type="GCancellable*" name="cancellable" />
+ <parameter type="GAsyncReadyCallback" name="callback" />
+ <parameter type="gpointer" name="user_data" />
+ </parameters>
+ </virtual_method>
+ <virtual_method name="ReplaceReadwriteFinish" cname="replace_readwrite_finish">
+ <return-type type="GFileIOStream*" />
+ <parameters>
+ <parameter type="GFile*" name="file" />
+ <parameter type="GAsyncResult*" name="res" />
+ <parameter type="GError**" name="error" />
+ </parameters>
+ </virtual_method>
+ <virtual_method name="StartMountable" cname="start_mountable">
+ <return-type type="void" />
+ <parameters>
+ <parameter type="GFile*" name="file" />
+ <parameter type="GDriveStartFlags" name="flags" />
+ <parameter type="GMountOperation*" name="start_operation" />
+ <parameter type="GCancellable*" name="cancellable" />
+ <parameter type="GAsyncReadyCallback" name="callback" />
+ <parameter type="gpointer" name="user_data" />
+ </parameters>
+ </virtual_method>
+ <virtual_method name="StartMountableFinish" cname="start_mountable_finish">
+ <return-type type="gboolean" />
+ <parameters>
+ <parameter type="GFile*" name="file" />
+ <parameter type="GAsyncResult*" name="result" />
+ <parameter type="GError**" name="error" />
+ </parameters>
+ </virtual_method>
+ <virtual_method name="StopMountable" cname="stop_mountable">
+ <return-type type="void" />
+ <parameters>
+ <parameter type="GFile*" name="file" />
+ <parameter type="GMountUnmountFlags" name="flags" />
+ <parameter type="GMountOperation*" name="mount_operation" />
+ <parameter type="GCancellable*" name="cancellable" />
+ <parameter type="GAsyncReadyCallback" name="callback" />
+ <parameter type="gpointer" name="user_data" />
+ </parameters>
+ </virtual_method>
+ <virtual_method name="StopMountableFinish" cname="stop_mountable_finish">
+ <return-type type="gboolean" />
+ <parameters>
+ <parameter type="GFile*" name="file" />
+ <parameter type="GAsyncResult*" name="result" />
+ <parameter type="GError**" name="error" />
+ </parameters>
+ </virtual_method>
+ <virtual_method name="UnmountMountableWithOperation" cname="unmount_mountable_with_operation">
+ <return-type type="void" />
+ <parameters>
+ <parameter type="GFile*" name="file" />
+ <parameter type="GMountUnmountFlags" name="flags" />
+ <parameter type="GMountOperation*" name="mount_operation" />
+ <parameter type="GCancellable*" name="cancellable" />
+ <parameter type="GAsyncReadyCallback" name="callback" />
+ <parameter type="gpointer" name="user_data" />
+ </parameters>
+ </virtual_method>
+ <virtual_method name="UnmountMountableWithOperationFinish" cname="unmount_mountable_with_operation_finish">
+ <return-type type="gboolean" />
+ <parameters>
+ <parameter type="GFile*" name="file" />
+ <parameter type="GAsyncResult*" name="result" />
+ <parameter type="GError**" name="error" />
+ </parameters>
+ </virtual_method>
+ <virtual_method name="EjectMountableWithOperation" cname="eject_mountable_with_operation">
+ <return-type type="void" />
+ <parameters>
+ <parameter type="GFile*" name="file" />
+ <parameter type="GMountUnmountFlags" name="flags" />
+ <parameter type="GMountOperation*" name="mount_operation" />
+ <parameter type="GCancellable*" name="cancellable" />
+ <parameter type="GAsyncReadyCallback" name="callback" />
+ <parameter type="gpointer" name="user_data" />
+ </parameters>
+ </virtual_method>
+ <virtual_method name="EjectMountableWithOperationFinish" cname="eject_mountable_with_operation_finish">
+ <return-type type="gboolean" />
+ <parameters>
+ <parameter type="GFile*" name="file" />
+ <parameter type="GAsyncResult*" name="result" />
+ <parameter type="GError**" name="error" />
+ </parameters>
+ </virtual_method>
+ <virtual_method name="PollMountable" cname="poll_mountable">
+ <return-type type="void" />
+ <parameters>
+ <parameter type="GFile*" name="file" />
+ <parameter type="GCancellable*" name="cancellable" />
+ <parameter type="GAsyncReadyCallback" name="callback" />
+ <parameter type="gpointer" name="user_data" />
+ </parameters>
+ </virtual_method>
+ <virtual_method name="PollMountableFinish" cname="poll_mountable_finish">
+ <return-type type="gboolean" />
+ <parameters>
+ <parameter type="GFile*" name="file" />
+ <parameter type="GAsyncResult*" name="result" />
+ <parameter type="GError**" name="error" />
+ </parameters>
+ </virtual_method>
<method name="AppendTo" cname="g_file_append_to">
<return-type type="GFileOutputStream*" />
<parameters>
@@ -1368,6 +1857,31 @@
<parameter type="GError**" name="error" />
</parameters>
</method>
+ <method name="CreateReadwrite" cname="g_file_create_readwrite">
+ <return-type type="GFileIOStream*" />
+ <parameters>
+ <parameter type="GFileCreateFlags" name="flags" />
+ <parameter type="GCancellable*" name="cancellable" />
+ <parameter type="GError**" name="error" />
+ </parameters>
+ </method>
+ <method name="CreateReadwriteAsync" cname="g_file_create_readwrite_async">
+ <return-type type="void" />
+ <parameters>
+ <parameter type="GFileCreateFlags" name="flags" />
+ <parameter type="int" name="io_priority" />
+ <parameter type="GCancellable*" name="cancellable" />
+ <parameter type="GAsyncReadyCallback" name="callback" />
+ <parameter type="gpointer" name="user_data" />
+ </parameters>
+ </method>
+ <method name="CreateReadwriteFinish" cname="g_file_create_readwrite_finish">
+ <return-type type="GFileIOStream*" />
+ <parameters>
+ <parameter type="GAsyncResult*" name="res" />
+ <parameter type="GError**" name="error" />
+ </parameters>
+ </method>
<method name="Delete" cname="g_file_delete">
<return-type type="gboolean" />
<parameters>
@@ -1378,16 +1892,33 @@
<method name="Dup" cname="g_file_dup">
<return-type type="GFile*" />
</method>
- <method name="EjectMountable" cname="g_file_eject_mountable">
+ <method name="EjectMountable" cname="g_file_eject_mountable" deprecated="1">
+ <return-type type="void" />
+ <parameters>
+ <parameter type="GMountUnmountFlags" name="flags" />
+ <parameter type="GCancellable*" name="cancellable" />
+ <parameter type="GAsyncReadyCallback" name="callback" />
+ <parameter type="gpointer" name="user_data" />
+ </parameters>
+ </method>
+ <method name="EjectMountableFinish" cname="g_file_eject_mountable_finish" deprecated="1">
+ <return-type type="gboolean" />
+ <parameters>
+ <parameter type="GAsyncResult*" name="result" />
+ <parameter type="GError**" name="error" />
+ </parameters>
+ </method>
+ <method name="EjectMountableWithOperation" cname="g_file_eject_mountable_with_operation">
<return-type type="void" />
<parameters>
<parameter type="GMountUnmountFlags" name="flags" />
+ <parameter type="GMountOperation*" name="mount_operation" />
<parameter type="GCancellable*" name="cancellable" />
<parameter type="GAsyncReadyCallback" name="callback" />
<parameter type="gpointer" name="user_data" />
</parameters>
</method>
- <method name="EjectMountableFinish" cname="g_file_eject_mountable_finish">
+ <method name="EjectMountableWithOperationFinish" cname="g_file_eject_mountable_with_operation_finish">
<return-type type="gboolean" />
<parameters>
<parameter type="GAsyncResult*" name="result" />
@@ -1648,12 +2179,50 @@
<parameter type="const-char*" name="uri" />
</parameters>
</constructor>
+ <method name="OpenReadwrite" cname="g_file_open_readwrite">
+ <return-type type="GFileIOStream*" />
+ <parameters>
+ <parameter type="GCancellable*" name="cancellable" />
+ <parameter type="GError**" name="error" />
+ </parameters>
+ </method>
+ <method name="OpenReadwriteAsync" cname="g_file_open_readwrite_async">
+ <return-type type="void" />
+ <parameters>
+ <parameter type="int" name="io_priority" />
+ <parameter type="GCancellable*" name="cancellable" />
+ <parameter type="GAsyncReadyCallback" name="callback" />
+ <parameter type="gpointer" name="user_data" />
+ </parameters>
+ </method>
+ <method name="OpenReadwriteFinish" cname="g_file_open_readwrite_finish">
+ <return-type type="GFileIOStream*" />
+ <parameters>
+ <parameter type="GAsyncResult*" name="res" />
+ <parameter type="GError**" name="error" />
+ </parameters>
+ </method>
<method name="ParseName" cname="g_file_parse_name" shared="true">
<return-type type="GFile*" />
<parameters>
<parameter type="const-char*" name="parse_name" />
</parameters>
</method>
+ <method name="PollMountable" cname="g_file_poll_mountable">
+ <return-type type="void" />
+ <parameters>
+ <parameter type="GCancellable*" name="cancellable" />
+ <parameter type="GAsyncReadyCallback" name="callback" />
+ <parameter type="gpointer" name="user_data" />
+ </parameters>
+ </method>
+ <method name="PollMountableFinish" cname="g_file_poll_mountable_finish">
+ <return-type type="gboolean" />
+ <parameters>
+ <parameter type="GAsyncResult*" name="result" />
+ <parameter type="GError**" name="error" />
+ </parameters>
+ </method>
<method name="QueryDefaultHandler" cname="g_file_query_default_handler">
<return-type type="GAppInfo*" />
<parameters>
@@ -1826,6 +2395,35 @@
<parameter type="GError**" name="error" />
</parameters>
</method>
+ <method name="ReplaceReadwrite" cname="g_file_replace_readwrite">
+ <return-type type="GFileIOStream*" />
+ <parameters>
+ <parameter type="const-char*" name="etag" />
+ <parameter type="gboolean" name="make_backup" />
+ <parameter type="GFileCreateFlags" name="flags" />
+ <parameter type="GCancellable*" name="cancellable" />
+ <parameter type="GError**" name="error" />
+ </parameters>
+ </method>
+ <method name="ReplaceReadwriteAsync" cname="g_file_replace_readwrite_async">
+ <return-type type="void" />
+ <parameters>
+ <parameter type="const-char*" name="etag" />
+ <parameter type="gboolean" name="make_backup" />
+ <parameter type="GFileCreateFlags" name="flags" />
+ <parameter type="int" name="io_priority" />
+ <parameter type="GCancellable*" name="cancellable" />
+ <parameter type="GAsyncReadyCallback" name="callback" />
+ <parameter type="gpointer" name="user_data" />
+ </parameters>
+ </method>
+ <method name="ReplaceReadwriteFinish" cname="g_file_replace_readwrite_finish">
+ <return-type type="GFileIOStream*" />
+ <parameters>
+ <parameter type="GAsyncResult*" name="res" />
+ <parameter type="GError**" name="error" />
+ </parameters>
+ </method>
<method name="ResolveRelativePath" cname="g_file_resolve_relative_path">
<return-type type="GFile*" />
<parameters>
@@ -1956,6 +2554,43 @@
<parameter type="GError**" name="error" />
</parameters>
</method>
+ <method name="StartMountable" cname="g_file_start_mountable">
+ <return-type type="void" />
+ <parameters>
+ <parameter type="GDriveStartFlags" name="flags" />
+ <parameter type="GMountOperation*" name="start_operation" />
+ <parameter type="GCancellable*" name="cancellable" />
+ <parameter type="GAsyncReadyCallback" name="callback" />
+ <parameter type="gpointer" name="user_data" />
+ </parameters>
+ </method>
+ <method name="StartMountableFinish" cname="g_file_start_mountable_finish">
+ <return-type type="gboolean" />
+ <parameters>
+ <parameter type="GAsyncResult*" name="result" />
+ <parameter type="GError**" name="error" />
+ </parameters>
+ </method>
+ <method name="StopMountable" cname="g_file_stop_mountable">
+ <return-type type="void" />
+ <parameters>
+ <parameter type="GMountUnmountFlags" name="flags" />
+ <parameter type="GMountOperation*" name="mount_operation" />
+ <parameter type="GCancellable*" name="cancellable" />
+ <parameter type="GAsyncReadyCallback" name="callback" />
+ <parameter type="gpointer" name="user_data" />
+ </parameters>
+ </method>
+ <method name="StopMountableFinish" cname="g_file_stop_mountable_finish">
+ <return-type type="gboolean" />
+ <parameters>
+ <parameter type="GAsyncResult*" name="result" />
+ <parameter type="GError**" name="error" />
+ </parameters>
+ </method>
+ <method name="SupportsThreadContexts" cname="g_file_supports_thread_contexts">
+ <return-type type="gboolean" />
+ </method>
<method name="Trash" cname="g_file_trash">
<return-type type="gboolean" />
<parameters>
@@ -1963,7 +2598,7 @@
<parameter type="GError**" name="error" />
</parameters>
</method>
- <method name="UnmountMountable" cname="g_file_unmount_mountable">
+ <method name="UnmountMountable" cname="g_file_unmount_mountable" deprecated="1">
<return-type type="void" />
<parameters>
<parameter type="GMountUnmountFlags" name="flags" />
@@ -1972,7 +2607,24 @@
<parameter type="gpointer" name="user_data" />
</parameters>
</method>
- <method name="UnmountMountableFinish" cname="g_file_unmount_mountable_finish">
+ <method name="UnmountMountableFinish" cname="g_file_unmount_mountable_finish" deprecated="1">
+ <return-type type="gboolean" />
+ <parameters>
+ <parameter type="GAsyncResult*" name="result" />
+ <parameter type="GError**" name="error" />
+ </parameters>
+ </method>
+ <method name="UnmountMountableWithOperation" cname="g_file_unmount_mountable_with_operation">
+ <return-type type="void" />
+ <parameters>
+ <parameter type="GMountUnmountFlags" name="flags" />
+ <parameter type="GMountOperation*" name="mount_operation" />
+ <parameter type="GCancellable*" name="cancellable" />
+ <parameter type="GAsyncReadyCallback" name="callback" />
+ <parameter type="gpointer" name="user_data" />
+ </parameters>
+ </method>
+ <method name="UnmountMountableWithOperationFinish" cname="g_file_unmount_mountable_with_operation_finish">
<return-type type="gboolean" />
<parameters>
<parameter type="GAsyncResult*" name="result" />
@@ -1994,6 +2646,23 @@
<parameter type="GIcon*" name="icon2" />
</parameters>
</virtual_method>
+ <virtual_method name="ToTokens" cname="to_tokens">
+ <return-type type="gboolean" />
+ <parameters>
+ <parameter type="GIcon*" name="icon" />
+ <parameter type="GPtrArray*" name="tokens" />
+ <parameter type="gint*" name="out_version" />
+ </parameters>
+ </virtual_method>
+ <virtual_method name="FromTokens" cname="from_tokens">
+ <return-type type="GIcon*" />
+ <parameters>
+ <parameter type="gchar**" name="tokens" />
+ <parameter type="gint" name="num_tokens" />
+ <parameter type="gint" name="version" />
+ <parameter type="GError**" name="error" />
+ </parameters>
+ </virtual_method>
<method name="Equal" cname="g_icon_equal">
<return-type type="gboolean" />
<parameters>
@@ -2009,6 +2678,62 @@
<parameter type="gconstpointer" name="icon" />
</parameters>
</method>
+ <constructor cname="g_icon_new_for_string">
+ <parameters>
+ <parameter type="const-gchar*" name="str" />
+ <parameter type="GError**" name="error" />
+ </parameters>
+ </constructor>
+ <method name="ToString" cname="g_icon_to_string">
+ <return-type type="gchar*" />
+ </method>
+ </interface>
+ <interface name="Initable" cname="GInitable">
+ <virtual_method name="Init" cname="init">
+ <return-type type="gboolean" />
+ <parameters>
+ <parameter type="GInitable*" name="initable" />
+ <parameter type="GCancellable*" name="cancellable" />
+ <parameter type="GError**" name="error" />
+ </parameters>
+ </virtual_method>
+ <method name="GetType" cname="g_initable_get_type" shared="true">
+ <return-type type="GType" />
+ </method>
+ <method name="Init" cname="g_initable_init">
+ <return-type type="gboolean" />
+ <parameters>
+ <parameter type="GCancellable*" name="cancellable" />
+ <parameter type="GError**" name="error" />
+ </parameters>
+ </method>
+ <constructor cname="g_initable_new">
+ <parameters>
+ <parameter type="GType" name="object_type" />
+ <parameter type="GCancellable*" name="cancellable" />
+ <parameter type="GError**" name="error" />
+ <parameter type="const-gchar*" name="first_property_name" />
+ <parameter ellipsis="true" />
+ </parameters>
+ </constructor>
+ <constructor cname="g_initable_new_valist">
+ <parameters>
+ <parameter type="GType" name="object_type" />
+ <parameter type="const-gchar*" name="first_property_name" />
+ <parameter type="va_list" name="var_args" />
+ <parameter type="GCancellable*" name="cancellable" />
+ <parameter type="GError**" name="error" />
+ </parameters>
+ </constructor>
+ <constructor cname="g_initable_newv">
+ <parameters>
+ <parameter type="GType" name="object_type" />
+ <parameter type="guint" name="n_parameters" />
+ <parameter type="GParameter*" name="parameters" />
+ <parameter type="GCancellable*" name="cancellable" />
+ <parameter type="GError**" name="error" />
+ </parameters>
+ </constructor>
</interface>
<interface name="LoadableIcon" cname="GLoadableIcon">
<virtual_method name="Load" cname="load">
@@ -2213,13 +2938,57 @@
<parameter type="GError**" name="error" />
</parameters>
</virtual_method>
+ <signal name="PreUnmount" cname="pre-unmount" when="LAST" field_name="pre_unmount">
+ <return-type type="void" />
+ <parameters>
+ <parameter type="GMount*" name="mount" />
+ </parameters>
+ </signal>
+ <virtual_method name="UnmountWithOperation" cname="unmount_with_operation">
+ <return-type type="void" />
+ <parameters>
+ <parameter type="GMount*" name="mount" />
+ <parameter type="GMountUnmountFlags" name="flags" />
+ <parameter type="GMountOperation*" name="mount_operation" />
+ <parameter type="GCancellable*" name="cancellable" />
+ <parameter type="GAsyncReadyCallback" name="callback" />
+ <parameter type="gpointer" name="user_data" />
+ </parameters>
+ </virtual_method>
+ <virtual_method name="UnmountWithOperationFinish" cname="unmount_with_operation_finish">
+ <return-type type="gboolean" />
+ <parameters>
+ <parameter type="GMount*" name="mount" />
+ <parameter type="GAsyncResult*" name="result" />
+ <parameter type="GError**" name="error" />
+ </parameters>
+ </virtual_method>
+ <virtual_method name="EjectWithOperation" cname="eject_with_operation">
+ <return-type type="void" />
+ <parameters>
+ <parameter type="GMount*" name="mount" />
+ <parameter type="GMountUnmountFlags" name="flags" />
+ <parameter type="GMountOperation*" name="mount_operation" />
+ <parameter type="GCancellable*" name="cancellable" />
+ <parameter type="GAsyncReadyCallback" name="callback" />
+ <parameter type="gpointer" name="user_data" />
+ </parameters>
+ </virtual_method>
+ <virtual_method name="EjectWithOperationFinish" cname="eject_with_operation_finish">
+ <return-type type="gboolean" />
+ <parameters>
+ <parameter type="GMount*" name="mount" />
+ <parameter type="GAsyncResult*" name="result" />
+ <parameter type="GError**" name="error" />
+ </parameters>
+ </virtual_method>
<method name="CanEject" cname="g_mount_can_eject">
<return-type type="gboolean" />
</method>
<method name="CanUnmount" cname="g_mount_can_unmount">
<return-type type="gboolean" />
</method>
- <method name="Eject" cname="g_mount_eject">
+ <method name="Eject" cname="g_mount_eject" deprecated="1">
<return-type type="void" />
<parameters>
<parameter type="GMountUnmountFlags" name="flags" />
@@ -2228,7 +2997,24 @@
<parameter type="gpointer" name="user_data" />
</parameters>
</method>
- <method name="EjectFinish" cname="g_mount_eject_finish">
+ <method name="EjectFinish" cname="g_mount_eject_finish" deprecated="1">
+ <return-type type="gboolean" />
+ <parameters>
+ <parameter type="GAsyncResult*" name="result" />
+ <parameter type="GError**" name="error" />
+ </parameters>
+ </method>
+ <method name="EjectWithOperation" cname="g_mount_eject_with_operation">
+ <return-type type="void" />
+ <parameters>
+ <parameter type="GMountUnmountFlags" name="flags" />
+ <parameter type="GMountOperation*" name="mount_operation" />
+ <parameter type="GCancellable*" name="cancellable" />
+ <parameter type="GAsyncReadyCallback" name="callback" />
+ <parameter type="gpointer" name="user_data" />
+ </parameters>
+ </method>
+ <method name="EjectWithOperationFinish" cname="g_mount_eject_with_operation_finish">
<return-type type="gboolean" />
<parameters>
<parameter type="GAsyncResult*" name="result" />
@@ -2280,6 +3066,9 @@
<parameter type="GError**" name="error" />
</parameters>
</method>
+ <method name="IsShadowed" cname="g_mount_is_shadowed">
+ <return-type type="gboolean" />
+ </method>
<method name="Remount" cname="g_mount_remount">
<return-type type="void" />
<parameters>
@@ -2297,7 +3086,10 @@
<parameter type="GError**" name="error" />
</parameters>
</method>
- <method name="Unmount" cname="g_mount_unmount">
+ <method name="Shadow" cname="g_mount_shadow">
+ <return-type type="void" />
+ </method>
+ <method name="Unmount" cname="g_mount_unmount" deprecated="1">
<return-type type="void" />
<parameters>
<parameter type="GMountUnmountFlags" name="flags" />
@@ -2306,13 +3098,33 @@
<parameter type="gpointer" name="user_data" />
</parameters>
</method>
- <method name="UnmountFinish" cname="g_mount_unmount_finish">
+ <method name="UnmountFinish" cname="g_mount_unmount_finish" deprecated="1">
<return-type type="gboolean" />
<parameters>
<parameter type="GAsyncResult*" name="result" />
<parameter type="GError**" name="error" />
</parameters>
</method>
+ <method name="UnmountWithOperation" cname="g_mount_unmount_with_operation">
+ <return-type type="void" />
+ <parameters>
+ <parameter type="GMountUnmountFlags" name="flags" />
+ <parameter type="GMountOperation*" name="mount_operation" />
+ <parameter type="GCancellable*" name="cancellable" />
+ <parameter type="GAsyncReadyCallback" name="callback" />
+ <parameter type="gpointer" name="user_data" />
+ </parameters>
+ </method>
+ <method name="UnmountWithOperationFinish" cname="g_mount_unmount_with_operation_finish">
+ <return-type type="gboolean" />
+ <parameters>
+ <parameter type="GAsyncResult*" name="result" />
+ <parameter type="GError**" name="error" />
+ </parameters>
+ </method>
+ <method name="Unshadow" cname="g_mount_unshadow">
+ <return-type type="void" />
+ </method>
</interface>
<interface name="Seekable" cname="GSeekable">
<virtual_method name="Tell" cname="tell">
@@ -2499,22 +3311,58 @@
<parameter type="GVolume*" name="volume" />
</parameters>
</virtual_method>
+ <virtual_method name="EjectWithOperation" cname="eject_with_operation">
+ <return-type type="void" />
+ <parameters>
+ <parameter type="GVolume*" name="volume" />
+ <parameter type="GMountUnmountFlags" name="flags" />
+ <parameter type="GMountOperation*" name="mount_operation" />
+ <parameter type="GCancellable*" name="cancellable" />
+ <parameter type="GAsyncReadyCallback" name="callback" />
+ <parameter type="gpointer" name="user_data" />
+ </parameters>
+ </virtual_method>
+ <virtual_method name="EjectWithOperationFinish" cname="eject_with_operation_finish">
+ <return-type type="gboolean" />
+ <parameters>
+ <parameter type="GVolume*" name="volume" />
+ <parameter type="GAsyncResult*" name="result" />
+ <parameter type="GError**" name="error" />
+ </parameters>
+ </virtual_method>
<method name="CanEject" cname="g_volume_can_eject">
<return-type type="gboolean" />
</method>
<method name="CanMount" cname="g_volume_can_mount">
<return-type type="gboolean" />
</method>
- <method name="Eject" cname="g_volume_eject">
+ <method name="Eject" cname="g_volume_eject" deprecated="1">
+ <return-type type="void" />
+ <parameters>
+ <parameter type="GMountUnmountFlags" name="flags" />
+ <parameter type="GCancellable*" name="cancellable" />
+ <parameter type="GAsyncReadyCallback" name="callback" />
+ <parameter type="gpointer" name="user_data" />
+ </parameters>
+ </method>
+ <method name="EjectFinish" cname="g_volume_eject_finish" deprecated="1">
+ <return-type type="gboolean" />
+ <parameters>
+ <parameter type="GAsyncResult*" name="result" />
+ <parameter type="GError**" name="error" />
+ </parameters>
+ </method>
+ <method name="EjectWithOperation" cname="g_volume_eject_with_operation">
<return-type type="void" />
<parameters>
<parameter type="GMountUnmountFlags" name="flags" />
+ <parameter type="GMountOperation*" name="mount_operation" />
<parameter type="GCancellable*" name="cancellable" />
<parameter type="GAsyncReadyCallback" name="callback" />
<parameter type="gpointer" name="user_data" />
</parameters>
</method>
- <method name="EjectFinish" cname="g_volume_eject_finish">
+ <method name="EjectWithOperationFinish" cname="g_volume_eject_with_operation_finish">
<return-type type="gboolean" />
<parameters>
<parameter type="GAsyncResult*" name="result" />
@@ -2780,6 +3628,7 @@
</method>
</object>
<object name="Cancellable" cname="GCancellable" parent="GObject">
+ <field name="Priv" cname="priv" type="GCancellablePrivate*" />
<signal name="Cancelled" cname="cancelled" when="LAST" field_name="cancelled">
<return-type type="void" />
<parameters>
@@ -2789,6 +3638,20 @@
<method name="Cancel" cname="g_cancellable_cancel">
<return-type type="void" />
</method>
+ <method name="Connect" cname="g_cancellable_connect">
+ <return-type type="gulong" />
+ <parameters>
+ <parameter type="GCallback" name="callback" />
+ <parameter type="gpointer" name="data" />
+ <parameter type="GDestroyNotify" name="data_destroy_func" />
+ </parameters>
+ </method>
+ <method name="Disconnect" cname="g_cancellable_disconnect">
+ <return-type type="void" />
+ <parameters>
+ <parameter type="gulong" name="handler_id" />
+ </parameters>
+ </method>
<method name="GetCurrent" cname="g_cancellable_get_current" shared="true">
<return-type type="GCancellable*" />
</method>
@@ -2801,6 +3664,12 @@
<method name="IsCancelled" cname="g_cancellable_is_cancelled">
<return-type type="gboolean" />
</method>
+ <method name="MakePollfd" cname="g_cancellable_make_pollfd">
+ <return-type type="gboolean" />
+ <parameters>
+ <parameter type="GPollFD*" name="pollfd" />
+ </parameters>
+ </method>
<constructor cname="g_cancellable_new" />
<method name="PopCurrent" cname="g_cancellable_pop_current">
<return-type type="void" />
@@ -2808,6 +3677,9 @@
<method name="PushCurrent" cname="g_cancellable_push_current">
<return-type type="void" />
</method>
+ <method name="ReleaseFd" cname="g_cancellable_release_fd">
+ <return-type type="void" />
+ </method>
<method name="Reset" cname="g_cancellable_reset">
<return-type type="void" />
</method>
@@ -2872,6 +3744,23 @@
<parameter type="GError**" name="error" />
</parameters>
</method>
+ <method name="ReadLineAsync" cname="g_data_input_stream_read_line_async">
+ <return-type type="void" />
+ <parameters>
+ <parameter type="gint" name="io_priority" />
+ <parameter type="GCancellable*" name="cancellable" />
+ <parameter type="GAsyncReadyCallback" name="callback" />
+ <parameter type="gpointer" name="user_data" />
+ </parameters>
+ </method>
+ <method name="ReadLineFinish" cname="g_data_input_stream_read_line_finish">
+ <return-type type="char*" />
+ <parameters>
+ <parameter type="GAsyncResult*" name="result" />
+ <parameter type="gsize*" name="length" />
+ <parameter type="GError**" name="error" />
+ </parameters>
+ </method>
<method name="ReadUint16" cname="g_data_input_stream_read_uint16">
<return-type type="guint16" />
<parameters>
@@ -2902,6 +3791,24 @@
<parameter type="GError**" name="error" />
</parameters>
</method>
+ <method name="ReadUntilAsync" cname="g_data_input_stream_read_until_async">
+ <return-type type="void" />
+ <parameters>
+ <parameter type="const-gchar*" name="stop_chars" />
+ <parameter type="gint" name="io_priority" />
+ <parameter type="GCancellable*" name="cancellable" />
+ <parameter type="GAsyncReadyCallback" name="callback" />
+ <parameter type="gpointer" name="user_data" />
+ </parameters>
+ </method>
+ <method name="ReadUntilFinish" cname="g_data_input_stream_read_until_finish">
+ <return-type type="char*" />
+ <parameters>
+ <parameter type="GAsyncResult*" name="result" />
+ <parameter type="gsize*" name="length" />
+ <parameter type="GError**" name="error" />
+ </parameters>
+ </method>
<method name="SetByteOrder" cname="g_data_input_stream_set_byte_order">
<return-type type="void" />
<parameters>
@@ -3325,6 +4232,12 @@
<parameter type="const-char*" name="attribute" />
</parameters>
</method>
+ <method name="GetAttributeStringv" cname="g_file_info_get_attribute_stringv">
+ <return-type type="char**" />
+ <parameters>
+ <parameter type="const-char*" name="attribute" />
+ </parameters>
+ </method>
<method name="GetAttributeType" cname="g_file_info_get_attribute_type">
<return-type type="GFileAttributeType" />
<parameters>
@@ -3397,6 +4310,12 @@
<parameter type="const-char*" name="attribute" />
</parameters>
</method>
+ <method name="HasNamespace" cname="g_file_info_has_namespace">
+ <return-type type="gboolean" />
+ <parameters>
+ <parameter type="const-char*" name="name_space" />
+ </parameters>
+ </method>
<method name="ListAttributes" cname="g_file_info_list_attributes">
<return-type type="char**" />
<parameters>
@@ -3459,6 +4378,13 @@
<parameter type="GObject*" name="attr_value" />
</parameters>
</method>
+ <method name="SetAttributeStatus" cname="g_file_info_set_attribute_status">
+ <return-type type="gboolean" />
+ <parameters>
+ <parameter type="const-char*" name="attribute" />
+ <parameter type="GFileAttributeStatus" name="status" />
+ </parameters>
+ </method>
<method name="SetAttributeString" cname="g_file_info_set_attribute_string">
<return-type type="void" />
<parameters>
@@ -3466,6 +4392,13 @@
<parameter type="const-char*" name="attr_value" />
</parameters>
</method>
+ <method name="SetAttributeStringv" cname="g_file_info_set_attribute_stringv">
+ <return-type type="void" />
+ <parameters>
+ <parameter type="const-char*" name="attribute" />
+ <parameter type="char**" name="attr_value" />
+ </parameters>
+ </method>
<method name="SetAttributeUint32" cname="g_file_info_set_attribute_uint32">
<return-type type="void" />
<parameters>
@@ -3584,7 +4517,7 @@
<return-type type="GFileInfo*" />
<parameters>
<parameter type="GFileInputStream*" name="stream" />
- <parameter type="char*" name="attributes" />
+ <parameter type="const-char*" name="attributes" />
<parameter type="GCancellable*" name="cancellable" />
<parameter type="GError**" name="error" />
</parameters>
@@ -3593,7 +4526,7 @@
<return-type type="void" />
<parameters>
<parameter type="GFileInputStream*" name="stream" />
- <parameter type="char*" name="attributes" />
+ <parameter type="const-char*" name="attributes" />
<parameter type="int" name="io_priority" />
<parameter type="GCancellable*" name="cancellable" />
<parameter type="GAsyncReadyCallback" name="callback" />
@@ -3617,7 +4550,7 @@
<method name="QueryInfo" cname="g_file_input_stream_query_info">
<return-type type="GFileInfo*" />
<parameters>
- <parameter type="char*" name="attributes" />
+ <parameter type="const-char*" name="attributes" />
<parameter type="GCancellable*" name="cancellable" />
<parameter type="GError**" name="error" />
</parameters>
@@ -3625,7 +4558,7 @@
<method name="QueryInfoAsync" cname="g_file_input_stream_query_info_async">
<return-type type="void" />
<parameters>
- <parameter type="char*" name="attributes" />
+ <parameter type="const-char*" name="attributes" />
<parameter type="int" name="io_priority" />
<parameter type="GCancellable*" name="cancellable" />
<parameter type="GAsyncReadyCallback" name="callback" />
@@ -3640,6 +4573,114 @@
</parameters>
</method>
</object>
+ <object name="FileIOStream" cname="GFileIOStream" parent="GIOStream">
+ <field name="Priv" cname="priv" type="GFileIOStreamPrivate*" />
+ <virtual_method name="Tell" cname="tell">
+ <return-type type="goffset" />
+ <parameters>
+ <parameter type="GFileIOStream*" name="stream" />
+ </parameters>
+ </virtual_method>
+ <virtual_method name="CanSeek" cname="can_seek">
+ <return-type type="gboolean" />
+ <parameters>
+ <parameter type="GFileIOStream*" name="stream" />
+ </parameters>
+ </virtual_method>
+ <virtual_method name="Seek" cname="seek">
+ <return-type type="gboolean" />
+ <parameters>
+ <parameter type="GFileIOStream*" name="stream" />
+ <parameter type="goffset" name="offset" />
+ <parameter type="GSeekType" name="type" />
+ <parameter type="GCancellable*" name="cancellable" />
+ <parameter type="GError**" name="error" />
+ </parameters>
+ </virtual_method>
+ <virtual_method name="CanTruncate" cname="can_truncate">
+ <return-type type="gboolean" />
+ <parameters>
+ <parameter type="GFileIOStream*" name="stream" />
+ </parameters>
+ </virtual_method>
+ <virtual_method name="TruncateFn" cname="truncate_fn">
+ <return-type type="gboolean" />
+ <parameters>
+ <parameter type="GFileIOStream*" name="stream" />
+ <parameter type="goffset" name="size" />
+ <parameter type="GCancellable*" name="cancellable" />
+ <parameter type="GError**" name="error" />
+ </parameters>
+ </virtual_method>
+ <virtual_method name="QueryInfo" cname="query_info">
+ <return-type type="GFileInfo*" />
+ <parameters>
+ <parameter type="GFileIOStream*" name="stream" />
+ <parameter type="const-char*" name="attributes" />
+ <parameter type="GCancellable*" name="cancellable" />
+ <parameter type="GError**" name="error" />
+ </parameters>
+ </virtual_method>
+ <virtual_method name="QueryInfoAsync" cname="query_info_async">
+ <return-type type="void" />
+ <parameters>
+ <parameter type="GFileIOStream*" name="stream" />
+ <parameter type="const-char*" name="attributes" />
+ <parameter type="int" name="io_priority" />
+ <parameter type="GCancellable*" name="cancellable" />
+ <parameter type="GAsyncReadyCallback" name="callback" />
+ <parameter type="gpointer" name="user_data" />
+ </parameters>
+ </virtual_method>
+ <virtual_method name="QueryInfoFinish" cname="query_info_finish">
+ <return-type type="GFileInfo*" />
+ <parameters>
+ <parameter type="GFileIOStream*" name="stream" />
+ <parameter type="GAsyncResult*" name="res" />
+ <parameter type="GError**" name="error" />
+ </parameters>
+ </virtual_method>
+ <virtual_method name="GetEtag" cname="get_etag">
+ <return-type type="char*" />
+ <parameters>
+ <parameter type="GFileIOStream*" name="stream" />
+ </parameters>
+ </virtual_method>
+ <implements>
+ <interface cname="GSeekable" />
+ </implements>
+ <method name="GetEtag" cname="g_file_io_stream_get_etag">
+ <return-type type="char*" />
+ </method>
+ <method name="GetType" cname="g_file_io_stream_get_type" shared="true">
+ <return-type type="GType" />
+ </method>
+ <method name="QueryInfo" cname="g_file_io_stream_query_info">
+ <return-type type="GFileInfo*" />
+ <parameters>
+ <parameter type="const-char*" name="attributes" />
+ <parameter type="GCancellable*" name="cancellable" />
+ <parameter type="GError**" name="error" />
+ </parameters>
+ </method>
+ <method name="QueryInfoAsync" cname="g_file_io_stream_query_info_async">
+ <return-type type="void" />
+ <parameters>
+ <parameter type="const-char*" name="attributes" />
+ <parameter type="int" name="io_priority" />
+ <parameter type="GCancellable*" name="cancellable" />
+ <parameter type="GAsyncReadyCallback" name="callback" />
+ <parameter type="gpointer" name="user_data" />
+ </parameters>
+ </method>
+ <method name="QueryInfoFinish" cname="g_file_io_stream_query_info_finish">
+ <return-type type="GFileInfo*" />
+ <parameters>
+ <parameter type="GAsyncResult*" name="result" />
+ <parameter type="GError**" name="error" />
+ </parameters>
+ </method>
+ </object>
<object name="FileMonitor" cname="GFileMonitor" parent="GObject">
<field name="Priv" cname="priv" type="GFileMonitorPrivate*" />
<signal name="Changed" cname="changed" when="LAST" field_name="changed">
@@ -3744,7 +4785,7 @@
<return-type type="GFileInfo*" />
<parameters>
<parameter type="GFileOutputStream*" name="stream" />
- <parameter type="char*" name="attributes" />
+ <parameter type="const-char*" name="attributes" />
<parameter type="GCancellable*" name="cancellable" />
<parameter type="GError**" name="error" />
</parameters>
@@ -3753,7 +4794,7 @@
<return-type type="void" />
<parameters>
<parameter type="GFileOutputStream*" name="stream" />
- <parameter type="char*" name="attributes" />
+ <parameter type="const-char*" name="attributes" />
<parameter type="int" name="io_priority" />
<parameter type="GCancellable*" name="cancellable" />
<parameter type="GAsyncReadyCallback" name="callback" />
@@ -3786,7 +4827,7 @@
<method name="QueryInfo" cname="g_file_output_stream_query_info">
<return-type type="GFileInfo*" />
<parameters>
- <parameter type="char*" name="attributes" />
+ <parameter type="const-char*" name="attributes" />
<parameter type="GCancellable*" name="cancellable" />
<parameter type="GError**" name="error" />
</parameters>
@@ -3794,7 +4835,7 @@
<method name="QueryInfoAsync" cname="g_file_output_stream_query_info_async">
<return-type type="void" />
<parameters>
- <parameter type="char*" name="attributes" />
+ <parameter type="const-char*" name="attributes" />
<parameter type="int" name="io_priority" />
<parameter type="GCancellable*" name="cancellable" />
<parameter type="GAsyncReadyCallback" name="callback" />
@@ -3812,22 +4853,42 @@
<object name="FilterInputStream" cname="GFilterInputStream" parent="GInputStream">
<field name="BaseStream" cname="base_stream" type="GInputStream*" />
<property name="BaseStream" cname="base-stream" type="GInputStream" readable="true" writeable="true" construct-only="true" />
+ <property name="CloseBaseStream" cname="close-base-stream" type="gboolean" readable="true" writeable="true" construct-only="true" />
<method name="GetBaseStream" cname="g_filter_input_stream_get_base_stream">
<return-type type="GInputStream*" />
</method>
+ <method name="GetCloseBaseStream" cname="g_filter_input_stream_get_close_base_stream">
+ <return-type type="gboolean" />
+ </method>
<method name="GetType" cname="g_filter_input_stream_get_type" shared="true">
<return-type type="GType" />
</method>
+ <method name="SetCloseBaseStream" cname="g_filter_input_stream_set_close_base_stream">
+ <return-type type="void" />
+ <parameters>
+ <parameter type="gboolean" name="close_base" />
+ </parameters>
+ </method>
</object>
<object name="FilterOutputStream" cname="GFilterOutputStream" parent="GOutputStream">
<field name="BaseStream" cname="base_stream" type="GOutputStream*" />
<property name="BaseStream" cname="base-stream" type="GOutputStream" readable="true" writeable="true" construct-only="true" />
+ <property name="CloseBaseStream" cname="close-base-stream" type="gboolean" readable="true" writeable="true" construct-only="true" />
<method name="GetBaseStream" cname="g_filter_output_stream_get_base_stream">
<return-type type="GOutputStream*" />
</method>
+ <method name="GetCloseBaseStream" cname="g_filter_output_stream_get_close_base_stream">
+ <return-type type="gboolean" />
+ </method>
<method name="GetType" cname="g_filter_output_stream_get_type" shared="true">
<return-type type="GType" />
</method>
+ <method name="SetCloseBaseStream" cname="g_filter_output_stream_set_close_base_stream">
+ <return-type type="void" />
+ <parameters>
+ <parameter type="gboolean" name="close_base" />
+ </parameters>
+ </method>
</object>
<object name="InputStream" cname="GInputStream" parent="GObject">
<field name="Priv" cname="priv" type="GInputStreamPrivate*" />
@@ -4019,11 +5080,104 @@
</parameters>
</method>
</object>
+ <object name="IOStream" cname="GIOStream" parent="GObject">
+ <field name="Priv" cname="priv" type="GIOStreamPrivate*" />
+ <property name="Closed" cname="closed" type="gboolean" readable="true" writeable="true" />
+ <property name="InputStream" cname="input-stream" type="GInputStream" readable="true" />
+ <property name="OutputStream" cname="output-stream" type="GOutputStream" readable="true" />
+ <virtual_method name="GetInputStream" cname="get_input_stream">
+ <return-type type="GInputStream*" />
+ <parameters>
+ <parameter type="GIOStream*" name="stream" />
+ </parameters>
+ </virtual_method>
+ <virtual_method name="GetOutputStream" cname="get_output_stream">
+ <return-type type="GOutputStream*" />
+ <parameters>
+ <parameter type="GIOStream*" name="stream" />
+ </parameters>
+ </virtual_method>
+ <virtual_method name="CloseFn" cname="close_fn">
+ <return-type type="gboolean" />
+ <parameters>
+ <parameter type="GIOStream*" name="stream" />
+ <parameter type="GCancellable*" name="cancellable" />
+ <parameter type="GError**" name="error" />
+ </parameters>
+ </virtual_method>
+ <virtual_method name="CloseAsync" cname="close_async">
+ <return-type type="void" />
+ <parameters>
+ <parameter type="GIOStream*" name="stream" />
+ <parameter type="int" name="io_priority" />
+ <parameter type="GCancellable*" name="cancellable" />
+ <parameter type="GAsyncReadyCallback" name="callback" />
+ <parameter type="gpointer" name="user_data" />
+ </parameters>
+ </virtual_method>
+ <virtual_method name="CloseFinish" cname="close_finish">
+ <return-type type="gboolean" />
+ <parameters>
+ <parameter type="GIOStream*" name="stream" />
+ <parameter type="GAsyncResult*" name="result" />
+ <parameter type="GError**" name="error" />
+ </parameters>
+ </virtual_method>
+ <method name="ClearPending" cname="g_io_stream_clear_pending">
+ <return-type type="void" />
+ </method>
+ <method name="Close" cname="g_io_stream_close">
+ <return-type type="gboolean" />
+ <parameters>
+ <parameter type="GCancellable*" name="cancellable" />
+ <parameter type="GError**" name="error" />
+ </parameters>
+ </method>
+ <method name="CloseAsync" cname="g_io_stream_close_async">
+ <return-type type="void" />
+ <parameters>
+ <parameter type="int" name="io_priority" />
+ <parameter type="GCancellable*" name="cancellable" />
+ <parameter type="GAsyncReadyCallback" name="callback" />
+ <parameter type="gpointer" name="user_data" />
+ </parameters>
+ </method>
+ <method name="CloseFinish" cname="g_io_stream_close_finish">
+ <return-type type="gboolean" />
+ <parameters>
+ <parameter type="GAsyncResult*" name="result" />
+ <parameter type="GError**" name="error" />
+ </parameters>
+ </method>
+ <method name="GetInputStream" cname="g_io_stream_get_input_stream">
+ <return-type type="GInputStream*" />
+ </method>
+ <method name="GetOutputStream" cname="g_io_stream_get_output_stream">
+ <return-type type="GOutputStream*" />
+ </method>
+ <method name="GetType" cname="g_io_stream_get_type" shared="true">
+ <return-type type="GType" />
+ </method>
+ <method name="HasPending" cname="g_io_stream_has_pending">
+ <return-type type="gboolean" />
+ </method>
+ <method name="IsClosed" cname="g_io_stream_is_closed">
+ <return-type type="gboolean" />
+ </method>
+ <method name="SetPending" cname="g_io_stream_set_pending">
+ <return-type type="gboolean" />
+ <parameters>
+ <parameter type="GError**" name="error" />
+ </parameters>
+ </method>
+ </object>
<object name="LocalDirectoryMonitor" cname="GLocalDirectoryMonitor" parent="GFileMonitor">
<field name="Dirname" cname="dirname" type="gchar*" />
+ <field name="Flags" cname="flags" type="GFileMonitorFlags" />
<field name="MountMonitor" cname="mount_monitor" type="GUnixMountMonitor*" />
<field name="WasMounted" cname="was_mounted" type="gboolean" />
<property name="Dirname" cname="dirname" type="gchar*" writeable="true" construct-only="true" />
+ <property name="Flags" cname="flags" type="GFileMonitorFlags" writeable="true" construct-only="true" />
<virtual_method name="IsSupported" cname="is_supported">
<return-type type="gboolean" />
</virtual_method>
@@ -4032,6 +5186,10 @@
</method>
</object>
<object name="LocalFileEnumerator" cname="GLocalFileEnumerator" parent="GFileEnumerator" />
+ <object name="LocalFileIOStream" cname="GLocalFileIOStream" parent="GFileIOStream">
+ <field name="InputStream" cname="input_stream" type="GInputStream*" />
+ <field name="OutputStream" cname="output_stream" type="GOutputStream*" />
+ </object>
<object name="MemoryInputStream" cname="GMemoryInputStream" parent="GInputStream">
<field name="Priv" cname="priv" type="GMemoryInputStreamPrivate*" />
<implements>
@@ -4110,6 +5268,21 @@
<parameter type="GMountOperationResult" name="result" />
</parameters>
</signal>
+ <signal name="Aborted" cname="aborted" when="LAST" field_name="aborted">
+ <return-type type="void" />
+ <parameters>
+ <parameter type="GMountOperation*" name="op" />
+ </parameters>
+ </signal>
+ <signal name="ShowProcesses" cname="show-processes" when="LAST" field_name="show_processes">
+ <return-type type="void" />
+ <parameters>
+ <parameter type="GMountOperation*" name="op" />
+ <parameter type="const-gchar*" name="message" />
+ <parameter type="GArray*" name="processes" />
+ <parameter type="const-gchar*" array="true" name="choices" />
+ </parameters>
+ </signal>
<property name="Username" cname="username" type="gchar*" readable="true" writeable="true" />
<property name="Password" cname="password" type="gchar*" readable="true" writeable="true" />
<property name="Anonymous" cname="anonymous" type="gboolean" readable="true" writeable="true" />
@@ -4193,6 +5366,65 @@
<return-type type="GType" />
</method>
</object>
+ <object name="NetworkAddress" cname="GNetworkAddress" parent="GObject">
+ <field name="Priv" cname="priv" type="GNetworkAddressPrivate*" />
+ <property name="Hostname" cname="hostname" type="gchar*" readable="true" writeable="true" construct-only="true" />
+ <property name="Port" cname="port" type="guint" readable="true" writeable="true" construct-only="true" />
+ <implements>
+ <interface cname="GSocketConnectable" />
+ </implements>
+ <method name="GetHostname" cname="g_network_address_get_hostname">
+ <return-type type="const-gchar*" />
+ </method>
+ <method name="GetPort" cname="g_network_address_get_port">
+ <return-type type="guint16" />
+ </method>
+ <method name="GetType" cname="g_network_address_get_type" shared="true">
+ <return-type type="GType" />
+ </method>
+ <constructor cname="g_network_address_new">
+ <parameters>
+ <parameter type="const-gchar*" name="hostname" />
+ <parameter type="guint16" name="port" />
+ </parameters>
+ </constructor>
+ <method name="Parse" cname="g_network_address_parse" shared="true">
+ <return-type type="GSocketConnectable*" />
+ <parameters>
+ <parameter type="const-gchar*" name="host_and_port" />
+ <parameter type="guint16" name="default_port" />
+ <parameter type="GError**" name="error" />
+ </parameters>
+ </method>
+ </object>
+ <object name="NetworkService" cname="GNetworkService" parent="GObject">
+ <field name="Priv" cname="priv" type="GNetworkServicePrivate*" />
+ <property name="Service" cname="service" type="gchar*" readable="true" writeable="true" construct-only="true" />
+ <property name="Protocol" cname="protocol" type="gchar*" readable="true" writeable="true" construct-only="true" />
+ <property name="Domain" cname="domain" type="gchar*" readable="true" writeable="true" construct-only="true" />
+ <implements>
+ <interface cname="GSocketConnectable" />
+ </implements>
+ <method name="GetDomain" cname="g_network_service_get_domain">
+ <return-type type="const-gchar*" />
+ </method>
+ <method name="GetProtocol" cname="g_network_service_get_protocol">
+ <return-type type="const-gchar*" />
+ </method>
+ <method name="GetService" cname="g_network_service_get_service">
+ <return-type type="const-gchar*" />
+ </method>
+ <method name="GetType" cname="g_network_service_get_type" shared="true">
+ <return-type type="GType" />
+ </method>
+ <constructor cname="g_network_service_new">
+ <parameters>
+ <parameter type="const-gchar*" name="service" />
+ <parameter type="const-gchar*" name="protocol" />
+ <parameter type="const-gchar*" name="domain" />
+ </parameters>
+ </constructor>
+ </object>
<object name="OutputStream" cname="GOutputStream" parent="GObject">
<field name="Priv" cname="priv" type="GOutputStreamPrivate*" />
<virtual_method name="WriteFn" cname="write_fn">
@@ -4461,6 +5693,14 @@
<method name="GetType" cname="g_simple_async_result_get_type" shared="true">
<return-type type="GType" />
</method>
+ <method name="IsValid" cname="g_simple_async_result_is_valid" shared="true">
+ <return-type type="gboolean" />
+ <parameters>
+ <parameter type="GAsyncResult*" name="result" />
+ <parameter type="GObject*" name="source" />
+ <parameter type="gpointer" name="source_tag" />
+ </parameters>
+ </method>
<constructor cname="g_simple_async_result_new">
<parameters>
<parameter type="GObject*" name="source_object" />
@@ -4523,7 +5763,7 @@
<method name="SetFromError" cname="g_simple_async_result_set_from_error">
<return-type type="void" />
<parameters>
- <parameter type="GError*" name="error" />
+ <parameter type="const-GError*" name="error" />
</parameters>
</method>
<method name="SetHandleCancellation" cname="g_simple_async_result_set_handle_cancellation">
@@ -4566,7 +5806,7 @@
</parameters>
</method>
<method name="GetNames" cname="g_themed_icon_get_names">
- <return-type type="const-char**" />
+ <return-type type="const-gchar**" />
</method>
<method name="GetType" cname="g_themed_icon_get_type" shared="true">
<return-type type="GType" />
@@ -4622,6 +5862,52 @@
<parameter type="const-char*" name="parse_name" />
</parameters>
</virtual_method>
+ <virtual_method name="LocalFileAddInfo" cname="local_file_add_info">
+ <return-type type="void" />
+ <parameters>
+ <parameter type="GVfs*" name="vfs" />
+ <parameter type="const-char*" name="filename" />
+ <parameter type="guint64" name="device" />
+ <parameter type="GFileAttributeMatcher*" name="attribute_matcher" />
+ <parameter type="GFileInfo*" name="info" />
+ <parameter type="GCancellable*" name="cancellable" />
+ <parameter type="gpointer*" name="extra_data" />
+ <parameter type="GDestroyNotify*" name="free_extra_data" />
+ </parameters>
+ </virtual_method>
+ <virtual_method name="AddWritableNamespaces" cname="add_writable_namespaces">
+ <return-type type="void" />
+ <parameters>
+ <parameter type="GVfs*" name="vfs" />
+ <parameter type="GFileAttributeInfoList*" name="list" />
+ </parameters>
+ </virtual_method>
+ <virtual_method name="LocalFileSetAttributes" cname="local_file_set_attributes">
+ <return-type type="gboolean" />
+ <parameters>
+ <parameter type="GVfs*" name="vfs" />
+ <parameter type="const-char*" name="filename" />
+ <parameter type="GFileInfo*" name="info" />
+ <parameter type="GFileQueryInfoFlags" name="flags" />
+ <parameter type="GCancellable*" name="cancellable" />
+ <parameter type="GError**" name="error" />
+ </parameters>
+ </virtual_method>
+ <virtual_method name="LocalFileRemoved" cname="local_file_removed">
+ <return-type type="void" />
+ <parameters>
+ <parameter type="GVfs*" name="vfs" />
+ <parameter type="const-char*" name="filename" />
+ </parameters>
+ </virtual_method>
+ <virtual_method name="LocalFileMoved" cname="local_file_moved">
+ <return-type type="void" />
+ <parameters>
+ <parameter type="GVfs*" name="vfs" />
+ <parameter type="const-char*" name="source" />
+ <parameter type="const-char*" name="dest" />
+ </parameters>
+ </virtual_method>
<method name="GetDefault" cname="g_vfs_get_default" shared="true">
<return-type type="GVfs*" />
</method>
@@ -4777,7 +6063,14 @@
<parameter type="GDrive*" name="drive" />
</parameters>
</signal>
- <method name="AdoptOrphanMount" cname="g_volume_monitor_adopt_orphan_mount" shared="true">
+ <signal name="DriveStopButton" cname="drive-stop-button" when="LAST" field_name="drive_stop_button">
+ <return-type type="void" />
+ <parameters>
+ <parameter type="GVolumeMonitor*" name="volume_monitor" />
+ <parameter type="GDrive*" name="drive" />
+ </parameters>
+ </signal>
+ <method name="AdoptOrphanMount" cname="g_volume_monitor_adopt_orphan_mount" deprecated="1" shared="true">
<return-type type="GVolume*" />
<parameters>
<parameter type="GMount*" name="mount" />
@@ -4816,7 +6109,7 @@
<field name="Type" cname="type" type="GFileAttributeType" />
<field name="Flags" cname="flags" type="GFileAttributeInfoFlags" />
</struct>
- <struct name="FileAttributeInfoList" cname="GFileAttributeInfoList" opaque="true">
+ <boxed name="FileAttributeInfoList" cname="GFileAttributeInfoList" opaque="true">
<field name="Infos" cname="infos" type="GFileAttributeInfo*" access="public" writeable="true" />
<field name="NInfos" cname="n_infos" type="int" access="public" writeable="true" />
<method name="Add" cname="g_file_attribute_info_list_add">
@@ -4830,6 +6123,9 @@
<method name="Dup" cname="g_file_attribute_info_list_dup">
<return-type type="GFileAttributeInfoList*" />
</method>
+ <method name="GetType" cname="g_file_attribute_info_list_get_type" shared="true">
+ <return-type type="GType" />
+ </method>
<method name="Lookup" cname="g_file_attribute_info_list_lookup">
<return-type type="const-GFileAttributeInfo*" />
<parameters>
@@ -4843,7 +6139,7 @@
<method name="Unref" cname="g_file_attribute_info_list_unref">
<return-type type="void" />
</method>
- </struct>
+ </boxed>
<struct name="FileAttributeMatcher" cname="GFileAttributeMatcher" opaque="true">
<method name="EnumerateNamespace" cname="g_file_attribute_matcher_enumerate_namespace">
<return-type type="gboolean" />
@@ -4951,6 +6247,65 @@
</parameters>
</method>
</struct>
+ <struct name="InetAddress" cname="GInetAddress" opaque="true" />
+ <struct name="InetSocketAddress" cname="GInetSocketAddress" opaque="true" />
+ <struct name="InputVector" cname="GInputVector">
+ <field name="Buffer" cname="buffer" type="gpointer" />
+ <field name="Size" cname="size" type="gsize" />
+ </struct>
+ <struct name="OutputVector" cname="GOutputVector">
+ <field name="Buffer" cname="buffer" type="gconstpointer" />
+ <field name="Size" cname="size" type="gsize" />
+ </struct>
+ <struct name="Resolver" cname="GResolver" opaque="true" />
+ <struct name="Socket" cname="GSocket" opaque="true" />
+ <struct name="SocketAddress" cname="GSocketAddress" opaque="true" />
+ <struct name="SocketAddressEnumerator" cname="GSocketAddressEnumerator" opaque="true" />
+ <struct name="SocketClient" cname="GSocketClient" opaque="true" />
+ <struct name="SocketConnectable" cname="GSocketConnectable" opaque="true" />
+ <struct name="SocketConnection" cname="GSocketConnection" opaque="true" />
+ <struct name="SocketControlMessage" cname="GSocketControlMessage" opaque="true" />
+ <struct name="SocketListener" cname="GSocketListener" opaque="true" />
+ <struct name="SocketService" cname="GSocketService" opaque="true" />
+ <boxed name="SrvTarget" cname="GSrvTarget" opaque="true">
+ <method name="Copy" cname="g_srv_target_copy">
+ <return-type type="GSrvTarget*" owned="true" />
+ </method>
+ <method name="Free" cname="g_srv_target_free">
+ <return-type type="void" />
+ </method>
+ <method name="GetHostname" cname="g_srv_target_get_hostname">
+ <return-type type="const-gchar*" />
+ </method>
+ <method name="GetPort" cname="g_srv_target_get_port">
+ <return-type type="guint16" />
+ </method>
+ <method name="GetPriority" cname="g_srv_target_get_priority">
+ <return-type type="guint16" />
+ </method>
+ <method name="GetType" cname="g_srv_target_get_type" shared="true">
+ <return-type type="GType" />
+ </method>
+ <method name="GetWeight" cname="g_srv_target_get_weight">
+ <return-type type="guint16" />
+ </method>
+ <method name="ListSort" cname="g_srv_target_list_sort" shared="true">
+ <return-type type="GList*" />
+ <parameters>
+ <parameter type="GList*" name="targets" />
+ </parameters>
+ </method>
+ <constructor cname="g_srv_target_new">
+ <parameters>
+ <parameter type="const-gchar*" name="hostname" />
+ <parameter type="guint16" name="port" />
+ <parameter type="guint16" name="priority" />
+ <parameter type="guint16" name="weight" />
+ </parameters>
+ </constructor>
+ </boxed>
+ <struct name="TcpConnection" cname="GTcpConnection" opaque="true" />
+ <struct name="ThreadedSocketService" cname="GThreadedSocketService" opaque="true" />
<class name="Content" cname="GContent_">
<method name="TypeCanBeExecutable" cname="g_content_type_can_be_executable" shared="true">
<return-type type="gboolean" />
diff --git a/lib/gnome-keyring-sharp/AccessRights.cs b/lib/gnome-keyring-sharp/AccessRights.cs
deleted file mode 100644
index 2d62b42..0000000
--- a/lib/gnome-keyring-sharp/AccessRights.cs
+++ /dev/null
@@ -1,39 +0,0 @@
-//
-// Gnome.Keyring.AccessRights.cs
-//
-// Authors:
-// Gonzalo Paniagua Javier (gonzalo at ximian.com)
-//
-// (C) Copyright 2006 Novell, Inc. (http://www.novell.com)
-//
-
-// Permission is hereby granted, free of charge, to any person obtaining
-// a copy of this software and associated documentation files (the
-// "Software"), to deal in the Software without restriction, including
-// without limitation the rights to use, copy, modify, merge, publish,
-// distribute, sublicense, and/or sell copies of the Software, and to
-// permit persons to whom the Software is furnished to do so, subject to
-// the following conditions:
-//
-// The above copyright notice and this permission notice shall be
-// included in all copies or substantial portions of the Software.
-//
-// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
-// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
-// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
-// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
-// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
-// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
-// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
-//
-
-using System;
-namespace Gnome.Keyring {
- [Flags]
- public enum AccessRights {
- Read = 1,
- Write = 1 << 1,
- Remove = 1 << 2
- }
-}
-
diff --git a/lib/gnome-keyring-sharp/AssemblyInfo.cs b/lib/gnome-keyring-sharp/AssemblyInfo.cs
deleted file mode 100644
index efa690e..0000000
--- a/lib/gnome-keyring-sharp/AssemblyInfo.cs
+++ /dev/null
@@ -1,36 +0,0 @@
-// AssemblyInfo.cs for Gnome.Keyring.dll
-//
-// Authors:
-// Gonzalo Paniagua Javier (gonzalo at ximian.com)
-//
-// Copyright (c) 2006 Novell, Inc. (http://www.novell.com)
-//
-// Permission is hereby granted, free of charge, to any person obtaining
-// a copy of this software and associated documentation files (the
-// "Software"), to deal in the Software without restriction, including
-// without limitation the rights to use, copy, modify, merge, publish,
-// distribute, sublicense, and/or sell copies of the Software, and to
-// permit persons to whom the Software is furnished to do so, subject to
-// the following conditions:
-//
-// The above copyright notice and this permission notice shall be
-// included in all copies or substantial portions of the Software.
-//
-// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
-// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
-// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
-// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
-// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
-// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
-// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
-//
-
-using System.Reflection;
-using System.Runtime.CompilerServices;
-
-[assembly: AssemblyVersion("0.1.0")]
-[assembly: AssemblyTitle ("Gnome.Keyring")]
-[assembly: AssemblyDescription ("")]
-[assembly: AssemblyCopyright ("(c) 2006 Novell, Inc.")]
-[assembly: AssemblyCompany ("Novell, Inc.")]
-
diff --git a/lib/gnome-keyring-sharp/AttributeType.cs b/lib/gnome-keyring-sharp/AttributeType.cs
deleted file mode 100644
index bff0a9f..0000000
--- a/lib/gnome-keyring-sharp/AttributeType.cs
+++ /dev/null
@@ -1,36 +0,0 @@
-//
-// Gnome.Keyring.AttributeType.cs
-//
-// Authors:
-// Gonzalo Paniagua Javier (gonzalo at ximian.com)
-//
-// (C) Copyright 2006 Novell, Inc. (http://www.novell.com)
-//
-
-// Permission is hereby granted, free of charge, to any person obtaining
-// a copy of this software and associated documentation files (the
-// "Software"), to deal in the Software without restriction, including
-// without limitation the rights to use, copy, modify, merge, publish,
-// distribute, sublicense, and/or sell copies of the Software, and to
-// permit persons to whom the Software is furnished to do so, subject to
-// the following conditions:
-//
-// The above copyright notice and this permission notice shall be
-// included in all copies or substantial portions of the Software.
-//
-// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
-// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
-// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
-// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
-// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
-// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
-// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
-//
-
-namespace Gnome.Keyring {
- enum AttributeType {
- String,
- UInt32
- }
-}
-
diff --git a/lib/gnome-keyring-sharp/GenericItemData.cs b/lib/gnome-keyring-sharp/GenericItemData.cs
deleted file mode 100644
index 67ef2cf..0000000
--- a/lib/gnome-keyring-sharp/GenericItemData.cs
+++ /dev/null
@@ -1,50 +0,0 @@
-//
-// Gnome.Keyring.GenericItemData.cs
-//
-// Authors:
-// Gonzalo Paniagua Javier (gonzalo at ximian.com)
-//
-// (C) Copyright 2006 Novell, Inc. (http://www.novell.com)
-//
-
-// Permission is hereby granted, free of charge, to any person obtaining
-// a copy of this software and associated documentation files (the
-// "Software"), to deal in the Software without restriction, including
-// without limitation the rights to use, copy, modify, merge, publish,
-// distribute, sublicense, and/or sell copies of the Software, and to
-// permit persons to whom the Software is furnished to do so, subject to
-// the following conditions:
-//
-// The above copyright notice and this permission notice shall be
-// included in all copies or substantial portions of the Software.
-//
-// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
-// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
-// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
-// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
-// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
-// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
-// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
-//
-
-using System.Collections;
-
-namespace Gnome.Keyring {
- public class GenericItemData : ItemData {
- public string Name;
-
- public override ItemType Type {
- get { return ItemType.GenericSecret; }
- }
-
- internal override void SetValuesFromAttributes ()
- {
- Hashtable tbl = Attributes;
- if (tbl == null)
- return;
-
- Name = (string) tbl ["name"];
- }
- }
-}
-
diff --git a/lib/gnome-keyring-sharp/ItemACL.cs b/lib/gnome-keyring-sharp/ItemACL.cs
deleted file mode 100644
index 03a1e01..0000000
--- a/lib/gnome-keyring-sharp/ItemACL.cs
+++ /dev/null
@@ -1,63 +0,0 @@
-//
-// Gnome.Keyring.ItemACL.cs
-//
-// Authors:
-// Gonzalo Paniagua Javier (gonzalo at ximian.com)
-//
-// (C) Copyright 2006 Novell, Inc. (http://www.novell.com)
-//
-
-// Permission is hereby granted, free of charge, to any person obtaining
-// a copy of this software and associated documentation files (the
-// "Software"), to deal in the Software without restriction, including
-// without limitation the rights to use, copy, modify, merge, publish,
-// distribute, sublicense, and/or sell copies of the Software, and to
-// permit persons to whom the Software is furnished to do so, subject to
-// the following conditions:
-//
-// The above copyright notice and this permission notice shall be
-// included in all copies or substantial portions of the Software.
-//
-// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
-// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
-// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
-// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
-// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
-// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
-// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
-//
-
-using System;
-
-namespace Gnome.Keyring {
- public class ItemACL {
- string display_name;
- string path;
- AccessRights access;
-
- public ItemACL (string displayName, string path, AccessRights access)
- {
- this.display_name = displayName;
- this.path = path;
- this.access = (AccessRights) access;
- }
-
- public override string ToString ()
- {
- return String.Format ("Name: {0} Path: {1} Access: {2}", display_name, path, access);
- }
-
- public string DisplayName {
- get { return display_name; }
- }
-
- public string FullPath {
- get { return path; }
- }
-
- public AccessRights Access {
- get { return access; }
- }
- }
-}
-
diff --git a/lib/gnome-keyring-sharp/ItemData.cs b/lib/gnome-keyring-sharp/ItemData.cs
deleted file mode 100644
index 505416a..0000000
--- a/lib/gnome-keyring-sharp/ItemData.cs
+++ /dev/null
@@ -1,70 +0,0 @@
-//
-// Gnome.Keyring.ItemData.cs
-//
-// Authors:
-// Gonzalo Paniagua Javier (gonzalo at ximian.com)
-//
-// (C) Copyright 2006 Novell, Inc. (http://www.novell.com)
-//
-
-// Permission is hereby granted, free of charge, to any person obtaining
-// a copy of this software and associated documentation files (the
-// "Software"), to deal in the Software without restriction, including
-// without limitation the rights to use, copy, modify, merge, publish,
-// distribute, sublicense, and/or sell copies of the Software, and to
-// permit persons to whom the Software is furnished to do so, subject to
-// the following conditions:
-//
-// The above copyright notice and this permission notice shall be
-// included in all copies or substantial portions of the Software.
-//
-// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
-// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
-// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
-// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
-// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
-// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
-// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
-//
-
-using System;
-using System.Collections;
-using System.Text;
-
-namespace Gnome.Keyring {
- public abstract class ItemData {
- public string Keyring;
- public int ItemID;
- public string Secret;
- public Hashtable Attributes;
-
- public abstract ItemType Type { get; }
-
- public override string ToString ()
- {
- StringBuilder sb = new StringBuilder ();
- foreach (string key in Attributes.Keys)
- sb.AppendFormat ("{0}: {1}\n", key, Attributes [key]);
- return String.Format ("Keyring: {0} ItemID: {1} Secret: {2}\n{3}", Keyring, ItemID, Secret, sb.ToString ());
- }
-
- internal virtual void SetValuesFromAttributes ()
- {
- }
-
- internal static ItemData GetInstanceFromItemType (ItemType type)
- {
- if (type == ItemType.GenericSecret)
- return new GenericItemData ();
-
- if (type == ItemType.NetworkPassword)
- return new NetItemData ();
-
- if (type == ItemType.Note)
- return new NoteItemData ();
-
- throw new ArgumentException ("Unknown type: " + type, "type");
- }
- }
-}
-
diff --git a/lib/gnome-keyring-sharp/ItemType.cs b/lib/gnome-keyring-sharp/ItemType.cs
deleted file mode 100644
index 5ba2eb7..0000000
--- a/lib/gnome-keyring-sharp/ItemType.cs
+++ /dev/null
@@ -1,37 +0,0 @@
-//
-// Gnome.Keyring.ItemType.cs
-//
-// Authors:
-// Gonzalo Paniagua Javier (gonzalo at ximian.com)
-//
-// (C) Copyright 2006 Novell, Inc. (http://www.novell.com)
-//
-
-// Permission is hereby granted, free of charge, to any person obtaining
-// a copy of this software and associated documentation files (the
-// "Software"), to deal in the Software without restriction, including
-// without limitation the rights to use, copy, modify, merge, publish,
-// distribute, sublicense, and/or sell copies of the Software, and to
-// permit persons to whom the Software is furnished to do so, subject to
-// the following conditions:
-//
-// The above copyright notice and this permission notice shall be
-// included in all copies or substantial portions of the Software.
-//
-// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
-// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
-// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
-// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
-// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
-// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
-// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
-//
-
-namespace Gnome.Keyring {
- public enum ItemType {
- GenericSecret,
- NetworkPassword,
- Note
- }
-}
-
diff --git a/lib/gnome-keyring-sharp/KeyringException.cs b/lib/gnome-keyring-sharp/KeyringException.cs
deleted file mode 100644
index daba534..0000000
--- a/lib/gnome-keyring-sharp/KeyringException.cs
+++ /dev/null
@@ -1,89 +0,0 @@
-//
-// Gnome.Keyring.KeyringException.cs
-//
-// Authors:
-// Gonzalo Paniagua Javier (gonzalo at ximian.com)
-//
-// (C) Copyright 2006 Novell, Inc. (http://www.novell.com)
-//
-
-// Permission is hereby granted, free of charge, to any person obtaining
-// a copy of this software and associated documentation files (the
-// "Software"), to deal in the Software without restriction, including
-// without limitation the rights to use, copy, modify, merge, publish,
-// distribute, sublicense, and/or sell copies of the Software, and to
-// permit persons to whom the Software is furnished to do so, subject to
-// the following conditions:
-//
-// The above copyright notice and this permission notice shall be
-// included in all copies or substantial portions of the Software.
-//
-// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
-// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
-// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
-// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
-// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
-// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
-// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
-//
-
-using System;
-using System.Runtime.Serialization;
-
-namespace Gnome.Keyring {
- public class KeyringException : Exception, ISerializable {
- ResultCode code;
-
- public KeyringException () : base ("Unknown error")
- {
- }
-
- internal KeyringException (ResultCode code) : base (GetMsg (code))
- {
- this.code = code;
- }
-
- protected KeyringException (SerializationInfo info, StreamingContext context)
- : base (info, context)
- {
- code = (ResultCode) info.GetInt32 ("code");
- }
-
- void ISerializable.GetObjectData (SerializationInfo info, StreamingContext context)
- {
- base.GetObjectData (info, context);
- info.AddValue ("code", (int) code, typeof (int));
- }
-
- public ResultCode ResultCode {
- get { return code; }
- }
-
- static string GetMsg (ResultCode code)
- {
- switch (code) {
- case ResultCode.Ok:
- return "Success";
- case ResultCode.Denied:
- return "Access denied";
- case ResultCode.NoKeyringDaemon:
- return "The keyring daemon is not available";
- case ResultCode.AlreadyUnlocked:
- return "Keyring was already unlocked";
- case ResultCode.NoSuchKeyring:
- return "No such keyring";
- case ResultCode.BadArguments:
- return "Bad arguments";
- case ResultCode.IOError:
- return "I/O error";
- case ResultCode.Cancelled:
- return "Operation canceled";
- case ResultCode.AlreadyExists:
- return "Item already exists";
- default:
- return "Unknown error";
- }
- }
- }
-}
-
diff --git a/lib/gnome-keyring-sharp/KeyringInfo.cs b/lib/gnome-keyring-sharp/KeyringInfo.cs
deleted file mode 100644
index fcce742..0000000
--- a/lib/gnome-keyring-sharp/KeyringInfo.cs
+++ /dev/null
@@ -1,106 +0,0 @@
-//
-// Gnome.Keyring.KeyringInfo.cs
-//
-// Authors:
-// Gonzalo Paniagua Javier (gonzalo at ximian.com)
-//
-// (C) Copyright 2006 Novell, Inc. (http://www.novell.com)
-//
-
-// Permission is hereby granted, free of charge, to any person obtaining
-// a copy of this software and associated documentation files (the
-// "Software"), to deal in the Software without restriction, including
-// without limitation the rights to use, copy, modify, merge, publish,
-// distribute, sublicense, and/or sell copies of the Software, and to
-// permit persons to whom the Software is furnished to do so, subject to
-// the following conditions:
-//
-// The above copyright notice and this permission notice shall be
-// included in all copies or substantial portions of the Software.
-//
-// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
-// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
-// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
-// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
-// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
-// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
-// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
-//
-
-using System;
-namespace Gnome.Keyring {
- public class KeyringInfo {
- int lock_timeout;
- DateTime mtime;
- DateTime ctime;
- bool lock_on_idle;
- bool locked;
- string name;
-
- internal KeyringInfo (string name, bool lock_on_idle, int lock_timeout, DateTime mtime, DateTime ctime, bool locked)
- {
- this.name = name;
- this.lock_timeout = lock_timeout;
- this.mtime = mtime;
- this.ctime = ctime;
- this.lock_on_idle = lock_on_idle;
- this.locked = locked;
- }
-
- public KeyringInfo ()
- {
- }
-
- public KeyringInfo (bool lockOnIdle) : this (lockOnIdle, 0)
- {
- }
-
- public KeyringInfo (bool lockOnIdle, int lockTimeout)
- {
- this.lock_on_idle = lockOnIdle;
- LockTimeoutSeconds = lockTimeout;
- }
-
- public override string ToString ()
- {
- return String.Format ("Keyring name: {0}\n" +
- "Locked: {2}\n" +
- "LockOnIdle: {1}\n" +
- "Lock timeout: {3}\n" +
- "Creation time: {4}\n" +
- "Modification time: {5}",
- name, lock_on_idle, locked, lock_timeout, ctime, mtime);
- }
-
- public string Name {
- get { return name; }
- }
-
- public bool LockOnIdle {
- get { return lock_on_idle; }
- set { lock_on_idle = value; }
- }
-
- public int LockTimeoutSeconds {
- get { return lock_timeout; }
- set {
- if (value < 0)
- throw new ArgumentOutOfRangeException ("value");
- lock_timeout = value;
- }
- }
-
- public DateTime ModificationTime {
- get { return mtime; }
- }
-
- public DateTime CreationTime {
- get { return ctime; }
- }
-
- public bool Locked {
- get { return locked; }
- }
- }
-}
-
diff --git a/lib/gnome-keyring-sharp/Makefile.am b/lib/gnome-keyring-sharp/Makefile.am
deleted file mode 100644
index 309fd2f..0000000
--- a/lib/gnome-keyring-sharp/Makefile.am
+++ /dev/null
@@ -1,41 +0,0 @@
-include $(top_srcdir)/Makefile.include
-
-ASSEMBLY_NAME = gnome-keyring-sharp
-
-ASSEMBLY_SOURCES = \
- $(srcdir)/AccessRights.cs \
- $(srcdir)/AssemblyInfo.cs \
- $(srcdir)/AttributeType.cs \
- $(srcdir)/GenericItemData.cs \
- $(srcdir)/ItemACL.cs \
- $(srcdir)/ItemData.cs \
- $(srcdir)/ItemType.cs \
- $(srcdir)/KeyringException.cs \
- $(srcdir)/KeyringInfo.cs \
- $(srcdir)/NetItemData.cs \
- $(srcdir)/NoteItemData.cs \
- $(srcdir)/Operation.cs \
- $(srcdir)/RequestMessage.cs \
- $(srcdir)/ResponseMessage.cs \
- $(srcdir)/ResultCode.cs \
- $(srcdir)/Ring.cs
-
-REFS = -r:Mono.Posix $(NDESK_DBUS_LIBS)
-
-PKGS =
-
-ASSEMBLY = $(ASSEMBLY_NAME).dll
-
-all: $(ASSEMBLY)
-
-$(ASSEMBLY): $(ASSEMBLY_SOURCES)
- $(CSC_LIB) -out:$@ -d:WITH_DBUS $(PKGS) $(REFS) $(ASSEMBLY_SOURCES)
-
-assemblydir = $(pkglibdir)
-assembly_DATA = $(ASSEMBLY)
-
-EXTRA_DIST = $(ASSEMBLY_SOURCES)
-
-CLEANFILES = \
- $(ASSEMBLY) \
- $(ASSEMBLY).mdb
diff --git a/lib/gnome-keyring-sharp/Makefile.in b/lib/gnome-keyring-sharp/Makefile.in
deleted file mode 100644
index 8adec9c..0000000
--- a/lib/gnome-keyring-sharp/Makefile.in
+++ /dev/null
@@ -1,556 +0,0 @@
-# Makefile.in generated by automake 1.11.1 from Makefile.am.
-# @configure_input@
-
-# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
-# 2003, 2004, 2005, 2006, 2007, 2008, 2009 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.
-
-# This program is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
-# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
-# PARTICULAR PURPOSE.
-
- at SET_MAKE@
-
-VPATH = @srcdir@
-pkgdatadir = $(datadir)/@PACKAGE@
-pkgincludedir = $(includedir)/@PACKAGE@
-pkglibdir = $(libdir)/@PACKAGE@
-pkglibexecdir = $(libexecdir)/@PACKAGE@
-am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
-install_sh_DATA = $(install_sh) -c -m 644
-install_sh_PROGRAM = $(install_sh) -c
-install_sh_SCRIPT = $(install_sh) -c
-INSTALL_HEADER = $(INSTALL_DATA)
-transform = $(program_transform_name)
-NORMAL_INSTALL = :
-PRE_INSTALL = :
-POST_INSTALL = :
-NORMAL_UNINSTALL = :
-PRE_UNINSTALL = :
-POST_UNINSTALL = :
-build_triplet = @build@
-host_triplet = @host@
-DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in \
- $(top_srcdir)/Makefile.include
-subdir = lib/gnome-keyring-sharp
-ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
-am__aclocal_m4_deps = $(top_srcdir)/build/m4/shave/shave.m4 \
- $(top_srcdir)/build/m4/shamrock/expansions.m4 \
- $(top_srcdir)/build/m4/shamrock/mono.m4 \
- $(top_srcdir)/build/m4/shamrock/programs.m4 \
- $(top_srcdir)/acinclude.m4 $(top_srcdir)/configure.ac
-am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
- $(ACLOCAL_M4)
-mkinstalldirs = $(install_sh) -d
-CONFIG_HEADER = $(top_builddir)/config.h
-CONFIG_CLEAN_FILES =
-CONFIG_CLEAN_VPATH_FILES =
-SOURCES =
-DIST_SOURCES =
-am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`;
-am__vpath_adj = case $$p in \
- $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \
- *) f=$$p;; \
- esac;
-am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`;
-am__install_max = 40
-am__nobase_strip_setup = \
- srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'`
-am__nobase_strip = \
- for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||"
-am__nobase_list = $(am__nobase_strip_setup); \
- for p in $$list; do echo "$$p $$p"; done | \
- sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \
- $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \
- if (++n[$$2] == $(am__install_max)) \
- { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \
- END { for (dir in files) print dir, files[dir] }'
-am__base_list = \
- sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \
- sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g'
-am__installdirs = "$(DESTDIR)$(assemblydir)"
-DATA = $(assembly_DATA)
-DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
-ACLOCAL = @ACLOCAL@
-ACLOCAL_AMFLAGS = @ACLOCAL_AMFLAGS@
-ALL_LINGUAS = @ALL_LINGUAS@
-AMTAR = @AMTAR@
-AM_MAKEFLAGS = @AM_MAKEFLAGS@
-API_VERSION = @API_VERSION@
-AR = @AR@
-ASM_VERSION = @ASM_VERSION@
-AUTOCONF = @AUTOCONF@
-AUTOHEADER = @AUTOHEADER@
-AUTOMAKE = @AUTOMAKE@
-AWK = @AWK@
-CATALOGS = @CATALOGS@
-CATOBJEXT = @CATOBJEXT@
-CC = @CC@
-CCDEPMODE = @CCDEPMODE@
-CFLAGS = @CFLAGS@
-CPP = @CPP@
-CPPFLAGS = @CPPFLAGS@
-CSC_DEFINES = @CSC_DEFINES@
-CXX = @CXX@
-CXXCPP = @CXXCPP@
-CXXDEPMODE = @CXXDEPMODE@
-CXXFLAGS = @CXXFLAGS@
-CYGPATH_W = @CYGPATH_W@
-DATADIRNAME = @DATADIRNAME@
-DEFS = @DEFS@
-DEPDIR = @DEPDIR@
-DISPLAY_VERSION = @DISPLAY_VERSION@
-DISTCHECK_CONFIGURE_FLAGS = @DISTCHECK_CONFIGURE_FLAGS@
-DOC_USER_FORMATS = @DOC_USER_FORMATS@
-DSYMUTIL = @DSYMUTIL@
-DUMPBIN = @DUMPBIN@
-ECHO_C = @ECHO_C@
-ECHO_N = @ECHO_N@
-ECHO_T = @ECHO_T@
-EGREP = @EGREP@
-EXEEXT = @EXEEXT@
-EXIF_CFLAGS = @EXIF_CFLAGS@
-EXIF_LIBS = @EXIF_LIBS@
-EXIF_SOVERSION = @EXIF_SOVERSION@
-F77 = @F77@
-FC = @FC@
-FGREP = @FGREP@
-F_CFLAGS = @F_CFLAGS@
-F_LIBS = @F_LIBS@
-GAPI2CODEGEN = @GAPI2CODEGEN@
-GAPI2FIXUP = @GAPI2FIXUP@
-GAPI2PARSER = @GAPI2PARSER@
-GCONFTOOL = @GCONFTOOL@
-GCONF_SCHEMA_CONFIG_SOURCE = @GCONF_SCHEMA_CONFIG_SOURCE@
-GCONF_SCHEMA_FILE_DIR = @GCONF_SCHEMA_FILE_DIR@
-GCONF_SHARP_CFLAGS = @GCONF_SHARP_CFLAGS@
-GCONF_SHARP_LIBS = @GCONF_SHARP_LIBS@
-GETTEXT_PACKAGE = @GETTEXT_PACKAGE@
-GIO_CFLAGS = @GIO_CFLAGS@
-GIO_LIBS = @GIO_LIBS@
-GLIBSHARP_CFLAGS = @GLIBSHARP_CFLAGS@
-GLIBSHARP_LIBS = @GLIBSHARP_LIBS@
-GLIB_CFLAGS = @GLIB_CFLAGS@
-GLIB_GENMARSHAL = @GLIB_GENMARSHAL@
-GLIB_LIBS = @GLIB_LIBS@
-GLIB_MKENUMS = @GLIB_MKENUMS@
-GMOFILES = @GMOFILES@
-GMSGFMT = @GMSGFMT@
-GNOME_ICON_THEME_PREFIX = @GNOME_ICON_THEME_PREFIX@
-GNOME_SCREENSAVER_SAVERDIR = @GNOME_SCREENSAVER_SAVERDIR@
-GNOME_SCREENSAVER_THEMESDIR = @GNOME_SCREENSAVER_THEMESDIR@
-GNOME_SHARP_CFLAGS = @GNOME_SHARP_CFLAGS@
-GNOME_SHARP_LIBS = @GNOME_SHARP_LIBS@
-GOBJECT_QUERY = @GOBJECT_QUERY@
-GREP = @GREP@
-HELP_DIR = @HELP_DIR@
-ICONS_DIRECTORY = @ICONS_DIRECTORY@
-INSTALL = @INSTALL@
-INSTALL_DATA = @INSTALL_DATA@
-INSTALL_PROGRAM = @INSTALL_PROGRAM@
-INSTALL_SCRIPT = @INSTALL_SCRIPT@
-INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
-INSTOBJEXT = @INSTOBJEXT@
-INTLLIBS = @INTLLIBS@
-INTLTOOL_EXTRACT = @INTLTOOL_EXTRACT@
-INTLTOOL_MERGE = @INTLTOOL_MERGE@
-INTLTOOL_PERL = @INTLTOOL_PERL@
-INTLTOOL_UPDATE = @INTLTOOL_UPDATE@
-LCMS_CFLAGS = @LCMS_CFLAGS@
-LCMS_LIBS = @LCMS_LIBS@
-LD = @LD@
-LDFLAGS = @LDFLAGS@
-LIBEXIF_VERSION_CHECK_CFLAGS = @LIBEXIF_VERSION_CHECK_CFLAGS@
-LIBEXIF_VERSION_CHECK_LIBS = @LIBEXIF_VERSION_CHECK_LIBS@
-LIBGPHOTO2_CFLAGS = @LIBGPHOTO2_CFLAGS@
-LIBGPHOTO2_LIBS = @LIBGPHOTO2_LIBS@
-LIBJPEG = @LIBJPEG@
-LIBOBJS = @LIBOBJS@
-LIBS = @LIBS@
-LIBTOOL = @LIBTOOL@
-LIPO = @LIPO@
-LN_S = @LN_S@
-LTLIBOBJS = @LTLIBOBJS@
-MAINT = @MAINT@
-MAKEFLAGS = @MAKEFLAGS@
-MAKEINFO = @MAKEINFO@
-MCS = @MCS@
-MKDIR_P = @MKDIR_P@
-MKINSTALLDIRS = @MKINSTALLDIRS@
-MONO = @MONO@
-MONO_MODULE_CFLAGS = @MONO_MODULE_CFLAGS@
-MONO_MODULE_LIBS = @MONO_MODULE_LIBS@
-MSGFMT = @MSGFMT@
-MSGFMT_OPTS = @MSGFMT_OPTS@
-MSGMERGE = @MSGMERGE@
-NDESK_DBUS_CFLAGS = @NDESK_DBUS_CFLAGS@
-NDESK_DBUS_LIBS = @NDESK_DBUS_LIBS@
-NM = @NM@
-NMEDIT = @NMEDIT@
-NUNIT_CFLAGS = @NUNIT_CFLAGS@
-NUNIT_DEFINES = @NUNIT_DEFINES@
-NUNIT_LIBS = @NUNIT_LIBS@
-OBJC = @OBJC@
-OBJDUMP = @OBJDUMP@
-OBJEXT = @OBJEXT@
-OMF_DIR = @OMF_DIR@
-OTOOL = @OTOOL@
-OTOOL64 = @OTOOL64@
-PACKAGE = @PACKAGE@
-PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
-PACKAGE_NAME = @PACKAGE_NAME@
-PACKAGE_STRING = @PACKAGE_STRING@
-PACKAGE_TARNAME = @PACKAGE_TARNAME@
-PACKAGE_URL = @PACKAGE_URL@
-PACKAGE_VERSION = @PACKAGE_VERSION@
-PATH_SEPARATOR = @PATH_SEPARATOR@
-PKG_CONFIG = @PKG_CONFIG@
-POFILES = @POFILES@
-POSUB = @POSUB@
-PO_IN_DATADIR_FALSE = @PO_IN_DATADIR_FALSE@
-PO_IN_DATADIR_TRUE = @PO_IN_DATADIR_TRUE@
-Q = @Q@
-RANLIB = @RANLIB@
-SED = @SED@
-SET_MAKE = @SET_MAKE@
-SHELL = @SHELL@
-STRIP = @STRIP@
-TURTLEDIR = @TURTLEDIR@
-UNIQUE_CFLAGS = @UNIQUE_CFLAGS@
-UNIQUE_LIBS = @UNIQUE_LIBS@
-USE_NLS = @USE_NLS@
-V = @V@
-VERSION = @VERSION@
-WARN_CFLAGS = @WARN_CFLAGS@
-XGETTEXT = @XGETTEXT@
-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_DUMPBIN = @ac_ct_DUMPBIN@
-am__include = @am__include@
-am__leading_dot = @am__leading_dot@
-am__quote = @am__quote@
-am__tar = @am__tar@
-am__untar = @am__untar@
-bindir = @bindir@
-build = @build@
-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@
-expanded_bindir = @expanded_bindir@
-expanded_datadir = @expanded_datadir@
-expanded_libdir = @expanded_libdir@
-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@
-lt_ECHO = @lt_ECHO@
-mandir = @mandir@
-mkdir_p = @mkdir_p@
-oldincludedir = @oldincludedir@
-pdfdir = @pdfdir@
-prefix = @prefix@
-program_transform_name = @program_transform_name@
-psdir = @psdir@
-sbindir = @sbindir@
-sharedstatedir = @sharedstatedir@
-shavedir = @shavedir@
-srcdir = @srcdir@
-sysconfdir = @sysconfdir@
-target_alias = @target_alias@
-top_build_prefix = @top_build_prefix@
-top_builddir = @top_builddir@
-top_srcdir = @top_srcdir@
-DIR_DOCS = $(top_builddir)/docs
-DIR_EXTENSIONS = $(top_builddir)/extensions
-DIR_GPHOTO2 = $(top_builddir)/lib/libgphoto2-sharp
-DIR_ICONS = $(top_builddir)/icons
-DIR_JPEGTRAN = $(top_builddir)/lib/libjpegtran
-DIR_KEYRING = $(top_builddir)/lib/gnome-keyring-sharp
-DIR_LIBFSPOT = $(top_builddir)/lib/libfspot
-DIR_SEMWEB = $(top_builddir)/lib/semweb
-DIR_SRC = $(top_builddir)/src
-DIR_GIOSHARP = $(top_builddir)/lib/gio-sharp/gio
-DIR_GTKSHARPBEANS = $(top_builddir)/lib/gtk-sharp-beans
-DIR_UNIQUESHARP = $(top_builddir)/lib/unique-sharp/unique
-LINK_KEYRING = -r:$(DIR_KEYRING)/gnome-keyring-sharp.dll
-LINK_GPHOTO2 = -r:$(DIR_GPHOTO2)/libgphoto2-sharp.dll
-LINK_SEMWEB = -r:$(DIR_SEMWEB)/SemWeb.dll
-LINK_GIOSHARP = -r:$(DIR_GIOSHARP)/gio-sharp.dll
-LINK_GTKSHARPBEANS = -r:$(DIR_GTKSHARPBEANS)/gtk-sharp-beans.dll
-LINK_UNIQUESHARP = -r:$(DIR_UNIQUESHARP)/unique-sharp.dll
-CSC_FLAGS = -debug
-CSC = $(MCS) $(CSC_FLAGS) -target:exe
-CSC_LIB = $(MCS) $(CSC_FLAGS) -target:library
-MONO_DEBUGFLAGS = --debug
-RUNTIME = mono $(MONO_DEBUGFLAGS)
-ASSEMBLY_NAME = gnome-keyring-sharp
-ASSEMBLY_SOURCES = \
- $(srcdir)/AccessRights.cs \
- $(srcdir)/AssemblyInfo.cs \
- $(srcdir)/AttributeType.cs \
- $(srcdir)/GenericItemData.cs \
- $(srcdir)/ItemACL.cs \
- $(srcdir)/ItemData.cs \
- $(srcdir)/ItemType.cs \
- $(srcdir)/KeyringException.cs \
- $(srcdir)/KeyringInfo.cs \
- $(srcdir)/NetItemData.cs \
- $(srcdir)/NoteItemData.cs \
- $(srcdir)/Operation.cs \
- $(srcdir)/RequestMessage.cs \
- $(srcdir)/ResponseMessage.cs \
- $(srcdir)/ResultCode.cs \
- $(srcdir)/Ring.cs
-
-REFS = -r:Mono.Posix $(NDESK_DBUS_LIBS)
-PKGS =
-ASSEMBLY = $(ASSEMBLY_NAME).dll
-assemblydir = $(pkglibdir)
-assembly_DATA = $(ASSEMBLY)
-EXTRA_DIST = $(ASSEMBLY_SOURCES)
-CLEANFILES = \
- $(ASSEMBLY) \
- $(ASSEMBLY).mdb
-
-all: all-am
-
-.SUFFIXES:
-$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(top_srcdir)/Makefile.include $(am__configure_deps)
- @for dep in $?; do \
- case '$(am__configure_deps)' in \
- *$$dep*) \
- ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \
- && { if test -f $@; then exit 0; else break; fi; }; \
- exit 1;; \
- esac; \
- done; \
- echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign lib/gnome-keyring-sharp/Makefile'; \
- $(am__cd) $(top_srcdir) && \
- $(AUTOMAKE) --foreign lib/gnome-keyring-sharp/Makefile
-.PRECIOUS: Makefile
-Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
- @case '$?' in \
- *config.status*) \
- cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \
- *) \
- echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \
- cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \
- esac;
-
-$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
- cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
-
-$(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps)
- cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
-$(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps)
- cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
-$(am__aclocal_m4_deps):
-
-mostlyclean-libtool:
- -rm -f *.lo
-
-clean-libtool:
- -rm -rf .libs _libs
-install-assemblyDATA: $(assembly_DATA)
- @$(NORMAL_INSTALL)
- test -z "$(assemblydir)" || $(MKDIR_P) "$(DESTDIR)$(assemblydir)"
- @list='$(assembly_DATA)'; test -n "$(assemblydir)" || list=; \
- for p in $$list; do \
- if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \
- echo "$$d$$p"; \
- done | $(am__base_list) | \
- while read files; do \
- echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(assemblydir)'"; \
- $(INSTALL_DATA) $$files "$(DESTDIR)$(assemblydir)" || exit $$?; \
- done
-
-uninstall-assemblyDATA:
- @$(NORMAL_UNINSTALL)
- @list='$(assembly_DATA)'; test -n "$(assemblydir)" || list=; \
- files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \
- test -n "$$files" || exit 0; \
- echo " ( cd '$(DESTDIR)$(assemblydir)' && rm -f" $$files ")"; \
- cd "$(DESTDIR)$(assemblydir)" && rm -f $$files
-tags: TAGS
-TAGS:
-
-ctags: CTAGS
-CTAGS:
-
-
-distdir: $(DISTFILES)
- @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; \
- if test -d $$d/$$file; then \
- dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \
- if test -d "$(distdir)/$$file"; then \
- find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
- fi; \
- if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
- cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \
- find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
- fi; \
- cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \
- else \
- test -f "$(distdir)/$$file" \
- || cp -p $$d/$$file "$(distdir)/$$file" \
- || exit 1; \
- fi; \
- done
-check-am: all-am
-check: check-am
-all-am: Makefile $(DATA)
-installdirs:
- for dir in "$(DESTDIR)$(assemblydir)"; do \
- test -z "$$dir" || $(MKDIR_P) "$$dir"; \
- done
-install: install-am
-install-exec: install-exec-am
-install-data: install-data-am
-uninstall: uninstall-am
-
-install-am: all-am
- @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
-
-installcheck: installcheck-am
-install-strip:
- $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
- install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
- `test -z '$(STRIP)' || \
- echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install
-mostlyclean-generic:
-
-clean-generic:
- -test -z "$(CLEANFILES)" || rm -f $(CLEANFILES)
-
-distclean-generic:
- -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
- -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES)
-
-maintainer-clean-generic:
- @echo "This command is intended for maintainers to use"
- @echo "it deletes files that may require special tools to rebuild."
-clean: clean-am
-
-clean-am: clean-generic clean-libtool mostlyclean-am
-
-distclean: distclean-am
- -rm -f Makefile
-distclean-am: clean-am distclean-generic
-
-dvi: dvi-am
-
-dvi-am:
-
-html: html-am
-
-html-am:
-
-info: info-am
-
-info-am:
-
-install-data-am: install-assemblyDATA
-
-install-dvi: install-dvi-am
-
-install-dvi-am:
-
-install-exec-am:
-
-install-html: install-html-am
-
-install-html-am:
-
-install-info: install-info-am
-
-install-info-am:
-
-install-man:
-
-install-pdf: install-pdf-am
-
-install-pdf-am:
-
-install-ps: install-ps-am
-
-install-ps-am:
-
-installcheck-am:
-
-maintainer-clean: maintainer-clean-am
- -rm -f Makefile
-maintainer-clean-am: distclean-am maintainer-clean-generic
-
-mostlyclean: mostlyclean-am
-
-mostlyclean-am: mostlyclean-generic mostlyclean-libtool
-
-pdf: pdf-am
-
-pdf-am:
-
-ps: ps-am
-
-ps-am:
-
-uninstall-am: uninstall-assemblyDATA
-
-.MAKE: install-am install-strip
-
-.PHONY: all all-am check check-am clean clean-generic clean-libtool \
- distclean distclean-generic distclean-libtool distdir dvi \
- dvi-am html html-am info info-am install install-am \
- install-assemblyDATA 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-generic mostlyclean-libtool pdf pdf-am ps ps-am \
- uninstall uninstall-am uninstall-assemblyDATA
-
-
-all: $(ASSEMBLY)
-
-$(ASSEMBLY): $(ASSEMBLY_SOURCES)
- $(CSC_LIB) -out:$@ -d:WITH_DBUS $(PKGS) $(REFS) $(ASSEMBLY_SOURCES)
-
-# 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.
-.NOEXPORT:
diff --git a/lib/gnome-keyring-sharp/NetItemData.cs b/lib/gnome-keyring-sharp/NetItemData.cs
deleted file mode 100644
index 94dae41..0000000
--- a/lib/gnome-keyring-sharp/NetItemData.cs
+++ /dev/null
@@ -1,65 +0,0 @@
-//
-// Gnome.Keyring.NetItemData.cs
-//
-// Authors:
-// Gonzalo Paniagua Javier (gonzalo at ximian.com)
-//
-// (C) Copyright 2006 Novell, Inc. (http://www.novell.com)
-//
-
-// Permission is hereby granted, free of charge, to any person obtaining
-// a copy of this software and associated documentation files (the
-// "Software"), to deal in the Software without restriction, including
-// without limitation the rights to use, copy, modify, merge, publish,
-// distribute, sublicense, and/or sell copies of the Software, and to
-// permit persons to whom the Software is furnished to do so, subject to
-// the following conditions:
-//
-// The above copyright notice and this permission notice shall be
-// included in all copies or substantial portions of the Software.
-//
-// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
-// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
-// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
-// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
-// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
-// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
-// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
-//
-
-using System.Collections;
-
-namespace Gnome.Keyring {
- public class NetItemData : ItemData {
- public string User;
- public string Domain;
- public string Server;
- public string Obj;
- public string Protocol;
- public string AuthType;
- public int Port;
-
- public override ItemType Type {
- get { return ItemType.NetworkPassword; }
- }
-
- internal override void SetValuesFromAttributes ()
- {
- Hashtable tbl = Attributes;
- if (tbl == null)
- return;
-
- User = (string) tbl ["user"];
- Domain = (string) tbl ["domain"];
- Server = (string) tbl ["server"];
- Obj = (string) tbl ["object"];
- Protocol = (string) tbl ["protocol"];
- AuthType = (string) tbl ["authtype"];
- if (tbl ["port"] != null)
- Port = (int) tbl ["port"];
-
- base.SetValuesFromAttributes ();
- }
- }
-}
-
diff --git a/lib/gnome-keyring-sharp/NoteItemData.cs b/lib/gnome-keyring-sharp/NoteItemData.cs
deleted file mode 100644
index 46b0e23..0000000
--- a/lib/gnome-keyring-sharp/NoteItemData.cs
+++ /dev/null
@@ -1,39 +0,0 @@
-//
-// Gnome.Keyring.NoteItemData.cs
-//
-// Authors:
-// Gonzalo Paniagua Javier (gonzalo at ximian.com)
-//
-// (C) Copyright 2006 Novell, Inc. (http://www.novell.com)
-//
-
-// Permission is hereby granted, free of charge, to any person obtaining
-// a copy of this software and associated documentation files (the
-// "Software"), to deal in the Software without restriction, including
-// without limitation the rights to use, copy, modify, merge, publish,
-// distribute, sublicense, and/or sell copies of the Software, and to
-// permit persons to whom the Software is furnished to do so, subject to
-// the following conditions:
-//
-// The above copyright notice and this permission notice shall be
-// included in all copies or substantial portions of the Software.
-//
-// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
-// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
-// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
-// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
-// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
-// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
-// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
-//
-
-using System.Collections;
-
-namespace Gnome.Keyring {
- public class NoteItemData : ItemData {
- public override ItemType Type {
- get { return ItemType.Note; }
- }
- }
-}
-
diff --git a/lib/gnome-keyring-sharp/Operation.cs b/lib/gnome-keyring-sharp/Operation.cs
deleted file mode 100644
index 5008f10..0000000
--- a/lib/gnome-keyring-sharp/Operation.cs
+++ /dev/null
@@ -1,54 +0,0 @@
-//
-// Gnome.Keyring.Operation.cs
-//
-// Authors:
-// Gonzalo Paniagua Javier (gonzalo at ximian.com)
-//
-// (C) Copyright 2006 Novell, Inc. (http://www.novell.com)
-//
-
-// Permission is hereby granted, free of charge, to any person obtaining
-// a copy of this software and associated documentation files (the
-// "Software"), to deal in the Software without restriction, including
-// without limitation the rights to use, copy, modify, merge, publish,
-// distribute, sublicense, and/or sell copies of the Software, and to
-// permit persons to whom the Software is furnished to do so, subject to
-// the following conditions:
-//
-// The above copyright notice and this permission notice shall be
-// included in all copies or substantial portions of the Software.
-//
-// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
-// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
-// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
-// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
-// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
-// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
-// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
-//
-
-namespace Gnome.Keyring {
- enum Operation {
- LockAll,
- SetDefaultKeyring,
- GetDefaultKeyring,
- ListKeyrings,
- CreateKeyring,
- LockKeyring,
- UnlockKeyring,
- DeleteKeyring,
- GetKeyringInfo,
- SetKeyringInfo,
- ListItems,
- Find,
- CreateItem,
- DeleteItem,
- GetItemInfo,
- SetItemInfo,
- GetItemAttributes,
- SetItemAttributes,
- GetItemACL,
- SetItemACL
- }
-}
-
diff --git a/lib/gnome-keyring-sharp/RequestMessage.cs b/lib/gnome-keyring-sharp/RequestMessage.cs
deleted file mode 100644
index 6282f16..0000000
--- a/lib/gnome-keyring-sharp/RequestMessage.cs
+++ /dev/null
@@ -1,173 +0,0 @@
-//
-// Gnome.Keyring.RequestMessage.cs
-//
-// Authors:
-// Gonzalo Paniagua Javier (gonzalo at ximian.com)
-//
-// (C) Copyright 2006 Novell, Inc. (http://www.novell.com)
-//
-
-// Permission is hereby granted, free of charge, to any person obtaining
-// a copy of this software and associated documentation files (the
-// "Software"), to deal in the Software without restriction, including
-// without limitation the rights to use, copy, modify, merge, publish,
-// distribute, sublicense, and/or sell copies of the Software, and to
-// permit persons to whom the Software is furnished to do so, subject to
-// the following conditions:
-//
-// The above copyright notice and this permission notice shall be
-// included in all copies or substantial portions of the Software.
-//
-// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
-// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
-// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
-// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
-// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
-// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
-// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
-//
-
-using System;
-using System.Collections;
-using System.IO;
-using System.Text;
-
-namespace Gnome.Keyring {
- class RequestMessage {
- MemoryStream stream = new MemoryStream ();
- int op_start = -1;
-
- public MemoryStream Stream {
- get { return stream; }
- }
-
- public void CreateSimpleOperation (Operation op)
- {
- StartOperation (op);
- EndOperation ();
- }
-
- public void CreateSimpleOperation (Operation op, string str1)
- {
- StartOperation (op);
- Write (str1);
- EndOperation ();
- }
-
- public void CreateSimpleOperation (Operation op, string str1, string str2)
- {
- StartOperation (op);
- Write (str1);
- Write (str2);
- EndOperation ();
- }
-
- public void CreateSimpleOperation (Operation op, string str1, int i1)
- {
- StartOperation (op);
- Write (str1);
- Write (i1);
- EndOperation ();
- }
-
- public void StartOperation (Operation op)
- {
- string appname = Ring.ApplicationName;
- BinaryWriter writer = new BinaryWriter (stream);
- writer.Write (0);
-
- Write (appname);
- int curpos = (int) stream.Position;
- stream.Position = 0;
- writer = new BinaryWriter (stream);
- writer.Write (SwapBytes (curpos));
- stream.Position = curpos;
-
- op_start = (int) stream.Length;
- writer.Write (0);
- writer.Write (SwapBytes ((int) op));
- }
-
- public void EndOperation ()
- {
- int current = (int) stream.Length;
- int size = SwapBytes (current - op_start);
- stream.Position = op_start;
- BinaryWriter writer = new BinaryWriter (stream);
- writer.Write (size);
- }
-
- public void Write (string str)
- {
- WriteString (new BinaryWriter (stream), str);
- }
-
- static void WriteString (BinaryWriter writer, string str)
- {
- if (str == null) {
- writer.Write ((int) -1);
- return;
- }
- byte [] bytes = Encoding.UTF8.GetBytes (str);
- writer.Write (SwapBytes (bytes.Length));
- writer.Write (bytes);
- }
-
- public void Write (int i)
- {
- BinaryWriter writer = new BinaryWriter (stream);
- writer.Write (SwapBytes (i));
- }
-
- public void WriteAttributes (Hashtable atts)
- {
- Hashtable copy = new Hashtable ();
- foreach (string key in atts.Keys) {
- object o = atts [key];
- if (o != null)
- copy [key] = o;
-
- }
- BinaryWriter writer = new BinaryWriter (stream);
- writer.Write (SwapBytes (copy.Count));
- foreach (string key in copy.Keys) {
- object o = atts [key];
- if (o is string) {
- EncodeAttribute (writer, key, (string) o);
- } else if (o is int) {
- int i = (int) o;
- if (key == "port" && i == 0)
- continue;
- EncodeAttribute (writer, key, i);
- } else {
- throw new Exception ("Should not happen.");
- }
- }
- }
-
- static void EncodeAttribute (BinaryWriter writer, string name, string val)
- {
- WriteString (writer, name);
- writer.Write (SwapBytes ((int) AttributeType.String));
- WriteString (writer, val);
- }
-
- static void EncodeAttribute (BinaryWriter writer, string name, int val)
- {
- WriteString (writer, name);
- writer.Write (SwapBytes ((int) AttributeType.UInt32));
- writer.Write (SwapBytes (val));
- }
-
- static int SwapBytes (int i)
- {
- byte b0 = (byte) ((i >> 24) & 0xFF);
- byte b1 = (byte) ((i >> 16) & 0xFF);
- byte b2 = (byte) ((i >> 8) & 0xFF);
- byte b3 = (byte) (i & 0xFF);
- return b0 + (b1 << 8) + (b2 << 16) + (b3 << 24);
- }
-
- }
-}
-
diff --git a/lib/gnome-keyring-sharp/ResponseMessage.cs b/lib/gnome-keyring-sharp/ResponseMessage.cs
deleted file mode 100644
index 8af7553..0000000
--- a/lib/gnome-keyring-sharp/ResponseMessage.cs
+++ /dev/null
@@ -1,108 +0,0 @@
-//
-// Gnome.Keyring.ResponseMessage.cs
-//
-// Authors:
-// Gonzalo Paniagua Javier (gonzalo at ximian.com)
-//
-// (C) Copyright 2006 Novell, Inc. (http://www.novell.com)
-//
-
-// Permission is hereby granted, free of charge, to any person obtaining
-// a copy of this software and associated documentation files (the
-// "Software"), to deal in the Software without restriction, including
-// without limitation the rights to use, copy, modify, merge, publish,
-// distribute, sublicense, and/or sell copies of the Software, and to
-// permit persons to whom the Software is furnished to do so, subject to
-// the following conditions:
-//
-// The above copyright notice and this permission notice shall be
-// included in all copies or substantial portions of the Software.
-//
-// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
-// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
-// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
-// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
-// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
-// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
-// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
-//
-
-using System;
-using System.Collections;
-using System.IO;
-using System.Text;
-
-using Mono.Unix.Native;
-
-namespace Gnome.Keyring {
- class ResponseMessage {
- byte [] buffer;
- MemoryStream stream;
-
- public ResponseMessage (byte [] buffer)
- {
- this.buffer = buffer;
- stream = new MemoryStream (buffer);
- }
-
- public bool DataAvailable {
- get { return (stream.Position < stream.Length); }
- }
-
- public string [] GetStringList ()
- {
- int nstrings = GetInt32 ();
- string [] list = new string [nstrings];
- for (int i = 0; i < nstrings; i++) {
- list [i] = GetString ();
- }
-
- return list;
- }
-
- public string GetString ()
- {
- int len = GetInt32 ();
- if (len == -1) {
- return null;
- }
- int offset = (int) stream.Position;
- string result = Encoding.UTF8.GetString (buffer, offset, len);
- stream.Position += len;
- return result;
- }
-
- public int GetInt32 ()
- {
- byte b3 = (byte) stream.ReadByte ();
- byte b2 = (byte) stream.ReadByte ();
- byte b1 = (byte) stream.ReadByte ();
- byte b0 = (byte) stream.ReadByte ();
- return (b0 + (b1 << 8) + (b2 << 16) + (b3 << 24));
- }
-
- public DateTime GetDateTime ()
- {
- return NativeConvert.FromTimeT ((GetInt32 () << 32) + GetInt32 ());
- }
-
- public void ReadAttributes (Hashtable tbl)
- {
- int natts = GetInt32 ();
- for (int i = 0; i < natts; i++) {
- object val;
- string name = GetString ();
- AttributeType type = (AttributeType) GetInt32 ();
- if (AttributeType.String == type) {
- val = GetString ();
- } else if (type == AttributeType.UInt32) {
- val = GetInt32 ();
- } else {
- throw new Exception ("This should not happen: " + type);
- }
- tbl [name] = val;
- }
- }
- }
-}
-
diff --git a/lib/gnome-keyring-sharp/ResultCode.cs b/lib/gnome-keyring-sharp/ResultCode.cs
deleted file mode 100644
index 0b752ab..0000000
--- a/lib/gnome-keyring-sharp/ResultCode.cs
+++ /dev/null
@@ -1,43 +0,0 @@
-//
-// Gnome.Keyring.ResultCode.cs
-//
-// Authors:
-// Gonzalo Paniagua Javier (gonzalo at ximian.com)
-//
-// (C) Copyright 2006 Novell, Inc. (http://www.novell.com)
-//
-
-// Permission is hereby granted, free of charge, to any person obtaining
-// a copy of this software and associated documentation files (the
-// "Software"), to deal in the Software without restriction, including
-// without limitation the rights to use, copy, modify, merge, publish,
-// distribute, sublicense, and/or sell copies of the Software, and to
-// permit persons to whom the Software is furnished to do so, subject to
-// the following conditions:
-//
-// The above copyright notice and this permission notice shall be
-// included in all copies or substantial portions of the Software.
-//
-// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
-// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
-// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
-// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
-// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
-// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
-// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
-//
-
-namespace Gnome.Keyring {
- public enum ResultCode {
- Ok,
- Denied,
- NoKeyringDaemon,
- AlreadyUnlocked,
- NoSuchKeyring,
- BadArguments,
- IOError,
- Cancelled,
- AlreadyExists
- }
-}
-
diff --git a/lib/gnome-keyring-sharp/Ring.cs b/lib/gnome-keyring-sharp/Ring.cs
deleted file mode 100644
index 13ed480..0000000
--- a/lib/gnome-keyring-sharp/Ring.cs
+++ /dev/null
@@ -1,539 +0,0 @@
-//
-// Gnome.Keyring.Ring.cs
-//
-// Authors:
-// Gonzalo Paniagua Javier (gonzalo at ximian.com)
-// Alp Toker (alp at atoker.com)
-//
-// (C) Copyright 2006 Novell, Inc. (http://www.novell.com)
-// (C) Copyright 2007 Alp Toker
-//
-
-// Permission is hereby granted, free of charge, to any person obtaining
-// a copy of this software and associated documentation files (the
-// "Software"), to deal in the Software without restriction, including
-// without limitation the rights to use, copy, modify, merge, publish,
-// distribute, sublicense, and/or sell copies of the Software, and to
-// permit persons to whom the Software is furnished to do so, subject to
-// the following conditions:
-//
-// The above copyright notice and this permission notice shall be
-// included in all copies or substantial portions of the Software.
-//
-// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
-// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
-// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
-// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
-// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
-// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
-// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
-//
-
-using System;
-using System.Collections;
-using System.IO;
-using System.Net;
-using System.Net.Sockets;
-using System.Reflection;
-
-using Mono.Unix;
-
-#if WITH_DBUS
-using NDesk.DBus;
-#endif
-
-namespace Gnome.Keyring {
- public class Ring {
- static string appname;
-
- private Ring ()
- {
- }
-
- public static string ApplicationName {
- get {
- if (appname == null) {
- Assembly assembly = Assembly.GetEntryAssembly ();
- if (assembly == null)
- throw new Exception ("You need to set Ring.ApplicationName.");
- appname = assembly.GetName ().Name;
- }
-
- return appname;
- }
-
- set {
- if (value == null || value == "")
- throw new ArgumentException ("Cannot be null or empty", "value");
-
- appname = value;
- }
- }
-
- public static bool Available {
- get {
- Socket sock = Connect ();
- if (sock != null) {
- sock.Close ();
- return true;
- }
- return false;
- }
- }
-
- static Socket Connect ()
- {
- string filename;
- Socket sock;
-
- filename = Environment.GetEnvironmentVariable ("GNOME_KEYRING_SOCKET");
- sock = Connect (filename);
-
-#if WITH_DBUS
- if (sock == null) {
- try {
- filename = Bus.Session.GetObject<IDaemon> ("org.gnome.keyring", new ObjectPath ("/org/gnome/keyring/daemon")).GetSocketPath ();
- } catch (Exception) {
- filename = null;
- }
- sock = Connect (filename);
- }
-#endif
-
- return sock;
- }
-
- static Socket Connect (string filename)
- {
- if (filename == null || filename == "")
- return null;
-
- EndPoint ep = new UnixEndPoint (filename);
- Socket sock = new Socket (AddressFamily.Unix, SocketType.Stream, ProtocolType.IP);
- try {
- sock.Connect (ep);
- } catch (Exception) {
- sock.Close ();
- return null;
- }
- return sock;
- }
-
- static int GetInt32 (Socket sock)
- {
- byte [] cuatro = new byte [4];
- if (sock.Receive (cuatro) != 4)
- throw new KeyringException (ResultCode.IOError);
- return (cuatro [3] + (cuatro [2] << 8) + (cuatro [1] << 16) + (cuatro [0] << 24));
- }
-
- static byte [] one = new byte [1];
- static ResponseMessage SendRequest (MemoryStream stream)
- {
- Socket sock = Connect ();
- if (sock == null)
- throw new KeyringException (ResultCode.NoKeyringDaemon);
-
- try {
- sock.Send (one); // Credentials byte
- byte [] buffer = stream.ToArray ();
- sock.Send (buffer);
- int packet_size = GetInt32 (sock) - 4;
- if (packet_size < 0)
- throw new KeyringException (ResultCode.IOError);
- byte [] response = new byte [packet_size];
- int nbytes = sock.Receive (response);
- if (nbytes != response.Length)
- throw new KeyringException (ResultCode.IOError);
- ResponseMessage resp = new ResponseMessage (response);
- ResultCode result = (ResultCode) resp.GetInt32 ();
- if (result != 0)
- throw new KeyringException (result);
-
- return resp;
- } finally {
- sock.Close ();
- }
- }
-
- public static void LockAll ()
- {
- RequestMessage req = new RequestMessage ();
- req.CreateSimpleOperation (Operation.LockAll);
- SendRequest (req.Stream);
- }
-
- public static void SetDefaultKeyring (string newKeyring)
- {
- if (newKeyring == null)
- throw new ArgumentNullException ("newKeyring");
- RequestMessage req = new RequestMessage ();
- req.CreateSimpleOperation (Operation.SetDefaultKeyring, newKeyring);
- SendRequest (req.Stream);
- }
-
- public static string GetDefaultKeyring ()
- {
- RequestMessage req = new RequestMessage ();
- req.CreateSimpleOperation (Operation.GetDefaultKeyring);
- ResponseMessage resp = SendRequest (req.Stream);
- return resp.GetString ();
- }
-
- public static string [] GetKeyrings ()
- {
- RequestMessage req = new RequestMessage ();
- req.CreateSimpleOperation (Operation.ListKeyrings);
- ResponseMessage resp = SendRequest (req.Stream);
- return resp.GetStringList ();
- }
-
- public static void CreateKeyring (string name, string password)
- {
- RequestMessage req = new RequestMessage ();
- req.CreateSimpleOperation (Operation.CreateKeyring, name, password);
- SendRequest (req.Stream);
- }
-
- public static void Lock (string keyring)
- {
- if (keyring == null)
- throw new ArgumentNullException ("keyring");
-
- RequestMessage req = new RequestMessage ();
- req.CreateSimpleOperation (Operation.LockKeyring, keyring);
- SendRequest (req.Stream);
- }
-
- public static void Unlock (string keyring, string password)
- {
- if (keyring == null)
- throw new ArgumentNullException ("keyring");
-
- if (password == null)
- throw new ArgumentNullException ("password");
-
- RequestMessage req = new RequestMessage ();
- req.CreateSimpleOperation (Operation.UnlockKeyring, keyring, password);
- try {
- SendRequest (req.Stream);
- } catch (KeyringException ke) {
- if (ke.ResultCode != ResultCode.AlreadyUnlocked)
- throw;
- }
- }
-
- public static void DeleteKeyring (string keyring)
- {
- if (keyring == null)
- throw new ArgumentNullException ("keyring");
-
- RequestMessage req = new RequestMessage ();
- req.CreateSimpleOperation (Operation.DeleteKeyring, keyring);
- SendRequest (req.Stream);
- }
-
- public static int [] ListItemIDs (string keyring)
- {
- if (keyring == null)
- throw new ArgumentNullException ("keyring");
-
- RequestMessage req = new RequestMessage ();
- req.CreateSimpleOperation (Operation.ListItems, keyring);
- ResponseMessage resp = SendRequest (req.Stream);
- int len = resp.GetInt32 ();
- int [] result = new int [len];
- for (int i = 0; i < len; i++) {
- result [i] = resp.GetInt32 ();
- }
-
- return result;
- }
-
- static ItemData [] empty_item_data = new ItemData [0];
- public static ItemData [] Find (ItemType type, Hashtable atts)
- {
- if (atts == null)
- throw new ArgumentNullException ("atts");
- RequestMessage req = new RequestMessage ();
- req.StartOperation (Operation.Find);
- req.Write ((int) type);
- req.WriteAttributes (atts);
- req.EndOperation ();
-
- ResponseMessage resp = null;
- try {
- resp = SendRequest (req.Stream);
- } catch (KeyringException ke) {
- if (ke.ResultCode == ResultCode.Denied)
- return empty_item_data;
- throw;
- }
-
- ArrayList list = new ArrayList ();
- while (resp.DataAvailable) {
- ItemData found = ItemData.GetInstanceFromItemType (type);
- found.Keyring = resp.GetString ();
- found.ItemID = resp.GetInt32 ();
- found.Secret = resp.GetString ();
- found.Attributes = new Hashtable ();
- resp.ReadAttributes (found.Attributes);
- found.SetValuesFromAttributes ();
- list.Add (found);
- }
-
- return (ItemData []) list.ToArray (typeof (ItemData));
- }
-
- static NetItemData [] empty_net_item_data = new NetItemData [0];
- public static NetItemData [] FindNetworkPassword (string user, string domain, string server, string obj,
- string protocol, string authtype, int port)
- {
- RequestMessage req = new RequestMessage ();
- req.StartOperation (Operation.Find);
- req.Write ((int) ItemType.NetworkPassword);
- Hashtable tbl = new Hashtable ();
- tbl ["user"] = user;
- tbl ["domain"] = domain;
- tbl ["server"] = server;
- tbl ["object"] = obj;
- tbl ["protocol"] = protocol;
- tbl ["authtype"] = authtype;
- if (port != 0)
- tbl ["port"] = port;
- req.WriteAttributes (tbl);
- req.EndOperation ();
-
- ResponseMessage resp = null;
- try {
- resp = SendRequest (req.Stream);
- } catch (KeyringException ke) {
- if (ke.ResultCode == ResultCode.Denied)
- return empty_net_item_data;
- throw;
- }
- ArrayList list = new ArrayList ();
- while (resp.DataAvailable) {
- NetItemData found = new NetItemData ();
- found.Keyring = resp.GetString ();
- found.ItemID = resp.GetInt32 ();
- found.Secret = resp.GetString ();
- found.Attributes = new Hashtable ();
- resp.ReadAttributes (found.Attributes);
- found.SetValuesFromAttributes ();
- list.Add (found);
- }
-
- return (NetItemData []) list.ToArray (typeof (NetItemData));
- }
-
- public static int CreateItem (string keyring, ItemType type, string displayName, Hashtable attributes,
- string secret, bool updateIfExists)
- {
- RequestMessage req = new RequestMessage ();
- req.StartOperation (Operation.CreateItem);
- req.Write (keyring);
- req.Write (displayName);
- req.Write (secret);
- req.WriteAttributes (attributes);
- req.Write ((int) type);
- req.Write (updateIfExists ? 1 : 0);
- req.EndOperation ();
- ResponseMessage resp = SendRequest (req.Stream);
- return resp.GetInt32 ();
- }
-
- public static void DeleteItem (string keyring, int id)
- {
- if (keyring == null)
- throw new ArgumentNullException ("keyring");
-
- RequestMessage req = new RequestMessage ();
- req.CreateSimpleOperation (Operation.DeleteItem, keyring, id);
- SendRequest (req.Stream);
- }
-
- public static int CreateOrModifyNetworkPassword (string keyring, string user, string domain, string server, string obj,
- string protocol, string authtype, int port, string password)
- {
- Hashtable tbl = new Hashtable ();
- tbl ["user"] = user;
- tbl ["domain"] = domain;
- tbl ["server"] = server;
- tbl ["object"] = obj;
- tbl ["protocol"] = protocol;
- tbl ["authtype"] = authtype;
- if (port != 0)
- tbl ["port"] = port;
-
- string display_name;
- if (port != 0)
- display_name = String.Format ("{0}@{1}:{3}/{2}", user, server, obj, port);
- else
- display_name = String.Format ("{0}@{1}/{2}", user, server, obj);
-
- return CreateItem (keyring, ItemType.NetworkPassword, display_name, tbl, password, true);
- }
-
- public static ItemData GetItemInfo (string keyring, int id)
- {
- if (keyring == null)
- throw new ArgumentNullException ("keyring");
-
- RequestMessage req = new RequestMessage ();
- req.CreateSimpleOperation (Operation.GetItemInfo, keyring, id);
- ResponseMessage resp = SendRequest (req.Stream);
- ItemType itype = (ItemType) resp.GetInt32 ();
- ItemData item = ItemData.GetInstanceFromItemType (itype);
- string name = resp.GetString ();
- string secret = resp.GetString ();
- DateTime mtime = resp.GetDateTime ();
- DateTime ctime = resp.GetDateTime ();
- item.Keyring = keyring;
- item.ItemID = id;
- item.Secret = secret;
- Hashtable tbl = new Hashtable ();
- tbl ["name"] = name;
- tbl ["keyring_ctime"] = ctime;
- tbl ["keyring_mtime"] = mtime;
- item.Attributes = tbl;
- item.SetValuesFromAttributes ();
- return item;
- }
-
- public static void SetItemInfo (string keyring, int id, ItemType type, string displayName, string secret)
- {
- if (keyring == null)
- throw new ArgumentNullException ("keyring");
-
- RequestMessage req = new RequestMessage ();
- req.StartOperation (Operation.SetItemInfo);
- req.Write (keyring);
- req.Write (id);
- req.Write ((int) type);
- req.Write (displayName);
- req.Write (secret);
- req.EndOperation ();
- SendRequest (req.Stream);
- }
-
- public static Hashtable GetItemAttributes (string keyring, int id)
- {
- if (keyring == null)
- throw new ArgumentNullException ("keyring");
-
- RequestMessage req = new RequestMessage ();
- req.CreateSimpleOperation (Operation.GetItemAttributes, keyring, id);
- ResponseMessage resp = SendRequest (req.Stream);
- Hashtable tbl = new Hashtable ();
- resp.ReadAttributes (tbl);
- return tbl;
- }
-
- public static void SetItemAttributes (string keyring, int id, Hashtable atts)
- {
- if (keyring == null)
- throw new ArgumentNullException ("keyring");
-
- RequestMessage req = new RequestMessage ();
- req.StartOperation (Operation.SetItemAttributes);
- req.Write (keyring);
- req.Write (id);
- req.WriteAttributes (atts);
- req.EndOperation ();
- SendRequest (req.Stream);
- }
-
- public static KeyringInfo GetKeyringInfo (string keyring)
- {
- if (keyring == null)
- throw new ArgumentNullException ("keyring");
-
- RequestMessage req = new RequestMessage ();
- req.CreateSimpleOperation (Operation.GetKeyringInfo, keyring);
- ResponseMessage resp = SendRequest (req.Stream);
- return new KeyringInfo (keyring, (resp.GetInt32 () != 0),
- resp.GetInt32 (),
- resp.GetDateTime (),
- resp.GetDateTime (),
- (resp.GetInt32 () != 0));
- }
-
- public static void SetKeyringInfo (string keyring, KeyringInfo info)
- {
- if (keyring == null)
- throw new ArgumentNullException ("keyring");
-
- if (info == null)
- throw new ArgumentNullException ("info");
-
- RequestMessage req = new RequestMessage ();
- req.StartOperation (Operation.SetKeyringInfo);
- req.Write (keyring);
- req.Write (info.LockOnIdle ? 1 : 0);
- req.Write (info.LockTimeoutSeconds);
- req.EndOperation ();
- SendRequest (req.Stream);
- }
-
- public static ArrayList GetItemACL (string keyring, int id)
- {
- if (keyring == null)
- throw new ArgumentNullException ("keyring");
-
- RequestMessage req = new RequestMessage ();
- req.CreateSimpleOperation (Operation.GetItemACL, keyring, id);
- ResponseMessage resp = SendRequest (req.Stream);
- int count = resp.GetInt32 ();
- ArrayList list = new ArrayList (count);
- for (int i = 0; i < count; i++) {
- list.Add (new ItemACL (resp.GetString (), resp.GetString (), (AccessRights) resp.GetInt32 ()));
- }
- return list;
- }
-
- public static void SetItemACL (string keyring, int id, ICollection acls)
- {
- if (acls == null)
- throw new ArgumentNullException ("acls");
-
- ItemACL [] arr = new ItemACL [acls.Count];
- acls.CopyTo (arr, 0);
- SetItemACL (keyring, id, arr);
- }
-
- public static void SetItemACL (string keyring, int id, ItemACL [] acls)
- {
- if (keyring == null)
- throw new ArgumentNullException ("keyring");
-
- if (acls == null)
- throw new ArgumentNullException ("acls");
-
- if (acls.Length == 0)
- throw new ArgumentException ("Empty ACL set.", "acls");
-
- RequestMessage req = new RequestMessage ();
- req.StartOperation (Operation.SetItemACL);
- req.Write (keyring);
- req.Write (id);
- req.Write (acls.Length);
- foreach (ItemACL acl in acls) {
- req.Write (acl.DisplayName);
- req.Write (acl.FullPath);
- req.Write ((int) acl.Access);
- }
- req.EndOperation ();
- SendRequest (req.Stream);
- }
- }
-
-#if WITH_DBUS
- [Interface ("org.gnome.keyring.Daemon")]
- interface IDaemon
- {
- string GetSocketPath ();
- }
-#endif
-}
-
diff --git a/lib/gtk-sharp-beans/Makefile.in b/lib/gtk-sharp-beans/Makefile.in
index 779b965..134f6d7 100644
--- a/lib/gtk-sharp-beans/Makefile.in
+++ b/lib/gtk-sharp-beans/Makefile.in
@@ -15,6 +15,11 @@
@SET_MAKE@
+# Makefile.include
+# FSpot wide helper
+
+# Directories
+
VPATH = @srcdir@
pkgdatadir = $(datadir)/@PACKAGE@
pkgincludedir = $(includedir)/@PACKAGE@
@@ -40,8 +45,14 @@ subdir = lib/gtk-sharp-beans
ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
am__aclocal_m4_deps = $(top_srcdir)/build/m4/shave/shave.m4 \
$(top_srcdir)/build/m4/shamrock/expansions.m4 \
+ $(top_srcdir)/build/m4/shamrock/gnome-doc.m4 \
$(top_srcdir)/build/m4/shamrock/mono.m4 \
+ $(top_srcdir)/build/m4/shamrock/nunit.m4 \
$(top_srcdir)/build/m4/shamrock/programs.m4 \
+ $(top_srcdir)/build/m4/f-spot/flickrnet.m4 \
+ $(top_srcdir)/build/m4/f-spot/gnome-keyring-sharp.m4 \
+ $(top_srcdir)/build/m4/f-spot/gtk-sharp.m4 \
+ $(top_srcdir)/build/m4/f-spot/mono-addins.m4 \
$(top_srcdir)/acinclude.m4 $(top_srcdir)/configure.ac
am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
$(ACLOCAL_M4)
@@ -119,6 +130,8 @@ EXIF_SOVERSION = @EXIF_SOVERSION@
F77 = @F77@
FC = @FC@
FGREP = @FGREP@
+FLICKRNET_CFLAGS = @FLICKRNET_CFLAGS@
+FLICKRNET_LIBS = @FLICKRNET_LIBS@
F_CFLAGS = @F_CFLAGS@
F_LIBS = @F_LIBS@
GAPI2CODEGEN = @GAPI2CODEGEN@
@@ -132,6 +145,8 @@ GCONF_SHARP_LIBS = @GCONF_SHARP_LIBS@
GETTEXT_PACKAGE = @GETTEXT_PACKAGE@
GIO_CFLAGS = @GIO_CFLAGS@
GIO_LIBS = @GIO_LIBS@
+GLIBSHARP_2_12_7_CFLAGS = @GLIBSHARP_2_12_7_CFLAGS@
+GLIBSHARP_2_12_7_LIBS = @GLIBSHARP_2_12_7_LIBS@
GLIBSHARP_CFLAGS = @GLIBSHARP_CFLAGS@
GLIBSHARP_LIBS = @GLIBSHARP_LIBS@
GLIB_CFLAGS = @GLIB_CFLAGS@
@@ -147,6 +162,10 @@ GNOME_SHARP_CFLAGS = @GNOME_SHARP_CFLAGS@
GNOME_SHARP_LIBS = @GNOME_SHARP_LIBS@
GOBJECT_QUERY = @GOBJECT_QUERY@
GREP = @GREP@
+GTKSHARP_A11Y_CFLAGS = @GTKSHARP_A11Y_CFLAGS@
+GTKSHARP_A11Y_LIBS = @GTKSHARP_A11Y_LIBS@
+GTKSHARP_CFLAGS = @GTKSHARP_CFLAGS@
+GTKSHARP_LIBS = @GTKSHARP_LIBS@
HELP_DIR = @HELP_DIR@
ICONS_DIRECTORY = @ICONS_DIRECTORY@
INSTALL = @INSTALL@
@@ -160,14 +179,14 @@ INTLTOOL_EXTRACT = @INTLTOOL_EXTRACT@
INTLTOOL_MERGE = @INTLTOOL_MERGE@
INTLTOOL_PERL = @INTLTOOL_PERL@
INTLTOOL_UPDATE = @INTLTOOL_UPDATE@
+KEYRINGSHARP_CFLAGS = @KEYRINGSHARP_CFLAGS@
+KEYRINGSHARP_LIBS = @KEYRINGSHARP_LIBS@
LCMS_CFLAGS = @LCMS_CFLAGS@
LCMS_LIBS = @LCMS_LIBS@
LD = @LD@
LDFLAGS = @LDFLAGS@
LIBEXIF_VERSION_CHECK_CFLAGS = @LIBEXIF_VERSION_CHECK_CFLAGS@
LIBEXIF_VERSION_CHECK_LIBS = @LIBEXIF_VERSION_CHECK_LIBS@
-LIBGPHOTO2_CFLAGS = @LIBGPHOTO2_CFLAGS@
-LIBGPHOTO2_LIBS = @LIBGPHOTO2_LIBS@
LIBJPEG = @LIBJPEG@
LIBOBJS = @LIBOBJS@
LIBS = @LIBS@
@@ -182,6 +201,12 @@ MCS = @MCS@
MKDIR_P = @MKDIR_P@
MKINSTALLDIRS = @MKINSTALLDIRS@
MONO = @MONO@
+MONO_ADDINS_CFLAGS = @MONO_ADDINS_CFLAGS@
+MONO_ADDINS_GUI_CFLAGS = @MONO_ADDINS_GUI_CFLAGS@
+MONO_ADDINS_GUI_LIBS = @MONO_ADDINS_GUI_LIBS@
+MONO_ADDINS_LIBS = @MONO_ADDINS_LIBS@
+MONO_ADDINS_SETUP_CFLAGS = @MONO_ADDINS_SETUP_CFLAGS@
+MONO_ADDINS_SETUP_LIBS = @MONO_ADDINS_SETUP_LIBS@
MONO_MODULE_CFLAGS = @MONO_MODULE_CFLAGS@
MONO_MODULE_LIBS = @MONO_MODULE_LIBS@
MSGFMT = @MSGFMT@
@@ -192,7 +217,6 @@ NDESK_DBUS_LIBS = @NDESK_DBUS_LIBS@
NM = @NM@
NMEDIT = @NMEDIT@
NUNIT_CFLAGS = @NUNIT_CFLAGS@
-NUNIT_DEFINES = @NUNIT_DEFINES@
NUNIT_LIBS = @NUNIT_LIBS@
OBJC = @OBJC@
OBJDUMP = @OBJDUMP@
@@ -284,24 +308,8 @@ target_alias = @target_alias@
top_build_prefix = @top_build_prefix@
top_builddir = @top_builddir@
top_srcdir = @top_srcdir@
-DIR_DOCS = $(top_builddir)/docs
-DIR_EXTENSIONS = $(top_builddir)/extensions
-DIR_GPHOTO2 = $(top_builddir)/lib/libgphoto2-sharp
-DIR_ICONS = $(top_builddir)/icons
-DIR_JPEGTRAN = $(top_builddir)/lib/libjpegtran
-DIR_KEYRING = $(top_builddir)/lib/gnome-keyring-sharp
-DIR_LIBFSPOT = $(top_builddir)/lib/libfspot
-DIR_SEMWEB = $(top_builddir)/lib/semweb
-DIR_SRC = $(top_builddir)/src
DIR_GIOSHARP = $(top_builddir)/lib/gio-sharp/gio
-DIR_GTKSHARPBEANS = $(top_builddir)/lib/gtk-sharp-beans
-DIR_UNIQUESHARP = $(top_builddir)/lib/unique-sharp/unique
-LINK_KEYRING = -r:$(DIR_KEYRING)/gnome-keyring-sharp.dll
-LINK_GPHOTO2 = -r:$(DIR_GPHOTO2)/libgphoto2-sharp.dll
-LINK_SEMWEB = -r:$(DIR_SEMWEB)/SemWeb.dll
LINK_GIOSHARP = -r:$(DIR_GIOSHARP)/gio-sharp.dll
-LINK_GTKSHARPBEANS = -r:$(DIR_GTKSHARPBEANS)/gtk-sharp-beans.dll
-LINK_UNIQUESHARP = -r:$(DIR_UNIQUESHARP)/unique-sharp.dll
CSC_FLAGS = -debug
CSC = $(MCS) $(CSC_FLAGS) -target:exe
CSC_LIB = $(MCS) $(CSC_FLAGS) -target:library
diff --git a/lib/libfspot/Makefile.in b/lib/libfspot/Makefile.in
index f215a9c..58e176e 100644
--- a/lib/libfspot/Makefile.in
+++ b/lib/libfspot/Makefile.in
@@ -39,8 +39,14 @@ DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in
ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
am__aclocal_m4_deps = $(top_srcdir)/build/m4/shave/shave.m4 \
$(top_srcdir)/build/m4/shamrock/expansions.m4 \
+ $(top_srcdir)/build/m4/shamrock/gnome-doc.m4 \
$(top_srcdir)/build/m4/shamrock/mono.m4 \
+ $(top_srcdir)/build/m4/shamrock/nunit.m4 \
$(top_srcdir)/build/m4/shamrock/programs.m4 \
+ $(top_srcdir)/build/m4/f-spot/flickrnet.m4 \
+ $(top_srcdir)/build/m4/f-spot/gnome-keyring-sharp.m4 \
+ $(top_srcdir)/build/m4/f-spot/gtk-sharp.m4 \
+ $(top_srcdir)/build/m4/f-spot/mono-addins.m4 \
$(top_srcdir)/acinclude.m4 $(top_srcdir)/configure.ac
am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
$(ACLOCAL_M4)
@@ -141,6 +147,8 @@ EXIF_SOVERSION = @EXIF_SOVERSION@
F77 = @F77@
FC = @FC@
FGREP = @FGREP@
+FLICKRNET_CFLAGS = @FLICKRNET_CFLAGS@
+FLICKRNET_LIBS = @FLICKRNET_LIBS@
F_CFLAGS = @F_CFLAGS@
F_LIBS = @F_LIBS@
GAPI2CODEGEN = @GAPI2CODEGEN@
@@ -154,6 +162,8 @@ GCONF_SHARP_LIBS = @GCONF_SHARP_LIBS@
GETTEXT_PACKAGE = @GETTEXT_PACKAGE@
GIO_CFLAGS = @GIO_CFLAGS@
GIO_LIBS = @GIO_LIBS@
+GLIBSHARP_2_12_7_CFLAGS = @GLIBSHARP_2_12_7_CFLAGS@
+GLIBSHARP_2_12_7_LIBS = @GLIBSHARP_2_12_7_LIBS@
GLIBSHARP_CFLAGS = @GLIBSHARP_CFLAGS@
GLIBSHARP_LIBS = @GLIBSHARP_LIBS@
GLIB_CFLAGS = @GLIB_CFLAGS@
@@ -169,6 +179,10 @@ GNOME_SHARP_CFLAGS = @GNOME_SHARP_CFLAGS@
GNOME_SHARP_LIBS = @GNOME_SHARP_LIBS@
GOBJECT_QUERY = @GOBJECT_QUERY@
GREP = @GREP@
+GTKSHARP_A11Y_CFLAGS = @GTKSHARP_A11Y_CFLAGS@
+GTKSHARP_A11Y_LIBS = @GTKSHARP_A11Y_LIBS@
+GTKSHARP_CFLAGS = @GTKSHARP_CFLAGS@
+GTKSHARP_LIBS = @GTKSHARP_LIBS@
HELP_DIR = @HELP_DIR@
ICONS_DIRECTORY = @ICONS_DIRECTORY@
INSTALL = @INSTALL@
@@ -182,14 +196,14 @@ INTLTOOL_EXTRACT = @INTLTOOL_EXTRACT@
INTLTOOL_MERGE = @INTLTOOL_MERGE@
INTLTOOL_PERL = @INTLTOOL_PERL@
INTLTOOL_UPDATE = @INTLTOOL_UPDATE@
+KEYRINGSHARP_CFLAGS = @KEYRINGSHARP_CFLAGS@
+KEYRINGSHARP_LIBS = @KEYRINGSHARP_LIBS@
LCMS_CFLAGS = @LCMS_CFLAGS@
LCMS_LIBS = @LCMS_LIBS@
LD = @LD@
LDFLAGS = @LDFLAGS@
LIBEXIF_VERSION_CHECK_CFLAGS = @LIBEXIF_VERSION_CHECK_CFLAGS@
LIBEXIF_VERSION_CHECK_LIBS = @LIBEXIF_VERSION_CHECK_LIBS@
-LIBGPHOTO2_CFLAGS = @LIBGPHOTO2_CFLAGS@
-LIBGPHOTO2_LIBS = @LIBGPHOTO2_LIBS@
LIBJPEG = @LIBJPEG@
LIBOBJS = @LIBOBJS@
LIBS = @LIBS@
@@ -204,6 +218,12 @@ MCS = @MCS@
MKDIR_P = @MKDIR_P@
MKINSTALLDIRS = @MKINSTALLDIRS@
MONO = @MONO@
+MONO_ADDINS_CFLAGS = @MONO_ADDINS_CFLAGS@
+MONO_ADDINS_GUI_CFLAGS = @MONO_ADDINS_GUI_CFLAGS@
+MONO_ADDINS_GUI_LIBS = @MONO_ADDINS_GUI_LIBS@
+MONO_ADDINS_LIBS = @MONO_ADDINS_LIBS@
+MONO_ADDINS_SETUP_CFLAGS = @MONO_ADDINS_SETUP_CFLAGS@
+MONO_ADDINS_SETUP_LIBS = @MONO_ADDINS_SETUP_LIBS@
MONO_MODULE_CFLAGS = @MONO_MODULE_CFLAGS@
MONO_MODULE_LIBS = @MONO_MODULE_LIBS@
MSGFMT = @MSGFMT@
@@ -214,7 +234,6 @@ NDESK_DBUS_LIBS = @NDESK_DBUS_LIBS@
NM = @NM@
NMEDIT = @NMEDIT@
NUNIT_CFLAGS = @NUNIT_CFLAGS@
-NUNIT_DEFINES = @NUNIT_DEFINES@
NUNIT_LIBS = @NUNIT_LIBS@
OBJC = @OBJC@
OBJDUMP = @OBJDUMP@
diff --git a/lib/libgphoto2-sharp/AUTHORS b/lib/libgphoto2-sharp/AUTHORS
deleted file mode 100644
index b362af0..0000000
--- a/lib/libgphoto2-sharp/AUTHORS
+++ /dev/null
@@ -1,3 +0,0 @@
-Stephane Delcroix <stephane at delcroix.org>
-Ewen Cheslack-Postava <echeslack at gmail.com>
-Larry Ewing <lewing at novell.com>
diff --git a/lib/libgphoto2-sharp/AssemblyInfo.cs b/lib/libgphoto2-sharp/AssemblyInfo.cs
deleted file mode 100644
index 88ec37f..0000000
--- a/lib/libgphoto2-sharp/AssemblyInfo.cs
+++ /dev/null
@@ -1,42 +0,0 @@
-/*
- * AssemblyInfo.cs
- *
- * Author(s):
- * Ewen Cheslack-Postava <echeslack at gmail.com>
- * Larry Ewing <lewing at novell.com>
- * Stephane Delcroix <stephane at delcroix.org>
- *
- * This is open source software. See COPYING for details.
- */
-using System.Reflection;
-using System.Runtime.CompilerServices;
-
-// Information about this assembly is defined by the following
-// attributes.
-//
-// change them to the information which is associated with the assembly
-// you compile.
-
-[assembly: AssemblyTitle("GPhoto2#")]
-[assembly: AssemblyDescription(".NET Bindings for libgphoto2 (f-spot version)")]
-[assembly: AssemblyConfiguration("")]
-[assembly: AssemblyCompany("")]
-[assembly: AssemblyProduct("")]
-[assembly: AssemblyCopyright("")]
-[assembly: AssemblyTrademark("")]
-[assembly: AssemblyCulture("")]
-
-// The assembly version has following format :
-//
-// Major.Minor.Build.Revision
-//
-// You can specify all values by your own or you can build default build and revision
-// numbers with the '*' character (the default):
-
-[assembly: AssemblyVersion("2.4.*")]
-
-// The following attributes specify the key for the sign of your assembly. See the
-// .NET Framework documentation for more information about signing.
-// This is not required, if you don't want signing let these attributes like they're.
-[assembly: AssemblyDelaySign(false)]
-[assembly: AssemblyKeyFile("")]
diff --git a/lib/libgphoto2-sharp/COPYING b/lib/libgphoto2-sharp/COPYING
deleted file mode 100644
index bf50f20..0000000
--- a/lib/libgphoto2-sharp/COPYING
+++ /dev/null
@@ -1,482 +0,0 @@
- GNU LIBRARY GENERAL PUBLIC LICENSE
- Version 2, June 1991
-
- Copyright (C) 1991 Free Software Foundation, Inc.
- 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
- Everyone is permitted to copy and distribute verbatim copies
- of this license document, but changing it is not allowed.
-
-[This is the first released version of the library GPL. It is
- numbered 2 because it goes with version 2 of the ordinary GPL.]
-
- Preamble
-
- The licenses for most software are designed to take away your
-freedom to share and change it. By contrast, the GNU General Public
-Licenses are intended to guarantee your freedom to share and change
-free software--to make sure the software is free for all its users.
-
- This license, the Library General Public License, applies to some
-specially designated Free Software Foundation software, and to any
-other libraries whose authors decide to use it. You can use it for
-your libraries, too.
-
- When we speak of free software, we are referring to freedom, not
-price. Our General Public Licenses are designed to make sure that you
-have the freedom to distribute copies of free software (and charge for
-this service if you wish), that you receive source code or can get it
-if you want it, that you can change the software or use pieces of it
-in new free programs; and that you know you can do these things.
-
- To protect your rights, we need to make restrictions that forbid
-anyone to deny you these rights or to ask you to surrender the rights.
-These restrictions translate to certain responsibilities for you if
-you distribute copies of the library, or if you modify it.
-
- For example, if you distribute copies of the library, whether gratis
-or for a fee, you must give the recipients all the rights that we gave
-you. You must make sure that they, too, receive or can get the source
-code. If you link a program with the library, you must provide
-complete object files to the recipients so that they can relink them
-with the library, after making changes to the library and recompiling
-it. And you must show them these terms so they know their rights.
-
- Our method of protecting your rights has two steps: (1) copyright
-the library, and (2) offer you this license which gives you legal
-permission to copy, distribute and/or modify the library.
-
- Also, for each distributor's protection, we want to make certain
-that everyone understands that there is no warranty for this free
-library. If the library is modified by someone else and passed on, we
-want its recipients to know that what they have is not the original
-version, so that any problems introduced by others will not reflect on
-the original authors' reputations.
-
- Finally, any free program is threatened constantly by software
-patents. We wish to avoid the danger that companies distributing free
-software will individually obtain patent licenses, thus in effect
-transforming the program into proprietary software. To prevent this,
-we have made it clear that any patent must be licensed for everyone's
-free use or not licensed at all.
-
- Most GNU software, including some libraries, is covered by the ordinary
-GNU General Public License, which was designed for utility programs. This
-license, the GNU Library General Public License, applies to certain
-designated libraries. This license is quite different from the ordinary
-one; be sure to read it in full, and don't assume that anything in it is
-the same as in the ordinary license.
-
- The reason we have a separate public license for some libraries is that
-they blur the distinction we usually make between modifying or adding to a
-program and simply using it. Linking a program with a library, without
-changing the library, is in some sense simply using the library, and is
-analogous to running a utility program or application program. However, in
-a textual and legal sense, the linked executable is a combined work, a
-derivative of the original library, and the ordinary General Public License
-treats it as such.
-
- Because of this blurred distinction, using the ordinary General
-Public License for libraries did not effectively promote software
-sharing, because most developers did not use the libraries. We
-concluded that weaker conditions might promote sharing better.
-
- However, unrestricted linking of non-free programs would deprive the
-users of those programs of all benefit from the free status of the
-libraries themselves. This Library General Public License is intended to
-permit developers of non-free programs to use free libraries, while
-preserving your freedom as a user of such programs to change the free
-libraries that are incorporated in them. (We have not seen how to achieve
-this as regards changes in header files, but we have achieved it as regards
-changes in the actual functions of the Library.) The hope is that this
-will lead to faster development of free libraries.
-
- The precise terms and conditions for copying, distribution and
-modification follow. Pay close attention to the difference between a
-"work based on the library" and a "work that uses the library". The
-former contains code derived from the library, while the latter only
-works together with the library.
-
- Note that it is possible for a library to be covered by the ordinary
-General Public License rather than by this special one.
-
- GNU LIBRARY GENERAL PUBLIC LICENSE
- TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
-
- 0. This License Agreement applies to any software library which
-contains a notice placed by the copyright holder or other authorized
-party saying it may be distributed under the terms of this Library
-General Public License (also called "this License"). Each licensee is
-addressed as "you".
-
- A "library" means a collection of software functions and/or data
-prepared so as to be conveniently linked with application programs
-(which use some of those functions and data) to form executables.
-
- The "Library", below, refers to any such software library or work
-which has been distributed under these terms. A "work based on the
-Library" means either the Library or any derivative work under
-copyright law: that is to say, a work containing the Library or a
-portion of it, either verbatim or with modifications and/or translated
-straightforwardly into another language. (Hereinafter, translation is
-included without limitation in the term "modification".)
-
- "Source code" for a work means the preferred form of the work for
-making modifications to it. For a library, complete source code means
-all the source code for all modules it contains, plus any associated
-interface definition files, plus the scripts used to control compilation
-and installation of the library.
-
- Activities other than copying, distribution and modification are not
-covered by this License; they are outside its scope. The act of
-running a program using the Library is not restricted, and output from
-such a program is covered only if its contents constitute a work based
-on the Library (independent of the use of the Library in a tool for
-writing it). Whether that is true depends on what the Library does
-and what the program that uses the Library does.
-
- 1. You may copy and distribute verbatim copies of the Library's
-complete source code as you receive it, in any medium, provided that
-you conspicuously and appropriately publish on each copy an
-appropriate copyright notice and disclaimer of warranty; keep intact
-all the notices that refer to this License and to the absence of any
-warranty; and distribute a copy of this License along with the
-Library.
-
- You may charge a fee for the physical act of transferring a copy,
-and you may at your option offer warranty protection in exchange for a
-fee.
-
- 2. You may modify your copy or copies of the Library or any portion
-of it, thus forming a work based on the Library, and copy and
-distribute such modifications or work under the terms of Section 1
-above, provided that you also meet all of these conditions:
-
- a) The modified work must itself be a software library.
-
- b) You must cause the files modified to carry prominent notices
- stating that you changed the files and the date of any change.
-
- c) You must cause the whole of the work to be licensed at no
- charge to all third parties under the terms of this License.
-
- d) If a facility in the modified Library refers to a function or a
- table of data to be supplied by an application program that uses
- the facility, other than as an argument passed when the facility
- is invoked, then you must make a good faith effort to ensure that,
- in the event an application does not supply such function or
- table, the facility still operates, and performs whatever part of
- its purpose remains meaningful.
-
- (For example, a function in a library to compute square roots has
- a purpose that is entirely well-defined independent of the
- application. Therefore, Subsection 2d requires that any
- application-supplied function or table used by this function must
- be optional: if the application does not supply it, the square
- root function must still compute square roots.)
-
-These requirements apply to the modified work as a whole. If
-identifiable sections of that work are not derived from the Library,
-and can be reasonably considered independent and separate works in
-themselves, then this License, and its terms, do not apply to those
-sections when you distribute them as separate works. But when you
-distribute the same sections as part of a whole which is a work based
-on the Library, the distribution of the whole must be on the terms of
-this License, whose permissions for other licensees extend to the
-entire whole, and thus to each and every part regardless of who wrote
-it.
-
-Thus, it is not the intent of this section to claim rights or contest
-your rights to work written entirely by you; rather, the intent is to
-exercise the right to control the distribution of derivative or
-collective works based on the Library.
-
-In addition, mere aggregation of another work not based on the Library
-with the Library (or with a work based on the Library) on a volume of
-a storage or distribution medium does not bring the other work under
-the scope of this License.
-
- 3. You may opt to apply the terms of the ordinary GNU General Public
-License instead of this License to a given copy of the Library. To do
-this, you must alter all the notices that refer to this License, so
-that they refer to the ordinary GNU General Public License, version 2,
-instead of to this License. (If a newer version than version 2 of the
-ordinary GNU General Public License has appeared, then you can specify
-that version instead if you wish.) Do not make any other change in
-these notices.
-
- Once this change is made in a given copy, it is irreversible for
-that copy, so the ordinary GNU General Public License applies to all
-subsequent copies and derivative works made from that copy.
-
- This option is useful when you wish to copy part of the code of
-the Library into a program that is not a library.
-
- 4. You may copy and distribute the Library (or a portion or
-derivative of it, under Section 2) in object code or executable form
-under the terms of Sections 1 and 2 above provided that you accompany
-it with the complete corresponding machine-readable source code, which
-must be distributed under the terms of Sections 1 and 2 above on a
-medium customarily used for software interchange.
-
- If distribution of object code is made by offering access to copy
-from a designated place, then offering equivalent access to copy the
-source code from the same place satisfies the requirement to
-distribute the source code, even though third parties are not
-compelled to copy the source along with the object code.
-
- 5. A program that contains no derivative of any portion of the
-Library, but is designed to work with the Library by being compiled or
-linked with it, is called a "work that uses the Library". Such a
-work, in isolation, is not a derivative work of the Library, and
-therefore falls outside the scope of this License.
-
- However, linking a "work that uses the Library" with the Library
-creates an executable that is a derivative of the Library (because it
-contains portions of the Library), rather than a "work that uses the
-library". The executable is therefore covered by this License.
-Section 6 states terms for distribution of such executables.
-
- When a "work that uses the Library" uses material from a header file
-that is part of the Library, the object code for the work may be a
-derivative work of the Library even though the source code is not.
-Whether this is true is especially significant if the work can be
-linked without the Library, or if the work is itself a library. The
-threshold for this to be true is not precisely defined by law.
-
- If such an object file uses only numerical parameters, data
-structure layouts and accessors, and small macros and small inline
-functions (ten lines or less in length), then the use of the object
-file is unrestricted, regardless of whether it is legally a derivative
-work. (Executables containing this object code plus portions of the
-Library will still fall under Section 6.)
-
- Otherwise, if the work is a derivative of the Library, you may
-distribute the object code for the work under the terms of Section 6.
-Any executables containing that work also fall under Section 6,
-whether or not they are linked directly with the Library itself.
-
- 6. As an exception to the Sections above, you may also compile or
-link a "work that uses the Library" with the Library to produce a
-work containing portions of the Library, and distribute that work
-under terms of your choice, provided that the terms permit
-modification of the work for the customer's own use and reverse
-engineering for debugging such modifications.
-
- You must give prominent notice with each copy of the work that the
-Library is used in it and that the Library and its use are covered by
-this License. You must supply a copy of this License. If the work
-during execution displays copyright notices, you must include the
-copyright notice for the Library among them, as well as a reference
-directing the user to the copy of this License. Also, you must do one
-of these things:
-
- a) Accompany the work with the complete corresponding
- machine-readable source code for the Library including whatever
- changes were used in the work (which must be distributed under
- Sections 1 and 2 above); and, if the work is an executable linked
- with the Library, with the complete machine-readable "work that
- uses the Library", as object code and/or source code, so that the
- user can modify the Library and then relink to produce a modified
- executable containing the modified Library. (It is understood
- that the user who changes the contents of definitions files in the
- Library will not necessarily be able to recompile the application
- to use the modified definitions.)
-
- b) Accompany the work with a written offer, valid for at
- least three years, to give the same user the materials
- specified in Subsection 6a, above, for a charge no more
- than the cost of performing this distribution.
-
- c) If distribution of the work is made by offering access to copy
- from a designated place, offer equivalent access to copy the above
- specified materials from the same place.
-
- d) Verify that the user has already received a copy of these
- materials or that you have already sent this user a copy.
-
- For an executable, the required form of the "work that uses the
-Library" must include any data and utility programs needed for
-reproducing the executable from it. However, as a special exception,
-the source code distributed need not include anything that is normally
-distributed (in either source or binary form) with the major
-components (compiler, kernel, and so on) of the operating system on
-which the executable runs, unless that component itself accompanies
-the executable.
-
- It may happen that this requirement contradicts the license
-restrictions of other proprietary libraries that do not normally
-accompany the operating system. Such a contradiction means you cannot
-use both them and the Library together in an executable that you
-distribute.
-
- 7. You may place library facilities that are a work based on the
-Library side-by-side in a single library together with other library
-facilities not covered by this License, and distribute such a combined
-library, provided that the separate distribution of the work based on
-the Library and of the other library facilities is otherwise
-permitted, and provided that you do these two things:
-
- a) Accompany the combined library with a copy of the same work
- based on the Library, uncombined with any other library
- facilities. This must be distributed under the terms of the
- Sections above.
-
- b) Give prominent notice with the combined library of the fact
- that part of it is a work based on the Library, and explaining
- where to find the accompanying uncombined form of the same work.
-
- 8. You may not copy, modify, sublicense, link with, or distribute
-the Library except as expressly provided under this License. Any
-attempt otherwise to copy, modify, sublicense, link with, or
-distribute the Library is void, and will automatically terminate your
-rights under this License. However, parties who have received copies,
-or rights, from you under this License will not have their licenses
-terminated so long as such parties remain in full compliance.
-
- 9. You are not required to accept this License, since you have not
-signed it. However, nothing else grants you permission to modify or
-distribute the Library or its derivative works. These actions are
-prohibited by law if you do not accept this License. Therefore, by
-modifying or distributing the Library (or any work based on the
-Library), you indicate your acceptance of this License to do so, and
-all its terms and conditions for copying, distributing or modifying
-the Library or works based on it.
-
- 10. Each time you redistribute the Library (or any work based on the
-Library), the recipient automatically receives a license from the
-original licensor to copy, distribute, link with or modify the Library
-subject to these terms and conditions. You may not impose any further
-restrictions on the recipients' exercise of the rights granted herein.
-You are not responsible for enforcing compliance by third parties to
-this License.
-
- 11. If, as a consequence of a court judgment or allegation of patent
-infringement or for any other reason (not limited to patent issues),
-conditions are imposed on you (whether by court order, agreement or
-otherwise) that contradict the conditions of this License, they do not
-excuse you from the conditions of this License. If you cannot
-distribute so as to satisfy simultaneously your obligations under this
-License and any other pertinent obligations, then as a consequence you
-may not distribute the Library at all. For example, if a patent
-license would not permit royalty-free redistribution of the Library by
-all those who receive copies directly or indirectly through you, then
-the only way you could satisfy both it and this License would be to
-refrain entirely from distribution of the Library.
-
-If any portion of this section is held invalid or unenforceable under any
-particular circumstance, the balance of the section is intended to apply,
-and the section as a whole is intended to apply in other circumstances.
-
-It is not the purpose of this section to induce you to infringe any
-patents or other property right claims or to contest validity of any
-such claims; this section has the sole purpose of protecting the
-integrity of the free software distribution system which is
-implemented by public license practices. Many people have made
-generous contributions to the wide range of software distributed
-through that system in reliance on consistent application of that
-system; it is up to the author/donor to decide if he or she is willing
-to distribute software through any other system and a licensee cannot
-impose that choice.
-
-This section is intended to make thoroughly clear what is believed to
-be a consequence of the rest of this License.
-
- 12. If the distribution and/or use of the Library is restricted in
-certain countries either by patents or by copyrighted interfaces, the
-original copyright holder who places the Library under this License may add
-an explicit geographical distribution limitation excluding those countries,
-so that distribution is permitted only in or among countries not thus
-excluded. In such case, this License incorporates the limitation as if
-written in the body of this License.
-
- 13. The Free Software Foundation may publish revised and/or new
-versions of the Library General Public License from time to time.
-Such new versions will be similar in spirit to the present version,
-but may differ in detail to address new problems or concerns.
-
-Each version is given a distinguishing version number. If the Library
-specifies a version number of this License which applies to it and
-"any later version", you have the option of following the terms and
-conditions either of that version or of any later version published by
-the Free Software Foundation. If the Library does not specify a
-license version number, you may choose any version ever published by
-the Free Software Foundation.
-
- 14. If you wish to incorporate parts of the Library into other free
-programs whose distribution conditions are incompatible with these,
-write to the author to ask for permission. For software which is
-copyrighted by the Free Software Foundation, write to the Free
-Software Foundation; we sometimes make exceptions for this. Our
-decision will be guided by the two goals of preserving the free status
-of all derivatives of our free software and of promoting the sharing
-and reuse of software generally.
-
- NO WARRANTY
-
- 15. BECAUSE THE LIBRARY IS LICENSED FREE OF CHARGE, THERE IS NO
-WARRANTY FOR THE LIBRARY, TO THE EXTENT PERMITTED BY APPLICABLE LAW.
-EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR
-OTHER PARTIES PROVIDE THE LIBRARY "AS IS" WITHOUT WARRANTY OF ANY
-KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE
-IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
-PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE
-LIBRARY IS WITH YOU. SHOULD THE LIBRARY PROVE DEFECTIVE, YOU ASSUME
-THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION.
-
- 16. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN
-WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY
-AND/OR REDISTRIBUTE THE LIBRARY AS PERMITTED ABOVE, BE LIABLE TO YOU
-FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR
-CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE
-LIBRARY (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING
-RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A
-FAILURE OF THE LIBRARY TO OPERATE WITH ANY OTHER SOFTWARE), EVEN IF
-SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH
-DAMAGES.
-
- END OF TERMS AND CONDITIONS
-
- How to Apply These Terms to Your New Libraries
-
- If you develop a new library, and you want it to be of the greatest
-possible use to the public, we recommend making it free software that
-everyone can redistribute and change. You can do so by permitting
-redistribution under these terms (or, alternatively, under the terms of the
-ordinary General Public License).
-
- To apply these terms, attach the following notices to the library. It is
-safest to attach them to the start of each source file to most effectively
-convey the exclusion of warranty; and each file should have at least the
-"copyright" line and a pointer to where the full notice is found.
-
- <one line to give the library's name and a brief idea of what it does.>
- Copyright (C) <year> <name of author>
-
- This library is free software; you can redistribute it and/or
- modify it under the terms of the GNU Library General Public
- License as published by the Free Software Foundation; either
- version 2 of the License, or (at your option) any later version.
-
- This library is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- Library General Public License for more details.
-
- You should have received a copy of the GNU Library General Public
- License along with this library; if not, write to the
- Free Software Foundation, Inc., 59 Temple Place - Suite 330,
- Boston, MA 02111-1307 USA.
-
-Also add information on how to contact you by electronic and paper mail.
-
-You should also get your employer (if you work as a programmer) or your
-school, if any, to sign a "copyright disclaimer" for the library, if
-necessary. Here is a sample; alter the names:
-
- Yoyodyne, Inc., hereby disclaims all copyright interest in the
- library `Frob' (a library for tweaking knobs) written by James Random Hacker.
-
- <signature of Ty Coon>, 1 April 1990
- Ty Coon, President of Vice
-
-That's all there is to it!
diff --git a/lib/libgphoto2-sharp/Camera.cs b/lib/libgphoto2-sharp/Camera.cs
deleted file mode 100644
index c448306..0000000
--- a/lib/libgphoto2-sharp/Camera.cs
+++ /dev/null
@@ -1,246 +0,0 @@
-/*
- * Camera.cs
- *
- * Author(s):
- * Ewen Cheslack-Postava <echeslack at gmail.com>
- * Larry Ewing <lewing at novell.com>
- * Stephane Delcroix <stephane at delcroix.org>
- *
- * Copyright (c) 2005-2009 Novell, Inc.
- *
- * This is open source software. See COPYING for details.
- */
-using System;
-using System.Runtime.InteropServices;
-
-namespace GPhoto2
-{
-
- public class Camera : GPObject
- {
- [DllImport ("libgphoto2.so")]
- internal static extern ErrorCode gp_camera_new (out IntPtr handle);
- [DllImport ("libgphoto2.so")]
- internal static extern ErrorCode gp_camera_unref (HandleRef camera);
-
- public Camera () : base (gp_camera_unref)
- {
- IntPtr native;
- Error.CheckError (gp_camera_new (out native));
- this.handle = new HandleRef (this, native);
- }
-
-#region Preparing initilization
- [DllImport ("libgphoto2.so")]
- internal static extern ErrorCode gp_camera_set_abilities (HandleRef camera, CameraAbilities abilities);
-
- [DllImport ("libgphoto2.so")]
- internal unsafe static extern ErrorCode gp_camera_get_abilities (HandleRef camera, out CameraAbilities abilities);
-
- public CameraAbilities Abilities {
- get {
- CameraAbilities abilities;
- Error.CheckError (gp_camera_get_abilities(this.Handle, out abilities));
- return abilities;
- }
- set { Error.CheckError (gp_camera_set_abilities(this.Handle, value)); }
- }
-
- [DllImport ("libgphoto2.so")]
- internal unsafe static extern ErrorCode gp_camera_set_port_info (HandleRef camera, PortInfo info);
-
- [DllImport ("libgphoto2.so")]
- internal static extern ErrorCode gp_camera_get_port_info (HandleRef camera, out PortInfo info);
-
- public PortInfo PortInfo {
- get {
- PortInfo portinfo;
- Error.CheckError (gp_camera_get_port_info (this.Handle, out portinfo));
- return portinfo;
- }
- set { Error.CheckError (gp_camera_set_port_info (this.Handle, value)); }
- }
-#endregion
-
-#region Speed, do not use, camera driver pick the optimal one
- [DllImport ("libgphoto2.so")]
- internal static extern ErrorCode gp_camera_get_port_speed (HandleRef camera);
-
- [DllImport ("libgphoto2.so")]
- internal static extern ErrorCode gp_camera_set_port_speed (HandleRef camera, int speed);
-
- public int PortSpeed {
- get { return Error.CheckError (gp_camera_get_port_speed (this.Handle)); }
- set { Error.CheckError (gp_camera_set_port_speed (this.Handle, value)); }
- }
-#endregion
-
-#region Initialization
- [DllImport ("libgphoto2.so")]
- internal static extern ErrorCode gp_camera_init (HandleRef camera, HandleRef context);
-
- public void Init (Context context)
- {
- Error.CheckError (gp_camera_init (Handle, context.Handle));
- }
-
- [DllImport ("libgphoto2.so")]
- internal static extern ErrorCode gp_camera_exit (HandleRef camera, HandleRef context);
-
- public void Exit (Context context)
- {
- Error.CheckError (gp_camera_exit (Handle, context.Handle));
- }
-#endregion
-
-#region Operations on camera
- [DllImport ("libgphoto2.so")]
- internal static extern ErrorCode gp_camera_get_summary (HandleRef camera, out CameraText summary, HandleRef context);
-
- public CameraText GetSummary (Context context)
- {
- CameraText summary;
- Error.CheckError (Camera.gp_camera_get_summary(this.Handle, out summary, context.Handle));
-
- return summary;
- }
-
- [DllImport ("libgphoto2.so")]
- internal static extern ErrorCode gp_camera_get_about (HandleRef camera, out CameraText about, HandleRef context);
-
- public CameraText GetAbout (Context context)
- {
- CameraText about;
- Error.CheckError (gp_camera_get_about(this.Handle, out about, context.Handle));
-
- return about;
- }
-
- [DllImport ("libgphoto2.so")]
- internal static extern ErrorCode gp_camera_get_manual (HandleRef camera, out CameraText manual, HandleRef context);
-
- public CameraText GetManual (Context context)
- {
- CameraText manual;
- unsafe
- {
- Error.CheckError (gp_camera_get_manual(this.Handle, out manual, context.Handle));
- }
- return manual;
- }
-
- [DllImport ("libgphoto2.so")]
- internal static extern ErrorCode gp_camera_capture (HandleRef camera, CameraCaptureType type, out CameraFilePath path, HandleRef context);
-
- public CameraFilePath Capture (CameraCaptureType type, Context context)
- {
- CameraFilePath path;
- Error.CheckError (gp_camera_capture (this.Handle, type, out path, context.Handle));
-
- return path;
- }
-
- [DllImport ("libgphoto2.so")]
- internal unsafe static extern ErrorCode gp_camera_capture_preview (HandleRef camera, HandleRef file, HandleRef context);
-
- public void CapturePreview (CameraFile dest, Context context)
- {
- Error.CheckError (gp_camera_capture_preview (this.Handle, dest.Handle, context.Handle));
- }
-#endregion
-
-#region Operations on folders
- [DllImport ("libgphoto2.so")]
- internal static extern ErrorCode gp_camera_folder_list_files (HandleRef camera, [MarshalAs(UnmanagedType.LPTStr)] string folder, HandleRef list, HandleRef context);
-
- public CameraList ListFiles (string folder, Context context)
- {
- CameraList file_list = new CameraList ();
- Error.CheckError (gp_camera_folder_list_files(this.Handle, folder, file_list.Handle, context.Handle));
-
- return file_list;
- }
-
- [DllImport ("libgphoto2.so")]
- internal static extern ErrorCode gp_camera_folder_list_folders (HandleRef camera, [MarshalAs(UnmanagedType.LPTStr)] string folder, HandleRef list, HandleRef context);
-
- public CameraList ListFolders (string folder, Context context)
- {
- CameraList file_list = new CameraList();
- Error.CheckError (gp_camera_folder_list_folders (this.Handle, folder, file_list.Handle, context.Handle));
-
- return file_list;
- }
-
- [DllImport ("libgphoto2.so")]
- internal static extern ErrorCode gp_camera_folder_delete_all (HandleRef camera, [MarshalAs(UnmanagedType.LPTStr)] string folder, HandleRef context);
-
- public void DeleteAll (string folder, Context context)
- {
- Error.CheckError (gp_camera_folder_delete_all (this.Handle, folder, context.Handle));
- }
-
- [DllImport ("libgphoto2.so")]
- internal static extern ErrorCode gp_camera_folder_make_dir (HandleRef camera, [MarshalAs(UnmanagedType.LPTStr)] string folder, [MarshalAs(UnmanagedType.LPTStr)] string name, HandleRef context);
-
- public void MakeDirectory (string folder, string name, Context context)
- {
- Error.CheckError (gp_camera_folder_make_dir (this.Handle, folder, name, context.Handle));
- }
-
- [DllImport ("libgphoto2.so")]
- internal static extern ErrorCode gp_camera_folder_remove_dir (HandleRef camera, [MarshalAs(UnmanagedType.LPTStr)] string folder, [MarshalAs(UnmanagedType.LPTStr)] string name, HandleRef context);
-
- public void RemoveDirectory (string folder, string name, Context context)
- {
- Error.CheckError (gp_camera_folder_remove_dir(this.Handle, folder, name, context.Handle));
- }
-
- [DllImport ("libgphoto2.so")]
- internal unsafe static extern ErrorCode gp_camera_folder_put_file (HandleRef camera, [MarshalAs(UnmanagedType.LPTStr)] string folder, HandleRef file, HandleRef context);
-
- public void PutFile (string folder, CameraFile file, Context context)
- {
- Error.CheckError (gp_camera_folder_put_file(this.Handle, folder, file.Handle, context.Handle));
- }
-#endregion
-
-#region Operations on files
- [DllImport ("libgphoto2.so")]
- internal static extern ErrorCode gp_camera_file_get (HandleRef camera, [MarshalAs(UnmanagedType.LPTStr)] string folder, [MarshalAs(UnmanagedType.LPTStr)] string file, CameraFileType type, HandleRef camera_file, HandleRef context);
-
- public void GetFile (string folder, string name, CameraFileType type, CameraFile camera_file, Context context)
- {
- Error.CheckError (gp_camera_file_get(this.Handle, folder, name, type, camera_file.Handle, context.Handle));
- }
-
- [DllImport ("libgphoto2.so")]
- internal static extern ErrorCode gp_camera_file_delete (HandleRef camera, [MarshalAs(UnmanagedType.LPTStr)] string folder, [MarshalAs(UnmanagedType.LPTStr)] string file, HandleRef context);
-
- public void DeleteFile (string folder, string name, Context context)
- {
- Error.CheckError (gp_camera_file_delete(this.Handle, folder, name, context.Handle));
- }
-
-
- [DllImport ("libgphoto2.so")]
- internal static extern ErrorCode gp_camera_file_get_info (HandleRef camera, [MarshalAs(UnmanagedType.LPTStr)] string folder, [MarshalAs(UnmanagedType.LPTStr)] string file, out CameraFileInfo info, HandleRef context);
-
- public CameraFileInfo GetFileInfo (string folder, string name, Context context)
- {
- CameraFileInfo fileinfo;
- Error.CheckError (gp_camera_file_get_info(this.Handle, folder, name, out fileinfo, context.Handle));
-
- return fileinfo;
- }
-
- [DllImport ("libgphoto2.so")]
- internal static extern ErrorCode gp_camera_file_set_info (HandleRef camera, string folder, string file, CameraFileInfo info, HandleRef context);
-
- public void SetFileInfo (string folder, string name, CameraFileInfo fileinfo, Context context)
- {
- Error.CheckError (gp_camera_file_set_info(this.Handle, folder, name, fileinfo, context.Handle));
- }
-#endregion
- }
-}
diff --git a/lib/libgphoto2-sharp/CameraAbilities.cs b/lib/libgphoto2-sharp/CameraAbilities.cs
deleted file mode 100644
index 7039212..0000000
--- a/lib/libgphoto2-sharp/CameraAbilities.cs
+++ /dev/null
@@ -1,114 +0,0 @@
-/*
- * CameraAbilities.cs
- *
- * Author(s):
- * Stephane Delcroix <stephane at delcroix.org>
- * Ewen Cheslack-Postava <echeslack at gmail.com>
- * Larry Ewing <lewing at novell.com>
- *
- * Copyright (c) 2005-2009 Novell, Inc.
- *
- * This is open source software. See COPYING for details.
- */
-
-using System;
-using System.Runtime.InteropServices;
-
-namespace GPhoto2
-{
- [StructLayout(LayoutKind.Sequential)]
- public unsafe struct CameraAbilities
- {
- [MarshalAs(UnmanagedType.ByValTStr, SizeConst=128)] string model;
- CameraDriverStatus status;
-
- PortType port;
- [MarshalAs(UnmanagedType.ByValArray, SizeConst=64)] int[] speed;
-
- CameraOperation operations;
- CameraFileOperation file_operations;
- CameraFolderOperation folder_operations;
-
- int usb_vendor;
- int usb_product;
- int usb_class;
- int usb_subclass;
- int usb_protocol;
-
-#pragma warning disable 169
- [MarshalAs(UnmanagedType.ByValTStr, SizeConst=1024)] string library;
- [MarshalAs(UnmanagedType.ByValTStr, SizeConst=1024)] string id;
-#pragma warning restore 169
-
- DeviceType device_type;
-
-#pragma warning disable 169
- int reserved2;
- int reserved3;
- int reserved4;
- int reserved5;
- int reserved6;
- int reserved7;
- int reserved8;
-#pragma warning restore 169
-
- public override string ToString ()
- {
- string ret = String.Format ("{0} ({1})", Model, PortType);
- if (DriverStatus != CameraDriverStatus.Production)
- ret += String.Format (" <{0}>", DriverStatus);
- return ret;
- }
-
- public string Model {
- get { return model; }
- }
-
- public CameraDriverStatus DriverStatus {
- get { return status; }
- }
- public PortType PortType {
- get { return port; }
- }
-
- public int[] Speeds {
- get { return speed; }
- }
-
- public CameraOperation CameraOperation {
- get { return operations; }
- }
-
- public CameraFileOperation CameraFileOperation {
- get { return file_operations; }
- }
-
- public CameraFolderOperation CameraFolderOperation {
- get { return folder_operations; }
- }
-
- public int UsbVendor {
- get { return usb_vendor; }
- }
-
- public int UsbProduct {
- get { return usb_product; }
- }
-
- public int UsbClass {
- get { return usb_class; }
- }
-
- public int UsbSubclass {
- get { return usb_subclass; }
- }
-
- public int UsbProtocol {
- get { return usb_protocol; }
- }
-
- public DeviceType DeviceType {
- get { return device_type;}
- }
- }
-}
diff --git a/lib/libgphoto2-sharp/CameraAbilitiesList.cs b/lib/libgphoto2-sharp/CameraAbilitiesList.cs
deleted file mode 100644
index 8c1ceb1..0000000
--- a/lib/libgphoto2-sharp/CameraAbilitiesList.cs
+++ /dev/null
@@ -1,81 +0,0 @@
-/*
- * CameraAbilitiesList.cs
- *
- * Author(s):
- * Stephane Delcroix <stephane at delcroix.org>
- * Ewen Cheslack-Postava <echeslack at gmail.com>
- * Larry Ewing <lewing at novell.com>
- *
- * Copyright (c) 2005-2009 Novell, Inc.
- *
- * This is open source software. See COPYING for details.
- */
-
-using System;
-using System.Runtime.InteropServices;
-using System.Collections.Generic;
-using System.Collections;
-
-namespace GPhoto2
-{
- public class CameraAbilitiesList : GPList<CameraAbilities>
- {
- [DllImport ("libgphoto2.so")]
- internal static extern ErrorCode gp_abilities_list_new (out IntPtr native);
- [DllImport ("libgphoto2.so")]
- internal static extern ErrorCode gp_abilities_list_free (HandleRef list);
-
- public CameraAbilitiesList () : base (gp_abilities_list_free)
- {
- IntPtr native;
- Error.CheckError (gp_abilities_list_new (out native));
- this.handle = new HandleRef (this, native);
- }
-
- [DllImport ("libgphoto2.so")]
- internal unsafe static extern ErrorCode gp_abilities_list_load (HandleRef list, HandleRef context);
-
- public void Load (Context context)
- {
- Error.CheckError (gp_abilities_list_load (this.Handle, context.Handle));
- }
-
- [DllImport ("libgphoto2.so")]
- internal unsafe static extern ErrorCode gp_abilities_list_detect (HandleRef list, HandleRef info_list, HandleRef l, HandleRef context);
-
- public CameraList Detect (PortInfoList info_list, Context context)
- {
- CameraList camera_list = new CameraList ();
- Error.CheckError (gp_abilities_list_detect (Handle, info_list.Handle,
- camera_list.Handle, context.Handle));
- return camera_list;
- }
-
- [DllImport ("libgphoto2.so")]
- internal static extern ErrorCode gp_abilities_list_count (HandleRef list);
-
- public override int Count {
- get { return Error.CheckError (gp_abilities_list_count (this.handle)); }
- }
-
- [DllImport ("libgphoto2.so")]
- internal static extern ErrorCode gp_abilities_list_get_abilities (HandleRef list, int index, out CameraAbilities abilities);
-
- public override CameraAbilities this [int index] {
- get {
- CameraAbilities abilities;
- Error.CheckError (gp_abilities_list_get_abilities(this.Handle, index, out abilities));
-
- return abilities;
- }
- }
-
- [DllImport ("libgphoto2.so")]
- internal static extern ErrorCode gp_abilities_list_lookup_model (HandleRef list, [MarshalAs (UnmanagedType.LPTStr)]string model);
-
- public CameraAbilities this [string model] {
- get { return this [Error.CheckError (gp_abilities_list_lookup_model(this.handle, model))]; }
- }
-
- }
-}
diff --git a/lib/libgphoto2-sharp/CameraCaptureType.cs b/lib/libgphoto2-sharp/CameraCaptureType.cs
deleted file mode 100644
index c3fcdc1..0000000
--- a/lib/libgphoto2-sharp/CameraCaptureType.cs
+++ /dev/null
@@ -1,19 +0,0 @@
-/*
- * CameraCaptureType.cs
- *
- * Author(s):
- * Stephane Delcroix <stephane at delcroix.org>
- *
- * Copyright (c) 2009 Novell, Inc.
- *
- * This is open source software. See COPYING for details.
- */
-
-namespace GPhoto2
-{
- public enum CameraCaptureType {
- Image,
- Movie,
- Sound,
- }
-}
diff --git a/lib/libgphoto2-sharp/CameraDriverStatus.cs b/lib/libgphoto2-sharp/CameraDriverStatus.cs
deleted file mode 100644
index 6eb710e..0000000
--- a/lib/libgphoto2-sharp/CameraDriverStatus.cs
+++ /dev/null
@@ -1,22 +0,0 @@
-/*
- * CameraDriverStatus.cs
- *
- * Author(s):
- * Ewen Cheslack-Postava <echeslack at gmail.com>
- * Larry Ewing <lewing at novell.com>
- * Stephane Delcroix <stephane at delcroix.org>
- *
- * Copyright (c) 2005-2009 Novell, Inc.
- *
- * This is open source software. See COPYING for details.
- */
-
-namespace GPhoto2
-{
- public enum CameraDriverStatus {
- Production,
- Testing,
- Experimental,
- Deprecated,
- }
-}
diff --git a/lib/libgphoto2-sharp/CameraEventType.cs b/lib/libgphoto2-sharp/CameraEventType.cs
deleted file mode 100644
index 03d155c..0000000
--- a/lib/libgphoto2-sharp/CameraEventType.cs
+++ /dev/null
@@ -1,20 +0,0 @@
-/*
- * CameraEventType.cs
- *
- * Author(s):
- * Stephane Delcroix <stephane at delcroix.org>
- *
- * Copyright (c) 2009 Novell, Inc.
- *
- * This is open source software. See COPYING for details.
- */
-
-namespace GPhoto2
-{
- public enum CameraEventType {
- Unknown,
- Timeout,
- FileAdded,
- FolderAdded,
- }
-}
diff --git a/lib/libgphoto2-sharp/CameraFile.cs b/lib/libgphoto2-sharp/CameraFile.cs
deleted file mode 100644
index a43d0b9..0000000
--- a/lib/libgphoto2-sharp/CameraFile.cs
+++ /dev/null
@@ -1,105 +0,0 @@
-/*
- * CameraFile.cs
- *
- * Author(s):
- * Ewen Cheslack-Postava <echeslack at gmail.com>
- * Larry Ewing <lewing at novell.com>
- * Stephane Delcroix <stephane at delcroix.org>
- *
- * Copyright (c) 2005-2009 Novell, Inc.
- *
- * This is open source software. See COPYING for details.
- */
-using System;
-using System.Runtime.InteropServices;
-
-namespace GPhoto2
-{
- public enum CameraFileType
- {
- Preview,
- Normal,
- Raw,
- Audio,
- Exif,
- Metadata,
- }
-
- public class MimeTypes
- {
- [MarshalAs(UnmanagedType.LPTStr)] public static string ASF = "audio/x-asf";
- [MarshalAs(UnmanagedType.LPTStr)] public static string AVI = "video/x-msvideo";
- [MarshalAs(UnmanagedType.LPTStr)] public static string BMP = "image/bmp";
- [MarshalAs(UnmanagedType.LPTStr)] public static string CRW = "image/x-canon-raw";
- [MarshalAs(UnmanagedType.LPTStr)] public static string CR2 = "image/x-canon-raw";
- [MarshalAs(UnmanagedType.LPTStr)] public static string EXIF = "application/x-exif";
- [MarshalAs(UnmanagedType.LPTStr)] public static string JPEG = "image/jpeg";
- [MarshalAs(UnmanagedType.LPTStr)] public static string MP3 = "audio/mpeg";
- [MarshalAs(UnmanagedType.LPTStr)] public static string MPEG = "video/mpeg";
- [MarshalAs(UnmanagedType.LPTStr)] public static string OGG = "application/ogg";
- [MarshalAs(UnmanagedType.LPTStr)] public static string PGM = "image/x-portable-graymap";
- [MarshalAs(UnmanagedType.LPTStr)] public static string PNG = "image/png";
- [MarshalAs(UnmanagedType.LPTStr)] public static string PNM = "image-x-portable-anymap";
- [MarshalAs(UnmanagedType.LPTStr)] public static string PPM = "image-x-portable-pixmap";
- [MarshalAs(UnmanagedType.LPTStr)] public static string QUICKTIME = "video/quicktime";
- [MarshalAs(UnmanagedType.LPTStr)] public static string RAW = "image/x-raw";
- [MarshalAs(UnmanagedType.LPTStr)] public static string TIFF = "image/tiff";
- [MarshalAs(UnmanagedType.LPTStr)] public static string UNKNOWN = "application/octet-stream";
- [MarshalAs(UnmanagedType.LPTStr)] public static string WAV = "audio/wav";
- [MarshalAs(UnmanagedType.LPTStr)] public static string WMA = "audio/x-wma";
- }
-
- public class CameraFile : GPObject
- {
- [DllImport ("libgphoto2.so")]
- internal static extern ErrorCode gp_file_new (out IntPtr file);
- [DllImport ("libgphoto2.so")]
- internal static extern ErrorCode gp_file_unref (HandleRef file);
-
- public CameraFile () : base (gp_file_unref)
- {
- IntPtr native;
- Error.CheckError (gp_file_new (out native));
- this.handle = new HandleRef (this, native);
- }
-
- [DllImport ("libgphoto2.so")]
- internal static extern ErrorCode gp_file_new_from_fd (out IntPtr file, int fd);
-
- public CameraFile (int fd) : base (gp_file_unref)
- {
- IntPtr native;
- Error.CheckError (gp_file_new_from_fd (out native, fd));
- this.handle = new HandleRef (this, native);
- }
-
- [DllImport ("libgphoto2.so")]
- internal static extern ErrorCode gp_file_save (HandleRef file, string filename);
-
- [Obsolete ("DO NOT USE")]
- public void Save (string filename)
- {
- Error.CheckError (gp_file_save (this.Handle, filename));
- }
-
- [DllImport ("libgphoto2.so")]
- internal static extern ErrorCode gp_file_get_data_and_size (HandleRef file, out IntPtr data, out IntPtr size);
-
- [Obsolete ("DO NOT USE")]
- public byte[] GetDataAndSize ()
- {
- IntPtr size;
- byte[] data;
- IntPtr data_addr;
-
- Error.CheckError (gp_file_get_data_and_size (this.Handle, out data_addr, out size));
-
- if(data_addr == IntPtr.Zero || size.ToInt32() == 0)
- return new byte[0];
-
- data = new byte[size.ToInt32()];
- Marshal.Copy(data_addr, data, 0, (int)size.ToInt32());
- return data;
- }
- }
-}
diff --git a/lib/libgphoto2-sharp/CameraFileOperation.cs b/lib/libgphoto2-sharp/CameraFileOperation.cs
deleted file mode 100644
index 296db30..0000000
--- a/lib/libgphoto2-sharp/CameraFileOperation.cs
+++ /dev/null
@@ -1,27 +0,0 @@
-/*
- * CameraFileOperation.cs
- *
- * Author(s):
- * Ewen Cheslack-Postava <echeslack at gmail.com>
- * Larry Ewing <lewing at novell.com>
- * Stephane Delcroix <stephane at delcroix.org>
- *
- * Copyright (c) 2005-2009 Novell, Inc.
- *
- * This is open source software. See COPYING for details.
- */
-
-using System;
-
-namespace GPhoto2
-{
- [Flags]
- public enum CameraFileOperation {
- None = 0,
- Delete = 1 << 1,
- Preview = 1 << 3,
- Raw = 1 << 4,
- Audio = 1 << 5,
- Exif = 1 << 6,
- }
-}
diff --git a/lib/libgphoto2-sharp/CameraFilePath.cs b/lib/libgphoto2-sharp/CameraFilePath.cs
deleted file mode 100644
index 4ac2b2f..0000000
--- a/lib/libgphoto2-sharp/CameraFilePath.cs
+++ /dev/null
@@ -1,35 +0,0 @@
-/*
- * xxx.cs
- *
- * Author(s):
- * Ewen Cheslack-Postava <echeslack at gmail.com>
- * Larry Ewing <lewing at novell.com>
- * Stephane Delcroix <stephane at delcroix.org>
- *
- * Copyright (c) 2005-2009 Novell, Inc.
- *
- * This is open source software. See COPYING for details.
- */
-
-using System;
-using System.Runtime.InteropServices;
-
-namespace GPhoto2
-{
- [StructLayout(LayoutKind.Sequential)]
- public unsafe struct CameraFilePath
- {
- [MarshalAs(UnmanagedType.ByValTStr, SizeConst=128)] string name;
- [MarshalAs(UnmanagedType.ByValTStr, SizeConst=1024)] string folder;
-
- public string Name {
- get { return name; }
- set { name = value; }
- }
-
- public string Folder {
- get { return folder; }
- set { folder = value; }
- }
- }
-}
diff --git a/lib/libgphoto2-sharp/CameraFilesystem.cs b/lib/libgphoto2-sharp/CameraFilesystem.cs
deleted file mode 100644
index 1d94675..0000000
--- a/lib/libgphoto2-sharp/CameraFilesystem.cs
+++ /dev/null
@@ -1,84 +0,0 @@
-/*
- * CameraFilesystem.cs
- *
- * Author(s):
- * Ewen Cheslack-Postava <echeslack at gmail.com>
- * Larry Ewing <lewing at novell.com>
- *
- * This is free software. See COPYING for details.
- */
-using System;
-using System.Runtime.InteropServices;
-
-namespace GPhoto2
-{
- public enum CameraFilePermissions
- {
- None = 0,
- Read = 1 << 0,
- Delete = 1 << 1,
- All = 0xFF
- }
-
- public enum CameraFileStatus
- {
- NotDownloaded,
- Downloaded
- }
-
- public enum CameraFileInfoFields
- {
- None = 0,
- Type = 1 << 0,
- Name = 1 << 1,
- Size = 1 << 2,
- Width = 1 << 3,
- Height = 1 << 4,
- Permissions = 1 << 5,
- Status = 1 << 6,
- MTime = 1 << 7,
- All = 0xFF
- }
-
- [StructLayout(LayoutKind.Sequential)]
- public unsafe struct CameraFileInfoAudio
- {
- public CameraFileInfoFields fields;
- public CameraFileStatus status;
- public ulong size;
- [MarshalAs(UnmanagedType.ByValTStr, SizeConst=64)] public char[] type;
- }
-
- [StructLayout(LayoutKind.Sequential)]
- public unsafe struct CameraFileInfoPreview
- {
- public CameraFileInfoFields fields;
- public CameraFileStatus status;
- public ulong size;
- [MarshalAs(UnmanagedType.ByValTStr, SizeConst=64)] public char[] type;
-
- public uint width, height;
- }
-
- [StructLayout(LayoutKind.Sequential)]
- public unsafe struct CameraFileInfoFile
- {
- public CameraFileInfoFields fields;
- public CameraFileStatus status;
- public ulong size;
- [MarshalAs(UnmanagedType.ByValTStr, SizeConst=64)] public char[] type;
-
- public uint width, height;
- [MarshalAs(UnmanagedType.ByValTStr, SizeConst=64)] public char[] name;
- public CameraFilePermissions permissions;
- public long time;
- }
-
- [StructLayout(LayoutKind.Sequential)]
- public unsafe struct CameraFileInfo
- {
- public CameraFileInfoPreview preview;
- public CameraFileInfoFile file;
- public CameraFileInfoAudio audio;
- }
-}
diff --git a/lib/libgphoto2-sharp/CameraFolderOperation.cs b/lib/libgphoto2-sharp/CameraFolderOperation.cs
deleted file mode 100644
index c8144fc..0000000
--- a/lib/libgphoto2-sharp/CameraFolderOperation.cs
+++ /dev/null
@@ -1,26 +0,0 @@
-/*
- * CameraFolderOperation.cs
- *
- * Author(s):
- * Ewen Cheslack-Postava <echeslack at gmail.com>
- * Larry Ewing <lewing at novell.com>
- * Stephane Delcroix <stephane at delcroix.org>
- *
- * Copyright (c) 2005-2009 Novell, Inc.
- *
- * This is open source software. See COPYING for details.
- */
-
-using System;
-
-namespace GPhoto2
-{
- [Flags]
- public enum CameraFolderOperation {
- None = 0,
- DeleteAll = 1 << 0,
- PutFile = 1 << 1,
- MakeDirectory = 1 << 2,
- RemoveDirectory = 1 << 3,
- }
-}
diff --git a/lib/libgphoto2-sharp/CameraList.cs b/lib/libgphoto2-sharp/CameraList.cs
deleted file mode 100644
index 8d1fa5b..0000000
--- a/lib/libgphoto2-sharp/CameraList.cs
+++ /dev/null
@@ -1,96 +0,0 @@
-/*
- * CameraList.cs
- *
- * Author(s):
- * Stephane Delcroix <stephane at delcroix.org
- * Ewen Cheslack-Postava <echeslack at gmail.com>
- * Larry Ewing <lewing at novell.com>
- *
- * Copyright (c) 2005-2009 Novell, Inc.
- *
- * This is open source software. See COPYING for details.
- */
-
-using System;
-using System.Runtime.InteropServices;
-
-namespace GPhoto2
-{
- public class CameraList : GPObject
- {
- [DllImport ("libgphoto2.so")]
- internal static extern ErrorCode gp_list_new (out IntPtr list);
- [DllImport ("libgphoto2.so")]
- internal static extern ErrorCode gp_list_unref (HandleRef list);
-
- public CameraList () : base (gp_list_unref)
- {
- IntPtr native;
- Error.CheckError (gp_list_new (out native));
-
- this.handle = new HandleRef (this, native);
- }
-
- [DllImport ("libgphoto2.so")]
- internal static extern ErrorCode gp_list_count (HandleRef list);
-
- public int Count {
- get { return Error.CheckError (gp_list_count (handle)); }
- }
-
- [DllImport ("libgphoto2.so")]
- internal static extern ErrorCode gp_list_set_name (HandleRef list, int index, [MarshalAs(UnmanagedType.LPTStr)] string name);
-
- public void SetName (int n, string name)
- {
- Error.CheckError (gp_list_set_name(this.Handle, n, name));
- }
-
- [DllImport ("libgphoto2.so")]
- internal static extern ErrorCode gp_list_get_name (HandleRef list, int index, out IntPtr name);
-
- public string GetName (int index)
- {
- IntPtr name;
- Error.CheckError (gp_list_get_name(this.Handle, index, out name));
-
- return Marshal.PtrToStringAnsi (name);
- }
-
- [DllImport ("libgphoto2.so")]
- internal static extern ErrorCode gp_list_set_value (HandleRef list, int index, [MarshalAs (UnmanagedType.LPTStr)] string value);
-
- public void SetValue (int n, string value)
- {
- Error.CheckError (gp_list_set_value (this.Handle, n, value));
- }
-
-
- [DllImport ("libgphoto2.so")]
- internal static extern ErrorCode gp_list_get_value (HandleRef list, int index, out IntPtr value);
-
- public string GetValue (int index)
- {
- IntPtr value;
- Error.CheckError (gp_list_get_value(this.Handle, index, out value));
-
- return Marshal.PtrToStringAnsi (value);
- }
-
- [DllImport ("libgphoto2.so")]
- internal static extern ErrorCode gp_list_reset (HandleRef list);
-
- public void Reset ()
- {
- Error.CheckError (gp_list_reset(this.Handle));
- }
-
- [DllImport ("libgphoto2.so")]
- internal static extern ErrorCode gp_list_sort (HandleRef list);
-
- public void Sort ()
- {
- Error.CheckError (gp_list_sort(this.Handle));
- }
- }
-}
diff --git a/lib/libgphoto2-sharp/CameraOperation.cs b/lib/libgphoto2-sharp/CameraOperation.cs
deleted file mode 100644
index 11a7c3d..0000000
--- a/lib/libgphoto2-sharp/CameraOperation.cs
+++ /dev/null
@@ -1,27 +0,0 @@
-/*
- * CameraOperation.cs
- *
- * Author(s):
- * Ewen Cheslack-Postava <echeslack at gmail.com>
- * Larry Ewing <lewing at novell.com>
- * Stephane Delcroix <stephane at delcroix.org>
- *
- * Copyright (c) 2005-2009 Novell, Inc.
- *
- * This is open source software. See COPYING for details.
- */
-
-using System;
-
-namespace GPhoto2
-{
- [Flags]
- public enum CameraOperation {
- None = 0,
- CaptureImage = 1 << 0,
- CaptureVideo = 1 << 1,
- CaptureAudio = 1 << 2,
- CapturePreview = 1 << 3,
- Config = 1 << 4,
- }
-}
diff --git a/lib/libgphoto2-sharp/CameraText.cs b/lib/libgphoto2-sharp/CameraText.cs
deleted file mode 100644
index 3e82814..0000000
--- a/lib/libgphoto2-sharp/CameraText.cs
+++ /dev/null
@@ -1,27 +0,0 @@
-/*
- * CameraText.cs
- *
- * Author(s):
- * Stephane Delcroix <stephane at delcroix.org>
- *
- * Copyright (c) 2009 Novell, Inc.
- *
- * This is open source software. See COPYING for details.
- */
-
-using System;
-using System.Runtime.InteropServices;
-
-namespace GPhoto2
-{
- [StructLayout(LayoutKind.Sequential)]
- public unsafe struct CameraText
- {
- [MarshalAs(UnmanagedType.ByValTStr, SizeConst=(32*1024))] string text;
-
- public string Text {
- get { return text; }
- set { text = value; }
- }
- }
-}
diff --git a/lib/libgphoto2-sharp/Context.cs b/lib/libgphoto2-sharp/Context.cs
deleted file mode 100644
index 53c6728..0000000
--- a/lib/libgphoto2-sharp/Context.cs
+++ /dev/null
@@ -1,252 +0,0 @@
-/*
- * Context.cs
- *
- * Author(s):
- * Stephane Delcroix <stephan @delcroix.org>
- * Ewen Cheslack-Postava <echeslack at gmail.com>
- * Larry Ewing <lewing at novell.com>
- *
- * Copyright (c) 2005-2009 Novell, Inc.
- *
- * This is open source software. See COPYING for details.
- */
-using System;
-using System.Runtime.InteropServices;
-
-namespace GPhoto2
-{
- public delegate void IdleFunc ();
- public delegate void ErrorFunc (string error);
- public delegate void StatusFunc (string status);
- public delegate void MessageFunc (string message);
- public delegate ContextFeedback QuestionFunc (string message);
- public delegate ContextFeedback CancelFunc (string message);
- public delegate uint ProgressStartFunc (float target, string message);
- public delegate void ProgressUpdateFunc (uint id, float progress);
- public delegate void ProgressStopFunc (uint id);
-
- public class Context : GPObject
- {
- [DllImport ("libgphoto2.so")]
- internal static extern IntPtr gp_context_new ();
-
- [DllImport ("libgphoto2glue.so")]
- internal static extern IntPtr gp_glue_context_new (HandleRef context);
-
- [DllImport ("libgphoto2.so")]
- internal static extern void gp_context_unref (HandleRef context);
-
- HandleRef gluecontext;
- public Context ()
- {
- this.handle = new HandleRef (this, gp_context_new ());
- gluecontext = new HandleRef (this, gp_glue_context_new (Handle));
- }
-
-
- [DllImport ("libgphoto2glue.so")]
- internal static extern void gp_glue_context_free (HandleRef context);
-
- protected override void Cleanup ()
- {
- gp_glue_context_free (gluecontext);
- gp_context_unref (handle);
- }
-
-#region callbacks
- [DllImport ("libgphoto2.so")]
- internal static extern void gp_context_set_idle_func (HandleRef context, IdleFuncNative func, IntPtr data);
-
- IdleFuncWrapper idle_func_wrapper;
- public void SetIdleFunc (IdleFunc func)
- {
- idle_func_wrapper = new IdleFuncWrapper (func);
- IntPtr data = IntPtr.Zero;
- if (func != null)
- data = (IntPtr) GCHandle.Alloc (idle_func_wrapper);
- gp_context_set_idle_func (Handle, idle_func_wrapper.NativeDelegate, data);
- }
-
- [DllImport ("libgphoto2glue.so")]
- internal static extern void gp_glue_context_set_progress_funcs (HandleRef context, ProgressStartFuncNative start_func, ProgressUpdateFuncNative update_func, ProgressStopFuncNative stop_func, IntPtr data);
-
- ProgressFuncsWrapper progress_funcs_wrapper;
- public void SetProgressFuncs (ProgressStartFunc start_func, ProgressUpdateFunc update_func, ProgressStopFunc stop_func)
- {
- progress_funcs_wrapper = new ProgressFuncsWrapper (start_func, update_func, stop_func);
- IntPtr data = IntPtr.Zero;
- if (start_func != null || update_func != null || stop_func != null)
- data = (IntPtr) GCHandle.Alloc (progress_funcs_wrapper);
- gp_glue_context_set_progress_funcs (gluecontext,
- progress_funcs_wrapper.NativeStartDelegate,
- progress_funcs_wrapper.NativeUpdateDelegate,
- progress_funcs_wrapper.NativeStopDelegate,
- data);
- }
-
- [DllImport ("libgphoto2glue.so")]
- internal static extern void gp_glue_context_set_error_func (HandleRef context, ErrorFuncNative func, IntPtr data);
-
- ErrorFuncWrapper error_func_wrapper;
- public void SetErrorFunc (ErrorFunc func)
- {
- error_func_wrapper = new ErrorFuncWrapper (func);
- IntPtr data = IntPtr.Zero;
- if (func != null)
- data = (IntPtr) GCHandle.Alloc (error_func_wrapper);
- gp_glue_context_set_error_func (gluecontext, error_func_wrapper.NativeDelegate, data);
- }
-
- [DllImport ("libgphoto2glue.so")]
- internal static extern void gp_glue_context_set_status_func (HandleRef context, StatusFuncNative func, IntPtr data);
-
- StatusFuncWrapper status_func_wrapper;
- public void SetStatusFunc (StatusFunc func)
- {
- status_func_wrapper = new StatusFuncWrapper (func);
- IntPtr data = IntPtr.Zero;
- if (func != null)
- data = (IntPtr) GCHandle.Alloc (status_func_wrapper);
- gp_glue_context_set_status_func (gluecontext, status_func_wrapper.NativeDelegate, data);
- }
-
- [DllImport ("libgphoto2.so")]
- internal static extern void gp_context_set_message_func (HandleRef context, MessageFuncNative func, IntPtr data);
-
- MessageFuncWrapper message_func_wrapper;
- public void SetMessageFunc (MessageFunc func)
- {
- message_func_wrapper = new MessageFuncWrapper (func);
- IntPtr data = IntPtr.Zero;
- if (func != null)
- data = (IntPtr) GCHandle.Alloc (message_func_wrapper);
- gp_context_set_message_func (gluecontext, message_func_wrapper.NativeDelegate, data);
- }
-
-#endregion
-
-#region wrappers for callbacks
- internal delegate void IdleFuncNative (HandleRef context, IntPtr data);
- class IdleFuncWrapper
- {
- public void NativeCallback (HandleRef context, IntPtr data)
- {
- managed ();
- }
-
- public IdleFuncNative NativeDelegate;
- IdleFunc managed;
-
- public IdleFuncWrapper (IdleFunc managed)
- {
- this.managed = managed;
- if (managed != null)
- NativeDelegate = NativeCallback;
- }
- }
-
- internal delegate uint ProgressStartFuncNative (HandleRef context, float target, string message, IntPtr data);
- internal delegate void ProgressUpdateFuncNative (HandleRef context, uint id, float current, IntPtr data);
- internal delegate void ProgressStopFuncNative (HandleRef context, uint id, IntPtr data);
- class ProgressFuncsWrapper
- {
- public void NativeUpdateCallback (HandleRef context, uint id, float current, IntPtr data)
- {
- managed_update (id, current);
- }
- public uint NativeStartCallback (HandleRef context, float target, string message, IntPtr data)
- {
- return managed_start (target, message);
- }
-
-
- public void NativeStopCallback (HandleRef context, uint id, IntPtr data)
- {
- managed_stop (id);
- }
-
- public ProgressStartFuncNative NativeStartDelegate;
- public ProgressUpdateFuncNative NativeUpdateDelegate;
- public ProgressStopFuncNative NativeStopDelegate;
-
- ProgressStartFunc managed_start;
- ProgressUpdateFunc managed_update;
- ProgressStopFunc managed_stop;
-
- public ProgressFuncsWrapper (ProgressStartFunc start, ProgressUpdateFunc update, ProgressStopFunc stop)
- {
- managed_start = start;
- if (managed_start != null)
- NativeStartDelegate = new ProgressStartFuncNative (NativeStartCallback);
-
- managed_update = update;
- if (managed_update != null)
- NativeUpdateDelegate = new ProgressUpdateFuncNative (NativeUpdateCallback);
-
- managed_stop = stop;
- if (managed_stop != null)
- NativeStopDelegate = new ProgressStopFuncNative (NativeStopCallback);
- }
- }
-
- internal delegate void ErrorFuncNative (HandleRef context, string error, IntPtr data);
- class ErrorFuncWrapper
- {
- public void NativeCallback (HandleRef context, string error, IntPtr data)
- {
- managed (error);
- }
-
- public ErrorFuncNative NativeDelegate;
- ErrorFunc managed;
-
- public ErrorFuncWrapper (ErrorFunc managed)
- {
- this.managed = managed;
- if (managed != null)
- NativeDelegate = NativeCallback;
- }
- }
-
- internal delegate void StatusFuncNative (HandleRef context, string status, IntPtr data);
- class StatusFuncWrapper
- {
- public void NativeCallback (HandleRef context, string status, IntPtr data)
- {
- managed (status);
- }
-
- public StatusFuncNative NativeDelegate;
- StatusFunc managed;
-
- public StatusFuncWrapper (StatusFunc managed)
- {
- this.managed = managed;
- if (managed != null)
- NativeDelegate = NativeCallback;
- }
- }
-
- internal delegate void MessageFuncNative (HandleRef context, string message, IntPtr data);
- class MessageFuncWrapper
- {
- public void NativeCallback (HandleRef context, string message, IntPtr data)
- {
- managed (message);
- }
-
- public MessageFuncNative NativeDelegate;
- MessageFunc managed;
-
- public MessageFuncWrapper (MessageFunc managed)
- {
- this.managed = managed;
- if (managed != null)
- NativeDelegate = NativeCallback;
- }
- }
-
-
-#endregion
- }
-}
diff --git a/lib/libgphoto2-sharp/ContextFeedback.cs b/lib/libgphoto2-sharp/ContextFeedback.cs
deleted file mode 100644
index dc864ec..0000000
--- a/lib/libgphoto2-sharp/ContextFeedback.cs
+++ /dev/null
@@ -1,21 +0,0 @@
-/*
- * ContextFeedback.cs
- *
- * Author(s):
- * Stephane Delcroix <stephane at delcroix.org>
- *
- * Copyright (c) 2009 Novell, Inc.
- *
- * This is open source software. See COPYING for details.
- */
-
-using System;
-using System.Runtime.InteropServices;
-
-namespace GPhoto2
-{
- public enum ContextFeedback {
- OK,
- Cancel,
- }
-}
diff --git a/lib/libgphoto2-sharp/DeviceType.cs b/lib/libgphoto2-sharp/DeviceType.cs
deleted file mode 100644
index b921058..0000000
--- a/lib/libgphoto2-sharp/DeviceType.cs
+++ /dev/null
@@ -1,22 +0,0 @@
-/*
- * DeviceType.cs
- *
- * Author(s):
- * Stephane Delcroix <stephane at delcroix.org>
- *
- * Copyright (c) 2009 Novell, Inc.
- *
- * This is open source software. See COPYING for details.
- */
-
-
-using System;
-
-namespace GPhoto2
-{
- [Flags]
- public enum DeviceType {
- StillCamera = 0,
- AudioPlayer = 1 << 0,
- }
-}
diff --git a/lib/libgphoto2-sharp/ErrorCodes.cs b/lib/libgphoto2-sharp/ErrorCodes.cs
deleted file mode 100644
index 4a89bb7..0000000
--- a/lib/libgphoto2-sharp/ErrorCodes.cs
+++ /dev/null
@@ -1,123 +0,0 @@
-/*
- * ErrorCodes.cs
- *
- * Author(s):
- * Ewen Cheslack-Postava <echeslack at gmail.com>
- * Larry Ewing <lewing at novell.com>
- * Stephane Delcroix <stephane at delcroix.org>
- *
- * Copyright (c) 2005-2009 Novel, Inc.
- *
- * This is open source software. See COPYING for details.
- */
-using System;
-using System.Runtime.InteropServices;
-
-namespace GPhoto2
-{
- public enum ErrorCode
- {
- /* IO Errors */
- GeneralError = -1,
- BadParameters = -2,
- NoMemory = -3,
- Library = -4,
- UnknownPort = -5,
- NotSupported = -6,
- IO = -7,
- FixedLimitExceeded = -8,
- Timout = -10,
- SupportedSerial = -20,
- SupportedUSB = -21,
- Init = -31,
- Read = -34,
- Write = -35,
- Update = -37,
- SerialSpeed = -41,
- USBClearHalt = -51,
- USBFind = -52,
- USBClaim = -53,
- Lock = -60,
- Hal = -70,
-
- /* Other Errors*/
- CorruptedData = -102,
- FileExists = -103,
- ModelNotFound = -105,
- DirectoryNotFound = -107,
- FileNotFound = -108,
- DirectoryExists = -109,
- CameraBusy = -110,
- PathNotAbsolute = -111,
- Cancel = -112,
- CameraError = -113,
- OsFailure = -114,
- }
-
- public static class Error
- {
- public static bool IsError (ErrorCode error_code)
- {
- return (error_code < 0);
- }
-
- public static int CheckError (ErrorCode error)
- {
- if (IsError (error)) {
- string message = "Unknown Error";
-
- if ((int)error <= -100)
- message = GetErrorAsString (error);
- else if ((int)error <= -1 && (int)error >= -99)
- message = GetIOErrorAsString (error);
-
- throw new GPhotoException (error, message);
- }
-
- return (int)error;
- }
-
- [DllImport ("libgphoto2.so")]
- internal static extern IntPtr gp_result_as_string (ErrorCode result);
-
- static string GetErrorAsString (ErrorCode e)
- {
- IntPtr raw_message = gp_result_as_string(e);
- return Marshal.PtrToStringAnsi(raw_message);
- }
-
- [DllImport ("libgphoto2_port.so")]
- internal static extern IntPtr gp_port_result_as_string (ErrorCode result);
-
- static string GetIOErrorAsString(ErrorCode e)
- {
- IntPtr raw_message = gp_port_result_as_string(e);
- return Marshal.PtrToStringAnsi(raw_message);
- }
-
- }
-
- public class GPhotoException : Exception
- {
- private ErrorCode error;
-
- public GPhotoException(ErrorCode error_code) : base ("Unknown Error.")
- {
- error = error_code;
- }
-
- public GPhotoException (ErrorCode error_code, string message) : base (message)
- {
- error = error_code;
- }
-
- public override string ToString()
- {
- return ("Error " + error.ToString() + ": " + base.ToString());
- }
-
- public ErrorCode Error {
- get { return error; }
- }
- }
-}
diff --git a/lib/libgphoto2-sharp/GPList.cs b/lib/libgphoto2-sharp/GPList.cs
deleted file mode 100644
index 613813d..0000000
--- a/lib/libgphoto2-sharp/GPList.cs
+++ /dev/null
@@ -1,85 +0,0 @@
-/*
- * GPList.cs
- *
- * Author(s):
- * Stephane Delcroix <stephane at delcroix.org>
- *
- * Copyright (c) 2009 Novell, Inc.
- *
- * This is open source software. See COPYING for details.
- */
-
-using System;
-using System.Runtime.InteropServices;
-using System.Collections.Generic;
-using System.Collections;
-
-namespace GPhoto2
-{
- public abstract class GPList<T> : GPObject, IEnumerable<T>
- {
- IEnumerator<T> IEnumerable<T>.GetEnumerator ()
- {
- return new Enumerator<T> (this);
- }
-
- IEnumerator IEnumerable.GetEnumerator ()
- {
- return new Enumerator<T> (this);
- }
-
- public abstract int Count {get; }
- public abstract T this [int index] { get; }
-
- public GPList (Func<HandleRef, ErrorCode> cleaner) : base (cleaner)
- {
- }
-
- class Enumerator<U> : IEnumerator<U>, IEnumerator
- {
- int current;
- int count;
- GPList<U> list;
-
- public Enumerator (GPList<U> list)
- {
- this.list = list;
- Reset ();
- }
-
- public void Reset ()
- {
- current = -1;
- count = list.Count;
- }
-
- U IEnumerator<U>.Current {
- get {
- if (current < 0 || current >= count)
- throw new InvalidOperationException ();
- return list[current];
- }
- }
-
- object IEnumerator.Current {
- get {
- if (current < 0 || current >= count)
- throw new InvalidOperationException ();
- return list[current];
- }
- }
-
- public bool MoveNext ()
- {
- current ++;
- if (current >= count)
- return false;
- return true;
- }
-
- public void Dispose ()
- {
- }
- }
- }
-}
diff --git a/lib/libgphoto2-sharp/GPObject.cs b/lib/libgphoto2-sharp/GPObject.cs
deleted file mode 100644
index 768010d..0000000
--- a/lib/libgphoto2-sharp/GPObject.cs
+++ /dev/null
@@ -1,57 +0,0 @@
-/*
- * GPObject.cs
- *
- * Author(s):
- * Ewen Cheslack-Postava <echeslack at gmail.com>
- * Larry Ewing <lewing at novell.com>
- * Stephane Delcroix <stephane at delcroix.org>
- *
- * Copyright (c) 2005-2009 Novelll, Inc.
- *
- * This is open source software. See COPYING for details.
- */
-using System;
-using System.Runtime.InteropServices;
-
-namespace GPhoto2 {
- public abstract class GPObject : System.IDisposable {
- protected HandleRef handle;
- Func<HandleRef, ErrorCode> gp_object_cleaner;
-
- public HandleRef Handle
- {
- get { return handle; }
- }
-
- public GPObject ()
- {
- }
-
- public GPObject (Func<HandleRef, ErrorCode> gp_object_cleaner)
- {
- this.gp_object_cleaner = gp_object_cleaner;
- }
-
- protected virtual void Cleanup ()
- {
- if (gp_object_cleaner != null)
- gp_object_cleaner (handle);
- }
-
- bool is_disposed = false;
- public void Dispose () {
- lock (this) {
- if (is_disposed)
- return;
- is_disposed = true;
- Cleanup ();
- System.GC.SuppressFinalize (this);
- }
- }
-
- ~GPObject ()
- {
- Cleanup ();
- }
- }
-}
diff --git a/lib/libgphoto2-sharp/Makefile.am b/lib/libgphoto2-sharp/Makefile.am
deleted file mode 100644
index 0e649a2..0000000
--- a/lib/libgphoto2-sharp/Makefile.am
+++ /dev/null
@@ -1,60 +0,0 @@
-SUBDIRS = glue
-
-include $(top_srcdir)/Makefile.include
-
-ASSEMBLY_NAME = libgphoto2-sharp
-
-ASSEMBLY_SOURCES = \
- $(srcdir)/AssemblyInfo.cs \
- $(srcdir)/Camera.cs \
- $(srcdir)/CameraAbilities.cs \
- $(srcdir)/CameraAbilitiesList.cs \
- $(srcdir)/CameraCaptureType.cs \
- $(srcdir)/CameraDriverStatus.cs \
- $(srcdir)/CameraEventType.cs \
- $(srcdir)/CameraFile.cs \
- $(srcdir)/CameraFilePath.cs \
- $(srcdir)/CameraFilesystem.cs \
- $(srcdir)/CameraFileOperation.cs \
- $(srcdir)/CameraFolderOperation.cs \
- $(srcdir)/CameraList.cs \
- $(srcdir)/CameraOperation.cs \
- $(srcdir)/CameraText.cs \
- $(srcdir)/Context.cs \
- $(srcdir)/ContextFeedback.cs \
- $(srcdir)/DeviceType.cs \
- $(srcdir)/ErrorCodes.cs \
- $(srcdir)/GPList.cs \
- $(srcdir)/GPObject.cs \
- $(srcdir)/Port.cs \
- $(srcdir)/PortInfo.cs \
- $(srcdir)/PortInfoList.cs \
- $(srcdir)/PortSerialParity.cs \
- $(srcdir)/PortType.cs
-
-REFS = -r:Mono.Posix
-
-PKGS =
-
-ASSEMBLY = $(ASSEMBLY_NAME).dll
-
-all: $(ASSEMBLY)
-
-$(ASSEMBLY): $(ASSEMBLY_SOURCES)
- $(CSC_LIB) $(CSC_DEFINES) -unsafe -out:$@ $(PKGS) $(REFS) $(ASSEMBLY_SOURCES)
-
-assemblydir = $(pkglibdir)
-assembly_DATA = \
- $(ASSEMBLY) \
- $(ASSEMBLY).config
-
-EXTRA_DIST = \
- $(ASSEMBLY_SOURCES) \
- $(ASSEMBLY).config.in \
- AUTHORS \
- COPYING
-
-CLEANFILES = \
- $(ASSEMBLY) \
- $(ASSEMBLY).mdb \
- $(ASSEMBLY).config
diff --git a/lib/libgphoto2-sharp/Makefile.in b/lib/libgphoto2-sharp/Makefile.in
deleted file mode 100644
index 62c78d6..0000000
--- a/lib/libgphoto2-sharp/Makefile.in
+++ /dev/null
@@ -1,781 +0,0 @@
-# Makefile.in generated by automake 1.11.1 from Makefile.am.
-# @configure_input@
-
-# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
-# 2003, 2004, 2005, 2006, 2007, 2008, 2009 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.
-
-# This program is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
-# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
-# PARTICULAR PURPOSE.
-
- at SET_MAKE@
-
-VPATH = @srcdir@
-pkgdatadir = $(datadir)/@PACKAGE@
-pkgincludedir = $(includedir)/@PACKAGE@
-pkglibdir = $(libdir)/@PACKAGE@
-pkglibexecdir = $(libexecdir)/@PACKAGE@
-am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
-install_sh_DATA = $(install_sh) -c -m 644
-install_sh_PROGRAM = $(install_sh) -c
-install_sh_SCRIPT = $(install_sh) -c
-INSTALL_HEADER = $(INSTALL_DATA)
-transform = $(program_transform_name)
-NORMAL_INSTALL = :
-PRE_INSTALL = :
-POST_INSTALL = :
-NORMAL_UNINSTALL = :
-PRE_UNINSTALL = :
-POST_UNINSTALL = :
-build_triplet = @build@
-host_triplet = @host@
-DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in \
- $(srcdir)/libgphoto2-sharp.dll.config.in \
- $(top_srcdir)/Makefile.include AUTHORS COPYING
-subdir = lib/libgphoto2-sharp
-ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
-am__aclocal_m4_deps = $(top_srcdir)/build/m4/shave/shave.m4 \
- $(top_srcdir)/build/m4/shamrock/expansions.m4 \
- $(top_srcdir)/build/m4/shamrock/mono.m4 \
- $(top_srcdir)/build/m4/shamrock/programs.m4 \
- $(top_srcdir)/acinclude.m4 $(top_srcdir)/configure.ac
-am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
- $(ACLOCAL_M4)
-mkinstalldirs = $(install_sh) -d
-CONFIG_HEADER = $(top_builddir)/config.h
-CONFIG_CLEAN_FILES = libgphoto2-sharp.dll.config
-CONFIG_CLEAN_VPATH_FILES =
-SOURCES =
-DIST_SOURCES =
-RECURSIVE_TARGETS = all-recursive check-recursive dvi-recursive \
- html-recursive info-recursive install-data-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
-am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`;
-am__vpath_adj = case $$p in \
- $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \
- *) f=$$p;; \
- esac;
-am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`;
-am__install_max = 40
-am__nobase_strip_setup = \
- srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'`
-am__nobase_strip = \
- for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||"
-am__nobase_list = $(am__nobase_strip_setup); \
- for p in $$list; do echo "$$p $$p"; done | \
- sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \
- $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \
- if (++n[$$2] == $(am__install_max)) \
- { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \
- END { for (dir in files) print dir, files[dir] }'
-am__base_list = \
- sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \
- sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g'
-am__installdirs = "$(DESTDIR)$(assemblydir)"
-DATA = $(assembly_DATA)
-RECURSIVE_CLEAN_TARGETS = mostlyclean-recursive clean-recursive \
- distclean-recursive maintainer-clean-recursive
-AM_RECURSIVE_TARGETS = $(RECURSIVE_TARGETS:-recursive=) \
- $(RECURSIVE_CLEAN_TARGETS:-recursive=) tags TAGS ctags CTAGS \
- distdir
-ETAGS = etags
-CTAGS = ctags
-DIST_SUBDIRS = $(SUBDIRS)
-DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
-am__relativize = \
- dir0=`pwd`; \
- sed_first='s,^\([^/]*\)/.*$$,\1,'; \
- sed_rest='s,^[^/]*/*,,'; \
- sed_last='s,^.*/\([^/]*\)$$,\1,'; \
- sed_butlast='s,/*[^/]*$$,,'; \
- while test -n "$$dir1"; do \
- first=`echo "$$dir1" | sed -e "$$sed_first"`; \
- if test "$$first" != "."; then \
- if test "$$first" = ".."; then \
- dir2=`echo "$$dir0" | sed -e "$$sed_last"`/"$$dir2"; \
- dir0=`echo "$$dir0" | sed -e "$$sed_butlast"`; \
- else \
- first2=`echo "$$dir2" | sed -e "$$sed_first"`; \
- if test "$$first2" = "$$first"; then \
- dir2=`echo "$$dir2" | sed -e "$$sed_rest"`; \
- else \
- dir2="../$$dir2"; \
- fi; \
- dir0="$$dir0"/"$$first"; \
- fi; \
- fi; \
- dir1=`echo "$$dir1" | sed -e "$$sed_rest"`; \
- done; \
- reldir="$$dir2"
-ACLOCAL = @ACLOCAL@
-ACLOCAL_AMFLAGS = @ACLOCAL_AMFLAGS@
-ALL_LINGUAS = @ALL_LINGUAS@
-AMTAR = @AMTAR@
-AM_MAKEFLAGS = @AM_MAKEFLAGS@
-API_VERSION = @API_VERSION@
-AR = @AR@
-ASM_VERSION = @ASM_VERSION@
-AUTOCONF = @AUTOCONF@
-AUTOHEADER = @AUTOHEADER@
-AUTOMAKE = @AUTOMAKE@
-AWK = @AWK@
-CATALOGS = @CATALOGS@
-CATOBJEXT = @CATOBJEXT@
-CC = @CC@
-CCDEPMODE = @CCDEPMODE@
-CFLAGS = @CFLAGS@
-CPP = @CPP@
-CPPFLAGS = @CPPFLAGS@
-CSC_DEFINES = @CSC_DEFINES@
-CXX = @CXX@
-CXXCPP = @CXXCPP@
-CXXDEPMODE = @CXXDEPMODE@
-CXXFLAGS = @CXXFLAGS@
-CYGPATH_W = @CYGPATH_W@
-DATADIRNAME = @DATADIRNAME@
-DEFS = @DEFS@
-DEPDIR = @DEPDIR@
-DISPLAY_VERSION = @DISPLAY_VERSION@
-DISTCHECK_CONFIGURE_FLAGS = @DISTCHECK_CONFIGURE_FLAGS@
-DOC_USER_FORMATS = @DOC_USER_FORMATS@
-DSYMUTIL = @DSYMUTIL@
-DUMPBIN = @DUMPBIN@
-ECHO_C = @ECHO_C@
-ECHO_N = @ECHO_N@
-ECHO_T = @ECHO_T@
-EGREP = @EGREP@
-EXEEXT = @EXEEXT@
-EXIF_CFLAGS = @EXIF_CFLAGS@
-EXIF_LIBS = @EXIF_LIBS@
-EXIF_SOVERSION = @EXIF_SOVERSION@
-F77 = @F77@
-FC = @FC@
-FGREP = @FGREP@
-F_CFLAGS = @F_CFLAGS@
-F_LIBS = @F_LIBS@
-GAPI2CODEGEN = @GAPI2CODEGEN@
-GAPI2FIXUP = @GAPI2FIXUP@
-GAPI2PARSER = @GAPI2PARSER@
-GCONFTOOL = @GCONFTOOL@
-GCONF_SCHEMA_CONFIG_SOURCE = @GCONF_SCHEMA_CONFIG_SOURCE@
-GCONF_SCHEMA_FILE_DIR = @GCONF_SCHEMA_FILE_DIR@
-GCONF_SHARP_CFLAGS = @GCONF_SHARP_CFLAGS@
-GCONF_SHARP_LIBS = @GCONF_SHARP_LIBS@
-GETTEXT_PACKAGE = @GETTEXT_PACKAGE@
-GIO_CFLAGS = @GIO_CFLAGS@
-GIO_LIBS = @GIO_LIBS@
-GLIBSHARP_CFLAGS = @GLIBSHARP_CFLAGS@
-GLIBSHARP_LIBS = @GLIBSHARP_LIBS@
-GLIB_CFLAGS = @GLIB_CFLAGS@
-GLIB_GENMARSHAL = @GLIB_GENMARSHAL@
-GLIB_LIBS = @GLIB_LIBS@
-GLIB_MKENUMS = @GLIB_MKENUMS@
-GMOFILES = @GMOFILES@
-GMSGFMT = @GMSGFMT@
-GNOME_ICON_THEME_PREFIX = @GNOME_ICON_THEME_PREFIX@
-GNOME_SCREENSAVER_SAVERDIR = @GNOME_SCREENSAVER_SAVERDIR@
-GNOME_SCREENSAVER_THEMESDIR = @GNOME_SCREENSAVER_THEMESDIR@
-GNOME_SHARP_CFLAGS = @GNOME_SHARP_CFLAGS@
-GNOME_SHARP_LIBS = @GNOME_SHARP_LIBS@
-GOBJECT_QUERY = @GOBJECT_QUERY@
-GREP = @GREP@
-HELP_DIR = @HELP_DIR@
-ICONS_DIRECTORY = @ICONS_DIRECTORY@
-INSTALL = @INSTALL@
-INSTALL_DATA = @INSTALL_DATA@
-INSTALL_PROGRAM = @INSTALL_PROGRAM@
-INSTALL_SCRIPT = @INSTALL_SCRIPT@
-INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
-INSTOBJEXT = @INSTOBJEXT@
-INTLLIBS = @INTLLIBS@
-INTLTOOL_EXTRACT = @INTLTOOL_EXTRACT@
-INTLTOOL_MERGE = @INTLTOOL_MERGE@
-INTLTOOL_PERL = @INTLTOOL_PERL@
-INTLTOOL_UPDATE = @INTLTOOL_UPDATE@
-LCMS_CFLAGS = @LCMS_CFLAGS@
-LCMS_LIBS = @LCMS_LIBS@
-LD = @LD@
-LDFLAGS = @LDFLAGS@
-LIBEXIF_VERSION_CHECK_CFLAGS = @LIBEXIF_VERSION_CHECK_CFLAGS@
-LIBEXIF_VERSION_CHECK_LIBS = @LIBEXIF_VERSION_CHECK_LIBS@
-LIBGPHOTO2_CFLAGS = @LIBGPHOTO2_CFLAGS@
-LIBGPHOTO2_LIBS = @LIBGPHOTO2_LIBS@
-LIBJPEG = @LIBJPEG@
-LIBOBJS = @LIBOBJS@
-LIBS = @LIBS@
-LIBTOOL = @LIBTOOL@
-LIPO = @LIPO@
-LN_S = @LN_S@
-LTLIBOBJS = @LTLIBOBJS@
-MAINT = @MAINT@
-MAKEFLAGS = @MAKEFLAGS@
-MAKEINFO = @MAKEINFO@
-MCS = @MCS@
-MKDIR_P = @MKDIR_P@
-MKINSTALLDIRS = @MKINSTALLDIRS@
-MONO = @MONO@
-MONO_MODULE_CFLAGS = @MONO_MODULE_CFLAGS@
-MONO_MODULE_LIBS = @MONO_MODULE_LIBS@
-MSGFMT = @MSGFMT@
-MSGFMT_OPTS = @MSGFMT_OPTS@
-MSGMERGE = @MSGMERGE@
-NDESK_DBUS_CFLAGS = @NDESK_DBUS_CFLAGS@
-NDESK_DBUS_LIBS = @NDESK_DBUS_LIBS@
-NM = @NM@
-NMEDIT = @NMEDIT@
-NUNIT_CFLAGS = @NUNIT_CFLAGS@
-NUNIT_DEFINES = @NUNIT_DEFINES@
-NUNIT_LIBS = @NUNIT_LIBS@
-OBJC = @OBJC@
-OBJDUMP = @OBJDUMP@
-OBJEXT = @OBJEXT@
-OMF_DIR = @OMF_DIR@
-OTOOL = @OTOOL@
-OTOOL64 = @OTOOL64@
-PACKAGE = @PACKAGE@
-PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
-PACKAGE_NAME = @PACKAGE_NAME@
-PACKAGE_STRING = @PACKAGE_STRING@
-PACKAGE_TARNAME = @PACKAGE_TARNAME@
-PACKAGE_URL = @PACKAGE_URL@
-PACKAGE_VERSION = @PACKAGE_VERSION@
-PATH_SEPARATOR = @PATH_SEPARATOR@
-PKG_CONFIG = @PKG_CONFIG@
-POFILES = @POFILES@
-POSUB = @POSUB@
-PO_IN_DATADIR_FALSE = @PO_IN_DATADIR_FALSE@
-PO_IN_DATADIR_TRUE = @PO_IN_DATADIR_TRUE@
-Q = @Q@
-RANLIB = @RANLIB@
-SED = @SED@
-SET_MAKE = @SET_MAKE@
-SHELL = @SHELL@
-STRIP = @STRIP@
-TURTLEDIR = @TURTLEDIR@
-UNIQUE_CFLAGS = @UNIQUE_CFLAGS@
-UNIQUE_LIBS = @UNIQUE_LIBS@
-USE_NLS = @USE_NLS@
-V = @V@
-VERSION = @VERSION@
-WARN_CFLAGS = @WARN_CFLAGS@
-XGETTEXT = @XGETTEXT@
-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_DUMPBIN = @ac_ct_DUMPBIN@
-am__include = @am__include@
-am__leading_dot = @am__leading_dot@
-am__quote = @am__quote@
-am__tar = @am__tar@
-am__untar = @am__untar@
-bindir = @bindir@
-build = @build@
-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@
-expanded_bindir = @expanded_bindir@
-expanded_datadir = @expanded_datadir@
-expanded_libdir = @expanded_libdir@
-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@
-lt_ECHO = @lt_ECHO@
-mandir = @mandir@
-mkdir_p = @mkdir_p@
-oldincludedir = @oldincludedir@
-pdfdir = @pdfdir@
-prefix = @prefix@
-program_transform_name = @program_transform_name@
-psdir = @psdir@
-sbindir = @sbindir@
-sharedstatedir = @sharedstatedir@
-shavedir = @shavedir@
-srcdir = @srcdir@
-sysconfdir = @sysconfdir@
-target_alias = @target_alias@
-top_build_prefix = @top_build_prefix@
-top_builddir = @top_builddir@
-top_srcdir = @top_srcdir@
-SUBDIRS = glue
-DIR_DOCS = $(top_builddir)/docs
-DIR_EXTENSIONS = $(top_builddir)/extensions
-DIR_GPHOTO2 = $(top_builddir)/lib/libgphoto2-sharp
-DIR_ICONS = $(top_builddir)/icons
-DIR_JPEGTRAN = $(top_builddir)/lib/libjpegtran
-DIR_KEYRING = $(top_builddir)/lib/gnome-keyring-sharp
-DIR_LIBFSPOT = $(top_builddir)/lib/libfspot
-DIR_SEMWEB = $(top_builddir)/lib/semweb
-DIR_SRC = $(top_builddir)/src
-DIR_GIOSHARP = $(top_builddir)/lib/gio-sharp/gio
-DIR_GTKSHARPBEANS = $(top_builddir)/lib/gtk-sharp-beans
-DIR_UNIQUESHARP = $(top_builddir)/lib/unique-sharp/unique
-LINK_KEYRING = -r:$(DIR_KEYRING)/gnome-keyring-sharp.dll
-LINK_GPHOTO2 = -r:$(DIR_GPHOTO2)/libgphoto2-sharp.dll
-LINK_SEMWEB = -r:$(DIR_SEMWEB)/SemWeb.dll
-LINK_GIOSHARP = -r:$(DIR_GIOSHARP)/gio-sharp.dll
-LINK_GTKSHARPBEANS = -r:$(DIR_GTKSHARPBEANS)/gtk-sharp-beans.dll
-LINK_UNIQUESHARP = -r:$(DIR_UNIQUESHARP)/unique-sharp.dll
-CSC_FLAGS = -debug
-CSC = $(MCS) $(CSC_FLAGS) -target:exe
-CSC_LIB = $(MCS) $(CSC_FLAGS) -target:library
-MONO_DEBUGFLAGS = --debug
-RUNTIME = mono $(MONO_DEBUGFLAGS)
-ASSEMBLY_NAME = libgphoto2-sharp
-ASSEMBLY_SOURCES = \
- $(srcdir)/AssemblyInfo.cs \
- $(srcdir)/Camera.cs \
- $(srcdir)/CameraAbilities.cs \
- $(srcdir)/CameraAbilitiesList.cs \
- $(srcdir)/CameraCaptureType.cs \
- $(srcdir)/CameraDriverStatus.cs \
- $(srcdir)/CameraEventType.cs \
- $(srcdir)/CameraFile.cs \
- $(srcdir)/CameraFilePath.cs \
- $(srcdir)/CameraFilesystem.cs \
- $(srcdir)/CameraFileOperation.cs \
- $(srcdir)/CameraFolderOperation.cs \
- $(srcdir)/CameraList.cs \
- $(srcdir)/CameraOperation.cs \
- $(srcdir)/CameraText.cs \
- $(srcdir)/Context.cs \
- $(srcdir)/ContextFeedback.cs \
- $(srcdir)/DeviceType.cs \
- $(srcdir)/ErrorCodes.cs \
- $(srcdir)/GPList.cs \
- $(srcdir)/GPObject.cs \
- $(srcdir)/Port.cs \
- $(srcdir)/PortInfo.cs \
- $(srcdir)/PortInfoList.cs \
- $(srcdir)/PortSerialParity.cs \
- $(srcdir)/PortType.cs
-
-REFS = -r:Mono.Posix
-PKGS =
-ASSEMBLY = $(ASSEMBLY_NAME).dll
-assemblydir = $(pkglibdir)
-assembly_DATA = \
- $(ASSEMBLY) \
- $(ASSEMBLY).config
-
-EXTRA_DIST = \
- $(ASSEMBLY_SOURCES) \
- $(ASSEMBLY).config.in \
- AUTHORS \
- COPYING
-
-CLEANFILES = \
- $(ASSEMBLY) \
- $(ASSEMBLY).mdb \
- $(ASSEMBLY).config
-
-all: all-recursive
-
-.SUFFIXES:
-$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(top_srcdir)/Makefile.include $(am__configure_deps)
- @for dep in $?; do \
- case '$(am__configure_deps)' in \
- *$$dep*) \
- ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \
- && { if test -f $@; then exit 0; else break; fi; }; \
- exit 1;; \
- esac; \
- done; \
- echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign lib/libgphoto2-sharp/Makefile'; \
- $(am__cd) $(top_srcdir) && \
- $(AUTOMAKE) --foreign lib/libgphoto2-sharp/Makefile
-.PRECIOUS: Makefile
-Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
- @case '$?' in \
- *config.status*) \
- cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \
- *) \
- echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \
- cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \
- esac;
-
-$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
- cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
-
-$(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps)
- cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
-$(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps)
- cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
-$(am__aclocal_m4_deps):
-libgphoto2-sharp.dll.config: $(top_builddir)/config.status $(srcdir)/libgphoto2-sharp.dll.config.in
- cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@
-
-mostlyclean-libtool:
- -rm -f *.lo
-
-clean-libtool:
- -rm -rf .libs _libs
-install-assemblyDATA: $(assembly_DATA)
- @$(NORMAL_INSTALL)
- test -z "$(assemblydir)" || $(MKDIR_P) "$(DESTDIR)$(assemblydir)"
- @list='$(assembly_DATA)'; test -n "$(assemblydir)" || list=; \
- for p in $$list; do \
- if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \
- echo "$$d$$p"; \
- done | $(am__base_list) | \
- while read files; do \
- echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(assemblydir)'"; \
- $(INSTALL_DATA) $$files "$(DESTDIR)$(assemblydir)" || exit $$?; \
- done
-
-uninstall-assemblyDATA:
- @$(NORMAL_UNINSTALL)
- @list='$(assembly_DATA)'; test -n "$(assemblydir)" || list=; \
- files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \
- test -n "$$files" || exit 0; \
- echo " ( cd '$(DESTDIR)$(assemblydir)' && rm -f" $$files ")"; \
- cd "$(DESTDIR)$(assemblydir)" && rm -f $$files
-
-# 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,
-# (1) if the variable is set in `config.status', edit `config.status'
-# (which will cause the Makefiles to be regenerated when you run `make');
-# (2) otherwise, pass the desired values on the `make' command line.
-$(RECURSIVE_TARGETS):
- @fail= failcom='exit 1'; \
- for f in x $$MAKEFLAGS; do \
- case $$f in \
- *=* | --[!k]*);; \
- *k*) failcom='fail=yes';; \
- esac; \
- done; \
- dot_seen=no; \
- target=`echo $@ | sed s/-recursive//`; \
- list='$(SUBDIRS)'; for subdir in $$list; do \
- echo "Making $$target in $$subdir"; \
- if test "$$subdir" = "."; then \
- dot_seen=yes; \
- local_target="$$target-am"; \
- else \
- local_target="$$target"; \
- fi; \
- ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \
- || eval $$failcom; \
- done; \
- if test "$$dot_seen" = "no"; then \
- $(MAKE) $(AM_MAKEFLAGS) "$$target-am" || exit 1; \
- fi; test -z "$$fail"
-
-$(RECURSIVE_CLEAN_TARGETS):
- @fail= failcom='exit 1'; \
- for f in x $$MAKEFLAGS; do \
- case $$f in \
- *=* | --[!k]*);; \
- *k*) failcom='fail=yes';; \
- esac; \
- done; \
- dot_seen=no; \
- case "$@" in \
- distclean-* | maintainer-clean-*) list='$(DIST_SUBDIRS)' ;; \
- *) list='$(SUBDIRS)' ;; \
- esac; \
- rev=''; for subdir in $$list; do \
- if test "$$subdir" = "."; then :; else \
- rev="$$subdir $$rev"; \
- fi; \
- done; \
- rev="$$rev ."; \
- target=`echo $@ | sed s/-recursive//`; \
- for subdir in $$rev; do \
- echo "Making $$target in $$subdir"; \
- if test "$$subdir" = "."; then \
- local_target="$$target-am"; \
- else \
- local_target="$$target"; \
- fi; \
- ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \
- || eval $$failcom; \
- done && test -z "$$fail"
-tags-recursive:
- list='$(SUBDIRS)'; for subdir in $$list; do \
- test "$$subdir" = . || ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) tags); \
- done
-ctags-recursive:
- list='$(SUBDIRS)'; for subdir in $$list; do \
- test "$$subdir" = . || ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) ctags); \
- done
-
-ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES)
- list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
- unique=`for i in $$list; do \
- if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
- done | \
- $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
- END { if (nonempty) { for (i in files) print i; }; }'`; \
- mkid -fID $$unique
-tags: TAGS
-
-TAGS: tags-recursive $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \
- $(TAGS_FILES) $(LISP)
- set x; \
- here=`pwd`; \
- if ($(ETAGS) --etags-include --version) >/dev/null 2>&1; then \
- include_option=--etags-include; \
- empty_fix=.; \
- else \
- include_option=--include; \
- empty_fix=; \
- fi; \
- list='$(SUBDIRS)'; for subdir in $$list; do \
- if test "$$subdir" = .; then :; else \
- test ! -f $$subdir/TAGS || \
- set "$$@" "$$include_option=$$here/$$subdir/TAGS"; \
- fi; \
- done; \
- list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
- unique=`for i in $$list; do \
- if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
- done | \
- $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
- END { if (nonempty) { for (i in files) print i; }; }'`; \
- shift; \
- if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \
- test -n "$$unique" || unique=$$empty_fix; \
- if test $$# -gt 0; then \
- $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
- "$$@" $$unique; \
- else \
- $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
- $$unique; \
- fi; \
- fi
-ctags: CTAGS
-CTAGS: ctags-recursive $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \
- $(TAGS_FILES) $(LISP)
- list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
- unique=`for i in $$list; do \
- if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
- done | \
- $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
- END { if (nonempty) { for (i in files) print i; }; }'`; \
- test -z "$(CTAGS_ARGS)$$unique" \
- || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \
- $$unique
-
-GTAGS:
- here=`$(am__cd) $(top_builddir) && pwd` \
- && $(am__cd) $(top_srcdir) \
- && gtags -i $(GTAGS_ARGS) "$$here"
-
-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)'; \
- 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; \
- if test -d $$d/$$file; then \
- dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \
- if test -d "$(distdir)/$$file"; then \
- find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
- fi; \
- if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
- cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \
- find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
- fi; \
- cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \
- else \
- test -f "$(distdir)/$$file" \
- || cp -p $$d/$$file "$(distdir)/$$file" \
- || exit 1; \
- fi; \
- done
- @list='$(DIST_SUBDIRS)'; for subdir in $$list; do \
- if test "$$subdir" = .; then :; else \
- test -d "$(distdir)/$$subdir" \
- || $(MKDIR_P) "$(distdir)/$$subdir" \
- || exit 1; \
- fi; \
- done
- @list='$(DIST_SUBDIRS)'; for subdir in $$list; do \
- if test "$$subdir" = .; then :; else \
- dir1=$$subdir; dir2="$(distdir)/$$subdir"; \
- $(am__relativize); \
- new_distdir=$$reldir; \
- dir1=$$subdir; dir2="$(top_distdir)"; \
- $(am__relativize); \
- new_top_distdir=$$reldir; \
- echo " (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) top_distdir="$$new_top_distdir" distdir="$$new_distdir" \\"; \
- echo " am__remove_distdir=: am__skip_length_check=: am__skip_mode_fix=: distdir)"; \
- ($(am__cd) $$subdir && \
- $(MAKE) $(AM_MAKEFLAGS) \
- top_distdir="$$new_top_distdir" \
- distdir="$$new_distdir" \
- am__remove_distdir=: \
- am__skip_length_check=: \
- am__skip_mode_fix=: \
- distdir) \
- || exit 1; \
- fi; \
- done
-check-am: all-am
-check: check-recursive
-all-am: Makefile $(DATA)
-installdirs: installdirs-recursive
-installdirs-am:
- for dir in "$(DESTDIR)$(assemblydir)"; do \
- test -z "$$dir" || $(MKDIR_P) "$$dir"; \
- done
-install: install-recursive
-install-exec: install-exec-recursive
-install-data: install-data-recursive
-uninstall: uninstall-recursive
-
-install-am: all-am
- @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
-
-installcheck: installcheck-recursive
-install-strip:
- $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
- install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
- `test -z '$(STRIP)' || \
- echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install
-mostlyclean-generic:
-
-clean-generic:
- -test -z "$(CLEANFILES)" || rm -f $(CLEANFILES)
-
-distclean-generic:
- -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
- -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES)
-
-maintainer-clean-generic:
- @echo "This command is intended for maintainers to use"
- @echo "it deletes files that may require special tools to rebuild."
-clean: clean-recursive
-
-clean-am: clean-generic clean-libtool mostlyclean-am
-
-distclean: distclean-recursive
- -rm -f Makefile
-distclean-am: clean-am distclean-generic distclean-tags
-
-dvi: dvi-recursive
-
-dvi-am:
-
-html: html-recursive
-
-html-am:
-
-info: info-recursive
-
-info-am:
-
-install-data-am: install-assemblyDATA
-
-install-dvi: install-dvi-recursive
-
-install-dvi-am:
-
-install-exec-am:
-
-install-html: install-html-recursive
-
-install-html-am:
-
-install-info: install-info-recursive
-
-install-info-am:
-
-install-man:
-
-install-pdf: install-pdf-recursive
-
-install-pdf-am:
-
-install-ps: install-ps-recursive
-
-install-ps-am:
-
-installcheck-am:
-
-maintainer-clean: maintainer-clean-recursive
- -rm -f Makefile
-maintainer-clean-am: distclean-am maintainer-clean-generic
-
-mostlyclean: mostlyclean-recursive
-
-mostlyclean-am: mostlyclean-generic mostlyclean-libtool
-
-pdf: pdf-recursive
-
-pdf-am:
-
-ps: ps-recursive
-
-ps-am:
-
-uninstall-am: uninstall-assemblyDATA
-
-.MAKE: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) ctags-recursive \
- install-am install-strip tags-recursive
-
-.PHONY: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) CTAGS GTAGS \
- all all-am check check-am clean clean-generic clean-libtool \
- ctags ctags-recursive distclean distclean-generic \
- distclean-libtool distclean-tags distdir dvi dvi-am html \
- html-am info info-am install install-am install-assemblyDATA \
- 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-generic mostlyclean-libtool pdf pdf-am ps ps-am \
- tags tags-recursive uninstall uninstall-am \
- uninstall-assemblyDATA
-
-
-all: $(ASSEMBLY)
-
-$(ASSEMBLY): $(ASSEMBLY_SOURCES)
- $(CSC_LIB) $(CSC_DEFINES) -unsafe -out:$@ $(PKGS) $(REFS) $(ASSEMBLY_SOURCES)
-
-# 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.
-.NOEXPORT:
diff --git a/lib/libgphoto2-sharp/Port.cs b/lib/libgphoto2-sharp/Port.cs
deleted file mode 100644
index 970024d..0000000
--- a/lib/libgphoto2-sharp/Port.cs
+++ /dev/null
@@ -1,189 +0,0 @@
-/*
- * Port.cs
- *
- * Author(s):
- * Ewen Cheslack-Postava <echeslack at gmail.com>
- * Larry Ewing <lewing at novell.com>
- * Stephane Delcroix <stephane at delcroix.org>
- *
- * Copyright (c) 2005-2009 Novell, Inc.
- *
- * This is free software. See COPYING for details.
- */
-using System;
-using System.Runtime.InteropServices;
-
-namespace GPhoto2
-{
-
- public enum Pin
- {
- RTS,
- DTR,
- CTS,
- DSR,
- CD,
- RING
- }
-
- public enum Level
- {
- Low = 0,
- High = 1
- }
-
- [StructLayout(LayoutKind.Sequential)]
- internal unsafe struct PortPrivateLibrary
- {
- }
-
- [StructLayout(LayoutKind.Sequential)]
- internal unsafe struct PortPrivateCore
- {
- }
-
- [StructLayout(LayoutKind.Sequential)]
- public unsafe struct PortSettingsSerial
- {
- [MarshalAs(UnmanagedType.ByValTStr, SizeConst=128)] public char[] port;
- public int speed;
- public int bits;
- public PortSerialParity parity;
- public int stopbits;
- }
-
- [StructLayout(LayoutKind.Sequential)]
- public unsafe struct PortSettingsUSB
- {
- public int inep, outep, intep;
- public int config;
- public int pinterface;
- public int altsetting;
- }
-
- [StructLayout(LayoutKind.Explicit)]
- public unsafe struct PortSettings
- {
- [FieldOffset(0)] public PortSettingsSerial serial;
- [FieldOffset(0)] public PortSettingsUSB usb;
- }
-
- public class Port : GPObject
- {
- [DllImport ("libgphoto2_port.so")]
- internal static extern ErrorCode gp_port_new (out IntPtr port);
- [DllImport ("libgphoto2_port.so")]
- internal static extern ErrorCode gp_port_free (HandleRef port);
-
- public Port() : base (gp_port_free)
- {
- IntPtr native;
- Error.CheckError (gp_port_new (out native));
-
- this.handle = new HandleRef (this, native);
- }
-
- [DllImport ("libgphoto2_port.so")]
- internal static extern ErrorCode gp_port_set_info (HandleRef port, ref PortInfo info);
-
- public void SetInfo (PortInfo info)
- {
- Error.CheckError (gp_port_set_info (this.Handle, ref info));
- }
-
- [DllImport ("libgphoto2_port.so")]
- internal static extern ErrorCode gp_port_get_info (HandleRef port, out PortInfo info);
-
- public PortInfo GetInfo ()
- {
- PortInfo info = new PortInfo ();
-
- Error.CheckError (gp_port_get_info (this.Handle, out info));
-
- return info;
- }
-
- [DllImport ("libgphoto2_port.so")]
- internal static extern ErrorCode gp_port_open (HandleRef port);
-
- public void Open ()
- {
- Error.CheckError (gp_port_open (this.Handle));
- }
-
- [DllImport ("libgphoto2_port.so")]
- internal static extern ErrorCode gp_port_close (HandleRef port);
-
- public void Close ()
- {
- Error.CheckError (gp_port_close (this.Handle));
- }
-
- [DllImport ("libgphoto2_port.so")]
- internal static extern ErrorCode gp_port_read (HandleRef port, [MarshalAs(UnmanagedType.LPTStr)] byte[] data, int size);
-
- public byte[] Read (int size)
- {
- byte[] data = new byte[size];
-
- Error.CheckError (gp_port_read (this.Handle, data, size));
-
- return data;
- }
-
- [DllImport ("libgphoto2_port.so")]
- internal static extern ErrorCode gp_port_write (HandleRef port, [MarshalAs(UnmanagedType.LPTStr)] byte[] data, int size);
-
- public void Write (byte[] data)
- {
- Error.CheckError (gp_port_write (this.Handle, data, data.Length));
- }
-
-
- [DllImport ("libgphoto2_port.so")]
- internal static extern ErrorCode gp_port_set_settings (HandleRef port, PortSettings settings);
-
- public void SetSettings (PortSettings settings)
- {
- Error.CheckError (gp_port_set_settings (this.Handle, settings));
- }
-
- [DllImport ("libgphoto2_port.so")]
- internal static extern ErrorCode gp_port_get_settings (HandleRef port, out PortSettings settings);
-
- public PortSettings GetSettings ()
- {
- PortSettings settings;
-
- Error.CheckError (gp_port_get_settings (this.Handle, out settings));
-
- return settings;
- }
-
- [DllImport ("libgphoto2_port.so")]
- internal static extern ErrorCode gp_port_get_timeout (HandleRef port, out int timeout);
-
- [DllImport ("libgphoto2_port.so")]
- internal static extern ErrorCode gp_port_set_timeout (HandleRef port, int timeout);
-
- public int Timeout
- {
- get {
- int timeout;
-
- Error.CheckError (gp_port_get_timeout (this.Handle, out timeout));
-
- return timeout;
- }
- set {
- Error.CheckError (gp_port_set_timeout (this.Handle, value));
- }
- }
-
- [DllImport ("libgphoto2_port.so")]
- internal static extern ErrorCode gp_port_get_pin (HandleRef port, Pin pin, out Level level);
-
- [DllImport ("libgphoto2_port.so")]
- internal static extern ErrorCode gp_port_set_pin (HandleRef port, Pin pin, Level level);
- }
-}
diff --git a/lib/libgphoto2-sharp/PortInfo.cs b/lib/libgphoto2-sharp/PortInfo.cs
deleted file mode 100644
index 228564b..0000000
--- a/lib/libgphoto2-sharp/PortInfo.cs
+++ /dev/null
@@ -1,47 +0,0 @@
-/*
- * PortInfo.cs
- *
- * Author(s):
- * Stephane Delcroix <stephane at delcroix.org>
- *
- * Copyright (c) 2005-2009 Novell, Inc.
- *
- * This is open source software. See COPYING for details.
- */
-
-using System;
-using System.Runtime.InteropServices;
-
-namespace GPhoto2
-{
- [StructLayout(LayoutKind.Sequential)]
- public unsafe struct PortInfo
- {
- PortType type;
- [MarshalAs(UnmanagedType.ByValTStr, SizeConst=64)] string name;
- [MarshalAs(UnmanagedType.ByValTStr, SizeConst=64)] string path;
-
- /* Private */
-#pragma warning disable 169
- [MarshalAs(UnmanagedType.ByValTStr, SizeConst=1024)] string library_filename;
-#pragma warning restore 169
-
-
- public PortType Type {
- get { return type; }
- }
-
- public string Name {
- get { return name; }
- }
-
- public string Path {
- get { return path; }
- }
-
- public override string ToString ()
- {
- return String.Format ("PortInfo: {0}\t{1} ({2})", Name, Path, Type);
- }
- }
-}
diff --git a/lib/libgphoto2-sharp/PortInfoList.cs b/lib/libgphoto2-sharp/PortInfoList.cs
deleted file mode 100644
index db19324..0000000
--- a/lib/libgphoto2-sharp/PortInfoList.cs
+++ /dev/null
@@ -1,75 +0,0 @@
-/*
- * PortInfoList.cs
- *
- * Author(s):
- * Stephane Delcroix <stephane at delcroix.org>
- * Ewen Cheslack-Postava <echeslack at gmail.com>
- * Larry Ewing <lewing at novell.com>
- *
- * Copyright (c) 2005-2009 Novell, Inc.
- *
- * This is open source software. See COPYING for details.
- */
-using System;
-using System.Runtime.InteropServices;
-
-namespace GPhoto2
-{
- public class PortInfoList : GPList<PortInfo>
- {
- [DllImport ("libgphoto2_port.so")]
- internal static extern ErrorCode gp_port_info_list_new (out IntPtr handle);
- [DllImport ("libgphoto2_port.so")]
- internal static extern ErrorCode gp_port_info_list_free (HandleRef handle);
-
- public PortInfoList () : base (gp_port_info_list_free)
- {
- IntPtr native;
- Error.CheckError (gp_port_info_list_new (out native));
-
- this.handle = new HandleRef (this, native);
- }
-
- [DllImport ("libgphoto2_port.so")]
- internal static extern ErrorCode gp_port_info_list_load (HandleRef handle);
-
- public void Load ()
- {
- Error.CheckError (gp_port_info_list_load (this.Handle));
- }
-
- [DllImport ("libgphoto2_port.so")]
- internal static extern ErrorCode gp_port_info_list_count (HandleRef handle);
-
- public override int Count {
- get { return Error.CheckError (gp_port_info_list_count (this.Handle)); }
- }
-
- [DllImport ("libgphoto2_port.so")]
- internal unsafe static extern ErrorCode gp_port_info_list_get_info (HandleRef handle, int n, out PortInfo info);
-
- public override PortInfo this [int n] {
- get {
- PortInfo info;
- Error.CheckError (gp_port_info_list_get_info (this.handle, n, out info));
- return info;
- }
- }
-
- [DllImport ("libgphoto2_port.so")]
- internal static extern ErrorCode gp_port_info_list_lookup_path (HandleRef handle, [MarshalAs(UnmanagedType.LPTStr)]string path);
-
- public PortInfo LookupPath (string path)
- {
- return this [Error.CheckError (gp_port_info_list_lookup_path(this.handle, path))];
- }
-
- [DllImport ("libgphoto2_port.so")]
- internal static extern ErrorCode gp_port_info_list_lookup_name (HandleRef handle, string name);
-
- public PortInfo LookupName (string name)
- {
- return this [Error.CheckError (gp_port_info_list_lookup_name (this.Handle, name))];
- }
- }
-}
diff --git a/lib/libgphoto2-sharp/PortSerialParity.cs b/lib/libgphoto2-sharp/PortSerialParity.cs
deleted file mode 100644
index e0d976a..0000000
--- a/lib/libgphoto2-sharp/PortSerialParity.cs
+++ /dev/null
@@ -1,22 +0,0 @@
-/*
- * PortSerialParity.cs
- *
- * Author(s):
- * Ewen Cheslack-Postava <echeslack at gmail.com>
- * Larry Ewing <lewing at novell.com>
- * Stephane Delcroix <stephane at delcroix.org>
- *
- * Copyright (c) 2005-2009 Novell, Inc.
- *
- * This is open source software. See COPYING for details.
- */
-
-namespace GPhoto2
-{
- public enum PortSerialParity
- {
- Off = 0,
- Even,
- Odd
- }
-}
diff --git a/lib/libgphoto2-sharp/PortType.cs b/lib/libgphoto2-sharp/PortType.cs
deleted file mode 100644
index 17fc163..0000000
--- a/lib/libgphoto2-sharp/PortType.cs
+++ /dev/null
@@ -1,27 +0,0 @@
-/*
- * xxx.cs
- *
- * Author(s):
- * Ewen Cheslack-Postava <echeslack at gmail.com>
- * Larry Ewing <lewing at novell.com>
- * Stephane Delcroix <stephane at delcroix.org>
- *
- * Copyright (c) 2005-2009 Novell, Inc.
- *
- * This is open source software. See COPYING for details.
- */
-
-using System;
-
-namespace GPhoto2
-{
- [Flags]
- public enum PortType
- {
- None = 0,
- Serial = 1 << 0,
- USB = 1 << 2,
- Disk = 1 << 3,
- PtpIP = 1 << 4,
- }
-}
diff --git a/lib/libgphoto2-sharp/glue/Makefile.am b/lib/libgphoto2-sharp/glue/Makefile.am
deleted file mode 100644
index 566eae6..0000000
--- a/lib/libgphoto2-sharp/glue/Makefile.am
+++ /dev/null
@@ -1,15 +0,0 @@
-INCLUDES = \
- $(LIBGPHOTO2_CFLAGS)
-
-gphoto2gluelibdir = $(libdir)/f-spot
-gphoto2gluelib_LTLIBRARIES = libgphoto2glue.la
-
-libgphoto2glue_files = \
- context.c
-
-libgphoto2glue_la_SOURCES = \
- $(libgphoto2glue_files)
-
-libgphoto2glue_la_LIBADD = \
- $(LIBGPHOTO2_LIBS)
-
diff --git a/lib/libgphoto2-sharp/glue/Makefile.in b/lib/libgphoto2-sharp/glue/Makefile.in
deleted file mode 100644
index dfc76cb..0000000
--- a/lib/libgphoto2-sharp/glue/Makefile.in
+++ /dev/null
@@ -1,628 +0,0 @@
-# Makefile.in generated by automake 1.11.1 from Makefile.am.
-# @configure_input@
-
-# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
-# 2003, 2004, 2005, 2006, 2007, 2008, 2009 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.
-
-# This program is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
-# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
-# PARTICULAR PURPOSE.
-
- at SET_MAKE@
-
-VPATH = @srcdir@
-pkgdatadir = $(datadir)/@PACKAGE@
-pkgincludedir = $(includedir)/@PACKAGE@
-pkglibdir = $(libdir)/@PACKAGE@
-pkglibexecdir = $(libexecdir)/@PACKAGE@
-am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
-install_sh_DATA = $(install_sh) -c -m 644
-install_sh_PROGRAM = $(install_sh) -c
-install_sh_SCRIPT = $(install_sh) -c
-INSTALL_HEADER = $(INSTALL_DATA)
-transform = $(program_transform_name)
-NORMAL_INSTALL = :
-PRE_INSTALL = :
-POST_INSTALL = :
-NORMAL_UNINSTALL = :
-PRE_UNINSTALL = :
-POST_UNINSTALL = :
-build_triplet = @build@
-host_triplet = @host@
-subdir = lib/libgphoto2-sharp/glue
-DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in
-ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
-am__aclocal_m4_deps = $(top_srcdir)/build/m4/shave/shave.m4 \
- $(top_srcdir)/build/m4/shamrock/expansions.m4 \
- $(top_srcdir)/build/m4/shamrock/mono.m4 \
- $(top_srcdir)/build/m4/shamrock/programs.m4 \
- $(top_srcdir)/acinclude.m4 $(top_srcdir)/configure.ac
-am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
- $(ACLOCAL_M4)
-mkinstalldirs = $(install_sh) -d
-CONFIG_HEADER = $(top_builddir)/config.h
-CONFIG_CLEAN_FILES =
-CONFIG_CLEAN_VPATH_FILES =
-am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`;
-am__vpath_adj = case $$p in \
- $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \
- *) f=$$p;; \
- esac;
-am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`;
-am__install_max = 40
-am__nobase_strip_setup = \
- srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'`
-am__nobase_strip = \
- for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||"
-am__nobase_list = $(am__nobase_strip_setup); \
- for p in $$list; do echo "$$p $$p"; done | \
- sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \
- $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \
- if (++n[$$2] == $(am__install_max)) \
- { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \
- END { for (dir in files) print dir, files[dir] }'
-am__base_list = \
- sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \
- sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g'
-am__installdirs = "$(DESTDIR)$(gphoto2gluelibdir)"
-LTLIBRARIES = $(gphoto2gluelib_LTLIBRARIES)
-am__DEPENDENCIES_1 =
-libgphoto2glue_la_DEPENDENCIES = $(am__DEPENDENCIES_1)
-am__objects_1 = context.lo
-am_libgphoto2glue_la_OBJECTS = $(am__objects_1)
-libgphoto2glue_la_OBJECTS = $(am_libgphoto2glue_la_OBJECTS)
-DEFAULT_INCLUDES = -I. at am__isrc@ -I$(top_builddir)
-depcomp = $(SHELL) $(top_srcdir)/depcomp
-am__depfiles_maybe = depfiles
-am__mv = mv -f
-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 $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \
- --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) \
- $(LDFLAGS) -o $@
-SOURCES = $(libgphoto2glue_la_SOURCES)
-DIST_SOURCES = $(libgphoto2glue_la_SOURCES)
-ETAGS = etags
-CTAGS = ctags
-DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
-ACLOCAL = @ACLOCAL@
-ACLOCAL_AMFLAGS = @ACLOCAL_AMFLAGS@
-ALL_LINGUAS = @ALL_LINGUAS@
-AMTAR = @AMTAR@
-AM_MAKEFLAGS = @AM_MAKEFLAGS@
-API_VERSION = @API_VERSION@
-AR = @AR@
-ASM_VERSION = @ASM_VERSION@
-AUTOCONF = @AUTOCONF@
-AUTOHEADER = @AUTOHEADER@
-AUTOMAKE = @AUTOMAKE@
-AWK = @AWK@
-CATALOGS = @CATALOGS@
-CATOBJEXT = @CATOBJEXT@
-CC = @CC@
-CCDEPMODE = @CCDEPMODE@
-CFLAGS = @CFLAGS@
-CPP = @CPP@
-CPPFLAGS = @CPPFLAGS@
-CSC_DEFINES = @CSC_DEFINES@
-CXX = @CXX@
-CXXCPP = @CXXCPP@
-CXXDEPMODE = @CXXDEPMODE@
-CXXFLAGS = @CXXFLAGS@
-CYGPATH_W = @CYGPATH_W@
-DATADIRNAME = @DATADIRNAME@
-DEFS = @DEFS@
-DEPDIR = @DEPDIR@
-DISPLAY_VERSION = @DISPLAY_VERSION@
-DISTCHECK_CONFIGURE_FLAGS = @DISTCHECK_CONFIGURE_FLAGS@
-DOC_USER_FORMATS = @DOC_USER_FORMATS@
-DSYMUTIL = @DSYMUTIL@
-DUMPBIN = @DUMPBIN@
-ECHO_C = @ECHO_C@
-ECHO_N = @ECHO_N@
-ECHO_T = @ECHO_T@
-EGREP = @EGREP@
-EXEEXT = @EXEEXT@
-EXIF_CFLAGS = @EXIF_CFLAGS@
-EXIF_LIBS = @EXIF_LIBS@
-EXIF_SOVERSION = @EXIF_SOVERSION@
-F77 = @F77@
-FC = @FC@
-FGREP = @FGREP@
-F_CFLAGS = @F_CFLAGS@
-F_LIBS = @F_LIBS@
-GAPI2CODEGEN = @GAPI2CODEGEN@
-GAPI2FIXUP = @GAPI2FIXUP@
-GAPI2PARSER = @GAPI2PARSER@
-GCONFTOOL = @GCONFTOOL@
-GCONF_SCHEMA_CONFIG_SOURCE = @GCONF_SCHEMA_CONFIG_SOURCE@
-GCONF_SCHEMA_FILE_DIR = @GCONF_SCHEMA_FILE_DIR@
-GCONF_SHARP_CFLAGS = @GCONF_SHARP_CFLAGS@
-GCONF_SHARP_LIBS = @GCONF_SHARP_LIBS@
-GETTEXT_PACKAGE = @GETTEXT_PACKAGE@
-GIO_CFLAGS = @GIO_CFLAGS@
-GIO_LIBS = @GIO_LIBS@
-GLIBSHARP_CFLAGS = @GLIBSHARP_CFLAGS@
-GLIBSHARP_LIBS = @GLIBSHARP_LIBS@
-GLIB_CFLAGS = @GLIB_CFLAGS@
-GLIB_GENMARSHAL = @GLIB_GENMARSHAL@
-GLIB_LIBS = @GLIB_LIBS@
-GLIB_MKENUMS = @GLIB_MKENUMS@
-GMOFILES = @GMOFILES@
-GMSGFMT = @GMSGFMT@
-GNOME_ICON_THEME_PREFIX = @GNOME_ICON_THEME_PREFIX@
-GNOME_SCREENSAVER_SAVERDIR = @GNOME_SCREENSAVER_SAVERDIR@
-GNOME_SCREENSAVER_THEMESDIR = @GNOME_SCREENSAVER_THEMESDIR@
-GNOME_SHARP_CFLAGS = @GNOME_SHARP_CFLAGS@
-GNOME_SHARP_LIBS = @GNOME_SHARP_LIBS@
-GOBJECT_QUERY = @GOBJECT_QUERY@
-GREP = @GREP@
-HELP_DIR = @HELP_DIR@
-ICONS_DIRECTORY = @ICONS_DIRECTORY@
-INSTALL = @INSTALL@
-INSTALL_DATA = @INSTALL_DATA@
-INSTALL_PROGRAM = @INSTALL_PROGRAM@
-INSTALL_SCRIPT = @INSTALL_SCRIPT@
-INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
-INSTOBJEXT = @INSTOBJEXT@
-INTLLIBS = @INTLLIBS@
-INTLTOOL_EXTRACT = @INTLTOOL_EXTRACT@
-INTLTOOL_MERGE = @INTLTOOL_MERGE@
-INTLTOOL_PERL = @INTLTOOL_PERL@
-INTLTOOL_UPDATE = @INTLTOOL_UPDATE@
-LCMS_CFLAGS = @LCMS_CFLAGS@
-LCMS_LIBS = @LCMS_LIBS@
-LD = @LD@
-LDFLAGS = @LDFLAGS@
-LIBEXIF_VERSION_CHECK_CFLAGS = @LIBEXIF_VERSION_CHECK_CFLAGS@
-LIBEXIF_VERSION_CHECK_LIBS = @LIBEXIF_VERSION_CHECK_LIBS@
-LIBGPHOTO2_CFLAGS = @LIBGPHOTO2_CFLAGS@
-LIBGPHOTO2_LIBS = @LIBGPHOTO2_LIBS@
-LIBJPEG = @LIBJPEG@
-LIBOBJS = @LIBOBJS@
-LIBS = @LIBS@
-LIBTOOL = @LIBTOOL@
-LIPO = @LIPO@
-LN_S = @LN_S@
-LTLIBOBJS = @LTLIBOBJS@
-MAINT = @MAINT@
-MAKEFLAGS = @MAKEFLAGS@
-MAKEINFO = @MAKEINFO@
-MCS = @MCS@
-MKDIR_P = @MKDIR_P@
-MKINSTALLDIRS = @MKINSTALLDIRS@
-MONO = @MONO@
-MONO_MODULE_CFLAGS = @MONO_MODULE_CFLAGS@
-MONO_MODULE_LIBS = @MONO_MODULE_LIBS@
-MSGFMT = @MSGFMT@
-MSGFMT_OPTS = @MSGFMT_OPTS@
-MSGMERGE = @MSGMERGE@
-NDESK_DBUS_CFLAGS = @NDESK_DBUS_CFLAGS@
-NDESK_DBUS_LIBS = @NDESK_DBUS_LIBS@
-NM = @NM@
-NMEDIT = @NMEDIT@
-NUNIT_CFLAGS = @NUNIT_CFLAGS@
-NUNIT_DEFINES = @NUNIT_DEFINES@
-NUNIT_LIBS = @NUNIT_LIBS@
-OBJC = @OBJC@
-OBJDUMP = @OBJDUMP@
-OBJEXT = @OBJEXT@
-OMF_DIR = @OMF_DIR@
-OTOOL = @OTOOL@
-OTOOL64 = @OTOOL64@
-PACKAGE = @PACKAGE@
-PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
-PACKAGE_NAME = @PACKAGE_NAME@
-PACKAGE_STRING = @PACKAGE_STRING@
-PACKAGE_TARNAME = @PACKAGE_TARNAME@
-PACKAGE_URL = @PACKAGE_URL@
-PACKAGE_VERSION = @PACKAGE_VERSION@
-PATH_SEPARATOR = @PATH_SEPARATOR@
-PKG_CONFIG = @PKG_CONFIG@
-POFILES = @POFILES@
-POSUB = @POSUB@
-PO_IN_DATADIR_FALSE = @PO_IN_DATADIR_FALSE@
-PO_IN_DATADIR_TRUE = @PO_IN_DATADIR_TRUE@
-Q = @Q@
-RANLIB = @RANLIB@
-SED = @SED@
-SET_MAKE = @SET_MAKE@
-SHELL = @SHELL@
-STRIP = @STRIP@
-TURTLEDIR = @TURTLEDIR@
-UNIQUE_CFLAGS = @UNIQUE_CFLAGS@
-UNIQUE_LIBS = @UNIQUE_LIBS@
-USE_NLS = @USE_NLS@
-V = @V@
-VERSION = @VERSION@
-WARN_CFLAGS = @WARN_CFLAGS@
-XGETTEXT = @XGETTEXT@
-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_DUMPBIN = @ac_ct_DUMPBIN@
-am__include = @am__include@
-am__leading_dot = @am__leading_dot@
-am__quote = @am__quote@
-am__tar = @am__tar@
-am__untar = @am__untar@
-bindir = @bindir@
-build = @build@
-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@
-expanded_bindir = @expanded_bindir@
-expanded_datadir = @expanded_datadir@
-expanded_libdir = @expanded_libdir@
-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@
-lt_ECHO = @lt_ECHO@
-mandir = @mandir@
-mkdir_p = @mkdir_p@
-oldincludedir = @oldincludedir@
-pdfdir = @pdfdir@
-prefix = @prefix@
-program_transform_name = @program_transform_name@
-psdir = @psdir@
-sbindir = @sbindir@
-sharedstatedir = @sharedstatedir@
-shavedir = @shavedir@
-srcdir = @srcdir@
-sysconfdir = @sysconfdir@
-target_alias = @target_alias@
-top_build_prefix = @top_build_prefix@
-top_builddir = @top_builddir@
-top_srcdir = @top_srcdir@
-INCLUDES = \
- $(LIBGPHOTO2_CFLAGS)
-
-gphoto2gluelibdir = $(libdir)/f-spot
-gphoto2gluelib_LTLIBRARIES = libgphoto2glue.la
-libgphoto2glue_files = \
- context.c
-
-libgphoto2glue_la_SOURCES = \
- $(libgphoto2glue_files)
-
-libgphoto2glue_la_LIBADD = \
- $(LIBGPHOTO2_LIBS)
-
-all: all-am
-
-.SUFFIXES:
-.SUFFIXES: .c .lo .o .obj
-$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(am__configure_deps)
- @for dep in $?; do \
- case '$(am__configure_deps)' in \
- *$$dep*) \
- ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \
- && { if test -f $@; then exit 0; else break; fi; }; \
- exit 1;; \
- esac; \
- done; \
- echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign lib/libgphoto2-sharp/glue/Makefile'; \
- $(am__cd) $(top_srcdir) && \
- $(AUTOMAKE) --foreign lib/libgphoto2-sharp/glue/Makefile
-.PRECIOUS: Makefile
-Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
- @case '$?' in \
- *config.status*) \
- cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \
- *) \
- echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \
- cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \
- esac;
-
-$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
- cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
-
-$(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps)
- cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
-$(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps)
- cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
-$(am__aclocal_m4_deps):
-install-gphoto2gluelibLTLIBRARIES: $(gphoto2gluelib_LTLIBRARIES)
- @$(NORMAL_INSTALL)
- test -z "$(gphoto2gluelibdir)" || $(MKDIR_P) "$(DESTDIR)$(gphoto2gluelibdir)"
- @list='$(gphoto2gluelib_LTLIBRARIES)'; test -n "$(gphoto2gluelibdir)" || list=; \
- list2=; for p in $$list; do \
- if test -f $$p; then \
- list2="$$list2 $$p"; \
- else :; fi; \
- done; \
- test -z "$$list2" || { \
- echo " $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL) $(INSTALL_STRIP_FLAG) $$list2 '$(DESTDIR)$(gphoto2gluelibdir)'"; \
- $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL) $(INSTALL_STRIP_FLAG) $$list2 "$(DESTDIR)$(gphoto2gluelibdir)"; \
- }
-
-uninstall-gphoto2gluelibLTLIBRARIES:
- @$(NORMAL_UNINSTALL)
- @list='$(gphoto2gluelib_LTLIBRARIES)'; test -n "$(gphoto2gluelibdir)" || list=; \
- for p in $$list; do \
- $(am__strip_dir) \
- echo " $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=uninstall rm -f '$(DESTDIR)$(gphoto2gluelibdir)/$$f'"; \
- $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=uninstall rm -f "$(DESTDIR)$(gphoto2gluelibdir)/$$f"; \
- done
-
-clean-gphoto2gluelibLTLIBRARIES:
- -test -z "$(gphoto2gluelib_LTLIBRARIES)" || rm -f $(gphoto2gluelib_LTLIBRARIES)
- @list='$(gphoto2gluelib_LTLIBRARIES)'; for p in $$list; do \
- dir="`echo $$p | sed -e 's|/[^/]*$$||'`"; \
- test "$$dir" != "$$p" || dir=.; \
- echo "rm -f \"$${dir}/so_locations\""; \
- rm -f "$${dir}/so_locations"; \
- done
-libgphoto2glue.la: $(libgphoto2glue_la_OBJECTS) $(libgphoto2glue_la_DEPENDENCIES)
- $(LINK) -rpath $(gphoto2gluelibdir) $(libgphoto2glue_la_OBJECTS) $(libgphoto2glue_la_LIBADD) $(LIBS)
-
-mostlyclean-compile:
- -rm -f *.$(OBJEXT)
-
-distclean-compile:
- -rm -f *.tab.c
-
- at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/context.Plo at am__quote@
-
-.c.o:
- at am__fastdepCC_TRUE@ $(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
- at am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
- at AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
- at AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
- at am__fastdepCC_FALSE@ $(COMPILE) -c $<
-
-.c.obj:
- at am__fastdepCC_TRUE@ $(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'`
- at am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
- at AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
- at AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
- at am__fastdepCC_FALSE@ $(COMPILE) -c `$(CYGPATH_W) '$<'`
-
-.c.lo:
- at am__fastdepCC_TRUE@ $(LTCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
- at am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo
- at AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@
- at AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
- at am__fastdepCC_FALSE@ $(LTCOMPILE) -c -o $@ $<
-
-mostlyclean-libtool:
- -rm -f *.lo
-
-clean-libtool:
- -rm -rf .libs _libs
-
-ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES)
- list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
- unique=`for i in $$list; do \
- if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
- done | \
- $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
- END { if (nonempty) { for (i in files) print i; }; }'`; \
- mkid -fID $$unique
-tags: TAGS
-
-TAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \
- $(TAGS_FILES) $(LISP)
- set x; \
- here=`pwd`; \
- list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
- unique=`for i in $$list; do \
- if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
- done | \
- $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
- END { if (nonempty) { for (i in files) print i; }; }'`; \
- shift; \
- if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \
- test -n "$$unique" || unique=$$empty_fix; \
- if test $$# -gt 0; then \
- $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
- "$$@" $$unique; \
- else \
- $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
- $$unique; \
- fi; \
- fi
-ctags: CTAGS
-CTAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \
- $(TAGS_FILES) $(LISP)
- list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
- unique=`for i in $$list; do \
- if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
- done | \
- $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
- END { if (nonempty) { for (i in files) print i; }; }'`; \
- test -z "$(CTAGS_ARGS)$$unique" \
- || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \
- $$unique
-
-GTAGS:
- here=`$(am__cd) $(top_builddir) && pwd` \
- && $(am__cd) $(top_srcdir) \
- && gtags -i $(GTAGS_ARGS) "$$here"
-
-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)'; \
- 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; \
- if test -d $$d/$$file; then \
- dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \
- if test -d "$(distdir)/$$file"; then \
- find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
- fi; \
- if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
- cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \
- find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
- fi; \
- cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \
- else \
- test -f "$(distdir)/$$file" \
- || cp -p $$d/$$file "$(distdir)/$$file" \
- || exit 1; \
- fi; \
- done
-check-am: all-am
-check: check-am
-all-am: Makefile $(LTLIBRARIES)
-installdirs:
- for dir in "$(DESTDIR)$(gphoto2gluelibdir)"; do \
- test -z "$$dir" || $(MKDIR_P) "$$dir"; \
- done
-install: install-am
-install-exec: install-exec-am
-install-data: install-data-am
-uninstall: uninstall-am
-
-install-am: all-am
- @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
-
-installcheck: installcheck-am
-install-strip:
- $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
- install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
- `test -z '$(STRIP)' || \
- echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install
-mostlyclean-generic:
-
-clean-generic:
-
-distclean-generic:
- -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
- -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES)
-
-maintainer-clean-generic:
- @echo "This command is intended for maintainers to use"
- @echo "it deletes files that may require special tools to rebuild."
-clean: clean-am
-
-clean-am: clean-generic clean-gphoto2gluelibLTLIBRARIES clean-libtool \
- mostlyclean-am
-
-distclean: distclean-am
- -rm -rf ./$(DEPDIR)
- -rm -f Makefile
-distclean-am: clean-am distclean-compile distclean-generic \
- distclean-tags
-
-dvi: dvi-am
-
-dvi-am:
-
-html: html-am
-
-html-am:
-
-info: info-am
-
-info-am:
-
-install-data-am: install-gphoto2gluelibLTLIBRARIES
-
-install-dvi: install-dvi-am
-
-install-dvi-am:
-
-install-exec-am:
-
-install-html: install-html-am
-
-install-html-am:
-
-install-info: install-info-am
-
-install-info-am:
-
-install-man:
-
-install-pdf: install-pdf-am
-
-install-pdf-am:
-
-install-ps: install-ps-am
-
-install-ps-am:
-
-installcheck-am:
-
-maintainer-clean: maintainer-clean-am
- -rm -rf ./$(DEPDIR)
- -rm -f Makefile
-maintainer-clean-am: distclean-am maintainer-clean-generic
-
-mostlyclean: mostlyclean-am
-
-mostlyclean-am: mostlyclean-compile mostlyclean-generic \
- mostlyclean-libtool
-
-pdf: pdf-am
-
-pdf-am:
-
-ps: ps-am
-
-ps-am:
-
-uninstall-am: uninstall-gphoto2gluelibLTLIBRARIES
-
-.MAKE: install-am install-strip
-
-.PHONY: CTAGS GTAGS all all-am check check-am clean clean-generic \
- clean-gphoto2gluelibLTLIBRARIES clean-libtool 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-dvi \
- install-dvi-am install-exec install-exec-am \
- install-gphoto2gluelibLTLIBRARIES 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-gphoto2gluelibLTLIBRARIES
-
-
-# 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.
-.NOEXPORT:
diff --git a/lib/libgphoto2-sharp/glue/context.c b/lib/libgphoto2-sharp/glue/context.c
deleted file mode 100644
index 2d85b20..0000000
--- a/lib/libgphoto2-sharp/glue/context.c
+++ /dev/null
@@ -1,151 +0,0 @@
-/*
- * context.c
- *
- * Author(s):
- * Stephane Delcroix <stephan @delcroix.org>
- *
- * Copyright (c) 2009 Novell, Inc.
- *
- * This is open source software. See COPYING for details.
- */
-
-#include <stdlib.h>
-#include <gphoto2-context.h>
-#include <stdarg.h>
-
-struct _GPGlueContext;
-typedef struct _GPGlueContext GPGlueContext;
-
-typedef unsigned int (*GPGlueContextProgressStartFunc) (GPGlueContext *gluecontext, float target, const char *message, void *data);
-typedef void (*GPGlueContextProgressUpdateFunc) (GPGlueContext *gluecontext, unsigned int id, float current, void *data);
-typedef void (*GPGlueContextProgressStopFunc) (GPGlueContext *gluecontext, unsigned int id, void *data);
-
-typedef void (*GPGlueContextErrorFunc) (GPGlueContext *gluecontext, const char *message, void *data);
-typedef void (*GPGlueContextStatusFunc) (GPGlueContext *gluecontext, const char *message, void *data);
-typedef void (*GPGlueContextMessageFunc) (GPGlueContext *gluecontext, const char *message, void *data);
-
-struct _GPGlueContext {
- GPContext *context;
- GPGlueContextProgressStartFunc start_func;
- GPGlueContextProgressUpdateFunc update_func;
- GPGlueContextProgressStopFunc stop_func;
- void *progress_data;
- GPGlueContextErrorFunc error_func;
- void *error_data;
- GPGlueContextStatusFunc status_func;
- void *status_data;
- GPGlueContextMessageFunc message_func;
- void *message_data;
-};
-
-GPGlueContext *
-gp_glue_context_new (GPContext *context)
-{
- GPGlueContext *gluecontext = malloc (sizeof (GPGlueContext));
- gluecontext->context = context;
- return gluecontext;
-}
-
-void
-gp_glue_context_free (GPGlueContext *gluecontext)
-{
- free (gluecontext);
-}
-
-unsigned int
-gp_glue_start_func_wrapper (GPContext *context, float target, const char *format, va_list args, void *data)
-{
- GPGlueContext *gluecontext = (GPGlueContext *)data;
- unsigned int ret;
- char buf[256];
- vsnprintf (buf, 256, format, args);
- ret = gluecontext->start_func (gluecontext, target, buf, gluecontext->progress_data);
-
- return ret;
-}
-
-void
-gp_glue_update_func_wrapper (GPContext *context, unsigned int id, float current, void *data)
-{
- GPGlueContext *gluecontext = (GPGlueContext *)data;
- gluecontext->update_func (gluecontext, id, current, gluecontext->progress_data);
-}
-
-void
-gp_glue_stop_func_wrapper (GPContext *context, unsigned int id, void *data)
-{
- GPGlueContext *gluecontext = (GPGlueContext *)data;
- gluecontext->stop_func (gluecontext, id, gluecontext->progress_data);
-}
-
-void
-gp_glue_context_set_progress_funcs (GPGlueContext *gluecontext, GPGlueContextProgressStartFunc start_func, GPGlueContextProgressUpdateFunc update_func, GPGlueContextProgressStopFunc stop_func, void *data)
-{
- gluecontext->start_func = start_func;
- gluecontext->update_func = update_func;
- gluecontext->stop_func = stop_func;
- gluecontext->progress_data = data;
-
- gp_context_set_progress_funcs (gluecontext->context,
- gp_glue_start_func_wrapper,
- gp_glue_update_func_wrapper,
- gp_glue_stop_func_wrapper,
- gluecontext);
-}
-
-void
-gp_glue_error_func_wrapper (GPContext *context, const char *format, va_list args, void *data)
-{
- GPGlueContext *gluecontext = (GPGlueContext *)data;
- char buf[256];
- vsnprintf (buf, 256, format, args);
- gluecontext->error_func (gluecontext, buf, gluecontext->error_data);
-
-}
-
-void
-gp_glue_context_set_error_func (GPGlueContext *gluecontext, GPGlueContextErrorFunc error_func, void *data)
-{
- gluecontext->error_func = error_func;
- gluecontext->error_data = data;
-
- gp_context_set_error_func (gluecontext->context, gp_glue_error_func_wrapper, gluecontext);
-}
-
-void
-gp_glue_status_func_wrapper (GPContext *context, const char *format, va_list args, void *data)
-{
- GPGlueContext *gluecontext = (GPGlueContext *)data;
- char buf[256];
- vsnprintf (buf, 256, format, args);
- gluecontext->status_func (gluecontext, buf, gluecontext->status_data);
-
-}
-
-void
-gp_glue_context_set_status_func (GPGlueContext *gluecontext, GPGlueContextStatusFunc status_func, void *data)
-{
- gluecontext->status_func = status_func;
- gluecontext->status_data = data;
-
- gp_context_set_status_func (gluecontext->context, gp_glue_status_func_wrapper, gluecontext);
-}
-
-void
-gp_glue_message_func_wrapper (GPContext *context, const char *format, va_list args, void *data)
-{
- GPGlueContext *gluecontext = (GPGlueContext *)data;
- char buf[256];
- vsnprintf (buf, 256, format, args);
- gluecontext->message_func (gluecontext, buf, gluecontext->message_data);
-
-}
-
-void
-gp_glue_context_set_message_func (GPGlueContext *gluecontext, GPGlueContextMessageFunc message_func, void *data)
-{
- gluecontext->message_func = message_func;
- gluecontext->message_data = data;
-
- gp_context_set_message_func (gluecontext->context, gp_glue_message_func_wrapper, gluecontext);
-}
diff --git a/lib/libgphoto2-sharp/libgphoto2-sharp.dll.config.in b/lib/libgphoto2-sharp/libgphoto2-sharp.dll.config.in
deleted file mode 100644
index de0c1b0..0000000
--- a/lib/libgphoto2-sharp/libgphoto2-sharp.dll.config.in
+++ /dev/null
@@ -1,5 +0,0 @@
-<configuration>
- <dllmap dll="libgphoto2.so" target="libgphoto2.so.2"/>
- <dllmap dll="libgphoto2glue.so" target="@expanded_libdir@/f-spot/libgphoto2glue.so.0"/>
- <dllmap dll="libgphoto2_port.so" target="libgphoto2_port.so.0"/>
-</configuration>
diff --git a/lib/libjpegtran/Makefile.in b/lib/libjpegtran/Makefile.in
index 7e543cb..bcce85c 100644
--- a/lib/libjpegtran/Makefile.in
+++ b/lib/libjpegtran/Makefile.in
@@ -39,8 +39,14 @@ DIST_COMMON = README $(srcdir)/Makefile.am $(srcdir)/Makefile.in
ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
am__aclocal_m4_deps = $(top_srcdir)/build/m4/shave/shave.m4 \
$(top_srcdir)/build/m4/shamrock/expansions.m4 \
+ $(top_srcdir)/build/m4/shamrock/gnome-doc.m4 \
$(top_srcdir)/build/m4/shamrock/mono.m4 \
+ $(top_srcdir)/build/m4/shamrock/nunit.m4 \
$(top_srcdir)/build/m4/shamrock/programs.m4 \
+ $(top_srcdir)/build/m4/f-spot/flickrnet.m4 \
+ $(top_srcdir)/build/m4/f-spot/gnome-keyring-sharp.m4 \
+ $(top_srcdir)/build/m4/f-spot/gtk-sharp.m4 \
+ $(top_srcdir)/build/m4/f-spot/mono-addins.m4 \
$(top_srcdir)/acinclude.m4 $(top_srcdir)/configure.ac
am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
$(ACLOCAL_M4)
@@ -137,6 +143,8 @@ EXIF_SOVERSION = @EXIF_SOVERSION@
F77 = @F77@
FC = @FC@
FGREP = @FGREP@
+FLICKRNET_CFLAGS = @FLICKRNET_CFLAGS@
+FLICKRNET_LIBS = @FLICKRNET_LIBS@
F_CFLAGS = @F_CFLAGS@
F_LIBS = @F_LIBS@
GAPI2CODEGEN = @GAPI2CODEGEN@
@@ -150,6 +158,8 @@ GCONF_SHARP_LIBS = @GCONF_SHARP_LIBS@
GETTEXT_PACKAGE = @GETTEXT_PACKAGE@
GIO_CFLAGS = @GIO_CFLAGS@
GIO_LIBS = @GIO_LIBS@
+GLIBSHARP_2_12_7_CFLAGS = @GLIBSHARP_2_12_7_CFLAGS@
+GLIBSHARP_2_12_7_LIBS = @GLIBSHARP_2_12_7_LIBS@
GLIBSHARP_CFLAGS = @GLIBSHARP_CFLAGS@
GLIBSHARP_LIBS = @GLIBSHARP_LIBS@
GLIB_CFLAGS = @GLIB_CFLAGS@
@@ -165,6 +175,10 @@ GNOME_SHARP_CFLAGS = @GNOME_SHARP_CFLAGS@
GNOME_SHARP_LIBS = @GNOME_SHARP_LIBS@
GOBJECT_QUERY = @GOBJECT_QUERY@
GREP = @GREP@
+GTKSHARP_A11Y_CFLAGS = @GTKSHARP_A11Y_CFLAGS@
+GTKSHARP_A11Y_LIBS = @GTKSHARP_A11Y_LIBS@
+GTKSHARP_CFLAGS = @GTKSHARP_CFLAGS@
+GTKSHARP_LIBS = @GTKSHARP_LIBS@
HELP_DIR = @HELP_DIR@
ICONS_DIRECTORY = @ICONS_DIRECTORY@
INSTALL = @INSTALL@
@@ -178,14 +192,14 @@ INTLTOOL_EXTRACT = @INTLTOOL_EXTRACT@
INTLTOOL_MERGE = @INTLTOOL_MERGE@
INTLTOOL_PERL = @INTLTOOL_PERL@
INTLTOOL_UPDATE = @INTLTOOL_UPDATE@
+KEYRINGSHARP_CFLAGS = @KEYRINGSHARP_CFLAGS@
+KEYRINGSHARP_LIBS = @KEYRINGSHARP_LIBS@
LCMS_CFLAGS = @LCMS_CFLAGS@
LCMS_LIBS = @LCMS_LIBS@
LD = @LD@
LDFLAGS = @LDFLAGS@
LIBEXIF_VERSION_CHECK_CFLAGS = @LIBEXIF_VERSION_CHECK_CFLAGS@
LIBEXIF_VERSION_CHECK_LIBS = @LIBEXIF_VERSION_CHECK_LIBS@
-LIBGPHOTO2_CFLAGS = @LIBGPHOTO2_CFLAGS@
-LIBGPHOTO2_LIBS = @LIBGPHOTO2_LIBS@
LIBJPEG = @LIBJPEG@
LIBOBJS = @LIBOBJS@
LIBS = @LIBS@
@@ -200,6 +214,12 @@ MCS = @MCS@
MKDIR_P = @MKDIR_P@
MKINSTALLDIRS = @MKINSTALLDIRS@
MONO = @MONO@
+MONO_ADDINS_CFLAGS = @MONO_ADDINS_CFLAGS@
+MONO_ADDINS_GUI_CFLAGS = @MONO_ADDINS_GUI_CFLAGS@
+MONO_ADDINS_GUI_LIBS = @MONO_ADDINS_GUI_LIBS@
+MONO_ADDINS_LIBS = @MONO_ADDINS_LIBS@
+MONO_ADDINS_SETUP_CFLAGS = @MONO_ADDINS_SETUP_CFLAGS@
+MONO_ADDINS_SETUP_LIBS = @MONO_ADDINS_SETUP_LIBS@
MONO_MODULE_CFLAGS = @MONO_MODULE_CFLAGS@
MONO_MODULE_LIBS = @MONO_MODULE_LIBS@
MSGFMT = @MSGFMT@
@@ -210,7 +230,6 @@ NDESK_DBUS_LIBS = @NDESK_DBUS_LIBS@
NM = @NM@
NMEDIT = @NMEDIT@
NUNIT_CFLAGS = @NUNIT_CFLAGS@
-NUNIT_DEFINES = @NUNIT_DEFINES@
NUNIT_LIBS = @NUNIT_LIBS@
OBJC = @OBJC@
OBJDUMP = @OBJDUMP@
diff --git a/lib/semweb/LiteralFilters.cs b/lib/semweb/LiteralFilters.cs
index fb078cb..284ee21 100644
--- a/lib/semweb/LiteralFilters.cs
+++ b/lib/semweb/LiteralFilters.cs
@@ -125,7 +125,7 @@ namespace SemWeb.Filters {
Decimal i = Decimal.Parse(v);
int c = i.CompareTo(Number);
return CompareFilter(c, Type);
- } catch (Exception e) {
+ } catch (Exception) {
return false;
}
}
@@ -146,7 +146,7 @@ namespace SemWeb.Filters {
DateTime i = DateTime.Parse(v);
int c = i.CompareTo(Value);
return CompareFilter(c, Type);
- } catch (Exception e) {
+ } catch (Exception) {
return false;
}
}
@@ -167,7 +167,7 @@ namespace SemWeb.Filters {
TimeSpan i = TimeSpan.Parse(v);
int c = i.CompareTo(Value);
return CompareFilter(c, Type);
- } catch (Exception e) {
+ } catch (Exception) {
return false;
}
}
diff --git a/lib/semweb/Makefile.am b/lib/semweb/Makefile.am
index 80c98c3..81bb777 100644
--- a/lib/semweb/Makefile.am
+++ b/lib/semweb/Makefile.am
@@ -1,51 +1,33 @@
-include $(top_srcdir)/Makefile.include
-
-ASSEMBLY_NAME = SemWeb
-
-ASSEMBLY_SOURCES = \
- $(srcdir)/AssemblyInfo.cs \
- $(srcdir)/NamespaceManager.cs \
- $(srcdir)/Util.cs \
- $(srcdir)/UriMap.cs \
- $(srcdir)/Resource.cs \
- $(srcdir)/Statement.cs \
- $(srcdir)/Store.cs \
- $(srcdir)/MemoryStore.cs \
- $(srcdir)/SQLStore.cs \
- $(srcdir)/RdfReader.cs \
- $(srcdir)/RdfXmlReader.cs \
- $(srcdir)/N3Reader.cs \
- $(srcdir)/RdfWriter.cs \
- $(srcdir)/RdfXmlWriter.cs \
- $(srcdir)/N3Writer.cs \
- $(srcdir)/RSquary.cs \
- $(srcdir)/LiteralFilters.cs \
- $(srcdir)/Query.cs \
- $(srcdir)/Inference.cs \
- $(srcdir)/RDFS.cs \
- $(srcdir)/Algos.cs \
- $(srcdir)/Remote.cs \
- $(srcdir)/XPathSemWebNavigator.cs
-
-REFS = \
- -r:System.Data \
- -r:System.Web
-
-PKGS =
-
-ASSEMBLY = $(ASSEMBLY_NAME).dll
-
-all: $(ASSEMBLY)
-
-$(ASSEMBLY): $(ASSEMBLY_SOURCES)
- $(CSC_LIB) -out:$@ $(PKGS) $(REFS) $(ASSEMBLY_SOURCES)
-
-assemblydir = $(pkglibdir)
-assembly_DATA = $(ASSEMBLY)
-
-EXTRA_DIST = \
- $(ASSEMBLY_SOURCES)
-
-CLEANFILES = \
- $(ASSEMBLY) \
- $(ASSEMBLY).mdb
+ASSEMBLY = SemWeb
+TARGET = library
+LINK = $(REF_SEMWEB)
+
+SOURCES = \
+ NamespaceManager.cs \
+ Util.cs \
+ UriMap.cs \
+ Resource.cs \
+ Statement.cs \
+ Store.cs \
+ MemoryStore.cs \
+ SQLStore.cs \
+ RdfReader.cs \
+ RdfXmlReader.cs \
+ N3Reader.cs \
+ RdfWriter.cs \
+ RdfXmlWriter.cs \
+ N3Writer.cs \
+ RSquary.cs \
+ LiteralFilters.cs \
+ Query.cs \
+ Inference.cs \
+ RDFS.cs \
+ Algos.cs \
+ Remote.cs \
+ XPathSemWebNavigator.cs
+
+RESOURCES =
+
+ASSEMBLY_INFO_SOURCE = AssemblyInfo.cs
+
+include $(top_srcdir)/build/build.mk
diff --git a/lib/semweb/Makefile.in b/lib/semweb/Makefile.in
index 21b572e..e50b61a 100644
--- a/lib/semweb/Makefile.in
+++ b/lib/semweb/Makefile.in
@@ -35,13 +35,22 @@ POST_UNINSTALL = :
build_triplet = @build@
host_triplet = @host@
DIST_COMMON = README $(srcdir)/Makefile.am $(srcdir)/Makefile.in \
- $(top_srcdir)/Makefile.include
+ $(top_srcdir)/build/build.environment.mk \
+ $(top_srcdir)/build/build.mk \
+ $(top_srcdir)/build/build.rules.mk
+ at ENABLE_TESTS_TRUE@am__append_1 = " $(NUNIT_LIBS)"
subdir = lib/semweb
ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
am__aclocal_m4_deps = $(top_srcdir)/build/m4/shave/shave.m4 \
$(top_srcdir)/build/m4/shamrock/expansions.m4 \
+ $(top_srcdir)/build/m4/shamrock/gnome-doc.m4 \
$(top_srcdir)/build/m4/shamrock/mono.m4 \
+ $(top_srcdir)/build/m4/shamrock/nunit.m4 \
$(top_srcdir)/build/m4/shamrock/programs.m4 \
+ $(top_srcdir)/build/m4/f-spot/flickrnet.m4 \
+ $(top_srcdir)/build/m4/f-spot/gnome-keyring-sharp.m4 \
+ $(top_srcdir)/build/m4/f-spot/gtk-sharp.m4 \
+ $(top_srcdir)/build/m4/f-spot/mono-addins.m4 \
$(top_srcdir)/acinclude.m4 $(top_srcdir)/configure.ac
am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
$(ACLOCAL_M4)
@@ -49,8 +58,6 @@ mkinstalldirs = $(install_sh) -d
CONFIG_HEADER = $(top_builddir)/config.h
CONFIG_CLEAN_FILES =
CONFIG_CLEAN_VPATH_FILES =
-SOURCES =
-DIST_SOURCES =
am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`;
am__vpath_adj = case $$p in \
$(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \
@@ -72,8 +79,9 @@ am__nobase_list = $(am__nobase_strip_setup); \
am__base_list = \
sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \
sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g'
-am__installdirs = "$(DESTDIR)$(assemblydir)"
-DATA = $(assembly_DATA)
+am__installdirs = "$(DESTDIR)$(moduledir)"
+SCRIPTS = $(module_SCRIPTS)
+DIST_SOURCES =
DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
ACLOCAL = @ACLOCAL@
ACLOCAL_AMFLAGS = @ACLOCAL_AMFLAGS@
@@ -119,6 +127,8 @@ EXIF_SOVERSION = @EXIF_SOVERSION@
F77 = @F77@
FC = @FC@
FGREP = @FGREP@
+FLICKRNET_CFLAGS = @FLICKRNET_CFLAGS@
+FLICKRNET_LIBS = @FLICKRNET_LIBS@
F_CFLAGS = @F_CFLAGS@
F_LIBS = @F_LIBS@
GAPI2CODEGEN = @GAPI2CODEGEN@
@@ -132,6 +142,8 @@ GCONF_SHARP_LIBS = @GCONF_SHARP_LIBS@
GETTEXT_PACKAGE = @GETTEXT_PACKAGE@
GIO_CFLAGS = @GIO_CFLAGS@
GIO_LIBS = @GIO_LIBS@
+GLIBSHARP_2_12_7_CFLAGS = @GLIBSHARP_2_12_7_CFLAGS@
+GLIBSHARP_2_12_7_LIBS = @GLIBSHARP_2_12_7_LIBS@
GLIBSHARP_CFLAGS = @GLIBSHARP_CFLAGS@
GLIBSHARP_LIBS = @GLIBSHARP_LIBS@
GLIB_CFLAGS = @GLIB_CFLAGS@
@@ -147,6 +159,10 @@ GNOME_SHARP_CFLAGS = @GNOME_SHARP_CFLAGS@
GNOME_SHARP_LIBS = @GNOME_SHARP_LIBS@
GOBJECT_QUERY = @GOBJECT_QUERY@
GREP = @GREP@
+GTKSHARP_A11Y_CFLAGS = @GTKSHARP_A11Y_CFLAGS@
+GTKSHARP_A11Y_LIBS = @GTKSHARP_A11Y_LIBS@
+GTKSHARP_CFLAGS = @GTKSHARP_CFLAGS@
+GTKSHARP_LIBS = @GTKSHARP_LIBS@
HELP_DIR = @HELP_DIR@
ICONS_DIRECTORY = @ICONS_DIRECTORY@
INSTALL = @INSTALL@
@@ -160,14 +176,14 @@ INTLTOOL_EXTRACT = @INTLTOOL_EXTRACT@
INTLTOOL_MERGE = @INTLTOOL_MERGE@
INTLTOOL_PERL = @INTLTOOL_PERL@
INTLTOOL_UPDATE = @INTLTOOL_UPDATE@
+KEYRINGSHARP_CFLAGS = @KEYRINGSHARP_CFLAGS@
+KEYRINGSHARP_LIBS = @KEYRINGSHARP_LIBS@
LCMS_CFLAGS = @LCMS_CFLAGS@
LCMS_LIBS = @LCMS_LIBS@
LD = @LD@
LDFLAGS = @LDFLAGS@
LIBEXIF_VERSION_CHECK_CFLAGS = @LIBEXIF_VERSION_CHECK_CFLAGS@
LIBEXIF_VERSION_CHECK_LIBS = @LIBEXIF_VERSION_CHECK_LIBS@
-LIBGPHOTO2_CFLAGS = @LIBGPHOTO2_CFLAGS@
-LIBGPHOTO2_LIBS = @LIBGPHOTO2_LIBS@
LIBJPEG = @LIBJPEG@
LIBOBJS = @LIBOBJS@
LIBS = @LIBS@
@@ -182,6 +198,12 @@ MCS = @MCS@
MKDIR_P = @MKDIR_P@
MKINSTALLDIRS = @MKINSTALLDIRS@
MONO = @MONO@
+MONO_ADDINS_CFLAGS = @MONO_ADDINS_CFLAGS@
+MONO_ADDINS_GUI_CFLAGS = @MONO_ADDINS_GUI_CFLAGS@
+MONO_ADDINS_GUI_LIBS = @MONO_ADDINS_GUI_LIBS@
+MONO_ADDINS_LIBS = @MONO_ADDINS_LIBS@
+MONO_ADDINS_SETUP_CFLAGS = @MONO_ADDINS_SETUP_CFLAGS@
+MONO_ADDINS_SETUP_LIBS = @MONO_ADDINS_SETUP_LIBS@
MONO_MODULE_CFLAGS = @MONO_MODULE_CFLAGS@
MONO_MODULE_LIBS = @MONO_MODULE_LIBS@
MSGFMT = @MSGFMT@
@@ -192,7 +214,6 @@ NDESK_DBUS_LIBS = @NDESK_DBUS_LIBS@
NM = @NM@
NMEDIT = @NMEDIT@
NUNIT_CFLAGS = @NUNIT_CFLAGS@
-NUNIT_DEFINES = @NUNIT_DEFINES@
NUNIT_LIBS = @NUNIT_LIBS@
OBJC = @OBJC@
OBJDUMP = @OBJDUMP@
@@ -284,74 +305,250 @@ target_alias = @target_alias@
top_build_prefix = @top_build_prefix@
top_builddir = @top_builddir@
top_srcdir = @top_srcdir@
+ASSEMBLY = SemWeb
+TARGET = library
+LINK = $(REF_SEMWEB) $(am__append_1)
+SOURCES = \
+ NamespaceManager.cs \
+ Util.cs \
+ UriMap.cs \
+ Resource.cs \
+ Statement.cs \
+ Store.cs \
+ MemoryStore.cs \
+ SQLStore.cs \
+ RdfReader.cs \
+ RdfXmlReader.cs \
+ N3Reader.cs \
+ RdfWriter.cs \
+ RdfXmlWriter.cs \
+ N3Writer.cs \
+ RSquary.cs \
+ LiteralFilters.cs \
+ Query.cs \
+ Inference.cs \
+ RDFS.cs \
+ Algos.cs \
+ Remote.cs \
+ XPathSemWebNavigator.cs
+
+RESOURCES =
+ASSEMBLY_INFO_SOURCE = AssemblyInfo.cs
+
+# Initializers
+MONO_BASE_PATH =
+MONO_ADDINS_PATH =
+
+# Install Paths
+DEFAULT_INSTALL_DIR = $(pkglibdir)
+BACKENDS_INSTALL_DIR = $(DEFAULT_INSTALL_DIR)/Backends
+EXTENSIONS_INSTALL_DIR = $(DEFAULT_INSTALL_DIR)/Extensions
DIR_DOCS = $(top_builddir)/docs
DIR_EXTENSIONS = $(top_builddir)/extensions
-DIR_GPHOTO2 = $(top_builddir)/lib/libgphoto2-sharp
DIR_ICONS = $(top_builddir)/icons
DIR_JPEGTRAN = $(top_builddir)/lib/libjpegtran
-DIR_KEYRING = $(top_builddir)/lib/gnome-keyring-sharp
DIR_LIBFSPOT = $(top_builddir)/lib/libfspot
DIR_SEMWEB = $(top_builddir)/lib/semweb
DIR_SRC = $(top_builddir)/src
DIR_GIOSHARP = $(top_builddir)/lib/gio-sharp/gio
DIR_GTKSHARPBEANS = $(top_builddir)/lib/gtk-sharp-beans
DIR_UNIQUESHARP = $(top_builddir)/lib/unique-sharp/unique
-LINK_KEYRING = -r:$(DIR_KEYRING)/gnome-keyring-sharp.dll
-LINK_GPHOTO2 = -r:$(DIR_GPHOTO2)/libgphoto2-sharp.dll
-LINK_SEMWEB = -r:$(DIR_SEMWEB)/SemWeb.dll
-LINK_GIOSHARP = -r:$(DIR_GIOSHARP)/gio-sharp.dll
-LINK_GTKSHARPBEANS = -r:$(DIR_GTKSHARPBEANS)/gtk-sharp-beans.dll
-LINK_UNIQUESHARP = -r:$(DIR_UNIQUESHARP)/unique-sharp.dll
-CSC_FLAGS = -debug
-CSC = $(MCS) $(CSC_FLAGS) -target:exe
-CSC_LIB = $(MCS) $(CSC_FLAGS) -target:library
-MONO_DEBUGFLAGS = --debug
-RUNTIME = mono $(MONO_DEBUGFLAGS)
-ASSEMBLY_NAME = SemWeb
-ASSEMBLY_SOURCES = \
- $(srcdir)/AssemblyInfo.cs \
- $(srcdir)/NamespaceManager.cs \
- $(srcdir)/Util.cs \
- $(srcdir)/UriMap.cs \
- $(srcdir)/Resource.cs \
- $(srcdir)/Statement.cs \
- $(srcdir)/Store.cs \
- $(srcdir)/MemoryStore.cs \
- $(srcdir)/SQLStore.cs \
- $(srcdir)/RdfReader.cs \
- $(srcdir)/RdfXmlReader.cs \
- $(srcdir)/N3Reader.cs \
- $(srcdir)/RdfWriter.cs \
- $(srcdir)/RdfXmlWriter.cs \
- $(srcdir)/N3Writer.cs \
- $(srcdir)/RSquary.cs \
- $(srcdir)/LiteralFilters.cs \
- $(srcdir)/Query.cs \
- $(srcdir)/Inference.cs \
- $(srcdir)/RDFS.cs \
- $(srcdir)/Algos.cs \
- $(srcdir)/Remote.cs \
- $(srcdir)/XPathSemWebNavigator.cs
-
-REFS = \
- -r:System.Data \
- -r:System.Web
-
-PKGS =
-ASSEMBLY = $(ASSEMBLY_NAME).dll
-assemblydir = $(pkglibdir)
-assembly_DATA = $(ASSEMBLY)
-EXTRA_DIST = \
- $(ASSEMBLY_SOURCES)
-
-CLEANFILES = \
- $(ASSEMBLY) \
- $(ASSEMBLY).mdb
-
+DIR_BIN = $(top_builddir)/bin
+
+# External libraries to link against, generated from configure
+LINK_SYSTEM = -r:System
+LINK_SYSTEMDATA = -r:System.Data
+LINK_SYSTEM_WEB = -r:System.Web
+LINK_MONO_POSIX = -r:Mono.Posix
+LINK_MONO_CAIRO = -r:Mono.Cairo
+LINK_MONO_SIMD = -r:Mono.Simd
+LINK_MONODATA = -r:Mono.Data
+LINK_MONO_DATA_SQLITECLIENT = -r:Mono.Data.SqliteClient
+LINK_ICSHARP_ZIP_LIB = -r:ICSharpCode.SharpZipLib
+LINK_KEYRING = $(KEYRINGSHARP_LIBS)
+LINK_GLIB = $(GLIBSHARP_LIBS)
+LINK_GTK = $(GTKSHARP_LIBS)
+LINK_GNOME = $(GNOME_SHARP_LIBS)
+LINK_GCONF = $(GCONF_SHARP_LIBS)
+LINK_GLADE = -pkg:glade-sharp-2.0
+LINK_FLICKRNET = -pkg:flickrnet
+LINK_DBUS = $(NDESK_DBUS_LIBS) $(NDESK_DBUS_GLIB_LIBS)
+LINK_DBUS_NO_GLIB = $(NDESK_DBUS_LIBS)
+LINK_MONO_ADDINS_DEPS = $(MONO_ADDINS_LIBS)
+LINK_MONO_ADDINS_SETUP_DEPS = $(MONO_ADDINS_SETUP_LIBS)
+LINK_MONO_ADDINS_GUI_DEPS = $(MONO_ADDINS_GUI_LIBS)
+
+# GIO
+REF_GIO =
+LINK_GIO = -r:$(DIR_GIOSHARP)/gio-sharp.dll
+LINK_GIO_DEPS = $(REF_GIO) $(LINK_GIO)
+
+# Gtk Beans
+REF_GTK_BEANS = $(LINK_GIO_DEPS)
+LINK_GTK_BEANS = -r:$(DIR_GTKSHARPBEANS)/gtk-sharp-beans.dll
+LINK_GTK_BEANS_DEPS = $(REF_GTK_BEANS) $(LINK_GTK_BEANS)
+
+# Uniqe
+REF_UNIQUE =
+LINK_UNIQUE = -r:$(DIR_UNIQUESHARP)/unique-sharp.dll
+LINK_UNIQUE_DEPS = $(REF_UNIQUE) $(LINK_UNIQUE)
+
+# Hyena
+REF_HYENA = $(LINK_SYSTEM) $(LINK_MONO_POSIX)
+LINK_HYENA = -r:$(DIR_BIN)/Hyena.dll
+LINK_HYENA_DEPS = $(REF_HYENA) $(LINK_HYENA)
+
+# Semweb
+REF_SEMWEB = $(LINK_SYSTEMDATA) $(LINK_HYENA_DEPS)
+LINK_SEMWEB = -r:$(DIR_BIN)/SemWeb.dll
+LINK_SEMWEB_DEPS = $(REF_SEMWEB) $(LINK_SEMWEB)
+
+# Hyena.Data.Sqlite
+REF_HYENA_DATA_SQLITE = $(LINK_SQLITE)
+LINK_HYENA_DATA_SQLITE = -r:$(DIR_BIN)/Hyena.Data.Sqlite.dll
+LINK_HYENA_DATA_SQLITE_DEPS = $(REF_HYENA_DATA_SQLITE) $(LINK_HYENA_DATA_SQLITE)
+
+# Hyena.Gui
+REF_HYENA_GUI = $(LINK_HYENA_DEPS)
+LINK_HYENA_GUI = -r:$(DIR_BIN)/Hyena.Gui.dll
+LINK_HENA_GUI_DEPS = $(REF_HYENA_GUI) $(LINK_HYENA_GUI)
+
+# FSpot.Cms
+REF_FSPOT_CMS = $(LINK_GTK)
+LINK_FSPOT_CMS = -r:$(DIR_BIN)/FSpot.Cms.dll
+LINK_FSPOT_CMS_DEPS = $(REF_FSPOT_CMS) $(LINK_FSPOT_CMS)
+
+# FSpot.Utils
+REF_FSPOT_UTILS = $(LINK_HYENA_DEPS) $(LINK_GTK) $(LINK_GIO) $(LINK_MONO_CAIRO)
+LINK_FSPOT_UTILS = -r:$(DIR_BIN)/FSpot.Utils.dll
+LINK_FSPOT_UTILS_DEPS = $(REF_FSPOT_UTILS) $(LINK_FSPOT_UTILS)
+
+# FSpot.Core
+REF_FSPOT_CORE = $(LINK_FSPOT_UTILS_DEPS) $(LINK_FSPOT_CMS_DEPS)
+LINK_FSPOT_CORE = -r:$(DIR_BIN)/FSpot.Core.dll
+LINK_FSPOT_CORE_DEPS = $(REF_FSPOT_CORE) $(LINK_FSPOT_CORE)
+
+# FSpot.Query
+REF_FSPOT_QUERY = $(LINK_FSPOT_CORE_DEPS)
+LINK_FSPOT_QUERY = -r:$(DIR_BIN)/FSpot.Query.dll
+LINK_FSPOT_QUERY_DEPS = $(REF_FSPOT_QUERY) $(LINK_FSPOT_QUERY)
+
+# FSpot.JobScheduler
+REF_FSPOT_JOB_SCHEDULER = $(LINK_HYENA_DEPS)
+LINK_FSPOT_JOB_SCHEDULER = -r:$(DIR_BIN)/FSpot.JobScheduler.dll
+LINK_FSPOT_JOB_SCHEDULER_DEPS = $(REF_FSPOT_JOB_SCHEDULER) $(LINK_FSPOT_JOB_SCHEDULER)
+
+# FSpot.Bling
+REF_FSPOT_BLING = $(LINK_GTK_BEANS_DEPS) $(LINK_GLIB)
+LINK_FSPOT_BLING = -r:$(DIR_BIN)/FSpot.Bling.dll
+LINK_FSPOT_BLING_DEPS = $(REF_FSPOT_BLING) $(LINK_FSPOT_BLING)
+
+# FSpot.Platform
+REF_FSPOT_PLATFORM = $(LINK_GCONF) $(LINK_GTK) $(LINK_FSPOT_CORE_DEPS) $(LINK_DBUS)
+LINK_FSPOT_PLATFORM = -r:$(DIR_BIN)/FSpot.Platform.dll
+LINK_FSPOT_PLATFORM_DEPS = $(REF_FSPOT_PLATFORM) $(LINK_FSPOT_PLATFORM)
+
+# FSpot.Widgets
+REF_FSPOT_WIDGETS = $(LINK_FSPOT_CORE_DEPS) $(LINK_FSPOT_BLING_DEPS)
+LINK_FSPOT_WIDGETS = -r:$(DIR_BIN)/FSpot.Widgets.dll
+LINK_FSPOT_WIDGETS_DEPS = $(REF_FSPOT_WIDGETS) $(LINK_FSPOT_WIDGETS)
+
+# FSpot (executable)
+REF_FSPOT = $(LINK_FSPOT_WIDGETS_DEPS) $(LINK_FSPOT_PLATFORM_DEPS) $(LINK_FSPOT_QUERY_DEPS) \
+ $(LINK_GLIB) $(LINK_MONO_ADDINS_DEPS) $(LINK_UNIQUE_DEPS) $(LINK_MONO_ADDINS_SETUP_DEPS) \
+ $(LINK_SEMWEB_DEPS) $(LINK_GLADE) $(LINK_MONODATA) $(LINK_MONO_DATA_SQLITECLIENT) \
+ $(LINK_MONO_ADDINS_GUI_DEPS) $(LINK_FSPOT_JOB_SCHEDULER_DEPS) $(LINK_ICSHARP_ZIP_LIB) \
+ $(LINK_GNOME)
+
+# FIXME: do not link executables
+LINK_FSPOT = -r:$(DIR_BIN)/f-spot.exe
+LINK_FSPOT_DEPS = $(REF_FSPOT) $(LINK_FSPOT)
+
+# Extensions
+REF_FSPOT_EXTENSION_BLACKOUTEDITOR = $(LINK_FSPOT_DEPS)
+REF_FSPOT_EXTENSION_BWEDITOR = $(LINK_FSPOT_DEPS) $(LINK_MONO_SIMD)
+REF_FSPOT_EXTENSION_FLIPEDITOR = $(LINK_FSPOT_DEPS)
+REF_FSPOT_EXTENSION_PIXELATEEDITOR = $(LINK_FSPOT_DEPS)
+REF_FSPOT_EXTENSION_RESIZEEDITOR = $(LINK_FSPOT_DEPS)
+REF_FSPOT_EXTENSION_CDEXPORT = $(LINK_FSPOT_DEPS)
+REF_FSPOT_EXTENSION_FACEBOOKEXPORT = $(LINK_FSPOT_DEPS) $(LINK_KEYRING)
+REF_FSPOT_EXTENSION_FLICKREXPORT = $(LINK_FSPOT_DEPS) $(LINK_FLICKRNET)
+REF_FSPOT_EXTENSION_FOLDEREXPORT = $(LINK_FSPOT_DEPS) $(LINK_SYSTEM_WEB)
+REF_FSPOT_EXTENSION_GALLERYEXPORT = $(LINK_FSPOT_DEPS)
+REF_MONO_GOOGLE = $(LINK_HYENA_DEPS)
+LINK_MONO_GOOGLE = -r:$(DIR_BIN)/Mono.Google.dll
+LINK_MONO_GOOGLE_DEPS = $(REF_MONO_GOOGLE) $(LINK_MONO_GOOGLE)
+REF_FSPOT_EXTENSION_PICASAWEBEXPORT = $(LINK_FSPOT_DEPS) $(LINK_MONO_GOOGLE) $(LINK_KEYRING)
+REF_SMUGMUGNET = $(LINK_FSPOT_DEPS)
+LINK_SMUGMUGNET = -r:$(DIR_BIN)/SmugMugNet.dll
+LINK_SMUGMUGNET_DEPS = $(REF_SMUGMUGNET) $(LINK_SMUGMUGNET)
+REF_FSPOT_EXTENSION_SMUGMUGEXPORT = $(LINK_SMUGMUGNET_DEPS) $(LINK_KEYRING)
+REF_MONO_TABBLO = $(LINK_HYENA_DEPS)
+LINK_MONO_TABBLO = -r:$(DIR_BIN)/Mono.Tabblo.dll
+LINK_MONO_TABBLO_DEPS = $(REF_MONO_TABBLO) $(LINK_MONO_TABBLO)
+REF_FSPOT_EXTENSION_TABBLOEXPORT = $(LINK_FSPOT_DEPS) $(LINK_KEYRING) $(LINK_MONO_TABBLO_DEPS)
+REF_FSPOT_EXTENSION_ZIPEXPORT = $(LINK_FSPOT_DEPS)
+REF_FSPOT_EXTENSION_CHANGEPHOTOPATH = $(LINK_FSPOT_DEPS)
+REF_FSPOT_EXTENSION_DEVELOPINUFRAW = $(LINK_FSPOT_DEPS)
+REF_FSPOT_EXTENSION_HASHJOB = $(LINK_FSPOT_DEPS)
+REF_FSPOT_EXTENSION_LIVEWEBGALLERY = $(LINK_FSPOT_DEPS)
+REF_FSPOT_EXTENSION_MERGEDB = $(LINK_FSPOT_DEPS)
+REF_FSPOT_EXTENSION_RAWPLUSJPEG = $(LINK_FSPOT_DEPS)
+REF_FSPOT_EXTENSION_RETROACTIVEROLL = $(LINK_FSPOT_DEPS)
+REF_FSPOT_EXTENSION_SCREENSAVERCONFIG = $(LINK_FSPOT_DEPS)
+REF_FSPOT_EXTENSION_COVERTRANSITION = $(LINK_FSPOT_DEPS)
+
+# Cute hack to replace a space with something
+colon := :
+empty :=
+space := $(empty) $(empty)
+
+# Build path to allow running uninstalled
+RUN_PATH = $(subst $(space),$(colon), $(MONO_BASE_PATH))
+UNIQUE_FILTER_PIPE = tr [:space:] \\n | sort | uniq
+BUILD_DATA_DIR = $(top_builddir)/bin/share/$(PACKAGE)
+
+# Since all other attempts failed, we currently go this way:
+# This code adds the file specified in ASSEMBLY_INFO_SOURCE to SOURCES_BUILD.
+# If no such file is specified, the default AssemblyInfo.cs is used.
+ASSEMBLY_INFO_SOURCE_REAL = \
+ $(shell if [ "$(ASSEMBLY_INFO_SOURCE)" ]; \
+ then \
+ echo "$(addprefix $(srcdir)/, $(ASSEMBLY_INFO_SOURCE))"; \
+ else \
+ echo "$(top_srcdir)/src/AssemblyInfo.cs"; \
+ fi)
+
+SOURCES_BUILD = $(addprefix $(srcdir)/, $(SOURCES)) \
+ $(ASSEMBLY_INFO_SOURCE_REAL)
+RESOURCES_EXPANDED = $(addprefix $(srcdir)/, $(RESOURCES))
+RESOURCES_BUILD = $(foreach resource, $(RESOURCES_EXPANDED), \
+ -resource:$(resource),$(notdir $(resource)))
+
+INSTALL_ICONS = $(top_srcdir)/build/private-icon-theme-installer "$(mkinstalldirs)" "$(INSTALL_DATA)"
+THEME_ICONS_SOURCE = $(wildcard $(srcdir)/ThemeIcons/*/*/*.png) $(wildcard $(srcdir)/ThemeIcons/scalable/*/*.svg)
+THEME_ICONS_RELATIVE = $(subst $(srcdir)/ThemeIcons/, , $(THEME_ICONS_SOURCE))
+ASSEMBLY_EXTENSION = $(strip $(patsubst library, dll, $(TARGET)))
+ASSEMBLY_FILE = $(top_builddir)/bin/$(ASSEMBLY).$(ASSEMBLY_EXTENSION)
+INSTALL_DIR_RESOLVED = $(firstword $(subst , $(DEFAULT_INSTALL_DIR), $(INSTALL_DIR)))
+ at ENABLE_TESTS_TRUE@ENABLE_TESTS_FLAG = "-define:ENABLE_TESTS"
+ at ENABLE_ATK_TRUE@ENABLE_ATK_FLAG = "-define:ENABLE_ATK"
+FILTERED_LINK = $(shell echo "$(LINK)" | $(UNIQUE_FILTER_PIPE))
+DEP_LINK = $(shell echo "$(LINK)" | $(UNIQUE_FILTER_PIPE) | sed s,-r:,,g | grep '$(top_builddir)/bin/')
+OUTPUT_FILES = \
+ $(ASSEMBLY_FILE) \
+ $(ASSEMBLY_FILE).mdb
+
+moduledir = $(INSTALL_DIR_RESOLVED)
+module_SCRIPTS = $(OUTPUT_FILES)
+EXTRA_DIST = $(SOURCES_BUILD) $(RESOURCES_EXPANDED) $(THEME_ICONS_SOURCE)
+CLEANFILES = $(OUTPUT_FILES) $(ASSEMBLY_FILE).config
+DISTCLEANFILES = *.pidb
+MAINTAINERCLEANFILES = Makefile.in
all: all-am
.SUFFIXES:
-$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(top_srcdir)/Makefile.include $(am__configure_deps)
+$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(top_srcdir)/build/build.mk $(top_srcdir)/build/build.environment.mk $(top_srcdir)/build/build.rules.mk $(am__configure_deps)
@for dep in $?; do \
case '$(am__configure_deps)' in \
*$$dep*) \
@@ -381,32 +578,46 @@ $(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps)
$(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps)
cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
$(am__aclocal_m4_deps):
+install-moduleSCRIPTS: $(module_SCRIPTS)
+ @$(NORMAL_INSTALL)
+ test -z "$(moduledir)" || $(MKDIR_P) "$(DESTDIR)$(moduledir)"
+ @list='$(module_SCRIPTS)'; test -n "$(moduledir)" || list=; \
+ for p in $$list; do \
+ if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \
+ if test -f "$$d$$p"; then echo "$$d$$p"; echo "$$p"; else :; fi; \
+ done | \
+ sed -e 'p;s,.*/,,;n' \
+ -e 'h;s|.*|.|' \
+ -e 'p;x;s,.*/,,;$(transform)' | sed 'N;N;N;s,\n, ,g' | \
+ $(AWK) 'BEGIN { files["."] = ""; dirs["."] = 1; } \
+ { d=$$3; if (dirs[d] != 1) { print "d", d; dirs[d] = 1 } \
+ if ($$2 == $$4) { files[d] = files[d] " " $$1; \
+ if (++n[d] == $(am__install_max)) { \
+ print "f", d, files[d]; n[d] = 0; files[d] = "" } } \
+ else { print "f", d "/" $$4, $$1 } } \
+ END { for (d in files) print "f", d, files[d] }' | \
+ while read type dir files; do \
+ if test "$$dir" = .; then dir=; else dir=/$$dir; fi; \
+ test -z "$$files" || { \
+ echo " $(INSTALL_SCRIPT) $$files '$(DESTDIR)$(moduledir)$$dir'"; \
+ $(INSTALL_SCRIPT) $$files "$(DESTDIR)$(moduledir)$$dir" || exit $$?; \
+ } \
+ ; done
+
+uninstall-moduleSCRIPTS:
+ @$(NORMAL_UNINSTALL)
+ @list='$(module_SCRIPTS)'; test -n "$(moduledir)" || exit 0; \
+ files=`for p in $$list; do echo "$$p"; done | \
+ sed -e 's,.*/,,;$(transform)'`; \
+ test -n "$$list" || exit 0; \
+ echo " ( cd '$(DESTDIR)$(moduledir)' && rm -f" $$files ")"; \
+ cd "$(DESTDIR)$(moduledir)" && rm -f $$files
mostlyclean-libtool:
-rm -f *.lo
clean-libtool:
-rm -rf .libs _libs
-install-assemblyDATA: $(assembly_DATA)
- @$(NORMAL_INSTALL)
- test -z "$(assemblydir)" || $(MKDIR_P) "$(DESTDIR)$(assemblydir)"
- @list='$(assembly_DATA)'; test -n "$(assemblydir)" || list=; \
- for p in $$list; do \
- if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \
- echo "$$d$$p"; \
- done | $(am__base_list) | \
- while read files; do \
- echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(assemblydir)'"; \
- $(INSTALL_DATA) $$files "$(DESTDIR)$(assemblydir)" || exit $$?; \
- done
-
-uninstall-assemblyDATA:
- @$(NORMAL_UNINSTALL)
- @list='$(assembly_DATA)'; test -n "$(assemblydir)" || list=; \
- files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \
- test -n "$$files" || exit 0; \
- echo " ( cd '$(DESTDIR)$(assemblydir)' && rm -f" $$files ")"; \
- cd "$(DESTDIR)$(assemblydir)" && rm -f $$files
tags: TAGS
TAGS:
@@ -446,9 +657,9 @@ distdir: $(DISTFILES)
done
check-am: all-am
check: check-am
-all-am: Makefile $(DATA)
+all-am: Makefile $(SCRIPTS)
installdirs:
- for dir in "$(DESTDIR)$(assemblydir)"; do \
+ for dir in "$(DESTDIR)$(moduledir)"; do \
test -z "$$dir" || $(MKDIR_P) "$$dir"; \
done
install: install-am
@@ -473,10 +684,12 @@ clean-generic:
distclean-generic:
-test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
-test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES)
+ -test -z "$(DISTCLEANFILES)" || rm -f $(DISTCLEANFILES)
maintainer-clean-generic:
@echo "This command is intended for maintainers to use"
@echo "it deletes files that may require special tools to rebuild."
+ -test -z "$(MAINTAINERCLEANFILES)" || rm -f $(MAINTAINERCLEANFILES)
clean: clean-am
clean-am: clean-generic clean-libtool mostlyclean-am
@@ -497,7 +710,7 @@ info: info-am
info-am:
-install-data-am: install-assemblyDATA
+install-data-am: install-data-local install-moduleSCRIPTS
install-dvi: install-dvi-am
@@ -541,27 +754,72 @@ ps: ps-am
ps-am:
-uninstall-am: uninstall-assemblyDATA
+uninstall-am: uninstall-local uninstall-moduleSCRIPTS
.MAKE: install-am install-strip
.PHONY: all all-am check check-am clean clean-generic clean-libtool \
distclean distclean-generic distclean-libtool distdir dvi \
dvi-am html html-am info info-am install install-am \
- install-assemblyDATA install-data install-data-am install-dvi \
+ install-data install-data-am install-data-local 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-generic mostlyclean-libtool pdf pdf-am ps ps-am \
- uninstall uninstall-am uninstall-assemblyDATA
-
-
-all: $(ASSEMBLY)
-
-$(ASSEMBLY): $(ASSEMBLY_SOURCES)
- $(CSC_LIB) -out:$@ $(PKGS) $(REFS) $(ASSEMBLY_SOURCES)
+ install-moduleSCRIPTS install-pdf install-pdf-am install-ps \
+ install-ps-am install-strip installcheck installcheck-am \
+ installdirs maintainer-clean maintainer-clean-generic \
+ mostlyclean mostlyclean-generic mostlyclean-libtool pdf pdf-am \
+ ps ps-am uninstall uninstall-am uninstall-local \
+ uninstall-moduleSCRIPTS
+
+
+all: $(ASSEMBLY_FILE) theme-icons
+
+run:
+ @pushd $(top_builddir); \
+ make run; \
+ popd;
+
+# uncommented for now.
+# tests are currently excuted from Makefile in $(top_builddir)
+#test:
+# @pushd $(top_builddir)/tests; \
+# make $(ASSEMBLY); \
+# popd;
+
+build-debug:
+ @echo $(DEP_LINK)
+
+$(ASSEMBLY_FILE).mdb: $(ASSEMBLY_FILE)
+
+$(ASSEMBLY_FILE): $(SOURCES_BUILD) $(RESOURCES_EXPANDED) $(DEP_LINK)
+ @mkdir -p $(top_builddir)/bin
+ @if [ ! "x$(ENABLE_RELEASE)" = "xyes" ]; then \
+ $(top_srcdir)/build/dll-map-makefile-verifier $(srcdir)/Makefile.am $(srcdir)/$(notdir $@.config) && \
+ $(MONO) $(top_builddir)/build/dll-map-verifier.exe $(srcdir)/$(notdir $@.config) -iwinmm -ilibbanshee -ilibbnpx11 -ilibc -ilibc.so.6 -iintl -ilibmtp.dll -ilibigemacintegration.dylib -iCFRelease $(SOURCES_BUILD); \
+ fi;
+ $(MCS) \
+ $(GMCS_FLAGS) \
+ $(ASSEMBLY_BUILD_FLAGS) \
+ -nowarn:0278 -nowarn:0078 $$warn \
+ -define:HAVE_GTK_2_10 -define:NET_2_0 \
+ -debug -target:$(TARGET) -out:$@ \
+ $(BUILD_DEFINES) $(ENABLE_TESTS_FLAG) $(ENABLE_ATK_FLAG) \
+ $(FILTERED_LINK) $(RESOURCES_BUILD) $(SOURCES_BUILD)
+ @if [ -e $(srcdir)/$(notdir $@.config) ]; then \
+ cp $(srcdir)/$(notdir $@.config) $(top_builddir)/bin; \
+ fi;
+ @if [ ! -z "$(EXTRA_BUNDLE)" ]; then \
+ cp $(EXTRA_BUNDLE) $(top_builddir)/bin; \
+ fi;
+
+theme-icons: $(THEME_ICONS_SOURCE)
+ @$(INSTALL_ICONS) -il "$(BUILD_DATA_DIR)" "$(srcdir)" $(THEME_ICONS_RELATIVE)
+
+install-data-local: $(THEME_ICONS_SOURCE)
+ @$(INSTALL_ICONS) -i "$(DESTDIR)$(pkgdatadir)" "$(srcdir)" $(THEME_ICONS_RELATIVE)
+
+uninstall-local: $(THEME_ICONS_SOURCE)
+ @$(INSTALL_ICONS) -u "$(DESTDIR)$(pkgdatadir)" "$(srcdir)" $(THEME_ICONS_RELATIVE)
# 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/lib/semweb/Query.cs b/lib/semweb/Query.cs
index 6fd6fcc..cde7c92 100644
--- a/lib/semweb/Query.cs
+++ b/lib/semweb/Query.cs
@@ -277,7 +277,7 @@ namespace SemWeb.Query {
if (r == null || !(r is Literal)) return -1;
try {
return int.Parse(((Literal)r).Value);
- } catch (Exception e) {
+ } catch (Exception) {
return -1;
}
}
diff --git a/lib/semweb/RdfReader.cs b/lib/semweb/RdfReader.cs
index 2e0bb8c..5ede713 100644
--- a/lib/semweb/RdfReader.cs
+++ b/lib/semweb/RdfReader.cs
@@ -127,7 +127,7 @@ namespace SemWeb {
UriBuilder b = new UriBuilder(baseuri);
b.Fragment = null; // per W3 RDF/XML test suite
return new Uri(b.Uri, uri, true).ToString();
- } catch (UriFormatException e) {
+ } catch (UriFormatException) {
return baseuri + uri;
}
}
diff --git a/lib/semweb/SQLStore.cs b/lib/semweb/SQLStore.cs
index 771ca01..b5a0f62 100644
--- a/lib/semweb/SQLStore.cs
+++ b/lib/semweb/SQLStore.cs
@@ -148,7 +148,7 @@ namespace SemWeb.Stores {
try {
int id = int.Parse(persistentId);
return (BNode)MakeEntity(id, null, null);
- } catch (Exception e) {
+ } catch (Exception) {
return null;
}
}
@@ -182,9 +182,9 @@ namespace SemWeb.Stores {
public override void Clear() {
// Drop the tables, if they exist.
- try { RunCommand("DROP TABLE " + table + "_statements;"); } catch (Exception e) { }
- try { RunCommand("DROP TABLE " + table + "_literals;"); } catch (Exception e) { }
- try { RunCommand("DROP TABLE " + table + "_entities;"); } catch (Exception e) { }
+ try { RunCommand("DROP TABLE " + table + "_statements;"); } catch (Exception) { }
+ try { RunCommand("DROP TABLE " + table + "_literals;"); } catch (Exception) { }
+ try { RunCommand("DROP TABLE " + table + "_entities;"); } catch (Exception) { }
firstUse = true;
Init();
@@ -1219,7 +1219,7 @@ namespace SemWeb.Stores {
if (ret is int) return (int)ret;
try {
return int.Parse(ret.ToString());
- } catch (FormatException e) {
+ } catch (FormatException) {
return def;
}
}
diff --git a/lib/unique-sharp/Makefile.in b/lib/unique-sharp/Makefile.in
index 2ff0de6..7500f5b 100644
--- a/lib/unique-sharp/Makefile.in
+++ b/lib/unique-sharp/Makefile.in
@@ -38,8 +38,14 @@ DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in
ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
am__aclocal_m4_deps = $(top_srcdir)/build/m4/shave/shave.m4 \
$(top_srcdir)/build/m4/shamrock/expansions.m4 \
+ $(top_srcdir)/build/m4/shamrock/gnome-doc.m4 \
$(top_srcdir)/build/m4/shamrock/mono.m4 \
+ $(top_srcdir)/build/m4/shamrock/nunit.m4 \
$(top_srcdir)/build/m4/shamrock/programs.m4 \
+ $(top_srcdir)/build/m4/f-spot/flickrnet.m4 \
+ $(top_srcdir)/build/m4/f-spot/gnome-keyring-sharp.m4 \
+ $(top_srcdir)/build/m4/f-spot/gtk-sharp.m4 \
+ $(top_srcdir)/build/m4/f-spot/mono-addins.m4 \
$(top_srcdir)/acinclude.m4 $(top_srcdir)/configure.ac
am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
$(ACLOCAL_M4)
@@ -134,6 +140,8 @@ EXIF_SOVERSION = @EXIF_SOVERSION@
F77 = @F77@
FC = @FC@
FGREP = @FGREP@
+FLICKRNET_CFLAGS = @FLICKRNET_CFLAGS@
+FLICKRNET_LIBS = @FLICKRNET_LIBS@
F_CFLAGS = @F_CFLAGS@
F_LIBS = @F_LIBS@
GAPI2CODEGEN = @GAPI2CODEGEN@
@@ -147,6 +155,8 @@ GCONF_SHARP_LIBS = @GCONF_SHARP_LIBS@
GETTEXT_PACKAGE = @GETTEXT_PACKAGE@
GIO_CFLAGS = @GIO_CFLAGS@
GIO_LIBS = @GIO_LIBS@
+GLIBSHARP_2_12_7_CFLAGS = @GLIBSHARP_2_12_7_CFLAGS@
+GLIBSHARP_2_12_7_LIBS = @GLIBSHARP_2_12_7_LIBS@
GLIBSHARP_CFLAGS = @GLIBSHARP_CFLAGS@
GLIBSHARP_LIBS = @GLIBSHARP_LIBS@
GLIB_CFLAGS = @GLIB_CFLAGS@
@@ -162,6 +172,10 @@ GNOME_SHARP_CFLAGS = @GNOME_SHARP_CFLAGS@
GNOME_SHARP_LIBS = @GNOME_SHARP_LIBS@
GOBJECT_QUERY = @GOBJECT_QUERY@
GREP = @GREP@
+GTKSHARP_A11Y_CFLAGS = @GTKSHARP_A11Y_CFLAGS@
+GTKSHARP_A11Y_LIBS = @GTKSHARP_A11Y_LIBS@
+GTKSHARP_CFLAGS = @GTKSHARP_CFLAGS@
+GTKSHARP_LIBS = @GTKSHARP_LIBS@
HELP_DIR = @HELP_DIR@
ICONS_DIRECTORY = @ICONS_DIRECTORY@
INSTALL = @INSTALL@
@@ -175,14 +189,14 @@ INTLTOOL_EXTRACT = @INTLTOOL_EXTRACT@
INTLTOOL_MERGE = @INTLTOOL_MERGE@
INTLTOOL_PERL = @INTLTOOL_PERL@
INTLTOOL_UPDATE = @INTLTOOL_UPDATE@
+KEYRINGSHARP_CFLAGS = @KEYRINGSHARP_CFLAGS@
+KEYRINGSHARP_LIBS = @KEYRINGSHARP_LIBS@
LCMS_CFLAGS = @LCMS_CFLAGS@
LCMS_LIBS = @LCMS_LIBS@
LD = @LD@
LDFLAGS = @LDFLAGS@
LIBEXIF_VERSION_CHECK_CFLAGS = @LIBEXIF_VERSION_CHECK_CFLAGS@
LIBEXIF_VERSION_CHECK_LIBS = @LIBEXIF_VERSION_CHECK_LIBS@
-LIBGPHOTO2_CFLAGS = @LIBGPHOTO2_CFLAGS@
-LIBGPHOTO2_LIBS = @LIBGPHOTO2_LIBS@
LIBJPEG = @LIBJPEG@
LIBOBJS = @LIBOBJS@
LIBS = @LIBS@
@@ -197,6 +211,12 @@ MCS = @MCS@
MKDIR_P = @MKDIR_P@
MKINSTALLDIRS = @MKINSTALLDIRS@
MONO = @MONO@
+MONO_ADDINS_CFLAGS = @MONO_ADDINS_CFLAGS@
+MONO_ADDINS_GUI_CFLAGS = @MONO_ADDINS_GUI_CFLAGS@
+MONO_ADDINS_GUI_LIBS = @MONO_ADDINS_GUI_LIBS@
+MONO_ADDINS_LIBS = @MONO_ADDINS_LIBS@
+MONO_ADDINS_SETUP_CFLAGS = @MONO_ADDINS_SETUP_CFLAGS@
+MONO_ADDINS_SETUP_LIBS = @MONO_ADDINS_SETUP_LIBS@
MONO_MODULE_CFLAGS = @MONO_MODULE_CFLAGS@
MONO_MODULE_LIBS = @MONO_MODULE_LIBS@
MSGFMT = @MSGFMT@
@@ -207,7 +227,6 @@ NDESK_DBUS_LIBS = @NDESK_DBUS_LIBS@
NM = @NM@
NMEDIT = @NMEDIT@
NUNIT_CFLAGS = @NUNIT_CFLAGS@
-NUNIT_DEFINES = @NUNIT_DEFINES@
NUNIT_LIBS = @NUNIT_LIBS@
OBJC = @OBJC@
OBJDUMP = @OBJDUMP@
diff --git a/lib/unique-sharp/generator/Makefile.in b/lib/unique-sharp/generator/Makefile.in
index 394e2ae..f6c90c0 100644
--- a/lib/unique-sharp/generator/Makefile.in
+++ b/lib/unique-sharp/generator/Makefile.in
@@ -14,6 +14,11 @@
# PARTICULAR PURPOSE.
@SET_MAKE@
+
+# Makefile.include
+# FSpot wide helper
+
+# Directories
VPATH = @srcdir@
pkgdatadir = $(datadir)/@PACKAGE@
pkgincludedir = $(includedir)/@PACKAGE@
@@ -39,8 +44,14 @@ subdir = lib/unique-sharp/generator
ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
am__aclocal_m4_deps = $(top_srcdir)/build/m4/shave/shave.m4 \
$(top_srcdir)/build/m4/shamrock/expansions.m4 \
+ $(top_srcdir)/build/m4/shamrock/gnome-doc.m4 \
$(top_srcdir)/build/m4/shamrock/mono.m4 \
+ $(top_srcdir)/build/m4/shamrock/nunit.m4 \
$(top_srcdir)/build/m4/shamrock/programs.m4 \
+ $(top_srcdir)/build/m4/f-spot/flickrnet.m4 \
+ $(top_srcdir)/build/m4/f-spot/gnome-keyring-sharp.m4 \
+ $(top_srcdir)/build/m4/f-spot/gtk-sharp.m4 \
+ $(top_srcdir)/build/m4/f-spot/mono-addins.m4 \
$(top_srcdir)/acinclude.m4 $(top_srcdir)/configure.ac
am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
$(ACLOCAL_M4)
@@ -95,6 +106,8 @@ EXIF_SOVERSION = @EXIF_SOVERSION@
F77 = @F77@
FC = @FC@
FGREP = @FGREP@
+FLICKRNET_CFLAGS = @FLICKRNET_CFLAGS@
+FLICKRNET_LIBS = @FLICKRNET_LIBS@
F_CFLAGS = @F_CFLAGS@
F_LIBS = @F_LIBS@
GAPI2CODEGEN = @GAPI2CODEGEN@
@@ -108,6 +121,8 @@ GCONF_SHARP_LIBS = @GCONF_SHARP_LIBS@
GETTEXT_PACKAGE = @GETTEXT_PACKAGE@
GIO_CFLAGS = @GIO_CFLAGS@
GIO_LIBS = @GIO_LIBS@
+GLIBSHARP_2_12_7_CFLAGS = @GLIBSHARP_2_12_7_CFLAGS@
+GLIBSHARP_2_12_7_LIBS = @GLIBSHARP_2_12_7_LIBS@
GLIBSHARP_CFLAGS = @GLIBSHARP_CFLAGS@
GLIBSHARP_LIBS = @GLIBSHARP_LIBS@
GLIB_CFLAGS = @GLIB_CFLAGS@
@@ -123,6 +138,10 @@ GNOME_SHARP_CFLAGS = @GNOME_SHARP_CFLAGS@
GNOME_SHARP_LIBS = @GNOME_SHARP_LIBS@
GOBJECT_QUERY = @GOBJECT_QUERY@
GREP = @GREP@
+GTKSHARP_A11Y_CFLAGS = @GTKSHARP_A11Y_CFLAGS@
+GTKSHARP_A11Y_LIBS = @GTKSHARP_A11Y_LIBS@
+GTKSHARP_CFLAGS = @GTKSHARP_CFLAGS@
+GTKSHARP_LIBS = @GTKSHARP_LIBS@
HELP_DIR = @HELP_DIR@
ICONS_DIRECTORY = @ICONS_DIRECTORY@
INSTALL = @INSTALL@
@@ -136,14 +155,14 @@ INTLTOOL_EXTRACT = @INTLTOOL_EXTRACT@
INTLTOOL_MERGE = @INTLTOOL_MERGE@
INTLTOOL_PERL = @INTLTOOL_PERL@
INTLTOOL_UPDATE = @INTLTOOL_UPDATE@
+KEYRINGSHARP_CFLAGS = @KEYRINGSHARP_CFLAGS@
+KEYRINGSHARP_LIBS = @KEYRINGSHARP_LIBS@
LCMS_CFLAGS = @LCMS_CFLAGS@
LCMS_LIBS = @LCMS_LIBS@
LD = @LD@
LDFLAGS = @LDFLAGS@
LIBEXIF_VERSION_CHECK_CFLAGS = @LIBEXIF_VERSION_CHECK_CFLAGS@
LIBEXIF_VERSION_CHECK_LIBS = @LIBEXIF_VERSION_CHECK_LIBS@
-LIBGPHOTO2_CFLAGS = @LIBGPHOTO2_CFLAGS@
-LIBGPHOTO2_LIBS = @LIBGPHOTO2_LIBS@
LIBJPEG = @LIBJPEG@
LIBOBJS = @LIBOBJS@
LIBS = @LIBS@
@@ -158,6 +177,12 @@ MCS = @MCS@
MKDIR_P = @MKDIR_P@
MKINSTALLDIRS = @MKINSTALLDIRS@
MONO = @MONO@
+MONO_ADDINS_CFLAGS = @MONO_ADDINS_CFLAGS@
+MONO_ADDINS_GUI_CFLAGS = @MONO_ADDINS_GUI_CFLAGS@
+MONO_ADDINS_GUI_LIBS = @MONO_ADDINS_GUI_LIBS@
+MONO_ADDINS_LIBS = @MONO_ADDINS_LIBS@
+MONO_ADDINS_SETUP_CFLAGS = @MONO_ADDINS_SETUP_CFLAGS@
+MONO_ADDINS_SETUP_LIBS = @MONO_ADDINS_SETUP_LIBS@
MONO_MODULE_CFLAGS = @MONO_MODULE_CFLAGS@
MONO_MODULE_LIBS = @MONO_MODULE_LIBS@
MSGFMT = @MSGFMT@
@@ -168,7 +193,6 @@ NDESK_DBUS_LIBS = @NDESK_DBUS_LIBS@
NM = @NM@
NMEDIT = @NMEDIT@
NUNIT_CFLAGS = @NUNIT_CFLAGS@
-NUNIT_DEFINES = @NUNIT_DEFINES@
NUNIT_LIBS = @NUNIT_LIBS@
OBJC = @OBJC@
OBJDUMP = @OBJDUMP@
@@ -260,24 +284,8 @@ target_alias = @target_alias@
top_build_prefix = @top_build_prefix@
top_builddir = @top_builddir@
top_srcdir = @top_srcdir@
-DIR_DOCS = $(top_builddir)/docs
-DIR_EXTENSIONS = $(top_builddir)/extensions
-DIR_GPHOTO2 = $(top_builddir)/lib/libgphoto2-sharp
-DIR_ICONS = $(top_builddir)/icons
-DIR_JPEGTRAN = $(top_builddir)/lib/libjpegtran
-DIR_KEYRING = $(top_builddir)/lib/gnome-keyring-sharp
-DIR_LIBFSPOT = $(top_builddir)/lib/libfspot
-DIR_SEMWEB = $(top_builddir)/lib/semweb
-DIR_SRC = $(top_builddir)/src
DIR_GIOSHARP = $(top_builddir)/lib/gio-sharp/gio
-DIR_GTKSHARPBEANS = $(top_builddir)/lib/gtk-sharp-beans
-DIR_UNIQUESHARP = $(top_builddir)/lib/unique-sharp/unique
-LINK_KEYRING = -r:$(DIR_KEYRING)/gnome-keyring-sharp.dll
-LINK_GPHOTO2 = -r:$(DIR_GPHOTO2)/libgphoto2-sharp.dll
-LINK_SEMWEB = -r:$(DIR_SEMWEB)/SemWeb.dll
LINK_GIOSHARP = -r:$(DIR_GIOSHARP)/gio-sharp.dll
-LINK_GTKSHARPBEANS = -r:$(DIR_GTKSHARPBEANS)/gtk-sharp-beans.dll
-LINK_UNIQUESHARP = -r:$(DIR_UNIQUESHARP)/unique-sharp.dll
CSC_FLAGS = -debug
CSC = $(MCS) $(CSC_FLAGS) -target:exe
CSC_LIB = $(MCS) $(CSC_FLAGS) -target:library
diff --git a/lib/unique-sharp/unique/Makefile.in b/lib/unique-sharp/unique/Makefile.in
index e9781aa..7972695 100644
--- a/lib/unique-sharp/unique/Makefile.in
+++ b/lib/unique-sharp/unique/Makefile.in
@@ -15,6 +15,11 @@
@SET_MAKE@
+# Makefile.include
+# FSpot wide helper
+
+# Directories
+
VPATH = @srcdir@
pkgdatadir = $(datadir)/@PACKAGE@
pkgincludedir = $(includedir)/@PACKAGE@
@@ -40,8 +45,14 @@ subdir = lib/unique-sharp/unique
ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
am__aclocal_m4_deps = $(top_srcdir)/build/m4/shave/shave.m4 \
$(top_srcdir)/build/m4/shamrock/expansions.m4 \
+ $(top_srcdir)/build/m4/shamrock/gnome-doc.m4 \
$(top_srcdir)/build/m4/shamrock/mono.m4 \
+ $(top_srcdir)/build/m4/shamrock/nunit.m4 \
$(top_srcdir)/build/m4/shamrock/programs.m4 \
+ $(top_srcdir)/build/m4/f-spot/flickrnet.m4 \
+ $(top_srcdir)/build/m4/f-spot/gnome-keyring-sharp.m4 \
+ $(top_srcdir)/build/m4/f-spot/gtk-sharp.m4 \
+ $(top_srcdir)/build/m4/f-spot/mono-addins.m4 \
$(top_srcdir)/acinclude.m4 $(top_srcdir)/configure.ac
am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
$(ACLOCAL_M4)
@@ -119,6 +130,8 @@ EXIF_SOVERSION = @EXIF_SOVERSION@
F77 = @F77@
FC = @FC@
FGREP = @FGREP@
+FLICKRNET_CFLAGS = @FLICKRNET_CFLAGS@
+FLICKRNET_LIBS = @FLICKRNET_LIBS@
F_CFLAGS = @F_CFLAGS@
F_LIBS = @F_LIBS@
GAPI2CODEGEN = @GAPI2CODEGEN@
@@ -132,6 +145,8 @@ GCONF_SHARP_LIBS = @GCONF_SHARP_LIBS@
GETTEXT_PACKAGE = @GETTEXT_PACKAGE@
GIO_CFLAGS = @GIO_CFLAGS@
GIO_LIBS = @GIO_LIBS@
+GLIBSHARP_2_12_7_CFLAGS = @GLIBSHARP_2_12_7_CFLAGS@
+GLIBSHARP_2_12_7_LIBS = @GLIBSHARP_2_12_7_LIBS@
GLIBSHARP_CFLAGS = @GLIBSHARP_CFLAGS@
GLIBSHARP_LIBS = @GLIBSHARP_LIBS@
GLIB_CFLAGS = @GLIB_CFLAGS@
@@ -147,6 +162,10 @@ GNOME_SHARP_CFLAGS = @GNOME_SHARP_CFLAGS@
GNOME_SHARP_LIBS = @GNOME_SHARP_LIBS@
GOBJECT_QUERY = @GOBJECT_QUERY@
GREP = @GREP@
+GTKSHARP_A11Y_CFLAGS = @GTKSHARP_A11Y_CFLAGS@
+GTKSHARP_A11Y_LIBS = @GTKSHARP_A11Y_LIBS@
+GTKSHARP_CFLAGS = @GTKSHARP_CFLAGS@
+GTKSHARP_LIBS = @GTKSHARP_LIBS@
HELP_DIR = @HELP_DIR@
ICONS_DIRECTORY = @ICONS_DIRECTORY@
INSTALL = @INSTALL@
@@ -160,14 +179,14 @@ INTLTOOL_EXTRACT = @INTLTOOL_EXTRACT@
INTLTOOL_MERGE = @INTLTOOL_MERGE@
INTLTOOL_PERL = @INTLTOOL_PERL@
INTLTOOL_UPDATE = @INTLTOOL_UPDATE@
+KEYRINGSHARP_CFLAGS = @KEYRINGSHARP_CFLAGS@
+KEYRINGSHARP_LIBS = @KEYRINGSHARP_LIBS@
LCMS_CFLAGS = @LCMS_CFLAGS@
LCMS_LIBS = @LCMS_LIBS@
LD = @LD@
LDFLAGS = @LDFLAGS@
LIBEXIF_VERSION_CHECK_CFLAGS = @LIBEXIF_VERSION_CHECK_CFLAGS@
LIBEXIF_VERSION_CHECK_LIBS = @LIBEXIF_VERSION_CHECK_LIBS@
-LIBGPHOTO2_CFLAGS = @LIBGPHOTO2_CFLAGS@
-LIBGPHOTO2_LIBS = @LIBGPHOTO2_LIBS@
LIBJPEG = @LIBJPEG@
LIBOBJS = @LIBOBJS@
LIBS = @LIBS@
@@ -182,6 +201,12 @@ MCS = @MCS@
MKDIR_P = @MKDIR_P@
MKINSTALLDIRS = @MKINSTALLDIRS@
MONO = @MONO@
+MONO_ADDINS_CFLAGS = @MONO_ADDINS_CFLAGS@
+MONO_ADDINS_GUI_CFLAGS = @MONO_ADDINS_GUI_CFLAGS@
+MONO_ADDINS_GUI_LIBS = @MONO_ADDINS_GUI_LIBS@
+MONO_ADDINS_LIBS = @MONO_ADDINS_LIBS@
+MONO_ADDINS_SETUP_CFLAGS = @MONO_ADDINS_SETUP_CFLAGS@
+MONO_ADDINS_SETUP_LIBS = @MONO_ADDINS_SETUP_LIBS@
MONO_MODULE_CFLAGS = @MONO_MODULE_CFLAGS@
MONO_MODULE_LIBS = @MONO_MODULE_LIBS@
MSGFMT = @MSGFMT@
@@ -192,7 +217,6 @@ NDESK_DBUS_LIBS = @NDESK_DBUS_LIBS@
NM = @NM@
NMEDIT = @NMEDIT@
NUNIT_CFLAGS = @NUNIT_CFLAGS@
-NUNIT_DEFINES = @NUNIT_DEFINES@
NUNIT_LIBS = @NUNIT_LIBS@
OBJC = @OBJC@
OBJDUMP = @OBJDUMP@
@@ -284,24 +308,8 @@ target_alias = @target_alias@
top_build_prefix = @top_build_prefix@
top_builddir = @top_builddir@
top_srcdir = @top_srcdir@
-DIR_DOCS = $(top_builddir)/docs
-DIR_EXTENSIONS = $(top_builddir)/extensions
-DIR_GPHOTO2 = $(top_builddir)/lib/libgphoto2-sharp
-DIR_ICONS = $(top_builddir)/icons
-DIR_JPEGTRAN = $(top_builddir)/lib/libjpegtran
-DIR_KEYRING = $(top_builddir)/lib/gnome-keyring-sharp
-DIR_LIBFSPOT = $(top_builddir)/lib/libfspot
-DIR_SEMWEB = $(top_builddir)/lib/semweb
-DIR_SRC = $(top_builddir)/src
DIR_GIOSHARP = $(top_builddir)/lib/gio-sharp/gio
-DIR_GTKSHARPBEANS = $(top_builddir)/lib/gtk-sharp-beans
-DIR_UNIQUESHARP = $(top_builddir)/lib/unique-sharp/unique
-LINK_KEYRING = -r:$(DIR_KEYRING)/gnome-keyring-sharp.dll
-LINK_GPHOTO2 = -r:$(DIR_GPHOTO2)/libgphoto2-sharp.dll
-LINK_SEMWEB = -r:$(DIR_SEMWEB)/SemWeb.dll
LINK_GIOSHARP = -r:$(DIR_GIOSHARP)/gio-sharp.dll
-LINK_GTKSHARPBEANS = -r:$(DIR_GTKSHARPBEANS)/gtk-sharp-beans.dll
-LINK_UNIQUESHARP = -r:$(DIR_UNIQUESHARP)/unique-sharp.dll
CSC_FLAGS = -debug
CSC = $(MCS) $(CSC_FLAGS) -target:exe
CSC_LIB = $(MCS) $(CSC_FLAGS) -target:library
diff --git a/po/LINGUAS b/po/LINGUAS
index a4f0a9f..eb0670b 100644
--- a/po/LINGUAS
+++ b/po/LINGUAS
@@ -24,6 +24,7 @@ gu
he
hi
hu
+id
it
ja
ka
diff --git a/po/POTFILES.in b/po/POTFILES.in
index 1d79f05..65843b7 100644
--- a/po/POTFILES.in
+++ b/po/POTFILES.in
@@ -1,6 +1,11 @@
# List of source files containing translatable strings.
-# Please keep this file in alphabetical order.
+# Please keep this file in alphabetical order; run ./sort-potfiles
+# after adding files here.
[encoding: UTF-8]
+data/desktop-files/f-spot.desktop.in.in
+data/desktop-files/f-spot.desktop.in.in
+data/desktop-files/f-spot-import.desktop.in.in
+data/desktop-files/f-spot-view.desktop.in.in
extensions/Exporters/CDExport/CDExport.addin.xml
extensions/Exporters/CDExport/CDExport.cs
[type: gettext/glade]extensions/Exporters/CDExport/CDExport.ui
@@ -14,6 +19,7 @@ extensions/Exporters/FlickrExport/FlickrExport.glade
extensions/Exporters/FolderExport/FolderExport.addin.xml
extensions/Exporters/FolderExport/FolderExport.cs
extensions/Exporters/FolderExport/FolderExport.glade
+extensions/Exporters/GalleryExport/FormClient.cs
extensions/Exporters/GalleryExport/GalleryExport.addin.xml
extensions/Exporters/GalleryExport/GalleryExport.cs
extensions/Exporters/GalleryExport/GalleryExport.glade
@@ -32,25 +38,20 @@ extensions/Exporters/TabbloExport/TabbloExport.cs
extensions/Exporters/ZipExport/ZipExport.addin.xml
extensions/Exporters/ZipExport/ZipExport.cs
extensions/Exporters/ZipExport/ZipExport.glade
-extensions/Tools/HashJob/HashJob.cs
extensions/Tools/HashJob/HashJob.addin.xml
+extensions/Tools/HashJob/HashJob.cs
extensions/Tools/LiveWebGallery/GalleryRequestHandler.cs
extensions/Tools/LiveWebGallery/LiveWebGallery.addin.xml
-[type: gettext/glade]extensions/Tools/LiveWebGallery/ui/LiveWebGallery.ui
extensions/Tools/LiveWebGallery/LiveWebGalleryDialog.cs
+[type: gettext/glade]extensions/Tools/LiveWebGallery/ui/LiveWebGallery.ui
extensions/Tools/MergeDb/MergeDb.addin.xml
extensions/Tools/MergeDb/MergeDb.cs
extensions/Tools/MergeDb/MergeDb.glade
extensions/Tools/MergeDb/PickFolderDialog.cs
extensions/Tools/ScreensaverConfig/ScreensaverConfig.addin.xml
[type: gettext/glade]extensions/Tools/ScreensaverConfig/ScreensaverConfigDialog.ui
-f-spot.desktop.in.in
f-spot.schemas.in
-f-spot-import.desktop.in.in
-f-spot-view.desktop.in.in
lib/libfspot/f-jpeg-utils.c
-src/CameraFileSelectionDialog.cs
-src/CameraSelectionDialog.cs
src/Core/App.cs
src/Core/Photo.cs
src/Editors/AutoStretchEditor.cs
@@ -61,11 +62,8 @@ src/Editors/RedEyeEditor.cs
src/Editors/SepiaEditor.cs
src/Editors/SoftFocusEditor.cs
src/Editors/TiltEditor.cs
-src/FileImportBackend.cs
src/Filters/ResizeFilter.cs
src/Filters/SharpFilter.cs
-src/FormClient.cs
-src/FormClient.cs
src/FSpot.addin.xml
src/f-spot.glade
src/FullScreenView.cs
@@ -73,7 +71,7 @@ src/GroupSelector.cs
src/Imaging/Exif.cs
src/Imaging/ImageFile.cs
src/Imaging/IptcFile.cs
-src/ImportCommand.cs
+src/Import/ImportController.cs
src/ItemAction.cs
src/Loupe.cs
src/MainWindow.cs
@@ -105,6 +103,7 @@ src/UI.Dialog/EditExceptionDialog.cs
src/UI.Dialog/EditTagDialog.cs
src/UI.Dialog/EditTagIconDialog.cs
src/UI.Dialog/ExceptionDialog.cs
+src/UI.Dialog/ImportDialog.cs
src/UI.Dialog/PreferenceDialog.cs
src/UI.Dialog/ProgressDialog.cs
src/UI.Dialog/RepairDbDialog.cs
@@ -116,6 +115,8 @@ src/UI.Dialog/ThreadProgressDialog.cs
[type: gettext/glade]src/UI.Dialog/ui/EditTagIconDialog.ui
[type: gettext/glade]src/UI.Dialog/ui/PreferenceDialog.ui
[type: gettext/glade]src/UI.Dialog/ui/RatingFilterDialog.ui
+[type: gettext/glade]src/ui/import.ui
+[type: gettext/glade]src/ui/mail_dialog.ui
[type: gettext/glade]src/ui/main_window.ui
src/Updater.cs
src/Util.cs
diff --git a/po/POTFILES.skip b/po/POTFILES.skip
index a12fd96..34637ff 100644
--- a/po/POTFILES.skip
+++ b/po/POTFILES.skip
@@ -1,6 +1,6 @@
-f-spot.desktop.in
-f-spot-view.desktop.in
-f-spot-import.desktop.in
+data/desktop-files/f-spot.desktop.in
+data/desktop-files/f-spot-view.desktop.in
+data/desktop-files/f-spot-import.desktop.in
src/Widgets/DateEdit.cs
src/InfoDisplay.cs
extensions/Exporters/PicasaWebExport/google-sharp/CaptchaException.cs
@@ -51,4 +51,20 @@ lib/libfspotraw/LibRaw/internal/dcraw_common.cpp
lib/libfspotraw/LibRaw/internal/dcraw_fileio.cpp
lib/libfspotraw/LibRaw/internal/foveon.cpp
lib/gtk-sharp-beans/gtk_generated/Builder.cs
-
+lib/Hyena/src/Mono.Data.Sqlite/Mono.Data.Sqlite/SR.Designer.cs
+lib/Hyena/src/Hyena.Gui/Hyena.Data.Gui/Accessibility/ColumnHeaderCellTextAccessible.cs
+lib/Hyena/src/Hyena.Gui/Hyena.Data.Gui/ListView/ListView_Header.cs
+lib/Hyena/src/Hyena.Gui/Hyena.Gui.Dialogs/ExceptionDialog.cs
+lib/Hyena/src/Hyena.Gui/Hyena.Gui.Dialogs/VersionInformationDialog.cs
+lib/Hyena/src/Hyena.Gui/Hyena.Query.Gui/FileSizeQueryValueEntry.cs
+lib/Hyena/src/Hyena.Gui/Hyena.Query.Gui/QueryBox.cs
+lib/Hyena/src/Hyena.Gui/Hyena.Query.Gui/QueryLimitBox.cs
+lib/Hyena/src/Hyena.Gui/Hyena.Query.Gui/RelativeTimeSpanQueryValueEntry.cs
+lib/Hyena/src/Hyena.Gui/Hyena.Query.Gui/TimeSpanQueryValueEntry.cs
+lib/Hyena/src/Hyena.Gui/Hyena.Widgets/RatingMenuItem.cs
+lib/Hyena/src/Hyena/Hyena.Query/DateQueryValue.cs
+lib/Hyena/src/Hyena/Hyena.Query/EnumQueryValue.cs
+lib/Hyena/src/Hyena/Hyena.Query/IntegerQueryValue.cs
+lib/Hyena/src/Hyena/Hyena.Query/NullQueryValue.cs
+lib/Hyena/src/Hyena/Hyena.Query/RelativeTimeSpanQueryValue.cs
+lib/Hyena/src/Hyena/Hyena.Query/StringQueryValue.cs
diff --git a/po/de.po b/po/de.po
index 5e2be8e..5b73b63 100644
--- a/po/de.po
+++ b/po/de.po
@@ -6,15 +6,16 @@
# Hanno Böck <hanno at hboeck.de>, 2008.
# Arun Persaud <arun at nubati.net>, 2008.
# Mario Blättermann <mariobl at gnome.org>, 2008-2010.
-# Christian Kirbach <Christian.Kirbach at googlemail.com>, 2009.
+# Christian Kirbach <Christian.Kirbach at googlemail.com>, 2009, 2010.
+# Wolfgang Stoeggl <c72578 at yahoo.de>, 2010.
#
msgid ""
msgstr ""
"Project-Id-Version: f-spot\n"
"Report-Msgid-Bugs-To: http://bugzilla.gnome.org/enter_bug.cgi?product=f-"
"spot&component=General\n"
-"POT-Creation-Date: 2010-03-01 17:06+0000\n"
-"PO-Revision-Date: 2010-03-01 21:50+0100\n"
+"POT-Creation-Date: 2010-06-14 16:14+0000\n"
+"PO-Revision-Date: 2010-06-15 18:46+0100\n"
"Last-Translator: Mario Blättermann <mariobl at gnome.org>\n"
"Language-Team: German <gnome-de at gnome.org>\n"
"MIME-Version: 1.0\n"
@@ -24,13 +25,44 @@ msgstr ""
"X-Poedit-Language: German\n"
"X-Poedit-Country: GERMANY\n"
+#: ../data/desktop-files/f-spot.desktop.in.in.h:1
+#: ../data/desktop-files/f-spot-import.desktop.in.in.h:1
+#: ../data/desktop-files/f-spot-view.desktop.in.in.h:1
+#: ../src/ui/main_window.ui.h:11
+msgid "F-Spot"
+msgstr "F-Spot"
+
+#: ../data/desktop-files/f-spot.desktop.in.in.h:2
+#: ../data/desktop-files/f-spot-import.desktop.in.in.h:2
+msgid "F-Spot Photo Manager"
+msgstr "F-Spot Fotoverwaltung"
+
+#: ../data/desktop-files/f-spot.desktop.in.in.h:3
+msgid "Organize, enjoy, and share your photos"
+msgstr "Fotos anschauen, sortieren und weitergeben"
+
+#: ../data/desktop-files/f-spot.desktop.in.in.h:4
+#: ../data/desktop-files/f-spot-import.desktop.in.in.h:4
+msgid "Photo Manager"
+msgstr "Fotoverwaltung"
+
+#: ../data/desktop-files/f-spot-import.desktop.in.in.h:3
+msgid "Import into F-Spot"
+msgstr "In F-Spot importieren"
+
+#: ../data/desktop-files/f-spot-view.desktop.in.in.h:2
+msgid "F-Spot Photo Viewer"
+msgstr "F-Spot Fotobetrachter"
+
+#: ../data/desktop-files/f-spot-view.desktop.in.in.h:3
+msgid "Photo Viewer"
+msgstr "Fotobetrachter"
+
#: ../extensions/Exporters/CDExport/CDExport.addin.xml.h:1
msgid "_CD..."
msgstr "_CD …"
#: ../extensions/Exporters/CDExport/CDExport.cs:162
-#: ../extensions/Exporters/FolderExport/FolderExport.cs:392
-#: ../src/CameraFileSelectionDialog.cs:199
msgid "Transferring Pictures"
msgstr "Bilder werden übertragen"
@@ -41,37 +73,34 @@ msgstr "Übertragung des Bilds »{0}« auf CD"
#. Note for translators: This indicates the current photo is photo {0} of {1} out of photos
#: ../extensions/Exporters/CDExport/CDExport.cs:220
-#: ../extensions/Exporters/FlickrExport/FlickrExport.cs:349
-#: ../extensions/Exporters/FolderExport/FolderExport.cs:245
+#: ../extensions/Exporters/FlickrExport/FlickrExport.cs:350
+#: ../extensions/Exporters/FolderExport/FolderExport.cs:220
#: ../extensions/Exporters/GalleryExport/GalleryExport.cs:781
-#: ../src/MainWindow.cs:673 ../src/UI.Dialog/AdjustTimeDialog.cs:129
-#: ../src/UI.Dialog/ProgressDialog.cs:92
+#: ../src/MainWindow.cs:644 ../src/UI.Dialog/AdjustTimeDialog.cs:130
+#: ../src/UI.Dialog/ProgressDialog.cs:90
#, csharp-format
msgid "{0} of {1}"
msgstr "{0} von {1}"
#: ../extensions/Exporters/CDExport/CDExport.cs:233
-#: ../extensions/Exporters/FacebookExport/FacebookExport.cs:380
-#: ../extensions/Exporters/FlickrExport/FlickrExport.cs:379
-#: ../extensions/Exporters/FolderExport/FolderExport.cs:285
+#: ../extensions/Exporters/FacebookExport/FacebookExport.cs:377
+#: ../extensions/Exporters/FlickrExport/FlickrExport.cs:380
#: ../extensions/Exporters/GalleryExport/GalleryExport.cs:806
-#: ../extensions/Exporters/PicasaWebExport/PicasaWebExport.cs:704
+#: ../extensions/Exporters/PicasaWebExport/PicasaWebExport.cs:705
#: ../extensions/Exporters/SmugMugExport/SmugMugExport.cs:607
msgid "Done Sending Photos"
msgstr "Verschicken der Fotos abgeschlossen"
#: ../extensions/Exporters/CDExport/CDExport.cs:235
-#: ../extensions/Exporters/FolderExport/FolderExport.cs:287
msgid "Transfer Complete"
msgstr "Übertragung abgeschlossen"
#: ../extensions/Exporters/CDExport/CDExport.cs:242
-#: ../extensions/Exporters/FolderExport/FolderExport.cs:292
msgid "Error While Transferring"
msgstr "Fehler bei der Übertragung"
#: ../extensions/Exporters/CDExport/CDExport.cs:250
-#: ../extensions/Exporters/FolderExport/FolderExport.cs:311
+#: ../extensions/Exporters/FolderExport/FolderExport.cs:278
msgid "Error Transferring"
msgstr "Übertragungsfehler"
@@ -81,7 +110,7 @@ msgstr "wird kopiert …"
#: ../extensions/Exporters/CDExport/CDExport.ui.h:1
msgid "<b><i>There is some previously scheduled items to write</i></b>"
-msgstr "<b><i>Es exisitieren schon Daten, die gespeichert werden müssen</i></b>"
+msgstr "<b><i>Es existieren schon Daten, die gespeichert werden müssen</i></b>"
#: ../extensions/Exporters/CDExport/CDExport.ui.h:2
msgid "<b>Photos to Burn</b>"
@@ -91,7 +120,7 @@ msgstr "<b>Zu schreibende Fotos</b>"
#: ../extensions/Exporters/FolderExport/FolderExport.glade.h:7
#: ../extensions/Exporters/GalleryExport/GalleryExport.glade.h:7
#: ../extensions/Exporters/SmugMugExport/SmugMugExport.glade.h:5
-#: ../src/f-spot.glade.h:28
+#: ../src/ui/mail_dialog.ui.h:10
msgid "Autorotate"
msgstr "Automatisch drehen"
@@ -100,7 +129,7 @@ msgid "Create CD"
msgstr "CD erstellen"
#: ../extensions/Exporters/CDExport/CDExport.ui.h:5
-#: ../src/Widgets/InfoBox.cs:221
+#: ../src/Widgets/InfoBox.cs:222
msgid "Size"
msgstr "Größe"
@@ -119,7 +148,7 @@ msgstr "Vorher geplante Dateien durch_suchen"
#: ../extensions/Exporters/PicasaWebExport/PicasaWebExport.glade.h:20
#: ../extensions/Exporters/SmugMugExport/SmugMugExport.glade.h:12
#: ../extensions/Exporters/TabbloExport/ui/TabbloExport.ui.h:9
-#: ../src/f-spot.glade.h:95
+#: ../src/f-spot.glade.h:41
msgid "_Export"
msgstr "E_xportieren"
@@ -149,41 +178,33 @@ msgstr ""
"Sobald Sie von Facebook dazu geführt werden, zu dieser Anwendung "
"zurückzukehren, klicken Sie auf »OK«."
-#: ../extensions/Exporters/FacebookExport/FacebookExport.cs:280
+#: ../extensions/Exporters/FacebookExport/FacebookExport.cs:281
msgid "Too many images to export"
msgstr "Zu viele Fotos zum Exportieren"
-#: ../extensions/Exporters/FacebookExport/FacebookExport.cs:281
+#: ../extensions/Exporters/FacebookExport/FacebookExport.cs:282
#, csharp-format
msgid ""
"Facebook only permits {0} photographs per album. Please refine your "
"selection and try again."
msgstr ""
-"Facebook erlaubt nur {0} Fotos per Album. Bitte verkleinern Sie ihre Auswahl "
+"Facebook erlaubt nur {0} Fotos per Album. Bitte verkleinern Sie Ihre Auswahl "
"und versuchen Sie es erneut."
-#: ../extensions/Exporters/FacebookExport/FacebookExport.cs:298
-#: ../extensions/Exporters/FlickrExport/FlickrExport.cs:475
-#: ../extensions/Exporters/GalleryExport/GalleryExport.cs:730
-#: ../extensions/Exporters/PicasaWebExport/PicasaWebExport.cs:597
-#: ../extensions/Exporters/SmugMugExport/SmugMugExport.cs:522
-msgid "Uploading Pictures"
-msgstr "Bilder hochladen"
-
-#: ../extensions/Exporters/FacebookExport/FacebookExport.cs:319
+#: ../extensions/Exporters/FacebookExport/FacebookExport.cs:297
msgid "Album must have a name"
msgstr "Album muss einen Namen haben"
-#: ../extensions/Exporters/FacebookExport/FacebookExport.cs:320
+#: ../extensions/Exporters/FacebookExport/FacebookExport.cs:298
msgid "Please name your album or choose an existing album."
msgstr ""
"Bitte geben Sie den Namen des Albums an oder wählen Sie ein existierendes."
-#: ../extensions/Exporters/FacebookExport/FacebookExport.cs:334
+#: ../extensions/Exporters/FacebookExport/FacebookExport.cs:312
msgid "Creating a new album failed"
msgstr "Erstellung eines neuen Albums ist fehlgeschlagen"
-#: ../extensions/Exporters/FacebookExport/FacebookExport.cs:335
+#: ../extensions/Exporters/FacebookExport/FacebookExport.cs:313
#, csharp-format
msgid ""
"An error occurred creating a new album.\n"
@@ -194,45 +215,53 @@ msgstr ""
"\n"
"{0}"
-#: ../extensions/Exporters/FacebookExport/FacebookExport.cs:357
-#: ../extensions/Exporters/PicasaWebExport/PicasaWebExport.cs:660
+#: ../extensions/Exporters/FacebookExport/FacebookExport.cs:326
+#: ../extensions/Exporters/FlickrExport/FlickrExport.cs:476
+#: ../extensions/Exporters/GalleryExport/GalleryExport.cs:730
+#: ../extensions/Exporters/PicasaWebExport/PicasaWebExport.cs:598
+#: ../extensions/Exporters/SmugMugExport/SmugMugExport.cs:522
+msgid "Uploading Pictures"
+msgstr "Bilder hochladen"
+
+#: ../extensions/Exporters/FacebookExport/FacebookExport.cs:354
+#: ../extensions/Exporters/PicasaWebExport/PicasaWebExport.cs:661
#: ../extensions/Exporters/SmugMugExport/SmugMugExport.cs:565
#, csharp-format
msgid "Uploading picture \"{0}\" ({1} of {2})"
msgstr "Hochladen des Bildes »{0}« ({1} von {2})"
-#: ../extensions/Exporters/FacebookExport/FacebookExport.cs:371
+#: ../extensions/Exporters/FacebookExport/FacebookExport.cs:368
#, csharp-format
msgid "Error Uploading To Facebook: {0}"
msgstr "Fehler beim Hochladen zu Facebook: {0}"
-#: ../extensions/Exporters/FacebookExport/FacebookExport.cs:372
-#: ../extensions/Exporters/FlickrExport/FlickrExport.cs:370
-#: ../extensions/Exporters/FolderExport/FolderExport.cs:250
+#: ../extensions/Exporters/FacebookExport/FacebookExport.cs:369
+#: ../extensions/Exporters/FlickrExport/FlickrExport.cs:371
+#: ../extensions/Exporters/FolderExport/FolderExport.cs:226
#: ../extensions/Exporters/GalleryExport/GalleryExport.cs:797
-#: ../extensions/Exporters/PicasaWebExport/PicasaWebExport.cs:693
+#: ../extensions/Exporters/PicasaWebExport/PicasaWebExport.cs:694
#: ../extensions/Exporters/SmugMugExport/SmugMugExport.cs:596
#: ../extensions/Exporters/TabbloExport/TabbloExport.cs:319
msgid "Error"
msgstr "Fehler"
-#: ../extensions/Exporters/FacebookExport/FacebookExport.cs:382
-#: ../extensions/Exporters/FlickrExport/FlickrExport.cs:381
+#: ../extensions/Exporters/FacebookExport/FacebookExport.cs:379
+#: ../extensions/Exporters/FlickrExport/FlickrExport.cs:382
#: ../extensions/Exporters/GalleryExport/GalleryExport.cs:808
-#: ../extensions/Exporters/PicasaWebExport/PicasaWebExport.cs:706
+#: ../extensions/Exporters/PicasaWebExport/PicasaWebExport.cs:707
#: ../extensions/Exporters/SmugMugExport/SmugMugExport.cs:609
msgid "Upload Complete"
msgstr "Hochladen abgeschlossen"
-#: ../extensions/Exporters/FacebookExport/FacebookExport.cs:385
+#: ../extensions/Exporters/FacebookExport/FacebookExport.cs:382
msgid "Visit F-Spot group on Facebook"
msgstr "F-Spot-Gruppe auf Facebook besuchen"
-#: ../extensions/Exporters/FacebookExport/FacebookExportDialog.cs:211
+#: ../extensions/Exporters/FacebookExport/FacebookExportDialog.cs:212
msgid "Waiting for authentication"
msgstr "Es wird auf Legitimation gewartet"
-#: ../extensions/Exporters/FacebookExport/FacebookExportDialog.cs:212
+#: ../extensions/Exporters/FacebookExport/FacebookExportDialog.cs:213
msgid ""
"F-Spot will now launch your browser so that you can log into Facebook.\n"
"\n"
@@ -246,15 +275,15 @@ msgstr ""
"Sobald Sie von Facebook dazu geführt werden, zu dieser Anwendung "
"zurückzukehren, klicken Sie auf »OK«."
-#: ../extensions/Exporters/FacebookExport/FacebookExportDialog.cs:217
+#: ../extensions/Exporters/FacebookExport/FacebookExportDialog.cs:218
msgid "Authenticating..."
msgstr "Legitimierung …"
-#: ../extensions/Exporters/FacebookExport/FacebookExportDialog.cs:227
+#: ../extensions/Exporters/FacebookExport/FacebookExportDialog.cs:228
msgid "Error logging into Facebook"
msgstr "Fehler beim Anmelden zu Facebook"
-#: ../extensions/Exporters/FacebookExport/FacebookExportDialog.cs:228
+#: ../extensions/Exporters/FacebookExport/FacebookExportDialog.cs:229
msgid ""
"There was a problem logging into Facebook. Check your credentials and try "
"again."
@@ -262,23 +291,23 @@ msgstr ""
"Es gab ein Problem beim Anmelden in Facebook. Überprüfen Sie Ihre Daten und "
"versuchen Sie es erneut."
-#: ../extensions/Exporters/FacebookExport/FacebookExportDialog.cs:237
+#: ../extensions/Exporters/FacebookExport/FacebookExportDialog.cs:238
msgid "Authorizing Session"
msgstr "Sitzung wird legitimiert"
-#: ../extensions/Exporters/FacebookExport/FacebookExportDialog.cs:246
+#: ../extensions/Exporters/FacebookExport/FacebookExportDialog.cs:247
msgid "Session established, fetching user info..."
msgstr "Sitzung ist gestartet, Benutzerinformationen werden geholt …"
-#: ../extensions/Exporters/FacebookExport/FacebookExportDialog.cs:252
+#: ../extensions/Exporters/FacebookExport/FacebookExportDialog.cs:253
msgid "Session established, fetching friend list..."
msgstr "Sitzung ist gestartet, Freundesliste wird geholt …"
-#: ../extensions/Exporters/FacebookExport/FacebookExportDialog.cs:262
+#: ../extensions/Exporters/FacebookExport/FacebookExportDialog.cs:263
msgid "Session established, fetching friend details..."
msgstr "Sitzung ist gestartet, Details zu Freunden werden geholt …"
-#: ../extensions/Exporters/FacebookExport/FacebookExportDialog.cs:272
+#: ../extensions/Exporters/FacebookExport/FacebookExportDialog.cs:275
msgid "Session established, fetching photo albums..."
msgstr "Sitzung ist gestartet, Fotoalben werden geholt …"
@@ -288,11 +317,11 @@ msgstr "Sitzung ist gestartet, Fotoalben werden geholt …"
msgid "{0} {1} is logged into Facebook"
msgstr "{0} {1} ist bei Facebook angemeldet"
-#: ../extensions/Exporters/FacebookExport/FacebookExportDialog.cs:291
+#: ../extensions/Exporters/FacebookExport/FacebookExportDialog.cs:294
msgid "Facebook Connection Error"
msgstr "Facebook-Verbindungsfehler"
-#: ../extensions/Exporters/FacebookExport/FacebookExportDialog.cs:292
+#: ../extensions/Exporters/FacebookExport/FacebookExportDialog.cs:295
#, csharp-format
msgid ""
"There was an error when downloading your information from Facebook.\n"
@@ -303,7 +332,7 @@ msgstr ""
"\n"
"Facebook antwortete: {0}"
-#: ../extensions/Exporters/FacebookExport/FacebookExportDialog.cs:321
+#: ../extensions/Exporters/FacebookExport/FacebookExportDialog.cs:324
msgid "You are not logged in."
msgstr "Sie sind nicht angemeldet."
@@ -345,7 +374,7 @@ msgid "Logout"
msgstr "Abmelden"
#: ../extensions/Exporters/FacebookExport/FacebookExport.ui.h:10
-#: ../src/Widgets/InfoBox.cs:212
+#: ../src/Widgets/InfoBox.cs:213
msgid "Name"
msgstr "Name"
@@ -381,12 +410,12 @@ msgstr "_Flickr …"
msgid "_Zooomr..."
msgstr "_Zooomr …"
-#: ../extensions/Exporters/FlickrExport/FlickrExport.cs:105
+#: ../extensions/Exporters/FlickrExport/FlickrExport.cs:106
#: ../extensions/Exporters/FlickrExport/FlickrExport.glade.h:5
msgid "Authorize"
msgstr "Legitimieren"
-#: ../extensions/Exporters/FlickrExport/FlickrExport.cs:111
+#: ../extensions/Exporters/FlickrExport/FlickrExport.cs:112
#, csharp-format
msgid ""
"Return to this window after you have finished the authorization process on "
@@ -396,60 +425,59 @@ msgstr ""
"durchgeführt haben, und klicken Sie auf den »Legitimierung vervollständigen«-"
"Knopf unten"
-#: ../extensions/Exporters/FlickrExport/FlickrExport.cs:112
+#: ../extensions/Exporters/FlickrExport/FlickrExport.cs:113
msgid "Complete Authorization"
msgstr "Legitimierung vervollständigen"
-#: ../extensions/Exporters/FlickrExport/FlickrExport.cs:117
+#: ../extensions/Exporters/FlickrExport/FlickrExport.cs:118
#, csharp-format
msgid "Logging into {0}"
msgstr "Logge auf {0} ein"
-#: ../extensions/Exporters/FlickrExport/FlickrExport.cs:118
+#: ../extensions/Exporters/FlickrExport/FlickrExport.cs:119
msgid "Checking credentials..."
msgstr "Eingaben überprüfen …"
-#: ../extensions/Exporters/FlickrExport/FlickrExport.cs:125
+#: ../extensions/Exporters/FlickrExport/FlickrExport.cs:126
#, csharp-format
msgid "Welcome {0} you are connected to {1}"
-msgstr "Wilkommen {0}, Sie sind nun verbunden mit {1}"
+msgstr "Willkommen {0}, Sie sind nun verbunden mit {1}"
-#: ../extensions/Exporters/FlickrExport/FlickrExport.cs:128
+#: ../extensions/Exporters/FlickrExport/FlickrExport.cs:129
#, csharp-format
msgid "Sign in as a different user"
msgstr "Als anderer Benutzer anmelden"
-#: ../extensions/Exporters/FlickrExport/FlickrExport.cs:133
+#: ../extensions/Exporters/FlickrExport/FlickrExport.cs:134
#, csharp-format
msgid "Used {0} of your allowed {1} monthly quota"
-msgstr "{0} von ihrer monatlichen Quota von {1} in Benutzung"
+msgstr "{0} von Ihrer monatlichen Quota von {1} in Benutzung"
-#: ../extensions/Exporters/FlickrExport/FlickrExport.cs:297
+#: ../extensions/Exporters/FlickrExport/FlickrExport.cs:298
msgid "Unable to log on"
msgstr "Anmeldung fehlgeschlagen"
-#: ../extensions/Exporters/FlickrExport/FlickrExport.cs:317
+#: ../extensions/Exporters/FlickrExport/FlickrExport.cs:318
#, csharp-format
msgid "Waiting for response {0} of {1}"
msgstr "Warte auf Antwort {0} von {1}"
-#: ../extensions/Exporters/FlickrExport/FlickrExport.cs:344
-#: ../extensions/Exporters/FolderExport/FolderExport.cs:242
+#: ../extensions/Exporters/FlickrExport/FlickrExport.cs:345
#: ../extensions/Exporters/GalleryExport/GalleryExport.cs:777
#, csharp-format
msgid "Uploading picture \"{0}\""
msgstr "Hochladen des Bilds »{0}«"
-#: ../extensions/Exporters/FlickrExport/FlickrExport.cs:367
+#: ../extensions/Exporters/FlickrExport/FlickrExport.cs:368
#, csharp-format
msgid "Error Uploading To {0}: {1}"
msgstr "Fehler beim Hochladen von {0}: {1}"
-#: ../extensions/Exporters/FlickrExport/FlickrExport.cs:454
+#: ../extensions/Exporters/FlickrExport/FlickrExport.cs:455
msgid "Unable to log on."
msgstr "Anmeldung ist fehlgeschlagen."
-#: ../extensions/Exporters/FlickrExport/FlickrExport.cs:455
+#: ../extensions/Exporters/FlickrExport/FlickrExport.cs:456
#, csharp-format
msgid ""
"F-Spot was unable to log on to {0}. Make sure you have given the "
@@ -459,7 +487,6 @@ msgstr ""
"in der Internet-Browser-Oberfläche {0} legitimiert haben."
#: ../extensions/Exporters/FlickrExport/FlickrExport.glade.h:1
-#: ../src/f-spot.glade.h:8
msgid "<b>Account</b>"
msgstr "<b>Konto</b>"
@@ -469,7 +496,7 @@ msgstr "<b>Konto</b>"
#: ../extensions/Exporters/PicasaWebExport/PicasaWebExport.glade.h:2
#: ../extensions/Exporters/SmugMugExport/SmugMugExport.glade.h:2
#: ../extensions/Exporters/TabbloExport/ui/TabbloExport.ui.h:2
-#: ../src/f-spot.glade.h:14 ../src/UI.Dialog/ui/AdjustTimeDialog.ui.h:5
+#: ../src/UI.Dialog/ui/AdjustTimeDialog.ui.h:5 ../src/ui/mail_dialog.ui.h:6
msgid "<b>Photos</b>"
msgstr "<b>Fotos</b>"
@@ -478,7 +505,7 @@ msgstr "<b>Fotos</b>"
#: ../extensions/Exporters/GalleryExport/GalleryExport.glade.h:4
#: ../extensions/Exporters/PicasaWebExport/PicasaWebExport.glade.h:4
#: ../extensions/Exporters/SmugMugExport/SmugMugExport.glade.h:4
-#: ../src/f-spot.glade.h:16
+#: ../src/ui/mail_dialog.ui.h:8
msgid "<b>Style</b>"
msgstr "<b>Stil</b>"
@@ -491,7 +518,6 @@ msgstr "<b>Betrachtungsrechte</b>"
#: ../extensions/Exporters/PicasaWebExport/PicasaWebExport.glade.h:9
#: ../extensions/Exporters/SmugMugExport/SmugMugExport.glade.h:6
#: ../extensions/Exporters/TabbloExport/ui/TabbloExport.ui.h:5
-#: ../src/f-spot.glade.h:44
msgid "Export"
msgstr "Exportieren"
@@ -535,7 +561,6 @@ msgstr "Sichtbar für Freunde"
#: ../extensions/Exporters/FlickrExport/FlickrExport.glade.h:16
#: ../extensions/Exporters/PicasaWebExport/PicasaWebExport.glade.h:21
-#: ../src/f-spot.glade.h:96
msgid "_Export tags"
msgstr "Markierungen e_xportieren"
@@ -544,7 +569,6 @@ msgstr "Markierungen e_xportieren"
#: ../extensions/Exporters/GalleryExport/GalleryExport.glade.h:21
#: ../extensions/Exporters/PicasaWebExport/PicasaWebExport.glade.h:25
#: ../extensions/Exporters/SmugMugExport/SmugMugExport.glade.h:15
-#: ../src/f-spot.glade.h:109
msgid "_Resize to: "
msgstr "_Größe ändern auf: "
@@ -557,7 +581,6 @@ msgstr "Die Fotos nach dem Hochladen im Browser an_zeigen"
#: ../extensions/Exporters/GalleryExport/GalleryExport.glade.h:24
#: ../extensions/Exporters/PicasaWebExport/PicasaWebExport.glade.h:27
#: ../extensions/Exporters/SmugMugExport/SmugMugExport.glade.h:17
-#: ../src/f-spot.glade.h:125
msgid "pixels"
msgstr "Pixel"
@@ -565,80 +588,98 @@ msgstr "Pixel"
msgid "F_older..."
msgstr "_Ordner …"
-#: ../extensions/Exporters/FolderExport/FolderExport.cs:140
+#: ../extensions/Exporters/FolderExport/FolderExport.cs:120
msgid "Select Export Folder"
msgstr "Exportordner wählen"
-#: ../extensions/Exporters/FolderExport/FolderExport.cs:198
+#: ../extensions/Exporters/FolderExport/FolderExport.cs:173
msgid "Building Gallery"
msgstr "Galerie wird erstellt"
-#: ../extensions/Exporters/FolderExport/FolderExport.cs:248
+#: ../extensions/Exporters/FolderExport/FolderExport.cs:217
+#, csharp-format
+msgid "Exporting \"{0}\"..."
+msgstr "»{0}« wird exportiert …"
+
+#: ../extensions/Exporters/FolderExport/FolderExport.cs:224
+#, csharp-format
+msgid "Error Copying \"{0}\" to Gallery:{2}{1}"
+msgstr "Fehler beim Kopieren von »{0}« in die Galerie:{2}{1}"
+
+#: ../extensions/Exporters/FolderExport/FolderExport.cs:250
#, csharp-format
-msgid "Error uploading picture \"{0}\" to Gallery:{2}{1}"
-msgstr "Fehler beim Hochladen des Bildes »{0}« in die Gallery:{2}{1}"
+msgid "Transferring to \"{0}\""
+msgstr "Übertragung nach »{0}«"
-#: ../extensions/Exporters/FolderExport/FolderExport.cs:333
-msgid "Error: Error while transferring; Aborting"
-msgstr "Fehler: Fehler bei der Übertragung, abgebrochen"
+#: ../extensions/Exporters/FolderExport/FolderExport.cs:251
+msgid "Transferring..."
+msgstr "Übertragung läuft …"
-#: ../extensions/Exporters/FolderExport/FolderExport.cs:336
-msgid "Error: File Already Exists; Aborting"
-msgstr "Fehler: Datei ist bereits vorhanden, abgebrochen"
+#. No need to check result here as if result is not true, an Exception will be thrown before
+#: ../extensions/Exporters/FolderExport/FolderExport.cs:256
+msgid "Export Complete."
+msgstr "Export abgeschlossen."
+
+#: ../extensions/Exporters/FolderExport/FolderExport.cs:258
+msgid "Exporting Photos Completed."
+msgstr "Exportieren der Fotos ist abgeschlossen."
+
+#: ../extensions/Exporters/FolderExport/FolderExport.cs:325
+msgid "Exporting Photos"
+msgstr "Fotos werden exportiert"
#. Note for translators: light as clear, opposite as dark
-#: ../extensions/Exporters/FolderExport/FolderExport.cs:807
+#: ../extensions/Exporters/FolderExport/FolderExport.cs:743
msgid "Light"
msgstr "Hell"
-#: ../extensions/Exporters/FolderExport/FolderExport.cs:808
+#: ../extensions/Exporters/FolderExport/FolderExport.cs:744
msgid "Dark"
msgstr "Dunkel"
#. Abbreviation of previous
-#: ../extensions/Exporters/FolderExport/FolderExport.cs:988
+#: ../extensions/Exporters/FolderExport/FolderExport.cs:924
msgid "Prev"
msgstr "Vorheriges"
-#: ../extensions/Exporters/FolderExport/FolderExport.cs:990
-#: ../extensions/Exporters/FolderExport/FolderExport.cs:1231
-#: ../src/CameraFileSelectionDialog.cs:82
+#: ../extensions/Exporters/FolderExport/FolderExport.cs:926
+#: ../extensions/Exporters/FolderExport/FolderExport.cs:1167
msgid "Index"
msgstr "Index"
#. Don't care otherwise, Tags sounds reasonable
-#: ../extensions/Exporters/FolderExport/FolderExport.cs:993
-#: ../extensions/Exporters/FolderExport/FolderExport.cs:1165
-#: ../extensions/Exporters/FolderExport/FolderExport.cs:1205
-#: ../src/MainWindow.cs:376 ../src/Widgets/Sidebar.cs:56
+#: ../extensions/Exporters/FolderExport/FolderExport.cs:929
+#: ../extensions/Exporters/FolderExport/FolderExport.cs:1101
+#: ../extensions/Exporters/FolderExport/FolderExport.cs:1141
+#: ../src/MainWindow.cs:348 ../src/Widgets/Sidebar.cs:56
msgid "Tags"
msgstr "Markierungen"
-#: ../extensions/Exporters/FolderExport/FolderExport.cs:996
-#: ../src/f-spot.glade.h:58 ../src/ItemAction.cs:102
+#: ../extensions/Exporters/FolderExport/FolderExport.cs:932
+#: ../src/ItemAction.cs:102
msgid "Next"
msgstr "Nächstes"
-#: ../extensions/Exporters/FolderExport/FolderExport.cs:1100
+#: ../extensions/Exporters/FolderExport/FolderExport.cs:1036
msgid "Gallery generated by"
msgstr "Galerie erstellt mit"
-#: ../extensions/Exporters/FolderExport/FolderExport.cs:1140
+#: ../extensions/Exporters/FolderExport/FolderExport.cs:1076
msgid "Show Styles"
msgstr "Stile anzeigen"
-#: ../extensions/Exporters/FolderExport/FolderExport.cs:1141
+#: ../extensions/Exporters/FolderExport/FolderExport.cs:1077
msgid "Hide Styles"
msgstr "Stile verbergen"
-#: ../extensions/Exporters/FolderExport/FolderExport.cs:1176
-#: ../extensions/Exporters/FolderExport/FolderExport.cs:1177
-#: ../src/ui/main_window.ui.h:24
+#: ../extensions/Exporters/FolderExport/FolderExport.cs:1112
+#: ../extensions/Exporters/FolderExport/FolderExport.cs:1113
+#: ../src/ui/main_window.ui.h:25
msgid "Tags: "
msgstr "Markierungen: "
-#: ../extensions/Exporters/FolderExport/FolderExport.cs:1308
-#: ../extensions/Exporters/FolderExport/FolderExport.cs:1441
+#: ../extensions/Exporters/FolderExport/FolderExport.cs:1244
+#: ../extensions/Exporters/FolderExport/FolderExport.cs:1377
msgid "Page:"
msgstr "Seite:"
@@ -647,7 +688,6 @@ msgid "\n"
msgstr "\n"
#: ../extensions/Exporters/FolderExport/FolderExport.glade.h:3
-#: ../src/f-spot.glade.h:11
msgid "<b>Destination</b>"
msgstr "<b>Ziel</b>"
@@ -695,11 +735,15 @@ msgstr "_Ordner:"
msgid "_Save the files only"
msgstr "Nur die Dateien _speichern"
+#: ../extensions/Exporters/GalleryExport/FormClient.cs:294
+msgid "Unhandled exception"
+msgstr "Unverarbeitete Ausnahme"
+
#: ../extensions/Exporters/GalleryExport/GalleryExport.addin.xml.h:1
msgid "Web _Gallery..."
msgstr "_Web-Galerie …"
-#: ../extensions/Exporters/GalleryExport/GalleryExport.cs:52
+#: ../extensions/Exporters/GalleryExport/GalleryExport.cs:53
msgid ""
"Cannot connect to a Gallery for which the version is unknown.\n"
"Please check that you have Remote plugin 1.0.8 or later"
@@ -720,7 +764,7 @@ msgstr "Die Galerie-Adresse scheint ungültig zu sein"
#: ../extensions/Exporters/GalleryExport/GalleryExport.cs:429
#: ../extensions/Exporters/GalleryExport/GalleryExport.cs:440
msgid "Error while connecting to Gallery"
-msgstr "Fehler beim Verbinden zur Gallery"
+msgstr "Fehler beim Verbinden zur Galerie"
#: ../extensions/Exporters/GalleryExport/GalleryExport.cs:403
#: ../extensions/Exporters/GalleryExport/GalleryExport.cs:430
@@ -739,7 +783,7 @@ msgid ""
"There is already a Gallery with the same name in your registered Galleries. "
"Please choose a unique name."
msgstr ""
-"In ihren registrierten Galerien ist dieser Name bereits vorhanden. Bitte "
+"In Ihren registrierten Galerien ist dieser Name bereits vorhanden. Bitte "
"wählen Sie einen eindeutigen Namen."
#: ../extensions/Exporters/GalleryExport/GalleryExport.cs:528
@@ -764,25 +808,25 @@ msgid "Error uploading picture \"{0}\" to Gallery: {1}"
msgstr "Fehler beim Hochladen des Bildes »{0}« in die Galerie: {1}"
#: ../extensions/Exporters/GalleryExport/GalleryExport.cs:824
-#: ../extensions/Exporters/PicasaWebExport/PicasaWebExport.cs:727
+#: ../extensions/Exporters/PicasaWebExport/PicasaWebExport.cs:728
#: ../extensions/Exporters/SmugMugExport/SmugMugExport.cs:630
msgid "(No Gallery)"
msgstr "(Keine Galerie)"
#: ../extensions/Exporters/GalleryExport/GalleryExport.cs:916
-#: ../extensions/Exporters/PicasaWebExport/PicasaWebExport.cs:849
+#: ../extensions/Exporters/PicasaWebExport/PicasaWebExport.cs:850
#: ../extensions/Exporters/SmugMugExport/SmugMugExport.cs:726
msgid "(Not Connected)"
msgstr "(Nicht verbunden)"
#: ../extensions/Exporters/GalleryExport/GalleryExport.cs:917
-#: ../extensions/Exporters/PicasaWebExport/PicasaWebExport.cs:850
+#: ../extensions/Exporters/PicasaWebExport/PicasaWebExport.cs:851
#: ../extensions/Exporters/SmugMugExport/SmugMugExport.cs:727
msgid "(No Albums)"
msgstr "(Keine Alben)"
#: ../extensions/Exporters/GalleryExport/GalleryExport.cs:969
-#: ../extensions/Exporters/PicasaWebExport/PicasaWebExport.cs:915
+#: ../extensions/Exporters/PicasaWebExport/PicasaWebExport.cs:916
#: ../extensions/Exporters/SmugMugExport/SmugMugExport.cs:768
msgid "No account selected"
msgstr "Kein Benutzerkonto ausgewählt"
@@ -790,12 +834,10 @@ msgstr "Kein Benutzerkonto ausgewählt"
#: ../extensions/Exporters/GalleryExport/GalleryExport.glade.h:1
#: ../extensions/Exporters/PicasaWebExport/PicasaWebExport.glade.h:1
#: ../extensions/Exporters/SmugMugExport/SmugMugExport.glade.h:1
-#: ../src/f-spot.glade.h:9
msgid "<b>Album</b>"
msgstr "<b>Album</b>"
#: ../extensions/Exporters/GalleryExport/GalleryExport.glade.h:2
-#: ../src/f-spot.glade.h:12
msgid "<b>Gallery</b>"
msgstr "<b>Galerie</b>"
@@ -838,7 +880,6 @@ msgstr "_Beschreibung:"
#: ../extensions/Exporters/GalleryExport/GalleryExport.glade.h:16
#: ../extensions/Exporters/PicasaWebExport/PicasaWebExport.glade.h:22
#: ../extensions/Exporters/SmugMugExport/SmugMugExport.glade.h:13
-#: ../src/f-spot.glade.h:97
msgid "_Export to Album:"
msgstr "_Export in Album:"
@@ -873,20 +914,20 @@ msgstr "_Titel:"
msgid "_Username:"
msgstr "_Benutzername:"
-#: ../extensions/Exporters/GalleryExport/GalleryRemote.cs:361
+#: ../extensions/Exporters/GalleryExport/GalleryRemote.cs:362
msgid "Error reading server response"
msgstr "Fehler beim Lesen der Server-Antwort"
#. failed to find the response
-#: ../extensions/Exporters/GalleryExport/GalleryRemote.cs:373
+#: ../extensions/Exporters/GalleryExport/GalleryRemote.cs:374
msgid "Server returned response without Gallery content"
-msgstr "Sever antwortete ohne Galerie-Inhalt"
+msgstr "Server antwortete ohne Galerie-Inhalt"
-#: ../extensions/Exporters/GalleryExport/GalleryRemote.cs:710
+#: ../extensions/Exporters/GalleryExport/GalleryRemote.cs:711
msgid "Error while creating new album"
msgstr "Fehler beim Erstellen eines neuen Albums"
-#: ../extensions/Exporters/GalleryExport/GalleryRemote.cs:711
+#: ../extensions/Exporters/GalleryExport/GalleryRemote.cs:712
#, csharp-format
msgid ""
"The following error was encountered while attempting to perform the requested "
@@ -901,39 +942,39 @@ msgstr ""
msgid "_PicasaWeb..."
msgstr "_PicasaWeb …"
-#: ../extensions/Exporters/PicasaWebExport/PicasaWebExport.cs:441
+#: ../extensions/Exporters/PicasaWebExport/PicasaWebExport.cs:442
msgid "Error while creating Album"
msgstr "Fehler beim Erstellen des Albums"
-#: ../extensions/Exporters/PicasaWebExport/PicasaWebExport.cs:442
+#: ../extensions/Exporters/PicasaWebExport/PicasaWebExport.cs:443
#, csharp-format
msgid ""
"The following error was encountered while attempting to create an album: {0}"
msgstr ""
"Der folgende Fehler trat beim Versuch auf, ein neues Album zu erstellen: {0}"
-#: ../extensions/Exporters/PicasaWebExport/PicasaWebExport.cs:620
+#: ../extensions/Exporters/PicasaWebExport/PicasaWebExport.cs:621
#, csharp-format
msgid "{0} Sent"
msgstr "{0} Gesendet"
-#: ../extensions/Exporters/PicasaWebExport/PicasaWebExport.cs:622
+#: ../extensions/Exporters/PicasaWebExport/PicasaWebExport.cs:623
#, csharp-format
msgid "{0} of approx. {1}"
msgstr "{0} von ca. {1}"
-#: ../extensions/Exporters/PicasaWebExport/PicasaWebExport.cs:691
+#: ../extensions/Exporters/PicasaWebExport/PicasaWebExport.cs:692
#: ../extensions/Exporters/SmugMugExport/SmugMugExport.cs:594
#, csharp-format
msgid "Error Uploading To Gallery: {0}"
msgstr "Fehler beim Hochladen zur Galerie: {0}"
-#: ../extensions/Exporters/PicasaWebExport/PicasaWebExport.cs:778
+#: ../extensions/Exporters/PicasaWebExport/PicasaWebExport.cs:779
#, csharp-format
msgid "Available space: {0}, {1}% used out of {2}"
msgstr "Verfügbarer Platz: {0}, {1}% benutzt von {2}"
-#: ../extensions/Exporters/PicasaWebExport/PicasaWebExport.cs:891
+#: ../extensions/Exporters/PicasaWebExport/PicasaWebExport.cs:892
#, csharp-format
msgid ""
"The selected album has a limit of {0} pictures,\n"
@@ -1086,7 +1127,7 @@ msgid "Compressed fil_e..."
msgstr "Komprimierte _Datei …"
#: ../extensions/Exporters/ZipExport/ZipExport.cs:47
-#: ../src/Widgets/EditorPage.cs:197
+#: ../src/Widgets/EditorPage.cs:198
msgid "No selection available"
msgstr "Keine Auswahl verfügbar"
@@ -1109,7 +1150,7 @@ msgstr "Exportiere Dateien"
#: ../extensions/Exporters/ZipExport/ZipExport.cs:108
#, csharp-format
msgid "Preparing photo \"{0}\""
-msgstr "Bereite Foto »{0}« vor"
+msgstr "Bereite Foto »{0}« vor"
#: ../extensions/Exporters/ZipExport/ZipExport.glade.h:1
msgid "_Create"
@@ -1127,6 +1168,12 @@ msgstr "_Ort:"
msgid "_Scale:"
msgstr "_Maßstab:"
+# Ist hier "Hash" ein Verb?
+# Und wenn? Wie willst du das dann übersetzen?
+#: ../extensions/Tools/HashJob/HashJob.addin.xml.h:1
+msgid "Check for Duplicates..."
+msgstr "Nach Duplikaten suchen …"
+
#: ../extensions/Tools/HashJob/HashJob.cs:53
msgid ""
"In order to detect duplicates on pictures you imported before 0.5.0, F-Spot "
@@ -1135,7 +1182,7 @@ msgid ""
msgstr ""
"Um Duplikate von Bildern zu erkennen, die von F-Spot-Versionen vor 0.5.0 "
"importiert wurden, muss Ihre Bildersammlung analysiert werden. Dies wird "
-"nicht automatisch erledigt, da es längere Zeit in Anspruch nimmt. Sie können "
+"nicht automatisch erledigt, da es längere Zeit in Anspruch nimmt. Sie können "
"mit Hilfe dieses Dialogs den Aktualisierungsvorgang starten oder unterbrechen."
#: ../extensions/Tools/HashJob/HashJob.cs:59
@@ -1145,7 +1192,7 @@ msgid ""
msgstr ""
"Derzeit benötigen {0} Fotos eine md5-Berechnung, und {1} Aufträge stehen aus"
-#: ../extensions/Tools/HashJob/HashJob.cs:75 ../src/ui/main_window.ui.h:37
+#: ../extensions/Tools/HashJob/HashJob.cs:75 ../src/ui/main_window.ui.h:38
msgid "_Close"
msgstr "S_chließen"
@@ -1157,13 +1204,6 @@ msgstr "Bilder werden verarbeitet …"
msgid "Stopped"
msgstr "Gestoppt"
-# Ist hier "Hash" ein Verb?
-# Und wenn? Wie willst du das dann übersetzen?
-#: ../extensions/Tools/HashJob/HashJob.addin.xml.h:1
-#| msgid "Hash for Duplicates"
-msgid "Check for Duplicates..."
-msgstr "Nach Duplikaten suchen …"
-
#: ../extensions/Tools/LiveWebGallery/GalleryRequestHandler.cs:107
msgid "F-Spot Gallery"
msgstr "Galerie von F-Spot"
@@ -1196,6 +1236,19 @@ msgstr "Ausgewählt"
msgid "Live Web Gallery"
msgstr "Live-Web-Galerie"
+#: ../extensions/Tools/LiveWebGallery/LiveWebGalleryDialog.cs:89
+msgid "none"
+msgstr "keine"
+
+#: ../extensions/Tools/LiveWebGallery/LiveWebGalleryDialog.cs:92
+#, csharp-format
+msgid " Gallery: {0}, Photos: {1}, Last client: {3}"
+msgstr " Galerie: {0}, Fotos: {1}, Letzter Betrachter: {3}"
+
+#: ../extensions/Tools/LiveWebGallery/LiveWebGalleryDialog.cs:156
+msgid "Gallery is inactive"
+msgstr "Galerie ist nicht aktiv"
+
#: ../extensions/Tools/LiveWebGallery/ui/LiveWebGallery.ui.h:1
msgid ""
"<small><i>The gallery stays active until you either deactivate it or close\n"
@@ -1211,7 +1264,7 @@ msgid ""
"on another computer to access the shared photos.</i></small>"
msgstr ""
"<small><i>Wenn die Galerie aktiv ist, wird oben die Adresse angezeigt, mit "
-"der sie auf einem anderen Rechner auf die freigegebenen Fotos zugreifen "
+"der Sie auf einem anderen Rechner auf die freigegebenen Fotos zugreifen "
"können.</i></small>"
#: ../extensions/Tools/LiveWebGallery/ui/LiveWebGallery.ui.h:5
@@ -1258,19 +1311,6 @@ msgstr "Freigeben:"
msgid "Views:"
msgstr "Betrachtungen:"
-#: ../extensions/Tools/LiveWebGallery/LiveWebGalleryDialog.cs:89
-msgid "none"
-msgstr "keine"
-
-#: ../extensions/Tools/LiveWebGallery/LiveWebGalleryDialog.cs:92
-#, csharp-format
-msgid " Gallery: {0}, Photos: {1}, Last client: {3}"
-msgstr " Galerie: {0}, Fotos: {1}, Letzter Betrachter: {3}"
-
-#: ../extensions/Tools/LiveWebGallery/LiveWebGalleryDialog.cs:156
-msgid "Gallery is inactive"
-msgstr "Galerie ist nicht aktiv"
-
#: ../extensions/Tools/MergeDb/MergeDb.addin.xml.h:1
msgid "Merge Db"
msgstr "Datenbank zusammenführen"
@@ -1287,7 +1327,7 @@ msgid ""
"Received exception \"{0}\"."
msgstr ""
"Die ausgewählte Datei ist eine ungültige oder nicht unterstützte Datenbank.\n"
-"Ausnahmefehler »{0}«."
+"Ausnahmefehler: »{0}«."
#: ../extensions/Tools/MergeDb/MergeDb.glade.h:1
msgid ""
@@ -1357,11 +1397,11 @@ msgid "New Rolls Only"
msgstr "Nur neue Importe"
#: ../extensions/Tools/MergeDb/MergeDb.glade.h:15
-#: ../src/FileImportBackend.cs:291 ../src/UI.Dialog/ThreadProgressDialog.cs:58
+#: ../src/UI.Dialog/ThreadProgressDialog.cs:57
msgid "Skip"
msgstr "Überspringen"
-#: ../extensions/Tools/MergeDb/PickFolderDialog.cs:33
+#: ../extensions/Tools/MergeDb/PickFolderDialog.cs:34
#, csharp-format
msgid ""
"<big>The database refers to files contained in the <b>{0}</b> folder.\n"
@@ -1400,109 +1440,220 @@ msgstr "F-Spot als Bildschirmschoner verwenden"
msgid "Screensaver Configuration"
msgstr "Konfiguration des Bildschirmschoners"
-#: ../f-spot.desktop.in.in.h:1 ../f-spot-import.desktop.in.in.h:1
-#: ../f-spot-view.desktop.in.in.h:1 ../src/ui/main_window.ui.h:10
-msgid "F-Spot"
-msgstr "F-Spot"
+#: ../f-spot.schemas.in.h:1
+msgid "Display of transparent parts."
+msgstr "Darstellung von transparenten Bereichen."
-#: ../f-spot.desktop.in.in.h:2 ../f-spot-import.desktop.in.in.h:2
-msgid "F-Spot Photo Manager"
-msgstr "F-Spot Fotoverwaltung"
+#: ../f-spot.schemas.in.h:2
+msgid "Enable this to allow interpolation on zoomed images."
+msgstr "Erlaubt Interpolation bei größenveränderten Bildern."
-#: ../f-spot.desktop.in.in.h:3
-msgid "Organize, enjoy, and share your photos"
-msgstr "Fotos anschauen, sortieren und weitergeben"
+#: ../f-spot.schemas.in.h:3
+msgid "Height of the import dialog."
+msgstr "Höhe des Dialogs zum Importieren."
-#: ../f-spot.desktop.in.in.h:4 ../f-spot-import.desktop.in.in.h:4
-msgid "Photo Manager"
-msgstr "Fotoverwaltung"
+#: ../f-spot.schemas.in.h:4
+msgid "Height of the main window."
+msgstr "Höhe des Hauptfensters."
-#: ../f-spot-import.desktop.in.in.h:3
-msgid "Import into F-Spot"
-msgstr "In F-Spot importieren"
+#: ../f-spot.schemas.in.h:5
+msgid "Height of the photo viewer window."
+msgstr "Höhe des Fensters des Fotobetrachters."
-#: ../f-spot-view.desktop.in.in.h:2
-msgid "F-Spot Photo Viewer"
-msgstr "F-Spot Fotobetrachter"
+#: ../f-spot.schemas.in.h:6
+msgid ""
+"If the 'transparency' option is set, the color specified in this option will "
+"be used as the transparent color when viewing images."
+msgstr ""
+"Wenn die Option zur Transparenz gewählt ist, dann wird die hier ausgewählte "
+"Farbe als Transparenzfarbe beim Betrachten von Bildern verwendet."
-#: ../f-spot-view.desktop.in.in.h:3
-msgid "Photo Viewer"
-msgstr "Fotobetrachter"
+#: ../f-spot.schemas.in.h:7
+msgid "Interpolate image on zoom."
+msgstr "Bild bei Größenänderung interpolieren."
-#: ../lib/libfspot/f-jpeg-utils.c:441 ../src/RotateCommand.cs:224
-msgid "File not found"
-msgstr "Datei nicht gefunden"
+#: ../f-spot.schemas.in.h:8
+msgid "Maximize the main window."
+msgstr "Das Hauptfenster maximieren."
-#: ../lib/libfspot/f-jpeg-utils.c:464
-#, c-format
-msgid "Unknown transform type %d"
-msgstr "Unbekannter Transformationstyp %d"
+#: ../f-spot.schemas.in.h:9
+msgid "Maximize the photo viewer window."
+msgstr "Das Fenster des Fotobetrachters maximieren."
-#: ../lib/libfspot/f-jpeg-utils.c:472
-msgid "Operation failed"
-msgstr "Aktion ist fehlgeschlagen"
+#: ../f-spot.schemas.in.h:10
+msgid "Path to custom gtkrc for theming F-Spot."
+msgstr "Pfad zu eigener gtkrc zur Anpassung des Erscheinungsbildes von F-Spot."
-#: ../src/CameraFileSelectionDialog.cs:76
-msgid "Preview"
-msgstr "Vorschau"
+#: ../f-spot.schemas.in.h:11
+msgid "Show dates in the thumbnail view."
+msgstr "Daten in Vorschauansicht zeigen."
-#: ../src/CameraFileSelectionDialog.cs:78
-msgid "Path"
-msgstr "Pfad"
+#: ../f-spot.schemas.in.h:12
+msgid "Show ratings in the thumbnail view."
+msgstr "Bewertungen in Vorschauansicht zeigen."
-#: ../src/CameraFileSelectionDialog.cs:80 ../src/f-spot.glade.h:47
-msgid "File"
-msgstr "Datei"
+#: ../f-spot.schemas.in.h:13
+msgid "Show tags in the thumbnail view."
+msgstr "Markierungen in Vorschauansicht zeigen."
-#: ../src/CameraFileSelectionDialog.cs:102
-msgid "Select Tag"
-msgstr "Markierung auswählen"
+#: ../f-spot.schemas.in.h:14
+msgid "Show the filename in the viewer window."
+msgstr "Den Dateinamen im Betrachterfenster zeigen."
-#: ../src/CameraFileSelectionDialog.cs:138
-msgid "Downloading Previews"
-msgstr "Vorschaubilder werden heruntergeladen"
+#: ../f-spot.schemas.in.h:15
+msgid "Show the filmstrip in the main window."
+msgstr "Den Filmstreifen im Hauptfenster zeigen."
-#: ../src/CameraFileSelectionDialog.cs:148
-#, csharp-format
-msgid "Downloading Preview of {0}"
-msgstr "Vorschau von {0} wird heruntergeladen"
+#: ../f-spot.schemas.in.h:16
+msgid "Show the sidebar in the main window."
+msgstr "Die Seitenleiste im Betrachterfenster zeigen."
-#: ../src/CameraFileSelectionDialog.cs:220
-#, csharp-format
-msgid "Copying file {0} of {1}"
-msgstr "Kopieren der Datei {0} von {1}"
+#: ../f-spot.schemas.in.h:17
+msgid "Show the timeline in the main window."
+msgstr "Die Zeitlinie im Hauptfenster zeigen."
-#: ../src/CameraFileSelectionDialog.cs:235
-msgid "Error transferring file"
-msgstr "Fehler bei der Dateiübertragung"
+#: ../f-spot.schemas.in.h:18
+msgid "Show the toolbar in the main window."
+msgstr "Die Werkzeugleiste im Betrachterfenster zeigen."
-#: ../src/CameraFileSelectionDialog.cs:244
-msgid "Download Complete"
-msgstr "Herunterladen abgeschlossen"
+#: ../f-spot.schemas.in.h:19
+msgid "Show the toolbar in the photo viewer window."
+msgstr "Die Werkzeugleiste im Fenster des Fotobetrachters zeigen."
-#: ../src/CameraFileSelectionDialog.cs:244
-msgid "Done Copying Files"
-msgstr "Kopieren der Dateien abgeschlossen"
+#: ../f-spot.schemas.in.h:20
+msgid "Size of the tag icons shown in the sidebar."
+msgstr "Größe der Markierungssymbole in der Seitenleiste."
-#: ../src/CameraFileSelectionDialog.cs:268
-#, csharp-format
-msgid "Transferring \"{0}\" from camera"
-msgstr "Übertragung der Datei »{0}« von der Kamera"
+#: ../f-spot.schemas.in.h:21
+msgid "The X position to use for the main window."
+msgstr "Die X-Position des Hauptfensters."
-#: ../src/CameraSelectionDialog.cs:29 ../src/Widgets/InfoBox.cs:231
-msgid "Camera"
-msgstr "Kamera"
+#: ../f-spot.schemas.in.h:22
+msgid "The X position to use for the photo viewer window."
+msgstr "Die X-Position des Fensters des Bildbetrachters."
+
+#: ../f-spot.schemas.in.h:23
+msgid "The Y position to use for the main window."
+msgstr "Die Y-Position des Hauptfensters."
+
+#: ../f-spot.schemas.in.h:24
+msgid "The Y position to use for the photo viewer window."
+msgstr "Die Y-Position des Fensters des Bildbetrachters."
+
+#: ../f-spot.schemas.in.h:25
+msgid "The color to use for transparent parts."
+msgstr "Die für die transparenten Bereiche zu verwendende Farbe."
-#: ../src/CameraSelectionDialog.cs:30
-msgid "Port"
-msgstr "Anschluss"
+#: ../f-spot.schemas.in.h:26
+msgid "The height dimension to use for the import dialog."
+msgstr "Die Höhe, die für den Import-Dialog verwendet werden soll."
+
+#: ../f-spot.schemas.in.h:27
+msgid "The height dimension to use for the main window."
+msgstr "Die Höhe, die für das Hauptfenster verwendet werden soll."
+
+#: ../f-spot.schemas.in.h:28
+msgid "The height dimension to use for the photo viewer window."
+msgstr ""
+"Die Höhe, die für das Fenster des Bildbetrachters verwendet werden soll."
+
+#: ../f-spot.schemas.in.h:29
+msgid "The orientation of the filmstrip, if shown."
+msgstr "Die Ausrichtung des Filmstreifens, wenn angezeigt."
+
+#: ../f-spot.schemas.in.h:30
+msgid "The orientation of the filmstrip."
+msgstr "Die Ausrichtung des Filmstreifens."
+
+#: ../f-spot.schemas.in.h:31
+msgid "The size (width) of the sidebar in the main window."
+msgstr "Die Größe (Breite) der Seitenleiste im Hauptfenster."
+
+#: ../f-spot.schemas.in.h:32
+msgid "The size of the sidebar in the main window."
+msgstr "Die Größe der Seitenleiste im Hauptfenster."
+
+#: ../f-spot.schemas.in.h:33
+msgid "The width dimension to use for the import dialog."
+msgstr "Die Breite, die für den Import-Dialog verwendet werden soll."
+
+#: ../f-spot.schemas.in.h:34
+msgid "The width dimension to use for the main window."
+msgstr "Die Breite, die für das Hauptfenster verwendet werden soll."
+
+#: ../f-spot.schemas.in.h:35
+msgid "The width dimension to use for the photo viewer window."
+msgstr ""
+"Die Breite, die für das Fenster des Bildbetrachters verwendet werden soll."
-#: ../src/Core/App.cs:278
+#: ../f-spot.schemas.in.h:36
+msgid "Use the current photo's filename as the viewer window's title."
+msgstr ""
+"Den Dateinamen des aktuellen Fotos als Fenstertitel des Betrachters verwenden."
+
+#: ../f-spot.schemas.in.h:37
+msgid "Width of the import dialog."
+msgstr "Breite des Import-Dialogs."
+
+#: ../f-spot.schemas.in.h:38
+msgid "Width of the main window."
+msgstr "Breite des Hauptfensters."
+
+#: ../f-spot.schemas.in.h:39
+msgid "Width of the photo viewer window."
+msgstr "Breite des Fensters des Bildbetrachters."
+
+#: ../f-spot.schemas.in.h:40
+msgid "Width of the preview image pane in the import dialog."
+msgstr "Breite der Bildvorschauleiste im Import-Dialog."
+
+#: ../f-spot.schemas.in.h:41
+msgid "X position of the main window."
+msgstr "X-Position des Hauptfensters."
+
+#: ../f-spot.schemas.in.h:42
+msgid "X position of the photo viewer window."
+msgstr "X-Position des Fensters des Bildbetrachters."
+
+#: ../f-spot.schemas.in.h:43
+msgid "Y position of the main window."
+msgstr "Y-Position des Hauptfensters."
+
+#: ../f-spot.schemas.in.h:44
+msgid "Y position of the photo viewer window."
+msgstr "Y-Position des Fensters des Bildbetrachters."
+
+#: ../f-spot.schemas.in.h:45
+msgid ""
+"You can choose how to display transparent parts in images. This option has no "
+"effect on photos but setting this value to CHECK_PATTERN or CUSTOM_COLOR "
+"could be useful when viewing icons or other artwork with transparent parts."
+msgstr ""
+"Sie können wählen, wie transparente Bereiche eines Bildes dargestellt werden. "
+"Diese Einstellung hat keinen Effekt auf Fotos, aber eine Einstellung auf ein "
+"Schachbrettmuster (CHECK_PATTERN) oder eine frei wählbare Farbe "
+"(CUSTOM_COLOR) kann bei der Betrachtung von Symbolen und anderen Bildern mit "
+"transparenten Bereichen nützlich sein."
+
+#: ../lib/libfspot/f-jpeg-utils.c:441 ../src/RotateCommand.cs:211
+msgid "File not found"
+msgstr "Datei nicht gefunden"
+
+#: ../lib/libfspot/f-jpeg-utils.c:464
+#, c-format
+msgid "Unknown transform type %d"
+msgstr "Unbekannter Transformationstyp %d"
+
+#: ../lib/libfspot/f-jpeg-utils.c:472
+msgid "Operation failed"
+msgstr "Aktion ist fehlgeschlagen"
+
+#: ../src/Core/App.cs:274
#, csharp-format
msgid "No photos matching {0} found"
msgstr "Keine Fotos gefunden, die mit {0} übereinstimmen"
-#: ../src/Core/App.cs:279
+#: ../src/Core/App.cs:275
#, csharp-format
msgid ""
"The tag \"{0}\" is not applied to any photos. Try adding\n"
@@ -1513,11 +1664,11 @@ msgstr ""
"Sie, die Markierung zu einigen Fotos hinzuzufügen oder wählen Sie eine andere "
"Markierung im F-Spot-Einstellungsdialog."
-#: ../src/Core/App.cs:283
+#: ../src/Core/App.cs:279
msgid "Search returned no results"
msgstr "Die Suche brachte keine Ergebnisse"
-#: ../src/Core/App.cs:284
+#: ../src/Core/App.cs:280
msgid ""
"The tag F-Spot is looking for does not exist. Try\n"
"selecting a different tag in the F-Spot preference\n"
@@ -1528,38 +1679,27 @@ msgstr ""
"F-Spot-Einstellungsdialog."
#. Note for translators: Reparented is a picture becoming a version of another one
-#: ../src/Core/Photo.cs:473
+#: ../src/Core/Photo.cs:350
msgid "Reparented"
msgstr "Ausgangsfoto neu festgelegt"
-#: ../src/Core/Photo.cs:473
-#, csharp-format
-msgid "Reparented ({0})"
-msgstr "Ausgangsfoto neu festgelegt ({0})"
-
-#: ../src/Core/Photo.cs:492
+#: ../src/Core/Photo.cs:367
#, csharp-format
msgid "Modified"
msgid_plural "Modified ({0})"
msgstr[0] "Bearbeitet"
msgstr[1] "Bearbeitet ({0})"
-#: ../src/Core/Photo.cs:513
+#: ../src/Core/Photo.cs:390
#, csharp-format
msgid "Modified in {1}"
msgstr "Bearbeitet in {1}"
-#: ../src/Core/Photo.cs:513
+#: ../src/Core/Photo.cs:390
#, csharp-format
msgid "Modified in {1} ({0})"
msgstr "Bearbeitet in {1} ({0})"
-#. Note that the original version is never stored in the photo_versions table in the
-#. database.
-#: ../src/Core/Photo.cs:671 ../src/f-spot.glade.h:62
-msgid "Original"
-msgstr "Original"
-
#: ../src/Editors/AutoStretchEditor.cs:17
msgid "Auto Color"
msgstr "Automatischer Farbabgleich"
@@ -1572,43 +1712,43 @@ msgstr "Farbabgleich"
msgid "Adjust"
msgstr "Anpassen"
-#: ../src/Editors/CropEditor.cs:35
+#: ../src/Editors/CropEditor.cs:36
msgid "4 x 3 (Book)"
msgstr "10 x 7,5 (Book)"
-#: ../src/Editors/CropEditor.cs:36
+#: ../src/Editors/CropEditor.cs:37
msgid "4 x 6 (Postcard)"
msgstr "10 x 15 (Postkarte)"
-#: ../src/Editors/CropEditor.cs:37
+#: ../src/Editors/CropEditor.cs:38
msgid "5 x 7 (L, 2L)"
msgstr "12,5 x 17,5 (L, 2L)"
-#: ../src/Editors/CropEditor.cs:38
+#: ../src/Editors/CropEditor.cs:39
msgid "8 x 10"
msgstr "20 x 25"
-#: ../src/Editors/CropEditor.cs:39
+#: ../src/Editors/CropEditor.cs:40
msgid "Square"
msgstr "Quadrat"
-#: ../src/Editors/CropEditor.cs:42
+#: ../src/Editors/CropEditor.cs:43
msgid "Crop"
msgstr "Zuschneiden"
-#: ../src/Editors/CropEditor.cs:73
+#: ../src/Editors/CropEditor.cs:74
msgid "Select the area that needs cropping."
msgstr "Wählen Sie den Bereich zum Zuschneiden aus."
-#: ../src/Editors/CropEditor.cs:98
+#: ../src/Editors/CropEditor.cs:99
msgid "No Constraint"
msgstr "Keine Beschränkung"
-#: ../src/Editors/CropEditor.cs:99
+#: ../src/Editors/CropEditor.cs:100
msgid "Same as photo"
msgstr "Wie im Foto"
-#: ../src/Editors/CropEditor.cs:104
+#: ../src/Editors/CropEditor.cs:105
msgid "Custom Ratios..."
msgstr "Selbstgewählte Bildformate …"
@@ -1640,24 +1780,11 @@ msgstr "Weicher Fokus"
msgid "Straighten"
msgstr "Begradigung"
-#: ../src/FileImportBackend.cs:289
-msgid "Import error"
-msgstr "Fehler beim Importieren"
-
-#: ../src/FileImportBackend.cs:290
-#, csharp-format
-msgid "Error importing {0}{2}{2}{1}"
-msgstr "Fehler beim Importieren von {0}{2}{2}{1}"
-
#: ../src/Filters/ResizeFilter.cs:70 ../src/Filters/SharpFilter.cs:52
#, csharp-format
msgid "No way to save files of type \"{0}\""
msgstr "Keine Möglichkeit, um Dateien des Typs »{0}« zu speichern"
-#: ../src/FormClient.cs:295
-msgid "Unhandled exception"
-msgstr "Unverarbeitete Ausnahme"
-
#: ../src/FSpot.addin.xml.h:1
msgid "Copy Photo"
msgstr "Foto kopieren"
@@ -1670,17 +1797,17 @@ msgstr "Exportieren nach"
msgid "Open _With"
msgstr "Öffnen _mit"
-#: ../src/FSpot.addin.xml.h:4 ../src/ui/main_window.ui.h:15
+#: ../src/FSpot.addin.xml.h:4 ../src/ui/main_window.ui.h:16
msgid "Rem_ove Tag"
msgstr "Markierung ent_fernen"
-#: ../src/FSpot.addin.xml.h:5 ../src/f-spot.glade.h:69 ../src/SingleView.cs:425
-#: ../src/ui/main_window.ui.h:16
+#: ../src/FSpot.addin.xml.h:5 ../src/f-spot.glade.h:24 ../src/SingleView.cs:423
+#: ../src/ui/main_window.ui.h:17
msgid "Rotate _Left"
msgstr "_Links drehen"
-#: ../src/FSpot.addin.xml.h:6 ../src/f-spot.glade.h:70 ../src/SingleView.cs:426
-#: ../src/ui/main_window.ui.h:17
+#: ../src/FSpot.addin.xml.h:6 ../src/f-spot.glade.h:25 ../src/SingleView.cs:424
+#: ../src/ui/main_window.ui.h:18
msgid "Rotate _Right"
msgstr "_Rechts drehen"
@@ -1688,75 +1815,35 @@ msgstr "_Rechts drehen"
msgid "Tools"
msgstr "Werkzeuge"
-#: ../src/FSpot.addin.xml.h:8 ../src/ui/main_window.ui.h:32
-msgid "_Attach Tag"
-msgstr "Markierung hinzu_fügen"
-
-#: ../src/FSpot.addin.xml.h:9 ../src/ui/main_window.ui.h:41
+#: ../src/FSpot.addin.xml.h:8 ../src/ui/main_window.ui.h:42
msgid "_Delete From Drive"
msgstr "Vom Laufwerk _löschen"
-#: ../src/FSpot.addin.xml.h:10 ../src/ui/main_window.ui.h:59
+#: ../src/FSpot.addin.xml.h:9 ../src/ui/main_window.ui.h:61
msgid "_Remove From Catalog"
msgstr "Aus dem Katalog ent_fernen"
#: ../src/f-spot.glade.h:1
-msgid " "
-msgstr " "
-
-#: ../src/f-spot.glade.h:2
-msgid "1024 px"
-msgstr "1024 px"
-
-#: ../src/f-spot.glade.h:3
-msgid "320 px"
-msgstr "320 px"
-
-#: ../src/f-spot.glade.h:4
-msgid "480 px"
-msgstr "480 px"
-
-#: ../src/f-spot.glade.h:5
-msgid "640 px"
-msgstr "640 px"
-
-#: ../src/f-spot.glade.h:6
-msgid "800 px"
-msgstr "800 px"
-
-#: ../src/f-spot.glade.h:7
-msgid "<b></b>"
-msgstr "<b></b>"
-
-#: ../src/f-spot.glade.h:10
msgid "<b>Co_rrections</b>"
msgstr "<b>Ko_rrekturen</b>"
-#: ../src/f-spot.glade.h:13
+#: ../src/f-spot.glade.h:2
msgid "<b>Image Interpolation</b>"
msgstr "<b>Bildinterpolation</b>"
-#: ../src/f-spot.glade.h:15
-msgid "<b>Size</b>"
-msgstr "<b>Größe</b>"
-
-#: ../src/f-spot.glade.h:17
-msgid "<b>Summary</b>"
-msgstr "<b>Zusammenfassung</b>"
-
-#: ../src/f-spot.glade.h:18
+#: ../src/f-spot.glade.h:3
msgid "<b>Transparent Parts</b>"
msgstr "<b>Transparente Bereiche</b>"
-#: ../src/f-spot.glade.h:19
+#: ../src/f-spot.glade.h:4
msgid "<b>View all pictures imported</b>"
msgstr "<b>Alle importierten Bilder anzeigen</b>"
-#: ../src/f-spot.glade.h:20
+#: ../src/f-spot.glade.h:5
msgid "<b>_White Balance</b>"
msgstr "<b>_Weißabgleich</b>"
-#: ../src/f-spot.glade.h:21
+#: ../src/f-spot.glade.h:6
msgid ""
"<small><i>Enable this to allow interpolation on zoomed images. You shouldn't "
"disable this for viewing photos, but disabling the interpolation could be "
@@ -1767,7 +1854,7 @@ msgstr ""
"deaktiviert werden, für die Bearbeitung von Symbolen dagegen kann die "
"Deaktivierung nützlich sein.</i></small>"
-#: ../src/f-spot.glade.h:22
+#: ../src/f-spot.glade.h:7
msgid ""
"<small><i>You can choose how to display transparent parts in images. This "
"option has no effect on photos, but setting this as check pattern or custom "
@@ -1780,357 +1867,186 @@ msgstr ""
"der Betrachtung von Symbolen und anderen Bildern mit transparenten Bereichen "
"nützlich sein.</i></small>"
-#: ../src/f-spot.glade.h:23
+#: ../src/f-spot.glade.h:8
msgid "As _background"
msgstr "Als Hintergrund_bild verwenden"
-#: ../src/f-spot.glade.h:24
+#: ../src/f-spot.glade.h:9
msgid "As _custom color: "
msgstr "Als _individuelle Farbe:"
-#: ../src/f-spot.glade.h:25
+#: ../src/f-spot.glade.h:10
msgid "As check _pattern"
msgstr "Als _Schachbrettmuster"
-#: ../src/f-spot.glade.h:26
-msgid "Attach Tags:"
-msgstr "Markierungen hinzufügen:"
-
-#: ../src/f-spot.glade.h:27
-msgid "Attach tag:"
-msgstr "Markierung anfügen:"
-
-#: ../src/f-spot.glade.h:29
-msgid "CD"
-msgstr "CD"
-
-#: ../src/f-spot.glade.h:30
+#: ../src/f-spot.glade.h:11
msgid "C_ontrast:"
msgstr "K_ontrast:"
-#: ../src/f-spot.glade.h:31
+#: ../src/f-spot.glade.h:12
msgid "C_reate"
msgstr "_Erstellen"
-#: ../src/f-spot.glade.h:32
-msgid "Camera Selection"
-msgstr "Kameraauswahl"
-
-#: ../src/f-spot.glade.h:33
-msgid "Copy files to the Photos folder"
-msgstr "Dateien in den Fotoordner kopieren"
-
-#: ../src/f-spot.glade.h:34
-msgid "Create Mail"
-msgstr "Mail erstellen"
-
-#: ../src/f-spot.glade.h:35
+#: ../src/f-spot.glade.h:13
msgid "Create _icon for this tag when first used"
msgstr "Symbol für diese Mark_ierung bei erster Benutzung erstellen"
-#: ../src/f-spot.glade.h:36
-msgid "Create a mail with the selected photos (possibly resized) attached"
-msgstr ""
-"Eine Mail mit den ausgewählten Fotos (eventuell verkleinert) angehängt "
-"erstellen"
-
-#: ../src/f-spot.glade.h:37
-msgid "Detect duplicates"
-msgstr "Duplikate finden"
-
-#: ../src/f-spot.glade.h:38
+#: ../src/f-spot.glade.h:14
msgid "Display File _Names"
msgstr "Datei_namen anzeigen"
-#: ../src/f-spot.glade.h:39
+#: ../src/f-spot.glade.h:15
msgid "Display only those photos that were imported in specified Rolls."
msgstr "Nur Fotos darstellen, die in den angegebenen Importen enthalten sind."
-#: ../src/f-spot.glade.h:40
-msgid "Do not send a mail"
-msgstr "Keine Mail versenden"
-
-#: ../src/f-spot.glade.h:41
-msgid "E-_Mail:"
-msgstr "E-_Mail:"
-
-#: ../src/f-spot.glade.h:42
-msgid "E_xport titles and comments"
-msgstr "Titel und Kommentare e_xportieren"
-
-#: ../src/f-spot.glade.h:43
-msgid "Estimated new size"
-msgstr "Geschätzte neue Größe"
-
-#: ../src/f-spot.glade.h:45
-msgid "Extra large"
-msgstr "Extra groß"
-
-#: ../src/f-spot.glade.h:46
+#: ../src/f-spot.glade.h:16
msgid "F-Spot View"
msgstr "F-Spot Betrachtung"
-#: ../src/f-spot.glade.h:48
+#: ../src/f-spot.glade.h:17
msgid "Filter on selected rolls"
msgstr "Filter nach ausgewählten Importen"
-#: ../src/f-spot.glade.h:49
-msgid "G_allery:"
-msgstr "G_alerie:"
-
-#: ../src/f-spot.glade.h:50
-msgid "Gallery"
-msgstr "Galerie"
-
-#: ../src/f-spot.glade.h:51 ../src/ImportCommand.cs:547
-#: ../src/MainWindow.cs:301
-msgid "Import"
-msgstr "Importieren"
-
-#. Translators: this string means 'source of import'
-#: ../src/f-spot.glade.h:53
-msgid "Import Source:"
-msgstr "Quelle importieren:"
-
-#: ../src/f-spot.glade.h:54
-msgid "Include subfolders"
-msgstr "Unterordner einbeziehen"
-
-#: ../src/f-spot.glade.h:55
-msgid "Large"
-msgstr "Groß"
-
-#: ../src/f-spot.glade.h:56
+#: ../src/f-spot.glade.h:18
msgid "Manage your custom selection ratios"
msgstr "Die selbstausgewählten Bildformate verwalten"
-#: ../src/f-spot.glade.h:57
-msgid "Medium"
-msgstr "Mittel"
-
-#: ../src/f-spot.glade.h:59
+#: ../src/f-spot.glade.h:19
msgid "Number of photos in selected rolls:"
msgstr "Anzahl der Fotos in den ausgewählten Importen:"
-#: ../src/f-spot.glade.h:60
-msgid "Number of pictures"
-msgstr "An_zahl der Bilder"
-
-#: ../src/f-spot.glade.h:61
+#: ../src/f-spot.glade.h:20
msgid "Open _Folder..."
msgstr "_Ordner öffnen …"
-#: ../src/f-spot.glade.h:63
-msgid "Original size (possible very large file size)"
-msgstr "Originalgröße (eventuell sehr große Dateigröße)"
-
-#: ../src/f-spot.glade.h:64 ../src/UI.Dialog/ui/EditTagDialog.ui.h:4
+#: ../src/f-spot.glade.h:21 ../src/UI.Dialog/ui/EditTagDialog.ui.h:4
msgid "P_arent Tag:"
msgstr "Überge_ordnete Markierung:"
-#: ../src/f-spot.glade.h:65
-msgid "Pause"
-msgstr "Pause"
-
-#: ../src/f-spot.glade.h:66
+#: ../src/f-spot.glade.h:22
msgid "Preferences"
msgstr "Einstellungen"
-#: ../src/f-spot.glade.h:67 ../src/ItemAction.cs:123
-msgid "Previous"
-msgstr "Vorheriges"
-
-#: ../src/f-spot.glade.h:68
+#: ../src/f-spot.glade.h:23
msgid "Repair"
msgstr "Reparieren"
-#: ../src/f-spot.glade.h:71
-msgid "Select Photos to Copy From Camera..."
-msgstr "Von der Kamera zu kopierende Fotos auswählen …"
-
-#: ../src/f-spot.glade.h:72
+#: ../src/f-spot.glade.h:26
msgid "Select a Tag..."
msgstr "Eine Markierung auswählen …"
-#: ../src/f-spot.glade.h:73
-msgid "Select the camera from which you want to transfer files"
-msgstr "Auswahl der Kamera, von der Dateien übertragen werden sollen"
-
-#: ../src/f-spot.glade.h:74
-msgid "Selected Camera: "
-msgstr "Gewählte Kamera: "
-
-#: ../src/f-spot.glade.h:75
+#: ../src/f-spot.glade.h:27
msgid "Selection Constraints"
msgstr "Beschränkungen der Auswahl"
-#: ../src/f-spot.glade.h:76 ../src/ui/main_window.ui.h:21
+#: ../src/f-spot.glade.h:28 ../src/ui/main_window.ui.h:22
msgid "Set as _Background"
msgstr "Als Hintergrund_bild verwenden"
-#: ../src/f-spot.glade.h:77
+#: ../src/f-spot.glade.h:29
msgid "Show all photos."
msgstr "Alle Fotos anzeigen."
-#: ../src/f-spot.glade.h:78
+#: ../src/f-spot.glade.h:30
msgid "Show or hide the side pane"
msgstr "Seitenleiste anzeigen oder verbergen"
-#: ../src/f-spot.glade.h:79
+#: ../src/f-spot.glade.h:31
msgid "Show or hide the toolbar"
msgstr "Werkzeugleiste anzeigen oder verbergen"
-#: ../src/f-spot.glade.h:80
+#: ../src/f-spot.glade.h:32
msgid "Side _pane"
msgstr "Seiten_leiste"
-#: ../src/f-spot.glade.h:81
-msgid "Small"
-msgstr "Klein"
-
-#: ../src/f-spot.glade.h:82
-msgid ""
-"Specify if an original size picture should be rotated or not. Smaller sizes "
-"are automatically rotated."
-msgstr ""
-"Geben Sie an, ob ein Bild in Originalgröße gedreht werden soll oder nicht. "
-"Kleinere Größen werden automatisch gedreht."
-
-#: ../src/f-spot.glade.h:83
-msgid "Strip image _metadata"
-msgstr "_Metadaten des Bilds entfernen"
-
#. Note for translators: meant as Temperature
-#: ../src/f-spot.glade.h:85
+#: ../src/f-spot.glade.h:34
msgid "Te_mp:"
msgstr "Te_mp.:"
-#: ../src/f-spot.glade.h:86
-msgid "Tiny"
-msgstr "Winzig"
-
-#: ../src/f-spot.glade.h:87
-msgid "Total original size"
-msgstr "Gesamte Originalgröße"
-
-#: ../src/f-spot.glade.h:88 ../src/ui/main_window.ui.h:28
+#: ../src/f-spot.glade.h:35 ../src/ui/main_window.ui.h:29
msgid "Zoom _in"
msgstr "Ansicht ver_größern"
-#: ../src/f-spot.glade.h:89 ../src/ui/main_window.ui.h:29
+#: ../src/f-spot.glade.h:36 ../src/ui/main_window.ui.h:30
msgid "Zoom _out"
msgstr "Ansicht ver_kleinern"
-#: ../src/f-spot.glade.h:90 ../src/ui/main_window.ui.h:30
+#: ../src/f-spot.glade.h:37 ../src/ui/main_window.ui.h:31
msgid "Zoom in"
msgstr "Ansicht vergrößern"
-#: ../src/f-spot.glade.h:91 ../src/ui/main_window.ui.h:31
+#: ../src/f-spot.glade.h:38 ../src/ui/main_window.ui.h:32
msgid "Zoom out"
msgstr "Ansicht verkleinern"
-#: ../src/f-spot.glade.h:92
+#: ../src/f-spot.glade.h:39
msgid "_Brightness:"
msgstr "_Helligkeit:"
-#: ../src/f-spot.glade.h:93
-msgid "_Create Mail"
-msgstr "_E-Mail erstellen"
-
-#: ../src/f-spot.glade.h:94 ../src/ui/main_window.ui.h:44
+#: ../src/f-spot.glade.h:40 ../src/ui/main_window.ui.h:45
msgid "_Edit"
msgstr "_Bearbeiten"
-#: ../src/f-spot.glade.h:98
+#: ../src/f-spot.glade.h:42
msgid "_Exposure:"
msgstr "B_elichtung:"
-#: ../src/f-spot.glade.h:99
-msgid "_Flickr"
-msgstr "_Flickr"
-
-#: ../src/f-spot.glade.h:100 ../src/ui/main_window.ui.h:48
+#: ../src/f-spot.glade.h:43 ../src/ui/main_window.ui.h:49
msgid "_Fullscreen"
msgstr "_Vollbild"
-#: ../src/f-spot.glade.h:101
-msgid "_Gallery"
-msgstr "_Gallery"
-
-#: ../src/f-spot.glade.h:102 ../src/ui/main_window.ui.h:49
+#: ../src/f-spot.glade.h:44 ../src/ui/main_window.ui.h:50
msgid "_Help"
msgstr "_Hilfe"
-#: ../src/f-spot.glade.h:103
+#: ../src/f-spot.glade.h:45
msgid "_Hue:"
msgstr "Farb_ton:"
-#: ../src/f-spot.glade.h:104
+#: ../src/f-spot.glade.h:46
msgid "_Interpolate image on zoom"
msgstr "Bild bei Größenänderung _interpolieren"
-#: ../src/f-spot.glade.h:105
+#: ../src/f-spot.glade.h:47
msgid "_New Window"
msgstr "_Neues Fenster"
-#: ../src/f-spot.glade.h:106
-msgid "_Open album in browser when done uploading"
-msgstr "Das Album nach dem Hochladen im Browser ö_ffnen"
-
-#: ../src/f-spot.glade.h:107
-msgid "_Open destination when done exporting"
-msgstr "Das Ziel nach dem Exportieren ö_ffnen"
-
-#: ../src/f-spot.glade.h:108 ../src/ui/main_window.ui.h:56
+#: ../src/f-spot.glade.h:48 ../src/ui/main_window.ui.h:58
msgid "_Photo"
msgstr "_Foto"
-#: ../src/f-spot.glade.h:110
+#: ../src/f-spot.glade.h:49
msgid "_Saturation:"
msgstr "_Sättigung:"
-#: ../src/f-spot.glade.h:111
-msgid "_Scale photos to no larger than: "
-msgstr "Fotos nicht größer _skalieren als: "
-
-#: ../src/f-spot.glade.h:112 ../src/ui/main_window.ui.h:67
+#: ../src/f-spot.glade.h:50 ../src/ui/main_window.ui.h:69
msgid "_Slideshow"
msgstr "_Diashow"
-#: ../src/f-spot.glade.h:113
-msgid "_Strip metadata"
-msgstr "Metadaten ent_fernen"
-
-#: ../src/f-spot.glade.h:114 ../src/UI.Dialog/ui/EditTagDialog.ui.h:6
+#: ../src/f-spot.glade.h:51 ../src/UI.Dialog/ui/EditTagDialog.ui.h:6
msgid "_Tag Name:"
msgstr "Markierungs_name:"
-#: ../src/f-spot.glade.h:115
+#: ../src/f-spot.glade.h:52
msgid "_Tint:"
msgstr "_Farbton:"
-#: ../src/f-spot.glade.h:116
+#: ../src/f-spot.glade.h:53
msgid "_Toolbar"
msgstr "_Werkzeugleiste"
-#: ../src/f-spot.glade.h:117
-msgid "_URI:"
-msgstr "_Adresse:"
-
-#: ../src/f-spot.glade.h:118 ../src/ui/main_window.ui.h:75
+#: ../src/f-spot.glade.h:54 ../src/ui/main_window.ui.h:77
msgid "_View"
msgstr "_Ansicht"
-#: ../src/f-spot.glade.h:119
-msgid "_Virtual Filesystem"
-msgstr "_Virtuelles Dateisystem"
-
-#: ../src/f-spot.glade.h:120 ../src/Widgets/FindBar.cs:177
+#: ../src/f-spot.glade.h:55 ../src/Widgets/FindBar.cs:178
+#: ../src/Widgets/FindBar.cs:534
msgid "and"
msgstr "und"
#. at, or after a date, or between dates
-#: ../src/f-spot.glade.h:122
+#: ../src/f-spot.glade.h:57
msgid ""
"at\n"
"after\n"
@@ -2140,39 +2056,35 @@ msgstr ""
"nach dem\n"
"zwischen"
-#: ../src/f-spot.glade.h:126
-msgid "x"
-msgstr "x"
-
-#: ../src/FullScreenView.cs:58
+#: ../src/FullScreenView.cs:59
msgid "Hide"
msgstr "Verbergen"
-#: ../src/FullScreenView.cs:60
+#: ../src/FullScreenView.cs:61
msgid "Hide Toolbar"
msgstr "Werkzeugleiste verbergen"
-#: ../src/FullScreenView.cs:66
+#: ../src/FullScreenView.cs:67
msgid "Info"
msgstr "Info"
-#: ../src/FullScreenView.cs:68 ../src/Widgets/InfoBox.cs:201
+#: ../src/FullScreenView.cs:69 ../src/Widgets/InfoBox.cs:202
msgid "Image Information"
msgstr "Bildinformationen"
-#: ../src/FullScreenView.cs:73
+#: ../src/FullScreenView.cs:74
msgid "Exit fullscreen"
msgstr "Vollbild verlassen"
-#: ../src/FullScreenView.cs:81 ../src/MainWindow.cs:341 ../src/SingleView.cs:88
+#: ../src/FullScreenView.cs:82 ../src/MainWindow.cs:313 ../src/SingleView.cs:87
msgid "Slideshow"
msgstr "Diaschau"
-#: ../src/FullScreenView.cs:82
+#: ../src/FullScreenView.cs:83
msgid "Start slideshow"
msgstr "Diaschau starten"
-#: ../src/FullScreenView.cs:128
+#: ../src/FullScreenView.cs:129
msgid "Slide transition:"
msgstr "Diaübergänge:"
@@ -2184,35 +2096,35 @@ msgstr "Weitere Zeitpunkte"
msgid "More"
msgstr "Mehr"
-#: ../src/GroupSelector.cs:517 ../src/ui/main_window.ui.h:34
+#: ../src/GroupSelector.cs:530 ../src/ui/main_window.ui.h:35
msgid "_Clear Date Range"
msgstr "Datumsspanne _zurücksetzen"
-#: ../src/Imaging/Exif.cs:228
+#: ../src/Imaging/Exif.cs:229
msgid "Image Directory"
msgstr "Bildordner"
-#: ../src/Imaging/Exif.cs:230
+#: ../src/Imaging/Exif.cs:231
msgid "Thumbnail Directory"
msgstr "Vorschauordner"
-#: ../src/Imaging/Exif.cs:232
+#: ../src/Imaging/Exif.cs:233
msgid "Exif Directory"
msgstr "EXIF-Ordner"
-#: ../src/Imaging/Exif.cs:234
+#: ../src/Imaging/Exif.cs:235
msgid "GPS Directory"
msgstr "GPS-Ordner"
-#: ../src/Imaging/Exif.cs:236
+#: ../src/Imaging/Exif.cs:237
msgid "InterOperability Directory"
msgstr "Kompatibilitätsordner"
-#: ../src/Imaging/Exif.cs:238
+#: ../src/Imaging/Exif.cs:239
msgid "Unknown Directory"
msgstr "Unbekannter Ordner"
-#: ../src/Imaging/ImageFile.cs:117
+#: ../src/Imaging/ImageFile.cs:119
msgid "Writing to this file format is not supported"
msgstr "Schreiben in diesem Dateiformat wird nicht unterstützt"
@@ -2355,43 +2267,12 @@ msgstr "Kategorie des Objekts"
msgid "Unknown IIM DataSet"
msgstr "Unbekannter IIM-Datensatz"
-#: ../src/ImportCommand.cs:48 ../src/SingleView.cs:344
-msgid "Select Folder"
-msgstr "Ordner wählen"
-
-#: ../src/ImportCommand.cs:259
-msgid "(No Cameras Detected)"
-msgstr "(Keine Kameras erkannt)"
-
-#: ../src/ImportCommand.cs:404
-#, csharp-format
-msgid "Loading {0} of {1}"
-msgstr "Laden der Datei {0} von {1}"
-
-#: ../src/ImportCommand.cs:470
-msgid "Done Loading"
-msgstr "Laden abgeschlossen"
-
-#: ../src/ImportCommand.cs:684
-msgid "Directory does not exist."
-msgstr "Ordner ist nicht vorhanden."
-
-#: ../src/ImportCommand.cs:685
-#, csharp-format
-msgid ""
-"The directory you selected \"{0}\" does not exist. Please choose a different "
-"directory"
-msgstr ""
-"Der von Ihnen gewählte Ordner »{0}« ist nicht vorhanden. Bitte wählen Sie "
-"einen anderen Ordner"
-
-#: ../src/ImportCommand.cs:738 ../src/ImportCommand.cs:740
+#: ../src/Import/ImportController.cs:406 ../src/Import/ImportController.cs:408
#: ../src/XmpTagsImporter.cs:89
-#| msgid "Import Tags"
msgid "Imported Tags"
msgstr "Importierte Markierungen"
-#: ../src/ItemAction.cs:79 ../src/MainWindow.cs:308 ../src/SingleView.cs:71
+#: ../src/ItemAction.cs:79 ../src/MainWindow.cs:280 ../src/SingleView.cs:70
msgid "Rotate Left"
msgstr "Nach links drehen"
@@ -2399,7 +2280,7 @@ msgstr "Nach links drehen"
msgid "Rotate picture left"
msgstr "Bild nach links drehen"
-#: ../src/ItemAction.cs:91 ../src/MainWindow.cs:312 ../src/SingleView.cs:76
+#: ../src/ItemAction.cs:91 ../src/MainWindow.cs:284 ../src/SingleView.cs:75
msgid "Rotate Right"
msgstr "Nach rechts drehen"
@@ -2411,81 +2292,76 @@ msgstr "Bild nach rechts drehen"
msgid "Next picture"
msgstr "Nächstes Bild"
+#: ../src/ItemAction.cs:123
+msgid "Previous"
+msgstr "Vorheriges"
+
#: ../src/ItemAction.cs:124
msgid "Previous picture"
msgstr "Vorheriges Bild"
-#: ../src/MainWindow.cs:303
+#: ../src/MainWindow.cs:273 ../src/UI.Dialog/ImportDialog.cs:171
+#: ../src/ui/import.ui.h:4
+msgid "Import"
+msgstr "Importieren"
+
+#: ../src/MainWindow.cs:275
msgid "Import new images"
msgstr "Neue Bilder importieren"
-#: ../src/MainWindow.cs:319 ../src/ui/main_window.ui.h:3
+#: ../src/MainWindow.cs:291 ../src/ui/main_window.ui.h:3
msgid "Browse"
msgstr "Übersicht"
-#: ../src/MainWindow.cs:323
+#: ../src/MainWindow.cs:295
msgid "Browse many photos simultaneously"
msgstr "Viele Fotos gleichzeitig durchstöbern"
-#: ../src/MainWindow.cs:327
+#: ../src/MainWindow.cs:299
msgid "Edit Image"
msgstr "Bild bearbeiten"
-#: ../src/MainWindow.cs:331
+#: ../src/MainWindow.cs:303
msgid "View and edit a photo"
msgstr "Ein Foto anzeigen und bearbeiten"
-#: ../src/MainWindow.cs:336 ../src/SingleView.cs:83
+#: ../src/MainWindow.cs:308 ../src/SingleView.cs:82
msgid "Fullscreen"
msgstr "Vollbild"
-#: ../src/MainWindow.cs:338 ../src/SingleView.cs:85
+#: ../src/MainWindow.cs:310 ../src/SingleView.cs:84
msgid "View photos fullscreen"
msgstr "Fotos im Vollbild anzeigen"
-#: ../src/MainWindow.cs:343 ../src/SingleView.cs:90
+#: ../src/MainWindow.cs:315 ../src/SingleView.cs:89
msgid "View photos in a slideshow"
msgstr "Fotos in einer Diaschau anzeigen"
-#: ../src/MainWindow.cs:358
+#: ../src/MainWindow.cs:330
msgid "Previous photo"
msgstr "Vorheriges Foto"
-#: ../src/MainWindow.cs:363
+#: ../src/MainWindow.cs:335
msgid "Next photo"
msgstr "Nächstes Foto"
-#: ../src/MainWindow.cs:1518
-msgid "No cameras detected."
-msgstr "Keine Kameras erkannt."
-
-#: ../src/MainWindow.cs:1519
-msgid ""
-"F-Spot was unable to find any cameras attached to this system. Double check "
-"that the camera is connected and has power"
-msgstr ""
-"F-Spot konnte keine an diesem System angeschlossene Kamera finden. "
-"Vergewissern Sie sich, dass die Kamera angeschlossen und eingeschaltet ist."
-
-#: ../src/MainWindow.cs:1558
-msgid "Error connecting to camera"
-msgstr "Fehler beim Verbinden zur Kamera"
+#: ../src/MainWindow.cs:412
+msgid "Show _Find Bar"
+msgstr "Suchfeld _anzeigen"
-#: ../src/MainWindow.cs:1559
-#, csharp-format
-msgid "Received error \"{0}\" while connecting to camera"
-msgstr ""
-"Während dem Verbindungsaufbau zur Kamera wurde der Fehler »{0}« empfangen"
+#: ../src/MainWindow.cs:415
+msgid "Hide _Find Bar"
+msgstr "Suchfeld _verbergen"
#. Translators, The singular case will never happen here.
-#: ../src/MainWindow.cs:1846
+#: ../src/MainWindow.cs:1719
#, csharp-format
msgid "Merge the selected tag"
msgid_plural "Merge the {0} selected tags?"
msgstr[0] "Die ausgewählte Markierung zusammenführen?"
msgstr[1] "Die {0} ausgewählten Markierungen zusammenführen?"
-#: ../src/MainWindow.cs:1873
+#: ../src/MainWindow.cs:1746
msgid ""
"This operation will merge the selected tags and any sub-tags into a single "
"tag."
@@ -2493,76 +2369,76 @@ msgstr ""
"Diese Aktion wird die gewählten Markierungen und alle Untermarkierungen zu "
"einer einzigen Markierung zusammenführen."
-#: ../src/MainWindow.cs:1875
+#: ../src/MainWindow.cs:1748
msgid "_Merge Tags"
msgstr "Markierungen _zusammenführen"
-#: ../src/MainWindow.cs:2080
+#: ../src/MainWindow.cs:1953
#, csharp-format
msgid "{0} Photo out of {1}"
msgid_plural "{0} Photos out of {1}"
msgstr[0] "{0} von {1} Fotos"
msgstr[1] "{0} von {1} Fotos"
-#: ../src/MainWindow.cs:2082 ../src/SingleView.cs:467
+#: ../src/MainWindow.cs:1955 ../src/SingleView.cs:465
#, csharp-format
msgid "{0} Photo"
msgid_plural "{0} Photos"
msgstr[0] "{0} Foto"
msgstr[1] "{0} Fotos"
-#: ../src/MainWindow.cs:2085
+#: ../src/MainWindow.cs:1958
#, csharp-format
msgid " ({0} selected)"
msgid_plural " ({0} selected)"
msgstr[0] " ({0} ausgewählt)"
msgstr[1] " ({0} ausgewählt)"
-#: ../src/MainWindow.cs:2166
+#: ../src/MainWindow.cs:2039
msgid "_Ok"
msgstr "_OK"
-#: ../src/MainWindow.cs:2167
+#: ../src/MainWindow.cs:2040
msgid "Error Deleting Picture"
msgstr "Fehler beim Löschen des Bilds"
-#: ../src/MainWindow.cs:2172
+#: ../src/MainWindow.cs:2045
#, csharp-format
msgid "No permission to delete the file:{1}{0}"
msgstr "Keine Berechtigung zum Löschen der Datei:{1}{0}"
-#: ../src/MainWindow.cs:2176
+#: ../src/MainWindow.cs:2049
#, csharp-format
msgid "An error of type {0} occurred while deleting the file:{2}{1}"
msgstr "Ein Fehler des Typs {0} ist beim Löschen der Datei aufgetreten:{2}{1}"
-#: ../src/MainWindow.cs:2208
+#: ../src/MainWindow.cs:2081
#, csharp-format
msgid "Delete the selected photo permanently?"
msgid_plural "Delete the {0} selected photos permanently?"
msgstr[0] "Das ausgewählte Foto dauerhaft löschen?"
msgstr[1] "Die {0} ausgewählten Fotos dauerhaft löschen?"
-#: ../src/MainWindow.cs:2212
+#: ../src/MainWindow.cs:2085
msgid "This deletes all versions of the selected photo from your drive."
msgid_plural "This deletes all versions of the selected photos from your drive."
msgstr[0] "Dies löscht alle Versionen des gewählten Fotos vom Laufwerk."
msgstr[1] "Dies löscht alle Versionen der gewählten Fotos vom Laufwerk."
-#: ../src/MainWindow.cs:2215
+#: ../src/MainWindow.cs:2088
msgid "_Delete photo"
msgid_plural "_Delete photos"
msgstr[0] "Foto _löschen"
msgstr[1] "Fotos _löschen"
-#: ../src/MainWindow.cs:2251
+#: ../src/MainWindow.cs:2124
#, csharp-format
msgid "Remove the selected photo from F-Spot?"
msgid_plural "Remove the {0} selected photos from F-Spot?"
msgstr[0] "Das ausgewählte Foto aus F-Spot entfernen?"
msgstr[1] "Die {0} ausgewählten Fotos aus F-Spot entfernen?"
-#: ../src/MainWindow.cs:2256
+#: ../src/MainWindow.cs:2129
msgid ""
"If you remove photos from the F-Spot catalog all tag information will be "
"lost. The photos remain on your computer and can be imported into F-Spot "
@@ -2572,27 +2448,27 @@ msgstr ""
"Markierungsinformationen verloren. Die Fotos bleiben jedoch auf dem Rechner "
"erhalten und können wieder in F-Spot importiert werden."
-#: ../src/MainWindow.cs:2257
+#: ../src/MainWindow.cs:2130
msgid "_Remove from Catalog"
msgstr "Aus dem Katalog ent_fernen"
-#: ../src/MainWindow.cs:2320
+#: ../src/MainWindow.cs:2199
#, csharp-format
msgid "Delete tag \"{0}\"?"
msgstr "Die Markierung »{0}« löschen?"
-#: ../src/MainWindow.cs:2322
+#: ../src/MainWindow.cs:2201
#, csharp-format
msgid "Delete the {0} selected tags?"
msgstr "Die {0} ausgewählten Markierungen löschen?"
-#: ../src/MainWindow.cs:2327
+#: ../src/MainWindow.cs:2206
msgid "photo"
msgid_plural "photos"
msgstr[0] "Foto"
msgstr[1] "Fotos"
-#: ../src/MainWindow.cs:2329
+#: ../src/MainWindow.cs:2208
#, csharp-format
msgid "If you delete this tag, the association with {0} {1} will be lost."
msgid_plural ""
@@ -2604,18 +2480,18 @@ msgstr[1] ""
"Wenn eine Markierung gelöscht wird, gehen alle Verknüpfungen zu {0} {1} "
"verloren."
-#: ../src/MainWindow.cs:2334
+#: ../src/MainWindow.cs:2213
msgid "_Delete tag"
msgid_plural "_Delete tags"
msgstr[0] "Markierung _löschen"
msgstr[1] "Markierungen _löschen"
#. A Category is not empty. Can not delete it.
-#: ../src/MainWindow.cs:2348
+#: ../src/MainWindow.cs:2227
msgid "Tag is not empty"
msgstr "Markierung ist nicht leer"
-#: ../src/MainWindow.cs:2349
+#: ../src/MainWindow.cs:2228
#, csharp-format
msgid ""
"Can not delete tags that have tags within them. Please delete tags under "
@@ -2624,39 +2500,39 @@ msgstr ""
"Markierungen können nicht gelöscht werden, wenn sie weitere Markierungen "
"beinhalten. Bitte löschen Sie zuerst die Markierungen unterhalb von »{0}«."
-#: ../src/MainWindow.cs:2789
+#: ../src/MainWindow.cs:2659
msgid "Rotate selected photo left"
msgid_plural "Rotate selected photos left"
msgstr[0] "Ausgewähltes Foto nach links rotieren"
msgstr[1] "Ausgewählte Fotos nach links rotieren"
-#: ../src/MainWindow.cs:2802
+#: ../src/MainWindow.cs:2672
msgid "Rotate selected photo right"
msgid_plural "Rotate selected photos right"
msgstr[0] "Ausgewähltes Foto nach rechts drehen"
msgstr[1] "Ausgewählte Fotos nach rechts drehen"
-#: ../src/MainWindow.cs:2813
+#: ../src/MainWindow.cs:2683
#, csharp-format
msgid "Find _Selected Tag"
msgid_plural "Find _Selected Tags"
msgstr[0] "Gewählte Markierung _finden"
msgstr[1] "Gewählte Markierungen _finden"
-#: ../src/MainWindow.cs:2817
+#: ../src/MainWindow.cs:2687
#, csharp-format
msgid "Find Selected Tag _With"
msgid_plural "Find Selected Tags _With"
msgstr[0] "Ausgewählte Markierung suchen _mit"
msgstr[1] "Ausgewählte Markierungen suchen _mit"
-#: ../src/MainWindow.cs:2858
+#: ../src/MainWindow.cs:2728
msgid "Create New Version?"
msgid_plural "Create New Versions?"
msgstr[0] "Neue Version erstellen?"
msgstr[1] "Neue Versionen erstellen?"
-#: ../src/MainWindow.cs:2860
+#: ../src/MainWindow.cs:2730
#, csharp-format
msgid ""
"Before launching {1}, should F-Spot create a new version of the selected "
@@ -2671,7 +2547,7 @@ msgstr[1] ""
"Soll F-Spot vor dem Ausführen von {1} eine Kopie der ausgewählten Fotos "
"erstellen, um die Originale zu erhalten?"
-#: ../src/MainWindow.cs:2882
+#: ../src/MainWindow.cs:2752
msgid "XCF version"
msgstr "XCF-Version"
@@ -2785,9 +2661,13 @@ msgstr "Schärfe"
msgid "Scene Type"
msgstr "Szenentyp"
+#: ../src/PhotoStore.cs:166 ../src/ui/mail_dialog.ui.h:19
+msgid "Original"
+msgstr "Original"
+
#. Fixme this should really set parent menu
#. items insensitve
-#: ../src/PhotoTagMenu.cs:74
+#: ../src/PhotoTagMenu.cs:62
msgid "(No Tags)"
msgstr "(Keine Markierungen)"
@@ -2807,73 +2687,72 @@ msgstr "Version umbenennen"
msgid "New name:"
msgstr "Neuer Name:"
-#: ../src/PhotoVersionCommands.cs:110
-msgid "Could not create a new version"
-msgstr "Es konnte keine neue Version erstellt werden"
-
-#: ../src/PhotoVersionCommands.cs:111
-#, csharp-format
-msgid "Received exception \"{0}\". Unable to create version \"{1}\""
-msgstr ""
-"Die Ausnahme »{0}« wurde empfangen. Die Version »{1}« kann nicht erstellt "
-"werden."
-
-#: ../src/PhotoVersionCommands.cs:138
-msgid "Really Delete?"
-msgstr "Wirklich löschen?"
-
-#: ../src/PhotoVersionCommands.cs:139
-msgid "Cancel"
-msgstr "Abbrechen"
-
-#: ../src/PhotoVersionCommands.cs:140
+#: ../src/PhotoVersionCommands.cs:123
msgid "Delete"
msgstr "Löschen"
-#: ../src/PhotoVersionCommands.cs:144
+#: ../src/PhotoVersionCommands.cs:124
#, csharp-format
msgid "Really delete version \"{0}\"?"
msgstr "Soll die Version »{0}« wirklich gelöscht werden?"
-#: ../src/PhotoVersionCommands.cs:154
-msgid "Could not delete a version"
-msgstr "Eine Version konnte nicht gelöscht werden"
+#: ../src/PhotoVersionCommands.cs:125
+msgid "This removes the version and deletes the corresponding file from disk."
+msgstr ""
+"Dadurch wird die Version gelöscht und die entsprechende Datei vom Datenträger "
+"gelöscht."
-#: ../src/PhotoVersionCommands.cs:155
+#: ../src/PhotoVersionCommands.cs:170
+msgid "De_tach"
+msgstr "Ab_trennen"
+
+#: ../src/PhotoVersionCommands.cs:171
#, csharp-format
-msgid "Received exception \"{0}\". Unable to delete version \"{1}\""
+msgid "Really detach version \"{0}\" from \"{1}\"?"
+msgstr "Soll die Version »{0}« wirklich von »{1}« abgetrennt werden?"
+
+#: ../src/PhotoVersionCommands.cs:172
+msgid ""
+"This makes the version appear as a separate photo in the library. To undo, "
+"drag the new photo back to its parent."
msgstr ""
-"Die Ausnahme »{0}« wurde empfangen. Die Version »{1}« kann nicht gelöscht "
-"werden."
+"Dadurch erscheint die Version als eigenständiges Foto in der Bibliothek. Um "
+"diesen Vorgang rückgängig zu machen, ziehen Sie das neue Foto an die "
+"Ausgangsposition zurück."
-#: ../src/PhotoVersionCommands.cs:196
-msgid "Could not rename a version"
-msgstr "Version konnte nicht umbenannt werden"
+#: ../src/PhotoVersionCommands.cs:194
+msgid "Re_parent"
+msgstr "Abtrennung auf_heben"
-#: ../src/PhotoVersionCommands.cs:197
+#: ../src/PhotoVersionCommands.cs:195
#, csharp-format
-msgid "Received exception \"{0}\". Unable to rename version to \"{1}\""
+msgid "Really reparent \"{0}\" as version of \"{1}\"?"
+msgid_plural "Really reparent {2} photos as versions of \"{1}\"?"
+msgstr[0] ""
+"Soll die Abtrennung von »{0}« als Version von »{1}« wirklich aufgehoben werden?"
+msgstr[1] ""
+"Soll die Abtrennung von {2} Fotos als Versionen von »{1}« wirklich aufgehoben "
+"werden?"
+
+#: ../src/PhotoVersionCommands.cs:198
+msgid ""
+"This makes the photos appear as a single one in the library. The versions can "
+"be detached using the Photo menu."
msgstr ""
-"Die Ausnahme »{0}« wurde empfangen. Der Name von Version »{1}« kann nicht "
-"geändert werden."
+"Dadurch erscheinen die Fotos als einzelnes Bild in der Bibliothek. Im »Foto«-"
+"Menü können Sie die Versionen voneinander trennen."
-#: ../src/PhotoVersionMenu.cs:66 ../src/Widgets/InfoBox.cs:563
-#: ../src/Widgets/InfoBox.cs:565
+#: ../src/PhotoVersionCommands.cs:238
+#, csharp-format
+msgid "Received exception \"{0}\"."
+msgstr "Fehler empfangen: »{0}«"
+
+#: ../src/PhotoVersionMenu.cs:66 ../src/Widgets/InfoBox.cs:566
+#: ../src/Widgets/InfoBox.cs:568
msgid "(No Edits)"
msgstr "(Keine Bearbeitungen)"
-#: ../src/PhotoView.cs:167 ../src/UI.Dialog/EditExceptionDialog.cs:38
-msgid "Error editing photo"
-msgstr "Fehler beim Bearbeiten des Fotos"
-
-#: ../src/PhotoView.cs:168 ../src/Sharpener.cs:73
-#: ../src/UI.Dialog/EditExceptionDialog.cs:25
-#, csharp-format
-msgid "Received exception \"{0}\". Unable to save photo {1}"
-msgstr ""
-"Die Ausnahme »{0}« wurde empfangen. Das Bild {1} kann nicht gespeichert werden."
-
-#: ../src/PhotoView.cs:356
+#: ../src/PhotoView.cs:339
msgid "Comment:"
msgstr "Kommentar:"
@@ -2885,72 +2764,64 @@ msgstr "Fotos"
msgid "Image Settings"
msgstr "Bildeinstellungen"
-#: ../src/QueryWidget.cs:58
+#: ../src/QueryWidget.cs:55
msgid "Find: "
msgstr "Suchen: "
-#: ../src/QueryWidget.cs:63
+#: ../src/QueryWidget.cs:60
msgid "Untagged photos"
msgstr "Unmarkierte Fotos"
-#: ../src/QueryWidget.cs:71
+#: ../src/QueryWidget.cs:68
msgid "Rated photos"
msgstr "Bewertete Fotos"
#. Note for translators: 'Import roll' is no command, it means 'Roll that has been imported'
-#: ../src/QueryWidget.cs:80
+#: ../src/QueryWidget.cs:77
msgid "Import roll"
msgstr "Importe"
-#: ../src/QueryWidget.cs:104
+#: ../src/QueryWidget.cs:100
msgid "Clear search"
msgstr "Suche zurücksetzen"
-#: ../src/QueryWidget.cs:111
+#: ../src/QueryWidget.cs:107
msgid "Refresh search"
msgstr "Suche zurücksetzen"
-#: ../src/QueryWidget.cs:113
+#: ../src/QueryWidget.cs:110
msgid "No matching photos found"
msgstr "Keine passenden Fotos gefunden"
-#: ../src/QueryWidget.cs:155
-msgid "Hide _Find Bar"
-msgstr "Suchfeld _verbergen"
-
-#: ../src/QueryWidget.cs:161
-msgid "Show _Find Bar"
-msgstr "Suchfeld _anzeigen"
-
-#: ../src/RotateCommand.cs:96 ../src/RotateCommand.cs:111
+#: ../src/RotateCommand.cs:87 ../src/RotateCommand.cs:102
msgid "Unable to rotate this type of photo"
msgstr "Diese Art von Foto konnte nicht gedreht werden"
-#: ../src/RotateCommand.cs:131
+#: ../src/RotateCommand.cs:122
msgid "Unable to rotate readonly file"
msgstr "Schreibgeschützte Datei kann nicht gedreht werden"
-#: ../src/RotateCommand.cs:198
+#: ../src/RotateCommand.cs:185
msgid "Rotating photos"
msgstr "Fotos werden gedreht"
-#: ../src/RotateCommand.cs:209
+#: ../src/RotateCommand.cs:196
#, csharp-format
msgid "Rotating photo \"{0}\""
msgstr "Foto »{0}« wird gedreht"
-#: ../src/RotateCommand.cs:222
+#: ../src/RotateCommand.cs:209
msgid "Directory not found"
msgstr "Ordner nicht gefunden"
-#: ../src/RotateCommand.cs:242
+#: ../src/RotateCommand.cs:229
#, csharp-format
msgid "Unable to rotate photo"
msgid_plural "Unable to rotate {0} photos"
msgstr[0] "Das Foto konnte nicht gedreht werden"
msgstr[1] "{0} Fotos konnten nicht gedreht werden"
-#: ../src/RotateCommand.cs:244
+#: ../src/RotateCommand.cs:231
#, csharp-format
msgid ""
"The photo could not be rotated because it is on a read only file system or "
@@ -2967,35 +2838,35 @@ msgstr[1] ""
"schreibgeschützten Dateisystem oder Medium (z.B. CD-ROM) befinden. Bitte "
"versuchen Sie es nach Überprüfung der Zugriffsrechte erneut."
-#: ../src/RotateCommand.cs:271
+#: ../src/RotateCommand.cs:258
#, csharp-format
msgid "Received error \"{0}\" while attempting to rotate {1}"
msgstr "Beim Versuch »{1}« zu drehen, wurde der Fehler »{0}« empfangen"
-#: ../src/RotateCommand.cs:276
+#: ../src/RotateCommand.cs:263
msgid "Error while rotating photo."
msgstr "Fehler beim Drehen des Fotos."
-#: ../src/SendEmail.cs:240
+#: ../src/SendEmail.cs:218
msgid "Preparing email"
msgstr "E-Mail wird vorbereitet"
-#: ../src/SendEmail.cs:292
+#: ../src/SendEmail.cs:270
#, csharp-format
msgid "Exporting picture \"{0}\""
msgstr "Bild »{0}« wird exportiert"
-#: ../src/SendEmail.cs:314
+#: ../src/SendEmail.cs:292
msgid "Error processing image"
msgstr "Fehler beim Verarbeiten des Bildes"
-#: ../src/SendEmail.cs:315
+#: ../src/SendEmail.cs:293
#, csharp-format
msgid "An error occured while processing \"{0}\": {1}"
msgstr "Ein Fehler ist beim Bearbeiten von »{0}« aufgetreten: {1}"
#. Send the mail :)
-#: ../src/SendEmail.cs:330
+#: ../src/SendEmail.cs:307
msgid "My Photos"
msgstr "Meine Fotos"
@@ -3003,6 +2874,12 @@ msgstr "Meine Fotos"
msgid "Error saving sharpened photo"
msgstr "Fehler beim Speichern des geschärften Bilds"
+#: ../src/Sharpener.cs:73 ../src/UI.Dialog/EditExceptionDialog.cs:26
+#, csharp-format
+msgid "Received exception \"{0}\". Unable to save photo {1}"
+msgstr ""
+"Die Ausnahme »{0}« wurde empfangen. Das Bild {1} kann nicht gespeichert werden."
+
#: ../src/Sharpener.cs:102
msgid "Sharpen"
msgstr "Schärfen"
@@ -3019,36 +2896,40 @@ msgstr "Radius:"
msgid "Threshold:"
msgstr "Schwellwert:"
-#: ../src/SingleView.cs:73
+#: ../src/SingleView.cs:72
msgid "Rotate photo left"
msgstr "Foto nach links rotieren"
-#: ../src/SingleView.cs:78
+#: ../src/SingleView.cs:77
msgid "Rotate photo right"
msgstr "Foto nach rechts rotieren"
-#: ../src/SingleView.cs:115
+#: ../src/SingleView.cs:114
msgid "Folder"
msgstr "Ordner"
-#: ../src/SingleView.cs:341
+#: ../src/SingleView.cs:339
msgid "Open"
msgstr "Öffnen"
-#: ../src/SingleView.cs:428
+#: ../src/SingleView.cs:342
+msgid "Select Folder"
+msgstr "Ordner wählen"
+
+#: ../src/SingleView.cs:426
msgid "Set as Background"
msgstr "Als Hintergrundbild verwenden"
-#: ../src/TagCommands.cs:96 ../src/TagSelectionWidget.cs:498
-#: ../src/UI.Dialog/EditTagDialog.cs:78
+#: ../src/TagCommands.cs:97 ../src/TagSelectionWidget.cs:491
+#: ../src/UI.Dialog/EditTagDialog.cs:76
msgid "This name is already in use"
msgstr "Dieser Name existiert bereits"
-#: ../src/TagCommands.cs:144
+#: ../src/TagCommands.cs:145
msgid "Create New Tag"
msgstr "Neue Markierung erstellen"
-#: ../src/TagCommands.cs:145
+#: ../src/TagCommands.cs:146
msgid "Name of New Tag:"
msgstr "Name der neuen Markierung:"
@@ -3059,12 +2940,11 @@ msgid_plural "Find"
msgstr[0] "Suchen"
msgstr[1] "Suchen"
-#: ../src/TagPopup.cs:36 ../src/Widgets/TagMenu.cs:91
+#: ../src/TagPopup.cs:36 ../src/Widgets/TagMenu.cs:98
msgid "Create New Tag..."
msgstr "Neue Markierung erstellen …"
#: ../src/TagPopup.cs:42
-#| msgid "Edit Tag"
msgid "Edit Tag..."
msgstr "Markierung bearbeiten …"
@@ -3115,41 +2995,41 @@ msgstr[1] "Suchen _mit"
msgid "All"
msgstr "Alle"
-#: ../src/TagQueryWidget.cs:149 ../src/Term.cs:592
+#: ../src/TagQueryWidget.cs:149 ../src/Term.cs:586
#, csharp-format
msgid "Not {0}"
msgstr "Nicht {0}"
-#: ../src/TagQueryWidget.cs:278
+#: ../src/TagQueryWidget.cs:273
msgid "Drag tags here to search for them"
msgstr "Markierungen hier einfügen, um nach ihnen zu suchen"
-#: ../src/TagSelectionWidget.cs:497
+#: ../src/TagSelectionWidget.cs:490
msgid "Error renaming tag"
msgstr "Fehler beim Umbenennen der Markierung"
-#: ../src/TagStore.cs:203
+#: ../src/TagStore.cs:204
msgid "Favorites"
msgstr "Favoriten"
-#: ../src/TagStore.cs:208
+#: ../src/TagStore.cs:209
msgid "Hidden"
msgstr "Versteckt"
-#: ../src/TagStore.cs:216
+#: ../src/TagStore.cs:217
msgid "People"
msgstr "Personen"
-#: ../src/TagStore.cs:221
+#: ../src/TagStore.cs:222
msgid "Places"
msgstr "Orte"
-#: ../src/TagStore.cs:226
+#: ../src/TagStore.cs:227
msgid "Events"
msgstr "Ereignisse"
#. The label for the root category is used in new and edit tag dialogs
-#: ../src/TagStore.cs:239 ../src/Widgets/InfoBox.cs:409
+#: ../src/TagStore.cs:240 ../src/Widgets/InfoBox.cs:410
msgid "(None)"
msgstr "(Keine)"
@@ -3169,28 +3049,28 @@ msgstr " oder "
#. OPS The operators we support, case insensitive
#. private static string op_str = "(?'Ops' or | and |, | \\s+ )";
#: ../src/Term.cs:380 ../src/UI.Dialog/ui/DateRangeDialog.ui.h:7
-#: ../src/Widgets/FindBar.cs:177
+#: ../src/Widgets/FindBar.cs:178 ../src/Widgets/FindBar.cs:533
msgid "or"
msgstr "oder"
-#: ../src/ThumbnailCommand.cs:20
+#: ../src/ThumbnailCommand.cs:21
msgid "Updating Thumbnails"
msgstr "Vorschaubilder werden aktualisiert"
-#: ../src/ThumbnailCommand.cs:28
+#: ../src/ThumbnailCommand.cs:29
#, csharp-format
msgid "Updating picture \"{0}\""
msgstr "Bild »{0}« wird aktualisiert"
-#: ../src/UI.Dialog/AboutDialog.cs:76
+#: ../src/UI.Dialog/AboutDialog.cs:94
msgid "Photo management for GNOME"
msgstr "Fotoverwaltung für GNOME"
-#: ../src/UI.Dialog/AboutDialog.cs:77
-msgid "Copyright © 2003-2009 Novell Inc."
-msgstr "Copyright © 2003-2009 Novell Inc."
+#: ../src/UI.Dialog/AboutDialog.cs:95
+msgid "Copyright © 2003-2010 Novell Inc."
+msgstr "Copyright © 2003-2010 Novell Inc."
-#: ../src/UI.Dialog/AboutDialog.cs:100
+#: ../src/UI.Dialog/AboutDialog.cs:119
msgid "translator-credits"
msgstr ""
"Frank Arnold <frank at scirocco-5v-turbo.de>\n"
@@ -3199,11 +3079,11 @@ msgstr ""
"Arun Persaud <arun at nubati.net>\n"
"Mario Blättermann <mariobl at gnome.org>"
-#: ../src/UI.Dialog/AboutDialog.cs:105
+#: ../src/UI.Dialog/AboutDialog.cs:124
msgid "F-Spot Website"
msgstr "F-Spot Webseite"
-#: ../src/UI.Dialog/AdjustTimeDialog.cs:112
+#: ../src/UI.Dialog/AdjustTimeDialog.cs:113
#: ../src/UI.Dialog/ui/AdjustTimeDialog.ui.h:10
#, csharp-format
msgid "Shift all photos by {0}"
@@ -3245,16 +3125,20 @@ msgstr "Vergangene Woche (Mo-So)"
msgid "Customized Range"
msgstr "Benutzerdefinierter Bereich"
-#: ../src/UI.Dialog/EditTagIconDialog.cs:46
+#: ../src/UI.Dialog/EditExceptionDialog.cs:39
+msgid "Error editing photo"
+msgstr "Fehler beim Bearbeiten des Fotos"
+
+#: ../src/UI.Dialog/EditTagIconDialog.cs:42
#, csharp-format
msgid "Edit Icon for Tag {0}"
msgstr "Symbol für Markierung {0} bearbeiten"
-#: ../src/UI.Dialog/EditTagIconDialog.cs:68
+#: ../src/UI.Dialog/EditTagIconDialog.cs:64
msgid "Select Photo from file"
msgstr "Foto aus Datei auswählen"
-#: ../src/UI.Dialog/EditTagIconDialog.cs:90
+#: ../src/UI.Dialog/EditTagIconDialog.cs:86
#, csharp-format
msgid ""
"\n"
@@ -3266,21 +3150,21 @@ msgid ""
msgstr ""
"\n"
"<b>Aus Foto</b>\n"
-" Sie können eines der Fotos ihrer Sammlung als Symbol für\n"
+" Sie können eines der Fotos Ihrer Sammlung als Symbol für\n"
" diese Markierung benutzen. Dazu benötigen Sie jedoch mindestens\n"
" ein Foto mit dieser Markierung. Bitte markieren Sie ein Foto als »{0}« und\n"
" kehren Sie hierher zurück, um es als Symbol auszuwählen."
-#: ../src/UI.Dialog/EditTagIconDialog.cs:168
+#: ../src/UI.Dialog/EditTagIconDialog.cs:164
msgid "Unable to load image"
msgstr "Bild konnte nicht geladen werden"
-#: ../src/UI.Dialog/EditTagIconDialog.cs:169
+#: ../src/UI.Dialog/EditTagIconDialog.cs:165
#, csharp-format
msgid "Unable to load \"{0}\" as icon for the tag"
msgstr "»{0}« kann nicht als Symbol für die Markierung geladen werden"
-#: ../src/UI.Dialog/EditTagIconDialog.cs:207
+#: ../src/UI.Dialog/EditTagIconDialog.cs:203
#, csharp-format
msgid "Photo {0} of {1}"
msgstr "Foto {0} von {1}"
@@ -3297,24 +3181,52 @@ msgstr "Fehlerdetails"
msgid "An unhandled exception was thrown: "
msgstr "Eine unverarbeitete Ausnahme trat auf:"
-#: ../src/UI.Dialog/PreferenceDialog.cs:54
-#: ../src/UI.Dialog/PreferenceDialog.cs:77
+#: ../src/UI.Dialog/ImportDialog.cs:15
+msgid "Choose Folder..."
+msgstr "Ordner wählen …"
+
+#: ../src/UI.Dialog/ImportDialog.cs:124
+msgid "Choose Import source..."
+msgstr "Importquelle wählen …"
+
+#: ../src/UI.Dialog/ImportDialog.cs:136
+msgid "(No Cameras Detected)"
+msgstr "(Keine Kameras erkannt)"
+
+#: ../src/UI.Dialog/ImportDialog.cs:264
+#, csharp-format
+msgid "Importing Photos: {0} of {1}..."
+msgstr "Fotos werden importiert: {0} von {1} …"
+
+#: ../src/UI.Dialog/ImportDialog.cs:288
+msgid "Importing photos..."
+msgstr "Fotos werden importiert …"
+
+#. TODO: Using a GtkSpinner would be nicer here.
+#: ../src/UI.Dialog/ImportDialog.cs:295
+msgid "Searching for photos... (You can already click Import to continue)"
+msgstr ""
+"Nach Fotos wird gesucht … (Sie können auf »Importieren« klicken, um "
+"fortzusetzen)"
+
+#: ../src/UI.Dialog/PreferenceDialog.cs:55
+#: ../src/UI.Dialog/PreferenceDialog.cs:78
msgid "None"
msgstr "Keine"
-#: ../src/UI.Dialog/PreferenceDialog.cs:56
+#: ../src/UI.Dialog/PreferenceDialog.cs:57
msgid "System profile"
msgstr "Systemprofil"
-#: ../src/UI.Dialog/PreferenceDialog.cs:94
+#: ../src/UI.Dialog/PreferenceDialog.cs:95
msgid "Standard theme"
msgstr "Standardthema"
-#: ../src/UI.Dialog/RepairDbDialog.cs:20
+#: ../src/UI.Dialog/RepairDbDialog.cs:21
msgid "Error loading database."
msgstr "Fehler beim Laden der Datenbank."
-#: ../src/UI.Dialog/RepairDbDialog.cs:21
+#: ../src/UI.Dialog/RepairDbDialog.cs:22
#, csharp-format
msgid ""
"F-Spot encountered an error while loading the photo database. The old "
@@ -3323,15 +3235,15 @@ msgstr ""
"Ein Fehler trat beim Laden der Foto-Datenbank auf. Die alte Datenbank wurde "
"nach »{0}« verschoben und eine neue Datenbank wurde erstellt."
-#: ../src/UI.Dialog/SelectionRatioDialog.cs:60
+#: ../src/UI.Dialog/SelectionRatioDialog.cs:61
msgid "Label"
msgstr "Beschriftung"
-#: ../src/UI.Dialog/SelectionRatioDialog.cs:64
+#: ../src/UI.Dialog/SelectionRatioDialog.cs:65
msgid "Ratio"
msgstr "Bildformate"
-#: ../src/UI.Dialog/ThreadProgressDialog.cs:56
+#: ../src/UI.Dialog/ThreadProgressDialog.cs:55
msgid "Retry"
msgstr "Erneut versuchen"
@@ -3503,6 +3415,117 @@ msgstr "<b>min. Bewertung</b>"
msgid "Set Rating Filter"
msgstr "Bewertungsfilter setzen"
+#: ../src/ui/import.ui.h:1
+msgid "Attach Tags:"
+msgstr "Markierungen hinzufügen:"
+
+#: ../src/ui/import.ui.h:2
+msgid "Copy files to the Photos folder"
+msgstr "Dateien in den Fotoordner kopieren"
+
+#: ../src/ui/import.ui.h:3
+msgid "Detect duplicates"
+msgstr "Duplikate finden"
+
+#. Translators: this string means 'source of import'
+#: ../src/ui/import.ui.h:6
+msgid "Import from:"
+msgstr "Importieren von:"
+
+#: ../src/ui/import.ui.h:7
+msgid "Include subfolders"
+msgstr "Unterordner einbeziehen"
+
+#: ../src/ui/mail_dialog.ui.h:1
+msgid "1024 px"
+msgstr "1024 px"
+
+#: ../src/ui/mail_dialog.ui.h:2
+msgid "320 px"
+msgstr "320 px"
+
+#: ../src/ui/mail_dialog.ui.h:3
+msgid "480 px"
+msgstr "480 px"
+
+#: ../src/ui/mail_dialog.ui.h:4
+msgid "640 px"
+msgstr "640 px"
+
+#: ../src/ui/mail_dialog.ui.h:5
+msgid "800 px"
+msgstr "800 px"
+
+#: ../src/ui/mail_dialog.ui.h:7
+msgid "<b>Size</b>"
+msgstr "<b>Größe</b>"
+
+#: ../src/ui/mail_dialog.ui.h:9
+msgid "<b>Summary</b>"
+msgstr "<b>Zusammenfassung</b>"
+
+#: ../src/ui/mail_dialog.ui.h:11
+msgid "Create Mail"
+msgstr "Mail erstellen"
+
+#: ../src/ui/mail_dialog.ui.h:12
+msgid "Create a mail with the selected photos (possibly resized) attached"
+msgstr ""
+"Eine Mail mit den ausgewählten Fotos (eventuell verkleinert) angehängt "
+"erstellen"
+
+#: ../src/ui/mail_dialog.ui.h:13
+msgid "Do not send a mail"
+msgstr "Keine Mail versenden"
+
+#: ../src/ui/mail_dialog.ui.h:14
+msgid "Estimated new size"
+msgstr "Geschätzte neue Größe"
+
+#: ../src/ui/mail_dialog.ui.h:15
+msgid "Extra large"
+msgstr "Extra groß"
+
+#: ../src/ui/mail_dialog.ui.h:16
+msgid "Large"
+msgstr "Groß"
+
+#: ../src/ui/mail_dialog.ui.h:17
+msgid "Medium"
+msgstr "Mittel"
+
+#: ../src/ui/mail_dialog.ui.h:18
+msgid "Number of pictures"
+msgstr "An_zahl der Bilder"
+
+#: ../src/ui/mail_dialog.ui.h:20
+msgid "Original size (possible very large file size)"
+msgstr "Originalgröße (eventuell sehr große Dateigröße)"
+
+#: ../src/ui/mail_dialog.ui.h:21
+msgid "Small"
+msgstr "Klein"
+
+#: ../src/ui/mail_dialog.ui.h:22
+msgid ""
+"Specify if an original size picture should be rotated or not. Smaller sizes "
+"are automatically rotated."
+msgstr ""
+"Geben Sie an, ob ein Bild in Originalgröße gedreht werden soll oder nicht. "
+"Kleinere Größen werden automatisch gedreht."
+
+#: ../src/ui/mail_dialog.ui.h:23
+msgid "Tiny"
+msgstr "Winzig"
+
+#: ../src/ui/mail_dialog.ui.h:24
+msgid "Total original size"
+msgstr "Gesamte Originalgröße"
+
+#: ../src/ui/mail_dialog.ui.h:25
+msgid "_Create Mail"
+msgstr "_E-Mail erstellen"
+
#: ../src/ui/main_window.ui.h:1
msgid "Adjust _Time..."
msgstr "_Uhrzeit anpassen …"
@@ -3535,201 +3558,212 @@ msgstr "Neue _Markierung erstellen …"
msgid "Create _New Version..."
msgstr "_Neue Version erstellen …"
-#: ../src/ui/main_window.ui.h:11
+#: ../src/ui/main_window.ui.h:10
+msgid "De_tach Version"
+msgstr "Version ab_trennen"
+
+#: ../src/ui/main_window.ui.h:12
msgid "Fin_d"
msgstr "_Suchen"
-#: ../src/ui/main_window.ui.h:12
+#: ../src/ui/main_window.ui.h:13
msgid "Manage _Extensions"
msgstr "_Erweiterungen verwalten"
-#: ../src/ui/main_window.ui.h:13
+#: ../src/ui/main_window.ui.h:14
msgid "Page Set_up..."
msgstr "Sei_teneinstellungen …"
-#: ../src/ui/main_window.ui.h:14
+#: ../src/ui/main_window.ui.h:15
msgid "Re_fresh Thumbnail"
msgstr "Bildvorschau _aktualisieren"
-#: ../src/ui/main_window.ui.h:18
+#: ../src/ui/main_window.ui.h:19
msgid "Select _All"
msgstr "_Alles auswählen"
-#: ../src/ui/main_window.ui.h:19
+#: ../src/ui/main_window.ui.h:20
msgid "Select _None"
msgstr "Alles a_bwählen"
-#: ../src/ui/main_window.ui.h:20
+#: ../src/ui/main_window.ui.h:21
msgid "Send by _Mail..."
msgstr "Per _E-Mail verschicken …"
-#: ../src/ui/main_window.ui.h:22
+#: ../src/ui/main_window.ui.h:23
msgid "Side_bar"
msgstr "_Seitenleiste"
-#: ../src/ui/main_window.ui.h:23
+#: ../src/ui/main_window.ui.h:24
msgid "T_ags"
msgstr "M_arkierungen"
-#: ../src/ui/main_window.ui.h:25
+#: ../src/ui/main_window.ui.h:26
msgid "Thumbnail _elements"
msgstr "Bildvorschau_elemente"
-#: ../src/ui/main_window.ui.h:26
+#: ../src/ui/main_window.ui.h:27
msgid "Too_lbar"
msgstr "_Werkzeugleiste"
-#: ../src/ui/main_window.ui.h:27
+#: ../src/ui/main_window.ui.h:28
msgid "View"
msgstr "Ansicht"
#: ../src/ui/main_window.ui.h:33
+msgid "_Attach Tag"
+msgstr "Markierung hinzu_fügen"
+
+#: ../src/ui/main_window.ui.h:34
msgid "_Attach Tag to Selection"
msgstr "Markierung zur Aus_wahl hinzufügen"
-#: ../src/ui/main_window.ui.h:35
+#: ../src/ui/main_window.ui.h:36
msgid "_Clear Rating Filter"
msgstr "_Bewertungsfilter zurücksetzen"
-#: ../src/ui/main_window.ui.h:36
+#: ../src/ui/main_window.ui.h:37
msgid "_Clear Roll Filter"
msgstr "_Importfilter zurücksetzen"
-#: ../src/ui/main_window.ui.h:38
+#: ../src/ui/main_window.ui.h:39
msgid "_Components"
msgstr "_Komponenten"
-#: ../src/ui/main_window.ui.h:39
+#: ../src/ui/main_window.ui.h:40
msgid "_Contents"
msgstr "_Inhalte"
-#: ../src/ui/main_window.ui.h:40
+#: ../src/ui/main_window.ui.h:41
msgid "_Dates"
msgstr "_Daten"
-#: ../src/ui/main_window.ui.h:42
+#: ../src/ui/main_window.ui.h:43
msgid "_Delete Selected Tag"
msgstr "Ausgewählte Markierung _löschen"
-#: ../src/ui/main_window.ui.h:43
+#: ../src/ui/main_window.ui.h:44
msgid "_Delete Version"
msgstr "Version _löschen"
-#: ../src/ui/main_window.ui.h:45
-#| msgid "Edit Tag"
+#: ../src/ui/main_window.ui.h:46
msgid "_Edit Tag..."
msgstr "Markierung b_earbeiten …"
-#: ../src/ui/main_window.ui.h:46
+#: ../src/ui/main_window.ui.h:47
msgid "_Export to"
msgstr "_Exportieren nach"
-#: ../src/ui/main_window.ui.h:47
+#: ../src/ui/main_window.ui.h:48
msgid "_Filmstrip"
msgstr "_Filmstreifen"
-#: ../src/ui/main_window.ui.h:50
+#: ../src/ui/main_window.ui.h:51
msgid "_Hidden"
msgstr "_Versteckt"
-#: ../src/ui/main_window.ui.h:51
+#: ../src/ui/main_window.ui.h:52
msgid "_Import..."
msgstr "I_mportieren …"
-#: ../src/ui/main_window.ui.h:52
+#: ../src/ui/main_window.ui.h:53
+msgid "_Invert Selection"
+msgstr "Auswahl _umkehren"
+
+#: ../src/ui/main_window.ui.h:54
msgid "_Large"
msgstr "_Groß"
-#: ../src/ui/main_window.ui.h:53
+#: ../src/ui/main_window.ui.h:55
msgid "_Last Import Roll"
msgstr "_Letzter Import"
-#: ../src/ui/main_window.ui.h:54
+#: ../src/ui/main_window.ui.h:56
msgid "_Loupe"
msgstr "_Lupe"
-#: ../src/ui/main_window.ui.h:55
+#: ../src/ui/main_window.ui.h:57
msgid "_Medium"
msgstr "_Mittel"
-#: ../src/ui/main_window.ui.h:57
+#: ../src/ui/main_window.ui.h:59
msgid "_Quit"
msgstr "_Beenden"
-#: ../src/ui/main_window.ui.h:58
+#: ../src/ui/main_window.ui.h:60
msgid "_Ratings"
msgstr "_Bewertungen"
-#: ../src/ui/main_window.ui.h:60
+#: ../src/ui/main_window.ui.h:62
msgid "_Remove Tag From Selection"
msgstr "Markierung der Auswahl ent_fernen"
-#: ../src/ui/main_window.ui.h:61
+#: ../src/ui/main_window.ui.h:63
msgid "_Rename Version"
msgstr "Version _umbenennen"
-#: ../src/ui/main_window.ui.h:62
+#: ../src/ui/main_window.ui.h:64
msgid "_Reverse Order"
msgstr "_Umgekehrte Reihenfolge"
-#: ../src/ui/main_window.ui.h:63
+#: ../src/ui/main_window.ui.h:65
msgid "_Select Import Rolls..."
msgstr "_Importe auswählen …"
-#: ../src/ui/main_window.ui.h:64
+#: ../src/ui/main_window.ui.h:66
msgid "_Set Date Range..."
msgstr "_Datumsbereich einstellen …"
-#: ../src/ui/main_window.ui.h:65
+#: ../src/ui/main_window.ui.h:67
msgid "_Set Rating filter..."
msgstr "_Bewertungsfilter einstellen …"
-#: ../src/ui/main_window.ui.h:66
+#: ../src/ui/main_window.ui.h:68
msgid "_Sharpen..."
msgstr "_Schärfen …"
-#: ../src/ui/main_window.ui.h:68
+#: ../src/ui/main_window.ui.h:70
msgid "_Small"
msgstr "_Klein"
-#: ../src/ui/main_window.ui.h:69
+#: ../src/ui/main_window.ui.h:71
msgid "_Tag Icons"
msgstr "_Markierungssymbole"
-#: ../src/ui/main_window.ui.h:70
+#: ../src/ui/main_window.ui.h:72
msgid "_Tags"
msgstr "_Markierungen"
-#: ../src/ui/main_window.ui.h:71
+#: ../src/ui/main_window.ui.h:73
msgid "_Timeline"
msgstr "_Zeitleiste"
-#: ../src/ui/main_window.ui.h:72
+#: ../src/ui/main_window.ui.h:74
msgid "_Tools"
msgstr "_Werkzeuge"
-#: ../src/ui/main_window.ui.h:73
+#: ../src/ui/main_window.ui.h:75
msgid "_Untagged Photos"
msgstr "_Unmarkierte Fotos"
-#: ../src/ui/main_window.ui.h:74
+#: ../src/ui/main_window.ui.h:76
msgid "_Version"
msgstr "_Version"
-#: ../src/Updater.cs:622
+#: ../src/Updater.cs:724
msgid "Updating F-Spot Database"
msgstr "F-Spot-Datenbank wird aktualisiert"
-#: ../src/Updater.cs:623
+#: ../src/Updater.cs:725
msgid ""
"Please wait while your F-Spot gallery's database is updated. This may take "
"some time."
msgstr ""
-"Bitte warten Sie, während die Datenbank ihrer F-Spot Galerie aktualisiert "
+"Bitte warten Sie, während die Datenbank Ihrer F-Spot Galerie aktualisiert "
"wird. Dies kann einige Zeit dauern."
#. Mono.Unix.Error error = Mono.Unix.Stdlib.GetLastError ();
-#: ../src/Utils/Unix.cs:35
+#: ../src/Utils/Unix.cs:36
msgid "Unable to create temporary file"
msgstr "Temporäre Datei konnte nicht erstellt werden"
@@ -3813,11 +3847,11 @@ msgstr "Markierungen der Fotos drucken"
msgid "Print photo comment"
msgstr "Kommentar zum Foto drucken"
-#: ../src/Widgets/EditorPage.cs:30 ../src/Widgets/Sidebar.cs:54
+#: ../src/Widgets/EditorPage.cs:31 ../src/Widgets/Sidebar.cs:54
msgid "Edit"
msgstr "Bearbeiten"
-#: ../src/Widgets/EditorPage.cs:198
+#: ../src/Widgets/EditorPage.cs:199
msgid ""
"This tool requires an active selection. Please select a region of the photo "
"and try the operation again"
@@ -3825,13 +3859,13 @@ msgstr ""
"Dieses Werkzeug benötigt eine aktive Auswahl. Bitte wählen Sie einen Bereich "
"des Fotos aus und versuchen Sie es danach erneut."
-#: ../src/Widgets/EditorPage.cs:216
+#: ../src/Widgets/EditorPage.cs:217
msgid "Error saving adjusted photo"
msgid_plural "Error saving adjusted photos"
msgstr[0] "Fehler beim Speichern des abgeglichenen Fotos"
msgstr[1] "Fehler beim Speichern der abgeglichenen Fotos"
-#: ../src/Widgets/EditorPage.cs:218
+#: ../src/Widgets/EditorPage.cs:219
#, csharp-format
msgid ""
"Received exception \"{0}\". Note that you have to develop RAW files into JPEG "
@@ -3840,15 +3874,15 @@ msgstr ""
"Die Ausnahme »{0}« wurde empfangen. Beachten Sie, dass RAW-Dateien vor der "
"Bearbeitung erst in JPEG-Dateien umgewandelt werden müssen."
-#: ../src/Widgets/Filmstrip.cs:572
+#: ../src/Widgets/Filmstrip.cs:573
msgid "_Horizontal"
msgstr "_Horizontal"
-#: ../src/Widgets/Filmstrip.cs:576
+#: ../src/Widgets/Filmstrip.cs:577
msgid "_Vertical"
msgstr "_Vertikal"
-#: ../src/Widgets/FindBar.cs:58
+#: ../src/Widgets/FindBar.cs:59
msgid "Find:"
msgstr "Suchen:"
@@ -3856,66 +3890,70 @@ msgstr "Suchen:"
msgid "Folders"
msgstr "Ordner"
-#: ../src/Widgets/FolderTreeView.cs:123
+#: ../src/Widgets/FolderTreeView.cs:127
msgid "Filesystem"
msgstr "Dateisystem"
-#: ../src/Widgets/InfoBox.cs:182
+#: ../src/Widgets/InfoBox.cs:183
msgid "Histogram"
msgstr "Histogramm"
-#: ../src/Widgets/InfoBox.cs:215
+#: ../src/Widgets/InfoBox.cs:216
msgid "Version"
msgstr "Version"
-#: ../src/Widgets/InfoBox.cs:218
+#: ../src/Widgets/InfoBox.cs:219
msgid "Date"
msgstr "Datum"
-#: ../src/Widgets/InfoBox.cs:224
+#: ../src/Widgets/InfoBox.cs:225
msgid "Exposure"
msgstr "Belichtung"
-#: ../src/Widgets/InfoBox.cs:228
+#: ../src/Widgets/InfoBox.cs:229
msgid "Focal Length"
msgstr "Brennweite"
-#: ../src/Widgets/InfoBox.cs:234
+#: ../src/Widgets/InfoBox.cs:232
+msgid "Camera"
+msgstr "Kamera"
+
+#: ../src/Widgets/InfoBox.cs:235
msgid "File Size"
msgstr "Dateigröße"
-#: ../src/Widgets/InfoBox.cs:237
+#: ../src/Widgets/InfoBox.cs:238
msgid "Rating"
msgstr "Bewertung"
-#: ../src/Widgets/InfoBox.cs:390 ../src/Widgets/InfoBox.cs:398
-#: ../src/Widgets/InfoBox.cs:428
+#: ../src/Widgets/InfoBox.cs:391 ../src/Widgets/InfoBox.cs:399
+#: ../src/Widgets/InfoBox.cs:429
msgid "(wrong format)"
msgstr "(falsches Format)"
-#: ../src/Widgets/InfoBox.cs:418 ../src/Widgets/InfoBox.cs:441
-#: ../src/Widgets/InfoBox.cs:451 ../src/Widgets/InfoBox.cs:460
+#: ../src/Widgets/InfoBox.cs:419 ../src/Widgets/InfoBox.cs:442
+#: ../src/Widgets/InfoBox.cs:452 ../src/Widgets/InfoBox.cs:461
msgid "(Unknown)"
msgstr "(Unbekannt)"
-#: ../src/Widgets/InfoBox.cs:561
+#: ../src/Widgets/InfoBox.cs:564
#, csharp-format
msgid "(One Edit)"
msgid_plural "({0} Edits)"
msgstr[0] "(Eine Bearbeitung)"
msgstr[1] "({0} Bearbeitungen)"
-#: ../src/Widgets/InfoBox.cs:575
+#: ../src/Widgets/InfoBox.cs:578
msgid "(File read error)"
msgstr "(Fehler beim Lesen der Datei) "
-#: ../src/Widgets/InfoBox.cs:620
+#: ../src/Widgets/InfoBox.cs:623
#, csharp-format
msgid "{0} Photos"
msgstr "{0} Fotos"
#. Note for translators: {0} is a date, {1} and {2} are times.
-#: ../src/Widgets/InfoBox.cs:640
+#: ../src/Widgets/InfoBox.cs:643
#, csharp-format
msgid ""
"On {0} between \n"
@@ -3924,7 +3962,7 @@ msgstr ""
"Auf {0} zwischen \n"
"{1} und {2}"
-#: ../src/Widgets/InfoBox.cs:645
+#: ../src/Widgets/InfoBox.cs:648
#, csharp-format
msgid ""
"Between {0} \n"
@@ -3933,35 +3971,35 @@ msgstr ""
"Zwischen {0} \n"
"und {1}"
-#: ../src/Widgets/InfoBox.cs:672
+#: ../src/Widgets/InfoBox.cs:675
msgid "(At least one File not found)"
msgstr "(Mindestens eine Datei wurde nicht gefunden)"
-#: ../src/Widgets/InfoBox.cs:789
+#: ../src/Widgets/InfoBox.cs:792
msgid "Show Photo Name"
msgstr "Fotonamen anzeigen"
-#: ../src/Widgets/InfoBox.cs:798
+#: ../src/Widgets/InfoBox.cs:801
msgid "Show Date"
msgstr "Datum anzeigen"
-#: ../src/Widgets/InfoBox.cs:807
+#: ../src/Widgets/InfoBox.cs:810
msgid "Show Size"
msgstr "Größe anzeigen"
-#: ../src/Widgets/InfoBox.cs:816
+#: ../src/Widgets/InfoBox.cs:819
msgid "Show Exposure"
msgstr "Belichtung anzeigen"
-#: ../src/Widgets/InfoBox.cs:825
+#: ../src/Widgets/InfoBox.cs:828
msgid "Show Focal Length"
msgstr "Brennweite anzeigen"
-#: ../src/Widgets/InfoBox.cs:834
+#: ../src/Widgets/InfoBox.cs:837
msgid "Show Camera"
msgstr "Kamera anzeigen"
-#: ../src/Widgets/InfoBox.cs:843
+#: ../src/Widgets/InfoBox.cs:846
msgid "Show File Size"
msgstr "Dateigröße anzeigen"
@@ -3995,7 +4033,7 @@ msgstr "Keine Metadaten verfügbar"
msgid "No applications available"
msgstr "Keine Programme verfügbar"
-#: ../src/Widgets/RatingMenuItem.cs:56
+#: ../src/Widgets/RatingMenuItem.cs:57
msgid "Rating:"
msgstr "Bewertung:"
@@ -4020,6 +4058,186 @@ msgstr "Eine Diaschau aus F-Spot anzeigen"
msgid "F-Spot photos"
msgstr "F-Spot Fotos"
+#~ msgid "Preview"
+#~ msgstr "Vorschau"
+
+#~ msgid "Path"
+#~ msgstr "Pfad"
+
+#~ msgid "File"
+#~ msgstr "Datei"
+
+#~ msgid "Select Tag"
+#~ msgstr "Markierung auswählen"
+
+#~ msgid "Downloading Previews"
+#~ msgstr "Vorschaubilder werden heruntergeladen"
+
+#~ msgid "Downloading Preview of {0}"
+#~ msgstr "Vorschau von {0} wird heruntergeladen"
+
+#~ msgid "Copying file {0} of {1}"
+#~ msgstr "Kopieren der Datei {0} von {1}"
+
+#~ msgid "Error transferring file"
+#~ msgstr "Fehler bei der Dateiübertragung"
+
+#~ msgid "Download Complete"
+#~ msgstr "Herunterladen abgeschlossen"
+
+#~ msgid "Done Copying Files"
+#~ msgstr "Kopieren der Dateien abgeschlossen"
+
+#~ msgid "Transferring \"{0}\" from camera"
+#~ msgstr "Übertragung der Datei »{0}« von der Kamera"
+
+#~ msgid "Port"
+#~ msgstr "Anschluss"
+
+#~ msgid "Import error"
+#~ msgstr "Fehler beim Importieren"
+
+#~ msgid "Error importing {0}{2}{2}{1}"
+#~ msgstr "Fehler beim Importieren von {0}{2}{2}{1}"
+
+#~ msgid " "
+#~ msgstr " "
+
+#~ msgid "<b></b>"
+#~ msgstr "<b></b>"
+
+#~ msgid "Attach tag:"
+#~ msgstr "Markierung anfügen:"
+
+#~ msgid "CD"
+#~ msgstr "CD"
+
+#~ msgid "Camera Selection"
+#~ msgstr "Kameraauswahl"
+
+#~ msgid "E-_Mail:"
+#~ msgstr "E-_Mail:"
+
+#~ msgid "E_xport titles and comments"
+#~ msgstr "Titel und Kommentare e_xportieren"
+
+#~ msgid "G_allery:"
+#~ msgstr "G_alerie:"
+
+#~ msgid "Gallery"
+#~ msgstr "Galerie"
+
+#~ msgid "Pause"
+#~ msgstr "Pause"
+
+#~ msgid "Select Photos to Copy From Camera..."
+#~ msgstr "Von der Kamera zu kopierende Fotos auswählen …"
+
+#~ msgid "Select the camera from which you want to transfer files"
+#~ msgstr "Auswahl der Kamera, von der Dateien übertragen werden sollen"
+
+#~ msgid "Selected Camera: "
+#~ msgstr "Gewählte Kamera: "
+
+#~ msgid "Strip image _metadata"
+#~ msgstr "_Metadaten des Bilds entfernen"
+
+#~ msgid "_Flickr"
+#~ msgstr "_Flickr"
+
+#~ msgid "_Gallery"
+#~ msgstr "_Gallery"
+
+#~ msgid "_Open album in browser when done uploading"
+#~ msgstr "Das Album nach dem Hochladen im Browser ö_ffnen"
+
+#~ msgid "_Open destination when done exporting"
+#~ msgstr "Das Ziel nach dem Exportieren ö_ffnen"
+
+#~ msgid "_Scale photos to no larger than: "
+#~ msgstr "Fotos nicht größer _skalieren als: "
+
+#~ msgid "_Strip metadata"
+#~ msgstr "Metadaten ent_fernen"
+
+#~ msgid "_URI:"
+#~ msgstr "_Adresse:"
+
+#~ msgid "_Virtual Filesystem"
+#~ msgstr "_Virtuelles Dateisystem"
+
+#~ msgid "x"
+#~ msgstr "x"
+
+#~ msgid "Done Loading"
+#~ msgstr "Laden abgeschlossen"
+
+#~ msgid "Directory does not exist."
+#~ msgstr "Ordner ist nicht vorhanden."
+
+#~ msgid ""
+#~ "The directory you selected \"{0}\" does not exist. Please choose a "
+#~ "different directory"
+#~ msgstr ""
+#~ "Der von Ihnen gewählte Ordner »{0}« ist nicht vorhanden. Bitte wählen Sie "
+#~ "einen anderen Ordner"
+
+#~ msgid "No cameras detected."
+#~ msgstr "Keine Kameras erkannt."
+
+#~ msgid ""
+#~ "F-Spot was unable to find any cameras attached to this system. Double "
+#~ "check that the camera is connected and has power"
+#~ msgstr ""
+#~ "F-Spot konnte keine an diesem System angeschlossene Kamera finden. "
+#~ "Vergewissern Sie sich, dass die Kamera angeschlossen und eingeschaltet ist."
+
+#~ msgid "Error connecting to camera"
+#~ msgstr "Fehler beim Verbinden zur Kamera"
+
+#~ msgid "Received error \"{0}\" while connecting to camera"
+#~ msgstr ""
+#~ "Während dem Verbindungsaufbau zur Kamera wurde der Fehler »{0}« empfangen"
+
+#~ msgid "Reparented ({0})"
+#~ msgstr "Ausgangsfoto neu festgelegt ({0})"
+
+#~ msgid "Could not create a new version"
+#~ msgstr "Es konnte keine neue Version erstellt werden"
+
+#~ msgid "Received exception \"{0}\". Unable to create version \"{1}\""
+#~ msgstr ""
+#~ "Die Ausnahme »{0}« wurde empfangen. Die Version »{1}« kann nicht erstellt "
+#~ "werden."
+
+#~ msgid "Really Delete?"
+#~ msgstr "Wirklich löschen?"
+
+#~ msgid "Cancel"
+#~ msgstr "Abbrechen"
+
+#~ msgid "Could not delete a version"
+#~ msgstr "Eine Version konnte nicht gelöscht werden"
+
+#~ msgid "Received exception \"{0}\". Unable to delete version \"{1}\""
+#~ msgstr ""
+#~ "Die Ausnahme »{0}« wurde empfangen. Die Version »{1}« kann nicht gelöscht "
+#~ "werden."
+
+#~ msgid "Could not rename a version"
+#~ msgstr "Version konnte nicht umbenannt werden"
+
+#~ msgid "Received exception \"{0}\". Unable to rename version to \"{1}\""
+#~ msgstr ""
+#~ "Die Ausnahme »{0}« wurde empfangen. Der Name von Version »{1}« kann nicht "
+#~ "geändert werden."
+
+#~ msgid "Error: Error while transferring; Aborting"
+#~ msgstr "Fehler: Fehler bei der Übertragung, abgebrochen"
+
+#~ msgid "Error: File Already Exists; Aborting"
+#~ msgstr "Fehler: Datei ist bereits vorhanden, abgebrochen"
+
#~ msgid "Edit Selected Tag..."
#~ msgstr "Ausgewählte Markierung bearbeiten …"
@@ -4821,13 +5039,6 @@ msgstr "F-Spot Fotos"
#~ msgid "There was an error invoking the external handler"
#~ msgstr "Beim Aufrufen der externen Routine ist ein Fehler aufgetreten"
-#~ msgid ""
-#~ "Received error:\n"
-#~ "\"{0}\"\n"
-#~ msgstr ""
-#~ "Fehler empfangen:\n"
-#~ "»{0}«\n"
-
#~ msgid "Enter Password"
#~ msgstr "Passwort eingeben"
@@ -4953,9 +5164,6 @@ msgstr "F-Spot Fotos"
#~ msgid "Scaling picture \"{0}\""
#~ msgstr "Skalieren des Bilds »{0}«"
-#~ msgid "Transferring picture \"{0}\""
-#~ msgstr "Übertragung des Bilds »{0}«"
-
#~ msgid "Export to _Original..."
#~ msgstr "Export zu _Original …"
diff --git a/po/en_GB.po b/po/en_GB.po
index 65811b3..9efefeb 100644
--- a/po/en_GB.po
+++ b/po/en_GB.po
@@ -5,27 +5,60 @@
# Jen Ockwell <jenfraggleubuntu at gmail.com>, 2009.
# David Lodge <dave at cirt.net>, 2009.
# Philip Withnall <philip at tecnocode.co.uk>, 2009.
-#
+# Bruce Cowan <bruce at bcowan.me.uk>, 2010.
msgid ""
msgstr ""
"Project-Id-Version: f-spot\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2009-09-13 15:45+0100\n"
-"PO-Revision-Date: 2009-03-22 17:36+0000\n"
-"Last-Translator: Philip Withnall <philip at tecnocode.co.uk>\n"
+"POT-Creation-Date: 2010-06-10 19:31+0100\n"
+"PO-Revision-Date: 2010-06-10 19:47+0100\n"
+"Last-Translator: Bruce Cowan <bruce at bcowan.me.uk>\n"
"Language-Team: British English <en at li.org>\n"
+"Language: en_GB\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
+"X-Generator: Virtaal 0.5.2\n"
+
+#: ../data/desktop-files/f-spot.desktop.in.in.h:1
+#: ../data/desktop-files/f-spot-import.desktop.in.in.h:1
+#: ../data/desktop-files/f-spot-view.desktop.in.in.h:1
+#: ../src/ui/main_window.ui.h:11
+msgid "F-Spot"
+msgstr "F-Spot"
+
+#: ../data/desktop-files/f-spot.desktop.in.in.h:2
+#: ../data/desktop-files/f-spot-import.desktop.in.in.h:2
+msgid "F-Spot Photo Manager"
+msgstr "F-Spot Photo Manager"
+
+#: ../data/desktop-files/f-spot.desktop.in.in.h:3
+msgid "Organize, enjoy, and share your photos"
+msgstr "Organise, enjoy, and share your photos"
+
+#: ../data/desktop-files/f-spot.desktop.in.in.h:4
+#: ../data/desktop-files/f-spot-import.desktop.in.in.h:4
+msgid "Photo Manager"
+msgstr "Photo Manager"
+
+#: ../data/desktop-files/f-spot-import.desktop.in.in.h:3
+msgid "Import into F-Spot"
+msgstr "Import into F-Spot"
+
+#: ../data/desktop-files/f-spot-view.desktop.in.in.h:2
+msgid "F-Spot Photo Viewer"
+msgstr "F-Spot Photo Viewer"
+
+#: ../data/desktop-files/f-spot-view.desktop.in.in.h:3
+msgid "Photo Viewer"
+msgstr "Photo Viewer"
#: ../extensions/Exporters/CDExport/CDExport.addin.xml.h:1
msgid "_CD..."
msgstr "_CD…"
#: ../extensions/Exporters/CDExport/CDExport.cs:162
-#: ../extensions/Exporters/FolderExport/FolderExport.cs:392
-#: ../src/CameraFileSelectionDialog.cs:199
msgid "Transferring Pictures"
msgstr "Transferring Pictures"
@@ -36,37 +69,34 @@ msgstr "Transferring picture \"{0}\" to CD"
#. Note for translators: This indicates the current photo is photo {0} of {1} out of photos
#: ../extensions/Exporters/CDExport/CDExport.cs:220
-#: ../extensions/Exporters/FlickrExport/FlickrExport.cs:349
-#: ../extensions/Exporters/FolderExport/FolderExport.cs:245
+#: ../extensions/Exporters/FlickrExport/FlickrExport.cs:350
+#: ../extensions/Exporters/FolderExport/FolderExport.cs:220
#: ../extensions/Exporters/GalleryExport/GalleryExport.cs:781
-#: ../src/MainWindow.cs:638 ../src/UI.Dialog/AdjustTimeDialog.cs:129
-#: ../src/UI.Dialog/ProgressDialog.cs:92
+#: ../src/MainWindow.cs:653 ../src/UI.Dialog/AdjustTimeDialog.cs:130
+#: ../src/UI.Dialog/ProgressDialog.cs:90
#, csharp-format
msgid "{0} of {1}"
msgstr "{0} of {1}"
#: ../extensions/Exporters/CDExport/CDExport.cs:233
-#: ../extensions/Exporters/FacebookExport/FacebookExport.cs:379
-#: ../extensions/Exporters/FlickrExport/FlickrExport.cs:379
-#: ../extensions/Exporters/FolderExport/FolderExport.cs:285
+#: ../extensions/Exporters/FacebookExport/FacebookExport.cs:377
+#: ../extensions/Exporters/FlickrExport/FlickrExport.cs:380
#: ../extensions/Exporters/GalleryExport/GalleryExport.cs:806
-#: ../extensions/Exporters/PicasaWebExport/PicasaWebExport.cs:704
+#: ../extensions/Exporters/PicasaWebExport/PicasaWebExport.cs:705
#: ../extensions/Exporters/SmugMugExport/SmugMugExport.cs:607
msgid "Done Sending Photos"
msgstr "Done Sending Photos"
#: ../extensions/Exporters/CDExport/CDExport.cs:235
-#: ../extensions/Exporters/FolderExport/FolderExport.cs:287
msgid "Transfer Complete"
msgstr "Transfer Complete"
#: ../extensions/Exporters/CDExport/CDExport.cs:242
-#: ../extensions/Exporters/FolderExport/FolderExport.cs:292
msgid "Error While Transferring"
msgstr "Error While Transferring"
#: ../extensions/Exporters/CDExport/CDExport.cs:250
-#: ../extensions/Exporters/FolderExport/FolderExport.cs:311
+#: ../extensions/Exporters/FolderExport/FolderExport.cs:278
msgid "Error Transferring"
msgstr "Error Transferring"
@@ -86,7 +116,7 @@ msgstr "<b>Photos to Burn</b>"
#: ../extensions/Exporters/FolderExport/FolderExport.glade.h:7
#: ../extensions/Exporters/GalleryExport/GalleryExport.glade.h:7
#: ../extensions/Exporters/SmugMugExport/SmugMugExport.glade.h:5
-#: ../src/f-spot.glade.h:28
+#: ../src/f-spot.glade.h:20
msgid "Autorotate"
msgstr "Autorotate"
@@ -95,7 +125,7 @@ msgid "Create CD"
msgstr "Create CD"
#: ../extensions/Exporters/CDExport/CDExport.ui.h:5
-#: ../src/Widgets/InfoBox.cs:220
+#: ../src/Widgets/InfoBox.cs:222
msgid "Size"
msgstr "Size"
@@ -113,7 +143,8 @@ msgstr "_Browse Previously Scheduled Files"
#: ../extensions/Exporters/GalleryExport/GalleryExport.glade.h:15
#: ../extensions/Exporters/PicasaWebExport/PicasaWebExport.glade.h:20
#: ../extensions/Exporters/SmugMugExport/SmugMugExport.glade.h:12
-#: ../src/f-spot.glade.h:95
+#: ../extensions/Exporters/TabbloExport/ui/TabbloExport.ui.h:9
+#: ../src/f-spot.glade.h:66
msgid "_Export"
msgstr "_Export"
@@ -143,39 +174,32 @@ msgstr ""
"Once you are directed by Facebook to return to this application, click \"OK"
"\" below."
-#: ../extensions/Exporters/FacebookExport/FacebookExport.cs:279
+#: ../extensions/Exporters/FacebookExport/FacebookExport.cs:281
msgid "Too many images to export"
msgstr "Too many images to export"
-#: ../extensions/Exporters/FacebookExport/FacebookExport.cs:280
+#: ../extensions/Exporters/FacebookExport/FacebookExport.cs:282
+#, csharp-format
msgid ""
-"Facebook only permits 60 photographs per album. Please refine your "
+"Facebook only permits {0} photographs per album. Please refine your "
"selection and try again."
msgstr ""
-"Facebook only permits 60 photographs per album. Please refine your "
+"Facebook only permits {0} photographs per album. Please refine your "
"selection and try again."
#: ../extensions/Exporters/FacebookExport/FacebookExport.cs:297
-#: ../extensions/Exporters/FlickrExport/FlickrExport.cs:475
-#: ../extensions/Exporters/GalleryExport/GalleryExport.cs:730
-#: ../extensions/Exporters/PicasaWebExport/PicasaWebExport.cs:597
-#: ../extensions/Exporters/SmugMugExport/SmugMugExport.cs:522
-msgid "Uploading Pictures"
-msgstr "Uploading Pictures"
-
-#: ../extensions/Exporters/FacebookExport/FacebookExport.cs:318
msgid "Album must have a name"
msgstr "Album must have a name"
-#: ../extensions/Exporters/FacebookExport/FacebookExport.cs:319
+#: ../extensions/Exporters/FacebookExport/FacebookExport.cs:298
msgid "Please name your album or choose an existing album."
msgstr "Please name your album or choose an existing album."
-#: ../extensions/Exporters/FacebookExport/FacebookExport.cs:333
+#: ../extensions/Exporters/FacebookExport/FacebookExport.cs:312
msgid "Creating a new album failed"
msgstr "Creating a new album failed"
-#: ../extensions/Exporters/FacebookExport/FacebookExport.cs:334
+#: ../extensions/Exporters/FacebookExport/FacebookExport.cs:313
#, csharp-format
msgid ""
"An error occurred creating a new album.\n"
@@ -186,42 +210,53 @@ msgstr ""
"\n"
"{0}"
-#: ../extensions/Exporters/FacebookExport/FacebookExport.cs:356
-#: ../extensions/Exporters/PicasaWebExport/PicasaWebExport.cs:660
+#: ../extensions/Exporters/FacebookExport/FacebookExport.cs:326
+#: ../extensions/Exporters/FlickrExport/FlickrExport.cs:476
+#: ../extensions/Exporters/GalleryExport/GalleryExport.cs:730
+#: ../extensions/Exporters/PicasaWebExport/PicasaWebExport.cs:598
+#: ../extensions/Exporters/SmugMugExport/SmugMugExport.cs:522
+msgid "Uploading Pictures"
+msgstr "Uploading Pictures"
+
+#: ../extensions/Exporters/FacebookExport/FacebookExport.cs:354
+#: ../extensions/Exporters/PicasaWebExport/PicasaWebExport.cs:661
#: ../extensions/Exporters/SmugMugExport/SmugMugExport.cs:565
#, csharp-format
msgid "Uploading picture \"{0}\" ({1} of {2})"
msgstr "Uploading picture \"{0}\" ({1} of {2})"
-#: ../extensions/Exporters/FacebookExport/FacebookExport.cs:370
+#: ../extensions/Exporters/FacebookExport/FacebookExport.cs:368
#, csharp-format
msgid "Error Uploading To Facebook: {0}"
msgstr "Error Uploading to Facebook: {0}"
-#: ../extensions/Exporters/FacebookExport/FacebookExport.cs:371
-#: ../extensions/Exporters/FlickrExport/FlickrExport.cs:370
-#: ../extensions/Exporters/FolderExport/FolderExport.cs:250
+#: ../extensions/Exporters/FacebookExport/FacebookExport.cs:369
+#: ../extensions/Exporters/FlickrExport/FlickrExport.cs:371
+#: ../extensions/Exporters/FolderExport/FolderExport.cs:226
#: ../extensions/Exporters/GalleryExport/GalleryExport.cs:797
-#: ../extensions/Exporters/PicasaWebExport/PicasaWebExport.cs:693
+#: ../extensions/Exporters/PicasaWebExport/PicasaWebExport.cs:694
#: ../extensions/Exporters/SmugMugExport/SmugMugExport.cs:596
#: ../extensions/Exporters/TabbloExport/TabbloExport.cs:319
-#: ../lib/mono-addins/Mono.Addins.Gui/gtk-gui/Mono.Addins.Gui.ErrorDialog.cs:40
msgid "Error"
msgstr "Error"
-#: ../extensions/Exporters/FacebookExport/FacebookExport.cs:381
-#: ../extensions/Exporters/FlickrExport/FlickrExport.cs:381
+#: ../extensions/Exporters/FacebookExport/FacebookExport.cs:379
+#: ../extensions/Exporters/FlickrExport/FlickrExport.cs:382
#: ../extensions/Exporters/GalleryExport/GalleryExport.cs:808
-#: ../extensions/Exporters/PicasaWebExport/PicasaWebExport.cs:706
+#: ../extensions/Exporters/PicasaWebExport/PicasaWebExport.cs:707
#: ../extensions/Exporters/SmugMugExport/SmugMugExport.cs:609
msgid "Upload Complete"
msgstr "Upload Complete"
-#: ../extensions/Exporters/FacebookExport/FacebookExportDialog.cs:211
+#: ../extensions/Exporters/FacebookExport/FacebookExport.cs:382
+msgid "Visit F-Spot group on Facebook"
+msgstr "Visit F-Spot group on Facebook"
+
+#: ../extensions/Exporters/FacebookExport/FacebookExportDialog.cs:212
msgid "Waiting for authentication"
msgstr "Waiting for authentication"
-#: ../extensions/Exporters/FacebookExport/FacebookExportDialog.cs:212
+#: ../extensions/Exporters/FacebookExport/FacebookExportDialog.cs:213
msgid ""
"F-Spot will now launch your browser so that you can log into Facebook.\n"
"\n"
@@ -235,15 +270,15 @@ msgstr ""
"\" below. F-Spot will cache your session in gnome-keyring, if possible, and "
"re-use it for future Facebook exports."
-#: ../extensions/Exporters/FacebookExport/FacebookExportDialog.cs:217
+#: ../extensions/Exporters/FacebookExport/FacebookExportDialog.cs:218
msgid "Authenticating..."
msgstr "Authenticating…"
-#: ../extensions/Exporters/FacebookExport/FacebookExportDialog.cs:227
+#: ../extensions/Exporters/FacebookExport/FacebookExportDialog.cs:228
msgid "Error logging into Facebook"
msgstr "Error logging into Facebook"
-#: ../extensions/Exporters/FacebookExport/FacebookExportDialog.cs:228
+#: ../extensions/Exporters/FacebookExport/FacebookExportDialog.cs:229
msgid ""
"There was a problem logging into Facebook. Check your credentials and try "
"again."
@@ -251,23 +286,23 @@ msgstr ""
"There was a problem logging into Facebook. Check your credentials and try "
"again."
-#: ../extensions/Exporters/FacebookExport/FacebookExportDialog.cs:237
+#: ../extensions/Exporters/FacebookExport/FacebookExportDialog.cs:238
msgid "Authorizing Session"
msgstr "Authorising Session"
-#: ../extensions/Exporters/FacebookExport/FacebookExportDialog.cs:246
+#: ../extensions/Exporters/FacebookExport/FacebookExportDialog.cs:247
msgid "Session established, fetching user info..."
msgstr "Session established, fetching user info…"
-#: ../extensions/Exporters/FacebookExport/FacebookExportDialog.cs:252
+#: ../extensions/Exporters/FacebookExport/FacebookExportDialog.cs:253
msgid "Session established, fetching friend list..."
msgstr "Session established, fetching friend list…"
-#: ../extensions/Exporters/FacebookExport/FacebookExportDialog.cs:262
+#: ../extensions/Exporters/FacebookExport/FacebookExportDialog.cs:263
msgid "Session established, fetching friend details..."
msgstr "Session established, fetching friend details…"
-#: ../extensions/Exporters/FacebookExport/FacebookExportDialog.cs:272
+#: ../extensions/Exporters/FacebookExport/FacebookExportDialog.cs:275
msgid "Session established, fetching photo albums..."
msgstr "Session established, fetching photo albums…"
@@ -277,11 +312,11 @@ msgstr "Session established, fetching photo albums…"
msgid "{0} {1} is logged into Facebook"
msgstr "{0} {1} is logged into Facebook"
-#: ../extensions/Exporters/FacebookExport/FacebookExportDialog.cs:291
+#: ../extensions/Exporters/FacebookExport/FacebookExportDialog.cs:294
msgid "Facebook Connection Error"
msgstr "Facebook Connection Error"
-#: ../extensions/Exporters/FacebookExport/FacebookExportDialog.cs:292
+#: ../extensions/Exporters/FacebookExport/FacebookExportDialog.cs:295
#, csharp-format
msgid ""
"There was an error when downloading your information from Facebook.\n"
@@ -292,7 +327,7 @@ msgstr ""
"\n"
"Facebook said: {0}"
-#: ../extensions/Exporters/FacebookExport/FacebookExportDialog.cs:321
+#: ../extensions/Exporters/FacebookExport/FacebookExportDialog.cs:324
msgid "You are not logged in."
msgstr "You are not logged in."
@@ -334,8 +369,7 @@ msgid "Logout"
msgstr "Logout"
#: ../extensions/Exporters/FacebookExport/FacebookExport.ui.h:10
-#: ../lib/mono-addins/Mono.Addins.Gui/Mono.Addins.Gui/ManageSitesDialog.cs:51
-#: ../src/Widgets/InfoBox.cs:211
+#: ../src/Widgets/InfoBox.cs:213
msgid "Name"
msgstr "Name"
@@ -371,12 +405,12 @@ msgstr "_Flickr…"
msgid "_Zooomr..."
msgstr "_Zooomr…"
-#: ../extensions/Exporters/FlickrExport/FlickrExport.cs:105
+#: ../extensions/Exporters/FlickrExport/FlickrExport.cs:106
#: ../extensions/Exporters/FlickrExport/FlickrExport.glade.h:5
msgid "Authorize"
msgstr "Authorise"
-#: ../extensions/Exporters/FlickrExport/FlickrExport.cs:111
+#: ../extensions/Exporters/FlickrExport/FlickrExport.cs:112
#, csharp-format
msgid ""
"Return to this window after you have finished the authorization process on "
@@ -385,60 +419,59 @@ msgstr ""
"Return to this window after you have finished the authorisation process on "
"{0} and click the \"Complete Authorisation\" button below"
-#: ../extensions/Exporters/FlickrExport/FlickrExport.cs:112
+#: ../extensions/Exporters/FlickrExport/FlickrExport.cs:113
msgid "Complete Authorization"
msgstr "Complete Authorisation"
-#: ../extensions/Exporters/FlickrExport/FlickrExport.cs:117
+#: ../extensions/Exporters/FlickrExport/FlickrExport.cs:118
#, csharp-format
msgid "Logging into {0}"
msgstr "Logging into {0}"
-#: ../extensions/Exporters/FlickrExport/FlickrExport.cs:118
+#: ../extensions/Exporters/FlickrExport/FlickrExport.cs:119
msgid "Checking credentials..."
msgstr "Checking credentials…"
-#: ../extensions/Exporters/FlickrExport/FlickrExport.cs:125
+#: ../extensions/Exporters/FlickrExport/FlickrExport.cs:126
#, csharp-format
msgid "Welcome {0} you are connected to {1}"
msgstr "Welcome {0} you are connected to {1}"
-#: ../extensions/Exporters/FlickrExport/FlickrExport.cs:128
+#: ../extensions/Exporters/FlickrExport/FlickrExport.cs:129
#, csharp-format
msgid "Sign in as a different user"
msgstr "Sign in as a different user"
-#: ../extensions/Exporters/FlickrExport/FlickrExport.cs:133
+#: ../extensions/Exporters/FlickrExport/FlickrExport.cs:134
#, csharp-format
msgid "Used {0} of your allowed {1} monthly quota"
msgstr "Used {0} of your allowed {1} monthly quota"
-#: ../extensions/Exporters/FlickrExport/FlickrExport.cs:297
+#: ../extensions/Exporters/FlickrExport/FlickrExport.cs:298
msgid "Unable to log on"
msgstr "Unable to log on"
-#: ../extensions/Exporters/FlickrExport/FlickrExport.cs:317
+#: ../extensions/Exporters/FlickrExport/FlickrExport.cs:318
#, csharp-format
msgid "Waiting for response {0} of {1}"
msgstr "Waiting for response {0} of {1}"
-#: ../extensions/Exporters/FlickrExport/FlickrExport.cs:344
-#: ../extensions/Exporters/FolderExport/FolderExport.cs:242
+#: ../extensions/Exporters/FlickrExport/FlickrExport.cs:345
#: ../extensions/Exporters/GalleryExport/GalleryExport.cs:777
#, csharp-format
msgid "Uploading picture \"{0}\""
msgstr "Uploading picture \"{0}\""
-#: ../extensions/Exporters/FlickrExport/FlickrExport.cs:367
+#: ../extensions/Exporters/FlickrExport/FlickrExport.cs:368
#, csharp-format
msgid "Error Uploading To {0}: {1}"
msgstr "Error Uploading to {0}: {1}"
-#: ../extensions/Exporters/FlickrExport/FlickrExport.cs:454
+#: ../extensions/Exporters/FlickrExport/FlickrExport.cs:455
msgid "Unable to log on."
msgstr "Unable to log on."
-#: ../extensions/Exporters/FlickrExport/FlickrExport.cs:455
+#: ../extensions/Exporters/FlickrExport/FlickrExport.cs:456
#, csharp-format
msgid ""
"F-Spot was unable to log on to {0}. Make sure you have given the "
@@ -448,7 +481,6 @@ msgstr ""
"authentication using {0} web browser interface."
#: ../extensions/Exporters/FlickrExport/FlickrExport.glade.h:1
-#: ../src/f-spot.glade.h:8
msgid "<b>Account</b>"
msgstr "<b>Account</b>"
@@ -457,7 +489,8 @@ msgstr "<b>Account</b>"
#: ../extensions/Exporters/GalleryExport/GalleryExport.glade.h:3
#: ../extensions/Exporters/PicasaWebExport/PicasaWebExport.glade.h:2
#: ../extensions/Exporters/SmugMugExport/SmugMugExport.glade.h:2
-#: ../src/f-spot.glade.h:14 ../src/UI.Dialog/ui/AdjustTimeDialog.ui.h:5
+#: ../extensions/Exporters/TabbloExport/ui/TabbloExport.ui.h:2
+#: ../src/f-spot.glade.h:8 ../src/UI.Dialog/ui/AdjustTimeDialog.ui.h:5
msgid "<b>Photos</b>"
msgstr "<b>Photos</b>"
@@ -466,7 +499,7 @@ msgstr "<b>Photos</b>"
#: ../extensions/Exporters/GalleryExport/GalleryExport.glade.h:4
#: ../extensions/Exporters/PicasaWebExport/PicasaWebExport.glade.h:4
#: ../extensions/Exporters/SmugMugExport/SmugMugExport.glade.h:4
-#: ../src/f-spot.glade.h:16
+#: ../src/f-spot.glade.h:10
msgid "<b>Style</b>"
msgstr "<b>Style</b>"
@@ -478,7 +511,7 @@ msgstr "<b>Viewing permissions</b>"
#: ../extensions/Exporters/GalleryExport/GalleryExport.glade.h:8
#: ../extensions/Exporters/PicasaWebExport/PicasaWebExport.glade.h:9
#: ../extensions/Exporters/SmugMugExport/SmugMugExport.glade.h:6
-#: ../src/f-spot.glade.h:43
+#: ../extensions/Exporters/TabbloExport/ui/TabbloExport.ui.h:5
msgid "Export"
msgstr "Export"
@@ -522,7 +555,6 @@ msgstr "Visible to Friends"
#: ../extensions/Exporters/FlickrExport/FlickrExport.glade.h:16
#: ../extensions/Exporters/PicasaWebExport/PicasaWebExport.glade.h:21
-#: ../src/f-spot.glade.h:96
msgid "_Export tags"
msgstr "_Export tags"
@@ -531,7 +563,6 @@ msgstr "_Export tags"
#: ../extensions/Exporters/GalleryExport/GalleryExport.glade.h:21
#: ../extensions/Exporters/PicasaWebExport/PicasaWebExport.glade.h:25
#: ../extensions/Exporters/SmugMugExport/SmugMugExport.glade.h:15
-#: ../src/f-spot.glade.h:109
msgid "_Resize to: "
msgstr "_Resize to: "
@@ -544,7 +575,6 @@ msgstr "_View photos in browser when done uploading"
#: ../extensions/Exporters/GalleryExport/GalleryExport.glade.h:24
#: ../extensions/Exporters/PicasaWebExport/PicasaWebExport.glade.h:27
#: ../extensions/Exporters/SmugMugExport/SmugMugExport.glade.h:17
-#: ../src/f-spot.glade.h:125
msgid "pixels"
msgstr "pixels"
@@ -552,80 +582,98 @@ msgstr "pixels"
msgid "F_older..."
msgstr "F_older…"
-#: ../extensions/Exporters/FolderExport/FolderExport.cs:140
+#: ../extensions/Exporters/FolderExport/FolderExport.cs:120
msgid "Select Export Folder"
msgstr "Select Export Folder"
-#: ../extensions/Exporters/FolderExport/FolderExport.cs:198
+#: ../extensions/Exporters/FolderExport/FolderExport.cs:173
msgid "Building Gallery"
msgstr "Building Gallery"
-#: ../extensions/Exporters/FolderExport/FolderExport.cs:248
+#: ../extensions/Exporters/FolderExport/FolderExport.cs:217
#, csharp-format
-msgid "Error uploading picture \"{0}\" to Gallery:{2}{1}"
-msgstr "Error uploading picture \"{0}\" to Gallery:{2}{1}"
+msgid "Exporting \"{0}\"..."
+msgstr "Exporting \"{0}\"…"
+
+#: ../extensions/Exporters/FolderExport/FolderExport.cs:224
+#, csharp-format
+msgid "Error Copying \"{0}\" to Gallery:{2}{1}"
+msgstr "Error Copying \"{0}\" to Gallery:{2}{1}"
+
+#: ../extensions/Exporters/FolderExport/FolderExport.cs:250
+#, csharp-format
+msgid "Transferring to \"{0}\""
+msgstr "Transferring to \"{0}\""
+
+#: ../extensions/Exporters/FolderExport/FolderExport.cs:251
+msgid "Transferring..."
+msgstr "Transferring…"
-#: ../extensions/Exporters/FolderExport/FolderExport.cs:333
-msgid "Error: Error while transferring; Aborting"
-msgstr "Error: Error while transferring; Aborting"
+#. No need to check result here as if result is not true, an Exception will be thrown before
+#: ../extensions/Exporters/FolderExport/FolderExport.cs:256
+msgid "Export Complete."
+msgstr "Export Complete."
-#: ../extensions/Exporters/FolderExport/FolderExport.cs:336
-msgid "Error: File Already Exists; Aborting"
-msgstr "Error: File Already Exists; Aborting"
+#: ../extensions/Exporters/FolderExport/FolderExport.cs:258
+msgid "Exporting Photos Completed."
+msgstr "Exporting Photos Completed."
+
+#: ../extensions/Exporters/FolderExport/FolderExport.cs:325
+msgid "Exporting Photos"
+msgstr "Exporting Photos"
#. Note for translators: light as clear, opposite as dark
-#: ../extensions/Exporters/FolderExport/FolderExport.cs:803
+#: ../extensions/Exporters/FolderExport/FolderExport.cs:743
msgid "Light"
msgstr "Light"
-#: ../extensions/Exporters/FolderExport/FolderExport.cs:804
+#: ../extensions/Exporters/FolderExport/FolderExport.cs:744
msgid "Dark"
msgstr "Dark"
#. Abbreviation of previous
-#: ../extensions/Exporters/FolderExport/FolderExport.cs:984
+#: ../extensions/Exporters/FolderExport/FolderExport.cs:924
msgid "Prev"
msgstr "Prev"
-#: ../extensions/Exporters/FolderExport/FolderExport.cs:986
-#: ../extensions/Exporters/FolderExport/FolderExport.cs:1227
-#: ../src/CameraFileSelectionDialog.cs:82
+#: ../extensions/Exporters/FolderExport/FolderExport.cs:926
+#: ../extensions/Exporters/FolderExport/FolderExport.cs:1167
msgid "Index"
msgstr "Index"
#. Don't care otherwise, Tags sounds reasonable
-#: ../extensions/Exporters/FolderExport/FolderExport.cs:989
-#: ../extensions/Exporters/FolderExport/FolderExport.cs:1161
-#: ../extensions/Exporters/FolderExport/FolderExport.cs:1201
-#: ../src/MainWindow.cs:342 ../src/Widgets/Sidebar.cs:64
+#: ../extensions/Exporters/FolderExport/FolderExport.cs:929
+#: ../extensions/Exporters/FolderExport/FolderExport.cs:1101
+#: ../extensions/Exporters/FolderExport/FolderExport.cs:1141
+#: ../src/MainWindow.cs:357 ../src/Widgets/Sidebar.cs:56
msgid "Tags"
msgstr "Tags"
-#: ../extensions/Exporters/FolderExport/FolderExport.cs:992
-#: ../src/f-spot.glade.h:57 ../src/ItemAction.cs:102
+#: ../extensions/Exporters/FolderExport/FolderExport.cs:932
+#: ../src/ItemAction.cs:102
msgid "Next"
msgstr "Next"
-#: ../extensions/Exporters/FolderExport/FolderExport.cs:1096
+#: ../extensions/Exporters/FolderExport/FolderExport.cs:1036
msgid "Gallery generated by"
msgstr "Gallery generated by"
-#: ../extensions/Exporters/FolderExport/FolderExport.cs:1136
+#: ../extensions/Exporters/FolderExport/FolderExport.cs:1076
msgid "Show Styles"
msgstr "Show Styles"
-#: ../extensions/Exporters/FolderExport/FolderExport.cs:1137
+#: ../extensions/Exporters/FolderExport/FolderExport.cs:1077
msgid "Hide Styles"
msgstr "Hide Styles"
-#: ../extensions/Exporters/FolderExport/FolderExport.cs:1172
-#: ../extensions/Exporters/FolderExport/FolderExport.cs:1173
-#: ../src/ui/main_window.ui.h:24
+#: ../extensions/Exporters/FolderExport/FolderExport.cs:1112
+#: ../extensions/Exporters/FolderExport/FolderExport.cs:1113
+#: ../src/ui/main_window.ui.h:25
msgid "Tags: "
msgstr "Tags: "
-#: ../extensions/Exporters/FolderExport/FolderExport.cs:1304
-#: ../extensions/Exporters/FolderExport/FolderExport.cs:1437
+#: ../extensions/Exporters/FolderExport/FolderExport.cs:1244
+#: ../extensions/Exporters/FolderExport/FolderExport.cs:1377
msgid "Page:"
msgstr "Page:"
@@ -634,7 +682,6 @@ msgid "\n"
msgstr "\n"
#: ../extensions/Exporters/FolderExport/FolderExport.glade.h:3
-#: ../src/f-spot.glade.h:11
msgid "<b>Destination</b>"
msgstr "<b>Destination</b>"
@@ -682,11 +729,15 @@ msgstr "_Folder:"
msgid "_Save the files only"
msgstr "_Save the files only"
+#: ../extensions/Exporters/GalleryExport/FormClient.cs:294
+msgid "Unhandled exception"
+msgstr "Unhandled exception"
+
#: ../extensions/Exporters/GalleryExport/GalleryExport.addin.xml.h:1
msgid "Web _Gallery..."
msgstr "Web _Gallery…"
-#: ../extensions/Exporters/GalleryExport/GalleryExport.cs:52
+#: ../extensions/Exporters/GalleryExport/GalleryExport.cs:53
msgid ""
"Cannot connect to a Gallery for which the version is unknown.\n"
"Please check that you have Remote plugin 1.0.8 or later"
@@ -750,25 +801,25 @@ msgid "Error uploading picture \"{0}\" to Gallery: {1}"
msgstr "Error uploading picture \"{0}\" to Gallery: {1}"
#: ../extensions/Exporters/GalleryExport/GalleryExport.cs:824
-#: ../extensions/Exporters/PicasaWebExport/PicasaWebExport.cs:727
+#: ../extensions/Exporters/PicasaWebExport/PicasaWebExport.cs:728
#: ../extensions/Exporters/SmugMugExport/SmugMugExport.cs:630
msgid "(No Gallery)"
msgstr "(No Gallery)"
#: ../extensions/Exporters/GalleryExport/GalleryExport.cs:916
-#: ../extensions/Exporters/PicasaWebExport/PicasaWebExport.cs:849
+#: ../extensions/Exporters/PicasaWebExport/PicasaWebExport.cs:850
#: ../extensions/Exporters/SmugMugExport/SmugMugExport.cs:726
msgid "(Not Connected)"
msgstr "(Not Connected)"
#: ../extensions/Exporters/GalleryExport/GalleryExport.cs:917
-#: ../extensions/Exporters/PicasaWebExport/PicasaWebExport.cs:850
+#: ../extensions/Exporters/PicasaWebExport/PicasaWebExport.cs:851
#: ../extensions/Exporters/SmugMugExport/SmugMugExport.cs:727
msgid "(No Albums)"
msgstr "(No Albums)"
#: ../extensions/Exporters/GalleryExport/GalleryExport.cs:969
-#: ../extensions/Exporters/PicasaWebExport/PicasaWebExport.cs:915
+#: ../extensions/Exporters/PicasaWebExport/PicasaWebExport.cs:916
#: ../extensions/Exporters/SmugMugExport/SmugMugExport.cs:768
msgid "No account selected"
msgstr "No account selected"
@@ -776,12 +827,10 @@ msgstr "No account selected"
#: ../extensions/Exporters/GalleryExport/GalleryExport.glade.h:1
#: ../extensions/Exporters/PicasaWebExport/PicasaWebExport.glade.h:1
#: ../extensions/Exporters/SmugMugExport/SmugMugExport.glade.h:1
-#: ../src/f-spot.glade.h:9
msgid "<b>Album</b>"
msgstr "<b>Album</b>"
#: ../extensions/Exporters/GalleryExport/GalleryExport.glade.h:2
-#: ../src/f-spot.glade.h:12
msgid "<b>Gallery</b>"
msgstr "<b>Gallery</b>"
@@ -822,7 +871,6 @@ msgstr "_Description:"
#: ../extensions/Exporters/GalleryExport/GalleryExport.glade.h:16
#: ../extensions/Exporters/PicasaWebExport/PicasaWebExport.glade.h:22
#: ../extensions/Exporters/SmugMugExport/SmugMugExport.glade.h:13
-#: ../src/f-spot.glade.h:97
msgid "_Export to Album:"
msgstr "_Export to Album:"
@@ -842,6 +890,7 @@ msgstr "_Parent Album:"
#: ../extensions/Exporters/GalleryExport/GalleryExport.glade.h:20
#: ../extensions/Exporters/PicasaWebExport/PicasaWebExport.glade.h:24
#: ../extensions/Exporters/SmugMugExport/SmugMugExport.glade.h:14
+#: ../extensions/Exporters/TabbloExport/ui/TabbloExport.ui.h:10
msgid "_Password:"
msgstr "_Password:"
@@ -852,23 +901,24 @@ msgstr "_Title:"
#: ../extensions/Exporters/GalleryExport/GalleryExport.glade.h:23
#: ../extensions/Exporters/PicasaWebExport/PicasaWebExport.glade.h:26
#: ../extensions/Exporters/SmugMugExport/SmugMugExport.glade.h:16
+#: ../extensions/Exporters/TabbloExport/ui/TabbloExport.ui.h:11
msgid "_Username:"
msgstr "_Username:"
-#: ../extensions/Exporters/GalleryExport/GalleryRemote.cs:361
+#: ../extensions/Exporters/GalleryExport/GalleryRemote.cs:362
msgid "Error reading server response"
msgstr "Error reading server response"
#. failed to find the response
-#: ../extensions/Exporters/GalleryExport/GalleryRemote.cs:373
+#: ../extensions/Exporters/GalleryExport/GalleryRemote.cs:374
msgid "Server returned response without Gallery content"
msgstr "Server returned response without Gallery content"
-#: ../extensions/Exporters/GalleryExport/GalleryRemote.cs:710
+#: ../extensions/Exporters/GalleryExport/GalleryRemote.cs:711
msgid "Error while creating new album"
msgstr "Error while creating new album"
-#: ../extensions/Exporters/GalleryExport/GalleryRemote.cs:711
+#: ../extensions/Exporters/GalleryExport/GalleryRemote.cs:712
#, csharp-format
msgid ""
"The following error was encountered while attempting to perform the "
@@ -883,39 +933,39 @@ msgstr ""
msgid "_PicasaWeb..."
msgstr "_PicasaWeb…"
-#: ../extensions/Exporters/PicasaWebExport/PicasaWebExport.cs:441
+#: ../extensions/Exporters/PicasaWebExport/PicasaWebExport.cs:442
msgid "Error while creating Album"
msgstr "Error while creating Album"
-#: ../extensions/Exporters/PicasaWebExport/PicasaWebExport.cs:442
+#: ../extensions/Exporters/PicasaWebExport/PicasaWebExport.cs:443
#, csharp-format
msgid ""
"The following error was encountered while attempting to create an album: {0}"
msgstr ""
"The following error was encountered while attempting to create an album: {0}"
-#: ../extensions/Exporters/PicasaWebExport/PicasaWebExport.cs:620
+#: ../extensions/Exporters/PicasaWebExport/PicasaWebExport.cs:621
#, csharp-format
msgid "{0} Sent"
msgstr "{0} Sent"
-#: ../extensions/Exporters/PicasaWebExport/PicasaWebExport.cs:622
+#: ../extensions/Exporters/PicasaWebExport/PicasaWebExport.cs:623
#, csharp-format
msgid "{0} of approx. {1}"
msgstr "{0} of approximately {1}"
-#: ../extensions/Exporters/PicasaWebExport/PicasaWebExport.cs:691
+#: ../extensions/Exporters/PicasaWebExport/PicasaWebExport.cs:692
#: ../extensions/Exporters/SmugMugExport/SmugMugExport.cs:594
#, csharp-format
msgid "Error Uploading To Gallery: {0}"
msgstr "Error Uploading to Gallery: {0}"
-#: ../extensions/Exporters/PicasaWebExport/PicasaWebExport.cs:778
+#: ../extensions/Exporters/PicasaWebExport/PicasaWebExport.cs:779
#, csharp-format
msgid "Available space: {0}, {1}% used out of {2}"
msgstr "Available space: {0}, {1}% used out of {2}"
-#: ../extensions/Exporters/PicasaWebExport/PicasaWebExport.cs:891
+#: ../extensions/Exporters/PicasaWebExport/PicasaWebExport.cs:892
#, csharp-format
msgid ""
"The selected album has a limit of {0} pictures,\n"
@@ -1003,12 +1053,72 @@ msgstr "Upload complete"
msgid "Error uploading to Tabblo: "
msgstr "Error uploading to Tabblo: "
+#: ../extensions/Exporters/TabbloExport/ui/TabbloExport.ui.h:1
+msgid "<b>F-Spot tags</b>"
+msgstr "<b>F-Spot tags</b>"
+
+#: ../extensions/Exporters/TabbloExport/ui/TabbloExport.ui.h:3
+msgid "<b>Tabblo account</b>"
+msgstr "<b>Tabblo account</b>"
+
+#: ../extensions/Exporters/TabbloExport/ui/TabbloExport.ui.h:4
+msgid ""
+"<small><i>F-Spot tags can help you track the export status of photos. "
+"Example: Use one tag for the photos that you plan to export, and another one "
+"for those already exported. Here, you can tell F-Spot to automatically "
+"replace these tags as appropriate.</i></small>"
+msgstr ""
+"<small><i>F-Spot tags can help you track the export status of photos. "
+"Example: Use one tag for the photos that you plan to export, and another one "
+"for those already exported. Here, you can tell F-Spot to automatically "
+"replace these tags as appropriate.</i></small>"
+
+#: ../extensions/Exporters/TabbloExport/ui/TabbloExport.ui.h:6
+msgid "Rem_ove from exported photos:"
+msgstr "Rem_ove from exported photos:"
+
+#: ../extensions/Exporters/TabbloExport/ui/TabbloExport.ui.h:7
+msgid "Select..."
+msgstr "Select…"
+
+#: ../extensions/Exporters/TabbloExport/ui/TabbloExport.ui.h:8
+msgid "_Attach to exported photos:"
+msgstr "_Attach to exported photos:"
+
+#: ../extensions/Exporters/TabbloExport/ui/TrustError.ui.h:1
+msgid "<b>{0}</b>."
+msgstr "<b>{0}</b>."
+
+#: ../extensions/Exporters/TabbloExport/ui/TrustError.ui.h:2
+msgid "A trust error occured while attempting to access"
+msgstr "A trust error occurred while attempting to access"
+
+#: ../extensions/Exporters/TabbloExport/ui/TrustError.ui.h:3
+msgid "Abort this session"
+msgstr "Abort this session"
+
+#: ../extensions/Exporters/TabbloExport/ui/TrustError.ui.h:4
+msgid "Always trust this site's certificate"
+msgstr "Always trust this site's certificate"
+
+#: ../extensions/Exporters/TabbloExport/ui/TrustError.ui.h:5
+msgid "Do you wish to:"
+msgstr "Do you wish to:"
+
+#: ../extensions/Exporters/TabbloExport/ui/TrustError.ui.h:6
+msgid "Trust Error"
+msgstr "Trust Error"
+
+#: ../extensions/Exporters/TabbloExport/ui/TrustError.ui.h:7
+msgid "Trust the site's certificate this once"
+msgstr "Trust the site's certificate this once"
+
#: ../extensions/Exporters/ZipExport/ZipExport.addin.xml.h:1
msgid "Compressed fil_e..."
msgstr "Compressed fil_e…"
#: ../extensions/Exporters/ZipExport/ZipExport.cs:47
-#: ../src/Widgets/EditorPage.cs:196
+#: ../src/Widgets/EditorPage.cs:198
msgid "No selection available"
msgstr "No selection available"
@@ -1034,7 +1144,6 @@ msgid "Preparing photo \"{0}\""
msgstr "Preparing photo \"{0}\""
#: ../extensions/Exporters/ZipExport/ZipExport.glade.h:1
-#: ../src/f-spot.glade.h:92
msgid "_Create"
msgstr "_Create"
@@ -1050,6 +1159,10 @@ msgstr "_Location:"
msgid "_Scale:"
msgstr "_Scale:"
+#: ../extensions/Tools/HashJob/HashJob.addin.xml.h:1
+msgid "Check for Duplicates..."
+msgstr "Check for Duplicates…"
+
#: ../extensions/Tools/HashJob/HashJob.cs:53
msgid ""
"In order to detect duplicates on pictures you imported before 0.5.0, F-Spot "
@@ -1068,7 +1181,7 @@ msgid ""
msgstr ""
"You currently have {0} photos needing MD5 calculation, and {1} pending jobs"
-#: ../extensions/Tools/HashJob/HashJob.cs:75 ../src/ui/main_window.ui.h:37
+#: ../extensions/Tools/HashJob/HashJob.cs:75 ../src/ui/main_window.ui.h:38
msgid "_Close"
msgstr "_Close"
@@ -1080,9 +1193,110 @@ msgstr "Processing images…"
msgid "Stopped"
msgstr "Stopped"
-#: ../extensions/Tools/HashJob/HashJob.addin.xml.h:1
-msgid "Hash for Duplicates"
-msgstr "Hash for Duplicates"
+#: ../extensions/Tools/LiveWebGallery/GalleryRequestHandler.cs:107
+msgid "F-Spot Gallery"
+msgstr "F-Spot Gallery"
+
+#: ../extensions/Tools/LiveWebGallery/GalleryRequestHandler.cs:108
+msgid "The web gallery seems to be offline now"
+msgstr "The web gallery seems to be offline now"
+
+#: ../extensions/Tools/LiveWebGallery/GalleryRequestHandler.cs:109
+msgid "Show All"
+msgstr "Show All"
+
+#: ../extensions/Tools/LiveWebGallery/GalleryRequestHandler.cs:119
+#, csharp-format
+msgid "{0} photo"
+msgid_plural "{0} photos"
+msgstr[0] "{0} photo"
+msgstr[1] "{0} photos"
+
+#: ../extensions/Tools/LiveWebGallery/GalleryRequestHandler.cs:161
+#: ../extensions/Tools/LiveWebGallery/ui/LiveWebGallery.ui.h:8
+msgid "Current View"
+msgstr "Current View"
+
+#: ../extensions/Tools/LiveWebGallery/GalleryRequestHandler.cs:164
+msgid "Selected"
+msgstr "Selected"
+
+#: ../extensions/Tools/LiveWebGallery/LiveWebGallery.addin.xml.h:1
+msgid "Live Web Gallery"
+msgstr "Live Web Gallery"
+
+#: ../extensions/Tools/LiveWebGallery/LiveWebGalleryDialog.cs:89
+msgid "none"
+msgstr "none"
+
+#: ../extensions/Tools/LiveWebGallery/LiveWebGalleryDialog.cs:92
+#, csharp-format
+msgid " Gallery: {0}, Photos: {1}, Last client: {3}"
+msgstr " Gallery: {0}, Photos: {1}, Last client: {3}"
+
+#: ../extensions/Tools/LiveWebGallery/LiveWebGalleryDialog.cs:156
+msgid "Gallery is inactive"
+msgstr "Gallery is inactive"
+
+#: ../extensions/Tools/LiveWebGallery/ui/LiveWebGallery.ui.h:1
+msgid ""
+"<small><i>The gallery stays active until you either deactivate it or close\n"
+"F-Spot. Make sure local viewers access it bypassing HTTP proxy.</i></small>"
+msgstr ""
+"<small><i>The gallery stays active until you either deactivate it or close\n"
+"F-Spot. Make sure local viewers access it bypassing HTTP proxy.</i></small>"
+
+#: ../extensions/Tools/LiveWebGallery/ui/LiveWebGallery.ui.h:3
+msgid ""
+"<small><i>When the gallery is active, above is the URL you need to open \n"
+"on another computer to access the shared photos.</i></small>"
+msgstr ""
+"<small><i>When the gallery is active, above is the URL you need to open \n"
+"on another computer to access the shared photos.</i></small>"
+
+#: ../extensions/Tools/LiveWebGallery/ui/LiveWebGallery.ui.h:5
+msgid "Activates and deactivates the web gallery"
+msgstr "Activates and deactivates the web gallery"
+
+#: ../extensions/Tools/LiveWebGallery/ui/LiveWebGallery.ui.h:6
+msgid "Allow viewers to add tags"
+msgstr "Allow viewers to add tags"
+
+#: ../extensions/Tools/LiveWebGallery/ui/LiveWebGallery.ui.h:7
+msgid "Copy URL to clipboard"
+msgstr "Copy URL to clipboard"
+
+#: ../extensions/Tools/LiveWebGallery/ui/LiveWebGallery.ui.h:9
+msgid "F-Spot Live Web Gallery"
+msgstr "F-Spot Live Web Gallery"
+
+#: ../extensions/Tools/LiveWebGallery/ui/LiveWebGallery.ui.h:10
+msgid "Gallery URL:"
+msgstr "Gallery URL:"
+
+#: ../extensions/Tools/LiveWebGallery/ui/LiveWebGallery.ui.h:11
+msgid "Limit number of shared photos to"
+msgstr "Limit number of shared photos to"
+
+#: ../extensions/Tools/LiveWebGallery/ui/LiveWebGallery.ui.h:12
+msgid "Options:"
+msgstr "Options:"
+
+#: ../extensions/Tools/LiveWebGallery/ui/LiveWebGallery.ui.h:13
+msgid "Photos with a Tag"
+msgstr "Photos with a Tag"
+
+#: ../extensions/Tools/LiveWebGallery/ui/LiveWebGallery.ui.h:14
+msgid "Selected Photos"
+msgstr "Selected Photos"
+
+#: ../extensions/Tools/LiveWebGallery/ui/LiveWebGallery.ui.h:15
+msgid "Share:"
+msgstr "Share:"
+
+#: ../extensions/Tools/LiveWebGallery/ui/LiveWebGallery.ui.h:16
+msgid "Views:"
+msgstr "Views:"
#: ../extensions/Tools/MergeDb/MergeDb.addin.xml.h:1
msgid "Merge Db"
@@ -1170,11 +1384,11 @@ msgid "New Rolls Only"
msgstr "New Rolls Only"
#: ../extensions/Tools/MergeDb/MergeDb.glade.h:15
-#: ../src/FileImportBackend.cs:290 ../src/UI.Dialog/ThreadProgressDialog.cs:51
+#: ../src/UI.Dialog/ThreadProgressDialog.cs:57
msgid "Skip"
msgstr "Skip"
-#: ../extensions/Tools/MergeDb/PickFolderDialog.cs:33
+#: ../extensions/Tools/MergeDb/PickFolderDialog.cs:34
#, csharp-format
msgid ""
"<big>The database refers to files contained in the <b>{0}</b> folder.\n"
@@ -1212,380 +1426,215 @@ msgstr "Make F-Spot my screensaver"
msgid "Screensaver Configuration"
msgstr "Screensaver Configuration"
-#: ../f-spot.desktop.in.in.h:1 ../f-spot-import.desktop.in.in.h:1
-msgid "F-Spot Photo Manager"
-msgstr "F-Spot Photo Manager"
-
-#: ../f-spot.desktop.in.in.h:2
-msgid "Organize, enjoy, and share your photos"
-msgstr "Organise, enjoy, and share your photos"
-
-#: ../f-spot.desktop.in.in.h:3 ../f-spot-import.desktop.in.in.h:3
-msgid "Photo Manager"
-msgstr "Photo Manager"
+#: ../f-spot.schemas.in.h:1
+msgid "Display of transparent parts."
+msgstr "Display of transparent parts."
-#: ../f-spot-import.desktop.in.in.h:2
-msgid "Import into F-Spot"
-msgstr "Import into F-Spot"
+#: ../f-spot.schemas.in.h:2
+msgid "Enable this to allow interpolation on zoomed images."
+msgstr "Enable this to allow interpolation on zoomed images."
-#: ../f-spot-view.desktop.in.in.h:1
-msgid "F-Spot Photo Viewer"
-msgstr "F-Spot Photo Viewer"
-
-#: ../f-spot-view.desktop.in.in.h:2
-msgid "Photo Viewer"
-msgstr "Photo Viewer"
-
-#: ../lib/libfspot/f-jpeg-utils.c:441 ../src/RotateCommand.cs:224
-msgid "File not found"
-msgstr "File not found"
+#: ../f-spot.schemas.in.h:3
+msgid "Height of the import dialog."
+msgstr "Height of the import dialogue."
-#: ../lib/libfspot/f-jpeg-utils.c:464
-#, c-format
-msgid "Unknown transform type %d"
-msgstr "Unknown transform type %d"
+#: ../f-spot.schemas.in.h:4
+msgid "Height of the main window."
+msgstr "Height of the main window."
-#: ../lib/libfspot/f-jpeg-utils.c:472
-msgid "Operation failed"
-msgstr "Operation failed"
+#: ../f-spot.schemas.in.h:5
+msgid "Height of the photo viewer window."
+msgstr "Height of the photo viewer window."
-#: ../lib/mono-addins/Mono.Addins.Gui/gtk-gui/Mono.Addins.Gui.AddinInfoDialog.cs:32
-msgid "Package"
-msgstr "Package"
+#: ../f-spot.schemas.in.h:6
+msgid ""
+"If the 'transparency' option is set, the color specified in this option will "
+"be used as the transparent color when viewing images."
+msgstr ""
+"If the 'transparency' option is set, the colour specified in this option "
+"will be used as the transparent colour when viewing images."
-#: ../lib/mono-addins/Mono.Addins.Gui/gtk-gui/Mono.Addins.Gui.AddinInstallDialog.cs:110
-msgid "Extension Installation"
-msgstr "Extension Installation"
+#: ../f-spot.schemas.in.h:7
+msgid "Interpolate image on zoom."
+msgstr "Interpolate image on zoom."
-#: ../lib/mono-addins/Mono.Addins.Gui/gtk-gui/Mono.Addins.Gui.AddinInstallDialog.cs:136
-msgid "<b>Select the extensions to install and click on Next</b>"
-msgstr "<b>Select the extensions to install and click on Next</b>"
+#: ../f-spot.schemas.in.h:8
+msgid "Maximize the main window."
+msgstr "Maximise the main window."
-#: ../lib/mono-addins/Mono.Addins.Gui/gtk-gui/Mono.Addins.Gui.AddinInstallDialog.cs:150
-msgid "Install from:"
-msgstr "Install from:"
+#: ../f-spot.schemas.in.h:9
+msgid "Maximize the photo viewer window."
+msgstr "Maximise the photo viewer window."
-#: ../lib/mono-addins/Mono.Addins.Gui/gtk-gui/Mono.Addins.Gui.AddinInstallDialog.cs:179
-#: ../lib/mono-addins/Mono.Addins.Gui/gtk-gui/Mono.Addins.Gui.AddinManagerDialog.cs:180
-msgid "_Repositories..."
-msgstr "_Repositories…"
+#: ../f-spot.schemas.in.h:10
+msgid "Path to custom gtkrc for theming F-Spot."
+msgstr "Path to custom gtkrc for theming F-Spot."
-#: ../lib/mono-addins/Mono.Addins.Gui/gtk-gui/Mono.Addins.Gui.AddinInstallDialog.cs:220
-msgid "Show all packages"
-msgstr "Show all packages"
+#: ../f-spot.schemas.in.h:11
+msgid "Show dates in the thumbnail view."
+msgstr "Show dates in the thumbnail view."
-#: ../lib/mono-addins/Mono.Addins.Gui/gtk-gui/Mono.Addins.Gui.AddinInstallDialog.cs:221
-msgid "Show new versions only"
-msgstr "Show new versions only"
+#: ../f-spot.schemas.in.h:12
+msgid "Show ratings in the thumbnail view."
+msgstr "Show ratings in the thumbnail view."
-#: ../lib/mono-addins/Mono.Addins.Gui/gtk-gui/Mono.Addins.Gui.AddinInstallDialog.cs:222
-msgid "Show updates only"
-msgstr "Show updates only"
+#: ../f-spot.schemas.in.h:13
+msgid "Show tags in the thumbnail view."
+msgstr "Show tags in the thumbnail view."
-#: ../lib/mono-addins/Mono.Addins.Gui/gtk-gui/Mono.Addins.Gui.AddinInstallDialog.cs:247
-msgid "_Unselect All"
-msgstr "_Unselect All"
+#: ../f-spot.schemas.in.h:14
+msgid "Show the filename in the viewer window."
+msgstr "Show the filename in the viewer window."
-#: ../lib/mono-addins/Mono.Addins.Gui/gtk-gui/Mono.Addins.Gui.AddinInstallDialog.cs:259
-#: ../src/ui/main_window.ui.h:18
-msgid "Select _All"
-msgstr "Select _All"
+#: ../f-spot.schemas.in.h:15
+msgid "Show the filmstrip in the main window."
+msgstr "Show the filmstrip in the main window."
-#: ../lib/mono-addins/Mono.Addins.Gui/gtk-gui/Mono.Addins.Gui.AddinInstallDialog.cs:334
-msgid "label124"
-msgstr "label124"
+#: ../f-spot.schemas.in.h:16
+msgid "Show the sidebar in the main window."
+msgstr "Show the sidebar in the main window."
-#: ../lib/mono-addins/Mono.Addins.Gui/gtk-gui/Mono.Addins.Gui.AddinInstallDialog.cs:346
-msgid "Overall Progress:"
-msgstr "Overall Progress:"
+#: ../f-spot.schemas.in.h:17
+msgid "Show the timeline in the main window."
+msgstr "Show the timeline in the main window."
-#: ../lib/mono-addins/Mono.Addins.Gui/gtk-gui/Mono.Addins.Gui.AddinInstallDialog.cs:374
-msgid "Downloading extensions..."
-msgstr "Downloading extensions…"
+#: ../f-spot.schemas.in.h:18
+msgid "Show the toolbar in the main window."
+msgstr "Show the toolbar in the main window."
-#: ../lib/mono-addins/Mono.Addins.Gui/gtk-gui/Mono.Addins.Gui.AddinInstallerDialog.cs:36
-#: ../lib/mono-addins/Mono.Addins.Gui/gtk-gui/Mono.Addins.Gui.AddinManagerDialog.cs:58
-msgid "Extension Manager"
-msgstr "Extension Manager"
+#: ../f-spot.schemas.in.h:19
+msgid "Show the toolbar in the photo viewer window."
+msgstr "Show the toolbar in the photo viewer window."
-#: ../lib/mono-addins/Mono.Addins.Gui/gtk-gui/Mono.Addins.Gui.AddinInstallerDialog.cs:54
-msgid "Additional extensions are required to perform this operation."
-msgstr "Additional extensions are required to perform this operation."
+#: ../f-spot.schemas.in.h:20
+msgid "Size of the tag icons shown in the sidebar."
+msgstr "Size of the tag icons shown in the sidebar."
-#: ../lib/mono-addins/Mono.Addins.Gui/gtk-gui/Mono.Addins.Gui.AddinInstallerDialog.cs:64
-msgid "The following extensions will be installed:"
-msgstr "The following extensions will be installed:"
+#: ../f-spot.schemas.in.h:21
+msgid "The X position to use for the main window."
+msgstr "The X position to use for the main window."
-#: ../lib/mono-addins/Mono.Addins.Gui/gtk-gui/Mono.Addins.Gui.AddinManagerDialog.cs:90
-msgid "<big><b>Extension Manager</b></big>"
-msgstr "<big><b>Extension Manager</b></big>"
+#: ../f-spot.schemas.in.h:22
+msgid "The X position to use for the photo viewer window."
+msgstr "The X position to use for the photo viewer window."
-#: ../lib/mono-addins/Mono.Addins.Gui/gtk-gui/Mono.Addins.Gui.AddinManagerDialog.cs:110
-msgid "The following extensions are currently installed:"
-msgstr "The following extensions are currently installed:"
+#: ../f-spot.schemas.in.h:23
+msgid "The Y position to use for the main window."
+msgstr "The Y position to use for the main window."
-#: ../lib/mono-addins/Mono.Addins.Gui/gtk-gui/Mono.Addins.Gui.AddinManagerDialog.cs:165
-msgid "_Install Extensions..."
-msgstr "_Install Extensions…"
+#: ../f-spot.schemas.in.h:24
+msgid "The Y position to use for the photo viewer window."
+msgstr "The Y position to use for the photo viewer window."
-#: ../lib/mono-addins/Mono.Addins.Gui/gtk-gui/Mono.Addins.Gui.AddinManagerDialog.cs:210
-msgid "_Uninstall..."
-msgstr "_Uninstall…"
+#: ../f-spot.schemas.in.h:25
+msgid "The color to use for transparent parts."
+msgstr "The colour to use for transparent parts."
-#: ../lib/mono-addins/Mono.Addins.Gui/gtk-gui/Mono.Addins.Gui.AddinManagerDialog.cs:236
-msgid "Enable"
-msgstr "Enable"
+#: ../f-spot.schemas.in.h:26
+msgid "The height dimension to use for the import dialog."
+msgstr "The height dimension to use for the import dialogue."
-#: ../lib/mono-addins/Mono.Addins.Gui/gtk-gui/Mono.Addins.Gui.AddinManagerDialog.cs:262
-msgid "Disable"
-msgstr "Disable"
+#: ../f-spot.schemas.in.h:27
+msgid "The height dimension to use for the main window."
+msgstr "The height dimension to use for the main window."
-#: ../lib/mono-addins/Mono.Addins.Gui/gtk-gui/Mono.Addins.Gui.ErrorDialog.cs:111
-msgid "Details"
-msgstr "Details"
+#: ../f-spot.schemas.in.h:28
+msgid "The height dimension to use for the photo viewer window."
+msgstr "The height dimension to use for the photo viewer window."
-#: ../lib/mono-addins/Mono.Addins.Gui/gtk-gui/Mono.Addins.Gui.ManageSitesDialog.cs:34
-msgid "Extension Repository Management"
-msgstr "Extension Repository Management"
+#: ../f-spot.schemas.in.h:29
+msgid "The orientation of the filmstrip, if shown."
+msgstr "The orientation of the filmstrip, if shown."
-#: ../lib/mono-addins/Mono.Addins.Gui/gtk-gui/Mono.Addins.Gui.NewSiteDialog.cs:52
-msgid "Add New Repository"
-msgstr "Add New Repository"
+#: ../f-spot.schemas.in.h:30
+msgid "The orientation of the filmstrip."
+msgstr "The orientation of the filmstrip."
-#: ../lib/mono-addins/Mono.Addins.Gui/gtk-gui/Mono.Addins.Gui.NewSiteDialog.cs:70
-msgid "Select the location of the repository you want to register:"
-msgstr "Select the location of the repository you want to register:"
+#: ../f-spot.schemas.in.h:31
+msgid "The size (width) of the sidebar in the main window."
+msgstr "The size (width) of the sidebar in the main window."
-#. Container child vbox89.Gtk.Box+BoxChild
-#: ../lib/mono-addins/Mono.Addins.Gui/gtk-gui/Mono.Addins.Gui.NewSiteDialog.cs:77
-msgid "Register an on-line repository"
-msgstr "Register an on-line repository"
+#: ../f-spot.schemas.in.h:32
+msgid "The size of the sidebar in the main window."
+msgstr "The size of the sidebar in the main window."
-#: ../lib/mono-addins/Mono.Addins.Gui/gtk-gui/Mono.Addins.Gui.NewSiteDialog.cs:106
-msgid "Url:"
-msgstr "URL:"
+#: ../f-spot.schemas.in.h:33
+msgid "The width dimension to use for the import dialog."
+msgstr "The width dimension to use for the import dialogue."
-#. Container child vbox89.Gtk.Box+BoxChild
-#: ../lib/mono-addins/Mono.Addins.Gui/gtk-gui/Mono.Addins.Gui.NewSiteDialog.cs:127
-msgid "Register a local repository"
-msgstr "Register a local repository"
+#: ../f-spot.schemas.in.h:34
+msgid "The width dimension to use for the main window."
+msgstr "The width dimension to use for the main window."
-#: ../lib/mono-addins/Mono.Addins.Gui/gtk-gui/Mono.Addins.Gui.NewSiteDialog.cs:155
-msgid "Path:"
-msgstr "Path:"
+#: ../f-spot.schemas.in.h:35
+msgid "The width dimension to use for the photo viewer window."
+msgstr "The width dimension to use for the photo viewer window."
-#: ../lib/mono-addins/Mono.Addins.Gui/gtk-gui/Mono.Addins.Gui.NewSiteDialog.cs:179
-msgid "Browse..."
-msgstr "Browse…"
+#: ../f-spot.schemas.in.h:36
+msgid "Use the current photo's filename as the viewer window's title."
+msgstr "Use the current photo's filename as the viewer window's title."
-#: ../lib/mono-addins/Mono.Addins.Gui/Mono.Addins.Gui/AddinInfoDialog.cs:62
-msgid "Version:"
-msgstr "Version:"
+#: ../f-spot.schemas.in.h:37
+msgid "Width of the import dialog."
+msgstr "Width of the import dialogue."
-#: ../lib/mono-addins/Mono.Addins.Gui/Mono.Addins.Gui/AddinInfoDialog.cs:65
-msgid "Author:"
-msgstr "Author:"
+#: ../f-spot.schemas.in.h:38
+msgid "Width of the main window."
+msgstr "Width of the main window."
-#: ../lib/mono-addins/Mono.Addins.Gui/Mono.Addins.Gui/AddinInfoDialog.cs:68
-msgid "Copyright:"
-msgstr "Copyright:"
+#: ../f-spot.schemas.in.h:39
+msgid "Width of the photo viewer window."
+msgstr "Width of the photo viewer window."
-#: ../lib/mono-addins/Mono.Addins.Gui/Mono.Addins.Gui/AddinInfoDialog.cs:71
-msgid "Extension Dependencies:"
-msgstr "Extension Dependencies:"
+#: ../f-spot.schemas.in.h:40
+msgid "Width of the preview image pane in the import dialog."
+msgstr "Width of the preview image pane in the import dialogue."
-#: ../lib/mono-addins/Mono.Addins.Gui/Mono.Addins.Gui/AddinInstallDialog.cs:97
-msgid "All registered repositories"
-msgstr "All registered repositories"
+#: ../f-spot.schemas.in.h:41
+msgid "X position of the main window."
+msgstr "X position of the main window."
-#: ../lib/mono-addins/Mono.Addins.Gui/Mono.Addins.Gui/AddinInstallDialog.cs:184
-msgid "Are you sure you want to cancel the installation?"
-msgstr "Are you sure you want to cancel the installation?"
+#: ../f-spot.schemas.in.h:42
+msgid "X position of the photo viewer window."
+msgstr "X position of the photo viewer window."
-#: ../lib/mono-addins/Mono.Addins.Gui/Mono.Addins.Gui/AddinInstallDialog.cs:308
-msgid "The following packages will be uninstalled:"
-msgstr "The following packages will be uninstalled:"
+#: ../f-spot.schemas.in.h:43
+msgid "Y position of the main window."
+msgstr "Y position of the main window."
-#: ../lib/mono-addins/Mono.Addins.Gui/Mono.Addins.Gui/AddinInstallDialog.cs:313
-msgid ""
-"There are other extensions that depend on the previous ones which will also "
-"be uninstalled:"
-msgstr ""
-"There are other extensions that depend on the previous ones which will also "
-"be uninstalled:"
+#: ../f-spot.schemas.in.h:44
+msgid "Y position of the photo viewer window."
+msgstr "Y position of the photo viewer window."
-#: ../lib/mono-addins/Mono.Addins.Gui/Mono.Addins.Gui/AddinInstallDialog.cs:384
+#: ../f-spot.schemas.in.h:45
msgid ""
-"The selected extensions can't be installed because there are dependency "
-"conflicts."
+"You can choose how to display transparent parts in images. This option has "
+"no effect on photos but setting this value to CHECK_PATTERN or CUSTOM_COLOR "
+"could be useful when viewing icons or other artwork with transparent parts."
msgstr ""
-"The selected extensions can't be installed because there are dependency "
-"conflicts."
-
-#: ../lib/mono-addins/Mono.Addins.Gui/Mono.Addins.Gui/AddinInstallDialog.cs:398
-msgid "The following packages will be installed:"
-msgstr "The following packages will be installed:"
-
-#: ../lib/mono-addins/Mono.Addins.Gui/Mono.Addins.Gui/AddinInstallDialog.cs:402
-msgid " (in user directory)"
-msgstr " (in user directory)"
-
-#: ../lib/mono-addins/Mono.Addins.Gui/Mono.Addins.Gui/AddinInstallDialog.cs:408
-msgid "The following packages need to be uninstalled:"
-msgstr "The following packages need to be uninstalled:"
-
-#: ../lib/mono-addins/Mono.Addins.Gui/Mono.Addins.Gui/AddinInstallDialog.cs:416
-msgid "The following dependencies could not be resolved:"
-msgstr "The following dependencies could not be resolved:"
-
-#: ../lib/mono-addins/Mono.Addins.Gui/Mono.Addins.Gui/AddinInstallDialog.cs:441
-msgid "The installation has been successfully completed."
-msgstr "The installation has been successfully completed."
-
-#: ../lib/mono-addins/Mono.Addins.Gui/Mono.Addins.Gui/AddinInstallDialog.cs:442
-msgid "The installation failed!"
-msgstr "The installation failed!"
-
-#: ../lib/mono-addins/Mono.Addins.Gui/Mono.Addins.Gui/AddinInstallDialog.cs:443
-msgid "The installation has completed with warnings."
-msgstr "The installation has completed with warnings."
-
-#: ../lib/mono-addins/Mono.Addins.Gui/Mono.Addins.Gui/AddinInstallDialog.cs:446
-msgid "The uninstallation has been successfully completed."
-msgstr "The uninstallation has been successfully completed."
-
-#: ../lib/mono-addins/Mono.Addins.Gui/Mono.Addins.Gui/AddinInstallDialog.cs:447
-msgid "The uninstallation failed!"
-msgstr "The uninstallation failed!"
-
-#: ../lib/mono-addins/Mono.Addins.Gui/Mono.Addins.Gui/AddinInstallDialog.cs:448
-msgid "The uninstallation has completed with warnings."
-msgstr "The uninstallation has completed with warnings."
-
-#: ../lib/mono-addins/Mono.Addins.Gui/Mono.Addins.Gui/AddinInstallDialog.cs:616
-msgid "Repository"
-msgstr "Repository"
-
-#: ../lib/mono-addins/Mono.Addins.Gui/Mono.Addins.Gui/AddinInstaller.cs:16
-msgid "Installation cancelled"
-msgstr "Installation cancelled"
-
-#: ../lib/mono-addins/Mono.Addins.Gui/Mono.Addins.Gui/AddinInstallerDialog.cs:159
-msgid "Some of the required extensions were not found"
-msgstr "Some of the required extensions were not found"
-
-#: ../lib/mono-addins/Mono.Addins.Gui/Mono.Addins.Gui/AddinInstallerDialog.cs:171
-msgid "Installation failed"
-msgstr "Installation failed"
-
-#: ../lib/mono-addins/Mono.Addins.Gui/Mono.Addins.Gui/AddinTreeWidget.cs:91
-msgid "Extension"
-msgstr "Extension"
-
-#: ../lib/mono-addins/Mono.Addins.Gui/Mono.Addins.Gui/AddinTreeWidget.cs:112
-#: ../src/Widgets/InfoBox.cs:214
-msgid "Version"
-msgstr "Version"
-
-#: ../lib/mono-addins/Mono.Addins.Gui/Mono.Addins.Gui/AddinTreeWidget.cs:168
-msgid "Other"
-msgstr "Other"
-
-#: ../lib/mono-addins/Mono.Addins.Gui/Mono.Addins.Gui/ManageSitesDialog.cs:52
-msgid "Url"
-msgstr "URL"
-
-#: ../lib/mono-addins/Mono.Addins.Gui/Mono.Addins.Gui/Services.cs:61
-#: ../lib/mono-addins/Mono.Addins.Gui/Mono.Addins.Gui/Services.cs:70
-#, csharp-format
-msgid "Exception occurred: {0}"
-msgstr "Exception occurred: {0}"
-
-#: ../lib/mono-addins/Mono.Addins/Mono.Addins/AddinSessionService.cs:154
-msgid "Disabled extensions can't be loaded."
-msgstr "Disabled extensions can't be loaded."
-
-#: ../lib/mono-addins/Mono.Addins/Mono.Addins/AddinSessionService.cs:179
-#, csharp-format
-msgid "Loading {0} extension"
-msgstr "Loading {0} extension"
-
-#: ../lib/mono-addins/Mono.Addins/Mono.Addins/AddinSessionService.cs:265
-#, csharp-format
-msgid "The required extension '{0}' is disabled."
-msgstr "The required extension '{0}' is disabled."
-
-#: ../lib/mono-addins/Mono.Addins/Mono.Addins/AddinSessionService.cs:267
-#, csharp-format
-msgid "The required extension '{0}' is not installed."
-msgstr "The required extension '{0}' is not installed."
-
-#: ../lib/mono-addins/Mono.Addins/Mono.Addins.Description/AssemblyDependency.cs:79
-#, csharp-format
-msgid "(provided by {0})"
-msgstr "(provided by {0})"
+"You can choose how to display transparent parts in images. This option has "
+"no effect on photos but setting this value to CHECK_PATTERN or CUSTOM_COLOR "
+"could be useful when viewing icons or other artwork with transparent parts."
-#: ../src/CameraFileSelectionDialog.cs:76
-msgid "Preview"
-msgstr "Preview"
-
-#: ../src/CameraFileSelectionDialog.cs:78
-msgid "Path"
-msgstr "Path"
-
-#: ../src/CameraFileSelectionDialog.cs:80 ../src/f-spot.glade.h:46
-msgid "File"
-msgstr "File"
-
-#: ../src/CameraFileSelectionDialog.cs:102
-msgid "Select Tag"
-msgstr "Select Tag"
-
-#: ../src/CameraFileSelectionDialog.cs:138
-msgid "Downloading Previews"
-msgstr "Downloading Previews"
-
-#: ../src/CameraFileSelectionDialog.cs:148
-#, csharp-format
-msgid "Downloading Preview of {0}"
-msgstr "Downloading Preview of {0}"
-
-#: ../src/CameraFileSelectionDialog.cs:220
-#, csharp-format
-msgid "Copying file {0} of {1}"
-msgstr "Copying file {0} of {1}"
-
-#: ../src/CameraFileSelectionDialog.cs:235
-msgid "Error transferring file"
-msgstr "Error transferring file"
-
-#: ../src/CameraFileSelectionDialog.cs:244
-msgid "Done Copying Files"
-msgstr "Done Copying Files"
-
-#: ../src/CameraFileSelectionDialog.cs:246
-msgid "Download Complete"
-msgstr "Download Complete"
-
-#: ../src/CameraFileSelectionDialog.cs:271
-#, csharp-format
-msgid "Transferring \"{0}\" from camera"
-msgstr "Transferring \"{0}\" from camera"
+#: ../lib/libfspot/f-jpeg-utils.c:441 ../src/RotateCommand.cs:211
+msgid "File not found"
+msgstr "File not found"
-#: ../src/CameraSelectionDialog.cs:29 ../src/Widgets/InfoBox.cs:230
-msgid "Camera"
-msgstr "Camera"
+#: ../lib/libfspot/f-jpeg-utils.c:464
+#, c-format
+msgid "Unknown transform type %d"
+msgstr "Unknown transform type %d"
-#: ../src/CameraSelectionDialog.cs:30
-msgid "Port"
-msgstr "Port"
+#: ../lib/libfspot/f-jpeg-utils.c:472
+msgid "Operation failed"
+msgstr "Operation failed"
-#: ../src/Core.cs:203
+#: ../src/Core/App.cs:274
#, csharp-format
msgid "No photos matching {0} found"
msgstr "No photos matching {0} found"
-#: ../src/Core.cs:204
+#: ../src/Core/App.cs:275
#, csharp-format
msgid ""
"The tag \"{0}\" is not applied to any photos. Try adding\n"
@@ -1596,11 +1645,11 @@ msgstr ""
"the tag to some photos or selecting a different tag in the\n"
"F-Spot preference dialogue."
-#: ../src/Core.cs:208
+#: ../src/Core/App.cs:279
msgid "Search returned no results"
msgstr "Search returned no results"
-#: ../src/Core.cs:209
+#: ../src/Core/App.cs:280
msgid ""
"The tag F-Spot is looking for does not exist. Try\n"
"selecting a different tag in the F-Spot preference\n"
@@ -1611,35 +1660,30 @@ msgstr ""
"dialogue."
#. Note for translators: Reparented is a picture becoming a version of another one
-#: ../src/Core/Photo.cs:473
+#: ../src/Core/Photo.cs:362
msgid "Reparented"
msgstr "Reparented"
-#: ../src/Core/Photo.cs:473
-#, csharp-format
-msgid "Reparented ({0})"
-msgstr "Reparented ({0})"
-
-#: ../src/Core/Photo.cs:492
+#: ../src/Core/Photo.cs:378
#, csharp-format
msgid "Modified"
msgid_plural "Modified ({0})"
msgstr[0] "Modified"
msgstr[1] "Modified ({0})"
-#: ../src/Core/Photo.cs:511
+#: ../src/Core/Photo.cs:401
#, csharp-format
msgid "Modified in {1}"
msgstr "Modified in {1}"
-#: ../src/Core/Photo.cs:511
+#: ../src/Core/Photo.cs:401
#, csharp-format
msgid "Modified in {1} ({0})"
msgstr "Modified in {1} ({0})"
#. Note that the original version is never stored in the photo_versions table in the
#. database.
-#: ../src/Core/Photo.cs:666 ../src/f-spot.glade.h:61
+#: ../src/Core/Photo.cs:571 ../src/f-spot.glade.h:39
msgid "Original"
msgstr "Original"
@@ -1655,43 +1699,43 @@ msgstr "Adjust Colours"
msgid "Adjust"
msgstr "Adjust"
-#: ../src/Editors/CropEditor.cs:35
+#: ../src/Editors/CropEditor.cs:36
msgid "4 x 3 (Book)"
msgstr "4 × 3 (Book)"
-#: ../src/Editors/CropEditor.cs:36
+#: ../src/Editors/CropEditor.cs:37
msgid "4 x 6 (Postcard)"
msgstr "4 × 6 (Postcard)"
-#: ../src/Editors/CropEditor.cs:37
+#: ../src/Editors/CropEditor.cs:38
msgid "5 x 7 (L, 2L)"
msgstr "5 × 7 (L, 2L)"
-#: ../src/Editors/CropEditor.cs:38
+#: ../src/Editors/CropEditor.cs:39
msgid "8 x 10"
msgstr "8 × 10"
-#: ../src/Editors/CropEditor.cs:39
+#: ../src/Editors/CropEditor.cs:40
msgid "Square"
msgstr "Square"
-#: ../src/Editors/CropEditor.cs:42
+#: ../src/Editors/CropEditor.cs:43
msgid "Crop"
msgstr "Crop"
-#: ../src/Editors/CropEditor.cs:73
+#: ../src/Editors/CropEditor.cs:74
msgid "Select the area that needs cropping."
msgstr "Select an area to crop"
-#: ../src/Editors/CropEditor.cs:98
+#: ../src/Editors/CropEditor.cs:99
msgid "No Constraint"
msgstr "No Constraint"
-#: ../src/Editors/CropEditor.cs:99
+#: ../src/Editors/CropEditor.cs:100
msgid "Same as photo"
msgstr "Same as photo"
-#: ../src/Editors/CropEditor.cs:104
+#: ../src/Editors/CropEditor.cs:105
msgid "Custom Ratios..."
msgstr "Custom Ratios…"
@@ -1715,35 +1759,22 @@ msgstr "Select the eyes you wish to fix."
msgid "Sepia Tone"
msgstr "Sepia Tone"
-#: ../src/Editors/SoftFocusEditor.cs:28
+#: ../src/Editors/SoftFocusEditor.cs:32
msgid "Soft Focus"
msgstr "Soft Focus"
-#: ../src/Editors/TiltEditor.cs:28
+#: ../src/Editors/TiltEditor.cs:30
msgid "Straighten"
msgstr "Straighten"
-#: ../src/FileImportBackend.cs:288
-msgid "Import error"
-msgstr "Import error"
-
-#: ../src/FileImportBackend.cs:289
-#, csharp-format
-msgid "Error importing {0}{2}{2}{1}"
-msgstr "Error importing {0}{2}{2}{1}"
-
#: ../src/Filters/ResizeFilter.cs:70 ../src/Filters/SharpFilter.cs:52
#, csharp-format
msgid "No way to save files of type \"{0}\""
msgstr "No way to save files of type \"{0}\""
-#: ../src/FormClient.cs:295
-msgid "Unhandled exception"
-msgstr "Unhandled exception"
-
#: ../src/FSpot.addin.xml.h:1
-msgid "Copy Photo Locat_ion"
-msgstr "Copy Photo Locat_ion"
+msgid "Copy Photo"
+msgstr "Copy Photo"
#: ../src/FSpot.addin.xml.h:2
msgid "Export to"
@@ -1753,17 +1784,17 @@ msgstr "Export to"
msgid "Open _With"
msgstr "Open _With"
-#: ../src/FSpot.addin.xml.h:4 ../src/ui/main_window.ui.h:15
+#: ../src/FSpot.addin.xml.h:4 ../src/ui/main_window.ui.h:16
msgid "Rem_ove Tag"
msgstr "Rem_ove Tag"
-#: ../src/FSpot.addin.xml.h:5 ../src/f-spot.glade.h:68
-#: ../src/SingleView.cs:453 ../src/ui/main_window.ui.h:16
+#: ../src/FSpot.addin.xml.h:5 ../src/f-spot.glade.h:44
+#: ../src/SingleView.cs:425 ../src/ui/main_window.ui.h:17
msgid "Rotate _Left"
msgstr "Rotate _Left"
-#: ../src/FSpot.addin.xml.h:6 ../src/f-spot.glade.h:69
-#: ../src/SingleView.cs:454 ../src/ui/main_window.ui.h:17
+#: ../src/FSpot.addin.xml.h:6 ../src/f-spot.glade.h:45
+#: ../src/SingleView.cs:426 ../src/ui/main_window.ui.h:18
msgid "Rotate _Right"
msgstr "Rotate _Right"
@@ -1771,75 +1802,63 @@ msgstr "Rotate _Right"
msgid "Tools"
msgstr "Tools"
-#: ../src/FSpot.addin.xml.h:8 ../src/ui/main_window.ui.h:32
-msgid "_Attach Tag"
-msgstr "_Attach Tag"
-
-#: ../src/FSpot.addin.xml.h:9 ../src/ui/main_window.ui.h:41
+#: ../src/FSpot.addin.xml.h:8 ../src/ui/main_window.ui.h:42
msgid "_Delete From Drive"
msgstr "_Delete from Drive"
-#: ../src/FSpot.addin.xml.h:10 ../src/ui/main_window.ui.h:59
+#: ../src/FSpot.addin.xml.h:9 ../src/ui/main_window.ui.h:61
msgid "_Remove From Catalog"
msgstr "_Remove from Catalogue"
#: ../src/f-spot.glade.h:1
-msgid " "
-msgstr " "
-
-#: ../src/f-spot.glade.h:2
msgid "1024 px"
msgstr "1024 px"
-#: ../src/f-spot.glade.h:3
+#: ../src/f-spot.glade.h:2
msgid "320 px"
msgstr "320 px"
-#: ../src/f-spot.glade.h:4
+#: ../src/f-spot.glade.h:3
msgid "480 px"
msgstr "480 px"
-#: ../src/f-spot.glade.h:5
+#: ../src/f-spot.glade.h:4
msgid "640 px"
msgstr "640 px"
-#: ../src/f-spot.glade.h:6
+#: ../src/f-spot.glade.h:5
msgid "800 px"
msgstr "800 px"
-#: ../src/f-spot.glade.h:7
-msgid "<b></b>"
-msgstr "<b></b>"
-
-#: ../src/f-spot.glade.h:10
+#: ../src/f-spot.glade.h:6
msgid "<b>Co_rrections</b>"
msgstr "<b>Co_rrections</b>"
-#: ../src/f-spot.glade.h:13
+#: ../src/f-spot.glade.h:7
msgid "<b>Image Interpolation</b>"
msgstr "<b>Image Interpolation</b>"
-#: ../src/f-spot.glade.h:15
+#: ../src/f-spot.glade.h:9
msgid "<b>Size</b>"
msgstr "<b>Size</b>"
-#: ../src/f-spot.glade.h:17
+#: ../src/f-spot.glade.h:11
msgid "<b>Summary</b>"
msgstr "<b>Summary</b>"
-#: ../src/f-spot.glade.h:18
+#: ../src/f-spot.glade.h:12
msgid "<b>Transparent Parts</b>"
msgstr "<b>Transparent Parts</b>"
-#: ../src/f-spot.glade.h:19
+#: ../src/f-spot.glade.h:13
msgid "<b>View all pictures imported</b>"
msgstr "<b>View all pictures imported</b>"
-#: ../src/f-spot.glade.h:20
+#: ../src/f-spot.glade.h:14
msgid "<b>_White Balance</b>"
msgstr "<b>_White Balance</b>"
-#: ../src/f-spot.glade.h:21
+#: ../src/f-spot.glade.h:15
msgid ""
"<small><i>Enable this to allow interpolation on zoomed images. You shouldn't "
"disable this for viewing photos, but disabling the interpolation could be "
@@ -1849,7 +1868,7 @@ msgstr ""
"disable this for viewing photos, but disabling the interpolation could be "
"useful in icon design.</i></small>"
-#: ../src/f-spot.glade.h:22
+#: ../src/f-spot.glade.h:16
msgid ""
"<small><i>You can choose how to display transparent parts in images. This "
"option has no effect on photos, but setting this as check pattern or custom "
@@ -1861,209 +1880,139 @@ msgstr ""
"colour could be usefull when viewing icons or other artworks with "
"transparent parts.</i></small>"
-#: ../src/f-spot.glade.h:23
+#: ../src/f-spot.glade.h:17
msgid "As _background"
msgstr "As _background"
-#: ../src/f-spot.glade.h:24
+#: ../src/f-spot.glade.h:18
msgid "As _custom color: "
msgstr "As _custom colour: "
-#: ../src/f-spot.glade.h:25
+#: ../src/f-spot.glade.h:19
msgid "As check _pattern"
msgstr "As check _pattern"
-#: ../src/f-spot.glade.h:26
-msgid "Attach Tags:"
-msgstr "Attach Tags:"
-
-#: ../src/f-spot.glade.h:27
-msgid "Attach tag:"
-msgstr "Attach tag:"
-
-#: ../src/f-spot.glade.h:29
-msgid "CD"
-msgstr "CD"
-
-#: ../src/f-spot.glade.h:30
+#: ../src/f-spot.glade.h:21
msgid "C_ontrast:"
msgstr "C_ontrast:"
-#: ../src/f-spot.glade.h:31
-msgid "Camera Selection"
-msgstr "Camera Selection"
-
-#: ../src/f-spot.glade.h:32
-msgid "Copy files to the Photos folder"
-msgstr "Copy files to the Photos folder"
+#: ../src/f-spot.glade.h:22
+msgid "C_reate"
+msgstr "C_reate"
-#: ../src/f-spot.glade.h:33
+#: ../src/f-spot.glade.h:23
msgid "Create Mail"
msgstr "Create Mail"
-#: ../src/f-spot.glade.h:34
+#: ../src/f-spot.glade.h:24
msgid "Create _icon for this tag when first used"
msgstr "Create _icon for this tag when first used"
-#: ../src/f-spot.glade.h:35
+#: ../src/f-spot.glade.h:25
msgid "Create a mail with the selected photos (possibly resized) attached"
msgstr "Create a mail with the selected photos (possibly resized) attached"
-#: ../src/f-spot.glade.h:36
-msgid "Detect duplicates"
-msgstr "Detect duplicates"
-
-#: ../src/f-spot.glade.h:37
+#: ../src/f-spot.glade.h:26
msgid "Display File _Names"
msgstr "Display File _Names"
-#: ../src/f-spot.glade.h:38
+#: ../src/f-spot.glade.h:27
msgid "Display only those photos that were imported in specified Rolls."
msgstr "Display only those photos that were imported in specified Rolls."
-#: ../src/f-spot.glade.h:39
+#: ../src/f-spot.glade.h:28
msgid "Do not send a mail"
msgstr "Do not send a mail"
-#: ../src/f-spot.glade.h:40
-msgid "E-_Mail:"
-msgstr "E-_Mail:"
-
-#: ../src/f-spot.glade.h:41
-msgid "E_xport titles and comments"
-msgstr "E_xport titles and comments"
-
-#: ../src/f-spot.glade.h:42
+#: ../src/f-spot.glade.h:29
msgid "Estimated new size"
msgstr "Estimated new size"
-#: ../src/f-spot.glade.h:44
+#: ../src/f-spot.glade.h:30
msgid "Extra large"
msgstr "Extra large"
-#: ../src/f-spot.glade.h:45
+#: ../src/f-spot.glade.h:31
msgid "F-Spot View"
msgstr "F-Spot View"
-#: ../src/f-spot.glade.h:47
+#: ../src/f-spot.glade.h:32
msgid "Filter on selected rolls"
msgstr "Filter on selected rolls"
-#: ../src/f-spot.glade.h:48
-msgid "G_allery:"
-msgstr "G_allery:"
-
-#: ../src/f-spot.glade.h:49
-msgid "Gallery"
-msgstr "Gallery"
-
-#: ../src/f-spot.glade.h:50 ../src/ImportCommand.cs:547
-#: ../src/MainWindow.cs:267
-msgid "Import"
-msgstr "Import"
-
-#. Translators: this string means 'source of import'
-#: ../src/f-spot.glade.h:52
-msgid "Import Source:"
-msgstr "Import Source:"
-
-#: ../src/f-spot.glade.h:53
-msgid "Include subfolders"
-msgstr "Include subfolders"
-
-#: ../src/f-spot.glade.h:54
+#: ../src/f-spot.glade.h:33
msgid "Large"
msgstr "Large"
-#: ../src/f-spot.glade.h:55
+#: ../src/f-spot.glade.h:34
msgid "Manage your custom selection ratios"
msgstr "Manage your custom selection ratios"
-#: ../src/f-spot.glade.h:56
+#: ../src/f-spot.glade.h:35
msgid "Medium"
msgstr "Medium"
-#: ../src/f-spot.glade.h:58
+#: ../src/f-spot.glade.h:36
msgid "Number of photos in selected rolls:"
msgstr "Number of photos in selected rolls:"
-#: ../src/f-spot.glade.h:59
+#: ../src/f-spot.glade.h:37
msgid "Number of pictures"
msgstr "Number of pictures"
-#: ../src/f-spot.glade.h:60
+#: ../src/f-spot.glade.h:38
msgid "Open _Folder..."
msgstr "Open _Folder…"
-#: ../src/f-spot.glade.h:62
+#: ../src/f-spot.glade.h:40
msgid "Original size (possible very large file size)"
msgstr "Original size (possible very large file size)"
-#: ../src/f-spot.glade.h:63 ../src/UI.Dialog/ui/EditTagDialog.ui.h:4
+#: ../src/f-spot.glade.h:41 ../src/UI.Dialog/ui/EditTagDialog.ui.h:4
msgid "P_arent Tag:"
msgstr "P_arent Tag:"
-#: ../src/f-spot.glade.h:64
-msgid "Pause"
-msgstr "Pause"
-
-#: ../src/f-spot.glade.h:65
+#: ../src/f-spot.glade.h:42
msgid "Preferences"
msgstr "Preferences"
-#: ../src/f-spot.glade.h:66 ../src/ItemAction.cs:123
-msgid "Previous"
-msgstr "Previous"
-
-#: ../src/f-spot.glade.h:67
+#: ../src/f-spot.glade.h:43
msgid "Repair"
msgstr "Repair"
-#: ../src/f-spot.glade.h:70
-msgid "Select Photos to Copy From Camera..."
-msgstr "Select Photos to Copy from Camera…"
-
-#: ../src/f-spot.glade.h:71
+#: ../src/f-spot.glade.h:46
msgid "Select a Tag..."
msgstr "Select a Tag…"
-#: ../src/f-spot.glade.h:72
-msgid "Select the camera from which you want to transfer files"
-msgstr "Select the camera from which you want to transfer files"
-
-#: ../src/f-spot.glade.h:73
-msgid "Selected Camera: "
-msgstr "Selected Camera: "
-
-#: ../src/f-spot.glade.h:74
+#: ../src/f-spot.glade.h:47
msgid "Selection Constraints"
msgstr "Selection Constraints"
-#: ../src/f-spot.glade.h:75 ../src/ui/main_window.ui.h:21
+#: ../src/f-spot.glade.h:48 ../src/ui/main_window.ui.h:22
msgid "Set as _Background"
msgstr "Set as _Background"
-#: ../src/f-spot.glade.h:76
+#: ../src/f-spot.glade.h:49
msgid "Show all photos."
msgstr "Show all photos."
-#: ../src/f-spot.glade.h:77
+#: ../src/f-spot.glade.h:50
msgid "Show or hide the side pane"
msgstr "Show or hide the side pane"
-#: ../src/f-spot.glade.h:78
+#: ../src/f-spot.glade.h:51
msgid "Show or hide the toolbar"
msgstr "Show or hide the toolbar"
-#: ../src/f-spot.glade.h:79
+#: ../src/f-spot.glade.h:52
msgid "Side _pane"
msgstr "Side _pane"
-#: ../src/f-spot.glade.h:80
+#: ../src/f-spot.glade.h:53
msgid "Small"
msgstr "Small"
-#: ../src/f-spot.glade.h:81
+#: ../src/f-spot.glade.h:54
msgid ""
"Specify if an original size picture should be rotated or not. Smaller sizes "
"are automatically rotated."
@@ -2071,141 +2020,105 @@ msgstr ""
"Specify if an original size picture should be rotated or not. Smaller sizes "
"are automatically rotated."
-#: ../src/f-spot.glade.h:82
-msgid "Strip image _metadata"
-msgstr "Strip image _metadata"
-
#. Note for translators: meant as Temperature
-#: ../src/f-spot.glade.h:84
+#: ../src/f-spot.glade.h:56
msgid "Te_mp:"
msgstr "Te_mp:"
-#: ../src/f-spot.glade.h:85
+#: ../src/f-spot.glade.h:57
msgid "Tiny"
msgstr "Tiny"
-#: ../src/f-spot.glade.h:86
+#: ../src/f-spot.glade.h:58
msgid "Total original size"
msgstr "Total original size"
-#: ../src/f-spot.glade.h:87 ../src/ui/main_window.ui.h:28
+#: ../src/f-spot.glade.h:59 ../src/ui/main_window.ui.h:29
msgid "Zoom _in"
msgstr "Zoom _In"
-#: ../src/f-spot.glade.h:88 ../src/ui/main_window.ui.h:29
+#: ../src/f-spot.glade.h:60 ../src/ui/main_window.ui.h:30
msgid "Zoom _out"
msgstr "Zoom _Out"
-#: ../src/f-spot.glade.h:89 ../src/ui/main_window.ui.h:30
+#: ../src/f-spot.glade.h:61 ../src/ui/main_window.ui.h:31
msgid "Zoom in"
msgstr "Zoom in"
-#: ../src/f-spot.glade.h:90 ../src/ui/main_window.ui.h:31
+#: ../src/f-spot.glade.h:62 ../src/ui/main_window.ui.h:32
msgid "Zoom out"
msgstr "Zoom out"
-#: ../src/f-spot.glade.h:91
+#: ../src/f-spot.glade.h:63
msgid "_Brightness:"
msgstr "_Brightness:"
-#: ../src/f-spot.glade.h:93
+#: ../src/f-spot.glade.h:64
msgid "_Create Mail"
msgstr "_Create Mail"
-#: ../src/f-spot.glade.h:94 ../src/ui/main_window.ui.h:44
+#: ../src/f-spot.glade.h:65 ../src/ui/main_window.ui.h:45
msgid "_Edit"
msgstr "_Edit"
-#: ../src/f-spot.glade.h:98
+#: ../src/f-spot.glade.h:67
msgid "_Exposure:"
msgstr "_Exposure:"
-#: ../src/f-spot.glade.h:99
-msgid "_Flickr"
-msgstr "_Flickr"
-
-#: ../src/f-spot.glade.h:100 ../src/ui/main_window.ui.h:48
+#: ../src/f-spot.glade.h:68 ../src/ui/main_window.ui.h:49
msgid "_Fullscreen"
msgstr "_Fullscreen"
-#: ../src/f-spot.glade.h:101
-msgid "_Gallery"
-msgstr "_Gallery"
-
-#: ../src/f-spot.glade.h:102 ../src/ui/main_window.ui.h:49
+#: ../src/f-spot.glade.h:69 ../src/ui/main_window.ui.h:50
msgid "_Help"
msgstr "_Help"
-#: ../src/f-spot.glade.h:103
+#: ../src/f-spot.glade.h:70
msgid "_Hue:"
msgstr "_Hue:"
-#: ../src/f-spot.glade.h:104
+#: ../src/f-spot.glade.h:71
msgid "_Interpolate image on zoom"
msgstr "_Interpolate image on zoom"
-#: ../src/f-spot.glade.h:105
+#: ../src/f-spot.glade.h:72
msgid "_New Window"
msgstr "_New Window"
-#: ../src/f-spot.glade.h:106
-msgid "_Open album in browser when done uploading"
-msgstr "_Open album in browser when done uploading"
-
-#: ../src/f-spot.glade.h:107
-msgid "_Open destination when done exporting"
-msgstr "_Open destination when done exporting"
-
-#: ../src/f-spot.glade.h:108 ../src/ui/main_window.ui.h:56
+#: ../src/f-spot.glade.h:73 ../src/ui/main_window.ui.h:58
msgid "_Photo"
msgstr "_Photo"
-#: ../src/f-spot.glade.h:110
+#: ../src/f-spot.glade.h:74
msgid "_Saturation:"
msgstr "_Saturation:"
-#: ../src/f-spot.glade.h:111
-msgid "_Scale photos to no larger than: "
-msgstr "_Scale photos to no larger than: "
-
-#: ../src/f-spot.glade.h:112 ../src/ui/main_window.ui.h:67
+#: ../src/f-spot.glade.h:75 ../src/ui/main_window.ui.h:69
msgid "_Slideshow"
msgstr "_Slideshow"
-#: ../src/f-spot.glade.h:113
-msgid "_Strip metadata"
-msgstr "_Strip metadata"
-
-#: ../src/f-spot.glade.h:114 ../src/UI.Dialog/ui/EditTagDialog.ui.h:6
+#: ../src/f-spot.glade.h:76 ../src/UI.Dialog/ui/EditTagDialog.ui.h:6
msgid "_Tag Name:"
msgstr "_Tag Name:"
-#: ../src/f-spot.glade.h:115
+#: ../src/f-spot.glade.h:77
msgid "_Tint:"
msgstr "_Tint:"
-#: ../src/f-spot.glade.h:116
+#: ../src/f-spot.glade.h:78
msgid "_Toolbar"
msgstr "_Toolbar"
-#: ../src/f-spot.glade.h:117
-msgid "_URI:"
-msgstr "_URI:"
-
-#: ../src/f-spot.glade.h:118 ../src/ui/main_window.ui.h:75
+#: ../src/f-spot.glade.h:79 ../src/ui/main_window.ui.h:77
msgid "_View"
msgstr "_View"
-#: ../src/f-spot.glade.h:119
-msgid "_Virtual Filesystem"
-msgstr "_Virtual Filesystem"
-
-#: ../src/f-spot.glade.h:120 ../src/Widgets/FindBar.cs:177
+#: ../src/f-spot.glade.h:80 ../src/Widgets/FindBar.cs:177
msgid "and"
msgstr "and"
#. at, or after a date, or between dates
-#: ../src/f-spot.glade.h:122
+#: ../src/f-spot.glade.h:82
msgid ""
"at\n"
"after\n"
@@ -2215,40 +2128,36 @@ msgstr ""
"after\n"
"between"
-#: ../src/f-spot.glade.h:126
-msgid "x"
-msgstr "x"
-
-#: ../src/FullScreenView.cs:58
+#: ../src/FullScreenView.cs:59
msgid "Hide"
msgstr "Hide"
-#: ../src/FullScreenView.cs:60
+#: ../src/FullScreenView.cs:61
msgid "Hide Toolbar"
msgstr "Hide Toolbar"
-#: ../src/FullScreenView.cs:66
+#: ../src/FullScreenView.cs:67
msgid "Info"
msgstr "Info"
-#: ../src/FullScreenView.cs:68 ../src/Widgets/InfoBox.cs:200
+#: ../src/FullScreenView.cs:69 ../src/Widgets/InfoBox.cs:202
msgid "Image Information"
msgstr "Image Information"
-#: ../src/FullScreenView.cs:73
+#: ../src/FullScreenView.cs:74
msgid "Exit fullscreen"
msgstr "Exit fullscreen"
-#: ../src/FullScreenView.cs:81 ../src/MainWindow.cs:307
-#: ../src/SingleView.cs:103
+#: ../src/FullScreenView.cs:82 ../src/MainWindow.cs:322
+#: ../src/SingleView.cs:89
msgid "Slideshow"
msgstr "Slideshow"
-#: ../src/FullScreenView.cs:82
+#: ../src/FullScreenView.cs:83
msgid "Start slideshow"
msgstr "Start slideshow"
-#: ../src/FullScreenView.cs:128
+#: ../src/FullScreenView.cs:129
msgid "Slide transition:"
msgstr "Slide transition: "
@@ -2260,35 +2169,35 @@ msgstr "More dates"
msgid "More"
msgstr "More"
-#: ../src/GroupSelector.cs:517 ../src/ui/main_window.ui.h:34
+#: ../src/GroupSelector.cs:517 ../src/ui/main_window.ui.h:35
msgid "_Clear Date Range"
msgstr "_Clear Date Range"
-#: ../src/Imaging/Exif.cs:228
+#: ../src/Imaging/Exif.cs:229
msgid "Image Directory"
msgstr "Image Directory"
-#: ../src/Imaging/Exif.cs:230
+#: ../src/Imaging/Exif.cs:231
msgid "Thumbnail Directory"
msgstr "Thumbnail Directory"
-#: ../src/Imaging/Exif.cs:232
+#: ../src/Imaging/Exif.cs:233
msgid "Exif Directory"
msgstr "EXIF Directory"
-#: ../src/Imaging/Exif.cs:234
+#: ../src/Imaging/Exif.cs:235
msgid "GPS Directory"
msgstr "GPS Directory"
-#: ../src/Imaging/Exif.cs:236
+#: ../src/Imaging/Exif.cs:237
msgid "InterOperability Directory"
msgstr "InterOperability Directory"
-#: ../src/Imaging/Exif.cs:238
+#: ../src/Imaging/Exif.cs:239
msgid "Unknown Directory"
msgstr "Unknown Directory"
-#: ../src/Imaging/ImageFile.cs:113
+#: ../src/Imaging/ImageFile.cs:119
msgid "Writing to this file format is not supported"
msgstr "Writing to this file format is not supported"
@@ -2426,43 +2335,12 @@ msgstr "Intellectual genre of the object"
msgid "Unknown IIM DataSet"
msgstr "Unknown IIM DataSet"
-#: ../src/ImportCommand.cs:48 ../src/SingleView.cs:359
-msgid "Select Folder"
-msgstr "Select Folder"
-
-#: ../src/ImportCommand.cs:259
-msgid "(No Cameras Detected)"
-msgstr "(No Cameras Detected)"
-
-#: ../src/ImportCommand.cs:404
-#, csharp-format
-msgid "Loading {0} of {1}"
-msgstr "Loading {0} of {1}"
-
-#: ../src/ImportCommand.cs:470
-msgid "Done Loading"
-msgstr "Done Loading"
-
-#: ../src/ImportCommand.cs:684
-msgid "Directory does not exist."
-msgstr "Directory does not exist."
-
-#: ../src/ImportCommand.cs:685
-#, csharp-format
-msgid ""
-"The directory you selected \"{0}\" does not exist. Please choose a "
-"different directory"
-msgstr ""
-"The directory you selected \"{0}\" does not exist. Please choose a "
-"different directory"
-
-#. Note for translators: 'Import Tags' is no command, it means 'Tags used in Import'
-#: ../src/ImportCommand.cs:739 ../src/ImportCommand.cs:741
+#: ../src/Import/ImportController.cs:408 ../src/Import/ImportController.cs:410
#: ../src/XmpTagsImporter.cs:89
-msgid "Import Tags"
-msgstr "Import Tags"
+msgid "Imported Tags"
+msgstr "Imported Tags"
-#: ../src/ItemAction.cs:79 ../src/MainWindow.cs:274 ../src/SingleView.cs:86
+#: ../src/ItemAction.cs:79 ../src/MainWindow.cs:289 ../src/SingleView.cs:72
msgid "Rotate Left"
msgstr "Rotate Left"
@@ -2470,7 +2348,7 @@ msgstr "Rotate Left"
msgid "Rotate picture left"
msgstr "Rotate picture left"
-#: ../src/ItemAction.cs:91 ../src/MainWindow.cs:278 ../src/SingleView.cs:91
+#: ../src/ItemAction.cs:91 ../src/MainWindow.cs:293 ../src/SingleView.cs:77
msgid "Rotate Right"
msgstr "Rotate Right"
@@ -2482,80 +2360,75 @@ msgstr "Rotate picture right"
msgid "Next picture"
msgstr "Next picture"
+#: ../src/ItemAction.cs:123
+msgid "Previous"
+msgstr "Previous"
+
#: ../src/ItemAction.cs:124
msgid "Previous picture"
msgstr "Previous picture"
-#: ../src/MainWindow.cs:269
+#: ../src/MainWindow.cs:282 ../src/UI.Dialog/ImportDialog.cs:171
+msgid "Import"
+msgstr "Import"
+
+#: ../src/MainWindow.cs:284
msgid "Import new images"
msgstr "Import new images"
-#: ../src/MainWindow.cs:285 ../src/ui/main_window.ui.h:3
+#: ../src/MainWindow.cs:300 ../src/ui/main_window.ui.h:3
msgid "Browse"
msgstr "Browse"
-#: ../src/MainWindow.cs:289
+#: ../src/MainWindow.cs:304
msgid "Browse many photos simultaneously"
msgstr "Browse many photos simultaneously"
-#: ../src/MainWindow.cs:293
+#: ../src/MainWindow.cs:308
msgid "Edit Image"
msgstr "Edit Image"
-#: ../src/MainWindow.cs:297
+#: ../src/MainWindow.cs:312
msgid "View and edit a photo"
msgstr "View and edit a photo"
-#: ../src/MainWindow.cs:302 ../src/SingleView.cs:98
+#: ../src/MainWindow.cs:317 ../src/SingleView.cs:84
msgid "Fullscreen"
msgstr "Fullscreen"
-#: ../src/MainWindow.cs:304 ../src/SingleView.cs:100
+#: ../src/MainWindow.cs:319 ../src/SingleView.cs:86
msgid "View photos fullscreen"
msgstr "View photos fullscreen"
-#: ../src/MainWindow.cs:309 ../src/SingleView.cs:105
+#: ../src/MainWindow.cs:324 ../src/SingleView.cs:91
msgid "View photos in a slideshow"
msgstr "View photos in a slideshow"
-#: ../src/MainWindow.cs:324
+#: ../src/MainWindow.cs:339
msgid "Previous photo"
msgstr "Previous photo"
-#: ../src/MainWindow.cs:329
+#: ../src/MainWindow.cs:344
msgid "Next photo"
msgstr "Next photo"
-#: ../src/MainWindow.cs:1488
-msgid "No cameras detected."
-msgstr "No cameras detected."
-
-#: ../src/MainWindow.cs:1489
-msgid ""
-"F-Spot was unable to find any cameras attached to this system. Double check "
-"that the camera is connected and has power"
-msgstr ""
-"F-Spot was unable to find any cameras attached to this system. Double check "
-"that the camera is connected and has power"
-
-#: ../src/MainWindow.cs:1528
-msgid "Error connecting to camera"
-msgstr "Error connecting to camera"
+#: ../src/MainWindow.cs:421
+msgid "Show _Find Bar"
+msgstr "Show _Find Bar"
-#: ../src/MainWindow.cs:1529
-#, csharp-format
-msgid "Received error \"{0}\" while connecting to camera"
-msgstr "Received error \"{0}\" while connecting to camera"
+#: ../src/MainWindow.cs:424
+msgid "Hide _Find Bar"
+msgstr "Hide _Find Bar"
#. Translators, The singular case will never happen here.
-#: ../src/MainWindow.cs:1815
+#: ../src/MainWindow.cs:1740
#, csharp-format
msgid "Merge the selected tag"
msgid_plural "Merge the {0} selected tags?"
msgstr[0] "Merge the selected tag"
msgstr[1] "Merge the {0} selected tags?"
-#: ../src/MainWindow.cs:1842
+#: ../src/MainWindow.cs:1767
msgid ""
"This operation will merge the selected tags and any sub-tags into a single "
"tag."
@@ -2563,77 +2436,77 @@ msgstr ""
"This operation will merge the selected tags and any sub-tags into a single "
"tag."
-#: ../src/MainWindow.cs:1844
+#: ../src/MainWindow.cs:1769
msgid "_Merge Tags"
msgstr "_Merge Tags"
-#: ../src/MainWindow.cs:2049
+#: ../src/MainWindow.cs:1974
#, csharp-format
msgid "{0} Photo out of {1}"
msgid_plural "{0} Photos out of {1}"
msgstr[0] "Photo {0} of {1}"
msgstr[1] "Photos {0} of {1}"
-#: ../src/MainWindow.cs:2051 ../src/SingleView.cs:495
+#: ../src/MainWindow.cs:1976 ../src/SingleView.cs:467
#, csharp-format
msgid "{0} Photo"
msgid_plural "{0} Photos"
msgstr[0] "{0} Photo"
msgstr[1] "{0} Photos"
-#: ../src/MainWindow.cs:2054
+#: ../src/MainWindow.cs:1979
#, csharp-format
msgid " ({0} selected)"
msgid_plural " ({0} selected)"
msgstr[0] " ({0} selected)"
msgstr[1] " ({0} selected)"
-#: ../src/MainWindow.cs:2135
+#: ../src/MainWindow.cs:2060
msgid "_Ok"
msgstr "_Ok"
-#: ../src/MainWindow.cs:2136
+#: ../src/MainWindow.cs:2061
msgid "Error Deleting Picture"
msgstr "Error Deleting Picture"
-#: ../src/MainWindow.cs:2141
+#: ../src/MainWindow.cs:2066
#, csharp-format
msgid "No permission to delete the file:{1}{0}"
msgstr "No permission to delete the file:{1}{0}"
-#: ../src/MainWindow.cs:2145
+#: ../src/MainWindow.cs:2070
#, csharp-format
msgid "An error of type {0} occurred while deleting the file:{2}{1}"
msgstr "An error of type {0} occurred while deleting the file:{2}{1}"
-#: ../src/MainWindow.cs:2177
+#: ../src/MainWindow.cs:2102
#, csharp-format
msgid "Delete the selected photo permanently?"
msgid_plural "Delete the {0} selected photos permanently?"
msgstr[0] "Delete the selected photo permanently?"
msgstr[1] "Delete the {0} selected photos permanently?"
-#: ../src/MainWindow.cs:2181
+#: ../src/MainWindow.cs:2106
msgid "This deletes all versions of the selected photo from your drive."
msgid_plural ""
"This deletes all versions of the selected photos from your drive."
msgstr[0] "This deletes all versions of the selected photo from your drive."
msgstr[1] "This deletes all versions of the selected photos from your drive."
-#: ../src/MainWindow.cs:2184
+#: ../src/MainWindow.cs:2109
msgid "_Delete photo"
msgid_plural "_Delete photos"
msgstr[0] "_Delete photo"
msgstr[1] "_Delete photos"
-#: ../src/MainWindow.cs:2220
+#: ../src/MainWindow.cs:2145
#, csharp-format
msgid "Remove the selected photo from F-Spot?"
msgid_plural "Remove the {0} selected photos from F-Spot?"
msgstr[0] "Remove the selected photo from F-Spot?"
msgstr[1] "Remove the {0} selected photos from F-Spot?"
-#: ../src/MainWindow.cs:2225
+#: ../src/MainWindow.cs:2150
msgid ""
"If you remove photos from the F-Spot catalog all tag information will be "
"lost. The photos remain on your computer and can be imported into F-Spot "
@@ -2643,27 +2516,27 @@ msgstr ""
"lost. The photos remain on your computer and can be imported into F-Spot "
"again."
-#: ../src/MainWindow.cs:2226
+#: ../src/MainWindow.cs:2151
msgid "_Remove from Catalog"
msgstr "_Remove from Catalogue"
-#: ../src/MainWindow.cs:2289
+#: ../src/MainWindow.cs:2220
#, csharp-format
msgid "Delete tag \"{0}\"?"
msgstr "Delete tag \"{0}\"?"
-#: ../src/MainWindow.cs:2291
+#: ../src/MainWindow.cs:2222
#, csharp-format
msgid "Delete the {0} selected tags?"
msgstr "Delete the {0} selected tags?"
-#: ../src/MainWindow.cs:2296
+#: ../src/MainWindow.cs:2227
msgid "photo"
msgid_plural "photos"
msgstr[0] "photo"
msgstr[1] "photos"
-#: ../src/MainWindow.cs:2298
+#: ../src/MainWindow.cs:2229
#, csharp-format
msgid "If you delete this tag, the association with {0} {1} will be lost."
msgid_plural ""
@@ -2672,18 +2545,18 @@ msgstr[0] "If you delete this tag, the association with {0} {1} will be lost."
msgstr[1] ""
"If you delete these tags, the association with {0} {1} will be lost."
-#: ../src/MainWindow.cs:2303
+#: ../src/MainWindow.cs:2234
msgid "_Delete tag"
msgid_plural "_Delete tags"
msgstr[0] "_Delete tag"
msgstr[1] "_Delete tags"
#. A Category is not empty. Can not delete it.
-#: ../src/MainWindow.cs:2317
+#: ../src/MainWindow.cs:2248
msgid "Tag is not empty"
msgstr "Tag is not empty"
-#: ../src/MainWindow.cs:2318
+#: ../src/MainWindow.cs:2249
#, csharp-format
msgid ""
"Can not delete tags that have tags within them. Please delete tags under "
@@ -2692,39 +2565,39 @@ msgstr ""
"Can not delete tags that have tags within them. Please delete tags under "
"\"{0}\" first"
-#: ../src/MainWindow.cs:2750
+#: ../src/MainWindow.cs:2692
msgid "Rotate selected photo left"
msgid_plural "Rotate selected photos left"
msgstr[0] "Rotate selected photo left"
msgstr[1] "Rotate selected photos left"
-#: ../src/MainWindow.cs:2763
+#: ../src/MainWindow.cs:2705
msgid "Rotate selected photo right"
msgid_plural "Rotate selected photos right"
msgstr[0] "Rotate selected photo right"
msgstr[1] "Rotate selected photos right"
-#: ../src/MainWindow.cs:2774
+#: ../src/MainWindow.cs:2716
#, csharp-format
msgid "Find _Selected Tag"
msgid_plural "Find _Selected Tags"
msgstr[0] "Find _Selected Tag"
msgstr[1] "Find _Selected Tags"
-#: ../src/MainWindow.cs:2778
+#: ../src/MainWindow.cs:2720
#, csharp-format
msgid "Find Selected Tag _With"
msgid_plural "Find Selected Tags _With"
msgstr[0] "Find Selected Tag _With"
msgstr[1] "Find Selected Tags _With"
-#: ../src/MainWindow.cs:2819
+#: ../src/MainWindow.cs:2761
msgid "Create New Version?"
msgid_plural "Create New Versions?"
msgstr[0] "Create New Version?"
msgstr[1] "Create New Versions?"
-#: ../src/MainWindow.cs:2821
+#: ../src/MainWindow.cs:2763
#, csharp-format
msgid ""
"Before launching {1}, should F-Spot create a new version of the selected "
@@ -2739,7 +2612,7 @@ msgstr[1] ""
"Before launching {1}, should F-Spot create new versions of the selected "
"photos to preserve the originals?"
-#: ../src/MainWindow.cs:2843
+#: ../src/MainWindow.cs:2785
msgid "XCF version"
msgstr "XCF version"
@@ -2763,93 +2636,99 @@ msgstr "Subject and Keywords"
msgid "Compression"
msgstr "Compression"
-#: ../src/MetadataStore.cs:25
+#. Translators: Planar Configuration is the label for the tiff:PlanarConfiguration tag
+#. "when Planar Configuration=1, this implies that all components must have
+#. the same BitsPerSample value; when Planar Configuration=2, different
+#. components could have different bit depths."
+#: ../src/MetadataStore.cs:29
msgid "Planar Configuration"
msgstr "Planar Configuration"
-#: ../src/MetadataStore.cs:27
+#: ../src/MetadataStore.cs:31
msgid "Orientation"
msgstr "Orientation"
-#: ../src/MetadataStore.cs:29
+#: ../src/MetadataStore.cs:33
msgid "Photometric Interpretation"
msgstr "Photometric Interpretation"
-#: ../src/MetadataStore.cs:31
+#: ../src/MetadataStore.cs:35
msgid "Resolution Unit"
msgstr "Resolution Unit"
-#: ../src/MetadataStore.cs:33
+#: ../src/MetadataStore.cs:37
msgid "Exposure Program"
msgstr "Exposure Program"
-#: ../src/MetadataStore.cs:35
+#: ../src/MetadataStore.cs:39
msgid "Metering Mode"
msgstr "Metering Mode"
-#: ../src/MetadataStore.cs:37
+#: ../src/MetadataStore.cs:41
msgid "Exposure Mode"
msgstr "Exposure Mode"
-#: ../src/MetadataStore.cs:39
+#: ../src/MetadataStore.cs:43
msgid "Custom Rendered"
msgstr "Custom Rendered"
-#: ../src/MetadataStore.cs:41
+#: ../src/MetadataStore.cs:45
msgid "Components Configuration"
msgstr "Components Configuration"
-#: ../src/MetadataStore.cs:43
+#: ../src/MetadataStore.cs:47
msgid "Light Source"
msgstr "Light Source"
-#: ../src/MetadataStore.cs:45
+#: ../src/MetadataStore.cs:49
msgid "Sensing Method"
msgstr "Sensing Method"
-#: ../src/MetadataStore.cs:47
+#: ../src/MetadataStore.cs:51
msgid "Color Space"
msgstr "Colour Space"
-#: ../src/MetadataStore.cs:49
+#: ../src/MetadataStore.cs:53
msgid "White Balance"
msgstr "White Balance"
-#: ../src/MetadataStore.cs:51
+#: ../src/MetadataStore.cs:55
msgid "Focal Plane Resolution Unit"
msgstr "Focal Plane Resolution Unit"
-#: ../src/MetadataStore.cs:53
+#: ../src/MetadataStore.cs:57
msgid "File Source Type"
msgstr "File Source Type"
-#: ../src/MetadataStore.cs:55
+#: ../src/MetadataStore.cs:59
msgid "Scene Capture Type"
msgstr "Scene Capture Type"
-#: ../src/MetadataStore.cs:57
+#. Translators: Gain Control is the label for the exif:GainControl tag
+#. "This tag indicates the degree of overall image gain adjustment."
+#: ../src/MetadataStore.cs:63
msgid "Gain Control"
msgstr "Gain Control"
-#: ../src/MetadataStore.cs:59
+#: ../src/MetadataStore.cs:65
msgid "Contrast"
msgstr "Contrast"
-#: ../src/MetadataStore.cs:61
+#: ../src/MetadataStore.cs:67
msgid "Saturation"
msgstr "Saturation"
-#: ../src/MetadataStore.cs:63
+#: ../src/MetadataStore.cs:69
msgid "Sharpness"
msgstr "Sharpness"
-#: ../src/MetadataStore.cs:65
+#: ../src/MetadataStore.cs:71
msgid "Scene Type"
msgstr "Scene Type"
#. Fixme this should really set parent menu
#. items insensitve
-#: ../src/PhotoTagMenu.cs:74
+#: ../src/PhotoTagMenu.cs:62
msgid "(No Tags)"
msgstr "(No Tags)"
@@ -2869,70 +2748,70 @@ msgstr "Rename Version"
msgid "New name:"
msgstr "New name:"
-#: ../src/PhotoVersionCommands.cs:110
-msgid "Could not create a new version"
-msgstr "Could not create a new version"
-
-#: ../src/PhotoVersionCommands.cs:111
-#, csharp-format
-msgid "Received exception \"{0}\". Unable to create version \"{1}\""
-msgstr "Received exception \"{0}\". Unable to create version \"{1}\""
-
-#: ../src/PhotoVersionCommands.cs:138
-msgid "Really Delete?"
-msgstr "Really Delete?"
-
-#: ../src/PhotoVersionCommands.cs:139
-msgid "Cancel"
-msgstr "Cancel"
-
-#: ../src/PhotoVersionCommands.cs:140
+#: ../src/PhotoVersionCommands.cs:123
msgid "Delete"
msgstr "Delete"
-#: ../src/PhotoVersionCommands.cs:144
+#: ../src/PhotoVersionCommands.cs:124
#, csharp-format
msgid "Really delete version \"{0}\"?"
msgstr "Really delete version \"{0}\"?"
-#: ../src/PhotoVersionCommands.cs:154
-msgid "Could not delete a version"
-msgstr "Could not delete a version"
+#: ../src/PhotoVersionCommands.cs:125
+msgid "This removes the version and deletes the corresponding file from disk."
+msgstr "This removes the version and deletes the corresponding file from disk."
-#: ../src/PhotoVersionCommands.cs:155
+#: ../src/PhotoVersionCommands.cs:170
+msgid "De_tach"
+msgstr "De_tach"
+
+#: ../src/PhotoVersionCommands.cs:171
#, csharp-format
-msgid "Received exception \"{0}\". Unable to delete version \"{1}\""
-msgstr "Received exception \"{0}\". Unable to delete version \"{1}\""
+msgid "Really detach version \"{0}\" from \"{1}\"?"
+msgstr "Really detach version \"{0}\" from \"{1}\"?"
+
+#: ../src/PhotoVersionCommands.cs:172
+msgid ""
+"This makes the version appear as a separate photo in the library. To undo, "
+"drag the new photo back to its parent."
+msgstr ""
+"This makes the version appear as a separate photo in the library. To undo, "
+"drag the new photo back to its parent."
+
+#: ../src/PhotoVersionCommands.cs:195
+msgid "Re_parent"
+msgstr "Re_parent"
#: ../src/PhotoVersionCommands.cs:196
-msgid "Could not rename a version"
-msgstr "Could not rename a version"
+#, csharp-format
+msgid "Really reparent \"{0}\" as version of \"{1}\"?"
+msgid_plural "Really reparent {2} photos as versions of \"{1}\"?"
+msgstr[0] "Really reparent \"{0}\" as version of \"{1}\"?"
+msgstr[1] "Really reparent {2} photos as versions of \"{1}\"?"
+
+#: ../src/PhotoVersionCommands.cs:199
+msgid ""
+"This makes the photos appear as a single one in the library. The versions "
+"can be detached using the Photo menu."
+msgstr ""
+"This makes the photos appear as a single one in the library. The versions "
+"can be detached using the Photo menu."
-#: ../src/PhotoVersionCommands.cs:197
+#: ../src/PhotoVersionCommands.cs:239
#, csharp-format
-msgid "Received exception \"{0}\". Unable to rename version to \"{1}\""
-msgstr "Received exception \"{0}\". Unable to rename version to \"{1}\""
+msgid "Received exception \"{0}\"."
+msgstr "Received exception \"{0}\"."
-#: ../src/PhotoVersionMenu.cs:66 ../src/Widgets/InfoBox.cs:554
-#: ../src/Widgets/InfoBox.cs:556
+#: ../src/PhotoVersionMenu.cs:66 ../src/Widgets/InfoBox.cs:566
+#: ../src/Widgets/InfoBox.cs:568
msgid "(No Edits)"
msgstr "(No Edits)"
-#: ../src/PhotoView.cs:169 ../src/UI.Dialog/EditExceptionDialog.cs:38
-msgid "Error editing photo"
-msgstr "Error editing photo"
-
-#: ../src/PhotoView.cs:170 ../src/Sharpener.cs:73
-#: ../src/UI.Dialog/EditExceptionDialog.cs:25
-#, csharp-format
-msgid "Received exception \"{0}\". Unable to save photo {1}"
-msgstr "Received exception \"{0}\". Unable to save photo {1}"
-
-#: ../src/PhotoView.cs:359
+#: ../src/PhotoView.cs:339
msgid "Comment:"
msgstr "Comment:"
-#: ../src/Preferences.cs:149
+#: ../src/Preferences.cs:152
msgid "Photos"
msgstr "Photos"
@@ -2969,43 +2848,35 @@ msgstr "Refresh search"
msgid "No matching photos found"
msgstr "No matching photos found"
-#: ../src/QueryWidget.cs:155
-msgid "Hide _Find Bar"
-msgstr "Hide _Find Bar"
-
-#: ../src/QueryWidget.cs:161
-msgid "Show _Find Bar"
-msgstr "Show _Find Bar"
-
-#: ../src/RotateCommand.cs:96 ../src/RotateCommand.cs:111
+#: ../src/RotateCommand.cs:87 ../src/RotateCommand.cs:102
msgid "Unable to rotate this type of photo"
msgstr "Unable to rotate this type of photo"
-#: ../src/RotateCommand.cs:131
+#: ../src/RotateCommand.cs:122
msgid "Unable to rotate readonly file"
msgstr "Unable to rotate read-only file"
-#: ../src/RotateCommand.cs:198
+#: ../src/RotateCommand.cs:185
msgid "Rotating photos"
msgstr "Rotating photos"
-#: ../src/RotateCommand.cs:209
+#: ../src/RotateCommand.cs:196
#, csharp-format
msgid "Rotating photo \"{0}\""
msgstr "Rotating photo \"{0}\""
-#: ../src/RotateCommand.cs:222
+#: ../src/RotateCommand.cs:209
msgid "Directory not found"
msgstr "Directory not found"
-#: ../src/RotateCommand.cs:242
+#: ../src/RotateCommand.cs:229
#, csharp-format
msgid "Unable to rotate photo"
msgid_plural "Unable to rotate {0} photos"
msgstr[0] "Unable to rotate photo"
msgstr[1] "Unable to rotate {0} photos"
-#: ../src/RotateCommand.cs:244
+#: ../src/RotateCommand.cs:231
#, csharp-format
msgid ""
"The photo could not be rotated because it is on a read only file system or "
@@ -3020,42 +2891,47 @@ msgstr[1] ""
"{0} photos could not be rotated because they are on a read-only file system "
"or media such as a CD-ROM. Please check the permissions and try again."
-#: ../src/RotateCommand.cs:271
+#: ../src/RotateCommand.cs:258
#, csharp-format
msgid "Received error \"{0}\" while attempting to rotate {1}"
msgstr "Received error \"{0}\" while attempting to rotate {1}"
-#: ../src/RotateCommand.cs:276
+#: ../src/RotateCommand.cs:263
msgid "Error while rotating photo."
msgstr "Error while rotating photo."
-#: ../src/SendEmail.cs:240
+#: ../src/SendEmail.cs:214
msgid "Preparing email"
msgstr "Preparing e-mail"
-#: ../src/SendEmail.cs:292
+#: ../src/SendEmail.cs:266
#, csharp-format
msgid "Exporting picture \"{0}\""
msgstr "Exporting picture \"{0}\""
-#: ../src/SendEmail.cs:314
+#: ../src/SendEmail.cs:288
msgid "Error processing image"
msgstr "Error processing image"
-#: ../src/SendEmail.cs:315
+#: ../src/SendEmail.cs:289
#, csharp-format
msgid "An error occured while processing \"{0}\": {1}"
msgstr "An error occurred while processing \"{0}\": {1}"
#. Send the mail :)
-#: ../src/SendEmail.cs:330
-msgid "my photos"
-msgstr "my photos"
+#: ../src/SendEmail.cs:303
+msgid "My Photos"
+msgstr "My Photos"
#: ../src/Sharpener.cs:72
msgid "Error saving sharpened photo"
msgstr "Error saving sharpened photo"
+#: ../src/Sharpener.cs:73 ../src/UI.Dialog/EditExceptionDialog.cs:26
+#, csharp-format
+msgid "Received exception \"{0}\". Unable to save photo {1}"
+msgstr "Received exception \"{0}\". Unable to save photo {1}"
+
#: ../src/Sharpener.cs:102
msgid "Sharpen"
msgstr "Sharpen"
@@ -3072,36 +2948,40 @@ msgstr "Radius:"
msgid "Threshold:"
msgstr "Threshold:"
-#: ../src/SingleView.cs:88
+#: ../src/SingleView.cs:74
msgid "Rotate photo left"
msgstr "Rotate photo left"
-#: ../src/SingleView.cs:93
+#: ../src/SingleView.cs:79
msgid "Rotate photo right"
msgstr "Rotate photo right"
-#: ../src/SingleView.cs:130
+#: ../src/SingleView.cs:116
msgid "Folder"
msgstr "Folder"
-#: ../src/SingleView.cs:356
+#: ../src/SingleView.cs:341
msgid "Open"
msgstr "Open"
-#: ../src/SingleView.cs:456
+#: ../src/SingleView.cs:344
+msgid "Select Folder"
+msgstr "Select Folder"
+
+#: ../src/SingleView.cs:428
msgid "Set as Background"
msgstr "Set as Background"
-#: ../src/TagCommands.cs:96 ../src/TagSelectionWidget.cs:498
+#: ../src/TagCommands.cs:97 ../src/TagSelectionWidget.cs:491
#: ../src/UI.Dialog/EditTagDialog.cs:78
msgid "This name is already in use"
msgstr "This name is already in use"
-#: ../src/TagCommands.cs:144
+#: ../src/TagCommands.cs:145
msgid "Create New Tag"
msgstr "Create New Tag"
-#: ../src/TagCommands.cs:145
+#: ../src/TagCommands.cs:146
msgid "Name of New Tag:"
msgstr "Name of New Tag:"
@@ -3112,13 +2992,13 @@ msgid_plural "Find"
msgstr[0] "Find"
msgstr[1] "Find"
-#: ../src/TagPopup.cs:36 ../src/Widgets/TagMenu.cs:91
+#: ../src/TagPopup.cs:36 ../src/Widgets/TagMenu.cs:98
msgid "Create New Tag..."
msgstr "Create New Tag…"
#: ../src/TagPopup.cs:42
-msgid "Edit Selected Tag..."
-msgstr "Edit Selected Tag…"
+msgid "Edit Tag..."
+msgstr "Edit Tag…"
#: ../src/TagPopup.cs:46
msgid "Delete Tag"
@@ -3176,32 +3056,32 @@ msgstr "Not {0}"
msgid "Drag tags here to search for them"
msgstr "Drag tags here to search for them"
-#: ../src/TagSelectionWidget.cs:497
+#: ../src/TagSelectionWidget.cs:490
msgid "Error renaming tag"
msgstr "Error renaming tag"
-#: ../src/TagStore.cs:203
+#: ../src/TagStore.cs:204
msgid "Favorites"
msgstr "Favourites"
-#: ../src/TagStore.cs:208
+#: ../src/TagStore.cs:209
msgid "Hidden"
msgstr "Hidden"
-#: ../src/TagStore.cs:216
+#: ../src/TagStore.cs:217
msgid "People"
msgstr "People"
-#: ../src/TagStore.cs:221
+#: ../src/TagStore.cs:222
msgid "Places"
msgstr "Places"
-#: ../src/TagStore.cs:226
+#: ../src/TagStore.cs:227
msgid "Events"
msgstr "Events"
#. The label for the root category is used in new and edit tag dialogs
-#: ../src/TagStore.cs:239 ../src/Widgets/InfoBox.cs:400
+#: ../src/TagStore.cs:240 ../src/Widgets/InfoBox.cs:410
msgid "(None)"
msgstr "(None)"
@@ -3225,35 +3105,37 @@ msgstr " or "
msgid "or"
msgstr "or"
-#: ../src/ThumbnailCommand.cs:20
+#: ../src/ThumbnailCommand.cs:21
msgid "Updating Thumbnails"
msgstr "Updating Thumbnails"
-#: ../src/ThumbnailCommand.cs:28
+#: ../src/ThumbnailCommand.cs:29
#, csharp-format
msgid "Updating picture \"{0}\""
msgstr "Updating picture \"{0}\""
-#: ../src/UI.Dialog/AboutDialog.cs:71
+#: ../src/UI.Dialog/AboutDialog.cs:77
msgid "Photo management for GNOME"
msgstr "Photo management for GNOME"
-#: ../src/UI.Dialog/AboutDialog.cs:72
-msgid "Copyright © 2003-2009 Novell Inc."
-msgstr "Copyright © 2003–2009 Novell Inc."
+#: ../src/UI.Dialog/AboutDialog.cs:78
+msgid "Copyright © 2003-2010 Novell Inc."
+msgstr "Copyright © 2003-2010 Novell Inc."
-#: ../src/UI.Dialog/AboutDialog.cs:95
+#: ../src/UI.Dialog/AboutDialog.cs:101
msgid "translator-credits"
msgstr ""
"Dean Sas <dean at deansas.org>\n"
"James Ogley <james at usr-local-bin.org>\n"
-"Jen Ockwell <jenfraggleubuntu at gmail.com>"
+"Jen Ockwell <jenfraggleubuntu at gmail.com>\n"
+"Philip Withnall <philip at tecnocode.co.uk>\n"
+"Bruce Cowan <bruce at bcowan.me.uk>"
-#: ../src/UI.Dialog/AboutDialog.cs:100
+#: ../src/UI.Dialog/AboutDialog.cs:106
msgid "F-Spot Website"
msgstr "F-Spot Website"
-#: ../src/UI.Dialog/AdjustTimeDialog.cs:112
+#: ../src/UI.Dialog/AdjustTimeDialog.cs:113
#: ../src/UI.Dialog/ui/AdjustTimeDialog.ui.h:10
#, csharp-format
msgid "Shift all photos by {0}"
@@ -3295,16 +3177,20 @@ msgstr "Previous Week (Mon-Sun)"
msgid "Customized Range"
msgstr "Customised Range"
-#: ../src/UI.Dialog/EditTagIconDialog.cs:46
+#: ../src/UI.Dialog/EditExceptionDialog.cs:39
+msgid "Error editing photo"
+msgstr "Error editing photo"
+
+#: ../src/UI.Dialog/EditTagIconDialog.cs:47
#, csharp-format
msgid "Edit Icon for Tag {0}"
msgstr "Edit Icon for Tag {0}"
-#: ../src/UI.Dialog/EditTagIconDialog.cs:68
+#: ../src/UI.Dialog/EditTagIconDialog.cs:69
msgid "Select Photo from file"
msgstr "Select Photo from file"
-#: ../src/UI.Dialog/EditTagIconDialog.cs:90
+#: ../src/UI.Dialog/EditTagIconDialog.cs:91
#, csharp-format
msgid ""
"\n"
@@ -3321,16 +3207,16 @@ msgstr ""
" with this tag. Please tag a photo as '{0}' and return here\n"
" to use it as an icon."
-#: ../src/UI.Dialog/EditTagIconDialog.cs:168
+#: ../src/UI.Dialog/EditTagIconDialog.cs:169
msgid "Unable to load image"
msgstr "Unable to load image"
-#: ../src/UI.Dialog/EditTagIconDialog.cs:169
+#: ../src/UI.Dialog/EditTagIconDialog.cs:170
#, csharp-format
msgid "Unable to load \"{0}\" as icon for the tag"
msgstr "Unable to load \"{0}\" as icon for the tag"
-#: ../src/UI.Dialog/EditTagIconDialog.cs:207
+#: ../src/UI.Dialog/EditTagIconDialog.cs:208
#, csharp-format
msgid "Photo {0} of {1}"
msgstr "Photo {0} of {1}"
@@ -3347,24 +3233,50 @@ msgstr "Error Details"
msgid "An unhandled exception was thrown: "
msgstr "An unhandled exception was thrown: "
-#: ../src/UI.Dialog/PreferenceDialog.cs:53
-#: ../src/UI.Dialog/PreferenceDialog.cs:71
+#: ../src/UI.Dialog/ImportDialog.cs:15
+msgid "Choose Folder..."
+msgstr "Choose Folder…"
+
+#: ../src/UI.Dialog/ImportDialog.cs:124
+msgid "Choose Import source..."
+msgstr "Choose Import source…"
+
+#: ../src/UI.Dialog/ImportDialog.cs:136
+msgid "(No Cameras Detected)"
+msgstr "(No Cameras Detected)"
+
+#: ../src/UI.Dialog/ImportDialog.cs:264
+#, csharp-format
+msgid "Importing Photos: {0} of {1}..."
+msgstr "Importing Photos: {0} of {1}…"
+
+#: ../src/UI.Dialog/ImportDialog.cs:288
+msgid "Importing photos..."
+msgstr "Importing photos…"
+
+#. TODO: Using a GtkSpinner would be nicer here.
+#: ../src/UI.Dialog/ImportDialog.cs:295
+msgid "Searching for photos... (You can already click Import to continue)"
+msgstr "Searching for photos… (You can already click Import to continue)"
+
+#: ../src/UI.Dialog/PreferenceDialog.cs:55
+#: ../src/UI.Dialog/PreferenceDialog.cs:78
msgid "None"
msgstr "None"
-#: ../src/UI.Dialog/PreferenceDialog.cs:55
+#: ../src/UI.Dialog/PreferenceDialog.cs:57
msgid "System profile"
msgstr "System profile"
-#: ../src/UI.Dialog/PreferenceDialog.cs:84
+#: ../src/UI.Dialog/PreferenceDialog.cs:95
msgid "Standard theme"
msgstr "Standard theme"
-#: ../src/UI.Dialog/RepairDbDialog.cs:20
+#: ../src/UI.Dialog/RepairDbDialog.cs:21
msgid "Error loading database."
msgstr "Error loading database."
-#: ../src/UI.Dialog/RepairDbDialog.cs:21
+#: ../src/UI.Dialog/RepairDbDialog.cs:22
#, csharp-format
msgid ""
"F-Spot encountered an error while loading the photo database. The old "
@@ -3373,15 +3285,15 @@ msgstr ""
"F-Spot encountered an error while loading the photo database. The old "
"database has be moved to {0} and a new database has been created."
-#: ../src/UI.Dialog/SelectionRatioDialog.cs:60
+#: ../src/UI.Dialog/SelectionRatioDialog.cs:61
msgid "Label"
msgstr "Label"
-#: ../src/UI.Dialog/SelectionRatioDialog.cs:64
+#: ../src/UI.Dialog/SelectionRatioDialog.cs:65
msgid "Ratio"
msgstr "Ratio"
-#: ../src/UI.Dialog/ThreadProgressDialog.cs:49
+#: ../src/UI.Dialog/ThreadProgressDialog.cs:55
msgid "Retry"
msgstr "Retry"
@@ -3574,8 +3486,8 @@ msgid "By _Rating"
msgstr "By _Rating"
#: ../src/ui/main_window.ui.h:7
-msgid "Copy Locat_ion"
-msgstr "Copy Locat_ion"
+msgid "Copy"
+msgstr "Copy"
#: ../src/ui/main_window.ui.h:8
msgid "Create New _Tag..."
@@ -3586,190 +3498,202 @@ msgid "Create _New Version..."
msgstr "Create _New Version…"
#: ../src/ui/main_window.ui.h:10
-msgid "F-Spot"
-msgstr "F-Spot"
+msgid "De_tach Version"
+msgstr "De_tach Version"
-#: ../src/ui/main_window.ui.h:11
+#: ../src/ui/main_window.ui.h:12
msgid "Fin_d"
msgstr "Fin_d"
-#: ../src/ui/main_window.ui.h:12
+#: ../src/ui/main_window.ui.h:13
msgid "Manage _Extensions"
msgstr "Manage _Extensions"
-#: ../src/ui/main_window.ui.h:13
+#: ../src/ui/main_window.ui.h:14
msgid "Page Set_up..."
msgstr "Page Set_up…"
-#: ../src/ui/main_window.ui.h:14
+#: ../src/ui/main_window.ui.h:15
msgid "Re_fresh Thumbnail"
msgstr "Re_fresh Thumbnail"
#: ../src/ui/main_window.ui.h:19
+msgid "Select _All"
+msgstr "Select _All"
+
+#: ../src/ui/main_window.ui.h:20
msgid "Select _None"
msgstr "Select _None"
-#: ../src/ui/main_window.ui.h:20
+#: ../src/ui/main_window.ui.h:21
msgid "Send by _Mail..."
msgstr "Send by _Mail…"
-#: ../src/ui/main_window.ui.h:22
+#: ../src/ui/main_window.ui.h:23
msgid "Side_bar"
msgstr "Side_bar"
-#: ../src/ui/main_window.ui.h:23
+#: ../src/ui/main_window.ui.h:24
msgid "T_ags"
msgstr "T_ags"
-#: ../src/ui/main_window.ui.h:25
+#: ../src/ui/main_window.ui.h:26
msgid "Thumbnail _elements"
msgstr "Thumbnail _elements"
-#: ../src/ui/main_window.ui.h:26
+#: ../src/ui/main_window.ui.h:27
msgid "Too_lbar"
msgstr "Too_lbar"
-#: ../src/ui/main_window.ui.h:27
+#: ../src/ui/main_window.ui.h:28
msgid "View"
msgstr "View"
#: ../src/ui/main_window.ui.h:33
+msgid "_Attach Tag"
+msgstr "_Attach Tag"
+
+#: ../src/ui/main_window.ui.h:34
msgid "_Attach Tag to Selection"
msgstr "_Attach Tag to Selection"
-#: ../src/ui/main_window.ui.h:35
+#: ../src/ui/main_window.ui.h:36
msgid "_Clear Rating Filter"
msgstr "_Clear Rating Filter"
-#: ../src/ui/main_window.ui.h:36
+#: ../src/ui/main_window.ui.h:37
msgid "_Clear Roll Filter"
msgstr "_Clear Roll Filter"
-#: ../src/ui/main_window.ui.h:38
+#: ../src/ui/main_window.ui.h:39
msgid "_Components"
msgstr "_Components"
-#: ../src/ui/main_window.ui.h:39
+#: ../src/ui/main_window.ui.h:40
msgid "_Contents"
msgstr "_Contents"
-#: ../src/ui/main_window.ui.h:40
+#: ../src/ui/main_window.ui.h:41
msgid "_Dates"
msgstr "_Dates"
-#: ../src/ui/main_window.ui.h:42
+#: ../src/ui/main_window.ui.h:43
msgid "_Delete Selected Tag"
msgstr "_Delete Selected Tag"
-#: ../src/ui/main_window.ui.h:43
+#: ../src/ui/main_window.ui.h:44
msgid "_Delete Version"
msgstr "_Delete Version"
-#: ../src/ui/main_window.ui.h:45
-msgid "_Edit Selected Tag..."
-msgstr "_Edit Selected Tag…"
-
#: ../src/ui/main_window.ui.h:46
+msgid "_Edit Tag..."
+msgstr "_Edit Tag…"
+
+#: ../src/ui/main_window.ui.h:47
msgid "_Export to"
msgstr "_Export to"
-#: ../src/ui/main_window.ui.h:47
+#: ../src/ui/main_window.ui.h:48
msgid "_Filmstrip"
msgstr "_Filmstrip"
-#: ../src/ui/main_window.ui.h:50
+#: ../src/ui/main_window.ui.h:51
msgid "_Hidden"
msgstr "_Hidden"
-#: ../src/ui/main_window.ui.h:51
+#: ../src/ui/main_window.ui.h:52
msgid "_Import..."
msgstr "_Import…"
-#: ../src/ui/main_window.ui.h:52
+#: ../src/ui/main_window.ui.h:53
+msgid "_Invert Selection"
+msgstr "_Invert Selection"
+
+#: ../src/ui/main_window.ui.h:54
msgid "_Large"
msgstr "_Large"
-#: ../src/ui/main_window.ui.h:53
+#: ../src/ui/main_window.ui.h:55
msgid "_Last Import Roll"
msgstr "_Last Import Roll"
-#: ../src/ui/main_window.ui.h:54
+#: ../src/ui/main_window.ui.h:56
msgid "_Loupe"
msgstr "_Loupe"
-#: ../src/ui/main_window.ui.h:55
+#: ../src/ui/main_window.ui.h:57
msgid "_Medium"
msgstr "_Medium"
-#: ../src/ui/main_window.ui.h:57
+#: ../src/ui/main_window.ui.h:59
msgid "_Quit"
msgstr "_Quit"
-#: ../src/ui/main_window.ui.h:58
+#: ../src/ui/main_window.ui.h:60
msgid "_Ratings"
msgstr "_Ratings"
-#: ../src/ui/main_window.ui.h:60
+#: ../src/ui/main_window.ui.h:62
msgid "_Remove Tag From Selection"
msgstr "_Remove Tag from Selection"
-#: ../src/ui/main_window.ui.h:61
+#: ../src/ui/main_window.ui.h:63
msgid "_Rename Version"
msgstr "_Rename Version"
-#: ../src/ui/main_window.ui.h:62
+#: ../src/ui/main_window.ui.h:64
msgid "_Reverse Order"
msgstr "_Reverse Order"
-#: ../src/ui/main_window.ui.h:63
+#: ../src/ui/main_window.ui.h:65
msgid "_Select Import Rolls..."
msgstr "_Select Import Rolls…"
-#: ../src/ui/main_window.ui.h:64
+#: ../src/ui/main_window.ui.h:66
msgid "_Set Date Range..."
msgstr "_Set Date Range…"
-#: ../src/ui/main_window.ui.h:65
+#: ../src/ui/main_window.ui.h:67
msgid "_Set Rating filter..."
msgstr "_Set Rating filter…"
-#: ../src/ui/main_window.ui.h:66
+#: ../src/ui/main_window.ui.h:68
msgid "_Sharpen..."
msgstr "_Sharpen…"
-#: ../src/ui/main_window.ui.h:68
+#: ../src/ui/main_window.ui.h:70
msgid "_Small"
msgstr "_Small"
-#: ../src/ui/main_window.ui.h:69
+#: ../src/ui/main_window.ui.h:71
msgid "_Tag Icons"
msgstr "_Tag Icons"
-#: ../src/ui/main_window.ui.h:70
+#: ../src/ui/main_window.ui.h:72
msgid "_Tags"
msgstr "_Tags"
-#: ../src/ui/main_window.ui.h:71
+#: ../src/ui/main_window.ui.h:73
msgid "_Timeline"
msgstr "_Timeline"
-#: ../src/ui/main_window.ui.h:72
+#: ../src/ui/main_window.ui.h:74
msgid "_Tools"
msgstr "_Tools"
-#: ../src/ui/main_window.ui.h:73
+#: ../src/ui/main_window.ui.h:75
msgid "_Untagged Photos"
msgstr "_Untagged Photos"
-#: ../src/ui/main_window.ui.h:74
+#: ../src/ui/main_window.ui.h:76
msgid "_Version"
msgstr "_Version"
-#: ../src/Updater.cs:616
+#: ../src/Updater.cs:638
msgid "Updating F-Spot Database"
msgstr "Updating F-Spot Database"
-#: ../src/Updater.cs:617
+#: ../src/Updater.cs:639
msgid ""
"Please wait while your F-Spot gallery's database is updated. This may take "
"some time."
@@ -3778,7 +3702,7 @@ msgstr ""
"some time."
#. Mono.Unix.Error error = Mono.Unix.Stdlib.GetLastError ();
-#: ../src/Utils/Unix.cs:35
+#: ../src/Utils/Unix.cs:36
msgid "Unable to create temporary file"
msgstr "Unable to create temporary file"
@@ -3862,11 +3786,11 @@ msgstr "Print photo tags"
msgid "Print photo comment"
msgstr "Print photo comment"
-#: ../src/Widgets/EditorPage.cs:29 ../src/Widgets/Sidebar.cs:62
+#: ../src/Widgets/EditorPage.cs:31 ../src/Widgets/Sidebar.cs:54
msgid "Edit"
msgstr "Edit"
-#: ../src/Widgets/EditorPage.cs:197
+#: ../src/Widgets/EditorPage.cs:199
msgid ""
"This tool requires an active selection. Please select a region of the photo "
"and try the operation again"
@@ -3874,13 +3798,13 @@ msgstr ""
"This tool requires an active selection. Please select a region of the photo "
"and try the operation again"
-#: ../src/Widgets/EditorPage.cs:215
+#: ../src/Widgets/EditorPage.cs:217
msgid "Error saving adjusted photo"
msgid_plural "Error saving adjusted photos"
msgstr[0] "Error saving adjusted photo"
msgstr[1] "Error saving adjusted photos"
-#: ../src/Widgets/EditorPage.cs:217
+#: ../src/Widgets/EditorPage.cs:219
#, csharp-format
msgid ""
"Received exception \"{0}\". Note that you have to develop RAW files into "
@@ -3889,11 +3813,11 @@ msgstr ""
"Received exception \"{0}\". Note that you have to develop RAW files into "
"JPEG before you can edit them."
-#: ../src/Widgets/Filmstrip.cs:572
+#: ../src/Widgets/Filmstrip.cs:573
msgid "_Horizontal"
msgstr "_Horizontal"
-#: ../src/Widgets/Filmstrip.cs:576
+#: ../src/Widgets/Filmstrip.cs:577
msgid "_Vertical"
msgstr "_Vertical"
@@ -3901,65 +3825,74 @@ msgstr "_Vertical"
msgid "Find:"
msgstr "Find:"
-#: ../src/Widgets/FolderTreePage.cs:21
+#: ../src/Widgets/FolderTreePage.cs:22
msgid "Folders"
msgstr "Folders"
-#: ../src/Widgets/FolderTreeView.cs:123
+#: ../src/Widgets/FolderTreeView.cs:124
msgid "Filesystem"
msgstr "Filesystem"
-#: ../src/Widgets/InfoBox.cs:182
+#: ../src/Widgets/InfoBox.cs:183
msgid "Histogram"
msgstr "Histogram"
-#: ../src/Widgets/InfoBox.cs:217
+#: ../src/Widgets/InfoBox.cs:216
+msgid "Version"
+msgstr "Version"
+
+#: ../src/Widgets/InfoBox.cs:219
msgid "Date"
msgstr "Date"
-#: ../src/Widgets/InfoBox.cs:223
+#: ../src/Widgets/InfoBox.cs:225
msgid "Exposure"
msgstr "Exposure"
-#: ../src/Widgets/InfoBox.cs:227
+#: ../src/Widgets/InfoBox.cs:229
msgid "Focal Length"
msgstr "Focal Length"
-#: ../src/Widgets/InfoBox.cs:233
+#: ../src/Widgets/InfoBox.cs:232
+msgid "Camera"
+msgstr "Camera"
+
+#: ../src/Widgets/InfoBox.cs:235
msgid "File Size"
msgstr "File Size"
-#: ../src/Widgets/InfoBox.cs:236
+#: ../src/Widgets/InfoBox.cs:238
msgid "Rating"
msgstr "Rating"
-#: ../src/Widgets/InfoBox.cs:409 ../src/Widgets/InfoBox.cs:432
-#: ../src/Widgets/InfoBox.cs:442 ../src/Widgets/InfoBox.cs:451
-msgid "(Unknown)"
-msgstr "(Unknown)"
-
-#: ../src/Widgets/InfoBox.cs:419
+#: ../src/Widgets/InfoBox.cs:391 ../src/Widgets/InfoBox.cs:399
+#: ../src/Widgets/InfoBox.cs:429
msgid "(wrong format)"
msgstr "(wrong format)"
-#: ../src/Widgets/InfoBox.cs:552
+#: ../src/Widgets/InfoBox.cs:419 ../src/Widgets/InfoBox.cs:442
+#: ../src/Widgets/InfoBox.cs:452 ../src/Widgets/InfoBox.cs:461
+msgid "(Unknown)"
+msgstr "(Unknown)"
+
+#: ../src/Widgets/InfoBox.cs:564
#, csharp-format
msgid "(One Edit)"
msgid_plural "({0} Edits)"
msgstr[0] "(One Edit)"
msgstr[1] "({0} Edits)"
-#: ../src/Widgets/InfoBox.cs:566
+#: ../src/Widgets/InfoBox.cs:578
msgid "(File read error)"
msgstr "(File read error)"
-#: ../src/Widgets/InfoBox.cs:611
+#: ../src/Widgets/InfoBox.cs:623
#, csharp-format
msgid "{0} Photos"
msgstr "{0} Photos"
#. Note for translators: {0} is a date, {1} and {2} are times.
-#: ../src/Widgets/InfoBox.cs:631
+#: ../src/Widgets/InfoBox.cs:643
#, csharp-format
msgid ""
"On {0} between \n"
@@ -3968,7 +3901,7 @@ msgstr ""
"On {0} between \n"
"{1} and {2}"
-#: ../src/Widgets/InfoBox.cs:636
+#: ../src/Widgets/InfoBox.cs:648
#, csharp-format
msgid ""
"Between {0} \n"
@@ -3977,61 +3910,61 @@ msgstr ""
"Between {0} \n"
"and {1}"
-#: ../src/Widgets/InfoBox.cs:663
+#: ../src/Widgets/InfoBox.cs:675
msgid "(At least one File not found)"
msgstr "(At least one File not found)"
-#: ../src/Widgets/InfoBox.cs:780
+#: ../src/Widgets/InfoBox.cs:792
msgid "Show Photo Name"
msgstr "Show Photo Name"
-#: ../src/Widgets/InfoBox.cs:789
+#: ../src/Widgets/InfoBox.cs:801
msgid "Show Date"
msgstr "Show Date"
-#: ../src/Widgets/InfoBox.cs:798
+#: ../src/Widgets/InfoBox.cs:810
msgid "Show Size"
msgstr "Show Size"
-#: ../src/Widgets/InfoBox.cs:807
+#: ../src/Widgets/InfoBox.cs:819
msgid "Show Exposure"
msgstr "Show Exposure"
-#: ../src/Widgets/InfoBox.cs:816
+#: ../src/Widgets/InfoBox.cs:828
msgid "Show Focal Length"
msgstr "Show Focal Length"
-#: ../src/Widgets/InfoBox.cs:825
+#: ../src/Widgets/InfoBox.cs:837
msgid "Show Camera"
msgstr "Show Camera"
-#: ../src/Widgets/InfoBox.cs:834
+#: ../src/Widgets/InfoBox.cs:846
msgid "Show File Size"
msgstr "Show File Size"
-#: ../src/Widgets/MetadataDisplay.cs:23
+#: ../src/Widgets/MetadataDisplay.cs:25
msgid "Metadata"
msgstr "Metadata"
-#: ../src/Widgets/MetadataDisplay.cs:104
+#: ../src/Widgets/MetadataDisplay.cs:106
msgid "Extended Metadata"
msgstr "Extended Metadata"
#. clear Extended Metadata
-#: ../src/Widgets/MetadataDisplay.cs:392
+#: ../src/Widgets/MetadataDisplay.cs:394
msgid "No Extended Metadata Available"
msgstr "No Extended Metadata Available"
-#: ../src/Widgets/MetadataDisplay.cs:410
+#: ../src/Widgets/MetadataDisplay.cs:412
msgid "No active photo"
msgstr "No active photo"
-#: ../src/Widgets/MetadataDisplay.cs:412
+#: ../src/Widgets/MetadataDisplay.cs:414
#, csharp-format
msgid "The photo \"{0}\" does not exist"
msgstr "The photo \"{0}\" does not exist"
-#: ../src/Widgets/MetadataDisplay.cs:415
+#: ../src/Widgets/MetadataDisplay.cs:417
msgid "No metadata available"
msgstr "No metadata available"
@@ -4039,7 +3972,7 @@ msgstr "No metadata available"
msgid "No applications available"
msgstr "No applications available"
-#: ../src/Widgets/RatingMenuItem.cs:56
+#: ../src/Widgets/RatingMenuItem.cs:57
msgid "Rating:"
msgstr "Rating:"
@@ -4064,6 +3997,397 @@ msgstr "Display a slideshow from F-Spot"
msgid "F-Spot photos"
msgstr "F-Spot photos"
+#~ msgid "Error: Error while transferring; Aborting"
+#~ msgstr "Error: Error while transferring; Aborting"
+
+#~ msgid "Error: File Already Exists; Aborting"
+#~ msgstr "Error: File Already Exists; Aborting"
+
+#~ msgid "Package"
+#~ msgstr "Package"
+
+#~ msgid "Extension Installation"
+#~ msgstr "Extension Installation"
+
+#~ msgid "<b>Select the extensions to install and click on Next</b>"
+#~ msgstr "<b>Select the extensions to install and click on Next</b>"
+
+#~ msgid "Install from:"
+#~ msgstr "Install from:"
+
+#~ msgid "_Repositories..."
+#~ msgstr "_Repositories…"
+
+#~ msgid "Show all packages"
+#~ msgstr "Show all packages"
+
+#~ msgid "Show new versions only"
+#~ msgstr "Show new versions only"
+
+#~ msgid "Show updates only"
+#~ msgstr "Show updates only"
+
+#~ msgid "_Unselect All"
+#~ msgstr "_Unselect All"
+
+#~ msgid "label124"
+#~ msgstr "label124"
+
+#~ msgid "Overall Progress:"
+#~ msgstr "Overall Progress:"
+
+#~ msgid "Downloading extensions..."
+#~ msgstr "Downloading extensions…"
+
+#~ msgid "Extension Manager"
+#~ msgstr "Extension Manager"
+
+#~ msgid "Additional extensions are required to perform this operation."
+#~ msgstr "Additional extensions are required to perform this operation."
+
+#~ msgid "The following extensions will be installed:"
+#~ msgstr "The following extensions will be installed:"
+
+#~ msgid "<big><b>Extension Manager</b></big>"
+#~ msgstr "<big><b>Extension Manager</b></big>"
+
+#~ msgid "The following extensions are currently installed:"
+#~ msgstr "The following extensions are currently installed:"
+
+#~ msgid "_Install Extensions..."
+#~ msgstr "_Install Extensions…"
+
+#~ msgid "_Uninstall..."
+#~ msgstr "_Uninstall…"
+
+#~ msgid "Enable"
+#~ msgstr "Enable"
+
+#~ msgid "Disable"
+#~ msgstr "Disable"
+
+#~ msgid "Details"
+#~ msgstr "Details"
+
+#~ msgid "Extension Repository Management"
+#~ msgstr "Extension Repository Management"
+
+#~ msgid "Add New Repository"
+#~ msgstr "Add New Repository"
+
+#~ msgid "Select the location of the repository you want to register:"
+#~ msgstr "Select the location of the repository you want to register:"
+
+#~ msgid "Register an on-line repository"
+#~ msgstr "Register an on-line repository"
+
+#~ msgid "Url:"
+#~ msgstr "URL:"
+
+#~ msgid "Register a local repository"
+#~ msgstr "Register a local repository"
+
+#~ msgid "Path:"
+#~ msgstr "Path:"
+
+#~ msgid "Browse..."
+#~ msgstr "Browse…"
+
+#~ msgid "Version:"
+#~ msgstr "Version:"
+
+#~ msgid "Author:"
+#~ msgstr "Author:"
+
+#~ msgid "Copyright:"
+#~ msgstr "Copyright:"
+
+#~ msgid "Extension Dependencies:"
+#~ msgstr "Extension Dependencies:"
+
+#~ msgid "All registered repositories"
+#~ msgstr "All registered repositories"
+
+#~ msgid "Are you sure you want to cancel the installation?"
+#~ msgstr "Are you sure you want to cancel the installation?"
+
+#~ msgid "The following packages will be uninstalled:"
+#~ msgstr "The following packages will be uninstalled:"
+
+#~ msgid ""
+#~ "There are other extensions that depend on the previous ones which will "
+#~ "also be uninstalled:"
+#~ msgstr ""
+#~ "There are other extensions that depend on the previous ones which will "
+#~ "also be uninstalled:"
+
+#~ msgid ""
+#~ "The selected extensions can't be installed because there are dependency "
+#~ "conflicts."
+#~ msgstr ""
+#~ "The selected extensions can't be installed because there are dependency "
+#~ "conflicts."
+
+#~ msgid "The following packages will be installed:"
+#~ msgstr "The following packages will be installed:"
+
+#~ msgid " (in user directory)"
+#~ msgstr " (in user directory)"
+
+#~ msgid "The following packages need to be uninstalled:"
+#~ msgstr "The following packages need to be uninstalled:"
+
+#~ msgid "The following dependencies could not be resolved:"
+#~ msgstr "The following dependencies could not be resolved:"
+
+#~ msgid "The installation has been successfully completed."
+#~ msgstr "The installation has been successfully completed."
+
+#~ msgid "The installation failed!"
+#~ msgstr "The installation failed!"
+
+#~ msgid "The installation has completed with warnings."
+#~ msgstr "The installation has completed with warnings."
+
+#~ msgid "The uninstallation has been successfully completed."
+#~ msgstr "The uninstallation has been successfully completed."
+
+#~ msgid "The uninstallation failed!"
+#~ msgstr "The uninstallation failed!"
+
+#~ msgid "The uninstallation has completed with warnings."
+#~ msgstr "The uninstallation has completed with warnings."
+
+#~ msgid "Repository"
+#~ msgstr "Repository"
+
+#~ msgid "Installation cancelled"
+#~ msgstr "Installation cancelled"
+
+#~ msgid "Some of the required extensions were not found"
+#~ msgstr "Some of the required extensions were not found"
+
+#~ msgid "Installation failed"
+#~ msgstr "Installation failed"
+
+#~ msgid "Extension"
+#~ msgstr "Extension"
+
+#~ msgid "Other"
+#~ msgstr "Other"
+
+#~ msgid "Url"
+#~ msgstr "URL"
+
+#~ msgid "Exception occurred: {0}"
+#~ msgstr "Exception occurred: {0}"
+
+#~ msgid "Disabled extensions can't be loaded."
+#~ msgstr "Disabled extensions can't be loaded."
+
+#~ msgid "Loading {0} extension"
+#~ msgstr "Loading {0} extension"
+
+#~ msgid "The required extension '{0}' is disabled."
+#~ msgstr "The required extension '{0}' is disabled."
+
+#~ msgid "The required extension '{0}' is not installed."
+#~ msgstr "The required extension '{0}' is not installed."
+
+#~ msgid "(provided by {0})"
+#~ msgstr "(provided by {0})"
+
+#~ msgid "Preview"
+#~ msgstr "Preview"
+
+#~ msgid "Path"
+#~ msgstr "Path"
+
+#~ msgid "File"
+#~ msgstr "File"
+
+#~ msgid "Select Tag"
+#~ msgstr "Select Tag"
+
+#~ msgid "Downloading Previews"
+#~ msgstr "Downloading Previews"
+
+#~ msgid "Downloading Preview of {0}"
+#~ msgstr "Downloading Preview of {0}"
+
+#~ msgid "Copying file {0} of {1}"
+#~ msgstr "Copying file {0} of {1}"
+
+#~ msgid "Error transferring file"
+#~ msgstr "Error transferring file"
+
+#~ msgid "Done Copying Files"
+#~ msgstr "Done Copying Files"
+
+#~ msgid "Download Complete"
+#~ msgstr "Download Complete"
+
+#~ msgid "Transferring \"{0}\" from camera"
+#~ msgstr "Transferring \"{0}\" from camera"
+
+#~ msgid "Port"
+#~ msgstr "Port"
+
+#~ msgid "Reparented ({0})"
+#~ msgstr "Reparented ({0})"
+
+#~ msgid "Import error"
+#~ msgstr "Import error"
+
+#~ msgid "Error importing {0}{2}{2}{1}"
+#~ msgstr "Error importing {0}{2}{2}{1}"
+
+#~ msgid " "
+#~ msgstr " "
+
+#~ msgid "<b></b>"
+#~ msgstr "<b></b>"
+
+#~ msgid "Attach Tags:"
+#~ msgstr "Attach Tags:"
+
+#~ msgid "Attach tag:"
+#~ msgstr "Attach tag:"
+
+#~ msgid "CD"
+#~ msgstr "CD"
+
+#~ msgid "Copy files to the Photos folder"
+#~ msgstr "Copy files to the Photos folder"
+
+#~ msgid "Detect duplicates"
+#~ msgstr "Detect duplicates"
+
+#~ msgid "E-_Mail:"
+#~ msgstr "E-_Mail:"
+
+#~ msgid "E_xport titles and comments"
+#~ msgstr "E_xport titles and comments"
+
+#~ msgid "G_allery:"
+#~ msgstr "G_allery:"
+
+#~ msgid "Gallery"
+#~ msgstr "Gallery"
+
+#~ msgid "Include subfolders"
+#~ msgstr "Include subfolders"
+
+#~ msgid "Pause"
+#~ msgstr "Pause"
+
+#~ msgid "Select Photos to Copy From Camera..."
+#~ msgstr "Select Photos to Copy from Camera…"
+
+#~ msgid "Select the camera from which you want to transfer files"
+#~ msgstr "Select the camera from which you want to transfer files"
+
+#~ msgid "Selected Camera: "
+#~ msgstr "Selected Camera: "
+
+#~ msgid "Strip image _metadata"
+#~ msgstr "Strip image _metadata"
+
+#~ msgid "_Flickr"
+#~ msgstr "_Flickr"
+
+#~ msgid "_Gallery"
+#~ msgstr "_Gallery"
+
+#~ msgid "_Open album in browser when done uploading"
+#~ msgstr "_Open album in browser when done uploading"
+
+#~ msgid "_Open destination when done exporting"
+#~ msgstr "_Open destination when done exporting"
+
+#~ msgid "_Scale photos to no larger than: "
+#~ msgstr "_Scale photos to no larger than: "
+
+#~ msgid "_Strip metadata"
+#~ msgstr "_Strip metadata"
+
+#~ msgid "_URI:"
+#~ msgstr "_URI:"
+
+#~ msgid "_Virtual Filesystem"
+#~ msgstr "_Virtual Filesystem"
+
+#~ msgid "x"
+#~ msgstr "x"
+
+#~ msgid "Loading {0} of {1}"
+#~ msgstr "Loading {0} of {1}"
+
+#~ msgid "Done Loading"
+#~ msgstr "Done Loading"
+
+#~ msgid "Directory does not exist."
+#~ msgstr "Directory does not exist."
+
+#~ msgid ""
+#~ "The directory you selected \"{0}\" does not exist. Please choose a "
+#~ "different directory"
+#~ msgstr ""
+#~ "The directory you selected \"{0}\" does not exist. Please choose a "
+#~ "different directory"
+
+#~ msgid "No cameras detected."
+#~ msgstr "No cameras detected."
+
+#~ msgid ""
+#~ "F-Spot was unable to find any cameras attached to this system. Double "
+#~ "check that the camera is connected and has power"
+#~ msgstr ""
+#~ "F-Spot was unable to find any cameras attached to this system. Double "
+#~ "check that the camera is connected and has power"
+
+#~ msgid "Error connecting to camera"
+#~ msgstr "Error connecting to camera"
+
+#~ msgid "Received error \"{0}\" while connecting to camera"
+#~ msgstr "Received error \"{0}\" while connecting to camera"
+
+#~ msgid "Could not create a new version"
+#~ msgstr "Could not create a new version"
+
+#~ msgid "Received exception \"{0}\". Unable to create version \"{1}\""
+#~ msgstr "Received exception \"{0}\". Unable to create version \"{1}\""
+
+#~ msgid "Really Delete?"
+#~ msgstr "Really Delete?"
+
+#~ msgid "Cancel"
+#~ msgstr "Cancel"
+
+#~ msgid "Could not delete a version"
+#~ msgstr "Could not delete a version"
+
+#~ msgid "Received exception \"{0}\". Unable to delete version \"{1}\""
+#~ msgstr "Received exception \"{0}\". Unable to delete version \"{1}\""
+
+#~ msgid "Could not rename a version"
+#~ msgstr "Could not rename a version"
+
+#~ msgid "Received exception \"{0}\". Unable to rename version to \"{1}\""
+#~ msgstr "Received exception \"{0}\". Unable to rename version to \"{1}\""
+
+#~ msgid "my photos"
+#~ msgstr "my photos"
+
+#~ msgid "Edit Selected Tag..."
+#~ msgstr "Edit Selected Tag…"
+
+#~ msgid "Copy Locat_ion"
+#~ msgstr "Copy Locat_ion"
+
+#~ msgid "_Edit Selected Tag..."
+#~ msgstr "_Edit Selected Tag…"
+
#~ msgid "interpolation type"
#~ msgstr "interpolation type"
@@ -4121,9 +4445,6 @@ msgstr "F-Spot photos"
#~ msgid "<b>Color Management</b>"
#~ msgstr "<b>Colour Management</b>"
-#~ msgid "<b>Import Settings</b>"
-#~ msgstr "<b>Import Settings</b>"
-
#~ msgid "<b>Metadata</b>"
#~ msgstr "<b>Metadata</b>"
@@ -4221,30 +4542,6 @@ msgstr "F-Spot photos"
#~ msgid "This is who I am"
#~ msgstr "This is who I am"
-#~ msgid "<b>Tabblo account</b>"
-#~ msgstr "<b>Tabblo account</b>"
-
-#~ msgid "<b>{0}</b>."
-#~ msgstr "<b>{0}</b>."
-
-#~ msgid "A trust error occured while attempting to access"
-#~ msgstr "A trust error occurred while attempting to access"
-
-#~ msgid "Abort this session"
-#~ msgstr "Abort this session"
-
-#~ msgid "Always trust this site's certificate"
-#~ msgstr "Always trust this site's certificate"
-
-#~ msgid "Do you wish to:"
-#~ msgstr "Do you wish to:"
-
-#~ msgid "Trust Error"
-#~ msgstr "Trust Error"
-
-#~ msgid "Trust the site's certificate this once"
-#~ msgstr "Trust the site's certificate this once"
-
#~ msgid "Blackout"
#~ msgstr "Blackout"
@@ -4307,9 +4604,6 @@ msgstr "F-Spot photos"
#~ msgid "Miniatures can be generated from the current main view"
#~ msgstr "Miniatures can be generated from the current main view"
-#~ msgid "Size of the miniatures composing the mosaic"
-#~ msgstr "Size of the miniatures composing the mosaic"
-
#~ msgid "_Current query"
#~ msgstr "_Current query"
@@ -4640,9 +4934,6 @@ msgstr "F-Spot photos"
#~ msgid "Export to CD..."
#~ msgstr "Export to CD…"
-#~ msgid "Export to Folder..."
-#~ msgstr "Export to Folder…"
-
#~ msgid "Export to PicasaWeb..."
#~ msgstr "Export to PicasaWeb…"
@@ -4919,8 +5210,5 @@ msgstr "F-Spot photos"
#~ msgid "Scaling picture \"{0}\""
#~ msgstr "Scaling picture \"{0}\""
-#~ msgid "Transferring picture \"{0}\""
-#~ msgstr "Transferring picture \"{0}\""
-
#~ msgid "Export to _Original..."
#~ msgstr "Export to _Original…"
diff --git a/po/es.po b/po/es.po
index 3504bb4..7fcb6ae 100644
--- a/po/es.po
+++ b/po/es.po
@@ -14,8 +14,8 @@ msgstr ""
"Project-Id-Version: f-spot.HEAD\n"
"Report-Msgid-Bugs-To: http://bugzilla.gnome.org/enter_bug.cgi?product=f-"
"spot&component=General\n"
-"POT-Creation-Date: 2010-05-13 20:28+0000\n"
-"PO-Revision-Date: 2010-05-14 17:49+0200\n"
+"POT-Creation-Date: 2010-06-14 16:14+0000\n"
+"PO-Revision-Date: 2010-06-16 08:05+0200\n"
"Last-Translator: Jorge González <jorgegonz at svn.gnome.org>\n"
"Language-Team: Español <gnome-es-list at gnome.org>\n"
"MIME-Version: 1.0\n"
@@ -24,13 +24,44 @@ msgstr ""
"X-Generator: KBabel 1.11.4\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
+#: ../data/desktop-files/f-spot.desktop.in.in.h:1
+#: ../data/desktop-files/f-spot-import.desktop.in.in.h:1
+#: ../data/desktop-files/f-spot-view.desktop.in.in.h:1
+#: ../src/ui/main_window.ui.h:11
+msgid "F-Spot"
+msgstr "F-Spot"
+
+#: ../data/desktop-files/f-spot.desktop.in.in.h:2
+#: ../data/desktop-files/f-spot-import.desktop.in.in.h:2
+msgid "F-Spot Photo Manager"
+msgstr "Gestor de fotos F-Spot"
+
+#: ../data/desktop-files/f-spot.desktop.in.in.h:3
+msgid "Organize, enjoy, and share your photos"
+msgstr "Organice, diviértase y comparta sus fotografías"
+
+#: ../data/desktop-files/f-spot.desktop.in.in.h:4
+#: ../data/desktop-files/f-spot-import.desktop.in.in.h:4
+msgid "Photo Manager"
+msgstr "Gestor de fotografías"
+
+#: ../data/desktop-files/f-spot-import.desktop.in.in.h:3
+msgid "Import into F-Spot"
+msgstr "Importar en F-Spot"
+
+#: ../data/desktop-files/f-spot-view.desktop.in.in.h:2
+msgid "F-Spot Photo Viewer"
+msgstr "Visor de fotos F-Spot"
+
+#: ../data/desktop-files/f-spot-view.desktop.in.in.h:3
+msgid "Photo Viewer"
+msgstr "Visor de fotos"
+
#: ../extensions/Exporters/CDExport/CDExport.addin.xml.h:1
msgid "_CD..."
msgstr "_CD…"
#: ../extensions/Exporters/CDExport/CDExport.cs:162
-#: ../extensions/Exporters/FolderExport/FolderExport.cs:392
-#: ../src/CameraFileSelectionDialog.cs:199
msgid "Transferring Pictures"
msgstr "Transfiriendo las fotografías"
@@ -41,37 +72,34 @@ msgstr "Transfiriendo fotografía «{0}» al CD"
#. Note for translators: This indicates the current photo is photo {0} of {1} out of photos
#: ../extensions/Exporters/CDExport/CDExport.cs:220
-#: ../extensions/Exporters/FlickrExport/FlickrExport.cs:349
-#: ../extensions/Exporters/FolderExport/FolderExport.cs:245
+#: ../extensions/Exporters/FlickrExport/FlickrExport.cs:350
+#: ../extensions/Exporters/FolderExport/FolderExport.cs:220
#: ../extensions/Exporters/GalleryExport/GalleryExport.cs:781
-#: ../src/MainWindow.cs:673 ../src/UI.Dialog/AdjustTimeDialog.cs:129
-#: ../src/UI.Dialog/ProgressDialog.cs:92
+#: ../src/MainWindow.cs:644 ../src/UI.Dialog/AdjustTimeDialog.cs:130
+#: ../src/UI.Dialog/ProgressDialog.cs:90
#, csharp-format
msgid "{0} of {1}"
msgstr "{0} de {1}"
#: ../extensions/Exporters/CDExport/CDExport.cs:233
-#: ../extensions/Exporters/FacebookExport/FacebookExport.cs:380
-#: ../extensions/Exporters/FlickrExport/FlickrExport.cs:379
-#: ../extensions/Exporters/FolderExport/FolderExport.cs:285
+#: ../extensions/Exporters/FacebookExport/FacebookExport.cs:377
+#: ../extensions/Exporters/FlickrExport/FlickrExport.cs:380
#: ../extensions/Exporters/GalleryExport/GalleryExport.cs:806
-#: ../extensions/Exporters/PicasaWebExport/PicasaWebExport.cs:704
+#: ../extensions/Exporters/PicasaWebExport/PicasaWebExport.cs:705
#: ../extensions/Exporters/SmugMugExport/SmugMugExport.cs:607
msgid "Done Sending Photos"
msgstr "Finalizó el envío de fotos"
#: ../extensions/Exporters/CDExport/CDExport.cs:235
-#: ../extensions/Exporters/FolderExport/FolderExport.cs:287
msgid "Transfer Complete"
msgstr "Transferencia finalizada"
#: ../extensions/Exporters/CDExport/CDExport.cs:242
-#: ../extensions/Exporters/FolderExport/FolderExport.cs:292
msgid "Error While Transferring"
msgstr "Error al transferir"
#: ../extensions/Exporters/CDExport/CDExport.cs:250
-#: ../extensions/Exporters/FolderExport/FolderExport.cs:311
+#: ../extensions/Exporters/FolderExport/FolderExport.cs:278
msgid "Error Transferring"
msgstr "Error al transferir"
@@ -92,7 +120,7 @@ msgstr "<b>Fotografías para grabar</b>"
#: ../extensions/Exporters/FolderExport/FolderExport.glade.h:7
#: ../extensions/Exporters/GalleryExport/GalleryExport.glade.h:7
#: ../extensions/Exporters/SmugMugExport/SmugMugExport.glade.h:5
-#: ../src/f-spot.glade.h:28
+#: ../src/ui/mail_dialog.ui.h:10
msgid "Autorotate"
msgstr "Autorrotar"
@@ -101,7 +129,7 @@ msgid "Create CD"
msgstr "Crear CD"
#: ../extensions/Exporters/CDExport/CDExport.ui.h:5
-#: ../src/Widgets/InfoBox.cs:221
+#: ../src/Widgets/InfoBox.cs:222
msgid "Size"
msgstr "Tamaño"
@@ -120,7 +148,7 @@ msgstr "_Examinar los archivos anteriormente programados"
#: ../extensions/Exporters/PicasaWebExport/PicasaWebExport.glade.h:20
#: ../extensions/Exporters/SmugMugExport/SmugMugExport.glade.h:12
#: ../extensions/Exporters/TabbloExport/ui/TabbloExport.ui.h:9
-#: ../src/f-spot.glade.h:95
+#: ../src/f-spot.glade.h:41
msgid "_Export"
msgstr "_Exportar"
@@ -150,11 +178,11 @@ msgstr ""
"Una vez que Facebook le indique que debe volver a esta aplicación, pulse "
"«Aceptar» debajo."
-#: ../extensions/Exporters/FacebookExport/FacebookExport.cs:280
+#: ../extensions/Exporters/FacebookExport/FacebookExport.cs:281
msgid "Too many images to export"
msgstr "Demasiadas imágenes para exportar"
-#: ../extensions/Exporters/FacebookExport/FacebookExport.cs:281
+#: ../extensions/Exporters/FacebookExport/FacebookExport.cs:282
#, csharp-format
msgid ""
"Facebook only permits {0} photographs per album. Please refine your "
@@ -163,27 +191,19 @@ msgstr ""
"Facebook sólo permite {0} fotografías por álbum. Rehaga su selección e "
"inténtelo de nuevo."
-#: ../extensions/Exporters/FacebookExport/FacebookExport.cs:298
-#: ../extensions/Exporters/FlickrExport/FlickrExport.cs:475
-#: ../extensions/Exporters/GalleryExport/GalleryExport.cs:730
-#: ../extensions/Exporters/PicasaWebExport/PicasaWebExport.cs:597
-#: ../extensions/Exporters/SmugMugExport/SmugMugExport.cs:522
-msgid "Uploading Pictures"
-msgstr "Cargando fotografías"
-
-#: ../extensions/Exporters/FacebookExport/FacebookExport.cs:319
+#: ../extensions/Exporters/FacebookExport/FacebookExport.cs:297
msgid "Album must have a name"
msgstr "El álbum debe tener un nombre"
-#: ../extensions/Exporters/FacebookExport/FacebookExport.cs:320
+#: ../extensions/Exporters/FacebookExport/FacebookExport.cs:298
msgid "Please name your album or choose an existing album."
msgstr "Dé un nombre a su álbum o elija un álbum existente."
-#: ../extensions/Exporters/FacebookExport/FacebookExport.cs:334
+#: ../extensions/Exporters/FacebookExport/FacebookExport.cs:312
msgid "Creating a new album failed"
msgstr "Falló la creación del álbum nuevo"
-#: ../extensions/Exporters/FacebookExport/FacebookExport.cs:335
+#: ../extensions/Exporters/FacebookExport/FacebookExport.cs:313
#, csharp-format
msgid ""
"An error occurred creating a new album.\n"
@@ -194,45 +214,53 @@ msgstr ""
"\n"
"{0}"
-#: ../extensions/Exporters/FacebookExport/FacebookExport.cs:357
-#: ../extensions/Exporters/PicasaWebExport/PicasaWebExport.cs:660
+#: ../extensions/Exporters/FacebookExport/FacebookExport.cs:326
+#: ../extensions/Exporters/FlickrExport/FlickrExport.cs:476
+#: ../extensions/Exporters/GalleryExport/GalleryExport.cs:730
+#: ../extensions/Exporters/PicasaWebExport/PicasaWebExport.cs:598
+#: ../extensions/Exporters/SmugMugExport/SmugMugExport.cs:522
+msgid "Uploading Pictures"
+msgstr "Cargando fotografías"
+
+#: ../extensions/Exporters/FacebookExport/FacebookExport.cs:354
+#: ../extensions/Exporters/PicasaWebExport/PicasaWebExport.cs:661
#: ../extensions/Exporters/SmugMugExport/SmugMugExport.cs:565
#, csharp-format
msgid "Uploading picture \"{0}\" ({1} of {2})"
msgstr "Subiendo imagen «{0}» ({1} de {2})"
-#: ../extensions/Exporters/FacebookExport/FacebookExport.cs:371
+#: ../extensions/Exporters/FacebookExport/FacebookExport.cs:368
#, csharp-format
msgid "Error Uploading To Facebook: {0}"
msgstr "Error al subir a Facebook: {0}"
-#: ../extensions/Exporters/FacebookExport/FacebookExport.cs:372
-#: ../extensions/Exporters/FlickrExport/FlickrExport.cs:370
-#: ../extensions/Exporters/FolderExport/FolderExport.cs:250
+#: ../extensions/Exporters/FacebookExport/FacebookExport.cs:369
+#: ../extensions/Exporters/FlickrExport/FlickrExport.cs:371
+#: ../extensions/Exporters/FolderExport/FolderExport.cs:226
#: ../extensions/Exporters/GalleryExport/GalleryExport.cs:797
-#: ../extensions/Exporters/PicasaWebExport/PicasaWebExport.cs:693
+#: ../extensions/Exporters/PicasaWebExport/PicasaWebExport.cs:694
#: ../extensions/Exporters/SmugMugExport/SmugMugExport.cs:596
#: ../extensions/Exporters/TabbloExport/TabbloExport.cs:319
msgid "Error"
msgstr "Error"
-#: ../extensions/Exporters/FacebookExport/FacebookExport.cs:382
-#: ../extensions/Exporters/FlickrExport/FlickrExport.cs:381
+#: ../extensions/Exporters/FacebookExport/FacebookExport.cs:379
+#: ../extensions/Exporters/FlickrExport/FlickrExport.cs:382
#: ../extensions/Exporters/GalleryExport/GalleryExport.cs:808
-#: ../extensions/Exporters/PicasaWebExport/PicasaWebExport.cs:706
+#: ../extensions/Exporters/PicasaWebExport/PicasaWebExport.cs:707
#: ../extensions/Exporters/SmugMugExport/SmugMugExport.cs:609
msgid "Upload Complete"
msgstr "Carga completada"
-#: ../extensions/Exporters/FacebookExport/FacebookExport.cs:385
+#: ../extensions/Exporters/FacebookExport/FacebookExport.cs:382
msgid "Visit F-Spot group on Facebook"
msgstr "Visitar el grupo de F-Spot en Facebook"
-#: ../extensions/Exporters/FacebookExport/FacebookExportDialog.cs:211
+#: ../extensions/Exporters/FacebookExport/FacebookExportDialog.cs:212
msgid "Waiting for authentication"
msgstr "Esperando la autenticación"
-#: ../extensions/Exporters/FacebookExport/FacebookExportDialog.cs:212
+#: ../extensions/Exporters/FacebookExport/FacebookExportDialog.cs:213
msgid ""
"F-Spot will now launch your browser so that you can log into Facebook.\n"
"\n"
@@ -247,15 +275,15 @@ msgstr ""
"«Aceptar» debajo. F-Spot cacheará su sesión en el Depósito de claves, si es "
"posible, y la reusará en un futuro para exportar a Facebook."
-#: ../extensions/Exporters/FacebookExport/FacebookExportDialog.cs:217
+#: ../extensions/Exporters/FacebookExport/FacebookExportDialog.cs:218
msgid "Authenticating..."
msgstr "Autenticando…"
-#: ../extensions/Exporters/FacebookExport/FacebookExportDialog.cs:227
+#: ../extensions/Exporters/FacebookExport/FacebookExportDialog.cs:228
msgid "Error logging into Facebook"
msgstr "Error al iniciar sesión en Facebook"
-#: ../extensions/Exporters/FacebookExport/FacebookExportDialog.cs:228
+#: ../extensions/Exporters/FacebookExport/FacebookExportDialog.cs:229
msgid ""
"There was a problem logging into Facebook. Check your credentials and try "
"again."
@@ -263,23 +291,23 @@ msgstr ""
"Hubo un problema al iniciar sesión en Facebook. Compruebe sus credenciales e "
"inténtelo de nuevo."
-#: ../extensions/Exporters/FacebookExport/FacebookExportDialog.cs:237
+#: ../extensions/Exporters/FacebookExport/FacebookExportDialog.cs:238
msgid "Authorizing Session"
msgstr "Autorizando sesión"
-#: ../extensions/Exporters/FacebookExport/FacebookExportDialog.cs:246
+#: ../extensions/Exporters/FacebookExport/FacebookExportDialog.cs:247
msgid "Session established, fetching user info..."
msgstr "Sesión establecida, obteniendo información del usuario..."
-#: ../extensions/Exporters/FacebookExport/FacebookExportDialog.cs:252
+#: ../extensions/Exporters/FacebookExport/FacebookExportDialog.cs:253
msgid "Session established, fetching friend list..."
msgstr "Sesión establecida, obteniendo lista de amigos..."
-#: ../extensions/Exporters/FacebookExport/FacebookExportDialog.cs:262
+#: ../extensions/Exporters/FacebookExport/FacebookExportDialog.cs:263
msgid "Session established, fetching friend details..."
msgstr "Sesión establecida, obteniendo detalles de amigos..."
-#: ../extensions/Exporters/FacebookExport/FacebookExportDialog.cs:272
+#: ../extensions/Exporters/FacebookExport/FacebookExportDialog.cs:275
msgid "Session established, fetching photo albums..."
msgstr "Sesión establecida, obteniendo álbumes de fotos..."
@@ -289,11 +317,11 @@ msgstr "Sesión establecida, obteniendo álbumes de fotos..."
msgid "{0} {1} is logged into Facebook"
msgstr "{0} {1} ha iniciado sesión en Facebook"
-#: ../extensions/Exporters/FacebookExport/FacebookExportDialog.cs:291
+#: ../extensions/Exporters/FacebookExport/FacebookExportDialog.cs:294
msgid "Facebook Connection Error"
msgstr "Error de conexión con Facebook"
-#: ../extensions/Exporters/FacebookExport/FacebookExportDialog.cs:292
+#: ../extensions/Exporters/FacebookExport/FacebookExportDialog.cs:295
#, csharp-format
msgid ""
"There was an error when downloading your information from Facebook.\n"
@@ -304,7 +332,7 @@ msgstr ""
"\n"
"Facebook dijo: {0}"
-#: ../extensions/Exporters/FacebookExport/FacebookExportDialog.cs:321
+#: ../extensions/Exporters/FacebookExport/FacebookExportDialog.cs:324
msgid "You are not logged in."
msgstr "No ha iniciado sesión."
@@ -346,7 +374,7 @@ msgid "Logout"
msgstr "Finalizar sesión"
#: ../extensions/Exporters/FacebookExport/FacebookExport.ui.h:10
-#: ../src/Widgets/InfoBox.cs:212
+#: ../src/Widgets/InfoBox.cs:213
msgid "Name"
msgstr "Nombre"
@@ -382,12 +410,12 @@ msgstr "_Flickr…"
msgid "_Zooomr..."
msgstr "_Zooomr…"
-#: ../extensions/Exporters/FlickrExport/FlickrExport.cs:105
+#: ../extensions/Exporters/FlickrExport/FlickrExport.cs:106
#: ../extensions/Exporters/FlickrExport/FlickrExport.glade.h:5
msgid "Authorize"
msgstr "Autorizar"
-#: ../extensions/Exporters/FlickrExport/FlickrExport.cs:111
+#: ../extensions/Exporters/FlickrExport/FlickrExport.cs:112
#, csharp-format
msgid ""
"Return to this window after you have finished the authorization process on "
@@ -396,60 +424,59 @@ msgstr ""
"Vuelva a esta ventana después de que haya finalizado el proceso de "
"autorización en {0} y pulse el botón «Completar autorización» de abajo"
-#: ../extensions/Exporters/FlickrExport/FlickrExport.cs:112
+#: ../extensions/Exporters/FlickrExport/FlickrExport.cs:113
msgid "Complete Authorization"
msgstr "Completar autorización"
-#: ../extensions/Exporters/FlickrExport/FlickrExport.cs:117
+#: ../extensions/Exporters/FlickrExport/FlickrExport.cs:118
#, csharp-format
msgid "Logging into {0}"
msgstr "Iniciando sesión en {0}"
-#: ../extensions/Exporters/FlickrExport/FlickrExport.cs:118
+#: ../extensions/Exporters/FlickrExport/FlickrExport.cs:119
msgid "Checking credentials..."
msgstr "Comprobando las credenciales…"
-#: ../extensions/Exporters/FlickrExport/FlickrExport.cs:125
+#: ../extensions/Exporters/FlickrExport/FlickrExport.cs:126
#, csharp-format
msgid "Welcome {0} you are connected to {1}"
msgstr "Bienvenido {0}, está conectado en {1}"
-#: ../extensions/Exporters/FlickrExport/FlickrExport.cs:128
+#: ../extensions/Exporters/FlickrExport/FlickrExport.cs:129
#, csharp-format
msgid "Sign in as a different user"
msgstr "Iniciar sesión como un usuario diferente"
-#: ../extensions/Exporters/FlickrExport/FlickrExport.cs:133
+#: ../extensions/Exporters/FlickrExport/FlickrExport.cs:134
#, csharp-format
msgid "Used {0} of your allowed {1} monthly quota"
msgstr "Ha usado {0} de su cuota mensual de{1}"
-#: ../extensions/Exporters/FlickrExport/FlickrExport.cs:297
+#: ../extensions/Exporters/FlickrExport/FlickrExport.cs:298
msgid "Unable to log on"
msgstr "No se pudo iniciar sesión"
-#: ../extensions/Exporters/FlickrExport/FlickrExport.cs:317
+#: ../extensions/Exporters/FlickrExport/FlickrExport.cs:318
#, csharp-format
msgid "Waiting for response {0} of {1}"
msgstr "Esperando respuesta {0} de {1}"
-#: ../extensions/Exporters/FlickrExport/FlickrExport.cs:344
-#: ../extensions/Exporters/FolderExport/FolderExport.cs:242
+#: ../extensions/Exporters/FlickrExport/FlickrExport.cs:345
#: ../extensions/Exporters/GalleryExport/GalleryExport.cs:777
#, csharp-format
msgid "Uploading picture \"{0}\""
msgstr "Cargando foto «{0}»"
-#: ../extensions/Exporters/FlickrExport/FlickrExport.cs:367
+#: ../extensions/Exporters/FlickrExport/FlickrExport.cs:368
#, csharp-format
msgid "Error Uploading To {0}: {1}"
msgstr "Error al cargar en {0}: {1}"
-#: ../extensions/Exporters/FlickrExport/FlickrExport.cs:454
+#: ../extensions/Exporters/FlickrExport/FlickrExport.cs:455
msgid "Unable to log on."
msgstr "No se pudo iniciar sesión."
-#: ../extensions/Exporters/FlickrExport/FlickrExport.cs:455
+#: ../extensions/Exporters/FlickrExport/FlickrExport.cs:456
#, csharp-format
msgid ""
"F-Spot was unable to log on to {0}. Make sure you have given the "
@@ -459,7 +486,6 @@ msgstr ""
"autenticación usando la interfaz web de {0}."
#: ../extensions/Exporters/FlickrExport/FlickrExport.glade.h:1
-#: ../src/f-spot.glade.h:8
msgid "<b>Account</b>"
msgstr "<b>Cuenta</b>"
@@ -469,7 +495,7 @@ msgstr "<b>Cuenta</b>"
#: ../extensions/Exporters/PicasaWebExport/PicasaWebExport.glade.h:2
#: ../extensions/Exporters/SmugMugExport/SmugMugExport.glade.h:2
#: ../extensions/Exporters/TabbloExport/ui/TabbloExport.ui.h:2
-#: ../src/f-spot.glade.h:14 ../src/UI.Dialog/ui/AdjustTimeDialog.ui.h:5
+#: ../src/UI.Dialog/ui/AdjustTimeDialog.ui.h:5 ../src/ui/mail_dialog.ui.h:6
msgid "<b>Photos</b>"
msgstr "<b>Fotografías</b>"
@@ -478,7 +504,7 @@ msgstr "<b>Fotografías</b>"
#: ../extensions/Exporters/GalleryExport/GalleryExport.glade.h:4
#: ../extensions/Exporters/PicasaWebExport/PicasaWebExport.glade.h:4
#: ../extensions/Exporters/SmugMugExport/SmugMugExport.glade.h:4
-#: ../src/f-spot.glade.h:16
+#: ../src/ui/mail_dialog.ui.h:8
msgid "<b>Style</b>"
msgstr "<b>Estilo</b>"
@@ -491,7 +517,6 @@ msgstr "<b>Permisos de visionado</b>"
#: ../extensions/Exporters/PicasaWebExport/PicasaWebExport.glade.h:9
#: ../extensions/Exporters/SmugMugExport/SmugMugExport.glade.h:6
#: ../extensions/Exporters/TabbloExport/ui/TabbloExport.ui.h:5
-#: ../src/f-spot.glade.h:44
msgid "Export"
msgstr "Exportar"
@@ -535,7 +560,6 @@ msgstr "Visible para mis amigos"
#: ../extensions/Exporters/FlickrExport/FlickrExport.glade.h:16
#: ../extensions/Exporters/PicasaWebExport/PicasaWebExport.glade.h:21
-#: ../src/f-spot.glade.h:96
msgid "_Export tags"
msgstr "_Exportar etiquetas"
@@ -544,7 +568,6 @@ msgstr "_Exportar etiquetas"
#: ../extensions/Exporters/GalleryExport/GalleryExport.glade.h:21
#: ../extensions/Exporters/PicasaWebExport/PicasaWebExport.glade.h:25
#: ../extensions/Exporters/SmugMugExport/SmugMugExport.glade.h:15
-#: ../src/f-spot.glade.h:109
msgid "_Resize to: "
msgstr "_Redimensionar a: "
@@ -557,88 +580,105 @@ msgstr "_Ver las fotos en un navegador cuando se terminen de subir"
#: ../extensions/Exporters/GalleryExport/GalleryExport.glade.h:24
#: ../extensions/Exporters/PicasaWebExport/PicasaWebExport.glade.h:27
#: ../extensions/Exporters/SmugMugExport/SmugMugExport.glade.h:17
-#: ../src/f-spot.glade.h:125
msgid "pixels"
msgstr "píxeles"
#: ../extensions/Exporters/FolderExport/FolderExport.addin.xml.h:1
msgid "F_older..."
-msgstr "Ca_rpeta"
+msgstr "Ca_rpeta…"
-#: ../extensions/Exporters/FolderExport/FolderExport.cs:140
+#: ../extensions/Exporters/FolderExport/FolderExport.cs:120
msgid "Select Export Folder"
msgstr "Seleccione una carpeta para exportar"
-#: ../extensions/Exporters/FolderExport/FolderExport.cs:198
+#: ../extensions/Exporters/FolderExport/FolderExport.cs:173
msgid "Building Gallery"
msgstr "Construyendo galería"
-#: ../extensions/Exporters/FolderExport/FolderExport.cs:248
+#: ../extensions/Exporters/FolderExport/FolderExport.cs:217
#, csharp-format
-msgid "Error uploading picture \"{0}\" to Gallery:{2}{1}"
-msgstr "Error al subir la imagen «{0}» a la galería: {2}{1}"
+msgid "Exporting \"{0}\"..."
+msgstr "Exportando «{0}»…"
-#: ../extensions/Exporters/FolderExport/FolderExport.cs:333
-msgid "Error: Error while transferring; Aborting"
-msgstr "Error: Error al transferir; abortando"
+#: ../extensions/Exporters/FolderExport/FolderExport.cs:224
+#, csharp-format
+msgid "Error Copying \"{0}\" to Gallery:{2}{1}"
+msgstr "Error al copiar «{0}» a la galería: {2}{1}"
-#: ../extensions/Exporters/FolderExport/FolderExport.cs:336
-msgid "Error: File Already Exists; Aborting"
-msgstr "Error: El archivo ya existe; abortando"
+#: ../extensions/Exporters/FolderExport/FolderExport.cs:250
+#, csharp-format
+msgid "Transferring to \"{0}\""
+msgstr "Transfiriendo a «{0}»"
+
+#: ../extensions/Exporters/FolderExport/FolderExport.cs:251
+msgid "Transferring..."
+msgstr "Transfiriendo…"
+
+#. No need to check result here as if result is not true, an Exception will be thrown before
+#: ../extensions/Exporters/FolderExport/FolderExport.cs:256
+msgid "Export Complete."
+msgstr "Exportación completada."
+
+#: ../extensions/Exporters/FolderExport/FolderExport.cs:258
+msgid "Exporting Photos Completed."
+msgstr "Exportación de fotografías completada."
+
+#: ../extensions/Exporters/FolderExport/FolderExport.cs:325
+msgid "Exporting Photos"
+msgstr "Exportando fotos"
#. Note for translators: light as clear, opposite as dark
-#: ../extensions/Exporters/FolderExport/FolderExport.cs:807
+#: ../extensions/Exporters/FolderExport/FolderExport.cs:743
msgid "Light"
msgstr "Luminoso"
-#: ../extensions/Exporters/FolderExport/FolderExport.cs:808
+#: ../extensions/Exporters/FolderExport/FolderExport.cs:744
msgid "Dark"
msgstr "Oscuro"
#. Abbreviation of previous
-#: ../extensions/Exporters/FolderExport/FolderExport.cs:988
+#: ../extensions/Exporters/FolderExport/FolderExport.cs:924
msgid "Prev"
msgstr "Anterior"
-#: ../extensions/Exporters/FolderExport/FolderExport.cs:990
-#: ../extensions/Exporters/FolderExport/FolderExport.cs:1231
-#: ../src/CameraFileSelectionDialog.cs:82
+#: ../extensions/Exporters/FolderExport/FolderExport.cs:926
+#: ../extensions/Exporters/FolderExport/FolderExport.cs:1167
msgid "Index"
msgstr "Índice"
#. Don't care otherwise, Tags sounds reasonable
-#: ../extensions/Exporters/FolderExport/FolderExport.cs:993
-#: ../extensions/Exporters/FolderExport/FolderExport.cs:1165
-#: ../extensions/Exporters/FolderExport/FolderExport.cs:1205
-#: ../src/MainWindow.cs:376 ../src/Widgets/Sidebar.cs:56
+#: ../extensions/Exporters/FolderExport/FolderExport.cs:929
+#: ../extensions/Exporters/FolderExport/FolderExport.cs:1101
+#: ../extensions/Exporters/FolderExport/FolderExport.cs:1141
+#: ../src/MainWindow.cs:348 ../src/Widgets/Sidebar.cs:56
msgid "Tags"
msgstr "Etiquetas"
-#: ../extensions/Exporters/FolderExport/FolderExport.cs:996
-#: ../src/f-spot.glade.h:58 ../src/ItemAction.cs:102
+#: ../extensions/Exporters/FolderExport/FolderExport.cs:932
+#: ../src/ItemAction.cs:102
msgid "Next"
msgstr "Siguiente"
-#: ../extensions/Exporters/FolderExport/FolderExport.cs:1100
+#: ../extensions/Exporters/FolderExport/FolderExport.cs:1036
msgid "Gallery generated by"
msgstr "Galería generada por"
-#: ../extensions/Exporters/FolderExport/FolderExport.cs:1140
+#: ../extensions/Exporters/FolderExport/FolderExport.cs:1076
msgid "Show Styles"
msgstr "Mostrar estilos"
-#: ../extensions/Exporters/FolderExport/FolderExport.cs:1141
+#: ../extensions/Exporters/FolderExport/FolderExport.cs:1077
msgid "Hide Styles"
msgstr "Ocultar estilos"
-#: ../extensions/Exporters/FolderExport/FolderExport.cs:1176
-#: ../extensions/Exporters/FolderExport/FolderExport.cs:1177
-#: ../src/ui/main_window.ui.h:24
+#: ../extensions/Exporters/FolderExport/FolderExport.cs:1112
+#: ../extensions/Exporters/FolderExport/FolderExport.cs:1113
+#: ../src/ui/main_window.ui.h:25
msgid "Tags: "
msgstr "Etiquetas: "
-#: ../extensions/Exporters/FolderExport/FolderExport.cs:1308
-#: ../extensions/Exporters/FolderExport/FolderExport.cs:1441
+#: ../extensions/Exporters/FolderExport/FolderExport.cs:1244
+#: ../extensions/Exporters/FolderExport/FolderExport.cs:1377
msgid "Page:"
msgstr "Página:"
@@ -647,7 +687,6 @@ msgid "\n"
msgstr "\n"
#: ../extensions/Exporters/FolderExport/FolderExport.glade.h:3
-#: ../src/f-spot.glade.h:11
msgid "<b>Destination</b>"
msgstr "<b>Destino</b>"
@@ -695,11 +734,15 @@ msgstr "_Carpeta:"
msgid "_Save the files only"
msgstr "_Guardar sólo estos archivos"
+#: ../extensions/Exporters/GalleryExport/FormClient.cs:294
+msgid "Unhandled exception"
+msgstr "Excepción no manipulada"
+
#: ../extensions/Exporters/GalleryExport/GalleryExport.addin.xml.h:1
msgid "Web _Gallery..."
msgstr "Web _Gallery…"
-#: ../extensions/Exporters/GalleryExport/GalleryExport.cs:52
+#: ../extensions/Exporters/GalleryExport/GalleryExport.cs:53
msgid ""
"Cannot connect to a Gallery for which the version is unknown.\n"
"Please check that you have Remote plugin 1.0.8 or later"
@@ -763,25 +806,25 @@ msgid "Error uploading picture \"{0}\" to Gallery: {1}"
msgstr "Error al subir la imagen «{0}» a Gallery: {1}"
#: ../extensions/Exporters/GalleryExport/GalleryExport.cs:824
-#: ../extensions/Exporters/PicasaWebExport/PicasaWebExport.cs:727
+#: ../extensions/Exporters/PicasaWebExport/PicasaWebExport.cs:728
#: ../extensions/Exporters/SmugMugExport/SmugMugExport.cs:630
msgid "(No Gallery)"
msgstr "(No hay ninguna galería)"
#: ../extensions/Exporters/GalleryExport/GalleryExport.cs:916
-#: ../extensions/Exporters/PicasaWebExport/PicasaWebExport.cs:849
+#: ../extensions/Exporters/PicasaWebExport/PicasaWebExport.cs:850
#: ../extensions/Exporters/SmugMugExport/SmugMugExport.cs:726
msgid "(Not Connected)"
msgstr "(Desconectado)"
#: ../extensions/Exporters/GalleryExport/GalleryExport.cs:917
-#: ../extensions/Exporters/PicasaWebExport/PicasaWebExport.cs:850
+#: ../extensions/Exporters/PicasaWebExport/PicasaWebExport.cs:851
#: ../extensions/Exporters/SmugMugExport/SmugMugExport.cs:727
msgid "(No Albums)"
msgstr "(No hay álbumes)"
#: ../extensions/Exporters/GalleryExport/GalleryExport.cs:969
-#: ../extensions/Exporters/PicasaWebExport/PicasaWebExport.cs:915
+#: ../extensions/Exporters/PicasaWebExport/PicasaWebExport.cs:916
#: ../extensions/Exporters/SmugMugExport/SmugMugExport.cs:768
msgid "No account selected"
msgstr "No se seleccionó ninguna cuenta"
@@ -789,12 +832,10 @@ msgstr "No se seleccionó ninguna cuenta"
#: ../extensions/Exporters/GalleryExport/GalleryExport.glade.h:1
#: ../extensions/Exporters/PicasaWebExport/PicasaWebExport.glade.h:1
#: ../extensions/Exporters/SmugMugExport/SmugMugExport.glade.h:1
-#: ../src/f-spot.glade.h:9
msgid "<b>Album</b>"
msgstr "<b>Álbum</b>"
#: ../extensions/Exporters/GalleryExport/GalleryExport.glade.h:2
-#: ../src/f-spot.glade.h:12
msgid "<b>Gallery</b>"
msgstr "<b>Galería</b>"
@@ -836,7 +877,6 @@ msgstr "_Descripción:"
#: ../extensions/Exporters/GalleryExport/GalleryExport.glade.h:16
#: ../extensions/Exporters/PicasaWebExport/PicasaWebExport.glade.h:22
#: ../extensions/Exporters/SmugMugExport/SmugMugExport.glade.h:13
-#: ../src/f-spot.glade.h:97
msgid "_Export to Album:"
msgstr "_Exportar a un álbum:"
@@ -871,20 +911,20 @@ msgstr "_Título:"
msgid "_Username:"
msgstr "_Usuario:"
-#: ../extensions/Exporters/GalleryExport/GalleryRemote.cs:361
+#: ../extensions/Exporters/GalleryExport/GalleryRemote.cs:362
msgid "Error reading server response"
msgstr "Error al leer la respuesta del servidor"
#. failed to find the response
-#: ../extensions/Exporters/GalleryExport/GalleryRemote.cs:373
+#: ../extensions/Exporters/GalleryExport/GalleryRemote.cs:374
msgid "Server returned response without Gallery content"
msgstr "El servidor devolvió una respuesta sin contenido de Gallery"
-#: ../extensions/Exporters/GalleryExport/GalleryRemote.cs:710
+#: ../extensions/Exporters/GalleryExport/GalleryRemote.cs:711
msgid "Error while creating new album"
msgstr "Error al crear el álbum nuevo"
-#: ../extensions/Exporters/GalleryExport/GalleryRemote.cs:711
+#: ../extensions/Exporters/GalleryExport/GalleryRemote.cs:712
#, csharp-format
msgid ""
"The following error was encountered while attempting to perform the "
@@ -898,38 +938,38 @@ msgstr ""
msgid "_PicasaWeb..."
msgstr "_PicasaWeb…"
-#: ../extensions/Exporters/PicasaWebExport/PicasaWebExport.cs:441
+#: ../extensions/Exporters/PicasaWebExport/PicasaWebExport.cs:442
msgid "Error while creating Album"
msgstr "Error al crear el álbum"
-#: ../extensions/Exporters/PicasaWebExport/PicasaWebExport.cs:442
+#: ../extensions/Exporters/PicasaWebExport/PicasaWebExport.cs:443
#, csharp-format
msgid ""
"The following error was encountered while attempting to create an album: {0}"
msgstr "Se encontró el siguiente error al intentar crear un álbum: {0}"
-#: ../extensions/Exporters/PicasaWebExport/PicasaWebExport.cs:620
+#: ../extensions/Exporters/PicasaWebExport/PicasaWebExport.cs:621
#, csharp-format
msgid "{0} Sent"
msgstr "{0} enviadas"
-#: ../extensions/Exporters/PicasaWebExport/PicasaWebExport.cs:622
+#: ../extensions/Exporters/PicasaWebExport/PicasaWebExport.cs:623
#, csharp-format
msgid "{0} of approx. {1}"
msgstr "{0} de aproximadamente {1}"
-#: ../extensions/Exporters/PicasaWebExport/PicasaWebExport.cs:691
+#: ../extensions/Exporters/PicasaWebExport/PicasaWebExport.cs:692
#: ../extensions/Exporters/SmugMugExport/SmugMugExport.cs:594
#, csharp-format
msgid "Error Uploading To Gallery: {0}"
msgstr "Error al subir a la galería: {0}"
-#: ../extensions/Exporters/PicasaWebExport/PicasaWebExport.cs:778
+#: ../extensions/Exporters/PicasaWebExport/PicasaWebExport.cs:779
#, csharp-format
msgid "Available space: {0}, {1}% used out of {2}"
msgstr "Espacio disponible: {0}, {1} usado de {2}"
-#: ../extensions/Exporters/PicasaWebExport/PicasaWebExport.cs:891
+#: ../extensions/Exporters/PicasaWebExport/PicasaWebExport.cs:892
#, csharp-format
msgid ""
"The selected album has a limit of {0} pictures,\n"
@@ -1082,7 +1122,7 @@ msgid "Compressed fil_e..."
msgstr "Archivo co_mprimido…"
#: ../extensions/Exporters/ZipExport/ZipExport.cs:47
-#: ../src/Widgets/EditorPage.cs:197
+#: ../src/Widgets/EditorPage.cs:198
msgid "No selection available"
msgstr "No hay ninguna selección disponible"
@@ -1123,6 +1163,10 @@ msgstr "_Lugar:"
msgid "_Scale:"
msgstr "E_scalar:"
+#: ../extensions/Tools/HashJob/HashJob.addin.xml.h:1
+msgid "Check for Duplicates..."
+msgstr "Buscar duplicados…"
+
#: ../extensions/Tools/HashJob/HashJob.cs:53
msgid ""
"In order to detect duplicates on pictures you imported before 0.5.0, F-Spot "
@@ -1142,7 +1186,7 @@ msgstr ""
"Actualmente tiene {0} fotos que requieren calcular su MD5 y {1} trabajo "
"pendiente"
-#: ../extensions/Tools/HashJob/HashJob.cs:75 ../src/ui/main_window.ui.h:37
+#: ../extensions/Tools/HashJob/HashJob.cs:75 ../src/ui/main_window.ui.h:38
msgid "_Close"
msgstr "_Cerrar"
@@ -1154,10 +1198,6 @@ msgstr "Procesando imágenes…"
msgid "Stopped"
msgstr "Detenido"
-#: ../extensions/Tools/HashJob/HashJob.addin.xml.h:1
-msgid "Check for Duplicates..."
-msgstr "Buscar duplicados…"
-
#: ../extensions/Tools/LiveWebGallery/GalleryRequestHandler.cs:107
msgid "F-Spot Gallery"
msgstr "Galería F-Spot"
@@ -1190,6 +1230,19 @@ msgstr "Seleccionadas"
msgid "Live Web Gallery"
msgstr "Galería web en línea"
+#: ../extensions/Tools/LiveWebGallery/LiveWebGalleryDialog.cs:89
+msgid "none"
+msgstr "ninguna"
+
+#: ../extensions/Tools/LiveWebGallery/LiveWebGalleryDialog.cs:92
+#, csharp-format
+msgid " Gallery: {0}, Photos: {1}, Last client: {3}"
+msgstr " Galería: {0}, Fotos: {1}, Último cliente: {3}"
+
+#: ../extensions/Tools/LiveWebGallery/LiveWebGalleryDialog.cs:156
+msgid "Gallery is inactive"
+msgstr "La galería está inactiva"
+
#: ../extensions/Tools/LiveWebGallery/ui/LiveWebGallery.ui.h:1
msgid ""
"<small><i>The gallery stays active until you either deactivate it or close\n"
@@ -1253,19 +1306,6 @@ msgstr "Compartir:"
msgid "Views:"
msgstr "Vistas:"
-#: ../extensions/Tools/LiveWebGallery/LiveWebGalleryDialog.cs:89
-msgid "none"
-msgstr "ninguna"
-
-#: ../extensions/Tools/LiveWebGallery/LiveWebGalleryDialog.cs:92
-#, csharp-format
-msgid " Gallery: {0}, Photos: {1}, Last client: {3}"
-msgstr " Galería: {0}, Fotos: {1}, Último cliente: {3}"
-
-#: ../extensions/Tools/LiveWebGallery/LiveWebGalleryDialog.cs:156
-msgid "Gallery is inactive"
-msgstr "La galería está inactiva"
-
#: ../extensions/Tools/MergeDb/MergeDb.addin.xml.h:1
msgid "Merge Db"
msgstr "Combinar base de datos"
@@ -1351,11 +1391,11 @@ msgid "New Rolls Only"
msgstr "Sólo carretes nuevos"
#: ../extensions/Tools/MergeDb/MergeDb.glade.h:15
-#: ../src/FileImportBackend.cs:291 ../src/UI.Dialog/ThreadProgressDialog.cs:58
+#: ../src/UI.Dialog/ThreadProgressDialog.cs:57
msgid "Skip"
msgstr "Saltar"
-#: ../extensions/Tools/MergeDb/PickFolderDialog.cs:33
+#: ../extensions/Tools/MergeDb/PickFolderDialog.cs:34
#, csharp-format
msgid ""
"<big>The database refers to files contained in the <b>{0}</b> folder.\n"
@@ -1394,26 +1434,9 @@ msgstr "Hacer de F-Spot su salvapantallas"
msgid "Screensaver Configuration"
msgstr "Configuración del salvapantallas"
-#: ../f-spot.desktop.in.in.h:1 ../f-spot-import.desktop.in.in.h:1
-#: ../f-spot-view.desktop.in.in.h:1 ../src/ui/main_window.ui.h:10
-msgid "F-Spot"
-msgstr "F-Spot"
-
-#: ../f-spot.desktop.in.in.h:2 ../f-spot-import.desktop.in.in.h:2
-msgid "F-Spot Photo Manager"
-msgstr "Gestor de fotos F-Spot"
-
-#: ../f-spot.desktop.in.in.h:3
-msgid "Organize, enjoy, and share your photos"
-msgstr "Organice, diviértase y comparta sus fotografías"
-
-#: ../f-spot.desktop.in.in.h:4 ../f-spot-import.desktop.in.in.h:4
-msgid "Photo Manager"
-msgstr "Gestor de fotografías"
-
#: ../f-spot.schemas.in.h:1
msgid "Display of transparent parts."
-msgstr ""
+msgstr "Mostrado de las partes transparentes."
#: ../f-spot.schemas.in.h:2
msgid "Enable this to allow interpolation on zoomed images."
@@ -1521,19 +1544,19 @@ msgstr "La dimensión de la altura que usar para el diálogo de importación."
#: ../f-spot.schemas.in.h:27
msgid "The height dimension to use for the main window."
-msgstr ""
+msgstr "La dimensión de la altura que usar para la ventana principal."
#: ../f-spot.schemas.in.h:28
msgid "The height dimension to use for the photo viewer window."
-msgstr ""
+msgstr "La dimensión de la altura que usar para la ventana del visor de fotos."
#: ../f-spot.schemas.in.h:29
msgid "The orientation of the filmstrip, if shown."
-msgstr ""
+msgstr "La orientación de la tira de imágenes, si se muestra."
#: ../f-spot.schemas.in.h:30
msgid "The orientation of the filmstrip."
-msgstr ""
+msgstr "La orientación de la tira de imágenes."
#: ../f-spot.schemas.in.h:31
msgid "The size (width) of the sidebar in the main window."
@@ -1604,19 +1627,7 @@ msgstr ""
"o color personalizado puede ser útil al ver iconos u otros trabajos "
"artísticos con partes transparentes."
-#: ../f-spot-import.desktop.in.in.h:3
-msgid "Import into F-Spot"
-msgstr "Importar en F-Spot"
-
-#: ../f-spot-view.desktop.in.in.h:2
-msgid "F-Spot Photo Viewer"
-msgstr "Visor de fotos F-Spot"
-
-#: ../f-spot-view.desktop.in.in.h:3
-msgid "Photo Viewer"
-msgstr "Visor de fotos"
-
-#: ../lib/libfspot/f-jpeg-utils.c:441 ../src/RotateCommand.cs:224
+#: ../lib/libfspot/f-jpeg-utils.c:441 ../src/RotateCommand.cs:211
msgid "File not found"
msgstr "No se encontró el archivo"
@@ -1629,67 +1640,12 @@ msgstr "Tipo de transformación desconocida %d"
msgid "Operation failed"
msgstr "Falló la operación"
-#: ../src/CameraFileSelectionDialog.cs:76
-msgid "Preview"
-msgstr "Previsualizar"
-
-#: ../src/CameraFileSelectionDialog.cs:78
-msgid "Path"
-msgstr "Ruta"
-
-#: ../src/CameraFileSelectionDialog.cs:80 ../src/f-spot.glade.h:47
-msgid "File"
-msgstr "Archivo"
-
-#: ../src/CameraFileSelectionDialog.cs:102
-msgid "Select Tag"
-msgstr "Seleccionar etiqueta"
-
-#: ../src/CameraFileSelectionDialog.cs:138
-msgid "Downloading Previews"
-msgstr "Descargando las previsualizaciones"
-
-#: ../src/CameraFileSelectionDialog.cs:148
-#, csharp-format
-msgid "Downloading Preview of {0}"
-msgstr "Descargando la previsualización de «{0}»"
-
-#: ../src/CameraFileSelectionDialog.cs:220
-#, csharp-format
-msgid "Copying file {0} of {1}"
-msgstr "Copiando fotografía {0} de {1}"
-
-#: ../src/CameraFileSelectionDialog.cs:235
-msgid "Error transferring file"
-msgstr "Error al transferir el archivo"
-
-#: ../src/CameraFileSelectionDialog.cs:244
-msgid "Download Complete"
-msgstr "Descarga completada"
-
-#: ../src/CameraFileSelectionDialog.cs:244
-msgid "Done Copying Files"
-msgstr "Finalizó la copia de los archivos"
-
-#: ../src/CameraFileSelectionDialog.cs:268
-#, csharp-format
-msgid "Transferring \"{0}\" from camera"
-msgstr "Transfiriendo «{0}» desde la cámara"
-
-#: ../src/CameraSelectionDialog.cs:29 ../src/Widgets/InfoBox.cs:231
-msgid "Camera"
-msgstr "Cámara"
-
-#: ../src/CameraSelectionDialog.cs:30
-msgid "Port"
-msgstr "Puerto"
-
-#: ../src/Core/App.cs:278
+#: ../src/Core/App.cs:274
#, csharp-format
msgid "No photos matching {0} found"
msgstr "No se encontraron fotos coincidentes con {0}"
-#: ../src/Core/App.cs:279
+#: ../src/Core/App.cs:275
#, csharp-format
msgid ""
"The tag \"{0}\" is not applied to any photos. Try adding\n"
@@ -1700,11 +1656,11 @@ msgstr ""
"la etiqueta a algunas fotos o seleccionar una etiqueta distinta\n"
"en el diálogo de preferencias de F-Spot."
-#: ../src/Core/App.cs:283
+#: ../src/Core/App.cs:279
msgid "Search returned no results"
msgstr "La búsqueda no devolvió ningún resultado"
-#: ../src/Core/App.cs:284
+#: ../src/Core/App.cs:280
msgid ""
"The tag F-Spot is looking for does not exist. Try\n"
"selecting a different tag in the F-Spot preference\n"
@@ -1715,38 +1671,27 @@ msgstr ""
"preferencias de F-Spot."
#. Note for translators: Reparented is a picture becoming a version of another one
-#: ../src/Core/Photo.cs:473
+#: ../src/Core/Photo.cs:350
msgid "Reparented"
msgstr "Se ha cambiado el padre/la madre"
-#: ../src/Core/Photo.cs:473
-#, csharp-format
-msgid "Reparented ({0})"
-msgstr "Se ha cambiado el padre/la madre ({0})"
-
-#: ../src/Core/Photo.cs:492
+#: ../src/Core/Photo.cs:367
#, csharp-format
msgid "Modified"
msgid_plural "Modified ({0})"
msgstr[0] "Modificada"
msgstr[1] "Modificada ({0})"
-#: ../src/Core/Photo.cs:513
+#: ../src/Core/Photo.cs:390
#, csharp-format
msgid "Modified in {1}"
msgstr "Modificada en {1}"
-#: ../src/Core/Photo.cs:513
+#: ../src/Core/Photo.cs:390
#, csharp-format
msgid "Modified in {1} ({0})"
msgstr "Modificada en {1} ({0})"
-#. Note that the original version is never stored in the photo_versions table in the
-#. database.
-#: ../src/Core/Photo.cs:671 ../src/f-spot.glade.h:62
-msgid "Original"
-msgstr "Original"
-
#: ../src/Editors/AutoStretchEditor.cs:17
msgid "Auto Color"
msgstr "Ajustar el color"
@@ -1759,43 +1704,43 @@ msgstr "Ajustar colores"
msgid "Adjust"
msgstr "Ajustar"
-#: ../src/Editors/CropEditor.cs:35
+#: ../src/Editors/CropEditor.cs:36
msgid "4 x 3 (Book)"
msgstr "4 x 3 (álbum)"
-#: ../src/Editors/CropEditor.cs:36
+#: ../src/Editors/CropEditor.cs:37
msgid "4 x 6 (Postcard)"
msgstr "4 x 6 (postal)"
-#: ../src/Editors/CropEditor.cs:37
+#: ../src/Editors/CropEditor.cs:38
msgid "5 x 7 (L, 2L)"
msgstr "5 x 7 (L, 2L)"
-#: ../src/Editors/CropEditor.cs:38
+#: ../src/Editors/CropEditor.cs:39
msgid "8 x 10"
msgstr "8 x 10"
-#: ../src/Editors/CropEditor.cs:39
+#: ../src/Editors/CropEditor.cs:40
msgid "Square"
msgstr "Cuadrado"
-#: ../src/Editors/CropEditor.cs:42
+#: ../src/Editors/CropEditor.cs:43
msgid "Crop"
msgstr "Recortar"
-#: ../src/Editors/CropEditor.cs:73
+#: ../src/Editors/CropEditor.cs:74
msgid "Select the area that needs cropping."
msgstr "Seleccionar el área que debe recortarse."
-#: ../src/Editors/CropEditor.cs:98
+#: ../src/Editors/CropEditor.cs:99
msgid "No Constraint"
msgstr "Sin restricción"
-#: ../src/Editors/CropEditor.cs:99
+#: ../src/Editors/CropEditor.cs:100
msgid "Same as photo"
msgstr "El mismo que la foto"
-#: ../src/Editors/CropEditor.cs:104
+#: ../src/Editors/CropEditor.cs:105
msgid "Custom Ratios..."
msgstr "Tasas personalizadas…"
@@ -1827,24 +1772,11 @@ msgstr "Foco suave"
msgid "Straighten"
msgstr "Enderezar"
-#: ../src/FileImportBackend.cs:289
-msgid "Import error"
-msgstr "Error al importar"
-
-#: ../src/FileImportBackend.cs:290
-#, csharp-format
-msgid "Error importing {0}{2}{2}{1}"
-msgstr "Error al importar {0}{2}{2}{1}"
-
#: ../src/Filters/ResizeFilter.cs:70 ../src/Filters/SharpFilter.cs:52
#, csharp-format
msgid "No way to save files of type \"{0}\""
msgstr "No hay forma de guardar los archivos de tipo «{0}»"
-#: ../src/FormClient.cs:295
-msgid "Unhandled exception"
-msgstr "Excepción no manipulada"
-
#: ../src/FSpot.addin.xml.h:1
msgid "Copy Photo"
msgstr "Copiar foto"
@@ -1857,17 +1789,17 @@ msgstr "Exportar a"
msgid "Open _With"
msgstr "Abrir _con"
-#: ../src/FSpot.addin.xml.h:4 ../src/ui/main_window.ui.h:15
+#: ../src/FSpot.addin.xml.h:4 ../src/ui/main_window.ui.h:16
msgid "Rem_ove Tag"
msgstr "Q_uitar etiqueta"
-#: ../src/FSpot.addin.xml.h:5 ../src/f-spot.glade.h:69
-#: ../src/SingleView.cs:425 ../src/ui/main_window.ui.h:16
+#: ../src/FSpot.addin.xml.h:5 ../src/f-spot.glade.h:24
+#: ../src/SingleView.cs:423 ../src/ui/main_window.ui.h:17
msgid "Rotate _Left"
msgstr "Rotar a la _izquierda"
-#: ../src/FSpot.addin.xml.h:6 ../src/f-spot.glade.h:70
-#: ../src/SingleView.cs:426 ../src/ui/main_window.ui.h:17
+#: ../src/FSpot.addin.xml.h:6 ../src/f-spot.glade.h:25
+#: ../src/SingleView.cs:424 ../src/ui/main_window.ui.h:18
msgid "Rotate _Right"
msgstr "Rotar a la _derecha"
@@ -1875,75 +1807,35 @@ msgstr "Rotar a la _derecha"
msgid "Tools"
msgstr "Herramientas"
-#: ../src/FSpot.addin.xml.h:8 ../src/ui/main_window.ui.h:32
-msgid "_Attach Tag"
-msgstr "_Adjuntar etiqueta"
-
-#: ../src/FSpot.addin.xml.h:9 ../src/ui/main_window.ui.h:41
+#: ../src/FSpot.addin.xml.h:8 ../src/ui/main_window.ui.h:42
msgid "_Delete From Drive"
msgstr "_Eliminar de la unidad"
-#: ../src/FSpot.addin.xml.h:10 ../src/ui/main_window.ui.h:59
+#: ../src/FSpot.addin.xml.h:9 ../src/ui/main_window.ui.h:61
msgid "_Remove From Catalog"
msgstr "_Quitar del catálogo"
#: ../src/f-spot.glade.h:1
-msgid " "
-msgstr " "
-
-#: ../src/f-spot.glade.h:2
-msgid "1024 px"
-msgstr "1024 px"
-
-#: ../src/f-spot.glade.h:3
-msgid "320 px"
-msgstr "320 px"
-
-#: ../src/f-spot.glade.h:4
-msgid "480 px"
-msgstr "480 px"
-
-#: ../src/f-spot.glade.h:5
-msgid "640 px"
-msgstr "640 px"
-
-#: ../src/f-spot.glade.h:6
-msgid "800 px"
-msgstr "800 px"
-
-#: ../src/f-spot.glade.h:7
-msgid "<b></b>"
-msgstr "<b></b>"
-
-#: ../src/f-spot.glade.h:10
msgid "<b>Co_rrections</b>"
msgstr "<b>Cor_recciones</b>"
-#: ../src/f-spot.glade.h:13
+#: ../src/f-spot.glade.h:2
msgid "<b>Image Interpolation</b>"
msgstr "<b>Interpolación de imagen</b>"
-#: ../src/f-spot.glade.h:15
-msgid "<b>Size</b>"
-msgstr "<b>Tamaño</b>"
-
-#: ../src/f-spot.glade.h:17
-msgid "<b>Summary</b>"
-msgstr "<b>Resumen</b>"
-
-#: ../src/f-spot.glade.h:18
+#: ../src/f-spot.glade.h:3
msgid "<b>Transparent Parts</b>"
msgstr "<b>Partes transparentes</b>"
-#: ../src/f-spot.glade.h:19
+#: ../src/f-spot.glade.h:4
msgid "<b>View all pictures imported</b>"
msgstr "<b>Ver todas las imágenes importadas</b>"
-#: ../src/f-spot.glade.h:20
+#: ../src/f-spot.glade.h:5
msgid "<b>_White Balance</b>"
msgstr "<b>Balance de _blancos</b>"
-#: ../src/f-spot.glade.h:21
+#: ../src/f-spot.glade.h:6
msgid ""
"<small><i>Enable this to allow interpolation on zoomed images. You shouldn't "
"disable this for viewing photos, but disabling the interpolation could be "
@@ -1953,7 +1845,7 @@ msgstr ""
"ampliadas. No debería desactivar esto para ver fotos, pero desactivar la "
"interpolación podría ser útil en el diseño de iconos.</i></small>"
-#: ../src/f-spot.glade.h:22
+#: ../src/f-spot.glade.h:7
msgid ""
"<small><i>You can choose how to display transparent parts in images. This "
"option has no effect on photos, but setting this as check pattern or custom "
@@ -1965,358 +1857,187 @@ msgstr ""
"patrón de cuadros o color personalizado puede ser útil al ver iconos u otros "
"trabajos artísticos con partes transparentes.</i></small>"
-#: ../src/f-spot.glade.h:23
+#: ../src/f-spot.glade.h:8
msgid "As _background"
msgstr "Como _fondo de pantalla"
-#: ../src/f-spot.glade.h:24
+#: ../src/f-spot.glade.h:9
msgid "As _custom color: "
msgstr "Como _color personalizado: "
-#: ../src/f-spot.glade.h:25
+#: ../src/f-spot.glade.h:10
msgid "As check _pattern"
msgstr "Como _patrón de cuadros"
-#: ../src/f-spot.glade.h:26
-msgid "Attach Tags:"
-msgstr "Adjuntar etiquetas:"
-
-#: ../src/f-spot.glade.h:27
-msgid "Attach tag:"
-msgstr "Adjuntar etiqueta:"
-
-#: ../src/f-spot.glade.h:29
-msgid "CD"
-msgstr "CD"
-
-#: ../src/f-spot.glade.h:30
+#: ../src/f-spot.glade.h:11
msgid "C_ontrast:"
msgstr "C_ontraste:"
-#: ../src/f-spot.glade.h:31
+#: ../src/f-spot.glade.h:12
msgid "C_reate"
msgstr "C_rear"
-#: ../src/f-spot.glade.h:32
-msgid "Camera Selection"
-msgstr "Seleccionar la cámara"
-
-#: ../src/f-spot.glade.h:33
-msgid "Copy files to the Photos folder"
-msgstr "Copiar archivos a la carpeta Photos"
-
-#: ../src/f-spot.glade.h:34
-msgid "Create Mail"
-msgstr "Crear correo"
-
-#: ../src/f-spot.glade.h:35
+#: ../src/f-spot.glade.h:13
msgid "Create _icon for this tag when first used"
msgstr "Crear _icono para esta etiqueta al usarla por primera vez"
-#: ../src/f-spot.glade.h:36
-msgid "Create a mail with the selected photos (possibly resized) attached"
-msgstr ""
-"Crea un correo-e con las fotos seleccionadas (posiblemente redimensionadas) "
-"adjuntas"
-
-#: ../src/f-spot.glade.h:37
-msgid "Detect duplicates"
-msgstr "Detectar duplicados"
-
-#: ../src/f-spot.glade.h:38
+#: ../src/f-spot.glade.h:14
msgid "Display File _Names"
msgstr "Mostrar _nombres de archivo"
-#: ../src/f-spot.glade.h:39
+#: ../src/f-spot.glade.h:15
msgid "Display only those photos that were imported in specified Rolls."
msgstr ""
"Mostrar sólo aquellas fotos que se importaron en carretes especificados."
-#: ../src/f-spot.glade.h:40
-msgid "Do not send a mail"
-msgstr "No enviar un correo"
-
-#: ../src/f-spot.glade.h:41
-msgid "E-_Mail:"
-msgstr "_Correo-e:"
-
-#: ../src/f-spot.glade.h:42
-msgid "E_xport titles and comments"
-msgstr "_Exportar títulos y comentarios"
-
-#: ../src/f-spot.glade.h:43
-msgid "Estimated new size"
-msgstr "Tamaño nuevo estimado"
-
-#: ../src/f-spot.glade.h:45
-msgid "Extra large"
-msgstr "Enorme"
-
-#: ../src/f-spot.glade.h:46
+#: ../src/f-spot.glade.h:16
msgid "F-Spot View"
msgstr "Vista F-Spot"
-#: ../src/f-spot.glade.h:48
+#: ../src/f-spot.glade.h:17
msgid "Filter on selected rolls"
msgstr "Filtrar en los carretes seleccionados"
-#: ../src/f-spot.glade.h:49
-msgid "G_allery:"
-msgstr "_Galería:"
-
-#: ../src/f-spot.glade.h:50
-msgid "Gallery"
-msgstr "Galería"
-
-#: ../src/f-spot.glade.h:51 ../src/ImportCommand.cs:547
-#: ../src/MainWindow.cs:301
-msgid "Import"
-msgstr "Importar"
-
-#. Translators: this string means 'source of import'
-#: ../src/f-spot.glade.h:53
-msgid "Import Source:"
-msgstr "Origen de la importación:"
-
-#: ../src/f-spot.glade.h:54
-msgid "Include subfolders"
-msgstr "Incluir subcarpetas"
-
-#: ../src/f-spot.glade.h:55
-msgid "Large"
-msgstr "Grande"
-
-#: ../src/f-spot.glade.h:56
+#: ../src/f-spot.glade.h:18
msgid "Manage your custom selection ratios"
msgstr "Gestionar sus tasas de selección personalizadas"
-#: ../src/f-spot.glade.h:57
-msgid "Medium"
-msgstr "Medio"
-
-#: ../src/f-spot.glade.h:59
+#: ../src/f-spot.glade.h:19
msgid "Number of photos in selected rolls:"
msgstr "Número de fotografías en los carretes seleccionados:"
-#: ../src/f-spot.glade.h:60
-msgid "Number of pictures"
-msgstr "Número de imágenes"
-
-#: ../src/f-spot.glade.h:61
+#: ../src/f-spot.glade.h:20
msgid "Open _Folder..."
msgstr "Abrir _carpeta…"
-#: ../src/f-spot.glade.h:63
-msgid "Original size (possible very large file size)"
-msgstr "Tamaño original (tamaño de archivo posiblemente muy grande)"
-
-#: ../src/f-spot.glade.h:64 ../src/UI.Dialog/ui/EditTagDialog.ui.h:4
+#: ../src/f-spot.glade.h:21 ../src/UI.Dialog/ui/EditTagDialog.ui.h:4
msgid "P_arent Tag:"
msgstr "Etiqueta _madre:"
-#: ../src/f-spot.glade.h:65
-msgid "Pause"
-msgstr "Pausar"
-
-#: ../src/f-spot.glade.h:66
+#: ../src/f-spot.glade.h:22
msgid "Preferences"
msgstr "Preferencias"
-#: ../src/f-spot.glade.h:67 ../src/ItemAction.cs:123
-msgid "Previous"
-msgstr "Anterior"
-
-#: ../src/f-spot.glade.h:68
+#: ../src/f-spot.glade.h:23
msgid "Repair"
msgstr "Reparar"
-#: ../src/f-spot.glade.h:71
-msgid "Select Photos to Copy From Camera..."
-msgstr "Seleccionar las fotos para copiar desde la cámara…"
-
-#: ../src/f-spot.glade.h:72
+#: ../src/f-spot.glade.h:26
msgid "Select a Tag..."
msgstr "Seleccionar una etiqueta…"
-#: ../src/f-spot.glade.h:73
-msgid "Select the camera from which you want to transfer files"
-msgstr "Seleccione la cámara desde la que desea transferir archivos"
-
-#: ../src/f-spot.glade.h:74
-msgid "Selected Camera: "
-msgstr "Cámara seleccionada: "
-
-#: ../src/f-spot.glade.h:75
+#: ../src/f-spot.glade.h:27
msgid "Selection Constraints"
msgstr "Selección de restricciones"
-#: ../src/f-spot.glade.h:76 ../src/ui/main_window.ui.h:21
+#: ../src/f-spot.glade.h:28 ../src/ui/main_window.ui.h:22
msgid "Set as _Background"
msgstr "Establecer como _fondo de pantalla"
-#: ../src/f-spot.glade.h:77
+#: ../src/f-spot.glade.h:29
msgid "Show all photos."
msgstr "Mostrar todas las fotos."
-#: ../src/f-spot.glade.h:78
+#: ../src/f-spot.glade.h:30
msgid "Show or hide the side pane"
msgstr "Mostrar u ocultar el panel lateral"
-#: ../src/f-spot.glade.h:79
+#: ../src/f-spot.glade.h:31
msgid "Show or hide the toolbar"
msgstr "Mostrar u ocultar la barra de herramientas"
-#: ../src/f-spot.glade.h:80
+#: ../src/f-spot.glade.h:32
msgid "Side _pane"
msgstr "_Panel lateral"
-#: ../src/f-spot.glade.h:81
-msgid "Small"
-msgstr "Pequeño"
-
-#: ../src/f-spot.glade.h:82
-msgid ""
-"Specify if an original size picture should be rotated or not. Smaller sizes "
-"are automatically rotated."
-msgstr ""
-"Especifique su un tamaño original de imagen debe rotarse o no. Los tamaños "
-"pequeños se rotan automáticamente."
-
-#: ../src/f-spot.glade.h:83
-msgid "Strip image _metadata"
-msgstr "Recorta los _metadatos de la imagen"
-
#. Note for translators: meant as Temperature
-#: ../src/f-spot.glade.h:85
+#: ../src/f-spot.glade.h:34
msgid "Te_mp:"
msgstr "Te_mperatura:"
-#: ../src/f-spot.glade.h:86
-msgid "Tiny"
-msgstr "Diminuto"
-
-#: ../src/f-spot.glade.h:87
-msgid "Total original size"
-msgstr "Tamaño total original"
-
-#: ../src/f-spot.glade.h:88 ../src/ui/main_window.ui.h:28
+#: ../src/f-spot.glade.h:35 ../src/ui/main_window.ui.h:29
msgid "Zoom _in"
msgstr "_Ampliar"
-#: ../src/f-spot.glade.h:89 ../src/ui/main_window.ui.h:29
+#: ../src/f-spot.glade.h:36 ../src/ui/main_window.ui.h:30
msgid "Zoom _out"
msgstr "_Reducir"
-#: ../src/f-spot.glade.h:90 ../src/ui/main_window.ui.h:30
+#: ../src/f-spot.glade.h:37 ../src/ui/main_window.ui.h:31
msgid "Zoom in"
msgstr "Ampliar"
-#: ../src/f-spot.glade.h:91 ../src/ui/main_window.ui.h:31
+#: ../src/f-spot.glade.h:38 ../src/ui/main_window.ui.h:32
msgid "Zoom out"
msgstr "Reducir"
-#: ../src/f-spot.glade.h:92
+#: ../src/f-spot.glade.h:39
msgid "_Brightness:"
msgstr "_Brillo:"
-#: ../src/f-spot.glade.h:93
-msgid "_Create Mail"
-msgstr "_Crear correo-e"
-
-#: ../src/f-spot.glade.h:94 ../src/ui/main_window.ui.h:44
+#: ../src/f-spot.glade.h:40 ../src/ui/main_window.ui.h:45
msgid "_Edit"
msgstr "_Editar"
-#: ../src/f-spot.glade.h:98
+#: ../src/f-spot.glade.h:42
msgid "_Exposure:"
msgstr "_Exposición:"
-#: ../src/f-spot.glade.h:99
-msgid "_Flickr"
-msgstr "_Flickr"
-
-#: ../src/f-spot.glade.h:100 ../src/ui/main_window.ui.h:48
+#: ../src/f-spot.glade.h:43 ../src/ui/main_window.ui.h:49
msgid "_Fullscreen"
msgstr "_Pantalla completa"
-#: ../src/f-spot.glade.h:101
-msgid "_Gallery"
-msgstr "_Galería"
-
-#: ../src/f-spot.glade.h:102 ../src/ui/main_window.ui.h:49
+#: ../src/f-spot.glade.h:44 ../src/ui/main_window.ui.h:50
msgid "_Help"
msgstr "Ay_uda"
-#: ../src/f-spot.glade.h:103
+#: ../src/f-spot.glade.h:45
msgid "_Hue:"
msgstr "_Tono:"
-#: ../src/f-spot.glade.h:104
+#: ../src/f-spot.glade.h:46
msgid "_Interpolate image on zoom"
msgstr "_Interpolar imagen al ampliar"
-#: ../src/f-spot.glade.h:105
+#: ../src/f-spot.glade.h:47
msgid "_New Window"
msgstr "Ventana _nueva"
-#: ../src/f-spot.glade.h:106
-msgid "_Open album in browser when done uploading"
-msgstr "_Abrir el álbum en el navegador cuando se termine de subir"
-
-#: ../src/f-spot.glade.h:107
-msgid "_Open destination when done exporting"
-msgstr "_Abrir el destino cuando se termine de exportar"
-
-#: ../src/f-spot.glade.h:108 ../src/ui/main_window.ui.h:56
+#: ../src/f-spot.glade.h:48 ../src/ui/main_window.ui.h:58
msgid "_Photo"
msgstr "_Foto"
-#: ../src/f-spot.glade.h:110
+#: ../src/f-spot.glade.h:49
msgid "_Saturation:"
msgstr "_Saturación:"
-#: ../src/f-spot.glade.h:111
-msgid "_Scale photos to no larger than: "
-msgstr "_Escalar las fotos para que no sean más grandes de: "
-
-#: ../src/f-spot.glade.h:112 ../src/ui/main_window.ui.h:67
+#: ../src/f-spot.glade.h:50 ../src/ui/main_window.ui.h:69
msgid "_Slideshow"
msgstr "_Diapositivas"
-#: ../src/f-spot.glade.h:113
-msgid "_Strip metadata"
-msgstr "_Recortar metadatos"
-
-#: ../src/f-spot.glade.h:114 ../src/UI.Dialog/ui/EditTagDialog.ui.h:6
+#: ../src/f-spot.glade.h:51 ../src/UI.Dialog/ui/EditTagDialog.ui.h:6
msgid "_Tag Name:"
msgstr "Nombre de la _etiqueta:"
-#: ../src/f-spot.glade.h:115
+#: ../src/f-spot.glade.h:52
msgid "_Tint:"
msgstr "Ma_tiz:"
-#: ../src/f-spot.glade.h:116
+#: ../src/f-spot.glade.h:53
msgid "_Toolbar"
msgstr "Barra de _herramientas"
-#: ../src/f-spot.glade.h:117
-msgid "_URI:"
-msgstr "_URI:"
-
-#: ../src/f-spot.glade.h:118 ../src/ui/main_window.ui.h:75
+#: ../src/f-spot.glade.h:54 ../src/ui/main_window.ui.h:77
msgid "_View"
msgstr "_Ver"
-#: ../src/f-spot.glade.h:119
-msgid "_Virtual Filesystem"
-msgstr "Sistema de archivos _virtual"
-
-#: ../src/f-spot.glade.h:120 ../src/Widgets/FindBar.cs:177
+#: ../src/f-spot.glade.h:55 ../src/Widgets/FindBar.cs:178
+#: ../src/Widgets/FindBar.cs:534
msgid "and"
msgstr "y"
#. at, or after a date, or between dates
-#: ../src/f-spot.glade.h:122
+#: ../src/f-spot.glade.h:57
msgid ""
"at\n"
"after\n"
@@ -2326,40 +2047,36 @@ msgstr ""
"después de\n"
"entre"
-#: ../src/f-spot.glade.h:126
-msgid "x"
-msgstr "x"
-
-#: ../src/FullScreenView.cs:58
+#: ../src/FullScreenView.cs:59
msgid "Hide"
msgstr "Ocultar"
-#: ../src/FullScreenView.cs:60
+#: ../src/FullScreenView.cs:61
msgid "Hide Toolbar"
msgstr "Ocultar barra de herramientas"
-#: ../src/FullScreenView.cs:66
+#: ../src/FullScreenView.cs:67
msgid "Info"
msgstr "Información"
-#: ../src/FullScreenView.cs:68 ../src/Widgets/InfoBox.cs:201
+#: ../src/FullScreenView.cs:69 ../src/Widgets/InfoBox.cs:202
msgid "Image Information"
msgstr "Información de la imagen"
-#: ../src/FullScreenView.cs:73
+#: ../src/FullScreenView.cs:74
msgid "Exit fullscreen"
msgstr "Salir de pantalla completa"
-#: ../src/FullScreenView.cs:81 ../src/MainWindow.cs:341
-#: ../src/SingleView.cs:88
+#: ../src/FullScreenView.cs:82 ../src/MainWindow.cs:313
+#: ../src/SingleView.cs:87
msgid "Slideshow"
msgstr "Diapositivas"
-#: ../src/FullScreenView.cs:82
+#: ../src/FullScreenView.cs:83
msgid "Start slideshow"
msgstr "Comenzar a mostrar las diapositivas"
-#: ../src/FullScreenView.cs:128
+#: ../src/FullScreenView.cs:129
msgid "Slide transition:"
msgstr "Transición de la diapositiva: "
@@ -2371,35 +2088,35 @@ msgstr "Más fechas"
msgid "More"
msgstr "Más"
-#: ../src/GroupSelector.cs:517 ../src/ui/main_window.ui.h:34
+#: ../src/GroupSelector.cs:530 ../src/ui/main_window.ui.h:35
msgid "_Clear Date Range"
msgstr "_Limpiar el rango de fechas"
-#: ../src/Imaging/Exif.cs:228
+#: ../src/Imaging/Exif.cs:229
msgid "Image Directory"
msgstr "Carpeta de imágenes"
-#: ../src/Imaging/Exif.cs:230
+#: ../src/Imaging/Exif.cs:231
msgid "Thumbnail Directory"
msgstr "Carpeta de miniaturas"
-#: ../src/Imaging/Exif.cs:232
+#: ../src/Imaging/Exif.cs:233
msgid "Exif Directory"
msgstr "Carpeta de datos EXIF"
-#: ../src/Imaging/Exif.cs:234
+#: ../src/Imaging/Exif.cs:235
msgid "GPS Directory"
msgstr "Carpeta GPS"
-#: ../src/Imaging/Exif.cs:236
+#: ../src/Imaging/Exif.cs:237
msgid "InterOperability Directory"
msgstr "Carpeta de interoperatibilidad"
-#: ../src/Imaging/Exif.cs:238
+#: ../src/Imaging/Exif.cs:239
msgid "Unknown Directory"
msgstr "Carpeta desconocida"
-#: ../src/Imaging/ImageFile.cs:117
+#: ../src/Imaging/ImageFile.cs:119
msgid "Writing to this file format is not supported"
msgstr "No se soporta la escritura en este formato de archivo"
@@ -2538,42 +2255,12 @@ msgstr "Género intelectual del objeto"
msgid "Unknown IIM DataSet"
msgstr "Conjunto de datos IIM desconocido"
-#: ../src/ImportCommand.cs:48 ../src/SingleView.cs:344
-msgid "Select Folder"
-msgstr "Seleccionar la carpeta"
-
-#: ../src/ImportCommand.cs:259
-msgid "(No Cameras Detected)"
-msgstr "(No se detectó ninguna cámara)"
-
-#: ../src/ImportCommand.cs:404
-#, csharp-format
-msgid "Loading {0} of {1}"
-msgstr "Cargando {0} de {1}"
-
-#: ../src/ImportCommand.cs:470
-msgid "Done Loading"
-msgstr "Finalizó la carga"
-
-#: ../src/ImportCommand.cs:684
-msgid "Directory does not exist."
-msgstr "La carpeta no existe."
-
-#: ../src/ImportCommand.cs:685
-#, csharp-format
-msgid ""
-"The directory you selected \"{0}\" does not exist. Please choose a "
-"different directory"
-msgstr ""
-"La carpeta seleccionada «{0}» no existe. Por favor, elija una carpeta "
-"distinta"
-
-#: ../src/ImportCommand.cs:738 ../src/ImportCommand.cs:740
+#: ../src/Import/ImportController.cs:406 ../src/Import/ImportController.cs:408
#: ../src/XmpTagsImporter.cs:89
msgid "Imported Tags"
msgstr "Etiquetas importadas"
-#: ../src/ItemAction.cs:79 ../src/MainWindow.cs:308 ../src/SingleView.cs:71
+#: ../src/ItemAction.cs:79 ../src/MainWindow.cs:280 ../src/SingleView.cs:70
msgid "Rotate Left"
msgstr "Rotar a la izquierda"
@@ -2581,7 +2268,7 @@ msgstr "Rotar a la izquierda"
msgid "Rotate picture left"
msgstr "Rotar la fotografía a la izquierda"
-#: ../src/ItemAction.cs:91 ../src/MainWindow.cs:312 ../src/SingleView.cs:76
+#: ../src/ItemAction.cs:91 ../src/MainWindow.cs:284 ../src/SingleView.cs:75
msgid "Rotate Right"
msgstr "Rotar a la derecha"
@@ -2593,80 +2280,76 @@ msgstr "Rotar la fotografía a la derecha"
msgid "Next picture"
msgstr "Siguiente fotografía"
+#: ../src/ItemAction.cs:123
+msgid "Previous"
+msgstr "Anterior"
+
#: ../src/ItemAction.cs:124
msgid "Previous picture"
msgstr "Anterior fotografía"
-#: ../src/MainWindow.cs:303
+#: ../src/MainWindow.cs:273 ../src/UI.Dialog/ImportDialog.cs:171
+#: ../src/ui/import.ui.h:4
+msgid "Import"
+msgstr "Importar"
+
+#: ../src/MainWindow.cs:275
msgid "Import new images"
msgstr "Importar imágenes nuevas"
-#: ../src/MainWindow.cs:319 ../src/ui/main_window.ui.h:3
+#: ../src/MainWindow.cs:291 ../src/ui/main_window.ui.h:3
msgid "Browse"
msgstr "Examinar"
-#: ../src/MainWindow.cs:323
+#: ../src/MainWindow.cs:295
msgid "Browse many photos simultaneously"
msgstr "Examinar varias fotos simultáneamente"
-#: ../src/MainWindow.cs:327
+#: ../src/MainWindow.cs:299
msgid "Edit Image"
msgstr "Editar imagen"
-#: ../src/MainWindow.cs:331
+#: ../src/MainWindow.cs:303
msgid "View and edit a photo"
msgstr "Ver y editar una foto"
-#: ../src/MainWindow.cs:336 ../src/SingleView.cs:83
+#: ../src/MainWindow.cs:308 ../src/SingleView.cs:82
msgid "Fullscreen"
msgstr "Pantalla completa"
-#: ../src/MainWindow.cs:338 ../src/SingleView.cs:85
+#: ../src/MainWindow.cs:310 ../src/SingleView.cs:84
msgid "View photos fullscreen"
msgstr "Ver fotos en pantalla completa"
-#: ../src/MainWindow.cs:343 ../src/SingleView.cs:90
+#: ../src/MainWindow.cs:315 ../src/SingleView.cs:89
msgid "View photos in a slideshow"
msgstr "Ver fotos como diapositivas"
-#: ../src/MainWindow.cs:358
+#: ../src/MainWindow.cs:330
msgid "Previous photo"
msgstr "Foto anterior"
-#: ../src/MainWindow.cs:363
+#: ../src/MainWindow.cs:335
msgid "Next photo"
msgstr "Siguiente foto"
-#: ../src/MainWindow.cs:1518
-msgid "No cameras detected."
-msgstr "No se detectó ninguna cámara."
-
-#: ../src/MainWindow.cs:1519
-msgid ""
-"F-Spot was unable to find any cameras attached to this system. Double check "
-"that the camera is connected and has power"
-msgstr ""
-"F-Spot fue incapaz de detectar ninguna cámara conectada en este equipo. "
-"Compruebe que la cámara está conectada y tiene alimentación"
-
-#: ../src/MainWindow.cs:1558
-msgid "Error connecting to camera"
-msgstr "Error al conectar con la cámara"
+#: ../src/MainWindow.cs:412
+msgid "Show _Find Bar"
+msgstr "Mostrar barra de _búsqueda"
-#: ../src/MainWindow.cs:1559
-#, csharp-format
-msgid "Received error \"{0}\" while connecting to camera"
-msgstr "Se recibió el error «{0}» al conectar con la cámara"
+#: ../src/MainWindow.cs:415
+msgid "Hide _Find Bar"
+msgstr "Ocultar barra de _búsqueda"
#. Translators, The singular case will never happen here.
-#: ../src/MainWindow.cs:1846
+#: ../src/MainWindow.cs:1719
#, csharp-format
msgid "Merge the selected tag"
msgid_plural "Merge the {0} selected tags?"
msgstr[0] "Combinar la etiqueta seleccionada"
msgstr[1] "¿Combinar las {0} etiquetas seleccionadas?"
-#: ../src/MainWindow.cs:1873
+#: ../src/MainWindow.cs:1746
msgid ""
"This operation will merge the selected tags and any sub-tags into a single "
"tag."
@@ -2674,57 +2357,57 @@ msgstr ""
"Esta operación combinará las etiquetas seleccionadas y cualquier subetiqueta "
"en una sola etiqueta."
-#: ../src/MainWindow.cs:1875
+#: ../src/MainWindow.cs:1748
msgid "_Merge Tags"
msgstr "_Combinar etiquetas"
-#: ../src/MainWindow.cs:2080
+#: ../src/MainWindow.cs:1953
#, csharp-format
msgid "{0} Photo out of {1}"
msgid_plural "{0} Photos out of {1}"
msgstr[0] "Fotografía {0} de {1}"
msgstr[1] "Fotografía {0} de {1}"
-#: ../src/MainWindow.cs:2082 ../src/SingleView.cs:467
+#: ../src/MainWindow.cs:1955 ../src/SingleView.cs:465
#, csharp-format
msgid "{0} Photo"
msgid_plural "{0} Photos"
msgstr[0] "{0} foto"
msgstr[1] "{0} fotos"
-#: ../src/MainWindow.cs:2085
+#: ../src/MainWindow.cs:1958
#, csharp-format
msgid " ({0} selected)"
msgid_plural " ({0} selected)"
msgstr[0] " ({0} seleccionada)"
msgstr[1] " ({0} seleccionadas)"
-#: ../src/MainWindow.cs:2166
+#: ../src/MainWindow.cs:2039
msgid "_Ok"
msgstr "_Aceptar"
-#: ../src/MainWindow.cs:2167
+#: ../src/MainWindow.cs:2040
msgid "Error Deleting Picture"
msgstr "Error al eliminar la fotografía"
-#: ../src/MainWindow.cs:2172
+#: ../src/MainWindow.cs:2045
#, csharp-format
msgid "No permission to delete the file:{1}{0}"
msgstr "No tiene permisos para eliminar el archivo: {1}{0}"
-#: ../src/MainWindow.cs:2176
+#: ../src/MainWindow.cs:2049
#, csharp-format
msgid "An error of type {0} occurred while deleting the file:{2}{1}"
msgstr "Ocurrió un error del tipo {0} al eliminar el archivo: {2}{1}"
-#: ../src/MainWindow.cs:2208
+#: ../src/MainWindow.cs:2081
#, csharp-format
msgid "Delete the selected photo permanently?"
msgid_plural "Delete the {0} selected photos permanently?"
msgstr[0] "¿Eliminar permanentemente la fotografía seleccionada?"
msgstr[1] "¿Eliminar permanentemente las {0} fotografías seleccionadas?"
-#: ../src/MainWindow.cs:2212
+#: ../src/MainWindow.cs:2085
msgid "This deletes all versions of the selected photo from your drive."
msgid_plural ""
"This deletes all versions of the selected photos from your drive."
@@ -2735,20 +2418,20 @@ msgstr[1] ""
"Esto eliminará de su unidad todas las versiones de las fotografías "
"seleccionadas."
-#: ../src/MainWindow.cs:2215
+#: ../src/MainWindow.cs:2088
msgid "_Delete photo"
msgid_plural "_Delete photos"
msgstr[0] "_Eliminar la fotografía"
msgstr[1] "_Eliminar las fotografías"
-#: ../src/MainWindow.cs:2251
+#: ../src/MainWindow.cs:2124
#, csharp-format
msgid "Remove the selected photo from F-Spot?"
msgid_plural "Remove the {0} selected photos from F-Spot?"
msgstr[0] "¿Quitar la fotografía seleccionada de F-Spot?"
msgstr[1] "¿Quitar las {0} fotografías seleccionadas de F-Spot?"
-#: ../src/MainWindow.cs:2256
+#: ../src/MainWindow.cs:2129
msgid ""
"If you remove photos from the F-Spot catalog all tag information will be "
"lost. The photos remain on your computer and can be imported into F-Spot "
@@ -2758,27 +2441,27 @@ msgstr ""
"etiquetas se perderá. Las fotos seguirán en su equipo y podrá volverlas a "
"importar de nuevo en F-Spot."
-#: ../src/MainWindow.cs:2257
+#: ../src/MainWindow.cs:2130
msgid "_Remove from Catalog"
msgstr "_Quitar del catálogo"
-#: ../src/MainWindow.cs:2320
+#: ../src/MainWindow.cs:2199
#, csharp-format
msgid "Delete tag \"{0}\"?"
msgstr "¿Eliminar etiqueta {0}?"
-#: ../src/MainWindow.cs:2322
+#: ../src/MainWindow.cs:2201
#, csharp-format
msgid "Delete the {0} selected tags?"
msgstr "¿Eliminar las {0} etiquetas seleccionadas?"
-#: ../src/MainWindow.cs:2327
+#: ../src/MainWindow.cs:2206
msgid "photo"
msgid_plural "photos"
msgstr[0] "foto"
msgstr[1] "fotos"
-#: ../src/MainWindow.cs:2329
+#: ../src/MainWindow.cs:2208
#, csharp-format
msgid "If you delete this tag, the association with {0} {1} will be lost."
msgid_plural ""
@@ -2786,18 +2469,18 @@ msgid_plural ""
msgstr[0] "Si borra esta etiqueta se perderá la asociación {0} {1}."
msgstr[1] "Si borra estas etiquetas se perderá la asociación {0} {1}."
-#: ../src/MainWindow.cs:2334
+#: ../src/MainWindow.cs:2213
msgid "_Delete tag"
msgid_plural "_Delete tags"
msgstr[0] "_Eliminar etiqueta"
msgstr[1] "_Eliminar etiquetas"
#. A Category is not empty. Can not delete it.
-#: ../src/MainWindow.cs:2348
+#: ../src/MainWindow.cs:2227
msgid "Tag is not empty"
msgstr "La etiqueta no está vacía"
-#: ../src/MainWindow.cs:2349
+#: ../src/MainWindow.cs:2228
#, csharp-format
msgid ""
"Can not delete tags that have tags within them. Please delete tags under "
@@ -2806,39 +2489,39 @@ msgstr ""
"No se pueden eliminar etiquetas que tengan etiquetas dentro de ellas. Borre "
"antes las etiquetas de «{0}»"
-#: ../src/MainWindow.cs:2789
+#: ../src/MainWindow.cs:2659
msgid "Rotate selected photo left"
msgid_plural "Rotate selected photos left"
msgstr[0] "Rotar la fotografía seleccionada a la izquierda"
msgstr[1] "Rotar las fotografías seleccionadas a la izquierda"
-#: ../src/MainWindow.cs:2802
+#: ../src/MainWindow.cs:2672
msgid "Rotate selected photo right"
msgid_plural "Rotate selected photos right"
msgstr[0] "Rotar la fotografía seleccionada a la derecha"
msgstr[1] "Rotar las fotografías seleccionadas a la derecha"
-#: ../src/MainWindow.cs:2813
+#: ../src/MainWindow.cs:2683
#, csharp-format
msgid "Find _Selected Tag"
msgid_plural "Find _Selected Tags"
msgstr[0] "Encontrar la etiqueta _seleccionada"
msgstr[1] "Encontrar las etiquetas _seleccionadas"
-#: ../src/MainWindow.cs:2817
+#: ../src/MainWindow.cs:2687
#, csharp-format
msgid "Find Selected Tag _With"
msgid_plural "Find Selected Tags _With"
msgstr[0] "Encontrar la etiqueta seleccionada c_on"
msgstr[1] "Encontrar las etiquetas seleccionadas c_on"
-#: ../src/MainWindow.cs:2858
+#: ../src/MainWindow.cs:2728
msgid "Create New Version?"
msgid_plural "Create New Versions?"
msgstr[0] "¿Crear una nueva versión?"
msgstr[1] "¿Crear nuevas versiones?"
-#: ../src/MainWindow.cs:2860
+#: ../src/MainWindow.cs:2730
#, csharp-format
msgid ""
"Before launching {1}, should F-Spot create a new version of the selected "
@@ -2853,7 +2536,7 @@ msgstr[1] ""
"Antes de lanzar {1}, ¿debe F-Spot crear versiones nuevas de las fotos "
"seleccionadas para preservar los originales?"
-#: ../src/MainWindow.cs:2882
+#: ../src/MainWindow.cs:2752
msgid "XCF version"
msgstr "Versión XCF"
@@ -2967,9 +2650,13 @@ msgstr "Enfoque"
msgid "Scene Type"
msgstr "Tipo de escena"
+#: ../src/PhotoStore.cs:166 ../src/ui/mail_dialog.ui.h:19
+msgid "Original"
+msgstr "Original"
+
#. Fixme this should really set parent menu
#. items insensitve
-#: ../src/PhotoTagMenu.cs:74
+#: ../src/PhotoTagMenu.cs:62
msgid "(No Tags)"
msgstr "(No hay etiquetas)"
@@ -2989,67 +2676,67 @@ msgstr "Renombrar la versión"
msgid "New name:"
msgstr "Nuevo nombre:"
-#: ../src/PhotoVersionCommands.cs:110
-msgid "Could not create a new version"
-msgstr "No se pudo crear una nueva versión"
-
-#: ../src/PhotoVersionCommands.cs:111
-#, csharp-format
-msgid "Received exception \"{0}\". Unable to create version \"{1}\""
-msgstr "Se recibió la excepción «{0}». No es posible crear la versión «{1}»"
-
-#: ../src/PhotoVersionCommands.cs:138
-msgid "Really Delete?"
-msgstr "¿Realmente desea eliminarlo?"
-
-#: ../src/PhotoVersionCommands.cs:139
-msgid "Cancel"
-msgstr "Cancelar"
-
-#: ../src/PhotoVersionCommands.cs:140
+#: ../src/PhotoVersionCommands.cs:123
msgid "Delete"
msgstr "Eliminar"
-#: ../src/PhotoVersionCommands.cs:144
+#: ../src/PhotoVersionCommands.cs:124
#, csharp-format
msgid "Really delete version \"{0}\"?"
msgstr "¿Eliminar la versión «{0}»?"
-#: ../src/PhotoVersionCommands.cs:154
-msgid "Could not delete a version"
-msgstr "No se pudo eliminar una versión"
+#: ../src/PhotoVersionCommands.cs:125
+msgid "This removes the version and deletes the corresponding file from disk."
+msgstr "Esto quita la versión y elimina el archivo correspondiente del disco."
+
+#: ../src/PhotoVersionCommands.cs:170
+msgid "De_tach"
+msgstr "De_sacoplar"
-#: ../src/PhotoVersionCommands.cs:155
+#: ../src/PhotoVersionCommands.cs:171
#, csharp-format
-msgid "Received exception \"{0}\". Unable to delete version \"{1}\""
-msgstr "Se recibió la excepción «{0}». No es posible eliminar la versión «{1}»"
+msgid "Really detach version \"{0}\" from \"{1}\"?"
+msgstr "¿Desacoplar la versión «{0}» de «{1}»?"
-#: ../src/PhotoVersionCommands.cs:196
-msgid "Could not rename a version"
-msgstr "No se pudo renombrar una versión"
+#: ../src/PhotoVersionCommands.cs:172
+msgid ""
+"This makes the version appear as a separate photo in the library. To undo, "
+"drag the new photo back to its parent."
+msgstr ""
+"Esto hace que la versión aparezca como una foto separada en la biblioteca. "
+"Para deshacerlo, arrastre de nuevo la foto nueva en su padre."
+
+#: ../src/PhotoVersionCommands.cs:194
+msgid "Re_parent"
+msgstr "Cambiar pa_dre"
-#: ../src/PhotoVersionCommands.cs:197
+#: ../src/PhotoVersionCommands.cs:195
#, csharp-format
-msgid "Received exception \"{0}\". Unable to rename version to \"{1}\""
+#| msgid "Really delete version \"{0}\"?"
+msgid "Really reparent \"{0}\" as version of \"{1}\"?"
+msgid_plural "Really reparent {2} photos as versions of \"{1}\"?"
+msgstr[0] "¿Quiere cambiar el padre de «{0}» como una versión de «{1}»?"
+msgstr[1] "¿Quiere cambiar el padre de «{2}» fotos como una versión de «{1}»?"
+
+#: ../src/PhotoVersionCommands.cs:198
+msgid ""
+"This makes the photos appear as a single one in the library. The versions "
+"can be detached using the Photo menu."
msgstr ""
-"Se recibió la excepción «{0}». No es posible renombrar la versión a «{1}»"
+"Esto hace que las fotos aparezcan como una sola en la biblioteca. Las "
+"versiones se pueden desacoplar usando el menú «Foto»."
-#: ../src/PhotoVersionMenu.cs:66 ../src/Widgets/InfoBox.cs:563
-#: ../src/Widgets/InfoBox.cs:565
+#: ../src/PhotoVersionCommands.cs:238
+#, csharp-format
+msgid "Received exception \"{0}\"."
+msgstr "Se recibió la excepción «{0}»."
+
+#: ../src/PhotoVersionMenu.cs:66 ../src/Widgets/InfoBox.cs:566
+#: ../src/Widgets/InfoBox.cs:568
msgid "(No Edits)"
msgstr "(No hay modificaciones)"
-#: ../src/PhotoView.cs:167 ../src/UI.Dialog/EditExceptionDialog.cs:38
-msgid "Error editing photo"
-msgstr "Error al editar la foto"
-
-#: ../src/PhotoView.cs:168 ../src/Sharpener.cs:73
-#: ../src/UI.Dialog/EditExceptionDialog.cs:25
-#, csharp-format
-msgid "Received exception \"{0}\". Unable to save photo {1}"
-msgstr "Se recibió la excepción «{0}». No es posible guardar la imagen {1}"
-
-#: ../src/PhotoView.cs:357
+#: ../src/PhotoView.cs:339
msgid "Comment:"
msgstr "Comentario:"
@@ -3061,72 +2748,64 @@ msgstr "Fotos"
msgid "Image Settings"
msgstr "Ajustes de la imagen"
-#: ../src/QueryWidget.cs:58
+#: ../src/QueryWidget.cs:55
msgid "Find: "
msgstr "Buscar: "
-#: ../src/QueryWidget.cs:63
+#: ../src/QueryWidget.cs:60
msgid "Untagged photos"
msgstr "Fotos sin etiquetas"
-#: ../src/QueryWidget.cs:71
+#: ../src/QueryWidget.cs:68
msgid "Rated photos"
msgstr "Fotos puntuadas"
#. Note for translators: 'Import roll' is no command, it means 'Roll that has been imported'
-#: ../src/QueryWidget.cs:80
+#: ../src/QueryWidget.cs:77
msgid "Import roll"
msgstr "Carrete importado"
-#: ../src/QueryWidget.cs:104
+#: ../src/QueryWidget.cs:100
msgid "Clear search"
msgstr "Vaciar búsqueda"
-#: ../src/QueryWidget.cs:111
+#: ../src/QueryWidget.cs:107
msgid "Refresh search"
msgstr "Refrescar la búsqueda"
-#: ../src/QueryWidget.cs:113
+#: ../src/QueryWidget.cs:110
msgid "No matching photos found"
msgstr "No se encontraron fotos coincidentes"
-#: ../src/QueryWidget.cs:155
-msgid "Hide _Find Bar"
-msgstr "Ocultar barra de _búsqueda"
-
-#: ../src/QueryWidget.cs:161
-msgid "Show _Find Bar"
-msgstr "Mostrar barra de _búsqueda"
-
-#: ../src/RotateCommand.cs:96 ../src/RotateCommand.cs:111
+#: ../src/RotateCommand.cs:87 ../src/RotateCommand.cs:102
msgid "Unable to rotate this type of photo"
msgstr "No se puede rotar este tipo de foto"
-#: ../src/RotateCommand.cs:131
+#: ../src/RotateCommand.cs:122
msgid "Unable to rotate readonly file"
msgstr "No se puede rotar un archivo de sólo lectura"
-#: ../src/RotateCommand.cs:198
+#: ../src/RotateCommand.cs:185
msgid "Rotating photos"
msgstr "Rotando fotos"
-#: ../src/RotateCommand.cs:209
+#: ../src/RotateCommand.cs:196
#, csharp-format
msgid "Rotating photo \"{0}\""
msgstr "Rotando la foto «{0}»"
-#: ../src/RotateCommand.cs:222
+#: ../src/RotateCommand.cs:209
msgid "Directory not found"
msgstr "No se encontró el directorio"
-#: ../src/RotateCommand.cs:242
+#: ../src/RotateCommand.cs:229
#, csharp-format
msgid "Unable to rotate photo"
msgid_plural "Unable to rotate {0} photos"
msgstr[0] "No se pudo rotar la foto"
msgstr[1] "No se pudieron rotar las {0} fotos"
-#: ../src/RotateCommand.cs:244
+#: ../src/RotateCommand.cs:231
#, csharp-format
msgid ""
"The photo could not be rotated because it is on a read only file system or "
@@ -3141,35 +2820,35 @@ msgstr[1] ""
"Las {0} fotos no se pudieron rotar porque están en un sistema de archivos de "
"sólo lectura como un CDROM. Compruebe los permisos y vuelva a intentarlo."
-#: ../src/RotateCommand.cs:271
+#: ../src/RotateCommand.cs:258
#, csharp-format
msgid "Received error \"{0}\" while attempting to rotate {1}"
msgstr "Se recibió el error «{0}» al intentar rotar {1}"
-#: ../src/RotateCommand.cs:276
+#: ../src/RotateCommand.cs:263
msgid "Error while rotating photo."
msgstr "Error al rotar la foto."
-#: ../src/SendEmail.cs:240
+#: ../src/SendEmail.cs:218
msgid "Preparing email"
msgstr "Preparando correo"
-#: ../src/SendEmail.cs:292
+#: ../src/SendEmail.cs:270
#, csharp-format
msgid "Exporting picture \"{0}\""
msgstr "Exportando imagen «{0}»"
-#: ../src/SendEmail.cs:314
+#: ../src/SendEmail.cs:292
msgid "Error processing image"
msgstr "Error al procesar la imagen"
-#: ../src/SendEmail.cs:315
+#: ../src/SendEmail.cs:293
#, csharp-format
msgid "An error occured while processing \"{0}\": {1}"
msgstr "Ocurrió un error al procesar «{0}»: {1}"
#. Send the mail :)
-#: ../src/SendEmail.cs:330
+#: ../src/SendEmail.cs:307
msgid "My Photos"
msgstr "Mis fotos"
@@ -3177,6 +2856,11 @@ msgstr "Mis fotos"
msgid "Error saving sharpened photo"
msgstr "Error al guardar la foto enfocada"
+#: ../src/Sharpener.cs:73 ../src/UI.Dialog/EditExceptionDialog.cs:26
+#, csharp-format
+msgid "Received exception \"{0}\". Unable to save photo {1}"
+msgstr "Se recibió la excepción «{0}». No es posible guardar la imagen {1}"
+
#: ../src/Sharpener.cs:102
msgid "Sharpen"
msgstr "Enfocar"
@@ -3193,36 +2877,40 @@ msgstr "Radio:"
msgid "Threshold:"
msgstr "Umbral:"
-#: ../src/SingleView.cs:73
+#: ../src/SingleView.cs:72
msgid "Rotate photo left"
msgstr "Rotar la fotografía a la izquierda"
-#: ../src/SingleView.cs:78
+#: ../src/SingleView.cs:77
msgid "Rotate photo right"
msgstr "Rotar la fotografía a la derecha"
-#: ../src/SingleView.cs:115
+#: ../src/SingleView.cs:114
msgid "Folder"
msgstr "Carpeta"
-#: ../src/SingleView.cs:341
+#: ../src/SingleView.cs:339
msgid "Open"
msgstr "Abrir"
-#: ../src/SingleView.cs:428
+#: ../src/SingleView.cs:342
+msgid "Select Folder"
+msgstr "Seleccionar la carpeta"
+
+#: ../src/SingleView.cs:426
msgid "Set as Background"
msgstr "Establecer como fondo"
-#: ../src/TagCommands.cs:96 ../src/TagSelectionWidget.cs:498
-#: ../src/UI.Dialog/EditTagDialog.cs:78
+#: ../src/TagCommands.cs:97 ../src/TagSelectionWidget.cs:491
+#: ../src/UI.Dialog/EditTagDialog.cs:76
msgid "This name is already in use"
msgstr "Este nombre ya está siendo usado"
-#: ../src/TagCommands.cs:144
+#: ../src/TagCommands.cs:145
msgid "Create New Tag"
msgstr "Crear nueva etiqueta"
-#: ../src/TagCommands.cs:145
+#: ../src/TagCommands.cs:146
msgid "Name of New Tag:"
msgstr "Nombre de la etiqueta nueva:"
@@ -3233,7 +2921,7 @@ msgid_plural "Find"
msgstr[0] "Buscar"
msgstr[1] "Buscar"
-#: ../src/TagPopup.cs:36 ../src/Widgets/TagMenu.cs:91
+#: ../src/TagPopup.cs:36 ../src/Widgets/TagMenu.cs:98
msgid "Create New Tag..."
msgstr "Crear una etiqueta…"
@@ -3288,41 +2976,41 @@ msgstr[1] "Buscar _con"
msgid "All"
msgstr "Todas"
-#: ../src/TagQueryWidget.cs:149 ../src/Term.cs:592
+#: ../src/TagQueryWidget.cs:149 ../src/Term.cs:586
#, csharp-format
msgid "Not {0}"
msgstr "Sin {0}"
-#: ../src/TagQueryWidget.cs:278
+#: ../src/TagQueryWidget.cs:273
msgid "Drag tags here to search for them"
msgstr "Arrastre etiquetas aquí para buscarlas"
-#: ../src/TagSelectionWidget.cs:497
+#: ../src/TagSelectionWidget.cs:490
msgid "Error renaming tag"
msgstr "Error al renombrar la etiqueta"
-#: ../src/TagStore.cs:203
+#: ../src/TagStore.cs:204
msgid "Favorites"
msgstr "Favoritos"
-#: ../src/TagStore.cs:208
+#: ../src/TagStore.cs:209
msgid "Hidden"
msgstr "Oculto"
-#: ../src/TagStore.cs:216
+#: ../src/TagStore.cs:217
msgid "People"
msgstr "Gente"
-#: ../src/TagStore.cs:221
+#: ../src/TagStore.cs:222
msgid "Places"
msgstr "Lugares"
-#: ../src/TagStore.cs:226
+#: ../src/TagStore.cs:227
msgid "Events"
msgstr "Acontecimientos"
#. The label for the root category is used in new and edit tag dialogs
-#: ../src/TagStore.cs:239 ../src/Widgets/InfoBox.cs:409
+#: ../src/TagStore.cs:240 ../src/Widgets/InfoBox.cs:410
msgid "(None)"
msgstr "(Ninguno)"
@@ -3342,36 +3030,36 @@ msgstr " o "
#. OPS The operators we support, case insensitive
#. private static string op_str = "(?'Ops' or | and |, | \\s+ )";
#: ../src/Term.cs:380 ../src/UI.Dialog/ui/DateRangeDialog.ui.h:7
-#: ../src/Widgets/FindBar.cs:177
+#: ../src/Widgets/FindBar.cs:178 ../src/Widgets/FindBar.cs:533
msgid "or"
msgstr "o"
-#: ../src/ThumbnailCommand.cs:20
+#: ../src/ThumbnailCommand.cs:21
msgid "Updating Thumbnails"
msgstr "Actualizando miniaturas"
-#: ../src/ThumbnailCommand.cs:28
+#: ../src/ThumbnailCommand.cs:29
#, csharp-format
msgid "Updating picture \"{0}\""
msgstr "Actualizando imagen «{0}»"
-#: ../src/UI.Dialog/AboutDialog.cs:76
+#: ../src/UI.Dialog/AboutDialog.cs:94
msgid "Photo management for GNOME"
msgstr "Gestión de fotografías para GNOME"
-#: ../src/UI.Dialog/AboutDialog.cs:77
-msgid "Copyright © 2003-2009 Novell Inc."
-msgstr "Copyright © 2003-2009 Novell Inc."
+#: ../src/UI.Dialog/AboutDialog.cs:95
+msgid "Copyright © 2003-2010 Novell Inc."
+msgstr "Copyright © 2003-2010 Novell Inc."
-#: ../src/UI.Dialog/AboutDialog.cs:100
+#: ../src/UI.Dialog/AboutDialog.cs:119
msgid "translator-credits"
msgstr "Jorge González <jorgegonz at svn.gnome.org>, 2004-2010"
-#: ../src/UI.Dialog/AboutDialog.cs:105
+#: ../src/UI.Dialog/AboutDialog.cs:124
msgid "F-Spot Website"
msgstr "Página web de F-Spot"
-#: ../src/UI.Dialog/AdjustTimeDialog.cs:112
+#: ../src/UI.Dialog/AdjustTimeDialog.cs:113
#: ../src/UI.Dialog/ui/AdjustTimeDialog.ui.h:10
#, csharp-format
msgid "Shift all photos by {0}"
@@ -3413,16 +3101,20 @@ msgstr "Semana anterior (lun-dom)"
msgid "Customized Range"
msgstr "Rango personalizado"
-#: ../src/UI.Dialog/EditTagIconDialog.cs:46
+#: ../src/UI.Dialog/EditExceptionDialog.cs:39
+msgid "Error editing photo"
+msgstr "Error al editar la foto"
+
+#: ../src/UI.Dialog/EditTagIconDialog.cs:42
#, csharp-format
msgid "Edit Icon for Tag {0}"
msgstr "Editar el icono para la etiqueta {0}"
-#: ../src/UI.Dialog/EditTagIconDialog.cs:68
+#: ../src/UI.Dialog/EditTagIconDialog.cs:64
msgid "Select Photo from file"
msgstr "Seleccionar foto desde archivo"
-#: ../src/UI.Dialog/EditTagIconDialog.cs:90
+#: ../src/UI.Dialog/EditTagIconDialog.cs:86
#, csharp-format
msgid ""
"\n"
@@ -3439,16 +3131,16 @@ msgstr ""
" esta etiqueta. Etiquete la foto como «{0}» y vuelva aquí para usarla\n"
" como icono."
-#: ../src/UI.Dialog/EditTagIconDialog.cs:168
+#: ../src/UI.Dialog/EditTagIconDialog.cs:164
msgid "Unable to load image"
msgstr "No se pudo cargar la imagen"
-#: ../src/UI.Dialog/EditTagIconDialog.cs:169
+#: ../src/UI.Dialog/EditTagIconDialog.cs:165
#, csharp-format
msgid "Unable to load \"{0}\" as icon for the tag"
msgstr "No se pudo cargar «{0}» como icono para la etiqueta"
-#: ../src/UI.Dialog/EditTagIconDialog.cs:207
+#: ../src/UI.Dialog/EditTagIconDialog.cs:203
#, csharp-format
msgid "Photo {0} of {1}"
msgstr "Fotografía {0} de {1}"
@@ -3465,24 +3157,54 @@ msgstr "Detalles del error"
msgid "An unhandled exception was thrown: "
msgstr "Se produjo una excepción no tratada: "
-#: ../src/UI.Dialog/PreferenceDialog.cs:54
-#: ../src/UI.Dialog/PreferenceDialog.cs:77
+#: ../src/UI.Dialog/ImportDialog.cs:15
+#| msgid "Open _Folder..."
+msgid "Choose Folder..."
+msgstr "Elegir carpeta…"
+
+#: ../src/UI.Dialog/ImportDialog.cs:124
+#| msgid "Import Source:"
+msgid "Choose Import source..."
+msgstr "Elegir el origen de la importación…"
+
+#: ../src/UI.Dialog/ImportDialog.cs:136
+msgid "(No Cameras Detected)"
+msgstr "(No se detectó ninguna cámara)"
+
+#: ../src/UI.Dialog/ImportDialog.cs:264
+#, csharp-format
+#| msgid "Importing {0} of {1}"
+msgid "Importing Photos: {0} of {1}..."
+msgstr "Importando fotos: {0} de {1}…"
+
+#: ../src/UI.Dialog/ImportDialog.cs:288
+#| msgid "Exporting Photos"
+msgid "Importing photos..."
+msgstr "Importando fotos…"
+
+#. TODO: Using a GtkSpinner would be nicer here.
+#: ../src/UI.Dialog/ImportDialog.cs:295
+msgid "Searching for photos... (You can already click Import to continue)"
+msgstr "Buscando fotos… (puede pulsar el botón Importar para continuar)"
+
+#: ../src/UI.Dialog/PreferenceDialog.cs:55
+#: ../src/UI.Dialog/PreferenceDialog.cs:78
msgid "None"
msgstr "Ninguno"
-#: ../src/UI.Dialog/PreferenceDialog.cs:56
+#: ../src/UI.Dialog/PreferenceDialog.cs:57
msgid "System profile"
msgstr "Perfil del sistema"
-#: ../src/UI.Dialog/PreferenceDialog.cs:94
+#: ../src/UI.Dialog/PreferenceDialog.cs:95
msgid "Standard theme"
msgstr "Tema estándar"
-#: ../src/UI.Dialog/RepairDbDialog.cs:20
+#: ../src/UI.Dialog/RepairDbDialog.cs:21
msgid "Error loading database."
msgstr "Error al cargar la base de datos."
-#: ../src/UI.Dialog/RepairDbDialog.cs:21
+#: ../src/UI.Dialog/RepairDbDialog.cs:22
#, csharp-format
msgid ""
"F-Spot encountered an error while loading the photo database. The old "
@@ -3491,15 +3213,15 @@ msgstr ""
"F-Spot encontró un error al cargar la base de datos de foros. La base de "
"datos antigua se ha movido a {0} y se ha creado una base de datos nueva."
-#: ../src/UI.Dialog/SelectionRatioDialog.cs:60
+#: ../src/UI.Dialog/SelectionRatioDialog.cs:61
msgid "Label"
msgstr "Etiqueta"
-#: ../src/UI.Dialog/SelectionRatioDialog.cs:64
+#: ../src/UI.Dialog/SelectionRatioDialog.cs:65
msgid "Ratio"
msgstr "Puntuación"
-#: ../src/UI.Dialog/ThreadProgressDialog.cs:56
+#: ../src/UI.Dialog/ThreadProgressDialog.cs:55
msgid "Retry"
msgstr "Reintentar"
@@ -3671,6 +3393,118 @@ msgstr "<b>Mínima puntuación</b>"
msgid "Set Rating Filter"
msgstr "Establecer el filtro de puntuación"
+#: ../src/ui/import.ui.h:1
+msgid "Attach Tags:"
+msgstr "Adjuntar etiquetas:"
+
+#: ../src/ui/import.ui.h:2
+msgid "Copy files to the Photos folder"
+msgstr "Copiar archivos a la carpeta Photos"
+
+#: ../src/ui/import.ui.h:3
+msgid "Detect duplicates"
+msgstr "Detectar duplicados"
+
+#. Translators: this string means 'source of import'
+#: ../src/ui/import.ui.h:6
+#| msgid "Import roll"
+msgid "Import from:"
+msgstr "Importar de:"
+
+#: ../src/ui/import.ui.h:7
+msgid "Include subfolders"
+msgstr "Incluir subcarpetas"
+
+#: ../src/ui/mail_dialog.ui.h:1
+msgid "1024 px"
+msgstr "1024 px"
+
+#: ../src/ui/mail_dialog.ui.h:2
+msgid "320 px"
+msgstr "320 px"
+
+#: ../src/ui/mail_dialog.ui.h:3
+msgid "480 px"
+msgstr "480 px"
+
+#: ../src/ui/mail_dialog.ui.h:4
+msgid "640 px"
+msgstr "640 px"
+
+#: ../src/ui/mail_dialog.ui.h:5
+msgid "800 px"
+msgstr "800 px"
+
+#: ../src/ui/mail_dialog.ui.h:7
+msgid "<b>Size</b>"
+msgstr "<b>Tamaño</b>"
+
+#: ../src/ui/mail_dialog.ui.h:9
+msgid "<b>Summary</b>"
+msgstr "<b>Resumen</b>"
+
+#: ../src/ui/mail_dialog.ui.h:11
+msgid "Create Mail"
+msgstr "Crear correo"
+
+#: ../src/ui/mail_dialog.ui.h:12
+msgid "Create a mail with the selected photos (possibly resized) attached"
+msgstr ""
+"Crea un correo-e con las fotos seleccionadas (posiblemente redimensionadas) "
+"adjuntas"
+
+#: ../src/ui/mail_dialog.ui.h:13
+msgid "Do not send a mail"
+msgstr "No enviar un correo"
+
+#: ../src/ui/mail_dialog.ui.h:14
+msgid "Estimated new size"
+msgstr "Tamaño nuevo estimado"
+
+#: ../src/ui/mail_dialog.ui.h:15
+msgid "Extra large"
+msgstr "Enorme"
+
+#: ../src/ui/mail_dialog.ui.h:16
+msgid "Large"
+msgstr "Grande"
+
+#: ../src/ui/mail_dialog.ui.h:17
+msgid "Medium"
+msgstr "Medio"
+
+#: ../src/ui/mail_dialog.ui.h:18
+msgid "Number of pictures"
+msgstr "Número de imágenes"
+
+#: ../src/ui/mail_dialog.ui.h:20
+msgid "Original size (possible very large file size)"
+msgstr "Tamaño original (tamaño de archivo posiblemente muy grande)"
+
+#: ../src/ui/mail_dialog.ui.h:21
+msgid "Small"
+msgstr "Pequeño"
+
+#: ../src/ui/mail_dialog.ui.h:22
+msgid ""
+"Specify if an original size picture should be rotated or not. Smaller sizes "
+"are automatically rotated."
+msgstr ""
+"Especifique su un tamaño original de imagen debe rotarse o no. Los tamaños "
+"pequeños se rotan automáticamente."
+
+#: ../src/ui/mail_dialog.ui.h:23
+msgid "Tiny"
+msgstr "Diminuto"
+
+#: ../src/ui/mail_dialog.ui.h:24
+msgid "Total original size"
+msgstr "Tamaño total original"
+
+#: ../src/ui/mail_dialog.ui.h:25
+msgid "_Create Mail"
+msgstr "_Crear correo-e"
+
#: ../src/ui/main_window.ui.h:1
msgid "Adjust _Time..."
msgstr "Ajustar la _hora…"
@@ -3703,191 +3537,203 @@ msgstr "Crear una e_tiqueta…"
msgid "Create _New Version..."
msgstr "Crear una _nueva versión…"
-#: ../src/ui/main_window.ui.h:11
+#: ../src/ui/main_window.ui.h:10
+msgid "De_tach Version"
+msgstr "De_sacoplar versión"
+
+#: ../src/ui/main_window.ui.h:12
msgid "Fin_d"
msgstr "_Buscar"
-#: ../src/ui/main_window.ui.h:12
+#: ../src/ui/main_window.ui.h:13
msgid "Manage _Extensions"
msgstr "Gestionar e_xtensiones"
-#: ../src/ui/main_window.ui.h:13
+#: ../src/ui/main_window.ui.h:14
msgid "Page Set_up..."
msgstr "Con_figuración de página…"
-#: ../src/ui/main_window.ui.h:14
+#: ../src/ui/main_window.ui.h:15
msgid "Re_fresh Thumbnail"
msgstr "Act_ualizar miniaturas"
-#: ../src/ui/main_window.ui.h:18
+#: ../src/ui/main_window.ui.h:19
msgid "Select _All"
msgstr "Seleccionar _todo"
-#: ../src/ui/main_window.ui.h:19
+#: ../src/ui/main_window.ui.h:20
msgid "Select _None"
msgstr "Seleccionar _nada"
-#: ../src/ui/main_window.ui.h:20
+#: ../src/ui/main_window.ui.h:21
msgid "Send by _Mail..."
msgstr "Enviar por correo _electrónico…"
-#: ../src/ui/main_window.ui.h:22
+#: ../src/ui/main_window.ui.h:23
msgid "Side_bar"
msgstr "_Barra lateral"
-#: ../src/ui/main_window.ui.h:23
+#: ../src/ui/main_window.ui.h:24
msgid "T_ags"
msgstr "E_tiquetas"
-#: ../src/ui/main_window.ui.h:25
+#: ../src/ui/main_window.ui.h:26
msgid "Thumbnail _elements"
msgstr "_Elementos de miniaturas"
-#: ../src/ui/main_window.ui.h:26
+#: ../src/ui/main_window.ui.h:27
msgid "Too_lbar"
msgstr "Barra de _herramientas"
-#: ../src/ui/main_window.ui.h:27
+#: ../src/ui/main_window.ui.h:28
msgid "View"
msgstr "Ver"
#: ../src/ui/main_window.ui.h:33
+msgid "_Attach Tag"
+msgstr "_Adjuntar etiqueta"
+
+#: ../src/ui/main_window.ui.h:34
msgid "_Attach Tag to Selection"
msgstr "_Adjuntar etiqueta a la selección"
-#: ../src/ui/main_window.ui.h:35
+#: ../src/ui/main_window.ui.h:36
msgid "_Clear Rating Filter"
msgstr "_Limpiar el filtro de puntuación"
-#: ../src/ui/main_window.ui.h:36
+#: ../src/ui/main_window.ui.h:37
msgid "_Clear Roll Filter"
msgstr "_Limpiar el filtro de carrete"
-#: ../src/ui/main_window.ui.h:38
+#: ../src/ui/main_window.ui.h:39
msgid "_Components"
msgstr "_Componentes"
-#: ../src/ui/main_window.ui.h:39
+#: ../src/ui/main_window.ui.h:40
msgid "_Contents"
msgstr "Índ_ice"
-#: ../src/ui/main_window.ui.h:40
+#: ../src/ui/main_window.ui.h:41
msgid "_Dates"
msgstr "_Fechas"
-#: ../src/ui/main_window.ui.h:42
+#: ../src/ui/main_window.ui.h:43
msgid "_Delete Selected Tag"
msgstr "_Eliminar la etiqueta seleccionada"
-#: ../src/ui/main_window.ui.h:43
+#: ../src/ui/main_window.ui.h:44
msgid "_Delete Version"
msgstr "_Eliminar la versión"
-#: ../src/ui/main_window.ui.h:45
+#: ../src/ui/main_window.ui.h:46
msgid "_Edit Tag..."
msgstr "_Editar etiqueta…"
-#: ../src/ui/main_window.ui.h:46
+#: ../src/ui/main_window.ui.h:47
msgid "_Export to"
msgstr "_Exportar a"
-#: ../src/ui/main_window.ui.h:47
+#: ../src/ui/main_window.ui.h:48
msgid "_Filmstrip"
msgstr "_Tira de imágenes"
-#: ../src/ui/main_window.ui.h:50
+#: ../src/ui/main_window.ui.h:51
msgid "_Hidden"
msgstr "_Oculto"
-#: ../src/ui/main_window.ui.h:51
+#: ../src/ui/main_window.ui.h:52
msgid "_Import..."
msgstr "_Importar…"
-#: ../src/ui/main_window.ui.h:52
+#: ../src/ui/main_window.ui.h:53
+msgid "_Invert Selection"
+msgstr "_Invertir selección"
+
+#: ../src/ui/main_window.ui.h:54
msgid "_Large"
msgstr "_Grande"
-#: ../src/ui/main_window.ui.h:53
+#: ../src/ui/main_window.ui.h:55
msgid "_Last Import Roll"
msgstr "Ú_ltimo carrete importado"
-#: ../src/ui/main_window.ui.h:54
+#: ../src/ui/main_window.ui.h:56
msgid "_Loupe"
msgstr "_Lupa"
-#: ../src/ui/main_window.ui.h:55
+#: ../src/ui/main_window.ui.h:57
msgid "_Medium"
msgstr "_Medio"
-#: ../src/ui/main_window.ui.h:57
+#: ../src/ui/main_window.ui.h:59
msgid "_Quit"
msgstr "_Salir"
-#: ../src/ui/main_window.ui.h:58
+#: ../src/ui/main_window.ui.h:60
msgid "_Ratings"
msgstr "_Puntuaciones"
-#: ../src/ui/main_window.ui.h:60
+#: ../src/ui/main_window.ui.h:62
msgid "_Remove Tag From Selection"
msgstr "_Quitar la etiqueta de la selección"
-#: ../src/ui/main_window.ui.h:61
+#: ../src/ui/main_window.ui.h:63
msgid "_Rename Version"
msgstr "_Renombrar la versión"
-#: ../src/ui/main_window.ui.h:62
+#: ../src/ui/main_window.ui.h:64
msgid "_Reverse Order"
msgstr "_Invertir el orden"
-#: ../src/ui/main_window.ui.h:63
+#: ../src/ui/main_window.ui.h:65
msgid "_Select Import Rolls..."
msgstr "_Seleccionar carretes que importar…"
-#: ../src/ui/main_window.ui.h:64
+#: ../src/ui/main_window.ui.h:66
msgid "_Set Date Range..."
msgstr "E_stablecer rango de fechas…"
-#: ../src/ui/main_window.ui.h:65
+#: ../src/ui/main_window.ui.h:67
msgid "_Set Rating filter..."
msgstr "E_stablecer el filtro de puntuación…"
-#: ../src/ui/main_window.ui.h:66
+#: ../src/ui/main_window.ui.h:68
msgid "_Sharpen..."
msgstr "_Enfocar…"
-#: ../src/ui/main_window.ui.h:68
+#: ../src/ui/main_window.ui.h:70
msgid "_Small"
msgstr "_Pequeño"
-#: ../src/ui/main_window.ui.h:69
+#: ../src/ui/main_window.ui.h:71
msgid "_Tag Icons"
msgstr "Iconos de e_tiquetas"
-#: ../src/ui/main_window.ui.h:70
+#: ../src/ui/main_window.ui.h:72
msgid "_Tags"
msgstr "E_tiquetas"
-#: ../src/ui/main_window.ui.h:71
+#: ../src/ui/main_window.ui.h:73
msgid "_Timeline"
msgstr "Línea de _tiempo"
-#: ../src/ui/main_window.ui.h:72
+#: ../src/ui/main_window.ui.h:74
msgid "_Tools"
msgstr "_Herramientas"
-#: ../src/ui/main_window.ui.h:73
+#: ../src/ui/main_window.ui.h:75
msgid "_Untagged Photos"
msgstr "Fotos _sin etiqueta"
-#: ../src/ui/main_window.ui.h:74
+#: ../src/ui/main_window.ui.h:76
msgid "_Version"
msgstr "_Versión"
-#: ../src/Updater.cs:622
+#: ../src/Updater.cs:724
msgid "Updating F-Spot Database"
msgstr "Actualizando base de datos F-Spot"
-#: ../src/Updater.cs:623
+#: ../src/Updater.cs:725
msgid ""
"Please wait while your F-Spot gallery's database is updated. This may take "
"some time."
@@ -3896,7 +3742,7 @@ msgstr ""
"actualiza. Esto puede llevar algo de tiempo."
#. Mono.Unix.Error error = Mono.Unix.Stdlib.GetLastError ();
-#: ../src/Utils/Unix.cs:35
+#: ../src/Utils/Unix.cs:36
msgid "Unable to create temporary file"
msgstr "Imposible crear el archivo temporal"
@@ -3980,11 +3826,11 @@ msgstr "Imprimir las etiquetas de la foto"
msgid "Print photo comment"
msgstr "Imprimir el comentario de la foto"
-#: ../src/Widgets/EditorPage.cs:30 ../src/Widgets/Sidebar.cs:54
+#: ../src/Widgets/EditorPage.cs:31 ../src/Widgets/Sidebar.cs:54
msgid "Edit"
msgstr "Editar"
-#: ../src/Widgets/EditorPage.cs:198
+#: ../src/Widgets/EditorPage.cs:199
msgid ""
"This tool requires an active selection. Please select a region of the photo "
"and try the operation again"
@@ -3992,13 +3838,13 @@ msgstr ""
"Ésta herramienta requiere una selección activa. Seleccione una región de la "
"foto e intente la operación de nuevo."
-#: ../src/Widgets/EditorPage.cs:216
+#: ../src/Widgets/EditorPage.cs:217
msgid "Error saving adjusted photo"
msgid_plural "Error saving adjusted photos"
msgstr[0] "Error al guardar la foto ajustada"
msgstr[1] "Error al guardar las fotos ajustadas"
-#: ../src/Widgets/EditorPage.cs:218
+#: ../src/Widgets/EditorPage.cs:219
#, csharp-format
msgid ""
"Received exception \"{0}\". Note that you have to develop RAW files into "
@@ -4007,15 +3853,15 @@ msgstr ""
"Se recibió la excepción «{0}». Note que ha de transformar los archivos RAW en "
"JPEG antes de poder editarlos."
-#: ../src/Widgets/Filmstrip.cs:572
+#: ../src/Widgets/Filmstrip.cs:573
msgid "_Horizontal"
msgstr "_Horizontal"
-#: ../src/Widgets/Filmstrip.cs:576
+#: ../src/Widgets/Filmstrip.cs:577
msgid "_Vertical"
msgstr "_Vertical"
-#: ../src/Widgets/FindBar.cs:58
+#: ../src/Widgets/FindBar.cs:59
msgid "Find:"
msgstr "Buscar:"
@@ -4023,66 +3869,70 @@ msgstr "Buscar:"
msgid "Folders"
msgstr "Carpetas"
-#: ../src/Widgets/FolderTreeView.cs:123
+#: ../src/Widgets/FolderTreeView.cs:127
msgid "Filesystem"
msgstr "Sistema de archivos"
-#: ../src/Widgets/InfoBox.cs:182
+#: ../src/Widgets/InfoBox.cs:183
msgid "Histogram"
msgstr "Histograma"
-#: ../src/Widgets/InfoBox.cs:215
+#: ../src/Widgets/InfoBox.cs:216
msgid "Version"
msgstr "Versión"
-#: ../src/Widgets/InfoBox.cs:218
+#: ../src/Widgets/InfoBox.cs:219
msgid "Date"
msgstr "Fecha"
-#: ../src/Widgets/InfoBox.cs:224
+#: ../src/Widgets/InfoBox.cs:225
msgid "Exposure"
msgstr "Exposición"
-#: ../src/Widgets/InfoBox.cs:228
+#: ../src/Widgets/InfoBox.cs:229
msgid "Focal Length"
msgstr "Longitud focal"
-#: ../src/Widgets/InfoBox.cs:234
+#: ../src/Widgets/InfoBox.cs:232
+msgid "Camera"
+msgstr "Cámara"
+
+#: ../src/Widgets/InfoBox.cs:235
msgid "File Size"
msgstr "Tamaño del archivo"
-#: ../src/Widgets/InfoBox.cs:237
+#: ../src/Widgets/InfoBox.cs:238
msgid "Rating"
msgstr "Puntuación"
-#: ../src/Widgets/InfoBox.cs:390 ../src/Widgets/InfoBox.cs:398
-#: ../src/Widgets/InfoBox.cs:428
+#: ../src/Widgets/InfoBox.cs:391 ../src/Widgets/InfoBox.cs:399
+#: ../src/Widgets/InfoBox.cs:429
msgid "(wrong format)"
msgstr "(formato incorrecto)"
-#: ../src/Widgets/InfoBox.cs:418 ../src/Widgets/InfoBox.cs:441
-#: ../src/Widgets/InfoBox.cs:451 ../src/Widgets/InfoBox.cs:460
+#: ../src/Widgets/InfoBox.cs:419 ../src/Widgets/InfoBox.cs:442
+#: ../src/Widgets/InfoBox.cs:452 ../src/Widgets/InfoBox.cs:461
msgid "(Unknown)"
msgstr "(Desconocido)"
-#: ../src/Widgets/InfoBox.cs:561
+#: ../src/Widgets/InfoBox.cs:564
#, csharp-format
msgid "(One Edit)"
msgid_plural "({0} Edits)"
msgstr[0] "(Una edición)"
msgstr[1] "({0} ediciones)"
-#: ../src/Widgets/InfoBox.cs:575
+#: ../src/Widgets/InfoBox.cs:578
msgid "(File read error)"
msgstr "(Error al leer el archivo)"
-#: ../src/Widgets/InfoBox.cs:620
+#: ../src/Widgets/InfoBox.cs:623
#, csharp-format
msgid "{0} Photos"
msgstr "{0} Fotos"
#. Note for translators: {0} is a date, {1} and {2} are times.
-#: ../src/Widgets/InfoBox.cs:640
+#: ../src/Widgets/InfoBox.cs:643
#, csharp-format
msgid ""
"On {0} between \n"
@@ -4091,7 +3941,7 @@ msgstr ""
"En {0} entre\n"
"{1} y {2}"
-#: ../src/Widgets/InfoBox.cs:645
+#: ../src/Widgets/InfoBox.cs:648
#, csharp-format
msgid ""
"Between {0} \n"
@@ -4100,35 +3950,35 @@ msgstr ""
"Entre {0} \n"
"y {1}"
-#: ../src/Widgets/InfoBox.cs:672
+#: ../src/Widgets/InfoBox.cs:675
msgid "(At least one File not found)"
msgstr "(Al menos no se encontró un archivo)"
-#: ../src/Widgets/InfoBox.cs:789
+#: ../src/Widgets/InfoBox.cs:792
msgid "Show Photo Name"
msgstr "Mostrar el nombre de la foto"
-#: ../src/Widgets/InfoBox.cs:798
+#: ../src/Widgets/InfoBox.cs:801
msgid "Show Date"
msgstr "Mostrar la fecha"
-#: ../src/Widgets/InfoBox.cs:807
+#: ../src/Widgets/InfoBox.cs:810
msgid "Show Size"
msgstr "Mostrar el tamaño"
-#: ../src/Widgets/InfoBox.cs:816
+#: ../src/Widgets/InfoBox.cs:819
msgid "Show Exposure"
msgstr "Mostrar la exposición"
-#: ../src/Widgets/InfoBox.cs:825
+#: ../src/Widgets/InfoBox.cs:828
msgid "Show Focal Length"
msgstr "Mostrar la longitud focal"
-#: ../src/Widgets/InfoBox.cs:834
+#: ../src/Widgets/InfoBox.cs:837
msgid "Show Camera"
msgstr "Mostrar la cámara"
-#: ../src/Widgets/InfoBox.cs:843
+#: ../src/Widgets/InfoBox.cs:846
msgid "Show File Size"
msgstr "Mostrar el tamaño del archivo"
@@ -4162,7 +4012,7 @@ msgstr "No hay metadatos disponibles"
msgid "No applications available"
msgstr "No hay ninguna aplicación disponible"
-#: ../src/Widgets/RatingMenuItem.cs:56
+#: ../src/Widgets/RatingMenuItem.cs:57
msgid "Rating:"
msgstr "Puntuación:"
@@ -4187,6 +4037,181 @@ msgstr "Mostrar una exhibición de fotos desde F-Spot"
msgid "F-Spot photos"
msgstr "Fotos de F-Spot"
+#~ msgid "Preview"
+#~ msgstr "Previsualizar"
+
+#~ msgid "Path"
+#~ msgstr "Ruta"
+
+#~ msgid "File"
+#~ msgstr "Archivo"
+
+#~ msgid "Select Tag"
+#~ msgstr "Seleccionar etiqueta"
+
+#~ msgid "Downloading Previews"
+#~ msgstr "Descargando las previsualizaciones"
+
+#~ msgid "Downloading Preview of {0}"
+#~ msgstr "Descargando la previsualización de «{0}»"
+
+#~ msgid "Copying file {0} of {1}"
+#~ msgstr "Copiando fotografía {0} de {1}"
+
+#~ msgid "Error transferring file"
+#~ msgstr "Error al transferir el archivo"
+
+#~ msgid "Download Complete"
+#~ msgstr "Descarga completada"
+
+#~ msgid "Done Copying Files"
+#~ msgstr "Finalizó la copia de los archivos"
+
+#~ msgid "Transferring \"{0}\" from camera"
+#~ msgstr "Transfiriendo «{0}» desde la cámara"
+
+#~ msgid "Port"
+#~ msgstr "Puerto"
+
+#~ msgid "Import error"
+#~ msgstr "Error al importar"
+
+#~ msgid "Error importing {0}{2}{2}{1}"
+#~ msgstr "Error al importar {0}{2}{2}{1}"
+
+#~ msgid " "
+#~ msgstr " "
+
+#~ msgid "<b></b>"
+#~ msgstr "<b></b>"
+
+#~ msgid "Attach tag:"
+#~ msgstr "Adjuntar etiqueta:"
+
+#~ msgid "CD"
+#~ msgstr "CD"
+
+#~ msgid "Camera Selection"
+#~ msgstr "Seleccionar la cámara"
+
+#~ msgid "E-_Mail:"
+#~ msgstr "_Correo-e:"
+
+#~ msgid "E_xport titles and comments"
+#~ msgstr "_Exportar títulos y comentarios"
+
+#~ msgid "G_allery:"
+#~ msgstr "_Galería:"
+
+#~ msgid "Gallery"
+#~ msgstr "Galería"
+
+#~ msgid "Pause"
+#~ msgstr "Pausar"
+
+#~ msgid "Select Photos to Copy From Camera..."
+#~ msgstr "Seleccionar las fotos para copiar desde la cámara…"
+
+#~ msgid "Select the camera from which you want to transfer files"
+#~ msgstr "Seleccione la cámara desde la que desea transferir archivos"
+
+#~ msgid "Selected Camera: "
+#~ msgstr "Cámara seleccionada: "
+
+#~ msgid "Strip image _metadata"
+#~ msgstr "Recorta los _metadatos de la imagen"
+
+#~ msgid "_Flickr"
+#~ msgstr "_Flickr"
+
+#~ msgid "_Gallery"
+#~ msgstr "_Galería"
+
+#~ msgid "_Open album in browser when done uploading"
+#~ msgstr "_Abrir el álbum en el navegador cuando se termine de subir"
+
+#~ msgid "_Open destination when done exporting"
+#~ msgstr "_Abrir el destino cuando se termine de exportar"
+
+#~ msgid "_Scale photos to no larger than: "
+#~ msgstr "_Escalar las fotos para que no sean más grandes de: "
+
+#~ msgid "_Strip metadata"
+#~ msgstr "_Recortar metadatos"
+
+#~ msgid "_URI:"
+#~ msgstr "_URI:"
+
+#~ msgid "_Virtual Filesystem"
+#~ msgstr "Sistema de archivos _virtual"
+
+#~ msgid "x"
+#~ msgstr "x"
+
+#~ msgid "Done Loading"
+#~ msgstr "Finalizó la carga"
+
+#~ msgid "Directory does not exist."
+#~ msgstr "La carpeta no existe."
+
+#~ msgid ""
+#~ "The directory you selected \"{0}\" does not exist. Please choose a "
+#~ "different directory"
+#~ msgstr ""
+#~ "La carpeta seleccionada «{0}» no existe. Por favor, elija una carpeta "
+#~ "distinta"
+
+#~ msgid "No cameras detected."
+#~ msgstr "No se detectó ninguna cámara."
+
+#~ msgid ""
+#~ "F-Spot was unable to find any cameras attached to this system. Double "
+#~ "check that the camera is connected and has power"
+#~ msgstr ""
+#~ "F-Spot fue incapaz de detectar ninguna cámara conectada en este equipo. "
+#~ "Compruebe que la cámara está conectada y tiene alimentación"
+
+#~ msgid "Error connecting to camera"
+#~ msgstr "Error al conectar con la cámara"
+
+#~ msgid "Received error \"{0}\" while connecting to camera"
+#~ msgstr "Se recibió el error «{0}» al conectar con la cámara"
+
+#~ msgid "Error: Error while transferring; Aborting"
+#~ msgstr "Error: Error al transferir; abortando"
+
+#~ msgid "Error: File Already Exists; Aborting"
+#~ msgstr "Error: El archivo ya existe; abortando"
+
+#~ msgid "Reparented ({0})"
+#~ msgstr "Se ha cambiado el padre/la madre ({0})"
+
+#~ msgid "Could not create a new version"
+#~ msgstr "No se pudo crear una nueva versión"
+
+#~ msgid "Received exception \"{0}\". Unable to create version \"{1}\""
+#~ msgstr "Se recibió la excepción «{0}». No es posible crear la versión «{1}»"
+
+#~ msgid "Really Delete?"
+#~ msgstr "¿Realmente desea eliminarlo?"
+
+#~ msgid "Cancel"
+#~ msgstr "Cancelar"
+
+#~ msgid "Could not delete a version"
+#~ msgstr "No se pudo eliminar una versión"
+
+#~ msgid "Received exception \"{0}\". Unable to delete version \"{1}\""
+#~ msgstr ""
+#~ "Se recibió la excepción «{0}». No es posible eliminar la versión «{1}»"
+
+#~ msgid "Could not rename a version"
+#~ msgstr "No se pudo renombrar una versión"
+
+#~ msgid "Received exception \"{0}\". Unable to rename version to \"{1}\""
+#~ msgstr ""
+#~ "Se recibió la excepción «{0}». No es posible renombrar la versión a «{1}»"
+
#~ msgid "Edit Selected Tag..."
#~ msgstr "Editar la etiqueta seleccionada…"
diff --git a/po/fr.po b/po/fr.po
index 7308dc4..6549344 100644
--- a/po/fr.po
+++ b/po/fr.po
@@ -1,8 +1,7 @@
# French translation for f-spot
-# Copyright (C) 2004-2009 the GNOME Foundation
+# Copyright (C) 2004-2010 the GNOME Foundation
# This file is distributed under the same licence as the f-spot package.
#
-#
# Vincent Moreau <vmoreau at orange.fr>, 2004, 2005.
# Vincent Carriere <carriere_vincent at yahoo.fr>, 2005.
# Axel Peju <pejuaxel at gmail.com>, 2006.
@@ -12,13 +11,14 @@
# Stéphane Raimbault <stephane.raimbault at gmail.com>, 2007-2008.
# Jonathan Ernst <jonathan at ernstfamily.ch>, 2006-2007.
# Bruno Brouard <annoa.b at gmail.com>, 2008-2010.
+#
msgid ""
msgstr ""
"Project-Id-Version: f-spot HEAD\n"
"Report-Msgid-Bugs-To: http://bugzilla.gnome.org/enter_bug.cgi?product=f-"
"spot&component=General\n"
-"POT-Creation-Date: 2010-03-05 17:48+0000\n"
-"PO-Revision-Date: 2010-03-04 15:13+0100\n"
+"POT-Creation-Date: 2010-06-08 09:34+0000\n"
+"PO-Revision-Date: 2010-06-09 18:12+0200\n"
"Last-Translator: Bruno Brouard <annoa.b at gmail.com>\n"
"Language-Team: GNOME French Team <gnomefr at traduc.org>\n"
"MIME-Version: 1.0\n"
@@ -26,13 +26,44 @@ msgstr ""
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=2; plural=n>1;\n"
+#: ../data/desktop-files/f-spot.desktop.in.in.h:1
+#: ../data/desktop-files/f-spot-import.desktop.in.in.h:1
+#: ../data/desktop-files/f-spot-view.desktop.in.in.h:1
+#: ../src/ui/main_window.ui.h:11
+msgid "F-Spot"
+msgstr "F-Spot"
+
+#: ../data/desktop-files/f-spot.desktop.in.in.h:2
+#: ../data/desktop-files/f-spot-import.desktop.in.in.h:2
+msgid "F-Spot Photo Manager"
+msgstr "Gestionnaire de photos F-Spot"
+
+#: ../data/desktop-files/f-spot.desktop.in.in.h:3
+msgid "Organize, enjoy, and share your photos"
+msgstr "Organisez, partagez et profitez de vos photos"
+
+#: ../data/desktop-files/f-spot.desktop.in.in.h:4
+#: ../data/desktop-files/f-spot-import.desktop.in.in.h:4
+msgid "Photo Manager"
+msgstr "Gestionnaire de photos"
+
+#: ../data/desktop-files/f-spot-import.desktop.in.in.h:3
+msgid "Import into F-Spot"
+msgstr "Importer dans F-Spot"
+
+#: ../data/desktop-files/f-spot-view.desktop.in.in.h:2
+msgid "F-Spot Photo Viewer"
+msgstr "Visionneur de photos F-Spot"
+
+#: ../data/desktop-files/f-spot-view.desktop.in.in.h:3
+msgid "Photo Viewer"
+msgstr "Visionneur de photos"
+
#: ../extensions/Exporters/CDExport/CDExport.addin.xml.h:1
msgid "_CD..."
msgstr "_CD..."
#: ../extensions/Exporters/CDExport/CDExport.cs:162
-#: ../extensions/Exporters/FolderExport/FolderExport.cs:392
-#: ../src/CameraFileSelectionDialog.cs:199
msgid "Transferring Pictures"
msgstr "Transfert des images"
@@ -43,37 +74,34 @@ msgstr "Transfert de l'image « {0} » sur CD"
#. Note for translators: This indicates the current photo is photo {0} of {1} out of photos
#: ../extensions/Exporters/CDExport/CDExport.cs:220
-#: ../extensions/Exporters/FlickrExport/FlickrExport.cs:349
-#: ../extensions/Exporters/FolderExport/FolderExport.cs:245
+#: ../extensions/Exporters/FlickrExport/FlickrExport.cs:350
+#: ../extensions/Exporters/FolderExport/FolderExport.cs:220
#: ../extensions/Exporters/GalleryExport/GalleryExport.cs:781
-#: ../src/MainWindow.cs:673 ../src/UI.Dialog/AdjustTimeDialog.cs:129
-#: ../src/UI.Dialog/ProgressDialog.cs:92
+#: ../src/MainWindow.cs:653 ../src/UI.Dialog/AdjustTimeDialog.cs:130
+#: ../src/UI.Dialog/ProgressDialog.cs:90
#, csharp-format
msgid "{0} of {1}"
msgstr "{0} sur {1}"
#: ../extensions/Exporters/CDExport/CDExport.cs:233
-#: ../extensions/Exporters/FacebookExport/FacebookExport.cs:380
-#: ../extensions/Exporters/FlickrExport/FlickrExport.cs:379
-#: ../extensions/Exporters/FolderExport/FolderExport.cs:285
+#: ../extensions/Exporters/FacebookExport/FacebookExport.cs:377
+#: ../extensions/Exporters/FlickrExport/FlickrExport.cs:380
#: ../extensions/Exporters/GalleryExport/GalleryExport.cs:806
-#: ../extensions/Exporters/PicasaWebExport/PicasaWebExport.cs:704
+#: ../extensions/Exporters/PicasaWebExport/PicasaWebExport.cs:705
#: ../extensions/Exporters/SmugMugExport/SmugMugExport.cs:607
msgid "Done Sending Photos"
msgstr "Envoi des photos terminé"
#: ../extensions/Exporters/CDExport/CDExport.cs:235
-#: ../extensions/Exporters/FolderExport/FolderExport.cs:287
msgid "Transfer Complete"
msgstr "Transfert terminé"
#: ../extensions/Exporters/CDExport/CDExport.cs:242
-#: ../extensions/Exporters/FolderExport/FolderExport.cs:292
msgid "Error While Transferring"
msgstr "Erreur lors du transfert"
#: ../extensions/Exporters/CDExport/CDExport.cs:250
-#: ../extensions/Exporters/FolderExport/FolderExport.cs:311
+#: ../extensions/Exporters/FolderExport/FolderExport.cs:278
msgid "Error Transferring"
msgstr "Erreur lors du transfert"
@@ -93,7 +121,7 @@ msgstr "<b>Photos à graver</b>"
#: ../extensions/Exporters/FolderExport/FolderExport.glade.h:7
#: ../extensions/Exporters/GalleryExport/GalleryExport.glade.h:7
#: ../extensions/Exporters/SmugMugExport/SmugMugExport.glade.h:5
-#: ../src/f-spot.glade.h:28
+#: ../src/f-spot.glade.h:20
msgid "Autorotate"
msgstr "Rotation automatique"
@@ -102,7 +130,7 @@ msgid "Create CD"
msgstr "Créer le CD"
#: ../extensions/Exporters/CDExport/CDExport.ui.h:5
-#: ../src/Widgets/InfoBox.cs:221
+#: ../src/Widgets/InfoBox.cs:222
msgid "Size"
msgstr "Taille"
@@ -121,7 +149,7 @@ msgstr "_Parcourir les fichiers précédemment planifiés"
#: ../extensions/Exporters/PicasaWebExport/PicasaWebExport.glade.h:20
#: ../extensions/Exporters/SmugMugExport/SmugMugExport.glade.h:12
#: ../extensions/Exporters/TabbloExport/ui/TabbloExport.ui.h:9
-#: ../src/f-spot.glade.h:95
+#: ../src/f-spot.glade.h:66
msgid "_Export"
msgstr "_Exporter"
@@ -151,11 +179,11 @@ msgstr ""
"Lorsque Facebook vous indique de revenir à cette application, cliquez sur "
"« Valider » ci-dessous."
-#: ../extensions/Exporters/FacebookExport/FacebookExport.cs:280
+#: ../extensions/Exporters/FacebookExport/FacebookExport.cs:281
msgid "Too many images to export"
msgstr "Trop d'images à exporter"
-#: ../extensions/Exporters/FacebookExport/FacebookExport.cs:281
+#: ../extensions/Exporters/FacebookExport/FacebookExport.cs:282
#, csharp-format
msgid ""
"Facebook only permits {0} photographs per album. Please refine your "
@@ -164,27 +192,19 @@ msgstr ""
"Facebook n'autorise que {0} photographies par album. Veuillez affiner votre "
"sélection et essayez à nouveau."
-#: ../extensions/Exporters/FacebookExport/FacebookExport.cs:298
-#: ../extensions/Exporters/FlickrExport/FlickrExport.cs:475
-#: ../extensions/Exporters/GalleryExport/GalleryExport.cs:730
-#: ../extensions/Exporters/PicasaWebExport/PicasaWebExport.cs:597
-#: ../extensions/Exporters/SmugMugExport/SmugMugExport.cs:522
-msgid "Uploading Pictures"
-msgstr "Envoi des images"
-
-#: ../extensions/Exporters/FacebookExport/FacebookExport.cs:319
+#: ../extensions/Exporters/FacebookExport/FacebookExport.cs:297
msgid "Album must have a name"
msgstr "Les albums doivent porter un nom"
-#: ../extensions/Exporters/FacebookExport/FacebookExport.cs:320
+#: ../extensions/Exporters/FacebookExport/FacebookExport.cs:298
msgid "Please name your album or choose an existing album."
msgstr "Veuillez donner un nom à votre album ou choisissez un album existant."
-#: ../extensions/Exporters/FacebookExport/FacebookExport.cs:334
+#: ../extensions/Exporters/FacebookExport/FacebookExport.cs:312
msgid "Creating a new album failed"
msgstr "La création d'un nouvel album a échoué"
-#: ../extensions/Exporters/FacebookExport/FacebookExport.cs:335
+#: ../extensions/Exporters/FacebookExport/FacebookExport.cs:313
#, csharp-format
msgid ""
"An error occurred creating a new album.\n"
@@ -195,45 +215,53 @@ msgstr ""
"\n"
"{0}"
-#: ../extensions/Exporters/FacebookExport/FacebookExport.cs:357
-#: ../extensions/Exporters/PicasaWebExport/PicasaWebExport.cs:660
+#: ../extensions/Exporters/FacebookExport/FacebookExport.cs:326
+#: ../extensions/Exporters/FlickrExport/FlickrExport.cs:476
+#: ../extensions/Exporters/GalleryExport/GalleryExport.cs:730
+#: ../extensions/Exporters/PicasaWebExport/PicasaWebExport.cs:598
+#: ../extensions/Exporters/SmugMugExport/SmugMugExport.cs:522
+msgid "Uploading Pictures"
+msgstr "Envoi des images"
+
+#: ../extensions/Exporters/FacebookExport/FacebookExport.cs:354
+#: ../extensions/Exporters/PicasaWebExport/PicasaWebExport.cs:661
#: ../extensions/Exporters/SmugMugExport/SmugMugExport.cs:565
#, csharp-format
msgid "Uploading picture \"{0}\" ({1} of {2})"
msgstr "Envoi de l'image « {0} » ({1} sur {2})"
-#: ../extensions/Exporters/FacebookExport/FacebookExport.cs:371
+#: ../extensions/Exporters/FacebookExport/FacebookExport.cs:368
#, csharp-format
msgid "Error Uploading To Facebook: {0}"
msgstr "Une erreur est survenue lors de l'envoi vers Facebook : {0}"
-#: ../extensions/Exporters/FacebookExport/FacebookExport.cs:372
-#: ../extensions/Exporters/FlickrExport/FlickrExport.cs:370
-#: ../extensions/Exporters/FolderExport/FolderExport.cs:250
+#: ../extensions/Exporters/FacebookExport/FacebookExport.cs:369
+#: ../extensions/Exporters/FlickrExport/FlickrExport.cs:371
+#: ../extensions/Exporters/FolderExport/FolderExport.cs:226
#: ../extensions/Exporters/GalleryExport/GalleryExport.cs:797
-#: ../extensions/Exporters/PicasaWebExport/PicasaWebExport.cs:693
+#: ../extensions/Exporters/PicasaWebExport/PicasaWebExport.cs:694
#: ../extensions/Exporters/SmugMugExport/SmugMugExport.cs:596
#: ../extensions/Exporters/TabbloExport/TabbloExport.cs:319
msgid "Error"
msgstr "Erreur"
-#: ../extensions/Exporters/FacebookExport/FacebookExport.cs:382
-#: ../extensions/Exporters/FlickrExport/FlickrExport.cs:381
+#: ../extensions/Exporters/FacebookExport/FacebookExport.cs:379
+#: ../extensions/Exporters/FlickrExport/FlickrExport.cs:382
#: ../extensions/Exporters/GalleryExport/GalleryExport.cs:808
-#: ../extensions/Exporters/PicasaWebExport/PicasaWebExport.cs:706
+#: ../extensions/Exporters/PicasaWebExport/PicasaWebExport.cs:707
#: ../extensions/Exporters/SmugMugExport/SmugMugExport.cs:609
msgid "Upload Complete"
msgstr "Envoi terminé"
-#: ../extensions/Exporters/FacebookExport/FacebookExport.cs:385
+#: ../extensions/Exporters/FacebookExport/FacebookExport.cs:382
msgid "Visit F-Spot group on Facebook"
msgstr "Visitez le groupe F-Spot sur Facebook"
-#: ../extensions/Exporters/FacebookExport/FacebookExportDialog.cs:211
+#: ../extensions/Exporters/FacebookExport/FacebookExportDialog.cs:212
msgid "Waiting for authentication"
msgstr "Attente d'authentification"
-#: ../extensions/Exporters/FacebookExport/FacebookExportDialog.cs:212
+#: ../extensions/Exporters/FacebookExport/FacebookExportDialog.cs:213
msgid ""
"F-Spot will now launch your browser so that you can log into Facebook.\n"
"\n"
@@ -249,15 +277,15 @@ msgstr ""
"keyring, si possible, et l'utilisera à nouveau pour de futures exportations "
"Facebook."
-#: ../extensions/Exporters/FacebookExport/FacebookExportDialog.cs:217
+#: ../extensions/Exporters/FacebookExport/FacebookExportDialog.cs:218
msgid "Authenticating..."
msgstr "Authentification en cours..."
-#: ../extensions/Exporters/FacebookExport/FacebookExportDialog.cs:227
+#: ../extensions/Exporters/FacebookExport/FacebookExportDialog.cs:228
msgid "Error logging into Facebook"
msgstr "Erreur lors de la connexion à Facebook"
-#: ../extensions/Exporters/FacebookExport/FacebookExportDialog.cs:228
+#: ../extensions/Exporters/FacebookExport/FacebookExportDialog.cs:229
msgid ""
"There was a problem logging into Facebook. Check your credentials and try "
"again."
@@ -265,23 +293,23 @@ msgstr ""
"Problème de connexion à Facebook. Vérifiez vos informations d'identification "
"et essayez à nouveau."
-#: ../extensions/Exporters/FacebookExport/FacebookExportDialog.cs:237
+#: ../extensions/Exporters/FacebookExport/FacebookExportDialog.cs:238
msgid "Authorizing Session"
msgstr "Session d'authentification"
-#: ../extensions/Exporters/FacebookExport/FacebookExportDialog.cs:246
+#: ../extensions/Exporters/FacebookExport/FacebookExportDialog.cs:247
msgid "Session established, fetching user info..."
msgstr "Session établie, récupération des informations sur l'utilisateur..."
-#: ../extensions/Exporters/FacebookExport/FacebookExportDialog.cs:252
+#: ../extensions/Exporters/FacebookExport/FacebookExportDialog.cs:253
msgid "Session established, fetching friend list..."
msgstr "Session établie, récupération de la liste des amis..."
-#: ../extensions/Exporters/FacebookExport/FacebookExportDialog.cs:262
+#: ../extensions/Exporters/FacebookExport/FacebookExportDialog.cs:263
msgid "Session established, fetching friend details..."
msgstr "Session établie, récupération des détails sur les amis..."
-#: ../extensions/Exporters/FacebookExport/FacebookExportDialog.cs:272
+#: ../extensions/Exporters/FacebookExport/FacebookExportDialog.cs:275
msgid "Session established, fetching photo albums..."
msgstr "Session établie, récupération des albums photo..."
@@ -291,11 +319,11 @@ msgstr "Session établie, récupération des albums photo..."
msgid "{0} {1} is logged into Facebook"
msgstr "{0} {1} est connecté à Facebook"
-#: ../extensions/Exporters/FacebookExport/FacebookExportDialog.cs:291
+#: ../extensions/Exporters/FacebookExport/FacebookExportDialog.cs:294
msgid "Facebook Connection Error"
msgstr "Erreur de connexion à Facebook"
-#: ../extensions/Exporters/FacebookExport/FacebookExportDialog.cs:292
+#: ../extensions/Exporters/FacebookExport/FacebookExportDialog.cs:295
#, csharp-format
msgid ""
"There was an error when downloading your information from Facebook.\n"
@@ -307,7 +335,7 @@ msgstr ""
"\n"
"Message Facebook : {0}"
-#: ../extensions/Exporters/FacebookExport/FacebookExportDialog.cs:321
+#: ../extensions/Exporters/FacebookExport/FacebookExportDialog.cs:324
msgid "You are not logged in."
msgstr "Vous n'êtes pas connecté."
@@ -349,7 +377,7 @@ msgid "Logout"
msgstr "Déconnexion"
#: ../extensions/Exporters/FacebookExport/FacebookExport.ui.h:10
-#: ../src/Widgets/InfoBox.cs:212
+#: ../src/Widgets/InfoBox.cs:213
msgid "Name"
msgstr "Nom"
@@ -385,12 +413,12 @@ msgstr "_Flickr..."
msgid "_Zooomr..."
msgstr "_Zooomr..."
-#: ../extensions/Exporters/FlickrExport/FlickrExport.cs:105
+#: ../extensions/Exporters/FlickrExport/FlickrExport.cs:106
#: ../extensions/Exporters/FlickrExport/FlickrExport.glade.h:5
msgid "Authorize"
msgstr "S'authentifier"
-#: ../extensions/Exporters/FlickrExport/FlickrExport.cs:111
+#: ../extensions/Exporters/FlickrExport/FlickrExport.cs:112
#, csharp-format
msgid ""
"Return to this window after you have finished the authorization process on "
@@ -399,60 +427,59 @@ msgstr ""
"Revenez à cette fenêtre après le processus d'authentification sur {0} et "
"cliquez sur le bouton « Terminer l'authentification » ci-dessous"
-#: ../extensions/Exporters/FlickrExport/FlickrExport.cs:112
+#: ../extensions/Exporters/FlickrExport/FlickrExport.cs:113
msgid "Complete Authorization"
msgstr "Terminer l'authentification"
-#: ../extensions/Exporters/FlickrExport/FlickrExport.cs:117
+#: ../extensions/Exporters/FlickrExport/FlickrExport.cs:118
#, csharp-format
msgid "Logging into {0}"
msgstr "Connexion à {0}"
-#: ../extensions/Exporters/FlickrExport/FlickrExport.cs:118
+#: ../extensions/Exporters/FlickrExport/FlickrExport.cs:119
msgid "Checking credentials..."
msgstr "Vérification des informations d'identification..."
-#: ../extensions/Exporters/FlickrExport/FlickrExport.cs:125
+#: ../extensions/Exporters/FlickrExport/FlickrExport.cs:126
#, csharp-format
msgid "Welcome {0} you are connected to {1}"
msgstr "Bienvenue {0}, vous êtes connecté à {1}"
-#: ../extensions/Exporters/FlickrExport/FlickrExport.cs:128
+#: ../extensions/Exporters/FlickrExport/FlickrExport.cs:129
#, csharp-format
msgid "Sign in as a different user"
msgstr "S'identifier en tant qu'utilisateur différent"
-#: ../extensions/Exporters/FlickrExport/FlickrExport.cs:133
+#: ../extensions/Exporters/FlickrExport/FlickrExport.cs:134
#, csharp-format
msgid "Used {0} of your allowed {1} monthly quota"
msgstr "{0} utilisés de votre quota mensuel de {1}"
-#: ../extensions/Exporters/FlickrExport/FlickrExport.cs:297
+#: ../extensions/Exporters/FlickrExport/FlickrExport.cs:298
msgid "Unable to log on"
msgstr "Impossible de se connecter"
-#: ../extensions/Exporters/FlickrExport/FlickrExport.cs:317
+#: ../extensions/Exporters/FlickrExport/FlickrExport.cs:318
#, csharp-format
msgid "Waiting for response {0} of {1}"
msgstr "En attente de réponse {0} sur {1}"
-#: ../extensions/Exporters/FlickrExport/FlickrExport.cs:344
-#: ../extensions/Exporters/FolderExport/FolderExport.cs:242
+#: ../extensions/Exporters/FlickrExport/FlickrExport.cs:345
#: ../extensions/Exporters/GalleryExport/GalleryExport.cs:777
#, csharp-format
msgid "Uploading picture \"{0}\""
msgstr "Envoi de l'image « {0} »"
-#: ../extensions/Exporters/FlickrExport/FlickrExport.cs:367
+#: ../extensions/Exporters/FlickrExport/FlickrExport.cs:368
#, csharp-format
msgid "Error Uploading To {0}: {1}"
msgstr "Erreur lors de l'envoi vers {0} : {1}"
-#: ../extensions/Exporters/FlickrExport/FlickrExport.cs:454
+#: ../extensions/Exporters/FlickrExport/FlickrExport.cs:455
msgid "Unable to log on."
msgstr "Impossible de se connecter."
-#: ../extensions/Exporters/FlickrExport/FlickrExport.cs:455
+#: ../extensions/Exporters/FlickrExport/FlickrExport.cs:456
#, csharp-format
msgid ""
"F-Spot was unable to log on to {0}. Make sure you have given the "
@@ -462,7 +489,6 @@ msgstr ""
"informations d'authentification en utilisant l'interface web de {0}."
#: ../extensions/Exporters/FlickrExport/FlickrExport.glade.h:1
-#: ../src/f-spot.glade.h:8
msgid "<b>Account</b>"
msgstr "<b>Compte</b>"
@@ -472,7 +498,7 @@ msgstr "<b>Compte</b>"
#: ../extensions/Exporters/PicasaWebExport/PicasaWebExport.glade.h:2
#: ../extensions/Exporters/SmugMugExport/SmugMugExport.glade.h:2
#: ../extensions/Exporters/TabbloExport/ui/TabbloExport.ui.h:2
-#: ../src/f-spot.glade.h:14 ../src/UI.Dialog/ui/AdjustTimeDialog.ui.h:5
+#: ../src/f-spot.glade.h:8 ../src/UI.Dialog/ui/AdjustTimeDialog.ui.h:5
msgid "<b>Photos</b>"
msgstr "<b>Photos</b>"
@@ -481,7 +507,7 @@ msgstr "<b>Photos</b>"
#: ../extensions/Exporters/GalleryExport/GalleryExport.glade.h:4
#: ../extensions/Exporters/PicasaWebExport/PicasaWebExport.glade.h:4
#: ../extensions/Exporters/SmugMugExport/SmugMugExport.glade.h:4
-#: ../src/f-spot.glade.h:16
+#: ../src/f-spot.glade.h:10
msgid "<b>Style</b>"
msgstr "<b>Style</b>"
@@ -494,7 +520,6 @@ msgstr "<b>Afficher les permissions</b>"
#: ../extensions/Exporters/PicasaWebExport/PicasaWebExport.glade.h:9
#: ../extensions/Exporters/SmugMugExport/SmugMugExport.glade.h:6
#: ../extensions/Exporters/TabbloExport/ui/TabbloExport.ui.h:5
-#: ../src/f-spot.glade.h:44
msgid "Export"
msgstr "Exporter"
@@ -538,7 +563,6 @@ msgstr "Visible pour les amis"
#: ../extensions/Exporters/FlickrExport/FlickrExport.glade.h:16
#: ../extensions/Exporters/PicasaWebExport/PicasaWebExport.glade.h:21
-#: ../src/f-spot.glade.h:96
msgid "_Export tags"
msgstr "_Exporter les étiquettes"
@@ -547,7 +571,6 @@ msgstr "_Exporter les étiquettes"
#: ../extensions/Exporters/GalleryExport/GalleryExport.glade.h:21
#: ../extensions/Exporters/PicasaWebExport/PicasaWebExport.glade.h:25
#: ../extensions/Exporters/SmugMugExport/SmugMugExport.glade.h:15
-#: ../src/f-spot.glade.h:109
msgid "_Resize to: "
msgstr "_Redimensionner : "
@@ -560,7 +583,6 @@ msgstr "_Afficher les photos dans le navigateur après l'envoi"
#: ../extensions/Exporters/GalleryExport/GalleryExport.glade.h:24
#: ../extensions/Exporters/PicasaWebExport/PicasaWebExport.glade.h:27
#: ../extensions/Exporters/SmugMugExport/SmugMugExport.glade.h:17
-#: ../src/f-spot.glade.h:125
msgid "pixels"
msgstr "pixels"
@@ -568,82 +590,100 @@ msgstr "pixels"
msgid "F_older..."
msgstr "D_ossier..."
-#: ../extensions/Exporters/FolderExport/FolderExport.cs:140
+#: ../extensions/Exporters/FolderExport/FolderExport.cs:120
msgid "Select Export Folder"
msgstr "Sélectionner un dossier d'exportation"
-#: ../extensions/Exporters/FolderExport/FolderExport.cs:198
+#: ../extensions/Exporters/FolderExport/FolderExport.cs:173
msgid "Building Gallery"
msgstr "Création de la galerie"
+#: ../extensions/Exporters/FolderExport/FolderExport.cs:217
+#, csharp-format
+msgid "Exporting \"{0}\"..."
+msgstr "Exportation de « {0} »..."
+
# Le {1}, c'est pour le retour à la ligne
-#: ../extensions/Exporters/FolderExport/FolderExport.cs:248
+#: ../extensions/Exporters/FolderExport/FolderExport.cs:224
#, csharp-format
-msgid "Error uploading picture \"{0}\" to Gallery:{2}{1}"
-msgstr "Erreur à l'envoi de l'image {0} vers la galerie : {2}{1}"
+msgid "Error Copying \"{0}\" to Gallery:{2}{1}"
+msgstr "Erreur lors de la copie de {0} vers la galerie : {2}{1}"
+
+#: ../extensions/Exporters/FolderExport/FolderExport.cs:250
+#, csharp-format
+msgid "Transferring to \"{0}\""
+msgstr "Transfert vers « {0} »"
+
+#: ../extensions/Exporters/FolderExport/FolderExport.cs:251
+msgid "Transferring..."
+msgstr "Transfert en cours..."
+
+#. No need to check result here as if result is not true, an Exception will be thrown before
+#: ../extensions/Exporters/FolderExport/FolderExport.cs:256
+msgid "Export Complete."
+msgstr "Exportation terminée."
-#: ../extensions/Exporters/FolderExport/FolderExport.cs:333
-msgid "Error: Error while transferring; Aborting"
-msgstr "Erreur lors du transfert du fichier ; abandon."
+#: ../extensions/Exporters/FolderExport/FolderExport.cs:258
+msgid "Exporting Photos Completed."
+msgstr "Exportation des photos terminée."
-#: ../extensions/Exporters/FolderExport/FolderExport.cs:336
-msgid "Error: File Already Exists; Aborting"
-msgstr "Erreur car le fichier existe déjà ; abandon."
+#: ../extensions/Exporters/FolderExport/FolderExport.cs:325
+msgid "Exporting Photos"
+msgstr "Exportation des photos en cours"
#. Note for translators: light as clear, opposite as dark
-#: ../extensions/Exporters/FolderExport/FolderExport.cs:807
+#: ../extensions/Exporters/FolderExport/FolderExport.cs:743
msgid "Light"
msgstr "Lumineux"
-#: ../extensions/Exporters/FolderExport/FolderExport.cs:808
+#: ../extensions/Exporters/FolderExport/FolderExport.cs:744
msgid "Dark"
msgstr "Sombre"
# Je ne vois pas l'intérêt de cette abréviation ! SRA
#. Abbreviation of previous
-#: ../extensions/Exporters/FolderExport/FolderExport.cs:988
+#: ../extensions/Exporters/FolderExport/FolderExport.cs:924
msgid "Prev"
msgstr "Préc."
-#: ../extensions/Exporters/FolderExport/FolderExport.cs:990
-#: ../extensions/Exporters/FolderExport/FolderExport.cs:1231
-#: ../src/CameraFileSelectionDialog.cs:82
+#: ../extensions/Exporters/FolderExport/FolderExport.cs:926
+#: ../extensions/Exporters/FolderExport/FolderExport.cs:1167
msgid "Index"
msgstr "Index"
#. Don't care otherwise, Tags sounds reasonable
-#: ../extensions/Exporters/FolderExport/FolderExport.cs:993
-#: ../extensions/Exporters/FolderExport/FolderExport.cs:1165
-#: ../extensions/Exporters/FolderExport/FolderExport.cs:1205
-#: ../src/MainWindow.cs:376 ../src/Widgets/Sidebar.cs:56
+#: ../extensions/Exporters/FolderExport/FolderExport.cs:929
+#: ../extensions/Exporters/FolderExport/FolderExport.cs:1101
+#: ../extensions/Exporters/FolderExport/FolderExport.cs:1141
+#: ../src/MainWindow.cs:357 ../src/Widgets/Sidebar.cs:56
msgid "Tags"
msgstr "Étiquettes"
-#: ../extensions/Exporters/FolderExport/FolderExport.cs:996
-#: ../src/f-spot.glade.h:58 ../src/ItemAction.cs:102
+#: ../extensions/Exporters/FolderExport/FolderExport.cs:932
+#: ../src/ItemAction.cs:102
msgid "Next"
msgstr "Suivante"
-#: ../extensions/Exporters/FolderExport/FolderExport.cs:1100
+#: ../extensions/Exporters/FolderExport/FolderExport.cs:1036
msgid "Gallery generated by"
msgstr "Galerie générée par"
-#: ../extensions/Exporters/FolderExport/FolderExport.cs:1140
+#: ../extensions/Exporters/FolderExport/FolderExport.cs:1076
msgid "Show Styles"
msgstr "Afficher les styles"
-#: ../extensions/Exporters/FolderExport/FolderExport.cs:1141
+#: ../extensions/Exporters/FolderExport/FolderExport.cs:1077
msgid "Hide Styles"
msgstr "Masquer les styles"
-#: ../extensions/Exporters/FolderExport/FolderExport.cs:1176
-#: ../extensions/Exporters/FolderExport/FolderExport.cs:1177
-#: ../src/ui/main_window.ui.h:24
+#: ../extensions/Exporters/FolderExport/FolderExport.cs:1112
+#: ../extensions/Exporters/FolderExport/FolderExport.cs:1113
+#: ../src/ui/main_window.ui.h:25
msgid "Tags: "
msgstr "Étiquettes : "
-#: ../extensions/Exporters/FolderExport/FolderExport.cs:1308
-#: ../extensions/Exporters/FolderExport/FolderExport.cs:1441
+#: ../extensions/Exporters/FolderExport/FolderExport.cs:1244
+#: ../extensions/Exporters/FolderExport/FolderExport.cs:1377
msgid "Page:"
msgstr "Page :"
@@ -652,7 +692,6 @@ msgid "\n"
msgstr "\n"
#: ../extensions/Exporters/FolderExport/FolderExport.glade.h:3
-#: ../src/f-spot.glade.h:11
msgid "<b>Destination</b>"
msgstr "<b>Destination</b>"
@@ -700,11 +739,15 @@ msgstr "_Dossier :"
msgid "_Save the files only"
msgstr "_Enregistrer uniquement les fichiers"
+#: ../extensions/Exporters/GalleryExport/FormClient.cs:294
+msgid "Unhandled exception"
+msgstr "Exception non gérée"
+
#: ../extensions/Exporters/GalleryExport/GalleryExport.addin.xml.h:1
msgid "Web _Gallery..."
msgstr "_Galerie Web..."
-#: ../extensions/Exporters/GalleryExport/GalleryExport.cs:52
+#: ../extensions/Exporters/GalleryExport/GalleryExport.cs:53
msgid ""
"Cannot connect to a Gallery for which the version is unknown.\n"
"Please check that you have Remote plugin 1.0.8 or later"
@@ -769,25 +812,25 @@ msgstr ""
"Une erreur est survenue à l'envoi de l'image « {0} » vers la galerie : {1}"
#: ../extensions/Exporters/GalleryExport/GalleryExport.cs:824
-#: ../extensions/Exporters/PicasaWebExport/PicasaWebExport.cs:727
+#: ../extensions/Exporters/PicasaWebExport/PicasaWebExport.cs:728
#: ../extensions/Exporters/SmugMugExport/SmugMugExport.cs:630
msgid "(No Gallery)"
msgstr "(aucune galerie)"
#: ../extensions/Exporters/GalleryExport/GalleryExport.cs:916
-#: ../extensions/Exporters/PicasaWebExport/PicasaWebExport.cs:849
+#: ../extensions/Exporters/PicasaWebExport/PicasaWebExport.cs:850
#: ../extensions/Exporters/SmugMugExport/SmugMugExport.cs:726
msgid "(Not Connected)"
msgstr "(non connecté)"
#: ../extensions/Exporters/GalleryExport/GalleryExport.cs:917
-#: ../extensions/Exporters/PicasaWebExport/PicasaWebExport.cs:850
+#: ../extensions/Exporters/PicasaWebExport/PicasaWebExport.cs:851
#: ../extensions/Exporters/SmugMugExport/SmugMugExport.cs:727
msgid "(No Albums)"
msgstr "(aucun album)"
#: ../extensions/Exporters/GalleryExport/GalleryExport.cs:969
-#: ../extensions/Exporters/PicasaWebExport/PicasaWebExport.cs:915
+#: ../extensions/Exporters/PicasaWebExport/PicasaWebExport.cs:916
#: ../extensions/Exporters/SmugMugExport/SmugMugExport.cs:768
msgid "No account selected"
msgstr "Aucun compte sélectionné"
@@ -795,12 +838,10 @@ msgstr "Aucun compte sélectionné"
#: ../extensions/Exporters/GalleryExport/GalleryExport.glade.h:1
#: ../extensions/Exporters/PicasaWebExport/PicasaWebExport.glade.h:1
#: ../extensions/Exporters/SmugMugExport/SmugMugExport.glade.h:1
-#: ../src/f-spot.glade.h:9
msgid "<b>Album</b>"
msgstr "<b>Album</b>"
#: ../extensions/Exporters/GalleryExport/GalleryExport.glade.h:2
-#: ../src/f-spot.glade.h:12
msgid "<b>Gallery</b>"
msgstr "<b>Galerie</b>"
@@ -843,7 +884,6 @@ msgstr "_Description :"
#: ../extensions/Exporters/GalleryExport/GalleryExport.glade.h:16
#: ../extensions/Exporters/PicasaWebExport/PicasaWebExport.glade.h:22
#: ../extensions/Exporters/SmugMugExport/SmugMugExport.glade.h:13
-#: ../src/f-spot.glade.h:97
msgid "_Export to Album:"
msgstr "_Exporter vers l'album :"
@@ -878,20 +918,20 @@ msgstr "_Titre :"
msgid "_Username:"
msgstr "_Identifiant :"
-#: ../extensions/Exporters/GalleryExport/GalleryRemote.cs:361
+#: ../extensions/Exporters/GalleryExport/GalleryRemote.cs:362
msgid "Error reading server response"
msgstr "Erreur à la lecture de la réponse du serveur"
#. failed to find the response
-#: ../extensions/Exporters/GalleryExport/GalleryRemote.cs:373
+#: ../extensions/Exporters/GalleryExport/GalleryRemote.cs:374
msgid "Server returned response without Gallery content"
msgstr "Le serveur a retourné une réponse sans le contenu de la galerie"
-#: ../extensions/Exporters/GalleryExport/GalleryRemote.cs:710
+#: ../extensions/Exporters/GalleryExport/GalleryRemote.cs:711
msgid "Error while creating new album"
msgstr "Erreur lors de la création du nouvel album"
-#: ../extensions/Exporters/GalleryExport/GalleryRemote.cs:711
+#: ../extensions/Exporters/GalleryExport/GalleryRemote.cs:712
#, csharp-format
msgid ""
"The following error was encountered while attempting to perform the "
@@ -906,38 +946,38 @@ msgstr ""
msgid "_PicasaWeb..."
msgstr "_Picasaweb..."
-#: ../extensions/Exporters/PicasaWebExport/PicasaWebExport.cs:441
+#: ../extensions/Exporters/PicasaWebExport/PicasaWebExport.cs:442
msgid "Error while creating Album"
msgstr "Erreur à la création de l'album"
-#: ../extensions/Exporters/PicasaWebExport/PicasaWebExport.cs:442
+#: ../extensions/Exporters/PicasaWebExport/PicasaWebExport.cs:443
#, csharp-format
msgid ""
"The following error was encountered while attempting to create an album: {0}"
msgstr "L'erreur suivante est survenue lors de la création de l'album : {0}"
-#: ../extensions/Exporters/PicasaWebExport/PicasaWebExport.cs:620
+#: ../extensions/Exporters/PicasaWebExport/PicasaWebExport.cs:621
#, csharp-format
msgid "{0} Sent"
msgstr "{0} envoyés"
-#: ../extensions/Exporters/PicasaWebExport/PicasaWebExport.cs:622
+#: ../extensions/Exporters/PicasaWebExport/PicasaWebExport.cs:623
#, csharp-format
msgid "{0} of approx. {1}"
msgstr "{0} sur environ {1}"
-#: ../extensions/Exporters/PicasaWebExport/PicasaWebExport.cs:691
+#: ../extensions/Exporters/PicasaWebExport/PicasaWebExport.cs:692
#: ../extensions/Exporters/SmugMugExport/SmugMugExport.cs:594
#, csharp-format
msgid "Error Uploading To Gallery: {0}"
msgstr "Une erreur est survenue lors de l'envoi vers la galerie : {0}"
-#: ../extensions/Exporters/PicasaWebExport/PicasaWebExport.cs:778
+#: ../extensions/Exporters/PicasaWebExport/PicasaWebExport.cs:779
#, csharp-format
msgid "Available space: {0}, {1}% used out of {2}"
msgstr "Espace disponible : {0}, {1}% utilisé sur {2}"
-#: ../extensions/Exporters/PicasaWebExport/PicasaWebExport.cs:891
+#: ../extensions/Exporters/PicasaWebExport/PicasaWebExport.cs:892
#, csharp-format
msgid ""
"The selected album has a limit of {0} pictures,\n"
@@ -1092,7 +1132,7 @@ msgid "Compressed fil_e..."
msgstr "Fichi_er compressé..."
#: ../extensions/Exporters/ZipExport/ZipExport.cs:47
-#: ../src/Widgets/EditorPage.cs:197
+#: ../src/Widgets/EditorPage.cs:198
msgid "No selection available"
msgstr "Aucune sélection disponible"
@@ -1133,6 +1173,10 @@ msgstr "_Emplacement :"
msgid "_Scale:"
msgstr "_Échelle :"
+#: ../extensions/Tools/HashJob/HashJob.addin.xml.h:1
+msgid "Check for Duplicates..."
+msgstr "Vérification des doublons..."
+
#: ../extensions/Tools/HashJob/HashJob.cs:53
msgid ""
"In order to detect duplicates on pictures you imported before 0.5.0, F-Spot "
@@ -1152,7 +1196,7 @@ msgstr ""
"Vous avez actuellement {0} photos nécessitant un calcul md5 et {1} travaux "
"en attente"
-#: ../extensions/Tools/HashJob/HashJob.cs:75 ../src/ui/main_window.ui.h:37
+#: ../extensions/Tools/HashJob/HashJob.cs:75 ../src/ui/main_window.ui.h:38
msgid "_Close"
msgstr "_Fermer"
@@ -1164,10 +1208,6 @@ msgstr "Traitement des images..."
msgid "Stopped"
msgstr "Interrompu"
-#: ../extensions/Tools/HashJob/HashJob.addin.xml.h:1
-msgid "Check for Duplicates..."
-msgstr "Vérification des doublons..."
-
#: ../extensions/Tools/LiveWebGallery/GalleryRequestHandler.cs:107
msgid "F-Spot Gallery"
msgstr "Galerie F-Spot"
@@ -1200,6 +1240,19 @@ msgstr "Sélectionné"
msgid "Live Web Gallery"
msgstr "Galerie Web en ligne"
+#: ../extensions/Tools/LiveWebGallery/LiveWebGalleryDialog.cs:89
+msgid "none"
+msgstr "aucun"
+
+#: ../extensions/Tools/LiveWebGallery/LiveWebGalleryDialog.cs:92
+#, csharp-format
+msgid " Gallery: {0}, Photos: {1}, Last client: {3}"
+msgstr " Galerie : {0}, photos : {1}, dernier client : {3}"
+
+#: ../extensions/Tools/LiveWebGallery/LiveWebGalleryDialog.cs:156
+msgid "Gallery is inactive"
+msgstr "La galerie est inactive"
+
#: ../extensions/Tools/LiveWebGallery/ui/LiveWebGallery.ui.h:1
msgid ""
"<small><i>The gallery stays active until you either deactivate it or close\n"
@@ -1264,19 +1317,6 @@ msgstr "Partager :"
msgid "Views:"
msgstr "Affichages :"
-#: ../extensions/Tools/LiveWebGallery/LiveWebGalleryDialog.cs:89
-msgid "none"
-msgstr "aucun"
-
-#: ../extensions/Tools/LiveWebGallery/LiveWebGalleryDialog.cs:92
-#, csharp-format
-msgid " Gallery: {0}, Photos: {1}, Last client: {3}"
-msgstr " Galerie : {0}, photos : {1}, dernier client : {3}"
-
-#: ../extensions/Tools/LiveWebGallery/LiveWebGalleryDialog.cs:156
-msgid "Gallery is inactive"
-msgstr "La galerie est inactive"
-
#: ../extensions/Tools/MergeDb/MergeDb.addin.xml.h:1
msgid "Merge Db"
msgstr "Fusionner une base de données"
@@ -1366,11 +1406,11 @@ msgid "New Rolls Only"
msgstr "Nouvelles séries uniquement"
#: ../extensions/Tools/MergeDb/MergeDb.glade.h:15
-#: ../src/FileImportBackend.cs:291 ../src/UI.Dialog/ThreadProgressDialog.cs:58
+#: ../src/UI.Dialog/ThreadProgressDialog.cs:57
msgid "Skip"
msgstr "Ignorer"
-#: ../extensions/Tools/MergeDb/PickFolderDialog.cs:33
+#: ../extensions/Tools/MergeDb/PickFolderDialog.cs:34
#, csharp-format
msgid ""
"<big>The database refers to files contained in the <b>{0}</b> folder.\n"
@@ -1410,109 +1450,223 @@ msgstr "Faire de F-Spot mon économiseur d'écran"
msgid "Screensaver Configuration"
msgstr "Configuration de l'économiseur d'écran"
-#: ../f-spot.desktop.in.in.h:1 ../f-spot-import.desktop.in.in.h:1
-#: ../f-spot-view.desktop.in.in.h:1 ../src/ui/main_window.ui.h:10
-msgid "F-Spot"
-msgstr "F-Spot"
+#: ../f-spot.schemas.in.h:1
+msgid "Display of transparent parts."
+msgstr "Affichage des parties transparentes."
-#: ../f-spot.desktop.in.in.h:2 ../f-spot-import.desktop.in.in.h:2
-msgid "F-Spot Photo Manager"
-msgstr "Gestionnaire de photos F-Spot"
+#: ../f-spot.schemas.in.h:2
+msgid "Enable this to allow interpolation on zoomed images."
+msgstr ""
+"Activez cette option pour permettre les interpolations sur les images "
+"zoomées."
-#: ../f-spot.desktop.in.in.h:3
-msgid "Organize, enjoy, and share your photos"
-msgstr "Organisez, partagez et profitez de vos photos"
+#: ../f-spot.schemas.in.h:3
+msgid "Height of the import dialog."
+msgstr "Hauteur de la boîte de dialogue d'importation."
-#: ../f-spot.desktop.in.in.h:4 ../f-spot-import.desktop.in.in.h:4
-msgid "Photo Manager"
-msgstr "Gestionnaire de photos"
+#: ../f-spot.schemas.in.h:4
+msgid "Height of the main window."
+msgstr "Hauteur de la fenêtre principale."
-#: ../f-spot-import.desktop.in.in.h:3
-msgid "Import into F-Spot"
-msgstr "Importer dans F-Spot"
+#: ../f-spot.schemas.in.h:5
+msgid "Height of the photo viewer window."
+msgstr "Hauteur de la fenêtre de l'afficheur photo."
-#: ../f-spot-view.desktop.in.in.h:2
-msgid "F-Spot Photo Viewer"
-msgstr "Visionneur de photos F-Spot"
+#: ../f-spot.schemas.in.h:6
+msgid ""
+"If the 'transparency' option is set, the color specified in this option will "
+"be used as the transparent color when viewing images."
+msgstr ""
+"Si l'option « transparency » est définie, la couleur indiquée pour cette "
+"option est utilisée comme couleur de transparence pour l'affichage des "
+"images."
-#: ../f-spot-view.desktop.in.in.h:3
-msgid "Photo Viewer"
-msgstr "Visionneur de photos"
+#: ../f-spot.schemas.in.h:7
+msgid "Interpolate image on zoom."
+msgstr "Interpoler les images lors du zoom."
-#: ../lib/libfspot/f-jpeg-utils.c:441 ../src/RotateCommand.cs:224
-msgid "File not found"
-msgstr "Fichier non trouvé"
+#: ../f-spot.schemas.in.h:8
+msgid "Maximize the main window."
+msgstr "Maximiser la fenêtre principale."
-#: ../lib/libfspot/f-jpeg-utils.c:464
-#, c-format
-msgid "Unknown transform type %d"
-msgstr "Type de transformation inconnu %d"
+#: ../f-spot.schemas.in.h:9
+msgid "Maximize the photo viewer window."
+msgstr "Maximiser la fenêtre de l'afficheur photo."
-#: ../lib/libfspot/f-jpeg-utils.c:472
-msgid "Operation failed"
-msgstr "L'opération a échoué"
+#: ../f-spot.schemas.in.h:10
+msgid "Path to custom gtkrc for theming F-Spot."
+msgstr "Chemin pour personnaliser gtkrc pour le thème F-Spot."
-#: ../src/CameraFileSelectionDialog.cs:76
-msgid "Preview"
-msgstr "Aperçu"
+#: ../f-spot.schemas.in.h:11
+msgid "Show dates in the thumbnail view."
+msgstr "Afficher les dates dans la vue vignette."
-#: ../src/CameraFileSelectionDialog.cs:78
-msgid "Path"
-msgstr "Chemin"
+#: ../f-spot.schemas.in.h:12
+msgid "Show ratings in the thumbnail view."
+msgstr "Afficher les notes dans la vue vignette."
-#: ../src/CameraFileSelectionDialog.cs:80 ../src/f-spot.glade.h:47
-msgid "File"
-msgstr "Fichier"
+#: ../f-spot.schemas.in.h:13
+msgid "Show tags in the thumbnail view."
+msgstr "Afficher les étiquettes dans la vue vignette."
-#: ../src/CameraFileSelectionDialog.cs:102
-msgid "Select Tag"
-msgstr "Sélectionner une étiquette"
+#: ../f-spot.schemas.in.h:14
+msgid "Show the filename in the viewer window."
+msgstr "Afficher le nom du fichier dans la fenêtre de l'afficheur."
-#: ../src/CameraFileSelectionDialog.cs:138
-msgid "Downloading Previews"
-msgstr "Téléchargement des aperçus"
+#: ../f-spot.schemas.in.h:15
+msgid "Show the filmstrip in the main window."
+msgstr "Afficher la bande contact dans la fenêtre principale."
-#: ../src/CameraFileSelectionDialog.cs:148
-#, csharp-format
-msgid "Downloading Preview of {0}"
-msgstr "Téléchargement de l'aperçu de {0}"
+#: ../f-spot.schemas.in.h:16
+msgid "Show the sidebar in the main window."
+msgstr "Afficher la barre latérale dans la fenêtre principale."
-#: ../src/CameraFileSelectionDialog.cs:220
-#, csharp-format
-msgid "Copying file {0} of {1}"
-msgstr "Copie du fichier {0} sur {1}"
+#: ../f-spot.schemas.in.h:17
+msgid "Show the timeline in the main window."
+msgstr "Afficher la frise chronologique dans la fenêtre principale."
-#: ../src/CameraFileSelectionDialog.cs:235
-msgid "Error transferring file"
-msgstr "Erreur lors du transfert du fichier"
+#: ../f-spot.schemas.in.h:18
+msgid "Show the toolbar in the main window."
+msgstr "Afficher la barre d'outils dans la fenêtre principale."
-#: ../src/CameraFileSelectionDialog.cs:244
-msgid "Download Complete"
-msgstr "Téléchargement terminé"
+#: ../f-spot.schemas.in.h:19
+msgid "Show the toolbar in the photo viewer window."
+msgstr "Afficher la barre d'outils dans la fenêtre de l'afficheur photo."
-#: ../src/CameraFileSelectionDialog.cs:244
-msgid "Done Copying Files"
-msgstr "Copie des fichiers terminée"
+#: ../f-spot.schemas.in.h:20
+msgid "Size of the tag icons shown in the sidebar."
+msgstr "Taille des icônes d'étiquette affichées dans la barre latérale."
-#: ../src/CameraFileSelectionDialog.cs:268
-#, csharp-format
-msgid "Transferring \"{0}\" from camera"
-msgstr "Transfert de l'image « {0} » depuis l'appareil photo"
+#: ../f-spot.schemas.in.h:21
+msgid "The X position to use for the main window."
+msgstr "La position X à utiliser pour la fenêtre principale."
-#: ../src/CameraSelectionDialog.cs:29 ../src/Widgets/InfoBox.cs:231
-msgid "Camera"
-msgstr "Appareil photo"
+#: ../f-spot.schemas.in.h:22
+msgid "The X position to use for the photo viewer window."
+msgstr "La position X à utiliser pour la fenêtre de l'afficheur photo."
+
+#: ../f-spot.schemas.in.h:23
+msgid "The Y position to use for the main window."
+msgstr "La position Y à utiliser pour la fenêtre principale."
+
+#: ../f-spot.schemas.in.h:24
+msgid "The Y position to use for the photo viewer window."
+msgstr "La position Y à utiliser pour la fenêtre de l'afficheur photo."
+
+#: ../f-spot.schemas.in.h:25
+msgid "The color to use for transparent parts."
+msgstr "La couleur à utiliser pour les parties transparentes."
+
+#: ../f-spot.schemas.in.h:26
+msgid "The height dimension to use for the import dialog."
+msgstr "La hauteur à utiliser pour la boîte de dialogue d'importation."
+
+#: ../f-spot.schemas.in.h:27
+msgid "The height dimension to use for the main window."
+msgstr "La hauteur à utiliser pour la fenêtre principale."
+
+#: ../f-spot.schemas.in.h:28
+msgid "The height dimension to use for the photo viewer window."
+msgstr "La hauteur à utiliser pour la fenêtre de l'afficheur photo."
+
+#: ../f-spot.schemas.in.h:29
+msgid "The orientation of the filmstrip, if shown."
+msgstr "L'orientation de la bande contact, si présente."
+
+#: ../f-spot.schemas.in.h:30
+msgid "The orientation of the filmstrip."
+msgstr "L'orientation de la bande contact."
+
+#: ../f-spot.schemas.in.h:31
+msgid "The size (width) of the sidebar in the main window."
+msgstr "La taille (largeur) de la barre latérale de la fenêtre principale."
+
+#: ../f-spot.schemas.in.h:32
+msgid "The size of the sidebar in the main window."
+msgstr "La taille de la barre latérale de la fenêtre principale."
+
+#: ../f-spot.schemas.in.h:33
+msgid "The width dimension to use for the import dialog."
+msgstr "La largeur à utiliser pour la boîte de dialogue d'importation."
+
+#: ../f-spot.schemas.in.h:34
+msgid "The width dimension to use for the main window."
+msgstr "La largeur à utiliser pour la fenêtre principale."
+
+#: ../f-spot.schemas.in.h:35
+msgid "The width dimension to use for the photo viewer window."
+msgstr "La largeur à utiliser pour la fenêtre de l'afficheur photo."
+
+#: ../f-spot.schemas.in.h:36
+msgid "Use the current photo's filename as the viewer window's title."
+msgstr ""
+"Utiliser le nom de fichier de la photo actuelle comme titre de la fenêtre de "
+"l'afficheur."
+
+#: ../f-spot.schemas.in.h:37
+msgid "Width of the import dialog."
+msgstr "Largeur de la boîte de dialogue d'importation."
-#: ../src/CameraSelectionDialog.cs:30
-msgid "Port"
-msgstr "Port"
+#: ../f-spot.schemas.in.h:38
+msgid "Width of the main window."
+msgstr "Largeur de la fenêtre principale."
+
+#: ../f-spot.schemas.in.h:39
+msgid "Width of the photo viewer window."
+msgstr "Largeur de la fenêtre de l'afficheur photo."
+
+#: ../f-spot.schemas.in.h:40
+msgid "Width of the preview image pane in the import dialog."
+msgstr ""
+"Largeur du panneau d'aperçu de l'image dans la boîte de dialogue "
+"d'importation."
+
+#: ../f-spot.schemas.in.h:41
+msgid "X position of the main window."
+msgstr "Position X de la fenêtre principale."
+
+#: ../f-spot.schemas.in.h:42
+msgid "X position of the photo viewer window."
+msgstr "Position X de la fenêtre de l'afficheur photo."
+
+#: ../f-spot.schemas.in.h:43
+msgid "Y position of the main window."
+msgstr "Position Y de la fenêtre principale."
+
+#: ../f-spot.schemas.in.h:44
+msgid "Y position of the photo viewer window."
+msgstr "Position Y de la fenêtre de l'afficheur photo."
+
+#: ../f-spot.schemas.in.h:45
+msgid ""
+"You can choose how to display transparent parts in images. This option has "
+"no effect on photos but setting this value to CHECK_PATTERN or CUSTOM_COLOR "
+"could be useful when viewing icons or other artwork with transparent parts."
+msgstr ""
+"Choisissez comment F-Spot va afficher les parties transparentes des images. "
+"Cette option n'a pas d'effet sur les photos, mais la régler à CHECK_PATTERN "
+"ou CUSTOM_COLOR peut être utile pour les icônes ou les logos avec des "
+"parties transparentes."
+
+#: ../lib/libfspot/f-jpeg-utils.c:441 ../src/RotateCommand.cs:211
+msgid "File not found"
+msgstr "Fichier non trouvé"
+
+#: ../lib/libfspot/f-jpeg-utils.c:464
+#, c-format
+msgid "Unknown transform type %d"
+msgstr "Type de transformation inconnu %d"
-#: ../src/Core/App.cs:278
+#: ../lib/libfspot/f-jpeg-utils.c:472
+msgid "Operation failed"
+msgstr "L'opération a échoué"
+
+#: ../src/Core/App.cs:274
#, csharp-format
msgid "No photos matching {0} found"
msgstr "Aucune photo correspondant à {0} n'a été trouvée"
-#: ../src/Core/App.cs:279
+#: ../src/Core/App.cs:275
#, csharp-format
msgid ""
"The tag \"{0}\" is not applied to any photos. Try adding\n"
@@ -1524,11 +1678,11 @@ msgstr ""
"sélectionner une étiquette différente dans la boîte de\n"
"dialogue des préférences de F-Spot."
-#: ../src/Core/App.cs:283
+#: ../src/Core/App.cs:279
msgid "Search returned no results"
msgstr "Aucun résultat"
-#: ../src/Core/App.cs:284
+#: ../src/Core/App.cs:280
msgid ""
"The tag F-Spot is looking for does not exist. Try\n"
"selecting a different tag in the F-Spot preference\n"
@@ -1539,35 +1693,30 @@ msgstr ""
"dialogue des préférences de F-Spot."
#. Note for translators: Reparented is a picture becoming a version of another one
-#: ../src/Core/Photo.cs:473
+#: ../src/Core/Photo.cs:362
msgid "Reparented"
msgstr "Réaffilié"
-#: ../src/Core/Photo.cs:473
-#, csharp-format
-msgid "Reparented ({0})"
-msgstr "Réaffilié ({0})"
-
-#: ../src/Core/Photo.cs:492
+#: ../src/Core/Photo.cs:378
#, csharp-format
msgid "Modified"
msgid_plural "Modified ({0})"
msgstr[0] "Modifiée"
msgstr[1] "Modifiées ({0})"
-#: ../src/Core/Photo.cs:513
+#: ../src/Core/Photo.cs:401
#, csharp-format
msgid "Modified in {1}"
msgstr "Modifiée dans {1}"
-#: ../src/Core/Photo.cs:513
+#: ../src/Core/Photo.cs:401
#, csharp-format
msgid "Modified in {1} ({0})"
msgstr "Modifiée dans {1} ({0})"
#. Note that the original version is never stored in the photo_versions table in the
#. database.
-#: ../src/Core/Photo.cs:671 ../src/f-spot.glade.h:62
+#: ../src/Core/Photo.cs:571 ../src/f-spot.glade.h:39
msgid "Original"
msgstr "Original"
@@ -1583,43 +1732,43 @@ msgstr "Ajuste les couleurs"
msgid "Adjust"
msgstr "Ajuster"
-#: ../src/Editors/CropEditor.cs:35
+#: ../src/Editors/CropEditor.cs:36
msgid "4 x 3 (Book)"
msgstr "11 cm x 15 cm"
-#: ../src/Editors/CropEditor.cs:36
+#: ../src/Editors/CropEditor.cs:37
msgid "4 x 6 (Postcard)"
msgstr "10 cm x 15 cm (carte postale)"
-#: ../src/Editors/CropEditor.cs:37
+#: ../src/Editors/CropEditor.cs:38
msgid "5 x 7 (L, 2L)"
msgstr "13 cm x 18 cm"
-#: ../src/Editors/CropEditor.cs:38
+#: ../src/Editors/CropEditor.cs:39
msgid "8 x 10"
msgstr "20 cm x 25 cm"
-#: ../src/Editors/CropEditor.cs:39
+#: ../src/Editors/CropEditor.cs:40
msgid "Square"
msgstr "Carré"
-#: ../src/Editors/CropEditor.cs:42
+#: ../src/Editors/CropEditor.cs:43
msgid "Crop"
msgstr "Rogner"
-#: ../src/Editors/CropEditor.cs:73
+#: ../src/Editors/CropEditor.cs:74
msgid "Select the area that needs cropping."
msgstr "Sélectionner la zone à rogner."
-#: ../src/Editors/CropEditor.cs:98
+#: ../src/Editors/CropEditor.cs:99
msgid "No Constraint"
msgstr "Aucune contrainte"
-#: ../src/Editors/CropEditor.cs:99
+#: ../src/Editors/CropEditor.cs:100
msgid "Same as photo"
msgstr "Identique à la photo"
-#: ../src/Editors/CropEditor.cs:104
+#: ../src/Editors/CropEditor.cs:105
msgid "Custom Ratios..."
msgstr "Rapports personnalisés..."
@@ -1651,24 +1800,11 @@ msgstr "Flou artistique"
msgid "Straighten"
msgstr "Redressement"
-#: ../src/FileImportBackend.cs:289
-msgid "Import error"
-msgstr "Erreur d'importation"
-
-#: ../src/FileImportBackend.cs:290
-#, csharp-format
-msgid "Error importing {0}{2}{2}{1}"
-msgstr "Erreur lors de l'importation de {0}{2}{2}{1}"
-
#: ../src/Filters/ResizeFilter.cs:70 ../src/Filters/SharpFilter.cs:52
#, csharp-format
msgid "No way to save files of type \"{0}\""
msgstr "Impossible d'enregistrer les fichiers de type « {0} »"
-#: ../src/FormClient.cs:295
-msgid "Unhandled exception"
-msgstr "Exception non gérée"
-
#: ../src/FSpot.addin.xml.h:1
msgid "Copy Photo"
msgstr "Copier la photo"
@@ -1681,17 +1817,17 @@ msgstr "Exporter vers"
msgid "Open _With"
msgstr "Ouvrir _avec"
-#: ../src/FSpot.addin.xml.h:4 ../src/ui/main_window.ui.h:15
+#: ../src/FSpot.addin.xml.h:4 ../src/ui/main_window.ui.h:16
msgid "Rem_ove Tag"
msgstr "_Enlever l'étiquette"
-#: ../src/FSpot.addin.xml.h:5 ../src/f-spot.glade.h:69
-#: ../src/SingleView.cs:425 ../src/ui/main_window.ui.h:16
+#: ../src/FSpot.addin.xml.h:5 ../src/f-spot.glade.h:44
+#: ../src/SingleView.cs:425 ../src/ui/main_window.ui.h:17
msgid "Rotate _Left"
msgstr "Rotation à _gauche"
-#: ../src/FSpot.addin.xml.h:6 ../src/f-spot.glade.h:70
-#: ../src/SingleView.cs:426 ../src/ui/main_window.ui.h:17
+#: ../src/FSpot.addin.xml.h:6 ../src/f-spot.glade.h:45
+#: ../src/SingleView.cs:426 ../src/ui/main_window.ui.h:18
msgid "Rotate _Right"
msgstr "Rotation à _droite"
@@ -1699,75 +1835,63 @@ msgstr "Rotation à _droite"
msgid "Tools"
msgstr "Outils"
-#: ../src/FSpot.addin.xml.h:8 ../src/ui/main_window.ui.h:32
-msgid "_Attach Tag"
-msgstr "_Associer l'étiquette"
-
-#: ../src/FSpot.addin.xml.h:9 ../src/ui/main_window.ui.h:41
+#: ../src/FSpot.addin.xml.h:8 ../src/ui/main_window.ui.h:42
msgid "_Delete From Drive"
msgstr "_Supprimer du lecteur"
-#: ../src/FSpot.addin.xml.h:10 ../src/ui/main_window.ui.h:59
+#: ../src/FSpot.addin.xml.h:9 ../src/ui/main_window.ui.h:61
msgid "_Remove From Catalog"
msgstr "_Enlever du catalogue"
#: ../src/f-spot.glade.h:1
-msgid " "
-msgstr " "
-
-#: ../src/f-spot.glade.h:2
msgid "1024 px"
msgstr "1024 px"
-#: ../src/f-spot.glade.h:3
+#: ../src/f-spot.glade.h:2
msgid "320 px"
msgstr "320 px"
-#: ../src/f-spot.glade.h:4
+#: ../src/f-spot.glade.h:3
msgid "480 px"
msgstr "480 px"
-#: ../src/f-spot.glade.h:5
+#: ../src/f-spot.glade.h:4
msgid "640 px"
msgstr "640 px"
-#: ../src/f-spot.glade.h:6
+#: ../src/f-spot.glade.h:5
msgid "800 px"
msgstr "800 px"
-#: ../src/f-spot.glade.h:7
-msgid "<b></b>"
-msgstr "<b></b>"
-
-#: ../src/f-spot.glade.h:10
+#: ../src/f-spot.glade.h:6
msgid "<b>Co_rrections</b>"
msgstr "<b>Co_rrections</b>"
-#: ../src/f-spot.glade.h:13
+#: ../src/f-spot.glade.h:7
msgid "<b>Image Interpolation</b>"
msgstr "<b>Interpolation de l'image</b>"
-#: ../src/f-spot.glade.h:15
+#: ../src/f-spot.glade.h:9
msgid "<b>Size</b>"
msgstr "<b>Taille</b>"
-#: ../src/f-spot.glade.h:17
+#: ../src/f-spot.glade.h:11
msgid "<b>Summary</b>"
msgstr "<b>Résumé</b>"
-#: ../src/f-spot.glade.h:18
+#: ../src/f-spot.glade.h:12
msgid "<b>Transparent Parts</b>"
msgstr "<b>Parties transparentes</b>"
-#: ../src/f-spot.glade.h:19
+#: ../src/f-spot.glade.h:13
msgid "<b>View all pictures imported</b>"
msgstr "<b>Afficher toutes les photos importées</b>"
-#: ../src/f-spot.glade.h:20
+#: ../src/f-spot.glade.h:14
msgid "<b>_White Balance</b>"
msgstr "<b>Balance des _blancs</b>"
-#: ../src/f-spot.glade.h:21
+#: ../src/f-spot.glade.h:15
msgid ""
"<small><i>Enable this to allow interpolation on zoomed images. You shouldn't "
"disable this for viewing photos, but disabling the interpolation could be "
@@ -1778,7 +1902,7 @@ msgstr ""
"visualisation de photos, mais cela peut être utile lors de la création "
"d'icônes.</i></small>"
-#: ../src/f-spot.glade.h:22
+#: ../src/f-spot.glade.h:16
msgid ""
"<small><i>You can choose how to display transparent parts in images. This "
"option has no effect on photos, but setting this as check pattern or custom "
@@ -1790,219 +1914,143 @@ msgstr ""
"damier ou une couleur personnalisée peut être utile pour les icônes ou les "
"logos avec des parties transparentes.</i></small>"
-#: ../src/f-spot.glade.h:23
+#: ../src/f-spot.glade.h:17
msgid "As _background"
msgstr "Couleur de _fond"
-#: ../src/f-spot.glade.h:24
+#: ../src/f-spot.glade.h:18
msgid "As _custom color: "
msgstr "Couleur _personnalisée :"
-#: ../src/f-spot.glade.h:25
+#: ../src/f-spot.glade.h:19
msgid "As check _pattern"
msgstr "_Damier"
-#: ../src/f-spot.glade.h:26
-msgid "Attach Tags:"
-msgstr "Associer les étiquettes :"
-
-#: ../src/f-spot.glade.h:27
-msgid "Attach tag:"
-msgstr "Associer l'étiquette :"
-
-#: ../src/f-spot.glade.h:29
-msgid "CD"
-msgstr "CD"
-
-#: ../src/f-spot.glade.h:30
+#: ../src/f-spot.glade.h:21
msgid "C_ontrast:"
msgstr "C_ontraste :"
-#: ../src/f-spot.glade.h:31
+#: ../src/f-spot.glade.h:22
msgid "C_reate"
msgstr "C_réer"
-#: ../src/f-spot.glade.h:32
-msgid "Camera Selection"
-msgstr "Sélection de l'appareil photo"
-
-#: ../src/f-spot.glade.h:33
-msgid "Copy files to the Photos folder"
-msgstr "Copier les fichiers vers le dossier Photos"
-
-#: ../src/f-spot.glade.h:34
+#: ../src/f-spot.glade.h:23
msgid "Create Mail"
msgstr "Créer un courriel"
-#: ../src/f-spot.glade.h:35
+#: ../src/f-spot.glade.h:24
msgid "Create _icon for this tag when first used"
msgstr "Créer une _icône pour cette étiquette au premier usage"
-#: ../src/f-spot.glade.h:36
+#: ../src/f-spot.glade.h:25
msgid "Create a mail with the selected photos (possibly resized) attached"
msgstr ""
"Crée un courriel avec les photos sélectionnées (éventuellement "
"redimensionnées) en pièces jointes"
-#: ../src/f-spot.glade.h:37
-msgid "Detect duplicates"
-msgstr "Détecter les doublons"
-
-#: ../src/f-spot.glade.h:38
+#: ../src/f-spot.glade.h:26
msgid "Display File _Names"
msgstr "Afficher les _noms de fichier"
-#: ../src/f-spot.glade.h:39
+#: ../src/f-spot.glade.h:27
msgid "Display only those photos that were imported in specified Rolls."
msgstr ""
"Affiche uniquement les photos qui ont été importées dans les séries "
"indiquées."
-#: ../src/f-spot.glade.h:40
+#: ../src/f-spot.glade.h:28
msgid "Do not send a mail"
msgstr "Ne pas envoyer un courriel"
-#: ../src/f-spot.glade.h:41
-msgid "E-_Mail:"
-msgstr "_Courriel :"
-
-#: ../src/f-spot.glade.h:42
-msgid "E_xport titles and comments"
-msgstr "E_xporter les titres et les commentaires"
-
-#: ../src/f-spot.glade.h:43
+#: ../src/f-spot.glade.h:29
msgid "Estimated new size"
msgstr "Nouvelle taille (estimation)"
-#: ../src/f-spot.glade.h:45
+#: ../src/f-spot.glade.h:30
msgid "Extra large"
msgstr "Extra large"
-#: ../src/f-spot.glade.h:46
+#: ../src/f-spot.glade.h:31
msgid "F-Spot View"
msgstr "Affichage F-Spot"
-#: ../src/f-spot.glade.h:48
+#: ../src/f-spot.glade.h:32
msgid "Filter on selected rolls"
msgstr "Filtre sur les séries sélectionnées"
-#: ../src/f-spot.glade.h:49
-msgid "G_allery:"
-msgstr "G_alerie :"
-
-#: ../src/f-spot.glade.h:50
-msgid "Gallery"
-msgstr "Galerie"
-
-#: ../src/f-spot.glade.h:51 ../src/ImportCommand.cs:547
-#: ../src/MainWindow.cs:301
-msgid "Import"
-msgstr "Importer"
-
-#. Translators: this string means 'source of import'
-#: ../src/f-spot.glade.h:53
-msgid "Import Source:"
-msgstr "Source d'importation :"
-
-#: ../src/f-spot.glade.h:54
-msgid "Include subfolders"
-msgstr "Inclure les sous-dossiers"
-
-#: ../src/f-spot.glade.h:55
+#: ../src/f-spot.glade.h:33
msgid "Large"
msgstr "Grand"
-#: ../src/f-spot.glade.h:56
+#: ../src/f-spot.glade.h:34
msgid "Manage your custom selection ratios"
msgstr "Gère votre sélection de ratios personnalisés"
-#: ../src/f-spot.glade.h:57
+#: ../src/f-spot.glade.h:35
msgid "Medium"
msgstr "Moyen"
-#: ../src/f-spot.glade.h:59
+#: ../src/f-spot.glade.h:36
msgid "Number of photos in selected rolls:"
msgstr "Nombre de photos dans les séries sélectionnées :"
-#: ../src/f-spot.glade.h:60
+#: ../src/f-spot.glade.h:37
msgid "Number of pictures"
msgstr "Nombre d'images"
-#: ../src/f-spot.glade.h:61
+#: ../src/f-spot.glade.h:38
msgid "Open _Folder..."
msgstr "Ouvrir un _dossier..."
-#: ../src/f-spot.glade.h:63
+#: ../src/f-spot.glade.h:40
msgid "Original size (possible very large file size)"
msgstr "Taille originale (très grande taille de fichier possible)"
-#: ../src/f-spot.glade.h:64 ../src/UI.Dialog/ui/EditTagDialog.ui.h:4
+#: ../src/f-spot.glade.h:41 ../src/UI.Dialog/ui/EditTagDialog.ui.h:4
msgid "P_arent Tag:"
msgstr "Étiquette _parente :"
-#: ../src/f-spot.glade.h:65
-msgid "Pause"
-msgstr "Pause"
-
-#: ../src/f-spot.glade.h:66
+#: ../src/f-spot.glade.h:42
msgid "Preferences"
msgstr "Préférences"
-#: ../src/f-spot.glade.h:67 ../src/ItemAction.cs:123
-msgid "Previous"
-msgstr "Précédente"
-
-#: ../src/f-spot.glade.h:68
+#: ../src/f-spot.glade.h:43
msgid "Repair"
msgstr "Réparer"
-#: ../src/f-spot.glade.h:71
-msgid "Select Photos to Copy From Camera..."
-msgstr "Sélectionner les photos à copier depuis l'appareil photo..."
-
-#: ../src/f-spot.glade.h:72
+#: ../src/f-spot.glade.h:46
msgid "Select a Tag..."
msgstr "Sélectionner une étiquette..."
-#: ../src/f-spot.glade.h:73
-msgid "Select the camera from which you want to transfer files"
-msgstr ""
-"Sélectionnez l'appareil photo depuis lequel vous voulez rapatrier les "
-"fichiers"
-
-#: ../src/f-spot.glade.h:74
-msgid "Selected Camera: "
-msgstr "Appareil photo sélectionné : "
-
-#: ../src/f-spot.glade.h:75
+#: ../src/f-spot.glade.h:47
msgid "Selection Constraints"
msgstr "Sélection des contraintes"
-#: ../src/f-spot.glade.h:76 ../src/ui/main_window.ui.h:21
+#: ../src/f-spot.glade.h:48 ../src/ui/main_window.ui.h:22
msgid "Set as _Background"
msgstr "_Utiliser comme fond d'écran"
-#: ../src/f-spot.glade.h:77
+#: ../src/f-spot.glade.h:49
msgid "Show all photos."
msgstr "Afficher toutes les photos."
-#: ../src/f-spot.glade.h:78
+#: ../src/f-spot.glade.h:50
msgid "Show or hide the side pane"
msgstr "Affiche ou masque le panneau latéral"
-#: ../src/f-spot.glade.h:79
+#: ../src/f-spot.glade.h:51
msgid "Show or hide the toolbar"
msgstr "Affiche ou masque la barre d'outils"
-#: ../src/f-spot.glade.h:80
+#: ../src/f-spot.glade.h:52
msgid "Side _pane"
msgstr "_Panneau latéral"
-#: ../src/f-spot.glade.h:81
+#: ../src/f-spot.glade.h:53
msgid "Small"
msgstr "Petit"
-#: ../src/f-spot.glade.h:82
+#: ../src/f-spot.glade.h:54
msgid ""
"Specify if an original size picture should be rotated or not. Smaller sizes "
"are automatically rotated."
@@ -2010,141 +2058,105 @@ msgstr ""
"Indique si les images originales seront pivotées ou pas. Les images de "
"petites tailles sont automatiquement pivotées."
-#: ../src/f-spot.glade.h:83
-msgid "Strip image _metadata"
-msgstr "Enlever les _métadonnées de l'image"
-
#. Note for translators: meant as Temperature
-#: ../src/f-spot.glade.h:85
+#: ../src/f-spot.glade.h:56
msgid "Te_mp:"
msgstr "Te_mp :"
-#: ../src/f-spot.glade.h:86
+#: ../src/f-spot.glade.h:57
msgid "Tiny"
msgstr "Très petit"
-#: ../src/f-spot.glade.h:87
+#: ../src/f-spot.glade.h:58
msgid "Total original size"
msgstr "Taille totale des originaux"
-#: ../src/f-spot.glade.h:88 ../src/ui/main_window.ui.h:28
+#: ../src/f-spot.glade.h:59 ../src/ui/main_window.ui.h:29
msgid "Zoom _in"
msgstr "Zoom a_vant"
-#: ../src/f-spot.glade.h:89 ../src/ui/main_window.ui.h:29
+#: ../src/f-spot.glade.h:60 ../src/ui/main_window.ui.h:30
msgid "Zoom _out"
msgstr "Zoom a_rrière"
-#: ../src/f-spot.glade.h:90 ../src/ui/main_window.ui.h:30
+#: ../src/f-spot.glade.h:61 ../src/ui/main_window.ui.h:31
msgid "Zoom in"
msgstr "Zoom avant"
-#: ../src/f-spot.glade.h:91 ../src/ui/main_window.ui.h:31
+#: ../src/f-spot.glade.h:62 ../src/ui/main_window.ui.h:32
msgid "Zoom out"
msgstr "Zoom arrière"
-#: ../src/f-spot.glade.h:92
+#: ../src/f-spot.glade.h:63
msgid "_Brightness:"
msgstr "_Luminosité :"
-#: ../src/f-spot.glade.h:93
+#: ../src/f-spot.glade.h:64
msgid "_Create Mail"
msgstr "_Créer un courriel"
-#: ../src/f-spot.glade.h:94 ../src/ui/main_window.ui.h:44
+#: ../src/f-spot.glade.h:65 ../src/ui/main_window.ui.h:45
msgid "_Edit"
msgstr "É_dition"
-#: ../src/f-spot.glade.h:98
+#: ../src/f-spot.glade.h:67
msgid "_Exposure:"
msgstr "_Exposition :"
-#: ../src/f-spot.glade.h:99
-msgid "_Flickr"
-msgstr "_Flickr"
-
-#: ../src/f-spot.glade.h:100 ../src/ui/main_window.ui.h:48
+#: ../src/f-spot.glade.h:68 ../src/ui/main_window.ui.h:49
msgid "_Fullscreen"
msgstr "_Plein écran"
-#: ../src/f-spot.glade.h:101
-msgid "_Gallery"
-msgstr "_Galerie"
-
-#: ../src/f-spot.glade.h:102 ../src/ui/main_window.ui.h:49
+#: ../src/f-spot.glade.h:69 ../src/ui/main_window.ui.h:50
msgid "_Help"
msgstr "Aid_e"
-#: ../src/f-spot.glade.h:103
+#: ../src/f-spot.glade.h:70
msgid "_Hue:"
msgstr "_Coloration :"
-#: ../src/f-spot.glade.h:104
+#: ../src/f-spot.glade.h:71
msgid "_Interpolate image on zoom"
msgstr "_Interpoler les images lors du zoom"
-#: ../src/f-spot.glade.h:105
+#: ../src/f-spot.glade.h:72
msgid "_New Window"
msgstr "_Nouvelle fenêtre"
-#: ../src/f-spot.glade.h:106
-msgid "_Open album in browser when done uploading"
-msgstr "_Ouvrir l'album dans le navigateur à la fin du chargement"
-
-#: ../src/f-spot.glade.h:107
-msgid "_Open destination when done exporting"
-msgstr "_Ouvrir le dossier de destination à la fin de l'exportation"
-
-#: ../src/f-spot.glade.h:108 ../src/ui/main_window.ui.h:56
+#: ../src/f-spot.glade.h:73 ../src/ui/main_window.ui.h:58
msgid "_Photo"
msgstr "_Photo"
-#: ../src/f-spot.glade.h:110
+#: ../src/f-spot.glade.h:74
msgid "_Saturation:"
msgstr "_Saturation :"
-#: ../src/f-spot.glade.h:111
-msgid "_Scale photos to no larger than: "
-msgstr "Redimen_sionner les photos au plus à : "
-
-#: ../src/f-spot.glade.h:112 ../src/ui/main_window.ui.h:67
+#: ../src/f-spot.glade.h:75 ../src/ui/main_window.ui.h:69
msgid "_Slideshow"
msgstr "_Diaporama"
-#: ../src/f-spot.glade.h:113
-msgid "_Strip metadata"
-msgstr "_Enlever les métadonnées"
-
-#: ../src/f-spot.glade.h:114 ../src/UI.Dialog/ui/EditTagDialog.ui.h:6
+#: ../src/f-spot.glade.h:76 ../src/UI.Dialog/ui/EditTagDialog.ui.h:6
msgid "_Tag Name:"
msgstr "Nom de l'é_tiquette :"
-#: ../src/f-spot.glade.h:115
+#: ../src/f-spot.glade.h:77
msgid "_Tint:"
msgstr "_Nuance :"
-#: ../src/f-spot.glade.h:116
+#: ../src/f-spot.glade.h:78
msgid "_Toolbar"
msgstr "Barre d'ou_tils"
-#: ../src/f-spot.glade.h:117
-msgid "_URI:"
-msgstr "_URI :"
-
-#: ../src/f-spot.glade.h:118 ../src/ui/main_window.ui.h:75
+#: ../src/f-spot.glade.h:79 ../src/ui/main_window.ui.h:77
msgid "_View"
msgstr "_Affichage"
-#: ../src/f-spot.glade.h:119
-msgid "_Virtual Filesystem"
-msgstr "Système de fichiers _virtuel"
-
-#: ../src/f-spot.glade.h:120 ../src/Widgets/FindBar.cs:177
+#: ../src/f-spot.glade.h:80 ../src/Widgets/FindBar.cs:177
msgid "and"
msgstr "et"
#. at, or after a date, or between dates
-#: ../src/f-spot.glade.h:122
+#: ../src/f-spot.glade.h:82
msgid ""
"at\n"
"after\n"
@@ -2154,40 +2166,36 @@ msgstr ""
"après\n"
"entre"
-#: ../src/f-spot.glade.h:126
-msgid "x"
-msgstr "x"
-
-#: ../src/FullScreenView.cs:58
+#: ../src/FullScreenView.cs:59
msgid "Hide"
msgstr "Masquer"
-#: ../src/FullScreenView.cs:60
+#: ../src/FullScreenView.cs:61
msgid "Hide Toolbar"
msgstr "Masquer la barre d'outils"
-#: ../src/FullScreenView.cs:66
+#: ../src/FullScreenView.cs:67
msgid "Info"
msgstr "Informations"
-#: ../src/FullScreenView.cs:68 ../src/Widgets/InfoBox.cs:201
+#: ../src/FullScreenView.cs:69 ../src/Widgets/InfoBox.cs:202
msgid "Image Information"
msgstr "Informations sur l'image"
-#: ../src/FullScreenView.cs:73
+#: ../src/FullScreenView.cs:74
msgid "Exit fullscreen"
msgstr "Quitter le mode plein écran"
-#: ../src/FullScreenView.cs:81 ../src/MainWindow.cs:341
-#: ../src/SingleView.cs:88
+#: ../src/FullScreenView.cs:82 ../src/MainWindow.cs:322
+#: ../src/SingleView.cs:89
msgid "Slideshow"
msgstr "Diaporama"
-#: ../src/FullScreenView.cs:82
+#: ../src/FullScreenView.cs:83
msgid "Start slideshow"
msgstr "Démarre le diaporama"
-#: ../src/FullScreenView.cs:128
+#: ../src/FullScreenView.cs:129
msgid "Slide transition:"
msgstr "Transition entre les images :"
@@ -2199,35 +2207,35 @@ msgstr "Plus de dates"
msgid "More"
msgstr "Plus"
-#: ../src/GroupSelector.cs:517 ../src/ui/main_window.ui.h:34
+#: ../src/GroupSelector.cs:517 ../src/ui/main_window.ui.h:35
msgid "_Clear Date Range"
msgstr "Ne plus tenir _compte des dates"
-#: ../src/Imaging/Exif.cs:228
+#: ../src/Imaging/Exif.cs:229
msgid "Image Directory"
msgstr "Données de l'image"
-#: ../src/Imaging/Exif.cs:230
+#: ../src/Imaging/Exif.cs:231
msgid "Thumbnail Directory"
msgstr "Données de la vignette"
-#: ../src/Imaging/Exif.cs:232
+#: ../src/Imaging/Exif.cs:233
msgid "Exif Directory"
msgstr "Données EXIF"
-#: ../src/Imaging/Exif.cs:234
+#: ../src/Imaging/Exif.cs:235
msgid "GPS Directory"
msgstr "Données GPS"
-#: ../src/Imaging/Exif.cs:236
+#: ../src/Imaging/Exif.cs:237
msgid "InterOperability Directory"
msgstr "Données d'interopérabilité"
-#: ../src/Imaging/Exif.cs:238
+#: ../src/Imaging/Exif.cs:239
msgid "Unknown Directory"
msgstr "Données inconnues"
-#: ../src/Imaging/ImageFile.cs:117
+#: ../src/Imaging/ImageFile.cs:119
msgid "Writing to this file format is not supported"
msgstr "L'écriture dans ce format de fichier n'est pas prise en charge"
@@ -2370,42 +2378,12 @@ msgstr "Catégorie intellectuel de l'objet"
msgid "Unknown IIM DataSet"
msgstr "Jeu de données IIM inconnu"
-#: ../src/ImportCommand.cs:48 ../src/SingleView.cs:344
-msgid "Select Folder"
-msgstr "Sélectionner un dossier"
-
-#: ../src/ImportCommand.cs:259
-msgid "(No Cameras Detected)"
-msgstr "(aucun appareil photo détecté)"
-
-#: ../src/ImportCommand.cs:404
-#, csharp-format
-msgid "Loading {0} of {1}"
-msgstr "Chargement {0} sur {1}"
-
-#: ../src/ImportCommand.cs:470
-msgid "Done Loading"
-msgstr "Chargement terminé"
-
-#: ../src/ImportCommand.cs:684
-msgid "Directory does not exist."
-msgstr "Le répertoire n'existe pas."
-
-#: ../src/ImportCommand.cs:685
-#, csharp-format
-msgid ""
-"The directory you selected \"{0}\" does not exist. Please choose a "
-"different directory"
-msgstr ""
-"Le répertoire sélectionné « {0} » n'existe pas. Veuillez choisir un "
-"répertoire différent"
-
-#: ../src/ImportCommand.cs:738 ../src/ImportCommand.cs:740
+#: ../src/Import/ImportController.cs:408 ../src/Import/ImportController.cs:410
#: ../src/XmpTagsImporter.cs:89
msgid "Imported Tags"
msgstr "Étiquettes importées"
-#: ../src/ItemAction.cs:79 ../src/MainWindow.cs:308 ../src/SingleView.cs:71
+#: ../src/ItemAction.cs:79 ../src/MainWindow.cs:289 ../src/SingleView.cs:72
msgid "Rotate Left"
msgstr "Rotation à gauche"
@@ -2413,7 +2391,7 @@ msgstr "Rotation à gauche"
msgid "Rotate picture left"
msgstr "Fait pivoter la photo vers la gauche"
-#: ../src/ItemAction.cs:91 ../src/MainWindow.cs:312 ../src/SingleView.cs:76
+#: ../src/ItemAction.cs:91 ../src/MainWindow.cs:293 ../src/SingleView.cs:77
msgid "Rotate Right"
msgstr "Rotation à droite"
@@ -2425,80 +2403,75 @@ msgstr "Fait pivoter la photo vers la droite"
msgid "Next picture"
msgstr "Photo suivante"
+#: ../src/ItemAction.cs:123
+msgid "Previous"
+msgstr "Précédente"
+
#: ../src/ItemAction.cs:124
msgid "Previous picture"
msgstr "Photo précédente"
-#: ../src/MainWindow.cs:303
+#: ../src/MainWindow.cs:282 ../src/UI.Dialog/ImportDialog.cs:171
+msgid "Import"
+msgstr "Importer"
+
+#: ../src/MainWindow.cs:284
msgid "Import new images"
msgstr "Importe de nouvelles images"
-#: ../src/MainWindow.cs:319 ../src/ui/main_window.ui.h:3
+#: ../src/MainWindow.cs:300 ../src/ui/main_window.ui.h:3
msgid "Browse"
msgstr "Parcourir"
-#: ../src/MainWindow.cs:323
+#: ../src/MainWindow.cs:304
msgid "Browse many photos simultaneously"
msgstr "Parcourt de nombreuses photos simultanément"
-#: ../src/MainWindow.cs:327
+#: ../src/MainWindow.cs:308
msgid "Edit Image"
msgstr "Modifier l'image"
-#: ../src/MainWindow.cs:331
+#: ../src/MainWindow.cs:312
msgid "View and edit a photo"
msgstr "Affiche et modifie une photo"
-#: ../src/MainWindow.cs:336 ../src/SingleView.cs:83
+#: ../src/MainWindow.cs:317 ../src/SingleView.cs:84
msgid "Fullscreen"
msgstr "Plein écran"
-#: ../src/MainWindow.cs:338 ../src/SingleView.cs:85
+#: ../src/MainWindow.cs:319 ../src/SingleView.cs:86
msgid "View photos fullscreen"
msgstr "Affiche les photos en plein écran"
-#: ../src/MainWindow.cs:343 ../src/SingleView.cs:90
+#: ../src/MainWindow.cs:324 ../src/SingleView.cs:91
msgid "View photos in a slideshow"
msgstr "Affiche les photos dans un diaporama"
-#: ../src/MainWindow.cs:358
+#: ../src/MainWindow.cs:339
msgid "Previous photo"
msgstr "Photo précédente"
-#: ../src/MainWindow.cs:363
+#: ../src/MainWindow.cs:344
msgid "Next photo"
msgstr "Photo suivante"
-#: ../src/MainWindow.cs:1518
-msgid "No cameras detected."
-msgstr "Aucun appareil photo détecté."
-
-#: ../src/MainWindow.cs:1519
-msgid ""
-"F-Spot was unable to find any cameras attached to this system. Double check "
-"that the camera is connected and has power"
-msgstr ""
-"F-Spot n'a pas pu trouver d'appareil photo connecté à ce système. Veuillez "
-"vérifier que l'appareil photo est connecté et sous tension"
-
-#: ../src/MainWindow.cs:1558
-msgid "Error connecting to camera"
-msgstr "Erreur lors de la connexion de l'appareil photo"
+#: ../src/MainWindow.cs:421
+msgid "Show _Find Bar"
+msgstr "Afficher la barre de _recherche"
-#: ../src/MainWindow.cs:1559
-#, csharp-format
-msgid "Received error \"{0}\" while connecting to camera"
-msgstr "Erreur « {0} » reçue lors de la connexion de l'appareil photo"
+#: ../src/MainWindow.cs:424
+msgid "Hide _Find Bar"
+msgstr "Masquer la barre de _recherche"
#. Translators, The singular case will never happen here.
-#: ../src/MainWindow.cs:1846
+#: ../src/MainWindow.cs:1740
#, csharp-format
msgid "Merge the selected tag"
msgid_plural "Merge the {0} selected tags?"
msgstr[0] "Fusionner l'étiquette sélectionnée"
msgstr[1] "Fusionner les {0} étiquettes sélectionnées ?"
-#: ../src/MainWindow.cs:1873
+#: ../src/MainWindow.cs:1767
msgid ""
"This operation will merge the selected tags and any sub-tags into a single "
"tag."
@@ -2506,59 +2479,59 @@ msgstr ""
"Cette opération fusionnera les étiquettes sélectionnées et toutes leurs sous-"
"étiquettes en une seule étiquette."
-#: ../src/MainWindow.cs:1875
+#: ../src/MainWindow.cs:1769
msgid "_Merge Tags"
msgstr "_Fusionner les étiquettes"
-#: ../src/MainWindow.cs:2080
+#: ../src/MainWindow.cs:1974
#, csharp-format
msgid "{0} Photo out of {1}"
msgid_plural "{0} Photos out of {1}"
msgstr[0] "{0} photo sur {1}"
msgstr[1] "{0} photos sur {1}"
-#: ../src/MainWindow.cs:2082 ../src/SingleView.cs:467
+#: ../src/MainWindow.cs:1976 ../src/SingleView.cs:467
#, csharp-format
msgid "{0} Photo"
msgid_plural "{0} Photos"
msgstr[0] "{0} photo"
msgstr[1] "{0} photos"
-#: ../src/MainWindow.cs:2085
+#: ../src/MainWindow.cs:1979
#, csharp-format
msgid " ({0} selected)"
msgid_plural " ({0} selected)"
msgstr[0] " ({0} sélectionnée)"
msgstr[1] " ({0} sélectionnées)"
-#: ../src/MainWindow.cs:2166
+#: ../src/MainWindow.cs:2060
msgid "_Ok"
msgstr "_Valider"
-#: ../src/MainWindow.cs:2167
+#: ../src/MainWindow.cs:2061
msgid "Error Deleting Picture"
msgstr "Erreur lors de la suppression de la photo"
-#: ../src/MainWindow.cs:2172
+#: ../src/MainWindow.cs:2066
#, csharp-format
msgid "No permission to delete the file:{1}{0}"
msgstr "Vous n'avez pas les droits pour supprimer le fichier : {1}{0}"
-#: ../src/MainWindow.cs:2176
+#: ../src/MainWindow.cs:2070
#, csharp-format
msgid "An error of type {0} occurred while deleting the file:{2}{1}"
msgstr ""
"Une erreur du type {0} s'est produite lors de la suppression du fichier : {2}"
"{1}"
-#: ../src/MainWindow.cs:2208
+#: ../src/MainWindow.cs:2102
#, csharp-format
msgid "Delete the selected photo permanently?"
msgid_plural "Delete the {0} selected photos permanently?"
msgstr[0] "Supprimer définitivement la photo sélectionnée ?"
msgstr[1] "Supprimer définitivement les {0} photos sélectionnées ?"
-#: ../src/MainWindow.cs:2212
+#: ../src/MainWindow.cs:2106
msgid "This deletes all versions of the selected photo from your drive."
msgid_plural ""
"This deletes all versions of the selected photos from your drive."
@@ -2569,20 +2542,20 @@ msgstr[1] ""
"Cela supprimera de votre disque dur toutes les versions des photos "
"sélectionnées."
-#: ../src/MainWindow.cs:2215
+#: ../src/MainWindow.cs:2109
msgid "_Delete photo"
msgid_plural "_Delete photos"
msgstr[0] "_Supprimer la photo"
msgstr[1] "_Supprimer les photos"
-#: ../src/MainWindow.cs:2251
+#: ../src/MainWindow.cs:2145
#, csharp-format
msgid "Remove the selected photo from F-Spot?"
msgid_plural "Remove the {0} selected photos from F-Spot?"
msgstr[0] "Enlever la photo sélectionnée de F-Spot ?"
msgstr[1] "Enlever les {0} photos sélectionnées de F-Spot ?"
-#: ../src/MainWindow.cs:2256
+#: ../src/MainWindow.cs:2150
msgid ""
"If you remove photos from the F-Spot catalog all tag information will be "
"lost. The photos remain on your computer and can be imported into F-Spot "
@@ -2592,27 +2565,27 @@ msgstr ""
"avec des étiquettes seront perdues. Les photos resteront sur votre "
"ordinateur et pourront être importées à nouveau dans F-Spot."
-#: ../src/MainWindow.cs:2257
+#: ../src/MainWindow.cs:2151
msgid "_Remove from Catalog"
msgstr "_Enlever du catalogue"
-#: ../src/MainWindow.cs:2320
+#: ../src/MainWindow.cs:2220
#, csharp-format
msgid "Delete tag \"{0}\"?"
msgstr "Supprimer l'étiquette « {0} » ?"
-#: ../src/MainWindow.cs:2322
+#: ../src/MainWindow.cs:2222
#, csharp-format
msgid "Delete the {0} selected tags?"
msgstr "Supprimer les {0} étiquettes sélectionnées ?"
-#: ../src/MainWindow.cs:2327
+#: ../src/MainWindow.cs:2227
msgid "photo"
msgid_plural "photos"
msgstr[0] "photo"
msgstr[1] "photos"
-#: ../src/MainWindow.cs:2329
+#: ../src/MainWindow.cs:2229
#, csharp-format
msgid "If you delete this tag, the association with {0} {1} will be lost."
msgid_plural ""
@@ -2622,18 +2595,18 @@ msgstr[0] ""
msgstr[1] ""
"Si vous supprimez ces étiquettes, l'association avec {0} {1} sera perdue."
-#: ../src/MainWindow.cs:2334
+#: ../src/MainWindow.cs:2234
msgid "_Delete tag"
msgid_plural "_Delete tags"
msgstr[0] "Su_pprimer l'étiquette"
msgstr[1] "Su_pprimer les étiquettes"
#. A Category is not empty. Can not delete it.
-#: ../src/MainWindow.cs:2348
+#: ../src/MainWindow.cs:2248
msgid "Tag is not empty"
msgstr "L'étiquette n'est pas vide"
-#: ../src/MainWindow.cs:2349
+#: ../src/MainWindow.cs:2249
#, csharp-format
msgid ""
"Can not delete tags that have tags within them. Please delete tags under "
@@ -2642,39 +2615,39 @@ msgstr ""
"Impossible de supprimer les étiquettes qui contiennent d'autres étiquettes. "
"Veuillez d'abord supprimer les étiquettes « {0} »"
-#: ../src/MainWindow.cs:2789
+#: ../src/MainWindow.cs:2692
msgid "Rotate selected photo left"
msgid_plural "Rotate selected photos left"
msgstr[0] "Faire pivoter la photo sélectionnée vers la gauche"
msgstr[1] "Faire pivoter les photos sélectionnées vers la gauche"
-#: ../src/MainWindow.cs:2802
+#: ../src/MainWindow.cs:2705
msgid "Rotate selected photo right"
msgid_plural "Rotate selected photos right"
msgstr[0] "Faire pivoter la photo sélectionnée vers la droite"
msgstr[1] "Faire pivoter les photos sélectionnées vers la droite"
-#: ../src/MainWindow.cs:2813
+#: ../src/MainWindow.cs:2716
#, csharp-format
msgid "Find _Selected Tag"
msgid_plural "Find _Selected Tags"
msgstr[0] "Trouver l'étiquette choi_sie"
msgstr[1] "Trouver les étiquettes choi_sies"
-#: ../src/MainWindow.cs:2817
+#: ../src/MainWindow.cs:2720
#, csharp-format
msgid "Find Selected Tag _With"
msgid_plural "Find Selected Tags _With"
msgstr[0] "Trouver l'étiquette a_vec"
msgstr[1] "Trouver les étiquettes a_vec"
-#: ../src/MainWindow.cs:2858
+#: ../src/MainWindow.cs:2761
msgid "Create New Version?"
msgid_plural "Create New Versions?"
msgstr[0] "Créer une nouvelle version ?"
msgstr[1] "Créer des nouvelles versions ?"
-#: ../src/MainWindow.cs:2860
+#: ../src/MainWindow.cs:2763
#, csharp-format
msgid ""
"Before launching {1}, should F-Spot create a new version of the selected "
@@ -2689,7 +2662,7 @@ msgstr[1] ""
"Avant de lancer « {1} », F-Spot doit-il créer une nouvelle version des photos "
"sélectionnées pour préserver les originaux ?"
-#: ../src/MainWindow.cs:2882
+#: ../src/MainWindow.cs:2785
msgid "XCF version"
msgstr "Version de XCF"
@@ -2805,7 +2778,7 @@ msgstr "Type de scène"
#. Fixme this should really set parent menu
#. items insensitve
-#: ../src/PhotoTagMenu.cs:74
+#: ../src/PhotoTagMenu.cs:62
msgid "(No Tags)"
msgstr "(pas d'étiquette)"
@@ -2825,66 +2798,67 @@ msgstr "Renommer la version"
msgid "New name:"
msgstr "Nouveau nom :"
-#: ../src/PhotoVersionCommands.cs:110
-msgid "Could not create a new version"
-msgstr "Impossible de créer une nouvelle version"
-
-#: ../src/PhotoVersionCommands.cs:111
-#, csharp-format
-msgid "Received exception \"{0}\". Unable to create version \"{1}\""
-msgstr "Exception « {0} » reçue. Impossible de créer une version « {1} »"
-
-#: ../src/PhotoVersionCommands.cs:138
-msgid "Really Delete?"
-msgstr "Voulez-vous vraiment la supprimer ?"
-
-#: ../src/PhotoVersionCommands.cs:139
-msgid "Cancel"
-msgstr "Annuler"
-
-#: ../src/PhotoVersionCommands.cs:140
+#: ../src/PhotoVersionCommands.cs:123
msgid "Delete"
msgstr "Supprimer"
-#: ../src/PhotoVersionCommands.cs:144
+#: ../src/PhotoVersionCommands.cs:124
#, csharp-format
msgid "Really delete version \"{0}\"?"
msgstr "Voulez-vous vraiment supprimer la version « {0} » ?"
-#: ../src/PhotoVersionCommands.cs:154
-msgid "Could not delete a version"
-msgstr "Impossible de supprimer une version"
+#: ../src/PhotoVersionCommands.cs:125
+msgid "This removes the version and deletes the corresponding file from disk."
+msgstr "Cela efface la version et supprime le fichier correspondant du disque."
-#: ../src/PhotoVersionCommands.cs:155
+#: ../src/PhotoVersionCommands.cs:170
+msgid "De_tach"
+msgstr "Dé_tacher"
+
+#: ../src/PhotoVersionCommands.cs:171
#, csharp-format
-msgid "Received exception \"{0}\". Unable to delete version \"{1}\""
-msgstr "Exception « {0} » reçue. Impossible de supprimer la version « {1} »"
+msgid "Really detach version \"{0}\" from \"{1}\"?"
+msgstr "Voulez-vous vraiment détacher la version « {0} » de « {1} » ?"
+
+#: ../src/PhotoVersionCommands.cs:172
+msgid ""
+"This makes the version appear as a separate photo in the library. To undo, "
+"drag the new photo back to its parent."
+msgstr ""
+"Fait apparaître la version comme une photo distincte dans la bibliothèque. "
+"Pour annuler, faire glisser la nouvelle photo sur son parent."
+
+#: ../src/PhotoVersionCommands.cs:195
+msgid "Re_parent"
+msgstr "Réa_ffilier"
#: ../src/PhotoVersionCommands.cs:196
-msgid "Could not rename a version"
-msgstr "Impossible de renommer une version"
+#, csharp-format
+msgid "Really reparent \"{0}\" as version of \"{1}\"?"
+msgid_plural "Really reparent {2} photos as versions of \"{1}\"?"
+msgstr[0] "Voulez-vous vraiment réaffilier « {0} » comme version de « {1} » ?"
+msgstr[1] ""
+"Voulez-vous vraiment réaffilier {2} photos comme versions de « {1} » ?"
-#: ../src/PhotoVersionCommands.cs:197
+#: ../src/PhotoVersionCommands.cs:199
+msgid ""
+"This makes the photos appear as a single one in the library. The versions "
+"can be detached using the Photo menu."
+msgstr ""
+"Fait apparaître les photos comme une seule dans la bibliothèque. Les "
+"versions peuvent être détachées en utilisant le menu Photo."
+
+#: ../src/PhotoVersionCommands.cs:239
#, csharp-format
-msgid "Received exception \"{0}\". Unable to rename version to \"{1}\""
-msgstr "Exception « {0} » reçue. Impossible de renommer la version en « {1} »"
+msgid "Received exception \"{0}\"."
+msgstr "Exception « {0} » reçue."
-#: ../src/PhotoVersionMenu.cs:66 ../src/Widgets/InfoBox.cs:563
-#: ../src/Widgets/InfoBox.cs:565
+#: ../src/PhotoVersionMenu.cs:66 ../src/Widgets/InfoBox.cs:566
+#: ../src/Widgets/InfoBox.cs:568
msgid "(No Edits)"
msgstr "(aucune modification)"
-#: ../src/PhotoView.cs:167 ../src/UI.Dialog/EditExceptionDialog.cs:38
-msgid "Error editing photo"
-msgstr "Erreur lors de la modification de la photo"
-
-#: ../src/PhotoView.cs:168 ../src/Sharpener.cs:73
-#: ../src/UI.Dialog/EditExceptionDialog.cs:25
-#, csharp-format
-msgid "Received exception \"{0}\". Unable to save photo {1}"
-msgstr "Exception « {0} » reçue. Impossible d'enregistrer la photo {1}"
-
-#: ../src/PhotoView.cs:356
+#: ../src/PhotoView.cs:339
msgid "Comment:"
msgstr "Commentaire :"
@@ -2925,43 +2899,35 @@ msgstr "Actualise la recherche"
msgid "No matching photos found"
msgstr "Aucune photo correspondante n'a été trouvée"
-#: ../src/QueryWidget.cs:155
-msgid "Hide _Find Bar"
-msgstr "Masquer la barre de _recherche"
-
-#: ../src/QueryWidget.cs:161
-msgid "Show _Find Bar"
-msgstr "Afficher la barre de _recherche"
-
-#: ../src/RotateCommand.cs:96 ../src/RotateCommand.cs:111
+#: ../src/RotateCommand.cs:87 ../src/RotateCommand.cs:102
msgid "Unable to rotate this type of photo"
msgstr "Impossible de faire pivoter ce type de photo"
-#: ../src/RotateCommand.cs:131
+#: ../src/RotateCommand.cs:122
msgid "Unable to rotate readonly file"
msgstr "Impossible de faire pivoter une photo en lecture seule"
-#: ../src/RotateCommand.cs:198
+#: ../src/RotateCommand.cs:185
msgid "Rotating photos"
msgstr "Rotation des photos"
-#: ../src/RotateCommand.cs:209
+#: ../src/RotateCommand.cs:196
#, csharp-format
msgid "Rotating photo \"{0}\""
msgstr "Rotation de la photo « {0} »"
-#: ../src/RotateCommand.cs:222
+#: ../src/RotateCommand.cs:209
msgid "Directory not found"
msgstr "Répertoire non trouvé"
-#: ../src/RotateCommand.cs:242
+#: ../src/RotateCommand.cs:229
#, csharp-format
msgid "Unable to rotate photo"
msgid_plural "Unable to rotate {0} photos"
msgstr[0] "Impossible de faire pivoter la photo"
msgstr[1] "Impossible de faire pivoter les {0} photos"
-#: ../src/RotateCommand.cs:244
+#: ../src/RotateCommand.cs:231
#, csharp-format
msgid ""
"The photo could not be rotated because it is on a read only file system or "
@@ -2978,35 +2944,35 @@ msgstr[1] ""
"fichiers en lecture seule ou sur un support de type CDROM. Veuillez vérifier "
"les permissions et essayez à nouveau."
-#: ../src/RotateCommand.cs:271
+#: ../src/RotateCommand.cs:258
#, csharp-format
msgid "Received error \"{0}\" while attempting to rotate {1}"
msgstr "Erreur reçue « {0} » lors de la tentative de rotation de {1}"
-#: ../src/RotateCommand.cs:276
+#: ../src/RotateCommand.cs:263
msgid "Error while rotating photo."
msgstr "Erreur lors de la rotation de la photo."
-#: ../src/SendEmail.cs:240
+#: ../src/SendEmail.cs:214
msgid "Preparing email"
msgstr "Préparation du courriel"
-#: ../src/SendEmail.cs:292
+#: ../src/SendEmail.cs:266
#, csharp-format
msgid "Exporting picture \"{0}\""
msgstr "Exportation de l'image « {0} »"
-#: ../src/SendEmail.cs:314
+#: ../src/SendEmail.cs:288
msgid "Error processing image"
msgstr "Erreur lors du traitement de l'image"
-#: ../src/SendEmail.cs:315
+#: ../src/SendEmail.cs:289
#, csharp-format
msgid "An error occured while processing \"{0}\": {1}"
msgstr "Une erreur s'est produite lors du traitement de « {0} » : {1}"
#. Send the mail :)
-#: ../src/SendEmail.cs:330
+#: ../src/SendEmail.cs:303
msgid "My Photos"
msgstr "Mes photos"
@@ -3014,6 +2980,11 @@ msgstr "Mes photos"
msgid "Error saving sharpened photo"
msgstr "Erreur lors de l'enregistrement de la photo affinée"
+#: ../src/Sharpener.cs:73 ../src/UI.Dialog/EditExceptionDialog.cs:26
+#, csharp-format
+msgid "Received exception \"{0}\". Unable to save photo {1}"
+msgstr "Exception « {0} » reçue. Impossible d'enregistrer la photo {1}"
+
#: ../src/Sharpener.cs:102
msgid "Sharpen"
msgstr "Renforcer la netteté"
@@ -3030,15 +3001,15 @@ msgstr "Rayon :"
msgid "Threshold:"
msgstr "Seuil :"
-#: ../src/SingleView.cs:73
+#: ../src/SingleView.cs:74
msgid "Rotate photo left"
msgstr "Pivoter la photo vers la gauche"
-#: ../src/SingleView.cs:78
+#: ../src/SingleView.cs:79
msgid "Rotate photo right"
msgstr "Pivoter la photo vers la droite"
-#: ../src/SingleView.cs:115
+#: ../src/SingleView.cs:116
msgid "Folder"
msgstr "Dossier"
@@ -3046,20 +3017,24 @@ msgstr "Dossier"
msgid "Open"
msgstr "Ouvrir"
+#: ../src/SingleView.cs:344
+msgid "Select Folder"
+msgstr "Sélectionner un dossier"
+
#: ../src/SingleView.cs:428
msgid "Set as Background"
msgstr "Utiliser comme fond d'écran"
-#: ../src/TagCommands.cs:96 ../src/TagSelectionWidget.cs:498
+#: ../src/TagCommands.cs:97 ../src/TagSelectionWidget.cs:491
#: ../src/UI.Dialog/EditTagDialog.cs:78
msgid "This name is already in use"
msgstr "Ce nom est déjà utilisé"
-#: ../src/TagCommands.cs:144
+#: ../src/TagCommands.cs:145
msgid "Create New Tag"
msgstr "Créer une nouvelle étiquette"
-#: ../src/TagCommands.cs:145
+#: ../src/TagCommands.cs:146
msgid "Name of New Tag:"
msgstr "Nom de la nouvelle étiquette :"
@@ -3070,7 +3045,7 @@ msgid_plural "Find"
msgstr[0] "Rechercher"
msgstr[1] "Rechercher"
-#: ../src/TagPopup.cs:36 ../src/Widgets/TagMenu.cs:91
+#: ../src/TagPopup.cs:36 ../src/Widgets/TagMenu.cs:98
msgid "Create New Tag..."
msgstr "Créer une nouvelle étiquette..."
@@ -3134,32 +3109,32 @@ msgstr "Non {0}"
msgid "Drag tags here to search for them"
msgstr "Déposer ici les étiquettes que vous voulez rechercher"
-#: ../src/TagSelectionWidget.cs:497
+#: ../src/TagSelectionWidget.cs:490
msgid "Error renaming tag"
msgstr "Erreur lors du renommage de l'étiquette"
-#: ../src/TagStore.cs:203
+#: ../src/TagStore.cs:204
msgid "Favorites"
msgstr "Favoris"
-#: ../src/TagStore.cs:208
+#: ../src/TagStore.cs:209
msgid "Hidden"
msgstr "Masqué"
-#: ../src/TagStore.cs:216
+#: ../src/TagStore.cs:217
msgid "People"
msgstr "Personnes"
-#: ../src/TagStore.cs:221
+#: ../src/TagStore.cs:222
msgid "Places"
msgstr "Lieu"
-#: ../src/TagStore.cs:226
+#: ../src/TagStore.cs:227
msgid "Events"
msgstr "Événements"
#. The label for the root category is used in new and edit tag dialogs
-#: ../src/TagStore.cs:239 ../src/Widgets/InfoBox.cs:409
+#: ../src/TagStore.cs:240 ../src/Widgets/InfoBox.cs:410
msgid "(None)"
msgstr "(aucun)"
@@ -3183,24 +3158,24 @@ msgstr " ou "
msgid "or"
msgstr "ou"
-#: ../src/ThumbnailCommand.cs:20
+#: ../src/ThumbnailCommand.cs:21
msgid "Updating Thumbnails"
msgstr "Mise à jour des vignettes"
-#: ../src/ThumbnailCommand.cs:28
+#: ../src/ThumbnailCommand.cs:29
#, csharp-format
msgid "Updating picture \"{0}\""
msgstr "Mise à jour de l'image « {0} »"
-#: ../src/UI.Dialog/AboutDialog.cs:76
+#: ../src/UI.Dialog/AboutDialog.cs:77
msgid "Photo management for GNOME"
msgstr "Gestionnaire de photos pour GNOME"
-#: ../src/UI.Dialog/AboutDialog.cs:77
-msgid "Copyright © 2003-2009 Novell Inc."
-msgstr "Copyright © 2003-2009 Novell Inc."
+#: ../src/UI.Dialog/AboutDialog.cs:78
+msgid "Copyright © 2003-2010 Novell Inc."
+msgstr "Copyright © 2003-2010 Novell Inc."
-#: ../src/UI.Dialog/AboutDialog.cs:100
+#: ../src/UI.Dialog/AboutDialog.cs:101
msgid "translator-credits"
msgstr ""
"Vincent Moreau <vmoreau at orange.fr>\n"
@@ -3213,11 +3188,11 @@ msgstr ""
"Stéphane Raimbault <stephane.raimbault at gmail.com>\n"
"Bruno Brouard <annoa.b at gmail.com>"
-#: ../src/UI.Dialog/AboutDialog.cs:105
+#: ../src/UI.Dialog/AboutDialog.cs:106
msgid "F-Spot Website"
msgstr "Site Web de F-Spot"
-#: ../src/UI.Dialog/AdjustTimeDialog.cs:112
+#: ../src/UI.Dialog/AdjustTimeDialog.cs:113
#: ../src/UI.Dialog/ui/AdjustTimeDialog.ui.h:10
#, csharp-format
msgid "Shift all photos by {0}"
@@ -3259,18 +3234,22 @@ msgstr "Semaine précédente (lun-dim)"
msgid "Customized Range"
msgstr "Plage personnalisée"
+#: ../src/UI.Dialog/EditExceptionDialog.cs:39
+msgid "Error editing photo"
+msgstr "Erreur lors de la modification de la photo"
+
# Titre
-#: ../src/UI.Dialog/EditTagIconDialog.cs:46
+#: ../src/UI.Dialog/EditTagIconDialog.cs:47
#, csharp-format
msgid "Edit Icon for Tag {0}"
msgstr "Modification de l'icône pour l'étiquette {0}"
# Titre du GtkFileChooser
-#: ../src/UI.Dialog/EditTagIconDialog.cs:68
+#: ../src/UI.Dialog/EditTagIconDialog.cs:69
msgid "Select Photo from file"
msgstr "Sélectionner une photo"
-#: ../src/UI.Dialog/EditTagIconDialog.cs:90
+#: ../src/UI.Dialog/EditTagIconDialog.cs:91
#, csharp-format
msgid ""
"\n"
@@ -3288,16 +3267,16 @@ msgstr ""
" cette étiquette. Étiquetez cette photo en tant que « {0} »\n"
" et revenez ici pour l'utiliser comme icône."
-#: ../src/UI.Dialog/EditTagIconDialog.cs:168
+#: ../src/UI.Dialog/EditTagIconDialog.cs:169
msgid "Unable to load image"
msgstr "Impossible de charger l'image"
-#: ../src/UI.Dialog/EditTagIconDialog.cs:169
+#: ../src/UI.Dialog/EditTagIconDialog.cs:170
#, csharp-format
msgid "Unable to load \"{0}\" as icon for the tag"
msgstr "Impossible de charger « {0} » comme icône pour l'étiquette"
-#: ../src/UI.Dialog/EditTagIconDialog.cs:207
+#: ../src/UI.Dialog/EditTagIconDialog.cs:208
#, csharp-format
msgid "Photo {0} of {1}"
msgstr "Photo {0} sur {1}"
@@ -3314,24 +3293,51 @@ msgstr "Détails de l'erreur"
msgid "An unhandled exception was thrown: "
msgstr "Une exception non gérée a été levée : "
-#: ../src/UI.Dialog/PreferenceDialog.cs:54
-#: ../src/UI.Dialog/PreferenceDialog.cs:77
+#: ../src/UI.Dialog/ImportDialog.cs:15
+msgid "Choose Folder..."
+msgstr "Choisir un dossier..."
+
+#: ../src/UI.Dialog/ImportDialog.cs:124
+msgid "Choose Import source..."
+msgstr "Choisir la source d'importation..."
+
+#: ../src/UI.Dialog/ImportDialog.cs:136
+msgid "(No Cameras Detected)"
+msgstr "(aucun appareil photo détecté)"
+
+#: ../src/UI.Dialog/ImportDialog.cs:264
+#, csharp-format
+msgid "Importing Photos: {0} of {1}..."
+msgstr "Importation de photos : {0} sur {1}..."
+
+#: ../src/UI.Dialog/ImportDialog.cs:288
+msgid "Importing photos..."
+msgstr "Importation de photos..."
+
+#. TODO: Using a GtkSpinner would be nicer here.
+#: ../src/UI.Dialog/ImportDialog.cs:295
+msgid "Searching for photos... (You can already click Import to continue)"
+msgstr ""
+"Recherche de photos... (vous pouvez déjà cliquer sur Importer pour continuer)"
+
+#: ../src/UI.Dialog/PreferenceDialog.cs:55
+#: ../src/UI.Dialog/PreferenceDialog.cs:78
msgid "None"
msgstr "Aucun"
-#: ../src/UI.Dialog/PreferenceDialog.cs:56
+#: ../src/UI.Dialog/PreferenceDialog.cs:57
msgid "System profile"
msgstr "Profil du système"
-#: ../src/UI.Dialog/PreferenceDialog.cs:94
+#: ../src/UI.Dialog/PreferenceDialog.cs:95
msgid "Standard theme"
msgstr "Thème standard"
-#: ../src/UI.Dialog/RepairDbDialog.cs:20
+#: ../src/UI.Dialog/RepairDbDialog.cs:21
msgid "Error loading database."
msgstr "Erreur lors du chargement de la base de données."
-#: ../src/UI.Dialog/RepairDbDialog.cs:21
+#: ../src/UI.Dialog/RepairDbDialog.cs:22
#, csharp-format
msgid ""
"F-Spot encountered an error while loading the photo database. The old "
@@ -3341,15 +3347,15 @@ msgstr ""
"photos. L'ancienne base de données a été déplacée vers {0} et une nouvelle "
"base de données a été créée."
-#: ../src/UI.Dialog/SelectionRatioDialog.cs:60
+#: ../src/UI.Dialog/SelectionRatioDialog.cs:61
msgid "Label"
msgstr "Libellé"
-#: ../src/UI.Dialog/SelectionRatioDialog.cs:64
+#: ../src/UI.Dialog/SelectionRatioDialog.cs:65
msgid "Ratio"
msgstr "Ratio"
-#: ../src/UI.Dialog/ThreadProgressDialog.cs:56
+#: ../src/UI.Dialog/ThreadProgressDialog.cs:55
msgid "Retry"
msgstr "Réessayer"
@@ -3555,191 +3561,203 @@ msgstr "Créer une nouvelle é_tiquette..."
msgid "Create _New Version..."
msgstr "Créer une _nouvelle version..."
-#: ../src/ui/main_window.ui.h:11
+#: ../src/ui/main_window.ui.h:10
+msgid "De_tach Version"
+msgstr "Dé_tacher la version"
+
+#: ../src/ui/main_window.ui.h:12
msgid "Fin_d"
msgstr "_Recherche"
-#: ../src/ui/main_window.ui.h:12
+#: ../src/ui/main_window.ui.h:13
msgid "Manage _Extensions"
msgstr "Gérer les _extensions"
-#: ../src/ui/main_window.ui.h:13
+#: ../src/ui/main_window.ui.h:14
msgid "Page Set_up..."
msgstr "Mise en _page..."
-#: ../src/ui/main_window.ui.h:14
+#: ../src/ui/main_window.ui.h:15
msgid "Re_fresh Thumbnail"
msgstr "Actualiser la _vignette"
-#: ../src/ui/main_window.ui.h:18
+#: ../src/ui/main_window.ui.h:19
msgid "Select _All"
msgstr "_Tout sélectionner"
-#: ../src/ui/main_window.ui.h:19
+#: ../src/ui/main_window.ui.h:20
msgid "Select _None"
msgstr "_Ne rien sélectionner"
-#: ../src/ui/main_window.ui.h:20
+#: ../src/ui/main_window.ui.h:21
msgid "Send by _Mail..."
msgstr "Envoyer par _courriel..."
-#: ../src/ui/main_window.ui.h:22
+#: ../src/ui/main_window.ui.h:23
msgid "Side_bar"
msgstr "_Barre latérale"
-#: ../src/ui/main_window.ui.h:23
+#: ../src/ui/main_window.ui.h:24
msgid "T_ags"
msgstr "É_tiquettes"
-#: ../src/ui/main_window.ui.h:25
+#: ../src/ui/main_window.ui.h:26
msgid "Thumbnail _elements"
msgstr "É_léments de la vignette"
-#: ../src/ui/main_window.ui.h:26
+#: ../src/ui/main_window.ui.h:27
msgid "Too_lbar"
msgstr "Barre d'_outils"
-#: ../src/ui/main_window.ui.h:27
+#: ../src/ui/main_window.ui.h:28
msgid "View"
msgstr "Visualisation"
#: ../src/ui/main_window.ui.h:33
+msgid "_Attach Tag"
+msgstr "_Associer l'étiquette"
+
+#: ../src/ui/main_window.ui.h:34
msgid "_Attach Tag to Selection"
msgstr "_Associer l'étiquette à la sélection"
-#: ../src/ui/main_window.ui.h:35
+#: ../src/ui/main_window.ui.h:36
msgid "_Clear Rating Filter"
msgstr "_Effacer le filtre des notations"
-#: ../src/ui/main_window.ui.h:36
+#: ../src/ui/main_window.ui.h:37
msgid "_Clear Roll Filter"
msgstr "_Effacer le filtre des séries"
-#: ../src/ui/main_window.ui.h:38
+#: ../src/ui/main_window.ui.h:39
msgid "_Components"
msgstr "_Composants"
-#: ../src/ui/main_window.ui.h:39
+#: ../src/ui/main_window.ui.h:40
msgid "_Contents"
msgstr "_Contenus"
-#: ../src/ui/main_window.ui.h:40
+#: ../src/ui/main_window.ui.h:41
msgid "_Dates"
msgstr "_Dates"
-#: ../src/ui/main_window.ui.h:42
+#: ../src/ui/main_window.ui.h:43
msgid "_Delete Selected Tag"
msgstr "_Supprimer l'étiquette sélectionnée"
-#: ../src/ui/main_window.ui.h:43
+#: ../src/ui/main_window.ui.h:44
msgid "_Delete Version"
msgstr "_Supprimer la version"
-#: ../src/ui/main_window.ui.h:45
+#: ../src/ui/main_window.ui.h:46
msgid "_Edit Tag..."
msgstr "Modifier l'éti_quette..."
-#: ../src/ui/main_window.ui.h:46
+#: ../src/ui/main_window.ui.h:47
msgid "_Export to"
msgstr "_Exporter vers"
-#: ../src/ui/main_window.ui.h:47
+#: ../src/ui/main_window.ui.h:48
msgid "_Filmstrip"
msgstr "_Bande contact"
-#: ../src/ui/main_window.ui.h:50
+#: ../src/ui/main_window.ui.h:51
msgid "_Hidden"
msgstr "_Masqué"
-#: ../src/ui/main_window.ui.h:51
+#: ../src/ui/main_window.ui.h:52
msgid "_Import..."
msgstr "_Importer..."
-#: ../src/ui/main_window.ui.h:52
+#: ../src/ui/main_window.ui.h:53
+msgid "_Invert Selection"
+msgstr "_Inverser la sélection"
+
+#: ../src/ui/main_window.ui.h:54
msgid "_Large"
msgstr "_Grand"
-#: ../src/ui/main_window.ui.h:53
+#: ../src/ui/main_window.ui.h:55
msgid "_Last Import Roll"
msgstr "_Dernière série importée"
-#: ../src/ui/main_window.ui.h:54
+#: ../src/ui/main_window.ui.h:56
msgid "_Loupe"
msgstr "_Loupe"
-#: ../src/ui/main_window.ui.h:55
+#: ../src/ui/main_window.ui.h:57
msgid "_Medium"
msgstr "_Moyen"
-#: ../src/ui/main_window.ui.h:57
+#: ../src/ui/main_window.ui.h:59
msgid "_Quit"
msgstr "_Quitter"
-#: ../src/ui/main_window.ui.h:58
+#: ../src/ui/main_window.ui.h:60
msgid "_Ratings"
msgstr "_Notations"
-#: ../src/ui/main_window.ui.h:60
+#: ../src/ui/main_window.ui.h:62
msgid "_Remove Tag From Selection"
msgstr "_Enlever l'étiquette de la sélection"
-#: ../src/ui/main_window.ui.h:61
+#: ../src/ui/main_window.ui.h:63
msgid "_Rename Version"
msgstr "_Renommer la version"
-#: ../src/ui/main_window.ui.h:62
+#: ../src/ui/main_window.ui.h:64
msgid "_Reverse Order"
msgstr "Ordre inve_rsé"
-#: ../src/ui/main_window.ui.h:63
+#: ../src/ui/main_window.ui.h:65
msgid "_Select Import Rolls..."
msgstr "_Sélectionner des séries d'importation..."
-#: ../src/ui/main_window.ui.h:64
+#: ../src/ui/main_window.ui.h:66
msgid "_Set Date Range..."
msgstr "_Définir une plage de dates..."
-#: ../src/ui/main_window.ui.h:65
+#: ../src/ui/main_window.ui.h:67
msgid "_Set Rating filter..."
msgstr "_Définir une plage de notes..."
-#: ../src/ui/main_window.ui.h:66
+#: ../src/ui/main_window.ui.h:68
msgid "_Sharpen..."
msgstr "_Renforcer la netteté..."
-#: ../src/ui/main_window.ui.h:68
+#: ../src/ui/main_window.ui.h:70
msgid "_Small"
msgstr "_Petit"
-#: ../src/ui/main_window.ui.h:69
+#: ../src/ui/main_window.ui.h:71
msgid "_Tag Icons"
msgstr "Icônes des é_tiquettes"
-#: ../src/ui/main_window.ui.h:70
+#: ../src/ui/main_window.ui.h:72
msgid "_Tags"
msgstr "É_tiquettes"
-#: ../src/ui/main_window.ui.h:71
+#: ../src/ui/main_window.ui.h:73
msgid "_Timeline"
msgstr "_Frise chronologique"
-#: ../src/ui/main_window.ui.h:72
+#: ../src/ui/main_window.ui.h:74
msgid "_Tools"
msgstr "Ou_tils"
-#: ../src/ui/main_window.ui.h:73
+#: ../src/ui/main_window.ui.h:75
msgid "_Untagged Photos"
msgstr "Photos sans étiq_uette"
-#: ../src/ui/main_window.ui.h:74
+#: ../src/ui/main_window.ui.h:76
msgid "_Version"
msgstr "_Version"
-#: ../src/Updater.cs:622
+#: ../src/Updater.cs:623
msgid "Updating F-Spot Database"
msgstr "Mise à jour de la base de données F-Spot"
-#: ../src/Updater.cs:623
+#: ../src/Updater.cs:624
msgid ""
"Please wait while your F-Spot gallery's database is updated. This may take "
"some time."
@@ -3748,7 +3766,7 @@ msgstr ""
"L'opération peut prendre un certain temps."
#. Mono.Unix.Error error = Mono.Unix.Stdlib.GetLastError ();
-#: ../src/Utils/Unix.cs:35
+#: ../src/Utils/Unix.cs:36
msgid "Unable to create temporary file"
msgstr "Impossible de créer un fichier temporaire"
@@ -3832,11 +3850,11 @@ msgstr "Imprimer les étiquettes de la photo"
msgid "Print photo comment"
msgstr "Imprimer les commentaires de la photo"
-#: ../src/Widgets/EditorPage.cs:30 ../src/Widgets/Sidebar.cs:54
+#: ../src/Widgets/EditorPage.cs:31 ../src/Widgets/Sidebar.cs:54
msgid "Edit"
msgstr "Modifier"
-#: ../src/Widgets/EditorPage.cs:198
+#: ../src/Widgets/EditorPage.cs:199
msgid ""
"This tool requires an active selection. Please select a region of the photo "
"and try the operation again"
@@ -3844,13 +3862,13 @@ msgstr ""
"Cet outil requiert une sélection active. Veuillez choisir une zone de la "
"photo et recommencer l'opération"
-#: ../src/Widgets/EditorPage.cs:216
+#: ../src/Widgets/EditorPage.cs:217
msgid "Error saving adjusted photo"
msgid_plural "Error saving adjusted photos"
msgstr[0] "Erreur lors de l'enregistrement de la photo ajustée"
msgstr[1] "Erreur lors de l'enregistrement des photos ajustées"
-#: ../src/Widgets/EditorPage.cs:218
+#: ../src/Widgets/EditorPage.cs:219
#, csharp-format
msgid ""
"Received exception \"{0}\". Note that you have to develop RAW files into "
@@ -3859,11 +3877,11 @@ msgstr ""
"Exception « {0} » reçue. Notez que vous devez développer les fichiers RAW en "
"JPEG avant de pouvoir les modifier."
-#: ../src/Widgets/Filmstrip.cs:572
+#: ../src/Widgets/Filmstrip.cs:573
msgid "_Horizontal"
msgstr "_Horizontal"
-#: ../src/Widgets/Filmstrip.cs:576
+#: ../src/Widgets/Filmstrip.cs:577
msgid "_Vertical"
msgstr "_Vertical"
@@ -3875,66 +3893,70 @@ msgstr "Rechercher :"
msgid "Folders"
msgstr "Dossiers"
-#: ../src/Widgets/FolderTreeView.cs:123
+#: ../src/Widgets/FolderTreeView.cs:124
msgid "Filesystem"
msgstr "Système de fichiers"
-#: ../src/Widgets/InfoBox.cs:182
+#: ../src/Widgets/InfoBox.cs:183
msgid "Histogram"
msgstr "Histogramme"
-#: ../src/Widgets/InfoBox.cs:215
+#: ../src/Widgets/InfoBox.cs:216
msgid "Version"
msgstr "Version"
-#: ../src/Widgets/InfoBox.cs:218
+#: ../src/Widgets/InfoBox.cs:219
msgid "Date"
msgstr "Date"
-#: ../src/Widgets/InfoBox.cs:224
+#: ../src/Widgets/InfoBox.cs:225
msgid "Exposure"
msgstr "Exposition"
-#: ../src/Widgets/InfoBox.cs:228
+#: ../src/Widgets/InfoBox.cs:229
msgid "Focal Length"
msgstr "Distance focale"
-#: ../src/Widgets/InfoBox.cs:234
+#: ../src/Widgets/InfoBox.cs:232
+msgid "Camera"
+msgstr "Appareil photo"
+
+#: ../src/Widgets/InfoBox.cs:235
msgid "File Size"
msgstr "Taille du fichier"
-#: ../src/Widgets/InfoBox.cs:237
+#: ../src/Widgets/InfoBox.cs:238
msgid "Rating"
msgstr "Notation"
-#: ../src/Widgets/InfoBox.cs:390 ../src/Widgets/InfoBox.cs:398
-#: ../src/Widgets/InfoBox.cs:428
+#: ../src/Widgets/InfoBox.cs:391 ../src/Widgets/InfoBox.cs:399
+#: ../src/Widgets/InfoBox.cs:429
msgid "(wrong format)"
msgstr "(mauvais format)"
-#: ../src/Widgets/InfoBox.cs:418 ../src/Widgets/InfoBox.cs:441
-#: ../src/Widgets/InfoBox.cs:451 ../src/Widgets/InfoBox.cs:460
+#: ../src/Widgets/InfoBox.cs:419 ../src/Widgets/InfoBox.cs:442
+#: ../src/Widgets/InfoBox.cs:452 ../src/Widgets/InfoBox.cs:461
msgid "(Unknown)"
msgstr "(inconnu)"
-#: ../src/Widgets/InfoBox.cs:561
+#: ../src/Widgets/InfoBox.cs:564
#, csharp-format
msgid "(One Edit)"
msgid_plural "({0} Edits)"
msgstr[0] "(Une modification)"
msgstr[1] "({0} modifications)"
-#: ../src/Widgets/InfoBox.cs:575
+#: ../src/Widgets/InfoBox.cs:578
msgid "(File read error)"
msgstr "(erreur de lecture de fichier)"
-#: ../src/Widgets/InfoBox.cs:620
+#: ../src/Widgets/InfoBox.cs:623
#, csharp-format
msgid "{0} Photos"
msgstr "{0} photos"
#. Note for translators: {0} is a date, {1} and {2} are times.
-#: ../src/Widgets/InfoBox.cs:640
+#: ../src/Widgets/InfoBox.cs:643
#, csharp-format
msgid ""
"On {0} between \n"
@@ -3943,7 +3965,7 @@ msgstr ""
"Sur {0} entre \n"
"{1} et {2}"
-#: ../src/Widgets/InfoBox.cs:645
+#: ../src/Widgets/InfoBox.cs:648
#, csharp-format
msgid ""
"Between {0} \n"
@@ -3952,35 +3974,35 @@ msgstr ""
"Entre {0} \n"
"et {1}"
-#: ../src/Widgets/InfoBox.cs:672
+#: ../src/Widgets/InfoBox.cs:675
msgid "(At least one File not found)"
msgstr "(au moins un fichier non trouvé)"
-#: ../src/Widgets/InfoBox.cs:789
+#: ../src/Widgets/InfoBox.cs:792
msgid "Show Photo Name"
msgstr "Afficher le nom de la photo"
-#: ../src/Widgets/InfoBox.cs:798
+#: ../src/Widgets/InfoBox.cs:801
msgid "Show Date"
msgstr "Afficher la date"
-#: ../src/Widgets/InfoBox.cs:807
+#: ../src/Widgets/InfoBox.cs:810
msgid "Show Size"
msgstr "Afficher la taille"
-#: ../src/Widgets/InfoBox.cs:816
+#: ../src/Widgets/InfoBox.cs:819
msgid "Show Exposure"
msgstr "Afficher l'exposition"
-#: ../src/Widgets/InfoBox.cs:825
+#: ../src/Widgets/InfoBox.cs:828
msgid "Show Focal Length"
msgstr "Afficher la distance focale"
-#: ../src/Widgets/InfoBox.cs:834
+#: ../src/Widgets/InfoBox.cs:837
msgid "Show Camera"
msgstr "Afficher l'appareil photo"
-#: ../src/Widgets/InfoBox.cs:843
+#: ../src/Widgets/InfoBox.cs:846
msgid "Show File Size"
msgstr "Afficher la taille du fichier"
@@ -4014,7 +4036,7 @@ msgstr "Aucune métadonnée disponible"
msgid "No applications available"
msgstr "Aucun logiciel disponible"
-#: ../src/Widgets/RatingMenuItem.cs:56
+#: ../src/Widgets/RatingMenuItem.cs:57
msgid "Rating:"
msgstr "Notation :"
@@ -4038,213 +4060,3 @@ msgstr "Affiche un diaporama depuis F-Spot"
#: ../tools/f-spot-screensaver.desktop.in.h:2
msgid "F-Spot photos"
msgstr "Photos F-Spot"
-
-#~ msgid "Package"
-#~ msgstr "Paquet"
-
-#~ msgid "Extension Installation"
-#~ msgstr "Installation d'extension"
-
-#~ msgid "<b>Select the extensions to install and click on Next</b>"
-#~ msgstr ""
-#~ "<b>Sélectionnez les extensions à installer et cliquez sur « Suivant »</b>"
-
-#~ msgid "Install from:"
-#~ msgstr "Installer depuis :"
-
-#~ msgid "_Repositories..."
-#~ msgstr "_Dépôts..."
-
-# Liste d'actions
-#~ msgid "Show all packages"
-#~ msgstr "Afficher tous les paquets"
-
-#~ msgid "Show new versions only"
-#~ msgstr "Afficher uniquement les nouvelles versions"
-
-#~ msgid "Show updates only"
-#~ msgstr "Afficher uniquement les mises à jour"
-
-#~ msgid "_Unselect All"
-#~ msgstr "To_ut désélectionner"
-
-#~ msgid "label124"
-#~ msgstr "label124"
-
-#~ msgid "Overall Progress:"
-#~ msgstr "Progression d'ensemble :"
-
-#~ msgid "Downloading extensions..."
-#~ msgstr "Téléchargement des extensions..."
-
-#~ msgid "Extension Manager"
-#~ msgstr "Gestionnaire d'extensions"
-
-#~ msgid "Additional extensions are required to perform this operation."
-#~ msgstr ""
-#~ "Des extensions supplémentaires sont requises pour effectuer cette "
-#~ "opération."
-
-#~ msgid "The following extensions will be installed:"
-#~ msgstr "Les extensions suivantes seront installées :"
-
-#~ msgid "<big><b>Extension Manager</b></big>"
-#~ msgstr "<big><b>Gestionnaire d'extensions</b></big>"
-
-#~ msgid "The following extensions are currently installed:"
-#~ msgstr "Les extensions suivantes sont actuellement installées :"
-
-#~ msgid "_Install Extensions..."
-#~ msgstr "_Installer des extensions..."
-
-#~ msgid "_Uninstall..."
-#~ msgstr "_Désinstaller..."
-
-#~ msgid "Enable"
-#~ msgstr "Activer"
-
-#~ msgid "Disable"
-#~ msgstr "Désactiver"
-
-#~ msgid "Details"
-#~ msgstr "Détails"
-
-#~ msgid "Extension Repository Management"
-#~ msgstr "Gestionnaire des dépôts d'extensions"
-
-#~ msgid "Add New Repository"
-#~ msgstr "Ajouter un nouveau dépôt"
-
-#~ msgid "Select the location of the repository you want to register:"
-#~ msgstr "Sélectionnez l'emplacement du dépôt que vous voulez enregistrer :"
-
-#~ msgid "Register an on-line repository"
-#~ msgstr "Enregistrer un dépôt en ligne"
-
-#~ msgid "Url:"
-#~ msgstr "URL :"
-
-#~ msgid "Register a local repository"
-#~ msgstr "Enregistrer un dépôt local"
-
-#~ msgid "Path:"
-#~ msgstr "Chemin :"
-
-#~ msgid "Browse..."
-#~ msgstr "Parcourir..."
-
-#~ msgid "Version:"
-#~ msgstr "Version :"
-
-#~ msgid "Author:"
-#~ msgstr "Auteur :"
-
-#~ msgid "Copyright:"
-#~ msgstr "Copyright :"
-
-#~ msgid "Extension Dependencies:"
-#~ msgstr "Dépendances de l'extension :"
-
-#~ msgid "All registered repositories"
-#~ msgstr "Tous les dépôts enregistrés"
-
-#~ msgid "Are you sure you want to cancel the installation?"
-#~ msgstr "Voulez-vous vraiment annuler l'installation ?"
-
-#~ msgid "The following packages will be uninstalled:"
-#~ msgstr "Les paquets suivants seront désinstallés :"
-
-#~ msgid ""
-#~ "There are other extensions that depend on the previous ones which will "
-#~ "also be uninstalled:"
-#~ msgstr ""
-#~ "Des extensions supplémentaires, dépendantes des précédentes, seront aussi "
-#~ "désinstallées :"
-
-#~ msgid ""
-#~ "The selected extensions can't be installed because there are dependency "
-#~ "conflicts."
-#~ msgstr ""
-#~ "Les extensions sélectionnées ne peuvent êtres installées en raison de "
-#~ "conflits de dépendance."
-
-#~ msgid "The following packages will be installed:"
-#~ msgstr "Les paquets suivants seront installés :"
-
-#~ msgid " (in user directory)"
-#~ msgstr " (dans le répertoire utilisateur)"
-
-#~ msgid "The following packages need to be uninstalled:"
-#~ msgstr "Les paquets suivants nécessitent d'être désinstallés :"
-
-#~ msgid "The following dependencies could not be resolved:"
-#~ msgstr "Les dépendances suivantes ne peuvent être résolues :"
-
-#~ msgid "The installation has been successfully completed."
-#~ msgstr "L'installation s'est déroulée avec succès."
-
-#~ msgid "The installation failed!"
-#~ msgstr "L'installation a échoué."
-
-#~ msgid "The installation has completed with warnings."
-#~ msgstr "L'installation s'est déroulée avec des avertissements."
-
-#~ msgid "The uninstallation has been successfully completed."
-#~ msgstr "La désinstallation s'est déroulée avec succès."
-
-#~ msgid "The uninstallation failed!"
-#~ msgstr "La désinstallation a échoué."
-
-#~ msgid "The uninstallation has completed with warnings."
-#~ msgstr "La désinstallation s'est déroulée avec des avertissements."
-
-#~ msgid "Repository"
-#~ msgstr "Dépôt"
-
-#~ msgid "Installation cancelled"
-#~ msgstr "L'installation a été annulée"
-
-#~ msgid "Some of the required extensions were not found"
-#~ msgstr "Certaines extensions requises n'ont pas été trouvées"
-
-#~ msgid "Installation failed"
-#~ msgstr "L'installation a échoué"
-
-#~ msgid "Extension"
-#~ msgstr "Extension"
-
-#~ msgid "Other"
-#~ msgstr "Autre"
-
-#~ msgid "Url"
-#~ msgstr "URL"
-
-#~ msgid "Exception occurred: {0}"
-#~ msgstr "Une exception a été levée : {0}"
-
-#~ msgid "Disabled extensions can't be loaded."
-#~ msgstr "Les extensions désactivées ne peuvent être chargées."
-
-#~ msgid "Loading {0} extension"
-#~ msgstr "Chargement de l'extension {0}"
-
-#~ msgid "The required extension '{0}' is disabled."
-#~ msgstr "L'extension requise « {0} » est désactivée."
-
-#~ msgid "The required extension '{0}' is not installed."
-#~ msgstr "L'extension requise « {0} » n'est pas installée."
-
-#~ msgid "(provided by {0})"
-#~ msgstr "(fourni par {0})"
-
-#~ msgid "my photos"
-#~ msgstr "mes photos"
-
-#~ msgid "Edit Selected Tag..."
-#~ msgstr "Modifier l'étiquette sélectionnée..."
-
-#~ msgid "Copy Locat_ion"
-#~ msgstr "Copier l'_emplacement"
-
-#~ msgid "_Edit Selected Tag..."
-#~ msgstr "_Modifier l'étiquette sélectionnée..."
diff --git a/po/gl.po b/po/gl.po
index 482f975..be91dec 100644
--- a/po/gl.po
+++ b/po/gl.po
@@ -7,69 +7,99 @@
# Mancomún - Centro de Referencia e Servizos de Software Libre <g11n at mancomun.org>, 2009.
# Fran Dieguez <fran.dieguez at glug.es>, 2009.
# Antón Méixome <meixome at mancomun.org>, 2009.
+# Fran Diéguez <frandieguez at ubuntu.com>, 2010.
+#
msgid ""
msgstr ""
"Project-Id-Version: f-spot.master\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2009-10-07 18:54+0200\n"
-"PO-Revision-Date: 2009-10-07 15:11+0200\n"
-"Last-Translator: Antón Méixome <meixome at mancomun.org>\n"
-"Language-Team: Galician <gnome at mancomun.org>\n"
+"POT-Creation-Date: 2010-06-13 17:40+0200\n"
+"PO-Revision-Date: 2010-06-13 17:40+0200\n"
+"Last-Translator: Fran Diéguez <frandieguez at ubuntu.com>\n"
+"Language-Team: Galician <gnome at g11.net>\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Language: gl\n"
-"Plural-Forms: Plural-Forms: nplurals=2; plural=(n != 1);\n"
+"Plural-Forms: nplurals=2; plural=(n!=1);\\\n"
"X-Generator: KBabel 1.11.4\n"
+#: ../data/desktop-files/f-spot.desktop.in.in.h:1
+#: ../data/desktop-files/f-spot-import.desktop.in.in.h:1
+#: ../data/desktop-files/f-spot-view.desktop.in.in.h:1
+#: ../src/ui/main_window.ui.h:11
+msgid "F-Spot"
+msgstr "F-Spot"
+
+#: ../data/desktop-files/f-spot.desktop.in.in.h:2
+#: ../data/desktop-files/f-spot-import.desktop.in.in.h:2
+msgid "F-Spot Photo Manager"
+msgstr "Xestor de fotos F-Spot"
+
+#: ../data/desktop-files/f-spot.desktop.in.in.h:3
+msgid "Organize, enjoy, and share your photos"
+msgstr "Organice, comparta e divírtase coas súas fotos"
+
+#: ../data/desktop-files/f-spot.desktop.in.in.h:4
+#: ../data/desktop-files/f-spot-import.desktop.in.in.h:4
+msgid "Photo Manager"
+msgstr "Xestor de fotos"
+
+#: ../data/desktop-files/f-spot-import.desktop.in.in.h:3
+msgid "Import into F-Spot"
+msgstr "Importar a F-Spot"
+
+#: ../data/desktop-files/f-spot-view.desktop.in.in.h:2
+msgid "F-Spot Photo Viewer"
+msgstr "Visor de fotos F-Spot"
+
+#: ../data/desktop-files/f-spot-view.desktop.in.in.h:3
+msgid "Photo Viewer"
+msgstr "Visor de fotos"
+
#: ../extensions/Exporters/CDExport/CDExport.addin.xml.h:1
msgid "_CD..."
msgstr "_CD..."
#: ../extensions/Exporters/CDExport/CDExport.cs:162
-#: ../extensions/Exporters/FolderExport/FolderExport.cs:392
-#: ../src/CameraFileSelectionDialog.cs:199
msgid "Transferring Pictures"
-msgstr "Transferindo imaxes"
+msgstr "Transferindo as fotografías"
#: ../extensions/Exporters/CDExport/CDExport.cs:218
#, csharp-format
msgid "Transferring picture \"{0}\" To CD"
-msgstr "Transferindo imaxe \"{0}\" ao CD"
+msgstr "Transferindo fotografía «{0}» ao CD"
#. Note for translators: This indicates the current photo is photo {0} of {1} out of photos
#: ../extensions/Exporters/CDExport/CDExport.cs:220
-#: ../extensions/Exporters/FlickrExport/FlickrExport.cs:349
-#: ../extensions/Exporters/FolderExport/FolderExport.cs:245
+#: ../extensions/Exporters/FlickrExport/FlickrExport.cs:350
+#: ../extensions/Exporters/FolderExport/FolderExport.cs:220
#: ../extensions/Exporters/GalleryExport/GalleryExport.cs:781
-#: ../src/MainWindow.cs:638 ../src/UI.Dialog/AdjustTimeDialog.cs:129
-#: ../src/UI.Dialog/ProgressDialog.cs:92
+#: ../src/MainWindow.cs:644 ../src/UI.Dialog/AdjustTimeDialog.cs:130
+#: ../src/UI.Dialog/ProgressDialog.cs:90
#, csharp-format
msgid "{0} of {1}"
msgstr "{0} de {1}"
#: ../extensions/Exporters/CDExport/CDExport.cs:233
-#: ../extensions/Exporters/FacebookExport/FacebookExport.cs:379
-#: ../extensions/Exporters/FlickrExport/FlickrExport.cs:379
-#: ../extensions/Exporters/FolderExport/FolderExport.cs:285
+#: ../extensions/Exporters/FacebookExport/FacebookExport.cs:377
+#: ../extensions/Exporters/FlickrExport/FlickrExport.cs:380
#: ../extensions/Exporters/GalleryExport/GalleryExport.cs:806
-#: ../extensions/Exporters/PicasaWebExport/PicasaWebExport.cs:704
+#: ../extensions/Exporters/PicasaWebExport/PicasaWebExport.cs:705
#: ../extensions/Exporters/SmugMugExport/SmugMugExport.cs:607
msgid "Done Sending Photos"
msgstr "Completouse o envío de fotos"
#: ../extensions/Exporters/CDExport/CDExport.cs:235
-#: ../extensions/Exporters/FolderExport/FolderExport.cs:287
msgid "Transfer Complete"
-msgstr "Transferencia completa"
+msgstr "Transferencia rematada"
#: ../extensions/Exporters/CDExport/CDExport.cs:242
-#: ../extensions/Exporters/FolderExport/FolderExport.cs:292
msgid "Error While Transferring"
msgstr "Erro ao transferir"
#: ../extensions/Exporters/CDExport/CDExport.cs:250
-#: ../extensions/Exporters/FolderExport/FolderExport.cs:311
+#: ../extensions/Exporters/FolderExport/FolderExport.cs:278
msgid "Error Transferring"
msgstr "Erro ao transferir"
@@ -79,26 +109,26 @@ msgstr "copiando..."
#: ../extensions/Exporters/CDExport/CDExport.ui.h:1
msgid "<b><i>There is some previously scheduled items to write</i></b>"
-msgstr "<b><i>Está programada a escritura dalgúns elementos</i></b>"
+msgstr "<b><i>Está programada a escritura dalgúns elementos anteriores</i></b>"
#: ../extensions/Exporters/CDExport/CDExport.ui.h:2
msgid "<b>Photos to Burn</b>"
-msgstr "<b>Fotos para gravar</b>"
+msgstr "<b>Fotografías para gravar</b>"
#: ../extensions/Exporters/CDExport/CDExport.ui.h:3
#: ../extensions/Exporters/FolderExport/FolderExport.glade.h:7
#: ../extensions/Exporters/GalleryExport/GalleryExport.glade.h:7
#: ../extensions/Exporters/SmugMugExport/SmugMugExport.glade.h:5
-#: ../src/f-spot.glade.h:28
+#: ../src/f-spot.glade.h:20
msgid "Autorotate"
-msgstr "Rotación automática"
+msgstr "Autorrotar"
#: ../extensions/Exporters/CDExport/CDExport.ui.h:4
msgid "Create CD"
msgstr "Crear CD"
#: ../extensions/Exporters/CDExport/CDExport.ui.h:5
-#: ../src/Widgets/InfoBox.cs:220
+#: ../src/Widgets/InfoBox.cs:222
msgid "Size"
msgstr "Tamaño"
@@ -108,7 +138,7 @@ msgstr "Tamaño da selección exportada:"
#: ../extensions/Exporters/CDExport/CDExport.ui.h:7
msgid "_Browse Previously Scheduled Files"
-msgstr "_Examinar ficheiros xa programados"
+msgstr "_Examinar os ficheiros programados anteriormente"
#: ../extensions/Exporters/CDExport/CDExport.ui.h:8
#: ../extensions/Exporters/FlickrExport/FlickrExport.glade.h:15
@@ -116,7 +146,8 @@ msgstr "_Examinar ficheiros xa programados"
#: ../extensions/Exporters/GalleryExport/GalleryExport.glade.h:15
#: ../extensions/Exporters/PicasaWebExport/PicasaWebExport.glade.h:20
#: ../extensions/Exporters/SmugMugExport/SmugMugExport.glade.h:12
-#: ../src/f-spot.glade.h:95
+#: ../extensions/Exporters/TabbloExport/ui/TabbloExport.ui.h:9
+#: ../src/f-spot.glade.h:66
msgid "_Export"
msgstr "_Exportar"
@@ -130,7 +161,7 @@ msgstr "F_acebook..."
#: ../extensions/Exporters/FacebookExport/FacebookExport.cs:99
msgid "Waiting for authorization"
-msgstr "Agardando pola autenticación"
+msgstr "Agardando pola autorización"
#: ../extensions/Exporters/FacebookExport/FacebookExport.cs:100
msgid ""
@@ -140,45 +171,38 @@ msgid ""
"Once you are directed by Facebook to return to this application, click \"Ok"
"\" below."
msgstr ""
-"F-Spot lanzará o navegador web polo que vostede pode activar o permiso que "
-"seleccionou agora mesmo.\n"
+"F-Spot lanzará o navegador web para que vostede poida activar o permiso "
+"acaba de seleccionar.\n"
"\n"
-"Cando en Facebook lle dirixan de volta a este aplicativo, faga en \"Aceptar"
-"\"."
+"Cando Facebook lle indique que debe volver a este aplicativo, prema en "
+"\"Aceptar\"."
-#: ../extensions/Exporters/FacebookExport/FacebookExport.cs:279
+#: ../extensions/Exporters/FacebookExport/FacebookExport.cs:281
msgid "Too many images to export"
msgstr "Demasiadas imaxes para exportar"
-#: ../extensions/Exporters/FacebookExport/FacebookExport.cs:280
+#: ../extensions/Exporters/FacebookExport/FacebookExport.cs:282
+#, csharp-format
msgid ""
-"Facebook only permits 60 photographs per album. Please refine your "
+"Facebook only permits {0} photographs per album. Please refine your "
"selection and try again."
msgstr ""
-"Facebook só permite 60 fotos por álbum. Refaga a súa selección e probe de "
+"Facebook só permite {0} fotos por álbum. Refaga a súa selección e probe de "
"novo."
#: ../extensions/Exporters/FacebookExport/FacebookExport.cs:297
-#: ../extensions/Exporters/FlickrExport/FlickrExport.cs:475
-#: ../extensions/Exporters/GalleryExport/GalleryExport.cs:730
-#: ../extensions/Exporters/PicasaWebExport/PicasaWebExport.cs:597
-#: ../extensions/Exporters/SmugMugExport/SmugMugExport.cs:522
-msgid "Uploading Pictures"
-msgstr "Enviando imaxes"
-
-#: ../extensions/Exporters/FacebookExport/FacebookExport.cs:318
msgid "Album must have a name"
msgstr "O álbum debe ter un nome"
-#: ../extensions/Exporters/FacebookExport/FacebookExport.cs:319
+#: ../extensions/Exporters/FacebookExport/FacebookExport.cs:298
msgid "Please name your album or choose an existing album."
msgstr "Póñalle nome ao seu álbum ou escolla un que xa exista."
-#: ../extensions/Exporters/FacebookExport/FacebookExport.cs:333
+#: ../extensions/Exporters/FacebookExport/FacebookExport.cs:312
msgid "Creating a new album failed"
msgstr "Fallou ao crear un álbum novo"
-#: ../extensions/Exporters/FacebookExport/FacebookExport.cs:334
+#: ../extensions/Exporters/FacebookExport/FacebookExport.cs:313
#, csharp-format
msgid ""
"An error occurred creating a new album.\n"
@@ -189,42 +213,53 @@ msgstr ""
"\n"
"{0}"
-#: ../extensions/Exporters/FacebookExport/FacebookExport.cs:356
-#: ../extensions/Exporters/PicasaWebExport/PicasaWebExport.cs:660
+#: ../extensions/Exporters/FacebookExport/FacebookExport.cs:326
+#: ../extensions/Exporters/FlickrExport/FlickrExport.cs:476
+#: ../extensions/Exporters/GalleryExport/GalleryExport.cs:730
+#: ../extensions/Exporters/PicasaWebExport/PicasaWebExport.cs:598
+#: ../extensions/Exporters/SmugMugExport/SmugMugExport.cs:522
+msgid "Uploading Pictures"
+msgstr "Cargando as fotografías"
+
+#: ../extensions/Exporters/FacebookExport/FacebookExport.cs:354
+#: ../extensions/Exporters/PicasaWebExport/PicasaWebExport.cs:661
#: ../extensions/Exporters/SmugMugExport/SmugMugExport.cs:565
#, csharp-format
msgid "Uploading picture \"{0}\" ({1} of {2})"
-msgstr "Enviando imaxe \"{0}\" ({1} de {2})"
+msgstr "Enviando imaxe «{0}» ({1} de {2})"
-#: ../extensions/Exporters/FacebookExport/FacebookExport.cs:370
+#: ../extensions/Exporters/FacebookExport/FacebookExport.cs:368
#, csharp-format
msgid "Error Uploading To Facebook: {0}"
-msgstr "Erro ao enviar ao Facebook: {0}"
+msgstr "Erro ao enviar a Facebook: {0}"
-#: ../extensions/Exporters/FacebookExport/FacebookExport.cs:371
-#: ../extensions/Exporters/FlickrExport/FlickrExport.cs:370
-#: ../extensions/Exporters/FolderExport/FolderExport.cs:250
+#: ../extensions/Exporters/FacebookExport/FacebookExport.cs:369
+#: ../extensions/Exporters/FlickrExport/FlickrExport.cs:371
+#: ../extensions/Exporters/FolderExport/FolderExport.cs:226
#: ../extensions/Exporters/GalleryExport/GalleryExport.cs:797
-#: ../extensions/Exporters/PicasaWebExport/PicasaWebExport.cs:693
+#: ../extensions/Exporters/PicasaWebExport/PicasaWebExport.cs:694
#: ../extensions/Exporters/SmugMugExport/SmugMugExport.cs:596
#: ../extensions/Exporters/TabbloExport/TabbloExport.cs:319
-#: ../lib/mono-addins/Mono.Addins.Gui/gtk-gui/Mono.Addins.Gui.ErrorDialog.cs:40
msgid "Error"
msgstr "Erro"
-#: ../extensions/Exporters/FacebookExport/FacebookExport.cs:381
-#: ../extensions/Exporters/FlickrExport/FlickrExport.cs:381
+#: ../extensions/Exporters/FacebookExport/FacebookExport.cs:379
+#: ../extensions/Exporters/FlickrExport/FlickrExport.cs:382
#: ../extensions/Exporters/GalleryExport/GalleryExport.cs:808
-#: ../extensions/Exporters/PicasaWebExport/PicasaWebExport.cs:706
+#: ../extensions/Exporters/PicasaWebExport/PicasaWebExport.cs:707
#: ../extensions/Exporters/SmugMugExport/SmugMugExport.cs:609
msgid "Upload Complete"
-msgstr "Envío completo"
+msgstr "Carga completa"
+
+#: ../extensions/Exporters/FacebookExport/FacebookExport.cs:382
+msgid "Visit F-Spot group on Facebook"
+msgstr "Visite o grupo de F-Spot en Facebook"
-#: ../extensions/Exporters/FacebookExport/FacebookExportDialog.cs:211
+#: ../extensions/Exporters/FacebookExport/FacebookExportDialog.cs:212
msgid "Waiting for authentication"
msgstr "Agardando pola autenticación"
-#: ../extensions/Exporters/FacebookExport/FacebookExportDialog.cs:212
+#: ../extensions/Exporters/FacebookExport/FacebookExportDialog.cs:213
msgid ""
"F-Spot will now launch your browser so that you can log into Facebook.\n"
"\n"
@@ -235,70 +270,70 @@ msgstr ""
"F-Spot lanzará agora o navegador web dende o que pode iniciar sesión en "
"Facebook.\n"
"\n"
-"En cando Facebook lle suxira voltar a este aplicativo, faga clic en \"Aceptar"
-"\" máis abaixo. F-Spot almacenará a súa sesión en gnome-keyring, Se é "
-"posíbel voltará a empregalo en futuros exportados de Facebook."
+"En cando Facebook lle indique que debe volver a este aplicativo, prema en "
+"\"Aceptar\" máis abaixo. F-Spot almacenará a súa sesión en gnome-keyring, se "
+"é posíbel, e reutilizarao no futuro."
-#: ../extensions/Exporters/FacebookExport/FacebookExportDialog.cs:217
+#: ../extensions/Exporters/FacebookExport/FacebookExportDialog.cs:218
msgid "Authenticating..."
msgstr "Autenticando..."
-#: ../extensions/Exporters/FacebookExport/FacebookExportDialog.cs:227
+#: ../extensions/Exporters/FacebookExport/FacebookExportDialog.cs:228
msgid "Error logging into Facebook"
-msgstr "Erro ao iniciar a sesión no Facebook"
+msgstr "Produciuse un erro ao iniciar a sesión no Facebook"
-#: ../extensions/Exporters/FacebookExport/FacebookExportDialog.cs:228
+#: ../extensions/Exporters/FacebookExport/FacebookExportDialog.cs:229
msgid ""
"There was a problem logging into Facebook. Check your credentials and try "
"again."
msgstr ""
-"Houbo un problema ao iniciar a sesión no Facebook. Verifique as súas "
+"Produciuse un erro ao iniciar a sesión no Facebook. Verifique as súas "
"credenciais e probe de novo."
-#: ../extensions/Exporters/FacebookExport/FacebookExportDialog.cs:237
+#: ../extensions/Exporters/FacebookExport/FacebookExportDialog.cs:238
msgid "Authorizing Session"
msgstr "Autorizando sesión"
-#: ../extensions/Exporters/FacebookExport/FacebookExportDialog.cs:246
+#: ../extensions/Exporters/FacebookExport/FacebookExportDialog.cs:247
msgid "Session established, fetching user info..."
-msgstr "Sesión establecida, obtendo información do usuario"
+msgstr "Sesión estabelecida, obtendo información do usuario..."
-#: ../extensions/Exporters/FacebookExport/FacebookExportDialog.cs:252
+#: ../extensions/Exporters/FacebookExport/FacebookExportDialog.cs:253
msgid "Session established, fetching friend list..."
-msgstr "Sesión establecida, obtendo a lista de amigos..."
+msgstr "Sesión estabelecida, obtendo a lista de amigos..."
-#: ../extensions/Exporters/FacebookExport/FacebookExportDialog.cs:262
+#: ../extensions/Exporters/FacebookExport/FacebookExportDialog.cs:263
msgid "Session established, fetching friend details..."
-msgstr "Sesión establecida, obtendo detalles do amigo..."
+msgstr "Sesión estabelecida, obtendo detalles dos amigos..."
-#: ../extensions/Exporters/FacebookExport/FacebookExportDialog.cs:272
+#: ../extensions/Exporters/FacebookExport/FacebookExportDialog.cs:275
msgid "Session established, fetching photo albums..."
-msgstr "Sesión establecida, obtendo álbums de fotos..."
+msgstr "Sesión estabelecida, obtendo álbums de fotos..."
#. Note for translators: {0} and {1} are respectively firstname and surname of the user
#: ../extensions/Exporters/FacebookExport/FacebookExportDialog.cs:285
#, csharp-format
msgid "{0} {1} is logged into Facebook"
-msgstr "{0} {1} iniciaron a sesión no Facebook"
+msgstr "{0} {1} iniciou a sesión en Facebook"
-#: ../extensions/Exporters/FacebookExport/FacebookExportDialog.cs:291
+#: ../extensions/Exporters/FacebookExport/FacebookExportDialog.cs:294
msgid "Facebook Connection Error"
-msgstr "Ocorreu un erro de conexión con Facebook"
+msgstr "Erro de conexión con Facebook"
-#: ../extensions/Exporters/FacebookExport/FacebookExportDialog.cs:292
+#: ../extensions/Exporters/FacebookExport/FacebookExportDialog.cs:295
#, csharp-format
msgid ""
"There was an error when downloading your information from Facebook.\n"
"\n"
"Facebook said: {0}"
msgstr ""
-"Houbo un erro ao descargar a súa información dende Facebook.\n"
+"Produciuse un erro ao descargar a súa información dende Facebook.\n"
"\n"
"Facebook dixo: {0}"
-#: ../extensions/Exporters/FacebookExport/FacebookExportDialog.cs:321
+#: ../extensions/Exporters/FacebookExport/FacebookExportDialog.cs:324
msgid "You are not logged in."
-msgstr "Non está conectado."
+msgstr "Non iniciou a sesión."
#: ../extensions/Exporters/FacebookExport/FacebookExport.ui.h:1
msgid "Auto-confirm Photos"
@@ -306,7 +341,7 @@ msgstr "Autoconfirmar fotos"
#: ../extensions/Exporters/FacebookExport/FacebookExport.ui.h:2
msgid "Caption"
-msgstr "Lenda"
+msgstr "Título"
#: ../extensions/Exporters/FacebookExport/FacebookExport.ui.h:3
msgid "Create a new album"
@@ -318,7 +353,7 @@ msgstr "Descrición"
#: ../extensions/Exporters/FacebookExport/FacebookExport.ui.h:5
msgid "Export to Facebook"
-msgstr "Exportar ao Facebook"
+msgstr "Exportar a Facebook"
#: ../extensions/Exporters/FacebookExport/FacebookExport.ui.h:6
msgid "In this photo"
@@ -335,11 +370,10 @@ msgstr "Iniciar sesión"
#: ../extensions/Exporters/FacebookExport/FacebookExport.ui.h:9
msgid "Logout"
-msgstr "Pechar sesión"
+msgstr "Saír da sesión"
#: ../extensions/Exporters/FacebookExport/FacebookExport.ui.h:10
-#: ../lib/mono-addins/Mono.Addins.Gui/Mono.Addins.Gui/ManageSitesDialog.cs:51
-#: ../src/Widgets/InfoBox.cs:211
+#: ../src/Widgets/InfoBox.cs:213
msgid "Name"
msgstr "Nome"
@@ -357,7 +391,7 @@ msgstr "Permanecer conectado"
#: ../extensions/Exporters/FacebookExport/FacebookExport.ui.h:14
msgid "Use an existing album"
-msgstr "Usar un álbum que xa existe"
+msgstr "Usar un álbum existente"
#: ../extensions/Exporters/FacebookExport/FacebookExport.ui.h:15
msgid "Who is this?"
@@ -375,84 +409,82 @@ msgstr "_Flickr..."
msgid "_Zooomr..."
msgstr "_Zooomr..."
-#: ../extensions/Exporters/FlickrExport/FlickrExport.cs:105
+#: ../extensions/Exporters/FlickrExport/FlickrExport.cs:106
#: ../extensions/Exporters/FlickrExport/FlickrExport.glade.h:5
msgid "Authorize"
msgstr "Autorizar"
-#: ../extensions/Exporters/FlickrExport/FlickrExport.cs:111
+#: ../extensions/Exporters/FlickrExport/FlickrExport.cs:112
#, csharp-format
msgid ""
"Return to this window after you have finished the authorization process on "
"{0} and click the \"Complete Authorization\" button below"
msgstr ""
"Volva a esta xanela cando termine o proceso de autorización en {0} e prema o "
-"botón \"Autorización completa\""
+"botón \"Completar autorización\""
-#: ../extensions/Exporters/FlickrExport/FlickrExport.cs:112
+#: ../extensions/Exporters/FlickrExport/FlickrExport.cs:113
msgid "Complete Authorization"
-msgstr "Autorización completa"
+msgstr "Completar autorización"
-#: ../extensions/Exporters/FlickrExport/FlickrExport.cs:117
+#: ../extensions/Exporters/FlickrExport/FlickrExport.cs:118
#, csharp-format
msgid "Logging into {0}"
-msgstr "Inicio de sesión en {0}"
+msgstr "Iniciando a sesión en {0}"
-#: ../extensions/Exporters/FlickrExport/FlickrExport.cs:118
+#: ../extensions/Exporters/FlickrExport/FlickrExport.cs:119
msgid "Checking credentials..."
-msgstr "Comprobando credenciais..."
+msgstr "Comprobando os credenciais..."
-#: ../extensions/Exporters/FlickrExport/FlickrExport.cs:125
+#: ../extensions/Exporters/FlickrExport/FlickrExport.cs:126
#, csharp-format
msgid "Welcome {0} you are connected to {1}"
msgstr "Benvido a {0} vostede está conectado a {1}"
-#: ../extensions/Exporters/FlickrExport/FlickrExport.cs:128
+#: ../extensions/Exporters/FlickrExport/FlickrExport.cs:129
#, csharp-format
msgid "Sign in as a different user"
msgstr "Iniciar sesión como un usuario diferente"
-#: ../extensions/Exporters/FlickrExport/FlickrExport.cs:133
+#: ../extensions/Exporters/FlickrExport/FlickrExport.cs:134
#, csharp-format
msgid "Used {0} of your allowed {1} monthly quota"
-msgstr "Utilizouse o {0} da súa cota mensual permitida {1}"
+msgstr "Usou o {0} da súa cota mensual de {1}"
-#: ../extensions/Exporters/FlickrExport/FlickrExport.cs:297
+#: ../extensions/Exporters/FlickrExport/FlickrExport.cs:298
msgid "Unable to log on"
msgstr "Non é posíbel iniciar sesión"
-#: ../extensions/Exporters/FlickrExport/FlickrExport.cs:317
+#: ../extensions/Exporters/FlickrExport/FlickrExport.cs:318
#, csharp-format
msgid "Waiting for response {0} of {1}"
msgstr "Esperando resposta {0} de {1}"
-#: ../extensions/Exporters/FlickrExport/FlickrExport.cs:344
-#: ../extensions/Exporters/FolderExport/FolderExport.cs:242
+#: ../extensions/Exporters/FlickrExport/FlickrExport.cs:345
#: ../extensions/Exporters/GalleryExport/GalleryExport.cs:777
#, csharp-format
msgid "Uploading picture \"{0}\""
-msgstr "Enviando imaxe \"{0}\""
+msgstr "Cargando foto «{0}»"
-#: ../extensions/Exporters/FlickrExport/FlickrExport.cs:367
+#: ../extensions/Exporters/FlickrExport/FlickrExport.cs:368
#, csharp-format
msgid "Error Uploading To {0}: {1}"
-msgstr "Erro ao enviar a {0}: {1}"
+msgstr "Erro ao cargar en {0}: {1}"
-#: ../extensions/Exporters/FlickrExport/FlickrExport.cs:454
+#: ../extensions/Exporters/FlickrExport/FlickrExport.cs:455
msgid "Unable to log on."
-msgstr "Non é posíbel iniciar sesión."
+msgstr "Non foi posíbel iniciar sesión."
-#: ../extensions/Exporters/FlickrExport/FlickrExport.cs:455
+#: ../extensions/Exporters/FlickrExport/FlickrExport.cs:456
#, csharp-format
msgid ""
"F-Spot was unable to log on to {0}. Make sure you have given the "
"authentication using {0} web browser interface."
msgstr ""
-"O F-Spot non foi quen de iniciar sesión a {0}. Asegúrese de que lle deu a "
-"autenticación usando o {0} navegador web da interface."
+"O F-Spot non puido iniciar a sesión en {0}. Asegúrese de que lle deu a "
+"autorización usando a interface web de {0}."
#: ../extensions/Exporters/FlickrExport/FlickrExport.glade.h:1
-#: ../src/f-spot.glade.h:8
msgid "<b>Account</b>"
msgstr "<b>Conta</b>"
@@ -461,28 +493,29 @@ msgstr "<b>Conta</b>"
#: ../extensions/Exporters/GalleryExport/GalleryExport.glade.h:3
#: ../extensions/Exporters/PicasaWebExport/PicasaWebExport.glade.h:2
#: ../extensions/Exporters/SmugMugExport/SmugMugExport.glade.h:2
-#: ../src/f-spot.glade.h:14 ../src/UI.Dialog/ui/AdjustTimeDialog.ui.h:5
+#: ../extensions/Exporters/TabbloExport/ui/TabbloExport.ui.h:2
+#: ../src/f-spot.glade.h:8 ../src/UI.Dialog/ui/AdjustTimeDialog.ui.h:5
msgid "<b>Photos</b>"
-msgstr "<b>Fotos</b>"
+msgstr "<b>Fotografías</b>"
#: ../extensions/Exporters/FlickrExport/FlickrExport.glade.h:3
#: ../extensions/Exporters/FolderExport/FolderExport.glade.h:6
#: ../extensions/Exporters/GalleryExport/GalleryExport.glade.h:4
#: ../extensions/Exporters/PicasaWebExport/PicasaWebExport.glade.h:4
#: ../extensions/Exporters/SmugMugExport/SmugMugExport.glade.h:4
-#: ../src/f-spot.glade.h:16
+#: ../src/f-spot.glade.h:10
msgid "<b>Style</b>"
msgstr "<b>Estilo</b>"
#: ../extensions/Exporters/FlickrExport/FlickrExport.glade.h:4
msgid "<b>Viewing permissions</b>"
-msgstr "<b>Verificando os permisos</b>"
+msgstr "<b>Permisos de visionado</b>"
#: ../extensions/Exporters/FlickrExport/FlickrExport.glade.h:6
#: ../extensions/Exporters/GalleryExport/GalleryExport.glade.h:8
#: ../extensions/Exporters/PicasaWebExport/PicasaWebExport.glade.h:9
#: ../extensions/Exporters/SmugMugExport/SmugMugExport.glade.h:6
-#: ../src/f-spot.glade.h:43
+#: ../extensions/Exporters/TabbloExport/ui/TabbloExport.ui.h:5
msgid "Export"
msgstr "Exportar"
@@ -502,31 +535,30 @@ msgstr ""
#: ../extensions/Exporters/FlickrExport/FlickrExport.glade.h:9
msgid "Ignore _top level tags"
-msgstr "Ignorar as e_tiquetas do nivel máis alto"
+msgstr "Ignorar as etiquetas do nivel _superior"
#: ../extensions/Exporters/FlickrExport/FlickrExport.glade.h:10
msgid "Private"
-msgstr "Privado"
+msgstr "Privada"
#: ../extensions/Exporters/FlickrExport/FlickrExport.glade.h:11
msgid "Public"
-msgstr "Público"
+msgstr "Pública"
#: ../extensions/Exporters/FlickrExport/FlickrExport.glade.h:12
msgid "Strip _metadata"
-msgstr "Quitar _metadatos"
+msgstr "Recortar _metadatos"
#: ../extensions/Exporters/FlickrExport/FlickrExport.glade.h:13
msgid "Visible to Family"
-msgstr "Visíbel para a familia"
+msgstr "Visíbel para a miña familia"
#: ../extensions/Exporters/FlickrExport/FlickrExport.glade.h:14
msgid "Visible to Friends"
-msgstr "Visíbel para os amigos"
+msgstr "Visíbel para os meus amigos"
#: ../extensions/Exporters/FlickrExport/FlickrExport.glade.h:16
#: ../extensions/Exporters/PicasaWebExport/PicasaWebExport.glade.h:21
-#: ../src/f-spot.glade.h:96
msgid "_Export tags"
msgstr "_Exportar etiquetas"
@@ -535,20 +567,18 @@ msgstr "_Exportar etiquetas"
#: ../extensions/Exporters/GalleryExport/GalleryExport.glade.h:21
#: ../extensions/Exporters/PicasaWebExport/PicasaWebExport.glade.h:25
#: ../extensions/Exporters/SmugMugExport/SmugMugExport.glade.h:15
-#: ../src/f-spot.glade.h:109
msgid "_Resize to: "
msgstr "_Redimensionar a: "
#: ../extensions/Exporters/FlickrExport/FlickrExport.glade.h:18
msgid "_View photos in browser when done uploading"
-msgstr "_Ver as fotos no navegador ao terminar de cargalas"
+msgstr "_Ver as fotos nun navegador ao terminar de cargalas"
#: ../extensions/Exporters/FlickrExport/FlickrExport.glade.h:19
#: ../extensions/Exporters/FolderExport/FolderExport.glade.h:20
#: ../extensions/Exporters/GalleryExport/GalleryExport.glade.h:24
#: ../extensions/Exporters/PicasaWebExport/PicasaWebExport.glade.h:27
#: ../extensions/Exporters/SmugMugExport/SmugMugExport.glade.h:17
-#: ../src/f-spot.glade.h:125
msgid "pixels"
msgstr "píxeles"
@@ -556,80 +586,98 @@ msgstr "píxeles"
msgid "F_older..."
msgstr "Cartaf_ol..."
-#: ../extensions/Exporters/FolderExport/FolderExport.cs:140
+#: ../extensions/Exporters/FolderExport/FolderExport.cs:120
msgid "Select Export Folder"
-msgstr "Seleccionar cartafol para exportar"
+msgstr "Seleccione un cartafol para exportar"
-#: ../extensions/Exporters/FolderExport/FolderExport.cs:198
+#: ../extensions/Exporters/FolderExport/FolderExport.cs:173
msgid "Building Gallery"
msgstr "Construíndo a galería"
-#: ../extensions/Exporters/FolderExport/FolderExport.cs:248
+#: ../extensions/Exporters/FolderExport/FolderExport.cs:217
+#, csharp-format
+msgid "Exporting \"{0}\"..."
+msgstr "Exportando «{0}»..."
+
+#: ../extensions/Exporters/FolderExport/FolderExport.cs:224
+#, csharp-format
+msgid "Error Copying \"{0}\" to Gallery:{2}{1}"
+msgstr "Erro ao copiar «{0}» á galería: {2}{1}"
+
+#: ../extensions/Exporters/FolderExport/FolderExport.cs:250
#, csharp-format
-msgid "Error uploading picture \"{0}\" to Gallery:{2}{1}"
-msgstr "Erro ao enviar a imaxe \"{0}\" á galería:{2}{1}"
+msgid "Transferring to \"{0}\""
+msgstr "Transferindo a «{0}»"
-#: ../extensions/Exporters/FolderExport/FolderExport.cs:333
-msgid "Error: Error while transferring; Aborting"
-msgstr "Erro: erro ao transferir; interrompendo"
+#: ../extensions/Exporters/FolderExport/FolderExport.cs:251
+msgid "Transferring..."
+msgstr "Transferindo..."
-#: ../extensions/Exporters/FolderExport/FolderExport.cs:336
-msgid "Error: File Already Exists; Aborting"
-msgstr "Erro: o ficheiro xa existe; interrompendo"
+#. No need to check result here as if result is not true, an Exception will be thrown before
+#: ../extensions/Exporters/FolderExport/FolderExport.cs:256
+msgid "Export Complete."
+msgstr "Exportación completada."
+
+#: ../extensions/Exporters/FolderExport/FolderExport.cs:258
+msgid "Exporting Photos Completed."
+msgstr "Exportación de fotografías completada."
+
+#: ../extensions/Exporters/FolderExport/FolderExport.cs:325
+msgid "Exporting Photos"
+msgstr "Exportando fotos"
#. Note for translators: light as clear, opposite as dark
-#: ../extensions/Exporters/FolderExport/FolderExport.cs:803
+#: ../extensions/Exporters/FolderExport/FolderExport.cs:743
msgid "Light"
-msgstr "Claro"
+msgstr "Luminoso"
-#: ../extensions/Exporters/FolderExport/FolderExport.cs:804
+#: ../extensions/Exporters/FolderExport/FolderExport.cs:744
msgid "Dark"
msgstr "Escuro"
#. Abbreviation of previous
-#: ../extensions/Exporters/FolderExport/FolderExport.cs:984
+#: ../extensions/Exporters/FolderExport/FolderExport.cs:924
msgid "Prev"
msgstr "Anterior"
-#: ../extensions/Exporters/FolderExport/FolderExport.cs:986
-#: ../extensions/Exporters/FolderExport/FolderExport.cs:1227
-#: ../src/CameraFileSelectionDialog.cs:82
+#: ../extensions/Exporters/FolderExport/FolderExport.cs:926
+#: ../extensions/Exporters/FolderExport/FolderExport.cs:1167
msgid "Index"
msgstr "Índice"
#. Don't care otherwise, Tags sounds reasonable
-#: ../extensions/Exporters/FolderExport/FolderExport.cs:989
-#: ../extensions/Exporters/FolderExport/FolderExport.cs:1161
-#: ../extensions/Exporters/FolderExport/FolderExport.cs:1201
-#: ../src/MainWindow.cs:342 ../src/Widgets/Sidebar.cs:64
+#: ../extensions/Exporters/FolderExport/FolderExport.cs:929
+#: ../extensions/Exporters/FolderExport/FolderExport.cs:1101
+#: ../extensions/Exporters/FolderExport/FolderExport.cs:1141
+#: ../src/MainWindow.cs:348 ../src/Widgets/Sidebar.cs:56
msgid "Tags"
msgstr "Etiquetas"
-#: ../extensions/Exporters/FolderExport/FolderExport.cs:992
-#: ../src/f-spot.glade.h:57 ../src/ItemAction.cs:102
+#: ../extensions/Exporters/FolderExport/FolderExport.cs:932
+#: ../src/ItemAction.cs:102
msgid "Next"
msgstr "Seguinte"
-#: ../extensions/Exporters/FolderExport/FolderExport.cs:1096
+#: ../extensions/Exporters/FolderExport/FolderExport.cs:1036
msgid "Gallery generated by"
msgstr "Galería xerada por"
-#: ../extensions/Exporters/FolderExport/FolderExport.cs:1136
+#: ../extensions/Exporters/FolderExport/FolderExport.cs:1076
msgid "Show Styles"
msgstr "Mostrar estilos"
-#: ../extensions/Exporters/FolderExport/FolderExport.cs:1137
+#: ../extensions/Exporters/FolderExport/FolderExport.cs:1077
msgid "Hide Styles"
msgstr "Ocultar estilos"
-#: ../extensions/Exporters/FolderExport/FolderExport.cs:1172
-#: ../extensions/Exporters/FolderExport/FolderExport.cs:1173
-#: ../src/ui/main_window.ui.h:24
+#: ../extensions/Exporters/FolderExport/FolderExport.cs:1112
+#: ../extensions/Exporters/FolderExport/FolderExport.cs:1113
+#: ../src/ui/main_window.ui.h:25
msgid "Tags: "
msgstr "Etiquetas: "
-#: ../extensions/Exporters/FolderExport/FolderExport.cs:1304
-#: ../extensions/Exporters/FolderExport/FolderExport.cs:1437
+#: ../extensions/Exporters/FolderExport/FolderExport.cs:1244
+#: ../extensions/Exporters/FolderExport/FolderExport.cs:1377
msgid "Page:"
msgstr "Páxina:"
@@ -638,7 +686,6 @@ msgid "\n"
msgstr "\n"
#: ../extensions/Exporters/FolderExport/FolderExport.glade.h:3
-#: ../src/f-spot.glade.h:11
msgid "<b>Destination</b>"
msgstr "<b>Destino</b>"
@@ -686,25 +733,29 @@ msgstr "Carta_fol:"
msgid "_Save the files only"
msgstr "_Gardar só estes ficheiros"
+#: ../extensions/Exporters/GalleryExport/FormClient.cs:294
+msgid "Unhandled exception"
+msgstr "Excepción non xestionada"
+
#: ../extensions/Exporters/GalleryExport/GalleryExport.addin.xml.h:1
msgid "Web _Gallery..."
msgstr "_Galería web..."
-#: ../extensions/Exporters/GalleryExport/GalleryExport.cs:52
+#: ../extensions/Exporters/GalleryExport/GalleryExport.cs:53
msgid ""
"Cannot connect to a Gallery for which the version is unknown.\n"
"Please check that you have Remote plugin 1.0.8 or later"
msgstr ""
-"Non se pode conectar a unha galería para a cal a versión é descoñecida.\n"
-"Comprobe que ten un plugin remoto 1.0.8 ou posterior"
+"Non é posíbel conectar a unha galería para a cal se descoñece a versión.\n"
+"Comprobe que ten un engadido remoto 1.0.8 ou posterior"
#: ../extensions/Exporters/GalleryExport/GalleryExport.cs:391
msgid "Invalid URL"
-msgstr "URL incorrecto"
+msgstr "URL non válido"
#: ../extensions/Exporters/GalleryExport/GalleryExport.cs:392
msgid "The gallery URL entry does not appear to be a valid URL"
-msgstr "A entrada URL da galería non parece un URL válido"
+msgstr "O URL da galería non parece ser un URL válido"
#: ../extensions/Exporters/GalleryExport/GalleryExport.cs:402
#: ../extensions/Exporters/GalleryExport/GalleryExport.cs:429
@@ -730,11 +781,11 @@ msgid ""
"Please choose a unique name."
msgstr ""
"Xa hai unha galería con este nome dentro das galerías que ten rexistradas. "
-"Escolla un único nome."
+"Escolla un nome único."
#: ../extensions/Exporters/GalleryExport/GalleryExport.cs:528
msgid "(TopLevel)"
-msgstr "(Nivel máis alto)"
+msgstr "(Nivel superior)"
#: ../extensions/Exporters/GalleryExport/GalleryExport.cs:590
msgid "Invalid Gallery name"
@@ -746,33 +797,33 @@ msgid ""
"Only letters, numbers, - and _ are allowed"
msgstr ""
"O nome da galería contén caracteres non válidos.\n"
-"Só letras, números, - e _ están permitidos"
+"Só se permiten letras, números, «-» e «_» "
#: ../extensions/Exporters/GalleryExport/GalleryExport.cs:796
#, csharp-format
msgid "Error uploading picture \"{0}\" to Gallery: {1}"
-msgstr "Erro ao enviar a imaxe \"{0}\" á galería: {1}"
+msgstr "Produciuse un erro ao enviar a imaxe «{0}» a Gallery: {1}"
#: ../extensions/Exporters/GalleryExport/GalleryExport.cs:824
-#: ../extensions/Exporters/PicasaWebExport/PicasaWebExport.cs:727
+#: ../extensions/Exporters/PicasaWebExport/PicasaWebExport.cs:728
#: ../extensions/Exporters/SmugMugExport/SmugMugExport.cs:630
msgid "(No Gallery)"
msgstr "(Non hai galerías)"
#: ../extensions/Exporters/GalleryExport/GalleryExport.cs:916
-#: ../extensions/Exporters/PicasaWebExport/PicasaWebExport.cs:849
+#: ../extensions/Exporters/PicasaWebExport/PicasaWebExport.cs:850
#: ../extensions/Exporters/SmugMugExport/SmugMugExport.cs:726
msgid "(Not Connected)"
-msgstr "(Sen conexión)"
+msgstr "(Desconectado)"
#: ../extensions/Exporters/GalleryExport/GalleryExport.cs:917
-#: ../extensions/Exporters/PicasaWebExport/PicasaWebExport.cs:850
+#: ../extensions/Exporters/PicasaWebExport/PicasaWebExport.cs:851
#: ../extensions/Exporters/SmugMugExport/SmugMugExport.cs:727
msgid "(No Albums)"
msgstr "(Non hai álbums)"
#: ../extensions/Exporters/GalleryExport/GalleryExport.cs:969
-#: ../extensions/Exporters/PicasaWebExport/PicasaWebExport.cs:915
+#: ../extensions/Exporters/PicasaWebExport/PicasaWebExport.cs:916
#: ../extensions/Exporters/SmugMugExport/SmugMugExport.cs:768
msgid "No account selected"
msgstr "Non se seleccionou ningunha conta"
@@ -780,12 +831,10 @@ msgstr "Non se seleccionou ningunha conta"
#: ../extensions/Exporters/GalleryExport/GalleryExport.glade.h:1
#: ../extensions/Exporters/PicasaWebExport/PicasaWebExport.glade.h:1
#: ../extensions/Exporters/SmugMugExport/SmugMugExport.glade.h:1
-#: ../src/f-spot.glade.h:9
msgid "<b>Album</b>"
msgstr "<b>Álbum</b>"
#: ../extensions/Exporters/GalleryExport/GalleryExport.glade.h:2
-#: ../src/f-spot.glade.h:12
msgid "<b>Gallery</b>"
msgstr "<b>Galería</b>"
@@ -793,7 +842,7 @@ msgstr "<b>Galería</b>"
#: ../extensions/Exporters/PicasaWebExport/PicasaWebExport.glade.h:5
msgid "<span weight='bold' size='larger'>Error Connecting to Gallery</span>\n"
msgstr ""
-"<span weight='bold' size='larger'>Erro ao conectar coa galería</span>\n"
+"<span weight='bold' size='larger'>Erro ao conectar coa Gallery</span>\n"
#: ../extensions/Exporters/GalleryExport/GalleryExport.glade.h:9
msgid "Export _titles and comments"
@@ -803,7 +852,7 @@ msgstr "Exportar _títulos e comentarios"
#: ../extensions/Exporters/PicasaWebExport/PicasaWebExport.glade.h:10
#: ../extensions/Exporters/SmugMugExport/SmugMugExport.glade.h:7
msgid "Open _album in browser when done uploading"
-msgstr "_Abrir o álbum nun navegador ao terminar o envío"
+msgstr "_Abrir o álbum nun navegador ao remate de subir"
#: ../extensions/Exporters/GalleryExport/GalleryExport.glade.h:11
#: ../extensions/Exporters/PicasaWebExport/PicasaWebExport.glade.h:11
@@ -827,7 +876,6 @@ msgstr "_Descrición:"
#: ../extensions/Exporters/GalleryExport/GalleryExport.glade.h:16
#: ../extensions/Exporters/PicasaWebExport/PicasaWebExport.glade.h:22
#: ../extensions/Exporters/SmugMugExport/SmugMugExport.glade.h:13
-#: ../src/f-spot.glade.h:97
msgid "_Export to Album:"
msgstr "_Exportar ao álbum:"
@@ -847,6 +895,7 @@ msgstr "Álbu_m asociado:"
#: ../extensions/Exporters/GalleryExport/GalleryExport.glade.h:20
#: ../extensions/Exporters/PicasaWebExport/PicasaWebExport.glade.h:24
#: ../extensions/Exporters/SmugMugExport/SmugMugExport.glade.h:14
+#: ../extensions/Exporters/TabbloExport/ui/TabbloExport.ui.h:10
msgid "_Password:"
msgstr "_Contrasinal:"
@@ -857,23 +906,24 @@ msgstr "_Título:"
#: ../extensions/Exporters/GalleryExport/GalleryExport.glade.h:23
#: ../extensions/Exporters/PicasaWebExport/PicasaWebExport.glade.h:26
#: ../extensions/Exporters/SmugMugExport/SmugMugExport.glade.h:16
+#: ../extensions/Exporters/TabbloExport/ui/TabbloExport.ui.h:11
msgid "_Username:"
msgstr "_Nome de usuario:"
-#: ../extensions/Exporters/GalleryExport/GalleryRemote.cs:361
+#: ../extensions/Exporters/GalleryExport/GalleryRemote.cs:362
msgid "Error reading server response"
-msgstr "Erro ao ler a resposta do servidor"
+msgstr "Produciuse un erro ao ler a resposta do servidor"
#. failed to find the response
-#: ../extensions/Exporters/GalleryExport/GalleryRemote.cs:373
+#: ../extensions/Exporters/GalleryExport/GalleryRemote.cs:374
msgid "Server returned response without Gallery content"
msgstr "O servidor devolveu a resposta sen o contido da galería"
-#: ../extensions/Exporters/GalleryExport/GalleryRemote.cs:710
+#: ../extensions/Exporters/GalleryExport/GalleryRemote.cs:711
msgid "Error while creating new album"
msgstr "Erro ao crear o álbum novo"
-#: ../extensions/Exporters/GalleryExport/GalleryRemote.cs:711
+#: ../extensions/Exporters/GalleryExport/GalleryRemote.cs:712
#, csharp-format
msgid ""
"The following error was encountered while attempting to perform the "
@@ -885,40 +935,40 @@ msgstr ""
#: ../extensions/Exporters/PicasaWebExport/PicasaWebExport.addin.xml.h:1
msgid "_PicasaWeb..."
-msgstr "_Picasaweb..."
+msgstr "_PicasaWeb..."
-#: ../extensions/Exporters/PicasaWebExport/PicasaWebExport.cs:441
+#: ../extensions/Exporters/PicasaWebExport/PicasaWebExport.cs:442
msgid "Error while creating Album"
msgstr "Erro ao crear o álbum"
-#: ../extensions/Exporters/PicasaWebExport/PicasaWebExport.cs:442
+#: ../extensions/Exporters/PicasaWebExport/PicasaWebExport.cs:443
#, csharp-format
msgid ""
"The following error was encountered while attempting to create an album: {0}"
msgstr "Produciuse o seguinte erro ao tratar de crear un álbum novo: {0}"
-#: ../extensions/Exporters/PicasaWebExport/PicasaWebExport.cs:620
+#: ../extensions/Exporters/PicasaWebExport/PicasaWebExport.cs:621
#, csharp-format
msgid "{0} Sent"
msgstr "{0} Enviar"
-#: ../extensions/Exporters/PicasaWebExport/PicasaWebExport.cs:622
+#: ../extensions/Exporters/PicasaWebExport/PicasaWebExport.cs:623
#, csharp-format
msgid "{0} of approx. {1}"
msgstr "{0} de aproximadamente {1}"
-#: ../extensions/Exporters/PicasaWebExport/PicasaWebExport.cs:691
+#: ../extensions/Exporters/PicasaWebExport/PicasaWebExport.cs:692
#: ../extensions/Exporters/SmugMugExport/SmugMugExport.cs:594
#, csharp-format
msgid "Error Uploading To Gallery: {0}"
msgstr "Erro ao enviar á galería: {0}"
-#: ../extensions/Exporters/PicasaWebExport/PicasaWebExport.cs:778
+#: ../extensions/Exporters/PicasaWebExport/PicasaWebExport.cs:779
#, csharp-format
msgid "Available space: {0}, {1}% used out of {2}"
msgstr "Espazo dispoñíbel: {0}, {1}% usado de {2}"
-#: ../extensions/Exporters/PicasaWebExport/PicasaWebExport.cs:891
+#: ../extensions/Exporters/PicasaWebExport/PicasaWebExport.cs:892
#, csharp-format
msgid ""
"The selected album has a limit of {0} pictures,\n"
@@ -981,7 +1031,7 @@ msgstr "_Conta:"
#: ../extensions/Exporters/TabbloExport/Tabblo/Connection.cs:132
#, csharp-format
msgid "Uploading photo \"{0}\""
-msgstr "Enviando foto \"{0}\""
+msgstr "Enviando foto «{0}»"
#: ../extensions/Exporters/TabbloExport/Tabblo/Connection.cs:206
msgid "Logging into Tabblo"
@@ -1007,12 +1057,72 @@ msgstr "Envío completo"
msgid "Error uploading to Tabblo: "
msgstr "Erro ao enviar ao Tabblo: "
+#: ../extensions/Exporters/TabbloExport/ui/TabbloExport.ui.h:1
+msgid "<b>F-Spot tags</b>"
+msgstr "<b>Fotos</b>"
+
+#: ../extensions/Exporters/TabbloExport/ui/TabbloExport.ui.h:3
+msgid "<b>Tabblo account</b>"
+msgstr "<b>Conta</b>"
+
+#: ../extensions/Exporters/TabbloExport/ui/TabbloExport.ui.h:4
+msgid ""
+"<small><i>F-Spot tags can help you track the export status of photos. "
+"Example: Use one tag for the photos that you plan to export, and another one "
+"for those already exported. Here, you can tell F-Spot to automatically "
+"replace these tags as appropriate.</i></small>"
+msgstr ""
+"<small><i>As etiquetas de F-Spot axúdanlle a exportar o estado das fotos. "
+"Por exemplo: use unha etiqueta para as fotos que pensa exportar, e outra "
+"para as que xa exportou. Aquí pode dicirlle a F-Spot que substitúa "
+"automaticamente esas etiquetas de forma axeitada.</i></small>"
+
+#: ../extensions/Exporters/TabbloExport/ui/TabbloExport.ui.h:6
+msgid "Rem_ove from exported photos:"
+msgstr "_Quitar das fotos exportadas:"
+
+#: ../extensions/Exporters/TabbloExport/ui/TabbloExport.ui.h:7
+msgid "Select..."
+msgstr "Seleccionar..."
+
+#: ../extensions/Exporters/TabbloExport/ui/TabbloExport.ui.h:8
+msgid "_Attach to exported photos:"
+msgstr "_Engadir ás fotos exportadas:"
+
+#: ../extensions/Exporters/TabbloExport/ui/TrustError.ui.h:1
+msgid "<b>{0}</b>."
+msgstr "<b>{0}</b>."
+
+#: ../extensions/Exporters/TabbloExport/ui/TrustError.ui.h:2
+msgid "A trust error occured while attempting to access"
+msgstr "Produciuse un erro ao tentar acceder"
+
+#: ../extensions/Exporters/TabbloExport/ui/TrustError.ui.h:3
+msgid "Abort this session"
+msgstr "Abortar esta sesión"
+
+#: ../extensions/Exporters/TabbloExport/ui/TrustError.ui.h:4
+msgid "Always trust this site's certificate"
+msgstr "Confiar sempre no certificado deste sitio"
+
+#: ../extensions/Exporters/TabbloExport/ui/TrustError.ui.h:5
+msgid "Do you wish to:"
+msgstr "Desexaría:"
+
+#: ../extensions/Exporters/TabbloExport/ui/TrustError.ui.h:6
+msgid "Trust Error"
+msgstr "Erro"
+
+#: ../extensions/Exporters/TabbloExport/ui/TrustError.ui.h:7
+msgid "Trust the site's certificate this once"
+msgstr "Configurar no certificado do sitio esta vez"
+
#: ../extensions/Exporters/ZipExport/ZipExport.addin.xml.h:1
msgid "Compressed fil_e..."
msgstr "Fich_eiro comprimido..."
#: ../extensions/Exporters/ZipExport/ZipExport.cs:47
-#: ../src/Widgets/EditorPage.cs:196
+#: ../src/Widgets/EditorPage.cs:198
msgid "No selection available"
msgstr "Non hai ningunha selección dispoñíbel"
@@ -1035,10 +1145,9 @@ msgstr "Exportando ficheiros"
#: ../extensions/Exporters/ZipExport/ZipExport.cs:108
#, csharp-format
msgid "Preparing photo \"{0}\""
-msgstr "Preparando a foto \"{0}\""
+msgstr "Preparando a foto «{0}»"
#: ../extensions/Exporters/ZipExport/ZipExport.glade.h:1
-#: ../src/f-spot.glade.h:92
msgid "_Create"
msgstr "_Crear"
@@ -1054,6 +1163,10 @@ msgstr "_Localización:"
msgid "_Scale:"
msgstr "E_scala:"
+#: ../extensions/Tools/HashJob/HashJob.addin.xml.h:1
+msgid "Check for Duplicates..."
+msgstr "O hash para duplicados"
+
#: ../extensions/Tools/HashJob/HashJob.cs:53
msgid ""
"In order to detect duplicates on pictures you imported before 0.5.0, F-Spot "
@@ -1073,7 +1186,7 @@ msgstr ""
"Actualmente ten {0} fotos que necesitan cálculo md5, e {1} traballos "
"pendentes"
-#: ../extensions/Tools/HashJob/HashJob.cs:75 ../src/ui/main_window.ui.h:37
+#: ../extensions/Tools/HashJob/HashJob.cs:75 ../src/ui/main_window.ui.h:38
msgid "_Close"
msgstr "_Cerrar"
@@ -1085,10 +1198,6 @@ msgstr "Procesando as imaxes..."
msgid "Stopped"
msgstr "Detido"
-#: ../extensions/Tools/HashJob/HashJob.addin.xml.h:1
-msgid "Hash for Duplicates"
-msgstr "O hash para duplicados"
-
#: ../extensions/Tools/LiveWebGallery/GalleryRequestHandler.cs:107
msgid "F-Spot Gallery"
msgstr "Galería F-Spot"
@@ -1121,6 +1230,19 @@ msgstr "Seleccionada"
msgid "Live Web Gallery"
msgstr "Galería Web ao Vivo"
+#: ../extensions/Tools/LiveWebGallery/LiveWebGalleryDialog.cs:89
+msgid "none"
+msgstr "ningunha"
+
+#: ../extensions/Tools/LiveWebGallery/LiveWebGalleryDialog.cs:92
+#, csharp-format
+msgid " Gallery: {0}, Photos: {1}, Last client: {3}"
+msgstr " Galerías: {0}, Fotos: {1}, Último cliente: {3}"
+
+#: ../extensions/Tools/LiveWebGallery/LiveWebGalleryDialog.cs:156
+msgid "Gallery is inactive"
+msgstr "A galegría está inactiva"
+
#: ../extensions/Tools/LiveWebGallery/ui/LiveWebGallery.ui.h:1
msgid ""
"<small><i>The gallery stays active until you either deactivate it or close\n"
@@ -1182,19 +1304,6 @@ msgstr "Compartir:"
msgid "Views:"
msgstr "Visualizacións:"
-#: ../extensions/Tools/LiveWebGallery/LiveWebGalleryDialog.cs:89
-msgid "none"
-msgstr "ningunha"
-
-#: ../extensions/Tools/LiveWebGallery/LiveWebGalleryDialog.cs:92
-#, csharp-format
-msgid " Gallery: {0}, Photos: {1}, Last client: {3}"
-msgstr " Galerías: {0}, Fotos: {1}, Último cliente: {3}"
-
-#: ../extensions/Tools/LiveWebGallery/LiveWebGalleryDialog.cs:156
-msgid "Gallery is inactive"
-msgstr "A galegría está inactiva"
-
#: ../extensions/Tools/MergeDb/MergeDb.addin.xml.h:1
msgid "Merge Db"
msgstr "Combinar bases de datos"
@@ -1212,7 +1321,7 @@ msgid ""
msgstr ""
"O ficheiro que seleccionou non é unha base de datos válida ou soportada.\n"
"\n"
-"Recibiuse a excepción \"{0}\"."
+"Recibiuse a excepción «{0}»."
#: ../extensions/Tools/MergeDb/MergeDb.glade.h:1
msgid ""
@@ -1281,11 +1390,11 @@ msgid "New Rolls Only"
msgstr "Só carretes novos"
#: ../extensions/Tools/MergeDb/MergeDb.glade.h:15
-#: ../src/FileImportBackend.cs:290 ../src/UI.Dialog/ThreadProgressDialog.cs:55
+#: ../src/UI.Dialog/ThreadProgressDialog.cs:57
msgid "Skip"
msgstr "Ignorar"
-#: ../extensions/Tools/MergeDb/PickFolderDialog.cs:33
+#: ../extensions/Tools/MergeDb/PickFolderDialog.cs:34
#, csharp-format
msgid ""
"<big>The database refers to files contained in the <b>{0}</b> folder.\n"
@@ -1324,402 +1433,231 @@ msgstr "Utilice o F-Spot como protector de pantalla"
msgid "Screensaver Configuration"
msgstr "Configuración do salvapantallas"
-#: ../f-spot.desktop.in.in.h:1 ../f-spot-import.desktop.in.in.h:1
-#: ../f-spot-view.desktop.in.in.h:1 ../src/ui/main_window.ui.h:10
-msgid "F-Spot"
-msgstr "F-Spot"
-
-#: ../f-spot.desktop.in.in.h:2 ../f-spot-import.desktop.in.in.h:2
-msgid "F-Spot Photo Manager"
-msgstr "Xestor de fotos F-Spot"
+#: ../f-spot.schemas.in.h:1
+msgid "Display of transparent parts."
+msgstr "Mostrado das partes transparentes."
-#: ../f-spot.desktop.in.in.h:3
-msgid "Organize, enjoy, and share your photos"
-msgstr "Organiza, comparte e divírtete coas túas fotos"
+#: ../f-spot.schemas.in.h:2
+msgid "Enable this to allow interpolation on zoomed images."
+msgstr "Activar isto para permitir interpolación nas imaxes ampliadas."
-#: ../f-spot.desktop.in.in.h:4 ../f-spot-import.desktop.in.in.h:4
-msgid "Photo Manager"
-msgstr "Xestor de fotos"
+#: ../f-spot.schemas.in.h:3
+msgid "Height of the import dialog."
+msgstr "Altura do diálogo de importación."
-#: ../f-spot-import.desktop.in.in.h:3
-msgid "Import into F-Spot"
-msgstr "Importar a F-Spot"
+#: ../f-spot.schemas.in.h:4
+msgid "Height of the main window."
+msgstr "Altura da xanela principal."
-#: ../f-spot-view.desktop.in.in.h:2
-msgid "F-Spot Photo Viewer"
-msgstr "Visualizador de fotos F-Spot"
-
-#: ../f-spot-view.desktop.in.in.h:3
-msgid "Photo Viewer"
-msgstr "Visualizador de fotos"
+#: ../f-spot.schemas.in.h:5
+msgid "Height of the photo viewer window."
+msgstr "Altura da xanela do visor de fotos."
-#: ../lib/libfspot/f-jpeg-utils.c:441 ../src/RotateCommand.cs:224
-msgid "File not found"
-msgstr "O ficheiro non se localizou"
-
-#: ../lib/libfspot/f-jpeg-utils.c:464
-#, c-format
-msgid "Unknown transform type %d"
-msgstr "Tipo de transformación descoñecida %d"
-
-#: ../lib/libfspot/f-jpeg-utils.c:472
-msgid "Operation failed"
-msgstr "A operación fallou"
+#: ../f-spot.schemas.in.h:6
+msgid ""
+"If the 'transparency' option is set, the color specified in this option will "
+"be used as the transparent color when viewing images."
+msgstr ""
+"Se a opción «transparency» está activada a cor especificada nesta opción "
+"usarase como a cor transparente ao ver imaxes."
-#: ../lib/mono-addins/Mono.Addins.Gui/gtk-gui/Mono.Addins.Gui.AddinInfoDialog.cs:32
-msgid "Package"
-msgstr "Paquete"
+#: ../f-spot.schemas.in.h:7
+msgid "Interpolate image on zoom."
+msgstr "_Interpolar imaxe con zoom"
-#: ../lib/mono-addins/Mono.Addins.Gui/gtk-gui/Mono.Addins.Gui.AddinInstallDialog.cs:110
-msgid "Extension Installation"
-msgstr "Instalación da extensión"
+#: ../f-spot.schemas.in.h:8
+msgid "Maximize the main window."
+msgstr "Maximizar a xanela principal."
-#: ../lib/mono-addins/Mono.Addins.Gui/gtk-gui/Mono.Addins.Gui.AddinInstallDialog.cs:136
-msgid "<b>Select the extensions to install and click on Next</b>"
-msgstr ""
-"<b>Seleccione as extensións que quere instalar e prema no botón \"Seguinte"
-"\"</b>"
+#: ../f-spot.schemas.in.h:9
+msgid "Maximize the photo viewer window."
+msgstr "Maximizar a xanela de visión de foto."
-#: ../lib/mono-addins/Mono.Addins.Gui/gtk-gui/Mono.Addins.Gui.AddinInstallDialog.cs:150
-msgid "Install from:"
-msgstr "Instalar desde:"
+#: ../f-spot.schemas.in.h:10
+msgid "Path to custom gtkrc for theming F-Spot."
+msgstr "Ruta ao gtkrc personalizado para o tema de F-Spot."
-#: ../lib/mono-addins/Mono.Addins.Gui/gtk-gui/Mono.Addins.Gui.AddinInstallDialog.cs:179
-#: ../lib/mono-addins/Mono.Addins.Gui/gtk-gui/Mono.Addins.Gui.AddinManagerDialog.cs:180
-msgid "_Repositories..."
-msgstr "_Repositorios..."
+#: ../f-spot.schemas.in.h:11
+msgid "Show dates in the thumbnail view."
+msgstr "Mostrar as datas na vista de miniaturas."
-#: ../lib/mono-addins/Mono.Addins.Gui/gtk-gui/Mono.Addins.Gui.AddinInstallDialog.cs:220
-msgid "Show all packages"
-msgstr "Mostrar todos os paquetes"
+#: ../f-spot.schemas.in.h:12
+msgid "Show ratings in the thumbnail view."
+msgstr "Mostrar as puntuacións na vista de miniaturas."
-#: ../lib/mono-addins/Mono.Addins.Gui/gtk-gui/Mono.Addins.Gui.AddinInstallDialog.cs:221
-msgid "Show new versions only"
-msgstr "Mostrar só as versións novas"
+#: ../f-spot.schemas.in.h:13
+msgid "Show tags in the thumbnail view."
+msgstr "Mostrar as etiquetas na vista de miniaturas."
-#: ../lib/mono-addins/Mono.Addins.Gui/gtk-gui/Mono.Addins.Gui.AddinInstallDialog.cs:222
-msgid "Show updates only"
-msgstr "Mostrar só as actualizacións"
+#: ../f-spot.schemas.in.h:14
+msgid "Show the filename in the viewer window."
+msgstr "Mostrar o nome do ficheiro na vista de miniaturas."
-#: ../lib/mono-addins/Mono.Addins.Gui/gtk-gui/Mono.Addins.Gui.AddinInstallDialog.cs:247
-msgid "_Unselect All"
-msgstr "_Deseleccionar todo"
+#: ../f-spot.schemas.in.h:15
+msgid "Show the filmstrip in the main window."
+msgstr "Mostrar a tira de imaxes na vista de miniaturas."
-#: ../lib/mono-addins/Mono.Addins.Gui/gtk-gui/Mono.Addins.Gui.AddinInstallDialog.cs:259
-#: ../src/ui/main_window.ui.h:18
-msgid "Select _All"
-msgstr "Seleccionar _todo"
+#: ../f-spot.schemas.in.h:16
+msgid "Show the sidebar in the main window."
+msgstr "Mostrar a barra lateral na vista de miniaturas."
-#: ../lib/mono-addins/Mono.Addins.Gui/gtk-gui/Mono.Addins.Gui.AddinInstallDialog.cs:334
-msgid "label124"
-msgstr "etiqueta124"
+#: ../f-spot.schemas.in.h:17
+msgid "Show the timeline in the main window."
+msgstr "Mostrar a liña de tempo na vista de miniaturas."
-#: ../lib/mono-addins/Mono.Addins.Gui/gtk-gui/Mono.Addins.Gui.AddinInstallDialog.cs:346
-msgid "Overall Progress:"
-msgstr "Progreso xeral:"
+#: ../f-spot.schemas.in.h:18
+msgid "Show the toolbar in the main window."
+msgstr "Mostrar a barra de ferramentas na vista de miniaturas."
-#: ../lib/mono-addins/Mono.Addins.Gui/gtk-gui/Mono.Addins.Gui.AddinInstallDialog.cs:374
-msgid "Downloading extensions..."
-msgstr "Descargando as extensións..."
+#: ../f-spot.schemas.in.h:19
+msgid "Show the toolbar in the photo viewer window."
+msgstr "Mostrar a barra de ferramentas na vista de miniaturas."
-#: ../lib/mono-addins/Mono.Addins.Gui/gtk-gui/Mono.Addins.Gui.AddinInstallerDialog.cs:36
-#: ../lib/mono-addins/Mono.Addins.Gui/gtk-gui/Mono.Addins.Gui.AddinManagerDialog.cs:58
-msgid "Extension Manager"
-msgstr "Xestor de extensión"
+#: ../f-spot.schemas.in.h:20
+msgid "Size of the tag icons shown in the sidebar."
+msgstr "Tamaño das iconas de etiquetas mostradas na barra lateral."
-#: ../lib/mono-addins/Mono.Addins.Gui/gtk-gui/Mono.Addins.Gui.AddinInstallerDialog.cs:54
-msgid "Additional extensions are required to perform this operation."
-msgstr "Requírense extensións adicionais para realizar esta operación."
+#: ../f-spot.schemas.in.h:21
+msgid "The X position to use for the main window."
+msgstr "A posición X que usar para a xanela principal."
-#: ../lib/mono-addins/Mono.Addins.Gui/gtk-gui/Mono.Addins.Gui.AddinInstallerDialog.cs:64
-msgid "The following extensions will be installed:"
-msgstr "Vanse instalar as seguintes extensións:"
+#: ../f-spot.schemas.in.h:22
+msgid "The X position to use for the photo viewer window."
+msgstr "A posición X que usar para a xanela do visor de fotos."
-#: ../lib/mono-addins/Mono.Addins.Gui/gtk-gui/Mono.Addins.Gui.AddinManagerDialog.cs:90
-msgid "<big><b>Extension Manager</b></big>"
-msgstr "<big><b>Xestor de extensión</b></big>"
+#: ../f-spot.schemas.in.h:23
+msgid "The Y position to use for the main window."
+msgstr "A posición Y que usar para a xanela principal."
-#: ../lib/mono-addins/Mono.Addins.Gui/gtk-gui/Mono.Addins.Gui.AddinManagerDialog.cs:110
-msgid "The following extensions are currently installed:"
-msgstr "As seguintes extensións están sendo instaladas:"
+#: ../f-spot.schemas.in.h:24
+msgid "The Y position to use for the photo viewer window."
+msgstr "A posición Y que usar para a xanela do visor de fotos."
-#: ../lib/mono-addins/Mono.Addins.Gui/gtk-gui/Mono.Addins.Gui.AddinManagerDialog.cs:165
-msgid "_Install Extensions..."
-msgstr "_Instalar extensións..."
+#: ../f-spot.schemas.in.h:25
+msgid "The color to use for transparent parts."
+msgstr "A cor que usar para as partes transparentes."
-#: ../lib/mono-addins/Mono.Addins.Gui/gtk-gui/Mono.Addins.Gui.AddinManagerDialog.cs:210
-msgid "_Uninstall..."
-msgstr "_Desinstalar..."
+#: ../f-spot.schemas.in.h:26
+msgid "The height dimension to use for the import dialog."
+msgstr "A dimensión da altura que usar para o diálogo de importación."
-#: ../lib/mono-addins/Mono.Addins.Gui/gtk-gui/Mono.Addins.Gui.AddinManagerDialog.cs:236
-msgid "Enable"
-msgstr "Activar"
+#: ../f-spot.schemas.in.h:27
+msgid "The height dimension to use for the main window."
+msgstr "A dimensión da altura que usar para a xanela principal."
-#: ../lib/mono-addins/Mono.Addins.Gui/gtk-gui/Mono.Addins.Gui.AddinManagerDialog.cs:262
-msgid "Disable"
-msgstr "Desactivar"
+#: ../f-spot.schemas.in.h:28
+msgid "The height dimension to use for the photo viewer window."
+msgstr "A dimensión da altura que usar para a xanela do visor de fotos."
-#: ../lib/mono-addins/Mono.Addins.Gui/gtk-gui/Mono.Addins.Gui.ErrorDialog.cs:111
-msgid "Details"
-msgstr "Detalles"
+#: ../f-spot.schemas.in.h:29
+msgid "The orientation of the filmstrip, if shown."
+msgstr "A orientación da tira de imaxes, se se mostra."
-#: ../lib/mono-addins/Mono.Addins.Gui/gtk-gui/Mono.Addins.Gui.ManageSitesDialog.cs:34
-msgid "Extension Repository Management"
-msgstr "Xestor do repositorio de extensións"
+#: ../f-spot.schemas.in.h:30
+msgid "The orientation of the filmstrip."
+msgstr "A orientación da tira de imaxes."
-#: ../lib/mono-addins/Mono.Addins.Gui/gtk-gui/Mono.Addins.Gui.NewSiteDialog.cs:52
-msgid "Add New Repository"
-msgstr "Engadir un repositorio novo"
+#: ../f-spot.schemas.in.h:31
+msgid "The size (width) of the sidebar in the main window."
+msgstr "O tamaño (anchura) da barra lateral na xanela principal."
-#: ../lib/mono-addins/Mono.Addins.Gui/gtk-gui/Mono.Addins.Gui.NewSiteDialog.cs:70
-msgid "Select the location of the repository you want to register:"
-msgstr "Seleccione a localización do repositorio que queira rexistrar:"
+#: ../f-spot.schemas.in.h:32
+msgid "The size of the sidebar in the main window."
+msgstr "O tamaño da barra lateral na xanela principal."
-#. Container child vbox89.Gtk.Box+BoxChild
-#: ../lib/mono-addins/Mono.Addins.Gui/gtk-gui/Mono.Addins.Gui.NewSiteDialog.cs:77
-msgid "Register an on-line repository"
-msgstr "Rexistrar un repositorio en liña"
+#: ../f-spot.schemas.in.h:33
+msgid "The width dimension to use for the import dialog."
+msgstr "A dimensión da anchura que usar para o diálogo de importación."
-#: ../lib/mono-addins/Mono.Addins.Gui/gtk-gui/Mono.Addins.Gui.NewSiteDialog.cs:106
-msgid "Url:"
-msgstr "URL:"
+#: ../f-spot.schemas.in.h:34
+msgid "The width dimension to use for the main window."
+msgstr "A dimensión de anchura que usar para a xanela principal."
-#. Container child vbox89.Gtk.Box+BoxChild
-#: ../lib/mono-addins/Mono.Addins.Gui/gtk-gui/Mono.Addins.Gui.NewSiteDialog.cs:127
-msgid "Register a local repository"
-msgstr "Rexistrar un repositorio local"
+#: ../f-spot.schemas.in.h:35
+msgid "The width dimension to use for the photo viewer window."
+msgstr "A dimensión da anchura que usar para a xanela do visor de fotos."
-#: ../lib/mono-addins/Mono.Addins.Gui/gtk-gui/Mono.Addins.Gui.NewSiteDialog.cs:155
-msgid "Path:"
-msgstr "Camiño:"
+#: ../f-spot.schemas.in.h:36
+msgid "Use the current photo's filename as the viewer window's title."
+msgstr "Usar o nome da foto actual como o título da xanela do visor."
-#: ../lib/mono-addins/Mono.Addins.Gui/gtk-gui/Mono.Addins.Gui.NewSiteDialog.cs:179
-msgid "Browse..."
-msgstr "Examinar..."
+#: ../f-spot.schemas.in.h:37
+msgid "Width of the import dialog."
+msgstr "Anchura do diálogo de importación."
-#: ../lib/mono-addins/Mono.Addins.Gui/Mono.Addins.Gui/AddinInfoDialog.cs:62
-msgid "Version:"
-msgstr "Versión:"
+#: ../f-spot.schemas.in.h:38
+msgid "Width of the main window."
+msgstr "Anchura da xanela principal."
-#: ../lib/mono-addins/Mono.Addins.Gui/Mono.Addins.Gui/AddinInfoDialog.cs:65
-msgid "Author:"
-msgstr "Autor:"
+#: ../f-spot.schemas.in.h:39
+msgid "Width of the photo viewer window."
+msgstr "Anchura da xanela do visor de fotos."
-#: ../lib/mono-addins/Mono.Addins.Gui/Mono.Addins.Gui/AddinInfoDialog.cs:68
-msgid "Copyright:"
-msgstr "Copyright:"
+#: ../f-spot.schemas.in.h:40
+msgid "Width of the preview image pane in the import dialog."
+msgstr "Anchura do panel de vista previa no diálogo de importación."
-#: ../lib/mono-addins/Mono.Addins.Gui/Mono.Addins.Gui/AddinInfoDialog.cs:71
-msgid "Extension Dependencies:"
-msgstr "Dependencias da extensión:"
+#: ../f-spot.schemas.in.h:41
+msgid "X position of the main window."
+msgstr "Posición X da xanela principal."
-#: ../lib/mono-addins/Mono.Addins.Gui/Mono.Addins.Gui/AddinInstallDialog.cs:97
-msgid "All registered repositories"
-msgstr "Todos os repositorios rexistrados"
+#: ../f-spot.schemas.in.h:42
+msgid "X position of the photo viewer window."
+msgstr "Posición X da xanela do visor de fotos."
-#: ../lib/mono-addins/Mono.Addins.Gui/Mono.Addins.Gui/AddinInstallDialog.cs:184
-msgid "Are you sure you want to cancel the installation?"
-msgstr "Está seguro de que quere cancelar a instalación?"
+#: ../f-spot.schemas.in.h:43
+msgid "Y position of the main window."
+msgstr "Posición Y da xanela principal."
-#: ../lib/mono-addins/Mono.Addins.Gui/Mono.Addins.Gui/AddinInstallDialog.cs:308
-msgid "The following packages will be uninstalled:"
-msgstr "Vanse desinstalar os seguintes paquetes:"
+#: ../f-spot.schemas.in.h:44
+msgid "Y position of the photo viewer window."
+msgstr "Posición Y da xanela do visor de fotos."
-#: ../lib/mono-addins/Mono.Addins.Gui/Mono.Addins.Gui/AddinInstallDialog.cs:313
+#: ../f-spot.schemas.in.h:45
msgid ""
-"There are other extensions that depend on the previous ones which will also "
-"be uninstalled:"
+"You can choose how to display transparent parts in images. This option has "
+"no effect on photos but setting this value to CHECK_PATTERN or CUSTOM_COLOR "
+"could be useful when viewing icons or other artwork with transparent parts."
msgstr ""
-"Existen outras extensións que dependen das anteriores e que tamén se van "
-"desinstalar:"
-
-#: ../lib/mono-addins/Mono.Addins.Gui/Mono.Addins.Gui/AddinInstallDialog.cs:384
-msgid ""
-"The selected extensions can't be installed because there are dependency "
-"conflicts."
-msgstr ""
-"As extensións seleccionadas non se poden instalar por conflitos de "
-"dependencias."
-
-#: ../lib/mono-addins/Mono.Addins.Gui/Mono.Addins.Gui/AddinInstallDialog.cs:398
-msgid "The following packages will be installed:"
-msgstr "Vanse instalar os seguintes paquetes:"
-
-#: ../lib/mono-addins/Mono.Addins.Gui/Mono.Addins.Gui/AddinInstallDialog.cs:402
-msgid " (in user directory)"
-msgstr "(no directorio de usuario)"
-
-#: ../lib/mono-addins/Mono.Addins.Gui/Mono.Addins.Gui/AddinInstallDialog.cs:408
-msgid "The following packages need to be uninstalled:"
-msgstr "Téñense que desinstalar os seguintes paquetes:"
-
-#: ../lib/mono-addins/Mono.Addins.Gui/Mono.Addins.Gui/AddinInstallDialog.cs:416
-msgid "The following dependencies could not be resolved:"
-msgstr "Non se puideron resolver as seguintes dependencias:"
-
-#: ../lib/mono-addins/Mono.Addins.Gui/Mono.Addins.Gui/AddinInstallDialog.cs:441
-msgid "The installation has been successfully completed."
-msgstr "A instalación terminou correctamente."
-
-#: ../lib/mono-addins/Mono.Addins.Gui/Mono.Addins.Gui/AddinInstallDialog.cs:442
-msgid "The installation failed!"
-msgstr "A instalación fallou!"
-
-#: ../lib/mono-addins/Mono.Addins.Gui/Mono.Addins.Gui/AddinInstallDialog.cs:443
-msgid "The installation has completed with warnings."
-msgstr "A instalación completouse con avisos."
-
-#: ../lib/mono-addins/Mono.Addins.Gui/Mono.Addins.Gui/AddinInstallDialog.cs:446
-msgid "The uninstallation has been successfully completed."
-msgstr "A desinstalación completouse correctamente."
-
-#: ../lib/mono-addins/Mono.Addins.Gui/Mono.Addins.Gui/AddinInstallDialog.cs:447
-msgid "The uninstallation failed!"
-msgstr "A desinstalación fallou!"
-
-#: ../lib/mono-addins/Mono.Addins.Gui/Mono.Addins.Gui/AddinInstallDialog.cs:448
-msgid "The uninstallation has completed with warnings."
-msgstr "A desinstalación completouse con avisos."
-
-#: ../lib/mono-addins/Mono.Addins.Gui/Mono.Addins.Gui/AddinInstallDialog.cs:616
-msgid "Repository"
-msgstr "Repositorio"
-
-#: ../lib/mono-addins/Mono.Addins.Gui/Mono.Addins.Gui/AddinInstaller.cs:16
-msgid "Installation cancelled"
-msgstr "Cancelouse a instalación"
-
-#: ../lib/mono-addins/Mono.Addins.Gui/Mono.Addins.Gui/AddinInstallerDialog.cs:159
-msgid "Some of the required extensions were not found"
-msgstr "Non se encontraron algunhas das extensións que se requirían"
-
-#: ../lib/mono-addins/Mono.Addins.Gui/Mono.Addins.Gui/AddinInstallerDialog.cs:171
-msgid "Installation failed"
-msgstr "A instalación fallou"
-
-#: ../lib/mono-addins/Mono.Addins.Gui/Mono.Addins.Gui/AddinTreeWidget.cs:91
-msgid "Extension"
-msgstr "Extensión"
-
-#: ../lib/mono-addins/Mono.Addins.Gui/Mono.Addins.Gui/AddinTreeWidget.cs:112
-#: ../src/Widgets/InfoBox.cs:214
-msgid "Version"
-msgstr "Versión"
-
-#: ../lib/mono-addins/Mono.Addins.Gui/Mono.Addins.Gui/AddinTreeWidget.cs:168
-msgid "Other"
-msgstr "Outros"
-
-#: ../lib/mono-addins/Mono.Addins.Gui/Mono.Addins.Gui/ManageSitesDialog.cs:52
-msgid "Url"
-msgstr "URL"
-
-#: ../lib/mono-addins/Mono.Addins.Gui/Mono.Addins.Gui/Services.cs:61
-#: ../lib/mono-addins/Mono.Addins.Gui/Mono.Addins.Gui/Services.cs:70
-#, csharp-format
-msgid "Exception occurred: {0}"
-msgstr "Produciuse unha excepción: {0}"
-
-#: ../lib/mono-addins/Mono.Addins/Mono.Addins/AddinSessionService.cs:154
-msgid "Disabled extensions can't be loaded."
-msgstr "As extensións desactivadas non se poden cargar."
-
-#: ../lib/mono-addins/Mono.Addins/Mono.Addins/AddinSessionService.cs:179
-#, csharp-format
-msgid "Loading {0} extension"
-msgstr "Descargando a extensión {0}"
-
-#: ../lib/mono-addins/Mono.Addins/Mono.Addins/AddinSessionService.cs:265
-#, csharp-format
-msgid "The required extension '{0}' is disabled."
-msgstr "A extensión '{0}' requirida está desactivada."
-
-#: ../lib/mono-addins/Mono.Addins/Mono.Addins/AddinSessionService.cs:267
-#, csharp-format
-msgid "The required extension '{0}' is not installed."
-msgstr "A extensión '{0}' requirida non está instalada."
-
-#: ../lib/mono-addins/Mono.Addins/Mono.Addins.Description/AssemblyDependency.cs:79
-#, csharp-format
-msgid "(provided by {0})"
-msgstr "(proporcionado por {0})"
-
-#: ../src/CameraFileSelectionDialog.cs:76
-msgid "Preview"
-msgstr "Previsualización"
-
-#: ../src/CameraFileSelectionDialog.cs:78
-msgid "Path"
-msgstr "Camiño"
-
-#: ../src/CameraFileSelectionDialog.cs:80 ../src/f-spot.glade.h:46
-msgid "File"
-msgstr "Ficheiro"
-
-#: ../src/CameraFileSelectionDialog.cs:102
-msgid "Select Tag"
-msgstr "Seleccionar etiqueta"
-
-#: ../src/CameraFileSelectionDialog.cs:138
-msgid "Downloading Previews"
-msgstr "Descargar previsualizacións"
-
-#: ../src/CameraFileSelectionDialog.cs:148
-#, csharp-format
-msgid "Downloading Preview of {0}"
-msgstr "Descargar previsualización de {0}"
-
-#: ../src/CameraFileSelectionDialog.cs:220
-#, csharp-format
-msgid "Copying file {0} of {1}"
-msgstr "Copiando ficheiro {0} de {1}"
-
-#: ../src/CameraFileSelectionDialog.cs:235
-msgid "Error transferring file"
-msgstr "Erro ao transferir o ficheiro"
-
-#: ../src/CameraFileSelectionDialog.cs:244
-msgid "Download Complete"
-msgstr "Descarga completa"
-
-#: ../src/CameraFileSelectionDialog.cs:244
-msgid "Done Copying Files"
-msgstr "Copia dos ficheiros terminada"
+"<small><i>Pode elixir como quere mostrar as partes transparentes nas imaxes. "
+"Esta opción non ten ningún efecto sobre as fotos, mais estabelecela como "
+"axadrezado ou cor personalizada podería ser útil á hora de visualizar iconas "
+"ou outros materiais gráficos con zonas transparentes.</i></small>"
-#: ../src/CameraFileSelectionDialog.cs:268
-#, csharp-format
-msgid "Transferring \"{0}\" from camera"
-msgstr "Transferindo \"{0}\" desde a cámara"
+#: ../lib/libfspot/f-jpeg-utils.c:441 ../src/RotateCommand.cs:211
+msgid "File not found"
+msgstr "O ficheiro non se localizou"
-#: ../src/CameraSelectionDialog.cs:29 ../src/Widgets/InfoBox.cs:230
-msgid "Camera"
-msgstr "Cámara"
+#: ../lib/libfspot/f-jpeg-utils.c:464
+#, c-format
+msgid "Unknown transform type %d"
+msgstr "Tipo de transformación descoñecida %d"
-#: ../src/CameraSelectionDialog.cs:30
-msgid "Port"
-msgstr "Porto"
+#: ../lib/libfspot/f-jpeg-utils.c:472
+msgid "Operation failed"
+msgstr "A operación fallou"
-#: ../src/Core.cs:203
+#: ../src/Core/App.cs:274
#, csharp-format
msgid "No photos matching {0} found"
msgstr "Non se encontrou ningunha foto que se correspondese con {0}"
-#: ../src/Core.cs:204
+#: ../src/Core/App.cs:275
#, csharp-format
msgid ""
"The tag \"{0}\" is not applied to any photos. Try adding\n"
"the tag to some photos or selecting a different tag in the\n"
"F-Spot preference dialog."
msgstr ""
-"A etiqueta \"{0}\" non está aplicada a ningunha foto. Probe a engadir\n"
+"A etiqueta «{0}» non está aplicada a ningunha foto. Probe a engadir\n"
"a etiqueta a algunhas fotos ou a seleccionar unha etiqueta diferente no\n"
"diálogo de preferencias do F-Spot."
-#: ../src/Core.cs:208
+#: ../src/Core/App.cs:279
msgid "Search returned no results"
msgstr "A busca non obtivo resultados"
-#: ../src/Core.cs:209
+#: ../src/Core/App.cs:280
msgid ""
"The tag F-Spot is looking for does not exist. Try\n"
"selecting a different tag in the F-Spot preference\n"
@@ -1730,38 +1668,27 @@ msgstr ""
"do F-Spot."
#. Note for translators: Reparented is a picture becoming a version of another one
-#: ../src/Core/Photo.cs:473
+#: ../src/Core/Photo.cs:350
msgid "Reparented"
msgstr "Reasociada"
-#: ../src/Core/Photo.cs:473
-#, csharp-format
-msgid "Reparented ({0})"
-msgstr "Reasociada ({0})"
-
-#: ../src/Core/Photo.cs:492
+#: ../src/Core/Photo.cs:366
#, csharp-format
msgid "Modified"
msgid_plural "Modified ({0})"
msgstr[0] "Modificada"
msgstr[1] "Modificadas ({0})"
-#: ../src/Core/Photo.cs:513
+#: ../src/Core/Photo.cs:389
#, csharp-format
msgid "Modified in {1}"
msgstr "Modificada en {1}"
-#: ../src/Core/Photo.cs:513
+#: ../src/Core/Photo.cs:389
#, csharp-format
msgid "Modified in {1} ({0})"
msgstr "Modificada en {1} ({0})"
-#. Note that the original version is never stored in the photo_versions table in the
-#. database.
-#: ../src/Core/Photo.cs:671 ../src/f-spot.glade.h:61
-msgid "Original"
-msgstr "Orixinal"
-
#: ../src/Editors/AutoStretchEditor.cs:17
msgid "Auto Color"
msgstr "Cor automática"
@@ -1774,43 +1701,43 @@ msgstr "Axustar cores"
msgid "Adjust"
msgstr "Axustar"
-#: ../src/Editors/CropEditor.cs:35
+#: ../src/Editors/CropEditor.cs:36
msgid "4 x 3 (Book)"
msgstr "4 x 3 (Álbum)"
-#: ../src/Editors/CropEditor.cs:36
+#: ../src/Editors/CropEditor.cs:37
msgid "4 x 6 (Postcard)"
msgstr "4 x 6 (Postal)"
-#: ../src/Editors/CropEditor.cs:37
+#: ../src/Editors/CropEditor.cs:38
msgid "5 x 7 (L, 2L)"
msgstr "5 x 7 (L, 2L)"
-#: ../src/Editors/CropEditor.cs:38
+#: ../src/Editors/CropEditor.cs:39
msgid "8 x 10"
msgstr "8 x 10"
-#: ../src/Editors/CropEditor.cs:39
+#: ../src/Editors/CropEditor.cs:40
msgid "Square"
msgstr "Cadrado"
-#: ../src/Editors/CropEditor.cs:42
+#: ../src/Editors/CropEditor.cs:43
msgid "Crop"
msgstr "Recortar"
-#: ../src/Editors/CropEditor.cs:73
+#: ../src/Editors/CropEditor.cs:74
msgid "Select the area that needs cropping."
msgstr "Seleccionar a área que se vai recortar."
-#: ../src/Editors/CropEditor.cs:98
+#: ../src/Editors/CropEditor.cs:99
msgid "No Constraint"
msgstr "Sen restricións"
-#: ../src/Editors/CropEditor.cs:99
+#: ../src/Editors/CropEditor.cs:100
msgid "Same as photo"
msgstr "Igual á foto"
-#: ../src/Editors/CropEditor.cs:104
+#: ../src/Editors/CropEditor.cs:105
msgid "Custom Ratios..."
msgstr "Dimensións personalizadas..."
@@ -1834,34 +1761,21 @@ msgstr "Seleccione os ollos que quere corrixir."
msgid "Sepia Tone"
msgstr "Efecto sepia"
-#: ../src/Editors/SoftFocusEditor.cs:28
+#: ../src/Editors/SoftFocusEditor.cs:32
msgid "Soft Focus"
msgstr "Foco suave"
-#: ../src/Editors/TiltEditor.cs:28
+#: ../src/Editors/TiltEditor.cs:30
msgid "Straighten"
msgstr "Enderezar"
-#: ../src/FileImportBackend.cs:288
-msgid "Import error"
-msgstr "Erro ao importar"
-
-#: ../src/FileImportBackend.cs:289
-#, csharp-format
-msgid "Error importing {0}{2}{2}{1}"
-msgstr "Erro ao importar {0}{2}{2}{1}"
-
#: ../src/Filters/ResizeFilter.cs:70 ../src/Filters/SharpFilter.cs:52
#, csharp-format
msgid "No way to save files of type \"{0}\""
-msgstr "Non se poden gardar os ficheiros do tipo \"{0}\""
-
-#: ../src/FormClient.cs:295
-msgid "Unhandled exception"
-msgstr "Excepción non manipulada"
+msgstr "Non se poden gardar os ficheiros do tipo «{0}»"
#: ../src/FSpot.addin.xml.h:1
-msgid "Copy Photo Locat_ion"
+msgid "Copy Photo"
msgstr "Cop_iar a localización da foto"
#: ../src/FSpot.addin.xml.h:2
@@ -1872,17 +1786,17 @@ msgstr "Exportar a"
msgid "Open _With"
msgstr "A_brir con"
-#: ../src/FSpot.addin.xml.h:4 ../src/ui/main_window.ui.h:15
+#: ../src/FSpot.addin.xml.h:4 ../src/ui/main_window.ui.h:16
msgid "Rem_ove Tag"
msgstr "E_liminar etiqueta"
-#: ../src/FSpot.addin.xml.h:5 ../src/f-spot.glade.h:68
-#: ../src/SingleView.cs:451 ../src/ui/main_window.ui.h:16
+#: ../src/FSpot.addin.xml.h:5 ../src/f-spot.glade.h:44
+#: ../src/SingleView.cs:423 ../src/ui/main_window.ui.h:17
msgid "Rotate _Left"
msgstr "Rotar á _esquerda"
-#: ../src/FSpot.addin.xml.h:6 ../src/f-spot.glade.h:69
-#: ../src/SingleView.cs:452 ../src/ui/main_window.ui.h:17
+#: ../src/FSpot.addin.xml.h:6 ../src/f-spot.glade.h:45
+#: ../src/SingleView.cs:424 ../src/ui/main_window.ui.h:18
msgid "Rotate _Right"
msgstr "Rotar á _dereita"
@@ -1890,75 +1804,63 @@ msgstr "Rotar á _dereita"
msgid "Tools"
msgstr "Ferramentas"
-#: ../src/FSpot.addin.xml.h:8 ../src/ui/main_window.ui.h:32
-msgid "_Attach Tag"
-msgstr "_Anexar etiqueta"
-
-#: ../src/FSpot.addin.xml.h:9 ../src/ui/main_window.ui.h:41
+#: ../src/FSpot.addin.xml.h:8 ../src/ui/main_window.ui.h:42
msgid "_Delete From Drive"
msgstr "Eliminar do _dispositivo"
-#: ../src/FSpot.addin.xml.h:10 ../src/ui/main_window.ui.h:59
+#: ../src/FSpot.addin.xml.h:9 ../src/ui/main_window.ui.h:61
msgid "_Remove From Catalog"
msgstr "Elimina_r do catálogo"
#: ../src/f-spot.glade.h:1
-msgid " "
-msgstr " "
-
-#: ../src/f-spot.glade.h:2
msgid "1024 px"
msgstr "1024 px"
-#: ../src/f-spot.glade.h:3
+#: ../src/f-spot.glade.h:2
msgid "320 px"
msgstr "320 px"
-#: ../src/f-spot.glade.h:4
+#: ../src/f-spot.glade.h:3
msgid "480 px"
msgstr "480 px"
-#: ../src/f-spot.glade.h:5
+#: ../src/f-spot.glade.h:4
msgid "640 px"
msgstr "640 px"
-#: ../src/f-spot.glade.h:6
+#: ../src/f-spot.glade.h:5
msgid "800 px"
msgstr "800 px"
-#: ../src/f-spot.glade.h:7
-msgid "<b></b>"
-msgstr "<b></b>"
-
-#: ../src/f-spot.glade.h:10
+#: ../src/f-spot.glade.h:6
msgid "<b>Co_rrections</b>"
msgstr "<b>Co_rreccións</b>"
-#: ../src/f-spot.glade.h:13
+#: ../src/f-spot.glade.h:7
msgid "<b>Image Interpolation</b>"
msgstr "<b>Interpolación da imaxe</b>"
-#: ../src/f-spot.glade.h:15
+#: ../src/f-spot.glade.h:9
msgid "<b>Size</b>"
msgstr "<b>Tamaño</b>"
-#: ../src/f-spot.glade.h:17
+#: ../src/f-spot.glade.h:11
msgid "<b>Summary</b>"
msgstr "<b>Resumo</b>"
-#: ../src/f-spot.glade.h:18
+#: ../src/f-spot.glade.h:12
msgid "<b>Transparent Parts</b>"
msgstr "<b>Zonas transparentes</b>"
-#: ../src/f-spot.glade.h:19
+#: ../src/f-spot.glade.h:13
msgid "<b>View all pictures imported</b>"
msgstr "<b>Ver todas as imaxes importadas</b>"
-#: ../src/f-spot.glade.h:20
+#: ../src/f-spot.glade.h:14
msgid "<b>_White Balance</b>"
msgstr "<b>_Balance de brancos</b>"
-#: ../src/f-spot.glade.h:21
+#: ../src/f-spot.glade.h:15
msgid ""
"<small><i>Enable this to allow interpolation on zoomed images. You shouldn't "
"disable this for viewing photos, but disabling the interpolation could be "
@@ -1968,7 +1870,7 @@ msgstr ""
"zoom. Non debería desactivala para ver as fotos, mais desactivar a "
"interpolación podería ser útil para deseñar iconas.</i></small>"
-#: ../src/f-spot.glade.h:22
+#: ../src/f-spot.glade.h:16
msgid ""
"<small><i>You can choose how to display transparent parts in images. This "
"option has no effect on photos, but setting this as check pattern or custom "
@@ -1980,211 +1882,145 @@ msgstr ""
"axadrezado ou cor personalizada podería ser útil á hora de visualizar iconas "
"ou outros materiais gráficos con zonas transparentes.</i></small>"
-#: ../src/f-spot.glade.h:23
+#: ../src/f-spot.glade.h:17
msgid "As _background"
msgstr "Como _fondo"
-#: ../src/f-spot.glade.h:24
+#: ../src/f-spot.glade.h:18
msgid "As _custom color: "
msgstr "Como _cor personalizada: "
-#: ../src/f-spot.glade.h:25
+#: ../src/f-spot.glade.h:19
msgid "As check _pattern"
msgstr "Como a_xadrezado"
-#: ../src/f-spot.glade.h:26
-msgid "Attach Tags:"
-msgstr "Anexar etiquetas:"
-
-#: ../src/f-spot.glade.h:27
-msgid "Attach tag:"
-msgstr "Anexar etiqueta:"
-
-#: ../src/f-spot.glade.h:29
-msgid "CD"
-msgstr "CD"
-
-#: ../src/f-spot.glade.h:30
+#: ../src/f-spot.glade.h:21
msgid "C_ontrast:"
msgstr "C_ontraste:"
-#: ../src/f-spot.glade.h:31
-msgid "Camera Selection"
-msgstr "Selección de cámara"
-
-#: ../src/f-spot.glade.h:32
-msgid "Copy files to the Photos folder"
-msgstr "Copiar ficheiros no cartafol de fotos"
+#: ../src/f-spot.glade.h:22
+msgid "C_reate"
+msgstr "_Crear"
-#: ../src/f-spot.glade.h:33
+#: ../src/f-spot.glade.h:23
msgid "Create Mail"
msgstr "Crear un correo"
-#: ../src/f-spot.glade.h:34
+#: ../src/f-spot.glade.h:24
msgid "Create _icon for this tag when first used"
msgstr "Crear _icona para esta etiqueta cando se empregue por primeira vez"
-#: ../src/f-spot.glade.h:35
+#: ../src/f-spot.glade.h:25
msgid "Create a mail with the selected photos (possibly resized) attached"
msgstr ""
"Crear un correo coas fotos seleccionadas anexadas (probabelmente "
"redimensionadas)"
-#: ../src/f-spot.glade.h:36
-msgid "Detect duplicates"
-msgstr "Detectar duplicacións"
-
-#: ../src/f-spot.glade.h:37
+#: ../src/f-spot.glade.h:26
msgid "Display File _Names"
msgstr "Mostrar os _nomes dos ficheiros"
-#: ../src/f-spot.glade.h:38
+#: ../src/f-spot.glade.h:27
msgid "Display only those photos that were imported in specified Rolls."
msgstr "Mostrar só aquelas fotos que se importaran de carretes específicos."
-#: ../src/f-spot.glade.h:39
+#: ../src/f-spot.glade.h:28
msgid "Do not send a mail"
msgstr "Non enviar un correo"
-#: ../src/f-spot.glade.h:40
-msgid "E-_Mail:"
-msgstr "Enderezo e_lectrónico:"
-
-#: ../src/f-spot.glade.h:41
-msgid "E_xport titles and comments"
-msgstr "E_xportar títulos e comentarios"
-
-#: ../src/f-spot.glade.h:42
+#: ../src/f-spot.glade.h:29
msgid "Estimated new size"
msgstr "Tamaño novo aproximado"
-#: ../src/f-spot.glade.h:44
+#: ../src/f-spot.glade.h:30
msgid "Extra large"
msgstr "Moi grande"
-#: ../src/f-spot.glade.h:45
+#: ../src/f-spot.glade.h:31
msgid "F-Spot View"
msgstr "F-Spot Ver"
-#: ../src/f-spot.glade.h:47
+#: ../src/f-spot.glade.h:32
msgid "Filter on selected rolls"
msgstr "Filtrar os carretes seleccionados"
-#: ../src/f-spot.glade.h:48
-msgid "G_allery:"
-msgstr "G_alería"
-
-#: ../src/f-spot.glade.h:49
-msgid "Gallery"
-msgstr "Galería"
-
-#: ../src/f-spot.glade.h:50 ../src/ImportCommand.cs:547
-#: ../src/MainWindow.cs:267
-msgid "Import"
-msgstr "Importar"
-
-#. Translators: this string means 'source of import'
-#: ../src/f-spot.glade.h:52
-msgid "Import Source:"
-msgstr "Fonte de importación:"
-
-#: ../src/f-spot.glade.h:53
-msgid "Include subfolders"
-msgstr "Incluír subcartafoles"
-
-#: ../src/f-spot.glade.h:54
+#: ../src/f-spot.glade.h:33
msgid "Large"
msgstr "Grande"
-#: ../src/f-spot.glade.h:55
+#: ../src/f-spot.glade.h:34
msgid "Manage your custom selection ratios"
msgstr "Xestionar a selección de proporcións personalizadas"
-#: ../src/f-spot.glade.h:56
+#: ../src/f-spot.glade.h:35
msgid "Medium"
msgstr "Medio"
-#: ../src/f-spot.glade.h:58
+#: ../src/f-spot.glade.h:36
msgid "Number of photos in selected rolls:"
msgstr "Número de fotos dos carretes seleccionados:"
-#: ../src/f-spot.glade.h:59
+#: ../src/f-spot.glade.h:37
msgid "Number of pictures"
msgstr "Número de imaxes"
-#: ../src/f-spot.glade.h:60
+#: ../src/f-spot.glade.h:38
msgid "Open _Folder..."
msgstr "Abrir carta_fol..."
-#: ../src/f-spot.glade.h:62
+#: ../src/f-spot.glade.h:39 ../src/PhotoStore.cs:176
+msgid "Original"
+msgstr "Orixinal"
+
+#: ../src/f-spot.glade.h:40
msgid "Original size (possible very large file size)"
msgstr "Tamaño orixinal (será probabelmente un ficheiro moi grande)"
-#: ../src/f-spot.glade.h:63 ../src/UI.Dialog/ui/EditTagDialog.ui.h:4
+#: ../src/f-spot.glade.h:41 ../src/UI.Dialog/ui/EditTagDialog.ui.h:4
msgid "P_arent Tag:"
msgstr "Etiqueta _asociada:"
-#: ../src/f-spot.glade.h:64
-msgid "Pause"
-msgstr "Pausa"
-
-#: ../src/f-spot.glade.h:65
+#: ../src/f-spot.glade.h:42
msgid "Preferences"
msgstr "Preferencias"
-#: ../src/f-spot.glade.h:66 ../src/ItemAction.cs:123
-msgid "Previous"
-msgstr "Anterior"
-
-#: ../src/f-spot.glade.h:67
+#: ../src/f-spot.glade.h:43
msgid "Repair"
msgstr "Reparar"
-#: ../src/f-spot.glade.h:70
-msgid "Select Photos to Copy From Camera..."
-msgstr "Seleccionar as fotos que se van copiar da cámara..."
-
-#: ../src/f-spot.glade.h:71
+#: ../src/f-spot.glade.h:46
msgid "Select a Tag..."
msgstr "Seleccionar etiqueta..."
-#: ../src/f-spot.glade.h:72
-msgid "Select the camera from which you want to transfer files"
-msgstr "Seleccione a cámara desde a que quere transferir os ficheiros"
-
-#: ../src/f-spot.glade.h:73
-msgid "Selected Camera: "
-msgstr "Cámara seleccionada: "
-
-#: ../src/f-spot.glade.h:74
+#: ../src/f-spot.glade.h:47
msgid "Selection Constraints"
msgstr "Restricións de selección"
-#: ../src/f-spot.glade.h:75 ../src/ui/main_window.ui.h:21
+#: ../src/f-spot.glade.h:48 ../src/ui/main_window.ui.h:22
msgid "Set as _Background"
msgstr "Estabelecer como _fondo"
-#: ../src/f-spot.glade.h:76
+#: ../src/f-spot.glade.h:49
msgid "Show all photos."
msgstr "Mostrar todas as fotos."
-#: ../src/f-spot.glade.h:77
+#: ../src/f-spot.glade.h:50
msgid "Show or hide the side pane"
msgstr "Mostrar ou ocultar o panel lateral"
-#: ../src/f-spot.glade.h:78
+#: ../src/f-spot.glade.h:51
msgid "Show or hide the toolbar"
msgstr "Mostrar ou ocultar a barra de ferramentas"
-#: ../src/f-spot.glade.h:79
+#: ../src/f-spot.glade.h:52
msgid "Side _pane"
msgstr "_Panel lateral"
-#: ../src/f-spot.glade.h:80
+#: ../src/f-spot.glade.h:53
msgid "Small"
msgstr "Pequeno"
-#: ../src/f-spot.glade.h:81
+#: ../src/f-spot.glade.h:54
msgid ""
"Specify if an original size picture should be rotated or not. Smaller sizes "
"are automatically rotated."
@@ -2192,141 +2028,105 @@ msgstr ""
"Especificar se unha foto a tamaño orixinal debe rotarse ou non. Os tamaños "
"máis pequenos son rotados de forma automática."
-#: ../src/f-spot.glade.h:82
-msgid "Strip image _metadata"
-msgstr "Quitar os _metadatos da imaxe"
-
#. Note for translators: meant as Temperature
-#: ../src/f-spot.glade.h:84
+#: ../src/f-spot.glade.h:56
msgid "Te_mp:"
msgstr "Te_mperatura:"
-#: ../src/f-spot.glade.h:85
+#: ../src/f-spot.glade.h:57
msgid "Tiny"
msgstr "Minúsculo"
-#: ../src/f-spot.glade.h:86
+#: ../src/f-spot.glade.h:58
msgid "Total original size"
msgstr "Tamaño orixinal total"
-#: ../src/f-spot.glade.h:87 ../src/ui/main_window.ui.h:28
+#: ../src/f-spot.glade.h:59 ../src/ui/main_window.ui.h:29
msgid "Zoom _in"
msgstr "Ampl_iar"
-#: ../src/f-spot.glade.h:88 ../src/ui/main_window.ui.h:29
+#: ../src/f-spot.glade.h:60 ../src/ui/main_window.ui.h:30
msgid "Zoom _out"
msgstr "Red_ucir"
-#: ../src/f-spot.glade.h:89 ../src/ui/main_window.ui.h:30
+#: ../src/f-spot.glade.h:61 ../src/ui/main_window.ui.h:31
msgid "Zoom in"
msgstr "Ampliar"
-#: ../src/f-spot.glade.h:90 ../src/ui/main_window.ui.h:31
+#: ../src/f-spot.glade.h:62 ../src/ui/main_window.ui.h:32
msgid "Zoom out"
msgstr "Reducir"
-#: ../src/f-spot.glade.h:91
+#: ../src/f-spot.glade.h:63
msgid "_Brightness:"
msgstr "_Brillo:"
-#: ../src/f-spot.glade.h:93
+#: ../src/f-spot.glade.h:64
msgid "_Create Mail"
msgstr "_Crear correo electrónico"
-#: ../src/f-spot.glade.h:94 ../src/ui/main_window.ui.h:44
+#: ../src/f-spot.glade.h:65 ../src/ui/main_window.ui.h:45
msgid "_Edit"
msgstr "_Editar"
-#: ../src/f-spot.glade.h:98
+#: ../src/f-spot.glade.h:67
msgid "_Exposure:"
msgstr "_Exposición:"
-#: ../src/f-spot.glade.h:99
-msgid "_Flickr"
-msgstr "_Flickr"
-
-#: ../src/f-spot.glade.h:100 ../src/ui/main_window.ui.h:48
+#: ../src/f-spot.glade.h:68 ../src/ui/main_window.ui.h:49
msgid "_Fullscreen"
msgstr "_Pantalla completa"
-#: ../src/f-spot.glade.h:101
-msgid "_Gallery"
-msgstr "_Galería"
-
-#: ../src/f-spot.glade.h:102 ../src/ui/main_window.ui.h:49
+#: ../src/f-spot.glade.h:69 ../src/ui/main_window.ui.h:50
msgid "_Help"
msgstr "_Axuda"
-#: ../src/f-spot.glade.h:103
+#: ../src/f-spot.glade.h:70
msgid "_Hue:"
msgstr "_Matiz:"
-#: ../src/f-spot.glade.h:104
+#: ../src/f-spot.glade.h:71
msgid "_Interpolate image on zoom"
msgstr "_Interpolar imaxe con zoom"
-#: ../src/f-spot.glade.h:105
+#: ../src/f-spot.glade.h:72
msgid "_New Window"
msgstr "_Nova xanela"
-#: ../src/f-spot.glade.h:106
-msgid "_Open album in browser when done uploading"
-msgstr "A_brir o álbum nun navegador ao terminar de cargalo"
-
-#: ../src/f-spot.glade.h:107
-msgid "_Open destination when done exporting"
-msgstr "A_brir o destino ao acabar de exportar"
-
-#: ../src/f-spot.glade.h:108 ../src/ui/main_window.ui.h:56
+#: ../src/f-spot.glade.h:73 ../src/ui/main_window.ui.h:58
msgid "_Photo"
msgstr "F_oto"
-#: ../src/f-spot.glade.h:110
+#: ../src/f-spot.glade.h:74
msgid "_Saturation:"
msgstr "_Saturación:"
-#: ../src/f-spot.glade.h:111
-msgid "_Scale photos to no larger than: "
-msgstr "E_scalar fotos maiores que: "
-
-#: ../src/f-spot.glade.h:112 ../src/ui/main_window.ui.h:67
+#: ../src/f-spot.glade.h:75 ../src/ui/main_window.ui.h:69
msgid "_Slideshow"
msgstr "_Presentación"
-#: ../src/f-spot.glade.h:113
-msgid "_Strip metadata"
-msgstr "Quitar metadato_s"
-
-#: ../src/f-spot.glade.h:114 ../src/UI.Dialog/ui/EditTagDialog.ui.h:6
+#: ../src/f-spot.glade.h:76 ../src/UI.Dialog/ui/EditTagDialog.ui.h:6
msgid "_Tag Name:"
msgstr "E_tiquetar nome:"
-#: ../src/f-spot.glade.h:115
+#: ../src/f-spot.glade.h:77
msgid "_Tint:"
msgstr "_Ton:"
-#: ../src/f-spot.glade.h:116
+#: ../src/f-spot.glade.h:78
msgid "_Toolbar"
msgstr "Barra de ferramen_tas"
-#: ../src/f-spot.glade.h:117
-msgid "_URI:"
-msgstr "_URL:"
-
-#: ../src/f-spot.glade.h:118 ../src/ui/main_window.ui.h:75
+#: ../src/f-spot.glade.h:79 ../src/ui/main_window.ui.h:77
msgid "_View"
msgstr "_Ver"
-#: ../src/f-spot.glade.h:119
-msgid "_Virtual Filesystem"
-msgstr "Sistema de ficheiros _virtual"
-
-#: ../src/f-spot.glade.h:120 ../src/Widgets/FindBar.cs:177
+#: ../src/f-spot.glade.h:80 ../src/Widgets/FindBar.cs:178
msgid "and"
msgstr "e"
#. at, or after a date, or between dates
-#: ../src/f-spot.glade.h:122
+#: ../src/f-spot.glade.h:82
msgid ""
"at\n"
"after\n"
@@ -2336,40 +2136,36 @@ msgstr ""
"despois\n"
"entre"
-#: ../src/f-spot.glade.h:126
-msgid "x"
-msgstr "x"
-
-#: ../src/FullScreenView.cs:58
+#: ../src/FullScreenView.cs:59
msgid "Hide"
msgstr "Ocultar"
-#: ../src/FullScreenView.cs:60
+#: ../src/FullScreenView.cs:61
msgid "Hide Toolbar"
msgstr "Ocultar a barra de ferramentas"
-#: ../src/FullScreenView.cs:66
+#: ../src/FullScreenView.cs:67
msgid "Info"
msgstr "Información"
-#: ../src/FullScreenView.cs:68 ../src/Widgets/InfoBox.cs:200
+#: ../src/FullScreenView.cs:69 ../src/Widgets/InfoBox.cs:202
msgid "Image Information"
msgstr "Información da imaxe"
-#: ../src/FullScreenView.cs:73
+#: ../src/FullScreenView.cs:74
msgid "Exit fullscreen"
msgstr "Saír do modo pantalla completa"
-#: ../src/FullScreenView.cs:81 ../src/MainWindow.cs:307
-#: ../src/SingleView.cs:101
+#: ../src/FullScreenView.cs:82 ../src/MainWindow.cs:313
+#: ../src/SingleView.cs:87
msgid "Slideshow"
msgstr "Presentación"
-#: ../src/FullScreenView.cs:82
+#: ../src/FullScreenView.cs:83
msgid "Start slideshow"
msgstr "Comezar a presentación"
-#: ../src/FullScreenView.cs:128
+#: ../src/FullScreenView.cs:129
msgid "Slide transition:"
msgstr "Transición das imaxes:"
@@ -2381,35 +2177,35 @@ msgstr "Máis datas"
msgid "More"
msgstr "Máis"
-#: ../src/GroupSelector.cs:517 ../src/ui/main_window.ui.h:34
+#: ../src/GroupSelector.cs:530 ../src/ui/main_window.ui.h:35
msgid "_Clear Date Range"
msgstr "_Limpar o intervalo de datas"
-#: ../src/Imaging/Exif.cs:228
+#: ../src/Imaging/Exif.cs:229
msgid "Image Directory"
msgstr "Directorio de imaxes"
-#: ../src/Imaging/Exif.cs:230
+#: ../src/Imaging/Exif.cs:231
msgid "Thumbnail Directory"
msgstr "Directorio de miniaturas"
-#: ../src/Imaging/Exif.cs:232
+#: ../src/Imaging/Exif.cs:233
msgid "Exif Directory"
msgstr "Directorio EXIF"
-#: ../src/Imaging/Exif.cs:234
+#: ../src/Imaging/Exif.cs:235
msgid "GPS Directory"
msgstr "Directorio GPS"
-#: ../src/Imaging/Exif.cs:236
+#: ../src/Imaging/Exif.cs:237
msgid "InterOperability Directory"
msgstr "Directorio de interoperabilidade"
-#: ../src/Imaging/Exif.cs:238
+#: ../src/Imaging/Exif.cs:239
msgid "Unknown Directory"
msgstr "Directorio descoñecido"
-#: ../src/Imaging/ImageFile.cs:116
+#: ../src/Imaging/ImageFile.cs:119
msgid "Writing to this file format is not supported"
msgstr "Non se soporta a escritura neste formato de ficheiro"
@@ -2548,42 +2344,12 @@ msgstr "Xénero intelectual do obxecto"
msgid "Unknown IIM DataSet"
msgstr "Conxunto de datos IIM descoñecido"
-#: ../src/ImportCommand.cs:48 ../src/SingleView.cs:357
-msgid "Select Folder"
-msgstr "Seleccionar cartafol"
-
-#: ../src/ImportCommand.cs:259
-msgid "(No Cameras Detected)"
-msgstr "(Non se detectou ningunha cámara)"
-
-#: ../src/ImportCommand.cs:404
-#, csharp-format
-msgid "Loading {0} of {1}"
-msgstr "Descargando {0} de {1}"
-
-#: ../src/ImportCommand.cs:470
-msgid "Done Loading"
-msgstr "Descarga completa"
-
-#: ../src/ImportCommand.cs:684
-msgid "Directory does not exist."
-msgstr "O directorio non existe."
-
-#: ../src/ImportCommand.cs:685
-#, csharp-format
-msgid ""
-"The directory you selected \"{0}\" does not exist. Please choose a "
-"different directory"
-msgstr ""
-"O directorio seleccionado \"{0}\" non existe. Elixa un directorio diferente"
-
-#. Note for translators: 'Import Tags' is no command, it means 'Tags used in Import'
-#: ../src/ImportCommand.cs:739 ../src/ImportCommand.cs:741
+#: ../src/Import/ImportController.cs:410 ../src/Import/ImportController.cs:412
#: ../src/XmpTagsImporter.cs:89
-msgid "Import Tags"
+msgid "Imported Tags"
msgstr "Importar etiquetas"
-#: ../src/ItemAction.cs:79 ../src/MainWindow.cs:274 ../src/SingleView.cs:84
+#: ../src/ItemAction.cs:79 ../src/MainWindow.cs:280 ../src/SingleView.cs:70
msgid "Rotate Left"
msgstr "Rotar á esquerda"
@@ -2591,7 +2357,7 @@ msgstr "Rotar á esquerda"
msgid "Rotate picture left"
msgstr "Rotar a foto cara á esquerda"
-#: ../src/ItemAction.cs:91 ../src/MainWindow.cs:278 ../src/SingleView.cs:89
+#: ../src/ItemAction.cs:91 ../src/MainWindow.cs:284 ../src/SingleView.cs:75
msgid "Rotate Right"
msgstr "Rotar á dereita"
@@ -2603,80 +2369,75 @@ msgstr "Rotar a foto cara á dereita"
msgid "Next picture"
msgstr "Foto seguinte"
+#: ../src/ItemAction.cs:123
+msgid "Previous"
+msgstr "Anterior"
+
#: ../src/ItemAction.cs:124
msgid "Previous picture"
msgstr "Foto anterior"
-#: ../src/MainWindow.cs:269
+#: ../src/MainWindow.cs:273 ../src/UI.Dialog/ImportDialog.cs:171
+msgid "Import"
+msgstr "Importar"
+
+#: ../src/MainWindow.cs:275
msgid "Import new images"
msgstr "Importar imaxes novas"
-#: ../src/MainWindow.cs:285 ../src/ui/main_window.ui.h:3
+#: ../src/MainWindow.cs:291 ../src/ui/main_window.ui.h:3
msgid "Browse"
msgstr "Examinar"
-#: ../src/MainWindow.cs:289
+#: ../src/MainWindow.cs:295
msgid "Browse many photos simultaneously"
msgstr "Examinar varias fotos de forma simultánea"
-#: ../src/MainWindow.cs:293
+#: ../src/MainWindow.cs:299
msgid "Edit Image"
msgstr "Editar imaxe"
-#: ../src/MainWindow.cs:297
+#: ../src/MainWindow.cs:303
msgid "View and edit a photo"
msgstr "Ver e editar unha foto"
-#: ../src/MainWindow.cs:302 ../src/SingleView.cs:96
+#: ../src/MainWindow.cs:308 ../src/SingleView.cs:82
msgid "Fullscreen"
msgstr "Pantalla completa"
-#: ../src/MainWindow.cs:304 ../src/SingleView.cs:98
+#: ../src/MainWindow.cs:310 ../src/SingleView.cs:84
msgid "View photos fullscreen"
msgstr "Ver as fotos en pantalla completa"
-#: ../src/MainWindow.cs:309 ../src/SingleView.cs:103
+#: ../src/MainWindow.cs:315 ../src/SingleView.cs:89
msgid "View photos in a slideshow"
msgstr "Ver as fotos nunha presentación"
-#: ../src/MainWindow.cs:324
+#: ../src/MainWindow.cs:330
msgid "Previous photo"
msgstr "Foto anterior"
-#: ../src/MainWindow.cs:329
+#: ../src/MainWindow.cs:335
msgid "Next photo"
msgstr "Foto seguinte"
-#: ../src/MainWindow.cs:1488
-msgid "No cameras detected."
-msgstr "Non se detectou ningunha cámara."
-
-#: ../src/MainWindow.cs:1489
-msgid ""
-"F-Spot was unable to find any cameras attached to this system. Double check "
-"that the camera is connected and has power"
-msgstr ""
-"F-Spot non foi capaz de encontrar ningunha cámara conectada a este sistema. "
-"Comprobe de novo que a cámara está ben conectada e acendida"
-
-#: ../src/MainWindow.cs:1528
-msgid "Error connecting to camera"
-msgstr "Erro ao conectar a cámara"
+#: ../src/MainWindow.cs:412
+msgid "Show _Find Bar"
+msgstr "M_ostrar a barra de busca"
-#: ../src/MainWindow.cs:1529
-#, csharp-format
-msgid "Received error \"{0}\" while connecting to camera"
-msgstr "Recibiuse o erro \"{0}\" mentres se conectaba a cámara"
+#: ../src/MainWindow.cs:415
+msgid "Hide _Find Bar"
+msgstr "_Ocultar a barra de busca"
#. Translators, The singular case will never happen here.
-#: ../src/MainWindow.cs:1815
+#: ../src/MainWindow.cs:1719
#, csharp-format
msgid "Merge the selected tag"
msgid_plural "Merge the {0} selected tags?"
msgstr[0] "Combinar a etiqueta seleccionada"
msgstr[1] "Combinar as {0} etiquetas seleccionadas?"
-#: ../src/MainWindow.cs:1842
+#: ../src/MainWindow.cs:1746
msgid ""
"This operation will merge the selected tags and any sub-tags into a single "
"tag."
@@ -2684,57 +2445,57 @@ msgstr ""
"Esta operación combinará nunha única etiqueta todas as etiquetas "
"seleccionadas e calquera subetiqueta."
-#: ../src/MainWindow.cs:1844
+#: ../src/MainWindow.cs:1748
msgid "_Merge Tags"
msgstr "C_ombinar etiquetas"
-#: ../src/MainWindow.cs:2049
+#: ../src/MainWindow.cs:1953
#, csharp-format
msgid "{0} Photo out of {1}"
msgid_plural "{0} Photos out of {1}"
msgstr[0] "Foto {0} de {1}"
msgstr[1] "Fotos {0} de {1}"
-#: ../src/MainWindow.cs:2051 ../src/SingleView.cs:493
+#: ../src/MainWindow.cs:1955 ../src/SingleView.cs:465
#, csharp-format
msgid "{0} Photo"
msgid_plural "{0} Photos"
msgstr[0] "{0} Foto"
msgstr[1] "{0} Fotos"
-#: ../src/MainWindow.cs:2054
+#: ../src/MainWindow.cs:1958
#, csharp-format
msgid " ({0} selected)"
msgid_plural " ({0} selected)"
msgstr[0] " ({0} seleccionada)"
msgstr[1] " ({0} seleccionadas)"
-#: ../src/MainWindow.cs:2135
+#: ../src/MainWindow.cs:2039
msgid "_Ok"
msgstr "_Aceptar"
-#: ../src/MainWindow.cs:2136
+#: ../src/MainWindow.cs:2040
msgid "Error Deleting Picture"
msgstr "Erro ao eliminar a foto"
-#: ../src/MainWindow.cs:2141
+#: ../src/MainWindow.cs:2045
#, csharp-format
msgid "No permission to delete the file:{1}{0}"
msgstr "Non ten os permisos para eliminar o ficheiro:{1}{0}"
-#: ../src/MainWindow.cs:2145
+#: ../src/MainWindow.cs:2049
#, csharp-format
msgid "An error of type {0} occurred while deleting the file:{2}{1}"
msgstr "Ocorreu un erro de tipo {0} ao eliminar o ficheiro:{2}{1}"
-#: ../src/MainWindow.cs:2177
+#: ../src/MainWindow.cs:2081
#, csharp-format
msgid "Delete the selected photo permanently?"
msgid_plural "Delete the {0} selected photos permanently?"
msgstr[0] "Eliminar a foto seleccionada de forma permanente?"
msgstr[1] "Eliminar as {0} fotos seleccionadas de forma permanente?"
-#: ../src/MainWindow.cs:2181
+#: ../src/MainWindow.cs:2085
msgid "This deletes all versions of the selected photo from your drive."
msgid_plural ""
"This deletes all versions of the selected photos from your drive."
@@ -2745,20 +2506,20 @@ msgstr[1] ""
"Con isto eliminaranse do seu dispositivo todas as versións das fotos "
"seleccionadas."
-#: ../src/MainWindow.cs:2184
+#: ../src/MainWindow.cs:2088
msgid "_Delete photo"
msgid_plural "_Delete photos"
msgstr[0] "E_liminar foto"
msgstr[1] "E_liminar fotos"
-#: ../src/MainWindow.cs:2220
+#: ../src/MainWindow.cs:2124
#, csharp-format
msgid "Remove the selected photo from F-Spot?"
msgid_plural "Remove the {0} selected photos from F-Spot?"
msgstr[0] "Eliminar do F-Spot a foto seleccionada?"
msgstr[1] "Eliminar do F-Spot as {0} fotos seleccionadas?"
-#: ../src/MainWindow.cs:2225
+#: ../src/MainWindow.cs:2129
msgid ""
"If you remove photos from the F-Spot catalog all tag information will be "
"lost. The photos remain on your computer and can be imported into F-Spot "
@@ -2768,27 +2529,27 @@ msgstr ""
"etiquetas. As fotos permanecerán no seu computador e vostede poderá "
"importalas de novo cando queira."
-#: ../src/MainWindow.cs:2226
+#: ../src/MainWindow.cs:2130
msgid "_Remove from Catalog"
msgstr "E_liminar do catálogo"
-#: ../src/MainWindow.cs:2289
+#: ../src/MainWindow.cs:2199
#, csharp-format
msgid "Delete tag \"{0}\"?"
-msgstr "Eliminar a etiqueta \"{0}\"?"
+msgstr "Eliminar a etiqueta «{0}»?"
-#: ../src/MainWindow.cs:2291
+#: ../src/MainWindow.cs:2201
#, csharp-format
msgid "Delete the {0} selected tags?"
msgstr "Eliminar as {0} etiquetas seleccionadas?"
-#: ../src/MainWindow.cs:2296
+#: ../src/MainWindow.cs:2206
msgid "photo"
msgid_plural "photos"
msgstr[0] "foto"
msgstr[1] "fotos"
-#: ../src/MainWindow.cs:2298
+#: ../src/MainWindow.cs:2208
#, csharp-format
msgid "If you delete this tag, the association with {0} {1} will be lost."
msgid_plural ""
@@ -2796,59 +2557,59 @@ msgid_plural ""
msgstr[0] "Se elimina esta etiqueta, perderase a asociación con {0} {1}."
msgstr[1] "Se elimina estas etiquetas, perderase a asociación con {0} {1}."
-#: ../src/MainWindow.cs:2303
+#: ../src/MainWindow.cs:2213
msgid "_Delete tag"
msgid_plural "_Delete tags"
msgstr[0] "_Eliminar etiqueta"
msgstr[1] "_Eliminar etiquetas"
#. A Category is not empty. Can not delete it.
-#: ../src/MainWindow.cs:2317
+#: ../src/MainWindow.cs:2227
msgid "Tag is not empty"
msgstr "A etiqueta non está baleira"
-#: ../src/MainWindow.cs:2318
+#: ../src/MainWindow.cs:2228
#, csharp-format
msgid ""
"Can not delete tags that have tags within them. Please delete tags under "
"\"{0}\" first"
msgstr ""
"Non se poden eliminar as etiquetas que conteñen outras etiquetas. Elimine "
-"primeiro as etiquetas debaixo de \"{0}\""
+"primeiro as etiquetas debaixo de «{0}»"
-#: ../src/MainWindow.cs:2750
+#: ../src/MainWindow.cs:2659
msgid "Rotate selected photo left"
msgid_plural "Rotate selected photos left"
msgstr[0] "Rotar cara á esquerda a foto seleccionada"
msgstr[1] "Rotar cara á esquerda as fotos seleccionadas"
-#: ../src/MainWindow.cs:2763
+#: ../src/MainWindow.cs:2672
msgid "Rotate selected photo right"
msgid_plural "Rotate selected photos right"
msgstr[0] "Rotar cara á dereita a foto seleccionada"
msgstr[1] "Rotar cara á dereita as fotos seleccionadas"
-#: ../src/MainWindow.cs:2774
+#: ../src/MainWindow.cs:2683
#, csharp-format
msgid "Find _Selected Tag"
msgid_plural "Find _Selected Tags"
msgstr[0] "Encontrar etiqueta _seleccionada"
msgstr[1] "Encontrar etiquetas _seleccionadas"
-#: ../src/MainWindow.cs:2778
+#: ../src/MainWindow.cs:2687
#, csharp-format
msgid "Find Selected Tag _With"
msgid_plural "Find Selected Tags _With"
msgstr[0] "Encontrar a eti_queta seleccionada con"
msgstr[1] "Encontrar as eti_quetas seleccionadas con"
-#: ../src/MainWindow.cs:2819
+#: ../src/MainWindow.cs:2728
msgid "Create New Version?"
msgid_plural "Create New Versions?"
msgstr[0] "Crear unha versión nova?"
msgstr[1] "Crear versións novas?"
-#: ../src/MainWindow.cs:2821
+#: ../src/MainWindow.cs:2730
#, csharp-format
msgid ""
"Before launching {1}, should F-Spot create a new version of the selected "
@@ -2863,7 +2624,7 @@ msgstr[1] ""
"Antes de iniciar {1}, quere que F-Spot cree versións novas das fotos "
"seleccionadas para conservar as orixinais?"
-#: ../src/MainWindow.cs:2843
+#: ../src/MainWindow.cs:2752
msgid "XCF version"
msgstr "Versión de XCF"
@@ -2887,93 +2648,99 @@ msgstr "Tema e palabras chave"
msgid "Compression"
msgstr "Compresión"
-#: ../src/MetadataStore.cs:25
+#. Translators: Planar Configuration is the label for the tiff:PlanarConfiguration tag
+#. "when Planar Configuration=1, this implies that all components must have
+#. the same BitsPerSample value; when Planar Configuration=2, different
+#. components could have different bit depths."
+#: ../src/MetadataStore.cs:29
msgid "Planar Configuration"
msgstr "Configuración planar"
-#: ../src/MetadataStore.cs:27
+#: ../src/MetadataStore.cs:31
msgid "Orientation"
msgstr "Orientación"
-#: ../src/MetadataStore.cs:29
+#: ../src/MetadataStore.cs:33
msgid "Photometric Interpretation"
msgstr "Interpretación fotométrica"
-#: ../src/MetadataStore.cs:31
+#: ../src/MetadataStore.cs:35
msgid "Resolution Unit"
msgstr "Unidade de resolución"
-#: ../src/MetadataStore.cs:33
+#: ../src/MetadataStore.cs:37
msgid "Exposure Program"
msgstr "Programa de exposición"
-#: ../src/MetadataStore.cs:35
+#: ../src/MetadataStore.cs:39
msgid "Metering Mode"
msgstr "Modo de medida"
-#: ../src/MetadataStore.cs:37
+#: ../src/MetadataStore.cs:41
msgid "Exposure Mode"
msgstr "Modo de exposición"
-#: ../src/MetadataStore.cs:39
+#: ../src/MetadataStore.cs:43
msgid "Custom Rendered"
msgstr "Renderización personalizada"
-#: ../src/MetadataStore.cs:41
+#: ../src/MetadataStore.cs:45
msgid "Components Configuration"
msgstr "Configuración de compoñentes"
-#: ../src/MetadataStore.cs:43
+#: ../src/MetadataStore.cs:47
msgid "Light Source"
msgstr "Fonte de luz"
-#: ../src/MetadataStore.cs:45
+#: ../src/MetadataStore.cs:49
msgid "Sensing Method"
msgstr "Método de detección"
-#: ../src/MetadataStore.cs:47
+#: ../src/MetadataStore.cs:51
msgid "Color Space"
msgstr "Espazo de cor"
-#: ../src/MetadataStore.cs:49
+#: ../src/MetadataStore.cs:53
msgid "White Balance"
msgstr "Balance de brancos"
-#: ../src/MetadataStore.cs:51
+#: ../src/MetadataStore.cs:55
msgid "Focal Plane Resolution Unit"
msgstr "Unidade de resolución do plano focal"
-#: ../src/MetadataStore.cs:53
+#: ../src/MetadataStore.cs:57
msgid "File Source Type"
msgstr "Tipo de orixe do ficheiro"
-#: ../src/MetadataStore.cs:55
+#: ../src/MetadataStore.cs:59
msgid "Scene Capture Type"
msgstr "Tipo de captura da escena"
-#: ../src/MetadataStore.cs:57
+#. Translators: Gain Control is the label for the exif:GainControl tag
+#. "This tag indicates the degree of overall image gain adjustment."
+#: ../src/MetadataStore.cs:63
msgid "Gain Control"
msgstr "Control de ganancia"
-#: ../src/MetadataStore.cs:59
+#: ../src/MetadataStore.cs:65
msgid "Contrast"
msgstr "Contraste"
-#: ../src/MetadataStore.cs:61
+#: ../src/MetadataStore.cs:67
msgid "Saturation"
msgstr "Saturación"
-#: ../src/MetadataStore.cs:63
+#: ../src/MetadataStore.cs:69
msgid "Sharpness"
msgstr "Nitidez"
-#: ../src/MetadataStore.cs:65
+#: ../src/MetadataStore.cs:71
msgid "Scene Type"
msgstr "Tipo de escena"
#. Fixme this should really set parent menu
#. items insensitve
-#: ../src/PhotoTagMenu.cs:74
+#: ../src/PhotoTagMenu.cs:62
msgid "(No Tags)"
msgstr "(Sen etiquetas)"
@@ -2993,71 +2760,70 @@ msgstr "Renomear a versión"
msgid "New name:"
msgstr "Nome novo:"
-#: ../src/PhotoVersionCommands.cs:110
-msgid "Could not create a new version"
-msgstr "Non se puido crear unha versión nova"
-
-#: ../src/PhotoVersionCommands.cs:111
-#, csharp-format
-msgid "Received exception \"{0}\". Unable to create version \"{1}\""
-msgstr "Recibiuse a excepción \"{0}\". Non é posíbel crear a versión \"{1}\""
-
-#: ../src/PhotoVersionCommands.cs:138
-msgid "Really Delete?"
-msgstr "Está seguro de que quere eliminala?"
-
-#: ../src/PhotoVersionCommands.cs:139
-msgid "Cancel"
-msgstr "Cancelar"
-
-#: ../src/PhotoVersionCommands.cs:140
+#: ../src/PhotoVersionCommands.cs:123
msgid "Delete"
msgstr "Eliminar"
-#: ../src/PhotoVersionCommands.cs:144
+#: ../src/PhotoVersionCommands.cs:124
#, csharp-format
msgid "Really delete version \"{0}\"?"
-msgstr "Está seguro de que quere eliminar a versión \"{0}\"?"
+msgstr "Está seguro de que quere eliminar a versión «{0}»?"
-#: ../src/PhotoVersionCommands.cs:154
-msgid "Could not delete a version"
-msgstr "Non se puido eliminar a versión"
+#: ../src/PhotoVersionCommands.cs:125
+msgid "This removes the version and deletes the corresponding file from disk."
+msgstr "Isto quita a versión e elimina o ficheiro correspondente do disco."
-#: ../src/PhotoVersionCommands.cs:155
+#: ../src/PhotoVersionCommands.cs:170
+msgid "De_tach"
+msgstr "De_sacoplar"
+
+#: ../src/PhotoVersionCommands.cs:171
#, csharp-format
-msgid "Received exception \"{0}\". Unable to delete version \"{1}\""
+msgid "Really detach version \"{0}\" from \"{1}\"?"
+msgstr "Está seguro de que quere desacoplar a versión «{0}» de «{1}»?"
+
+#: ../src/PhotoVersionCommands.cs:172
+msgid ""
+"This makes the version appear as a separate photo in the library. To undo, "
+"drag the new photo back to its parent."
msgstr ""
-"Recibiuse a excepción \"{0}\". Non é posíbel eliminar a versión \"{1}\""
+"Isto fai que a versión apareza como unha foto separada na biblioteca. Para "
+"desfacelo, arrastre de novo a foto nova no seu pai."
-#: ../src/PhotoVersionCommands.cs:196
-msgid "Could not rename a version"
-msgstr "Non se puido renomear a versión"
+#: ../src/PhotoVersionCommands.cs:194
+msgid "Re_parent"
+msgstr "Reasociada"
-#: ../src/PhotoVersionCommands.cs:197
+#: ../src/PhotoVersionCommands.cs:195
#, csharp-format
-msgid "Received exception \"{0}\". Unable to rename version to \"{1}\""
-msgstr "Recibiuse a excepción \"{0}\". Non foi posíbel renomear como \"{1}\""
-
-#: ../src/PhotoVersionMenu.cs:66 ../src/Widgets/InfoBox.cs:562
-#: ../src/Widgets/InfoBox.cs:564
-msgid "(No Edits)"
-msgstr "(Sen editar)"
+msgid "Really reparent \"{0}\" as version of \"{1}\"?"
+msgid_plural "Really reparent {2} photos as versions of \"{1}\"?"
+msgstr[0] "Ten certeza que quere restructurar «{2}» como versión de «{1}»?"
+msgstr[1] "Ten certeza que quere restructurar {2} fotos como versións de «{1}»?"
-#: ../src/PhotoView.cs:167 ../src/UI.Dialog/EditExceptionDialog.cs:38
-msgid "Error editing photo"
-msgstr "Erro ao editar a foto"
+#: ../src/PhotoVersionCommands.cs:198
+msgid ""
+"This makes the photos appear as a single one in the library. The versions "
+"can be detached using the Photo menu."
+msgstr ""
+"Isto fai que as fotos aparezan como unha soa na biblioteca. As versións "
+"pódense desacoplar usando o menú «Foto»."
-#: ../src/PhotoView.cs:168 ../src/Sharpener.cs:73
-#: ../src/UI.Dialog/EditExceptionDialog.cs:25
+#: ../src/PhotoVersionCommands.cs:238
#, csharp-format
-msgid "Received exception \"{0}\". Unable to save photo {1}"
-msgstr "Recibiuse a excepción \"{0}\". Non se pode gardar a foto {1}"
+msgid "Received exception \"{0}\"."
+msgstr "Recibiuse a excepción «{0}»."
+
+#: ../src/PhotoVersionMenu.cs:66 ../src/Widgets/InfoBox.cs:566
+#: ../src/Widgets/InfoBox.cs:568
+msgid "(No Edits)"
+msgstr "(Sen editar)"
-#: ../src/PhotoView.cs:356
+#: ../src/PhotoView.cs:339
msgid "Comment:"
msgstr "Comentario:"
-#: ../src/Preferences.cs:149
+#: ../src/Preferences.cs:152
msgid "Photos"
msgstr "Fotos"
@@ -3065,72 +2831,64 @@ msgstr "Fotos"
msgid "Image Settings"
msgstr "Parámetros da imaxe"
-#: ../src/QueryWidget.cs:58
+#: ../src/QueryWidget.cs:55
msgid "Find: "
msgstr "Encontrar: "
-#: ../src/QueryWidget.cs:63
+#: ../src/QueryWidget.cs:60
msgid "Untagged photos"
msgstr "Fotos sen etiquetar"
-#: ../src/QueryWidget.cs:71
+#: ../src/QueryWidget.cs:68
msgid "Rated photos"
msgstr "Fotos puntuadas"
#. Note for translators: 'Import roll' is no command, it means 'Roll that has been imported'
-#: ../src/QueryWidget.cs:80
+#: ../src/QueryWidget.cs:77
msgid "Import roll"
msgstr "Importar carrete"
-#: ../src/QueryWidget.cs:104
+#: ../src/QueryWidget.cs:100
msgid "Clear search"
msgstr "Limpar a busca"
-#: ../src/QueryWidget.cs:111
+#: ../src/QueryWidget.cs:107
msgid "Refresh search"
msgstr "Actualizar a busca"
-#: ../src/QueryWidget.cs:113
+#: ../src/QueryWidget.cs:110
msgid "No matching photos found"
msgstr "Non se encontraron fotos que coincidan"
-#: ../src/QueryWidget.cs:155
-msgid "Hide _Find Bar"
-msgstr "_Ocultar a barra de busca"
-
-#: ../src/QueryWidget.cs:161
-msgid "Show _Find Bar"
-msgstr "M_ostrar a barra de busca"
-
-#: ../src/RotateCommand.cs:96 ../src/RotateCommand.cs:111
+#: ../src/RotateCommand.cs:87 ../src/RotateCommand.cs:102
msgid "Unable to rotate this type of photo"
msgstr "Non foi posíbel rotar este tipo de foto"
-#: ../src/RotateCommand.cs:131
+#: ../src/RotateCommand.cs:122
msgid "Unable to rotate readonly file"
msgstr "Non foi posíbel a rotación, o ficheiro é só de lectura"
-#: ../src/RotateCommand.cs:198
+#: ../src/RotateCommand.cs:185
msgid "Rotating photos"
msgstr "Rotando as fotos"
-#: ../src/RotateCommand.cs:209
+#: ../src/RotateCommand.cs:196
#, csharp-format
msgid "Rotating photo \"{0}\""
-msgstr "Rotando a foto \"{0}\""
+msgstr "Rotando a foto «{0}»"
-#: ../src/RotateCommand.cs:222
+#: ../src/RotateCommand.cs:209
msgid "Directory not found"
msgstr "Non se encontrou o directorio"
-#: ../src/RotateCommand.cs:242
+#: ../src/RotateCommand.cs:229
#, csharp-format
msgid "Unable to rotate photo"
msgid_plural "Unable to rotate {0} photos"
msgstr[0] "Non foi posíbel rotar a foto"
msgstr[1] "Non é posíbel rotar {0} fotos"
-#: ../src/RotateCommand.cs:244
+#: ../src/RotateCommand.cs:231
#, csharp-format
msgid ""
"The photo could not be rotated because it is on a read only file system or "
@@ -3147,42 +2905,47 @@ msgstr[1] ""
"soporte físico (como un CDROM) só de lectura. Comprobe os permisos e ténteo "
"de novo."
-#: ../src/RotateCommand.cs:271
+#: ../src/RotateCommand.cs:258
#, csharp-format
msgid "Received error \"{0}\" while attempting to rotate {1}"
-msgstr "Recibiuse o erro \"{0}\" ao facer a rotación {1}"
+msgstr "Recibiuse o erro «{0}» ao facer a rotación {1}"
-#: ../src/RotateCommand.cs:276
+#: ../src/RotateCommand.cs:263
msgid "Error while rotating photo."
msgstr "Erro ao rotar a foto."
-#: ../src/SendEmail.cs:240
+#: ../src/SendEmail.cs:214
msgid "Preparing email"
msgstr "Preparando un correo"
-#: ../src/SendEmail.cs:292
+#: ../src/SendEmail.cs:266
#, csharp-format
msgid "Exporting picture \"{0}\""
-msgstr "Exportando a imaxe \"{0}\""
+msgstr "Exportando a imaxe «{0}»"
-#: ../src/SendEmail.cs:314
+#: ../src/SendEmail.cs:288
msgid "Error processing image"
msgstr "Erro ao procesar a imaxe"
-#: ../src/SendEmail.cs:315
+#: ../src/SendEmail.cs:289
#, csharp-format
msgid "An error occured while processing \"{0}\": {1}"
-msgstr "Ocorreu un erro ao procesar \"{0}\": {1}"
+msgstr "Ocorreu un erro ao procesar «{0}»: {1}"
#. Send the mail :)
-#: ../src/SendEmail.cs:330
-msgid "my photos"
-msgstr "as miñas fotos"
+#: ../src/SendEmail.cs:303
+msgid "My Photos"
+msgstr "Fotos"
#: ../src/Sharpener.cs:72
msgid "Error saving sharpened photo"
msgstr "Erro ao gardar a foto enfocada"
+#: ../src/Sharpener.cs:73 ../src/UI.Dialog/EditExceptionDialog.cs:26
+#, csharp-format
+msgid "Received exception \"{0}\". Unable to save photo {1}"
+msgstr "Recibiuse a excepción «{0}». Non se pode gardar a foto {1}"
+
#: ../src/Sharpener.cs:102
msgid "Sharpen"
msgstr "Enfocar"
@@ -3199,36 +2962,40 @@ msgstr "Radio:"
msgid "Threshold:"
msgstr "Límite:"
-#: ../src/SingleView.cs:86
+#: ../src/SingleView.cs:72
msgid "Rotate photo left"
msgstr "Rotar foto cara á esquerda"
-#: ../src/SingleView.cs:91
+#: ../src/SingleView.cs:77
msgid "Rotate photo right"
msgstr "Rotar foto cara á dereita"
-#: ../src/SingleView.cs:128
+#: ../src/SingleView.cs:114
msgid "Folder"
msgstr "Cartafol"
-#: ../src/SingleView.cs:354
+#: ../src/SingleView.cs:339
msgid "Open"
msgstr "Abrir"
-#: ../src/SingleView.cs:454
+#: ../src/SingleView.cs:342
+msgid "Select Folder"
+msgstr "Seleccionar cartafol"
+
+#: ../src/SingleView.cs:426
msgid "Set as Background"
msgstr "Estabelecer como fondo"
-#: ../src/TagCommands.cs:96 ../src/TagSelectionWidget.cs:498
-#: ../src/UI.Dialog/EditTagDialog.cs:78
+#: ../src/TagCommands.cs:97 ../src/TagSelectionWidget.cs:491
+#: ../src/UI.Dialog/EditTagDialog.cs:76
msgid "This name is already in use"
msgstr "Este nome xa está sendo utilizado"
-#: ../src/TagCommands.cs:144
+#: ../src/TagCommands.cs:145
msgid "Create New Tag"
msgstr "Crear unha etiqueta nova"
-#: ../src/TagCommands.cs:145
+#: ../src/TagCommands.cs:146
msgid "Name of New Tag:"
msgstr "Nome da etiqueta nova:"
@@ -3239,13 +3006,13 @@ msgid_plural "Find"
msgstr[0] "Buscar"
msgstr[1] "Buscar"
-#: ../src/TagPopup.cs:36 ../src/Widgets/TagMenu.cs:91
+#: ../src/TagPopup.cs:36 ../src/Widgets/TagMenu.cs:98
msgid "Create New Tag..."
msgstr "Crear unha etiqueta nova..."
#: ../src/TagPopup.cs:42
-msgid "Edit Selected Tag..."
-msgstr "Editar a etiqueta seleccionada..."
+msgid "Edit Tag..."
+msgstr "Editar etiqueta"
#: ../src/TagPopup.cs:46
msgid "Delete Tag"
@@ -3272,12 +3039,12 @@ msgstr "Combinar etiquetas"
#: ../src/TagQueryWidget.cs:34
#, csharp-format
msgid "Include Photos Tagged \"{0}\""
-msgstr "Incluír fotos etiquetadas como \"{0}\""
+msgstr "Incluír fotos etiquetadas como «{0}»"
#: ../src/TagQueryWidget.cs:39
#, csharp-format
msgid "Exclude Photos Tagged \"{0}\""
-msgstr "Excluír fotos etiquetadas como \"{0}\""
+msgstr "Excluír fotos etiquetadas como «{0}»"
#: ../src/TagQueryWidget.cs:44
msgid "Remove From Search"
@@ -3294,41 +3061,41 @@ msgstr[1] "E_ncontrar con"
msgid "All"
msgstr "Todo"
-#: ../src/TagQueryWidget.cs:149 ../src/Term.cs:592
+#: ../src/TagQueryWidget.cs:149 ../src/Term.cs:586
#, csharp-format
msgid "Not {0}"
msgstr "{0} non"
-#: ../src/TagQueryWidget.cs:278
+#: ../src/TagQueryWidget.cs:273
msgid "Drag tags here to search for them"
msgstr "Arrastre aquí as etiquetas que queira buscar"
-#: ../src/TagSelectionWidget.cs:497
+#: ../src/TagSelectionWidget.cs:490
msgid "Error renaming tag"
msgstr "Erro ao renomear a etiqueta"
-#: ../src/TagStore.cs:203
+#: ../src/TagStore.cs:204
msgid "Favorites"
msgstr "Favoritos"
-#: ../src/TagStore.cs:208
+#: ../src/TagStore.cs:209
msgid "Hidden"
msgstr "Ocultos"
-#: ../src/TagStore.cs:216
+#: ../src/TagStore.cs:217
msgid "People"
msgstr "Persoas"
-#: ../src/TagStore.cs:221
+#: ../src/TagStore.cs:222
msgid "Places"
msgstr "Lugares"
-#: ../src/TagStore.cs:226
+#: ../src/TagStore.cs:227
msgid "Events"
msgstr "Eventos"
#. The label for the root category is used in new and edit tag dialogs
-#: ../src/TagStore.cs:239 ../src/Widgets/InfoBox.cs:408
+#: ../src/TagStore.cs:240 ../src/Widgets/InfoBox.cs:410
msgid "(None)"
msgstr "(Nada)"
@@ -3348,38 +3115,38 @@ msgstr " ou "
#. OPS The operators we support, case insensitive
#. private static string op_str = "(?'Ops' or | and |, | \\s+ )";
#: ../src/Term.cs:380 ../src/UI.Dialog/ui/DateRangeDialog.ui.h:7
-#: ../src/Widgets/FindBar.cs:177
+#: ../src/Widgets/FindBar.cs:178
msgid "or"
msgstr "ou"
-#: ../src/ThumbnailCommand.cs:20
+#: ../src/ThumbnailCommand.cs:21
msgid "Updating Thumbnails"
msgstr "Actualizando miniaturas"
-#: ../src/ThumbnailCommand.cs:28
+#: ../src/ThumbnailCommand.cs:29
#, csharp-format
msgid "Updating picture \"{0}\""
-msgstr "Actualizando imaxe \"{0}\""
+msgstr "Actualizando imaxe «{0}»"
-#: ../src/UI.Dialog/AboutDialog.cs:76
+#: ../src/UI.Dialog/AboutDialog.cs:94
msgid "Photo management for GNOME"
msgstr "Xestión de fotos para GNOME"
-#: ../src/UI.Dialog/AboutDialog.cs:77
-msgid "Copyright © 2003-2009 Novell Inc."
+#: ../src/UI.Dialog/AboutDialog.cs:95
+msgid "Copyright © 2003-2010 Novell Inc."
msgstr "Copyright © 2003-2008 Novell Inc."
-#: ../src/UI.Dialog/AboutDialog.cs:100
+#: ../src/UI.Dialog/AboutDialog.cs:119
msgid "translator-credits"
msgstr ""
"Mancomún - Centro de Referencia e Servizos de Software Libre <g11n at mancomun."
"org>, 2009. Fran Diéguez <fran.dieguez at glug.es>, 2009"
-#: ../src/UI.Dialog/AboutDialog.cs:105
+#: ../src/UI.Dialog/AboutDialog.cs:124
msgid "F-Spot Website"
msgstr "Sitio web do F-Spot"
-#: ../src/UI.Dialog/AdjustTimeDialog.cs:112
+#: ../src/UI.Dialog/AdjustTimeDialog.cs:113
#: ../src/UI.Dialog/ui/AdjustTimeDialog.ui.h:10
#, csharp-format
msgid "Shift all photos by {0}"
@@ -3421,16 +3188,20 @@ msgstr "Semana pasada (luns-dom)"
msgid "Customized Range"
msgstr "Gama personalizada"
-#: ../src/UI.Dialog/EditTagIconDialog.cs:46
+#: ../src/UI.Dialog/EditExceptionDialog.cs:39
+msgid "Error editing photo"
+msgstr "Erro ao editar a foto"
+
+#: ../src/UI.Dialog/EditTagIconDialog.cs:42
#, csharp-format
msgid "Edit Icon for Tag {0}"
msgstr "Editar icona para a etiqueta {0}"
-#: ../src/UI.Dialog/EditTagIconDialog.cs:68
+#: ../src/UI.Dialog/EditTagIconDialog.cs:64
msgid "Select Photo from file"
msgstr "Seleccionar unha foto do ficheiro"
-#: ../src/UI.Dialog/EditTagIconDialog.cs:90
+#: ../src/UI.Dialog/EditTagIconDialog.cs:86
#, csharp-format
msgid ""
"\n"
@@ -3448,16 +3219,16 @@ msgstr ""
" a esta etiqueta. Etiquete unha foto como '{0}' e volva aquí\n"
" para usala como icona."
-#: ../src/UI.Dialog/EditTagIconDialog.cs:168
+#: ../src/UI.Dialog/EditTagIconDialog.cs:164
msgid "Unable to load image"
msgstr "Non é posíbel cargar a imaxe"
-#: ../src/UI.Dialog/EditTagIconDialog.cs:169
+#: ../src/UI.Dialog/EditTagIconDialog.cs:165
#, csharp-format
msgid "Unable to load \"{0}\" as icon for the tag"
-msgstr "Non é posíbel cargar \"{0}\" como icona da etiqueta"
+msgstr "Non é posíbel cargar «{0}» como icona da etiqueta"
-#: ../src/UI.Dialog/EditTagIconDialog.cs:207
+#: ../src/UI.Dialog/EditTagIconDialog.cs:203
#, csharp-format
msgid "Photo {0} of {1}"
msgstr "Foto {0} de {1}"
@@ -3474,24 +3245,51 @@ msgstr "Detalles do erro"
msgid "An unhandled exception was thrown: "
msgstr "Ocorreu unha excepción non manipulada: "
-#: ../src/UI.Dialog/PreferenceDialog.cs:53
-#: ../src/UI.Dialog/PreferenceDialog.cs:71
+#: ../src/UI.Dialog/ImportDialog.cs:15
+msgid "Choose Folder..."
+msgstr "Abrir carta_fol..."
+
+#: ../src/UI.Dialog/ImportDialog.cs:124
+msgid "Choose Import source..."
+msgstr "Fonte de importación:"
+
+#: ../src/UI.Dialog/ImportDialog.cs:136
+msgid "(No Cameras Detected)"
+msgstr "(Non se detectou ningunha cámara)"
+
+#: ../src/UI.Dialog/ImportDialog.cs:264
+#, csharp-format
+msgid "Importing Photos: {0} of {1}..."
+msgstr "Foto {0} de {1}"
+
+#: ../src/UI.Dialog/ImportDialog.cs:288
+msgid "Importing photos..."
+msgstr "Rotando as fotos"
+
+#. TODO: Using a GtkSpinner would be nicer here.
+#: ../src/UI.Dialog/ImportDialog.cs:295
+msgid "Searching for photos... (You can already click Import to continue)"
+msgstr ""
+"Buscando fotos... (Vostede pode de feito premer Importar para continuar)"
+
+#: ../src/UI.Dialog/PreferenceDialog.cs:55
+#: ../src/UI.Dialog/PreferenceDialog.cs:78
msgid "None"
msgstr "Ningunha"
-#: ../src/UI.Dialog/PreferenceDialog.cs:55
+#: ../src/UI.Dialog/PreferenceDialog.cs:57
msgid "System profile"
msgstr "Perfil do sistema"
-#: ../src/UI.Dialog/PreferenceDialog.cs:84
+#: ../src/UI.Dialog/PreferenceDialog.cs:95
msgid "Standard theme"
msgstr "Tema estándar"
-#: ../src/UI.Dialog/RepairDbDialog.cs:20
+#: ../src/UI.Dialog/RepairDbDialog.cs:21
msgid "Error loading database."
msgstr "Erro ao cargar a base de datos."
-#: ../src/UI.Dialog/RepairDbDialog.cs:21
+#: ../src/UI.Dialog/RepairDbDialog.cs:22
#, csharp-format
msgid ""
"F-Spot encountered an error while loading the photo database. The old "
@@ -3500,15 +3298,15 @@ msgstr ""
"F-Spot encontrouse cun erro ao cargar a base de datos da foto. Deberá mover "
"a anterior base de datos a {0} e crear unha nova."
-#: ../src/UI.Dialog/SelectionRatioDialog.cs:60
+#: ../src/UI.Dialog/SelectionRatioDialog.cs:61
msgid "Label"
msgstr "Etiqueta"
-#: ../src/UI.Dialog/SelectionRatioDialog.cs:64
+#: ../src/UI.Dialog/SelectionRatioDialog.cs:65
msgid "Ratio"
msgstr "Proporción"
-#: ../src/UI.Dialog/ThreadProgressDialog.cs:53
+#: ../src/UI.Dialog/ThreadProgressDialog.cs:55
msgid "Retry"
msgstr "Tentar de novo"
@@ -3701,8 +3499,8 @@ msgid "By _Rating"
msgstr "Po_r puntuación"
#: ../src/ui/main_window.ui.h:7
-msgid "Copy Locat_ion"
-msgstr "Copiar local_ización"
+msgid "Copy"
+msgstr "Recortar"
#: ../src/ui/main_window.ui.h:8
msgid "Create New _Tag..."
@@ -3712,187 +3510,203 @@ msgstr "Crear unha e_tiqueta nova..."
msgid "Create _New Version..."
msgstr "Crear unha versión _nova..."
-#: ../src/ui/main_window.ui.h:11
+#: ../src/ui/main_window.ui.h:10
+msgid "De_tach Version"
+msgstr "_Eliminar a versión"
+
+#: ../src/ui/main_window.ui.h:12
msgid "Fin_d"
msgstr "Encontra_r"
-#: ../src/ui/main_window.ui.h:12
+#: ../src/ui/main_window.ui.h:13
msgid "Manage _Extensions"
msgstr "Xestionar _extensións"
-#: ../src/ui/main_window.ui.h:13
+#: ../src/ui/main_window.ui.h:14
msgid "Page Set_up..."
msgstr "Config_uración da páxina..."
-#: ../src/ui/main_window.ui.h:14
+#: ../src/ui/main_window.ui.h:15
msgid "Re_fresh Thumbnail"
msgstr "Act_ualizar miniatura"
#: ../src/ui/main_window.ui.h:19
+msgid "Select _All"
+msgstr "Seleccionar _todo"
+
+#: ../src/ui/main_window.ui.h:20
msgid "Select _None"
msgstr "Seleccionar _ningunha"
-#: ../src/ui/main_window.ui.h:20
+#: ../src/ui/main_window.ui.h:21
msgid "Send by _Mail..."
msgstr "E_nviar por correo electrónico..."
-#: ../src/ui/main_window.ui.h:22
+#: ../src/ui/main_window.ui.h:23
msgid "Side_bar"
msgstr "_Barra lateral"
-#: ../src/ui/main_window.ui.h:23
+#: ../src/ui/main_window.ui.h:24
msgid "T_ags"
msgstr "Etiquet_as"
-#: ../src/ui/main_window.ui.h:25
+#: ../src/ui/main_window.ui.h:26
msgid "Thumbnail _elements"
-msgstr "_Elementos da miniatura"
+msgstr "_Elementos de miniaturas"
-#: ../src/ui/main_window.ui.h:26
+#: ../src/ui/main_window.ui.h:27
msgid "Too_lbar"
msgstr "Barra de _ferramentas"
-#: ../src/ui/main_window.ui.h:27
+#: ../src/ui/main_window.ui.h:28
msgid "View"
msgstr "Ver"
#: ../src/ui/main_window.ui.h:33
+msgid "_Attach Tag"
+msgstr "_Anexar etiqueta"
+
+#: ../src/ui/main_window.ui.h:34
msgid "_Attach Tag to Selection"
msgstr "_Anexar a etiqueta á selección"
-#: ../src/ui/main_window.ui.h:35
+#: ../src/ui/main_window.ui.h:36
msgid "_Clear Rating Filter"
msgstr "_Limpar o filtro da puntuación"
-#: ../src/ui/main_window.ui.h:36
+#: ../src/ui/main_window.ui.h:37
msgid "_Clear Roll Filter"
msgstr "_Limpar o filtro do carrete"
-#: ../src/ui/main_window.ui.h:38
+#: ../src/ui/main_window.ui.h:39
msgid "_Components"
msgstr "_Compoñentes"
-#: ../src/ui/main_window.ui.h:39
+#: ../src/ui/main_window.ui.h:40
msgid "_Contents"
msgstr "_Contidos"
-#: ../src/ui/main_window.ui.h:40
+#: ../src/ui/main_window.ui.h:41
msgid "_Dates"
msgstr "_Datas"
-#: ../src/ui/main_window.ui.h:42
+#: ../src/ui/main_window.ui.h:43
msgid "_Delete Selected Tag"
msgstr "_Eliminar a etiqueta seleccionada"
-#: ../src/ui/main_window.ui.h:43
+#: ../src/ui/main_window.ui.h:44
msgid "_Delete Version"
msgstr "_Eliminar a versión"
-#: ../src/ui/main_window.ui.h:45
-msgid "_Edit Selected Tag..."
-msgstr "_Editar etiqueta seleccionada..."
-
#: ../src/ui/main_window.ui.h:46
+msgid "_Edit Tag..."
+msgstr "Editar etiqueta"
+
+#: ../src/ui/main_window.ui.h:47
msgid "_Export to"
msgstr "_Exportar a"
-#: ../src/ui/main_window.ui.h:47
+#: ../src/ui/main_window.ui.h:48
msgid "_Filmstrip"
msgstr "_Filme"
-#: ../src/ui/main_window.ui.h:50
+#: ../src/ui/main_window.ui.h:51
msgid "_Hidden"
msgstr "_Oculto"
-#: ../src/ui/main_window.ui.h:51
+#: ../src/ui/main_window.ui.h:52
msgid "_Import..."
msgstr "_Importar..."
-#: ../src/ui/main_window.ui.h:52
+#: ../src/ui/main_window.ui.h:53
+msgid "_Invert Selection"
+msgstr "Selección de cámara"
+
+#: ../src/ui/main_window.ui.h:54
msgid "_Large"
msgstr "_Grande"
-#: ../src/ui/main_window.ui.h:53
+#: ../src/ui/main_window.ui.h:55
msgid "_Last Import Roll"
msgstr "Ú_ltimo carrete importado"
-#: ../src/ui/main_window.ui.h:54
+#: ../src/ui/main_window.ui.h:56
msgid "_Loupe"
msgstr "_Lupa"
-#: ../src/ui/main_window.ui.h:55
+#: ../src/ui/main_window.ui.h:57
msgid "_Medium"
msgstr "_Medio"
-#: ../src/ui/main_window.ui.h:57
+#: ../src/ui/main_window.ui.h:59
msgid "_Quit"
msgstr "_Saír"
-#: ../src/ui/main_window.ui.h:58
+#: ../src/ui/main_window.ui.h:60
msgid "_Ratings"
msgstr "_Puntuacións"
-#: ../src/ui/main_window.ui.h:60
+#: ../src/ui/main_window.ui.h:62
msgid "_Remove Tag From Selection"
msgstr "_Eliminar a etiqueta da selección"
-#: ../src/ui/main_window.ui.h:61
+#: ../src/ui/main_window.ui.h:63
msgid "_Rename Version"
msgstr "_Renomear a versión"
-#: ../src/ui/main_window.ui.h:62
+#: ../src/ui/main_window.ui.h:64
msgid "_Reverse Order"
msgstr "Inverte_r a orde"
-#: ../src/ui/main_window.ui.h:63
+#: ../src/ui/main_window.ui.h:65
msgid "_Select Import Rolls..."
msgstr "_Seleccionar carretes importados..."
-#: ../src/ui/main_window.ui.h:64
+#: ../src/ui/main_window.ui.h:66
msgid "_Set Date Range..."
msgstr "E_stabelecer intervalo de datas..."
-#: ../src/ui/main_window.ui.h:65
+#: ../src/ui/main_window.ui.h:67
msgid "_Set Rating filter..."
msgstr "E_stabelecer filtro de puntuacións..."
-#: ../src/ui/main_window.ui.h:66
+#: ../src/ui/main_window.ui.h:68
msgid "_Sharpen..."
msgstr "_Enfocar..."
-#: ../src/ui/main_window.ui.h:68
+#: ../src/ui/main_window.ui.h:70
msgid "_Small"
msgstr "_Pequeno"
-#: ../src/ui/main_window.ui.h:69
+#: ../src/ui/main_window.ui.h:71
msgid "_Tag Icons"
msgstr "E_tiquetar iconas"
-#: ../src/ui/main_window.ui.h:70
+#: ../src/ui/main_window.ui.h:72
msgid "_Tags"
msgstr "E_tiquetas"
-#: ../src/ui/main_window.ui.h:71
+#: ../src/ui/main_window.ui.h:73
msgid "_Timeline"
msgstr "Sec_uencia cronolóxica"
-#: ../src/ui/main_window.ui.h:72
+#: ../src/ui/main_window.ui.h:74
msgid "_Tools"
msgstr "Ferramen_tas"
-#: ../src/ui/main_window.ui.h:73
+#: ../src/ui/main_window.ui.h:75
msgid "_Untagged Photos"
msgstr "F_otos sen etiquetar"
-#: ../src/ui/main_window.ui.h:74
+#: ../src/ui/main_window.ui.h:76
msgid "_Version"
msgstr "_Versión"
-#: ../src/Updater.cs:616
+#: ../src/Updater.cs:724
msgid "Updating F-Spot Database"
msgstr "Actualizando a base de datos do F-Spot"
-#: ../src/Updater.cs:617
+#: ../src/Updater.cs:725
msgid ""
"Please wait while your F-Spot gallery's database is updated. This may take "
"some time."
@@ -3901,7 +3715,7 @@ msgstr ""
"pode tardar un pouco."
#. Mono.Unix.Error error = Mono.Unix.Stdlib.GetLastError ();
-#: ../src/Utils/Unix.cs:35
+#: ../src/Utils/Unix.cs:36
msgid "Unable to create temporary file"
msgstr "Non é posíbel crear un ficheiro temporal"
@@ -3985,11 +3799,11 @@ msgstr "Imprimir etiquetas das fotos"
msgid "Print photo comment"
msgstr "Imprimir os comentarios da foto"
-#: ../src/Widgets/EditorPage.cs:29 ../src/Widgets/Sidebar.cs:62
+#: ../src/Widgets/EditorPage.cs:31 ../src/Widgets/Sidebar.cs:54
msgid "Edit"
msgstr "Editar"
-#: ../src/Widgets/EditorPage.cs:197
+#: ../src/Widgets/EditorPage.cs:199
msgid ""
"This tool requires an active selection. Please select a region of the photo "
"and try the operation again"
@@ -3997,93 +3811,101 @@ msgstr ""
"Esta ferramenta require que haxa unha selección activa. Seleccione unha área "
"da foto e realice de novo a operación"
-#: ../src/Widgets/EditorPage.cs:215
+#: ../src/Widgets/EditorPage.cs:217
msgid "Error saving adjusted photo"
msgid_plural "Error saving adjusted photos"
msgstr[0] "Erro ao gardar a foto modificada"
msgstr[1] "Erro ao gardar as fotos modificadas"
-#: ../src/Widgets/EditorPage.cs:217
+#: ../src/Widgets/EditorPage.cs:219
#, csharp-format
msgid ""
"Received exception \"{0}\". Note that you have to develop RAW files into "
"JPEG before you can edit them."
msgstr ""
-"Recibiuse a excepción \"{0}\". Teña en conta que ten que transformar os "
+"Recibiuse a excepción «{0}». Teña en conta que ten que transformar os "
"ficheiros RAW en JPEG para poder editalos."
-#: ../src/Widgets/Filmstrip.cs:572
+#: ../src/Widgets/Filmstrip.cs:573
msgid "_Horizontal"
msgstr "_Horizontal"
-#: ../src/Widgets/Filmstrip.cs:576
+#: ../src/Widgets/Filmstrip.cs:577
msgid "_Vertical"
msgstr "_Vertical"
-#: ../src/Widgets/FindBar.cs:58
+#: ../src/Widgets/FindBar.cs:59
msgid "Find:"
msgstr "Buscar:"
-#: ../src/Widgets/FolderTreePage.cs:21
+#: ../src/Widgets/FolderTreePage.cs:22
msgid "Folders"
msgstr "Cartafoles"
-#: ../src/Widgets/FolderTreeView.cs:123
+#: ../src/Widgets/FolderTreeView.cs:127
msgid "Filesystem"
msgstr "Sistema de ficheiros"
-#: ../src/Widgets/InfoBox.cs:182
+#: ../src/Widgets/InfoBox.cs:183
msgid "Histogram"
msgstr "Histograma"
-#: ../src/Widgets/InfoBox.cs:217
+#: ../src/Widgets/InfoBox.cs:216
+msgid "Version"
+msgstr "Versión"
+
+#: ../src/Widgets/InfoBox.cs:219
msgid "Date"
msgstr "Data"
-#: ../src/Widgets/InfoBox.cs:223
+#: ../src/Widgets/InfoBox.cs:225
msgid "Exposure"
msgstr "Exposición"
-#: ../src/Widgets/InfoBox.cs:227
+#: ../src/Widgets/InfoBox.cs:229
msgid "Focal Length"
msgstr "Distancia focal"
-#: ../src/Widgets/InfoBox.cs:233
+#: ../src/Widgets/InfoBox.cs:232
+msgid "Camera"
+msgstr "Cámara"
+
+#: ../src/Widgets/InfoBox.cs:235
msgid "File Size"
msgstr "Tamaño do ficheiro"
-#: ../src/Widgets/InfoBox.cs:236
+#: ../src/Widgets/InfoBox.cs:238
msgid "Rating"
msgstr "Puntuación"
-#: ../src/Widgets/InfoBox.cs:389 ../src/Widgets/InfoBox.cs:397
-#: ../src/Widgets/InfoBox.cs:427
+#: ../src/Widgets/InfoBox.cs:391 ../src/Widgets/InfoBox.cs:399
+#: ../src/Widgets/InfoBox.cs:429
msgid "(wrong format)"
msgstr "(formato incorrecto)"
-#: ../src/Widgets/InfoBox.cs:417 ../src/Widgets/InfoBox.cs:440
-#: ../src/Widgets/InfoBox.cs:450 ../src/Widgets/InfoBox.cs:459
+#: ../src/Widgets/InfoBox.cs:419 ../src/Widgets/InfoBox.cs:442
+#: ../src/Widgets/InfoBox.cs:452 ../src/Widgets/InfoBox.cs:461
msgid "(Unknown)"
msgstr "(Descoñecido)"
-#: ../src/Widgets/InfoBox.cs:560
+#: ../src/Widgets/InfoBox.cs:564
#, csharp-format
msgid "(One Edit)"
msgid_plural "({0} Edits)"
msgstr[0] "(Sen editar)"
msgstr[1] "({0} Edicións)"
-#: ../src/Widgets/InfoBox.cs:574
+#: ../src/Widgets/InfoBox.cs:578
msgid "(File read error)"
msgstr "(Erro de lectura do ficheiro)"
-#: ../src/Widgets/InfoBox.cs:619
+#: ../src/Widgets/InfoBox.cs:623
#, csharp-format
msgid "{0} Photos"
msgstr "{0} Fotos"
#. Note for translators: {0} is a date, {1} and {2} are times.
-#: ../src/Widgets/InfoBox.cs:639
+#: ../src/Widgets/InfoBox.cs:643
#, csharp-format
msgid ""
"On {0} between \n"
@@ -4092,7 +3914,7 @@ msgstr ""
"En {0} entre \n"
"{1} e {2}"
-#: ../src/Widgets/InfoBox.cs:644
+#: ../src/Widgets/InfoBox.cs:648
#, csharp-format
msgid ""
"Between {0} \n"
@@ -4101,61 +3923,61 @@ msgstr ""
"Entre {0} \n"
"e {1}"
-#: ../src/Widgets/InfoBox.cs:671
+#: ../src/Widgets/InfoBox.cs:675
msgid "(At least one File not found)"
msgstr "(Polo menos un ficheiro non se encontrou)"
-#: ../src/Widgets/InfoBox.cs:788
+#: ../src/Widgets/InfoBox.cs:792
msgid "Show Photo Name"
msgstr "Mostrar o nome da foto"
-#: ../src/Widgets/InfoBox.cs:797
+#: ../src/Widgets/InfoBox.cs:801
msgid "Show Date"
msgstr "Mostrar data"
-#: ../src/Widgets/InfoBox.cs:806
+#: ../src/Widgets/InfoBox.cs:810
msgid "Show Size"
msgstr "Mostrar tamaño"
-#: ../src/Widgets/InfoBox.cs:815
+#: ../src/Widgets/InfoBox.cs:819
msgid "Show Exposure"
msgstr "Mostrar exposición"
-#: ../src/Widgets/InfoBox.cs:824
+#: ../src/Widgets/InfoBox.cs:828
msgid "Show Focal Length"
msgstr "Mostrar distancia focal"
-#: ../src/Widgets/InfoBox.cs:833
+#: ../src/Widgets/InfoBox.cs:837
msgid "Show Camera"
msgstr "Mostrar cámara"
-#: ../src/Widgets/InfoBox.cs:842
+#: ../src/Widgets/InfoBox.cs:846
msgid "Show File Size"
msgstr "Mostrar tamaño do ficheiro"
-#: ../src/Widgets/MetadataDisplay.cs:23
+#: ../src/Widgets/MetadataDisplay.cs:25
msgid "Metadata"
msgstr "Metadatos"
-#: ../src/Widgets/MetadataDisplay.cs:104
+#: ../src/Widgets/MetadataDisplay.cs:106
msgid "Extended Metadata"
msgstr "Metadatos estendidos"
#. clear Extended Metadata
-#: ../src/Widgets/MetadataDisplay.cs:392
+#: ../src/Widgets/MetadataDisplay.cs:394
msgid "No Extended Metadata Available"
msgstr "Non hai metadatos estendidos dispoñíbeis"
-#: ../src/Widgets/MetadataDisplay.cs:410
+#: ../src/Widgets/MetadataDisplay.cs:412
msgid "No active photo"
msgstr "Non hai fotos activas"
-#: ../src/Widgets/MetadataDisplay.cs:412
+#: ../src/Widgets/MetadataDisplay.cs:414
#, csharp-format
msgid "The photo \"{0}\" does not exist"
-msgstr "A foto \"{0}\" non existe"
+msgstr "A foto «{0}» non existe"
-#: ../src/Widgets/MetadataDisplay.cs:415
+#: ../src/Widgets/MetadataDisplay.cs:417
msgid "No metadata available"
msgstr "Non hai metadatos dispoñíbeis"
@@ -4163,7 +3985,7 @@ msgstr "Non hai metadatos dispoñíbeis"
msgid "No applications available"
msgstr "Non hai aplicativos dispoñíbeis"
-#: ../src/Widgets/RatingMenuItem.cs:56
+#: ../src/Widgets/RatingMenuItem.cs:57
msgid "Rating:"
msgstr "Puntuación:"
@@ -4187,3 +4009,396 @@ msgstr "Mostrar unha presentación do F-Spot"
#: ../tools/f-spot-screensaver.desktop.in.h:2
msgid "F-Spot photos"
msgstr "Fotos do F-Spot"
+
+#~ msgid "Error: Error while transferring; Aborting"
+#~ msgstr "Erro: erro ao transferir; interrompendo"
+
+#~ msgid "Error: File Already Exists; Aborting"
+#~ msgstr "Erro: o ficheiro xa existe; interrompendo"
+
+#~ msgid "Package"
+#~ msgstr "Paquete"
+
+#~ msgid "Extension Installation"
+#~ msgstr "Instalación da extensión"
+
+#~ msgid "<b>Select the extensions to install and click on Next</b>"
+#~ msgstr ""
+#~ "<b>Seleccione as extensións que quere instalar e prema no botón \"Seguinte"
+#~ "\"</b>"
+
+#~ msgid "Install from:"
+#~ msgstr "Instalar desde:"
+
+#~ msgid "_Repositories..."
+#~ msgstr "_Repositorios..."
+
+#~ msgid "Show all packages"
+#~ msgstr "Mostrar todos os paquetes"
+
+#~ msgid "Show new versions only"
+#~ msgstr "Mostrar só as versións novas"
+
+#~ msgid "Show updates only"
+#~ msgstr "Mostrar só as actualizacións"
+
+#~ msgid "_Unselect All"
+#~ msgstr "_Deseleccionar todo"
+
+#~ msgid "label124"
+#~ msgstr "etiqueta124"
+
+#~ msgid "Overall Progress:"
+#~ msgstr "Progreso xeral:"
+
+#~ msgid "Downloading extensions..."
+#~ msgstr "Descargando as extensións..."
+
+#~ msgid "Extension Manager"
+#~ msgstr "Xestor de extensión"
+
+#~ msgid "Additional extensions are required to perform this operation."
+#~ msgstr "Requírense extensións adicionais para realizar esta operación."
+
+#~ msgid "The following extensions will be installed:"
+#~ msgstr "Vanse instalar as seguintes extensións:"
+
+#~ msgid "<big><b>Extension Manager</b></big>"
+#~ msgstr "<big><b>Xestor de extensión</b></big>"
+
+#~ msgid "The following extensions are currently installed:"
+#~ msgstr "As seguintes extensións están sendo instaladas:"
+
+#~ msgid "_Install Extensions..."
+#~ msgstr "_Instalar extensións..."
+
+#~ msgid "_Uninstall..."
+#~ msgstr "_Desinstalar..."
+
+#~ msgid "Enable"
+#~ msgstr "Activar"
+
+#~ msgid "Disable"
+#~ msgstr "Desactivar"
+
+#~ msgid "Details"
+#~ msgstr "Detalles"
+
+#~ msgid "Extension Repository Management"
+#~ msgstr "Xestor do repositorio de extensións"
+
+#~ msgid "Add New Repository"
+#~ msgstr "Engadir un repositorio novo"
+
+#~ msgid "Select the location of the repository you want to register:"
+#~ msgstr "Seleccione a localización do repositorio que queira rexistrar:"
+
+#~ msgid "Register an on-line repository"
+#~ msgstr "Rexistrar un repositorio en liña"
+
+#~ msgid "Url:"
+#~ msgstr "URL:"
+
+#~ msgid "Register a local repository"
+#~ msgstr "Rexistrar un repositorio local"
+
+#~ msgid "Path:"
+#~ msgstr "Camiño:"
+
+#~ msgid "Browse..."
+#~ msgstr "Examinar..."
+
+#~ msgid "Version:"
+#~ msgstr "Versión:"
+
+#~ msgid "Author:"
+#~ msgstr "Autor:"
+
+#~ msgid "Copyright:"
+#~ msgstr "Copyright:"
+
+#~ msgid "Extension Dependencies:"
+#~ msgstr "Dependencias da extensión:"
+
+#~ msgid "All registered repositories"
+#~ msgstr "Todos os repositorios rexistrados"
+
+#~ msgid "Are you sure you want to cancel the installation?"
+#~ msgstr "Está seguro de que quere cancelar a instalación?"
+
+#~ msgid "The following packages will be uninstalled:"
+#~ msgstr "Vanse desinstalar os seguintes paquetes:"
+
+#~ msgid ""
+#~ "There are other extensions that depend on the previous ones which will "
+#~ "also be uninstalled:"
+#~ msgstr ""
+#~ "Existen outras extensións que dependen das anteriores e que tamén se van "
+#~ "desinstalar:"
+
+#~ msgid ""
+#~ "The selected extensions can't be installed because there are dependency "
+#~ "conflicts."
+#~ msgstr ""
+#~ "As extensións seleccionadas non se poden instalar por conflitos de "
+#~ "dependencias."
+
+#~ msgid "The following packages will be installed:"
+#~ msgstr "Vanse instalar os seguintes paquetes:"
+
+#~ msgid " (in user directory)"
+#~ msgstr "(no directorio de usuario)"
+
+#~ msgid "The following packages need to be uninstalled:"
+#~ msgstr "Téñense que desinstalar os seguintes paquetes:"
+
+#~ msgid "The following dependencies could not be resolved:"
+#~ msgstr "Non se puideron resolver as seguintes dependencias:"
+
+#~ msgid "The installation has been successfully completed."
+#~ msgstr "A instalación terminou correctamente."
+
+#~ msgid "The installation failed!"
+#~ msgstr "A instalación fallou!"
+
+#~ msgid "The installation has completed with warnings."
+#~ msgstr "A instalación completouse con avisos."
+
+#~ msgid "The uninstallation has been successfully completed."
+#~ msgstr "A desinstalación completouse correctamente."
+
+#~ msgid "The uninstallation failed!"
+#~ msgstr "A desinstalación fallou!"
+
+#~ msgid "The uninstallation has completed with warnings."
+#~ msgstr "A desinstalación completouse con avisos."
+
+#~ msgid "Repository"
+#~ msgstr "Repositorio"
+
+#~ msgid "Installation cancelled"
+#~ msgstr "Cancelouse a instalación"
+
+#~ msgid "Some of the required extensions were not found"
+#~ msgstr "Non se encontraron algunhas das extensións que se requirían"
+
+#~ msgid "Installation failed"
+#~ msgstr "A instalación fallou"
+
+#~ msgid "Extension"
+#~ msgstr "Extensión"
+
+#~ msgid "Other"
+#~ msgstr "Outros"
+
+#~ msgid "Url"
+#~ msgstr "URL"
+
+#~ msgid "Exception occurred: {0}"
+#~ msgstr "Produciuse unha excepción: {0}"
+
+#~ msgid "Disabled extensions can't be loaded."
+#~ msgstr "As extensións desactivadas non se poden cargar."
+
+#~ msgid "Loading {0} extension"
+#~ msgstr "Descargando a extensión {0}"
+
+#~ msgid "The required extension '{0}' is disabled."
+#~ msgstr "A extensión '{0}' requirida está desactivada."
+
+#~ msgid "The required extension '{0}' is not installed."
+#~ msgstr "A extensión '{0}' requirida non está instalada."
+
+#~ msgid "(provided by {0})"
+#~ msgstr "(proporcionado por {0})"
+
+#~ msgid "Preview"
+#~ msgstr "Previsualización"
+
+#~ msgid "Path"
+#~ msgstr "Camiño"
+
+#~ msgid "File"
+#~ msgstr "Ficheiro"
+
+#~ msgid "Select Tag"
+#~ msgstr "Seleccionar etiqueta"
+
+#~ msgid "Downloading Previews"
+#~ msgstr "Descargar previsualizacións"
+
+#~ msgid "Downloading Preview of {0}"
+#~ msgstr "Descargar previsualización de {0}"
+
+#~ msgid "Copying file {0} of {1}"
+#~ msgstr "Copiando ficheiro {0} de {1}"
+
+#~ msgid "Error transferring file"
+#~ msgstr "Erro ao transferir o ficheiro"
+
+#~ msgid "Download Complete"
+#~ msgstr "Descarga completa"
+
+#~ msgid "Done Copying Files"
+#~ msgstr "Copia dos ficheiros terminada"
+
+#~ msgid "Transferring \"{0}\" from camera"
+#~ msgstr "Transferindo \"{0}\" desde a cámara"
+
+#~ msgid "Port"
+#~ msgstr "Porto"
+
+#~ msgid "Reparented ({0})"
+#~ msgstr "Reasociada ({0})"
+
+#~ msgid "Import error"
+#~ msgstr "Erro ao importar"
+
+#~ msgid "Error importing {0}{2}{2}{1}"
+#~ msgstr "Erro ao importar {0}{2}{2}{1}"
+
+#~ msgid " "
+#~ msgstr " "
+
+#~ msgid "Attach Tags:"
+#~ msgstr "Anexar etiquetas:"
+
+#~ msgid "Attach tag:"
+#~ msgstr "Anexar etiqueta:"
+
+#~ msgid "CD"
+#~ msgstr "CD"
+
+#~ msgid "Copy files to the Photos folder"
+#~ msgstr "Copiar ficheiros no cartafol de fotos"
+
+#~ msgid "Detect duplicates"
+#~ msgstr "Detectar duplicacións"
+
+#~ msgid "E-_Mail:"
+#~ msgstr "Enderezo e_lectrónico:"
+
+#~ msgid "E_xport titles and comments"
+#~ msgstr "E_xportar títulos e comentarios"
+
+#~ msgid "G_allery:"
+#~ msgstr "G_alería"
+
+#~ msgid "Gallery"
+#~ msgstr "Galería"
+
+#~ msgid "Include subfolders"
+#~ msgstr "Incluír subcartafoles"
+
+#~ msgid "Pause"
+#~ msgstr "Pausa"
+
+#~ msgid "Select Photos to Copy From Camera..."
+#~ msgstr "Seleccionar as fotos que se van copiar da cámara..."
+
+#~ msgid "Select the camera from which you want to transfer files"
+#~ msgstr "Seleccione a cámara desde a que quere transferir os ficheiros"
+
+#~ msgid "Selected Camera: "
+#~ msgstr "Cámara seleccionada: "
+
+#~ msgid "Strip image _metadata"
+#~ msgstr "Quitar os _metadatos da imaxe"
+
+#~ msgid "_Flickr"
+#~ msgstr "_Flickr"
+
+#~ msgid "_Gallery"
+#~ msgstr "_Galería"
+
+#~ msgid "_Open album in browser when done uploading"
+#~ msgstr "A_brir o álbum nun navegador ao terminar de cargalo"
+
+#~ msgid "_Open destination when done exporting"
+#~ msgstr "A_brir o destino ao acabar de exportar"
+
+#~ msgid "_Scale photos to no larger than: "
+#~ msgstr "E_scalar fotos maiores que: "
+
+#~ msgid "_Strip metadata"
+#~ msgstr "Quitar metadato_s"
+
+#~ msgid "_URI:"
+#~ msgstr "_URL:"
+
+#~ msgid "_Virtual Filesystem"
+#~ msgstr "Sistema de ficheiros _virtual"
+
+#~ msgid "x"
+#~ msgstr "x"
+
+#~ msgid "Loading {0} of {1}"
+#~ msgstr "Descargando {0} de {1}"
+
+#~ msgid "Done Loading"
+#~ msgstr "Descarga completa"
+
+#~ msgid "Directory does not exist."
+#~ msgstr "O directorio non existe."
+
+#~ msgid ""
+#~ "The directory you selected \"{0}\" does not exist. Please choose a "
+#~ "different directory"
+#~ msgstr ""
+#~ "O directorio seleccionado \"{0}\" non existe. Elixa un directorio "
+#~ "diferente"
+
+#~ msgid "No cameras detected."
+#~ msgstr "Non se detectou ningunha cámara."
+
+#~ msgid ""
+#~ "F-Spot was unable to find any cameras attached to this system. Double "
+#~ "check that the camera is connected and has power"
+#~ msgstr ""
+#~ "F-Spot non foi capaz de encontrar ningunha cámara conectada a este "
+#~ "sistema. Comprobe de novo que a cámara está ben conectada e acendida"
+
+#~ msgid "Error connecting to camera"
+#~ msgstr "Erro ao conectar a cámara"
+
+#~ msgid "Received error \"{0}\" while connecting to camera"
+#~ msgstr "Recibiuse o erro \"{0}\" mentres se conectaba a cámara"
+
+#~ msgid "Could not create a new version"
+#~ msgstr "Non se puido crear unha versión nova"
+
+#~ msgid "Received exception \"{0}\". Unable to create version \"{1}\""
+#~ msgstr ""
+#~ "Recibiuse a excepción \"{0}\". Non é posíbel crear a versión \"{1}\""
+
+#~ msgid "Really Delete?"
+#~ msgstr "Está seguro de que quere eliminala?"
+
+#~ msgid "Cancel"
+#~ msgstr "Cancelar"
+
+#~ msgid "Could not delete a version"
+#~ msgstr "Non se puido eliminar a versión"
+
+#~ msgid "Received exception \"{0}\". Unable to delete version \"{1}\""
+#~ msgstr ""
+#~ "Recibiuse a excepción \"{0}\". Non é posíbel eliminar a versión \"{1}\""
+
+#~ msgid "Could not rename a version"
+#~ msgstr "Non se puido renomear a versión"
+
+#~ msgid "Received exception \"{0}\". Unable to rename version to \"{1}\""
+#~ msgstr ""
+#~ "Recibiuse a excepción \"{0}\". Non foi posíbel renomear como \"{1}\""
+
+#~ msgid "my photos"
+#~ msgstr "as miñas fotos"
+
+#~ msgid "Edit Selected Tag..."
+#~ msgstr "Editar a etiqueta seleccionada..."
+
+#~ msgid "Copy Locat_ion"
+#~ msgstr "Copiar local_ización"
+
+#~ msgid "_Edit Selected Tag..."
+#~ msgstr "_Editar etiqueta seleccionada..."
diff --git a/po/hu.po b/po/hu.po
index 8b62cea..dc7a243 100644
--- a/po/hu.po
+++ b/po/hu.po
@@ -8,8 +8,8 @@ msgid ""
msgstr ""
"Project-Id-Version: f-spot master\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2010-03-24 13:20+0100\n"
-"PO-Revision-Date: 2010-03-24 13:20+0100\n"
+"POT-Creation-Date: 2010-06-08 11:43+0200\n"
+"PO-Revision-Date: 2010-06-08 11:42+0200\n"
"Last-Translator: Gabor Kelemen <kelemeng at gnome dot hu>\n"
"Language-Team: Hungarian <gnome at fsf dot hu>\n"
"MIME-Version: 1.0\n"
@@ -18,13 +18,44 @@ msgstr ""
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
"X-Generator: KBabel 1.11.4\n"
+#: ../data/desktop-files/f-spot.desktop.in.in.h:1
+#: ../data/desktop-files/f-spot-import.desktop.in.in.h:1
+#: ../data/desktop-files/f-spot-view.desktop.in.in.h:1
+#: ../src/ui/main_window.ui.h:11
+msgid "F-Spot"
+msgstr "F-Spot"
+
+#: ../data/desktop-files/f-spot.desktop.in.in.h:2
+#: ../data/desktop-files/f-spot-import.desktop.in.in.h:2
+msgid "F-Spot Photo Manager"
+msgstr "F-Spot fotókezelő"
+
+#: ../data/desktop-files/f-spot.desktop.in.in.h:3
+msgid "Organize, enjoy, and share your photos"
+msgstr "Fényképek rendszerezése, megjelenítése és megosztása"
+
+#: ../data/desktop-files/f-spot.desktop.in.in.h:4
+#: ../data/desktop-files/f-spot-import.desktop.in.in.h:4
+msgid "Photo Manager"
+msgstr "Fényképkezelő"
+
+#: ../data/desktop-files/f-spot-import.desktop.in.in.h:3
+msgid "Import into F-Spot"
+msgstr "Importálás az F-Spotba"
+
+#: ../data/desktop-files/f-spot-view.desktop.in.in.h:2
+msgid "F-Spot Photo Viewer"
+msgstr "F-Spot fotómegjelenítő"
+
+#: ../data/desktop-files/f-spot-view.desktop.in.in.h:3
+msgid "Photo Viewer"
+msgstr "Fotómegjelenítő"
+
#: ../extensions/Exporters/CDExport/CDExport.addin.xml.h:1
msgid "_CD..."
msgstr "_CD…"
#: ../extensions/Exporters/CDExport/CDExport.cs:162
-#: ../extensions/Exporters/FolderExport/FolderExport.cs:392
-#: ../src/CameraFileSelectionDialog.cs:199
msgid "Transferring Pictures"
msgstr "Képek átvitele"
@@ -35,37 +66,34 @@ msgstr "„{0}” kép átvitele CD-re"
#. Note for translators: This indicates the current photo is photo {0} of {1} out of photos
#: ../extensions/Exporters/CDExport/CDExport.cs:220
-#: ../extensions/Exporters/FlickrExport/FlickrExport.cs:349
-#: ../extensions/Exporters/FolderExport/FolderExport.cs:245
+#: ../extensions/Exporters/FlickrExport/FlickrExport.cs:350
+#: ../extensions/Exporters/FolderExport/FolderExport.cs:220
#: ../extensions/Exporters/GalleryExport/GalleryExport.cs:781
-#: ../src/MainWindow.cs:673 ../src/UI.Dialog/AdjustTimeDialog.cs:129
-#: ../src/UI.Dialog/ProgressDialog.cs:92
+#: ../src/MainWindow.cs:653 ../src/UI.Dialog/AdjustTimeDialog.cs:130
+#: ../src/UI.Dialog/ProgressDialog.cs:90
#, csharp-format
msgid "{0} of {1}"
msgstr "{0}/{1}"
#: ../extensions/Exporters/CDExport/CDExport.cs:233
-#: ../extensions/Exporters/FacebookExport/FacebookExport.cs:380
-#: ../extensions/Exporters/FlickrExport/FlickrExport.cs:379
-#: ../extensions/Exporters/FolderExport/FolderExport.cs:285
+#: ../extensions/Exporters/FacebookExport/FacebookExport.cs:377
+#: ../extensions/Exporters/FlickrExport/FlickrExport.cs:380
#: ../extensions/Exporters/GalleryExport/GalleryExport.cs:806
-#: ../extensions/Exporters/PicasaWebExport/PicasaWebExport.cs:704
+#: ../extensions/Exporters/PicasaWebExport/PicasaWebExport.cs:705
#: ../extensions/Exporters/SmugMugExport/SmugMugExport.cs:607
msgid "Done Sending Photos"
msgstr "Fényképek küldése kész"
#: ../extensions/Exporters/CDExport/CDExport.cs:235
-#: ../extensions/Exporters/FolderExport/FolderExport.cs:287
msgid "Transfer Complete"
msgstr "Feltöltés befejezve"
#: ../extensions/Exporters/CDExport/CDExport.cs:242
-#: ../extensions/Exporters/FolderExport/FolderExport.cs:292
msgid "Error While Transferring"
msgstr "Átviteli hiba"
#: ../extensions/Exporters/CDExport/CDExport.cs:250
-#: ../extensions/Exporters/FolderExport/FolderExport.cs:311
+#: ../extensions/Exporters/FolderExport/FolderExport.cs:278
msgid "Error Transferring"
msgstr "Átviteli hiba"
@@ -85,7 +113,7 @@ msgstr "<b>Kiírandó fényképek</b>"
#: ../extensions/Exporters/FolderExport/FolderExport.glade.h:7
#: ../extensions/Exporters/GalleryExport/GalleryExport.glade.h:7
#: ../extensions/Exporters/SmugMugExport/SmugMugExport.glade.h:5
-#: ../src/f-spot.glade.h:28
+#: ../src/f-spot.glade.h:20
msgid "Autorotate"
msgstr "Automatikus forgatás"
@@ -94,7 +122,7 @@ msgid "Create CD"
msgstr "CD létrehozása"
#: ../extensions/Exporters/CDExport/CDExport.ui.h:5
-#: ../src/Widgets/InfoBox.cs:221
+#: ../src/Widgets/InfoBox.cs:222
msgid "Size"
msgstr "Méret"
@@ -113,7 +141,7 @@ msgstr "K_orábban ütemezett fájlok tallózása"
#: ../extensions/Exporters/PicasaWebExport/PicasaWebExport.glade.h:20
#: ../extensions/Exporters/SmugMugExport/SmugMugExport.glade.h:12
#: ../extensions/Exporters/TabbloExport/ui/TabbloExport.ui.h:9
-#: ../src/f-spot.glade.h:95
+#: ../src/f-spot.glade.h:66
msgid "_Export"
msgstr "_Exportálás"
@@ -143,11 +171,11 @@ msgstr ""
"Miután a Facebook visszairányította ehhez az alkalmazáshoz, kattintson az "
"„OK” gombra."
-#: ../extensions/Exporters/FacebookExport/FacebookExport.cs:280
+#: ../extensions/Exporters/FacebookExport/FacebookExport.cs:281
msgid "Too many images to export"
msgstr "Túl sok exportálandó kép"
-#: ../extensions/Exporters/FacebookExport/FacebookExport.cs:281
+#: ../extensions/Exporters/FacebookExport/FacebookExport.cs:282
#, csharp-format
msgid ""
"Facebook only permits {0} photographs per album. Please refine your "
@@ -156,27 +184,19 @@ msgstr ""
"A Facebook albumonként csak {0} fényképet engedélyez. Finomítsa a "
"kiválasztást, és próbálja újra."
-#: ../extensions/Exporters/FacebookExport/FacebookExport.cs:298
-#: ../extensions/Exporters/FlickrExport/FlickrExport.cs:475
-#: ../extensions/Exporters/GalleryExport/GalleryExport.cs:730
-#: ../extensions/Exporters/PicasaWebExport/PicasaWebExport.cs:597
-#: ../extensions/Exporters/SmugMugExport/SmugMugExport.cs:522
-msgid "Uploading Pictures"
-msgstr "Képek feltöltése"
-
-#: ../extensions/Exporters/FacebookExport/FacebookExport.cs:319
+#: ../extensions/Exporters/FacebookExport/FacebookExport.cs:297
msgid "Album must have a name"
msgstr "Az albumnak nevet kell adni"
-#: ../extensions/Exporters/FacebookExport/FacebookExport.cs:320
+#: ../extensions/Exporters/FacebookExport/FacebookExport.cs:298
msgid "Please name your album or choose an existing album."
msgstr "Nevezze el az albumát vagy válasszon meglévő albumot."
-#: ../extensions/Exporters/FacebookExport/FacebookExport.cs:334
+#: ../extensions/Exporters/FacebookExport/FacebookExport.cs:312
msgid "Creating a new album failed"
msgstr "Az új album létrehozása meghiúsult"
-#: ../extensions/Exporters/FacebookExport/FacebookExport.cs:335
+#: ../extensions/Exporters/FacebookExport/FacebookExport.cs:313
#, csharp-format
msgid ""
"An error occurred creating a new album.\n"
@@ -187,45 +207,53 @@ msgstr ""
"\n"
"{0}"
-#: ../extensions/Exporters/FacebookExport/FacebookExport.cs:357
-#: ../extensions/Exporters/PicasaWebExport/PicasaWebExport.cs:660
+#: ../extensions/Exporters/FacebookExport/FacebookExport.cs:326
+#: ../extensions/Exporters/FlickrExport/FlickrExport.cs:476
+#: ../extensions/Exporters/GalleryExport/GalleryExport.cs:730
+#: ../extensions/Exporters/PicasaWebExport/PicasaWebExport.cs:598
+#: ../extensions/Exporters/SmugMugExport/SmugMugExport.cs:522
+msgid "Uploading Pictures"
+msgstr "Képek feltöltése"
+
+#: ../extensions/Exporters/FacebookExport/FacebookExport.cs:354
+#: ../extensions/Exporters/PicasaWebExport/PicasaWebExport.cs:661
#: ../extensions/Exporters/SmugMugExport/SmugMugExport.cs:565
#, csharp-format
msgid "Uploading picture \"{0}\" ({1} of {2})"
msgstr "„{0}” kép feltöltése ({1}. / {2})"
-#: ../extensions/Exporters/FacebookExport/FacebookExport.cs:371
+#: ../extensions/Exporters/FacebookExport/FacebookExport.cs:368
#, csharp-format
msgid "Error Uploading To Facebook: {0}"
msgstr "Hiba a Facebookba való feltöltés közben: {0}"
-#: ../extensions/Exporters/FacebookExport/FacebookExport.cs:372
-#: ../extensions/Exporters/FlickrExport/FlickrExport.cs:370
-#: ../extensions/Exporters/FolderExport/FolderExport.cs:250
+#: ../extensions/Exporters/FacebookExport/FacebookExport.cs:369
+#: ../extensions/Exporters/FlickrExport/FlickrExport.cs:371
+#: ../extensions/Exporters/FolderExport/FolderExport.cs:226
#: ../extensions/Exporters/GalleryExport/GalleryExport.cs:797
-#: ../extensions/Exporters/PicasaWebExport/PicasaWebExport.cs:693
+#: ../extensions/Exporters/PicasaWebExport/PicasaWebExport.cs:694
#: ../extensions/Exporters/SmugMugExport/SmugMugExport.cs:596
#: ../extensions/Exporters/TabbloExport/TabbloExport.cs:319
msgid "Error"
msgstr "Hiba"
-#: ../extensions/Exporters/FacebookExport/FacebookExport.cs:382
-#: ../extensions/Exporters/FlickrExport/FlickrExport.cs:381
+#: ../extensions/Exporters/FacebookExport/FacebookExport.cs:379
+#: ../extensions/Exporters/FlickrExport/FlickrExport.cs:382
#: ../extensions/Exporters/GalleryExport/GalleryExport.cs:808
-#: ../extensions/Exporters/PicasaWebExport/PicasaWebExport.cs:706
+#: ../extensions/Exporters/PicasaWebExport/PicasaWebExport.cs:707
#: ../extensions/Exporters/SmugMugExport/SmugMugExport.cs:609
msgid "Upload Complete"
msgstr "Feltöltés befejezve"
-#: ../extensions/Exporters/FacebookExport/FacebookExport.cs:385
+#: ../extensions/Exporters/FacebookExport/FacebookExport.cs:382
msgid "Visit F-Spot group on Facebook"
msgstr "Keresse fel az F-Spot csoportot a Facebookon"
-#: ../extensions/Exporters/FacebookExport/FacebookExportDialog.cs:211
+#: ../extensions/Exporters/FacebookExport/FacebookExportDialog.cs:212
msgid "Waiting for authentication"
msgstr "Várakozás hitelesítésre"
-#: ../extensions/Exporters/FacebookExport/FacebookExportDialog.cs:212
+#: ../extensions/Exporters/FacebookExport/FacebookExportDialog.cs:213
msgid ""
"F-Spot will now launch your browser so that you can log into Facebook.\n"
"\n"
@@ -239,15 +267,15 @@ msgstr ""
"„OK” gombra. Az F-Spot lehetőség szerint elmenti a munkamenetét a Gnome "
"kulcstartóra és későbbi Facebook exportálásokkor újra felhasználja."
-#: ../extensions/Exporters/FacebookExport/FacebookExportDialog.cs:217
+#: ../extensions/Exporters/FacebookExport/FacebookExportDialog.cs:218
msgid "Authenticating..."
msgstr "Hitelesítés…"
-#: ../extensions/Exporters/FacebookExport/FacebookExportDialog.cs:227
+#: ../extensions/Exporters/FacebookExport/FacebookExportDialog.cs:228
msgid "Error logging into Facebook"
msgstr "Hiba a Facebookba való belépés közben"
-#: ../extensions/Exporters/FacebookExport/FacebookExportDialog.cs:228
+#: ../extensions/Exporters/FacebookExport/FacebookExportDialog.cs:229
msgid ""
"There was a problem logging into Facebook. Check your credentials and try "
"again."
@@ -255,23 +283,23 @@ msgstr ""
"Hiba történt a Facebookba való bejelentkezés közben. Ellenőrizze a "
"hitelesítési adatait és próbálja újra."
-#: ../extensions/Exporters/FacebookExport/FacebookExportDialog.cs:237
+#: ../extensions/Exporters/FacebookExport/FacebookExportDialog.cs:238
msgid "Authorizing Session"
msgstr "Munkamenet felhatalmazása"
-#: ../extensions/Exporters/FacebookExport/FacebookExportDialog.cs:246
+#: ../extensions/Exporters/FacebookExport/FacebookExportDialog.cs:247
msgid "Session established, fetching user info..."
msgstr "Munkamenet létrehozva, felhasználói információk lekérése…"
-#: ../extensions/Exporters/FacebookExport/FacebookExportDialog.cs:252
+#: ../extensions/Exporters/FacebookExport/FacebookExportDialog.cs:253
msgid "Session established, fetching friend list..."
msgstr "Munkamenet létrejött, barátok listájának letöltése…"
-#: ../extensions/Exporters/FacebookExport/FacebookExportDialog.cs:262
+#: ../extensions/Exporters/FacebookExport/FacebookExportDialog.cs:263
msgid "Session established, fetching friend details..."
msgstr "Munkamenet létrejött, barátok részleteinek letöltése…"
-#: ../extensions/Exporters/FacebookExport/FacebookExportDialog.cs:272
+#: ../extensions/Exporters/FacebookExport/FacebookExportDialog.cs:275
msgid "Session established, fetching photo albums..."
msgstr "Munkamenet létrejött, fényképalbumok letöltése…"
@@ -281,11 +309,11 @@ msgstr "Munkamenet létrejött, fényképalbumok letöltése…"
msgid "{0} {1} is logged into Facebook"
msgstr "{0} {1} bejelentkezett a Facebookba"
-#: ../extensions/Exporters/FacebookExport/FacebookExportDialog.cs:291
+#: ../extensions/Exporters/FacebookExport/FacebookExportDialog.cs:294
msgid "Facebook Connection Error"
msgstr "Facebook kapcsolódási hiba"
-#: ../extensions/Exporters/FacebookExport/FacebookExportDialog.cs:292
+#: ../extensions/Exporters/FacebookExport/FacebookExportDialog.cs:295
#, csharp-format
msgid ""
"There was an error when downloading your information from Facebook.\n"
@@ -296,7 +324,7 @@ msgstr ""
"\n"
"A Facebook válasza: {0}"
-#: ../extensions/Exporters/FacebookExport/FacebookExportDialog.cs:321
+#: ../extensions/Exporters/FacebookExport/FacebookExportDialog.cs:324
msgid "You are not logged in."
msgstr "Nincs bejelentkezve."
@@ -338,7 +366,7 @@ msgid "Logout"
msgstr "Kijelentkezés"
#: ../extensions/Exporters/FacebookExport/FacebookExport.ui.h:10
-#: ../src/Widgets/InfoBox.cs:212
+#: ../src/Widgets/InfoBox.cs:213
msgid "Name"
msgstr "Név"
@@ -374,12 +402,12 @@ msgstr "_Flickr…"
msgid "_Zooomr..."
msgstr "_Zooomr…"
-#: ../extensions/Exporters/FlickrExport/FlickrExport.cs:105
+#: ../extensions/Exporters/FlickrExport/FlickrExport.cs:106
#: ../extensions/Exporters/FlickrExport/FlickrExport.glade.h:5
msgid "Authorize"
msgstr "Felhatalmazás"
-#: ../extensions/Exporters/FlickrExport/FlickrExport.cs:111
+#: ../extensions/Exporters/FlickrExport/FlickrExport.cs:112
#, csharp-format
msgid ""
"Return to this window after you have finished the authorization process on "
@@ -389,60 +417,59 @@ msgstr ""
"történő befejezése után és kattintson az alábbi „Felhatalmazás befejezése” "
"gombra"
-#: ../extensions/Exporters/FlickrExport/FlickrExport.cs:112
+#: ../extensions/Exporters/FlickrExport/FlickrExport.cs:113
msgid "Complete Authorization"
msgstr "Felhatalmazás befejezése"
-#: ../extensions/Exporters/FlickrExport/FlickrExport.cs:117
+#: ../extensions/Exporters/FlickrExport/FlickrExport.cs:118
#, csharp-format
msgid "Logging into {0}"
msgstr "Bejelentkezés a következőre: {0}"
-#: ../extensions/Exporters/FlickrExport/FlickrExport.cs:118
+#: ../extensions/Exporters/FlickrExport/FlickrExport.cs:119
msgid "Checking credentials..."
msgstr "Hitelesítési adatok ellenőrzése…"
-#: ../extensions/Exporters/FlickrExport/FlickrExport.cs:125
+#: ../extensions/Exporters/FlickrExport/FlickrExport.cs:126
#, csharp-format
msgid "Welcome {0} you are connected to {1}"
msgstr "Üdvözlöm {0}, sikeresen csatlakozott a következőre: {1}"
-#: ../extensions/Exporters/FlickrExport/FlickrExport.cs:128
+#: ../extensions/Exporters/FlickrExport/FlickrExport.cs:129
#, csharp-format
msgid "Sign in as a different user"
msgstr "Jelentkezzen be egy másik felhasználóként"
-#: ../extensions/Exporters/FlickrExport/FlickrExport.cs:133
+#: ../extensions/Exporters/FlickrExport/FlickrExport.cs:134
#, csharp-format
msgid "Used {0} of your allowed {1} monthly quota"
msgstr "A havi engedélyezett {1} kvótából felhasználva: {0}"
-#: ../extensions/Exporters/FlickrExport/FlickrExport.cs:297
+#: ../extensions/Exporters/FlickrExport/FlickrExport.cs:298
msgid "Unable to log on"
msgstr "Nem lehet bejelentkezni"
-#: ../extensions/Exporters/FlickrExport/FlickrExport.cs:317
+#: ../extensions/Exporters/FlickrExport/FlickrExport.cs:318
#, csharp-format
msgid "Waiting for response {0} of {1}"
msgstr "{0}/{1} válaszra várakozás"
-#: ../extensions/Exporters/FlickrExport/FlickrExport.cs:344
-#: ../extensions/Exporters/FolderExport/FolderExport.cs:242
+#: ../extensions/Exporters/FlickrExport/FlickrExport.cs:345
#: ../extensions/Exporters/GalleryExport/GalleryExport.cs:777
#, csharp-format
msgid "Uploading picture \"{0}\""
msgstr "„{0}” kép feltöltése"
-#: ../extensions/Exporters/FlickrExport/FlickrExport.cs:367
+#: ../extensions/Exporters/FlickrExport/FlickrExport.cs:368
#, csharp-format
msgid "Error Uploading To {0}: {1}"
msgstr "Hiba a(z) {0} helyre feltöltés közben: {1}"
-#: ../extensions/Exporters/FlickrExport/FlickrExport.cs:454
+#: ../extensions/Exporters/FlickrExport/FlickrExport.cs:455
msgid "Unable to log on."
msgstr "Nem lehet bejelentkezni."
-#: ../extensions/Exporters/FlickrExport/FlickrExport.cs:455
+#: ../extensions/Exporters/FlickrExport/FlickrExport.cs:456
#, csharp-format
msgid ""
"F-Spot was unable to log on to {0}. Make sure you have given the "
@@ -452,7 +479,6 @@ msgstr ""
"megadta a felhatalmazást a(z) {0} webböngésző felületének használatával."
#: ../extensions/Exporters/FlickrExport/FlickrExport.glade.h:1
-#: ../src/f-spot.glade.h:8
msgid "<b>Account</b>"
msgstr "<b>Felhasználói fiók</b>"
@@ -462,7 +488,7 @@ msgstr "<b>Felhasználói fiók</b>"
#: ../extensions/Exporters/PicasaWebExport/PicasaWebExport.glade.h:2
#: ../extensions/Exporters/SmugMugExport/SmugMugExport.glade.h:2
#: ../extensions/Exporters/TabbloExport/ui/TabbloExport.ui.h:2
-#: ../src/f-spot.glade.h:14 ../src/UI.Dialog/ui/AdjustTimeDialog.ui.h:5
+#: ../src/f-spot.glade.h:8 ../src/UI.Dialog/ui/AdjustTimeDialog.ui.h:5
msgid "<b>Photos</b>"
msgstr "<b>Fényképek</b>"
@@ -471,7 +497,7 @@ msgstr "<b>Fényképek</b>"
#: ../extensions/Exporters/GalleryExport/GalleryExport.glade.h:4
#: ../extensions/Exporters/PicasaWebExport/PicasaWebExport.glade.h:4
#: ../extensions/Exporters/SmugMugExport/SmugMugExport.glade.h:4
-#: ../src/f-spot.glade.h:16
+#: ../src/f-spot.glade.h:10
msgid "<b>Style</b>"
msgstr "<b>Stílus</b>"
@@ -484,7 +510,6 @@ msgstr "<b>Jogosultságok megtekintése</b>"
#: ../extensions/Exporters/PicasaWebExport/PicasaWebExport.glade.h:9
#: ../extensions/Exporters/SmugMugExport/SmugMugExport.glade.h:6
#: ../extensions/Exporters/TabbloExport/ui/TabbloExport.ui.h:5
-#: ../src/f-spot.glade.h:44
msgid "Export"
msgstr "Exportálás"
@@ -528,7 +553,6 @@ msgstr "Látható a barátok számára"
#: ../extensions/Exporters/FlickrExport/FlickrExport.glade.h:16
#: ../extensions/Exporters/PicasaWebExport/PicasaWebExport.glade.h:21
-#: ../src/f-spot.glade.h:96
msgid "_Export tags"
msgstr "Címkék ex_portálása"
@@ -537,7 +561,6 @@ msgstr "Címkék ex_portálása"
#: ../extensions/Exporters/GalleryExport/GalleryExport.glade.h:21
#: ../extensions/Exporters/PicasaWebExport/PicasaWebExport.glade.h:25
#: ../extensions/Exporters/SmugMugExport/SmugMugExport.glade.h:15
-#: ../src/f-spot.glade.h:109
msgid "_Resize to: "
msgstr "Át_méretezés: "
@@ -550,7 +573,6 @@ msgstr "Fényképek _megtekintése böngészőben a feltöltés befejezésekor"
#: ../extensions/Exporters/GalleryExport/GalleryExport.glade.h:24
#: ../extensions/Exporters/PicasaWebExport/PicasaWebExport.glade.h:27
#: ../extensions/Exporters/SmugMugExport/SmugMugExport.glade.h:17
-#: ../src/f-spot.glade.h:125
msgid "pixels"
msgstr "képpontra"
@@ -558,80 +580,98 @@ msgstr "képpontra"
msgid "F_older..."
msgstr "Ma_ppa…"
-#: ../extensions/Exporters/FolderExport/FolderExport.cs:140
+#: ../extensions/Exporters/FolderExport/FolderExport.cs:120
msgid "Select Export Folder"
msgstr "Válassza ki az exportálási mappát"
-#: ../extensions/Exporters/FolderExport/FolderExport.cs:198
+#: ../extensions/Exporters/FolderExport/FolderExport.cs:173
msgid "Building Gallery"
msgstr "Galéria felépítése"
-#: ../extensions/Exporters/FolderExport/FolderExport.cs:248
+#: ../extensions/Exporters/FolderExport/FolderExport.cs:217
+#, csharp-format
+msgid "Exporting \"{0}\"..."
+msgstr "„{0}” exportálása…"
+
+#: ../extensions/Exporters/FolderExport/FolderExport.cs:224
+#, csharp-format
+msgid "Error Copying \"{0}\" to Gallery:{2}{1}"
+msgstr "Hiba a(z) „{0}” galériába másolásakor: {2}{1}"
+
+#: ../extensions/Exporters/FolderExport/FolderExport.cs:250
#, csharp-format
-msgid "Error uploading picture \"{0}\" to Gallery:{2}{1}"
-msgstr "Hiba a kép („{0}”) galériába való feltöltése közben: {2}{1}"
+msgid "Transferring to \"{0}\""
+msgstr "Átvitel a következőre: „{0}”"
+
+#: ../extensions/Exporters/FolderExport/FolderExport.cs:251
+msgid "Transferring..."
+msgstr "Átvitel…"
+
+#. No need to check result here as if result is not true, an Exception will be thrown before
+#: ../extensions/Exporters/FolderExport/FolderExport.cs:256
+msgid "Export Complete."
+msgstr "Exportálás kész."
-#: ../extensions/Exporters/FolderExport/FolderExport.cs:333
-msgid "Error: Error while transferring; Aborting"
-msgstr "Átviteli hiba, megszakítás"
+#: ../extensions/Exporters/FolderExport/FolderExport.cs:258
+msgid "Exporting Photos Completed."
+msgstr "Fényképek exportálása kész."
-#: ../extensions/Exporters/FolderExport/FolderExport.cs:336
-msgid "Error: File Already Exists; Aborting"
-msgstr "Hiba: A fájl már létezik, megszakítás"
+#: ../extensions/Exporters/FolderExport/FolderExport.cs:325
+msgid "Exporting Photos"
+msgstr "Fényképek exportálása"
#. Note for translators: light as clear, opposite as dark
-#: ../extensions/Exporters/FolderExport/FolderExport.cs:807
+#: ../extensions/Exporters/FolderExport/FolderExport.cs:743
msgid "Light"
msgstr "Világos"
-#: ../extensions/Exporters/FolderExport/FolderExport.cs:808
+#: ../extensions/Exporters/FolderExport/FolderExport.cs:744
msgid "Dark"
msgstr "Sötét"
#. Abbreviation of previous
-#: ../extensions/Exporters/FolderExport/FolderExport.cs:988
+#: ../extensions/Exporters/FolderExport/FolderExport.cs:924
msgid "Prev"
msgstr "Előző"
-#: ../extensions/Exporters/FolderExport/FolderExport.cs:990
-#: ../extensions/Exporters/FolderExport/FolderExport.cs:1231
-#: ../src/CameraFileSelectionDialog.cs:82
+#: ../extensions/Exporters/FolderExport/FolderExport.cs:926
+#: ../extensions/Exporters/FolderExport/FolderExport.cs:1167
msgid "Index"
msgstr "Index"
#. Don't care otherwise, Tags sounds reasonable
-#: ../extensions/Exporters/FolderExport/FolderExport.cs:993
-#: ../extensions/Exporters/FolderExport/FolderExport.cs:1165
-#: ../extensions/Exporters/FolderExport/FolderExport.cs:1205
-#: ../src/MainWindow.cs:376 ../src/Widgets/Sidebar.cs:56
+#: ../extensions/Exporters/FolderExport/FolderExport.cs:929
+#: ../extensions/Exporters/FolderExport/FolderExport.cs:1101
+#: ../extensions/Exporters/FolderExport/FolderExport.cs:1141
+#: ../src/MainWindow.cs:357 ../src/Widgets/Sidebar.cs:56
msgid "Tags"
msgstr "Címkék"
-#: ../extensions/Exporters/FolderExport/FolderExport.cs:996
-#: ../src/f-spot.glade.h:58 ../src/ItemAction.cs:102
+#: ../extensions/Exporters/FolderExport/FolderExport.cs:932
+#: ../src/ItemAction.cs:102
msgid "Next"
msgstr "Következő"
-#: ../extensions/Exporters/FolderExport/FolderExport.cs:1100
+#: ../extensions/Exporters/FolderExport/FolderExport.cs:1036
msgid "Gallery generated by"
msgstr "A galériát létrehozta:"
-#: ../extensions/Exporters/FolderExport/FolderExport.cs:1140
+#: ../extensions/Exporters/FolderExport/FolderExport.cs:1076
msgid "Show Styles"
msgstr "Stílusok megjelenítése"
-#: ../extensions/Exporters/FolderExport/FolderExport.cs:1141
+#: ../extensions/Exporters/FolderExport/FolderExport.cs:1077
msgid "Hide Styles"
msgstr "Stílusok elrejtése"
-#: ../extensions/Exporters/FolderExport/FolderExport.cs:1176
-#: ../extensions/Exporters/FolderExport/FolderExport.cs:1177
-#: ../src/ui/main_window.ui.h:24
+#: ../extensions/Exporters/FolderExport/FolderExport.cs:1112
+#: ../extensions/Exporters/FolderExport/FolderExport.cs:1113
+#: ../src/ui/main_window.ui.h:25
msgid "Tags: "
msgstr "Címkék: "
-#: ../extensions/Exporters/FolderExport/FolderExport.cs:1308
-#: ../extensions/Exporters/FolderExport/FolderExport.cs:1441
+#: ../extensions/Exporters/FolderExport/FolderExport.cs:1244
+#: ../extensions/Exporters/FolderExport/FolderExport.cs:1377
msgid "Page:"
msgstr "Oldal:"
@@ -640,7 +680,6 @@ msgid "\n"
msgstr "\n"
#: ../extensions/Exporters/FolderExport/FolderExport.glade.h:3
-#: ../src/f-spot.glade.h:11
msgid "<b>Destination</b>"
msgstr "<b>Cél</b>"
@@ -688,11 +727,15 @@ msgstr "_Mappa:"
msgid "_Save the files only"
msgstr "_Csak a fájlok mentése"
+#: ../extensions/Exporters/GalleryExport/FormClient.cs:294
+msgid "Unhandled exception"
+msgstr "Kezeletlen kivétel történt"
+
#: ../extensions/Exporters/GalleryExport/GalleryExport.addin.xml.h:1
msgid "Web _Gallery..."
msgstr "_Webes galéria…"
-#: ../extensions/Exporters/GalleryExport/GalleryExport.cs:52
+#: ../extensions/Exporters/GalleryExport/GalleryExport.cs:53
msgid ""
"Cannot connect to a Gallery for which the version is unknown.\n"
"Please check that you have Remote plugin 1.0.8 or later"
@@ -756,25 +799,25 @@ msgid "Error uploading picture \"{0}\" to Gallery: {1}"
msgstr "Hiba a kép („{0}”) ezen galériába való feltöltésekor: {1}"
#: ../extensions/Exporters/GalleryExport/GalleryExport.cs:824
-#: ../extensions/Exporters/PicasaWebExport/PicasaWebExport.cs:727
+#: ../extensions/Exporters/PicasaWebExport/PicasaWebExport.cs:728
#: ../extensions/Exporters/SmugMugExport/SmugMugExport.cs:630
msgid "(No Gallery)"
msgstr "(Nincs galéria)"
#: ../extensions/Exporters/GalleryExport/GalleryExport.cs:916
-#: ../extensions/Exporters/PicasaWebExport/PicasaWebExport.cs:849
+#: ../extensions/Exporters/PicasaWebExport/PicasaWebExport.cs:850
#: ../extensions/Exporters/SmugMugExport/SmugMugExport.cs:726
msgid "(Not Connected)"
msgstr "(Nincs kapcsolat)"
#: ../extensions/Exporters/GalleryExport/GalleryExport.cs:917
-#: ../extensions/Exporters/PicasaWebExport/PicasaWebExport.cs:850
+#: ../extensions/Exporters/PicasaWebExport/PicasaWebExport.cs:851
#: ../extensions/Exporters/SmugMugExport/SmugMugExport.cs:727
msgid "(No Albums)"
msgstr "(Nincsenek albumok)"
#: ../extensions/Exporters/GalleryExport/GalleryExport.cs:969
-#: ../extensions/Exporters/PicasaWebExport/PicasaWebExport.cs:915
+#: ../extensions/Exporters/PicasaWebExport/PicasaWebExport.cs:916
#: ../extensions/Exporters/SmugMugExport/SmugMugExport.cs:768
msgid "No account selected"
msgstr "Nincs fiók kijelölve"
@@ -782,19 +825,18 @@ msgstr "Nincs fiók kijelölve"
#: ../extensions/Exporters/GalleryExport/GalleryExport.glade.h:1
#: ../extensions/Exporters/PicasaWebExport/PicasaWebExport.glade.h:1
#: ../extensions/Exporters/SmugMugExport/SmugMugExport.glade.h:1
-#: ../src/f-spot.glade.h:9
msgid "<b>Album</b>"
msgstr "<b>Album</b>"
#: ../extensions/Exporters/GalleryExport/GalleryExport.glade.h:2
-#: ../src/f-spot.glade.h:12
msgid "<b>Gallery</b>"
msgstr "<b>Galéria</b>"
#: ../extensions/Exporters/GalleryExport/GalleryExport.glade.h:5
#: ../extensions/Exporters/PicasaWebExport/PicasaWebExport.glade.h:5
msgid "<span weight='bold' size='larger'>Error Connecting to Gallery</span>\n"
-msgstr "<span weight='bold' size='larger'>Hiba a galériához csatlakozáskor</span>\n"
+msgstr ""
+"<span weight='bold' size='larger'>Hiba a galériához csatlakozáskor</span>\n"
#: ../extensions/Exporters/GalleryExport/GalleryExport.glade.h:9
msgid "Export _titles and comments"
@@ -828,7 +870,6 @@ msgstr "_Leírás:"
#: ../extensions/Exporters/GalleryExport/GalleryExport.glade.h:16
#: ../extensions/Exporters/PicasaWebExport/PicasaWebExport.glade.h:22
#: ../extensions/Exporters/SmugMugExport/SmugMugExport.glade.h:13
-#: ../src/f-spot.glade.h:97
msgid "_Export to Album:"
msgstr "E_xportálás ebbe az albumba:"
@@ -863,20 +904,20 @@ msgstr "_Cím:"
msgid "_Username:"
msgstr "_Felhasználónév:"
-#: ../extensions/Exporters/GalleryExport/GalleryRemote.cs:361
+#: ../extensions/Exporters/GalleryExport/GalleryRemote.cs:362
msgid "Error reading server response"
msgstr "Hiba a kiszolgáló válaszának olvasásakor"
#. failed to find the response
-#: ../extensions/Exporters/GalleryExport/GalleryRemote.cs:373
+#: ../extensions/Exporters/GalleryExport/GalleryRemote.cs:374
msgid "Server returned response without Gallery content"
msgstr "A kiszolgáló galériatartalom nélküli választ adott vissza"
-#: ../extensions/Exporters/GalleryExport/GalleryRemote.cs:710
+#: ../extensions/Exporters/GalleryExport/GalleryRemote.cs:711
msgid "Error while creating new album"
msgstr "Hiba az új album létrehozásakor"
-#: ../extensions/Exporters/GalleryExport/GalleryRemote.cs:711
+#: ../extensions/Exporters/GalleryExport/GalleryRemote.cs:712
#, csharp-format
msgid ""
"The following error was encountered while attempting to perform the "
@@ -891,37 +932,38 @@ msgstr ""
msgid "_PicasaWeb..."
msgstr "_PicasaWeb…"
-#: ../extensions/Exporters/PicasaWebExport/PicasaWebExport.cs:441
+#: ../extensions/Exporters/PicasaWebExport/PicasaWebExport.cs:442
msgid "Error while creating Album"
msgstr "Hiba az album létrehozásakor"
-#: ../extensions/Exporters/PicasaWebExport/PicasaWebExport.cs:442
+#: ../extensions/Exporters/PicasaWebExport/PicasaWebExport.cs:443
#, csharp-format
-msgid "The following error was encountered while attempting to create an album: {0}"
+msgid ""
+"The following error was encountered while attempting to create an album: {0}"
msgstr "A következő hiba történt az album létrehozásakor: {0}"
-#: ../extensions/Exporters/PicasaWebExport/PicasaWebExport.cs:620
+#: ../extensions/Exporters/PicasaWebExport/PicasaWebExport.cs:621
#, csharp-format
msgid "{0} Sent"
msgstr "{0} elküldve"
-#: ../extensions/Exporters/PicasaWebExport/PicasaWebExport.cs:622
+#: ../extensions/Exporters/PicasaWebExport/PicasaWebExport.cs:623
#, csharp-format
msgid "{0} of approx. {1}"
msgstr "{0}, összesen kb.: {1}"
-#: ../extensions/Exporters/PicasaWebExport/PicasaWebExport.cs:691
+#: ../extensions/Exporters/PicasaWebExport/PicasaWebExport.cs:692
#: ../extensions/Exporters/SmugMugExport/SmugMugExport.cs:594
#, csharp-format
msgid "Error Uploading To Gallery: {0}"
msgstr "Hiba a galériába való feltöltés közben: {0}"
-#: ../extensions/Exporters/PicasaWebExport/PicasaWebExport.cs:778
+#: ../extensions/Exporters/PicasaWebExport/PicasaWebExport.cs:779
#, csharp-format
msgid "Available space: {0}, {1}% used out of {2}"
msgstr "Elérhető hely: {0}, összesen {2}: {1}% használatban"
-#: ../extensions/Exporters/PicasaWebExport/PicasaWebExport.cs:891
+#: ../extensions/Exporters/PicasaWebExport/PicasaWebExport.cs:892
#, csharp-format
msgid ""
"The selected album has a limit of {0} pictures,\n"
@@ -935,7 +977,8 @@ msgid "<b>PicasaWeb Export</b>"
msgstr "<b>PicasaWeb exportálás</b>"
#: ../extensions/Exporters/PicasaWebExport/PicasaWebExport.glade.h:7
-msgid "<span weight='bold' size='larger'>Your Google Account is locked</span>\n"
+msgid ""
+"<span weight='bold' size='larger'>Your Google Account is locked</span>\n"
msgstr "<span weight='bold' size='larger'>A Google fiókja zárolva van</span>\n"
#: ../extensions/Exporters/PicasaWebExport/PicasaWebExport.glade.h:12
@@ -1074,7 +1117,7 @@ msgid "Compressed fil_e..."
msgstr "_Tömörített fájl…"
#: ../extensions/Exporters/ZipExport/ZipExport.cs:47
-#: ../src/Widgets/EditorPage.cs:197
+#: ../src/Widgets/EditorPage.cs:198
msgid "No selection available"
msgstr "Nem áll rendelkezésre kijelölés"
@@ -1115,6 +1158,10 @@ msgstr "_Hely:"
msgid "_Scale:"
msgstr "Mé_rték:"
+#: ../extensions/Tools/HashJob/HashJob.addin.xml.h:1
+msgid "Check for Duplicates..."
+msgstr "Duplikátumok keresése…"
+
#: ../extensions/Tools/HashJob/HashJob.cs:53
msgid ""
"In order to detect duplicates on pictures you imported before 0.5.0, F-Spot "
@@ -1128,10 +1175,11 @@ msgstr ""
#: ../extensions/Tools/HashJob/HashJob.cs:59
#, csharp-format
-msgid "You currently have {0} photos needing md5 calculation, and {1} pending jobs"
+msgid ""
+"You currently have {0} photos needing md5 calculation, and {1} pending jobs"
msgstr "Jelenleg {0} fénykép vár MD5 számításra és {1} feladat van függőben"
-#: ../extensions/Tools/HashJob/HashJob.cs:75 ../src/ui/main_window.ui.h:37
+#: ../extensions/Tools/HashJob/HashJob.cs:75 ../src/ui/main_window.ui.h:38
msgid "_Close"
msgstr "_Bezárás"
@@ -1143,10 +1191,6 @@ msgstr "Képek feldolgozása…"
msgid "Stopped"
msgstr "Leállítva"
-#: ../extensions/Tools/HashJob/HashJob.addin.xml.h:1
-msgid "Check for Duplicates..."
-msgstr "Duplikátumok keresése…"
-
#: ../extensions/Tools/LiveWebGallery/GalleryRequestHandler.cs:107
msgid "F-Spot Gallery"
msgstr "F-Spot galéria"
@@ -1179,6 +1223,19 @@ msgstr "Kiválasztva"
msgid "Live Web Gallery"
msgstr "Élő webes galéria…"
+#: ../extensions/Tools/LiveWebGallery/LiveWebGalleryDialog.cs:89
+msgid "none"
+msgstr "nincs"
+
+#: ../extensions/Tools/LiveWebGallery/LiveWebGalleryDialog.cs:92
+#, csharp-format
+msgid " Gallery: {0}, Photos: {1}, Last client: {3}"
+msgstr " Galéria: {0}, fényképek: {1}, utolsó kliens: {3}"
+
+#: ../extensions/Tools/LiveWebGallery/LiveWebGalleryDialog.cs:156
+msgid "Gallery is inactive"
+msgstr "A galéria inaktív"
+
#: ../extensions/Tools/LiveWebGallery/ui/LiveWebGallery.ui.h:1
msgid ""
"<small><i>The gallery stays active until you either deactivate it or close\n"
@@ -1241,19 +1298,6 @@ msgstr "Megosztás:"
msgid "Views:"
msgstr "Nézetek:"
-#: ../extensions/Tools/LiveWebGallery/LiveWebGalleryDialog.cs:89
-msgid "none"
-msgstr "nincs"
-
-#: ../extensions/Tools/LiveWebGallery/LiveWebGalleryDialog.cs:92
-#, csharp-format
-msgid " Gallery: {0}, Photos: {1}, Last client: {3}"
-msgstr " Galéria: {0}, fényképek: {1}, utolsó kliens: {3}"
-
-#: ../extensions/Tools/LiveWebGallery/LiveWebGalleryDialog.cs:156
-msgid "Gallery is inactive"
-msgstr "A galéria inaktív"
-
#: ../extensions/Tools/MergeDb/MergeDb.addin.xml.h:1
msgid "Merge Db"
msgstr "Adatbázis összefésülése"
@@ -1342,11 +1386,11 @@ msgid "New Rolls Only"
msgstr "Csak az új körök"
#: ../extensions/Tools/MergeDb/MergeDb.glade.h:15
-#: ../src/FileImportBackend.cs:291 ../src/UI.Dialog/ThreadProgressDialog.cs:58
+#: ../src/UI.Dialog/ThreadProgressDialog.cs:57
msgid "Skip"
msgstr "Kihagyás"
-#: ../extensions/Tools/MergeDb/PickFolderDialog.cs:33
+#: ../extensions/Tools/MergeDb/PickFolderDialog.cs:34
#, csharp-format
msgid ""
"<big>The database refers to files contained in the <b>{0}</b> folder.\n"
@@ -1384,109 +1428,216 @@ msgstr "Az F-Spot legyen a képernyővédő"
msgid "Screensaver Configuration"
msgstr "Képernyővédő beállítása"
-#: ../f-spot.desktop.in.in.h:1 ../f-spot-import.desktop.in.in.h:1
-#: ../f-spot-view.desktop.in.in.h:1 ../src/ui/main_window.ui.h:10
-msgid "F-Spot"
-msgstr "F-Spot"
+#: ../f-spot.schemas.in.h:1
+msgid "Display of transparent parts."
+msgstr "Átlátszó részek megjelenítése."
-#: ../f-spot.desktop.in.in.h:2 ../f-spot-import.desktop.in.in.h:2
-msgid "F-Spot Photo Manager"
-msgstr "F-Spot fotókezelő"
+#: ../f-spot.schemas.in.h:2
+msgid "Enable this to allow interpolation on zoomed images."
+msgstr "A nagyított képek interpolációjának engedélyezése."
-#: ../f-spot.desktop.in.in.h:3
-msgid "Organize, enjoy, and share your photos"
-msgstr "Fényképek rendszerezése, megjelenítése és megosztása"
+#: ../f-spot.schemas.in.h:3
+msgid "Height of the import dialog."
+msgstr "Az importálás ablak magassága."
-#: ../f-spot.desktop.in.in.h:4 ../f-spot-import.desktop.in.in.h:4
-msgid "Photo Manager"
-msgstr "Fényképkezelő"
+#: ../f-spot.schemas.in.h:4
+msgid "Height of the main window."
+msgstr "A fő ablak magassága."
-#: ../f-spot-import.desktop.in.in.h:3
-msgid "Import into F-Spot"
-msgstr "Importálás az F-Spotba"
+#: ../f-spot.schemas.in.h:5
+msgid "Height of the photo viewer window."
+msgstr "A fénykép-megjelenítő ablak magassága."
-#: ../f-spot-view.desktop.in.in.h:2
-msgid "F-Spot Photo Viewer"
-msgstr "F-Spot fotómegjelenítő"
+#: ../f-spot.schemas.in.h:6
+msgid ""
+"If the 'transparency' option is set, the color specified in this option will "
+"be used as the transparent color when viewing images."
+msgstr ""
+"Ha a „transparency” beállítás engedélyezett, akkor az itt megadott szín "
+"kerül felhasználásra átlátszó színként képek megjelenítésekor."
-#: ../f-spot-view.desktop.in.in.h:3
-msgid "Photo Viewer"
-msgstr "Fotómegjelenítő"
+#: ../f-spot.schemas.in.h:7
+msgid "Interpolate image on zoom."
+msgstr "Kép interpolációja nagyításkor."
-#: ../lib/libfspot/f-jpeg-utils.c:441 ../src/RotateCommand.cs:224
-msgid "File not found"
-msgstr "A fájl nem található"
+#: ../f-spot.schemas.in.h:8
+msgid "Maximize the main window."
+msgstr "Főablak maximalizálása."
-#: ../lib/libfspot/f-jpeg-utils.c:464
-#, c-format
-msgid "Unknown transform type %d"
-msgstr "Ismeretlen átalakítási típus: %d"
+#: ../f-spot.schemas.in.h:9
+msgid "Maximize the photo viewer window."
+msgstr "Fénykép-megjelenítő ablak maximalizálása."
-#: ../lib/libfspot/f-jpeg-utils.c:472
-msgid "Operation failed"
-msgstr "A művelet sikertelen"
+#: ../f-spot.schemas.in.h:10
+msgid "Path to custom gtkrc for theming F-Spot."
+msgstr "Az F-Spot témájához használandó egyéni gtkrc útvonala."
-#: ../src/CameraFileSelectionDialog.cs:76
-msgid "Preview"
-msgstr "Előnézet"
+#: ../f-spot.schemas.in.h:11
+msgid "Show dates in the thumbnail view."
+msgstr "Dátumok megjelenítése bélyegkép nézetben."
-#: ../src/CameraFileSelectionDialog.cs:78
-msgid "Path"
-msgstr "Elérési út"
+#: ../f-spot.schemas.in.h:12
+msgid "Show ratings in the thumbnail view."
+msgstr "Értékelések megjelenítése bélyegkép nézetben."
-#: ../src/CameraFileSelectionDialog.cs:80 ../src/f-spot.glade.h:47
-msgid "File"
-msgstr "Fájl"
+#: ../f-spot.schemas.in.h:13
+msgid "Show tags in the thumbnail view."
+msgstr "Címkék megjelenítése bélyegkép nézetben."
-#: ../src/CameraFileSelectionDialog.cs:102
-msgid "Select Tag"
-msgstr "Válasszon egy címkét"
+#: ../f-spot.schemas.in.h:14
+msgid "Show the filename in the viewer window."
+msgstr "Fájlnév megjelenítése a megjelenítő ablakban."
-#: ../src/CameraFileSelectionDialog.cs:138
-msgid "Downloading Previews"
-msgstr "Előnézetek letöltése"
+#: ../f-spot.schemas.in.h:15
+msgid "Show the filmstrip in the main window."
+msgstr "Filmtekercs megjelenítése a fő ablakban."
-#: ../src/CameraFileSelectionDialog.cs:148
-#, csharp-format
-msgid "Downloading Preview of {0}"
-msgstr "{0} előnézetének letöltése"
+#: ../f-spot.schemas.in.h:16
+msgid "Show the sidebar in the main window."
+msgstr "Oldalsáv megjelenítése a fő ablakban."
-#: ../src/CameraFileSelectionDialog.cs:220
-#, csharp-format
-msgid "Copying file {0} of {1}"
-msgstr "{0}/{1} fájl másolása"
+#: ../f-spot.schemas.in.h:17
+msgid "Show the timeline in the main window."
+msgstr "Idővonal megjelenítése a fő ablakban."
-#: ../src/CameraFileSelectionDialog.cs:235
-msgid "Error transferring file"
-msgstr "Hiba a fájl átvitele közben"
+#: ../f-spot.schemas.in.h:18
+msgid "Show the toolbar in the main window."
+msgstr "Eszköztár megjelenítése a fő ablakban."
-#: ../src/CameraFileSelectionDialog.cs:244
-msgid "Download Complete"
-msgstr "Letöltés befejezve"
+#: ../f-spot.schemas.in.h:19
+msgid "Show the toolbar in the photo viewer window."
+msgstr "Eszköztár megjelenítése a fénykép-megjelenítő ablakban."
-#: ../src/CameraFileSelectionDialog.cs:244
-msgid "Done Copying Files"
-msgstr "Fájlok másolása kész"
+#: ../f-spot.schemas.in.h:20
+msgid "Size of the tag icons shown in the sidebar."
+msgstr "Az oldalsávban megjelenő címkeikonok mérete."
-#: ../src/CameraFileSelectionDialog.cs:268
-#, csharp-format
-msgid "Transferring \"{0}\" from camera"
-msgstr "„{0}” átvitele a fényképezőgéptől"
+#: ../f-spot.schemas.in.h:21
+msgid "The X position to use for the main window."
+msgstr "A fő ablakhoz használandó X pozíció."
-#: ../src/CameraSelectionDialog.cs:29 ../src/Widgets/InfoBox.cs:231
-msgid "Camera"
-msgstr "Fényképezőgép"
+#: ../f-spot.schemas.in.h:22
+msgid "The X position to use for the photo viewer window."
+msgstr "A fénykép-megjelenítő ablakhoz használandó X pozíció."
+
+#: ../f-spot.schemas.in.h:23
+msgid "The Y position to use for the main window."
+msgstr "A fő ablakhoz használandó Y pozíció."
+
+#: ../f-spot.schemas.in.h:24
+msgid "The Y position to use for the photo viewer window."
+msgstr "A fénykép-megjelenítő ablakhoz használandó Y pozíció."
+
+#: ../f-spot.schemas.in.h:25
+msgid "The color to use for transparent parts."
+msgstr "Az átlátszó részekhez használandó szín."
+
+#: ../f-spot.schemas.in.h:26
+msgid "The height dimension to use for the import dialog."
+msgstr "Az importálási ablakhoz használandó magasság."
+
+#: ../f-spot.schemas.in.h:27
+msgid "The height dimension to use for the main window."
+msgstr "A fő ablakhoz használandó magasság."
+
+#: ../f-spot.schemas.in.h:28
+msgid "The height dimension to use for the photo viewer window."
+msgstr "A fénykép-megjelenítő ablakhoz használandó magasság."
+
+#: ../f-spot.schemas.in.h:29
+msgid "The orientation of the filmstrip, if shown."
+msgstr "A filmtekercs tájolása, ha látható."
+
+#: ../f-spot.schemas.in.h:30
+msgid "The orientation of the filmstrip."
+msgstr "A filmtekercs tájolása."
+
+#: ../f-spot.schemas.in.h:31
+msgid "The size (width) of the sidebar in the main window."
+msgstr "A főablak oldalsávjának mérete (szélessége)."
+
+#: ../f-spot.schemas.in.h:32
+msgid "The size of the sidebar in the main window."
+msgstr "A főablak oldalsávjának mérete."
+
+#: ../f-spot.schemas.in.h:33
+msgid "The width dimension to use for the import dialog."
+msgstr "Az importálási ablakhoz használandó szélesség."
+
+#: ../f-spot.schemas.in.h:34
+msgid "The width dimension to use for the main window."
+msgstr "A fő ablakhoz használandó szélesség."
+
+#: ../f-spot.schemas.in.h:35
+msgid "The width dimension to use for the photo viewer window."
+msgstr "A fénykép-megjelenítő ablakhoz használandó szélesség."
+
+#: ../f-spot.schemas.in.h:36
+msgid "Use the current photo's filename as the viewer window's title."
+msgstr "Az aktuális kép fájlnevének használata a megjelenítő ablak címeként."
+
+#: ../f-spot.schemas.in.h:37
+msgid "Width of the import dialog."
+msgstr "Az importálás ablak szélessége."
+
+#: ../f-spot.schemas.in.h:38
+msgid "Width of the main window."
+msgstr "A fő ablak szélessége."
-#: ../src/CameraSelectionDialog.cs:30
-msgid "Port"
-msgstr "Port"
+#: ../f-spot.schemas.in.h:39
+msgid "Width of the photo viewer window."
+msgstr "A fénykép-megjelenítő ablak szélessége."
-#: ../src/Core/App.cs:278
+#: ../f-spot.schemas.in.h:40
+msgid "Width of the preview image pane in the import dialog."
+msgstr "Az importálás ablak képelőnézet ablaktáblájának szélessége."
+
+#: ../f-spot.schemas.in.h:41
+msgid "X position of the main window."
+msgstr "A fő ablak X pozíciója."
+
+#: ../f-spot.schemas.in.h:42
+msgid "X position of the photo viewer window."
+msgstr "A fénykép-megjelenítő ablak X pozíciója."
+
+#: ../f-spot.schemas.in.h:43
+msgid "Y position of the main window."
+msgstr "A fő ablak Y pozíciója."
+
+#: ../f-spot.schemas.in.h:44
+msgid "Y position of the photo viewer window."
+msgstr "A fénykép-megjelenítő ablak Y pozíciója."
+
+#: ../f-spot.schemas.in.h:45
+msgid ""
+"You can choose how to display transparent parts in images. This option has "
+"no effect on photos but setting this value to CHECK_PATTERN or CUSTOM_COLOR "
+"could be useful when viewing icons or other artwork with transparent parts."
+msgstr ""
+"Kiválaszthatja a képek átlátszó részeinek megjelenítési módját. Ennek a "
+"beállításnak nincs hatása fényképekre, de CHECK_PATTERN (sakkminta) vagy "
+"CUSTOM_COLOR (egyéni szín) értékre állítása hasznos lehet ikonok vagy más "
+"átlátszó részekkel rendelkező grafikák megjelenítésekor."
+
+#: ../lib/libfspot/f-jpeg-utils.c:441 ../src/RotateCommand.cs:211
+msgid "File not found"
+msgstr "A fájl nem található"
+
+#: ../lib/libfspot/f-jpeg-utils.c:464
+#, c-format
+msgid "Unknown transform type %d"
+msgstr "Ismeretlen átalakítási típus: %d"
+
+#: ../lib/libfspot/f-jpeg-utils.c:472
+msgid "Operation failed"
+msgstr "A művelet sikertelen"
+
+#: ../src/Core/App.cs:274
#, csharp-format
msgid "No photos matching {0} found"
msgstr "Nem találhatóak a következőre illeszkedő fényképek: {0}"
-#: ../src/Core/App.cs:279
+#: ../src/Core/App.cs:275
#, csharp-format
msgid ""
"The tag \"{0}\" is not applied to any photos. Try adding\n"
@@ -1497,11 +1648,11 @@ msgstr ""
"hozzáadni a címkét néhány fényképhez, vagy válasszon másik címkét az\n"
"F-Spot beállításablakában."
-#: ../src/Core/App.cs:283
+#: ../src/Core/App.cs:279
msgid "Search returned no results"
msgstr "A keresés nem adott vissza eredményeket"
-#: ../src/Core/App.cs:284
+#: ../src/Core/App.cs:280
msgid ""
"The tag F-Spot is looking for does not exist. Try\n"
"selecting a different tag in the F-Spot preference\n"
@@ -1512,35 +1663,30 @@ msgstr ""
# fixme techblabla
#. Note for translators: Reparented is a picture becoming a version of another one
-#: ../src/Core/Photo.cs:473
+#: ../src/Core/Photo.cs:362
msgid "Reparented"
msgstr "Örökbe adva"
-#: ../src/Core/Photo.cs:473
-#, csharp-format
-msgid "Reparented ({0})"
-msgstr "Örökbe adva ({0})"
-
-#: ../src/Core/Photo.cs:492
+#: ../src/Core/Photo.cs:378
#, csharp-format
msgid "Modified"
msgid_plural "Modified ({0})"
msgstr[0] "Módosított"
msgstr[1] "Módosított ({0})"
-#: ../src/Core/Photo.cs:513
+#: ../src/Core/Photo.cs:401
#, csharp-format
msgid "Modified in {1}"
msgstr "Módosítva ekkor: {1}"
-#: ../src/Core/Photo.cs:513
+#: ../src/Core/Photo.cs:401
#, csharp-format
msgid "Modified in {1} ({0})"
msgstr "Módosítva ekkor: {1} ({0})"
#. Note that the original version is never stored in the photo_versions table in the
#. database.
-#: ../src/Core/Photo.cs:671 ../src/f-spot.glade.h:62
+#: ../src/Core/Photo.cs:571 ../src/f-spot.glade.h:39
msgid "Original"
msgstr "Eredeti"
@@ -1556,43 +1702,43 @@ msgstr "Színek módosítása"
msgid "Adjust"
msgstr "Módosítás"
-#: ../src/Editors/CropEditor.cs:35
+#: ../src/Editors/CropEditor.cs:36
msgid "4 x 3 (Book)"
msgstr "4 x 3 (könyv)"
-#: ../src/Editors/CropEditor.cs:36
+#: ../src/Editors/CropEditor.cs:37
msgid "4 x 6 (Postcard)"
msgstr "4 × 6 (képeslap)"
-#: ../src/Editors/CropEditor.cs:37
+#: ../src/Editors/CropEditor.cs:38
msgid "5 x 7 (L, 2L)"
msgstr "5 x 7 (L, 2L)"
-#: ../src/Editors/CropEditor.cs:38
+#: ../src/Editors/CropEditor.cs:39
msgid "8 x 10"
msgstr "8 × 10"
-#: ../src/Editors/CropEditor.cs:39
+#: ../src/Editors/CropEditor.cs:40
msgid "Square"
msgstr "Négyzet"
-#: ../src/Editors/CropEditor.cs:42
+#: ../src/Editors/CropEditor.cs:43
msgid "Crop"
msgstr "Levágás"
-#: ../src/Editors/CropEditor.cs:73
+#: ../src/Editors/CropEditor.cs:74
msgid "Select the area that needs cropping."
msgstr "Válasszon egy területet a levágáshoz."
-#: ../src/Editors/CropEditor.cs:98
+#: ../src/Editors/CropEditor.cs:99
msgid "No Constraint"
msgstr "Nincs megszorítás"
-#: ../src/Editors/CropEditor.cs:99
+#: ../src/Editors/CropEditor.cs:100
msgid "Same as photo"
msgstr "Ugyanaz, mint a fénykép"
-#: ../src/Editors/CropEditor.cs:104
+#: ../src/Editors/CropEditor.cs:105
msgid "Custom Ratios..."
msgstr "Egyéni arányok…"
@@ -1624,24 +1770,11 @@ msgstr "Lágy fókusz"
msgid "Straighten"
msgstr "Kiegyenesítés"
-#: ../src/FileImportBackend.cs:289
-msgid "Import error"
-msgstr "Importálási hiba"
-
-#: ../src/FileImportBackend.cs:290
-#, csharp-format
-msgid "Error importing {0}{2}{2}{1}"
-msgstr "Hiba a(z) {0}{2}{2}{1} importálása során"
-
#: ../src/Filters/ResizeFilter.cs:70 ../src/Filters/SharpFilter.cs:52
#, csharp-format
msgid "No way to save files of type \"{0}\""
msgstr "Nem lehet menteni a(z) „{0}” típusú fájlokat"
-#: ../src/FormClient.cs:295
-msgid "Unhandled exception"
-msgstr "Kezeletlen kivétel történt"
-
#: ../src/FSpot.addin.xml.h:1
msgid "Copy Photo"
msgstr "Fénykép másolása"
@@ -1654,17 +1787,17 @@ msgstr "Exportálás:"
msgid "Open _With"
msgstr "Megnyitás _ezzel"
-#: ../src/FSpot.addin.xml.h:4 ../src/ui/main_window.ui.h:15
+#: ../src/FSpot.addin.xml.h:4 ../src/ui/main_window.ui.h:16
msgid "Rem_ove Tag"
msgstr "Cí_mke törlése"
-#: ../src/FSpot.addin.xml.h:5 ../src/f-spot.glade.h:69
-#: ../src/SingleView.cs:425 ../src/ui/main_window.ui.h:16
+#: ../src/FSpot.addin.xml.h:5 ../src/f-spot.glade.h:44
+#: ../src/SingleView.cs:425 ../src/ui/main_window.ui.h:17
msgid "Rotate _Left"
msgstr "Forgatás b_alra"
-#: ../src/FSpot.addin.xml.h:6 ../src/f-spot.glade.h:70
-#: ../src/SingleView.cs:426 ../src/ui/main_window.ui.h:17
+#: ../src/FSpot.addin.xml.h:6 ../src/f-spot.glade.h:45
+#: ../src/SingleView.cs:426 ../src/ui/main_window.ui.h:18
msgid "Rotate _Right"
msgstr "Forgatás j_obbra"
@@ -1672,75 +1805,63 @@ msgstr "Forgatás j_obbra"
msgid "Tools"
msgstr "Eszközök"
-#: ../src/FSpot.addin.xml.h:8 ../src/ui/main_window.ui.h:32
-msgid "_Attach Tag"
-msgstr "_Címke csatolása"
-
-#: ../src/FSpot.addin.xml.h:9 ../src/ui/main_window.ui.h:41
+#: ../src/FSpot.addin.xml.h:8 ../src/ui/main_window.ui.h:42
msgid "_Delete From Drive"
msgstr "_Törlés a lemezről"
-#: ../src/FSpot.addin.xml.h:10 ../src/ui/main_window.ui.h:59
+#: ../src/FSpot.addin.xml.h:9 ../src/ui/main_window.ui.h:61
msgid "_Remove From Catalog"
msgstr "Eltávolítás a _katalógusból"
#: ../src/f-spot.glade.h:1
-msgid " "
-msgstr " "
-
-#: ../src/f-spot.glade.h:2
msgid "1024 px"
msgstr "1024 kp"
-#: ../src/f-spot.glade.h:3
+#: ../src/f-spot.glade.h:2
msgid "320 px"
msgstr "320 kp"
-#: ../src/f-spot.glade.h:4
+#: ../src/f-spot.glade.h:3
msgid "480 px"
msgstr "480 kp"
-#: ../src/f-spot.glade.h:5
+#: ../src/f-spot.glade.h:4
msgid "640 px"
msgstr "640 kp"
-#: ../src/f-spot.glade.h:6
+#: ../src/f-spot.glade.h:5
msgid "800 px"
msgstr "800 kp"
-#: ../src/f-spot.glade.h:7
-msgid "<b></b>"
-msgstr "<b></b>"
-
-#: ../src/f-spot.glade.h:10
+#: ../src/f-spot.glade.h:6
msgid "<b>Co_rrections</b>"
msgstr "<b>_Javítások</b>"
-#: ../src/f-spot.glade.h:13
+#: ../src/f-spot.glade.h:7
msgid "<b>Image Interpolation</b>"
msgstr "<b>Képinterpoláció</b>"
-#: ../src/f-spot.glade.h:15
+#: ../src/f-spot.glade.h:9
msgid "<b>Size</b>"
msgstr "<b>Méret</b>"
-#: ../src/f-spot.glade.h:17
+#: ../src/f-spot.glade.h:11
msgid "<b>Summary</b>"
msgstr "<b>Összefoglaló</b>"
-#: ../src/f-spot.glade.h:18
+#: ../src/f-spot.glade.h:12
msgid "<b>Transparent Parts</b>"
msgstr "<b>Átlátszó részek</b>"
-#: ../src/f-spot.glade.h:19
+#: ../src/f-spot.glade.h:13
msgid "<b>View all pictures imported</b>"
msgstr "<b>Az összes importált kép megjelenítése</b>"
-#: ../src/f-spot.glade.h:20
+#: ../src/f-spot.glade.h:14
msgid "<b>_White Balance</b>"
msgstr "<b>_Fehéregyensúly</b>"
-#: ../src/f-spot.glade.h:21
+#: ../src/f-spot.glade.h:15
msgid ""
"<small><i>Enable this to allow interpolation on zoomed images. You shouldn't "
"disable this for viewing photos, but disabling the interpolation could be "
@@ -1750,7 +1871,7 @@ msgstr ""
"bekapcsolásához. Ezt nem szükséges kikapcsolni fényképek megjelenítéséhez, "
"de hasznos lehet ikonok tervezésekor.</i></small>"
-#: ../src/f-spot.glade.h:22
+#: ../src/f-spot.glade.h:16
msgid ""
"<small><i>You can choose how to display transparent parts in images. This "
"option has no effect on photos, but setting this as check pattern or custom "
@@ -1759,216 +1880,143 @@ msgid ""
msgstr ""
"<small><i>Kiválaszthatja a képek átlátszó részeinek megjelenítési módját. "
"Ennek a beállításnak nincs hatása fényképekre, de sakkmintára vagy egyéni "
-"színre állítása hasznos lehet ikonok vagy más áttetsző részekkel rendelkező "
+"színre állítása hasznos lehet ikonok vagy más átlátszó részekkel rendelkező "
"grafikák megjelenítésekor.</i></small>"
-#: ../src/f-spot.glade.h:23
+#: ../src/f-spot.glade.h:17
msgid "As _background"
msgstr "_Háttérként"
-#: ../src/f-spot.glade.h:24
+#: ../src/f-spot.glade.h:18
msgid "As _custom color: "
msgstr "Eg_yéni színként: "
-#: ../src/f-spot.glade.h:25
+#: ../src/f-spot.glade.h:19
msgid "As check _pattern"
msgstr "_Rácsmintaként"
-#: ../src/f-spot.glade.h:26
-msgid "Attach Tags:"
-msgstr "Címkék csatolása:"
-
-#: ../src/f-spot.glade.h:27
-msgid "Attach tag:"
-msgstr "Címke csatolása:"
-
-#: ../src/f-spot.glade.h:29
-msgid "CD"
-msgstr "CD"
-
-#: ../src/f-spot.glade.h:30
+#: ../src/f-spot.glade.h:21
msgid "C_ontrast:"
msgstr "_Kontraszt:"
-#: ../src/f-spot.glade.h:31
+#: ../src/f-spot.glade.h:22
msgid "C_reate"
msgstr "_Létrehozás"
-#: ../src/f-spot.glade.h:32
-msgid "Camera Selection"
-msgstr "Válasszon fényképezőgépet"
-
-#: ../src/f-spot.glade.h:33
-msgid "Copy files to the Photos folder"
-msgstr "Fájlok másolása a Fényképek mappába"
-
-#: ../src/f-spot.glade.h:34
+#: ../src/f-spot.glade.h:23
msgid "Create Mail"
msgstr "Levél létrehozása"
-#: ../src/f-spot.glade.h:35
+#: ../src/f-spot.glade.h:24
msgid "Create _icon for this tag when first used"
msgstr "I_kon létrehozása címkéhez annak első használatakor"
-#: ../src/f-spot.glade.h:36
+#: ../src/f-spot.glade.h:25
msgid "Create a mail with the selected photos (possibly resized) attached"
-msgstr "Levél létrehozása, csatolva a kijelölt (esetleg átméretezett) fényképeket"
-
-#: ../src/f-spot.glade.h:37
-msgid "Detect duplicates"
-msgstr "Másolatok felismerése"
+msgstr ""
+"Levél létrehozása, csatolva a kijelölt (esetleg átméretezett) fényképeket"
-#: ../src/f-spot.glade.h:38
+#: ../src/f-spot.glade.h:26
msgid "Display File _Names"
msgstr "_Fájlnevek megjelenítése"
-#: ../src/f-spot.glade.h:39
+#: ../src/f-spot.glade.h:27
msgid "Display only those photos that were imported in specified Rolls."
msgstr "Csak az adott körökben importált fényképek megjelenítése."
-#: ../src/f-spot.glade.h:40
+#: ../src/f-spot.glade.h:28
msgid "Do not send a mail"
msgstr "Nincs levélküldés"
-#: ../src/f-spot.glade.h:41
-msgid "E-_Mail:"
-msgstr "E-_mail:"
-
-#: ../src/f-spot.glade.h:42
-msgid "E_xport titles and comments"
-msgstr "Címek és _megjegyzések exportálása"
-
-#: ../src/f-spot.glade.h:43
+#: ../src/f-spot.glade.h:29
msgid "Estimated new size"
msgstr "Becsült új méret"
-#: ../src/f-spot.glade.h:45
+#: ../src/f-spot.glade.h:30
msgid "Extra large"
msgstr "Extra nagy"
-#: ../src/f-spot.glade.h:46
+#: ../src/f-spot.glade.h:31
msgid "F-Spot View"
msgstr "F-Spot nézet"
-#: ../src/f-spot.glade.h:48
+#: ../src/f-spot.glade.h:32
msgid "Filter on selected rolls"
msgstr "Szűrés kiválasztott körök alapján"
-#: ../src/f-spot.glade.h:49
-msgid "G_allery:"
-msgstr "G_aléria:"
-
-#: ../src/f-spot.glade.h:50
-msgid "Gallery"
-msgstr "Galéria"
-
-#: ../src/f-spot.glade.h:51 ../src/ImportCommand.cs:547
-#: ../src/MainWindow.cs:301
-msgid "Import"
-msgstr "Importálás"
-
-#. Translators: this string means 'source of import'
-#: ../src/f-spot.glade.h:53
-msgid "Import Source:"
-msgstr "Importálás forrása:"
-
-#: ../src/f-spot.glade.h:54
-msgid "Include subfolders"
-msgstr "Alkönyvtárakkal együtt"
-
-#: ../src/f-spot.glade.h:55
+#: ../src/f-spot.glade.h:33
msgid "Large"
msgstr "Nagy"
-#: ../src/f-spot.glade.h:56
+#: ../src/f-spot.glade.h:34
msgid "Manage your custom selection ratios"
msgstr "Egyéni kiválasztási arányok kezelése"
-#: ../src/f-spot.glade.h:57
+#: ../src/f-spot.glade.h:35
msgid "Medium"
msgstr "Közepes"
-#: ../src/f-spot.glade.h:59
+#: ../src/f-spot.glade.h:36
msgid "Number of photos in selected rolls:"
msgstr "Fényképek száma a kijelölt körökben:"
-#: ../src/f-spot.glade.h:60
+#: ../src/f-spot.glade.h:37
msgid "Number of pictures"
msgstr "Képek száma"
-#: ../src/f-spot.glade.h:61
+#: ../src/f-spot.glade.h:38
msgid "Open _Folder..."
msgstr "Ma_ppa megnyitása…"
-#: ../src/f-spot.glade.h:63
+#: ../src/f-spot.glade.h:40
msgid "Original size (possible very large file size)"
msgstr "Eredeti méret (előfordulhat nagyon nagy fájlméret)"
-#: ../src/f-spot.glade.h:64 ../src/UI.Dialog/ui/EditTagDialog.ui.h:4
+#: ../src/f-spot.glade.h:41 ../src/UI.Dialog/ui/EditTagDialog.ui.h:4
msgid "P_arent Tag:"
msgstr "Szülőcí_mke:"
-#: ../src/f-spot.glade.h:65
-msgid "Pause"
-msgstr "Szünet"
-
-#: ../src/f-spot.glade.h:66
+#: ../src/f-spot.glade.h:42
msgid "Preferences"
msgstr "Beállítások"
-#: ../src/f-spot.glade.h:67 ../src/ItemAction.cs:123
-msgid "Previous"
-msgstr "Előző"
-
-#: ../src/f-spot.glade.h:68
+#: ../src/f-spot.glade.h:43
msgid "Repair"
msgstr "Javítás"
-#: ../src/f-spot.glade.h:71
-msgid "Select Photos to Copy From Camera..."
-msgstr "Válassza ki a fényképezőgépről másolandó fényképeket…"
-
-#: ../src/f-spot.glade.h:72
+#: ../src/f-spot.glade.h:46
msgid "Select a Tag..."
msgstr "Válasszon ki egy címkét…"
-#: ../src/f-spot.glade.h:73
-msgid "Select the camera from which you want to transfer files"
-msgstr "Válassza ki a fényképezőgépet, amelyről át akarja vinni a fájlokat"
-
-#: ../src/f-spot.glade.h:74
-msgid "Selected Camera: "
-msgstr "Kijelölt fényképezőgép: "
-
-#: ../src/f-spot.glade.h:75
+#: ../src/f-spot.glade.h:47
msgid "Selection Constraints"
msgstr "Kiválasztási megszorítások"
-#: ../src/f-spot.glade.h:76 ../src/ui/main_window.ui.h:21
+#: ../src/f-spot.glade.h:48 ../src/ui/main_window.ui.h:22
msgid "Set as _Background"
msgstr "Beállítás _háttérként"
-#: ../src/f-spot.glade.h:77
+#: ../src/f-spot.glade.h:49
msgid "Show all photos."
msgstr "Minden fénykép megjelenítése."
-#: ../src/f-spot.glade.h:78
+#: ../src/f-spot.glade.h:50
msgid "Show or hide the side pane"
msgstr "Az oldalsáv mutatása vagy rejtése"
-#: ../src/f-spot.glade.h:79
+#: ../src/f-spot.glade.h:51
msgid "Show or hide the toolbar"
msgstr "Az eszköztár mutatása vagy rejtése"
-#: ../src/f-spot.glade.h:80
+#: ../src/f-spot.glade.h:52
msgid "Side _pane"
msgstr "_Oldalsáv"
-#: ../src/f-spot.glade.h:81
+#: ../src/f-spot.glade.h:53
msgid "Small"
msgstr "Kicsi"
-#: ../src/f-spot.glade.h:82
+#: ../src/f-spot.glade.h:54
msgid ""
"Specify if an original size picture should be rotated or not. Smaller sizes "
"are automatically rotated."
@@ -1976,141 +2024,105 @@ msgstr ""
"Adja meg, hogy az eredeti méretű képeket kell-e forgatni. A kisebb méretek "
"automatikusan forgatásra kerülnek."
-#: ../src/f-spot.glade.h:83
-msgid "Strip image _metadata"
-msgstr "Kép _metaadatainak eltávolítása"
-
#. Note for translators: meant as Temperature
-#: ../src/f-spot.glade.h:85
+#: ../src/f-spot.glade.h:56
msgid "Te_mp:"
msgstr "Hő_m:"
-#: ../src/f-spot.glade.h:86
+#: ../src/f-spot.glade.h:57
msgid "Tiny"
msgstr "Apró"
-#: ../src/f-spot.glade.h:87
+#: ../src/f-spot.glade.h:58
msgid "Total original size"
msgstr "Teljes eredeti méret"
-#: ../src/f-spot.glade.h:88 ../src/ui/main_window.ui.h:28
+#: ../src/f-spot.glade.h:59 ../src/ui/main_window.ui.h:29
msgid "Zoom _in"
msgstr "_Nagyítás"
-#: ../src/f-spot.glade.h:89 ../src/ui/main_window.ui.h:29
+#: ../src/f-spot.glade.h:60 ../src/ui/main_window.ui.h:30
msgid "Zoom _out"
msgstr "_Kicsinyítés"
-#: ../src/f-spot.glade.h:90 ../src/ui/main_window.ui.h:30
+#: ../src/f-spot.glade.h:61 ../src/ui/main_window.ui.h:31
msgid "Zoom in"
msgstr "Nagyítás"
-#: ../src/f-spot.glade.h:91 ../src/ui/main_window.ui.h:31
+#: ../src/f-spot.glade.h:62 ../src/ui/main_window.ui.h:32
msgid "Zoom out"
msgstr "Kicsinyítés"
-#: ../src/f-spot.glade.h:92
+#: ../src/f-spot.glade.h:63
msgid "_Brightness:"
msgstr "_Fényesség:"
-#: ../src/f-spot.glade.h:93
+#: ../src/f-spot.glade.h:64
msgid "_Create Mail"
msgstr "_Levél létrehozása"
-#: ../src/f-spot.glade.h:94 ../src/ui/main_window.ui.h:44
+#: ../src/f-spot.glade.h:65 ../src/ui/main_window.ui.h:45
msgid "_Edit"
msgstr "S_zerkesztés"
-#: ../src/f-spot.glade.h:98
+#: ../src/f-spot.glade.h:67
msgid "_Exposure:"
msgstr "_Expozíció:"
-#: ../src/f-spot.glade.h:99
-msgid "_Flickr"
-msgstr "_Flickr"
-
-#: ../src/f-spot.glade.h:100 ../src/ui/main_window.ui.h:48
+#: ../src/f-spot.glade.h:68 ../src/ui/main_window.ui.h:49
msgid "_Fullscreen"
msgstr "_Teljes képernyő"
-#: ../src/f-spot.glade.h:101
-msgid "_Gallery"
-msgstr "G_aléria"
-
-#: ../src/f-spot.glade.h:102 ../src/ui/main_window.ui.h:49
+#: ../src/f-spot.glade.h:69 ../src/ui/main_window.ui.h:50
msgid "_Help"
msgstr "_Súgó"
-#: ../src/f-spot.glade.h:103
+#: ../src/f-spot.glade.h:70
msgid "_Hue:"
msgstr "Ár_nyalat:"
-#: ../src/f-spot.glade.h:104
+#: ../src/f-spot.glade.h:71
msgid "_Interpolate image on zoom"
msgstr "Ké_p interpolációja nagyításkor"
-#: ../src/f-spot.glade.h:105
+#: ../src/f-spot.glade.h:72
msgid "_New Window"
msgstr "Új _ablak"
-#: ../src/f-spot.glade.h:106
-msgid "_Open album in browser when done uploading"
-msgstr "Az _album megnyitása böngészőben a feltöltés befejezésekor"
-
-#: ../src/f-spot.glade.h:107
-msgid "_Open destination when done exporting"
-msgstr "_Cél megnyitása az exportálás befejezésekor"
-
-#: ../src/f-spot.glade.h:108 ../src/ui/main_window.ui.h:56
+#: ../src/f-spot.glade.h:73 ../src/ui/main_window.ui.h:58
msgid "_Photo"
msgstr "_Fénykép"
-#: ../src/f-spot.glade.h:110
+#: ../src/f-spot.glade.h:74
msgid "_Saturation:"
msgstr "_Telítettség:"
-#: ../src/f-spot.glade.h:111
-msgid "_Scale photos to no larger than: "
-msgstr "Fényképek méretezése nem _nagyobbra, mint: "
-
-#: ../src/f-spot.glade.h:112 ../src/ui/main_window.ui.h:67
+#: ../src/f-spot.glade.h:75 ../src/ui/main_window.ui.h:69
msgid "_Slideshow"
msgstr "_Diavetítés"
-#: ../src/f-spot.glade.h:113
-msgid "_Strip metadata"
-msgstr "Metaa_datok eltávolítása"
-
-#: ../src/f-spot.glade.h:114 ../src/UI.Dialog/ui/EditTagDialog.ui.h:6
+#: ../src/f-spot.glade.h:76 ../src/UI.Dialog/ui/EditTagDialog.ui.h:6
msgid "_Tag Name:"
msgstr "Címke _neve:"
-#: ../src/f-spot.glade.h:115
+#: ../src/f-spot.glade.h:77
msgid "_Tint:"
msgstr "Ár_nyalat:"
-#: ../src/f-spot.glade.h:116
+#: ../src/f-spot.glade.h:78
msgid "_Toolbar"
msgstr "_Eszköztár"
-#: ../src/f-spot.glade.h:117
-msgid "_URI:"
-msgstr "_URI:"
-
-#: ../src/f-spot.glade.h:118 ../src/ui/main_window.ui.h:75
+#: ../src/f-spot.glade.h:79 ../src/ui/main_window.ui.h:77
msgid "_View"
msgstr "_Nézet"
-#: ../src/f-spot.glade.h:119
-msgid "_Virtual Filesystem"
-msgstr "_Virtuális fájlrendszer"
-
-#: ../src/f-spot.glade.h:120 ../src/Widgets/FindBar.cs:177
+#: ../src/f-spot.glade.h:80 ../src/Widgets/FindBar.cs:177
msgid "and"
msgstr "és"
#. at, or after a date, or between dates
-#: ../src/f-spot.glade.h:122
+#: ../src/f-spot.glade.h:82
msgid ""
"at\n"
"after\n"
@@ -2120,40 +2132,36 @@ msgstr ""
"ezután\n"
"ezek közt"
-#: ../src/f-spot.glade.h:126
-msgid "x"
-msgstr "x"
-
-#: ../src/FullScreenView.cs:58
+#: ../src/FullScreenView.cs:59
msgid "Hide"
msgstr "Elrejtés"
-#: ../src/FullScreenView.cs:60
+#: ../src/FullScreenView.cs:61
msgid "Hide Toolbar"
msgstr "Eszköztár elrejtése"
-#: ../src/FullScreenView.cs:66
+#: ../src/FullScreenView.cs:67
msgid "Info"
msgstr "Információk"
-#: ../src/FullScreenView.cs:68 ../src/Widgets/InfoBox.cs:201
+#: ../src/FullScreenView.cs:69 ../src/Widgets/InfoBox.cs:202
msgid "Image Information"
msgstr "Képinformációk"
-#: ../src/FullScreenView.cs:73
+#: ../src/FullScreenView.cs:74
msgid "Exit fullscreen"
msgstr "Kilépés a teljes képernyőből"
-#: ../src/FullScreenView.cs:81 ../src/MainWindow.cs:341
-#: ../src/SingleView.cs:88
+#: ../src/FullScreenView.cs:82 ../src/MainWindow.cs:322
+#: ../src/SingleView.cs:89
msgid "Slideshow"
msgstr "Diavetítés"
-#: ../src/FullScreenView.cs:82
+#: ../src/FullScreenView.cs:83
msgid "Start slideshow"
msgstr "Diavetítés indítása"
-#: ../src/FullScreenView.cs:128
+#: ../src/FullScreenView.cs:129
msgid "Slide transition:"
msgstr "Diaátmenet:"
@@ -2165,35 +2173,35 @@ msgstr "További dátumok"
msgid "More"
msgstr "További"
-#: ../src/GroupSelector.cs:517 ../src/ui/main_window.ui.h:34
+#: ../src/GroupSelector.cs:517 ../src/ui/main_window.ui.h:35
msgid "_Clear Date Range"
msgstr "Dátumtartomány _törlése"
-#: ../src/Imaging/Exif.cs:228
+#: ../src/Imaging/Exif.cs:229
msgid "Image Directory"
msgstr "Képek könyvtára"
-#: ../src/Imaging/Exif.cs:230
+#: ../src/Imaging/Exif.cs:231
msgid "Thumbnail Directory"
msgstr "Előnézetek könyvtára"
-#: ../src/Imaging/Exif.cs:232
+#: ../src/Imaging/Exif.cs:233
msgid "Exif Directory"
msgstr "Exif könyvtára"
-#: ../src/Imaging/Exif.cs:234
+#: ../src/Imaging/Exif.cs:235
msgid "GPS Directory"
msgstr "GPS könyvtár"
-#: ../src/Imaging/Exif.cs:236
+#: ../src/Imaging/Exif.cs:237
msgid "InterOperability Directory"
msgstr "Interoperabilitás könyvtár"
-#: ../src/Imaging/Exif.cs:238
+#: ../src/Imaging/Exif.cs:239
msgid "Unknown Directory"
msgstr "Ismeretlen könyvtár"
-#: ../src/Imaging/ImageFile.cs:117
+#: ../src/Imaging/ImageFile.cs:119
msgid "Writing to this file format is not supported"
msgstr "Az írás nem támogatott ebbe a fájlformátumba"
@@ -2222,18 +2230,21 @@ msgid "A unique number"
msgstr "Egy egyedi szám"
#: ../src/Imaging/IptcFile.cs:157
-msgid "The envelope handling priority between 1 (most urgent) and 9 (least urgent)"
+msgid ""
+"The envelope handling priority between 1 (most urgent) and 9 (least urgent)"
msgstr ""
"A boríték kezelésének prioritása 1 (legsürgősebb) és 9 (legkevésbé sürgős) "
"között"
#: ../src/Imaging/IptcFile.cs:159
msgid "The year, month and day (CCYYMMDD) the service sent the material"
-msgstr "Az év, hónap és nap (ÉÉÉÉHHNN), amikor a szolgáltatás az anyagot küldte"
+msgstr ""
+"Az év, hónap és nap (ÉÉÉÉHHNN), amikor a szolgáltatás az anyagot küldte"
#: ../src/Imaging/IptcFile.cs:161
msgid "The hour, minute and second (HHMMSS) the service sent the material"
-msgstr "Az óra perce és másodperce (ÓÓPPMM), amikor a szolgáltatás az anyagot küldte"
+msgstr ""
+"Az óra perce és másodperce (ÓÓPPMM), amikor a szolgáltatás az anyagot küldte"
#: ../src/Imaging/IptcFile.cs:163
msgid "The character set designation"
@@ -2288,8 +2299,10 @@ msgid "Full name of the country of the focus of the content"
msgstr "Azon ország teljes neve, amelyre a tartalom fókuszál"
#: ../src/Imaging/IptcFile.cs:206
-msgid "Two or three letter ISO3166 code of the country of the focus of the content"
-msgstr "Azon ország két- vagy hárombetűs ISO3166 kódja, amelyre a tartalom fókuszál"
+msgid ""
+"Two or three letter ISO3166 code of the country of the focus of the content"
+msgstr ""
+"Azon ország két- vagy hárombetűs ISO3166 kódja, amelyre a tartalom fókuszál"
#: ../src/Imaging/IptcFile.cs:209
msgid "Creator of the content"
@@ -2316,7 +2329,8 @@ msgid "Headline of the content"
msgstr "A tartalom főcíme"
#: ../src/Imaging/IptcFile.cs:225
-msgid "Instructions from the creator to the receiver not covered by other fields"
+msgid ""
+"Instructions from the creator to the receiver not covered by other fields"
msgstr "Az alkotó által a fogadóval más mezőkben nem közölt utasítások"
#: ../src/Imaging/IptcFile.cs:228
@@ -2327,40 +2341,12 @@ msgstr "Az objektum szellemi kategóriája"
msgid "Unknown IIM DataSet"
msgstr "Ismeretlen IIM adathalmaz"
-#: ../src/ImportCommand.cs:48 ../src/SingleView.cs:344
-msgid "Select Folder"
-msgstr "Mappa kiválasztása"
-
-#: ../src/ImportCommand.cs:259
-msgid "(No Cameras Detected)"
-msgstr "(Nem érzékeltem fényképezőgépet)"
-
-#: ../src/ImportCommand.cs:404
-#, csharp-format
-msgid "Loading {0} of {1}"
-msgstr "{0}. betöltése, összesen {1}"
-
-#: ../src/ImportCommand.cs:470
-msgid "Done Loading"
-msgstr "Betöltés kész"
-
-#: ../src/ImportCommand.cs:684
-msgid "Directory does not exist."
-msgstr "A könyvtár nem létezik."
-
-#: ../src/ImportCommand.cs:685
-#, csharp-format
-msgid ""
-"The directory you selected \"{0}\" does not exist. Please choose a "
-"different directory"
-msgstr "Az Ön által kijelölt „{0}” könyvtár nem létezik. Válasszon másik könyvtárat"
-
-#: ../src/ImportCommand.cs:738 ../src/ImportCommand.cs:740
+#: ../src/Import/ImportController.cs:408 ../src/Import/ImportController.cs:410
#: ../src/XmpTagsImporter.cs:89
msgid "Imported Tags"
msgstr "Importált címkék"
-#: ../src/ItemAction.cs:79 ../src/MainWindow.cs:308 ../src/SingleView.cs:71
+#: ../src/ItemAction.cs:79 ../src/MainWindow.cs:289 ../src/SingleView.cs:72
msgid "Rotate Left"
msgstr "Forgatás balra"
@@ -2368,7 +2354,7 @@ msgstr "Forgatás balra"
msgid "Rotate picture left"
msgstr "Kép forgatása balra"
-#: ../src/ItemAction.cs:91 ../src/MainWindow.cs:312 ../src/SingleView.cs:76
+#: ../src/ItemAction.cs:91 ../src/MainWindow.cs:293 ../src/SingleView.cs:77
msgid "Rotate Right"
msgstr "Forgatás jobbra"
@@ -2380,81 +2366,75 @@ msgstr "Kép forgatása jobbra"
msgid "Next picture"
msgstr "Következő kép"
+#: ../src/ItemAction.cs:123
+msgid "Previous"
+msgstr "Előző"
+
#: ../src/ItemAction.cs:124
msgid "Previous picture"
msgstr "Előző kép"
-#: ../src/MainWindow.cs:303
+#: ../src/MainWindow.cs:282 ../src/UI.Dialog/ImportDialog.cs:171
+msgid "Import"
+msgstr "Importálás"
+
+#: ../src/MainWindow.cs:284
msgid "Import new images"
msgstr "Új képek importálása"
-#: ../src/MainWindow.cs:319 ../src/ui/main_window.ui.h:3
+#: ../src/MainWindow.cs:300 ../src/ui/main_window.ui.h:3
msgid "Browse"
msgstr "Tallózás"
-#: ../src/MainWindow.cs:323
+#: ../src/MainWindow.cs:304
msgid "Browse many photos simultaneously"
msgstr "Több fénykép párhuzamos böngészése"
-#: ../src/MainWindow.cs:327
+#: ../src/MainWindow.cs:308
msgid "Edit Image"
msgstr "Kép szerkesztése"
-#: ../src/MainWindow.cs:331
+#: ../src/MainWindow.cs:312
msgid "View and edit a photo"
msgstr "Fénykép megjelenítése és szerkesztése"
-#: ../src/MainWindow.cs:336 ../src/SingleView.cs:83
+#: ../src/MainWindow.cs:317 ../src/SingleView.cs:84
msgid "Fullscreen"
msgstr "Teljes képernyő"
-#: ../src/MainWindow.cs:338 ../src/SingleView.cs:85
+#: ../src/MainWindow.cs:319 ../src/SingleView.cs:86
msgid "View photos fullscreen"
msgstr "Képek megjelenítése teljes képernyőn"
-#: ../src/MainWindow.cs:343 ../src/SingleView.cs:90
+#: ../src/MainWindow.cs:324 ../src/SingleView.cs:91
msgid "View photos in a slideshow"
msgstr "Fényképek megjelenítése diavetítésként"
-#: ../src/MainWindow.cs:358
+#: ../src/MainWindow.cs:339
msgid "Previous photo"
msgstr "Előző fénykép"
-#: ../src/MainWindow.cs:363
+#: ../src/MainWindow.cs:344
msgid "Next photo"
msgstr "Következő fénykép"
-#: ../src/MainWindow.cs:1518
-msgid "No cameras detected."
-msgstr "Nem érzékeltem fényképezőgépet."
-
-#: ../src/MainWindow.cs:1519
-msgid ""
-"F-Spot was unable to find any cameras attached to this system. Double check "
-"that the camera is connected and has power"
-msgstr ""
-"Az F-Spot nem talált egyetlen, ehhez a rendszerhez csatlakoztatott "
-"fényképezőgépet sem. Ellenőrizze, hogy a fényképezőgép csatlakoztatva van-e "
-"és be van-e kapcsolva"
-
-#: ../src/MainWindow.cs:1558
-msgid "Error connecting to camera"
-msgstr "Hiba a fényképezőgéphez való kapcsolódás közben"
+#: ../src/MainWindow.cs:421
+msgid "Show _Find Bar"
+msgstr "Keresősáv _megjelenítése"
-#: ../src/MainWindow.cs:1559
-#, csharp-format
-msgid "Received error \"{0}\" while connecting to camera"
-msgstr "„{0}” hiba következett be a fényképezőgéphez való kapcsolódás közben"
+#: ../src/MainWindow.cs:424
+msgid "Hide _Find Bar"
+msgstr "K_eresősáv elrejtése"
#. Translators, The singular case will never happen here.
-#: ../src/MainWindow.cs:1846
+#: ../src/MainWindow.cs:1740
#, csharp-format
msgid "Merge the selected tag"
msgid_plural "Merge the {0} selected tags?"
msgstr[0] "Összefésüli a kijelölt címkét?"
msgstr[1] "Összefésüli a kijelölt {0} címkét?"
-#: ../src/MainWindow.cs:1873
+#: ../src/MainWindow.cs:1767
msgid ""
"This operation will merge the selected tags and any sub-tags into a single "
"tag."
@@ -2462,76 +2442,77 @@ msgstr ""
"Ez a művelet egy kivételével az összes kiválasztott címkét és alcímkét "
"egyetlen címkébe fésüli össze."
-#: ../src/MainWindow.cs:1875
+#: ../src/MainWindow.cs:1769
msgid "_Merge Tags"
msgstr "_Címkék összefésülése"
-#: ../src/MainWindow.cs:2080
+#: ../src/MainWindow.cs:1974
#, csharp-format
msgid "{0} Photo out of {1}"
msgid_plural "{0} Photos out of {1}"
msgstr[0] "{0}/{1} fénykép"
msgstr[1] "{0}/{1} fénykép"
-#: ../src/MainWindow.cs:2082 ../src/SingleView.cs:467
+#: ../src/MainWindow.cs:1976 ../src/SingleView.cs:467
#, csharp-format
msgid "{0} Photo"
msgid_plural "{0} Photos"
msgstr[0] "{0} fénykép"
msgstr[1] "{0} fénykép"
-#: ../src/MainWindow.cs:2085
+#: ../src/MainWindow.cs:1979
#, csharp-format
msgid " ({0} selected)"
msgid_plural " ({0} selected)"
msgstr[0] " ({0} kiválasztva)"
msgstr[1] " ({0} kiválasztva)"
-#: ../src/MainWindow.cs:2166
+#: ../src/MainWindow.cs:2060
msgid "_Ok"
msgstr "_Ok"
-#: ../src/MainWindow.cs:2167
+#: ../src/MainWindow.cs:2061
msgid "Error Deleting Picture"
msgstr "Hiba a kép törlése közben"
-#: ../src/MainWindow.cs:2172
+#: ../src/MainWindow.cs:2066
#, csharp-format
msgid "No permission to delete the file:{1}{0}"
msgstr "Nincs jogosultsága a következő fájl törléséhez: {1}{0}"
-#: ../src/MainWindow.cs:2176
+#: ../src/MainWindow.cs:2070
#, csharp-format
msgid "An error of type {0} occurred while deleting the file:{2}{1}"
msgstr "{0} típusú hiba történt a következő fájl törlése közben: {2}{1}"
-#: ../src/MainWindow.cs:2208
+#: ../src/MainWindow.cs:2102
#, csharp-format
msgid "Delete the selected photo permanently?"
msgid_plural "Delete the {0} selected photos permanently?"
msgstr[0] "Véglegesen törli a kijelölt fényképet?"
msgstr[1] "Véglegesen törli a kijelölt {0} fényképet?"
-#: ../src/MainWindow.cs:2212
+#: ../src/MainWindow.cs:2106
msgid "This deletes all versions of the selected photo from your drive."
-msgid_plural "This deletes all versions of the selected photos from your drive."
+msgid_plural ""
+"This deletes all versions of the selected photos from your drive."
msgstr[0] "Ez a kijelölt fénykép összes verzióját törli a merevlemezéről."
msgstr[1] "Ez a kijelölt fényképek összes verzióját törli a merevlemezéről."
-#: ../src/MainWindow.cs:2215
+#: ../src/MainWindow.cs:2109
msgid "_Delete photo"
msgid_plural "_Delete photos"
msgstr[0] "_Fénykép törlése"
msgstr[1] "_Fénykép törlése"
-#: ../src/MainWindow.cs:2251
+#: ../src/MainWindow.cs:2145
#, csharp-format
msgid "Remove the selected photo from F-Spot?"
msgid_plural "Remove the {0} selected photos from F-Spot?"
msgstr[0] "Eltávolítja a kijelölt fényképet az F-Spotból?"
msgstr[1] "Eltávolítja a kijelölt {0} fényképet az F-Spotból?"
-#: ../src/MainWindow.cs:2256
+#: ../src/MainWindow.cs:2150
msgid ""
"If you remove photos from the F-Spot catalog all tag information will be "
"lost. The photos remain on your computer and can be imported into F-Spot "
@@ -2541,47 +2522,48 @@ msgstr ""
"elvész. A fényképek megmaradnak a számítógépén és később újra importálhatóak "
"lesznek az F-Spotba."
-#: ../src/MainWindow.cs:2257
+#: ../src/MainWindow.cs:2151
msgid "_Remove from Catalog"
msgstr "_Eltávolítás a katalógusból"
-#: ../src/MainWindow.cs:2320
+#: ../src/MainWindow.cs:2220
#, csharp-format
msgid "Delete tag \"{0}\"?"
msgstr "Törli a(z) „{0}” címkét?"
-#: ../src/MainWindow.cs:2322
+#: ../src/MainWindow.cs:2222
#, csharp-format
msgid "Delete the {0} selected tags?"
msgstr "Törli a(z) {0} kijelölt címkét?"
# fixme: string surgery alert!
-#: ../src/MainWindow.cs:2327
+#: ../src/MainWindow.cs:2227
msgid "photo"
msgid_plural "photos"
msgstr[0] "fényképpel"
msgstr[1] "fényképpel"
# fixme: string surgery alert!
-#: ../src/MainWindow.cs:2329
+#: ../src/MainWindow.cs:2229
#, csharp-format
msgid "If you delete this tag, the association with {0} {1} will be lost."
-msgid_plural "If you delete these tags, the association with {0} {1} will be lost."
+msgid_plural ""
+"If you delete these tags, the association with {0} {1} will be lost."
msgstr[0] "Ha törli a címkét, akkor annak kapcsolata elvész {0} {1}."
msgstr[1] "Ha törli a címkét, akkor annak kapcsolata elvész {0} {1}."
-#: ../src/MainWindow.cs:2334
+#: ../src/MainWindow.cs:2234
msgid "_Delete tag"
msgid_plural "_Delete tags"
msgstr[0] "_Címke törlése"
msgstr[1] "_Címkék törlése"
#. A Category is not empty. Can not delete it.
-#: ../src/MainWindow.cs:2348
+#: ../src/MainWindow.cs:2248
msgid "Tag is not empty"
msgstr "A címke nem üres"
-#: ../src/MainWindow.cs:2349
+#: ../src/MainWindow.cs:2249
#, csharp-format
msgid ""
"Can not delete tags that have tags within them. Please delete tags under "
@@ -2590,39 +2572,39 @@ msgstr ""
"Nem lehet címkéket tartalmazó címkéket törölni. Először törölje a(z) „{0}” "
"alatti címkéket"
-#: ../src/MainWindow.cs:2789
+#: ../src/MainWindow.cs:2692
msgid "Rotate selected photo left"
msgid_plural "Rotate selected photos left"
msgstr[0] "A kijelölt fénykép forgatása balra"
msgstr[1] "A kijelölt fényképek forgatása balra"
-#: ../src/MainWindow.cs:2802
+#: ../src/MainWindow.cs:2705
msgid "Rotate selected photo right"
msgid_plural "Rotate selected photos right"
msgstr[0] "A kijelölt fénykép forgatása jobbra"
msgstr[1] "A kijelölt fénykép forgatása jobbra"
-#: ../src/MainWindow.cs:2813
+#: ../src/MainWindow.cs:2716
#, csharp-format
msgid "Find _Selected Tag"
msgid_plural "Find _Selected Tags"
msgstr[0] "Kijelölt _címke keresése"
msgstr[1] "Kijelölt _címkék keresése"
-#: ../src/MainWindow.cs:2817
+#: ../src/MainWindow.cs:2720
#, csharp-format
msgid "Find Selected Tag _With"
msgid_plural "Find Selected Tags _With"
msgstr[0] "Kijelölt címke _keresése ezzel"
msgstr[1] "Kijelölt címkék _keresése ezzel"
-#: ../src/MainWindow.cs:2858
+#: ../src/MainWindow.cs:2761
msgid "Create New Version?"
msgid_plural "Create New Versions?"
msgstr[0] "Létrehoz egy új verziót?"
msgstr[1] "Létrehoz új verziókat?"
-#: ../src/MainWindow.cs:2860
+#: ../src/MainWindow.cs:2763
#, csharp-format
msgid ""
"Before launching {1}, should F-Spot create a new version of the selected "
@@ -2637,7 +2619,7 @@ msgstr[1] ""
"A(z) {1} indítása előtt a F-Spot létrehozzon-e új változatokat a kijelölt "
"fényképekből az eredetik megőrzése érdekében?"
-#: ../src/MainWindow.cs:2882
+#: ../src/MainWindow.cs:2785
msgid "XCF version"
msgstr "XCF verzió"
@@ -2753,7 +2735,7 @@ msgstr "Jelenet típusa"
#. Fixme this should really set parent menu
#. items insensitve
-#: ../src/PhotoTagMenu.cs:74
+#: ../src/PhotoTagMenu.cs:62
msgid "(No Tags)"
msgstr "(nincsenek címkék)"
@@ -2773,66 +2755,67 @@ msgstr "Verzió átnevezése"
msgid "New name:"
msgstr "Új név:"
-#: ../src/PhotoVersionCommands.cs:110
-msgid "Could not create a new version"
-msgstr "Nem hozható létre új verzió"
-
-#: ../src/PhotoVersionCommands.cs:111
-#, csharp-format
-msgid "Received exception \"{0}\". Unable to create version \"{1}\""
-msgstr "„{0}” kivétel következett be. A(z) „{1}” verzió nem hozható létre"
-
-#: ../src/PhotoVersionCommands.cs:138
-msgid "Really Delete?"
-msgstr "Valóban törli?"
-
-#: ../src/PhotoVersionCommands.cs:139
-msgid "Cancel"
-msgstr "Mégse"
-
-#: ../src/PhotoVersionCommands.cs:140
+#: ../src/PhotoVersionCommands.cs:123
msgid "Delete"
msgstr "Törlés"
-#: ../src/PhotoVersionCommands.cs:144
+#: ../src/PhotoVersionCommands.cs:124
#, csharp-format
msgid "Really delete version \"{0}\"?"
msgstr "Valóban törli „{0}” verziót?"
-#: ../src/PhotoVersionCommands.cs:154
-msgid "Could not delete a version"
-msgstr "Nem törölhető egy verzió"
+#: ../src/PhotoVersionCommands.cs:125
+msgid "This removes the version and deletes the corresponding file from disk."
+msgstr "Ez eltávolítja a verziót, és törli a megfelelő fájlt a lemezről."
+
+#: ../src/PhotoVersionCommands.cs:170
+msgid "De_tach"
+msgstr "_Leválasztás"
-#: ../src/PhotoVersionCommands.cs:155
+#: ../src/PhotoVersionCommands.cs:171
#, csharp-format
-msgid "Received exception \"{0}\". Unable to delete version \"{1}\""
-msgstr "„{0}” kivétel következett be. A(z) „{1}” verzió nem törölhető"
+msgid "Really detach version \"{0}\" from \"{1}\"?"
+msgstr "Valóban leválasztja a(z) „{0}” verziót a következőről: „{1}”?"
+
+#: ../src/PhotoVersionCommands.cs:172
+msgid ""
+"This makes the version appear as a separate photo in the library. To undo, "
+"drag the new photo back to its parent."
+msgstr ""
+"Ennek hatására a verzió önálló képként jelenik meg a gyűjteményben. A "
+"visszavonáshoz húzza vissza az új képet a szülőjére."
+
+# fixme techblabla
+#: ../src/PhotoVersionCommands.cs:195
+msgid "Re_parent"
+msgstr "Örökbe a_dás"
#: ../src/PhotoVersionCommands.cs:196
-msgid "Could not rename a version"
-msgstr "Nem nevezhető át egy verzió"
+#, csharp-format
+msgid "Really reparent \"{0}\" as version of \"{1}\"?"
+msgid_plural "Really reparent {2} photos as versions of \"{1}\"?"
+msgstr[0] "Valóban örökbe adja a következőt: „{0}” „{1}” verziójaként?"
+msgstr[1] "Valóban örökbe ad {2} fényképet „{1}” verziójaként?"
+
+#: ../src/PhotoVersionCommands.cs:199
+msgid ""
+"This makes the photos appear as a single one in the library. The versions "
+"can be detached using the Photo menu."
+msgstr ""
+"Ennek hatására a fotók egyetlen képként jelennek meg a gyűjteményben. A "
+"verziók a Fénykép menü segítségével választhatók le."
-#: ../src/PhotoVersionCommands.cs:197
+#: ../src/PhotoVersionCommands.cs:239
#, csharp-format
-msgid "Received exception \"{0}\". Unable to rename version to \"{1}\""
-msgstr "„{0}” kivétel következett be. A verzió nem nevezhető át erre: „{1}”"
+msgid "Received exception \"{0}\"."
+msgstr "„{0}” kivétel érkezett."
-#: ../src/PhotoVersionMenu.cs:66 ../src/Widgets/InfoBox.cs:563
-#: ../src/Widgets/InfoBox.cs:565
+#: ../src/PhotoVersionMenu.cs:66 ../src/Widgets/InfoBox.cs:566
+#: ../src/Widgets/InfoBox.cs:568
msgid "(No Edits)"
msgstr "(nincs módosítás)"
-#: ../src/PhotoView.cs:167 ../src/UI.Dialog/EditExceptionDialog.cs:38
-msgid "Error editing photo"
-msgstr "Hiba a fénykép szerkesztése közben"
-
-#: ../src/PhotoView.cs:168 ../src/Sharpener.cs:73
-#: ../src/UI.Dialog/EditExceptionDialog.cs:25
-#, csharp-format
-msgid "Received exception \"{0}\". Unable to save photo {1}"
-msgstr "„{0}” kivétel következett be. A(z) {1} kép nem menthető"
-
-#: ../src/PhotoView.cs:356
+#: ../src/PhotoView.cs:339
msgid "Comment:"
msgstr "Megjegyzés:"
@@ -2873,43 +2856,35 @@ msgstr "Keresés frissítése"
msgid "No matching photos found"
msgstr "Nem találhatók illeszkedő fényképek"
-#: ../src/QueryWidget.cs:155
-msgid "Hide _Find Bar"
-msgstr "K_eresősáv elrejtése"
-
-#: ../src/QueryWidget.cs:161
-msgid "Show _Find Bar"
-msgstr "Keresősáv _megjelenítése"
-
-#: ../src/RotateCommand.cs:96 ../src/RotateCommand.cs:111
+#: ../src/RotateCommand.cs:87 ../src/RotateCommand.cs:102
msgid "Unable to rotate this type of photo"
msgstr "Nem lehet forgatni ezt a fényképtípust"
-#: ../src/RotateCommand.cs:131
+#: ../src/RotateCommand.cs:122
msgid "Unable to rotate readonly file"
msgstr "Nem lehet forgatni az írásvédett fájlt"
-#: ../src/RotateCommand.cs:198
+#: ../src/RotateCommand.cs:185
msgid "Rotating photos"
msgstr "Fényképek forgatása"
-#: ../src/RotateCommand.cs:209
+#: ../src/RotateCommand.cs:196
#, csharp-format
msgid "Rotating photo \"{0}\""
msgstr "„{0}” fénykép forgatása"
-#: ../src/RotateCommand.cs:222
+#: ../src/RotateCommand.cs:209
msgid "Directory not found"
msgstr "A könyvtár nem található"
-#: ../src/RotateCommand.cs:242
+#: ../src/RotateCommand.cs:229
#, csharp-format
msgid "Unable to rotate photo"
msgid_plural "Unable to rotate {0} photos"
msgstr[0] "Nem lehet forgatni a fényképet"
msgstr[1] "Nem lehet forgatni {0} fényképet"
-#: ../src/RotateCommand.cs:244
+#: ../src/RotateCommand.cs:231
#, csharp-format
msgid ""
"The photo could not be rotated because it is on a read only file system or "
@@ -2926,35 +2901,35 @@ msgstr[1] ""
"adathordozón, például CD-ROM-on vannak. Ellenőrizze a jogosultságokat és "
"próbálja újra."
-#: ../src/RotateCommand.cs:271
+#: ../src/RotateCommand.cs:258
#, csharp-format
msgid "Received error \"{0}\" while attempting to rotate {1}"
msgstr "„{0}” hiba következett be {1} forgatására tett kísérlet közben"
-#: ../src/RotateCommand.cs:276
+#: ../src/RotateCommand.cs:263
msgid "Error while rotating photo."
msgstr "Hiba a fénykép forgatása közben."
-#: ../src/SendEmail.cs:240
+#: ../src/SendEmail.cs:214
msgid "Preparing email"
msgstr "E-mail előkészítése"
-#: ../src/SendEmail.cs:292
+#: ../src/SendEmail.cs:266
#, csharp-format
msgid "Exporting picture \"{0}\""
msgstr "„{0}” kép exportálása"
-#: ../src/SendEmail.cs:314
+#: ../src/SendEmail.cs:288
msgid "Error processing image"
msgstr "Hiba a kép feldolgozásakor"
-#: ../src/SendEmail.cs:315
+#: ../src/SendEmail.cs:289
#, csharp-format
msgid "An error occured while processing \"{0}\": {1}"
msgstr "Hiba történt a(z) „{0}” feldolgozásakor: {1}"
#. Send the mail :)
-#: ../src/SendEmail.cs:330
+#: ../src/SendEmail.cs:303
msgid "My Photos"
msgstr "Fényképeim"
@@ -2962,6 +2937,11 @@ msgstr "Fényképeim"
msgid "Error saving sharpened photo"
msgstr "Hiba az élesített fénykép mentése közben"
+#: ../src/Sharpener.cs:73 ../src/UI.Dialog/EditExceptionDialog.cs:26
+#, csharp-format
+msgid "Received exception \"{0}\". Unable to save photo {1}"
+msgstr "„{0}” kivétel következett be. A(z) {1} kép nem menthető"
+
#: ../src/Sharpener.cs:102
msgid "Sharpen"
msgstr "Élesítés"
@@ -2978,15 +2958,15 @@ msgstr "Sugár:"
msgid "Threshold:"
msgstr "Küszöb:"
-#: ../src/SingleView.cs:73
+#: ../src/SingleView.cs:74
msgid "Rotate photo left"
msgstr "Fénykép forgatása balra"
-#: ../src/SingleView.cs:78
+#: ../src/SingleView.cs:79
msgid "Rotate photo right"
msgstr "Fénykép forgatása jobbra"
-#: ../src/SingleView.cs:115
+#: ../src/SingleView.cs:116
msgid "Folder"
msgstr "Mappa"
@@ -2994,20 +2974,24 @@ msgstr "Mappa"
msgid "Open"
msgstr "Megnyitás"
+#: ../src/SingleView.cs:344
+msgid "Select Folder"
+msgstr "Mappa kiválasztása"
+
#: ../src/SingleView.cs:428
msgid "Set as Background"
msgstr "Beállítás háttérként"
-#: ../src/TagCommands.cs:96 ../src/TagSelectionWidget.cs:498
+#: ../src/TagCommands.cs:97 ../src/TagSelectionWidget.cs:491
#: ../src/UI.Dialog/EditTagDialog.cs:78
msgid "This name is already in use"
msgstr "Ez a név már használatban van"
-#: ../src/TagCommands.cs:144
+#: ../src/TagCommands.cs:145
msgid "Create New Tag"
msgstr "Új címke létrehozása"
-#: ../src/TagCommands.cs:145
+#: ../src/TagCommands.cs:146
msgid "Name of New Tag:"
msgstr "Az új címke neve:"
@@ -3018,7 +3002,7 @@ msgid_plural "Find"
msgstr[0] "Keresés"
msgstr[1] "Keresés"
-#: ../src/TagPopup.cs:36 ../src/Widgets/TagMenu.cs:91
+#: ../src/TagPopup.cs:36 ../src/Widgets/TagMenu.cs:98
msgid "Create New Tag..."
msgstr "Új címke létrehozása…"
@@ -3082,32 +3066,32 @@ msgstr "Nem {0}"
msgid "Drag tags here to search for them"
msgstr "Húzza ide a keresendő címkéket"
-#: ../src/TagSelectionWidget.cs:497
+#: ../src/TagSelectionWidget.cs:490
msgid "Error renaming tag"
msgstr "Hiba a címke átnevezése közben"
-#: ../src/TagStore.cs:203
+#: ../src/TagStore.cs:204
msgid "Favorites"
msgstr "Kedvencek"
-#: ../src/TagStore.cs:208
+#: ../src/TagStore.cs:209
msgid "Hidden"
msgstr "Rejtett"
-#: ../src/TagStore.cs:216
+#: ../src/TagStore.cs:217
msgid "People"
msgstr "Emberek"
-#: ../src/TagStore.cs:221
+#: ../src/TagStore.cs:222
msgid "Places"
msgstr "Helyek"
-#: ../src/TagStore.cs:226
+#: ../src/TagStore.cs:227
msgid "Events"
msgstr "Események"
#. The label for the root category is used in new and edit tag dialogs
-#: ../src/TagStore.cs:239 ../src/Widgets/InfoBox.cs:409
+#: ../src/TagStore.cs:240 ../src/Widgets/InfoBox.cs:410
msgid "(None)"
msgstr "(Nincs)"
@@ -3131,34 +3115,34 @@ msgstr " vagy "
msgid "or"
msgstr "vagy"
-#: ../src/ThumbnailCommand.cs:20
+#: ../src/ThumbnailCommand.cs:21
msgid "Updating Thumbnails"
msgstr "Bélyegképek frissítése"
-#: ../src/ThumbnailCommand.cs:28
+#: ../src/ThumbnailCommand.cs:29
#, csharp-format
msgid "Updating picture \"{0}\""
msgstr "„{0}” kép frissítése"
-#: ../src/UI.Dialog/AboutDialog.cs:76
+#: ../src/UI.Dialog/AboutDialog.cs:77
msgid "Photo management for GNOME"
msgstr "Fényképkezelő a GNOME-hoz"
-#: ../src/UI.Dialog/AboutDialog.cs:77
-msgid "Copyright © 2003-2009 Novell Inc."
-msgstr "Copyright © 2003-2009 Novell Inc."
+#: ../src/UI.Dialog/AboutDialog.cs:78
+msgid "Copyright © 2003-2010 Novell Inc."
+msgstr "Copyright © 2003-2010 Novell Inc."
-#: ../src/UI.Dialog/AboutDialog.cs:100
+#: ../src/UI.Dialog/AboutDialog.cs:101
msgid "translator-credits"
msgstr ""
"Kelemen Gábor <kelemeng at gnome dot hu>Kéménczy Kálmán <kkemenczy at novell "
"dot com>"
-#: ../src/UI.Dialog/AboutDialog.cs:105
+#: ../src/UI.Dialog/AboutDialog.cs:106
msgid "F-Spot Website"
msgstr "F-Spot honlap"
-#: ../src/UI.Dialog/AdjustTimeDialog.cs:112
+#: ../src/UI.Dialog/AdjustTimeDialog.cs:113
#: ../src/UI.Dialog/ui/AdjustTimeDialog.ui.h:10
#, csharp-format
msgid "Shift all photos by {0}"
@@ -3200,16 +3184,20 @@ msgstr "Előző hét (hé-va)"
msgid "Customized Range"
msgstr "Egyéni tartomány"
-#: ../src/UI.Dialog/EditTagIconDialog.cs:46
+#: ../src/UI.Dialog/EditExceptionDialog.cs:39
+msgid "Error editing photo"
+msgstr "Hiba a fénykép szerkesztése közben"
+
+#: ../src/UI.Dialog/EditTagIconDialog.cs:47
#, csharp-format
msgid "Edit Icon for Tag {0}"
msgstr "{0} címke ikonjának szerkesztése"
-#: ../src/UI.Dialog/EditTagIconDialog.cs:68
+#: ../src/UI.Dialog/EditTagIconDialog.cs:69
msgid "Select Photo from file"
msgstr "Válassza ki fájlból a fényképet"
-#: ../src/UI.Dialog/EditTagIconDialog.cs:90
+#: ../src/UI.Dialog/EditTagIconDialog.cs:91
#, csharp-format
msgid ""
"\n"
@@ -3223,19 +3211,19 @@ msgstr ""
"<b>Fényképből</b>\n"
" A gyűjtemény egyik fényképét a címke ikonjaként használhatja.\n"
" Először azonban legalább egy fényképet a címkéhez kell társítania\n"
-" Címkézzen meg egy fényképet a(z) '{0}' címkével, ezután már\n"
+" Címkézzen meg egy fényképet a(z) „{0}” címkével, ezután már\n"
" felhasználhatja azt ikonként."
-#: ../src/UI.Dialog/EditTagIconDialog.cs:168
+#: ../src/UI.Dialog/EditTagIconDialog.cs:169
msgid "Unable to load image"
msgstr "A kép nem tölthető be"
-#: ../src/UI.Dialog/EditTagIconDialog.cs:169
+#: ../src/UI.Dialog/EditTagIconDialog.cs:170
#, csharp-format
msgid "Unable to load \"{0}\" as icon for the tag"
msgstr "„{0}” nem tölthető be a címke ikonjaként"
-#: ../src/UI.Dialog/EditTagIconDialog.cs:207
+#: ../src/UI.Dialog/EditTagIconDialog.cs:208
#, csharp-format
msgid "Photo {0} of {1}"
msgstr "{0}/{1} fénykép"
@@ -3252,24 +3240,51 @@ msgstr "Hiba részletei"
msgid "An unhandled exception was thrown: "
msgstr "Kezeletlen kivétel történt: "
-#: ../src/UI.Dialog/PreferenceDialog.cs:54
-#: ../src/UI.Dialog/PreferenceDialog.cs:77
+#: ../src/UI.Dialog/ImportDialog.cs:15
+msgid "Choose Folder..."
+msgstr "Válasszon mappát…"
+
+#: ../src/UI.Dialog/ImportDialog.cs:124
+msgid "Choose Import source..."
+msgstr "Válasszon importálási forrást…"
+
+#: ../src/UI.Dialog/ImportDialog.cs:136
+msgid "(No Cameras Detected)"
+msgstr "(Nem érzékeltem fényképezőgépet)"
+
+#: ../src/UI.Dialog/ImportDialog.cs:264
+#, csharp-format
+msgid "Importing Photos: {0} of {1}..."
+msgstr "Fényképek importálása: {1}/{0}…"
+
+#: ../src/UI.Dialog/ImportDialog.cs:288
+msgid "Importing photos..."
+msgstr "Fényképek exportálása…"
+
+#. TODO: Using a GtkSpinner would be nicer here.
+#: ../src/UI.Dialog/ImportDialog.cs:295
+msgid "Searching for photos... (You can already click Import to continue)"
+msgstr ""
+"Fényképek keresése… (a folytatáshoz máris megnyomhatja az Importálás gombot)"
+
+#: ../src/UI.Dialog/PreferenceDialog.cs:55
+#: ../src/UI.Dialog/PreferenceDialog.cs:78
msgid "None"
msgstr "Nincs"
-#: ../src/UI.Dialog/PreferenceDialog.cs:56
+#: ../src/UI.Dialog/PreferenceDialog.cs:57
msgid "System profile"
msgstr "Rendszerprofil"
-#: ../src/UI.Dialog/PreferenceDialog.cs:94
+#: ../src/UI.Dialog/PreferenceDialog.cs:95
msgid "Standard theme"
msgstr "Szabványos téma"
-#: ../src/UI.Dialog/RepairDbDialog.cs:20
+#: ../src/UI.Dialog/RepairDbDialog.cs:21
msgid "Error loading database."
msgstr "Hiba az adatbázis betöltése közben."
-#: ../src/UI.Dialog/RepairDbDialog.cs:21
+#: ../src/UI.Dialog/RepairDbDialog.cs:22
#, csharp-format
msgid ""
"F-Spot encountered an error while loading the photo database. The old "
@@ -3279,15 +3294,15 @@ msgstr ""
"adatbázis áthelyezésre került ide: {0} és egy új adatbázis került "
"létrehozásra."
-#: ../src/UI.Dialog/SelectionRatioDialog.cs:60
+#: ../src/UI.Dialog/SelectionRatioDialog.cs:61
msgid "Label"
msgstr "Címke"
-#: ../src/UI.Dialog/SelectionRatioDialog.cs:64
+#: ../src/UI.Dialog/SelectionRatioDialog.cs:65
msgid "Ratio"
msgstr "Arány"
-#: ../src/UI.Dialog/ThreadProgressDialog.cs:56
+#: ../src/UI.Dialog/ThreadProgressDialog.cs:55
msgid "Retry"
msgstr "Újra"
@@ -3353,7 +3368,8 @@ msgstr "Megszakítás, az aktuális idővonal változatlanul hagyása. "
#: ../src/UI.Dialog/ui/DateRangeDialog.ui.h:5
msgid "Only photos taken within these dates will be displayed."
-msgstr "Csak az ezen dátumok között készített fényképek kerülnek megjelenítésre."
+msgstr ""
+"Csak az ezen dátumok között készített fényképek kerülnek megjelenítésre."
#: ../src/UI.Dialog/ui/DateRangeDialog.ui.h:6
msgid "Set date range"
@@ -3491,191 +3507,203 @@ msgstr "Új _címke létrehozása…"
msgid "Create _New Version..."
msgstr "Ú_j verzió létrehozása…"
-#: ../src/ui/main_window.ui.h:11
+#: ../src/ui/main_window.ui.h:10
+msgid "De_tach Version"
+msgstr "Verzió le_választása"
+
+#: ../src/ui/main_window.ui.h:12
msgid "Fin_d"
msgstr "Kere_sés"
-#: ../src/ui/main_window.ui.h:12
+#: ../src/ui/main_window.ui.h:13
msgid "Manage _Extensions"
msgstr "_Kiterjesztések kezelése"
-#: ../src/ui/main_window.ui.h:13
+#: ../src/ui/main_window.ui.h:14
msgid "Page Set_up..."
msgstr "_Oldalbeállítás…"
-#: ../src/ui/main_window.ui.h:14
+#: ../src/ui/main_window.ui.h:15
msgid "Re_fresh Thumbnail"
msgstr "Bél_yegkép frissítése"
-#: ../src/ui/main_window.ui.h:18
+#: ../src/ui/main_window.ui.h:19
msgid "Select _All"
msgstr "Min_dent kijelöl"
-#: ../src/ui/main_window.ui.h:19
+#: ../src/ui/main_window.ui.h:20
msgid "Select _None"
msgstr "Kijelölés megszü_ntetése"
-#: ../src/ui/main_window.ui.h:20
+#: ../src/ui/main_window.ui.h:21
msgid "Send by _Mail..."
msgstr "Küldés e-_mailben…"
-#: ../src/ui/main_window.ui.h:22
+#: ../src/ui/main_window.ui.h:23
msgid "Side_bar"
msgstr "_Oldalsáv"
-#: ../src/ui/main_window.ui.h:23
+#: ../src/ui/main_window.ui.h:24
msgid "T_ags"
msgstr "_Címkék"
-#: ../src/ui/main_window.ui.h:25
+#: ../src/ui/main_window.ui.h:26
msgid "Thumbnail _elements"
msgstr "Bélyegké_pek"
-#: ../src/ui/main_window.ui.h:26
+#: ../src/ui/main_window.ui.h:27
msgid "Too_lbar"
msgstr "_Eszköztár"
-#: ../src/ui/main_window.ui.h:27
+#: ../src/ui/main_window.ui.h:28
msgid "View"
msgstr "Nézet"
#: ../src/ui/main_window.ui.h:33
+msgid "_Attach Tag"
+msgstr "_Címke csatolása"
+
+#: ../src/ui/main_window.ui.h:34
msgid "_Attach Tag to Selection"
msgstr "Cí_mke csatolása a kijelöléshez"
-#: ../src/ui/main_window.ui.h:35
+#: ../src/ui/main_window.ui.h:36
msgid "_Clear Rating Filter"
msgstr "Értékelési s_zűrő törlése"
-#: ../src/ui/main_window.ui.h:36
+#: ../src/ui/main_window.ui.h:37
msgid "_Clear Roll Filter"
msgstr "_Körszűrő törlése"
-#: ../src/ui/main_window.ui.h:38
+#: ../src/ui/main_window.ui.h:39
msgid "_Components"
msgstr "Öss_zetevők"
-#: ../src/ui/main_window.ui.h:39
+#: ../src/ui/main_window.ui.h:40
msgid "_Contents"
msgstr "_Tartalom"
-#: ../src/ui/main_window.ui.h:40
+#: ../src/ui/main_window.ui.h:41
msgid "_Dates"
msgstr "_Dátumok"
-#: ../src/ui/main_window.ui.h:42
+#: ../src/ui/main_window.ui.h:43
msgid "_Delete Selected Tag"
msgstr "Kijelölt címke _törlése"
-#: ../src/ui/main_window.ui.h:43
+#: ../src/ui/main_window.ui.h:44
msgid "_Delete Version"
msgstr "Verzió _törlése"
-#: ../src/ui/main_window.ui.h:45
+#: ../src/ui/main_window.ui.h:46
msgid "_Edit Tag..."
msgstr "_Címke szerkesztése…"
-#: ../src/ui/main_window.ui.h:46
+#: ../src/ui/main_window.ui.h:47
msgid "_Export to"
msgstr "E_xportálás"
-#: ../src/ui/main_window.ui.h:47
+#: ../src/ui/main_window.ui.h:48
msgid "_Filmstrip"
msgstr "_Filmtekercs"
-#: ../src/ui/main_window.ui.h:50
+#: ../src/ui/main_window.ui.h:51
msgid "_Hidden"
msgstr "_Rejtett"
-#: ../src/ui/main_window.ui.h:51
+#: ../src/ui/main_window.ui.h:52
msgid "_Import..."
msgstr "_Importálás…"
-#: ../src/ui/main_window.ui.h:52
+#: ../src/ui/main_window.ui.h:53
+msgid "_Invert Selection"
+msgstr "Kijelölés megf_ordítása"
+
+#: ../src/ui/main_window.ui.h:54
msgid "_Large"
msgstr "_Nagy"
-#: ../src/ui/main_window.ui.h:53
+#: ../src/ui/main_window.ui.h:55
msgid "_Last Import Roll"
msgstr "_Utolsó importálási kör"
-#: ../src/ui/main_window.ui.h:54
+#: ../src/ui/main_window.ui.h:56
msgid "_Loupe"
msgstr "_Nagyító"
-#: ../src/ui/main_window.ui.h:55
+#: ../src/ui/main_window.ui.h:57
msgid "_Medium"
msgstr "_Közepes"
-#: ../src/ui/main_window.ui.h:57
+#: ../src/ui/main_window.ui.h:59
msgid "_Quit"
msgstr "_Kilépés"
-#: ../src/ui/main_window.ui.h:58
+#: ../src/ui/main_window.ui.h:60
msgid "_Ratings"
msgstr "Ér_tékelések"
-#: ../src/ui/main_window.ui.h:60
+#: ../src/ui/main_window.ui.h:62
msgid "_Remove Tag From Selection"
msgstr "Címke _eltávolítása a kijelölésből"
-#: ../src/ui/main_window.ui.h:61
+#: ../src/ui/main_window.ui.h:63
msgid "_Rename Version"
msgstr "Verzió átneve_zése"
-#: ../src/ui/main_window.ui.h:62
+#: ../src/ui/main_window.ui.h:64
msgid "_Reverse Order"
msgstr "S_orrend megfordítása"
-#: ../src/ui/main_window.ui.h:63
+#: ../src/ui/main_window.ui.h:65
msgid "_Select Import Rolls..."
msgstr "_Válasszon importálási köröket…"
-#: ../src/ui/main_window.ui.h:64
+#: ../src/ui/main_window.ui.h:66
msgid "_Set Date Range..."
msgstr "_Dátumtartomány beállítása…"
-#: ../src/ui/main_window.ui.h:65
+#: ../src/ui/main_window.ui.h:67
msgid "_Set Rating filter..."
msgstr "Érté_kelési szűrő beállítása…"
-#: ../src/ui/main_window.ui.h:66
+#: ../src/ui/main_window.ui.h:68
msgid "_Sharpen..."
msgstr "Éle_sítés…"
-#: ../src/ui/main_window.ui.h:68
+#: ../src/ui/main_window.ui.h:70
msgid "_Small"
msgstr "Ki_csi"
-#: ../src/ui/main_window.ui.h:69
+#: ../src/ui/main_window.ui.h:71
msgid "_Tag Icons"
msgstr "_Címkeikonok"
-#: ../src/ui/main_window.ui.h:70
+#: ../src/ui/main_window.ui.h:72
msgid "_Tags"
msgstr "_Címkék"
-#: ../src/ui/main_window.ui.h:71
+#: ../src/ui/main_window.ui.h:73
msgid "_Timeline"
msgstr "_Idővonal"
-#: ../src/ui/main_window.ui.h:72
+#: ../src/ui/main_window.ui.h:74
msgid "_Tools"
msgstr "_Eszközök"
-#: ../src/ui/main_window.ui.h:73
+#: ../src/ui/main_window.ui.h:75
msgid "_Untagged Photos"
msgstr "_Címkézetlen fényképek"
-#: ../src/ui/main_window.ui.h:74
+#: ../src/ui/main_window.ui.h:76
msgid "_Version"
msgstr "_Verzió"
-#: ../src/Updater.cs:622
+#: ../src/Updater.cs:623
msgid "Updating F-Spot Database"
msgstr "Az F-Spot adatbázisának frissítése"
-#: ../src/Updater.cs:623
+#: ../src/Updater.cs:624
msgid ""
"Please wait while your F-Spot gallery's database is updated. This may take "
"some time."
@@ -3684,7 +3712,7 @@ msgstr ""
"egy ideig."
#. Mono.Unix.Error error = Mono.Unix.Stdlib.GetLastError ();
-#: ../src/Utils/Unix.cs:35
+#: ../src/Utils/Unix.cs:36
msgid "Unable to create temporary file"
msgstr "Nem lehet ideiglenes fájlt létrehozni"
@@ -3768,11 +3796,11 @@ msgstr "Fénykép címkéinek nyomtatása"
msgid "Print photo comment"
msgstr "Fénykép megjegyzésének nyomtatása"
-#: ../src/Widgets/EditorPage.cs:30 ../src/Widgets/Sidebar.cs:54
+#: ../src/Widgets/EditorPage.cs:31 ../src/Widgets/Sidebar.cs:54
msgid "Edit"
msgstr "Szerkesztés"
-#: ../src/Widgets/EditorPage.cs:198
+#: ../src/Widgets/EditorPage.cs:199
msgid ""
"This tool requires an active selection. Please select a region of the photo "
"and try the operation again"
@@ -3780,13 +3808,13 @@ msgstr ""
"Ez az eszköz aktív kijelölést igényel. Jelölje ki a fénykép egy területét és "
"próbálja újra a műveletet."
-#: ../src/Widgets/EditorPage.cs:216
+#: ../src/Widgets/EditorPage.cs:217
msgid "Error saving adjusted photo"
msgid_plural "Error saving adjusted photos"
msgstr[0] "Hiba a módosított fénykép mentése közben"
msgstr[1] "Hiba a módosított fényképek mentése közben"
-#: ../src/Widgets/EditorPage.cs:218
+#: ../src/Widgets/EditorPage.cs:219
#, csharp-format
msgid ""
"Received exception \"{0}\". Note that you have to develop RAW files into "
@@ -3795,11 +3823,11 @@ msgstr ""
"„{0}” kivétel történt. Ne feledje, hogy a RAW fájlokat előbb JPEG "
"formátumúvá kell alakítania a szerkesztéshez."
-#: ../src/Widgets/Filmstrip.cs:572
+#: ../src/Widgets/Filmstrip.cs:573
msgid "_Horizontal"
msgstr "Ví_zszintes"
-#: ../src/Widgets/Filmstrip.cs:576
+#: ../src/Widgets/Filmstrip.cs:577
msgid "_Vertical"
msgstr "_Függőleges"
@@ -3811,66 +3839,70 @@ msgstr "Keresés:"
msgid "Folders"
msgstr "Mappák"
-#: ../src/Widgets/FolderTreeView.cs:123
+#: ../src/Widgets/FolderTreeView.cs:124
msgid "Filesystem"
msgstr "Fájlrendszer"
-#: ../src/Widgets/InfoBox.cs:182
+#: ../src/Widgets/InfoBox.cs:183
msgid "Histogram"
msgstr "Hisztogram"
-#: ../src/Widgets/InfoBox.cs:215
+#: ../src/Widgets/InfoBox.cs:216
msgid "Version"
msgstr "Verzió"
-#: ../src/Widgets/InfoBox.cs:218
+#: ../src/Widgets/InfoBox.cs:219
msgid "Date"
msgstr "Dátum"
-#: ../src/Widgets/InfoBox.cs:224
+#: ../src/Widgets/InfoBox.cs:225
msgid "Exposure"
msgstr "Expozíció"
-#: ../src/Widgets/InfoBox.cs:228
+#: ../src/Widgets/InfoBox.cs:229
msgid "Focal Length"
msgstr "Fokális hossz"
-#: ../src/Widgets/InfoBox.cs:234
+#: ../src/Widgets/InfoBox.cs:232
+msgid "Camera"
+msgstr "Fényképezőgép"
+
+#: ../src/Widgets/InfoBox.cs:235
msgid "File Size"
msgstr "Fájlméret"
-#: ../src/Widgets/InfoBox.cs:237
+#: ../src/Widgets/InfoBox.cs:238
msgid "Rating"
msgstr "Értékelés"
-#: ../src/Widgets/InfoBox.cs:390 ../src/Widgets/InfoBox.cs:398
-#: ../src/Widgets/InfoBox.cs:428
+#: ../src/Widgets/InfoBox.cs:391 ../src/Widgets/InfoBox.cs:399
+#: ../src/Widgets/InfoBox.cs:429
msgid "(wrong format)"
msgstr "(hibás formátum)"
-#: ../src/Widgets/InfoBox.cs:418 ../src/Widgets/InfoBox.cs:441
-#: ../src/Widgets/InfoBox.cs:451 ../src/Widgets/InfoBox.cs:460
+#: ../src/Widgets/InfoBox.cs:419 ../src/Widgets/InfoBox.cs:442
+#: ../src/Widgets/InfoBox.cs:452 ../src/Widgets/InfoBox.cs:461
msgid "(Unknown)"
msgstr "(Ismeretlen)"
-#: ../src/Widgets/InfoBox.cs:561
+#: ../src/Widgets/InfoBox.cs:564
#, csharp-format
msgid "(One Edit)"
msgid_plural "({0} Edits)"
msgstr[0] "(egy módosítás)"
msgstr[1] "({0} módosítás)"
-#: ../src/Widgets/InfoBox.cs:575
+#: ../src/Widgets/InfoBox.cs:578
msgid "(File read error)"
msgstr "(Fájlolvasási hiba)"
-#: ../src/Widgets/InfoBox.cs:620
+#: ../src/Widgets/InfoBox.cs:623
#, csharp-format
msgid "{0} Photos"
msgstr "{0} fénykép"
#. Note for translators: {0} is a date, {1} and {2} are times.
-#: ../src/Widgets/InfoBox.cs:640
+#: ../src/Widgets/InfoBox.cs:643
#, csharp-format
msgid ""
"On {0} between \n"
@@ -3879,7 +3911,7 @@ msgstr ""
"{0} napon,\n"
"{1} és {2} között"
-#: ../src/Widgets/InfoBox.cs:645
+#: ../src/Widgets/InfoBox.cs:648
#, csharp-format
msgid ""
"Between {0} \n"
@@ -3888,35 +3920,35 @@ msgstr ""
"{0} és {1}\n"
"között"
-#: ../src/Widgets/InfoBox.cs:672
+#: ../src/Widgets/InfoBox.cs:675
msgid "(At least one File not found)"
msgstr "(Legalább egy fájl nem található)"
-#: ../src/Widgets/InfoBox.cs:789
+#: ../src/Widgets/InfoBox.cs:792
msgid "Show Photo Name"
msgstr "Fotónév megjelenítése"
-#: ../src/Widgets/InfoBox.cs:798
+#: ../src/Widgets/InfoBox.cs:801
msgid "Show Date"
msgstr "Dátum megjelenítése"
-#: ../src/Widgets/InfoBox.cs:807
+#: ../src/Widgets/InfoBox.cs:810
msgid "Show Size"
msgstr "Méret megjelenítése"
-#: ../src/Widgets/InfoBox.cs:816
+#: ../src/Widgets/InfoBox.cs:819
msgid "Show Exposure"
msgstr "Expozíció megjelenítése"
-#: ../src/Widgets/InfoBox.cs:825
+#: ../src/Widgets/InfoBox.cs:828
msgid "Show Focal Length"
msgstr "Fokális hossz megjelenítése"
-#: ../src/Widgets/InfoBox.cs:834
+#: ../src/Widgets/InfoBox.cs:837
msgid "Show Camera"
msgstr "Fényképezőgép megjelenítése"
-#: ../src/Widgets/InfoBox.cs:843
+#: ../src/Widgets/InfoBox.cs:846
msgid "Show File Size"
msgstr "Fájlméret megjelenítése"
@@ -3950,7 +3982,7 @@ msgstr "Nem érhetőek el metaadatok"
msgid "No applications available"
msgstr "Nem állnak rendelkezésre alkalmazások"
-#: ../src/Widgets/RatingMenuItem.cs:56
+#: ../src/Widgets/RatingMenuItem.cs:57
msgid "Rating:"
msgstr "Értékelés:"
@@ -3974,4 +4006,3 @@ msgstr "Diavetítés megjelenítése az F-Spotból"
#: ../tools/f-spot-screensaver.desktop.in.h:2
msgid "F-Spot photos"
msgstr "F-Spot fényképek"
-
diff --git a/po/id.po b/po/id.po
new file mode 100644
index 0000000..add5ca8
--- /dev/null
+++ b/po/id.po
@@ -0,0 +1,4007 @@
+# Indonesian translation of f-spot
+# Copyright (C) 2010 THE f-spot'S COPYRIGHT HOLDER
+# This file is distributed under the same license as the f-spot package.
+# Andika Triwidada <andika at gmail.com>, 2010.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: f-spot master\n"
+"Report-Msgid-Bugs-To: http://bugzilla.gnome.org/enter_bug.cgi?product=f-"
+"spot&component=General\n"
+"POT-Creation-Date: 2010-06-12 11:21+0000\n"
+"PO-Revision-Date: 2010-06-14 11:03+0700\n"
+"Last-Translator: Andika Triwidada <andika at gmail.com>\n"
+"Language-Team: GNOME Indonesian Translation Team <gnome at i15n.org>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=1; plural=0;\n"
+"X-Poedit-Language: Indonesian\n"
+"X-Poedit-Country: Indonesia\n"
+
+#: ../data/desktop-files/f-spot.desktop.in.in.h:1
+#: ../data/desktop-files/f-spot-import.desktop.in.in.h:1
+#: ../data/desktop-files/f-spot-view.desktop.in.in.h:1
+#: ../src/ui/main_window.ui.h:11
+msgid "F-Spot"
+msgstr "F-Spot"
+
+#: ../data/desktop-files/f-spot.desktop.in.in.h:2
+#: ../data/desktop-files/f-spot-import.desktop.in.in.h:2
+msgid "F-Spot Photo Manager"
+msgstr "F-Spot Photo Manager"
+
+#: ../data/desktop-files/f-spot.desktop.in.in.h:3
+msgid "Organize, enjoy, and share your photos"
+msgstr "Atur, nikmati, dan berbagi foto Anda"
+
+#: ../data/desktop-files/f-spot.desktop.in.in.h:4
+#: ../data/desktop-files/f-spot-import.desktop.in.in.h:4
+msgid "Photo Manager"
+msgstr "Manajer Foto"
+
+#: ../data/desktop-files/f-spot-import.desktop.in.in.h:3
+msgid "Import into F-Spot"
+msgstr "Impor ke F-Spot"
+
+#: ../data/desktop-files/f-spot-view.desktop.in.in.h:2
+msgid "F-Spot Photo Viewer"
+msgstr "F-Spot Photo Viewer"
+
+#: ../data/desktop-files/f-spot-view.desktop.in.in.h:3
+msgid "Photo Viewer"
+msgstr "Penilik Foto"
+
+#: ../extensions/Exporters/CDExport/CDExport.addin.xml.h:1
+msgid "_CD..."
+msgstr "_CD..."
+
+#: ../extensions/Exporters/CDExport/CDExport.cs:162
+msgid "Transferring Pictures"
+msgstr "Memindah Gambar"
+
+#: ../extensions/Exporters/CDExport/CDExport.cs:218
+#, csharp-format
+msgid "Transferring picture \"{0}\" To CD"
+msgstr "Memindah gambar \"{0}\" Ke CD"
+
+#. Note for translators: This indicates the current photo is photo {0} of {1} out of photos
+#: ../extensions/Exporters/CDExport/CDExport.cs:220
+#: ../extensions/Exporters/FlickrExport/FlickrExport.cs:350
+#: ../extensions/Exporters/FolderExport/FolderExport.cs:220
+#: ../extensions/Exporters/GalleryExport/GalleryExport.cs:781
+#: ../src/MainWindow.cs:644 ../src/UI.Dialog/AdjustTimeDialog.cs:130
+#: ../src/UI.Dialog/ProgressDialog.cs:90
+#, csharp-format
+msgid "{0} of {1}"
+msgstr "{0} dari {1}"
+
+#: ../extensions/Exporters/CDExport/CDExport.cs:233
+#: ../extensions/Exporters/FacebookExport/FacebookExport.cs:377
+#: ../extensions/Exporters/FlickrExport/FlickrExport.cs:380
+#: ../extensions/Exporters/GalleryExport/GalleryExport.cs:806
+#: ../extensions/Exporters/PicasaWebExport/PicasaWebExport.cs:705
+#: ../extensions/Exporters/SmugMugExport/SmugMugExport.cs:607
+msgid "Done Sending Photos"
+msgstr "Selesai Mengirim Foto"
+
+#: ../extensions/Exporters/CDExport/CDExport.cs:235
+msgid "Transfer Complete"
+msgstr "Pemindahan Selesai"
+
+#: ../extensions/Exporters/CDExport/CDExport.cs:242
+msgid "Error While Transferring"
+msgstr "Kesalahan Ketika Memindah"
+
+#: ../extensions/Exporters/CDExport/CDExport.cs:250
+#: ../extensions/Exporters/FolderExport/FolderExport.cs:278
+msgid "Error Transferring"
+msgstr "Kesalahan Memindah"
+
+#: ../extensions/Exporters/CDExport/CDExport.cs:263
+msgid "copying..."
+msgstr "menyalin..."
+
+#: ../extensions/Exporters/CDExport/CDExport.ui.h:1
+msgid "<b><i>There is some previously scheduled items to write</i></b>"
+msgstr ""
+
+#: ../extensions/Exporters/CDExport/CDExport.ui.h:2
+msgid "<b>Photos to Burn</b>"
+msgstr "<b>Foto untuk Dibakar</b>"
+
+#: ../extensions/Exporters/CDExport/CDExport.ui.h:3
+#: ../extensions/Exporters/FolderExport/FolderExport.glade.h:7
+#: ../extensions/Exporters/GalleryExport/GalleryExport.glade.h:7
+#: ../extensions/Exporters/SmugMugExport/SmugMugExport.glade.h:5
+#: ../src/f-spot.glade.h:20
+msgid "Autorotate"
+msgstr "Rotasi otomatis"
+
+#: ../extensions/Exporters/CDExport/CDExport.ui.h:4
+msgid "Create CD"
+msgstr "Buat CD"
+
+#: ../extensions/Exporters/CDExport/CDExport.ui.h:5
+#: ../src/Widgets/InfoBox.cs:222
+msgid "Size"
+msgstr "Ukuran"
+
+#: ../extensions/Exporters/CDExport/CDExport.ui.h:6
+msgid "Size of the exported selection:"
+msgstr "Ukuran dari pilihan yang diekspor:"
+
+#: ../extensions/Exporters/CDExport/CDExport.ui.h:7
+msgid "_Browse Previously Scheduled Files"
+msgstr ""
+
+#: ../extensions/Exporters/CDExport/CDExport.ui.h:8
+#: ../extensions/Exporters/FlickrExport/FlickrExport.glade.h:15
+#: ../extensions/Exporters/FolderExport/FolderExport.glade.h:16
+#: ../extensions/Exporters/GalleryExport/GalleryExport.glade.h:15
+#: ../extensions/Exporters/PicasaWebExport/PicasaWebExport.glade.h:20
+#: ../extensions/Exporters/SmugMugExport/SmugMugExport.glade.h:12
+#: ../extensions/Exporters/TabbloExport/ui/TabbloExport.ui.h:9
+#: ../src/f-spot.glade.h:66
+msgid "_Export"
+msgstr "_Ekspor"
+
+#: ../extensions/Exporters/CDExport/CDExport.ui.h:9
+msgid "_Write only these photos to CD"
+msgstr "_Tulis hanya foto ini ke CD"
+
+#: ../extensions/Exporters/FacebookExport/FacebookExport.addin.xml.h:1
+msgid "F_acebook..."
+msgstr "F_acebook..."
+
+#: ../extensions/Exporters/FacebookExport/FacebookExport.cs:99
+msgid "Waiting for authorization"
+msgstr "Menunggu otorisasi"
+
+#: ../extensions/Exporters/FacebookExport/FacebookExport.cs:100
+msgid ""
+"F-Spot will now launch your browser so that you can enable the permission "
+"you just selected.\n"
+"\n"
+"Once you are directed by Facebook to return to this application, click \"Ok"
+"\" below."
+msgstr ""
+"F-Spot akan meluncurkan peramban Anda sehingga Anda dapat mengaktifkan ijin "
+"yang baru Anda pilih.\n"
+"\n"
+"Setelah Anda diarahkan oleh Facebook untuk kembali ke aplikasi ini, tekan "
+"\"Ok\" di bawah."
+
+#: ../extensions/Exporters/FacebookExport/FacebookExport.cs:281
+msgid "Too many images to export"
+msgstr "Terlalu banyak gambar untuk diekspor"
+
+#: ../extensions/Exporters/FacebookExport/FacebookExport.cs:282
+#, csharp-format
+msgid ""
+"Facebook only permits {0} photographs per album. Please refine your "
+"selection and try again."
+msgstr ""
+"Facebook hanya mengijinkan {0} foto per album. Silakan atur lagi pilihan "
+"Anda dan coba lagi."
+
+#: ../extensions/Exporters/FacebookExport/FacebookExport.cs:297
+msgid "Album must have a name"
+msgstr "Album mesti punya nama"
+
+#: ../extensions/Exporters/FacebookExport/FacebookExport.cs:298
+msgid "Please name your album or choose an existing album."
+msgstr "Silakan namai album Anda atau pilih album yang telah ada."
+
+#: ../extensions/Exporters/FacebookExport/FacebookExport.cs:312
+msgid "Creating a new album failed"
+msgstr "Pembuatan suatu album baru gagal"
+
+#: ../extensions/Exporters/FacebookExport/FacebookExport.cs:313
+#, csharp-format
+msgid ""
+"An error occurred creating a new album.\n"
+"\n"
+"{0}"
+msgstr ""
+"Terjadi galat saat membuat suatu album baru.\n"
+"\n"
+"{0}"
+
+#: ../extensions/Exporters/FacebookExport/FacebookExport.cs:326
+#: ../extensions/Exporters/FlickrExport/FlickrExport.cs:476
+#: ../extensions/Exporters/GalleryExport/GalleryExport.cs:730
+#: ../extensions/Exporters/PicasaWebExport/PicasaWebExport.cs:598
+#: ../extensions/Exporters/SmugMugExport/SmugMugExport.cs:522
+msgid "Uploading Pictures"
+msgstr "Mengunggah Gambar"
+
+#: ../extensions/Exporters/FacebookExport/FacebookExport.cs:354
+#: ../extensions/Exporters/PicasaWebExport/PicasaWebExport.cs:661
+#: ../extensions/Exporters/SmugMugExport/SmugMugExport.cs:565
+#, csharp-format
+msgid "Uploading picture \"{0}\" ({1} of {2})"
+msgstr "Mengunggah gambar \"{0}\" ({1} dari {2})"
+
+#: ../extensions/Exporters/FacebookExport/FacebookExport.cs:368
+#, csharp-format
+msgid "Error Uploading To Facebook: {0}"
+msgstr "Galat Saat Mengunggah Ke Facebook: {0}"
+
+#: ../extensions/Exporters/FacebookExport/FacebookExport.cs:369
+#: ../extensions/Exporters/FlickrExport/FlickrExport.cs:371
+#: ../extensions/Exporters/FolderExport/FolderExport.cs:226
+#: ../extensions/Exporters/GalleryExport/GalleryExport.cs:797
+#: ../extensions/Exporters/PicasaWebExport/PicasaWebExport.cs:694
+#: ../extensions/Exporters/SmugMugExport/SmugMugExport.cs:596
+#: ../extensions/Exporters/TabbloExport/TabbloExport.cs:319
+msgid "Error"
+msgstr "Galat"
+
+#: ../extensions/Exporters/FacebookExport/FacebookExport.cs:379
+#: ../extensions/Exporters/FlickrExport/FlickrExport.cs:382
+#: ../extensions/Exporters/GalleryExport/GalleryExport.cs:808
+#: ../extensions/Exporters/PicasaWebExport/PicasaWebExport.cs:707
+#: ../extensions/Exporters/SmugMugExport/SmugMugExport.cs:609
+msgid "Upload Complete"
+msgstr "Pengunggahan Selesai"
+
+#: ../extensions/Exporters/FacebookExport/FacebookExport.cs:382
+msgid "Visit F-Spot group on Facebook"
+msgstr "Kunjungi grup F-Spot di Facebook"
+
+#: ../extensions/Exporters/FacebookExport/FacebookExportDialog.cs:212
+msgid "Waiting for authentication"
+msgstr "Menunggu otentikasi"
+
+#: ../extensions/Exporters/FacebookExport/FacebookExportDialog.cs:213
+msgid ""
+"F-Spot will now launch your browser so that you can log into Facebook.\n"
+"\n"
+"Once you are directed by Facebook to return to this application, click \"Ok"
+"\" below. F-Spot will cache your session in gnome-keyring, if possible, and "
+"re-use it on future Facebook exports."
+msgstr ""
+
+#: ../extensions/Exporters/FacebookExport/FacebookExportDialog.cs:218
+msgid "Authenticating..."
+msgstr "Mengotentikasi..."
+
+#: ../extensions/Exporters/FacebookExport/FacebookExportDialog.cs:228
+msgid "Error logging into Facebook"
+msgstr "Galat saat log masuk ke Facebook"
+
+#: ../extensions/Exporters/FacebookExport/FacebookExportDialog.cs:229
+msgid ""
+"There was a problem logging into Facebook. Check your credentials and try "
+"again."
+msgstr ""
+"Ada masalah log masuk ke Facebook. Periksa kredensial Anda dan coba lagi."
+
+#: ../extensions/Exporters/FacebookExport/FacebookExportDialog.cs:238
+msgid "Authorizing Session"
+msgstr "Mengotorisasi Sesi"
+
+#: ../extensions/Exporters/FacebookExport/FacebookExportDialog.cs:247
+msgid "Session established, fetching user info..."
+msgstr "Sesi terjalin, mengambil info pengguna..."
+
+#: ../extensions/Exporters/FacebookExport/FacebookExportDialog.cs:253
+msgid "Session established, fetching friend list..."
+msgstr "Sesi terjalin, mengambil daftar teman..."
+
+#: ../extensions/Exporters/FacebookExport/FacebookExportDialog.cs:263
+msgid "Session established, fetching friend details..."
+msgstr "Sesi terjalin, mengambil rincian teman..."
+
+#: ../extensions/Exporters/FacebookExport/FacebookExportDialog.cs:275
+msgid "Session established, fetching photo albums..."
+msgstr "Sesi terjalin, mengambil album foto..."
+
+#. Note for translators: {0} and {1} are respectively firstname and surname of the user
+#: ../extensions/Exporters/FacebookExport/FacebookExportDialog.cs:285
+#, csharp-format
+msgid "{0} {1} is logged into Facebook"
+msgstr "{0} {1} sedang log masuk ke Facebook"
+
+#: ../extensions/Exporters/FacebookExport/FacebookExportDialog.cs:294
+msgid "Facebook Connection Error"
+msgstr "Kesalahan Sambungan Facebook"
+
+#: ../extensions/Exporters/FacebookExport/FacebookExportDialog.cs:295
+#, csharp-format
+msgid ""
+"There was an error when downloading your information from Facebook.\n"
+"\n"
+"Facebook said: {0}"
+msgstr ""
+"Ada kesalahan saat mengunduh informasi Anda dari Facebook.\n"
+"\n"
+"Facebook bilang: {0}"
+
+#: ../extensions/Exporters/FacebookExport/FacebookExportDialog.cs:324
+msgid "You are not logged in."
+msgstr "Anda tidak sedang log masuk."
+
+#: ../extensions/Exporters/FacebookExport/FacebookExport.ui.h:1
+msgid "Auto-confirm Photos"
+msgstr ""
+
+#: ../extensions/Exporters/FacebookExport/FacebookExport.ui.h:2
+#, fuzzy
+msgid "Caption"
+msgstr "keterangan gambar"
+
+#: ../extensions/Exporters/FacebookExport/FacebookExport.ui.h:3
+msgid "Create a new album"
+msgstr "Buat suatu album baru"
+
+#: ../extensions/Exporters/FacebookExport/FacebookExport.ui.h:4
+msgid "Description"
+msgstr "Deskripsi"
+
+#: ../extensions/Exporters/FacebookExport/FacebookExport.ui.h:5
+msgid "Export to Facebook"
+msgstr "Ekspor ke Facebook"
+
+#: ../extensions/Exporters/FacebookExport/FacebookExport.ui.h:6
+msgid "In this photo"
+msgstr "Di foto ini"
+
+#: ../extensions/Exporters/FacebookExport/FacebookExport.ui.h:7
+#: ../src/XmpTagsImporter.cs:90
+msgid "Location"
+msgstr "Lokasi"
+
+#: ../extensions/Exporters/FacebookExport/FacebookExport.ui.h:8
+msgid "Login"
+msgstr "Log masuk"
+
+#: ../extensions/Exporters/FacebookExport/FacebookExport.ui.h:9
+msgid "Logout"
+msgstr "Log keluar"
+
+#: ../extensions/Exporters/FacebookExport/FacebookExport.ui.h:10
+#: ../src/Widgets/InfoBox.cs:213
+msgid "Name"
+msgstr "Nama"
+
+#: ../extensions/Exporters/FacebookExport/FacebookExport.ui.h:11
+msgid "Not logged in"
+msgstr "Tidak log masuk"
+
+#: ../extensions/Exporters/FacebookExport/FacebookExport.ui.h:12
+#, fuzzy
+msgid "Permissions:"
+msgstr "Hak Akses"
+
+#: ../extensions/Exporters/FacebookExport/FacebookExport.ui.h:13
+msgid "Stay Connected"
+msgstr "Tetap Tersambung"
+
+#: ../extensions/Exporters/FacebookExport/FacebookExport.ui.h:14
+msgid "Use an existing album"
+msgstr "Gunakan album yang telah ada"
+
+#: ../extensions/Exporters/FacebookExport/FacebookExport.ui.h:15
+msgid "Who is this?"
+msgstr "Siapa ini?"
+
+#: ../extensions/Exporters/FlickrExport/FlickrExport.addin.xml.h:1
+msgid "_23hq..."
+msgstr "_23hq..."
+
+#: ../extensions/Exporters/FlickrExport/FlickrExport.addin.xml.h:2
+msgid "_Flickr..."
+msgstr "_Flickr..."
+
+#: ../extensions/Exporters/FlickrExport/FlickrExport.addin.xml.h:3
+msgid "_Zooomr..."
+msgstr "_Zooomr..."
+
+#: ../extensions/Exporters/FlickrExport/FlickrExport.cs:106
+#: ../extensions/Exporters/FlickrExport/FlickrExport.glade.h:5
+msgid "Authorize"
+msgstr "Otorisasikan"
+
+#: ../extensions/Exporters/FlickrExport/FlickrExport.cs:112
+#, csharp-format
+msgid ""
+"Return to this window after you have finished the authorization process on "
+"{0} and click the \"Complete Authorization\" button below"
+msgstr ""
+
+#: ../extensions/Exporters/FlickrExport/FlickrExport.cs:113
+msgid "Complete Authorization"
+msgstr "Otorisasi Selesai"
+
+#: ../extensions/Exporters/FlickrExport/FlickrExport.cs:118
+#, csharp-format
+msgid "Logging into {0}"
+msgstr "Sedang log masuk ke {0}"
+
+#: ../extensions/Exporters/FlickrExport/FlickrExport.cs:119
+msgid "Checking credentials..."
+msgstr "Memeriksa kredensial..."
+
+#: ../extensions/Exporters/FlickrExport/FlickrExport.cs:126
+#, csharp-format
+msgid "Welcome {0} you are connected to {1}"
+msgstr "Selama datang {0} Anda sekarang tersambung ke {1}"
+
+#: ../extensions/Exporters/FlickrExport/FlickrExport.cs:129
+#, csharp-format
+msgid "Sign in as a different user"
+msgstr ""
+
+#: ../extensions/Exporters/FlickrExport/FlickrExport.cs:134
+#, csharp-format
+msgid "Used {0} of your allowed {1} monthly quota"
+msgstr ""
+
+#: ../extensions/Exporters/FlickrExport/FlickrExport.cs:298
+msgid "Unable to log on"
+msgstr ""
+
+#: ../extensions/Exporters/FlickrExport/FlickrExport.cs:318
+#, fuzzy, csharp-format
+msgid "Waiting for response {0} of {1}"
+msgstr "Menunggu otentikasi"
+
+#: ../extensions/Exporters/FlickrExport/FlickrExport.cs:345
+#: ../extensions/Exporters/GalleryExport/GalleryExport.cs:777
+#, fuzzy, csharp-format
+msgid "Uploading picture \"{0}\""
+msgstr "Kecerahan foto"
+
+#: ../extensions/Exporters/FlickrExport/FlickrExport.cs:368
+#, fuzzy, csharp-format
+msgid "Error Uploading To {0}: {1}"
+msgstr "Ada error saat menyimpan {0} ke {1}: {2}"
+
+#: ../extensions/Exporters/FlickrExport/FlickrExport.cs:455
+msgid "Unable to log on."
+msgstr ""
+
+#: ../extensions/Exporters/FlickrExport/FlickrExport.cs:456
+#, csharp-format
+msgid ""
+"F-Spot was unable to log on to {0}. Make sure you have given the "
+"authentication using {0} web browser interface."
+msgstr ""
+
+#: ../extensions/Exporters/FlickrExport/FlickrExport.glade.h:1
+msgid "<b>Account</b>"
+msgstr "<b>Akun</b>"
+
+#: ../extensions/Exporters/FlickrExport/FlickrExport.glade.h:2
+#: ../extensions/Exporters/FolderExport/FolderExport.glade.h:5
+#: ../extensions/Exporters/GalleryExport/GalleryExport.glade.h:3
+#: ../extensions/Exporters/PicasaWebExport/PicasaWebExport.glade.h:2
+#: ../extensions/Exporters/SmugMugExport/SmugMugExport.glade.h:2
+#: ../extensions/Exporters/TabbloExport/ui/TabbloExport.ui.h:2
+#: ../src/f-spot.glade.h:8 ../src/UI.Dialog/ui/AdjustTimeDialog.ui.h:5
+msgid "<b>Photos</b>"
+msgstr "<b>Foto</b>"
+
+#: ../extensions/Exporters/FlickrExport/FlickrExport.glade.h:3
+#: ../extensions/Exporters/FolderExport/FolderExport.glade.h:6
+#: ../extensions/Exporters/GalleryExport/GalleryExport.glade.h:4
+#: ../extensions/Exporters/PicasaWebExport/PicasaWebExport.glade.h:4
+#: ../extensions/Exporters/SmugMugExport/SmugMugExport.glade.h:4
+#: ../src/f-spot.glade.h:10
+msgid "<b>Style</b>"
+msgstr "<b>Gaya</b>"
+
+#: ../extensions/Exporters/FlickrExport/FlickrExport.glade.h:4
+#, fuzzy
+msgid "<b>Viewing permissions</b>"
+msgstr "Hak akses berkas."
+
+#: ../extensions/Exporters/FlickrExport/FlickrExport.glade.h:6
+#: ../extensions/Exporters/GalleryExport/GalleryExport.glade.h:8
+#: ../extensions/Exporters/PicasaWebExport/PicasaWebExport.glade.h:9
+#: ../extensions/Exporters/SmugMugExport/SmugMugExport.glade.h:6
+#: ../extensions/Exporters/TabbloExport/ui/TabbloExport.ui.h:5
+msgid "Export"
+msgstr "Ekspor"
+
+#: ../extensions/Exporters/FlickrExport/FlickrExport.glade.h:7
+msgid "Export tag _hierarchy"
+msgstr ""
+
+#: ../extensions/Exporters/FlickrExport/FlickrExport.glade.h:8
+msgid ""
+"F-Spot needs your authorization in order to upload photos to your {0} "
+"account. Press the \"Authorize\" button to open a web browser and give F-"
+"Spot the authorization. "
+msgstr ""
+
+#: ../extensions/Exporters/FlickrExport/FlickrExport.glade.h:9
+msgid "Ignore _top level tags"
+msgstr ""
+
+#: ../extensions/Exporters/FlickrExport/FlickrExport.glade.h:10
+msgid "Private"
+msgstr "Pribadi"
+
+#: ../extensions/Exporters/FlickrExport/FlickrExport.glade.h:11
+msgid "Public"
+msgstr "Publik"
+
+#: ../extensions/Exporters/FlickrExport/FlickrExport.glade.h:12
+msgid "Strip _metadata"
+msgstr "Hapus _metadata"
+
+#: ../extensions/Exporters/FlickrExport/FlickrExport.glade.h:13
+msgid "Visible to Family"
+msgstr "Dapat Dilihat Keluarga"
+
+#: ../extensions/Exporters/FlickrExport/FlickrExport.glade.h:14
+msgid "Visible to Friends"
+msgstr "Dapat Dilihat Teman"
+
+#: ../extensions/Exporters/FlickrExport/FlickrExport.glade.h:16
+#: ../extensions/Exporters/PicasaWebExport/PicasaWebExport.glade.h:21
+msgid "_Export tags"
+msgstr "_Ekspor tag"
+
+#: ../extensions/Exporters/FlickrExport/FlickrExport.glade.h:17
+#: ../extensions/Exporters/FolderExport/FolderExport.glade.h:18
+#: ../extensions/Exporters/GalleryExport/GalleryExport.glade.h:21
+#: ../extensions/Exporters/PicasaWebExport/PicasaWebExport.glade.h:25
+#: ../extensions/Exporters/SmugMugExport/SmugMugExport.glade.h:15
+#, fuzzy
+msgid "_Resize to: "
+msgstr "URI tujuan"
+
+#: ../extensions/Exporters/FlickrExport/FlickrExport.glade.h:18
+msgid "_View photos in browser when done uploading"
+msgstr "_Tilik foto di peramban setelah selesai mengunggah"
+
+#: ../extensions/Exporters/FlickrExport/FlickrExport.glade.h:19
+#: ../extensions/Exporters/FolderExport/FolderExport.glade.h:20
+#: ../extensions/Exporters/GalleryExport/GalleryExport.glade.h:24
+#: ../extensions/Exporters/PicasaWebExport/PicasaWebExport.glade.h:27
+#: ../extensions/Exporters/SmugMugExport/SmugMugExport.glade.h:17
+msgid "pixels"
+msgstr "piksel"
+
+#: ../extensions/Exporters/FolderExport/FolderExport.addin.xml.h:1
+msgid "F_older..."
+msgstr "F_older..."
+
+#: ../extensions/Exporters/FolderExport/FolderExport.cs:120
+msgid "Select Export Folder"
+msgstr "Pilih Folder Ekspor"
+
+#: ../extensions/Exporters/FolderExport/FolderExport.cs:173
+msgid "Building Gallery"
+msgstr "Membangun Galeri"
+
+#: ../extensions/Exporters/FolderExport/FolderExport.cs:217
+#, csharp-format
+msgid "Exporting \"{0}\"..."
+msgstr "Mengekspor \"{0}\"..."
+
+#: ../extensions/Exporters/FolderExport/FolderExport.cs:224
+#, csharp-format
+msgid "Error Copying \"{0}\" to Gallery:{2}{1}"
+msgstr "Galat Saat Menyalin \"{0}\" ke Galeri:{2}{1}"
+
+#: ../extensions/Exporters/FolderExport/FolderExport.cs:250
+#, csharp-format
+msgid "Transferring to \"{0}\""
+msgstr "Memindah ke \"{0}\""
+
+#: ../extensions/Exporters/FolderExport/FolderExport.cs:251
+msgid "Transferring..."
+msgstr "Memindah..."
+
+#. No need to check result here as if result is not true, an Exception will be thrown before
+#: ../extensions/Exporters/FolderExport/FolderExport.cs:256
+msgid "Export Complete."
+msgstr "Pengeksporan Selesai."
+
+#: ../extensions/Exporters/FolderExport/FolderExport.cs:258
+msgid "Exporting Photos Completed."
+msgstr "Pengeksporan Foto Selesai."
+
+#: ../extensions/Exporters/FolderExport/FolderExport.cs:325
+msgid "Exporting Photos"
+msgstr "Mengekspor Foto"
+
+#. Note for translators: light as clear, opposite as dark
+#: ../extensions/Exporters/FolderExport/FolderExport.cs:743
+msgid "Light"
+msgstr "Terang"
+
+#: ../extensions/Exporters/FolderExport/FolderExport.cs:744
+msgid "Dark"
+msgstr "Gelap"
+
+#. Abbreviation of previous
+#: ../extensions/Exporters/FolderExport/FolderExport.cs:924
+msgid "Prev"
+msgstr "Sebelumnya"
+
+#: ../extensions/Exporters/FolderExport/FolderExport.cs:926
+#: ../extensions/Exporters/FolderExport/FolderExport.cs:1167
+msgid "Index"
+msgstr "Indeks"
+
+#. Don't care otherwise, Tags sounds reasonable
+#: ../extensions/Exporters/FolderExport/FolderExport.cs:929
+#: ../extensions/Exporters/FolderExport/FolderExport.cs:1101
+#: ../extensions/Exporters/FolderExport/FolderExport.cs:1141
+#: ../src/MainWindow.cs:348 ../src/Widgets/Sidebar.cs:56
+msgid "Tags"
+msgstr "Tag"
+
+#: ../extensions/Exporters/FolderExport/FolderExport.cs:932
+#: ../src/ItemAction.cs:102
+msgid "Next"
+msgstr "Berikutnya"
+
+#: ../extensions/Exporters/FolderExport/FolderExport.cs:1036
+msgid "Gallery generated by"
+msgstr ""
+
+#: ../extensions/Exporters/FolderExport/FolderExport.cs:1076
+msgid "Show Styles"
+msgstr "Tampilkan Gaya"
+
+#: ../extensions/Exporters/FolderExport/FolderExport.cs:1077
+msgid "Hide Styles"
+msgstr "Sembunyikan Gaya"
+
+#: ../extensions/Exporters/FolderExport/FolderExport.cs:1112
+#: ../extensions/Exporters/FolderExport/FolderExport.cs:1113
+#: ../src/ui/main_window.ui.h:25
+msgid "Tags: "
+msgstr "Tag:"
+
+#: ../extensions/Exporters/FolderExport/FolderExport.cs:1244
+#: ../extensions/Exporters/FolderExport/FolderExport.cs:1377
+msgid "Page:"
+msgstr "Halaman:"
+
+#: ../extensions/Exporters/FolderExport/FolderExport.glade.h:1
+msgid "\n"
+msgstr "\n"
+
+#: ../extensions/Exporters/FolderExport/FolderExport.glade.h:3
+msgid "<b>Destination</b>"
+msgstr "<b>Tujuan</b>"
+
+#: ../extensions/Exporters/FolderExport/FolderExport.glade.h:4
+msgid "<b>Export Method</b>"
+msgstr "<b>Metoda Ekspor</b>"
+
+#: ../extensions/Exporters/FolderExport/FolderExport.glade.h:8
+msgid "Create _gallery using \"Original\""
+msgstr ""
+
+#: ../extensions/Exporters/FolderExport/FolderExport.glade.h:9
+msgid "Create standalone _web gallery"
+msgstr ""
+
+#: ../extensions/Exporters/FolderExport/FolderExport.glade.h:10
+msgid "D_escription:"
+msgstr "D_eskripsi:"
+
+#: ../extensions/Exporters/FolderExport/FolderExport.glade.h:11
+msgid "Export _tags"
+msgstr "Ekspor _tag"
+
+#: ../extensions/Exporters/FolderExport/FolderExport.glade.h:12
+msgid "Export tag _icons"
+msgstr "Ekspor _ikon tag"
+
+#: ../extensions/Exporters/FolderExport/FolderExport.glade.h:13
+msgid "Folder Export"
+msgstr "Ekspor Folder"
+
+#: ../extensions/Exporters/FolderExport/FolderExport.glade.h:14
+msgid "G_allery Name:"
+msgstr "Nama G_aleri:"
+
+#: ../extensions/Exporters/FolderExport/FolderExport.glade.h:15
+msgid "Open _destination when done exporting"
+msgstr ""
+
+#: ../extensions/Exporters/FolderExport/FolderExport.glade.h:17
+msgid "_Folder:"
+msgstr "_Folder:"
+
+#: ../extensions/Exporters/FolderExport/FolderExport.glade.h:19
+msgid "_Save the files only"
+msgstr "Hanya _simpan berkas"
+
+#: ../extensions/Exporters/GalleryExport/FormClient.cs:294
+#, fuzzy
+msgid "Unhandled exception"
+msgstr "Ada eksepsi yang dikembalikan: %s"
+
+#: ../extensions/Exporters/GalleryExport/GalleryExport.addin.xml.h:1
+msgid "Web _Gallery..."
+msgstr "_Galeri Web..."
+
+#: ../extensions/Exporters/GalleryExport/GalleryExport.cs:53
+msgid ""
+"Cannot connect to a Gallery for which the version is unknown.\n"
+"Please check that you have Remote plugin 1.0.8 or later"
+msgstr ""
+
+#: ../extensions/Exporters/GalleryExport/GalleryExport.cs:391
+msgid "Invalid URL"
+msgstr "URL Tak Valid"
+
+#: ../extensions/Exporters/GalleryExport/GalleryExport.cs:392
+msgid "The gallery URL entry does not appear to be a valid URL"
+msgstr ""
+
+#: ../extensions/Exporters/GalleryExport/GalleryExport.cs:402
+#: ../extensions/Exporters/GalleryExport/GalleryExport.cs:429
+#: ../extensions/Exporters/GalleryExport/GalleryExport.cs:440
+msgid "Error while connecting to Gallery"
+msgstr ""
+
+#: ../extensions/Exporters/GalleryExport/GalleryExport.cs:403
+#: ../extensions/Exporters/GalleryExport/GalleryExport.cs:430
+#: ../extensions/Exporters/GalleryExport/GalleryExport.cs:441
+#, csharp-format
+msgid "The following error was encountered while attempting to log in: {0}"
+msgstr ""
+
+#: ../extensions/Exporters/GalleryExport/GalleryExport.cs:417
+#, fuzzy
+msgid "A Gallery with this name already exists"
+msgstr "Folder dengan nama ini sudah ada"
+
+#: ../extensions/Exporters/GalleryExport/GalleryExport.cs:418
+#, csharp-format
+msgid ""
+"There is already a Gallery with the same name in your registered Galleries. "
+"Please choose a unique name."
+msgstr ""
+
+#: ../extensions/Exporters/GalleryExport/GalleryExport.cs:528
+#, fuzzy
+msgid "(TopLevel)"
+msgstr "Lebar Aras Puncak"
+
+#: ../extensions/Exporters/GalleryExport/GalleryExport.cs:590
+#, fuzzy
+msgid "Invalid Gallery name"
+msgstr "Nama berkas tidak benar"
+
+#: ../extensions/Exporters/GalleryExport/GalleryExport.cs:591
+msgid ""
+"The gallery name contains invalid characters.\n"
+"Only letters, numbers, - and _ are allowed"
+msgstr ""
+
+#: ../extensions/Exporters/GalleryExport/GalleryExport.cs:796
+#, csharp-format
+msgid "Error uploading picture \"{0}\" to Gallery: {1}"
+msgstr ""
+
+#: ../extensions/Exporters/GalleryExport/GalleryExport.cs:824
+#: ../extensions/Exporters/PicasaWebExport/PicasaWebExport.cs:728
+#: ../extensions/Exporters/SmugMugExport/SmugMugExport.cs:630
+msgid "(No Gallery)"
+msgstr "(Tak Ada Galeri)"
+
+#: ../extensions/Exporters/GalleryExport/GalleryExport.cs:916
+#: ../extensions/Exporters/PicasaWebExport/PicasaWebExport.cs:850
+#: ../extensions/Exporters/SmugMugExport/SmugMugExport.cs:726
+msgid "(Not Connected)"
+msgstr "(Tak Tersambung)"
+
+#: ../extensions/Exporters/GalleryExport/GalleryExport.cs:917
+#: ../extensions/Exporters/PicasaWebExport/PicasaWebExport.cs:851
+#: ../extensions/Exporters/SmugMugExport/SmugMugExport.cs:727
+msgid "(No Albums)"
+msgstr "(Tak Ada Album)"
+
+#: ../extensions/Exporters/GalleryExport/GalleryExport.cs:969
+#: ../extensions/Exporters/PicasaWebExport/PicasaWebExport.cs:916
+#: ../extensions/Exporters/SmugMugExport/SmugMugExport.cs:768
+msgid "No account selected"
+msgstr "Tak ada akun dipilih"
+
+#: ../extensions/Exporters/GalleryExport/GalleryExport.glade.h:1
+#: ../extensions/Exporters/PicasaWebExport/PicasaWebExport.glade.h:1
+#: ../extensions/Exporters/SmugMugExport/SmugMugExport.glade.h:1
+msgid "<b>Album</b>"
+msgstr "<b>Album</b>"
+
+#: ../extensions/Exporters/GalleryExport/GalleryExport.glade.h:2
+msgid "<b>Gallery</b>"
+msgstr "<b>Galeri</b>"
+
+#: ../extensions/Exporters/GalleryExport/GalleryExport.glade.h:5
+#: ../extensions/Exporters/PicasaWebExport/PicasaWebExport.glade.h:5
+msgid "<span weight='bold' size='larger'>Error Connecting to Gallery</span>\n"
+msgstr ""
+
+#: ../extensions/Exporters/GalleryExport/GalleryExport.glade.h:9
+msgid "Export _titles and comments"
+msgstr ""
+
+#: ../extensions/Exporters/GalleryExport/GalleryExport.glade.h:10
+#: ../extensions/Exporters/PicasaWebExport/PicasaWebExport.glade.h:10
+#: ../extensions/Exporters/SmugMugExport/SmugMugExport.glade.h:7
+msgid "Open _album in browser when done uploading"
+msgstr ""
+
+#: ../extensions/Exporters/GalleryExport/GalleryExport.glade.h:11
+#: ../extensions/Exporters/PicasaWebExport/PicasaWebExport.glade.h:11
+msgid "Please verify that the settings for this gallery are correct."
+msgstr ""
+
+#: ../extensions/Exporters/GalleryExport/GalleryExport.glade.h:12
+msgid "U_RL:"
+msgstr "U_RL:"
+
+#: ../extensions/Exporters/GalleryExport/GalleryExport.glade.h:13
+msgid "_Album Name:"
+msgstr "Nama _Album:"
+
+#: ../extensions/Exporters/GalleryExport/GalleryExport.glade.h:14
+#: ../extensions/Exporters/PicasaWebExport/PicasaWebExport.glade.h:19
+#: ../extensions/Exporters/SmugMugExport/SmugMugExport.glade.h:11
+msgid "_Description:"
+msgstr "_Deskripsi:"
+
+#: ../extensions/Exporters/GalleryExport/GalleryExport.glade.h:16
+#: ../extensions/Exporters/PicasaWebExport/PicasaWebExport.glade.h:22
+#: ../extensions/Exporters/SmugMugExport/SmugMugExport.glade.h:13
+msgid "_Export to Album:"
+msgstr "_Ekspor ke Album:"
+
+#: ../extensions/Exporters/GalleryExport/GalleryExport.glade.h:17
+msgid "_Gallery Name:"
+msgstr "Nama _Galeri:"
+
+#: ../extensions/Exporters/GalleryExport/GalleryExport.glade.h:18
+#: ../extensions/Exporters/PicasaWebExport/PicasaWebExport.glade.h:23
+msgid "_Gallery:"
+msgstr "_Galeri:"
+
+#: ../extensions/Exporters/GalleryExport/GalleryExport.glade.h:19
+#, fuzzy
+msgid "_Parent Album:"
+msgstr "Jendela Induk"
+
+#: ../extensions/Exporters/GalleryExport/GalleryExport.glade.h:20
+#: ../extensions/Exporters/PicasaWebExport/PicasaWebExport.glade.h:24
+#: ../extensions/Exporters/SmugMugExport/SmugMugExport.glade.h:14
+#: ../extensions/Exporters/TabbloExport/ui/TabbloExport.ui.h:10
+msgid "_Password:"
+msgstr "Kata _Sandi:"
+
+#: ../extensions/Exporters/GalleryExport/GalleryExport.glade.h:22
+msgid "_Title:"
+msgstr "_Judul:"
+
+#: ../extensions/Exporters/GalleryExport/GalleryExport.glade.h:23
+#: ../extensions/Exporters/PicasaWebExport/PicasaWebExport.glade.h:26
+#: ../extensions/Exporters/SmugMugExport/SmugMugExport.glade.h:16
+#: ../extensions/Exporters/TabbloExport/ui/TabbloExport.ui.h:11
+msgid "_Username:"
+msgstr "Nama Pengg_una:"
+
+#: ../extensions/Exporters/GalleryExport/GalleryRemote.cs:362
+msgid "Error reading server response"
+msgstr ""
+
+#. failed to find the response
+#: ../extensions/Exporters/GalleryExport/GalleryRemote.cs:374
+msgid "Server returned response without Gallery content"
+msgstr ""
+
+#: ../extensions/Exporters/GalleryExport/GalleryRemote.cs:711
+#, fuzzy
+msgid "Error while creating new album"
+msgstr "Ada error saat membuat direktori baru"
+
+#: ../extensions/Exporters/GalleryExport/GalleryRemote.cs:712
+#, csharp-format
+msgid ""
+"The following error was encountered while attempting to perform the "
+"requested operation:\n"
+"{0} ({1})"
+msgstr ""
+
+#: ../extensions/Exporters/PicasaWebExport/PicasaWebExport.addin.xml.h:1
+msgid "_PicasaWeb..."
+msgstr "_PicasaWeb..."
+
+#: ../extensions/Exporters/PicasaWebExport/PicasaWebExport.cs:442
+#, fuzzy
+msgid "Error while creating Album"
+msgstr "Kesalahan saat membuat direktori %B."
+
+#: ../extensions/Exporters/PicasaWebExport/PicasaWebExport.cs:443
+#, csharp-format
+msgid ""
+"The following error was encountered while attempting to create an album: {0}"
+msgstr ""
+
+#: ../extensions/Exporters/PicasaWebExport/PicasaWebExport.cs:621
+#, csharp-format
+msgid "{0} Sent"
+msgstr "{0} Terkirim"
+
+#: ../extensions/Exporters/PicasaWebExport/PicasaWebExport.cs:623
+#, csharp-format
+msgid "{0} of approx. {1}"
+msgstr "{0} dari kira-kira {1}"
+
+#: ../extensions/Exporters/PicasaWebExport/PicasaWebExport.cs:692
+#: ../extensions/Exporters/SmugMugExport/SmugMugExport.cs:594
+#, csharp-format
+msgid "Error Uploading To Gallery: {0}"
+msgstr ""
+
+#: ../extensions/Exporters/PicasaWebExport/PicasaWebExport.cs:779
+#, csharp-format
+msgid "Available space: {0}, {1}% used out of {2}"
+msgstr ""
+
+#: ../extensions/Exporters/PicasaWebExport/PicasaWebExport.cs:892
+#, csharp-format
+msgid ""
+"The selected album has a limit of {0} pictures,\n"
+"which would be passed with the current selection of {1} images"
+msgstr ""
+
+#: ../extensions/Exporters/PicasaWebExport/PicasaWebExport.glade.h:3
+#, fuzzy
+msgid "<b>PicasaWeb Export</b>"
+msgstr "Ekspor snippet"
+
+#: ../extensions/Exporters/PicasaWebExport/PicasaWebExport.glade.h:7
+msgid ""
+"<span weight='bold' size='larger'>Your Google Account is locked</span>\n"
+msgstr ""
+
+#: ../extensions/Exporters/PicasaWebExport/PicasaWebExport.glade.h:12
+msgid ""
+"Please verify that the settings for this gallery are correct.\n"
+"Enter the letters as they are shown in the image in\n"
+"the 'Captcha' field. <i>Letters are not case-sensitive</i>"
+msgstr ""
+
+#: ../extensions/Exporters/PicasaWebExport/PicasaWebExport.glade.h:15
+#: ../extensions/Exporters/SmugMugExport/SmugMugExport.glade.h:8
+msgid "Public Album"
+msgstr "Album Publik"
+
+#: ../extensions/Exporters/PicasaWebExport/PicasaWebExport.glade.h:16
+#: ../extensions/Exporters/SmugMugExport/SmugMugExport.glade.h:10
+msgid "_Album Title:"
+msgstr "Judul _Album:"
+
+#: ../extensions/Exporters/PicasaWebExport/PicasaWebExport.glade.h:17
+msgid "_Autorotate"
+msgstr ""
+
+#: ../extensions/Exporters/PicasaWebExport/PicasaWebExport.glade.h:18
+msgid "_Captcha:"
+msgstr "_Captcha:"
+
+#: ../extensions/Exporters/SmugMugExport/SmugMugExport.addin.xml.h:1
+msgid "_SmugMug..."
+msgstr "_SmugMug..."
+
+#: ../extensions/Exporters/SmugMugExport/SmugMugExport.glade.h:3
+#, fuzzy
+msgid "<b>SmugMug Export</b>"
+msgstr "Ekspor snippet"
+
+#: ../extensions/Exporters/SmugMugExport/SmugMugExport.glade.h:9
+msgid "_Account:"
+msgstr "_Akun:"
+
+#: ../extensions/Exporters/TabbloExport/Tabblo/Connection.cs:132
+#, fuzzy, csharp-format
+msgid "Uploading photo \"{0}\""
+msgstr "Path Foto"
+
+#: ../extensions/Exporters/TabbloExport/Tabblo/Connection.cs:206
+msgid "Logging into Tabblo"
+msgstr "Log masuk ke Tabblo"
+
+#: ../extensions/Exporters/TabbloExport/Tabblo/Connection.cs:267
+msgid "Obtaining URL for upload"
+msgstr ""
+
+#: ../extensions/Exporters/TabbloExport/TabbloExport.addin.xml.h:1
+msgid "_Tabblo..."
+msgstr "_Tabblo..."
+
+#: ../extensions/Exporters/TabbloExport/TabbloExport.cs:308
+msgid "Done sending photos"
+msgstr "Selesai mengirim foto"
+
+#: ../extensions/Exporters/TabbloExport/TabbloExport.cs:310
+msgid "Upload complete"
+msgstr "Pengunggahan selesai"
+
+#: ../extensions/Exporters/TabbloExport/TabbloExport.cs:316
+msgid "Error uploading to Tabblo: "
+msgstr "Galat saat mengunggah ke Tabblo:"
+
+#: ../extensions/Exporters/TabbloExport/ui/TabbloExport.ui.h:1
+#, fuzzy
+msgid "<b>F-Spot tags</b>"
+msgstr "S_isip Tag"
+
+#: ../extensions/Exporters/TabbloExport/ui/TabbloExport.ui.h:3
+#, fuzzy
+msgid "<b>Tabblo account</b>"
+msgstr "Nama _akunt:"
+
+#: ../extensions/Exporters/TabbloExport/ui/TabbloExport.ui.h:4
+msgid ""
+"<small><i>F-Spot tags can help you track the export status of photos. "
+"Example: Use one tag for the photos that you plan to export, and another one "
+"for those already exported. Here, you can tell F-Spot to automatically "
+"replace these tags as appropriate.</i></small>"
+msgstr ""
+
+#: ../extensions/Exporters/TabbloExport/ui/TabbloExport.ui.h:6
+msgid "Rem_ove from exported photos:"
+msgstr ""
+
+#: ../extensions/Exporters/TabbloExport/ui/TabbloExport.ui.h:7
+#, fuzzy
+msgid "Select..."
+msgstr "_Pilih"
+
+#: ../extensions/Exporters/TabbloExport/ui/TabbloExport.ui.h:8
+msgid "_Attach to exported photos:"
+msgstr ""
+
+#: ../extensions/Exporters/TabbloExport/ui/TrustError.ui.h:1
+msgid "<b>{0}</b>."
+msgstr "<b>{0}</b>."
+
+#: ../extensions/Exporters/TabbloExport/ui/TrustError.ui.h:2
+msgid "A trust error occured while attempting to access"
+msgstr ""
+
+#: ../extensions/Exporters/TabbloExport/ui/TrustError.ui.h:3
+msgid "Abort this session"
+msgstr "Gugurkan sesi ini"
+
+#: ../extensions/Exporters/TabbloExport/ui/TrustError.ui.h:4
+msgid "Always trust this site's certificate"
+msgstr ""
+
+#: ../extensions/Exporters/TabbloExport/ui/TrustError.ui.h:5
+#, fuzzy
+msgid "Do you wish to:"
+msgstr "Anda ingin menyambungkan koneksi?"
+
+#: ../extensions/Exporters/TabbloExport/ui/TrustError.ui.h:6
+#, fuzzy
+msgid "Trust Error"
+msgstr "Galat Tak Dikenal"
+
+#: ../extensions/Exporters/TabbloExport/ui/TrustError.ui.h:7
+msgid "Trust the site's certificate this once"
+msgstr ""
+
+#: ../extensions/Exporters/ZipExport/ZipExport.addin.xml.h:1
+#, fuzzy
+msgid "Compressed fil_e..."
+msgstr "Arsip dimampatkan gzip"
+
+#: ../extensions/Exporters/ZipExport/ZipExport.cs:47
+#: ../src/Widgets/EditorPage.cs:198
+#, fuzzy
+msgid "No selection available"
+msgstr "Tidak tersedia pembuat kode."
+
+#: ../extensions/Exporters/ZipExport/ZipExport.cs:48
+msgid ""
+"This tool requires an active selection. Please select one or more pictures "
+"and try again"
+msgstr ""
+
+#: ../extensions/Exporters/ZipExport/ZipExport.cs:64
+msgid "Select export folder"
+msgstr "Pilih folder ekspor"
+
+#: ../extensions/Exporters/ZipExport/ZipExport.cs:102
+msgid "Exporting files"
+msgstr "Mengekspor berkas"
+
+#: ../extensions/Exporters/ZipExport/ZipExport.cs:108
+#, fuzzy, csharp-format
+msgid "Preparing photo \"{0}\""
+msgstr "Path Foto"
+
+#: ../extensions/Exporters/ZipExport/ZipExport.glade.h:1
+#, fuzzy
+msgid "_Create"
+msgstr "_Buat"
+
+#: ../extensions/Exporters/ZipExport/ZipExport.glade.h:2
+#, fuzzy
+msgid "_File name:"
+msgstr "Nama file:"
+
+#: ../extensions/Exporters/ZipExport/ZipExport.glade.h:3
+msgid "_Location:"
+msgstr "_Lokasi:"
+
+#: ../extensions/Exporters/ZipExport/ZipExport.glade.h:4
+#, fuzzy
+msgid "_Scale:"
+msgstr "_Skala"
+
+#: ../extensions/Tools/HashJob/HashJob.addin.xml.h:1
+#, fuzzy
+msgid "Check for Duplicates..."
+msgstr "Saring _Spam"
+
+#: ../extensions/Tools/HashJob/HashJob.cs:53
+msgid ""
+"In order to detect duplicates on pictures you imported before 0.5.0, F-Spot "
+"needs to analyze your image collection. This is not done by default as it's "
+"time consuming. You can Start or Pause this update process using this dialog."
+msgstr ""
+
+#: ../extensions/Tools/HashJob/HashJob.cs:59
+#, csharp-format
+msgid ""
+"You currently have {0} photos needing md5 calculation, and {1} pending jobs"
+msgstr ""
+
+#: ../extensions/Tools/HashJob/HashJob.cs:75 ../src/ui/main_window.ui.h:38
+#, fuzzy
+msgid "_Close"
+msgstr "_Tutup"
+
+#: ../extensions/Tools/HashJob/HashJob.cs:102
+#, fuzzy
+msgid "Processing images..."
+msgstr "Gambar yang ditemukan:"
+
+#: ../extensions/Tools/HashJob/HashJob.cs:108
+#, fuzzy
+msgid "Stopped"
+msgstr "Dihentikan"
+
+#: ../extensions/Tools/LiveWebGallery/GalleryRequestHandler.cs:107
+msgid "F-Spot Gallery"
+msgstr "Galeri F-Spot"
+
+#: ../extensions/Tools/LiveWebGallery/GalleryRequestHandler.cs:108
+msgid "The web gallery seems to be offline now"
+msgstr ""
+
+#: ../extensions/Tools/LiveWebGallery/GalleryRequestHandler.cs:109
+#, fuzzy
+msgid "Show All"
+msgstr "Tampilkan semua paket"
+
+#: ../extensions/Tools/LiveWebGallery/GalleryRequestHandler.cs:119
+#, csharp-format
+msgid "{0} photo"
+msgid_plural "{0} photos"
+msgstr[0] "{0} foto"
+
+#: ../extensions/Tools/LiveWebGallery/GalleryRequestHandler.cs:161
+#: ../extensions/Tools/LiveWebGallery/ui/LiveWebGallery.ui.h:8
+#, fuzzy
+msgid "Current View"
+msgstr "Tampilan _Sekarang"
+
+#: ../extensions/Tools/LiveWebGallery/GalleryRequestHandler.cs:164
+#, fuzzy
+msgid "Selected"
+msgstr "Terpilih"
+
+#: ../extensions/Tools/LiveWebGallery/LiveWebGallery.addin.xml.h:1
+msgid "Live Web Gallery"
+msgstr ""
+
+#: ../extensions/Tools/LiveWebGallery/LiveWebGalleryDialog.cs:89
+msgid "none"
+msgstr "tak ada"
+
+#: ../extensions/Tools/LiveWebGallery/LiveWebGalleryDialog.cs:92
+#, csharp-format
+msgid " Gallery: {0}, Photos: {1}, Last client: {3}"
+msgstr ""
+
+#: ../extensions/Tools/LiveWebGallery/LiveWebGalleryDialog.cs:156
+msgid "Gallery is inactive"
+msgstr "Galeri tak aktif"
+
+#: ../extensions/Tools/LiveWebGallery/ui/LiveWebGallery.ui.h:1
+msgid ""
+"<small><i>The gallery stays active until you either deactivate it or close\n"
+"F-Spot. Make sure local viewers access it bypassing HTTP proxy.</i></small>"
+msgstr ""
+
+#: ../extensions/Tools/LiveWebGallery/ui/LiveWebGallery.ui.h:3
+msgid ""
+"<small><i>When the gallery is active, above is the URL you need to open \n"
+"on another computer to access the shared photos.</i></small>"
+msgstr ""
+
+#: ../extensions/Tools/LiveWebGallery/ui/LiveWebGallery.ui.h:5
+msgid "Activates and deactivates the web gallery"
+msgstr ""
+
+#: ../extensions/Tools/LiveWebGallery/ui/LiveWebGallery.ui.h:6
+msgid "Allow viewers to add tags"
+msgstr ""
+
+#: ../extensions/Tools/LiveWebGallery/ui/LiveWebGallery.ui.h:7
+#, fuzzy
+msgid "Copy URL to clipboard"
+msgstr "Salin pilihan ke papan tempel"
+
+#: ../extensions/Tools/LiveWebGallery/ui/LiveWebGallery.ui.h:9
+msgid "F-Spot Live Web Gallery"
+msgstr ""
+
+#: ../extensions/Tools/LiveWebGallery/ui/LiveWebGallery.ui.h:10
+msgid "Gallery URL:"
+msgstr "URL Galeri:"
+
+#: ../extensions/Tools/LiveWebGallery/ui/LiveWebGallery.ui.h:11
+msgid "Limit number of shared photos to"
+msgstr ""
+
+#: ../extensions/Tools/LiveWebGallery/ui/LiveWebGallery.ui.h:12
+msgid "Options:"
+msgstr "Opsi:"
+
+#: ../extensions/Tools/LiveWebGallery/ui/LiveWebGallery.ui.h:13
+#, fuzzy
+msgid "Photos with a Tag"
+msgstr "Tampilkan ekstensi dengan tag:"
+
+#: ../extensions/Tools/LiveWebGallery/ui/LiveWebGallery.ui.h:14
+msgid "Selected Photos"
+msgstr "Foto Terpilih"
+
+#: ../extensions/Tools/LiveWebGallery/ui/LiveWebGallery.ui.h:15
+#, fuzzy
+msgid "Share:"
+msgstr "Bagi-Pakai"
+
+#: ../extensions/Tools/LiveWebGallery/ui/LiveWebGallery.ui.h:16
+#, fuzzy
+msgid "Views:"
+msgstr "Bentuk Tampilan"
+
+#: ../extensions/Tools/MergeDb/MergeDb.addin.xml.h:1
+msgid "Merge Db"
+msgstr "Gabung Db"
+
+#: ../extensions/Tools/MergeDb/MergeDb.cs:73
+msgid "Error opening the selected file"
+msgstr ""
+
+#: ../extensions/Tools/MergeDb/MergeDb.cs:74
+#, csharp-format
+msgid ""
+"The file you selected is not a valid or supported database.\n"
+"\n"
+"Received exception \"{0}\"."
+msgstr ""
+
+#: ../extensions/Tools/MergeDb/MergeDb.glade.h:1
+msgid ""
+"<small><i>Choose the location of the database you want to import from</i></"
+"small>"
+msgstr ""
+
+#: ../extensions/Tools/MergeDb/MergeDb.glade.h:2
+msgid ""
+"<small><i>Choose what to import from the selected db.\n"
+"\"New Rolls Only\" is the smart option that will avoid re-importing photos "
+"you could have imported during a previous operation.\n"
+"\"A Single Import Roll\" let you choose which roll you want to merge back.\n"
+"\"Everything\" will import everything, creating duplicates if you already "
+"imported from that database.</i></small>"
+msgstr ""
+
+#: ../extensions/Tools/MergeDb/MergeDb.glade.h:6
+msgid ""
+"<small><i>Copy the images locally or keep them where they are. If you chose "
+"the later, be sure that this location will stay accessible from f-spot.</i></"
+"small>"
+msgstr ""
+
+#: ../extensions/Tools/MergeDb/MergeDb.glade.h:7
+#, fuzzy
+msgid "A Single Import Roll"
+msgstr "Mengimpor _satu file"
+
+#: ../extensions/Tools/MergeDb/MergeDb.glade.h:8
+msgid "Copy images to photos folder"
+msgstr ""
+
+#: ../extensions/Tools/MergeDb/MergeDb.glade.h:9
+msgid "Database Location:"
+msgstr "Lokasi Basis Data:"
+
+#: ../extensions/Tools/MergeDb/MergeDb.glade.h:10
+msgid "Everything"
+msgstr "Semua"
+
+#: ../extensions/Tools/MergeDb/MergeDb.glade.h:11
+msgid "Import:"
+msgstr "Impor:"
+
+#: ../extensions/Tools/MergeDb/MergeDb.glade.h:12
+msgid "Keep the images at their original location"
+msgstr ""
+
+#: ../extensions/Tools/MergeDb/MergeDb.glade.h:13
+msgid "Merge another F-Spot collection"
+msgstr ""
+
+#: ../extensions/Tools/MergeDb/MergeDb.glade.h:14
+msgid "New Rolls Only"
+msgstr ""
+
+#: ../extensions/Tools/MergeDb/MergeDb.glade.h:15
+#: ../src/UI.Dialog/ThreadProgressDialog.cs:57
+#, fuzzy
+msgid "Skip"
+msgstr "Lewati"
+
+#: ../extensions/Tools/MergeDb/PickFolderDialog.cs:34
+#, csharp-format
+msgid ""
+"<big>The database refers to files contained in the <b>{0}</b> folder.\n"
+" Please select that folder so I can do the mapping.</big>"
+msgstr ""
+
+#: ../extensions/Tools/ScreensaverConfig/ScreensaverConfig.addin.xml.h:1
+msgid "Configure Screensaver"
+msgstr "Atur Screensaver"
+
+#: ../extensions/Tools/ScreensaverConfig/ScreensaverConfigDialog.ui.h:1
+#: ../src/UI.Dialog/DateRangeDialog.cs:129
+msgid "All Images"
+msgstr "Semua Gambar"
+
+#: ../extensions/Tools/ScreensaverConfig/ScreensaverConfigDialog.ui.h:2
+msgid "Delay:"
+msgstr "Jeda:"
+
+#: ../extensions/Tools/ScreensaverConfig/ScreensaverConfigDialog.ui.h:3
+msgid "Display:"
+msgstr "Tampilan:"
+
+#: ../extensions/Tools/ScreensaverConfig/ScreensaverConfigDialog.ui.h:4
+msgid "Images tagged with:"
+msgstr "Gambar yang di-tag dengan:"
+
+#: ../extensions/Tools/ScreensaverConfig/ScreensaverConfigDialog.ui.h:5
+msgid "Make F-Spot my screensaver"
+msgstr "Jadikan F-Spot screensaver-ku"
+
+#: ../extensions/Tools/ScreensaverConfig/ScreensaverConfigDialog.ui.h:6
+msgid "Screensaver Configuration"
+msgstr "Konfigurasi Screensaver"
+
+#: ../f-spot.schemas.in.h:1
+msgid "Display of transparent parts."
+msgstr ""
+
+#: ../f-spot.schemas.in.h:2
+msgid "Enable this to allow interpolation on zoomed images."
+msgstr ""
+
+#: ../f-spot.schemas.in.h:3
+msgid "Height of the import dialog."
+msgstr "Tinggi dialog impor."
+
+#: ../f-spot.schemas.in.h:4
+msgid "Height of the main window."
+msgstr "Tinggi jendela utama."
+
+#: ../f-spot.schemas.in.h:5
+msgid "Height of the photo viewer window."
+msgstr "Tinggi jendela penilik foto."
+
+#: ../f-spot.schemas.in.h:6
+msgid ""
+"If the 'transparency' option is set, the color specified in this option will "
+"be used as the transparent color when viewing images."
+msgstr ""
+
+#: ../f-spot.schemas.in.h:7
+msgid "Interpolate image on zoom."
+msgstr ""
+
+#: ../f-spot.schemas.in.h:8
+msgid "Maximize the main window."
+msgstr "Maksimalkan jendela utama"
+
+#: ../f-spot.schemas.in.h:9
+msgid "Maximize the photo viewer window."
+msgstr ""
+
+#: ../f-spot.schemas.in.h:10
+msgid "Path to custom gtkrc for theming F-Spot."
+msgstr ""
+
+#: ../f-spot.schemas.in.h:11
+msgid "Show dates in the thumbnail view."
+msgstr ""
+
+#: ../f-spot.schemas.in.h:12
+msgid "Show ratings in the thumbnail view."
+msgstr ""
+
+#: ../f-spot.schemas.in.h:13
+msgid "Show tags in the thumbnail view."
+msgstr ""
+
+#: ../f-spot.schemas.in.h:14
+msgid "Show the filename in the viewer window."
+msgstr ""
+
+#: ../f-spot.schemas.in.h:15
+msgid "Show the filmstrip in the main window."
+msgstr ""
+
+#: ../f-spot.schemas.in.h:16
+msgid "Show the sidebar in the main window."
+msgstr ""
+
+#: ../f-spot.schemas.in.h:17
+msgid "Show the timeline in the main window."
+msgstr ""
+
+#: ../f-spot.schemas.in.h:18
+msgid "Show the toolbar in the main window."
+msgstr ""
+
+#: ../f-spot.schemas.in.h:19
+msgid "Show the toolbar in the photo viewer window."
+msgstr ""
+
+#: ../f-spot.schemas.in.h:20
+msgid "Size of the tag icons shown in the sidebar."
+msgstr ""
+
+#: ../f-spot.schemas.in.h:21
+msgid "The X position to use for the main window."
+msgstr ""
+
+#: ../f-spot.schemas.in.h:22
+msgid "The X position to use for the photo viewer window."
+msgstr ""
+
+#: ../f-spot.schemas.in.h:23
+msgid "The Y position to use for the main window."
+msgstr ""
+
+#: ../f-spot.schemas.in.h:24
+msgid "The Y position to use for the photo viewer window."
+msgstr ""
+
+#: ../f-spot.schemas.in.h:25
+msgid "The color to use for transparent parts."
+msgstr ""
+
+#: ../f-spot.schemas.in.h:26
+msgid "The height dimension to use for the import dialog."
+msgstr ""
+
+#: ../f-spot.schemas.in.h:27
+msgid "The height dimension to use for the main window."
+msgstr ""
+
+#: ../f-spot.schemas.in.h:28
+msgid "The height dimension to use for the photo viewer window."
+msgstr ""
+
+#: ../f-spot.schemas.in.h:29
+msgid "The orientation of the filmstrip, if shown."
+msgstr ""
+
+#: ../f-spot.schemas.in.h:30
+#, fuzzy
+msgid "The orientation of the filmstrip."
+msgstr "Orientasi Panel"
+
+#: ../f-spot.schemas.in.h:31
+msgid "The size (width) of the sidebar in the main window."
+msgstr ""
+
+#: ../f-spot.schemas.in.h:32
+msgid "The size of the sidebar in the main window."
+msgstr ""
+
+#: ../f-spot.schemas.in.h:33
+msgid "The width dimension to use for the import dialog."
+msgstr ""
+
+#: ../f-spot.schemas.in.h:34
+msgid "The width dimension to use for the main window."
+msgstr ""
+
+#: ../f-spot.schemas.in.h:35
+msgid "The width dimension to use for the photo viewer window."
+msgstr ""
+
+#: ../f-spot.schemas.in.h:36
+msgid "Use the current photo's filename as the viewer window's title."
+msgstr ""
+
+#: ../f-spot.schemas.in.h:37
+#, fuzzy
+msgid "Width of the import dialog."
+msgstr "Lebar standar dialog Berlangganan"
+
+#: ../f-spot.schemas.in.h:38
+#, fuzzy
+msgid "Width of the main window."
+msgstr "Lebar jendela utama."
+
+#: ../f-spot.schemas.in.h:39
+msgid "Width of the photo viewer window."
+msgstr ""
+
+#: ../f-spot.schemas.in.h:40
+msgid "Width of the preview image pane in the import dialog."
+msgstr ""
+
+#: ../f-spot.schemas.in.h:41
+#, fuzzy
+msgid "X position of the main window."
+msgstr "Posisi X jendela utama."
+
+#: ../f-spot.schemas.in.h:42
+msgid "X position of the photo viewer window."
+msgstr ""
+
+#: ../f-spot.schemas.in.h:43
+#, fuzzy
+msgid "Y position of the main window."
+msgstr "Posisi X jendela utama."
+
+#: ../f-spot.schemas.in.h:44
+msgid "Y position of the photo viewer window."
+msgstr ""
+
+#: ../f-spot.schemas.in.h:45
+msgid ""
+"You can choose how to display transparent parts in images. This option has "
+"no effect on photos but setting this value to CHECK_PATTERN or CUSTOM_COLOR "
+"could be useful when viewing icons or other artwork with transparent parts."
+msgstr ""
+
+#: ../lib/libfspot/f-jpeg-utils.c:441 ../src/RotateCommand.cs:211
+#, fuzzy
+msgid "File not found"
+msgstr "Berkas tak ditemukan"
+
+#: ../lib/libfspot/f-jpeg-utils.c:464
+#, fuzzy, c-format
+msgid "Unknown transform type %d"
+msgstr "Jenis blog tidak diketahui"
+
+#: ../lib/libfspot/f-jpeg-utils.c:472
+#, fuzzy
+msgid "Operation failed"
+msgstr "Operasi gagal"
+
+#: ../src/Core/App.cs:274
+#, csharp-format
+msgid "No photos matching {0} found"
+msgstr ""
+
+#: ../src/Core/App.cs:275
+#, csharp-format
+msgid ""
+"The tag \"{0}\" is not applied to any photos. Try adding\n"
+"the tag to some photos or selecting a different tag in the\n"
+"F-Spot preference dialog."
+msgstr ""
+
+#: ../src/Core/App.cs:279
+#, fuzzy
+msgid "Search returned no results"
+msgstr "Tak ada hasil yang dikembalikan."
+
+#: ../src/Core/App.cs:280
+msgid ""
+"The tag F-Spot is looking for does not exist. Try\n"
+"selecting a different tag in the F-Spot preference\n"
+"dialog."
+msgstr ""
+
+#. Note for translators: Reparented is a picture becoming a version of another one
+#: ../src/Core/Photo.cs:350
+msgid "Reparented"
+msgstr ""
+
+#: ../src/Core/Photo.cs:366
+#, fuzzy, csharp-format
+msgid "Modified"
+msgid_plural "Modified ({0})"
+msgstr[0] "Tgl Perubahan"
+msgstr[1] ""
+
+#: ../src/Core/Photo.cs:389
+#, fuzzy, csharp-format
+msgid "Modified in {1}"
+msgstr ""
+"%s:\n"
+"%u%% terpakai"
+
+#: ../src/Core/Photo.cs:389
+#, fuzzy, csharp-format
+msgid "Modified in {1} ({0})"
+msgstr ""
+"%s:\n"
+"%u%% terpakai"
+
+#: ../src/Editors/AutoStretchEditor.cs:17
+#, fuzzy
+msgid "Auto Color"
+msgstr "Pilih warna"
+
+#: ../src/Editors/ColorEditor.cs:38
+#, fuzzy
+msgid "Adjust Colors"
+msgstr "Fonta & Warna"
+
+#: ../src/Editors/ColorEditor.cs:41
+#, fuzzy
+msgid "Adjust"
+msgstr "Atur Skor"
+
+#: ../src/Editors/CropEditor.cs:36
+msgid "4 x 3 (Book)"
+msgstr "4 x 3 (Buku)"
+
+#: ../src/Editors/CropEditor.cs:37
+msgid "4 x 6 (Postcard)"
+msgstr "4 x 6 (Kartu pos)"
+
+#: ../src/Editors/CropEditor.cs:38
+msgid "5 x 7 (L, 2L)"
+msgstr "5 x 7 (L, 2L)"
+
+#: ../src/Editors/CropEditor.cs:39
+msgid "8 x 10"
+msgstr "8 x 10"
+
+#: ../src/Editors/CropEditor.cs:40
+#, fuzzy
+msgid "Square"
+msgstr "Akar pangkat"
+
+#: ../src/Editors/CropEditor.cs:43
+msgid "Crop"
+msgstr ""
+
+#: ../src/Editors/CropEditor.cs:74
+msgid "Select the area that needs cropping."
+msgstr ""
+
+#: ../src/Editors/CropEditor.cs:99
+#, fuzzy
+msgid "No Constraint"
+msgstr "Tanpa nama"
+
+#: ../src/Editors/CropEditor.cs:100
+#, fuzzy
+msgid "Same as photo"
+msgstr "Sama dengan keluaran"
+
+#: ../src/Editors/CropEditor.cs:105
+#, fuzzy
+msgid "Custom Ratios..."
+msgstr "Bentuk bebas"
+
+#: ../src/Editors/DesaturateEditor.cs:17
+msgid "Desaturate"
+msgstr ""
+
+#: ../src/Editors/RedEyeEditor.cs:19
+msgid "Red-eye Reduction"
+msgstr ""
+
+#: ../src/Editors/RedEyeEditor.cs:21
+#, fuzzy
+msgid "Fix!"
+msgstr "Perbaiki"
+
+#: ../src/Editors/RedEyeEditor.cs:25
+msgid "Select the eyes you wish to fix."
+msgstr ""
+
+#: ../src/Editors/SepiaEditor.cs:17
+#, fuzzy
+msgid "Sepia Tone"
+msgstr "Mainkan nada sibuk"
+
+#: ../src/Editors/SoftFocusEditor.cs:32
+#, fuzzy
+msgid "Soft Focus"
+msgstr "Ambil Fokus"
+
+#: ../src/Editors/TiltEditor.cs:30
+msgid "Straighten"
+msgstr "Luruskan"
+
+#: ../src/Filters/ResizeFilter.cs:70 ../src/Filters/SharpFilter.cs:52
+#, csharp-format
+msgid "No way to save files of type \"{0}\""
+msgstr ""
+
+#: ../src/FSpot.addin.xml.h:1
+#, fuzzy
+msgid "Copy Photo"
+msgstr "Path Foto"
+
+#: ../src/FSpot.addin.xml.h:2
+#, fuzzy
+msgid "Export to"
+msgstr "Ekspor ke suatu berkas"
+
+#: ../src/FSpot.addin.xml.h:3
+#, fuzzy
+msgid "Open _With"
+msgstr "Buka _Dengan"
+
+#: ../src/FSpot.addin.xml.h:4 ../src/ui/main_window.ui.h:16
+msgid "Rem_ove Tag"
+msgstr "_Hapus Tag"
+
+#: ../src/FSpot.addin.xml.h:5 ../src/f-spot.glade.h:44
+#: ../src/SingleView.cs:423 ../src/ui/main_window.ui.h:17
+msgid "Rotate _Left"
+msgstr "Putar _Kiri"
+
+#: ../src/FSpot.addin.xml.h:6 ../src/f-spot.glade.h:45
+#: ../src/SingleView.cs:424 ../src/ui/main_window.ui.h:18
+msgid "Rotate _Right"
+msgstr "Puta_r Kanan"
+
+#: ../src/FSpot.addin.xml.h:7
+msgid "Tools"
+msgstr "Alat"
+
+#: ../src/FSpot.addin.xml.h:8 ../src/ui/main_window.ui.h:42
+msgid "_Delete From Drive"
+msgstr "Hapus Dari _Drive"
+
+#: ../src/FSpot.addin.xml.h:9 ../src/ui/main_window.ui.h:61
+msgid "_Remove From Catalog"
+msgstr "Hapus Da_ri Katalog"
+
+#: ../src/f-spot.glade.h:1
+msgid "1024 px"
+msgstr "1024 px"
+
+#: ../src/f-spot.glade.h:2
+msgid "320 px"
+msgstr "320 px"
+
+#: ../src/f-spot.glade.h:3
+msgid "480 px"
+msgstr "480 px"
+
+#: ../src/f-spot.glade.h:4
+msgid "640 px"
+msgstr "640 px"
+
+#: ../src/f-spot.glade.h:5
+msgid "800 px"
+msgstr "800 px"
+
+#: ../src/f-spot.glade.h:6
+#, fuzzy
+msgid "<b>Co_rrections</b>"
+msgstr "K_omentar:"
+
+#: ../src/f-spot.glade.h:7
+#, fuzzy
+msgid "<b>Image Interpolation</b>"
+msgstr "Gambar _latar:"
+
+#: ../src/f-spot.glade.h:9
+msgid "<b>Size</b>"
+msgstr "<b>Ukuran</b>"
+
+#: ../src/f-spot.glade.h:11
+msgid "<b>Summary</b>"
+msgstr "<b>Ringkasan</b>"
+
+#: ../src/f-spot.glade.h:12
+#, fuzzy
+msgid "<b>Transparent Parts</b>"
+msgstr "<small>Transparan</small>"
+
+#: ../src/f-spot.glade.h:13
+msgid "<b>View all pictures imported</b>"
+msgstr ""
+
+#: ../src/f-spot.glade.h:14
+#, fuzzy
+msgid "<b>_White Balance</b>"
+msgstr "Penunjuk Putih"
+
+#: ../src/f-spot.glade.h:15
+msgid ""
+"<small><i>Enable this to allow interpolation on zoomed images. You shouldn't "
+"disable this for viewing photos, but disabling the interpolation could be "
+"usefull in icon design.</i></small>"
+msgstr ""
+
+#: ../src/f-spot.glade.h:16
+msgid ""
+"<small><i>You can choose how to display transparent parts in images. This "
+"option has no effect on photos, but setting this as check pattern or custom "
+"color could be usefull when viewing icons or other artworks with transparent "
+"parts.</i></small>"
+msgstr ""
+
+#: ../src/f-spot.glade.h:17
+#, fuzzy
+msgid "As _background"
+msgstr "Jadikan Sebagai Gam_bar Latar"
+
+#: ../src/f-spot.glade.h:18
+#, fuzzy
+msgid "As _custom color: "
+msgstr "Warna latar belakang dalam format GdkColor"
+
+#: ../src/f-spot.glade.h:19
+msgid "As check _pattern"
+msgstr ""
+
+#: ../src/f-spot.glade.h:21
+msgid "C_ontrast:"
+msgstr ""
+
+#: ../src/f-spot.glade.h:22
+#, fuzzy
+msgid "C_reate"
+msgstr "Buat"
+
+#: ../src/f-spot.glade.h:23
+#, fuzzy
+msgid "Create Mail"
+msgstr "Pembaca Surat"
+
+#: ../src/f-spot.glade.h:24
+msgid "Create _icon for this tag when first used"
+msgstr ""
+
+#: ../src/f-spot.glade.h:25
+msgid "Create a mail with the selected photos (possibly resized) attached"
+msgstr ""
+
+#: ../src/f-spot.glade.h:26
+msgid "Display File _Names"
+msgstr "Tampilkan _Nama Berkas"
+
+#: ../src/f-spot.glade.h:27
+msgid "Display only those photos that were imported in specified Rolls."
+msgstr ""
+
+#: ../src/f-spot.glade.h:28
+msgid "Do not send a mail"
+msgstr ""
+
+#: ../src/f-spot.glade.h:29
+#, fuzzy
+msgid "Estimated new size"
+msgstr "Grup Ukuran Baru"
+
+#: ../src/f-spot.glade.h:30
+msgid "Extra large"
+msgstr "Ekstra besar"
+
+#: ../src/f-spot.glade.h:31
+#, fuzzy
+msgid "F-Spot View"
+msgstr "Tampilan _kompak"
+
+#: ../src/f-spot.glade.h:32
+msgid "Filter on selected rolls"
+msgstr ""
+
+#: ../src/f-spot.glade.h:33
+msgid "Large"
+msgstr "Besar"
+
+#: ../src/f-spot.glade.h:34
+msgid "Manage your custom selection ratios"
+msgstr ""
+
+#: ../src/f-spot.glade.h:35
+msgid "Medium"
+msgstr "Sedang"
+
+#: ../src/f-spot.glade.h:36
+msgid "Number of photos in selected rolls:"
+msgstr ""
+
+#: ../src/f-spot.glade.h:37
+#, fuzzy
+msgid "Number of pictures"
+msgstr "Dalam _gambar"
+
+#: ../src/f-spot.glade.h:38
+msgid "Open _Folder..."
+msgstr "Buka _Folder..."
+
+#: ../src/f-spot.glade.h:39 ../src/PhotoStore.cs:176
+msgid "Original"
+msgstr "Asli"
+
+#: ../src/f-spot.glade.h:40
+msgid "Original size (possible very large file size)"
+msgstr ""
+
+#: ../src/f-spot.glade.h:41 ../src/UI.Dialog/ui/EditTagDialog.ui.h:4
+#, fuzzy
+msgid "P_arent Tag:"
+msgstr "Tag tak tertangani: '%s'"
+
+#: ../src/f-spot.glade.h:42
+msgid "Preferences"
+msgstr "Preferensi"
+
+#: ../src/f-spot.glade.h:43
+msgid "Repair"
+msgstr "Perbaiki"
+
+#: ../src/f-spot.glade.h:46
+#, fuzzy
+msgid "Select a Tag..."
+msgstr "Tag tak tertangani: '%s'"
+
+#: ../src/f-spot.glade.h:47
+#, fuzzy
+msgid "Selection Constraints"
+msgstr "Pemilihan Jendela"
+
+#: ../src/f-spot.glade.h:48 ../src/ui/main_window.ui.h:22
+msgid "Set as _Background"
+msgstr "Jadikan Gam_bar Latar"
+
+#: ../src/f-spot.glade.h:49
+msgid "Show all photos."
+msgstr "Tampilkan semua foto."
+
+#: ../src/f-spot.glade.h:50
+msgid "Show or hide the side pane"
+msgstr ""
+
+#: ../src/f-spot.glade.h:51
+#, fuzzy
+msgid "Show or hide the toolbar"
+msgstr "Tampilkan atau sembunyikan bilah alat"
+
+#: ../src/f-spot.glade.h:52
+msgid "Side _pane"
+msgstr "_Panel sisi"
+
+#: ../src/f-spot.glade.h:53
+msgid "Small"
+msgstr "Kecil"
+
+#: ../src/f-spot.glade.h:54
+msgid ""
+"Specify if an original size picture should be rotated or not. Smaller sizes "
+"are automatically rotated."
+msgstr ""
+
+#. Note for translators: meant as Temperature
+#: ../src/f-spot.glade.h:56
+#, fuzzy
+msgid "Te_mp:"
+msgstr "_Bisu"
+
+#: ../src/f-spot.glade.h:57
+msgid "Tiny"
+msgstr ""
+
+#: ../src/f-spot.glade.h:58
+#, fuzzy
+msgid "Total original size"
+msgstr "Tampilkan U_kuran Asli"
+
+#: ../src/f-spot.glade.h:59 ../src/ui/main_window.ui.h:29
+#, fuzzy
+msgid "Zoom _in"
+msgstr "_Perbesar"
+
+#: ../src/f-spot.glade.h:60 ../src/ui/main_window.ui.h:30
+#, fuzzy
+msgid "Zoom _out"
+msgstr "P_erkecil"
+
+#: ../src/f-spot.glade.h:61 ../src/ui/main_window.ui.h:31
+msgid "Zoom in"
+msgstr "Perbesar"
+
+#: ../src/f-spot.glade.h:62 ../src/ui/main_window.ui.h:32
+msgid "Zoom out"
+msgstr "Perkecil"
+
+#: ../src/f-spot.glade.h:63
+msgid "_Brightness:"
+msgstr "_Kecerahan:"
+
+#: ../src/f-spot.glade.h:64
+#, fuzzy
+msgid "_Create Mail"
+msgstr "Pembaca Surat"
+
+#: ../src/f-spot.glade.h:65 ../src/ui/main_window.ui.h:45
+#, fuzzy
+msgid "_Edit"
+msgstr "_Edit"
+
+#: ../src/f-spot.glade.h:67
+#, fuzzy
+msgid "_Exposure:"
+msgstr "Waktu Pencahayaan"
+
+#: ../src/f-spot.glade.h:68 ../src/ui/main_window.ui.h:49
+#, fuzzy
+msgid "_Fullscreen"
+msgstr "Layar Penuh"
+
+#: ../src/f-spot.glade.h:69 ../src/ui/main_window.ui.h:50
+#, fuzzy
+msgid "_Help"
+msgstr "Ba_ntuan"
+
+#: ../src/f-spot.glade.h:70
+#, fuzzy
+msgid "_Hue:"
+msgstr "Corak Warna/_Hue:"
+
+#: ../src/f-spot.glade.h:71
+msgid "_Interpolate image on zoom"
+msgstr ""
+
+#: ../src/f-spot.glade.h:72
+msgid "_New Window"
+msgstr "Je_ndela Baru"
+
+#: ../src/f-spot.glade.h:73 ../src/ui/main_window.ui.h:58
+msgid "_Photo"
+msgstr "_Foto"
+
+#: ../src/f-spot.glade.h:74
+#, fuzzy
+msgid "_Saturation:"
+msgstr "Kemurnian Warna/_Saturasi:"
+
+#: ../src/f-spot.glade.h:75 ../src/ui/main_window.ui.h:69
+#, fuzzy
+msgid "_Slideshow"
+msgstr "Acak Pertunjukan Slide"
+
+#: ../src/f-spot.glade.h:76 ../src/UI.Dialog/ui/EditTagDialog.ui.h:6
+msgid "_Tag Name:"
+msgstr "Nama _Tag:"
+
+#: ../src/f-spot.glade.h:77
+msgid "_Tint:"
+msgstr ""
+
+#: ../src/f-spot.glade.h:78
+msgid "_Toolbar"
+msgstr "Bilah Ala_t"
+
+#: ../src/f-spot.glade.h:79 ../src/ui/main_window.ui.h:77
+#, fuzzy
+msgid "_View"
+msgstr "_Lihat"
+
+#: ../src/f-spot.glade.h:80 ../src/Widgets/FindBar.cs:178
+msgid "and"
+msgstr "dan"
+
+#. at, or after a date, or between dates
+#: ../src/f-spot.glade.h:82
+msgid ""
+"at\n"
+"after\n"
+"between"
+msgstr ""
+"pada\n"
+"setelah\n"
+"di antara"
+
+#: ../src/FullScreenView.cs:59
+#, fuzzy
+msgid "Hide"
+msgstr "Sembunyikan"
+
+#: ../src/FullScreenView.cs:61
+#, fuzzy
+msgid "Hide Toolbar"
+msgstr "Kotak Tombol Uta_ma"
+
+#: ../src/FullScreenView.cs:67
+msgid "Info"
+msgstr "Info"
+
+#: ../src/FullScreenView.cs:69 ../src/Widgets/InfoBox.cs:202
+msgid "Image Information"
+msgstr ""
+
+#: ../src/FullScreenView.cs:74
+#, fuzzy
+msgid "Exit fullscreen"
+msgstr "Tinggalkan Moda _Layar Penuh"
+
+#: ../src/FullScreenView.cs:82 ../src/MainWindow.cs:313
+#: ../src/SingleView.cs:87
+msgid "Slideshow"
+msgstr ""
+
+#: ../src/FullScreenView.cs:83
+msgid "Start slideshow"
+msgstr ""
+
+#: ../src/FullScreenView.cs:129
+#, fuzzy
+msgid "Slide transition:"
+msgstr "Deretan Gambar"
+
+#: ../src/GroupSelector.cs:57 ../src/GroupSelector.cs:58
+#, fuzzy
+msgid "More dates"
+msgstr "Informasi lebih"
+
+#: ../src/GroupSelector.cs:60 ../src/GroupSelector.cs:61
+#, fuzzy
+msgid "More"
+msgstr "_Lebih Lanjut..."
+
+#: ../src/GroupSelector.cs:530 ../src/ui/main_window.ui.h:35
+msgid "_Clear Date Range"
+msgstr ""
+
+#: ../src/Imaging/Exif.cs:229
+msgid "Image Directory"
+msgstr "Direktori Gambar"
+
+#: ../src/Imaging/Exif.cs:231
+#, fuzzy
+msgid "Thumbnail Directory"
+msgstr "Pengaturan Direktori"
+
+#: ../src/Imaging/Exif.cs:233
+msgid "Exif Directory"
+msgstr "Direktori Exif"
+
+#: ../src/Imaging/Exif.cs:235
+msgid "GPS Directory"
+msgstr "Direktori GPS"
+
+#: ../src/Imaging/Exif.cs:237
+#, fuzzy
+msgid "InterOperability Directory"
+msgstr "Pengaturan Direktori"
+
+#: ../src/Imaging/Exif.cs:239
+msgid "Unknown Directory"
+msgstr "Direktori Tak Dikenal"
+
+#: ../src/Imaging/ImageFile.cs:119
+msgid "Writing to this file format is not supported"
+msgstr ""
+
+#: ../src/Imaging/IptcFile.cs:145
+msgid "IPTC Information Interchange Model (IIM) Version number"
+msgstr ""
+
+#: ../src/Imaging/IptcFile.cs:147
+msgid "OSI Destination routing information"
+msgstr ""
+
+#: ../src/Imaging/IptcFile.cs:149
+msgid "IPTC file format"
+msgstr "Format berkas IPTC"
+
+#: ../src/Imaging/IptcFile.cs:151
+msgid "Identifies the provider and product"
+msgstr ""
+
+#: ../src/Imaging/IptcFile.cs:153
+msgid "A unique number identifying the envelope"
+msgstr ""
+
+#: ../src/Imaging/IptcFile.cs:155
+msgid "A unique number"
+msgstr "Suatu angka unik"
+
+#: ../src/Imaging/IptcFile.cs:157
+msgid ""
+"The envelope handling priority between 1 (most urgent) and 9 (least urgent)"
+msgstr ""
+
+#: ../src/Imaging/IptcFile.cs:159
+msgid "The year, month and day (CCYYMMDD) the service sent the material"
+msgstr ""
+
+#: ../src/Imaging/IptcFile.cs:161
+msgid "The hour, minute and second (HHMMSS) the service sent the material"
+msgstr ""
+
+#: ../src/Imaging/IptcFile.cs:163
+#, fuzzy
+msgid "The character set designation"
+msgstr "Gugus karakter tidak dikenal: %s"
+
+#: ../src/Imaging/IptcFile.cs:165
+msgid "External globally unique object identifier"
+msgstr ""
+
+#: ../src/Imaging/IptcFile.cs:170
+msgid "Abstract Relationship Method (ARM) identifier"
+msgstr ""
+
+#: ../src/Imaging/IptcFile.cs:172
+msgid "Abstract Relationship Method (ARM) version number."
+msgstr ""
+
+#: ../src/Imaging/IptcFile.cs:175
+msgid "Number identifying the IIM version this application record uses"
+msgstr ""
+
+#: ../src/Imaging/IptcFile.cs:177
+msgid "Object type reference"
+msgstr "Referensi tipe objek"
+
+#: ../src/Imaging/IptcFile.cs:182
+msgid "Object attribute reference"
+msgstr "Referensi atribut objek"
+
+#: ../src/Imaging/IptcFile.cs:188 ../src/Imaging/IptcFile.cs:192
+msgid "Object name"
+msgstr "Nama objek"
+
+#: ../src/Imaging/IptcFile.cs:190
+msgid "Status of the objectdata according to the provider"
+msgstr ""
+
+#: ../src/Imaging/IptcFile.cs:194
+msgid "Location within a city or area where the object originates"
+msgstr ""
+
+#: ../src/Imaging/IptcFile.cs:197
+msgid "Name of the city the content is focussing on"
+msgstr ""
+
+#: ../src/Imaging/IptcFile.cs:200
+msgid "Copyright information for"
+msgstr "Informasi hak cipta bagi"
+
+#: ../src/Imaging/IptcFile.cs:203
+msgid "Full name of the country of the focus of the content"
+msgstr ""
+
+#: ../src/Imaging/IptcFile.cs:206
+msgid ""
+"Two or three letter ISO3166 code of the country of the focus of the content"
+msgstr ""
+
+#: ../src/Imaging/IptcFile.cs:209
+msgid "Creator of the content"
+msgstr ""
+
+#: ../src/Imaging/IptcFile.cs:212
+msgid "Provider of the object"
+msgstr ""
+
+#: ../src/Imaging/IptcFile.cs:215
+msgid "The title of the author or creator"
+msgstr ""
+
+#: ../src/Imaging/IptcFile.cs:218
+msgid ""
+"The person involved in writing, editing or correcting the object data or "
+"caption/abstract"
+msgstr ""
+
+#: ../src/Imaging/IptcFile.cs:222
+msgid "Headline of the content"
+msgstr ""
+
+#: ../src/Imaging/IptcFile.cs:225
+msgid ""
+"Instructions from the creator to the receiver not covered by other fields"
+msgstr ""
+
+#: ../src/Imaging/IptcFile.cs:228
+msgid "Intellectual genre of the object"
+msgstr ""
+
+#: ../src/Imaging/IptcFile.cs:241
+msgid "Unknown IIM DataSet"
+msgstr ""
+
+#: ../src/Import/ImportController.cs:410 ../src/Import/ImportController.cs:412
+#: ../src/XmpTagsImporter.cs:89
+msgid "Imported Tags"
+msgstr "Tag Yang Diimpor"
+
+#: ../src/ItemAction.cs:79 ../src/MainWindow.cs:280 ../src/SingleView.cs:70
+msgid "Rotate Left"
+msgstr "Putar Kiri"
+
+#: ../src/ItemAction.cs:80
+msgid "Rotate picture left"
+msgstr "Putar gambar ke kiri"
+
+#: ../src/ItemAction.cs:91 ../src/MainWindow.cs:284 ../src/SingleView.cs:75
+msgid "Rotate Right"
+msgstr "Putar Kanan"
+
+#: ../src/ItemAction.cs:92
+msgid "Rotate picture right"
+msgstr "Putar gambar ke kanan"
+
+#: ../src/ItemAction.cs:103
+msgid "Next picture"
+msgstr "Gambar berikutnya"
+
+#: ../src/ItemAction.cs:123
+msgid "Previous"
+msgstr "Sebelumnya"
+
+#: ../src/ItemAction.cs:124
+msgid "Previous picture"
+msgstr "Gambar sebelumnya"
+
+#: ../src/MainWindow.cs:273 ../src/UI.Dialog/ImportDialog.cs:171
+msgid "Import"
+msgstr "Impor"
+
+#: ../src/MainWindow.cs:275
+msgid "Import new images"
+msgstr "Impor gambar baru"
+
+#: ../src/MainWindow.cs:291 ../src/ui/main_window.ui.h:3
+msgid "Browse"
+msgstr "Ramban"
+
+#: ../src/MainWindow.cs:295
+msgid "Browse many photos simultaneously"
+msgstr "Ramban sekaligus banyak foto"
+
+#: ../src/MainWindow.cs:299
+msgid "Edit Image"
+msgstr "Sunting Gambar"
+
+#: ../src/MainWindow.cs:303
+msgid "View and edit a photo"
+msgstr "Tilik dan sunting suatu foto"
+
+#: ../src/MainWindow.cs:308 ../src/SingleView.cs:82
+msgid "Fullscreen"
+msgstr "Layar penuh"
+
+#: ../src/MainWindow.cs:310 ../src/SingleView.cs:84
+msgid "View photos fullscreen"
+msgstr ""
+
+#: ../src/MainWindow.cs:315 ../src/SingleView.cs:89
+msgid "View photos in a slideshow"
+msgstr ""
+
+#: ../src/MainWindow.cs:330
+msgid "Previous photo"
+msgstr "Foto sebelumnya"
+
+#: ../src/MainWindow.cs:335
+msgid "Next photo"
+msgstr "Foto berikutnya"
+
+#: ../src/MainWindow.cs:412
+#, fuzzy
+msgid "Show _Find Bar"
+msgstr "Tam_pilkan Panel Lampiran"
+
+#: ../src/MainWindow.cs:415
+#, fuzzy
+msgid "Hide _Find Bar"
+msgstr "Sem_bunyikan Panel Lampiran"
+
+#. Translators, The singular case will never happen here.
+#: ../src/MainWindow.cs:1719
+#, csharp-format
+msgid "Merge the selected tag"
+msgid_plural "Merge the {0} selected tags?"
+msgstr[0] ""
+msgstr[1] ""
+
+#: ../src/MainWindow.cs:1746
+msgid ""
+"This operation will merge the selected tags and any sub-tags into a single "
+"tag."
+msgstr ""
+
+#: ../src/MainWindow.cs:1748
+#, fuzzy
+msgid "_Merge Tags"
+msgstr "S_isip Tag"
+
+#: ../src/MainWindow.cs:1953
+#, csharp-format
+msgid "{0} Photo out of {1}"
+msgid_plural "{0} Photos out of {1}"
+msgstr[0] "{0} Foto dari {1}"
+
+#: ../src/MainWindow.cs:1955 ../src/SingleView.cs:465
+#, csharp-format
+msgid "{0} Photo"
+msgid_plural "{0} Photos"
+msgstr[0] "{0} Foto"
+
+#: ../src/MainWindow.cs:1958
+#, csharp-format
+msgid " ({0} selected)"
+msgid_plural " ({0} selected)"
+msgstr[0] " ({0} dipilih)"
+
+#: ../src/MainWindow.cs:2039
+msgid "_Ok"
+msgstr "_Ok"
+
+#: ../src/MainWindow.cs:2040
+#, fuzzy
+msgid "Error Deleting Picture"
+msgstr "Error menghapus berkas '%s': %s"
+
+#: ../src/MainWindow.cs:2045
+#, csharp-format
+msgid "No permission to delete the file:{1}{0}"
+msgstr ""
+
+#: ../src/MainWindow.cs:2049
+#, fuzzy, csharp-format
+msgid "An error of type {0} occurred while deleting the file:{2}{1}"
+msgstr "Ada error saat menghapus berkas atau direktori"
+
+#: ../src/MainWindow.cs:2081
+#, fuzzy, csharp-format
+msgid "Delete the selected photo permanently?"
+msgid_plural "Delete the {0} selected photos permanently?"
+msgstr[0] "Hapus semua objek terpilih secara permanan"
+msgstr[1] ""
+
+#: ../src/MainWindow.cs:2085
+msgid "This deletes all versions of the selected photo from your drive."
+msgid_plural ""
+"This deletes all versions of the selected photos from your drive."
+msgstr[0] ""
+msgstr[1] ""
+
+#: ../src/MainWindow.cs:2088
+msgid "_Delete photo"
+msgid_plural "_Delete photos"
+msgstr[0] "_Hapus foto"
+
+#: ../src/MainWindow.cs:2124
+#, csharp-format
+msgid "Remove the selected photo from F-Spot?"
+msgid_plural "Remove the {0} selected photos from F-Spot?"
+msgstr[0] ""
+msgstr[1] ""
+
+#: ../src/MainWindow.cs:2129
+msgid ""
+"If you remove photos from the F-Spot catalog all tag information will be "
+"lost. The photos remain on your computer and can be imported into F-Spot "
+"again."
+msgstr ""
+
+#: ../src/MainWindow.cs:2130
+msgid "_Remove from Catalog"
+msgstr "_Hapus dari Katalog"
+
+#: ../src/MainWindow.cs:2199
+#, csharp-format
+msgid "Delete tag \"{0}\"?"
+msgstr "Hapus tag \"{0}\"?"
+
+#: ../src/MainWindow.cs:2201
+#, csharp-format
+msgid "Delete the {0} selected tags?"
+msgstr "Hapus {0} tag yang dipilih?"
+
+#: ../src/MainWindow.cs:2206
+msgid "photo"
+msgid_plural "photos"
+msgstr[0] "f\toto"
+
+#: ../src/MainWindow.cs:2208
+#, csharp-format
+msgid "If you delete this tag, the association with {0} {1} will be lost."
+msgid_plural ""
+"If you delete these tags, the association with {0} {1} will be lost."
+msgstr[0] ""
+msgstr[1] ""
+
+#: ../src/MainWindow.cs:2213
+msgid "_Delete tag"
+msgid_plural "_Delete tags"
+msgstr[0] "_Hapus tag"
+
+#. A Category is not empty. Can not delete it.
+#: ../src/MainWindow.cs:2227
+msgid "Tag is not empty"
+msgstr "Tag tak kosong"
+
+#: ../src/MainWindow.cs:2228
+#, csharp-format
+msgid ""
+"Can not delete tags that have tags within them. Please delete tags under "
+"\"{0}\" first"
+msgstr ""
+
+#: ../src/MainWindow.cs:2659
+msgid "Rotate selected photo left"
+msgid_plural "Rotate selected photos left"
+msgstr[0] ""
+msgstr[1] ""
+
+#: ../src/MainWindow.cs:2672
+msgid "Rotate selected photo right"
+msgid_plural "Rotate selected photos right"
+msgstr[0] ""
+msgstr[1] ""
+
+#: ../src/MainWindow.cs:2683
+#, csharp-format
+msgid "Find _Selected Tag"
+msgid_plural "Find _Selected Tags"
+msgstr[0] ""
+msgstr[1] ""
+
+#: ../src/MainWindow.cs:2687
+#, csharp-format
+msgid "Find Selected Tag _With"
+msgid_plural "Find Selected Tags _With"
+msgstr[0] ""
+msgstr[1] ""
+
+#: ../src/MainWindow.cs:2728
+msgid "Create New Version?"
+msgid_plural "Create New Versions?"
+msgstr[0] "Buat Versi Baru?"
+
+#: ../src/MainWindow.cs:2730
+#, csharp-format
+msgid ""
+"Before launching {1}, should F-Spot create a new version of the selected "
+"photo to preserve the original?"
+msgid_plural ""
+"Before launching {1}, should F-Spot create new versions of the selected "
+"photos to preserve the originals?"
+msgstr[0] ""
+msgstr[1] ""
+
+#: ../src/MainWindow.cs:2752
+msgid "XCF version"
+msgstr "Versi XCF"
+
+#: ../src/MetadataStore.cs:19
+msgid "Creator"
+msgstr "Pencipta"
+
+#: ../src/MetadataStore.cs:20
+msgid "Title"
+msgstr "Judul"
+
+#: ../src/MetadataStore.cs:21
+msgid "Copyright"
+msgstr "Hak Cipta"
+
+#: ../src/MetadataStore.cs:22
+msgid "Subject and Keywords"
+msgstr "Subjek dan Kata Kunci"
+
+#: ../src/MetadataStore.cs:23
+msgid "Compression"
+msgstr "Kompresi"
+
+#. Translators: Planar Configuration is the label for the tiff:PlanarConfiguration tag
+#. "when Planar Configuration=1, this implies that all components must have
+#. the same BitsPerSample value; when Planar Configuration=2, different
+#. components could have different bit depths."
+#: ../src/MetadataStore.cs:29
+msgid "Planar Configuration"
+msgstr "Konfigurasi Planar"
+
+#: ../src/MetadataStore.cs:31
+msgid "Orientation"
+msgstr "Orientasi"
+
+#: ../src/MetadataStore.cs:33
+msgid "Photometric Interpretation"
+msgstr ""
+
+#: ../src/MetadataStore.cs:35
+msgid "Resolution Unit"
+msgstr "Unit Resolusi"
+
+#: ../src/MetadataStore.cs:37
+msgid "Exposure Program"
+msgstr "Program Pencahayaan"
+
+#: ../src/MetadataStore.cs:39
+#, fuzzy
+msgid "Metering Mode"
+msgstr "Mode Pengukuran"
+
+#: ../src/MetadataStore.cs:41
+#, fuzzy
+msgid "Exposure Mode"
+msgstr "Mode Pencahayaan"
+
+#: ../src/MetadataStore.cs:43
+msgid "Custom Rendered"
+msgstr ""
+
+#: ../src/MetadataStore.cs:45
+msgid "Components Configuration"
+msgstr ""
+
+#: ../src/MetadataStore.cs:47
+msgid "Light Source"
+msgstr "Sumber Cahaya"
+
+#: ../src/MetadataStore.cs:49
+msgid "Sensing Method"
+msgstr ""
+
+#: ../src/MetadataStore.cs:51
+msgid "Color Space"
+msgstr ""
+
+#: ../src/MetadataStore.cs:53
+msgid "White Balance"
+msgstr ""
+
+#: ../src/MetadataStore.cs:55
+msgid "Focal Plane Resolution Unit"
+msgstr ""
+
+#: ../src/MetadataStore.cs:57
+msgid "File Source Type"
+msgstr ""
+
+#: ../src/MetadataStore.cs:59
+msgid "Scene Capture Type"
+msgstr ""
+
+#. Translators: Gain Control is the label for the exif:GainControl tag
+#. "This tag indicates the degree of overall image gain adjustment."
+#: ../src/MetadataStore.cs:63
+msgid "Gain Control"
+msgstr ""
+
+#: ../src/MetadataStore.cs:65
+msgid "Contrast"
+msgstr "Kontras"
+
+#: ../src/MetadataStore.cs:67
+msgid "Saturation"
+msgstr "Saturasi"
+
+#: ../src/MetadataStore.cs:69
+msgid "Sharpness"
+msgstr ""
+
+#: ../src/MetadataStore.cs:71
+#, fuzzy
+msgid "Scene Type"
+msgstr "Tipe Latar"
+
+#. Fixme this should really set parent menu
+#. items insensitve
+#: ../src/PhotoTagMenu.cs:62
+#, fuzzy
+msgid "(No Tags)"
+msgstr "S_isip Tag"
+
+#: ../src/PhotoVersionCommands.cs:58
+#, fuzzy
+msgid "Create New Version"
+msgstr "Buat peluncur program"
+
+#: ../src/PhotoVersionCommands.cs:59
+msgid "Name:"
+msgstr "Nama:"
+
+#: ../src/PhotoVersionCommands.cs:63
+#, fuzzy
+msgid "Rename Version"
+msgstr "Tampilkan versi"
+
+#: ../src/PhotoVersionCommands.cs:64
+msgid "New name:"
+msgstr "Nama baru:"
+
+#: ../src/PhotoVersionCommands.cs:123
+#, fuzzy
+msgid "Delete"
+msgstr "Hapus"
+
+#: ../src/PhotoVersionCommands.cs:124
+#, fuzzy, csharp-format
+msgid "Really delete version \"{0}\"?"
+msgstr "Benarkah ingin menghapus berkas \"%s\"?"
+
+#: ../src/PhotoVersionCommands.cs:125
+msgid "This removes the version and deletes the corresponding file from disk."
+msgstr ""
+
+#: ../src/PhotoVersionCommands.cs:170
+#, fuzzy
+msgid "De_tach"
+msgstr "_Standar"
+
+#: ../src/PhotoVersionCommands.cs:171
+#, csharp-format
+msgid "Really detach version \"{0}\" from \"{1}\"?"
+msgstr ""
+
+#: ../src/PhotoVersionCommands.cs:172
+msgid ""
+"This makes the version appear as a separate photo in the library. To undo, "
+"drag the new photo back to its parent."
+msgstr ""
+
+#: ../src/PhotoVersionCommands.cs:194
+#, fuzzy
+msgid "Re_parent"
+msgstr "Jendela Induk"
+
+#: ../src/PhotoVersionCommands.cs:195
+#, csharp-format
+msgid "Really reparent \"{0}\" as version of \"{1}\"?"
+msgid_plural "Really reparent {2} photos as versions of \"{1}\"?"
+msgstr[0] ""
+
+#: ../src/PhotoVersionCommands.cs:198
+msgid ""
+"This makes the photos appear as a single one in the library. The versions "
+"can be detached using the Photo menu."
+msgstr ""
+
+#: ../src/PhotoVersionCommands.cs:238
+#, fuzzy, csharp-format
+msgid "Received exception \"{0}\"."
+msgstr "Ada eksepsi yang dikembalikan: %s"
+
+#: ../src/PhotoVersionMenu.cs:66 ../src/Widgets/InfoBox.cs:566
+#: ../src/Widgets/InfoBox.cs:568
+msgid "(No Edits)"
+msgstr "(Tak Ada Suntingan)"
+
+#: ../src/PhotoView.cs:339
+msgid "Comment:"
+msgstr "Komentar:"
+
+#: ../src/Preferences.cs:152
+msgid "Photos"
+msgstr "Foto"
+
+#: ../src/PrintOperation.cs:32
+msgid "Image Settings"
+msgstr "Tatanan Gambar"
+
+#: ../src/QueryWidget.cs:55
+msgid "Find: "
+msgstr "Cari:"
+
+#: ../src/QueryWidget.cs:60
+msgid "Untagged photos"
+msgstr "Foto tak di-tag"
+
+#: ../src/QueryWidget.cs:68
+#, fuzzy
+msgid "Rated photos"
+msgstr "Cacah foto"
+
+#. Note for translators: 'Import roll' is no command, it means 'Roll that has been imported'
+#: ../src/QueryWidget.cs:77
+#, fuzzy
+msgid "Import roll"
+msgstr "Gulung ke atas"
+
+#: ../src/QueryWidget.cs:100
+msgid "Clear search"
+msgstr "Bersihkan pencarian"
+
+#: ../src/QueryWidget.cs:107
+msgid "Refresh search"
+msgstr "Segarkan pencarian"
+
+#: ../src/QueryWidget.cs:110
+msgid "No matching photos found"
+msgstr ""
+
+#: ../src/RotateCommand.cs:87 ../src/RotateCommand.cs:102
+msgid "Unable to rotate this type of photo"
+msgstr ""
+
+#: ../src/RotateCommand.cs:122
+msgid "Unable to rotate readonly file"
+msgstr ""
+
+#: ../src/RotateCommand.cs:185
+msgid "Rotating photos"
+msgstr "Memutar foto"
+
+#: ../src/RotateCommand.cs:196
+#, csharp-format
+msgid "Rotating photo \"{0}\""
+msgstr "Memutar foto \"{0}\""
+
+#: ../src/RotateCommand.cs:209
+msgid "Directory not found"
+msgstr "Direktori tak ditemukan"
+
+#: ../src/RotateCommand.cs:229
+#, csharp-format
+msgid "Unable to rotate photo"
+msgid_plural "Unable to rotate {0} photos"
+msgstr[0] ""
+msgstr[1] ""
+
+#: ../src/RotateCommand.cs:231
+#, csharp-format
+msgid ""
+"The photo could not be rotated because it is on a read only file system or "
+"media such as a CDROM. Please check the permissions and try again."
+msgid_plural ""
+"{0} photos could not be rotated because they are on a read only file system "
+"or media such as a CDROM. Please check the permissions and try again."
+msgstr[0] ""
+msgstr[1] ""
+
+#: ../src/RotateCommand.cs:258
+#, csharp-format
+msgid "Received error \"{0}\" while attempting to rotate {1}"
+msgstr ""
+
+#: ../src/RotateCommand.cs:263
+msgid "Error while rotating photo."
+msgstr ""
+
+#: ../src/SendEmail.cs:214
+msgid "Preparing email"
+msgstr "Menyiapkan surel"
+
+#: ../src/SendEmail.cs:266
+#, csharp-format
+msgid "Exporting picture \"{0}\""
+msgstr "Mengekspor foto \"{0}\""
+
+#: ../src/SendEmail.cs:288
+msgid "Error processing image"
+msgstr "Galat saat memroses gambar"
+
+#: ../src/SendEmail.cs:289
+#, csharp-format
+msgid "An error occured while processing \"{0}\": {1}"
+msgstr ""
+
+#. Send the mail :)
+#: ../src/SendEmail.cs:303
+msgid "My Photos"
+msgstr "Fotoku"
+
+#: ../src/Sharpener.cs:72
+msgid "Error saving sharpened photo"
+msgstr ""
+
+#: ../src/Sharpener.cs:73 ../src/UI.Dialog/EditExceptionDialog.cs:26
+#, csharp-format
+msgid "Received exception \"{0}\". Unable to save photo {1}"
+msgstr ""
+
+#: ../src/Sharpener.cs:102
+msgid "Sharpen"
+msgstr ""
+
+#: ../src/Sharpener.cs:112
+#, fuzzy
+msgid "Amount:"
+msgstr "Sekitar"
+
+#: ../src/Sharpener.cs:113
+msgid "Radius:"
+msgstr "Jari-jari:"
+
+#: ../src/Sharpener.cs:114
+msgid "Threshold:"
+msgstr "Ambang:"
+
+#: ../src/SingleView.cs:72
+msgid "Rotate photo left"
+msgstr "Putar foto ke kiri"
+
+#: ../src/SingleView.cs:77
+msgid "Rotate photo right"
+msgstr "Putar foto ke kanan"
+
+#: ../src/SingleView.cs:114
+msgid "Folder"
+msgstr "Folder"
+
+#: ../src/SingleView.cs:339
+msgid "Open"
+msgstr "Buka"
+
+#: ../src/SingleView.cs:342
+msgid "Select Folder"
+msgstr "Pilih Folder"
+
+#: ../src/SingleView.cs:426
+msgid "Set as Background"
+msgstr "Jadikan Gambar Latar"
+
+#: ../src/TagCommands.cs:97 ../src/TagSelectionWidget.cs:491
+#: ../src/UI.Dialog/EditTagDialog.cs:76
+msgid "This name is already in use"
+msgstr "Nama ini telah dipakai"
+
+#: ../src/TagCommands.cs:145
+msgid "Create New Tag"
+msgstr "Buat Tag Baru"
+
+#: ../src/TagCommands.cs:146
+msgid "Name of New Tag:"
+msgstr "Nama Tag Baru:"
+
+#: ../src/TagPopup.cs:26
+#, fuzzy, csharp-format
+msgid "Find"
+msgid_plural "Find"
+msgstr[0] "Temukan"
+msgstr[1] ""
+
+#: ../src/TagPopup.cs:36 ../src/Widgets/TagMenu.cs:98
+msgid "Create New Tag..."
+msgstr "Buat Tag Baru..."
+
+#: ../src/TagPopup.cs:42
+msgid "Edit Tag..."
+msgstr "Sunting Tag..."
+
+#: ../src/TagPopup.cs:46
+msgid "Delete Tag"
+msgid_plural "Delete Tags"
+msgstr[0] "Hapus Tag"
+
+#: ../src/TagPopup.cs:52
+msgid "Attach Tag to Selection"
+msgid_plural "Attach Tags to Selection"
+msgstr[0] ""
+msgstr[1] ""
+
+#: ../src/TagPopup.cs:56
+msgid "Remove Tag From Selection"
+msgid_plural "Remove Tags From Selection"
+msgstr[0] ""
+msgstr[1] ""
+
+#: ../src/TagPopup.cs:62
+msgid "Merge Tags"
+msgstr "Gabung Tag"
+
+#: ../src/TagQueryWidget.cs:34
+#, csharp-format
+msgid "Include Photos Tagged \"{0}\""
+msgstr ""
+
+#: ../src/TagQueryWidget.cs:39
+#, csharp-format
+msgid "Exclude Photos Tagged \"{0}\""
+msgstr ""
+
+#: ../src/TagQueryWidget.cs:44
+msgid "Remove From Search"
+msgstr "Hapus Dari Pencarian"
+
+#: ../src/TagQueryWidget.cs:88
+#, fuzzy, csharp-format
+msgid "Find _With"
+msgid_plural "Find _With"
+msgstr[0] "Buka dengan \"%s\""
+msgstr[1] ""
+
+#: ../src/TagQueryWidget.cs:114
+msgid "All"
+msgstr "Semua"
+
+#: ../src/TagQueryWidget.cs:149 ../src/Term.cs:586
+#, csharp-format
+msgid "Not {0}"
+msgstr "Bukan {0}"
+
+#: ../src/TagQueryWidget.cs:273
+msgid "Drag tags here to search for them"
+msgstr ""
+
+#: ../src/TagSelectionWidget.cs:490
+#, fuzzy
+msgid "Error renaming tag"
+msgstr "Error mengganti nama berkas \"%s\": %s"
+
+#: ../src/TagStore.cs:204
+msgid "Favorites"
+msgstr "Favorit"
+
+#: ../src/TagStore.cs:209
+msgid "Hidden"
+msgstr "Tersembunyi"
+
+#: ../src/TagStore.cs:217
+msgid "People"
+msgstr "Orang"
+
+#: ../src/TagStore.cs:222
+msgid "Places"
+msgstr "Tempat"
+
+#: ../src/TagStore.cs:227
+msgid "Events"
+msgstr "Peristiwa"
+
+#. The label for the root category is used in new and edit tag dialogs
+#: ../src/TagStore.cs:240 ../src/Widgets/InfoBox.cs:410
+msgid "(None)"
+msgstr "(Tak ada)"
+
+#: ../src/Term.cs:298
+msgid " and "
+msgstr " dan "
+
+#. operators.Add (Catalog.GetString (" && "));
+#: ../src/Term.cs:300
+msgid ", "
+msgstr ", "
+
+#: ../src/Term.cs:356
+msgid " or "
+msgstr " atau "
+
+#. OPS The operators we support, case insensitive
+#. private static string op_str = "(?'Ops' or | and |, | \\s+ )";
+#: ../src/Term.cs:380 ../src/UI.Dialog/ui/DateRangeDialog.ui.h:7
+#: ../src/Widgets/FindBar.cs:178
+msgid "or"
+msgstr "atau"
+
+#: ../src/ThumbnailCommand.cs:21
+#, fuzzy
+msgid "Updating Thumbnails"
+msgstr "_Tampilkan gambar kecil:"
+
+#: ../src/ThumbnailCommand.cs:29
+#, fuzzy, csharp-format
+msgid "Updating picture \"{0}\""
+msgstr "Kecerahan foto"
+
+#: ../src/UI.Dialog/AboutDialog.cs:94
+msgid "Photo management for GNOME"
+msgstr ""
+
+#: ../src/UI.Dialog/AboutDialog.cs:95
+msgid "Copyright © 2003-2010 Novell Inc."
+msgstr ""
+
+#: ../src/UI.Dialog/AboutDialog.cs:119
+msgid "translator-credits"
+msgstr "Andika Triwidada <andika at gmail.com>, 2010."
+
+#: ../src/UI.Dialog/AboutDialog.cs:124
+msgid "F-Spot Website"
+msgstr "Situs Web F-Spot"
+
+#: ../src/UI.Dialog/AdjustTimeDialog.cs:113
+#: ../src/UI.Dialog/ui/AdjustTimeDialog.ui.h:10
+#, csharp-format
+msgid "Shift all photos by {0}"
+msgstr ""
+
+#: ../src/UI.Dialog/DateRangeDialog.cs:99
+msgid "Today"
+msgstr "Hari ini"
+
+#: ../src/UI.Dialog/DateRangeDialog.cs:101
+msgid "Yesterday"
+msgstr "Kemarin"
+
+#: ../src/UI.Dialog/DateRangeDialog.cs:103
+msgid "Last 7 days"
+msgstr "7 hari terakhir"
+
+#: ../src/UI.Dialog/DateRangeDialog.cs:105
+msgid "Last 30 days"
+msgstr "30 hari terakhir"
+
+#: ../src/UI.Dialog/DateRangeDialog.cs:107
+msgid "Last 90 days"
+msgstr "90 hari terakhir"
+
+#: ../src/UI.Dialog/DateRangeDialog.cs:109
+msgid "Last 360 days"
+msgstr "360 hari terakhir"
+
+#: ../src/UI.Dialog/DateRangeDialog.cs:111
+msgid "Current Week (Mon-Sun)"
+msgstr "Minggu Ini (Sen-Mgg)"
+
+#: ../src/UI.Dialog/DateRangeDialog.cs:113
+msgid "Previous Week (Mon-Sun)"
+msgstr "Minggu Lalu (Sen-Mgg)"
+
+#: ../src/UI.Dialog/DateRangeDialog.cs:131
+#, fuzzy
+msgid "Customized Range"
+msgstr "Nilai keluar cakupan.\n"
+
+#: ../src/UI.Dialog/EditExceptionDialog.cs:39
+msgid "Error editing photo"
+msgstr ""
+
+#: ../src/UI.Dialog/EditTagIconDialog.cs:42
+#, csharp-format
+msgid "Edit Icon for Tag {0}"
+msgstr ""
+
+#: ../src/UI.Dialog/EditTagIconDialog.cs:64
+msgid "Select Photo from file"
+msgstr ""
+
+#: ../src/UI.Dialog/EditTagIconDialog.cs:86
+#, csharp-format
+msgid ""
+"\n"
+"<b>From Photo</b>\n"
+" You can use one of your library photos as an icon for this tag.\n"
+" However, first you must have at least one photo associated\n"
+" with this tag. Please tag a photo as '{0}' and return here\n"
+" to use it as an icon."
+msgstr ""
+
+#: ../src/UI.Dialog/EditTagIconDialog.cs:164
+msgid "Unable to load image"
+msgstr "Tak bisa memuat gambar"
+
+#: ../src/UI.Dialog/EditTagIconDialog.cs:165
+#, csharp-format
+msgid "Unable to load \"{0}\" as icon for the tag"
+msgstr "Tak bisa memuat \"{0}\" sebagai ikon bagi tag"
+
+#: ../src/UI.Dialog/EditTagIconDialog.cs:203
+#, csharp-format
+msgid "Photo {0} of {1}"
+msgstr "Foto {0} dari {1}"
+
+#: ../src/UI.Dialog/ExceptionDialog.cs:24
+msgid "F-Spot Encountered a Fatal Error"
+msgstr ""
+
+#: ../src/UI.Dialog/ExceptionDialog.cs:60
+msgid "Error Details"
+msgstr "Rincian Galat"
+
+#: ../src/UI.Dialog/ExceptionDialog.cs:104
+msgid "An unhandled exception was thrown: "
+msgstr ""
+
+#: ../src/UI.Dialog/ImportDialog.cs:15
+msgid "Choose Folder..."
+msgstr "Pilih Folder..."
+
+#: ../src/UI.Dialog/ImportDialog.cs:124
+msgid "Choose Import source..."
+msgstr "Pilih sumber impor..."
+
+#: ../src/UI.Dialog/ImportDialog.cs:136
+msgid "(No Cameras Detected)"
+msgstr "(Kamera Tak Terdeteksi)"
+
+#: ../src/UI.Dialog/ImportDialog.cs:264
+#, csharp-format
+msgid "Importing Photos: {0} of {1}..."
+msgstr "Mengimpor Foto: {0} dari {1}..."
+
+#: ../src/UI.Dialog/ImportDialog.cs:288
+msgid "Importing photos..."
+msgstr "Mengimpor foto..."
+
+#. TODO: Using a GtkSpinner would be nicer here.
+#: ../src/UI.Dialog/ImportDialog.cs:295
+msgid "Searching for photos... (You can already click Import to continue)"
+msgstr ""
+
+#: ../src/UI.Dialog/PreferenceDialog.cs:55
+#: ../src/UI.Dialog/PreferenceDialog.cs:78
+msgid "None"
+msgstr "Tak ada"
+
+#: ../src/UI.Dialog/PreferenceDialog.cs:57
+msgid "System profile"
+msgstr "Profil sistem"
+
+#: ../src/UI.Dialog/PreferenceDialog.cs:95
+msgid "Standard theme"
+msgstr "Tema standar"
+
+#: ../src/UI.Dialog/RepairDbDialog.cs:21
+msgid "Error loading database."
+msgstr "Galat saat memuat basis data."
+
+#: ../src/UI.Dialog/RepairDbDialog.cs:22
+#, csharp-format
+msgid ""
+"F-Spot encountered an error while loading the photo database. The old "
+"database has be moved to {0} and a new database has been created."
+msgstr ""
+
+#: ../src/UI.Dialog/SelectionRatioDialog.cs:61
+msgid "Label"
+msgstr "Label"
+
+#: ../src/UI.Dialog/SelectionRatioDialog.cs:65
+msgid "Ratio"
+msgstr "Rasio"
+
+#: ../src/UI.Dialog/ThreadProgressDialog.cs:55
+msgid "Retry"
+msgstr "Coba lagi"
+
+#: ../src/UI.Dialog/ui/AdjustTimeDialog.ui.h:1
+msgid "0000:00:00 00:00:00"
+msgstr "0000:00:00 00:00:00"
+
+#: ../src/UI.Dialog/ui/AdjustTimeDialog.ui.h:2
+msgid "00:00:00"
+msgstr "00:00:00"
+
+#: ../src/UI.Dialog/ui/AdjustTimeDialog.ui.h:3
+msgid "5"
+msgstr "5"
+
+#: ../src/UI.Dialog/ui/AdjustTimeDialog.ui.h:4
+msgid "<b>Action</b>"
+msgstr "<b>Aksi</b>"
+
+#: ../src/UI.Dialog/ui/AdjustTimeDialog.ui.h:6
+msgid "<b>Reference Photo</b>"
+msgstr "<b>Foto Rujukan</b>"
+
+#: ../src/UI.Dialog/ui/AdjustTimeDialog.ui.h:7
+msgid "Adjust Time"
+msgstr "Atur Waktu"
+
+#: ../src/UI.Dialog/ui/AdjustTimeDialog.ui.h:8
+#, fuzzy
+msgid "Adjusted date: "
+msgstr "Salin Tanggal"
+
+#: ../src/UI.Dialog/ui/AdjustTimeDialog.ui.h:9
+#, fuzzy
+msgid "Current date:"
+msgstr "Salin _Tanggal"
+
+#: ../src/UI.Dialog/ui/AdjustTimeDialog.ui.h:11
+msgid "Space all photos by"
+msgstr ""
+
+#: ../src/UI.Dialog/ui/AdjustTimeDialog.ui.h:12
+msgid "difference:"
+msgstr "perbedaan:"
+
+#: ../src/UI.Dialog/ui/AdjustTimeDialog.ui.h:13
+msgid "min. Starting at {0}"
+msgstr ""
+
+#: ../src/UI.Dialog/ui/DateRangeDialog.ui.h:1
+msgid "<b>End Date</b>"
+msgstr "<b>Tanggal Akhir</b>"
+
+#: ../src/UI.Dialog/ui/DateRangeDialog.ui.h:2
+msgid "<b>Select period</b>"
+msgstr "<b>Pilih perioda</b>"
+
+#: ../src/UI.Dialog/ui/DateRangeDialog.ui.h:3
+msgid "<b>Start Date</b>"
+msgstr "<b>Tanggal Awal</b>"
+
+#: ../src/UI.Dialog/ui/DateRangeDialog.ui.h:4
+msgid "Cancel, do not change the current timeline. "
+msgstr ""
+
+#: ../src/UI.Dialog/ui/DateRangeDialog.ui.h:5
+msgid "Only photos taken within these dates will be displayed."
+msgstr ""
+
+#: ../src/UI.Dialog/ui/DateRangeDialog.ui.h:6
+#, fuzzy
+msgid "Set date range"
+msgstr "Tentukan tanggal kadaluwar_sa"
+
+#: ../src/UI.Dialog/ui/EditTagDialog.ui.h:1
+msgid "<small></small>"
+msgstr "<small></small>"
+
+#: ../src/UI.Dialog/ui/EditTagDialog.ui.h:2
+msgid "Edit Tag"
+msgstr "Sunting Tag"
+
+#: ../src/UI.Dialog/ui/EditTagDialog.ui.h:3
+msgid "Edit icon"
+msgstr "Sunting ikon"
+
+#: ../src/UI.Dialog/ui/EditTagDialog.ui.h:5
+msgid "_Icon:"
+msgstr "_Ikon:"
+
+#: ../src/UI.Dialog/ui/EditTagIconDialog.ui.h:1
+msgid "<b>From External Photo</b>"
+msgstr "<b>Dari Foto Eksternal</b>"
+
+#: ../src/UI.Dialog/ui/EditTagIconDialog.ui.h:2
+msgid "<b>From Photo</b>"
+msgstr "<b>Dari Foto</b>"
+
+#: ../src/UI.Dialog/ui/EditTagIconDialog.ui.h:3
+#, fuzzy
+msgid "<b>Predefined icons</b>"
+msgstr "Hanya icon"
+
+#: ../src/UI.Dialog/ui/EditTagIconDialog.ui.h:4
+msgid "<b>Preview</b>"
+msgstr "<b>Pratilik</b>"
+
+#: ../src/UI.Dialog/ui/EditTagIconDialog.ui.h:5
+#, fuzzy
+msgid "Design icon from"
+msgstr "Nama ikon dari tema ikon"
+
+#: ../src/UI.Dialog/ui/EditTagIconDialog.ui.h:6
+msgid "Edit Tag Icon"
+msgstr ""
+
+#: ../src/UI.Dialog/ui/EditTagIconDialog.ui.h:7
+#, fuzzy
+msgid "No _image"
+msgstr "Tanpa Gambar"
+
+#: ../src/UI.Dialog/ui/EditTagIconDialog.ui.h:8
+msgid "Photo 0 of 0"
+msgstr "Foto 0 dari 0"
+
+#: ../src/UI.Dialog/ui/PreferenceDialog.ui.h:1
+msgid "Color profile for display:"
+msgstr ""
+
+#: ../src/UI.Dialog/ui/PreferenceDialog.ui.h:2
+msgid "Color profile for printing:"
+msgstr ""
+
+#: ../src/UI.Dialog/ui/PreferenceDialog.ui.h:3
+#, fuzzy
+msgid "F-Spot Preferences"
+msgstr "Pengaturan Jam"
+
+#: ../src/UI.Dialog/ui/PreferenceDialog.ui.h:4
+#, fuzzy
+msgid "F-Spot appearance:"
+msgstr "Preferensi Penampilan"
+
+#: ../src/UI.Dialog/ui/PreferenceDialog.ui.h:5
+msgid ""
+"Inside the image files when possible\n"
+"<small>Makes them accessible to other image-editing programs.</small>"
+msgstr ""
+
+#: ../src/UI.Dialog/ui/PreferenceDialog.ui.h:7
+#, fuzzy
+msgid "Select A Folder"
+msgstr "Pilih Folder"
+
+#: ../src/UI.Dialog/ui/PreferenceDialog.ui.h:8
+msgid "Separately from the image files"
+msgstr ""
+
+#: ../src/UI.Dialog/ui/PreferenceDialog.ui.h:9
+msgid "Store tags and descriptions for photos:"
+msgstr ""
+
+#: ../src/UI.Dialog/ui/PreferenceDialog.ui.h:10
+msgid "When importing photos, copy them to:"
+msgstr ""
+
+#: ../src/UI.Dialog/ui/RatingFilterDialog.ui.h:1
+msgid "<b>Max Rating</b>"
+msgstr ""
+
+#: ../src/UI.Dialog/ui/RatingFilterDialog.ui.h:2
+msgid "<b>Min Rating</b>"
+msgstr ""
+
+#: ../src/UI.Dialog/ui/RatingFilterDialog.ui.h:3
+msgid "Set Rating Filter"
+msgstr ""
+
+#: ../src/ui/main_window.ui.h:1
+msgid "Adjust _Time..."
+msgstr "Sesuaikan Wak_tu..."
+
+#: ../src/ui/main_window.ui.h:2
+msgid "Arrange _by"
+msgstr "Atur _berdasarkan"
+
+#: ../src/ui/main_window.ui.h:4
+msgid "By _Date"
+msgstr "Ber_dasarkan Tanggal"
+
+#: ../src/ui/main_window.ui.h:5
+msgid "By _Import Roll"
+msgstr ""
+
+#: ../src/ui/main_window.ui.h:6
+msgid "By _Rating"
+msgstr ""
+
+#: ../src/ui/main_window.ui.h:7
+msgid "Copy"
+msgstr "Salin"
+
+#: ../src/ui/main_window.ui.h:8
+msgid "Create New _Tag..."
+msgstr ""
+
+#: ../src/ui/main_window.ui.h:9
+msgid "Create _New Version..."
+msgstr ""
+
+#: ../src/ui/main_window.ui.h:10
+msgid "De_tach Version"
+msgstr ""
+
+#: ../src/ui/main_window.ui.h:12
+#, fuzzy
+msgid "Fin_d"
+msgstr "Temu_kan:"
+
+#: ../src/ui/main_window.ui.h:13
+#, fuzzy
+msgid "Manage _Extensions"
+msgstr "<b>Ekstensi Aktif</b>"
+
+#: ../src/ui/main_window.ui.h:14
+#, fuzzy
+msgid "Page Set_up..."
+msgstr "Pengat_uran halaman..."
+
+#: ../src/ui/main_window.ui.h:15
+#, fuzzy
+msgid "Re_fresh Thumbnail"
+msgstr "Laju penyega_ran:"
+
+#: ../src/ui/main_window.ui.h:19
+msgid "Select _All"
+msgstr "Pilih Semu_a"
+
+#: ../src/ui/main_window.ui.h:20
+#, fuzzy
+msgid "Select _None"
+msgstr "Tidak Ada Yang DIpilih"
+
+#: ../src/ui/main_window.ui.h:21
+#, fuzzy
+msgid "Send by _Mail..."
+msgstr "Kirim lewat Surel:"
+
+#: ../src/ui/main_window.ui.h:23
+#, fuzzy
+msgid "Side_bar"
+msgstr "Tampilkan Panel _Samping"
+
+#: ../src/ui/main_window.ui.h:24
+msgid "T_ags"
+msgstr ""
+
+#: ../src/ui/main_window.ui.h:26
+#, fuzzy
+msgid "Thumbnail _elements"
+msgstr "XSLT — Elemen"
+
+#: ../src/ui/main_window.ui.h:27
+#, fuzzy
+msgid "Too_lbar"
+msgstr "terlalu panjanga"
+
+#: ../src/ui/main_window.ui.h:28
+#, fuzzy
+msgid "View"
+msgstr "Lihat"
+
+#: ../src/ui/main_window.ui.h:33
+#, fuzzy
+msgid "_Attach Tag"
+msgstr "Tag tak tertangani: '%s'"
+
+#: ../src/ui/main_window.ui.h:34
+msgid "_Attach Tag to Selection"
+msgstr ""
+
+#: ../src/ui/main_window.ui.h:36
+msgid "_Clear Rating Filter"
+msgstr ""
+
+#: ../src/ui/main_window.ui.h:37
+msgid "_Clear Roll Filter"
+msgstr ""
+
+#: ../src/ui/main_window.ui.h:39
+msgid "_Components"
+msgstr ""
+
+#: ../src/ui/main_window.ui.h:40
+#, fuzzy
+msgid "_Contents"
+msgstr "Daftar _Isi"
+
+#: ../src/ui/main_window.ui.h:41
+msgid "_Dates"
+msgstr "_Tanggal"
+
+#: ../src/ui/main_window.ui.h:43
+msgid "_Delete Selected Tag"
+msgstr "Hapus Tag Yang _Dipilih"
+
+#: ../src/ui/main_window.ui.h:44
+msgid "_Delete Version"
+msgstr "_Hapus Versi"
+
+#: ../src/ui/main_window.ui.h:46
+msgid "_Edit Tag..."
+msgstr "_Sunting Tag..."
+
+#: ../src/ui/main_window.ui.h:47
+msgid "_Export to"
+msgstr "_Ekspor ke"
+
+#: ../src/ui/main_window.ui.h:48
+msgid "_Filmstrip"
+msgstr ""
+
+#: ../src/ui/main_window.ui.h:51
+msgid "_Hidden"
+msgstr "_Tersembunyi"
+
+#: ../src/ui/main_window.ui.h:52
+msgid "_Import..."
+msgstr "_Impor..."
+
+#: ../src/ui/main_window.ui.h:53
+msgid "_Invert Selection"
+msgstr "Balik P_ilihan"
+
+#: ../src/ui/main_window.ui.h:54
+msgid "_Large"
+msgstr "_Besar"
+
+#: ../src/ui/main_window.ui.h:55
+#, fuzzy
+msgid "_Last Import Roll"
+msgstr "Impor sesi terakhir gagal"
+
+#: ../src/ui/main_window.ui.h:56
+msgid "_Loupe"
+msgstr ""
+
+#: ../src/ui/main_window.ui.h:57
+msgid "_Medium"
+msgstr "_Sedang"
+
+#: ../src/ui/main_window.ui.h:59
+msgid "_Quit"
+msgstr "_Keluar"
+
+#: ../src/ui/main_window.ui.h:60
+msgid "_Ratings"
+msgstr ""
+
+#: ../src/ui/main_window.ui.h:62
+msgid "_Remove Tag From Selection"
+msgstr "Hapus Tag Da_ri Pilihan"
+
+#: ../src/ui/main_window.ui.h:63
+#, fuzzy
+msgid "_Rename Version"
+msgstr "Tampilkan versi"
+
+#: ../src/ui/main_window.ui.h:64
+msgid "_Reverse Order"
+msgstr "Balik U_rutan"
+
+#: ../src/ui/main_window.ui.h:65
+#, fuzzy
+msgid "_Select Import Rolls..."
+msgstr "Impor sertifikat..."
+
+#: ../src/ui/main_window.ui.h:66
+#, fuzzy
+msgid "_Set Date Range..."
+msgstr "Tentukan tanggal kadaluwar_sa"
+
+#: ../src/ui/main_window.ui.h:67
+msgid "_Set Rating filter..."
+msgstr ""
+
+#: ../src/ui/main_window.ui.h:68
+msgid "_Sharpen..."
+msgstr "_Pertajam..."
+
+#: ../src/ui/main_window.ui.h:70
+msgid "_Small"
+msgstr "_Kecil"
+
+#: ../src/ui/main_window.ui.h:71
+msgid "_Tag Icons"
+msgstr "Ikon _Tag"
+
+#: ../src/ui/main_window.ui.h:72
+msgid "_Tags"
+msgstr "_Tag"
+
+#: ../src/ui/main_window.ui.h:73
+msgid "_Timeline"
+msgstr ""
+
+#: ../src/ui/main_window.ui.h:74
+msgid "_Tools"
+msgstr "Ala_t"
+
+#: ../src/ui/main_window.ui.h:75
+msgid "_Untagged Photos"
+msgstr "Foto Tak _Di-tag"
+
+#: ../src/ui/main_window.ui.h:76
+msgid "_Version"
+msgstr "_Versi"
+
+#: ../src/Updater.cs:724
+msgid "Updating F-Spot Database"
+msgstr "Memperbarui Basis Data F-Spot"
+
+#: ../src/Updater.cs:725
+msgid ""
+"Please wait while your F-Spot gallery's database is updated. This may take "
+"some time."
+msgstr ""
+"Silakan tunggu sementara basis data galeri F-Spot Anda sedang diperbarui. "
+"Ini mungkin makan waktu."
+
+#. Mono.Unix.Error error = Mono.Unix.Stdlib.GetLastError ();
+#: ../src/Utils/Unix.cs:36
+msgid "Unable to create temporary file"
+msgstr "Tak bisa membuat berkas sementara"
+
+#: ../src/Widgets/CustomPrintWidget.cs:119
+msgid "Page Setup"
+msgstr "Penyiapan Halaman"
+
+#: ../src/Widgets/CustomPrintWidget.cs:123
+#: ../src/Widgets/CustomPrintWidget.cs:127
+#: ../src/Widgets/CustomPrintWidget.cs:133
+#, csharp-format
+msgid "Paper Size: {0} x {1} mm"
+msgstr "Ukuran Kertas: {0} x {1} mm"
+
+#: ../src/Widgets/CustomPrintWidget.cs:130
+msgid "Set Page Size and Orientation"
+msgstr "Tata Ukuran Halaman dan Orientasi"
+
+#: ../src/Widgets/CustomPrintWidget.cs:141
+msgid "Photos per page"
+msgstr "Foto per halaman"
+
+#: ../src/Widgets/CustomPrintWidget.cs:151
+msgid "Repeat"
+msgstr "Ulangi"
+
+#: ../src/Widgets/CustomPrintWidget.cs:152
+msgid "Print cut marks"
+msgstr "Cetak tanda potong"
+
+#: ../src/Widgets/CustomPrintWidget.cs:158
+msgid "Photos layout"
+msgstr "Tata letak foto"
+
+#: ../src/Widgets/CustomPrintWidget.cs:160
+msgid "Full Page (no margin)"
+msgstr ""
+
+#. Note for translators: "Zoom" is a Fit Mode
+#: ../src/Widgets/CustomPrintWidget.cs:163
+msgid "Zoom"
+msgstr "Zum"
+
+#: ../src/Widgets/CustomPrintWidget.cs:164
+msgid "Fill"
+msgstr ""
+
+#: ../src/Widgets/CustomPrintWidget.cs:165
+msgid "Scaled"
+msgstr ""
+
+#: ../src/Widgets/CustomPrintWidget.cs:170
+msgid "White borders"
+msgstr "Tepi putih"
+
+#: ../src/Widgets/CustomPrintWidget.cs:176
+msgid "Custom Text"
+msgstr "Teks Gubahan"
+
+#: ../src/Widgets/CustomPrintWidget.cs:180
+msgid "Photos infos"
+msgstr "Info foto"
+
+#: ../src/Widgets/CustomPrintWidget.cs:182
+msgid "Print file name"
+msgstr "Cetak nama berkas"
+
+#: ../src/Widgets/CustomPrintWidget.cs:183
+msgid "Print photo date"
+msgstr "Cetak tanggal foto"
+
+#: ../src/Widgets/CustomPrintWidget.cs:184
+msgid "Print photo time"
+msgstr "Cetak waktu foto"
+
+#: ../src/Widgets/CustomPrintWidget.cs:185
+msgid "Print photo tags"
+msgstr "Cetak tag foto"
+
+#: ../src/Widgets/CustomPrintWidget.cs:186
+msgid "Print photo comment"
+msgstr "Cetak komentar foto"
+
+#: ../src/Widgets/EditorPage.cs:31 ../src/Widgets/Sidebar.cs:54
+msgid "Edit"
+msgstr "Sunting"
+
+#: ../src/Widgets/EditorPage.cs:199
+msgid ""
+"This tool requires an active selection. Please select a region of the photo "
+"and try the operation again"
+msgstr ""
+"Alat ini memerlukan suatu pilihan aktif. Silakan pilih suatu wilayah dari "
+"foto dan coba operasi lagi"
+
+#: ../src/Widgets/EditorPage.cs:217
+msgid "Error saving adjusted photo"
+msgid_plural "Error saving adjusted photos"
+msgstr[0] "Kesalahan saat menyimpan foto yang disetel"
+
+#: ../src/Widgets/EditorPage.cs:219
+#, csharp-format
+msgid ""
+"Received exception \"{0}\". Note that you have to develop RAW files into "
+"JPEG before you can edit them."
+msgstr ""
+"Menerima eksepsi \"{0}\". Catat bahwa Anda mesti mengembangkan berkas RAW "
+"menjadi JPEG sebelum Anda dapat menyuntingnya."
+
+#: ../src/Widgets/Filmstrip.cs:573
+msgid "_Horizontal"
+msgstr "_Horisontal"
+
+#: ../src/Widgets/Filmstrip.cs:577
+msgid "_Vertical"
+msgstr "_Vertikal"
+
+#: ../src/Widgets/FindBar.cs:59
+msgid "Find:"
+msgstr "Cari:"
+
+#: ../src/Widgets/FolderTreePage.cs:22
+msgid "Folders"
+msgstr "Folder"
+
+#: ../src/Widgets/FolderTreeView.cs:127
+msgid "Filesystem"
+msgstr "Sistem berkas"
+
+#: ../src/Widgets/InfoBox.cs:183
+msgid "Histogram"
+msgstr "Histogram"
+
+#: ../src/Widgets/InfoBox.cs:216
+msgid "Version"
+msgstr "Versi"
+
+#: ../src/Widgets/InfoBox.cs:219
+msgid "Date"
+msgstr "Tanggal"
+
+#: ../src/Widgets/InfoBox.cs:225
+msgid "Exposure"
+msgstr "Pencahayaan"
+
+#: ../src/Widgets/InfoBox.cs:229
+msgid "Focal Length"
+msgstr "Panjang Fokus"
+
+#: ../src/Widgets/InfoBox.cs:232
+msgid "Camera"
+msgstr "Kamera"
+
+#: ../src/Widgets/InfoBox.cs:235
+msgid "File Size"
+msgstr "Ukuran Berkas"
+
+#: ../src/Widgets/InfoBox.cs:238
+#, fuzzy
+msgid "Rating"
+msgstr "Nilai"
+
+#: ../src/Widgets/InfoBox.cs:391 ../src/Widgets/InfoBox.cs:399
+#: ../src/Widgets/InfoBox.cs:429
+msgid "(wrong format)"
+msgstr "{salah bentuk}"
+
+#: ../src/Widgets/InfoBox.cs:419 ../src/Widgets/InfoBox.cs:442
+#: ../src/Widgets/InfoBox.cs:452 ../src/Widgets/InfoBox.cs:461
+msgid "(Unknown)"
+msgstr "(Tak Diketahui)"
+
+#: ../src/Widgets/InfoBox.cs:564
+#, csharp-format
+msgid "(One Edit)"
+msgid_plural "({0} Edits)"
+msgstr[0] "({0} Suntingan)"
+
+#: ../src/Widgets/InfoBox.cs:578
+msgid "(File read error)"
+msgstr "(Kesalahan pembacaan berkas)"
+
+#: ../src/Widgets/InfoBox.cs:623
+#, csharp-format
+msgid "{0} Photos"
+msgstr "{0} Foto"
+
+#. Note for translators: {0} is a date, {1} and {2} are times.
+#: ../src/Widgets/InfoBox.cs:643
+#, csharp-format
+msgid ""
+"On {0} between \n"
+"{1} and {2}"
+msgstr ""
+"Pada {0} antara \n"
+"{1} dan {2}"
+
+#: ../src/Widgets/InfoBox.cs:648
+#, csharp-format
+msgid ""
+"Between {0} \n"
+"and {1}"
+msgstr ""
+"Antara {0} \n"
+"dan {1}"
+
+#: ../src/Widgets/InfoBox.cs:675
+msgid "(At least one File not found)"
+msgstr "(Sedikitnya satu berkas tak ditemukan)"
+
+#: ../src/Widgets/InfoBox.cs:792
+msgid "Show Photo Name"
+msgstr "Tampilkan Nama Foto"
+
+#: ../src/Widgets/InfoBox.cs:801
+msgid "Show Date"
+msgstr "Tampilkan Tanggal"
+
+#: ../src/Widgets/InfoBox.cs:810
+msgid "Show Size"
+msgstr "Tampilkan Ukuran"
+
+#: ../src/Widgets/InfoBox.cs:819
+msgid "Show Exposure"
+msgstr "Tampilkan Pencahayaan"
+
+#: ../src/Widgets/InfoBox.cs:828
+msgid "Show Focal Length"
+msgstr "Tampilkan Panjang Fokus"
+
+#: ../src/Widgets/InfoBox.cs:837
+msgid "Show Camera"
+msgstr "Tampilkan Kamera"
+
+#: ../src/Widgets/InfoBox.cs:846
+msgid "Show File Size"
+msgstr "Tampilkan Ukuran Berkas"
+
+#: ../src/Widgets/MetadataDisplay.cs:25
+msgid "Metadata"
+msgstr "Metadata"
+
+#: ../src/Widgets/MetadataDisplay.cs:106
+msgid "Extended Metadata"
+msgstr "Metadata Yang Diperluas"
+
+#. clear Extended Metadata
+#: ../src/Widgets/MetadataDisplay.cs:394
+msgid "No Extended Metadata Available"
+msgstr "Tak Tersedia Metadata Yang Diperluas"
+
+#: ../src/Widgets/MetadataDisplay.cs:412
+msgid "No active photo"
+msgstr "Tak ada foto aktif"
+
+#: ../src/Widgets/MetadataDisplay.cs:414
+#, csharp-format
+msgid "The photo \"{0}\" does not exist"
+msgstr "Foto \"{0}\" tak ada"
+
+#: ../src/Widgets/MetadataDisplay.cs:417
+msgid "No metadata available"
+msgstr "Tak tersedia metadata"
+
+#: ../src/Widgets/OpenWithMenu.cs:71
+msgid "No applications available"
+msgstr "Tak tersedia aplikasi"
+
+#: ../src/Widgets/RatingMenuItem.cs:57
+#, fuzzy
+msgid "Rating:"
+msgstr "Nilai"
+
+#: ../src/XmpTagsImporter.cs:91
+msgid "Country"
+msgstr "Negara"
+
+#: ../src/XmpTagsImporter.cs:92
+msgid "City"
+msgstr "Kota"
+
+#: ../src/XmpTagsImporter.cs:93
+msgid "State"
+msgstr "Negara Bagian"
+
+#. namespace
+#: ../tools/f-spot-screensaver.desktop.in.h:1
+#, fuzzy
+msgid "Display a slideshow from F-Spot"
+msgstr "Tampilkan suatu slideshow dari F-Spot"
+
+#: ../tools/f-spot-screensaver.desktop.in.h:2
+msgid "F-Spot photos"
+msgstr "Foto F-Spot"
diff --git a/po/it.po b/po/it.po
index c3072a8..1e6458a 100644
--- a/po/it.po
+++ b/po/it.po
@@ -4,10 +4,10 @@
#
msgid ""
msgstr ""
-"Project-Id-Version: F-Spot 0.6.1\n"
+"Project-Id-Version: F-Spot 0.7.0\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2009-08-25 13:44+0200\n"
-"PO-Revision-Date: 2010-01-30 00:43+0100\n"
+"POT-Creation-Date: 2010-06-15 08:49+0200\n"
+"PO-Revision-Date: 2010-06-13 22:40+0100\n"
"Last-Translator: Lorenzo Milesi <maxxer at yetopen.it>\n"
"Language-Team: Italian <tp at lists.linux.it>\n"
"MIME-Version: 1.0\n"
@@ -15,13 +15,44 @@ msgstr ""
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
+#: ../data/desktop-files/f-spot.desktop.in.in.h:1
+#: ../data/desktop-files/f-spot-import.desktop.in.in.h:1
+#: ../data/desktop-files/f-spot-view.desktop.in.in.h:1
+#: ../src/ui/main_window.ui.h:11
+msgid "F-Spot"
+msgstr "F-Spot"
+
+#: ../data/desktop-files/f-spot.desktop.in.in.h:2
+#: ../data/desktop-files/f-spot-import.desktop.in.in.h:2
+msgid "F-Spot Photo Manager"
+msgstr "Gestore di fotografie F-spot"
+
+#: ../data/desktop-files/f-spot.desktop.in.in.h:3
+msgid "Organize, enjoy, and share your photos"
+msgstr "Organizza, mostra e condivide le proprie fotografie"
+
+#: ../data/desktop-files/f-spot.desktop.in.in.h:4
+#: ../data/desktop-files/f-spot-import.desktop.in.in.h:4
+msgid "Photo Manager"
+msgstr "Gestore di fotografie"
+
+#: ../data/desktop-files/f-spot-import.desktop.in.in.h:3
+msgid "Import into F-Spot"
+msgstr "Importa in F-Spot"
+
+#: ../data/desktop-files/f-spot-view.desktop.in.in.h:2
+msgid "F-Spot Photo Viewer"
+msgstr "Visualizzatore di fotografie F-Spot"
+
+#: ../data/desktop-files/f-spot-view.desktop.in.in.h:3
+msgid "Photo Viewer"
+msgstr "Visualizzatore di fotografie"
+
#: ../extensions/Exporters/CDExport/CDExport.addin.xml.h:1
msgid "_CD..."
msgstr "_CD..."
#: ../extensions/Exporters/CDExport/CDExport.cs:162
-#: ../extensions/Exporters/FolderExport/FolderExport.cs:392
-#: ../src/CameraFileSelectionDialog.cs:199
msgid "Transferring Pictures"
msgstr "Trasferimento immagini"
@@ -32,48 +63,45 @@ msgstr "Trasferimento dell'immagine «{0}» su CD"
#. Note for translators: This indicates the current photo is photo {0} of {1} out of photos
#: ../extensions/Exporters/CDExport/CDExport.cs:220
-#: ../extensions/Exporters/FlickrExport/FlickrExport.cs:349
-#: ../extensions/Exporters/FolderExport/FolderExport.cs:245
+#: ../extensions/Exporters/FlickrExport/FlickrExport.cs:350
+#: ../extensions/Exporters/FolderExport/FolderExport.cs:220
#: ../extensions/Exporters/GalleryExport/GalleryExport.cs:781
-#: ../src/MainWindow.cs:637
-#: ../src/UI.Dialog/AdjustTimeDialog.cs:129
-#: ../src/UI.Dialog/ProgressDialog.cs:92
+#: ../src/MainWindow.cs:644 ../src/UI.Dialog/AdjustTimeDialog.cs:130
+#: ../src/UI.Dialog/ProgressDialog.cs:90
#, csharp-format
msgid "{0} of {1}"
msgstr "{0} di {1}"
#: ../extensions/Exporters/CDExport/CDExport.cs:233
-#: ../extensions/Exporters/FacebookExport/FacebookExport.cs:379
-#: ../extensions/Exporters/FlickrExport/FlickrExport.cs:379
-#: ../extensions/Exporters/FolderExport/FolderExport.cs:285
+#: ../extensions/Exporters/FacebookExport/FacebookExport.cs:377
+#: ../extensions/Exporters/FlickrExport/FlickrExport.cs:380
#: ../extensions/Exporters/GalleryExport/GalleryExport.cs:806
-#: ../extensions/Exporters/PicasaWebExport/PicasaWebExport.cs:704
+#: ../extensions/Exporters/PicasaWebExport/PicasaWebExport.cs:705
#: ../extensions/Exporters/SmugMugExport/SmugMugExport.cs:607
msgid "Done Sending Photos"
msgstr "Invio foto completato"
#: ../extensions/Exporters/CDExport/CDExport.cs:235
-#: ../extensions/Exporters/FolderExport/FolderExport.cs:287
msgid "Transfer Complete"
msgstr "Trasferimento completato"
#: ../extensions/Exporters/CDExport/CDExport.cs:242
-#: ../extensions/Exporters/FolderExport/FolderExport.cs:292
msgid "Error While Transferring"
msgstr "Errore durante il trasferimento"
#: ../extensions/Exporters/CDExport/CDExport.cs:250
-#: ../extensions/Exporters/FolderExport/FolderExport.cs:311
+#: ../extensions/Exporters/FolderExport/FolderExport.cs:278
msgid "Error Transferring"
msgstr "Errore nel trasferimento"
#: ../extensions/Exporters/CDExport/CDExport.cs:263
msgid "copying..."
-msgstr "copia in corso..."
+msgstr "copia in corso"
#: ../extensions/Exporters/CDExport/CDExport.ui.h:1
msgid "<b><i>There is some previously scheduled items to write</i></b>"
-msgstr "<b><i>C'è un elemento precedentemente schedulato da scrivere</i></b>"
+msgstr ""
+"<b><i>Ci sono degli elementi precedentemente schedulati da scrivere</i></b>"
#: ../extensions/Exporters/CDExport/CDExport.ui.h:2
msgid "<b>Photos to Burn</b>"
@@ -83,7 +111,7 @@ msgstr "<b>Fotografie da masterizzare</b>"
#: ../extensions/Exporters/FolderExport/FolderExport.glade.h:7
#: ../extensions/Exporters/GalleryExport/GalleryExport.glade.h:7
#: ../extensions/Exporters/SmugMugExport/SmugMugExport.glade.h:5
-#: ../src/f-spot.glade.h:28
+#: ../src/ui/mail_dialog.ui.h:10
msgid "Autorotate"
msgstr "Rotazione automatica"
@@ -92,7 +120,7 @@ msgid "Create CD"
msgstr "Crea CD"
#: ../extensions/Exporters/CDExport/CDExport.ui.h:5
-#: ../src/Widgets/InfoBox.cs:220
+#: ../src/Widgets/InfoBox.cs:222
msgid "Size"
msgstr "Dimensione"
@@ -110,8 +138,8 @@ msgstr "_Esplora file pianificati in precedenza"
#: ../extensions/Exporters/GalleryExport/GalleryExport.glade.h:15
#: ../extensions/Exporters/PicasaWebExport/PicasaWebExport.glade.h:20
#: ../extensions/Exporters/SmugMugExport/SmugMugExport.glade.h:12
-#: ../extensions/Exporters/TabbloExport/TabbloExport.glade.h:9
-#: ../src/f-spot.glade.h:95
+#: ../extensions/Exporters/TabbloExport/ui/TabbloExport.ui.h:9
+#: ../src/f-spot.glade.h:41
msgid "_Export"
msgstr "_Esporta"
@@ -125,47 +153,46 @@ msgstr "F_acebook..."
#: ../extensions/Exporters/FacebookExport/FacebookExport.cs:99
msgid "Waiting for authorization"
-msgstr "Attesa autorizzazione"
+msgstr "In attesa di autorizzazione"
#: ../extensions/Exporters/FacebookExport/FacebookExport.cs:100
msgid ""
-"F-Spot will now launch your browser so that you can enable the permission you just selected.\n"
+"F-Spot will now launch your browser so that you can enable the permission "
+"you just selected.\n"
"\n"
-"Once you are directed by Facebook to return to this application, click \"Ok\" below."
+"Once you are directed by Facebook to return to this application, click \"Ok"
+"\" below."
msgstr ""
"Verrà ora lanciato il browser per abilitare i permessi selezionati.\n"
"\n"
"Quando verrà proposto di tornare a questa applicazione, fare clic su «OK»."
-#: ../extensions/Exporters/FacebookExport/FacebookExport.cs:279
+#: ../extensions/Exporters/FacebookExport/FacebookExport.cs:281
msgid "Too many images to export"
msgstr "Troppe immagini da esportare"
-#: ../extensions/Exporters/FacebookExport/FacebookExport.cs:280
-msgid "Facebook only permits 60 photographs per album. Please refine your selection and try again."
-msgstr "Facebook permette di avere solo 60 fotografie per album. Riformulare la selezione e ritentare."
+#: ../extensions/Exporters/FacebookExport/FacebookExport.cs:282
+#, csharp-format
+msgid ""
+"Facebook only permits {0} photographs per album. Please refine your "
+"selection and try again."
+msgstr ""
+"Facebook permette di avere solo {0} fotografie per album. Riformulare la "
+"selezione e ritentare."
#: ../extensions/Exporters/FacebookExport/FacebookExport.cs:297
-#: ../extensions/Exporters/FlickrExport/FlickrExport.cs:475
-#: ../extensions/Exporters/GalleryExport/GalleryExport.cs:730
-#: ../extensions/Exporters/PicasaWebExport/PicasaWebExport.cs:597
-#: ../extensions/Exporters/SmugMugExport/SmugMugExport.cs:522
-msgid "Uploading Pictures"
-msgstr "Caricamento immagini"
-
-#: ../extensions/Exporters/FacebookExport/FacebookExport.cs:318
msgid "Album must have a name"
msgstr "L'album deve avere un nome"
-#: ../extensions/Exporters/FacebookExport/FacebookExport.cs:319
+#: ../extensions/Exporters/FacebookExport/FacebookExport.cs:298
msgid "Please name your album or choose an existing album."
msgstr "Dare un nome all'album o sceglierne uno esistente."
-#: ../extensions/Exporters/FacebookExport/FacebookExport.cs:333
+#: ../extensions/Exporters/FacebookExport/FacebookExport.cs:312
msgid "Creating a new album failed"
msgstr "Creazione nuovo album non riuscita"
-#: ../extensions/Exporters/FacebookExport/FacebookExport.cs:334
+#: ../extensions/Exporters/FacebookExport/FacebookExport.cs:313
#, csharp-format
msgid ""
"An error occurred creating a new album.\n"
@@ -176,80 +203,98 @@ msgstr ""
"\n"
"{0}"
-#: ../extensions/Exporters/FacebookExport/FacebookExport.cs:356
-#: ../extensions/Exporters/PicasaWebExport/PicasaWebExport.cs:660
+#: ../extensions/Exporters/FacebookExport/FacebookExport.cs:326
+#: ../extensions/Exporters/FlickrExport/FlickrExport.cs:476
+#: ../extensions/Exporters/GalleryExport/GalleryExport.cs:730
+#: ../extensions/Exporters/PicasaWebExport/PicasaWebExport.cs:598
+#: ../extensions/Exporters/SmugMugExport/SmugMugExport.cs:522
+msgid "Uploading Pictures"
+msgstr "Caricamento immagini"
+
+#: ../extensions/Exporters/FacebookExport/FacebookExport.cs:354
+#: ../extensions/Exporters/PicasaWebExport/PicasaWebExport.cs:661
#: ../extensions/Exporters/SmugMugExport/SmugMugExport.cs:565
#, csharp-format
msgid "Uploading picture \"{0}\" ({1} of {2})"
msgstr "Caricamento immagine «{0}» ({1} di {2})"
-#: ../extensions/Exporters/FacebookExport/FacebookExport.cs:370
+#: ../extensions/Exporters/FacebookExport/FacebookExport.cs:368
#, csharp-format
msgid "Error Uploading To Facebook: {0}"
msgstr "Errore nel caricare su Facebook: {0}"
-#: ../extensions/Exporters/FacebookExport/FacebookExport.cs:371
-#: ../extensions/Exporters/FlickrExport/FlickrExport.cs:370
-#: ../extensions/Exporters/FolderExport/FolderExport.cs:250
+#: ../extensions/Exporters/FacebookExport/FacebookExport.cs:369
+#: ../extensions/Exporters/FlickrExport/FlickrExport.cs:371
+#: ../extensions/Exporters/FolderExport/FolderExport.cs:226
#: ../extensions/Exporters/GalleryExport/GalleryExport.cs:797
-#: ../extensions/Exporters/PicasaWebExport/PicasaWebExport.cs:693
+#: ../extensions/Exporters/PicasaWebExport/PicasaWebExport.cs:694
#: ../extensions/Exporters/SmugMugExport/SmugMugExport.cs:596
#: ../extensions/Exporters/TabbloExport/TabbloExport.cs:319
-#: ../lib/mono-addins/Mono.Addins.Gui/gtk-gui/Mono.Addins.Gui.ErrorDialog.cs:40
msgid "Error"
msgstr "Errore"
-#: ../extensions/Exporters/FacebookExport/FacebookExport.cs:381
-#: ../extensions/Exporters/FlickrExport/FlickrExport.cs:381
+#: ../extensions/Exporters/FacebookExport/FacebookExport.cs:379
+#: ../extensions/Exporters/FlickrExport/FlickrExport.cs:382
#: ../extensions/Exporters/GalleryExport/GalleryExport.cs:808
-#: ../extensions/Exporters/PicasaWebExport/PicasaWebExport.cs:706
+#: ../extensions/Exporters/PicasaWebExport/PicasaWebExport.cs:707
#: ../extensions/Exporters/SmugMugExport/SmugMugExport.cs:609
msgid "Upload Complete"
msgstr "Caricamento completato"
-#: ../extensions/Exporters/FacebookExport/FacebookExportDialog.cs:211
-msgid "Waiting for authentication"
-msgstr "Attesa autenticazione"
+#: ../extensions/Exporters/FacebookExport/FacebookExport.cs:382
+msgid "Visit F-Spot group on Facebook"
+msgstr "Visita il gruppo F-Spot su Facebook"
#: ../extensions/Exporters/FacebookExport/FacebookExportDialog.cs:212
+msgid "Waiting for authentication"
+msgstr "In attesa di autenticazione"
+
+#: ../extensions/Exporters/FacebookExport/FacebookExportDialog.cs:213
msgid ""
"F-Spot will now launch your browser so that you can log into Facebook.\n"
"\n"
-"Once you are directed by Facebook to return to this application, click \"Ok\" below. F-Spot will cache your session in gnome-keyring, if possible, and re-use it on future Facebook exports."
+"Once you are directed by Facebook to return to this application, click \"Ok"
+"\" below. F-Spot will cache your session in gnome-keyring, if possible, and "
+"re-use it on future Facebook exports."
msgstr ""
"F-Spot lancerà ora il browser per effettuare l'accesso a Facebook.\n"
"\n"
-"Quando Facebook dirà di tornare a questa applicazione, premere «OK». F-Spot memorizzerà la sessione nel portachiavi di Gnome, se possibile, e la riutilizzerà per gli accessi futuri."
+"Quando Facebook dirà di tornare a questa applicazione, premere «OK». F-Spot "
+"memorizzerà la sessione nel portachiavi di Gnome, se possibile, e la "
+"riutilizzerà per gli accessi futuri."
-#: ../extensions/Exporters/FacebookExport/FacebookExportDialog.cs:217
+#: ../extensions/Exporters/FacebookExport/FacebookExportDialog.cs:218
msgid "Authenticating..."
msgstr "Autenticazione..."
-#: ../extensions/Exporters/FacebookExport/FacebookExportDialog.cs:227
+#: ../extensions/Exporters/FacebookExport/FacebookExportDialog.cs:228
msgid "Error logging into Facebook"
msgstr "Errore nell'accesso a Facebook"
-#: ../extensions/Exporters/FacebookExport/FacebookExportDialog.cs:228
-msgid "There was a problem logging into Facebook. Check your credentials and try again."
-msgstr "Problema nell'accesso a Facebook. Controllare le credenziali e riprovare."
+#: ../extensions/Exporters/FacebookExport/FacebookExportDialog.cs:229
+msgid ""
+"There was a problem logging into Facebook. Check your credentials and try "
+"again."
+msgstr ""
+"Problema nell'accesso a Facebook. Controllare le credenziali e riprovare."
-#: ../extensions/Exporters/FacebookExport/FacebookExportDialog.cs:237
+#: ../extensions/Exporters/FacebookExport/FacebookExportDialog.cs:238
msgid "Authorizing Session"
msgstr "Autorizzazione sessione"
-#: ../extensions/Exporters/FacebookExport/FacebookExportDialog.cs:246
+#: ../extensions/Exporters/FacebookExport/FacebookExportDialog.cs:247
msgid "Session established, fetching user info..."
msgstr "Connessione stabilita, scaricamento informazioni utente..."
-#: ../extensions/Exporters/FacebookExport/FacebookExportDialog.cs:252
+#: ../extensions/Exporters/FacebookExport/FacebookExportDialog.cs:253
msgid "Session established, fetching friend list..."
-msgstr "Connessione stabilita, scaricamento lista amici..."
+msgstr "Connessione stabilita, scaricamento elenco amici..."
-#: ../extensions/Exporters/FacebookExport/FacebookExportDialog.cs:262
+#: ../extensions/Exporters/FacebookExport/FacebookExportDialog.cs:263
msgid "Session established, fetching friend details..."
msgstr "Connessione stabilita, scaricamento dettagli amici..."
-#: ../extensions/Exporters/FacebookExport/FacebookExportDialog.cs:272
+#: ../extensions/Exporters/FacebookExport/FacebookExportDialog.cs:275
msgid "Session established, fetching photo albums..."
msgstr "Connessione stabilita, scaricamento album foto..."
@@ -257,24 +302,24 @@ msgstr "Connessione stabilita, scaricamento album foto..."
#: ../extensions/Exporters/FacebookExport/FacebookExportDialog.cs:285
#, csharp-format
msgid "{0} {1} is logged into Facebook"
-msgstr "Accesso effettuato su Facebook, {0} {1}"
+msgstr "Accesso effettuato su Facebook come {0} {1}"
-#: ../extensions/Exporters/FacebookExport/FacebookExportDialog.cs:291
+#: ../extensions/Exporters/FacebookExport/FacebookExportDialog.cs:294
msgid "Facebook Connection Error"
msgstr "Errore di connessione a Facebook"
-#: ../extensions/Exporters/FacebookExport/FacebookExportDialog.cs:292
+#: ../extensions/Exporters/FacebookExport/FacebookExportDialog.cs:295
#, csharp-format
msgid ""
"There was an error when downloading your information from Facebook.\n"
"\n"
"Facebook said: {0}"
msgstr ""
-"C'è stato un errore nello scaricare le informazioni da Facebook.\n"
+"Si è verificato un errore nello scaricare le informazioni da Facebook.\n"
"\n"
"Risposta: {0}"
-#: ../extensions/Exporters/FacebookExport/FacebookExportDialog.cs:321
+#: ../extensions/Exporters/FacebookExport/FacebookExportDialog.cs:324
msgid "You are not logged in."
msgstr "Accesso non effettuato."
@@ -284,7 +329,7 @@ msgstr "Conferma automatica foto"
#: ../extensions/Exporters/FacebookExport/FacebookExport.ui.h:2
msgid "Caption"
-msgstr "Titolo:"
+msgstr "Titolo"
#: ../extensions/Exporters/FacebookExport/FacebookExport.ui.h:3
msgid "Create a new album"
@@ -313,11 +358,10 @@ msgstr "Accesso"
#: ../extensions/Exporters/FacebookExport/FacebookExport.ui.h:9
msgid "Logout"
-msgstr "Logout"
+msgstr "Uscita"
#: ../extensions/Exporters/FacebookExport/FacebookExport.ui.h:10
-#: ../lib/mono-addins/Mono.Addins.Gui/Mono.Addins.Gui/ManageSitesDialog.cs:51
-#: ../src/Widgets/InfoBox.cs:211
+#: ../src/Widgets/InfoBox.cs:213
msgid "Name"
msgstr "Nome"
@@ -331,7 +375,7 @@ msgstr "Permessi:"
#: ../extensions/Exporters/FacebookExport/FacebookExport.ui.h:13
msgid "Stay Connected"
-msgstr "Mantenere connessione"
+msgstr "Mantieni connessione"
#: ../extensions/Exporters/FacebookExport/FacebookExport.ui.h:14
msgid "Use an existing album"
@@ -353,76 +397,82 @@ msgstr "_Flickr..."
msgid "_Zooomr..."
msgstr "_Zooomr..."
-#: ../extensions/Exporters/FlickrExport/FlickrExport.cs:105
+#: ../extensions/Exporters/FlickrExport/FlickrExport.cs:106
#: ../extensions/Exporters/FlickrExport/FlickrExport.glade.h:5
msgid "Authorize"
msgstr "Autorizza"
-#: ../extensions/Exporters/FlickrExport/FlickrExport.cs:111
+#: ../extensions/Exporters/FlickrExport/FlickrExport.cs:112
#, csharp-format
-msgid "Return to this window after you have finished the authorization process on {0} and click the \"Complete Authorization\" button below"
-msgstr "Ritornare a questa finestra dopo aver completato il processo di autorizzazione su {0} e fare clic sul pulsante «Completa autorizzazione»"
+msgid ""
+"Return to this window after you have finished the authorization process on "
+"{0} and click the \"Complete Authorization\" button below"
+msgstr ""
+"Ritornare a questa finestra dopo aver completato il processo di "
+"autorizzazione su {0} e fare clic sul pulsante «Completa autorizzazione»"
-#: ../extensions/Exporters/FlickrExport/FlickrExport.cs:112
+#: ../extensions/Exporters/FlickrExport/FlickrExport.cs:113
msgid "Complete Authorization"
msgstr "Completa autorizzazione"
-#: ../extensions/Exporters/FlickrExport/FlickrExport.cs:117
+#: ../extensions/Exporters/FlickrExport/FlickrExport.cs:118
#, csharp-format
msgid "Logging into {0}"
-msgstr "Login a {0}"
+msgstr "Accesso a {0}"
-#: ../extensions/Exporters/FlickrExport/FlickrExport.cs:118
+#: ../extensions/Exporters/FlickrExport/FlickrExport.cs:119
msgid "Checking credentials..."
msgstr "Controllo credenziali..."
-#: ../extensions/Exporters/FlickrExport/FlickrExport.cs:125
+#: ../extensions/Exporters/FlickrExport/FlickrExport.cs:126
#, csharp-format
msgid "Welcome {0} you are connected to {1}"
-msgstr "Benvenuto {0}, sei collegato a {1}"
+msgstr "Accesso effettuato su {1} come {0}"
-#: ../extensions/Exporters/FlickrExport/FlickrExport.cs:128
+#: ../extensions/Exporters/FlickrExport/FlickrExport.cs:129
#, csharp-format
msgid "Sign in as a different user"
-msgstr "Entra come altro utente"
+msgstr "Accedi come altro utente"
-#: ../extensions/Exporters/FlickrExport/FlickrExport.cs:133
+#: ../extensions/Exporters/FlickrExport/FlickrExport.cs:134
#, csharp-format
msgid "Used {0} of your allowed {1} monthly quota"
msgstr "Utilizzati {0} della quota mensile di {1}"
-#: ../extensions/Exporters/FlickrExport/FlickrExport.cs:297
+#: ../extensions/Exporters/FlickrExport/FlickrExport.cs:298
msgid "Unable to log on"
msgstr "Impossibile collegarsi"
-#: ../extensions/Exporters/FlickrExport/FlickrExport.cs:317
+#: ../extensions/Exporters/FlickrExport/FlickrExport.cs:318
#, csharp-format
msgid "Waiting for response {0} of {1}"
msgstr "In attesa della risposta {0} di {1}"
-#: ../extensions/Exporters/FlickrExport/FlickrExport.cs:344
-#: ../extensions/Exporters/FolderExport/FolderExport.cs:242
+#: ../extensions/Exporters/FlickrExport/FlickrExport.cs:345
#: ../extensions/Exporters/GalleryExport/GalleryExport.cs:777
#, csharp-format
msgid "Uploading picture \"{0}\""
msgstr "Caricamento immagine «{0}»"
-#: ../extensions/Exporters/FlickrExport/FlickrExport.cs:367
+#: ../extensions/Exporters/FlickrExport/FlickrExport.cs:368
#, csharp-format
msgid "Error Uploading To {0}: {1}"
msgstr "Errore nel caricare su {0}: {1}"
-#: ../extensions/Exporters/FlickrExport/FlickrExport.cs:454
+#: ../extensions/Exporters/FlickrExport/FlickrExport.cs:455
msgid "Unable to log on."
msgstr "Impossibile collegarsi."
-#: ../extensions/Exporters/FlickrExport/FlickrExport.cs:455
+#: ../extensions/Exporters/FlickrExport/FlickrExport.cs:456
#, csharp-format
-msgid "F-Spot was unable to log on to {0}. Make sure you have given the authentication using {0} web browser interface."
-msgstr "F-Spot non è stato in grado di collegarsi con {0}. Assicurarsi di aver eseguito l'autenticazione utilizzando l'interfaccia web di {0}."
+msgid ""
+"F-Spot was unable to log on to {0}. Make sure you have given the "
+"authentication using {0} web browser interface."
+msgstr ""
+"F-Spot non è stato in grado di collegarsi con {0}. Assicurarsi di aver "
+"eseguito l'autenticazione utilizzando l'interfaccia web di {0}."
#: ../extensions/Exporters/FlickrExport/FlickrExport.glade.h:1
-#: ../src/f-spot.glade.h:8
msgid "<b>Account</b>"
msgstr "<b>Account</b>"
@@ -431,9 +481,8 @@ msgstr "<b>Account</b>"
#: ../extensions/Exporters/GalleryExport/GalleryExport.glade.h:3
#: ../extensions/Exporters/PicasaWebExport/PicasaWebExport.glade.h:2
#: ../extensions/Exporters/SmugMugExport/SmugMugExport.glade.h:2
-#: ../extensions/Exporters/TabbloExport/TabbloExport.glade.h:2
-#: ../src/f-spot.glade.h:14
-#: ../src/UI.Dialog/ui/AdjustTimeDialog.ui.h:5
+#: ../extensions/Exporters/TabbloExport/ui/TabbloExport.ui.h:2
+#: ../src/UI.Dialog/ui/AdjustTimeDialog.ui.h:5 ../src/ui/mail_dialog.ui.h:6
msgid "<b>Photos</b>"
msgstr "<b>Fotografie</b>"
@@ -442,7 +491,7 @@ msgstr "<b>Fotografie</b>"
#: ../extensions/Exporters/GalleryExport/GalleryExport.glade.h:4
#: ../extensions/Exporters/PicasaWebExport/PicasaWebExport.glade.h:4
#: ../extensions/Exporters/SmugMugExport/SmugMugExport.glade.h:4
-#: ../src/f-spot.glade.h:16
+#: ../src/ui/mail_dialog.ui.h:8
msgid "<b>Style</b>"
msgstr "<b>Stile</b>"
@@ -454,8 +503,7 @@ msgstr "<b>Permessi di visualizzazione</b>"
#: ../extensions/Exporters/GalleryExport/GalleryExport.glade.h:8
#: ../extensions/Exporters/PicasaWebExport/PicasaWebExport.glade.h:9
#: ../extensions/Exporters/SmugMugExport/SmugMugExport.glade.h:6
-#: ../extensions/Exporters/TabbloExport/TabbloExport.glade.h:5
-#: ../src/f-spot.glade.h:43
+#: ../extensions/Exporters/TabbloExport/ui/TabbloExport.ui.h:5
msgid "Export"
msgstr "Esporta"
@@ -464,12 +512,18 @@ msgid "Export tag _hierarchy"
msgstr "Esporta _gerarchia etichette"
#: ../extensions/Exporters/FlickrExport/FlickrExport.glade.h:8
-msgid "F-Spot needs your authorization in order to upload photos to your {0} account. Press the \"Authorize\" button to open a web browser and give F-Spot the authorization. "
-msgstr "F-Spot ha bisogno dell'autorizzazione per poter caricare le foto sull'account {0}. Premere il pulsante «Autorizza» per aprire il browser web e autorizzare F-Spot."
+msgid ""
+"F-Spot needs your authorization in order to upload photos to your {0} "
+"account. Press the \"Authorize\" button to open a web browser and give F-"
+"Spot the authorization. "
+msgstr ""
+"F-Spot ha bisogno dell'autorizzazione per poter caricare le foto "
+"sull'account {0}. Premere il pulsante «Autorizza» per aprire il browser web e "
+"autorizzare F-Spot."
#: ../extensions/Exporters/FlickrExport/FlickrExport.glade.h:9
msgid "Ignore _top level tags"
-msgstr "Ignora etichette di _primo livello"
+msgstr "Ignorare le etichette di _primo livello"
#: ../extensions/Exporters/FlickrExport/FlickrExport.glade.h:10
msgid "Private"
@@ -493,7 +547,6 @@ msgstr "Visibile agli amici"
#: ../extensions/Exporters/FlickrExport/FlickrExport.glade.h:16
#: ../extensions/Exporters/PicasaWebExport/PicasaWebExport.glade.h:21
-#: ../src/f-spot.glade.h:96
msgid "_Export tags"
msgstr "_Esporta etichette"
@@ -502,20 +555,18 @@ msgstr "_Esporta etichette"
#: ../extensions/Exporters/GalleryExport/GalleryExport.glade.h:21
#: ../extensions/Exporters/PicasaWebExport/PicasaWebExport.glade.h:25
#: ../extensions/Exporters/SmugMugExport/SmugMugExport.glade.h:15
-#: ../src/f-spot.glade.h:109
msgid "_Resize to: "
msgstr "_Ridimensiona a: "
#: ../extensions/Exporters/FlickrExport/FlickrExport.glade.h:18
msgid "_View photos in browser when done uploading"
-msgstr "_Apri l'album nel browser a caricamento completato"
+msgstr "_Aprire l'album nel browser a caricamento completato"
#: ../extensions/Exporters/FlickrExport/FlickrExport.glade.h:19
#: ../extensions/Exporters/FolderExport/FolderExport.glade.h:20
#: ../extensions/Exporters/GalleryExport/GalleryExport.glade.h:24
#: ../extensions/Exporters/PicasaWebExport/PicasaWebExport.glade.h:27
#: ../extensions/Exporters/SmugMugExport/SmugMugExport.glade.h:17
-#: ../src/f-spot.glade.h:125
msgid "pixels"
msgstr "pixel"
@@ -523,82 +574,98 @@ msgstr "pixel"
msgid "F_older..."
msgstr "_Cartella..."
-#: ../extensions/Exporters/FolderExport/FolderExport.cs:140
+#: ../extensions/Exporters/FolderExport/FolderExport.cs:120
msgid "Select Export Folder"
-msgstr "Selezionare cartella per l'esportazione"
+msgstr "Seleziona la cartella per l'esportazione"
-#: ../extensions/Exporters/FolderExport/FolderExport.cs:198
+#: ../extensions/Exporters/FolderExport/FolderExport.cs:173
msgid "Building Gallery"
msgstr "Generazione galleria"
-#: ../extensions/Exporters/FolderExport/FolderExport.cs:248
+#: ../extensions/Exporters/FolderExport/FolderExport.cs:217
+#, csharp-format
+msgid "Exporting \"{0}\"..."
+msgstr "Esportazione «{0}»..."
+
+#: ../extensions/Exporters/FolderExport/FolderExport.cs:224
+#, csharp-format
+msgid "Error Copying \"{0}\" to Gallery:{2}{1}"
+msgstr "Errore nel copiare «{0}» su Gallery:{2}{1}"
+
+#: ../extensions/Exporters/FolderExport/FolderExport.cs:250
#, csharp-format
-msgid "Error uploading picture \"{0}\" to Gallery:{2}{1}"
-msgstr "Errore nel caricare l'immagine «{0}» su Gallery:{2}{1}"
+msgid "Transferring to \"{0}\""
+msgstr "Trasferimento su «{0}»"
-#: ../extensions/Exporters/FolderExport/FolderExport.cs:333
-msgid "Error: Error while transferring; Aborting"
-msgstr "Errore: errore durante il trasferimento; operazione interrotta"
+#: ../extensions/Exporters/FolderExport/FolderExport.cs:251
+msgid "Transferring..."
+msgstr "Trasferimento in corso"
-#: ../extensions/Exporters/FolderExport/FolderExport.cs:336
-msgid "Error: File Already Exists; Aborting"
-msgstr "Errore: il file esiste già; operazione interrotta"
+#. No need to check result here as if result is not true, an Exception will be thrown before
+#: ../extensions/Exporters/FolderExport/FolderExport.cs:256
+msgid "Export Complete."
+msgstr "Esportazione completata."
+
+#: ../extensions/Exporters/FolderExport/FolderExport.cs:258
+msgid "Exporting Photos Completed."
+msgstr "Esportazione foto completata."
+
+#: ../extensions/Exporters/FolderExport/FolderExport.cs:325
+msgid "Exporting Photos"
+msgstr "Esportazione foto"
#. Note for translators: light as clear, opposite as dark
-#: ../extensions/Exporters/FolderExport/FolderExport.cs:803
+#: ../extensions/Exporters/FolderExport/FolderExport.cs:743
msgid "Light"
msgstr "Chiaro"
-#: ../extensions/Exporters/FolderExport/FolderExport.cs:804
+#: ../extensions/Exporters/FolderExport/FolderExport.cs:744
msgid "Dark"
msgstr "Scuro"
#. Abbreviation of previous
-#: ../extensions/Exporters/FolderExport/FolderExport.cs:984
+#: ../extensions/Exporters/FolderExport/FolderExport.cs:924
msgid "Prev"
msgstr "Prec"
-#: ../extensions/Exporters/FolderExport/FolderExport.cs:986
-#: ../extensions/Exporters/FolderExport/FolderExport.cs:1227
-#: ../src/CameraFileSelectionDialog.cs:82
+#: ../extensions/Exporters/FolderExport/FolderExport.cs:926
+#: ../extensions/Exporters/FolderExport/FolderExport.cs:1167
msgid "Index"
msgstr "Indice"
#. Don't care otherwise, Tags sounds reasonable
-#: ../extensions/Exporters/FolderExport/FolderExport.cs:989
-#: ../extensions/Exporters/FolderExport/FolderExport.cs:1161
-#: ../extensions/Exporters/FolderExport/FolderExport.cs:1201
-#: ../src/MainWindow.cs:342
-#: ../src/Widgets/Sidebar.cs:64
+#: ../extensions/Exporters/FolderExport/FolderExport.cs:929
+#: ../extensions/Exporters/FolderExport/FolderExport.cs:1101
+#: ../extensions/Exporters/FolderExport/FolderExport.cs:1141
+#: ../src/MainWindow.cs:348 ../src/Widgets/Sidebar.cs:56
msgid "Tags"
msgstr "Etichette"
-#: ../extensions/Exporters/FolderExport/FolderExport.cs:992
-#: ../src/f-spot.glade.h:57
+#: ../extensions/Exporters/FolderExport/FolderExport.cs:932
#: ../src/ItemAction.cs:102
msgid "Next"
msgstr "Successiva"
-#: ../extensions/Exporters/FolderExport/FolderExport.cs:1096
+#: ../extensions/Exporters/FolderExport/FolderExport.cs:1036
msgid "Gallery generated by"
msgstr "Galleria generata da"
-#: ../extensions/Exporters/FolderExport/FolderExport.cs:1136
+#: ../extensions/Exporters/FolderExport/FolderExport.cs:1076
msgid "Show Styles"
msgstr "Mostra stili"
-#: ../extensions/Exporters/FolderExport/FolderExport.cs:1137
+#: ../extensions/Exporters/FolderExport/FolderExport.cs:1077
msgid "Hide Styles"
msgstr "Nascondi stili"
-#: ../extensions/Exporters/FolderExport/FolderExport.cs:1172
-#: ../extensions/Exporters/FolderExport/FolderExport.cs:1173
-#: ../src/ui/main_window.ui.h:24
+#: ../extensions/Exporters/FolderExport/FolderExport.cs:1112
+#: ../extensions/Exporters/FolderExport/FolderExport.cs:1113
+#: ../src/ui/main_window.ui.h:25
msgid "Tags: "
msgstr "Etichette: "
-#: ../extensions/Exporters/FolderExport/FolderExport.cs:1304
-#: ../extensions/Exporters/FolderExport/FolderExport.cs:1437
+#: ../extensions/Exporters/FolderExport/FolderExport.cs:1244
+#: ../extensions/Exporters/FolderExport/FolderExport.cs:1377
msgid "Page:"
msgstr "Pagina:"
@@ -607,7 +674,6 @@ msgid "\n"
msgstr "\n"
#: ../extensions/Exporters/FolderExport/FolderExport.glade.h:3
-#: ../src/f-spot.glade.h:11
msgid "<b>Destination</b>"
msgstr "<b>Destinazione</b>"
@@ -645,7 +711,7 @@ msgstr "Nome _galleria:"
#: ../extensions/Exporters/FolderExport/FolderExport.glade.h:15
msgid "Open _destination when done exporting"
-msgstr "_Apri la destinazione a esportazione completata"
+msgstr "_Aprire la destinazione a esportazione completata"
#: ../extensions/Exporters/FolderExport/FolderExport.glade.h:17
msgid "_Folder:"
@@ -655,11 +721,15 @@ msgstr "_Cartella:"
msgid "_Save the files only"
msgstr "_Salva solo i file"
+#: ../extensions/Exporters/GalleryExport/FormClient.cs:294
+msgid "Unhandled exception"
+msgstr "Eccezione non gestita"
+
#: ../extensions/Exporters/GalleryExport/GalleryExport.addin.xml.h:1
msgid "Web _Gallery..."
msgstr "_Galleria web..."
-#: ../extensions/Exporters/GalleryExport/GalleryExport.cs:52
+#: ../extensions/Exporters/GalleryExport/GalleryExport.cs:53
msgid ""
"Cannot connect to a Gallery for which the version is unknown.\n"
"Please check that you have Remote plugin 1.0.8 or later"
@@ -686,7 +756,8 @@ msgstr "Errore durante la connessione a Gallery"
#: ../extensions/Exporters/GalleryExport/GalleryExport.cs:441
#, csharp-format
msgid "The following error was encountered while attempting to log in: {0}"
-msgstr "È stato riscontrato il seguente errore durante il tentativo di accesso: {0}"
+msgstr ""
+"È stato riscontrato il seguente errore durante il tentativo di accesso: {0}"
#: ../extensions/Exporters/GalleryExport/GalleryExport.cs:417
msgid "A Gallery with this name already exists"
@@ -694,8 +765,12 @@ msgstr "Esiste già una galleria con questo nome"
#: ../extensions/Exporters/GalleryExport/GalleryExport.cs:418
#, csharp-format
-msgid "There is already a Gallery with the same name in your registered Galleries. Please choose a unique name."
-msgstr "Esiste già una galleria con lo stesso nome nelle gallerie registrate. Scegliere un nome unico."
+msgid ""
+"There is already a Gallery with the same name in your registered Galleries. "
+"Please choose a unique name."
+msgstr ""
+"Esiste già una galleria con lo stesso nome nelle gallerie registrate. "
+"Scegliere un nome unico."
#: ../extensions/Exporters/GalleryExport/GalleryExport.cs:528
msgid "(TopLevel)"
@@ -719,25 +794,25 @@ msgid "Error uploading picture \"{0}\" to Gallery: {1}"
msgstr "Errore nel caricare l'immagine «{0}» su Gallery: {1}"
#: ../extensions/Exporters/GalleryExport/GalleryExport.cs:824
-#: ../extensions/Exporters/PicasaWebExport/PicasaWebExport.cs:727
+#: ../extensions/Exporters/PicasaWebExport/PicasaWebExport.cs:728
#: ../extensions/Exporters/SmugMugExport/SmugMugExport.cs:630
msgid "(No Gallery)"
msgstr "(Nessuna galleria)"
#: ../extensions/Exporters/GalleryExport/GalleryExport.cs:916
-#: ../extensions/Exporters/PicasaWebExport/PicasaWebExport.cs:849
+#: ../extensions/Exporters/PicasaWebExport/PicasaWebExport.cs:850
#: ../extensions/Exporters/SmugMugExport/SmugMugExport.cs:726
msgid "(Not Connected)"
msgstr "(Non connesso)"
#: ../extensions/Exporters/GalleryExport/GalleryExport.cs:917
-#: ../extensions/Exporters/PicasaWebExport/PicasaWebExport.cs:850
+#: ../extensions/Exporters/PicasaWebExport/PicasaWebExport.cs:851
#: ../extensions/Exporters/SmugMugExport/SmugMugExport.cs:727
msgid "(No Albums)"
msgstr "(Nessun album)"
#: ../extensions/Exporters/GalleryExport/GalleryExport.cs:969
-#: ../extensions/Exporters/PicasaWebExport/PicasaWebExport.cs:915
+#: ../extensions/Exporters/PicasaWebExport/PicasaWebExport.cs:916
#: ../extensions/Exporters/SmugMugExport/SmugMugExport.cs:768
msgid "No account selected"
msgstr "Nessun account selezionato"
@@ -745,19 +820,19 @@ msgstr "Nessun account selezionato"
#: ../extensions/Exporters/GalleryExport/GalleryExport.glade.h:1
#: ../extensions/Exporters/PicasaWebExport/PicasaWebExport.glade.h:1
#: ../extensions/Exporters/SmugMugExport/SmugMugExport.glade.h:1
-#: ../src/f-spot.glade.h:9
msgid "<b>Album</b>"
msgstr "<b>Album</b>"
#: ../extensions/Exporters/GalleryExport/GalleryExport.glade.h:2
-#: ../src/f-spot.glade.h:12
msgid "<b>Gallery</b>"
msgstr "<b>Galleria</b>"
#: ../extensions/Exporters/GalleryExport/GalleryExport.glade.h:5
#: ../extensions/Exporters/PicasaWebExport/PicasaWebExport.glade.h:5
msgid "<span weight='bold' size='larger'>Error Connecting to Gallery</span>\n"
-msgstr "<span weight='bold' size='larger'>Errore durante la connessione alla galleria</span>\n"
+msgstr ""
+"<span weight='bold' size='larger'>Errore durante la connessione alla "
+"galleria</span>\n"
#: ../extensions/Exporters/GalleryExport/GalleryExport.glade.h:9
msgid "Export _titles and comments"
@@ -767,7 +842,7 @@ msgstr "E_sporta titoli e commenti"
#: ../extensions/Exporters/PicasaWebExport/PicasaWebExport.glade.h:10
#: ../extensions/Exporters/SmugMugExport/SmugMugExport.glade.h:7
msgid "Open _album in browser when done uploading"
-msgstr "Apri l'_album nel browser a caricamento completato"
+msgstr "Aprire l'_album nel browser a caricamento completato"
#: ../extensions/Exporters/GalleryExport/GalleryExport.glade.h:11
#: ../extensions/Exporters/PicasaWebExport/PicasaWebExport.glade.h:11
@@ -791,7 +866,6 @@ msgstr "_Descrizione:"
#: ../extensions/Exporters/GalleryExport/GalleryExport.glade.h:16
#: ../extensions/Exporters/PicasaWebExport/PicasaWebExport.glade.h:22
#: ../extensions/Exporters/SmugMugExport/SmugMugExport.glade.h:13
-#: ../src/f-spot.glade.h:97
msgid "_Export to Album:"
msgstr "_Esporta nell'album:"
@@ -811,9 +885,9 @@ msgstr "_Album genitore:"
#: ../extensions/Exporters/GalleryExport/GalleryExport.glade.h:20
#: ../extensions/Exporters/PicasaWebExport/PicasaWebExport.glade.h:24
#: ../extensions/Exporters/SmugMugExport/SmugMugExport.glade.h:14
-#: ../extensions/Exporters/TabbloExport/TabbloExport.glade.h:10
+#: ../extensions/Exporters/TabbloExport/ui/TabbloExport.ui.h:10
msgid "_Password:"
-msgstr "_Password:"
+msgstr "Pass_word:"
#: ../extensions/Exporters/GalleryExport/GalleryExport.glade.h:22
msgid "_Title:"
@@ -822,68 +896,73 @@ msgstr "_Titolo:"
#: ../extensions/Exporters/GalleryExport/GalleryExport.glade.h:23
#: ../extensions/Exporters/PicasaWebExport/PicasaWebExport.glade.h:26
#: ../extensions/Exporters/SmugMugExport/SmugMugExport.glade.h:16
-#: ../extensions/Exporters/TabbloExport/TabbloExport.glade.h:11
+#: ../extensions/Exporters/TabbloExport/ui/TabbloExport.ui.h:11
msgid "_Username:"
msgstr "Nome _utente:"
-#: ../extensions/Exporters/GalleryExport/GalleryRemote.cs:361
+#: ../extensions/Exporters/GalleryExport/GalleryRemote.cs:362
msgid "Error reading server response"
msgstr "Errore nella lettura della risposta dal server"
#. failed to find the response
-#: ../extensions/Exporters/GalleryExport/GalleryRemote.cs:373
+#: ../extensions/Exporters/GalleryExport/GalleryRemote.cs:374
msgid "Server returned response without Gallery content"
msgstr "Il server ha restituito una risposta senza dati di Gallery"
-#: ../extensions/Exporters/GalleryExport/GalleryRemote.cs:710
+#: ../extensions/Exporters/GalleryExport/GalleryRemote.cs:711
msgid "Error while creating new album"
msgstr "Errore durante la creazione dell'album."
-#: ../extensions/Exporters/GalleryExport/GalleryRemote.cs:711
+#: ../extensions/Exporters/GalleryExport/GalleryRemote.cs:712
#, csharp-format
msgid ""
-"The following error was encountered while attempting to perform the requested operation:\n"
+"The following error was encountered while attempting to perform the "
+"requested operation:\n"
"{0} ({1})"
msgstr ""
-"È stato riscontrato il seguente errore durante il tentativo di eseguire l'operazione richiesta:\n"
+"È stato riscontrato il seguente errore durante il tentativo di eseguire "
+"l'operazione richiesta:\n"
" {0} ({1})"
#: ../extensions/Exporters/PicasaWebExport/PicasaWebExport.addin.xml.h:1
msgid "_PicasaWeb..."
msgstr "_PicasaWeb..."
-#: ../extensions/Exporters/PicasaWebExport/PicasaWebExport.cs:441
+#: ../extensions/Exporters/PicasaWebExport/PicasaWebExport.cs:442
msgid "Error while creating Album"
msgstr "Errore durante la creazione dell'album"
-#: ../extensions/Exporters/PicasaWebExport/PicasaWebExport.cs:442
+#: ../extensions/Exporters/PicasaWebExport/PicasaWebExport.cs:443
#, csharp-format
-msgid "The following error was encountered while attempting to create an album: {0}"
-msgstr "È stato riscontrato il seguente errore durante il tentativo di creazione dell'album: {0}"
+msgid ""
+"The following error was encountered while attempting to create an album: {0}"
+msgstr ""
+"È stato riscontrato il seguente errore durante il tentativo di creazione "
+"dell'album: {0}"
# Riferito al numero di bytes
-#: ../extensions/Exporters/PicasaWebExport/PicasaWebExport.cs:620
+#: ../extensions/Exporters/PicasaWebExport/PicasaWebExport.cs:621
#, csharp-format
msgid "{0} Sent"
msgstr "{0} inviati"
-#: ../extensions/Exporters/PicasaWebExport/PicasaWebExport.cs:622
+#: ../extensions/Exporters/PicasaWebExport/PicasaWebExport.cs:623
#, csharp-format
msgid "{0} of approx. {1}"
msgstr "{0} di circa {1}"
-#: ../extensions/Exporters/PicasaWebExport/PicasaWebExport.cs:691
+#: ../extensions/Exporters/PicasaWebExport/PicasaWebExport.cs:692
#: ../extensions/Exporters/SmugMugExport/SmugMugExport.cs:594
#, csharp-format
msgid "Error Uploading To Gallery: {0}"
msgstr "Errore nel caricare nella galleria: {0}"
-#: ../extensions/Exporters/PicasaWebExport/PicasaWebExport.cs:778
+#: ../extensions/Exporters/PicasaWebExport/PicasaWebExport.cs:779
#, csharp-format
msgid "Available space: {0}, {1}% used out of {2}"
msgstr "Spazio disponibile: {0}, {1}% utilizzato su {2}"
-#: ../extensions/Exporters/PicasaWebExport/PicasaWebExport.cs:891
+#: ../extensions/Exporters/PicasaWebExport/PicasaWebExport.cs:892
#, csharp-format
msgid ""
"The selected album has a limit of {0} pictures,\n"
@@ -897,8 +976,11 @@ msgid "<b>PicasaWeb Export</b>"
msgstr "<b>Esporta su PicasaWeb</b>"
#: ../extensions/Exporters/PicasaWebExport/PicasaWebExport.glade.h:7
-msgid "<span weight='bold' size='larger'>Your Google Account is locked</span>\n"
-msgstr "<span weight='bold' size='larger'>Il proprio account Google è bloccato</span>\n"
+msgid ""
+"<span weight='bold' size='larger'>Your Google Account is locked</span>\n"
+msgstr ""
+"<span weight='bold' size='larger'>Il proprio account Google è bloccato</"
+"span>\n"
#: ../extensions/Exporters/PicasaWebExport/PicasaWebExport.glade.h:12
msgid ""
@@ -969,55 +1051,63 @@ msgstr "Caricamento completato"
msgid "Error uploading to Tabblo: "
msgstr "Errore nel caricare su Tabblo:"
-#: ../extensions/Exporters/TabbloExport/TabbloExport.glade.h:1
+#: ../extensions/Exporters/TabbloExport/ui/TabbloExport.ui.h:1
msgid "<b>F-Spot tags</b>"
msgstr "<b>Etichette di F-Spot</b>"
-#: ../extensions/Exporters/TabbloExport/TabbloExport.glade.h:3
+#: ../extensions/Exporters/TabbloExport/ui/TabbloExport.ui.h:3
msgid "<b>Tabblo account</b>"
msgstr "<b>Account Tabblo</b>"
-#: ../extensions/Exporters/TabbloExport/TabbloExport.glade.h:4
-msgid "<small><i>F-Spot tags can help you track the export status of photos. Example: Use one tag for the photos that you plan to export, and another one for those already exported. Here, you can tell F-Spot to automatically replace these tags as appropriate.</i></small>"
-msgstr "<small><i>Le etichette di F-Spot possono aiutare nel tenere traccia dello stato delle immagini. Esempio: utilizzare un'etichetta per le foto che si pensa di voler esportare e un'altra per quelle esportate. Qui è possibile indicare a F-Spot di rimpiazzare queste etichette all'occorrenza.</i></small>"
+#: ../extensions/Exporters/TabbloExport/ui/TabbloExport.ui.h:4
+msgid ""
+"<small><i>F-Spot tags can help you track the export status of photos. "
+"Example: Use one tag for the photos that you plan to export, and another one "
+"for those already exported. Here, you can tell F-Spot to automatically "
+"replace these tags as appropriate.</i></small>"
+msgstr ""
+"<small><i>Le etichette di F-Spot possono aiutare nel tenere traccia dello "
+"stato delle immagini. Esempio: utilizzare un'etichetta per le foto che si "
+"pensa di voler esportare e un'altra per quelle esportate. Qui è possibile "
+"indicare a F-Spot di rimpiazzare queste etichette all'occorrenza.</i></small>"
-#: ../extensions/Exporters/TabbloExport/TabbloExport.glade.h:6
+#: ../extensions/Exporters/TabbloExport/ui/TabbloExport.ui.h:6
msgid "Rem_ove from exported photos:"
-msgstr "_Rimuovere dalle immagini esportate:"
+msgstr "_Rimuovi dalle immagini esportate:"
-#: ../extensions/Exporters/TabbloExport/TabbloExport.glade.h:7
+#: ../extensions/Exporters/TabbloExport/ui/TabbloExport.ui.h:7
msgid "Select..."
msgstr "Seleziona..."
-#: ../extensions/Exporters/TabbloExport/TabbloExport.glade.h:8
+#: ../extensions/Exporters/TabbloExport/ui/TabbloExport.ui.h:8
msgid "_Attach to exported photos:"
msgstr "_Attaccare alle immagini esportate:"
-#: ../extensions/Exporters/TabbloExport/TrustError.glade.h:1
+#: ../extensions/Exporters/TabbloExport/ui/TrustError.ui.h:1
msgid "<b>{0}</b>."
msgstr "<b>{0}</b>."
-#: ../extensions/Exporters/TabbloExport/TrustError.glade.h:2
+#: ../extensions/Exporters/TabbloExport/ui/TrustError.ui.h:2
msgid "A trust error occured while attempting to access"
msgstr "Si è verificato un errore di affidabilità durante l'accesso"
-#: ../extensions/Exporters/TabbloExport/TrustError.glade.h:3
+#: ../extensions/Exporters/TabbloExport/ui/TrustError.ui.h:3
msgid "Abort this session"
-msgstr "Interrompe la sessione"
+msgstr "Interrompere la sessione"
-#: ../extensions/Exporters/TabbloExport/TrustError.glade.h:4
+#: ../extensions/Exporters/TabbloExport/ui/TrustError.ui.h:4
msgid "Always trust this site's certificate"
msgstr "Fidarsi sempre del certificato di questo sito"
-#: ../extensions/Exporters/TabbloExport/TrustError.glade.h:5
+#: ../extensions/Exporters/TabbloExport/ui/TrustError.ui.h:5
msgid "Do you wish to:"
msgstr "Si desidera:"
-#: ../extensions/Exporters/TabbloExport/TrustError.glade.h:6
+#: ../extensions/Exporters/TabbloExport/ui/TrustError.ui.h:6
msgid "Trust Error"
msgstr "Errore di affidabilità"
-#: ../extensions/Exporters/TabbloExport/TrustError.glade.h:7
+#: ../extensions/Exporters/TabbloExport/ui/TrustError.ui.h:7
msgid "Trust the site's certificate this once"
msgstr "Fidarsi del certificato di questo sito per questa volta"
@@ -1026,13 +1116,17 @@ msgid "Compressed fil_e..."
msgstr "Fil_e compresso..."
#: ../extensions/Exporters/ZipExport/ZipExport.cs:47
-#: ../src/Widgets/EditorPage.cs:196
+#: ../src/Widgets/EditorPage.cs:198
msgid "No selection available"
msgstr "Nessuna selezione disponibile"
#: ../extensions/Exporters/ZipExport/ZipExport.cs:48
-msgid "This tool requires an active selection. Please select one or more pictures and try again"
-msgstr "Questo strumento richiede un selezione attiva. Selezionare una o più foto e riprovare"
+msgid ""
+"This tool requires an active selection. Please select one or more pictures "
+"and try again"
+msgstr ""
+"Questo strumento richiede una selezione attiva. Selezionare una o più foto e "
+"riprovare"
#: ../extensions/Exporters/ZipExport/ZipExport.cs:64
msgid "Select export folder"
@@ -1048,7 +1142,6 @@ msgid "Preparing photo \"{0}\""
msgstr "Preparazione fotografia «{0}»"
#: ../extensions/Exporters/ZipExport/ZipExport.glade.h:1
-#: ../src/f-spot.glade.h:92
msgid "_Create"
msgstr "_Crea"
@@ -1064,9 +1157,32 @@ msgstr "_Posizione:"
msgid "_Scale:"
msgstr "_Scala:"
+#: ../extensions/Tools/HashJob/HashJob.addin.xml.h:1
+msgid "Check for Duplicates..."
+msgstr "Rileva duplicati..."
+
#: ../extensions/Tools/HashJob/HashJob.cs:53
-msgid "In order to detect duplicates on pictures you imported before 0.5.0, F-Spot needs to analyze your image collection. This is not done by default as it's time consuming. You can Start or Pause this update process using this dialog."
-msgstr "Per verificare la presenza di duplicati in fotografie importate prima della versione 0.5.0, F-Spot deve analizzare la collezione fotografica. Questa operazione non viene fatta in automatico in quanto richiede molto tempo. È possibile avviare o arrestare questo processo utilizzando questa finestra."
+msgid ""
+"In order to detect duplicates on pictures you imported before 0.5.0, F-Spot "
+"needs to analyze your image collection. This is not done by default as it's "
+"time consuming. You can Start or Pause this update process using this dialog."
+msgstr ""
+"Per verificare la presenza di duplicati in fotografie importate prima della "
+"versione 0.5.0, F-Spot deve analizzare la collezione fotografica. Questa "
+"operazione non viene fatta in automatico in quanto richiede molto tempo. È "
+"possibile avviare o arrestare questo processo utilizzando questa finestra."
+
+#: ../extensions/Tools/HashJob/HashJob.cs:59
+#, csharp-format
+msgid ""
+"You currently have {0} photos needing md5 calculation, and {1} pending jobs"
+msgstr ""
+"Ci sono attualmente {0} immagini di cui è necessario calcolare l'MD5 e {1} "
+"lavori in attesa"
+
+#: ../extensions/Tools/HashJob/HashJob.cs:75 ../src/ui/main_window.ui.h:38
+msgid "_Close"
+msgstr "_Chiudi"
#: ../extensions/Tools/HashJob/HashJob.cs:102
msgid "Processing images..."
@@ -1076,6 +1192,114 @@ msgstr "Elaborazione immagini..."
msgid "Stopped"
msgstr "Arrestato"
+#: ../extensions/Tools/LiveWebGallery/GalleryRequestHandler.cs:107
+msgid "F-Spot Gallery"
+msgstr "Galleria di F-Spot"
+
+#: ../extensions/Tools/LiveWebGallery/GalleryRequestHandler.cs:108
+msgid "The web gallery seems to be offline now"
+msgstr "La galleria web sembra disattivata in questo momento"
+
+#: ../extensions/Tools/LiveWebGallery/GalleryRequestHandler.cs:109
+msgid "Show All"
+msgstr "Mostra tutto"
+
+#: ../extensions/Tools/LiveWebGallery/GalleryRequestHandler.cs:119
+#, csharp-format
+msgid "{0} photo"
+msgid_plural "{0} photos"
+msgstr[0] "{0} fotografia"
+msgstr[1] "{0} fotografie"
+
+#: ../extensions/Tools/LiveWebGallery/GalleryRequestHandler.cs:161
+#: ../extensions/Tools/LiveWebGallery/ui/LiveWebGallery.ui.h:8
+msgid "Current View"
+msgstr "Vista corrente"
+
+#: ../extensions/Tools/LiveWebGallery/GalleryRequestHandler.cs:164
+msgid "Selected"
+msgstr "Selezionata"
+
+#: ../extensions/Tools/LiveWebGallery/LiveWebGallery.addin.xml.h:1
+msgid "Live Web Gallery"
+msgstr "Galleria web live"
+
+#: ../extensions/Tools/LiveWebGallery/LiveWebGalleryDialog.cs:89
+msgid "none"
+msgstr "nessuno"
+
+#: ../extensions/Tools/LiveWebGallery/LiveWebGalleryDialog.cs:92
+#, csharp-format
+msgid " Gallery: {0}, Photos: {1}, Last client: {3}"
+msgstr "Galleria: {0}, Foto: {1}, Ultimo client: {3}"
+
+#: ../extensions/Tools/LiveWebGallery/LiveWebGalleryDialog.cs:156
+msgid "Gallery is inactive"
+msgstr "Galleria disattivata"
+
+#: ../extensions/Tools/LiveWebGallery/ui/LiveWebGallery.ui.h:1
+msgid ""
+"<small><i>The gallery stays active until you either deactivate it or close\n"
+"F-Spot. Make sure local viewers access it bypassing HTTP proxy.</i></small>"
+msgstr ""
+"<small><i>La galleria rimarrà attiva fino a che non sarà disattivata o non "
+"venga chiuso\n"
+"F-Spot. Assicurarsi che i visitatori locali abbiano accesso bypassando il "
+"proxy HTTP.</i></small>"
+
+#: ../extensions/Tools/LiveWebGallery/ui/LiveWebGallery.ui.h:3
+msgid ""
+"<small><i>When the gallery is active, above is the URL you need to open \n"
+"on another computer to access the shared photos.</i></small>"
+msgstr ""
+"<small><i>Quando la galleria è attiva, l'URL indicato sopra è quello a cui \n"
+"le foto condivise sono disponibili accedendo da un altro computer.</i></"
+"small>"
+
+#: ../extensions/Tools/LiveWebGallery/ui/LiveWebGallery.ui.h:5
+msgid "Activates and deactivates the web gallery"
+msgstr "Attiva o disattiva la galleria web"
+
+#: ../extensions/Tools/LiveWebGallery/ui/LiveWebGallery.ui.h:6
+msgid "Allow viewers to add tags"
+msgstr "Permettere ai visitatori di aggiungere etichette"
+
+#: ../extensions/Tools/LiveWebGallery/ui/LiveWebGallery.ui.h:7
+msgid "Copy URL to clipboard"
+msgstr "Copia URL negli appunti"
+
+#: ../extensions/Tools/LiveWebGallery/ui/LiveWebGallery.ui.h:9
+msgid "F-Spot Live Web Gallery"
+msgstr "Galleria web live di F-Spot"
+
+#: ../extensions/Tools/LiveWebGallery/ui/LiveWebGallery.ui.h:10
+msgid "Gallery URL:"
+msgstr "URL galleria:"
+
+#: ../extensions/Tools/LiveWebGallery/ui/LiveWebGallery.ui.h:11
+msgid "Limit number of shared photos to"
+msgstr "Limita il numero di foto condivise a"
+
+#: ../extensions/Tools/LiveWebGallery/ui/LiveWebGallery.ui.h:12
+msgid "Options:"
+msgstr "Opzioni:"
+
+#: ../extensions/Tools/LiveWebGallery/ui/LiveWebGallery.ui.h:13
+msgid "Photos with a Tag"
+msgstr "Foto con l'etichetta"
+
+#: ../extensions/Tools/LiveWebGallery/ui/LiveWebGallery.ui.h:14
+msgid "Selected Photos"
+msgstr "Foto selezionate"
+
+#: ../extensions/Tools/LiveWebGallery/ui/LiveWebGallery.ui.h:15
+msgid "Share:"
+msgstr "Condividi:"
+
+#: ../extensions/Tools/LiveWebGallery/ui/LiveWebGallery.ui.h:16
+msgid "Views:"
+msgstr "Viste:"
+
#: ../extensions/Tools/MergeDb/MergeDb.addin.xml.h:1
msgid "Merge Db"
msgstr "Unisci database"
@@ -1096,24 +1320,36 @@ msgstr ""
"Eccezione ricevuta «{0}»."
#: ../extensions/Tools/MergeDb/MergeDb.glade.h:1
-msgid "<small><i>Choose the location of the database you want to import from</i></small>"
+msgid ""
+"<small><i>Choose the location of the database you want to import from</i></"
+"small>"
msgstr "<small><i>Scegliere il database da cui importare</i></small>"
#: ../extensions/Tools/MergeDb/MergeDb.glade.h:2
msgid ""
"<small><i>Choose what to import from the selected db.\n"
-"\"New Rolls Only\" is the smart option that will avoid re-importing photos you could have imported during a previous operation.\n"
+"\"New Rolls Only\" is the smart option that will avoid re-importing photos "
+"you could have imported during a previous operation.\n"
"\"A Single Import Roll\" let you choose which roll you want to merge back.\n"
-"\"Everything\" will import everything, creating duplicates if you already imported from that database.</i></small>"
+"\"Everything\" will import everything, creating duplicates if you already "
+"imported from that database.</i></small>"
msgstr ""
"<small><i>Selezionare cosa importare dal database selezionato.\n"
-"«Solo nuovi rullini» permette di importare le foto che non sono già state acquisite da operazioni precedenti.\n"
+"«Solo nuovi rullini» permette di importare le foto che non sono già state "
+"acquisite da operazioni precedenti.\n"
"«Un solo rullino» permette di selezionare un rullino da importare.\n"
-"«Tutto» importerà tutte le foto, creando eventualmente duplicati se ci sono già state importazioni da questo database.</i></small>"
+"«Tutto» importerà tutte le foto, creando eventualmente duplicati se ci sono "
+"già state importazioni da questo database.</i></small>"
#: ../extensions/Tools/MergeDb/MergeDb.glade.h:6
-msgid "<small><i>Copy the images locally or keep them where they are. If you chose the later, be sure that this location will stay accessible from f-spot.</i></small>"
-msgstr "<small><i>Copiare le immagini localmente o tenerle dove sono. Se si sceglie la seconda opzione, assicurarsi che la posizione sia accessibile a F-Spot.</i></small>"
+msgid ""
+"<small><i>Copy the images locally or keep them where they are. If you chose "
+"the later, be sure that this location will stay accessible from f-spot.</i></"
+"small>"
+msgstr ""
+"<small><i>Copiare le immagini localmente o tenerle dove sono. Se si sceglie "
+"la seconda opzione, assicurarsi che la posizione sia accessibile a F-Spot.</"
+"i></small>"
#: ../extensions/Tools/MergeDb/MergeDb.glade.h:7
msgid "A Single Import Roll"
@@ -1148,12 +1384,11 @@ msgid "New Rolls Only"
msgstr "Solo nuovi rullini"
#: ../extensions/Tools/MergeDb/MergeDb.glade.h:15
-#: ../src/FileImportBackend.cs:290
-#: ../src/UI.Dialog/ThreadProgressDialog.cs:51
+#: ../src/UI.Dialog/ThreadProgressDialog.cs:57
msgid "Skip"
msgstr "Salta"
-#: ../extensions/Tools/MergeDb/PickFolderDialog.cs:33
+#: ../extensions/Tools/MergeDb/PickFolderDialog.cs:34
#, csharp-format
msgid ""
"<big>The database refers to files contained in the <b>{0}</b> folder.\n"
@@ -1191,377 +1426,221 @@ msgstr "Imposta F-Spot come salvaschermo"
msgid "Screensaver Configuration"
msgstr "Configurazione salvaschermo"
-#: ../f-spot.desktop.in.in.h:1
-#: ../f-spot-import.desktop.in.in.h:1
-msgid "F-Spot Photo Manager"
-msgstr "Gestore di fotografie F-spot"
-
-#: ../f-spot.desktop.in.in.h:2
-msgid "Organize, enjoy, and share your photos"
-msgstr "Organizza, mostra e condivide le proprie fotografie"
-
-#: ../f-spot.desktop.in.in.h:3
-#: ../f-spot-import.desktop.in.in.h:3
-msgid "Photo Manager"
-msgstr "Gestore di fotografie"
-
-#: ../f-spot-import.desktop.in.in.h:2
-msgid "Import into F-Spot"
-msgstr "Importa in F-Spot"
-
-#: ../f-spot-view.desktop.in.in.h:1
-msgid "F-Spot Photo Viewer"
-msgstr "Visualizzatore di fotografie F-Spot"
-
-#: ../f-spot-view.desktop.in.in.h:2
-msgid "Photo Viewer"
-msgstr "Visualizzatore di fotografie"
-
-#: ../lib/libfspot/f-jpeg-utils.c:441
-#: ../src/RotateCommand.cs:224
-msgid "File not found"
-msgstr "File non trovato"
-
-#: ../lib/libfspot/f-jpeg-utils.c:464
-#, c-format
-msgid "Unknown transform type %d"
-msgstr "Tipo di trasformazione %d sconosciuta"
-
-#: ../lib/libfspot/f-jpeg-utils.c:472
-msgid "Operation failed"
-msgstr "Operazione non riuscita"
-
-#: ../lib/mono-addins/Mono.Addins.Gui/gtk-gui/Mono.Addins.Gui.AddinInfoDialog.cs:32
-msgid "Package"
-msgstr "Pacchetto"
-
-#: ../lib/mono-addins/Mono.Addins.Gui/gtk-gui/Mono.Addins.Gui.AddinInstallDialog.cs:110
-msgid "Extension Installation"
-msgstr "Installazione estensione"
-
-#: ../lib/mono-addins/Mono.Addins.Gui/gtk-gui/Mono.Addins.Gui.AddinInstallDialog.cs:136
-msgid "<b>Select the extensions to install and click on Next</b>"
-msgstr "<b>Selezionare le estensioni da installare e fare clic su «Avanti»</b>"
-
-#: ../lib/mono-addins/Mono.Addins.Gui/gtk-gui/Mono.Addins.Gui.AddinInstallDialog.cs:150
-msgid "Install from:"
-msgstr "Installa da:"
-
-#: ../lib/mono-addins/Mono.Addins.Gui/gtk-gui/Mono.Addins.Gui.AddinInstallDialog.cs:179
-#: ../lib/mono-addins/Mono.Addins.Gui/gtk-gui/Mono.Addins.Gui.AddinManagerDialog.cs:180
-msgid "_Repositories..."
-msgstr "_Repository..."
-
-#: ../lib/mono-addins/Mono.Addins.Gui/gtk-gui/Mono.Addins.Gui.AddinInstallDialog.cs:220
-msgid "Show all packages"
-msgstr "Mostra tutti i pacchetti"
-
-#: ../lib/mono-addins/Mono.Addins.Gui/gtk-gui/Mono.Addins.Gui.AddinInstallDialog.cs:221
-msgid "Show new versions only"
-msgstr "Mostra solo le nuove versioni"
-
-#: ../lib/mono-addins/Mono.Addins.Gui/gtk-gui/Mono.Addins.Gui.AddinInstallDialog.cs:222
-msgid "Show updates only"
-msgstr "Mostra solo gli aggiornamenti"
-
-#: ../lib/mono-addins/Mono.Addins.Gui/gtk-gui/Mono.Addins.Gui.AddinInstallDialog.cs:247
-msgid "_Unselect All"
-msgstr "_Deseleziona tutto"
-
-#: ../lib/mono-addins/Mono.Addins.Gui/gtk-gui/Mono.Addins.Gui.AddinInstallDialog.cs:259
-#: ../src/ui/main_window.ui.h:18
-msgid "Select _All"
-msgstr "Selezion_a tutto"
-
-#: ../lib/mono-addins/Mono.Addins.Gui/gtk-gui/Mono.Addins.Gui.AddinInstallDialog.cs:334
-msgid "label124"
-msgstr "label124"
-
-#: ../lib/mono-addins/Mono.Addins.Gui/gtk-gui/Mono.Addins.Gui.AddinInstallDialog.cs:346
-msgid "Overall Progress:"
-msgstr "Avanzamento complessivo:"
-
-#: ../lib/mono-addins/Mono.Addins.Gui/gtk-gui/Mono.Addins.Gui.AddinInstallDialog.cs:374
-msgid "Downloading extensions..."
-msgstr "Scaricamento estensioni..."
-
-#: ../lib/mono-addins/Mono.Addins.Gui/gtk-gui/Mono.Addins.Gui.AddinInstallerDialog.cs:36
-#: ../lib/mono-addins/Mono.Addins.Gui/gtk-gui/Mono.Addins.Gui.AddinManagerDialog.cs:58
-msgid "Extension Manager"
-msgstr "Gestore estensioni"
-
-#: ../lib/mono-addins/Mono.Addins.Gui/gtk-gui/Mono.Addins.Gui.AddinInstallerDialog.cs:54
-msgid "Additional extensions are required to perform this operation."
-msgstr "Sono richieste estensioni aggiuntive per eseguire questa operazione."
-
-#: ../lib/mono-addins/Mono.Addins.Gui/gtk-gui/Mono.Addins.Gui.AddinInstallerDialog.cs:64
-msgid "The following extensions will be installed:"
-msgstr "Le seguenti estensioni saranno installate:"
-
-#: ../lib/mono-addins/Mono.Addins.Gui/gtk-gui/Mono.Addins.Gui.AddinManagerDialog.cs:90
-msgid "<big><b>Extension Manager</b></big>"
-msgstr "<big><b>Gestore estensioni</b></big>"
-
-#: ../lib/mono-addins/Mono.Addins.Gui/gtk-gui/Mono.Addins.Gui.AddinManagerDialog.cs:110
-msgid "The following extensions are currently installed:"
-msgstr "Le seguenti estensioni sono attualmente installate:"
-
-#: ../lib/mono-addins/Mono.Addins.Gui/gtk-gui/Mono.Addins.Gui.AddinManagerDialog.cs:165
-msgid "_Install Extensions..."
-msgstr "_Installa estensioni..."
-
-#: ../lib/mono-addins/Mono.Addins.Gui/gtk-gui/Mono.Addins.Gui.AddinManagerDialog.cs:210
-msgid "_Uninstall..."
-msgstr "_Disinstalla..."
-
-#: ../lib/mono-addins/Mono.Addins.Gui/gtk-gui/Mono.Addins.Gui.AddinManagerDialog.cs:236
-msgid "Enable"
-msgstr "Abilita"
-
-#: ../lib/mono-addins/Mono.Addins.Gui/gtk-gui/Mono.Addins.Gui.AddinManagerDialog.cs:262
-msgid "Disable"
-msgstr "Disabilita"
-
-#: ../lib/mono-addins/Mono.Addins.Gui/gtk-gui/Mono.Addins.Gui.ErrorDialog.cs:111
-msgid "Details"
-msgstr "Dettagli"
-
-#: ../lib/mono-addins/Mono.Addins.Gui/gtk-gui/Mono.Addins.Gui.ManageSitesDialog.cs:34
-msgid "Extension Repository Management"
-msgstr "Gestione repository delle estensioni"
-
-#: ../lib/mono-addins/Mono.Addins.Gui/gtk-gui/Mono.Addins.Gui.NewSiteDialog.cs:52
-msgid "Add New Repository"
-msgstr "Aggiungi nuovo repository"
-
-#: ../lib/mono-addins/Mono.Addins.Gui/gtk-gui/Mono.Addins.Gui.NewSiteDialog.cs:70
-msgid "Select the location of the repository you want to register:"
-msgstr "Selezionare la posizione del repository da registrare:"
-
-#. Container child vbox89.Gtk.Box+BoxChild
-#: ../lib/mono-addins/Mono.Addins.Gui/gtk-gui/Mono.Addins.Gui.NewSiteDialog.cs:77
-msgid "Register an on-line repository"
-msgstr "Registra un repository on-line"
-
-#: ../lib/mono-addins/Mono.Addins.Gui/gtk-gui/Mono.Addins.Gui.NewSiteDialog.cs:106
-msgid "Url:"
-msgstr "Url:"
-
-#. Container child vbox89.Gtk.Box+BoxChild
-#: ../lib/mono-addins/Mono.Addins.Gui/gtk-gui/Mono.Addins.Gui.NewSiteDialog.cs:127
-msgid "Register a local repository"
-msgstr "Registra un repository locale"
-
-#: ../lib/mono-addins/Mono.Addins.Gui/gtk-gui/Mono.Addins.Gui.NewSiteDialog.cs:155
-msgid "Path:"
-msgstr "Percorso:"
+#: ../f-spot.schemas.in.h:1
+msgid "Display of transparent parts."
+msgstr "Visualizzazione delle parti trasparenti."
-#: ../lib/mono-addins/Mono.Addins.Gui/gtk-gui/Mono.Addins.Gui.NewSiteDialog.cs:179
-msgid "Browse..."
-msgstr "Esplora..."
+#: ../f-spot.schemas.in.h:2
+msgid "Enable this to allow interpolation on zoomed images."
+msgstr "Abilitare per permettere l'interpolazione sulle immagini ingrandite."
-#: ../lib/mono-addins/Mono.Addins.Gui/Mono.Addins.Gui/AddinInfoDialog.cs:62
-msgid "Version:"
-msgstr "Versione:"
+#: ../f-spot.schemas.in.h:3
+msgid "Height of the import dialog."
+msgstr "Altezza della finestra di importazione."
-#: ../lib/mono-addins/Mono.Addins.Gui/Mono.Addins.Gui/AddinInfoDialog.cs:65
-msgid "Author:"
-msgstr "Autore:"
+#: ../f-spot.schemas.in.h:4
+msgid "Height of the main window."
+msgstr "Altezza della finestra principale."
-#: ../lib/mono-addins/Mono.Addins.Gui/Mono.Addins.Gui/AddinInfoDialog.cs:68
-msgid "Copyright:"
-msgstr "Copyright:"
+#: ../f-spot.schemas.in.h:5
+msgid "Height of the photo viewer window."
+msgstr "Altezza della foto nella finestra di visualizzazione foto."
-#: ../lib/mono-addins/Mono.Addins.Gui/Mono.Addins.Gui/AddinInfoDialog.cs:71
-msgid "Extension Dependencies:"
-msgstr "Dipendenze estensione:"
+#: ../f-spot.schemas.in.h:6
+msgid ""
+"If the 'transparency' option is set, the color specified in this option will "
+"be used as the transparent color when viewing images."
+msgstr ""
+"Se l'opzione «trasparenza» è impostata, il colore specificato in questa "
+"opzione verrà usato come colore di trasparenza in visualizzazione immagini."
-#: ../lib/mono-addins/Mono.Addins.Gui/Mono.Addins.Gui/AddinInstallDialog.cs:97
-msgid "All registered repositories"
-msgstr "Tutti i repository registrati"
+#: ../f-spot.schemas.in.h:7
+msgid "Interpolate image on zoom."
+msgstr "Interpolazione immagine all'ingrandimento."
-#: ../lib/mono-addins/Mono.Addins.Gui/Mono.Addins.Gui/AddinInstallDialog.cs:184
-msgid "Are you sure you want to cancel the installation?"
-msgstr "Annullare veramente l'installazione?"
+#: ../f-spot.schemas.in.h:8
+msgid "Maximize the main window."
+msgstr "Massimizza la finestra principale."
-#: ../lib/mono-addins/Mono.Addins.Gui/Mono.Addins.Gui/AddinInstallDialog.cs:308
-msgid "The following packages will be uninstalled:"
-msgstr "I seguenti pacchetti saranno disinstallati:"
+#: ../f-spot.schemas.in.h:9
+msgid "Maximize the photo viewer window."
+msgstr "Massimizza la foto nella finestra di visualizzazione."
-#: ../lib/mono-addins/Mono.Addins.Gui/Mono.Addins.Gui/AddinInstallDialog.cs:313
-msgid "There are other extensions that depend on the previous ones which will also be uninstalled:"
-msgstr "Saranno disinstallate anche altre estensioni che dipendono da quelle precedenti:"
+#: ../f-spot.schemas.in.h:10
+msgid "Path to custom gtkrc for theming F-Spot."
+msgstr ""
+"Percorso ad un file gtkrc personalizzato per cambiare il tema di F-Spot."
-#: ../lib/mono-addins/Mono.Addins.Gui/Mono.Addins.Gui/AddinInstallDialog.cs:384
-msgid "The selected extensions can't be installed because there are dependency conflicts."
-msgstr "Le estensioni selezionate non possono essere installate perché ci sono conflitti nelle dipendenze."
+#: ../f-spot.schemas.in.h:11
+msgid "Show dates in the thumbnail view."
+msgstr "Mostra le date nella visualizzazione miniature."
-#: ../lib/mono-addins/Mono.Addins.Gui/Mono.Addins.Gui/AddinInstallDialog.cs:398
-msgid "The following packages will be installed:"
-msgstr "I seguenti pacchetti saranno installati:"
+#: ../f-spot.schemas.in.h:12
+msgid "Show ratings in the thumbnail view."
+msgstr "Mostra le valutazioni nella visualizzazione miniature."
-#: ../lib/mono-addins/Mono.Addins.Gui/Mono.Addins.Gui/AddinInstallDialog.cs:402
-msgid " (in user directory)"
-msgstr " (nella directory utente)"
+#: ../f-spot.schemas.in.h:13
+msgid "Show tags in the thumbnail view."
+msgstr "Mostra le etichette nella visualizzazione miniature."
-#: ../lib/mono-addins/Mono.Addins.Gui/Mono.Addins.Gui/AddinInstallDialog.cs:408
-msgid "The following packages need to be uninstalled:"
-msgstr "È necessario disinstallare i seguenti pacchetti:"
+#: ../f-spot.schemas.in.h:14
+msgid "Show the filename in the viewer window."
+msgstr "Mostra il nome file nella finestra di visualizzazione."
-#: ../lib/mono-addins/Mono.Addins.Gui/Mono.Addins.Gui/AddinInstallDialog.cs:416
-msgid "The following dependencies could not be resolved:"
-msgstr "Impossibile risolvere le seguenti dipendenze:"
+#: ../f-spot.schemas.in.h:15
+msgid "Show the filmstrip in the main window."
+msgstr "Mostra la barra miniature nella finestra principale."
-#: ../lib/mono-addins/Mono.Addins.Gui/Mono.Addins.Gui/AddinInstallDialog.cs:441
-msgid "The installation has been successfully completed."
-msgstr "L'installazione è stata completata con successo."
+#: ../f-spot.schemas.in.h:16
+msgid "Show the sidebar in the main window."
+msgstr "Mostra la barra laterale nella finestra principale."
-#: ../lib/mono-addins/Mono.Addins.Gui/Mono.Addins.Gui/AddinInstallDialog.cs:442
-msgid "The installation failed!"
-msgstr "Installazione non riuscita!"
+#: ../f-spot.schemas.in.h:17
+msgid "Show the timeline in the main window."
+msgstr "Mostra la linea temporale nella finestra principale."
-#: ../lib/mono-addins/Mono.Addins.Gui/Mono.Addins.Gui/AddinInstallDialog.cs:443
-msgid "The installation has completed with warnings."
-msgstr "L'installazione è stata completata con degli avvisi."
+#: ../f-spot.schemas.in.h:18
+msgid "Show the toolbar in the main window."
+msgstr "Mostra la barra degli strumenti nella finestra principale."
-#: ../lib/mono-addins/Mono.Addins.Gui/Mono.Addins.Gui/AddinInstallDialog.cs:446
-msgid "The uninstallation has been successfully completed."
-msgstr "La disinstallazione è stata completata con successo."
+#: ../f-spot.schemas.in.h:19
+msgid "Show the toolbar in the photo viewer window."
+msgstr ""
+"Mostra la barra degli strumenti nella finestra di visualizzazione foto."
-#: ../lib/mono-addins/Mono.Addins.Gui/Mono.Addins.Gui/AddinInstallDialog.cs:447
-msgid "The uninstallation failed!"
-msgstr "La disinstallazione non è riuscita!"
+#: ../f-spot.schemas.in.h:20
+msgid "Size of the tag icons shown in the sidebar."
+msgstr "Dimensione delle icone delle etichette nella barra laterale."
-#: ../lib/mono-addins/Mono.Addins.Gui/Mono.Addins.Gui/AddinInstallDialog.cs:448
-msgid "The uninstallation has completed with warnings."
-msgstr "La disinstallazione è stata completata con degli avvisi."
+#: ../f-spot.schemas.in.h:21
+msgid "The X position to use for the main window."
+msgstr "Posizione X della finestra principale."
-#: ../lib/mono-addins/Mono.Addins.Gui/Mono.Addins.Gui/AddinInstallDialog.cs:616
-msgid "Repository"
-msgstr "Repository"
+#: ../f-spot.schemas.in.h:22
+msgid "The X position to use for the photo viewer window."
+msgstr "Posizione X della finestra di visualizzazione foto."
-#: ../lib/mono-addins/Mono.Addins.Gui/Mono.Addins.Gui/AddinInstaller.cs:16
-msgid "Installation cancelled"
-msgstr "Installazione annullata"
+#: ../f-spot.schemas.in.h:23
+msgid "The Y position to use for the main window."
+msgstr "Posizione Y della finestra principale."
-#: ../lib/mono-addins/Mono.Addins.Gui/Mono.Addins.Gui/AddinInstallerDialog.cs:159
-msgid "Some of the required extensions were not found"
-msgstr "Alcune delle estensioni richieste non sono state trovate"
+#: ../f-spot.schemas.in.h:24
+msgid "The Y position to use for the photo viewer window."
+msgstr "Posizione Y della finestra di visualizzazione foto."
-#: ../lib/mono-addins/Mono.Addins.Gui/Mono.Addins.Gui/AddinInstallerDialog.cs:171
-msgid "Installation failed"
-msgstr "Installazione non riuscita"
+#: ../f-spot.schemas.in.h:25
+msgid "The color to use for transparent parts."
+msgstr "Colore da usare per le parti trasparenti."
-#: ../lib/mono-addins/Mono.Addins.Gui/Mono.Addins.Gui/AddinTreeWidget.cs:91
-msgid "Extension"
-msgstr "Estensione"
+#: ../f-spot.schemas.in.h:26
+msgid "The height dimension to use for the import dialog."
+msgstr "Altezza della finestra di importazione."
-#: ../lib/mono-addins/Mono.Addins.Gui/Mono.Addins.Gui/AddinTreeWidget.cs:112
-#: ../src/Widgets/InfoBox.cs:214
-msgid "Version"
-msgstr "Versione"
+#: ../f-spot.schemas.in.h:27
+msgid "The height dimension to use for the main window."
+msgstr "Altezza della finestra principale."
-#: ../lib/mono-addins/Mono.Addins.Gui/Mono.Addins.Gui/AddinTreeWidget.cs:168
-msgid "Other"
-msgstr "Altri"
+#: ../f-spot.schemas.in.h:28
+msgid "The height dimension to use for the photo viewer window."
+msgstr "Altezza della finestra di visualizzazione foto."
-#: ../lib/mono-addins/Mono.Addins.Gui/Mono.Addins.Gui/ManageSitesDialog.cs:52
-msgid "Url"
-msgstr "Url"
+#: ../f-spot.schemas.in.h:29
+msgid "The orientation of the filmstrip, if shown."
+msgstr "Orientamento della barra delle miniature, se visualizzata."
-#: ../lib/mono-addins/Mono.Addins.Gui/Mono.Addins.Gui/Services.cs:61
-#: ../lib/mono-addins/Mono.Addins.Gui/Mono.Addins.Gui/Services.cs:70
-#, csharp-format
-msgid "Exception occurred: {0}"
-msgstr "Eccezione occorsa: {0}"
+#: ../f-spot.schemas.in.h:30
+msgid "The orientation of the filmstrip."
+msgstr "Orientamento della barra delle miniature."
-#: ../lib/mono-addins/Mono.Addins/Mono.Addins/AddinSessionService.cs:154
-msgid "Disabled extensions can't be loaded."
-msgstr "Le estensioni disabilitate non possono essere caricate."
+#: ../f-spot.schemas.in.h:31
+msgid "The size (width) of the sidebar in the main window."
+msgstr "Largehzza della barra laterale nella finestra principale."
-#: ../lib/mono-addins/Mono.Addins/Mono.Addins/AddinSessionService.cs:179
-#, csharp-format
-msgid "Loading {0} extension"
-msgstr "Caricamento dell'estensione {0}"
+#: ../f-spot.schemas.in.h:32
+msgid "The size of the sidebar in the main window."
+msgstr "Dimensione della barra laterale nella finestra principale."
-#: ../lib/mono-addins/Mono.Addins/Mono.Addins/AddinSessionService.cs:265
-#, csharp-format
-msgid "The required extension '{0}' is disabled."
-msgstr "L'estensione richiesta «{0}» è disabilitata."
+#: ../f-spot.schemas.in.h:33
+msgid "The width dimension to use for the import dialog."
+msgstr "Larghezza della finestra di importazione."
-#: ../lib/mono-addins/Mono.Addins/Mono.Addins/AddinSessionService.cs:267
-#, csharp-format
-msgid "The required extension '{0}' is not installed."
-msgstr "L'estensione richiesta «{0}» non è installata."
+#: ../f-spot.schemas.in.h:34
+msgid "The width dimension to use for the main window."
+msgstr "Larghezza della finestra principale."
-#: ../lib/mono-addins/Mono.Addins/Mono.Addins.Description/AssemblyDependency.cs:79
-#, csharp-format
-msgid "(provided by {0})"
-msgstr "(fornito da {0})"
+#: ../f-spot.schemas.in.h:35
+msgid "The width dimension to use for the photo viewer window."
+msgstr "Larghezza della finestra di visualizzazione immagini."
-#: ../src/CameraFileSelectionDialog.cs:76
-msgid "Preview"
-msgstr "Anteprima"
+#: ../f-spot.schemas.in.h:36
+msgid "Use the current photo's filename as the viewer window's title."
+msgstr ""
+"Utilizzare il nome file della foto corrente come titolo della finestra."
-#: ../src/CameraFileSelectionDialog.cs:78
-msgid "Path"
-msgstr "Percorso"
+#: ../f-spot.schemas.in.h:37
+msgid "Width of the import dialog."
+msgstr "Larghezza della finestra di importazione."
-#: ../src/CameraFileSelectionDialog.cs:80
-#: ../src/f-spot.glade.h:46
-msgid "File"
-msgstr "File"
+#: ../f-spot.schemas.in.h:38
+msgid "Width of the main window."
+msgstr "Larghezza della finestra principale."
-#: ../src/CameraFileSelectionDialog.cs:102
-msgid "Select Tag"
-msgstr "Seleziona etichetta"
+#: ../f-spot.schemas.in.h:39
+msgid "Width of the photo viewer window."
+msgstr "Larghezza della finestra di visualizzazione immagini."
-#: ../src/CameraFileSelectionDialog.cs:138
-msgid "Downloading Previews"
-msgstr "Scaricamento anteprime"
+#: ../f-spot.schemas.in.h:40
+msgid "Width of the preview image pane in the import dialog."
+msgstr ""
+"Larghezza del pannello di anteprima delle immagini nella finestra di "
+"importazione."
-#: ../src/CameraFileSelectionDialog.cs:148
-#, csharp-format
-msgid "Downloading Preview of {0}"
-msgstr "Scaricamento anteprima di {0}"
+#: ../f-spot.schemas.in.h:41
+msgid "X position of the main window."
+msgstr "Posizione X della finestra principale."
-#: ../src/CameraFileSelectionDialog.cs:220
-#, csharp-format
-msgid "Copying file {0} of {1}"
-msgstr "Copia del file {0} di {1}"
+#: ../f-spot.schemas.in.h:42
+msgid "X position of the photo viewer window."
+msgstr "Posizione X della finestra di visualizzazione foto."
-#: ../src/CameraFileSelectionDialog.cs:235
-msgid "Error transferring file"
-msgstr "Errore nel trasferire il file"
+#: ../f-spot.schemas.in.h:43
+msgid "Y position of the main window."
+msgstr "Posizione Y della finestra principale."
-#: ../src/CameraFileSelectionDialog.cs:244
-msgid "Done Copying Files"
-msgstr "Copia dei file completata"
+#: ../f-spot.schemas.in.h:44
+msgid "Y position of the photo viewer window."
+msgstr "Posizione Y della finestra di visualizzazione foto."
-#: ../src/CameraFileSelectionDialog.cs:246
-msgid "Download Complete"
-msgstr "Scaricamento completato"
+#: ../f-spot.schemas.in.h:45
+msgid ""
+"You can choose how to display transparent parts in images. This option has "
+"no effect on photos but setting this value to CHECK_PATTERN or CUSTOM_COLOR "
+"could be useful when viewing icons or other artwork with transparent parts."
+msgstr ""
+"Si può scegliere come visualizzare le parti trasparenti nelle immagini. "
+"Questa opzione non ha effetto sulle foto, ma impostandola come tipo di "
+"scacchiera o colore personalizzato può risultare utile nella visualizzazione "
+"di icone o altre immagini con parti trasparenti."
-#: ../src/CameraFileSelectionDialog.cs:271
-#, csharp-format
-msgid "Transferring \"{0}\" from camera"
-msgstr "Trasferimento di «{0}» dalla fotocamera"
+#: ../lib/libfspot/f-jpeg-utils.c:441 ../src/RotateCommand.cs:211
+msgid "File not found"
+msgstr "File non trovato"
-#: ../src/CameraSelectionDialog.cs:29
-#: ../src/Widgets/InfoBox.cs:230
-msgid "Camera"
-msgstr "Fotocamera"
+#: ../lib/libfspot/f-jpeg-utils.c:464
+#, c-format
+msgid "Unknown transform type %d"
+msgstr "Tipo di trasformazione %d sconosciuta"
-#: ../src/CameraSelectionDialog.cs:30
-msgid "Port"
-msgstr "Porta"
+#: ../lib/libfspot/f-jpeg-utils.c:472
+msgid "Operation failed"
+msgstr "Operazione non riuscita"
-#: ../src/Core.cs:203
+#: ../src/Core/App.cs:274
#, csharp-format
msgid "No photos matching {0} found"
msgstr "Nessuna foto corrispondente a {0}"
-#: ../src/Core.cs:204
+#: ../src/Core/App.cs:275
#, csharp-format
msgid ""
"The tag \"{0}\" is not applied to any photos. Try adding\n"
@@ -1572,11 +1651,11 @@ msgstr ""
"aggiungere l'etichetta a qualche fotografia o a selezionare un'etichetta\n"
"diversa dal dialogo preferenze di F-Spot."
-#: ../src/Core.cs:208
+#: ../src/Core/App.cs:279
msgid "Search returned no results"
msgstr "La ricerca non ha prodotto risultati"
-#: ../src/Core.cs:209
+#: ../src/Core/App.cs:280
msgid ""
"The tag F-Spot is looking for does not exist. Try\n"
"selecting a different tag in the F-Spot preference\n"
@@ -1587,39 +1666,27 @@ msgstr ""
"di F-Spot."
#. Note for translators: Reparented is a picture becoming a version of another one
-#: ../src/Core/Photo.cs:473
+#: ../src/Core/Photo.cs:350
msgid "Reparented"
msgstr "Riassegnata"
-#: ../src/Core/Photo.cs:473
-#, csharp-format
-msgid "Reparented ({0})"
-msgstr "Riassegnata ({0})"
-
-#: ../src/Core/Photo.cs:492
+#: ../src/Core/Photo.cs:367
#, csharp-format
msgid "Modified"
msgid_plural "Modified ({0})"
msgstr[0] "Modificata"
msgstr[1] "Modificate ({0})"
-#: ../src/Core/Photo.cs:516
+#: ../src/Core/Photo.cs:390
#, csharp-format
msgid "Modified in {1}"
msgstr "Modificata in {1}"
-#: ../src/Core/Photo.cs:516
+#: ../src/Core/Photo.cs:390
#, csharp-format
msgid "Modified in {1} ({0})"
msgstr "Modificata in {1} ({0})"
-#. Note that the original version is never stored in the photo_versions table in the
-#. database.
-#: ../src/Core/Photo.cs:671
-#: ../src/f-spot.glade.h:61
-msgid "Original"
-msgstr "Originale"
-
#: ../src/Editors/AutoStretchEditor.cs:17
msgid "Auto Color"
msgstr "Colore automatico"
@@ -1633,44 +1700,44 @@ msgid "Adjust"
msgstr "Regola"
# (NdT) le misure sottostanti sono state convertite in cm
-#: ../src/Editors/CropEditor.cs:35
+#: ../src/Editors/CropEditor.cs:36
msgid "4 x 3 (Book)"
msgstr "11 × 15 cm (Libro) (4×3 in)"
-#: ../src/Editors/CropEditor.cs:36
+#: ../src/Editors/CropEditor.cs:37
msgid "4 x 6 (Postcard)"
msgstr "11 × 30 cm (Cartolina) (4×6 in)"
-#: ../src/Editors/CropEditor.cs:37
+#: ../src/Editors/CropEditor.cs:38
msgid "5 x 7 (L, 2L)"
msgstr "13 × 18 cm (L, 2L) (5×7 in)"
-#: ../src/Editors/CropEditor.cs:38
+#: ../src/Editors/CropEditor.cs:39
msgid "8 x 10"
msgstr "20 × 25 cm (8×10 in)"
-#: ../src/Editors/CropEditor.cs:39
+#: ../src/Editors/CropEditor.cs:40
msgid "Square"
msgstr "Quadrato"
-#: ../src/Editors/CropEditor.cs:42
+#: ../src/Editors/CropEditor.cs:43
msgid "Crop"
msgstr "Ritaglia"
-#: ../src/Editors/CropEditor.cs:73
+#: ../src/Editors/CropEditor.cs:74
msgid "Select the area that needs cropping."
msgstr "Selezionare un'area da ritagliare."
-#: ../src/Editors/CropEditor.cs:98
+#: ../src/Editors/CropEditor.cs:99
msgid "No Constraint"
msgstr "Nessun vincolo"
# (NdT) blocco della selezione (proporzione)
-#: ../src/Editors/CropEditor.cs:99
+#: ../src/Editors/CropEditor.cs:100
msgid "Same as photo"
msgstr "Come foto"
-#: ../src/Editors/CropEditor.cs:104
+#: ../src/Editors/CropEditor.cs:105
msgid "Custom Ratios..."
msgstr "Proporzioni personalizzate..."
@@ -1694,36 +1761,22 @@ msgstr "Selezionare gli occhi che si desidera correggere."
msgid "Sepia Tone"
msgstr "Tonalità seppia"
-#: ../src/Editors/SoftFocusEditor.cs:28
+#: ../src/Editors/SoftFocusEditor.cs:32
msgid "Soft Focus"
msgstr "Sfocatura leggera"
-#: ../src/Editors/TiltEditor.cs:28
+#: ../src/Editors/TiltEditor.cs:30
msgid "Straighten"
msgstr "Raddrizza"
-#: ../src/FileImportBackend.cs:288
-msgid "Import error"
-msgstr "Errore di importazione"
-
-#: ../src/FileImportBackend.cs:289
-#, csharp-format
-msgid "Error importing {0}{2}{2}{1}"
-msgstr "Errore nell'importare {0}{2}{2}{1}"
-
-#: ../src/Filters/ResizeFilter.cs:70
-#: ../src/Filters/SharpFilter.cs:52
+#: ../src/Filters/ResizeFilter.cs:70 ../src/Filters/SharpFilter.cs:52
#, csharp-format
msgid "No way to save files of type \"{0}\""
msgstr "Non c'è modo di salvare file del tipo «{0}»"
-#: ../src/FormClient.cs:295
-msgid "Unhandled exception"
-msgstr "Eccezione non gestita"
-
#: ../src/FSpot.addin.xml.h:1
-msgid "Copy Photo Locat_ion"
-msgstr "Copia _posizione della fotografia"
+msgid "Copy Photo"
+msgstr "Copia foto"
#: ../src/FSpot.addin.xml.h:2
msgid "Export to"
@@ -1733,22 +1786,17 @@ msgstr "Esporta su"
msgid "Open _With"
msgstr "Apri _con"
-#: ../src/FSpot.addin.xml.h:4
-#: ../src/ui/main_window.ui.h:15
+#: ../src/FSpot.addin.xml.h:4 ../src/ui/main_window.ui.h:16
msgid "Rem_ove Tag"
msgstr "Ri_muovi etichetta"
-#: ../src/FSpot.addin.xml.h:5
-#: ../src/f-spot.glade.h:68
-#: ../src/SingleView.cs:453
-#: ../src/ui/main_window.ui.h:16
+#: ../src/FSpot.addin.xml.h:5 ../src/f-spot.glade.h:24
+#: ../src/SingleView.cs:423 ../src/ui/main_window.ui.h:17
msgid "Rotate _Left"
msgstr "Ruota a _sinistra"
-#: ../src/FSpot.addin.xml.h:6
-#: ../src/f-spot.glade.h:69
-#: ../src/SingleView.cs:454
-#: ../src/ui/main_window.ui.h:17
+#: ../src/FSpot.addin.xml.h:6 ../src/f-spot.glade.h:25
+#: ../src/SingleView.cs:424 ../src/ui/main_window.ui.h:18
msgid "Rotate _Right"
msgstr "Ruota a _destra"
@@ -1756,442 +1804,237 @@ msgstr "Ruota a _destra"
msgid "Tools"
msgstr "Strumenti"
-#: ../src/FSpot.addin.xml.h:8
-#: ../src/ui/main_window.ui.h:32
-msgid "_Attach Tag"
-msgstr "_Attacca etichetta"
-
-#: ../src/FSpot.addin.xml.h:9
-#: ../src/ui/main_window.ui.h:41
+#: ../src/FSpot.addin.xml.h:8 ../src/ui/main_window.ui.h:42
msgid "_Delete From Drive"
msgstr "_Elimina dal disco"
-#: ../src/FSpot.addin.xml.h:10
-#: ../src/ui/main_window.ui.h:59
+#: ../src/FSpot.addin.xml.h:9 ../src/ui/main_window.ui.h:61
msgid "_Remove From Catalog"
msgstr "_Rimuovi dal catalogo"
#: ../src/f-spot.glade.h:1
-msgid " "
-msgstr " "
-
-#: ../src/f-spot.glade.h:2
-msgid "1024 px"
-msgstr "1024 px"
-
-#: ../src/f-spot.glade.h:3
-msgid "320 px"
-msgstr "320 px"
-
-#: ../src/f-spot.glade.h:4
-msgid "480 px"
-msgstr "480 px"
-
-#: ../src/f-spot.glade.h:5
-msgid "640 px"
-msgstr "640 px"
-
-#: ../src/f-spot.glade.h:6
-msgid "800 px"
-msgstr "800 px"
-
-#: ../src/f-spot.glade.h:7
-msgid "<b></b>"
-msgstr "<b></b>"
-
-#: ../src/f-spot.glade.h:10
msgid "<b>Co_rrections</b>"
msgstr "<b>Co_rrezioni</b>"
-#: ../src/f-spot.glade.h:13
+#: ../src/f-spot.glade.h:2
msgid "<b>Image Interpolation</b>"
msgstr "<b>Interpolazione immagine</b>"
-#: ../src/f-spot.glade.h:15
-msgid "<b>Size</b>"
-msgstr "<b>Dimensione</b>"
-
-#: ../src/f-spot.glade.h:17
-msgid "<b>Summary</b>"
-msgstr "<b>Sommario</b>"
-
-#: ../src/f-spot.glade.h:18
+#: ../src/f-spot.glade.h:3
msgid "<b>Transparent Parts</b>"
msgstr "<b>Parti trasparenti</b>"
-#: ../src/f-spot.glade.h:19
+#: ../src/f-spot.glade.h:4
msgid "<b>View all pictures imported</b>"
msgstr "<b>Visualizza tutte le immagini importate</b>"
-#: ../src/f-spot.glade.h:20
+#: ../src/f-spot.glade.h:5
msgid "<b>_White Balance</b>"
msgstr "<b>Bilanciamento del _bianco</b>"
-#: ../src/f-spot.glade.h:21
-msgid "<small><i>Enable this to allow interpolation on zoomed images. You shouldn't disable this for viewing photos, but disabling the interpolation could be usefull in icon design.</i></small>"
-msgstr "<small><i>Abilitare questa opzione per permettere l'interpolazione su immagini all'ingrandimento. Non conviene disabilitare questa opzione per visualizzare le foto, ma disabilitare l'interpolazione può risultare utile per la progettazione di icone.</i></small>"
+#: ../src/f-spot.glade.h:6
+msgid ""
+"<small><i>Enable this to allow interpolation on zoomed images. You shouldn't "
+"disable this for viewing photos, but disabling the interpolation could be "
+"usefull in icon design.</i></small>"
+msgstr ""
+"<small><i>Abilitare questa opzione per permettere l'interpolazione su "
+"immagini all'ingrandimento. Non conviene disabilitare questa opzione per "
+"visualizzare le foto, ma disabilitare l'interpolazione può risultare utile "
+"per la progettazione di icone.</i></small>"
-#: ../src/f-spot.glade.h:22
-msgid "<small><i>You can choose how to display transparent parts in images. This option has no effect on photos, but setting this as check pattern or custom color could be usefull when viewing icons or other artworks with transparent parts.</i></small>"
-msgstr "<small><i>Si può scegliere come visualizzare le parti trasparenti nelle immagini. Questa opzione non ha effetto sulle foto, ma impostandola come tipo di scacchiera o colore personalizzato può risultare utile nella visualizzazione di icone o altre immagini con parti trasparenti.</i></small>"
+#: ../src/f-spot.glade.h:7
+msgid ""
+"<small><i>You can choose how to display transparent parts in images. This "
+"option has no effect on photos, but setting this as check pattern or custom "
+"color could be usefull when viewing icons or other artworks with transparent "
+"parts.</i></small>"
+msgstr ""
+"<small><i>Si può scegliere come visualizzare le parti trasparenti nelle "
+"immagini. Questa opzione non ha effetto sulle foto, ma impostandola come "
+"tipo di scacchiera o colore personalizzato può risultare utile nella "
+"visualizzazione di icone o altre immagini con parti trasparenti.</i></small>"
-#: ../src/f-spot.glade.h:23
+#: ../src/f-spot.glade.h:8
msgid "As _background"
msgstr "Come s_fondo"
-#: ../src/f-spot.glade.h:24
+#: ../src/f-spot.glade.h:9
msgid "As _custom color: "
msgstr "Come _colore personalizzato: "
-#: ../src/f-spot.glade.h:25
+#: ../src/f-spot.glade.h:10
msgid "As check _pattern"
msgstr "Come _scacchiera"
-#: ../src/f-spot.glade.h:26
-msgid "Attach Tags:"
-msgstr "Attacca etichette:"
-
-#: ../src/f-spot.glade.h:27
-msgid "Attach tag:"
-msgstr "Attacca etichetta:"
-
-#: ../src/f-spot.glade.h:29
-msgid "CD"
-msgstr "CD"
-
-#: ../src/f-spot.glade.h:30
+#: ../src/f-spot.glade.h:11
msgid "C_ontrast:"
msgstr "C_ontrasto:"
-#: ../src/f-spot.glade.h:31
-msgid "Camera Selection"
-msgstr "Selezione fotocamera"
-
-#: ../src/f-spot.glade.h:32
-msgid "Copy files to the Photos folder"
-msgstr "Copia i file nella cartella delle foto"
-
-#: ../src/f-spot.glade.h:33
-msgid "Create Mail"
-msgstr "Crea email"
+#: ../src/f-spot.glade.h:12
+msgid "C_reate"
+msgstr "_Crea"
-#: ../src/f-spot.glade.h:34
+#: ../src/f-spot.glade.h:13
msgid "Create _icon for this tag when first used"
msgstr "Crea un'_icona per questa etichetta al primo utilizzo"
-#: ../src/f-spot.glade.h:35
-msgid "Create a mail with the selected photos (possibly resized) attached"
-msgstr "Crea una email con le fotografie selezionate (eventualmente ridimensionate) in allegato"
-
-#: ../src/f-spot.glade.h:36
-msgid "Detect duplicates"
-msgstr "Rileva duplicati"
-
-#: ../src/f-spot.glade.h:37
+#: ../src/f-spot.glade.h:14
msgid "Display File _Names"
msgstr "Visualizza _nomi file"
-#: ../src/f-spot.glade.h:38
+#: ../src/f-spot.glade.h:15
msgid "Display only those photos that were imported in specified Rolls."
msgstr "Visualizza solo le fotografie importate nei rullini specificati."
-#: ../src/f-spot.glade.h:39
-msgid "Do not send a mail"
-msgstr "Non inviare email"
-
-#: ../src/f-spot.glade.h:40
-msgid "E-_Mail:"
-msgstr "E_mail:"
-
-#: ../src/f-spot.glade.h:41
-msgid "E_xport titles and comments"
-msgstr "E_sporta titoli e commenti"
-
-#: ../src/f-spot.glade.h:42
-msgid "Estimated new size"
-msgstr "Nuova dimensione stimata"
-
-#: ../src/f-spot.glade.h:44
-msgid "Extra large"
-msgstr "Molto grande"
-
-#: ../src/f-spot.glade.h:45
+#: ../src/f-spot.glade.h:16
msgid "F-Spot View"
msgstr "Visualizzatore F-Spot"
-#: ../src/f-spot.glade.h:47
+#: ../src/f-spot.glade.h:17
msgid "Filter on selected rolls"
msgstr "Filtra sui rullini selezionati"
-#: ../src/f-spot.glade.h:48
-msgid "G_allery:"
-msgstr "G_alleria:"
-
-#: ../src/f-spot.glade.h:49
-msgid "Gallery"
-msgstr "Galleria"
-
-#: ../src/f-spot.glade.h:50
-#: ../src/ImportCommand.cs:547
-#: ../src/MainWindow.cs:267
-msgid "Import"
-msgstr "Importa"
-
-#. Translators: this string means 'source of import'
-#: ../src/f-spot.glade.h:52
-msgid "Import Source:"
-msgstr "Sorgente di importazione:"
-
-#: ../src/f-spot.glade.h:53
-msgid "Include subfolders"
-msgstr "Includi sottocartelle"
-
-#: ../src/f-spot.glade.h:54
-msgid "Large"
-msgstr "Grande"
-
-#: ../src/f-spot.glade.h:55
+#: ../src/f-spot.glade.h:18
msgid "Manage your custom selection ratios"
msgstr "Gestisci proporzioni personalizzate"
-#: ../src/f-spot.glade.h:56
-msgid "Medium"
-msgstr "Medie"
-
-#: ../src/f-spot.glade.h:58
+#: ../src/f-spot.glade.h:19
msgid "Number of photos in selected rolls:"
msgstr "Numero di foto nei rullini selezionati:"
-#: ../src/f-spot.glade.h:59
-msgid "Number of pictures"
-msgstr "Numero di immagini"
-
-#: ../src/f-spot.glade.h:60
+#: ../src/f-spot.glade.h:20
msgid "Open _Folder..."
msgstr "Apri _cartella..."
-#: ../src/f-spot.glade.h:62
-msgid "Original size (possible very large file size)"
-msgstr "Dimensione originale (potrebbero essere file molto grandi)"
-
-#: ../src/f-spot.glade.h:63
-#: ../src/UI.Dialog/ui/EditTagDialog.ui.h:4
+#: ../src/f-spot.glade.h:21 ../src/UI.Dialog/ui/EditTagDialog.ui.h:4
msgid "P_arent Tag:"
msgstr "Etichett_a genitore:"
-#: ../src/f-spot.glade.h:64
-msgid "Pause"
-msgstr "Pausa"
-
-#: ../src/f-spot.glade.h:65
+#: ../src/f-spot.glade.h:22
msgid "Preferences"
msgstr "Preferenze"
-#: ../src/f-spot.glade.h:66
-#: ../src/ItemAction.cs:123
-msgid "Previous"
-msgstr "Precedente"
-
-#: ../src/f-spot.glade.h:67
+#: ../src/f-spot.glade.h:23
msgid "Repair"
msgstr "Ripara"
-#: ../src/f-spot.glade.h:70
-msgid "Select Photos to Copy From Camera..."
-msgstr "Seleziona le foto da copiare dalla fotocamera..."
-
-#: ../src/f-spot.glade.h:71
+#: ../src/f-spot.glade.h:26
msgid "Select a Tag..."
msgstr "Seleziona un'etichetta..."
-#: ../src/f-spot.glade.h:72
-msgid "Select the camera from which you want to transfer files"
-msgstr "Selezionare la fotocamera da cui si desidera trasferire i file"
-
-#: ../src/f-spot.glade.h:73
-msgid "Selected Camera: "
-msgstr "Fotocamera selezionata: "
-
-#: ../src/f-spot.glade.h:74
+#: ../src/f-spot.glade.h:27
msgid "Selection Constraints"
msgstr "Vincoli selezione"
-#: ../src/f-spot.glade.h:75
-#: ../src/ui/main_window.ui.h:21
+#: ../src/f-spot.glade.h:28 ../src/ui/main_window.ui.h:22
msgid "Set as _Background"
msgstr "Imposta come s_fondo"
-#: ../src/f-spot.glade.h:76
+#: ../src/f-spot.glade.h:29
msgid "Show all photos."
msgstr "Visualizza tutte le foto."
-#: ../src/f-spot.glade.h:77
+#: ../src/f-spot.glade.h:30
msgid "Show or hide the side pane"
msgstr "Mostra o nasconde il riquadro laterale"
-#: ../src/f-spot.glade.h:78
+#: ../src/f-spot.glade.h:31
msgid "Show or hide the toolbar"
msgstr "Mostra o nasconde la barra degli strumenti"
-#: ../src/f-spot.glade.h:79
+#: ../src/f-spot.glade.h:32
msgid "Side _pane"
msgstr "_Riquadro laterale"
-#: ../src/f-spot.glade.h:80
-msgid "Small"
-msgstr "Piccole"
-
-#: ../src/f-spot.glade.h:81
-msgid "Specify if an original size picture should be rotated or not. Smaller sizes are automatically rotated."
-msgstr "Specificare se un'immagine di dimensione originale deve essere ruotata. Le fotografie di piccole dimensioni sono ruotate automaticamente."
-
-#: ../src/f-spot.glade.h:82
-msgid "Strip image _metadata"
-msgstr "Togli _metadati dall'immagine"
-
#. Note for translators: meant as Temperature
-#: ../src/f-spot.glade.h:84
+#: ../src/f-spot.glade.h:34
msgid "Te_mp:"
msgstr "Te_mp.:"
-#: ../src/f-spot.glade.h:85
-msgid "Tiny"
-msgstr "Minuscola"
-
-#: ../src/f-spot.glade.h:86
-msgid "Total original size"
-msgstr "Dimensione originale"
-
-#: ../src/f-spot.glade.h:87
-#: ../src/ui/main_window.ui.h:28
+#: ../src/f-spot.glade.h:35 ../src/ui/main_window.ui.h:29
msgid "Zoom _in"
msgstr "_Aumenta ingrandimento"
-#: ../src/f-spot.glade.h:88
-#: ../src/ui/main_window.ui.h:29
+#: ../src/f-spot.glade.h:36 ../src/ui/main_window.ui.h:30
msgid "Zoom _out"
msgstr "_Riduci ingrandimento"
-#: ../src/f-spot.glade.h:89
-#: ../src/ui/main_window.ui.h:30
+#: ../src/f-spot.glade.h:37 ../src/ui/main_window.ui.h:31
msgid "Zoom in"
msgstr "Aumenta l'ingrandimento"
-#: ../src/f-spot.glade.h:90
-#: ../src/ui/main_window.ui.h:31
+#: ../src/f-spot.glade.h:38 ../src/ui/main_window.ui.h:32
msgid "Zoom out"
msgstr "Riduce l'ingrandimento"
-#: ../src/f-spot.glade.h:91
+#: ../src/f-spot.glade.h:39
msgid "_Brightness:"
msgstr "_Luminosità:"
-#: ../src/f-spot.glade.h:93
-msgid "_Create Mail"
-msgstr "_Crea email"
-
-#: ../src/f-spot.glade.h:94
-#: ../src/ui/main_window.ui.h:44
+#: ../src/f-spot.glade.h:40 ../src/ui/main_window.ui.h:45
msgid "_Edit"
msgstr "_Modifica"
-#: ../src/f-spot.glade.h:98
+#: ../src/f-spot.glade.h:42
msgid "_Exposure:"
msgstr "_Esposizione:"
-#: ../src/f-spot.glade.h:99
-msgid "_Flickr"
-msgstr "_Flickr"
-
-#: ../src/f-spot.glade.h:100
-#: ../src/ui/main_window.ui.h:48
+#: ../src/f-spot.glade.h:43 ../src/ui/main_window.ui.h:49
msgid "_Fullscreen"
msgstr "Schermo _intero"
-#: ../src/f-spot.glade.h:101
-msgid "_Gallery"
-msgstr "_Galleria"
-
-#: ../src/f-spot.glade.h:102
-#: ../src/ui/main_window.ui.h:49
+#: ../src/f-spot.glade.h:44 ../src/ui/main_window.ui.h:50
msgid "_Help"
msgstr "A_iuto"
-#: ../src/f-spot.glade.h:103
+#: ../src/f-spot.glade.h:45
msgid "_Hue:"
msgstr "_Tonalità:"
-#: ../src/f-spot.glade.h:104
+#: ../src/f-spot.glade.h:46
msgid "_Interpolate image on zoom"
msgstr "_Interpolazione immagine all'ingrandimento"
-#: ../src/f-spot.glade.h:105
+#: ../src/f-spot.glade.h:47
msgid "_New Window"
msgstr "_Nuova finestra"
-#: ../src/f-spot.glade.h:106
-msgid "_Open album in browser when done uploading"
-msgstr "_Apri l'album nel browser a caricamento completato"
-
-#: ../src/f-spot.glade.h:107
-msgid "_Open destination when done exporting"
-msgstr "_Apri la destinazione a esportazione completata"
-
-#: ../src/f-spot.glade.h:108
-#: ../src/ui/main_window.ui.h:56
+#: ../src/f-spot.glade.h:48 ../src/ui/main_window.ui.h:58
msgid "_Photo"
msgstr "_Foto"
-#: ../src/f-spot.glade.h:110
+#: ../src/f-spot.glade.h:49
msgid "_Saturation:"
msgstr "_Saturazione:"
-#: ../src/f-spot.glade.h:111
-msgid "_Scale photos to no larger than: "
-msgstr "_Scala le foto a non più grandi di: "
-
-#: ../src/f-spot.glade.h:112
-#: ../src/ui/main_window.ui.h:67
+#: ../src/f-spot.glade.h:50 ../src/ui/main_window.ui.h:69
msgid "_Slideshow"
msgstr "_Presentazione"
-#: ../src/f-spot.glade.h:113
-msgid "_Strip metadata"
-msgstr "_Togli metadati"
-
-#: ../src/f-spot.glade.h:114
-#: ../src/UI.Dialog/ui/EditTagDialog.ui.h:6
+#: ../src/f-spot.glade.h:51 ../src/UI.Dialog/ui/EditTagDialog.ui.h:6
msgid "_Tag Name:"
msgstr "Nome e_tichetta:"
-#: ../src/f-spot.glade.h:115
+#: ../src/f-spot.glade.h:52
msgid "_Tint:"
msgstr "_Tinta:"
-#: ../src/f-spot.glade.h:116
+#: ../src/f-spot.glade.h:53
msgid "_Toolbar"
msgstr "Barra degli _strumenti"
-#: ../src/f-spot.glade.h:117
-msgid "_URI:"
-msgstr "_URI:"
-
-#: ../src/f-spot.glade.h:118
-#: ../src/ui/main_window.ui.h:75
+#: ../src/f-spot.glade.h:54 ../src/ui/main_window.ui.h:77
msgid "_View"
msgstr "_Visualizza"
-#: ../src/f-spot.glade.h:119
-msgid "_Virtual Filesystem"
-msgstr "File system _virtuale"
-
-#: ../src/f-spot.glade.h:120
-#: ../src/Widgets/FindBar.cs:177
+#: ../src/f-spot.glade.h:55 ../src/Widgets/FindBar.cs:178
+#: ../src/Widgets/FindBar.cs:534
msgid "and"
msgstr "e"
#. at, or after a date, or between dates
-#: ../src/f-spot.glade.h:122
+#: ../src/f-spot.glade.h:57
msgid ""
"at\n"
"after\n"
@@ -2201,85 +2044,76 @@ msgstr ""
"dopo\n"
"tra"
-#: ../src/f-spot.glade.h:126
-msgid "x"
-msgstr "×"
-
-#: ../src/FullScreenView.cs:58
+#: ../src/FullScreenView.cs:59
msgid "Hide"
msgstr "Nascondi"
-#: ../src/FullScreenView.cs:60
+#: ../src/FullScreenView.cs:61
msgid "Hide Toolbar"
-msgstr "Nascondi barra degli strumenti"
+msgstr "Nasconde la barra degli strumenti"
-#: ../src/FullScreenView.cs:66
+#: ../src/FullScreenView.cs:67
msgid "Info"
msgstr "Info"
-#: ../src/FullScreenView.cs:68
-#: ../src/Widgets/InfoBox.cs:200
+#: ../src/FullScreenView.cs:69 ../src/Widgets/InfoBox.cs:202
msgid "Image Information"
-msgstr "Informazioni sull'immagine"
+msgstr "Visualizza informazioni sull'immagine"
-#: ../src/FullScreenView.cs:73
+#: ../src/FullScreenView.cs:74
msgid "Exit fullscreen"
-msgstr "Finestra normale"
+msgstr "Torna a finestra normale"
-#: ../src/FullScreenView.cs:81
-#: ../src/MainWindow.cs:307
-#: ../src/SingleView.cs:103
+#: ../src/FullScreenView.cs:82 ../src/MainWindow.cs:313
+#: ../src/SingleView.cs:87
msgid "Slideshow"
msgstr "Presentazione"
-#: ../src/FullScreenView.cs:82
+#: ../src/FullScreenView.cs:83
msgid "Start slideshow"
msgstr "Avvia presentazione"
-#: ../src/FullScreenView.cs:128
+#: ../src/FullScreenView.cs:129
msgid "Slide transition:"
msgstr "Transizione diapositive:"
-#: ../src/GroupSelector.cs:57
-#: ../src/GroupSelector.cs:58
+#: ../src/GroupSelector.cs:57 ../src/GroupSelector.cs:58
msgid "More dates"
msgstr "Altre date"
-#: ../src/GroupSelector.cs:60
-#: ../src/GroupSelector.cs:61
+#: ../src/GroupSelector.cs:60 ../src/GroupSelector.cs:61
msgid "More"
msgstr "Altro"
-#: ../src/GroupSelector.cs:517
-#: ../src/ui/main_window.ui.h:34
+#: ../src/GroupSelector.cs:530 ../src/ui/main_window.ui.h:35
msgid "_Clear Date Range"
msgstr "_Pulisci intervallo date"
-#: ../src/Imaging/Exif.cs:228
+#: ../src/Imaging/Exif.cs:229
msgid "Image Directory"
msgstr "Directory immagini"
-#: ../src/Imaging/Exif.cs:230
+#: ../src/Imaging/Exif.cs:231
msgid "Thumbnail Directory"
msgstr "Directory miniature"
-#: ../src/Imaging/Exif.cs:232
+#: ../src/Imaging/Exif.cs:233
msgid "Exif Directory"
msgstr "Directory Exif"
-#: ../src/Imaging/Exif.cs:234
+#: ../src/Imaging/Exif.cs:235
msgid "GPS Directory"
msgstr "Directory GPS"
-#: ../src/Imaging/Exif.cs:236
+#: ../src/Imaging/Exif.cs:237
msgid "InterOperability Directory"
msgstr "Directory interoperabilità"
-#: ../src/Imaging/Exif.cs:238
+#: ../src/Imaging/Exif.cs:239
msgid "Unknown Directory"
msgstr "Directory sconosciuta"
-#: ../src/Imaging/ImageFile.cs:94
+#: ../src/Imaging/ImageFile.cs:119
msgid "Writing to this file format is not supported"
msgstr "La scrittura di questo formato di file non è supportata"
@@ -2309,16 +2143,21 @@ msgid "A unique number"
msgstr "Un numero unico"
#: ../src/Imaging/IptcFile.cs:157
-msgid "The envelope handling priority between 1 (most urgent) and 9 (least urgent)"
-msgstr "La priorità di gestione del contenitore tra 1 (più urgente) e 9 (meno urgente)"
+msgid ""
+"The envelope handling priority between 1 (most urgent) and 9 (least urgent)"
+msgstr ""
+"La priorità di gestione del contenitore tra 1 (più urgente) e 9 (meno "
+"urgente)"
#: ../src/Imaging/IptcFile.cs:159
msgid "The year, month and day (CCYYMMDD) the service sent the material"
-msgstr "Anno, mese e giorno (AAAAMMGG) in cui il servizio ha spedito il materiale"
+msgstr ""
+"Anno, mese e giorno (AAAAMMGG) in cui il servizio ha spedito il materiale"
#: ../src/Imaging/IptcFile.cs:161
msgid "The hour, minute and second (HHMMSS) the service sent the material"
-msgstr "Ora, minuti e secondi (HHMMSS) in cui il servizio ha spedito il materiale"
+msgstr ""
+"Ora, minuti e secondi (HHMMSS) in cui il servizio ha spedito il materiale"
#: ../src/Imaging/IptcFile.cs:163
msgid "The character set designation"
@@ -2338,7 +2177,8 @@ msgstr "Versione ARM (Abstract Relationship Method)"
#: ../src/Imaging/IptcFile.cs:175
msgid "Number identifying the IIM version this application record uses"
-msgstr "Numero identificativo della versione di IIM utilizzata da questa applicazione"
+msgstr ""
+"Numero identificativo della versione di IIM utilizzata da questa applicazione"
#: ../src/Imaging/IptcFile.cs:177
msgid "Object type reference"
@@ -2348,8 +2188,7 @@ msgstr "Riferimento al tipo dell'oggetto"
msgid "Object attribute reference"
msgstr "Riferimento agli attributi dell'oggetto"
-#: ../src/Imaging/IptcFile.cs:188
-#: ../src/Imaging/IptcFile.cs:192
+#: ../src/Imaging/IptcFile.cs:188 ../src/Imaging/IptcFile.cs:192
msgid "Object name"
msgstr "Nome oggetto"
@@ -2371,11 +2210,14 @@ msgstr "Informazioni sul copyright per"
#: ../src/Imaging/IptcFile.cs:203
msgid "Full name of the country of the focus of the content"
-msgstr "Nome completo della paese che è d'interesse per il contenuto"
+msgstr "Nome completo della nazione che è d'interesse per il contenuto"
#: ../src/Imaging/IptcFile.cs:206
-msgid "Two or three letter ISO3166 code of the country of the focus of the content"
-msgstr "Codice ISO3166 a due o tre lettere del paese che è d'interesse per il contenuto"
+msgid ""
+"Two or three letter ISO3166 code of the country of the focus of the content"
+msgstr ""
+"Codice ISO3166 a due o tre lettere della nazione che è d'interesse per il "
+"contenuto"
#: ../src/Imaging/IptcFile.cs:209
msgid "Creator of the content"
@@ -2390,15 +2232,20 @@ msgid "The title of the author or creator"
msgstr "Il titolo dell'autore o del creatore"
#: ../src/Imaging/IptcFile.cs:218
-msgid "The person involved in writing, editing or correcting the object data or caption/abstract"
-msgstr "La persona incaricata di scrivere, modificare o correggere i dati o il didascalia/riassunto"
+msgid ""
+"The person involved in writing, editing or correcting the object data or "
+"caption/abstract"
+msgstr ""
+"La persona incaricata di scrivere, modificare o correggere i dati, la "
+"didascalia o il riassunto"
#: ../src/Imaging/IptcFile.cs:222
msgid "Headline of the content"
msgstr "Titolo del contenuto"
#: ../src/Imaging/IptcFile.cs:225
-msgid "Instructions from the creator to the receiver not covered by other fields"
+msgid ""
+"Instructions from the creator to the receiver not covered by other fields"
msgstr "Istruzioni dal creatore al fruitore non relative ad altri campi"
#: ../src/Imaging/IptcFile.cs:228
@@ -2409,53 +2256,20 @@ msgstr "Genere intellettuale dell'oggetto"
msgid "Unknown IIM DataSet"
msgstr "DataSet IIM sconosciuto"
-#: ../src/ImportCommand.cs:48
-#: ../src/SingleView.cs:359
-msgid "Select Folder"
-msgstr "Seleziona cartella"
-
-#: ../src/ImportCommand.cs:259
-msgid "(No Cameras Detected)"
-msgstr "(Nessuna fotocamera rilevata)"
-
-#: ../src/ImportCommand.cs:404
-#, csharp-format
-msgid "Loading {0} of {1}"
-msgstr "Caricamento {0} di {1}"
-
-#: ../src/ImportCommand.cs:470
-msgid "Done Loading"
-msgstr "Caricamento completato"
-
-#: ../src/ImportCommand.cs:684
-msgid "Directory does not exist."
-msgstr "La directory non esiste."
-
-#: ../src/ImportCommand.cs:685
-#, csharp-format
-msgid "The directory you selected \"{0}\" does not exist. Please choose a different directory"
-msgstr "La directory «{0}» selezionata non esiste. Scegliere un'altra directory"
-
-#. Note for translators: 'Import Tags' is no command, it means 'Tags used in Import'
-#: ../src/ImportCommand.cs:739
-#: ../src/ImportCommand.cs:741
+#: ../src/Import/ImportController.cs:406 ../src/Import/ImportController.cs:408
#: ../src/XmpTagsImporter.cs:89
-msgid "Import Tags"
+msgid "Imported Tags"
msgstr "Etichette importate"
-#: ../src/ItemAction.cs:79
-#: ../src/MainWindow.cs:274
-#: ../src/SingleView.cs:86
+#: ../src/ItemAction.cs:79 ../src/MainWindow.cs:280 ../src/SingleView.cs:70
msgid "Rotate Left"
msgstr "Ruota a sinistra"
#: ../src/ItemAction.cs:80
msgid "Rotate picture left"
-msgstr "Ruota l'immagine selezionata a sinistra"
+msgstr "Ruota l'immagine a sinistra"
-#: ../src/ItemAction.cs:91
-#: ../src/MainWindow.cs:278
-#: ../src/SingleView.cs:91
+#: ../src/ItemAction.cs:91 ../src/MainWindow.cs:284 ../src/SingleView.cs:75
msgid "Rotate Right"
msgstr "Ruota a destra"
@@ -2467,240 +2281,267 @@ msgstr "Ruota l'immagine a destra"
msgid "Next picture"
msgstr "Immagine successiva"
+#: ../src/ItemAction.cs:123
+msgid "Previous"
+msgstr "Precedente"
+
#: ../src/ItemAction.cs:124
msgid "Previous picture"
msgstr "Immagine precedente"
-#: ../src/MainWindow.cs:269
+#: ../src/MainWindow.cs:273 ../src/UI.Dialog/ImportDialog.cs:171
+#: ../src/ui/import.ui.h:4
+msgid "Import"
+msgstr "Importa"
+
+#: ../src/MainWindow.cs:275
msgid "Import new images"
msgstr "Importa nuove immagini"
-#: ../src/MainWindow.cs:285
-#: ../src/ui/main_window.ui.h:3
+#: ../src/MainWindow.cs:291 ../src/ui/main_window.ui.h:3
msgid "Browse"
msgstr "Sfoglia"
-#: ../src/MainWindow.cs:289
+#: ../src/MainWindow.cs:295
msgid "Browse many photos simultaneously"
msgstr "Sfoglia molte fotografie simultaneamente"
-#: ../src/MainWindow.cs:293
+#: ../src/MainWindow.cs:299
msgid "Edit Image"
msgstr "Modifica immagine"
-#: ../src/MainWindow.cs:297
+#: ../src/MainWindow.cs:303
msgid "View and edit a photo"
msgstr "Visualizza e modifica una foto"
-#: ../src/MainWindow.cs:302
-#: ../src/SingleView.cs:98
+#: ../src/MainWindow.cs:308 ../src/SingleView.cs:82
msgid "Fullscreen"
msgstr "Schermo intero"
-#: ../src/MainWindow.cs:304
-#: ../src/SingleView.cs:100
+#: ../src/MainWindow.cs:310 ../src/SingleView.cs:84
msgid "View photos fullscreen"
msgstr "Visualizza le foto a schermo intero"
-#: ../src/MainWindow.cs:309
-#: ../src/SingleView.cs:105
+#: ../src/MainWindow.cs:315 ../src/SingleView.cs:89
msgid "View photos in a slideshow"
-msgstr "Visualizza foto in una presentazione"
+msgstr "Visualizza le foto in una presentazione"
-#: ../src/MainWindow.cs:324
+#: ../src/MainWindow.cs:330
msgid "Previous photo"
msgstr "Foto precedente"
-#: ../src/MainWindow.cs:329
+#: ../src/MainWindow.cs:335
msgid "Next photo"
msgstr "Foto successiva"
-#: ../src/MainWindow.cs:1486
-msgid "No cameras detected."
-msgstr "Nessuna fotocamera rilevata."
-
-#: ../src/MainWindow.cs:1487
-msgid "F-Spot was unable to find any cameras attached to this system. Double check that the camera is connected and has power"
-msgstr "Non è stata rilevata alcuna fotocamera collegata al sistema. Controllare che la fotocamera sia collegata e accesa"
-
-#: ../src/MainWindow.cs:1526
-msgid "Error connecting to camera"
-msgstr "Errore nella connessione alla fotocamera"
+#: ../src/MainWindow.cs:412
+msgid "Show _Find Bar"
+msgstr "Visualizza barra della _ricerca"
-#: ../src/MainWindow.cs:1527
-#, csharp-format
-msgid "Received error \"{0}\" while connecting to camera"
-msgstr "Ricevuto l'errore «{0}» durante la connessione alla fotocamera"
+#: ../src/MainWindow.cs:415
+msgid "Hide _Find Bar"
+msgstr "Nascondi barra della _ricerca"
#. Translators, The singular case will never happen here.
-#: ../src/MainWindow.cs:1828
+#: ../src/MainWindow.cs:1719
#, csharp-format
msgid "Merge the selected tag"
msgid_plural "Merge the {0} selected tags?"
msgstr[0] "Unire l'etichetta selezionata"
msgstr[1] "Unire le {0} etichette selezionate?"
-#: ../src/MainWindow.cs:1855
-msgid "This operation will merge the selected tags and any sub-tags into a single tag."
-msgstr "L'operazione unirà le etichette selezionate e ogni sotto etichetta in una sola."
+#: ../src/MainWindow.cs:1746
+msgid ""
+"This operation will merge the selected tags and any sub-tags into a single "
+"tag."
+msgstr ""
+"L'operazione unirà le etichette selezionate e ogni sotto etichetta in una "
+"sola."
-#: ../src/MainWindow.cs:1857
+#: ../src/MainWindow.cs:1748
msgid "_Merge Tags"
msgstr "_Unisci etichette"
-#: ../src/MainWindow.cs:2062
+#: ../src/MainWindow.cs:1953
#, csharp-format
msgid "{0} Photo out of {1}"
msgid_plural "{0} Photos out of {1}"
msgstr[0] "{0} fotografia di {1}"
msgstr[1] "{0} fotografie di {1}"
-#: ../src/MainWindow.cs:2064
-#: ../src/SingleView.cs:495
+#: ../src/MainWindow.cs:1955 ../src/SingleView.cs:465
#, csharp-format
msgid "{0} Photo"
msgid_plural "{0} Photos"
msgstr[0] "{0} fotografia"
msgstr[1] "{0} fotografie"
-#: ../src/MainWindow.cs:2067
+#: ../src/MainWindow.cs:1958
#, csharp-format
msgid " ({0} selected)"
msgid_plural " ({0} selected)"
msgstr[0] " ({0} selezionata)"
msgstr[1] " ({0} selezionate)"
-#: ../src/MainWindow.cs:2148
+#: ../src/MainWindow.cs:2039
msgid "_Ok"
msgstr "_OK"
-#: ../src/MainWindow.cs:2149
+#: ../src/MainWindow.cs:2040
msgid "Error Deleting Picture"
msgstr "Errore nell'eliminare l'immagine"
-#: ../src/MainWindow.cs:2154
+#: ../src/MainWindow.cs:2045
#, csharp-format
msgid "No permission to delete the file:{1}{0}"
msgstr "Permessi non sufficienti per eliminare il file:{1}{0}"
-#: ../src/MainWindow.cs:2158
+#: ../src/MainWindow.cs:2049
#, csharp-format
msgid "An error of type {0} occurred while deleting the file:{2}{1}"
-msgstr "Si è verificato un errore del tipo {0} durante l'eliminazione del file:{2}{1}"
+msgstr ""
+"Si è verificato un errore del tipo {0} durante l'eliminazione del file:{2}{1}"
-#: ../src/MainWindow.cs:2190
+#: ../src/MainWindow.cs:2081
#, csharp-format
msgid "Delete the selected photo permanently?"
msgid_plural "Delete the {0} selected photos permanently?"
msgstr[0] "Eliminare definitivamente la fotografia selezionata?"
msgstr[1] "Eliminare definitivamente le {0} fotografie selezionate?"
-#: ../src/MainWindow.cs:2194
+#: ../src/MainWindow.cs:2085
msgid "This deletes all versions of the selected photo from your drive."
-msgid_plural "This deletes all versions of the selected photos from your drive."
-msgstr[0] "In questo modo verranno eliminate dall'unità tutte le versioni della fotografia selezionata."
-msgstr[1] "In questo modo verranno eliminate dall'unità tutte le versioni delle fotografie selezionate."
-
-#: ../src/MainWindow.cs:2197
+msgid_plural ""
+"This deletes all versions of the selected photos from your drive."
+msgstr[0] ""
+"In questo modo verranno eliminate dall'unità tutte le versioni della "
+"fotografia selezionata."
+msgstr[1] ""
+"In questo modo verranno eliminate dall'unità tutte le versioni delle "
+"fotografie selezionate."
+
+#: ../src/MainWindow.cs:2088
msgid "_Delete photo"
msgid_plural "_Delete photos"
msgstr[0] "Eli_mina fotografia"
msgstr[1] "Eli_mina fotografie"
-#: ../src/MainWindow.cs:2233
+#: ../src/MainWindow.cs:2124
#, csharp-format
msgid "Remove the selected photo from F-Spot?"
msgid_plural "Remove the {0} selected photos from F-Spot?"
msgstr[0] "Rimuovere la fotografia selezionata da F-Spot?"
msgstr[1] "Rimuovere le {0} fotografie selezionate da F-Spot?"
-#: ../src/MainWindow.cs:2238
-msgid "If you remove photos from the F-Spot catalog all tag information will be lost. The photos remain on your computer and can be imported into F-Spot again."
-msgstr "Se vengono rimosse delle foto dal catalogo di F-Spot, tutte le informazioni sulle etichette saranno perse. Le foto rimarranno sul computer e potranno essere importate nuovamente in F-Spot."
+#: ../src/MainWindow.cs:2129
+msgid ""
+"If you remove photos from the F-Spot catalog all tag information will be "
+"lost. The photos remain on your computer and can be imported into F-Spot "
+"again."
+msgstr ""
+"Se vengono rimosse delle foto dal catalogo di F-Spot, tutte le informazioni "
+"sulle etichette saranno perse. Le foto rimarranno sul computer e potranno "
+"essere importate nuovamente in F-Spot."
-#: ../src/MainWindow.cs:2239
+#: ../src/MainWindow.cs:2130
msgid "_Remove from Catalog"
msgstr "_Rimuovi dal catalogo"
-#: ../src/MainWindow.cs:2302
+#: ../src/MainWindow.cs:2199
#, csharp-format
msgid "Delete tag \"{0}\"?"
msgstr "Eliminare l'etichetta «{0}»?"
-#: ../src/MainWindow.cs:2304
+#: ../src/MainWindow.cs:2201
#, csharp-format
msgid "Delete the {0} selected tags?"
msgstr "Eliminare le {0} etichette selezionate?"
-#: ../src/MainWindow.cs:2309
+#: ../src/MainWindow.cs:2206
msgid "photo"
msgid_plural "photos"
msgstr[0] "Foto"
msgstr[1] "Foto"
-#: ../src/MainWindow.cs:2311
+#: ../src/MainWindow.cs:2208
#, csharp-format
msgid "If you delete this tag, the association with {0} {1} will be lost."
-msgid_plural "If you delete these tags, the association with {0} {1} will be lost."
-msgstr[0] "Se viene eliminata questa etichetta, l'associazione con {0} {1} verrà persa."
-msgstr[1] "Se vengono eliminate queste etichette, le associazioni con {0} {1} verranno perse."
-
-#: ../src/MainWindow.cs:2316
+msgid_plural ""
+"If you delete these tags, the association with {0} {1} will be lost."
+msgstr[0] ""
+"Se viene eliminata questa etichetta, l'associazione con {0} {1} verrà persa."
+msgstr[1] ""
+"Se vengono eliminate queste etichette, le associazioni con {0} {1} verranno "
+"perse."
+
+#: ../src/MainWindow.cs:2213
msgid "_Delete tag"
msgid_plural "_Delete tags"
msgstr[0] "Eli_mina etichetta"
msgstr[1] "Eli_mina etichette"
#. A Category is not empty. Can not delete it.
-#: ../src/MainWindow.cs:2330
+#: ../src/MainWindow.cs:2227
msgid "Tag is not empty"
msgstr "Etichetta non vuota"
-#: ../src/MainWindow.cs:2331
+#: ../src/MainWindow.cs:2228
#, csharp-format
-msgid "Can not delete tags that have tags within them. Please delete tags under \"{0}\" first"
-msgstr "Impossibile eliminare etichette contenenti altre etichette. Prima eliminare le etichette all'interno di «{0}»"
+msgid ""
+"Can not delete tags that have tags within them. Please delete tags under "
+"\"{0}\" first"
+msgstr ""
+"Impossibile eliminare etichette contenenti altre etichette. Prima eliminare "
+"le etichette all'interno di «{0}»"
-#: ../src/MainWindow.cs:2763
+#: ../src/MainWindow.cs:2659
msgid "Rotate selected photo left"
msgid_plural "Rotate selected photos left"
msgstr[0] "Ruota la fotografia selezionata a sinistra"
msgstr[1] "Ruota le fotografie selezionate a sinistra"
-#: ../src/MainWindow.cs:2776
+#: ../src/MainWindow.cs:2672
msgid "Rotate selected photo right"
msgid_plural "Rotate selected photos right"
msgstr[0] "Ruota la fotografia selezionata a destra"
msgstr[1] "Ruota le fotografie selezionate a destra"
-#: ../src/MainWindow.cs:2787
+#: ../src/MainWindow.cs:2683
#, csharp-format
msgid "Find _Selected Tag"
msgid_plural "Find _Selected Tags"
msgstr[0] "Trova etichetta _selezionata"
msgstr[1] "Trova etichette _selezionate"
-#: ../src/MainWindow.cs:2791
+#: ../src/MainWindow.cs:2687
#, csharp-format
msgid "Find Selected Tag _With"
msgid_plural "Find Selected Tags _With"
msgstr[0] "Trova etichetta selezionata _con"
msgstr[1] "Trova etichette selezionate _con"
-#: ../src/MainWindow.cs:2832
+#: ../src/MainWindow.cs:2728
msgid "Create New Version?"
msgid_plural "Create New Versions?"
msgstr[0] "Creare una nuova versione?"
msgstr[1] "Creare nuove versioni?"
-#: ../src/MainWindow.cs:2834
+#: ../src/MainWindow.cs:2730
#, csharp-format
-msgid "Before launching {1}, should F-Spot create a new version of the selected photo to preserve the original?"
-msgid_plural "Before launching {1}, should F-Spot create new versions of the selected photos to preserve the originals?"
-msgstr[0] "Prima di avviare {1}, creare con F-Spot una nuova versione della fotografia selezionata per preservare l'originale?"
-msgstr[1] "Prima di avviare {1}, creare con F-Spot delle nuove versioni delle fotografie selezionate per preservare le originali?"
-
-#: ../src/MainWindow.cs:2856
+msgid ""
+"Before launching {1}, should F-Spot create a new version of the selected "
+"photo to preserve the original?"
+msgid_plural ""
+"Before launching {1}, should F-Spot create new versions of the selected "
+"photos to preserve the originals?"
+msgstr[0] ""
+"Prima di avviare {1}, creare con F-Spot una nuova versione della fotografia "
+"selezionata per preservare l'originale?"
+msgstr[1] ""
+"Prima di avviare {1}, creare con F-Spot delle nuove versioni delle "
+"fotografie selezionate per preservare le originali?"
+
+#: ../src/MainWindow.cs:2752
msgid "XCF version"
msgstr "Versione XCF"
@@ -2724,93 +2565,103 @@ msgstr "Soggetto e parole chiave"
msgid "Compression"
msgstr "Compressione"
-#: ../src/MetadataStore.cs:25
+#. Translators: Planar Configuration is the label for the tiff:PlanarConfiguration tag
+#. "when Planar Configuration=1, this implies that all components must have
+#. the same BitsPerSample value; when Planar Configuration=2, different
+#. components could have different bit depths."
+#: ../src/MetadataStore.cs:29
msgid "Planar Configuration"
msgstr "Configurazione planare"
-#: ../src/MetadataStore.cs:27
+#: ../src/MetadataStore.cs:31
msgid "Orientation"
msgstr "Orientamento"
-#: ../src/MetadataStore.cs:29
+#: ../src/MetadataStore.cs:33
msgid "Photometric Interpretation"
msgstr "Interpretazione fotometrica"
-#: ../src/MetadataStore.cs:31
+#: ../src/MetadataStore.cs:35
msgid "Resolution Unit"
msgstr "Unità di misura"
-#: ../src/MetadataStore.cs:33
+#: ../src/MetadataStore.cs:37
msgid "Exposure Program"
msgstr "Programma di esposizione"
-#: ../src/MetadataStore.cs:35
+#: ../src/MetadataStore.cs:39
msgid "Metering Mode"
msgstr "Modo di misurazione esposimetrica"
-#: ../src/MetadataStore.cs:37
+#: ../src/MetadataStore.cs:41
msgid "Exposure Mode"
msgstr "Modalità di esposizione"
-#: ../src/MetadataStore.cs:39
+#: ../src/MetadataStore.cs:43
msgid "Custom Rendered"
msgstr "Render personalizzato"
-#: ../src/MetadataStore.cs:41
+#: ../src/MetadataStore.cs:45
msgid "Components Configuration"
msgstr "Configurazione dei componenti"
-#: ../src/MetadataStore.cs:43
+#: ../src/MetadataStore.cs:47
msgid "Light Source"
msgstr "Sorgente di luce"
-#: ../src/MetadataStore.cs:45
+#: ../src/MetadataStore.cs:49
msgid "Sensing Method"
msgstr "Metodo di rilevamento"
-#: ../src/MetadataStore.cs:47
+#: ../src/MetadataStore.cs:51
msgid "Color Space"
msgstr "Spazio dei colori"
-#: ../src/MetadataStore.cs:49
+#: ../src/MetadataStore.cs:53
msgid "White Balance"
msgstr "Bilanciamento del bianco"
-#: ../src/MetadataStore.cs:51
+#: ../src/MetadataStore.cs:55
msgid "Focal Plane Resolution Unit"
msgstr "Unità di misura piano focale"
-#: ../src/MetadataStore.cs:53
+#: ../src/MetadataStore.cs:57
msgid "File Source Type"
msgstr "Tipo del file sorgente"
-#: ../src/MetadataStore.cs:55
+#: ../src/MetadataStore.cs:59
msgid "Scene Capture Type"
msgstr "Tipo di cattura scena"
-#: ../src/MetadataStore.cs:57
+#. Translators: Gain Control is the label for the exif:GainControl tag
+#. "This tag indicates the degree of overall image gain adjustment."
+#: ../src/MetadataStore.cs:63
msgid "Gain Control"
msgstr "Controllo del guadagno"
-#: ../src/MetadataStore.cs:59
+#: ../src/MetadataStore.cs:65
msgid "Contrast"
msgstr "Contrasto"
-#: ../src/MetadataStore.cs:61
+#: ../src/MetadataStore.cs:67
msgid "Saturation"
msgstr "Saturazione"
-#: ../src/MetadataStore.cs:63
+#: ../src/MetadataStore.cs:69
msgid "Sharpness"
msgstr "Nitidezza"
-#: ../src/MetadataStore.cs:65
+#: ../src/MetadataStore.cs:71
msgid "Scene Type"
msgstr "Tipo di scena"
+#: ../src/PhotoStore.cs:166 ../src/ui/mail_dialog.ui.h:19
+msgid "Original"
+msgstr "Originale"
+
#. Fixme this should really set parent menu
#. items insensitve
-#: ../src/PhotoTagMenu.cs:74
+#: ../src/PhotoTagMenu.cs:62
msgid "(No Tags)"
msgstr "(Nessuna etichetta)"
@@ -2830,72 +2681,72 @@ msgstr "Rinomina versione"
msgid "New name:"
msgstr "Nuovo nome:"
-#: ../src/PhotoVersionCommands.cs:110
-msgid "Could not create a new version"
-msgstr "Impossibile creare una nuova versione"
-
-#: ../src/PhotoVersionCommands.cs:111
-#, csharp-format
-msgid "Received exception \"{0}\". Unable to create version \"{1}\""
-msgstr "Ricevuta l'eccezione «{0}». Impossibile creare la versione «{1}»"
-
-#: ../src/PhotoVersionCommands.cs:138
-msgid "Really Delete?"
-msgstr "Eliminare veramente?"
-
-#: ../src/PhotoVersionCommands.cs:139
-msgid "Cancel"
-msgstr "Annulla"
-
-#: ../src/PhotoVersionCommands.cs:140
+#: ../src/PhotoVersionCommands.cs:123
msgid "Delete"
msgstr "Elimina"
-#: ../src/PhotoVersionCommands.cs:144
+#: ../src/PhotoVersionCommands.cs:124
#, csharp-format
msgid "Really delete version \"{0}\"?"
msgstr "Eliminare veramente la versione «{0}»?"
-#: ../src/PhotoVersionCommands.cs:154
-msgid "Could not delete a version"
-msgstr "Impossibile eliminare una versione"
+#: ../src/PhotoVersionCommands.cs:125
+msgid "This removes the version and deletes the corresponding file from disk."
+msgstr ""
+"Questa funzione rimuove la versione ed elimina il file corrispondente dal "
+"disco."
-#: ../src/PhotoVersionCommands.cs:155
+#: ../src/PhotoVersionCommands.cs:170
+msgid "De_tach"
+msgstr "Dis_taccare"
+
+#: ../src/PhotoVersionCommands.cs:171
#, csharp-format
-msgid "Received exception \"{0}\". Unable to delete version \"{1}\""
-msgstr "Ricevuta l'eccezione «{0}». Impossibile eliminare la versione «{1}»"
+msgid "Really detach version \"{0}\" from \"{1}\"?"
+msgstr "Distaccare la versione «{0}» da «{1}»?"
-#: ../src/PhotoVersionCommands.cs:196
-msgid "Could not rename a version"
-msgstr "Impossibile rinominare una versione"
+#: ../src/PhotoVersionCommands.cs:172
+msgid ""
+"This makes the version appear as a separate photo in the library. To undo, "
+"drag the new photo back to its parent."
+msgstr ""
+"Questa funzione renderà la versione come una foto separata nella libreria. "
+"Per annullare, trascinare la foto sopra l'originale."
-#: ../src/PhotoVersionCommands.cs:197
-#, csharp-format
-msgid "Received exception \"{0}\". Unable to rename version to \"{1}\""
-msgstr "Ricevuta l'eccezione «{0}». Impossibile rinominare la versione in «{1}»"
+#: ../src/PhotoVersionCommands.cs:194
+msgid "Re_parent"
+msgstr "Ri_assegna"
-#: ../src/PhotoVersionMenu.cs:66
-#: ../src/Widgets/InfoBox.cs:549
-msgid "(No Edits)"
-msgstr "(Nessuna modifica)"
+#: ../src/PhotoVersionCommands.cs:195
+#, csharp-format
+msgid "Really reparent \"{0}\" as version of \"{1}\"?"
+msgid_plural "Really reparent {2} photos as versions of \"{1}\"?"
+msgstr[0] "Riassegnare la versione «{0}» come figlia di «{1}»?"
+msgstr[1] "Riassegnare «{2}» foto come figlie di «{1}»?"
-#: ../src/PhotoView.cs:169
-#: ../src/UI.Dialog/EditExceptionDialog.cs:38
-msgid "Error editing photo"
-msgstr "Errore nella modifica della foto"
+#: ../src/PhotoVersionCommands.cs:198
+msgid ""
+"This makes the photos appear as a single one in the library. The versions "
+"can be detached using the Photo menu."
+msgstr ""
+"Questa funzione farà apparire le foto come una unica nella libreria. La "
+"versione può essere distaccata tramite il menù Foto."
-#: ../src/PhotoView.cs:170
-#: ../src/Sharpener.cs:73
-#: ../src/UI.Dialog/EditExceptionDialog.cs:25
+#: ../src/PhotoVersionCommands.cs:238
#, csharp-format
-msgid "Received exception \"{0}\". Unable to save photo {1}"
-msgstr "Ricevuta l'eccezione «{0}». Impossibile salvare la fotografia {1}"
+msgid "Received exception \"{0}\"."
+msgstr "Ricevuta l'eccezione «{0}»."
-#: ../src/PhotoView.cs:359
+#: ../src/PhotoVersionMenu.cs:66 ../src/Widgets/InfoBox.cs:566
+#: ../src/Widgets/InfoBox.cs:568
+msgid "(No Edits)"
+msgstr "(Nessuna modifica)"
+
+#: ../src/PhotoView.cs:339
msgid "Comment:"
msgstr "Commento:"
-#: ../src/Preferences.cs:149
+#: ../src/Preferences.cs:152
msgid "Photos"
msgstr "Foto"
@@ -2903,115 +2754,121 @@ msgstr "Foto"
msgid "Image Settings"
msgstr "Impostazioni immagine"
-#: ../src/QueryWidget.cs:58
+#: ../src/QueryWidget.cs:55
msgid "Find: "
msgstr "Trova: "
-#: ../src/QueryWidget.cs:63
+#: ../src/QueryWidget.cs:60
msgid "Untagged photos"
msgstr "Foto senza etichetta"
-#: ../src/QueryWidget.cs:71
+#: ../src/QueryWidget.cs:68
msgid "Rated photos"
msgstr "Foto con valutazione"
#. Note for translators: 'Import roll' is no command, it means 'Roll that has been imported'
-#: ../src/QueryWidget.cs:80
+#: ../src/QueryWidget.cs:77
msgid "Import roll"
msgstr "Rullino di importazione"
-#: ../src/QueryWidget.cs:104
+#: ../src/QueryWidget.cs:100
msgid "Clear search"
msgstr "Pulisci ricerca"
-#: ../src/QueryWidget.cs:111
+#: ../src/QueryWidget.cs:107
msgid "Refresh search"
msgstr "Aggiorna ricerca"
-#: ../src/QueryWidget.cs:113
+#: ../src/QueryWidget.cs:110
msgid "No matching photos found"
msgstr "Nessuna fotografia corrispondente"
-#: ../src/QueryWidget.cs:155
-msgid "Hide _Find Bar"
-msgstr "Nascondi barra della _ricerca"
-
-#: ../src/QueryWidget.cs:161
-msgid "Show _Find Bar"
-msgstr "Visualizza barra della _ricerca"
-
-#: ../src/RotateCommand.cs:96
-#: ../src/RotateCommand.cs:111
+#: ../src/RotateCommand.cs:87 ../src/RotateCommand.cs:102
msgid "Unable to rotate this type of photo"
msgstr "Impossibile ruotare questo tipo di foto"
-#: ../src/RotateCommand.cs:131
+#: ../src/RotateCommand.cs:122
msgid "Unable to rotate readonly file"
msgstr "Impossibile ruotare un file in sola lettura"
-#: ../src/RotateCommand.cs:198
+#: ../src/RotateCommand.cs:185
msgid "Rotating photos"
msgstr "Rotazione fotografie"
-#: ../src/RotateCommand.cs:209
+#: ../src/RotateCommand.cs:196
#, csharp-format
msgid "Rotating photo \"{0}\""
msgstr "Rotazione fotografia «{0}»"
-#: ../src/RotateCommand.cs:222
+#: ../src/RotateCommand.cs:209
msgid "Directory not found"
msgstr "Directory non trovata"
-#: ../src/RotateCommand.cs:242
+#: ../src/RotateCommand.cs:229
#, csharp-format
msgid "Unable to rotate photo"
msgid_plural "Unable to rotate {0} photos"
msgstr[0] "Impossibile ruotare la fotografia"
msgstr[1] "Impossibile ruotare {0} fotografie"
-#: ../src/RotateCommand.cs:244
+#: ../src/RotateCommand.cs:231
#, csharp-format
-msgid "The photo could not be rotated because it is on a read only file system or media such as a CDROM. Please check the permissions and try again."
-msgid_plural "{0} photos could not be rotated because they are on a read only file system or media such as a CDROM. Please check the permissions and try again."
-msgstr[0] "Impossibile ruotare la fotografia perché si trova o su un file system a sola lettura o su un supporto come un CD-ROM. Controllare i permessi e provare nuovamente"
-msgstr[1] "Impossibile ruotare {0} fotografie perché si trovano o su un file system a sola lettura o su un supporto come un CD-ROM. Controllare i permessi e provare nuovamente"
-
-#: ../src/RotateCommand.cs:271
+msgid ""
+"The photo could not be rotated because it is on a read only file system or "
+"media such as a CDROM. Please check the permissions and try again."
+msgid_plural ""
+"{0} photos could not be rotated because they are on a read only file system "
+"or media such as a CDROM. Please check the permissions and try again."
+msgstr[0] ""
+"Impossibile ruotare la fotografia perché si trova o su un file system a sola "
+"lettura o su un supporto come un CD-ROM. Controllare i permessi e provare "
+"nuovamente"
+msgstr[1] ""
+"Impossibile ruotare {0} fotografie perché si trovano o su un file system a "
+"sola lettura o su un supporto come un CD-ROM. Controllare i permessi e "
+"provare nuovamente"
+
+#: ../src/RotateCommand.cs:258
#, csharp-format
msgid "Received error \"{0}\" while attempting to rotate {1}"
msgstr "Ricevuto l'errore «{0}» durante la rotazione {1}"
-#: ../src/RotateCommand.cs:276
+#: ../src/RotateCommand.cs:263
msgid "Error while rotating photo."
msgstr "Errore durante la rotazione della fotografia."
-#: ../src/SendEmail.cs:240
+#: ../src/SendEmail.cs:218
msgid "Preparing email"
msgstr "Preparazione email"
-#: ../src/SendEmail.cs:292
+#: ../src/SendEmail.cs:270
#, csharp-format
msgid "Exporting picture \"{0}\""
msgstr "Esportazione immagine «{0}»"
-#: ../src/SendEmail.cs:314
+#: ../src/SendEmail.cs:292
msgid "Error processing image"
msgstr "Errore nell'elaborazione dell'immagine"
-#: ../src/SendEmail.cs:315
+#: ../src/SendEmail.cs:293
#, csharp-format
msgid "An error occured while processing \"{0}\": {1}"
msgstr "Si è verificato un errore nel processare l'immagine «{0}»: {1}"
#. Send the mail :)
-#: ../src/SendEmail.cs:330
-msgid "my photos"
+#: ../src/SendEmail.cs:307
+msgid "My Photos"
msgstr "Le mie foto"
#: ../src/Sharpener.cs:72
msgid "Error saving sharpened photo"
msgstr "Errore nel salvare la fotografia resa nitida"
+#: ../src/Sharpener.cs:73 ../src/UI.Dialog/EditExceptionDialog.cs:26
+#, csharp-format
+msgid "Received exception \"{0}\". Unable to save photo {1}"
+msgstr "Ricevuta l'eccezione «{0}». Impossibile salvare la fotografia {1}"
+
#: ../src/Sharpener.cs:102
msgid "Sharpen"
msgstr "Nitidezza"
@@ -3028,37 +2885,40 @@ msgstr "Raggio:"
msgid "Threshold:"
msgstr "Soglia:"
-#: ../src/SingleView.cs:88
+#: ../src/SingleView.cs:72
msgid "Rotate photo left"
msgstr "Ruota la fotografia selezionata a sinistra"
-#: ../src/SingleView.cs:93
+#: ../src/SingleView.cs:77
msgid "Rotate photo right"
msgstr "Ruota la fotografia selezionata a destra"
-#: ../src/SingleView.cs:130
+#: ../src/SingleView.cs:114
msgid "Folder"
msgstr "Cartella"
-#: ../src/SingleView.cs:356
+#: ../src/SingleView.cs:339
msgid "Open"
msgstr "Apri"
-#: ../src/SingleView.cs:456
+#: ../src/SingleView.cs:342
+msgid "Select Folder"
+msgstr "Seleziona cartella"
+
+#: ../src/SingleView.cs:426
msgid "Set as Background"
msgstr "Imposta come sfondo"
-#: ../src/TagCommands.cs:96
-#: ../src/TagSelectionWidget.cs:498
-#: ../src/UI.Dialog/EditTagDialog.cs:78
+#: ../src/TagCommands.cs:97 ../src/TagSelectionWidget.cs:491
+#: ../src/UI.Dialog/EditTagDialog.cs:76
msgid "This name is already in use"
msgstr "Questo nome è già in uso"
-#: ../src/TagCommands.cs:144
+#: ../src/TagCommands.cs:145
msgid "Create New Tag"
msgstr "Crea nuova etichetta"
-#: ../src/TagCommands.cs:145
+#: ../src/TagCommands.cs:146
msgid "Name of New Tag:"
msgstr "Nome della nuova etichetta:"
@@ -3069,14 +2929,13 @@ msgid_plural "Find"
msgstr[0] "Trova"
msgstr[1] "Trova"
-#: ../src/TagPopup.cs:36
-#: ../src/Widgets/TagMenu.cs:91
+#: ../src/TagPopup.cs:36 ../src/Widgets/TagMenu.cs:98
msgid "Create New Tag..."
msgstr "Crea nuova etichetta..."
#: ../src/TagPopup.cs:42
-msgid "Edit Selected Tag..."
-msgstr "Modifica etichetta selezionata..."
+msgid "Edit Tag..."
+msgstr "Modifica etichetta..."
#: ../src/TagPopup.cs:46
msgid "Delete Tag"
@@ -3125,43 +2984,41 @@ msgstr[1] "_Trova con"
msgid "All"
msgstr "Tutte"
-#: ../src/TagQueryWidget.cs:149
-#: ../src/Term.cs:592
+#: ../src/TagQueryWidget.cs:149 ../src/Term.cs:586
#, csharp-format
msgid "Not {0}"
msgstr "Esclusa {0}"
-#: ../src/TagQueryWidget.cs:278
+#: ../src/TagQueryWidget.cs:273
msgid "Drag tags here to search for them"
msgstr "Trascinare qui le etichette da cercare"
-#: ../src/TagSelectionWidget.cs:497
+#: ../src/TagSelectionWidget.cs:490
msgid "Error renaming tag"
msgstr "Errore nel rinominare l'etichetta"
-#: ../src/TagStore.cs:203
+#: ../src/TagStore.cs:204
msgid "Favorites"
msgstr "Preferite"
-#: ../src/TagStore.cs:208
+#: ../src/TagStore.cs:209
msgid "Hidden"
msgstr "Nascoste"
-#: ../src/TagStore.cs:216
+#: ../src/TagStore.cs:217
msgid "People"
msgstr "Persone"
-#: ../src/TagStore.cs:221
+#: ../src/TagStore.cs:222
msgid "Places"
msgstr "Luoghi"
-#: ../src/TagStore.cs:226
+#: ../src/TagStore.cs:227
msgid "Events"
msgstr "Eventi"
#. The label for the root category is used in new and edit tag dialogs
-#: ../src/TagStore.cs:239
-#: ../src/Widgets/InfoBox.cs:400
+#: ../src/TagStore.cs:240 ../src/Widgets/InfoBox.cs:410
msgid "(None)"
msgstr "(Nessuno)"
@@ -3172,7 +3029,7 @@ msgstr " con "
#. operators.Add (Catalog.GetString (" && "));
#: ../src/Term.cs:300
msgid ", "
-msgstr ", "
+msgstr ", "
#: ../src/Term.cs:356
msgid " or "
@@ -3180,30 +3037,29 @@ msgstr " o "
#. OPS The operators we support, case insensitive
#. private static string op_str = "(?'Ops' or | and |, | \\s+ )";
-#: ../src/Term.cs:380
-#: ../src/UI.Dialog/ui/DateRangeDialog.ui.h:7
-#: ../src/Widgets/FindBar.cs:177
+#: ../src/Term.cs:380 ../src/UI.Dialog/ui/DateRangeDialog.ui.h:7
+#: ../src/Widgets/FindBar.cs:178 ../src/Widgets/FindBar.cs:533
msgid "or"
msgstr "o"
-#: ../src/ThumbnailCommand.cs:20
+#: ../src/ThumbnailCommand.cs:21
msgid "Updating Thumbnails"
msgstr "Aggiornamento miniature"
-#: ../src/ThumbnailCommand.cs:28
+#: ../src/ThumbnailCommand.cs:29
#, csharp-format
msgid "Updating picture \"{0}\""
msgstr "Aggiornamento immagine «{0}»"
-#: ../src/UI.Dialog/AboutDialog.cs:71
+#: ../src/UI.Dialog/AboutDialog.cs:94
msgid "Photo management for GNOME"
msgstr "Gestore di fotografie per GNOME"
-#: ../src/UI.Dialog/AboutDialog.cs:72
-msgid "Copyright © 2003-2009 Novell Inc."
-msgstr "Copyright © 2003-2009 Novell Inc."
-
#: ../src/UI.Dialog/AboutDialog.cs:95
+msgid "Copyright © 2003-2010 Novell Inc."
+msgstr "Copyright © 2003-2010 Novell Inc."
+
+#: ../src/UI.Dialog/AboutDialog.cs:119
msgid "translator-credits"
msgstr ""
"Marco Colombo <m.colombo at ed.ac.uk>\n"
@@ -3212,11 +3068,11 @@ msgstr ""
"Maxxer <maxxer at yetopen.it>\n"
"e il contributo di Luca Ferretti"
-#: ../src/UI.Dialog/AboutDialog.cs:100
+#: ../src/UI.Dialog/AboutDialog.cs:124
msgid "F-Spot Website"
msgstr "Sito web di F-Spot"
-#: ../src/UI.Dialog/AdjustTimeDialog.cs:112
+#: ../src/UI.Dialog/AdjustTimeDialog.cs:113
#: ../src/UI.Dialog/ui/AdjustTimeDialog.ui.h:10
#, csharp-format
msgid "Shift all photos by {0}"
@@ -3258,16 +3114,20 @@ msgstr "Settimana precedente (Lun-Dom)"
msgid "Customized Range"
msgstr "Intervallo personalizzato"
-#: ../src/UI.Dialog/EditTagIconDialog.cs:46
+#: ../src/UI.Dialog/EditExceptionDialog.cs:39
+msgid "Error editing photo"
+msgstr "Errore nella modifica della foto"
+
+#: ../src/UI.Dialog/EditTagIconDialog.cs:42
#, csharp-format
msgid "Edit Icon for Tag {0}"
msgstr "Modifica icona per l'etichetta {0}"
-#: ../src/UI.Dialog/EditTagIconDialog.cs:68
+#: ../src/UI.Dialog/EditTagIconDialog.cs:64
msgid "Select Photo from file"
msgstr "Seleziona foto da file"
-#: ../src/UI.Dialog/EditTagIconDialog.cs:90
+#: ../src/UI.Dialog/EditTagIconDialog.cs:86
#, csharp-format
msgid ""
"\n"
@@ -3284,16 +3144,16 @@ msgstr ""
"a questa etichetta. Etichettare una foto con «{0}» e tornare\n"
"qui per utilizzarla come icona."
-#: ../src/UI.Dialog/EditTagIconDialog.cs:168
+#: ../src/UI.Dialog/EditTagIconDialog.cs:164
msgid "Unable to load image"
msgstr "Impossibile caricare l'immagine"
-#: ../src/UI.Dialog/EditTagIconDialog.cs:169
+#: ../src/UI.Dialog/EditTagIconDialog.cs:165
#, csharp-format
msgid "Unable to load \"{0}\" as icon for the tag"
msgstr "Impossibile caricare «{0}» come icona per l'etichetta"
-#: ../src/UI.Dialog/EditTagIconDialog.cs:207
+#: ../src/UI.Dialog/EditTagIconDialog.cs:203
#, csharp-format
msgid "Photo {0} of {1}"
msgstr "Fotografia {0} di {1}"
@@ -3310,39 +3170,70 @@ msgstr "Dettagli errore"
msgid "An unhandled exception was thrown: "
msgstr "È stata lanciata un'eccezione non gestita: "
-#: ../src/UI.Dialog/PreferenceDialog.cs:53
-#: ../src/UI.Dialog/PreferenceDialog.cs:71
+#: ../src/UI.Dialog/ImportDialog.cs:15
+msgid "Choose Folder..."
+msgstr "Selezionare una cartella..."
+
+#: ../src/UI.Dialog/ImportDialog.cs:124
+msgid "Choose Import source..."
+msgstr "Selezionare la sorgente di importazione..."
+
+#: ../src/UI.Dialog/ImportDialog.cs:136
+msgid "(No Cameras Detected)"
+msgstr "(Nessuna fotocamera rilevata)"
+
+#: ../src/UI.Dialog/ImportDialog.cs:264
+#, csharp-format
+msgid "Importing Photos: {0} of {1}..."
+msgstr "Importazione fotografia {0} di {1}"
+
+#: ../src/UI.Dialog/ImportDialog.cs:288
+msgid "Importing photos..."
+msgstr "Importazione fotografie..."
+
+#. TODO: Using a GtkSpinner would be nicer here.
+#: ../src/UI.Dialog/ImportDialog.cs:295
+msgid "Searching for photos... (You can already click Import to continue)"
+msgstr "Ricerca fotografie... (Si può premere Importa per procedere)"
+
+#: ../src/UI.Dialog/PreferenceDialog.cs:55
+#: ../src/UI.Dialog/PreferenceDialog.cs:78
msgid "None"
msgstr "Nessuno"
-#: ../src/UI.Dialog/PreferenceDialog.cs:55
+#: ../src/UI.Dialog/PreferenceDialog.cs:57
msgid "System profile"
msgstr "Profilo di sistema"
-#: ../src/UI.Dialog/PreferenceDialog.cs:84
+#: ../src/UI.Dialog/PreferenceDialog.cs:95
msgid "Standard theme"
msgstr "Tema standard"
-#: ../src/UI.Dialog/RepairDbDialog.cs:20
+#: ../src/UI.Dialog/RepairDbDialog.cs:21
msgid "Error loading database."
msgstr "Errore nel caricare il database."
-#: ../src/UI.Dialog/RepairDbDialog.cs:21
+#: ../src/UI.Dialog/RepairDbDialog.cs:22
#, csharp-format
-msgid "F-Spot encountered an error while loading the photo database. The old database has be moved to {0} and a new database has been created."
-msgstr "È stato riscontrato un errore durante il caricamento del database delle foto. Il vecchio database è stato spostato in {0} e ne è stato creato uno nuovo."
+msgid ""
+"F-Spot encountered an error while loading the photo database. The old "
+"database has be moved to {0} and a new database has been created."
+msgstr ""
+"È stato riscontrato un errore durante il caricamento del database delle "
+"foto. Il vecchio database è stato spostato in {0} e ne è stato creato uno "
+"nuovo."
# (NdT) Nome/etichetta proporzione
-#: ../src/UI.Dialog/SelectionRatioDialog.cs:60
+#: ../src/UI.Dialog/SelectionRatioDialog.cs:61
msgid "Label"
msgstr "Nome"
# (NdT) Valore proporzione (ad es 1.2)
-#: ../src/UI.Dialog/SelectionRatioDialog.cs:64
+#: ../src/UI.Dialog/SelectionRatioDialog.cs:65
msgid "Ratio"
msgstr "Rapporto"
-#: ../src/UI.Dialog/ThreadProgressDialog.cs:49
+#: ../src/UI.Dialog/ThreadProgressDialog.cs:55
msgid "Retry"
msgstr "Ritenta"
@@ -3514,6 +3405,117 @@ msgstr "<b>Valutazione minima</b>"
msgid "Set Rating Filter"
msgstr "Imposta filtro valutazione"
+#: ../src/ui/import.ui.h:1
+msgid "Attach Tags:"
+msgstr "Attacca etichette:"
+
+#: ../src/ui/import.ui.h:2
+msgid "Copy files to the Photos folder"
+msgstr "Copia i file nella cartella delle foto"
+
+#: ../src/ui/import.ui.h:3
+msgid "Detect duplicates"
+msgstr "Rileva duplicati"
+
+#. Translators: this string means 'source of import'
+#: ../src/ui/import.ui.h:6
+msgid "Import from:"
+msgstr "Importa da:"
+
+#: ../src/ui/import.ui.h:7
+msgid "Include subfolders"
+msgstr "Includi sottocartelle"
+
+#: ../src/ui/mail_dialog.ui.h:1
+msgid "1024 px"
+msgstr "1024 px"
+
+#: ../src/ui/mail_dialog.ui.h:2
+msgid "320 px"
+msgstr "320 px"
+
+#: ../src/ui/mail_dialog.ui.h:3
+msgid "480 px"
+msgstr "480 px"
+
+#: ../src/ui/mail_dialog.ui.h:4
+msgid "640 px"
+msgstr "640 px"
+
+#: ../src/ui/mail_dialog.ui.h:5
+msgid "800 px"
+msgstr "800 px"
+
+#: ../src/ui/mail_dialog.ui.h:7
+msgid "<b>Size</b>"
+msgstr "<b>Dimensione</b>"
+
+#: ../src/ui/mail_dialog.ui.h:9
+msgid "<b>Summary</b>"
+msgstr "<b>Sommario</b>"
+
+#: ../src/ui/mail_dialog.ui.h:11
+msgid "Create Mail"
+msgstr "Crea email"
+
+#: ../src/ui/mail_dialog.ui.h:12
+msgid "Create a mail with the selected photos (possibly resized) attached"
+msgstr ""
+"Crea una email con le fotografie selezionate (eventualmente ridimensionate) "
+"in allegato"
+
+#: ../src/ui/mail_dialog.ui.h:13
+msgid "Do not send a mail"
+msgstr "Non inviare email"
+
+#: ../src/ui/mail_dialog.ui.h:14
+msgid "Estimated new size"
+msgstr "Nuova dimensione stimata"
+
+#: ../src/ui/mail_dialog.ui.h:15
+msgid "Extra large"
+msgstr "Molto grande"
+
+#: ../src/ui/mail_dialog.ui.h:16
+msgid "Large"
+msgstr "Grande"
+
+#: ../src/ui/mail_dialog.ui.h:17
+msgid "Medium"
+msgstr "Medie"
+
+#: ../src/ui/mail_dialog.ui.h:18
+msgid "Number of pictures"
+msgstr "Numero di immagini"
+
+#: ../src/ui/mail_dialog.ui.h:20
+msgid "Original size (possible very large file size)"
+msgstr "Dimensione originale (potrebbero essere file molto grandi)"
+
+#: ../src/ui/mail_dialog.ui.h:21
+msgid "Small"
+msgstr "Piccole"
+
+#: ../src/ui/mail_dialog.ui.h:22
+msgid ""
+"Specify if an original size picture should be rotated or not. Smaller sizes "
+"are automatically rotated."
+msgstr ""
+"Specificare se un'immagine di dimensione originale deve essere ruotata. Le "
+"fotografie di piccole dimensioni sono ruotate automaticamente."
+
+#: ../src/ui/mail_dialog.ui.h:23
+msgid "Tiny"
+msgstr "Minuscola"
+
+#: ../src/ui/mail_dialog.ui.h:24
+msgid "Total original size"
+msgstr "Dimensione originale"
+
+#: ../src/ui/mail_dialog.ui.h:25
+msgid "_Create Mail"
+msgstr "_Crea email"
+
#: ../src/ui/main_window.ui.h:1
msgid "Adjust _Time..."
msgstr "Regola da_ta..."
@@ -3535,8 +3537,8 @@ msgid "By _Rating"
msgstr "Per _valutazione"
#: ../src/ui/main_window.ui.h:7
-msgid "Copy Locat_ion"
-msgstr "Copia pos_izione"
+msgid "Copy"
+msgstr "Copia"
#: ../src/ui/main_window.ui.h:8
msgid "Create New _Tag..."
@@ -3547,199 +3549,211 @@ msgid "Create _New Version..."
msgstr "Crea _nuova versione..."
#: ../src/ui/main_window.ui.h:10
-msgid "F-Spot"
-msgstr "F-Spot"
+msgid "De_tach Version"
+msgstr "Dis_tacca versione"
-#: ../src/ui/main_window.ui.h:11
+#: ../src/ui/main_window.ui.h:12
msgid "Fin_d"
msgstr "Tr_ova"
-#: ../src/ui/main_window.ui.h:12
+#: ../src/ui/main_window.ui.h:13
msgid "Manage _Extensions"
msgstr "Gestisci estensi_oni"
-#: ../src/ui/main_window.ui.h:13
+#: ../src/ui/main_window.ui.h:14
msgid "Page Set_up..."
msgstr "Impostazioni pa_gina"
-#: ../src/ui/main_window.ui.h:14
+#: ../src/ui/main_window.ui.h:15
msgid "Re_fresh Thumbnail"
msgstr "A_ggiorna miniatura"
#: ../src/ui/main_window.ui.h:19
+msgid "Select _All"
+msgstr "Selezion_a tutto"
+
+#: ../src/ui/main_window.ui.h:20
msgid "Select _None"
msgstr "Annu_lla selezione"
-#: ../src/ui/main_window.ui.h:20
+#: ../src/ui/main_window.ui.h:21
msgid "Send by _Mail..."
msgstr "Invia per emai_l..."
-#: ../src/ui/main_window.ui.h:22
+#: ../src/ui/main_window.ui.h:23
msgid "Side_bar"
msgstr "Riquadro _laterale"
-#: ../src/ui/main_window.ui.h:23
+#: ../src/ui/main_window.ui.h:24
msgid "T_ags"
msgstr "_Etichette"
-#: ../src/ui/main_window.ui.h:25
+#: ../src/ui/main_window.ui.h:26
msgid "Thumbnail _elements"
msgstr "Elementi _miniature"
-#: ../src/ui/main_window.ui.h:26
+#: ../src/ui/main_window.ui.h:27
msgid "Too_lbar"
msgstr "Barra degli _strumenti"
-#: ../src/ui/main_window.ui.h:27
+#: ../src/ui/main_window.ui.h:28
msgid "View"
msgstr "Visualizza"
#: ../src/ui/main_window.ui.h:33
+msgid "_Attach Tag"
+msgstr "_Attacca etichetta"
+
+#: ../src/ui/main_window.ui.h:34
msgid "_Attach Tag to Selection"
msgstr "_Attacca etichetta alla selezione"
-#: ../src/ui/main_window.ui.h:35
+#: ../src/ui/main_window.ui.h:36
msgid "_Clear Rating Filter"
msgstr "_Pulisci filtro valutazione"
-#: ../src/ui/main_window.ui.h:36
+#: ../src/ui/main_window.ui.h:37
msgid "_Clear Roll Filter"
msgstr "_Pulisci filtro rullino di importazione"
-#: ../src/ui/main_window.ui.h:37
-msgid "_Close"
-msgstr "_Chiudi"
-
-#: ../src/ui/main_window.ui.h:38
+#: ../src/ui/main_window.ui.h:39
msgid "_Components"
msgstr "_Componenti"
-#: ../src/ui/main_window.ui.h:39
+#: ../src/ui/main_window.ui.h:40
msgid "_Contents"
msgstr "_Sommario"
-#: ../src/ui/main_window.ui.h:40
+#: ../src/ui/main_window.ui.h:41
msgid "_Dates"
msgstr "_Date"
-#: ../src/ui/main_window.ui.h:42
+#: ../src/ui/main_window.ui.h:43
msgid "_Delete Selected Tag"
msgstr "El_imina etichette selezionate"
-#: ../src/ui/main_window.ui.h:43
+#: ../src/ui/main_window.ui.h:44
msgid "_Delete Version"
msgstr "Eli_mina versione"
-#: ../src/ui/main_window.ui.h:45
-msgid "_Edit Selected Tag..."
-msgstr "_Modifica etichetta selezionata..."
-
#: ../src/ui/main_window.ui.h:46
+msgid "_Edit Tag..."
+msgstr "_Modifica etichetta..."
+
+#: ../src/ui/main_window.ui.h:47
msgid "_Export to"
msgstr "E_sporta su"
-#: ../src/ui/main_window.ui.h:47
+#: ../src/ui/main_window.ui.h:48
msgid "_Filmstrip"
msgstr "Barra _miniature"
-#: ../src/ui/main_window.ui.h:50
+#: ../src/ui/main_window.ui.h:51
msgid "_Hidden"
msgstr "_Nascoste"
-#: ../src/ui/main_window.ui.h:51
+#: ../src/ui/main_window.ui.h:52
msgid "_Import..."
msgstr "_Importa..."
-#: ../src/ui/main_window.ui.h:52
+#: ../src/ui/main_window.ui.h:53
+msgid "_Invert Selection"
+msgstr "_Inverti selezione"
+
+#: ../src/ui/main_window.ui.h:54
msgid "_Large"
msgstr "_Grandi"
-#: ../src/ui/main_window.ui.h:53
+#: ../src/ui/main_window.ui.h:55
msgid "_Last Import Roll"
msgstr "_Ultimo rullino di importazione"
-#: ../src/ui/main_window.ui.h:54
+#: ../src/ui/main_window.ui.h:56
msgid "_Loupe"
msgstr "_Lente di ingrandimento"
-#: ../src/ui/main_window.ui.h:55
+#: ../src/ui/main_window.ui.h:57
msgid "_Medium"
msgstr "_Medie"
-#: ../src/ui/main_window.ui.h:57
+#: ../src/ui/main_window.ui.h:59
msgid "_Quit"
msgstr "_Esci"
-#: ../src/ui/main_window.ui.h:58
+#: ../src/ui/main_window.ui.h:60
msgid "_Ratings"
msgstr "_Valutazioni"
-#: ../src/ui/main_window.ui.h:60
+#: ../src/ui/main_window.ui.h:62
msgid "_Remove Tag From Selection"
msgstr "_Rimuovi etichetta dalla selezione"
-#: ../src/ui/main_window.ui.h:61
+#: ../src/ui/main_window.ui.h:63
msgid "_Rename Version"
msgstr "_Rinomina versione"
-#: ../src/ui/main_window.ui.h:62
+#: ../src/ui/main_window.ui.h:64
msgid "_Reverse Order"
msgstr "_Ordine inverso"
-#: ../src/ui/main_window.ui.h:63
+#: ../src/ui/main_window.ui.h:65
msgid "_Select Import Rolls..."
msgstr "Selezionare i rullini di _importazione..."
-#: ../src/ui/main_window.ui.h:64
+#: ../src/ui/main_window.ui.h:66
msgid "_Set Date Range..."
msgstr "Imposta intervallo _data..."
-#: ../src/ui/main_window.ui.h:65
+#: ../src/ui/main_window.ui.h:67
msgid "_Set Rating filter..."
msgstr "Imposta intervallo _valutazione..."
-#: ../src/ui/main_window.ui.h:66
+#: ../src/ui/main_window.ui.h:68
msgid "_Sharpen..."
msgstr "_Nitidezza..."
-#: ../src/ui/main_window.ui.h:68
+#: ../src/ui/main_window.ui.h:70
msgid "_Small"
msgstr "_Piccole"
-#: ../src/ui/main_window.ui.h:69
+#: ../src/ui/main_window.ui.h:71
msgid "_Tag Icons"
msgstr "Ico_ne etichette"
-#: ../src/ui/main_window.ui.h:70
+#: ../src/ui/main_window.ui.h:72
msgid "_Tags"
msgstr "_Etichette"
-#: ../src/ui/main_window.ui.h:71
+#: ../src/ui/main_window.ui.h:73
msgid "_Timeline"
msgstr "Linea _temporale"
-#: ../src/ui/main_window.ui.h:72
+#: ../src/ui/main_window.ui.h:74
msgid "_Tools"
msgstr "_Strumenti"
-#: ../src/ui/main_window.ui.h:73
+#: ../src/ui/main_window.ui.h:75
msgid "_Untagged Photos"
msgstr "_Foto senza etichetta"
-#: ../src/ui/main_window.ui.h:74
+#: ../src/ui/main_window.ui.h:76
msgid "_Version"
msgstr "_Versione"
-#: ../src/Updater.cs:616
+#: ../src/Updater.cs:724
msgid "Updating F-Spot Database"
msgstr "Aggiornamento database di F-Spot"
-#: ../src/Updater.cs:617
-msgid "Please wait while your F-Spot gallery's database is updated. This may take some time."
-msgstr "Attendere mentre il database di F-Spot viene aggiornato. Potrebbe richiedere alcuni minuti."
+#: ../src/Updater.cs:725
+msgid ""
+"Please wait while your F-Spot gallery's database is updated. This may take "
+"some time."
+msgstr ""
+"Attendere mentre il database di F-Spot viene aggiornato. Potrebbe richiedere "
+"alcuni minuti."
#. Mono.Unix.Error error = Mono.Unix.Stdlib.GetLastError ();
-#: ../src/Utils/Unix.cs:35
+#: ../src/Utils/Unix.cs:36
msgid "Unable to create temporary file"
msgstr "Impossibile creare il file temporaneo"
@@ -3772,7 +3786,7 @@ msgstr "Stampa linee di ritaglio"
#: ../src/Widgets/CustomPrintWidget.cs:158
msgid "Photos layout"
-msgstr "Foto"
+msgstr "Disposizione foto"
#: ../src/Widgets/CustomPrintWidget.cs:160
msgid "Full Page (no margin)"
@@ -3823,92 +3837,113 @@ msgstr "Stampa etichette foto"
msgid "Print photo comment"
msgstr "Commento di stampa"
-#: ../src/Widgets/EditorPage.cs:29
-#: ../src/Widgets/Sidebar.cs:62
+#: ../src/Widgets/EditorPage.cs:31 ../src/Widgets/Sidebar.cs:54
msgid "Edit"
msgstr "Modifica"
-#: ../src/Widgets/EditorPage.cs:197
-msgid "This tool requires an active selection. Please select a region of the photo and try the operation again"
-msgstr "Questo strumento richiede una selezione attiva. Selezionare una regione della fotografia e riprovare l'azione"
+#: ../src/Widgets/EditorPage.cs:199
+msgid ""
+"This tool requires an active selection. Please select a region of the photo "
+"and try the operation again"
+msgstr ""
+"Questo strumento richiede una selezione attiva. Selezionare una regione "
+"della fotografia e riprovare l'azione"
-#: ../src/Widgets/EditorPage.cs:215
+#: ../src/Widgets/EditorPage.cs:217
msgid "Error saving adjusted photo"
msgid_plural "Error saving adjusted photos"
msgstr[0] "Errore nel salvare la fotografia modificata"
msgstr[1] "Errore nel salvare le fotografie modificate"
-#: ../src/Widgets/EditorPage.cs:217
+#: ../src/Widgets/EditorPage.cs:219
#, csharp-format
-msgid "Received exception \"{0}\". Note that you have to develop RAW files into JPEG before you can edit them."
-msgstr "Ricevuta eccezione «{0}». Attenzione che è necessario sviluppare i file RAW in JPEG prima di poterli modificare."
+msgid ""
+"Received exception \"{0}\". Note that you have to develop RAW files into "
+"JPEG before you can edit them."
+msgstr ""
+"Ricevuta eccezione «{0}». Attenzione che è necessario sviluppare i file RAW "
+"in JPEG prima di poterli modificare."
-#: ../src/Widgets/Filmstrip.cs:572
+#: ../src/Widgets/Filmstrip.cs:573
msgid "_Horizontal"
msgstr "_Orizzontale"
-#: ../src/Widgets/Filmstrip.cs:576
+#: ../src/Widgets/Filmstrip.cs:577
msgid "_Vertical"
msgstr "_Verticale"
-#: ../src/Widgets/FindBar.cs:58
+#: ../src/Widgets/FindBar.cs:59
msgid "Find:"
msgstr "Trova:"
-#: ../src/Widgets/FolderTreePage.cs:21
+#: ../src/Widgets/FolderTreePage.cs:22
msgid "Folders"
msgstr "Cartelle"
-#: ../src/Widgets/FolderTreeView.cs:123
+#: ../src/Widgets/FolderTreeView.cs:127
msgid "Filesystem"
msgstr "File system"
-#: ../src/Widgets/InfoBox.cs:182
+#: ../src/Widgets/InfoBox.cs:183
msgid "Histogram"
msgstr "Istogramma"
-#: ../src/Widgets/InfoBox.cs:217
+#: ../src/Widgets/InfoBox.cs:216
+msgid "Version"
+msgstr "Versione"
+
+#: ../src/Widgets/InfoBox.cs:219
msgid "Date"
msgstr "Data"
-#: ../src/Widgets/InfoBox.cs:223
+#: ../src/Widgets/InfoBox.cs:225
msgid "Exposure"
msgstr "Esposizione"
-#: ../src/Widgets/InfoBox.cs:227
+#: ../src/Widgets/InfoBox.cs:229
msgid "Focal Length"
msgstr "Lunghezza focale"
-#: ../src/Widgets/InfoBox.cs:233
+#: ../src/Widgets/InfoBox.cs:232
+msgid "Camera"
+msgstr "Fotocamera"
+
+#: ../src/Widgets/InfoBox.cs:235
msgid "File Size"
msgstr "Dimensione file"
-#: ../src/Widgets/InfoBox.cs:236
+#: ../src/Widgets/InfoBox.cs:238
msgid "Rating"
msgstr "Valutazione"
-#: ../src/Widgets/InfoBox.cs:409
-#: ../src/Widgets/InfoBox.cs:432
-#: ../src/Widgets/InfoBox.cs:442
-#: ../src/Widgets/InfoBox.cs:451
+#: ../src/Widgets/InfoBox.cs:391 ../src/Widgets/InfoBox.cs:399
+#: ../src/Widgets/InfoBox.cs:429
+msgid "(wrong format)"
+msgstr "(formato errato)"
+
+#: ../src/Widgets/InfoBox.cs:419 ../src/Widgets/InfoBox.cs:442
+#: ../src/Widgets/InfoBox.cs:452 ../src/Widgets/InfoBox.cs:461
msgid "(Unknown)"
msgstr "(Sconosciuto)"
-#: ../src/Widgets/InfoBox.cs:419
-msgid "(wrong format)"
-msgstr "(formato errato)"
+#: ../src/Widgets/InfoBox.cs:564
+#, csharp-format
+msgid "(One Edit)"
+msgid_plural "({0} Edits)"
+msgstr[0] "(Una modifica)"
+msgstr[1] "({0} modifiche)"
-#: ../src/Widgets/InfoBox.cs:558
+#: ../src/Widgets/InfoBox.cs:578
msgid "(File read error)"
msgstr "(Errore lettura file)"
-#: ../src/Widgets/InfoBox.cs:603
+#: ../src/Widgets/InfoBox.cs:623
#, csharp-format
msgid "{0} Photos"
msgstr "{0} foto"
#. Note for translators: {0} is a date, {1} and {2} are times.
-#: ../src/Widgets/InfoBox.cs:623
+#: ../src/Widgets/InfoBox.cs:643
#, csharp-format
msgid ""
"On {0} between \n"
@@ -3917,7 +3952,7 @@ msgstr ""
"Il {0} tra \n"
"le {1} e le {2}"
-#: ../src/Widgets/InfoBox.cs:628
+#: ../src/Widgets/InfoBox.cs:648
#, csharp-format
msgid ""
"Between {0} \n"
@@ -3926,61 +3961,61 @@ msgstr ""
"Tra {0} \n"
"e {1}"
-#: ../src/Widgets/InfoBox.cs:655
+#: ../src/Widgets/InfoBox.cs:675
msgid "(At least one File not found)"
msgstr "(Almeno un file non trovato)"
-#: ../src/Widgets/InfoBox.cs:772
+#: ../src/Widgets/InfoBox.cs:792
msgid "Show Photo Name"
msgstr "Mostra nome foto"
-#: ../src/Widgets/InfoBox.cs:781
+#: ../src/Widgets/InfoBox.cs:801
msgid "Show Date"
msgstr "Mostra data"
-#: ../src/Widgets/InfoBox.cs:790
+#: ../src/Widgets/InfoBox.cs:810
msgid "Show Size"
msgstr "Mostra dimensione"
-#: ../src/Widgets/InfoBox.cs:799
+#: ../src/Widgets/InfoBox.cs:819
msgid "Show Exposure"
msgstr "Mostra esposizione"
-#: ../src/Widgets/InfoBox.cs:808
+#: ../src/Widgets/InfoBox.cs:828
msgid "Show Focal Length"
msgstr "Mostra lunghezza focale"
-#: ../src/Widgets/InfoBox.cs:817
+#: ../src/Widgets/InfoBox.cs:837
msgid "Show Camera"
msgstr "Mostra fotocamera"
-#: ../src/Widgets/InfoBox.cs:826
+#: ../src/Widgets/InfoBox.cs:846
msgid "Show File Size"
msgstr "Mostra dimensione file"
-#: ../src/Widgets/MetadataDisplay.cs:23
+#: ../src/Widgets/MetadataDisplay.cs:25
msgid "Metadata"
msgstr "Metadati"
-#: ../src/Widgets/MetadataDisplay.cs:104
+#: ../src/Widgets/MetadataDisplay.cs:106
msgid "Extended Metadata"
msgstr "Metadati estesi"
#. clear Extended Metadata
-#: ../src/Widgets/MetadataDisplay.cs:392
+#: ../src/Widgets/MetadataDisplay.cs:394
msgid "No Extended Metadata Available"
msgstr "Metadati estesi non disponibili"
-#: ../src/Widgets/MetadataDisplay.cs:410
+#: ../src/Widgets/MetadataDisplay.cs:412
msgid "No active photo"
msgstr "Nessuna foto attiva"
-#: ../src/Widgets/MetadataDisplay.cs:412
+#: ../src/Widgets/MetadataDisplay.cs:414
#, csharp-format
msgid "The photo \"{0}\" does not exist"
msgstr "La fotografia «{0}» non esiste"
-#: ../src/Widgets/MetadataDisplay.cs:415
+#: ../src/Widgets/MetadataDisplay.cs:417
msgid "No metadata available"
msgstr "Metadati non disponibili"
@@ -3988,7 +4023,7 @@ msgstr "Metadati non disponibili"
msgid "No applications available"
msgstr "Nessuna applicazione disponibile"
-#: ../src/Widgets/RatingMenuItem.cs:56
+#: ../src/Widgets/RatingMenuItem.cs:57
msgid "Rating:"
msgstr "Valutazione:"
@@ -4013,65 +4048,465 @@ msgstr "Visualizza una presentazione da F-Spot"
msgid "F-Spot photos"
msgstr "Fotografie di F-Spot"
+#~ msgid "Error: Error while transferring; Aborting"
+#~ msgstr "Errore: errore durante il trasferimento; operazione interrotta"
+
+#~ msgid "Error: File Already Exists; Aborting"
+#~ msgstr "Errore: il file esiste già; operazione interrotta"
+
+#~ msgid "Package"
+#~ msgstr "Pacchetto"
+
+#~ msgid "Extension Installation"
+#~ msgstr "Installazione estensione"
+
+#~ msgid "<b>Select the extensions to install and click on Next</b>"
+#~ msgstr ""
+#~ "<b>Selezionare le estensioni da installare e fare clic su «Avanti»</b>"
+
+#~ msgid "Install from:"
+#~ msgstr "Installa da:"
+
+#~ msgid "_Repositories..."
+#~ msgstr "_Repository..."
+
+#~ msgid "Show all packages"
+#~ msgstr "Mostra tutti i pacchetti"
+
+#~ msgid "Show new versions only"
+#~ msgstr "Mostra solo le nuove versioni"
+
+#~ msgid "Show updates only"
+#~ msgstr "Mostra solo gli aggiornamenti"
+
+#~ msgid "_Unselect All"
+#~ msgstr "_Deseleziona tutto"
+
+#~ msgid "label124"
+#~ msgstr "label124"
+
+#~ msgid "Overall Progress:"
+#~ msgstr "Avanzamento complessivo:"
+
+#~ msgid "Downloading extensions..."
+#~ msgstr "Scaricamento estensioni..."
+
+#~ msgid "Extension Manager"
+#~ msgstr "Gestore estensioni"
+
+#~ msgid "Additional extensions are required to perform this operation."
+#~ msgstr ""
+#~ "Sono richieste estensioni aggiuntive per eseguire questa operazione."
+
+#~ msgid "The following extensions will be installed:"
+#~ msgstr "Le seguenti estensioni saranno installate:"
+
+#~ msgid "<big><b>Extension Manager</b></big>"
+#~ msgstr "<big><b>Gestore estensioni</b></big>"
+
+#~ msgid "The following extensions are currently installed:"
+#~ msgstr "Le seguenti estensioni sono attualmente installate:"
+
+#~ msgid "_Install Extensions..."
+#~ msgstr "_Installa estensioni..."
+
+#~ msgid "_Uninstall..."
+#~ msgstr "_Disinstalla..."
+
+#~ msgid "Enable"
+#~ msgstr "Abilita"
+
+#~ msgid "Disable"
+#~ msgstr "Disabilita"
+
+#~ msgid "Details"
+#~ msgstr "Dettagli"
+
+#~ msgid "Extension Repository Management"
+#~ msgstr "Gestione repository delle estensioni"
+
+#~ msgid "Add New Repository"
+#~ msgstr "Aggiungi nuovo repository"
+
+#~ msgid "Select the location of the repository you want to register:"
+#~ msgstr "Selezionare la posizione del repository da registrare:"
+
+#~ msgid "Register an on-line repository"
+#~ msgstr "Registra un repository on-line"
+
+#~ msgid "Url:"
+#~ msgstr "Url:"
+
+#~ msgid "Register a local repository"
+#~ msgstr "Registra un repository locale"
+
+#~ msgid "Path:"
+#~ msgstr "Percorso:"
+
+#~ msgid "Browse..."
+#~ msgstr "Esplora..."
+
+#~ msgid "Version:"
+#~ msgstr "Versione:"
+
+#~ msgid "Author:"
+#~ msgstr "Autore:"
+
+#~ msgid "Copyright:"
+#~ msgstr "Copyright:"
+
+#~ msgid "Extension Dependencies:"
+#~ msgstr "Dipendenze estensione:"
+
+#~ msgid "All registered repositories"
+#~ msgstr "Tutti i repository registrati"
+
+#~ msgid "Are you sure you want to cancel the installation?"
+#~ msgstr "Annullare veramente l'installazione?"
+
+#~ msgid "The following packages will be uninstalled:"
+#~ msgstr "I seguenti pacchetti saranno disinstallati:"
+
+#~ msgid ""
+#~ "There are other extensions that depend on the previous ones which will "
+#~ "also be uninstalled:"
+#~ msgstr ""
+#~ "Saranno disinstallate anche altre estensioni che dipendono da quelle "
+#~ "precedenti:"
+
+#~ msgid ""
+#~ "The selected extensions can't be installed because there are dependency "
+#~ "conflicts."
+#~ msgstr ""
+#~ "Le estensioni selezionate non possono essere installate perché ci sono "
+#~ "conflitti nelle dipendenze."
+
+#~ msgid "The following packages will be installed:"
+#~ msgstr "I seguenti pacchetti saranno installati:"
+
+#~ msgid " (in user directory)"
+#~ msgstr " (nella directory utente)"
+
+#~ msgid "The following packages need to be uninstalled:"
+#~ msgstr "È necessario disinstallare i seguenti pacchetti:"
+
+#~ msgid "The following dependencies could not be resolved:"
+#~ msgstr "Impossibile risolvere le seguenti dipendenze:"
+
+#~ msgid "The installation has been successfully completed."
+#~ msgstr "L'installazione è stata completata con successo."
+
+#~ msgid "The installation failed!"
+#~ msgstr "Installazione non riuscita!"
+
+#~ msgid "The installation has completed with warnings."
+#~ msgstr "L'installazione è stata completata con degli avvisi."
+
+#~ msgid "The uninstallation has been successfully completed."
+#~ msgstr "La disinstallazione è stata completata con successo."
+
+#~ msgid "The uninstallation failed!"
+#~ msgstr "La disinstallazione non è riuscita!"
+
+#~ msgid "The uninstallation has completed with warnings."
+#~ msgstr "La disinstallazione è stata completata con degli avvisi."
+
+#~ msgid "Repository"
+#~ msgstr "Repository"
+
+#~ msgid "Installation cancelled"
+#~ msgstr "Installazione annullata"
+
+#~ msgid "Some of the required extensions were not found"
+#~ msgstr "Alcune delle estensioni richieste non sono state trovate"
+
+#~ msgid "Installation failed"
+#~ msgstr "Installazione non riuscita"
+
+#~ msgid "Extension"
+#~ msgstr "Estensione"
+
+#~ msgid "Other"
+#~ msgstr "Altri"
+
+#~ msgid "Url"
+#~ msgstr "Url"
+
+#~ msgid "Exception occurred: {0}"
+#~ msgstr "Eccezione occorsa: {0}"
+
+#~ msgid "Disabled extensions can't be loaded."
+#~ msgstr "Le estensioni disabilitate non possono essere caricate."
+
+#~ msgid "Loading {0} extension"
+#~ msgstr "Caricamento dell'estensione {0}"
+
+#~ msgid "The required extension '{0}' is disabled."
+#~ msgstr "L'estensione richiesta «{0}» è disabilitata."
+
+#~ msgid "The required extension '{0}' is not installed."
+#~ msgstr "L'estensione richiesta «{0}» non è installata."
+
+#~ msgid "(provided by {0})"
+#~ msgstr "(fornito da {0})"
+
+#~ msgid "Preview"
+#~ msgstr "Anteprima"
+
+#~ msgid "Path"
+#~ msgstr "Percorso"
+
+#~ msgid "File"
+#~ msgstr "File"
+
+#~ msgid "Select Tag"
+#~ msgstr "Seleziona etichetta"
+
+#~ msgid "Downloading Previews"
+#~ msgstr "Scaricamento anteprime"
+
+#~ msgid "Downloading Preview of {0}"
+#~ msgstr "Scaricamento anteprima di {0}"
+
+#~ msgid "Copying file {0} of {1}"
+#~ msgstr "Copia del file {0} di {1}"
+
+#~ msgid "Error transferring file"
+#~ msgstr "Errore nel trasferire il file"
+
+#~ msgid "Done Copying Files"
+#~ msgstr "Copia dei file completata"
+
+#~ msgid "Download Complete"
+#~ msgstr "Scaricamento completato"
+
+#~ msgid "Transferring \"{0}\" from camera"
+#~ msgstr "Trasferimento di «{0}» dalla fotocamera"
+
+#~ msgid "Port"
+#~ msgstr "Porta"
+
+#~ msgid "Reparented ({0})"
+#~ msgstr "Riassegnata ({0})"
+
+#~ msgid "Import error"
+#~ msgstr "Errore di importazione"
+
+#~ msgid "Error importing {0}{2}{2}{1}"
+#~ msgstr "Errore nell'importare {0}{2}{2}{1}"
+
+#~ msgid " "
+#~ msgstr " "
+
+#~ msgid "<b></b>"
+#~ msgstr "<b></b>"
+
+#~ msgid "Attach tag:"
+#~ msgstr "Attacca etichetta:"
+
+#~ msgid "CD"
+#~ msgstr "CD"
+
+#~ msgid "E-_Mail:"
+#~ msgstr "E_mail:"
+
+#~ msgid "E_xport titles and comments"
+#~ msgstr "E_sporta titoli e commenti"
+
+#~ msgid "G_allery:"
+#~ msgstr "G_alleria:"
+
+#~ msgid "Gallery"
+#~ msgstr "Galleria"
+
+#~ msgid "Pause"
+#~ msgstr "Pausa"
+
+#~ msgid "Select Photos to Copy From Camera..."
+#~ msgstr "Seleziona le foto da copiare dalla fotocamera..."
+
+#~ msgid "Select the camera from which you want to transfer files"
+#~ msgstr "Selezionare la fotocamera da cui si desidera trasferire i file"
+
+#~ msgid "Selected Camera: "
+#~ msgstr "Fotocamera selezionata: "
+
+#~ msgid "Strip image _metadata"
+#~ msgstr "Togli _metadati dall'immagine"
+
+#~ msgid "_Flickr"
+#~ msgstr "_Flickr"
+
+#~ msgid "_Gallery"
+#~ msgstr "_Galleria"
+
+#~ msgid "_Open album in browser when done uploading"
+#~ msgstr "_Apri l'album nel browser a caricamento completato"
+
+#~ msgid "_Open destination when done exporting"
+#~ msgstr "_Apri la destinazione a esportazione completata"
+
+#~ msgid "_Scale photos to no larger than: "
+#~ msgstr "_Scala le foto a non più grandi di: "
+
+#~ msgid "_Strip metadata"
+#~ msgstr "_Togli metadati"
+
+#~ msgid "_URI:"
+#~ msgstr "_URI:"
+
+#~ msgid "_Virtual Filesystem"
+#~ msgstr "File system _virtuale"
+
+#~ msgid "x"
+#~ msgstr "×"
+
+#~ msgid "Loading {0} of {1}"
+#~ msgstr "Caricamento {0} di {1}"
+
+#~ msgid "Done Loading"
+#~ msgstr "Caricamento completato"
+
+#~ msgid "Directory does not exist."
+#~ msgstr "La directory non esiste."
+
+#~ msgid ""
+#~ "The directory you selected \"{0}\" does not exist. Please choose a "
+#~ "different directory"
+#~ msgstr ""
+#~ "La directory «{0}» selezionata non esiste. Scegliere un'altra directory"
+
+#~ msgid "No cameras detected."
+#~ msgstr "Nessuna fotocamera rilevata."
+
+#~ msgid ""
+#~ "F-Spot was unable to find any cameras attached to this system. Double "
+#~ "check that the camera is connected and has power"
+#~ msgstr ""
+#~ "Non è stata rilevata alcuna fotocamera collegata al sistema. Controllare "
+#~ "che la fotocamera sia collegata e accesa"
+
+#~ msgid "Error connecting to camera"
+#~ msgstr "Errore nella connessione alla fotocamera"
+
+#~ msgid "Received error \"{0}\" while connecting to camera"
+#~ msgstr "Ricevuto l'errore «{0}» durante la connessione alla fotocamera"
+
+#~ msgid "Could not create a new version"
+#~ msgstr "Impossibile creare una nuova versione"
+
+#~ msgid "Received exception \"{0}\". Unable to create version \"{1}\""
+#~ msgstr "Ricevuta l'eccezione «{0}». Impossibile creare la versione «{1}»"
+
+#~ msgid "Really Delete?"
+#~ msgstr "Eliminare veramente?"
+
+#~ msgid "Cancel"
+#~ msgstr "Annulla"
+
+#~ msgid "Could not delete a version"
+#~ msgstr "Impossibile eliminare una versione"
+
+#~ msgid "Received exception \"{0}\". Unable to delete version \"{1}\""
+#~ msgstr "Ricevuta l'eccezione «{0}». Impossibile eliminare la versione «{1}»"
+
+#~ msgid "Could not rename a version"
+#~ msgstr "Impossibile rinominare una versione"
+
+#~ msgid "Received exception \"{0}\". Unable to rename version to \"{1}\""
+#~ msgstr ""
+#~ "Ricevuta l'eccezione «{0}». Impossibile rinominare la versione in «{1}»"
+
+#~ msgid "my photos"
+#~ msgstr "Le mie foto"
+
+#~ msgid "Edit Selected Tag..."
+#~ msgstr "Modifica etichetta selezionata..."
+
+#~ msgid "Copy Locat_ion"
+#~ msgstr "Copia pos_izione"
+
+#~ msgid "_Edit Selected Tag..."
+#~ msgstr "_Modifica etichetta selezionata..."
+
#, fuzzy
#~ msgid "gtk-close"
#~ msgstr "Annulla"
-#~ msgid "(One Edit)"
-#~ msgid_plural "({0} Edits)"
-#~ msgstr[0] "(Una modifica)"
-#~ msgstr[1] "({0} modifiche)"
+
#~ msgid "Dissolve"
#~ msgstr "Dissolvenza"
+
#~ msgid "Flip"
#~ msgstr "Rotazione"
+
#~ msgid "Cover"
#~ msgstr "Copertura"
+
#~ msgid "Reveal"
#~ msgstr "Rivelazione"
+
#~ msgid "Wipe"
#~ msgstr "Pulizia"
+
#~ msgid "Split"
#~ msgstr "Divisione"
+
#~ msgid "Push"
#~ msgstr "Spinta"
+
#~ msgid "interpolation type"
#~ msgstr "tipo di interpolazione"
+
#~ msgid "the type of interpolation to use"
#~ msgstr "il tipo di interpolazione da utilizzare"
+
#~ msgid "check type"
#~ msgstr "tipo di scacchiera"
# (NdT) chequer -> quadrettare... ?!?
#~ msgid "the type of chequering to use"
#~ msgstr "il tipo di scacchiera da utilizzare"
+
#~ msgid "the size of chequers to use"
#~ msgstr "la dimensione della scacchiera da utilizzare"
+
#~ msgid "dither"
#~ msgstr "retinatura"
+
#~ msgid "dither type"
#~ msgstr "tipo di retinatura"
+
#~ msgid "More directories"
#~ msgstr "Altre directory"
+
#~ msgid "Arrange by _Month"
#~ msgstr "Ordina per _mese"
+
#~ msgid "Arrange by _Folder"
#~ msgstr "Ordina per ca_rtella"
+
#~ msgid "Tag Name:"
#~ msgstr "Nome etichetta:"
+
#~ msgid "<b>Color Management</b>"
#~ msgstr "<b>Gestione colori</b>"
+
#~ msgid "<b>Metadata</b>"
#~ msgstr "<b>Metadati</b>"
+
#~ msgid "<b>Screensaver</b>"
#~ msgstr "<b>Salvaschermo</b>"
+
#~ msgid "<b>Theming</b>"
#~ msgstr "<b>Temi</b>"
+
#~ msgid ""
#~ "<small><i>Choose the folder where F-Spot should store newly imported "
#~ "photos</i></small>"
#~ msgstr ""
#~ "<small><i>Scegliere la cartella in cui salvare le nuove fotografie "
#~ "importate</i></small>"
+
#~ msgid ""
#~ "<small><i>Enable this option to store tags and descriptions inside \n"
#~ "supported image formats.</i></small>"
@@ -4079,6 +4514,7 @@ msgstr "Fotografie di F-Spot"
#~ "<small><i>Abilitare questa opzione per archiviare le etichette e le "
#~ "descrizioni all'interno \n"
#~ "delle immagini per i formati che le supportano.</i></small>"
+
#~ msgid ""
#~ "<small><i>While acting as a screensaver, F-Spot can display all of your "
#~ "images, or a small subset based on tags.</i></small>"
@@ -4086,45 +4522,62 @@ msgstr "Fotografie di F-Spot"
#~ "<small><i>Quando impostato come salva schermo, F-Spot può visualizzare "
#~ "tutte le tue immagini, oppure un gruppo ridotto basato sulle etichette.</"
#~ "i></small>"
+
#~ msgid ""
#~ "<small><i>You'll have to restart F-Spot to load the new theme.</i></small>"
#~ msgstr ""
#~ "<small><i>Sarà necessario riavviare F-Spot per utilizzare il nuovo tema.</"
#~ "i></small>"
+
#~ msgid "Custom Theme"
#~ msgstr "Tema personalizzato"
+
#~ msgid "From List:"
#~ msgstr "Da lista:"
+
#~ msgid "From gtkrc File:"
#~ msgstr "Da file gtkrc:"
+
#~ msgid "Select A gtkrc File"
#~ msgstr "Seleziona un file gtkrc"
+
#~ msgid "Try to use the system display profile"
#~ msgstr "Prova ad utilizzare il profilo di visualizzazione di sistema"
+
#~ msgid "Write _metadata to file"
#~ msgstr "Scrivi _metadati su file"
+
#~ msgid "_Print output:"
#~ msgstr "_Stampa:"
+
#~ msgid ""
#~ "The \"F-Spot Manual\" could not be found. Please verify that your "
#~ "installation has been completed successfully."
#~ msgstr ""
#~ "Il manuale di F-Spot non è stato trovato. Verificare che l'installazione "
#~ "sia stata completata correttamente."
+
#~ msgid "Picasaweb"
#~ msgstr "Picasaweb"
+
#~ msgid "SmugMug"
#~ msgstr "SmugMug"
+
#~ msgid "Gallery2"
#~ msgstr "Gallery2"
+
#~ msgid "1 of 1"
#~ msgstr "1 di 1"
+
#~ msgid "_Folder"
#~ msgstr "_Cartella"
+
#~ msgid "_Month"
#~ msgstr "_Mese"
+
#~ msgid "img_000.jpg"
#~ msgstr "img_000.jpg"
+
#~ msgid ""
#~ "F-Spot will now launch your browser so that you can log into Facebook. "
#~ "Turn on the \"Save my login information\" checkbox on Facebook and F-Spot "
@@ -4133,85 +4586,111 @@ msgstr "Fotografie di F-Spot"
#~ "F-Spot avvierà ora il browser web per effettuare l'accesso a Facebook. "
#~ "Abilitare l'opzione «Salva le mie informazioni di login» in Facebook per "
#~ "permettere ad F-Spot di effettuare l'accesso automaticamente d'ora in poi."
+
#~ msgid "This is who I am"
#~ msgstr "Questo è chi sono io"
+
#~ msgid "Create p_hotomosaic"
#~ msgstr "Crea foto_mosaico"
+
#~ msgid "Metapixel not available"
#~ msgstr "Metapixel non disponibile"
+
#~ msgid ""
#~ "The metapixel executable was not found in path. Please check that you "
#~ "have it installed and that you have permissions to execute it"
#~ msgstr ""
#~ "L'eseguibile «metapixel» non è stato trovato nel path. Verificare di "
#~ "averlo installato e di avere i permessi sufficienti all'esecuzione"
+
#~ msgid "No photos for the selection"
#~ msgstr "Nessuna foto per la selezione"
+
#~ msgid "The tags selected provided no pictures. Please select different tags"
#~ msgstr ""
#~ "Le etichette selezionate non identificano alcuna immagine. Selezionare "
#~ "altre etichette"
+
#~ msgid "Creating miniatures"
#~ msgstr "Creazione miniature"
+
#~ msgid "Creating photomosaics"
#~ msgstr "Creazione mosaici fotografici"
+
#~ msgid "Processing \"{0}\""
#~ msgstr "Elaborazione «{0}»"
+
#~ msgid "PhotoMosaics generated!"
#~ msgstr "Mosaici fotografici generati!"
+
#~ msgid "PhotoMosaic"
#~ msgid_plural "PhotoMosaic ({0})"
#~ msgstr[0] "FotoMosaico"
#~ msgstr[1] "FotoMosaico ({0})"
+
#~ msgid "Create photo_wall"
#~ msgstr "Crea _muro fotografico"
+
#~ msgid "PictureTile not available"
#~ msgstr "PictureTile non disponibile"
+
#~ msgid ""
#~ "The picturetile.pl executable was not found in path. Please check that "
#~ "you have it installed and that you have permissions to execute it"
#~ msgstr ""
#~ "L'eseguibile «picturetile.pl» non è stato trovato nel path. Verificare di "
#~ "averlo installato e di avere i permessi sufficienti all'esecuzione"
+
#~ msgid "Preparing selected pictures"
#~ msgstr "Preparazione immagini selezionate"
+
#~ msgid "PhotoWall generated!"
#~ msgstr "Muro fotografico generato!"
+
#~ msgid ""
#~ "Your photo wall have been generated and imported in F-Spot. Select the "
#~ "last roll to see it"
#~ msgstr ""
#~ "Il muro fotografico è stato generato ed importato in F-Spot. Selezionare "
#~ "l'ultimo rullino per visualizzarlo"
+
#~ msgid "Error importing photowall"
#~ msgstr "Errore durante l'importazione del muro fotografico"
+
#~ msgid ""
#~ "An error occurred while importing the newly generated photowall to F-Spot"
#~ msgstr ""
#~ "Si è verificato un errore all'interno di F-Spot durante l'importazione "
#~ "del muro fotografico appena generato"
+
#~ msgid "No image loaded."
#~ msgstr "Nessuna immagine caricata."
+
#~ msgid "Can't save non local files."
#~ msgstr "Impossibile salvare file non locali."
+
#~ msgid "Unsupported image type for saving."
#~ msgstr "Tipo di immagine non supportato per il salvataggio."
+
#~ msgid "<b>Photograph Layout</b>"
#~ msgstr "<b>Disposizione fotografia</b>"
+
#~ msgid "<b>Printer Details</b>"
#~ msgstr "<b>Dettagli stampante</b>"
-#~ msgid "C_aption:"
-#~ msgstr "Did_ascalia:"
+
#~ msgid "Co_nfigure"
#~ msgstr "Co_nfigura"
+
#~ msgid "Crop photo to _fit"
#~ msgstr "Ritaglia la _foto per adattarla"
+
#~ msgid ""
#~ "Full Page\n"
#~ "Standard - 4x6"
#~ msgstr ""
#~ "Pagina intera\n"
#~ "Standard - 10×15 (4×6)"
+
#~ msgid ""
#~ "Hairline\n"
#~ "0.25\"\n"
@@ -4222,8 +4701,10 @@ msgstr "Fotografie di F-Spot"
#~ "0,25\"\n"
#~ "0,5\n"
#~ "1\"\n"
+
#~ msgid "N_umber of Copies:"
#~ msgstr "N_umero di copie:"
+
#~ msgid ""
#~ "None\n"
#~ "Title\n"
@@ -4236,16 +4717,22 @@ msgstr "Fotografie di F-Spot"
#~ "Nome file\n"
#~ "Data\n"
#~ "Dettagli foto"
+
#~ msgid "P_hoto Source:"
#~ msgstr "S_orgente foto:"
+
#~ msgid "Page 1 of 3"
#~ msgstr "Pagina 1 di 3"
+
#~ msgid "Photo _Size:"
#~ msgstr "_Dimensione foto:"
+
#~ msgid "Print crop _marks"
#~ msgstr "Stampa li_nee di ritaglio"
+
#~ msgid "Print..."
#~ msgstr "Stampa..."
+
#~ msgid ""
#~ "Selection\n"
#~ "Gallery\n"
@@ -4254,25 +4741,33 @@ msgstr "Fotografie di F-Spot"
#~ "Selezione\n"
#~ "Galleria\n"
#~ "Vista attuale"
+
#~ msgid "Will print using: US Letter size on Generic Postscript"
#~ msgstr "Stampa utilizzando: dimensioni US Letter su Generic Postscript"
+
#~ msgid "_Border:"
#~ msgstr "_Bordo:"
+
#~ msgid "Available space:"
#~ msgstr "Spazio disponibile:"
+
#, fuzzy
#~ msgid "Copy images to Photos/"
#~ msgstr "Copia i file nella cartella delle foto"
+
#~ msgid "Metadata Browser"
#~ msgstr "Esplorazione metadati"
+
#~ msgid "Exported Locations"
#~ msgstr "Esportata su"
+
#~ msgid ""
#~ "From Screen\n"
#~ "Standard RGB"
#~ msgstr ""
#~ "Dallo schermo\n"
#~ "RGB standard"
+
#~ msgid ""
#~ "Standard RGB\n"
#~ "Image Profile\n"
@@ -4281,86 +4776,125 @@ msgstr "Fotografie di F-Spot"
#~ "RGB standard\n"
#~ "Profilo immagine\n"
#~ "Personalizzato\n"
+
#~ msgid "Automatically adjust the colors"
#~ msgstr "Regola automaticamente i colori"
+
#~ msgid "Apply straightening"
#~ msgstr "Applica raddrizzamento"
+
#~ msgid "Apply straightening to image"
#~ msgstr "Applica il raddrizzamento all'immagine"
+
#~ msgid "Adjust the angle of the image to straighten the horizon"
#~ msgstr "Regola l'inclinazione dell'immagine per raddrizzare l'orizzonte"
+
#~ msgid "Create a soft focus visual effect"
#~ msgstr "Crea un effetto di sfocatura leggera"
+
#~ msgid "Crop photo to selected area"
#~ msgstr "Ritaglia la foto all'area selezionata"
+
#~ msgid "Remove redeye from selected area"
#~ msgstr "Rimuovi occhi rossi dall'area selezionata"
+
#~ msgid "Select an area to remove redeye"
#~ msgstr "Selezionare un'area da cui rimuovere gli occhi rossi"
+
#~ msgid "Constrain the aspect ratio of the selection"
#~ msgstr "Vincola la proporzione della selezione"
+
#~ msgid "Reduce Red-Eye"
#~ msgstr "Riduzione occhi rossi"
+
#~ msgid "Adjust the photo colors"
#~ msgstr "Regola i colori della fotografia"
+
#~ msgid "Convert the photo to black and white"
#~ msgstr "Converte la fotografia in bianco e nero"
+
#~ msgid "Convert the photo to sepia tones"
#~ msgstr "Converte la fotografia in tonalità seppia"
+
#~ msgid "name"
#~ msgstr "nome"
+
#~ msgid "date"
#~ msgstr "data"
+
#~ msgid "size"
#~ msgstr "dimensione"
+
#~ msgid "<b>Color Temperature</b>"
#~ msgstr "<b>Temperatura colore</b>"
+
#~ msgid "<b>Exposure</b>"
#~ msgstr "<b>Esposizione</b>"
+
#~ msgid "<b>Histo_gram</b>"
#~ msgstr "<b>Isto_gramma</b>"
+
#~ msgid "<b>Interoperability</b>"
#~ msgstr "<b>Interoperabilità</b>"
+
#~ msgid "<small> </small>"
#~ msgstr "<small> </small>"
+
#~ msgid ""
#~ "<small><i>Enable this option if you want to allow other programs to "
#~ "import or delete photos and tags over DBus.</i></small>"
#~ msgstr ""
#~ "<small><i>Abilitare questa opzione per permettere ad altri programmi di "
#~ "importare o cancellare foto ed etichette tramite DBus.</i></small>"
+
#~ msgid "<small>C_ontrast:</small>"
#~ msgstr "<small>C_ontrasto:</small>"
+
#~ msgid "<small>Te_mp:</small>"
#~ msgstr "<small>Te_mperatura:</small>"
+
#~ msgid "<small>_Brightness:</small>"
#~ msgstr "<small>_Luminosità:</small>"
+
#~ msgid "<small>_Exposure:</small>"
#~ msgstr "<small>_Esposizione:</small>"
+
#~ msgid "<small>_Hue:</small>"
#~ msgstr "<small>T_onalità:</small>"
+
#~ msgid "<small>_Saturation:</small>"
#~ msgstr "<small>_Saturazione:</small>"
+
#~ msgid "<small>_Tint:</small>"
#~ msgstr "<small>_Tinta:</small>"
+
#~ msgid "Ad_just Color..."
#~ msgstr "Regola _colore..."
+
#~ msgid "Adjust Color"
#~ msgstr "Regola colore"
+
#~ msgid "Allow other programs to manipulate F-Spot"
#~ msgstr "Permetti ad altri programmi di manipolare F-Spot"
+
#~ msgid "So_urce Temp"
#~ msgstr "Temperat_ura sorgente"
+
#~ msgid "_Metadata Browser"
#~ msgstr "Esplorazione me_tadati"
+
#~ msgid "url"
#~ msgstr "url"
+
#~ msgid "token"
#~ msgstr "token"
+
#~ msgid "captcha_url"
#~ msgstr "captcha_url"
+
#~ msgid "Apply"
#~ msgstr "Applica"
+
#~ msgid " out of {0}"
#~ msgstr " di {0}"
@@ -4383,66 +4917,94 @@ msgstr "Fotografie di F-Spot"
#, fuzzy
#~ msgid "_Scale images"
#~ msgstr "Salva immagine"
+
#~ msgid "_File"
#~ msgstr "_File"
+
#~ msgid "By Extension"
#~ msgstr "Per estensione"
+
#~ msgid "BMP"
#~ msgstr "BMP"
+
#~ msgid "GIF"
#~ msgstr "GIF"
+
#~ msgid "ICO"
#~ msgstr "ICO"
+
#~ msgid "JPEG"
#~ msgstr "JPEG"
+
#~ msgid "PNG"
#~ msgstr "PNG"
+
#~ msgid "PNM"
#~ msgstr "PNM"
+
#~ msgid "RAS"
#~ msgstr "RAS"
+
#~ msgid "SVG"
#~ msgstr "SVG"
+
#~ msgid "TGA"
#~ msgstr "TGA"
+
#~ msgid "TIFF"
#~ msgstr "TIFF"
+
#~ msgid "XBM"
#~ msgstr "XBM"
+
#~ msgid "XPM"
#~ msgstr "XPM"
+
#~ msgid "Unsupported file format."
#~ msgstr "Formato di file non supportato."
+
#~ msgid "Determine File Type:"
#~ msgstr "Determinare il tipo di file:"
+
#~ msgid "Load Image"
#~ msgstr "Carica immagine"
+
#~ msgid "Unsharp Mask"
#~ msgstr "Maschera di nitidezza"
+
#~ msgid "_Unrated Photos"
#~ msgstr "Foto _senza valutazione"
+
#~ msgid "Add-in"
#~ msgstr "Add-in"
+
#~ msgid "Add-in Manager"
#~ msgstr "Gestore add-in"
+
#~ msgid "Attach Tag"
#~ msgstr "Attacca etichetta"
+
#~ msgid "Delete From Drive"
#~ msgstr "Elimina dall'unità"
+
#~ msgid "Remove From Catalog"
#~ msgstr "Rimuovi dal catalogo"
+
#~ msgid "Remove Tag"
#~ msgstr "Rimuovi etichetta"
+
#~ msgid "There was an error invoking the external handler"
#~ msgstr "Errore nell'invocare il gestore esterno"
+
#~ msgid "Received error:{1}\"{0}\"{1}"
#~ msgstr "Ricevuto errore:{1}«{0}»{1}"
+
#~ msgid "Help not found"
#~ msgstr "Aiuto non trovato"
#, fuzzy
#~ msgid "Beneath _Photos"
#~ msgstr "Sotto le _foto"
+
#~ msgid "Clea_r Date Range"
#~ msgstr "_Pulisci intervallo date"
-
diff --git a/po/nb.po b/po/nb.po
index 5c70cb8..8e7b909 100644
--- a/po/nb.po
+++ b/po/nb.po
@@ -9,8 +9,8 @@ msgid ""
msgstr ""
"Project-Id-Version: f-spot\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2010-03-28 13:37+0200\n"
-"PO-Revision-Date: 2010-03-28 13:44+0200\n"
+"POT-Creation-Date: 2010-06-16 00:20+0200\n"
+"PO-Revision-Date: 2010-06-16 00:21+0200\n"
"Last-Translator: Kjartan Maraas <kmaraas at gnome.org>\n"
"Language-Team: Norwegian Bokmal <i18n-nb at lister.ping.uio.no>\n"
"MIME-Version: 1.0\n"
@@ -18,13 +18,44 @@ msgstr ""
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
+#: ../data/desktop-files/f-spot.desktop.in.in.h:1
+#: ../data/desktop-files/f-spot-import.desktop.in.in.h:1
+#: ../data/desktop-files/f-spot-view.desktop.in.in.h:1
+#: ../src/ui/main_window.ui.h:11
+msgid "F-Spot"
+msgstr "F-Spot"
+
+#: ../data/desktop-files/f-spot.desktop.in.in.h:2
+#: ../data/desktop-files/f-spot-import.desktop.in.in.h:2
+msgid "F-Spot Photo Manager"
+msgstr "F-Spot bildebehandling"
+
+#: ../data/desktop-files/f-spot.desktop.in.in.h:3
+msgid "Organize, enjoy, and share your photos"
+msgstr "Organiser, verdsett og del bildene dine"
+
+#: ../data/desktop-files/f-spot.desktop.in.in.h:4
+#: ../data/desktop-files/f-spot-import.desktop.in.in.h:4
+msgid "Photo Manager"
+msgstr "Fotobehandler"
+
+#: ../data/desktop-files/f-spot-import.desktop.in.in.h:3
+msgid "Import into F-Spot"
+msgstr "Importer til F-Spot"
+
+#: ../data/desktop-files/f-spot-view.desktop.in.in.h:2
+msgid "F-Spot Photo Viewer"
+msgstr "F-spot bildebehandling"
+
+#: ../data/desktop-files/f-spot-view.desktop.in.in.h:3
+msgid "Photo Viewer"
+msgstr "Fotovisning"
+
#: ../extensions/Exporters/CDExport/CDExport.addin.xml.h:1
msgid "_CD..."
msgstr "_CD..."
#: ../extensions/Exporters/CDExport/CDExport.cs:162
-#: ../extensions/Exporters/FolderExport/FolderExport.cs:392
-#: ../src/CameraFileSelectionDialog.cs:199
msgid "Transferring Pictures"
msgstr "Overfører bilder"
@@ -35,37 +66,34 @@ msgstr "Overfører bilde «{0}» til CD"
#. Note for translators: This indicates the current photo is photo {0} of {1} out of photos
#: ../extensions/Exporters/CDExport/CDExport.cs:220
-#: ../extensions/Exporters/FlickrExport/FlickrExport.cs:349
-#: ../extensions/Exporters/FolderExport/FolderExport.cs:245
+#: ../extensions/Exporters/FlickrExport/FlickrExport.cs:350
+#: ../extensions/Exporters/FolderExport/FolderExport.cs:220
#: ../extensions/Exporters/GalleryExport/GalleryExport.cs:781
-#: ../src/MainWindow.cs:673 ../src/UI.Dialog/AdjustTimeDialog.cs:129
-#: ../src/UI.Dialog/ProgressDialog.cs:92
+#: ../src/MainWindow.cs:644 ../src/UI.Dialog/AdjustTimeDialog.cs:130
+#: ../src/UI.Dialog/ProgressDialog.cs:90
#, csharp-format
msgid "{0} of {1}"
msgstr "{0} av {1}"
#: ../extensions/Exporters/CDExport/CDExport.cs:233
-#: ../extensions/Exporters/FacebookExport/FacebookExport.cs:380
-#: ../extensions/Exporters/FlickrExport/FlickrExport.cs:379
-#: ../extensions/Exporters/FolderExport/FolderExport.cs:285
+#: ../extensions/Exporters/FacebookExport/FacebookExport.cs:377
+#: ../extensions/Exporters/FlickrExport/FlickrExport.cs:380
#: ../extensions/Exporters/GalleryExport/GalleryExport.cs:806
-#: ../extensions/Exporters/PicasaWebExport/PicasaWebExport.cs:704
+#: ../extensions/Exporters/PicasaWebExport/PicasaWebExport.cs:705
#: ../extensions/Exporters/SmugMugExport/SmugMugExport.cs:607
msgid "Done Sending Photos"
msgstr "Overføring av bilder fullført"
#: ../extensions/Exporters/CDExport/CDExport.cs:235
-#: ../extensions/Exporters/FolderExport/FolderExport.cs:287
msgid "Transfer Complete"
msgstr "Overføring fullført"
#: ../extensions/Exporters/CDExport/CDExport.cs:242
-#: ../extensions/Exporters/FolderExport/FolderExport.cs:292
msgid "Error While Transferring"
msgstr "Feil under overføring"
#: ../extensions/Exporters/CDExport/CDExport.cs:250
-#: ../extensions/Exporters/FolderExport/FolderExport.cs:311
+#: ../extensions/Exporters/FolderExport/FolderExport.cs:278
msgid "Error Transferring"
msgstr "Feil under overføring"
@@ -85,7 +113,7 @@ msgstr "<b>Bilder som skal skrives til CD</b>"
#: ../extensions/Exporters/FolderExport/FolderExport.glade.h:7
#: ../extensions/Exporters/GalleryExport/GalleryExport.glade.h:7
#: ../extensions/Exporters/SmugMugExport/SmugMugExport.glade.h:5
-#: ../src/f-spot.glade.h:28
+#: ../src/ui/mail_dialog.ui.h:10
msgid "Autorotate"
msgstr "Roter automatisk"
@@ -94,7 +122,7 @@ msgid "Create CD"
msgstr "Lag CD"
#: ../extensions/Exporters/CDExport/CDExport.ui.h:5
-#: ../src/Widgets/InfoBox.cs:221
+#: ../src/Widgets/InfoBox.cs:222
msgid "Size"
msgstr "Størrelse"
@@ -113,7 +141,7 @@ msgstr ""
#: ../extensions/Exporters/PicasaWebExport/PicasaWebExport.glade.h:20
#: ../extensions/Exporters/SmugMugExport/SmugMugExport.glade.h:12
#: ../extensions/Exporters/TabbloExport/ui/TabbloExport.ui.h:9
-#: ../src/f-spot.glade.h:95
+#: ../src/f-spot.glade.h:41
msgid "_Export"
msgstr "_Eksporter"
@@ -138,38 +166,30 @@ msgid ""
"\" below."
msgstr ""
-#: ../extensions/Exporters/FacebookExport/FacebookExport.cs:280
+#: ../extensions/Exporters/FacebookExport/FacebookExport.cs:281
msgid "Too many images to export"
msgstr ""
-#: ../extensions/Exporters/FacebookExport/FacebookExport.cs:281
+#: ../extensions/Exporters/FacebookExport/FacebookExport.cs:282
#, csharp-format
msgid ""
"Facebook only permits {0} photographs per album. Please refine your "
"selection and try again."
msgstr ""
-#: ../extensions/Exporters/FacebookExport/FacebookExport.cs:298
-#: ../extensions/Exporters/FlickrExport/FlickrExport.cs:475
-#: ../extensions/Exporters/GalleryExport/GalleryExport.cs:730
-#: ../extensions/Exporters/PicasaWebExport/PicasaWebExport.cs:597
-#: ../extensions/Exporters/SmugMugExport/SmugMugExport.cs:522
-msgid "Uploading Pictures"
-msgstr "Laster opp bilder"
-
-#: ../extensions/Exporters/FacebookExport/FacebookExport.cs:319
+#: ../extensions/Exporters/FacebookExport/FacebookExport.cs:297
msgid "Album must have a name"
msgstr ""
-#: ../extensions/Exporters/FacebookExport/FacebookExport.cs:320
+#: ../extensions/Exporters/FacebookExport/FacebookExport.cs:298
msgid "Please name your album or choose an existing album."
msgstr ""
-#: ../extensions/Exporters/FacebookExport/FacebookExport.cs:334
+#: ../extensions/Exporters/FacebookExport/FacebookExport.cs:312
msgid "Creating a new album failed"
msgstr ""
-#: ../extensions/Exporters/FacebookExport/FacebookExport.cs:335
+#: ../extensions/Exporters/FacebookExport/FacebookExport.cs:313
#, csharp-format
msgid ""
"An error occurred creating a new album.\n"
@@ -177,45 +197,53 @@ msgid ""
"{0}"
msgstr ""
-#: ../extensions/Exporters/FacebookExport/FacebookExport.cs:357
-#: ../extensions/Exporters/PicasaWebExport/PicasaWebExport.cs:660
+#: ../extensions/Exporters/FacebookExport/FacebookExport.cs:326
+#: ../extensions/Exporters/FlickrExport/FlickrExport.cs:476
+#: ../extensions/Exporters/GalleryExport/GalleryExport.cs:730
+#: ../extensions/Exporters/PicasaWebExport/PicasaWebExport.cs:598
+#: ../extensions/Exporters/SmugMugExport/SmugMugExport.cs:522
+msgid "Uploading Pictures"
+msgstr "Laster opp bilder"
+
+#: ../extensions/Exporters/FacebookExport/FacebookExport.cs:354
+#: ../extensions/Exporters/PicasaWebExport/PicasaWebExport.cs:661
#: ../extensions/Exporters/SmugMugExport/SmugMugExport.cs:565
#, csharp-format
msgid "Uploading picture \"{0}\" ({1} of {2})"
msgstr "Laster opp bilde «{0}» ({1} av {2})"
-#: ../extensions/Exporters/FacebookExport/FacebookExport.cs:371
+#: ../extensions/Exporters/FacebookExport/FacebookExport.cs:368
#, csharp-format
msgid "Error Uploading To Facebook: {0}"
msgstr "Feil ved opplasting til Facebook: {0}"
-#: ../extensions/Exporters/FacebookExport/FacebookExport.cs:372
-#: ../extensions/Exporters/FlickrExport/FlickrExport.cs:370
-#: ../extensions/Exporters/FolderExport/FolderExport.cs:250
+#: ../extensions/Exporters/FacebookExport/FacebookExport.cs:369
+#: ../extensions/Exporters/FlickrExport/FlickrExport.cs:371
+#: ../extensions/Exporters/FolderExport/FolderExport.cs:226
#: ../extensions/Exporters/GalleryExport/GalleryExport.cs:797
-#: ../extensions/Exporters/PicasaWebExport/PicasaWebExport.cs:693
+#: ../extensions/Exporters/PicasaWebExport/PicasaWebExport.cs:694
#: ../extensions/Exporters/SmugMugExport/SmugMugExport.cs:596
#: ../extensions/Exporters/TabbloExport/TabbloExport.cs:319
msgid "Error"
msgstr "Feil"
-#: ../extensions/Exporters/FacebookExport/FacebookExport.cs:382
-#: ../extensions/Exporters/FlickrExport/FlickrExport.cs:381
+#: ../extensions/Exporters/FacebookExport/FacebookExport.cs:379
+#: ../extensions/Exporters/FlickrExport/FlickrExport.cs:382
#: ../extensions/Exporters/GalleryExport/GalleryExport.cs:808
-#: ../extensions/Exporters/PicasaWebExport/PicasaWebExport.cs:706
+#: ../extensions/Exporters/PicasaWebExport/PicasaWebExport.cs:707
#: ../extensions/Exporters/SmugMugExport/SmugMugExport.cs:609
msgid "Upload Complete"
msgstr "Opplasting fullført"
-#: ../extensions/Exporters/FacebookExport/FacebookExport.cs:385
+#: ../extensions/Exporters/FacebookExport/FacebookExport.cs:382
msgid "Visit F-Spot group on Facebook"
msgstr "Besøk F-Spot-gruppen på Facebook"
-#: ../extensions/Exporters/FacebookExport/FacebookExportDialog.cs:211
+#: ../extensions/Exporters/FacebookExport/FacebookExportDialog.cs:212
msgid "Waiting for authentication"
msgstr "Venter på autentisering"
-#: ../extensions/Exporters/FacebookExport/FacebookExportDialog.cs:212
+#: ../extensions/Exporters/FacebookExport/FacebookExportDialog.cs:213
msgid ""
"F-Spot will now launch your browser so that you can log into Facebook.\n"
"\n"
@@ -224,37 +252,37 @@ msgid ""
"re-use it on future Facebook exports."
msgstr ""
-#: ../extensions/Exporters/FacebookExport/FacebookExportDialog.cs:217
+#: ../extensions/Exporters/FacebookExport/FacebookExportDialog.cs:218
msgid "Authenticating..."
msgstr "Autentiserer..."
-#: ../extensions/Exporters/FacebookExport/FacebookExportDialog.cs:227
+#: ../extensions/Exporters/FacebookExport/FacebookExportDialog.cs:228
msgid "Error logging into Facebook"
msgstr "Feil ved innlogging på Facebook"
-#: ../extensions/Exporters/FacebookExport/FacebookExportDialog.cs:228
+#: ../extensions/Exporters/FacebookExport/FacebookExportDialog.cs:229
msgid ""
"There was a problem logging into Facebook. Check your credentials and try "
"again."
msgstr ""
-#: ../extensions/Exporters/FacebookExport/FacebookExportDialog.cs:237
+#: ../extensions/Exporters/FacebookExport/FacebookExportDialog.cs:238
msgid "Authorizing Session"
msgstr "Autoriserer sesjonen"
-#: ../extensions/Exporters/FacebookExport/FacebookExportDialog.cs:246
+#: ../extensions/Exporters/FacebookExport/FacebookExportDialog.cs:247
msgid "Session established, fetching user info..."
msgstr ""
-#: ../extensions/Exporters/FacebookExport/FacebookExportDialog.cs:252
+#: ../extensions/Exporters/FacebookExport/FacebookExportDialog.cs:253
msgid "Session established, fetching friend list..."
msgstr ""
-#: ../extensions/Exporters/FacebookExport/FacebookExportDialog.cs:262
+#: ../extensions/Exporters/FacebookExport/FacebookExportDialog.cs:263
msgid "Session established, fetching friend details..."
msgstr ""
-#: ../extensions/Exporters/FacebookExport/FacebookExportDialog.cs:272
+#: ../extensions/Exporters/FacebookExport/FacebookExportDialog.cs:275
msgid "Session established, fetching photo albums..."
msgstr ""
@@ -264,11 +292,11 @@ msgstr ""
msgid "{0} {1} is logged into Facebook"
msgstr ""
-#: ../extensions/Exporters/FacebookExport/FacebookExportDialog.cs:291
+#: ../extensions/Exporters/FacebookExport/FacebookExportDialog.cs:294
msgid "Facebook Connection Error"
msgstr ""
-#: ../extensions/Exporters/FacebookExport/FacebookExportDialog.cs:292
+#: ../extensions/Exporters/FacebookExport/FacebookExportDialog.cs:295
#, csharp-format
msgid ""
"There was an error when downloading your information from Facebook.\n"
@@ -276,7 +304,7 @@ msgid ""
"Facebook said: {0}"
msgstr ""
-#: ../extensions/Exporters/FacebookExport/FacebookExportDialog.cs:321
+#: ../extensions/Exporters/FacebookExport/FacebookExportDialog.cs:324
msgid "You are not logged in."
msgstr "Du er ikke logget inn."
@@ -318,7 +346,7 @@ msgid "Logout"
msgstr "Logg ut"
#: ../extensions/Exporters/FacebookExport/FacebookExport.ui.h:10
-#: ../src/Widgets/InfoBox.cs:212
+#: ../src/Widgets/InfoBox.cs:213
msgid "Name"
msgstr "Navn"
@@ -331,9 +359,8 @@ msgid "Permissions:"
msgstr "Rettigheter:"
#: ../extensions/Exporters/FacebookExport/FacebookExport.ui.h:13
-#, fuzzy
msgid "Stay Connected"
-msgstr "koblet til"
+msgstr "Forbli koblet til"
#: ../extensions/Exporters/FacebookExport/FacebookExport.ui.h:14
msgid "Use an existing album"
@@ -355,73 +382,71 @@ msgstr "_Flickr..."
msgid "_Zooomr..."
msgstr "_Zooomr..."
-#: ../extensions/Exporters/FlickrExport/FlickrExport.cs:105
+#: ../extensions/Exporters/FlickrExport/FlickrExport.cs:106
#: ../extensions/Exporters/FlickrExport/FlickrExport.glade.h:5
msgid "Authorize"
msgstr "Autoriser"
-#: ../extensions/Exporters/FlickrExport/FlickrExport.cs:111
+#: ../extensions/Exporters/FlickrExport/FlickrExport.cs:112
#, csharp-format
msgid ""
"Return to this window after you have finished the authorization process on "
"{0} and click the \"Complete Authorization\" button below"
msgstr ""
-#: ../extensions/Exporters/FlickrExport/FlickrExport.cs:112
+#: ../extensions/Exporters/FlickrExport/FlickrExport.cs:113
msgid "Complete Authorization"
msgstr "Fullfør autorisasjon"
-#: ../extensions/Exporters/FlickrExport/FlickrExport.cs:117
+#: ../extensions/Exporters/FlickrExport/FlickrExport.cs:118
#, csharp-format
msgid "Logging into {0}"
msgstr "Logger på «{0}»"
-#: ../extensions/Exporters/FlickrExport/FlickrExport.cs:118
+#: ../extensions/Exporters/FlickrExport/FlickrExport.cs:119
msgid "Checking credentials..."
msgstr "Sjekker påloggingsinformasjon..."
-#: ../extensions/Exporters/FlickrExport/FlickrExport.cs:125
+#: ../extensions/Exporters/FlickrExport/FlickrExport.cs:126
#, csharp-format
msgid "Welcome {0} you are connected to {1}"
msgstr "Velkommen {0} du er koblet til {1}"
-#: ../extensions/Exporters/FlickrExport/FlickrExport.cs:128
+#: ../extensions/Exporters/FlickrExport/FlickrExport.cs:129
#, csharp-format
msgid "Sign in as a different user"
msgstr ""
-#: ../extensions/Exporters/FlickrExport/FlickrExport.cs:133
+#: ../extensions/Exporters/FlickrExport/FlickrExport.cs:134
#, csharp-format
msgid "Used {0} of your allowed {1} monthly quota"
msgstr ""
-#: ../extensions/Exporters/FlickrExport/FlickrExport.cs:297
+#: ../extensions/Exporters/FlickrExport/FlickrExport.cs:298
msgid "Unable to log on"
msgstr "Kan ikke logge på"
-#: ../extensions/Exporters/FlickrExport/FlickrExport.cs:317
+#: ../extensions/Exporters/FlickrExport/FlickrExport.cs:318
#, csharp-format
msgid "Waiting for response {0} of {1}"
msgstr "Venter på svar {0} av {1}"
-#: ../extensions/Exporters/FlickrExport/FlickrExport.cs:344
-#: ../extensions/Exporters/FolderExport/FolderExport.cs:242
+#: ../extensions/Exporters/FlickrExport/FlickrExport.cs:345
#: ../extensions/Exporters/GalleryExport/GalleryExport.cs:777
#, csharp-format
msgid "Uploading picture \"{0}\""
msgstr "Laster opp bilde «{0}»"
-#: ../extensions/Exporters/FlickrExport/FlickrExport.cs:367
-#, fuzzy, csharp-format
+#: ../extensions/Exporters/FlickrExport/FlickrExport.cs:368
+#, csharp-format
msgid "Error Uploading To {0}: {1}"
-msgstr "Feil ved import {0}{2}{2}{1}"
+msgstr "Feil ved opplasting til {0}: {1}"
-#: ../extensions/Exporters/FlickrExport/FlickrExport.cs:454
-#, fuzzy
+#: ../extensions/Exporters/FlickrExport/FlickrExport.cs:455
msgid "Unable to log on."
-msgstr "Kan ikke rotere bilde"
+msgstr "Kan ikke logge på."
-#: ../extensions/Exporters/FlickrExport/FlickrExport.cs:455
+#: ../extensions/Exporters/FlickrExport/FlickrExport.cs:456
#, csharp-format
msgid ""
"F-Spot was unable to log on to {0}. Make sure you have given the "
@@ -429,7 +454,6 @@ msgid ""
msgstr ""
#: ../extensions/Exporters/FlickrExport/FlickrExport.glade.h:1
-#: ../src/f-spot.glade.h:8
msgid "<b>Account</b>"
msgstr "<b>Konto</b>"
@@ -439,7 +463,7 @@ msgstr "<b>Konto</b>"
#: ../extensions/Exporters/PicasaWebExport/PicasaWebExport.glade.h:2
#: ../extensions/Exporters/SmugMugExport/SmugMugExport.glade.h:2
#: ../extensions/Exporters/TabbloExport/ui/TabbloExport.ui.h:2
-#: ../src/f-spot.glade.h:14 ../src/UI.Dialog/ui/AdjustTimeDialog.ui.h:5
+#: ../src/UI.Dialog/ui/AdjustTimeDialog.ui.h:5 ../src/ui/mail_dialog.ui.h:6
msgid "<b>Photos</b>"
msgstr "<b>Foto</b>"
@@ -448,21 +472,19 @@ msgstr "<b>Foto</b>"
#: ../extensions/Exporters/GalleryExport/GalleryExport.glade.h:4
#: ../extensions/Exporters/PicasaWebExport/PicasaWebExport.glade.h:4
#: ../extensions/Exporters/SmugMugExport/SmugMugExport.glade.h:4
-#: ../src/f-spot.glade.h:16
+#: ../src/ui/mail_dialog.ui.h:8
msgid "<b>Style</b>"
msgstr "<b>Stil</b>"
#: ../extensions/Exporters/FlickrExport/FlickrExport.glade.h:4
-#, fuzzy
msgid "<b>Viewing permissions</b>"
-msgstr "<b>Velg periode</b>"
+msgstr "<b>Viser rettigheter</b>"
#: ../extensions/Exporters/FlickrExport/FlickrExport.glade.h:6
#: ../extensions/Exporters/GalleryExport/GalleryExport.glade.h:8
#: ../extensions/Exporters/PicasaWebExport/PicasaWebExport.glade.h:9
#: ../extensions/Exporters/SmugMugExport/SmugMugExport.glade.h:6
#: ../extensions/Exporters/TabbloExport/ui/TabbloExport.ui.h:5
-#: ../src/f-spot.glade.h:44
msgid "Export"
msgstr "Eksporter"
@@ -504,7 +526,6 @@ msgstr "Synlig for venner"
#: ../extensions/Exporters/FlickrExport/FlickrExport.glade.h:16
#: ../extensions/Exporters/PicasaWebExport/PicasaWebExport.glade.h:21
-#: ../src/f-spot.glade.h:96
msgid "_Export tags"
msgstr "_Eksporter merker"
@@ -513,7 +534,6 @@ msgstr "_Eksporter merker"
#: ../extensions/Exporters/GalleryExport/GalleryExport.glade.h:21
#: ../extensions/Exporters/PicasaWebExport/PicasaWebExport.glade.h:25
#: ../extensions/Exporters/SmugMugExport/SmugMugExport.glade.h:15
-#: ../src/f-spot.glade.h:109
msgid "_Resize to: "
msgstr "_Endre størrelse til:"
@@ -527,7 +547,6 @@ msgstr "_Åpne album i nettleser når opplasting er ferdig"
#: ../extensions/Exporters/GalleryExport/GalleryExport.glade.h:24
#: ../extensions/Exporters/PicasaWebExport/PicasaWebExport.glade.h:27
#: ../extensions/Exporters/SmugMugExport/SmugMugExport.glade.h:17
-#: ../src/f-spot.glade.h:125
msgid "pixels"
msgstr "piksler"
@@ -535,80 +554,98 @@ msgstr "piksler"
msgid "F_older..."
msgstr "Ma_ppe..."
-#: ../extensions/Exporters/FolderExport/FolderExport.cs:140
+#: ../extensions/Exporters/FolderExport/FolderExport.cs:120
msgid "Select Export Folder"
msgstr "Velg eksportmappe"
-#: ../extensions/Exporters/FolderExport/FolderExport.cs:198
+#: ../extensions/Exporters/FolderExport/FolderExport.cs:173
msgid "Building Gallery"
msgstr "Bygger galleri"
-#: ../extensions/Exporters/FolderExport/FolderExport.cs:248
-#, fuzzy, csharp-format
-msgid "Error uploading picture \"{0}\" to Gallery:{2}{1}"
-msgstr "Feil ved import {0}{2}{2}{1}"
+#: ../extensions/Exporters/FolderExport/FolderExport.cs:217
+#, csharp-format
+msgid "Exporting \"{0}\"..."
+msgstr "Eksporter «{0}»..."
+
+#: ../extensions/Exporters/FolderExport/FolderExport.cs:224
+#, csharp-format
+msgid "Error Copying \"{0}\" to Gallery:{2}{1}"
+msgstr "Feil ved kopiering av {0} til galleri:{2}{1}"
+
+#: ../extensions/Exporters/FolderExport/FolderExport.cs:250
+#, csharp-format
+msgid "Transferring to \"{0}\""
+msgstr "Overfører til «{0}»"
+
+#: ../extensions/Exporters/FolderExport/FolderExport.cs:251
+msgid "Transferring..."
+msgstr "Overfører..."
+
+#. No need to check result here as if result is not true, an Exception will be thrown before
+#: ../extensions/Exporters/FolderExport/FolderExport.cs:256
+msgid "Export Complete."
+msgstr "Eksport fullført."
-#: ../extensions/Exporters/FolderExport/FolderExport.cs:333
-msgid "Error: Error while transferring; Aborting"
-msgstr "Feil: Feil under overføring av fil. Avbryter"
+#: ../extensions/Exporters/FolderExport/FolderExport.cs:258
+msgid "Exporting Photos Completed."
+msgstr ""
-#: ../extensions/Exporters/FolderExport/FolderExport.cs:336
-msgid "Error: File Already Exists; Aborting"
-msgstr "Feil: Filen eksisterer allerede. Avbryter"
+#: ../extensions/Exporters/FolderExport/FolderExport.cs:325
+msgid "Exporting Photos"
+msgstr "Eksporterer bilder"
#. Note for translators: light as clear, opposite as dark
-#: ../extensions/Exporters/FolderExport/FolderExport.cs:807
+#: ../extensions/Exporters/FolderExport/FolderExport.cs:743
msgid "Light"
msgstr "Lys"
-#: ../extensions/Exporters/FolderExport/FolderExport.cs:808
+#: ../extensions/Exporters/FolderExport/FolderExport.cs:744
msgid "Dark"
msgstr "Mørk"
#. Abbreviation of previous
-#: ../extensions/Exporters/FolderExport/FolderExport.cs:988
+#: ../extensions/Exporters/FolderExport/FolderExport.cs:924
msgid "Prev"
msgstr "Forrige"
-#: ../extensions/Exporters/FolderExport/FolderExport.cs:990
-#: ../extensions/Exporters/FolderExport/FolderExport.cs:1231
-#: ../src/CameraFileSelectionDialog.cs:82
+#: ../extensions/Exporters/FolderExport/FolderExport.cs:926
+#: ../extensions/Exporters/FolderExport/FolderExport.cs:1167
msgid "Index"
msgstr "Indeks"
#. Don't care otherwise, Tags sounds reasonable
-#: ../extensions/Exporters/FolderExport/FolderExport.cs:993
-#: ../extensions/Exporters/FolderExport/FolderExport.cs:1165
-#: ../extensions/Exporters/FolderExport/FolderExport.cs:1205
-#: ../src/MainWindow.cs:376 ../src/Widgets/Sidebar.cs:56
+#: ../extensions/Exporters/FolderExport/FolderExport.cs:929
+#: ../extensions/Exporters/FolderExport/FolderExport.cs:1101
+#: ../extensions/Exporters/FolderExport/FolderExport.cs:1141
+#: ../src/MainWindow.cs:348 ../src/Widgets/Sidebar.cs:56
msgid "Tags"
msgstr "Merker"
-#: ../extensions/Exporters/FolderExport/FolderExport.cs:996
-#: ../src/f-spot.glade.h:58 ../src/ItemAction.cs:102
+#: ../extensions/Exporters/FolderExport/FolderExport.cs:932
+#: ../src/ItemAction.cs:102
msgid "Next"
msgstr "Neste"
-#: ../extensions/Exporters/FolderExport/FolderExport.cs:1100
+#: ../extensions/Exporters/FolderExport/FolderExport.cs:1036
msgid "Gallery generated by"
msgstr "Galleri laget av"
-#: ../extensions/Exporters/FolderExport/FolderExport.cs:1140
+#: ../extensions/Exporters/FolderExport/FolderExport.cs:1076
msgid "Show Styles"
msgstr "Vis stiler"
-#: ../extensions/Exporters/FolderExport/FolderExport.cs:1141
+#: ../extensions/Exporters/FolderExport/FolderExport.cs:1077
msgid "Hide Styles"
msgstr "Skjul stiler"
-#: ../extensions/Exporters/FolderExport/FolderExport.cs:1176
-#: ../extensions/Exporters/FolderExport/FolderExport.cs:1177
-#: ../src/ui/main_window.ui.h:24
+#: ../extensions/Exporters/FolderExport/FolderExport.cs:1112
+#: ../extensions/Exporters/FolderExport/FolderExport.cs:1113
+#: ../src/ui/main_window.ui.h:25
msgid "Tags: "
msgstr "Merker:"
-#: ../extensions/Exporters/FolderExport/FolderExport.cs:1308
-#: ../extensions/Exporters/FolderExport/FolderExport.cs:1441
+#: ../extensions/Exporters/FolderExport/FolderExport.cs:1244
+#: ../extensions/Exporters/FolderExport/FolderExport.cs:1377
msgid "Page:"
msgstr "Side:"
@@ -617,7 +654,6 @@ msgid "\n"
msgstr "\n"
#: ../extensions/Exporters/FolderExport/FolderExport.glade.h:3
-#: ../src/f-spot.glade.h:11
msgid "<b>Destination</b>"
msgstr "<b>Mål</b>"
@@ -668,11 +704,15 @@ msgstr "_Mappe:"
msgid "_Save the files only"
msgstr "_Lagre kun filer"
+#: ../extensions/Exporters/GalleryExport/FormClient.cs:294
+msgid "Unhandled exception"
+msgstr "Uhåndtert unntak"
+
#: ../extensions/Exporters/GalleryExport/GalleryExport.addin.xml.h:1
msgid "Web _Gallery..."
msgstr "_Galleri på nettet..."
-#: ../extensions/Exporters/GalleryExport/GalleryExport.cs:52
+#: ../extensions/Exporters/GalleryExport/GalleryExport.cs:53
msgid ""
"Cannot connect to a Gallery for which the version is unknown.\n"
"Please check that you have Remote plugin 1.0.8 or later"
@@ -731,25 +771,25 @@ msgid "Error uploading picture \"{0}\" to Gallery: {1}"
msgstr "Feil ved import {0}{2}{2}{1}"
#: ../extensions/Exporters/GalleryExport/GalleryExport.cs:824
-#: ../extensions/Exporters/PicasaWebExport/PicasaWebExport.cs:727
+#: ../extensions/Exporters/PicasaWebExport/PicasaWebExport.cs:728
#: ../extensions/Exporters/SmugMugExport/SmugMugExport.cs:630
msgid "(No Gallery)"
msgstr "(Uten galleri)"
#: ../extensions/Exporters/GalleryExport/GalleryExport.cs:916
-#: ../extensions/Exporters/PicasaWebExport/PicasaWebExport.cs:849
+#: ../extensions/Exporters/PicasaWebExport/PicasaWebExport.cs:850
#: ../extensions/Exporters/SmugMugExport/SmugMugExport.cs:726
msgid "(Not Connected)"
msgstr "(Ikke koblet til)"
#: ../extensions/Exporters/GalleryExport/GalleryExport.cs:917
-#: ../extensions/Exporters/PicasaWebExport/PicasaWebExport.cs:850
+#: ../extensions/Exporters/PicasaWebExport/PicasaWebExport.cs:851
#: ../extensions/Exporters/SmugMugExport/SmugMugExport.cs:727
msgid "(No Albums)"
msgstr "(Ingen album)"
#: ../extensions/Exporters/GalleryExport/GalleryExport.cs:969
-#: ../extensions/Exporters/PicasaWebExport/PicasaWebExport.cs:915
+#: ../extensions/Exporters/PicasaWebExport/PicasaWebExport.cs:916
#: ../extensions/Exporters/SmugMugExport/SmugMugExport.cs:768
msgid "No account selected"
msgstr "Ingen konto valgt"
@@ -757,12 +797,10 @@ msgstr "Ingen konto valgt"
#: ../extensions/Exporters/GalleryExport/GalleryExport.glade.h:1
#: ../extensions/Exporters/PicasaWebExport/PicasaWebExport.glade.h:1
#: ../extensions/Exporters/SmugMugExport/SmugMugExport.glade.h:1
-#: ../src/f-spot.glade.h:9
msgid "<b>Album</b>"
msgstr "<b>Album</b>"
#: ../extensions/Exporters/GalleryExport/GalleryExport.glade.h:2
-#: ../src/f-spot.glade.h:12
msgid "<b>Gallery</b>"
msgstr "<b>Galleri</b>"
@@ -805,7 +843,6 @@ msgstr "_Beskrivelse:"
#: ../extensions/Exporters/GalleryExport/GalleryExport.glade.h:16
#: ../extensions/Exporters/PicasaWebExport/PicasaWebExport.glade.h:22
#: ../extensions/Exporters/SmugMugExport/SmugMugExport.glade.h:13
-#: ../src/f-spot.glade.h:97
msgid "_Export to Album:"
msgstr "_Eksporter til album:"
@@ -841,21 +878,21 @@ msgstr "_Tittel:"
msgid "_Username:"
msgstr "Br_ukernavn:"
-#: ../extensions/Exporters/GalleryExport/GalleryRemote.cs:361
+#: ../extensions/Exporters/GalleryExport/GalleryRemote.cs:362
msgid "Error reading server response"
msgstr ""
#. failed to find the response
-#: ../extensions/Exporters/GalleryExport/GalleryRemote.cs:373
+#: ../extensions/Exporters/GalleryExport/GalleryRemote.cs:374
msgid "Server returned response without Gallery content"
msgstr ""
-#: ../extensions/Exporters/GalleryExport/GalleryRemote.cs:710
+#: ../extensions/Exporters/GalleryExport/GalleryRemote.cs:711
#, fuzzy
msgid "Error while creating new album"
msgstr "Feil under rotering av bilde."
-#: ../extensions/Exporters/GalleryExport/GalleryRemote.cs:711
+#: ../extensions/Exporters/GalleryExport/GalleryRemote.cs:712
#, csharp-format
msgid ""
"The following error was encountered while attempting to perform the "
@@ -867,38 +904,38 @@ msgstr ""
msgid "_PicasaWeb..."
msgstr "_Picasaweb..."
-#: ../extensions/Exporters/PicasaWebExport/PicasaWebExport.cs:441
+#: ../extensions/Exporters/PicasaWebExport/PicasaWebExport.cs:442
msgid "Error while creating Album"
msgstr "Feil under oppretting av album"
-#: ../extensions/Exporters/PicasaWebExport/PicasaWebExport.cs:442
+#: ../extensions/Exporters/PicasaWebExport/PicasaWebExport.cs:443
#, csharp-format
msgid ""
"The following error was encountered while attempting to create an album: {0}"
msgstr ""
-#: ../extensions/Exporters/PicasaWebExport/PicasaWebExport.cs:620
+#: ../extensions/Exporters/PicasaWebExport/PicasaWebExport.cs:621
#, csharp-format
msgid "{0} Sent"
msgstr "{0} sendt"
-#: ../extensions/Exporters/PicasaWebExport/PicasaWebExport.cs:622
+#: ../extensions/Exporters/PicasaWebExport/PicasaWebExport.cs:623
#, csharp-format
msgid "{0} of approx. {1}"
msgstr "{0} av ca. {1}"
-#: ../extensions/Exporters/PicasaWebExport/PicasaWebExport.cs:691
+#: ../extensions/Exporters/PicasaWebExport/PicasaWebExport.cs:692
#: ../extensions/Exporters/SmugMugExport/SmugMugExport.cs:594
#, fuzzy, csharp-format
msgid "Error Uploading To Gallery: {0}"
msgstr "Feil ved import {0}{2}{2}{1}"
-#: ../extensions/Exporters/PicasaWebExport/PicasaWebExport.cs:778
+#: ../extensions/Exporters/PicasaWebExport/PicasaWebExport.cs:779
#, csharp-format
msgid "Available space: {0}, {1}% used out of {2}"
msgstr ""
-#: ../extensions/Exporters/PicasaWebExport/PicasaWebExport.cs:891
+#: ../extensions/Exporters/PicasaWebExport/PicasaWebExport.cs:892
#, csharp-format
msgid ""
"The selected album has a limit of {0} pictures,\n"
@@ -1046,7 +1083,7 @@ msgid "Compressed fil_e..."
msgstr "Komprim_ert fil..."
#: ../extensions/Exporters/ZipExport/ZipExport.cs:47
-#: ../src/Widgets/EditorPage.cs:197
+#: ../src/Widgets/EditorPage.cs:198
msgid "No selection available"
msgstr "Ingen markerte områder tilgjengelig"
@@ -1088,6 +1125,10 @@ msgstr "_Lokasjon:"
msgid "_Scale:"
msgstr "_Skaler:"
+#: ../extensions/Tools/HashJob/HashJob.addin.xml.h:1
+msgid "Check for Duplicates..."
+msgstr ""
+
#: ../extensions/Tools/HashJob/HashJob.cs:53
msgid ""
"In order to detect duplicates on pictures you imported before 0.5.0, F-Spot "
@@ -1101,7 +1142,7 @@ msgid ""
"You currently have {0} photos needing md5 calculation, and {1} pending jobs"
msgstr ""
-#: ../extensions/Tools/HashJob/HashJob.cs:75 ../src/ui/main_window.ui.h:37
+#: ../extensions/Tools/HashJob/HashJob.cs:75 ../src/ui/main_window.ui.h:38
msgid "_Close"
msgstr ""
@@ -1114,10 +1155,6 @@ msgstr "Feil ved prosessering av bilde"
msgid "Stopped"
msgstr ""
-#: ../extensions/Tools/HashJob/HashJob.addin.xml.h:1
-msgid "Check for Duplicates..."
-msgstr ""
-
#: ../extensions/Tools/LiveWebGallery/GalleryRequestHandler.cs:107
#, fuzzy
msgid "F-Spot Gallery"
@@ -1155,6 +1192,21 @@ msgstr "Slett"
msgid "Live Web Gallery"
msgstr "_Galleri på nettet..."
+#: ../extensions/Tools/LiveWebGallery/LiveWebGalleryDialog.cs:89
+#, fuzzy
+msgid "none"
+msgstr "(Ingen)"
+
+#: ../extensions/Tools/LiveWebGallery/LiveWebGalleryDialog.cs:92
+#, csharp-format
+msgid " Gallery: {0}, Photos: {1}, Last client: {3}"
+msgstr ""
+
+#: ../extensions/Tools/LiveWebGallery/LiveWebGalleryDialog.cs:156
+#, fuzzy
+msgid "Gallery is inactive"
+msgstr "Galleri laget av"
+
#: ../extensions/Tools/LiveWebGallery/ui/LiveWebGallery.ui.h:1
msgid ""
"<small><i>The gallery stays active until you either deactivate it or close\n"
@@ -1217,21 +1269,6 @@ msgstr "Øk skarphet"
msgid "Views:"
msgstr "Vis"
-#: ../extensions/Tools/LiveWebGallery/LiveWebGalleryDialog.cs:89
-#, fuzzy
-msgid "none"
-msgstr "(Ingen)"
-
-#: ../extensions/Tools/LiveWebGallery/LiveWebGalleryDialog.cs:92
-#, csharp-format
-msgid " Gallery: {0}, Photos: {1}, Last client: {3}"
-msgstr ""
-
-#: ../extensions/Tools/LiveWebGallery/LiveWebGalleryDialog.cs:156
-#, fuzzy
-msgid "Gallery is inactive"
-msgstr "Galleri laget av"
-
#: ../extensions/Tools/MergeDb/MergeDb.addin.xml.h:1
msgid "Merge Db"
msgstr "Sammenføy databaser"
@@ -1308,11 +1345,11 @@ msgid "New Rolls Only"
msgstr ""
#: ../extensions/Tools/MergeDb/MergeDb.glade.h:15
-#: ../src/FileImportBackend.cs:291 ../src/UI.Dialog/ThreadProgressDialog.cs:58
+#: ../src/UI.Dialog/ThreadProgressDialog.cs:57
msgid "Skip"
msgstr "Hopp over"
-#: ../extensions/Tools/MergeDb/PickFolderDialog.cs:33
+#: ../extensions/Tools/MergeDb/PickFolderDialog.cs:34
#, csharp-format
msgid ""
"<big>The database refers to files contained in the <b>{0}</b> folder.\n"
@@ -1349,109 +1386,211 @@ msgstr "La F-Spot være skjermsparer"
msgid "Screensaver Configuration"
msgstr "Konfigurasjon av skjermsparer"
-#: ../f-spot.desktop.in.in.h:1 ../f-spot-import.desktop.in.in.h:1
-#: ../f-spot-view.desktop.in.in.h:1 ../src/ui/main_window.ui.h:10
-msgid "F-Spot"
-msgstr "F-Spot"
+#: ../f-spot.schemas.in.h:1
+msgid "Display of transparent parts."
+msgstr ""
-#: ../f-spot.desktop.in.in.h:2 ../f-spot-import.desktop.in.in.h:2
-msgid "F-Spot Photo Manager"
-msgstr "F-Spot bildebehandling"
+#: ../f-spot.schemas.in.h:2
+msgid "Enable this to allow interpolation on zoomed images."
+msgstr ""
-#: ../f-spot.desktop.in.in.h:3
-msgid "Organize, enjoy, and share your photos"
-msgstr "Organiser, verdsett og del bildene dine"
+#: ../f-spot.schemas.in.h:3
+msgid "Height of the import dialog."
+msgstr ""
-#: ../f-spot.desktop.in.in.h:4 ../f-spot-import.desktop.in.in.h:4
-msgid "Photo Manager"
-msgstr "Fotobehandler"
+#: ../f-spot.schemas.in.h:4
+msgid "Height of the main window."
+msgstr ""
-#: ../f-spot-import.desktop.in.in.h:3
-msgid "Import into F-Spot"
-msgstr "Importer til F-Spot"
+#: ../f-spot.schemas.in.h:5
+msgid "Height of the photo viewer window."
+msgstr ""
-#: ../f-spot-view.desktop.in.in.h:2
-msgid "F-Spot Photo Viewer"
-msgstr "F-spot bildebehandling"
+#: ../f-spot.schemas.in.h:6
+msgid ""
+"If the 'transparency' option is set, the color specified in this option will "
+"be used as the transparent color when viewing images."
+msgstr ""
-#: ../f-spot-view.desktop.in.in.h:3
-msgid "Photo Viewer"
-msgstr "Fotovisning"
+#: ../f-spot.schemas.in.h:7
+#, fuzzy
+msgid "Interpolate image on zoom."
+msgstr "interpolasjonstype"
-#: ../lib/libfspot/f-jpeg-utils.c:441 ../src/RotateCommand.cs:224
-msgid "File not found"
-msgstr "Fil ikke funnet"
+#: ../f-spot.schemas.in.h:8
+msgid "Maximize the main window."
+msgstr ""
-#: ../lib/libfspot/f-jpeg-utils.c:464
-#, c-format
-msgid "Unknown transform type %d"
-msgstr "Ukjent transformasjonstype %d"
+#: ../f-spot.schemas.in.h:9
+msgid "Maximize the photo viewer window."
+msgstr ""
-#: ../lib/libfspot/f-jpeg-utils.c:472
-msgid "Operation failed"
-msgstr "Operasjon feilet"
+#: ../f-spot.schemas.in.h:10
+msgid "Path to custom gtkrc for theming F-Spot."
+msgstr ""
-#: ../src/CameraFileSelectionDialog.cs:76
-msgid "Preview"
-msgstr "Forhåndsvisning"
+#: ../f-spot.schemas.in.h:11
+msgid "Show dates in the thumbnail view."
+msgstr ""
-#: ../src/CameraFileSelectionDialog.cs:78
-msgid "Path"
-msgstr "Sti"
+#: ../f-spot.schemas.in.h:12
+msgid "Show ratings in the thumbnail view."
+msgstr ""
-#: ../src/CameraFileSelectionDialog.cs:80 ../src/f-spot.glade.h:47
-msgid "File"
-msgstr "Fil"
+#: ../f-spot.schemas.in.h:13
+msgid "Show tags in the thumbnail view."
+msgstr ""
-#: ../src/CameraFileSelectionDialog.cs:102
-msgid "Select Tag"
-msgstr "Velg merke"
+#: ../f-spot.schemas.in.h:14
+msgid "Show the filename in the viewer window."
+msgstr ""
-#: ../src/CameraFileSelectionDialog.cs:138
-msgid "Downloading Previews"
-msgstr "Laster ned forhåndsvisninger"
+#: ../f-spot.schemas.in.h:15
+msgid "Show the filmstrip in the main window."
+msgstr ""
-#: ../src/CameraFileSelectionDialog.cs:148
-#, csharp-format
-msgid "Downloading Preview of {0}"
-msgstr "Laster ned forhåndsvisning av {0}"
+#: ../f-spot.schemas.in.h:16
+msgid "Show the sidebar in the main window."
+msgstr ""
-#: ../src/CameraFileSelectionDialog.cs:220
-#, csharp-format
-msgid "Copying file {0} of {1}"
-msgstr "Kopierer fil {0} av {1}"
+#: ../f-spot.schemas.in.h:17
+msgid "Show the timeline in the main window."
+msgstr ""
-#: ../src/CameraFileSelectionDialog.cs:235
-msgid "Error transferring file"
-msgstr "Feil under overføring av fil"
+#: ../f-spot.schemas.in.h:18
+msgid "Show the toolbar in the main window."
+msgstr ""
-#: ../src/CameraFileSelectionDialog.cs:244
-msgid "Download Complete"
-msgstr "Ferdig med nedlasting"
+#: ../f-spot.schemas.in.h:19
+msgid "Show the toolbar in the photo viewer window."
+msgstr ""
-#: ../src/CameraFileSelectionDialog.cs:244
-msgid "Done Copying Files"
-msgstr "Ferdig med kopiering av filer"
+#: ../f-spot.schemas.in.h:20
+msgid "Size of the tag icons shown in the sidebar."
+msgstr ""
-#: ../src/CameraFileSelectionDialog.cs:268
-#, csharp-format
-msgid "Transferring \"{0}\" from camera"
-msgstr "Overfører «{0}» fra kamera"
+#: ../f-spot.schemas.in.h:21
+msgid "The X position to use for the main window."
+msgstr ""
-#: ../src/CameraSelectionDialog.cs:29 ../src/Widgets/InfoBox.cs:231
-msgid "Camera"
-msgstr "Kamera"
+#: ../f-spot.schemas.in.h:22
+msgid "The X position to use for the photo viewer window."
+msgstr ""
+
+#: ../f-spot.schemas.in.h:23
+msgid "The Y position to use for the main window."
+msgstr ""
+
+#: ../f-spot.schemas.in.h:24
+msgid "The Y position to use for the photo viewer window."
+msgstr ""
+
+#: ../f-spot.schemas.in.h:25
+msgid "The color to use for transparent parts."
+msgstr ""
+
+#: ../f-spot.schemas.in.h:26
+msgid "The height dimension to use for the import dialog."
+msgstr ""
+
+#: ../f-spot.schemas.in.h:27
+msgid "The height dimension to use for the main window."
+msgstr ""
+
+#: ../f-spot.schemas.in.h:28
+msgid "The height dimension to use for the photo viewer window."
+msgstr ""
+
+#: ../f-spot.schemas.in.h:29
+msgid "The orientation of the filmstrip, if shown."
+msgstr ""
+
+#: ../f-spot.schemas.in.h:30
+msgid "The orientation of the filmstrip."
+msgstr ""
+
+#: ../f-spot.schemas.in.h:31
+msgid "The size (width) of the sidebar in the main window."
+msgstr ""
+
+#: ../f-spot.schemas.in.h:32
+msgid "The size of the sidebar in the main window."
+msgstr ""
+
+#: ../f-spot.schemas.in.h:33
+msgid "The width dimension to use for the import dialog."
+msgstr ""
+
+#: ../f-spot.schemas.in.h:34
+msgid "The width dimension to use for the main window."
+msgstr ""
+
+#: ../f-spot.schemas.in.h:35
+msgid "The width dimension to use for the photo viewer window."
+msgstr ""
+
+#: ../f-spot.schemas.in.h:36
+msgid "Use the current photo's filename as the viewer window's title."
+msgstr ""
+
+#: ../f-spot.schemas.in.h:37
+msgid "Width of the import dialog."
+msgstr ""
+
+#: ../f-spot.schemas.in.h:38
+msgid "Width of the main window."
+msgstr ""
+
+#: ../f-spot.schemas.in.h:39
+msgid "Width of the photo viewer window."
+msgstr ""
+
+#: ../f-spot.schemas.in.h:40
+msgid "Width of the preview image pane in the import dialog."
+msgstr ""
+
+#: ../f-spot.schemas.in.h:41
+msgid "X position of the main window."
+msgstr ""
+
+#: ../f-spot.schemas.in.h:42
+msgid "X position of the photo viewer window."
+msgstr ""
+
+#: ../f-spot.schemas.in.h:43
+msgid "Y position of the main window."
+msgstr ""
+
+#: ../f-spot.schemas.in.h:44
+msgid "Y position of the photo viewer window."
+msgstr ""
+
+#: ../f-spot.schemas.in.h:45
+msgid ""
+"You can choose how to display transparent parts in images. This option has "
+"no effect on photos but setting this value to CHECK_PATTERN or CUSTOM_COLOR "
+"could be useful when viewing icons or other artwork with transparent parts."
+msgstr ""
+
+#: ../lib/libfspot/f-jpeg-utils.c:441 ../src/RotateCommand.cs:211
+msgid "File not found"
+msgstr "Fil ikke funnet"
+
+#: ../lib/libfspot/f-jpeg-utils.c:464
+#, c-format
+msgid "Unknown transform type %d"
+msgstr "Ukjent transformasjonstype %d"
-#: ../src/CameraSelectionDialog.cs:30
-msgid "Port"
-msgstr "Port"
+#: ../lib/libfspot/f-jpeg-utils.c:472
+msgid "Operation failed"
+msgstr "Operasjon feilet"
-#: ../src/Core/App.cs:278
+#: ../src/Core/App.cs:274
#, csharp-format
msgid "No photos matching {0} found"
msgstr "Ingen bilder funnet med treff på {0}"
-#: ../src/Core/App.cs:279
+#: ../src/Core/App.cs:275
#, csharp-format
msgid ""
"The tag \"{0}\" is not applied to any photos. Try adding\n"
@@ -1459,11 +1598,11 @@ msgid ""
"F-Spot preference dialog."
msgstr ""
-#: ../src/Core/App.cs:283
+#: ../src/Core/App.cs:279
msgid "Search returned no results"
msgstr "Ingen søkeresultater"
-#: ../src/Core/App.cs:284
+#: ../src/Core/App.cs:280
msgid ""
"The tag F-Spot is looking for does not exist. Try\n"
"selecting a different tag in the F-Spot preference\n"
@@ -1474,39 +1613,28 @@ msgstr ""
"for F-Spot."
#. Note for translators: Reparented is a picture becoming a version of another one
-#: ../src/Core/Photo.cs:473
+#: ../src/Core/Photo.cs:350
#, fuzzy
msgid "Reparented"
msgstr "Reparer"
-#: ../src/Core/Photo.cs:473
-#, fuzzy, csharp-format
-msgid "Reparented ({0})"
-msgstr "Reparer"
-
-#: ../src/Core/Photo.cs:492
+#: ../src/Core/Photo.cs:367
#, csharp-format
msgid "Modified"
msgid_plural "Modified ({0})"
msgstr[0] ""
msgstr[1] ""
-#: ../src/Core/Photo.cs:513
+#: ../src/Core/Photo.cs:390
#, csharp-format
msgid "Modified in {1}"
msgstr "Endret i {1}"
-#: ../src/Core/Photo.cs:513
+#: ../src/Core/Photo.cs:390
#, csharp-format
msgid "Modified in {1} ({0})"
msgstr ""
-#. Note that the original version is never stored in the photo_versions table in the
-#. database.
-#: ../src/Core/Photo.cs:671 ../src/f-spot.glade.h:62
-msgid "Original"
-msgstr "Original"
-
#: ../src/Editors/AutoStretchEditor.cs:17
msgid "Auto Color"
msgstr "Automatisk farge"
@@ -1519,43 +1647,43 @@ msgstr "Juster farger"
msgid "Adjust"
msgstr "Juster"
-#: ../src/Editors/CropEditor.cs:35
+#: ../src/Editors/CropEditor.cs:36
msgid "4 x 3 (Book)"
msgstr "4 x 3 (bok)"
-#: ../src/Editors/CropEditor.cs:36
+#: ../src/Editors/CropEditor.cs:37
msgid "4 x 6 (Postcard)"
msgstr "4 x 6 (postkort)"
-#: ../src/Editors/CropEditor.cs:37
+#: ../src/Editors/CropEditor.cs:38
msgid "5 x 7 (L, 2L)"
msgstr "5 x 7 (L, 2L)"
-#: ../src/Editors/CropEditor.cs:38
+#: ../src/Editors/CropEditor.cs:39
msgid "8 x 10"
msgstr "8 x 10"
-#: ../src/Editors/CropEditor.cs:39
+#: ../src/Editors/CropEditor.cs:40
msgid "Square"
msgstr "Kvadratisk"
-#: ../src/Editors/CropEditor.cs:42
+#: ../src/Editors/CropEditor.cs:43
msgid "Crop"
msgstr "Beskjær"
-#: ../src/Editors/CropEditor.cs:73
+#: ../src/Editors/CropEditor.cs:74
msgid "Select the area that needs cropping."
msgstr "Velg område som trenger beskjæring."
-#: ../src/Editors/CropEditor.cs:98
+#: ../src/Editors/CropEditor.cs:99
msgid "No Constraint"
msgstr "Ingen begrensning"
-#: ../src/Editors/CropEditor.cs:99
+#: ../src/Editors/CropEditor.cs:100
msgid "Same as photo"
msgstr "Samme som bilde"
-#: ../src/Editors/CropEditor.cs:104
+#: ../src/Editors/CropEditor.cs:105
msgid "Custom Ratios..."
msgstr "Egendefinerte rater..."
@@ -1587,24 +1715,11 @@ msgstr "Mykt fokus"
msgid "Straighten"
msgstr "Rett ut"
-#: ../src/FileImportBackend.cs:289
-msgid "Import error"
-msgstr "Feil ved importering"
-
-#: ../src/FileImportBackend.cs:290
-#, csharp-format
-msgid "Error importing {0}{2}{2}{1}"
-msgstr "Feil ved import {0}{2}{2}{1}"
-
#: ../src/Filters/ResizeFilter.cs:70 ../src/Filters/SharpFilter.cs:52
#, csharp-format
msgid "No way to save files of type \"{0}\""
msgstr "Ingen måte å lagre filer av type «{0}»"
-#: ../src/FormClient.cs:295
-msgid "Unhandled exception"
-msgstr "Uhåndtert unntak"
-
#: ../src/FSpot.addin.xml.h:1
msgid "Copy Photo"
msgstr "Kopier bilde"
@@ -1617,17 +1732,17 @@ msgstr "Eksporter til"
msgid "Open _With"
msgstr "Åpne _med"
-#: ../src/FSpot.addin.xml.h:4 ../src/ui/main_window.ui.h:15
+#: ../src/FSpot.addin.xml.h:4 ../src/ui/main_window.ui.h:16
msgid "Rem_ove Tag"
msgstr "_Fjern merke"
-#: ../src/FSpot.addin.xml.h:5 ../src/f-spot.glade.h:69
-#: ../src/SingleView.cs:425 ../src/ui/main_window.ui.h:16
+#: ../src/FSpot.addin.xml.h:5 ../src/f-spot.glade.h:24
+#: ../src/SingleView.cs:423 ../src/ui/main_window.ui.h:17
msgid "Rotate _Left"
msgstr "Roter mot _venstre"
-#: ../src/FSpot.addin.xml.h:6 ../src/f-spot.glade.h:70
-#: ../src/SingleView.cs:426 ../src/ui/main_window.ui.h:17
+#: ../src/FSpot.addin.xml.h:6 ../src/f-spot.glade.h:25
+#: ../src/SingleView.cs:424 ../src/ui/main_window.ui.h:18
msgid "Rotate _Right"
msgstr "Roter mot _høyre"
@@ -1635,83 +1750,43 @@ msgstr "Roter mot _høyre"
msgid "Tools"
msgstr "Verktøy"
-#: ../src/FSpot.addin.xml.h:8 ../src/ui/main_window.ui.h:32
-msgid "_Attach Tag"
-msgstr "_Legg til merke"
-
-#: ../src/FSpot.addin.xml.h:9 ../src/ui/main_window.ui.h:41
+#: ../src/FSpot.addin.xml.h:8 ../src/ui/main_window.ui.h:42
msgid "_Delete From Drive"
msgstr "_Slett fra disk"
-#: ../src/FSpot.addin.xml.h:10 ../src/ui/main_window.ui.h:59
+#: ../src/FSpot.addin.xml.h:9 ../src/ui/main_window.ui.h:61
msgid "_Remove From Catalog"
msgstr "_Fjern fra katalog"
#: ../src/f-spot.glade.h:1
-msgid " "
-msgstr " "
-
-#: ../src/f-spot.glade.h:2
-msgid "1024 px"
-msgstr "1024 piksler"
-
-#: ../src/f-spot.glade.h:3
-msgid "320 px"
-msgstr "320 piksler"
-
-#: ../src/f-spot.glade.h:4
-msgid "480 px"
-msgstr "480 piksler"
-
-#: ../src/f-spot.glade.h:5
-msgid "640 px"
-msgstr "640 piksler"
-
-#: ../src/f-spot.glade.h:6
-msgid "800 px"
-msgstr "800 piksler"
-
-#: ../src/f-spot.glade.h:7
-msgid "<b></b>"
-msgstr "<b></b>"
-
-#: ../src/f-spot.glade.h:10
msgid "<b>Co_rrections</b>"
msgstr "<b>Forbedringer</b>"
-#: ../src/f-spot.glade.h:13
+#: ../src/f-spot.glade.h:2
#, fuzzy
msgid "<b>Image Interpolation</b>"
msgstr "<b>Mål</b>"
-#: ../src/f-spot.glade.h:15
-msgid "<b>Size</b>"
-msgstr "<b>Størrelse</b>"
-
-#: ../src/f-spot.glade.h:17
-msgid "<b>Summary</b>"
-msgstr "<b>Sammendrag</b>"
-
-#: ../src/f-spot.glade.h:18
+#: ../src/f-spot.glade.h:3
msgid "<b>Transparent Parts</b>"
msgstr "<b>Gjennomsiktige deler</b>"
-#: ../src/f-spot.glade.h:19
+#: ../src/f-spot.glade.h:4
msgid "<b>View all pictures imported</b>"
msgstr "<b>Vis alle importerte bilder</b>"
-#: ../src/f-spot.glade.h:20
+#: ../src/f-spot.glade.h:5
msgid "<b>_White Balance</b>"
msgstr "<b>_Hvitbalanse</b>"
-#: ../src/f-spot.glade.h:21
+#: ../src/f-spot.glade.h:6
msgid ""
"<small><i>Enable this to allow interpolation on zoomed images. You shouldn't "
"disable this for viewing photos, but disabling the interpolation could be "
"usefull in icon design.</i></small>"
msgstr ""
-#: ../src/f-spot.glade.h:22
+#: ../src/f-spot.glade.h:7
msgid ""
"<small><i>You can choose how to display transparent parts in images. This "
"option has no effect on photos, but setting this as check pattern or custom "
@@ -1719,355 +1794,188 @@ msgid ""
"parts.</i></small>"
msgstr ""
-#: ../src/f-spot.glade.h:23
+#: ../src/f-spot.glade.h:8
msgid "As _background"
msgstr "Som _bakgrunn"
-#: ../src/f-spot.glade.h:24
+#: ../src/f-spot.glade.h:9
msgid "As _custom color: "
msgstr "Som _egendefinert farge: "
-#: ../src/f-spot.glade.h:25
+#: ../src/f-spot.glade.h:10
msgid "As check _pattern"
msgstr "Som rutenetty_pe"
-#: ../src/f-spot.glade.h:26
-msgid "Attach Tags:"
-msgstr "Fest merkelapper:"
-
-#: ../src/f-spot.glade.h:27
-msgid "Attach tag:"
-msgstr "Legg til merke:"
-
-#: ../src/f-spot.glade.h:29
-msgid "CD"
-msgstr "CD"
-
-#: ../src/f-spot.glade.h:30
+#: ../src/f-spot.glade.h:11
msgid "C_ontrast:"
msgstr "K_ontrast:"
-#: ../src/f-spot.glade.h:31
+#: ../src/f-spot.glade.h:12
msgid "C_reate"
msgstr "_Lag"
-#: ../src/f-spot.glade.h:32
-msgid "Camera Selection"
-msgstr "Kamerautvalg"
-
-#: ../src/f-spot.glade.h:33
-msgid "Copy files to the Photos folder"
-msgstr "Kopier filer til bildemappen"
-
-#: ../src/f-spot.glade.h:34
-msgid "Create Mail"
-msgstr "Lag e-post"
-
-#: ../src/f-spot.glade.h:35
+#: ../src/f-spot.glade.h:13
msgid "Create _icon for this tag when first used"
msgstr ""
-#: ../src/f-spot.glade.h:36
-msgid "Create a mail with the selected photos (possibly resized) attached"
-msgstr ""
-
-#: ../src/f-spot.glade.h:37
-msgid "Detect duplicates"
-msgstr ""
-
-#: ../src/f-spot.glade.h:38
+#: ../src/f-spot.glade.h:14
msgid "Display File _Names"
msgstr "Vis fil_navn"
-#: ../src/f-spot.glade.h:39
+#: ../src/f-spot.glade.h:15
msgid "Display only those photos that were imported in specified Rolls."
msgstr ""
-#: ../src/f-spot.glade.h:40
-msgid "Do not send a mail"
-msgstr "Ikke send e-post"
-
-#: ../src/f-spot.glade.h:41
-msgid "E-_Mail:"
-msgstr "E-_post:"
-
-#: ../src/f-spot.glade.h:42
-msgid "E_xport titles and comments"
-msgstr "Eksporter _titler og kommentarer"
-
-#: ../src/f-spot.glade.h:43
-msgid "Estimated new size"
-msgstr "Estimert ny størrelse"
-
-#: ../src/f-spot.glade.h:45
-msgid "Extra large"
-msgstr "Ekstra stor"
-
-#: ../src/f-spot.glade.h:46
+#: ../src/f-spot.glade.h:16
msgid "F-Spot View"
msgstr "F-Spot bildebehandling"
-#: ../src/f-spot.glade.h:48
+#: ../src/f-spot.glade.h:17
msgid "Filter on selected rolls"
msgstr ""
-#: ../src/f-spot.glade.h:49
-msgid "G_allery:"
-msgstr "G_alleri:"
-
-#: ../src/f-spot.glade.h:50
-msgid "Gallery"
-msgstr "Galleri"
-
-#: ../src/f-spot.glade.h:51 ../src/ImportCommand.cs:547
-#: ../src/MainWindow.cs:301
-msgid "Import"
-msgstr "Importer"
-
-#. Translators: this string means 'source of import'
-#: ../src/f-spot.glade.h:53
-msgid "Import Source:"
-msgstr "Importer kilde:"
-
-#: ../src/f-spot.glade.h:54
-msgid "Include subfolders"
-msgstr "Ta med undermapper"
-
-#: ../src/f-spot.glade.h:55
-msgid "Large"
-msgstr "Stor:"
-
-#: ../src/f-spot.glade.h:56
+#: ../src/f-spot.glade.h:18
msgid "Manage your custom selection ratios"
msgstr ""
-#: ../src/f-spot.glade.h:57
-msgid "Medium"
-msgstr "Middelse"
-
-#: ../src/f-spot.glade.h:59
+#: ../src/f-spot.glade.h:19
msgid "Number of photos in selected rolls:"
msgstr "Antall bilder i valgt valgte ruller:"
-#: ../src/f-spot.glade.h:60
-msgid "Number of pictures"
-msgstr "Antall bilder"
-
-#: ../src/f-spot.glade.h:61
+#: ../src/f-spot.glade.h:20
msgid "Open _Folder..."
msgstr "Åpne mappe"
-#: ../src/f-spot.glade.h:63
-msgid "Original size (possible very large file size)"
-msgstr "Opprinnelig størrelse (kan være veldig stor fil)"
-
-#: ../src/f-spot.glade.h:64 ../src/UI.Dialog/ui/EditTagDialog.ui.h:4
+#: ../src/f-spot.glade.h:21 ../src/UI.Dialog/ui/EditTagDialog.ui.h:4
msgid "P_arent Tag:"
msgstr ""
-#: ../src/f-spot.glade.h:65
-msgid "Pause"
-msgstr "Pause"
-
-#: ../src/f-spot.glade.h:66
+#: ../src/f-spot.glade.h:22
msgid "Preferences"
msgstr "Brukervalg"
-#: ../src/f-spot.glade.h:67 ../src/ItemAction.cs:123
-msgid "Previous"
-msgstr "Forrige"
-
-#: ../src/f-spot.glade.h:68
+#: ../src/f-spot.glade.h:23
msgid "Repair"
msgstr "Reparer"
-#: ../src/f-spot.glade.h:71
-msgid "Select Photos to Copy From Camera..."
-msgstr "Velg bilder som skal kopieres fra kameraet..."
-
-#: ../src/f-spot.glade.h:72
+#: ../src/f-spot.glade.h:26
msgid "Select a Tag..."
msgstr "Velg et merke..."
-#: ../src/f-spot.glade.h:73
-msgid "Select the camera from which you want to transfer files"
-msgstr "Velg kameraet du vil overføre filer fra"
-
-#: ../src/f-spot.glade.h:74
-msgid "Selected Camera: "
-msgstr "Valgt kamera:"
-
-#: ../src/f-spot.glade.h:75
+#: ../src/f-spot.glade.h:27
msgid "Selection Constraints"
msgstr "Begrensning for utvalg"
-#: ../src/f-spot.glade.h:76 ../src/ui/main_window.ui.h:21
+#: ../src/f-spot.glade.h:28 ../src/ui/main_window.ui.h:22
msgid "Set as _Background"
msgstr "Bruk som _bakgrunn"
-#: ../src/f-spot.glade.h:77
+#: ../src/f-spot.glade.h:29
msgid "Show all photos."
msgstr "Vis alle bilder."
-#: ../src/f-spot.glade.h:78
+#: ../src/f-spot.glade.h:30
msgid "Show or hide the side pane"
msgstr "Vis eller skjul sidefeltet"
-#: ../src/f-spot.glade.h:79
+#: ../src/f-spot.glade.h:31
msgid "Show or hide the toolbar"
msgstr "Vis eller skjul verktøylinjen"
-#: ../src/f-spot.glade.h:80
+#: ../src/f-spot.glade.h:32
msgid "Side _pane"
msgstr "Side_felt"
-#: ../src/f-spot.glade.h:81
-msgid "Small"
-msgstr "Liten"
-
-#: ../src/f-spot.glade.h:82
-msgid ""
-"Specify if an original size picture should be rotated or not. Smaller sizes "
-"are automatically rotated."
-msgstr ""
-
-#: ../src/f-spot.glade.h:83
-msgid "Strip image _metadata"
-msgstr "Fjern bildemetadata"
-
#. Note for translators: meant as Temperature
-#: ../src/f-spot.glade.h:85
+#: ../src/f-spot.glade.h:34
msgid "Te_mp:"
msgstr ""
-#: ../src/f-spot.glade.h:86
-msgid "Tiny"
-msgstr "Liten"
-
-#: ../src/f-spot.glade.h:87
-msgid "Total original size"
-msgstr ""
-
-#: ../src/f-spot.glade.h:88 ../src/ui/main_window.ui.h:28
+#: ../src/f-spot.glade.h:35 ../src/ui/main_window.ui.h:29
msgid "Zoom _in"
msgstr "Zoom _inn"
-#: ../src/f-spot.glade.h:89 ../src/ui/main_window.ui.h:29
+#: ../src/f-spot.glade.h:36 ../src/ui/main_window.ui.h:30
msgid "Zoom _out"
msgstr "Zoom _ut"
-#: ../src/f-spot.glade.h:90 ../src/ui/main_window.ui.h:30
+#: ../src/f-spot.glade.h:37 ../src/ui/main_window.ui.h:31
msgid "Zoom in"
msgstr "Zoom inn"
-#: ../src/f-spot.glade.h:91 ../src/ui/main_window.ui.h:31
+#: ../src/f-spot.glade.h:38 ../src/ui/main_window.ui.h:32
msgid "Zoom out"
msgstr "Zoom ut"
-#: ../src/f-spot.glade.h:92
+#: ../src/f-spot.glade.h:39
msgid "_Brightness:"
msgstr "_Lysstyrke:"
-#: ../src/f-spot.glade.h:93
-msgid "_Create Mail"
-msgstr "_Lag e-post"
-
-#: ../src/f-spot.glade.h:94 ../src/ui/main_window.ui.h:44
+#: ../src/f-spot.glade.h:40 ../src/ui/main_window.ui.h:45
msgid "_Edit"
msgstr "R_ediger"
-#: ../src/f-spot.glade.h:98
+#: ../src/f-spot.glade.h:42
msgid "_Exposure:"
msgstr "_Eksponering:"
-#: ../src/f-spot.glade.h:99
-msgid "_Flickr"
-msgstr "_Flickr"
-
-#: ../src/f-spot.glade.h:100 ../src/ui/main_window.ui.h:48
+#: ../src/f-spot.glade.h:43 ../src/ui/main_window.ui.h:49
msgid "_Fullscreen"
msgstr "_Fullskjerm"
-#: ../src/f-spot.glade.h:101
-msgid "_Gallery"
-msgstr "_Galleri"
-
-#: ../src/f-spot.glade.h:102 ../src/ui/main_window.ui.h:49
+#: ../src/f-spot.glade.h:44 ../src/ui/main_window.ui.h:50
msgid "_Help"
msgstr "_Hjelp"
-#: ../src/f-spot.glade.h:103
+#: ../src/f-spot.glade.h:45
msgid "_Hue:"
msgstr "_Tone:"
-#: ../src/f-spot.glade.h:104
+#: ../src/f-spot.glade.h:46
#, fuzzy
msgid "_Interpolate image on zoom"
msgstr "interpolasjonstype"
-#: ../src/f-spot.glade.h:105
+#: ../src/f-spot.glade.h:47
msgid "_New Window"
msgstr "_Nytt vindu"
-#: ../src/f-spot.glade.h:106
-msgid "_Open album in browser when done uploading"
-msgstr "_Åpne album i nettleser når opplasting er ferdig"
-
-#: ../src/f-spot.glade.h:107
-msgid "_Open destination when done exporting"
-msgstr "_Åpne mål når eksportering er ferdig"
-
-#: ../src/f-spot.glade.h:108 ../src/ui/main_window.ui.h:56
+#: ../src/f-spot.glade.h:48 ../src/ui/main_window.ui.h:58
msgid "_Photo"
msgstr "_Bilde"
-#: ../src/f-spot.glade.h:110
+#: ../src/f-spot.glade.h:49
msgid "_Saturation:"
msgstr "_Metning:"
-#: ../src/f-spot.glade.h:111
-msgid "_Scale photos to no larger than: "
-msgstr "Skaler bilder så de ikke er større enn: "
-
-#: ../src/f-spot.glade.h:112 ../src/ui/main_window.ui.h:67
+#: ../src/f-spot.glade.h:50 ../src/ui/main_window.ui.h:69
msgid "_Slideshow"
msgstr "_Bildefremvisning"
-#: ../src/f-spot.glade.h:113
-msgid "_Strip metadata"
-msgstr "_Fjern metadata"
-
-#: ../src/f-spot.glade.h:114 ../src/UI.Dialog/ui/EditTagDialog.ui.h:6
+#: ../src/f-spot.glade.h:51 ../src/UI.Dialog/ui/EditTagDialog.ui.h:6
msgid "_Tag Name:"
msgstr "_Merkenavn:"
-#: ../src/f-spot.glade.h:115
+#: ../src/f-spot.glade.h:52
#, fuzzy
msgid "_Tint:"
msgstr "Tittel"
-#: ../src/f-spot.glade.h:116
+#: ../src/f-spot.glade.h:53
msgid "_Toolbar"
msgstr "Verk_tøylinje"
-#: ../src/f-spot.glade.h:117
-msgid "_URI:"
-msgstr "_URI:"
-
-#: ../src/f-spot.glade.h:118 ../src/ui/main_window.ui.h:75
+#: ../src/f-spot.glade.h:54 ../src/ui/main_window.ui.h:77
msgid "_View"
msgstr "_Vis"
-#: ../src/f-spot.glade.h:119
-msgid "_Virtual Filesystem"
-msgstr "_Virtuelt filsystem"
-
-#: ../src/f-spot.glade.h:120 ../src/Widgets/FindBar.cs:177
+#: ../src/f-spot.glade.h:55 ../src/Widgets/FindBar.cs:178
+#: ../src/Widgets/FindBar.cs:534
msgid "and"
msgstr "og"
#. at, or after a date, or between dates
-#: ../src/f-spot.glade.h:122
+#: ../src/f-spot.glade.h:57
msgid ""
"at\n"
"after\n"
@@ -2077,40 +1985,36 @@ msgstr ""
"etter\n"
"mellom"
-#: ../src/f-spot.glade.h:126
-msgid "x"
-msgstr "x"
-
-#: ../src/FullScreenView.cs:58
+#: ../src/FullScreenView.cs:59
msgid "Hide"
msgstr "Skjul"
-#: ../src/FullScreenView.cs:60
+#: ../src/FullScreenView.cs:61
msgid "Hide Toolbar"
msgstr "Skjul verktøylinje"
-#: ../src/FullScreenView.cs:66
+#: ../src/FullScreenView.cs:67
msgid "Info"
msgstr "Informasjon"
-#: ../src/FullScreenView.cs:68 ../src/Widgets/InfoBox.cs:201
+#: ../src/FullScreenView.cs:69 ../src/Widgets/InfoBox.cs:202
msgid "Image Information"
msgstr "Bildeinformasjon"
-#: ../src/FullScreenView.cs:73
+#: ../src/FullScreenView.cs:74
msgid "Exit fullscreen"
msgstr "Lukk fullskjerm"
-#: ../src/FullScreenView.cs:81 ../src/MainWindow.cs:341
-#: ../src/SingleView.cs:88
+#: ../src/FullScreenView.cs:82 ../src/MainWindow.cs:313
+#: ../src/SingleView.cs:87
msgid "Slideshow"
msgstr "Bildefremvisning"
-#: ../src/FullScreenView.cs:82
+#: ../src/FullScreenView.cs:83
msgid "Start slideshow"
msgstr "Start lysbildefremvisning"
-#: ../src/FullScreenView.cs:128
+#: ../src/FullScreenView.cs:129
msgid "Slide transition:"
msgstr "Overgang mellom lysbilder:"
@@ -2122,35 +2026,35 @@ msgstr "Flere datoer"
msgid "More"
msgstr "Mer"
-#: ../src/GroupSelector.cs:517 ../src/ui/main_window.ui.h:34
+#: ../src/GroupSelector.cs:530 ../src/ui/main_window.ui.h:35
msgid "_Clear Date Range"
msgstr "_Nullstill datointervall"
-#: ../src/Imaging/Exif.cs:228
+#: ../src/Imaging/Exif.cs:229
msgid "Image Directory"
msgstr "Bildemappe"
-#: ../src/Imaging/Exif.cs:230
+#: ../src/Imaging/Exif.cs:231
msgid "Thumbnail Directory"
msgstr "Miniatyrbildemappe"
-#: ../src/Imaging/Exif.cs:232
+#: ../src/Imaging/Exif.cs:233
msgid "Exif Directory"
msgstr "Exif-mappe"
-#: ../src/Imaging/Exif.cs:234
+#: ../src/Imaging/Exif.cs:235
msgid "GPS Directory"
msgstr "GPS-mappe"
-#: ../src/Imaging/Exif.cs:236
+#: ../src/Imaging/Exif.cs:237
msgid "InterOperability Directory"
msgstr "Samkjøringsmappe"
-#: ../src/Imaging/Exif.cs:238
+#: ../src/Imaging/Exif.cs:239
msgid "Unknown Directory"
msgstr "Ukjent mappe"
-#: ../src/Imaging/ImageFile.cs:117
+#: ../src/Imaging/ImageFile.cs:119
msgid "Writing to this file format is not supported"
msgstr "Skriving til dette filformatet er ikke støttet"
@@ -2283,40 +2187,12 @@ msgstr "Intellektuell genre for motiv"
msgid "Unknown IIM DataSet"
msgstr "Ukjent IIM-datasett"
-#: ../src/ImportCommand.cs:48 ../src/SingleView.cs:344
-msgid "Select Folder"
-msgstr "Velg mappe"
-
-#: ../src/ImportCommand.cs:259
-msgid "(No Cameras Detected)"
-msgstr "(Ingen kameraer funnet)"
-
-#: ../src/ImportCommand.cs:404
-#, csharp-format
-msgid "Loading {0} of {1}"
-msgstr "Laster {0} av {1}"
-
-#: ../src/ImportCommand.cs:470
-msgid "Done Loading"
-msgstr "Ferdig"
-
-#: ../src/ImportCommand.cs:684
-msgid "Directory does not exist."
-msgstr "Mappen finnes ikke."
-
-#: ../src/ImportCommand.cs:685
-#, csharp-format
-msgid ""
-"The directory you selected \"{0}\" does not exist. Please choose a "
-"different directory"
-msgstr "Mappen du valgte «{0}», finnes ikke. Velg en annen mappe"
-
-#: ../src/ImportCommand.cs:738 ../src/ImportCommand.cs:740
+#: ../src/Import/ImportController.cs:406 ../src/Import/ImportController.cs:408
#: ../src/XmpTagsImporter.cs:89
msgid "Imported Tags"
msgstr "Importerte merker"
-#: ../src/ItemAction.cs:79 ../src/MainWindow.cs:308 ../src/SingleView.cs:71
+#: ../src/ItemAction.cs:79 ../src/MainWindow.cs:280 ../src/SingleView.cs:70
msgid "Rotate Left"
msgstr "Roter mot venstre"
@@ -2324,7 +2200,7 @@ msgstr "Roter mot venstre"
msgid "Rotate picture left"
msgstr "Roter bilde mot venstre"
-#: ../src/ItemAction.cs:91 ../src/MainWindow.cs:312 ../src/SingleView.cs:76
+#: ../src/ItemAction.cs:91 ../src/MainWindow.cs:284 ../src/SingleView.cs:75
msgid "Rotate Right"
msgstr "Roter mot høyre"
@@ -2336,136 +2212,132 @@ msgstr "Roter bilde mot høyre"
msgid "Next picture"
msgstr "Neste bilde"
+#: ../src/ItemAction.cs:123
+msgid "Previous"
+msgstr "Forrige"
+
#: ../src/ItemAction.cs:124
msgid "Previous picture"
msgstr "Forrige bilde"
-#: ../src/MainWindow.cs:303
+#: ../src/MainWindow.cs:273 ../src/UI.Dialog/ImportDialog.cs:171
+#: ../src/ui/import.ui.h:4
+msgid "Import"
+msgstr "Importer"
+
+#: ../src/MainWindow.cs:275
msgid "Import new images"
msgstr "Importer nye bilder"
-#: ../src/MainWindow.cs:319 ../src/ui/main_window.ui.h:3
+#: ../src/MainWindow.cs:291 ../src/ui/main_window.ui.h:3
msgid "Browse"
msgstr "Finn"
-#: ../src/MainWindow.cs:323
+#: ../src/MainWindow.cs:295
msgid "Browse many photos simultaneously"
msgstr "Vis mange bilder samtidig"
-#: ../src/MainWindow.cs:327
+#: ../src/MainWindow.cs:299
msgid "Edit Image"
msgstr "Rediger bilde"
-#: ../src/MainWindow.cs:331
+#: ../src/MainWindow.cs:303
msgid "View and edit a photo"
msgstr "Vis og rediger et bilde"
-#: ../src/MainWindow.cs:336 ../src/SingleView.cs:83
+#: ../src/MainWindow.cs:308 ../src/SingleView.cs:82
msgid "Fullscreen"
msgstr "Fullskjerm"
-#: ../src/MainWindow.cs:338 ../src/SingleView.cs:85
+#: ../src/MainWindow.cs:310 ../src/SingleView.cs:84
msgid "View photos fullscreen"
msgstr "Vis bilder i fullskjerm"
-#: ../src/MainWindow.cs:343 ../src/SingleView.cs:90
+#: ../src/MainWindow.cs:315 ../src/SingleView.cs:89
msgid "View photos in a slideshow"
msgstr "Vis bilder som lysbilder"
-#: ../src/MainWindow.cs:358
+#: ../src/MainWindow.cs:330
msgid "Previous photo"
msgstr "Forrige bilde"
-#: ../src/MainWindow.cs:363
+#: ../src/MainWindow.cs:335
msgid "Next photo"
msgstr "Neste bilde"
-#: ../src/MainWindow.cs:1518
-msgid "No cameras detected."
-msgstr "Ingen kameraer funnet."
-
-#: ../src/MainWindow.cs:1519
-msgid ""
-"F-Spot was unable to find any cameras attached to this system. Double check "
-"that the camera is connected and has power"
-msgstr ""
-"F-Spot klarte ikke å finne noen kameraer koblet til. Dobbeltsjekk at "
-"kameraet er tilkoblet og at det har strøm"
-
-#: ../src/MainWindow.cs:1558
-msgid "Error connecting to camera"
-msgstr "Feil ved tilkobling til kamera"
+#: ../src/MainWindow.cs:412
+msgid "Show _Find Bar"
+msgstr "Vis sø_kelinjen"
-#: ../src/MainWindow.cs:1559
-#, csharp-format
-msgid "Received error \"{0}\" while connecting to camera"
-msgstr "Mottok feil «{0}» ved tilkobling til kamera"
+#: ../src/MainWindow.cs:415
+msgid "Hide _Find Bar"
+msgstr "Skjul sø_kelinjen"
#. Translators, The singular case will never happen here.
-#: ../src/MainWindow.cs:1846
+#: ../src/MainWindow.cs:1719
#, csharp-format
msgid "Merge the selected tag"
msgid_plural "Merge the {0} selected tags?"
msgstr[0] "Flett {0} valgt merke"
msgstr[1] "Flett de {0} valgte merkene?"
-#: ../src/MainWindow.cs:1873
+#: ../src/MainWindow.cs:1746
msgid ""
"This operation will merge the selected tags and any sub-tags into a single "
"tag."
msgstr ""
-#: ../src/MainWindow.cs:1875
+#: ../src/MainWindow.cs:1748
msgid "_Merge Tags"
msgstr "_Sammenføy merker"
-#: ../src/MainWindow.cs:2080
+#: ../src/MainWindow.cs:1953
#, csharp-format
msgid "{0} Photo out of {1}"
msgid_plural "{0} Photos out of {1}"
msgstr[0] "{0} bilde av {1}"
msgstr[1] "{0} bilder av {1}"
-#: ../src/MainWindow.cs:2082 ../src/SingleView.cs:467
+#: ../src/MainWindow.cs:1955 ../src/SingleView.cs:465
#, csharp-format
msgid "{0} Photo"
msgid_plural "{0} Photos"
msgstr[0] "{0} bilde"
msgstr[1] "{0} bilder"
-#: ../src/MainWindow.cs:2085
+#: ../src/MainWindow.cs:1958
#, csharp-format
msgid " ({0} selected)"
msgid_plural " ({0} selected)"
msgstr[0] " ({0} valgt)"
msgstr[1] " ({0} valgt)"
-#: ../src/MainWindow.cs:2166
+#: ../src/MainWindow.cs:2039
msgid "_Ok"
msgstr "_Ok"
-#: ../src/MainWindow.cs:2167
+#: ../src/MainWindow.cs:2040
msgid "Error Deleting Picture"
msgstr "Kunne ikke slette bilde"
-#: ../src/MainWindow.cs:2172
+#: ../src/MainWindow.cs:2045
#, csharp-format
msgid "No permission to delete the file:{1}{0}"
msgstr "Ikke rettigheter til å slette filen:{1}{0}"
-#: ../src/MainWindow.cs:2176
+#: ../src/MainWindow.cs:2049
#, csharp-format
msgid "An error of type {0} occurred while deleting the file:{2}{1}"
msgstr ""
-#: ../src/MainWindow.cs:2208
+#: ../src/MainWindow.cs:2081
#, csharp-format
msgid "Delete the selected photo permanently?"
msgid_plural "Delete the {0} selected photos permanently?"
msgstr[0] "Slett det valgte bildet permanent?"
msgstr[1] "Slett de {0} valgte bildene permanent?"
-#: ../src/MainWindow.cs:2212
+#: ../src/MainWindow.cs:2085
msgid "This deletes all versions of the selected photo from your drive."
msgid_plural ""
"This deletes all versions of the selected photos from your drive."
@@ -2474,20 +2346,20 @@ msgstr[0] ""
msgstr[1] ""
"Dette sletter alle versjoner av de valgte bildene fra harddisken din."
-#: ../src/MainWindow.cs:2215
+#: ../src/MainWindow.cs:2088
msgid "_Delete photo"
msgid_plural "_Delete photos"
msgstr[0] "Slett bilde"
msgstr[1] "Slett bilder"
-#: ../src/MainWindow.cs:2251
+#: ../src/MainWindow.cs:2124
#, csharp-format
msgid "Remove the selected photo from F-Spot?"
msgid_plural "Remove the {0} selected photos from F-Spot?"
msgstr[0] "Fjern det valgte bildet fra F-Spot?"
msgstr[1] "Fjern de {0} valgte bildene fra F-Spot?"
-#: ../src/MainWindow.cs:2256
+#: ../src/MainWindow.cs:2129
msgid ""
"If you remove photos from the F-Spot catalog all tag information will be "
"lost. The photos remain on your computer and can be imported into F-Spot "
@@ -2497,27 +2369,27 @@ msgstr ""
"tapt. Bildene vil fremdeles være lagret på datamaskinen, og de kan "
"importeres til F-Spot igjen seinere."
-#: ../src/MainWindow.cs:2257
+#: ../src/MainWindow.cs:2130
msgid "_Remove from Catalog"
msgstr "_Fjern fra F-Spot"
-#: ../src/MainWindow.cs:2320
+#: ../src/MainWindow.cs:2199
#, csharp-format
msgid "Delete tag \"{0}\"?"
msgstr "_Slett merket «{0}»?"
-#: ../src/MainWindow.cs:2322
+#: ../src/MainWindow.cs:2201
#, csharp-format
msgid "Delete the {0} selected tags?"
msgstr "Slett {0} valgte merkelapper?"
-#: ../src/MainWindow.cs:2327
+#: ../src/MainWindow.cs:2206
msgid "photo"
msgid_plural "photos"
msgstr[0] "bilde"
msgstr[1] "bilder"
-#: ../src/MainWindow.cs:2329
+#: ../src/MainWindow.cs:2208
#, fuzzy, csharp-format
msgid "If you delete this tag, the association with {0} {1} will be lost."
msgid_plural ""
@@ -2527,57 +2399,57 @@ msgstr[0] ""
msgstr[1] ""
"Hvis du sletter et merke, vil merkets tilknytninger til bilder gå tapt."
-#: ../src/MainWindow.cs:2334
+#: ../src/MainWindow.cs:2213
msgid "_Delete tag"
msgid_plural "_Delete tags"
msgstr[0] "_Slett merke"
msgstr[1] "_Slett merker"
#. A Category is not empty. Can not delete it.
-#: ../src/MainWindow.cs:2348
+#: ../src/MainWindow.cs:2227
msgid "Tag is not empty"
msgstr ""
-#: ../src/MainWindow.cs:2349
+#: ../src/MainWindow.cs:2228
#, csharp-format
msgid ""
"Can not delete tags that have tags within them. Please delete tags under "
"\"{0}\" first"
msgstr ""
-#: ../src/MainWindow.cs:2789
+#: ../src/MainWindow.cs:2659
msgid "Rotate selected photo left"
msgid_plural "Rotate selected photos left"
msgstr[0] "Roter valgt bilde til venstre"
msgstr[1] "Roter valgte bilder til venstre"
-#: ../src/MainWindow.cs:2802
+#: ../src/MainWindow.cs:2672
msgid "Rotate selected photo right"
msgid_plural "Rotate selected photos right"
msgstr[0] "Roter valgt bilde til høyre"
msgstr[1] "Roter valgte bilder til høyre"
-#: ../src/MainWindow.cs:2813
+#: ../src/MainWindow.cs:2683
#, csharp-format
msgid "Find _Selected Tag"
msgid_plural "Find _Selected Tags"
msgstr[0] "Finn _valgt merkelapp"
msgstr[1] "Finn _valgte merkelapper"
-#: ../src/MainWindow.cs:2817
+#: ../src/MainWindow.cs:2687
#, fuzzy, csharp-format
msgid "Find Selected Tag _With"
msgid_plural "Find Selected Tags _With"
msgstr[0] "_Rediger valgt merke..."
msgstr[1] "_Rediger valgt merke..."
-#: ../src/MainWindow.cs:2858
+#: ../src/MainWindow.cs:2728
msgid "Create New Version?"
msgid_plural "Create New Versions?"
msgstr[0] "Opprett ny versjon?"
msgstr[1] "Opprett nye versjoner?"
-#: ../src/MainWindow.cs:2860
+#: ../src/MainWindow.cs:2730
#, csharp-format
msgid ""
"Before launching {1}, should F-Spot create a new version of the selected "
@@ -2588,7 +2460,7 @@ msgid_plural ""
msgstr[0] ""
msgstr[1] ""
-#: ../src/MainWindow.cs:2882
+#: ../src/MainWindow.cs:2752
msgid "XCF version"
msgstr "XCF-versjon"
@@ -2702,9 +2574,13 @@ msgstr "Skarphet"
msgid "Scene Type"
msgstr "Motivtype"
+#: ../src/PhotoStore.cs:166 ../src/ui/mail_dialog.ui.h:19
+msgid "Original"
+msgstr "Original"
+
#. Fixme this should really set parent menu
#. items insensitve
-#: ../src/PhotoTagMenu.cs:74
+#: ../src/PhotoTagMenu.cs:62
msgid "(No Tags)"
msgstr "(Ingen merker)"
@@ -2724,66 +2600,63 @@ msgstr "Endre versjonsnavn"
msgid "New name:"
msgstr "Nytt navn:"
-#: ../src/PhotoVersionCommands.cs:110
-msgid "Could not create a new version"
-msgstr "Kunne ikke opprette ny versjon"
-
-#: ../src/PhotoVersionCommands.cs:111
-#, fuzzy, csharp-format
-msgid "Received exception \"{0}\". Unable to create version \"{1}\""
-msgstr "Mottok unntak «{0}». Kunne ikke lagre bilde {1}"
-
-#: ../src/PhotoVersionCommands.cs:138
-msgid "Really Delete?"
-msgstr "Vil du slette?"
-
-#: ../src/PhotoVersionCommands.cs:139
-msgid "Cancel"
-msgstr "Avbryt"
-
-#: ../src/PhotoVersionCommands.cs:140
+#: ../src/PhotoVersionCommands.cs:123
msgid "Delete"
msgstr "Slett"
-#: ../src/PhotoVersionCommands.cs:144
+#: ../src/PhotoVersionCommands.cs:124
#, csharp-format
msgid "Really delete version \"{0}\"?"
msgstr "Vil du slette versjon «{0}»?"
-#: ../src/PhotoVersionCommands.cs:154
-msgid "Could not delete a version"
-msgstr "Kunne ikke slette versjon"
+#: ../src/PhotoVersionCommands.cs:125
+msgid "This removes the version and deletes the corresponding file from disk."
+msgstr ""
+
+#: ../src/PhotoVersionCommands.cs:170
+msgid "De_tach"
+msgstr ""
-#: ../src/PhotoVersionCommands.cs:155
+#: ../src/PhotoVersionCommands.cs:171
#, fuzzy, csharp-format
-msgid "Received exception \"{0}\". Unable to delete version \"{1}\""
-msgstr "Mottok unntak «{0}». Kunne ikke lagre bilde {1}"
+msgid "Really detach version \"{0}\" from \"{1}\"?"
+msgstr "Vil du slette versjon «{0}»?"
+
+#: ../src/PhotoVersionCommands.cs:172
+msgid ""
+"This makes the version appear as a separate photo in the library. To undo, "
+"drag the new photo back to its parent."
+msgstr ""
+
+#: ../src/PhotoVersionCommands.cs:194
+#, fuzzy
+msgid "Re_parent"
+msgstr "Reparer"
+
+#: ../src/PhotoVersionCommands.cs:195
+#, fuzzy, csharp-format
+msgid "Really reparent \"{0}\" as version of \"{1}\"?"
+msgid_plural "Really reparent {2} photos as versions of \"{1}\"?"
+msgstr[0] "Vil du slette versjon «{0}»?"
+msgstr[1] "Vil du slette versjon «{0}»?"
-#: ../src/PhotoVersionCommands.cs:196
-msgid "Could not rename a version"
-msgstr "Kunne ikke endre navn på en versjon"
+#: ../src/PhotoVersionCommands.cs:198
+msgid ""
+"This makes the photos appear as a single one in the library. The versions "
+"can be detached using the Photo menu."
+msgstr ""
-#: ../src/PhotoVersionCommands.cs:197
+#: ../src/PhotoVersionCommands.cs:238
#, fuzzy, csharp-format
-msgid "Received exception \"{0}\". Unable to rename version to \"{1}\""
+msgid "Received exception \"{0}\"."
msgstr "Mottok unntak «{0}». Kunne ikke lagre bilde {1}"
-#: ../src/PhotoVersionMenu.cs:66 ../src/Widgets/InfoBox.cs:563
-#: ../src/Widgets/InfoBox.cs:565
+#: ../src/PhotoVersionMenu.cs:66 ../src/Widgets/InfoBox.cs:566
+#: ../src/Widgets/InfoBox.cs:568
msgid "(No Edits)"
msgstr "(Ingen redigeringer)"
-#: ../src/PhotoView.cs:167 ../src/UI.Dialog/EditExceptionDialog.cs:38
-msgid "Error editing photo"
-msgstr "Feil ved redigering av bilde"
-
-#: ../src/PhotoView.cs:168 ../src/Sharpener.cs:73
-#: ../src/UI.Dialog/EditExceptionDialog.cs:25
-#, csharp-format
-msgid "Received exception \"{0}\". Unable to save photo {1}"
-msgstr "Mottok unntak «{0}». Kunne ikke lagre bilde {1}"
-
-#: ../src/PhotoView.cs:356
+#: ../src/PhotoView.cs:339
msgid "Comment:"
msgstr "Kommentar:"
@@ -2795,72 +2668,64 @@ msgstr "Bilder"
msgid "Image Settings"
msgstr "Innstillinger for bilde"
-#: ../src/QueryWidget.cs:58
+#: ../src/QueryWidget.cs:55
msgid "Find: "
msgstr "Finn: "
-#: ../src/QueryWidget.cs:63
+#: ../src/QueryWidget.cs:60
msgid "Untagged photos"
msgstr "Umerkede fotografier"
-#: ../src/QueryWidget.cs:71
+#: ../src/QueryWidget.cs:68
msgid "Rated photos"
msgstr "Bilder med poeng"
#. Note for translators: 'Import roll' is no command, it means 'Roll that has been imported'
-#: ../src/QueryWidget.cs:80
+#: ../src/QueryWidget.cs:77
msgid "Import roll"
msgstr "Importer rull"
-#: ../src/QueryWidget.cs:104
+#: ../src/QueryWidget.cs:100
msgid "Clear search"
msgstr "Tøm søk"
-#: ../src/QueryWidget.cs:111
+#: ../src/QueryWidget.cs:107
msgid "Refresh search"
msgstr "Oppdater søk"
-#: ../src/QueryWidget.cs:113
+#: ../src/QueryWidget.cs:110
msgid "No matching photos found"
msgstr "Ingen passende bilder funnet"
-#: ../src/QueryWidget.cs:155
-msgid "Hide _Find Bar"
-msgstr "Skjul sø_kelinjen"
-
-#: ../src/QueryWidget.cs:161
-msgid "Show _Find Bar"
-msgstr "Vis sø_kelinjen"
-
-#: ../src/RotateCommand.cs:96 ../src/RotateCommand.cs:111
+#: ../src/RotateCommand.cs:87 ../src/RotateCommand.cs:102
msgid "Unable to rotate this type of photo"
msgstr "Kan ikke rotere denne typen bilde"
-#: ../src/RotateCommand.cs:131
+#: ../src/RotateCommand.cs:122
msgid "Unable to rotate readonly file"
msgstr "Kan ikke rotere skrivebeskytte fil"
-#: ../src/RotateCommand.cs:198
+#: ../src/RotateCommand.cs:185
msgid "Rotating photos"
msgstr "Roterer bilder"
-#: ../src/RotateCommand.cs:209
+#: ../src/RotateCommand.cs:196
#, csharp-format
msgid "Rotating photo \"{0}\""
msgstr "Roterer bilde «{0}»"
-#: ../src/RotateCommand.cs:222
+#: ../src/RotateCommand.cs:209
msgid "Directory not found"
msgstr "Katalog ikke funnet"
-#: ../src/RotateCommand.cs:242
+#: ../src/RotateCommand.cs:229
#, csharp-format
msgid "Unable to rotate photo"
msgid_plural "Unable to rotate {0} photos"
msgstr[0] "Kan ikke rotere bilde"
msgstr[1] "Kan ikke rotere {0} bilder"
-#: ../src/RotateCommand.cs:244
+#: ../src/RotateCommand.cs:231
#, fuzzy, csharp-format
msgid ""
"The photo could not be rotated because it is on a read only file system or "
@@ -2877,35 +2742,35 @@ msgstr[1] ""
"som ikke kan skrives til, som for eksempel en CDROM. Se over rettighetene og "
"prøv igjen"
-#: ../src/RotateCommand.cs:271
+#: ../src/RotateCommand.cs:258
#, csharp-format
msgid "Received error \"{0}\" while attempting to rotate {1}"
msgstr "Mottok feil «{0}» ved forsøk på å rotere {1}"
-#: ../src/RotateCommand.cs:276
+#: ../src/RotateCommand.cs:263
msgid "Error while rotating photo."
msgstr "Feil under rotering av bilde."
-#: ../src/SendEmail.cs:240
+#: ../src/SendEmail.cs:217
msgid "Preparing email"
msgstr "Forbereder e-post"
-#: ../src/SendEmail.cs:292
+#: ../src/SendEmail.cs:266
#, csharp-format
msgid "Exporting picture \"{0}\""
msgstr "Eksporter bilde «{0}»"
-#: ../src/SendEmail.cs:314
+#: ../src/SendEmail.cs:285
msgid "Error processing image"
msgstr "Feil ved prosessering av bilde"
-#: ../src/SendEmail.cs:315
+#: ../src/SendEmail.cs:286
#, csharp-format
msgid "An error occured while processing \"{0}\": {1}"
msgstr ""
#. Send the mail :)
-#: ../src/SendEmail.cs:330
+#: ../src/SendEmail.cs:299
msgid "My Photos"
msgstr "Mine bilder"
@@ -2913,6 +2778,11 @@ msgstr "Mine bilder"
msgid "Error saving sharpened photo"
msgstr "Feil ved lagring av oppskarpet foto"
+#: ../src/Sharpener.cs:73 ../src/UI.Dialog/EditExceptionDialog.cs:26
+#, csharp-format
+msgid "Received exception \"{0}\". Unable to save photo {1}"
+msgstr "Mottok unntak «{0}». Kunne ikke lagre bilde {1}"
+
#: ../src/Sharpener.cs:102
msgid "Sharpen"
msgstr "Øk skarphet"
@@ -2929,36 +2799,40 @@ msgstr "Radius:"
msgid "Threshold:"
msgstr "Terskel:"
-#: ../src/SingleView.cs:73
+#: ../src/SingleView.cs:72
msgid "Rotate photo left"
msgstr "Roter bildet til venstre"
-#: ../src/SingleView.cs:78
+#: ../src/SingleView.cs:77
msgid "Rotate photo right"
msgstr "Roter bildet til høyre"
-#: ../src/SingleView.cs:115
+#: ../src/SingleView.cs:114
msgid "Folder"
msgstr "Mappe"
-#: ../src/SingleView.cs:341
+#: ../src/SingleView.cs:339
msgid "Open"
msgstr "Åpne"
-#: ../src/SingleView.cs:428
+#: ../src/SingleView.cs:342
+msgid "Select Folder"
+msgstr "Velg mappe"
+
+#: ../src/SingleView.cs:426
msgid "Set as Background"
msgstr "Bruk som bakgrunn"
-#: ../src/TagCommands.cs:96 ../src/TagSelectionWidget.cs:498
-#: ../src/UI.Dialog/EditTagDialog.cs:78
+#: ../src/TagCommands.cs:97 ../src/TagSelectionWidget.cs:491
+#: ../src/UI.Dialog/EditTagDialog.cs:76
msgid "This name is already in use"
msgstr "Dette navnet er allerede i bruk"
-#: ../src/TagCommands.cs:144
+#: ../src/TagCommands.cs:145
msgid "Create New Tag"
msgstr "Opprett nytt merke"
-#: ../src/TagCommands.cs:145
+#: ../src/TagCommands.cs:146
msgid "Name of New Tag:"
msgstr "Navn på nytt merke:"
@@ -2969,7 +2843,7 @@ msgid_plural "Find"
msgstr[0] "Finn"
msgstr[1] "Finn"
-#: ../src/TagPopup.cs:36 ../src/Widgets/TagMenu.cs:91
+#: ../src/TagPopup.cs:36 ../src/Widgets/TagMenu.cs:98
msgid "Create New Tag..."
msgstr "Opprett nytt merke ..."
@@ -3024,41 +2898,41 @@ msgstr[1] "Finn _med"
msgid "All"
msgstr "Alle"
-#: ../src/TagQueryWidget.cs:149 ../src/Term.cs:592
+#: ../src/TagQueryWidget.cs:149 ../src/Term.cs:586
#, csharp-format
msgid "Not {0}"
msgstr "Ikke {0}"
-#: ../src/TagQueryWidget.cs:278
+#: ../src/TagQueryWidget.cs:273
msgid "Drag tags here to search for them"
msgstr "Dra merkelapper hit for å søke etter dem"
-#: ../src/TagSelectionWidget.cs:497
+#: ../src/TagSelectionWidget.cs:490
msgid "Error renaming tag"
msgstr "Feil ved endring av merkenavn"
-#: ../src/TagStore.cs:203
+#: ../src/TagStore.cs:204
msgid "Favorites"
msgstr "Favoritter"
-#: ../src/TagStore.cs:208
+#: ../src/TagStore.cs:209
msgid "Hidden"
msgstr "Skjult"
-#: ../src/TagStore.cs:216
+#: ../src/TagStore.cs:217
msgid "People"
msgstr "Personer"
-#: ../src/TagStore.cs:221
+#: ../src/TagStore.cs:222
msgid "Places"
msgstr "Steder"
-#: ../src/TagStore.cs:226
+#: ../src/TagStore.cs:227
msgid "Events"
msgstr "Hendelser"
#. The label for the root category is used in new and edit tag dialogs
-#: ../src/TagStore.cs:239 ../src/Widgets/InfoBox.cs:409
+#: ../src/TagStore.cs:240 ../src/Widgets/InfoBox.cs:410
msgid "(None)"
msgstr "(Ingen)"
@@ -3078,28 +2952,29 @@ msgstr " eller "
#. OPS The operators we support, case insensitive
#. private static string op_str = "(?'Ops' or | and |, | \\s+ )";
#: ../src/Term.cs:380 ../src/UI.Dialog/ui/DateRangeDialog.ui.h:7
-#: ../src/Widgets/FindBar.cs:177
+#: ../src/Widgets/FindBar.cs:178 ../src/Widgets/FindBar.cs:533
msgid "or"
msgstr "eller"
-#: ../src/ThumbnailCommand.cs:20
+#: ../src/ThumbnailCommand.cs:21
msgid "Updating Thumbnails"
msgstr "Oppdaterer miniatyrer"
-#: ../src/ThumbnailCommand.cs:28
+#: ../src/ThumbnailCommand.cs:29
#, csharp-format
msgid "Updating picture \"{0}\""
msgstr "Oppdaterer bilde «{0}»"
-#: ../src/UI.Dialog/AboutDialog.cs:76
+#: ../src/UI.Dialog/AboutDialog.cs:94
msgid "Photo management for GNOME"
msgstr "Fotobehandler for GNOME"
-#: ../src/UI.Dialog/AboutDialog.cs:77
-msgid "Copyright © 2003-2009 Novell Inc."
+#: ../src/UI.Dialog/AboutDialog.cs:95
+#, fuzzy
+msgid "Copyright © 2003-2010 Novell Inc."
msgstr "Opphavsrett © 2003-2009 Novell Inc."
-#: ../src/UI.Dialog/AboutDialog.cs:100
+#: ../src/UI.Dialog/AboutDialog.cs:119
msgid "translator-credits"
msgstr ""
"Kjartan Maraas <kmaraas at gnome.org>, 2006-2010\n"
@@ -3107,11 +2982,11 @@ msgstr ""
"Sigurd Gartmann\n"
"Øivind Hoel <ohoel at cvs.gnome.org>, 2006"
-#: ../src/UI.Dialog/AboutDialog.cs:105
+#: ../src/UI.Dialog/AboutDialog.cs:124
msgid "F-Spot Website"
msgstr "F-Spot nettsted"
-#: ../src/UI.Dialog/AdjustTimeDialog.cs:112
+#: ../src/UI.Dialog/AdjustTimeDialog.cs:113
#: ../src/UI.Dialog/ui/AdjustTimeDialog.ui.h:10
#, csharp-format
msgid "Shift all photos by {0}"
@@ -3153,16 +3028,20 @@ msgstr "Forrige uke (Man-Søn)"
msgid "Customized Range"
msgstr "Egendefinert område"
-#: ../src/UI.Dialog/EditTagIconDialog.cs:46
+#: ../src/UI.Dialog/EditExceptionDialog.cs:39
+msgid "Error editing photo"
+msgstr "Feil ved redigering av bilde"
+
+#: ../src/UI.Dialog/EditTagIconDialog.cs:42
#, csharp-format
msgid "Edit Icon for Tag {0}"
msgstr "Rediger ikon for merke {0}"
-#: ../src/UI.Dialog/EditTagIconDialog.cs:68
+#: ../src/UI.Dialog/EditTagIconDialog.cs:64
msgid "Select Photo from file"
msgstr "Velg bilde fra fil"
-#: ../src/UI.Dialog/EditTagIconDialog.cs:90
+#: ../src/UI.Dialog/EditTagIconDialog.cs:86
#, csharp-format
msgid ""
"\n"
@@ -3173,16 +3052,16 @@ msgid ""
" to use it as an icon."
msgstr ""
-#: ../src/UI.Dialog/EditTagIconDialog.cs:168
+#: ../src/UI.Dialog/EditTagIconDialog.cs:164
msgid "Unable to load image"
msgstr "Kan ikke laste bilde"
-#: ../src/UI.Dialog/EditTagIconDialog.cs:169
+#: ../src/UI.Dialog/EditTagIconDialog.cs:165
#, csharp-format
msgid "Unable to load \"{0}\" as icon for the tag"
msgstr ""
-#: ../src/UI.Dialog/EditTagIconDialog.cs:207
+#: ../src/UI.Dialog/EditTagIconDialog.cs:203
#, csharp-format
msgid "Photo {0} of {1}"
msgstr "Foto {0} av {1}"
@@ -3199,39 +3078,68 @@ msgstr "Detaljer om feil"
msgid "An unhandled exception was thrown: "
msgstr "En uhåndtert feil oppstod:"
-#: ../src/UI.Dialog/PreferenceDialog.cs:54
-#: ../src/UI.Dialog/PreferenceDialog.cs:77
+#: ../src/UI.Dialog/ImportDialog.cs:15
+#, fuzzy
+msgid "Choose Folder..."
+msgstr "Åpne mappe"
+
+#: ../src/UI.Dialog/ImportDialog.cs:124
+#, fuzzy
+msgid "Choose Import source..."
+msgstr "Importer kilde:"
+
+#: ../src/UI.Dialog/ImportDialog.cs:136
+msgid "(No Cameras Detected)"
+msgstr "(Ingen kameraer funnet)"
+
+#: ../src/UI.Dialog/ImportDialog.cs:264
+#, fuzzy, csharp-format
+msgid "Importing Photos: {0} of {1}..."
+msgstr "Foto {0} av {1}"
+
+#: ../src/UI.Dialog/ImportDialog.cs:288
+#, fuzzy
+msgid "Importing photos..."
+msgstr "Roterer bilder"
+
+#. TODO: Using a GtkSpinner would be nicer here.
+#: ../src/UI.Dialog/ImportDialog.cs:295
+msgid "Searching for photos... (You can already click Import to continue)"
+msgstr ""
+
+#: ../src/UI.Dialog/PreferenceDialog.cs:55
+#: ../src/UI.Dialog/PreferenceDialog.cs:78
msgid "None"
msgstr "Ingen"
-#: ../src/UI.Dialog/PreferenceDialog.cs:56
+#: ../src/UI.Dialog/PreferenceDialog.cs:57
msgid "System profile"
msgstr "Systemprofil"
-#: ../src/UI.Dialog/PreferenceDialog.cs:94
+#: ../src/UI.Dialog/PreferenceDialog.cs:95
msgid "Standard theme"
msgstr "Standard tema"
-#: ../src/UI.Dialog/RepairDbDialog.cs:20
+#: ../src/UI.Dialog/RepairDbDialog.cs:21
msgid "Error loading database."
msgstr "Feil ved lasting av database."
-#: ../src/UI.Dialog/RepairDbDialog.cs:21
+#: ../src/UI.Dialog/RepairDbDialog.cs:22
#, csharp-format
msgid ""
"F-Spot encountered an error while loading the photo database. The old "
"database has be moved to {0} and a new database has been created."
msgstr ""
-#: ../src/UI.Dialog/SelectionRatioDialog.cs:60
+#: ../src/UI.Dialog/SelectionRatioDialog.cs:61
msgid "Label"
msgstr "Etikett"
-#: ../src/UI.Dialog/SelectionRatioDialog.cs:64
+#: ../src/UI.Dialog/SelectionRatioDialog.cs:65
msgid "Ratio"
msgstr "Rate"
-#: ../src/UI.Dialog/ThreadProgressDialog.cs:56
+#: ../src/UI.Dialog/ThreadProgressDialog.cs:55
msgid "Retry"
msgstr "Prøv igjen"
@@ -3401,6 +3309,114 @@ msgstr "<b>Laveste poengsum</b>"
msgid "Set Rating Filter"
msgstr ""
+#: ../src/ui/import.ui.h:1
+msgid "Attach Tags:"
+msgstr "Fest merkelapper:"
+
+#: ../src/ui/import.ui.h:2
+msgid "Copy files to the Photos folder"
+msgstr "Kopier filer til bildemappen"
+
+#: ../src/ui/import.ui.h:3
+msgid "Detect duplicates"
+msgstr ""
+
+#. Translators: this string means 'source of import'
+#: ../src/ui/import.ui.h:6
+#, fuzzy
+msgid "Import from:"
+msgstr "Importer rull"
+
+#: ../src/ui/import.ui.h:7
+msgid "Include subfolders"
+msgstr "Ta med undermapper"
+
+#: ../src/ui/mail_dialog.ui.h:1
+msgid "1024 px"
+msgstr "1024 piksler"
+
+#: ../src/ui/mail_dialog.ui.h:2
+msgid "320 px"
+msgstr "320 piksler"
+
+#: ../src/ui/mail_dialog.ui.h:3
+msgid "480 px"
+msgstr "480 piksler"
+
+#: ../src/ui/mail_dialog.ui.h:4
+msgid "640 px"
+msgstr "640 piksler"
+
+#: ../src/ui/mail_dialog.ui.h:5
+msgid "800 px"
+msgstr "800 piksler"
+
+#: ../src/ui/mail_dialog.ui.h:7
+msgid "<b>Size</b>"
+msgstr "<b>Størrelse</b>"
+
+#: ../src/ui/mail_dialog.ui.h:9
+msgid "<b>Summary</b>"
+msgstr "<b>Sammendrag</b>"
+
+#: ../src/ui/mail_dialog.ui.h:11
+msgid "Create Mail"
+msgstr "Lag e-post"
+
+#: ../src/ui/mail_dialog.ui.h:12
+msgid "Create a mail with the selected photos (possibly resized) attached"
+msgstr ""
+
+#: ../src/ui/mail_dialog.ui.h:13
+msgid "Do not send a mail"
+msgstr "Ikke send e-post"
+
+#: ../src/ui/mail_dialog.ui.h:14
+msgid "Estimated new size"
+msgstr "Estimert ny størrelse"
+
+#: ../src/ui/mail_dialog.ui.h:15
+msgid "Extra large"
+msgstr "Ekstra stor"
+
+#: ../src/ui/mail_dialog.ui.h:16
+msgid "Large"
+msgstr "Stor:"
+
+#: ../src/ui/mail_dialog.ui.h:17
+msgid "Medium"
+msgstr "Middelse"
+
+#: ../src/ui/mail_dialog.ui.h:18
+msgid "Number of pictures"
+msgstr "Antall bilder"
+
+#: ../src/ui/mail_dialog.ui.h:20
+msgid "Original size (possible very large file size)"
+msgstr "Opprinnelig størrelse (kan være veldig stor fil)"
+
+#: ../src/ui/mail_dialog.ui.h:21
+msgid "Small"
+msgstr "Liten"
+
+#: ../src/ui/mail_dialog.ui.h:22
+msgid ""
+"Specify if an original size picture should be rotated or not. Smaller sizes "
+"are automatically rotated."
+msgstr ""
+
+#: ../src/ui/mail_dialog.ui.h:23
+msgid "Tiny"
+msgstr "Liten"
+
+#: ../src/ui/mail_dialog.ui.h:24
+msgid "Total original size"
+msgstr ""
+
+#: ../src/ui/mail_dialog.ui.h:25
+msgid "_Create Mail"
+msgstr "_Lag e-post"
+
#: ../src/ui/main_window.ui.h:1
msgid "Adjust _Time..."
msgstr "Juster _tid ..."
@@ -3433,198 +3449,212 @@ msgstr "Opprett nytt _merke..."
msgid "Create _New Version..."
msgstr "Opprett ny _versjon"
-#: ../src/ui/main_window.ui.h:11
+#: ../src/ui/main_window.ui.h:10
+#, fuzzy
+msgid "De_tach Version"
+msgstr "_Slett versjon"
+
+#: ../src/ui/main_window.ui.h:12
msgid "Fin_d"
msgstr "_Finn"
-#: ../src/ui/main_window.ui.h:12
+#: ../src/ui/main_window.ui.h:13
msgid "Manage _Extensions"
msgstr "Håndter utvid_elser"
-#: ../src/ui/main_window.ui.h:13
+#: ../src/ui/main_window.ui.h:14
msgid "Page Set_up..."
msgstr "Side_oppsett..."
-#: ../src/ui/main_window.ui.h:14
+#: ../src/ui/main_window.ui.h:15
msgid "Re_fresh Thumbnail"
msgstr "_Oppdater miniatyrbilde"
-#: ../src/ui/main_window.ui.h:18
+#: ../src/ui/main_window.ui.h:19
msgid "Select _All"
msgstr "Velg _alle"
-#: ../src/ui/main_window.ui.h:19
+#: ../src/ui/main_window.ui.h:20
msgid "Select _None"
msgstr "Velg _ingen"
-#: ../src/ui/main_window.ui.h:20
+#: ../src/ui/main_window.ui.h:21
msgid "Send by _Mail..."
msgstr "Send _med e-post ..."
-#: ../src/ui/main_window.ui.h:22
+#: ../src/ui/main_window.ui.h:23
msgid "Side_bar"
msgstr "_Sidefelt"
-#: ../src/ui/main_window.ui.h:23
+#: ../src/ui/main_window.ui.h:24
msgid "T_ags"
msgstr "_Merker"
-#: ../src/ui/main_window.ui.h:25
+#: ../src/ui/main_window.ui.h:26
#, fuzzy
msgid "Thumbnail _elements"
msgstr "Miniatyrbildemappe"
-#: ../src/ui/main_window.ui.h:26
+#: ../src/ui/main_window.ui.h:27
msgid "Too_lbar"
msgstr "Verktøy_linje"
-#: ../src/ui/main_window.ui.h:27
+#: ../src/ui/main_window.ui.h:28
msgid "View"
msgstr "Vis"
#: ../src/ui/main_window.ui.h:33
+msgid "_Attach Tag"
+msgstr "_Legg til merke"
+
+#: ../src/ui/main_window.ui.h:34
msgid "_Attach Tag to Selection"
msgstr "_Legg til merkelapp for utvalg"
-#: ../src/ui/main_window.ui.h:35
+#: ../src/ui/main_window.ui.h:36
#, fuzzy
msgid "_Clear Rating Filter"
msgstr "_Nullstill datointervall"
-#: ../src/ui/main_window.ui.h:36
+#: ../src/ui/main_window.ui.h:37
msgid "_Clear Roll Filter"
msgstr ""
-#: ../src/ui/main_window.ui.h:38
+#: ../src/ui/main_window.ui.h:39
msgid "_Components"
msgstr "_Komponenter"
-#: ../src/ui/main_window.ui.h:39
+#: ../src/ui/main_window.ui.h:40
msgid "_Contents"
msgstr "_Innhold"
-#: ../src/ui/main_window.ui.h:40
+#: ../src/ui/main_window.ui.h:41
msgid "_Dates"
msgstr "_Datoer"
-#: ../src/ui/main_window.ui.h:42
+#: ../src/ui/main_window.ui.h:43
msgid "_Delete Selected Tag"
msgstr "_Slett valgt merke"
-#: ../src/ui/main_window.ui.h:43
+#: ../src/ui/main_window.ui.h:44
msgid "_Delete Version"
msgstr "_Slett versjon"
-#: ../src/ui/main_window.ui.h:45
+#: ../src/ui/main_window.ui.h:46
#, fuzzy
msgid "_Edit Tag..."
msgstr "Rediger merke"
-#: ../src/ui/main_window.ui.h:46
+#: ../src/ui/main_window.ui.h:47
msgid "_Export to"
msgstr "_Eksporter til"
-#: ../src/ui/main_window.ui.h:47
+#: ../src/ui/main_window.ui.h:48
msgid "_Filmstrip"
msgstr "_Filmstripe"
-#: ../src/ui/main_window.ui.h:50
+#: ../src/ui/main_window.ui.h:51
msgid "_Hidden"
msgstr "_Skjulte"
-#: ../src/ui/main_window.ui.h:51
+#: ../src/ui/main_window.ui.h:52
msgid "_Import..."
msgstr "_Importer..."
-#: ../src/ui/main_window.ui.h:52
+#: ../src/ui/main_window.ui.h:53
+#, fuzzy
+msgid "_Invert Selection"
+msgstr "Kamerautvalg"
+
+#: ../src/ui/main_window.ui.h:54
msgid "_Large"
msgstr "_Stor"
-#: ../src/ui/main_window.ui.h:53
+#: ../src/ui/main_window.ui.h:55
#, fuzzy
msgid "_Last Import Roll"
msgstr "Importer bilder"
-#: ../src/ui/main_window.ui.h:54
+#: ../src/ui/main_window.ui.h:56
msgid "_Loupe"
msgstr "_Lupe"
-#: ../src/ui/main_window.ui.h:55
+#: ../src/ui/main_window.ui.h:57
msgid "_Medium"
msgstr "_Middels"
-#: ../src/ui/main_window.ui.h:57
+#: ../src/ui/main_window.ui.h:59
msgid "_Quit"
msgstr "A_vslutt"
-#: ../src/ui/main_window.ui.h:58
+#: ../src/ui/main_window.ui.h:60
msgid "_Ratings"
msgstr "_Poeng"
-#: ../src/ui/main_window.ui.h:60
+#: ../src/ui/main_window.ui.h:62
msgid "_Remove Tag From Selection"
msgstr "_Fjern merke fra utvalg"
-#: ../src/ui/main_window.ui.h:61
+#: ../src/ui/main_window.ui.h:63
msgid "_Rename Version"
msgstr "_Endre versjonsnavn"
-#: ../src/ui/main_window.ui.h:62
+#: ../src/ui/main_window.ui.h:64
msgid "_Reverse Order"
msgstr "_Motsatt rekkefølge"
-#: ../src/ui/main_window.ui.h:63
+#: ../src/ui/main_window.ui.h:65
#, fuzzy
msgid "_Select Import Rolls..."
msgstr "Velg mappe for eksportering"
-#: ../src/ui/main_window.ui.h:64
+#: ../src/ui/main_window.ui.h:66
msgid "_Set Date Range..."
msgstr "Sett _datointervall..."
-#: ../src/ui/main_window.ui.h:65
+#: ../src/ui/main_window.ui.h:67
#, fuzzy
msgid "_Set Rating filter..."
msgstr "Sett _datointervall..."
-#: ../src/ui/main_window.ui.h:66
+#: ../src/ui/main_window.ui.h:68
msgid "_Sharpen..."
msgstr "_Skjerp..."
-#: ../src/ui/main_window.ui.h:68
+#: ../src/ui/main_window.ui.h:70
msgid "_Small"
msgstr "_Liten"
-#: ../src/ui/main_window.ui.h:69
+#: ../src/ui/main_window.ui.h:71
#, fuzzy
msgid "_Tag Icons"
msgstr "Merk ikoner"
-#: ../src/ui/main_window.ui.h:70
+#: ../src/ui/main_window.ui.h:72
msgid "_Tags"
msgstr "_Merker"
-#: ../src/ui/main_window.ui.h:71
+#: ../src/ui/main_window.ui.h:73
msgid "_Timeline"
msgstr "_Tidslinje"
-#: ../src/ui/main_window.ui.h:72
+#: ../src/ui/main_window.ui.h:74
msgid "_Tools"
msgstr "Verk_tøy"
-#: ../src/ui/main_window.ui.h:73
+#: ../src/ui/main_window.ui.h:75
msgid "_Untagged Photos"
msgstr "_Umerkede fotografier"
-#: ../src/ui/main_window.ui.h:74
+#: ../src/ui/main_window.ui.h:76
msgid "_Version"
msgstr "_Versjon"
-#: ../src/Updater.cs:622
+#: ../src/Updater.cs:724
msgid "Updating F-Spot Database"
msgstr "Oppdaterer F-Spot-databasen"
-#: ../src/Updater.cs:623
+#: ../src/Updater.cs:725
msgid ""
"Please wait while your F-Spot gallery's database is updated. This may take "
"some time."
@@ -3632,7 +3662,7 @@ msgstr ""
"Vennligst vent mens F-Spot-databasen blir oppdatert. Dette kan ta litt tid."
#. Mono.Unix.Error error = Mono.Unix.Stdlib.GetLastError ();
-#: ../src/Utils/Unix.cs:35
+#: ../src/Utils/Unix.cs:36
msgid "Unable to create temporary file"
msgstr "Klarte ikke å opprette midlertidig fil"
@@ -3721,11 +3751,11 @@ msgstr "Skriv ut beskjæringsmerker"
msgid "Print photo comment"
msgstr ""
-#: ../src/Widgets/EditorPage.cs:30 ../src/Widgets/Sidebar.cs:54
+#: ../src/Widgets/EditorPage.cs:31 ../src/Widgets/Sidebar.cs:54
msgid "Edit"
msgstr "Rediger"
-#: ../src/Widgets/EditorPage.cs:198
+#: ../src/Widgets/EditorPage.cs:199
#, fuzzy
msgid ""
"This tool requires an active selection. Please select a region of the photo "
@@ -3734,29 +3764,29 @@ msgstr ""
"Dette verktøyet krever et markert felt. Velg en del av bildet og gjør "
"operasjonen igjen"
-#: ../src/Widgets/EditorPage.cs:216
+#: ../src/Widgets/EditorPage.cs:217
#, fuzzy
msgid "Error saving adjusted photo"
msgid_plural "Error saving adjusted photos"
msgstr[0] "Feil ved lagring av endret foto"
msgstr[1] "Feil ved lagring av endret foto"
-#: ../src/Widgets/EditorPage.cs:218
+#: ../src/Widgets/EditorPage.cs:219
#, csharp-format
msgid ""
"Received exception \"{0}\". Note that you have to develop RAW files into "
"JPEG before you can edit them."
msgstr ""
-#: ../src/Widgets/Filmstrip.cs:572
+#: ../src/Widgets/Filmstrip.cs:573
msgid "_Horizontal"
msgstr ""
-#: ../src/Widgets/Filmstrip.cs:576
+#: ../src/Widgets/Filmstrip.cs:577
msgid "_Vertical"
msgstr ""
-#: ../src/Widgets/FindBar.cs:58
+#: ../src/Widgets/FindBar.cs:59
msgid "Find:"
msgstr "Finn:"
@@ -3764,73 +3794,77 @@ msgstr "Finn:"
msgid "Folders"
msgstr "Mapper"
-#: ../src/Widgets/FolderTreeView.cs:123
+#: ../src/Widgets/FolderTreeView.cs:127
msgid "Filesystem"
msgstr "Filsystem"
-#: ../src/Widgets/InfoBox.cs:182
+#: ../src/Widgets/InfoBox.cs:183
msgid "Histogram"
msgstr "Histogram"
-#: ../src/Widgets/InfoBox.cs:215
+#: ../src/Widgets/InfoBox.cs:216
msgid "Version"
msgstr "Versjon"
-#: ../src/Widgets/InfoBox.cs:218
+#: ../src/Widgets/InfoBox.cs:219
msgid "Date"
msgstr "Dato"
-#: ../src/Widgets/InfoBox.cs:224
+#: ../src/Widgets/InfoBox.cs:225
msgid "Exposure"
msgstr "Eksponering"
-#: ../src/Widgets/InfoBox.cs:228
+#: ../src/Widgets/InfoBox.cs:229
msgid "Focal Length"
msgstr ""
-#: ../src/Widgets/InfoBox.cs:234
+#: ../src/Widgets/InfoBox.cs:232
+msgid "Camera"
+msgstr "Kamera"
+
+#: ../src/Widgets/InfoBox.cs:235
msgid "File Size"
msgstr "Filstørrelse"
-#: ../src/Widgets/InfoBox.cs:237
+#: ../src/Widgets/InfoBox.cs:238
msgid "Rating"
msgstr "Poeng"
-#: ../src/Widgets/InfoBox.cs:390 ../src/Widgets/InfoBox.cs:398
-#: ../src/Widgets/InfoBox.cs:428
+#: ../src/Widgets/InfoBox.cs:391 ../src/Widgets/InfoBox.cs:399
+#: ../src/Widgets/InfoBox.cs:429
msgid "(wrong format)"
msgstr "(feil format)"
-#: ../src/Widgets/InfoBox.cs:418 ../src/Widgets/InfoBox.cs:441
-#: ../src/Widgets/InfoBox.cs:451 ../src/Widgets/InfoBox.cs:460
+#: ../src/Widgets/InfoBox.cs:419 ../src/Widgets/InfoBox.cs:442
+#: ../src/Widgets/InfoBox.cs:452 ../src/Widgets/InfoBox.cs:461
msgid "(Unknown)"
msgstr "(Ukjent)"
-#: ../src/Widgets/InfoBox.cs:561
+#: ../src/Widgets/InfoBox.cs:564
#, fuzzy, csharp-format
msgid "(One Edit)"
msgid_plural "({0} Edits)"
msgstr[0] "(Ingen redigeringer)"
msgstr[1] "(Ingen redigeringer)"
-#: ../src/Widgets/InfoBox.cs:575
+#: ../src/Widgets/InfoBox.cs:578
msgid "(File read error)"
msgstr ""
-#: ../src/Widgets/InfoBox.cs:620
+#: ../src/Widgets/InfoBox.cs:623
#, csharp-format
msgid "{0} Photos"
msgstr "{0} bilder"
#. Note for translators: {0} is a date, {1} and {2} are times.
-#: ../src/Widgets/InfoBox.cs:640
+#: ../src/Widgets/InfoBox.cs:643
#, csharp-format
msgid ""
"On {0} between \n"
"{1} and {2}"
msgstr ""
-#: ../src/Widgets/InfoBox.cs:645
+#: ../src/Widgets/InfoBox.cs:648
#, csharp-format
msgid ""
"Between {0} \n"
@@ -3839,36 +3873,36 @@ msgstr ""
"Mellom {0} \n"
"og {1}"
-#: ../src/Widgets/InfoBox.cs:672
+#: ../src/Widgets/InfoBox.cs:675
#, fuzzy
msgid "(At least one File not found)"
msgstr "Fil ikke funnet"
-#: ../src/Widgets/InfoBox.cs:789
+#: ../src/Widgets/InfoBox.cs:792
msgid "Show Photo Name"
msgstr "Vis navn på bilde"
-#: ../src/Widgets/InfoBox.cs:798
+#: ../src/Widgets/InfoBox.cs:801
msgid "Show Date"
msgstr "Vis dato"
-#: ../src/Widgets/InfoBox.cs:807
+#: ../src/Widgets/InfoBox.cs:810
msgid "Show Size"
msgstr "Vis størrelse"
-#: ../src/Widgets/InfoBox.cs:816
+#: ../src/Widgets/InfoBox.cs:819
msgid "Show Exposure"
msgstr "Vis eksponering"
-#: ../src/Widgets/InfoBox.cs:825
+#: ../src/Widgets/InfoBox.cs:828
msgid "Show Focal Length"
msgstr ""
-#: ../src/Widgets/InfoBox.cs:834
+#: ../src/Widgets/InfoBox.cs:837
msgid "Show Camera"
msgstr "Vis kamera"
-#: ../src/Widgets/InfoBox.cs:843
+#: ../src/Widgets/InfoBox.cs:846
msgid "Show File Size"
msgstr "Vis filstørrelse"
@@ -3902,7 +3936,7 @@ msgstr "Ingen metadata tilgjengelig"
msgid "No applications available"
msgstr "Ingen programmer tilgjengelig"
-#: ../src/Widgets/RatingMenuItem.cs:56
+#: ../src/Widgets/RatingMenuItem.cs:57
msgid "Rating:"
msgstr ""
@@ -3926,3 +3960,178 @@ msgstr "Vis lysbilder fra F-Spot"
#: ../tools/f-spot-screensaver.desktop.in.h:2
msgid "F-Spot photos"
msgstr "F-Spot-bilder"
+
+#~ msgid "Error: Error while transferring; Aborting"
+#~ msgstr "Feil: Feil under overføring av fil. Avbryter"
+
+#~ msgid "Error: File Already Exists; Aborting"
+#~ msgstr "Feil: Filen eksisterer allerede. Avbryter"
+
+#~ msgid "Preview"
+#~ msgstr "Forhåndsvisning"
+
+#~ msgid "Path"
+#~ msgstr "Sti"
+
+#~ msgid "File"
+#~ msgstr "Fil"
+
+#~ msgid "Select Tag"
+#~ msgstr "Velg merke"
+
+#~ msgid "Downloading Previews"
+#~ msgstr "Laster ned forhåndsvisninger"
+
+#~ msgid "Downloading Preview of {0}"
+#~ msgstr "Laster ned forhåndsvisning av {0}"
+
+#~ msgid "Copying file {0} of {1}"
+#~ msgstr "Kopierer fil {0} av {1}"
+
+#~ msgid "Error transferring file"
+#~ msgstr "Feil under overføring av fil"
+
+#~ msgid "Download Complete"
+#~ msgstr "Ferdig med nedlasting"
+
+#~ msgid "Done Copying Files"
+#~ msgstr "Ferdig med kopiering av filer"
+
+#~ msgid "Transferring \"{0}\" from camera"
+#~ msgstr "Overfører «{0}» fra kamera"
+
+#~ msgid "Port"
+#~ msgstr "Port"
+
+#, fuzzy
+#~ msgid "Reparented ({0})"
+#~ msgstr "Reparer"
+
+#~ msgid "Import error"
+#~ msgstr "Feil ved importering"
+
+#~ msgid "Error importing {0}{2}{2}{1}"
+#~ msgstr "Feil ved import {0}{2}{2}{1}"
+
+#~ msgid " "
+#~ msgstr " "
+
+#~ msgid "<b></b>"
+#~ msgstr "<b></b>"
+
+#~ msgid "Attach tag:"
+#~ msgstr "Legg til merke:"
+
+#~ msgid "CD"
+#~ msgstr "CD"
+
+#~ msgid "E-_Mail:"
+#~ msgstr "E-_post:"
+
+#~ msgid "E_xport titles and comments"
+#~ msgstr "Eksporter _titler og kommentarer"
+
+#~ msgid "G_allery:"
+#~ msgstr "G_alleri:"
+
+#~ msgid "Gallery"
+#~ msgstr "Galleri"
+
+#~ msgid "Pause"
+#~ msgstr "Pause"
+
+#~ msgid "Select Photos to Copy From Camera..."
+#~ msgstr "Velg bilder som skal kopieres fra kameraet..."
+
+#~ msgid "Select the camera from which you want to transfer files"
+#~ msgstr "Velg kameraet du vil overføre filer fra"
+
+#~ msgid "Selected Camera: "
+#~ msgstr "Valgt kamera:"
+
+#~ msgid "Strip image _metadata"
+#~ msgstr "Fjern bildemetadata"
+
+#~ msgid "_Flickr"
+#~ msgstr "_Flickr"
+
+#~ msgid "_Gallery"
+#~ msgstr "_Galleri"
+
+#~ msgid "_Open album in browser when done uploading"
+#~ msgstr "_Åpne album i nettleser når opplasting er ferdig"
+
+#~ msgid "_Open destination when done exporting"
+#~ msgstr "_Åpne mål når eksportering er ferdig"
+
+#~ msgid "_Scale photos to no larger than: "
+#~ msgstr "Skaler bilder så de ikke er større enn: "
+
+#~ msgid "_Strip metadata"
+#~ msgstr "_Fjern metadata"
+
+#~ msgid "_URI:"
+#~ msgstr "_URI:"
+
+#~ msgid "_Virtual Filesystem"
+#~ msgstr "_Virtuelt filsystem"
+
+#~ msgid "x"
+#~ msgstr "x"
+
+#~ msgid "Loading {0} of {1}"
+#~ msgstr "Laster {0} av {1}"
+
+#~ msgid "Done Loading"
+#~ msgstr "Ferdig"
+
+#~ msgid "Directory does not exist."
+#~ msgstr "Mappen finnes ikke."
+
+#~ msgid ""
+#~ "The directory you selected \"{0}\" does not exist. Please choose a "
+#~ "different directory"
+#~ msgstr "Mappen du valgte «{0}», finnes ikke. Velg en annen mappe"
+
+#~ msgid "No cameras detected."
+#~ msgstr "Ingen kameraer funnet."
+
+#~ msgid ""
+#~ "F-Spot was unable to find any cameras attached to this system. Double "
+#~ "check that the camera is connected and has power"
+#~ msgstr ""
+#~ "F-Spot klarte ikke å finne noen kameraer koblet til. Dobbeltsjekk at "
+#~ "kameraet er tilkoblet og at det har strøm"
+
+#~ msgid "Error connecting to camera"
+#~ msgstr "Feil ved tilkobling til kamera"
+
+#~ msgid "Received error \"{0}\" while connecting to camera"
+#~ msgstr "Mottok feil «{0}» ved tilkobling til kamera"
+
+#~ msgid "Could not create a new version"
+#~ msgstr "Kunne ikke opprette ny versjon"
+
+#, fuzzy
+#~ msgid "Received exception \"{0}\". Unable to create version \"{1}\""
+#~ msgstr "Mottok unntak «{0}». Kunne ikke lagre bilde {1}"
+
+#~ msgid "Really Delete?"
+#~ msgstr "Vil du slette?"
+
+#~ msgid "Cancel"
+#~ msgstr "Avbryt"
+
+#~ msgid "Could not delete a version"
+#~ msgstr "Kunne ikke slette versjon"
+
+#, fuzzy
+#~ msgid "Received exception \"{0}\". Unable to delete version \"{1}\""
+#~ msgstr "Mottok unntak «{0}». Kunne ikke lagre bilde {1}"
+
+#~ msgid "Could not rename a version"
+#~ msgstr "Kunne ikke endre navn på en versjon"
+
+#, fuzzy
+#~ msgid "Received exception \"{0}\". Unable to rename version to \"{1}\""
+#~ msgstr "Mottok unntak «{0}». Kunne ikke lagre bilde {1}"
diff --git a/po/pt_BR.po b/po/pt_BR.po
index 35fb37a..f7bd830 100644
--- a/po/pt_BR.po
+++ b/po/pt_BR.po
@@ -5,7 +5,7 @@
# Vladimir Melo <vmelo at gnome.org>, 2007, 2008, 2009.
# Og Maciel <ogmaciel at gnome.org>, 2007-2009.
# Amadeu A. Barbosa Júnior <amadeu at gmail.com>, 2008.
-# Michel Recondo <mrecondo at gmail.com>, 2008-2009
+# Michel Recondo <mrecondo at gmail.com>, 2008-2010.
# Enrico Nicoletto <liverig at gmail.com>, 2009.
# Eduardo Brasil <eduebrasil at gmail.com>, 2009.
# Leonardo Ferreira Fontenelle <leonardof at gnome.org>, 2009.
@@ -15,10 +15,11 @@ msgid ""
msgstr ""
"Project-Id-Version: f-spot\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2010-04-15 13:38-0400\n"
-"PO-Revision-Date: 2010-04-15 14:28-0300\n"
-"Last-Translator: Vladimir Melo <vmelo at gnome.org>\n"
+"POT-Creation-Date: 2010-06-15 19:18-0300\n"
+"PO-Revision-Date: 2010-06-15 12:41-0300\n"
+"Last-Translator: Michel Recondo <mrecondo at gmail.com>\n"
"Language-Team: Brazilian Portuguese <gnome-pt_br-list at gnome.org>\n"
+"Language: pt_BR\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
@@ -27,13 +28,44 @@ msgstr ""
"X-Poedit-Country: BRAZIL\n"
"X-Poedit-Bookmarks: -1,112,-1,-1,-1,-1,-1,-1,-1,-1\n"
+#: ../data/desktop-files/f-spot.desktop.in.in.h:1
+#: ../data/desktop-files/f-spot-import.desktop.in.in.h:1
+#: ../data/desktop-files/f-spot-view.desktop.in.in.h:1
+#: ../src/ui/main_window.ui.h:11
+msgid "F-Spot"
+msgstr "F-Spot"
+
+#: ../data/desktop-files/f-spot.desktop.in.in.h:2
+#: ../data/desktop-files/f-spot-import.desktop.in.in.h:2
+msgid "F-Spot Photo Manager"
+msgstr "Gerenciador de fotos F-Spot"
+
+#: ../data/desktop-files/f-spot.desktop.in.in.h:3
+msgid "Organize, enjoy, and share your photos"
+msgstr "Organize, compartilhe e divirta-se com suas fotos"
+
+#: ../data/desktop-files/f-spot.desktop.in.in.h:4
+#: ../data/desktop-files/f-spot-import.desktop.in.in.h:4
+msgid "Photo Manager"
+msgstr "Gerenciador de fotos"
+
+#: ../data/desktop-files/f-spot-import.desktop.in.in.h:3
+msgid "Import into F-Spot"
+msgstr "Importar para o F-Spot"
+
+#: ../data/desktop-files/f-spot-view.desktop.in.in.h:2
+msgid "F-Spot Photo Viewer"
+msgstr "Visualizador de fotos F-Spot"
+
+#: ../data/desktop-files/f-spot-view.desktop.in.in.h:3
+msgid "Photo Viewer"
+msgstr "Visualizador de fotos"
+
#: ../extensions/Exporters/CDExport/CDExport.addin.xml.h:1
msgid "_CD..."
msgstr "_CD..."
#: ../extensions/Exporters/CDExport/CDExport.cs:162
-#: ../extensions/Exporters/FolderExport/FolderExport.cs:392
-#: ../src/CameraFileSelectionDialog.cs:199
msgid "Transferring Pictures"
msgstr "Transferindo figuras"
@@ -44,37 +76,34 @@ msgstr "Transferindo figura \"{0}\" para CD"
#. Note for translators: This indicates the current photo is photo {0} of {1} out of photos
#: ../extensions/Exporters/CDExport/CDExport.cs:220
-#: ../extensions/Exporters/FlickrExport/FlickrExport.cs:349
-#: ../extensions/Exporters/FolderExport/FolderExport.cs:245
+#: ../extensions/Exporters/FlickrExport/FlickrExport.cs:350
+#: ../extensions/Exporters/FolderExport/FolderExport.cs:220
#: ../extensions/Exporters/GalleryExport/GalleryExport.cs:781
-#: ../src/MainWindow.cs:673 ../src/UI.Dialog/AdjustTimeDialog.cs:129
-#: ../src/UI.Dialog/ProgressDialog.cs:92
+#: ../src/MainWindow.cs:644 ../src/UI.Dialog/AdjustTimeDialog.cs:130
+#: ../src/UI.Dialog/ProgressDialog.cs:90
#, csharp-format
msgid "{0} of {1}"
msgstr "{0} de {1}"
#: ../extensions/Exporters/CDExport/CDExport.cs:233
-#: ../extensions/Exporters/FacebookExport/FacebookExport.cs:380
-#: ../extensions/Exporters/FlickrExport/FlickrExport.cs:379
-#: ../extensions/Exporters/FolderExport/FolderExport.cs:285
+#: ../extensions/Exporters/FacebookExport/FacebookExport.cs:377
+#: ../extensions/Exporters/FlickrExport/FlickrExport.cs:380
#: ../extensions/Exporters/GalleryExport/GalleryExport.cs:806
-#: ../extensions/Exporters/PicasaWebExport/PicasaWebExport.cs:704
+#: ../extensions/Exporters/PicasaWebExport/PicasaWebExport.cs:705
#: ../extensions/Exporters/SmugMugExport/SmugMugExport.cs:607
msgid "Done Sending Photos"
msgstr "Envio de fotos concluído"
#: ../extensions/Exporters/CDExport/CDExport.cs:235
-#: ../extensions/Exporters/FolderExport/FolderExport.cs:287
msgid "Transfer Complete"
msgstr "Transferência concluída"
#: ../extensions/Exporters/CDExport/CDExport.cs:242
-#: ../extensions/Exporters/FolderExport/FolderExport.cs:292
msgid "Error While Transferring"
msgstr "Erro ao transferir"
#: ../extensions/Exporters/CDExport/CDExport.cs:250
-#: ../extensions/Exporters/FolderExport/FolderExport.cs:311
+#: ../extensions/Exporters/FolderExport/FolderExport.cs:278
msgid "Error Transferring"
msgstr "Erro transferindo"
@@ -94,7 +123,7 @@ msgstr "<b>Fotos para gravar</b>"
#: ../extensions/Exporters/FolderExport/FolderExport.glade.h:7
#: ../extensions/Exporters/GalleryExport/GalleryExport.glade.h:7
#: ../extensions/Exporters/SmugMugExport/SmugMugExport.glade.h:5
-#: ../src/f-spot.glade.h:28
+#: ../src/ui/mail_dialog.ui.h:10
msgid "Autorotate"
msgstr "Girar automaticamente"
@@ -103,7 +132,7 @@ msgid "Create CD"
msgstr "Criar CD"
#: ../extensions/Exporters/CDExport/CDExport.ui.h:5
-#: ../src/Widgets/InfoBox.cs:221
+#: ../src/Widgets/InfoBox.cs:222
msgid "Size"
msgstr "Tamanho"
@@ -122,7 +151,7 @@ msgstr "_Navegar nos arquivos agendados anteriormente"
#: ../extensions/Exporters/PicasaWebExport/PicasaWebExport.glade.h:20
#: ../extensions/Exporters/SmugMugExport/SmugMugExport.glade.h:12
#: ../extensions/Exporters/TabbloExport/ui/TabbloExport.ui.h:9
-#: ../src/f-spot.glade.h:95
+#: ../src/f-spot.glade.h:41
msgid "_Export"
msgstr "_Exportar"
@@ -152,11 +181,11 @@ msgstr ""
"Quando você tiver sido orientado pelo Facebook a retornar ao aplicativo, "
"clique \"OK\" abaixo."
-#: ../extensions/Exporters/FacebookExport/FacebookExport.cs:280
+#: ../extensions/Exporters/FacebookExport/FacebookExport.cs:281
msgid "Too many images to export"
msgstr "Imagens demais para exportar"
-#: ../extensions/Exporters/FacebookExport/FacebookExport.cs:281
+#: ../extensions/Exporters/FacebookExport/FacebookExport.cs:282
#, csharp-format
msgid ""
"Facebook only permits {0} photographs per album. Please refine your "
@@ -165,27 +194,19 @@ msgstr ""
"O Facebook permite apenas {0} fotografias por álbum. Por favor refine a sua "
"seleção e tente novamente."
-#: ../extensions/Exporters/FacebookExport/FacebookExport.cs:298
-#: ../extensions/Exporters/FlickrExport/FlickrExport.cs:475
-#: ../extensions/Exporters/GalleryExport/GalleryExport.cs:730
-#: ../extensions/Exporters/PicasaWebExport/PicasaWebExport.cs:597
-#: ../extensions/Exporters/SmugMugExport/SmugMugExport.cs:522
-msgid "Uploading Pictures"
-msgstr "Enviando figuras"
-
-#: ../extensions/Exporters/FacebookExport/FacebookExport.cs:319
+#: ../extensions/Exporters/FacebookExport/FacebookExport.cs:297
msgid "Album must have a name"
msgstr "O álbum precisa ter um nome"
-#: ../extensions/Exporters/FacebookExport/FacebookExport.cs:320
+#: ../extensions/Exporters/FacebookExport/FacebookExport.cs:298
msgid "Please name your album or choose an existing album."
msgstr "Por favor, dê um nome para o seu álbum ou escolha um álbum existente."
-#: ../extensions/Exporters/FacebookExport/FacebookExport.cs:334
+#: ../extensions/Exporters/FacebookExport/FacebookExport.cs:312
msgid "Creating a new album failed"
msgstr "A criação do novo álbum falhou"
-#: ../extensions/Exporters/FacebookExport/FacebookExport.cs:335
+#: ../extensions/Exporters/FacebookExport/FacebookExport.cs:313
#, csharp-format
msgid ""
"An error occurred creating a new album.\n"
@@ -196,45 +217,53 @@ msgstr ""
"\n"
"{0}"
-#: ../extensions/Exporters/FacebookExport/FacebookExport.cs:357
-#: ../extensions/Exporters/PicasaWebExport/PicasaWebExport.cs:660
+#: ../extensions/Exporters/FacebookExport/FacebookExport.cs:326
+#: ../extensions/Exporters/FlickrExport/FlickrExport.cs:476
+#: ../extensions/Exporters/GalleryExport/GalleryExport.cs:730
+#: ../extensions/Exporters/PicasaWebExport/PicasaWebExport.cs:598
+#: ../extensions/Exporters/SmugMugExport/SmugMugExport.cs:522
+msgid "Uploading Pictures"
+msgstr "Enviando figuras"
+
+#: ../extensions/Exporters/FacebookExport/FacebookExport.cs:354
+#: ../extensions/Exporters/PicasaWebExport/PicasaWebExport.cs:661
#: ../extensions/Exporters/SmugMugExport/SmugMugExport.cs:565
#, csharp-format
msgid "Uploading picture \"{0}\" ({1} of {2})"
msgstr "Enviando figura \"{0}\" ({1} de {2})"
-#: ../extensions/Exporters/FacebookExport/FacebookExport.cs:371
+#: ../extensions/Exporters/FacebookExport/FacebookExport.cs:368
#, csharp-format
msgid "Error Uploading To Facebook: {0}"
msgstr "Erro ao enviar para Facebook: {0}"
-#: ../extensions/Exporters/FacebookExport/FacebookExport.cs:372
-#: ../extensions/Exporters/FlickrExport/FlickrExport.cs:370
-#: ../extensions/Exporters/FolderExport/FolderExport.cs:250
+#: ../extensions/Exporters/FacebookExport/FacebookExport.cs:369
+#: ../extensions/Exporters/FlickrExport/FlickrExport.cs:371
+#: ../extensions/Exporters/FolderExport/FolderExport.cs:226
#: ../extensions/Exporters/GalleryExport/GalleryExport.cs:797
-#: ../extensions/Exporters/PicasaWebExport/PicasaWebExport.cs:693
+#: ../extensions/Exporters/PicasaWebExport/PicasaWebExport.cs:694
#: ../extensions/Exporters/SmugMugExport/SmugMugExport.cs:596
#: ../extensions/Exporters/TabbloExport/TabbloExport.cs:319
msgid "Error"
msgstr "Erro"
-#: ../extensions/Exporters/FacebookExport/FacebookExport.cs:382
-#: ../extensions/Exporters/FlickrExport/FlickrExport.cs:381
+#: ../extensions/Exporters/FacebookExport/FacebookExport.cs:379
+#: ../extensions/Exporters/FlickrExport/FlickrExport.cs:382
#: ../extensions/Exporters/GalleryExport/GalleryExport.cs:808
-#: ../extensions/Exporters/PicasaWebExport/PicasaWebExport.cs:706
+#: ../extensions/Exporters/PicasaWebExport/PicasaWebExport.cs:707
#: ../extensions/Exporters/SmugMugExport/SmugMugExport.cs:609
msgid "Upload Complete"
msgstr "Envio concluído"
-#: ../extensions/Exporters/FacebookExport/FacebookExport.cs:385
+#: ../extensions/Exporters/FacebookExport/FacebookExport.cs:382
msgid "Visit F-Spot group on Facebook"
msgstr "Visitar o grupo do F-Spot no Facebook"
-#: ../extensions/Exporters/FacebookExport/FacebookExportDialog.cs:211
+#: ../extensions/Exporters/FacebookExport/FacebookExportDialog.cs:212
msgid "Waiting for authentication"
msgstr "Esperando por autenticação"
-#: ../extensions/Exporters/FacebookExport/FacebookExportDialog.cs:212
+#: ../extensions/Exporters/FacebookExport/FacebookExportDialog.cs:213
msgid ""
"F-Spot will now launch your browser so that you can log into Facebook.\n"
"\n"
@@ -250,15 +279,15 @@ msgstr ""
"keyring, se possível, e vai reutilizá-lo na próxima exportação para o "
"Facebook"
-#: ../extensions/Exporters/FacebookExport/FacebookExportDialog.cs:217
+#: ../extensions/Exporters/FacebookExport/FacebookExportDialog.cs:218
msgid "Authenticating..."
msgstr "Autenticando..."
-#: ../extensions/Exporters/FacebookExport/FacebookExportDialog.cs:227
+#: ../extensions/Exporters/FacebookExport/FacebookExportDialog.cs:228
msgid "Error logging into Facebook"
msgstr "Erro ao conectar com Facebook"
-#: ../extensions/Exporters/FacebookExport/FacebookExportDialog.cs:228
+#: ../extensions/Exporters/FacebookExport/FacebookExportDialog.cs:229
msgid ""
"There was a problem logging into Facebook. Check your credentials and try "
"again."
@@ -266,23 +295,23 @@ msgstr ""
"Houve um problema ao registrar no Facebook. Verifique as suas credenciais e "
"tente novamente."
-#: ../extensions/Exporters/FacebookExport/FacebookExportDialog.cs:237
+#: ../extensions/Exporters/FacebookExport/FacebookExportDialog.cs:238
msgid "Authorizing Session"
msgstr "Autorizando sessão"
-#: ../extensions/Exporters/FacebookExport/FacebookExportDialog.cs:246
+#: ../extensions/Exporters/FacebookExport/FacebookExportDialog.cs:247
msgid "Session established, fetching user info..."
msgstr "Sessão estabelecida, baixando informações do usuário..."
-#: ../extensions/Exporters/FacebookExport/FacebookExportDialog.cs:252
+#: ../extensions/Exporters/FacebookExport/FacebookExportDialog.cs:253
msgid "Session established, fetching friend list..."
msgstr "Sessão estabelecida, baixando lista de amigos..."
-#: ../extensions/Exporters/FacebookExport/FacebookExportDialog.cs:262
+#: ../extensions/Exporters/FacebookExport/FacebookExportDialog.cs:263
msgid "Session established, fetching friend details..."
msgstr "Sessão estabelecida, baixando detalhes dos amigos..."
-#: ../extensions/Exporters/FacebookExport/FacebookExportDialog.cs:272
+#: ../extensions/Exporters/FacebookExport/FacebookExportDialog.cs:275
msgid "Session established, fetching photo albums..."
msgstr "Sessão estabelecida, baixando álbuns de fotos..."
@@ -292,11 +321,11 @@ msgstr "Sessão estabelecida, baixando álbuns de fotos..."
msgid "{0} {1} is logged into Facebook"
msgstr "{0} {1} está registrado no Facebook"
-#: ../extensions/Exporters/FacebookExport/FacebookExportDialog.cs:291
+#: ../extensions/Exporters/FacebookExport/FacebookExportDialog.cs:294
msgid "Facebook Connection Error"
msgstr "Erro de conexão com o Facebook"
-#: ../extensions/Exporters/FacebookExport/FacebookExportDialog.cs:292
+#: ../extensions/Exporters/FacebookExport/FacebookExportDialog.cs:295
#, csharp-format
msgid ""
"There was an error when downloading your information from Facebook.\n"
@@ -307,7 +336,7 @@ msgstr ""
"\n"
"O Facebook disse: {0}"
-#: ../extensions/Exporters/FacebookExport/FacebookExportDialog.cs:321
+#: ../extensions/Exporters/FacebookExport/FacebookExportDialog.cs:324
msgid "You are not logged in."
msgstr "Você não está registrado."
@@ -349,7 +378,7 @@ msgid "Logout"
msgstr "Encerra sessão"
#: ../extensions/Exporters/FacebookExport/FacebookExport.ui.h:10
-#: ../src/Widgets/InfoBox.cs:212
+#: ../src/Widgets/InfoBox.cs:213
msgid "Name"
msgstr "Nome"
@@ -385,12 +414,12 @@ msgstr "_Flickr..."
msgid "_Zooomr..."
msgstr "_Zoomr..."
-#: ../extensions/Exporters/FlickrExport/FlickrExport.cs:105
+#: ../extensions/Exporters/FlickrExport/FlickrExport.cs:106
#: ../extensions/Exporters/FlickrExport/FlickrExport.glade.h:5
msgid "Authorize"
msgstr "Autorizar"
-#: ../extensions/Exporters/FlickrExport/FlickrExport.cs:111
+#: ../extensions/Exporters/FlickrExport/FlickrExport.cs:112
#, csharp-format
msgid ""
"Return to this window after you have finished the authorization process on "
@@ -399,60 +428,59 @@ msgstr ""
"Retorne a esta janela depois de terminado o processo de autorização em {0} e "
"clique no botão \"Completar autorização\" abaixo"
-#: ../extensions/Exporters/FlickrExport/FlickrExport.cs:112
+#: ../extensions/Exporters/FlickrExport/FlickrExport.cs:113
msgid "Complete Authorization"
msgstr "Completar autorização"
-#: ../extensions/Exporters/FlickrExport/FlickrExport.cs:117
+#: ../extensions/Exporters/FlickrExport/FlickrExport.cs:118
#, csharp-format
msgid "Logging into {0}"
msgstr "Efetuando logon em {0}"
-#: ../extensions/Exporters/FlickrExport/FlickrExport.cs:118
+#: ../extensions/Exporters/FlickrExport/FlickrExport.cs:119
msgid "Checking credentials..."
msgstr "Verificando credenciais..."
-#: ../extensions/Exporters/FlickrExport/FlickrExport.cs:125
+#: ../extensions/Exporters/FlickrExport/FlickrExport.cs:126
#, csharp-format
msgid "Welcome {0} you are connected to {1}"
msgstr "Bem-vindo, {0}. Você está conectado a {1}"
-#: ../extensions/Exporters/FlickrExport/FlickrExport.cs:128
+#: ../extensions/Exporters/FlickrExport/FlickrExport.cs:129
#, csharp-format
msgid "Sign in as a different user"
msgstr "Entrar como um usuário diferente"
-#: ../extensions/Exporters/FlickrExport/FlickrExport.cs:133
+#: ../extensions/Exporters/FlickrExport/FlickrExport.cs:134
#, csharp-format
msgid "Used {0} of your allowed {1} monthly quota"
msgstr "Você já utilizou {0} da sua cota mensal de {1}"
-#: ../extensions/Exporters/FlickrExport/FlickrExport.cs:297
+#: ../extensions/Exporters/FlickrExport/FlickrExport.cs:298
msgid "Unable to log on"
msgstr "Não foi possível efetuar logon"
-#: ../extensions/Exporters/FlickrExport/FlickrExport.cs:317
+#: ../extensions/Exporters/FlickrExport/FlickrExport.cs:318
#, csharp-format
msgid "Waiting for response {0} of {1}"
msgstr "Esperando por resposta {0} de {1}"
-#: ../extensions/Exporters/FlickrExport/FlickrExport.cs:344
-#: ../extensions/Exporters/FolderExport/FolderExport.cs:242
+#: ../extensions/Exporters/FlickrExport/FlickrExport.cs:345
#: ../extensions/Exporters/GalleryExport/GalleryExport.cs:777
#, csharp-format
msgid "Uploading picture \"{0}\""
msgstr "Enviando figura \"{0}\""
-#: ../extensions/Exporters/FlickrExport/FlickrExport.cs:367
+#: ../extensions/Exporters/FlickrExport/FlickrExport.cs:368
#, csharp-format
msgid "Error Uploading To {0}: {1}"
msgstr "Erro ao enviar para {0}: {1}"
-#: ../extensions/Exporters/FlickrExport/FlickrExport.cs:454
+#: ../extensions/Exporters/FlickrExport/FlickrExport.cs:455
msgid "Unable to log on."
msgstr "Não foi possível efetuar logon."
-#: ../extensions/Exporters/FlickrExport/FlickrExport.cs:455
+#: ../extensions/Exporters/FlickrExport/FlickrExport.cs:456
#, csharp-format
msgid ""
"F-Spot was unable to log on to {0}. Make sure you have given the "
@@ -462,7 +490,6 @@ msgstr ""
"autenticação foi providenciada pela interface do navegador {0}."
#: ../extensions/Exporters/FlickrExport/FlickrExport.glade.h:1
-#: ../src/f-spot.glade.h:8
msgid "<b>Account</b>"
msgstr "<b>Conta</b>"
@@ -472,7 +499,7 @@ msgstr "<b>Conta</b>"
#: ../extensions/Exporters/PicasaWebExport/PicasaWebExport.glade.h:2
#: ../extensions/Exporters/SmugMugExport/SmugMugExport.glade.h:2
#: ../extensions/Exporters/TabbloExport/ui/TabbloExport.ui.h:2
-#: ../src/f-spot.glade.h:14 ../src/UI.Dialog/ui/AdjustTimeDialog.ui.h:5
+#: ../src/UI.Dialog/ui/AdjustTimeDialog.ui.h:5 ../src/ui/mail_dialog.ui.h:6
msgid "<b>Photos</b>"
msgstr "<b>Fotos</b>"
@@ -481,7 +508,7 @@ msgstr "<b>Fotos</b>"
#: ../extensions/Exporters/GalleryExport/GalleryExport.glade.h:4
#: ../extensions/Exporters/PicasaWebExport/PicasaWebExport.glade.h:4
#: ../extensions/Exporters/SmugMugExport/SmugMugExport.glade.h:4
-#: ../src/f-spot.glade.h:16
+#: ../src/ui/mail_dialog.ui.h:8
msgid "<b>Style</b>"
msgstr "<b>Estilo</b>"
@@ -494,7 +521,6 @@ msgstr "<b>Permissões de visão</b>"
#: ../extensions/Exporters/PicasaWebExport/PicasaWebExport.glade.h:9
#: ../extensions/Exporters/SmugMugExport/SmugMugExport.glade.h:6
#: ../extensions/Exporters/TabbloExport/ui/TabbloExport.ui.h:5
-#: ../src/f-spot.glade.h:44
msgid "Export"
msgstr "Exportar"
@@ -538,7 +564,6 @@ msgstr "Visível para amigos"
#: ../extensions/Exporters/FlickrExport/FlickrExport.glade.h:16
#: ../extensions/Exporters/PicasaWebExport/PicasaWebExport.glade.h:21
-#: ../src/f-spot.glade.h:96
msgid "_Export tags"
msgstr "_Exportar etiquetas"
@@ -547,7 +572,6 @@ msgstr "_Exportar etiquetas"
#: ../extensions/Exporters/GalleryExport/GalleryExport.glade.h:21
#: ../extensions/Exporters/PicasaWebExport/PicasaWebExport.glade.h:25
#: ../extensions/Exporters/SmugMugExport/SmugMugExport.glade.h:15
-#: ../src/f-spot.glade.h:109
msgid "_Resize to: "
msgstr "_Redimensionar para: "
@@ -560,7 +584,6 @@ msgstr "_Ver fotos no navegador ao término do envio"
#: ../extensions/Exporters/GalleryExport/GalleryExport.glade.h:24
#: ../extensions/Exporters/PicasaWebExport/PicasaWebExport.glade.h:27
#: ../extensions/Exporters/SmugMugExport/SmugMugExport.glade.h:17
-#: ../src/f-spot.glade.h:125
msgid "pixels"
msgstr "pixels"
@@ -568,80 +591,98 @@ msgstr "pixels"
msgid "F_older..."
msgstr "_Pasta..."
-#: ../extensions/Exporters/FolderExport/FolderExport.cs:140
+#: ../extensions/Exporters/FolderExport/FolderExport.cs:120
msgid "Select Export Folder"
msgstr "Selecionar a pasta de exportação"
-#: ../extensions/Exporters/FolderExport/FolderExport.cs:198
+#: ../extensions/Exporters/FolderExport/FolderExport.cs:173
msgid "Building Gallery"
msgstr "Montando galeria"
-#: ../extensions/Exporters/FolderExport/FolderExport.cs:248
+#: ../extensions/Exporters/FolderExport/FolderExport.cs:217
+#, csharp-format
+msgid "Exporting \"{0}\"..."
+msgstr "Exportando \"{0}\"..."
+
+#: ../extensions/Exporters/FolderExport/FolderExport.cs:224
+#, csharp-format
+msgid "Error Copying \"{0}\" to Gallery:{2}{1}"
+msgstr "Erro ao copiar \"{0}\" para o Gallery:{2}{1}"
+
+#: ../extensions/Exporters/FolderExport/FolderExport.cs:250
#, csharp-format
-msgid "Error uploading picture \"{0}\" to Gallery:{2}{1}"
-msgstr "Erro ao enviar figura \"{0}\" para o Gallery:{2}{1}"
+msgid "Transferring to \"{0}\""
+msgstr "Transferindo para \"{0}\""
+
+#: ../extensions/Exporters/FolderExport/FolderExport.cs:251
+msgid "Transferring..."
+msgstr "Transferindo..."
-#: ../extensions/Exporters/FolderExport/FolderExport.cs:333
-msgid "Error: Error while transferring; Aborting"
-msgstr "Erro: Erro ao transferir; Abortando"
+#. No need to check result here as if result is not true, an Exception will be thrown before
+#: ../extensions/Exporters/FolderExport/FolderExport.cs:256
+msgid "Export Complete."
+msgstr "Exportação concluída"
-#: ../extensions/Exporters/FolderExport/FolderExport.cs:336
-msgid "Error: File Already Exists; Aborting"
-msgstr "Erro: o arquivo já existe; abortando"
+#: ../extensions/Exporters/FolderExport/FolderExport.cs:258
+msgid "Exporting Photos Completed."
+msgstr "Exportação das fotos concluída."
+
+#: ../extensions/Exporters/FolderExport/FolderExport.cs:325
+msgid "Exporting Photos"
+msgstr "Exportando fotos"
#. Note for translators: light as clear, opposite as dark
-#: ../extensions/Exporters/FolderExport/FolderExport.cs:807
+#: ../extensions/Exporters/FolderExport/FolderExport.cs:743
msgid "Light"
msgstr "Claro"
-#: ../extensions/Exporters/FolderExport/FolderExport.cs:808
+#: ../extensions/Exporters/FolderExport/FolderExport.cs:744
msgid "Dark"
msgstr "Escuro"
#. Abbreviation of previous
-#: ../extensions/Exporters/FolderExport/FolderExport.cs:988
+#: ../extensions/Exporters/FolderExport/FolderExport.cs:924
msgid "Prev"
msgstr "Ant"
-#: ../extensions/Exporters/FolderExport/FolderExport.cs:990
-#: ../extensions/Exporters/FolderExport/FolderExport.cs:1231
-#: ../src/CameraFileSelectionDialog.cs:82
+#: ../extensions/Exporters/FolderExport/FolderExport.cs:926
+#: ../extensions/Exporters/FolderExport/FolderExport.cs:1167
msgid "Index"
msgstr "Índice"
#. Don't care otherwise, Tags sounds reasonable
-#: ../extensions/Exporters/FolderExport/FolderExport.cs:993
-#: ../extensions/Exporters/FolderExport/FolderExport.cs:1165
-#: ../extensions/Exporters/FolderExport/FolderExport.cs:1205
-#: ../src/MainWindow.cs:376 ../src/Widgets/Sidebar.cs:56
+#: ../extensions/Exporters/FolderExport/FolderExport.cs:929
+#: ../extensions/Exporters/FolderExport/FolderExport.cs:1101
+#: ../extensions/Exporters/FolderExport/FolderExport.cs:1141
+#: ../src/MainWindow.cs:348 ../src/Widgets/Sidebar.cs:56
msgid "Tags"
msgstr "Etiquetas"
-#: ../extensions/Exporters/FolderExport/FolderExport.cs:996
-#: ../src/f-spot.glade.h:58 ../src/ItemAction.cs:102
+#: ../extensions/Exporters/FolderExport/FolderExport.cs:932
+#: ../src/ItemAction.cs:102
msgid "Next"
msgstr "Próxima"
-#: ../extensions/Exporters/FolderExport/FolderExport.cs:1100
+#: ../extensions/Exporters/FolderExport/FolderExport.cs:1036
msgid "Gallery generated by"
msgstr "Galeria criada por"
-#: ../extensions/Exporters/FolderExport/FolderExport.cs:1140
+#: ../extensions/Exporters/FolderExport/FolderExport.cs:1076
msgid "Show Styles"
msgstr "Mostrar estilos"
-#: ../extensions/Exporters/FolderExport/FolderExport.cs:1141
+#: ../extensions/Exporters/FolderExport/FolderExport.cs:1077
msgid "Hide Styles"
msgstr "Ocultar estilos"
-#: ../extensions/Exporters/FolderExport/FolderExport.cs:1176
-#: ../extensions/Exporters/FolderExport/FolderExport.cs:1177
-#: ../src/ui/main_window.ui.h:24
+#: ../extensions/Exporters/FolderExport/FolderExport.cs:1112
+#: ../extensions/Exporters/FolderExport/FolderExport.cs:1113
+#: ../src/ui/main_window.ui.h:25
msgid "Tags: "
msgstr "Etiquetas: "
-#: ../extensions/Exporters/FolderExport/FolderExport.cs:1308
-#: ../extensions/Exporters/FolderExport/FolderExport.cs:1441
+#: ../extensions/Exporters/FolderExport/FolderExport.cs:1244
+#: ../extensions/Exporters/FolderExport/FolderExport.cs:1377
msgid "Page:"
msgstr "Página:"
@@ -650,7 +691,6 @@ msgid "\n"
msgstr "\n"
#: ../extensions/Exporters/FolderExport/FolderExport.glade.h:3
-#: ../src/f-spot.glade.h:11
msgid "<b>Destination</b>"
msgstr "<b>Destino</b>"
@@ -698,11 +738,15 @@ msgstr "_Pasta:"
msgid "_Save the files only"
msgstr "_Salvar os arquivos apenas"
+#: ../extensions/Exporters/GalleryExport/FormClient.cs:294
+msgid "Unhandled exception"
+msgstr "Exceção sem tratamento"
+
#: ../extensions/Exporters/GalleryExport/GalleryExport.addin.xml.h:1
msgid "Web _Gallery..."
msgstr "_Gallery na web..."
-#: ../extensions/Exporters/GalleryExport/GalleryExport.cs:52
+#: ../extensions/Exporters/GalleryExport/GalleryExport.cs:53
msgid ""
"Cannot connect to a Gallery for which the version is unknown.\n"
"Please check that you have Remote plugin 1.0.8 or later"
@@ -766,25 +810,25 @@ msgid "Error uploading picture \"{0}\" to Gallery: {1}"
msgstr "Erro ao enviar figura \"{0}\" para Galeria: {1}"
#: ../extensions/Exporters/GalleryExport/GalleryExport.cs:824
-#: ../extensions/Exporters/PicasaWebExport/PicasaWebExport.cs:727
+#: ../extensions/Exporters/PicasaWebExport/PicasaWebExport.cs:728
#: ../extensions/Exporters/SmugMugExport/SmugMugExport.cs:630
msgid "(No Gallery)"
msgstr "(Sem galeria)"
#: ../extensions/Exporters/GalleryExport/GalleryExport.cs:916
-#: ../extensions/Exporters/PicasaWebExport/PicasaWebExport.cs:849
+#: ../extensions/Exporters/PicasaWebExport/PicasaWebExport.cs:850
#: ../extensions/Exporters/SmugMugExport/SmugMugExport.cs:726
msgid "(Not Connected)"
msgstr "(Desconectado)"
#: ../extensions/Exporters/GalleryExport/GalleryExport.cs:917
-#: ../extensions/Exporters/PicasaWebExport/PicasaWebExport.cs:850
+#: ../extensions/Exporters/PicasaWebExport/PicasaWebExport.cs:851
#: ../extensions/Exporters/SmugMugExport/SmugMugExport.cs:727
msgid "(No Albums)"
msgstr "(Sem álbuns)"
#: ../extensions/Exporters/GalleryExport/GalleryExport.cs:969
-#: ../extensions/Exporters/PicasaWebExport/PicasaWebExport.cs:915
+#: ../extensions/Exporters/PicasaWebExport/PicasaWebExport.cs:916
#: ../extensions/Exporters/SmugMugExport/SmugMugExport.cs:768
msgid "No account selected"
msgstr "Nenhuma conta selecionada"
@@ -792,12 +836,10 @@ msgstr "Nenhuma conta selecionada"
#: ../extensions/Exporters/GalleryExport/GalleryExport.glade.h:1
#: ../extensions/Exporters/PicasaWebExport/PicasaWebExport.glade.h:1
#: ../extensions/Exporters/SmugMugExport/SmugMugExport.glade.h:1
-#: ../src/f-spot.glade.h:9
msgid "<b>Album</b>"
msgstr "<b>Álbum</b>"
#: ../extensions/Exporters/GalleryExport/GalleryExport.glade.h:2
-#: ../src/f-spot.glade.h:12
msgid "<b>Gallery</b>"
msgstr "<b>Galeria</b>"
@@ -840,7 +882,6 @@ msgstr "_Descrição:"
#: ../extensions/Exporters/GalleryExport/GalleryExport.glade.h:16
#: ../extensions/Exporters/PicasaWebExport/PicasaWebExport.glade.h:22
#: ../extensions/Exporters/SmugMugExport/SmugMugExport.glade.h:13
-#: ../src/f-spot.glade.h:97
msgid "_Export to Album:"
msgstr "_Exportar para álbum:"
@@ -875,20 +916,20 @@ msgstr "_Título:"
msgid "_Username:"
msgstr "Nome do _usuário:"
-#: ../extensions/Exporters/GalleryExport/GalleryRemote.cs:361
+#: ../extensions/Exporters/GalleryExport/GalleryRemote.cs:362
msgid "Error reading server response"
msgstr "Erro ao ler resposta de servidor"
#. failed to find the response
-#: ../extensions/Exporters/GalleryExport/GalleryRemote.cs:373
+#: ../extensions/Exporters/GalleryExport/GalleryRemote.cs:374
msgid "Server returned response without Gallery content"
msgstr "Servidor retornou resposta sem conteúdo de Galeria"
-#: ../extensions/Exporters/GalleryExport/GalleryRemote.cs:710
+#: ../extensions/Exporters/GalleryExport/GalleryRemote.cs:711
msgid "Error while creating new album"
msgstr "Erro ao criar novo álbum"
-#: ../extensions/Exporters/GalleryExport/GalleryRemote.cs:711
+#: ../extensions/Exporters/GalleryExport/GalleryRemote.cs:712
#, csharp-format
msgid ""
"The following error was encountered while attempting to perform the "
@@ -902,38 +943,38 @@ msgstr ""
msgid "_PicasaWeb..."
msgstr "Picasa_Web..."
-#: ../extensions/Exporters/PicasaWebExport/PicasaWebExport.cs:441
+#: ../extensions/Exporters/PicasaWebExport/PicasaWebExport.cs:442
msgid "Error while creating Album"
msgstr "Erro ao criar o álbum"
-#: ../extensions/Exporters/PicasaWebExport/PicasaWebExport.cs:442
+#: ../extensions/Exporters/PicasaWebExport/PicasaWebExport.cs:443
#, csharp-format
msgid ""
"The following error was encountered while attempting to create an album: {0}"
msgstr "O seguinte erro foi encontrado ao tentar criar um álbum: {0}"
-#: ../extensions/Exporters/PicasaWebExport/PicasaWebExport.cs:620
+#: ../extensions/Exporters/PicasaWebExport/PicasaWebExport.cs:621
#, csharp-format
msgid "{0} Sent"
msgstr "{0} enviado"
-#: ../extensions/Exporters/PicasaWebExport/PicasaWebExport.cs:622
+#: ../extensions/Exporters/PicasaWebExport/PicasaWebExport.cs:623
#, csharp-format
msgid "{0} of approx. {1}"
msgstr "{0} de aprox. {1}"
-#: ../extensions/Exporters/PicasaWebExport/PicasaWebExport.cs:691
+#: ../extensions/Exporters/PicasaWebExport/PicasaWebExport.cs:692
#: ../extensions/Exporters/SmugMugExport/SmugMugExport.cs:594
#, csharp-format
msgid "Error Uploading To Gallery: {0}"
msgstr "Erro ao enviar para o Gallery: {0}"
-#: ../extensions/Exporters/PicasaWebExport/PicasaWebExport.cs:778
+#: ../extensions/Exporters/PicasaWebExport/PicasaWebExport.cs:779
#, csharp-format
msgid "Available space: {0}, {1}% used out of {2}"
msgstr "Espaço disponível: {0}, {1}% usado de {2}"
-#: ../extensions/Exporters/PicasaWebExport/PicasaWebExport.cs:891
+#: ../extensions/Exporters/PicasaWebExport/PicasaWebExport.cs:892
#, csharp-format
msgid ""
"The selected album has a limit of {0} pictures,\n"
@@ -1088,7 +1129,7 @@ msgid "Compressed fil_e..."
msgstr "Arquivo _comprimido"
#: ../extensions/Exporters/ZipExport/ZipExport.cs:47
-#: ../src/Widgets/EditorPage.cs:197
+#: ../src/Widgets/EditorPage.cs:198
msgid "No selection available"
msgstr "Nenhuma seleção disponível"
@@ -1129,6 +1170,10 @@ msgstr "_Localização:"
msgid "_Scale:"
msgstr "_Escala"
+#: ../extensions/Tools/HashJob/HashJob.addin.xml.h:1
+msgid "Check for Duplicates..."
+msgstr "Verificar duplicidades..."
+
#: ../extensions/Tools/HashJob/HashJob.cs:53
msgid ""
"In order to detect duplicates on pictures you imported before 0.5.0, F-Spot "
@@ -1148,7 +1193,7 @@ msgstr ""
"Você atualmente tem {0} fotos que precisam de cálculo md5, e {1} trabalhos "
"pendentes"
-#: ../extensions/Tools/HashJob/HashJob.cs:75 ../src/ui/main_window.ui.h:37
+#: ../extensions/Tools/HashJob/HashJob.cs:75 ../src/ui/main_window.ui.h:38
msgid "_Close"
msgstr "_Fechar"
@@ -1160,10 +1205,6 @@ msgstr "Processando imagens..."
msgid "Stopped"
msgstr "Parado"
-#: ../extensions/Tools/HashJob/HashJob.addin.xml.h:1
-msgid "Check for Duplicates..."
-msgstr "Verificar duplicidades..."
-
#: ../extensions/Tools/LiveWebGallery/GalleryRequestHandler.cs:107
msgid "F-Spot Gallery"
msgstr "Galeria do F-Spot"
@@ -1196,6 +1237,19 @@ msgstr "Selecionada"
msgid "Live Web Gallery"
msgstr "Galeria Live da Web"
+#: ../extensions/Tools/LiveWebGallery/LiveWebGalleryDialog.cs:89
+msgid "none"
+msgstr "nenhuma"
+
+#: ../extensions/Tools/LiveWebGallery/LiveWebGalleryDialog.cs:92
+#, csharp-format
+msgid " Gallery: {0}, Photos: {1}, Last client: {3}"
+msgstr " Galeria: {0}, Fotos: {1}, Último cliente: {3}"
+
+#: ../extensions/Tools/LiveWebGallery/LiveWebGalleryDialog.cs:156
+msgid "Gallery is inactive"
+msgstr "A galeria está inativa"
+
#: ../extensions/Tools/LiveWebGallery/ui/LiveWebGallery.ui.h:1
msgid ""
"<small><i>The gallery stays active until you either deactivate it or close\n"
@@ -1258,19 +1312,6 @@ msgstr "Compartilhar:"
msgid "Views:"
msgstr "Visões:"
-#: ../extensions/Tools/LiveWebGallery/LiveWebGalleryDialog.cs:89
-msgid "none"
-msgstr "nenhuma"
-
-#: ../extensions/Tools/LiveWebGallery/LiveWebGalleryDialog.cs:92
-#, csharp-format
-msgid " Gallery: {0}, Photos: {1}, Last client: {3}"
-msgstr " Galeria: {0}, Fotos: {1}, Último cliente: {3}"
-
-#: ../extensions/Tools/LiveWebGallery/LiveWebGalleryDialog.cs:156
-msgid "Gallery is inactive"
-msgstr "A galeria está inativa"
-
#: ../extensions/Tools/MergeDb/MergeDb.addin.xml.h:1
msgid "Merge Db"
msgstr "Mesclar Db"
@@ -1357,11 +1398,11 @@ msgid "New Rolls Only"
msgstr "Apenas rolos novos"
#: ../extensions/Tools/MergeDb/MergeDb.glade.h:15
-#: ../src/FileImportBackend.cs:291 ../src/UI.Dialog/ThreadProgressDialog.cs:58
+#: ../src/UI.Dialog/ThreadProgressDialog.cs:57
msgid "Skip"
msgstr "Ignorar"
-#: ../extensions/Tools/MergeDb/PickFolderDialog.cs:33
+#: ../extensions/Tools/MergeDb/PickFolderDialog.cs:34
#, csharp-format
msgid ""
"<big>The database refers to files contained in the <b>{0}</b> folder.\n"
@@ -1400,109 +1441,219 @@ msgstr "Fazer do F-Spot meu protetor de tela"
msgid "Screensaver Configuration"
msgstr "Configuração da proteção de tela"
-#: ../f-spot.desktop.in.in.h:1 ../f-spot-import.desktop.in.in.h:1
-#: ../f-spot-view.desktop.in.in.h:1 ../src/ui/main_window.ui.h:10
-msgid "F-Spot"
-msgstr "F-Spot"
+#: ../f-spot.schemas.in.h:1
+msgid "Display of transparent parts."
+msgstr "Exibição de partes transparentes."
-#: ../f-spot.desktop.in.in.h:2 ../f-spot-import.desktop.in.in.h:2
-msgid "F-Spot Photo Manager"
-msgstr "Gerenciador de fotos F-Spot"
+#: ../f-spot.schemas.in.h:2
+msgid "Enable this to allow interpolation on zoomed images."
+msgstr "Habilite esta opção para permitir interpolação em imagens aproximadas."
-#: ../f-spot.desktop.in.in.h:3
-msgid "Organize, enjoy, and share your photos"
-msgstr "Organize, compartilhe e divirta-se com suas fotos"
+#: ../f-spot.schemas.in.h:3
+msgid "Height of the import dialog."
+msgstr "Altura do diálogo de importação."
-#: ../f-spot.desktop.in.in.h:4 ../f-spot-import.desktop.in.in.h:4
-msgid "Photo Manager"
-msgstr "Gerenciador de fotos"
+#: ../f-spot.schemas.in.h:4
+msgid "Height of the main window."
+msgstr "Altura da janela principal."
-#: ../f-spot-import.desktop.in.in.h:3
-msgid "Import into F-Spot"
-msgstr "Importar para o F-Spot"
+#: ../f-spot.schemas.in.h:5
+msgid "Height of the photo viewer window."
+msgstr "Altura da janela do visualizador de fotos."
-#: ../f-spot-view.desktop.in.in.h:2
-msgid "F-Spot Photo Viewer"
-msgstr "Visualizador de fotos F-Spot"
+#: ../f-spot.schemas.in.h:6
+msgid ""
+"If the 'transparency' option is set, the color specified in this option will "
+"be used as the transparent color when viewing images."
+msgstr ""
+"Se a opção \"transparência\" estiver marcada, a cor especificada nesta opção "
+"será usada como a cor transparente ao visualizar imagens."
-#: ../f-spot-view.desktop.in.in.h:3
-msgid "Photo Viewer"
-msgstr "Visualizador de fotos"
+#: ../f-spot.schemas.in.h:7
+msgid "Interpolate image on zoom."
+msgstr "Interpolar imagem ao ampliar."
-#: ../lib/libfspot/f-jpeg-utils.c:441 ../src/RotateCommand.cs:224
-msgid "File not found"
-msgstr "Arquivo não localizado"
+#: ../f-spot.schemas.in.h:8
+msgid "Maximize the main window."
+msgstr "Maximiza a janela principal."
-#: ../lib/libfspot/f-jpeg-utils.c:464
-#, c-format
-msgid "Unknown transform type %d"
-msgstr "Tipo de transformação %d desconhecido"
+#: ../f-spot.schemas.in.h:9
+msgid "Maximize the photo viewer window."
+msgstr "Maximiza a janela de visualização de foto."
-#: ../lib/libfspot/f-jpeg-utils.c:472
-msgid "Operation failed"
-msgstr "Falha na operação"
+#: ../f-spot.schemas.in.h:10
+msgid "Path to custom gtkrc for theming F-Spot."
+msgstr ""
+"Caminho para o arquivo gtkrc personalizado para aplicar tema ao F-Spot."
-#: ../src/CameraFileSelectionDialog.cs:76
-msgid "Preview"
-msgstr "Visualização"
+#: ../f-spot.schemas.in.h:11
+msgid "Show dates in the thumbnail view."
+msgstr "Mostra datas na visualização de miniaturas."
-#: ../src/CameraFileSelectionDialog.cs:78
-msgid "Path"
-msgstr "Caminho"
+#: ../f-spot.schemas.in.h:12
+msgid "Show ratings in the thumbnail view."
+msgstr "Mostra as avaliações na visualização de miniaturas."
-#: ../src/CameraFileSelectionDialog.cs:80 ../src/f-spot.glade.h:47
-msgid "File"
-msgstr "Arquivo"
+#: ../f-spot.schemas.in.h:13
+msgid "Show tags in the thumbnail view."
+msgstr "Mostra etiquetas na visualização de miniaturas."
-#: ../src/CameraFileSelectionDialog.cs:102
-msgid "Select Tag"
-msgstr "Selecionar etiqueta"
+#: ../f-spot.schemas.in.h:14
+msgid "Show the filename in the viewer window."
+msgstr "Mostra o nome do arquivo na janela de visualização."
-#: ../src/CameraFileSelectionDialog.cs:138
-msgid "Downloading Previews"
-msgstr "Baixando visualizações"
+#: ../f-spot.schemas.in.h:15
+msgid "Show the filmstrip in the main window."
+msgstr "Mostra o fotograma na janela principal."
-#: ../src/CameraFileSelectionDialog.cs:148
-#, csharp-format
-msgid "Downloading Preview of {0}"
-msgstr "Baixando visualização de {0}"
+#: ../f-spot.schemas.in.h:16
+msgid "Show the sidebar in the main window."
+msgstr "Mostra a barra lateral na janela principal."
-#: ../src/CameraFileSelectionDialog.cs:220
-#, csharp-format
-msgid "Copying file {0} of {1}"
-msgstr "Copiando arquivo {0} de {1}"
+#: ../f-spot.schemas.in.h:17
+msgid "Show the timeline in the main window."
+msgstr "Mostra linha do tempo na janela principal."
-#: ../src/CameraFileSelectionDialog.cs:235
-msgid "Error transferring file"
-msgstr "Erro ao transferir o arquivo"
+#: ../f-spot.schemas.in.h:18
+msgid "Show the toolbar in the main window."
+msgstr "Mostra a barra de ferramentas na janela principal."
-#: ../src/CameraFileSelectionDialog.cs:244
-msgid "Download Complete"
-msgstr "Download concluído"
+#: ../f-spot.schemas.in.h:19
+msgid "Show the toolbar in the photo viewer window."
+msgstr "Mostra a barra de ferramentas na janela de visualização de foto."
-#: ../src/CameraFileSelectionDialog.cs:244
-msgid "Done Copying Files"
-msgstr "Cópia de arquivos pronta"
+#: ../f-spot.schemas.in.h:20
+msgid "Size of the tag icons shown in the sidebar."
+msgstr "Tamanho dos ícones de etiqueta exibidos na barra lateral."
-#: ../src/CameraFileSelectionDialog.cs:268
-#, csharp-format
-msgid "Transferring \"{0}\" from camera"
-msgstr "Transferindo \"{0}\" da câmera"
+#: ../f-spot.schemas.in.h:21
+msgid "The X position to use for the main window."
+msgstr "A posição X para usar na janela principal."
-#: ../src/CameraSelectionDialog.cs:29 ../src/Widgets/InfoBox.cs:231
-msgid "Camera"
-msgstr "Câmera"
+#: ../f-spot.schemas.in.h:22
+msgid "The X position to use for the photo viewer window."
+msgstr "A posição X para usar na janela de visualiação de foto."
+
+#: ../f-spot.schemas.in.h:23
+msgid "The Y position to use for the main window."
+msgstr "A posição Y para usar na janela principal."
+
+#: ../f-spot.schemas.in.h:24
+msgid "The Y position to use for the photo viewer window."
+msgstr "A posição Y para usar na janela de visualização de foto."
+
+#: ../f-spot.schemas.in.h:25
+msgid "The color to use for transparent parts."
+msgstr "A cor para usar nas partes transparentes."
+
+#: ../f-spot.schemas.in.h:26
+msgid "The height dimension to use for the import dialog."
+msgstr "A dimensão da altura para usar no diálogo de importação."
+
+#: ../f-spot.schemas.in.h:27
+msgid "The height dimension to use for the main window."
+msgstr "A dimensão da altura para usar na janela principal."
+
+#: ../f-spot.schemas.in.h:28
+msgid "The height dimension to use for the photo viewer window."
+msgstr "A dimensão da altura para usar para a janela de visualização de foto."
+
+#: ../f-spot.schemas.in.h:29
+msgid "The orientation of the filmstrip, if shown."
+msgstr "A orientação do fotograma, se mostrado."
+
+#: ../f-spot.schemas.in.h:30
+msgid "The orientation of the filmstrip."
+msgstr "A orientação do fotograma."
+
+#: ../f-spot.schemas.in.h:31
+msgid "The size (width) of the sidebar in the main window."
+msgstr "O tamanho (largura) da barra lateral na janela principal."
+
+#: ../f-spot.schemas.in.h:32
+msgid "The size of the sidebar in the main window."
+msgstr "O tamanho da barra lateral na janela principal."
+
+#: ../f-spot.schemas.in.h:33
+msgid "The width dimension to use for the import dialog."
+msgstr "A dimensão largura para usar no diálogo de importação."
+
+#: ../f-spot.schemas.in.h:34
+msgid "The width dimension to use for the main window."
+msgstr "A dimensão largura para usar na janela principal."
-#: ../src/CameraSelectionDialog.cs:30
-msgid "Port"
-msgstr "Porta"
+#: ../f-spot.schemas.in.h:35
+msgid "The width dimension to use for the photo viewer window."
+msgstr "A dimensão largura para usar na janela de visualização de foto."
-#: ../src/Core/App.cs:278
+#: ../f-spot.schemas.in.h:36
+msgid "Use the current photo's filename as the viewer window's title."
+msgstr ""
+"Usar o nome do arquivo da foto atual como título da janela de visualização."
+
+#: ../f-spot.schemas.in.h:37
+msgid "Width of the import dialog."
+msgstr "Largura do diálogo de importação."
+
+#: ../f-spot.schemas.in.h:38
+msgid "Width of the main window."
+msgstr "Largura da janela principal."
+
+#: ../f-spot.schemas.in.h:39
+msgid "Width of the photo viewer window."
+msgstr "Largura da janela do visualizador de fotos."
+
+#: ../f-spot.schemas.in.h:40
+msgid "Width of the preview image pane in the import dialog."
+msgstr ""
+"Largura do painel de pré-visualização de imagem no diálogo de importação."
+
+#: ../f-spot.schemas.in.h:41
+msgid "X position of the main window."
+msgstr "Posição X da janela principal."
+
+#: ../f-spot.schemas.in.h:42
+msgid "X position of the photo viewer window."
+msgstr "Posição X da janela de visualização de fotos."
+
+#: ../f-spot.schemas.in.h:43
+msgid "Y position of the main window."
+msgstr "Posição Y da janela principal."
+
+#: ../f-spot.schemas.in.h:44
+msgid "Y position of the photo viewer window."
+msgstr "Posição Y da janela de visualização de fotos."
+
+#: ../f-spot.schemas.in.h:45
+msgid ""
+"You can choose how to display transparent parts in images. This option has "
+"no effect on photos but setting this value to CHECK_PATTERN or CUSTOM_COLOR "
+"could be useful when viewing icons or other artwork with transparent parts."
+msgstr ""
+"Você pode escolher como exibir partes transparentes em imagens. Esta opção "
+"não tem efeito em fotos, mas configurando para CHECK_PATTERN ou CUSTOM_COLOR "
+"pode ser útil ao ver ícones e outros trabalhos de arte com partes "
+"transparentes."
+
+#: ../lib/libfspot/f-jpeg-utils.c:441 ../src/RotateCommand.cs:211
+msgid "File not found"
+msgstr "Arquivo não localizado"
+
+#: ../lib/libfspot/f-jpeg-utils.c:464
+#, c-format
+msgid "Unknown transform type %d"
+msgstr "Tipo de transformação %d desconhecido"
+
+#: ../lib/libfspot/f-jpeg-utils.c:472
+msgid "Operation failed"
+msgstr "Falha na operação"
+
+#: ../src/Core/App.cs:274
#, csharp-format
msgid "No photos matching {0} found"
msgstr "Não foi localizada foto correspondendo a {0}"
-#: ../src/Core/App.cs:279
+#: ../src/Core/App.cs:275
#, csharp-format
msgid ""
"The tag \"{0}\" is not applied to any photos. Try adding\n"
@@ -1513,11 +1664,11 @@ msgstr ""
"a etiqueta a algumas fotos ou selecione uma etiqueta diferente no\n"
"diálogo de preferência do F-Spot."
-#: ../src/Core/App.cs:283
+#: ../src/Core/App.cs:279
msgid "Search returned no results"
msgstr "Nenhum resultado encontrado"
-#: ../src/Core/App.cs:284
+#: ../src/Core/App.cs:280
msgid ""
"The tag F-Spot is looking for does not exist. Try\n"
"selecting a different tag in the F-Spot preference\n"
@@ -1529,38 +1680,27 @@ msgstr ""
# Representa um recurso de se criar fotos derivadas de outras (que podem ser protegidas pra edição ou não)
#. Note for translators: Reparented is a picture becoming a version of another one
-#: ../src/Core/Photo.cs:473
+#: ../src/Core/Photo.cs:350
msgid "Reparented"
msgstr "Derivada"
-#: ../src/Core/Photo.cs:473
-#, csharp-format
-msgid "Reparented ({0})"
-msgstr "Derivada ({0})"
-
-#: ../src/Core/Photo.cs:492
+#: ../src/Core/Photo.cs:367
#, csharp-format
msgid "Modified"
msgid_plural "Modified ({0})"
msgstr[0] "Modificado"
msgstr[1] "({0}) modificados"
-#: ../src/Core/Photo.cs:513
+#: ../src/Core/Photo.cs:390
#, csharp-format
msgid "Modified in {1}"
msgstr "Modificado em {1}"
-#: ../src/Core/Photo.cs:513
+#: ../src/Core/Photo.cs:390
#, csharp-format
msgid "Modified in {1} ({0})"
msgstr "Modificado em {1} ({0})"
-#. Note that the original version is never stored in the photo_versions table in the
-#. database.
-#: ../src/Core/Photo.cs:671 ../src/f-spot.glade.h:62
-msgid "Original"
-msgstr "Original"
-
#: ../src/Editors/AutoStretchEditor.cs:17
msgid "Auto Color"
msgstr "Colorir automaticamente"
@@ -1573,43 +1713,43 @@ msgstr "Ajustar cores"
msgid "Adjust"
msgstr "Ajustar"
-#: ../src/Editors/CropEditor.cs:35
+#: ../src/Editors/CropEditor.cs:36
msgid "4 x 3 (Book)"
msgstr "4 x 3 (Livro)"
-#: ../src/Editors/CropEditor.cs:36
+#: ../src/Editors/CropEditor.cs:37
msgid "4 x 6 (Postcard)"
msgstr "4 x 6 (Cartão Postal)"
-#: ../src/Editors/CropEditor.cs:37
+#: ../src/Editors/CropEditor.cs:38
msgid "5 x 7 (L, 2L)"
msgstr "5 x 7 (L, 2L)"
-#: ../src/Editors/CropEditor.cs:38
+#: ../src/Editors/CropEditor.cs:39
msgid "8 x 10"
msgstr "8 x 10"
-#: ../src/Editors/CropEditor.cs:39
+#: ../src/Editors/CropEditor.cs:40
msgid "Square"
msgstr "Quadrado"
-#: ../src/Editors/CropEditor.cs:42
+#: ../src/Editors/CropEditor.cs:43
msgid "Crop"
msgstr "Cortar"
-#: ../src/Editors/CropEditor.cs:73
+#: ../src/Editors/CropEditor.cs:74
msgid "Select the area that needs cropping."
msgstr "Seleciona uma área para cortar."
-#: ../src/Editors/CropEditor.cs:98
+#: ../src/Editors/CropEditor.cs:99
msgid "No Constraint"
msgstr "Sem restrições"
-#: ../src/Editors/CropEditor.cs:99
+#: ../src/Editors/CropEditor.cs:100
msgid "Same as photo"
msgstr "A mesma da foto"
-#: ../src/Editors/CropEditor.cs:104
+#: ../src/Editors/CropEditor.cs:105
msgid "Custom Ratios..."
msgstr "Proporções personalizadas..."
@@ -1641,24 +1781,11 @@ msgstr "Foco suave"
msgid "Straighten"
msgstr "Retificar"
-#: ../src/FileImportBackend.cs:289
-msgid "Import error"
-msgstr "Erro de importação"
-
-#: ../src/FileImportBackend.cs:290
-#, csharp-format
-msgid "Error importing {0}{2}{2}{1}"
-msgstr "Erro ao importar {0}{2}{2}{1}"
-
#: ../src/Filters/ResizeFilter.cs:70 ../src/Filters/SharpFilter.cs:52
#, csharp-format
msgid "No way to save files of type \"{0}\""
msgstr "Não foi possível salvar arquivos do tipo \"{0}\""
-#: ../src/FormClient.cs:295
-msgid "Unhandled exception"
-msgstr "Exceção sem tratamento"
-
#: ../src/FSpot.addin.xml.h:1
msgid "Copy Photo"
msgstr "Copiar foto"
@@ -1671,17 +1798,17 @@ msgstr "Exportar para"
msgid "Open _With"
msgstr "Abrir c_om"
-#: ../src/FSpot.addin.xml.h:4 ../src/ui/main_window.ui.h:15
+#: ../src/FSpot.addin.xml.h:4 ../src/ui/main_window.ui.h:16
msgid "Rem_ove Tag"
msgstr "Rem_over etiqueta"
-#: ../src/FSpot.addin.xml.h:5 ../src/f-spot.glade.h:69
-#: ../src/SingleView.cs:425 ../src/ui/main_window.ui.h:16
+#: ../src/FSpot.addin.xml.h:5 ../src/f-spot.glade.h:24
+#: ../src/SingleView.cs:423 ../src/ui/main_window.ui.h:17
msgid "Rotate _Left"
msgstr "Girar à _esquerda"
-#: ../src/FSpot.addin.xml.h:6 ../src/f-spot.glade.h:70
-#: ../src/SingleView.cs:426 ../src/ui/main_window.ui.h:17
+#: ../src/FSpot.addin.xml.h:6 ../src/f-spot.glade.h:25
+#: ../src/SingleView.cs:424 ../src/ui/main_window.ui.h:18
msgid "Rotate _Right"
msgstr "Girar à _direita"
@@ -1689,75 +1816,35 @@ msgstr "Girar à _direita"
msgid "Tools"
msgstr "Ferramentas"
-#: ../src/FSpot.addin.xml.h:8 ../src/ui/main_window.ui.h:32
-msgid "_Attach Tag"
-msgstr "_Adicionar etiqueta"
-
-#: ../src/FSpot.addin.xml.h:9 ../src/ui/main_window.ui.h:41
+#: ../src/FSpot.addin.xml.h:8 ../src/ui/main_window.ui.h:42
msgid "_Delete From Drive"
msgstr "E_xcluir da unidade"
-#: ../src/FSpot.addin.xml.h:10 ../src/ui/main_window.ui.h:59
+#: ../src/FSpot.addin.xml.h:9 ../src/ui/main_window.ui.h:61
msgid "_Remove From Catalog"
msgstr "_Remover do catálogo"
#: ../src/f-spot.glade.h:1
-msgid " "
-msgstr " "
-
-#: ../src/f-spot.glade.h:2
-msgid "1024 px"
-msgstr "1024 px"
-
-#: ../src/f-spot.glade.h:3
-msgid "320 px"
-msgstr "320 px"
-
-#: ../src/f-spot.glade.h:4
-msgid "480 px"
-msgstr "480 px"
-
-#: ../src/f-spot.glade.h:5
-msgid "640 px"
-msgstr "640 px"
-
-#: ../src/f-spot.glade.h:6
-msgid "800 px"
-msgstr "800 px"
-
-#: ../src/f-spot.glade.h:7
-msgid "<b></b>"
-msgstr "<b></b>"
-
-#: ../src/f-spot.glade.h:10
msgid "<b>Co_rrections</b>"
msgstr "<b>Co_rreções</b>"
-#: ../src/f-spot.glade.h:13
+#: ../src/f-spot.glade.h:2
msgid "<b>Image Interpolation</b>"
msgstr "<b>Interpolação de imagem</b>"
-#: ../src/f-spot.glade.h:15
-msgid "<b>Size</b>"
-msgstr "<b>Tamanho</b>"
-
-#: ../src/f-spot.glade.h:17
-msgid "<b>Summary</b>"
-msgstr "<b>Resumo</b>"
-
-#: ../src/f-spot.glade.h:18
+#: ../src/f-spot.glade.h:3
msgid "<b>Transparent Parts</b>"
msgstr "<b>Partes transparentes</b>"
-#: ../src/f-spot.glade.h:19
+#: ../src/f-spot.glade.h:4
msgid "<b>View all pictures imported</b>"
msgstr "<b>Ver todas as figuras importadas</b>"
-#: ../src/f-spot.glade.h:20
+#: ../src/f-spot.glade.h:5
msgid "<b>_White Balance</b>"
msgstr "<b>_Equilíbrio de branco</b>"
-#: ../src/f-spot.glade.h:21
+#: ../src/f-spot.glade.h:6
msgid ""
"<small><i>Enable this to allow interpolation on zoomed images. You shouldn't "
"disable this for viewing photos, but disabling the interpolation could be "
@@ -1767,7 +1854,7 @@ msgstr ""
"nas imagens. Você não deve desabilitar para visualizar fotos, mas "
"desabilitar a interpolação poderá ser útil no formato de ícone.</i></small>"
-#: ../src/f-spot.glade.h:22
+#: ../src/f-spot.glade.h:7
msgid ""
"<small><i>You can choose how to display transparent parts in images. This "
"option has no effect on photos, but setting this as check pattern or custom "
@@ -1779,358 +1866,187 @@ msgstr ""
"quadriculado ou cor personalizada pode ser útil ao ver ícones e outros "
"trabalhos de arte com partes transparentes.</i></small>"
-#: ../src/f-spot.glade.h:23
+#: ../src/f-spot.glade.h:8
msgid "As _background"
msgstr "Como plano de _fundo"
-#: ../src/f-spot.glade.h:24
+#: ../src/f-spot.glade.h:9
msgid "As _custom color: "
msgstr "Como cor _personalizada: "
-#: ../src/f-spot.glade.h:25
+#: ../src/f-spot.glade.h:10
msgid "As check _pattern"
msgstr "Como padrão _quadriculado"
-#: ../src/f-spot.glade.h:26
-msgid "Attach Tags:"
-msgstr "Adicionar etiquetas:"
-
-#: ../src/f-spot.glade.h:27
-msgid "Attach tag:"
-msgstr "Adicionar etiqueta:"
-
-#: ../src/f-spot.glade.h:29
-msgid "CD"
-msgstr "CD"
-
-#: ../src/f-spot.glade.h:30
+#: ../src/f-spot.glade.h:11
msgid "C_ontrast:"
msgstr "C_ontraste:"
-#: ../src/f-spot.glade.h:31
+#: ../src/f-spot.glade.h:12
msgid "C_reate"
msgstr "_Criar"
-#: ../src/f-spot.glade.h:32
-msgid "Camera Selection"
-msgstr "Seleção de câmera"
-
-#: ../src/f-spot.glade.h:33
-msgid "Copy files to the Photos folder"
-msgstr "Copiar arquivos para pasta Photos"
-
-#: ../src/f-spot.glade.h:34
-msgid "Create Mail"
-msgstr "Criar e-mail"
-
-#: ../src/f-spot.glade.h:35
+#: ../src/f-spot.glade.h:13
msgid "Create _icon for this tag when first used"
msgstr "Criar ícone para esta etiqueta ao _usá-la pela primeira vez"
-#: ../src/f-spot.glade.h:36
-msgid "Create a mail with the selected photos (possibly resized) attached"
-msgstr ""
-"Cria um e-mail com as fotos selecionadas (possivelmente redimensionadas) em "
-"anexo"
-
-#: ../src/f-spot.glade.h:37
-msgid "Detect duplicates"
-msgstr "Detectar duplicatas"
-
-#: ../src/f-spot.glade.h:38
+#: ../src/f-spot.glade.h:14
msgid "Display File _Names"
msgstr "Exibir nomes de _arquivos"
-#: ../src/f-spot.glade.h:39
+#: ../src/f-spot.glade.h:15
msgid "Display only those photos that were imported in specified Rolls."
msgstr ""
"Exibir apenas aquelas fotos que foram importadas em rolos especificados."
-#: ../src/f-spot.glade.h:40
-msgid "Do not send a mail"
-msgstr "Não enviar um e-mail"
-
-#: ../src/f-spot.glade.h:41
-msgid "E-_Mail:"
-msgstr "E-_mail:"
-
-#: ../src/f-spot.glade.h:42
-msgid "E_xport titles and comments"
-msgstr "E_xportar títulos e comentários"
-
-#: ../src/f-spot.glade.h:43
-msgid "Estimated new size"
-msgstr "Novo tamanho estimado"
-
-#: ../src/f-spot.glade.h:45
-msgid "Extra large"
-msgstr "Muito grande"
-
-#: ../src/f-spot.glade.h:46
+#: ../src/f-spot.glade.h:16
msgid "F-Spot View"
msgstr "Visão do F-Spot"
-#: ../src/f-spot.glade.h:48
+#: ../src/f-spot.glade.h:17
msgid "Filter on selected rolls"
msgstr "Filtrar rolos selecionados"
-#: ../src/f-spot.glade.h:49
-msgid "G_allery:"
-msgstr "G_aleria:"
-
-#: ../src/f-spot.glade.h:50
-msgid "Gallery"
-msgstr "Galeria"
-
-#: ../src/f-spot.glade.h:51 ../src/ImportCommand.cs:547
-#: ../src/MainWindow.cs:301
-msgid "Import"
-msgstr "Importar"
-
-#. Translators: this string means 'source of import'
-#: ../src/f-spot.glade.h:53
-msgid "Import Source:"
-msgstr "Fonte da importação:"
-
-#: ../src/f-spot.glade.h:54
-msgid "Include subfolders"
-msgstr "Incluir subpastas"
-
-#: ../src/f-spot.glade.h:55
-msgid "Large"
-msgstr "Grande"
-
-#: ../src/f-spot.glade.h:56
+#: ../src/f-spot.glade.h:18
msgid "Manage your custom selection ratios"
msgstr "Gerenciar as suas proporções de seleção personalizadas"
-#: ../src/f-spot.glade.h:57
-msgid "Medium"
-msgstr "Médio"
-
-#: ../src/f-spot.glade.h:59
+#: ../src/f-spot.glade.h:19
msgid "Number of photos in selected rolls:"
msgstr "Número de fotos nos rolos selecionados:"
-#: ../src/f-spot.glade.h:60
-msgid "Number of pictures"
-msgstr "Número de figuras"
-
-#: ../src/f-spot.glade.h:61
+#: ../src/f-spot.glade.h:20
msgid "Open _Folder..."
msgstr "Abrir _pasta..."
-#: ../src/f-spot.glade.h:63
-msgid "Original size (possible very large file size)"
-msgstr "Tamanho original (tamanho de arquivo muito grande possível)"
-
-#: ../src/f-spot.glade.h:64 ../src/UI.Dialog/ui/EditTagDialog.ui.h:4
+#: ../src/f-spot.glade.h:21 ../src/UI.Dialog/ui/EditTagDialog.ui.h:4
msgid "P_arent Tag:"
msgstr "Etiquet_a principal:"
-#: ../src/f-spot.glade.h:65
-msgid "Pause"
-msgstr "Pausar"
-
-#: ../src/f-spot.glade.h:66
+#: ../src/f-spot.glade.h:22
msgid "Preferences"
msgstr "Preferências"
-#: ../src/f-spot.glade.h:67 ../src/ItemAction.cs:123
-msgid "Previous"
-msgstr "Anterior"
-
-#: ../src/f-spot.glade.h:68
+#: ../src/f-spot.glade.h:23
msgid "Repair"
msgstr "Reparar"
-#: ../src/f-spot.glade.h:71
-msgid "Select Photos to Copy From Camera..."
-msgstr "Selecione fotos para copiar da câmera..."
-
-#: ../src/f-spot.glade.h:72
+#: ../src/f-spot.glade.h:26
msgid "Select a Tag..."
msgstr "Selecionar uma etiqueta..."
-#: ../src/f-spot.glade.h:73
-msgid "Select the camera from which you want to transfer files"
-msgstr "Selecione a câmera da qual deseja transferir arquivos"
-
-#: ../src/f-spot.glade.h:74
-msgid "Selected Camera: "
-msgstr "Câmera selecionada: "
-
-#: ../src/f-spot.glade.h:75
+#: ../src/f-spot.glade.h:27
msgid "Selection Constraints"
msgstr "Restrições de seleção"
-#: ../src/f-spot.glade.h:76 ../src/ui/main_window.ui.h:21
+#: ../src/f-spot.glade.h:28 ../src/ui/main_window.ui.h:22
msgid "Set as _Background"
msgstr "Definir como plano de _fundo"
-#: ../src/f-spot.glade.h:77
+#: ../src/f-spot.glade.h:29
msgid "Show all photos."
msgstr "Mostrar todas as fotos."
-#: ../src/f-spot.glade.h:78
+#: ../src/f-spot.glade.h:30
msgid "Show or hide the side pane"
msgstr "Mostra ou oculta a barra lateral"
-#: ../src/f-spot.glade.h:79
+#: ../src/f-spot.glade.h:31
msgid "Show or hide the toolbar"
msgstr "Mostra ou oculta a barra de ferramentas"
-#: ../src/f-spot.glade.h:80
+#: ../src/f-spot.glade.h:32
msgid "Side _pane"
msgstr "_Painel lateral"
-#: ../src/f-spot.glade.h:81
-msgid "Small"
-msgstr "Pequeno"
-
-#: ../src/f-spot.glade.h:82
-msgid ""
-"Specify if an original size picture should be rotated or not. Smaller sizes "
-"are automatically rotated."
-msgstr ""
-"Especifica se uma figura de tamanho original deve ser girada ou não. "
-"Tamanhos menores são automaticamente girados."
-
-#: ../src/f-spot.glade.h:83
-msgid "Strip image _metadata"
-msgstr "Descartar _metadados"
-
#. Note for translators: meant as Temperature
-#: ../src/f-spot.glade.h:85
+#: ../src/f-spot.glade.h:34
msgid "Te_mp:"
msgstr "Te_mp:"
-#: ../src/f-spot.glade.h:86
-msgid "Tiny"
-msgstr "Minúsculo"
-
-#: ../src/f-spot.glade.h:87
-msgid "Total original size"
-msgstr "Tamanho original total"
-
-#: ../src/f-spot.glade.h:88 ../src/ui/main_window.ui.h:28
+#: ../src/f-spot.glade.h:35 ../src/ui/main_window.ui.h:29
msgid "Zoom _in"
msgstr "_Ampliar"
-#: ../src/f-spot.glade.h:89 ../src/ui/main_window.ui.h:29
+#: ../src/f-spot.glade.h:36 ../src/ui/main_window.ui.h:30
msgid "Zoom _out"
msgstr "Red_uzir"
-#: ../src/f-spot.glade.h:90 ../src/ui/main_window.ui.h:30
+#: ../src/f-spot.glade.h:37 ../src/ui/main_window.ui.h:31
msgid "Zoom in"
msgstr "Amplia"
-#: ../src/f-spot.glade.h:91 ../src/ui/main_window.ui.h:31
+#: ../src/f-spot.glade.h:38 ../src/ui/main_window.ui.h:32
msgid "Zoom out"
msgstr "Reduz"
-#: ../src/f-spot.glade.h:92
+#: ../src/f-spot.glade.h:39
msgid "_Brightness:"
msgstr "_Brilho:"
-#: ../src/f-spot.glade.h:93
-msgid "_Create Mail"
-msgstr "Criar e-_mail"
-
-#: ../src/f-spot.glade.h:94 ../src/ui/main_window.ui.h:44
+#: ../src/f-spot.glade.h:40 ../src/ui/main_window.ui.h:45
msgid "_Edit"
msgstr "_Editar"
-#: ../src/f-spot.glade.h:98
+#: ../src/f-spot.glade.h:42
msgid "_Exposure:"
msgstr "_Exposição"
-#: ../src/f-spot.glade.h:99
-msgid "_Flickr"
-msgstr "_Flickr"
-
-#: ../src/f-spot.glade.h:100 ../src/ui/main_window.ui.h:48
+#: ../src/f-spot.glade.h:43 ../src/ui/main_window.ui.h:49
msgid "_Fullscreen"
msgstr "Tela _cheia"
-#: ../src/f-spot.glade.h:101
-msgid "_Gallery"
-msgstr "_Galeria"
-
-#: ../src/f-spot.glade.h:102 ../src/ui/main_window.ui.h:49
+#: ../src/f-spot.glade.h:44 ../src/ui/main_window.ui.h:50
msgid "_Help"
msgstr "Aj_uda"
-#: ../src/f-spot.glade.h:103
+#: ../src/f-spot.glade.h:45
msgid "_Hue:"
msgstr "Mati_z:"
-#: ../src/f-spot.glade.h:104
+#: ../src/f-spot.glade.h:46
msgid "_Interpolate image on zoom"
msgstr "_Interpolar imagem ao ampliar"
-#: ../src/f-spot.glade.h:105
+#: ../src/f-spot.glade.h:47
msgid "_New Window"
msgstr "_Nova janela"
-#: ../src/f-spot.glade.h:106
-msgid "_Open album in browser when done uploading"
-msgstr "_Abrir o álbum no navegador ao terminar o envio"
-
-#: ../src/f-spot.glade.h:107
-msgid "_Open destination when done exporting"
-msgstr "_Abrir destino ao terminar de exportar"
-
-#: ../src/f-spot.glade.h:108 ../src/ui/main_window.ui.h:56
+#: ../src/f-spot.glade.h:48 ../src/ui/main_window.ui.h:58
msgid "_Photo"
msgstr "_Foto"
-#: ../src/f-spot.glade.h:110
+#: ../src/f-spot.glade.h:49
msgid "_Saturation:"
msgstr "_Saturação:"
-#: ../src/f-spot.glade.h:111
-msgid "_Scale photos to no larger than: "
-msgstr "_Dimensionar as imagens para não mais que: "
-
-#: ../src/f-spot.glade.h:112 ../src/ui/main_window.ui.h:67
+#: ../src/f-spot.glade.h:50 ../src/ui/main_window.ui.h:69
msgid "_Slideshow"
msgstr "Apresentação de _slides"
-#: ../src/f-spot.glade.h:113
-msgid "_Strip metadata"
-msgstr "_Descartar metadados"
-
-#: ../src/f-spot.glade.h:114 ../src/UI.Dialog/ui/EditTagDialog.ui.h:6
+#: ../src/f-spot.glade.h:51 ../src/UI.Dialog/ui/EditTagDialog.ui.h:6
msgid "_Tag Name:"
msgstr "Nome da e_tiqueta:"
-#: ../src/f-spot.glade.h:115
+#: ../src/f-spot.glade.h:52
msgid "_Tint:"
msgstr "_Matiz:"
-#: ../src/f-spot.glade.h:116
+#: ../src/f-spot.glade.h:53
msgid "_Toolbar"
msgstr "Barra de _ferramentas"
-#: ../src/f-spot.glade.h:117
-msgid "_URI:"
-msgstr "_URI:"
-
-#: ../src/f-spot.glade.h:118 ../src/ui/main_window.ui.h:75
+#: ../src/f-spot.glade.h:54 ../src/ui/main_window.ui.h:77
msgid "_View"
msgstr "_Ver"
-#: ../src/f-spot.glade.h:119
-msgid "_Virtual Filesystem"
-msgstr "Sistema de arquivos _virtual"
-
-#: ../src/f-spot.glade.h:120 ../src/Widgets/FindBar.cs:177
+#: ../src/f-spot.glade.h:55 ../src/Widgets/FindBar.cs:178
+#: ../src/Widgets/FindBar.cs:534
msgid "and"
msgstr "e"
#. at, or after a date, or between dates
-#: ../src/f-spot.glade.h:122
+#: ../src/f-spot.glade.h:57
msgid ""
"at\n"
"after\n"
@@ -2140,40 +2056,36 @@ msgstr ""
"depois\n"
"entre"
-#: ../src/f-spot.glade.h:126
-msgid "x"
-msgstr "x"
-
-#: ../src/FullScreenView.cs:58
+#: ../src/FullScreenView.cs:59
msgid "Hide"
msgstr "Ocultar"
-#: ../src/FullScreenView.cs:60
+#: ../src/FullScreenView.cs:61
msgid "Hide Toolbar"
msgstr "Ocultar barra de ferramentas"
-#: ../src/FullScreenView.cs:66
+#: ../src/FullScreenView.cs:67
msgid "Info"
msgstr "Informações"
-#: ../src/FullScreenView.cs:68 ../src/Widgets/InfoBox.cs:201
+#: ../src/FullScreenView.cs:69 ../src/Widgets/InfoBox.cs:202
msgid "Image Information"
msgstr "Informações da imagem"
-#: ../src/FullScreenView.cs:73
+#: ../src/FullScreenView.cs:74
msgid "Exit fullscreen"
msgstr "Sair da tela cheia"
-#: ../src/FullScreenView.cs:81 ../src/MainWindow.cs:341
-#: ../src/SingleView.cs:88
+#: ../src/FullScreenView.cs:82 ../src/MainWindow.cs:313
+#: ../src/SingleView.cs:87
msgid "Slideshow"
msgstr "Apresentação"
-#: ../src/FullScreenView.cs:82
+#: ../src/FullScreenView.cs:83
msgid "Start slideshow"
msgstr "Inicia apresentação de slides"
-#: ../src/FullScreenView.cs:128
+#: ../src/FullScreenView.cs:129
msgid "Slide transition:"
msgstr "Transição de slide:"
@@ -2185,35 +2097,35 @@ msgstr "Mais datas"
msgid "More"
msgstr "Mais"
-#: ../src/GroupSelector.cs:517 ../src/ui/main_window.ui.h:34
+#: ../src/GroupSelector.cs:530 ../src/ui/main_window.ui.h:35
msgid "_Clear Date Range"
msgstr "_Limpar intervalo de datas"
-#: ../src/Imaging/Exif.cs:228
+#: ../src/Imaging/Exif.cs:229
msgid "Image Directory"
msgstr "Diretório de imagens"
-#: ../src/Imaging/Exif.cs:230
+#: ../src/Imaging/Exif.cs:231
msgid "Thumbnail Directory"
msgstr "Diretório de miniaturas"
-#: ../src/Imaging/Exif.cs:232
+#: ../src/Imaging/Exif.cs:233
msgid "Exif Directory"
msgstr "Diretório exif"
-#: ../src/Imaging/Exif.cs:234
+#: ../src/Imaging/Exif.cs:235
msgid "GPS Directory"
msgstr "Diretório GPS"
-#: ../src/Imaging/Exif.cs:236
+#: ../src/Imaging/Exif.cs:237
msgid "InterOperability Directory"
msgstr "Diretório InterOperability"
-#: ../src/Imaging/Exif.cs:238
+#: ../src/Imaging/Exif.cs:239
msgid "Unknown Directory"
msgstr "Diretório desconhecido"
-#: ../src/Imaging/ImageFile.cs:117
+#: ../src/Imaging/ImageFile.cs:119
msgid "Writing to this file format is not supported"
msgstr "Não há suporte de gravação para este tipo de arquivo"
@@ -2351,42 +2263,12 @@ msgstr "O gênero intelectual do objeto"
msgid "Unknown IIM DataSet"
msgstr "Conjunto de dados IIM desconhecido"
-#: ../src/ImportCommand.cs:48 ../src/SingleView.cs:344
-msgid "Select Folder"
-msgstr "Selecionar pasta"
-
-#: ../src/ImportCommand.cs:259
-msgid "(No Cameras Detected)"
-msgstr "(Nenhuma câmera detectada)"
-
-#: ../src/ImportCommand.cs:404
-#, csharp-format
-msgid "Loading {0} of {1}"
-msgstr "Carregando {0} de {1}"
-
-#: ../src/ImportCommand.cs:470
-msgid "Done Loading"
-msgstr "Carregamento pronto"
-
-#: ../src/ImportCommand.cs:684
-msgid "Directory does not exist."
-msgstr "O diretório não existe."
-
-#: ../src/ImportCommand.cs:685
-#, csharp-format
-msgid ""
-"The directory you selected \"{0}\" does not exist. Please choose a "
-"different directory"
-msgstr ""
-"O diretório selecionado \"{0}\" não existe. Por favor, escolha um diretório "
-"diferente"
-
-#: ../src/ImportCommand.cs:738 ../src/ImportCommand.cs:740
+#: ../src/Import/ImportController.cs:406 ../src/Import/ImportController.cs:408
#: ../src/XmpTagsImporter.cs:89
msgid "Imported Tags"
msgstr "Etiquetas importadas"
-#: ../src/ItemAction.cs:79 ../src/MainWindow.cs:308 ../src/SingleView.cs:71
+#: ../src/ItemAction.cs:79 ../src/MainWindow.cs:280 ../src/SingleView.cs:70
msgid "Rotate Left"
msgstr "Girar à esquerda"
@@ -2394,7 +2276,7 @@ msgstr "Girar à esquerda"
msgid "Rotate picture left"
msgstr "Gira a figura à esquerda"
-#: ../src/ItemAction.cs:91 ../src/MainWindow.cs:312 ../src/SingleView.cs:76
+#: ../src/ItemAction.cs:91 ../src/MainWindow.cs:284 ../src/SingleView.cs:75
msgid "Rotate Right"
msgstr "Girar à direita"
@@ -2406,80 +2288,76 @@ msgstr "Gira a figura à direita"
msgid "Next picture"
msgstr "Próxima figura"
+#: ../src/ItemAction.cs:123
+msgid "Previous"
+msgstr "Anterior"
+
#: ../src/ItemAction.cs:124
msgid "Previous picture"
msgstr "Figura anterior"
-#: ../src/MainWindow.cs:303
+#: ../src/MainWindow.cs:273 ../src/UI.Dialog/ImportDialog.cs:171
+#: ../src/ui/import.ui.h:4
+msgid "Import"
+msgstr "Importar"
+
+#: ../src/MainWindow.cs:275
msgid "Import new images"
msgstr "Importar novas imagens"
-#: ../src/MainWindow.cs:319 ../src/ui/main_window.ui.h:3
+#: ../src/MainWindow.cs:291 ../src/ui/main_window.ui.h:3
msgid "Browse"
msgstr "Navegar"
-#: ../src/MainWindow.cs:323
+#: ../src/MainWindow.cs:295
msgid "Browse many photos simultaneously"
msgstr "Navega em várias fotos simultaneamente"
-#: ../src/MainWindow.cs:327
+#: ../src/MainWindow.cs:299
msgid "Edit Image"
msgstr "Editar imagem"
-#: ../src/MainWindow.cs:331
+#: ../src/MainWindow.cs:303
msgid "View and edit a photo"
msgstr "Vê e edita uma foto"
-#: ../src/MainWindow.cs:336 ../src/SingleView.cs:83
+#: ../src/MainWindow.cs:308 ../src/SingleView.cs:82
msgid "Fullscreen"
msgstr "Tela cheia"
-#: ../src/MainWindow.cs:338 ../src/SingleView.cs:85
+#: ../src/MainWindow.cs:310 ../src/SingleView.cs:84
msgid "View photos fullscreen"
msgstr "Vê fotos em tela cheia"
-#: ../src/MainWindow.cs:343 ../src/SingleView.cs:90
+#: ../src/MainWindow.cs:315 ../src/SingleView.cs:89
msgid "View photos in a slideshow"
msgstr "Vê fotos em uma apresentação de slides"
-#: ../src/MainWindow.cs:358
+#: ../src/MainWindow.cs:330
msgid "Previous photo"
msgstr "Foto anterior"
-#: ../src/MainWindow.cs:363
+#: ../src/MainWindow.cs:335
msgid "Next photo"
msgstr "Próxima foto"
-#: ../src/MainWindow.cs:1518
-msgid "No cameras detected."
-msgstr "Nenhuma câmera detectada."
-
-#: ../src/MainWindow.cs:1519
-msgid ""
-"F-Spot was unable to find any cameras attached to this system. Double check "
-"that the camera is connected and has power"
-msgstr ""
-"O F-Spot não foi capaz de localizar qualquer câmera anexada a este sistema. "
-"Confira novamente se a câmera está conectada e ligada"
-
-#: ../src/MainWindow.cs:1558
-msgid "Error connecting to camera"
-msgstr "Erro ao conectar a câmera"
+#: ../src/MainWindow.cs:412
+msgid "Show _Find Bar"
+msgstr "Mostrar barra de _pesquisa"
-#: ../src/MainWindow.cs:1559
-#, csharp-format
-msgid "Received error \"{0}\" while connecting to camera"
-msgstr "Erro recebido \"{0}\" ao conectar à câmera"
+#: ../src/MainWindow.cs:415
+msgid "Hide _Find Bar"
+msgstr "_Ocultar barra de pesquisa"
#. Translators, The singular case will never happen here.
-#: ../src/MainWindow.cs:1846
+#: ../src/MainWindow.cs:1719
#, csharp-format
msgid "Merge the selected tag"
msgid_plural "Merge the {0} selected tags?"
msgstr[0] "Mesclar a etiqueta selecionada"
msgstr[1] "Mesclar as {0} etiquetas selecionadas?"
-#: ../src/MainWindow.cs:1873
+#: ../src/MainWindow.cs:1746
msgid ""
"This operation will merge the selected tags and any sub-tags into a single "
"tag."
@@ -2487,77 +2365,77 @@ msgstr ""
"Esta operação mesclará as etiquetas selecionadas e quaisquer sub-etiquetas "
"numa única etiqueta."
-#: ../src/MainWindow.cs:1875
+#: ../src/MainWindow.cs:1748
msgid "_Merge Tags"
msgstr "_Mesclar etiquetas"
-#: ../src/MainWindow.cs:2080
+#: ../src/MainWindow.cs:1953
#, csharp-format
msgid "{0} Photo out of {1}"
msgid_plural "{0} Photos out of {1}"
msgstr[0] "{0} foto de {1}"
msgstr[1] "{0} fotos de {1}"
-#: ../src/MainWindow.cs:2082 ../src/SingleView.cs:467
+#: ../src/MainWindow.cs:1955 ../src/SingleView.cs:465
#, csharp-format
msgid "{0} Photo"
msgid_plural "{0} Photos"
msgstr[0] "{0} foto"
msgstr[1] "{0} fotos"
-#: ../src/MainWindow.cs:2085
+#: ../src/MainWindow.cs:1958
#, csharp-format
msgid " ({0} selected)"
msgid_plural " ({0} selected)"
msgstr[0] " ({0} selecionada)"
msgstr[1] " ({0} selecionadas)"
-#: ../src/MainWindow.cs:2166
+#: ../src/MainWindow.cs:2039
msgid "_Ok"
msgstr "_Ok"
-#: ../src/MainWindow.cs:2167
+#: ../src/MainWindow.cs:2040
msgid "Error Deleting Picture"
msgstr "Erro ao excluir figura"
-#: ../src/MainWindow.cs:2172
+#: ../src/MainWindow.cs:2045
#, csharp-format
msgid "No permission to delete the file:{1}{0}"
msgstr "Não há permissão para excluir o arquivo:{1}{0}"
-#: ../src/MainWindow.cs:2176
+#: ../src/MainWindow.cs:2049
#, csharp-format
msgid "An error of type {0} occurred while deleting the file:{2}{1}"
msgstr "Um erro de tipo {0} ocorreu ao excluir o arquivo:{2}{1}"
-#: ../src/MainWindow.cs:2208
+#: ../src/MainWindow.cs:2081
#, csharp-format
msgid "Delete the selected photo permanently?"
msgid_plural "Delete the {0} selected photos permanently?"
msgstr[0] "Remover a foto selecionada permanentemente?"
msgstr[1] "Remover as {0} fotos selecionadas permanentemente?"
-#: ../src/MainWindow.cs:2212
+#: ../src/MainWindow.cs:2085
msgid "This deletes all versions of the selected photo from your drive."
msgid_plural ""
"This deletes all versions of the selected photos from your drive."
msgstr[0] "Isso exclui todas as versões da foto selecionada de sua unidade."
msgstr[1] "Isso exclui todas as versões das fotos selecionadas de sua unidade."
-#: ../src/MainWindow.cs:2215
+#: ../src/MainWindow.cs:2088
msgid "_Delete photo"
msgid_plural "_Delete photos"
msgstr[0] "_Excluir foto"
msgstr[1] "_Excluir fotos"
-#: ../src/MainWindow.cs:2251
+#: ../src/MainWindow.cs:2124
#, csharp-format
msgid "Remove the selected photo from F-Spot?"
msgid_plural "Remove the {0} selected photos from F-Spot?"
msgstr[0] "Remover a foto selecionada do F-Spot?"
msgstr[1] "Remover as {0} fotos selecionadas do F-Spot?"
-#: ../src/MainWindow.cs:2256
+#: ../src/MainWindow.cs:2129
msgid ""
"If you remove photos from the F-Spot catalog all tag information will be "
"lost. The photos remain on your computer and can be imported into F-Spot "
@@ -2567,27 +2445,27 @@ msgstr ""
"etiqueta são perdidas. As fotos continuam em seu computador e poderão ser "
"importadas ao F-Spot novamente."
-#: ../src/MainWindow.cs:2257
+#: ../src/MainWindow.cs:2130
msgid "_Remove from Catalog"
msgstr "_Remover do catálogo"
-#: ../src/MainWindow.cs:2320
+#: ../src/MainWindow.cs:2199
#, csharp-format
msgid "Delete tag \"{0}\"?"
msgstr "Excluir etiqueta \"{0}\"?"
-#: ../src/MainWindow.cs:2322
+#: ../src/MainWindow.cs:2201
#, csharp-format
msgid "Delete the {0} selected tags?"
msgstr "Excluir as {0} etiquetas selecionadas?"
-#: ../src/MainWindow.cs:2327
+#: ../src/MainWindow.cs:2206
msgid "photo"
msgid_plural "photos"
msgstr[0] "foto"
msgstr[1] "fotos"
-#: ../src/MainWindow.cs:2329
+#: ../src/MainWindow.cs:2208
#, csharp-format
msgid "If you delete this tag, the association with {0} {1} will be lost."
msgid_plural ""
@@ -2597,18 +2475,18 @@ msgstr[0] ""
msgstr[1] ""
"Se você excluir estas etiqueta, as associações com {0} {1} serão perdidas."
-#: ../src/MainWindow.cs:2334
+#: ../src/MainWindow.cs:2213
msgid "_Delete tag"
msgid_plural "_Delete tags"
msgstr[0] "_Excluir etiqueta"
msgstr[1] "_Excluir etiquetas"
#. A Category is not empty. Can not delete it.
-#: ../src/MainWindow.cs:2348
+#: ../src/MainWindow.cs:2227
msgid "Tag is not empty"
msgstr "A etiqueta não está vazia"
-#: ../src/MainWindow.cs:2349
+#: ../src/MainWindow.cs:2228
#, csharp-format
msgid ""
"Can not delete tags that have tags within them. Please delete tags under "
@@ -2617,39 +2495,39 @@ msgstr ""
"Não é possível excluir etiquetas que contenham outras etiquetas. Por favor, "
"exclua as etiquetas sob \"{0}\" primeiro"
-#: ../src/MainWindow.cs:2789
+#: ../src/MainWindow.cs:2659
msgid "Rotate selected photo left"
msgid_plural "Rotate selected photos left"
msgstr[0] "Girar foto selecionada à esquerda"
msgstr[1] "Girar fotos selecionadas à esquerda"
-#: ../src/MainWindow.cs:2802
+#: ../src/MainWindow.cs:2672
msgid "Rotate selected photo right"
msgid_plural "Rotate selected photos right"
msgstr[0] "Girar foto selecionada à direita"
msgstr[1] "Girar fotos selecionadas à direita"
-#: ../src/MainWindow.cs:2813
+#: ../src/MainWindow.cs:2683
#, csharp-format
msgid "Find _Selected Tag"
msgid_plural "Find _Selected Tags"
msgstr[0] "Localizar etiqueta _selecionada"
msgstr[1] "Localizar etiquetas _selecionadas"
-#: ../src/MainWindow.cs:2817
+#: ../src/MainWindow.cs:2687
#, csharp-format
msgid "Find Selected Tag _With"
msgid_plural "Find Selected Tags _With"
msgstr[0] "Localizar etiqueta selecionada _com"
msgstr[1] "Localizar etiquetas selecionadas _com"
-#: ../src/MainWindow.cs:2858
+#: ../src/MainWindow.cs:2728
msgid "Create New Version?"
msgid_plural "Create New Versions?"
msgstr[0] "Criar nova versão?"
msgstr[1] "criar novas versões?"
-#: ../src/MainWindow.cs:2860
+#: ../src/MainWindow.cs:2730
#, csharp-format
msgid ""
"Before launching {1}, should F-Spot create a new version of the selected "
@@ -2664,7 +2542,7 @@ msgstr[1] ""
"Antes de iniciar {1}, o F-Spot deve criar novas versões das fotos "
"selecionadas para preservar as originais?"
-#: ../src/MainWindow.cs:2882
+#: ../src/MainWindow.cs:2752
msgid "XCF version"
msgstr "Versão XCF"
@@ -2778,9 +2656,13 @@ msgstr "Nitidez"
msgid "Scene Type"
msgstr "Tipo de cena"
+#: ../src/PhotoStore.cs:166 ../src/ui/mail_dialog.ui.h:19
+msgid "Original"
+msgstr "Original"
+
#. Fixme this should really set parent menu
#. items insensitve
-#: ../src/PhotoTagMenu.cs:74
+#: ../src/PhotoTagMenu.cs:62
msgid "(No Tags)"
msgstr "(Sem etiquetas)"
@@ -2800,67 +2682,67 @@ msgstr "Renomear versão"
msgid "New name:"
msgstr "Novo nome:"
-#: ../src/PhotoVersionCommands.cs:110
-msgid "Could not create a new version"
-msgstr "Não foi possível criar uma nova versão"
-
-#: ../src/PhotoVersionCommands.cs:111
-#, csharp-format
-msgid "Received exception \"{0}\". Unable to create version \"{1}\""
-msgstr "Exceção \"{0}\" recebida. Não foi possível criar versão \"{1}\""
-
-#: ../src/PhotoVersionCommands.cs:138
-msgid "Really Delete?"
-msgstr "Realmente excluir?"
-
-#: ../src/PhotoVersionCommands.cs:139
-msgid "Cancel"
-msgstr "Cancelar"
-
-#: ../src/PhotoVersionCommands.cs:140
+#: ../src/PhotoVersionCommands.cs:123
msgid "Delete"
msgstr "Excluir"
-#: ../src/PhotoVersionCommands.cs:144
+#: ../src/PhotoVersionCommands.cs:124
#, csharp-format
msgid "Really delete version \"{0}\"?"
msgstr "Realmente excluir versão \"{0}\"?"
-#: ../src/PhotoVersionCommands.cs:154
-msgid "Could not delete a version"
-msgstr "Não foi possível excluir uma versão"
+#: ../src/PhotoVersionCommands.cs:125
+msgid "This removes the version and deletes the corresponding file from disk."
+msgstr "Esta opção remove a versão e exclui o arquivo correspondente do disco."
+
+#: ../src/PhotoVersionCommands.cs:170
+msgid "De_tach"
+msgstr "S_eparar"
-#: ../src/PhotoVersionCommands.cs:155
+#: ../src/PhotoVersionCommands.cs:171
#, csharp-format
-msgid "Received exception \"{0}\". Unable to delete version \"{1}\""
-msgstr "Exceção \"{0}\" recebida. Não foi possível excluir versão \"{1}\""
+msgid "Really detach version \"{0}\" from \"{1}\"?"
+msgstr "Realmente separar a versão \"{0}\" de \"{1}\"?"
+
+#: ../src/PhotoVersionCommands.cs:172
+msgid ""
+"This makes the version appear as a separate photo in the library. To undo, "
+"drag the new photo back to its parent."
+msgstr ""
+"Esta opção faz a nova versão aparecer como uma foto separada na biblioteca. "
+"Para desfazer, arraste a nova foto de volta para a sua origem."
-#: ../src/PhotoVersionCommands.cs:196
-msgid "Could not rename a version"
-msgstr "Não foi possível renomear uma versão"
+# Representa um recurso de se criar fotos derivadas de outras (que podem ser protegidas pra edição ou não)
+#: ../src/PhotoVersionCommands.cs:194
+msgid "Re_parent"
+msgstr "De_rivar"
-#: ../src/PhotoVersionCommands.cs:197
+#: ../src/PhotoVersionCommands.cs:195
#, csharp-format
-msgid "Received exception \"{0}\". Unable to rename version to \"{1}\""
+msgid "Really reparent \"{0}\" as version of \"{1}\"?"
+msgid_plural "Really reparent {2} photos as versions of \"{1}\"?"
+msgstr[0] "Realmente derivar \"{0}\" como versão de \"{1}\"?"
+msgstr[1] "Realmente derivar as fotos {2} como versões de \"{1}\"?"
+
+#: ../src/PhotoVersionCommands.cs:198
+msgid ""
+"This makes the photos appear as a single one in the library. The versions "
+"can be detached using the Photo menu."
msgstr ""
-"Exceção \"{0}\" recebida. Não foi possível renomear versão para \"{1}\""
+"Esta opção faz com que as fotos apareçam como únicas na biblioteca. As "
+"versões podem ser separadas usando o menu Foto."
-#: ../src/PhotoVersionMenu.cs:66 ../src/Widgets/InfoBox.cs:563
-#: ../src/Widgets/InfoBox.cs:565
+#: ../src/PhotoVersionCommands.cs:238
+#, csharp-format
+msgid "Received exception \"{0}\"."
+msgstr "Exceção \"{0}\" recebida."
+
+#: ../src/PhotoVersionMenu.cs:66 ../src/Widgets/InfoBox.cs:566
+#: ../src/Widgets/InfoBox.cs:568
msgid "(No Edits)"
msgstr "(Sem edições)"
-#: ../src/PhotoView.cs:167 ../src/UI.Dialog/EditExceptionDialog.cs:38
-msgid "Error editing photo"
-msgstr "Erro ao editar foto"
-
-#: ../src/PhotoView.cs:168 ../src/Sharpener.cs:73
-#: ../src/UI.Dialog/EditExceptionDialog.cs:25
-#, csharp-format
-msgid "Received exception \"{0}\". Unable to save photo {1}"
-msgstr "Exceção \"{0}\" recebida. Não foi possível salvar foto {1}"
-
-#: ../src/PhotoView.cs:357
+#: ../src/PhotoView.cs:339
msgid "Comment:"
msgstr "Comentário:"
@@ -2872,72 +2754,64 @@ msgstr "Fotos"
msgid "Image Settings"
msgstr "Configurações da imagem"
-#: ../src/QueryWidget.cs:58
+#: ../src/QueryWidget.cs:55
msgid "Find: "
msgstr "Localizar: "
-#: ../src/QueryWidget.cs:63
+#: ../src/QueryWidget.cs:60
msgid "Untagged photos"
msgstr "Fotos não etiquetadas"
-#: ../src/QueryWidget.cs:71
+#: ../src/QueryWidget.cs:68
msgid "Rated photos"
msgstr "Fotos avaliadas"
#. Note for translators: 'Import roll' is no command, it means 'Roll that has been imported'
-#: ../src/QueryWidget.cs:80
+#: ../src/QueryWidget.cs:77
msgid "Import roll"
msgstr "Rolo importado"
-#: ../src/QueryWidget.cs:104
+#: ../src/QueryWidget.cs:100
msgid "Clear search"
msgstr "Limpar pesquisa"
-#: ../src/QueryWidget.cs:111
+#: ../src/QueryWidget.cs:107
msgid "Refresh search"
msgstr "Atualizar pesquisa"
-#: ../src/QueryWidget.cs:113
+#: ../src/QueryWidget.cs:110
msgid "No matching photos found"
msgstr "Nenhuma foto correspondente localizada"
-#: ../src/QueryWidget.cs:155
-msgid "Hide _Find Bar"
-msgstr "_Ocultar barra de pesquisa"
-
-#: ../src/QueryWidget.cs:161
-msgid "Show _Find Bar"
-msgstr "Mostrar barra de _pesquisa"
-
-#: ../src/RotateCommand.cs:96 ../src/RotateCommand.cs:111
+#: ../src/RotateCommand.cs:87 ../src/RotateCommand.cs:102
msgid "Unable to rotate this type of photo"
msgstr "Não foi possível girar este tipo de foto"
-#: ../src/RotateCommand.cs:131
+#: ../src/RotateCommand.cs:122
msgid "Unable to rotate readonly file"
msgstr "Não foi possível girar o arquivo somente leitura"
-#: ../src/RotateCommand.cs:198
+#: ../src/RotateCommand.cs:185
msgid "Rotating photos"
msgstr "Girando fotos"
-#: ../src/RotateCommand.cs:209
+#: ../src/RotateCommand.cs:196
#, csharp-format
msgid "Rotating photo \"{0}\""
msgstr "Girando foto \"{0}\""
-#: ../src/RotateCommand.cs:222
+#: ../src/RotateCommand.cs:209
msgid "Directory not found"
msgstr "Diretório não localizado"
-#: ../src/RotateCommand.cs:242
+#: ../src/RotateCommand.cs:229
#, csharp-format
msgid "Unable to rotate photo"
msgid_plural "Unable to rotate {0} photos"
msgstr[0] "Não foi possível girar foto"
msgstr[1] "Não foi possível girar {0} fotos"
-#: ../src/RotateCommand.cs:244
+#: ../src/RotateCommand.cs:231
#, csharp-format
msgid ""
"The photo could not be rotated because it is on a read only file system or "
@@ -2954,35 +2828,35 @@ msgstr[1] ""
"somente leitura, tal como um CD-ROM. Por favor, verifique as permissões e "
"tente novamente."
-#: ../src/RotateCommand.cs:271
+#: ../src/RotateCommand.cs:258
#, csharp-format
msgid "Received error \"{0}\" while attempting to rotate {1}"
msgstr "Erro \"{0}\" recebido ao tentar girar {1}"
-#: ../src/RotateCommand.cs:276
+#: ../src/RotateCommand.cs:263
msgid "Error while rotating photo."
msgstr "Erro ao girar foto."
-#: ../src/SendEmail.cs:240
+#: ../src/SendEmail.cs:217
msgid "Preparing email"
msgstr "Preparando e-mail"
-#: ../src/SendEmail.cs:292
+#: ../src/SendEmail.cs:266
#, csharp-format
msgid "Exporting picture \"{0}\""
msgstr "Exportando figura \"{0}\""
-#: ../src/SendEmail.cs:314
+#: ../src/SendEmail.cs:285
msgid "Error processing image"
msgstr "Erro ao processar imagem"
-#: ../src/SendEmail.cs:315
+#: ../src/SendEmail.cs:286
#, csharp-format
msgid "An error occured while processing \"{0}\": {1}"
msgstr "Ocorreu um erro ao processar \"{0}\": {1}"
#. Send the mail :)
-#: ../src/SendEmail.cs:330
+#: ../src/SendEmail.cs:299
msgid "My Photos"
msgstr "Minhas fotos"
@@ -2990,6 +2864,11 @@ msgstr "Minhas fotos"
msgid "Error saving sharpened photo"
msgstr "Erro ao salvar foto aguçada"
+#: ../src/Sharpener.cs:73 ../src/UI.Dialog/EditExceptionDialog.cs:26
+#, csharp-format
+msgid "Received exception \"{0}\". Unable to save photo {1}"
+msgstr "Exceção \"{0}\" recebida. Não foi possível salvar foto {1}"
+
#: ../src/Sharpener.cs:102
msgid "Sharpen"
msgstr "Aguçar"
@@ -3006,36 +2885,40 @@ msgstr "Raio:"
msgid "Threshold:"
msgstr "Limiar:"
-#: ../src/SingleView.cs:73
+#: ../src/SingleView.cs:72
msgid "Rotate photo left"
msgstr "Gira foto à esquerda"
-#: ../src/SingleView.cs:78
+#: ../src/SingleView.cs:77
msgid "Rotate photo right"
msgstr "Gira foto à direita"
-#: ../src/SingleView.cs:115
+#: ../src/SingleView.cs:114
msgid "Folder"
msgstr "Pasta"
-#: ../src/SingleView.cs:341
+#: ../src/SingleView.cs:339
msgid "Open"
msgstr "Abrir"
-#: ../src/SingleView.cs:428
+#: ../src/SingleView.cs:342
+msgid "Select Folder"
+msgstr "Selecionar pasta"
+
+#: ../src/SingleView.cs:426
msgid "Set as Background"
msgstr "Definir como plano de fundo"
-#: ../src/TagCommands.cs:96 ../src/TagSelectionWidget.cs:498
-#: ../src/UI.Dialog/EditTagDialog.cs:78
+#: ../src/TagCommands.cs:97 ../src/TagSelectionWidget.cs:491
+#: ../src/UI.Dialog/EditTagDialog.cs:76
msgid "This name is already in use"
msgstr "Esse nome já está em uso"
-#: ../src/TagCommands.cs:144
+#: ../src/TagCommands.cs:145
msgid "Create New Tag"
msgstr "Criar nova etiqueta"
-#: ../src/TagCommands.cs:145
+#: ../src/TagCommands.cs:146
msgid "Name of New Tag:"
msgstr "Nome da nova etiqueta:"
@@ -3046,7 +2929,7 @@ msgid_plural "Find"
msgstr[0] "Localizar"
msgstr[1] "Localizar"
-#: ../src/TagPopup.cs:36 ../src/Widgets/TagMenu.cs:91
+#: ../src/TagPopup.cs:36 ../src/Widgets/TagMenu.cs:98
msgid "Create New Tag..."
msgstr "Criar nova etiqueta..."
@@ -3101,41 +2984,41 @@ msgstr[1] "Localizar _com"
msgid "All"
msgstr "Todos"
-#: ../src/TagQueryWidget.cs:149 ../src/Term.cs:592
+#: ../src/TagQueryWidget.cs:149 ../src/Term.cs:586
#, csharp-format
msgid "Not {0}"
msgstr "Não {0}"
-#: ../src/TagQueryWidget.cs:278
+#: ../src/TagQueryWidget.cs:273
msgid "Drag tags here to search for them"
msgstr "Arraste as etiquetas e solte-as aqui para pesquisar por elas"
-#: ../src/TagSelectionWidget.cs:497
+#: ../src/TagSelectionWidget.cs:490
msgid "Error renaming tag"
msgstr "Erro ao renomear etiqueta"
-#: ../src/TagStore.cs:203
+#: ../src/TagStore.cs:204
msgid "Favorites"
msgstr "Favoritos"
-#: ../src/TagStore.cs:208
+#: ../src/TagStore.cs:209
msgid "Hidden"
msgstr "Oculto"
-#: ../src/TagStore.cs:216
+#: ../src/TagStore.cs:217
msgid "People"
msgstr "Pessoas"
-#: ../src/TagStore.cs:221
+#: ../src/TagStore.cs:222
msgid "Places"
msgstr "Locais"
-#: ../src/TagStore.cs:226
+#: ../src/TagStore.cs:227
msgid "Events"
msgstr "Eventos"
#. The label for the root category is used in new and edit tag dialogs
-#: ../src/TagStore.cs:239 ../src/Widgets/InfoBox.cs:409
+#: ../src/TagStore.cs:240 ../src/Widgets/InfoBox.cs:410
msgid "(None)"
msgstr "(Nenhum)"
@@ -3155,28 +3038,28 @@ msgstr " ou "
#. OPS The operators we support, case insensitive
#. private static string op_str = "(?'Ops' or | and |, | \\s+ )";
#: ../src/Term.cs:380 ../src/UI.Dialog/ui/DateRangeDialog.ui.h:7
-#: ../src/Widgets/FindBar.cs:177
+#: ../src/Widgets/FindBar.cs:178 ../src/Widgets/FindBar.cs:533
msgid "or"
msgstr "ou"
-#: ../src/ThumbnailCommand.cs:20
+#: ../src/ThumbnailCommand.cs:21
msgid "Updating Thumbnails"
msgstr "Atualizando miniaturas"
-#: ../src/ThumbnailCommand.cs:28
+#: ../src/ThumbnailCommand.cs:29
#, csharp-format
msgid "Updating picture \"{0}\""
msgstr "Atualizando figura \"{0}\""
-#: ../src/UI.Dialog/AboutDialog.cs:76
+#: ../src/UI.Dialog/AboutDialog.cs:94
msgid "Photo management for GNOME"
msgstr "Gerenciador de fotos do GNOME"
-#: ../src/UI.Dialog/AboutDialog.cs:77
-msgid "Copyright © 2003-2009 Novell Inc."
-msgstr "Copyright © 2003-2009 Novell Inc."
+#: ../src/UI.Dialog/AboutDialog.cs:95
+msgid "Copyright © 2003-2010 Novell Inc."
+msgstr "Copyright © 2003-2010 Novell Inc."
-#: ../src/UI.Dialog/AboutDialog.cs:100
+#: ../src/UI.Dialog/AboutDialog.cs:119
msgid "translator-credits"
msgstr ""
"Raphael Higino <In memoriam>\n"
@@ -3189,11 +3072,11 @@ msgstr ""
"Leonardo Ferreira Fontenelle <leonardof at gnome.org>\n"
"Jonh Wendell <wendell at bani.com.br>"
-#: ../src/UI.Dialog/AboutDialog.cs:105
+#: ../src/UI.Dialog/AboutDialog.cs:124
msgid "F-Spot Website"
msgstr "Site do F-Spot"
-#: ../src/UI.Dialog/AdjustTimeDialog.cs:112
+#: ../src/UI.Dialog/AdjustTimeDialog.cs:113
#: ../src/UI.Dialog/ui/AdjustTimeDialog.ui.h:10
#, csharp-format
msgid "Shift all photos by {0}"
@@ -3235,16 +3118,20 @@ msgstr "Semana anterior (Seg-Dom)"
msgid "Customized Range"
msgstr "Intervalo personalizado"
-#: ../src/UI.Dialog/EditTagIconDialog.cs:46
+#: ../src/UI.Dialog/EditExceptionDialog.cs:39
+msgid "Error editing photo"
+msgstr "Erro ao editar foto"
+
+#: ../src/UI.Dialog/EditTagIconDialog.cs:42
#, csharp-format
msgid "Edit Icon for Tag {0}"
msgstr "Editar ícone para etiqueta {0}"
-#: ../src/UI.Dialog/EditTagIconDialog.cs:68
+#: ../src/UI.Dialog/EditTagIconDialog.cs:64
msgid "Select Photo from file"
msgstr "Selecione o arquivo da Foto"
-#: ../src/UI.Dialog/EditTagIconDialog.cs:90
+#: ../src/UI.Dialog/EditTagIconDialog.cs:86
#, csharp-format
msgid ""
"\n"
@@ -3261,16 +3148,16 @@ msgstr ""
" Por favor adicione uma foto à etiqueta \"{0}\" e repita esta ação\n"
" para usá-la como um ícone."
-#: ../src/UI.Dialog/EditTagIconDialog.cs:168
+#: ../src/UI.Dialog/EditTagIconDialog.cs:164
msgid "Unable to load image"
msgstr "Não foi possível carregar a imagem"
-#: ../src/UI.Dialog/EditTagIconDialog.cs:169
+#: ../src/UI.Dialog/EditTagIconDialog.cs:165
#, csharp-format
msgid "Unable to load \"{0}\" as icon for the tag"
msgstr "Não foi possível carregar \"{0}\" como ícone de etiqueta"
-#: ../src/UI.Dialog/EditTagIconDialog.cs:207
+#: ../src/UI.Dialog/EditTagIconDialog.cs:203
#, csharp-format
msgid "Photo {0} of {1}"
msgstr "Foto {0} de {1}"
@@ -3287,24 +3174,51 @@ msgstr "Detalhes de erro"
msgid "An unhandled exception was thrown: "
msgstr "Ocorreu uma exceção sem tratamento: "
-#: ../src/UI.Dialog/PreferenceDialog.cs:54
-#: ../src/UI.Dialog/PreferenceDialog.cs:77
+#: ../src/UI.Dialog/ImportDialog.cs:15
+msgid "Choose Folder..."
+msgstr "Escolher pasta..."
+
+#: ../src/UI.Dialog/ImportDialog.cs:124
+msgid "Choose Import source..."
+msgstr "Escolher fonte da importação..."
+
+#: ../src/UI.Dialog/ImportDialog.cs:136
+msgid "(No Cameras Detected)"
+msgstr "(Nenhuma câmera detectada)"
+
+#: ../src/UI.Dialog/ImportDialog.cs:264
+#, csharp-format
+msgid "Importing Photos: {0} of {1}..."
+msgstr "Importando fotos: {0} de {1}..."
+
+#: ../src/UI.Dialog/ImportDialog.cs:288
+msgid "Importing photos..."
+msgstr "Importando fotos..."
+
+#. TODO: Using a GtkSpinner would be nicer here.
+#: ../src/UI.Dialog/ImportDialog.cs:295
+msgid "Searching for photos... (You can already click Import to continue)"
+msgstr ""
+"Procurando por fotos... (você já pode clicar em Importar para continuar)"
+
+#: ../src/UI.Dialog/PreferenceDialog.cs:55
+#: ../src/UI.Dialog/PreferenceDialog.cs:78
msgid "None"
msgstr "Nenhum"
-#: ../src/UI.Dialog/PreferenceDialog.cs:56
+#: ../src/UI.Dialog/PreferenceDialog.cs:57
msgid "System profile"
msgstr "Perfil do sistema"
-#: ../src/UI.Dialog/PreferenceDialog.cs:94
+#: ../src/UI.Dialog/PreferenceDialog.cs:95
msgid "Standard theme"
msgstr "Tema padrão"
-#: ../src/UI.Dialog/RepairDbDialog.cs:20
+#: ../src/UI.Dialog/RepairDbDialog.cs:21
msgid "Error loading database."
msgstr "Erro ao carregar banco de dados."
-#: ../src/UI.Dialog/RepairDbDialog.cs:21
+#: ../src/UI.Dialog/RepairDbDialog.cs:22
#, csharp-format
msgid ""
"F-Spot encountered an error while loading the photo database. The old "
@@ -3313,15 +3227,15 @@ msgstr ""
"O F-Spot encontrou um erro ao carregar o banco de dados de fotos. O banco de "
"dados antigo foi movido para {0} e um novo banco de dados foi criado."
-#: ../src/UI.Dialog/SelectionRatioDialog.cs:60
+#: ../src/UI.Dialog/SelectionRatioDialog.cs:61
msgid "Label"
msgstr "Rótulo"
-#: ../src/UI.Dialog/SelectionRatioDialog.cs:64
+#: ../src/UI.Dialog/SelectionRatioDialog.cs:65
msgid "Ratio"
msgstr "Proporção"
-#: ../src/UI.Dialog/ThreadProgressDialog.cs:56
+#: ../src/UI.Dialog/ThreadProgressDialog.cs:55
msgid "Retry"
msgstr "Repetir"
@@ -3493,6 +3407,117 @@ msgstr "<b>Avaliação mínima</b>"
msgid "Set Rating Filter"
msgstr "Definir filtro de avaliações"
+#: ../src/ui/import.ui.h:1
+msgid "Attach Tags:"
+msgstr "Adicionar etiquetas:"
+
+#: ../src/ui/import.ui.h:2
+msgid "Copy files to the Photos folder"
+msgstr "Copiar arquivos para pasta Photos"
+
+#: ../src/ui/import.ui.h:3
+msgid "Detect duplicates"
+msgstr "Detectar duplicatas"
+
+#. Translators: this string means 'source of import'
+#: ../src/ui/import.ui.h:6
+msgid "Import from:"
+msgstr "Importar de:"
+
+#: ../src/ui/import.ui.h:7
+msgid "Include subfolders"
+msgstr "Incluir subpastas"
+
+#: ../src/ui/mail_dialog.ui.h:1
+msgid "1024 px"
+msgstr "1024 px"
+
+#: ../src/ui/mail_dialog.ui.h:2
+msgid "320 px"
+msgstr "320 px"
+
+#: ../src/ui/mail_dialog.ui.h:3
+msgid "480 px"
+msgstr "480 px"
+
+#: ../src/ui/mail_dialog.ui.h:4
+msgid "640 px"
+msgstr "640 px"
+
+#: ../src/ui/mail_dialog.ui.h:5
+msgid "800 px"
+msgstr "800 px"
+
+#: ../src/ui/mail_dialog.ui.h:7
+msgid "<b>Size</b>"
+msgstr "<b>Tamanho</b>"
+
+#: ../src/ui/mail_dialog.ui.h:9
+msgid "<b>Summary</b>"
+msgstr "<b>Resumo</b>"
+
+#: ../src/ui/mail_dialog.ui.h:11
+msgid "Create Mail"
+msgstr "Criar e-mail"
+
+#: ../src/ui/mail_dialog.ui.h:12
+msgid "Create a mail with the selected photos (possibly resized) attached"
+msgstr ""
+"Cria um e-mail com as fotos selecionadas (possivelmente redimensionadas) em "
+"anexo"
+
+#: ../src/ui/mail_dialog.ui.h:13
+msgid "Do not send a mail"
+msgstr "Não enviar um e-mail"
+
+#: ../src/ui/mail_dialog.ui.h:14
+msgid "Estimated new size"
+msgstr "Novo tamanho estimado"
+
+#: ../src/ui/mail_dialog.ui.h:15
+msgid "Extra large"
+msgstr "Muito grande"
+
+#: ../src/ui/mail_dialog.ui.h:16
+msgid "Large"
+msgstr "Grande"
+
+#: ../src/ui/mail_dialog.ui.h:17
+msgid "Medium"
+msgstr "Médio"
+
+#: ../src/ui/mail_dialog.ui.h:18
+msgid "Number of pictures"
+msgstr "Número de figuras"
+
+#: ../src/ui/mail_dialog.ui.h:20
+msgid "Original size (possible very large file size)"
+msgstr "Tamanho original (tamanho de arquivo muito grande possível)"
+
+#: ../src/ui/mail_dialog.ui.h:21
+msgid "Small"
+msgstr "Pequeno"
+
+#: ../src/ui/mail_dialog.ui.h:22
+msgid ""
+"Specify if an original size picture should be rotated or not. Smaller sizes "
+"are automatically rotated."
+msgstr ""
+"Especifica se uma figura de tamanho original deve ser girada ou não. "
+"Tamanhos menores são automaticamente girados."
+
+#: ../src/ui/mail_dialog.ui.h:23
+msgid "Tiny"
+msgstr "Minúsculo"
+
+#: ../src/ui/mail_dialog.ui.h:24
+msgid "Total original size"
+msgstr "Tamanho original total"
+
+#: ../src/ui/mail_dialog.ui.h:25
+msgid "_Create Mail"
+msgstr "Criar e-_mail"
+
#: ../src/ui/main_window.ui.h:1
msgid "Adjust _Time..."
msgstr "Ajustar _hora..."
@@ -3525,194 +3550,206 @@ msgstr "Criar nova e_tiqueta..."
msgid "Create _New Version..."
msgstr "Criar _nova versão..."
-#: ../src/ui/main_window.ui.h:11
+#: ../src/ui/main_window.ui.h:10
+msgid "De_tach Version"
+msgstr "S_eparar versão"
+
+#: ../src/ui/main_window.ui.h:12
msgid "Fin_d"
msgstr "_Localizar"
-#: ../src/ui/main_window.ui.h:12
+#: ../src/ui/main_window.ui.h:13
msgid "Manage _Extensions"
msgstr "Gerenciar _extensões"
-#: ../src/ui/main_window.ui.h:13
+#: ../src/ui/main_window.ui.h:14
msgid "Page Set_up..."
msgstr "C_onfigurar página..."
-#: ../src/ui/main_window.ui.h:14
+#: ../src/ui/main_window.ui.h:15
msgid "Re_fresh Thumbnail"
msgstr "Atualizar _miniatura"
# "Todos" porque refere-se aos pacotes de instalação
-#: ../src/ui/main_window.ui.h:18
+#: ../src/ui/main_window.ui.h:19
msgid "Select _All"
msgstr "Selecionar _todos"
-#: ../src/ui/main_window.ui.h:19
+#: ../src/ui/main_window.ui.h:20
msgid "Select _None"
msgstr "_Limpar seleção"
-#: ../src/ui/main_window.ui.h:20
+#: ../src/ui/main_window.ui.h:21
msgid "Send by _Mail..."
msgstr "Enviar e-_mail..."
-#: ../src/ui/main_window.ui.h:22
+#: ../src/ui/main_window.ui.h:23
msgid "Side_bar"
msgstr "_Barra lateral"
-#: ../src/ui/main_window.ui.h:23
+#: ../src/ui/main_window.ui.h:24
msgid "T_ags"
msgstr "Etiquet_as"
# Refere-se aos elementos apresentados abaixo de cada miniatura, como ícone da tag e data.
-#: ../src/ui/main_window.ui.h:25
+#: ../src/ui/main_window.ui.h:26
msgid "Thumbnail _elements"
msgstr "_Elementos das miniaturas"
-#: ../src/ui/main_window.ui.h:26
+#: ../src/ui/main_window.ui.h:27
msgid "Too_lbar"
msgstr "Barra de _ferramentas"
-#: ../src/ui/main_window.ui.h:27
+#: ../src/ui/main_window.ui.h:28
msgid "View"
msgstr "Ver"
#: ../src/ui/main_window.ui.h:33
+msgid "_Attach Tag"
+msgstr "_Adicionar etiqueta"
+
+#: ../src/ui/main_window.ui.h:34
msgid "_Attach Tag to Selection"
msgstr "_Adicionar etiqueta à seleção"
-#: ../src/ui/main_window.ui.h:35
+#: ../src/ui/main_window.ui.h:36
msgid "_Clear Rating Filter"
msgstr "_Limpar filtro de avaliações"
-#: ../src/ui/main_window.ui.h:36
+#: ../src/ui/main_window.ui.h:37
msgid "_Clear Roll Filter"
msgstr "_Limpar filtro de rolo"
# Talvez usar "Disposição" como no nautilus
-#: ../src/ui/main_window.ui.h:38
+#: ../src/ui/main_window.ui.h:39
msgid "_Components"
msgstr "_Componentes"
-#: ../src/ui/main_window.ui.h:39
+#: ../src/ui/main_window.ui.h:40
msgid "_Contents"
msgstr "_Conteúdos"
-#: ../src/ui/main_window.ui.h:40
+#: ../src/ui/main_window.ui.h:41
msgid "_Dates"
msgstr "_Datas"
-#: ../src/ui/main_window.ui.h:42
+#: ../src/ui/main_window.ui.h:43
msgid "_Delete Selected Tag"
msgstr "E_xcluir etiqueta selecionada"
-#: ../src/ui/main_window.ui.h:43
+#: ../src/ui/main_window.ui.h:44
msgid "_Delete Version"
msgstr "E_xcluir versão"
-#: ../src/ui/main_window.ui.h:45
+#: ../src/ui/main_window.ui.h:46
msgid "_Edit Tag..."
msgstr "_Editar etiqueta..."
-#: ../src/ui/main_window.ui.h:46
+#: ../src/ui/main_window.ui.h:47
msgid "_Export to"
msgstr "_Exportar para"
-#: ../src/ui/main_window.ui.h:47
+#: ../src/ui/main_window.ui.h:48
msgid "_Filmstrip"
msgstr "_Fotograma"
-#: ../src/ui/main_window.ui.h:50
+#: ../src/ui/main_window.ui.h:51
msgid "_Hidden"
msgstr "_Oculto"
-#: ../src/ui/main_window.ui.h:51
+#: ../src/ui/main_window.ui.h:52
msgid "_Import..."
msgstr "_Importar..."
-#: ../src/ui/main_window.ui.h:52
+#: ../src/ui/main_window.ui.h:53
+msgid "_Invert Selection"
+msgstr "_Inverter seleção"
+
+#: ../src/ui/main_window.ui.h:54
msgid "_Large"
msgstr "_Grande"
-#: ../src/ui/main_window.ui.h:53
+#: ../src/ui/main_window.ui.h:55
msgid "_Last Import Roll"
msgstr "Ú_ltimo rolo importado"
-#: ../src/ui/main_window.ui.h:54
+#: ../src/ui/main_window.ui.h:56
msgid "_Loupe"
msgstr "_Lupa"
-#: ../src/ui/main_window.ui.h:55
+#: ../src/ui/main_window.ui.h:57
msgid "_Medium"
msgstr "_Médio"
-#: ../src/ui/main_window.ui.h:57
+#: ../src/ui/main_window.ui.h:59
msgid "_Quit"
msgstr "_Sair"
-#: ../src/ui/main_window.ui.h:58
+#: ../src/ui/main_window.ui.h:60
msgid "_Ratings"
msgstr "A_valiações"
-#: ../src/ui/main_window.ui.h:60
+#: ../src/ui/main_window.ui.h:62
msgid "_Remove Tag From Selection"
msgstr "_Remover etiqueta da seleção"
-#: ../src/ui/main_window.ui.h:61
+#: ../src/ui/main_window.ui.h:63
msgid "_Rename Version"
msgstr "_Renomear versão"
-#: ../src/ui/main_window.ui.h:62
+#: ../src/ui/main_window.ui.h:64
msgid "_Reverse Order"
msgstr "Inve_rter ordem"
-#: ../src/ui/main_window.ui.h:63
+#: ../src/ui/main_window.ui.h:65
msgid "_Select Import Rolls..."
msgstr "_Selecionar rolos importados..."
-#: ../src/ui/main_window.ui.h:64
+#: ../src/ui/main_window.ui.h:66
msgid "_Set Date Range..."
msgstr "Definir intervalo de data_s..."
-#: ../src/ui/main_window.ui.h:65
+#: ../src/ui/main_window.ui.h:67
msgid "_Set Rating filter..."
msgstr "Definir filtro de a_valiações..."
-#: ../src/ui/main_window.ui.h:66
+#: ../src/ui/main_window.ui.h:68
msgid "_Sharpen..."
msgstr "A_guçar..."
-#: ../src/ui/main_window.ui.h:68
+#: ../src/ui/main_window.ui.h:70
msgid "_Small"
msgstr "_Pequeno"
-#: ../src/ui/main_window.ui.h:69
+#: ../src/ui/main_window.ui.h:71
msgid "_Tag Icons"
msgstr "Ícones de e_tiqueta"
-#: ../src/ui/main_window.ui.h:70
+#: ../src/ui/main_window.ui.h:72
msgid "_Tags"
msgstr "Etique_tas"
-#: ../src/ui/main_window.ui.h:71
+#: ../src/ui/main_window.ui.h:73
msgid "_Timeline"
msgstr "Linha do _tempo"
-#: ../src/ui/main_window.ui.h:72
+#: ../src/ui/main_window.ui.h:74
msgid "_Tools"
msgstr "Ferramen_tas"
-#: ../src/ui/main_window.ui.h:73
+#: ../src/ui/main_window.ui.h:75
msgid "_Untagged Photos"
msgstr "Importar fotos _não etiquetadas"
-#: ../src/ui/main_window.ui.h:74
+#: ../src/ui/main_window.ui.h:76
msgid "_Version"
msgstr "_Versão"
-#: ../src/Updater.cs:622
+#: ../src/Updater.cs:724
msgid "Updating F-Spot Database"
msgstr "Atualizando o banco de dados do f-Spot"
-#: ../src/Updater.cs:623
+#: ../src/Updater.cs:725
msgid ""
"Please wait while your F-Spot gallery's database is updated. This may take "
"some time."
@@ -3721,7 +3758,7 @@ msgstr ""
"atualizado. Isto pode levar algum tempo."
#. Mono.Unix.Error error = Mono.Unix.Stdlib.GetLastError ();
-#: ../src/Utils/Unix.cs:35
+#: ../src/Utils/Unix.cs:36
msgid "Unable to create temporary file"
msgstr "Não foi possível criar arquivo temporário"
@@ -3805,11 +3842,11 @@ msgstr "Imprime as etiquetas da foto"
msgid "Print photo comment"
msgstr "Imprime o comentário da foto"
-#: ../src/Widgets/EditorPage.cs:30 ../src/Widgets/Sidebar.cs:54
+#: ../src/Widgets/EditorPage.cs:31 ../src/Widgets/Sidebar.cs:54
msgid "Edit"
msgstr "Editar"
-#: ../src/Widgets/EditorPage.cs:198
+#: ../src/Widgets/EditorPage.cs:199
msgid ""
"This tool requires an active selection. Please select a region of the photo "
"and try the operation again"
@@ -3817,13 +3854,13 @@ msgstr ""
"Esta ferramenta requer uma seleção ativa. Por favor, selecione uma região da "
"foto e tente a operação novamente"
-#: ../src/Widgets/EditorPage.cs:216
+#: ../src/Widgets/EditorPage.cs:217
msgid "Error saving adjusted photo"
msgid_plural "Error saving adjusted photos"
msgstr[0] "Erro ao salvar foto ajustada"
msgstr[1] "Erro ao salvar fotos ajustadas"
-#: ../src/Widgets/EditorPage.cs:218
+#: ../src/Widgets/EditorPage.cs:219
#, csharp-format
msgid ""
"Received exception \"{0}\". Note that you have to develop RAW files into "
@@ -3832,15 +3869,15 @@ msgstr ""
"A exceção \"{0}\" foi recebida. Note que você deve revelar arquivos RAW para "
"JPEG antes de editá-los."
-#: ../src/Widgets/Filmstrip.cs:572
+#: ../src/Widgets/Filmstrip.cs:573
msgid "_Horizontal"
msgstr "_Horizontal"
-#: ../src/Widgets/Filmstrip.cs:576
+#: ../src/Widgets/Filmstrip.cs:577
msgid "_Vertical"
msgstr "_Vertical"
-#: ../src/Widgets/FindBar.cs:58
+#: ../src/Widgets/FindBar.cs:59
msgid "Find:"
msgstr "Localizar:"
@@ -3848,66 +3885,70 @@ msgstr "Localizar:"
msgid "Folders"
msgstr "Pastas"
-#: ../src/Widgets/FolderTreeView.cs:123
+#: ../src/Widgets/FolderTreeView.cs:127
msgid "Filesystem"
msgstr "Sistema de arquivos"
-#: ../src/Widgets/InfoBox.cs:182
+#: ../src/Widgets/InfoBox.cs:183
msgid "Histogram"
msgstr "Histograma"
-#: ../src/Widgets/InfoBox.cs:215
+#: ../src/Widgets/InfoBox.cs:216
msgid "Version"
msgstr "Versão"
-#: ../src/Widgets/InfoBox.cs:218
+#: ../src/Widgets/InfoBox.cs:219
msgid "Date"
msgstr "Data"
-#: ../src/Widgets/InfoBox.cs:224
+#: ../src/Widgets/InfoBox.cs:225
msgid "Exposure"
msgstr "Exposição"
-#: ../src/Widgets/InfoBox.cs:228
+#: ../src/Widgets/InfoBox.cs:229
msgid "Focal Length"
msgstr "Comprimento focal"
-#: ../src/Widgets/InfoBox.cs:234
+#: ../src/Widgets/InfoBox.cs:232
+msgid "Camera"
+msgstr "Câmera"
+
+#: ../src/Widgets/InfoBox.cs:235
msgid "File Size"
msgstr "Tamanho do arquivo"
-#: ../src/Widgets/InfoBox.cs:237
+#: ../src/Widgets/InfoBox.cs:238
msgid "Rating"
msgstr "Avaliação:"
-#: ../src/Widgets/InfoBox.cs:390 ../src/Widgets/InfoBox.cs:398
-#: ../src/Widgets/InfoBox.cs:428
+#: ../src/Widgets/InfoBox.cs:391 ../src/Widgets/InfoBox.cs:399
+#: ../src/Widgets/InfoBox.cs:429
msgid "(wrong format)"
msgstr "(formato incorreto)"
-#: ../src/Widgets/InfoBox.cs:418 ../src/Widgets/InfoBox.cs:441
-#: ../src/Widgets/InfoBox.cs:451 ../src/Widgets/InfoBox.cs:460
+#: ../src/Widgets/InfoBox.cs:419 ../src/Widgets/InfoBox.cs:442
+#: ../src/Widgets/InfoBox.cs:452 ../src/Widgets/InfoBox.cs:461
msgid "(Unknown)"
msgstr "(Desconhecido)"
-#: ../src/Widgets/InfoBox.cs:561
+#: ../src/Widgets/InfoBox.cs:564
#, csharp-format
msgid "(One Edit)"
msgid_plural "({0} Edits)"
msgstr[0] "(Uma edição)"
msgstr[1] "({0} edições)"
-#: ../src/Widgets/InfoBox.cs:575
+#: ../src/Widgets/InfoBox.cs:578
msgid "(File read error)"
msgstr "(Erro ao ler o arquivo)"
-#: ../src/Widgets/InfoBox.cs:620
+#: ../src/Widgets/InfoBox.cs:623
#, csharp-format
msgid "{0} Photos"
msgstr "{0} Fotos"
#. Note for translators: {0} is a date, {1} and {2} are times.
-#: ../src/Widgets/InfoBox.cs:640
+#: ../src/Widgets/InfoBox.cs:643
#, csharp-format
msgid ""
"On {0} between \n"
@@ -3916,7 +3957,7 @@ msgstr ""
"Em {0} entre \n"
"{1} e {2}"
-#: ../src/Widgets/InfoBox.cs:645
+#: ../src/Widgets/InfoBox.cs:648
#, csharp-format
msgid ""
"Between {0} \n"
@@ -3925,35 +3966,35 @@ msgstr ""
"Entre {0} \n"
"e {1}"
-#: ../src/Widgets/InfoBox.cs:672
+#: ../src/Widgets/InfoBox.cs:675
msgid "(At least one File not found)"
msgstr "(Ao menos um arquivo não foi localizado)"
-#: ../src/Widgets/InfoBox.cs:789
+#: ../src/Widgets/InfoBox.cs:792
msgid "Show Photo Name"
msgstr "Mostrar nome da foto"
-#: ../src/Widgets/InfoBox.cs:798
+#: ../src/Widgets/InfoBox.cs:801
msgid "Show Date"
msgstr "Mostrar data"
-#: ../src/Widgets/InfoBox.cs:807
+#: ../src/Widgets/InfoBox.cs:810
msgid "Show Size"
msgstr "Mostrar tamanho"
-#: ../src/Widgets/InfoBox.cs:816
+#: ../src/Widgets/InfoBox.cs:819
msgid "Show Exposure"
msgstr "Mostrar exposição"
-#: ../src/Widgets/InfoBox.cs:825
+#: ../src/Widgets/InfoBox.cs:828
msgid "Show Focal Length"
msgstr "Mostrar comprimento focal"
-#: ../src/Widgets/InfoBox.cs:834
+#: ../src/Widgets/InfoBox.cs:837
msgid "Show Camera"
msgstr "Mostrar câmera"
-#: ../src/Widgets/InfoBox.cs:843
+#: ../src/Widgets/InfoBox.cs:846
msgid "Show File Size"
msgstr "Mostrar tamanho do arquivo"
@@ -3987,7 +4028,7 @@ msgstr "Nenhum metadado disponível"
msgid "No applications available"
msgstr "Nenhuma aplicação disponível"
-#: ../src/Widgets/RatingMenuItem.cs:56
+#: ../src/Widgets/RatingMenuItem.cs:57
msgid "Rating:"
msgstr "Avaliação:"
@@ -4012,6 +4053,180 @@ msgstr "Exiba uma apresentação de slides do F-Spot"
msgid "F-Spot photos"
msgstr "Fotos do F-Spot"
+#~ msgid "Error: Error while transferring; Aborting"
+#~ msgstr "Erro: Erro ao transferir; Abortando"
+
+#~ msgid "Error: File Already Exists; Aborting"
+#~ msgstr "Erro: o arquivo já existe; abortando"
+
+#~ msgid "Preview"
+#~ msgstr "Visualização"
+
+#~ msgid "Path"
+#~ msgstr "Caminho"
+
+#~ msgid "File"
+#~ msgstr "Arquivo"
+
+#~ msgid "Select Tag"
+#~ msgstr "Selecionar etiqueta"
+
+#~ msgid "Downloading Previews"
+#~ msgstr "Baixando visualizações"
+
+#~ msgid "Downloading Preview of {0}"
+#~ msgstr "Baixando visualização de {0}"
+
+#~ msgid "Copying file {0} of {1}"
+#~ msgstr "Copiando arquivo {0} de {1}"
+
+#~ msgid "Error transferring file"
+#~ msgstr "Erro ao transferir o arquivo"
+
+#~ msgid "Download Complete"
+#~ msgstr "Download concluído"
+
+#~ msgid "Done Copying Files"
+#~ msgstr "Cópia de arquivos pronta"
+
+#~ msgid "Transferring \"{0}\" from camera"
+#~ msgstr "Transferindo \"{0}\" da câmera"
+
+#~ msgid "Port"
+#~ msgstr "Porta"
+
+#~ msgid "Reparented ({0})"
+#~ msgstr "Derivada ({0})"
+
+#~ msgid "Import error"
+#~ msgstr "Erro de importação"
+
+#~ msgid "Error importing {0}{2}{2}{1}"
+#~ msgstr "Erro ao importar {0}{2}{2}{1}"
+
+#~ msgid " "
+#~ msgstr " "
+
+#~ msgid "<b></b>"
+#~ msgstr "<b></b>"
+
+#~ msgid "Attach tag:"
+#~ msgstr "Adicionar etiqueta:"
+
+#~ msgid "CD"
+#~ msgstr "CD"
+
+#~ msgid "E-_Mail:"
+#~ msgstr "E-_mail:"
+
+#~ msgid "E_xport titles and comments"
+#~ msgstr "E_xportar títulos e comentários"
+
+#~ msgid "G_allery:"
+#~ msgstr "G_aleria:"
+
+#~ msgid "Gallery"
+#~ msgstr "Galeria"
+
+#~ msgid "Pause"
+#~ msgstr "Pausar"
+
+#~ msgid "Select Photos to Copy From Camera..."
+#~ msgstr "Selecione fotos para copiar da câmera..."
+
+#~ msgid "Select the camera from which you want to transfer files"
+#~ msgstr "Selecione a câmera da qual deseja transferir arquivos"
+
+#~ msgid "Selected Camera: "
+#~ msgstr "Câmera selecionada: "
+
+#~ msgid "Strip image _metadata"
+#~ msgstr "Descartar _metadados"
+
+#~ msgid "_Flickr"
+#~ msgstr "_Flickr"
+
+#~ msgid "_Gallery"
+#~ msgstr "_Galeria"
+
+#~ msgid "_Open album in browser when done uploading"
+#~ msgstr "_Abrir o álbum no navegador ao terminar o envio"
+
+#~ msgid "_Open destination when done exporting"
+#~ msgstr "_Abrir destino ao terminar de exportar"
+
+#~ msgid "_Scale photos to no larger than: "
+#~ msgstr "_Dimensionar as imagens para não mais que: "
+
+#~ msgid "_Strip metadata"
+#~ msgstr "_Descartar metadados"
+
+#~ msgid "_URI:"
+#~ msgstr "_URI:"
+
+#~ msgid "_Virtual Filesystem"
+#~ msgstr "Sistema de arquivos _virtual"
+
+#~ msgid "x"
+#~ msgstr "x"
+
+#~ msgid "Loading {0} of {1}"
+#~ msgstr "Carregando {0} de {1}"
+
+#~ msgid "Done Loading"
+#~ msgstr "Carregamento pronto"
+
+#~ msgid "Directory does not exist."
+#~ msgstr "O diretório não existe."
+
+#~ msgid ""
+#~ "The directory you selected \"{0}\" does not exist. Please choose a "
+#~ "different directory"
+#~ msgstr ""
+#~ "O diretório selecionado \"{0}\" não existe. Por favor, escolha um "
+#~ "diretório diferente"
+
+#~ msgid "No cameras detected."
+#~ msgstr "Nenhuma câmera detectada."
+
+#~ msgid ""
+#~ "F-Spot was unable to find any cameras attached to this system. Double "
+#~ "check that the camera is connected and has power"
+#~ msgstr ""
+#~ "O F-Spot não foi capaz de localizar qualquer câmera anexada a este "
+#~ "sistema. Confira novamente se a câmera está conectada e ligada"
+
+#~ msgid "Error connecting to camera"
+#~ msgstr "Erro ao conectar a câmera"
+
+#~ msgid "Received error \"{0}\" while connecting to camera"
+#~ msgstr "Erro recebido \"{0}\" ao conectar à câmera"
+
+#~ msgid "Could not create a new version"
+#~ msgstr "Não foi possível criar uma nova versão"
+
+#~ msgid "Received exception \"{0}\". Unable to create version \"{1}\""
+#~ msgstr "Exceção \"{0}\" recebida. Não foi possível criar versão \"{1}\""
+
+#~ msgid "Really Delete?"
+#~ msgstr "Realmente excluir?"
+
+#~ msgid "Cancel"
+#~ msgstr "Cancelar"
+
+#~ msgid "Could not delete a version"
+#~ msgstr "Não foi possível excluir uma versão"
+
+#~ msgid "Received exception \"{0}\". Unable to delete version \"{1}\""
+#~ msgstr "Exceção \"{0}\" recebida. Não foi possível excluir versão \"{1}\""
+
+#~ msgid "Could not rename a version"
+#~ msgstr "Não foi possível renomear uma versão"
+
+#~ msgid "Received exception \"{0}\". Unable to rename version to \"{1}\""
+#~ msgstr ""
+#~ "Exceção \"{0}\" recebida. Não foi possível renomear versão para \"{1}\""
+
#~ msgid "Edit Selected Tag..."
#~ msgstr "Editar etiqueta selecionada..."
diff --git a/po/sl.po b/po/sl.po
index 21cc632..8fe4e92 100644
--- a/po/sl.po
+++ b/po/sl.po
@@ -4,9 +4,9 @@ msgid ""
msgstr ""
"Project-Id-Version: f-spot\n"
"Report-Msgid-Bugs-To: http://bugzilla.gnome.org/enter_bug.cgi?product=f-spot&component=General\n"
-"POT-Creation-Date: 2010-05-14 15:55+0000\n"
+"POT-Creation-Date: 2010-06-10 18:57+0000\n"
"PO-Revision-Date: \n"
-"Last-Translator: Andrej Žnidaršič <andrej.znidarsic at gmail.com>\n"
+"Last-Translator: Matej Urbančič <mateju at svn.gnome.org>\n"
"Language-Team: Slovenian GNOME Translation Team <gnome-si at googlegroups.com>\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
@@ -16,13 +16,44 @@ msgstr ""
"X-Poedit-Language: Slovenian\n"
"X-Poedit-SourceCharset: utf-8\n"
+#: ../data/desktop-files/f-spot.desktop.in.in.h:1
+#: ../data/desktop-files/f-spot-import.desktop.in.in.h:1
+#: ../data/desktop-files/f-spot-view.desktop.in.in.h:1
+#: ../src/ui/main_window.ui.h:11
+msgid "F-Spot"
+msgstr "F-Spot"
+
+#: ../data/desktop-files/f-spot.desktop.in.in.h:2
+#: ../data/desktop-files/f-spot-import.desktop.in.in.h:2
+msgid "F-Spot Photo Manager"
+msgstr "F-spot upravljalnik fotografij"
+
+#: ../data/desktop-files/f-spot.desktop.in.in.h:3
+msgid "Organize, enjoy, and share your photos"
+msgstr "Urejajte, uživajte in delite vaše fotografije."
+
+#: ../data/desktop-files/f-spot.desktop.in.in.h:4
+#: ../data/desktop-files/f-spot-import.desktop.in.in.h:4
+msgid "Photo Manager"
+msgstr "Upravljalnik fotografij"
+
+#: ../data/desktop-files/f-spot-import.desktop.in.in.h:3
+msgid "Import into F-Spot"
+msgstr "Uvoz v F-Spot"
+
+#: ../data/desktop-files/f-spot-view.desktop.in.in.h:2
+msgid "F-Spot Photo Viewer"
+msgstr "F-_Spot pregledovalnik fotografij"
+
+#: ../data/desktop-files/f-spot-view.desktop.in.in.h:3
+msgid "Photo Viewer"
+msgstr "Pregledovalnik fotografij"
+
#: ../extensions/Exporters/CDExport/CDExport.addin.xml.h:1
msgid "_CD..."
msgstr "_CD ..."
#: ../extensions/Exporters/CDExport/CDExport.cs:162
-#: ../extensions/Exporters/FolderExport/FolderExport.cs:392
-#: ../src/CameraFileSelectionDialog.cs:199
msgid "Transferring Pictures"
msgstr "Prenos slik"
@@ -33,38 +64,35 @@ msgstr "Prenašanje slike \"{0}\" na CD"
#. Note for translators: This indicates the current photo is photo {0} of {1} out of photos
#: ../extensions/Exporters/CDExport/CDExport.cs:220
-#: ../extensions/Exporters/FlickrExport/FlickrExport.cs:349
-#: ../extensions/Exporters/FolderExport/FolderExport.cs:245
+#: ../extensions/Exporters/FlickrExport/FlickrExport.cs:350
+#: ../extensions/Exporters/FolderExport/FolderExport.cs:220
#: ../extensions/Exporters/GalleryExport/GalleryExport.cs:781
-#: ../src/MainWindow.cs:673
-#: ../src/UI.Dialog/AdjustTimeDialog.cs:129
-#: ../src/UI.Dialog/ProgressDialog.cs:92
+#: ../src/MainWindow.cs:653
+#: ../src/UI.Dialog/AdjustTimeDialog.cs:130
+#: ../src/UI.Dialog/ProgressDialog.cs:90
#, csharp-format
msgid "{0} of {1}"
msgstr "{0} od {1}"
#: ../extensions/Exporters/CDExport/CDExport.cs:233
-#: ../extensions/Exporters/FacebookExport/FacebookExport.cs:380
-#: ../extensions/Exporters/FlickrExport/FlickrExport.cs:379
-#: ../extensions/Exporters/FolderExport/FolderExport.cs:285
+#: ../extensions/Exporters/FacebookExport/FacebookExport.cs:377
+#: ../extensions/Exporters/FlickrExport/FlickrExport.cs:380
#: ../extensions/Exporters/GalleryExport/GalleryExport.cs:806
-#: ../extensions/Exporters/PicasaWebExport/PicasaWebExport.cs:704
+#: ../extensions/Exporters/PicasaWebExport/PicasaWebExport.cs:705
#: ../extensions/Exporters/SmugMugExport/SmugMugExport.cs:607
msgid "Done Sending Photos"
msgstr "Pošiljanje fotografij je končano"
#: ../extensions/Exporters/CDExport/CDExport.cs:235
-#: ../extensions/Exporters/FolderExport/FolderExport.cs:287
msgid "Transfer Complete"
msgstr "Prenos končan"
#: ../extensions/Exporters/CDExport/CDExport.cs:242
-#: ../extensions/Exporters/FolderExport/FolderExport.cs:292
msgid "Error While Transferring"
msgstr "Napaka med prenosom"
#: ../extensions/Exporters/CDExport/CDExport.cs:250
-#: ../extensions/Exporters/FolderExport/FolderExport.cs:311
+#: ../extensions/Exporters/FolderExport/FolderExport.cs:278
msgid "Error Transferring"
msgstr "Napaka prenosa"
@@ -84,7 +112,7 @@ msgstr "<b>Fotografije za peko</b>"
#: ../extensions/Exporters/FolderExport/FolderExport.glade.h:7
#: ../extensions/Exporters/GalleryExport/GalleryExport.glade.h:7
#: ../extensions/Exporters/SmugMugExport/SmugMugExport.glade.h:5
-#: ../src/f-spot.glade.h:28
+#: ../src/f-spot.glade.h:20
msgid "Autorotate"
msgstr "Samodejno vrtenje"
@@ -93,7 +121,7 @@ msgid "Create CD"
msgstr "Ustvari CD"
#: ../extensions/Exporters/CDExport/CDExport.ui.h:5
-#: ../src/Widgets/InfoBox.cs:221
+#: ../src/Widgets/InfoBox.cs:222
msgid "Size"
msgstr "Velikost"
@@ -112,7 +140,7 @@ msgstr "_Brskaj po datotekah, ki so bile v razporedu"
#: ../extensions/Exporters/PicasaWebExport/PicasaWebExport.glade.h:20
#: ../extensions/Exporters/SmugMugExport/SmugMugExport.glade.h:12
#: ../extensions/Exporters/TabbloExport/ui/TabbloExport.ui.h:9
-#: ../src/f-spot.glade.h:95
+#: ../src/f-spot.glade.h:66
msgid "_Export"
msgstr "_Izvozi"
@@ -138,36 +166,28 @@ msgstr ""
"\n"
"Ko bo Facebook zahteval vrnitev k programu, kliknite \"v redu\"."
-#: ../extensions/Exporters/FacebookExport/FacebookExport.cs:280
+#: ../extensions/Exporters/FacebookExport/FacebookExport.cs:281
msgid "Too many images to export"
msgstr "Določenih je preveč slik za izvoz"
-#: ../extensions/Exporters/FacebookExport/FacebookExport.cs:281
+#: ../extensions/Exporters/FacebookExport/FacebookExport.cs:282
#, csharp-format
msgid "Facebook only permits {0} photographs per album. Please refine your selection and try again."
msgstr "Facebook omogoča le {0} fotografij na album. Treba je izpopolniti izbiro in poskusiti ponovno. "
-#: ../extensions/Exporters/FacebookExport/FacebookExport.cs:298
-#: ../extensions/Exporters/FlickrExport/FlickrExport.cs:475
-#: ../extensions/Exporters/GalleryExport/GalleryExport.cs:730
-#: ../extensions/Exporters/PicasaWebExport/PicasaWebExport.cs:597
-#: ../extensions/Exporters/SmugMugExport/SmugMugExport.cs:522
-msgid "Uploading Pictures"
-msgstr "Nalaganje slik"
-
-#: ../extensions/Exporters/FacebookExport/FacebookExport.cs:319
+#: ../extensions/Exporters/FacebookExport/FacebookExport.cs:297
msgid "Album must have a name"
msgstr "Album mora imeti ime"
-#: ../extensions/Exporters/FacebookExport/FacebookExport.cs:320
+#: ../extensions/Exporters/FacebookExport/FacebookExport.cs:298
msgid "Please name your album or choose an existing album."
msgstr "Treba je poimenovati album ali izbrati obstoječi album."
-#: ../extensions/Exporters/FacebookExport/FacebookExport.cs:334
+#: ../extensions/Exporters/FacebookExport/FacebookExport.cs:312
msgid "Creating a new album failed"
msgstr "Ustvarjanje novega albuma je spodletelo"
-#: ../extensions/Exporters/FacebookExport/FacebookExport.cs:335
+#: ../extensions/Exporters/FacebookExport/FacebookExport.cs:313
#, csharp-format
msgid ""
"An error occurred creating a new album.\n"
@@ -178,45 +198,53 @@ msgstr ""
"\n"
"{0}"
-#: ../extensions/Exporters/FacebookExport/FacebookExport.cs:357
-#: ../extensions/Exporters/PicasaWebExport/PicasaWebExport.cs:660
+#: ../extensions/Exporters/FacebookExport/FacebookExport.cs:326
+#: ../extensions/Exporters/FlickrExport/FlickrExport.cs:476
+#: ../extensions/Exporters/GalleryExport/GalleryExport.cs:730
+#: ../extensions/Exporters/PicasaWebExport/PicasaWebExport.cs:598
+#: ../extensions/Exporters/SmugMugExport/SmugMugExport.cs:522
+msgid "Uploading Pictures"
+msgstr "Nalaganje slik"
+
+#: ../extensions/Exporters/FacebookExport/FacebookExport.cs:354
+#: ../extensions/Exporters/PicasaWebExport/PicasaWebExport.cs:661
#: ../extensions/Exporters/SmugMugExport/SmugMugExport.cs:565
#, csharp-format
msgid "Uploading picture \"{0}\" ({1} of {2})"
msgstr "Nalaganje slike \"{0}\" ({1} od {2})"
-#: ../extensions/Exporters/FacebookExport/FacebookExport.cs:371
+#: ../extensions/Exporters/FacebookExport/FacebookExport.cs:368
#, csharp-format
msgid "Error Uploading To Facebook: {0}"
msgstr "Napaka med nalaganjem na Facebook: {0}"
-#: ../extensions/Exporters/FacebookExport/FacebookExport.cs:372
-#: ../extensions/Exporters/FlickrExport/FlickrExport.cs:370
-#: ../extensions/Exporters/FolderExport/FolderExport.cs:250
+#: ../extensions/Exporters/FacebookExport/FacebookExport.cs:369
+#: ../extensions/Exporters/FlickrExport/FlickrExport.cs:371
+#: ../extensions/Exporters/FolderExport/FolderExport.cs:226
#: ../extensions/Exporters/GalleryExport/GalleryExport.cs:797
-#: ../extensions/Exporters/PicasaWebExport/PicasaWebExport.cs:693
+#: ../extensions/Exporters/PicasaWebExport/PicasaWebExport.cs:694
#: ../extensions/Exporters/SmugMugExport/SmugMugExport.cs:596
#: ../extensions/Exporters/TabbloExport/TabbloExport.cs:319
msgid "Error"
msgstr "Napaka"
-#: ../extensions/Exporters/FacebookExport/FacebookExport.cs:382
-#: ../extensions/Exporters/FlickrExport/FlickrExport.cs:381
+#: ../extensions/Exporters/FacebookExport/FacebookExport.cs:379
+#: ../extensions/Exporters/FlickrExport/FlickrExport.cs:382
#: ../extensions/Exporters/GalleryExport/GalleryExport.cs:808
-#: ../extensions/Exporters/PicasaWebExport/PicasaWebExport.cs:706
+#: ../extensions/Exporters/PicasaWebExport/PicasaWebExport.cs:707
#: ../extensions/Exporters/SmugMugExport/SmugMugExport.cs:609
msgid "Upload Complete"
msgstr "Pošiljanje je končano"
-#: ../extensions/Exporters/FacebookExport/FacebookExport.cs:385
+#: ../extensions/Exporters/FacebookExport/FacebookExport.cs:382
msgid "Visit F-Spot group on Facebook"
msgstr "Obisk skupine F-Spot na Facebook"
-#: ../extensions/Exporters/FacebookExport/FacebookExportDialog.cs:211
+#: ../extensions/Exporters/FacebookExport/FacebookExportDialog.cs:212
msgid "Waiting for authentication"
msgstr "Čakanje na overitev"
-#: ../extensions/Exporters/FacebookExport/FacebookExportDialog.cs:212
+#: ../extensions/Exporters/FacebookExport/FacebookExportDialog.cs:213
msgid ""
"F-Spot will now launch your browser so that you can log into Facebook.\n"
"\n"
@@ -226,35 +254,35 @@ msgstr ""
"\n"
"Ko vas Facebook usmeri v vrnitev v ta program, kliknite \"Ok\" spodaj. F-Spot bo, če bo mogoče, vašo sejo shranil v gnome-keyring in jo ponovno uporabil pri prihodnjih izvozih v Facebook"
-#: ../extensions/Exporters/FacebookExport/FacebookExportDialog.cs:217
+#: ../extensions/Exporters/FacebookExport/FacebookExportDialog.cs:218
msgid "Authenticating..."
msgstr "Overjanje ..."
-#: ../extensions/Exporters/FacebookExport/FacebookExportDialog.cs:227
+#: ../extensions/Exporters/FacebookExport/FacebookExportDialog.cs:228
msgid "Error logging into Facebook"
msgstr "Napaka med prijavljanjem v Facebook"
-#: ../extensions/Exporters/FacebookExport/FacebookExportDialog.cs:228
+#: ../extensions/Exporters/FacebookExport/FacebookExportDialog.cs:229
msgid "There was a problem logging into Facebook. Check your credentials and try again."
msgstr "Prišlo je do težav med prijavljanjem v Facebook. Preverite vaše geslo in poskusite ponovno. "
-#: ../extensions/Exporters/FacebookExport/FacebookExportDialog.cs:237
+#: ../extensions/Exporters/FacebookExport/FacebookExportDialog.cs:238
msgid "Authorizing Session"
msgstr "Pooblaščanje seje"
-#: ../extensions/Exporters/FacebookExport/FacebookExportDialog.cs:246
+#: ../extensions/Exporters/FacebookExport/FacebookExportDialog.cs:247
msgid "Session established, fetching user info..."
msgstr "Seja zagnana, pridobivanje podrobnosti o uporabniku ..."
-#: ../extensions/Exporters/FacebookExport/FacebookExportDialog.cs:252
+#: ../extensions/Exporters/FacebookExport/FacebookExportDialog.cs:253
msgid "Session established, fetching friend list..."
msgstr "Seja zagnana, pridobivanje seznama prijateljev ..."
-#: ../extensions/Exporters/FacebookExport/FacebookExportDialog.cs:262
+#: ../extensions/Exporters/FacebookExport/FacebookExportDialog.cs:263
msgid "Session established, fetching friend details..."
msgstr "Seja zagnana, pridobivanje podrobnosti o prijateljih ..."
-#: ../extensions/Exporters/FacebookExport/FacebookExportDialog.cs:272
+#: ../extensions/Exporters/FacebookExport/FacebookExportDialog.cs:275
msgid "Session established, fetching photo albums..."
msgstr "Seja zagnana, pridobivanje albumov fotografij ..."
@@ -264,11 +292,11 @@ msgstr "Seja zagnana, pridobivanje albumov fotografij ..."
msgid "{0} {1} is logged into Facebook"
msgstr "{0} {1} je prijavljen v Facebook"
-#: ../extensions/Exporters/FacebookExport/FacebookExportDialog.cs:291
+#: ../extensions/Exporters/FacebookExport/FacebookExportDialog.cs:294
msgid "Facebook Connection Error"
msgstr "Napaka povezovanja s Facebook-om"
-#: ../extensions/Exporters/FacebookExport/FacebookExportDialog.cs:292
+#: ../extensions/Exporters/FacebookExport/FacebookExportDialog.cs:295
#, csharp-format
msgid ""
"There was an error when downloading your information from Facebook.\n"
@@ -279,7 +307,7 @@ msgstr ""
"\n"
"Javljena napaka: {0}"
-#: ../extensions/Exporters/FacebookExport/FacebookExportDialog.cs:321
+#: ../extensions/Exporters/FacebookExport/FacebookExportDialog.cs:324
msgid "You are not logged in."
msgstr "Niste prijavljeni."
@@ -321,7 +349,7 @@ msgid "Logout"
msgstr "Odjava"
#: ../extensions/Exporters/FacebookExport/FacebookExport.ui.h:10
-#: ../src/Widgets/InfoBox.cs:212
+#: ../src/Widgets/InfoBox.cs:213
msgid "Name"
msgstr "Ime"
@@ -357,76 +385,74 @@ msgstr "_Flickr ..."
msgid "_Zooomr..."
msgstr "_Zooomr ..."
-#: ../extensions/Exporters/FlickrExport/FlickrExport.cs:105
+#: ../extensions/Exporters/FlickrExport/FlickrExport.cs:106
#: ../extensions/Exporters/FlickrExport/FlickrExport.glade.h:5
msgid "Authorize"
msgstr "Pooblasti"
-#: ../extensions/Exporters/FlickrExport/FlickrExport.cs:111
+#: ../extensions/Exporters/FlickrExport/FlickrExport.cs:112
#, csharp-format
msgid "Return to this window after you have finished the authorization process on {0} and click the \"Complete Authorization\" button below"
msgstr "Po končanem postopku pooblastitve na {0} se je treba vrniti v to okno in klikniti gumb \"Končanje pooblastitve\" spodaj"
-#: ../extensions/Exporters/FlickrExport/FlickrExport.cs:112
+#: ../extensions/Exporters/FlickrExport/FlickrExport.cs:113
msgid "Complete Authorization"
msgstr "Končanje pooblastitve"
-#: ../extensions/Exporters/FlickrExport/FlickrExport.cs:117
+#: ../extensions/Exporters/FlickrExport/FlickrExport.cs:118
#, csharp-format
msgid "Logging into {0}"
msgstr "Prijavljanje v {0}"
-#: ../extensions/Exporters/FlickrExport/FlickrExport.cs:118
+#: ../extensions/Exporters/FlickrExport/FlickrExport.cs:119
msgid "Checking credentials..."
msgstr "Preverjanje gesla ..."
-#: ../extensions/Exporters/FlickrExport/FlickrExport.cs:125
+#: ../extensions/Exporters/FlickrExport/FlickrExport.cs:126
#, csharp-format
msgid "Welcome {0} you are connected to {1}"
msgstr "Dobrodošli {0}, povezani ste na {1}"
-#: ../extensions/Exporters/FlickrExport/FlickrExport.cs:128
+#: ../extensions/Exporters/FlickrExport/FlickrExport.cs:129
#, csharp-format
msgid "Sign in as a different user"
msgstr "Vpis kot drug uporabnik"
-#: ../extensions/Exporters/FlickrExport/FlickrExport.cs:133
+#: ../extensions/Exporters/FlickrExport/FlickrExport.cs:134
#, csharp-format
msgid "Used {0} of your allowed {1} monthly quota"
msgstr "Uporabljene {0} dovoljene {1} mesečne kvote."
-#: ../extensions/Exporters/FlickrExport/FlickrExport.cs:297
+#: ../extensions/Exporters/FlickrExport/FlickrExport.cs:298
msgid "Unable to log on"
msgstr "Ni se mogoče prijaviti"
-#: ../extensions/Exporters/FlickrExport/FlickrExport.cs:317
+#: ../extensions/Exporters/FlickrExport/FlickrExport.cs:318
#, csharp-format
msgid "Waiting for response {0} of {1}"
msgstr "Čakanje na odziv {0} od {1}"
-#: ../extensions/Exporters/FlickrExport/FlickrExport.cs:344
-#: ../extensions/Exporters/FolderExport/FolderExport.cs:242
+#: ../extensions/Exporters/FlickrExport/FlickrExport.cs:345
#: ../extensions/Exporters/GalleryExport/GalleryExport.cs:777
#, csharp-format
msgid "Uploading picture \"{0}\""
msgstr "Nalaganje slike \"{0}\""
-#: ../extensions/Exporters/FlickrExport/FlickrExport.cs:367
+#: ../extensions/Exporters/FlickrExport/FlickrExport.cs:368
#, csharp-format
msgid "Error Uploading To {0}: {1}"
msgstr "Napaka med nalaganjem k {0}: {1}"
-#: ../extensions/Exporters/FlickrExport/FlickrExport.cs:454
+#: ../extensions/Exporters/FlickrExport/FlickrExport.cs:455
msgid "Unable to log on."
msgstr "Ni se mogoče prijaviti."
-#: ../extensions/Exporters/FlickrExport/FlickrExport.cs:455
+#: ../extensions/Exporters/FlickrExport/FlickrExport.cs:456
#, csharp-format
msgid "F-Spot was unable to log on to {0}. Make sure you have given the authentication using {0} web browser interface."
msgstr "Ni se mogoče prijaviti na {0}. Prepričajte se, da ste dali pooblastitev z uporabno {0} vmesnika spletnega brskalnika."
#: ../extensions/Exporters/FlickrExport/FlickrExport.glade.h:1
-#: ../src/f-spot.glade.h:8
msgid "<b>Account</b>"
msgstr "<b>Račun</b>"
@@ -436,7 +462,7 @@ msgstr "<b>Račun</b>"
#: ../extensions/Exporters/PicasaWebExport/PicasaWebExport.glade.h:2
#: ../extensions/Exporters/SmugMugExport/SmugMugExport.glade.h:2
#: ../extensions/Exporters/TabbloExport/ui/TabbloExport.ui.h:2
-#: ../src/f-spot.glade.h:14
+#: ../src/f-spot.glade.h:8
#: ../src/UI.Dialog/ui/AdjustTimeDialog.ui.h:5
msgid "<b>Photos</b>"
msgstr "<b>Fotografije</b>"
@@ -446,7 +472,7 @@ msgstr "<b>Fotografije</b>"
#: ../extensions/Exporters/GalleryExport/GalleryExport.glade.h:4
#: ../extensions/Exporters/PicasaWebExport/PicasaWebExport.glade.h:4
#: ../extensions/Exporters/SmugMugExport/SmugMugExport.glade.h:4
-#: ../src/f-spot.glade.h:16
+#: ../src/f-spot.glade.h:10
msgid "<b>Style</b>"
msgstr "<b>Slog</b>"
@@ -459,7 +485,6 @@ msgstr "<b>Dovoljenja za ogled</b>"
#: ../extensions/Exporters/PicasaWebExport/PicasaWebExport.glade.h:9
#: ../extensions/Exporters/SmugMugExport/SmugMugExport.glade.h:6
#: ../extensions/Exporters/TabbloExport/ui/TabbloExport.ui.h:5
-#: ../src/f-spot.glade.h:44
msgid "Export"
msgstr "Izvoz"
@@ -497,7 +522,6 @@ msgstr "Vidno prijateljem"
#: ../extensions/Exporters/FlickrExport/FlickrExport.glade.h:16
#: ../extensions/Exporters/PicasaWebExport/PicasaWebExport.glade.h:21
-#: ../src/f-spot.glade.h:96
msgid "_Export tags"
msgstr "Izvoz znač_k"
@@ -506,7 +530,6 @@ msgstr "Izvoz znač_k"
#: ../extensions/Exporters/GalleryExport/GalleryExport.glade.h:21
#: ../extensions/Exporters/PicasaWebExport/PicasaWebExport.glade.h:25
#: ../extensions/Exporters/SmugMugExport/SmugMugExport.glade.h:15
-#: ../src/f-spot.glade.h:109
msgid "_Resize to: "
msgstr "Sp_rememba velikosti v:"
@@ -519,7 +542,6 @@ msgstr "Ogled fotografij _v brskalniku po končanem nalaganju"
#: ../extensions/Exporters/GalleryExport/GalleryExport.glade.h:24
#: ../extensions/Exporters/PicasaWebExport/PicasaWebExport.glade.h:27
#: ../extensions/Exporters/SmugMugExport/SmugMugExport.glade.h:17
-#: ../src/f-spot.glade.h:125
msgid "pixels"
msgstr "točke"
@@ -527,82 +549,99 @@ msgstr "točke"
msgid "F_older..."
msgstr "_Mapa ..."
-#: ../extensions/Exporters/FolderExport/FolderExport.cs:140
+#: ../extensions/Exporters/FolderExport/FolderExport.cs:120
msgid "Select Export Folder"
msgstr "Izbor mape za izvoz"
-#: ../extensions/Exporters/FolderExport/FolderExport.cs:198
+#: ../extensions/Exporters/FolderExport/FolderExport.cs:173
msgid "Building Gallery"
msgstr "Gradnja Galerije"
-#: ../extensions/Exporters/FolderExport/FolderExport.cs:248
+#: ../extensions/Exporters/FolderExport/FolderExport.cs:217
#, csharp-format
-msgid "Error uploading picture \"{0}\" to Gallery:{2}{1}"
-msgstr "Napaka med nalaganjem slike \"{0}\" v galerijo: {2}{1}"
+msgid "Exporting \"{0}\"..."
+msgstr "Izvažanje \"{0}\" ..."
-#: ../extensions/Exporters/FolderExport/FolderExport.cs:333
-msgid "Error: Error while transferring; Aborting"
-msgstr "Napaka: napaka med prenosom; preklicano"
+#: ../extensions/Exporters/FolderExport/FolderExport.cs:224
+#, csharp-format
+msgid "Error Copying \"{0}\" to Gallery:{2}{1}"
+msgstr "Napaka med kopiranjem \"{0} v Galerijo: {2}{1}"
+
+#: ../extensions/Exporters/FolderExport/FolderExport.cs:250
+#, csharp-format
+msgid "Transferring to \"{0}\""
+msgstr "Prenašanje na \"{0}\""
+
+#: ../extensions/Exporters/FolderExport/FolderExport.cs:251
+msgid "Transferring..."
+msgstr "Prenašanje ..."
-#: ../extensions/Exporters/FolderExport/FolderExport.cs:336
-msgid "Error: File Already Exists; Aborting"
-msgstr "Napaka: datoteka že obstaja; preklicano"
+#. No need to check result here as if result is not true, an Exception will be thrown before
+#: ../extensions/Exporters/FolderExport/FolderExport.cs:256
+msgid "Export Complete."
+msgstr "Izvoz je končan."
+
+#: ../extensions/Exporters/FolderExport/FolderExport.cs:258
+msgid "Exporting Photos Completed."
+msgstr "Izvažanje fotografij je končano."
+
+#: ../extensions/Exporters/FolderExport/FolderExport.cs:325
+msgid "Exporting Photos"
+msgstr "Izvažanje fotografij"
#. Note for translators: light as clear, opposite as dark
-#: ../extensions/Exporters/FolderExport/FolderExport.cs:807
+#: ../extensions/Exporters/FolderExport/FolderExport.cs:743
msgid "Light"
msgstr "Svetlo"
-#: ../extensions/Exporters/FolderExport/FolderExport.cs:808
+#: ../extensions/Exporters/FolderExport/FolderExport.cs:744
msgid "Dark"
msgstr "Temno"
#. Abbreviation of previous
-#: ../extensions/Exporters/FolderExport/FolderExport.cs:988
+#: ../extensions/Exporters/FolderExport/FolderExport.cs:924
msgid "Prev"
msgstr "Predhodni"
-#: ../extensions/Exporters/FolderExport/FolderExport.cs:990
-#: ../extensions/Exporters/FolderExport/FolderExport.cs:1231
-#: ../src/CameraFileSelectionDialog.cs:82
+#: ../extensions/Exporters/FolderExport/FolderExport.cs:926
+#: ../extensions/Exporters/FolderExport/FolderExport.cs:1167
msgid "Index"
msgstr "Kazalo"
#. Don't care otherwise, Tags sounds reasonable
-#: ../extensions/Exporters/FolderExport/FolderExport.cs:993
-#: ../extensions/Exporters/FolderExport/FolderExport.cs:1165
-#: ../extensions/Exporters/FolderExport/FolderExport.cs:1205
-#: ../src/MainWindow.cs:376
+#: ../extensions/Exporters/FolderExport/FolderExport.cs:929
+#: ../extensions/Exporters/FolderExport/FolderExport.cs:1101
+#: ../extensions/Exporters/FolderExport/FolderExport.cs:1141
+#: ../src/MainWindow.cs:357
#: ../src/Widgets/Sidebar.cs:56
msgid "Tags"
msgstr "Oznake"
-#: ../extensions/Exporters/FolderExport/FolderExport.cs:996
-#: ../src/f-spot.glade.h:58
+#: ../extensions/Exporters/FolderExport/FolderExport.cs:932
#: ../src/ItemAction.cs:102
msgid "Next"
msgstr "Naslednja"
-#: ../extensions/Exporters/FolderExport/FolderExport.cs:1100
+#: ../extensions/Exporters/FolderExport/FolderExport.cs:1036
msgid "Gallery generated by"
msgstr "Galerija ustvarjena od"
-#: ../extensions/Exporters/FolderExport/FolderExport.cs:1140
+#: ../extensions/Exporters/FolderExport/FolderExport.cs:1076
msgid "Show Styles"
msgstr "Pokaži sloge"
-#: ../extensions/Exporters/FolderExport/FolderExport.cs:1141
+#: ../extensions/Exporters/FolderExport/FolderExport.cs:1077
msgid "Hide Styles"
msgstr "Skrij sloge"
-#: ../extensions/Exporters/FolderExport/FolderExport.cs:1176
-#: ../extensions/Exporters/FolderExport/FolderExport.cs:1177
-#: ../src/ui/main_window.ui.h:24
+#: ../extensions/Exporters/FolderExport/FolderExport.cs:1112
+#: ../extensions/Exporters/FolderExport/FolderExport.cs:1113
+#: ../src/ui/main_window.ui.h:25
msgid "Tags: "
msgstr "Oznake:"
-#: ../extensions/Exporters/FolderExport/FolderExport.cs:1308
-#: ../extensions/Exporters/FolderExport/FolderExport.cs:1441
+#: ../extensions/Exporters/FolderExport/FolderExport.cs:1244
+#: ../extensions/Exporters/FolderExport/FolderExport.cs:1377
msgid "Page:"
msgstr "Stran:"
@@ -611,7 +650,6 @@ msgid "\n"
msgstr "\n"
#: ../extensions/Exporters/FolderExport/FolderExport.glade.h:3
-#: ../src/f-spot.glade.h:11
msgid "<b>Destination</b>"
msgstr "<b>Cilj</b>"
@@ -659,11 +697,15 @@ msgstr "_Mapa:"
msgid "_Save the files only"
msgstr "_Shrani le datoteke"
+#: ../extensions/Exporters/GalleryExport/FormClient.cs:294
+msgid "Unhandled exception"
+msgstr "Nesprejeta napaka"
+
#: ../extensions/Exporters/GalleryExport/GalleryExport.addin.xml.h:1
msgid "Web _Gallery..."
msgstr "Spletno _Galerijo ..."
-#: ../extensions/Exporters/GalleryExport/GalleryExport.cs:52
+#: ../extensions/Exporters/GalleryExport/GalleryExport.cs:53
msgid ""
"Cannot connect to a Gallery for which the version is unknown.\n"
"Please check that you have Remote plugin 1.0.8 or later"
@@ -723,25 +765,25 @@ msgid "Error uploading picture \"{0}\" to Gallery: {1}"
msgstr "Napaka med nalaganjem slike \"{0}\" v galerijo: {1}"
#: ../extensions/Exporters/GalleryExport/GalleryExport.cs:824
-#: ../extensions/Exporters/PicasaWebExport/PicasaWebExport.cs:727
+#: ../extensions/Exporters/PicasaWebExport/PicasaWebExport.cs:728
#: ../extensions/Exporters/SmugMugExport/SmugMugExport.cs:630
msgid "(No Gallery)"
msgstr "(Ni Galerije)"
#: ../extensions/Exporters/GalleryExport/GalleryExport.cs:916
-#: ../extensions/Exporters/PicasaWebExport/PicasaWebExport.cs:849
+#: ../extensions/Exporters/PicasaWebExport/PicasaWebExport.cs:850
#: ../extensions/Exporters/SmugMugExport/SmugMugExport.cs:726
msgid "(Not Connected)"
msgstr "(Ni Povezave)"
#: ../extensions/Exporters/GalleryExport/GalleryExport.cs:917
-#: ../extensions/Exporters/PicasaWebExport/PicasaWebExport.cs:850
+#: ../extensions/Exporters/PicasaWebExport/PicasaWebExport.cs:851
#: ../extensions/Exporters/SmugMugExport/SmugMugExport.cs:727
msgid "(No Albums)"
msgstr "(Ni Albumov)"
#: ../extensions/Exporters/GalleryExport/GalleryExport.cs:969
-#: ../extensions/Exporters/PicasaWebExport/PicasaWebExport.cs:915
+#: ../extensions/Exporters/PicasaWebExport/PicasaWebExport.cs:916
#: ../extensions/Exporters/SmugMugExport/SmugMugExport.cs:768
msgid "No account selected"
msgstr "Noben račun ni bil izbran"
@@ -749,12 +791,10 @@ msgstr "Noben račun ni bil izbran"
#: ../extensions/Exporters/GalleryExport/GalleryExport.glade.h:1
#: ../extensions/Exporters/PicasaWebExport/PicasaWebExport.glade.h:1
#: ../extensions/Exporters/SmugMugExport/SmugMugExport.glade.h:1
-#: ../src/f-spot.glade.h:9
msgid "<b>Album</b>"
msgstr "<b>Album</b>"
#: ../extensions/Exporters/GalleryExport/GalleryExport.glade.h:2
-#: ../src/f-spot.glade.h:12
msgid "<b>Gallery</b>"
msgstr "<b>Galerija</b>"
@@ -795,7 +835,6 @@ msgstr "O_pis:"
#: ../extensions/Exporters/GalleryExport/GalleryExport.glade.h:16
#: ../extensions/Exporters/PicasaWebExport/PicasaWebExport.glade.h:22
#: ../extensions/Exporters/SmugMugExport/SmugMugExport.glade.h:13
-#: ../src/f-spot.glade.h:97
msgid "_Export to Album:"
msgstr "Iz_voz v album:"
@@ -830,20 +869,20 @@ msgstr "_Naslov:"
msgid "_Username:"
msgstr "_Uporabniško ime:"
-#: ../extensions/Exporters/GalleryExport/GalleryRemote.cs:361
+#: ../extensions/Exporters/GalleryExport/GalleryRemote.cs:362
msgid "Error reading server response"
msgstr "Napaka med branjem odziva strežnika"
#. failed to find the response
-#: ../extensions/Exporters/GalleryExport/GalleryRemote.cs:373
+#: ../extensions/Exporters/GalleryExport/GalleryRemote.cs:374
msgid "Server returned response without Gallery content"
msgstr "Strežnik je vrnil odgovor brez vsebine Galerije"
-#: ../extensions/Exporters/GalleryExport/GalleryRemote.cs:710
+#: ../extensions/Exporters/GalleryExport/GalleryRemote.cs:711
msgid "Error while creating new album"
msgstr "Napaka med ustvarjanjem novega albuma"
-#: ../extensions/Exporters/GalleryExport/GalleryRemote.cs:711
+#: ../extensions/Exporters/GalleryExport/GalleryRemote.cs:712
#, csharp-format
msgid ""
"The following error was encountered while attempting to perform the requested operation:\n"
@@ -856,37 +895,37 @@ msgstr ""
msgid "_PicasaWeb..."
msgstr "_PicasaWeb ..."
-#: ../extensions/Exporters/PicasaWebExport/PicasaWebExport.cs:441
+#: ../extensions/Exporters/PicasaWebExport/PicasaWebExport.cs:442
msgid "Error while creating Album"
msgstr "Napaka med ustvarjanjem albuma"
-#: ../extensions/Exporters/PicasaWebExport/PicasaWebExport.cs:442
+#: ../extensions/Exporters/PicasaWebExport/PicasaWebExport.cs:443
#, csharp-format
msgid "The following error was encountered while attempting to create an album: {0}"
msgstr "Med poskusom ustvarjanja albuma je prišlo do sledeče napake: {0}"
-#: ../extensions/Exporters/PicasaWebExport/PicasaWebExport.cs:620
+#: ../extensions/Exporters/PicasaWebExport/PicasaWebExport.cs:621
#, csharp-format
msgid "{0} Sent"
msgstr "{0} Poslanih"
-#: ../extensions/Exporters/PicasaWebExport/PicasaWebExport.cs:622
+#: ../extensions/Exporters/PicasaWebExport/PicasaWebExport.cs:623
#, csharp-format
msgid "{0} of approx. {1}"
msgstr "{0} od približno {1}"
-#: ../extensions/Exporters/PicasaWebExport/PicasaWebExport.cs:691
+#: ../extensions/Exporters/PicasaWebExport/PicasaWebExport.cs:692
#: ../extensions/Exporters/SmugMugExport/SmugMugExport.cs:594
#, csharp-format
msgid "Error Uploading To Gallery: {0}"
msgstr "Napaka med nalaganjem v Galerijo: {0}"
-#: ../extensions/Exporters/PicasaWebExport/PicasaWebExport.cs:778
+#: ../extensions/Exporters/PicasaWebExport/PicasaWebExport.cs:779
#, csharp-format
msgid "Available space: {0}, {1}% used out of {2}"
msgstr "Prostor na voljo: {0}, uporabljenih {1}% od {2}"
-#: ../extensions/Exporters/PicasaWebExport/PicasaWebExport.cs:891
+#: ../extensions/Exporters/PicasaWebExport/PicasaWebExport.cs:892
#, csharp-format
msgid ""
"The selected album has a limit of {0} pictures,\n"
@@ -1029,7 +1068,7 @@ msgid "Compressed fil_e..."
msgstr "Stisnjena datot_eka ..."
#: ../extensions/Exporters/ZipExport/ZipExport.cs:47
-#: ../src/Widgets/EditorPage.cs:197
+#: ../src/Widgets/EditorPage.cs:198
msgid "No selection available"
msgstr "Na voljo ni nobene izbire"
@@ -1066,6 +1105,10 @@ msgstr "_Mesto:"
msgid "_Scale:"
msgstr "_Merilo:"
+#: ../extensions/Tools/HashJob/HashJob.addin.xml.h:1
+msgid "Check for Duplicates..."
+msgstr "Zaznaj dvojnike ..."
+
#: ../extensions/Tools/HashJob/HashJob.cs:53
msgid "In order to detect duplicates on pictures you imported before 0.5.0, F-Spot needs to analyze your image collection. This is not done by default as it's time consuming. You can Start or Pause this update process using this dialog."
msgstr "Za zaznavanje dvojnikov slik, ki so bile uvožene pred 0.5.0, mora F-spot preučiti zbirko slik. To ni storjeno samodejno, ker vzame veliko časa. S tem pogovornim oknom se lahko postopek posodabljanja zažene ali začasno zaustavi."
@@ -1076,7 +1119,7 @@ msgid "You currently have {0} photos needing md5 calculation, and {1} pending jo
msgstr "Trenutno imate {0} fotografij, ki potrebujejo md5 izračun in {1} čakajočih služb"
#: ../extensions/Tools/HashJob/HashJob.cs:75
-#: ../src/ui/main_window.ui.h:37
+#: ../src/ui/main_window.ui.h:38
msgid "_Close"
msgstr "_Zapri"
@@ -1088,10 +1131,6 @@ msgstr "Obdelava slik ..."
msgid "Stopped"
msgstr "Zaustavljeno"
-#: ../extensions/Tools/HashJob/HashJob.addin.xml.h:1
-msgid "Check for Duplicates..."
-msgstr "Zaznaj dvojnike ..."
-
#: ../extensions/Tools/LiveWebGallery/GalleryRequestHandler.cs:107
msgid "F-Spot Gallery"
msgstr "Galerija F-Spot"
@@ -1126,6 +1165,19 @@ msgstr "Izbrano"
msgid "Live Web Gallery"
msgstr "Živa spletna galerija"
+#: ../extensions/Tools/LiveWebGallery/LiveWebGalleryDialog.cs:89
+msgid "none"
+msgstr "brez"
+
+#: ../extensions/Tools/LiveWebGallery/LiveWebGalleryDialog.cs:92
+#, csharp-format
+msgid " Gallery: {0}, Photos: {1}, Last client: {3}"
+msgstr " Galerija: {0}, fotografij: {1}, zadnji odjemalec: {3}"
+
+#: ../extensions/Tools/LiveWebGallery/LiveWebGalleryDialog.cs:156
+msgid "Gallery is inactive"
+msgstr "Galerija je nedejavna"
+
#: ../extensions/Tools/LiveWebGallery/ui/LiveWebGallery.ui.h:1
msgid ""
"<small><i>The gallery stays active until you either deactivate it or close\n"
@@ -1186,19 +1238,6 @@ msgstr "Souporaba:"
msgid "Views:"
msgstr "Ogledov:"
-#: ../extensions/Tools/LiveWebGallery/LiveWebGalleryDialog.cs:89
-msgid "none"
-msgstr "brez"
-
-#: ../extensions/Tools/LiveWebGallery/LiveWebGalleryDialog.cs:92
-#, csharp-format
-msgid " Gallery: {0}, Photos: {1}, Last client: {3}"
-msgstr " Galerija: {0}, fotografij: {1}, zadnji odjemalec: {3}"
-
-#: ../extensions/Tools/LiveWebGallery/LiveWebGalleryDialog.cs:156
-msgid "Gallery is inactive"
-msgstr "Galerija je nedejavna"
-
#: ../extensions/Tools/MergeDb/MergeDb.addin.xml.h:1
msgid "Merge Db"
msgstr "Združi baze podatkov"
@@ -1271,12 +1310,11 @@ msgid "New Rolls Only"
msgstr "Samo novi zvitki"
#: ../extensions/Tools/MergeDb/MergeDb.glade.h:15
-#: ../src/FileImportBackend.cs:291
-#: ../src/UI.Dialog/ThreadProgressDialog.cs:58
+#: ../src/UI.Dialog/ThreadProgressDialog.cs:57
msgid "Skip"
msgstr "Preskoči"
-#: ../extensions/Tools/MergeDb/PickFolderDialog.cs:33
+#: ../extensions/Tools/MergeDb/PickFolderDialog.cs:34
#, csharp-format
msgid ""
"<big>The database refers to files contained in the <b>{0}</b> folder.\n"
@@ -1314,27 +1352,6 @@ msgstr "Naredi F-spot moj ohranjevalnik zaslona"
msgid "Screensaver Configuration"
msgstr "Nastavitve ohranjevalnika zaslona"
-#: ../f-spot.desktop.in.in.h:1
-#: ../f-spot-import.desktop.in.in.h:1
-#: ../f-spot-view.desktop.in.in.h:1
-#: ../src/ui/main_window.ui.h:10
-msgid "F-Spot"
-msgstr "F-Spot"
-
-#: ../f-spot.desktop.in.in.h:2
-#: ../f-spot-import.desktop.in.in.h:2
-msgid "F-Spot Photo Manager"
-msgstr "F-spot upravljalnik fotografij"
-
-#: ../f-spot.desktop.in.in.h:3
-msgid "Organize, enjoy, and share your photos"
-msgstr "Urejajte, uživajte in delite vaše fotografije."
-
-#: ../f-spot.desktop.in.in.h:4
-#: ../f-spot-import.desktop.in.in.h:4
-msgid "Photo Manager"
-msgstr "Upravljalnik fotografij"
-
#: ../f-spot.schemas.in.h:1
msgid "Display of transparent parts."
msgstr "Prikaži prozorne dele."
@@ -1515,20 +1532,8 @@ msgstr "Y položaj okna pregledovalnika fotografij."
msgid "You can choose how to display transparent parts in images. This option has no effect on photos but setting this value to CHECK_PATTERN or CUSTOM_COLOR could be useful when viewing icons or other artwork with transparent parts."
msgstr "Mogoče je izbrati način prikaza prozornih delov slik. Ta možnost ne vpliva na fotografije, vendar je lahko nastavitev te vrednosti na črtast vzroec ali barva po izbira koristna pri ogledu ikon in ostalih delov grafične podobe s prozornimi deli."
-#: ../f-spot-import.desktop.in.in.h:3
-msgid "Import into F-Spot"
-msgstr "Uvoz v F-Spot"
-
-#: ../f-spot-view.desktop.in.in.h:2
-msgid "F-Spot Photo Viewer"
-msgstr "F-_Spot preledovalnik fotografij"
-
-#: ../f-spot-view.desktop.in.in.h:3
-msgid "Photo Viewer"
-msgstr "Pregledovalnik fotografij"
-
#: ../lib/libfspot/f-jpeg-utils.c:441
-#: ../src/RotateCommand.cs:224
+#: ../src/RotateCommand.cs:211
msgid "File not found"
msgstr "Datoteke ni mogoče najti"
@@ -1541,69 +1546,12 @@ msgstr "Neznana vrsta pretvorbe %d"
msgid "Operation failed"
msgstr "Dejanje ni uspelo"
-#: ../src/CameraFileSelectionDialog.cs:76
-msgid "Preview"
-msgstr "Predogled"
-
-#: ../src/CameraFileSelectionDialog.cs:78
-msgid "Path"
-msgstr "Pot"
-
-#: ../src/CameraFileSelectionDialog.cs:80
-#: ../src/f-spot.glade.h:47
-msgid "File"
-msgstr "Datoteka"
-
-#: ../src/CameraFileSelectionDialog.cs:102
-msgid "Select Tag"
-msgstr "Izbor oznake"
-
-#: ../src/CameraFileSelectionDialog.cs:138
-msgid "Downloading Previews"
-msgstr "Nalaganje predogledov"
-
-#: ../src/CameraFileSelectionDialog.cs:148
-#, csharp-format
-msgid "Downloading Preview of {0}"
-msgstr "Nalaganje predogleda {0}"
-
-#: ../src/CameraFileSelectionDialog.cs:220
-#, csharp-format
-msgid "Copying file {0} of {1}"
-msgstr "Kopiranje datoteke {0} od {1}"
-
-#: ../src/CameraFileSelectionDialog.cs:235
-msgid "Error transferring file"
-msgstr "Napaka med prenosom datoteke"
-
-#: ../src/CameraFileSelectionDialog.cs:244
-msgid "Download Complete"
-msgstr "Prenos končan"
-
-#: ../src/CameraFileSelectionDialog.cs:244
-msgid "Done Copying Files"
-msgstr "Kopiranje datotek končano"
-
-#: ../src/CameraFileSelectionDialog.cs:268
-#, csharp-format
-msgid "Transferring \"{0}\" from camera"
-msgstr "Prenašanje \"{0}\" s fotoaparata"
-
-#: ../src/CameraSelectionDialog.cs:29
-#: ../src/Widgets/InfoBox.cs:231
-msgid "Camera"
-msgstr "Fotoaparat"
-
-#: ../src/CameraSelectionDialog.cs:30
-msgid "Port"
-msgstr "Vrata"
-
-#: ../src/Core/App.cs:278
+#: ../src/Core/App.cs:274
#, csharp-format
msgid "No photos matching {0} found"
msgstr "Fotografije, ki se sklada z {0}, ni bilo mogoče najti"
-#: ../src/Core/App.cs:279
+#: ../src/Core/App.cs:275
#, csharp-format
msgid ""
"The tag \"{0}\" is not applied to any photos. Try adding\n"
@@ -1614,11 +1562,11 @@ msgstr ""
"oznake fotografijam ali izberite drugo značko v\n"
"pogovornem oknu F-Spot možnosti."
-#: ../src/Core/App.cs:283
+#: ../src/Core/App.cs:279
msgid "Search returned no results"
msgstr "Iskanje ni vrnilo rezultatov"
-#: ../src/Core/App.cs:284
+#: ../src/Core/App.cs:280
msgid ""
"The tag F-Spot is looking for does not exist. Try\n"
"selecting a different tag in the F-Spot preference\n"
@@ -1629,16 +1577,11 @@ msgstr ""
"F-Spot možnosti."
#. Note for translators: Reparented is a picture becoming a version of another one
-#: ../src/Core/Photo.cs:473
+#: ../src/Core/Photo.cs:362
msgid "Reparented"
msgstr "Različica slike "
-#: ../src/Core/Photo.cs:473
-#, csharp-format
-msgid "Reparented ({0})"
-msgstr "Različica slike ({0})"
-
-#: ../src/Core/Photo.cs:492
+#: ../src/Core/Photo.cs:378
#, csharp-format
msgid "Modified"
msgid_plural "Modified ({0})"
@@ -1647,20 +1590,20 @@ msgstr[1] "Spremenjena ({0})"
msgstr[2] "Spremenjeni ({0})"
msgstr[3] "Spremenjene ({0})"
-#: ../src/Core/Photo.cs:513
+#: ../src/Core/Photo.cs:401
#, csharp-format
msgid "Modified in {1}"
msgstr "Spremenjena v {1}"
-#: ../src/Core/Photo.cs:513
+#: ../src/Core/Photo.cs:401
#, csharp-format
msgid "Modified in {1} ({0})"
msgstr "Spremenjena v {1} ({0})"
#. Note that the original version is never stored in the photo_versions table in the
#. database.
-#: ../src/Core/Photo.cs:671
-#: ../src/f-spot.glade.h:62
+#: ../src/Core/Photo.cs:571
+#: ../src/f-spot.glade.h:39
msgid "Original"
msgstr "Izvorno"
@@ -1676,43 +1619,43 @@ msgstr "Prilagajanje barv"
msgid "Adjust"
msgstr "Prilagodi"
-#: ../src/Editors/CropEditor.cs:35
+#: ../src/Editors/CropEditor.cs:36
msgid "4 x 3 (Book)"
msgstr "4 x 3 (knjiga)"
-#: ../src/Editors/CropEditor.cs:36
+#: ../src/Editors/CropEditor.cs:37
msgid "4 x 6 (Postcard)"
msgstr "4 x 6 (razglednica)"
-#: ../src/Editors/CropEditor.cs:37
+#: ../src/Editors/CropEditor.cs:38
msgid "5 x 7 (L, 2L)"
msgstr "5 x 7 (L, 2L)"
-#: ../src/Editors/CropEditor.cs:38
+#: ../src/Editors/CropEditor.cs:39
msgid "8 x 10"
msgstr "8 x 10"
-#: ../src/Editors/CropEditor.cs:39
+#: ../src/Editors/CropEditor.cs:40
msgid "Square"
msgstr "Kvadrat"
-#: ../src/Editors/CropEditor.cs:42
+#: ../src/Editors/CropEditor.cs:43
msgid "Crop"
msgstr "Obreži"
-#: ../src/Editors/CropEditor.cs:73
+#: ../src/Editors/CropEditor.cs:74
msgid "Select the area that needs cropping."
msgstr "Izbor območja za obrez"
-#: ../src/Editors/CropEditor.cs:98
+#: ../src/Editors/CropEditor.cs:99
msgid "No Constraint"
msgstr "Brez omejitev"
-#: ../src/Editors/CropEditor.cs:99
+#: ../src/Editors/CropEditor.cs:100
msgid "Same as photo"
msgstr "Enako kot fotografija"
-#: ../src/Editors/CropEditor.cs:104
+#: ../src/Editors/CropEditor.cs:105
msgid "Custom Ratios..."
msgstr "Razmerja velikosti po meri"
@@ -1744,25 +1687,12 @@ msgstr "Mehka izostritev"
msgid "Straighten"
msgstr "Poravnava"
-#: ../src/FileImportBackend.cs:289
-msgid "Import error"
-msgstr "Napaka uvažanja"
-
-#: ../src/FileImportBackend.cs:290
-#, csharp-format
-msgid "Error importing {0}{2}{2}{1}"
-msgstr "Napaka med uvažanjem {0}{2}{2}{1}"
-
#: ../src/Filters/ResizeFilter.cs:70
#: ../src/Filters/SharpFilter.cs:52
#, csharp-format
msgid "No way to save files of type \"{0}\""
msgstr "Ni načina za shranjevanje datotek vrste \"{0}\""
-#: ../src/FormClient.cs:295
-msgid "Unhandled exception"
-msgstr "Nesprejeta napaka"
-
#: ../src/FSpot.addin.xml.h:1
msgid "Copy Photo"
msgstr "Kopiranj fotografijo"
@@ -1776,21 +1706,21 @@ msgid "Open _With"
msgstr "Odpri _z"
#: ../src/FSpot.addin.xml.h:4
-#: ../src/ui/main_window.ui.h:15
+#: ../src/ui/main_window.ui.h:16
msgid "Rem_ove Tag"
msgstr "Ods_trani oznako"
#: ../src/FSpot.addin.xml.h:5
-#: ../src/f-spot.glade.h:69
+#: ../src/f-spot.glade.h:44
#: ../src/SingleView.cs:425
-#: ../src/ui/main_window.ui.h:16
+#: ../src/ui/main_window.ui.h:17
msgid "Rotate _Left"
msgstr "Zavrti _levo"
#: ../src/FSpot.addin.xml.h:6
-#: ../src/f-spot.glade.h:70
+#: ../src/f-spot.glade.h:45
#: ../src/SingleView.cs:426
-#: ../src/ui/main_window.ui.h:17
+#: ../src/ui/main_window.ui.h:18
msgid "Rotate _Right"
msgstr "Zavrti _desno"
@@ -1799,445 +1729,320 @@ msgid "Tools"
msgstr "Orodja"
#: ../src/FSpot.addin.xml.h:8
-#: ../src/ui/main_window.ui.h:32
-msgid "_Attach Tag"
-msgstr "_Pripni oznake"
-
-#: ../src/FSpot.addin.xml.h:9
-#: ../src/ui/main_window.ui.h:41
+#: ../src/ui/main_window.ui.h:42
msgid "_Delete From Drive"
msgstr "Iz_briši z diska"
-#: ../src/FSpot.addin.xml.h:10
-#: ../src/ui/main_window.ui.h:59
+#: ../src/FSpot.addin.xml.h:9
+#: ../src/ui/main_window.ui.h:61
msgid "_Remove From Catalog"
msgstr "_Odstrani iz kataloga"
#: ../src/f-spot.glade.h:1
-msgid " "
-msgstr " "
-
-#: ../src/f-spot.glade.h:2
msgid "1024 px"
msgstr "1024 px"
-#: ../src/f-spot.glade.h:3
+#: ../src/f-spot.glade.h:2
msgid "320 px"
msgstr "320 px"
-#: ../src/f-spot.glade.h:4
+#: ../src/f-spot.glade.h:3
msgid "480 px"
msgstr "480 px"
-#: ../src/f-spot.glade.h:5
+#: ../src/f-spot.glade.h:4
msgid "640 px"
msgstr "640 px"
-#: ../src/f-spot.glade.h:6
+#: ../src/f-spot.glade.h:5
msgid "800 px"
msgstr "800 px"
-#: ../src/f-spot.glade.h:7
-msgid "<b></b>"
-msgstr "<b></b>"
-
-#: ../src/f-spot.glade.h:10
+#: ../src/f-spot.glade.h:6
msgid "<b>Co_rrections</b>"
msgstr "<b>Pop_ravki</b>"
-#: ../src/f-spot.glade.h:13
+#: ../src/f-spot.glade.h:7
msgid "<b>Image Interpolation</b>"
msgstr "<b>Interpolacija slike</b>"
-#: ../src/f-spot.glade.h:15
+#: ../src/f-spot.glade.h:9
msgid "<b>Size</b>"
msgstr "<b>Velikost</b>"
-#: ../src/f-spot.glade.h:17
+#: ../src/f-spot.glade.h:11
msgid "<b>Summary</b>"
msgstr "<b>Povzetek</b>"
-#: ../src/f-spot.glade.h:18
+#: ../src/f-spot.glade.h:12
msgid "<b>Transparent Parts</b>"
msgstr "<b>Prozorni deli</b>"
-#: ../src/f-spot.glade.h:19
+#: ../src/f-spot.glade.h:13
msgid "<b>View all pictures imported</b>"
msgstr "<b>Ogled vseh uvoženih slik</b>"
-#: ../src/f-spot.glade.h:20
+#: ../src/f-spot.glade.h:14
msgid "<b>_White Balance</b>"
msgstr "<b> _Ravnotežje bele barve </b>"
-#: ../src/f-spot.glade.h:21
+#: ../src/f-spot.glade.h:15
msgid "<small><i>Enable this to allow interpolation on zoomed images. You shouldn't disable this for viewing photos, but disabling the interpolation could be usefull in icon design.</i></small>"
msgstr "<small><i>Možnost omogoča interpolacijo približanih slik. Onemogočanje ni priporočeno za ogled fotografij, toda onemogočanje interpolacije bi lahko bilo uporabno pri oblikovanju ikon.</i></small>"
-#: ../src/f-spot.glade.h:22
+#: ../src/f-spot.glade.h:16
msgid "<small><i>You can choose how to display transparent parts in images. This option has no effect on photos, but setting this as check pattern or custom color could be usefull when viewing icons or other artworks with transparent parts.</i></small>"
msgstr "<small><i>Mogoče je izbrati način prikaza prozornih delov slik. Ta možnost ne vpliva na fotografije, vendar je lahko koristna pri ogledu ikon in ostalih delov grafične podobe s prozornimi deli.</i></small>"
-#: ../src/f-spot.glade.h:23
+#: ../src/f-spot.glade.h:17
msgid "As _background"
msgstr "Kot _ozadje"
-#: ../src/f-spot.glade.h:24
+#: ../src/f-spot.glade.h:18
msgid "As _custom color: "
msgstr "Kot barvo _po meri"
-#: ../src/f-spot.glade.h:25
+#: ../src/f-spot.glade.h:19
msgid "As check _pattern"
msgstr "Kot preizkusni _vzorec"
-#: ../src/f-spot.glade.h:26
-msgid "Attach Tags:"
-msgstr "Pripenjanje oznak:"
-
-#: ../src/f-spot.glade.h:27
-msgid "Attach tag:"
-msgstr "Pripenjanje oznake:"
-
-#: ../src/f-spot.glade.h:29
-msgid "CD"
-msgstr "CD"
-
-#: ../src/f-spot.glade.h:30
+#: ../src/f-spot.glade.h:21
msgid "C_ontrast:"
msgstr "K_ontrast:"
-#: ../src/f-spot.glade.h:31
+#: ../src/f-spot.glade.h:22
msgid "C_reate"
msgstr "_CD ..."
-#: ../src/f-spot.glade.h:32
-msgid "Camera Selection"
-msgstr "Izbira fotoaparata"
-
-#: ../src/f-spot.glade.h:33
-msgid "Copy files to the Photos folder"
-msgstr "Kopiranje datotek v mapo fotografij"
-
-#: ../src/f-spot.glade.h:34
+#: ../src/f-spot.glade.h:23
msgid "Create Mail"
msgstr "Ustvari sporočilo"
-#: ../src/f-spot.glade.h:35
+#: ../src/f-spot.glade.h:24
msgid "Create _icon for this tag when first used"
msgstr "Ustvari _ikono za to oznako ob prvi uporabi"
-#: ../src/f-spot.glade.h:36
+#: ../src/f-spot.glade.h:25
msgid "Create a mail with the selected photos (possibly resized) attached"
msgstr "Ustvari sporočilo s pripetimi fotografijami (po možnosti spremenjenih velikosti)"
-#: ../src/f-spot.glade.h:37
-msgid "Detect duplicates"
-msgstr "Zaznavanje dvojnikov"
-
-#: ../src/f-spot.glade.h:38
+#: ../src/f-spot.glade.h:26
msgid "Display File _Names"
msgstr "Prikaz imen _datotek"
-#: ../src/f-spot.glade.h:39
+#: ../src/f-spot.glade.h:27
msgid "Display only those photos that were imported in specified Rolls."
msgstr "Prikaz le tistih fotografij, ki so bile uvožene v določenih zvitkih."
-#: ../src/f-spot.glade.h:40
+#: ../src/f-spot.glade.h:28
msgid "Do not send a mail"
msgstr "Ne pošlji pošte"
-#: ../src/f-spot.glade.h:41
-msgid "E-_Mail:"
-msgstr "_E-pošta:"
-
-#: ../src/f-spot.glade.h:42
-msgid "E_xport titles and comments"
-msgstr "Izvozi _naslove in opombe"
-
-#: ../src/f-spot.glade.h:43
+#: ../src/f-spot.glade.h:29
msgid "Estimated new size"
msgstr "Ocenjena nova velikost"
-#: ../src/f-spot.glade.h:45
+#: ../src/f-spot.glade.h:30
msgid "Extra large"
msgstr "Zelo velika"
-#: ../src/f-spot.glade.h:46
+#: ../src/f-spot.glade.h:31
msgid "F-Spot View"
msgstr "F-Spot pogled"
-#: ../src/f-spot.glade.h:48
+#: ../src/f-spot.glade.h:32
msgid "Filter on selected rolls"
msgstr "Filter na izbranih zvitkih"
-#: ../src/f-spot.glade.h:49
-msgid "G_allery:"
-msgstr "G_alerija:"
-
-#: ../src/f-spot.glade.h:50
-msgid "Gallery"
-msgstr "Galerija"
-
-#: ../src/f-spot.glade.h:51
-#: ../src/ImportCommand.cs:547
-#: ../src/MainWindow.cs:301
-msgid "Import"
-msgstr "Uvozi"
-
-#. Translators: this string means 'source of import'
-#: ../src/f-spot.glade.h:53
-msgid "Import Source:"
-msgstr "Uvozni vir:"
-
-#: ../src/f-spot.glade.h:54
-msgid "Include subfolders"
-msgstr "_Upoštevaj podmape"
-
-#: ../src/f-spot.glade.h:55
+#: ../src/f-spot.glade.h:33
msgid "Large"
msgstr "Velika"
-#: ../src/f-spot.glade.h:56
+#: ../src/f-spot.glade.h:34
msgid "Manage your custom selection ratios"
msgstr "Upravljanje razmerij za izbiranje po meri"
-#: ../src/f-spot.glade.h:57
+#: ../src/f-spot.glade.h:35
msgid "Medium"
msgstr "Srednja"
-#: ../src/f-spot.glade.h:59
+#: ../src/f-spot.glade.h:36
msgid "Number of photos in selected rolls:"
msgstr "Število slik v izbranih zvitkih:"
-#: ../src/f-spot.glade.h:60
+#: ../src/f-spot.glade.h:37
msgid "Number of pictures"
msgstr "Število slik"
-#: ../src/f-spot.glade.h:61
+#: ../src/f-spot.glade.h:38
msgid "Open _Folder..."
msgstr "Odpri _Mapo ..."
-#: ../src/f-spot.glade.h:63
+#: ../src/f-spot.glade.h:40
msgid "Original size (possible very large file size)"
msgstr "Originalna velikost (mogoče zelo velika velikost datotek)"
-#: ../src/f-spot.glade.h:64
+#: ../src/f-spot.glade.h:41
#: ../src/UI.Dialog/ui/EditTagDialog.ui.h:4
msgid "P_arent Tag:"
msgstr "N_adrejena oznaka:"
-#: ../src/f-spot.glade.h:65
-msgid "Pause"
-msgstr "Premor"
-
-#: ../src/f-spot.glade.h:66
+#: ../src/f-spot.glade.h:42
msgid "Preferences"
msgstr "Možnosti"
-#: ../src/f-spot.glade.h:67
-#: ../src/ItemAction.cs:123
-msgid "Previous"
-msgstr "Predhodni"
-
-#: ../src/f-spot.glade.h:68
+#: ../src/f-spot.glade.h:43
msgid "Repair"
msgstr "Popravi"
-#: ../src/f-spot.glade.h:71
-msgid "Select Photos to Copy From Camera..."
-msgstr "Izbor fotografij za kopiranje s fotoaparata"
-
-#: ../src/f-spot.glade.h:72
+#: ../src/f-spot.glade.h:46
msgid "Select a Tag..."
msgstr "Izbor oznake ..."
-#: ../src/f-spot.glade.h:73
-msgid "Select the camera from which you want to transfer files"
-msgstr "Izbor fotoaparata za prenos datotek"
-
-#: ../src/f-spot.glade.h:74
-msgid "Selected Camera: "
-msgstr "Izbran fotoaparat:"
-
-#: ../src/f-spot.glade.h:75
+#: ../src/f-spot.glade.h:47
msgid "Selection Constraints"
msgstr "Izbira omejitev"
-#: ../src/f-spot.glade.h:76
-#: ../src/ui/main_window.ui.h:21
+#: ../src/f-spot.glade.h:48
+#: ../src/ui/main_window.ui.h:22
msgid "Set as _Background"
msgstr "Nastavi kot _ozadje"
-#: ../src/f-spot.glade.h:77
+#: ../src/f-spot.glade.h:49
msgid "Show all photos."
msgstr "Pokaži vseh fotografije."
-#: ../src/f-spot.glade.h:78
+#: ../src/f-spot.glade.h:50
msgid "Show or hide the side pane"
msgstr "Pokaži ali skrij stranski pladenj"
-#: ../src/f-spot.glade.h:79
+#: ../src/f-spot.glade.h:51
msgid "Show or hide the toolbar"
msgstr "Pokaži ali skrij orodno vrstico"
-#: ../src/f-spot.glade.h:80
+#: ../src/f-spot.glade.h:52
msgid "Side _pane"
msgstr "_Stranski pladenj"
-#: ../src/f-spot.glade.h:81
+#: ../src/f-spot.glade.h:53
msgid "Small"
msgstr "Majhna"
-#: ../src/f-spot.glade.h:82
+#: ../src/f-spot.glade.h:54
msgid "Specify if an original size picture should be rotated or not. Smaller sizes are automatically rotated."
msgstr "Določa ali naj bo originalna slika zavrtena ali ne. Manjše velikosti so samodejno zavrtene."
-#: ../src/f-spot.glade.h:83
-msgid "Strip image _metadata"
-msgstr "Odstrani _metapodatke slike"
-
#. Note for translators: meant as Temperature
-#: ../src/f-spot.glade.h:85
+#: ../src/f-spot.glade.h:56
msgid "Te_mp:"
msgstr "Zač_asno:"
-#: ../src/f-spot.glade.h:86
+#: ../src/f-spot.glade.h:57
msgid "Tiny"
msgstr "Drobcena"
-#: ../src/f-spot.glade.h:87
+#: ../src/f-spot.glade.h:58
msgid "Total original size"
msgstr "Skupna osnovna velikost"
-#: ../src/f-spot.glade.h:88
-#: ../src/ui/main_window.ui.h:28
+#: ../src/f-spot.glade.h:59
+#: ../src/ui/main_window.ui.h:29
msgid "Zoom _in"
msgstr "_Približaj"
-#: ../src/f-spot.glade.h:89
-#: ../src/ui/main_window.ui.h:29
+#: ../src/f-spot.glade.h:60
+#: ../src/ui/main_window.ui.h:30
msgid "Zoom _out"
msgstr "_Oddalji"
-#: ../src/f-spot.glade.h:90
-#: ../src/ui/main_window.ui.h:30
+#: ../src/f-spot.glade.h:61
+#: ../src/ui/main_window.ui.h:31
msgid "Zoom in"
msgstr "Približaj"
-#: ../src/f-spot.glade.h:91
-#: ../src/ui/main_window.ui.h:31
+#: ../src/f-spot.glade.h:62
+#: ../src/ui/main_window.ui.h:32
msgid "Zoom out"
msgstr "Oddalji"
-#: ../src/f-spot.glade.h:92
+#: ../src/f-spot.glade.h:63
msgid "_Brightness:"
msgstr "Svet_lost:"
-#: ../src/f-spot.glade.h:93
+#: ../src/f-spot.glade.h:64
msgid "_Create Mail"
msgstr "Ustvari sporočilo"
-#: ../src/f-spot.glade.h:94
-#: ../src/ui/main_window.ui.h:44
+#: ../src/f-spot.glade.h:65
+#: ../src/ui/main_window.ui.h:45
msgid "_Edit"
msgstr "_Uredi"
-#: ../src/f-spot.glade.h:98
+#: ../src/f-spot.glade.h:67
msgid "_Exposure:"
msgstr "Izpos_tavljenost:"
-#: ../src/f-spot.glade.h:99
-msgid "_Flickr"
-msgstr "_Flickr"
-
-#: ../src/f-spot.glade.h:100
-#: ../src/ui/main_window.ui.h:48
+#: ../src/f-spot.glade.h:68
+#: ../src/ui/main_window.ui.h:49
msgid "_Fullscreen"
msgstr "_Celozaslonski način"
-#: ../src/f-spot.glade.h:101
-msgid "_Gallery"
-msgstr "_Galerija"
-
-#: ../src/f-spot.glade.h:102
-#: ../src/ui/main_window.ui.h:49
+#: ../src/f-spot.glade.h:69
+#: ../src/ui/main_window.ui.h:50
msgid "_Help"
msgstr "Po_moč"
-#: ../src/f-spot.glade.h:103
+#: ../src/f-spot.glade.h:70
msgid "_Hue:"
msgstr "_Odtenek:"
-#: ../src/f-spot.glade.h:104
+#: ../src/f-spot.glade.h:71
msgid "_Interpolate image on zoom"
msgstr "_Interpolacija slike pri približanju"
-#: ../src/f-spot.glade.h:105
+#: ../src/f-spot.glade.h:72
msgid "_New Window"
msgstr "_Novo Okno"
-#: ../src/f-spot.glade.h:106
-msgid "_Open album in browser when done uploading"
-msgstr "_Odpri album v brskalniku po končanem nalaganju"
-
-#: ../src/f-spot.glade.h:107
-msgid "_Open destination when done exporting"
-msgstr "_Odpiri cilj po končanem izvozu"
-
-#: ../src/f-spot.glade.h:108
-#: ../src/ui/main_window.ui.h:56
+#: ../src/f-spot.glade.h:73
+#: ../src/ui/main_window.ui.h:58
msgid "_Photo"
msgstr "_Fotografija"
-#: ../src/f-spot.glade.h:110
+#: ../src/f-spot.glade.h:74
msgid "_Saturation:"
msgstr "N_asičenost:"
-#: ../src/f-spot.glade.h:111
-msgid "_Scale photos to no larger than: "
-msgstr "_Spreminjanje velikosti fotografij na ne več kot: "
-
-#: ../src/f-spot.glade.h:112
-#: ../src/ui/main_window.ui.h:67
+#: ../src/f-spot.glade.h:75
+#: ../src/ui/main_window.ui.h:69
msgid "_Slideshow"
msgstr "_Predstavitev"
-#: ../src/f-spot.glade.h:113
-msgid "_Strip metadata"
-msgstr "O_dstrani metapodatke"
-
-#: ../src/f-spot.glade.h:114
+#: ../src/f-spot.glade.h:76
#: ../src/UI.Dialog/ui/EditTagDialog.ui.h:6
msgid "_Tag Name:"
msgstr "Ime _oznake:"
-#: ../src/f-spot.glade.h:115
+#: ../src/f-spot.glade.h:77
msgid "_Tint:"
msgstr "_Črnilo"
-#: ../src/f-spot.glade.h:116
+#: ../src/f-spot.glade.h:78
msgid "_Toolbar"
msgstr "_Orodna vrstica"
-#: ../src/f-spot.glade.h:117
-msgid "_URI:"
-msgstr "_URI:"
-
-#: ../src/f-spot.glade.h:118
-#: ../src/ui/main_window.ui.h:75
+#: ../src/f-spot.glade.h:79
+#: ../src/ui/main_window.ui.h:77
msgid "_View"
msgstr "_Pogled"
-#: ../src/f-spot.glade.h:119
-msgid "_Virtual Filesystem"
-msgstr "_Navidezni datotečni sistem"
-
-#: ../src/f-spot.glade.h:120
+#: ../src/f-spot.glade.h:80
#: ../src/Widgets/FindBar.cs:177
msgid "and"
msgstr "in"
#. at, or after a date, or between dates
-#: ../src/f-spot.glade.h:122
+#: ../src/f-spot.glade.h:82
msgid ""
"at\n"
"after\n"
@@ -2247,42 +2052,38 @@ msgstr ""
"za\n"
"med"
-#: ../src/f-spot.glade.h:126
-msgid "x"
-msgstr "x"
-
-#: ../src/FullScreenView.cs:58
+#: ../src/FullScreenView.cs:59
msgid "Hide"
msgstr "Skrij"
-#: ../src/FullScreenView.cs:60
+#: ../src/FullScreenView.cs:61
msgid "Hide Toolbar"
msgstr "Skrij orodno vrstico"
-#: ../src/FullScreenView.cs:66
+#: ../src/FullScreenView.cs:67
msgid "Info"
msgstr "Podrobnosti"
-#: ../src/FullScreenView.cs:68
-#: ../src/Widgets/InfoBox.cs:201
+#: ../src/FullScreenView.cs:69
+#: ../src/Widgets/InfoBox.cs:202
msgid "Image Information"
msgstr "Podrobnosti o sliki"
-#: ../src/FullScreenView.cs:73
+#: ../src/FullScreenView.cs:74
msgid "Exit fullscreen"
msgstr "Izhod iz celozaslonskega načina"
-#: ../src/FullScreenView.cs:81
-#: ../src/MainWindow.cs:341
-#: ../src/SingleView.cs:88
+#: ../src/FullScreenView.cs:82
+#: ../src/MainWindow.cs:322
+#: ../src/SingleView.cs:89
msgid "Slideshow"
msgstr "Predstavitev"
-#: ../src/FullScreenView.cs:82
+#: ../src/FullScreenView.cs:83
msgid "Start slideshow"
msgstr "Zagon diapredstavitve"
-#: ../src/FullScreenView.cs:128
+#: ../src/FullScreenView.cs:129
msgid "Slide transition:"
msgstr "Prehodi med diapozitivi:"
@@ -2297,35 +2098,35 @@ msgid "More"
msgstr "Več"
#: ../src/GroupSelector.cs:517
-#: ../src/ui/main_window.ui.h:34
+#: ../src/ui/main_window.ui.h:35
msgid "_Clear Date Range"
msgstr "_Čiščenje datumskega območja"
-#: ../src/Imaging/Exif.cs:228
+#: ../src/Imaging/Exif.cs:229
msgid "Image Directory"
msgstr "Mapa slik"
-#: ../src/Imaging/Exif.cs:230
+#: ../src/Imaging/Exif.cs:231
msgid "Thumbnail Directory"
msgstr "Mapa sličic"
-#: ../src/Imaging/Exif.cs:232
+#: ../src/Imaging/Exif.cs:233
msgid "Exif Directory"
msgstr "Exif mapa"
-#: ../src/Imaging/Exif.cs:234
+#: ../src/Imaging/Exif.cs:235
msgid "GPS Directory"
msgstr "GPS mapa"
-#: ../src/Imaging/Exif.cs:236
+#: ../src/Imaging/Exif.cs:237
msgid "InterOperability Directory"
msgstr "Mapa vzajemnega delovanja"
-#: ../src/Imaging/Exif.cs:238
+#: ../src/Imaging/Exif.cs:239
msgid "Unknown Directory"
msgstr "Neznana mapa"
-#: ../src/Imaging/ImageFile.cs:117
+#: ../src/Imaging/ImageFile.cs:119
msgid "Writing to this file format is not supported"
msgstr "Pisanje v to vrsto datoteke ni podprto"
@@ -2454,42 +2255,15 @@ msgstr "Intelektualna zvrst predmeta"
msgid "Unknown IIM DataSet"
msgstr "Neznan IIM niz podatkov"
-#: ../src/ImportCommand.cs:48
-#: ../src/SingleView.cs:344
-msgid "Select Folder"
-msgstr "Izbor mape"
-
-#: ../src/ImportCommand.cs:259
-msgid "(No Cameras Detected)"
-msgstr "(Ni zaznanih fotoaparatov)"
-
-#: ../src/ImportCommand.cs:404
-#, csharp-format
-msgid "Loading {0} of {1}"
-msgstr "Nalaganje {0} od {1}"
-
-#: ../src/ImportCommand.cs:470
-msgid "Done Loading"
-msgstr "Nalaganje končano"
-
-#: ../src/ImportCommand.cs:684
-msgid "Directory does not exist."
-msgstr "Mapa ne obstaja"
-
-#: ../src/ImportCommand.cs:685
-#, csharp-format
-msgid "The directory you selected \"{0}\" does not exist. Please choose a different directory"
-msgstr "Mapa \"{0}\", ki ste jo izbrali, ne obstaja. Izberite drugo mapo."
-
-#: ../src/ImportCommand.cs:738
-#: ../src/ImportCommand.cs:740
+#: ../src/Import/ImportController.cs:408
+#: ../src/Import/ImportController.cs:410
#: ../src/XmpTagsImporter.cs:89
msgid "Imported Tags"
msgstr "Uvožene oznake"
#: ../src/ItemAction.cs:79
-#: ../src/MainWindow.cs:308
-#: ../src/SingleView.cs:71
+#: ../src/MainWindow.cs:289
+#: ../src/SingleView.cs:72
msgid "Rotate Left"
msgstr "Zavrti levo"
@@ -2498,8 +2272,8 @@ msgid "Rotate picture left"
msgstr "Vrtenje slike levo"
#: ../src/ItemAction.cs:91
-#: ../src/MainWindow.cs:312
-#: ../src/SingleView.cs:76
+#: ../src/MainWindow.cs:293
+#: ../src/SingleView.cs:77
msgid "Rotate Right"
msgstr "Zavrti desno"
@@ -2511,73 +2285,73 @@ msgstr "Vrtenje slike desno"
msgid "Next picture"
msgstr "Naslednja slika"
+#: ../src/ItemAction.cs:123
+msgid "Previous"
+msgstr "Predhodni"
+
#: ../src/ItemAction.cs:124
msgid "Previous picture"
msgstr "Predhodna slika"
-#: ../src/MainWindow.cs:303
+#: ../src/MainWindow.cs:282
+#: ../src/UI.Dialog/ImportDialog.cs:171
+msgid "Import"
+msgstr "Uvozi"
+
+#: ../src/MainWindow.cs:284
msgid "Import new images"
msgstr "Uvoz novih slik"
-#: ../src/MainWindow.cs:319
+#: ../src/MainWindow.cs:300
#: ../src/ui/main_window.ui.h:3
msgid "Browse"
msgstr "Prebrskaj"
-#: ../src/MainWindow.cs:323
+#: ../src/MainWindow.cs:304
msgid "Browse many photos simultaneously"
msgstr "Brskanje po več fotografijah hkrati"
-#: ../src/MainWindow.cs:327
+#: ../src/MainWindow.cs:308
msgid "Edit Image"
msgstr "Uredi sliko"
-#: ../src/MainWindow.cs:331
+#: ../src/MainWindow.cs:312
msgid "View and edit a photo"
msgstr "Prikaz in urejanje fotografije"
-#: ../src/MainWindow.cs:336
-#: ../src/SingleView.cs:83
+#: ../src/MainWindow.cs:317
+#: ../src/SingleView.cs:84
msgid "Fullscreen"
msgstr "Celozaslonski način"
-#: ../src/MainWindow.cs:338
-#: ../src/SingleView.cs:85
+#: ../src/MainWindow.cs:319
+#: ../src/SingleView.cs:86
msgid "View photos fullscreen"
msgstr "Celozaslonski ogled fotografij"
-#: ../src/MainWindow.cs:343
-#: ../src/SingleView.cs:90
+#: ../src/MainWindow.cs:324
+#: ../src/SingleView.cs:91
msgid "View photos in a slideshow"
msgstr "Ogled fotografij v diapredstavitvi"
-#: ../src/MainWindow.cs:358
+#: ../src/MainWindow.cs:339
msgid "Previous photo"
msgstr "Predhodna fotografija"
-#: ../src/MainWindow.cs:363
+#: ../src/MainWindow.cs:344
msgid "Next photo"
msgstr "Naslednja fotografija"
-#: ../src/MainWindow.cs:1518
-msgid "No cameras detected."
-msgstr "Noben fotoaparat ni bil zaznan."
-
-#: ../src/MainWindow.cs:1519
-msgid "F-Spot was unable to find any cameras attached to this system. Double check that the camera is connected and has power"
-msgstr "Program F-spot ni zaznal v sistem povezanih fotoaparatov. Dvakrat preverite, ali je fotoaparat povezan in prižgan."
-
-#: ../src/MainWindow.cs:1558
-msgid "Error connecting to camera"
-msgstr "Napaka med povezovanjem s fotoaparatom"
+#: ../src/MainWindow.cs:421
+msgid "Show _Find Bar"
+msgstr "Pokaži is_kalno vrstico"
-#: ../src/MainWindow.cs:1559
-#, csharp-format
-msgid "Received error \"{0}\" while connecting to camera"
-msgstr "Med povezovanjem s fotoaparatom je bila prejeta napaka \"{0}\""
+#: ../src/MainWindow.cs:424
+msgid "Hide _Find Bar"
+msgstr "Skrij _iskalno vrstico"
#. Translators, The singular case will never happen here.
-#: ../src/MainWindow.cs:1846
+#: ../src/MainWindow.cs:1740
#, csharp-format
msgid "Merge the selected tag"
msgid_plural "Merge the {0} selected tags?"
@@ -2586,15 +2360,15 @@ msgstr[1] "Združitev {0} izbrane oznake?"
msgstr[2] "Združitev {0} izbranih oznak?"
msgstr[3] "Združitev {0} izbranih oznak?"
-#: ../src/MainWindow.cs:1873
+#: ../src/MainWindow.cs:1767
msgid "This operation will merge the selected tags and any sub-tags into a single tag."
msgstr "Z dejanjem bodo združene izbrane oznake in morebitne pod-oznake v eno samo oznako."
-#: ../src/MainWindow.cs:1875
+#: ../src/MainWindow.cs:1769
msgid "_Merge Tags"
msgstr "Z_druži oznake"
-#: ../src/MainWindow.cs:2080
+#: ../src/MainWindow.cs:1974
#, csharp-format
msgid "{0} Photo out of {1}"
msgid_plural "{0} Photos out of {1}"
@@ -2603,7 +2377,7 @@ msgstr[1] "{0} fotografija od {1}"
msgstr[2] "{0} fotografiji od {1}"
msgstr[3] "{0} fotografije od {1}"
-#: ../src/MainWindow.cs:2082
+#: ../src/MainWindow.cs:1976
#: ../src/SingleView.cs:467
#, csharp-format
msgid "{0} Photo"
@@ -2613,7 +2387,7 @@ msgstr[1] "{0} Fotografija"
msgstr[2] "{0} Fotografiji"
msgstr[3] "{0} Fotografije"
-#: ../src/MainWindow.cs:2085
+#: ../src/MainWindow.cs:1979
#, csharp-format
msgid " ({0} selected)"
msgid_plural " ({0} selected)"
@@ -2622,25 +2396,25 @@ msgstr[1] " ({0} izbrana)"
msgstr[2] " ({0} izbrani)"
msgstr[3] " ({0} izbrane)"
-#: ../src/MainWindow.cs:2166
+#: ../src/MainWindow.cs:2060
msgid "_Ok"
msgstr "_V redu"
-#: ../src/MainWindow.cs:2167
+#: ../src/MainWindow.cs:2061
msgid "Error Deleting Picture"
msgstr "Napaka med brisanjem slike"
-#: ../src/MainWindow.cs:2172
+#: ../src/MainWindow.cs:2066
#, csharp-format
msgid "No permission to delete the file:{1}{0}"
msgstr "Ni dovoljenj za izbris datoteke:{1}{0}"
-#: ../src/MainWindow.cs:2176
+#: ../src/MainWindow.cs:2070
#, csharp-format
msgid "An error of type {0} occurred while deleting the file:{2}{1}"
msgstr "Med brisanjem datoteke {2} {1} je prišlo do napake vrste {0}"
-#: ../src/MainWindow.cs:2208
+#: ../src/MainWindow.cs:2102
#, csharp-format
msgid "Delete the selected photo permanently?"
msgid_plural "Delete the {0} selected photos permanently?"
@@ -2649,7 +2423,7 @@ msgstr[1] "Ali naj bo trajno izbrisana {0} izbrana fotografija?"
msgstr[2] "Ali naj bosta trajno izbrisani {0} izbrani fotografiji?"
msgstr[3] "Ali naj bodo trajno izbrisane {0} izbrane fotografije?"
-#: ../src/MainWindow.cs:2212
+#: ../src/MainWindow.cs:2106
msgid "This deletes all versions of the selected photo from your drive."
msgid_plural "This deletes all versions of the selected photos from your drive."
msgstr[0] "Izbris vseh različic izbranih fotografij z diska."
@@ -2657,7 +2431,7 @@ msgstr[1] "Izbris vseh različic izbrane fotografije z diska."
msgstr[2] "Izbris vseh različic izbranih fotografij z diska."
msgstr[3] "Izbris vseh različic izbranih fotografij z diska."
-#: ../src/MainWindow.cs:2215
+#: ../src/MainWindow.cs:2109
msgid "_Delete photo"
msgid_plural "_Delete photos"
msgstr[0] "Izbri_ši fotografije"
@@ -2665,7 +2439,7 @@ msgstr[1] "Izbri_ši fotografijo"
msgstr[2] "Izbri_ši fotografiji"
msgstr[3] "Izbri_ši fotografije"
-#: ../src/MainWindow.cs:2251
+#: ../src/MainWindow.cs:2145
#, csharp-format
msgid "Remove the selected photo from F-Spot?"
msgid_plural "Remove the {0} selected photos from F-Spot?"
@@ -2674,25 +2448,25 @@ msgstr[1] "Ali naj se odstrani {0} izbrano fotografijo iz F-Spot ?"
msgstr[2] "Ali naj se odstranita {0} izbrani fotografij iz F-Spot ?"
msgstr[3] "Ali naj se odstranijo {0} izbrane fotografije iz F-Spot ?"
-#: ../src/MainWindow.cs:2256
+#: ../src/MainWindow.cs:2150
msgid "If you remove photos from the F-Spot catalog all tag information will be lost. The photos remain on your computer and can be imported into F-Spot again."
msgstr "Ob odstranjevanju fotografij iz F-Spot kataloga bodo vsi podatki o oznakah izgubljeni. Fotografije bodo ostale na računalniku in jih lahko ponovno uvozite v F-Spot."
-#: ../src/MainWindow.cs:2257
+#: ../src/MainWindow.cs:2151
msgid "_Remove from Catalog"
msgstr "_Odstrani iz kataloga"
-#: ../src/MainWindow.cs:2320
+#: ../src/MainWindow.cs:2220
#, csharp-format
msgid "Delete tag \"{0}\"?"
msgstr "Izbris oznake \"{0}\"?"
-#: ../src/MainWindow.cs:2322
+#: ../src/MainWindow.cs:2222
#, csharp-format
msgid "Delete the {0} selected tags?"
msgstr "Izbris {0} izbrane oznake ?"
-#: ../src/MainWindow.cs:2327
+#: ../src/MainWindow.cs:2227
msgid "photo"
msgid_plural "photos"
msgstr[0] "fotografije"
@@ -2700,7 +2474,7 @@ msgstr[1] "fotografija"
msgstr[2] "fotografiji"
msgstr[3] "fotografije"
-#: ../src/MainWindow.cs:2329
+#: ../src/MainWindow.cs:2229
#, csharp-format
msgid "If you delete this tag, the association with {0} {1} will be lost."
msgid_plural "If you delete these tags, the association with {0} {1} will be lost."
@@ -2709,7 +2483,7 @@ msgstr[1] "Ob izbrisu oznake, bo povezljivost z {0} {1} izgubljena."
msgstr[2] "Ob izbrisu oznak, bo povezljivost z {0} {1} izgubljena."
msgstr[3] "Ob izbrisu oznak, bo povezljivost z {0} {1} izgubljena."
-#: ../src/MainWindow.cs:2334
+#: ../src/MainWindow.cs:2234
msgid "_Delete tag"
msgid_plural "_Delete tags"
msgstr[0] "Iz_briši oznake"
@@ -2718,16 +2492,16 @@ msgstr[2] "Iz_briši oznaki"
msgstr[3] "Iz_briši oznake"
#. A Category is not empty. Can not delete it.
-#: ../src/MainWindow.cs:2348
+#: ../src/MainWindow.cs:2248
msgid "Tag is not empty"
msgstr "Oznaka ni prazna"
-#: ../src/MainWindow.cs:2349
+#: ../src/MainWindow.cs:2249
#, csharp-format
msgid "Can not delete tags that have tags within them. Please delete tags under \"{0}\" first"
msgstr "Ni mogoče izbrisati oznak, ki imajo oznake znotraj njih. Najprej izbrišite oznake pod \"{0}\""
-#: ../src/MainWindow.cs:2789
+#: ../src/MainWindow.cs:2692
msgid "Rotate selected photo left"
msgid_plural "Rotate selected photos left"
msgstr[0] "Vrtenje izbranih fotografij levo"
@@ -2735,7 +2509,7 @@ msgstr[1] "Vrtenje izbrane fotografije levo"
msgstr[2] "Vrtenje izbranih fotografij levo"
msgstr[3] "Vrtenje izbranih fotografij levo"
-#: ../src/MainWindow.cs:2802
+#: ../src/MainWindow.cs:2705
msgid "Rotate selected photo right"
msgid_plural "Rotate selected photos right"
msgstr[0] "Vrtenje izbranih fotografij desno"
@@ -2743,7 +2517,7 @@ msgstr[1] "Vrtenje izbrane fotografije desno"
msgstr[2] "Vrtenje izbranih fotografij desno"
msgstr[3] "Vrtenje izbranih fotografij desno"
-#: ../src/MainWindow.cs:2813
+#: ../src/MainWindow.cs:2716
#, csharp-format
msgid "Find _Selected Tag"
msgid_plural "Find _Selected Tags"
@@ -2752,7 +2526,7 @@ msgstr[1] "Išči _izbrano oznako "
msgstr[2] "Išči _izbrani oznaki"
msgstr[3] "Išči _izbrane oznake"
-#: ../src/MainWindow.cs:2817
+#: ../src/MainWindow.cs:2720
#, csharp-format
msgid "Find Selected Tag _With"
msgid_plural "Find Selected Tags _With"
@@ -2761,7 +2535,7 @@ msgstr[1] "Išči izbrano oznako _z"
msgstr[2] "Išči izbrani oznaki _z"
msgstr[3] "Išči izbrane oznake _z"
-#: ../src/MainWindow.cs:2858
+#: ../src/MainWindow.cs:2761
msgid "Create New Version?"
msgid_plural "Create New Versions?"
msgstr[0] "Ustvari nove različice?"
@@ -2769,7 +2543,7 @@ msgstr[1] "Ustvari novo različico?"
msgstr[2] "Ustvari novi različici?"
msgstr[3] "Ustvari nove različice?"
-#: ../src/MainWindow.cs:2860
+#: ../src/MainWindow.cs:2763
#, csharp-format
msgid "Before launching {1}, should F-Spot create a new version of the selected photo to preserve the original?"
msgid_plural "Before launching {1}, should F-Spot create new versions of the selected photos to preserve the originals?"
@@ -2778,7 +2552,7 @@ msgstr[1] "Ali naj pred zagonom {1} F-spot ustvari nove različice izbrane fotog
msgstr[2] "Ali naj pred zagonom {1} F-spot ustvari nove različice izbranih fotografij, da ohrani originala?"
msgstr[3] "Ali naj pred zagonom {1} F-spot ustvari nove različice izbranih fotografij, da ohrani originale?"
-#: ../src/MainWindow.cs:2882
+#: ../src/MainWindow.cs:2785
msgid "XCF version"
msgstr "Različica XCF"
@@ -2894,7 +2668,7 @@ msgstr "Vrsta scene"
#. Fixme this should really set parent menu
#. items insensitve
-#: ../src/PhotoTagMenu.cs:74
+#: ../src/PhotoTagMenu.cs:62
msgid "(No Tags)"
msgstr "(Ni oznak)"
@@ -2914,69 +2688,61 @@ msgstr "Preimenuj različico"
msgid "New name:"
msgstr "Novo ime:"
-#: ../src/PhotoVersionCommands.cs:110
-msgid "Could not create a new version"
-msgstr "Ni mogoče ustvariti nove različice"
-
-#: ../src/PhotoVersionCommands.cs:111
-#, csharp-format
-msgid "Received exception \"{0}\". Unable to create version \"{1}\""
-msgstr "Prejeta je bila napaka \"{0}\". Ni mogoče ustvariti različice \"{1}\""
-
-#: ../src/PhotoVersionCommands.cs:138
-msgid "Really Delete?"
-msgstr "Resničen izbris?"
-
-#: ../src/PhotoVersionCommands.cs:139
-msgid "Cancel"
-msgstr "Prekliči"
-
-#: ../src/PhotoVersionCommands.cs:140
+#: ../src/PhotoVersionCommands.cs:123
msgid "Delete"
msgstr "Izbriši"
-#: ../src/PhotoVersionCommands.cs:144
+#: ../src/PhotoVersionCommands.cs:124
#, csharp-format
msgid "Really delete version \"{0}\"?"
msgstr "Ali zares želite izbrisati različico \"{0}\"?"
-#: ../src/PhotoVersionCommands.cs:154
-msgid "Could not delete a version"
-msgstr "Ni mogoče izbrisati različice"
+#: ../src/PhotoVersionCommands.cs:125
+msgid "This removes the version and deletes the corresponding file from disk."
+msgstr "To odstrani različico in izbriše ustrezno datoteko z diska."
+
+#: ../src/PhotoVersionCommands.cs:170
+msgid "De_tach"
+msgstr "O_dpni"
-#: ../src/PhotoVersionCommands.cs:155
+#: ../src/PhotoVersionCommands.cs:171
#, csharp-format
-msgid "Received exception \"{0}\". Unable to delete version \"{1}\""
-msgstr "Prejeta je bila napaka \"{0}\". Ni mogoče izbrisati različice \"{1}\""
+msgid "Really detach version \"{0}\" from \"{1}\"?"
+msgstr "Resnično odpni različico \"{0}\" od \"{1}\"?"
-#: ../src/PhotoVersionCommands.cs:196
-msgid "Could not rename a version"
-msgstr "Ni mogoče preimenovati različice"
+#: ../src/PhotoVersionCommands.cs:172
+msgid "This makes the version appear as a separate photo in the library. To undo, drag the new photo back to its parent."
+msgstr "Različice fotografije se v knjižnici pojavijo kot različne fotografije. Za razveljavite povlecite novo fotografijo nazaj k izvorni fotografiji. "
+
+#: ../src/PhotoVersionCommands.cs:195
+msgid "Re_parent"
+msgstr "Pri_pni"
-#: ../src/PhotoVersionCommands.cs:197
+#: ../src/PhotoVersionCommands.cs:196
+#, csharp-format
+msgid "Really reparent \"{0}\" as version of \"{1}\"?"
+msgid_plural "Really reparent {2} photos as versions of \"{1}\"?"
+msgstr[0] "Ali zares želite ponovno pripeti {2} fotografij kot različice \"{1}\"?"
+msgstr[1] "Ali zares želite ponovno pripeti {2} fotografijo kot različico \"{1}\"?"
+msgstr[2] "Ali zares želite ponovno pripeti {2} fotografiji kot različici \"{1}\"?"
+msgstr[3] "Ali zares želite ponovno pripeti {2} fotografije kot različice \"{1}\"?"
+
+#: ../src/PhotoVersionCommands.cs:199
+msgid "This makes the photos appear as a single one in the library. The versions can be detached using the Photo menu."
+msgstr "Fotografije se v knjižnici pojavijo kot ena fotografija. Različice je mogoče odpeti v meniju Fotografija."
+
+#: ../src/PhotoVersionCommands.cs:239
#, csharp-format
-msgid "Received exception \"{0}\". Unable to rename version to \"{1}\""
-msgstr "Prejeta je bila napaka \"{0}\". Ni mogoče preimenovati različice v \"{1}\""
+msgid "Received exception \"{0}\"."
+msgstr "Prejeta je bila izjema \"{0}\"."
#: ../src/PhotoVersionMenu.cs:66
-#: ../src/Widgets/InfoBox.cs:563
-#: ../src/Widgets/InfoBox.cs:565
+#: ../src/Widgets/InfoBox.cs:566
+#: ../src/Widgets/InfoBox.cs:568
msgid "(No Edits)"
msgstr "(Ni urejanj)"
-#: ../src/PhotoView.cs:167
-#: ../src/UI.Dialog/EditExceptionDialog.cs:38
-msgid "Error editing photo"
-msgstr "Napaka med urejanjem fotografije"
-
-#: ../src/PhotoView.cs:168
-#: ../src/Sharpener.cs:73
-#: ../src/UI.Dialog/EditExceptionDialog.cs:25
-#, csharp-format
-msgid "Received exception \"{0}\". Unable to save photo {1}"
-msgstr "Prejeta je bila izjema \"{0}\". Ni mogoče shraniti fotografije {1}"
-
-#: ../src/PhotoView.cs:357
+#: ../src/PhotoView.cs:339
msgid "Comment:"
msgstr "Opomba:"
@@ -3017,37 +2783,29 @@ msgstr "Osvežitev iskanja"
msgid "No matching photos found"
msgstr "Ni mogoče najti skladnih fotografij"
-#: ../src/QueryWidget.cs:155
-msgid "Hide _Find Bar"
-msgstr "Skrij _iskalno vrstico"
-
-#: ../src/QueryWidget.cs:161
-msgid "Show _Find Bar"
-msgstr "Pokaži is_kalno vrstico"
-
-#: ../src/RotateCommand.cs:96
-#: ../src/RotateCommand.cs:111
+#: ../src/RotateCommand.cs:87
+#: ../src/RotateCommand.cs:102
msgid "Unable to rotate this type of photo"
msgstr "Ni mogoče zavrteti te zvrsti fotografij"
-#: ../src/RotateCommand.cs:131
+#: ../src/RotateCommand.cs:122
msgid "Unable to rotate readonly file"
msgstr "Ni mogoče vrteti datoteke označene le za branje"
-#: ../src/RotateCommand.cs:198
+#: ../src/RotateCommand.cs:185
msgid "Rotating photos"
msgstr "Vrtenje fotografij"
-#: ../src/RotateCommand.cs:209
+#: ../src/RotateCommand.cs:196
#, csharp-format
msgid "Rotating photo \"{0}\""
msgstr "Vrtenje fotografije \"{0}\""
-#: ../src/RotateCommand.cs:222
+#: ../src/RotateCommand.cs:209
msgid "Directory not found"
msgstr "Mape ni mogoče najti"
-#: ../src/RotateCommand.cs:242
+#: ../src/RotateCommand.cs:229
#, csharp-format
msgid "Unable to rotate photo"
msgid_plural "Unable to rotate {0} photos"
@@ -3056,7 +2814,7 @@ msgstr[1] "Ni mogoče zavrteti {0} fotografije"
msgstr[2] "Ni mogoče zavrteti {0} fotografij"
msgstr[3] "Ni mogoče zavrteti {0} fotografij"
-#: ../src/RotateCommand.cs:244
+#: ../src/RotateCommand.cs:231
#, csharp-format
msgid "The photo could not be rotated because it is on a read only file system or media such as a CDROM. Please check the permissions and try again."
msgid_plural "{0} photos could not be rotated because they are on a read only file system or media such as a CDROM. Please check the permissions and try again."
@@ -3065,35 +2823,35 @@ msgstr[1] "{0} fotografije ni bilo mogoče zavrteti, ker se nahajajo na datoteč
msgstr[2] "{0} fotografij ni bilo mogoče zavrteti, ker se nahajajo na datotečnem sistemu le za branje ali na mediju kot je CDROM. Preverite dovoljenja in poskusite ponovno. "
msgstr[3] "{0} fotografij ni bilo mogoče zavrteti, ker se nahajajo na datotečnem sistemu le za branje ali na mediju kot je CDROM. Preverite dovoljenja in poskusite ponovno. "
-#: ../src/RotateCommand.cs:271
+#: ../src/RotateCommand.cs:258
#, csharp-format
msgid "Received error \"{0}\" while attempting to rotate {1}"
msgstr "Med poskusom vrtenja {1} je prišlo do napake \"{0}\""
-#: ../src/RotateCommand.cs:276
+#: ../src/RotateCommand.cs:263
msgid "Error while rotating photo."
msgstr "Napaka med vrtenjem fotografije"
-#: ../src/SendEmail.cs:240
+#: ../src/SendEmail.cs:214
msgid "Preparing email"
msgstr "Pripravljanje e-pošte"
-#: ../src/SendEmail.cs:292
+#: ../src/SendEmail.cs:266
#, csharp-format
msgid "Exporting picture \"{0}\""
msgstr "Izvažanje slike \"{0}\""
-#: ../src/SendEmail.cs:314
+#: ../src/SendEmail.cs:288
msgid "Error processing image"
msgstr "Napaka med obdelavo slike"
-#: ../src/SendEmail.cs:315
+#: ../src/SendEmail.cs:289
#, csharp-format
msgid "An error occured while processing \"{0}\": {1}"
msgstr "Med obdelavo \"{0}\": {1} je prišlo do napake"
#. Send the mail :)
-#: ../src/SendEmail.cs:330
+#: ../src/SendEmail.cs:303
msgid "My Photos"
msgstr "Moje fotografije"
@@ -3101,6 +2859,12 @@ msgstr "Moje fotografije"
msgid "Error saving sharpened photo"
msgstr "Napaka med shranjevanjem izostrene datoteke"
+#: ../src/Sharpener.cs:73
+#: ../src/UI.Dialog/EditExceptionDialog.cs:26
+#, csharp-format
+msgid "Received exception \"{0}\". Unable to save photo {1}"
+msgstr "Prejeta je bila izjema \"{0}\". Ni mogoče shraniti fotografije {1}"
+
#: ../src/Sharpener.cs:102
msgid "Sharpen"
msgstr "Izostritev"
@@ -3117,15 +2881,15 @@ msgstr "Polmer:"
msgid "Threshold:"
msgstr "Prag:"
-#: ../src/SingleView.cs:73
+#: ../src/SingleView.cs:74
msgid "Rotate photo left"
msgstr "Vrtenje fotografije v levo"
-#: ../src/SingleView.cs:78
+#: ../src/SingleView.cs:79
msgid "Rotate photo right"
msgstr "Vrtenje fotografije v desno"
-#: ../src/SingleView.cs:115
+#: ../src/SingleView.cs:116
msgid "Folder"
msgstr "Mapa"
@@ -3133,21 +2897,25 @@ msgstr "Mapa"
msgid "Open"
msgstr "Odpri"
+#: ../src/SingleView.cs:344
+msgid "Select Folder"
+msgstr "Izbor mape"
+
#: ../src/SingleView.cs:428
msgid "Set as Background"
msgstr "Nastavi kot ozadje"
-#: ../src/TagCommands.cs:96
-#: ../src/TagSelectionWidget.cs:498
+#: ../src/TagCommands.cs:97
+#: ../src/TagSelectionWidget.cs:491
#: ../src/UI.Dialog/EditTagDialog.cs:78
msgid "This name is already in use"
msgstr "Ime je že v uporabi"
-#: ../src/TagCommands.cs:144
+#: ../src/TagCommands.cs:145
msgid "Create New Tag"
msgstr "Ustvari novo oznako"
-#: ../src/TagCommands.cs:145
+#: ../src/TagCommands.cs:146
msgid "Name of New Tag:"
msgstr "Ime nove oznake:"
@@ -3161,7 +2929,7 @@ msgstr[2] "Iskanje"
msgstr[3] "Iskanje"
#: ../src/TagPopup.cs:36
-#: ../src/Widgets/TagMenu.cs:91
+#: ../src/Widgets/TagMenu.cs:98
msgid "Create New Tag..."
msgstr "Ustvari novo oznako ..."
@@ -3234,33 +3002,33 @@ msgstr "Ne {0}"
msgid "Drag tags here to search for them"
msgstr "Za iskanje po oznakah jih povlecite sem"
-#: ../src/TagSelectionWidget.cs:497
+#: ../src/TagSelectionWidget.cs:490
msgid "Error renaming tag"
msgstr "Napaka med preimenovanjem oznake"
-#: ../src/TagStore.cs:203
+#: ../src/TagStore.cs:204
msgid "Favorites"
msgstr "Priljubljeno"
-#: ../src/TagStore.cs:208
+#: ../src/TagStore.cs:209
msgid "Hidden"
msgstr "Skrito"
-#: ../src/TagStore.cs:216
+#: ../src/TagStore.cs:217
msgid "People"
msgstr "Ljudje"
-#: ../src/TagStore.cs:221
+#: ../src/TagStore.cs:222
msgid "Places"
msgstr "Mesta"
-#: ../src/TagStore.cs:226
+#: ../src/TagStore.cs:227
msgid "Events"
msgstr "Dogodki"
#. The label for the root category is used in new and edit tag dialogs
-#: ../src/TagStore.cs:239
-#: ../src/Widgets/InfoBox.cs:409
+#: ../src/TagStore.cs:240
+#: ../src/Widgets/InfoBox.cs:410
msgid "(None)"
msgstr "(Brez)"
@@ -3285,32 +3053,32 @@ msgstr " ali "
msgid "or"
msgstr "ali"
-#: ../src/ThumbnailCommand.cs:20
+#: ../src/ThumbnailCommand.cs:21
msgid "Updating Thumbnails"
msgstr "Posodabljanje sličic"
-#: ../src/ThumbnailCommand.cs:28
+#: ../src/ThumbnailCommand.cs:29
#, csharp-format
msgid "Updating picture \"{0}\""
msgstr "Posodabljanje slike \"{0}\""
-#: ../src/UI.Dialog/AboutDialog.cs:76
+#: ../src/UI.Dialog/AboutDialog.cs:77
msgid "Photo management for GNOME"
msgstr "Upravljanje fotografij za GNOME"
-#: ../src/UI.Dialog/AboutDialog.cs:77
-msgid "Copyright © 2003-2009 Novell Inc."
-msgstr "Avtorske pravice © 2003-2009 Novell Inc."
+#: ../src/UI.Dialog/AboutDialog.cs:78
+msgid "Copyright © 2003-2010 Novell Inc."
+msgstr "Avtorske pravice © 2003-2010 Novell Inc."
-#: ../src/UI.Dialog/AboutDialog.cs:100
+#: ../src/UI.Dialog/AboutDialog.cs:101
msgid "translator-credits"
msgstr "Andrej Žnidaršič <andrej.znidarsic at gmail.com>"
-#: ../src/UI.Dialog/AboutDialog.cs:105
+#: ../src/UI.Dialog/AboutDialog.cs:106
msgid "F-Spot Website"
msgstr "F-Spot spletišče"
-#: ../src/UI.Dialog/AdjustTimeDialog.cs:112
+#: ../src/UI.Dialog/AdjustTimeDialog.cs:113
#: ../src/UI.Dialog/ui/AdjustTimeDialog.ui.h:10
#, csharp-format
msgid "Shift all photos by {0}"
@@ -3352,16 +3120,20 @@ msgstr "Prejšnji Teden (Pon-Ned)"
msgid "Customized Range"
msgstr "Razmerje po meri"
-#: ../src/UI.Dialog/EditTagIconDialog.cs:46
+#: ../src/UI.Dialog/EditExceptionDialog.cs:39
+msgid "Error editing photo"
+msgstr "Napaka med urejanjem fotografije"
+
+#: ../src/UI.Dialog/EditTagIconDialog.cs:47
#, csharp-format
msgid "Edit Icon for Tag {0}"
msgstr "Urejanje ikone za oznako {0}"
-#: ../src/UI.Dialog/EditTagIconDialog.cs:68
+#: ../src/UI.Dialog/EditTagIconDialog.cs:69
msgid "Select Photo from file"
msgstr "Izberi fotografijo iz datoteke"
-#: ../src/UI.Dialog/EditTagIconDialog.cs:90
+#: ../src/UI.Dialog/EditTagIconDialog.cs:91
#, csharp-format
msgid ""
"\n"
@@ -3378,16 +3150,16 @@ msgstr ""
" s to oznako. Označite fotografijo kot '{0}' in se vrnite sem,\n"
"da jo lahko uporabite kot ikono."
-#: ../src/UI.Dialog/EditTagIconDialog.cs:168
+#: ../src/UI.Dialog/EditTagIconDialog.cs:169
msgid "Unable to load image"
msgstr "Ni mogoče naložiti slike."
-#: ../src/UI.Dialog/EditTagIconDialog.cs:169
+#: ../src/UI.Dialog/EditTagIconDialog.cs:170
#, csharp-format
msgid "Unable to load \"{0}\" as icon for the tag"
msgstr "Ni mogoče naložiti \"{0}\" kot ikono za oznako"
-#: ../src/UI.Dialog/EditTagIconDialog.cs:207
+#: ../src/UI.Dialog/EditTagIconDialog.cs:208
#, csharp-format
msgid "Photo {0} of {1}"
msgstr "Fotografija {0} od {1}"
@@ -3404,37 +3176,63 @@ msgstr "Podrobnosti napake"
msgid "An unhandled exception was thrown: "
msgstr "Nesprejeto izjemno dejanje:"
-#: ../src/UI.Dialog/PreferenceDialog.cs:54
-#: ../src/UI.Dialog/PreferenceDialog.cs:77
+#: ../src/UI.Dialog/ImportDialog.cs:15
+msgid "Choose Folder..."
+msgstr "Izbor mape ...."
+
+#: ../src/UI.Dialog/ImportDialog.cs:124
+msgid "Choose Import source..."
+msgstr "Izbor vira uvoza ..."
+
+#: ../src/UI.Dialog/ImportDialog.cs:136
+msgid "(No Cameras Detected)"
+msgstr "(Ni zaznanih fotoaparatov)"
+
+#: ../src/UI.Dialog/ImportDialog.cs:264
+#, csharp-format
+msgid "Importing Photos: {0} of {1}..."
+msgstr "Uvažanje fotografij: {0} od {1} ..."
+
+#: ../src/UI.Dialog/ImportDialog.cs:288
+msgid "Importing photos..."
+msgstr "Uvažanje fotografij ..."
+
+#. TODO: Using a GtkSpinner would be nicer here.
+#: ../src/UI.Dialog/ImportDialog.cs:295
+msgid "Searching for photos... (You can already click Import to continue)"
+msgstr "Iskanje fotografij ... (Za nadaljevanje lahko že kliknite Uvozi)"
+
+#: ../src/UI.Dialog/PreferenceDialog.cs:55
+#: ../src/UI.Dialog/PreferenceDialog.cs:78
msgid "None"
msgstr "Noben"
-#: ../src/UI.Dialog/PreferenceDialog.cs:56
+#: ../src/UI.Dialog/PreferenceDialog.cs:57
msgid "System profile"
msgstr "Sistemski profil"
-#: ../src/UI.Dialog/PreferenceDialog.cs:94
+#: ../src/UI.Dialog/PreferenceDialog.cs:95
msgid "Standard theme"
msgstr "Običajna tema"
-#: ../src/UI.Dialog/RepairDbDialog.cs:20
+#: ../src/UI.Dialog/RepairDbDialog.cs:21
msgid "Error loading database."
msgstr "Napaka med nalaganjem podatkovne zbirke"
-#: ../src/UI.Dialog/RepairDbDialog.cs:21
+#: ../src/UI.Dialog/RepairDbDialog.cs:22
#, csharp-format
msgid "F-Spot encountered an error while loading the photo database. The old database has be moved to {0} and a new database has been created."
msgstr "Prišlo je do napake med nalaganjem podatkovne zbirke fotografij. Stara zbirka je bila premaknjena v {0}, zato je bila ustvarjena nova."
-#: ../src/UI.Dialog/SelectionRatioDialog.cs:60
+#: ../src/UI.Dialog/SelectionRatioDialog.cs:61
msgid "Label"
msgstr "Oznaka"
-#: ../src/UI.Dialog/SelectionRatioDialog.cs:64
+#: ../src/UI.Dialog/SelectionRatioDialog.cs:65
msgid "Ratio"
msgstr "Razmerje"
-#: ../src/UI.Dialog/ThreadProgressDialog.cs:56
+#: ../src/UI.Dialog/ThreadProgressDialog.cs:55
msgid "Retry"
msgstr "Poskusi ponovno"
@@ -3638,196 +3436,208 @@ msgstr "Ustvari novo _oznako ..."
msgid "Create _New Version..."
msgstr "Ustvari _novo različico ..."
-#: ../src/ui/main_window.ui.h:11
+#: ../src/ui/main_window.ui.h:10
+msgid "De_tach Version"
+msgstr "O_dpni različico"
+
+#: ../src/ui/main_window.ui.h:12
msgid "Fin_d"
msgstr "Naj_di"
-#: ../src/ui/main_window.ui.h:12
+#: ../src/ui/main_window.ui.h:13
msgid "Manage _Extensions"
msgstr "Upravljanje _razširitev"
-#: ../src/ui/main_window.ui.h:13
+#: ../src/ui/main_window.ui.h:14
msgid "Page Set_up..."
msgstr "Nas_tavitve strani ..."
-#: ../src/ui/main_window.ui.h:14
+#: ../src/ui/main_window.ui.h:15
msgid "Re_fresh Thumbnail"
msgstr "O_sveži sličico"
-#: ../src/ui/main_window.ui.h:18
+#: ../src/ui/main_window.ui.h:19
msgid "Select _All"
msgstr "Izberi _vse"
-#: ../src/ui/main_window.ui.h:19
+#: ../src/ui/main_window.ui.h:20
msgid "Select _None"
msgstr "Ne izberi _ničesar"
-#: ../src/ui/main_window.ui.h:20
+#: ../src/ui/main_window.ui.h:21
msgid "Send by _Mail..."
msgstr "Pošlji po _pošti ..."
-#: ../src/ui/main_window.ui.h:22
+#: ../src/ui/main_window.ui.h:23
msgid "Side_bar"
msgstr "Stranska v_rstica"
-#: ../src/ui/main_window.ui.h:23
+#: ../src/ui/main_window.ui.h:24
msgid "T_ags"
msgstr "Ozn_ake"
-#: ../src/ui/main_window.ui.h:25
+#: ../src/ui/main_window.ui.h:26
msgid "Thumbnail _elements"
msgstr "_Elementi sličic"
-#: ../src/ui/main_window.ui.h:26
+#: ../src/ui/main_window.ui.h:27
msgid "Too_lbar"
msgstr "O_rodna vrstica"
-#: ../src/ui/main_window.ui.h:27
+#: ../src/ui/main_window.ui.h:28
msgid "View"
msgstr "Pogled"
#: ../src/ui/main_window.ui.h:33
+msgid "_Attach Tag"
+msgstr "_Pripni oznake"
+
+#: ../src/ui/main_window.ui.h:34
msgid "_Attach Tag to Selection"
msgstr "_Pripni oznako izboru"
-#: ../src/ui/main_window.ui.h:35
+#: ../src/ui/main_window.ui.h:36
msgid "_Clear Rating Filter"
msgstr "_Počisti filter ocen"
-#: ../src/ui/main_window.ui.h:36
+#: ../src/ui/main_window.ui.h:37
msgid "_Clear Roll Filter"
msgstr "_Počisti filter zvitkov"
-#: ../src/ui/main_window.ui.h:38
+#: ../src/ui/main_window.ui.h:39
msgid "_Components"
msgstr "_Sestavni deli"
-#: ../src/ui/main_window.ui.h:39
+#: ../src/ui/main_window.ui.h:40
msgid "_Contents"
msgstr "_Vsebina"
-#: ../src/ui/main_window.ui.h:40
+#: ../src/ui/main_window.ui.h:41
msgid "_Dates"
msgstr "_Datumi"
-#: ../src/ui/main_window.ui.h:42
+#: ../src/ui/main_window.ui.h:43
msgid "_Delete Selected Tag"
msgstr "_Izbriši izbrano oznako"
-#: ../src/ui/main_window.ui.h:43
+#: ../src/ui/main_window.ui.h:44
msgid "_Delete Version"
msgstr "_Izbriši različico"
-#: ../src/ui/main_window.ui.h:45
+#: ../src/ui/main_window.ui.h:46
msgid "_Edit Tag..."
msgstr "_Uredi oznako ..."
-#: ../src/ui/main_window.ui.h:46
+#: ../src/ui/main_window.ui.h:47
msgid "_Export to"
msgstr "_Izvozi v"
-#: ../src/ui/main_window.ui.h:47
+#: ../src/ui/main_window.ui.h:48
msgid "_Filmstrip"
msgstr "_Filmski trak"
-#: ../src/ui/main_window.ui.h:50
+#: ../src/ui/main_window.ui.h:51
msgid "_Hidden"
msgstr "_Skrito"
-#: ../src/ui/main_window.ui.h:51
+#: ../src/ui/main_window.ui.h:52
msgid "_Import..."
msgstr "_Uvozi ..."
-#: ../src/ui/main_window.ui.h:52
+#: ../src/ui/main_window.ui.h:53
+msgid "_Invert Selection"
+msgstr "Obrni _izbor"
+
+#: ../src/ui/main_window.ui.h:54
msgid "_Large"
msgstr "_Velike"
-#: ../src/ui/main_window.ui.h:53
+#: ../src/ui/main_window.ui.h:55
msgid "_Last Import Roll"
msgstr "_Zadnji uvozni zvitek"
-#: ../src/ui/main_window.ui.h:54
+#: ../src/ui/main_window.ui.h:56
msgid "_Loupe"
msgstr "_Leča"
-#: ../src/ui/main_window.ui.h:55
+#: ../src/ui/main_window.ui.h:57
msgid "_Medium"
msgstr "_Srednje"
-#: ../src/ui/main_window.ui.h:57
+#: ../src/ui/main_window.ui.h:59
msgid "_Quit"
msgstr "_Končaj"
-#: ../src/ui/main_window.ui.h:58
+#: ../src/ui/main_window.ui.h:60
msgid "_Ratings"
msgstr "_Ocene"
-#: ../src/ui/main_window.ui.h:60
+#: ../src/ui/main_window.ui.h:62
msgid "_Remove Tag From Selection"
msgstr "_Odstrani oznako iz izbora"
-#: ../src/ui/main_window.ui.h:61
+#: ../src/ui/main_window.ui.h:63
msgid "_Rename Version"
msgstr "_Preimenuj različico"
-#: ../src/ui/main_window.ui.h:62
+#: ../src/ui/main_window.ui.h:64
msgid "_Reverse Order"
msgstr "_Obrnjen vrstni red"
-#: ../src/ui/main_window.ui.h:63
+#: ../src/ui/main_window.ui.h:65
msgid "_Select Import Rolls..."
msgstr "Izberi _uvozne zvitke ..."
-#: ../src/ui/main_window.ui.h:64
+#: ../src/ui/main_window.ui.h:66
msgid "_Set Date Range..."
msgstr "Nastavi _razpon datumov ..."
-#: ../src/ui/main_window.ui.h:65
+#: ../src/ui/main_window.ui.h:67
msgid "_Set Rating filter..."
msgstr "_Nastavi filter ocen ..."
-#: ../src/ui/main_window.ui.h:66
+#: ../src/ui/main_window.ui.h:68
msgid "_Sharpen..."
msgstr "_Izostri ..."
-#: ../src/ui/main_window.ui.h:68
+#: ../src/ui/main_window.ui.h:70
msgid "_Small"
msgstr "_Majhne"
-#: ../src/ui/main_window.ui.h:69
+#: ../src/ui/main_window.ui.h:71
msgid "_Tag Icons"
msgstr "_Ikone oznak"
-#: ../src/ui/main_window.ui.h:70
+#: ../src/ui/main_window.ui.h:72
msgid "_Tags"
msgstr "O_znake"
-#: ../src/ui/main_window.ui.h:71
+#: ../src/ui/main_window.ui.h:73
msgid "_Timeline"
msgstr "_Časovnica"
-#: ../src/ui/main_window.ui.h:72
+#: ../src/ui/main_window.ui.h:74
msgid "_Tools"
msgstr "_Orodja"
-#: ../src/ui/main_window.ui.h:73
+#: ../src/ui/main_window.ui.h:75
msgid "_Untagged Photos"
msgstr "_Neoznačene fotografije"
-#: ../src/ui/main_window.ui.h:74
+#: ../src/ui/main_window.ui.h:76
msgid "_Version"
msgstr "_Različica"
-#: ../src/Updater.cs:622
+#: ../src/Updater.cs:638
msgid "Updating F-Spot Database"
msgstr "Posodabljanje F-Spot podatkovne zbirke"
-#: ../src/Updater.cs:623
+#: ../src/Updater.cs:639
msgid "Please wait while your F-Spot gallery's database is updated. This may take some time."
msgstr "Počakati je treba, da se podatkovna zbirka F-Spotove galerije do konca posodobi. Postopek je lahko dolgotrajen."
#. Mono.Unix.Error error = Mono.Unix.Stdlib.GetLastError ();
-#: ../src/Utils/Unix.cs:35
+#: ../src/Utils/Unix.cs:36
msgid "Unable to create temporary file"
msgstr "Ni mogoče ustvariti začasne datoteke "
@@ -3911,16 +3721,16 @@ msgstr "Natisni oznake fotografij"
msgid "Print photo comment"
msgstr "Natisni opombe fotografij"
-#: ../src/Widgets/EditorPage.cs:30
+#: ../src/Widgets/EditorPage.cs:31
#: ../src/Widgets/Sidebar.cs:54
msgid "Edit"
msgstr "Urejanje"
-#: ../src/Widgets/EditorPage.cs:198
+#: ../src/Widgets/EditorPage.cs:199
msgid "This tool requires an active selection. Please select a region of the photo and try the operation again"
msgstr "Orodje zahteva dejavno izbiro. Izberite ustrezno območje na fotografiji in poskusite ponovno"
-#: ../src/Widgets/EditorPage.cs:216
+#: ../src/Widgets/EditorPage.cs:217
msgid "Error saving adjusted photo"
msgid_plural "Error saving adjusted photos"
msgstr[0] "Napaka med shranjevanjem prilagojenih fotografij"
@@ -3928,16 +3738,16 @@ msgstr[1] "Napaka med shranjevanjem prilagojene fotografije"
msgstr[2] "Napaka med shranjevanjem prilagojenih fotografij"
msgstr[3] "Napaka med shranjevanjem prilagojenih fotografij"
-#: ../src/Widgets/EditorPage.cs:218
+#: ../src/Widgets/EditorPage.cs:219
#, csharp-format
msgid "Received exception \"{0}\". Note that you have to develop RAW files into JPEG before you can edit them."
msgstr "Prejeta izjema \"{0}\". RAW datoteke je treba pred urejanjem razviti v JPEG."
-#: ../src/Widgets/Filmstrip.cs:572
+#: ../src/Widgets/Filmstrip.cs:573
msgid "_Horizontal"
msgstr "_Vodoravno"
-#: ../src/Widgets/Filmstrip.cs:576
+#: ../src/Widgets/Filmstrip.cs:577
msgid "_Vertical"
msgstr "_Navpično"
@@ -3949,52 +3759,56 @@ msgstr "Najdi:"
msgid "Folders"
msgstr "Mape"
-#: ../src/Widgets/FolderTreeView.cs:123
+#: ../src/Widgets/FolderTreeView.cs:124
msgid "Filesystem"
msgstr "Datotečni sistem"
-#: ../src/Widgets/InfoBox.cs:182
+#: ../src/Widgets/InfoBox.cs:183
msgid "Histogram"
msgstr "Histogram"
-#: ../src/Widgets/InfoBox.cs:215
+#: ../src/Widgets/InfoBox.cs:216
msgid "Version"
msgstr "Različica"
-#: ../src/Widgets/InfoBox.cs:218
+#: ../src/Widgets/InfoBox.cs:219
msgid "Date"
msgstr "Datum"
-#: ../src/Widgets/InfoBox.cs:224
+#: ../src/Widgets/InfoBox.cs:225
msgid "Exposure"
msgstr "Osvetljenost"
-#: ../src/Widgets/InfoBox.cs:228
+#: ../src/Widgets/InfoBox.cs:229
msgid "Focal Length"
msgstr "Goriščna razdalja"
-#: ../src/Widgets/InfoBox.cs:234
+#: ../src/Widgets/InfoBox.cs:232
+msgid "Camera"
+msgstr "Fotoaparat"
+
+#: ../src/Widgets/InfoBox.cs:235
msgid "File Size"
msgstr "Velikost datoteke"
-#: ../src/Widgets/InfoBox.cs:237
+#: ../src/Widgets/InfoBox.cs:238
msgid "Rating"
msgstr "Ocena"
-#: ../src/Widgets/InfoBox.cs:390
-#: ../src/Widgets/InfoBox.cs:398
-#: ../src/Widgets/InfoBox.cs:428
+#: ../src/Widgets/InfoBox.cs:391
+#: ../src/Widgets/InfoBox.cs:399
+#: ../src/Widgets/InfoBox.cs:429
msgid "(wrong format)"
msgstr "(napačen zapis)"
-#: ../src/Widgets/InfoBox.cs:418
-#: ../src/Widgets/InfoBox.cs:441
-#: ../src/Widgets/InfoBox.cs:451
-#: ../src/Widgets/InfoBox.cs:460
+#: ../src/Widgets/InfoBox.cs:419
+#: ../src/Widgets/InfoBox.cs:442
+#: ../src/Widgets/InfoBox.cs:452
+#: ../src/Widgets/InfoBox.cs:461
msgid "(Unknown)"
msgstr "(Neznano)"
-#: ../src/Widgets/InfoBox.cs:561
+#: ../src/Widgets/InfoBox.cs:564
#, csharp-format
msgid "(One Edit)"
msgid_plural "({0} Edits)"
@@ -4003,17 +3817,17 @@ msgstr[1] "({0} urejanje)"
msgstr[2] "({0} urejanji)"
msgstr[3] "({0} urejanja)"
-#: ../src/Widgets/InfoBox.cs:575
+#: ../src/Widgets/InfoBox.cs:578
msgid "(File read error)"
msgstr "(Napaka med branjem datoteke)"
-#: ../src/Widgets/InfoBox.cs:620
+#: ../src/Widgets/InfoBox.cs:623
#, csharp-format
msgid "{0} Photos"
msgstr "{0} Fotografij"
#. Note for translators: {0} is a date, {1} and {2} are times.
-#: ../src/Widgets/InfoBox.cs:640
+#: ../src/Widgets/InfoBox.cs:643
#, csharp-format
msgid ""
"On {0} between \n"
@@ -4022,7 +3836,7 @@ msgstr ""
"Na {0} med \n"
"{1} in {2}"
-#: ../src/Widgets/InfoBox.cs:645
+#: ../src/Widgets/InfoBox.cs:648
#, csharp-format
msgid ""
"Between {0} \n"
@@ -4031,35 +3845,35 @@ msgstr ""
"Med {0} \n"
"in {1}"
-#: ../src/Widgets/InfoBox.cs:672
+#: ../src/Widgets/InfoBox.cs:675
msgid "(At least one File not found)"
msgstr "(ni najdene vsaj ene datoteke)"
-#: ../src/Widgets/InfoBox.cs:789
+#: ../src/Widgets/InfoBox.cs:792
msgid "Show Photo Name"
msgstr "Pokaži ime fotografije"
-#: ../src/Widgets/InfoBox.cs:798
+#: ../src/Widgets/InfoBox.cs:801
msgid "Show Date"
msgstr "Pokaži datum"
-#: ../src/Widgets/InfoBox.cs:807
+#: ../src/Widgets/InfoBox.cs:810
msgid "Show Size"
msgstr "Pokaži velikost"
-#: ../src/Widgets/InfoBox.cs:816
+#: ../src/Widgets/InfoBox.cs:819
msgid "Show Exposure"
msgstr "Pokaži osvetlitev"
-#: ../src/Widgets/InfoBox.cs:825
+#: ../src/Widgets/InfoBox.cs:828
msgid "Show Focal Length"
msgstr "Pokaži goriščno razdaljo"
-#: ../src/Widgets/InfoBox.cs:834
+#: ../src/Widgets/InfoBox.cs:837
msgid "Show Camera"
msgstr "Pokaži fotoaparat"
-#: ../src/Widgets/InfoBox.cs:843
+#: ../src/Widgets/InfoBox.cs:846
msgid "Show File Size"
msgstr "Pokaži velikost datotek"
@@ -4093,7 +3907,7 @@ msgstr "Metapodatki niso na voljo"
msgid "No applications available"
msgstr "Ni razpoložljivih programov"
-#: ../src/Widgets/RatingMenuItem.cs:56
+#: ../src/Widgets/RatingMenuItem.cs:57
msgid "Rating:"
msgstr "Ocena:"
@@ -4118,6 +3932,133 @@ msgstr "Prikaže F-Spotovo diapredstavitev"
msgid "F-Spot photos"
msgstr "F-Spot fotografije"
+#~ msgid "Preview"
+#~ msgstr "Predogled"
+#~ msgid "Path"
+#~ msgstr "Pot"
+#~ msgid "File"
+#~ msgstr "Datoteka"
+#~ msgid "Select Tag"
+#~ msgstr "Izbor oznake"
+#~ msgid "Downloading Previews"
+#~ msgstr "Nalaganje predogledov"
+#~ msgid "Downloading Preview of {0}"
+#~ msgstr "Nalaganje predogleda {0}"
+#~ msgid "Copying file {0} of {1}"
+#~ msgstr "Kopiranje datoteke {0} od {1}"
+#~ msgid "Error transferring file"
+#~ msgstr "Napaka med prenosom datoteke"
+#~ msgid "Download Complete"
+#~ msgstr "Prenos končan"
+#~ msgid "Done Copying Files"
+#~ msgstr "Kopiranje datotek končano"
+#~ msgid "Transferring \"{0}\" from camera"
+#~ msgstr "Prenašanje \"{0}\" s fotoaparata"
+#~ msgid "Port"
+#~ msgstr "Vrata"
+#~ msgid "Import error"
+#~ msgstr "Napaka uvažanja"
+#~ msgid "Error importing {0}{2}{2}{1}"
+#~ msgstr "Napaka med uvažanjem {0}{2}{2}{1}"
+#~ msgid " "
+#~ msgstr " "
+#~ msgid "<b></b>"
+#~ msgstr "<b></b>"
+#~ msgid "Attach Tags:"
+#~ msgstr "Pripenjanje oznak:"
+#~ msgid "Attach tag:"
+#~ msgstr "Pripenjanje oznake:"
+#~ msgid "CD"
+#~ msgstr "CD"
+#~ msgid "Camera Selection"
+#~ msgstr "Izbira fotoaparata"
+#~ msgid "Copy files to the Photos folder"
+#~ msgstr "Kopiranje datotek v mapo fotografij"
+#~ msgid "Detect duplicates"
+#~ msgstr "Zaznavanje dvojnikov"
+#~ msgid "E-_Mail:"
+#~ msgstr "_E-pošta:"
+#~ msgid "E_xport titles and comments"
+#~ msgstr "Izvozi _naslove in opombe"
+#~ msgid "G_allery:"
+#~ msgstr "G_alerija:"
+#~ msgid "Gallery"
+#~ msgstr "Galerija"
+#~ msgid "Include subfolders"
+#~ msgstr "_Upoštevaj podmape"
+#~ msgid "Pause"
+#~ msgstr "Premor"
+#~ msgid "Select Photos to Copy From Camera..."
+#~ msgstr "Izbor fotografij za kopiranje s fotoaparata"
+#~ msgid "Select the camera from which you want to transfer files"
+#~ msgstr "Izbor fotoaparata za prenos datotek"
+#~ msgid "Selected Camera: "
+#~ msgstr "Izbran fotoaparat:"
+#~ msgid "Strip image _metadata"
+#~ msgstr "Odstrani _metapodatke slike"
+#~ msgid "_Flickr"
+#~ msgstr "_Flickr"
+#~ msgid "_Gallery"
+#~ msgstr "_Galerija"
+#~ msgid "_Open album in browser when done uploading"
+#~ msgstr "_Odpri album v brskalniku po končanem nalaganju"
+#~ msgid "_Open destination when done exporting"
+#~ msgstr "_Odpiri cilj po končanem izvozu"
+#~ msgid "_Scale photos to no larger than: "
+#~ msgstr "_Spreminjanje velikosti fotografij na ne več kot: "
+#~ msgid "_Strip metadata"
+#~ msgstr "O_dstrani metapodatke"
+#~ msgid "_URI:"
+#~ msgstr "_URI:"
+#~ msgid "_Virtual Filesystem"
+#~ msgstr "_Navidezni datotečni sistem"
+#~ msgid "x"
+#~ msgstr "x"
+#~ msgid "Done Loading"
+#~ msgstr "Nalaganje končano"
+#~ msgid "Directory does not exist."
+#~ msgstr "Mapa ne obstaja"
+#~ msgid ""
+#~ "The directory you selected \"{0}\" does not exist. Please choose a "
+#~ "different directory"
+#~ msgstr "Mapa \"{0}\", ki ste jo izbrali, ne obstaja. Izberite drugo mapo."
+#~ msgid "No cameras detected."
+#~ msgstr "Noben fotoaparat ni bil zaznan."
+#~ msgid ""
+#~ "F-Spot was unable to find any cameras attached to this system. Double "
+#~ "check that the camera is connected and has power"
+#~ msgstr ""
+#~ "Program F-spot ni zaznal v sistem povezanih fotoaparatov. Dvakrat "
+#~ "preverite, ali je fotoaparat povezan in prižgan."
+#~ msgid "Error connecting to camera"
+#~ msgstr "Napaka med povezovanjem s fotoaparatom"
+#~ msgid "Received error \"{0}\" while connecting to camera"
+#~ msgstr "Med povezovanjem s fotoaparatom je bila prejeta napaka \"{0}\""
+#~ msgid "Reparented ({0})"
+#~ msgstr "Različica slike ({0})"
+#~ msgid "Could not create a new version"
+#~ msgstr "Ni mogoče ustvariti nove različice"
+#~ msgid "Received exception \"{0}\". Unable to create version \"{1}\""
+#~ msgstr ""
+#~ "Prejeta je bila napaka \"{0}\". Ni mogoče ustvariti različice \"{1}\""
+#~ msgid "Really Delete?"
+#~ msgstr "Resničen izbris?"
+#~ msgid "Cancel"
+#~ msgstr "Prekliči"
+#~ msgid "Could not delete a version"
+#~ msgstr "Ni mogoče izbrisati različice"
+#~ msgid "Received exception \"{0}\". Unable to delete version \"{1}\""
+#~ msgstr ""
+#~ "Prejeta je bila napaka \"{0}\". Ni mogoče izbrisati različice \"{1}\""
+#~ msgid "Could not rename a version"
+#~ msgstr "Ni mogoče preimenovati različice"
+#~ msgid "Received exception \"{0}\". Unable to rename version to \"{1}\""
+#~ msgstr ""
+#~ "Prejeta je bila napaka \"{0}\". Ni mogoče preimenovati različice v \"{1}\""
+#~ msgid "Error: Error while transferring; Aborting"
+#~ msgstr "Napaka: napaka med prenosom; preklicano"
+#~ msgid "Error: File Already Exists; Aborting"
+#~ msgstr "Napaka: datoteka že obstaja; preklicano"
#~ msgid "Edit Selected Tag..."
#~ msgstr "Uredi izbrane oznake ..."
#~ msgid "_Edit Selected Tag..."
diff --git a/po/sr.po b/po/sr.po
index 06d01e8..7087f2f 100644
--- a/po/sr.po
+++ b/po/sr.po
@@ -5,29 +5,61 @@
#
# Данило Шеган <danilo at gnome.org>
# Maintainer: Милош Поповић <gpopac at gmail.com>
+# Милош Поповић <gpopac at gmail.com>, 2010.
#
msgid ""
msgstr ""
"Project-Id-Version: f-spot\n"
"Report-Msgid-Bugs-To: http://bugzilla.gnome.org/enter_bug.cgi?product=f-"
"spot&component=General\n"
-"POT-Creation-Date: 2009-09-15 12:11+0000\n"
-"PO-Revision-Date: 2008-02-29 22:38+0100\n"
+"POT-Creation-Date: 2010-06-08 09:34+0000\n"
+"PO-Revision-Date: 2010-06-12 11:51+0200\n"
"Last-Translator: Милош Поповић <gpopac at gmail.com>\n"
-"Language-Team: Serbian (sr) <gnom at prevod.org>\n"
+"Language-Team: Serbian <gnom at prevod.org>\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
-"Plural-Forms: nplurals=3; plural=n%10==1 && n%100!=11 ? 0 : n%10>=2 && "
-"n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2;\n"
+"Plural-Forms: nplurals=4; plural=n==1? 3 : n%10==1 && n%100!=11 ? 0 : n"
+"%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2;\\n\n"
+
+#: ../data/desktop-files/f-spot.desktop.in.in.h:1
+#: ../data/desktop-files/f-spot-import.desktop.in.in.h:1
+#: ../data/desktop-files/f-spot-view.desktop.in.in.h:1
+#: ../src/ui/main_window.ui.h:11
+msgid "F-Spot"
+msgstr "Ф-број"
+
+#: ../data/desktop-files/f-spot.desktop.in.in.h:2
+#: ../data/desktop-files/f-spot-import.desktop.in.in.h:2
+msgid "F-Spot Photo Manager"
+msgstr "Ф-број фото албум"
+
+#: ../data/desktop-files/f-spot.desktop.in.in.h:3
+msgid "Organize, enjoy, and share your photos"
+msgstr "Организујте, уживајте и поделите ваше фотографије"
+
+#: ../data/desktop-files/f-spot.desktop.in.in.h:4
+#: ../data/desktop-files/f-spot-import.desktop.in.in.h:4
+msgid "Photo Manager"
+msgstr "Фото албум"
+
+#: ../data/desktop-files/f-spot-import.desktop.in.in.h:3
+msgid "Import into F-Spot"
+msgstr "Увези у Ф-број"
+
+#: ../data/desktop-files/f-spot-view.desktop.in.in.h:2
+msgid "F-Spot Photo Viewer"
+msgstr "Ф-број прегледач фотографија"
+
+#: ../data/desktop-files/f-spot-view.desktop.in.in.h:3
+msgid "Photo Viewer"
+msgstr "Прегледник фотографија"
#: ../extensions/Exporters/CDExport/CDExport.addin.xml.h:1
msgid "_CD..."
msgstr "_ЦД..."
#: ../extensions/Exporters/CDExport/CDExport.cs:162
-#: ../extensions/Exporters/FolderExport/FolderExport.cs:392
-#: ../src/CameraFileSelectionDialog.cs:199
msgid "Transferring Pictures"
msgstr "Пребацујем слике"
@@ -38,37 +70,34 @@ msgstr "Пребацујем слику „{0}“ на ЦД"
#. Note for translators: This indicates the current photo is photo {0} of {1} out of photos
#: ../extensions/Exporters/CDExport/CDExport.cs:220
-#: ../extensions/Exporters/FlickrExport/FlickrExport.cs:349
-#: ../extensions/Exporters/FolderExport/FolderExport.cs:245
+#: ../extensions/Exporters/FlickrExport/FlickrExport.cs:350
+#: ../extensions/Exporters/FolderExport/FolderExport.cs:220
#: ../extensions/Exporters/GalleryExport/GalleryExport.cs:781
-#: ../src/MainWindow.cs:638 ../src/UI.Dialog/AdjustTimeDialog.cs:129
-#: ../src/UI.Dialog/ProgressDialog.cs:92
+#: ../src/MainWindow.cs:653 ../src/UI.Dialog/AdjustTimeDialog.cs:130
+#: ../src/UI.Dialog/ProgressDialog.cs:90
#, csharp-format
msgid "{0} of {1}"
msgstr "{0} од {1}"
#: ../extensions/Exporters/CDExport/CDExport.cs:233
-#: ../extensions/Exporters/FacebookExport/FacebookExport.cs:379
-#: ../extensions/Exporters/FlickrExport/FlickrExport.cs:379
-#: ../extensions/Exporters/FolderExport/FolderExport.cs:285
+#: ../extensions/Exporters/FacebookExport/FacebookExport.cs:377
+#: ../extensions/Exporters/FlickrExport/FlickrExport.cs:380
#: ../extensions/Exporters/GalleryExport/GalleryExport.cs:806
-#: ../extensions/Exporters/PicasaWebExport/PicasaWebExport.cs:704
+#: ../extensions/Exporters/PicasaWebExport/PicasaWebExport.cs:705
#: ../extensions/Exporters/SmugMugExport/SmugMugExport.cs:607
msgid "Done Sending Photos"
msgstr "Слање фотографија је завршено"
#: ../extensions/Exporters/CDExport/CDExport.cs:235
-#: ../extensions/Exporters/FolderExport/FolderExport.cs:287
msgid "Transfer Complete"
msgstr "Пренос је завршен"
#: ../extensions/Exporters/CDExport/CDExport.cs:242
-#: ../extensions/Exporters/FolderExport/FolderExport.cs:292
msgid "Error While Transferring"
msgstr "Грешка у току пребацивања"
#: ../extensions/Exporters/CDExport/CDExport.cs:250
-#: ../extensions/Exporters/FolderExport/FolderExport.cs:311
+#: ../extensions/Exporters/FolderExport/FolderExport.cs:278
msgid "Error Transferring"
msgstr "Грешка у преацивању"
@@ -88,7 +117,7 @@ msgstr "<b>Слике за упис на ЦД</b>"
#: ../extensions/Exporters/FolderExport/FolderExport.glade.h:7
#: ../extensions/Exporters/GalleryExport/GalleryExport.glade.h:7
#: ../extensions/Exporters/SmugMugExport/SmugMugExport.glade.h:5
-#: ../src/f-spot.glade.h:28
+#: ../src/f-spot.glade.h:20
msgid "Autorotate"
msgstr "Сам ротирај"
@@ -97,7 +126,7 @@ msgid "Create CD"
msgstr "Направи ЦД"
#: ../extensions/Exporters/CDExport/CDExport.ui.h:5
-#: ../src/Widgets/InfoBox.cs:220
+#: ../src/Widgets/InfoBox.cs:222
msgid "Size"
msgstr "Величина"
@@ -115,7 +144,8 @@ msgstr "_Разгледај претходно заказане датотеке
#: ../extensions/Exporters/GalleryExport/GalleryExport.glade.h:15
#: ../extensions/Exporters/PicasaWebExport/PicasaWebExport.glade.h:20
#: ../extensions/Exporters/SmugMugExport/SmugMugExport.glade.h:12
-#: ../src/f-spot.glade.h:95
+#: ../extensions/Exporters/TabbloExport/ui/TabbloExport.ui.h:9
+#: ../src/f-spot.glade.h:66
msgid "_Export"
msgstr "И_звези"
@@ -145,39 +175,35 @@ msgstr ""
"Када се директно повежете на Фејсбук вратите се у програм и кликните на „У "
"реду“."
-#: ../extensions/Exporters/FacebookExport/FacebookExport.cs:279
+#: ../extensions/Exporters/FacebookExport/FacebookExport.cs:281
msgid "Too many images to export"
msgstr "Превише слика за извоз"
-#: ../extensions/Exporters/FacebookExport/FacebookExport.cs:280
+#: ../extensions/Exporters/FacebookExport/FacebookExport.cs:282
+#, csharp-format
+#| msgid ""
+#| "Facebook only permits 60 photographs per album. Please refine your "
+#| "selection and try again."
msgid ""
-"Facebook only permits 60 photographs per album. Please refine your "
+"Facebook only permits {0} photographs per album. Please refine your "
"selection and try again."
msgstr ""
-"Фејсбук дозвољава до 60 фотографија по албуму. Смањите ваш избор и "
+"Фејсбук дозвољава до {0} фотографија по албуму. Смањите ваш избор и "
"покушајте поново."
#: ../extensions/Exporters/FacebookExport/FacebookExport.cs:297
-#: ../extensions/Exporters/FlickrExport/FlickrExport.cs:475
-#: ../extensions/Exporters/GalleryExport/GalleryExport.cs:730
-#: ../extensions/Exporters/PicasaWebExport/PicasaWebExport.cs:597
-#: ../extensions/Exporters/SmugMugExport/SmugMugExport.cs:522
-msgid "Uploading Pictures"
-msgstr "Шаљем слике"
-
-#: ../extensions/Exporters/FacebookExport/FacebookExport.cs:318
msgid "Album must have a name"
msgstr "Морате именовати албум"
-#: ../extensions/Exporters/FacebookExport/FacebookExport.cs:319
+#: ../extensions/Exporters/FacebookExport/FacebookExport.cs:298
msgid "Please name your album or choose an existing album."
msgstr "Унесите име албума или изаберите постојећи албум."
-#: ../extensions/Exporters/FacebookExport/FacebookExport.cs:333
+#: ../extensions/Exporters/FacebookExport/FacebookExport.cs:312
msgid "Creating a new album failed"
msgstr "Образовање новог албума није успело"
-#: ../extensions/Exporters/FacebookExport/FacebookExport.cs:334
+#: ../extensions/Exporters/FacebookExport/FacebookExport.cs:313
#, csharp-format
msgid ""
"An error occurred creating a new album.\n"
@@ -188,42 +214,53 @@ msgstr ""
"\n"
"{0}"
-#: ../extensions/Exporters/FacebookExport/FacebookExport.cs:356
-#: ../extensions/Exporters/PicasaWebExport/PicasaWebExport.cs:660
+#: ../extensions/Exporters/FacebookExport/FacebookExport.cs:326
+#: ../extensions/Exporters/FlickrExport/FlickrExport.cs:476
+#: ../extensions/Exporters/GalleryExport/GalleryExport.cs:730
+#: ../extensions/Exporters/PicasaWebExport/PicasaWebExport.cs:598
+#: ../extensions/Exporters/SmugMugExport/SmugMugExport.cs:522
+msgid "Uploading Pictures"
+msgstr "Шаљем слике"
+
+#: ../extensions/Exporters/FacebookExport/FacebookExport.cs:354
+#: ../extensions/Exporters/PicasaWebExport/PicasaWebExport.cs:661
#: ../extensions/Exporters/SmugMugExport/SmugMugExport.cs:565
#, csharp-format
msgid "Uploading picture \"{0}\" ({1} of {2})"
msgstr "Шаљем слику „{0}“ ({1} од {2})"
-#: ../extensions/Exporters/FacebookExport/FacebookExport.cs:370
+#: ../extensions/Exporters/FacebookExport/FacebookExport.cs:368
#, csharp-format
msgid "Error Uploading To Facebook: {0}"
msgstr "Грешка при слању на Фејсбук: {0}"
-#: ../extensions/Exporters/FacebookExport/FacebookExport.cs:371
-#: ../extensions/Exporters/FlickrExport/FlickrExport.cs:370
-#: ../extensions/Exporters/FolderExport/FolderExport.cs:250
+#: ../extensions/Exporters/FacebookExport/FacebookExport.cs:369
+#: ../extensions/Exporters/FlickrExport/FlickrExport.cs:371
+#: ../extensions/Exporters/FolderExport/FolderExport.cs:226
#: ../extensions/Exporters/GalleryExport/GalleryExport.cs:797
-#: ../extensions/Exporters/PicasaWebExport/PicasaWebExport.cs:693
+#: ../extensions/Exporters/PicasaWebExport/PicasaWebExport.cs:694
#: ../extensions/Exporters/SmugMugExport/SmugMugExport.cs:596
#: ../extensions/Exporters/TabbloExport/TabbloExport.cs:319
-#: ../lib/mono-addins/Mono.Addins.Gui/gtk-gui/Mono.Addins.Gui.ErrorDialog.cs:40
msgid "Error"
msgstr "Грешка"
-#: ../extensions/Exporters/FacebookExport/FacebookExport.cs:381
-#: ../extensions/Exporters/FlickrExport/FlickrExport.cs:381
+#: ../extensions/Exporters/FacebookExport/FacebookExport.cs:379
+#: ../extensions/Exporters/FlickrExport/FlickrExport.cs:382
#: ../extensions/Exporters/GalleryExport/GalleryExport.cs:808
-#: ../extensions/Exporters/PicasaWebExport/PicasaWebExport.cs:706
+#: ../extensions/Exporters/PicasaWebExport/PicasaWebExport.cs:707
#: ../extensions/Exporters/SmugMugExport/SmugMugExport.cs:609
msgid "Upload Complete"
msgstr "Слање је завршено"
-#: ../extensions/Exporters/FacebookExport/FacebookExportDialog.cs:211
+#: ../extensions/Exporters/FacebookExport/FacebookExport.cs:382
+msgid "Visit F-Spot group on Facebook"
+msgstr "Посетите Фејсбук групу Ф-броја"
+
+#: ../extensions/Exporters/FacebookExport/FacebookExportDialog.cs:212
msgid "Waiting for authentication"
msgstr "Чекам на пријаву"
-#: ../extensions/Exporters/FacebookExport/FacebookExportDialog.cs:212
+#: ../extensions/Exporters/FacebookExport/FacebookExportDialog.cs:213
msgid ""
"F-Spot will now launch your browser so that you can log into Facebook.\n"
"\n"
@@ -237,15 +274,15 @@ msgstr ""
"Уколико је могуће, Ф-број ће сачувати вашу пријаву међу гномове привеске и "
"искористити га за следеће пријаве на Фејсбук."
-#: ../extensions/Exporters/FacebookExport/FacebookExportDialog.cs:217
+#: ../extensions/Exporters/FacebookExport/FacebookExportDialog.cs:218
msgid "Authenticating..."
msgstr "Пријављујем се..."
-#: ../extensions/Exporters/FacebookExport/FacebookExportDialog.cs:227
+#: ../extensions/Exporters/FacebookExport/FacebookExportDialog.cs:228
msgid "Error logging into Facebook"
msgstr "Грешка при повезивању на Фејсбук"
-#: ../extensions/Exporters/FacebookExport/FacebookExportDialog.cs:228
+#: ../extensions/Exporters/FacebookExport/FacebookExportDialog.cs:229
msgid ""
"There was a problem logging into Facebook. Check your credentials and try "
"again."
@@ -253,23 +290,23 @@ msgstr ""
"Јавила се грешка про пријави на Фејсбук. Проверите акредитивно писмо и "
"покушајте поново."
-#: ../extensions/Exporters/FacebookExport/FacebookExportDialog.cs:237
+#: ../extensions/Exporters/FacebookExport/FacebookExportDialog.cs:238
msgid "Authorizing Session"
msgstr "Овласти везу"
-#: ../extensions/Exporters/FacebookExport/FacebookExportDialog.cs:246
+#: ../extensions/Exporters/FacebookExport/FacebookExportDialog.cs:247
msgid "Session established, fetching user info..."
msgstr "Веза је успостављена, преузимам податке..."
-#: ../extensions/Exporters/FacebookExport/FacebookExportDialog.cs:252
+#: ../extensions/Exporters/FacebookExport/FacebookExportDialog.cs:253
msgid "Session established, fetching friend list..."
msgstr "Веза је успостављена, преузимам списак другова..."
-#: ../extensions/Exporters/FacebookExport/FacebookExportDialog.cs:262
+#: ../extensions/Exporters/FacebookExport/FacebookExportDialog.cs:263
msgid "Session established, fetching friend details..."
msgstr "Веза је успостављена, преузимам податке о друговима..."
-#: ../extensions/Exporters/FacebookExport/FacebookExportDialog.cs:272
+#: ../extensions/Exporters/FacebookExport/FacebookExportDialog.cs:275
msgid "Session established, fetching photo albums..."
msgstr "Веза је успостављена, преузимам фото-албуме..."
@@ -279,11 +316,11 @@ msgstr "Веза је успостављена, преузимам фото-ал
msgid "{0} {1} is logged into Facebook"
msgstr "{0} {1} је пријављен на Фејсбук"
-#: ../extensions/Exporters/FacebookExport/FacebookExportDialog.cs:291
+#: ../extensions/Exporters/FacebookExport/FacebookExportDialog.cs:294
msgid "Facebook Connection Error"
msgstr "Грешка приликом повезивања на Фејсбук"
-#: ../extensions/Exporters/FacebookExport/FacebookExportDialog.cs:292
+#: ../extensions/Exporters/FacebookExport/FacebookExportDialog.cs:295
#, csharp-format
msgid ""
"There was an error when downloading your information from Facebook.\n"
@@ -294,7 +331,7 @@ msgstr ""
"\n"
"Фејсбук је одговорио: {0}"
-#: ../extensions/Exporters/FacebookExport/FacebookExportDialog.cs:321
+#: ../extensions/Exporters/FacebookExport/FacebookExportDialog.cs:324
msgid "You are not logged in."
msgstr "Нисте пријављени."
@@ -336,8 +373,7 @@ msgid "Logout"
msgstr "Одјави се"
#: ../extensions/Exporters/FacebookExport/FacebookExport.ui.h:10
-#: ../lib/mono-addins/Mono.Addins.Gui/Mono.Addins.Gui/ManageSitesDialog.cs:51
-#: ../src/Widgets/InfoBox.cs:211
+#: ../src/Widgets/InfoBox.cs:213
msgid "Name"
msgstr "Назив"
@@ -373,12 +409,12 @@ msgstr "_Фликр..."
msgid "_Zooomr..."
msgstr "_Зооомр..."
-#: ../extensions/Exporters/FlickrExport/FlickrExport.cs:105
+#: ../extensions/Exporters/FlickrExport/FlickrExport.cs:106
#: ../extensions/Exporters/FlickrExport/FlickrExport.glade.h:5
msgid "Authorize"
msgstr "Овласти"
-#: ../extensions/Exporters/FlickrExport/FlickrExport.cs:111
+#: ../extensions/Exporters/FlickrExport/FlickrExport.cs:112
#, csharp-format
msgid ""
"Return to this window after you have finished the authorization process on "
@@ -387,60 +423,59 @@ msgstr ""
"Вратите се на ово прозорче након овлашћивања на {0} и притисните дугме "
"„Заврши овлашћење“"
-#: ../extensions/Exporters/FlickrExport/FlickrExport.cs:112
+#: ../extensions/Exporters/FlickrExport/FlickrExport.cs:113
msgid "Complete Authorization"
msgstr "Заврши овлашћивање"
-#: ../extensions/Exporters/FlickrExport/FlickrExport.cs:117
+#: ../extensions/Exporters/FlickrExport/FlickrExport.cs:118
#, csharp-format
msgid "Logging into {0}"
msgstr "Пријави се на {0}"
-#: ../extensions/Exporters/FlickrExport/FlickrExport.cs:118
+#: ../extensions/Exporters/FlickrExport/FlickrExport.cs:119
msgid "Checking credentials..."
msgstr "Проверавам уверења..."
-#: ../extensions/Exporters/FlickrExport/FlickrExport.cs:125
+#: ../extensions/Exporters/FlickrExport/FlickrExport.cs:126
#, csharp-format
msgid "Welcome {0} you are connected to {1}"
msgstr "Добродошли {0}, повезани сте на {1}"
-#: ../extensions/Exporters/FlickrExport/FlickrExport.cs:128
+#: ../extensions/Exporters/FlickrExport/FlickrExport.cs:129
#, csharp-format
msgid "Sign in as a different user"
msgstr "Пријави се као други корисник"
-#: ../extensions/Exporters/FlickrExport/FlickrExport.cs:133
+#: ../extensions/Exporters/FlickrExport/FlickrExport.cs:134
#, csharp-format
msgid "Used {0} of your allowed {1} monthly quota"
msgstr "Искоришћено {0} од ваше дозвољене {1} месечне квоте"
-#: ../extensions/Exporters/FlickrExport/FlickrExport.cs:297
+#: ../extensions/Exporters/FlickrExport/FlickrExport.cs:298
msgid "Unable to log on"
msgstr "Не могу да се пријавим"
-#: ../extensions/Exporters/FlickrExport/FlickrExport.cs:317
+#: ../extensions/Exporters/FlickrExport/FlickrExport.cs:318
#, csharp-format
msgid "Waiting for response {0} of {1}"
msgstr "Чекам одговор {0} од {1}"
-#: ../extensions/Exporters/FlickrExport/FlickrExport.cs:344
-#: ../extensions/Exporters/FolderExport/FolderExport.cs:242
+#: ../extensions/Exporters/FlickrExport/FlickrExport.cs:345
#: ../extensions/Exporters/GalleryExport/GalleryExport.cs:777
#, csharp-format
msgid "Uploading picture \"{0}\""
msgstr "Шаљем слику „{0}“"
-#: ../extensions/Exporters/FlickrExport/FlickrExport.cs:367
+#: ../extensions/Exporters/FlickrExport/FlickrExport.cs:368
#, csharp-format
msgid "Error Uploading To {0}: {1}"
msgstr "Грешка при слању на {0}: {1}"
-#: ../extensions/Exporters/FlickrExport/FlickrExport.cs:454
+#: ../extensions/Exporters/FlickrExport/FlickrExport.cs:455
msgid "Unable to log on."
msgstr "Не могу да се пријавим."
-#: ../extensions/Exporters/FlickrExport/FlickrExport.cs:455
+#: ../extensions/Exporters/FlickrExport/FlickrExport.cs:456
#, csharp-format
msgid ""
"F-Spot was unable to log on to {0}. Make sure you have given the "
@@ -450,7 +485,6 @@ msgstr ""
"користећи окружење Интернет прегледника {0}."
#: ../extensions/Exporters/FlickrExport/FlickrExport.glade.h:1
-#: ../src/f-spot.glade.h:8
msgid "<b>Account</b>"
msgstr "<b>Налог</b>"
@@ -459,7 +493,8 @@ msgstr "<b>Налог</b>"
#: ../extensions/Exporters/GalleryExport/GalleryExport.glade.h:3
#: ../extensions/Exporters/PicasaWebExport/PicasaWebExport.glade.h:2
#: ../extensions/Exporters/SmugMugExport/SmugMugExport.glade.h:2
-#: ../src/f-spot.glade.h:14 ../src/UI.Dialog/ui/AdjustTimeDialog.ui.h:5
+#: ../extensions/Exporters/TabbloExport/ui/TabbloExport.ui.h:2
+#: ../src/f-spot.glade.h:8 ../src/UI.Dialog/ui/AdjustTimeDialog.ui.h:5
msgid "<b>Photos</b>"
msgstr "<b>Фотографије</b>"
@@ -468,7 +503,7 @@ msgstr "<b>Фотографије</b>"
#: ../extensions/Exporters/GalleryExport/GalleryExport.glade.h:4
#: ../extensions/Exporters/PicasaWebExport/PicasaWebExport.glade.h:4
#: ../extensions/Exporters/SmugMugExport/SmugMugExport.glade.h:4
-#: ../src/f-spot.glade.h:16
+#: ../src/f-spot.glade.h:10
msgid "<b>Style</b>"
msgstr "<b>Стил</b>"
@@ -480,7 +515,7 @@ msgstr "<b>Овлашћења прегледа</b>"
#: ../extensions/Exporters/GalleryExport/GalleryExport.glade.h:8
#: ../extensions/Exporters/PicasaWebExport/PicasaWebExport.glade.h:9
#: ../extensions/Exporters/SmugMugExport/SmugMugExport.glade.h:6
-#: ../src/f-spot.glade.h:43
+#: ../extensions/Exporters/TabbloExport/ui/TabbloExport.ui.h:5
msgid "Export"
msgstr "Извези"
@@ -524,7 +559,6 @@ msgstr "Видљиво пријатељима"
#: ../extensions/Exporters/FlickrExport/FlickrExport.glade.h:16
#: ../extensions/Exporters/PicasaWebExport/PicasaWebExport.glade.h:21
-#: ../src/f-spot.glade.h:96
msgid "_Export tags"
msgstr "Извези _ознаке"
@@ -533,7 +567,6 @@ msgstr "Извези _ознаке"
#: ../extensions/Exporters/GalleryExport/GalleryExport.glade.h:21
#: ../extensions/Exporters/PicasaWebExport/PicasaWebExport.glade.h:25
#: ../extensions/Exporters/SmugMugExport/SmugMugExport.glade.h:15
-#: ../src/f-spot.glade.h:109
msgid "_Resize to: "
msgstr "_Величина на: "
@@ -546,7 +579,6 @@ msgstr "_Погледај слике у разгледачу по завршен
#: ../extensions/Exporters/GalleryExport/GalleryExport.glade.h:24
#: ../extensions/Exporters/PicasaWebExport/PicasaWebExport.glade.h:27
#: ../extensions/Exporters/SmugMugExport/SmugMugExport.glade.h:17
-#: ../src/f-spot.glade.h:125
msgid "pixels"
msgstr "тачака"
@@ -554,80 +586,104 @@ msgstr "тачака"
msgid "F_older..."
msgstr "_Директоријум..."
-#: ../extensions/Exporters/FolderExport/FolderExport.cs:140
+#: ../extensions/Exporters/FolderExport/FolderExport.cs:120
msgid "Select Export Folder"
msgstr "Изаберите директоријум за извоз"
-#: ../extensions/Exporters/FolderExport/FolderExport.cs:198
+#: ../extensions/Exporters/FolderExport/FolderExport.cs:173
msgid "Building Gallery"
msgstr "Правим галерију"
-#: ../extensions/Exporters/FolderExport/FolderExport.cs:248
+#: ../extensions/Exporters/FolderExport/FolderExport.cs:217
#, csharp-format
-msgid "Error uploading picture \"{0}\" to Gallery:{2}{1}"
-msgstr "Грешка при слању слике „{0}“ у Галерију:{2}{1}"
+#| msgid "Exporting picture \"{0}\""
+msgid "Exporting \"{0}\"..."
+msgstr "Извозим „{0}“..."
-#: ../extensions/Exporters/FolderExport/FolderExport.cs:333
-msgid "Error: Error while transferring; Aborting"
-msgstr "Грешка: грешка у току пребацивања; одустајем"
+#: ../extensions/Exporters/FolderExport/FolderExport.cs:224
+#, csharp-format
+#| msgid "Error uploading picture \"{0}\" to Gallery:{2}{1}"
+msgid "Error Copying \"{0}\" to Gallery:{2}{1}"
+msgstr "Грешка при копирању „{0}“ у Галерију:{2}{1}"
-#: ../extensions/Exporters/FolderExport/FolderExport.cs:336
-msgid "Error: File Already Exists; Aborting"
-msgstr "Грешка: датотека већ постоји; одустајем"
+#: ../extensions/Exporters/FolderExport/FolderExport.cs:250
+#, csharp-format
+#| msgid "Transferring picture \"{0}\" To CD"
+msgid "Transferring to \"{0}\""
+msgstr "Пребацујем на „{0}“"
+
+#: ../extensions/Exporters/FolderExport/FolderExport.cs:251
+#| msgid "Error Transferring"
+msgid "Transferring..."
+msgstr "Пребацујем..."
+
+#. No need to check result here as if result is not true, an Exception will be thrown before
+#: ../extensions/Exporters/FolderExport/FolderExport.cs:256
+#| msgid "Upload Complete"
+msgid "Export Complete."
+msgstr "Извоз је завршен."
+
+#: ../extensions/Exporters/FolderExport/FolderExport.cs:258
+msgid "Exporting Photos Completed."
+msgstr "Извоз фотографија је завршен."
+
+#: ../extensions/Exporters/FolderExport/FolderExport.cs:325
+#| msgid "Export to"
+msgid "Exporting Photos"
+msgstr "Извозим фотографије"
#. Note for translators: light as clear, opposite as dark
-#: ../extensions/Exporters/FolderExport/FolderExport.cs:803
+#: ../extensions/Exporters/FolderExport/FolderExport.cs:743
msgid "Light"
msgstr "Светло"
-#: ../extensions/Exporters/FolderExport/FolderExport.cs:804
+#: ../extensions/Exporters/FolderExport/FolderExport.cs:744
msgid "Dark"
msgstr "Мрак"
#. Abbreviation of previous
-#: ../extensions/Exporters/FolderExport/FolderExport.cs:984
+#: ../extensions/Exporters/FolderExport/FolderExport.cs:924
msgid "Prev"
msgstr "Прет"
-#: ../extensions/Exporters/FolderExport/FolderExport.cs:986
-#: ../extensions/Exporters/FolderExport/FolderExport.cs:1227
-#: ../src/CameraFileSelectionDialog.cs:82
+#: ../extensions/Exporters/FolderExport/FolderExport.cs:926
+#: ../extensions/Exporters/FolderExport/FolderExport.cs:1167
msgid "Index"
msgstr "Попис"
#. Don't care otherwise, Tags sounds reasonable
-#: ../extensions/Exporters/FolderExport/FolderExport.cs:989
-#: ../extensions/Exporters/FolderExport/FolderExport.cs:1161
-#: ../extensions/Exporters/FolderExport/FolderExport.cs:1201
-#: ../src/MainWindow.cs:342 ../src/Widgets/Sidebar.cs:64
+#: ../extensions/Exporters/FolderExport/FolderExport.cs:929
+#: ../extensions/Exporters/FolderExport/FolderExport.cs:1101
+#: ../extensions/Exporters/FolderExport/FolderExport.cs:1141
+#: ../src/MainWindow.cs:357 ../src/Widgets/Sidebar.cs:56
msgid "Tags"
msgstr "Ознаке"
-#: ../extensions/Exporters/FolderExport/FolderExport.cs:992
-#: ../src/f-spot.glade.h:57 ../src/ItemAction.cs:102
+#: ../extensions/Exporters/FolderExport/FolderExport.cs:932
+#: ../src/ItemAction.cs:102
msgid "Next"
msgstr "Следећа"
-#: ../extensions/Exporters/FolderExport/FolderExport.cs:1096
+#: ../extensions/Exporters/FolderExport/FolderExport.cs:1036
msgid "Gallery generated by"
msgstr "Галерија је направљена помоћу"
-#: ../extensions/Exporters/FolderExport/FolderExport.cs:1136
+#: ../extensions/Exporters/FolderExport/FolderExport.cs:1076
msgid "Show Styles"
msgstr "Прикажи стилове"
-#: ../extensions/Exporters/FolderExport/FolderExport.cs:1137
+#: ../extensions/Exporters/FolderExport/FolderExport.cs:1077
msgid "Hide Styles"
msgstr "Сакриј стилове"
-#: ../extensions/Exporters/FolderExport/FolderExport.cs:1172
-#: ../extensions/Exporters/FolderExport/FolderExport.cs:1173
-#: ../src/ui/main_window.ui.h:24
+#: ../extensions/Exporters/FolderExport/FolderExport.cs:1112
+#: ../extensions/Exporters/FolderExport/FolderExport.cs:1113
+#: ../src/ui/main_window.ui.h:25
msgid "Tags: "
msgstr "Ознаке: "
-#: ../extensions/Exporters/FolderExport/FolderExport.cs:1304
-#: ../extensions/Exporters/FolderExport/FolderExport.cs:1437
+#: ../extensions/Exporters/FolderExport/FolderExport.cs:1244
+#: ../extensions/Exporters/FolderExport/FolderExport.cs:1377
msgid "Page:"
msgstr "Страница:"
@@ -636,7 +692,6 @@ msgid "\n"
msgstr "\n"
#: ../extensions/Exporters/FolderExport/FolderExport.glade.h:3
-#: ../src/f-spot.glade.h:11
msgid "<b>Destination</b>"
msgstr "<b>Одредиште</b>"
@@ -684,11 +739,15 @@ msgstr "_Фасцикла:"
msgid "_Save the files only"
msgstr "_Сачувај само датотеке"
+#: ../extensions/Exporters/GalleryExport/FormClient.cs:294
+msgid "Unhandled exception"
+msgstr "Нерешив изузетак"
+
#: ../extensions/Exporters/GalleryExport/GalleryExport.addin.xml.h:1
msgid "Web _Gallery..."
msgstr "_Веб галерију..."
-#: ../extensions/Exporters/GalleryExport/GalleryExport.cs:52
+#: ../extensions/Exporters/GalleryExport/GalleryExport.cs:53
msgid ""
"Cannot connect to a Gallery for which the version is unknown.\n"
"Please check that you have Remote plugin 1.0.8 or later"
@@ -752,25 +811,25 @@ msgid "Error uploading picture \"{0}\" to Gallery: {1}"
msgstr "Грешка при слању слике „{0}“ у Галерију: {1}"
#: ../extensions/Exporters/GalleryExport/GalleryExport.cs:824
-#: ../extensions/Exporters/PicasaWebExport/PicasaWebExport.cs:727
+#: ../extensions/Exporters/PicasaWebExport/PicasaWebExport.cs:728
#: ../extensions/Exporters/SmugMugExport/SmugMugExport.cs:630
msgid "(No Gallery)"
msgstr "(Без Галерије)"
#: ../extensions/Exporters/GalleryExport/GalleryExport.cs:916
-#: ../extensions/Exporters/PicasaWebExport/PicasaWebExport.cs:849
+#: ../extensions/Exporters/PicasaWebExport/PicasaWebExport.cs:850
#: ../extensions/Exporters/SmugMugExport/SmugMugExport.cs:726
msgid "(Not Connected)"
msgstr "(Није повезан)"
#: ../extensions/Exporters/GalleryExport/GalleryExport.cs:917
-#: ../extensions/Exporters/PicasaWebExport/PicasaWebExport.cs:850
+#: ../extensions/Exporters/PicasaWebExport/PicasaWebExport.cs:851
#: ../extensions/Exporters/SmugMugExport/SmugMugExport.cs:727
msgid "(No Albums)"
msgstr "(Нема албума)"
#: ../extensions/Exporters/GalleryExport/GalleryExport.cs:969
-#: ../extensions/Exporters/PicasaWebExport/PicasaWebExport.cs:915
+#: ../extensions/Exporters/PicasaWebExport/PicasaWebExport.cs:916
#: ../extensions/Exporters/SmugMugExport/SmugMugExport.cs:768
msgid "No account selected"
msgstr "Нису изабрани налози"
@@ -778,12 +837,10 @@ msgstr "Нису изабрани налози"
#: ../extensions/Exporters/GalleryExport/GalleryExport.glade.h:1
#: ../extensions/Exporters/PicasaWebExport/PicasaWebExport.glade.h:1
#: ../extensions/Exporters/SmugMugExport/SmugMugExport.glade.h:1
-#: ../src/f-spot.glade.h:9
msgid "<b>Album</b>"
msgstr "<b>Албум</b>"
#: ../extensions/Exporters/GalleryExport/GalleryExport.glade.h:2
-#: ../src/f-spot.glade.h:12
msgid "<b>Gallery</b>"
msgstr "<b>Галерија</b>"
@@ -825,7 +882,6 @@ msgstr "_Опис:"
#: ../extensions/Exporters/GalleryExport/GalleryExport.glade.h:16
#: ../extensions/Exporters/PicasaWebExport/PicasaWebExport.glade.h:22
#: ../extensions/Exporters/SmugMugExport/SmugMugExport.glade.h:13
-#: ../src/f-spot.glade.h:97
msgid "_Export to Album:"
msgstr "Извези у _албум:"
@@ -845,6 +901,7 @@ msgstr "_Родитељски албум:"
#: ../extensions/Exporters/GalleryExport/GalleryExport.glade.h:20
#: ../extensions/Exporters/PicasaWebExport/PicasaWebExport.glade.h:24
#: ../extensions/Exporters/SmugMugExport/SmugMugExport.glade.h:14
+#: ../extensions/Exporters/TabbloExport/ui/TabbloExport.ui.h:10
msgid "_Password:"
msgstr "_Лозинка:"
@@ -855,23 +912,24 @@ msgstr "_Наслов:"
#: ../extensions/Exporters/GalleryExport/GalleryExport.glade.h:23
#: ../extensions/Exporters/PicasaWebExport/PicasaWebExport.glade.h:26
#: ../extensions/Exporters/SmugMugExport/SmugMugExport.glade.h:16
+#: ../extensions/Exporters/TabbloExport/ui/TabbloExport.ui.h:11
msgid "_Username:"
msgstr "_Корисничко име:"
-#: ../extensions/Exporters/GalleryExport/GalleryRemote.cs:361
+#: ../extensions/Exporters/GalleryExport/GalleryRemote.cs:362
msgid "Error reading server response"
msgstr "Грешка у читању одговора са сервера"
#. failed to find the response
-#: ../extensions/Exporters/GalleryExport/GalleryRemote.cs:373
+#: ../extensions/Exporters/GalleryExport/GalleryRemote.cs:374
msgid "Server returned response without Gallery content"
msgstr "Сервер је вратио одговор без садржаја Гелерије"
-#: ../extensions/Exporters/GalleryExport/GalleryRemote.cs:710
+#: ../extensions/Exporters/GalleryExport/GalleryRemote.cs:711
msgid "Error while creating new album"
msgstr "Грешка приликом прављења новог албума"
-#: ../extensions/Exporters/GalleryExport/GalleryRemote.cs:711
+#: ../extensions/Exporters/GalleryExport/GalleryRemote.cs:712
#, csharp-format
msgid ""
"The following error was encountered while attempting to perform the "
@@ -885,38 +943,38 @@ msgstr ""
msgid "_PicasaWeb..."
msgstr "_ПикасаВеб..."
-#: ../extensions/Exporters/PicasaWebExport/PicasaWebExport.cs:441
+#: ../extensions/Exporters/PicasaWebExport/PicasaWebExport.cs:442
msgid "Error while creating Album"
msgstr "Грешка приликом прављења албума"
-#: ../extensions/Exporters/PicasaWebExport/PicasaWebExport.cs:442
+#: ../extensions/Exporters/PicasaWebExport/PicasaWebExport.cs:443
#, csharp-format
msgid ""
"The following error was encountered while attempting to create an album: {0}"
msgstr "Јавила се следећа грешка при покушају да направим албум: {0}"
-#: ../extensions/Exporters/PicasaWebExport/PicasaWebExport.cs:620
+#: ../extensions/Exporters/PicasaWebExport/PicasaWebExport.cs:621
#, csharp-format
msgid "{0} Sent"
msgstr "{0} послато"
-#: ../extensions/Exporters/PicasaWebExport/PicasaWebExport.cs:622
+#: ../extensions/Exporters/PicasaWebExport/PicasaWebExport.cs:623
#, csharp-format
msgid "{0} of approx. {1}"
msgstr "{0} од приближно {1}"
-#: ../extensions/Exporters/PicasaWebExport/PicasaWebExport.cs:691
+#: ../extensions/Exporters/PicasaWebExport/PicasaWebExport.cs:692
#: ../extensions/Exporters/SmugMugExport/SmugMugExport.cs:594
#, csharp-format
msgid "Error Uploading To Gallery: {0}"
msgstr "Грешка при слању у Галерију: {0}"
-#: ../extensions/Exporters/PicasaWebExport/PicasaWebExport.cs:778
+#: ../extensions/Exporters/PicasaWebExport/PicasaWebExport.cs:779
#, csharp-format
msgid "Available space: {0}, {1}% used out of {2}"
msgstr "Слободан простор: {0}, {1}% заузето од {2}"
-#: ../extensions/Exporters/PicasaWebExport/PicasaWebExport.cs:891
+#: ../extensions/Exporters/PicasaWebExport/PicasaWebExport.cs:892
#, csharp-format
msgid ""
"The selected album has a limit of {0} pictures,\n"
@@ -1003,12 +1061,74 @@ msgstr "Слање је завршено"
msgid "Error uploading to Tabblo: "
msgstr "Грешка при слању на Таббло: "
+#: ../extensions/Exporters/TabbloExport/ui/TabbloExport.ui.h:1
+#| msgid "<b>Import Settings</b>"
+msgid "<b>F-Spot tags</b>"
+msgstr "<b>Ф-број ознаке</b>"
+
+#: ../extensions/Exporters/TabbloExport/ui/TabbloExport.ui.h:3
+msgid "<b>Tabblo account</b>"
+msgstr "<b>Таббло налог</b>"
+
+#: ../extensions/Exporters/TabbloExport/ui/TabbloExport.ui.h:4
+msgid ""
+"<small><i>F-Spot tags can help you track the export status of photos. "
+"Example: Use one tag for the photos that you plan to export, and another one "
+"for those already exported. Here, you can tell F-Spot to automatically "
+"replace these tags as appropriate.</i></small>"
+msgstr ""
+"<small><i>Ф-број ознаке вам могу помоћи да пратите извоз фотографија. "
+"Уколико употребите једну ознаку за све фотографије које желите да извезете, "
+"а неку другу за оне које сте већ извезли, Ф-број вам може помоћи тако што ће "
+"аутоматски заменити прву ознаку другом.</i></small>"
+
+#: ../extensions/Exporters/TabbloExport/ui/TabbloExport.ui.h:6
+msgid "Rem_ove from exported photos:"
+msgstr "_Уклони са извезене фотографије:"
+
+#: ../extensions/Exporters/TabbloExport/ui/TabbloExport.ui.h:7
+#| msgid "Select a Tag..."
+msgid "Select..."
+msgstr "Изабери..."
+
+#: ../extensions/Exporters/TabbloExport/ui/TabbloExport.ui.h:8
+msgid "_Attach to exported photos:"
+msgstr "_Додај на извезену фотографије:"
+
+#: ../extensions/Exporters/TabbloExport/ui/TrustError.ui.h:1
+msgid "<b>{0}</b>."
+msgstr "<b>{0}</b>."
+
+#: ../extensions/Exporters/TabbloExport/ui/TrustError.ui.h:2
+msgid "A trust error occured while attempting to access"
+msgstr "Јавила се грешка у овлашћењима при покушају повезивања"
+
+#: ../extensions/Exporters/TabbloExport/ui/TrustError.ui.h:3
+msgid "Abort this session"
+msgstr "Одбаци ову сесију"
+
+#: ../extensions/Exporters/TabbloExport/ui/TrustError.ui.h:4
+msgid "Always trust this site's certificate"
+msgstr "Увек веруј сертификатима са ове адресе"
+
+#: ../extensions/Exporters/TabbloExport/ui/TrustError.ui.h:5
+msgid "Do you wish to:"
+msgstr "Да ли желите да:"
+
+#: ../extensions/Exporters/TabbloExport/ui/TrustError.ui.h:6
+msgid "Trust Error"
+msgstr "Грешка у овлашћењима"
+
+#: ../extensions/Exporters/TabbloExport/ui/TrustError.ui.h:7
+msgid "Trust the site's certificate this once"
+msgstr "Прихвати сертификат са ове адресе само сада"
+
#: ../extensions/Exporters/ZipExport/ZipExport.addin.xml.h:1
msgid "Compressed fil_e..."
msgstr "_Запакована датотека..."
#: ../extensions/Exporters/ZipExport/ZipExport.cs:47
-#: ../src/Widgets/EditorPage.cs:196
+#: ../src/Widgets/EditorPage.cs:198
msgid "No selection available"
msgstr "Ништа није изабрано"
@@ -1034,7 +1154,6 @@ msgid "Preparing photo \"{0}\""
msgstr "Спремам слику „{0}“"
#: ../extensions/Exporters/ZipExport/ZipExport.glade.h:1
-#: ../src/f-spot.glade.h:92
msgid "_Create"
msgstr "_Направи"
@@ -1050,6 +1169,11 @@ msgstr "_Место:"
msgid "_Scale:"
msgstr "_Рашири:"
+#: ../extensions/Tools/HashJob/HashJob.addin.xml.h:1
+#| msgid "Hash for Duplicates"
+msgid "Check for Duplicates..."
+msgstr "Нађи дупликате..."
+
#: ../extensions/Tools/HashJob/HashJob.cs:53
msgid ""
"In order to detect duplicates on pictures you imported before 0.5.0, F-Spot "
@@ -1069,7 +1193,7 @@ msgstr ""
"Тренутно имате {0} фотографија којима треба израчунати md5 и {1} заказаних "
"задатака"
-#: ../extensions/Tools/HashJob/HashJob.cs:75 ../src/ui/main_window.ui.h:37
+#: ../extensions/Tools/HashJob/HashJob.cs:75 ../src/ui/main_window.ui.h:38
msgid "_Close"
msgstr "_Затвори"
@@ -1081,12 +1205,7 @@ msgstr "Обрађујем слике..."
msgid "Stopped"
msgstr "Заустављено"
-#: ../extensions/Tools/HashJob/HashJob.addin.xml.h:1
-msgid "Hash for Duplicates"
-msgstr "Нађи дупликате"
-
#: ../extensions/Tools/LiveWebGallery/GalleryRequestHandler.cs:107
-#| msgid "(No Gallery)"
msgid "F-Spot Gallery"
msgstr "Галерија Ф-броја"
@@ -1095,36 +1214,44 @@ msgid "The web gallery seems to be offline now"
msgstr "Изгледа је је галерија тренутно ван мреже"
#: ../extensions/Tools/LiveWebGallery/GalleryRequestHandler.cs:109
-#| msgid "Show Styles"
msgid "Show All"
msgstr "Прикажи све"
#: ../extensions/Tools/LiveWebGallery/GalleryRequestHandler.cs:119
#, csharp-format
-#| msgid "{0} Photo"
-#| msgid_plural "{0} Photos"
msgid "{0} photo"
msgid_plural "{0} photos"
msgstr[0] "{0} слика"
msgstr[1] "{0} слике"
msgstr[2] "{0} слика"
+msgstr[3] "Једна слика"
#: ../extensions/Tools/LiveWebGallery/GalleryRequestHandler.cs:161
#: ../extensions/Tools/LiveWebGallery/ui/LiveWebGallery.ui.h:8
-#| msgid "Current date:"
msgid "Current View"
msgstr "Тренутни преглед"
#: ../extensions/Tools/LiveWebGallery/GalleryRequestHandler.cs:164
-#| msgid "Delete"
msgid "Selected"
msgstr "Изабрано"
#: ../extensions/Tools/LiveWebGallery/LiveWebGallery.addin.xml.h:1
-#| msgid "Web _Gallery..."
msgid "Live Web Gallery"
msgstr "Веб галерија уживо"
+#: ../extensions/Tools/LiveWebGallery/LiveWebGalleryDialog.cs:89
+msgid "none"
+msgstr "ништа"
+
+#: ../extensions/Tools/LiveWebGallery/LiveWebGalleryDialog.cs:92
+#, csharp-format
+msgid " Gallery: {0}, Photos: {1}, Last client: {3}"
+msgstr " Галерија: {0}, Слика: {1}, Последњи клијент: {3}"
+
+#: ../extensions/Tools/LiveWebGallery/LiveWebGalleryDialog.cs:156
+msgid "Gallery is inactive"
+msgstr "Галерија је недоступна"
+
#: ../extensions/Tools/LiveWebGallery/ui/LiveWebGallery.ui.h:1
msgid ""
"<small><i>The gallery stays active until you either deactivate it or close\n"
@@ -1158,7 +1285,6 @@ msgid "F-Spot Live Web Gallery"
msgstr "Веб галерија Ф-броја"
#: ../extensions/Tools/LiveWebGallery/ui/LiveWebGallery.ui.h:10
-#| msgid "_Gallery:"
msgid "Gallery URL:"
msgstr "Адреса гелерије:"
@@ -1167,47 +1293,26 @@ msgid "Limit number of shared photos to"
msgstr "Ограничи број дотографија за дељење на"
#: ../extensions/Tools/LiveWebGallery/ui/LiveWebGallery.ui.h:12
-#| msgid "Caption"
msgid "Options:"
msgstr "Опције:"
#: ../extensions/Tools/LiveWebGallery/ui/LiveWebGallery.ui.h:13
-#| msgid "Photos per page"
msgid "Photos with a Tag"
msgstr "Слике које су означене"
# bug: no plural forms needed
#: ../extensions/Tools/LiveWebGallery/ui/LiveWebGallery.ui.h:14
-#| msgid "_Delete photo"
-#| msgid_plural "_Delete photos"
msgid "Selected Photos"
msgstr "Изабране фотографије"
#: ../extensions/Tools/LiveWebGallery/ui/LiveWebGallery.ui.h:15
-#| msgid "Sharpen"
msgid "Share:"
msgstr "Дељење:"
#: ../extensions/Tools/LiveWebGallery/ui/LiveWebGallery.ui.h:16
-#| msgid "View"
msgid "Views:"
msgstr "Прегледа:"
-#: ../extensions/Tools/LiveWebGallery/LiveWebGalleryDialog.cs:89
-#| msgid "None"
-msgid "none"
-msgstr "ништа"
-
-#: ../extensions/Tools/LiveWebGallery/LiveWebGalleryDialog.cs:92
-#, csharp-format
-msgid " Gallery: {0}, Photos: {1}, Last client: {3}"
-msgstr " Галерија: {0}, Слика: {1}, Последњи клијент: {3}"
-
-#: ../extensions/Tools/LiveWebGallery/LiveWebGalleryDialog.cs:156
-#| msgid "Gallery generated by"
-msgid "Gallery is inactive"
-msgstr "Галерија је недоступна"
-
#: ../extensions/Tools/MergeDb/MergeDb.addin.xml.h:1
msgid "Merge Db"
msgstr "Споји базе"
@@ -1292,11 +1397,11 @@ msgid "New Rolls Only"
msgstr "Само нова увожења"
#: ../extensions/Tools/MergeDb/MergeDb.glade.h:15
-#: ../src/FileImportBackend.cs:290 ../src/UI.Dialog/ThreadProgressDialog.cs:51
+#: ../src/UI.Dialog/ThreadProgressDialog.cs:57
msgid "Skip"
msgstr "Прескочи"
-#: ../extensions/Tools/MergeDb/PickFolderDialog.cs:33
+#: ../extensions/Tools/MergeDb/PickFolderDialog.cs:34
#, csharp-format
msgid ""
"<big>The database refers to files contained in the <b>{0}</b> folder.\n"
@@ -1334,379 +1439,222 @@ msgstr "Постави Ф-број за чувара екрана"
msgid "Screensaver Configuration"
msgstr "Подешавање чувара екрана"
-#: ../f-spot.desktop.in.in.h:1 ../f-spot-import.desktop.in.in.h:1
-msgid "F-Spot Photo Manager"
-msgstr "Ф-број фото албум"
-
-#: ../f-spot.desktop.in.in.h:2
-msgid "Organize, enjoy, and share your photos"
-msgstr "Организујте, уживајте и поделите ваше фотографије"
-
-#: ../f-spot.desktop.in.in.h:3 ../f-spot-import.desktop.in.in.h:3
-msgid "Photo Manager"
-msgstr "Фото албум"
-
-#: ../f-spot-import.desktop.in.in.h:2
-msgid "Import into F-Spot"
-msgstr "Увези у Ф-број"
+#: ../f-spot.schemas.in.h:1
+msgid "Display of transparent parts."
+msgstr "Приказ провидних делова."
-#: ../f-spot-view.desktop.in.in.h:1
-msgid "F-Spot Photo Viewer"
-msgstr "Ф-број прегледач фотографија"
+#: ../f-spot.schemas.in.h:2
+msgid "Enable this to allow interpolation on zoomed images."
+msgstr "Укључите ово за интерполацију при повећању слика."
-#: ../f-spot-view.desktop.in.in.h:2
-msgid "Photo Viewer"
-msgstr "Прегледник фотографија"
-
-#: ../lib/libfspot/f-jpeg-utils.c:441 ../src/RotateCommand.cs:224
-msgid "File not found"
-msgstr "Датотека није нађена"
-
-#: ../lib/libfspot/f-jpeg-utils.c:464
-#, c-format
-msgid "Unknown transform type %d"
-msgstr "Непозната врста трансформације %d"
-
-#: ../lib/libfspot/f-jpeg-utils.c:472
-msgid "Operation failed"
-msgstr "Пропала операција"
+#: ../f-spot.schemas.in.h:3
+msgid "Height of the import dialog."
+msgstr "Висина прозорчета за увоз."
-#: ../lib/mono-addins/Mono.Addins.Gui/gtk-gui/Mono.Addins.Gui.AddinInfoDialog.cs:32
-msgid "Package"
-msgstr "Пакет"
+#: ../f-spot.schemas.in.h:4
+msgid "Height of the main window."
+msgstr "Висина главног прозора."
-#: ../lib/mono-addins/Mono.Addins.Gui/gtk-gui/Mono.Addins.Gui.AddinInstallDialog.cs:110
-msgid "Extension Installation"
-msgstr "Додавање проширења"
+#: ../f-spot.schemas.in.h:5
+msgid "Height of the photo viewer window."
+msgstr "Висина прозора за преглед слика."
-#: ../lib/mono-addins/Mono.Addins.Gui/gtk-gui/Mono.Addins.Gui.AddinInstallDialog.cs:136
-msgid "<b>Select the extensions to install and click on Next</b>"
+#: ../f-spot.schemas.in.h:6
+msgid ""
+"If the 'transparency' option is set, the color specified in this option will "
+"be used as the transparent color when viewing images."
msgstr ""
-"<b>Изаберите проширење које желите да додате и притисните „Наредно“</b>"
-
-#: ../lib/mono-addins/Mono.Addins.Gui/gtk-gui/Mono.Addins.Gui.AddinInstallDialog.cs:150
-msgid "Install from:"
-msgstr "Инсталирај из:"
-
-#: ../lib/mono-addins/Mono.Addins.Gui/gtk-gui/Mono.Addins.Gui.AddinInstallDialog.cs:179
-#: ../lib/mono-addins/Mono.Addins.Gui/gtk-gui/Mono.Addins.Gui.AddinManagerDialog.cs:180
-msgid "_Repositories..."
-msgstr "_Складишта..."
-
-#: ../lib/mono-addins/Mono.Addins.Gui/gtk-gui/Mono.Addins.Gui.AddinInstallDialog.cs:220
-msgid "Show all packages"
-msgstr "Прикажи све пакете"
+"Уколико је постављено на „transparency“, боја коју изаберете ће бити "
+"постављена уместо провидних делова слике."
-#: ../lib/mono-addins/Mono.Addins.Gui/gtk-gui/Mono.Addins.Gui.AddinInstallDialog.cs:221
-msgid "Show new versions only"
-msgstr "Прикажи само нова издања"
-
-#: ../lib/mono-addins/Mono.Addins.Gui/gtk-gui/Mono.Addins.Gui.AddinInstallDialog.cs:222
-msgid "Show updates only"
-msgstr "Прикажи само надоградње"
-
-#: ../lib/mono-addins/Mono.Addins.Gui/gtk-gui/Mono.Addins.Gui.AddinInstallDialog.cs:247
-msgid "_Unselect All"
-msgstr "Изабери _ништа"
-
-#: ../lib/mono-addins/Mono.Addins.Gui/gtk-gui/Mono.Addins.Gui.AddinInstallDialog.cs:259
-#: ../src/ui/main_window.ui.h:18
-msgid "Select _All"
-msgstr "Изабери _све"
+#: ../f-spot.schemas.in.h:7
+#| msgid "_Interpolate image on zoom"
+msgid "Interpolate image on zoom."
+msgstr "Интерполиши слику при увећању."
-#: ../lib/mono-addins/Mono.Addins.Gui/gtk-gui/Mono.Addins.Gui.AddinInstallDialog.cs:334
-msgid "label124"
-msgstr "натпис124"
+#: ../f-spot.schemas.in.h:8
+msgid "Maximize the main window."
+msgstr "Увећај главни прозор."
-#: ../lib/mono-addins/Mono.Addins.Gui/gtk-gui/Mono.Addins.Gui.AddinInstallDialog.cs:346
-msgid "Overall Progress:"
-msgstr "Упукан напредак:"
+#: ../f-spot.schemas.in.h:9
+msgid "Maximize the photo viewer window."
+msgstr "Увећај прозор за преглед слика."
-#: ../lib/mono-addins/Mono.Addins.Gui/gtk-gui/Mono.Addins.Gui.AddinInstallDialog.cs:374
-msgid "Downloading extensions..."
-msgstr "Преузимам проширења..."
+#: ../f-spot.schemas.in.h:10
+msgid "Path to custom gtkrc for theming F-Spot."
+msgstr "Путања до произвољне gtkrc теме за Ф-број."
-#: ../lib/mono-addins/Mono.Addins.Gui/gtk-gui/Mono.Addins.Gui.AddinInstallerDialog.cs:36
-#: ../lib/mono-addins/Mono.Addins.Gui/gtk-gui/Mono.Addins.Gui.AddinManagerDialog.cs:58
-msgid "Extension Manager"
-msgstr "Уредник проширења"
+#: ../f-spot.schemas.in.h:11
+msgid "Show dates in the thumbnail view."
+msgstr "Исписује датум уз умањене приказе."
-#: ../lib/mono-addins/Mono.Addins.Gui/gtk-gui/Mono.Addins.Gui.AddinInstallerDialog.cs:54
-msgid "Additional extensions are required to perform this operation."
-msgstr "Потребна су додатна проширења за извођење ове радње."
+#: ../f-spot.schemas.in.h:12
+msgid "Show ratings in the thumbnail view."
+msgstr "Исписује оцене уз умањене приказе."
-#: ../lib/mono-addins/Mono.Addins.Gui/gtk-gui/Mono.Addins.Gui.AddinInstallerDialog.cs:64
-msgid "The following extensions will be installed:"
-msgstr "Следећа проширења ће бити додата:"
+#: ../f-spot.schemas.in.h:13
+msgid "Show tags in the thumbnail view."
+msgstr "Исписује ознаке уз умањене приказе."
-#: ../lib/mono-addins/Mono.Addins.Gui/gtk-gui/Mono.Addins.Gui.AddinManagerDialog.cs:90
-msgid "<big><b>Extension Manager</b></big>"
-msgstr "<big><b>Уредник проширења</b></big>"
+#: ../f-spot.schemas.in.h:14
+msgid "Show the filename in the viewer window."
+msgstr "Исписује име датотеке у прозору за приказ слике."
-#: ../lib/mono-addins/Mono.Addins.Gui/gtk-gui/Mono.Addins.Gui.AddinManagerDialog.cs:110
-msgid "The following extensions are currently installed:"
-msgstr "Додата су следећа проширења:"
+#: ../f-spot.schemas.in.h:15
+msgid "Show the filmstrip in the main window."
+msgstr "Приказује филмску траку у главном прозору."
-#: ../lib/mono-addins/Mono.Addins.Gui/gtk-gui/Mono.Addins.Gui.AddinManagerDialog.cs:165
-msgid "_Install Extensions..."
-msgstr "_Додај проширења..."
+#: ../f-spot.schemas.in.h:16
+msgid "Show the sidebar in the main window."
+msgstr "Приказује бочну површ у главном прозору."
-#: ../lib/mono-addins/Mono.Addins.Gui/gtk-gui/Mono.Addins.Gui.AddinManagerDialog.cs:210
-msgid "_Uninstall..."
-msgstr "_Уклони..."
+#: ../f-spot.schemas.in.h:17
+msgid "Show the timeline in the main window."
+msgstr "Приказује линију времена у главном прозору."
-#: ../lib/mono-addins/Mono.Addins.Gui/gtk-gui/Mono.Addins.Gui.AddinManagerDialog.cs:236
-msgid "Enable"
-msgstr "Омогући"
+#: ../f-spot.schemas.in.h:18
+msgid "Show the toolbar in the main window."
+msgstr "Приказује алатницу у главном прозору."
-#: ../lib/mono-addins/Mono.Addins.Gui/gtk-gui/Mono.Addins.Gui.AddinManagerDialog.cs:262
-msgid "Disable"
-msgstr "Онемогући"
+#: ../f-spot.schemas.in.h:19
+msgid "Show the toolbar in the photo viewer window."
+msgstr "Приказује алатницу у прозору за приказ слике."
-#: ../lib/mono-addins/Mono.Addins.Gui/gtk-gui/Mono.Addins.Gui.ErrorDialog.cs:111
-msgid "Details"
-msgstr "Детаљи"
+#: ../f-spot.schemas.in.h:20
+msgid "Size of the tag icons shown in the sidebar."
+msgstr "Величина иконице за ознаку у бочној површи."
+
+#: ../f-spot.schemas.in.h:21
+msgid "The X position to use for the main window."
+msgstr "Место главног прозора у односу на X осу."
+
+#: ../f-spot.schemas.in.h:22
+msgid "The X position to use for the photo viewer window."
+msgstr "Место прозора за приказ слике у односу на X осу."
+
+#: ../f-spot.schemas.in.h:23
+msgid "The Y position to use for the main window."
+msgstr "Место главног прозора у односу на Y осу."
+
+#: ../f-spot.schemas.in.h:24
+msgid "The Y position to use for the photo viewer window."
+msgstr "Место прозора за приказ слике у односу на Y осу."
+
+#: ../f-spot.schemas.in.h:25
+msgid "The color to use for transparent parts."
+msgstr "Боја за провидне делове слике."
+
+#: ../f-spot.schemas.in.h:26
+msgid "The height dimension to use for the import dialog."
+msgstr "Висина прозорчета за увоз фотографија."
+
+#: ../f-spot.schemas.in.h:27
+msgid "The height dimension to use for the main window."
+msgstr "Висина главног прозора."
+
+#: ../f-spot.schemas.in.h:28
+msgid "The height dimension to use for the photo viewer window."
+msgstr "Висина прозора за приказ слика."
+
+#: ../f-spot.schemas.in.h:29
+msgid "The orientation of the filmstrip, if shown."
+msgstr "Смер филмске траке, уколико је приказана."
+
+#: ../f-spot.schemas.in.h:30
+msgid "The orientation of the filmstrip."
+msgstr "Смер филмске траке."
+
+#: ../f-spot.schemas.in.h:31
+msgid "The size (width) of the sidebar in the main window."
+msgstr "Ширина (величина) бочне површи у главном прозору."
+
+#: ../f-spot.schemas.in.h:32
+msgid "The size of the sidebar in the main window."
+msgstr "Ширина бочне површи у главном прозору."
-#: ../lib/mono-addins/Mono.Addins.Gui/gtk-gui/Mono.Addins.Gui.ManageSitesDialog.cs:34
-msgid "Extension Repository Management"
-msgstr "Уредник проширења складишта"
+#: ../f-spot.schemas.in.h:33
+msgid "The width dimension to use for the import dialog."
+msgstr "Ширина прозорчета за увоз фотографија."
-#: ../lib/mono-addins/Mono.Addins.Gui/gtk-gui/Mono.Addins.Gui.NewSiteDialog.cs:52
-msgid "Add New Repository"
-msgstr "Додај ново складиште"
+#: ../f-spot.schemas.in.h:34
+msgid "The width dimension to use for the main window."
+msgstr "Ширина главног прозора."
-#: ../lib/mono-addins/Mono.Addins.Gui/gtk-gui/Mono.Addins.Gui.NewSiteDialog.cs:70
-msgid "Select the location of the repository you want to register:"
-msgstr "Изаберите место складишта које желите да региструјете:"
+#: ../f-spot.schemas.in.h:35
+msgid "The width dimension to use for the photo viewer window."
+msgstr "Ширина прозора за приказ слика."
-#. Container child vbox89.Gtk.Box+BoxChild
-#: ../lib/mono-addins/Mono.Addins.Gui/gtk-gui/Mono.Addins.Gui.NewSiteDialog.cs:77
-msgid "Register an on-line repository"
-msgstr "Региструјте складиште на мрежи"
+#: ../f-spot.schemas.in.h:36
+msgid "Use the current photo's filename as the viewer window's title."
+msgstr "Употреби назив датотеке за наслов прозора за приказ слика."
-#: ../lib/mono-addins/Mono.Addins.Gui/gtk-gui/Mono.Addins.Gui.NewSiteDialog.cs:106
-msgid "Url:"
-msgstr "Адреса:"
+#: ../f-spot.schemas.in.h:37
+msgid "Width of the import dialog."
+msgstr "Ширина прозорчета за увоз фотографија."
-#. Container child vbox89.Gtk.Box+BoxChild
-#: ../lib/mono-addins/Mono.Addins.Gui/gtk-gui/Mono.Addins.Gui.NewSiteDialog.cs:127
-msgid "Register a local repository"
-msgstr "Региструјте локално складиште"
+#: ../f-spot.schemas.in.h:38
+msgid "Width of the main window."
+msgstr "Ширина главног прозора."
-#: ../lib/mono-addins/Mono.Addins.Gui/gtk-gui/Mono.Addins.Gui.NewSiteDialog.cs:155
-msgid "Path:"
-msgstr "Путања:"
+#: ../f-spot.schemas.in.h:39
+msgid "Width of the photo viewer window."
+msgstr "Ширина прозора за приказ слика."
-#: ../lib/mono-addins/Mono.Addins.Gui/gtk-gui/Mono.Addins.Gui.NewSiteDialog.cs:179
-msgid "Browse..."
-msgstr "Разгледај..."
+#: ../f-spot.schemas.in.h:40
+msgid "Width of the preview image pane in the import dialog."
+msgstr "Ширина површи за приказ фотографије у прозорчету за увоз."
-#: ../lib/mono-addins/Mono.Addins.Gui/Mono.Addins.Gui/AddinInfoDialog.cs:62
-msgid "Version:"
-msgstr "Издање:"
+#: ../f-spot.schemas.in.h:41
+msgid "X position of the main window."
+msgstr "Место главног прозора на X оси."
-#: ../lib/mono-addins/Mono.Addins.Gui/Mono.Addins.Gui/AddinInfoDialog.cs:65
-msgid "Author:"
-msgstr "Аутор:"
+#: ../f-spot.schemas.in.h:42
+msgid "X position of the photo viewer window."
+msgstr "Место прозора за приказ слика на X оси."
-#: ../lib/mono-addins/Mono.Addins.Gui/Mono.Addins.Gui/AddinInfoDialog.cs:68
-msgid "Copyright:"
-msgstr "Ауторско право:"
+#: ../f-spot.schemas.in.h:43
+msgid "Y position of the main window."
+msgstr "Место главног прозора на Y оси."
-#: ../lib/mono-addins/Mono.Addins.Gui/Mono.Addins.Gui/AddinInfoDialog.cs:71
-msgid "Extension Dependencies:"
-msgstr "Зависности проширења:"
+#: ../f-spot.schemas.in.h:44
+msgid "Y position of the photo viewer window."
+msgstr "Место прозора за приказ слика на Y оси."
-#: ../lib/mono-addins/Mono.Addins.Gui/Mono.Addins.Gui/AddinInstallDialog.cs:97
-msgid "All registered repositories"
-msgstr "Сва регистрована складишта"
-
-#: ../lib/mono-addins/Mono.Addins.Gui/Mono.Addins.Gui/AddinInstallDialog.cs:184
-msgid "Are you sure you want to cancel the installation?"
-msgstr "Да ли сигурно желите да прекинете додавање?"
-
-#: ../lib/mono-addins/Mono.Addins.Gui/Mono.Addins.Gui/AddinInstallDialog.cs:308
-msgid "The following packages will be uninstalled:"
-msgstr "Следећи пакети че бити уклоњени:"
-
-#: ../lib/mono-addins/Mono.Addins.Gui/Mono.Addins.Gui/AddinInstallDialog.cs:313
+#: ../f-spot.schemas.in.h:45
+#| msgid ""
+#| "<small><i>You can choose how to display transparent parts in images. This "
+#| "option has no effect on photos, but setting this as check pattern or "
+#| "custom color could be usefull when viewing icons or other artworks with "
+#| "transparent parts.</i></small>"
msgid ""
-"There are other extensions that depend on the previous ones which will also "
-"be uninstalled:"
-msgstr "Нека проширења зависе од претходних која ће такође бити укоњена:"
-
-#: ../lib/mono-addins/Mono.Addins.Gui/Mono.Addins.Gui/AddinInstallDialog.cs:384
-msgid ""
-"The selected extensions can't be installed because there are dependency "
-"conflicts."
+"You can choose how to display transparent parts in images. This option has "
+"no effect on photos but setting this value to CHECK_PATTERN or CUSTOM_COLOR "
+"could be useful when viewing icons or other artwork with transparent parts."
msgstr ""
-"Изабрана проширења не могу бити додата због постојања конфликта "
-"међузависностима."
-
-#: ../lib/mono-addins/Mono.Addins.Gui/Mono.Addins.Gui/AddinInstallDialog.cs:398
-msgid "The following packages will be installed:"
-msgstr "Следећи пакети ће бити додати:"
-
-#: ../lib/mono-addins/Mono.Addins.Gui/Mono.Addins.Gui/AddinInstallDialog.cs:402
-msgid " (in user directory)"
-msgstr " (у корисничком директоријуму)"
-
-#: ../lib/mono-addins/Mono.Addins.Gui/Mono.Addins.Gui/AddinInstallDialog.cs:408
-msgid "The following packages need to be uninstalled:"
-msgstr "Потребно је уклонити следеће пакете:"
-
-#: ../lib/mono-addins/Mono.Addins.Gui/Mono.Addins.Gui/AddinInstallDialog.cs:416
-msgid "The following dependencies could not be resolved:"
-msgstr "Није могуће решити следеће зависности:"
-
-#: ../lib/mono-addins/Mono.Addins.Gui/Mono.Addins.Gui/AddinInstallDialog.cs:441
-msgid "The installation has been successfully completed."
-msgstr "Додавање пакета је успешно завршено."
-
-#: ../lib/mono-addins/Mono.Addins.Gui/Mono.Addins.Gui/AddinInstallDialog.cs:442
-msgid "The installation failed!"
-msgstr "Додавање није успело!"
-
-#: ../lib/mono-addins/Mono.Addins.Gui/Mono.Addins.Gui/AddinInstallDialog.cs:443
-msgid "The installation has completed with warnings."
-msgstr "Додавање је завршено уз упозорења."
-
-#: ../lib/mono-addins/Mono.Addins.Gui/Mono.Addins.Gui/AddinInstallDialog.cs:446
-msgid "The uninstallation has been successfully completed."
-msgstr "Уклањање је узпешно завршено."
-
-#: ../lib/mono-addins/Mono.Addins.Gui/Mono.Addins.Gui/AddinInstallDialog.cs:447
-msgid "The uninstallation failed!"
-msgstr "Уклањање није успело!"
-
-#: ../lib/mono-addins/Mono.Addins.Gui/Mono.Addins.Gui/AddinInstallDialog.cs:448
-msgid "The uninstallation has completed with warnings."
-msgstr "Уклањање је завршено уз упозорења."
-
-#: ../lib/mono-addins/Mono.Addins.Gui/Mono.Addins.Gui/AddinInstallDialog.cs:616
-msgid "Repository"
-msgstr "Складиште"
-
-#: ../lib/mono-addins/Mono.Addins.Gui/Mono.Addins.Gui/AddinInstaller.cs:16
-msgid "Installation cancelled"
-msgstr "Додавање је прекинуто"
-
-#: ../lib/mono-addins/Mono.Addins.Gui/Mono.Addins.Gui/AddinInstallerDialog.cs:159
-msgid "Some of the required extensions were not found"
-msgstr "Нека од потребних проширења нису нађена"
-
-#: ../lib/mono-addins/Mono.Addins.Gui/Mono.Addins.Gui/AddinInstallerDialog.cs:171
-msgid "Installation failed"
-msgstr "Додавање није успело"
-
-#: ../lib/mono-addins/Mono.Addins.Gui/Mono.Addins.Gui/AddinTreeWidget.cs:91
-msgid "Extension"
-msgstr "Проширење"
-
-#: ../lib/mono-addins/Mono.Addins.Gui/Mono.Addins.Gui/AddinTreeWidget.cs:112
-#: ../src/Widgets/InfoBox.cs:214
-msgid "Version"
-msgstr "Издање"
-
-#: ../lib/mono-addins/Mono.Addins.Gui/Mono.Addins.Gui/AddinTreeWidget.cs:168
-msgid "Other"
-msgstr "Остало"
-
-#: ../lib/mono-addins/Mono.Addins.Gui/Mono.Addins.Gui/ManageSitesDialog.cs:52
-msgid "Url"
-msgstr "Адреса"
-
-#: ../lib/mono-addins/Mono.Addins.Gui/Mono.Addins.Gui/Services.cs:61
-#: ../lib/mono-addins/Mono.Addins.Gui/Mono.Addins.Gui/Services.cs:70
-#, csharp-format
-msgid "Exception occurred: {0}"
-msgstr "Јавио се изузетак: {0}"
-
-#: ../lib/mono-addins/Mono.Addins/Mono.Addins/AddinSessionService.cs:154
-msgid "Disabled extensions can't be loaded."
-msgstr "Онемогућена проширења не могу бити учитана."
-
-#: ../lib/mono-addins/Mono.Addins/Mono.Addins/AddinSessionService.cs:179
-#, csharp-format
-msgid "Loading {0} extension"
-msgstr "Учитавам {0} проширење"
-
-#: ../lib/mono-addins/Mono.Addins/Mono.Addins/AddinSessionService.cs:265
-#, csharp-format
-msgid "The required extension '{0}' is disabled."
-msgstr "Захтевано проширење „{0}“ је онемогућено."
-
-#: ../lib/mono-addins/Mono.Addins/Mono.Addins/AddinSessionService.cs:267
-#, csharp-format
-msgid "The required extension '{0}' is not installed."
-msgstr "Захтевано проширење „{0}“ није додато."
+"Можете да изаберете како да се приказују провидни делови слика. Ова опција "
+"нема ефекта на фотографије, али постављање на „CHECK_PATTERN“ (шаховски "
+"шаблон) или „CUSTOM_COLOR“ (произвољна боја) може бити корисно при прегледу "
+"иконица или других радова са провидним деловима."
-#: ../lib/mono-addins/Mono.Addins/Mono.Addins.Description/AssemblyDependency.cs:79
-#, csharp-format
-msgid "(provided by {0})"
-msgstr "(обезбедио {0})"
-
-#: ../src/CameraFileSelectionDialog.cs:76
-msgid "Preview"
-msgstr "Приказ"
-
-#: ../src/CameraFileSelectionDialog.cs:78
-msgid "Path"
-msgstr "Путања"
-
-#: ../src/CameraFileSelectionDialog.cs:80 ../src/f-spot.glade.h:46
-msgid "File"
-msgstr "Датотека"
-
-#: ../src/CameraFileSelectionDialog.cs:102
-msgid "Select Tag"
-msgstr "Изабери ознаку"
-
-#: ../src/CameraFileSelectionDialog.cs:138
-msgid "Downloading Previews"
-msgstr "Преузимам прегледе"
-
-#: ../src/CameraFileSelectionDialog.cs:148
-#, csharp-format
-msgid "Downloading Preview of {0}"
-msgstr "Преузимам преглед за {0}"
-
-#: ../src/CameraFileSelectionDialog.cs:220
-#, csharp-format
-msgid "Copying file {0} of {1}"
-msgstr "Умножавам датотеку {0} од {1}"
-
-#: ../src/CameraFileSelectionDialog.cs:235
-msgid "Error transferring file"
-msgstr "Грешка при пребацивању датотеке"
-
-#: ../src/CameraFileSelectionDialog.cs:244
-msgid "Done Copying Files"
-msgstr "Готово умножавање датотека"
-
-#: ../src/CameraFileSelectionDialog.cs:246
-msgid "Download Complete"
-msgstr "Преузимање готово"
-
-#: ../src/CameraFileSelectionDialog.cs:271
-#, csharp-format
-msgid "Transferring \"{0}\" from camera"
-msgstr "Преносим „{0}“ са апарата"
+#: ../lib/libfspot/f-jpeg-utils.c:441 ../src/RotateCommand.cs:211
+msgid "File not found"
+msgstr "Датотека није нађена"
-#: ../src/CameraSelectionDialog.cs:29 ../src/Widgets/InfoBox.cs:230
-msgid "Camera"
-msgstr "Апарат"
+#: ../lib/libfspot/f-jpeg-utils.c:464
+#, c-format
+msgid "Unknown transform type %d"
+msgstr "Непозната врста трансформације %d"
-#: ../src/CameraSelectionDialog.cs:30
-msgid "Port"
-msgstr "Прикључак"
+#: ../lib/libfspot/f-jpeg-utils.c:472
+msgid "Operation failed"
+msgstr "Пропала операција"
-#: ../src/Core.cs:203
+#: ../src/Core/App.cs:274
#, csharp-format
msgid "No photos matching {0} found"
msgstr "Нису нађене фотографије за {0}"
-#: ../src/Core.cs:204
+#: ../src/Core/App.cs:275
#, csharp-format
msgid ""
"The tag \"{0}\" is not applied to any photos. Try adding\n"
@@ -1717,11 +1665,11 @@ msgstr ""
"да додате ознаку неким фотографијама или да изаберите другу\n"
"ознаку из поставки Ф-броја."
-#: ../src/Core.cs:208
+#: ../src/Core/App.cs:279
msgid "Search returned no results"
msgstr "Претрага није дала резултат"
-#: ../src/Core.cs:209
+#: ../src/Core/App.cs:280
msgid ""
"The tag F-Spot is looking for does not exist. Try\n"
"selecting a different tag in the F-Spot preference\n"
@@ -1731,36 +1679,32 @@ msgstr ""
"да изаберете другу ознаку у поставкама Ф-броја."
#. Note for translators: Reparented is a picture becoming a version of another one
-#: ../src/Core/Photo.cs:473
+#: ../src/Core/Photo.cs:362
msgid "Reparented"
msgstr "Придружена слици"
-#: ../src/Core/Photo.cs:473
-#, csharp-format
-msgid "Reparented ({0})"
-msgstr "Придружених слика ({0})"
-
-#: ../src/Core/Photo.cs:492
+#: ../src/Core/Photo.cs:378
#, csharp-format
msgid "Modified"
msgid_plural "Modified ({0})"
msgstr[0] "Измењена ({0})"
msgstr[1] "Измењене ({0})"
msgstr[2] "Измењених ({0})"
+msgstr[3] "Измењена ({0})"
-#: ../src/Core/Photo.cs:511
+#: ../src/Core/Photo.cs:401
#, csharp-format
msgid "Modified in {1}"
msgstr "Измењена у {1}"
-#: ../src/Core/Photo.cs:511
+#: ../src/Core/Photo.cs:401
#, csharp-format
msgid "Modified in {1} ({0})"
msgstr "Измењена у {1} ({0})"
#. Note that the original version is never stored in the photo_versions table in the
#. database.
-#: ../src/Core/Photo.cs:666 ../src/f-spot.glade.h:61
+#: ../src/Core/Photo.cs:571 ../src/f-spot.glade.h:39
msgid "Original"
msgstr "Оригинал"
@@ -1776,43 +1720,43 @@ msgstr "Подеси боје"
msgid "Adjust"
msgstr "Подеси"
-#: ../src/Editors/CropEditor.cs:35
+#: ../src/Editors/CropEditor.cs:36
msgid "4 x 3 (Book)"
msgstr "10 x 7,5 (књига)"
-#: ../src/Editors/CropEditor.cs:36
+#: ../src/Editors/CropEditor.cs:37
msgid "4 x 6 (Postcard)"
msgstr "10 x 15 (разгледница)"
-#: ../src/Editors/CropEditor.cs:37
+#: ../src/Editors/CropEditor.cs:38
msgid "5 x 7 (L, 2L)"
msgstr "12,5 x 17,5 (L, 2L)"
-#: ../src/Editors/CropEditor.cs:38
+#: ../src/Editors/CropEditor.cs:39
msgid "8 x 10"
msgstr "20 x 25"
-#: ../src/Editors/CropEditor.cs:39
+#: ../src/Editors/CropEditor.cs:40
msgid "Square"
msgstr "Квадрирај"
-#: ../src/Editors/CropEditor.cs:42
+#: ../src/Editors/CropEditor.cs:43
msgid "Crop"
msgstr "Исеци"
-#: ../src/Editors/CropEditor.cs:73
+#: ../src/Editors/CropEditor.cs:74
msgid "Select the area that needs cropping."
msgstr "Изаберите подручје за одсецање."
-#: ../src/Editors/CropEditor.cs:98
+#: ../src/Editors/CropEditor.cs:99
msgid "No Constraint"
msgstr "Без ограничења"
-#: ../src/Editors/CropEditor.cs:99
+#: ../src/Editors/CropEditor.cs:100
msgid "Same as photo"
msgstr "Као на фотографији"
-#: ../src/Editors/CropEditor.cs:104
+#: ../src/Editors/CropEditor.cs:105
msgid "Custom Ratios..."
msgstr "Произвољна размера..."
@@ -1836,36 +1780,23 @@ msgstr "Изаберите очи које желите да исправите.
msgid "Sepia Tone"
msgstr "Браон тон"
-#: ../src/Editors/SoftFocusEditor.cs:28
+#: ../src/Editors/SoftFocusEditor.cs:32
msgid "Soft Focus"
msgstr "Благи фокус"
-#: ../src/Editors/TiltEditor.cs:28
+#: ../src/Editors/TiltEditor.cs:30
msgid "Straighten"
msgstr "Исправљање"
-# bug: uvezi od, uvezi sa
-#: ../src/FileImportBackend.cs:288
-msgid "Import error"
-msgstr "Грешка при увозу:"
-
-#: ../src/FileImportBackend.cs:289
-#, csharp-format
-msgid "Error importing {0}{2}{2}{1}"
-msgstr "Грешка при увозу {0}{2}{2}{1}"
-
#: ../src/Filters/ResizeFilter.cs:70 ../src/Filters/SharpFilter.cs:52
#, csharp-format
msgid "No way to save files of type \"{0}\""
msgstr "Не постоји начин да сачувам датотеке типа „{0}“"
-#: ../src/FormClient.cs:295
-msgid "Unhandled exception"
-msgstr "Нерешив изузетак"
-
#: ../src/FSpot.addin.xml.h:1
-msgid "Copy Photo Locat_ion"
-msgstr "Умножи _путању слике"
+#| msgid "Copy Photo Locat_ion"
+msgid "Copy Photo"
+msgstr "Умножи слику"
#: ../src/FSpot.addin.xml.h:2
msgid "Export to"
@@ -1875,17 +1806,17 @@ msgstr "Извези у"
msgid "Open _With"
msgstr "Отвори _помоћу"
-#: ../src/FSpot.addin.xml.h:4 ../src/ui/main_window.ui.h:15
+#: ../src/FSpot.addin.xml.h:4 ../src/ui/main_window.ui.h:16
msgid "Rem_ove Tag"
msgstr "У_клони ознаку"
-#: ../src/FSpot.addin.xml.h:5 ../src/f-spot.glade.h:68
-#: ../src/SingleView.cs:453 ../src/ui/main_window.ui.h:16
+#: ../src/FSpot.addin.xml.h:5 ../src/f-spot.glade.h:44
+#: ../src/SingleView.cs:425 ../src/ui/main_window.ui.h:17
msgid "Rotate _Left"
msgstr "Ротирај _лево"
-#: ../src/FSpot.addin.xml.h:6 ../src/f-spot.glade.h:69
-#: ../src/SingleView.cs:454 ../src/ui/main_window.ui.h:17
+#: ../src/FSpot.addin.xml.h:6 ../src/f-spot.glade.h:45
+#: ../src/SingleView.cs:426 ../src/ui/main_window.ui.h:18
msgid "Rotate _Right"
msgstr "Ротирај _десно"
@@ -1893,75 +1824,63 @@ msgstr "Ротирај _десно"
msgid "Tools"
msgstr "Алати"
-#: ../src/FSpot.addin.xml.h:8 ../src/ui/main_window.ui.h:32
-msgid "_Attach Tag"
-msgstr "_Додај ознаку"
-
-#: ../src/FSpot.addin.xml.h:9 ../src/ui/main_window.ui.h:41
+#: ../src/FSpot.addin.xml.h:8 ../src/ui/main_window.ui.h:42
msgid "_Delete From Drive"
msgstr "_Уклони са диска"
-#: ../src/FSpot.addin.xml.h:10 ../src/ui/main_window.ui.h:59
+#: ../src/FSpot.addin.xml.h:9 ../src/ui/main_window.ui.h:61
msgid "_Remove From Catalog"
msgstr "Уклони из к_аталога"
#: ../src/f-spot.glade.h:1
-msgid " "
-msgstr " "
-
-#: ../src/f-spot.glade.h:2
msgid "1024 px"
msgstr "1024 px"
-#: ../src/f-spot.glade.h:3
+#: ../src/f-spot.glade.h:2
msgid "320 px"
msgstr "320 px"
-#: ../src/f-spot.glade.h:4
+#: ../src/f-spot.glade.h:3
msgid "480 px"
msgstr "480 px"
-#: ../src/f-spot.glade.h:5
+#: ../src/f-spot.glade.h:4
msgid "640 px"
msgstr "640 px"
-#: ../src/f-spot.glade.h:6
+#: ../src/f-spot.glade.h:5
msgid "800 px"
msgstr "800 px"
-#: ../src/f-spot.glade.h:7
-msgid "<b></b>"
-msgstr "<b></b>"
-
-#: ../src/f-spot.glade.h:10
+#: ../src/f-spot.glade.h:6
msgid "<b>Co_rrections</b>"
msgstr "<b>И_справке</b>"
-#: ../src/f-spot.glade.h:13
+#: ../src/f-spot.glade.h:7
msgid "<b>Image Interpolation</b>"
msgstr "<b>Интерполација слике</b>"
-#: ../src/f-spot.glade.h:15
+#: ../src/f-spot.glade.h:9
msgid "<b>Size</b>"
msgstr "<b>Величина</b>"
-#: ../src/f-spot.glade.h:17
+#: ../src/f-spot.glade.h:11
msgid "<b>Summary</b>"
msgstr "<b>Сума</b>"
-#: ../src/f-spot.glade.h:18
+#: ../src/f-spot.glade.h:12
msgid "<b>Transparent Parts</b>"
msgstr "<b>Провидни делови</b>"
-#: ../src/f-spot.glade.h:19
+#: ../src/f-spot.glade.h:13
msgid "<b>View all pictures imported</b>"
msgstr "<b>Прегледај све увезене слике</b>"
-#: ../src/f-spot.glade.h:20
+#: ../src/f-spot.glade.h:14
msgid "<b>_White Balance</b>"
msgstr "<b>_Бланс белог</b>"
-#: ../src/f-spot.glade.h:21
+#: ../src/f-spot.glade.h:15
msgid ""
"<small><i>Enable this to allow interpolation on zoomed images. You shouldn't "
"disable this for viewing photos, but disabling the interpolation could be "
@@ -1971,7 +1890,7 @@ msgstr ""
"Не бисте требали да искључите ову опцију за преглед фотографија, али она "
"може бити корисна код иконица.</i></small>"
-#: ../src/f-spot.glade.h:22
+#: ../src/f-spot.glade.h:16
msgid ""
"<small><i>You can choose how to display transparent parts in images. This "
"option has no effect on photos, but setting this as check pattern or custom "
@@ -1983,210 +1902,141 @@ msgstr ""
"произвољну боју може бити корисно при прегледу иконица или других радова са "
"провидним деловима.</i></small>"
-#: ../src/f-spot.glade.h:23
+#: ../src/f-spot.glade.h:17
msgid "As _background"
msgstr "Постави за по_задину"
-#: ../src/f-spot.glade.h:24
+#: ../src/f-spot.glade.h:18
msgid "As _custom color: "
msgstr "Као прои_звољна боја: "
-#: ../src/f-spot.glade.h:25
+#: ../src/f-spot.glade.h:19
msgid "As check _pattern"
msgstr "Као _шаховски шаблон"
-#: ../src/f-spot.glade.h:26
-msgid "Attach Tags:"
-msgstr "Додај ознаке:"
-
-#: ../src/f-spot.glade.h:27
-msgid "Attach tag:"
-msgstr "Додај ознаку:"
-
-#: ../src/f-spot.glade.h:29
-msgid "CD"
-msgstr "ЦД"
-
-#: ../src/f-spot.glade.h:30
+#: ../src/f-spot.glade.h:21
msgid "C_ontrast:"
msgstr "_Контраст:"
-#: ../src/f-spot.glade.h:31
-msgid "Camera Selection"
-msgstr "Избор апарата"
-
-#: ../src/f-spot.glade.h:32
-msgid "Copy files to the Photos folder"
-msgstr "Убаци датотеке у директоријум са Фото албумом"
+#: ../src/f-spot.glade.h:22
+#| msgid "_Create"
+msgid "C_reate"
+msgstr "_Направи"
-#: ../src/f-spot.glade.h:33
+#: ../src/f-spot.glade.h:23
msgid "Create Mail"
msgstr "Направи е-писмо"
-#: ../src/f-spot.glade.h:34
+#: ../src/f-spot.glade.h:24
msgid "Create _icon for this tag when first used"
msgstr "Направи _иконицу ознаке кад је додам на слику"
-#: ../src/f-spot.glade.h:35
+#: ../src/f-spot.glade.h:25
msgid "Create a mail with the selected photos (possibly resized) attached"
msgstr ""
"Направи е-писмо са прилогом од изабраних фотографија (по могућству смањених)"
-#: ../src/f-spot.glade.h:36
-msgid "Detect duplicates"
-msgstr "Нађи дупликате"
-
-#: ../src/f-spot.glade.h:37
+#: ../src/f-spot.glade.h:26
msgid "Display File _Names"
msgstr "Прикажи _имена датотека"
-#: ../src/f-spot.glade.h:38
+#: ../src/f-spot.glade.h:27
msgid "Display only those photos that were imported in specified Rolls."
msgstr "Прикажи само оне фотографије које су увезене у одређеном увожењу."
-#: ../src/f-spot.glade.h:39
+#: ../src/f-spot.glade.h:28
msgid "Do not send a mail"
msgstr "Не шаљи е-пошту"
-#: ../src/f-spot.glade.h:40
-msgid "E-_Mail:"
-msgstr "_Е-пошта:"
-
-#: ../src/f-spot.glade.h:41
-msgid "E_xport titles and comments"
-msgstr "_Извези наслове и примедбе"
-
-#: ../src/f-spot.glade.h:42
+#: ../src/f-spot.glade.h:29
msgid "Estimated new size"
msgstr "Процењена нова величина"
-#: ../src/f-spot.glade.h:44
+#: ../src/f-spot.glade.h:30
msgid "Extra large"
msgstr "Екстра велико"
-#: ../src/f-spot.glade.h:45
+#: ../src/f-spot.glade.h:31
msgid "F-Spot View"
msgstr "Ф-број преглед"
-#: ../src/f-spot.glade.h:47
+#: ../src/f-spot.glade.h:32
msgid "Filter on selected rolls"
msgstr "Филтрирај изабрана увожења"
-#: ../src/f-spot.glade.h:48
-msgid "G_allery:"
-msgstr "_Галерија:"
-
-#: ../src/f-spot.glade.h:49
-msgid "Gallery"
-msgstr "Галерија"
-
-#: ../src/f-spot.glade.h:50 ../src/ImportCommand.cs:547
-#: ../src/MainWindow.cs:267
-msgid "Import"
-msgstr "Увези"
-
-#. Translators: this string means 'source of import'
-#: ../src/f-spot.glade.h:52
-msgid "Import Source:"
-msgstr "Извор увоза:"
-
-#: ../src/f-spot.glade.h:53
-msgid "Include subfolders"
-msgstr "Укључи поддиректоријуме."
-
-#: ../src/f-spot.glade.h:54
+#: ../src/f-spot.glade.h:33
msgid "Large"
msgstr "Велика"
-#: ../src/f-spot.glade.h:55
+#: ../src/f-spot.glade.h:34
msgid "Manage your custom selection ratios"
msgstr "Уредите произвољне односе избора"
-#: ../src/f-spot.glade.h:56
+#: ../src/f-spot.glade.h:35
msgid "Medium"
msgstr "Средње"
-#: ../src/f-spot.glade.h:58
+#: ../src/f-spot.glade.h:36
msgid "Number of photos in selected rolls:"
msgstr "Број фотографија у изабраним увожењима:"
-#: ../src/f-spot.glade.h:59
+#: ../src/f-spot.glade.h:37
msgid "Number of pictures"
msgstr "Број слика"
-#: ../src/f-spot.glade.h:60
+#: ../src/f-spot.glade.h:38
msgid "Open _Folder..."
msgstr "Отвори _фасциклу..."
-#: ../src/f-spot.glade.h:62
+#: ../src/f-spot.glade.h:40
msgid "Original size (possible very large file size)"
msgstr "Оригинална величина (могућа огромна величина датотеке)"
-#: ../src/f-spot.glade.h:63 ../src/UI.Dialog/ui/EditTagDialog.ui.h:4
+#: ../src/f-spot.glade.h:41 ../src/UI.Dialog/ui/EditTagDialog.ui.h:4
msgid "P_arent Tag:"
msgstr "_Родитељска ознака"
-#: ../src/f-spot.glade.h:64
-msgid "Pause"
-msgstr "Пауза"
-
-#: ../src/f-spot.glade.h:65
+#: ../src/f-spot.glade.h:42
msgid "Preferences"
msgstr "Поставке"
-#: ../src/f-spot.glade.h:66 ../src/ItemAction.cs:123
-msgid "Previous"
-msgstr "Претходна"
-
-#: ../src/f-spot.glade.h:67
+#: ../src/f-spot.glade.h:43
msgid "Repair"
msgstr "Поправи"
-#: ../src/f-spot.glade.h:70
-msgid "Select Photos to Copy From Camera..."
-msgstr "Изаберите фотографије за пребацивање са апарата..."
-
-#: ../src/f-spot.glade.h:71
+#: ../src/f-spot.glade.h:46
msgid "Select a Tag..."
msgstr "Изаберите ознаку..."
-#: ../src/f-spot.glade.h:72
-msgid "Select the camera from which you want to transfer files"
-msgstr "Изаберите апарат са којег желите да пребаците датотеке."
-
-#: ../src/f-spot.glade.h:73
-msgid "Selected Camera: "
-msgstr "Изабрани апарат:"
-
-#: ../src/f-spot.glade.h:74
+#: ../src/f-spot.glade.h:47
msgid "Selection Constraints"
msgstr "Ограничења избора"
-#: ../src/f-spot.glade.h:75 ../src/ui/main_window.ui.h:21
+#: ../src/f-spot.glade.h:48 ../src/ui/main_window.ui.h:22
msgid "Set as _Background"
msgstr "Постави за по_задину"
-#: ../src/f-spot.glade.h:76
+#: ../src/f-spot.glade.h:49
msgid "Show all photos."
msgstr "Прикажи све фотографије"
-#: ../src/f-spot.glade.h:77
+#: ../src/f-spot.glade.h:50
msgid "Show or hide the side pane"
msgstr "Прикажи или сакриј бочну површ"
-#: ../src/f-spot.glade.h:78
+#: ../src/f-spot.glade.h:51
msgid "Show or hide the toolbar"
msgstr "Прикажи или сакриј алатницу"
-#: ../src/f-spot.glade.h:79
+#: ../src/f-spot.glade.h:52
msgid "Side _pane"
msgstr "_Бочна површ"
-#: ../src/f-spot.glade.h:80
+#: ../src/f-spot.glade.h:53
msgid "Small"
msgstr "Мала"
-#: ../src/f-spot.glade.h:81
+#: ../src/f-spot.glade.h:54
msgid ""
"Specify if an original size picture should be rotated or not. Smaller sizes "
"are automatically rotated."
@@ -2194,142 +2044,105 @@ msgstr ""
"Одреди да ли слика у изворниј величини треба бити ротирана или не. Мање "
"величине се саме ротирају."
-#: ../src/f-spot.glade.h:82
-msgid "Strip image _metadata"
-msgstr "Одбаци м_етаподатке слике"
-
#. Note for translators: meant as Temperature
-#: ../src/f-spot.glade.h:84
+#: ../src/f-spot.glade.h:56
msgid "Te_mp:"
msgstr "Те_мп:"
-#: ../src/f-spot.glade.h:85
+#: ../src/f-spot.glade.h:57
msgid "Tiny"
msgstr "Танко"
-#: ../src/f-spot.glade.h:86
+#: ../src/f-spot.glade.h:58
msgid "Total original size"
msgstr "Укупна изворна величина"
-#: ../src/f-spot.glade.h:87 ../src/ui/main_window.ui.h:28
+#: ../src/f-spot.glade.h:59 ../src/ui/main_window.ui.h:29
msgid "Zoom _in"
msgstr "У_већај"
-#: ../src/f-spot.glade.h:88 ../src/ui/main_window.ui.h:29
+#: ../src/f-spot.glade.h:60 ../src/ui/main_window.ui.h:30
msgid "Zoom _out"
msgstr "У_мањи"
-#: ../src/f-spot.glade.h:89 ../src/ui/main_window.ui.h:30
+#: ../src/f-spot.glade.h:61 ../src/ui/main_window.ui.h:31
msgid "Zoom in"
msgstr "Увећава преглед слике"
-#: ../src/f-spot.glade.h:90 ../src/ui/main_window.ui.h:31
+#: ../src/f-spot.glade.h:62 ../src/ui/main_window.ui.h:32
msgid "Zoom out"
msgstr "Умањује преглед слике"
-#: ../src/f-spot.glade.h:91
+#: ../src/f-spot.glade.h:63
msgid "_Brightness:"
msgstr "_Осветљеност:"
-#: ../src/f-spot.glade.h:93
+#: ../src/f-spot.glade.h:64
msgid "_Create Mail"
msgstr "Направи _е-писмо"
-#: ../src/f-spot.glade.h:94 ../src/ui/main_window.ui.h:44
+#: ../src/f-spot.glade.h:65 ../src/ui/main_window.ui.h:45
msgid "_Edit"
msgstr "_Уређивање"
-#: ../src/f-spot.glade.h:98
+#: ../src/f-spot.glade.h:67
msgid "_Exposure:"
msgstr "_Експозиција:"
-# bug: flickr
-#: ../src/f-spot.glade.h:99
-msgid "_Flickr"
-msgstr "_Flickr"
-
-#: ../src/f-spot.glade.h:100 ../src/ui/main_window.ui.h:48
+#: ../src/f-spot.glade.h:68 ../src/ui/main_window.ui.h:49
msgid "_Fullscreen"
msgstr "_Цео екран"
-#: ../src/f-spot.glade.h:101
-msgid "_Gallery"
-msgstr "_Галерија"
-
-#: ../src/f-spot.glade.h:102 ../src/ui/main_window.ui.h:49
+#: ../src/f-spot.glade.h:69 ../src/ui/main_window.ui.h:50
msgid "_Help"
msgstr "_Помоћ"
-#: ../src/f-spot.glade.h:103
+#: ../src/f-spot.glade.h:70
msgid "_Hue:"
msgstr "_Нијанса:"
-#: ../src/f-spot.glade.h:104
+#: ../src/f-spot.glade.h:71
msgid "_Interpolate image on zoom"
msgstr "_Интерполиши слику при увећању"
-#: ../src/f-spot.glade.h:105
+#: ../src/f-spot.glade.h:72
msgid "_New Window"
msgstr "_Нови прозор"
-#: ../src/f-spot.glade.h:106
-msgid "_Open album in browser when done uploading"
-msgstr "Отвори _албум у разгледачу по завршеном слању"
-
-#: ../src/f-spot.glade.h:107
-msgid "_Open destination when done exporting"
-msgstr "Отвори _одредиште по завршеном извозу."
-
-#: ../src/f-spot.glade.h:108 ../src/ui/main_window.ui.h:56
+#: ../src/f-spot.glade.h:73 ../src/ui/main_window.ui.h:58
msgid "_Photo"
msgstr "_Фотографија"
-#: ../src/f-spot.glade.h:110
+#: ../src/f-spot.glade.h:74
msgid "_Saturation:"
msgstr "_Засићеност:"
-#: ../src/f-spot.glade.h:111
-msgid "_Scale photos to no larger than: "
-msgstr "Промени величину на не већу од:"
-
-#: ../src/f-spot.glade.h:112 ../src/ui/main_window.ui.h:67
+#: ../src/f-spot.glade.h:75 ../src/ui/main_window.ui.h:69
msgid "_Slideshow"
msgstr "По_кретни приказ"
-#: ../src/f-spot.glade.h:113
-msgid "_Strip metadata"
-msgstr "Од_баци метаподатке"
-
-#: ../src/f-spot.glade.h:114 ../src/UI.Dialog/ui/EditTagDialog.ui.h:6
+#: ../src/f-spot.glade.h:76 ../src/UI.Dialog/ui/EditTagDialog.ui.h:6
msgid "_Tag Name:"
msgstr "И_ме ознаке:"
-#: ../src/f-spot.glade.h:115
+#: ../src/f-spot.glade.h:77
msgid "_Tint:"
msgstr "_Прелив:"
-#: ../src/f-spot.glade.h:116
+#: ../src/f-spot.glade.h:78
msgid "_Toolbar"
msgstr "_Алатница"
-#: ../src/f-spot.glade.h:117
-msgid "_URI:"
-msgstr "_Адреса:"
-
-#: ../src/f-spot.glade.h:118 ../src/ui/main_window.ui.h:75
+#: ../src/f-spot.glade.h:79 ../src/ui/main_window.ui.h:77
msgid "_View"
msgstr "П_реглед"
-#: ../src/f-spot.glade.h:119
-msgid "_Virtual Filesystem"
-msgstr "_Виртуелни систем датотека"
-
-#: ../src/f-spot.glade.h:120 ../src/Widgets/FindBar.cs:177
+#: ../src/f-spot.glade.h:80 ../src/Widgets/FindBar.cs:177
msgid "and"
msgstr "и"
#. at, or after a date, or between dates
-#: ../src/f-spot.glade.h:122
+#: ../src/f-spot.glade.h:82
msgid ""
"at\n"
"after\n"
@@ -2339,40 +2152,36 @@ msgstr ""
"након\n"
"између"
-#: ../src/f-spot.glade.h:126
-msgid "x"
-msgstr "x"
-
-#: ../src/FullScreenView.cs:58
+#: ../src/FullScreenView.cs:59
msgid "Hide"
msgstr "Сакриј"
-#: ../src/FullScreenView.cs:60
+#: ../src/FullScreenView.cs:61
msgid "Hide Toolbar"
msgstr "Сакриј алатницу"
-#: ../src/FullScreenView.cs:66
+#: ../src/FullScreenView.cs:67
msgid "Info"
msgstr "Подаци"
-#: ../src/FullScreenView.cs:68 ../src/Widgets/InfoBox.cs:200
+#: ../src/FullScreenView.cs:69 ../src/Widgets/InfoBox.cs:202
msgid "Image Information"
msgstr "Подаци о слици"
-#: ../src/FullScreenView.cs:73
+#: ../src/FullScreenView.cs:74
msgid "Exit fullscreen"
msgstr "Напусти цео екран"
-#: ../src/FullScreenView.cs:81 ../src/MainWindow.cs:307
-#: ../src/SingleView.cs:103
+#: ../src/FullScreenView.cs:82 ../src/MainWindow.cs:322
+#: ../src/SingleView.cs:89
msgid "Slideshow"
msgstr "Покретни приказ"
-#: ../src/FullScreenView.cs:82
+#: ../src/FullScreenView.cs:83
msgid "Start slideshow"
msgstr "Пусти покретни приказ"
-#: ../src/FullScreenView.cs:128
+#: ../src/FullScreenView.cs:129
msgid "Slide transition:"
msgstr "Прелаз слика:"
@@ -2384,35 +2193,35 @@ msgstr "Још датума"
msgid "More"
msgstr "Још"
-#: ../src/GroupSelector.cs:517 ../src/ui/main_window.ui.h:34
+#: ../src/GroupSelector.cs:517 ../src/ui/main_window.ui.h:35
msgid "_Clear Date Range"
msgstr "_Очисти опсег датума"
-#: ../src/Imaging/Exif.cs:228
+#: ../src/Imaging/Exif.cs:229
msgid "Image Directory"
msgstr "Камера и програми"
-#: ../src/Imaging/Exif.cs:230
+#: ../src/Imaging/Exif.cs:231
msgid "Thumbnail Directory"
msgstr "Подаци о слици"
-#: ../src/Imaging/Exif.cs:232
+#: ../src/Imaging/Exif.cs:233
msgid "Exif Directory"
msgstr "Услови при снимању (Exif)"
-#: ../src/Imaging/Exif.cs:234
+#: ../src/Imaging/Exif.cs:235
msgid "GPS Directory"
msgstr "GPS подаци"
-#: ../src/Imaging/Exif.cs:236
+#: ../src/Imaging/Exif.cs:237
msgid "InterOperability Directory"
msgstr "Подаци о размени података"
-#: ../src/Imaging/Exif.cs:238
+#: ../src/Imaging/Exif.cs:239
msgid "Unknown Directory"
msgstr "Непознати директоријум"
-#: ../src/Imaging/ImageFile.cs:113
+#: ../src/Imaging/ImageFile.cs:119
msgid "Writing to this file format is not supported"
msgstr "Није подржан упис у ову врсту датотеке"
@@ -2547,43 +2356,13 @@ msgstr "Интелектуални жанр објекта"
msgid "Unknown IIM DataSet"
msgstr "Непознат IIM СетПодатака"
-#: ../src/ImportCommand.cs:48 ../src/SingleView.cs:359
-msgid "Select Folder"
-msgstr "Изаберите директоријум"
-
-#: ../src/ImportCommand.cs:259
-msgid "(No Cameras Detected)"
-msgstr "(Нису пронађени апарати)"
-
-#: ../src/ImportCommand.cs:404
-#, csharp-format
-msgid "Loading {0} of {1}"
-msgstr "Учитавам {0} од {1}"
-
-#: ../src/ImportCommand.cs:470
-msgid "Done Loading"
-msgstr "Учитавање завршено"
-
-#: ../src/ImportCommand.cs:684
-msgid "Directory does not exist."
-msgstr "Директоријум не постоји."
-
-# bug: unclear
-#: ../src/ImportCommand.cs:685
-#, csharp-format
-msgid ""
-"The directory you selected \"{0}\" does not exist. Please choose a "
-"different directory"
-msgstr ""
-"Директоријум који сте изабрали „{0}“ не постоји. Изаберите неки други."
-
-#. Note for translators: 'Import Tags' is no command, it means 'Tags used in Import'
-#: ../src/ImportCommand.cs:739 ../src/ImportCommand.cs:741
+#: ../src/Import/ImportController.cs:408 ../src/Import/ImportController.cs:410
#: ../src/XmpTagsImporter.cs:89
-msgid "Import Tags"
+#| msgid "Import Tags"
+msgid "Imported Tags"
msgstr "Увезене ознаке"
-#: ../src/ItemAction.cs:79 ../src/MainWindow.cs:274 ../src/SingleView.cs:86
+#: ../src/ItemAction.cs:79 ../src/MainWindow.cs:289 ../src/SingleView.cs:72
msgid "Rotate Left"
msgstr "Ротирај _улево"
@@ -2591,7 +2370,7 @@ msgstr "Ротирај _улево"
msgid "Rotate picture left"
msgstr "Ротира слику улево"
-#: ../src/ItemAction.cs:91 ../src/MainWindow.cs:278 ../src/SingleView.cs:91
+#: ../src/ItemAction.cs:91 ../src/MainWindow.cs:293 ../src/SingleView.cs:77
msgid "Rotate Right"
msgstr "Ротирај _удесно"
@@ -2603,167 +2382,170 @@ msgstr "Ротира слику удесно"
msgid "Next picture"
msgstr "Иде на наредну слику"
+#: ../src/ItemAction.cs:123
+msgid "Previous"
+msgstr "Претходна"
+
#: ../src/ItemAction.cs:124
msgid "Previous picture"
msgstr "Иде на претходну слику"
-#: ../src/MainWindow.cs:269
+#: ../src/MainWindow.cs:282 ../src/UI.Dialog/ImportDialog.cs:171
+msgid "Import"
+msgstr "Увези"
+
+#: ../src/MainWindow.cs:284
msgid "Import new images"
msgstr "Увези нове слике"
-#: ../src/MainWindow.cs:285 ../src/ui/main_window.ui.h:3
+#: ../src/MainWindow.cs:300 ../src/ui/main_window.ui.h:3
msgid "Browse"
msgstr "Разгледај"
-#: ../src/MainWindow.cs:289
+#: ../src/MainWindow.cs:304
msgid "Browse many photos simultaneously"
msgstr "Прегледај више фотографија одједном"
-#: ../src/MainWindow.cs:293
+#: ../src/MainWindow.cs:308
msgid "Edit Image"
msgstr "Уреди слику"
-#: ../src/MainWindow.cs:297
+#: ../src/MainWindow.cs:312
msgid "View and edit a photo"
msgstr "Прегледај и уреди слику"
-#: ../src/MainWindow.cs:302 ../src/SingleView.cs:98
+#: ../src/MainWindow.cs:317 ../src/SingleView.cs:84
msgid "Fullscreen"
msgstr "Цео екран"
-#: ../src/MainWindow.cs:304 ../src/SingleView.cs:100
+#: ../src/MainWindow.cs:319 ../src/SingleView.cs:86
msgid "View photos fullscreen"
msgstr "Прегледај фотографије у целом екрану"
-#: ../src/MainWindow.cs:309 ../src/SingleView.cs:105
+#: ../src/MainWindow.cs:324 ../src/SingleView.cs:91
msgid "View photos in a slideshow"
msgstr "Прегледај слике у покретном приказу"
-#: ../src/MainWindow.cs:324
+#: ../src/MainWindow.cs:339
msgid "Previous photo"
msgstr "Претходна слика"
# bug: no plural forms needed
-#: ../src/MainWindow.cs:329
+#: ../src/MainWindow.cs:344
msgid "Next photo"
msgstr "Следећа слика"
-#: ../src/MainWindow.cs:1488
-msgid "No cameras detected."
-msgstr "Нисам нашао ниједан апарат."
-
-#: ../src/MainWindow.cs:1489
-msgid ""
-"F-Spot was unable to find any cameras attached to this system. Double check "
-"that the camera is connected and has power"
-msgstr ""
-"Ф-број није успео да нађе ниједан апарат повезан на овај систем. Проверите "
-"да је апарат повезан и укључен"
-
-#: ../src/MainWindow.cs:1528
-msgid "Error connecting to camera"
-msgstr "Грешка при повезивању са апаратом"
+#: ../src/MainWindow.cs:421
+msgid "Show _Find Bar"
+msgstr "_Прикажи линију за претрагу"
-#: ../src/MainWindow.cs:1529
-#, csharp-format
-msgid "Received error \"{0}\" while connecting to camera"
-msgstr "Примих грешку „{0}“ при повезивању са апаратом"
+#: ../src/MainWindow.cs:424
+msgid "Hide _Find Bar"
+msgstr "Сакриј линију за _претрагу"
#. Translators, The singular case will never happen here.
-#: ../src/MainWindow.cs:1815
+#: ../src/MainWindow.cs:1740
#, csharp-format
msgid "Merge the selected tag"
msgid_plural "Merge the {0} selected tags?"
msgstr[0] "Уклони {0} изабрану ознаку?"
msgstr[1] "Уклони {0} изабране ознаке?"
msgstr[2] "Уклони {0} изабраних ознака?"
+msgstr[3] "Уклони изабрану ознаку?"
-#: ../src/MainWindow.cs:1842
+#: ../src/MainWindow.cs:1767
msgid ""
"This operation will merge the selected tags and any sub-tags into a single "
"tag."
msgstr "Ова радња ће спојити изабране ознаке и под-ознаке у једну ознаку."
-#: ../src/MainWindow.cs:1844
+#: ../src/MainWindow.cs:1769
msgid "_Merge Tags"
msgstr "_Споји ознаке"
-#: ../src/MainWindow.cs:2049
+#: ../src/MainWindow.cs:1974
#, csharp-format
msgid "{0} Photo out of {1}"
msgid_plural "{0} Photos out of {1}"
msgstr[0] "Слика {0} од {1}"
msgstr[1] "Слике {0} од {1}"
msgstr[2] "Слика {0} од {1}"
+msgstr[3] "Слика {0} од {1}"
-#: ../src/MainWindow.cs:2051 ../src/SingleView.cs:495
+#: ../src/MainWindow.cs:1976 ../src/SingleView.cs:467
#, csharp-format
msgid "{0} Photo"
msgid_plural "{0} Photos"
msgstr[0] "{0} слика"
msgstr[1] "{0} слике"
msgstr[2] "{0} слика"
+msgstr[3] "Једна слика"
-#: ../src/MainWindow.cs:2054
+#: ../src/MainWindow.cs:1979
#, csharp-format
msgid " ({0} selected)"
msgid_plural " ({0} selected)"
msgstr[0] " ({0} изабрана)"
msgstr[1] " ({0} изабране)"
msgstr[2] " ({0} изабраних)"
+msgstr[3] " ({0} изабрана)"
-#: ../src/MainWindow.cs:2135
+#: ../src/MainWindow.cs:2060
msgid "_Ok"
msgstr "_У реду"
-#: ../src/MainWindow.cs:2136
+#: ../src/MainWindow.cs:2061
msgid "Error Deleting Picture"
msgstr "Грешка при уклањању слика"
-#: ../src/MainWindow.cs:2141
+#: ../src/MainWindow.cs:2066
#, csharp-format
msgid "No permission to delete the file:{1}{0}"
msgstr "Немате овлашжења за брисање датотеке:{1}{0}"
-#: ../src/MainWindow.cs:2145
+#: ../src/MainWindow.cs:2070
#, csharp-format
msgid "An error of type {0} occurred while deleting the file:{2}{1}"
msgstr "Грешка типа {0} се јавила при брисању датотеке:{2}{1}"
-#: ../src/MainWindow.cs:2177
+#: ../src/MainWindow.cs:2102
#, csharp-format
msgid "Delete the selected photo permanently?"
msgid_plural "Delete the {0} selected photos permanently?"
-msgstr[0] "Трајно обрисати {0} изабрану слику?"
-msgstr[1] "Трајно обрисати {0} изабране слике?"
-msgstr[2] "Трајно обрисати {0} изабраних слика?"
+msgstr[0] "Да ли да обришем {0} изабрану слику?"
+msgstr[1] "Да ли да обришем {0} изабране слике?"
+msgstr[2] "Да ли да обришем {0} изабраних слика?"
+msgstr[3] "Да ли да обришем изабрану слику?"
# bug: no plural forms needed
-#: ../src/MainWindow.cs:2181
+#: ../src/MainWindow.cs:2106
msgid "This deletes all versions of the selected photo from your drive."
msgid_plural ""
"This deletes all versions of the selected photos from your drive."
-msgstr[0] "Ово уклања све изабране слике са вашег диска."
-msgstr[1] "Ово уклања све изабране слике са вашег диска."
-msgstr[2] "Ово уклања све изабране слике са вашег диска."
+msgstr[0] "Ово уклања сва издања изабране слике са вашег диска."
+msgstr[1] "Ово уклања сва издања изабраних слика са вашег диска."
+msgstr[2] "Ово уклања сва издања изабраних слика са вашег диска."
+msgstr[3] "Ово уклања сва издања изабране слике са вашег диска."
# bug: no plural forms needed
-#: ../src/MainWindow.cs:2184
+#: ../src/MainWindow.cs:2109
msgid "_Delete photo"
msgid_plural "_Delete photos"
-msgstr[0] "У_клони слике"
+msgstr[0] "У_клони слику"
msgstr[1] "У_клони слике"
msgstr[2] "У_клони слике"
+msgstr[3] "У_клони слику"
-#: ../src/MainWindow.cs:2220
+#: ../src/MainWindow.cs:2145
#, csharp-format
msgid "Remove the selected photo from F-Spot?"
msgid_plural "Remove the {0} selected photos from F-Spot?"
-msgstr[0] "Уклонити {0} изабрану слику из Ф-броја?"
-msgstr[1] "Уклонити {0} изабране слике из Ф-броја?"
-msgstr[2] "Уклонити {0} изабраних слика из Ф-броја?"
+msgstr[0] "Да ли да уклоним {0} изабрану слику из Ф-броја?"
+msgstr[1] "Да ли да уклоним {0} изабране слике из Ф-броја?"
+msgstr[2] "Да ли да уклоним {0} изабраних слика из Ф-броја?"
+msgstr[3] "Да ли да уклоним изабрану слику из Ф-броја?"
-#: ../src/MainWindow.cs:2225
+#: ../src/MainWindow.cs:2150
msgid ""
"If you remove photos from the F-Spot catalog all tag information will be "
"lost. The photos remain on your computer and can be imported into F-Spot "
@@ -2773,51 +2555,54 @@ msgstr ""
"изгубљени. Слике ће остати на вашем рачунару и могу се поново увести у Ф-"
"Спот."
-#: ../src/MainWindow.cs:2226
+#: ../src/MainWindow.cs:2151
msgid "_Remove from Catalog"
msgstr "У_клони из каталога"
# bug: no plural forms
-#: ../src/MainWindow.cs:2289
+#: ../src/MainWindow.cs:2220
#, csharp-format
msgid "Delete tag \"{0}\"?"
msgstr "Да уклоним ознаку „{0}“?"
-#: ../src/MainWindow.cs:2291
+#: ../src/MainWindow.cs:2222
#, csharp-format
msgid "Delete the {0} selected tags?"
msgstr "Да уклони {0} изабране ознаке?"
-#: ../src/MainWindow.cs:2296
+#: ../src/MainWindow.cs:2227
msgid "photo"
msgid_plural "photos"
msgstr[0] "слика"
msgstr[1] "слике"
-msgstr[2] "слика"
+msgstr[2] "слике"
+msgstr[3] "слика"
-#: ../src/MainWindow.cs:2298
+#: ../src/MainWindow.cs:2229
#, csharp-format
msgid "If you delete this tag, the association with {0} {1} will be lost."
msgid_plural ""
"If you delete these tags, the association with {0} {1} will be lost."
msgstr[0] "Уколико уклоните ознаку, веза са {0} {1} ће бити изгубљена."
-msgstr[1] "Уколико уклоните ознаку, везе са {0} {1} ће бити изгубљене."
-msgstr[2] "Уколико уклоните ознаку, везе са {0} {1} ће бити изгубљене."
+msgstr[1] "Уколико уклоните ознаке, везе са {0} {1} ће бити изгубљене."
+msgstr[2] "Уколико уклоните ознаке, везе са {0} {1} ће бити изгубљене."
+msgstr[3] "Уколико уклоните ознаку, веза са {0} {1} ће бити изгубљена."
# bug: no plural forms
-#: ../src/MainWindow.cs:2303
+#: ../src/MainWindow.cs:2234
msgid "_Delete tag"
msgid_plural "_Delete tags"
-msgstr[0] "_Уклони ознаке"
+msgstr[0] "_Уклони ознаку"
msgstr[1] "_Уклони ознаке"
msgstr[2] "_Уклони ознаке"
+msgstr[3] "_Уклони ознаку"
#. A Category is not empty. Can not delete it.
-#: ../src/MainWindow.cs:2317
+#: ../src/MainWindow.cs:2248
msgid "Tag is not empty"
msgstr "Ознака није празна"
-#: ../src/MainWindow.cs:2318
+#: ../src/MainWindow.cs:2249
#, csharp-format
msgid ""
"Can not delete tags that have tags within them. Please delete tags under "
@@ -2826,44 +2611,49 @@ msgstr ""
"Не могу да обришем ознаке које имају ознаке унутар себе. Обришите најпре "
"ознаке испод {0}"
-#: ../src/MainWindow.cs:2750
+#: ../src/MainWindow.cs:2692
msgid "Rotate selected photo left"
msgid_plural "Rotate selected photos left"
msgstr[0] "Ротирај изабрану слику улево"
-msgstr[1] "Ротирај изабране слику улево"
-msgstr[2] "Ротирај изабране слику улево"
+msgstr[1] "Ротирај изабране слике улево"
+msgstr[2] "Ротирај изабране слике улево"
+msgstr[3] "Ротирај изабрану слику улево"
-#: ../src/MainWindow.cs:2763
+#: ../src/MainWindow.cs:2705
msgid "Rotate selected photo right"
msgid_plural "Rotate selected photos right"
msgstr[0] "Ротирај изабрану слику удесно"
-msgstr[1] "Ротирај изабране слику удесно"
-msgstr[2] "Ротирај изабране слику удесно"
+msgstr[1] "Ротирај изабране слике удесно"
+msgstr[2] "Ротирај изабране слике удесно"
+msgstr[3] "Ротирај изабрану слику удесно"
-#: ../src/MainWindow.cs:2774
+#: ../src/MainWindow.cs:2716
#, csharp-format
msgid "Find _Selected Tag"
msgid_plural "Find _Selected Tags"
msgstr[0] "Нађи изабрану ознаку"
msgstr[1] "Нађи изабране ознаке"
msgstr[2] "Нађи изабране ознаке"
+msgstr[3] "Нађи изабрану ознаку"
-#: ../src/MainWindow.cs:2778
+#: ../src/MainWindow.cs:2720
#, csharp-format
msgid "Find Selected Tag _With"
msgid_plural "Find Selected Tags _With"
msgstr[0] "Нађи изабрану ознаку са"
msgstr[1] "Нађи изабране ознаке са"
msgstr[2] "Нађи изабране ознаке са"
+msgstr[3] "Нађи изабрану ознаку са"
-#: ../src/MainWindow.cs:2819
+#: ../src/MainWindow.cs:2761
msgid "Create New Version?"
msgid_plural "Create New Versions?"
msgstr[0] "Да направим ново издање?"
msgstr[1] "Да направим нова издања?"
msgstr[2] "Да направим нова издања?"
+msgstr[3] "Да направим ново издање?"
-#: ../src/MainWindow.cs:2821
+#: ../src/MainWindow.cs:2763
#, csharp-format
msgid ""
"Before launching {1}, should F-Spot create a new version of the selected "
@@ -2875,13 +2665,16 @@ msgstr[0] ""
"Да ли да Ф-број направи ново издање изабране фотографије пре покретања {1} "
"како би оригинал остао нетакнут?"
msgstr[1] ""
-"Да ли да Ф-број направи ново издање изабраних фотографија пре покретања {1} "
+"Да ли да Ф-број направи нова издања изабраних фотографија пре покретања {1} "
"како би оригинали остали нетакнути?"
msgstr[2] ""
-"Да ли да Ф-број направи ново издање изабраних фотографија пре покретања {1} "
+"Да ли да Ф-број направи нова издања изабраних фотографија пре покретања {1} "
"како би оригинал остали нетакнути?"
+msgstr[3] ""
+"Да ли да Ф-број направи ново издање изабране фотографије пре покретања {1} "
+"како би оригинал остао нетакнут?"
-#: ../src/MainWindow.cs:2843
+#: ../src/MainWindow.cs:2785
msgid "XCF version"
msgstr "XCF издање"
@@ -2905,94 +2698,100 @@ msgstr "Кључне речи"
msgid "Compression"
msgstr "Компресија"
-#: ../src/MetadataStore.cs:25
+#. Translators: Planar Configuration is the label for the tiff:PlanarConfiguration tag
+#. "when Planar Configuration=1, this implies that all components must have
+#. the same BitsPerSample value; when Planar Configuration=2, different
+#. components could have different bit depths."
+#: ../src/MetadataStore.cs:29
msgid "Planar Configuration"
msgstr "Планарне поставке"
-#: ../src/MetadataStore.cs:27
+#: ../src/MetadataStore.cs:31
msgid "Orientation"
msgstr "Орјентација"
-#: ../src/MetadataStore.cs:29
+#: ../src/MetadataStore.cs:33
msgid "Photometric Interpretation"
msgstr "Фотометријска интерполација"
-#: ../src/MetadataStore.cs:31
+#: ../src/MetadataStore.cs:35
msgid "Resolution Unit"
msgstr "Мера резолуције"
-#: ../src/MetadataStore.cs:33
+#: ../src/MetadataStore.cs:37
msgid "Exposure Program"
msgstr "Програм експозиције"
-#: ../src/MetadataStore.cs:35
+#: ../src/MetadataStore.cs:39
msgid "Metering Mode"
msgstr "Режим мерења"
-#: ../src/MetadataStore.cs:37
+#: ../src/MetadataStore.cs:41
msgid "Exposure Mode"
msgstr "Режим експозиције"
-#: ../src/MetadataStore.cs:39
+#: ../src/MetadataStore.cs:43
msgid "Custom Rendered"
msgstr "Произвољно исцртавање"
-#: ../src/MetadataStore.cs:41
+#: ../src/MetadataStore.cs:45
msgid "Components Configuration"
msgstr "Поставке компоненти"
-#: ../src/MetadataStore.cs:43
+#: ../src/MetadataStore.cs:47
msgid "Light Source"
msgstr "Извор светла"
-#: ../src/MetadataStore.cs:45
+#: ../src/MetadataStore.cs:49
msgid "Sensing Method"
msgstr "Метод очитавања"
-#: ../src/MetadataStore.cs:47
+#: ../src/MetadataStore.cs:51
msgid "Color Space"
msgstr "Простор боја"
-#: ../src/MetadataStore.cs:49
+#: ../src/MetadataStore.cs:53
msgid "White Balance"
msgstr "Баланс белог"
-#: ../src/MetadataStore.cs:51
+#: ../src/MetadataStore.cs:55
msgid "Focal Plane Resolution Unit"
msgstr "Јединица резолуције жижне равни"
-#: ../src/MetadataStore.cs:53
+#: ../src/MetadataStore.cs:57
msgid "File Source Type"
msgstr "Тип изворне датотеке"
-#: ../src/MetadataStore.cs:55
+#: ../src/MetadataStore.cs:59
msgid "Scene Capture Type"
msgstr "Режим фотографисања"
# Не знам где је ово у???
-#: ../src/MetadataStore.cs:57
+#. Translators: Gain Control is the label for the exif:GainControl tag
+#. "This tag indicates the degree of overall image gain adjustment."
+#: ../src/MetadataStore.cs:63
msgid "Gain Control"
msgstr "Контрола постизања"
-#: ../src/MetadataStore.cs:59
+#: ../src/MetadataStore.cs:65
msgid "Contrast"
msgstr "Контраст"
-#: ../src/MetadataStore.cs:61
+#: ../src/MetadataStore.cs:67
msgid "Saturation"
msgstr "Засићеност"
-#: ../src/MetadataStore.cs:63
+#: ../src/MetadataStore.cs:69
msgid "Sharpness"
msgstr "Оштрина"
-#: ../src/MetadataStore.cs:65
+#: ../src/MetadataStore.cs:71
msgid "Scene Type"
msgstr "Врста сцене"
#. Fixme this should really set parent menu
#. items insensitve
-#: ../src/PhotoTagMenu.cs:74
+#: ../src/PhotoTagMenu.cs:62
msgid "(No Tags)"
msgstr "(Нема ознака)"
@@ -3012,70 +2811,76 @@ msgstr "Преименуј издање"
msgid "New name:"
msgstr "Нови назив:"
-#: ../src/PhotoVersionCommands.cs:110
-msgid "Could not create a new version"
-msgstr "Не могу да направим ново издање"
-
-#: ../src/PhotoVersionCommands.cs:111
-#, csharp-format
-msgid "Received exception \"{0}\". Unable to create version \"{1}\""
-msgstr "Примио сам изузетак „{0}“. Не могу да направим издање „{1}“"
-
-#: ../src/PhotoVersionCommands.cs:138
-msgid "Really Delete?"
-msgstr "Заиста обрисати?"
-
-#: ../src/PhotoVersionCommands.cs:139
-msgid "Cancel"
-msgstr "Одустани"
-
-#: ../src/PhotoVersionCommands.cs:140
+#: ../src/PhotoVersionCommands.cs:123
msgid "Delete"
msgstr "Уклони"
-#: ../src/PhotoVersionCommands.cs:144
+#: ../src/PhotoVersionCommands.cs:124
#, csharp-format
msgid "Really delete version \"{0}\"?"
msgstr "Заиста обрисати издање „{0}“?"
-#: ../src/PhotoVersionCommands.cs:154
-msgid "Could not delete a version"
-msgstr "Не могу да обришем издање"
+#: ../src/PhotoVersionCommands.cs:125
+msgid "This removes the version and deletes the corresponding file from disk."
+msgstr "Ово уклања издање и брише одговарајућу датотеку са диска."
+
+#: ../src/PhotoVersionCommands.cs:170
+msgid "De_tach"
+msgstr "Раз_двоји"
-#: ../src/PhotoVersionCommands.cs:155
+#: ../src/PhotoVersionCommands.cs:171
#, csharp-format
-msgid "Received exception \"{0}\". Unable to delete version \"{1}\""
-msgstr "Примио сам изузетак „{0}“. Не могу да обришем издање „{1}“"
+#| msgid "Really delete version \"{0}\"?"
+msgid "Really detach version \"{0}\" from \"{1}\"?"
+msgstr "Да заиста раздвојим издање „{0}“ од „{1}“?"
+
+#: ../src/PhotoVersionCommands.cs:172
+msgid ""
+"This makes the version appear as a separate photo in the library. To undo, "
+"drag the new photo back to its parent."
+msgstr ""
+"Овим ће слике бити приказане као различите фотографије у збирци. Да "
+"поништите измени превуците фотографију натраг на њену родитељску слику."
+
+#: ../src/PhotoVersionCommands.cs:195
+#| msgid "Reparented"
+msgid "Re_parent"
+msgstr "Придру_жи"
#: ../src/PhotoVersionCommands.cs:196
-msgid "Could not rename a version"
-msgstr "Не могу да преименујем издање"
+#, csharp-format
+#| msgid "Really delete version \"{0}\"?"
+msgid "Really reparent \"{0}\" as version of \"{1}\"?"
+msgid_plural "Really reparent {2} photos as versions of \"{1}\"?"
+msgstr[0] "Да ли да придружим „{2}“ слику као издање „{1}“?"
+msgstr[1] "Да ли да придружим „{2}“ слике као издање „{1}“?"
+msgstr[2] "Да ли да придружим „{2}“ слика као издање „{1}“?"
+msgstr[3] "Да ли да придружим „{0}“ слику као издање „{1}“?"
+
+#: ../src/PhotoVersionCommands.cs:199
+msgid ""
+"This makes the photos appear as a single one in the library. The versions "
+"can be detached using the Photo menu."
+msgstr ""
+"Овим ће слике бити приказане као засебне фотографије у збирци. Издања можете "
+"раздвојити из менија Фотографија."
-#: ../src/PhotoVersionCommands.cs:197
+#: ../src/PhotoVersionCommands.cs:239
#, csharp-format
-msgid "Received exception \"{0}\". Unable to rename version to \"{1}\""
-msgstr "Примио сам изузетак „{0}“. Не могу да преименујем издање у „{1}“"
+#| msgid "Received exception \"{0}\". Unable to save photo {1}"
+msgid "Received exception \"{0}\"."
+msgstr "Примио сам изузетак „{0}“."
-#: ../src/PhotoVersionMenu.cs:66 ../src/Widgets/InfoBox.cs:554
-#: ../src/Widgets/InfoBox.cs:556
+#: ../src/PhotoVersionMenu.cs:66 ../src/Widgets/InfoBox.cs:566
+#: ../src/Widgets/InfoBox.cs:568
msgid "(No Edits)"
msgstr "(Без измена)"
-#: ../src/PhotoView.cs:169 ../src/UI.Dialog/EditExceptionDialog.cs:38
-msgid "Error editing photo"
-msgstr "Грешка при измени слике"
-
-#: ../src/PhotoView.cs:170 ../src/Sharpener.cs:73
-#: ../src/UI.Dialog/EditExceptionDialog.cs:25
-#, csharp-format
-msgid "Received exception \"{0}\". Unable to save photo {1}"
-msgstr "Примио сам изузетак „{0}“. Не могу да сачувам слику {1}"
-
-#: ../src/PhotoView.cs:359
+#: ../src/PhotoView.cs:339
msgid "Comment:"
msgstr "Коментар:"
-#: ../src/Preferences.cs:149
+#: ../src/Preferences.cs:152
msgid "Photos"
msgstr "Фотографије"
@@ -3113,44 +2918,37 @@ msgstr "Освежи претрагу"
msgid "No matching photos found"
msgstr "Нису нађене фотографије"
-#: ../src/QueryWidget.cs:155
-msgid "Hide _Find Bar"
-msgstr "Сакриј линију за _претрагу"
-
-#: ../src/QueryWidget.cs:161
-msgid "Show _Find Bar"
-msgstr "_Прикажи линију за претрагу"
-
-#: ../src/RotateCommand.cs:96 ../src/RotateCommand.cs:111
+#: ../src/RotateCommand.cs:87 ../src/RotateCommand.cs:102
msgid "Unable to rotate this type of photo"
msgstr "Не могу да ротирам ову врсту слике"
-#: ../src/RotateCommand.cs:131
+#: ../src/RotateCommand.cs:122
msgid "Unable to rotate readonly file"
msgstr "Не могу да ротирам датотеке без овлашћења за упис"
-#: ../src/RotateCommand.cs:198
+#: ../src/RotateCommand.cs:185
msgid "Rotating photos"
msgstr "Окрећем слике"
-#: ../src/RotateCommand.cs:209
+#: ../src/RotateCommand.cs:196
#, csharp-format
msgid "Rotating photo \"{0}\""
msgstr "Окрећем слику „{0}“"
-#: ../src/RotateCommand.cs:222
+#: ../src/RotateCommand.cs:209
msgid "Directory not found"
msgstr "Директоријум није нађен"
-#: ../src/RotateCommand.cs:242
+#: ../src/RotateCommand.cs:229
#, csharp-format
msgid "Unable to rotate photo"
msgid_plural "Unable to rotate {0} photos"
msgstr[0] "Не могу да ротирам {0} слику"
msgstr[1] "Не могу да ротирам {0} слике"
msgstr[2] "Не могу да ротирам {0} слика"
+msgstr[3] "Не могу да ротирам слику"
-#: ../src/RotateCommand.cs:244
+#: ../src/RotateCommand.cs:231
#, csharp-format
msgid ""
"The photo could not be rotated because it is on a read only file system or "
@@ -3170,43 +2968,53 @@ msgstr[2] ""
"Не могу да ротирам {0} слика зато што се налазе на систему датотека који "
"омогућава само читање или на медију као што је ЦД. Проверите овлашћења и "
"покушајте поново."
+msgstr[3] ""
+"Не могу да ротирам слику зато што се налази на систему датотека који "
+"омогућава само читање или на медију као што је ЦД. Проверите овлашћења и "
+"покушајте поново."
-#: ../src/RotateCommand.cs:271
+#: ../src/RotateCommand.cs:258
#, csharp-format
msgid "Received error \"{0}\" while attempting to rotate {1}"
msgstr "Примих грешку „{0}“ при покушају да ротирам {1}"
-#: ../src/RotateCommand.cs:276
+#: ../src/RotateCommand.cs:263
msgid "Error while rotating photo."
msgstr "Грешка при ротирању слике."
-#: ../src/SendEmail.cs:240
+#: ../src/SendEmail.cs:214
msgid "Preparing email"
msgstr "Припремам е-пошту"
-#: ../src/SendEmail.cs:292
+#: ../src/SendEmail.cs:266
#, csharp-format
msgid "Exporting picture \"{0}\""
msgstr "Извозим слику „{0}“"
-#: ../src/SendEmail.cs:314
+#: ../src/SendEmail.cs:288
msgid "Error processing image"
msgstr "Грешка при обради ознаке"
-#: ../src/SendEmail.cs:315
+#: ../src/SendEmail.cs:289
#, csharp-format
msgid "An error occured while processing \"{0}\": {1}"
msgstr "Јавила се грешка при обради „{0}“: {1}"
#. Send the mail :)
-#: ../src/SendEmail.cs:330
-msgid "my photos"
-msgstr "моје слике"
+#: ../src/SendEmail.cs:303
+#| msgid "Photos"
+msgid "My Photos"
+msgstr "Моје фотографије"
#: ../src/Sharpener.cs:72
msgid "Error saving sharpened photo"
msgstr "Грешка при чувању изоштрене слике"
+#: ../src/Sharpener.cs:73 ../src/UI.Dialog/EditExceptionDialog.cs:26
+#, csharp-format
+msgid "Received exception \"{0}\". Unable to save photo {1}"
+msgstr "Примио сам изузетак „{0}“. Не могу да сачувам слику {1}"
+
#: ../src/Sharpener.cs:102
msgid "Sharpen"
msgstr "Изоштри"
@@ -3223,36 +3031,40 @@ msgstr "Полупречник:"
msgid "Threshold:"
msgstr "Праг:"
-#: ../src/SingleView.cs:88
+#: ../src/SingleView.cs:74
msgid "Rotate photo left"
msgstr "Ротирај слику у_лево"
-#: ../src/SingleView.cs:93
+#: ../src/SingleView.cs:79
msgid "Rotate photo right"
msgstr "Ротирај слику у_десно"
-#: ../src/SingleView.cs:130
+#: ../src/SingleView.cs:116
msgid "Folder"
msgstr "Фасцикла"
-#: ../src/SingleView.cs:356
+#: ../src/SingleView.cs:341
msgid "Open"
msgstr "Отвори"
-#: ../src/SingleView.cs:456
+#: ../src/SingleView.cs:344
+msgid "Select Folder"
+msgstr "Изаберите директоријум"
+
+#: ../src/SingleView.cs:428
msgid "Set as Background"
msgstr "Постави за позадину"
-#: ../src/TagCommands.cs:96 ../src/TagSelectionWidget.cs:498
+#: ../src/TagCommands.cs:97 ../src/TagSelectionWidget.cs:491
#: ../src/UI.Dialog/EditTagDialog.cs:78
msgid "This name is already in use"
msgstr "Ово име је већ у употреби"
-#: ../src/TagCommands.cs:144
+#: ../src/TagCommands.cs:145
msgid "Create New Tag"
msgstr "Направи нову ознаку"
-#: ../src/TagCommands.cs:145
+#: ../src/TagCommands.cs:146
msgid "Name of New Tag:"
msgstr "Име нове ознаке:"
@@ -3263,21 +3075,24 @@ msgid_plural "Find"
msgstr[0] "_Нађи"
msgstr[1] "_Нађи"
msgstr[2] "_Нађи"
+msgstr[3] "_Нађи"
-#: ../src/TagPopup.cs:36 ../src/Widgets/TagMenu.cs:91
+#: ../src/TagPopup.cs:36 ../src/Widgets/TagMenu.cs:98
msgid "Create New Tag..."
msgstr "Направи нову ознаку..."
#: ../src/TagPopup.cs:42
-msgid "Edit Selected Tag..."
-msgstr "Уреди изабрану ознаку..."
+#| msgid "Edit Tag"
+msgid "Edit Tag..."
+msgstr "Уреди ознаку..."
#: ../src/TagPopup.cs:46
msgid "Delete Tag"
msgid_plural "Delete Tags"
msgstr[0] "Уклони ознаку"
msgstr[1] "Уклони ознаке"
-msgstr[2] "Уклони ознака"
+msgstr[2] "Уклони ознаке"
+msgstr[3] "Уклони ознаку"
#: ../src/TagPopup.cs:52
msgid "Attach Tag to Selection"
@@ -3285,6 +3100,7 @@ msgid_plural "Attach Tags to Selection"
msgstr[0] "Додај ознаку на изабрану"
msgstr[1] "Додај ознаку на изабране"
msgstr[2] "Додај ознаку на изабране"
+msgstr[3] "Додај ознаку на изабрану"
#: ../src/TagPopup.cs:56
msgid "Remove Tag From Selection"
@@ -3292,6 +3108,7 @@ msgid_plural "Remove Tags From Selection"
msgstr[0] "Уклони ознаку са изабране"
msgstr[1] "Уклони ознаку са изабраних"
msgstr[2] "Уклони ознаку са изабраних"
+msgstr[3] "Уклони ознаку са изабране"
#: ../src/TagPopup.cs:62
msgid "Merge Tags"
@@ -3318,6 +3135,7 @@ msgid_plural "Find _With"
msgstr[0] "Нађи _са"
msgstr[1] "Нађи _са"
msgstr[2] "Нађи _са"
+msgstr[3] "Нађи _са"
#: ../src/TagQueryWidget.cs:114
msgid "All"
@@ -3332,32 +3150,32 @@ msgstr "Није {0}"
msgid "Drag tags here to search for them"
msgstr "Превуците овде ознаке за претрагу"
-#: ../src/TagSelectionWidget.cs:497
+#: ../src/TagSelectionWidget.cs:490
msgid "Error renaming tag"
msgstr "Грешка при преименовању ознаке"
-#: ../src/TagStore.cs:203
+#: ../src/TagStore.cs:204
msgid "Favorites"
msgstr "Омиљене"
-#: ../src/TagStore.cs:208
+#: ../src/TagStore.cs:209
msgid "Hidden"
msgstr "Скривене"
-#: ../src/TagStore.cs:216
+#: ../src/TagStore.cs:217
msgid "People"
msgstr "Људи"
-#: ../src/TagStore.cs:221
+#: ../src/TagStore.cs:222
msgid "Places"
msgstr "Места"
-#: ../src/TagStore.cs:226
+#: ../src/TagStore.cs:227
msgid "Events"
msgstr "Догађаји"
#. The label for the root category is used in new and edit tag dialogs
-#: ../src/TagStore.cs:239 ../src/Widgets/InfoBox.cs:400
+#: ../src/TagStore.cs:240 ../src/Widgets/InfoBox.cs:410
msgid "(None)"
msgstr "(Ништа)"
@@ -3381,24 +3199,25 @@ msgstr " или "
msgid "or"
msgstr "или"
-#: ../src/ThumbnailCommand.cs:20
+#: ../src/ThumbnailCommand.cs:21
msgid "Updating Thumbnails"
msgstr "Ажурирам умањене приказе"
-#: ../src/ThumbnailCommand.cs:28
+#: ../src/ThumbnailCommand.cs:29
#, csharp-format
msgid "Updating picture \"{0}\""
msgstr "Ажурирам слику „{0}“"
-#: ../src/UI.Dialog/AboutDialog.cs:71
+#: ../src/UI.Dialog/AboutDialog.cs:77
msgid "Photo management for GNOME"
msgstr "Уређивање фото-албума у Гному"
-#: ../src/UI.Dialog/AboutDialog.cs:72
-msgid "Copyright © 2003-2009 Novell Inc."
-msgstr "Ауторско право © 2003-2009 Novell Inc."
+#: ../src/UI.Dialog/AboutDialog.cs:78
+#| msgid "Copyright © 2003-2009 Novell Inc."
+msgid "Copyright © 2003-2010 Novell Inc."
+msgstr "Ауторско право © 2003-2010 Novell Inc."
-#: ../src/UI.Dialog/AboutDialog.cs:95
+#: ../src/UI.Dialog/AboutDialog.cs:101
msgid "translator-credits"
msgstr ""
"Данило Шеган <danilo at prevod.org>\n"
@@ -3406,11 +3225,11 @@ msgstr ""
"\n"
"Prevod.org — превод на српски језик."
-#: ../src/UI.Dialog/AboutDialog.cs:100
+#: ../src/UI.Dialog/AboutDialog.cs:106
msgid "F-Spot Website"
msgstr "Ф-број веб сајт"
-#: ../src/UI.Dialog/AdjustTimeDialog.cs:112
+#: ../src/UI.Dialog/AdjustTimeDialog.cs:113
#: ../src/UI.Dialog/ui/AdjustTimeDialog.ui.h:10
#, csharp-format
msgid "Shift all photos by {0}"
@@ -3452,16 +3271,20 @@ msgstr "Претходна недеља (пон-нед)"
msgid "Customized Range"
msgstr "Произвољан опсег"
-#: ../src/UI.Dialog/EditTagIconDialog.cs:46
+#: ../src/UI.Dialog/EditExceptionDialog.cs:39
+msgid "Error editing photo"
+msgstr "Грешка при измени слике"
+
+#: ../src/UI.Dialog/EditTagIconDialog.cs:47
#, csharp-format
msgid "Edit Icon for Tag {0}"
msgstr "Измени икону за ознаку {0}"
-#: ../src/UI.Dialog/EditTagIconDialog.cs:68
+#: ../src/UI.Dialog/EditTagIconDialog.cs:69
msgid "Select Photo from file"
msgstr "Иабери слику из датотеке"
-#: ../src/UI.Dialog/EditTagIconDialog.cs:90
+#: ../src/UI.Dialog/EditTagIconDialog.cs:91
#, csharp-format
msgid ""
"\n"
@@ -3478,16 +3301,16 @@ msgstr ""
" означену овом ознаком. Означите фотографију са „{0}“ и вратите се\n"
" овде како би је искористили за иконицу."
-#: ../src/UI.Dialog/EditTagIconDialog.cs:168
+#: ../src/UI.Dialog/EditTagIconDialog.cs:169
msgid "Unable to load image"
msgstr "Не могу да учитам слику"
-#: ../src/UI.Dialog/EditTagIconDialog.cs:169
+#: ../src/UI.Dialog/EditTagIconDialog.cs:170
#, csharp-format
msgid "Unable to load \"{0}\" as icon for the tag"
msgstr "Не могу да учитам „{0}“ за иконицу ознаке"
-#: ../src/UI.Dialog/EditTagIconDialog.cs:207
+#: ../src/UI.Dialog/EditTagIconDialog.cs:208
#, csharp-format
msgid "Photo {0} of {1}"
msgstr "Слика {0} од {1}"
@@ -3504,24 +3327,54 @@ msgstr "Детаљи грешке"
msgid "An unhandled exception was thrown: "
msgstr "Избечена је нерешива грешка: "
-#: ../src/UI.Dialog/PreferenceDialog.cs:53
-#: ../src/UI.Dialog/PreferenceDialog.cs:71
+#: ../src/UI.Dialog/ImportDialog.cs:15
+#| msgid "Open _Folder..."
+msgid "Choose Folder..."
+msgstr "Изабери _фасциклу..."
+
+#: ../src/UI.Dialog/ImportDialog.cs:124
+#| msgid "Import Source:"
+msgid "Choose Import source..."
+msgstr "Изабери извор за увоз..."
+
+#: ../src/UI.Dialog/ImportDialog.cs:136
+msgid "(No Cameras Detected)"
+msgstr "(Нису пронађени апарати)"
+
+#: ../src/UI.Dialog/ImportDialog.cs:264
+#, csharp-format
+#| msgid "Photo {0} of {1}"
+msgid "Importing Photos: {0} of {1}..."
+msgstr "Увозим слике: {0} од {1}..."
+
+#: ../src/UI.Dialog/ImportDialog.cs:288
+#| msgid "Rotating photos"
+msgid "Importing photos..."
+msgstr "Увозим слике..."
+
+#. TODO: Using a GtkSpinner would be nicer here.
+#: ../src/UI.Dialog/ImportDialog.cs:295
+msgid "Searching for photos... (You can already click Import to continue)"
+msgstr "Тражим фотографије (Можете кликнути Увези за наставак)"
+
+#: ../src/UI.Dialog/PreferenceDialog.cs:55
+#: ../src/UI.Dialog/PreferenceDialog.cs:78
msgid "None"
msgstr "Ништа"
-#: ../src/UI.Dialog/PreferenceDialog.cs:55
+#: ../src/UI.Dialog/PreferenceDialog.cs:57
msgid "System profile"
msgstr "Системски профил"
-#: ../src/UI.Dialog/PreferenceDialog.cs:84
+#: ../src/UI.Dialog/PreferenceDialog.cs:95
msgid "Standard theme"
msgstr "Стандардна тема"
-#: ../src/UI.Dialog/RepairDbDialog.cs:20
+#: ../src/UI.Dialog/RepairDbDialog.cs:21
msgid "Error loading database."
msgstr "Грешка при учитавању безе података"
-#: ../src/UI.Dialog/RepairDbDialog.cs:21
+#: ../src/UI.Dialog/RepairDbDialog.cs:22
#, csharp-format
msgid ""
"F-Spot encountered an error while loading the photo database. The old "
@@ -3530,15 +3383,15 @@ msgstr ""
"Ф-број је наишао на грешку при учитавању базе. Стара база је пресељена у {0} "
"и нова база је направљена."
-#: ../src/UI.Dialog/SelectionRatioDialog.cs:60
+#: ../src/UI.Dialog/SelectionRatioDialog.cs:61
msgid "Label"
msgstr "Натпис"
-#: ../src/UI.Dialog/SelectionRatioDialog.cs:64
+#: ../src/UI.Dialog/SelectionRatioDialog.cs:65
msgid "Ratio"
msgstr "Однос"
-#: ../src/UI.Dialog/ThreadProgressDialog.cs:49
+#: ../src/UI.Dialog/ThreadProgressDialog.cs:55
msgid "Retry"
msgstr "Покушај поново"
@@ -3731,8 +3584,9 @@ msgid "By _Rating"
msgstr "По _оценама"
#: ../src/ui/main_window.ui.h:7
-msgid "Copy Locat_ion"
-msgstr "Умножи _путању слике"
+#| msgid "Crop"
+msgid "Copy"
+msgstr "Умножи"
#: ../src/ui/main_window.ui.h:8
msgid "Create New _Tag..."
@@ -3743,190 +3597,205 @@ msgid "Create _New Version..."
msgstr "_Направи ново издање..."
#: ../src/ui/main_window.ui.h:10
-msgid "F-Spot"
-msgstr "Ф-број"
+#| msgid "_Delete Version"
+msgid "De_tach Version"
+msgstr "_Раздвоји издање"
-#: ../src/ui/main_window.ui.h:11
+#: ../src/ui/main_window.ui.h:12
msgid "Fin_d"
msgstr "_Нађи"
-#: ../src/ui/main_window.ui.h:12
+#: ../src/ui/main_window.ui.h:13
msgid "Manage _Extensions"
msgstr "Уреди п_роширења"
-#: ../src/ui/main_window.ui.h:13
+#: ../src/ui/main_window.ui.h:14
msgid "Page Set_up..."
msgstr "Подеша_вање стране..."
-#: ../src/ui/main_window.ui.h:14
+#: ../src/ui/main_window.ui.h:15
msgid "Re_fresh Thumbnail"
msgstr "_Освежи мањи приказ"
#: ../src/ui/main_window.ui.h:19
+msgid "Select _All"
+msgstr "Изабери _све"
+
+#: ../src/ui/main_window.ui.h:20
msgid "Select _None"
msgstr "Изабери _ништа"
-#: ../src/ui/main_window.ui.h:20
+#: ../src/ui/main_window.ui.h:21
msgid "Send by _Mail..."
msgstr "П_ошаљи преко е-поште..."
-#: ../src/ui/main_window.ui.h:22
+#: ../src/ui/main_window.ui.h:23
msgid "Side_bar"
-msgstr "Бочна _линија"
+msgstr "_Бочна површ"
-#: ../src/ui/main_window.ui.h:23
+#: ../src/ui/main_window.ui.h:24
msgid "T_ags"
msgstr "_Ознаке"
-#: ../src/ui/main_window.ui.h:25
+#: ../src/ui/main_window.ui.h:26
msgid "Thumbnail _elements"
msgstr "Елементи _умањеног приказа"
-#: ../src/ui/main_window.ui.h:26
+#: ../src/ui/main_window.ui.h:27
msgid "Too_lbar"
msgstr "_Алатница"
-#: ../src/ui/main_window.ui.h:27
+#: ../src/ui/main_window.ui.h:28
msgid "View"
msgstr "Преглед"
#: ../src/ui/main_window.ui.h:33
+msgid "_Attach Tag"
+msgstr "_Додај ознаку"
+
+#: ../src/ui/main_window.ui.h:34
msgid "_Attach Tag to Selection"
msgstr "_Додај ознаку на изабране"
-#: ../src/ui/main_window.ui.h:35
+#: ../src/ui/main_window.ui.h:36
msgid "_Clear Rating Filter"
msgstr "_Очисти филтер оцена"
-#: ../src/ui/main_window.ui.h:36
+#: ../src/ui/main_window.ui.h:37
msgid "_Clear Roll Filter"
msgstr "_Очисти филтер увожења"
-#: ../src/ui/main_window.ui.h:38
+#: ../src/ui/main_window.ui.h:39
msgid "_Components"
msgstr "_Делови"
-#: ../src/ui/main_window.ui.h:39
+#: ../src/ui/main_window.ui.h:40
msgid "_Contents"
msgstr "_Садржај"
-#: ../src/ui/main_window.ui.h:40
+#: ../src/ui/main_window.ui.h:41
msgid "_Dates"
msgstr "_Датуми"
-#: ../src/ui/main_window.ui.h:42
+#: ../src/ui/main_window.ui.h:43
msgid "_Delete Selected Tag"
msgstr "_Уклони изабрану ознаку"
-#: ../src/ui/main_window.ui.h:43
+#: ../src/ui/main_window.ui.h:44
msgid "_Delete Version"
msgstr "_Уклони издање"
-#: ../src/ui/main_window.ui.h:45
-msgid "_Edit Selected Tag..."
-msgstr "Уре_ди изабрану ознаку..."
-
#: ../src/ui/main_window.ui.h:46
+#| msgid "Edit Tag"
+msgid "_Edit Tag..."
+msgstr "_Уреди ознаку..."
+
+#: ../src/ui/main_window.ui.h:47
msgid "_Export to"
msgstr "Извези _у"
-#: ../src/ui/main_window.ui.h:47
+#: ../src/ui/main_window.ui.h:48
msgid "_Filmstrip"
msgstr "_Филмска трака"
-#: ../src/ui/main_window.ui.h:50
+#: ../src/ui/main_window.ui.h:51
msgid "_Hidden"
msgstr "_Сакриј"
-#: ../src/ui/main_window.ui.h:51
+#: ../src/ui/main_window.ui.h:52
msgid "_Import..."
msgstr "Ув_ези..."
-#: ../src/ui/main_window.ui.h:52
+#: ../src/ui/main_window.ui.h:53
+#| msgid "Camera Selection"
+msgid "_Invert Selection"
+msgstr "_Обрни избор"
+
+#: ../src/ui/main_window.ui.h:54
msgid "_Large"
msgstr "_Велике"
-#: ../src/ui/main_window.ui.h:53
+#: ../src/ui/main_window.ui.h:55
msgid "_Last Import Roll"
msgstr "_Последње увожење"
-#: ../src/ui/main_window.ui.h:54
+#: ../src/ui/main_window.ui.h:56
msgid "_Loupe"
msgstr "_Лупа"
-#: ../src/ui/main_window.ui.h:55
+#: ../src/ui/main_window.ui.h:57
msgid "_Medium"
msgstr "_Средње"
-#: ../src/ui/main_window.ui.h:57
+#: ../src/ui/main_window.ui.h:59
msgid "_Quit"
msgstr "_Изађи"
-#: ../src/ui/main_window.ui.h:58
+#: ../src/ui/main_window.ui.h:60
msgid "_Ratings"
msgstr "Оц_ене"
-#: ../src/ui/main_window.ui.h:60
+#: ../src/ui/main_window.ui.h:62
msgid "_Remove Tag From Selection"
msgstr "У_клони ознаку из избора"
-#: ../src/ui/main_window.ui.h:61
+#: ../src/ui/main_window.ui.h:63
msgid "_Rename Version"
msgstr "П_реименуј издање"
-#: ../src/ui/main_window.ui.h:62
+#: ../src/ui/main_window.ui.h:64
msgid "_Reverse Order"
msgstr "_Обрнут редослед"
-#: ../src/ui/main_window.ui.h:63
+#: ../src/ui/main_window.ui.h:65
msgid "_Select Import Rolls..."
msgstr "_Изабери увожења..."
-#: ../src/ui/main_window.ui.h:64
+#: ../src/ui/main_window.ui.h:66
msgid "_Set Date Range..."
msgstr "_Постави опсег датума..."
-#: ../src/ui/main_window.ui.h:65
+#: ../src/ui/main_window.ui.h:67
msgid "_Set Rating filter..."
msgstr "_Постави филтер оцена..."
-#: ../src/ui/main_window.ui.h:66
+#: ../src/ui/main_window.ui.h:68
msgid "_Sharpen..."
msgstr "_Изоштри..."
-#: ../src/ui/main_window.ui.h:68
+#: ../src/ui/main_window.ui.h:70
msgid "_Small"
msgstr "_Мале"
-#: ../src/ui/main_window.ui.h:69
+#: ../src/ui/main_window.ui.h:71
msgid "_Tag Icons"
msgstr "_Иконе ознака"
-#: ../src/ui/main_window.ui.h:70
+#: ../src/ui/main_window.ui.h:72
msgid "_Tags"
msgstr "_Ознаке"
-#: ../src/ui/main_window.ui.h:71
+#: ../src/ui/main_window.ui.h:73
msgid "_Timeline"
msgstr "Линија _времена"
-#: ../src/ui/main_window.ui.h:72
+#: ../src/ui/main_window.ui.h:74
msgid "_Tools"
msgstr "Ала_ти"
-#: ../src/ui/main_window.ui.h:73
+#: ../src/ui/main_window.ui.h:75
msgid "_Untagged Photos"
msgstr "_Фотографије без ознака"
-#: ../src/ui/main_window.ui.h:74
+#: ../src/ui/main_window.ui.h:76
msgid "_Version"
msgstr "И_здање"
-#: ../src/Updater.cs:616
+#: ../src/Updater.cs:623
msgid "Updating F-Spot Database"
msgstr "Ажурирам базу Ф-броја"
-#: ../src/Updater.cs:617
+#: ../src/Updater.cs:624
msgid ""
"Please wait while your F-Spot gallery's database is updated. This may take "
"some time."
@@ -3935,7 +3804,7 @@ msgstr ""
"неко време."
#. Mono.Unix.Error error = Mono.Unix.Stdlib.GetLastError ();
-#: ../src/Utils/Unix.cs:35
+#: ../src/Utils/Unix.cs:36
msgid "Unable to create temporary file"
msgstr "Не могу да направим привремену датотеку"
@@ -4019,11 +3888,11 @@ msgstr "Одтампај ознаке слике"
msgid "Print photo comment"
msgstr "Одштампај коментар фотографије"
-#: ../src/Widgets/EditorPage.cs:29 ../src/Widgets/Sidebar.cs:62
+#: ../src/Widgets/EditorPage.cs:31 ../src/Widgets/Sidebar.cs:54
msgid "Edit"
msgstr "Уређивање"
-#: ../src/Widgets/EditorPage.cs:197
+#: ../src/Widgets/EditorPage.cs:199
msgid ""
"This tool requires an active selection. Please select a region of the photo "
"and try the operation again"
@@ -4031,14 +3900,15 @@ msgstr ""
"Овај алат захтева да буде активан избор. Изаберите област фотографије и "
"поновите радњу"
-#: ../src/Widgets/EditorPage.cs:215
+#: ../src/Widgets/EditorPage.cs:217
msgid "Error saving adjusted photo"
msgid_plural "Error saving adjusted photos"
msgstr[0] "Грешка при чувању исправљене слике"
msgstr[1] "Грешка при чувању исправљених слика"
-msgstr[2] "Грешка при чувању исправљених слике"
+msgstr[2] "Грешка при чувању исправљених слика"
+msgstr[3] "Грешка при чувању исправљене слике"
-#: ../src/Widgets/EditorPage.cs:217
+#: ../src/Widgets/EditorPage.cs:219
#, csharp-format
msgid ""
"Received exception \"{0}\". Note that you have to develop RAW files into "
@@ -4047,11 +3917,11 @@ msgstr ""
"Примљен је изузетак „{0}“. Морате да развијете RAW датотеке у JPEG пре "
"њихове измене."
-#: ../src/Widgets/Filmstrip.cs:572
+#: ../src/Widgets/Filmstrip.cs:573
msgid "_Horizontal"
msgstr "_Хоризонтално"
-#: ../src/Widgets/Filmstrip.cs:576
+#: ../src/Widgets/Filmstrip.cs:577
msgid "_Vertical"
msgstr "_Вертикално"
@@ -4059,66 +3929,76 @@ msgstr "_Вертикално"
msgid "Find:"
msgstr "Нађи:"
-#: ../src/Widgets/FolderTreePage.cs:21
+#: ../src/Widgets/FolderTreePage.cs:22
msgid "Folders"
msgstr "Фасцикле"
-#: ../src/Widgets/FolderTreeView.cs:123
+#: ../src/Widgets/FolderTreeView.cs:124
msgid "Filesystem"
msgstr "Систем датотека"
-#: ../src/Widgets/InfoBox.cs:182
+#: ../src/Widgets/InfoBox.cs:183
msgid "Histogram"
msgstr "Хистограм"
-#: ../src/Widgets/InfoBox.cs:217
+#: ../src/Widgets/InfoBox.cs:216
+msgid "Version"
+msgstr "Издање"
+
+#: ../src/Widgets/InfoBox.cs:219
msgid "Date"
msgstr "Датум"
-#: ../src/Widgets/InfoBox.cs:223
+#: ../src/Widgets/InfoBox.cs:225
msgid "Exposure"
msgstr "Експозиција"
-#: ../src/Widgets/InfoBox.cs:227
+#: ../src/Widgets/InfoBox.cs:229
msgid "Focal Length"
msgstr "Жижна даљина"
-#: ../src/Widgets/InfoBox.cs:233
+#: ../src/Widgets/InfoBox.cs:232
+msgid "Camera"
+msgstr "Апарат"
+
+#: ../src/Widgets/InfoBox.cs:235
msgid "File Size"
msgstr "Величина датотеке"
-#: ../src/Widgets/InfoBox.cs:236
+#: ../src/Widgets/InfoBox.cs:238
msgid "Rating"
msgstr "Оцена"
-#: ../src/Widgets/InfoBox.cs:409 ../src/Widgets/InfoBox.cs:432
-#: ../src/Widgets/InfoBox.cs:442 ../src/Widgets/InfoBox.cs:451
-msgid "(Unknown)"
-msgstr "(непозната)"
-
-#: ../src/Widgets/InfoBox.cs:419
+#: ../src/Widgets/InfoBox.cs:391 ../src/Widgets/InfoBox.cs:399
+#: ../src/Widgets/InfoBox.cs:429
msgid "(wrong format)"
msgstr "(погрешан формат)"
-#: ../src/Widgets/InfoBox.cs:552
+#: ../src/Widgets/InfoBox.cs:419 ../src/Widgets/InfoBox.cs:442
+#: ../src/Widgets/InfoBox.cs:452 ../src/Widgets/InfoBox.cs:461
+msgid "(Unknown)"
+msgstr "(непозната)"
+
+#: ../src/Widgets/InfoBox.cs:564
#, csharp-format
msgid "(One Edit)"
msgid_plural "({0} Edits)"
msgstr[0] "({0} измена)"
msgstr[1] "({0} измене)"
msgstr[2] "({0} измена)"
+msgstr[3] "({0} измена)"
-#: ../src/Widgets/InfoBox.cs:566
+#: ../src/Widgets/InfoBox.cs:578
msgid "(File read error)"
msgstr "(грешка при читању датотеке)"
-#: ../src/Widgets/InfoBox.cs:611
+#: ../src/Widgets/InfoBox.cs:623
#, csharp-format
msgid "{0} Photos"
msgstr "{0} слика"
#. Note for translators: {0} is a date, {1} and {2} are times.
-#: ../src/Widgets/InfoBox.cs:631
+#: ../src/Widgets/InfoBox.cs:643
#, csharp-format
msgid ""
"On {0} between \n"
@@ -4127,7 +4007,7 @@ msgstr ""
"На {0} између \n"
"{1} и {2}"
-#: ../src/Widgets/InfoBox.cs:636
+#: ../src/Widgets/InfoBox.cs:648
#, csharp-format
msgid ""
"Between {0} \n"
@@ -4136,61 +4016,61 @@ msgstr ""
"Између {0} \n"
"и {1}"
-#: ../src/Widgets/InfoBox.cs:663
+#: ../src/Widgets/InfoBox.cs:675
msgid "(At least one File not found)"
msgstr "(бар једна датотека није нађена)"
-#: ../src/Widgets/InfoBox.cs:780
+#: ../src/Widgets/InfoBox.cs:792
msgid "Show Photo Name"
msgstr "Прикажи назив фотографије"
-#: ../src/Widgets/InfoBox.cs:789
+#: ../src/Widgets/InfoBox.cs:801
msgid "Show Date"
msgstr "Прикажи датум"
-#: ../src/Widgets/InfoBox.cs:798
+#: ../src/Widgets/InfoBox.cs:810
msgid "Show Size"
msgstr "Прикажи величину"
-#: ../src/Widgets/InfoBox.cs:807
+#: ../src/Widgets/InfoBox.cs:819
msgid "Show Exposure"
msgstr "Прикажи експозицију"
-#: ../src/Widgets/InfoBox.cs:816
+#: ../src/Widgets/InfoBox.cs:828
msgid "Show Focal Length"
msgstr "Прикажи жижну даљину"
-#: ../src/Widgets/InfoBox.cs:825
+#: ../src/Widgets/InfoBox.cs:837
msgid "Show Camera"
msgstr "Прикажи фото-апарат"
-#: ../src/Widgets/InfoBox.cs:834
+#: ../src/Widgets/InfoBox.cs:846
msgid "Show File Size"
msgstr "Прикажи величину датотеке"
-#: ../src/Widgets/MetadataDisplay.cs:23
+#: ../src/Widgets/MetadataDisplay.cs:25
msgid "Metadata"
msgstr "Метаподаци"
-#: ../src/Widgets/MetadataDisplay.cs:104
+#: ../src/Widgets/MetadataDisplay.cs:106
msgid "Extended Metadata"
msgstr "Проширени метаподаци"
#. clear Extended Metadata
-#: ../src/Widgets/MetadataDisplay.cs:392
+#: ../src/Widgets/MetadataDisplay.cs:394
msgid "No Extended Metadata Available"
msgstr "Нису доступни проширени метаподаци"
-#: ../src/Widgets/MetadataDisplay.cs:410
+#: ../src/Widgets/MetadataDisplay.cs:412
msgid "No active photo"
msgstr "Нема изабраних фотографија"
-#: ../src/Widgets/MetadataDisplay.cs:412
+#: ../src/Widgets/MetadataDisplay.cs:414
#, csharp-format
msgid "The photo \"{0}\" does not exist"
msgstr "Фотографија „{0}“ не постоји"
-#: ../src/Widgets/MetadataDisplay.cs:415
+#: ../src/Widgets/MetadataDisplay.cs:417
msgid "No metadata available"
msgstr "Нису доступни метаподаци"
@@ -4198,7 +4078,7 @@ msgstr "Нису доступни метаподаци"
msgid "No applications available"
msgstr "Нису доступни програми"
-#: ../src/Widgets/RatingMenuItem.cs:56
+#: ../src/Widgets/RatingMenuItem.cs:57
msgid "Rating:"
msgstr "Оцена:"
@@ -4223,6 +4103,398 @@ msgstr "Прикажи покретни приказ из Ф-броја"
msgid "F-Spot photos"
msgstr "Ф-број фотографије"
+#~ msgid "Error: Error while transferring; Aborting"
+#~ msgstr "Грешка: грешка у току пребацивања; одустајем"
+
+#~ msgid "Error: File Already Exists; Aborting"
+#~ msgstr "Грешка: датотека већ постоји; одустајем"
+
+#~ msgid "Package"
+#~ msgstr "Пакет"
+
+#~ msgid "Extension Installation"
+#~ msgstr "Додавање проширења"
+
+#~ msgid "<b>Select the extensions to install and click on Next</b>"
+#~ msgstr ""
+#~ "<b>Изаберите проширење које желите да додате и притисните „Наредно“</b>"
+
+#~ msgid "Install from:"
+#~ msgstr "Инсталирај из:"
+
+#~ msgid "_Repositories..."
+#~ msgstr "_Складишта..."
+
+#~ msgid "Show all packages"
+#~ msgstr "Прикажи све пакете"
+
+#~ msgid "Show new versions only"
+#~ msgstr "Прикажи само нова издања"
+
+#~ msgid "Show updates only"
+#~ msgstr "Прикажи само надоградње"
+
+#~ msgid "_Unselect All"
+#~ msgstr "Изабери _ништа"
+
+#~ msgid "label124"
+#~ msgstr "натпис124"
+
+#~ msgid "Overall Progress:"
+#~ msgstr "Упукан напредак:"
+
+#~ msgid "Downloading extensions..."
+#~ msgstr "Преузимам проширења..."
+
+#~ msgid "Extension Manager"
+#~ msgstr "Уредник проширења"
+
+#~ msgid "Additional extensions are required to perform this operation."
+#~ msgstr "Потребна су додатна проширења за извођење ове радње."
+
+#~ msgid "The following extensions will be installed:"
+#~ msgstr "Следећа проширења ће бити додата:"
+
+#~ msgid "<big><b>Extension Manager</b></big>"
+#~ msgstr "<big><b>Уредник проширења</b></big>"
+
+#~ msgid "The following extensions are currently installed:"
+#~ msgstr "Додата су следећа проширења:"
+
+#~ msgid "_Install Extensions..."
+#~ msgstr "_Додај проширења..."
+
+#~ msgid "_Uninstall..."
+#~ msgstr "_Уклони..."
+
+#~ msgid "Enable"
+#~ msgstr "Омогући"
+
+#~ msgid "Disable"
+#~ msgstr "Онемогући"
+
+#~ msgid "Details"
+#~ msgstr "Детаљи"
+
+#~ msgid "Extension Repository Management"
+#~ msgstr "Уредник проширења складишта"
+
+#~ msgid "Add New Repository"
+#~ msgstr "Додај ново складиште"
+
+#~ msgid "Select the location of the repository you want to register:"
+#~ msgstr "Изаберите место складишта које желите да региструјете:"
+
+#~ msgid "Register an on-line repository"
+#~ msgstr "Региструјте складиште на мрежи"
+
+#~ msgid "Url:"
+#~ msgstr "Адреса:"
+
+#~ msgid "Register a local repository"
+#~ msgstr "Региструјте локално складиште"
+
+#~ msgid "Path:"
+#~ msgstr "Путања:"
+
+#~ msgid "Browse..."
+#~ msgstr "Разгледај..."
+
+#~ msgid "Version:"
+#~ msgstr "Издање:"
+
+#~ msgid "Author:"
+#~ msgstr "Аутор:"
+
+#~ msgid "Copyright:"
+#~ msgstr "Ауторско право:"
+
+#~ msgid "Extension Dependencies:"
+#~ msgstr "Зависности проширења:"
+
+#~ msgid "All registered repositories"
+#~ msgstr "Сва регистрована складишта"
+
+#~ msgid "Are you sure you want to cancel the installation?"
+#~ msgstr "Да ли сигурно желите да прекинете додавање?"
+
+#~ msgid "The following packages will be uninstalled:"
+#~ msgstr "Следећи пакети че бити уклоњени:"
+
+#~ msgid ""
+#~ "There are other extensions that depend on the previous ones which will "
+#~ "also be uninstalled:"
+#~ msgstr "Нека проширења зависе од претходних која ће такође бити укоњена:"
+
+#~ msgid ""
+#~ "The selected extensions can't be installed because there are dependency "
+#~ "conflicts."
+#~ msgstr ""
+#~ "Изабрана проширења не могу бити додата због постојања конфликта "
+#~ "међузависностима."
+
+#~ msgid "The following packages will be installed:"
+#~ msgstr "Следећи пакети ће бити додати:"
+
+#~ msgid " (in user directory)"
+#~ msgstr " (у корисничком директоријуму)"
+
+#~ msgid "The following packages need to be uninstalled:"
+#~ msgstr "Потребно је уклонити следеће пакете:"
+
+#~ msgid "The following dependencies could not be resolved:"
+#~ msgstr "Није могуће решити следеће зависности:"
+
+#~ msgid "The installation has been successfully completed."
+#~ msgstr "Додавање пакета је успешно завршено."
+
+#~ msgid "The installation failed!"
+#~ msgstr "Додавање није успело!"
+
+#~ msgid "The installation has completed with warnings."
+#~ msgstr "Додавање је завршено уз упозорења."
+
+#~ msgid "The uninstallation has been successfully completed."
+#~ msgstr "Уклањање је узпешно завршено."
+
+#~ msgid "The uninstallation failed!"
+#~ msgstr "Уклањање није успело!"
+
+#~ msgid "The uninstallation has completed with warnings."
+#~ msgstr "Уклањање је завршено уз упозорења."
+
+#~ msgid "Repository"
+#~ msgstr "Складиште"
+
+#~ msgid "Installation cancelled"
+#~ msgstr "Додавање је прекинуто"
+
+#~ msgid "Some of the required extensions were not found"
+#~ msgstr "Нека од потребних проширења нису нађена"
+
+#~ msgid "Installation failed"
+#~ msgstr "Додавање није успело"
+
+#~ msgid "Extension"
+#~ msgstr "Проширење"
+
+#~ msgid "Other"
+#~ msgstr "Остало"
+
+#~ msgid "Url"
+#~ msgstr "Адреса"
+
+#~ msgid "Exception occurred: {0}"
+#~ msgstr "Јавио се изузетак: {0}"
+
+#~ msgid "Disabled extensions can't be loaded."
+#~ msgstr "Онемогућена проширења не могу бити учитана."
+
+#~ msgid "Loading {0} extension"
+#~ msgstr "Учитавам {0} проширење"
+
+#~ msgid "The required extension '{0}' is disabled."
+#~ msgstr "Захтевано проширење „{0}“ је онемогућено."
+
+#~ msgid "The required extension '{0}' is not installed."
+#~ msgstr "Захтевано проширење „{0}“ није додато."
+
+#~ msgid "(provided by {0})"
+#~ msgstr "(обезбедио {0})"
+
+#~ msgid "Preview"
+#~ msgstr "Приказ"
+
+#~ msgid "Path"
+#~ msgstr "Путања"
+
+#~ msgid "File"
+#~ msgstr "Датотека"
+
+#~ msgid "Select Tag"
+#~ msgstr "Изабери ознаку"
+
+#~ msgid "Downloading Previews"
+#~ msgstr "Преузимам прегледе"
+
+#~ msgid "Downloading Preview of {0}"
+#~ msgstr "Преузимам преглед за {0}"
+
+#~ msgid "Copying file {0} of {1}"
+#~ msgstr "Умножавам датотеку {0} од {1}"
+
+#~ msgid "Error transferring file"
+#~ msgstr "Грешка при пребацивању датотеке"
+
+#~ msgid "Done Copying Files"
+#~ msgstr "Готово умножавање датотека"
+
+#~ msgid "Download Complete"
+#~ msgstr "Преузимање готово"
+
+#~ msgid "Transferring \"{0}\" from camera"
+#~ msgstr "Преносим „{0}“ са апарата"
+
+#~ msgid "Port"
+#~ msgstr "Прикључак"
+
+#~ msgid "Reparented ({0})"
+#~ msgstr "Придружених слика ({0})"
+
+# bug: uvezi od, uvezi sa
+#~ msgid "Import error"
+#~ msgstr "Грешка при увозу:"
+
+#~ msgid "Error importing {0}{2}{2}{1}"
+#~ msgstr "Грешка при увозу {0}{2}{2}{1}"
+
+#~ msgid " "
+#~ msgstr " "
+
+#~ msgid "<b></b>"
+#~ msgstr "<b></b>"
+
+#~ msgid "Attach Tags:"
+#~ msgstr "Додај ознаке:"
+
+#~ msgid "Attach tag:"
+#~ msgstr "Додај ознаку:"
+
+#~ msgid "CD"
+#~ msgstr "ЦД"
+
+#~ msgid "Copy files to the Photos folder"
+#~ msgstr "Убаци датотеке у директоријум са Фото албумом"
+
+#~ msgid "Detect duplicates"
+#~ msgstr "Нађи дупликате"
+
+#~ msgid "E-_Mail:"
+#~ msgstr "_Е-пошта:"
+
+#~ msgid "E_xport titles and comments"
+#~ msgstr "_Извези наслове и примедбе"
+
+#~ msgid "G_allery:"
+#~ msgstr "_Галерија:"
+
+#~ msgid "Gallery"
+#~ msgstr "Галерија"
+
+#~ msgid "Include subfolders"
+#~ msgstr "Укључи поддиректоријуме."
+
+#~ msgid "Pause"
+#~ msgstr "Пауза"
+
+#~ msgid "Select Photos to Copy From Camera..."
+#~ msgstr "Изаберите фотографије за пребацивање са апарата..."
+
+#~ msgid "Select the camera from which you want to transfer files"
+#~ msgstr "Изаберите апарат са којег желите да пребаците датотеке."
+
+#~ msgid "Selected Camera: "
+#~ msgstr "Изабрани апарат:"
+
+#~ msgid "Strip image _metadata"
+#~ msgstr "Одбаци м_етаподатке слике"
+
+# bug: flickr
+#~ msgid "_Flickr"
+#~ msgstr "_Flickr"
+
+#~ msgid "_Gallery"
+#~ msgstr "_Галерија"
+
+#~ msgid "_Open album in browser when done uploading"
+#~ msgstr "Отвори _албум у разгледачу по завршеном слању"
+
+#~ msgid "_Open destination when done exporting"
+#~ msgstr "Отвори _одредиште по завршеном извозу."
+
+#~ msgid "_Scale photos to no larger than: "
+#~ msgstr "Промени величину на не већу од:"
+
+#~ msgid "_Strip metadata"
+#~ msgstr "Од_баци метаподатке"
+
+#~ msgid "_URI:"
+#~ msgstr "_Адреса:"
+
+#~ msgid "_Virtual Filesystem"
+#~ msgstr "_Виртуелни систем датотека"
+
+#~ msgid "x"
+#~ msgstr "x"
+
+#~ msgid "Loading {0} of {1}"
+#~ msgstr "Учитавам {0} од {1}"
+
+#~ msgid "Done Loading"
+#~ msgstr "Учитавање завршено"
+
+#~ msgid "Directory does not exist."
+#~ msgstr "Директоријум не постоји."
+
+# bug: unclear
+#~ msgid ""
+#~ "The directory you selected \"{0}\" does not exist. Please choose a "
+#~ "different directory"
+#~ msgstr ""
+#~ "Директоријум који сте изабрали „{0}“ не постоји. Изаберите неки други."
+
+#~ msgid "No cameras detected."
+#~ msgstr "Нисам нашао ниједан апарат."
+
+#~ msgid ""
+#~ "F-Spot was unable to find any cameras attached to this system. Double "
+#~ "check that the camera is connected and has power"
+#~ msgstr ""
+#~ "Ф-број није успео да нађе ниједан апарат повезан на овај систем. "
+#~ "Проверите да је апарат повезан и укључен"
+
+#~ msgid "Error connecting to camera"
+#~ msgstr "Грешка при повезивању са апаратом"
+
+#~ msgid "Received error \"{0}\" while connecting to camera"
+#~ msgstr "Примих грешку „{0}“ при повезивању са апаратом"
+
+#~ msgid "Could not create a new version"
+#~ msgstr "Не могу да направим ново издање"
+
+#~ msgid "Received exception \"{0}\". Unable to create version \"{1}\""
+#~ msgstr "Примио сам изузетак „{0}“. Не могу да направим издање „{1}“"
+
+#~ msgid "Really Delete?"
+#~ msgstr "Заиста обрисати?"
+
+#~ msgid "Cancel"
+#~ msgstr "Одустани"
+
+#~ msgid "Could not delete a version"
+#~ msgstr "Не могу да обришем издање"
+
+#~ msgid "Received exception \"{0}\". Unable to delete version \"{1}\""
+#~ msgstr "Примио сам изузетак „{0}“. Не могу да обришем издање „{1}“"
+
+#~ msgid "Could not rename a version"
+#~ msgstr "Не могу да преименујем издање"
+
+#~ msgid "Received exception \"{0}\". Unable to rename version to \"{1}\""
+#~ msgstr "Примио сам изузетак „{0}“. Не могу да преименујем издање у „{1}“"
+
+#~ msgid "my photos"
+#~ msgstr "моје слике"
+
+#~ msgid "Edit Selected Tag..."
+#~ msgstr "Уреди изабрану ознаку..."
+
+#~ msgid "Copy Locat_ion"
+#~ msgstr "Умножи _путању слике"
+
+#~ msgid "_Edit Selected Tag..."
+#~ msgstr "Уре_ди изабрану ознаку..."
+
#~ msgid "interpolation type"
#~ msgstr "врста интерполације"
@@ -4281,9 +4553,6 @@ msgstr "Ф-број фотографије"
#~ msgid "<b>Color Management</b>"
#~ msgstr "<b>Управљање бојама</b>"
-#~ msgid "<b>Import Settings</b>"
-#~ msgstr "<b>Поставке увоза</b>"
-
#~ msgid "<b>Metadata</b>"
#~ msgstr "<b>Метаподаци</b>"
@@ -4381,30 +4650,6 @@ msgstr "Ф-број фотографије"
#~ msgid "This is who I am"
#~ msgstr "Ово сам ја"
-#~ msgid "<b>Tabblo account</b>"
-#~ msgstr "<b>Таббло налог</b>"
-
-#~ msgid "<b>{0}</b>."
-#~ msgstr "<b>{0}</b>."
-
-#~ msgid "A trust error occured while attempting to access"
-#~ msgstr "Јавила се грешка у овлашћењима при покушају повезивања"
-
-#~ msgid "Abort this session"
-#~ msgstr "Одбаци ову сесију"
-
-#~ msgid "Always trust this site's certificate"
-#~ msgstr "Увек веруј сертификатима са ове адресе"
-
-#~ msgid "Do you wish to:"
-#~ msgstr "Да ли желите да:"
-
-#~ msgid "Trust Error"
-#~ msgstr "Грешка у овлашћењима"
-
-#~ msgid "Trust the site's certificate this once"
-#~ msgstr "Прихвати сертификат са ове адресе само сада"
-
#~ msgid "Blackout"
#~ msgstr "Зацрни"
diff --git a/po/sr at latin.po b/po/sr at latin.po
index ffff3fd..5fae942 100644
--- a/po/sr at latin.po
+++ b/po/sr at latin.po
@@ -5,29 +5,61 @@
#
# Danilo Šegan <danilo at gnome.org>
# Maintainer: Miloš Popović <gpopac at gmail.com>
+# Miloš Popović <gpopac at gmail.com>, 2010.
#
msgid ""
msgstr ""
"Project-Id-Version: f-spot\n"
"Report-Msgid-Bugs-To: http://bugzilla.gnome.org/enter_bug.cgi?product=f-"
"spot&component=General\n"
-"POT-Creation-Date: 2009-09-15 12:11+0000\n"
-"PO-Revision-Date: 2008-02-29 22:38+0100\n"
+"POT-Creation-Date: 2010-06-08 09:34+0000\n"
+"PO-Revision-Date: 2010-06-12 11:51+0200\n"
"Last-Translator: Miloš Popović <gpopac at gmail.com>\n"
-"Language-Team: Serbian (sr) <gnom at prevod.org>\n"
+"Language-Team: Serbian <gnom at prevod.org>\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
-"Plural-Forms: nplurals=3; plural=n%10==1 && n%100!=11 ? 0 : n%10>=2 && "
-"n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2;\n"
+"Plural-Forms: nplurals=4; plural=n==1? 3 : n%10==1 && n%100!=11 ? 0 : n"
+"%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2;\\n\n"
+
+#: ../data/desktop-files/f-spot.desktop.in.in.h:1
+#: ../data/desktop-files/f-spot-import.desktop.in.in.h:1
+#: ../data/desktop-files/f-spot-view.desktop.in.in.h:1
+#: ../src/ui/main_window.ui.h:11
+msgid "F-Spot"
+msgstr "F-broj"
+
+#: ../data/desktop-files/f-spot.desktop.in.in.h:2
+#: ../data/desktop-files/f-spot-import.desktop.in.in.h:2
+msgid "F-Spot Photo Manager"
+msgstr "F-broj foto album"
+
+#: ../data/desktop-files/f-spot.desktop.in.in.h:3
+msgid "Organize, enjoy, and share your photos"
+msgstr "Organizujte, uživajte i podelite vaše fotografije"
+
+#: ../data/desktop-files/f-spot.desktop.in.in.h:4
+#: ../data/desktop-files/f-spot-import.desktop.in.in.h:4
+msgid "Photo Manager"
+msgstr "Foto album"
+
+#: ../data/desktop-files/f-spot-import.desktop.in.in.h:3
+msgid "Import into F-Spot"
+msgstr "Uvezi u F-broj"
+
+#: ../data/desktop-files/f-spot-view.desktop.in.in.h:2
+msgid "F-Spot Photo Viewer"
+msgstr "F-broj pregledač fotografija"
+
+#: ../data/desktop-files/f-spot-view.desktop.in.in.h:3
+msgid "Photo Viewer"
+msgstr "Preglednik fotografija"
#: ../extensions/Exporters/CDExport/CDExport.addin.xml.h:1
msgid "_CD..."
msgstr "_CD..."
#: ../extensions/Exporters/CDExport/CDExport.cs:162
-#: ../extensions/Exporters/FolderExport/FolderExport.cs:392
-#: ../src/CameraFileSelectionDialog.cs:199
msgid "Transferring Pictures"
msgstr "Prebacujem slike"
@@ -38,37 +70,34 @@ msgstr "Prebacujem sliku „{0}“ na CD"
#. Note for translators: This indicates the current photo is photo {0} of {1} out of photos
#: ../extensions/Exporters/CDExport/CDExport.cs:220
-#: ../extensions/Exporters/FlickrExport/FlickrExport.cs:349
-#: ../extensions/Exporters/FolderExport/FolderExport.cs:245
+#: ../extensions/Exporters/FlickrExport/FlickrExport.cs:350
+#: ../extensions/Exporters/FolderExport/FolderExport.cs:220
#: ../extensions/Exporters/GalleryExport/GalleryExport.cs:781
-#: ../src/MainWindow.cs:638 ../src/UI.Dialog/AdjustTimeDialog.cs:129
-#: ../src/UI.Dialog/ProgressDialog.cs:92
+#: ../src/MainWindow.cs:653 ../src/UI.Dialog/AdjustTimeDialog.cs:130
+#: ../src/UI.Dialog/ProgressDialog.cs:90
#, csharp-format
msgid "{0} of {1}"
msgstr "{0} od {1}"
#: ../extensions/Exporters/CDExport/CDExport.cs:233
-#: ../extensions/Exporters/FacebookExport/FacebookExport.cs:379
-#: ../extensions/Exporters/FlickrExport/FlickrExport.cs:379
-#: ../extensions/Exporters/FolderExport/FolderExport.cs:285
+#: ../extensions/Exporters/FacebookExport/FacebookExport.cs:377
+#: ../extensions/Exporters/FlickrExport/FlickrExport.cs:380
#: ../extensions/Exporters/GalleryExport/GalleryExport.cs:806
-#: ../extensions/Exporters/PicasaWebExport/PicasaWebExport.cs:704
+#: ../extensions/Exporters/PicasaWebExport/PicasaWebExport.cs:705
#: ../extensions/Exporters/SmugMugExport/SmugMugExport.cs:607
msgid "Done Sending Photos"
msgstr "Slanje fotografija je završeno"
#: ../extensions/Exporters/CDExport/CDExport.cs:235
-#: ../extensions/Exporters/FolderExport/FolderExport.cs:287
msgid "Transfer Complete"
msgstr "Prenos je završen"
#: ../extensions/Exporters/CDExport/CDExport.cs:242
-#: ../extensions/Exporters/FolderExport/FolderExport.cs:292
msgid "Error While Transferring"
msgstr "Greška u toku prebacivanja"
#: ../extensions/Exporters/CDExport/CDExport.cs:250
-#: ../extensions/Exporters/FolderExport/FolderExport.cs:311
+#: ../extensions/Exporters/FolderExport/FolderExport.cs:278
msgid "Error Transferring"
msgstr "Greška u preacivanju"
@@ -88,7 +117,7 @@ msgstr "<b>Slike za upis na CD</b>"
#: ../extensions/Exporters/FolderExport/FolderExport.glade.h:7
#: ../extensions/Exporters/GalleryExport/GalleryExport.glade.h:7
#: ../extensions/Exporters/SmugMugExport/SmugMugExport.glade.h:5
-#: ../src/f-spot.glade.h:28
+#: ../src/f-spot.glade.h:20
msgid "Autorotate"
msgstr "Sam rotiraj"
@@ -97,7 +126,7 @@ msgid "Create CD"
msgstr "Napravi CD"
#: ../extensions/Exporters/CDExport/CDExport.ui.h:5
-#: ../src/Widgets/InfoBox.cs:220
+#: ../src/Widgets/InfoBox.cs:222
msgid "Size"
msgstr "Veličina"
@@ -115,7 +144,8 @@ msgstr "_Razgledaj prethodno zakazane datoteke"
#: ../extensions/Exporters/GalleryExport/GalleryExport.glade.h:15
#: ../extensions/Exporters/PicasaWebExport/PicasaWebExport.glade.h:20
#: ../extensions/Exporters/SmugMugExport/SmugMugExport.glade.h:12
-#: ../src/f-spot.glade.h:95
+#: ../extensions/Exporters/TabbloExport/ui/TabbloExport.ui.h:9
+#: ../src/f-spot.glade.h:66
msgid "_Export"
msgstr "I_zvezi"
@@ -145,39 +175,35 @@ msgstr ""
"Kada se direktno povežete na Fejsbuk vratite se u program i kliknite na „U "
"redu“."
-#: ../extensions/Exporters/FacebookExport/FacebookExport.cs:279
+#: ../extensions/Exporters/FacebookExport/FacebookExport.cs:281
msgid "Too many images to export"
msgstr "Previše slika za izvoz"
-#: ../extensions/Exporters/FacebookExport/FacebookExport.cs:280
+#: ../extensions/Exporters/FacebookExport/FacebookExport.cs:282
+#, csharp-format
+#| msgid ""
+#| "Facebook only permits 60 photographs per album. Please refine your "
+#| "selection and try again."
msgid ""
-"Facebook only permits 60 photographs per album. Please refine your "
+"Facebook only permits {0} photographs per album. Please refine your "
"selection and try again."
msgstr ""
-"Fejsbuk dozvoljava do 60 fotografija po albumu. Smanjite vaš izbor i "
+"Fejsbuk dozvoljava do {0} fotografija po albumu. Smanjite vaš izbor i "
"pokušajte ponovo."
#: ../extensions/Exporters/FacebookExport/FacebookExport.cs:297
-#: ../extensions/Exporters/FlickrExport/FlickrExport.cs:475
-#: ../extensions/Exporters/GalleryExport/GalleryExport.cs:730
-#: ../extensions/Exporters/PicasaWebExport/PicasaWebExport.cs:597
-#: ../extensions/Exporters/SmugMugExport/SmugMugExport.cs:522
-msgid "Uploading Pictures"
-msgstr "Šaljem slike"
-
-#: ../extensions/Exporters/FacebookExport/FacebookExport.cs:318
msgid "Album must have a name"
msgstr "Morate imenovati album"
-#: ../extensions/Exporters/FacebookExport/FacebookExport.cs:319
+#: ../extensions/Exporters/FacebookExport/FacebookExport.cs:298
msgid "Please name your album or choose an existing album."
msgstr "Unesite ime albuma ili izaberite postojeći album."
-#: ../extensions/Exporters/FacebookExport/FacebookExport.cs:333
+#: ../extensions/Exporters/FacebookExport/FacebookExport.cs:312
msgid "Creating a new album failed"
msgstr "Obrazovanje novog albuma nije uspelo"
-#: ../extensions/Exporters/FacebookExport/FacebookExport.cs:334
+#: ../extensions/Exporters/FacebookExport/FacebookExport.cs:313
#, csharp-format
msgid ""
"An error occurred creating a new album.\n"
@@ -188,42 +214,53 @@ msgstr ""
"\n"
"{0}"
-#: ../extensions/Exporters/FacebookExport/FacebookExport.cs:356
-#: ../extensions/Exporters/PicasaWebExport/PicasaWebExport.cs:660
+#: ../extensions/Exporters/FacebookExport/FacebookExport.cs:326
+#: ../extensions/Exporters/FlickrExport/FlickrExport.cs:476
+#: ../extensions/Exporters/GalleryExport/GalleryExport.cs:730
+#: ../extensions/Exporters/PicasaWebExport/PicasaWebExport.cs:598
+#: ../extensions/Exporters/SmugMugExport/SmugMugExport.cs:522
+msgid "Uploading Pictures"
+msgstr "Šaljem slike"
+
+#: ../extensions/Exporters/FacebookExport/FacebookExport.cs:354
+#: ../extensions/Exporters/PicasaWebExport/PicasaWebExport.cs:661
#: ../extensions/Exporters/SmugMugExport/SmugMugExport.cs:565
#, csharp-format
msgid "Uploading picture \"{0}\" ({1} of {2})"
msgstr "Šaljem sliku „{0}“ ({1} od {2})"
-#: ../extensions/Exporters/FacebookExport/FacebookExport.cs:370
+#: ../extensions/Exporters/FacebookExport/FacebookExport.cs:368
#, csharp-format
msgid "Error Uploading To Facebook: {0}"
msgstr "Greška pri slanju na Fejsbuk: {0}"
-#: ../extensions/Exporters/FacebookExport/FacebookExport.cs:371
-#: ../extensions/Exporters/FlickrExport/FlickrExport.cs:370
-#: ../extensions/Exporters/FolderExport/FolderExport.cs:250
+#: ../extensions/Exporters/FacebookExport/FacebookExport.cs:369
+#: ../extensions/Exporters/FlickrExport/FlickrExport.cs:371
+#: ../extensions/Exporters/FolderExport/FolderExport.cs:226
#: ../extensions/Exporters/GalleryExport/GalleryExport.cs:797
-#: ../extensions/Exporters/PicasaWebExport/PicasaWebExport.cs:693
+#: ../extensions/Exporters/PicasaWebExport/PicasaWebExport.cs:694
#: ../extensions/Exporters/SmugMugExport/SmugMugExport.cs:596
#: ../extensions/Exporters/TabbloExport/TabbloExport.cs:319
-#: ../lib/mono-addins/Mono.Addins.Gui/gtk-gui/Mono.Addins.Gui.ErrorDialog.cs:40
msgid "Error"
msgstr "Greška"
-#: ../extensions/Exporters/FacebookExport/FacebookExport.cs:381
-#: ../extensions/Exporters/FlickrExport/FlickrExport.cs:381
+#: ../extensions/Exporters/FacebookExport/FacebookExport.cs:379
+#: ../extensions/Exporters/FlickrExport/FlickrExport.cs:382
#: ../extensions/Exporters/GalleryExport/GalleryExport.cs:808
-#: ../extensions/Exporters/PicasaWebExport/PicasaWebExport.cs:706
+#: ../extensions/Exporters/PicasaWebExport/PicasaWebExport.cs:707
#: ../extensions/Exporters/SmugMugExport/SmugMugExport.cs:609
msgid "Upload Complete"
msgstr "Slanje je završeno"
-#: ../extensions/Exporters/FacebookExport/FacebookExportDialog.cs:211
+#: ../extensions/Exporters/FacebookExport/FacebookExport.cs:382
+msgid "Visit F-Spot group on Facebook"
+msgstr "Posetite Fejsbuk grupu F-broja"
+
+#: ../extensions/Exporters/FacebookExport/FacebookExportDialog.cs:212
msgid "Waiting for authentication"
msgstr "Čekam na prijavu"
-#: ../extensions/Exporters/FacebookExport/FacebookExportDialog.cs:212
+#: ../extensions/Exporters/FacebookExport/FacebookExportDialog.cs:213
msgid ""
"F-Spot will now launch your browser so that you can log into Facebook.\n"
"\n"
@@ -237,15 +274,15 @@ msgstr ""
"Ukoliko je moguće, F-broj će sačuvati vašu prijavu među gnomove priveske i "
"iskoristiti ga za sledeće prijave na Fejsbuk."
-#: ../extensions/Exporters/FacebookExport/FacebookExportDialog.cs:217
+#: ../extensions/Exporters/FacebookExport/FacebookExportDialog.cs:218
msgid "Authenticating..."
msgstr "Prijavljujem se..."
-#: ../extensions/Exporters/FacebookExport/FacebookExportDialog.cs:227
+#: ../extensions/Exporters/FacebookExport/FacebookExportDialog.cs:228
msgid "Error logging into Facebook"
msgstr "Greška pri povezivanju na Fejsbuk"
-#: ../extensions/Exporters/FacebookExport/FacebookExportDialog.cs:228
+#: ../extensions/Exporters/FacebookExport/FacebookExportDialog.cs:229
msgid ""
"There was a problem logging into Facebook. Check your credentials and try "
"again."
@@ -253,23 +290,23 @@ msgstr ""
"Javila se greška pro prijavi na Fejsbuk. Proverite akreditivno pismo i "
"pokušajte ponovo."
-#: ../extensions/Exporters/FacebookExport/FacebookExportDialog.cs:237
+#: ../extensions/Exporters/FacebookExport/FacebookExportDialog.cs:238
msgid "Authorizing Session"
msgstr "Ovlasti vezu"
-#: ../extensions/Exporters/FacebookExport/FacebookExportDialog.cs:246
+#: ../extensions/Exporters/FacebookExport/FacebookExportDialog.cs:247
msgid "Session established, fetching user info..."
msgstr "Veza je uspostavljena, preuzimam podatke..."
-#: ../extensions/Exporters/FacebookExport/FacebookExportDialog.cs:252
+#: ../extensions/Exporters/FacebookExport/FacebookExportDialog.cs:253
msgid "Session established, fetching friend list..."
msgstr "Veza je uspostavljena, preuzimam spisak drugova..."
-#: ../extensions/Exporters/FacebookExport/FacebookExportDialog.cs:262
+#: ../extensions/Exporters/FacebookExport/FacebookExportDialog.cs:263
msgid "Session established, fetching friend details..."
msgstr "Veza je uspostavljena, preuzimam podatke o drugovima..."
-#: ../extensions/Exporters/FacebookExport/FacebookExportDialog.cs:272
+#: ../extensions/Exporters/FacebookExport/FacebookExportDialog.cs:275
msgid "Session established, fetching photo albums..."
msgstr "Veza je uspostavljena, preuzimam foto-albume..."
@@ -279,11 +316,11 @@ msgstr "Veza je uspostavljena, preuzimam foto-albume..."
msgid "{0} {1} is logged into Facebook"
msgstr "{0} {1} je prijavljen na Fejsbuk"
-#: ../extensions/Exporters/FacebookExport/FacebookExportDialog.cs:291
+#: ../extensions/Exporters/FacebookExport/FacebookExportDialog.cs:294
msgid "Facebook Connection Error"
msgstr "Greška prilikom povezivanja na Fejsbuk"
-#: ../extensions/Exporters/FacebookExport/FacebookExportDialog.cs:292
+#: ../extensions/Exporters/FacebookExport/FacebookExportDialog.cs:295
#, csharp-format
msgid ""
"There was an error when downloading your information from Facebook.\n"
@@ -294,7 +331,7 @@ msgstr ""
"\n"
"Fejsbuk je odgovorio: {0}"
-#: ../extensions/Exporters/FacebookExport/FacebookExportDialog.cs:321
+#: ../extensions/Exporters/FacebookExport/FacebookExportDialog.cs:324
msgid "You are not logged in."
msgstr "Niste prijavljeni."
@@ -336,8 +373,7 @@ msgid "Logout"
msgstr "Odjavi se"
#: ../extensions/Exporters/FacebookExport/FacebookExport.ui.h:10
-#: ../lib/mono-addins/Mono.Addins.Gui/Mono.Addins.Gui/ManageSitesDialog.cs:51
-#: ../src/Widgets/InfoBox.cs:211
+#: ../src/Widgets/InfoBox.cs:213
msgid "Name"
msgstr "Naziv"
@@ -373,12 +409,12 @@ msgstr "_Flikr..."
msgid "_Zooomr..."
msgstr "_Zooomr..."
-#: ../extensions/Exporters/FlickrExport/FlickrExport.cs:105
+#: ../extensions/Exporters/FlickrExport/FlickrExport.cs:106
#: ../extensions/Exporters/FlickrExport/FlickrExport.glade.h:5
msgid "Authorize"
msgstr "Ovlasti"
-#: ../extensions/Exporters/FlickrExport/FlickrExport.cs:111
+#: ../extensions/Exporters/FlickrExport/FlickrExport.cs:112
#, csharp-format
msgid ""
"Return to this window after you have finished the authorization process on "
@@ -387,60 +423,59 @@ msgstr ""
"Vratite se na ovo prozorče nakon ovlašćivanja na {0} i pritisnite dugme "
"„Završi ovlašćenje“"
-#: ../extensions/Exporters/FlickrExport/FlickrExport.cs:112
+#: ../extensions/Exporters/FlickrExport/FlickrExport.cs:113
msgid "Complete Authorization"
msgstr "Završi ovlašćivanje"
-#: ../extensions/Exporters/FlickrExport/FlickrExport.cs:117
+#: ../extensions/Exporters/FlickrExport/FlickrExport.cs:118
#, csharp-format
msgid "Logging into {0}"
msgstr "Prijavi se na {0}"
-#: ../extensions/Exporters/FlickrExport/FlickrExport.cs:118
+#: ../extensions/Exporters/FlickrExport/FlickrExport.cs:119
msgid "Checking credentials..."
msgstr "Proveravam uverenja..."
-#: ../extensions/Exporters/FlickrExport/FlickrExport.cs:125
+#: ../extensions/Exporters/FlickrExport/FlickrExport.cs:126
#, csharp-format
msgid "Welcome {0} you are connected to {1}"
msgstr "Dobrodošli {0}, povezani ste na {1}"
-#: ../extensions/Exporters/FlickrExport/FlickrExport.cs:128
+#: ../extensions/Exporters/FlickrExport/FlickrExport.cs:129
#, csharp-format
msgid "Sign in as a different user"
msgstr "Prijavi se kao drugi korisnik"
-#: ../extensions/Exporters/FlickrExport/FlickrExport.cs:133
+#: ../extensions/Exporters/FlickrExport/FlickrExport.cs:134
#, csharp-format
msgid "Used {0} of your allowed {1} monthly quota"
msgstr "Iskorišćeno {0} od vaše dozvoljene {1} mesečne kvote"
-#: ../extensions/Exporters/FlickrExport/FlickrExport.cs:297
+#: ../extensions/Exporters/FlickrExport/FlickrExport.cs:298
msgid "Unable to log on"
msgstr "Ne mogu da se prijavim"
-#: ../extensions/Exporters/FlickrExport/FlickrExport.cs:317
+#: ../extensions/Exporters/FlickrExport/FlickrExport.cs:318
#, csharp-format
msgid "Waiting for response {0} of {1}"
msgstr "Čekam odgovor {0} od {1}"
-#: ../extensions/Exporters/FlickrExport/FlickrExport.cs:344
-#: ../extensions/Exporters/FolderExport/FolderExport.cs:242
+#: ../extensions/Exporters/FlickrExport/FlickrExport.cs:345
#: ../extensions/Exporters/GalleryExport/GalleryExport.cs:777
#, csharp-format
msgid "Uploading picture \"{0}\""
msgstr "Šaljem sliku „{0}“"
-#: ../extensions/Exporters/FlickrExport/FlickrExport.cs:367
+#: ../extensions/Exporters/FlickrExport/FlickrExport.cs:368
#, csharp-format
msgid "Error Uploading To {0}: {1}"
msgstr "Greška pri slanju na {0}: {1}"
-#: ../extensions/Exporters/FlickrExport/FlickrExport.cs:454
+#: ../extensions/Exporters/FlickrExport/FlickrExport.cs:455
msgid "Unable to log on."
msgstr "Ne mogu da se prijavim."
-#: ../extensions/Exporters/FlickrExport/FlickrExport.cs:455
+#: ../extensions/Exporters/FlickrExport/FlickrExport.cs:456
#, csharp-format
msgid ""
"F-Spot was unable to log on to {0}. Make sure you have given the "
@@ -450,7 +485,6 @@ msgstr ""
"koristeći okruženje Internet preglednika {0}."
#: ../extensions/Exporters/FlickrExport/FlickrExport.glade.h:1
-#: ../src/f-spot.glade.h:8
msgid "<b>Account</b>"
msgstr "<b>Nalog</b>"
@@ -459,7 +493,8 @@ msgstr "<b>Nalog</b>"
#: ../extensions/Exporters/GalleryExport/GalleryExport.glade.h:3
#: ../extensions/Exporters/PicasaWebExport/PicasaWebExport.glade.h:2
#: ../extensions/Exporters/SmugMugExport/SmugMugExport.glade.h:2
-#: ../src/f-spot.glade.h:14 ../src/UI.Dialog/ui/AdjustTimeDialog.ui.h:5
+#: ../extensions/Exporters/TabbloExport/ui/TabbloExport.ui.h:2
+#: ../src/f-spot.glade.h:8 ../src/UI.Dialog/ui/AdjustTimeDialog.ui.h:5
msgid "<b>Photos</b>"
msgstr "<b>Fotografije</b>"
@@ -468,7 +503,7 @@ msgstr "<b>Fotografije</b>"
#: ../extensions/Exporters/GalleryExport/GalleryExport.glade.h:4
#: ../extensions/Exporters/PicasaWebExport/PicasaWebExport.glade.h:4
#: ../extensions/Exporters/SmugMugExport/SmugMugExport.glade.h:4
-#: ../src/f-spot.glade.h:16
+#: ../src/f-spot.glade.h:10
msgid "<b>Style</b>"
msgstr "<b>Stil</b>"
@@ -480,7 +515,7 @@ msgstr "<b>Ovlašćenja pregleda</b>"
#: ../extensions/Exporters/GalleryExport/GalleryExport.glade.h:8
#: ../extensions/Exporters/PicasaWebExport/PicasaWebExport.glade.h:9
#: ../extensions/Exporters/SmugMugExport/SmugMugExport.glade.h:6
-#: ../src/f-spot.glade.h:43
+#: ../extensions/Exporters/TabbloExport/ui/TabbloExport.ui.h:5
msgid "Export"
msgstr "Izvezi"
@@ -524,7 +559,6 @@ msgstr "Vidljivo prijateljima"
#: ../extensions/Exporters/FlickrExport/FlickrExport.glade.h:16
#: ../extensions/Exporters/PicasaWebExport/PicasaWebExport.glade.h:21
-#: ../src/f-spot.glade.h:96
msgid "_Export tags"
msgstr "Izvezi _oznake"
@@ -533,7 +567,6 @@ msgstr "Izvezi _oznake"
#: ../extensions/Exporters/GalleryExport/GalleryExport.glade.h:21
#: ../extensions/Exporters/PicasaWebExport/PicasaWebExport.glade.h:25
#: ../extensions/Exporters/SmugMugExport/SmugMugExport.glade.h:15
-#: ../src/f-spot.glade.h:109
msgid "_Resize to: "
msgstr "_Veličina na: "
@@ -546,7 +579,6 @@ msgstr "_Pogledaj slike u razgledaču po završenom postavljanju"
#: ../extensions/Exporters/GalleryExport/GalleryExport.glade.h:24
#: ../extensions/Exporters/PicasaWebExport/PicasaWebExport.glade.h:27
#: ../extensions/Exporters/SmugMugExport/SmugMugExport.glade.h:17
-#: ../src/f-spot.glade.h:125
msgid "pixels"
msgstr "tačaka"
@@ -554,80 +586,104 @@ msgstr "tačaka"
msgid "F_older..."
msgstr "_Direktorijum..."
-#: ../extensions/Exporters/FolderExport/FolderExport.cs:140
+#: ../extensions/Exporters/FolderExport/FolderExport.cs:120
msgid "Select Export Folder"
msgstr "Izaberite direktorijum za izvoz"
-#: ../extensions/Exporters/FolderExport/FolderExport.cs:198
+#: ../extensions/Exporters/FolderExport/FolderExport.cs:173
msgid "Building Gallery"
msgstr "Pravim galeriju"
-#: ../extensions/Exporters/FolderExport/FolderExport.cs:248
+#: ../extensions/Exporters/FolderExport/FolderExport.cs:217
#, csharp-format
-msgid "Error uploading picture \"{0}\" to Gallery:{2}{1}"
-msgstr "Greška pri slanju slike „{0}“ u Galeriju:{2}{1}"
+#| msgid "Exporting picture \"{0}\""
+msgid "Exporting \"{0}\"..."
+msgstr "Izvozim „{0}“..."
-#: ../extensions/Exporters/FolderExport/FolderExport.cs:333
-msgid "Error: Error while transferring; Aborting"
-msgstr "Greška: greška u toku prebacivanja; odustajem"
+#: ../extensions/Exporters/FolderExport/FolderExport.cs:224
+#, csharp-format
+#| msgid "Error uploading picture \"{0}\" to Gallery:{2}{1}"
+msgid "Error Copying \"{0}\" to Gallery:{2}{1}"
+msgstr "Greška pri kopiranju „{0}“ u Galeriju:{2}{1}"
-#: ../extensions/Exporters/FolderExport/FolderExport.cs:336
-msgid "Error: File Already Exists; Aborting"
-msgstr "Greška: datoteka već postoji; odustajem"
+#: ../extensions/Exporters/FolderExport/FolderExport.cs:250
+#, csharp-format
+#| msgid "Transferring picture \"{0}\" To CD"
+msgid "Transferring to \"{0}\""
+msgstr "Prebacujem na „{0}“"
+
+#: ../extensions/Exporters/FolderExport/FolderExport.cs:251
+#| msgid "Error Transferring"
+msgid "Transferring..."
+msgstr "Prebacujem..."
+
+#. No need to check result here as if result is not true, an Exception will be thrown before
+#: ../extensions/Exporters/FolderExport/FolderExport.cs:256
+#| msgid "Upload Complete"
+msgid "Export Complete."
+msgstr "Izvoz je završen."
+
+#: ../extensions/Exporters/FolderExport/FolderExport.cs:258
+msgid "Exporting Photos Completed."
+msgstr "Izvoz fotografija je završen."
+
+#: ../extensions/Exporters/FolderExport/FolderExport.cs:325
+#| msgid "Export to"
+msgid "Exporting Photos"
+msgstr "Izvozim fotografije"
#. Note for translators: light as clear, opposite as dark
-#: ../extensions/Exporters/FolderExport/FolderExport.cs:803
+#: ../extensions/Exporters/FolderExport/FolderExport.cs:743
msgid "Light"
msgstr "Svetlo"
-#: ../extensions/Exporters/FolderExport/FolderExport.cs:804
+#: ../extensions/Exporters/FolderExport/FolderExport.cs:744
msgid "Dark"
msgstr "Mrak"
#. Abbreviation of previous
-#: ../extensions/Exporters/FolderExport/FolderExport.cs:984
+#: ../extensions/Exporters/FolderExport/FolderExport.cs:924
msgid "Prev"
msgstr "Pret"
-#: ../extensions/Exporters/FolderExport/FolderExport.cs:986
-#: ../extensions/Exporters/FolderExport/FolderExport.cs:1227
-#: ../src/CameraFileSelectionDialog.cs:82
+#: ../extensions/Exporters/FolderExport/FolderExport.cs:926
+#: ../extensions/Exporters/FolderExport/FolderExport.cs:1167
msgid "Index"
msgstr "Popis"
#. Don't care otherwise, Tags sounds reasonable
-#: ../extensions/Exporters/FolderExport/FolderExport.cs:989
-#: ../extensions/Exporters/FolderExport/FolderExport.cs:1161
-#: ../extensions/Exporters/FolderExport/FolderExport.cs:1201
-#: ../src/MainWindow.cs:342 ../src/Widgets/Sidebar.cs:64
+#: ../extensions/Exporters/FolderExport/FolderExport.cs:929
+#: ../extensions/Exporters/FolderExport/FolderExport.cs:1101
+#: ../extensions/Exporters/FolderExport/FolderExport.cs:1141
+#: ../src/MainWindow.cs:357 ../src/Widgets/Sidebar.cs:56
msgid "Tags"
msgstr "Oznake"
-#: ../extensions/Exporters/FolderExport/FolderExport.cs:992
-#: ../src/f-spot.glade.h:57 ../src/ItemAction.cs:102
+#: ../extensions/Exporters/FolderExport/FolderExport.cs:932
+#: ../src/ItemAction.cs:102
msgid "Next"
msgstr "Sledeća"
-#: ../extensions/Exporters/FolderExport/FolderExport.cs:1096
+#: ../extensions/Exporters/FolderExport/FolderExport.cs:1036
msgid "Gallery generated by"
msgstr "Galerija je napravljena pomoću"
-#: ../extensions/Exporters/FolderExport/FolderExport.cs:1136
+#: ../extensions/Exporters/FolderExport/FolderExport.cs:1076
msgid "Show Styles"
msgstr "Prikaži stilove"
-#: ../extensions/Exporters/FolderExport/FolderExport.cs:1137
+#: ../extensions/Exporters/FolderExport/FolderExport.cs:1077
msgid "Hide Styles"
msgstr "Sakrij stilove"
-#: ../extensions/Exporters/FolderExport/FolderExport.cs:1172
-#: ../extensions/Exporters/FolderExport/FolderExport.cs:1173
-#: ../src/ui/main_window.ui.h:24
+#: ../extensions/Exporters/FolderExport/FolderExport.cs:1112
+#: ../extensions/Exporters/FolderExport/FolderExport.cs:1113
+#: ../src/ui/main_window.ui.h:25
msgid "Tags: "
msgstr "Oznake: "
-#: ../extensions/Exporters/FolderExport/FolderExport.cs:1304
-#: ../extensions/Exporters/FolderExport/FolderExport.cs:1437
+#: ../extensions/Exporters/FolderExport/FolderExport.cs:1244
+#: ../extensions/Exporters/FolderExport/FolderExport.cs:1377
msgid "Page:"
msgstr "Stranica:"
@@ -636,7 +692,6 @@ msgid "\n"
msgstr "\n"
#: ../extensions/Exporters/FolderExport/FolderExport.glade.h:3
-#: ../src/f-spot.glade.h:11
msgid "<b>Destination</b>"
msgstr "<b>Odredište</b>"
@@ -684,11 +739,15 @@ msgstr "_Fascikla:"
msgid "_Save the files only"
msgstr "_Sačuvaj samo datoteke"
+#: ../extensions/Exporters/GalleryExport/FormClient.cs:294
+msgid "Unhandled exception"
+msgstr "Nerešiv izuzetak"
+
#: ../extensions/Exporters/GalleryExport/GalleryExport.addin.xml.h:1
msgid "Web _Gallery..."
msgstr "_Veb galeriju..."
-#: ../extensions/Exporters/GalleryExport/GalleryExport.cs:52
+#: ../extensions/Exporters/GalleryExport/GalleryExport.cs:53
msgid ""
"Cannot connect to a Gallery for which the version is unknown.\n"
"Please check that you have Remote plugin 1.0.8 or later"
@@ -752,25 +811,25 @@ msgid "Error uploading picture \"{0}\" to Gallery: {1}"
msgstr "Greška pri slanju slike „{0}“ u Galeriju: {1}"
#: ../extensions/Exporters/GalleryExport/GalleryExport.cs:824
-#: ../extensions/Exporters/PicasaWebExport/PicasaWebExport.cs:727
+#: ../extensions/Exporters/PicasaWebExport/PicasaWebExport.cs:728
#: ../extensions/Exporters/SmugMugExport/SmugMugExport.cs:630
msgid "(No Gallery)"
msgstr "(Bez Galerije)"
#: ../extensions/Exporters/GalleryExport/GalleryExport.cs:916
-#: ../extensions/Exporters/PicasaWebExport/PicasaWebExport.cs:849
+#: ../extensions/Exporters/PicasaWebExport/PicasaWebExport.cs:850
#: ../extensions/Exporters/SmugMugExport/SmugMugExport.cs:726
msgid "(Not Connected)"
msgstr "(Nije povezan)"
#: ../extensions/Exporters/GalleryExport/GalleryExport.cs:917
-#: ../extensions/Exporters/PicasaWebExport/PicasaWebExport.cs:850
+#: ../extensions/Exporters/PicasaWebExport/PicasaWebExport.cs:851
#: ../extensions/Exporters/SmugMugExport/SmugMugExport.cs:727
msgid "(No Albums)"
msgstr "(Nema albuma)"
#: ../extensions/Exporters/GalleryExport/GalleryExport.cs:969
-#: ../extensions/Exporters/PicasaWebExport/PicasaWebExport.cs:915
+#: ../extensions/Exporters/PicasaWebExport/PicasaWebExport.cs:916
#: ../extensions/Exporters/SmugMugExport/SmugMugExport.cs:768
msgid "No account selected"
msgstr "Nisu izabrani nalozi"
@@ -778,12 +837,10 @@ msgstr "Nisu izabrani nalozi"
#: ../extensions/Exporters/GalleryExport/GalleryExport.glade.h:1
#: ../extensions/Exporters/PicasaWebExport/PicasaWebExport.glade.h:1
#: ../extensions/Exporters/SmugMugExport/SmugMugExport.glade.h:1
-#: ../src/f-spot.glade.h:9
msgid "<b>Album</b>"
msgstr "<b>Album</b>"
#: ../extensions/Exporters/GalleryExport/GalleryExport.glade.h:2
-#: ../src/f-spot.glade.h:12
msgid "<b>Gallery</b>"
msgstr "<b>Galerija</b>"
@@ -825,7 +882,6 @@ msgstr "_Opis:"
#: ../extensions/Exporters/GalleryExport/GalleryExport.glade.h:16
#: ../extensions/Exporters/PicasaWebExport/PicasaWebExport.glade.h:22
#: ../extensions/Exporters/SmugMugExport/SmugMugExport.glade.h:13
-#: ../src/f-spot.glade.h:97
msgid "_Export to Album:"
msgstr "Izvezi u _album:"
@@ -845,6 +901,7 @@ msgstr "_Roditeljski album:"
#: ../extensions/Exporters/GalleryExport/GalleryExport.glade.h:20
#: ../extensions/Exporters/PicasaWebExport/PicasaWebExport.glade.h:24
#: ../extensions/Exporters/SmugMugExport/SmugMugExport.glade.h:14
+#: ../extensions/Exporters/TabbloExport/ui/TabbloExport.ui.h:10
msgid "_Password:"
msgstr "_Lozinka:"
@@ -855,23 +912,24 @@ msgstr "_Naslov:"
#: ../extensions/Exporters/GalleryExport/GalleryExport.glade.h:23
#: ../extensions/Exporters/PicasaWebExport/PicasaWebExport.glade.h:26
#: ../extensions/Exporters/SmugMugExport/SmugMugExport.glade.h:16
+#: ../extensions/Exporters/TabbloExport/ui/TabbloExport.ui.h:11
msgid "_Username:"
msgstr "_Korisničko ime:"
-#: ../extensions/Exporters/GalleryExport/GalleryRemote.cs:361
+#: ../extensions/Exporters/GalleryExport/GalleryRemote.cs:362
msgid "Error reading server response"
msgstr "Greška u čitanju odgovora sa servera"
#. failed to find the response
-#: ../extensions/Exporters/GalleryExport/GalleryRemote.cs:373
+#: ../extensions/Exporters/GalleryExport/GalleryRemote.cs:374
msgid "Server returned response without Gallery content"
msgstr "Server je vratio odgovor bez sadržaja Gelerije"
-#: ../extensions/Exporters/GalleryExport/GalleryRemote.cs:710
+#: ../extensions/Exporters/GalleryExport/GalleryRemote.cs:711
msgid "Error while creating new album"
msgstr "Greška prilikom pravljenja novog albuma"
-#: ../extensions/Exporters/GalleryExport/GalleryRemote.cs:711
+#: ../extensions/Exporters/GalleryExport/GalleryRemote.cs:712
#, csharp-format
msgid ""
"The following error was encountered while attempting to perform the "
@@ -885,38 +943,38 @@ msgstr ""
msgid "_PicasaWeb..."
msgstr "_PikasaVeb..."
-#: ../extensions/Exporters/PicasaWebExport/PicasaWebExport.cs:441
+#: ../extensions/Exporters/PicasaWebExport/PicasaWebExport.cs:442
msgid "Error while creating Album"
msgstr "Greška prilikom pravljenja albuma"
-#: ../extensions/Exporters/PicasaWebExport/PicasaWebExport.cs:442
+#: ../extensions/Exporters/PicasaWebExport/PicasaWebExport.cs:443
#, csharp-format
msgid ""
"The following error was encountered while attempting to create an album: {0}"
msgstr "Javila se sledeća greška pri pokušaju da napravim album: {0}"
-#: ../extensions/Exporters/PicasaWebExport/PicasaWebExport.cs:620
+#: ../extensions/Exporters/PicasaWebExport/PicasaWebExport.cs:621
#, csharp-format
msgid "{0} Sent"
msgstr "{0} poslato"
-#: ../extensions/Exporters/PicasaWebExport/PicasaWebExport.cs:622
+#: ../extensions/Exporters/PicasaWebExport/PicasaWebExport.cs:623
#, csharp-format
msgid "{0} of approx. {1}"
msgstr "{0} od približno {1}"
-#: ../extensions/Exporters/PicasaWebExport/PicasaWebExport.cs:691
+#: ../extensions/Exporters/PicasaWebExport/PicasaWebExport.cs:692
#: ../extensions/Exporters/SmugMugExport/SmugMugExport.cs:594
#, csharp-format
msgid "Error Uploading To Gallery: {0}"
msgstr "Greška pri slanju u Galeriju: {0}"
-#: ../extensions/Exporters/PicasaWebExport/PicasaWebExport.cs:778
+#: ../extensions/Exporters/PicasaWebExport/PicasaWebExport.cs:779
#, csharp-format
msgid "Available space: {0}, {1}% used out of {2}"
msgstr "Slobodan prostor: {0}, {1}% zauzeto od {2}"
-#: ../extensions/Exporters/PicasaWebExport/PicasaWebExport.cs:891
+#: ../extensions/Exporters/PicasaWebExport/PicasaWebExport.cs:892
#, csharp-format
msgid ""
"The selected album has a limit of {0} pictures,\n"
@@ -1003,12 +1061,74 @@ msgstr "Slanje je završeno"
msgid "Error uploading to Tabblo: "
msgstr "Greška pri slanju na Tabblo: "
+#: ../extensions/Exporters/TabbloExport/ui/TabbloExport.ui.h:1
+#| msgid "<b>Import Settings</b>"
+msgid "<b>F-Spot tags</b>"
+msgstr "<b>F-broj oznake</b>"
+
+#: ../extensions/Exporters/TabbloExport/ui/TabbloExport.ui.h:3
+msgid "<b>Tabblo account</b>"
+msgstr "<b>Tabblo nalog</b>"
+
+#: ../extensions/Exporters/TabbloExport/ui/TabbloExport.ui.h:4
+msgid ""
+"<small><i>F-Spot tags can help you track the export status of photos. "
+"Example: Use one tag for the photos that you plan to export, and another one "
+"for those already exported. Here, you can tell F-Spot to automatically "
+"replace these tags as appropriate.</i></small>"
+msgstr ""
+"<small><i>F-broj oznake vam mogu pomoći da pratite izvoz fotografija. "
+"Ukoliko upotrebite jednu oznaku za sve fotografije koje želite da izvezete, "
+"a neku drugu za one koje ste već izvezli, F-broj vam može pomoći tako što će "
+"automatski zameniti prvu oznaku drugom.</i></small>"
+
+#: ../extensions/Exporters/TabbloExport/ui/TabbloExport.ui.h:6
+msgid "Rem_ove from exported photos:"
+msgstr "_Ukloni sa izvezene fotografije:"
+
+#: ../extensions/Exporters/TabbloExport/ui/TabbloExport.ui.h:7
+#| msgid "Select a Tag..."
+msgid "Select..."
+msgstr "Izaberi..."
+
+#: ../extensions/Exporters/TabbloExport/ui/TabbloExport.ui.h:8
+msgid "_Attach to exported photos:"
+msgstr "_Dodaj na izvezenu fotografije:"
+
+#: ../extensions/Exporters/TabbloExport/ui/TrustError.ui.h:1
+msgid "<b>{0}</b>."
+msgstr "<b>{0}</b>."
+
+#: ../extensions/Exporters/TabbloExport/ui/TrustError.ui.h:2
+msgid "A trust error occured while attempting to access"
+msgstr "Javila se greška u ovlašćenjima pri pokušaju povezivanja"
+
+#: ../extensions/Exporters/TabbloExport/ui/TrustError.ui.h:3
+msgid "Abort this session"
+msgstr "Odbaci ovu sesiju"
+
+#: ../extensions/Exporters/TabbloExport/ui/TrustError.ui.h:4
+msgid "Always trust this site's certificate"
+msgstr "Uvek veruj sertifikatima sa ove adrese"
+
+#: ../extensions/Exporters/TabbloExport/ui/TrustError.ui.h:5
+msgid "Do you wish to:"
+msgstr "Da li želite da:"
+
+#: ../extensions/Exporters/TabbloExport/ui/TrustError.ui.h:6
+msgid "Trust Error"
+msgstr "Greška u ovlašćenjima"
+
+#: ../extensions/Exporters/TabbloExport/ui/TrustError.ui.h:7
+msgid "Trust the site's certificate this once"
+msgstr "Prihvati sertifikat sa ove adrese samo sada"
+
#: ../extensions/Exporters/ZipExport/ZipExport.addin.xml.h:1
msgid "Compressed fil_e..."
msgstr "_Zapakovana datoteka..."
#: ../extensions/Exporters/ZipExport/ZipExport.cs:47
-#: ../src/Widgets/EditorPage.cs:196
+#: ../src/Widgets/EditorPage.cs:198
msgid "No selection available"
msgstr "Ništa nije izabrano"
@@ -1034,7 +1154,6 @@ msgid "Preparing photo \"{0}\""
msgstr "Spremam sliku „{0}“"
#: ../extensions/Exporters/ZipExport/ZipExport.glade.h:1
-#: ../src/f-spot.glade.h:92
msgid "_Create"
msgstr "_Napravi"
@@ -1050,6 +1169,11 @@ msgstr "_Mesto:"
msgid "_Scale:"
msgstr "_Raširi:"
+#: ../extensions/Tools/HashJob/HashJob.addin.xml.h:1
+#| msgid "Hash for Duplicates"
+msgid "Check for Duplicates..."
+msgstr "Nađi duplikate..."
+
#: ../extensions/Tools/HashJob/HashJob.cs:53
msgid ""
"In order to detect duplicates on pictures you imported before 0.5.0, F-Spot "
@@ -1069,7 +1193,7 @@ msgstr ""
"Trenutno imate {0} fotografija kojima treba izračunati md5 i {1} zakazanih "
"zadataka"
-#: ../extensions/Tools/HashJob/HashJob.cs:75 ../src/ui/main_window.ui.h:37
+#: ../extensions/Tools/HashJob/HashJob.cs:75 ../src/ui/main_window.ui.h:38
msgid "_Close"
msgstr "_Zatvori"
@@ -1081,12 +1205,7 @@ msgstr "Obrađujem slike..."
msgid "Stopped"
msgstr "Zaustavljeno"
-#: ../extensions/Tools/HashJob/HashJob.addin.xml.h:1
-msgid "Hash for Duplicates"
-msgstr "Nađi duplikate"
-
#: ../extensions/Tools/LiveWebGallery/GalleryRequestHandler.cs:107
-#| msgid "(No Gallery)"
msgid "F-Spot Gallery"
msgstr "Galerija F-broja"
@@ -1095,36 +1214,44 @@ msgid "The web gallery seems to be offline now"
msgstr "Izgleda je je galerija trenutno van mreže"
#: ../extensions/Tools/LiveWebGallery/GalleryRequestHandler.cs:109
-#| msgid "Show Styles"
msgid "Show All"
msgstr "Prikaži sve"
#: ../extensions/Tools/LiveWebGallery/GalleryRequestHandler.cs:119
#, csharp-format
-#| msgid "{0} Photo"
-#| msgid_plural "{0} Photos"
msgid "{0} photo"
msgid_plural "{0} photos"
msgstr[0] "{0} slika"
msgstr[1] "{0} slike"
msgstr[2] "{0} slika"
+msgstr[3] "Jedna slika"
#: ../extensions/Tools/LiveWebGallery/GalleryRequestHandler.cs:161
#: ../extensions/Tools/LiveWebGallery/ui/LiveWebGallery.ui.h:8
-#| msgid "Current date:"
msgid "Current View"
msgstr "Trenutni pregled"
#: ../extensions/Tools/LiveWebGallery/GalleryRequestHandler.cs:164
-#| msgid "Delete"
msgid "Selected"
msgstr "Izabrano"
#: ../extensions/Tools/LiveWebGallery/LiveWebGallery.addin.xml.h:1
-#| msgid "Web _Gallery..."
msgid "Live Web Gallery"
msgstr "Veb galerija uživo"
+#: ../extensions/Tools/LiveWebGallery/LiveWebGalleryDialog.cs:89
+msgid "none"
+msgstr "ništa"
+
+#: ../extensions/Tools/LiveWebGallery/LiveWebGalleryDialog.cs:92
+#, csharp-format
+msgid " Gallery: {0}, Photos: {1}, Last client: {3}"
+msgstr " Galerija: {0}, Slika: {1}, Poslednji klijent: {3}"
+
+#: ../extensions/Tools/LiveWebGallery/LiveWebGalleryDialog.cs:156
+msgid "Gallery is inactive"
+msgstr "Galerija je nedostupna"
+
#: ../extensions/Tools/LiveWebGallery/ui/LiveWebGallery.ui.h:1
msgid ""
"<small><i>The gallery stays active until you either deactivate it or close\n"
@@ -1158,7 +1285,6 @@ msgid "F-Spot Live Web Gallery"
msgstr "Veb galerija F-broja"
#: ../extensions/Tools/LiveWebGallery/ui/LiveWebGallery.ui.h:10
-#| msgid "_Gallery:"
msgid "Gallery URL:"
msgstr "Adresa gelerije:"
@@ -1167,47 +1293,26 @@ msgid "Limit number of shared photos to"
msgstr "Ograniči broj dotografija za deljenje na"
#: ../extensions/Tools/LiveWebGallery/ui/LiveWebGallery.ui.h:12
-#| msgid "Caption"
msgid "Options:"
msgstr "Opcije:"
#: ../extensions/Tools/LiveWebGallery/ui/LiveWebGallery.ui.h:13
-#| msgid "Photos per page"
msgid "Photos with a Tag"
msgstr "Slike koje su označene"
# bug: no plural forms needed
#: ../extensions/Tools/LiveWebGallery/ui/LiveWebGallery.ui.h:14
-#| msgid "_Delete photo"
-#| msgid_plural "_Delete photos"
msgid "Selected Photos"
msgstr "Izabrane fotografije"
#: ../extensions/Tools/LiveWebGallery/ui/LiveWebGallery.ui.h:15
-#| msgid "Sharpen"
msgid "Share:"
msgstr "Deljenje:"
#: ../extensions/Tools/LiveWebGallery/ui/LiveWebGallery.ui.h:16
-#| msgid "View"
msgid "Views:"
msgstr "Pregleda:"
-#: ../extensions/Tools/LiveWebGallery/LiveWebGalleryDialog.cs:89
-#| msgid "None"
-msgid "none"
-msgstr "ništa"
-
-#: ../extensions/Tools/LiveWebGallery/LiveWebGalleryDialog.cs:92
-#, csharp-format
-msgid " Gallery: {0}, Photos: {1}, Last client: {3}"
-msgstr " Galerija: {0}, Slika: {1}, Poslednji klijent: {3}"
-
-#: ../extensions/Tools/LiveWebGallery/LiveWebGalleryDialog.cs:156
-#| msgid "Gallery generated by"
-msgid "Gallery is inactive"
-msgstr "Galerija je nedostupna"
-
#: ../extensions/Tools/MergeDb/MergeDb.addin.xml.h:1
msgid "Merge Db"
msgstr "Spoji baze"
@@ -1292,11 +1397,11 @@ msgid "New Rolls Only"
msgstr "Samo nova uvoženja"
#: ../extensions/Tools/MergeDb/MergeDb.glade.h:15
-#: ../src/FileImportBackend.cs:290 ../src/UI.Dialog/ThreadProgressDialog.cs:51
+#: ../src/UI.Dialog/ThreadProgressDialog.cs:57
msgid "Skip"
msgstr "Preskoči"
-#: ../extensions/Tools/MergeDb/PickFolderDialog.cs:33
+#: ../extensions/Tools/MergeDb/PickFolderDialog.cs:34
#, csharp-format
msgid ""
"<big>The database refers to files contained in the <b>{0}</b> folder.\n"
@@ -1334,379 +1439,222 @@ msgstr "Postavi F-broj za čuvara ekrana"
msgid "Screensaver Configuration"
msgstr "Podešavanje čuvara ekrana"
-#: ../f-spot.desktop.in.in.h:1 ../f-spot-import.desktop.in.in.h:1
-msgid "F-Spot Photo Manager"
-msgstr "F-broj foto album"
-
-#: ../f-spot.desktop.in.in.h:2
-msgid "Organize, enjoy, and share your photos"
-msgstr "Organizujte, uživajte i podelite vaše fotografije"
-
-#: ../f-spot.desktop.in.in.h:3 ../f-spot-import.desktop.in.in.h:3
-msgid "Photo Manager"
-msgstr "Foto album"
-
-#: ../f-spot-import.desktop.in.in.h:2
-msgid "Import into F-Spot"
-msgstr "Uvezi u F-broj"
+#: ../f-spot.schemas.in.h:1
+msgid "Display of transparent parts."
+msgstr "Prikaz providnih delova."
-#: ../f-spot-view.desktop.in.in.h:1
-msgid "F-Spot Photo Viewer"
-msgstr "F-broj pregledač fotografija"
+#: ../f-spot.schemas.in.h:2
+msgid "Enable this to allow interpolation on zoomed images."
+msgstr "Uključite ovo za interpolaciju pri povećanju slika."
-#: ../f-spot-view.desktop.in.in.h:2
-msgid "Photo Viewer"
-msgstr "Preglednik fotografija"
-
-#: ../lib/libfspot/f-jpeg-utils.c:441 ../src/RotateCommand.cs:224
-msgid "File not found"
-msgstr "Datoteka nije nađena"
-
-#: ../lib/libfspot/f-jpeg-utils.c:464
-#, c-format
-msgid "Unknown transform type %d"
-msgstr "Nepoznata vrsta transformacije %d"
-
-#: ../lib/libfspot/f-jpeg-utils.c:472
-msgid "Operation failed"
-msgstr "Propala operacija"
+#: ../f-spot.schemas.in.h:3
+msgid "Height of the import dialog."
+msgstr "Visina prozorčeta za uvoz."
-#: ../lib/mono-addins/Mono.Addins.Gui/gtk-gui/Mono.Addins.Gui.AddinInfoDialog.cs:32
-msgid "Package"
-msgstr "Paket"
+#: ../f-spot.schemas.in.h:4
+msgid "Height of the main window."
+msgstr "Visina glavnog prozora."
-#: ../lib/mono-addins/Mono.Addins.Gui/gtk-gui/Mono.Addins.Gui.AddinInstallDialog.cs:110
-msgid "Extension Installation"
-msgstr "Dodavanje proširenja"
+#: ../f-spot.schemas.in.h:5
+msgid "Height of the photo viewer window."
+msgstr "Visina prozora za pregled slika."
-#: ../lib/mono-addins/Mono.Addins.Gui/gtk-gui/Mono.Addins.Gui.AddinInstallDialog.cs:136
-msgid "<b>Select the extensions to install and click on Next</b>"
+#: ../f-spot.schemas.in.h:6
+msgid ""
+"If the 'transparency' option is set, the color specified in this option will "
+"be used as the transparent color when viewing images."
msgstr ""
-"<b>Izaberite proširenje koje želite da dodate i pritisnite „Naredno“</b>"
-
-#: ../lib/mono-addins/Mono.Addins.Gui/gtk-gui/Mono.Addins.Gui.AddinInstallDialog.cs:150
-msgid "Install from:"
-msgstr "Instaliraj iz:"
-
-#: ../lib/mono-addins/Mono.Addins.Gui/gtk-gui/Mono.Addins.Gui.AddinInstallDialog.cs:179
-#: ../lib/mono-addins/Mono.Addins.Gui/gtk-gui/Mono.Addins.Gui.AddinManagerDialog.cs:180
-msgid "_Repositories..."
-msgstr "_Skladišta..."
-
-#: ../lib/mono-addins/Mono.Addins.Gui/gtk-gui/Mono.Addins.Gui.AddinInstallDialog.cs:220
-msgid "Show all packages"
-msgstr "Prikaži sve pakete"
+"Ukoliko je postavljeno na „transparency“, boja koju izaberete će biti "
+"postavljena umesto providnih delova slike."
-#: ../lib/mono-addins/Mono.Addins.Gui/gtk-gui/Mono.Addins.Gui.AddinInstallDialog.cs:221
-msgid "Show new versions only"
-msgstr "Prikaži samo nova izdanja"
-
-#: ../lib/mono-addins/Mono.Addins.Gui/gtk-gui/Mono.Addins.Gui.AddinInstallDialog.cs:222
-msgid "Show updates only"
-msgstr "Prikaži samo nadogradnje"
-
-#: ../lib/mono-addins/Mono.Addins.Gui/gtk-gui/Mono.Addins.Gui.AddinInstallDialog.cs:247
-msgid "_Unselect All"
-msgstr "Izaberi _ništa"
-
-#: ../lib/mono-addins/Mono.Addins.Gui/gtk-gui/Mono.Addins.Gui.AddinInstallDialog.cs:259
-#: ../src/ui/main_window.ui.h:18
-msgid "Select _All"
-msgstr "Izaberi _sve"
+#: ../f-spot.schemas.in.h:7
+#| msgid "_Interpolate image on zoom"
+msgid "Interpolate image on zoom."
+msgstr "Interpoliši sliku pri uvećanju."
-#: ../lib/mono-addins/Mono.Addins.Gui/gtk-gui/Mono.Addins.Gui.AddinInstallDialog.cs:334
-msgid "label124"
-msgstr "natpis124"
+#: ../f-spot.schemas.in.h:8
+msgid "Maximize the main window."
+msgstr "Uvećaj glavni prozor."
-#: ../lib/mono-addins/Mono.Addins.Gui/gtk-gui/Mono.Addins.Gui.AddinInstallDialog.cs:346
-msgid "Overall Progress:"
-msgstr "Upukan napredak:"
+#: ../f-spot.schemas.in.h:9
+msgid "Maximize the photo viewer window."
+msgstr "Uvećaj prozor za pregled slika."
-#: ../lib/mono-addins/Mono.Addins.Gui/gtk-gui/Mono.Addins.Gui.AddinInstallDialog.cs:374
-msgid "Downloading extensions..."
-msgstr "Preuzimam proširenja..."
+#: ../f-spot.schemas.in.h:10
+msgid "Path to custom gtkrc for theming F-Spot."
+msgstr "Putanja do proizvoljne gtkrc teme za F-broj."
-#: ../lib/mono-addins/Mono.Addins.Gui/gtk-gui/Mono.Addins.Gui.AddinInstallerDialog.cs:36
-#: ../lib/mono-addins/Mono.Addins.Gui/gtk-gui/Mono.Addins.Gui.AddinManagerDialog.cs:58
-msgid "Extension Manager"
-msgstr "Urednik proširenja"
+#: ../f-spot.schemas.in.h:11
+msgid "Show dates in the thumbnail view."
+msgstr "Ispisuje datum uz umanjene prikaze."
-#: ../lib/mono-addins/Mono.Addins.Gui/gtk-gui/Mono.Addins.Gui.AddinInstallerDialog.cs:54
-msgid "Additional extensions are required to perform this operation."
-msgstr "Potrebna su dodatna proširenja za izvođenje ove radnje."
+#: ../f-spot.schemas.in.h:12
+msgid "Show ratings in the thumbnail view."
+msgstr "Ispisuje ocene uz umanjene prikaze."
-#: ../lib/mono-addins/Mono.Addins.Gui/gtk-gui/Mono.Addins.Gui.AddinInstallerDialog.cs:64
-msgid "The following extensions will be installed:"
-msgstr "Sledeća proširenja će biti dodata:"
+#: ../f-spot.schemas.in.h:13
+msgid "Show tags in the thumbnail view."
+msgstr "Ispisuje oznake uz umanjene prikaze."
-#: ../lib/mono-addins/Mono.Addins.Gui/gtk-gui/Mono.Addins.Gui.AddinManagerDialog.cs:90
-msgid "<big><b>Extension Manager</b></big>"
-msgstr "<big><b>Urednik proširenja</b></big>"
+#: ../f-spot.schemas.in.h:14
+msgid "Show the filename in the viewer window."
+msgstr "Ispisuje ime datoteke u prozoru za prikaz slike."
-#: ../lib/mono-addins/Mono.Addins.Gui/gtk-gui/Mono.Addins.Gui.AddinManagerDialog.cs:110
-msgid "The following extensions are currently installed:"
-msgstr "Dodata su sledeća proširenja:"
+#: ../f-spot.schemas.in.h:15
+msgid "Show the filmstrip in the main window."
+msgstr "Prikazuje filmsku traku u glavnom prozoru."
-#: ../lib/mono-addins/Mono.Addins.Gui/gtk-gui/Mono.Addins.Gui.AddinManagerDialog.cs:165
-msgid "_Install Extensions..."
-msgstr "_Dodaj proširenja..."
+#: ../f-spot.schemas.in.h:16
+msgid "Show the sidebar in the main window."
+msgstr "Prikazuje bočnu površ u glavnom prozoru."
-#: ../lib/mono-addins/Mono.Addins.Gui/gtk-gui/Mono.Addins.Gui.AddinManagerDialog.cs:210
-msgid "_Uninstall..."
-msgstr "_Ukloni..."
+#: ../f-spot.schemas.in.h:17
+msgid "Show the timeline in the main window."
+msgstr "Prikazuje liniju vremena u glavnom prozoru."
-#: ../lib/mono-addins/Mono.Addins.Gui/gtk-gui/Mono.Addins.Gui.AddinManagerDialog.cs:236
-msgid "Enable"
-msgstr "Omogući"
+#: ../f-spot.schemas.in.h:18
+msgid "Show the toolbar in the main window."
+msgstr "Prikazuje alatnicu u glavnom prozoru."
-#: ../lib/mono-addins/Mono.Addins.Gui/gtk-gui/Mono.Addins.Gui.AddinManagerDialog.cs:262
-msgid "Disable"
-msgstr "Onemogući"
+#: ../f-spot.schemas.in.h:19
+msgid "Show the toolbar in the photo viewer window."
+msgstr "Prikazuje alatnicu u prozoru za prikaz slike."
-#: ../lib/mono-addins/Mono.Addins.Gui/gtk-gui/Mono.Addins.Gui.ErrorDialog.cs:111
-msgid "Details"
-msgstr "Detalji"
+#: ../f-spot.schemas.in.h:20
+msgid "Size of the tag icons shown in the sidebar."
+msgstr "Veličina ikonice za oznaku u bočnoj površi."
+
+#: ../f-spot.schemas.in.h:21
+msgid "The X position to use for the main window."
+msgstr "Mesto glavnog prozora u odnosu na X osu."
+
+#: ../f-spot.schemas.in.h:22
+msgid "The X position to use for the photo viewer window."
+msgstr "Mesto prozora za prikaz slike u odnosu na X osu."
+
+#: ../f-spot.schemas.in.h:23
+msgid "The Y position to use for the main window."
+msgstr "Mesto glavnog prozora u odnosu na Y osu."
+
+#: ../f-spot.schemas.in.h:24
+msgid "The Y position to use for the photo viewer window."
+msgstr "Mesto prozora za prikaz slike u odnosu na Y osu."
+
+#: ../f-spot.schemas.in.h:25
+msgid "The color to use for transparent parts."
+msgstr "Boja za providne delove slike."
+
+#: ../f-spot.schemas.in.h:26
+msgid "The height dimension to use for the import dialog."
+msgstr "Visina prozorčeta za uvoz fotografija."
+
+#: ../f-spot.schemas.in.h:27
+msgid "The height dimension to use for the main window."
+msgstr "Visina glavnog prozora."
+
+#: ../f-spot.schemas.in.h:28
+msgid "The height dimension to use for the photo viewer window."
+msgstr "Visina prozora za prikaz slika."
+
+#: ../f-spot.schemas.in.h:29
+msgid "The orientation of the filmstrip, if shown."
+msgstr "Smer filmske trake, ukoliko je prikazana."
+
+#: ../f-spot.schemas.in.h:30
+msgid "The orientation of the filmstrip."
+msgstr "Smer filmske trake."
+
+#: ../f-spot.schemas.in.h:31
+msgid "The size (width) of the sidebar in the main window."
+msgstr "Širina (veličina) bočne površi u glavnom prozoru."
+
+#: ../f-spot.schemas.in.h:32
+msgid "The size of the sidebar in the main window."
+msgstr "Širina bočne površi u glavnom prozoru."
-#: ../lib/mono-addins/Mono.Addins.Gui/gtk-gui/Mono.Addins.Gui.ManageSitesDialog.cs:34
-msgid "Extension Repository Management"
-msgstr "Urednik proširenja skladišta"
+#: ../f-spot.schemas.in.h:33
+msgid "The width dimension to use for the import dialog."
+msgstr "Širina prozorčeta za uvoz fotografija."
-#: ../lib/mono-addins/Mono.Addins.Gui/gtk-gui/Mono.Addins.Gui.NewSiteDialog.cs:52
-msgid "Add New Repository"
-msgstr "Dodaj novo skladište"
+#: ../f-spot.schemas.in.h:34
+msgid "The width dimension to use for the main window."
+msgstr "Širina glavnog prozora."
-#: ../lib/mono-addins/Mono.Addins.Gui/gtk-gui/Mono.Addins.Gui.NewSiteDialog.cs:70
-msgid "Select the location of the repository you want to register:"
-msgstr "Izaberite mesto skladišta koje želite da registrujete:"
+#: ../f-spot.schemas.in.h:35
+msgid "The width dimension to use for the photo viewer window."
+msgstr "Širina prozora za prikaz slika."
-#. Container child vbox89.Gtk.Box+BoxChild
-#: ../lib/mono-addins/Mono.Addins.Gui/gtk-gui/Mono.Addins.Gui.NewSiteDialog.cs:77
-msgid "Register an on-line repository"
-msgstr "Registrujte skladište na mreži"
+#: ../f-spot.schemas.in.h:36
+msgid "Use the current photo's filename as the viewer window's title."
+msgstr "Upotrebi naziv datoteke za naslov prozora za prikaz slika."
-#: ../lib/mono-addins/Mono.Addins.Gui/gtk-gui/Mono.Addins.Gui.NewSiteDialog.cs:106
-msgid "Url:"
-msgstr "Adresa:"
+#: ../f-spot.schemas.in.h:37
+msgid "Width of the import dialog."
+msgstr "Širina prozorčeta za uvoz fotografija."
-#. Container child vbox89.Gtk.Box+BoxChild
-#: ../lib/mono-addins/Mono.Addins.Gui/gtk-gui/Mono.Addins.Gui.NewSiteDialog.cs:127
-msgid "Register a local repository"
-msgstr "Registrujte lokalno skladište"
+#: ../f-spot.schemas.in.h:38
+msgid "Width of the main window."
+msgstr "Širina glavnog prozora."
-#: ../lib/mono-addins/Mono.Addins.Gui/gtk-gui/Mono.Addins.Gui.NewSiteDialog.cs:155
-msgid "Path:"
-msgstr "Putanja:"
+#: ../f-spot.schemas.in.h:39
+msgid "Width of the photo viewer window."
+msgstr "Širina prozora za prikaz slika."
-#: ../lib/mono-addins/Mono.Addins.Gui/gtk-gui/Mono.Addins.Gui.NewSiteDialog.cs:179
-msgid "Browse..."
-msgstr "Razgledaj..."
+#: ../f-spot.schemas.in.h:40
+msgid "Width of the preview image pane in the import dialog."
+msgstr "Širina površi za prikaz fotografije u prozorčetu za uvoz."
-#: ../lib/mono-addins/Mono.Addins.Gui/Mono.Addins.Gui/AddinInfoDialog.cs:62
-msgid "Version:"
-msgstr "Izdanje:"
+#: ../f-spot.schemas.in.h:41
+msgid "X position of the main window."
+msgstr "Mesto glavnog prozora na X osi."
-#: ../lib/mono-addins/Mono.Addins.Gui/Mono.Addins.Gui/AddinInfoDialog.cs:65
-msgid "Author:"
-msgstr "Autor:"
+#: ../f-spot.schemas.in.h:42
+msgid "X position of the photo viewer window."
+msgstr "Mesto prozora za prikaz slika na X osi."
-#: ../lib/mono-addins/Mono.Addins.Gui/Mono.Addins.Gui/AddinInfoDialog.cs:68
-msgid "Copyright:"
-msgstr "Autorsko pravo:"
+#: ../f-spot.schemas.in.h:43
+msgid "Y position of the main window."
+msgstr "Mesto glavnog prozora na Y osi."
-#: ../lib/mono-addins/Mono.Addins.Gui/Mono.Addins.Gui/AddinInfoDialog.cs:71
-msgid "Extension Dependencies:"
-msgstr "Zavisnosti proširenja:"
+#: ../f-spot.schemas.in.h:44
+msgid "Y position of the photo viewer window."
+msgstr "Mesto prozora za prikaz slika na Y osi."
-#: ../lib/mono-addins/Mono.Addins.Gui/Mono.Addins.Gui/AddinInstallDialog.cs:97
-msgid "All registered repositories"
-msgstr "Sva registrovana skladišta"
-
-#: ../lib/mono-addins/Mono.Addins.Gui/Mono.Addins.Gui/AddinInstallDialog.cs:184
-msgid "Are you sure you want to cancel the installation?"
-msgstr "Da li sigurno želite da prekinete dodavanje?"
-
-#: ../lib/mono-addins/Mono.Addins.Gui/Mono.Addins.Gui/AddinInstallDialog.cs:308
-msgid "The following packages will be uninstalled:"
-msgstr "Sledeći paketi če biti uklonjeni:"
-
-#: ../lib/mono-addins/Mono.Addins.Gui/Mono.Addins.Gui/AddinInstallDialog.cs:313
+#: ../f-spot.schemas.in.h:45
+#| msgid ""
+#| "<small><i>You can choose how to display transparent parts in images. This "
+#| "option has no effect on photos, but setting this as check pattern or "
+#| "custom color could be usefull when viewing icons or other artworks with "
+#| "transparent parts.</i></small>"
msgid ""
-"There are other extensions that depend on the previous ones which will also "
-"be uninstalled:"
-msgstr "Neka proširenja zavise od prethodnih koja će takođe biti ukonjena:"
-
-#: ../lib/mono-addins/Mono.Addins.Gui/Mono.Addins.Gui/AddinInstallDialog.cs:384
-msgid ""
-"The selected extensions can't be installed because there are dependency "
-"conflicts."
+"You can choose how to display transparent parts in images. This option has "
+"no effect on photos but setting this value to CHECK_PATTERN or CUSTOM_COLOR "
+"could be useful when viewing icons or other artwork with transparent parts."
msgstr ""
-"Izabrana proširenja ne mogu biti dodata zbog postojanja konflikta "
-"međuzavisnostima."
-
-#: ../lib/mono-addins/Mono.Addins.Gui/Mono.Addins.Gui/AddinInstallDialog.cs:398
-msgid "The following packages will be installed:"
-msgstr "Sledeći paketi će biti dodati:"
-
-#: ../lib/mono-addins/Mono.Addins.Gui/Mono.Addins.Gui/AddinInstallDialog.cs:402
-msgid " (in user directory)"
-msgstr " (u korisničkom direktorijumu)"
-
-#: ../lib/mono-addins/Mono.Addins.Gui/Mono.Addins.Gui/AddinInstallDialog.cs:408
-msgid "The following packages need to be uninstalled:"
-msgstr "Potrebno je ukloniti sledeće pakete:"
-
-#: ../lib/mono-addins/Mono.Addins.Gui/Mono.Addins.Gui/AddinInstallDialog.cs:416
-msgid "The following dependencies could not be resolved:"
-msgstr "Nije moguće rešiti sledeće zavisnosti:"
-
-#: ../lib/mono-addins/Mono.Addins.Gui/Mono.Addins.Gui/AddinInstallDialog.cs:441
-msgid "The installation has been successfully completed."
-msgstr "Dodavanje paketa je uspešno završeno."
-
-#: ../lib/mono-addins/Mono.Addins.Gui/Mono.Addins.Gui/AddinInstallDialog.cs:442
-msgid "The installation failed!"
-msgstr "Dodavanje nije uspelo!"
-
-#: ../lib/mono-addins/Mono.Addins.Gui/Mono.Addins.Gui/AddinInstallDialog.cs:443
-msgid "The installation has completed with warnings."
-msgstr "Dodavanje je završeno uz upozorenja."
-
-#: ../lib/mono-addins/Mono.Addins.Gui/Mono.Addins.Gui/AddinInstallDialog.cs:446
-msgid "The uninstallation has been successfully completed."
-msgstr "Uklanjanje je uzpešno završeno."
-
-#: ../lib/mono-addins/Mono.Addins.Gui/Mono.Addins.Gui/AddinInstallDialog.cs:447
-msgid "The uninstallation failed!"
-msgstr "Uklanjanje nije uspelo!"
-
-#: ../lib/mono-addins/Mono.Addins.Gui/Mono.Addins.Gui/AddinInstallDialog.cs:448
-msgid "The uninstallation has completed with warnings."
-msgstr "Uklanjanje je završeno uz upozorenja."
-
-#: ../lib/mono-addins/Mono.Addins.Gui/Mono.Addins.Gui/AddinInstallDialog.cs:616
-msgid "Repository"
-msgstr "Skladište"
-
-#: ../lib/mono-addins/Mono.Addins.Gui/Mono.Addins.Gui/AddinInstaller.cs:16
-msgid "Installation cancelled"
-msgstr "Dodavanje je prekinuto"
-
-#: ../lib/mono-addins/Mono.Addins.Gui/Mono.Addins.Gui/AddinInstallerDialog.cs:159
-msgid "Some of the required extensions were not found"
-msgstr "Neka od potrebnih proširenja nisu nađena"
-
-#: ../lib/mono-addins/Mono.Addins.Gui/Mono.Addins.Gui/AddinInstallerDialog.cs:171
-msgid "Installation failed"
-msgstr "Dodavanje nije uspelo"
-
-#: ../lib/mono-addins/Mono.Addins.Gui/Mono.Addins.Gui/AddinTreeWidget.cs:91
-msgid "Extension"
-msgstr "Proširenje"
-
-#: ../lib/mono-addins/Mono.Addins.Gui/Mono.Addins.Gui/AddinTreeWidget.cs:112
-#: ../src/Widgets/InfoBox.cs:214
-msgid "Version"
-msgstr "Izdanje"
-
-#: ../lib/mono-addins/Mono.Addins.Gui/Mono.Addins.Gui/AddinTreeWidget.cs:168
-msgid "Other"
-msgstr "Ostalo"
-
-#: ../lib/mono-addins/Mono.Addins.Gui/Mono.Addins.Gui/ManageSitesDialog.cs:52
-msgid "Url"
-msgstr "Adresa"
-
-#: ../lib/mono-addins/Mono.Addins.Gui/Mono.Addins.Gui/Services.cs:61
-#: ../lib/mono-addins/Mono.Addins.Gui/Mono.Addins.Gui/Services.cs:70
-#, csharp-format
-msgid "Exception occurred: {0}"
-msgstr "Javio se izuzetak: {0}"
-
-#: ../lib/mono-addins/Mono.Addins/Mono.Addins/AddinSessionService.cs:154
-msgid "Disabled extensions can't be loaded."
-msgstr "Onemogućena proširenja ne mogu biti učitana."
-
-#: ../lib/mono-addins/Mono.Addins/Mono.Addins/AddinSessionService.cs:179
-#, csharp-format
-msgid "Loading {0} extension"
-msgstr "Učitavam {0} proširenje"
-
-#: ../lib/mono-addins/Mono.Addins/Mono.Addins/AddinSessionService.cs:265
-#, csharp-format
-msgid "The required extension '{0}' is disabled."
-msgstr "Zahtevano proširenje „{0}“ je onemogućeno."
-
-#: ../lib/mono-addins/Mono.Addins/Mono.Addins/AddinSessionService.cs:267
-#, csharp-format
-msgid "The required extension '{0}' is not installed."
-msgstr "Zahtevano proširenje „{0}“ nije dodato."
+"Možete da izaberete kako da se prikazuju providni delovi slika. Ova opcija "
+"nema efekta na fotografije, ali postavljanje na „CHECK_PATTERN“ (šahovski "
+"šablon) ili „CUSTOM_COLOR“ (proizvoljna boja) može biti korisno pri pregledu "
+"ikonica ili drugih radova sa providnim delovima."
-#: ../lib/mono-addins/Mono.Addins/Mono.Addins.Description/AssemblyDependency.cs:79
-#, csharp-format
-msgid "(provided by {0})"
-msgstr "(obezbedio {0})"
-
-#: ../src/CameraFileSelectionDialog.cs:76
-msgid "Preview"
-msgstr "Prikaz"
-
-#: ../src/CameraFileSelectionDialog.cs:78
-msgid "Path"
-msgstr "Putanja"
-
-#: ../src/CameraFileSelectionDialog.cs:80 ../src/f-spot.glade.h:46
-msgid "File"
-msgstr "Datoteka"
-
-#: ../src/CameraFileSelectionDialog.cs:102
-msgid "Select Tag"
-msgstr "Izaberi oznaku"
-
-#: ../src/CameraFileSelectionDialog.cs:138
-msgid "Downloading Previews"
-msgstr "Preuzimam preglede"
-
-#: ../src/CameraFileSelectionDialog.cs:148
-#, csharp-format
-msgid "Downloading Preview of {0}"
-msgstr "Preuzimam pregled za {0}"
-
-#: ../src/CameraFileSelectionDialog.cs:220
-#, csharp-format
-msgid "Copying file {0} of {1}"
-msgstr "Umnožavam datoteku {0} od {1}"
-
-#: ../src/CameraFileSelectionDialog.cs:235
-msgid "Error transferring file"
-msgstr "Greška pri prebacivanju datoteke"
-
-#: ../src/CameraFileSelectionDialog.cs:244
-msgid "Done Copying Files"
-msgstr "Gotovo umnožavanje datoteka"
-
-#: ../src/CameraFileSelectionDialog.cs:246
-msgid "Download Complete"
-msgstr "Preuzimanje gotovo"
-
-#: ../src/CameraFileSelectionDialog.cs:271
-#, csharp-format
-msgid "Transferring \"{0}\" from camera"
-msgstr "Prenosim „{0}“ sa aparata"
+#: ../lib/libfspot/f-jpeg-utils.c:441 ../src/RotateCommand.cs:211
+msgid "File not found"
+msgstr "Datoteka nije nađena"
-#: ../src/CameraSelectionDialog.cs:29 ../src/Widgets/InfoBox.cs:230
-msgid "Camera"
-msgstr "Aparat"
+#: ../lib/libfspot/f-jpeg-utils.c:464
+#, c-format
+msgid "Unknown transform type %d"
+msgstr "Nepoznata vrsta transformacije %d"
-#: ../src/CameraSelectionDialog.cs:30
-msgid "Port"
-msgstr "Priključak"
+#: ../lib/libfspot/f-jpeg-utils.c:472
+msgid "Operation failed"
+msgstr "Propala operacija"
-#: ../src/Core.cs:203
+#: ../src/Core/App.cs:274
#, csharp-format
msgid "No photos matching {0} found"
msgstr "Nisu nađene fotografije za {0}"
-#: ../src/Core.cs:204
+#: ../src/Core/App.cs:275
#, csharp-format
msgid ""
"The tag \"{0}\" is not applied to any photos. Try adding\n"
@@ -1717,11 +1665,11 @@ msgstr ""
"da dodate oznaku nekim fotografijama ili da izaberite drugu\n"
"oznaku iz postavki F-broja."
-#: ../src/Core.cs:208
+#: ../src/Core/App.cs:279
msgid "Search returned no results"
msgstr "Pretraga nije dala rezultat"
-#: ../src/Core.cs:209
+#: ../src/Core/App.cs:280
msgid ""
"The tag F-Spot is looking for does not exist. Try\n"
"selecting a different tag in the F-Spot preference\n"
@@ -1731,36 +1679,32 @@ msgstr ""
"da izaberete drugu oznaku u postavkama F-broja."
#. Note for translators: Reparented is a picture becoming a version of another one
-#: ../src/Core/Photo.cs:473
+#: ../src/Core/Photo.cs:362
msgid "Reparented"
msgstr "Pridružena slici"
-#: ../src/Core/Photo.cs:473
-#, csharp-format
-msgid "Reparented ({0})"
-msgstr "Pridruženih slika ({0})"
-
-#: ../src/Core/Photo.cs:492
+#: ../src/Core/Photo.cs:378
#, csharp-format
msgid "Modified"
msgid_plural "Modified ({0})"
msgstr[0] "Izmenjena ({0})"
msgstr[1] "Izmenjene ({0})"
msgstr[2] "Izmenjenih ({0})"
+msgstr[3] "Izmenjena ({0})"
-#: ../src/Core/Photo.cs:511
+#: ../src/Core/Photo.cs:401
#, csharp-format
msgid "Modified in {1}"
msgstr "Izmenjena u {1}"
-#: ../src/Core/Photo.cs:511
+#: ../src/Core/Photo.cs:401
#, csharp-format
msgid "Modified in {1} ({0})"
msgstr "Izmenjena u {1} ({0})"
#. Note that the original version is never stored in the photo_versions table in the
#. database.
-#: ../src/Core/Photo.cs:666 ../src/f-spot.glade.h:61
+#: ../src/Core/Photo.cs:571 ../src/f-spot.glade.h:39
msgid "Original"
msgstr "Original"
@@ -1776,43 +1720,43 @@ msgstr "Podesi boje"
msgid "Adjust"
msgstr "Podesi"
-#: ../src/Editors/CropEditor.cs:35
+#: ../src/Editors/CropEditor.cs:36
msgid "4 x 3 (Book)"
msgstr "10 x 7,5 (knjiga)"
-#: ../src/Editors/CropEditor.cs:36
+#: ../src/Editors/CropEditor.cs:37
msgid "4 x 6 (Postcard)"
msgstr "10 x 15 (razglednica)"
-#: ../src/Editors/CropEditor.cs:37
+#: ../src/Editors/CropEditor.cs:38
msgid "5 x 7 (L, 2L)"
msgstr "12,5 x 17,5 (L, 2L)"
-#: ../src/Editors/CropEditor.cs:38
+#: ../src/Editors/CropEditor.cs:39
msgid "8 x 10"
msgstr "20 x 25"
-#: ../src/Editors/CropEditor.cs:39
+#: ../src/Editors/CropEditor.cs:40
msgid "Square"
msgstr "Kvadriraj"
-#: ../src/Editors/CropEditor.cs:42
+#: ../src/Editors/CropEditor.cs:43
msgid "Crop"
msgstr "Iseci"
-#: ../src/Editors/CropEditor.cs:73
+#: ../src/Editors/CropEditor.cs:74
msgid "Select the area that needs cropping."
msgstr "Izaberite područje za odsecanje."
-#: ../src/Editors/CropEditor.cs:98
+#: ../src/Editors/CropEditor.cs:99
msgid "No Constraint"
msgstr "Bez ograničenja"
-#: ../src/Editors/CropEditor.cs:99
+#: ../src/Editors/CropEditor.cs:100
msgid "Same as photo"
msgstr "Kao na fotografiji"
-#: ../src/Editors/CropEditor.cs:104
+#: ../src/Editors/CropEditor.cs:105
msgid "Custom Ratios..."
msgstr "Proizvoljna razmera..."
@@ -1836,36 +1780,23 @@ msgstr "Izaberite oči koje želite da ispravite."
msgid "Sepia Tone"
msgstr "Braon ton"
-#: ../src/Editors/SoftFocusEditor.cs:28
+#: ../src/Editors/SoftFocusEditor.cs:32
msgid "Soft Focus"
msgstr "Blagi fokus"
-#: ../src/Editors/TiltEditor.cs:28
+#: ../src/Editors/TiltEditor.cs:30
msgid "Straighten"
msgstr "Ispravljanje"
-# bug: uvezi od, uvezi sa
-#: ../src/FileImportBackend.cs:288
-msgid "Import error"
-msgstr "Greška pri uvozu:"
-
-#: ../src/FileImportBackend.cs:289
-#, csharp-format
-msgid "Error importing {0}{2}{2}{1}"
-msgstr "Greška pri uvozu {0}{2}{2}{1}"
-
#: ../src/Filters/ResizeFilter.cs:70 ../src/Filters/SharpFilter.cs:52
#, csharp-format
msgid "No way to save files of type \"{0}\""
msgstr "Ne postoji način da sačuvam datoteke tipa „{0}“"
-#: ../src/FormClient.cs:295
-msgid "Unhandled exception"
-msgstr "Nerešiv izuzetak"
-
#: ../src/FSpot.addin.xml.h:1
-msgid "Copy Photo Locat_ion"
-msgstr "Umnoži _putanju slike"
+#| msgid "Copy Photo Locat_ion"
+msgid "Copy Photo"
+msgstr "Umnoži sliku"
#: ../src/FSpot.addin.xml.h:2
msgid "Export to"
@@ -1875,17 +1806,17 @@ msgstr "Izvezi u"
msgid "Open _With"
msgstr "Otvori _pomoću"
-#: ../src/FSpot.addin.xml.h:4 ../src/ui/main_window.ui.h:15
+#: ../src/FSpot.addin.xml.h:4 ../src/ui/main_window.ui.h:16
msgid "Rem_ove Tag"
msgstr "U_kloni oznaku"
-#: ../src/FSpot.addin.xml.h:5 ../src/f-spot.glade.h:68
-#: ../src/SingleView.cs:453 ../src/ui/main_window.ui.h:16
+#: ../src/FSpot.addin.xml.h:5 ../src/f-spot.glade.h:44
+#: ../src/SingleView.cs:425 ../src/ui/main_window.ui.h:17
msgid "Rotate _Left"
msgstr "Rotiraj _levo"
-#: ../src/FSpot.addin.xml.h:6 ../src/f-spot.glade.h:69
-#: ../src/SingleView.cs:454 ../src/ui/main_window.ui.h:17
+#: ../src/FSpot.addin.xml.h:6 ../src/f-spot.glade.h:45
+#: ../src/SingleView.cs:426 ../src/ui/main_window.ui.h:18
msgid "Rotate _Right"
msgstr "Rotiraj _desno"
@@ -1893,75 +1824,63 @@ msgstr "Rotiraj _desno"
msgid "Tools"
msgstr "Alati"
-#: ../src/FSpot.addin.xml.h:8 ../src/ui/main_window.ui.h:32
-msgid "_Attach Tag"
-msgstr "_Dodaj oznaku"
-
-#: ../src/FSpot.addin.xml.h:9 ../src/ui/main_window.ui.h:41
+#: ../src/FSpot.addin.xml.h:8 ../src/ui/main_window.ui.h:42
msgid "_Delete From Drive"
msgstr "_Ukloni sa diska"
-#: ../src/FSpot.addin.xml.h:10 ../src/ui/main_window.ui.h:59
+#: ../src/FSpot.addin.xml.h:9 ../src/ui/main_window.ui.h:61
msgid "_Remove From Catalog"
msgstr "Ukloni iz k_ataloga"
#: ../src/f-spot.glade.h:1
-msgid " "
-msgstr " "
-
-#: ../src/f-spot.glade.h:2
msgid "1024 px"
msgstr "1024 px"
-#: ../src/f-spot.glade.h:3
+#: ../src/f-spot.glade.h:2
msgid "320 px"
msgstr "320 px"
-#: ../src/f-spot.glade.h:4
+#: ../src/f-spot.glade.h:3
msgid "480 px"
msgstr "480 px"
-#: ../src/f-spot.glade.h:5
+#: ../src/f-spot.glade.h:4
msgid "640 px"
msgstr "640 px"
-#: ../src/f-spot.glade.h:6
+#: ../src/f-spot.glade.h:5
msgid "800 px"
msgstr "800 px"
-#: ../src/f-spot.glade.h:7
-msgid "<b></b>"
-msgstr "<b></b>"
-
-#: ../src/f-spot.glade.h:10
+#: ../src/f-spot.glade.h:6
msgid "<b>Co_rrections</b>"
msgstr "<b>I_spravke</b>"
-#: ../src/f-spot.glade.h:13
+#: ../src/f-spot.glade.h:7
msgid "<b>Image Interpolation</b>"
msgstr "<b>Interpolacija slike</b>"
-#: ../src/f-spot.glade.h:15
+#: ../src/f-spot.glade.h:9
msgid "<b>Size</b>"
msgstr "<b>Veličina</b>"
-#: ../src/f-spot.glade.h:17
+#: ../src/f-spot.glade.h:11
msgid "<b>Summary</b>"
msgstr "<b>Suma</b>"
-#: ../src/f-spot.glade.h:18
+#: ../src/f-spot.glade.h:12
msgid "<b>Transparent Parts</b>"
msgstr "<b>Providni delovi</b>"
-#: ../src/f-spot.glade.h:19
+#: ../src/f-spot.glade.h:13
msgid "<b>View all pictures imported</b>"
msgstr "<b>Pregledaj sve uvezene slike</b>"
-#: ../src/f-spot.glade.h:20
+#: ../src/f-spot.glade.h:14
msgid "<b>_White Balance</b>"
msgstr "<b>_Blans belog</b>"
-#: ../src/f-spot.glade.h:21
+#: ../src/f-spot.glade.h:15
msgid ""
"<small><i>Enable this to allow interpolation on zoomed images. You shouldn't "
"disable this for viewing photos, but disabling the interpolation could be "
@@ -1971,7 +1890,7 @@ msgstr ""
"Ne biste trebali da isključite ovu opciju za pregled fotografija, ali ona "
"može biti korisna kod ikonica.</i></small>"
-#: ../src/f-spot.glade.h:22
+#: ../src/f-spot.glade.h:16
msgid ""
"<small><i>You can choose how to display transparent parts in images. This "
"option has no effect on photos, but setting this as check pattern or custom "
@@ -1983,210 +1902,141 @@ msgstr ""
"proizvoljnu boju može biti korisno pri pregledu ikonica ili drugih radova sa "
"providnim delovima.</i></small>"
-#: ../src/f-spot.glade.h:23
+#: ../src/f-spot.glade.h:17
msgid "As _background"
msgstr "Postavi za po_zadinu"
-#: ../src/f-spot.glade.h:24
+#: ../src/f-spot.glade.h:18
msgid "As _custom color: "
msgstr "Kao proi_zvoljna boja: "
-#: ../src/f-spot.glade.h:25
+#: ../src/f-spot.glade.h:19
msgid "As check _pattern"
msgstr "Kao _šahovski šablon"
-#: ../src/f-spot.glade.h:26
-msgid "Attach Tags:"
-msgstr "Dodaj oznake:"
-
-#: ../src/f-spot.glade.h:27
-msgid "Attach tag:"
-msgstr "Dodaj oznaku:"
-
-#: ../src/f-spot.glade.h:29
-msgid "CD"
-msgstr "CD"
-
-#: ../src/f-spot.glade.h:30
+#: ../src/f-spot.glade.h:21
msgid "C_ontrast:"
msgstr "_Kontrast:"
-#: ../src/f-spot.glade.h:31
-msgid "Camera Selection"
-msgstr "Izbor aparata"
-
-#: ../src/f-spot.glade.h:32
-msgid "Copy files to the Photos folder"
-msgstr "Ubaci datoteke u direktorijum sa Foto albumom"
+#: ../src/f-spot.glade.h:22
+#| msgid "_Create"
+msgid "C_reate"
+msgstr "_Napravi"
-#: ../src/f-spot.glade.h:33
+#: ../src/f-spot.glade.h:23
msgid "Create Mail"
msgstr "Napravi e-pismo"
-#: ../src/f-spot.glade.h:34
+#: ../src/f-spot.glade.h:24
msgid "Create _icon for this tag when first used"
msgstr "Napravi _ikonicu oznake kad je dodam na sliku"
-#: ../src/f-spot.glade.h:35
+#: ../src/f-spot.glade.h:25
msgid "Create a mail with the selected photos (possibly resized) attached"
msgstr ""
"Napravi e-pismo sa prilogom od izabranih fotografija (po mogućstvu smanjenih)"
-#: ../src/f-spot.glade.h:36
-msgid "Detect duplicates"
-msgstr "Nađi duplikate"
-
-#: ../src/f-spot.glade.h:37
+#: ../src/f-spot.glade.h:26
msgid "Display File _Names"
msgstr "Prikaži _imena datoteka"
-#: ../src/f-spot.glade.h:38
+#: ../src/f-spot.glade.h:27
msgid "Display only those photos that were imported in specified Rolls."
msgstr "Prikaži samo one fotografije koje su uvezene u određenom uvoženju."
-#: ../src/f-spot.glade.h:39
+#: ../src/f-spot.glade.h:28
msgid "Do not send a mail"
msgstr "Ne šalji e-poštu"
-#: ../src/f-spot.glade.h:40
-msgid "E-_Mail:"
-msgstr "_E-pošta:"
-
-#: ../src/f-spot.glade.h:41
-msgid "E_xport titles and comments"
-msgstr "_Izvezi naslove i primedbe"
-
-#: ../src/f-spot.glade.h:42
+#: ../src/f-spot.glade.h:29
msgid "Estimated new size"
msgstr "Procenjena nova veličina"
-#: ../src/f-spot.glade.h:44
+#: ../src/f-spot.glade.h:30
msgid "Extra large"
msgstr "Ekstra veliko"
-#: ../src/f-spot.glade.h:45
+#: ../src/f-spot.glade.h:31
msgid "F-Spot View"
msgstr "F-broj pregled"
-#: ../src/f-spot.glade.h:47
+#: ../src/f-spot.glade.h:32
msgid "Filter on selected rolls"
msgstr "Filtriraj izabrana uvoženja"
-#: ../src/f-spot.glade.h:48
-msgid "G_allery:"
-msgstr "_Galerija:"
-
-#: ../src/f-spot.glade.h:49
-msgid "Gallery"
-msgstr "Galerija"
-
-#: ../src/f-spot.glade.h:50 ../src/ImportCommand.cs:547
-#: ../src/MainWindow.cs:267
-msgid "Import"
-msgstr "Uvezi"
-
-#. Translators: this string means 'source of import'
-#: ../src/f-spot.glade.h:52
-msgid "Import Source:"
-msgstr "Izvor uvoza:"
-
-#: ../src/f-spot.glade.h:53
-msgid "Include subfolders"
-msgstr "Uključi poddirektorijume."
-
-#: ../src/f-spot.glade.h:54
+#: ../src/f-spot.glade.h:33
msgid "Large"
msgstr "Velika"
-#: ../src/f-spot.glade.h:55
+#: ../src/f-spot.glade.h:34
msgid "Manage your custom selection ratios"
msgstr "Uredite proizvoljne odnose izbora"
-#: ../src/f-spot.glade.h:56
+#: ../src/f-spot.glade.h:35
msgid "Medium"
msgstr "Srednje"
-#: ../src/f-spot.glade.h:58
+#: ../src/f-spot.glade.h:36
msgid "Number of photos in selected rolls:"
msgstr "Broj fotografija u izabranim uvoženjima:"
-#: ../src/f-spot.glade.h:59
+#: ../src/f-spot.glade.h:37
msgid "Number of pictures"
msgstr "Broj slika"
-#: ../src/f-spot.glade.h:60
+#: ../src/f-spot.glade.h:38
msgid "Open _Folder..."
msgstr "Otvori _fasciklu..."
-#: ../src/f-spot.glade.h:62
+#: ../src/f-spot.glade.h:40
msgid "Original size (possible very large file size)"
msgstr "Originalna veličina (moguća ogromna veličina datoteke)"
-#: ../src/f-spot.glade.h:63 ../src/UI.Dialog/ui/EditTagDialog.ui.h:4
+#: ../src/f-spot.glade.h:41 ../src/UI.Dialog/ui/EditTagDialog.ui.h:4
msgid "P_arent Tag:"
msgstr "_Roditeljska oznaka"
-#: ../src/f-spot.glade.h:64
-msgid "Pause"
-msgstr "Pauza"
-
-#: ../src/f-spot.glade.h:65
+#: ../src/f-spot.glade.h:42
msgid "Preferences"
msgstr "Postavke"
-#: ../src/f-spot.glade.h:66 ../src/ItemAction.cs:123
-msgid "Previous"
-msgstr "Prethodna"
-
-#: ../src/f-spot.glade.h:67
+#: ../src/f-spot.glade.h:43
msgid "Repair"
msgstr "Popravi"
-#: ../src/f-spot.glade.h:70
-msgid "Select Photos to Copy From Camera..."
-msgstr "Izaberite fotografije za prebacivanje sa aparata..."
-
-#: ../src/f-spot.glade.h:71
+#: ../src/f-spot.glade.h:46
msgid "Select a Tag..."
msgstr "Izaberite oznaku..."
-#: ../src/f-spot.glade.h:72
-msgid "Select the camera from which you want to transfer files"
-msgstr "Izaberite aparat sa kojeg želite da prebacite datoteke."
-
-#: ../src/f-spot.glade.h:73
-msgid "Selected Camera: "
-msgstr "Izabrani aparat:"
-
-#: ../src/f-spot.glade.h:74
+#: ../src/f-spot.glade.h:47
msgid "Selection Constraints"
msgstr "Ograničenja izbora"
-#: ../src/f-spot.glade.h:75 ../src/ui/main_window.ui.h:21
+#: ../src/f-spot.glade.h:48 ../src/ui/main_window.ui.h:22
msgid "Set as _Background"
msgstr "Postavi za po_zadinu"
-#: ../src/f-spot.glade.h:76
+#: ../src/f-spot.glade.h:49
msgid "Show all photos."
msgstr "Prikaži sve fotografije"
-#: ../src/f-spot.glade.h:77
+#: ../src/f-spot.glade.h:50
msgid "Show or hide the side pane"
msgstr "Prikaži ili sakrij bočnu površ"
-#: ../src/f-spot.glade.h:78
+#: ../src/f-spot.glade.h:51
msgid "Show or hide the toolbar"
msgstr "Prikaži ili sakrij alatnicu"
-#: ../src/f-spot.glade.h:79
+#: ../src/f-spot.glade.h:52
msgid "Side _pane"
msgstr "_Bočna površ"
-#: ../src/f-spot.glade.h:80
+#: ../src/f-spot.glade.h:53
msgid "Small"
msgstr "Mala"
-#: ../src/f-spot.glade.h:81
+#: ../src/f-spot.glade.h:54
msgid ""
"Specify if an original size picture should be rotated or not. Smaller sizes "
"are automatically rotated."
@@ -2194,142 +2044,105 @@ msgstr ""
"Odredi da li slika u izvornij veličini treba biti rotirana ili ne. Manje "
"veličine se same rotiraju."
-#: ../src/f-spot.glade.h:82
-msgid "Strip image _metadata"
-msgstr "Odbaci m_etapodatke slike"
-
#. Note for translators: meant as Temperature
-#: ../src/f-spot.glade.h:84
+#: ../src/f-spot.glade.h:56
msgid "Te_mp:"
msgstr "Te_mp:"
-#: ../src/f-spot.glade.h:85
+#: ../src/f-spot.glade.h:57
msgid "Tiny"
msgstr "Tanko"
-#: ../src/f-spot.glade.h:86
+#: ../src/f-spot.glade.h:58
msgid "Total original size"
msgstr "Ukupna izvorna veličina"
-#: ../src/f-spot.glade.h:87 ../src/ui/main_window.ui.h:28
+#: ../src/f-spot.glade.h:59 ../src/ui/main_window.ui.h:29
msgid "Zoom _in"
msgstr "U_većaj"
-#: ../src/f-spot.glade.h:88 ../src/ui/main_window.ui.h:29
+#: ../src/f-spot.glade.h:60 ../src/ui/main_window.ui.h:30
msgid "Zoom _out"
msgstr "U_manji"
-#: ../src/f-spot.glade.h:89 ../src/ui/main_window.ui.h:30
+#: ../src/f-spot.glade.h:61 ../src/ui/main_window.ui.h:31
msgid "Zoom in"
msgstr "Uvećava pregled slike"
-#: ../src/f-spot.glade.h:90 ../src/ui/main_window.ui.h:31
+#: ../src/f-spot.glade.h:62 ../src/ui/main_window.ui.h:32
msgid "Zoom out"
msgstr "Umanjuje pregled slike"
-#: ../src/f-spot.glade.h:91
+#: ../src/f-spot.glade.h:63
msgid "_Brightness:"
msgstr "_Osvetljenost:"
-#: ../src/f-spot.glade.h:93
+#: ../src/f-spot.glade.h:64
msgid "_Create Mail"
msgstr "Napravi _e-pismo"
-#: ../src/f-spot.glade.h:94 ../src/ui/main_window.ui.h:44
+#: ../src/f-spot.glade.h:65 ../src/ui/main_window.ui.h:45
msgid "_Edit"
msgstr "_Uređivanje"
-#: ../src/f-spot.glade.h:98
+#: ../src/f-spot.glade.h:67
msgid "_Exposure:"
msgstr "_Ekspozicija:"
-# bug: flickr
-#: ../src/f-spot.glade.h:99
-msgid "_Flickr"
-msgstr "_Flickr"
-
-#: ../src/f-spot.glade.h:100 ../src/ui/main_window.ui.h:48
+#: ../src/f-spot.glade.h:68 ../src/ui/main_window.ui.h:49
msgid "_Fullscreen"
msgstr "_Ceo ekran"
-#: ../src/f-spot.glade.h:101
-msgid "_Gallery"
-msgstr "_Galerija"
-
-#: ../src/f-spot.glade.h:102 ../src/ui/main_window.ui.h:49
+#: ../src/f-spot.glade.h:69 ../src/ui/main_window.ui.h:50
msgid "_Help"
msgstr "_Pomoć"
-#: ../src/f-spot.glade.h:103
+#: ../src/f-spot.glade.h:70
msgid "_Hue:"
msgstr "_Nijansa:"
-#: ../src/f-spot.glade.h:104
+#: ../src/f-spot.glade.h:71
msgid "_Interpolate image on zoom"
msgstr "_Interpoliši sliku pri uvećanju"
-#: ../src/f-spot.glade.h:105
+#: ../src/f-spot.glade.h:72
msgid "_New Window"
msgstr "_Novi prozor"
-#: ../src/f-spot.glade.h:106
-msgid "_Open album in browser when done uploading"
-msgstr "Otvori _album u razgledaču po završenom slanju"
-
-#: ../src/f-spot.glade.h:107
-msgid "_Open destination when done exporting"
-msgstr "Otvori _odredište po završenom izvozu."
-
-#: ../src/f-spot.glade.h:108 ../src/ui/main_window.ui.h:56
+#: ../src/f-spot.glade.h:73 ../src/ui/main_window.ui.h:58
msgid "_Photo"
msgstr "_Fotografija"
-#: ../src/f-spot.glade.h:110
+#: ../src/f-spot.glade.h:74
msgid "_Saturation:"
msgstr "_Zasićenost:"
-#: ../src/f-spot.glade.h:111
-msgid "_Scale photos to no larger than: "
-msgstr "Promeni veličinu na ne veću od:"
-
-#: ../src/f-spot.glade.h:112 ../src/ui/main_window.ui.h:67
+#: ../src/f-spot.glade.h:75 ../src/ui/main_window.ui.h:69
msgid "_Slideshow"
msgstr "Po_kretni prikaz"
-#: ../src/f-spot.glade.h:113
-msgid "_Strip metadata"
-msgstr "Od_baci metapodatke"
-
-#: ../src/f-spot.glade.h:114 ../src/UI.Dialog/ui/EditTagDialog.ui.h:6
+#: ../src/f-spot.glade.h:76 ../src/UI.Dialog/ui/EditTagDialog.ui.h:6
msgid "_Tag Name:"
msgstr "I_me oznake:"
-#: ../src/f-spot.glade.h:115
+#: ../src/f-spot.glade.h:77
msgid "_Tint:"
msgstr "_Preliv:"
-#: ../src/f-spot.glade.h:116
+#: ../src/f-spot.glade.h:78
msgid "_Toolbar"
msgstr "_Alatnica"
-#: ../src/f-spot.glade.h:117
-msgid "_URI:"
-msgstr "_Adresa:"
-
-#: ../src/f-spot.glade.h:118 ../src/ui/main_window.ui.h:75
+#: ../src/f-spot.glade.h:79 ../src/ui/main_window.ui.h:77
msgid "_View"
msgstr "P_regled"
-#: ../src/f-spot.glade.h:119
-msgid "_Virtual Filesystem"
-msgstr "_Virtuelni sistem datoteka"
-
-#: ../src/f-spot.glade.h:120 ../src/Widgets/FindBar.cs:177
+#: ../src/f-spot.glade.h:80 ../src/Widgets/FindBar.cs:177
msgid "and"
msgstr "i"
#. at, or after a date, or between dates
-#: ../src/f-spot.glade.h:122
+#: ../src/f-spot.glade.h:82
msgid ""
"at\n"
"after\n"
@@ -2339,40 +2152,36 @@ msgstr ""
"nakon\n"
"između"
-#: ../src/f-spot.glade.h:126
-msgid "x"
-msgstr "x"
-
-#: ../src/FullScreenView.cs:58
+#: ../src/FullScreenView.cs:59
msgid "Hide"
msgstr "Sakrij"
-#: ../src/FullScreenView.cs:60
+#: ../src/FullScreenView.cs:61
msgid "Hide Toolbar"
msgstr "Sakrij alatnicu"
-#: ../src/FullScreenView.cs:66
+#: ../src/FullScreenView.cs:67
msgid "Info"
msgstr "Podaci"
-#: ../src/FullScreenView.cs:68 ../src/Widgets/InfoBox.cs:200
+#: ../src/FullScreenView.cs:69 ../src/Widgets/InfoBox.cs:202
msgid "Image Information"
msgstr "Podaci o slici"
-#: ../src/FullScreenView.cs:73
+#: ../src/FullScreenView.cs:74
msgid "Exit fullscreen"
msgstr "Napusti ceo ekran"
-#: ../src/FullScreenView.cs:81 ../src/MainWindow.cs:307
-#: ../src/SingleView.cs:103
+#: ../src/FullScreenView.cs:82 ../src/MainWindow.cs:322
+#: ../src/SingleView.cs:89
msgid "Slideshow"
msgstr "Pokretni prikaz"
-#: ../src/FullScreenView.cs:82
+#: ../src/FullScreenView.cs:83
msgid "Start slideshow"
msgstr "Pusti pokretni prikaz"
-#: ../src/FullScreenView.cs:128
+#: ../src/FullScreenView.cs:129
msgid "Slide transition:"
msgstr "Prelaz slika:"
@@ -2384,35 +2193,35 @@ msgstr "Još datuma"
msgid "More"
msgstr "Još"
-#: ../src/GroupSelector.cs:517 ../src/ui/main_window.ui.h:34
+#: ../src/GroupSelector.cs:517 ../src/ui/main_window.ui.h:35
msgid "_Clear Date Range"
msgstr "_Očisti opseg datuma"
-#: ../src/Imaging/Exif.cs:228
+#: ../src/Imaging/Exif.cs:229
msgid "Image Directory"
msgstr "Kamera i programi"
-#: ../src/Imaging/Exif.cs:230
+#: ../src/Imaging/Exif.cs:231
msgid "Thumbnail Directory"
msgstr "Podaci o slici"
-#: ../src/Imaging/Exif.cs:232
+#: ../src/Imaging/Exif.cs:233
msgid "Exif Directory"
msgstr "Uslovi pri snimanju (Exif)"
-#: ../src/Imaging/Exif.cs:234
+#: ../src/Imaging/Exif.cs:235
msgid "GPS Directory"
msgstr "GPS podaci"
-#: ../src/Imaging/Exif.cs:236
+#: ../src/Imaging/Exif.cs:237
msgid "InterOperability Directory"
msgstr "Podaci o razmeni podataka"
-#: ../src/Imaging/Exif.cs:238
+#: ../src/Imaging/Exif.cs:239
msgid "Unknown Directory"
msgstr "Nepoznati direktorijum"
-#: ../src/Imaging/ImageFile.cs:113
+#: ../src/Imaging/ImageFile.cs:119
msgid "Writing to this file format is not supported"
msgstr "Nije podržan upis u ovu vrstu datoteke"
@@ -2547,43 +2356,13 @@ msgstr "Intelektualni žanr objekta"
msgid "Unknown IIM DataSet"
msgstr "Nepoznat IIM SetPodataka"
-#: ../src/ImportCommand.cs:48 ../src/SingleView.cs:359
-msgid "Select Folder"
-msgstr "Izaberite direktorijum"
-
-#: ../src/ImportCommand.cs:259
-msgid "(No Cameras Detected)"
-msgstr "(Nisu pronađeni aparati)"
-
-#: ../src/ImportCommand.cs:404
-#, csharp-format
-msgid "Loading {0} of {1}"
-msgstr "Učitavam {0} od {1}"
-
-#: ../src/ImportCommand.cs:470
-msgid "Done Loading"
-msgstr "Učitavanje završeno"
-
-#: ../src/ImportCommand.cs:684
-msgid "Directory does not exist."
-msgstr "Direktorijum ne postoji."
-
-# bug: unclear
-#: ../src/ImportCommand.cs:685
-#, csharp-format
-msgid ""
-"The directory you selected \"{0}\" does not exist. Please choose a "
-"different directory"
-msgstr ""
-"Direktorijum koji ste izabrali „{0}“ ne postoji. Izaberite neki drugi."
-
-#. Note for translators: 'Import Tags' is no command, it means 'Tags used in Import'
-#: ../src/ImportCommand.cs:739 ../src/ImportCommand.cs:741
+#: ../src/Import/ImportController.cs:408 ../src/Import/ImportController.cs:410
#: ../src/XmpTagsImporter.cs:89
-msgid "Import Tags"
+#| msgid "Import Tags"
+msgid "Imported Tags"
msgstr "Uvezene oznake"
-#: ../src/ItemAction.cs:79 ../src/MainWindow.cs:274 ../src/SingleView.cs:86
+#: ../src/ItemAction.cs:79 ../src/MainWindow.cs:289 ../src/SingleView.cs:72
msgid "Rotate Left"
msgstr "Rotiraj _ulevo"
@@ -2591,7 +2370,7 @@ msgstr "Rotiraj _ulevo"
msgid "Rotate picture left"
msgstr "Rotira sliku ulevo"
-#: ../src/ItemAction.cs:91 ../src/MainWindow.cs:278 ../src/SingleView.cs:91
+#: ../src/ItemAction.cs:91 ../src/MainWindow.cs:293 ../src/SingleView.cs:77
msgid "Rotate Right"
msgstr "Rotiraj _udesno"
@@ -2603,167 +2382,170 @@ msgstr "Rotira sliku udesno"
msgid "Next picture"
msgstr "Ide na narednu sliku"
+#: ../src/ItemAction.cs:123
+msgid "Previous"
+msgstr "Prethodna"
+
#: ../src/ItemAction.cs:124
msgid "Previous picture"
msgstr "Ide na prethodnu sliku"
-#: ../src/MainWindow.cs:269
+#: ../src/MainWindow.cs:282 ../src/UI.Dialog/ImportDialog.cs:171
+msgid "Import"
+msgstr "Uvezi"
+
+#: ../src/MainWindow.cs:284
msgid "Import new images"
msgstr "Uvezi nove slike"
-#: ../src/MainWindow.cs:285 ../src/ui/main_window.ui.h:3
+#: ../src/MainWindow.cs:300 ../src/ui/main_window.ui.h:3
msgid "Browse"
msgstr "Razgledaj"
-#: ../src/MainWindow.cs:289
+#: ../src/MainWindow.cs:304
msgid "Browse many photos simultaneously"
msgstr "Pregledaj više fotografija odjednom"
-#: ../src/MainWindow.cs:293
+#: ../src/MainWindow.cs:308
msgid "Edit Image"
msgstr "Uredi sliku"
-#: ../src/MainWindow.cs:297
+#: ../src/MainWindow.cs:312
msgid "View and edit a photo"
msgstr "Pregledaj i uredi sliku"
-#: ../src/MainWindow.cs:302 ../src/SingleView.cs:98
+#: ../src/MainWindow.cs:317 ../src/SingleView.cs:84
msgid "Fullscreen"
msgstr "Ceo ekran"
-#: ../src/MainWindow.cs:304 ../src/SingleView.cs:100
+#: ../src/MainWindow.cs:319 ../src/SingleView.cs:86
msgid "View photos fullscreen"
msgstr "Pregledaj fotografije u celom ekranu"
-#: ../src/MainWindow.cs:309 ../src/SingleView.cs:105
+#: ../src/MainWindow.cs:324 ../src/SingleView.cs:91
msgid "View photos in a slideshow"
msgstr "Pregledaj slike u pokretnom prikazu"
-#: ../src/MainWindow.cs:324
+#: ../src/MainWindow.cs:339
msgid "Previous photo"
msgstr "Prethodna slika"
# bug: no plural forms needed
-#: ../src/MainWindow.cs:329
+#: ../src/MainWindow.cs:344
msgid "Next photo"
msgstr "Sledeća slika"
-#: ../src/MainWindow.cs:1488
-msgid "No cameras detected."
-msgstr "Nisam našao nijedan aparat."
-
-#: ../src/MainWindow.cs:1489
-msgid ""
-"F-Spot was unable to find any cameras attached to this system. Double check "
-"that the camera is connected and has power"
-msgstr ""
-"F-broj nije uspeo da nađe nijedan aparat povezan na ovaj sistem. Proverite "
-"da je aparat povezan i uključen"
-
-#: ../src/MainWindow.cs:1528
-msgid "Error connecting to camera"
-msgstr "Greška pri povezivanju sa aparatom"
+#: ../src/MainWindow.cs:421
+msgid "Show _Find Bar"
+msgstr "_Prikaži liniju za pretragu"
-#: ../src/MainWindow.cs:1529
-#, csharp-format
-msgid "Received error \"{0}\" while connecting to camera"
-msgstr "Primih grešku „{0}“ pri povezivanju sa aparatom"
+#: ../src/MainWindow.cs:424
+msgid "Hide _Find Bar"
+msgstr "Sakrij liniju za _pretragu"
#. Translators, The singular case will never happen here.
-#: ../src/MainWindow.cs:1815
+#: ../src/MainWindow.cs:1740
#, csharp-format
msgid "Merge the selected tag"
msgid_plural "Merge the {0} selected tags?"
msgstr[0] "Ukloni {0} izabranu oznaku?"
msgstr[1] "Ukloni {0} izabrane oznake?"
msgstr[2] "Ukloni {0} izabranih oznaka?"
+msgstr[3] "Ukloni izabranu oznaku?"
-#: ../src/MainWindow.cs:1842
+#: ../src/MainWindow.cs:1767
msgid ""
"This operation will merge the selected tags and any sub-tags into a single "
"tag."
msgstr "Ova radnja će spojiti izabrane oznake i pod-oznake u jednu oznaku."
-#: ../src/MainWindow.cs:1844
+#: ../src/MainWindow.cs:1769
msgid "_Merge Tags"
msgstr "_Spoji oznake"
-#: ../src/MainWindow.cs:2049
+#: ../src/MainWindow.cs:1974
#, csharp-format
msgid "{0} Photo out of {1}"
msgid_plural "{0} Photos out of {1}"
msgstr[0] "Slika {0} od {1}"
msgstr[1] "Slike {0} od {1}"
msgstr[2] "Slika {0} od {1}"
+msgstr[3] "Slika {0} od {1}"
-#: ../src/MainWindow.cs:2051 ../src/SingleView.cs:495
+#: ../src/MainWindow.cs:1976 ../src/SingleView.cs:467
#, csharp-format
msgid "{0} Photo"
msgid_plural "{0} Photos"
msgstr[0] "{0} slika"
msgstr[1] "{0} slike"
msgstr[2] "{0} slika"
+msgstr[3] "Jedna slika"
-#: ../src/MainWindow.cs:2054
+#: ../src/MainWindow.cs:1979
#, csharp-format
msgid " ({0} selected)"
msgid_plural " ({0} selected)"
msgstr[0] " ({0} izabrana)"
msgstr[1] " ({0} izabrane)"
msgstr[2] " ({0} izabranih)"
+msgstr[3] " ({0} izabrana)"
-#: ../src/MainWindow.cs:2135
+#: ../src/MainWindow.cs:2060
msgid "_Ok"
msgstr "_U redu"
-#: ../src/MainWindow.cs:2136
+#: ../src/MainWindow.cs:2061
msgid "Error Deleting Picture"
msgstr "Greška pri uklanjanju slika"
-#: ../src/MainWindow.cs:2141
+#: ../src/MainWindow.cs:2066
#, csharp-format
msgid "No permission to delete the file:{1}{0}"
msgstr "Nemate ovlašženja za brisanje datoteke:{1}{0}"
-#: ../src/MainWindow.cs:2145
+#: ../src/MainWindow.cs:2070
#, csharp-format
msgid "An error of type {0} occurred while deleting the file:{2}{1}"
msgstr "Greška tipa {0} se javila pri brisanju datoteke:{2}{1}"
-#: ../src/MainWindow.cs:2177
+#: ../src/MainWindow.cs:2102
#, csharp-format
msgid "Delete the selected photo permanently?"
msgid_plural "Delete the {0} selected photos permanently?"
-msgstr[0] "Trajno obrisati {0} izabranu sliku?"
-msgstr[1] "Trajno obrisati {0} izabrane slike?"
-msgstr[2] "Trajno obrisati {0} izabranih slika?"
+msgstr[0] "Da li da obrišem {0} izabranu sliku?"
+msgstr[1] "Da li da obrišem {0} izabrane slike?"
+msgstr[2] "Da li da obrišem {0} izabranih slika?"
+msgstr[3] "Da li da obrišem izabranu sliku?"
# bug: no plural forms needed
-#: ../src/MainWindow.cs:2181
+#: ../src/MainWindow.cs:2106
msgid "This deletes all versions of the selected photo from your drive."
msgid_plural ""
"This deletes all versions of the selected photos from your drive."
-msgstr[0] "Ovo uklanja sve izabrane slike sa vašeg diska."
-msgstr[1] "Ovo uklanja sve izabrane slike sa vašeg diska."
-msgstr[2] "Ovo uklanja sve izabrane slike sa vašeg diska."
+msgstr[0] "Ovo uklanja sva izdanja izabrane slike sa vašeg diska."
+msgstr[1] "Ovo uklanja sva izdanja izabranih slika sa vašeg diska."
+msgstr[2] "Ovo uklanja sva izdanja izabranih slika sa vašeg diska."
+msgstr[3] "Ovo uklanja sva izdanja izabrane slike sa vašeg diska."
# bug: no plural forms needed
-#: ../src/MainWindow.cs:2184
+#: ../src/MainWindow.cs:2109
msgid "_Delete photo"
msgid_plural "_Delete photos"
-msgstr[0] "U_kloni slike"
+msgstr[0] "U_kloni sliku"
msgstr[1] "U_kloni slike"
msgstr[2] "U_kloni slike"
+msgstr[3] "U_kloni sliku"
-#: ../src/MainWindow.cs:2220
+#: ../src/MainWindow.cs:2145
#, csharp-format
msgid "Remove the selected photo from F-Spot?"
msgid_plural "Remove the {0} selected photos from F-Spot?"
-msgstr[0] "Ukloniti {0} izabranu sliku iz F-broja?"
-msgstr[1] "Ukloniti {0} izabrane slike iz F-broja?"
-msgstr[2] "Ukloniti {0} izabranih slika iz F-broja?"
+msgstr[0] "Da li da uklonim {0} izabranu sliku iz F-broja?"
+msgstr[1] "Da li da uklonim {0} izabrane slike iz F-broja?"
+msgstr[2] "Da li da uklonim {0} izabranih slika iz F-broja?"
+msgstr[3] "Da li da uklonim izabranu sliku iz F-broja?"
-#: ../src/MainWindow.cs:2225
+#: ../src/MainWindow.cs:2150
msgid ""
"If you remove photos from the F-Spot catalog all tag information will be "
"lost. The photos remain on your computer and can be imported into F-Spot "
@@ -2773,51 +2555,54 @@ msgstr ""
"izgubljeni. Slike će ostati na vašem računaru i mogu se ponovo uvesti u F-"
"Spot."
-#: ../src/MainWindow.cs:2226
+#: ../src/MainWindow.cs:2151
msgid "_Remove from Catalog"
msgstr "U_kloni iz kataloga"
# bug: no plural forms
-#: ../src/MainWindow.cs:2289
+#: ../src/MainWindow.cs:2220
#, csharp-format
msgid "Delete tag \"{0}\"?"
msgstr "Da uklonim oznaku „{0}“?"
-#: ../src/MainWindow.cs:2291
+#: ../src/MainWindow.cs:2222
#, csharp-format
msgid "Delete the {0} selected tags?"
msgstr "Da ukloni {0} izabrane oznake?"
-#: ../src/MainWindow.cs:2296
+#: ../src/MainWindow.cs:2227
msgid "photo"
msgid_plural "photos"
msgstr[0] "slika"
msgstr[1] "slike"
-msgstr[2] "slika"
+msgstr[2] "slike"
+msgstr[3] "slika"
-#: ../src/MainWindow.cs:2298
+#: ../src/MainWindow.cs:2229
#, csharp-format
msgid "If you delete this tag, the association with {0} {1} will be lost."
msgid_plural ""
"If you delete these tags, the association with {0} {1} will be lost."
msgstr[0] "Ukoliko uklonite oznaku, veza sa {0} {1} će biti izgubljena."
-msgstr[1] "Ukoliko uklonite oznaku, veze sa {0} {1} će biti izgubljene."
-msgstr[2] "Ukoliko uklonite oznaku, veze sa {0} {1} će biti izgubljene."
+msgstr[1] "Ukoliko uklonite oznake, veze sa {0} {1} će biti izgubljene."
+msgstr[2] "Ukoliko uklonite oznake, veze sa {0} {1} će biti izgubljene."
+msgstr[3] "Ukoliko uklonite oznaku, veza sa {0} {1} će biti izgubljena."
# bug: no plural forms
-#: ../src/MainWindow.cs:2303
+#: ../src/MainWindow.cs:2234
msgid "_Delete tag"
msgid_plural "_Delete tags"
-msgstr[0] "_Ukloni oznake"
+msgstr[0] "_Ukloni oznaku"
msgstr[1] "_Ukloni oznake"
msgstr[2] "_Ukloni oznake"
+msgstr[3] "_Ukloni oznaku"
#. A Category is not empty. Can not delete it.
-#: ../src/MainWindow.cs:2317
+#: ../src/MainWindow.cs:2248
msgid "Tag is not empty"
msgstr "Oznaka nije prazna"
-#: ../src/MainWindow.cs:2318
+#: ../src/MainWindow.cs:2249
#, csharp-format
msgid ""
"Can not delete tags that have tags within them. Please delete tags under "
@@ -2826,44 +2611,49 @@ msgstr ""
"Ne mogu da obrišem oznake koje imaju oznake unutar sebe. Obrišite najpre "
"oznake ispod {0}"
-#: ../src/MainWindow.cs:2750
+#: ../src/MainWindow.cs:2692
msgid "Rotate selected photo left"
msgid_plural "Rotate selected photos left"
msgstr[0] "Rotiraj izabranu sliku ulevo"
-msgstr[1] "Rotiraj izabrane sliku ulevo"
-msgstr[2] "Rotiraj izabrane sliku ulevo"
+msgstr[1] "Rotiraj izabrane slike ulevo"
+msgstr[2] "Rotiraj izabrane slike ulevo"
+msgstr[3] "Rotiraj izabranu sliku ulevo"
-#: ../src/MainWindow.cs:2763
+#: ../src/MainWindow.cs:2705
msgid "Rotate selected photo right"
msgid_plural "Rotate selected photos right"
msgstr[0] "Rotiraj izabranu sliku udesno"
-msgstr[1] "Rotiraj izabrane sliku udesno"
-msgstr[2] "Rotiraj izabrane sliku udesno"
+msgstr[1] "Rotiraj izabrane slike udesno"
+msgstr[2] "Rotiraj izabrane slike udesno"
+msgstr[3] "Rotiraj izabranu sliku udesno"
-#: ../src/MainWindow.cs:2774
+#: ../src/MainWindow.cs:2716
#, csharp-format
msgid "Find _Selected Tag"
msgid_plural "Find _Selected Tags"
msgstr[0] "Nađi izabranu oznaku"
msgstr[1] "Nađi izabrane oznake"
msgstr[2] "Nađi izabrane oznake"
+msgstr[3] "Nađi izabranu oznaku"
-#: ../src/MainWindow.cs:2778
+#: ../src/MainWindow.cs:2720
#, csharp-format
msgid "Find Selected Tag _With"
msgid_plural "Find Selected Tags _With"
msgstr[0] "Nađi izabranu oznaku sa"
msgstr[1] "Nađi izabrane oznake sa"
msgstr[2] "Nađi izabrane oznake sa"
+msgstr[3] "Nađi izabranu oznaku sa"
-#: ../src/MainWindow.cs:2819
+#: ../src/MainWindow.cs:2761
msgid "Create New Version?"
msgid_plural "Create New Versions?"
msgstr[0] "Da napravim novo izdanje?"
msgstr[1] "Da napravim nova izdanja?"
msgstr[2] "Da napravim nova izdanja?"
+msgstr[3] "Da napravim novo izdanje?"
-#: ../src/MainWindow.cs:2821
+#: ../src/MainWindow.cs:2763
#, csharp-format
msgid ""
"Before launching {1}, should F-Spot create a new version of the selected "
@@ -2875,13 +2665,16 @@ msgstr[0] ""
"Da li da F-broj napravi novo izdanje izabrane fotografije pre pokretanja {1} "
"kako bi original ostao netaknut?"
msgstr[1] ""
-"Da li da F-broj napravi novo izdanje izabranih fotografija pre pokretanja {1} "
+"Da li da F-broj napravi nova izdanja izabranih fotografija pre pokretanja {1} "
"kako bi originali ostali netaknuti?"
msgstr[2] ""
-"Da li da F-broj napravi novo izdanje izabranih fotografija pre pokretanja {1} "
+"Da li da F-broj napravi nova izdanja izabranih fotografija pre pokretanja {1} "
"kako bi original ostali netaknuti?"
+msgstr[3] ""
+"Da li da F-broj napravi novo izdanje izabrane fotografije pre pokretanja {1} "
+"kako bi original ostao netaknut?"
-#: ../src/MainWindow.cs:2843
+#: ../src/MainWindow.cs:2785
msgid "XCF version"
msgstr "XCF izdanje"
@@ -2905,94 +2698,100 @@ msgstr "Ključne reči"
msgid "Compression"
msgstr "Kompresija"
-#: ../src/MetadataStore.cs:25
+#. Translators: Planar Configuration is the label for the tiff:PlanarConfiguration tag
+#. "when Planar Configuration=1, this implies that all components must have
+#. the same BitsPerSample value; when Planar Configuration=2, different
+#. components could have different bit depths."
+#: ../src/MetadataStore.cs:29
msgid "Planar Configuration"
msgstr "Planarne postavke"
-#: ../src/MetadataStore.cs:27
+#: ../src/MetadataStore.cs:31
msgid "Orientation"
msgstr "Orjentacija"
-#: ../src/MetadataStore.cs:29
+#: ../src/MetadataStore.cs:33
msgid "Photometric Interpretation"
msgstr "Fotometrijska interpolacija"
-#: ../src/MetadataStore.cs:31
+#: ../src/MetadataStore.cs:35
msgid "Resolution Unit"
msgstr "Mera rezolucije"
-#: ../src/MetadataStore.cs:33
+#: ../src/MetadataStore.cs:37
msgid "Exposure Program"
msgstr "Program ekspozicije"
-#: ../src/MetadataStore.cs:35
+#: ../src/MetadataStore.cs:39
msgid "Metering Mode"
msgstr "Režim merenja"
-#: ../src/MetadataStore.cs:37
+#: ../src/MetadataStore.cs:41
msgid "Exposure Mode"
msgstr "Režim ekspozicije"
-#: ../src/MetadataStore.cs:39
+#: ../src/MetadataStore.cs:43
msgid "Custom Rendered"
msgstr "Proizvoljno iscrtavanje"
-#: ../src/MetadataStore.cs:41
+#: ../src/MetadataStore.cs:45
msgid "Components Configuration"
msgstr "Postavke komponenti"
-#: ../src/MetadataStore.cs:43
+#: ../src/MetadataStore.cs:47
msgid "Light Source"
msgstr "Izvor svetla"
-#: ../src/MetadataStore.cs:45
+#: ../src/MetadataStore.cs:49
msgid "Sensing Method"
msgstr "Metod očitavanja"
-#: ../src/MetadataStore.cs:47
+#: ../src/MetadataStore.cs:51
msgid "Color Space"
msgstr "Prostor boja"
-#: ../src/MetadataStore.cs:49
+#: ../src/MetadataStore.cs:53
msgid "White Balance"
msgstr "Balans belog"
-#: ../src/MetadataStore.cs:51
+#: ../src/MetadataStore.cs:55
msgid "Focal Plane Resolution Unit"
msgstr "Jedinica rezolucije žižne ravni"
-#: ../src/MetadataStore.cs:53
+#: ../src/MetadataStore.cs:57
msgid "File Source Type"
msgstr "Tip izvorne datoteke"
-#: ../src/MetadataStore.cs:55
+#: ../src/MetadataStore.cs:59
msgid "Scene Capture Type"
msgstr "Režim fotografisanja"
# Ne znam gde je ovo u???
-#: ../src/MetadataStore.cs:57
+#. Translators: Gain Control is the label for the exif:GainControl tag
+#. "This tag indicates the degree of overall image gain adjustment."
+#: ../src/MetadataStore.cs:63
msgid "Gain Control"
msgstr "Kontrola postizanja"
-#: ../src/MetadataStore.cs:59
+#: ../src/MetadataStore.cs:65
msgid "Contrast"
msgstr "Kontrast"
-#: ../src/MetadataStore.cs:61
+#: ../src/MetadataStore.cs:67
msgid "Saturation"
msgstr "Zasićenost"
-#: ../src/MetadataStore.cs:63
+#: ../src/MetadataStore.cs:69
msgid "Sharpness"
msgstr "Oštrina"
-#: ../src/MetadataStore.cs:65
+#: ../src/MetadataStore.cs:71
msgid "Scene Type"
msgstr "Vrsta scene"
#. Fixme this should really set parent menu
#. items insensitve
-#: ../src/PhotoTagMenu.cs:74
+#: ../src/PhotoTagMenu.cs:62
msgid "(No Tags)"
msgstr "(Nema oznaka)"
@@ -3012,70 +2811,76 @@ msgstr "Preimenuj izdanje"
msgid "New name:"
msgstr "Novi naziv:"
-#: ../src/PhotoVersionCommands.cs:110
-msgid "Could not create a new version"
-msgstr "Ne mogu da napravim novo izdanje"
-
-#: ../src/PhotoVersionCommands.cs:111
-#, csharp-format
-msgid "Received exception \"{0}\". Unable to create version \"{1}\""
-msgstr "Primio sam izuzetak „{0}“. Ne mogu da napravim izdanje „{1}“"
-
-#: ../src/PhotoVersionCommands.cs:138
-msgid "Really Delete?"
-msgstr "Zaista obrisati?"
-
-#: ../src/PhotoVersionCommands.cs:139
-msgid "Cancel"
-msgstr "Odustani"
-
-#: ../src/PhotoVersionCommands.cs:140
+#: ../src/PhotoVersionCommands.cs:123
msgid "Delete"
msgstr "Ukloni"
-#: ../src/PhotoVersionCommands.cs:144
+#: ../src/PhotoVersionCommands.cs:124
#, csharp-format
msgid "Really delete version \"{0}\"?"
msgstr "Zaista obrisati izdanje „{0}“?"
-#: ../src/PhotoVersionCommands.cs:154
-msgid "Could not delete a version"
-msgstr "Ne mogu da obrišem izdanje"
+#: ../src/PhotoVersionCommands.cs:125
+msgid "This removes the version and deletes the corresponding file from disk."
+msgstr "Ovo uklanja izdanje i briše odgovarajuću datoteku sa diska."
+
+#: ../src/PhotoVersionCommands.cs:170
+msgid "De_tach"
+msgstr "Raz_dvoji"
-#: ../src/PhotoVersionCommands.cs:155
+#: ../src/PhotoVersionCommands.cs:171
#, csharp-format
-msgid "Received exception \"{0}\". Unable to delete version \"{1}\""
-msgstr "Primio sam izuzetak „{0}“. Ne mogu da obrišem izdanje „{1}“"
+#| msgid "Really delete version \"{0}\"?"
+msgid "Really detach version \"{0}\" from \"{1}\"?"
+msgstr "Da zaista razdvojim izdanje „{0}“ od „{1}“?"
+
+#: ../src/PhotoVersionCommands.cs:172
+msgid ""
+"This makes the version appear as a separate photo in the library. To undo, "
+"drag the new photo back to its parent."
+msgstr ""
+"Ovim će slike biti prikazane kao različite fotografije u zbirci. Da "
+"poništite izmeni prevucite fotografiju natrag na njenu roditeljsku sliku."
+
+#: ../src/PhotoVersionCommands.cs:195
+#| msgid "Reparented"
+msgid "Re_parent"
+msgstr "Pridru_ži"
#: ../src/PhotoVersionCommands.cs:196
-msgid "Could not rename a version"
-msgstr "Ne mogu da preimenujem izdanje"
+#, csharp-format
+#| msgid "Really delete version \"{0}\"?"
+msgid "Really reparent \"{0}\" as version of \"{1}\"?"
+msgid_plural "Really reparent {2} photos as versions of \"{1}\"?"
+msgstr[0] "Da li da pridružim „{2}“ sliku kao izdanje „{1}“?"
+msgstr[1] "Da li da pridružim „{2}“ slike kao izdanje „{1}“?"
+msgstr[2] "Da li da pridružim „{2}“ slika kao izdanje „{1}“?"
+msgstr[3] "Da li da pridružim „{0}“ sliku kao izdanje „{1}“?"
+
+#: ../src/PhotoVersionCommands.cs:199
+msgid ""
+"This makes the photos appear as a single one in the library. The versions "
+"can be detached using the Photo menu."
+msgstr ""
+"Ovim će slike biti prikazane kao zasebne fotografije u zbirci. Izdanja možete "
+"razdvojiti iz menija Fotografija."
-#: ../src/PhotoVersionCommands.cs:197
+#: ../src/PhotoVersionCommands.cs:239
#, csharp-format
-msgid "Received exception \"{0}\". Unable to rename version to \"{1}\""
-msgstr "Primio sam izuzetak „{0}“. Ne mogu da preimenujem izdanje u „{1}“"
+#| msgid "Received exception \"{0}\". Unable to save photo {1}"
+msgid "Received exception \"{0}\"."
+msgstr "Primio sam izuzetak „{0}“."
-#: ../src/PhotoVersionMenu.cs:66 ../src/Widgets/InfoBox.cs:554
-#: ../src/Widgets/InfoBox.cs:556
+#: ../src/PhotoVersionMenu.cs:66 ../src/Widgets/InfoBox.cs:566
+#: ../src/Widgets/InfoBox.cs:568
msgid "(No Edits)"
msgstr "(Bez izmena)"
-#: ../src/PhotoView.cs:169 ../src/UI.Dialog/EditExceptionDialog.cs:38
-msgid "Error editing photo"
-msgstr "Greška pri izmeni slike"
-
-#: ../src/PhotoView.cs:170 ../src/Sharpener.cs:73
-#: ../src/UI.Dialog/EditExceptionDialog.cs:25
-#, csharp-format
-msgid "Received exception \"{0}\". Unable to save photo {1}"
-msgstr "Primio sam izuzetak „{0}“. Ne mogu da sačuvam sliku {1}"
-
-#: ../src/PhotoView.cs:359
+#: ../src/PhotoView.cs:339
msgid "Comment:"
msgstr "Komentar:"
-#: ../src/Preferences.cs:149
+#: ../src/Preferences.cs:152
msgid "Photos"
msgstr "Fotografije"
@@ -3113,44 +2918,37 @@ msgstr "Osveži pretragu"
msgid "No matching photos found"
msgstr "Nisu nađene fotografije"
-#: ../src/QueryWidget.cs:155
-msgid "Hide _Find Bar"
-msgstr "Sakrij liniju za _pretragu"
-
-#: ../src/QueryWidget.cs:161
-msgid "Show _Find Bar"
-msgstr "_Prikaži liniju za pretragu"
-
-#: ../src/RotateCommand.cs:96 ../src/RotateCommand.cs:111
+#: ../src/RotateCommand.cs:87 ../src/RotateCommand.cs:102
msgid "Unable to rotate this type of photo"
msgstr "Ne mogu da rotiram ovu vrstu slike"
-#: ../src/RotateCommand.cs:131
+#: ../src/RotateCommand.cs:122
msgid "Unable to rotate readonly file"
msgstr "Ne mogu da rotiram datoteke bez ovlašćenja za upis"
-#: ../src/RotateCommand.cs:198
+#: ../src/RotateCommand.cs:185
msgid "Rotating photos"
msgstr "Okrećem slike"
-#: ../src/RotateCommand.cs:209
+#: ../src/RotateCommand.cs:196
#, csharp-format
msgid "Rotating photo \"{0}\""
msgstr "Okrećem sliku „{0}“"
-#: ../src/RotateCommand.cs:222
+#: ../src/RotateCommand.cs:209
msgid "Directory not found"
msgstr "Direktorijum nije nađen"
-#: ../src/RotateCommand.cs:242
+#: ../src/RotateCommand.cs:229
#, csharp-format
msgid "Unable to rotate photo"
msgid_plural "Unable to rotate {0} photos"
msgstr[0] "Ne mogu da rotiram {0} sliku"
msgstr[1] "Ne mogu da rotiram {0} slike"
msgstr[2] "Ne mogu da rotiram {0} slika"
+msgstr[3] "Ne mogu da rotiram sliku"
-#: ../src/RotateCommand.cs:244
+#: ../src/RotateCommand.cs:231
#, csharp-format
msgid ""
"The photo could not be rotated because it is on a read only file system or "
@@ -3170,43 +2968,53 @@ msgstr[2] ""
"Ne mogu da rotiram {0} slika zato što se nalaze na sistemu datoteka koji "
"omogućava samo čitanje ili na mediju kao što je CD. Proverite ovlašćenja i "
"pokušajte ponovo."
+msgstr[3] ""
+"Ne mogu da rotiram sliku zato što se nalazi na sistemu datoteka koji "
+"omogućava samo čitanje ili na mediju kao što je CD. Proverite ovlašćenja i "
+"pokušajte ponovo."
-#: ../src/RotateCommand.cs:271
+#: ../src/RotateCommand.cs:258
#, csharp-format
msgid "Received error \"{0}\" while attempting to rotate {1}"
msgstr "Primih grešku „{0}“ pri pokušaju da rotiram {1}"
-#: ../src/RotateCommand.cs:276
+#: ../src/RotateCommand.cs:263
msgid "Error while rotating photo."
msgstr "Greška pri rotiranju slike."
-#: ../src/SendEmail.cs:240
+#: ../src/SendEmail.cs:214
msgid "Preparing email"
msgstr "Pripremam e-poštu"
-#: ../src/SendEmail.cs:292
+#: ../src/SendEmail.cs:266
#, csharp-format
msgid "Exporting picture \"{0}\""
msgstr "Izvozim sliku „{0}“"
-#: ../src/SendEmail.cs:314
+#: ../src/SendEmail.cs:288
msgid "Error processing image"
msgstr "Greška pri obradi oznake"
-#: ../src/SendEmail.cs:315
+#: ../src/SendEmail.cs:289
#, csharp-format
msgid "An error occured while processing \"{0}\": {1}"
msgstr "Javila se greška pri obradi „{0}“: {1}"
#. Send the mail :)
-#: ../src/SendEmail.cs:330
-msgid "my photos"
-msgstr "moje slike"
+#: ../src/SendEmail.cs:303
+#| msgid "Photos"
+msgid "My Photos"
+msgstr "Moje fotografije"
#: ../src/Sharpener.cs:72
msgid "Error saving sharpened photo"
msgstr "Greška pri čuvanju izoštrene slike"
+#: ../src/Sharpener.cs:73 ../src/UI.Dialog/EditExceptionDialog.cs:26
+#, csharp-format
+msgid "Received exception \"{0}\". Unable to save photo {1}"
+msgstr "Primio sam izuzetak „{0}“. Ne mogu da sačuvam sliku {1}"
+
#: ../src/Sharpener.cs:102
msgid "Sharpen"
msgstr "Izoštri"
@@ -3223,36 +3031,40 @@ msgstr "Poluprečnik:"
msgid "Threshold:"
msgstr "Prag:"
-#: ../src/SingleView.cs:88
+#: ../src/SingleView.cs:74
msgid "Rotate photo left"
msgstr "Rotiraj sliku u_levo"
-#: ../src/SingleView.cs:93
+#: ../src/SingleView.cs:79
msgid "Rotate photo right"
msgstr "Rotiraj sliku u_desno"
-#: ../src/SingleView.cs:130
+#: ../src/SingleView.cs:116
msgid "Folder"
msgstr "Fascikla"
-#: ../src/SingleView.cs:356
+#: ../src/SingleView.cs:341
msgid "Open"
msgstr "Otvori"
-#: ../src/SingleView.cs:456
+#: ../src/SingleView.cs:344
+msgid "Select Folder"
+msgstr "Izaberite direktorijum"
+
+#: ../src/SingleView.cs:428
msgid "Set as Background"
msgstr "Postavi za pozadinu"
-#: ../src/TagCommands.cs:96 ../src/TagSelectionWidget.cs:498
+#: ../src/TagCommands.cs:97 ../src/TagSelectionWidget.cs:491
#: ../src/UI.Dialog/EditTagDialog.cs:78
msgid "This name is already in use"
msgstr "Ovo ime je već u upotrebi"
-#: ../src/TagCommands.cs:144
+#: ../src/TagCommands.cs:145
msgid "Create New Tag"
msgstr "Napravi novu oznaku"
-#: ../src/TagCommands.cs:145
+#: ../src/TagCommands.cs:146
msgid "Name of New Tag:"
msgstr "Ime nove oznake:"
@@ -3263,21 +3075,24 @@ msgid_plural "Find"
msgstr[0] "_Nađi"
msgstr[1] "_Nađi"
msgstr[2] "_Nađi"
+msgstr[3] "_Nađi"
-#: ../src/TagPopup.cs:36 ../src/Widgets/TagMenu.cs:91
+#: ../src/TagPopup.cs:36 ../src/Widgets/TagMenu.cs:98
msgid "Create New Tag..."
msgstr "Napravi novu oznaku..."
#: ../src/TagPopup.cs:42
-msgid "Edit Selected Tag..."
-msgstr "Uredi izabranu oznaku..."
+#| msgid "Edit Tag"
+msgid "Edit Tag..."
+msgstr "Uredi oznaku..."
#: ../src/TagPopup.cs:46
msgid "Delete Tag"
msgid_plural "Delete Tags"
msgstr[0] "Ukloni oznaku"
msgstr[1] "Ukloni oznake"
-msgstr[2] "Ukloni oznaka"
+msgstr[2] "Ukloni oznake"
+msgstr[3] "Ukloni oznaku"
#: ../src/TagPopup.cs:52
msgid "Attach Tag to Selection"
@@ -3285,6 +3100,7 @@ msgid_plural "Attach Tags to Selection"
msgstr[0] "Dodaj oznaku na izabranu"
msgstr[1] "Dodaj oznaku na izabrane"
msgstr[2] "Dodaj oznaku na izabrane"
+msgstr[3] "Dodaj oznaku na izabranu"
#: ../src/TagPopup.cs:56
msgid "Remove Tag From Selection"
@@ -3292,6 +3108,7 @@ msgid_plural "Remove Tags From Selection"
msgstr[0] "Ukloni oznaku sa izabrane"
msgstr[1] "Ukloni oznaku sa izabranih"
msgstr[2] "Ukloni oznaku sa izabranih"
+msgstr[3] "Ukloni oznaku sa izabrane"
#: ../src/TagPopup.cs:62
msgid "Merge Tags"
@@ -3318,6 +3135,7 @@ msgid_plural "Find _With"
msgstr[0] "Nađi _sa"
msgstr[1] "Nađi _sa"
msgstr[2] "Nađi _sa"
+msgstr[3] "Nađi _sa"
#: ../src/TagQueryWidget.cs:114
msgid "All"
@@ -3332,32 +3150,32 @@ msgstr "Nije {0}"
msgid "Drag tags here to search for them"
msgstr "Prevucite ovde oznake za pretragu"
-#: ../src/TagSelectionWidget.cs:497
+#: ../src/TagSelectionWidget.cs:490
msgid "Error renaming tag"
msgstr "Greška pri preimenovanju oznake"
-#: ../src/TagStore.cs:203
+#: ../src/TagStore.cs:204
msgid "Favorites"
msgstr "Omiljene"
-#: ../src/TagStore.cs:208
+#: ../src/TagStore.cs:209
msgid "Hidden"
msgstr "Skrivene"
-#: ../src/TagStore.cs:216
+#: ../src/TagStore.cs:217
msgid "People"
msgstr "Ljudi"
-#: ../src/TagStore.cs:221
+#: ../src/TagStore.cs:222
msgid "Places"
msgstr "Mesta"
-#: ../src/TagStore.cs:226
+#: ../src/TagStore.cs:227
msgid "Events"
msgstr "Događaji"
#. The label for the root category is used in new and edit tag dialogs
-#: ../src/TagStore.cs:239 ../src/Widgets/InfoBox.cs:400
+#: ../src/TagStore.cs:240 ../src/Widgets/InfoBox.cs:410
msgid "(None)"
msgstr "(Ništa)"
@@ -3381,24 +3199,25 @@ msgstr " ili "
msgid "or"
msgstr "ili"
-#: ../src/ThumbnailCommand.cs:20
+#: ../src/ThumbnailCommand.cs:21
msgid "Updating Thumbnails"
msgstr "Ažuriram umanjene prikaze"
-#: ../src/ThumbnailCommand.cs:28
+#: ../src/ThumbnailCommand.cs:29
#, csharp-format
msgid "Updating picture \"{0}\""
msgstr "Ažuriram sliku „{0}“"
-#: ../src/UI.Dialog/AboutDialog.cs:71
+#: ../src/UI.Dialog/AboutDialog.cs:77
msgid "Photo management for GNOME"
msgstr "Uređivanje foto-albuma u Gnomu"
-#: ../src/UI.Dialog/AboutDialog.cs:72
-msgid "Copyright © 2003-2009 Novell Inc."
-msgstr "Autorsko pravo © 2003-2009 Novell Inc."
+#: ../src/UI.Dialog/AboutDialog.cs:78
+#| msgid "Copyright © 2003-2009 Novell Inc."
+msgid "Copyright © 2003-2010 Novell Inc."
+msgstr "Autorsko pravo © 2003-2010 Novell Inc."
-#: ../src/UI.Dialog/AboutDialog.cs:95
+#: ../src/UI.Dialog/AboutDialog.cs:101
msgid "translator-credits"
msgstr ""
"Danilo Šegan <danilo at prevod.org>\n"
@@ -3406,11 +3225,11 @@ msgstr ""
"\n"
"Prevod.org — prevod na srpski jezik."
-#: ../src/UI.Dialog/AboutDialog.cs:100
+#: ../src/UI.Dialog/AboutDialog.cs:106
msgid "F-Spot Website"
msgstr "F-broj veb sajt"
-#: ../src/UI.Dialog/AdjustTimeDialog.cs:112
+#: ../src/UI.Dialog/AdjustTimeDialog.cs:113
#: ../src/UI.Dialog/ui/AdjustTimeDialog.ui.h:10
#, csharp-format
msgid "Shift all photos by {0}"
@@ -3452,16 +3271,20 @@ msgstr "Prethodna nedelja (pon-ned)"
msgid "Customized Range"
msgstr "Proizvoljan opseg"
-#: ../src/UI.Dialog/EditTagIconDialog.cs:46
+#: ../src/UI.Dialog/EditExceptionDialog.cs:39
+msgid "Error editing photo"
+msgstr "Greška pri izmeni slike"
+
+#: ../src/UI.Dialog/EditTagIconDialog.cs:47
#, csharp-format
msgid "Edit Icon for Tag {0}"
msgstr "Izmeni ikonu za oznaku {0}"
-#: ../src/UI.Dialog/EditTagIconDialog.cs:68
+#: ../src/UI.Dialog/EditTagIconDialog.cs:69
msgid "Select Photo from file"
msgstr "Iaberi sliku iz datoteke"
-#: ../src/UI.Dialog/EditTagIconDialog.cs:90
+#: ../src/UI.Dialog/EditTagIconDialog.cs:91
#, csharp-format
msgid ""
"\n"
@@ -3478,16 +3301,16 @@ msgstr ""
" označenu ovom oznakom. Označite fotografiju sa „{0}“ i vratite se\n"
" ovde kako bi je iskoristili za ikonicu."
-#: ../src/UI.Dialog/EditTagIconDialog.cs:168
+#: ../src/UI.Dialog/EditTagIconDialog.cs:169
msgid "Unable to load image"
msgstr "Ne mogu da učitam sliku"
-#: ../src/UI.Dialog/EditTagIconDialog.cs:169
+#: ../src/UI.Dialog/EditTagIconDialog.cs:170
#, csharp-format
msgid "Unable to load \"{0}\" as icon for the tag"
msgstr "Ne mogu da učitam „{0}“ za ikonicu oznake"
-#: ../src/UI.Dialog/EditTagIconDialog.cs:207
+#: ../src/UI.Dialog/EditTagIconDialog.cs:208
#, csharp-format
msgid "Photo {0} of {1}"
msgstr "Slika {0} od {1}"
@@ -3504,24 +3327,54 @@ msgstr "Detalji greške"
msgid "An unhandled exception was thrown: "
msgstr "Izbečena je nerešiva greška: "
-#: ../src/UI.Dialog/PreferenceDialog.cs:53
-#: ../src/UI.Dialog/PreferenceDialog.cs:71
+#: ../src/UI.Dialog/ImportDialog.cs:15
+#| msgid "Open _Folder..."
+msgid "Choose Folder..."
+msgstr "Izaberi _fasciklu..."
+
+#: ../src/UI.Dialog/ImportDialog.cs:124
+#| msgid "Import Source:"
+msgid "Choose Import source..."
+msgstr "Izaberi izvor za uvoz..."
+
+#: ../src/UI.Dialog/ImportDialog.cs:136
+msgid "(No Cameras Detected)"
+msgstr "(Nisu pronađeni aparati)"
+
+#: ../src/UI.Dialog/ImportDialog.cs:264
+#, csharp-format
+#| msgid "Photo {0} of {1}"
+msgid "Importing Photos: {0} of {1}..."
+msgstr "Uvozim slike: {0} od {1}..."
+
+#: ../src/UI.Dialog/ImportDialog.cs:288
+#| msgid "Rotating photos"
+msgid "Importing photos..."
+msgstr "Uvozim slike..."
+
+#. TODO: Using a GtkSpinner would be nicer here.
+#: ../src/UI.Dialog/ImportDialog.cs:295
+msgid "Searching for photos... (You can already click Import to continue)"
+msgstr "Tražim fotografije (Možete kliknuti Uvezi za nastavak)"
+
+#: ../src/UI.Dialog/PreferenceDialog.cs:55
+#: ../src/UI.Dialog/PreferenceDialog.cs:78
msgid "None"
msgstr "Ništa"
-#: ../src/UI.Dialog/PreferenceDialog.cs:55
+#: ../src/UI.Dialog/PreferenceDialog.cs:57
msgid "System profile"
msgstr "Sistemski profil"
-#: ../src/UI.Dialog/PreferenceDialog.cs:84
+#: ../src/UI.Dialog/PreferenceDialog.cs:95
msgid "Standard theme"
msgstr "Standardna tema"
-#: ../src/UI.Dialog/RepairDbDialog.cs:20
+#: ../src/UI.Dialog/RepairDbDialog.cs:21
msgid "Error loading database."
msgstr "Greška pri učitavanju beze podataka"
-#: ../src/UI.Dialog/RepairDbDialog.cs:21
+#: ../src/UI.Dialog/RepairDbDialog.cs:22
#, csharp-format
msgid ""
"F-Spot encountered an error while loading the photo database. The old "
@@ -3530,15 +3383,15 @@ msgstr ""
"F-broj je naišao na grešku pri učitavanju baze. Stara baza je preseljena u {0} "
"i nova baza je napravljena."
-#: ../src/UI.Dialog/SelectionRatioDialog.cs:60
+#: ../src/UI.Dialog/SelectionRatioDialog.cs:61
msgid "Label"
msgstr "Natpis"
-#: ../src/UI.Dialog/SelectionRatioDialog.cs:64
+#: ../src/UI.Dialog/SelectionRatioDialog.cs:65
msgid "Ratio"
msgstr "Odnos"
-#: ../src/UI.Dialog/ThreadProgressDialog.cs:49
+#: ../src/UI.Dialog/ThreadProgressDialog.cs:55
msgid "Retry"
msgstr "Pokušaj ponovo"
@@ -3731,8 +3584,9 @@ msgid "By _Rating"
msgstr "Po _ocenama"
#: ../src/ui/main_window.ui.h:7
-msgid "Copy Locat_ion"
-msgstr "Umnoži _putanju slike"
+#| msgid "Crop"
+msgid "Copy"
+msgstr "Umnoži"
#: ../src/ui/main_window.ui.h:8
msgid "Create New _Tag..."
@@ -3743,190 +3597,205 @@ msgid "Create _New Version..."
msgstr "_Napravi novo izdanje..."
#: ../src/ui/main_window.ui.h:10
-msgid "F-Spot"
-msgstr "F-broj"
+#| msgid "_Delete Version"
+msgid "De_tach Version"
+msgstr "_Razdvoji izdanje"
-#: ../src/ui/main_window.ui.h:11
+#: ../src/ui/main_window.ui.h:12
msgid "Fin_d"
msgstr "_Nađi"
-#: ../src/ui/main_window.ui.h:12
+#: ../src/ui/main_window.ui.h:13
msgid "Manage _Extensions"
msgstr "Uredi p_roširenja"
-#: ../src/ui/main_window.ui.h:13
+#: ../src/ui/main_window.ui.h:14
msgid "Page Set_up..."
msgstr "Podeša_vanje strane..."
-#: ../src/ui/main_window.ui.h:14
+#: ../src/ui/main_window.ui.h:15
msgid "Re_fresh Thumbnail"
msgstr "_Osveži manji prikaz"
#: ../src/ui/main_window.ui.h:19
+msgid "Select _All"
+msgstr "Izaberi _sve"
+
+#: ../src/ui/main_window.ui.h:20
msgid "Select _None"
msgstr "Izaberi _ništa"
-#: ../src/ui/main_window.ui.h:20
+#: ../src/ui/main_window.ui.h:21
msgid "Send by _Mail..."
msgstr "P_ošalji preko e-pošte..."
-#: ../src/ui/main_window.ui.h:22
+#: ../src/ui/main_window.ui.h:23
msgid "Side_bar"
-msgstr "Bočna _linija"
+msgstr "_Bočna površ"
-#: ../src/ui/main_window.ui.h:23
+#: ../src/ui/main_window.ui.h:24
msgid "T_ags"
msgstr "_Oznake"
-#: ../src/ui/main_window.ui.h:25
+#: ../src/ui/main_window.ui.h:26
msgid "Thumbnail _elements"
msgstr "Elementi _umanjenog prikaza"
-#: ../src/ui/main_window.ui.h:26
+#: ../src/ui/main_window.ui.h:27
msgid "Too_lbar"
msgstr "_Alatnica"
-#: ../src/ui/main_window.ui.h:27
+#: ../src/ui/main_window.ui.h:28
msgid "View"
msgstr "Pregled"
#: ../src/ui/main_window.ui.h:33
+msgid "_Attach Tag"
+msgstr "_Dodaj oznaku"
+
+#: ../src/ui/main_window.ui.h:34
msgid "_Attach Tag to Selection"
msgstr "_Dodaj oznaku na izabrane"
-#: ../src/ui/main_window.ui.h:35
+#: ../src/ui/main_window.ui.h:36
msgid "_Clear Rating Filter"
msgstr "_Očisti filter ocena"
-#: ../src/ui/main_window.ui.h:36
+#: ../src/ui/main_window.ui.h:37
msgid "_Clear Roll Filter"
msgstr "_Očisti filter uvoženja"
-#: ../src/ui/main_window.ui.h:38
+#: ../src/ui/main_window.ui.h:39
msgid "_Components"
msgstr "_Delovi"
-#: ../src/ui/main_window.ui.h:39
+#: ../src/ui/main_window.ui.h:40
msgid "_Contents"
msgstr "_Sadržaj"
-#: ../src/ui/main_window.ui.h:40
+#: ../src/ui/main_window.ui.h:41
msgid "_Dates"
msgstr "_Datumi"
-#: ../src/ui/main_window.ui.h:42
+#: ../src/ui/main_window.ui.h:43
msgid "_Delete Selected Tag"
msgstr "_Ukloni izabranu oznaku"
-#: ../src/ui/main_window.ui.h:43
+#: ../src/ui/main_window.ui.h:44
msgid "_Delete Version"
msgstr "_Ukloni izdanje"
-#: ../src/ui/main_window.ui.h:45
-msgid "_Edit Selected Tag..."
-msgstr "Ure_di izabranu oznaku..."
-
#: ../src/ui/main_window.ui.h:46
+#| msgid "Edit Tag"
+msgid "_Edit Tag..."
+msgstr "_Uredi oznaku..."
+
+#: ../src/ui/main_window.ui.h:47
msgid "_Export to"
msgstr "Izvezi _u"
-#: ../src/ui/main_window.ui.h:47
+#: ../src/ui/main_window.ui.h:48
msgid "_Filmstrip"
msgstr "_Filmska traka"
-#: ../src/ui/main_window.ui.h:50
+#: ../src/ui/main_window.ui.h:51
msgid "_Hidden"
msgstr "_Sakrij"
-#: ../src/ui/main_window.ui.h:51
+#: ../src/ui/main_window.ui.h:52
msgid "_Import..."
msgstr "Uv_ezi..."
-#: ../src/ui/main_window.ui.h:52
+#: ../src/ui/main_window.ui.h:53
+#| msgid "Camera Selection"
+msgid "_Invert Selection"
+msgstr "_Obrni izbor"
+
+#: ../src/ui/main_window.ui.h:54
msgid "_Large"
msgstr "_Velike"
-#: ../src/ui/main_window.ui.h:53
+#: ../src/ui/main_window.ui.h:55
msgid "_Last Import Roll"
msgstr "_Poslednje uvoženje"
-#: ../src/ui/main_window.ui.h:54
+#: ../src/ui/main_window.ui.h:56
msgid "_Loupe"
msgstr "_Lupa"
-#: ../src/ui/main_window.ui.h:55
+#: ../src/ui/main_window.ui.h:57
msgid "_Medium"
msgstr "_Srednje"
-#: ../src/ui/main_window.ui.h:57
+#: ../src/ui/main_window.ui.h:59
msgid "_Quit"
msgstr "_Izađi"
-#: ../src/ui/main_window.ui.h:58
+#: ../src/ui/main_window.ui.h:60
msgid "_Ratings"
msgstr "Oc_ene"
-#: ../src/ui/main_window.ui.h:60
+#: ../src/ui/main_window.ui.h:62
msgid "_Remove Tag From Selection"
msgstr "U_kloni oznaku iz izbora"
-#: ../src/ui/main_window.ui.h:61
+#: ../src/ui/main_window.ui.h:63
msgid "_Rename Version"
msgstr "P_reimenuj izdanje"
-#: ../src/ui/main_window.ui.h:62
+#: ../src/ui/main_window.ui.h:64
msgid "_Reverse Order"
msgstr "_Obrnut redosled"
-#: ../src/ui/main_window.ui.h:63
+#: ../src/ui/main_window.ui.h:65
msgid "_Select Import Rolls..."
msgstr "_Izaberi uvoženja..."
-#: ../src/ui/main_window.ui.h:64
+#: ../src/ui/main_window.ui.h:66
msgid "_Set Date Range..."
msgstr "_Postavi opseg datuma..."
-#: ../src/ui/main_window.ui.h:65
+#: ../src/ui/main_window.ui.h:67
msgid "_Set Rating filter..."
msgstr "_Postavi filter ocena..."
-#: ../src/ui/main_window.ui.h:66
+#: ../src/ui/main_window.ui.h:68
msgid "_Sharpen..."
msgstr "_Izoštri..."
-#: ../src/ui/main_window.ui.h:68
+#: ../src/ui/main_window.ui.h:70
msgid "_Small"
msgstr "_Male"
-#: ../src/ui/main_window.ui.h:69
+#: ../src/ui/main_window.ui.h:71
msgid "_Tag Icons"
msgstr "_Ikone oznaka"
-#: ../src/ui/main_window.ui.h:70
+#: ../src/ui/main_window.ui.h:72
msgid "_Tags"
msgstr "_Oznake"
-#: ../src/ui/main_window.ui.h:71
+#: ../src/ui/main_window.ui.h:73
msgid "_Timeline"
msgstr "Linija _vremena"
-#: ../src/ui/main_window.ui.h:72
+#: ../src/ui/main_window.ui.h:74
msgid "_Tools"
msgstr "Ala_ti"
-#: ../src/ui/main_window.ui.h:73
+#: ../src/ui/main_window.ui.h:75
msgid "_Untagged Photos"
msgstr "_Fotografije bez oznaka"
-#: ../src/ui/main_window.ui.h:74
+#: ../src/ui/main_window.ui.h:76
msgid "_Version"
msgstr "I_zdanje"
-#: ../src/Updater.cs:616
+#: ../src/Updater.cs:623
msgid "Updating F-Spot Database"
msgstr "Ažuriram bazu F-broja"
-#: ../src/Updater.cs:617
+#: ../src/Updater.cs:624
msgid ""
"Please wait while your F-Spot gallery's database is updated. This may take "
"some time."
@@ -3935,7 +3804,7 @@ msgstr ""
"neko vreme."
#. Mono.Unix.Error error = Mono.Unix.Stdlib.GetLastError ();
-#: ../src/Utils/Unix.cs:35
+#: ../src/Utils/Unix.cs:36
msgid "Unable to create temporary file"
msgstr "Ne mogu da napravim privremenu datoteku"
@@ -4019,11 +3888,11 @@ msgstr "Odtampaj oznake slike"
msgid "Print photo comment"
msgstr "Odštampaj komentar fotografije"
-#: ../src/Widgets/EditorPage.cs:29 ../src/Widgets/Sidebar.cs:62
+#: ../src/Widgets/EditorPage.cs:31 ../src/Widgets/Sidebar.cs:54
msgid "Edit"
msgstr "Uređivanje"
-#: ../src/Widgets/EditorPage.cs:197
+#: ../src/Widgets/EditorPage.cs:199
msgid ""
"This tool requires an active selection. Please select a region of the photo "
"and try the operation again"
@@ -4031,14 +3900,15 @@ msgstr ""
"Ovaj alat zahteva da bude aktivan izbor. Izaberite oblast fotografije i "
"ponovite radnju"
-#: ../src/Widgets/EditorPage.cs:215
+#: ../src/Widgets/EditorPage.cs:217
msgid "Error saving adjusted photo"
msgid_plural "Error saving adjusted photos"
msgstr[0] "Greška pri čuvanju ispravljene slike"
msgstr[1] "Greška pri čuvanju ispravljenih slika"
-msgstr[2] "Greška pri čuvanju ispravljenih slike"
+msgstr[2] "Greška pri čuvanju ispravljenih slika"
+msgstr[3] "Greška pri čuvanju ispravljene slike"
-#: ../src/Widgets/EditorPage.cs:217
+#: ../src/Widgets/EditorPage.cs:219
#, csharp-format
msgid ""
"Received exception \"{0}\". Note that you have to develop RAW files into "
@@ -4047,11 +3917,11 @@ msgstr ""
"Primljen je izuzetak „{0}“. Morate da razvijete RAW datoteke u JPEG pre "
"njihove izmene."
-#: ../src/Widgets/Filmstrip.cs:572
+#: ../src/Widgets/Filmstrip.cs:573
msgid "_Horizontal"
msgstr "_Horizontalno"
-#: ../src/Widgets/Filmstrip.cs:576
+#: ../src/Widgets/Filmstrip.cs:577
msgid "_Vertical"
msgstr "_Vertikalno"
@@ -4059,66 +3929,76 @@ msgstr "_Vertikalno"
msgid "Find:"
msgstr "Nađi:"
-#: ../src/Widgets/FolderTreePage.cs:21
+#: ../src/Widgets/FolderTreePage.cs:22
msgid "Folders"
msgstr "Fascikle"
-#: ../src/Widgets/FolderTreeView.cs:123
+#: ../src/Widgets/FolderTreeView.cs:124
msgid "Filesystem"
msgstr "Sistem datoteka"
-#: ../src/Widgets/InfoBox.cs:182
+#: ../src/Widgets/InfoBox.cs:183
msgid "Histogram"
msgstr "Histogram"
-#: ../src/Widgets/InfoBox.cs:217
+#: ../src/Widgets/InfoBox.cs:216
+msgid "Version"
+msgstr "Izdanje"
+
+#: ../src/Widgets/InfoBox.cs:219
msgid "Date"
msgstr "Datum"
-#: ../src/Widgets/InfoBox.cs:223
+#: ../src/Widgets/InfoBox.cs:225
msgid "Exposure"
msgstr "Ekspozicija"
-#: ../src/Widgets/InfoBox.cs:227
+#: ../src/Widgets/InfoBox.cs:229
msgid "Focal Length"
msgstr "Žižna daljina"
-#: ../src/Widgets/InfoBox.cs:233
+#: ../src/Widgets/InfoBox.cs:232
+msgid "Camera"
+msgstr "Aparat"
+
+#: ../src/Widgets/InfoBox.cs:235
msgid "File Size"
msgstr "Veličina datoteke"
-#: ../src/Widgets/InfoBox.cs:236
+#: ../src/Widgets/InfoBox.cs:238
msgid "Rating"
msgstr "Ocena"
-#: ../src/Widgets/InfoBox.cs:409 ../src/Widgets/InfoBox.cs:432
-#: ../src/Widgets/InfoBox.cs:442 ../src/Widgets/InfoBox.cs:451
-msgid "(Unknown)"
-msgstr "(nepoznata)"
-
-#: ../src/Widgets/InfoBox.cs:419
+#: ../src/Widgets/InfoBox.cs:391 ../src/Widgets/InfoBox.cs:399
+#: ../src/Widgets/InfoBox.cs:429
msgid "(wrong format)"
msgstr "(pogrešan format)"
-#: ../src/Widgets/InfoBox.cs:552
+#: ../src/Widgets/InfoBox.cs:419 ../src/Widgets/InfoBox.cs:442
+#: ../src/Widgets/InfoBox.cs:452 ../src/Widgets/InfoBox.cs:461
+msgid "(Unknown)"
+msgstr "(nepoznata)"
+
+#: ../src/Widgets/InfoBox.cs:564
#, csharp-format
msgid "(One Edit)"
msgid_plural "({0} Edits)"
msgstr[0] "({0} izmena)"
msgstr[1] "({0} izmene)"
msgstr[2] "({0} izmena)"
+msgstr[3] "({0} izmena)"
-#: ../src/Widgets/InfoBox.cs:566
+#: ../src/Widgets/InfoBox.cs:578
msgid "(File read error)"
msgstr "(greška pri čitanju datoteke)"
-#: ../src/Widgets/InfoBox.cs:611
+#: ../src/Widgets/InfoBox.cs:623
#, csharp-format
msgid "{0} Photos"
msgstr "{0} slika"
#. Note for translators: {0} is a date, {1} and {2} are times.
-#: ../src/Widgets/InfoBox.cs:631
+#: ../src/Widgets/InfoBox.cs:643
#, csharp-format
msgid ""
"On {0} between \n"
@@ -4127,7 +4007,7 @@ msgstr ""
"Na {0} između \n"
"{1} i {2}"
-#: ../src/Widgets/InfoBox.cs:636
+#: ../src/Widgets/InfoBox.cs:648
#, csharp-format
msgid ""
"Between {0} \n"
@@ -4136,61 +4016,61 @@ msgstr ""
"Između {0} \n"
"i {1}"
-#: ../src/Widgets/InfoBox.cs:663
+#: ../src/Widgets/InfoBox.cs:675
msgid "(At least one File not found)"
msgstr "(bar jedna datoteka nije nađena)"
-#: ../src/Widgets/InfoBox.cs:780
+#: ../src/Widgets/InfoBox.cs:792
msgid "Show Photo Name"
msgstr "Prikaži naziv fotografije"
-#: ../src/Widgets/InfoBox.cs:789
+#: ../src/Widgets/InfoBox.cs:801
msgid "Show Date"
msgstr "Prikaži datum"
-#: ../src/Widgets/InfoBox.cs:798
+#: ../src/Widgets/InfoBox.cs:810
msgid "Show Size"
msgstr "Prikaži veličinu"
-#: ../src/Widgets/InfoBox.cs:807
+#: ../src/Widgets/InfoBox.cs:819
msgid "Show Exposure"
msgstr "Prikaži ekspoziciju"
-#: ../src/Widgets/InfoBox.cs:816
+#: ../src/Widgets/InfoBox.cs:828
msgid "Show Focal Length"
msgstr "Prikaži žižnu daljinu"
-#: ../src/Widgets/InfoBox.cs:825
+#: ../src/Widgets/InfoBox.cs:837
msgid "Show Camera"
msgstr "Prikaži foto-aparat"
-#: ../src/Widgets/InfoBox.cs:834
+#: ../src/Widgets/InfoBox.cs:846
msgid "Show File Size"
msgstr "Prikaži veličinu datoteke"
-#: ../src/Widgets/MetadataDisplay.cs:23
+#: ../src/Widgets/MetadataDisplay.cs:25
msgid "Metadata"
msgstr "Metapodaci"
-#: ../src/Widgets/MetadataDisplay.cs:104
+#: ../src/Widgets/MetadataDisplay.cs:106
msgid "Extended Metadata"
msgstr "Prošireni metapodaci"
#. clear Extended Metadata
-#: ../src/Widgets/MetadataDisplay.cs:392
+#: ../src/Widgets/MetadataDisplay.cs:394
msgid "No Extended Metadata Available"
msgstr "Nisu dostupni prošireni metapodaci"
-#: ../src/Widgets/MetadataDisplay.cs:410
+#: ../src/Widgets/MetadataDisplay.cs:412
msgid "No active photo"
msgstr "Nema izabranih fotografija"
-#: ../src/Widgets/MetadataDisplay.cs:412
+#: ../src/Widgets/MetadataDisplay.cs:414
#, csharp-format
msgid "The photo \"{0}\" does not exist"
msgstr "Fotografija „{0}“ ne postoji"
-#: ../src/Widgets/MetadataDisplay.cs:415
+#: ../src/Widgets/MetadataDisplay.cs:417
msgid "No metadata available"
msgstr "Nisu dostupni metapodaci"
@@ -4198,7 +4078,7 @@ msgstr "Nisu dostupni metapodaci"
msgid "No applications available"
msgstr "Nisu dostupni programi"
-#: ../src/Widgets/RatingMenuItem.cs:56
+#: ../src/Widgets/RatingMenuItem.cs:57
msgid "Rating:"
msgstr "Ocena:"
@@ -4223,6 +4103,398 @@ msgstr "Prikaži pokretni prikaz iz F-broja"
msgid "F-Spot photos"
msgstr "F-broj fotografije"
+#~ msgid "Error: Error while transferring; Aborting"
+#~ msgstr "Greška: greška u toku prebacivanja; odustajem"
+
+#~ msgid "Error: File Already Exists; Aborting"
+#~ msgstr "Greška: datoteka već postoji; odustajem"
+
+#~ msgid "Package"
+#~ msgstr "Paket"
+
+#~ msgid "Extension Installation"
+#~ msgstr "Dodavanje proširenja"
+
+#~ msgid "<b>Select the extensions to install and click on Next</b>"
+#~ msgstr ""
+#~ "<b>Izaberite proširenje koje želite da dodate i pritisnite „Naredno“</b>"
+
+#~ msgid "Install from:"
+#~ msgstr "Instaliraj iz:"
+
+#~ msgid "_Repositories..."
+#~ msgstr "_Skladišta..."
+
+#~ msgid "Show all packages"
+#~ msgstr "Prikaži sve pakete"
+
+#~ msgid "Show new versions only"
+#~ msgstr "Prikaži samo nova izdanja"
+
+#~ msgid "Show updates only"
+#~ msgstr "Prikaži samo nadogradnje"
+
+#~ msgid "_Unselect All"
+#~ msgstr "Izaberi _ništa"
+
+#~ msgid "label124"
+#~ msgstr "natpis124"
+
+#~ msgid "Overall Progress:"
+#~ msgstr "Upukan napredak:"
+
+#~ msgid "Downloading extensions..."
+#~ msgstr "Preuzimam proširenja..."
+
+#~ msgid "Extension Manager"
+#~ msgstr "Urednik proširenja"
+
+#~ msgid "Additional extensions are required to perform this operation."
+#~ msgstr "Potrebna su dodatna proširenja za izvođenje ove radnje."
+
+#~ msgid "The following extensions will be installed:"
+#~ msgstr "Sledeća proširenja će biti dodata:"
+
+#~ msgid "<big><b>Extension Manager</b></big>"
+#~ msgstr "<big><b>Urednik proširenja</b></big>"
+
+#~ msgid "The following extensions are currently installed:"
+#~ msgstr "Dodata su sledeća proširenja:"
+
+#~ msgid "_Install Extensions..."
+#~ msgstr "_Dodaj proširenja..."
+
+#~ msgid "_Uninstall..."
+#~ msgstr "_Ukloni..."
+
+#~ msgid "Enable"
+#~ msgstr "Omogući"
+
+#~ msgid "Disable"
+#~ msgstr "Onemogući"
+
+#~ msgid "Details"
+#~ msgstr "Detalji"
+
+#~ msgid "Extension Repository Management"
+#~ msgstr "Urednik proširenja skladišta"
+
+#~ msgid "Add New Repository"
+#~ msgstr "Dodaj novo skladište"
+
+#~ msgid "Select the location of the repository you want to register:"
+#~ msgstr "Izaberite mesto skladišta koje želite da registrujete:"
+
+#~ msgid "Register an on-line repository"
+#~ msgstr "Registrujte skladište na mreži"
+
+#~ msgid "Url:"
+#~ msgstr "Adresa:"
+
+#~ msgid "Register a local repository"
+#~ msgstr "Registrujte lokalno skladište"
+
+#~ msgid "Path:"
+#~ msgstr "Putanja:"
+
+#~ msgid "Browse..."
+#~ msgstr "Razgledaj..."
+
+#~ msgid "Version:"
+#~ msgstr "Izdanje:"
+
+#~ msgid "Author:"
+#~ msgstr "Autor:"
+
+#~ msgid "Copyright:"
+#~ msgstr "Autorsko pravo:"
+
+#~ msgid "Extension Dependencies:"
+#~ msgstr "Zavisnosti proširenja:"
+
+#~ msgid "All registered repositories"
+#~ msgstr "Sva registrovana skladišta"
+
+#~ msgid "Are you sure you want to cancel the installation?"
+#~ msgstr "Da li sigurno želite da prekinete dodavanje?"
+
+#~ msgid "The following packages will be uninstalled:"
+#~ msgstr "Sledeći paketi če biti uklonjeni:"
+
+#~ msgid ""
+#~ "There are other extensions that depend on the previous ones which will "
+#~ "also be uninstalled:"
+#~ msgstr "Neka proširenja zavise od prethodnih koja će takođe biti ukonjena:"
+
+#~ msgid ""
+#~ "The selected extensions can't be installed because there are dependency "
+#~ "conflicts."
+#~ msgstr ""
+#~ "Izabrana proširenja ne mogu biti dodata zbog postojanja konflikta "
+#~ "međuzavisnostima."
+
+#~ msgid "The following packages will be installed:"
+#~ msgstr "Sledeći paketi će biti dodati:"
+
+#~ msgid " (in user directory)"
+#~ msgstr " (u korisničkom direktorijumu)"
+
+#~ msgid "The following packages need to be uninstalled:"
+#~ msgstr "Potrebno je ukloniti sledeće pakete:"
+
+#~ msgid "The following dependencies could not be resolved:"
+#~ msgstr "Nije moguće rešiti sledeće zavisnosti:"
+
+#~ msgid "The installation has been successfully completed."
+#~ msgstr "Dodavanje paketa je uspešno završeno."
+
+#~ msgid "The installation failed!"
+#~ msgstr "Dodavanje nije uspelo!"
+
+#~ msgid "The installation has completed with warnings."
+#~ msgstr "Dodavanje je završeno uz upozorenja."
+
+#~ msgid "The uninstallation has been successfully completed."
+#~ msgstr "Uklanjanje je uzpešno završeno."
+
+#~ msgid "The uninstallation failed!"
+#~ msgstr "Uklanjanje nije uspelo!"
+
+#~ msgid "The uninstallation has completed with warnings."
+#~ msgstr "Uklanjanje je završeno uz upozorenja."
+
+#~ msgid "Repository"
+#~ msgstr "Skladište"
+
+#~ msgid "Installation cancelled"
+#~ msgstr "Dodavanje je prekinuto"
+
+#~ msgid "Some of the required extensions were not found"
+#~ msgstr "Neka od potrebnih proširenja nisu nađena"
+
+#~ msgid "Installation failed"
+#~ msgstr "Dodavanje nije uspelo"
+
+#~ msgid "Extension"
+#~ msgstr "Proširenje"
+
+#~ msgid "Other"
+#~ msgstr "Ostalo"
+
+#~ msgid "Url"
+#~ msgstr "Adresa"
+
+#~ msgid "Exception occurred: {0}"
+#~ msgstr "Javio se izuzetak: {0}"
+
+#~ msgid "Disabled extensions can't be loaded."
+#~ msgstr "Onemogućena proširenja ne mogu biti učitana."
+
+#~ msgid "Loading {0} extension"
+#~ msgstr "Učitavam {0} proširenje"
+
+#~ msgid "The required extension '{0}' is disabled."
+#~ msgstr "Zahtevano proširenje „{0}“ je onemogućeno."
+
+#~ msgid "The required extension '{0}' is not installed."
+#~ msgstr "Zahtevano proširenje „{0}“ nije dodato."
+
+#~ msgid "(provided by {0})"
+#~ msgstr "(obezbedio {0})"
+
+#~ msgid "Preview"
+#~ msgstr "Prikaz"
+
+#~ msgid "Path"
+#~ msgstr "Putanja"
+
+#~ msgid "File"
+#~ msgstr "Datoteka"
+
+#~ msgid "Select Tag"
+#~ msgstr "Izaberi oznaku"
+
+#~ msgid "Downloading Previews"
+#~ msgstr "Preuzimam preglede"
+
+#~ msgid "Downloading Preview of {0}"
+#~ msgstr "Preuzimam pregled za {0}"
+
+#~ msgid "Copying file {0} of {1}"
+#~ msgstr "Umnožavam datoteku {0} od {1}"
+
+#~ msgid "Error transferring file"
+#~ msgstr "Greška pri prebacivanju datoteke"
+
+#~ msgid "Done Copying Files"
+#~ msgstr "Gotovo umnožavanje datoteka"
+
+#~ msgid "Download Complete"
+#~ msgstr "Preuzimanje gotovo"
+
+#~ msgid "Transferring \"{0}\" from camera"
+#~ msgstr "Prenosim „{0}“ sa aparata"
+
+#~ msgid "Port"
+#~ msgstr "Priključak"
+
+#~ msgid "Reparented ({0})"
+#~ msgstr "Pridruženih slika ({0})"
+
+# bug: uvezi od, uvezi sa
+#~ msgid "Import error"
+#~ msgstr "Greška pri uvozu:"
+
+#~ msgid "Error importing {0}{2}{2}{1}"
+#~ msgstr "Greška pri uvozu {0}{2}{2}{1}"
+
+#~ msgid " "
+#~ msgstr " "
+
+#~ msgid "<b></b>"
+#~ msgstr "<b></b>"
+
+#~ msgid "Attach Tags:"
+#~ msgstr "Dodaj oznake:"
+
+#~ msgid "Attach tag:"
+#~ msgstr "Dodaj oznaku:"
+
+#~ msgid "CD"
+#~ msgstr "CD"
+
+#~ msgid "Copy files to the Photos folder"
+#~ msgstr "Ubaci datoteke u direktorijum sa Foto albumom"
+
+#~ msgid "Detect duplicates"
+#~ msgstr "Nađi duplikate"
+
+#~ msgid "E-_Mail:"
+#~ msgstr "_E-pošta:"
+
+#~ msgid "E_xport titles and comments"
+#~ msgstr "_Izvezi naslove i primedbe"
+
+#~ msgid "G_allery:"
+#~ msgstr "_Galerija:"
+
+#~ msgid "Gallery"
+#~ msgstr "Galerija"
+
+#~ msgid "Include subfolders"
+#~ msgstr "Uključi poddirektorijume."
+
+#~ msgid "Pause"
+#~ msgstr "Pauza"
+
+#~ msgid "Select Photos to Copy From Camera..."
+#~ msgstr "Izaberite fotografije za prebacivanje sa aparata..."
+
+#~ msgid "Select the camera from which you want to transfer files"
+#~ msgstr "Izaberite aparat sa kojeg želite da prebacite datoteke."
+
+#~ msgid "Selected Camera: "
+#~ msgstr "Izabrani aparat:"
+
+#~ msgid "Strip image _metadata"
+#~ msgstr "Odbaci m_etapodatke slike"
+
+# bug: flickr
+#~ msgid "_Flickr"
+#~ msgstr "_Flickr"
+
+#~ msgid "_Gallery"
+#~ msgstr "_Galerija"
+
+#~ msgid "_Open album in browser when done uploading"
+#~ msgstr "Otvori _album u razgledaču po završenom slanju"
+
+#~ msgid "_Open destination when done exporting"
+#~ msgstr "Otvori _odredište po završenom izvozu."
+
+#~ msgid "_Scale photos to no larger than: "
+#~ msgstr "Promeni veličinu na ne veću od:"
+
+#~ msgid "_Strip metadata"
+#~ msgstr "Od_baci metapodatke"
+
+#~ msgid "_URI:"
+#~ msgstr "_Adresa:"
+
+#~ msgid "_Virtual Filesystem"
+#~ msgstr "_Virtuelni sistem datoteka"
+
+#~ msgid "x"
+#~ msgstr "x"
+
+#~ msgid "Loading {0} of {1}"
+#~ msgstr "Učitavam {0} od {1}"
+
+#~ msgid "Done Loading"
+#~ msgstr "Učitavanje završeno"
+
+#~ msgid "Directory does not exist."
+#~ msgstr "Direktorijum ne postoji."
+
+# bug: unclear
+#~ msgid ""
+#~ "The directory you selected \"{0}\" does not exist. Please choose a "
+#~ "different directory"
+#~ msgstr ""
+#~ "Direktorijum koji ste izabrali „{0}“ ne postoji. Izaberite neki drugi."
+
+#~ msgid "No cameras detected."
+#~ msgstr "Nisam našao nijedan aparat."
+
+#~ msgid ""
+#~ "F-Spot was unable to find any cameras attached to this system. Double "
+#~ "check that the camera is connected and has power"
+#~ msgstr ""
+#~ "F-broj nije uspeo da nađe nijedan aparat povezan na ovaj sistem. "
+#~ "Proverite da je aparat povezan i uključen"
+
+#~ msgid "Error connecting to camera"
+#~ msgstr "Greška pri povezivanju sa aparatom"
+
+#~ msgid "Received error \"{0}\" while connecting to camera"
+#~ msgstr "Primih grešku „{0}“ pri povezivanju sa aparatom"
+
+#~ msgid "Could not create a new version"
+#~ msgstr "Ne mogu da napravim novo izdanje"
+
+#~ msgid "Received exception \"{0}\". Unable to create version \"{1}\""
+#~ msgstr "Primio sam izuzetak „{0}“. Ne mogu da napravim izdanje „{1}“"
+
+#~ msgid "Really Delete?"
+#~ msgstr "Zaista obrisati?"
+
+#~ msgid "Cancel"
+#~ msgstr "Odustani"
+
+#~ msgid "Could not delete a version"
+#~ msgstr "Ne mogu da obrišem izdanje"
+
+#~ msgid "Received exception \"{0}\". Unable to delete version \"{1}\""
+#~ msgstr "Primio sam izuzetak „{0}“. Ne mogu da obrišem izdanje „{1}“"
+
+#~ msgid "Could not rename a version"
+#~ msgstr "Ne mogu da preimenujem izdanje"
+
+#~ msgid "Received exception \"{0}\". Unable to rename version to \"{1}\""
+#~ msgstr "Primio sam izuzetak „{0}“. Ne mogu da preimenujem izdanje u „{1}“"
+
+#~ msgid "my photos"
+#~ msgstr "moje slike"
+
+#~ msgid "Edit Selected Tag..."
+#~ msgstr "Uredi izabranu oznaku..."
+
+#~ msgid "Copy Locat_ion"
+#~ msgstr "Umnoži _putanju slike"
+
+#~ msgid "_Edit Selected Tag..."
+#~ msgstr "Ure_di izabranu oznaku..."
+
#~ msgid "interpolation type"
#~ msgstr "vrsta interpolacije"
@@ -4281,9 +4553,6 @@ msgstr "F-broj fotografije"
#~ msgid "<b>Color Management</b>"
#~ msgstr "<b>Upravljanje bojama</b>"
-#~ msgid "<b>Import Settings</b>"
-#~ msgstr "<b>Postavke uvoza</b>"
-
#~ msgid "<b>Metadata</b>"
#~ msgstr "<b>Metapodaci</b>"
@@ -4381,30 +4650,6 @@ msgstr "F-broj fotografije"
#~ msgid "This is who I am"
#~ msgstr "Ovo sam ja"
-#~ msgid "<b>Tabblo account</b>"
-#~ msgstr "<b>Tabblo nalog</b>"
-
-#~ msgid "<b>{0}</b>."
-#~ msgstr "<b>{0}</b>."
-
-#~ msgid "A trust error occured while attempting to access"
-#~ msgstr "Javila se greška u ovlašćenjima pri pokušaju povezivanja"
-
-#~ msgid "Abort this session"
-#~ msgstr "Odbaci ovu sesiju"
-
-#~ msgid "Always trust this site's certificate"
-#~ msgstr "Uvek veruj sertifikatima sa ove adrese"
-
-#~ msgid "Do you wish to:"
-#~ msgstr "Da li želite da:"
-
-#~ msgid "Trust Error"
-#~ msgstr "Greška u ovlašćenjima"
-
-#~ msgid "Trust the site's certificate this once"
-#~ msgstr "Prihvati sertifikat sa ove adrese samo sada"
-
#~ msgid "Blackout"
#~ msgstr "Zacrni"
diff --git a/po/th.po b/po/th.po
index 54c64f2..22cfee6 100644
--- a/po/th.po
+++ b/po/th.po
@@ -2,2112 +2,4144 @@
# Copyright (C) 2006 Free Software Foundation, Inc.
# This file is distributed under the same license as the F-Spot package.
# Isriya Paireepairit <markpeak at gmail.com>, 2006.
-#
+# Sira Nokyoongtong <gumaraa at gmail.com>, 2010.
+# Theppitak Karoonboonyanan <thep at linux.thai.net>, 2010.
+#
msgid ""
msgstr ""
"Project-Id-Version: F-Spot VERSION\n"
-"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2006-02-06 10:18+0100\n"
-"PO-Revision-Date: 2006-02-21 16:37+0700\n"
-"Last-Translator: Theppitak Karoonboonyanan <thep at linux.thai.net>\n"
+"Report-Msgid-Bugs-To: http://bugzilla.gnome.org/enter_bug.cgi?product=f-"
+"spot&component=General\n"
+"POT-Creation-Date: 2010-05-25 12:48+0000\n"
+"PO-Revision-Date: 2010-05-27 16:34+0700\n"
+"Last-Translator: Sira Nokyoongtong <gumaraa at gmail.com>\n"
"Language-Team: Thai <l10n at opentle.org>\n"
"MIME-Version: 1.0\n"
-"Content-Type: text/plain; charset=utf-8\n"
+"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
-"Plural-Forms: nplurals=1; plural=0;"
+"Plural-Forms: nplurals=1; plural=0;\n"
-#: ../f-spot.desktop.in.in.h:1
+#: ../data/desktop-files/f-spot.desktop.in.in.h:1
+#: ../data/desktop-files/f-spot-import.desktop.in.in.h:1
+#: ../data/desktop-files/f-spot-view.desktop.in.in.h:1
+#: ../src/ui/main_window.ui.h:11
+msgid "F-Spot"
+msgstr "F-Spot"
+
+#: ../data/desktop-files/f-spot.desktop.in.in.h:2
+#: ../data/desktop-files/f-spot-import.desktop.in.in.h:2
msgid "F-Spot Photo Manager"
-msgstr "F-Spot: โปรแกรมจัดการรูปถ่าย"
+msgstr "F-Spot: โปรแกรมจัดการภาพถ่าย"
-#: ../f-spot.desktop.in.in.h:2
+#: ../data/desktop-files/f-spot.desktop.in.in.h:3
msgid "Organize, enjoy, and share your photos"
msgstr ""
-#: ../f-spot.desktop.in.in.h:3
+#: ../data/desktop-files/f-spot.desktop.in.in.h:4
+#: ../data/desktop-files/f-spot-import.desktop.in.in.h:4
msgid "Photo Manager"
-msgstr "โปรแกรมจัดการรูปถ่าย"
+msgstr "โปรแกรมจัดการภาพถ่าย"
+
+#: ../data/desktop-files/f-spot-import.desktop.in.in.h:3
+msgid "Import into F-Spot"
+msgstr "นำเข้าสู่ F-Spot"
-#: ../f-spot-view.desktop.in.h:1 ../src/f-spot.glade.h:90
+#: ../data/desktop-files/f-spot-view.desktop.in.in.h:2
msgid "F-Spot Photo Viewer"
msgstr ""
-#: ../f-spot-view.desktop.in.h:2
+#: ../data/desktop-files/f-spot-view.desktop.in.in.h:3
msgid "Photo Viewer"
msgstr ""
-#: ../libeog/eog-file-selection.c:29 ../libeog/eog-file-selection.c:46
-msgid "By Extension"
+#: ../extensions/Exporters/CDExport/CDExport.addin.xml.h:1
+msgid "_CD..."
+msgstr "_ซีดี..."
+
+#: ../extensions/Exporters/CDExport/CDExport.cs:162
+#: ../src/CameraFileSelectionDialog.cs:200
+msgid "Transferring Pictures"
msgstr ""
-#: ../libeog/eog-file-selection.c:30
-msgid "BMP"
-msgstr "BMP"
+#: ../extensions/Exporters/CDExport/CDExport.cs:218
+#, csharp-format
+msgid "Transferring picture \"{0}\" To CD"
+msgstr ""
-#: ../libeog/eog-file-selection.c:31
-msgid "GIF"
-msgstr "GIF"
+#. Note for translators: This indicates the current photo is photo {0} of {1} out of photos
+#: ../extensions/Exporters/CDExport/CDExport.cs:220
+#: ../extensions/Exporters/FlickrExport/FlickrExport.cs:349
+#: ../extensions/Exporters/FolderExport/FolderExport.cs:221
+#: ../extensions/Exporters/GalleryExport/GalleryExport.cs:781
+#: ../src/MainWindow.cs:662 ../src/UI.Dialog/AdjustTimeDialog.cs:129
+#: ../src/UI.Dialog/ProgressDialog.cs:92
+#, csharp-format
+msgid "{0} of {1}"
+msgstr "{0} จาก {1}"
-#: ../libeog/eog-file-selection.c:32
-msgid "ICO"
-msgstr "ICO"
+#: ../extensions/Exporters/CDExport/CDExport.cs:233
+#: ../extensions/Exporters/FacebookExport/FacebookExport.cs:377
+#: ../extensions/Exporters/FlickrExport/FlickrExport.cs:379
+#: ../extensions/Exporters/GalleryExport/GalleryExport.cs:806
+#: ../extensions/Exporters/PicasaWebExport/PicasaWebExport.cs:704
+#: ../extensions/Exporters/SmugMugExport/SmugMugExport.cs:607
+msgid "Done Sending Photos"
+msgstr ""
-#: ../libeog/eog-file-selection.c:33 ../libeog/eog-file-selection.c:48
-msgid "JPEG"
-msgstr "JPEG"
+#: ../extensions/Exporters/CDExport/CDExport.cs:235
+msgid "Transfer Complete"
+msgstr ""
-#: ../libeog/eog-file-selection.c:34 ../libeog/eog-file-selection.c:51
-msgid "PNG"
-msgstr "PNG"
+#: ../extensions/Exporters/CDExport/CDExport.cs:242
+msgid "Error While Transferring"
+msgstr ""
-#: ../libeog/eog-file-selection.c:35
-msgid "PNM"
-msgstr "PNM"
+#: ../extensions/Exporters/CDExport/CDExport.cs:250
+#: ../extensions/Exporters/FolderExport/FolderExport.cs:279
+msgid "Error Transferring"
+msgstr ""
-#: ../libeog/eog-file-selection.c:36
-msgid "RAS"
-msgstr "RAS"
+#: ../extensions/Exporters/CDExport/CDExport.cs:263
+msgid "copying..."
+msgstr "กำลังคัดลอก..."
-#: ../libeog/eog-file-selection.c:37
-msgid "SVG"
-msgstr "SVG"
+#: ../extensions/Exporters/CDExport/CDExport.ui.h:1
+msgid "<b><i>There is some previously scheduled items to write</i></b>"
+msgstr ""
-#: ../libeog/eog-file-selection.c:38
-msgid "TGA"
-msgstr "TGA"
+#: ../extensions/Exporters/CDExport/CDExport.ui.h:2
+msgid "<b>Photos to Burn</b>"
+msgstr ""
-#: ../libeog/eog-file-selection.c:39
-msgid "TIFF"
-msgstr "TIFF"
+#: ../extensions/Exporters/CDExport/CDExport.ui.h:3
+#: ../extensions/Exporters/FolderExport/FolderExport.glade.h:7
+#: ../extensions/Exporters/GalleryExport/GalleryExport.glade.h:7
+#: ../extensions/Exporters/SmugMugExport/SmugMugExport.glade.h:5
+#: ../src/f-spot.glade.h:28
+msgid "Autorotate"
+msgstr ""
-#: ../libeog/eog-file-selection.c:40
-msgid "XBM"
-msgstr "XBM"
+#: ../extensions/Exporters/CDExport/CDExport.ui.h:4
+msgid "Create CD"
+msgstr "สร้างซีดี"
-#: ../libeog/eog-file-selection.c:41 ../libeog/eog-file-selection.c:54
-msgid "XPM"
-msgstr "XPM"
+#: ../extensions/Exporters/CDExport/CDExport.ui.h:5
+#: ../src/Widgets/InfoBox.cs:221
+msgid "Size"
+msgstr "ขนาด"
-#: ../libeog/eog-file-selection.c:207
-msgid "Unsupported file format."
-msgstr "ไม่สนับสนุนแฟ้มชนิดนี้"
+#: ../extensions/Exporters/CDExport/CDExport.ui.h:6
+msgid "Size of the exported selection:"
+msgstr ""
-#: ../libeog/eog-file-selection.c:225
-msgid "Determine File Type:"
+#: ../extensions/Exporters/CDExport/CDExport.ui.h:7
+msgid "_Browse Previously Scheduled Files"
msgstr ""
-#: ../libeog/eog-file-selection.c:268
-msgid "Load Image"
+#: ../extensions/Exporters/CDExport/CDExport.ui.h:8
+#: ../extensions/Exporters/FlickrExport/FlickrExport.glade.h:15
+#: ../extensions/Exporters/FolderExport/FolderExport.glade.h:16
+#: ../extensions/Exporters/GalleryExport/GalleryExport.glade.h:15
+#: ../extensions/Exporters/PicasaWebExport/PicasaWebExport.glade.h:20
+#: ../extensions/Exporters/SmugMugExport/SmugMugExport.glade.h:12
+#: ../extensions/Exporters/TabbloExport/ui/TabbloExport.ui.h:9
+#: ../src/f-spot.glade.h:95
+msgid "_Export"
+msgstr "_ส่งออก"
+
+#: ../extensions/Exporters/CDExport/CDExport.ui.h:9
+msgid "_Write only these photos to CD"
msgstr ""
-#: ../libeog/eog-file-selection.c:274
-msgid "Save Image"
-msgstr "บันทึกรูปภาพ"
+#: ../extensions/Exporters/FacebookExport/FacebookExport.addin.xml.h:1
+msgid "F_acebook..."
+msgstr ""
-#: ../libeog/eog-image.c:773
-msgid "No image loaded."
+#: ../extensions/Exporters/FacebookExport/FacebookExport.cs:99
+msgid "Waiting for authorization"
msgstr ""
-#: ../libeog/eog-image.c:780
-msgid "Can't save non local files."
+#: ../extensions/Exporters/FacebookExport/FacebookExport.cs:100
+msgid ""
+"F-Spot will now launch your browser so that you can enable the permission "
+"you just selected.\n"
+"\n"
+"Once you are directed by Facebook to return to this application, click \"Ok"
+"\" below."
msgstr ""
-#: ../libeog/eog-image.c:803
-msgid "Unsupported image type for saving."
+#: ../extensions/Exporters/FacebookExport/FacebookExport.cs:281
+msgid "Too many images to export"
msgstr ""
-#: ../libeog/image-view.c:2116
-msgid "interpolation type"
+#: ../extensions/Exporters/FacebookExport/FacebookExport.cs:282
+#, csharp-format
+msgid ""
+"Facebook only permits {0} photographs per album. Please refine your "
+"selection and try again."
msgstr ""
-#: ../libeog/image-view.c:2117
-msgid "the type of interpolation to use"
+#: ../extensions/Exporters/FacebookExport/FacebookExport.cs:297
+msgid "Album must have a name"
msgstr ""
-#: ../libeog/image-view.c:2123 ../libeog/image-view.c:2130
-msgid "check type"
+#: ../extensions/Exporters/FacebookExport/FacebookExport.cs:298
+msgid "Please name your album or choose an existing album."
msgstr ""
-#: ../libeog/image-view.c:2124
-msgid "the type of chequering to use"
+#: ../extensions/Exporters/FacebookExport/FacebookExport.cs:312
+msgid "Creating a new album failed"
msgstr ""
-#: ../libeog/image-view.c:2131
-msgid "the size of chequers to use"
+#: ../extensions/Exporters/FacebookExport/FacebookExport.cs:313
+#, csharp-format
+msgid ""
+"An error occurred creating a new album.\n"
+"\n"
+"{0}"
msgstr ""
-#: ../libeog/image-view.c:2137
-msgid "dither"
+#: ../extensions/Exporters/FacebookExport/FacebookExport.cs:326
+#: ../extensions/Exporters/FlickrExport/FlickrExport.cs:475
+#: ../extensions/Exporters/GalleryExport/GalleryExport.cs:730
+#: ../extensions/Exporters/PicasaWebExport/PicasaWebExport.cs:597
+#: ../extensions/Exporters/SmugMugExport/SmugMugExport.cs:522
+msgid "Uploading Pictures"
msgstr ""
-#: ../libeog/image-view.c:2138
-msgid "dither type"
+#: ../extensions/Exporters/FacebookExport/FacebookExport.cs:354
+#: ../extensions/Exporters/PicasaWebExport/PicasaWebExport.cs:660
+#: ../extensions/Exporters/SmugMugExport/SmugMugExport.cs:565
+#, csharp-format
+msgid "Uploading picture \"{0}\" ({1} of {2})"
msgstr ""
-#: ../libfspot/f-jpeg-utils.c:445
-msgid "File not found"
-msgstr "ไม่พบแฟ้ม"
+#: ../extensions/Exporters/FacebookExport/FacebookExport.cs:368
+#, csharp-format
+msgid "Error Uploading To Facebook: {0}"
+msgstr ""
+
+#: ../extensions/Exporters/FacebookExport/FacebookExport.cs:369
+#: ../extensions/Exporters/FlickrExport/FlickrExport.cs:370
+#: ../extensions/Exporters/FolderExport/FolderExport.cs:227
+#: ../extensions/Exporters/GalleryExport/GalleryExport.cs:797
+#: ../extensions/Exporters/PicasaWebExport/PicasaWebExport.cs:693
+#: ../extensions/Exporters/SmugMugExport/SmugMugExport.cs:596
+#: ../extensions/Exporters/TabbloExport/TabbloExport.cs:319
+msgid "Error"
+msgstr "ผิดพลาด"
+
+#: ../extensions/Exporters/FacebookExport/FacebookExport.cs:379
+#: ../extensions/Exporters/FlickrExport/FlickrExport.cs:381
+#: ../extensions/Exporters/GalleryExport/GalleryExport.cs:808
+#: ../extensions/Exporters/PicasaWebExport/PicasaWebExport.cs:706
+#: ../extensions/Exporters/SmugMugExport/SmugMugExport.cs:609
+msgid "Upload Complete"
+msgstr ""
-#: ../libfspot/f-jpeg-utils.c:468
-#, c-format
-msgid "Unknown transform type %d"
+#: ../extensions/Exporters/FacebookExport/FacebookExport.cs:382
+msgid "Visit F-Spot group on Facebook"
msgstr ""
-#: ../libfspot/f-jpeg-utils.c:476
-msgid "Operation failed"
+#: ../extensions/Exporters/FacebookExport/FacebookExportDialog.cs:211
+msgid "Waiting for authentication"
msgstr ""
-#: ../src/CameraFileSelectionDialog.cs:65
-msgid "Preview"
-msgstr "ภาพตัวอย่าง"
+#: ../extensions/Exporters/FacebookExport/FacebookExportDialog.cs:212
+msgid ""
+"F-Spot will now launch your browser so that you can log into Facebook.\n"
+"\n"
+"Once you are directed by Facebook to return to this application, click \"Ok"
+"\" below. F-Spot will cache your session in gnome-keyring, if possible, and "
+"re-use it on future Facebook exports."
+msgstr ""
-#: ../src/CameraFileSelectionDialog.cs:67
-msgid "Path"
-msgstr "พาธ"
+#: ../extensions/Exporters/FacebookExport/FacebookExportDialog.cs:217
+msgid "Authenticating..."
+msgstr ""
-#: ../src/CameraFileSelectionDialog.cs:69 ../src/f-spot.glade.h:93
-msgid "File"
-msgstr "แฟ้ม"
+#: ../extensions/Exporters/FacebookExport/FacebookExportDialog.cs:227
+msgid "Error logging into Facebook"
+msgstr "เกิดข้อผิดพลาดในการเข้าระบบ Facebook"
-#: ../src/CameraFileSelectionDialog.cs:71 ../src/FolderExport.cs:703
-msgid "Index"
-msgstr "ดัชนี"
+#: ../extensions/Exporters/FacebookExport/FacebookExportDialog.cs:228
+msgid ""
+"There was a problem logging into Facebook. Check your credentials and try "
+"again."
+msgstr ""
-#: ../src/CameraFileSelectionDialog.cs:87
-msgid "Downloading Previews"
-msgstr "กำลังดาวน์โหลดภาพตัวอย่าง"
+#: ../extensions/Exporters/FacebookExport/FacebookExportDialog.cs:237
+msgid "Authorizing Session"
+msgstr ""
-#: ../src/CameraFileSelectionDialog.cs:95
-#, csharp-format
-msgid "Downloading Preview of {0}"
+#: ../extensions/Exporters/FacebookExport/FacebookExportDialog.cs:246
+msgid "Session established, fetching user info..."
msgstr ""
-#: ../src/CameraFileSelectionDialog.cs:147
-msgid "Unknown destination."
+#: ../extensions/Exporters/FacebookExport/FacebookExportDialog.cs:252
+msgid "Session established, fetching friend list..."
msgstr ""
-#: ../src/CameraFileSelectionDialog.cs:148
-msgid ""
-"When copying files from a camera you must select a valid destination on the "
-"local filesystem"
+#: ../extensions/Exporters/FacebookExport/FacebookExportDialog.cs:262
+msgid "Session established, fetching friend details..."
msgstr ""
-#: ../src/CameraFileSelectionDialog.cs:166
-msgid "Unable to create directory."
+#: ../extensions/Exporters/FacebookExport/FacebookExportDialog.cs:274
+msgid "Session established, fetching photo albums..."
msgstr ""
-#: ../src/CameraFileSelectionDialog.cs:167
+#. Note for translators: {0} and {1} are respectively firstname and surname of the user
+#: ../extensions/Exporters/FacebookExport/FacebookExportDialog.cs:284
#, csharp-format
-msgid ""
-"Error \"{0}\" while creating directory \"{1}\". Check that the path and "
-"permissions are correct and try again"
+msgid "{0} {1} is logged into Facebook"
msgstr ""
-#: ../src/CameraFileSelectionDialog.cs:188 ../src/CDExport.cs:139
-#: ../src/FolderExport.cs:264
-msgid "Transferring Pictures"
+#: ../extensions/Exporters/FacebookExport/FacebookExportDialog.cs:293
+msgid "Facebook Connection Error"
msgstr ""
-#: ../src/CameraFileSelectionDialog.cs:211
+#: ../extensions/Exporters/FacebookExport/FacebookExportDialog.cs:294
#, csharp-format
-msgid "Copying file {0} of {1}"
+msgid ""
+"There was an error when downloading your information from Facebook.\n"
+"\n"
+"Facebook said: {0}"
msgstr ""
-#: ../src/CameraFileSelectionDialog.cs:221
-msgid "Done Copying Files"
+#: ../extensions/Exporters/FacebookExport/FacebookExportDialog.cs:323
+msgid "You are not logged in."
msgstr ""
-#: ../src/CameraFileSelectionDialog.cs:223
-msgid "Download Complete"
-msgstr "ดาวน์โหลดเสร็จสิ้น"
+#: ../extensions/Exporters/FacebookExport/FacebookExport.ui.h:1
+msgid "Auto-confirm Photos"
+msgstr ""
-#: ../src/CameraFileSelectionDialog.cs:228
-msgid "Error transferring file"
+#: ../extensions/Exporters/FacebookExport/FacebookExport.ui.h:2
+msgid "Caption"
msgstr ""
-#: ../src/CameraFileSelectionDialog.cs:249
-#, csharp-format
-msgid "Transferring \"{0}\" from camera"
+#: ../extensions/Exporters/FacebookExport/FacebookExport.ui.h:3
+msgid "Create a new album"
+msgstr "สร้างอัลบั้มใหม่"
+
+#: ../extensions/Exporters/FacebookExport/FacebookExport.ui.h:4
+msgid "Description"
+msgstr "คำอธิบาย"
+
+#: ../extensions/Exporters/FacebookExport/FacebookExport.ui.h:5
+msgid "Export to Facebook"
+msgstr "ส่งออกไปยัง Facebook"
+
+#: ../extensions/Exporters/FacebookExport/FacebookExport.ui.h:6
+msgid "In this photo"
+msgstr "ในภาพถ่ายนี้"
+
+#: ../extensions/Exporters/FacebookExport/FacebookExport.ui.h:7
+#: ../src/XmpTagsImporter.cs:90
+msgid "Location"
+msgstr "สถานที่"
+
+#: ../extensions/Exporters/FacebookExport/FacebookExport.ui.h:8
+msgid "Login"
+msgstr "เข้าระบบ"
+
+#: ../extensions/Exporters/FacebookExport/FacebookExport.ui.h:9
+msgid "Logout"
+msgstr "ออกจากระบบ"
+
+#: ../extensions/Exporters/FacebookExport/FacebookExport.ui.h:10
+#: ../src/Widgets/InfoBox.cs:212
+msgid "Name"
+msgstr "ชื่อ"
+
+#: ../extensions/Exporters/FacebookExport/FacebookExport.ui.h:11
+msgid "Not logged in"
+msgstr ""
+
+#: ../extensions/Exporters/FacebookExport/FacebookExport.ui.h:12
+msgid "Permissions:"
+msgstr "สิทธิ์:"
+
+#: ../extensions/Exporters/FacebookExport/FacebookExport.ui.h:13
+msgid "Stay Connected"
+msgstr "คงการเชื่อมต่อไว้"
+
+#: ../extensions/Exporters/FacebookExport/FacebookExport.ui.h:14
+msgid "Use an existing album"
msgstr ""
-#: ../src/CameraFileSelectionDialog.cs:275
-msgid "Select Destination"
+#: ../extensions/Exporters/FacebookExport/FacebookExport.ui.h:15
+msgid "Who is this?"
msgstr ""
-#: ../src/CameraSelectionDialog.cs:27 ../src/StockIcons.cs:27
-msgid "Camera"
-msgstr "กล้อง"
+#: ../extensions/Exporters/FlickrExport/FlickrExport.addin.xml.h:1
+msgid "_23hq..."
+msgstr ""
-#: ../src/CameraSelectionDialog.cs:28
-msgid "Port"
-msgstr "พอร์ต"
+#: ../extensions/Exporters/FlickrExport/FlickrExport.addin.xml.h:2
+msgid "_Flickr..."
+msgstr "_Flickr..."
-#: ../src/CDExport.cs:57
-#, csharp-format
-msgid "Transferring picture \"{0}\" To CD"
+#: ../extensions/Exporters/FlickrExport/FlickrExport.addin.xml.h:3
+msgid "_Zooomr..."
+msgstr "_Zooomr..."
+
+#: ../extensions/Exporters/FlickrExport/FlickrExport.cs:105
+#: ../extensions/Exporters/FlickrExport/FlickrExport.glade.h:5
+msgid "Authorize"
msgstr ""
-#. This indicates the current photo is photo {0} of {1} out of photos
-#: ../src/CDExport.cs:59 ../src/FlickrExport.cs:91 ../src/GalleryExport.cs:587
-#: ../src/ProgressDialog.cs:75 ../src/TimeDialog.cs:130
+#: ../extensions/Exporters/FlickrExport/FlickrExport.cs:111
#, csharp-format
-msgid "{0} of {1}"
-msgstr "{0} จาก {1}"
+msgid ""
+"Return to this window after you have finished the authorization process on "
+"{0} and click the \"Complete Authorization\" button below"
+msgstr ""
-#: ../src/CDExport.cs:71 ../src/FlickrExport.cs:96 ../src/FolderExport.cs:176
-#: ../src/GalleryExport.cs:602
-msgid "Done Sending Photos"
+#: ../extensions/Exporters/FlickrExport/FlickrExport.cs:112
+msgid "Complete Authorization"
msgstr ""
-#: ../src/CDExport.cs:73 ../src/FolderExport.cs:178
-msgid "Transfer Complete"
+#: ../extensions/Exporters/FlickrExport/FlickrExport.cs:117
+#, csharp-format
+msgid "Logging into {0}"
+msgstr "กำลังเข้าระบบยัง {0}"
+
+#: ../extensions/Exporters/FlickrExport/FlickrExport.cs:118
+msgid "Checking credentials..."
msgstr ""
-#: ../src/CDExport.cs:79 ../src/FolderExport.cs:183
-msgid "Error While Transferring"
+#: ../extensions/Exporters/FlickrExport/FlickrExport.cs:125
+#, csharp-format
+msgid "Welcome {0} you are connected to {1}"
msgstr ""
-#: ../src/CDExport.cs:84 ../src/FolderExport.cs:189
-msgid "Error Transferring"
+#: ../extensions/Exporters/FlickrExport/FlickrExport.cs:128
+#, csharp-format
+msgid "Sign in as a different user"
msgstr ""
-#: ../src/CDExport.cs:99 ../src/FolderExport.cs:215
-msgid "Error: Error while transferring; Aborting"
+#: ../extensions/Exporters/FlickrExport/FlickrExport.cs:133
+#, csharp-format
+msgid "Used {0} of your allowed {1} monthly quota"
msgstr ""
-#: ../src/CDExport.cs:102 ../src/FolderExport.cs:218
-msgid "Error: File Already Exists; Aborting"
+#: ../extensions/Exporters/FlickrExport/FlickrExport.cs:297
+msgid "Unable to log on"
+msgstr "ไม่สามารถเข้าระบบได้"
+
+#: ../extensions/Exporters/FlickrExport/FlickrExport.cs:317
+#, csharp-format
+msgid "Waiting for response {0} of {1}"
+msgstr "กำลังรอการตอบกลับ {0} จาก {1}"
+
+#: ../extensions/Exporters/FlickrExport/FlickrExport.cs:344
+#: ../extensions/Exporters/GalleryExport/GalleryExport.cs:777
+#, csharp-format
+msgid "Uploading picture \"{0}\""
msgstr ""
-#: ../src/ColorDialog.cs:301
-msgid "Error saving adjusted photo"
+#: ../extensions/Exporters/FlickrExport/FlickrExport.cs:367
+#, csharp-format
+msgid "Error Uploading To {0}: {1}"
+msgstr "เกิดข้อผิดพลาดขณะอัปโหลดไปยัง {0}: {1}"
+
+#: ../extensions/Exporters/FlickrExport/FlickrExport.cs:454
+msgid "Unable to log on."
msgstr ""
-#: ../src/ColorDialog.cs:302 ../src/Loupe.cs:53 ../src/MainWindow.cs:1712
-#: ../src/PhotoView.cs:337
+#: ../extensions/Exporters/FlickrExport/FlickrExport.cs:455
#, csharp-format
-msgid "Received exception \"{0}\". Unable to save photo {1}"
+msgid ""
+"F-Spot was unable to log on to {0}. Make sure you have given the "
+"authentication using {0} web browser interface."
msgstr ""
-#: ../src/Exif.cs:226
-msgid "Image Directory"
+#: ../extensions/Exporters/FlickrExport/FlickrExport.glade.h:1
+#: ../src/f-spot.glade.h:8
+msgid "<b>Account</b>"
msgstr ""
-#: ../src/Exif.cs:228
-msgid "Thumbnail Directory"
+#: ../extensions/Exporters/FlickrExport/FlickrExport.glade.h:2
+#: ../extensions/Exporters/FolderExport/FolderExport.glade.h:5
+#: ../extensions/Exporters/GalleryExport/GalleryExport.glade.h:3
+#: ../extensions/Exporters/PicasaWebExport/PicasaWebExport.glade.h:2
+#: ../extensions/Exporters/SmugMugExport/SmugMugExport.glade.h:2
+#: ../extensions/Exporters/TabbloExport/ui/TabbloExport.ui.h:2
+#: ../src/f-spot.glade.h:14 ../src/UI.Dialog/ui/AdjustTimeDialog.ui.h:5
+msgid "<b>Photos</b>"
msgstr ""
-#: ../src/Exif.cs:230
-msgid "Exif Directory"
+#: ../extensions/Exporters/FlickrExport/FlickrExport.glade.h:3
+#: ../extensions/Exporters/FolderExport/FolderExport.glade.h:6
+#: ../extensions/Exporters/GalleryExport/GalleryExport.glade.h:4
+#: ../extensions/Exporters/PicasaWebExport/PicasaWebExport.glade.h:4
+#: ../extensions/Exporters/SmugMugExport/SmugMugExport.glade.h:4
+#: ../src/f-spot.glade.h:16
+msgid "<b>Style</b>"
msgstr ""
-#: ../src/Exif.cs:232
-msgid "GPS Directory"
+#: ../extensions/Exporters/FlickrExport/FlickrExport.glade.h:4
+msgid "<b>Viewing permissions</b>"
msgstr ""
-#: ../src/Exif.cs:234
-msgid "InterOperability Directory"
+#: ../extensions/Exporters/FlickrExport/FlickrExport.glade.h:6
+#: ../extensions/Exporters/GalleryExport/GalleryExport.glade.h:8
+#: ../extensions/Exporters/PicasaWebExport/PicasaWebExport.glade.h:9
+#: ../extensions/Exporters/SmugMugExport/SmugMugExport.glade.h:6
+#: ../extensions/Exporters/TabbloExport/ui/TabbloExport.ui.h:5
+#: ../src/f-spot.glade.h:44
+msgid "Export"
+msgstr "ส่งออก"
+
+#: ../extensions/Exporters/FlickrExport/FlickrExport.glade.h:7
+msgid "Export tag _hierarchy"
msgstr ""
-#: ../src/Exif.cs:236
-msgid "Unknown Directory"
+#: ../extensions/Exporters/FlickrExport/FlickrExport.glade.h:8
+msgid ""
+"F-Spot needs your authorization in order to upload photos to your {0} "
+"account. Press the \"Authorize\" button to open a web browser and give F-"
+"Spot the authorization. "
msgstr ""
-#: ../src/FlickrExport.cs:86 ../src/GalleryExport.cs:583
-#, csharp-format
-msgid "Uploading picture \"{0}\""
+#: ../extensions/Exporters/FlickrExport/FlickrExport.glade.h:9
+msgid "Ignore _top level tags"
msgstr ""
-#: ../src/FlickrExport.cs:98 ../src/GalleryExport.cs:604
-msgid "Upload Complete"
+#: ../extensions/Exporters/FlickrExport/FlickrExport.glade.h:10
+msgid "Private"
+msgstr "ส่วนตัว"
+
+#: ../extensions/Exporters/FlickrExport/FlickrExport.glade.h:11
+msgid "Public"
msgstr ""
-#: ../src/FlickrExport.cs:103
-msgid "Error Uploading To Flickr"
+#: ../extensions/Exporters/FlickrExport/FlickrExport.glade.h:12
+msgid "Strip _metadata"
msgstr ""
-#: ../src/FlickrExport.cs:144
-msgid "Unable to log on."
+#: ../extensions/Exporters/FlickrExport/FlickrExport.glade.h:13
+msgid "Visible to Family"
msgstr ""
-#: ../src/FlickrExport.cs:145
-msgid ""
-"F-Spot was unable to log on to Flickr. Make sure you have given the "
-"authentication using Flickr web browser interface."
+#: ../extensions/Exporters/FlickrExport/FlickrExport.glade.h:14
+msgid "Visible to Friends"
msgstr ""
-#: ../src/FlickrExport.cs:158 ../src/GalleryExport.cs:547
-msgid "Uploading Pictures"
+#: ../extensions/Exporters/FlickrExport/FlickrExport.glade.h:16
+#: ../extensions/Exporters/PicasaWebExport/PicasaWebExport.glade.h:21
+#: ../src/f-spot.glade.h:96
+msgid "_Export tags"
msgstr ""
-#: ../src/FolderExport.cs:105
+#: ../extensions/Exporters/FlickrExport/FlickrExport.glade.h:17
+#: ../extensions/Exporters/FolderExport/FolderExport.glade.h:18
+#: ../extensions/Exporters/GalleryExport/GalleryExport.glade.h:21
+#: ../extensions/Exporters/PicasaWebExport/PicasaWebExport.glade.h:25
+#: ../extensions/Exporters/SmugMugExport/SmugMugExport.glade.h:15
+#: ../src/f-spot.glade.h:109
+msgid "_Resize to: "
+msgstr "_ปรับขนาดเป็น:"
+
+#: ../extensions/Exporters/FlickrExport/FlickrExport.glade.h:18
+msgid "_View photos in browser when done uploading"
+msgstr ""
+
+#: ../extensions/Exporters/FlickrExport/FlickrExport.glade.h:19
+#: ../extensions/Exporters/FolderExport/FolderExport.glade.h:20
+#: ../extensions/Exporters/GalleryExport/GalleryExport.glade.h:24
+#: ../extensions/Exporters/PicasaWebExport/PicasaWebExport.glade.h:27
+#: ../extensions/Exporters/SmugMugExport/SmugMugExport.glade.h:17
+#: ../src/f-spot.glade.h:125
+msgid "pixels"
+msgstr "พิกเซล"
+
+#: ../extensions/Exporters/FolderExport/FolderExport.addin.xml.h:1
+msgid "F_older..."
+msgstr "โ_ฟลเดอร์..."
+
+#: ../extensions/Exporters/FolderExport/FolderExport.cs:119
msgid "Select Export Folder"
msgstr ""
-#: ../src/FolderExport.cs:138
+#: ../extensions/Exporters/FolderExport/FolderExport.cs:174
msgid "Building Gallery"
msgstr ""
+#: ../extensions/Exporters/FolderExport/FolderExport.cs:218
+#, csharp-format
+msgid "Exporting \"{0}\"..."
+msgstr ""
+
+#: ../extensions/Exporters/FolderExport/FolderExport.cs:225
+#, csharp-format
+msgid "Error Copying \"{0}\" to Gallery:{2}{1}"
+msgstr ""
+
+#: ../extensions/Exporters/FolderExport/FolderExport.cs:251
+#, csharp-format
+msgid "Transferring to \"{0}\""
+msgstr "กำลังถ่ายโอนไปยัง \"{0}\""
+
+#: ../extensions/Exporters/FolderExport/FolderExport.cs:252
+msgid "Transferring..."
+msgstr ""
+
+#. No need to check result here as if result is not true, an Exception will be thrown before
+#: ../extensions/Exporters/FolderExport/FolderExport.cs:257
+msgid "Export Complete."
+msgstr "ส่งออกเสร็จสมบูรณ์"
+
+#: ../extensions/Exporters/FolderExport/FolderExport.cs:259
+msgid "Exporting Photos Completed."
+msgstr ""
+
+#: ../extensions/Exporters/FolderExport/FolderExport.cs:326
+msgid "Exporting Photos"
+msgstr "กำลังส่งออกภาพถ่าย"
+
+#. Note for translators: light as clear, opposite as dark
+#: ../extensions/Exporters/FolderExport/FolderExport.cs:736
+msgid "Light"
+msgstr ""
+
+#: ../extensions/Exporters/FolderExport/FolderExport.cs:737
+msgid "Dark"
+msgstr ""
+
#. Abbreviation of previous
-#: ../src/FolderExport.cs:701
+#: ../extensions/Exporters/FolderExport/FolderExport.cs:917
msgid "Prev"
msgstr "ก่อนหน้า"
-#: ../src/FolderExport.cs:706 ../src/f-spot.glade.h:115
+#: ../extensions/Exporters/FolderExport/FolderExport.cs:919
+#: ../extensions/Exporters/FolderExport/FolderExport.cs:1160
+#: ../src/CameraFileSelectionDialog.cs:83
+msgid "Index"
+msgstr "ดัชนี"
+
+#. Don't care otherwise, Tags sounds reasonable
+#: ../extensions/Exporters/FolderExport/FolderExport.cs:922
+#: ../extensions/Exporters/FolderExport/FolderExport.cs:1094
+#: ../extensions/Exporters/FolderExport/FolderExport.cs:1134
+#: ../src/MainWindow.cs:366 ../src/Widgets/Sidebar.cs:56
+msgid "Tags"
+msgstr "ป้ายกำกับ"
+
+#: ../extensions/Exporters/FolderExport/FolderExport.cs:925
+#: ../src/f-spot.glade.h:58 ../src/ItemAction.cs:102
msgid "Next"
msgstr "ถัดไป"
-#: ../src/FolderExport.cs:814
+#: ../extensions/Exporters/FolderExport/FolderExport.cs:1029
msgid "Gallery generated by"
msgstr ""
-#: ../src/FolderExport.cs:857
+#: ../extensions/Exporters/FolderExport/FolderExport.cs:1069
+msgid "Show Styles"
+msgstr ""
+
+#: ../extensions/Exporters/FolderExport/FolderExport.cs:1070
+msgid "Hide Styles"
+msgstr ""
+
+#: ../extensions/Exporters/FolderExport/FolderExport.cs:1105
+#: ../extensions/Exporters/FolderExport/FolderExport.cs:1106
+#: ../src/ui/main_window.ui.h:25
+msgid "Tags: "
+msgstr "ป้ายกำกับ:"
+
+#: ../extensions/Exporters/FolderExport/FolderExport.cs:1237
+#: ../extensions/Exporters/FolderExport/FolderExport.cs:1370
msgid "Page:"
msgstr "หน้า:"
-#: ../src/FullScreenView.cs:102
-msgid "Exit fullscreen"
-msgstr "ออกจากเต็มหน้าจอ"
-
-#: ../src/f-spot.glade.h:1
+#: ../extensions/Exporters/FolderExport/FolderExport.glade.h:1
msgid "\n"
msgstr "\n"
-#: ../src/f-spot.glade.h:3
-msgid " "
-msgstr " "
+#: ../extensions/Exporters/FolderExport/FolderExport.glade.h:3
+#: ../src/f-spot.glade.h:11
+msgid "<b>Destination</b>"
+msgstr ""
-#: ../src/f-spot.glade.h:4
-msgid "..."
-msgstr "..."
+#: ../extensions/Exporters/FolderExport/FolderExport.glade.h:4
+msgid "<b>Export Method</b>"
+msgstr ""
-#: ../src/f-spot.glade.h:5
-msgid "0000:00:00 00:00:00"
+#: ../extensions/Exporters/FolderExport/FolderExport.glade.h:8
+msgid "Create _gallery using \"Original\""
msgstr ""
-#: ../src/f-spot.glade.h:6
-msgid "00:00:00"
+#: ../extensions/Exporters/FolderExport/FolderExport.glade.h:9
+msgid "Create standalone _web gallery"
msgstr ""
-#: ../src/f-spot.glade.h:7
-msgid "5"
+#: ../extensions/Exporters/FolderExport/FolderExport.glade.h:10
+msgid "D_escription:"
+msgstr "_คำอธิบาย:"
+
+#: ../extensions/Exporters/FolderExport/FolderExport.glade.h:11
+msgid "Export _tags"
+msgstr "ส่งออก_ป้ายกำกับ"
+
+#: ../extensions/Exporters/FolderExport/FolderExport.glade.h:12
+msgid "Export tag _icons"
+msgstr "ส่งออกไ_อคอนป้ายกำกับ"
+
+#: ../extensions/Exporters/FolderExport/FolderExport.glade.h:13
+msgid "Folder Export"
+msgstr "ส่งออกโฟลเดอร์"
+
+#: ../extensions/Exporters/FolderExport/FolderExport.glade.h:14
+msgid "G_allery Name:"
msgstr ""
-#: ../src/f-spot.glade.h:8
-msgid "<b></b>"
+#: ../extensions/Exporters/FolderExport/FolderExport.glade.h:15
+msgid "Open _destination when done exporting"
msgstr ""
-#: ../src/f-spot.glade.h:9
-msgid "<b>Account</b>"
+#: ../extensions/Exporters/FolderExport/FolderExport.glade.h:17
+msgid "_Folder:"
+msgstr "โ_ฟลเดอร์"
+
+#: ../extensions/Exporters/FolderExport/FolderExport.glade.h:19
+msgid "_Save the files only"
msgstr ""
-#: ../src/f-spot.glade.h:10
-msgid "<b>Action</b>"
+#: ../extensions/Exporters/GalleryExport/FormClient.cs:295
+msgid "Unhandled exception"
msgstr ""
-#: ../src/f-spot.glade.h:11
-msgid "<b>Album</b>"
-msgstr "<b>อัลบั้ม</b>"
+#: ../extensions/Exporters/GalleryExport/GalleryExport.addin.xml.h:1
+msgid "Web _Gallery..."
+msgstr ""
-#: ../src/f-spot.glade.h:12
-msgid "<b>Co_rrections</b>"
+#: ../extensions/Exporters/GalleryExport/GalleryExport.cs:52
+msgid ""
+"Cannot connect to a Gallery for which the version is unknown.\n"
+"Please check that you have Remote plugin 1.0.8 or later"
msgstr ""
-#: ../src/f-spot.glade.h:13
-msgid "<b>Color Management</b>"
+#: ../extensions/Exporters/GalleryExport/GalleryExport.cs:391
+msgid "Invalid URL"
msgstr ""
-#: ../src/f-spot.glade.h:14
-msgid "<b>Color Temperature</b>"
+#: ../extensions/Exporters/GalleryExport/GalleryExport.cs:392
+msgid "The gallery URL entry does not appear to be a valid URL"
msgstr ""
-#: ../src/f-spot.glade.h:15
-msgid "<b>Destination</b>"
+#: ../extensions/Exporters/GalleryExport/GalleryExport.cs:402
+#: ../extensions/Exporters/GalleryExport/GalleryExport.cs:429
+#: ../extensions/Exporters/GalleryExport/GalleryExport.cs:440
+msgid "Error while connecting to Gallery"
+msgstr "เกิดข้อผิดพลาดขณะเชื่อมต่อกับ Gallery"
+
+#: ../extensions/Exporters/GalleryExport/GalleryExport.cs:403
+#: ../extensions/Exporters/GalleryExport/GalleryExport.cs:430
+#: ../extensions/Exporters/GalleryExport/GalleryExport.cs:441
+#, csharp-format
+msgid "The following error was encountered while attempting to log in: {0}"
msgstr ""
-#: ../src/f-spot.glade.h:16
-msgid "<b>End Date</b>"
+#: ../extensions/Exporters/GalleryExport/GalleryExport.cs:417
+msgid "A Gallery with this name already exists"
msgstr ""
-#: ../src/f-spot.glade.h:17
-msgid "<b>Export Method</b>"
+#: ../extensions/Exporters/GalleryExport/GalleryExport.cs:418
+#, csharp-format
+msgid ""
+"There is already a Gallery with the same name in your registered Galleries. "
+"Please choose a unique name."
msgstr ""
-#: ../src/f-spot.glade.h:18
-msgid "<b>Exposure</b>"
+#: ../extensions/Exporters/GalleryExport/GalleryExport.cs:528
+msgid "(TopLevel)"
+msgstr "(ชั้นบนสุด)"
+
+#: ../extensions/Exporters/GalleryExport/GalleryExport.cs:590
+msgid "Invalid Gallery name"
msgstr ""
-#: ../src/f-spot.glade.h:19
-msgid "<b>From Photo</b>"
+#: ../extensions/Exporters/GalleryExport/GalleryExport.cs:591
+msgid ""
+"The gallery name contains invalid characters.\n"
+"Only letters, numbers, - and _ are allowed"
msgstr ""
-#: ../src/f-spot.glade.h:20
+#: ../extensions/Exporters/GalleryExport/GalleryExport.cs:796
+#, csharp-format
+msgid "Error uploading picture \"{0}\" to Gallery: {1}"
+msgstr ""
+
+#: ../extensions/Exporters/GalleryExport/GalleryExport.cs:824
+#: ../extensions/Exporters/PicasaWebExport/PicasaWebExport.cs:727
+#: ../extensions/Exporters/SmugMugExport/SmugMugExport.cs:630
+msgid "(No Gallery)"
+msgstr ""
+
+#: ../extensions/Exporters/GalleryExport/GalleryExport.cs:916
+#: ../extensions/Exporters/PicasaWebExport/PicasaWebExport.cs:849
+#: ../extensions/Exporters/SmugMugExport/SmugMugExport.cs:726
+msgid "(Not Connected)"
+msgstr "(ไม่ได้เชื่อมต่อ)"
+
+#: ../extensions/Exporters/GalleryExport/GalleryExport.cs:917
+#: ../extensions/Exporters/PicasaWebExport/PicasaWebExport.cs:850
+#: ../extensions/Exporters/SmugMugExport/SmugMugExport.cs:727
+msgid "(No Albums)"
+msgstr "(ไม่มีอัลบั้ม)"
+
+#: ../extensions/Exporters/GalleryExport/GalleryExport.cs:969
+#: ../extensions/Exporters/PicasaWebExport/PicasaWebExport.cs:915
+#: ../extensions/Exporters/SmugMugExport/SmugMugExport.cs:768
+msgid "No account selected"
+msgstr ""
+
+#: ../extensions/Exporters/GalleryExport/GalleryExport.glade.h:1
+#: ../extensions/Exporters/PicasaWebExport/PicasaWebExport.glade.h:1
+#: ../extensions/Exporters/SmugMugExport/SmugMugExport.glade.h:1
+#: ../src/f-spot.glade.h:9
+msgid "<b>Album</b>"
+msgstr "<b>อัลบั้ม</b>"
+
+#: ../extensions/Exporters/GalleryExport/GalleryExport.glade.h:2
+#: ../src/f-spot.glade.h:12
msgid "<b>Gallery</b>"
msgstr ""
-#: ../src/f-spot.glade.h:21
-msgid "<b>Histo_gram</b>"
+#: ../extensions/Exporters/GalleryExport/GalleryExport.glade.h:5
+#: ../extensions/Exporters/PicasaWebExport/PicasaWebExport.glade.h:5
+msgid "<span weight='bold' size='larger'>Error Connecting to Gallery</span>\n"
msgstr ""
-#: ../src/f-spot.glade.h:22
-msgid "<b>Histogram</b>"
+#: ../extensions/Exporters/GalleryExport/GalleryExport.glade.h:9
+msgid "Export _titles and comments"
msgstr ""
-#: ../src/f-spot.glade.h:23
-msgid "<b>Metadata</b>"
+#: ../extensions/Exporters/GalleryExport/GalleryExport.glade.h:10
+#: ../extensions/Exporters/PicasaWebExport/PicasaWebExport.glade.h:10
+#: ../extensions/Exporters/SmugMugExport/SmugMugExport.glade.h:7
+msgid "Open _album in browser when done uploading"
msgstr ""
-#: ../src/f-spot.glade.h:24
-msgid "<b>Photograph Layout</b>"
+#: ../extensions/Exporters/GalleryExport/GalleryExport.glade.h:11
+#: ../extensions/Exporters/PicasaWebExport/PicasaWebExport.glade.h:11
+msgid "Please verify that the settings for this gallery are correct."
msgstr ""
-#: ../src/f-spot.glade.h:25
-msgid "<b>Photos to Burn</b>"
+#: ../extensions/Exporters/GalleryExport/GalleryExport.glade.h:12
+msgid "U_RL:"
+msgstr "U_RL:"
+
+#: ../extensions/Exporters/GalleryExport/GalleryExport.glade.h:13
+msgid "_Album Name:"
+msgstr "ชื่อ_อัลบั้ม:"
+
+#: ../extensions/Exporters/GalleryExport/GalleryExport.glade.h:14
+#: ../extensions/Exporters/PicasaWebExport/PicasaWebExport.glade.h:19
+#: ../extensions/Exporters/SmugMugExport/SmugMugExport.glade.h:11
+msgid "_Description:"
+msgstr "_คำอธิบาย:"
+
+#: ../extensions/Exporters/GalleryExport/GalleryExport.glade.h:16
+#: ../extensions/Exporters/PicasaWebExport/PicasaWebExport.glade.h:22
+#: ../extensions/Exporters/SmugMugExport/SmugMugExport.glade.h:13
+#: ../src/f-spot.glade.h:97
+msgid "_Export to Album:"
+msgstr "_ส่งออกไปยังอัลบั้ม:"
+
+#: ../extensions/Exporters/GalleryExport/GalleryExport.glade.h:17
+msgid "_Gallery Name:"
msgstr ""
-#: ../src/f-spot.glade.h:26
-msgid "<b>Photos</b>"
+#: ../extensions/Exporters/GalleryExport/GalleryExport.glade.h:18
+#: ../extensions/Exporters/PicasaWebExport/PicasaWebExport.glade.h:23
+msgid "_Gallery:"
msgstr ""
-#: ../src/f-spot.glade.h:27
-msgid "<b>Predefined</b>"
+#: ../extensions/Exporters/GalleryExport/GalleryExport.glade.h:19
+msgid "_Parent Album:"
msgstr ""
-#: ../src/f-spot.glade.h:28
-msgid "<b>Preview</b>"
+#: ../extensions/Exporters/GalleryExport/GalleryExport.glade.h:20
+#: ../extensions/Exporters/PicasaWebExport/PicasaWebExport.glade.h:24
+#: ../extensions/Exporters/SmugMugExport/SmugMugExport.glade.h:14
+#: ../extensions/Exporters/TabbloExport/ui/TabbloExport.ui.h:10
+msgid "_Password:"
+msgstr "รหัส_ผ่าน:"
+
+#: ../extensions/Exporters/GalleryExport/GalleryExport.glade.h:22
+msgid "_Title:"
+msgstr "_ชื่อ:"
+
+#: ../extensions/Exporters/GalleryExport/GalleryExport.glade.h:23
+#: ../extensions/Exporters/PicasaWebExport/PicasaWebExport.glade.h:26
+#: ../extensions/Exporters/SmugMugExport/SmugMugExport.glade.h:16
+#: ../extensions/Exporters/TabbloExport/ui/TabbloExport.ui.h:11
+msgid "_Username:"
+msgstr "_ชื่อผู้ใช้:"
+
+#: ../extensions/Exporters/GalleryExport/GalleryRemote.cs:361
+msgid "Error reading server response"
msgstr ""
-#: ../src/f-spot.glade.h:29
-msgid "<b>Printer Details</b>"
+#. failed to find the response
+#: ../extensions/Exporters/GalleryExport/GalleryRemote.cs:373
+msgid "Server returned response without Gallery content"
msgstr ""
-#: ../src/f-spot.glade.h:30
-msgid "<b>Reference Photo</b>"
+#: ../extensions/Exporters/GalleryExport/GalleryRemote.cs:710
+msgid "Error while creating new album"
+msgstr "เกิดข้อผิดพลาดขณะสร้างอัลบั้มใหม่"
+
+#: ../extensions/Exporters/GalleryExport/GalleryRemote.cs:711
+#, csharp-format
+msgid ""
+"The following error was encountered while attempting to perform the "
+"requested operation:\n"
+"{0} ({1})"
msgstr ""
-#: ../src/f-spot.glade.h:31
-msgid "<b>Start Date</b>"
+#: ../extensions/Exporters/PicasaWebExport/PicasaWebExport.addin.xml.h:1
+msgid "_PicasaWeb..."
msgstr ""
-#: ../src/f-spot.glade.h:32
-msgid "<b>Style</b>"
+#: ../extensions/Exporters/PicasaWebExport/PicasaWebExport.cs:441
+msgid "Error while creating Album"
+msgstr "เกิดข้อผิดพลาดขณะสร้างอัลบั้ม"
+
+#: ../extensions/Exporters/PicasaWebExport/PicasaWebExport.cs:442
+#, csharp-format
+msgid ""
+"The following error was encountered while attempting to create an album: {0}"
msgstr ""
-#: ../src/f-spot.glade.h:33
-msgid "<b>_White Balance</b>"
+#: ../extensions/Exporters/PicasaWebExport/PicasaWebExport.cs:620
+#, csharp-format
+msgid "{0} Sent"
msgstr ""
-#: ../src/f-spot.glade.h:34
-msgid "<small> </small>"
+#: ../extensions/Exporters/PicasaWebExport/PicasaWebExport.cs:622
+#, csharp-format
+msgid "{0} of approx. {1}"
+msgstr "{0} จากประมาณ {1}"
+
+#: ../extensions/Exporters/PicasaWebExport/PicasaWebExport.cs:691
+#: ../extensions/Exporters/SmugMugExport/SmugMugExport.cs:594
+#, csharp-format
+msgid "Error Uploading To Gallery: {0}"
msgstr ""
-#: ../src/f-spot.glade.h:35
-msgid "<small>1 of 1</small>"
+#: ../extensions/Exporters/PicasaWebExport/PicasaWebExport.cs:778
+#, csharp-format
+msgid "Available space: {0}, {1}% used out of {2}"
msgstr ""
-#: ../src/f-spot.glade.h:36
-msgid "<small></small>"
+#: ../extensions/Exporters/PicasaWebExport/PicasaWebExport.cs:891
+#, csharp-format
+msgid ""
+"The selected album has a limit of {0} pictures,\n"
+"which would be passed with the current selection of {1} images"
msgstr ""
-#: ../src/f-spot.glade.h:37
+#: ../extensions/Exporters/PicasaWebExport/PicasaWebExport.glade.h:3
+msgid "<b>PicasaWeb Export</b>"
+msgstr ""
+
+#: ../extensions/Exporters/PicasaWebExport/PicasaWebExport.glade.h:7
msgid ""
-"<small><i>Enable this option to store tags and descriptions inside \n"
-"supported image formats.</i></small>"
+"<span weight='bold' size='larger'>Your Google Account is locked</span>\n"
msgstr ""
-#: ../src/f-spot.glade.h:39
-msgid "<small>C_ontrast:</small>"
+#: ../extensions/Exporters/PicasaWebExport/PicasaWebExport.glade.h:12
+msgid ""
+"Please verify that the settings for this gallery are correct.\n"
+"Enter the letters as they are shown in the image in\n"
+"the 'Captcha' field. <i>Letters are not case-sensitive</i>"
msgstr ""
-#: ../src/f-spot.glade.h:40
-msgid "<small>Te_mp:</small>"
+#: ../extensions/Exporters/PicasaWebExport/PicasaWebExport.glade.h:15
+#: ../extensions/Exporters/SmugMugExport/SmugMugExport.glade.h:8
+msgid "Public Album"
msgstr ""
-#: ../src/f-spot.glade.h:41
-msgid "<small>_Brightness:</small>"
+#: ../extensions/Exporters/PicasaWebExport/PicasaWebExport.glade.h:16
+#: ../extensions/Exporters/SmugMugExport/SmugMugExport.glade.h:10
+msgid "_Album Title:"
+msgstr "ชื่อ_อัลบั้ม:"
+
+#: ../extensions/Exporters/PicasaWebExport/PicasaWebExport.glade.h:17
+msgid "_Autorotate"
msgstr ""
-#: ../src/f-spot.glade.h:42
-msgid "<small>_Exposure:</small>"
+#: ../extensions/Exporters/PicasaWebExport/PicasaWebExport.glade.h:18
+msgid "_Captcha:"
msgstr ""
-#: ../src/f-spot.glade.h:43
-msgid "<small>_Hue:</small>"
+#: ../extensions/Exporters/SmugMugExport/SmugMugExport.addin.xml.h:1
+msgid "_SmugMug..."
msgstr ""
-#: ../src/f-spot.glade.h:44
-msgid "<small>_Saturation:</small>"
+#: ../extensions/Exporters/SmugMugExport/SmugMugExport.glade.h:3
+msgid "<b>SmugMug Export</b>"
msgstr ""
-#: ../src/f-spot.glade.h:45
-msgid "<small>_Tint:</small>"
+#: ../extensions/Exporters/SmugMugExport/SmugMugExport.glade.h:9
+msgid "_Account:"
+msgstr "_บัญชี:"
+
+#: ../extensions/Exporters/TabbloExport/Tabblo/Connection.cs:132
+#, csharp-format
+msgid "Uploading photo \"{0}\""
+msgstr "กำลังอัปโหลดภาพถ่าย \"{0}\""
+
+#: ../extensions/Exporters/TabbloExport/Tabblo/Connection.cs:206
+msgid "Logging into Tabblo"
msgstr ""
-#: ../src/f-spot.glade.h:46
-msgid "<span weight='bold' size='larger'>Error Connecting to Gallery</span>\n"
+#: ../extensions/Exporters/TabbloExport/Tabblo/Connection.cs:267
+msgid "Obtaining URL for upload"
msgstr ""
-#: ../src/f-spot.glade.h:48
-msgid "Ad_just Color..."
-msgstr "ปรับ_สี..."
+#: ../extensions/Exporters/TabbloExport/TabbloExport.addin.xml.h:1
+msgid "_Tabblo..."
+msgstr ""
-#: ../src/f-spot.glade.h:49
-msgid "Adjust Color"
-msgstr "ปรับสี"
+#: ../extensions/Exporters/TabbloExport/TabbloExport.cs:308
+msgid "Done sending photos"
+msgstr "ส่งภาพถ่ายเสร็จแล้ว"
-#: ../src/f-spot.glade.h:50
-msgid "Adjust Time"
-msgstr "แก้ไขเวลา"
+#: ../extensions/Exporters/TabbloExport/TabbloExport.cs:310
+msgid "Upload complete"
+msgstr "อัปโหลดเสร็จสมบูรณ์"
-#: ../src/f-spot.glade.h:51
-msgid "Adjust _Time"
-msgstr "แก้ไขเ_วลา"
+#: ../extensions/Exporters/TabbloExport/TabbloExport.cs:316
+msgid "Error uploading to Tabblo: "
+msgstr ""
-#: ../src/f-spot.glade.h:52
-msgid "Appears to have been taken on:"
+#: ../extensions/Exporters/TabbloExport/ui/TabbloExport.ui.h:1
+msgid "<b>F-Spot tags</b>"
msgstr ""
-#: ../src/f-spot.glade.h:53
-msgid "Arranged _by"
-msgstr "เ_รียงตาม"
+#: ../extensions/Exporters/TabbloExport/ui/TabbloExport.ui.h:3
+msgid "<b>Tabblo account</b>"
+msgstr ""
-#: ../src/f-spot.glade.h:54
-msgid "Attach tag:"
-msgstr "ป้ายที่มี:"
+#: ../extensions/Exporters/TabbloExport/ui/TabbloExport.ui.h:4
+msgid ""
+"<small><i>F-Spot tags can help you track the export status of photos. "
+"Example: Use one tag for the photos that you plan to export, and another one "
+"for those already exported. Here, you can tell F-Spot to automatically "
+"replace these tags as appropriate.</i></small>"
+msgstr ""
-#: ../src/f-spot.glade.h:55
-msgid "Authorize"
+#: ../extensions/Exporters/TabbloExport/ui/TabbloExport.ui.h:6
+msgid "Rem_ove from exported photos:"
msgstr ""
-#: ../src/f-spot.glade.h:56 ../src/StockIcons.cs:26
-msgid "Browse"
+#: ../extensions/Exporters/TabbloExport/ui/TabbloExport.ui.h:7
+msgid "Select..."
+msgstr "เลือก..."
+
+#: ../extensions/Exporters/TabbloExport/ui/TabbloExport.ui.h:8
+msgid "_Attach to exported photos:"
msgstr ""
-#: ../src/f-spot.glade.h:57
-msgid "CD"
-msgstr "ซีดี"
+#: ../extensions/Exporters/TabbloExport/ui/TrustError.ui.h:1
+msgid "<b>{0}</b>."
+msgstr "<b>{0}</b>"
-#: ../src/f-spot.glade.h:58
-msgid "C_aption:"
+#: ../extensions/Exporters/TabbloExport/ui/TrustError.ui.h:2
+msgid "A trust error occured while attempting to access"
msgstr ""
-#: ../src/f-spot.glade.h:59
-msgid "C_ontrast:"
+#: ../extensions/Exporters/TabbloExport/ui/TrustError.ui.h:3
+msgid "Abort this session"
msgstr ""
-#: ../src/f-spot.glade.h:60
-msgid "Camera Selection"
-msgstr "เลือกกล้องดิจิทัล"
+#: ../extensions/Exporters/TabbloExport/ui/TrustError.ui.h:4
+msgid "Always trust this site's certificate"
+msgstr ""
-#: ../src/f-spot.glade.h:61
-msgid "Co_nfigure"
-msgstr "_ตั้งค่า"
+#: ../extensions/Exporters/TabbloExport/ui/TrustError.ui.h:5
+msgid "Do you wish to:"
+msgstr ""
-#: ../src/f-spot.glade.h:62
-msgid "Copy Locat_ion"
-msgstr "คัดลอก_ที่อยู่"
+#: ../extensions/Exporters/TabbloExport/ui/TrustError.ui.h:6
+msgid "Trust Error"
+msgstr ""
-#: ../src/f-spot.glade.h:63
-msgid "Copy _Files to: "
-msgstr "คัดลอกแ_ฟ้มไปยัง:"
+#: ../extensions/Exporters/TabbloExport/ui/TrustError.ui.h:7
+msgid "Trust the site's certificate this once"
+msgstr ""
+
+#: ../extensions/Exporters/ZipExport/ZipExport.addin.xml.h:1
+msgid "Compressed fil_e..."
+msgstr "แฟ้ม_บีบอัด..."
+
+#: ../extensions/Exporters/ZipExport/ZipExport.cs:47
+#: ../src/Widgets/EditorPage.cs:197
+msgid "No selection available"
+msgstr "ไม่ได้เลือกพื้นที่"
+
+#: ../extensions/Exporters/ZipExport/ZipExport.cs:48
+msgid ""
+"This tool requires an active selection. Please select one or more pictures "
+"and try again"
+msgstr "เครื่องมือนี้จำเป็นต้องเลือกรูปภาพตั้งแต่หนึ่งรูปขึ้นไป กรุณาลองอีกครั้ง"
-#: ../src/f-spot.glade.h:64
-msgid "Copy file to the Photos folder"
+#: ../extensions/Exporters/ZipExport/ZipExport.cs:64
+msgid "Select export folder"
+msgstr "เลือกโฟลเดอร์ส่งออก"
+
+#: ../extensions/Exporters/ZipExport/ZipExport.cs:102
+msgid "Exporting files"
msgstr ""
-#: ../src/f-spot.glade.h:65
-msgid "Create CD"
-msgstr "สร้างซีดี"
+#: ../extensions/Exporters/ZipExport/ZipExport.cs:108
+#, csharp-format
+msgid "Preparing photo \"{0}\""
+msgstr "กำลังเตรียมภาพถ่าย \"{0}\""
-#: ../src/f-spot.glade.h:66
-msgid "Create New _Tag..."
-msgstr "สร้าง_ป้ายใหม่..."
+#: ../extensions/Exporters/ZipExport/ZipExport.glade.h:1
+msgid "_Create"
+msgstr "_สร้าง"
-#: ../src/f-spot.glade.h:67
-msgid "Create _New Version..."
-msgstr "สร้างเ_วอร์ชันใหม่..."
+#: ../extensions/Exporters/ZipExport/ZipExport.glade.h:2
+msgid "_File name:"
+msgstr "_ชื่อแฟ้ม:"
-#: ../src/f-spot.glade.h:68
-msgid "Create _gallery using \"Original\""
+#: ../extensions/Exporters/ZipExport/ZipExport.glade.h:3
+msgid "_Location:"
+msgstr "_ตำแหน่งเก็บ:"
+
+#: ../extensions/Exporters/ZipExport/ZipExport.glade.h:4
+msgid "_Scale:"
msgstr ""
-#: ../src/f-spot.glade.h:69
-msgid "Create standalone _web gallery"
+#: ../extensions/Tools/HashJob/HashJob.cs:53
+msgid ""
+"In order to detect duplicates on pictures you imported before 0.5.0, F-Spot "
+"needs to analyze your image collection. This is not done by default as it's "
+"time consuming. You can Start or Pause this update process using this dialog."
msgstr ""
-#: ../src/f-spot.glade.h:70
-msgid "Crop photo to _fit"
+#: ../extensions/Tools/HashJob/HashJob.cs:59
+#, csharp-format
+msgid ""
+"You currently have {0} photos needing md5 calculation, and {1} pending jobs"
msgstr ""
-#: ../src/f-spot.glade.h:71
-msgid "D_escription:"
-msgstr "_คำอธิบาย:"
+#: ../extensions/Tools/HashJob/HashJob.cs:75 ../src/ui/main_window.ui.h:38
+msgid "_Close"
+msgstr "ปิ_ด"
-#: ../src/f-spot.glade.h:72
-msgid "Directory"
-msgstr "ไดเรคทอรี"
+#: ../extensions/Tools/HashJob/HashJob.cs:102
+msgid "Processing images..."
+msgstr ""
-#: ../src/f-spot.glade.h:73
-msgid "Display Side_bar"
-msgstr "แสดงแถบ_ข้าง"
+#: ../extensions/Tools/HashJob/HashJob.cs:108
+msgid "Stopped"
+msgstr ""
-#: ../src/f-spot.glade.h:74
-msgid "Display T_ags"
-msgstr "แสดง_ป้าย"
+#: ../extensions/Tools/HashJob/HashJob.addin.xml.h:1
+msgid "Check for Duplicates..."
+msgstr "ตรวจสอบรูปภาพที่ซ้ำกัน..."
-#: ../src/f-spot.glade.h:75
-msgid "Display Too_lbar"
-msgstr "แสดงแ_ถบเครื่องมือ"
+#: ../extensions/Tools/LiveWebGallery/GalleryRequestHandler.cs:107
+msgid "F-Spot Gallery"
+msgstr "แกลเลอรี F-Spot"
-#: ../src/f-spot.glade.h:76
-msgid "Display _Dates"
-msgstr "แสดง_วันที่"
+#: ../extensions/Tools/LiveWebGallery/GalleryRequestHandler.cs:108
+msgid "The web gallery seems to be offline now"
+msgstr ""
-#: ../src/f-spot.glade.h:77
-msgid "Display _Timeline"
-msgstr "แสดงแถบเว_ลา"
+#: ../extensions/Tools/LiveWebGallery/GalleryRequestHandler.cs:109
+msgid "Show All"
+msgstr "แสดงทั้งหมด"
-#: ../src/f-spot.glade.h:78
-msgid "E-_Mail:"
-msgstr "อีเ_มล:"
+#: ../extensions/Tools/LiveWebGallery/GalleryRequestHandler.cs:119
+#, csharp-format
+msgid "{0} photo"
+msgid_plural "{0} photos"
+msgstr[0] "ภาพถ่าย {0} ภาพ"
-#: ../src/f-spot.glade.h:79
-msgid "E_xport titles and comments"
+#: ../extensions/Tools/LiveWebGallery/GalleryRequestHandler.cs:161
+#: ../extensions/Tools/LiveWebGallery/ui/LiveWebGallery.ui.h:8
+msgid "Current View"
msgstr ""
-#: ../src/f-spot.glade.h:80
-msgid "E_xport to CD..."
-msgstr "ส่งออกเป็_นซีดี..."
+#: ../extensions/Tools/LiveWebGallery/GalleryRequestHandler.cs:164
+msgid "Selected"
+msgstr "ที่เลือกอยู่"
-#: ../src/f-spot.glade.h:81
-msgid "Edit Tag Icon"
+#: ../extensions/Tools/LiveWebGallery/LiveWebGallery.addin.xml.h:1
+msgid "Live Web Gallery"
msgstr ""
-#: ../src/f-spot.glade.h:82
-msgid "Edit icon"
-msgstr "แก้ไขไอคอน"
+#: ../extensions/Tools/LiveWebGallery/ui/LiveWebGallery.ui.h:1
+msgid ""
+"<small><i>The gallery stays active until you either deactivate it or close\n"
+"F-Spot. Make sure local viewers access it bypassing HTTP proxy.</i></small>"
+msgstr ""
-#: ../src/f-spot.glade.h:83
-msgid "Export"
-msgstr "ส่งออก"
+#: ../extensions/Tools/LiveWebGallery/ui/LiveWebGallery.ui.h:3
+msgid ""
+"<small><i>When the gallery is active, above is the URL you need to open \n"
+"on another computer to access the shared photos.</i></small>"
+msgstr ""
-#: ../src/f-spot.glade.h:84
-msgid "Export _titles and comments"
+#: ../extensions/Tools/LiveWebGallery/ui/LiveWebGallery.ui.h:5
+msgid "Activates and deactivates the web gallery"
msgstr ""
-#: ../src/f-spot.glade.h:85
-msgid "Export to _Flickr..."
-msgstr "ส่งออกไป_Flickr..."
+#: ../extensions/Tools/LiveWebGallery/ui/LiveWebGallery.ui.h:6
+msgid "Allow viewers to add tags"
+msgstr ""
-#: ../src/f-spot.glade.h:86
-msgid "Export to _Folder..."
-msgstr "ส่งออกไปโ_ฟลเดอร์..."
+#: ../extensions/Tools/LiveWebGallery/ui/LiveWebGallery.ui.h:7
+msgid "Copy URL to clipboard"
+msgstr "คัดลอก URL ไปยังคลิปบอร์ด"
-#: ../src/f-spot.glade.h:87
-msgid "Export to _Web Gallery..."
+#: ../extensions/Tools/LiveWebGallery/ui/LiveWebGallery.ui.h:9
+msgid "F-Spot Live Web Gallery"
msgstr ""
-#: ../src/f-spot.glade.h:88
-msgid "F-Spot"
-msgstr "F-Spot"
+#: ../extensions/Tools/LiveWebGallery/ui/LiveWebGallery.ui.h:10
+msgid "Gallery URL:"
+msgstr ""
-#: ../src/f-spot.glade.h:89
-msgid "F-Spot Photo Album"
-msgstr "อัลบั้มรูป F-Spot"
+#: ../extensions/Tools/LiveWebGallery/ui/LiveWebGallery.ui.h:11
+msgid "Limit number of shared photos to"
+msgstr ""
-#: ../src/f-spot.glade.h:91
-msgid "F-Spot View"
+#: ../extensions/Tools/LiveWebGallery/ui/LiveWebGallery.ui.h:12
+msgid "Options:"
msgstr ""
-#: ../src/f-spot.glade.h:92
-msgid ""
-"F-Spot needs your authorization in order to upload photos to your Flickr "
-"account. Press the button \"Authorize\" to open a web browser and give F-"
-"Spot the authorization. Close the browser and press \"Continue\" to start "
-"the export process."
+#: ../extensions/Tools/LiveWebGallery/ui/LiveWebGallery.ui.h:13
+msgid "Photos with a Tag"
+msgstr "ภาพถ่ายที่มีป้ายกำกับ"
+
+#: ../extensions/Tools/LiveWebGallery/ui/LiveWebGallery.ui.h:14
+msgid "Selected Photos"
+msgstr "ภาพถ่ายที่เลือก"
+
+#: ../extensions/Tools/LiveWebGallery/ui/LiveWebGallery.ui.h:15
+msgid "Share:"
+msgstr "แบ่งปัน:"
+
+#: ../extensions/Tools/LiveWebGallery/ui/LiveWebGallery.ui.h:16
+msgid "Views:"
+msgstr "มุมมอง:"
+
+#: ../extensions/Tools/LiveWebGallery/LiveWebGalleryDialog.cs:89
+msgid "none"
+msgstr "ไม่มี"
+
+#: ../extensions/Tools/LiveWebGallery/LiveWebGalleryDialog.cs:92
+#, csharp-format
+msgid " Gallery: {0}, Photos: {1}, Last client: {3}"
msgstr ""
-#: ../src/f-spot.glade.h:94
-msgid "Fin_d"
-msgstr "ค้น_หา"
+#: ../extensions/Tools/LiveWebGallery/LiveWebGalleryDialog.cs:156
+msgid "Gallery is inactive"
+msgstr ""
-#: ../src/f-spot.glade.h:95
-msgid "Find by _Tag"
-msgstr "ค้นหาโดย_ป้าย"
+#: ../extensions/Tools/MergeDb/MergeDb.addin.xml.h:1
+msgid "Merge Db"
+msgstr "ผสานฐานข้อมูล"
-#: ../src/f-spot.glade.h:96
-msgid "Folder Export"
-msgstr "ส่งออกโฟลเดอร์"
+#: ../extensions/Tools/MergeDb/MergeDb.cs:73
+msgid "Error opening the selected file"
+msgstr "เกิดข้อผิดพลาดขณะเปิดแฟ้มที่เลือก"
-#: ../src/f-spot.glade.h:97
+#: ../extensions/Tools/MergeDb/MergeDb.cs:74
+#, csharp-format
msgid ""
-"From Screen\n"
-"Standard RGB"
+"The file you selected is not a valid or supported database.\n"
+"\n"
+"Received exception \"{0}\"."
msgstr ""
-#: ../src/f-spot.glade.h:99
+#: ../extensions/Tools/MergeDb/MergeDb.glade.h:1
msgid ""
-"Full Page\n"
-"Standard - 4x6"
+"<small><i>Choose the location of the database you want to import from</i></"
+"small>"
msgstr ""
-#: ../src/f-spot.glade.h:101
-msgid "G_allery Name:"
+#: ../extensions/Tools/MergeDb/MergeDb.glade.h:2
+msgid ""
+"<small><i>Choose what to import from the selected db.\n"
+"\"New Rolls Only\" is the smart option that will avoid re-importing photos "
+"you could have imported during a previous operation.\n"
+"\"A Single Import Roll\" let you choose which roll you want to merge back.\n"
+"\"Everything\" will import everything, creating duplicates if you already "
+"imported from that database.</i></small>"
msgstr ""
-#: ../src/f-spot.glade.h:102
-msgid "G_allery:"
+#: ../extensions/Tools/MergeDb/MergeDb.glade.h:6
+msgid ""
+"<small><i>Copy the images locally or keep them where they are. If you chose "
+"the later, be sure that this location will stay accessible from f-spot.</i></"
+"small>"
msgstr ""
-#: ../src/f-spot.glade.h:103
-msgid "Gallery"
+#: ../extensions/Tools/MergeDb/MergeDb.glade.h:7
+msgid "A Single Import Roll"
msgstr ""
-#: ../src/f-spot.glade.h:104
+#: ../extensions/Tools/MergeDb/MergeDb.glade.h:8
+msgid "Copy images to photos folder"
+msgstr "คัดลอกรูปภาพไปยังโฟลเดอร์ภาพถ่าย"
+
+#: ../extensions/Tools/MergeDb/MergeDb.glade.h:9
+msgid "Database Location:"
+msgstr ""
+
+#: ../extensions/Tools/MergeDb/MergeDb.glade.h:10
+msgid "Everything"
+msgstr "ทุกอย่าง"
+
+#: ../extensions/Tools/MergeDb/MergeDb.glade.h:11
+msgid "Import:"
+msgstr "นำเข้า:"
+
+#: ../extensions/Tools/MergeDb/MergeDb.glade.h:12
+msgid "Keep the images at their original location"
+msgstr ""
+
+#: ../extensions/Tools/MergeDb/MergeDb.glade.h:13
+msgid "Merge another F-Spot collection"
+msgstr ""
+
+#: ../extensions/Tools/MergeDb/MergeDb.glade.h:14
+msgid "New Rolls Only"
+msgstr ""
+
+#: ../extensions/Tools/MergeDb/MergeDb.glade.h:15
+#: ../src/FileImportBackend.cs:248 ../src/UI.Dialog/ThreadProgressDialog.cs:58
+msgid "Skip"
+msgstr "ข้าม"
+
+#: ../extensions/Tools/MergeDb/PickFolderDialog.cs:33
+#, csharp-format
msgid ""
-"Hairline\n"
-"0.25\"\n"
-"0.5\"\n"
-"1\"\n"
+"<big>The database refers to files contained in the <b>{0}</b> folder.\n"
+" Please select that folder so I can do the mapping.</big>"
msgstr ""
-#: ../src/f-spot.glade.h:109
-msgid "Import"
-msgstr "นำเข้า"
+#: ../extensions/Tools/ScreensaverConfig/ScreensaverConfig.addin.xml.h:1
+msgid "Configure Screensaver"
+msgstr "ตั้งค่าโปรแกรมรักษาหน้าจอ"
-#: ../src/f-spot.glade.h:110
-msgid "Import Source:"
-msgstr "ข้อมูลที่จะนำเข้า:"
+#: ../extensions/Tools/ScreensaverConfig/ScreensaverConfigDialog.ui.h:1
+#: ../src/UI.Dialog/DateRangeDialog.cs:129
+msgid "All Images"
+msgstr "รูปภาพทั้งหมด"
-#: ../src/f-spot.glade.h:111
-msgid "Import photos"
-msgstr "นำเข้ารูปภาพ"
+#: ../extensions/Tools/ScreensaverConfig/ScreensaverConfigDialog.ui.h:2
+msgid "Delay:"
+msgstr "หน่วงเวลา:"
+
+#: ../extensions/Tools/ScreensaverConfig/ScreensaverConfigDialog.ui.h:3
+msgid "Display:"
+msgstr "แสดง:"
-#: ../src/f-spot.glade.h:112
-msgid "Include subdirectories"
+#: ../extensions/Tools/ScreensaverConfig/ScreensaverConfigDialog.ui.h:4
+msgid "Images tagged with:"
+msgstr "รูปภาพที่มีป้ายกำกับเป็น:"
+
+#: ../extensions/Tools/ScreensaverConfig/ScreensaverConfigDialog.ui.h:5
+msgid "Make F-Spot my screensaver"
+msgstr "กำหนดให้ F-Spot เป็นโปรแกรมรักษาหน้าจอ"
+
+#: ../extensions/Tools/ScreensaverConfig/ScreensaverConfigDialog.ui.h:6
+msgid "Screensaver Configuration"
+msgstr "ตั้งค่าโปรแกรมรักษาหน้าจอ"
+
+#: ../f-spot.schemas.in.h:1
+msgid "Display of transparent parts."
msgstr ""
-#: ../src/f-spot.glade.h:113 ../src/InfoDisplay.cs:11
-msgid "Metadata Browser"
+#: ../f-spot.schemas.in.h:2
+msgid "Enable this to allow interpolation on zoomed images."
msgstr ""
-#: ../src/f-spot.glade.h:114
-msgid "N_umber of Copies:"
+#: ../f-spot.schemas.in.h:3
+msgid "Height of the import dialog."
msgstr ""
-#: ../src/f-spot.glade.h:116
+#: ../f-spot.schemas.in.h:4
+msgid "Height of the main window."
+msgstr ""
+
+#: ../f-spot.schemas.in.h:5
+msgid "Height of the photo viewer window."
+msgstr ""
+
+#: ../f-spot.schemas.in.h:6
msgid ""
-"None\n"
-"Title\n"
-"Filename\n"
-"Date\n"
-"Photo Details"
+"If the 'transparency' option is set, the color specified in this option will "
+"be used as the transparent color when viewing images."
msgstr ""
-#: ../src/f-spot.glade.h:121
-msgid "Open _album in browser when done uploading"
+#: ../f-spot.schemas.in.h:7
+msgid "Interpolate image on zoom."
msgstr ""
-#: ../src/f-spot.glade.h:122
-msgid "Open _destination when done exporting"
+#: ../f-spot.schemas.in.h:8
+msgid "Maximize the main window."
+msgstr "ขยายหน้าต่างหลักเต็มจอ"
+
+#: ../f-spot.schemas.in.h:9
+msgid "Maximize the photo viewer window."
+msgstr "ขยายหน้าต่างแสดงภาพถ่ายเต็มจอ"
+
+#: ../f-spot.schemas.in.h:10
+msgid "Path to custom gtkrc for theming F-Spot."
msgstr ""
-#: ../src/f-spot.glade.h:123
-msgid "P_arent Tag:"
+#: ../f-spot.schemas.in.h:11
+msgid "Show dates in the thumbnail view."
msgstr ""
-#: ../src/f-spot.glade.h:124
-msgid "P_hoto Source:"
+#: ../f-spot.schemas.in.h:12
+msgid "Show ratings in the thumbnail view."
msgstr ""
-#: ../src/f-spot.glade.h:125
-msgid "Page 1 of 3"
+#: ../f-spot.schemas.in.h:13
+msgid "Show tags in the thumbnail view."
msgstr ""
-#: ../src/f-spot.glade.h:126
-msgid "Pause"
+#: ../f-spot.schemas.in.h:14
+msgid "Show the filename in the viewer window."
msgstr ""
-#: ../src/f-spot.glade.h:127
-msgid "Photo 0 of 0"
-msgstr "รูป 0 จาก 0"
+#: ../f-spot.schemas.in.h:15
+msgid "Show the filmstrip in the main window."
+msgstr ""
-#: ../src/f-spot.glade.h:128
-msgid "Photo _Size:"
+#: ../f-spot.schemas.in.h:16
+msgid "Show the sidebar in the main window."
msgstr ""
-#: ../src/f-spot.glade.h:129
-msgid "Please verify that the settings for this gallery are correct."
+#: ../f-spot.schemas.in.h:17
+msgid "Show the timeline in the main window."
msgstr ""
-#: ../src/f-spot.glade.h:130
-msgid "Preferences"
-msgstr "ปรับแต่ง"
+#: ../f-spot.schemas.in.h:18
+msgid "Show the toolbar in the main window."
+msgstr ""
-#: ../src/f-spot.glade.h:131
-msgid "Previous"
-msgstr "ก่อนหน้า"
+#: ../f-spot.schemas.in.h:19
+msgid "Show the toolbar in the photo viewer window."
+msgstr ""
-#: ../src/f-spot.glade.h:132
-msgid "Print"
-msgstr "พิมพ์"
+#: ../f-spot.schemas.in.h:20
+msgid "Size of the tag icons shown in the sidebar."
+msgstr ""
-#: ../src/f-spot.glade.h:133
-msgid "Print crop _marks"
+#: ../f-spot.schemas.in.h:21
+msgid "The X position to use for the main window."
msgstr ""
-#: ../src/f-spot.glade.h:134
-msgid "Re_fresh Thumbnail"
+#: ../f-spot.schemas.in.h:22
+msgid "The X position to use for the photo viewer window."
msgstr ""
-#: ../src/f-spot.glade.h:135
-msgid "Rem_ove Tag"
+#: ../f-spot.schemas.in.h:23
+msgid "The Y position to use for the main window."
msgstr ""
-#: ../src/f-spot.glade.h:136 ../src/StockIcons.cs:37
-msgid "Rotate _Left"
-msgstr "หมุนซ้า_ย"
+#: ../f-spot.schemas.in.h:24
+msgid "The Y position to use for the photo viewer window."
+msgstr ""
-#: ../src/f-spot.glade.h:137 ../src/StockIcons.cs:38
-msgid "Rotate _Right"
-msgstr "หมุน_ขวา"
+#: ../f-spot.schemas.in.h:25
+msgid "The color to use for transparent parts."
+msgstr ""
-#: ../src/f-spot.glade.h:138
-msgid "Select Photos to Copy From Camera..."
-msgstr "เลือกรูปที่ต้องการคัดลอกจากกล้องดิจิทัล..."
+#: ../f-spot.schemas.in.h:26
+msgid "The height dimension to use for the import dialog."
+msgstr ""
-#: ../src/f-spot.glade.h:139
-msgid "Select _All"
-msgstr "เลือก_ทั้งหมด"
+#: ../f-spot.schemas.in.h:27
+msgid "The height dimension to use for the main window."
+msgstr ""
-#: ../src/f-spot.glade.h:140
-msgid "Select _None"
-msgstr "ไม่เลือกทั้ง_หมด"
+#: ../f-spot.schemas.in.h:28
+msgid "The height dimension to use for the photo viewer window."
+msgstr ""
-#: ../src/f-spot.glade.h:141
-msgid "Select a Tag..."
-msgstr "เลือกป้าย..."
+#: ../f-spot.schemas.in.h:29
+msgid "The orientation of the filmstrip, if shown."
+msgstr ""
-#: ../src/f-spot.glade.h:142
-msgid "Select the camera from which you want to transfer files"
-msgstr "เลือกกล้องที่ต้องการเคลื่อนย้ายแฟ้ม"
+#: ../f-spot.schemas.in.h:30
+msgid "The orientation of the filmstrip."
+msgstr ""
-#: ../src/f-spot.glade.h:143
-msgid "Selected Camera: "
-msgstr "กล้องที่เลือก:"
+#: ../f-spot.schemas.in.h:31
+msgid "The size (width) of the sidebar in the main window."
+msgstr ""
-#: ../src/f-spot.glade.h:144
+#: ../f-spot.schemas.in.h:32
+msgid "The size of the sidebar in the main window."
+msgstr ""
+
+#: ../f-spot.schemas.in.h:33
+msgid "The width dimension to use for the import dialog."
+msgstr ""
+
+#: ../f-spot.schemas.in.h:34
+msgid "The width dimension to use for the main window."
+msgstr ""
+
+#: ../f-spot.schemas.in.h:35
+msgid "The width dimension to use for the photo viewer window."
+msgstr ""
+
+#: ../f-spot.schemas.in.h:36
+msgid "Use the current photo's filename as the viewer window's title."
+msgstr ""
+
+#: ../f-spot.schemas.in.h:37
+msgid "Width of the import dialog."
+msgstr ""
+
+#: ../f-spot.schemas.in.h:38
+msgid "Width of the main window."
+msgstr ""
+
+#: ../f-spot.schemas.in.h:39
+msgid "Width of the photo viewer window."
+msgstr ""
+
+#: ../f-spot.schemas.in.h:40
+msgid "Width of the preview image pane in the import dialog."
+msgstr ""
+
+#: ../f-spot.schemas.in.h:41
+msgid "X position of the main window."
+msgstr ""
+
+#: ../f-spot.schemas.in.h:42
+msgid "X position of the photo viewer window."
+msgstr ""
+
+#: ../f-spot.schemas.in.h:43
+msgid "Y position of the main window."
+msgstr ""
+
+#: ../f-spot.schemas.in.h:44
+msgid "Y position of the photo viewer window."
+msgstr ""
+
+#: ../f-spot.schemas.in.h:45
msgid ""
-"Selection\n"
-"Gallery\n"
-"Viewport"
+"You can choose how to display transparent parts in images. This option has "
+"no effect on photos but setting this value to CHECK_PATTERN or CUSTOM_COLOR "
+"could be useful when viewing icons or other artwork with transparent parts."
msgstr ""
-#: ../src/f-spot.glade.h:147
-msgid "Send _Mail..."
-msgstr "ส่งเป็น_อีเมล..."
+#: ../lib/libfspot/f-jpeg-utils.c:441 ../src/RotateCommand.cs:224
+msgid "File not found"
+msgstr "ไม่พบแฟ้ม"
-#: ../src/f-spot.glade.h:148
-msgid "Set Date Range"
-msgstr "กำหนดช่วงเวลา"
+#: ../lib/libfspot/f-jpeg-utils.c:464
+#, c-format
+msgid "Unknown transform type %d"
+msgstr ""
-#: ../src/f-spot.glade.h:149
-msgid "Set _Date Range..."
-msgstr "กำหนด_ช่วงเวลา..."
+#: ../lib/libfspot/f-jpeg-utils.c:472
+msgid "Operation failed"
+msgstr ""
-#: ../src/f-spot.glade.h:150
-msgid "Set as _Background"
-msgstr "ตั้งเป็น_พื้นหลัง"
+#: ../src/CameraFileSelectionDialog.cs:77
+msgid "Preview"
+msgstr "ภาพตัวอย่าง"
-#: ../src/f-spot.glade.h:151 ../src/TimeDialog.cs:113
+#: ../src/CameraFileSelectionDialog.cs:79
+msgid "Path"
+msgstr "พาธ"
+
+#: ../src/CameraFileSelectionDialog.cs:81 ../src/f-spot.glade.h:47
+msgid "File"
+msgstr "แฟ้ม"
+
+#: ../src/CameraFileSelectionDialog.cs:103
+msgid "Select Tag"
+msgstr "เลือกป้ายกำกับ"
+
+#: ../src/CameraFileSelectionDialog.cs:139
+msgid "Downloading Previews"
+msgstr "กำลังดาวน์โหลดภาพตัวอย่าง"
+
+#: ../src/CameraFileSelectionDialog.cs:149
#, csharp-format
-msgid "Shift all photos by {0}"
+msgid "Downloading Preview of {0}"
msgstr ""
-#: ../src/f-spot.glade.h:152
-msgid "Show or hide the side pane"
-msgstr "แสดงหรือซ่อนแถบข้าง"
+#: ../src/CameraFileSelectionDialog.cs:221
+#, csharp-format
+msgid "Copying file {0} of {1}"
+msgstr "กำลังคัดลอกแฟ้มที่ {0} จาก {1}"
-#: ../src/f-spot.glade.h:153
-msgid "Show or hide the toolbar"
-msgstr "แสดงหรือซ่อนแถบเครื่องมือ"
+#: ../src/CameraFileSelectionDialog.cs:236
+msgid "Error transferring file"
+msgstr ""
-#: ../src/f-spot.glade.h:154
-msgid "Side _pane"
+#: ../src/CameraFileSelectionDialog.cs:245
+msgid "Download Complete"
+msgstr "ดาวน์โหลดเสร็จสมบูรณ์"
+
+#: ../src/CameraFileSelectionDialog.cs:245
+msgid "Done Copying Files"
msgstr ""
-#: ../src/f-spot.glade.h:155
-msgid "So_urce Temp"
+#: ../src/CameraFileSelectionDialog.cs:269
+#, csharp-format
+msgid "Transferring \"{0}\" from camera"
msgstr ""
-#: ../src/f-spot.glade.h:156
-msgid "Space all photos by"
+#: ../src/CameraSelectionDialog.cs:29 ../src/Widgets/InfoBox.cs:231
+msgid "Camera"
+msgstr "กล้อง"
+
+#: ../src/CameraSelectionDialog.cs:30
+msgid "Port"
+msgstr "พอร์ต"
+
+#: ../src/Core/App.cs:276
+#, csharp-format
+msgid "No photos matching {0} found"
+msgstr "ไม่พบภาพถ่ายที่ตรงกับ {0}"
+
+#: ../src/Core/App.cs:277
+#, csharp-format
+msgid ""
+"The tag \"{0}\" is not applied to any photos. Try adding\n"
+"the tag to some photos or selecting a different tag in the\n"
+"F-Spot preference dialog."
+msgstr ""
+
+#: ../src/Core/App.cs:281
+msgid "Search returned no results"
msgstr ""
-#: ../src/f-spot.glade.h:157
+#: ../src/Core/App.cs:282
msgid ""
-"Standard RGB\n"
-"Image Profile\n"
-"Custom\n"
+"The tag F-Spot is looking for does not exist. Try\n"
+"selecting a different tag in the F-Spot preference\n"
+"dialog."
msgstr ""
-#: ../src/f-spot.glade.h:161
-msgid "Strip _metadata"
+#. Note for translators: Reparented is a picture becoming a version of another one
+#: ../src/Core/Photo.cs:371
+msgid "Reparented"
msgstr ""
-#: ../src/f-spot.glade.h:162
-msgid "Strip image _metadata"
+#: ../src/Core/Photo.cs:387
+#, csharp-format
+msgid "Modified"
+msgid_plural "Modified ({0})"
+msgstr[0] "มีการแก้ไข ({0})"
+
+#: ../src/Core/Photo.cs:408
+#, csharp-format
+msgid "Modified in {1}"
+msgstr "มีการแก้ไขใน {1}"
+
+#: ../src/Core/Photo.cs:408
+#, csharp-format
+msgid "Modified in {1} ({0})"
+msgstr "มีการแก้ไขใน {1} ({0})"
+
+#. Note that the original version is never stored in the photo_versions table in the
+#. database.
+#: ../src/Core/Photo.cs:574 ../src/f-spot.glade.h:62
+msgid "Original"
+msgstr "ต้นฉบับ"
+
+#: ../src/Editors/AutoStretchEditor.cs:17
+msgid "Auto Color"
+msgstr "ปรับสีอัตโนมัติ"
+
+#: ../src/Editors/ColorEditor.cs:38
+msgid "Adjust Colors"
+msgstr "ปรับสี"
+
+#: ../src/Editors/ColorEditor.cs:41
+msgid "Adjust"
+msgstr "ปรับ"
+
+#: ../src/Editors/CropEditor.cs:35
+msgid "4 x 3 (Book)"
msgstr ""
-#: ../src/f-spot.glade.h:163
-msgid "Tags: "
-msgstr "ป้าย:"
+#: ../src/Editors/CropEditor.cs:36
+msgid "4 x 6 (Postcard)"
+msgstr ""
-#: ../src/f-spot.glade.h:164
-msgid "Toolbar"
-msgstr "แถบเครื่องมือ"
+#: ../src/Editors/CropEditor.cs:37
+msgid "5 x 7 (L, 2L)"
+msgstr ""
-#: ../src/f-spot.glade.h:165
-msgid "U_RL:"
-msgstr "U_RL:"
+#: ../src/Editors/CropEditor.cs:38
+msgid "8 x 10"
+msgstr ""
-#: ../src/f-spot.glade.h:166
-msgid "View"
+#: ../src/Editors/CropEditor.cs:39
+msgid "Square"
msgstr ""
-#: ../src/f-spot.glade.h:167
-msgid "Was actually taken on: "
-msgstr "ถ่ายเมื่อ:"
+#: ../src/Editors/CropEditor.cs:42
+msgid "Crop"
+msgstr "ครอบตัด"
-#: ../src/f-spot.glade.h:168
-msgid "Will print using: US Letter size on Generic Postscript"
+#: ../src/Editors/CropEditor.cs:73
+msgid "Select the area that needs cropping."
msgstr ""
-#: ../src/f-spot.glade.h:169
-msgid "Write _metadata to file"
-msgstr "เ_ขียนข้อมูลภาพลงในแฟ้ม"
+#: ../src/Editors/CropEditor.cs:98
+msgid "No Constraint"
+msgstr "ไม่มีข้อกำหนด"
-#: ../src/f-spot.glade.h:170
-msgid "Zoom _in"
-msgstr "_ขยาย"
+#: ../src/Editors/CropEditor.cs:99
+msgid "Same as photo"
+msgstr "เหมือนภาพถ่าย"
-#: ../src/f-spot.glade.h:171
-msgid "Zoom _out"
-msgstr "_ย่อ"
+#: ../src/Editors/CropEditor.cs:104
+msgid "Custom Ratios..."
+msgstr "กำหนดสัดส่วน..."
-#: ../src/f-spot.glade.h:172
-msgid "Zoom in"
-msgstr "ขยาย"
+#: ../src/Editors/DesaturateEditor.cs:17
+msgid "Desaturate"
+msgstr ""
-#: ../src/f-spot.glade.h:173
-msgid "Zoom out"
-msgstr "ย่อ"
+#: ../src/Editors/RedEyeEditor.cs:19
+msgid "Red-eye Reduction"
+msgstr "ลดตาแดง"
-#: ../src/f-spot.glade.h:174
-msgid "_Album Name:"
-msgstr "ชื่อ_อัลบั้ม:"
+#: ../src/Editors/RedEyeEditor.cs:21
+msgid "Fix!"
+msgstr ""
-#: ../src/f-spot.glade.h:175
-msgid "_Attach Tag"
-msgstr "แ_ปะป้าย"
+#: ../src/Editors/RedEyeEditor.cs:25
+msgid "Select the eyes you wish to fix."
+msgstr ""
-#: ../src/f-spot.glade.h:176
-msgid "_Attach Tag to Selection"
-msgstr "แ_ปะป้ายให้รูปที่เลือก"
+#: ../src/Editors/SepiaEditor.cs:17
+msgid "Sepia Tone"
+msgstr ""
-#: ../src/f-spot.glade.h:177
-msgid "_Border:"
-msgstr "_ขอบ:"
+#: ../src/Editors/SoftFocusEditor.cs:32
+msgid "Soft Focus"
+msgstr ""
-#: ../src/f-spot.glade.h:178
-msgid "_Brightness:"
-msgstr "ความ_สว่าง:"
+#: ../src/Editors/TiltEditor.cs:30
+msgid "Straighten"
+msgstr ""
-#: ../src/f-spot.glade.h:179
-msgid "_Browse Previously Scheduled Files"
+#: ../src/FileImportBackend.cs:246
+msgid "Import error"
+msgstr "เกิดข้อผิดพลาดขณะนำเข้า"
+
+#: ../src/FileImportBackend.cs:247
+#, csharp-format
+msgid "Error importing {0}{2}{2}{1}"
msgstr ""
-#: ../src/f-spot.glade.h:180
-msgid "_Clear Date Range"
-msgstr "เ_ลิกกำหนดช่วงเวลา"
+#: ../src/Filters/ResizeFilter.cs:70 ../src/Filters/SharpFilter.cs:52
+#, csharp-format
+msgid "No way to save files of type \"{0}\""
+msgstr ""
-#: ../src/f-spot.glade.h:181
-msgid "_Close"
-msgstr "ปิ_ด"
+#: ../src/FSpot.addin.xml.h:1
+msgid "Copy Photo"
+msgstr "คัดลอกภาพถ่าย"
-#: ../src/f-spot.glade.h:182
+#: ../src/FSpot.addin.xml.h:2
+msgid "Export to"
+msgstr "ส่งออกไปยัง"
+
+#: ../src/FSpot.addin.xml.h:3
+msgid "Open _With"
+msgstr "เปิด_ด้วย"
+
+#: ../src/FSpot.addin.xml.h:4 ../src/ui/main_window.ui.h:16
+msgid "Rem_ove Tag"
+msgstr "_ลบป้ายกำกับ"
+
+#: ../src/FSpot.addin.xml.h:5 ../src/f-spot.glade.h:69
+#: ../src/SingleView.cs:424 ../src/ui/main_window.ui.h:17
+msgid "Rotate _Left"
+msgstr "หมุนซ้า_ย"
+
+#: ../src/FSpot.addin.xml.h:6 ../src/f-spot.glade.h:70
+#: ../src/SingleView.cs:425 ../src/ui/main_window.ui.h:18
+msgid "Rotate _Right"
+msgstr "หมุน_ขวา"
+
+#: ../src/FSpot.addin.xml.h:7
+msgid "Tools"
+msgstr "เครื่องมือ"
+
+#: ../src/FSpot.addin.xml.h:8 ../src/ui/main_window.ui.h:33
+msgid "_Attach Tag"
+msgstr "แ_ปะป้ายกำกับ"
+
+#: ../src/FSpot.addin.xml.h:9 ../src/ui/main_window.ui.h:42
msgid "_Delete From Drive"
msgstr "_ลบจากดิสก์"
-#: ../src/f-spot.glade.h:183
-msgid "_Delete Selected Tag"
-msgstr "_ลบป้ายที่เลือก"
+#: ../src/FSpot.addin.xml.h:10 ../src/ui/main_window.ui.h:61
+msgid "_Remove From Catalog"
+msgstr "_ลบจากแค็ตตาล็อก"
-#: ../src/f-spot.glade.h:184
-msgid "_Delete Version"
-msgstr "_ลบเวอร์ชัน"
+#: ../src/f-spot.glade.h:1
+msgid " "
+msgstr " "
-#: ../src/f-spot.glade.h:185
-msgid "_Description:"
-msgstr "_คำอธิบาย:"
+#: ../src/f-spot.glade.h:2
+msgid "1024 px"
+msgstr ""
-#: ../src/f-spot.glade.h:186
-msgid "_Destination Temp"
+#: ../src/f-spot.glade.h:3
+msgid "320 px"
msgstr ""
-#: ../src/f-spot.glade.h:187
-msgid "_Directory"
-msgstr "ไ_ดเรกทอรี"
+#: ../src/f-spot.glade.h:4
+msgid "480 px"
+msgstr ""
-#: ../src/f-spot.glade.h:188
-msgid "_Display:"
+#: ../src/f-spot.glade.h:5
+msgid "640 px"
msgstr ""
-#: ../src/f-spot.glade.h:189
-msgid "_Edit Selected Tag..."
-msgstr "แ_ก้ไขป้ายที่เลือก..."
+#: ../src/f-spot.glade.h:6
+msgid "800 px"
+msgstr ""
-#: ../src/f-spot.glade.h:190
-msgid "_Export"
-msgstr "_ส่งออก"
+#: ../src/f-spot.glade.h:7
+msgid "<b></b>"
+msgstr ""
-#: ../src/f-spot.glade.h:191
-msgid "_Export tags"
+#: ../src/f-spot.glade.h:10
+msgid "<b>Co_rrections</b>"
msgstr ""
-#: ../src/f-spot.glade.h:192
-msgid "_Export to Album:"
-msgstr "_ส่งออกเป็นอัลบั้ม:"
+#: ../src/f-spot.glade.h:13
+msgid "<b>Image Interpolation</b>"
+msgstr ""
-#: ../src/f-spot.glade.h:193
-msgid "_Flickr"
-msgstr "_Flickr"
+#: ../src/f-spot.glade.h:15
+msgid "<b>Size</b>"
+msgstr "<b>ขนาด</b>"
-#: ../src/f-spot.glade.h:194
-msgid "_Folder:"
-msgstr "โ_ฟลเดอร์"
+#: ../src/f-spot.glade.h:17
+msgid "<b>Summary</b>"
+msgstr "<b>สรุป</b>"
-#: ../src/f-spot.glade.h:195
-msgid "_Fullscreen"
-msgstr "เ_ต็มหน้าจอ"
+#: ../src/f-spot.glade.h:18
+msgid "<b>Transparent Parts</b>"
+msgstr "<b>ส่วนที่โปร่งใส</b>"
-#: ../src/f-spot.glade.h:196
-msgid "_Gallery"
+#: ../src/f-spot.glade.h:19
+msgid "<b>View all pictures imported</b>"
msgstr ""
-#: ../src/f-spot.glade.h:197
-msgid "_Gallery Name:"
+#: ../src/f-spot.glade.h:20
+msgid "<b>_White Balance</b>"
msgstr ""
-#: ../src/f-spot.glade.h:198
-msgid "_Gallery:"
+#: ../src/f-spot.glade.h:21
+msgid ""
+"<small><i>Enable this to allow interpolation on zoomed images. You shouldn't "
+"disable this for viewing photos, but disabling the interpolation could be "
+"usefull in icon design.</i></small>"
msgstr ""
-#: ../src/f-spot.glade.h:199
-msgid "_Hue:"
+#: ../src/f-spot.glade.h:22
+msgid ""
+"<small><i>You can choose how to display transparent parts in images. This "
+"option has no effect on photos, but setting this as check pattern or custom "
+"color could be usefull when viewing icons or other artworks with transparent "
+"parts.</i></small>"
msgstr ""
-#: ../src/f-spot.glade.h:200
-msgid "_Icon:"
-msgstr "ไ_อคอน:"
+#: ../src/f-spot.glade.h:23
+msgid "As _background"
+msgstr "แสดง_พื้นหลัง"
+
+#: ../src/f-spot.glade.h:24
+msgid "As _custom color: "
+msgstr "แสดงสีที่_กำหนด: "
+
+#: ../src/f-spot.glade.h:25
+msgid "As check _pattern"
+msgstr "แสดงตาห_มากรุก"
+
+#: ../src/f-spot.glade.h:26
+msgid "Attach Tags:"
+msgstr "แปะป้ายกำกับ:"
+
+#: ../src/f-spot.glade.h:27
+msgid "Attach tag:"
+msgstr "แปะป้ายกำกับ:"
-#: ../src/f-spot.glade.h:201
-msgid "_Import files after copy"
+#: ../src/f-spot.glade.h:29
+msgid "CD"
+msgstr "ซีดี"
+
+#: ../src/f-spot.glade.h:30
+msgid "C_ontrast:"
msgstr ""
-#: ../src/f-spot.glade.h:202
-msgid "_Import..."
-msgstr "_นำเข้า..."
+#: ../src/f-spot.glade.h:31
+msgid "C_reate"
+msgstr "_สร้าง"
-#: ../src/f-spot.glade.h:203
-msgid "_Metadata Browser"
-msgstr "ตัวแ_สดงข้อมูลรูปภาพ"
+#: ../src/f-spot.glade.h:32
+msgid "Camera Selection"
+msgstr "เลือกกล้องดิจิทัล"
-#: ../src/f-spot.glade.h:204
-msgid "_Month"
-msgstr "เ_ดือน"
+#: ../src/f-spot.glade.h:33
+msgid "Copy files to the Photos folder"
+msgstr "คัดลอกแฟ้มไปยังโฟลเดอร์ภาพถ่าย"
-#: ../src/f-spot.glade.h:205
-msgid "_Open album in browser when done uploading"
+#: ../src/f-spot.glade.h:34
+msgid "Create Mail"
+msgstr "สร้างเมล"
+
+#: ../src/f-spot.glade.h:35
+msgid "Create _icon for this tag when first used"
msgstr ""
-#: ../src/f-spot.glade.h:206
-msgid "_Open destination when done exporting"
+#: ../src/f-spot.glade.h:36
+msgid "Create a mail with the selected photos (possibly resized) attached"
msgstr ""
-#: ../src/f-spot.glade.h:207
-msgid "_Output:"
+#: ../src/f-spot.glade.h:37
+msgid "Detect duplicates"
msgstr ""
-#: ../src/f-spot.glade.h:208
-msgid "_Parent Album:"
+#: ../src/f-spot.glade.h:38
+msgid "Display File _Names"
+msgstr "แสดง_ชื่อแฟ้ม"
+
+#: ../src/f-spot.glade.h:39
+msgid "Display only those photos that were imported in specified Rolls."
msgstr ""
-#: ../src/f-spot.glade.h:209
-msgid "_Password:"
-msgstr "รหัส_ผ่าน:"
+#: ../src/f-spot.glade.h:40
+msgid "Do not send a mail"
+msgstr ""
-#: ../src/f-spot.glade.h:210
-msgid "_Prefix: "
+#: ../src/f-spot.glade.h:41
+msgid "E-_Mail:"
+msgstr "อีเ_มล:"
+
+#: ../src/f-spot.glade.h:42
+msgid "E_xport titles and comments"
msgstr ""
-#: ../src/f-spot.glade.h:211
-msgid "_Print..."
-msgstr "_พิมพ์..."
+#: ../src/f-spot.glade.h:43
+msgid "Estimated new size"
+msgstr ""
-#: ../src/f-spot.glade.h:212
-msgid "_Remove From Catalog"
-msgstr "_ลบจากแค็ตตาล็อก"
+#: ../src/f-spot.glade.h:45
+msgid "Extra large"
+msgstr "ใหญ่พิเศษ"
-#: ../src/f-spot.glade.h:213
-msgid "_Remove Tag From Selection"
-msgstr "_ลบป้ายของรูปที่เลือก"
+#: ../src/f-spot.glade.h:46
+msgid "F-Spot View"
+msgstr ""
-#: ../src/f-spot.glade.h:214
-msgid "_Rename Version"
-msgstr "เปลี่ยน_ชื่อเวอร์ชัน"
+#: ../src/f-spot.glade.h:48
+msgid "Filter on selected rolls"
+msgstr ""
-#: ../src/f-spot.glade.h:215
-msgid "_Resize to: "
-msgstr "_ปรับขนาดเป็น:"
+#: ../src/f-spot.glade.h:49
+msgid "G_allery:"
+msgstr ""
-#: ../src/f-spot.glade.h:216
-msgid "_Saturation:"
+#: ../src/f-spot.glade.h:50
+msgid "Gallery"
msgstr ""
-#: ../src/f-spot.glade.h:217
-msgid "_Save the files only"
+#: ../src/f-spot.glade.h:51 ../src/ImportCommand.cs:515
+#: ../src/MainWindow.cs:291
+msgid "Import"
+msgstr "นำเข้า"
+
+#. Translators: this string means 'source of import'
+#: ../src/f-spot.glade.h:53
+msgid "Import Source:"
+msgstr "ข้อมูลที่จะนำเข้า:"
+
+#: ../src/f-spot.glade.h:54
+msgid "Include subfolders"
msgstr ""
-#: ../src/f-spot.glade.h:218
-msgid "_Scale photos to no larger than: "
+#: ../src/f-spot.glade.h:55
+msgid "Large"
+msgstr "ใหญ่"
+
+#: ../src/f-spot.glade.h:56
+msgid "Manage your custom selection ratios"
msgstr ""
-#: ../src/f-spot.glade.h:219
-msgid "_Select Tags..."
-msgstr "เลือก_ป้าย..."
+#: ../src/f-spot.glade.h:57
+msgid "Medium"
+msgstr "กลาง"
-#: ../src/f-spot.glade.h:220
-msgid "_Sharpen..."
+#: ../src/f-spot.glade.h:59
+msgid "Number of photos in selected rolls:"
msgstr ""
-#: ../src/f-spot.glade.h:221
-msgid "_Slideshow"
-msgstr "แสดง_สไลด์"
+#: ../src/f-spot.glade.h:60
+msgid "Number of pictures"
+msgstr ""
-#: ../src/f-spot.glade.h:222
-msgid "_Strip metadata"
+#: ../src/f-spot.glade.h:61
+msgid "Open _Folder..."
+msgstr "เปิดโ_ฟลเดอร์..."
+
+#: ../src/f-spot.glade.h:63
+msgid "Original size (possible very large file size)"
msgstr ""
-#: ../src/f-spot.glade.h:223
-msgid "_Tag Name:"
-msgstr "ชื่อ_ป้าย:"
+#: ../src/f-spot.glade.h:64 ../src/UI.Dialog/ui/EditTagDialog.ui.h:4
+msgid "P_arent Tag:"
+msgstr ""
-#: ../src/f-spot.glade.h:224
-msgid "_Tags"
-msgstr "_ป้าย"
+#: ../src/f-spot.glade.h:65
+msgid "Pause"
+msgstr ""
-#: ../src/f-spot.glade.h:225
-msgid "_Title:"
-msgstr "_ชื่อ:"
+#: ../src/f-spot.glade.h:66
+msgid "Preferences"
+msgstr "ปรับแต่ง"
-#: ../src/f-spot.glade.h:226
-msgid "_URI:"
-msgstr "_URI:"
+#: ../src/f-spot.glade.h:67 ../src/ItemAction.cs:123
+msgid "Previous"
+msgstr "ก่อนหน้า"
-#: ../src/f-spot.glade.h:227
-msgid "_Untagged Photos"
-msgstr "รูปไ_ม่มีป้าย"
+#: ../src/f-spot.glade.h:68
+msgid "Repair"
+msgstr ""
-#: ../src/f-spot.glade.h:228
-msgid "_Username:"
-msgstr "_ชื่อผู้ใช้:"
+#: ../src/f-spot.glade.h:71
+msgid "Select Photos to Copy From Camera..."
+msgstr "เลือกภาพถ่ายที่ต้องการคัดลอกจากกล้องดิจิทัล..."
-#: ../src/f-spot.glade.h:229
-msgid "_Version"
-msgstr "เ_วอร์ชัน"
+#: ../src/f-spot.glade.h:72
+msgid "Select a Tag..."
+msgstr "เลือกป้ายกำกับ..."
-#: ../src/f-spot.glade.h:230
-msgid "_View"
-msgstr "_มุมมอง"
+#: ../src/f-spot.glade.h:73
+msgid "Select the camera from which you want to transfer files"
+msgstr "เลือกกล้องที่ต้องการเคลื่อนย้ายแฟ้ม"
-#: ../src/f-spot.glade.h:231
-msgid "_View photos in browser when done uploading"
+#: ../src/f-spot.glade.h:74
+msgid "Selected Camera: "
+msgstr "กล้องที่เลือก:"
+
+#: ../src/f-spot.glade.h:75
+msgid "Selection Constraints"
msgstr ""
-#: ../src/f-spot.glade.h:232
-msgid "_Virtual Filesystem"
+#: ../src/f-spot.glade.h:76 ../src/ui/main_window.ui.h:22
+msgid "Set as _Background"
+msgstr "ตั้งเป็น_พื้นหลัง"
+
+#: ../src/f-spot.glade.h:77
+msgid "Show all photos."
+msgstr "แสดงภาพถ่ายทั้งหมด"
+
+#: ../src/f-spot.glade.h:78
+msgid "Show or hide the side pane"
+msgstr "แสดงหรือซ่อนแถบข้าง"
+
+#: ../src/f-spot.glade.h:79
+msgid "Show or hide the toolbar"
+msgstr "แสดงหรือซ่อนแถบเครื่องมือ"
+
+#: ../src/f-spot.glade.h:80
+msgid "Side _pane"
msgstr ""
-#: ../src/f-spot.glade.h:233
-msgid "_Write only these photos to CD"
+#: ../src/f-spot.glade.h:81
+msgid "Small"
+msgstr "เล็ก"
+
+#: ../src/f-spot.glade.h:82
+msgid ""
+"Specify if an original size picture should be rotated or not. Smaller sizes "
+"are automatically rotated."
msgstr ""
-#: ../src/f-spot.glade.h:234
-msgid "dialog1"
+#: ../src/f-spot.glade.h:83
+msgid "Strip image _metadata"
msgstr ""
-#: ../src/f-spot.glade.h:235
-msgid "for a difference of"
+#. Note for translators: meant as Temperature
+#: ../src/f-spot.glade.h:85
+msgid "Te_mp:"
msgstr ""
-#: ../src/f-spot.glade.h:236
-msgid "img_000.jpg"
-msgstr "img_000.jpg"
+#: ../src/f-spot.glade.h:86
+msgid "Tiny"
+msgstr "จิ๋ว"
-#. The preceding text here is the second checkbutton in the Time dialog
-#. that says "Space all photos by []"
-#: ../src/f-spot.glade.h:237 ../src/TimeDialog.cs:111
-#, csharp-format
-msgid "min. Starting at {0}"
+#: ../src/f-spot.glade.h:87
+msgid "Total original size"
msgstr ""
-#: ../src/f-spot.glade.h:238
-msgid "pixels"
-msgstr "พิกเซล"
+#: ../src/f-spot.glade.h:88 ../src/ui/main_window.ui.h:29
+msgid "Zoom _in"
+msgstr "ซูมเ_ข้า"
-#: ../src/f-spot.glade.h:239
-msgid "x"
+#: ../src/f-spot.glade.h:89 ../src/ui/main_window.ui.h:30
+msgid "Zoom _out"
+msgstr "ซูม_ออก"
+
+#: ../src/f-spot.glade.h:90 ../src/ui/main_window.ui.h:31
+msgid "Zoom in"
+msgstr "ซูมเข้า"
+
+#: ../src/f-spot.glade.h:91 ../src/ui/main_window.ui.h:32
+msgid "Zoom out"
+msgstr "ซูมออก"
+
+#: ../src/f-spot.glade.h:92
+msgid "_Brightness:"
+msgstr "ความ_สว่าง:"
+
+#: ../src/f-spot.glade.h:93
+msgid "_Create Mail"
+msgstr "_สร้างเมล"
+
+#: ../src/f-spot.glade.h:94 ../src/ui/main_window.ui.h:45
+msgid "_Edit"
+msgstr "แ_ก้ไข"
+
+#: ../src/f-spot.glade.h:98
+msgid "_Exposure:"
msgstr ""
-#: ../src/GalleryExport.cs:391
-msgid "(TopLevel)"
-msgstr "(ชั้นบนสุด)"
+#: ../src/f-spot.glade.h:99
+msgid "_Flickr"
+msgstr "_Flickr"
+
+#: ../src/f-spot.glade.h:100 ../src/ui/main_window.ui.h:49
+msgid "_Fullscreen"
+msgstr "เ_ต็มจอ"
-#: ../src/GalleryExport.cs:608
-msgid "Error Uploading To Gallery"
+#: ../src/f-spot.glade.h:101
+msgid "_Gallery"
msgstr ""
-#: ../src/GalleryExport.cs:622
-msgid "(No Gallery)"
+#: ../src/f-spot.glade.h:102 ../src/ui/main_window.ui.h:50
+msgid "_Help"
+msgstr "_วิธีใช้"
+
+#: ../src/f-spot.glade.h:103
+msgid "_Hue:"
msgstr ""
-#: ../src/GalleryExport.cs:693
-msgid "(Not Connected)"
-msgstr "(ไม่ได้เชื่อมต่อ)"
+#: ../src/f-spot.glade.h:104
+msgid "_Interpolate image on zoom"
+msgstr ""
-#: ../src/GalleryExport.cs:694
-msgid "(No Albums)"
-msgstr "(ไม่มีอัลบั้ม)"
+#: ../src/f-spot.glade.h:105
+msgid "_New Window"
+msgstr ""
-#: ../src/GroupSelector.cs:55 ../src/GroupSelector.cs:56
-msgid "More dates"
+#: ../src/f-spot.glade.h:106
+msgid "_Open album in browser when done uploading"
msgstr ""
-#: ../src/GroupSelector.cs:58 ../src/GroupSelector.cs:59
-msgid "More directories"
+#: ../src/f-spot.glade.h:107
+msgid "_Open destination when done exporting"
msgstr ""
-#: ../src/GroupSelector.cs:61 ../src/GroupSelector.cs:62
-msgid "More"
+#: ../src/f-spot.glade.h:108 ../src/ui/main_window.ui.h:58
+msgid "_Photo"
+msgstr "_ภาพถ่าย"
+
+#: ../src/f-spot.glade.h:110
+msgid "_Saturation:"
msgstr ""
-#: ../src/ImportCommand.cs:28
-msgid "Select Folder"
-msgstr "เลือกโฟลเดอร์"
+#: ../src/f-spot.glade.h:111
+msgid "_Scale photos to no larger than: "
+msgstr ""
-#: ../src/ImportCommand.cs:223
-msgid "(No Cameras Detected)"
-msgstr "(ไม่พบกล้องดิจิทัล)"
+#: ../src/f-spot.glade.h:112 ../src/ui/main_window.ui.h:69
+msgid "_Slideshow"
+msgstr "แสดง_สไลด์"
-#: ../src/ImportCommand.cs:401
-#, csharp-format
-msgid "Loading {0} of {1}"
-msgstr "กำลังอ่าน {0} จาก {1}"
+#: ../src/f-spot.glade.h:113
+msgid "_Strip metadata"
+msgstr ""
-#: ../src/ImportCommand.cs:520
-msgid "Done Loading"
-msgstr "อ่านข้อมูลเรียบร้อย"
+#: ../src/f-spot.glade.h:114 ../src/UI.Dialog/ui/EditTagDialog.ui.h:6
+msgid "_Tag Name:"
+msgstr "ชื่อ_ป้ายกำกับ:"
-#: ../src/ImportCommand.cs:708
-msgid "Directory does not exist."
-msgstr "ไม่มีไดเรกทอรีนี้อยู่"
+#: ../src/f-spot.glade.h:115
+msgid "_Tint:"
+msgstr ""
-#: ../src/ImportCommand.cs:709
-#, csharp-format
+#: ../src/f-spot.glade.h:116
+msgid "_Toolbar"
+msgstr "แ_ถบเครื่องมือ"
+
+#: ../src/f-spot.glade.h:117
+msgid "_URI:"
+msgstr "_URI:"
+
+#: ../src/f-spot.glade.h:118 ../src/ui/main_window.ui.h:77
+msgid "_View"
+msgstr "_มุมมอง"
+
+#: ../src/f-spot.glade.h:119
+msgid "_Virtual Filesystem"
+msgstr ""
+
+#: ../src/f-spot.glade.h:120 ../src/Widgets/FindBar.cs:177
+msgid "and"
+msgstr ""
+
+#. at, or after a date, or between dates
+#: ../src/f-spot.glade.h:122
msgid ""
-"The directory you selected \"{0}\" does not exist. Please choose a "
-"different directory"
+"at\n"
+"after\n"
+"between"
msgstr ""
-#: ../src/ImportCommand.cs:742
-msgid "Select Tag"
-msgstr "เลือกป้าย"
+#: ../src/f-spot.glade.h:126
+msgid "x"
+msgstr ""
-#: ../src/ImportCommand.cs:747 ../src/StockIcons.cs:34
-#: ../src/TagCommands.cs:122 ../src/TagPopup.cs:20
-msgid "Create New Tag"
-msgstr "สร้างป้ายใหม่"
+#: ../src/FullScreenView.cs:58
+msgid "Hide"
+msgstr ""
-#: ../src/InfoBox.cs:72 ../src/PhotoVersionCommands.cs:55
-msgid "Name:"
-msgstr "ชื่อ:"
+#: ../src/FullScreenView.cs:60
+msgid "Hide Toolbar"
+msgstr "ซ่อนแถบเครื่องมือ"
+
+#: ../src/FullScreenView.cs:66
+msgid "Info"
+msgstr ""
-#: ../src/InfoBox.cs:74
-msgid "Version:"
-msgstr "รุ่น:"
+#: ../src/FullScreenView.cs:68 ../src/Widgets/InfoBox.cs:201
+msgid "Image Information"
+msgstr ""
-#: ../src/InfoBox.cs:76
-msgid "Date:"
-msgstr "วันที่:"
+#: ../src/FullScreenView.cs:73
+msgid "Exit fullscreen"
+msgstr "ออกจากเต็มหน้าจอ"
+
+#: ../src/FullScreenView.cs:81 ../src/MainWindow.cs:331
+#: ../src/SingleView.cs:88
+msgid "Slideshow"
+msgstr "แสดงสไลด์"
-#: ../src/InfoBox.cs:78
-msgid "Size:"
-msgstr "ขนาดรูป:"
+#: ../src/FullScreenView.cs:82
+msgid "Start slideshow"
+msgstr "เริ่มแสดงสไลด์"
-#: ../src/InfoBox.cs:80
-msgid "Exposure:"
+#: ../src/FullScreenView.cs:128
+msgid "Slide transition:"
msgstr ""
-#. The label for the root category is used in new and edit tag dialogs
-#: ../src/InfoBox.cs:214 ../src/TagStore.cs:415
-msgid "(None)"
-msgstr "(ไม่มี)"
+#: ../src/GroupSelector.cs:57 ../src/GroupSelector.cs:58
+msgid "More dates"
+msgstr ""
-#: ../src/InfoBox.cs:225 ../src/InfoBox.cs:234
-msgid "(Unknown)"
-msgstr "(ไม่มีข้อมูล)"
+#: ../src/GroupSelector.cs:60 ../src/GroupSelector.cs:61
+msgid "More"
+msgstr ""
-#: ../src/InfoDisplay.cs:167
-msgid "Extended Metadata"
-msgstr "ข้อมูลรูปภาพเพิ่มเติม"
+#: ../src/GroupSelector.cs:517 ../src/ui/main_window.ui.h:35
+msgid "_Clear Date Range"
+msgstr "_ล้างช่วงเวลา"
-#: ../src/InfoDisplay.cs:206
-msgid "No active photo"
+#: ../src/Imaging/Exif.cs:228
+msgid "Image Directory"
msgstr ""
-#: ../src/InfoDisplay.cs:208
-#, csharp-format
-msgid "The photo \"{0}\" does not exist"
-msgstr "ไม่มีรูป \"{0}\" อยู่"
+#: ../src/Imaging/Exif.cs:230
+msgid "Thumbnail Directory"
+msgstr ""
-#: ../src/InfoDisplay.cs:214
-msgid "No metadata available"
-msgstr "ไม่มีข้อมูลรูปภาพ"
+#: ../src/Imaging/Exif.cs:232
+msgid "Exif Directory"
+msgstr ""
+
+#: ../src/Imaging/Exif.cs:234
+msgid "GPS Directory"
+msgstr ""
+
+#: ../src/Imaging/Exif.cs:236
+msgid "InterOperability Directory"
+msgstr ""
+
+#: ../src/Imaging/Exif.cs:238
+msgid "Unknown Directory"
+msgstr ""
+
+#: ../src/Imaging/ImageFile.cs:122
+msgid "Writing to this file format is not supported"
+msgstr ""
-#: ../src/IptcFile.cs:139
+#: ../src/Imaging/IptcFile.cs:145
msgid "IPTC Information Interchange Model (IIM) Version number"
msgstr ""
-#: ../src/IptcFile.cs:141
+#: ../src/Imaging/IptcFile.cs:147
msgid "OSI Destination routing information"
msgstr ""
-#: ../src/IptcFile.cs:143
+#: ../src/Imaging/IptcFile.cs:149
msgid "IPTC file format"
msgstr ""
-#: ../src/IptcFile.cs:145
+#: ../src/Imaging/IptcFile.cs:151
msgid "Identifies the provider and product"
msgstr ""
-#: ../src/IptcFile.cs:147
+#: ../src/Imaging/IptcFile.cs:153
msgid "A unique number identifying the envelope"
msgstr ""
-#: ../src/IptcFile.cs:149
+#: ../src/Imaging/IptcFile.cs:155
msgid "A unique number"
msgstr ""
-#: ../src/IptcFile.cs:151
+#: ../src/Imaging/IptcFile.cs:157
msgid ""
"The envelope handling priority between 1 (most urgent) and 9 (least urgent)"
msgstr ""
-#: ../src/IptcFile.cs:153
-msgid "The year month and day (CCYYMMDD) the service sent the material"
+#: ../src/Imaging/IptcFile.cs:159
+msgid "The year, month and day (CCYYMMDD) the service sent the material"
msgstr ""
-#: ../src/IptcFile.cs:155
-msgid ""
-"The hour minute and second the (HHMMSS+HHMM) the service sent the material"
+#: ../src/Imaging/IptcFile.cs:161
+msgid "The hour, minute and second (HHMMSS) the service sent the material"
msgstr ""
-#: ../src/IptcFile.cs:157
+#: ../src/Imaging/IptcFile.cs:163
msgid "The character set designation"
msgstr ""
-#: ../src/IptcFile.cs:159
+#: ../src/Imaging/IptcFile.cs:165
msgid "External globally unique object identifier"
msgstr ""
-#: ../src/IptcFile.cs:164
+#: ../src/Imaging/IptcFile.cs:170
msgid "Abstract Relationship Method (ARM) identifier"
msgstr ""
-#: ../src/IptcFile.cs:166
+#: ../src/Imaging/IptcFile.cs:172
msgid "Abstract Relationship Method (ARM) version number."
msgstr ""
-#: ../src/IptcFile.cs:169
+#: ../src/Imaging/IptcFile.cs:175
msgid "Number identifying the IIM version this application record uses"
msgstr ""
-#: ../src/IptcFile.cs:171
+#: ../src/Imaging/IptcFile.cs:177
msgid "Object type reference"
msgstr ""
-#: ../src/IptcFile.cs:176
+#: ../src/Imaging/IptcFile.cs:182
msgid "Object attribute reference"
msgstr ""
-#: ../src/IptcFile.cs:182 ../src/IptcFile.cs:186
+#: ../src/Imaging/IptcFile.cs:188 ../src/Imaging/IptcFile.cs:192
msgid "Object name"
msgstr ""
-#: ../src/IptcFile.cs:184
+#: ../src/Imaging/IptcFile.cs:190
msgid "Status of the objectdata according to the provider"
msgstr ""
-#: ../src/IptcFile.cs:189
+#: ../src/Imaging/IptcFile.cs:194
+msgid "Location within a city or area where the object originates"
+msgstr ""
+
+#: ../src/Imaging/IptcFile.cs:197
msgid "Name of the city the content is focussing on"
msgstr ""
-#: ../src/IptcFile.cs:192
+#: ../src/Imaging/IptcFile.cs:200
msgid "Copyright information for"
-msgstr ""
+msgstr "ข้อมูลลิขสิทธิ์สำหรับ"
-#: ../src/IptcFile.cs:195
+#: ../src/Imaging/IptcFile.cs:203
msgid "Full name of the country of the focus of the content"
msgstr ""
-#: ../src/IptcFile.cs:198
+#: ../src/Imaging/IptcFile.cs:206
msgid ""
"Two or three letter ISO3166 code of the country of the focus of the content"
msgstr ""
-#: ../src/IptcFile.cs:201
-msgid "bleh"
+#: ../src/Imaging/IptcFile.cs:209
+msgid "Creator of the content"
msgstr ""
-#: ../src/IptcFile.cs:204
+#: ../src/Imaging/IptcFile.cs:212
+msgid "Provider of the object"
+msgstr ""
+
+#: ../src/Imaging/IptcFile.cs:215
msgid "The title of the author or creator"
msgstr ""
-#: ../src/IptcFile.cs:207
+#: ../src/Imaging/IptcFile.cs:218
msgid ""
"The person involved in writing, editing or correcting the object data or "
"caption/abstract"
msgstr ""
-#: ../src/IptcFile.cs:211
+#: ../src/Imaging/IptcFile.cs:222
msgid "Headline of the content"
msgstr ""
-#: ../src/IptcFile.cs:214
+#: ../src/Imaging/IptcFile.cs:225
msgid ""
"Instructions from the creator to the receiver not covered by other fields"
msgstr ""
-#: ../src/IptcFile.cs:217
+#: ../src/Imaging/IptcFile.cs:228
msgid "Intellectual genre of the object"
msgstr ""
-#: ../src/IptcFile.cs:230
+#: ../src/Imaging/IptcFile.cs:241
msgid "Unknown IIM DataSet"
msgstr ""
-#: ../src/Loupe.cs:52 ../src/MainWindow.cs:1711
-msgid "Error saving sharpened photo"
-msgstr ""
+#: ../src/ImportCommand.cs:48 ../src/SingleView.cs:343
+msgid "Select Folder"
+msgstr "เลือกโฟลเดอร์"
-#: ../src/Loupe.cs:70
-msgid "Sharpen"
-msgstr ""
+#: ../src/ImportCommand.cs:216
+msgid "(No Cameras Detected)"
+msgstr "(ไม่พบกล้องดิจิทัล)"
-#: ../src/Loupe.cs:80 ../src/MainWindow.cs:1678
-msgid "Amount:"
-msgstr ""
+#: ../src/ImportCommand.cs:359
+#, csharp-format
+msgid "Importing {0} of {1}"
+msgstr "กำลังนำเข้า {0} จาก {1}"
-#: ../src/Loupe.cs:81 ../src/MainWindow.cs:1679
-msgid "Radius:"
+#: ../src/ImportCommand.cs:434
+msgid "Done Loading"
+msgstr "อ่านข้อมูลเรียบร้อย"
+
+#: ../src/ImportCommand.cs:645
+msgid "Directory does not exist."
+msgstr "ไม่มีไดเรกทอรีนี้อยู่"
+
+#: ../src/ImportCommand.cs:646
+#, csharp-format
+msgid ""
+"The directory you selected \"{0}\" does not exist. Please choose a "
+"different directory"
msgstr ""
-#: ../src/Loupe.cs:82 ../src/MainWindow.cs:1680
-msgid "Threshold:"
+#: ../src/ImportCommand.cs:699 ../src/ImportCommand.cs:701
+#: ../src/XmpTagsImporter.cs:89
+msgid "Imported Tags"
+msgstr "ป้ายกำกับที่นำเข้า"
+
+#: ../src/ItemAction.cs:79 ../src/MainWindow.cs:298 ../src/SingleView.cs:71
+msgid "Rotate Left"
+msgstr "หมุนซ้าย"
+
+#: ../src/ItemAction.cs:80
+msgid "Rotate picture left"
+msgstr "หมุนรูปไปทางซ้าย"
+
+#: ../src/ItemAction.cs:91 ../src/MainWindow.cs:302 ../src/SingleView.cs:76
+msgid "Rotate Right"
+msgstr "หมุนขวา"
+
+#: ../src/ItemAction.cs:92
+msgid "Rotate picture right"
+msgstr "หมุนรูปไปทางขวา"
+
+#: ../src/ItemAction.cs:103
+msgid "Next picture"
+msgstr "รูปถัดไป"
+
+#: ../src/ItemAction.cs:124
+msgid "Previous picture"
+msgstr "รูปก่อนหน้า"
+
+#: ../src/MainWindow.cs:293
+msgid "Import new images"
msgstr ""
-#: ../src/MainWindow.cs:209
+#: ../src/MainWindow.cs:309 ../src/ui/main_window.ui.h:3
+msgid "Browse"
+msgstr "ท่องดู"
+
+#: ../src/MainWindow.cs:313
msgid "Browse many photos simultaneously"
msgstr ""
-#: ../src/MainWindow.cs:212
+#: ../src/MainWindow.cs:317
+msgid "Edit Image"
+msgstr "แก้ไขรูปภาพ"
+
+#: ../src/MainWindow.cs:321
msgid "View and edit a photo"
-msgstr "แสดงและแก้ไขรูปภาพ"
+msgstr "แสดงและแก้ไขภาพถ่าย"
-#: ../src/MainWindow.cs:217
+#: ../src/MainWindow.cs:326 ../src/SingleView.cs:83
+msgid "Fullscreen"
+msgstr "เต็มหน้าจอ"
+
+#: ../src/MainWindow.cs:328 ../src/SingleView.cs:85
msgid "View photos fullscreen"
-msgstr "ดูรูปแบบเต็มหน้าจอ"
+msgstr "ดูภาพถ่ายแบบเต็มหน้าจอ"
-#: ../src/MainWindow.cs:220
+#: ../src/MainWindow.cs:333 ../src/SingleView.cs:90
msgid "View photos in a slideshow"
-msgstr "ดูรูปแบบภาพสไลด์"
+msgstr "ดูภาพถ่ายแบบฉายสไลด์"
+
+#: ../src/MainWindow.cs:348
+msgid "Previous photo"
+msgstr "ภาพก่อนหน้า"
-#: ../src/MainWindow.cs:1212
+#: ../src/MainWindow.cs:353
+msgid "Next photo"
+msgstr "ภาพถัดไป"
+
+#: ../src/MainWindow.cs:430
+msgid "Show _Find Bar"
+msgstr "แสดงแ_ถบค้นหา"
+
+#: ../src/MainWindow.cs:433
+msgid "Hide _Find Bar"
+msgstr "ซ่อนแ_ถบค้นหา"
+
+#: ../src/MainWindow.cs:1501
msgid "No cameras detected."
msgstr "ไม่พบกล้องดิจิทัล"
-#: ../src/MainWindow.cs:1213
+#: ../src/MainWindow.cs:1502
msgid ""
"F-Spot was unable to find any cameras attached to this system. Double check "
"that the camera is connected and has power"
msgstr ""
-#: ../src/MainWindow.cs:1253
+#: ../src/MainWindow.cs:1541
msgid "Error connecting to camera"
msgstr "เกิดข้อผิดพลาดในการเชื่อมต่อกับกล้องดิจิทัล"
-#: ../src/MainWindow.cs:1254
+#: ../src/MainWindow.cs:1542
#, csharp-format
msgid "Received error \"{0}\" while connecting to camera"
msgstr "เกิดข้อผิดพลาด \"{0}\" ขณะเชื่อมต่อกล้องดิจิทัล"
-#. Translators should localize the following string
-#. * which will give them credit in the About box.
-#. * E.g. "Martin Willemoes Hansen"
-#: ../src/MainWindow.cs:1402
-msgid "translator-credits"
-msgstr "Isriya Paireepairit <markpeak at gmail.com>"
-
#. Translators, The singular case will never happen here.
-#: ../src/MainWindow.cs:1589
+#: ../src/MainWindow.cs:1815
#, csharp-format
msgid "Merge the selected tag"
-msgstr "รวมป้ายที่เลือกเข้าด้วยกัน"
+msgid_plural "Merge the {0} selected tags?"
+msgstr[0] "ผสานป้ายกำกับ {0} ป้ายที่เลือกเข้าด้วยกัน"
-#: ../src/MainWindow.cs:1616
+#: ../src/MainWindow.cs:1842
msgid ""
"This operation will merge the selected tags and any sub-tags into a single "
"tag."
msgstr ""
-#: ../src/MainWindow.cs:1618
-msgid "_Merge tags"
-msgstr "_รวมป้าย"
+#: ../src/MainWindow.cs:1844
+msgid "_Merge Tags"
+msgstr "_ผสานป้ายกำกับ"
-#: ../src/MainWindow.cs:1669
-msgid "Unsharp Mask"
-msgstr ""
+#: ../src/MainWindow.cs:2049
+#, csharp-format
+msgid "{0} Photo out of {1}"
+msgid_plural "{0} Photos out of {1}"
+msgstr[0] "ภาพถ่าย {0} จาก {1} ภาพ"
+
+#: ../src/MainWindow.cs:2051 ../src/SingleView.cs:466
+#, csharp-format
+msgid "{0} Photo"
+msgid_plural "{0} Photos"
+msgstr[0] "ภาพถ่าย {0} ภาพ"
-#: ../src/MainWindow.cs:1939
+#: ../src/MainWindow.cs:2054
+#, csharp-format
+msgid " ({0} selected)"
+msgid_plural " ({0} selected)"
+msgstr[0] ""
+
+#: ../src/MainWindow.cs:2135
msgid "_Ok"
msgstr "_ตกลง"
-#: ../src/MainWindow.cs:1940
+#: ../src/MainWindow.cs:2136
msgid "Error Deleting Picture"
msgstr "เกิดข้อผิดพลาดขณะลบรูป"
-#: ../src/MainWindow.cs:1945
+#: ../src/MainWindow.cs:2141
#, csharp-format
-msgid ""
-"No permission to delete the file:\n"
-"{0}"
-msgstr ""
-"ไม่มีสิทธิ์ในการลบแฟ้ม\n"
-"{0}"
+msgid "No permission to delete the file:{1}{0}"
+msgstr "ไม่มีสิทธิ์ในการลบแฟ้ม:{1}{0}"
-#: ../src/MainWindow.cs:1949
+#: ../src/MainWindow.cs:2145
#, csharp-format
-msgid ""
-"An error of type {0} occurred while deleting the file:\n"
-"{1}"
-msgstr ""
-"เกิดข้อผิดพลาดแบบ {0} ขณะลบแฟ้ม\n"
-"{1}"
+msgid "An error of type {0} occurred while deleting the file:{2}{1}"
+msgstr "เกิดข้อผิดพลาดแบบ {0} ขณะลบแฟ้ม:{2}{1}"
-#: ../src/MainWindow.cs:1960
+#: ../src/MainWindow.cs:2177
#, csharp-format
msgid "Delete the selected photo permanently?"
-msgstr "ต้องการลบรูปที่เลือกอย่างถาวรหรือไม่?"
+msgid_plural "Delete the {0} selected photos permanently?"
+msgstr[0] "ต้องการลบภาพถ่าย {0} ภาพที่เลือกอย่างถาวรหรือไม่?"
-#: ../src/MainWindow.cs:1964
+#: ../src/MainWindow.cs:2181
msgid "This deletes all versions of the selected photo from your drive."
+msgid_plural ""
"This deletes all versions of the selected photos from your drive."
-msgstr ""
+msgstr[0] ""
-#: ../src/MainWindow.cs:1967
+#: ../src/MainWindow.cs:2184
msgid "_Delete photo"
-msgstr "_ลบรูปภาพ"
+msgid_plural "_Delete photos"
+msgstr[0] "_ลบภาพถ่าย"
-#: ../src/MainWindow.cs:1989
+#: ../src/MainWindow.cs:2220
#, csharp-format
msgid "Remove the selected photo from F-Spot?"
-msgstr "ลบรูปภาพที่เลือกออกจาก F-Spot หรือไม่?"
+msgid_plural "Remove the {0} selected photos from F-Spot?"
+msgstr[0] "ต้องการลบภาพถ่าย {0} ภาพที่เลือกออกจาก F-Spot หรือไม่?"
-#: ../src/MainWindow.cs:1994
+#: ../src/MainWindow.cs:2225
msgid ""
"If you remove photos from the F-Spot catalog all tag information will be "
"lost. The photos remain on your computer and can be imported into F-Spot "
"again."
msgstr ""
-#: ../src/MainWindow.cs:1995
+#: ../src/MainWindow.cs:2226
msgid "_Remove from Catalog"
msgstr "_ลบจากแค็ตตาล็อก"
-#: ../src/MainWindow.cs:2050
+#: ../src/MainWindow.cs:2295
#, csharp-format
msgid "Delete tag \"{0}\"?"
-msgstr "ต้องการลบป้าย \"{0}\" หรือไม่?"
+msgstr "ต้องการลบป้ายกำกับ \"{0}\" หรือไม่?"
-#: ../src/MainWindow.cs:2052
+#: ../src/MainWindow.cs:2297
#, csharp-format
msgid "Delete the {0} selected tags?"
-msgstr "ลบป้ายที่เลือก {0} ป้ายหรือไม่?"
+msgstr "ลบป้ายกำกับที่เลือก {0} ป้ายหรือไม่?"
-#: ../src/MainWindow.cs:2055
-msgid "If you delete a tag, all associations with photos are lost."
-msgstr ""
+# Note: This is part of the next string:
+# "If you delete these tags, the association with {0} {1} will be lost."
+# where {0} is photos count, and {1} is replaced by this string
+#: ../src/MainWindow.cs:2302
+msgid "photo"
+msgid_plural "photos"
+msgstr[0] "ภาพ"
+
+#: ../src/MainWindow.cs:2304
+#, csharp-format
+msgid "If you delete this tag, the association with {0} {1} will be lost."
+msgid_plural ""
+"If you delete these tags, the association with {0} {1} will be lost."
+msgstr[0] "ถ้าคุณลบป้ายกำกับเหล่านี้ การเชื่อมโยงกับภาพถ่าย {0} {1}ก็จะสูญหายไป"
-#: ../src/MainWindow.cs:2056
+#: ../src/MainWindow.cs:2309
msgid "_Delete tag"
-msgstr "_ลบป้าย"
+msgid_plural "_Delete tags"
+msgstr[0] "_ลบป้ายกำกับ"
#. A Category is not empty. Can not delete it.
-#: ../src/MainWindow.cs:2070
+#: ../src/MainWindow.cs:2323
msgid "Tag is not empty"
-msgstr ""
+msgstr "ป้ายกำกับมีข้อมูลอยู่"
-#: ../src/MainWindow.cs:2071
+#: ../src/MainWindow.cs:2324
#, csharp-format
msgid ""
"Can not delete tags that have tags within them. Please delete tags under "
"\"{0}\" first"
msgstr ""
+"ไม่สามารถลบป้ายกำกับที่มีป้ายกำกับย่อยอยู่ภายในได้ กรุณาลบป้ายกำกับต่างๆ ภายใต้ \"{0}\" เสียก่อน"
-#: ../src/MainWindow.cs:2366
+#: ../src/MainWindow.cs:2767
msgid "Rotate selected photo left"
-msgstr "หมุนรูปที่เลือกไปทางซ้าย"
+msgid_plural "Rotate selected photos left"
+msgstr[0] "หมุนภาพถ่ายที่เลือกไปทางซ้าย"
-#: ../src/MainWindow.cs:2379
+#: ../src/MainWindow.cs:2780
msgid "Rotate selected photo right"
-msgstr "หมุนรูปที่เลือกไปทางขวา"
+msgid_plural "Rotate selected photos right"
+msgstr[0] "หมุนภาพถ่ายที่เลือกไปทางขวา"
-#: ../src/MetadataStore.cs:17
+#: ../src/MainWindow.cs:2791
+#, csharp-format
+msgid "Find _Selected Tag"
+msgid_plural "Find _Selected Tags"
+msgstr[0] "_ค้นหาป้ายกำกับที่เลือก"
+
+#: ../src/MainWindow.cs:2795
+#, csharp-format
+msgid "Find Selected Tag _With"
+msgid_plural "Find Selected Tags _With"
+msgstr[0] "ค้นหาป้ายกำกับที่เลือก _ด้วย"
+
+#: ../src/MainWindow.cs:2836
+msgid "Create New Version?"
+msgid_plural "Create New Versions?"
+msgstr[0] "จะสร้างฉบับสำเนาใหม่หรือไม่?"
+
+#: ../src/MainWindow.cs:2838
+#, csharp-format
+msgid ""
+"Before launching {1}, should F-Spot create a new version of the selected "
+"photo to preserve the original?"
+msgid_plural ""
+"Before launching {1}, should F-Spot create new versions of the selected "
+"photos to preserve the originals?"
+msgstr[0] ""
+"ก่อนที่จะเรียก {1} จะให้ F-Spot สร้างฉบับสำเนาของภาพถ่ายที่เลือกเพื่อรักษาต้นฉบับไว้หรือไม่?"
+
+#: ../src/MainWindow.cs:2860
+msgid "XCF version"
+msgstr "ฉบับ XCF"
+
+#: ../src/MetadataStore.cs:19
msgid "Creator"
msgstr ""
-#: ../src/MetadataStore.cs:18
+#: ../src/MetadataStore.cs:20
msgid "Title"
-msgstr ""
+msgstr "ชื่อ"
-#: ../src/MetadataStore.cs:19
+#: ../src/MetadataStore.cs:21
msgid "Copyright"
msgstr "ลิขสิทธิ์"
-#: ../src/MetadataStore.cs:20
+#: ../src/MetadataStore.cs:22
msgid "Subject and Keywords"
msgstr ""
-#: ../src/MetadataStore.cs:21
+#: ../src/MetadataStore.cs:23
msgid "Compression"
msgstr "การบีบอัด"
-#: ../src/MetadataStore.cs:23
+#. Translators: Planar Configuration is the label for the tiff:PlanarConfiguration tag
+#. "when Planar Configuration=1, this implies that all components must have
+#. the same BitsPerSample value; when Planar Configuration=2, different
+#. components could have different bit depths."
+#: ../src/MetadataStore.cs:29
msgid "Planar Configuration"
msgstr ""
-#: ../src/MetadataStore.cs:25
+#: ../src/MetadataStore.cs:31
msgid "Orientation"
msgstr ""
-#: ../src/MetadataStore.cs:27
+#: ../src/MetadataStore.cs:33
msgid "Photometric Interpretation"
msgstr ""
-#: ../src/MetadataStore.cs:29
+#: ../src/MetadataStore.cs:35
msgid "Resolution Unit"
msgstr ""
-#: ../src/MetadataStore.cs:31
+#: ../src/MetadataStore.cs:37
msgid "Exposure Program"
msgstr ""
-#: ../src/MetadataStore.cs:33
+#: ../src/MetadataStore.cs:39
msgid "Metering Mode"
msgstr ""
-#: ../src/MetadataStore.cs:35
+#: ../src/MetadataStore.cs:41
msgid "Exposure Mode"
msgstr ""
-#: ../src/MetadataStore.cs:37
+#: ../src/MetadataStore.cs:43
msgid "Custom Rendered"
msgstr ""
-#: ../src/MetadataStore.cs:39
+#: ../src/MetadataStore.cs:45
msgid "Components Configuration"
-msgstr ""
+msgstr "การจัดองค์ประกอบ"
-#: ../src/MetadataStore.cs:41
+#: ../src/MetadataStore.cs:47
msgid "Light Source"
msgstr ""
-#: ../src/MetadataStore.cs:43
+#: ../src/MetadataStore.cs:49
msgid "Sensing Method"
msgstr ""
-#: ../src/MetadataStore.cs:45
+#: ../src/MetadataStore.cs:51
msgid "Color Space"
msgstr ""
-#: ../src/MetadataStore.cs:47
+#: ../src/MetadataStore.cs:53
msgid "White Balance"
msgstr ""
-#: ../src/MetadataStore.cs:49
+#: ../src/MetadataStore.cs:55
msgid "Focal Plane Resolution Unit"
msgstr ""
-#: ../src/MetadataStore.cs:51
+#: ../src/MetadataStore.cs:57
msgid "File Source Type"
msgstr ""
-#: ../src/MetadataStore.cs:53
+#: ../src/MetadataStore.cs:59
msgid "Scene Capture Type"
msgstr ""
-#: ../src/MetadataStore.cs:55
+#. Translators: Gain Control is the label for the exif:GainControl tag
+#. "This tag indicates the degree of overall image gain adjustment."
+#: ../src/MetadataStore.cs:63
msgid "Gain Control"
msgstr ""
-#: ../src/MetadataStore.cs:57
+#: ../src/MetadataStore.cs:65
msgid "Contrast"
msgstr ""
-#: ../src/MetadataStore.cs:59
+#: ../src/MetadataStore.cs:67
msgid "Saturation"
msgstr ""
-#: ../src/MetadataStore.cs:61
+#: ../src/MetadataStore.cs:69
msgid "Sharpness"
-msgstr ""
+msgstr "ความคม"
-#: ../src/MetadataStore.cs:63
+#: ../src/MetadataStore.cs:71
msgid "Scene Type"
msgstr ""
-#: ../src/PhotoPopup.cs:30
-msgid "Copy Photo Location"
-msgstr "คัดลอกที่อยู่ภาพ"
-
-#: ../src/PhotoPopup.cs:42
-msgid "Remove From Catalog"
-msgstr "ลบจากแค็ตตาล็อก"
-
-#: ../src/PhotoPopup.cs:44
-msgid "Delete From Drive"
-msgstr "ลบจากดิสก์"
-
-#.
-#. FIXME TagMenu is ugly.
-#.
-#: ../src/PhotoPopup.cs:52
-msgid "Attach Tag"
-msgstr "แปะป้าย"
-
-#.
-#. FIXME finish the IPhotoSelection stuff and move the activate handler into the class
-#. this current method is way too complicated.
-#.
-#: ../src/PhotoPopup.cs:62
-msgid "Remove Tag"
-msgstr "ลบป้าย"
-
-#: ../src/PhotoStore.cs:337
-#, csharp-format
-msgid "Modified"
-msgstr "ผ่านการแก้ไข"
-
-#. Note that the original version is never stored in the photo_versions table in the
-#. database.
-#: ../src/PhotoStore.cs:516
-msgid "Original"
-msgstr "ต้นฉบับ"
-
#. Fixme this should really set parent menu
#. items insensitve
-#: ../src/PhotoTagMenu.cs:72
+#: ../src/PhotoTagMenu.cs:61
msgid "(No Tags)"
msgstr "(ไม่มี)"
-#: ../src/PhotoVersionCommands.cs:54
+#: ../src/PhotoVersionCommands.cs:58
msgid "Create New Version"
msgstr ""
#: ../src/PhotoVersionCommands.cs:59
+msgid "Name:"
+msgstr "ชื่อ:"
+
+#: ../src/PhotoVersionCommands.cs:63
msgid "Rename Version"
msgstr ""
-#: ../src/PhotoVersionCommands.cs:60
+#: ../src/PhotoVersionCommands.cs:64
msgid "New name:"
msgstr ""
-#: ../src/PhotoVersionCommands.cs:126
-msgid "Really Delete?"
-msgstr ""
+#: ../src/PhotoVersionCommands.cs:123
+msgid "Delete"
+msgstr "ลบ"
-#: ../src/PhotoVersionCommands.cs:132
+#: ../src/PhotoVersionCommands.cs:124
#, csharp-format
msgid "Really delete version \"{0}\"?"
msgstr ""
-#: ../src/PhotoVersionMenu.cs:66
-msgid "(No Edits)"
-msgstr "(ไม่มีการแก้ไข)"
-
-#: ../src/PhotoView.cs:109
-msgid "No Constraint"
+#: ../src/PhotoVersionCommands.cs:125
+msgid "This removes the version and deletes the corresponding file from disk."
msgstr ""
-#: ../src/PhotoView.cs:110
-msgid "4 x 3 (Book)"
+#: ../src/PhotoVersionCommands.cs:170
+msgid "De_tach"
msgstr ""
-#: ../src/PhotoView.cs:111
-msgid "4 x 6 (Postcard)"
+#: ../src/PhotoVersionCommands.cs:171
+#, csharp-format
+msgid "Really detach version \"{0}\" from \"{1}\"?"
msgstr ""
-#: ../src/PhotoView.cs:112
-msgid "5 x 7 (L, 2L)"
+#: ../src/PhotoVersionCommands.cs:172
+msgid ""
+"This makes the version appear as a separate photo in the library. To undo, "
+"drag the new photo back to its parent."
msgstr ""
-#: ../src/PhotoView.cs:113
-msgid "8 x 10"
+#: ../src/PhotoVersionCommands.cs:195
+msgid "Re_parent"
msgstr ""
-#: ../src/PhotoView.cs:114
-msgid "4 x 3 Portrait (Book)"
-msgstr ""
+#: ../src/PhotoVersionCommands.cs:196
+#, csharp-format
+msgid "Really reparent \"{2}\" as version of \"{1}\"?"
+msgid_plural "Really reparent {0} photos as versions of \"{1}\"?"
+msgstr[0] ""
-#: ../src/PhotoView.cs:115
-msgid "4 x 6 Portrait (Postcard)"
+#: ../src/PhotoVersionCommands.cs:199
+msgid ""
+"This makes the photos appear as a single one in the library. The versions "
+"can be detached using the Photo menu."
msgstr ""
-#: ../src/PhotoView.cs:116
-msgid "5 x 7 Portrait (L, 2L)"
+#: ../src/PhotoVersionCommands.cs:239
+#, csharp-format
+msgid "Received exception \"{0}\"."
msgstr ""
-#: ../src/PhotoView.cs:117
-msgid "8 x 10 Portrait"
-msgstr ""
+#: ../src/PhotoVersionMenu.cs:66 ../src/Widgets/InfoBox.cs:565
+#: ../src/Widgets/InfoBox.cs:567
+msgid "(No Edits)"
+msgstr "(ไม่มีการแก้ไข)"
-#: ../src/PhotoView.cs:118
-msgid "Square"
-msgstr ""
+#: ../src/PhotoView.cs:167 ../src/UI.Dialog/EditExceptionDialog.cs:38
+msgid "Error editing photo"
+msgstr "เกิดปัญหาในการแก้ไขภาพถ่าย"
-#: ../src/PhotoView.cs:164
-msgid "Crop photo to selected area"
+#: ../src/PhotoView.cs:168 ../src/Sharpener.cs:73
+#: ../src/UI.Dialog/EditExceptionDialog.cs:25
+#, csharp-format
+msgid "Received exception \"{0}\". Unable to save photo {1}"
msgstr ""
-#: ../src/PhotoView.cs:165
-msgid "Remove redeye from selected area"
-msgstr "แก้ตาแดงในพื้นที่ที่เลือก"
+#: ../src/PhotoView.cs:357
+msgid "Comment:"
+msgstr "ความเห็น:"
+
+#: ../src/Preferences.cs:151
+msgid "Photos"
+msgstr "ภาพถ่าย"
-#: ../src/PhotoView.cs:167
-msgid "Select an area to crop"
+#: ../src/PrintOperation.cs:32
+msgid "Image Settings"
msgstr ""
-#: ../src/PhotoView.cs:168
-msgid "Select an area to remove redeye"
-msgstr "เลือกพื้นที่เพื่อแก้ตาแดง"
+#: ../src/QueryWidget.cs:58
+msgid "Find: "
+msgstr "ค้นหา:"
-#: ../src/PhotoView.cs:291
-msgid "No selection available"
-msgstr "ไม่ได้เลือกพื้นที่"
+#: ../src/QueryWidget.cs:63
+msgid "Untagged photos"
+msgstr "ภาพถ่ายไม่มีป้ายกำกับ"
-#: ../src/PhotoView.cs:292
-msgid ""
-"This tool requires an active selection. Please select a region of the photo "
-"and try the operation again"
+#: ../src/QueryWidget.cs:71
+msgid "Rated photos"
msgstr ""
-"เครื่องมือนี้จำเป็นต้องเลือกพื้นที่ที่ต้องการทำงานก่อน กรุณาลองอีกครั้ง"
-#: ../src/PhotoView.cs:336
-msgid "Error editing photo"
-msgstr "เกิดปัญหาในการแก้ไขรูปภาพ"
+#. Note for translators: 'Import roll' is no command, it means 'Roll that has been imported'
+#: ../src/QueryWidget.cs:80
+msgid "Import roll"
+msgstr "ชุดการนำเข้า"
-#: ../src/PhotoView.cs:476
-msgid "Comment:"
-msgstr "ความเห็น:"
-
-#: ../src/PhotoView.cs:541
-msgid "Adjust the photo colors"
-msgstr "ปรับแต่งระดับสีของภาพ"
+#: ../src/QueryWidget.cs:104
+msgid "Clear search"
+msgstr "ล้างการค้นหา"
-#: ../src/PhotoView.cs:542
-msgid "Constrain the aspect ratio of the selection"
+#: ../src/QueryWidget.cs:111
+msgid "Refresh search"
msgstr ""
-#: ../src/PhotoView.cs:543
-msgid "Next photo"
-msgstr "รูปถัดไป"
+#: ../src/QueryWidget.cs:113
+msgid "No matching photos found"
+msgstr "ไม่พบภาพถ่ายที่ตรงเงื่อนไข"
-#: ../src/PhotoView.cs:544
-msgid "Previous photo"
-msgstr "รูปก่อนหน้า"
+#: ../src/RotateCommand.cs:96 ../src/RotateCommand.cs:111
+msgid "Unable to rotate this type of photo"
+msgstr "ไม่สามารถหมุนภาพถ่ายชนิดนี้ได้"
+
+#: ../src/RotateCommand.cs:131
+msgid "Unable to rotate readonly file"
+msgstr "ไม่สามารถหมุนภาพถ่ายในแฟ้มที่อ่านอย่างเดียวได้"
-#: ../src/RotateCommand.cs:154
+#: ../src/RotateCommand.cs:198
msgid "Rotating photos"
-msgstr "กำลังหมุนรูปภาพ"
+msgstr "กำลังหมุนภาพถ่าย"
-#: ../src/RotateCommand.cs:165
+#: ../src/RotateCommand.cs:209
#, csharp-format
msgid "Rotating photo \"{0}\""
-msgstr "กำลังหมุนรูปภาพ \"{0}\""
+msgstr "กำลังหมุนภาพถ่าย \"{0}\""
-#: ../src/RotateCommand.cs:190
+#: ../src/RotateCommand.cs:222
+msgid "Directory not found"
+msgstr "ไม่พบไดเรกทอรี"
+
+#: ../src/RotateCommand.cs:242
#, csharp-format
msgid "Unable to rotate photo"
-msgstr "ไม่สามารถหมุนรูปภาพได้"
+msgid_plural "Unable to rotate {0} photos"
+msgstr[0] "ไม่สามารถหมุนภาพถ่าย {0} ภาพนี้ได้"
-#: ../src/RotateCommand.cs:194
+#: ../src/RotateCommand.cs:244
#, csharp-format
msgid ""
"The photo could not be rotated because it is on a read only file system or "
-"media such as a CDROM. Please check the permissions and try again"
+"media such as a CDROM. Please check the permissions and try again."
+msgid_plural ""
"{0} photos could not be rotated because they are on a read only file system "
-"or media such as a CDROM. Please check the permissions and try again"
-msgstr ""
+"or media such as a CDROM. Please check the permissions and try again."
+msgstr[0] ""
-#: ../src/RotateCommand.cs:216
+#: ../src/RotateCommand.cs:271
#, csharp-format
msgid "Received error \"{0}\" while attempting to rotate {1}"
msgstr ""
-#: ../src/RotateCommand.cs:221
+#: ../src/RotateCommand.cs:276
msgid "Error while rotating photo."
-msgstr "เกิดข้อผิดพลาดขณะหมุนรูปภาพ"
-
-#: ../src/StockIcons.cs:28
-msgid "Crop"
-msgstr "ครอบตัด"
+msgstr "เกิดข้อผิดพลาดขณะหมุนภาพถ่าย"
-#: ../src/StockIcons.cs:29
-msgid "Desaturate"
+#: ../src/SendEmail.cs:218
+msgid "Preparing email"
msgstr ""
-#: ../src/StockIcons.cs:30
-msgid "Edit Photo"
-msgstr "แก้ไขรูป"
+#: ../src/SendEmail.cs:270
+#, csharp-format
+msgid "Exporting picture \"{0}\""
+msgstr "กำลังส่งออกรูปภาพ \"{0}\""
-#: ../src/StockIcons.cs:31
-msgid "Fullscreen"
-msgstr "เต็มหน้าจอ"
+#: ../src/SendEmail.cs:292
+msgid "Error processing image"
+msgstr "เกิดข้อผิดพลาดขณะประมวลผลรูปภาพ"
-#: ../src/StockIcons.cs:32
-msgid "Loading"
-msgstr "กำลังเรียก"
+#: ../src/SendEmail.cs:293
+#, csharp-format
+msgid "An error occured while processing \"{0}\": {1}"
+msgstr "เกิดข้อผิดพลาดขณะประมวลผล \"{0}\": {1}"
-#: ../src/StockIcons.cs:33
-msgid "Logo"
-msgstr ""
+#. Send the mail :)
+#: ../src/SendEmail.cs:307
+msgid "My Photos"
+msgstr "ภาพถ่ายของฉัน"
-#: ../src/StockIcons.cs:35
-msgid "Question"
+#: ../src/Sharpener.cs:72
+msgid "Error saving sharpened photo"
msgstr ""
-#: ../src/StockIcons.cs:36
-msgid "Reduce Red-Eye"
-msgstr "แก้ตาแดง"
+#: ../src/Sharpener.cs:102
+msgid "Sharpen"
+msgstr "ทำให้คม"
-#: ../src/StockIcons.cs:39
-msgid "Sepia Tone"
+#: ../src/Sharpener.cs:112
+msgid "Amount:"
msgstr ""
-#: ../src/StockIcons.cs:40
-msgid "Slideshow"
-msgstr "แสดงสไลด์"
-
-#: ../src/StockIcons.cs:41
-msgid "Near"
+#: ../src/Sharpener.cs:113
+msgid "Radius:"
msgstr ""
-#: ../src/StockIcons.cs:42
-msgid "Far"
+#: ../src/Sharpener.cs:114
+msgid "Threshold:"
msgstr ""
-#: ../src/TagCommands.cs:75 ../src/TagCommands.cs:205
-#: ../src/TagSelectionWidget.cs:574
+#: ../src/SingleView.cs:73
+msgid "Rotate photo left"
+msgstr "หมุนภาพถ่ายไปทางซ้าย"
+
+#: ../src/SingleView.cs:78
+msgid "Rotate photo right"
+msgstr "หมุนภาพถ่ายไปทางขวา"
+
+#: ../src/SingleView.cs:115
+msgid "Folder"
+msgstr "โฟลเดอร์"
+
+#: ../src/SingleView.cs:340
+msgid "Open"
+msgstr "เปิด"
+
+#: ../src/SingleView.cs:427
+msgid "Set as Background"
+msgstr "ตั้งเป็นพื้นหลัง"
+
+#: ../src/TagCommands.cs:96 ../src/TagSelectionWidget.cs:498
+#: ../src/UI.Dialog/EditTagDialog.cs:78
msgid "This name is already in use"
msgstr "ชื่อนี้ถูกใช้แล้ว"
-#: ../src/TagCommands.cs:123
+#: ../src/TagCommands.cs:144
+msgid "Create New Tag"
+msgstr "สร้างป้ายกำกับใหม่"
+
+#: ../src/TagCommands.cs:145
msgid "Name of New Tag:"
-msgstr "ชื่อของป้ายใหม่:"
+msgstr "ชื่อของป้ายกำกับใหม่:"
-#: ../src/TagCommands.cs:275 ../src/TagPopup.cs:26
-msgid "Edit Tag"
-msgstr "แก้ไขป้าย"
+#: ../src/TagPopup.cs:26
+#, csharp-format
+msgid "Find"
+msgid_plural "Find"
+msgstr[0] "หา"
+
+#: ../src/TagPopup.cs:36 ../src/Widgets/TagMenu.cs:99
+msgid "Create New Tag..."
+msgstr "สร้างป้ายกำกับใหม่..."
+
+#: ../src/TagPopup.cs:42
+msgid "Edit Tag..."
+msgstr "แก้ไขป้ายกำกับ..."
+
+#: ../src/TagPopup.cs:46
+msgid "Delete Tag"
+msgid_plural "Delete Tags"
+msgstr[0] "ลบป้ายกำกับ"
+
+#: ../src/TagPopup.cs:52
+msgid "Attach Tag to Selection"
+msgid_plural "Attach Tags to Selection"
+msgstr[0] "แปะป้ายกำกับให้ภาพที่เลือก"
+
+#: ../src/TagPopup.cs:56
+msgid "Remove Tag From Selection"
+msgid_plural "Remove Tags From Selection"
+msgstr[0] "ลบป้ายกำกับจากภาพที่เลือก"
-#: ../src/TagCommands.cs:276
-msgid "Tag Name:"
-msgstr "ชื่อป้าย:"
+#: ../src/TagPopup.cs:62
+msgid "Merge Tags"
+msgstr "ผสานป้ายกำกับ"
-#: ../src/TagCommands.cs:369
+#: ../src/TagQueryWidget.cs:34
#, csharp-format
-msgid "Photo {0} of {1}"
-msgstr "รูปที่ {0} จาก {1}"
+msgid "Include Photos Tagged \"{0}\""
+msgstr "นับรวมภาพถ่ายที่มีป้ายกำกับ \"{0}\""
+
+#: ../src/TagQueryWidget.cs:39
+#, csharp-format
+msgid "Exclude Photos Tagged \"{0}\""
+msgstr "ไม่นับรวมภาพถ่ายที่มีป้ายกำกับ \"{0}\""
+
+#: ../src/TagQueryWidget.cs:44
+msgid "Remove From Search"
+msgstr "ตัดออกจากการค้นหา"
+
+#: ../src/TagQueryWidget.cs:88
+#, csharp-format
+msgid "Find _With"
+msgid_plural "Find _With"
+msgstr[0] "ค้นหา _ด้วย"
+
+#: ../src/TagQueryWidget.cs:114
+msgid "All"
+msgstr ""
+
+#: ../src/TagQueryWidget.cs:149 ../src/Term.cs:592
+#, csharp-format
+msgid "Not {0}"
+msgstr ""
+
+#: ../src/TagQueryWidget.cs:278
+msgid "Drag tags here to search for them"
+msgstr ""
+
+#: ../src/TagSelectionWidget.cs:497
+msgid "Error renaming tag"
+msgstr "เกิดข้อผิดพลาดขณะเปลี่ยนชื่อป้ายกำกับ"
+
+#: ../src/TagStore.cs:203
+msgid "Favorites"
+msgstr "โปรดปราน"
+
+#: ../src/TagStore.cs:208
+msgid "Hidden"
+msgstr "ซ่อน"
+
+#: ../src/TagStore.cs:216
+msgid "People"
+msgstr "บุคคล"
+
+#: ../src/TagStore.cs:221
+msgid "Places"
+msgstr "สถานที่"
+
+#: ../src/TagStore.cs:226
+msgid "Events"
+msgstr "เหตุการณ์"
+
+#. The label for the root category is used in new and edit tag dialogs
+#: ../src/TagStore.cs:239 ../src/Widgets/InfoBox.cs:409
+msgid "(None)"
+msgstr "(ไม่มี)"
+
+#: ../src/Term.cs:298
+msgid " and "
+msgstr " และ "
+
+#. operators.Add (Catalog.GetString (" && "));
+#: ../src/Term.cs:300
+msgid ", "
+msgstr ", "
+
+#: ../src/Term.cs:356
+msgid " or "
+msgstr " หรือ "
+
+#. OPS The operators we support, case insensitive
+#. private static string op_str = "(?'Ops' or | and |, | \\s+ )";
+#: ../src/Term.cs:380 ../src/UI.Dialog/ui/DateRangeDialog.ui.h:7
+#: ../src/Widgets/FindBar.cs:177
+msgid "or"
+msgstr "หรือ"
+
+#: ../src/ThumbnailCommand.cs:20
+msgid "Updating Thumbnails"
+msgstr ""
+
+#: ../src/ThumbnailCommand.cs:28
+#, csharp-format
+msgid "Updating picture \"{0}\""
+msgstr "กำลังปรับข้อมูลรูปภาพ \"{0}\""
+
+#: ../src/UI.Dialog/AboutDialog.cs:77
+msgid "Photo management for GNOME"
+msgstr "โปรแกรมจัดการภาพถ่ายสำหรับ GNOME"
+
+#: ../src/UI.Dialog/AboutDialog.cs:78
+msgid "Copyright © 2003-2010 Novell Inc."
+msgstr "Copyright © 2003-2010 Novell Inc."
+
+#: ../src/UI.Dialog/AboutDialog.cs:101
+msgid "translator-credits"
+msgstr ""
+"Isriya Paireepairit <markpeak at gmail.com>\n"
+"Sira Nokyoongtong <gumaraa at gmail.com>\n"
+"Theppitak Karoonboonyanan <thep at linux.thai.net>"
+
+#: ../src/UI.Dialog/AboutDialog.cs:106
+msgid "F-Spot Website"
+msgstr "เว็บไซต์ F-Spot"
-#: ../src/TagCommands.cs:396
+#: ../src/UI.Dialog/AdjustTimeDialog.cs:112
+#: ../src/UI.Dialog/ui/AdjustTimeDialog.ui.h:10
+#, csharp-format
+msgid "Shift all photos by {0}"
+msgstr ""
+
+#: ../src/UI.Dialog/DateRangeDialog.cs:99
+msgid "Today"
+msgstr "วันนี้"
+
+#: ../src/UI.Dialog/DateRangeDialog.cs:101
+msgid "Yesterday"
+msgstr "เมื่อวาน"
+
+#: ../src/UI.Dialog/DateRangeDialog.cs:103
+msgid "Last 7 days"
+msgstr "7 วันก่อน"
+
+#: ../src/UI.Dialog/DateRangeDialog.cs:105
+msgid "Last 30 days"
+msgstr "30 วันก่อน"
+
+#: ../src/UI.Dialog/DateRangeDialog.cs:107
+msgid "Last 90 days"
+msgstr "90 วันก่อน"
+
+#: ../src/UI.Dialog/DateRangeDialog.cs:109
+msgid "Last 360 days"
+msgstr "360 วันก่อน"
+
+#: ../src/UI.Dialog/DateRangeDialog.cs:111
+msgid "Current Week (Mon-Sun)"
+msgstr "สัปดาห์นี้ (จ.-อา.)"
+
+#: ../src/UI.Dialog/DateRangeDialog.cs:113
+msgid "Previous Week (Mon-Sun)"
+msgstr "สัปดาห์ที่แล้ว (จ.-อา.)"
+
+#: ../src/UI.Dialog/DateRangeDialog.cs:131
+msgid "Customized Range"
+msgstr "กำหนดช่วงเวลา"
+
+#: ../src/UI.Dialog/EditTagIconDialog.cs:46
#, csharp-format
msgid "Edit Icon for Tag {0}"
-msgstr "แก้ไขไอคอนของป้าย {0}"
+msgstr "แก้ไขไอคอนของป้ายกำกับ {0}"
+
+#: ../src/UI.Dialog/EditTagIconDialog.cs:68
+msgid "Select Photo from file"
+msgstr "เลือกภาพถ่ายจากแฟ้ม"
-#: ../src/TagPopup.cs:28
+#: ../src/UI.Dialog/EditTagIconDialog.cs:90
#, csharp-format
-msgid "Edit Tag \"{0}\""
-msgstr "แก้ไขป้าย \"{0}\""
+msgid ""
+"\n"
+"<b>From Photo</b>\n"
+" You can use one of your library photos as an icon for this tag.\n"
+" However, first you must have at least one photo associated\n"
+" with this tag. Please tag a photo as '{0}' and return here\n"
+" to use it as an icon."
+msgstr ""
-#: ../src/TagPopup.cs:33
-msgid "Delete Tag"
-msgstr "ลบป้าย"
+#: ../src/UI.Dialog/EditTagIconDialog.cs:168
+msgid "Unable to load image"
+msgstr "ไม่สามารถโหลดรูปภาพได้"
-#: ../src/TagPopup.cs:39
-msgid "Attach Tag To Selection"
-msgstr "ใส่ป้ายให้รูปที่เลือก"
+#: ../src/UI.Dialog/EditTagIconDialog.cs:169
+#, csharp-format
+msgid "Unable to load \"{0}\" as icon for the tag"
+msgstr ""
-#: ../src/TagPopup.cs:43
-msgid "Remove Tag From Selection"
-msgstr "ลบป้ายจากรูปที่เลือก"
+#: ../src/UI.Dialog/EditTagIconDialog.cs:207
+#, csharp-format
+msgid "Photo {0} of {1}"
+msgstr "ภาพถ่ายที่ {0} จาก {1}"
-#: ../src/TagPopup.cs:49
-msgid "Merge Tags"
-msgstr "รวมป้าย"
+#: ../src/UI.Dialog/ExceptionDialog.cs:24
+msgid "F-Spot Encountered a Fatal Error"
+msgstr ""
-#: ../src/TagSelectionWidget.cs:573
-msgid "Error renaming tag"
-msgstr "เกิดข้อผิดพลาดขณะเปลี่ยนชื่อป้าย"
+#: ../src/UI.Dialog/ExceptionDialog.cs:60
+msgid "Error Details"
+msgstr ""
+
+#: ../src/UI.Dialog/ExceptionDialog.cs:104
+msgid "An unhandled exception was thrown: "
+msgstr ""
+
+#: ../src/UI.Dialog/PreferenceDialog.cs:54
+#: ../src/UI.Dialog/PreferenceDialog.cs:77
+msgid "None"
+msgstr "ไม่มี"
+
+#: ../src/UI.Dialog/PreferenceDialog.cs:56
+msgid "System profile"
+msgstr "โพรไฟล์ระบบ"
+
+#: ../src/UI.Dialog/PreferenceDialog.cs:94
+msgid "Standard theme"
+msgstr "ชุดตกแต่งมาตรฐาน"
+
+#: ../src/UI.Dialog/RepairDbDialog.cs:20
+msgid "Error loading database."
+msgstr "เกิดข้อผิดพลาดขณะโหลดฐานข้อมูล"
+
+#: ../src/UI.Dialog/RepairDbDialog.cs:21
+#, csharp-format
+msgid ""
+"F-Spot encountered an error while loading the photo database. The old "
+"database has be moved to {0} and a new database has been created."
+msgstr ""
+
+#: ../src/UI.Dialog/SelectionRatioDialog.cs:60
+msgid "Label"
+msgstr "ป้ายชื่อ"
+
+#: ../src/UI.Dialog/SelectionRatioDialog.cs:64
+msgid "Ratio"
+msgstr ""
+
+#: ../src/UI.Dialog/ThreadProgressDialog.cs:56
+msgid "Retry"
+msgstr ""
+
+#: ../src/UI.Dialog/ui/AdjustTimeDialog.ui.h:1
+msgid "0000:00:00 00:00:00"
+msgstr ""
+
+#: ../src/UI.Dialog/ui/AdjustTimeDialog.ui.h:2
+msgid "00:00:00"
+msgstr ""
+
+#: ../src/UI.Dialog/ui/AdjustTimeDialog.ui.h:3
+msgid "5"
+msgstr ""
+
+#: ../src/UI.Dialog/ui/AdjustTimeDialog.ui.h:4
+msgid "<b>Action</b>"
+msgstr ""
+
+#: ../src/UI.Dialog/ui/AdjustTimeDialog.ui.h:6
+msgid "<b>Reference Photo</b>"
+msgstr ""
+
+#: ../src/UI.Dialog/ui/AdjustTimeDialog.ui.h:7
+msgid "Adjust Time"
+msgstr "แก้ไขเวลา"
+
+#: ../src/UI.Dialog/ui/AdjustTimeDialog.ui.h:8
+msgid "Adjusted date: "
+msgstr "แก้ไขวันที่: "
+
+#: ../src/UI.Dialog/ui/AdjustTimeDialog.ui.h:9
+msgid "Current date:"
+msgstr "วันที่ปัจจุบัน:"
+
+#: ../src/UI.Dialog/ui/AdjustTimeDialog.ui.h:11
+msgid "Space all photos by"
+msgstr ""
+
+#: ../src/UI.Dialog/ui/AdjustTimeDialog.ui.h:12
+msgid "difference:"
+msgstr ""
+
+#: ../src/UI.Dialog/ui/AdjustTimeDialog.ui.h:13
+msgid "min. Starting at {0}"
+msgstr ""
+
+#: ../src/UI.Dialog/ui/DateRangeDialog.ui.h:1
+msgid "<b>End Date</b>"
+msgstr ""
+
+#: ../src/UI.Dialog/ui/DateRangeDialog.ui.h:2
+msgid "<b>Select period</b>"
+msgstr ""
+
+#: ../src/UI.Dialog/ui/DateRangeDialog.ui.h:3
+msgid "<b>Start Date</b>"
+msgstr ""
+
+#: ../src/UI.Dialog/ui/DateRangeDialog.ui.h:4
+msgid "Cancel, do not change the current timeline. "
+msgstr ""
+
+#: ../src/UI.Dialog/ui/DateRangeDialog.ui.h:5
+msgid "Only photos taken within these dates will be displayed."
+msgstr ""
+
+#: ../src/UI.Dialog/ui/DateRangeDialog.ui.h:6
+msgid "Set date range"
+msgstr "กำหนดช่วงเวลา"
+
+#: ../src/UI.Dialog/ui/EditTagDialog.ui.h:1
+msgid "<small></small>"
+msgstr ""
+
+#: ../src/UI.Dialog/ui/EditTagDialog.ui.h:2
+msgid "Edit Tag"
+msgstr "แก้ไขป้ายกำกับ"
+
+#: ../src/UI.Dialog/ui/EditTagDialog.ui.h:3
+msgid "Edit icon"
+msgstr "แก้ไขไอคอน"
+
+#: ../src/UI.Dialog/ui/EditTagDialog.ui.h:5
+msgid "_Icon:"
+msgstr "ไ_อคอน:"
+
+#: ../src/UI.Dialog/ui/EditTagIconDialog.ui.h:1
+msgid "<b>From External Photo</b>"
+msgstr ""
+
+#: ../src/UI.Dialog/ui/EditTagIconDialog.ui.h:2
+msgid "<b>From Photo</b>"
+msgstr ""
+
+#: ../src/UI.Dialog/ui/EditTagIconDialog.ui.h:3
+msgid "<b>Predefined icons</b>"
+msgstr ""
+
+#: ../src/UI.Dialog/ui/EditTagIconDialog.ui.h:4
+msgid "<b>Preview</b>"
+msgstr ""
+
+#: ../src/UI.Dialog/ui/EditTagIconDialog.ui.h:5
+msgid "Design icon from"
+msgstr ""
+
+#: ../src/UI.Dialog/ui/EditTagIconDialog.ui.h:6
+msgid "Edit Tag Icon"
+msgstr ""
+
+#: ../src/UI.Dialog/ui/EditTagIconDialog.ui.h:7
+msgid "No _image"
+msgstr ""
+
+#: ../src/UI.Dialog/ui/EditTagIconDialog.ui.h:8
+msgid "Photo 0 of 0"
+msgstr "ภาพถ่ายที่ 0 จาก 0"
+
+#: ../src/UI.Dialog/ui/PreferenceDialog.ui.h:1
+msgid "Color profile for display:"
+msgstr ""
+
+#: ../src/UI.Dialog/ui/PreferenceDialog.ui.h:2
+msgid "Color profile for printing:"
+msgstr ""
+
+#: ../src/UI.Dialog/ui/PreferenceDialog.ui.h:3
+msgid "F-Spot Preferences"
+msgstr "ปรับแต่ง F-Spot"
+
+#: ../src/UI.Dialog/ui/PreferenceDialog.ui.h:4
+msgid "F-Spot appearance:"
+msgstr ""
+
+#: ../src/UI.Dialog/ui/PreferenceDialog.ui.h:5
+msgid ""
+"Inside the image files when possible\n"
+"<small>Makes them accessible to other image-editing programs.</small>"
+msgstr ""
+
+#: ../src/UI.Dialog/ui/PreferenceDialog.ui.h:7
+msgid "Select A Folder"
+msgstr "เลือกโฟลเดอร์"
+
+#: ../src/UI.Dialog/ui/PreferenceDialog.ui.h:8
+msgid "Separately from the image files"
+msgstr ""
+
+#: ../src/UI.Dialog/ui/PreferenceDialog.ui.h:9
+msgid "Store tags and descriptions for photos:"
+msgstr ""
+
+#: ../src/UI.Dialog/ui/PreferenceDialog.ui.h:10
+msgid "When importing photos, copy them to:"
+msgstr ""
+
+#: ../src/UI.Dialog/ui/RatingFilterDialog.ui.h:1
+msgid "<b>Max Rating</b>"
+msgstr ""
+
+#: ../src/UI.Dialog/ui/RatingFilterDialog.ui.h:2
+msgid "<b>Min Rating</b>"
+msgstr ""
+
+#: ../src/UI.Dialog/ui/RatingFilterDialog.ui.h:3
+msgid "Set Rating Filter"
+msgstr "กำหนดตัวกรองคะแนนนิยม"
+
+#: ../src/ui/main_window.ui.h:1
+msgid "Adjust _Time..."
+msgstr "แก้ไขเ_วลา..."
+
+#: ../src/ui/main_window.ui.h:2
+msgid "Arrange _by"
+msgstr "เ_รียงตาม"
+
+#: ../src/ui/main_window.ui.h:4
+msgid "By _Date"
+msgstr "ตาม_วันที่"
+
+#: ../src/ui/main_window.ui.h:5
+msgid "By _Import Roll"
+msgstr "ตามชุดการ_นำเข้า"
+
+#: ../src/ui/main_window.ui.h:6
+msgid "By _Rating"
+msgstr "ตามคะแนน_นิยม"
+
+#: ../src/ui/main_window.ui.h:7
+msgid "Copy"
+msgstr "คัดลอก"
+
+#: ../src/ui/main_window.ui.h:8
+msgid "Create New _Tag..."
+msgstr "สร้าง_ป้ายกำกับใหม่..."
+
+#: ../src/ui/main_window.ui.h:9
+msgid "Create _New Version..."
+msgstr "สร้างฉบับ_สำเนาใหม่..."
+
+#: ../src/ui/main_window.ui.h:10
+msgid "De_tach Version"
+msgstr "_ถอนฉบับสำเนาออก"
+
+#: ../src/ui/main_window.ui.h:12
+msgid "Fin_d"
+msgstr "_หา"
+
+#: ../src/ui/main_window.ui.h:13
+msgid "Manage _Extensions"
+msgstr "จัดการ_ส่วนเสริม"
+
+#: ../src/ui/main_window.ui.h:14
+msgid "Page Set_up..."
+msgstr "_ตั้งค่าหน้ากระดาษ..."
+
+#: ../src/ui/main_window.ui.h:15
+msgid "Re_fresh Thumbnail"
+msgstr "ปรับแ_สดงภาพย่อ"
+
+#: ../src/ui/main_window.ui.h:19
+msgid "Select _All"
+msgstr "เลือก_ทั้งหมด"
+
+#: ../src/ui/main_window.ui.h:20
+msgid "Select _None"
+msgstr "ไม่เลือกทั้ง_หมด"
+
+#: ../src/ui/main_window.ui.h:21
+msgid "Send by _Mail..."
+msgstr "ส่งทาง_อีเมล..."
+
+#: ../src/ui/main_window.ui.h:23
+msgid "Side_bar"
+msgstr "แถบ_ข้าง"
+
+#: ../src/ui/main_window.ui.h:24
+msgid "T_ags"
+msgstr "_ป้ายกำกับ"
+
+#: ../src/ui/main_window.ui.h:26
+msgid "Thumbnail _elements"
+msgstr "ส่ว_นประกอบภาพย่อ"
+
+#: ../src/ui/main_window.ui.h:27
+msgid "Too_lbar"
+msgstr "แถบเ_ครื่องมือ"
+
+#: ../src/ui/main_window.ui.h:28
+msgid "View"
+msgstr ""
+
+#: ../src/ui/main_window.ui.h:34
+msgid "_Attach Tag to Selection"
+msgstr "แ_ปะป้ายกำกับให้ภาพที่เลือก"
+
+#: ../src/ui/main_window.ui.h:36
+msgid "_Clear Rating Filter"
+msgstr "_ล้างตัวกรองคะแนนนิยม"
+
+#: ../src/ui/main_window.ui.h:37
+msgid "_Clear Roll Filter"
+msgstr "_ล้างตัวกรองชุดนำเข้า"
+
+#: ../src/ui/main_window.ui.h:39
+msgid "_Components"
+msgstr "_องค์ประกอบ"
+
+#: ../src/ui/main_window.ui.h:40
+msgid "_Contents"
+msgstr "เนื้อ_หา"
+
+#: ../src/ui/main_window.ui.h:41
+msgid "_Dates"
+msgstr "_วันที่"
+
+#: ../src/ui/main_window.ui.h:43
+msgid "_Delete Selected Tag"
+msgstr "_ลบป้ายกำกับที่เลือก"
+
+#: ../src/ui/main_window.ui.h:44
+msgid "_Delete Version"
+msgstr "_ลบฉบับสำเนา"
+
+#: ../src/ui/main_window.ui.h:46
+msgid "_Edit Tag..."
+msgstr "แ_ก้ไขป้ายกำกับ..."
+
+#: ../src/ui/main_window.ui.h:47
+msgid "_Export to"
+msgstr "_ส่งออกไปยัง"
+
+#: ../src/ui/main_window.ui.h:48
+msgid "_Filmstrip"
+msgstr "แ_ผ่นฟิล์ม"
+
+#: ../src/ui/main_window.ui.h:51
+msgid "_Hidden"
+msgstr "_ซ่อน"
+
+#: ../src/ui/main_window.ui.h:52
+msgid "_Import..."
+msgstr "_นำเข้า..."
+
+#: ../src/ui/main_window.ui.h:53
+msgid "_Invert Selection"
+msgstr "_สลับการเลือก"
+
+#: ../src/ui/main_window.ui.h:54
+msgid "_Large"
+msgstr "ใ_หญ่"
+
+#: ../src/ui/main_window.ui.h:55
+msgid "_Last Import Roll"
+msgstr "ชุดนำเข้า_ล่าสุด"
+
+#: ../src/ui/main_window.ui.h:56
+msgid "_Loupe"
+msgstr "แ_ว่นขยาย"
+
+#: ../src/ui/main_window.ui.h:57
+msgid "_Medium"
+msgstr "_กลาง"
+
+#: ../src/ui/main_window.ui.h:59
+msgid "_Quit"
+msgstr "_ออก"
+
+#: ../src/ui/main_window.ui.h:60
+msgid "_Ratings"
+msgstr "_คะแนนนิยม"
+
+#: ../src/ui/main_window.ui.h:62
+msgid "_Remove Tag From Selection"
+msgstr "_ลบป้ายกำกับจากภาพที่เลือก"
+
+#: ../src/ui/main_window.ui.h:63
+msgid "_Rename Version"
+msgstr "เปลี่ยน_ชื่อฉบับสำเนา"
+
+#: ../src/ui/main_window.ui.h:64
+msgid "_Reverse Order"
+msgstr "_ย้อนลำดับการเรียง"
+
+#: ../src/ui/main_window.ui.h:65
+msgid "_Select Import Rolls..."
+msgstr "เ_ลือกชุดนำเข้า..."
+
+#: ../src/ui/main_window.ui.h:66
+msgid "_Set Date Range..."
+msgstr "กำหนด_ช่วงเวลา..."
+
+#: ../src/ui/main_window.ui.h:67
+msgid "_Set Rating filter..."
+msgstr "กำหนดตัวกรอง_คะแนนนิยม..."
+
+#: ../src/ui/main_window.ui.h:68
+msgid "_Sharpen..."
+msgstr "ทำให้_คม..."
+
+#: ../src/ui/main_window.ui.h:70
+msgid "_Small"
+msgstr "เ_ล็ก"
+
+#: ../src/ui/main_window.ui.h:71
+msgid "_Tag Icons"
+msgstr "ไ_อคอนป้ายกำกับ"
+
+#: ../src/ui/main_window.ui.h:72
+msgid "_Tags"
+msgstr "_ป้ายกำกับ"
+
+#: ../src/ui/main_window.ui.h:73
+msgid "_Timeline"
+msgstr "ลำดับเว_ลา"
+
+#: ../src/ui/main_window.ui.h:74
+msgid "_Tools"
+msgstr "เ_ครื่องมือ"
+
+#: ../src/ui/main_window.ui.h:75
+msgid "_Untagged Photos"
+msgstr "ภาพถ่ายไ_ม่มีป้ายกำกับ"
+
+#: ../src/ui/main_window.ui.h:76
+msgid "_Version"
+msgstr "ฉบับ_สำเนา"
+
+#: ../src/Updater.cs:622
+msgid "Updating F-Spot Database"
+msgstr ""
+
+#: ../src/Updater.cs:623
+msgid ""
+"Please wait while your F-Spot gallery's database is updated. This may take "
+"some time."
+msgstr ""
#. Mono.Unix.Error error = Mono.Unix.Stdlib.GetLastError ();
-#: ../src/Unix.cs:25
+#: ../src/Utils/Unix.cs:35
msgid "Unable to create temporary file"
msgstr ""
-#: ../src/Util.cs:299
-msgid "There was an error invoking the external handler"
+#: ../src/Widgets/CustomPrintWidget.cs:119
+msgid "Page Setup"
+msgstr "ตั้งค่าหน้ากระดาษ"
+
+#: ../src/Widgets/CustomPrintWidget.cs:123
+#: ../src/Widgets/CustomPrintWidget.cs:127
+#: ../src/Widgets/CustomPrintWidget.cs:133
+#, csharp-format
+msgid "Paper Size: {0} x {1} mm"
+msgstr ""
+
+#: ../src/Widgets/CustomPrintWidget.cs:130
+msgid "Set Page Size and Orientation"
+msgstr ""
+
+#: ../src/Widgets/CustomPrintWidget.cs:141
+msgid "Photos per page"
+msgstr "จำนวนภาพต่อหน้า"
+
+#: ../src/Widgets/CustomPrintWidget.cs:151
+msgid "Repeat"
+msgstr ""
+
+#: ../src/Widgets/CustomPrintWidget.cs:152
+msgid "Print cut marks"
+msgstr ""
+
+#: ../src/Widgets/CustomPrintWidget.cs:158
+msgid "Photos layout"
+msgstr ""
+
+#: ../src/Widgets/CustomPrintWidget.cs:160
+msgid "Full Page (no margin)"
+msgstr ""
+
+#. Note for translators: "Zoom" is a Fit Mode
+#: ../src/Widgets/CustomPrintWidget.cs:163
+msgid "Zoom"
+msgstr ""
+
+#: ../src/Widgets/CustomPrintWidget.cs:164
+msgid "Fill"
+msgstr ""
+
+#: ../src/Widgets/CustomPrintWidget.cs:165
+msgid "Scaled"
+msgstr ""
+
+#: ../src/Widgets/CustomPrintWidget.cs:170
+msgid "White borders"
+msgstr ""
+
+#: ../src/Widgets/CustomPrintWidget.cs:176
+msgid "Custom Text"
+msgstr ""
+
+#: ../src/Widgets/CustomPrintWidget.cs:180
+msgid "Photos infos"
+msgstr ""
+
+#: ../src/Widgets/CustomPrintWidget.cs:182
+msgid "Print file name"
+msgstr ""
+
+#: ../src/Widgets/CustomPrintWidget.cs:183
+msgid "Print photo date"
+msgstr "พิมพ์วันที่ของภาพถ่าย"
+
+#: ../src/Widgets/CustomPrintWidget.cs:184
+msgid "Print photo time"
+msgstr "พิมพ์เวลาของภาพถ่าย"
+
+#: ../src/Widgets/CustomPrintWidget.cs:185
+msgid "Print photo tags"
+msgstr "พิมพ์ป้ายกำกับของภาพถ่าย"
+
+#: ../src/Widgets/CustomPrintWidget.cs:186
+msgid "Print photo comment"
+msgstr ""
+
+#: ../src/Widgets/EditorPage.cs:30 ../src/Widgets/Sidebar.cs:54
+msgid "Edit"
+msgstr "แก้ไข"
+
+#: ../src/Widgets/EditorPage.cs:198
+msgid ""
+"This tool requires an active selection. Please select a region of the photo "
+"and try the operation again"
+msgstr "เครื่องมือนี้จำเป็นต้องเลือกพื้นที่ที่ต้องการทำงานก่อน กรุณาลองอีกครั้ง"
+
+#: ../src/Widgets/EditorPage.cs:216
+msgid "Error saving adjusted photo"
+msgid_plural "Error saving adjusted photos"
+msgstr[0] ""
+
+#: ../src/Widgets/EditorPage.cs:218
+#, csharp-format
+msgid ""
+"Received exception \"{0}\". Note that you have to develop RAW files into "
+"JPEG before you can edit them."
+msgstr ""
+
+#: ../src/Widgets/Filmstrip.cs:572
+msgid "_Horizontal"
+msgstr ""
+
+#: ../src/Widgets/Filmstrip.cs:576
+msgid "_Vertical"
+msgstr ""
+
+#: ../src/Widgets/FindBar.cs:58
+msgid "Find:"
+msgstr "หา:"
+
+#: ../src/Widgets/FolderTreePage.cs:22
+msgid "Folders"
+msgstr "โฟลเดอร์"
+
+#: ../src/Widgets/FolderTreeView.cs:123
+msgid "Filesystem"
+msgstr "ระบบแฟ้ม"
+
+#: ../src/Widgets/InfoBox.cs:182
+msgid "Histogram"
+msgstr ""
+
+#: ../src/Widgets/InfoBox.cs:215
+msgid "Version"
+msgstr "รุ่น"
+
+#: ../src/Widgets/InfoBox.cs:218
+msgid "Date"
+msgstr "วันที่"
+
+#: ../src/Widgets/InfoBox.cs:224
+msgid "Exposure"
+msgstr ""
+
+#: ../src/Widgets/InfoBox.cs:228
+msgid "Focal Length"
+msgstr "ระยะโฟกัส"
+
+#: ../src/Widgets/InfoBox.cs:234
+msgid "File Size"
+msgstr "ขนาดแฟ้ม"
+
+#: ../src/Widgets/InfoBox.cs:237
+msgid "Rating"
+msgstr "คะแนนนิยม"
+
+#: ../src/Widgets/InfoBox.cs:390 ../src/Widgets/InfoBox.cs:398
+#: ../src/Widgets/InfoBox.cs:428
+msgid "(wrong format)"
+msgstr ""
+
+#: ../src/Widgets/InfoBox.cs:418 ../src/Widgets/InfoBox.cs:441
+#: ../src/Widgets/InfoBox.cs:451 ../src/Widgets/InfoBox.cs:460
+msgid "(Unknown)"
+msgstr "(ไม่มีข้อมูล)"
+
+#: ../src/Widgets/InfoBox.cs:563
+#, csharp-format
+msgid "(One Edit)"
+msgid_plural "({0} Edits)"
+msgstr[0] "(การแก้ไข {0} รายการ)"
+
+#: ../src/Widgets/InfoBox.cs:577
+msgid "(File read error)"
msgstr ""
-#: ../src/Util.cs:300
+#: ../src/Widgets/InfoBox.cs:622
+#, csharp-format
+msgid "{0} Photos"
+msgstr "ภาพถ่าย {0} ภาพ"
+
+#. Note for translators: {0} is a date, {1} and {2} are times.
+#: ../src/Widgets/InfoBox.cs:642
#, csharp-format
msgid ""
-"Received error:\n"
-"\"{0}\"\n"
+"On {0} between \n"
+"{1} and {2}"
msgstr ""
-#: ../src/QueryDisplay.cs:35
-msgid "Find: "
-msgstr "ค้นหา:"
+#: ../src/Widgets/InfoBox.cs:647
+#, csharp-format
+msgid ""
+"Between {0} \n"
+"and {1}"
+msgstr ""
-#: ../src/QueryDisplay.cs:39
-msgid "Untagged photos"
-msgstr "รูปไม่ได้ใส่ป้าย"
+#: ../src/Widgets/InfoBox.cs:674
+msgid "(At least one File not found)"
+msgstr "(ไม่พบแฟ้มอย่างน้อยหนึ่งแฟ้ม)"
-#: ../src/QueryDisplay.cs:56
-msgid "No matching photos found "
-msgstr "ไม่พบรูปที่ตรงเงื่อนไข"
+#: ../src/Widgets/InfoBox.cs:791
+msgid "Show Photo Name"
+msgstr "แสดงชื่อภาพถ่าย"
-#: ../src/QueryDisplay.cs:64
-msgid "Clear search"
-msgstr "ล้างการค้นหา"
+#: ../src/Widgets/InfoBox.cs:800
+msgid "Show Date"
+msgstr "แสดงวันที่"
+
+#: ../src/Widgets/InfoBox.cs:809
+msgid "Show Size"
+msgstr "แสดงขนาด"
+
+#: ../src/Widgets/InfoBox.cs:818
+msgid "Show Exposure"
+msgstr ""
+
+#: ../src/Widgets/InfoBox.cs:827
+msgid "Show Focal Length"
+msgstr "แสดงระยะโฟกัส"
+
+#: ../src/Widgets/InfoBox.cs:836
+msgid "Show Camera"
+msgstr "แสดงกล้อง"
+
+#: ../src/Widgets/InfoBox.cs:845
+msgid "Show File Size"
+msgstr "แสดงขนาดแฟ้ม"
+
+#: ../src/Widgets/MetadataDisplay.cs:25
+msgid "Metadata"
+msgstr "ข้อมูลภาพถ่าย"
+
+#: ../src/Widgets/MetadataDisplay.cs:106
+msgid "Extended Metadata"
+msgstr "ข้อมูลภาพถ่ายเพิ่มเติม"
+
+#. clear Extended Metadata
+#: ../src/Widgets/MetadataDisplay.cs:394
+msgid "No Extended Metadata Available"
+msgstr "ไม่มีข้อมูลภาพถ่ายเพิ่มเติม"
+
+#: ../src/Widgets/MetadataDisplay.cs:412
+msgid "No active photo"
+msgstr ""
+
+#: ../src/Widgets/MetadataDisplay.cs:414
+#, csharp-format
+msgid "The photo \"{0}\" does not exist"
+msgstr "ไม่มีภาพถ่าย \"{0}\" อยู่"
+
+#: ../src/Widgets/MetadataDisplay.cs:417
+msgid "No metadata available"
+msgstr "ไม่มีข้อมูลภาพถ่าย"
+
+#: ../src/Widgets/OpenWithMenu.cs:71
+msgid "No applications available"
+msgstr "ไม่มีโปรแกรม"
+
+#: ../src/Widgets/RatingMenuItem.cs:56
+msgid "Rating:"
+msgstr "คะแนนนิยม:"
+
+#: ../src/XmpTagsImporter.cs:91
+msgid "Country"
+msgstr "ประเทศ"
+
+#: ../src/XmpTagsImporter.cs:92
+msgid "City"
+msgstr "เมือง"
+
+#: ../src/XmpTagsImporter.cs:93
+msgid "State"
+msgstr "รัฐ"
+
+#. namespace
+#: ../tools/f-spot-screensaver.desktop.in.h:1
+msgid "Display a slideshow from F-Spot"
+msgstr "ฉายสไลด์จาก F-Spot"
+
+#: ../tools/f-spot-screensaver.desktop.in.h:2
+msgid "F-Spot photos"
+msgstr "ภาพถ่าย F-Spot"
+
+#~ msgid "Cancel"
+#~ msgstr "ยกเลิก"
+
+#~ msgid "BMP"
+#~ msgstr "BMP"
+
+#~ msgid "GIF"
+#~ msgstr "GIF"
+
+#~ msgid "ICO"
+#~ msgstr "ICO"
+
+#~ msgid "JPEG"
+#~ msgstr "JPEG"
+
+#~ msgid "PNG"
+#~ msgstr "PNG"
+
+#~ msgid "PNM"
+#~ msgstr "PNM"
+
+#~ msgid "RAS"
+#~ msgstr "RAS"
+
+#~ msgid "SVG"
+#~ msgstr "SVG"
+
+#~ msgid "TGA"
+#~ msgstr "TGA"
+
+#~ msgid "TIFF"
+#~ msgstr "TIFF"
+
+#~ msgid "XBM"
+#~ msgstr "XBM"
+
+#~ msgid "XPM"
+#~ msgstr "XPM"
+
+#~ msgid "Unsupported file format."
+#~ msgstr "ไม่สนับสนุนแฟ้มชนิดนี้"
+
+#~ msgid "Ad_just Color..."
+#~ msgstr "ปรับ_สี..."
+
+#~ msgid "Co_nfigure"
+#~ msgstr "_ตั้งค่า"
+
+#~ msgid "Copy _Files to: "
+#~ msgstr "คัดลอกแ_ฟ้มไปยัง:"
+
+#~ msgid "Directory"
+#~ msgstr "ไดเรคทอรี"
+
+#~ msgid "Display Too_lbar"
+#~ msgstr "แสดงแ_ถบเครื่องมือ"
+
+#~ msgid "E_xport to CD..."
+#~ msgstr "ส่งออกเป็_นซีดี..."
+
+#~ msgid "F-Spot Photo Album"
+#~ msgstr "อัลบั้มรูป F-Spot"
+
+#~ msgid "Find by _Tag"
+#~ msgstr "ค้นหาโดย_ป้ายกำกับ"
+
+#~ msgid "Was actually taken on: "
+#~ msgstr "ถ่ายเมื่อ:"
+
+#~ msgid "Write _metadata to file"
+#~ msgstr "เ_ขียนข้อมูลภาพลงในแฟ้ม"
+
+#~ msgid "_Border:"
+#~ msgstr "_ขอบ:"
+
+#~ msgid "_Directory"
+#~ msgstr "ไ_ดเรกทอรี"
+
+#~ msgid "_Month"
+#~ msgstr "เ_ดือน"
+
+#~ msgid "_Print..."
+#~ msgstr "_พิมพ์..."
+
+#~ msgid "img_000.jpg"
+#~ msgstr "img_000.jpg"
+
+#~ msgid "_Merge tags"
+#~ msgstr "_รวมป้ายกำกับ"
+
+#~ msgid "Delete From Drive"
+#~ msgstr "ลบจากดิสก์"
+
+#~ msgid "Remove Tag"
+#~ msgstr "ลบป้ายกำกับ"
+
+#~ msgid "Remove redeye from selected area"
+#~ msgstr "แก้ตาแดงในพื้นที่ที่เลือก"
+
+#~ msgid "Select an area to remove redeye"
+#~ msgstr "เลือกพื้นที่เพื่อแก้ตาแดง"
+
+#~ msgid "Adjust the photo colors"
+#~ msgstr "ปรับแต่งระดับสีของภาพ"
+
+#~ msgid "Reduce Red-Eye"
+#~ msgstr "แก้ตาแดง"
+
+#~ msgid "Tag Name:"
+#~ msgstr "ชื่อป้ายกำกับ:"
+#~ msgid "Attach Tag To Selection"
+#~ msgstr "ใส่ป้ายกำกับให้รูปที่เลือก"
diff --git a/src/Accelerometer.cs b/src/Accelerometer.cs
index 26080cc..3978f12 100644
--- a/src/Accelerometer.cs
+++ b/src/Accelerometer.cs
@@ -6,6 +6,7 @@ using System;
using System.IO;
using FSpot.Utils;
+using Hyena;
namespace FSpot {
@@ -77,7 +78,7 @@ namespace FSpot {
if (eh != null)
eh (null, EventArgs.Empty);
- Console.WriteLine ("Laptop orientation changed...");
+ Log.Debug ("Laptop orientation changed...");
}
return true;
diff --git a/src/AssemblyInfo.cs b/src/AssemblyInfo.cs
new file mode 100644
index 0000000..1774e79
--- /dev/null
+++ b/src/AssemblyInfo.cs
@@ -0,0 +1,16 @@
+/*
+ * AssemblyInfo.cs
+ *
+ * Authors
+ * Stephane Delcroix <stephane at delcroix.org>
+ *
+ * This is free software. See COPYING for details.
+ */
+
+using System.Reflection;
+using System.Runtime.CompilerServices;
+
+[assembly: AssemblyVersion("0.7.0")]
+[assembly: AssemblyTitle ("F-Spot")]
+[assembly: AssemblyCopyright ("(c)2003-2008, Novell Inc")]
+[assembly: AssemblyDescription ("Personal photo management for the GNOME Desktop")]
diff --git a/src/Bling/Makefile.am b/src/Bling/Makefile.am
new file mode 100644
index 0000000..d857bd4
--- /dev/null
+++ b/src/Bling/Makefile.am
@@ -0,0 +1,17 @@
+ASSEMBLY = FSpot.Bling
+TARGET = library
+LINK = $(REF_FSPOT_BLING)
+
+SOURCES = \
+ Animation.cs \
+ BackEase.cs \
+ CubicEase.cs \
+ DoubleAnimation.cs \
+ EasedAnimation.cs \
+ EasingFunction.cs \
+ EasingMode.cs \
+ QuinticEase.cs
+
+RESOURCES =
+
+include $(top_srcdir)/build/build.mk
diff --git a/src/Bling/Makefile.in b/src/Bling/Makefile.in
new file mode 100644
index 0000000..f480591
--- /dev/null
+++ b/src/Bling/Makefile.in
@@ -0,0 +1,811 @@
+# Makefile.in generated by automake 1.11.1 from Makefile.am.
+# @configure_input@
+
+# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
+# 2003, 2004, 2005, 2006, 2007, 2008, 2009 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.
+
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
+# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
+# PARTICULAR PURPOSE.
+
+ at SET_MAKE@
+
+VPATH = @srcdir@
+pkgdatadir = $(datadir)/@PACKAGE@
+pkgincludedir = $(includedir)/@PACKAGE@
+pkglibdir = $(libdir)/@PACKAGE@
+pkglibexecdir = $(libexecdir)/@PACKAGE@
+am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
+install_sh_DATA = $(install_sh) -c -m 644
+install_sh_PROGRAM = $(install_sh) -c
+install_sh_SCRIPT = $(install_sh) -c
+INSTALL_HEADER = $(INSTALL_DATA)
+transform = $(program_transform_name)
+NORMAL_INSTALL = :
+PRE_INSTALL = :
+POST_INSTALL = :
+NORMAL_UNINSTALL = :
+PRE_UNINSTALL = :
+POST_UNINSTALL = :
+build_triplet = @build@
+host_triplet = @host@
+DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in \
+ $(top_srcdir)/build/build.environment.mk \
+ $(top_srcdir)/build/build.mk \
+ $(top_srcdir)/build/build.rules.mk
+ at ENABLE_TESTS_TRUE@am__append_1 = " $(NUNIT_LIBS)"
+subdir = src/Bling
+ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
+am__aclocal_m4_deps = $(top_srcdir)/build/m4/shave/shave.m4 \
+ $(top_srcdir)/build/m4/shamrock/expansions.m4 \
+ $(top_srcdir)/build/m4/shamrock/gnome-doc.m4 \
+ $(top_srcdir)/build/m4/shamrock/mono.m4 \
+ $(top_srcdir)/build/m4/shamrock/nunit.m4 \
+ $(top_srcdir)/build/m4/shamrock/programs.m4 \
+ $(top_srcdir)/build/m4/f-spot/flickrnet.m4 \
+ $(top_srcdir)/build/m4/f-spot/gnome-keyring-sharp.m4 \
+ $(top_srcdir)/build/m4/f-spot/gtk-sharp.m4 \
+ $(top_srcdir)/build/m4/f-spot/mono-addins.m4 \
+ $(top_srcdir)/acinclude.m4 $(top_srcdir)/configure.ac
+am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
+ $(ACLOCAL_M4)
+mkinstalldirs = $(install_sh) -d
+CONFIG_HEADER = $(top_builddir)/config.h
+CONFIG_CLEAN_FILES =
+CONFIG_CLEAN_VPATH_FILES =
+am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`;
+am__vpath_adj = case $$p in \
+ $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \
+ *) f=$$p;; \
+ esac;
+am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`;
+am__install_max = 40
+am__nobase_strip_setup = \
+ srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'`
+am__nobase_strip = \
+ for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||"
+am__nobase_list = $(am__nobase_strip_setup); \
+ for p in $$list; do echo "$$p $$p"; done | \
+ sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \
+ $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \
+ if (++n[$$2] == $(am__install_max)) \
+ { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \
+ END { for (dir in files) print dir, files[dir] }'
+am__base_list = \
+ sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \
+ sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g'
+am__installdirs = "$(DESTDIR)$(moduledir)"
+SCRIPTS = $(module_SCRIPTS)
+DIST_SOURCES =
+DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
+ACLOCAL = @ACLOCAL@
+ACLOCAL_AMFLAGS = @ACLOCAL_AMFLAGS@
+ALL_LINGUAS = @ALL_LINGUAS@
+AMTAR = @AMTAR@
+AM_MAKEFLAGS = @AM_MAKEFLAGS@
+API_VERSION = @API_VERSION@
+AR = @AR@
+ASM_VERSION = @ASM_VERSION@
+AUTOCONF = @AUTOCONF@
+AUTOHEADER = @AUTOHEADER@
+AUTOMAKE = @AUTOMAKE@
+AWK = @AWK@
+CATALOGS = @CATALOGS@
+CATOBJEXT = @CATOBJEXT@
+CC = @CC@
+CCDEPMODE = @CCDEPMODE@
+CFLAGS = @CFLAGS@
+CPP = @CPP@
+CPPFLAGS = @CPPFLAGS@
+CSC_DEFINES = @CSC_DEFINES@
+CXX = @CXX@
+CXXCPP = @CXXCPP@
+CXXDEPMODE = @CXXDEPMODE@
+CXXFLAGS = @CXXFLAGS@
+CYGPATH_W = @CYGPATH_W@
+DATADIRNAME = @DATADIRNAME@
+DEFS = @DEFS@
+DEPDIR = @DEPDIR@
+DISPLAY_VERSION = @DISPLAY_VERSION@
+DISTCHECK_CONFIGURE_FLAGS = @DISTCHECK_CONFIGURE_FLAGS@
+DOC_USER_FORMATS = @DOC_USER_FORMATS@
+DSYMUTIL = @DSYMUTIL@
+DUMPBIN = @DUMPBIN@
+ECHO_C = @ECHO_C@
+ECHO_N = @ECHO_N@
+ECHO_T = @ECHO_T@
+EGREP = @EGREP@
+EXEEXT = @EXEEXT@
+EXIF_CFLAGS = @EXIF_CFLAGS@
+EXIF_LIBS = @EXIF_LIBS@
+EXIF_SOVERSION = @EXIF_SOVERSION@
+F77 = @F77@
+FC = @FC@
+FGREP = @FGREP@
+FLICKRNET_CFLAGS = @FLICKRNET_CFLAGS@
+FLICKRNET_LIBS = @FLICKRNET_LIBS@
+F_CFLAGS = @F_CFLAGS@
+F_LIBS = @F_LIBS@
+GAPI2CODEGEN = @GAPI2CODEGEN@
+GAPI2FIXUP = @GAPI2FIXUP@
+GAPI2PARSER = @GAPI2PARSER@
+GCONFTOOL = @GCONFTOOL@
+GCONF_SCHEMA_CONFIG_SOURCE = @GCONF_SCHEMA_CONFIG_SOURCE@
+GCONF_SCHEMA_FILE_DIR = @GCONF_SCHEMA_FILE_DIR@
+GCONF_SHARP_CFLAGS = @GCONF_SHARP_CFLAGS@
+GCONF_SHARP_LIBS = @GCONF_SHARP_LIBS@
+GETTEXT_PACKAGE = @GETTEXT_PACKAGE@
+GIO_CFLAGS = @GIO_CFLAGS@
+GIO_LIBS = @GIO_LIBS@
+GLIBSHARP_2_12_7_CFLAGS = @GLIBSHARP_2_12_7_CFLAGS@
+GLIBSHARP_2_12_7_LIBS = @GLIBSHARP_2_12_7_LIBS@
+GLIBSHARP_CFLAGS = @GLIBSHARP_CFLAGS@
+GLIBSHARP_LIBS = @GLIBSHARP_LIBS@
+GLIB_CFLAGS = @GLIB_CFLAGS@
+GLIB_GENMARSHAL = @GLIB_GENMARSHAL@
+GLIB_LIBS = @GLIB_LIBS@
+GLIB_MKENUMS = @GLIB_MKENUMS@
+GMOFILES = @GMOFILES@
+GMSGFMT = @GMSGFMT@
+GNOME_ICON_THEME_PREFIX = @GNOME_ICON_THEME_PREFIX@
+GNOME_SCREENSAVER_SAVERDIR = @GNOME_SCREENSAVER_SAVERDIR@
+GNOME_SCREENSAVER_THEMESDIR = @GNOME_SCREENSAVER_THEMESDIR@
+GNOME_SHARP_CFLAGS = @GNOME_SHARP_CFLAGS@
+GNOME_SHARP_LIBS = @GNOME_SHARP_LIBS@
+GOBJECT_QUERY = @GOBJECT_QUERY@
+GREP = @GREP@
+GTKSHARP_A11Y_CFLAGS = @GTKSHARP_A11Y_CFLAGS@
+GTKSHARP_A11Y_LIBS = @GTKSHARP_A11Y_LIBS@
+GTKSHARP_CFLAGS = @GTKSHARP_CFLAGS@
+GTKSHARP_LIBS = @GTKSHARP_LIBS@
+HELP_DIR = @HELP_DIR@
+ICONS_DIRECTORY = @ICONS_DIRECTORY@
+INSTALL = @INSTALL@
+INSTALL_DATA = @INSTALL_DATA@
+INSTALL_PROGRAM = @INSTALL_PROGRAM@
+INSTALL_SCRIPT = @INSTALL_SCRIPT@
+INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
+INSTOBJEXT = @INSTOBJEXT@
+INTLLIBS = @INTLLIBS@
+INTLTOOL_EXTRACT = @INTLTOOL_EXTRACT@
+INTLTOOL_MERGE = @INTLTOOL_MERGE@
+INTLTOOL_PERL = @INTLTOOL_PERL@
+INTLTOOL_UPDATE = @INTLTOOL_UPDATE@
+KEYRINGSHARP_CFLAGS = @KEYRINGSHARP_CFLAGS@
+KEYRINGSHARP_LIBS = @KEYRINGSHARP_LIBS@
+LCMS_CFLAGS = @LCMS_CFLAGS@
+LCMS_LIBS = @LCMS_LIBS@
+LD = @LD@
+LDFLAGS = @LDFLAGS@
+LIBEXIF_VERSION_CHECK_CFLAGS = @LIBEXIF_VERSION_CHECK_CFLAGS@
+LIBEXIF_VERSION_CHECK_LIBS = @LIBEXIF_VERSION_CHECK_LIBS@
+LIBJPEG = @LIBJPEG@
+LIBOBJS = @LIBOBJS@
+LIBS = @LIBS@
+LIBTOOL = @LIBTOOL@
+LIPO = @LIPO@
+LN_S = @LN_S@
+LTLIBOBJS = @LTLIBOBJS@
+MAINT = @MAINT@
+MAKEFLAGS = @MAKEFLAGS@
+MAKEINFO = @MAKEINFO@
+MCS = @MCS@
+MKDIR_P = @MKDIR_P@
+MKINSTALLDIRS = @MKINSTALLDIRS@
+MONO = @MONO@
+MONO_ADDINS_CFLAGS = @MONO_ADDINS_CFLAGS@
+MONO_ADDINS_GUI_CFLAGS = @MONO_ADDINS_GUI_CFLAGS@
+MONO_ADDINS_GUI_LIBS = @MONO_ADDINS_GUI_LIBS@
+MONO_ADDINS_LIBS = @MONO_ADDINS_LIBS@
+MONO_ADDINS_SETUP_CFLAGS = @MONO_ADDINS_SETUP_CFLAGS@
+MONO_ADDINS_SETUP_LIBS = @MONO_ADDINS_SETUP_LIBS@
+MONO_MODULE_CFLAGS = @MONO_MODULE_CFLAGS@
+MONO_MODULE_LIBS = @MONO_MODULE_LIBS@
+MSGFMT = @MSGFMT@
+MSGFMT_OPTS = @MSGFMT_OPTS@
+MSGMERGE = @MSGMERGE@
+NDESK_DBUS_CFLAGS = @NDESK_DBUS_CFLAGS@
+NDESK_DBUS_LIBS = @NDESK_DBUS_LIBS@
+NM = @NM@
+NMEDIT = @NMEDIT@
+NUNIT_CFLAGS = @NUNIT_CFLAGS@
+NUNIT_LIBS = @NUNIT_LIBS@
+OBJC = @OBJC@
+OBJDUMP = @OBJDUMP@
+OBJEXT = @OBJEXT@
+OMF_DIR = @OMF_DIR@
+OTOOL = @OTOOL@
+OTOOL64 = @OTOOL64@
+PACKAGE = @PACKAGE@
+PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
+PACKAGE_NAME = @PACKAGE_NAME@
+PACKAGE_STRING = @PACKAGE_STRING@
+PACKAGE_TARNAME = @PACKAGE_TARNAME@
+PACKAGE_URL = @PACKAGE_URL@
+PACKAGE_VERSION = @PACKAGE_VERSION@
+PATH_SEPARATOR = @PATH_SEPARATOR@
+PKG_CONFIG = @PKG_CONFIG@
+POFILES = @POFILES@
+POSUB = @POSUB@
+PO_IN_DATADIR_FALSE = @PO_IN_DATADIR_FALSE@
+PO_IN_DATADIR_TRUE = @PO_IN_DATADIR_TRUE@
+Q = @Q@
+RANLIB = @RANLIB@
+SED = @SED@
+SET_MAKE = @SET_MAKE@
+SHELL = @SHELL@
+STRIP = @STRIP@
+TURTLEDIR = @TURTLEDIR@
+UNIQUE_CFLAGS = @UNIQUE_CFLAGS@
+UNIQUE_LIBS = @UNIQUE_LIBS@
+USE_NLS = @USE_NLS@
+V = @V@
+VERSION = @VERSION@
+WARN_CFLAGS = @WARN_CFLAGS@
+XGETTEXT = @XGETTEXT@
+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_DUMPBIN = @ac_ct_DUMPBIN@
+am__include = @am__include@
+am__leading_dot = @am__leading_dot@
+am__quote = @am__quote@
+am__tar = @am__tar@
+am__untar = @am__untar@
+bindir = @bindir@
+build = @build@
+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@
+expanded_bindir = @expanded_bindir@
+expanded_datadir = @expanded_datadir@
+expanded_libdir = @expanded_libdir@
+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@
+lt_ECHO = @lt_ECHO@
+mandir = @mandir@
+mkdir_p = @mkdir_p@
+oldincludedir = @oldincludedir@
+pdfdir = @pdfdir@
+prefix = @prefix@
+program_transform_name = @program_transform_name@
+psdir = @psdir@
+sbindir = @sbindir@
+sharedstatedir = @sharedstatedir@
+shavedir = @shavedir@
+srcdir = @srcdir@
+sysconfdir = @sysconfdir@
+target_alias = @target_alias@
+top_build_prefix = @top_build_prefix@
+top_builddir = @top_builddir@
+top_srcdir = @top_srcdir@
+ASSEMBLY = FSpot.Bling
+TARGET = library
+LINK = $(REF_FSPOT_BLING) $(am__append_1)
+SOURCES = \
+ Animation.cs \
+ BackEase.cs \
+ CubicEase.cs \
+ DoubleAnimation.cs \
+ EasedAnimation.cs \
+ EasingFunction.cs \
+ EasingMode.cs \
+ QuinticEase.cs
+
+RESOURCES =
+
+# Initializers
+MONO_BASE_PATH =
+MONO_ADDINS_PATH =
+
+# Install Paths
+DEFAULT_INSTALL_DIR = $(pkglibdir)
+BACKENDS_INSTALL_DIR = $(DEFAULT_INSTALL_DIR)/Backends
+EXTENSIONS_INSTALL_DIR = $(DEFAULT_INSTALL_DIR)/Extensions
+DIR_DOCS = $(top_builddir)/docs
+DIR_EXTENSIONS = $(top_builddir)/extensions
+DIR_ICONS = $(top_builddir)/icons
+DIR_JPEGTRAN = $(top_builddir)/lib/libjpegtran
+DIR_LIBFSPOT = $(top_builddir)/lib/libfspot
+DIR_SEMWEB = $(top_builddir)/lib/semweb
+DIR_SRC = $(top_builddir)/src
+DIR_GIOSHARP = $(top_builddir)/lib/gio-sharp/gio
+DIR_GTKSHARPBEANS = $(top_builddir)/lib/gtk-sharp-beans
+DIR_UNIQUESHARP = $(top_builddir)/lib/unique-sharp/unique
+DIR_BIN = $(top_builddir)/bin
+
+# External libraries to link against, generated from configure
+LINK_SYSTEM = -r:System
+LINK_SYSTEMDATA = -r:System.Data
+LINK_SYSTEM_WEB = -r:System.Web
+LINK_MONO_POSIX = -r:Mono.Posix
+LINK_MONO_CAIRO = -r:Mono.Cairo
+LINK_MONO_SIMD = -r:Mono.Simd
+LINK_MONODATA = -r:Mono.Data
+LINK_MONO_DATA_SQLITECLIENT = -r:Mono.Data.SqliteClient
+LINK_ICSHARP_ZIP_LIB = -r:ICSharpCode.SharpZipLib
+LINK_KEYRING = $(KEYRINGSHARP_LIBS)
+LINK_GLIB = $(GLIBSHARP_LIBS)
+LINK_GTK = $(GTKSHARP_LIBS)
+LINK_GNOME = $(GNOME_SHARP_LIBS)
+LINK_GCONF = $(GCONF_SHARP_LIBS)
+LINK_GLADE = -pkg:glade-sharp-2.0
+LINK_FLICKRNET = -pkg:flickrnet
+LINK_DBUS = $(NDESK_DBUS_LIBS) $(NDESK_DBUS_GLIB_LIBS)
+LINK_DBUS_NO_GLIB = $(NDESK_DBUS_LIBS)
+LINK_MONO_ADDINS_DEPS = $(MONO_ADDINS_LIBS)
+LINK_MONO_ADDINS_SETUP_DEPS = $(MONO_ADDINS_SETUP_LIBS)
+LINK_MONO_ADDINS_GUI_DEPS = $(MONO_ADDINS_GUI_LIBS)
+
+# GIO
+REF_GIO =
+LINK_GIO = -r:$(DIR_GIOSHARP)/gio-sharp.dll
+LINK_GIO_DEPS = $(REF_GIO) $(LINK_GIO)
+
+# Gtk Beans
+REF_GTK_BEANS = $(LINK_GIO_DEPS)
+LINK_GTK_BEANS = -r:$(DIR_GTKSHARPBEANS)/gtk-sharp-beans.dll
+LINK_GTK_BEANS_DEPS = $(REF_GTK_BEANS) $(LINK_GTK_BEANS)
+
+# Uniqe
+REF_UNIQUE =
+LINK_UNIQUE = -r:$(DIR_UNIQUESHARP)/unique-sharp.dll
+LINK_UNIQUE_DEPS = $(REF_UNIQUE) $(LINK_UNIQUE)
+
+# Hyena
+REF_HYENA = $(LINK_SYSTEM) $(LINK_MONO_POSIX)
+LINK_HYENA = -r:$(DIR_BIN)/Hyena.dll
+LINK_HYENA_DEPS = $(REF_HYENA) $(LINK_HYENA)
+
+# Semweb
+REF_SEMWEB = $(LINK_SYSTEMDATA) $(LINK_HYENA_DEPS)
+LINK_SEMWEB = -r:$(DIR_BIN)/SemWeb.dll
+LINK_SEMWEB_DEPS = $(REF_SEMWEB) $(LINK_SEMWEB)
+
+# Hyena.Data.Sqlite
+REF_HYENA_DATA_SQLITE = $(LINK_SQLITE)
+LINK_HYENA_DATA_SQLITE = -r:$(DIR_BIN)/Hyena.Data.Sqlite.dll
+LINK_HYENA_DATA_SQLITE_DEPS = $(REF_HYENA_DATA_SQLITE) $(LINK_HYENA_DATA_SQLITE)
+
+# Hyena.Gui
+REF_HYENA_GUI = $(LINK_HYENA_DEPS)
+LINK_HYENA_GUI = -r:$(DIR_BIN)/Hyena.Gui.dll
+LINK_HENA_GUI_DEPS = $(REF_HYENA_GUI) $(LINK_HYENA_GUI)
+
+# FSpot.Cms
+REF_FSPOT_CMS = $(LINK_GTK)
+LINK_FSPOT_CMS = -r:$(DIR_BIN)/FSpot.Cms.dll
+LINK_FSPOT_CMS_DEPS = $(REF_FSPOT_CMS) $(LINK_FSPOT_CMS)
+
+# FSpot.Utils
+REF_FSPOT_UTILS = $(LINK_HYENA_DEPS) $(LINK_GTK) $(LINK_GIO) $(LINK_MONO_CAIRO)
+LINK_FSPOT_UTILS = -r:$(DIR_BIN)/FSpot.Utils.dll
+LINK_FSPOT_UTILS_DEPS = $(REF_FSPOT_UTILS) $(LINK_FSPOT_UTILS)
+
+# FSpot.Core
+REF_FSPOT_CORE = $(LINK_FSPOT_UTILS_DEPS) $(LINK_FSPOT_CMS_DEPS)
+LINK_FSPOT_CORE = -r:$(DIR_BIN)/FSpot.Core.dll
+LINK_FSPOT_CORE_DEPS = $(REF_FSPOT_CORE) $(LINK_FSPOT_CORE)
+
+# FSpot.Query
+REF_FSPOT_QUERY = $(LINK_FSPOT_CORE_DEPS)
+LINK_FSPOT_QUERY = -r:$(DIR_BIN)/FSpot.Query.dll
+LINK_FSPOT_QUERY_DEPS = $(REF_FSPOT_QUERY) $(LINK_FSPOT_QUERY)
+
+# FSpot.JobScheduler
+REF_FSPOT_JOB_SCHEDULER = $(LINK_HYENA_DEPS)
+LINK_FSPOT_JOB_SCHEDULER = -r:$(DIR_BIN)/FSpot.JobScheduler.dll
+LINK_FSPOT_JOB_SCHEDULER_DEPS = $(REF_FSPOT_JOB_SCHEDULER) $(LINK_FSPOT_JOB_SCHEDULER)
+
+# FSpot.Bling
+REF_FSPOT_BLING = $(LINK_GTK_BEANS_DEPS) $(LINK_GLIB)
+LINK_FSPOT_BLING = -r:$(DIR_BIN)/FSpot.Bling.dll
+LINK_FSPOT_BLING_DEPS = $(REF_FSPOT_BLING) $(LINK_FSPOT_BLING)
+
+# FSpot.Platform
+REF_FSPOT_PLATFORM = $(LINK_GCONF) $(LINK_GTK) $(LINK_FSPOT_CORE_DEPS) $(LINK_DBUS)
+LINK_FSPOT_PLATFORM = -r:$(DIR_BIN)/FSpot.Platform.dll
+LINK_FSPOT_PLATFORM_DEPS = $(REF_FSPOT_PLATFORM) $(LINK_FSPOT_PLATFORM)
+
+# FSpot.Widgets
+REF_FSPOT_WIDGETS = $(LINK_FSPOT_CORE_DEPS) $(LINK_FSPOT_BLING_DEPS)
+LINK_FSPOT_WIDGETS = -r:$(DIR_BIN)/FSpot.Widgets.dll
+LINK_FSPOT_WIDGETS_DEPS = $(REF_FSPOT_WIDGETS) $(LINK_FSPOT_WIDGETS)
+
+# FSpot (executable)
+REF_FSPOT = $(LINK_FSPOT_WIDGETS_DEPS) $(LINK_FSPOT_PLATFORM_DEPS) $(LINK_FSPOT_QUERY_DEPS) \
+ $(LINK_GLIB) $(LINK_MONO_ADDINS_DEPS) $(LINK_UNIQUE_DEPS) $(LINK_MONO_ADDINS_SETUP_DEPS) \
+ $(LINK_SEMWEB_DEPS) $(LINK_GLADE) $(LINK_MONODATA) $(LINK_MONO_DATA_SQLITECLIENT) \
+ $(LINK_MONO_ADDINS_GUI_DEPS) $(LINK_FSPOT_JOB_SCHEDULER_DEPS) $(LINK_ICSHARP_ZIP_LIB) \
+ $(LINK_GNOME)
+
+# FIXME: do not link executables
+LINK_FSPOT = -r:$(DIR_BIN)/f-spot.exe
+LINK_FSPOT_DEPS = $(REF_FSPOT) $(LINK_FSPOT)
+
+# Extensions
+REF_FSPOT_EXTENSION_BLACKOUTEDITOR = $(LINK_FSPOT_DEPS)
+REF_FSPOT_EXTENSION_BWEDITOR = $(LINK_FSPOT_DEPS) $(LINK_MONO_SIMD)
+REF_FSPOT_EXTENSION_FLIPEDITOR = $(LINK_FSPOT_DEPS)
+REF_FSPOT_EXTENSION_PIXELATEEDITOR = $(LINK_FSPOT_DEPS)
+REF_FSPOT_EXTENSION_RESIZEEDITOR = $(LINK_FSPOT_DEPS)
+REF_FSPOT_EXTENSION_CDEXPORT = $(LINK_FSPOT_DEPS)
+REF_FSPOT_EXTENSION_FACEBOOKEXPORT = $(LINK_FSPOT_DEPS) $(LINK_KEYRING)
+REF_FSPOT_EXTENSION_FLICKREXPORT = $(LINK_FSPOT_DEPS) $(LINK_FLICKRNET)
+REF_FSPOT_EXTENSION_FOLDEREXPORT = $(LINK_FSPOT_DEPS) $(LINK_SYSTEM_WEB)
+REF_FSPOT_EXTENSION_GALLERYEXPORT = $(LINK_FSPOT_DEPS)
+REF_MONO_GOOGLE = $(LINK_HYENA_DEPS)
+LINK_MONO_GOOGLE = -r:$(DIR_BIN)/Mono.Google.dll
+LINK_MONO_GOOGLE_DEPS = $(REF_MONO_GOOGLE) $(LINK_MONO_GOOGLE)
+REF_FSPOT_EXTENSION_PICASAWEBEXPORT = $(LINK_FSPOT_DEPS) $(LINK_MONO_GOOGLE) $(LINK_KEYRING)
+REF_SMUGMUGNET = $(LINK_FSPOT_DEPS)
+LINK_SMUGMUGNET = -r:$(DIR_BIN)/SmugMugNet.dll
+LINK_SMUGMUGNET_DEPS = $(REF_SMUGMUGNET) $(LINK_SMUGMUGNET)
+REF_FSPOT_EXTENSION_SMUGMUGEXPORT = $(LINK_SMUGMUGNET_DEPS) $(LINK_KEYRING)
+REF_MONO_TABBLO = $(LINK_HYENA_DEPS)
+LINK_MONO_TABBLO = -r:$(DIR_BIN)/Mono.Tabblo.dll
+LINK_MONO_TABBLO_DEPS = $(REF_MONO_TABBLO) $(LINK_MONO_TABBLO)
+REF_FSPOT_EXTENSION_TABBLOEXPORT = $(LINK_FSPOT_DEPS) $(LINK_KEYRING) $(LINK_MONO_TABBLO_DEPS)
+REF_FSPOT_EXTENSION_ZIPEXPORT = $(LINK_FSPOT_DEPS)
+REF_FSPOT_EXTENSION_CHANGEPHOTOPATH = $(LINK_FSPOT_DEPS)
+REF_FSPOT_EXTENSION_DEVELOPINUFRAW = $(LINK_FSPOT_DEPS)
+REF_FSPOT_EXTENSION_HASHJOB = $(LINK_FSPOT_DEPS)
+REF_FSPOT_EXTENSION_LIVEWEBGALLERY = $(LINK_FSPOT_DEPS)
+REF_FSPOT_EXTENSION_MERGEDB = $(LINK_FSPOT_DEPS)
+REF_FSPOT_EXTENSION_RAWPLUSJPEG = $(LINK_FSPOT_DEPS)
+REF_FSPOT_EXTENSION_RETROACTIVEROLL = $(LINK_FSPOT_DEPS)
+REF_FSPOT_EXTENSION_SCREENSAVERCONFIG = $(LINK_FSPOT_DEPS)
+REF_FSPOT_EXTENSION_COVERTRANSITION = $(LINK_FSPOT_DEPS)
+
+# Cute hack to replace a space with something
+colon := :
+empty :=
+space := $(empty) $(empty)
+
+# Build path to allow running uninstalled
+RUN_PATH = $(subst $(space),$(colon), $(MONO_BASE_PATH))
+UNIQUE_FILTER_PIPE = tr [:space:] \\n | sort | uniq
+BUILD_DATA_DIR = $(top_builddir)/bin/share/$(PACKAGE)
+
+# Since all other attempts failed, we currently go this way:
+# This code adds the file specified in ASSEMBLY_INFO_SOURCE to SOURCES_BUILD.
+# If no such file is specified, the default AssemblyInfo.cs is used.
+ASSEMBLY_INFO_SOURCE_REAL = \
+ $(shell if [ "$(ASSEMBLY_INFO_SOURCE)" ]; \
+ then \
+ echo "$(addprefix $(srcdir)/, $(ASSEMBLY_INFO_SOURCE))"; \
+ else \
+ echo "$(top_srcdir)/src/AssemblyInfo.cs"; \
+ fi)
+
+SOURCES_BUILD = $(addprefix $(srcdir)/, $(SOURCES)) \
+ $(ASSEMBLY_INFO_SOURCE_REAL)
+RESOURCES_EXPANDED = $(addprefix $(srcdir)/, $(RESOURCES))
+RESOURCES_BUILD = $(foreach resource, $(RESOURCES_EXPANDED), \
+ -resource:$(resource),$(notdir $(resource)))
+
+INSTALL_ICONS = $(top_srcdir)/build/private-icon-theme-installer "$(mkinstalldirs)" "$(INSTALL_DATA)"
+THEME_ICONS_SOURCE = $(wildcard $(srcdir)/ThemeIcons/*/*/*.png) $(wildcard $(srcdir)/ThemeIcons/scalable/*/*.svg)
+THEME_ICONS_RELATIVE = $(subst $(srcdir)/ThemeIcons/, , $(THEME_ICONS_SOURCE))
+ASSEMBLY_EXTENSION = $(strip $(patsubst library, dll, $(TARGET)))
+ASSEMBLY_FILE = $(top_builddir)/bin/$(ASSEMBLY).$(ASSEMBLY_EXTENSION)
+INSTALL_DIR_RESOLVED = $(firstword $(subst , $(DEFAULT_INSTALL_DIR), $(INSTALL_DIR)))
+ at ENABLE_TESTS_TRUE@ENABLE_TESTS_FLAG = "-define:ENABLE_TESTS"
+ at ENABLE_ATK_TRUE@ENABLE_ATK_FLAG = "-define:ENABLE_ATK"
+FILTERED_LINK = $(shell echo "$(LINK)" | $(UNIQUE_FILTER_PIPE))
+DEP_LINK = $(shell echo "$(LINK)" | $(UNIQUE_FILTER_PIPE) | sed s,-r:,,g | grep '$(top_builddir)/bin/')
+OUTPUT_FILES = \
+ $(ASSEMBLY_FILE) \
+ $(ASSEMBLY_FILE).mdb
+
+moduledir = $(INSTALL_DIR_RESOLVED)
+module_SCRIPTS = $(OUTPUT_FILES)
+EXTRA_DIST = $(SOURCES_BUILD) $(RESOURCES_EXPANDED) $(THEME_ICONS_SOURCE)
+CLEANFILES = $(OUTPUT_FILES) $(ASSEMBLY_FILE).config
+DISTCLEANFILES = *.pidb
+MAINTAINERCLEANFILES = Makefile.in
+all: all-am
+
+.SUFFIXES:
+$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(top_srcdir)/build/build.mk $(top_srcdir)/build/build.environment.mk $(top_srcdir)/build/build.rules.mk $(am__configure_deps)
+ @for dep in $?; do \
+ case '$(am__configure_deps)' in \
+ *$$dep*) \
+ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \
+ && { if test -f $@; then exit 0; else break; fi; }; \
+ exit 1;; \
+ esac; \
+ done; \
+ echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign src/Bling/Makefile'; \
+ $(am__cd) $(top_srcdir) && \
+ $(AUTOMAKE) --foreign src/Bling/Makefile
+.PRECIOUS: Makefile
+Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
+ @case '$?' in \
+ *config.status*) \
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \
+ *) \
+ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \
+ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \
+ esac;
+
+$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+
+$(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps)
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps)
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(am__aclocal_m4_deps):
+install-moduleSCRIPTS: $(module_SCRIPTS)
+ @$(NORMAL_INSTALL)
+ test -z "$(moduledir)" || $(MKDIR_P) "$(DESTDIR)$(moduledir)"
+ @list='$(module_SCRIPTS)'; test -n "$(moduledir)" || list=; \
+ for p in $$list; do \
+ if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \
+ if test -f "$$d$$p"; then echo "$$d$$p"; echo "$$p"; else :; fi; \
+ done | \
+ sed -e 'p;s,.*/,,;n' \
+ -e 'h;s|.*|.|' \
+ -e 'p;x;s,.*/,,;$(transform)' | sed 'N;N;N;s,\n, ,g' | \
+ $(AWK) 'BEGIN { files["."] = ""; dirs["."] = 1; } \
+ { d=$$3; if (dirs[d] != 1) { print "d", d; dirs[d] = 1 } \
+ if ($$2 == $$4) { files[d] = files[d] " " $$1; \
+ if (++n[d] == $(am__install_max)) { \
+ print "f", d, files[d]; n[d] = 0; files[d] = "" } } \
+ else { print "f", d "/" $$4, $$1 } } \
+ END { for (d in files) print "f", d, files[d] }' | \
+ while read type dir files; do \
+ if test "$$dir" = .; then dir=; else dir=/$$dir; fi; \
+ test -z "$$files" || { \
+ echo " $(INSTALL_SCRIPT) $$files '$(DESTDIR)$(moduledir)$$dir'"; \
+ $(INSTALL_SCRIPT) $$files "$(DESTDIR)$(moduledir)$$dir" || exit $$?; \
+ } \
+ ; done
+
+uninstall-moduleSCRIPTS:
+ @$(NORMAL_UNINSTALL)
+ @list='$(module_SCRIPTS)'; test -n "$(moduledir)" || exit 0; \
+ files=`for p in $$list; do echo "$$p"; done | \
+ sed -e 's,.*/,,;$(transform)'`; \
+ test -n "$$list" || exit 0; \
+ echo " ( cd '$(DESTDIR)$(moduledir)' && rm -f" $$files ")"; \
+ cd "$(DESTDIR)$(moduledir)" && rm -f $$files
+
+mostlyclean-libtool:
+ -rm -f *.lo
+
+clean-libtool:
+ -rm -rf .libs _libs
+tags: TAGS
+TAGS:
+
+ctags: CTAGS
+CTAGS:
+
+
+distdir: $(DISTFILES)
+ @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; \
+ if test -d $$d/$$file; then \
+ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \
+ if test -d "$(distdir)/$$file"; then \
+ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
+ fi; \
+ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
+ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \
+ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
+ fi; \
+ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \
+ else \
+ test -f "$(distdir)/$$file" \
+ || cp -p $$d/$$file "$(distdir)/$$file" \
+ || exit 1; \
+ fi; \
+ done
+check-am: all-am
+check: check-am
+all-am: Makefile $(SCRIPTS)
+installdirs:
+ for dir in "$(DESTDIR)$(moduledir)"; do \
+ test -z "$$dir" || $(MKDIR_P) "$$dir"; \
+ done
+install: install-am
+install-exec: install-exec-am
+install-data: install-data-am
+uninstall: uninstall-am
+
+install-am: all-am
+ @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
+
+installcheck: installcheck-am
+install-strip:
+ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+ `test -z '$(STRIP)' || \
+ echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install
+mostlyclean-generic:
+
+clean-generic:
+ -test -z "$(CLEANFILES)" || rm -f $(CLEANFILES)
+
+distclean-generic:
+ -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
+ -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES)
+ -test -z "$(DISTCLEANFILES)" || rm -f $(DISTCLEANFILES)
+
+maintainer-clean-generic:
+ @echo "This command is intended for maintainers to use"
+ @echo "it deletes files that may require special tools to rebuild."
+ -test -z "$(MAINTAINERCLEANFILES)" || rm -f $(MAINTAINERCLEANFILES)
+clean: clean-am
+
+clean-am: clean-generic clean-libtool mostlyclean-am
+
+distclean: distclean-am
+ -rm -f Makefile
+distclean-am: clean-am distclean-generic
+
+dvi: dvi-am
+
+dvi-am:
+
+html: html-am
+
+html-am:
+
+info: info-am
+
+info-am:
+
+install-data-am: install-data-local install-moduleSCRIPTS
+
+install-dvi: install-dvi-am
+
+install-dvi-am:
+
+install-exec-am:
+
+install-html: install-html-am
+
+install-html-am:
+
+install-info: install-info-am
+
+install-info-am:
+
+install-man:
+
+install-pdf: install-pdf-am
+
+install-pdf-am:
+
+install-ps: install-ps-am
+
+install-ps-am:
+
+installcheck-am:
+
+maintainer-clean: maintainer-clean-am
+ -rm -f Makefile
+maintainer-clean-am: distclean-am maintainer-clean-generic
+
+mostlyclean: mostlyclean-am
+
+mostlyclean-am: mostlyclean-generic mostlyclean-libtool
+
+pdf: pdf-am
+
+pdf-am:
+
+ps: ps-am
+
+ps-am:
+
+uninstall-am: uninstall-local uninstall-moduleSCRIPTS
+
+.MAKE: install-am install-strip
+
+.PHONY: all all-am check check-am clean clean-generic clean-libtool \
+ distclean distclean-generic distclean-libtool distdir dvi \
+ dvi-am html html-am info info-am install install-am \
+ install-data install-data-am install-data-local install-dvi \
+ install-dvi-am install-exec install-exec-am install-html \
+ install-html-am install-info install-info-am install-man \
+ install-moduleSCRIPTS install-pdf install-pdf-am install-ps \
+ install-ps-am install-strip installcheck installcheck-am \
+ installdirs maintainer-clean maintainer-clean-generic \
+ mostlyclean mostlyclean-generic mostlyclean-libtool pdf pdf-am \
+ ps ps-am uninstall uninstall-am uninstall-local \
+ uninstall-moduleSCRIPTS
+
+
+all: $(ASSEMBLY_FILE) theme-icons
+
+run:
+ @pushd $(top_builddir); \
+ make run; \
+ popd;
+
+# uncommented for now.
+# tests are currently excuted from Makefile in $(top_builddir)
+#test:
+# @pushd $(top_builddir)/tests; \
+# make $(ASSEMBLY); \
+# popd;
+
+build-debug:
+ @echo $(DEP_LINK)
+
+$(ASSEMBLY_FILE).mdb: $(ASSEMBLY_FILE)
+
+$(ASSEMBLY_FILE): $(SOURCES_BUILD) $(RESOURCES_EXPANDED) $(DEP_LINK)
+ @mkdir -p $(top_builddir)/bin
+ @if [ ! "x$(ENABLE_RELEASE)" = "xyes" ]; then \
+ $(top_srcdir)/build/dll-map-makefile-verifier $(srcdir)/Makefile.am $(srcdir)/$(notdir $@.config) && \
+ $(MONO) $(top_builddir)/build/dll-map-verifier.exe $(srcdir)/$(notdir $@.config) -iwinmm -ilibbanshee -ilibbnpx11 -ilibc -ilibc.so.6 -iintl -ilibmtp.dll -ilibigemacintegration.dylib -iCFRelease $(SOURCES_BUILD); \
+ fi;
+ $(MCS) \
+ $(GMCS_FLAGS) \
+ $(ASSEMBLY_BUILD_FLAGS) \
+ -nowarn:0278 -nowarn:0078 $$warn \
+ -define:HAVE_GTK_2_10 -define:NET_2_0 \
+ -debug -target:$(TARGET) -out:$@ \
+ $(BUILD_DEFINES) $(ENABLE_TESTS_FLAG) $(ENABLE_ATK_FLAG) \
+ $(FILTERED_LINK) $(RESOURCES_BUILD) $(SOURCES_BUILD)
+ @if [ -e $(srcdir)/$(notdir $@.config) ]; then \
+ cp $(srcdir)/$(notdir $@.config) $(top_builddir)/bin; \
+ fi;
+ @if [ ! -z "$(EXTRA_BUNDLE)" ]; then \
+ cp $(EXTRA_BUNDLE) $(top_builddir)/bin; \
+ fi;
+
+theme-icons: $(THEME_ICONS_SOURCE)
+ @$(INSTALL_ICONS) -il "$(BUILD_DATA_DIR)" "$(srcdir)" $(THEME_ICONS_RELATIVE)
+
+install-data-local: $(THEME_ICONS_SOURCE)
+ @$(INSTALL_ICONS) -i "$(DESTDIR)$(pkgdatadir)" "$(srcdir)" $(THEME_ICONS_RELATIVE)
+
+uninstall-local: $(THEME_ICONS_SOURCE)
+ @$(INSTALL_ICONS) -u "$(DESTDIR)$(pkgdatadir)" "$(srcdir)" $(THEME_ICONS_RELATIVE)
+
+# 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.
+.NOEXPORT:
diff --git a/src/BlockProcessor.cs b/src/BlockProcessor.cs
index 8f60cf8..0371e4c 100644
--- a/src/BlockProcessor.cs
+++ b/src/BlockProcessor.cs
@@ -11,10 +11,6 @@
using Gdk;
using System;
-#if ENABLE_NUNIT
-using NUnit.Framework;
-#endif
-
namespace FSpot {
public class BlockProcessor {
Rectangle rect;
@@ -40,34 +36,4 @@ namespace FSpot {
}
}
-
-#if ENABLE_NUNIT
- [TestFixture]
- public class BlockProcessorTests
- {
- [Test]
- public void Contained ()
- {
- BlockProcessor proc = new BlockProcessor (new Rectangle (0, 0, 10, 10), 1000);
- Rectangle step;
-
- Assert.IsTrue (proc.Step (out step));
- Assert.AreEqual (step, new Rectangle (0, 0, 10, 10));
- Assert.IsFalse (proc.Step (out step));
- }
-
- [Test]
- public void Step ()
- {
- BlockProcessor proc = new BlockProcessor (new Rectangle (10, 100, 25, 15), 20);
- Rectangle step;
-
- Assert.AreEqual (proc.Step (out step), true);
- Assert.AreEqual (step, new Rectangle (10, 100, 20, 15));
- Assert.AreEqual (proc.Step (out step), true);
- Assert.AreEqual (step, new Rectangle (30, 100, 5, 15));
- Assert.AreEqual (proc.Step (out step), false);
- }
- }
-#endif
}
diff --git a/src/CameraFileSelectionDialog.cs b/src/CameraFileSelectionDialog.cs
deleted file mode 100644
index 491f0cc..0000000
--- a/src/CameraFileSelectionDialog.cs
+++ /dev/null
@@ -1,315 +0,0 @@
-/*
- * FSpot.CameraFileSelectionDialog
- *
- * Author(s):
- * Larry Ewing
- *
- * This is free software. See COPYING for details.
- *
- */
-
-using System;
-using System.IO;
-using Gdk;
-using Gtk;
-using Glade;
-using GPhoto2;
-using Mono.Unix;
-using FSpot.Utils;
-using FSpot.UI.Dialog;
-
-namespace FSpot {
- public class CameraFileSelectionDialog : GladeDialog
- {
- private const int DirectoryColumn = 0;
- private const int FileColumn = 1;
- private const int PreviewColumn = 2;
- private const int IndexColumn = 3;
-
- [Widget] Gtk.Button copyButton;
- [Widget] Gtk.Button cancelButton;
- [Widget] Gtk.Label selected_camera_name;
- [Widget] Gtk.TreeView file_tree;
- [Widget] Gtk.OptionMenu tag_option_menu;
- [Widget] Gtk.CheckButton attach_check;
- [Widget] Gtk.CheckButton duplicate_check;
-
- GPhotoCamera camera;
- ListStore preview_list_store;
- Db db;
-
- ThreadProgressDialog progress_dialog;
- System.Collections.ArrayList index_list;
-
- string[] saved_files;
- Tag[] selected_tags;
-
- System.Threading.Thread command_thread;
-
- public CameraFileSelectionDialog (GPhotoCamera cam, Db datab)
- {
- camera = cam;
- db = datab;
- saved_files = null;
- selected_tags = null;
- }
-
- public int Run ()
- {
- int imported_pics = 0;
- CreateInterface ();
-
- ResponseType response = (ResponseType) this.Dialog.Run ();
- if (response == ResponseType.Ok)
- if (SaveFiles ())
- imported_pics = ImportFiles ();
-
- this.Dialog.Destroy ();
- return imported_pics;
- }
-
- private void CreateInterface ()
- {
- this.CreateDialog ("camera_file_selection_dialog");
-
- file_tree.Selection.Mode = SelectionMode.Multiple;
- file_tree.AppendColumn (Catalog.GetString ("Preview"),
- new CellRendererPixbuf (), "pixbuf", PreviewColumn);
- file_tree.AppendColumn (Catalog.GetString ("Path"),
- new CellRendererText (), "text", DirectoryColumn);
- file_tree.AppendColumn (Catalog.GetString ("File"),
- new CellRendererText (), "text", FileColumn);
- file_tree.AppendColumn (Catalog.GetString ("Index"),
- new CellRendererText (), "text", IndexColumn).Visible = false;
-
- preview_list_store = new ListStore (typeof (string), typeof (string),
- typeof (Pixbuf), typeof (int));
-
- file_tree.Model = preview_list_store;
-
- CreateTagMenu ();
- attach_check.Toggled += HandleTagToggled;
- HandleTagToggled (null, null);
-
- GetPreviews ();
- }
-
- private void CreateTagMenu ()
- {
- TagMenu tagmenu = new TagMenu (null, MainWindow.Toplevel.Database.Tags);
- tagmenu.NewTagHandler = HandleNewTagSelected;
-
- tagmenu.Append (new MenuItem (Catalog.GetString ("Select Tag")));
-
- tagmenu.Populate (true);
-
- tagmenu.TagSelected += HandleTagMenuSelected;
-
- tagmenu.ShowAll ();
- tag_option_menu.Menu = tagmenu;
- }
-
- private void HandleTagMenuSelected (Tag t)
- {
- selected_tags = new Tag [] { t };
- }
-
- private void HandleNewTagSelected (object sender, EventArgs args)
- {
- Tag new_tag = MainWindow.Toplevel.CreateTag (Dialog, null);
-
- if (new_tag != null) {
- CreateTagMenu ();
- tag_option_menu.SetHistory ((uint) (tag_option_menu.Menu as TagMenu).GetPosition (new_tag));
- selected_tags = new Tag [] { new_tag };
- }
- }
-
- public void HandleTagToggled (object o, EventArgs args)
- {
- tag_option_menu.Sensitive = attach_check.Active;
- if (!attach_check.Active)
- selected_tags = null;
- }
-
- private void GetPreviews ()
- {
- lock (camera) {
- ProgressDialog pdialog = new ProgressDialog (Catalog.GetString ("Downloading Previews"),
- ProgressDialog.CancelButtonType.Cancel,
- camera.FileList.Count,
- this.Dialog);
-
- int index = 0;
- bool load_thumb = true;
- System.Collections.ArrayList sfiles = camera.FileList;
- sfiles.Sort ();
- foreach (GPhotoCameraFile file in sfiles) {
- string msg = String.Format (Catalog.GetString ("Downloading Preview of {0}"),
- file.FileName);
-
-
-
- if (load_thumb && pdialog.Update (msg)) {
- load_thumb = false;
- pdialog.Hide ();
- }
-
- Pixbuf scale = null;
- if (load_thumb) {
- Pixbuf thumbscale = camera.GetPreviewPixbuf (file);
- if (thumbscale != null) {
- scale = PixbufUtils.ScaleToMaxSize (thumbscale, 64,64);
- thumbscale.Dispose ();
- }
- }
-
- preview_list_store.AppendValues (file.Directory, file.FileName, scale, index);
- index++;
- }
-
- file_tree.Selection.SelectAll ();
- pdialog.Destroy ();
- }
- }
-
- private System.Collections.ArrayList GetSelectedItems ()
- {
- TreeSelection selection = file_tree.Selection;
- TreeModel model;
- TreePath[] selected_rows = selection.GetSelectedRows (out model);
-
- System.Collections.ArrayList list = new System.Collections.ArrayList ();
- foreach (TreePath cur_row in selected_rows) {
- TreeIter cur_iter;
-
- if (model.GetIter (out cur_iter, cur_row))
- list.Add ((int) model.GetValue (cur_iter, IndexColumn));
- }
-
- return list;
- }
-
- private bool SaveFiles ()
- {
- index_list = GetSelectedItems ();
- this.Dialog.Hide ();
-
- command_thread = new System.Threading.Thread (new System.Threading.ThreadStart (this.Download));
- command_thread.Name = Catalog.GetString ("Transferring Pictures");
-
- progress_dialog = new ThreadProgressDialog (command_thread, 1);
- progress_dialog.Start ();
-
- while (command_thread.IsAlive) {
- if (Application.EventsPending ())
- Application.RunIteration ();
-
- }
-
- return true;
- }
-
- private void Download ()
- {
- lock (camera) {
- System.Collections.ArrayList saved = new System.Collections.ArrayList ();
-
- for (int i = 0; i < index_list.Count; i++) {
- try {
- string msg = String.Format (Catalog.GetString ("Copying file {0} of {1}"),
- (i + 1), index_list.Count);
-
- progress_dialog.ProgressText = msg;
-
- SaveResult result = SaveFile ((int)(index_list [i]));
-
- if (!result.IsDuplicate)
- saved.Add (result.Path);
-
- progress_dialog.Fraction = (i + 1)/(double)index_list.Count;
- }
- catch (System.Exception e) {
- System.Console.WriteLine (e.ToString ());
- progress_dialog.Message = String.Format ("{0}{2}{1}", e.Message, e.ToString (), Environment.NewLine);
- progress_dialog.ProgressText = Catalog.GetString ("Error transferring file");
-
- if (progress_dialog.PerformRetrySkip ())
- i--;
- }
- }
-
- saved_files = (string []) saved.ToArray (typeof (string));
-
- progress_dialog.SetProperties (Catalog.GetString ("Download Complete"), Gtk.Stock.Ok, Catalog.GetString ("Done Copying Files"), 1.0);
- }
- }
-
- private SaveResult SaveFile (int index)
- {
- GPhotoCameraFile camfile = (GPhotoCameraFile) camera.FileList [index];
- string tempdir = FSpot.Global.PhotoDirectory;
- if (! Directory.Exists (tempdir))
- Directory.CreateDirectory (tempdir);
-
- string orig = Path.Combine (tempdir, camfile.FileName.ToLower ());
- string path = orig;
-
- int i = 0;
- while (File.Exists (path)) {
- string name = String.Format ("{0}-{1}{2}",
- Path.GetFileNameWithoutExtension (orig),
- i, Path.GetExtension (orig));
-
- path = System.IO.Path.Combine (Path.GetDirectoryName (orig), name);
- i++;
- }
-
- string msg = String.Format (Catalog.GetString ("Transferring \"{0}\" from camera"),
- Path.GetFileName (path));
- progress_dialog.Message = msg;
-
- camera.SaveFile (index, path);
-
- if (duplicate_check.Active && db.Photos.CheckForDuplicate (FSpot.Utils.UriUtils.PathToFileUri (path)) != null) {
- System.IO.File.Delete (path);
-
- return new SaveResult (path, true);
- } else {
- string dest = FileImportBackend.ChooseLocation (path);
- System.IO.File.Move (path, dest);
-
- return new SaveResult (dest, false);
- }
- }
-
- private class SaveResult {
- private bool is_duplicate;
-
- private string path;
-
- public string Path {
- get { return path; }
- }
-
- public bool IsDuplicate {
- get { return is_duplicate; }
- }
-
- public SaveResult (string path, bool is_duplicate) {
- this.path = path;
- this.is_duplicate = is_duplicate;
- }
- }
-
- private int ImportFiles ()
- {
- ImportCommand command = new ImportCommand (null);
- return command.ImportFromPaths (db.Photos, saved_files, selected_tags);
- }
-
- public Tag[] Tags {
- get { return selected_tags; }
- }
- }
-}
diff --git a/src/CameraSelectionDialog.cs b/src/CameraSelectionDialog.cs
deleted file mode 100644
index d8f2ec1..0000000
--- a/src/CameraSelectionDialog.cs
+++ /dev/null
@@ -1,70 +0,0 @@
-using System;
-using Gtk;
-using Glade;
-using GPhoto2;
-using Mono.Unix;
-using FSpot.UI.Dialog;
-
-namespace FSpot {
- public class CameraSelectionDialog : GladeDialog
- {
- [Widget] Gtk.Button OKButton;
- [Widget] Gtk.Button cancelButton;
- [Widget] Gtk.TreeView cameraList;
-
- private CameraList camlist;
-
- public CameraSelectionDialog (CameraList camera_list)
- {
- camlist = camera_list;
- }
-
- public int Run ()
- {
- this.CreateDialog ("camera_selection_dialog");
- int return_value = -1;
-
-
- cameraList.Selection.Mode = SelectionMode.Single;
- cameraList.AppendColumn (Catalog.GetString ("Camera"), new CellRendererText (), "text", 0);
- cameraList.AppendColumn (Catalog.GetString ("Port"), new CellRendererText (), "text", 1);
-
- ListStore tstore = new ListStore (typeof (string), typeof (string));
- for (int i = 0; i < camlist.Count; i++) {
- tstore.AppendValues (camlist.GetName (i), camlist.GetValue (i));
- }
-
- cameraList.Model = tstore;
- ResponseType response = (ResponseType) this.Dialog.Run ();
-
- if (response == ResponseType.Ok && cameraList.Selection.CountSelectedRows () == 1) {
- TreeIter selected_camera;
- TreeModel model;
-
- cameraList.Selection.GetSelected (out model, out selected_camera);
- return_value = camlist.GetPosition ((string)model.GetValue (selected_camera, 0),
- (string)model.GetValue (selected_camera, 1));
- }
-
- this.Dialog.Destroy ();
-
- return return_value;
- }
-
- }
-
- internal static class CameraListExtensions
- {
- public static int GetPosition(this CameraList list, string name, string value)
- {
- for (int index = 0; index < list.Count; index++)
- {
- if (list.GetName(index) == name && list.GetValue(index) == value)
- return index;
- }
-
- return -1;
- }
-
- }
-}
diff --git a/src/Cms/FSpot.Cms.dll.config b/src/Cms/FSpot.Cms.dll.config
new file mode 100644
index 0000000..ef2c7e4
--- /dev/null
+++ b/src/Cms/FSpot.Cms.dll.config
@@ -0,0 +1,5 @@
+<configuration>
+ <dllmap dll="liblcms-1.0.0.dll" target="liblcms.so.1"/>
+ <dllmap dll="libfspot" target="/home/ruben/Build/lib64/f-spot/libfspot.so.0"/>
+</configuration>
+
diff --git a/src/Cms.dll.config.in b/src/Cms/FSpot.Cms.dll.config.in
similarity index 100%
rename from src/Cms.dll.config.in
rename to src/Cms/FSpot.Cms.dll.config.in
diff --git a/src/Cms/Makefile.am b/src/Cms/Makefile.am
new file mode 100644
index 0000000..e32fd8d
--- /dev/null
+++ b/src/Cms/Makefile.am
@@ -0,0 +1,28 @@
+ASSEMBLY = FSpot.Cms
+ASSEMBLY_BUILD_FLAGS = -unsafe
+TARGET = library
+LINK = $(REF_FSPOT_CMS)
+
+SOURCES = \
+ CctTable.cs \
+ CmsException.cs \
+ ColorCIELab.cs \
+ ColorCIELCh.cs \
+ ColorCIExyY.cs \
+ ColorCIEXYZ.cs \
+ Format.cs \
+ GammaTable.cs \
+ IccColorSpace.cs \
+ IccProfileClass.cs \
+ Intent.cs \
+ NativeMethods.cs \
+ Profile.cs \
+ SaveException.cs \
+ Transform.cs
+
+RESOURCES =
+
+include $(top_srcdir)/build/build.mk
+
+EXTRA_DIST += FSpot.Cms.dll.config
+module_SCRIPTS += FSpot.Cms.dll.config
diff --git a/src/Cms/Makefile.in b/src/Cms/Makefile.in
new file mode 100644
index 0000000..8f9fd23
--- /dev/null
+++ b/src/Cms/Makefile.in
@@ -0,0 +1,822 @@
+# Makefile.in generated by automake 1.11.1 from Makefile.am.
+# @configure_input@
+
+# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
+# 2003, 2004, 2005, 2006, 2007, 2008, 2009 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.
+
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
+# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
+# PARTICULAR PURPOSE.
+
+ at SET_MAKE@
+
+VPATH = @srcdir@
+pkgdatadir = $(datadir)/@PACKAGE@
+pkgincludedir = $(includedir)/@PACKAGE@
+pkglibdir = $(libdir)/@PACKAGE@
+pkglibexecdir = $(libexecdir)/@PACKAGE@
+am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
+install_sh_DATA = $(install_sh) -c -m 644
+install_sh_PROGRAM = $(install_sh) -c
+install_sh_SCRIPT = $(install_sh) -c
+INSTALL_HEADER = $(INSTALL_DATA)
+transform = $(program_transform_name)
+NORMAL_INSTALL = :
+PRE_INSTALL = :
+POST_INSTALL = :
+NORMAL_UNINSTALL = :
+PRE_UNINSTALL = :
+POST_UNINSTALL = :
+build_triplet = @build@
+host_triplet = @host@
+DIST_COMMON = $(srcdir)/FSpot.Cms.dll.config.in $(srcdir)/Makefile.am \
+ $(srcdir)/Makefile.in $(top_srcdir)/build/build.environment.mk \
+ $(top_srcdir)/build/build.mk \
+ $(top_srcdir)/build/build.rules.mk
+ at ENABLE_TESTS_TRUE@am__append_1 = " $(NUNIT_LIBS)"
+subdir = src/Cms
+ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
+am__aclocal_m4_deps = $(top_srcdir)/build/m4/shave/shave.m4 \
+ $(top_srcdir)/build/m4/shamrock/expansions.m4 \
+ $(top_srcdir)/build/m4/shamrock/gnome-doc.m4 \
+ $(top_srcdir)/build/m4/shamrock/mono.m4 \
+ $(top_srcdir)/build/m4/shamrock/nunit.m4 \
+ $(top_srcdir)/build/m4/shamrock/programs.m4 \
+ $(top_srcdir)/build/m4/f-spot/flickrnet.m4 \
+ $(top_srcdir)/build/m4/f-spot/gnome-keyring-sharp.m4 \
+ $(top_srcdir)/build/m4/f-spot/gtk-sharp.m4 \
+ $(top_srcdir)/build/m4/f-spot/mono-addins.m4 \
+ $(top_srcdir)/acinclude.m4 $(top_srcdir)/configure.ac
+am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
+ $(ACLOCAL_M4)
+mkinstalldirs = $(install_sh) -d
+CONFIG_HEADER = $(top_builddir)/config.h
+CONFIG_CLEAN_FILES = FSpot.Cms.dll.config
+CONFIG_CLEAN_VPATH_FILES =
+am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`;
+am__vpath_adj = case $$p in \
+ $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \
+ *) f=$$p;; \
+ esac;
+am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`;
+am__install_max = 40
+am__nobase_strip_setup = \
+ srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'`
+am__nobase_strip = \
+ for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||"
+am__nobase_list = $(am__nobase_strip_setup); \
+ for p in $$list; do echo "$$p $$p"; done | \
+ sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \
+ $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \
+ if (++n[$$2] == $(am__install_max)) \
+ { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \
+ END { for (dir in files) print dir, files[dir] }'
+am__base_list = \
+ sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \
+ sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g'
+am__installdirs = "$(DESTDIR)$(moduledir)"
+SCRIPTS = $(module_SCRIPTS)
+DIST_SOURCES =
+DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
+ACLOCAL = @ACLOCAL@
+ACLOCAL_AMFLAGS = @ACLOCAL_AMFLAGS@
+ALL_LINGUAS = @ALL_LINGUAS@
+AMTAR = @AMTAR@
+AM_MAKEFLAGS = @AM_MAKEFLAGS@
+API_VERSION = @API_VERSION@
+AR = @AR@
+ASM_VERSION = @ASM_VERSION@
+AUTOCONF = @AUTOCONF@
+AUTOHEADER = @AUTOHEADER@
+AUTOMAKE = @AUTOMAKE@
+AWK = @AWK@
+CATALOGS = @CATALOGS@
+CATOBJEXT = @CATOBJEXT@
+CC = @CC@
+CCDEPMODE = @CCDEPMODE@
+CFLAGS = @CFLAGS@
+CPP = @CPP@
+CPPFLAGS = @CPPFLAGS@
+CSC_DEFINES = @CSC_DEFINES@
+CXX = @CXX@
+CXXCPP = @CXXCPP@
+CXXDEPMODE = @CXXDEPMODE@
+CXXFLAGS = @CXXFLAGS@
+CYGPATH_W = @CYGPATH_W@
+DATADIRNAME = @DATADIRNAME@
+DEFS = @DEFS@
+DEPDIR = @DEPDIR@
+DISPLAY_VERSION = @DISPLAY_VERSION@
+DISTCHECK_CONFIGURE_FLAGS = @DISTCHECK_CONFIGURE_FLAGS@
+DOC_USER_FORMATS = @DOC_USER_FORMATS@
+DSYMUTIL = @DSYMUTIL@
+DUMPBIN = @DUMPBIN@
+ECHO_C = @ECHO_C@
+ECHO_N = @ECHO_N@
+ECHO_T = @ECHO_T@
+EGREP = @EGREP@
+EXEEXT = @EXEEXT@
+EXIF_CFLAGS = @EXIF_CFLAGS@
+EXIF_LIBS = @EXIF_LIBS@
+EXIF_SOVERSION = @EXIF_SOVERSION@
+F77 = @F77@
+FC = @FC@
+FGREP = @FGREP@
+FLICKRNET_CFLAGS = @FLICKRNET_CFLAGS@
+FLICKRNET_LIBS = @FLICKRNET_LIBS@
+F_CFLAGS = @F_CFLAGS@
+F_LIBS = @F_LIBS@
+GAPI2CODEGEN = @GAPI2CODEGEN@
+GAPI2FIXUP = @GAPI2FIXUP@
+GAPI2PARSER = @GAPI2PARSER@
+GCONFTOOL = @GCONFTOOL@
+GCONF_SCHEMA_CONFIG_SOURCE = @GCONF_SCHEMA_CONFIG_SOURCE@
+GCONF_SCHEMA_FILE_DIR = @GCONF_SCHEMA_FILE_DIR@
+GCONF_SHARP_CFLAGS = @GCONF_SHARP_CFLAGS@
+GCONF_SHARP_LIBS = @GCONF_SHARP_LIBS@
+GETTEXT_PACKAGE = @GETTEXT_PACKAGE@
+GIO_CFLAGS = @GIO_CFLAGS@
+GIO_LIBS = @GIO_LIBS@
+GLIBSHARP_2_12_7_CFLAGS = @GLIBSHARP_2_12_7_CFLAGS@
+GLIBSHARP_2_12_7_LIBS = @GLIBSHARP_2_12_7_LIBS@
+GLIBSHARP_CFLAGS = @GLIBSHARP_CFLAGS@
+GLIBSHARP_LIBS = @GLIBSHARP_LIBS@
+GLIB_CFLAGS = @GLIB_CFLAGS@
+GLIB_GENMARSHAL = @GLIB_GENMARSHAL@
+GLIB_LIBS = @GLIB_LIBS@
+GLIB_MKENUMS = @GLIB_MKENUMS@
+GMOFILES = @GMOFILES@
+GMSGFMT = @GMSGFMT@
+GNOME_ICON_THEME_PREFIX = @GNOME_ICON_THEME_PREFIX@
+GNOME_SCREENSAVER_SAVERDIR = @GNOME_SCREENSAVER_SAVERDIR@
+GNOME_SCREENSAVER_THEMESDIR = @GNOME_SCREENSAVER_THEMESDIR@
+GNOME_SHARP_CFLAGS = @GNOME_SHARP_CFLAGS@
+GNOME_SHARP_LIBS = @GNOME_SHARP_LIBS@
+GOBJECT_QUERY = @GOBJECT_QUERY@
+GREP = @GREP@
+GTKSHARP_A11Y_CFLAGS = @GTKSHARP_A11Y_CFLAGS@
+GTKSHARP_A11Y_LIBS = @GTKSHARP_A11Y_LIBS@
+GTKSHARP_CFLAGS = @GTKSHARP_CFLAGS@
+GTKSHARP_LIBS = @GTKSHARP_LIBS@
+HELP_DIR = @HELP_DIR@
+ICONS_DIRECTORY = @ICONS_DIRECTORY@
+INSTALL = @INSTALL@
+INSTALL_DATA = @INSTALL_DATA@
+INSTALL_PROGRAM = @INSTALL_PROGRAM@
+INSTALL_SCRIPT = @INSTALL_SCRIPT@
+INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
+INSTOBJEXT = @INSTOBJEXT@
+INTLLIBS = @INTLLIBS@
+INTLTOOL_EXTRACT = @INTLTOOL_EXTRACT@
+INTLTOOL_MERGE = @INTLTOOL_MERGE@
+INTLTOOL_PERL = @INTLTOOL_PERL@
+INTLTOOL_UPDATE = @INTLTOOL_UPDATE@
+KEYRINGSHARP_CFLAGS = @KEYRINGSHARP_CFLAGS@
+KEYRINGSHARP_LIBS = @KEYRINGSHARP_LIBS@
+LCMS_CFLAGS = @LCMS_CFLAGS@
+LCMS_LIBS = @LCMS_LIBS@
+LD = @LD@
+LDFLAGS = @LDFLAGS@
+LIBEXIF_VERSION_CHECK_CFLAGS = @LIBEXIF_VERSION_CHECK_CFLAGS@
+LIBEXIF_VERSION_CHECK_LIBS = @LIBEXIF_VERSION_CHECK_LIBS@
+LIBJPEG = @LIBJPEG@
+LIBOBJS = @LIBOBJS@
+LIBS = @LIBS@
+LIBTOOL = @LIBTOOL@
+LIPO = @LIPO@
+LN_S = @LN_S@
+LTLIBOBJS = @LTLIBOBJS@
+MAINT = @MAINT@
+MAKEFLAGS = @MAKEFLAGS@
+MAKEINFO = @MAKEINFO@
+MCS = @MCS@
+MKDIR_P = @MKDIR_P@
+MKINSTALLDIRS = @MKINSTALLDIRS@
+MONO = @MONO@
+MONO_ADDINS_CFLAGS = @MONO_ADDINS_CFLAGS@
+MONO_ADDINS_GUI_CFLAGS = @MONO_ADDINS_GUI_CFLAGS@
+MONO_ADDINS_GUI_LIBS = @MONO_ADDINS_GUI_LIBS@
+MONO_ADDINS_LIBS = @MONO_ADDINS_LIBS@
+MONO_ADDINS_SETUP_CFLAGS = @MONO_ADDINS_SETUP_CFLAGS@
+MONO_ADDINS_SETUP_LIBS = @MONO_ADDINS_SETUP_LIBS@
+MONO_MODULE_CFLAGS = @MONO_MODULE_CFLAGS@
+MONO_MODULE_LIBS = @MONO_MODULE_LIBS@
+MSGFMT = @MSGFMT@
+MSGFMT_OPTS = @MSGFMT_OPTS@
+MSGMERGE = @MSGMERGE@
+NDESK_DBUS_CFLAGS = @NDESK_DBUS_CFLAGS@
+NDESK_DBUS_LIBS = @NDESK_DBUS_LIBS@
+NM = @NM@
+NMEDIT = @NMEDIT@
+NUNIT_CFLAGS = @NUNIT_CFLAGS@
+NUNIT_LIBS = @NUNIT_LIBS@
+OBJC = @OBJC@
+OBJDUMP = @OBJDUMP@
+OBJEXT = @OBJEXT@
+OMF_DIR = @OMF_DIR@
+OTOOL = @OTOOL@
+OTOOL64 = @OTOOL64@
+PACKAGE = @PACKAGE@
+PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
+PACKAGE_NAME = @PACKAGE_NAME@
+PACKAGE_STRING = @PACKAGE_STRING@
+PACKAGE_TARNAME = @PACKAGE_TARNAME@
+PACKAGE_URL = @PACKAGE_URL@
+PACKAGE_VERSION = @PACKAGE_VERSION@
+PATH_SEPARATOR = @PATH_SEPARATOR@
+PKG_CONFIG = @PKG_CONFIG@
+POFILES = @POFILES@
+POSUB = @POSUB@
+PO_IN_DATADIR_FALSE = @PO_IN_DATADIR_FALSE@
+PO_IN_DATADIR_TRUE = @PO_IN_DATADIR_TRUE@
+Q = @Q@
+RANLIB = @RANLIB@
+SED = @SED@
+SET_MAKE = @SET_MAKE@
+SHELL = @SHELL@
+STRIP = @STRIP@
+TURTLEDIR = @TURTLEDIR@
+UNIQUE_CFLAGS = @UNIQUE_CFLAGS@
+UNIQUE_LIBS = @UNIQUE_LIBS@
+USE_NLS = @USE_NLS@
+V = @V@
+VERSION = @VERSION@
+WARN_CFLAGS = @WARN_CFLAGS@
+XGETTEXT = @XGETTEXT@
+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_DUMPBIN = @ac_ct_DUMPBIN@
+am__include = @am__include@
+am__leading_dot = @am__leading_dot@
+am__quote = @am__quote@
+am__tar = @am__tar@
+am__untar = @am__untar@
+bindir = @bindir@
+build = @build@
+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@
+expanded_bindir = @expanded_bindir@
+expanded_datadir = @expanded_datadir@
+expanded_libdir = @expanded_libdir@
+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@
+lt_ECHO = @lt_ECHO@
+mandir = @mandir@
+mkdir_p = @mkdir_p@
+oldincludedir = @oldincludedir@
+pdfdir = @pdfdir@
+prefix = @prefix@
+program_transform_name = @program_transform_name@
+psdir = @psdir@
+sbindir = @sbindir@
+sharedstatedir = @sharedstatedir@
+shavedir = @shavedir@
+srcdir = @srcdir@
+sysconfdir = @sysconfdir@
+target_alias = @target_alias@
+top_build_prefix = @top_build_prefix@
+top_builddir = @top_builddir@
+top_srcdir = @top_srcdir@
+ASSEMBLY = FSpot.Cms
+ASSEMBLY_BUILD_FLAGS = -unsafe
+TARGET = library
+LINK = $(REF_FSPOT_CMS) $(am__append_1)
+SOURCES = \
+ CctTable.cs \
+ CmsException.cs \
+ ColorCIELab.cs \
+ ColorCIELCh.cs \
+ ColorCIExyY.cs \
+ ColorCIEXYZ.cs \
+ Format.cs \
+ GammaTable.cs \
+ IccColorSpace.cs \
+ IccProfileClass.cs \
+ Intent.cs \
+ NativeMethods.cs \
+ Profile.cs \
+ SaveException.cs \
+ Transform.cs
+
+RESOURCES =
+
+# Initializers
+MONO_BASE_PATH =
+MONO_ADDINS_PATH =
+
+# Install Paths
+DEFAULT_INSTALL_DIR = $(pkglibdir)
+BACKENDS_INSTALL_DIR = $(DEFAULT_INSTALL_DIR)/Backends
+EXTENSIONS_INSTALL_DIR = $(DEFAULT_INSTALL_DIR)/Extensions
+DIR_DOCS = $(top_builddir)/docs
+DIR_EXTENSIONS = $(top_builddir)/extensions
+DIR_ICONS = $(top_builddir)/icons
+DIR_JPEGTRAN = $(top_builddir)/lib/libjpegtran
+DIR_LIBFSPOT = $(top_builddir)/lib/libfspot
+DIR_SEMWEB = $(top_builddir)/lib/semweb
+DIR_SRC = $(top_builddir)/src
+DIR_GIOSHARP = $(top_builddir)/lib/gio-sharp/gio
+DIR_GTKSHARPBEANS = $(top_builddir)/lib/gtk-sharp-beans
+DIR_UNIQUESHARP = $(top_builddir)/lib/unique-sharp/unique
+DIR_BIN = $(top_builddir)/bin
+
+# External libraries to link against, generated from configure
+LINK_SYSTEM = -r:System
+LINK_SYSTEMDATA = -r:System.Data
+LINK_SYSTEM_WEB = -r:System.Web
+LINK_MONO_POSIX = -r:Mono.Posix
+LINK_MONO_CAIRO = -r:Mono.Cairo
+LINK_MONO_SIMD = -r:Mono.Simd
+LINK_MONODATA = -r:Mono.Data
+LINK_MONO_DATA_SQLITECLIENT = -r:Mono.Data.SqliteClient
+LINK_ICSHARP_ZIP_LIB = -r:ICSharpCode.SharpZipLib
+LINK_KEYRING = $(KEYRINGSHARP_LIBS)
+LINK_GLIB = $(GLIBSHARP_LIBS)
+LINK_GTK = $(GTKSHARP_LIBS)
+LINK_GNOME = $(GNOME_SHARP_LIBS)
+LINK_GCONF = $(GCONF_SHARP_LIBS)
+LINK_GLADE = -pkg:glade-sharp-2.0
+LINK_FLICKRNET = -pkg:flickrnet
+LINK_DBUS = $(NDESK_DBUS_LIBS) $(NDESK_DBUS_GLIB_LIBS)
+LINK_DBUS_NO_GLIB = $(NDESK_DBUS_LIBS)
+LINK_MONO_ADDINS_DEPS = $(MONO_ADDINS_LIBS)
+LINK_MONO_ADDINS_SETUP_DEPS = $(MONO_ADDINS_SETUP_LIBS)
+LINK_MONO_ADDINS_GUI_DEPS = $(MONO_ADDINS_GUI_LIBS)
+
+# GIO
+REF_GIO =
+LINK_GIO = -r:$(DIR_GIOSHARP)/gio-sharp.dll
+LINK_GIO_DEPS = $(REF_GIO) $(LINK_GIO)
+
+# Gtk Beans
+REF_GTK_BEANS = $(LINK_GIO_DEPS)
+LINK_GTK_BEANS = -r:$(DIR_GTKSHARPBEANS)/gtk-sharp-beans.dll
+LINK_GTK_BEANS_DEPS = $(REF_GTK_BEANS) $(LINK_GTK_BEANS)
+
+# Uniqe
+REF_UNIQUE =
+LINK_UNIQUE = -r:$(DIR_UNIQUESHARP)/unique-sharp.dll
+LINK_UNIQUE_DEPS = $(REF_UNIQUE) $(LINK_UNIQUE)
+
+# Hyena
+REF_HYENA = $(LINK_SYSTEM) $(LINK_MONO_POSIX)
+LINK_HYENA = -r:$(DIR_BIN)/Hyena.dll
+LINK_HYENA_DEPS = $(REF_HYENA) $(LINK_HYENA)
+
+# Semweb
+REF_SEMWEB = $(LINK_SYSTEMDATA) $(LINK_HYENA_DEPS)
+LINK_SEMWEB = -r:$(DIR_BIN)/SemWeb.dll
+LINK_SEMWEB_DEPS = $(REF_SEMWEB) $(LINK_SEMWEB)
+
+# Hyena.Data.Sqlite
+REF_HYENA_DATA_SQLITE = $(LINK_SQLITE)
+LINK_HYENA_DATA_SQLITE = -r:$(DIR_BIN)/Hyena.Data.Sqlite.dll
+LINK_HYENA_DATA_SQLITE_DEPS = $(REF_HYENA_DATA_SQLITE) $(LINK_HYENA_DATA_SQLITE)
+
+# Hyena.Gui
+REF_HYENA_GUI = $(LINK_HYENA_DEPS)
+LINK_HYENA_GUI = -r:$(DIR_BIN)/Hyena.Gui.dll
+LINK_HENA_GUI_DEPS = $(REF_HYENA_GUI) $(LINK_HYENA_GUI)
+
+# FSpot.Cms
+REF_FSPOT_CMS = $(LINK_GTK)
+LINK_FSPOT_CMS = -r:$(DIR_BIN)/FSpot.Cms.dll
+LINK_FSPOT_CMS_DEPS = $(REF_FSPOT_CMS) $(LINK_FSPOT_CMS)
+
+# FSpot.Utils
+REF_FSPOT_UTILS = $(LINK_HYENA_DEPS) $(LINK_GTK) $(LINK_GIO) $(LINK_MONO_CAIRO)
+LINK_FSPOT_UTILS = -r:$(DIR_BIN)/FSpot.Utils.dll
+LINK_FSPOT_UTILS_DEPS = $(REF_FSPOT_UTILS) $(LINK_FSPOT_UTILS)
+
+# FSpot.Core
+REF_FSPOT_CORE = $(LINK_FSPOT_UTILS_DEPS) $(LINK_FSPOT_CMS_DEPS)
+LINK_FSPOT_CORE = -r:$(DIR_BIN)/FSpot.Core.dll
+LINK_FSPOT_CORE_DEPS = $(REF_FSPOT_CORE) $(LINK_FSPOT_CORE)
+
+# FSpot.Query
+REF_FSPOT_QUERY = $(LINK_FSPOT_CORE_DEPS)
+LINK_FSPOT_QUERY = -r:$(DIR_BIN)/FSpot.Query.dll
+LINK_FSPOT_QUERY_DEPS = $(REF_FSPOT_QUERY) $(LINK_FSPOT_QUERY)
+
+# FSpot.JobScheduler
+REF_FSPOT_JOB_SCHEDULER = $(LINK_HYENA_DEPS)
+LINK_FSPOT_JOB_SCHEDULER = -r:$(DIR_BIN)/FSpot.JobScheduler.dll
+LINK_FSPOT_JOB_SCHEDULER_DEPS = $(REF_FSPOT_JOB_SCHEDULER) $(LINK_FSPOT_JOB_SCHEDULER)
+
+# FSpot.Bling
+REF_FSPOT_BLING = $(LINK_GTK_BEANS_DEPS) $(LINK_GLIB)
+LINK_FSPOT_BLING = -r:$(DIR_BIN)/FSpot.Bling.dll
+LINK_FSPOT_BLING_DEPS = $(REF_FSPOT_BLING) $(LINK_FSPOT_BLING)
+
+# FSpot.Platform
+REF_FSPOT_PLATFORM = $(LINK_GCONF) $(LINK_GTK) $(LINK_FSPOT_CORE_DEPS) $(LINK_DBUS)
+LINK_FSPOT_PLATFORM = -r:$(DIR_BIN)/FSpot.Platform.dll
+LINK_FSPOT_PLATFORM_DEPS = $(REF_FSPOT_PLATFORM) $(LINK_FSPOT_PLATFORM)
+
+# FSpot.Widgets
+REF_FSPOT_WIDGETS = $(LINK_FSPOT_CORE_DEPS) $(LINK_FSPOT_BLING_DEPS)
+LINK_FSPOT_WIDGETS = -r:$(DIR_BIN)/FSpot.Widgets.dll
+LINK_FSPOT_WIDGETS_DEPS = $(REF_FSPOT_WIDGETS) $(LINK_FSPOT_WIDGETS)
+
+# FSpot (executable)
+REF_FSPOT = $(LINK_FSPOT_WIDGETS_DEPS) $(LINK_FSPOT_PLATFORM_DEPS) $(LINK_FSPOT_QUERY_DEPS) \
+ $(LINK_GLIB) $(LINK_MONO_ADDINS_DEPS) $(LINK_UNIQUE_DEPS) $(LINK_MONO_ADDINS_SETUP_DEPS) \
+ $(LINK_SEMWEB_DEPS) $(LINK_GLADE) $(LINK_MONODATA) $(LINK_MONO_DATA_SQLITECLIENT) \
+ $(LINK_MONO_ADDINS_GUI_DEPS) $(LINK_FSPOT_JOB_SCHEDULER_DEPS) $(LINK_ICSHARP_ZIP_LIB) \
+ $(LINK_GNOME)
+
+# FIXME: do not link executables
+LINK_FSPOT = -r:$(DIR_BIN)/f-spot.exe
+LINK_FSPOT_DEPS = $(REF_FSPOT) $(LINK_FSPOT)
+
+# Extensions
+REF_FSPOT_EXTENSION_BLACKOUTEDITOR = $(LINK_FSPOT_DEPS)
+REF_FSPOT_EXTENSION_BWEDITOR = $(LINK_FSPOT_DEPS) $(LINK_MONO_SIMD)
+REF_FSPOT_EXTENSION_FLIPEDITOR = $(LINK_FSPOT_DEPS)
+REF_FSPOT_EXTENSION_PIXELATEEDITOR = $(LINK_FSPOT_DEPS)
+REF_FSPOT_EXTENSION_RESIZEEDITOR = $(LINK_FSPOT_DEPS)
+REF_FSPOT_EXTENSION_CDEXPORT = $(LINK_FSPOT_DEPS)
+REF_FSPOT_EXTENSION_FACEBOOKEXPORT = $(LINK_FSPOT_DEPS) $(LINK_KEYRING)
+REF_FSPOT_EXTENSION_FLICKREXPORT = $(LINK_FSPOT_DEPS) $(LINK_FLICKRNET)
+REF_FSPOT_EXTENSION_FOLDEREXPORT = $(LINK_FSPOT_DEPS) $(LINK_SYSTEM_WEB)
+REF_FSPOT_EXTENSION_GALLERYEXPORT = $(LINK_FSPOT_DEPS)
+REF_MONO_GOOGLE = $(LINK_HYENA_DEPS)
+LINK_MONO_GOOGLE = -r:$(DIR_BIN)/Mono.Google.dll
+LINK_MONO_GOOGLE_DEPS = $(REF_MONO_GOOGLE) $(LINK_MONO_GOOGLE)
+REF_FSPOT_EXTENSION_PICASAWEBEXPORT = $(LINK_FSPOT_DEPS) $(LINK_MONO_GOOGLE) $(LINK_KEYRING)
+REF_SMUGMUGNET = $(LINK_FSPOT_DEPS)
+LINK_SMUGMUGNET = -r:$(DIR_BIN)/SmugMugNet.dll
+LINK_SMUGMUGNET_DEPS = $(REF_SMUGMUGNET) $(LINK_SMUGMUGNET)
+REF_FSPOT_EXTENSION_SMUGMUGEXPORT = $(LINK_SMUGMUGNET_DEPS) $(LINK_KEYRING)
+REF_MONO_TABBLO = $(LINK_HYENA_DEPS)
+LINK_MONO_TABBLO = -r:$(DIR_BIN)/Mono.Tabblo.dll
+LINK_MONO_TABBLO_DEPS = $(REF_MONO_TABBLO) $(LINK_MONO_TABBLO)
+REF_FSPOT_EXTENSION_TABBLOEXPORT = $(LINK_FSPOT_DEPS) $(LINK_KEYRING) $(LINK_MONO_TABBLO_DEPS)
+REF_FSPOT_EXTENSION_ZIPEXPORT = $(LINK_FSPOT_DEPS)
+REF_FSPOT_EXTENSION_CHANGEPHOTOPATH = $(LINK_FSPOT_DEPS)
+REF_FSPOT_EXTENSION_DEVELOPINUFRAW = $(LINK_FSPOT_DEPS)
+REF_FSPOT_EXTENSION_HASHJOB = $(LINK_FSPOT_DEPS)
+REF_FSPOT_EXTENSION_LIVEWEBGALLERY = $(LINK_FSPOT_DEPS)
+REF_FSPOT_EXTENSION_MERGEDB = $(LINK_FSPOT_DEPS)
+REF_FSPOT_EXTENSION_RAWPLUSJPEG = $(LINK_FSPOT_DEPS)
+REF_FSPOT_EXTENSION_RETROACTIVEROLL = $(LINK_FSPOT_DEPS)
+REF_FSPOT_EXTENSION_SCREENSAVERCONFIG = $(LINK_FSPOT_DEPS)
+REF_FSPOT_EXTENSION_COVERTRANSITION = $(LINK_FSPOT_DEPS)
+
+# Cute hack to replace a space with something
+colon := :
+empty :=
+space := $(empty) $(empty)
+
+# Build path to allow running uninstalled
+RUN_PATH = $(subst $(space),$(colon), $(MONO_BASE_PATH))
+UNIQUE_FILTER_PIPE = tr [:space:] \\n | sort | uniq
+BUILD_DATA_DIR = $(top_builddir)/bin/share/$(PACKAGE)
+
+# Since all other attempts failed, we currently go this way:
+# This code adds the file specified in ASSEMBLY_INFO_SOURCE to SOURCES_BUILD.
+# If no such file is specified, the default AssemblyInfo.cs is used.
+ASSEMBLY_INFO_SOURCE_REAL = \
+ $(shell if [ "$(ASSEMBLY_INFO_SOURCE)" ]; \
+ then \
+ echo "$(addprefix $(srcdir)/, $(ASSEMBLY_INFO_SOURCE))"; \
+ else \
+ echo "$(top_srcdir)/src/AssemblyInfo.cs"; \
+ fi)
+
+SOURCES_BUILD = $(addprefix $(srcdir)/, $(SOURCES)) \
+ $(ASSEMBLY_INFO_SOURCE_REAL)
+RESOURCES_EXPANDED = $(addprefix $(srcdir)/, $(RESOURCES))
+RESOURCES_BUILD = $(foreach resource, $(RESOURCES_EXPANDED), \
+ -resource:$(resource),$(notdir $(resource)))
+
+INSTALL_ICONS = $(top_srcdir)/build/private-icon-theme-installer "$(mkinstalldirs)" "$(INSTALL_DATA)"
+THEME_ICONS_SOURCE = $(wildcard $(srcdir)/ThemeIcons/*/*/*.png) $(wildcard $(srcdir)/ThemeIcons/scalable/*/*.svg)
+THEME_ICONS_RELATIVE = $(subst $(srcdir)/ThemeIcons/, , $(THEME_ICONS_SOURCE))
+ASSEMBLY_EXTENSION = $(strip $(patsubst library, dll, $(TARGET)))
+ASSEMBLY_FILE = $(top_builddir)/bin/$(ASSEMBLY).$(ASSEMBLY_EXTENSION)
+INSTALL_DIR_RESOLVED = $(firstword $(subst , $(DEFAULT_INSTALL_DIR), $(INSTALL_DIR)))
+ at ENABLE_TESTS_TRUE@ENABLE_TESTS_FLAG = "-define:ENABLE_TESTS"
+ at ENABLE_ATK_TRUE@ENABLE_ATK_FLAG = "-define:ENABLE_ATK"
+FILTERED_LINK = $(shell echo "$(LINK)" | $(UNIQUE_FILTER_PIPE))
+DEP_LINK = $(shell echo "$(LINK)" | $(UNIQUE_FILTER_PIPE) | sed s,-r:,,g | grep '$(top_builddir)/bin/')
+OUTPUT_FILES = \
+ $(ASSEMBLY_FILE) \
+ $(ASSEMBLY_FILE).mdb
+
+moduledir = $(INSTALL_DIR_RESOLVED)
+module_SCRIPTS = $(OUTPUT_FILES) FSpot.Cms.dll.config
+EXTRA_DIST = $(SOURCES_BUILD) $(RESOURCES_EXPANDED) \
+ $(THEME_ICONS_SOURCE) FSpot.Cms.dll.config
+CLEANFILES = $(OUTPUT_FILES) $(ASSEMBLY_FILE).config
+DISTCLEANFILES = *.pidb
+MAINTAINERCLEANFILES = Makefile.in
+all: all-am
+
+.SUFFIXES:
+$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(top_srcdir)/build/build.mk $(top_srcdir)/build/build.environment.mk $(top_srcdir)/build/build.rules.mk $(am__configure_deps)
+ @for dep in $?; do \
+ case '$(am__configure_deps)' in \
+ *$$dep*) \
+ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \
+ && { if test -f $@; then exit 0; else break; fi; }; \
+ exit 1;; \
+ esac; \
+ done; \
+ echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign src/Cms/Makefile'; \
+ $(am__cd) $(top_srcdir) && \
+ $(AUTOMAKE) --foreign src/Cms/Makefile
+.PRECIOUS: Makefile
+Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
+ @case '$?' in \
+ *config.status*) \
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \
+ *) \
+ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \
+ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \
+ esac;
+
+$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+
+$(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps)
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps)
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(am__aclocal_m4_deps):
+FSpot.Cms.dll.config: $(top_builddir)/config.status $(srcdir)/FSpot.Cms.dll.config.in
+ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@
+install-moduleSCRIPTS: $(module_SCRIPTS)
+ @$(NORMAL_INSTALL)
+ test -z "$(moduledir)" || $(MKDIR_P) "$(DESTDIR)$(moduledir)"
+ @list='$(module_SCRIPTS)'; test -n "$(moduledir)" || list=; \
+ for p in $$list; do \
+ if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \
+ if test -f "$$d$$p"; then echo "$$d$$p"; echo "$$p"; else :; fi; \
+ done | \
+ sed -e 'p;s,.*/,,;n' \
+ -e 'h;s|.*|.|' \
+ -e 'p;x;s,.*/,,;$(transform)' | sed 'N;N;N;s,\n, ,g' | \
+ $(AWK) 'BEGIN { files["."] = ""; dirs["."] = 1; } \
+ { d=$$3; if (dirs[d] != 1) { print "d", d; dirs[d] = 1 } \
+ if ($$2 == $$4) { files[d] = files[d] " " $$1; \
+ if (++n[d] == $(am__install_max)) { \
+ print "f", d, files[d]; n[d] = 0; files[d] = "" } } \
+ else { print "f", d "/" $$4, $$1 } } \
+ END { for (d in files) print "f", d, files[d] }' | \
+ while read type dir files; do \
+ if test "$$dir" = .; then dir=; else dir=/$$dir; fi; \
+ test -z "$$files" || { \
+ echo " $(INSTALL_SCRIPT) $$files '$(DESTDIR)$(moduledir)$$dir'"; \
+ $(INSTALL_SCRIPT) $$files "$(DESTDIR)$(moduledir)$$dir" || exit $$?; \
+ } \
+ ; done
+
+uninstall-moduleSCRIPTS:
+ @$(NORMAL_UNINSTALL)
+ @list='$(module_SCRIPTS)'; test -n "$(moduledir)" || exit 0; \
+ files=`for p in $$list; do echo "$$p"; done | \
+ sed -e 's,.*/,,;$(transform)'`; \
+ test -n "$$list" || exit 0; \
+ echo " ( cd '$(DESTDIR)$(moduledir)' && rm -f" $$files ")"; \
+ cd "$(DESTDIR)$(moduledir)" && rm -f $$files
+
+mostlyclean-libtool:
+ -rm -f *.lo
+
+clean-libtool:
+ -rm -rf .libs _libs
+tags: TAGS
+TAGS:
+
+ctags: CTAGS
+CTAGS:
+
+
+distdir: $(DISTFILES)
+ @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; \
+ if test -d $$d/$$file; then \
+ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \
+ if test -d "$(distdir)/$$file"; then \
+ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
+ fi; \
+ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
+ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \
+ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
+ fi; \
+ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \
+ else \
+ test -f "$(distdir)/$$file" \
+ || cp -p $$d/$$file "$(distdir)/$$file" \
+ || exit 1; \
+ fi; \
+ done
+check-am: all-am
+check: check-am
+all-am: Makefile $(SCRIPTS)
+installdirs:
+ for dir in "$(DESTDIR)$(moduledir)"; do \
+ test -z "$$dir" || $(MKDIR_P) "$$dir"; \
+ done
+install: install-am
+install-exec: install-exec-am
+install-data: install-data-am
+uninstall: uninstall-am
+
+install-am: all-am
+ @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
+
+installcheck: installcheck-am
+install-strip:
+ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+ `test -z '$(STRIP)' || \
+ echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install
+mostlyclean-generic:
+
+clean-generic:
+ -test -z "$(CLEANFILES)" || rm -f $(CLEANFILES)
+
+distclean-generic:
+ -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
+ -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES)
+ -test -z "$(DISTCLEANFILES)" || rm -f $(DISTCLEANFILES)
+
+maintainer-clean-generic:
+ @echo "This command is intended for maintainers to use"
+ @echo "it deletes files that may require special tools to rebuild."
+ -test -z "$(MAINTAINERCLEANFILES)" || rm -f $(MAINTAINERCLEANFILES)
+clean: clean-am
+
+clean-am: clean-generic clean-libtool mostlyclean-am
+
+distclean: distclean-am
+ -rm -f Makefile
+distclean-am: clean-am distclean-generic
+
+dvi: dvi-am
+
+dvi-am:
+
+html: html-am
+
+html-am:
+
+info: info-am
+
+info-am:
+
+install-data-am: install-data-local install-moduleSCRIPTS
+
+install-dvi: install-dvi-am
+
+install-dvi-am:
+
+install-exec-am:
+
+install-html: install-html-am
+
+install-html-am:
+
+install-info: install-info-am
+
+install-info-am:
+
+install-man:
+
+install-pdf: install-pdf-am
+
+install-pdf-am:
+
+install-ps: install-ps-am
+
+install-ps-am:
+
+installcheck-am:
+
+maintainer-clean: maintainer-clean-am
+ -rm -f Makefile
+maintainer-clean-am: distclean-am maintainer-clean-generic
+
+mostlyclean: mostlyclean-am
+
+mostlyclean-am: mostlyclean-generic mostlyclean-libtool
+
+pdf: pdf-am
+
+pdf-am:
+
+ps: ps-am
+
+ps-am:
+
+uninstall-am: uninstall-local uninstall-moduleSCRIPTS
+
+.MAKE: install-am install-strip
+
+.PHONY: all all-am check check-am clean clean-generic clean-libtool \
+ distclean distclean-generic distclean-libtool distdir dvi \
+ dvi-am html html-am info info-am install install-am \
+ install-data install-data-am install-data-local install-dvi \
+ install-dvi-am install-exec install-exec-am install-html \
+ install-html-am install-info install-info-am install-man \
+ install-moduleSCRIPTS install-pdf install-pdf-am install-ps \
+ install-ps-am install-strip installcheck installcheck-am \
+ installdirs maintainer-clean maintainer-clean-generic \
+ mostlyclean mostlyclean-generic mostlyclean-libtool pdf pdf-am \
+ ps ps-am uninstall uninstall-am uninstall-local \
+ uninstall-moduleSCRIPTS
+
+
+all: $(ASSEMBLY_FILE) theme-icons
+
+run:
+ @pushd $(top_builddir); \
+ make run; \
+ popd;
+
+# uncommented for now.
+# tests are currently excuted from Makefile in $(top_builddir)
+#test:
+# @pushd $(top_builddir)/tests; \
+# make $(ASSEMBLY); \
+# popd;
+
+build-debug:
+ @echo $(DEP_LINK)
+
+$(ASSEMBLY_FILE).mdb: $(ASSEMBLY_FILE)
+
+$(ASSEMBLY_FILE): $(SOURCES_BUILD) $(RESOURCES_EXPANDED) $(DEP_LINK)
+ @mkdir -p $(top_builddir)/bin
+ @if [ ! "x$(ENABLE_RELEASE)" = "xyes" ]; then \
+ $(top_srcdir)/build/dll-map-makefile-verifier $(srcdir)/Makefile.am $(srcdir)/$(notdir $@.config) && \
+ $(MONO) $(top_builddir)/build/dll-map-verifier.exe $(srcdir)/$(notdir $@.config) -iwinmm -ilibbanshee -ilibbnpx11 -ilibc -ilibc.so.6 -iintl -ilibmtp.dll -ilibigemacintegration.dylib -iCFRelease $(SOURCES_BUILD); \
+ fi;
+ $(MCS) \
+ $(GMCS_FLAGS) \
+ $(ASSEMBLY_BUILD_FLAGS) \
+ -nowarn:0278 -nowarn:0078 $$warn \
+ -define:HAVE_GTK_2_10 -define:NET_2_0 \
+ -debug -target:$(TARGET) -out:$@ \
+ $(BUILD_DEFINES) $(ENABLE_TESTS_FLAG) $(ENABLE_ATK_FLAG) \
+ $(FILTERED_LINK) $(RESOURCES_BUILD) $(SOURCES_BUILD)
+ @if [ -e $(srcdir)/$(notdir $@.config) ]; then \
+ cp $(srcdir)/$(notdir $@.config) $(top_builddir)/bin; \
+ fi;
+ @if [ ! -z "$(EXTRA_BUNDLE)" ]; then \
+ cp $(EXTRA_BUNDLE) $(top_builddir)/bin; \
+ fi;
+
+theme-icons: $(THEME_ICONS_SOURCE)
+ @$(INSTALL_ICONS) -il "$(BUILD_DATA_DIR)" "$(srcdir)" $(THEME_ICONS_RELATIVE)
+
+install-data-local: $(THEME_ICONS_SOURCE)
+ @$(INSTALL_ICONS) -i "$(DESTDIR)$(pkgdatadir)" "$(srcdir)" $(THEME_ICONS_RELATIVE)
+
+uninstall-local: $(THEME_ICONS_SOURCE)
+ @$(INSTALL_ICONS) -u "$(DESTDIR)$(pkgdatadir)" "$(srcdir)" $(THEME_ICONS_RELATIVE)
+
+# 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.
+.NOEXPORT:
diff --git a/src/ColorAdjustment/Adjustment.cs b/src/ColorAdjustment/Adjustment.cs
index 090aa16..15ac762 100644
--- a/src/ColorAdjustment/Adjustment.cs
+++ b/src/ColorAdjustment/Adjustment.cs
@@ -18,7 +18,6 @@ using System.Collections.Generic;
namespace FSpot.ColorAdjustment {
public abstract class Adjustment {
- private List <Cms.Profile> profiles;
protected int nsteps = 20;
private Cms.Intent intent = Cms.Intent.Perceptual;
@@ -64,16 +63,17 @@ namespace FSpot.ColorAdjustment {
Cms.Profile [] list = GenerateAdjustments ().ToArray ();
if (Input.HasAlpha) {
+ Gdk.Pixbuf input_copy = (Gdk.Pixbuf)Input.Clone ();
Pixbuf alpha = PixbufUtils.Flatten (Input);
Transform transform = new Transform (list,
PixbufUtils.PixbufCmsFormat (alpha),
PixbufUtils.PixbufCmsFormat (final),
intent, 0x0000);
PixbufUtils.ColorAdjust (alpha, final, transform);
- PixbufUtils.ReplaceColor (final, Input);
+ PixbufUtils.ReplaceColor (final, input_copy);
alpha.Dispose ();
final.Dispose ();
- final = Input;
+ final = input_copy;
} else {
Cms.Transform transform = new Cms.Transform (list,
PixbufUtils.PixbufCmsFormat (Input),
diff --git a/src/ColorAdjustment/AutoStretch.cs b/src/ColorAdjustment/AutoStretch.cs
index 666d979..d4dcaab 100644
--- a/src/ColorAdjustment/AutoStretch.cs
+++ b/src/ColorAdjustment/AutoStretch.cs
@@ -12,6 +12,7 @@ using Cms;
using Gdk;
using System;
using System.Collections.Generic;
+using Hyena;
namespace FSpot.ColorAdjustment {
public class AutoStretch : Adjustment {
@@ -28,7 +29,7 @@ namespace FSpot.ColorAdjustment {
for (int channel = 0; channel < tables.Length; channel++) {
int high, low;
hist.GetHighLow (channel, out high, out low);
- System.Console.WriteLine ("high = {0}, low = {1}", high, low);
+ Log.DebugFormat ("high = {0}, low = {1}", high, low);
tables [channel] = StretchChannel (255, low / 255.0, high / 255.0);
}
profiles.Add (new Cms.Profile (IccColorSpace.Rgb, tables));
diff --git a/src/ControlOverlay.cs b/src/ControlOverlay.cs
index 51c92b4..f744f03 100644
--- a/src/ControlOverlay.cs
+++ b/src/ControlOverlay.cs
@@ -21,7 +21,6 @@ namespace FSpot {
Window host_toplevel;
bool composited;
VisibilityType visibility;
- double target_opacity;
int round = 12;
Delay hide;
Delay fade;
@@ -204,11 +203,7 @@ namespace FSpot {
Allocation.Width,
Allocation.Height, 1);
-#if CAIRO_1_2_5
Context cr = Gdk.CairoHelper.Create (bitmap);
-#else
- Context cr = CairoUtils.CreateContext (bitmap);
-#endif
ShapeCombineMask (bitmap, 0, 0);
ShapeSurface (cr, new Color (1, 1, 1));
ShapeCombineMask (bitmap, 0, 0);
@@ -220,11 +215,7 @@ namespace FSpot {
protected override bool OnExposeEvent (Gdk.EventExpose args)
{
Gdk.Color c = Style.Background (State);
-#if CAIRO_1_2_5
Context cr = Gdk.CairoHelper.Create (GdkWindow);
-#else
- Context cr = CairoUtils.CreateContext (GdkWindow);
-#endif
ShapeSurface (cr, new Cairo.Color (c.Red / (double) ushort.MaxValue,
c.Blue / (double) ushort.MaxValue,
diff --git a/src/Core/Animator.cs b/src/Core/Animator.cs
deleted file mode 100644
index 0273587..0000000
--- a/src/Core/Animator.cs
+++ /dev/null
@@ -1,79 +0,0 @@
-/*
- * Delay.cs
- *
- * Copyright 2007 Novell Inc.
- *
- * Author
- * Larry Ewing <lewing at novell.com>
- *
- * See COPYING for license information.
- *
- */
-
-using System;
-
-namespace FSpot
-{
- public class Animator
- {
- Delay delay;
- DateTime start;
- TimeSpan duration;
- float percent;
- EventHandler tick;
- bool run_first;
-
- public float Percent {
- get { return percent; }
- }
-
- public bool RunWhenStarted {
- get { return run_first; }
- set { run_first = value; }
- }
-
- public Animator (TimeSpan duration, TimeSpan interval, EventHandler tick)
- {
- this.duration = duration;
- this.tick = tick;
- delay = new Delay ((uint)interval.TotalMilliseconds, HandleTimeout);
- }
-
- public Animator (int duration_milli, int interval_milli, EventHandler tick)
- : this (new TimeSpan (0, 0, 0, 0, duration_milli),
- new TimeSpan (0, 0, 0, 0, interval_milli),
- tick)
- {
- }
-
- public bool HandleTimeout ()
- {
- percent = (DateTime.Now - start).Ticks / (float) duration.Ticks;
- EventHandler tick_handler = tick;
- if (tick_handler != null)
- tick_handler (this, EventArgs.Empty);
-
- return delay.IsPending;
- }
-
- public void Start ()
- {
- Start (run_first);
- }
-
- public void Start (bool run_now)
- {
- start = DateTime.Now;
-
- if (run_now)
- HandleTimeout ();
-
- delay.Start ();
- }
-
- public void Stop ()
- {
- delay.Stop ();
- }
- }
-}
diff --git a/src/Core/App.cs b/src/Core/App.cs
index c2207df..ccd1328 100644
--- a/src/Core/App.cs
+++ b/src/Core/App.cs
@@ -18,7 +18,7 @@ using Unique;
using Mono.Unix;
-using FSpot.Utils;
+using Hyena;
namespace FSpot
{
@@ -104,12 +104,12 @@ namespace FSpot
HandleSlideshow (tagname);
}
- public void View (Uri uri)
+ public void View (SafeUri uri)
{
- View (new Uri[] {uri});
+ View (new SafeUri[] {uri});
}
- public void View (IEnumerable<Uri> uris)
+ public void View (IEnumerable<SafeUri> uris)
{
var uri_s = from uri in uris select uri.ToString ();
View (uri_s);
@@ -169,6 +169,7 @@ namespace FSpot
#endregion
#region Command Handlers
+
void HandleMessageReceived (object sender, MessageReceivedArgs e)
{
switch ((Command)e.Command) {
@@ -202,12 +203,7 @@ namespace FSpot
void HandleImport (string path)
{
Organizer.Window.Present ();
- if (path != null && path.StartsWith ("gphoto2:"))
- Organizer.ImportCamera (path);
- else if (path != null && path.StartsWith ("file:"))
- Organizer.ImportFile (Uri.UnescapeDataString ((new Uri(path)).AbsolutePath));
- else
- Organizer.ImportFile (path);
+ Organizer.ImportFile (path == null ? null : new SafeUri(path));
}
void HandleOrganize ()
@@ -221,7 +217,7 @@ namespace FSpot
void HandleShutdown ()
{
try {
- MainWindow.Toplevel.Close ();
+ App.Instance.Organizer.Close ();
} catch {
System.Environment.Exit (0);
}
@@ -238,7 +234,7 @@ namespace FSpot
else
tag = Database.Tags.GetTagById (Preferences.Get<int> (Preferences.SCREENSAVER_TAG));
- Photo[] photos;
+ IBrowsableItem[] photos;
if (tag != null)
photos = Database.Photos.Query (new Tag[] {tag});
else if (Preferences.Get<int> (Preferences.SCREENSAVER_TAG) == 0)
@@ -254,7 +250,7 @@ namespace FSpot
window.ModifyBg (Gtk.StateType.Normal, new Gdk.Color (0, 0, 0));
if (photos.Length > 0) {
- Array.Sort (photos, new Photo.RandomSort ());
+ Array.Sort (photos, new IBrowsableItemComparer.RandomSort ());
slideshow = new FSpot.Widgets.SlideShow (new BrowsablePointer (new PhotoList (photos), 0), (uint)(delay * 1000), true);
slideshow.Transition = new FSpot.Widgets.DissolveTransition ();
window.Add (slideshow);
@@ -313,14 +309,14 @@ namespace FSpot
void HandleView (string[] uris)
{
- List<Uri> ul = new List<Uri> ();
+ List<SafeUri> ul = new List<SafeUri> ();
foreach (var u in uris)
- ul.Add (new Uri (u));
+ ul.Add (new SafeUri (u, true));
try {
Register (new FSpot.SingleView (ul.ToArray ()).Window);
} catch (System.Exception e) {
- System.Console.WriteLine (e.ToString ());
- System.Console.WriteLine ("no real valid path to view from");
+ Log.Exception (e);
+ Log.Debug ("no real valid path to view from");
}
}
@@ -340,7 +336,7 @@ namespace FSpot
Log.Information ("Exiting...");
Banshee.Kernel.Scheduler.Dispose ();
Database.Dispose ();
- ImageLoaderThread.Cleanup ();
+ ImageLoaderThread.CleanAll ();
Gtk.Application.Quit ();
System.Environment.Exit (0);
}
diff --git a/src/Core/Defines.cs b/src/Core/Defines.cs
new file mode 100644
index 0000000..47fcb32
--- /dev/null
+++ b/src/Core/Defines.cs
@@ -0,0 +1,20 @@
+//
+// Defines.cs
+// Get the locale directory
+//
+// Authors:
+// Martin Willemoes Hansen
+//
+// (C) 2004 Martin Willemoes Hansen
+//
+
+namespace FSpot {
+ public struct Defines {
+ public const string LOCALE_DIR = "/home/ruben/Build/share/locale";
+ public const string VERSION = "0.7.0";
+ public const string PACKAGE = "f-spot";
+ public const string PREFIX = "/home/ruben/Build";
+ public const string APP_DATA_DIR = "/home/ruben/Build/share/f-spot";
+ public const string BINDIR = PREFIX + "/bin";
+ }
+}
diff --git a/src/Core/FSpot.Core.dll.config b/src/Core/FSpot.Core.dll.config
new file mode 100644
index 0000000..cb3fab2
--- /dev/null
+++ b/src/Core/FSpot.Core.dll.config
@@ -0,0 +1,4 @@
+<configuration>
+ <dllmap dll="libglib-2.0-0.dll" target="libglib-2.0.so.0" os="!windows,osx"/>
+ <dllmap dll="libglib-2.0-0.dll" target="libglib-2.0.dylib" os="osx"/>
+</configuration>
diff --git a/src/Core/FSpot.Core.dll.config.in b/src/Core/FSpot.Core.dll.config.in
new file mode 100644
index 0000000..cb3fab2
--- /dev/null
+++ b/src/Core/FSpot.Core.dll.config.in
@@ -0,0 +1,4 @@
+<configuration>
+ <dllmap dll="libglib-2.0-0.dll" target="libglib-2.0.so.0" os="!windows,osx"/>
+ <dllmap dll="libglib-2.0-0.dll" target="libglib-2.0.dylib" os="osx"/>
+</configuration>
diff --git a/src/Core/Global.cs b/src/Core/Global.cs
index d7aef6a..a92e014 100644
--- a/src/Core/Global.cs
+++ b/src/Core/Global.cs
@@ -5,6 +5,7 @@
*
*/
using System;
+using Hyena;
namespace FSpot {
public static class Global {
@@ -20,10 +21,10 @@ namespace FSpot {
set { base_dir = value; }
}
- private static string photo_directory;
- public static string PhotoDirectory {
- get { return photo_directory; }
- set { photo_directory = value; }
+ private static SafeUri photo_uri;
+ public static SafeUri PhotoUri {
+ get { return photo_uri; }
+ set { photo_uri = value; }
}
public static string HelpDirectory {
diff --git a/src/Core/IBrowsableItem.cs b/src/Core/IBrowsableItem.cs
index adc9024..ab9ecfc 100644
--- a/src/Core/IBrowsableItem.cs
+++ b/src/Core/IBrowsableItem.cs
@@ -18,7 +18,7 @@ namespace FSpot
get;
}
- System.Uri DefaultVersionUri {
+ IBrowsableItemVersion DefaultVersion {
get;
}
@@ -34,6 +34,4 @@ namespace FSpot
get;
}
}
-
-
-}
+}
diff --git a/src/Core/IBrowsableItemChanges.cs b/src/Core/IBrowsableItemChanges.cs
index 79a3be7..4bcc510 100644
--- a/src/Core/IBrowsableItemChanges.cs
+++ b/src/Core/IBrowsableItemChanges.cs
@@ -29,4 +29,15 @@ namespace FSpot
get { return true; }
}
}
+
+ public class InvalidateData : IBrowsableItemChanges
+ {
+ static InvalidateData instance = new InvalidateData ();
+ public static InvalidateData Instance {
+ get { return instance; }
+ }
+
+ public bool DataChanged { get { return true; } }
+ public bool MetadataChanged { get { return false; } }
+ }
}
diff --git a/src/Core/IBrowsableItemComparer.cs b/src/Core/IBrowsableItemComparer.cs
new file mode 100644
index 0000000..d68e0f5
--- /dev/null
+++ b/src/Core/IBrowsableItemComparer.cs
@@ -0,0 +1,44 @@
+using System;
+using System.Collections;
+using System.Collections.Generic;
+
+namespace FSpot
+{
+ public static class IBrowsableItemComparer {
+ public class CompareDateName : IComparer<IBrowsableItem>
+ {
+ public int Compare (IBrowsableItem p1, IBrowsableItem p2)
+ {
+ int result = p1.CompareDate (p2);
+
+ if (result == 0)
+ result = p1.CompareName (p2);
+
+ return result;
+ }
+ }
+
+ public class RandomSort : IComparer
+ {
+ Random random = new Random ();
+
+ public int Compare (object obj1, object obj2)
+ {
+ return random.Next (-5, 5);
+ }
+ }
+
+ public class CompareDirectory : IComparer<IBrowsableItem>
+ {
+ public int Compare (IBrowsableItem p1, IBrowsableItem p2)
+ {
+ int result = p1.CompareDefaultVersionUri (p2);
+
+ if (result == 0)
+ result = p1.CompareName (p2);
+
+ return result;
+ }
+ }
+ }
+}
diff --git a/src/Core/IBrowsableItemExtensions.cs b/src/Core/IBrowsableItemExtensions.cs
new file mode 100644
index 0000000..6a1624d
--- /dev/null
+++ b/src/Core/IBrowsableItemExtensions.cs
@@ -0,0 +1,37 @@
+using System;
+using System.IO;
+
+namespace FSpot
+{
+ public static class IBrowsableItemExtensions {
+ public static int CompareDate (this IBrowsableItem photo1, IBrowsableItem photo2)
+ {
+ return DateTime.Compare (photo1.Time, photo2.Time);
+ }
+
+ public static int CompareName (this IBrowsableItem photo1, IBrowsableItem photo2)
+ {
+ return string.Compare (photo1.Name, photo2.Name);
+ }
+
+ public static int Compare (this IBrowsableItem photo1, IBrowsableItem photo2)
+ {
+ int result = photo1.CompareDate (photo2);
+
+ if (result == 0)
+ result = CompareDefaultVersionUri (photo1, photo2);
+
+ if (result == 0)
+ result = photo1.CompareName (photo2);
+
+ return result;
+ }
+
+ public static int CompareDefaultVersionUri (this IBrowsableItem photo1, IBrowsableItem photo2)
+ {
+ var photo1_uri = Path.Combine (photo1.DefaultVersion.BaseUri, photo1.DefaultVersion.Filename);
+ var photo2_uri = Path.Combine (photo2.DefaultVersion.BaseUri, photo2.DefaultVersion.Filename);
+ return string.Compare (photo1_uri, photo2_uri);
+ }
+ }
+}
diff --git a/src/Core/IBrowsableItemVersion.cs b/src/Core/IBrowsableItemVersion.cs
new file mode 100644
index 0000000..345172a
--- /dev/null
+++ b/src/Core/IBrowsableItemVersion.cs
@@ -0,0 +1,16 @@
+using Hyena;
+
+namespace FSpot
+{
+ public interface IBrowsableItemVersion {
+ string Name { get; }
+ bool IsProtected { get; }
+ SafeUri BaseUri { get; }
+ string Filename { get; }
+
+ // For convenience
+ SafeUri Uri { get; set; }
+
+ string ImportMD5 { get; }
+ }
+}
diff --git a/src/Core/IBrowsableItemVersionable.cs b/src/Core/IBrowsableItemVersionable.cs
new file mode 100644
index 0000000..039763a
--- /dev/null
+++ b/src/Core/IBrowsableItemVersionable.cs
@@ -0,0 +1,8 @@
+using System.Collections.Generic;
+
+namespace FSpot
+{
+ public interface IBrowsableItemVersionable {
+ IEnumerable<IBrowsableItemVersion> Versions { get; }
+ }
+}
diff --git a/src/Core/Makefile.am b/src/Core/Makefile.am
new file mode 100644
index 0000000..c5aafe2
--- /dev/null
+++ b/src/Core/Makefile.am
@@ -0,0 +1,31 @@
+ASSEMBLY = FSpot.Core
+TARGET = library
+LINK = $(REF_FSPOT_CORE)
+
+SOURCES = \
+ BrowsableEventArgs.cs \
+ BrowsablePointer.cs \
+ BrowsablePointerChangedEventArgs.cs \
+ Category.cs \
+ DbItem.cs \
+ Delay.cs \
+ Tag.cs \
+ Global.cs \
+ IBrowsableItem.cs \
+ IBrowsableItemChanges.cs \
+ IBrowsableItemComparer.cs \
+ IBrowsableItemExtensions.cs \
+ IBrowsableItemVersion.cs \
+ IBrowsableItemVersionable.cs \
+ IBrowsableCollection.cs \
+ PhotoChanges.cs \
+ PhotosChanges.cs \
+ Roll.cs \
+ Defines.cs
+
+RESOURCES =
+
+include $(top_srcdir)/build/build.mk
+
+EXTRA_DIST += FSpot.Core.dll.config
+module_SCRIPTS += FSpot.Core.dll.config
diff --git a/src/Core/Makefile.in b/src/Core/Makefile.in
new file mode 100644
index 0000000..72f19fc
--- /dev/null
+++ b/src/Core/Makefile.in
@@ -0,0 +1,828 @@
+# Makefile.in generated by automake 1.11.1 from Makefile.am.
+# @configure_input@
+
+# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
+# 2003, 2004, 2005, 2006, 2007, 2008, 2009 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.
+
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
+# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
+# PARTICULAR PURPOSE.
+
+ at SET_MAKE@
+
+VPATH = @srcdir@
+pkgdatadir = $(datadir)/@PACKAGE@
+pkgincludedir = $(includedir)/@PACKAGE@
+pkglibdir = $(libdir)/@PACKAGE@
+pkglibexecdir = $(libexecdir)/@PACKAGE@
+am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
+install_sh_DATA = $(install_sh) -c -m 644
+install_sh_PROGRAM = $(install_sh) -c
+install_sh_SCRIPT = $(install_sh) -c
+INSTALL_HEADER = $(INSTALL_DATA)
+transform = $(program_transform_name)
+NORMAL_INSTALL = :
+PRE_INSTALL = :
+POST_INSTALL = :
+NORMAL_UNINSTALL = :
+PRE_UNINSTALL = :
+POST_UNINSTALL = :
+build_triplet = @build@
+host_triplet = @host@
+DIST_COMMON = $(srcdir)/Defines.cs.in \
+ $(srcdir)/FSpot.Core.dll.config.in $(srcdir)/Makefile.am \
+ $(srcdir)/Makefile.in $(top_srcdir)/build/build.environment.mk \
+ $(top_srcdir)/build/build.mk \
+ $(top_srcdir)/build/build.rules.mk
+ at ENABLE_TESTS_TRUE@am__append_1 = " $(NUNIT_LIBS)"
+subdir = src/Core
+ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
+am__aclocal_m4_deps = $(top_srcdir)/build/m4/shave/shave.m4 \
+ $(top_srcdir)/build/m4/shamrock/expansions.m4 \
+ $(top_srcdir)/build/m4/shamrock/gnome-doc.m4 \
+ $(top_srcdir)/build/m4/shamrock/mono.m4 \
+ $(top_srcdir)/build/m4/shamrock/nunit.m4 \
+ $(top_srcdir)/build/m4/shamrock/programs.m4 \
+ $(top_srcdir)/build/m4/f-spot/flickrnet.m4 \
+ $(top_srcdir)/build/m4/f-spot/gnome-keyring-sharp.m4 \
+ $(top_srcdir)/build/m4/f-spot/gtk-sharp.m4 \
+ $(top_srcdir)/build/m4/f-spot/mono-addins.m4 \
+ $(top_srcdir)/acinclude.m4 $(top_srcdir)/configure.ac
+am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
+ $(ACLOCAL_M4)
+mkinstalldirs = $(install_sh) -d
+CONFIG_HEADER = $(top_builddir)/config.h
+CONFIG_CLEAN_FILES = Defines.cs FSpot.Core.dll.config
+CONFIG_CLEAN_VPATH_FILES =
+am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`;
+am__vpath_adj = case $$p in \
+ $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \
+ *) f=$$p;; \
+ esac;
+am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`;
+am__install_max = 40
+am__nobase_strip_setup = \
+ srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'`
+am__nobase_strip = \
+ for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||"
+am__nobase_list = $(am__nobase_strip_setup); \
+ for p in $$list; do echo "$$p $$p"; done | \
+ sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \
+ $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \
+ if (++n[$$2] == $(am__install_max)) \
+ { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \
+ END { for (dir in files) print dir, files[dir] }'
+am__base_list = \
+ sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \
+ sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g'
+am__installdirs = "$(DESTDIR)$(moduledir)"
+SCRIPTS = $(module_SCRIPTS)
+DIST_SOURCES =
+DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
+ACLOCAL = @ACLOCAL@
+ACLOCAL_AMFLAGS = @ACLOCAL_AMFLAGS@
+ALL_LINGUAS = @ALL_LINGUAS@
+AMTAR = @AMTAR@
+AM_MAKEFLAGS = @AM_MAKEFLAGS@
+API_VERSION = @API_VERSION@
+AR = @AR@
+ASM_VERSION = @ASM_VERSION@
+AUTOCONF = @AUTOCONF@
+AUTOHEADER = @AUTOHEADER@
+AUTOMAKE = @AUTOMAKE@
+AWK = @AWK@
+CATALOGS = @CATALOGS@
+CATOBJEXT = @CATOBJEXT@
+CC = @CC@
+CCDEPMODE = @CCDEPMODE@
+CFLAGS = @CFLAGS@
+CPP = @CPP@
+CPPFLAGS = @CPPFLAGS@
+CSC_DEFINES = @CSC_DEFINES@
+CXX = @CXX@
+CXXCPP = @CXXCPP@
+CXXDEPMODE = @CXXDEPMODE@
+CXXFLAGS = @CXXFLAGS@
+CYGPATH_W = @CYGPATH_W@
+DATADIRNAME = @DATADIRNAME@
+DEFS = @DEFS@
+DEPDIR = @DEPDIR@
+DISPLAY_VERSION = @DISPLAY_VERSION@
+DISTCHECK_CONFIGURE_FLAGS = @DISTCHECK_CONFIGURE_FLAGS@
+DOC_USER_FORMATS = @DOC_USER_FORMATS@
+DSYMUTIL = @DSYMUTIL@
+DUMPBIN = @DUMPBIN@
+ECHO_C = @ECHO_C@
+ECHO_N = @ECHO_N@
+ECHO_T = @ECHO_T@
+EGREP = @EGREP@
+EXEEXT = @EXEEXT@
+EXIF_CFLAGS = @EXIF_CFLAGS@
+EXIF_LIBS = @EXIF_LIBS@
+EXIF_SOVERSION = @EXIF_SOVERSION@
+F77 = @F77@
+FC = @FC@
+FGREP = @FGREP@
+FLICKRNET_CFLAGS = @FLICKRNET_CFLAGS@
+FLICKRNET_LIBS = @FLICKRNET_LIBS@
+F_CFLAGS = @F_CFLAGS@
+F_LIBS = @F_LIBS@
+GAPI2CODEGEN = @GAPI2CODEGEN@
+GAPI2FIXUP = @GAPI2FIXUP@
+GAPI2PARSER = @GAPI2PARSER@
+GCONFTOOL = @GCONFTOOL@
+GCONF_SCHEMA_CONFIG_SOURCE = @GCONF_SCHEMA_CONFIG_SOURCE@
+GCONF_SCHEMA_FILE_DIR = @GCONF_SCHEMA_FILE_DIR@
+GCONF_SHARP_CFLAGS = @GCONF_SHARP_CFLAGS@
+GCONF_SHARP_LIBS = @GCONF_SHARP_LIBS@
+GETTEXT_PACKAGE = @GETTEXT_PACKAGE@
+GIO_CFLAGS = @GIO_CFLAGS@
+GIO_LIBS = @GIO_LIBS@
+GLIBSHARP_2_12_7_CFLAGS = @GLIBSHARP_2_12_7_CFLAGS@
+GLIBSHARP_2_12_7_LIBS = @GLIBSHARP_2_12_7_LIBS@
+GLIBSHARP_CFLAGS = @GLIBSHARP_CFLAGS@
+GLIBSHARP_LIBS = @GLIBSHARP_LIBS@
+GLIB_CFLAGS = @GLIB_CFLAGS@
+GLIB_GENMARSHAL = @GLIB_GENMARSHAL@
+GLIB_LIBS = @GLIB_LIBS@
+GLIB_MKENUMS = @GLIB_MKENUMS@
+GMOFILES = @GMOFILES@
+GMSGFMT = @GMSGFMT@
+GNOME_ICON_THEME_PREFIX = @GNOME_ICON_THEME_PREFIX@
+GNOME_SCREENSAVER_SAVERDIR = @GNOME_SCREENSAVER_SAVERDIR@
+GNOME_SCREENSAVER_THEMESDIR = @GNOME_SCREENSAVER_THEMESDIR@
+GNOME_SHARP_CFLAGS = @GNOME_SHARP_CFLAGS@
+GNOME_SHARP_LIBS = @GNOME_SHARP_LIBS@
+GOBJECT_QUERY = @GOBJECT_QUERY@
+GREP = @GREP@
+GTKSHARP_A11Y_CFLAGS = @GTKSHARP_A11Y_CFLAGS@
+GTKSHARP_A11Y_LIBS = @GTKSHARP_A11Y_LIBS@
+GTKSHARP_CFLAGS = @GTKSHARP_CFLAGS@
+GTKSHARP_LIBS = @GTKSHARP_LIBS@
+HELP_DIR = @HELP_DIR@
+ICONS_DIRECTORY = @ICONS_DIRECTORY@
+INSTALL = @INSTALL@
+INSTALL_DATA = @INSTALL_DATA@
+INSTALL_PROGRAM = @INSTALL_PROGRAM@
+INSTALL_SCRIPT = @INSTALL_SCRIPT@
+INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
+INSTOBJEXT = @INSTOBJEXT@
+INTLLIBS = @INTLLIBS@
+INTLTOOL_EXTRACT = @INTLTOOL_EXTRACT@
+INTLTOOL_MERGE = @INTLTOOL_MERGE@
+INTLTOOL_PERL = @INTLTOOL_PERL@
+INTLTOOL_UPDATE = @INTLTOOL_UPDATE@
+KEYRINGSHARP_CFLAGS = @KEYRINGSHARP_CFLAGS@
+KEYRINGSHARP_LIBS = @KEYRINGSHARP_LIBS@
+LCMS_CFLAGS = @LCMS_CFLAGS@
+LCMS_LIBS = @LCMS_LIBS@
+LD = @LD@
+LDFLAGS = @LDFLAGS@
+LIBEXIF_VERSION_CHECK_CFLAGS = @LIBEXIF_VERSION_CHECK_CFLAGS@
+LIBEXIF_VERSION_CHECK_LIBS = @LIBEXIF_VERSION_CHECK_LIBS@
+LIBJPEG = @LIBJPEG@
+LIBOBJS = @LIBOBJS@
+LIBS = @LIBS@
+LIBTOOL = @LIBTOOL@
+LIPO = @LIPO@
+LN_S = @LN_S@
+LTLIBOBJS = @LTLIBOBJS@
+MAINT = @MAINT@
+MAKEFLAGS = @MAKEFLAGS@
+MAKEINFO = @MAKEINFO@
+MCS = @MCS@
+MKDIR_P = @MKDIR_P@
+MKINSTALLDIRS = @MKINSTALLDIRS@
+MONO = @MONO@
+MONO_ADDINS_CFLAGS = @MONO_ADDINS_CFLAGS@
+MONO_ADDINS_GUI_CFLAGS = @MONO_ADDINS_GUI_CFLAGS@
+MONO_ADDINS_GUI_LIBS = @MONO_ADDINS_GUI_LIBS@
+MONO_ADDINS_LIBS = @MONO_ADDINS_LIBS@
+MONO_ADDINS_SETUP_CFLAGS = @MONO_ADDINS_SETUP_CFLAGS@
+MONO_ADDINS_SETUP_LIBS = @MONO_ADDINS_SETUP_LIBS@
+MONO_MODULE_CFLAGS = @MONO_MODULE_CFLAGS@
+MONO_MODULE_LIBS = @MONO_MODULE_LIBS@
+MSGFMT = @MSGFMT@
+MSGFMT_OPTS = @MSGFMT_OPTS@
+MSGMERGE = @MSGMERGE@
+NDESK_DBUS_CFLAGS = @NDESK_DBUS_CFLAGS@
+NDESK_DBUS_LIBS = @NDESK_DBUS_LIBS@
+NM = @NM@
+NMEDIT = @NMEDIT@
+NUNIT_CFLAGS = @NUNIT_CFLAGS@
+NUNIT_LIBS = @NUNIT_LIBS@
+OBJC = @OBJC@
+OBJDUMP = @OBJDUMP@
+OBJEXT = @OBJEXT@
+OMF_DIR = @OMF_DIR@
+OTOOL = @OTOOL@
+OTOOL64 = @OTOOL64@
+PACKAGE = @PACKAGE@
+PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
+PACKAGE_NAME = @PACKAGE_NAME@
+PACKAGE_STRING = @PACKAGE_STRING@
+PACKAGE_TARNAME = @PACKAGE_TARNAME@
+PACKAGE_URL = @PACKAGE_URL@
+PACKAGE_VERSION = @PACKAGE_VERSION@
+PATH_SEPARATOR = @PATH_SEPARATOR@
+PKG_CONFIG = @PKG_CONFIG@
+POFILES = @POFILES@
+POSUB = @POSUB@
+PO_IN_DATADIR_FALSE = @PO_IN_DATADIR_FALSE@
+PO_IN_DATADIR_TRUE = @PO_IN_DATADIR_TRUE@
+Q = @Q@
+RANLIB = @RANLIB@
+SED = @SED@
+SET_MAKE = @SET_MAKE@
+SHELL = @SHELL@
+STRIP = @STRIP@
+TURTLEDIR = @TURTLEDIR@
+UNIQUE_CFLAGS = @UNIQUE_CFLAGS@
+UNIQUE_LIBS = @UNIQUE_LIBS@
+USE_NLS = @USE_NLS@
+V = @V@
+VERSION = @VERSION@
+WARN_CFLAGS = @WARN_CFLAGS@
+XGETTEXT = @XGETTEXT@
+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_DUMPBIN = @ac_ct_DUMPBIN@
+am__include = @am__include@
+am__leading_dot = @am__leading_dot@
+am__quote = @am__quote@
+am__tar = @am__tar@
+am__untar = @am__untar@
+bindir = @bindir@
+build = @build@
+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@
+expanded_bindir = @expanded_bindir@
+expanded_datadir = @expanded_datadir@
+expanded_libdir = @expanded_libdir@
+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@
+lt_ECHO = @lt_ECHO@
+mandir = @mandir@
+mkdir_p = @mkdir_p@
+oldincludedir = @oldincludedir@
+pdfdir = @pdfdir@
+prefix = @prefix@
+program_transform_name = @program_transform_name@
+psdir = @psdir@
+sbindir = @sbindir@
+sharedstatedir = @sharedstatedir@
+shavedir = @shavedir@
+srcdir = @srcdir@
+sysconfdir = @sysconfdir@
+target_alias = @target_alias@
+top_build_prefix = @top_build_prefix@
+top_builddir = @top_builddir@
+top_srcdir = @top_srcdir@
+ASSEMBLY = FSpot.Core
+TARGET = library
+LINK = $(REF_FSPOT_CORE) $(am__append_1)
+SOURCES = \
+ BrowsableEventArgs.cs \
+ BrowsablePointer.cs \
+ BrowsablePointerChangedEventArgs.cs \
+ Category.cs \
+ DbItem.cs \
+ Delay.cs \
+ Tag.cs \
+ Global.cs \
+ IBrowsableItem.cs \
+ IBrowsableItemChanges.cs \
+ IBrowsableItemComparer.cs \
+ IBrowsableItemExtensions.cs \
+ IBrowsableItemVersion.cs \
+ IBrowsableItemVersionable.cs \
+ IBrowsableCollection.cs \
+ PhotoChanges.cs \
+ PhotosChanges.cs \
+ Roll.cs \
+ Defines.cs
+
+RESOURCES =
+
+# Initializers
+MONO_BASE_PATH =
+MONO_ADDINS_PATH =
+
+# Install Paths
+DEFAULT_INSTALL_DIR = $(pkglibdir)
+BACKENDS_INSTALL_DIR = $(DEFAULT_INSTALL_DIR)/Backends
+EXTENSIONS_INSTALL_DIR = $(DEFAULT_INSTALL_DIR)/Extensions
+DIR_DOCS = $(top_builddir)/docs
+DIR_EXTENSIONS = $(top_builddir)/extensions
+DIR_ICONS = $(top_builddir)/icons
+DIR_JPEGTRAN = $(top_builddir)/lib/libjpegtran
+DIR_LIBFSPOT = $(top_builddir)/lib/libfspot
+DIR_SEMWEB = $(top_builddir)/lib/semweb
+DIR_SRC = $(top_builddir)/src
+DIR_GIOSHARP = $(top_builddir)/lib/gio-sharp/gio
+DIR_GTKSHARPBEANS = $(top_builddir)/lib/gtk-sharp-beans
+DIR_UNIQUESHARP = $(top_builddir)/lib/unique-sharp/unique
+DIR_BIN = $(top_builddir)/bin
+
+# External libraries to link against, generated from configure
+LINK_SYSTEM = -r:System
+LINK_SYSTEMDATA = -r:System.Data
+LINK_SYSTEM_WEB = -r:System.Web
+LINK_MONO_POSIX = -r:Mono.Posix
+LINK_MONO_CAIRO = -r:Mono.Cairo
+LINK_MONO_SIMD = -r:Mono.Simd
+LINK_MONODATA = -r:Mono.Data
+LINK_MONO_DATA_SQLITECLIENT = -r:Mono.Data.SqliteClient
+LINK_ICSHARP_ZIP_LIB = -r:ICSharpCode.SharpZipLib
+LINK_KEYRING = $(KEYRINGSHARP_LIBS)
+LINK_GLIB = $(GLIBSHARP_LIBS)
+LINK_GTK = $(GTKSHARP_LIBS)
+LINK_GNOME = $(GNOME_SHARP_LIBS)
+LINK_GCONF = $(GCONF_SHARP_LIBS)
+LINK_GLADE = -pkg:glade-sharp-2.0
+LINK_FLICKRNET = -pkg:flickrnet
+LINK_DBUS = $(NDESK_DBUS_LIBS) $(NDESK_DBUS_GLIB_LIBS)
+LINK_DBUS_NO_GLIB = $(NDESK_DBUS_LIBS)
+LINK_MONO_ADDINS_DEPS = $(MONO_ADDINS_LIBS)
+LINK_MONO_ADDINS_SETUP_DEPS = $(MONO_ADDINS_SETUP_LIBS)
+LINK_MONO_ADDINS_GUI_DEPS = $(MONO_ADDINS_GUI_LIBS)
+
+# GIO
+REF_GIO =
+LINK_GIO = -r:$(DIR_GIOSHARP)/gio-sharp.dll
+LINK_GIO_DEPS = $(REF_GIO) $(LINK_GIO)
+
+# Gtk Beans
+REF_GTK_BEANS = $(LINK_GIO_DEPS)
+LINK_GTK_BEANS = -r:$(DIR_GTKSHARPBEANS)/gtk-sharp-beans.dll
+LINK_GTK_BEANS_DEPS = $(REF_GTK_BEANS) $(LINK_GTK_BEANS)
+
+# Uniqe
+REF_UNIQUE =
+LINK_UNIQUE = -r:$(DIR_UNIQUESHARP)/unique-sharp.dll
+LINK_UNIQUE_DEPS = $(REF_UNIQUE) $(LINK_UNIQUE)
+
+# Hyena
+REF_HYENA = $(LINK_SYSTEM) $(LINK_MONO_POSIX)
+LINK_HYENA = -r:$(DIR_BIN)/Hyena.dll
+LINK_HYENA_DEPS = $(REF_HYENA) $(LINK_HYENA)
+
+# Semweb
+REF_SEMWEB = $(LINK_SYSTEMDATA) $(LINK_HYENA_DEPS)
+LINK_SEMWEB = -r:$(DIR_BIN)/SemWeb.dll
+LINK_SEMWEB_DEPS = $(REF_SEMWEB) $(LINK_SEMWEB)
+
+# Hyena.Data.Sqlite
+REF_HYENA_DATA_SQLITE = $(LINK_SQLITE)
+LINK_HYENA_DATA_SQLITE = -r:$(DIR_BIN)/Hyena.Data.Sqlite.dll
+LINK_HYENA_DATA_SQLITE_DEPS = $(REF_HYENA_DATA_SQLITE) $(LINK_HYENA_DATA_SQLITE)
+
+# Hyena.Gui
+REF_HYENA_GUI = $(LINK_HYENA_DEPS)
+LINK_HYENA_GUI = -r:$(DIR_BIN)/Hyena.Gui.dll
+LINK_HENA_GUI_DEPS = $(REF_HYENA_GUI) $(LINK_HYENA_GUI)
+
+# FSpot.Cms
+REF_FSPOT_CMS = $(LINK_GTK)
+LINK_FSPOT_CMS = -r:$(DIR_BIN)/FSpot.Cms.dll
+LINK_FSPOT_CMS_DEPS = $(REF_FSPOT_CMS) $(LINK_FSPOT_CMS)
+
+# FSpot.Utils
+REF_FSPOT_UTILS = $(LINK_HYENA_DEPS) $(LINK_GTK) $(LINK_GIO) $(LINK_MONO_CAIRO)
+LINK_FSPOT_UTILS = -r:$(DIR_BIN)/FSpot.Utils.dll
+LINK_FSPOT_UTILS_DEPS = $(REF_FSPOT_UTILS) $(LINK_FSPOT_UTILS)
+
+# FSpot.Core
+REF_FSPOT_CORE = $(LINK_FSPOT_UTILS_DEPS) $(LINK_FSPOT_CMS_DEPS)
+LINK_FSPOT_CORE = -r:$(DIR_BIN)/FSpot.Core.dll
+LINK_FSPOT_CORE_DEPS = $(REF_FSPOT_CORE) $(LINK_FSPOT_CORE)
+
+# FSpot.Query
+REF_FSPOT_QUERY = $(LINK_FSPOT_CORE_DEPS)
+LINK_FSPOT_QUERY = -r:$(DIR_BIN)/FSpot.Query.dll
+LINK_FSPOT_QUERY_DEPS = $(REF_FSPOT_QUERY) $(LINK_FSPOT_QUERY)
+
+# FSpot.JobScheduler
+REF_FSPOT_JOB_SCHEDULER = $(LINK_HYENA_DEPS)
+LINK_FSPOT_JOB_SCHEDULER = -r:$(DIR_BIN)/FSpot.JobScheduler.dll
+LINK_FSPOT_JOB_SCHEDULER_DEPS = $(REF_FSPOT_JOB_SCHEDULER) $(LINK_FSPOT_JOB_SCHEDULER)
+
+# FSpot.Bling
+REF_FSPOT_BLING = $(LINK_GTK_BEANS_DEPS) $(LINK_GLIB)
+LINK_FSPOT_BLING = -r:$(DIR_BIN)/FSpot.Bling.dll
+LINK_FSPOT_BLING_DEPS = $(REF_FSPOT_BLING) $(LINK_FSPOT_BLING)
+
+# FSpot.Platform
+REF_FSPOT_PLATFORM = $(LINK_GCONF) $(LINK_GTK) $(LINK_FSPOT_CORE_DEPS) $(LINK_DBUS)
+LINK_FSPOT_PLATFORM = -r:$(DIR_BIN)/FSpot.Platform.dll
+LINK_FSPOT_PLATFORM_DEPS = $(REF_FSPOT_PLATFORM) $(LINK_FSPOT_PLATFORM)
+
+# FSpot.Widgets
+REF_FSPOT_WIDGETS = $(LINK_FSPOT_CORE_DEPS) $(LINK_FSPOT_BLING_DEPS)
+LINK_FSPOT_WIDGETS = -r:$(DIR_BIN)/FSpot.Widgets.dll
+LINK_FSPOT_WIDGETS_DEPS = $(REF_FSPOT_WIDGETS) $(LINK_FSPOT_WIDGETS)
+
+# FSpot (executable)
+REF_FSPOT = $(LINK_FSPOT_WIDGETS_DEPS) $(LINK_FSPOT_PLATFORM_DEPS) $(LINK_FSPOT_QUERY_DEPS) \
+ $(LINK_GLIB) $(LINK_MONO_ADDINS_DEPS) $(LINK_UNIQUE_DEPS) $(LINK_MONO_ADDINS_SETUP_DEPS) \
+ $(LINK_SEMWEB_DEPS) $(LINK_GLADE) $(LINK_MONODATA) $(LINK_MONO_DATA_SQLITECLIENT) \
+ $(LINK_MONO_ADDINS_GUI_DEPS) $(LINK_FSPOT_JOB_SCHEDULER_DEPS) $(LINK_ICSHARP_ZIP_LIB) \
+ $(LINK_GNOME)
+
+# FIXME: do not link executables
+LINK_FSPOT = -r:$(DIR_BIN)/f-spot.exe
+LINK_FSPOT_DEPS = $(REF_FSPOT) $(LINK_FSPOT)
+
+# Extensions
+REF_FSPOT_EXTENSION_BLACKOUTEDITOR = $(LINK_FSPOT_DEPS)
+REF_FSPOT_EXTENSION_BWEDITOR = $(LINK_FSPOT_DEPS) $(LINK_MONO_SIMD)
+REF_FSPOT_EXTENSION_FLIPEDITOR = $(LINK_FSPOT_DEPS)
+REF_FSPOT_EXTENSION_PIXELATEEDITOR = $(LINK_FSPOT_DEPS)
+REF_FSPOT_EXTENSION_RESIZEEDITOR = $(LINK_FSPOT_DEPS)
+REF_FSPOT_EXTENSION_CDEXPORT = $(LINK_FSPOT_DEPS)
+REF_FSPOT_EXTENSION_FACEBOOKEXPORT = $(LINK_FSPOT_DEPS) $(LINK_KEYRING)
+REF_FSPOT_EXTENSION_FLICKREXPORT = $(LINK_FSPOT_DEPS) $(LINK_FLICKRNET)
+REF_FSPOT_EXTENSION_FOLDEREXPORT = $(LINK_FSPOT_DEPS) $(LINK_SYSTEM_WEB)
+REF_FSPOT_EXTENSION_GALLERYEXPORT = $(LINK_FSPOT_DEPS)
+REF_MONO_GOOGLE = $(LINK_HYENA_DEPS)
+LINK_MONO_GOOGLE = -r:$(DIR_BIN)/Mono.Google.dll
+LINK_MONO_GOOGLE_DEPS = $(REF_MONO_GOOGLE) $(LINK_MONO_GOOGLE)
+REF_FSPOT_EXTENSION_PICASAWEBEXPORT = $(LINK_FSPOT_DEPS) $(LINK_MONO_GOOGLE) $(LINK_KEYRING)
+REF_SMUGMUGNET = $(LINK_FSPOT_DEPS)
+LINK_SMUGMUGNET = -r:$(DIR_BIN)/SmugMugNet.dll
+LINK_SMUGMUGNET_DEPS = $(REF_SMUGMUGNET) $(LINK_SMUGMUGNET)
+REF_FSPOT_EXTENSION_SMUGMUGEXPORT = $(LINK_SMUGMUGNET_DEPS) $(LINK_KEYRING)
+REF_MONO_TABBLO = $(LINK_HYENA_DEPS)
+LINK_MONO_TABBLO = -r:$(DIR_BIN)/Mono.Tabblo.dll
+LINK_MONO_TABBLO_DEPS = $(REF_MONO_TABBLO) $(LINK_MONO_TABBLO)
+REF_FSPOT_EXTENSION_TABBLOEXPORT = $(LINK_FSPOT_DEPS) $(LINK_KEYRING) $(LINK_MONO_TABBLO_DEPS)
+REF_FSPOT_EXTENSION_ZIPEXPORT = $(LINK_FSPOT_DEPS)
+REF_FSPOT_EXTENSION_CHANGEPHOTOPATH = $(LINK_FSPOT_DEPS)
+REF_FSPOT_EXTENSION_DEVELOPINUFRAW = $(LINK_FSPOT_DEPS)
+REF_FSPOT_EXTENSION_HASHJOB = $(LINK_FSPOT_DEPS)
+REF_FSPOT_EXTENSION_LIVEWEBGALLERY = $(LINK_FSPOT_DEPS)
+REF_FSPOT_EXTENSION_MERGEDB = $(LINK_FSPOT_DEPS)
+REF_FSPOT_EXTENSION_RAWPLUSJPEG = $(LINK_FSPOT_DEPS)
+REF_FSPOT_EXTENSION_RETROACTIVEROLL = $(LINK_FSPOT_DEPS)
+REF_FSPOT_EXTENSION_SCREENSAVERCONFIG = $(LINK_FSPOT_DEPS)
+REF_FSPOT_EXTENSION_COVERTRANSITION = $(LINK_FSPOT_DEPS)
+
+# Cute hack to replace a space with something
+colon := :
+empty :=
+space := $(empty) $(empty)
+
+# Build path to allow running uninstalled
+RUN_PATH = $(subst $(space),$(colon), $(MONO_BASE_PATH))
+UNIQUE_FILTER_PIPE = tr [:space:] \\n | sort | uniq
+BUILD_DATA_DIR = $(top_builddir)/bin/share/$(PACKAGE)
+
+# Since all other attempts failed, we currently go this way:
+# This code adds the file specified in ASSEMBLY_INFO_SOURCE to SOURCES_BUILD.
+# If no such file is specified, the default AssemblyInfo.cs is used.
+ASSEMBLY_INFO_SOURCE_REAL = \
+ $(shell if [ "$(ASSEMBLY_INFO_SOURCE)" ]; \
+ then \
+ echo "$(addprefix $(srcdir)/, $(ASSEMBLY_INFO_SOURCE))"; \
+ else \
+ echo "$(top_srcdir)/src/AssemblyInfo.cs"; \
+ fi)
+
+SOURCES_BUILD = $(addprefix $(srcdir)/, $(SOURCES)) \
+ $(ASSEMBLY_INFO_SOURCE_REAL)
+RESOURCES_EXPANDED = $(addprefix $(srcdir)/, $(RESOURCES))
+RESOURCES_BUILD = $(foreach resource, $(RESOURCES_EXPANDED), \
+ -resource:$(resource),$(notdir $(resource)))
+
+INSTALL_ICONS = $(top_srcdir)/build/private-icon-theme-installer "$(mkinstalldirs)" "$(INSTALL_DATA)"
+THEME_ICONS_SOURCE = $(wildcard $(srcdir)/ThemeIcons/*/*/*.png) $(wildcard $(srcdir)/ThemeIcons/scalable/*/*.svg)
+THEME_ICONS_RELATIVE = $(subst $(srcdir)/ThemeIcons/, , $(THEME_ICONS_SOURCE))
+ASSEMBLY_EXTENSION = $(strip $(patsubst library, dll, $(TARGET)))
+ASSEMBLY_FILE = $(top_builddir)/bin/$(ASSEMBLY).$(ASSEMBLY_EXTENSION)
+INSTALL_DIR_RESOLVED = $(firstword $(subst , $(DEFAULT_INSTALL_DIR), $(INSTALL_DIR)))
+ at ENABLE_TESTS_TRUE@ENABLE_TESTS_FLAG = "-define:ENABLE_TESTS"
+ at ENABLE_ATK_TRUE@ENABLE_ATK_FLAG = "-define:ENABLE_ATK"
+FILTERED_LINK = $(shell echo "$(LINK)" | $(UNIQUE_FILTER_PIPE))
+DEP_LINK = $(shell echo "$(LINK)" | $(UNIQUE_FILTER_PIPE) | sed s,-r:,,g | grep '$(top_builddir)/bin/')
+OUTPUT_FILES = \
+ $(ASSEMBLY_FILE) \
+ $(ASSEMBLY_FILE).mdb
+
+moduledir = $(INSTALL_DIR_RESOLVED)
+module_SCRIPTS = $(OUTPUT_FILES) FSpot.Core.dll.config
+EXTRA_DIST = $(SOURCES_BUILD) $(RESOURCES_EXPANDED) \
+ $(THEME_ICONS_SOURCE) FSpot.Core.dll.config
+CLEANFILES = $(OUTPUT_FILES) $(ASSEMBLY_FILE).config
+DISTCLEANFILES = *.pidb
+MAINTAINERCLEANFILES = Makefile.in
+all: all-am
+
+.SUFFIXES:
+$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(top_srcdir)/build/build.mk $(top_srcdir)/build/build.environment.mk $(top_srcdir)/build/build.rules.mk $(am__configure_deps)
+ @for dep in $?; do \
+ case '$(am__configure_deps)' in \
+ *$$dep*) \
+ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \
+ && { if test -f $@; then exit 0; else break; fi; }; \
+ exit 1;; \
+ esac; \
+ done; \
+ echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign src/Core/Makefile'; \
+ $(am__cd) $(top_srcdir) && \
+ $(AUTOMAKE) --foreign src/Core/Makefile
+.PRECIOUS: Makefile
+Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
+ @case '$?' in \
+ *config.status*) \
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \
+ *) \
+ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \
+ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \
+ esac;
+
+$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+
+$(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps)
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps)
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(am__aclocal_m4_deps):
+Defines.cs: $(top_builddir)/config.status $(srcdir)/Defines.cs.in
+ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@
+FSpot.Core.dll.config: $(top_builddir)/config.status $(srcdir)/FSpot.Core.dll.config.in
+ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@
+install-moduleSCRIPTS: $(module_SCRIPTS)
+ @$(NORMAL_INSTALL)
+ test -z "$(moduledir)" || $(MKDIR_P) "$(DESTDIR)$(moduledir)"
+ @list='$(module_SCRIPTS)'; test -n "$(moduledir)" || list=; \
+ for p in $$list; do \
+ if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \
+ if test -f "$$d$$p"; then echo "$$d$$p"; echo "$$p"; else :; fi; \
+ done | \
+ sed -e 'p;s,.*/,,;n' \
+ -e 'h;s|.*|.|' \
+ -e 'p;x;s,.*/,,;$(transform)' | sed 'N;N;N;s,\n, ,g' | \
+ $(AWK) 'BEGIN { files["."] = ""; dirs["."] = 1; } \
+ { d=$$3; if (dirs[d] != 1) { print "d", d; dirs[d] = 1 } \
+ if ($$2 == $$4) { files[d] = files[d] " " $$1; \
+ if (++n[d] == $(am__install_max)) { \
+ print "f", d, files[d]; n[d] = 0; files[d] = "" } } \
+ else { print "f", d "/" $$4, $$1 } } \
+ END { for (d in files) print "f", d, files[d] }' | \
+ while read type dir files; do \
+ if test "$$dir" = .; then dir=; else dir=/$$dir; fi; \
+ test -z "$$files" || { \
+ echo " $(INSTALL_SCRIPT) $$files '$(DESTDIR)$(moduledir)$$dir'"; \
+ $(INSTALL_SCRIPT) $$files "$(DESTDIR)$(moduledir)$$dir" || exit $$?; \
+ } \
+ ; done
+
+uninstall-moduleSCRIPTS:
+ @$(NORMAL_UNINSTALL)
+ @list='$(module_SCRIPTS)'; test -n "$(moduledir)" || exit 0; \
+ files=`for p in $$list; do echo "$$p"; done | \
+ sed -e 's,.*/,,;$(transform)'`; \
+ test -n "$$list" || exit 0; \
+ echo " ( cd '$(DESTDIR)$(moduledir)' && rm -f" $$files ")"; \
+ cd "$(DESTDIR)$(moduledir)" && rm -f $$files
+
+mostlyclean-libtool:
+ -rm -f *.lo
+
+clean-libtool:
+ -rm -rf .libs _libs
+tags: TAGS
+TAGS:
+
+ctags: CTAGS
+CTAGS:
+
+
+distdir: $(DISTFILES)
+ @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; \
+ if test -d $$d/$$file; then \
+ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \
+ if test -d "$(distdir)/$$file"; then \
+ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
+ fi; \
+ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
+ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \
+ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
+ fi; \
+ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \
+ else \
+ test -f "$(distdir)/$$file" \
+ || cp -p $$d/$$file "$(distdir)/$$file" \
+ || exit 1; \
+ fi; \
+ done
+check-am: all-am
+check: check-am
+all-am: Makefile $(SCRIPTS)
+installdirs:
+ for dir in "$(DESTDIR)$(moduledir)"; do \
+ test -z "$$dir" || $(MKDIR_P) "$$dir"; \
+ done
+install: install-am
+install-exec: install-exec-am
+install-data: install-data-am
+uninstall: uninstall-am
+
+install-am: all-am
+ @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
+
+installcheck: installcheck-am
+install-strip:
+ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+ `test -z '$(STRIP)' || \
+ echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install
+mostlyclean-generic:
+
+clean-generic:
+ -test -z "$(CLEANFILES)" || rm -f $(CLEANFILES)
+
+distclean-generic:
+ -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
+ -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES)
+ -test -z "$(DISTCLEANFILES)" || rm -f $(DISTCLEANFILES)
+
+maintainer-clean-generic:
+ @echo "This command is intended for maintainers to use"
+ @echo "it deletes files that may require special tools to rebuild."
+ -test -z "$(MAINTAINERCLEANFILES)" || rm -f $(MAINTAINERCLEANFILES)
+clean: clean-am
+
+clean-am: clean-generic clean-libtool mostlyclean-am
+
+distclean: distclean-am
+ -rm -f Makefile
+distclean-am: clean-am distclean-generic
+
+dvi: dvi-am
+
+dvi-am:
+
+html: html-am
+
+html-am:
+
+info: info-am
+
+info-am:
+
+install-data-am: install-data-local install-moduleSCRIPTS
+
+install-dvi: install-dvi-am
+
+install-dvi-am:
+
+install-exec-am:
+
+install-html: install-html-am
+
+install-html-am:
+
+install-info: install-info-am
+
+install-info-am:
+
+install-man:
+
+install-pdf: install-pdf-am
+
+install-pdf-am:
+
+install-ps: install-ps-am
+
+install-ps-am:
+
+installcheck-am:
+
+maintainer-clean: maintainer-clean-am
+ -rm -f Makefile
+maintainer-clean-am: distclean-am maintainer-clean-generic
+
+mostlyclean: mostlyclean-am
+
+mostlyclean-am: mostlyclean-generic mostlyclean-libtool
+
+pdf: pdf-am
+
+pdf-am:
+
+ps: ps-am
+
+ps-am:
+
+uninstall-am: uninstall-local uninstall-moduleSCRIPTS
+
+.MAKE: install-am install-strip
+
+.PHONY: all all-am check check-am clean clean-generic clean-libtool \
+ distclean distclean-generic distclean-libtool distdir dvi \
+ dvi-am html html-am info info-am install install-am \
+ install-data install-data-am install-data-local install-dvi \
+ install-dvi-am install-exec install-exec-am install-html \
+ install-html-am install-info install-info-am install-man \
+ install-moduleSCRIPTS install-pdf install-pdf-am install-ps \
+ install-ps-am install-strip installcheck installcheck-am \
+ installdirs maintainer-clean maintainer-clean-generic \
+ mostlyclean mostlyclean-generic mostlyclean-libtool pdf pdf-am \
+ ps ps-am uninstall uninstall-am uninstall-local \
+ uninstall-moduleSCRIPTS
+
+
+all: $(ASSEMBLY_FILE) theme-icons
+
+run:
+ @pushd $(top_builddir); \
+ make run; \
+ popd;
+
+# uncommented for now.
+# tests are currently excuted from Makefile in $(top_builddir)
+#test:
+# @pushd $(top_builddir)/tests; \
+# make $(ASSEMBLY); \
+# popd;
+
+build-debug:
+ @echo $(DEP_LINK)
+
+$(ASSEMBLY_FILE).mdb: $(ASSEMBLY_FILE)
+
+$(ASSEMBLY_FILE): $(SOURCES_BUILD) $(RESOURCES_EXPANDED) $(DEP_LINK)
+ @mkdir -p $(top_builddir)/bin
+ @if [ ! "x$(ENABLE_RELEASE)" = "xyes" ]; then \
+ $(top_srcdir)/build/dll-map-makefile-verifier $(srcdir)/Makefile.am $(srcdir)/$(notdir $@.config) && \
+ $(MONO) $(top_builddir)/build/dll-map-verifier.exe $(srcdir)/$(notdir $@.config) -iwinmm -ilibbanshee -ilibbnpx11 -ilibc -ilibc.so.6 -iintl -ilibmtp.dll -ilibigemacintegration.dylib -iCFRelease $(SOURCES_BUILD); \
+ fi;
+ $(MCS) \
+ $(GMCS_FLAGS) \
+ $(ASSEMBLY_BUILD_FLAGS) \
+ -nowarn:0278 -nowarn:0078 $$warn \
+ -define:HAVE_GTK_2_10 -define:NET_2_0 \
+ -debug -target:$(TARGET) -out:$@ \
+ $(BUILD_DEFINES) $(ENABLE_TESTS_FLAG) $(ENABLE_ATK_FLAG) \
+ $(FILTERED_LINK) $(RESOURCES_BUILD) $(SOURCES_BUILD)
+ @if [ -e $(srcdir)/$(notdir $@.config) ]; then \
+ cp $(srcdir)/$(notdir $@.config) $(top_builddir)/bin; \
+ fi;
+ @if [ ! -z "$(EXTRA_BUNDLE)" ]; then \
+ cp $(EXTRA_BUNDLE) $(top_builddir)/bin; \
+ fi;
+
+theme-icons: $(THEME_ICONS_SOURCE)
+ @$(INSTALL_ICONS) -il "$(BUILD_DATA_DIR)" "$(srcdir)" $(THEME_ICONS_RELATIVE)
+
+install-data-local: $(THEME_ICONS_SOURCE)
+ @$(INSTALL_ICONS) -i "$(DESTDIR)$(pkgdatadir)" "$(srcdir)" $(THEME_ICONS_RELATIVE)
+
+uninstall-local: $(THEME_ICONS_SOURCE)
+ @$(INSTALL_ICONS) -u "$(DESTDIR)$(pkgdatadir)" "$(srcdir)" $(THEME_ICONS_RELATIVE)
+
+# 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.
+.NOEXPORT:
diff --git a/src/Core/Photo.cs b/src/Core/Photo.cs
index 3f595cd..b5e72c2 100644
--- a/src/Core/Photo.cs
+++ b/src/Core/Photo.cs
@@ -9,8 +9,11 @@
* This is free software. See COPYING for details.
*/
+using Hyena;
+
using System;
using System.IO;
+using System.Linq;
using System.Collections;
using System.Collections.Generic;
@@ -21,101 +24,8 @@ using FSpot.Platform;
namespace FSpot
{
- public class Photo : DbItem, IComparable, IBrowsableItem {
- // IComparable
- public int CompareTo (object obj) {
- if (this.GetType () == obj.GetType ()) {
- return Compare (this, (Photo)obj);
- } else if (obj is DateTime) {
- return this.time.CompareTo ((DateTime)obj);
- } else {
- throw new Exception ("Object must be of type Photo");
- }
- }
-
- public int CompareTo (Photo photo)
- {
- return Compare (this, photo);
- }
+ public class Photo : DbItem, IComparable, IBrowsableItem, IBrowsableItemVersionable {
- public static int Compare (Photo photo1, Photo photo2)
- {
- int result = photo1.Id.CompareTo (photo2.Id);
-
- if (result == 0)
- return 0;
- else
- result = CompareDate (photo1, photo2);
-
- if (result == 0)
- result = CompareCurrentDir (photo1, photo2);
-
- if (result == 0)
- result = CompareName (photo1, photo2);
-
- if (result == 0)
- result = photo1.Id.CompareTo (photo2.Id);
-
- return result;
- }
-
- private static int CompareDate (Photo photo1, Photo photo2)
- {
- return DateTime.Compare (photo1.time, photo2.time);
- }
-
- private static int CompareCurrentDir (Photo photo1, Photo photo2)
- {
- return string.Compare (photo1.DirectoryPath, photo2.DirectoryPath);
- }
-
- private static int CompareName (Photo photo1, Photo photo2)
- {
- return string.Compare (photo1.Name, photo2.Name);
- }
-
- public class CompareDateName : IComparer<IBrowsableItem>
- {
- public int Compare (IBrowsableItem obj1, IBrowsableItem obj2)
- {
- Photo p1 = (Photo)obj1;
- Photo p2 = (Photo)obj2;
-
- int result = Photo.CompareDate (p1, p2);
-
- if (result == 0)
- result = CompareName (p1, p2);
-
- return result;
- }
- }
-
- public class CompareDirectory : IComparer
- {
- public int Compare (object obj1, object obj2)
- {
- Photo p1 = (Photo)obj1;
- Photo p2 = (Photo)obj2;
-
- int result = Photo.CompareCurrentDir (p1, p2);
-
- if (result == 0)
- result = CompareName (p1, p2);
-
- return result;
- }
- }
-
- public class RandomSort : IComparer
- {
- Random random = new Random ();
-
- public int Compare (object obj1, object obj2)
- {
- return random.Next (-5, 5);
- }
- }
-
PhotoChanges changes = new PhotoChanges ();
public PhotoChanges Changes {
get{ return changes; }
@@ -142,17 +52,6 @@ namespace FSpot
get { return Uri.UnescapeDataString (System.IO.Path.GetFileName (VersionUri (OriginalVersionId).AbsolutePath)); }
}
- //This property no longer keeps a 'directory' path, but the logical container for the image, like:
- // file:///home/bob/Photos/2007/08/23 or
- // http://www.google.com/logos
- [Obsolete ("MARKED FOR REMOVAL. no longer makes sense with versions in different Directories. Any way to get rid of this ?")]
- public string DirectoryPath {
- get {
- System.Uri uri = VersionUri (OriginalVersionId);
- return uri.Scheme + "://" + uri.Host + System.IO.Path.GetDirectoryName (uri.AbsolutePath);
- }
- }
-
private ArrayList tags;
public Tag [] Tags {
get {
@@ -168,7 +67,7 @@ namespace FSpot
get { return loaded; }
set {
if (value) {
- if (DefaultVersionId != OriginalVersionId && !Versions.ContainsKey (DefaultVersionId))
+ if (DefaultVersionId != OriginalVersionId && !versions.ContainsKey (DefaultVersionId))
DefaultVersionId = OriginalVersionId;
}
loaded = value;
@@ -208,44 +107,31 @@ namespace FSpot
}
}
- private string md5_sum;
- public string MD5Sum {
- get { return md5_sum; }
- set {
- if (md5_sum == value)
- return;
-
- md5_sum = value;
- changes.MD5SumChanged = true;
- }
- }
-
// Version management
public const int OriginalVersionId = 1;
private uint highest_version_id;
- private Dictionary<uint, PhotoVersion> versions;
- private Dictionary<uint, PhotoVersion> Versions {
+ private Dictionary<uint, PhotoVersion> versions = new Dictionary<uint, PhotoVersion> ();
+ public IEnumerable<IBrowsableItemVersion> Versions {
get {
- if (versions == null)
- versions = new Dictionary<uint, PhotoVersion> ();
- return versions;
+ foreach (var version in versions.Values)
+ yield return version;
}
}
-
+
public uint [] VersionIds {
get {
if (versions == null)
return new uint [0];
-
+
uint [] ids = new uint [versions.Count];
versions.Keys.CopyTo (ids, 0);
Array.Sort (ids);
return ids;
}
}
-
- public IBrowsableItem GetVersion (uint version_id)
+
+ public PhotoVersion GetVersion (uint version_id)
{
if (versions == null)
return null;
@@ -266,71 +152,64 @@ namespace FSpot
// This doesn't check if a version of that name already exists,
// it's supposed to be used only within the Photo and PhotoStore classes.
- internal void AddVersionUnsafely (uint version_id, System.Uri uri, string md5_sum, string name, bool is_protected)
+ internal void AddVersionUnsafely (uint version_id, SafeUri base_uri, string filename, string import_md5, string name, bool is_protected)
{
- Versions [version_id] = new PhotoVersion (this, version_id, uri, md5_sum, name, is_protected);
+ versions [version_id] = new PhotoVersion (this, version_id, base_uri, filename, import_md5, name, is_protected);
highest_version_id = Math.Max (version_id, highest_version_id);
changes.AddVersion (version_id);
}
- public uint AddVersion (System.Uri uri, string name)
+ public uint AddVersion (SafeUri base_uri, string filename, string name)
{
- return AddVersion (uri, name, false);
+ return AddVersion (base_uri, filename, name, false);
}
- public uint AddVersion (System.Uri uri, string name, bool is_protected)
+ public uint AddVersion (SafeUri base_uri, string filename, string name, bool is_protected)
{
if (VersionNameExists (name))
throw new ApplicationException ("A version with that name already exists");
highest_version_id ++;
- string md5_sum = GenerateMD5 (uri);
+ string import_md5 = String.Empty; // Modified version
- Versions [highest_version_id] = new PhotoVersion (this, highest_version_id, uri, md5_sum, name, is_protected);
+ versions [highest_version_id] = new PhotoVersion (this, highest_version_id, base_uri, filename, import_md5, name, is_protected);
changes.AddVersion (highest_version_id);
return highest_version_id;
}
//FIXME: store versions next to originals. will crash on ro locations.
- private System.Uri GetUriForVersionName (string version_name, string extension)
+ private string GetFilenameForVersionName (string version_name, string extension)
{
string name_without_extension = System.IO.Path.GetFileNameWithoutExtension (Name);
- return new System.Uri (System.IO.Path.Combine (DirectoryPath, name_without_extension
- + " (" + UriUtils.EscapeString (version_name, true, true, true) + ")" + extension));
+ return name_without_extension + " (" +
+ UriUtils.EscapeString (version_name, true, true, true)
+ + ")" + extension;
}
public bool VersionNameExists (string version_name)
{
- foreach (PhotoVersion v in Versions.Values)
- if (v.Name == version_name)
- return true;
-
- return false;
+ return Versions.Where ((v) => v.Name == version_name).Any ();
}
- public System.Uri VersionUri (uint version_id)
+ public SafeUri VersionUri (uint version_id)
{
- if (!Versions.ContainsKey (version_id))
+ if (!versions.ContainsKey (version_id))
return null;
- PhotoVersion v = Versions [version_id];
+ PhotoVersion v = versions [version_id];
if (v != null)
return v.Uri;
return null;
}
- public System.Uri DefaultVersionUri {
- get { return VersionUri (DefaultVersionId); }
- }
-
- public PhotoVersion DefaultVersion {
+ public IBrowsableItemVersion DefaultVersion {
get {
- if (!Versions.ContainsKey (DefaultVersionId))
- return null;
- return Versions [DefaultVersionId];
+ if (!versions.ContainsKey (DefaultVersionId))
+ throw new Exception ("Something is horribly wrong, this should never happen: no default version!");
+ return versions [DefaultVersionId];
}
}
@@ -338,7 +217,7 @@ namespace FSpot
public uint SaveVersion (Gdk.Pixbuf buffer, bool create_version)
{
uint version = DefaultVersionId;
- using (ImageFile img = ImageFile.Create (DefaultVersionUri)) {
+ using (ImageFile img = ImageFile.Create (DefaultVersion.Uri)) {
// Always create a version if the source is not a jpeg for now.
create_version = create_version || !(img is FSpot.JpegFile);
@@ -349,16 +228,15 @@ namespace FSpot
version = CreateDefaultModifiedVersion (DefaultVersionId, false);
try {
- Uri versionUri = VersionUri (version);
+ var versionUri = VersionUri (version);
using (Stream stream = System.IO.File.OpenWrite (versionUri.LocalPath)) {
img.Save (buffer, stream);
}
- (GetVersion (version) as PhotoVersion).MD5Sum = GenerateMD5 (VersionUri (version));
- FSpot.ThumbnailGenerator.Create (versionUri).Dispose ();
+ (GetVersion (version) as PhotoVersion).ImportMD5 = GenerateMD5 (VersionUri (version));
DefaultVersionId = version;
} catch (System.Exception e) {
- System.Console.WriteLine (e);
+ Log.Exception (e);
if (create_version)
DeleteVersion (version);
@@ -384,7 +262,7 @@ namespace FSpot
if (version_id == OriginalVersionId && !remove_original)
throw new Exception ("Cannot delete original version");
- System.Uri uri = VersionUri (version_id);
+ SafeUri uri = VersionUri (version_id);
if (!keep_file) {
GLib.File file = GLib.FileFactory.NewForUri (uri);
@@ -396,29 +274,23 @@ namespace FSpot
file.Delete ();
}
try {
- ThumbnailFactory.DeleteThumbnail (uri);
+ XdgThumbnailSpec.RemoveThumbnail (uri);
} catch {
//ignore an error here we don't really care.
}
}
- Versions.Remove (version_id);
+ versions.Remove (version_id);
changes.RemoveVersion (version_id);
- do {
- version_id --;
- if (Versions.ContainsKey (version_id)) {
+ for (version_id = highest_version_id; version_id >= OriginalVersionId; version_id--) {
+ if (versions.ContainsKey (version_id)) {
DefaultVersionId = version_id;
break;
}
- } while (version_id > OriginalVersionId);
+ }
}
- public uint CreateProtectedVersion (string name, uint base_version_id, bool create)
- {
- return CreateVersion (name, null, base_version_id, create, true);
- }
-
public uint CreateVersion (string name, uint base_version_id, bool create)
{
return CreateVersion (name, null, base_version_id, create, false);
@@ -432,9 +304,11 @@ namespace FSpot
private uint CreateVersion (string name, string extension, uint base_version_id, bool create, bool is_protected)
{
extension = extension ?? System.IO.Path.GetExtension (VersionUri (base_version_id).AbsolutePath);
- System.Uri new_uri = GetUriForVersionName (name, extension);
- System.Uri original_uri = VersionUri (base_version_id);
- string md5_sum = MD5Sum;
+ SafeUri new_base_uri = DefaultVersion.BaseUri;
+ string filename = GetFilenameForVersionName (name, extension);
+ SafeUri original_uri = VersionUri (base_version_id);
+ SafeUri new_uri = new_base_uri.Append (filename);
+ string import_md5 = DefaultVersion.ImportMD5;
if (VersionNameExists (name))
throw new Exception ("This version name already exists");
@@ -442,17 +316,15 @@ namespace FSpot
if (create) {
GLib.File destination = GLib.FileFactory.NewForUri (new_uri);
if (destination.Exists)
- throw new Exception (String.Format ("An object at this uri {0} already exists", new_uri.ToString ()));
+ throw new Exception (String.Format ("An object at this uri {0} already exists", new_uri));
//FIXME. or better, fix the copy api !
GLib.File source = GLib.FileFactory.NewForUri (original_uri);
source.Copy (destination, GLib.FileCopyFlags.None, null, null);
-
- FSpot.ThumbnailGenerator.Create (new_uri).Dispose ();
}
highest_version_id ++;
- Versions [highest_version_id] = new PhotoVersion (this, highest_version_id, new_uri, md5_sum, name, is_protected);
+ versions [highest_version_id] = new PhotoVersion (this, highest_version_id, new_base_uri, filename, import_md5, name, is_protected);
changes.AddVersion (highest_version_id);
@@ -466,22 +338,25 @@ namespace FSpot
public uint CreateReparentedVersion (PhotoVersion version, bool is_protected)
{
- int num = 0;
- while (true) {
- num++;
+ // Try to derive version name from its filename
+ string filename = Uri.UnescapeDataString (Path.GetFileNameWithoutExtension (version.Uri.AbsolutePath));
+ string parent_filename = Path.GetFileNameWithoutExtension (Name);
+ string name = null;
+ if (filename.StartsWith (parent_filename))
+ name = filename.Substring (parent_filename.Length).Replace ("(", "").Replace (")", "").Replace ("_", " "). Trim();
+
+ if (String.IsNullOrEmpty (name)) {
// Note for translators: Reparented is a picture becoming a version of another one
- string name = (num == 1) ? Catalog.GetString ("Reparented") : String.Format (Catalog.GetString( "Reparented ({0})"), num);
- name = String.Format (name, num);
- if (VersionNameExists (name))
- continue;
-
- highest_version_id ++;
- Versions [highest_version_id] = new PhotoVersion (this, highest_version_id, version.Uri, version.MD5Sum, name, is_protected);
+ string rep = name = Catalog.GetString ("Reparented");
+ for (int num = 1; VersionNameExists (name); num++)
+ name = String.Format (rep + " ({0})", num);
+ }
+ highest_version_id ++;
+ versions [highest_version_id] = new PhotoVersion (this, highest_version_id, version.BaseUri, version.Filename, version.ImportMD5, name, is_protected);
- changes.AddVersion (highest_version_id);
+ changes.AddVersion (highest_version_id);
- return highest_version_id;
- }
+ return highest_version_id;
}
public uint CreateDefaultModifiedVersion (uint base_version_id, bool create_file)
@@ -493,7 +368,9 @@ namespace FSpot
"Modified ({0})",
num);
name = String.Format (name, num);
- System.Uri uri = GetUriForVersionName (name, System.IO.Path.GetExtension (VersionUri(base_version_id).GetFilename()));
+ //SafeUri uri = GetUriForVersionName (name, System.IO.Path.GetExtension (VersionUri(base_version_id).GetFilename()));
+ string filename = GetFilenameForVersionName (name, System.IO.Path.GetExtension (versions[base_version_id].Filename));
+ SafeUri uri = DefaultVersion.BaseUri.Append (filename);
GLib.File file = GLib.FileFactory.NewForUri (uri);
if (! VersionNameExists (name) && ! file.Exists)
@@ -513,7 +390,8 @@ namespace FSpot
(num == 1) ? Catalog.GetString ("Modified in {1}") : Catalog.GetString ("Modified in {1} ({0})"),
num, name);
- System.Uri uri = GetUriForVersionName (final_name, System.IO.Path.GetExtension (VersionUri(base_version_id).GetFilename()));
+ string filename = GetFilenameForVersionName (name, System.IO.Path.GetExtension (versions[base_version_id].Filename));
+ SafeUri uri = DefaultVersion.BaseUri.Append (filename);
GLib.File file = GLib.FileFactory.NewForUri (uri);
if (! VersionNameExists (final_name) && ! file.Exists)
@@ -543,7 +421,14 @@ namespace FSpot
// File.Move (old_path, new_path);
// PhotoStore.MoveThumbnail (old_path, new_path);
}
-
+
+ public void CopyAttributesFrom (Photo that)
+ {
+ Time = that.Time;
+ Description = that.Description;
+ Rating = that.Rating;
+ AddTag (that.Tags);
+ }
// Tag management.
@@ -564,7 +449,7 @@ namespace FSpot
AddTagUnsafely (tag);
}
- public void AddTag (Tag []taglist)
+ public void AddTag (IEnumerable<Tag> taglist)
{
/*
* FIXME need a better naming convention here, perhaps just
@@ -609,66 +494,55 @@ namespace FSpot
return tags.Contains (tag);
}
- //
- // MD5 Calculator
- //
- private static System.Security.Cryptography.MD5 md5_generator;
-
- private static System.Security.Cryptography.MD5 MD5Generator {
- get {
- if (md5_generator == null)
- md5_generator = new System.Security.Cryptography.MD5CryptoServiceProvider ();
-
- return md5_generator;
- }
- }
-
- private static IDictionary<System.Uri, string> md5_cache = new Dictionary<System.Uri, string> ();
+ private static IDictionary<SafeUri, string> md5_cache = new Dictionary<SafeUri, string> ();
public static void ResetMD5Cache () {
if (md5_cache != null)
md5_cache.Clear ();
}
- public static string GenerateMD5 (System.Uri uri)
+ public static string GenerateMD5 (SafeUri uri)
{
- try {
- if (md5_cache.ContainsKey (uri))
- return md5_cache [uri];
-
- using (Gdk.Pixbuf pixbuf = ThumbnailGenerator.Create (uri))
- {
- byte[] serialized = GdkUtils.Serialize (pixbuf);
- byte[] md5 = MD5Generator.ComputeHash (serialized);
- string md5_string = Convert.ToBase64String (md5);
-
- md5_cache.Add (uri, md5_string);
- return md5_string;
- }
- } catch (Exception e) {
- Log.DebugException (String.Format ("Failed to create MD5Sum for Uri: {0}\n", uri), e);
- }
-
- return string.Empty;
+ var file = GLib.FileFactory.NewForUri (uri);
+ var stream = new GLib.GioStream (file.Read (null));
+ var hash = CryptoUtil.Md5EncodeStream (stream);
+ stream.Close ();
+ return hash;
}
-
// Constructor
- public Photo (uint id, long unix_time, System.Uri uri, string md5_sum)
+ public Photo (uint id, long unix_time)
: base (id)
{
- if (uri == null)
- throw new System.ArgumentNullException ("uri");
-
time = DbUtils.DateTimeFromUnixTime (unix_time);
description = String.Empty;
rating = 0;
- this.md5_sum = md5_sum;
-
- // Note that the original version is never stored in the photo_versions table in the
- // database.
- AddVersionUnsafely (OriginalVersionId, uri, md5_sum, Catalog.GetString ("Original"), true);
}
+
+#region IComparable implementation
+
+ // IComparable
+ public int CompareTo (object obj) {
+ if (this.GetType () == obj.GetType ()) {
+ return this.Compare((Photo)obj);
+ } else if (obj is DateTime) {
+ return this.time.CompareTo ((DateTime)obj);
+ } else {
+ throw new Exception ("Object must be of type Photo");
+ }
+ }
+
+ public int CompareTo (Photo photo)
+ {
+ int result = Id.CompareTo (photo.Id);
+
+ if (result == 0)
+ return 0;
+ else
+ return (this as IBrowsableItem).Compare (photo);
+ }
+
+#endregion
}
}
diff --git a/src/Core/PhotoVersion.cs b/src/Core/PhotoVersion.cs
index 831be49..0725b93 100644
--- a/src/Core/PhotoVersion.cs
+++ b/src/Core/PhotoVersion.cs
@@ -10,76 +10,36 @@
* This is free software. See COPYING for details.
*/
+using Hyena;
+
namespace FSpot
{
- public class PhotoVersion : FSpot.IBrowsableItem
- {
- Photo photo;
- uint version_id;
- System.Uri uri;
- string md5_sum;
- string name;
- bool is_protected;
-
- public System.DateTime Time {
- get { return photo.Time; }
- }
-
- public Tag [] Tags {
- get { return photo.Tags; }
- }
-
- public System.Uri DefaultVersionUri {
- get { return uri; }
- }
-
- public string Description {
- get { return photo.Description; }
- }
-
- public string Name {
- get { return name; }
- set { name = value; }
- }
-
- public Photo Photo {
- get { return photo; }
- }
-
- public System.Uri Uri {
- get { return uri; }
- set {
- if (value == null)
- throw new System.ArgumentNullException ("uri");
- uri = value;
- }
- }
+ public class PhotoVersion : IBrowsableItemVersion
+ {
+ public string Name { get; set; }
+ public IBrowsableItem Photo { get; private set; }
+ public SafeUri BaseUri { get; set; }
+ public string Filename { get; set; }
+ public SafeUri Uri {
+ get { return BaseUri.Append (Filename); }
+ set {
+ BaseUri = value.GetBaseUri ();
+ Filename = value.GetFilename ();
+ }
+ }
+ public string ImportMD5 { get; set; }
+ public uint VersionId { get; private set; }
+ public bool IsProtected { get; private set; }
- public string MD5Sum {
- get { return md5_sum; }
- internal set { md5_sum = value; }
- }
-
- public uint VersionId {
- get { return version_id; }
- }
-
- public bool IsProtected {
- get { return is_protected; }
- }
-
- public uint Rating {
- get { return photo.Rating; }
- }
-
- public PhotoVersion (Photo photo, uint version_id, System.Uri uri, string md5_sum, string name, bool is_protected)
- {
- this.photo = photo;
- this.version_id = version_id;
- this.uri = uri;
- this.md5_sum = md5_sum;
- this.name = name;
- this.is_protected = is_protected;
- }
- }
+ public PhotoVersion (IBrowsableItem photo, uint version_id, SafeUri base_uri, string filename, string md5_sum, string name, bool is_protected)
+ {
+ Photo = photo;
+ VersionId = version_id;
+ BaseUri = base_uri;
+ Filename = filename;
+ ImportMD5 = md5_sum;
+ Name = name;
+ IsProtected = is_protected;
+ }
+ }
}
diff --git a/src/Core/Tag.cs b/src/Core/Tag.cs
index c9be25d..7a64a6f 100644
--- a/src/Core/Tag.cs
+++ b/src/Core/Tag.cs
@@ -11,6 +11,7 @@
using System;
using Gdk;
using FSpot.Utils;
+using Hyena;
namespace FSpot
{
@@ -176,7 +177,7 @@ namespace FSpot
~Tag ()
{
- Log.Debug ("Finalizer called on {0}. Should be Disposed", GetType ());
+ Log.DebugFormat ("Finalizer called on {0}. Should be Disposed", GetType ());
if (icon != null)
icon.Dispose ();
if (cached_icon != null)
diff --git a/src/Db.cs b/src/Db.cs
index 0e60988..b27b38f 100644
--- a/src/Db.cs
+++ b/src/Db.cs
@@ -6,7 +6,7 @@ using System;
using Banshee.Database;
using System.Diagnostics;
using FSpot;
-using FSpot.Utils;
+using Hyena;
// A Store maps to a SQL table. We have separate stores (i.e. SQL tables) for tags, photos and imports.
@@ -223,7 +223,7 @@ public class Db : IDisposable {
meta_store = new MetaStore (Database, new_db);
// Update the database schema if necessary
- FSpot.Database.Updater.Run (this);
+ FSpot.Database.Updater.Run (Database);
Database.BeginTransaction ();
@@ -274,7 +274,7 @@ public class Db : IDisposable {
~Db ()
{
- Log.Debug ("Finalizer called on {0}. Should be Disposed", GetType ());
+ Log.DebugFormat ("Finalizer called on {0}. Should be Disposed", GetType ());
Dispose (false);
}
@@ -315,7 +315,7 @@ public class Db : IDisposable {
if (upgrader_path == null)
throw new DbException ("Failed to upgrade the f-spot sqlite2 database to sqlite3!\n" + "Unable to find the f-spot-sqlite-upgrade script on your system");
- Console.WriteLine ("Running {0}...", upgrader_path);
+ Log.DebugFormat ("Running {0}...", upgrader_path);
ProcessStartInfo updaterInfo = new ProcessStartInfo (upgrader_path);
updaterInfo.UseShellExecute = false;
updaterInfo.RedirectStandardError = true;
diff --git a/src/Editors/CropEditor.cs b/src/Editors/CropEditor.cs
index 6d4c265..375e8cc 100644
--- a/src/Editors/CropEditor.cs
+++ b/src/Editors/CropEditor.cs
@@ -10,6 +10,7 @@
using FSpot;
using FSpot.UI.Dialog;
using FSpot.Utils;
+using Hyena;
using Gdk;
using Gtk;
using Mono.Unix;
@@ -143,7 +144,7 @@ namespace FSpot.Editors {
Pixbuf pb = State.PhotoImageView.CompletePixbuf ();
State.PhotoImageView.SelectionXyRatio = (double)pb.Width / (double)pb.Height;
} catch (System.Exception ex) {
- Log.Warning ("Exception in selection ratio's: {0}", ex);
+ Log.WarningFormat ("Exception in selection ratio's: {0}", ex);
State.PhotoImageView.SelectionXyRatio = 0;
}
break;
diff --git a/src/Editors/Editor.cs b/src/Editors/Editor.cs
index ef5a4db..b83f86c 100644
--- a/src/Editors/Editor.cs
+++ b/src/Editors/Editor.cs
@@ -8,7 +8,7 @@
*/
using FSpot;
-using FSpot.Utils;
+using Hyena;
using FSpot.Widgets;
using Gdk;
@@ -84,7 +84,7 @@ namespace FSpot.Editors {
// A tool can be applied if it doesn't need a selection, or if it has one.
public bool CanBeApplied {
get {
- Log.Debug ("{0} can be applied? {1}", this, !NeedsSelection || (NeedsSelection && State.HasSelection));
+ Log.DebugFormat ("{0} can be applied? {1}", this, !NeedsSelection || (NeedsSelection && State.HasSelection));
return !NeedsSelection || (NeedsSelection && State.HasSelection);
}
}
@@ -98,7 +98,7 @@ namespace FSpot.Editors {
protected void LoadPhoto (Photo photo, out Pixbuf photo_pixbuf, out Cms.Profile photo_profile) {
// FIXME: We might get this value from the PhotoImageView.
- using (ImageFile img = ImageFile.Create (photo.DefaultVersionUri)) {
+ using (ImageFile img = ImageFile.Create (photo.DefaultVersion.Uri)) {
photo_pixbuf = img.Load ();
photo_profile = img.GetProfile ();
}
@@ -205,7 +205,7 @@ namespace FSpot.Editors {
Pixbuf previewed = ProcessFast (preview, null);
State.PhotoImageView.Pixbuf = previewed;
State.PhotoImageView.ZoomFit (false);
- MainWindow.Toplevel.InfoBox.UpdateHistogram (previewed);
+ App.Instance.Organizer.InfoBox.UpdateHistogram (previewed);
if (old_preview != null) {
old_preview.Dispose ();
@@ -238,7 +238,7 @@ namespace FSpot.Editors {
State.PhotoImageView.Pixbuf = original;
State.PhotoImageView.ZoomFit (false);
- MainWindow.Toplevel.InfoBox.UpdateHistogram (null);
+ App.Instance.Organizer.InfoBox.UpdateHistogram (null);
}
Reset ();
diff --git a/src/Extensions/ComplexMenuItemNode.cs b/src/Extensions/ComplexMenuItemNode.cs
index eab937d..84ea3a5 100644
--- a/src/Extensions/ComplexMenuItemNode.cs
+++ b/src/Extensions/ComplexMenuItemNode.cs
@@ -23,8 +23,6 @@ namespace FSpot.Extensions
[NodeAttribute]
protected string command_type;
- public event EventHandler Changed;
-
ICommand cmd;
public override Gtk.MenuItem GetMenuItem (object parent)
diff --git a/src/Extensions/ExportMenuItemNode.cs b/src/Extensions/ExportMenuItemNode.cs
index af33b56..f6981c6 100644
--- a/src/Extensions/ExportMenuItemNode.cs
+++ b/src/Extensions/ExportMenuItemNode.cs
@@ -13,7 +13,7 @@ using System;
namespace FSpot.Extensions
{
- public delegate FSpot.PhotoArray SelectedImages ();
+ public delegate PhotoList SelectedImages ();
[ExtensionNode ("ExportMenuItem")]
public class ExportMenuItemNode : MenuItemNode
diff --git a/src/Extensions/PhotoSelectionCondition.cs b/src/Extensions/PhotoSelectionCondition.cs
index 4ac1062..9649f78 100644
--- a/src/Extensions/PhotoSelectionCondition.cs
+++ b/src/Extensions/PhotoSelectionCondition.cs
@@ -23,13 +23,12 @@ namespace FSpot.Extensions
{
public PhotoSelectionCondition()
{
- if (MainWindow.Toplevel != null)
- MainWindow.Toplevel.Selection.Changed += delegate { NotifyChanged ();};
+ App.Instance.Organizer.Selection.Changed += delegate { NotifyChanged ();};
}
public override bool Evaluate (NodeElement conditionNode)
{
- int count = MainWindow.Toplevel.Selection.Count;
+ int count = App.Instance.Organizer.Selection.Count;
string val = conditionNode.GetAttribute ("selection");
if (val.Length > 0) {
foreach (string selection in val.Split(',')) {
diff --git a/src/Extensions/PopupCommands.cs b/src/Extensions/PopupCommands.cs
index 787533b..95f00d7 100644
--- a/src/Extensions/PopupCommands.cs
+++ b/src/Extensions/PopupCommands.cs
@@ -18,7 +18,7 @@ namespace FSpot.Extensions
{
public void Run (object o, EventArgs e)
{
- MainWindow.Toplevel.HandleCopy (o, e);
+ App.Instance.Organizer.HandleCopy (o, e);
}
}
@@ -26,7 +26,7 @@ namespace FSpot.Extensions
{
public void Run (object o, EventArgs e)
{
- MainWindow.Toplevel.HandleRotate270Command (o, e);
+ App.Instance.Organizer.HandleRotate270Command (o, e);
}
}
@@ -34,7 +34,7 @@ namespace FSpot.Extensions
{
public void Run (object o, EventArgs e)
{
- MainWindow.Toplevel.HandleRotate90Command (o, e);
+ App.Instance.Organizer.HandleRotate90Command (o, e);
}
}
@@ -42,7 +42,7 @@ namespace FSpot.Extensions
{
public void Run (object o, EventArgs e)
{
- MainWindow.Toplevel.HandleRemoveCommand (o, e);
+ App.Instance.Organizer.HandleRemoveCommand (o, e);
}
}
@@ -50,7 +50,7 @@ namespace FSpot.Extensions
{
public void Run (object o, EventArgs e)
{
- MainWindow.Toplevel.HandleDeleteCommand (o, e);
+ App.Instance.Organizer.HandleDeleteCommand (o, e);
}
}
@@ -60,8 +60,8 @@ namespace FSpot.Extensions
public Gtk.Menu GetMenu ()
{
- owm = new Widgets.OpenWithMenu (MainWindow.Toplevel.SelectedMimeTypes, "f-spot");
- owm.ApplicationActivated += MainWindow.Toplevel.HandleOpenWith;
+ owm = new Widgets.OpenWithMenu (App.Instance.Organizer.SelectedMimeTypes, "f-spot");
+ owm.ApplicationActivated += App.Instance.Organizer.HandleOpenWith;
return (Gtk.Menu) owm;
}
@@ -72,37 +72,18 @@ namespace FSpot.Extensions
}
}
- public class AttachTag : IMenuGenerator
- {
- private TagMenu tag_menu;
-
- public Gtk.Menu GetMenu ()
- {
- tag_menu = new TagMenu (null, MainWindow.Toplevel.Database.Tags);
- tag_menu.NewTagHandler += delegate { MainWindow.Toplevel.HandleCreateTagAndAttach (this, null); };
- tag_menu.TagSelected += MainWindow.Toplevel.HandleAttachTagMenuSelected;
- return (Gtk.Menu) tag_menu;
- }
-
- public void OnActivated (object o, EventArgs e)
- {
- if (tag_menu != null)
- tag_menu.Populate ();
- }
- }
-
public class RemoveTag : IMenuGenerator
{
public Gtk.Menu GetMenu ()
{
PhotoTagMenu tag_menu = new PhotoTagMenu ();
- tag_menu.TagSelected += MainWindow.Toplevel.HandleRemoveTagMenuSelected;
+ tag_menu.TagSelected += App.Instance.Organizer.HandleRemoveTagMenuSelected;
return (Gtk.Menu) tag_menu;
}
public void OnActivated (object o, EventArgs e)
{
- MainWindow.Toplevel.HandleTagMenuActivate (o, e);
+ App.Instance.Organizer.HandleTagMenuActivate (o, e);
}
}
@@ -110,7 +91,7 @@ namespace FSpot.Extensions
{
public void Run (object o, EventArgs e)
{
- MainWindow.Toplevel.HandleRatingMenuSelected ((o as Widgets.Rating).Value);
+ App.Instance.Organizer.HandleRatingMenuSelected ((o as Widgets.Rating).Value);
}
}
}
diff --git a/src/FSpot.Utils.dll.config b/src/FSpot.Utils.dll.config
deleted file mode 100644
index 20b20ab..0000000
--- a/src/FSpot.Utils.dll.config
+++ /dev/null
@@ -1,5 +0,0 @@
-<configuration>
- <dllmap dll="libgdk-2.0-0.dll" target="libgdk-x11-2.0.so.0"/>
- <dllmap dll="libgdk_pixbuf-2.0-0.dll" target="libgdk_pixbuf-2.0.so.0"/>
- <dllmap dll="X11" target="libX11.so.6"/>
-</configuration>
diff --git a/src/FSpot.addin.xml b/src/FSpot.addin.xml
index ea7e04d..ed71370 100644
--- a/src/FSpot.addin.xml
+++ b/src/FSpot.addin.xml
@@ -54,7 +54,6 @@
<Command id = "Remove" _label = "_Remove From Catalog" command_type = "FSpot.Extensions.Remove" />
<Command id = "Delete" _label = "_Delete From Drive" command_type = "FSpot.Extensions.Delete" />
<MenuSeparator id = "Separator3" />
- <MenuGenerator id = "AttachTag" _label = "_Attach Tag" icon = "gtk-add" generator_type = "FSpot.Extensions.AttachTag" />
<MenuGenerator id = "RemoveTag" _label = "Rem_ove Tag" icon = "gtk-remove" generator_type = "FSpot.Extensions.RemoveTag" />
<ComplexMenuItem id = "Rate" widget_type = "FSpot.Widgets.RatingMenuItem" command_type = "FSpot.Extensions.Rate"/>
</Extension>
diff --git a/src/Fader.cs b/src/Fader.cs
index 057813e..6aeb22f 100644
--- a/src/Fader.cs
+++ b/src/Fader.cs
@@ -18,15 +18,14 @@ namespace FSpot {
public class Fader {
bool composited;
Gtk.Window win;
- double target_opacity;
DoubleAnimation fadin;
- public Fader (Gtk.Window win, double target, int sec)
+ public Fader (Gtk.Window win, double target, double msec)
{
this.win = win;
win.Mapped += HandleMapped;
win.Unmapped += HandleUnmapped;
- fadin = new DoubleAnimation (0.0, target, new TimeSpan (0, 0, sec), delegate (double opacity) {
+ fadin = new DoubleAnimation (0.0, target, TimeSpan.FromMilliseconds(msec), delegate (double opacity) {
CompositeUtils.SetWinOpacity (win, opacity);
});
}
diff --git a/src/FileBrowsableItem.cs b/src/FileBrowsableItem.cs
index 709a586..f4aa3dc 100644
--- a/src/FileBrowsableItem.cs
+++ b/src/FileBrowsableItem.cs
@@ -14,33 +14,32 @@ using System.IO;
using System.Collections;
using System.Xml;
+using Hyena;
using FSpot.Utils;
+
namespace FSpot {
- public class FileBrowsableItem : IBrowsableItem, IDisposable
+ public class FileBrowsableItem : IBrowsableItem
{
- ImageFile img;
- Uri uri;
- bool attempted;
+ bool metadata_parsed = false;
- public FileBrowsableItem (Uri uri)
+ public FileBrowsableItem (SafeUri uri)
{
- this.uri = uri;
+ DefaultVersion = new FileBrowsableItemVersion () {
+ Uri = uri
+ };
}
- public FileBrowsableItem (string path)
+ private void EnsureMetadataParsed ()
{
- this.uri = UriUtils.PathToFileUri (path);
- }
-
- protected ImageFile Image {
- get {
- if (!attempted) {
- img = ImageFile.Create (uri);
- attempted = true;
- }
+ if (metadata_parsed)
+ return;
- return img;
+ using (var img = ImageFile.Create (DefaultVersion.Uri)) {
+ time = img.Date;
+ description = img.Description;
}
+
+ metadata_parsed = true;
}
public Tag [] Tags {
@@ -49,35 +48,27 @@ namespace FSpot {
}
}
+ private DateTime time;
public DateTime Time {
get {
- return Image.Date;
+ EnsureMetadataParsed ();
+ return time;
}
}
- public Uri DefaultVersionUri {
- get {
- return uri;
- }
- }
+ public IBrowsableItemVersion DefaultVersion { get; private set; }
+ private string description;
public string Description {
get {
- try {
- if (Image != null)
- return Image.Description;
-
- } catch (System.Exception e) {
- System.Console.WriteLine (e);
- }
-
- return null;
+ EnsureMetadataParsed ();
+ return description;
}
}
public string Name {
get {
- return Path.GetFileName (Image.Uri.AbsolutePath);
+ return DefaultVersion.Uri.GetFilename ();
}
}
@@ -87,10 +78,22 @@ namespace FSpot {
}
}
- public void Dispose ()
- {
- img.Dispose ();
- GC.SuppressFinalize (this);
+ private class FileBrowsableItemVersion : IBrowsableItemVersion {
+ public string Name { get { return String.Empty; } }
+ public bool IsProtected { get { return true; } }
+
+ public SafeUri BaseUri { get { return Uri.GetBaseUri (); } }
+ public string Filename { get { return Uri.GetFilename (); } }
+ public SafeUri Uri { get; set; }
+
+ private string import_md5 = String.Empty;
+ public string ImportMD5 {
+ get {
+ if (import_md5 == String.Empty)
+ import_md5 = Photo.GenerateMD5 (Uri);
+ return import_md5;
+ }
+ }
}
}
}
diff --git a/src/FileImportBackend.cs b/src/FileImportBackend.cs
deleted file mode 100644
index 5c3a04e..0000000
--- a/src/FileImportBackend.cs
+++ /dev/null
@@ -1,425 +0,0 @@
-using Gdk;
-using Gtk;
-using System.Collections;
-using System.Collections.Generic;
-using System;
-using FSpot;
-using FSpot.Utils;
-using FSpot.Xmp;
-using FSpot.UI.Dialog;
-using System.IO;
-using Mono.Unix;
-
-public class ImportException : System.Exception {
- public ImportException (string msg) : base (msg)
- {
- }
-}
-
-public class FileImportBackend : ImportBackend {
- PhotoStore store;
- RollStore rolls = FSpot.App.Instance.Database.Rolls;
- TagStore tag_store = FSpot.App.Instance.Database.Tags;
- bool recurse;
- bool copy;
- bool detect_duplicates;
- string [] base_paths;
- Tag [] tags;
- Gtk.Window parent;
-
- int count;
- int duplicate_count;
- XmpTagsImporter xmptags;
-
- ArrayList import_info;
- Stack directories;
-
- private class ImportInfo {
- string original_path;
- public string destination_path;
- public Photo Photo;
-
- public string OriginalPath {
- get { return original_path; }
- }
-
- public string DestinationPath {
- get { return destination_path; }
- set { destination_path = value; }
- }
-
- public ImportInfo (string original)
- {
- original_path = original;
- destination_path = null;
- Photo = null;
- }
- }
-
- private void AddPath (string path)
- {
- if (FSpot.ImageFile.HasLoader (path))
- import_info.Add (new ImportInfo (path));
- }
-
- private void GetListing (System.IO.DirectoryInfo info)
- {
- try {
- GetListing (info, info.GetFiles (), recurse);
- } catch (System.UnauthorizedAccessException) {
- System.Console.WriteLine ("Unable to access directory {0}", info.FullName);
- } catch (System.Exception e) {
- System.Console.WriteLine ("{0}", e.ToString ());
- }
- }
-
- private void GetListing (System.IO.DirectoryInfo dirinfo, System.IO.FileInfo [] files, bool recurse)
- {
- Log.Debug ("Scanning {0} for new photos", dirinfo.FullName);
- List<Uri> existing_entries = new List<Uri> ();
-
- foreach (Photo p in store.Query (new Uri (dirinfo.FullName + "/")))
- foreach (uint id in p.VersionIds)
- existing_entries.Add (p.VersionUri (id));
-
- foreach (System.IO.FileInfo f in files)
- if (! existing_entries.Contains (UriUtils.PathToFileUri (f.FullName)) && !f.Name.StartsWith (".")) {
- AddPath (f.FullName);
- }
-
- if (recurse) {
- foreach (System.IO.DirectoryInfo d in dirinfo.GetDirectories ()){
- if (!d.Name.StartsWith ("."))
- GetListing (d);
- }
- }
- }
-
- public override int Prepare ()
- {
- if (import_info != null)
- throw new ImportException ("Busy");
-
- import_info = new ArrayList ();
-
- foreach (string path in base_paths) {
- try {
- if (System.IO.Directory.Exists (path))
- GetListing (new System.IO.DirectoryInfo (path));
- else if (System.IO.File.Exists (path))
- GetListing (new System.IO.DirectoryInfo (System.IO.Path.GetDirectoryName (path)),
- new System.IO.FileInfo [] { new System.IO.FileInfo (path)}, false);
- } catch (Exception e) {
- System.Console.WriteLine (e.ToString ());
- }
- }
-
- directories = new Stack ();
- xmptags = new XmpTagsImporter (store, tag_store);
-
- roll = rolls.Create ();
- Photo.ResetMD5Cache ();
-
- return import_info.Count;
- }
-
- public static string UniqueName (string path, string filename)
- {
- int i = 1;
- string dest = System.IO.Path.Combine (path, filename);
-
- while (System.IO.File.Exists (dest)) {
- string numbered_name = String.Format ("{0}-{1}{2}",
- System.IO.Path.GetFileNameWithoutExtension (filename),
- i++,
- System.IO.Path.GetExtension (filename));
-
- dest = System.IO.Path.Combine (path, numbered_name);
- }
-
- return dest;
- }
-
- public static string ChooseLocation (string path)
- {
- return ChooseLocation (path, null);
- }
-
- public static string ChooseLocation (string path, Stack created_directories)
- {
- string name = System.IO.Path.GetFileName (path);
- DateTime time;
- using (FSpot.ImageFile img = FSpot.ImageFile.Create (path)) {
- time = img.Date;
- }
-
- string dest_dir = String.Format ("{0}{1}{2}{1}{3:D2}{1}{4:D2}",
- FSpot.Global.PhotoDirectory,
- System.IO.Path.DirectorySeparatorChar,
- time.Year,
- time.Month,
- time.Day);
-
- if (!System.IO.Directory.Exists (dest_dir)) {
- System.IO.DirectoryInfo info;
- // Split dest_dir into constituent parts so we can clean up each individual directory in
- // event of a cancel.
- if (created_directories != null) {
- string [] parts = dest_dir.Split (new char [] {System.IO.Path.DirectorySeparatorChar});
- string nextPath = String.Empty;
- for (int i = 0; i < parts.Length; i++) {
- if (i == 0)
- nextPath += parts [i];
- else
- nextPath += System.IO.Path.DirectorySeparatorChar + parts [i];
- if (nextPath.Length > 0) {
- info = new System.IO.DirectoryInfo (nextPath);
- // only add the directory path if it didn't already exist and we haven't already added it.
- if (!info.Exists && !created_directories.Contains (nextPath))
- created_directories.Push (nextPath);
- }
- }
- }
-
- info = System.IO.Directory.CreateDirectory (dest_dir);
- }
-
- // If the destination we'd like to use is the file itself return that
- if (Path.Combine (dest_dir, name) == path)
- return path;
-
- string dest = UniqueName (dest_dir, name);
-
- return dest;
- }
-
- public override bool Step (out StepStatusInfo status_info)
- {
- Photo photo = null;
- Pixbuf thumbnail = null;
- bool is_duplicate = false;
-
- if (import_info == null)
- throw new ImportException ("Prepare() was not called");
-
- if (this.count == import_info.Count)
- throw new ImportException ("Already finished");
-
- // FIXME Need to get the EXIF info etc.
- ImportInfo info = (ImportInfo)import_info [this.count];
- bool needs_commit = false;
- bool abort = false;
- try {
- string destination = info.OriginalPath;
- if (copy)
- destination = ChooseLocation (info.OriginalPath, directories);
-
- // Don't copy if we are already home
- if (info.OriginalPath == destination) {
- info.DestinationPath = destination;
-
- if (detect_duplicates)
- photo = store.CheckForDuplicate (UriUtils.PathToFileUri (destination));
-
- if (photo == null)
- photo = store.Create (UriUtils.PathToFileUri (info.DestinationPath), roll.Id, out thumbnail);
- else
- is_duplicate = true;
- } else {
- System.IO.File.Copy (info.OriginalPath, destination);
- System.IO.File.SetAttributes (destination, System.IO.FileAttributes.Normal);
- info.DestinationPath = destination;
-
- if (detect_duplicates)
- photo = store.CheckForDuplicate (UriUtils.PathToFileUri (destination));
-
- if (photo == null)
- {
- photo = store.Create (UriUtils.PathToFileUri (info.DestinationPath),
- UriUtils.PathToFileUri (info.OriginalPath),
- roll.Id,
- out thumbnail);
-
-
- try {
- File.SetAttributes (destination, File.GetAttributes (info.DestinationPath) & ~FileAttributes.ReadOnly);
- DateTime create = File.GetCreationTime (info.OriginalPath);
- File.SetCreationTime (info.DestinationPath, create);
- DateTime mod = File.GetLastWriteTime (info.OriginalPath);
- File.SetLastWriteTime (info.DestinationPath, mod);
- } catch (IOException) {
- // we don't want an exception here to be fatal.
- }
- }
- else
- {
- is_duplicate = true;
- System.IO.File.Delete (destination);
- }
- }
-
- if (!is_duplicate)
- {
- if (tags != null) {
- foreach (Tag t in tags) {
- photo.AddTag (t);
- }
- needs_commit = true;
- }
-
- needs_commit |= xmptags.Import (photo, info.DestinationPath, info.OriginalPath);
-
- if (needs_commit)
- store.Commit(photo);
-
- info.Photo = photo;
- }
- } catch (System.Exception e) {
- System.Console.WriteLine ("Error importing {0}{2}{1}", info.OriginalPath, e.ToString (), Environment.NewLine);
- if (thumbnail != null)
- thumbnail.Dispose ();
-
- thumbnail = null;
- photo = null;
-
- HigMessageDialog errordialog = new HigMessageDialog (parent,
- Gtk.DialogFlags.Modal | Gtk.DialogFlags.DestroyWithParent,
- Gtk.MessageType.Error,
- Gtk.ButtonsType.Cancel,
- Catalog.GetString ("Import error"),
- String.Format(Catalog.GetString ("Error importing {0}{2}{2}{1}"), info.OriginalPath, e.Message, Environment.NewLine ));
- errordialog.AddButton (Catalog.GetString ("Skip"), Gtk.ResponseType.Reject, false);
- ResponseType response = (ResponseType) errordialog.Run ();
- errordialog.Destroy ();
- if (response == ResponseType.Cancel)
- abort = true;
- }
-
- this.count ++;
-
- if (is_duplicate)
- this.duplicate_count ++;
-
- status_info = new StepStatusInfo (photo, thumbnail, this.count, is_duplicate);
-
- return (!abort && count != import_info.Count);
- }
-
- public override void Cancel ()
- {
- if (import_info == null)
- throw new ImportException ("Not doing anything");
-
- foreach (ImportInfo info in import_info) {
-
- if (info.OriginalPath != info.DestinationPath) {
- try {
- System.IO.File.Delete (info.DestinationPath);
- } catch (System.ArgumentNullException) {
- // Do nothing, since if DestinationPath == null, we do not have to remove it
- } catch (System.Exception e) {
- System.Console.WriteLine (e);
- }
- }
-
- if (info.Photo != null)
- store.Remove (info.Photo);
- }
-
- // clean up all the directories we created.
- if (copy) {
- string path;
- System.IO.DirectoryInfo info;
- while (directories.Count > 0) {
- path = directories.Pop () as string;
- info = new System.IO.DirectoryInfo (path);
- // double check we aren't trying to delete a directory that still contains something!
- if (info.Exists && info.GetFiles().Length == 0 && info.GetDirectories().Length == 0)
- info.Delete ();
- }
- }
- // Clean up just created tags
- xmptags.Cancel();
-
- rolls.Remove (roll);
- }
-
- public override void Finish ()
- {
- if (import_info == null)
- throw new ImportException ("Not doing anything");
-
- foreach (ImportInfo info in import_info) {
- if (info.Photo != null)
- FSpot.ThumbnailGenerator.Default.Request (info.Photo.DefaultVersionUri, 0, 256, 256);
- }
-
- import_info = null;
- xmptags.Finish();
- Photo.ResetMD5Cache ();
-
- if (count == duplicate_count)
- rolls.Remove (roll);
-
- count = duplicate_count = 0;
- //rolls.EndImport(); // Clean up the imported session.
- }
-
- public FileImportBackend (PhotoStore store, string [] base_paths, bool recurse, Gtk.Window parent) : this (store, base_paths, false, recurse, false, null, parent) {}
-
- public FileImportBackend (PhotoStore store, string [] base_paths, bool copy, bool recurse, Tag [] tags, Gtk.Window parent) : this (store, base_paths, copy, recurse, false, null, parent) {}
-
- public FileImportBackend (PhotoStore store, string [] base_paths, bool copy, bool recurse, bool detect_duplicates, Tag [] tags, Gtk.Window parent)
- {
- this.store = store;
- this.copy = copy;
- this.base_paths = base_paths;
- this.recurse = recurse;
- this.detect_duplicates = detect_duplicates;
- this.tags = tags;
- this.parent = parent;
- }
-
-#if TEST_FILE_IMPORT_BACKEND
-
- public static void Main (string [] args)
- {
- Program program = new Program ("FileImportTest", "0.0", Modules.UI, args);
-
- const string path = "/tmp/FileImportTest.db";
-
- try {
- File.Delete (path);
- } catch {}
-
- Db db = new Db (path, true);
-
- FileImportBackend import = new FileImportBackend (db.Photos, args [0],true, this);
-
- Console.WriteLine ("Preparing...");
-
- int total_count = import.Prepare();
- if (total_count == 0)
- Console.WriteLine ("(No pictures)");
-
- Console.WriteLine ("Prepared: {0} picture(s)", total_count);
-
- bool ongoing;
- do {
- Photo photo;
- Pixbuf thumbnail;
- int count;
-
- ongoing = import.Step (out photo, out thumbnail, out count);
-
- Console.WriteLine ("{0}/{1} - {2}", count, total_count, photo.Path);
-
- if (thumbnail != null)
- thumbnail.Dispose ();
- } while (ongoing);
-
- import.Finish ();
- }
-
-#endif
-}
diff --git a/src/Filters/ChmodFilter.cs b/src/Filters/ChmodFilter.cs
index 6b756c1..622bb5b 100644
--- a/src/Filters/ChmodFilter.cs
+++ b/src/Filters/ChmodFilter.cs
@@ -30,7 +30,7 @@ namespace FSpot.Filters {
public bool Convert (FilterRequest req)
{
if (req.Current == req.Source) {
- System.Uri uri = req.TempUri ();
+ var uri = req.TempUri ();
System.IO.File.Copy (req.Current.LocalPath, uri.LocalPath, true);
req.Current = uri;
}
diff --git a/src/Filters/FilterRequest.cs b/src/Filters/FilterRequest.cs
index 26d4b09..c0ad7a7 100644
--- a/src/Filters/FilterRequest.cs
+++ b/src/Filters/FilterRequest.cs
@@ -12,38 +12,35 @@
using System;
using System.Collections;
+using Hyena;
using FSpot.Utils;
namespace FSpot.Filters {
public class FilterRequest : IDisposable
{
- Uri source;
- Uri current;
+ SafeUri source;
+ SafeUri current;
ArrayList temp_uris;
- public FilterRequest (Uri source)
+ public FilterRequest (SafeUri source)
{
this.source = source;
this.current = source;
temp_uris = new ArrayList ();
}
- public FilterRequest (string path) : this (UriUtils.PathToFileUri (path))
- {
- }
-
~FilterRequest ()
{
Close ();
}
- public Uri Source {
+ public SafeUri Source {
get { return source; }
}
- public Uri Current {
+ public SafeUri Current {
get { return current; }
set {
if (!value.Equals (source) && !temp_uris.Contains (value))
@@ -54,11 +51,11 @@ namespace FSpot.Filters {
public virtual void Close ()
{
- foreach (Uri uri in temp_uris) {
+ foreach (SafeUri uri in temp_uris) {
try {
System.IO.File.Delete (uri.LocalPath);
} catch (System.IO.IOException e) {
- System.Console.WriteLine (e);
+ Log.Exception (e);
}
}
temp_uris.Clear ();
@@ -70,12 +67,12 @@ namespace FSpot.Filters {
System.GC.SuppressFinalize (this);
}
- public Uri TempUri ()
+ public SafeUri TempUri ()
{
return TempUri (null);
}
- public Uri TempUri (string extension)
+ public SafeUri TempUri (string extension)
{
string imgtemp;
if (extension != null) {
@@ -85,13 +82,13 @@ namespace FSpot.Filters {
} else
imgtemp = System.IO.Path.GetTempFileName ();
- Uri uri = UriUtils.PathToFileUri (imgtemp);
+ SafeUri uri = new SafeUri (imgtemp);
if (!temp_uris.Contains (uri))
temp_uris.Add (uri);
return uri;
}
- public void Preserve (Uri uri)
+ public void Preserve (SafeUri uri)
{
temp_uris.Remove (uri);
}
diff --git a/src/Filters/OrientationFilter.cs b/src/Filters/OrientationFilter.cs
index 0b5154d..fef3886 100644
--- a/src/Filters/OrientationFilter.cs
+++ b/src/Filters/OrientationFilter.cs
@@ -16,7 +16,7 @@ namespace FSpot.Filters {
public bool Convert (FilterRequest req)
{
string source = req.Current.LocalPath;
- System.Uri dest_uri = req.TempUri (System.IO.Path.GetExtension (source));
+ var dest_uri = req.TempUri (System.IO.Path.GetExtension (source));
string dest = dest_uri.LocalPath;
using (ImageFile img = ImageFile.Create (req.Current)) {
diff --git a/src/Filters/ResizeFilter.cs b/src/Filters/ResizeFilter.cs
index 55f42e7..1a4945d 100644
--- a/src/Filters/ResizeFilter.cs
+++ b/src/Filters/ResizeFilter.cs
@@ -40,7 +40,7 @@ namespace FSpot.Filters {
public bool Convert (FilterRequest req)
{
string source = req.Current.LocalPath;
- System.Uri dest_uri = req.TempUri (System.IO.Path.GetExtension (source));
+ var dest_uri = req.TempUri (System.IO.Path.GetExtension (source));
string dest = dest_uri.LocalPath;
using (ImageFile img = ImageFile.Create (req.Current)) {
diff --git a/src/Filters/SharpFilter.cs b/src/Filters/SharpFilter.cs
index 64ac496..f103d7e 100644
--- a/src/Filters/SharpFilter.cs
+++ b/src/Filters/SharpFilter.cs
@@ -28,7 +28,7 @@ namespace FSpot.Filters {
public bool Convert (FilterRequest req)
{
- Uri dest_uri = req.TempUri (System.IO.Path.GetExtension (req.Current.LocalPath));
+ var dest_uri = req.TempUri (System.IO.Path.GetExtension (req.Current.LocalPath));
using (ImageFile img = ImageFile.Create (req.Current)) {
using (Pixbuf in_pixbuf = img.Load ()) {
diff --git a/src/Filters/UniqueNameFilter.cs b/src/Filters/UniqueNameFilter.cs
index a8ea8e6..01261c1 100644
--- a/src/Filters/UniqueNameFilter.cs
+++ b/src/Filters/UniqueNameFilter.cs
@@ -10,16 +10,14 @@
using System;
using FSpot.Utils;
+using Hyena;
namespace FSpot.Filters {
public class UniqueNameFilter : IFilter
{
- Uri destination;
+ SafeUri destination;
- public UniqueNameFilter (string destination) : this (UriUtils.PathToFileUri (destination))
- {}
-
- public UniqueNameFilter (Uri destination)
+ public UniqueNameFilter (SafeUri destination)
{
this.destination = destination;
}
@@ -40,7 +38,7 @@ namespace FSpot.Filters {
}
System.IO.File.Copy (request.Current.LocalPath, dest);
- request.Current = UriUtils.PathToFileUri (dest);
+ request.Current = new SafeUri (dest);
return true;
}
}
diff --git a/src/FolderQueryWidget.cs b/src/FolderQueryWidget.cs
index 5a446d9..b08f50f 100644
--- a/src/FolderQueryWidget.cs
+++ b/src/FolderQueryWidget.cs
@@ -14,6 +14,7 @@ using System.Collections.Generic;
using System.Linq;
using Gtk;
+using Hyena;
using FSpot;
using FSpot.Utils;
@@ -52,7 +53,7 @@ namespace FSpot
if (length < 4) {
- foreach (Uri uri in folder_set.Folders) {
+ foreach (var uri in folder_set.Folders) {
Image image = new Image ("gtk-directory", IconSize.Button);
image.TooltipText = uri.ToString ();
PackStart (image);
@@ -70,7 +71,7 @@ namespace FSpot
PackStart (image);
StringBuilder builder = new StringBuilder ();
- foreach (Uri uri in folder_set.Folders) {
+ foreach (var uri in folder_set.Folders) {
if (builder.Length > 0)
builder.AppendLine ();
@@ -83,7 +84,7 @@ namespace FSpot
ShowAll ();
}
- public void SetFolders (IEnumerable<Uri> uris)
+ public void SetFolders (IEnumerable<SafeUri> uris)
{
folder_set.Folders = uris;
diff --git a/src/FormClient.cs b/src/FormClient.cs
deleted file mode 100644
index db5dc67..0000000
--- a/src/FormClient.cs
+++ /dev/null
@@ -1,301 +0,0 @@
-using System;
-using System.Net;
-using System.IO;
-using System.Text;
-using System.Collections;
-using System.Collections.Specialized;
-using System.Web;
-
-namespace FSpot {
- public class FormClient {
- private struct FormItem {
- public string Name;
- public object Value;
-
- public FormItem (string name, object value) {
- Name = name;
- Value = value;
- }
- }
-
- private StreamWriter stream_writer;
- private ArrayList Items;
-
- private string boundary;
- private string start_boundary;
- private string end_boundary;
-
- private bool multipart = false;
- public bool Multipart {
- set { multipart = value; }
- }
-
- private bool first_item;
-
- public bool Buffer = false;
- public bool SuppressCookiePath = false;
-
- public bool expect_continue = true;
-
- public HttpWebRequest Request;
- public CookieContainer Cookies;
-
- public FSpot.ProgressItem Progress;
-
- public FormClient (CookieContainer cookies)
- {
- this.Cookies = cookies;
- this.Items = new ArrayList ();
- }
-
- public FormClient ()
- {
- this.Items = new ArrayList ();
- this.Cookies = new CookieContainer ();
- }
-
- private void GenerateBoundary ()
- {
- Guid guid = Guid.NewGuid ();
- boundary = "--------" + guid.ToString () + "-----";
- start_boundary = "--" + boundary;
- end_boundary = start_boundary + "--";
- }
-
- public void Add (string name, string value)
- {
- Items.Add (new FormItem (name, value));
- }
-
- public void Add (string name, FileInfo fileinfo)
- {
- multipart = true;
- Items.Add (new FormItem (name, fileinfo));
- }
-
- private void Write (FormItem item) {
- // The types we check here need to match the
- // types we allow in .Add
-
- if (item.Value == null) {
- Write (item.Name, (string)String.Empty);
- } else if (item.Value is FileInfo) {
- Write (item.Name, (FileInfo)item.Value);
- } else if (item.Value is string) {
- Write (item.Name, (string)item.Value);
- } else {
- throw new Exception ("Unknown value type");
- }
- }
-
- private long MultipartLength (FormItem item) {
- // The types we check here need to match the
- // types we allow in .Add
-
- if (item.Value == null) {
- return MultipartLength (item.Name, (string)String.Empty);
- } else if (item.Value is FileInfo) {
- return MultipartLength (item.Name, (FileInfo)item.Value);
- } else if (item.Value is string) {
- return MultipartLength (item.Name, (string)item.Value);
- } else {
- throw new Exception ("Unknown value type");
- }
- }
-
- private string MultipartHeader (string name, string value)
- {
- return string.Format ("{0}\r\n" +
- "Content-Disposition: form-data; name=\"{1}\"\r\n" +
- "\r\n", start_boundary, name);
- }
-
- private long MultipartLength (string name, string value)
- {
- long length = MultipartHeader (name, value).Length;
- length += value.Length + 2;
- return length;
- }
-
- private void Write (string name, string value)
- {
- string cmd;
-
- if (multipart) {
- cmd = String.Format ("{0}"
- + "{1}\r\n",
- MultipartHeader (name, value), value);
- } else {
- name = HttpUtility.UrlEncode (name.Replace(" ", "+"));
- value = HttpUtility.UrlEncode (value.Replace(" ", "+"));
- if (first_item) {
- cmd = string.Format ("{0}={1}", name, value);
- first_item = false;
- } else {
- cmd = string.Format ("&{0}={1}", name, value);
- }
- }
- //Console.WriteLine (cmd);
- stream_writer.Write (cmd);
- }
-
- private string MultipartHeader (string name, FileInfo file)
- {
- string cmd = string.Format ("{0}\r\n"
- + "Content-Disposition: form-data; name=\"{1}\"; filename=\"{2}\"\r\n"
- + "Content-Type: image/jpeg\r\n"
- + "\r\n",
- start_boundary, name, file.Name);
- return cmd;
- }
-
- private long MultipartLength (string name, FileInfo file)
- {
- long length = MultipartHeader (name, file).Length;
- length += file.Length + 2;
- return length;
- }
-
- private void Write (string name, FileInfo file)
- {
- if (multipart) {
- stream_writer.Write (MultipartHeader (name, file));
- stream_writer.Flush ();
- Stream stream = stream_writer.BaseStream;
- byte [] data = new byte [32768];
- FileStream fs = file.OpenRead ();
- long total = file.Length;
- long total_read = 0;
-
- int count;
- while ((count = fs.Read (data, 0, data.Length)) > 0) {
- stream.Write (data, 0, count);
- total_read += count;
- if (Progress != null)
- Progress.Value = total_read / (double)total;
-
- }
- fs.Close ();
-
- stream_writer.Write ("\r\n");
- } else {
- throw new Exception ("Can't write files in url-encoded submissions");
- }
- }
-
-
- public void Clear ()
- {
- Items.Clear ();
- multipart = false;
- }
-
- public HttpWebResponse Submit (string url)
- {
- return Submit (url, null);
- }
-
- public HttpWebResponse Submit (string url, FSpot.ProgressItem item)
- {
- return Submit (new Uri (url), item);
- }
-
- public HttpWebResponse Submit (Uri uri)
- {
- return Submit (uri, null);
- }
-
- public HttpWebResponse Submit (Uri uri, FSpot.ProgressItem progress_item)
- {
- this.Progress = progress_item;
- Request = (HttpWebRequest) WebRequest.Create (uri);
- CookieCollection cookie_collection = Cookies.GetCookies (uri);
-
- if (uri.UserInfo != null && uri.UserInfo != String.Empty) {
- NetworkCredential cred = new NetworkCredential ();
- cred.GetCredential (uri, "basic");
- CredentialCache credcache = new CredentialCache();
- credcache.Add(uri, "basic", cred);
-
- Request.PreAuthenticate = true;
- Request.Credentials = credcache;
- }
-
- Request.ServicePoint.Expect100Continue = expect_continue;
-
- Request.CookieContainer = new CookieContainer ();
- foreach (Cookie c in cookie_collection) {
- if (SuppressCookiePath)
- Request.CookieContainer.Add (new Cookie (c.Name, c.Value));
- else
- Request.CookieContainer.Add (c);
- }
-
- Request.Method = "POST";
- Request.Headers["Accept-Charset"] = "utf-8;";
-
- //Request.UserAgent = "F-Spot Gallery Remote Client";
- Request.UserAgent = "Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.7) Gecko/20040626 Firefox/0.9.1";
-
- if (multipart) {
- GenerateBoundary ();
- Request.ContentType = "multipart/form-data; boundary=" + boundary;
- Request.Timeout = Request.Timeout * 3;
-
- long length = 0;
- for (int i = 0; i < Items.Count; i++) {
- FormItem item = (FormItem)Items[i];
-
- length += MultipartLength (item);
- }
- length += end_boundary.Length + 2;
-
- //Request.Headers["My-Content-Length"] = length.ToString ();
- if (Buffer == false) {
- Request.ContentLength = length;
- Request.AllowWriteStreamBuffering = false;
- }
- } else {
- Request.ContentType = "application/x-www-form-urlencoded";
- }
-
- stream_writer = new StreamWriter (Request.GetRequestStream ());
-
- first_item = true;
- for (int i = 0; i < Items.Count; i++) {
- FormItem item = (FormItem)Items[i];
-
- Write (item);
- }
-
- if (multipart)
- stream_writer.Write (end_boundary + "\r\n");
-
- stream_writer.Flush ();
- stream_writer.Close ();
-
- HttpWebResponse response;
-
- try {
- response = (HttpWebResponse) Request.GetResponse ();
-
- //Console.WriteLine ("found {0} cookies", response.Cookies.Count);
-
- foreach (Cookie c in response.Cookies) {
- Cookies.Add (c);
- }
- } catch (WebException e) {
- if (e.Status == WebExceptionStatus.ProtocolError
- && ((HttpWebResponse)e.Response).StatusCode == HttpStatusCode.ExpectationFailed && expect_continue) {
- e.Response.Close ();
- expect_continue = false;
- return Submit (uri, progress_item);
- }
-
- throw new WebException (Mono.Unix.Catalog.GetString ("Unhandled exception"), e);
- }
-
- return response;
- }
- }
-}
diff --git a/src/FullScreenView.cs b/src/FullScreenView.cs
index bdfb8d3..d2362ba 100644
--- a/src/FullScreenView.cs
+++ b/src/FullScreenView.cs
@@ -12,6 +12,7 @@ using Gtk;
using Gdk;
using FSpot.Widgets;
using FSpot.Utils;
+using Hyena;
using Mono.Unix;
namespace FSpot {
@@ -85,7 +86,7 @@ namespace FSpot {
slide_show.Activated += SlideShowAction;
actions.Add (slide_show);
- new Fader (this, 1.0, 3);
+ new Fader (this, 1.0, 600);
notebook = new Notebook ();
notebook.ShowBorder = false;
notebook.ShowTabs = false;
@@ -185,6 +186,10 @@ namespace FSpot {
private Gdk.Cursor empty_cursor;
private bool HideCursor ()
{
+ if (view.Panning) {
+ return false;
+ }
+
if (empty_cursor == null)
empty_cursor = GdkUtils.CreateEmptyCursor (GdkWindow.Display);
diff --git a/src/GPhotoCamera.cs b/src/GPhotoCamera.cs
deleted file mode 100644
index 07e9a66..0000000
--- a/src/GPhotoCamera.cs
+++ /dev/null
@@ -1,307 +0,0 @@
-using System;
-using System.IO;
-using System.Collections;
-using GPhoto2;
-using Gdk;
-using FSpot.Utils;
-using FSpot;
-using Mono.Unix.Native;
-
-public class GPhotoCamera
-{
- Context context;
- PortInfoList port_info_list;
- CameraAbilitiesList abilities_list;
- CameraList camera_list;
- CameraAbilities camera_abilities;
- Camera camera;
- PortInfo port_info;
- ArrayList files;
-
- int selected_camera__camera_list_index;
- int selected_camera__port_info_list_index;
-
- public GPhotoCamera()
- {
- context = new Context();
-
- port_info_list = new PortInfoList ();
- port_info_list.Load ();
-
- abilities_list = new CameraAbilitiesList ();
- abilities_list.Load (context);
-
- selected_camera__camera_list_index = -1;
-
- camera = null;
- }
-
- public int DetectCameras ()
- {
- camera_list = abilities_list.Detect (port_info_list, context);
- return CameraCount;
- }
-
- public int CameraCount {
- get { return camera_list.Count; }
- }
-
- public CameraList CameraList {
- get { return camera_list; }
- }
-
- public void SelectCamera (int index)
- {
- selected_camera__camera_list_index = index;
-
- camera_abilities = abilities_list [camera_list.GetName (selected_camera__camera_list_index)];
- port_info = port_info_list.LookupPath (camera_list.GetValue (selected_camera__camera_list_index));
-
- Log.Debug ("PortInfo {0}, {1}", port_info.Name, port_info.Path);
-
- camera = new Camera () { Abilities = camera_abilities, PortInfo = port_info };
- }
-
- public void InitializeCamera ()
- {
- if (camera == null)
- throw new InvalidOperationException();
-
- camera.Init (context);
-
- files = new ArrayList ();
- GetFileList ();
- }
-
- private void GetFileList ()
- {
- GetFileList ("/");
- }
-
- private void GetFileList (string dir)
- {
- if (camera == null)
- throw new InvalidOperationException ();
-
- //workaround for nikon dslr in ptp mode
- if (dir == "/special/")
- return;
-
- //files
- CameraList filelist = camera.ListFiles(dir, context);
- for (int i = 0; i < filelist.Count; i++) {
- files.Add(new GPhotoCameraFile(dir, filelist.GetName(i)));
- }
-
- //subdirectories
- CameraList folderlist = camera.ListFolders(dir, context);
- for (int i = 0; i < folderlist.Count; i++) {
- GetFileList(dir + folderlist.GetName(i) + "/");
- }
- }
-
- public ArrayList FileList
- {
- get {
- return files;
- }
- }
-
- public CameraFile GetFile (GPhotoCameraFile camfile)
- {
- int index = files.IndexOf (camfile);
- return GetFile (index);
- }
-
- public CameraFile GetFile (int index)
- {
- if (camera == null || files == null || index < 0 || index >= files.Count)
- return null;
-
- GPhotoCameraFile selected_file = (GPhotoCameraFile)files [index];
- if (selected_file.NormalFile == null)
- {
- selected_file.NormalFile = new CameraFile ();
- camera.GetFile (selected_file.Directory, selected_file.FileName, CameraFileType.Normal, selected_file.NormalFile, context);
- }
-
- return selected_file.NormalFile;
- }
-
- public CameraFile GetPreview (GPhotoCameraFile camfile)
- {
- int index = files.IndexOf (camfile);
- return GetPreview (index);
- }
-
- public CameraFile GetPreview (int index)
- {
- if (camera == null || files == null || index < 0 || index >= files.Count)
- return null;
-
- GPhotoCameraFile selected_file = (GPhotoCameraFile) files [index];
-
- if (selected_file.PreviewFile == null) {
- try {
- selected_file.PreviewFile = new CameraFile ();
- camera.GetFile (selected_file.Directory, selected_file.FileName, CameraFileType.Preview, selected_file.PreviewFile, context);
- } catch (System.Exception e) {
- Log.Exception (e);
- selected_file.PreviewFile = null;
- }
- }
-
- return selected_file.PreviewFile;
- }
-
- public Pixbuf GetPreviewPixbuf (GPhotoCameraFile camfile)
- {
- CameraFile cfile = GetPreview (camfile);
- if (cfile != null) {
- byte[] bytedata = cfile.GetDataAndSize ();
- if (bytedata.Length > 0) {
- MemoryStream dataStream = new MemoryStream (bytedata);
- try {
- Gdk.Pixbuf temp = new Pixbuf (dataStream);
- Cms.Profile screen_profile;
- if (FSpot.ColorManagement.Profiles.TryGetValue (Preferences.Get<string> (Preferences.COLOR_MANAGEMENT_DISPLAY_PROFILE), out screen_profile))
- FSpot.ColorManagement.ApplyProfile (temp, screen_profile);
- return temp;
- } catch (Exception e) {
- // Actual errors with the data libgphoto gives us have been
- // observed here see b.g.o #357569.
- Log.Information ("Error retrieving preview image");
- Log.DebugException (e);
- }
-
- }
- }
- return null;
- }
-
- public void SaveFile (int index, string filename)
- {
- if (filename == null)
- return;
-
- //check if the directory exists
- if (!Directory.Exists (Path.GetDirectoryName (filename)))
- throw new Exception (String.Format ("Directory \"{0}\"does not exist", filename)); //FIXME
- //gp_file_new_from_fd is broken on the directory driver
- //but using gp_file_new_from_fd doesn't move the files to memory
- if (camera_abilities.PortType != PortType.Disk) {
- GPhotoCameraFile selected_file = (GPhotoCameraFile) files [index];
- using (var f = new CameraFile (Syscall.open (filename, OpenFlags.O_CREAT|OpenFlags.O_RDWR, FilePermissions.DEFFILEMODE))) {
- camera.GetFile (selected_file.Directory, selected_file.FileName, CameraFileType.Normal, f, context);
- }
- return;
- }
-
- using (CameraFile camfile = GetFile (index)) {
- if (camfile == null)
- throw new Exception ("Unable to claim file"); //FIXME
- camfile.Save (filename);
- }
- }
-
- public void SaveAllFiles (string prefix, int start_number)
- {
- for(int index = 0; index < files.Count; index++) {
- GPhotoCameraFile curFile = (GPhotoCameraFile) files [index];
- string extension = Path.GetExtension (curFile.FileName).ToLower ();
- SaveFile (index, prefix + Convert.ToString (start_number + index) + extension);
- }
- }
-
- ~GPhotoCamera ()
- {
- ReleaseGPhotoResources ();
- }
-
- public void ReleaseGPhotoResources ()
- {
- //Dispose of GPhoto stuff to free up resources, in reverse order of course
- if (files != null)
- foreach (GPhotoCameraFile curcamfile in files)
- curcamfile.ReleaseGPhotoResources ();
-
- if (camera != null)
- camera.Dispose ();
-
- // FIXME check to make sure we don't need to dispose of these
- // things explicitly.
- /*
- camera_list.Dispose ();
- abilities_list.Dispose ();
- port_info_list.Dispose ();
- */
-
- context.Dispose ();
- }
-}
-
-
-public class GPhotoCameraFile : IComparable
-{
- string directory;
- string filename;
- CameraFile normal;
- CameraFile preview;
-
- public GPhotoCameraFile (string dir, string name)
- {
- directory = dir;
- filename = name;
- normal = null;
- preview = null;
- }
-
- public string Directory {
- get {
- return directory;
- }
- }
-
- public string FileName {
- get {
- return filename;
- }
- }
-
- public CameraFile NormalFile {
- get {
- return normal;
- }
- set {
- normal = value;
- }
- }
-
- public CameraFile PreviewFile
- {
- get {
- return preview;
- }
- set {
- preview = value;
- }
- }
-
- public void ReleaseGPhotoResources ()
- {
- if (normal != null)
- normal.Dispose ();
-
- if (preview != null)
- preview.Dispose ();
- }
-
- public int CompareTo (object obj)
- {
- GPhotoCameraFile f2 = obj as GPhotoCameraFile;
- int result = Directory.CompareTo (f2.Directory);
- if (result == 0)
- result = FileName.CompareTo (f2.FileName);
- return result;
- }
-}
diff --git a/src/GroupSelector.cs b/src/GroupSelector.cs
index fbaf8c9..6bd0d62 100644
--- a/src/GroupSelector.cs
+++ b/src/GroupSelector.cs
@@ -46,7 +46,7 @@ namespace FSpot {
adaptor = value;
HandleAdaptorChanged (adaptor);
- has_limits = adaptor is FSpot.ILimitable;
+ has_limits = adaptor is FSpot.ILimitable;
if (has_limits) {
min_limit.SetPosition (0, false);
@@ -54,11 +54,11 @@ namespace FSpot {
}
if (adaptor is TimeAdaptor) {
- MainWindow.ToolTips.SetTip (left, Catalog.GetString ("More dates"), null);
- MainWindow.ToolTips.SetTip (right, Catalog.GetString ("More dates"), null);
+ left.TooltipText = Catalog.GetString ("More dates");
+ right.TooltipText = Catalog.GetString ("More dates");
} else {
- MainWindow.ToolTips.SetTip (left, Catalog.GetString ("More"), null);
- MainWindow.ToolTips.SetTip (right, Catalog.GetString ("More"), null);
+ left.TooltipText = Catalog.GetString ("More");
+ right.TooltipText = Catalog.GetString ("More");
}
adaptor.Changed += HandleAdaptorChanged;
@@ -68,6 +68,15 @@ namespace FSpot {
}
}
+ public bool GlassUpdating {
+ get {
+ return glass.GlassUpdating;
+ }
+ set {
+ glass.GlassUpdating = value;
+ }
+ }
+
public int GlassPosition {
get {
return glass.Position;
@@ -171,10 +180,14 @@ namespace FSpot {
Gdk.Rectangle box = new Box (this, position).Bounds;
- if (box.Right > background.Right)
- Offset -= box.X + box.Width - (background.X + background.Width);
- else if (box.X < background.X)
- Offset += background.X - box.X;
+ // Only scroll to position if we are not dragging
+ if (!glass.Dragging)
+ {
+ if (box.Right > background.Right)
+ Offset -= box.X + box.Width - (background.X + background.Width);
+ else if (box.X < background.X)
+ Offset += background.X - box.X;
+ }
}
private int scroll_offset;
@@ -224,7 +237,7 @@ namespace FSpot {
} else {
int upper = (int)position;
while (upper < box_counts.Length && box_counts [upper] == 0)
- upper++;
+ upper++;
int lower = (int)position;
while (lower >= 0 && box_counts [lower] == 0)
@@ -295,9 +308,9 @@ namespace FSpot {
int position;
if (BoxHit (x, y, out position)) {
BoxXHitFilled (x, out position);
- glass.Dragging = true;
+ glass.UpdateGlass = true;
glass.SetPosition (position);
- glass.Dragging = false;
+ glass.UpdateGlass = false;
return true;
}
}
@@ -512,10 +525,10 @@ namespace FSpot {
{
Gtk.Menu order_menu = new Gtk.Menu();
- order_menu.Append (MainWindow.Toplevel.ReverseOrderAction.CreateMenuItem ());
+ order_menu.Append (App.Instance.Organizer.ReverseOrderAction.CreateMenuItem ());
GtkUtil.MakeMenuItem (order_menu, Catalog.GetString ("_Clear Date Range"),
- MainWindow.Toplevel.HandleClearDateRange);
+ App.Instance.Organizer.HandleClearDateRange);
if (args != null)
order_menu.Popup (null, null, null, args.Button, args.Time);
@@ -529,6 +542,8 @@ namespace FSpot {
protected GroupSelector selector;
protected Delay timer;
public bool Dragging;
+ public bool UpdateGlass;
+ public bool GlassUpdating;
public Point DragStart;
public Manipulator (GroupSelector selector)
@@ -555,7 +570,7 @@ namespace FSpot {
else
return 0;
}
- }
+ }
public virtual void StartDrag (double x, double y, uint time)
{
@@ -563,7 +578,7 @@ namespace FSpot {
//timer.Start ();
Dragging = true;
DragStart.X = (int)x;
- DragStart.Y = (int)y;
+ DragStart.Y = (int)y;
}
private bool DragTimeout ()
@@ -588,16 +603,31 @@ namespace FSpot {
public virtual void UpdateDrag (double x, double y)
{
Rectangle bounds = Bounds ();
-
- int scroll = selector.background.X - bounds.Left;
- if (scroll > 0 && selector.Offset < 0) {
- selector.Offset = Math.Min (selector.Offset + scroll, 0);
- if (selector.Offset == 0)
- return;
+ double drag_lower_limit = (selector.background.Left) - (bounds.Width/2);
+ double drag_upper_limit = (selector.background.Right) - (bounds.Width/2);
+ double calX = DragStart.X + (x - DragStart.X);
+
+ if (calX >= drag_lower_limit && calX <= drag_upper_limit) {
+ if (selector.right_delay.IsPending)
+ selector.right_delay.Stop();
+
+ if (selector.left_delay.IsPending)
+ selector.left_delay.Stop();
+
+ DragOffset = (int)x - DragStart.X;
+ } else if (calX >= drag_upper_limit && selector.right.Sensitive && !selector.right_delay.IsPending) {
+ // Ensure selector is at the limit
+ if (bounds.Left != drag_upper_limit)
+ DragOffset = (int)drag_upper_limit - DragStart.X;
+ selector.Offset -= 10;
+ selector.right_delay.Start();
+ } else if (calX <= drag_lower_limit && selector.left.Sensitive && !selector.left_delay.IsPending) {
+ // Ensure selector is at the limit
+ if (bounds.Left != drag_lower_limit)
+ DragOffset = (int)drag_lower_limit - DragStart.X;
+ selector.Offset += 10;
+ selector.left_delay.Start();
}
-
- //System.Console.WriteLine ("scroll {0}, x {1}", scroll, x);
- DragOffset = (int)x - DragStart.X;
}
public virtual void EndDrag (double x, double y)
@@ -609,13 +639,13 @@ namespace FSpot {
int position;
DragOffset = 0;
+ Dragging = false;
if (selector.BoxXHit (middle, out position)) {
this.SetPosition (position);
State = StateType.Prelight;
} else {
State = selector.State;
}
- Dragging = false;
}
private StateType state;
@@ -696,7 +726,7 @@ namespace FSpot {
private void UpdatePopupPosition ()
{
- int x = 0, y = 0;
+ int x = 0, y = 0;
Rectangle bounds = Bounds ();
Requisition requisition = popup_window.SizeRequest ();
popup_window.Resize (requisition.Width, requisition.Height);
@@ -708,6 +738,21 @@ namespace FSpot {
popup_window.Move (x, y);
}
+ public void MaintainPosition()
+ {
+ Rectangle box = Bounds ();
+ double middle = box.X + (box.Width / 2.0);
+ int current_position;
+
+ if (selector.BoxXHit (middle, out current_position)) {
+ if (current_position != drag_position)
+ popup_label.Text = selector.Adaptor.GlassLabel (current_position);
+ drag_position = current_position;
+ }
+ UpdatePopupPosition ();
+ selector.ScrollTo (drag_position);
+ }
+
public override void StartDrag (double x, double y, uint time)
{
if (!PositionValid (Position))
@@ -726,14 +771,8 @@ namespace FSpot {
double middle = box.X + (box.Width / 2.0);
int current_position;
- base.UpdateDrag (x, y);
- if (selector.BoxXHit (middle, out current_position)) {
- if (current_position != drag_position)
- popup_label.Text = selector.Adaptor.GlassLabel (current_position);
- drag_position = current_position;
- }
- UpdatePopupPosition ();
- selector.ScrollTo (drag_position);
+ base.UpdateDrag (x, y);
+ MaintainPosition();
}
public override void EndDrag (double x, double y)
@@ -745,18 +784,24 @@ namespace FSpot {
int position;
DragOffset = 0;
-
+ Dragging = false;
+
selector.BoxXHitFilled (middle, out position);
+ UpdateGlass = true;
this.SetPosition (position);
+ UpdateGlass = false;
State = StateType.Prelight;
- Dragging = false;
popup_window.Hide ();
}
private Rectangle InnerBounds ()
{
Rectangle box = new Box (selector, Position).Bounds;
- box.X += DragOffset;
+ if (Dragging) {
+ box.X = DragStart.X + DragOffset;
+ } else {
+ box.X += DragOffset;
+ }
return box;
}
@@ -814,9 +859,11 @@ namespace FSpot {
public override void PositionChanged ()
{
- if (Dragging)
+ GlassUpdating = true;
+ if (Dragging || UpdateGlass)
selector.adaptor.SetGlass (Position);
selector.ScrollTo (Position);
+ GlassUpdating = false;
}
@@ -838,7 +885,12 @@ namespace FSpot {
int limit_offset = limit_type == LimitType.Max ? 1 : 0;
Rectangle bounds = new Rectangle (0, 0, width, selector.background.Height + handle_height);
- bounds.X = DragOffset + selector.BoxX (Position + limit_offset) - bounds.Width /2;
+
+ if (Dragging) {
+ bounds.X = DragStart.X + DragOffset;
+ } else {
+ bounds.X = DragOffset + selector.BoxX (Position + limit_offset) - bounds.Width /2;
+ }
bounds.Y = selector.background.Y - handle_height/2;
return bounds;
}
@@ -998,12 +1050,18 @@ namespace FSpot {
private bool HandleScrollRight ()
{
+ if (glass.Dragging)
+ glass.MaintainPosition ();
+
Offset -= 10;
return true;
}
private bool HandleScrollLeft ()
{
+ if (glass.Dragging)
+ glass.MaintainPosition ();
+
Offset += 10;
return true;
}
diff --git a/src/Histogram.cs b/src/Histogram.cs
index f9c6d61..66e4a2e 100644
--- a/src/Histogram.cs
+++ b/src/Histogram.cs
@@ -186,9 +186,9 @@ namespace FSpot {
{
Gtk.Application.Init ();
Gdk.Pixbuf pixbuf = new Gdk.Pixbuf (args [0]);
- System.Console.WriteLine ("loaded {0}", args [0]);
+ Log.DebugFormat ("loaded {0}", args [0]);
Histogram hist = new Histogram ();
- System.Console.WriteLine ("loaded histgram", args [0]);
+ Log.DebugFormat ("loaded histgram", args [0]);
Gtk.Window win = new Gtk.Window ("display");
Gtk.Image image = new Gtk.Image ();
diff --git a/src/IOChannel.cs b/src/IOChannel.cs
index d7e357a..860a56d 100644
--- a/src/IOChannel.cs
+++ b/src/IOChannel.cs
@@ -2,6 +2,7 @@ using System;
using System.IO;
using System.Runtime.InteropServices;
using GLib;
+using Hyena;
namespace FSpot {
@@ -129,7 +130,7 @@ namespace FSpot {
status = g_io_channel_flush (handle, out error);
if (status != IOStatus.Normal && status != IOStatus.Eof)
- System.Console.WriteLine ("IOChannel status = {0}", status);
+ Hyena.Log.DebugFormat ("IOChannel status = {0}", status);
if (error != IntPtr.Zero)
throw new GException (error);
@@ -178,7 +179,7 @@ namespace FSpot {
}
if (status != IOStatus.Normal && status != IOStatus.Eof)
- System.Console.WriteLine ("IOChannel status = {0}", status);
+ Hyena.Log.DebugFormat ("IOChannel status = {0}", status);
if (error != IntPtr.Zero)
throw new GException (error);
@@ -232,41 +233,9 @@ namespace FSpot {
End
}
- [DllImport("libglib-2.0-0.dll")]
- static extern IOStatus g_io_channel_seek_position (HandleRef handle, long offset, SeekType type, out IntPtr error);
-
public override long Seek (long position, SeekOrigin origin)
{
-#if false
- // GIOChannels have the interesting property of having a seek interface
- // but no method to retrieve the current position or length.
- // we could support these actions for unix iochannels with extra work
- // but for now we'll just disable them.
-
- SeekType type;
- IntPtr error;
- long final;
-
- switch (origin) {
- case SeekOrigin.Begin:
- type = SeekType.Set;
- break;
- case SeekOrigin.Current:
-
- break;
- }
-
- g_io_channel_seek_position (handle, position, type, out error);
-
- if (error != IntPtr.Zero)
- throw new GException (error);
-
- if (SeekOrigin == SeekOrigin.Begin)
- return position;
- else
-#else
- throw new NotSupportedException ();
-#endif
+ throw new NotSupportedException ();
}
[DllImport("libglib-2.0-0.dll")]
diff --git a/src/ImageLoaderThread.cs b/src/ImageLoaderThread.cs
index 148c7da..29d61a6 100644
--- a/src/ImageLoaderThread.cs
+++ b/src/ImageLoaderThread.cs
@@ -14,42 +14,53 @@ using System.Collections.Generic;
using System.Threading;
using System;
-using FSpot.Utils;
+using Hyena;
+
public class ImageLoaderThread {
// Types.
- protected class RequestItem {
- /* The path to the image. */
- public Uri uri;
+ public class RequestItem {
+ /* The uri to the image. */
+ public SafeUri Uri { get; set; }
/* Order value; requests with a lower value get performed first. */
- public int order;
+ public int Order { get; set; }
/* The pixbuf obtained from the operation. */
- public Pixbuf result;
+ private Pixbuf result;
+ public Pixbuf Result {
+ get { return PixbufUtils.ShallowCopy (result); }
+ set { result = value; }
+ }
/* the maximium size both must be greater than zero if either is */
- public int width;
- public int height;
-
- public RequestItem (Uri uri, int order, int width, int height) {
- this.uri = uri;
- this.order = order;
- this.width = width;
- this.height = height;
+ public int Width { get; set; }
+ public int Height { get; set; }
+
+ public RequestItem (SafeUri uri, int order, int width, int height) {
+ this.Uri = uri;
+ this.Order = order;
+ this.Width = width;
+ this.Height = height;
if ((width <= 0 && height > 0) || (height <= 0 && width > 0))
throw new System.Exception ("Invalid arguments");
}
+
+ ~RequestItem () {
+ if (result != null)
+ result.Dispose ();
+ result = null;
+ }
}
// Private members.
+ static List<ImageLoaderThread> instances = new List<ImageLoaderThread> ();
/* The thread used to handle the requests. */
private Thread worker_thread;
- private static ArrayList all_worker_threads = new ArrayList ();
/* The request queue; it's shared between the threads so it
needs to be locked prior to access. */
@@ -57,8 +68,7 @@ public class ImageLoaderThread {
/* A dict of all the requests; note that the current request
isn't in the dict. */
- Dictionary<Uri, RequestItem> requests_by_uri;
-// private Hashtable requests_by_path;
+ Dictionary<SafeUri, RequestItem> requests_by_uri;
/* Current request. Request currently being handled by the
auxiliary thread. Should be modified only by the auxiliary
@@ -72,30 +82,39 @@ public class ImageLoaderThread {
thread that there are pending items in the
`processed_requests' queue. */
ThreadNotify pending_notify;
+
/* Whether a notification is pending on `pending_notify'
already or not. */
private bool pending_notify_notified;
+ volatile bool should_cancel = false;
// Public API.
- public delegate void PixbufLoadedHandler (ImageLoaderThread loader, Uri uri, int order, Pixbuf result);
+ public delegate void PixbufLoadedHandler (ImageLoaderThread loader, RequestItem result);
public event PixbufLoadedHandler OnPixbufLoaded;
public ImageLoaderThread ()
{
queue = new ArrayList ();
- requests_by_uri = new Dictionary<Uri, RequestItem> ();
+ requests_by_uri = new Dictionary<SafeUri, RequestItem> ();
// requests_by_path = Hashtable.Synchronized (new Hashtable ());
processed_requests = new Queue ();
pending_notify = new ThreadNotify (new Gtk.ReadyEvent (HandleProcessedRequests));
+ instances.Add (this);
+ }
+
+ void StartWorker ()
+ {
+ if (worker_thread != null)
+ return;
+
+ should_cancel = false;
worker_thread = new Thread (new ThreadStart (WorkerThread));
worker_thread.Start ();
-
- all_worker_threads.Add (worker_thread);
- }
+ }
int block_count;
public void PushBlock ()
@@ -112,19 +131,27 @@ public class ImageLoaderThread {
}
}
- // FIXME?
- static public void Cleanup ()
+ public void Cleanup ()
{
- foreach (Thread t in all_worker_threads)
- t.Abort ();
+ should_cancel = true;
+ if (worker_thread != null) {
+ worker_thread.Join ();
+ }
+ worker_thread = null;
}
- public void Request (Uri uri, int order)
+ public static void CleanAll ()
+ {
+ foreach (var thread in instances)
+ thread.Cleanup ();
+ }
+
+ public void Request (SafeUri uri, int order)
{
Request (uri, order, 0, 0);
}
- public virtual void Request (Uri uri, int order, int width, int height)
+ public virtual void Request (SafeUri uri, int order, int width, int height)
{
lock (queue) {
if (InsertRequest (uri, order, width, height))
@@ -132,7 +159,7 @@ public class ImageLoaderThread {
}
}
- public void Cancel (Uri uri)
+ public void Cancel (SafeUri uri)
{
lock (queue) {
RequestItem r = requests_by_uri [uri];
@@ -149,41 +176,43 @@ public class ImageLoaderThread {
{
Pixbuf orig_image;
try {
- using (FSpot.ImageFile img = FSpot.ImageFile.Create (request.uri)) {
- if (request.width > 0) {
- orig_image = img.Load (request.width, request.height);
+ using (FSpot.ImageFile img = FSpot.ImageFile.Create (request.Uri)) {
+ if (request.Width > 0) {
+ orig_image = img.Load (request.Width, request.Height);
} else {
orig_image = img.Load ();
}
}
} catch (GLib.GException e){
- System.Console.WriteLine (e.ToString ());
+ Log.Exception (e);
return;
}
if (orig_image == null)
return;
- request.result = orig_image;
+ request.Result = orig_image;
}
/* Insert the request in the queue, return TRUE if the queue actually grew.
NOTE: Lock the queue before calling. */
- private bool InsertRequest (Uri uri, int order, int width, int height)
+ private bool InsertRequest (SafeUri uri, int order, int width, int height)
{
+ StartWorker ();
+
/* Check if this is the same as the request currently being processed. */
lock(processed_requests) {
- if (current_request != null && current_request.uri == uri)
+ if (current_request != null && current_request.Uri == uri)
return false;
}
/* Check if a request for this path has already been queued. */
RequestItem existing_request;
if (requests_by_uri.TryGetValue (uri, out existing_request)) {
/* FIXME: At least for now, this shouldn't happen. */
- if (existing_request.order != order)
- Log.Warning ("BUG: Filing another request of order {0} (previously {1}) for `{2}'",
- order, existing_request.order, uri);
+ if (existing_request.Order != order)
+ Log.WarningFormat ("BUG: Filing another request of order {0} (previously {1}) for `{2}'",
+ order, existing_request.Order, uri);
queue.Remove (existing_request);
queue.Add (existing_request);
@@ -204,8 +233,9 @@ public class ImageLoaderThread {
/* The worker thread's main function. */
private void WorkerThread ()
{
+ Log.Debug (this.ToString (), "Worker starting");
try {
- while (true) {
+ while (!should_cancel) {
lock (processed_requests) {
if (current_request != null) {
processed_requests.Enqueue (current_request);
@@ -228,7 +258,7 @@ public class ImageLoaderThread {
current_request = queue [pos] as RequestItem;
queue.RemoveAt (pos);
- requests_by_uri.Remove (current_request.uri);
+ requests_by_uri.Remove (current_request.Uri);
}
ProcessRequest (current_request);
@@ -242,7 +272,7 @@ public class ImageLoaderThread {
{
if (OnPixbufLoaded != null) {
foreach (RequestItem r in results)
- OnPixbufLoaded (this, r.uri, r.order, r.result);
+ OnPixbufLoaded (this, r);
}
}
@@ -259,7 +289,7 @@ public class ImageLoaderThread {
pending_notify_notified = false;
}
-
+
EmitLoaded (results);
}
}
diff --git a/src/Imaging/Bim.cs b/src/Imaging/Bim.cs
index e214cdf..56e5a1a 100644
--- a/src/Imaging/Bim.cs
+++ b/src/Imaging/Bim.cs
@@ -1,3 +1,5 @@
+using Hyena;
+
namespace FSpot.Bim {
public enum EntryType : ushort {
ObsoleteImageInfo = 0x03e8,
@@ -193,7 +195,7 @@ namespace FSpot.Bim {
try {
//System.Console.WriteLine (System.Text.Encoding.ASCII.GetString (current.Data));
} catch (System.Exception e) {
- System.Console.WriteLine (e.ToString ());
+ Log.Exception (e);
}
entries.Add (current);
}
diff --git a/src/Imaging/Ciff.cs b/src/Imaging/Ciff.cs
index 34c6071..66425f6 100644
--- a/src/Imaging/Ciff.cs
+++ b/src/Imaging/Ciff.cs
@@ -1,5 +1,6 @@
using System;
using FSpot.Utils;
+using Hyena;
namespace FSpot.Ciff {
public enum Tag {
@@ -107,7 +108,7 @@ namespace FSpot.Ciff {
ComponentBitDepth = BitConverter.ToUInt32 (data, 16, little);
ColorBitDepth = BitConverter.ToUInt32 (data, 20, little);
ColorBW = BitConverter.ToUInt32 (data, 24, little);
- System.Console.WriteLine ("0x{0}", ColorBW.ToString ("x"));
+ Log.DebugFormat ("0x{0}", ColorBW.ToString ("x"));
}
public PixbufOrientation Orientation {
@@ -260,7 +261,7 @@ namespace FSpot.Ciff {
for (int i = 0; i < Count; i++)
{
stream.Read (buf, 0, 10);
- System.Console.WriteLine ("reading {0} {1}", i, stream.Position);
+ Log.DebugFormat ("reading {0} {1}", i, stream.Position);
Entry entry = new Entry (buf, 0, little);
entry_list.Add (entry);
}
@@ -268,10 +269,10 @@ namespace FSpot.Ciff {
public void Dump ()
{
- System.Console.WriteLine ("Dumping directory with {0} entries", entry_list.Count);
+ Log.DebugFormat ("Dumping directory with {0} entries", entry_list.Count);
for (int i = 0; i < entry_list.Count; i++) {
Entry e = (Entry) entry_list[i];
- System.Console.WriteLine ("\tentry[{0}] = {1}.{6}.{5}({4}).{2}-{3}",
+ Log.DebugFormat ("\tentry[{0}] = {1}.{6}.{5}({4}).{2}-{3}",
i, e.Tag, e.Size, e.Offset, e.Tag.ToString ("x"), (uint)e.Tag & ~(uint)Mask.StorageFormat, e.Type);
}
}
@@ -334,7 +335,7 @@ namespace FSpot.Ciff {
}
}
- public CiffFile (Uri uri) : base (uri)
+ public CiffFile (SafeUri uri) : base (uri)
{
}
@@ -426,7 +427,7 @@ namespace FSpot.Ciff {
if (data != null)
orientation = new ImageSpec (data, little).Orientation;
else
- System.Console.WriteLine ("NO ORIENTATION");
+ Log.Debug ("NO ORIENTATION");
return orientation;
}
@@ -437,7 +438,7 @@ namespace FSpot.Ciff {
byte [] date = props.ReadEntry (Tag.TimeStamp);
if (date == null) {
- System.Console.WriteLine ("NO DATE");
+ Log.Debug ("NO DATE");
return base.Date;
}
@@ -474,7 +475,7 @@ namespace FSpot.Ciff {
System.IO.Stream output = System.IO.File.Open (path, System.IO.FileMode.OpenOrCreate);
byte [] data = GetEmbeddedThumbnail ();
- System.Console.WriteLine ("data length {0}", data != null ? data.Length : -1);
+ Log.DebugFormat ("data length {0}", data != null ? data.Length : -1);
output.Write (data, 0, data.Length);
output.Close ();
*/
diff --git a/src/Imaging/DCRawFile.cs b/src/Imaging/DCRawFile.cs
index be4ba35..ad104e8 100644
--- a/src/Imaging/DCRawFile.cs
+++ b/src/Imaging/DCRawFile.cs
@@ -1,6 +1,7 @@
using System.Diagnostics;
using System.IO;
using System;
+using Hyena;
namespace FSpot {
public class Pipe : System.IO.Stream {
@@ -74,11 +75,7 @@ namespace FSpot {
public class DCRawFile : ImageFile {
const string dcraw_command = "dcraw";
- public DCRawFile (string path) : base (path)
- {
- }
-
- public DCRawFile (Uri uri) : base (uri)
+ public DCRawFile (SafeUri uri) : base (uri)
{
}
@@ -87,7 +84,7 @@ namespace FSpot {
return RawPixbufStream (uri);
}
- internal static System.IO.Stream RawPixbufStream (Uri location)
+ internal static System.IO.Stream RawPixbufStream (SafeUri location)
{
string path = location.LocalPath;
string [] args = new string [] { dcraw_command, "-h", "-w", "-c", "-t", "0", path };
@@ -115,7 +112,7 @@ namespace FSpot {
// FIXME this filename quoting is super lame
args = System.String.Format ("-h -w -c \"{0}\"", path);
- System.Console.WriteLine ("path = {0}, args = \"{1}\"", path, args);
+ Log.DebugFormat ("path = {0}, args = \"{1}\"", path, args);
using (System.Diagnostics.Process process = new System.Diagnostics.Process ()) {
process.StartInfo = new System.Diagnostics.ProcessStartInfo (dcraw_command, args);
diff --git a/src/Imaging/Exif.cs b/src/Imaging/Exif.cs
index 2a31444..55c9152 100644
--- a/src/Imaging/Exif.cs
+++ b/src/Imaging/Exif.cs
@@ -14,6 +14,7 @@ using System.Collections;
using System.Runtime.InteropServices;
using Mono.Unix;
+using Hyena;
namespace Exif {
public enum Tag {
@@ -582,7 +583,7 @@ namespace Exif {
byte [] tmp = new byte [len + 1];
System.Text.Encoding.UTF8.GetBytes (value, 0, value.Length, tmp, 0);
tmp[len] = 0;
- System.Console.WriteLine ("value = {0} len = {1}", value, len);
+ Log.DebugFormat ("value = {0} len = {1}", value, len);
SetData (tmp, 1);
}
@@ -802,7 +803,7 @@ namespace Exif {
free (data);
}
- System.Console.WriteLine ("Saved {0} bytes", content.Length);
+ Log.DebugFormat ("Saved {0} bytes", content.Length);
return content;
}
diff --git a/src/Imaging/ImageFile.cs b/src/Imaging/ImageFile.cs
index 5676fba..dab045a 100644
--- a/src/Imaging/ImageFile.cs
+++ b/src/Imaging/ImageFile.cs
@@ -1,3 +1,5 @@
+using Hyena;
+
using System;
using System.IO;
using System.Collections;
@@ -17,24 +19,24 @@ namespace FSpot {
}
public class ImageFile : IDisposable {
- protected Uri uri;
+ protected SafeUri uri;
static Hashtable name_table;
internal static Hashtable NameTable { get { return name_table; } }
-
- public ImageFile (string path)
- {
- this.uri = UriUtils.PathToFileUri (path);
- }
- public ImageFile (Uri uri)
+ public ImageFile (SafeUri uri)
{
this.uri = uri;
}
+
+ ~ImageFile ()
+ {
+ Dispose ();
+ }
protected Stream Open ()
{
- Log.Debug ("open uri = {0}", uri.ToString ());
+ Log.DebugFormat ("open uri = {0}", uri.ToString ());
// if (uri.IsFile)
// return new FileStream (uri.LocalPath, FileMode.Open);
return new GLib.GioStream (GLib.FileFactory.NewForUri (uri).Read (null));
@@ -99,7 +101,7 @@ namespace FSpot {
}
}
- public Uri Uri {
+ public SafeUri Uri {
get { return this.uri; }
}
@@ -129,7 +131,6 @@ namespace FSpot {
return rotated;
}
- [Obsolete ("Use an Async way to load the pixbuf")]
public virtual Gdk.Pixbuf Load ()
{
using (Stream stream = PixbufStream ()) {
@@ -138,7 +139,6 @@ namespace FSpot {
}
}
- [Obsolete ("Use an Async way to load the pixbuf")]
public virtual Gdk.Pixbuf Load (int max_width, int max_height)
{
System.IO.Stream stream = PixbufStream ();
@@ -169,51 +169,41 @@ namespace FSpot {
public virtual System.DateTime Date
{
get {
- // FIXME mono uses the file change time (ctime) incorrectly
- // as the creation time so we try to work around that slightly
- GFileInfo info = GLib.FileFactory.NewForUri (uri).QueryInfo ("time::modified,time::created", GLib.FileQueryInfoFlags.None, null);
- DateTime write = NativeConvert.ToDateTime ((long)info.GetAttributeULong ("time::modified"));
- DateTime create = NativeConvert.ToDateTime ((long)info.GetAttributeULong ("time::created"));
-
- if (create < write)
- return create;
- else
- return write;
+ GFileInfo info = GLib.FileFactory.NewForUri (uri).QueryInfo ("time::modified", GLib.FileQueryInfoFlags.None, null);
+ DateTime create = NativeConvert.ToDateTime ((long)info.GetAttributeULong ("time::modified"));
+ return create;
}
}
- [Obsolete ("use HasLoader (System.Uri) instead")]
- public static bool HasLoader (string path)
- {
- return HasLoader (UriUtils.PathToFileUri (path));
- }
-
- public static bool HasLoader (Uri uri)
+ public static bool HasLoader (SafeUri uri)
{
return GetLoaderType (uri) != null;
}
- static Type GetLoaderType (Uri uri)
+ static Type GetLoaderType (SafeUri uri)
{
- string path = uri.AbsolutePath;
- string extension = System.IO.Path.GetExtension (path).ToLower ();
+ string extension = uri.GetExtension ().ToLower ();
+ if (extension == ".thm") {
+ // Ignore video thumbnails.
+ return null;
+ }
+
Type t = (Type) name_table [extension];
if (t == null) {
- GLib.FileInfo info = GLib.FileFactory.NewForUri (uri).QueryInfo ("standard::type,standard::content-type", GLib.FileQueryInfoFlags.None, null);
- t = (Type) name_table [info.ContentType];
+ // check if GIO can find the file, which is not the case
+ // with filenames with invalid encoding
+ GLib.File f = GLib.FileFactory.NewForUri (uri);
+ if (f.QueryExists (null)) {
+ GLib.FileInfo info = f.QueryInfo ("standard::type,standard::content-type", GLib.FileQueryInfoFlags.None, null);
+ t = (Type) name_table [info.ContentType];
+ }
}
return t;
}
- [Obsolete ("use Create (System.Uri) instead")]
- public static ImageFile Create (string path)
- {
- return Create (UriUtils.PathToFileUri (path));
- }
-
- public static ImageFile Create (Uri uri)
+ public static ImageFile Create (SafeUri uri)
{
System.Type t = GetLoaderType (uri);
ImageFile img;
diff --git a/src/Imaging/JpegFile.cs b/src/Imaging/JpegFile.cs
index c82e6dc..e96ca6e 100644
--- a/src/Imaging/JpegFile.cs
+++ b/src/Imaging/JpegFile.cs
@@ -1,9 +1,9 @@
-#define USE_TIFF
using System;
using System.IO;
using FSpot.Xmp;
using FSpot.Tiff;
using FSpot.Utils;
+using Hyena;
namespace FSpot {
public interface IThumbnailContainer {
@@ -21,19 +21,15 @@ namespace FSpot {
get { return false; }
}
- public JpegFile (Uri uri) : base (uri)
+ public JpegFile (SafeUri uri) : base (uri)
{
try {
// Console.WriteLine ("approximate quality = {0}", Header.GuessQuality ());
} catch (Exception e) {
- System.Console.WriteLine (e);
+ Log.Exception (e);
}
}
- public JpegFile (string path) : base (path)
- {
- }
-
public JpegHeader Header {
get {
if (header == null) {
@@ -64,7 +60,7 @@ namespace FSpot {
header = new JpegHeader (s, true);
s.Position = 0;
} else
- Console.WriteLine ("{0} can not seek :(", s);
+ Log.DebugFormat ("{0} can not seek :(", s);
return s;
}
@@ -80,7 +76,6 @@ namespace FSpot {
public override string Description {
get {
-#if USE_TIFF
try {
SubdirectoryEntry sub = (SubdirectoryEntry) ExifHeader.Directory.Lookup (TagId.ExifIfdPointer);
if (sub != null) {
@@ -88,25 +83,9 @@ namespace FSpot {
if (entry != null)
return entry.ValueAsString [0];
}
- } catch (System.Exception e) {
- Console.WriteLine (e);
+ } catch (System.Exception) {
}
- return null;
-#else
- try {
- Exif.ExifContent exif_content = this.ExifData.GetContents (Exif.Ifd.Exif);
- Exif.ExifEntry entry = exif_content.Lookup (Exif.Tag.UserComment);
-
- if (entry == null)
- return null;
-
- UserComment comment = new UserComment (entry.Data, entry.ByteOrder == Exif.ByteOrder.Intel);
- return comment.Value;
- } catch (Exception e) {
- // errors here shouldn't be fatal
- return null;
- }
-#endif
+ return String.Empty;
}
}
@@ -275,23 +254,11 @@ namespace FSpot {
public override PixbufOrientation GetOrientation ()
{
PixbufOrientation orientation = PixbufOrientation.TopLeft;
-#if USE_TIFF
try {
DirectoryEntry e = ExifHeader.Directory.Lookup (TagId.Orientation);
orientation = (PixbufOrientation)e.ValueAsLong [0];
} catch {
- System.Console.WriteLine ("error checking orientation");
- }
-#else
-Console.WriteLine (">>>");
- Exif.ExifEntry e = this.ExifData.GetContents (Exif.Ifd.Zero).Lookup (Exif.Tag.Orientation);
-Console.WriteLine ("<<<");
-
- if (e != null) {
- ushort [] value = e.GetDataUShort ();
- orientation = (PixbufOrientation) value [0];
}
-#endif
if (orientation < PixbufOrientation.TopLeft || orientation > PixbufOrientation.LeftBottom)
orientation = PixbufOrientation.TopLeft;
@@ -323,9 +290,8 @@ Console.WriteLine ("<<<");
public override System.DateTime Date {
get {
- System.DateTime time;
+ System.DateTime time = base.Date;
try {
-#if USE_TIFF
SubdirectoryEntry sub = (SubdirectoryEntry) ExifHeader.Directory.Lookup (TagId.ExifIfdPointer);
DirectoryEntry e;
@@ -341,19 +307,8 @@ Console.WriteLine ("<<<");
if (e != null)
return DirectoryEntry.DateTimeFromString (e.StringValue);
- return base.Date;
-#else
- string time_str = "";
- time_str = ExifData.LookupFirstValue (Exif.Tag.DateTimeOriginal);
-
- if (time_str == null || time_str == "")
- time_str = ExifData.LookupFirstValue (Exif.Tag.DateTime);
-
- time = Exif.ExifUtil.DateTimeFromString (time_str);
-#endif
- } catch (System.Exception e) {
- Console.WriteLine (e);
- time = base.Date;
+ return time;
+ } catch (System.Exception) {
}
return time;
}
diff --git a/src/Imaging/JpegHeader.cs b/src/Imaging/JpegHeader.cs
index 1fd2e5a..ef172b1 100644
--- a/src/Imaging/JpegHeader.cs
+++ b/src/Imaging/JpegHeader.cs
@@ -23,6 +23,7 @@ using System.Collections;
using FSpot.Xmp;
using FSpot;
using FSpot.Utils;
+using Hyena;
#if ENABLE_NUNIT
using NUnit.Framework;
@@ -190,9 +191,6 @@ public class JpegHeader : SemWeb.StatementSource {
byte [] raw = new byte [2];
ushort length;
- if (stream.Length - stream.Position < 2)
- return null;
-
// FIXME there is a potential loop here.
int read = Read (stream, raw, 0, 2);
@@ -304,7 +302,7 @@ public class JpegHeader : SemWeb.StatementSource {
if (m != null)
return new Cms.Profile (m.Data, name.Length, m.Data.Length - name.Length);
} catch (System.Exception e) {
- System.Console.WriteLine (e);
+ Log.Exception (e);
}
FSpot.Tiff.Header exif = GetExifHeader ();
@@ -499,8 +497,8 @@ public class JpegHeader : SemWeb.StatementSource {
try {
Load (stream, metadata_only);
} catch (System.Exception e) {
- Console.WriteLine ("Exeption while reading jpeg headers");
- Console.WriteLine(e);
+ Log.Warning ("Exeption while reading jpeg headers");
+ Log.Exception(e);
}
}
@@ -650,128 +648,4 @@ public class JpegHeader : SemWeb.StatementSource {
return image_data;
}
}
-
-#if ENABLE_NUNIT
- [TestFixture]
- public class Tests {
- int quality = 75;
-
- public string CreateFile ()
- {
- Gdk.Pixbuf test = new Gdk.Pixbuf (null, "f-spot-32.png");
- string path = FSpot.ImageFile.TempPath ("joe.jpg");
- string desc = "\x00a9 Novell Inc.";
- PixbufOrientation orient = PixbufOrientation.TopRight;
-
- PixbufUtils.SaveJpeg (test, path, quality, new Exif.ExifData ());
- FSpot.JpegFile jimg = new FSpot.JpegFile (path);
- jimg.SetDescription (desc);
- jimg.SetOrientation (orient);
- jimg.SaveMetaData (path);
-
- return path;
- }
-
- [Test]
- public void Load ()
- {
- string path = CreateFile ();
-
- using (Stream stream = File.OpenRead (path)) {
- JpegHeader jhead = new JpegHeader (stream);
-
- Assert.AreEqual (((Marker)jhead.Markers [0]).Type, JpegMarker.Soi);
- Assert.AreEqual (((Marker)jhead.Markers [1]).GetName (), "JFIF");
- Assert.AreEqual (((Marker)jhead.Markers [1]).Type, JpegMarker.App0);
- Assert.AreEqual (((Marker)jhead.Markers [2]).GetName (), "Exif");
- Assert.AreEqual (((Marker)jhead.Markers [2]).Type, JpegMarker.App1);
-
- // NOTE the currently we don't store the Eoi as the last marker
- Assert.AreEqual (((Marker)jhead.Markers [jhead.Markers.Count -1]).Type, JpegMarker.Sos);
-
- // NOTE this is kind of sill but it might help
- Assert.IsTrue (Math.Abs (jhead.GuessQuality () - quality) <= 1);
-
- Assert.IsNotNull (jhead.GetExifHeader ());
- }
-
- File.Delete (path);
- }
-
- [Test]
- public void Save ()
- {
- string in_path = CreateFile ();
- string out_path = ImageFile.TempPath ("output.jpg");
- JpegHeader source;
- JpegHeader dest;
-
- using (Stream orig = File.OpenRead (in_path)) {
- source = new JpegHeader (orig);
-
- using (Stream output = File.OpenWrite (out_path)) {
- source.Save (output);
- }
-
- using (Stream result = File.OpenRead (out_path)) {
- dest = new JpegHeader (result);
-
- Assert.AreEqual (source.Markers.Count, dest.Markers.Count);
- Assert.AreEqual (source.GuessQuality (), dest.GuessQuality ());
- Assert.AreEqual (orig.Length, result.Length);
- for (int i = 0; i < source.Markers.Count; i++) {
- Marker d = (Marker) dest.Markers [i];
- Marker s = (Marker) source.Markers [i];
-
- Assert.AreEqual (d.Type, s.Type);
- Assert.AreEqual (d.GetName (), s.GetName ());
-
- if (d.Data != null) {
- Assert.AreEqual (d.Data.Length, s.Data.Length);
-
- for (int j = 0; j < d.Data.Length; j++) {
- Assert.AreEqual (d.Data [j], s.Data [j]);
- }
- } else {
- Assert.AreEqual (d.Data, s.Data);
- }
- }
- }
- }
-
- File.Delete (in_path);
- File.Delete (out_path);
- }
- }
-#endif
-
-#if false
- public static int Main (string [] args)
- {
- JpegHeader data = new JpegHeader (args [0]);
- byte [] value = data.GetRawXmp ();
-
- if (value != null) {
- string xml = System.Text.Encoding.UTF8.GetString (value, 29, value.Length - 29);
- System.Console.WriteLine (xml);
- }
-
- value = data.GetRaw ("ICC_PROFILE");
- if (value != null) {
- System.IO.FileStream stream = new System.IO.FileStream ("profile.icc", System.IO.FileMode.Create);
- stream.Write (value, 12, value.Length - 12);
- stream.Close ();
- }
-
- value = data.GetRawExif ();
-
-
- //System.IO.Stream ostream = System.IO.File.Open ("/home/lewing/test.jpg", System.IO.FileMode.OpenOrCreate);
- //data.Save (ostream);
- //ostream.Position = 0;
- //data = new JpegHeader (ostream);
-
- return 0;
- }
-#endif
}
diff --git a/src/Imaging/MrwFile.cs b/src/Imaging/MrwFile.cs
index b4693df..df334aa 100644
--- a/src/Imaging/MrwFile.cs
+++ b/src/Imaging/MrwFile.cs
@@ -1,4 +1,5 @@
using FSpot.Tiff;
+using Hyena;
namespace FSpot.Mrw {
// Minolta raw format
@@ -20,7 +21,7 @@ namespace FSpot.Mrw {
byte [] tmp = new byte [8];
stream.Read (tmp, 0, tmp.Length);
System.Array.Copy (tmp, name, name.Length);
- System.Console.WriteLine (this.Name);
+ Log.Debug (this.Name);
Length = BitConverter.ToUInt32 (tmp, name.Length, false);
stream.Position = stream.Position + Length;
}
@@ -129,10 +130,10 @@ namespace FSpot.Mrw {
if (header == null) {
try {
System.IO.MemoryStream mem = new System.IO.MemoryStream (this.Data);
- System.Console.WriteLine ("before header");
+ Log.Debug ("before header");
header = new Header (mem);
} catch (System.Exception e) {
- System.Console.WriteLine (e.ToString ());
+ Log.Exception (e);
}
}
@@ -173,7 +174,7 @@ namespace FSpot.Mrw {
MrmBlock mrm;
FSpot.Tiff.Header header;
- public MrwFile (System.Uri uri) : base (uri)
+ public MrwFile (SafeUri uri) : base (uri)
{
}
@@ -182,10 +183,6 @@ namespace FSpot.Mrw {
get { return false; }
}
- public MrwFile (string path) : base (path)
- {
- }
-
public FSpot.Tiff.Header Header {
get {
if (mrm == null)
@@ -243,7 +240,7 @@ namespace FSpot.Mrw {
}
}
} catch (System.Exception e) {
- System.Console.WriteLine (e.ToString ());
+ Log.Exception (e);
}
}
}
diff --git a/src/Imaging/PngFile.cs b/src/Imaging/PngFile.cs
index cccf6e6..cc64eec 100644
--- a/src/Imaging/PngFile.cs
+++ b/src/Imaging/PngFile.cs
@@ -5,6 +5,7 @@ using System.IO;
using FSpot.Xmp;
using System.Collections;
using System.Reflection;
+using Hyena;
namespace FSpot.Png {
public class PngFile : ImageFile, SemWeb.StatementSource {
@@ -31,11 +32,7 @@ namespace FSpot.Png {
get { return Header.Chunks; }
}
- public PngFile (System.Uri uri) : base (uri)
- {
- }
-
- public PngFile (string path) : base (path)
+ public PngFile (SafeUri uri) : base (uri)
{
}
@@ -101,7 +98,7 @@ namespace FSpot.Png {
System.DateTime time = System.DateTime.Parse (text.Text);
MetadataStore.AddLiteral (sink, "xmp:CreateDate", time.ToString ("yyyy-MM-ddThh:mm:ss"));
} catch (System.Exception e) {
- System.Console.WriteLine (e.ToString ());
+ Log.Exception (e);
}
break;
}
@@ -143,21 +140,9 @@ namespace FSpot.Png {
}
}
- byte compression;
- public byte Compression {
- get {
- return compression;
- }
- set {
- if (compression != 0)
- throw new System.Exception ("Unknown compression method");
- }
- }
-
public ZtxtChunk (string keyword, string text) : base ()
{
Name = "zTXt";
- Compression = 0;
this.keyword = keyword;
}
@@ -181,7 +166,7 @@ namespace FSpot.Png {
int i = 0;
keyword = GetString (ref i);
i++;
- Compression = data [i++];
+ i++;
text_data = Chunk.Inflate (data, i, data.Length - i);
}
@@ -318,7 +303,7 @@ namespace FSpot.Png {
keyword = GetString (ref i);
i++;
compressed = (data [i++] != 0);
- Compression = data [i++];
+ i++;
Language = GetString (ref i);
i++;
LocalizedKeyword = GetString (ref i, System.Text.Encoding.UTF8);
@@ -351,7 +336,7 @@ namespace FSpot.Png {
stream.WriteByte (0);
stream.WriteByte ((byte)(compressed ? 1 : 0));
- stream.WriteByte (Compression);
+ stream.WriteByte (0);
if (Language != null && Language != System.String.Empty) {
tmp = Latin1.GetBytes (Language);
@@ -389,15 +374,10 @@ namespace FSpot.Png {
this.Language = language;
this.LocalizedKeyword = System.String.Empty;
this.compressed = compressed;
- this.Compression = 0;
}
}
public class TimeChunk : Chunk {
- //public static string Name = "tIME";
-
- System.DateTime time;
-
public System.DateTime Time {
get {
return new System.DateTime (FSpot.BitConverter.ToUInt16 (data, 0, false),
@@ -873,25 +853,11 @@ namespace FSpot.Png {
if (col < width) {
inflater.Fill ();
- System.Console.WriteLine ("short read missing {0} {1} {2}", width - col, row, height);
+ Log.DebugFormat ("short read missing {0} {1} {2}", width - col, row, height);
}
}
}
- private static byte PaethPredict (byte a, byte b, byte c)
- {
- int p = a + b - c;
- int pa = System.Math.Abs (p - a);
- int pb = System.Math.Abs (p - b);
- int pc = System.Math.Abs (p - c);
- if (pa <= pb && pa <= pc)
- return a;
- else if (pb <= pc)
- return b;
- else
- return c;
- }
-
public void ReconstructRow (int row, int channels)
{
int offset = row * width;
@@ -1092,7 +1058,7 @@ namespace FSpot.Png {
}
IhdrChunk ihdr = (IhdrChunk) Chunks [0];
- System.Console.WriteLine ("Attempting to to inflate photo {0}.{1}({2}, {3})", ihdr.Color, ihdr.Depth, ihdr.Width, ihdr.Height);
+ Log.DebugFormat ("Attempting to to inflate photo {0}.{1}({2}, {3})", ihdr.Color, ihdr.Depth, ihdr.Width, ihdr.Height);
ScanlineDecoder decoder = new ScanlineDecoder (ci, ihdr.GetScanlineLength (0), ihdr.Height);
decoder.Fill ();
//Gdk.Pixbuf pixbuf = decoder.GetPixbuf ();
@@ -1213,7 +1179,7 @@ namespace FSpot.Png {
if (time != null)
System.Console.Write(" Time {0}", time.Time);
- System.Console.WriteLine (System.String.Empty);
+ Log.Debug (System.String.Empty);
#endif
if (chunk.Name == "IEND")
@@ -1328,7 +1294,7 @@ namespace FSpot.Png {
try {
return new Profile (icc.Profile);
} catch (System.Exception ex) {
- System.Console.WriteLine ("Error trying to decode embedded profile" + ex.ToString ());
+ Log.Error ("Error trying to decode embedded profile" + ex.ToString ());
}
}
diff --git a/src/Imaging/PnmFile.cs b/src/Imaging/PnmFile.cs
index fd73f34..304f4a4 100644
--- a/src/Imaging/PnmFile.cs
+++ b/src/Imaging/PnmFile.cs
@@ -2,10 +2,7 @@ using FSpot.Imaging;
using SemWeb;
using System;
using System.IO;
-
-#if ENABLE_NUNIT
-using NUnit.Framework;
-#endif
+using Hyena;
namespace FSpot.Pnm {
public class PnmFile : ImageFile, StatementSource {
@@ -15,11 +12,7 @@ namespace FSpot.Pnm {
get { return false; }
}
- public PnmFile (Uri uri) : base (uri)
- {
- }
-
- public PnmFile (string path) : base (path)
+ public PnmFile (SafeUri uri) : base (uri)
{
}
@@ -45,7 +38,7 @@ namespace FSpot.Pnm {
public void Dump ()
{
- System.Console.WriteLine ("Loading ({0} - {1},{2} - {3})",
+ Log.DebugFormat ("Loading ({0} - {1},{2} - {3})",
Magic, Width, Height, Max);
}
}
@@ -117,25 +110,6 @@ namespace FSpot.Pnm {
return data;
}
- static Gdk.Pixbuf LoadRGB16 (Stream stream, int width, int height)
- {
- Gdk.Pixbuf pixbuf = new Gdk.Pixbuf (Gdk.Colorspace.Rgb, false, 8, width, height);
- unsafe {
- byte *pixels = (byte *)pixbuf.Pixels;
- int length = width * 6;
- byte [] buffer = new byte [length];
-
- for (int row = 0; row < height; row++) {
- stream.Read (buffer, 0, buffer.Length);
- for (int i = 0; i < width * 3; i++) {
- pixels [i] = (byte) (BitConverter.ToUInt16 (buffer, i * 2, false) >> 8);
- }
- pixels += pixbuf.Rowstride;
- }
- }
- return pixbuf;
- }
-
static Gdk.Pixbuf LoadRGB8 (Stream stream, int width, int height)
{
Gdk.Pixbuf pixbuf = new Gdk.Pixbuf (Gdk.Colorspace.Rgb, false, 8, width, height);
@@ -215,7 +189,7 @@ namespace FSpot.Pnm {
return pixbuf;
}
} catch (System.Exception e) {
- System.Console.WriteLine (e.ToString ());
+ Log.Exception (e);
}
return null;
}
@@ -281,38 +255,4 @@ namespace FSpot.Pnm {
}
}
}
-
-#if ENABLE_NUNIT
- [TestFixture]
- public class Tests {
- [Test]
- public void SaveLoad ()
- {
- using (Gdk.Pixbuf pixbuf = new Gdk.Pixbuf (null, "f-spot-32.png")) {
- Gdk.Pixbuf source = pixbuf;
- if (pixbuf.HasAlpha)
- source = PixbufUtils.Flatten (pixbuf);
-
- string path = ImageFile.TempPath ("test.ppm");
- PnmFile pnm = new PnmFile (path);
- using (Stream stream = File.OpenWrite (path)) {
- pnm.Save (source, stream);
- }
-
- pnm = new PnmFile (path);
-
- using (Gdk.Pixbuf saved = pnm.Load ()) {
- Assert.IsNotNull (saved);
- Assert.AreEqual (saved.Width, source.Width);
- Assert.AreEqual (saved.Height, source.Height);
- }
-
- if (source != pixbuf)
- source.Dispose ();
-
- File.Delete (path);
- }
- }
- }
-#endif
}
diff --git a/src/Imaging/RafFile.cs b/src/Imaging/RafFile.cs
index 5bcb3dd..13a191b 100644
--- a/src/Imaging/RafFile.cs
+++ b/src/Imaging/RafFile.cs
@@ -1,4 +1,5 @@
using FSpot.Utils;
+using Hyena;
namespace FSpot.Raf {
// This is reverse engineered from looking at the sample files I have
@@ -28,7 +29,7 @@ namespace FSpot.Raf {
get { return false; }
}
- public RafFile (System.Uri uri) : base (uri)
+ public RafFile (SafeUri uri) : base (uri)
{
}
@@ -37,7 +38,7 @@ namespace FSpot.Raf {
get {
if (exif_data == null)
exif_data = new Exif.ExifData(uri.LocalPath);
- System.Console.WriteLine ("loading exif data");
+ Log.Debug ("loading exif data");
return exif_data;
}
}
@@ -57,10 +58,6 @@ namespace FSpot.Raf {
return orientation;
}
- public RafFile (string path) : base (path)
- {
- }
-
public override System.IO.Stream PixbufStream ()
{
byte [] data = GetEmbeddedJpeg ();
diff --git a/src/Imaging/SvgFile.cs b/src/Imaging/SvgFile.cs
index 428758f..bf51ec5 100644
--- a/src/Imaging/SvgFile.cs
+++ b/src/Imaging/SvgFile.cs
@@ -1,4 +1,5 @@
using System;
+using Hyena;
namespace FSpot.Svg {
public class SvgFile : ImageFile // SemWeb.StatementSource
@@ -10,11 +11,7 @@ namespace FSpot.Svg {
get { return false; }
}
- public SvgFile (Uri uri) : base (uri)
- {
- }
-
- public SvgFile (string path) : base (path)
+ public SvgFile (SafeUri uri) : base (uri)
{
}
@@ -37,7 +34,7 @@ namespace FSpot.Svg {
store.Dump ();
} catch (System.Exception e) {
- System.Console.WriteLine (e.ToString ());
+ Log.Error (e.ToString ());
}
}
diff --git a/src/Imaging/Tiff.cs b/src/Imaging/Tiff.cs
index 083e13e..13b2769 100644
--- a/src/Imaging/Tiff.cs
+++ b/src/Imaging/Tiff.cs
@@ -5,6 +5,7 @@ using SemWeb;
using System;
using System.IO;
using System.Collections.Generic;
+using Hyena;
namespace FSpot.Tiff {
@@ -418,7 +419,7 @@ namespace FSpot.Tiff {
try {
enc = System.Text.Encoding.GetEncoding ("euc-jp");
} catch {
- System.Console.WriteLine ("missing jis0208 encoding");
+ Log.Warning ("missing jis0208 encoding");
enc = System.Text.Encoding.Default;
}
break;
@@ -466,7 +467,7 @@ namespace FSpot.Tiff {
enc.GetBytes (Value, 0, Value.Length, data, heading.Length);
UserComment c = new UserComment (data, is_little);
- System.Console.WriteLine ("old = \"{0}\" new = \"{1}\" heading = \"{2}\"", c.Value, description, heading);
+ Log.DebugFormat ("old = \"{0}\" new = \"{1}\" heading = \"{2}\"", c.Value, description, heading);
return data;
}
@@ -843,7 +844,7 @@ namespace FSpot.Tiff {
if (stream.Read (tmp, 0, tmp.Length) < 4) {
#if DEBUG_LOADER
- System.Console.WriteLine ("short read XXXXXXXXXXXXXXXXXXXXXXx");
+ Log.Debug ("short read XXXXXXXXXXXXXXXXXXXXXXx");
#endif
throw new ShortReadException ();
}
@@ -856,7 +857,7 @@ namespace FSpot.Tiff {
if (stream.Read (tmp, 0, tmp.Length) < 2) {
#if DEBUG_LOADER
- System.Console.WriteLine ("Short read");
+ Log.Debug ("Short read");
#endif
throw new ShortReadException ();
}
@@ -892,13 +893,13 @@ namespace FSpot.Tiff {
//System.Console.WriteLine ("Found Standard Tiff Marker {0}", marker);
break;
case 0x4f52:
- System.Console.WriteLine ("Found Olympus Tiff Marker {0}", marker.ToString ("x"));
+ Log.DebugFormat ("Found Olympus Tiff Marker {0}", marker.ToString ("x"));
break;
case 0x4e31:
- System.Console.WriteLine ("Found Navy Interchange File Format Tiff Marker {0}", marker.ToString ("x"));
+ Log.DebugFormat ("Found Navy Interchange File Format Tiff Marker {0}", marker.ToString ("x"));
break;
default:
- System.Console.WriteLine ("Found Unknown Tiff Marker {0}", marker.ToString ("x"));
+ Log.DebugFormat ("Found Unknown Tiff Marker {0}", marker.ToString ("x"));
break;
}
@@ -909,7 +910,7 @@ namespace FSpot.Tiff {
throw new ParseException ("Invalid IFD0 Offset [" + directory_offset.ToString () + "]");
#if DEBUG_LOADER
- System.Console.WriteLine ("Reading First IFD");
+ Log.Debug ("Reading First IFD");
#endif
Directory = new ImageDirectory (stream, directory_offset, endian);
//}
@@ -927,7 +928,7 @@ namespace FSpot.Tiff {
{
foreach (DirectoryEntry e in dir.Entries) {
#if DEBUG_LOADER
- System.Console.WriteLine ("{0}", e.Id);
+ Log.DebugFormat ("{0}", e.Id);
#endif
switch (e.Id) {
case TagId.IPTCNAA:
@@ -964,8 +965,8 @@ namespace FSpot.Tiff {
try {
ImageDirectory sub = ((SubdirectoryEntry)e).Directory [0];
SelectDirectory (sub, sink);
- } catch (System.Exception exc) {
- System.Console.WriteLine (exc);
+ } catch (System.Exception ex) {
+ Log.Exception (ex);
}
break;
case TagId.Software:
@@ -977,7 +978,7 @@ namespace FSpot.Tiff {
MetadataStore.AddLiteral (sink, "xmp:ModifyDate",
e.ValueAsDate.ToString ("yyyy-MM-ddThh:mm:ss"));
} catch (System.Exception ex) {
- System.Console.WriteLine (String.Format ("error parsing {0}{2}{1}", e.ValueAsString[0], ex, Environment.NewLine));
+ Log.ErrorFormat ("error parsing {0}{2}{1}", e.ValueAsString[0], ex, Environment.NewLine);
}
break;
@@ -989,7 +990,7 @@ namespace FSpot.Tiff {
MetadataStore.AddLiteral (sink, "exif:" + e.Id.ToString (),
e.ValueAsDate.ToString ("yyyy-MM-ddThh:mm:ss"));
} catch (System.Exception ex) {
- System.Console.WriteLine (String.Format ("error parsing {0}{2}{1}", e.ValueAsString[0], ex, Environment.NewLine));
+ Log.ErrorFormat ("error parsing {0}{2}{1}", e.ValueAsString[0], ex, Environment.NewLine);
}
break;
//case TagId.SpatialFrequencyResponse
@@ -1081,7 +1082,7 @@ namespace FSpot.Tiff {
try {
MetadataStore.AddLiteral (sink, "tiff:" + e.Id.ToString (), e.ValueAsString [0]);
} catch (System.Exception ex) {
- System.Console.WriteLine (String.Format ("error parsing {0}{2}{1}", e.Id, ex, Environment.NewLine));
+ Log.ErrorFormat ("error parsing {0}{2}{1}", e.Id, ex, Environment.NewLine);
}
break;
}
@@ -1180,7 +1181,7 @@ namespace FSpot.Tiff {
{
num_entries = Converter.ReadUShort (stream, endian);
#if DEBUG_LOADER
- System.Console.WriteLine ("reading {0} entries", num_entries);
+ Log.DebugFormat ("reading {0} entries", num_entries);
#endif
entries = new List<DirectoryEntry> (num_entries);
int entry_length = num_entries * 12;
@@ -1188,7 +1189,7 @@ namespace FSpot.Tiff {
if (stream.Read (content, 0, content.Length) < content.Length) {
#if DEBUG_LOADER
- System.Console.WriteLine ("short read XXXXXXXXXXXXXXXXXXXXXXx");
+ Log.Debug ("short read XXXXXXXXXXXXXXXXXXXXXXx");
#endif
throw new ShortReadException ();
}
@@ -1198,7 +1199,7 @@ namespace FSpot.Tiff {
DirectoryEntry entry = CreateEntry (this, content, pos, this.endian);
entries.Add (entry);
#if DEBUG_LOADER
- System.Console.WriteLine ("Added Entry {0} {1} - {2} * {3}", entry.Id.ToString (), entry.Id.ToString ("x"), entry.Type, entry.Count);
+ Log.DebugFormat ("Added Entry {0} {1} - {2} * {3}", entry.Id.ToString (), entry.Id.ToString ("x"), entry.Type, entry.Count);
#endif
if (entry.Id == TagId.NewSubfileType) {
@@ -1221,7 +1222,7 @@ namespace FSpot.Tiff {
protected void LoadNextDirectory (System.IO.Stream stream)
{
#if DEBUG_LOADER
- System.Console.WriteLine ("start_position = {1} next_directory_offset = {0}",
+ Log.DebugFormat ("start_position = {1} next_directory_offset = {0}",
next_directory_offset, orig_position);
#endif
next_directory = null;
@@ -1258,14 +1259,6 @@ namespace FSpot.Tiff {
return null;
}
- private DirectoryEntry GetEntry (int i)
- {
- if (i < Entries.Count)
- return Entries [i];
- else
- return null;
- }
-
public DirectoryEntry Lookup (uint id)
{
foreach (DirectoryEntry entry in entries)
@@ -1329,7 +1322,7 @@ namespace FSpot.Tiff {
try {
return new Cms.Profile (e.RawData);
} catch (System.Exception ex) {
- System.Console.WriteLine (ex);
+ Log.Exception (ex);
}
break;
case TagId.ColorSpace:
@@ -1339,7 +1332,7 @@ namespace FSpot.Tiff {
case ColorSpace.AdobeRGB:
return Cms.Profile.CreateAlternateRgb ();
case ColorSpace.Uncalibrated:
- System.Console.WriteLine ("Uncalibrated colorspace");
+ Log.Debug ("Uncalibrated colorspace");
break;
}
break;
@@ -1367,7 +1360,7 @@ namespace FSpot.Tiff {
ushort [] trns = e.ShortValue;
ushort gamma_count = (ushort) (1 << bits_per_sample);
Cms.GammaTable [] tables = new Cms.GammaTable [3];
- System.Console.WriteLine ("Parsing transfer function: count = {0}", trns.Length);
+ Log.DebugFormat ("Parsing transfer function: count = {0}", trns.Length);
// FIXME we should use the TransferRange here
// FIXME we should use bits per sample here
@@ -1404,10 +1397,10 @@ namespace FSpot.Tiff {
public void Dump (string name)
{
- System.Console.WriteLine ("Starting {0}", name);
+ Log.DebugFormat ("Starting {0}", name);
foreach (DirectoryEntry e in this.Entries)
e.Dump (name);
- System.Console.WriteLine ("Ending {0}", name);
+ Log.DebugFormat ("Ending {0}", name);
}
public string Dump2 ()
@@ -1454,14 +1447,14 @@ namespace FSpot.Tiff {
public SubdirectoryEntry (byte [] data, int offset, Endian endian) : base (data, offset, endian)
{
if (this.GetEntryCount () > 1) {
- System.Console.WriteLine ("Count is greater than 1 ({1}) on Subdirectory {0} interesting", tagid, count);
+ Log.DebugFormat ("Count is greater than 1 ({1}) on Subdirectory {0} interesting", tagid, count);
}
}
public override uint Save (OrderedWriter writer, uint position)
{
#if DEBUG_LOADER
- Console.WriteLine ("writing entry {0} {1} {2} - value offset = {3}", Id, Type, Count, position);
+ Log.DebugFormat ("writing entry {0} {1} {2} - value offset = {3}", Id, Type, Count, position);
#endif
writer.Write ((ushort)Id);
@@ -1505,8 +1498,8 @@ namespace FSpot.Tiff {
throw new Exception ("recursive ifd");
Directory [i] = new ImageDirectory (stream, directory_offset, endian);
} catch (System.Exception e) {
- System.Console.WriteLine ("Error loading Subdirectory {0} at {2} of {3}bytes:{4}{1}",
- this.Id, e, directory_offset, stream.Length, Environment.NewLine);
+ Log.ErrorFormat ("Error loading Subdirectory {0} at {2}: {3}{1}",
+ this.Id, e, directory_offset, Environment.NewLine);
}
}
@@ -1521,7 +1514,7 @@ namespace FSpot.Tiff {
if (Directory [i] != null)
Directory [i].Dump (subdirname);
} catch (System.Exception e) {
- System.Console.WriteLine (e);
+ Log.Exception (e);
}
}
}
@@ -1626,7 +1619,7 @@ namespace FSpot.Tiff {
public virtual uint Save (OrderedWriter writer, uint position)
{
#if DEBUG_LOADER
- Console.WriteLine ("writing entry {0} {1} {2}", Id, Type, Count);
+ Log.DebugFormat ("writing entry {0} {1} {2}", Id, Type, Count);
#endif
writer.Write ((ushort)Id);
writer.Write ((ushort)Type);
@@ -1716,7 +1709,7 @@ namespace FSpot.Tiff {
byte [] data = new byte [count * GetTypeSize ()];
if (stream.Read (data, 0, data.Length) < data.Length) {
#if DEBUG_LOADER
- System.Console.WriteLine ("Short read");
+ Log.Debug ("Short read");
#endif
throw new ShortReadException ();
}
@@ -1777,17 +1770,17 @@ namespace FSpot.Tiff {
case EntryType.Short:
case EntryType.Long:
uint [] vals = this.ValueAsLong;
- System.Console.Write ("{3}{1}({2}) [{0}] (", vals.Length, this.Id, this.Type, name);
+ Log.DebugFormat ("{3}{1}({2}) [{0}] (", vals.Length, this.Id, this.Type, name);
for (int i = 0; i < System.Math.Min (15, vals.Length); i++) {
System.Console.Write (" {0}", vals [i]);
}
- System.Console.WriteLine (")");
+ Log.Debug (")");
break;
case EntryType.Ascii:
- System.Console.WriteLine ("{3}{1}({2}) (\"{0}\")", this.StringValue, this.Id, this.Type, name);
+ Log.DebugFormat ("{3}{1}({2}) (\"{0}\")", this.StringValue, this.Id, this.Type, name);
break;
default:
- System.Console.WriteLine ("{3}{1}({2}) [{0}]", this.Count, this.Id, this.Type, name);
+ Log.DebugFormat ("{3}{1}({2}) [{0}]", this.Count, this.Id, this.Type, name);
break;
}
}
@@ -1814,7 +1807,7 @@ namespace FSpot.Tiff {
byte [] tmp = new byte [len + 1];
System.Text.Encoding.UTF8.GetBytes (value, 0, value.Length, tmp, 0);
tmp[len] = 0;
- System.Console.WriteLine ("SetData: value = {0} len = {1}", value, len);
+ Log.DebugFormat ("SetData: value = {0} len = {1}", value, len);
SetData (tmp);
}
@@ -1900,7 +1893,7 @@ namespace FSpot.Tiff {
case TagId.ComponentsConfiguration:
return ArrayToString (ValueAsLong);
default:
- System.Console.WriteLine ("Cannot convert type \"{0}\" to string", Id);
+ Log.DebugFormat ("Cannot convert type \"{0}\" to string", Id);
break;
}
break;
@@ -2022,7 +2015,7 @@ namespace FSpot.Tiff {
get { return false; }
}
- public TiffFile (string path) : base (path)
+ public TiffFile (SafeUri uri) : base (uri)
{
try {
using (System.IO.Stream input = Open ()) {
@@ -2033,22 +2026,7 @@ namespace FSpot.Tiff {
Header.Dump (this.ToString () + ":");
#endif
} catch (System.Exception e) {
- System.Console.WriteLine (e.ToString ());
- }
- }
-
- public TiffFile (Uri uri) : base (uri)
- {
- try {
- using (System.IO.Stream input = Open ()) {
- this.Header = new Header (input);
- }
-
-#if DEBUG_LOADER
- Header.Dump (this.ToString () + ":");
-#endif
- } catch (System.Exception e) {
- System.Console.WriteLine (e.ToString ());
+ Log.Error (e.ToString ());
}
}
@@ -2062,27 +2040,26 @@ namespace FSpot.Tiff {
SubdirectoryEntry sub = (SubdirectoryEntry) this.Header.Directory.Lookup (TagId.ExifIfdPointer);
DirectoryEntry e;
- if (sub != null) {
- e = sub.Directory [0].Lookup (TagId.DateTimeOriginal);
-
- if (e != null)
- return DirectoryEntry.DateTimeFromString (e.StringValue);
- }
+ try {
+ if (sub != null) {
+ e = sub.Directory [0].Lookup (TagId.DateTimeOriginal);
- e = this.Header.Directory.Lookup (TagId.DateTime);
+ if (e != null)
+ return DirectoryEntry.DateTimeFromString (e.StringValue);
+ }
+
+ e = this.Header.Directory.Lookup (TagId.DateTime);
- if (e != null)
- return DirectoryEntry.DateTimeFromString (e.StringValue);
- else
+ if (e != null)
+ return DirectoryEntry.DateTimeFromString (e.StringValue);
+ else
+ return base.Date;
+ } catch (Exception) {
return base.Date;
+ }
}
}
- public override System.IO.Stream PixbufStream ()
- {
- return Open ();
- }
-
public override PixbufOrientation GetOrientation ()
{
ShortEntry e = (ShortEntry)(this.Header.Directory.Lookup (TagId.Orientation));
@@ -2130,11 +2107,7 @@ namespace FSpot.Tiff {
}
public class DngFile : TiffFile {
- public DngFile (string path) : base (path)
- {
- }
-
- public DngFile (System.Uri uri) : base (uri)
+ public DngFile (SafeUri uri) : base (uri)
{
}
@@ -2214,11 +2187,7 @@ namespace FSpot.Tiff {
}
public class NefFile : TiffFile, IThumbnailContainer {
- public NefFile (string path) : base (path)
- {
- }
-
- public NefFile (Uri uri) : base (uri)
+ public NefFile (SafeUri uri) : base (uri)
{
}
@@ -2278,20 +2247,8 @@ namespace FSpot.Tiff {
public class Cr2File : TiffFile, IThumbnailContainer {
- public Cr2File (string path) : base (path)
- {
- }
-
- public Cr2File (Uri uri) : base (uri)
+ public Cr2File (SafeUri uri) : base (uri)
{
-// Gtk.MessageDialog md = new Gtk.MessageDialog (null,
-// Gtk.DialogFlags.DestroyWithParent,
-// Gtk.MessageType.Error,
-// Gtk.ButtonsType.Close,
-// "bca");
-//
-// int result = md.Run ();
-// md.Destroy();
}
/*
diff --git a/src/Imaging/X3fFile.cs b/src/Imaging/X3fFile.cs
index e152543..233b3a9 100644
--- a/src/Imaging/X3fFile.cs
+++ b/src/Imaging/X3fFile.cs
@@ -3,6 +3,7 @@ using System.IO;
using FSpot;
using FSpot.Utils;
using SemWeb;
+using Hyena;
namespace FSpot.X3f {
internal class Info {
@@ -89,11 +90,7 @@ namespace FSpot.X3f {
}
}
- public X3fFile (string path) : base (path)
- {
- }
-
- public X3fFile (System.Uri uri) : base (uri)
+ public X3fFile (SafeUri uri) : base (uri)
{
}
diff --git a/src/Imaging/XmpFile.cs b/src/Imaging/XmpFile.cs
index e34049a..b28d602 100644
--- a/src/Imaging/XmpFile.cs
+++ b/src/Imaging/XmpFile.cs
@@ -2,7 +2,7 @@ using System.Xml;
using System.Collections;
using SemWeb;
-using FSpot.Utils;
+using Hyena;
namespace FSpot.Xmp {
public class XmpFile : SemWeb.StatementSource, SemWeb.StatementSink
@@ -37,7 +37,7 @@ namespace FSpot.Xmp {
store.Import (reader);
//Dump ();
} catch (System.Exception e) {
- Log.Debug ("Caught an exception :{0}", e.ToString ());
+ Log.DebugFormat ("Caught an exception :{0}", e.ToString ());
}
}
@@ -92,7 +92,7 @@ namespace FSpot.Xmp {
text.Close ();
} catch (System.Exception e) {
- System.Console.WriteLine (e);
+ Log.Exception (e);
}
}
@@ -109,7 +109,7 @@ namespace FSpot.Xmp {
public void Dump ()
{
foreach (SemWeb.Statement stmt in store) {
- System.Console.WriteLine(stmt);
+ Log.Debug(stmt.ToString());
}
}
diff --git a/src/Import/FileImportSource.cs b/src/Import/FileImportSource.cs
new file mode 100644
index 0000000..f7edeca
--- /dev/null
+++ b/src/Import/FileImportSource.cs
@@ -0,0 +1,190 @@
+using Hyena;
+using System;
+using System.Threading;
+using System.Collections.Generic;
+using FSpot.Utils;
+using Gtk;
+
+namespace FSpot.Import
+{
+ internal class FileImportSource : ImportSource {
+ public string Name { get; set; }
+ public string IconName { get; set; }
+ public SafeUri Root { get; set; }
+
+ public Thread PhotoScanner;
+ bool run_photoscanner = false;
+
+ public FileImportSource (SafeUri root, string name, string icon_name)
+ {
+ Root = root;
+ Name = name;
+
+ if (root != null) {
+ if (IsIPodPhoto) {
+ IconName = "multimedia-player";
+ } else if (IsCamera) {
+ IconName = "media-flash";
+ } else {
+ IconName = icon_name;
+ }
+ }
+ }
+
+ public void StartPhotoScan (ImportController controller)
+ {
+ if (PhotoScanner != null) {
+ run_photoscanner = false;
+ PhotoScanner.Join ();
+ }
+
+ run_photoscanner = true;
+ PhotoScanner = ThreadAssist.Spawn (() => ScanPhotos (controller));
+ }
+
+ protected virtual void ScanPhotos (ImportController controller)
+ {
+ ScanPhotoDirectory (controller, Root);
+ ThreadAssist.ProxyToMain (() => controller.PhotoScanFinished ());
+ }
+
+ protected void ScanPhotoDirectory (ImportController controller, SafeUri uri)
+ {
+ var enumerator = new RecursiveFileEnumerator (uri) {
+ Recurse = controller.RecurseSubdirectories,
+ CatchErrors = true,
+ IgnoreSymlinks = true
+ };
+ var infos = new List<FileImportInfo> ();
+ foreach (var file in enumerator) {
+ if (ImageFile.HasLoader (new SafeUri (file.Uri, true))) {
+ infos.Add (new FileImportInfo (new SafeUri(file.Uri, true)));
+ }
+
+ if (infos.Count % 10 == 0 || infos.Count < 10) {
+ var to_add = infos; // prevents race condition
+ ThreadAssist.ProxyToMain (() => controller.Photos.Add (to_add.ToArray ()));
+ infos = new List<FileImportInfo> ();
+ }
+
+ if (!run_photoscanner)
+ return;
+ }
+
+ if (infos.Count > 0) {
+ var to_add = infos; // prevents race condition
+ ThreadAssist.ProxyToMain (() => controller.Photos.Add (to_add.ToArray ()));
+ }
+ }
+
+ public void Deactivate ()
+ {
+ if (PhotoScanner != null) {
+ run_photoscanner = false;
+ PhotoScanner.Join ();
+
+ // Make sure all photos are added. This is needed to prevent
+ // a race condition where a source is deactivated, yet photos
+ // are still added to the collection because they are
+ // queued on the mainloop.
+ while (Application.EventsPending ())
+ Application.RunIteration (false);
+
+ PhotoScanner = null;
+ }
+ }
+
+ private bool IsCamera {
+ get {
+ try {
+ var file = GLib.FileFactory.NewForUri (Root.Append ("DCIM"));
+ return file.Exists;
+ } catch {
+ return false;
+ }
+ }
+ }
+
+ private bool IsIPodPhoto {
+ get {
+ try {
+ var file = GLib.FileFactory.NewForUri (Root.Append ("Photos"));
+ var file2 = GLib.FileFactory.NewForUri (Root.Append ("iPod_Control"));
+ return file.Exists && file2.Exists;
+ } catch {
+ return false;
+ }
+ }
+ }
+ }
+
+ // Multi root version for drag and drop import.
+ internal class MultiFileImportSource : FileImportSource {
+ private IEnumerable<SafeUri> uris;
+
+ public MultiFileImportSource (IEnumerable<SafeUri> uris)
+ : base (null, String.Empty, String.Empty)
+ {
+ this.uris = uris;
+ }
+
+ protected override void ScanPhotos (ImportController controller)
+ {
+ foreach (var uri in uris) {
+ Log.Debug ("Scanning "+uri);
+ ScanPhotoDirectory (controller, uri);
+ }
+ ThreadAssist.ProxyToMain (() => controller.PhotoScanFinished ());
+ }
+ }
+
+ internal class FileImportInfo : IBrowsableItem {
+ bool metadata_parsed = false;
+
+ public FileImportInfo (SafeUri original)
+ {
+ DefaultVersion = new ImportInfoVersion () {
+ BaseUri = original.GetBaseUri (),
+ Filename = original.GetFilename ()
+ };
+ }
+
+ private void EnsureMetadataParsed ()
+ {
+ if (metadata_parsed)
+ return;
+
+ using (var img = ImageFile.Create (DefaultVersion.Uri)) {
+ time = img.Date;
+ description = img.Description;
+ }
+
+ metadata_parsed = true;
+ }
+
+ public IBrowsableItemVersion DefaultVersion { get; private set; }
+ public SafeUri DestinationUri { get; set; }
+
+ private DateTime time;
+ public System.DateTime Time {
+ get {
+ EnsureMetadataParsed ();
+ return time;
+ }
+ }
+
+ private string description;
+ public string Description {
+ get {
+ EnsureMetadataParsed ();
+ return description;
+ }
+ }
+
+ public Tag [] Tags { get { throw new NotImplementedException (); } }
+ public string Name { get { throw new NotImplementedException (); } }
+ public uint Rating { get { return 0; } }
+
+ internal uint PhotoId { get; set; }
+ }
+}
diff --git a/src/Import/ImportController.cs b/src/Import/ImportController.cs
new file mode 100644
index 0000000..73e9b53
--- /dev/null
+++ b/src/Import/ImportController.cs
@@ -0,0 +1,417 @@
+using Hyena;
+using FSpot.Utils;
+using FSpot.Xmp;
+using System;
+using System.Collections.Generic;
+using System.Threading;
+using Mono.Unix;
+
+namespace FSpot.Import
+{
+ public enum ImportEvent {
+ SourceChanged,
+ PhotoScanStarted,
+ PhotoScanFinished,
+ ImportStarted,
+ ImportFinished,
+ ImportError
+ }
+
+ public class ImportController
+ {
+ public PhotoList Photos { get; private set; }
+
+ public ImportController ()
+ {
+ Photos = new PhotoList ();
+ LoadPreferences ();
+ }
+
+ ~ImportController ()
+ {
+ DeactivateSource (ActiveSource);
+ }
+
+#region Import Preferences
+
+ private bool copy_files;
+ private bool recurse_subdirectories;
+ private bool duplicate_detect;
+
+ public bool CopyFiles {
+ get { return copy_files; }
+ set { copy_files = value; SavePreferences (); }
+ }
+
+ public bool RecurseSubdirectories {
+ get { return recurse_subdirectories; }
+ set { recurse_subdirectories = value; SavePreferences (); RescanPhotos (); }
+ }
+
+ public bool DuplicateDetect {
+ get { return duplicate_detect; }
+ set { duplicate_detect = value; SavePreferences (); }
+ }
+
+ void LoadPreferences ()
+ {
+ copy_files = Preferences.Get<bool> (Preferences.IMPORT_COPY_FILES);
+ recurse_subdirectories = Preferences.Get<bool> (Preferences.IMPORT_INCLUDE_SUBFOLDERS);
+ duplicate_detect = Preferences.Get<bool> (Preferences.IMPORT_CHECK_DUPLICATES);
+ }
+
+ void SavePreferences ()
+ {
+ Preferences.Set(Preferences.IMPORT_COPY_FILES, copy_files);
+ Preferences.Set(Preferences.IMPORT_INCLUDE_SUBFOLDERS, recurse_subdirectories);
+ Preferences.Set(Preferences.IMPORT_CHECK_DUPLICATES, duplicate_detect);
+ }
+
+#endregion
+
+#region Source Scanning
+
+ private List<ImportSource> sources;
+ public List<ImportSource> Sources {
+ get {
+ if (sources == null)
+ sources = ScanSources ();
+ return sources;
+ }
+ }
+
+ List<ImportSource> ScanSources ()
+ {
+ var monitor = GLib.VolumeMonitor.Default;
+ var sources = new List<ImportSource> ();
+ foreach (var mount in monitor.Mounts) {
+ var root = new SafeUri (mount.Root.Uri, true);
+ var icon = (mount.Icon as GLib.ThemedIcon).Names [0];
+ sources.Add (new FileImportSource (root, mount.Name, icon));
+ }
+ return sources;
+ }
+
+#endregion
+
+#region Status Reporting
+
+ public delegate void ImportProgressHandler (int current, int total);
+ public event ImportProgressHandler ProgressUpdated;
+
+ public delegate void ImportEventHandler (ImportEvent evnt);
+ public event ImportEventHandler StatusEvent;
+
+ void FireEvent (ImportEvent evnt)
+ {
+ ThreadAssist.ProxyToMain (() => {
+ var h = StatusEvent;
+ if (h != null)
+ h (evnt);
+ });
+ }
+
+ void ReportProgress (int current, int total)
+ {
+ var h = ProgressUpdated;
+ if (h != null)
+ h (current, total);
+ }
+
+ public int PhotosImported { get; private set; }
+ public Roll CreatedRoll { get; private set; }
+
+#endregion
+
+#region Source Switching
+
+ private ImportSource active_source;
+ public ImportSource ActiveSource {
+ set {
+ if (value == active_source)
+ return;
+ var old_source = active_source;
+ active_source = value;
+ FireEvent (ImportEvent.SourceChanged);
+ RescanPhotos ();
+ DeactivateSource (old_source);
+ }
+ get {
+ return active_source;
+ }
+ }
+
+ void DeactivateSource (ImportSource source)
+ {
+ if (source == null)
+ return;
+ source.Deactivate ();
+ }
+
+ void RescanPhotos ()
+ {
+ Photos.Clear ();
+ if (ActiveSource == null)
+ return;
+
+ photo_scan_running = true;
+ ActiveSource.StartPhotoScan (this);
+ FireEvent (ImportEvent.PhotoScanStarted);
+ }
+
+#endregion
+
+#region Source Progress Signalling
+
+ // These are callbacks that should be called by the sources.
+
+ public void PhotoScanFinished ()
+ {
+ photo_scan_running = false;
+ FireEvent (ImportEvent.PhotoScanFinished);
+ }
+
+#endregion
+
+#region Importing
+
+ Thread ImportThread;
+
+ public void StartImport ()
+ {
+ if (ImportThread != null)
+ throw new Exception ("Import already running!");
+
+ ImportThread = ThreadAssist.Spawn (() => DoImport ());
+ }
+
+ public void CancelImport ()
+ {
+ import_cancelled = true;
+ if (ImportThread != null)
+ ImportThread.Join ();
+ Cleanup ();
+ }
+
+ Stack<SafeUri> created_directories;
+ List<uint> imported_photos;
+ List<SafeUri> copied_files;
+ PhotoStore store = App.Instance.Database.Photos;
+ RollStore rolls = App.Instance.Database.Rolls;
+ volatile bool photo_scan_running;
+ XmpTagsImporter xmp_importer;
+ volatile bool import_cancelled = false;
+
+ void DoImport ()
+ {
+ while (photo_scan_running) {
+ Thread.Sleep (1000); // FIXME: we can do this with a better primitive!
+ }
+
+ FireEvent (ImportEvent.ImportStarted);
+ App.Instance.Database.Sync = false;
+ created_directories = new Stack<SafeUri> ();
+ imported_photos = new List<uint> ();
+ copied_files = new List<SafeUri> ();
+ xmp_importer = new XmpTagsImporter (store, App.Instance.Database.Tags);
+ CreatedRoll = rolls.Create ();
+
+ EnsureDirectory (Global.PhotoUri);
+
+ try {
+ int i = 0;
+ int total = Photos.Count;
+ foreach (var info in Photos.Items) {
+ if (import_cancelled) {
+ RollbackImport ();
+ return;
+ }
+
+ ThreadAssist.ProxyToMain (() => ReportProgress (i++, total));
+ ImportPhoto (info, CreatedRoll);
+ }
+
+ PhotosImported = imported_photos.Count;
+ FinishImport ();
+ } catch (Exception e) {
+ RollbackImport ();
+ throw e;
+ } finally {
+ Cleanup ();
+ }
+ }
+
+ void Cleanup ()
+ {
+ if (imported_photos != null && imported_photos.Count == 0)
+ rolls.Remove (CreatedRoll);
+ imported_photos = null;
+ created_directories = null;
+ Photo.ResetMD5Cache ();
+ DeactivateSource (ActiveSource);
+ Photos.Clear ();
+ System.GC.Collect ();
+ App.Instance.Database.Sync = true;
+ }
+
+ void FinishImport ()
+ {
+ ImportThread = null;
+ FireEvent (ImportEvent.ImportFinished);
+ }
+
+ void RollbackImport ()
+ {
+ // Remove photos
+ foreach (var id in imported_photos) {
+ store.Remove (store.Get (id));
+ }
+
+ foreach (var uri in copied_files) {
+ var file = GLib.FileFactory.NewForUri (uri);
+ file.Delete (null);
+ }
+
+ // Clean up directories
+ while (created_directories.Count > 0) {
+ var uri = created_directories.Pop ();
+ var dir = GLib.FileFactory.NewForUri (uri);
+ var enumerator = dir.EnumerateChildren ("standard::name", GLib.FileQueryInfoFlags.None, null);
+ if (!enumerator.HasPending) {
+ dir.Delete (null);
+ }
+ }
+
+ // Clean created tags
+ xmp_importer.Cancel();
+
+ // Remove created roll
+ rolls.Remove (CreatedRoll);
+ }
+
+ void ImportPhoto (IBrowsableItem item, Roll roll)
+ {
+ var destination = FindImportDestination (item);
+
+ // Do duplicate detection
+ if (DuplicateDetect && store.HasDuplicate (item)) {
+ return;
+ }
+
+ // Copy into photo folder.
+ if (!item.DefaultVersion.Uri.Equals (destination)) {
+ var file = GLib.FileFactory.NewForUri (item.DefaultVersion.Uri);
+ var new_file = GLib.FileFactory.NewForUri (destination);
+ file.Copy (new_file, GLib.FileCopyFlags.AllMetadata, null, null);
+ copied_files.Add (destination);
+ item.DefaultVersion.Uri = destination;
+ }
+
+ // Import photo
+ var photo = store.CreateFrom (item, roll.Id);
+
+ bool needs_commit = false;
+
+ // Add tags
+ if (attach_tags.Count > 0) {
+ photo.AddTag (attach_tags);
+ needs_commit = true;
+ }
+
+ // Import XMP metadata
+ needs_commit |= xmp_importer.Import (photo, destination, item.DefaultVersion.Uri);
+
+ if (needs_commit) {
+ store.Commit (photo);
+ }
+
+ // Prepare thumbnail (Import is I/O bound anyway)
+ ThumbnailLoader.Default.Request (destination, ThumbnailSize.Large, 10);
+
+ imported_photos.Add (photo.Id);
+ }
+
+ SafeUri FindImportDestination (IBrowsableItem item)
+ {
+ var uri = item.DefaultVersion.Uri;
+
+ if (!CopyFiles)
+ return uri; // Keep it at the same place
+
+ // Find a new unique location inside the photo folder
+ string name = uri.GetFilename ();
+ DateTime time = item.Time;
+
+ var dest_uri = Global.PhotoUri.Append (time.Year.ToString ())
+ .Append (String.Format ("{0:D2}", time.Month))
+ .Append (String.Format ("{0:D2}", time.Day));
+ EnsureDirectory (dest_uri);
+
+ // If the destination we'd like to use is the file itself return that
+ if (dest_uri.Append (name) == uri)
+ return uri;
+
+ // Find an unused name
+ int i = 1;
+ var dest = dest_uri.Append (name);
+ var file = GLib.FileFactory.NewForUri (dest);
+ while (file.Exists) {
+ var filename = uri.GetFilenameWithoutExtension ();
+ var extension = uri.GetExtension ();
+ dest = dest_uri.Append (String.Format ("{0}-{1}{2}", filename, i++, extension));
+ file = GLib.FileFactory.NewForUri (dest);
+ }
+
+ return dest;
+ }
+
+ void EnsureDirectory (SafeUri uri)
+ {
+ var parts = uri.AbsolutePath.Split('/');
+ SafeUri current = new SafeUri (uri.Scheme + ":///", true);
+ for (int i = 0; i < parts.Length; i++) {
+ current = current.Append (parts [i]);
+ var file = GLib.FileFactory.NewForUri (current);
+ if (!file.Exists) {
+ file.MakeDirectory (null);
+ }
+ }
+ }
+
+#endregion
+
+#region Tagging
+
+ List<Tag> attach_tags = new List<Tag> ();
+ TagStore tag_store = App.Instance.Database.Tags;
+
+ // Set the tags that will be added on import.
+ public void AttachTags (IEnumerable<string> tags)
+ {
+ App.Instance.Database.BeginTransaction ();
+ var import_category = GetImportedTagsCategory ();
+ foreach (var tagname in tags) {
+ var tag = tag_store.GetTagByName (tagname);
+ if (tag == null) {
+ tag = tag_store.CreateCategory (import_category, tagname, false) as Tag;
+ tag_store.Commit (tag);
+ }
+ attach_tags.Add (tag);
+ }
+ App.Instance.Database.CommitTransaction ();
+ }
+
+ Category GetImportedTagsCategory ()
+ {
+ var default_category = tag_store.GetTagByName (Catalog.GetString ("Imported Tags")) as Category;
+ if (default_category == null) {
+ default_category = tag_store.CreateCategory (null, Catalog.GetString ("Imported Tags"), false);
+ default_category.ThemeIconName = "gtk-new";
+ }
+ return default_category;
+ }
+
+#endregion
+
+ }
+}
diff --git a/src/Import/ImportSource.cs b/src/Import/ImportSource.cs
new file mode 100644
index 0000000..fd2e3b9
--- /dev/null
+++ b/src/Import/ImportSource.cs
@@ -0,0 +1,37 @@
+using Hyena;
+using System;
+
+namespace FSpot.Import
+{
+ public interface ImportSource {
+ string Name { get; }
+ string IconName { get; }
+
+ void StartPhotoScan (ImportController controller);
+ void Deactivate ();
+ }
+
+ public class ImportInfoVersion : IBrowsableItemVersion {
+ public string Name { get { return String.Empty; } }
+ public bool IsProtected { get { return true; } }
+ public SafeUri BaseUri { get; set; }
+ public string Filename { get; set; }
+
+ public SafeUri Uri {
+ get { return BaseUri.Append (Filename); }
+ set {
+ BaseUri = value.GetBaseUri ();
+ Filename = value.GetFilename ();
+ }
+ }
+
+ private string import_md5 = String.Empty;
+ public string ImportMD5 {
+ get {
+ if (import_md5 == String.Empty)
+ import_md5 = Photo.GenerateMD5 (Uri);
+ return import_md5;
+ }
+ }
+ }
+}
diff --git a/src/ImportBackend.cs b/src/ImportBackend.cs
deleted file mode 100644
index d50891e..0000000
--- a/src/ImportBackend.cs
+++ /dev/null
@@ -1,20 +0,0 @@
-using FSpot;
-using Gdk;
-
-public abstract class ImportBackend {
- // Prepare for importing; returns the number of pictures available.
- // If it returns zero, you should not call Step(), Cancel() or Finish() until you call Prepare() again.
- public abstract int Prepare ();
-
- // Import one picture. Returns false when done; then you have to call Finish().
- public abstract bool Step (out StepStatusInfo import_info);
-
- // Cancel importing.
- public abstract void Cancel ();
-
- // Complete importing (needs to be called).
- public abstract void Finish ();
-
- // The import roll. Should be set at Prepare () and removed at Cancel ()
- protected Roll roll;
-}
diff --git a/src/ImportCommand.cs b/src/ImportCommand.cs
deleted file mode 100644
index 16e1d27..0000000
--- a/src/ImportCommand.cs
+++ /dev/null
@@ -1,913 +0,0 @@
-/*
- * ImportCommand.cs
- *
- * Author(s)
- * Ettore Perazzoli
- * Larry Ewing
- * Miguel de Icaza
- * Nat Friedman
- * Gabriel Burt
- * Markus Lindqvist <markus.lindqvist at iki.fi>
- *
- * This is free software. See COPYING for details.
- */
-
-using GLib;
-using Gdk;
-using Gtk;
-using System.Collections;
-using System.IO;
-using System;
-using Mono.Unix;
-
-using FSpot;
-using FSpot.Utils;
-using FSpot.UI.Dialog;
-using FSpot.Widgets;
-
-public class ImportCommand : GladeDialog
-{
- internal class SourceItem : ImageMenuItem
- {
- public ImportSource Source;
-
- public SourceItem (ImportSource source) : base (source.Name.Replace ("_", "__"))
- {
- this.Source = source;
-
- Gdk.Pixbuf icon = source.Icon;
- if (icon != null)
- this.Image = new Gtk.Image (icon);
- }
- }
-
- internal class BrowseSource : ImportSource
- {
- public BrowseSource ()
- {
- this.Name = Catalog.GetString ("Select Folder");
- this.Icon = GtkUtil.TryLoadIcon (FSpot.Global.IconTheme, "stock_folder", 32, (Gtk.IconLookupFlags)0);
- }
-
- public BrowseSource (string name, string icon)
- {
- this.Name = name;
- this.Icon = GtkUtil.TryLoadIcon (FSpot.Global.IconTheme, icon, 32, (Gtk.IconLookupFlags)0);
- }
- }
-
- internal class VfsSource : ImportSource
- {
- public string uri;
-
- public VfsSource (string uri)
- {
- string [] components = uri.Split (new char [] { '/' });
- this.Name = components [components.Length - 1];
- if (this.Name == String.Empty)
- this.Name = components [components.Length - 2];
-
- this.uri = uri;
-
- this.Icon = GtkUtil.TryLoadIcon (FSpot.Global.IconTheme, "stock_folder", 32, (Gtk.IconLookupFlags)0);
- }
-
- public virtual bool Contains (string path)
- {
- return false;
- }
-
- protected VfsSource () {}
- }
-
- internal class VolumeSource : VfsSource
- {
- public Gnome.Vfs.Volume Volume;
- public string mount_point;
-
- public VolumeSource (Gnome.Vfs.Volume vol)
- {
- this.Volume = vol;
- this.Name = vol.DisplayName;
-
- try {
- mount_point = new Uri (vol.ActivationUri).LocalPath;
- } catch (System.Exception e) {
- System.Console.WriteLine (e);
- }
-
- uri = mount_point;
-
- if (this.Icon == null)
- this.Icon = GtkUtil.TryLoadIcon (FSpot.Global.IconTheme, vol.Icon, 32, (Gtk.IconLookupFlags)0);
-
- if (this.IsIPodPhoto)
- this.Icon = GtkUtil.TryLoadIcon (FSpot.Global.IconTheme, "multimedia-player", 32, (Gtk.IconLookupFlags)0);
-
- if (this.Icon == null && this.IsCamera)
- this.Icon = GtkUtil.TryLoadIcon (FSpot.Global.IconTheme, "media-flash", 32, (Gtk.IconLookupFlags)0);
-
- try {
- if (this.Icon == null)
- this.Icon = new Gdk.Pixbuf (vol.Icon);
- } catch (System.Exception e) {
- System.Console.WriteLine (e.ToString ());
- }
- }
-
- private bool IsCamera {
- get {
- try {
- return (Directory.Exists (Path.Combine (mount_point, "DCIM")));
- } catch {
- return false;
- }
- }
- }
-
- private bool IsIPodPhoto {
- get {
- if (Volume.DeviceType != Gnome.Vfs.DeviceType.MusicPlayer
- && Volume.DeviceType != Gnome.Vfs.DeviceType.Apple)
- return false;
-
- try {
- return (Directory.Exists (Path.Combine (mount_point, "Photos")) &&
- Directory.Exists (Path.Combine (mount_point, "iPod_Control")));
- } catch {
- return false;
- }
- }
- }
- }
-
- internal class DriveSource : ImportSource
- {
- public Gnome.Vfs.Drive Drive;
-
- public DriveSource (Gnome.Vfs.Drive drive)
- {
- this.Name = drive.DisplayName;
- this.Drive = drive;
-
- if (drive.IsMounted) {
- this.Icon = GtkUtil.TryLoadIcon (FSpot.Global.IconTheme, drive.MountedVolume.Icon, 32, (Gtk.IconLookupFlags)0);
- //this.Sensitive = drive.MountedVolume.IsMounted;
- } else {
- this.Icon = GtkUtil.TryLoadIcon (FSpot.Global.IconTheme, drive.Icon, 32, (Gtk.IconLookupFlags)0);
- }
- }
- }
-
- internal class CameraSource : ImportSource
- {
- GPhotoCamera cam;
- int CameraIndex;
-
- public CameraSource (GPhotoCamera cam, int index)
- {
- this.cam = cam;
- this.CameraIndex = index;
-
-#if LONG_NAMES
- this.Name = String.Format ("{0} ({1})", cam.CameraList.GetName (index), cam.CameraList.GetValue (index));
-#else
- this.Name = String.Format ("{0}", cam.CameraList.GetName (index));
-#endif
- this.Icon = GtkUtil.TryLoadIcon (FSpot.Global.IconTheme, "camera-photo", 32, (Gtk.IconLookupFlags)0);
- if (this.Icon == null)
- this.Icon = GtkUtil.TryLoadIcon (FSpot.Global.IconTheme, "media-flash", 32, (Gtk.IconLookupFlags)0);
- }
-
- public string Port {
- get {
- return cam.CameraList.GetValue (CameraIndex);
- }
- }
- }
-
- internal abstract class ImportSource {
- public Gdk.Pixbuf Icon;
- public string Name;
- }
-
- private class SourceMenu : Gtk.Menu
- {
- public int source_count;
- ImportCommand command;
-
- private static Gnome.Vfs.VolumeMonitor monitor = Gnome.Vfs.VolumeMonitor.Get ();
-
- public SourceMenu (ImportCommand command) {
- this.command = command;
- source_count = 0;
-
- SourceItem item = new SourceItem (new BrowseSource ());
- item.Activated += HandleActivated;
- this.Append (item);
- this.Append (new Gtk.SeparatorMenuItem ());
-
- // Add external hard drives to the menu
- foreach (Gnome.Vfs.Volume vol in monitor.MountedVolumes) {
- if (!vol.IsUserVisible || vol.DeviceType == Gnome.Vfs.DeviceType.Unknown)
- continue;
-
- System.Console.WriteLine ("{0} - {1} - {2} {3} {4} {5} {6}",
- vol.DisplayName,
- vol.Icon,
- vol.VolumeType.ToString (),
- vol.ActivationUri,
- vol.IsUserVisible,
- vol.IsMounted,
- vol.DeviceType);
-
- if (vol.Drive != null)
- System.Console.WriteLine (vol.Drive.DeviceType.ToString ());
-
- ImportSource source = new VolumeSource (vol);
- item = new SourceItem (source);
- item.Activated += HandleActivated;
- this.Append (item);
- source_count++;
-
- }
-
-
- GPhotoCamera cam = new GPhotoCamera ();
- cam.DetectCameras ();
- int camera_count = cam.CameraList.Count;
-
- if (camera_count > 0) {
- source_count += camera_count;
- for (int i = 0; i < camera_count; i++) {
- string handle = cam.CameraList.GetValue (i);
- if (camera_count == 1 || handle != "usb:") {
- if (handle.StartsWith ("disk:")) {
- string path = handle.Substring ("disk:".Length);
-
- if (FindItemPosition (path) != -1)
- continue;
- }
-
- ImportSource source = new CameraSource (cam, i);
- item = new SourceItem (source);
- item.Activated += HandleActivated;
- this.Append (item);
- }
- }
- } else {
- ImportSource source = new BrowseSource (Catalog.GetString ("(No Cameras Detected)"),
- "camera-photo");
- item = new SourceItem (source);
- item.Activated += HandleActivated;
- item.Sensitive = false;
- this.Append (item);
- }
- /*
- this.Append (new Gtk.SeparatorMenuItem ());
-
- foreach (Gnome.Vfs.Drive drive in monitor.ConnectedDrives) {
- ImportSource source = new DriveSource (drive);
-
- Gtk.ImageMenuItem item = new SourceItem (source);
- item.Sensitive = drive.IsMounted;
- this.Append (item);
- }
- */
-
- this.ShowAll ();
- }
-
- private void HandleActivated (object sender, EventArgs args)
- {
- command.Source = (SourceItem) sender;
- }
-
- public int SourceCount {
- get {
- return source_count;
- }
- }
-
- public int FindItemPosition (SourceItem source)
- {
- Gtk.Widget [] children = this.Children;
- for (int i = 0; i < children.Length; i++) {
- if (children [i] == source) {
- return i;
- }
- }
- return -1;
- }
-
- public int FindItemPosition (string path)
- {
- Gtk.Widget [] children = this.Children;
- System.Console.WriteLine ("looking for {0}", path);
- for (int i = 0; i < children.Length; i++) {
- if (children [i] is SourceItem) {
- VfsSource vfs = ((SourceItem)(children [i])).Source as VfsSource;
- if (vfs != null && (vfs.uri == path || path == (vfs.uri + "/dcim")))
- return i;
- }
- }
- return -1;
- }
- }
-
- [Glade.Widget] Gtk.HBox tagentry_box;
- [Glade.Widget] Gtk.OptionMenu source_option_menu;
- [Glade.Widget] Gtk.ScrolledWindow icon_scrolled;
- [Glade.Widget] Gtk.ScrolledWindow photo_scrolled;
- [Glade.Widget] Gtk.CheckButton duplicate_check;
- [Glade.Widget] Gtk.CheckButton recurse_check;
- [Glade.Widget] Gtk.CheckButton copy_check;
- [Glade.Widget] Gtk.Button ok_button;
- [Glade.Widget] Gtk.Image tag_image;
- [Glade.Widget] Gtk.Label tag_label;
- [Glade.Widget] Gtk.EventBox frame_eventbox;
- [Glade.Widget] ProgressBar progress_bar;
- [Glade.Widget] Gtk.HPaned import_hpaned;
-
- ArrayList tags_selected;
-
- FSpot.Widgets.TagEntry tag_entry;
-
- Gtk.Window main_window;
- FSpot.PhotoList collection;
- bool copy;
- SourceMenu menu;
-
- int total;
- PhotoStore store;
- FSpot.Delay step;
-
- PhotoImageView photo_view;
- ImportBackend importer;
- FSpot.Widgets.IconView tray;
-
- FSpot.Delay idle_start;
-
- string loading_string;
-
- string import_path;
- public string ImportPath {
- get { return import_path; }
- }
-
- private SourceItem Source {
- set {
- if (store == null || collection == null)
- return;
-
- SourceItem item = value;
-
- this.Cancel ();
- this.copy = copy_check.Active;
- AllowFinish = false;
-
- System.Console.WriteLine ("item {0}", item);
-
- if (!item.Sensitive)
- return;
-
- if (item.Source is BrowseSource) {
- string path = ChoosePath ();
-
- if (path != null) {
- SourceItem path_item = new SourceItem (new VfsSource (path));
- menu.Prepend (path_item);
- path_item.ShowAll ();
- //option.SetHistory (0);
- SetImportPath (path);
- }
- } else if (item.Source is VfsSource) {
- VfsSource vfs = item.Source as VfsSource;
- SetImportPath (vfs.uri);
- } else if (item.Source is CameraSource) {
- CameraSource csource = item.Source as CameraSource;
- string port = "gphoto2:" + csource.Port;
- this.Cancel ();
- this.Dialog.Destroy ();
- MainWindow.Toplevel.ImportCamera (port);
- }
-
- idle_start.Start ();
- }
- }
-
- public ImportCommand (Gtk.Window mw)
- {
- main_window = mw;
- step = new FSpot.Delay (new GLib.IdleHandler (Step));
- idle_start = new FSpot.Delay (new IdleHandler (Start));
- loading_string = Catalog.GetString ("Loading {0} of {1}");
- }
-
- private void HandleDialogResponse (object obj, ResponseArgs args)
- {
- if (args.ResponseId != ResponseType.Ok) {
- this.Cancel ();
- this.Dialog.Destroy ();
- return;
- }
- }
-
- private void UpdateProgressBar (int count, int total)
- {
- if (progress_bar == null)
- return;
-
- progress_bar.Text = String.Format (loading_string, count, total);
- progress_bar.Fraction = (double) count / System.Math.Max (total, 1);
- }
-
- private void HandleTraySelectionChanged (FSpot.IBrowsableCollection coll)
- {
- if (tray.Selection.Count > 0)
- photo_view.Item.Index = tray.Selection.Ids[0];
-
- }
-
- private bool Step ()
- {
- StepStatusInfo status_info;
- bool ongoing = true;
-
- if (importer == null)
- return false;
-
- try {
- // FIXME this is really just an incredibly ugly way of dealing
- // with the recursive DoImport loops we sometimes get into
- ongoing = importer.Step (out status_info);
- } catch (ImportException e){
- System.Console.WriteLine (e);
- return false;
- }
-
- if (!status_info.IsDuplicate && (status_info.Photo == null || status_info.Thumbnail == null)) {
- Console.WriteLine ("Could not import file");
- } else {
- //icon_scrolled.Visible = true;
- if (!status_info.IsDuplicate)
- collection.Add (status_info.Photo);
- //grid.AddThumbnail (thumbnail);
-
- }
-
- if (status_info.Thumbnail != null)
- status_info.Thumbnail.Dispose ();
-
- if (status_info.Count < total)
- UpdateProgressBar (status_info.Count + 1, total);
-
- if (ongoing && total > 0)
- return true;
- else {
- System.Console.WriteLine ("Stopping");
- if (progress_bar != null)
- progress_bar.Text = Catalog.GetString ("Done Loading");
-
- AllowFinish = true;
- return false;
- }
- }
-
- public bool AllowFinish
- {
- set {
- if (this.ok_button != null)
- this.ok_button.Sensitive = value;
- }
- }
-
- private int DoImport (ImportBackend imp)
- {
- if (collection == null)
- return 0;
-
- this.importer = imp;
- AllowFinish = false;
-
- total = importer.Prepare ();
-
- if (total > 0)
- UpdateProgressBar (1, total);
-
- collection.Clear ();
- collection.Capacity = total;
-
- while (total > 0 && this.Step ()) {
- System.DateTime start_time = System.DateTime.Now;
- System.TimeSpan span = start_time - start_time;
-
- while (Application.EventsPending () && span.TotalMilliseconds < 100) {
- span = System.DateTime.Now - start_time;
- Application.RunIteration ();
- }
- }
-
- return total;
- }
-
- public void Finish ()
- {
- if (idle_start.IsPending || step.IsPending) {
- AllowFinish = false;
- return;
- }
-
- if (importer != null)
- importer.Finish ();
-
- importer = null;
- }
-
- void SavePreferences ()
- {
- Preferences.Set(Preferences.IMPORT_COPY_FILES, copy_check.Active);
- Preferences.Set(Preferences.IMPORT_INCLUDE_SUBFOLDERS, recurse_check.Active);
- Preferences.Set(Preferences.IMPORT_CHECK_DUPLICATES, duplicate_check.Active);
- }
-
- public void HandleImportBrowse (object o, EventArgs args)
- {
- string path = ChoosePath ();
- if (path != null) {
- SetImportPath (path);
- }
- }
-
- public string ChoosePath ()
- {
- string path = null;
-
- FileChooserDialog file_chooser =
- new FileChooserDialog (Catalog.GetString ("Import"), this.Dialog,
- FileChooserAction.SelectFolder,
- Stock.Cancel, ResponseType.Cancel,
- Stock.Open, ResponseType.Ok);
-
- file_chooser.SelectMultiple = false;
-
- if (ImportPath != null)
- file_chooser.SetFilename (ImportPath);
- else
- file_chooser.SetFilename (FSpot.Global.HomeDirectory);
-
- int response = file_chooser.Run ();
-
- if ((ResponseType) response == ResponseType.Ok) {
- path = file_chooser.Filename;
- }
-
- file_chooser.Destroy ();
- return path;
- }
-
- public void SetImportPath (string path)
- {
- import_path = path;
- }
-
-// private void HandleTagMenuSelected (Tag t)
-// {
-// tag_selected = t;
-// //tag_image.Pixbuf = t.Icon;
-// //tag_label.Text = t.Name;
-// }
-
- private void HandleRecurseToggled (object sender, System.EventArgs args)
- {
- this.Cancel ();
- this.Dialog.Sensitive = false;
-
- idle_start.Start ();
- }
-
- private void LoadPreferences ()
- {
- if (FSpot.Preferences.Get<int> (FSpot.Preferences.IMPORT_WINDOW_WIDTH) > 0)
- this.Dialog.Resize (FSpot.Preferences.Get<int> (FSpot.Preferences.IMPORT_WINDOW_WIDTH), FSpot.Preferences.Get<int> (FSpot.Preferences.IMPORT_WINDOW_HEIGHT));
-
- if (FSpot.Preferences.Get<int> (FSpot.Preferences.IMPORT_WINDOW_PANE_POSITION) > 0)
- import_hpaned.Position = FSpot.Preferences.Get<int> (FSpot.Preferences.IMPORT_WINDOW_PANE_POSITION);
-
- copy_check.Active = Preferences.Get<bool> (Preferences.IMPORT_COPY_FILES);
- recurse_check.Active = Preferences.Get<bool> (Preferences.IMPORT_INCLUDE_SUBFOLDERS);
- duplicate_check.Active = Preferences.Get<bool> (Preferences.IMPORT_CHECK_DUPLICATES);
- }
-
- public int ImportFromFile (PhotoStore store, string path)
- {
- this.store = store;
- this.CreateDialog ("import_dialog");
- this.Dialog.TransientFor = main_window;
- this.Dialog.WindowPosition = Gtk.WindowPosition.CenterOnParent;
- this.Dialog.Response += HandleDialogResponse;
- this.Dialog.DefaultResponse = ResponseType.Ok;
-
- AllowFinish = false;
-
- LoadPreferences ();
-
- //import_folder_entry.Activated += HandleEntryActivate;
- duplicate_check.Toggled += HandleRecurseToggled;
- recurse_check.Toggled += HandleRecurseToggled;
- copy_check.Toggled += HandleRecurseToggled;
-
- menu = new SourceMenu (this);
- source_option_menu.Menu = menu;
-
- collection = new FSpot.PhotoList (new Photo [0]);
- tray = new ScalingIconView (collection);
- tray.Selection.Changed += HandleTraySelectionChanged;
- icon_scrolled.SetSizeRequest (400, 200);
- icon_scrolled.Add (tray);
- //icon_scrolled.Visible = false;
- tray.DisplayTags = false;
- tray.Show ();
-
- photo_view = new PhotoImageView (collection);
- photo_scrolled.Add (photo_view);
- photo_scrolled.SetSizeRequest (200, 200);
- photo_view.Show ();
-
- //GtkUtil.ModifyColors (frame_eventbox);
- GtkUtil.ModifyColors (photo_scrolled);
- GtkUtil.ModifyColors (photo_view);
-
- photo_view.Pixbuf = GtkUtil.TryLoadIcon (FSpot.Global.IconTheme, "f-spot", 128, (Gtk.IconLookupFlags)0);
- photo_view.ZoomFit (false);
-
- tag_entry = new FSpot.Widgets.TagEntry (MainWindow.Toplevel.Database.Tags, false);
- tag_entry.UpdateFromTagNames (new string []{});
- tagentry_box.Add (tag_entry);
-
- tag_entry.Show ();
-
- this.Dialog.Show ();
-
- //source_option_menu.Changed += HandleSourceChanged;
- if (path != null) {
- SetImportPath (path);
- int i = menu.FindItemPosition (path);
-
- if (i > 0) {
- source_option_menu.SetHistory ((uint)i);
- } else if (Directory.Exists (path)) {
- SourceItem path_item = new SourceItem (new VfsSource (path));
- menu.Prepend (path_item);
- path_item.ShowAll ();
- SetImportPath (path);
- source_option_menu.SetHistory (0);
- }
- idle_start.Start ();
- }
-
- ResponseType response = (ResponseType) this.Dialog.Run ();
-
- while (response == ResponseType.Ok) {
- try {
- if (Directory.Exists (this.ImportPath))
- break;
- } catch (System.Exception e){
- System.Console.WriteLine (e);
- break;
- }
-
- HigMessageDialog md = new HigMessageDialog (this.Dialog,
- DialogFlags.DestroyWithParent,
- MessageType.Error,
- ButtonsType.Ok,
- Catalog.GetString ("Directory does not exist."),
- String.Format (Catalog.GetString ("The directory you selected \"{0}\" does not exist. " +
- "Please choose a different directory"), this.ImportPath));
-
- md.Run ();
- md.Destroy ();
-
- response = (Gtk.ResponseType) this.Dialog.Run ();
- }
-
- if (response == ResponseType.Ok) {
- this.UpdateTagStore (tag_entry.GetTypedTagNames ());
- SavePreferences ();
- this.Finish ();
-
- if (tags_selected != null && tags_selected.Count > 0) {
- for (int i = 0; i < collection.Count; i++) {
- Photo p = collection [i] as Photo;
-
- if (p == null)
- continue;
-
- p.AddTag ((Tag [])tags_selected.ToArray(typeof(Tag)));
- store.Commit (p);
- }
- }
-
- int width, height;
- this.Dialog.GetSize (out width, out height);
-
- FSpot.Preferences.Set (FSpot.Preferences.IMPORT_WINDOW_WIDTH, width);
- FSpot.Preferences.Set (FSpot.Preferences.IMPORT_WINDOW_HEIGHT, height);
- FSpot.Preferences.Set (FSpot.Preferences.IMPORT_WINDOW_PANE_POSITION, import_hpaned.Position);
-
- this.Dialog.Destroy ();
- return collection.Count;
- } else {
- this.Cancel ();
- //this.Dialog.Destroy();
- return 0;
- }
- }
-
- private void UpdateTagStore (string [] new_tags)
- {
- if (new_tags == null || new_tags.Length == 0)
- return;
-
- tags_selected = new ArrayList ();
- Db db = MainWindow.Toplevel.Database;
- db.BeginTransaction ();
- foreach (string tagname in new_tags) {
- Tag t = db.Tags.GetTagByName (tagname);
- if (t == null) {
- Category default_category = db.Tags.GetTagByName (Catalog.GetString ("Imported Tags")) as Category;
- if (default_category == null) {
- default_category = db.Tags.CreateCategory (null, Catalog.GetString ("Imported Tags"), false);
- default_category.ThemeIconName = "gtk-new";
- }
- t = db.Tags.CreateCategory (default_category, tagname, false) as Tag;
- db.Tags.Commit (t);
- }
-
- tags_selected.Add (t);
- }
- db.CommitTransaction ();
-
- ArrayList tagnames = new ArrayList ();
- foreach (Tag t in tags_selected)
- tagnames.Add (t.Name);
- tag_entry.UpdateFromTagNames ((string [])tagnames.ToArray(typeof(string)));
- }
-
- public void Cancel ()
- {
- idle_start.Stop ();
- step.Stop ();
- if (importer != null) {
- importer.Cancel ();
- importer = null;
- }
-
- if (collection == null || collection.Count == 0)
- return;
-
- Photo [] photos = new Photo [collection.Count];
- for (int i = 0; i < collection.Count; i++)
- photos [i] = (Photo) collection [i];
-
- store.Remove (photos);
- }
-
- public bool Start ()
- {
- if (Dialog != null)
- Dialog.Sensitive = true;
-
- if (import_path == null)
- return false;
-
- string [] pathimport = {ImportPath};
- //this.Dialog.Destroy();
-
- if (copy_check != null)
- copy = copy_check.Active;
-
- bool recurse = true;
- if (recurse_check != null)
- recurse = recurse_check.Active;
-
- bool detect_duplicates = false;
- if (duplicate_check != null)
- detect_duplicates = duplicate_check.Active;
-
-// importer = new FileImportBackend (store, pathimport, copy, recurse, null);
- importer = new FileImportBackend (store, pathimport, copy, recurse, detect_duplicates, null, Dialog);
- AllowFinish = false;
-
- total = importer.Prepare ();
-
- if (total > 0)
- UpdateProgressBar (1, total);
-
- collection.Clear ();
- collection.Capacity = total;
-
- if (total > 0)
- step.Start ();
-
- return false;
- }
-
- public int ImportFromPaths (PhotoStore store, string [] paths, bool copy)
- {
- return ImportFromPaths (store, paths, null, copy);
- }
-
- public int ImportFromPaths (PhotoStore store, string [] paths, Tag [] tags)
- {
- return ImportFromPaths (store, paths, tags, false);
- }
-
- public int ImportFromPaths (PhotoStore store, string [] paths, Tag [] tags, bool copy)
- {
- collection = new FSpot.PhotoList (new Photo [0]);
- int count = DoImport (new FileImportBackend (store, paths, copy, true, tags, main_window ));
-
- Finish ();
-
- return count;
- }
-
-#if TEST_IMPORT_COMMAND
-
- private const string db_path = "/tmp/ImportCommandTest.db";
- private static string directory_path;
-
- private static bool OnIdleStartImport ()
- {
- Db db = new Db (db_path, true);
-
- ImportCommand command = new ImportCommand ();
-
- command.ImportFromPath (db.Photos, directory_path, true);
-
- Application.Quit ();
- return false;
- }
-
- public static void Main (string [] args)
- {
- Program program = new Program ("ImportCommandTest", "0.0", Modules.UI, args);
-
- try {
- File.Delete (db_path);
- } catch {}
-
- directory_path = args [0];
-
- Idle.Add (new IdleHandler (OnIdleStartImport));
- program.Run ();
- }
-
-#endif
-}
-
-public class StepStatusInfo {
- private Photo photo;
- private Pixbuf thumbnail;
- private int count;
- private bool is_duplicate;
-
- public Photo Photo {
- get {
- return photo;
- }
- }
-
- public Pixbuf Thumbnail {
- get {
- return thumbnail;
- }
- }
-
- public int Count {
- get {
- return count;
- }
- }
-
- public bool IsDuplicate {
- get {
- return is_duplicate;
- }
- }
-
- public StepStatusInfo (Photo photo, Pixbuf thumbnail, int count, bool is_duplicate)
- {
- this.photo = photo;
- this.thumbnail = thumbnail;
- this.count = count;
- this.is_duplicate = is_duplicate;
- }
-
- public StepStatusInfo (Photo photo, Pixbuf thumbnail, int count)
- : this (photo, thumbnail, count, false)
- { }
-}
-
-
diff --git a/src/InternalProcess.cs b/src/InternalProcess.cs
index 15d6e43..7cb2d2f 100644
--- a/src/InternalProcess.cs
+++ b/src/InternalProcess.cs
@@ -18,10 +18,8 @@ namespace FSpot {
internal class InternalProcess {
int stdin;
int stdout;
- int stderr;
IOChannel input;
IOChannel output;
- IOChannel errorput;
public IOChannel StandardInput {
get {
@@ -35,12 +33,6 @@ namespace FSpot {
}
}
- public IOChannel StandardError {
- get {
- return errorput;
- }
- }
-
[DllImport("libglib-2.0-0.dll")]
static extern bool g_spawn_async_with_pipes (string working_dir,
string [] argv,
diff --git a/src/JobScheduler/Makefile.am b/src/JobScheduler/Makefile.am
new file mode 100644
index 0000000..ea7b555
--- /dev/null
+++ b/src/JobScheduler/Makefile.am
@@ -0,0 +1,16 @@
+ASSEMBLY = FSpot.JobScheduler
+TARGET = library
+LINK = $(REF_FSPOT_JOB_SCHEDULER)
+
+SOURCES = \
+ FSpotCompat.cs \
+ IInstanceCriticalJob.cs \
+ IJob.cs \
+ IntervalHeap.cs \
+ JobPriority.cs \
+ JobStatus.cs \
+ Scheduler.cs
+
+RESOURCES =
+
+include $(top_srcdir)/build/build.mk
diff --git a/src/JobScheduler/Makefile.in b/src/JobScheduler/Makefile.in
new file mode 100644
index 0000000..2352bb6
--- /dev/null
+++ b/src/JobScheduler/Makefile.in
@@ -0,0 +1,810 @@
+# Makefile.in generated by automake 1.11.1 from Makefile.am.
+# @configure_input@
+
+# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
+# 2003, 2004, 2005, 2006, 2007, 2008, 2009 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.
+
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
+# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
+# PARTICULAR PURPOSE.
+
+ at SET_MAKE@
+
+VPATH = @srcdir@
+pkgdatadir = $(datadir)/@PACKAGE@
+pkgincludedir = $(includedir)/@PACKAGE@
+pkglibdir = $(libdir)/@PACKAGE@
+pkglibexecdir = $(libexecdir)/@PACKAGE@
+am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
+install_sh_DATA = $(install_sh) -c -m 644
+install_sh_PROGRAM = $(install_sh) -c
+install_sh_SCRIPT = $(install_sh) -c
+INSTALL_HEADER = $(INSTALL_DATA)
+transform = $(program_transform_name)
+NORMAL_INSTALL = :
+PRE_INSTALL = :
+POST_INSTALL = :
+NORMAL_UNINSTALL = :
+PRE_UNINSTALL = :
+POST_UNINSTALL = :
+build_triplet = @build@
+host_triplet = @host@
+DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in \
+ $(top_srcdir)/build/build.environment.mk \
+ $(top_srcdir)/build/build.mk \
+ $(top_srcdir)/build/build.rules.mk
+ at ENABLE_TESTS_TRUE@am__append_1 = " $(NUNIT_LIBS)"
+subdir = src/JobScheduler
+ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
+am__aclocal_m4_deps = $(top_srcdir)/build/m4/shave/shave.m4 \
+ $(top_srcdir)/build/m4/shamrock/expansions.m4 \
+ $(top_srcdir)/build/m4/shamrock/gnome-doc.m4 \
+ $(top_srcdir)/build/m4/shamrock/mono.m4 \
+ $(top_srcdir)/build/m4/shamrock/nunit.m4 \
+ $(top_srcdir)/build/m4/shamrock/programs.m4 \
+ $(top_srcdir)/build/m4/f-spot/flickrnet.m4 \
+ $(top_srcdir)/build/m4/f-spot/gnome-keyring-sharp.m4 \
+ $(top_srcdir)/build/m4/f-spot/gtk-sharp.m4 \
+ $(top_srcdir)/build/m4/f-spot/mono-addins.m4 \
+ $(top_srcdir)/acinclude.m4 $(top_srcdir)/configure.ac
+am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
+ $(ACLOCAL_M4)
+mkinstalldirs = $(install_sh) -d
+CONFIG_HEADER = $(top_builddir)/config.h
+CONFIG_CLEAN_FILES =
+CONFIG_CLEAN_VPATH_FILES =
+am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`;
+am__vpath_adj = case $$p in \
+ $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \
+ *) f=$$p;; \
+ esac;
+am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`;
+am__install_max = 40
+am__nobase_strip_setup = \
+ srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'`
+am__nobase_strip = \
+ for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||"
+am__nobase_list = $(am__nobase_strip_setup); \
+ for p in $$list; do echo "$$p $$p"; done | \
+ sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \
+ $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \
+ if (++n[$$2] == $(am__install_max)) \
+ { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \
+ END { for (dir in files) print dir, files[dir] }'
+am__base_list = \
+ sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \
+ sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g'
+am__installdirs = "$(DESTDIR)$(moduledir)"
+SCRIPTS = $(module_SCRIPTS)
+DIST_SOURCES =
+DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
+ACLOCAL = @ACLOCAL@
+ACLOCAL_AMFLAGS = @ACLOCAL_AMFLAGS@
+ALL_LINGUAS = @ALL_LINGUAS@
+AMTAR = @AMTAR@
+AM_MAKEFLAGS = @AM_MAKEFLAGS@
+API_VERSION = @API_VERSION@
+AR = @AR@
+ASM_VERSION = @ASM_VERSION@
+AUTOCONF = @AUTOCONF@
+AUTOHEADER = @AUTOHEADER@
+AUTOMAKE = @AUTOMAKE@
+AWK = @AWK@
+CATALOGS = @CATALOGS@
+CATOBJEXT = @CATOBJEXT@
+CC = @CC@
+CCDEPMODE = @CCDEPMODE@
+CFLAGS = @CFLAGS@
+CPP = @CPP@
+CPPFLAGS = @CPPFLAGS@
+CSC_DEFINES = @CSC_DEFINES@
+CXX = @CXX@
+CXXCPP = @CXXCPP@
+CXXDEPMODE = @CXXDEPMODE@
+CXXFLAGS = @CXXFLAGS@
+CYGPATH_W = @CYGPATH_W@
+DATADIRNAME = @DATADIRNAME@
+DEFS = @DEFS@
+DEPDIR = @DEPDIR@
+DISPLAY_VERSION = @DISPLAY_VERSION@
+DISTCHECK_CONFIGURE_FLAGS = @DISTCHECK_CONFIGURE_FLAGS@
+DOC_USER_FORMATS = @DOC_USER_FORMATS@
+DSYMUTIL = @DSYMUTIL@
+DUMPBIN = @DUMPBIN@
+ECHO_C = @ECHO_C@
+ECHO_N = @ECHO_N@
+ECHO_T = @ECHO_T@
+EGREP = @EGREP@
+EXEEXT = @EXEEXT@
+EXIF_CFLAGS = @EXIF_CFLAGS@
+EXIF_LIBS = @EXIF_LIBS@
+EXIF_SOVERSION = @EXIF_SOVERSION@
+F77 = @F77@
+FC = @FC@
+FGREP = @FGREP@
+FLICKRNET_CFLAGS = @FLICKRNET_CFLAGS@
+FLICKRNET_LIBS = @FLICKRNET_LIBS@
+F_CFLAGS = @F_CFLAGS@
+F_LIBS = @F_LIBS@
+GAPI2CODEGEN = @GAPI2CODEGEN@
+GAPI2FIXUP = @GAPI2FIXUP@
+GAPI2PARSER = @GAPI2PARSER@
+GCONFTOOL = @GCONFTOOL@
+GCONF_SCHEMA_CONFIG_SOURCE = @GCONF_SCHEMA_CONFIG_SOURCE@
+GCONF_SCHEMA_FILE_DIR = @GCONF_SCHEMA_FILE_DIR@
+GCONF_SHARP_CFLAGS = @GCONF_SHARP_CFLAGS@
+GCONF_SHARP_LIBS = @GCONF_SHARP_LIBS@
+GETTEXT_PACKAGE = @GETTEXT_PACKAGE@
+GIO_CFLAGS = @GIO_CFLAGS@
+GIO_LIBS = @GIO_LIBS@
+GLIBSHARP_2_12_7_CFLAGS = @GLIBSHARP_2_12_7_CFLAGS@
+GLIBSHARP_2_12_7_LIBS = @GLIBSHARP_2_12_7_LIBS@
+GLIBSHARP_CFLAGS = @GLIBSHARP_CFLAGS@
+GLIBSHARP_LIBS = @GLIBSHARP_LIBS@
+GLIB_CFLAGS = @GLIB_CFLAGS@
+GLIB_GENMARSHAL = @GLIB_GENMARSHAL@
+GLIB_LIBS = @GLIB_LIBS@
+GLIB_MKENUMS = @GLIB_MKENUMS@
+GMOFILES = @GMOFILES@
+GMSGFMT = @GMSGFMT@
+GNOME_ICON_THEME_PREFIX = @GNOME_ICON_THEME_PREFIX@
+GNOME_SCREENSAVER_SAVERDIR = @GNOME_SCREENSAVER_SAVERDIR@
+GNOME_SCREENSAVER_THEMESDIR = @GNOME_SCREENSAVER_THEMESDIR@
+GNOME_SHARP_CFLAGS = @GNOME_SHARP_CFLAGS@
+GNOME_SHARP_LIBS = @GNOME_SHARP_LIBS@
+GOBJECT_QUERY = @GOBJECT_QUERY@
+GREP = @GREP@
+GTKSHARP_A11Y_CFLAGS = @GTKSHARP_A11Y_CFLAGS@
+GTKSHARP_A11Y_LIBS = @GTKSHARP_A11Y_LIBS@
+GTKSHARP_CFLAGS = @GTKSHARP_CFLAGS@
+GTKSHARP_LIBS = @GTKSHARP_LIBS@
+HELP_DIR = @HELP_DIR@
+ICONS_DIRECTORY = @ICONS_DIRECTORY@
+INSTALL = @INSTALL@
+INSTALL_DATA = @INSTALL_DATA@
+INSTALL_PROGRAM = @INSTALL_PROGRAM@
+INSTALL_SCRIPT = @INSTALL_SCRIPT@
+INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
+INSTOBJEXT = @INSTOBJEXT@
+INTLLIBS = @INTLLIBS@
+INTLTOOL_EXTRACT = @INTLTOOL_EXTRACT@
+INTLTOOL_MERGE = @INTLTOOL_MERGE@
+INTLTOOL_PERL = @INTLTOOL_PERL@
+INTLTOOL_UPDATE = @INTLTOOL_UPDATE@
+KEYRINGSHARP_CFLAGS = @KEYRINGSHARP_CFLAGS@
+KEYRINGSHARP_LIBS = @KEYRINGSHARP_LIBS@
+LCMS_CFLAGS = @LCMS_CFLAGS@
+LCMS_LIBS = @LCMS_LIBS@
+LD = @LD@
+LDFLAGS = @LDFLAGS@
+LIBEXIF_VERSION_CHECK_CFLAGS = @LIBEXIF_VERSION_CHECK_CFLAGS@
+LIBEXIF_VERSION_CHECK_LIBS = @LIBEXIF_VERSION_CHECK_LIBS@
+LIBJPEG = @LIBJPEG@
+LIBOBJS = @LIBOBJS@
+LIBS = @LIBS@
+LIBTOOL = @LIBTOOL@
+LIPO = @LIPO@
+LN_S = @LN_S@
+LTLIBOBJS = @LTLIBOBJS@
+MAINT = @MAINT@
+MAKEFLAGS = @MAKEFLAGS@
+MAKEINFO = @MAKEINFO@
+MCS = @MCS@
+MKDIR_P = @MKDIR_P@
+MKINSTALLDIRS = @MKINSTALLDIRS@
+MONO = @MONO@
+MONO_ADDINS_CFLAGS = @MONO_ADDINS_CFLAGS@
+MONO_ADDINS_GUI_CFLAGS = @MONO_ADDINS_GUI_CFLAGS@
+MONO_ADDINS_GUI_LIBS = @MONO_ADDINS_GUI_LIBS@
+MONO_ADDINS_LIBS = @MONO_ADDINS_LIBS@
+MONO_ADDINS_SETUP_CFLAGS = @MONO_ADDINS_SETUP_CFLAGS@
+MONO_ADDINS_SETUP_LIBS = @MONO_ADDINS_SETUP_LIBS@
+MONO_MODULE_CFLAGS = @MONO_MODULE_CFLAGS@
+MONO_MODULE_LIBS = @MONO_MODULE_LIBS@
+MSGFMT = @MSGFMT@
+MSGFMT_OPTS = @MSGFMT_OPTS@
+MSGMERGE = @MSGMERGE@
+NDESK_DBUS_CFLAGS = @NDESK_DBUS_CFLAGS@
+NDESK_DBUS_LIBS = @NDESK_DBUS_LIBS@
+NM = @NM@
+NMEDIT = @NMEDIT@
+NUNIT_CFLAGS = @NUNIT_CFLAGS@
+NUNIT_LIBS = @NUNIT_LIBS@
+OBJC = @OBJC@
+OBJDUMP = @OBJDUMP@
+OBJEXT = @OBJEXT@
+OMF_DIR = @OMF_DIR@
+OTOOL = @OTOOL@
+OTOOL64 = @OTOOL64@
+PACKAGE = @PACKAGE@
+PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
+PACKAGE_NAME = @PACKAGE_NAME@
+PACKAGE_STRING = @PACKAGE_STRING@
+PACKAGE_TARNAME = @PACKAGE_TARNAME@
+PACKAGE_URL = @PACKAGE_URL@
+PACKAGE_VERSION = @PACKAGE_VERSION@
+PATH_SEPARATOR = @PATH_SEPARATOR@
+PKG_CONFIG = @PKG_CONFIG@
+POFILES = @POFILES@
+POSUB = @POSUB@
+PO_IN_DATADIR_FALSE = @PO_IN_DATADIR_FALSE@
+PO_IN_DATADIR_TRUE = @PO_IN_DATADIR_TRUE@
+Q = @Q@
+RANLIB = @RANLIB@
+SED = @SED@
+SET_MAKE = @SET_MAKE@
+SHELL = @SHELL@
+STRIP = @STRIP@
+TURTLEDIR = @TURTLEDIR@
+UNIQUE_CFLAGS = @UNIQUE_CFLAGS@
+UNIQUE_LIBS = @UNIQUE_LIBS@
+USE_NLS = @USE_NLS@
+V = @V@
+VERSION = @VERSION@
+WARN_CFLAGS = @WARN_CFLAGS@
+XGETTEXT = @XGETTEXT@
+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_DUMPBIN = @ac_ct_DUMPBIN@
+am__include = @am__include@
+am__leading_dot = @am__leading_dot@
+am__quote = @am__quote@
+am__tar = @am__tar@
+am__untar = @am__untar@
+bindir = @bindir@
+build = @build@
+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@
+expanded_bindir = @expanded_bindir@
+expanded_datadir = @expanded_datadir@
+expanded_libdir = @expanded_libdir@
+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@
+lt_ECHO = @lt_ECHO@
+mandir = @mandir@
+mkdir_p = @mkdir_p@
+oldincludedir = @oldincludedir@
+pdfdir = @pdfdir@
+prefix = @prefix@
+program_transform_name = @program_transform_name@
+psdir = @psdir@
+sbindir = @sbindir@
+sharedstatedir = @sharedstatedir@
+shavedir = @shavedir@
+srcdir = @srcdir@
+sysconfdir = @sysconfdir@
+target_alias = @target_alias@
+top_build_prefix = @top_build_prefix@
+top_builddir = @top_builddir@
+top_srcdir = @top_srcdir@
+ASSEMBLY = FSpot.JobScheduler
+TARGET = library
+LINK = $(REF_FSPOT_JOB_SCHEDULER) $(am__append_1)
+SOURCES = \
+ FSpotCompat.cs \
+ IInstanceCriticalJob.cs \
+ IJob.cs \
+ IntervalHeap.cs \
+ JobPriority.cs \
+ JobStatus.cs \
+ Scheduler.cs
+
+RESOURCES =
+
+# Initializers
+MONO_BASE_PATH =
+MONO_ADDINS_PATH =
+
+# Install Paths
+DEFAULT_INSTALL_DIR = $(pkglibdir)
+BACKENDS_INSTALL_DIR = $(DEFAULT_INSTALL_DIR)/Backends
+EXTENSIONS_INSTALL_DIR = $(DEFAULT_INSTALL_DIR)/Extensions
+DIR_DOCS = $(top_builddir)/docs
+DIR_EXTENSIONS = $(top_builddir)/extensions
+DIR_ICONS = $(top_builddir)/icons
+DIR_JPEGTRAN = $(top_builddir)/lib/libjpegtran
+DIR_LIBFSPOT = $(top_builddir)/lib/libfspot
+DIR_SEMWEB = $(top_builddir)/lib/semweb
+DIR_SRC = $(top_builddir)/src
+DIR_GIOSHARP = $(top_builddir)/lib/gio-sharp/gio
+DIR_GTKSHARPBEANS = $(top_builddir)/lib/gtk-sharp-beans
+DIR_UNIQUESHARP = $(top_builddir)/lib/unique-sharp/unique
+DIR_BIN = $(top_builddir)/bin
+
+# External libraries to link against, generated from configure
+LINK_SYSTEM = -r:System
+LINK_SYSTEMDATA = -r:System.Data
+LINK_SYSTEM_WEB = -r:System.Web
+LINK_MONO_POSIX = -r:Mono.Posix
+LINK_MONO_CAIRO = -r:Mono.Cairo
+LINK_MONO_SIMD = -r:Mono.Simd
+LINK_MONODATA = -r:Mono.Data
+LINK_MONO_DATA_SQLITECLIENT = -r:Mono.Data.SqliteClient
+LINK_ICSHARP_ZIP_LIB = -r:ICSharpCode.SharpZipLib
+LINK_KEYRING = $(KEYRINGSHARP_LIBS)
+LINK_GLIB = $(GLIBSHARP_LIBS)
+LINK_GTK = $(GTKSHARP_LIBS)
+LINK_GNOME = $(GNOME_SHARP_LIBS)
+LINK_GCONF = $(GCONF_SHARP_LIBS)
+LINK_GLADE = -pkg:glade-sharp-2.0
+LINK_FLICKRNET = -pkg:flickrnet
+LINK_DBUS = $(NDESK_DBUS_LIBS) $(NDESK_DBUS_GLIB_LIBS)
+LINK_DBUS_NO_GLIB = $(NDESK_DBUS_LIBS)
+LINK_MONO_ADDINS_DEPS = $(MONO_ADDINS_LIBS)
+LINK_MONO_ADDINS_SETUP_DEPS = $(MONO_ADDINS_SETUP_LIBS)
+LINK_MONO_ADDINS_GUI_DEPS = $(MONO_ADDINS_GUI_LIBS)
+
+# GIO
+REF_GIO =
+LINK_GIO = -r:$(DIR_GIOSHARP)/gio-sharp.dll
+LINK_GIO_DEPS = $(REF_GIO) $(LINK_GIO)
+
+# Gtk Beans
+REF_GTK_BEANS = $(LINK_GIO_DEPS)
+LINK_GTK_BEANS = -r:$(DIR_GTKSHARPBEANS)/gtk-sharp-beans.dll
+LINK_GTK_BEANS_DEPS = $(REF_GTK_BEANS) $(LINK_GTK_BEANS)
+
+# Uniqe
+REF_UNIQUE =
+LINK_UNIQUE = -r:$(DIR_UNIQUESHARP)/unique-sharp.dll
+LINK_UNIQUE_DEPS = $(REF_UNIQUE) $(LINK_UNIQUE)
+
+# Hyena
+REF_HYENA = $(LINK_SYSTEM) $(LINK_MONO_POSIX)
+LINK_HYENA = -r:$(DIR_BIN)/Hyena.dll
+LINK_HYENA_DEPS = $(REF_HYENA) $(LINK_HYENA)
+
+# Semweb
+REF_SEMWEB = $(LINK_SYSTEMDATA) $(LINK_HYENA_DEPS)
+LINK_SEMWEB = -r:$(DIR_BIN)/SemWeb.dll
+LINK_SEMWEB_DEPS = $(REF_SEMWEB) $(LINK_SEMWEB)
+
+# Hyena.Data.Sqlite
+REF_HYENA_DATA_SQLITE = $(LINK_SQLITE)
+LINK_HYENA_DATA_SQLITE = -r:$(DIR_BIN)/Hyena.Data.Sqlite.dll
+LINK_HYENA_DATA_SQLITE_DEPS = $(REF_HYENA_DATA_SQLITE) $(LINK_HYENA_DATA_SQLITE)
+
+# Hyena.Gui
+REF_HYENA_GUI = $(LINK_HYENA_DEPS)
+LINK_HYENA_GUI = -r:$(DIR_BIN)/Hyena.Gui.dll
+LINK_HENA_GUI_DEPS = $(REF_HYENA_GUI) $(LINK_HYENA_GUI)
+
+# FSpot.Cms
+REF_FSPOT_CMS = $(LINK_GTK)
+LINK_FSPOT_CMS = -r:$(DIR_BIN)/FSpot.Cms.dll
+LINK_FSPOT_CMS_DEPS = $(REF_FSPOT_CMS) $(LINK_FSPOT_CMS)
+
+# FSpot.Utils
+REF_FSPOT_UTILS = $(LINK_HYENA_DEPS) $(LINK_GTK) $(LINK_GIO) $(LINK_MONO_CAIRO)
+LINK_FSPOT_UTILS = -r:$(DIR_BIN)/FSpot.Utils.dll
+LINK_FSPOT_UTILS_DEPS = $(REF_FSPOT_UTILS) $(LINK_FSPOT_UTILS)
+
+# FSpot.Core
+REF_FSPOT_CORE = $(LINK_FSPOT_UTILS_DEPS) $(LINK_FSPOT_CMS_DEPS)
+LINK_FSPOT_CORE = -r:$(DIR_BIN)/FSpot.Core.dll
+LINK_FSPOT_CORE_DEPS = $(REF_FSPOT_CORE) $(LINK_FSPOT_CORE)
+
+# FSpot.Query
+REF_FSPOT_QUERY = $(LINK_FSPOT_CORE_DEPS)
+LINK_FSPOT_QUERY = -r:$(DIR_BIN)/FSpot.Query.dll
+LINK_FSPOT_QUERY_DEPS = $(REF_FSPOT_QUERY) $(LINK_FSPOT_QUERY)
+
+# FSpot.JobScheduler
+REF_FSPOT_JOB_SCHEDULER = $(LINK_HYENA_DEPS)
+LINK_FSPOT_JOB_SCHEDULER = -r:$(DIR_BIN)/FSpot.JobScheduler.dll
+LINK_FSPOT_JOB_SCHEDULER_DEPS = $(REF_FSPOT_JOB_SCHEDULER) $(LINK_FSPOT_JOB_SCHEDULER)
+
+# FSpot.Bling
+REF_FSPOT_BLING = $(LINK_GTK_BEANS_DEPS) $(LINK_GLIB)
+LINK_FSPOT_BLING = -r:$(DIR_BIN)/FSpot.Bling.dll
+LINK_FSPOT_BLING_DEPS = $(REF_FSPOT_BLING) $(LINK_FSPOT_BLING)
+
+# FSpot.Platform
+REF_FSPOT_PLATFORM = $(LINK_GCONF) $(LINK_GTK) $(LINK_FSPOT_CORE_DEPS) $(LINK_DBUS)
+LINK_FSPOT_PLATFORM = -r:$(DIR_BIN)/FSpot.Platform.dll
+LINK_FSPOT_PLATFORM_DEPS = $(REF_FSPOT_PLATFORM) $(LINK_FSPOT_PLATFORM)
+
+# FSpot.Widgets
+REF_FSPOT_WIDGETS = $(LINK_FSPOT_CORE_DEPS) $(LINK_FSPOT_BLING_DEPS)
+LINK_FSPOT_WIDGETS = -r:$(DIR_BIN)/FSpot.Widgets.dll
+LINK_FSPOT_WIDGETS_DEPS = $(REF_FSPOT_WIDGETS) $(LINK_FSPOT_WIDGETS)
+
+# FSpot (executable)
+REF_FSPOT = $(LINK_FSPOT_WIDGETS_DEPS) $(LINK_FSPOT_PLATFORM_DEPS) $(LINK_FSPOT_QUERY_DEPS) \
+ $(LINK_GLIB) $(LINK_MONO_ADDINS_DEPS) $(LINK_UNIQUE_DEPS) $(LINK_MONO_ADDINS_SETUP_DEPS) \
+ $(LINK_SEMWEB_DEPS) $(LINK_GLADE) $(LINK_MONODATA) $(LINK_MONO_DATA_SQLITECLIENT) \
+ $(LINK_MONO_ADDINS_GUI_DEPS) $(LINK_FSPOT_JOB_SCHEDULER_DEPS) $(LINK_ICSHARP_ZIP_LIB) \
+ $(LINK_GNOME)
+
+# FIXME: do not link executables
+LINK_FSPOT = -r:$(DIR_BIN)/f-spot.exe
+LINK_FSPOT_DEPS = $(REF_FSPOT) $(LINK_FSPOT)
+
+# Extensions
+REF_FSPOT_EXTENSION_BLACKOUTEDITOR = $(LINK_FSPOT_DEPS)
+REF_FSPOT_EXTENSION_BWEDITOR = $(LINK_FSPOT_DEPS) $(LINK_MONO_SIMD)
+REF_FSPOT_EXTENSION_FLIPEDITOR = $(LINK_FSPOT_DEPS)
+REF_FSPOT_EXTENSION_PIXELATEEDITOR = $(LINK_FSPOT_DEPS)
+REF_FSPOT_EXTENSION_RESIZEEDITOR = $(LINK_FSPOT_DEPS)
+REF_FSPOT_EXTENSION_CDEXPORT = $(LINK_FSPOT_DEPS)
+REF_FSPOT_EXTENSION_FACEBOOKEXPORT = $(LINK_FSPOT_DEPS) $(LINK_KEYRING)
+REF_FSPOT_EXTENSION_FLICKREXPORT = $(LINK_FSPOT_DEPS) $(LINK_FLICKRNET)
+REF_FSPOT_EXTENSION_FOLDEREXPORT = $(LINK_FSPOT_DEPS) $(LINK_SYSTEM_WEB)
+REF_FSPOT_EXTENSION_GALLERYEXPORT = $(LINK_FSPOT_DEPS)
+REF_MONO_GOOGLE = $(LINK_HYENA_DEPS)
+LINK_MONO_GOOGLE = -r:$(DIR_BIN)/Mono.Google.dll
+LINK_MONO_GOOGLE_DEPS = $(REF_MONO_GOOGLE) $(LINK_MONO_GOOGLE)
+REF_FSPOT_EXTENSION_PICASAWEBEXPORT = $(LINK_FSPOT_DEPS) $(LINK_MONO_GOOGLE) $(LINK_KEYRING)
+REF_SMUGMUGNET = $(LINK_FSPOT_DEPS)
+LINK_SMUGMUGNET = -r:$(DIR_BIN)/SmugMugNet.dll
+LINK_SMUGMUGNET_DEPS = $(REF_SMUGMUGNET) $(LINK_SMUGMUGNET)
+REF_FSPOT_EXTENSION_SMUGMUGEXPORT = $(LINK_SMUGMUGNET_DEPS) $(LINK_KEYRING)
+REF_MONO_TABBLO = $(LINK_HYENA_DEPS)
+LINK_MONO_TABBLO = -r:$(DIR_BIN)/Mono.Tabblo.dll
+LINK_MONO_TABBLO_DEPS = $(REF_MONO_TABBLO) $(LINK_MONO_TABBLO)
+REF_FSPOT_EXTENSION_TABBLOEXPORT = $(LINK_FSPOT_DEPS) $(LINK_KEYRING) $(LINK_MONO_TABBLO_DEPS)
+REF_FSPOT_EXTENSION_ZIPEXPORT = $(LINK_FSPOT_DEPS)
+REF_FSPOT_EXTENSION_CHANGEPHOTOPATH = $(LINK_FSPOT_DEPS)
+REF_FSPOT_EXTENSION_DEVELOPINUFRAW = $(LINK_FSPOT_DEPS)
+REF_FSPOT_EXTENSION_HASHJOB = $(LINK_FSPOT_DEPS)
+REF_FSPOT_EXTENSION_LIVEWEBGALLERY = $(LINK_FSPOT_DEPS)
+REF_FSPOT_EXTENSION_MERGEDB = $(LINK_FSPOT_DEPS)
+REF_FSPOT_EXTENSION_RAWPLUSJPEG = $(LINK_FSPOT_DEPS)
+REF_FSPOT_EXTENSION_RETROACTIVEROLL = $(LINK_FSPOT_DEPS)
+REF_FSPOT_EXTENSION_SCREENSAVERCONFIG = $(LINK_FSPOT_DEPS)
+REF_FSPOT_EXTENSION_COVERTRANSITION = $(LINK_FSPOT_DEPS)
+
+# Cute hack to replace a space with something
+colon := :
+empty :=
+space := $(empty) $(empty)
+
+# Build path to allow running uninstalled
+RUN_PATH = $(subst $(space),$(colon), $(MONO_BASE_PATH))
+UNIQUE_FILTER_PIPE = tr [:space:] \\n | sort | uniq
+BUILD_DATA_DIR = $(top_builddir)/bin/share/$(PACKAGE)
+
+# Since all other attempts failed, we currently go this way:
+# This code adds the file specified in ASSEMBLY_INFO_SOURCE to SOURCES_BUILD.
+# If no such file is specified, the default AssemblyInfo.cs is used.
+ASSEMBLY_INFO_SOURCE_REAL = \
+ $(shell if [ "$(ASSEMBLY_INFO_SOURCE)" ]; \
+ then \
+ echo "$(addprefix $(srcdir)/, $(ASSEMBLY_INFO_SOURCE))"; \
+ else \
+ echo "$(top_srcdir)/src/AssemblyInfo.cs"; \
+ fi)
+
+SOURCES_BUILD = $(addprefix $(srcdir)/, $(SOURCES)) \
+ $(ASSEMBLY_INFO_SOURCE_REAL)
+RESOURCES_EXPANDED = $(addprefix $(srcdir)/, $(RESOURCES))
+RESOURCES_BUILD = $(foreach resource, $(RESOURCES_EXPANDED), \
+ -resource:$(resource),$(notdir $(resource)))
+
+INSTALL_ICONS = $(top_srcdir)/build/private-icon-theme-installer "$(mkinstalldirs)" "$(INSTALL_DATA)"
+THEME_ICONS_SOURCE = $(wildcard $(srcdir)/ThemeIcons/*/*/*.png) $(wildcard $(srcdir)/ThemeIcons/scalable/*/*.svg)
+THEME_ICONS_RELATIVE = $(subst $(srcdir)/ThemeIcons/, , $(THEME_ICONS_SOURCE))
+ASSEMBLY_EXTENSION = $(strip $(patsubst library, dll, $(TARGET)))
+ASSEMBLY_FILE = $(top_builddir)/bin/$(ASSEMBLY).$(ASSEMBLY_EXTENSION)
+INSTALL_DIR_RESOLVED = $(firstword $(subst , $(DEFAULT_INSTALL_DIR), $(INSTALL_DIR)))
+ at ENABLE_TESTS_TRUE@ENABLE_TESTS_FLAG = "-define:ENABLE_TESTS"
+ at ENABLE_ATK_TRUE@ENABLE_ATK_FLAG = "-define:ENABLE_ATK"
+FILTERED_LINK = $(shell echo "$(LINK)" | $(UNIQUE_FILTER_PIPE))
+DEP_LINK = $(shell echo "$(LINK)" | $(UNIQUE_FILTER_PIPE) | sed s,-r:,,g | grep '$(top_builddir)/bin/')
+OUTPUT_FILES = \
+ $(ASSEMBLY_FILE) \
+ $(ASSEMBLY_FILE).mdb
+
+moduledir = $(INSTALL_DIR_RESOLVED)
+module_SCRIPTS = $(OUTPUT_FILES)
+EXTRA_DIST = $(SOURCES_BUILD) $(RESOURCES_EXPANDED) $(THEME_ICONS_SOURCE)
+CLEANFILES = $(OUTPUT_FILES) $(ASSEMBLY_FILE).config
+DISTCLEANFILES = *.pidb
+MAINTAINERCLEANFILES = Makefile.in
+all: all-am
+
+.SUFFIXES:
+$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(top_srcdir)/build/build.mk $(top_srcdir)/build/build.environment.mk $(top_srcdir)/build/build.rules.mk $(am__configure_deps)
+ @for dep in $?; do \
+ case '$(am__configure_deps)' in \
+ *$$dep*) \
+ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \
+ && { if test -f $@; then exit 0; else break; fi; }; \
+ exit 1;; \
+ esac; \
+ done; \
+ echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign src/JobScheduler/Makefile'; \
+ $(am__cd) $(top_srcdir) && \
+ $(AUTOMAKE) --foreign src/JobScheduler/Makefile
+.PRECIOUS: Makefile
+Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
+ @case '$?' in \
+ *config.status*) \
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \
+ *) \
+ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \
+ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \
+ esac;
+
+$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+
+$(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps)
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps)
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(am__aclocal_m4_deps):
+install-moduleSCRIPTS: $(module_SCRIPTS)
+ @$(NORMAL_INSTALL)
+ test -z "$(moduledir)" || $(MKDIR_P) "$(DESTDIR)$(moduledir)"
+ @list='$(module_SCRIPTS)'; test -n "$(moduledir)" || list=; \
+ for p in $$list; do \
+ if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \
+ if test -f "$$d$$p"; then echo "$$d$$p"; echo "$$p"; else :; fi; \
+ done | \
+ sed -e 'p;s,.*/,,;n' \
+ -e 'h;s|.*|.|' \
+ -e 'p;x;s,.*/,,;$(transform)' | sed 'N;N;N;s,\n, ,g' | \
+ $(AWK) 'BEGIN { files["."] = ""; dirs["."] = 1; } \
+ { d=$$3; if (dirs[d] != 1) { print "d", d; dirs[d] = 1 } \
+ if ($$2 == $$4) { files[d] = files[d] " " $$1; \
+ if (++n[d] == $(am__install_max)) { \
+ print "f", d, files[d]; n[d] = 0; files[d] = "" } } \
+ else { print "f", d "/" $$4, $$1 } } \
+ END { for (d in files) print "f", d, files[d] }' | \
+ while read type dir files; do \
+ if test "$$dir" = .; then dir=; else dir=/$$dir; fi; \
+ test -z "$$files" || { \
+ echo " $(INSTALL_SCRIPT) $$files '$(DESTDIR)$(moduledir)$$dir'"; \
+ $(INSTALL_SCRIPT) $$files "$(DESTDIR)$(moduledir)$$dir" || exit $$?; \
+ } \
+ ; done
+
+uninstall-moduleSCRIPTS:
+ @$(NORMAL_UNINSTALL)
+ @list='$(module_SCRIPTS)'; test -n "$(moduledir)" || exit 0; \
+ files=`for p in $$list; do echo "$$p"; done | \
+ sed -e 's,.*/,,;$(transform)'`; \
+ test -n "$$list" || exit 0; \
+ echo " ( cd '$(DESTDIR)$(moduledir)' && rm -f" $$files ")"; \
+ cd "$(DESTDIR)$(moduledir)" && rm -f $$files
+
+mostlyclean-libtool:
+ -rm -f *.lo
+
+clean-libtool:
+ -rm -rf .libs _libs
+tags: TAGS
+TAGS:
+
+ctags: CTAGS
+CTAGS:
+
+
+distdir: $(DISTFILES)
+ @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; \
+ if test -d $$d/$$file; then \
+ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \
+ if test -d "$(distdir)/$$file"; then \
+ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
+ fi; \
+ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
+ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \
+ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
+ fi; \
+ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \
+ else \
+ test -f "$(distdir)/$$file" \
+ || cp -p $$d/$$file "$(distdir)/$$file" \
+ || exit 1; \
+ fi; \
+ done
+check-am: all-am
+check: check-am
+all-am: Makefile $(SCRIPTS)
+installdirs:
+ for dir in "$(DESTDIR)$(moduledir)"; do \
+ test -z "$$dir" || $(MKDIR_P) "$$dir"; \
+ done
+install: install-am
+install-exec: install-exec-am
+install-data: install-data-am
+uninstall: uninstall-am
+
+install-am: all-am
+ @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
+
+installcheck: installcheck-am
+install-strip:
+ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+ `test -z '$(STRIP)' || \
+ echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install
+mostlyclean-generic:
+
+clean-generic:
+ -test -z "$(CLEANFILES)" || rm -f $(CLEANFILES)
+
+distclean-generic:
+ -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
+ -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES)
+ -test -z "$(DISTCLEANFILES)" || rm -f $(DISTCLEANFILES)
+
+maintainer-clean-generic:
+ @echo "This command is intended for maintainers to use"
+ @echo "it deletes files that may require special tools to rebuild."
+ -test -z "$(MAINTAINERCLEANFILES)" || rm -f $(MAINTAINERCLEANFILES)
+clean: clean-am
+
+clean-am: clean-generic clean-libtool mostlyclean-am
+
+distclean: distclean-am
+ -rm -f Makefile
+distclean-am: clean-am distclean-generic
+
+dvi: dvi-am
+
+dvi-am:
+
+html: html-am
+
+html-am:
+
+info: info-am
+
+info-am:
+
+install-data-am: install-data-local install-moduleSCRIPTS
+
+install-dvi: install-dvi-am
+
+install-dvi-am:
+
+install-exec-am:
+
+install-html: install-html-am
+
+install-html-am:
+
+install-info: install-info-am
+
+install-info-am:
+
+install-man:
+
+install-pdf: install-pdf-am
+
+install-pdf-am:
+
+install-ps: install-ps-am
+
+install-ps-am:
+
+installcheck-am:
+
+maintainer-clean: maintainer-clean-am
+ -rm -f Makefile
+maintainer-clean-am: distclean-am maintainer-clean-generic
+
+mostlyclean: mostlyclean-am
+
+mostlyclean-am: mostlyclean-generic mostlyclean-libtool
+
+pdf: pdf-am
+
+pdf-am:
+
+ps: ps-am
+
+ps-am:
+
+uninstall-am: uninstall-local uninstall-moduleSCRIPTS
+
+.MAKE: install-am install-strip
+
+.PHONY: all all-am check check-am clean clean-generic clean-libtool \
+ distclean distclean-generic distclean-libtool distdir dvi \
+ dvi-am html html-am info info-am install install-am \
+ install-data install-data-am install-data-local install-dvi \
+ install-dvi-am install-exec install-exec-am install-html \
+ install-html-am install-info install-info-am install-man \
+ install-moduleSCRIPTS install-pdf install-pdf-am install-ps \
+ install-ps-am install-strip installcheck installcheck-am \
+ installdirs maintainer-clean maintainer-clean-generic \
+ mostlyclean mostlyclean-generic mostlyclean-libtool pdf pdf-am \
+ ps ps-am uninstall uninstall-am uninstall-local \
+ uninstall-moduleSCRIPTS
+
+
+all: $(ASSEMBLY_FILE) theme-icons
+
+run:
+ @pushd $(top_builddir); \
+ make run; \
+ popd;
+
+# uncommented for now.
+# tests are currently excuted from Makefile in $(top_builddir)
+#test:
+# @pushd $(top_builddir)/tests; \
+# make $(ASSEMBLY); \
+# popd;
+
+build-debug:
+ @echo $(DEP_LINK)
+
+$(ASSEMBLY_FILE).mdb: $(ASSEMBLY_FILE)
+
+$(ASSEMBLY_FILE): $(SOURCES_BUILD) $(RESOURCES_EXPANDED) $(DEP_LINK)
+ @mkdir -p $(top_builddir)/bin
+ @if [ ! "x$(ENABLE_RELEASE)" = "xyes" ]; then \
+ $(top_srcdir)/build/dll-map-makefile-verifier $(srcdir)/Makefile.am $(srcdir)/$(notdir $@.config) && \
+ $(MONO) $(top_builddir)/build/dll-map-verifier.exe $(srcdir)/$(notdir $@.config) -iwinmm -ilibbanshee -ilibbnpx11 -ilibc -ilibc.so.6 -iintl -ilibmtp.dll -ilibigemacintegration.dylib -iCFRelease $(SOURCES_BUILD); \
+ fi;
+ $(MCS) \
+ $(GMCS_FLAGS) \
+ $(ASSEMBLY_BUILD_FLAGS) \
+ -nowarn:0278 -nowarn:0078 $$warn \
+ -define:HAVE_GTK_2_10 -define:NET_2_0 \
+ -debug -target:$(TARGET) -out:$@ \
+ $(BUILD_DEFINES) $(ENABLE_TESTS_FLAG) $(ENABLE_ATK_FLAG) \
+ $(FILTERED_LINK) $(RESOURCES_BUILD) $(SOURCES_BUILD)
+ @if [ -e $(srcdir)/$(notdir $@.config) ]; then \
+ cp $(srcdir)/$(notdir $@.config) $(top_builddir)/bin; \
+ fi;
+ @if [ ! -z "$(EXTRA_BUNDLE)" ]; then \
+ cp $(EXTRA_BUNDLE) $(top_builddir)/bin; \
+ fi;
+
+theme-icons: $(THEME_ICONS_SOURCE)
+ @$(INSTALL_ICONS) -il "$(BUILD_DATA_DIR)" "$(srcdir)" $(THEME_ICONS_RELATIVE)
+
+install-data-local: $(THEME_ICONS_SOURCE)
+ @$(INSTALL_ICONS) -i "$(DESTDIR)$(pkgdatadir)" "$(srcdir)" $(THEME_ICONS_RELATIVE)
+
+uninstall-local: $(THEME_ICONS_SOURCE)
+ @$(INSTALL_ICONS) -u "$(DESTDIR)$(pkgdatadir)" "$(srcdir)" $(THEME_ICONS_RELATIVE)
+
+# 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.
+.NOEXPORT:
diff --git a/src/JobScheduler/Scheduler.cs b/src/JobScheduler/Scheduler.cs
index 0fabc24..e029ee2 100644
--- a/src/JobScheduler/Scheduler.cs
+++ b/src/JobScheduler/Scheduler.cs
@@ -29,6 +29,7 @@
using System;
using System.Threading;
using System.Collections.Generic;
+using Hyena;
namespace Banshee.Kernel
{
@@ -213,7 +214,7 @@ namespace Banshee.Kernel
lock(this_mutex) {
if(disposed) {
- FSpot.Utils.Log.Debug ("execution thread destroyed, dispose requested");
+ Log.Debug ("execution thread destroyed, dispose requested");
return;
}
diff --git a/src/Jobs/CalculateHashJob.cs b/src/Jobs/CalculateHashJob.cs
index 4c93505..d2a9007 100644
--- a/src/Jobs/CalculateHashJob.cs
+++ b/src/Jobs/CalculateHashJob.cs
@@ -10,6 +10,7 @@
using System;
using Banshee.Kernel;
using FSpot.Utils;
+using Hyena;
namespace FSpot.Jobs {
public class CalculateHashJob : Job
@@ -35,14 +36,14 @@ namespace FSpot.Jobs {
System.Threading.Thread.Sleep (200);
uint photo_id = Convert.ToUInt32 (JobOptions);
- Log.Debug ("Calculating Hash {0}...", photo_id);
+ Log.DebugFormat ("Calculating Hash {0}...", photo_id);
try {
Photo photo = FSpot.App.Instance.Database.Photos.Get (Convert.ToUInt32 (photo_id)) as Photo;
- FSpot.App.Instance.Database.Photos.UpdateMD5Sum (photo);
+ FSpot.App.Instance.Database.Photos.CalculateMD5Sum (photo);
return true;
} catch (System.Exception e) {
- Log.Debug ("Error Calculating Hash for photo {0}: {1}", JobOptions, e.Message);
+ Log.DebugFormat ("Error Calculating Hash for photo {0}: {1}", JobOptions, e.Message);
}
return false;
}
diff --git a/src/Jobs/SyncMetadataJob.cs b/src/Jobs/SyncMetadataJob.cs
index b0ceadd..0ecda15 100644
--- a/src/Jobs/SyncMetadataJob.cs
+++ b/src/Jobs/SyncMetadataJob.cs
@@ -10,6 +10,7 @@
using System;
using Banshee.Kernel;
using FSpot.Utils;
+using Hyena;
namespace FSpot.Jobs {
public class SyncMetadataJob : Job
@@ -32,13 +33,13 @@ namespace FSpot.Jobs {
{
//this will add some more reactivity to the system
System.Threading.Thread.Sleep (500);
- Console.WriteLine ("Syncing metadata to file...");
+ Log.Debug ("Syncing metadata to file...");
try {
Photo photo = FSpot.App.Instance.Database.Photos.Get (Convert.ToUInt32 (JobOptions)) as Photo;
WriteMetadataToImage (photo);
return true;
} catch (System.Exception e) {
- Console.WriteLine ("Error syncing metadata to file\n{0}", e);
+ Log.ErrorFormat ("Error syncing metadata to file\n{0}", e);
}
return false;
}
@@ -46,9 +47,9 @@ namespace FSpot.Jobs {
//FIXME: Won't work on non-file uris
void WriteMetadataToImage (Photo photo)
{
- string path = photo.DefaultVersionUri.LocalPath;
+ string path = photo.DefaultVersion.Uri.LocalPath;
- using (FSpot.ImageFile img = FSpot.ImageFile.Create (photo.DefaultVersionUri)) {
+ using (FSpot.ImageFile img = FSpot.ImageFile.Create (photo.DefaultVersion.Uri)) {
if (img is FSpot.JpegFile) {
FSpot.JpegFile jimg = img as FSpot.JpegFile;
diff --git a/src/Loaders/GdkImageLoader.cs b/src/Loaders/GdkImageLoader.cs
index 3095be3..930f6ed 100644
--- a/src/Loaders/GdkImageLoader.cs
+++ b/src/Loaders/GdkImageLoader.cs
@@ -14,6 +14,7 @@ using System.Threading;
using Gdk;
using FSpot.Utils;
using FSpot.Platform;
+using Hyena;
namespace FSpot.Loaders {
public class GdkImageLoader : Gdk.PixbufLoader, IImageLoader
@@ -23,13 +24,19 @@ namespace FSpot.Loaders {
{
}
- public void Load (Uri uri)
+ ~GdkImageLoader ()
+ {
+ if (!is_disposed)
+ Dispose ();
+ }
+
+ public void Load (SafeUri uri)
{
if (is_disposed)
return;
//First, send a thumbnail if we have one
- if ((thumb = ThumbnailFactory.LoadThumbnail (uri)) != null) {
+ if ((thumb = XdgThumbnailSpec.LoadThumbnail (uri, ThumbnailSize.Large, null)) != null) {
pixbuf_orientation = PixbufOrientation.TopLeft;
EventHandler<AreaPreparedEventArgs> prep = AreaPrepared;
if (prep != null)
diff --git a/src/Loaders/IImageLoader.cs b/src/Loaders/IImageLoader.cs
index 84c7408..3934547 100644
--- a/src/Loaders/IImageLoader.cs
+++ b/src/Loaders/IImageLoader.cs
@@ -12,6 +12,7 @@
using FSpot.Utils;
using System;
using Gdk;
+using Hyena;
namespace FSpot.Loaders {
public interface IImageLoader : IDisposable {
@@ -21,7 +22,7 @@ namespace FSpot.Loaders {
event EventHandler<AreaUpdatedEventArgs> AreaUpdated;
event EventHandler Completed;
- void Load (Uri uri);
+ void Load (SafeUri uri);
Pixbuf Pixbuf { get; }
PixbufOrientation PixbufOrientation { get; }
diff --git a/src/Loaders/ImageLoader.cs b/src/Loaders/ImageLoader.cs
index 94b20fb..9bab51f 100644
--- a/src/Loaders/ImageLoader.cs
+++ b/src/Loaders/ImageLoader.cs
@@ -14,6 +14,7 @@ using FSpot.Utils;
using System;
using System.Collections.Generic;
using Gdk;
+using Hyena;
namespace FSpot.Loaders {
public static class ImageLoader {
@@ -37,7 +38,7 @@ namespace FSpot.Loaders {
}
}
- public static IImageLoader Create (Uri uri)
+ public static IImageLoader Create (SafeUri uri)
{
string path = uri.AbsolutePath;
string extension = System.IO.Path.GetExtension (path).ToLower ();
diff --git a/src/Loupe.cs b/src/Loupe.cs
index af36848..c58b9bb 100644
--- a/src/Loupe.cs
+++ b/src/Loupe.cs
@@ -16,6 +16,7 @@ using System;
using System.Runtime.InteropServices;
using Mono.Unix;
using FSpot.Utils;
+using Hyena;
namespace FSpot.Widgets {
public class Loupe : Gtk.Window {
@@ -30,7 +31,6 @@ namespace FSpot.Widgets {
private double angle = Math.PI / 4;
Gdk.Point start;
Gdk.Point start_hot;
- Gdk.Point pos_hot;
Gdk.Point hotspot;
public Loupe (PhotoImageView view) : base ("Loupe")
@@ -190,11 +190,7 @@ namespace FSpot.Widgets {
Allocation.Width,
Allocation.Height, 1);
-#if CAIRO_1_2_5
Context g = CairoHelper.Create (bitmap);
-#else
- Context g = CairoUtils.CreateContext (bitmap);
-#endif
DrawShape (g, Allocation.Width, Allocation.Height);
((IDisposable)g).Dispose ();
@@ -202,17 +198,13 @@ namespace FSpot.Widgets {
if (use_shape_ext)
ShapeCombineMask (bitmap, 0, 0);
else {
-#if CAIRO_1_2_5
Cairo.Context rgba = CairoHelper.Create (GdkWindow);
-#else
- Context rgba = CairoUtils.CreateContext (GdkWindow);
-#endif
DrawShape (rgba, Allocation.Width, Allocation.Height);
((IDisposable)rgba).Dispose ();
try {
CompositeUtils.InputShapeCombineMask (this, bitmap, 0,0);
} catch (EntryPointNotFoundException) {
- System.Console.WriteLine ("Warning: gtk+ version doesn't support input shapping");
+ Log.Warning ("gtk+ version doesn't support input shapping");
}
}
bitmap.Dispose ();
@@ -281,22 +273,13 @@ namespace FSpot.Widgets {
g.Matrix = new Matrix ();
g.Translate (cx, cy);
if (source != null)
-#if CAIRO_1_2_5
CairoHelper.SetSourcePixbuf (g, source, -source.Width / 2, -source.Height / 2);
-#else
- SetSourcePixbuf (g, source, -source.Width / 2, -source.Height / 2);
-#endif
g.Arc (0, 0, radius, 0, 2 * Math.PI);
g.Fill ();
if (overlay != null) {
-#if CAIRO_1_2_5
CairoHelper.SetSourcePixbuf (g, overlay, -overlay.Width / 2, -overlay.Height / 2);
-#else
- SetSourcePixbuf (g, overlay, -overlay.Width / 2, -overlay.Height / 2);
-
-#endif
g.Arc (0, 0, radius, angle, angle + Math.PI);
g.ClosePath ();
g.FillPreserve ();
@@ -305,27 +288,9 @@ namespace FSpot.Widgets {
}
}
-#if !CAIRO_1_2_5
- [DllImport("libgdk-2.0-0.dll")]
- extern static void gdk_cairo_set_source_pixbuf (IntPtr handle,
- IntPtr pixbuf,
- double pixbuf_x,
- double pixbuf_y);
-
- [Obsolete ("use Gdk.CairoHelper.SetSourcePixbuf instead")]
- static void SetSourcePixbuf (Context ctx, Gdk.Pixbuf pixbuf, double x, double y)
- {
- gdk_cairo_set_source_pixbuf (ctx.Handle, pixbuf.Handle, x, y);
- }
-#endif
-
protected override bool OnExposeEvent (Gdk.EventExpose args)
{
-#if CAIRO_1_2_5
Context g = CairoHelper.Create (GdkWindow);
-#else
- Context g = CairoUtils.CreateContext (GdkWindow);
-#endif
DrawShape (g, Allocation.Width, Allocation.Height);
//base.OnExposeEvent (args);
@@ -438,7 +403,7 @@ namespace FSpot.Widgets {
break;
case Gdk.EventType.TwoButtonPress:
dragging = false;
- MainWindow.Toplevel.HideLoupe ();
+ App.Instance.Organizer.HideLoupe ();
break;
}
}
@@ -457,7 +422,7 @@ namespace FSpot.Widgets {
{
switch (args.Event.Key) {
case Gdk.Key.v:
- MainWindow.Toplevel.HideLoupe ();
+ App.Instance.Organizer.HideLoupe ();
args.RetVal = true;
break;
default:
diff --git a/src/MainWindow.cs b/src/MainWindow.cs
index 69cbfae..79740cc 100644
--- a/src/MainWindow.cs
+++ b/src/MainWindow.cs
@@ -17,6 +17,7 @@ using Gtk;
using Mono.Addins;
using Mono.Unix;
+using Hyena;
using Banshee.Kernel;
using FSpot;
@@ -26,14 +27,12 @@ using FSpot.Widgets;
using FSpot.Utils;
using FSpot.UI.Dialog;
using FSpot.Platform;
-
-using GPhoto2;
+using FSpot.Import;
namespace FSpot
{
public class MainWindow
{
- public static MainWindow Toplevel;
public Sidebar Sidebar { get; private set; }
TagSelectionWidget tag_selection_widget;
@@ -43,8 +42,6 @@ namespace FSpot
}
[GtkBeans.Builder.Object] Gtk.HPaned main_hpaned;
- [GtkBeans.Builder.Object] Gtk.VBox left_vbox;
- [GtkBeans.Builder.Object] Gtk.VBox group_vbox;
[GtkBeans.Builder.Object] Gtk.VBox view_vbox;
[GtkBeans.Builder.Object] Gtk.VBox toolbar_vbox;
@@ -58,9 +55,10 @@ namespace FSpot
[GtkBeans.Builder.Object] Label status_label;
[GtkBeans.Builder.Object] Gtk.UIManager uimanager;
- // File
+ // Photo
[GtkBeans.Builder.Object] Gtk.Action create_version_menu_item;
[GtkBeans.Builder.Object] Gtk.Action delete_version_menu_item;
+ [GtkBeans.Builder.Object] Gtk.Action detach_version_menu_item;
[GtkBeans.Builder.Object] Gtk.Action rename_version_menu_item;
[GtkBeans.Builder.Object] Gtk.Action tools;
@@ -183,9 +181,7 @@ namespace FSpot
private static TargetEntry [] icon_dest_target_table =
new TargetEntry [] {
- #if ENABLE_REPARENTING
DragDropTargets.PhotoListEntry,
- #endif
DragDropTargets.TagListEntry,
DragDropTargets.UriListEntry
};
@@ -195,34 +191,13 @@ namespace FSpot
DragDropTargets.TagListEntry
};
- private static TargetEntry [] tag_dest_target_table =
- new TargetEntry [] {
- DragDropTargets.PhotoListEntry,
- DragDropTargets.UriListEntry,
- DragDropTargets.TagListEntry
- };
-
const int PHOTO_IDX_NONE = -1;
- private static Gtk.Tooltips toolTips;
- public static Gtk.Tooltips ToolTips {
- get {
- if (toolTips == null)
- toolTips = new Gtk.Tooltips ();
- return toolTips;
- }
- }
-
public Db Database { get; private set; }
public ModeType ViewMode { get; private set; }
public MainSelection Selection { get; private set; }
public InfoBox InfoBox { get; private set; }
- public MenuItem FindByTag {
- get { return uimanager.GetWidget ("/ui/menubar1/find/find_by_tag") as MenuItem; }
- }
-
-
//
// Constructor
//
@@ -233,7 +208,7 @@ namespace FSpot
service.Initialize ();
service.Start ();
} catch (Exception e) {
- Log.Warning ("Something went wrong while starting the {0} extension.", service.Id);
+ Log.WarningFormat ("Something went wrong while starting the {0} extension.", service.Id);
Log.DebugException (e);
}
}
@@ -262,7 +237,7 @@ namespace FSpot
else if (max_size == 0)
Log.Warning ("maximum_size is 0 (tin-hat mode), not overriding");
else if (max_size < size) {
- Log.Debug ("Setting maximum_size to a saner value ({0}MB), according to your db size", size);
+ Log.DebugFormat ("Setting maximum_size to a saner value ({0}MB), according to your db size", size);
Preferences.Set (Preferences.GSD_THUMBS_MAX_SIZE, size);
}
}
@@ -270,9 +245,6 @@ namespace FSpot
#endif
Database = db;
- if (Toplevel == null)
- Toplevel = this;
-
GtkBeans.Builder builder = new GtkBeans.Builder ("main_window.ui");
builder.Autoconnect (this);
@@ -299,8 +271,8 @@ namespace FSpot
toolbar_vbox.PackStart (toolbar);
ToolButton import_button = GtkUtil.ToolButtonFromTheme ("gtk-add", Catalog.GetString ("Import"), true);
- import_button.Clicked += HandleImportCommand;
- import_button.SetTooltip (ToolTips, Catalog.GetString ("Import new images"), null);
+ import_button.Clicked += (o, args) => StartImport (null);
+ import_button.TooltipText = Catalog.GetString ("Import new images");
toolbar.Insert (import_button, -1);
toolbar.Insert (new SeparatorToolItem (), -1);
@@ -320,7 +292,7 @@ namespace FSpot
browse_button.IconName = "mode-browse";
browse_button.IsImportant = true;
browse_button.Toggled += HandleToggleViewBrowse;
- browse_button.SetTooltip (ToolTips, Catalog.GetString ("Browse many photos simultaneously"), null);
+ browse_button.TooltipText = Catalog.GetString ("Browse many photos simultaneously");
toolbar.Insert (browse_button, -1);
edit_button = new ToggleToolButton ();
@@ -328,19 +300,19 @@ namespace FSpot
edit_button.IconName = "mode-image-edit";
edit_button.IsImportant = true;
edit_button.Toggled += HandleToggleViewPhoto;
- edit_button.SetTooltip (ToolTips, Catalog.GetString ("View and edit a photo"), null);
+ edit_button.TooltipText = Catalog.GetString ("View and edit a photo");
toolbar.Insert (edit_button, -1);
toolbar.Insert (new SeparatorToolItem (), -1);
ToolButton fs_button = GtkUtil.ToolButtonFromTheme ("view-fullscreen", Catalog.GetString ("Fullscreen"), false);
fs_button.Clicked += HandleViewFullscreen;
- fs_button.SetTooltip (ToolTips, Catalog.GetString ("View photos fullscreen"), null);
+ fs_button.TooltipText = Catalog.GetString ("View photos fullscreen");
toolbar.Insert (fs_button, -1);
ToolButton ss_button = GtkUtil.ToolButtonFromTheme ("media-playback-start", Catalog.GetString ("Slideshow"), false);
ss_button.Clicked += HandleViewSlideShow;
- ss_button.SetTooltip (ToolTips, Catalog.GetString ("View photos in a slideshow"), null);
+ ss_button.TooltipText = Catalog.GetString ("View photos in a slideshow");
toolbar.Insert (ss_button, -1);
SeparatorToolItem white_space = new SeparatorToolItem ();
@@ -355,12 +327,12 @@ namespace FSpot
display_previous_button = new ToolButton (Stock.GoBack);
toolbar.Insert (display_previous_button, -1);
- display_previous_button.SetTooltip (ToolTips, Catalog.GetString ("Previous photo"), String.Empty);
+ display_previous_button.TooltipText = Catalog.GetString ("Previous photo");
display_previous_button.Clicked += new EventHandler (HandleDisplayPreviousButtonClicked);
display_next_button = new ToolButton (Stock.GoForward);
toolbar.Insert (display_next_button, -1);
- display_next_button.SetTooltip (ToolTips, Catalog.GetString ("Next photo"), String.Empty);
+ display_next_button.TooltipText = Catalog.GetString ("Next photo");
display_next_button.Clicked += new EventHandler (HandleDisplayNextButtonClicked);
Sidebar = new Sidebar ();
@@ -412,11 +384,6 @@ namespace FSpot
Database.Tags.ItemsChanged += HandleTagsChanged;
Database.Tags.ItemsAdded += HandleTagsChanged;
Database.Tags.ItemsRemoved += HandleTagsChanged;
- #if SHOW_CALENDAR
- FSpot.SimpleCalendar cal = new FSpot.SimpleCalendar (query);
- cal.DaySelected += HandleCalendarDaySelected;
- left_vbox.PackStart (cal, false, true, 0);
- #endif
group_selector = new FSpot.GroupSelector ();
group_selector.Adaptor = new FSpot.TimeAdaptor (query, Preferences.Get<bool> (Preferences.GROUP_ADAPTOR_ORDER_ASC));
@@ -439,6 +406,14 @@ namespace FSpot
query_widget.Logic.Changed += HandleQueryLogicChanged;
view_vbox.PackStart (query_widget, false, false, 0);
view_vbox.ReorderChild (query_widget, 2);
+
+ MenuItem findByTag = uimanager.GetWidget ("/ui/menubar1/find/find_by_tag") as MenuItem;
+ query_widget.Hidden += delegate (object sender, EventArgs args) {
+ ((Gtk.Label)findByTag.Child).TextWithMnemonic = Catalog.GetString ("Show _Find Bar");
+ };
+ query_widget.Shown += delegate (object sender, EventArgs args) {
+ ((Gtk.Label)findByTag.Child).TextWithMnemonic = Catalog.GetString ("Hide _Find Bar");
+ };
icon_view = new QueryView (query);
icon_view.ZoomChanged += HandleZoomChanged;
@@ -453,11 +428,13 @@ namespace FSpot
new FSpot.PreviewPopup (icon_view);
- Gtk.Drag.SourceSet (icon_view, Gdk.ModifierType.Button1Mask | Gdk.ModifierType.Button3Mask,
- icon_source_target_table, DragAction.Copy | DragAction.Move);
-
icon_view.DragBegin += HandleIconViewDragBegin;
+ icon_view.DragEnd += HandleIconViewDragEnd;
icon_view.DragDataGet += HandleIconViewDragDataGet;
+ icon_view.DragMotion += HandleIconViewDragMotion;
+ icon_view.DragDrop += HandleIconViewDragDrop;
+ // StartDrag is fired by IconView
+ icon_view.StartDrag += HandleIconViewStartDrag;
TagMenu tag_menu = new TagMenu (null, Database.Tags);
tag_menu.NewTagHandler += delegate { HandleCreateTagAndAttach (this, null); };
@@ -472,9 +449,6 @@ namespace FSpot
Gtk.Drag.DestSet (icon_view, DestDefaults.All, icon_dest_target_table,
DragAction.Copy | DragAction.Move);
- // icon_view.DragLeave += new DragLeaveHandler (HandleIconViewDragLeave);
- icon_view.DragMotion += HandleIconViewDragMotion;
- icon_view.DragDrop += HandleIconViewDragDrop;
icon_view.DragDataReceived += HandleIconViewDragDataReceived;
icon_view.KeyPressEvent += HandleIconViewKeyPressEvent;
@@ -539,9 +513,6 @@ namespace FSpot
Preferences.SettingChanged += OnPreferencesChanged;
main_window.DeleteEvent += HandleDeleteEvent;
-
- query_widget.HandleChanged (query);
- query_widget.Close ();
// When the icon_view is loaded, set it's initial scroll position
icon_view.SizeAllocated += HandleIconViewReady;
@@ -681,7 +652,7 @@ namespace FSpot
private void HandleExportActivated (object o, EventArgs e)
{
- FSpot.Extensions.ExportMenuItemNode.SelectedImages = delegate () {return new FSpot.PhotoArray (SelectedPhotos ()); };
+ FSpot.Extensions.ExportMenuItemNode.SelectedImages = delegate () {return new PhotoList (SelectedPhotos ()); };
}
private void HandleDbItemsChanged (object sender, DbItemEventArgs<Photo> args)
@@ -906,18 +877,6 @@ namespace FSpot
}
//
- // Change Notification functions
- //
-
- private void InvalidateViews ()
- {
- icon_view.QueueDraw ();
- photo_view.Reload ();
- if (fsview != null)
- fsview.View.Reload ();
- }
-
- //
// Commands
//
@@ -927,7 +886,7 @@ namespace FSpot
int [] selected_ids = SelectedIds ();
if (command.Execute (direction, SelectedPhotos (selected_ids)))
- query.MarkChanged (selected_ids, new PhotoChanges () {DataChanged = true});
+ query.MarkChanged (selected_ids, InvalidateData.Instance);
}
//
@@ -958,7 +917,7 @@ namespace FSpot
}
}
- public void SetFolderQuery (IEnumerable<Uri> uri_list)
+ public void SetFolderQuery (IEnumerable<SafeUri> uri_list)
{
ShowQueryWidget ();
query_widget.SetFolders (uri_list);
@@ -994,20 +953,6 @@ namespace FSpot
query_widget.Include (new Tag [] {tag_selection_widget.TagByPath (args.Path)});
}
-
- #if SHOW_CALENDAR
- void HandleCalendarDaySelected (object sender, System.EventArgs args)
- {
- FSpot.SimpleCalendar cal = sender as FSpot.SimpleCalendar;
- JumpTo (cal.Date);
- }
-
- void JumpTo (System.DateTime time)
- {
- JumpTo (query.LookupItem (time));*/
- }
- #endif
-
void JumpTo (int index)
{
switch (ViewMode) {
@@ -1055,7 +1000,9 @@ namespace FSpot
* actually operate directly on the adaptor not on the selector but I don't have
* time to fix it right now.
*/
- group_selector.SetPosition (group_selector.Adaptor.IndexFromPhoto (photo));
+ if (!group_selector.GlassUpdating) {
+ group_selector.SetPosition (group_selector.Adaptor.IndexFromPhoto (photo));
+ }
#endif
}
@@ -1076,8 +1023,14 @@ namespace FSpot
//
// IconView Drag Handlers
//
+
+ public void HandleIconViewStartDrag (object sender, StartDragArgs args)
+ {
+ Gtk.Drag.Begin (icon_view, new TargetList (icon_source_target_table),
+ DragAction.Copy | DragAction.Move, (int) args.Button, args.Event);
+ }
- void HandleIconViewDragBegin (object sender, DragBeginArgs args)
+ public void HandleIconViewDragBegin (object sender, DragBeginArgs args)
{
Photo [] photos = SelectedPhotos ();
@@ -1092,7 +1045,7 @@ namespace FSpot
bool use_icon = false;;
while (len-- > 0) {
- FSpot.PixbufCache.CacheEntry entry = icon_view.Cache.Lookup (photos [len].DefaultVersionUri);
+ FSpot.PixbufCache.CacheEntry entry = icon_view.Cache.Lookup (photos [len].DefaultVersion.Uri);
Pixbuf thumbnail = null;
if (entry != null) {
@@ -1125,6 +1078,9 @@ namespace FSpot
container.Dispose ();
}
}
+
+ void HandleIconViewDragEnd (object sender, DragEndArgs args) {
+ }
void HandleIconViewDragDataGet (object sender, DragDataGetArgs args)
{
@@ -1157,42 +1113,52 @@ namespace FSpot
public void ImportUriList (UriList list, bool copy)
{
- ImportCommand command = new ImportCommand (main_window);
- if (command.ImportFromPaths (Database.Photos, list.ToLocalPaths (), copy) > 0) {
- query.RollSet = new RollSet (Database.Rolls.GetRolls (1)[0]);
- UpdateQuery ();
- }
+ var controller = new ImportController ();
+ controller.StatusEvent += (evnt) => {
+ ThreadAssist.ProxyToMain (() => {
+ if (evnt == ImportEvent.ImportFinished) {
+ if (controller.PhotosImported > 0) {
+ query.RollSet = new RollSet (Database.Rolls.GetRolls (1));
+ }
+ }
+ });
+ };
+
+ var source = new MultiFileImportSource (list.ToArray ());
+ controller.ActiveSource = source;
+ controller.CopyFiles = copy;
+ controller.DuplicateDetect = true;
+ controller.RecurseSubdirectories = true;
+
+ var import_window = new ImportDialog (controller, Window);
+ import_window.Show ();
+
+ controller.StartImport ();
}
-
- public void ImportFile (string path)
+
+ void HandleImportCommand (object obj, EventArgs args)
{
- ImportCommand command = new ImportCommand (main_window);
- if (command.ImportFromFile (Database.Photos, path) > 0) {
- query.RollSet = new RollSet (Database.Rolls.GetRolls (1)[0]);
- UpdateQuery ();
- }
+ StartImport (null);
}
- #if false
- public void ImportUdi (string udi)
+ public void ImportFile (SafeUri uri)
{
- /* probably a camera we need to contruct on of our gphoto2 uris */
- Hal.Device dev = new Hal.Device (Core.HalContext, udi);
- string mount_point = dev.GetPropertyString ("volume.mount_point");
- int bus = dev.GetPropertyInt ("usb.bus_number");
- int device = dev.GetPropertyInt ("usb.linux.device_number");
- System.Console.WriteLine ("dev = {1} exists = {2} mount_point = {0} {3},{4}", mount_point, dev, dev.Exists, bus, device);
-
- if (! dev.Exists || mount_point != null) {
- ImportFile (mount_point);
- } else {
- string gphoto_uri = String.Format ("gphoto2:usb:{0},{1}", bus.ToString ("d3") , device.ToString ("d3"));
- System.Console.WriteLine ("gphoto_uri = {0}", gphoto_uri);
- ImportCamera (gphoto_uri);
- }
-
+ StartImport (uri);
+ }
+
+ void StartImport (SafeUri uri)
+ {
+ var controller = new ImportController ();
+ controller.StatusEvent += (evnt) => {
+ if (evnt == ImportEvent.ImportFinished) {
+ if (controller.PhotosImported > 0) {
+ query.RollSet = new RollSet (Database.Rolls.GetRolls (1));
+ }
+ }
+ };
+ var import_window = new ImportDialog (controller, Window);
+ import_window.Show ();
}
- #endif
void HandleIconViewDragDataReceived (object sender, DragDataReceivedArgs args)
{
@@ -1233,7 +1199,6 @@ namespace FSpot
return;
}
- #if ENABLE_REPARENTING
if (args.Info == DragDropTargets.PhotoListEntry.Info) {
int p_item = icon_view.CellAtPosition (args.X + (int) icon_view.Hadjustment.Value,
args.Y + (int) icon_view.Vadjustment.Value);
@@ -1241,15 +1206,16 @@ namespace FSpot
if (p_item >= 0) {
if (icon_view.Selection.Contains (p_item)) //We don't want to reparent ourselves!
return;
- PhotoVersionCommands.Reparent cmd = new PhotoVersionCommands.Reparent ();
-
- cmd.Execute (Database.Photos, SelectedPhotos(), query.Photos [p_item], GetToplevel (null));
+ PhotoVersionCommands.Reparent cmd = new PhotoVersionCommands.Reparent ();
+ Photo[] photos_to_reparent = SelectedPhotos ();
+ // Give feedback to user that something happened, and leave the parent selected after reparenting
+ icon_view.Selection.Add (p_item);
+ cmd.Execute (Database.Photos, photos_to_reparent, query.Photos [p_item], GetToplevel (null));
UpdateQuery ();
}
Gtk.Drag.Finish (args.Context, true, false, args.Time);
return;
}
- #endif
}
//
@@ -1394,7 +1360,6 @@ namespace FSpot
void HandlePhotoViewDragDrop (object sender, DragDropArgs args)
{
//Widget source = Gtk.Drag.GetSourceWidget (args.Context);
- //Console.WriteLine ("Drag Drop {0}", source == null ? "null" : source.TypeName);
args.RetVal = true;
}
@@ -1487,84 +1452,6 @@ namespace FSpot
// Main menu commands
//
- void HandleImportCommand (object sender, EventArgs e)
- {
- Database.Sync = false;
- ImportCommand command = new ImportCommand (main_window);
- if (command.ImportFromFile (Database.Photos, null) > 0) {
- query.RollSet = new RollSet (Database.Rolls.GetRolls (1)[0]);
- UpdateQuery ();
- }
- Database.Sync = true;
- }
-
- void HandleImportFromCameraCommand (object sender, EventArgs e)
- {
- ImportCamera (null);
- }
-
- public void ImportCamera (string camera_device)
- {
- Log.Debug ("ImportCamera {0}", camera_device);
- GPhotoCamera cam = new GPhotoCamera();
-
- try {
- int num_cameras = cam.DetectCameras();
- int selected_cam = 0;
-
- if (num_cameras < 1) {
- HigMessageDialog md = new HigMessageDialog (main_window, DialogFlags.DestroyWithParent,
- MessageType.Warning, ButtonsType.Ok,
- Catalog.GetString ("No cameras detected."),
- Catalog.GetString ("F-Spot was unable to find any cameras attached to this system." +
- " Double check that the camera is connected and has power"));
-
- md.Run ();
- md.Destroy ();
- return;
- } else if (num_cameras == 1) {
- selected_cam = 0;
- } else {
- bool found = false;
- if (camera_device != null)
- for (int i = 0; i < num_cameras; i++) {
- if (camera_device.IndexOf (cam.CameraList.GetValue(i)) != 0) {
- selected_cam = i;
- found = true;
- break;
- }
- }
-
- if (!found) {
- FSpot.CameraSelectionDialog camselect = new FSpot.CameraSelectionDialog (cam.CameraList);
- selected_cam = camselect.Run ();
- }
- }
-
- if (selected_cam >= 0) {
- cam.SelectCamera (selected_cam);
- cam.InitializeCamera ();
-
- FSpot.CameraFileSelectionDialog selector = new FSpot.CameraFileSelectionDialog (cam, Database);
- if (selector.Run() > 0)
- query.RollSet = new RollSet (Database.Rolls.GetRolls (1)[0]);
- UpdateQuery ();
- }
- }
- catch (GPhotoException ge) {
- System.Console.WriteLine (ge.ToString ());
- HigMessageDialog md = new HigMessageDialog (main_window, DialogFlags.DestroyWithParent,
- MessageType.Error, ButtonsType.Ok,
- Catalog.GetString ("Error connecting to camera"),
- String.Format (Catalog.GetString ("Received error \"{0}\" while connecting to camera"),
- ge.Message));
-
- md.Run ();
- md.Destroy ();
- } finally {
- cam.ReleaseGPhotoResources ();
- }
- }
void HandlePageSetupActivated (object o, EventArgs e)
{
FSpot.Global.PageSetup = Print.RunPageSetupDialog (this.Window, FSpot.Global.PageSetup, null);
@@ -1588,24 +1475,15 @@ namespace FSpot
Mono.Addins.Gui.AddinManagerWindow.Run (main_window);
}
- private void TestDisplay ()
- {
- Gtk.Window win = new Gtk.Window ("hello");
- VBox box = new VBox ();
- box.PackStart (new FSpot.Widgets.ImageDisplay (new BrowsablePointer (new FSpot.PhotoArray (SelectedPhotos ()), 0)));
- win.Add (box);
- win.ShowAll ();
- }
-
void HandleSendMailCommand (object sender, EventArgs args)
{
//TestDisplay ();
- new FSpot.SendEmail (new FSpot.PhotoArray (SelectedPhotos ()), Window);
+ new FSpot.SendEmail (new PhotoList (SelectedPhotos ()), Window);
}
public static void HandleHelp (object sender, EventArgs args)
{
- GtkBeans.Global.ShowUri (Toplevel.Window.Screen, "ghelp:f-spot");
+ GtkBeans.Global.ShowUri (App.Instance.Organizer.Window.Screen, "ghelp:f-spot");
}
public static void HandleAbout (object sender, EventArgs args)
@@ -1730,31 +1608,26 @@ namespace FSpot
void HandleCreateVersionCommand (object obj, EventArgs args)
{
PhotoVersionCommands.Create cmd = new PhotoVersionCommands.Create ();
-
cmd.Execute (Database.Photos, CurrentPhoto, GetToplevel (null));
- // if (cmd.Execute (db.Photos, CurrentPhoto, GetToplevel (null))) {
- // query.MarkChanged (ActiveIndex (), true, false);
- // }
}
void HandleDeleteVersionCommand (object obj, EventArgs args)
{
PhotoVersionCommands.Delete cmd = new PhotoVersionCommands.Delete ();
-
cmd.Execute (Database.Photos, CurrentPhoto, GetToplevel (null));
- // if (cmd.Execute (db.Photos, CurrentPhoto, GetToplevel (null))) {
- // query.MarkChanged (ActiveIndex (), true, true);
- // }
+ }
+
+ void HandleDetachVersionCommand (object obj, EventArgs args)
+ {
+ PhotoVersionCommands.Detach cmd = new PhotoVersionCommands.Detach ();
+ cmd.Execute (Database.Photos, CurrentPhoto, GetToplevel (null));
+ UpdateQuery ();
}
void HandleRenameVersionCommand (object obj, EventArgs args)
{
PhotoVersionCommands.Rename cmd = new PhotoVersionCommands.Rename ();
-
cmd.Execute (Database.Photos, CurrentPhoto, main_window);
- // if (cmd.Execute (db.Photos, CurrentPhoto, main_window)) {
- // query.MarkChanged (ActiveIndex (), true, false);
- // }
}
public void HandleCreateTagAndAttach (object sender, EventArgs args)
@@ -1867,7 +1740,7 @@ namespace FSpot
System.Array.Sort (tags, new TagRemoveComparer ());
foreach (Tag tag in tags) {
- System.Console.WriteLine ("tag: {0}", tag.Name);
+ Log.Debug ("tag: {0}", tag.Name);
}
string msg = Catalog.GetString("This operation will merge the selected tags and any sub-tags into a single tag.");
@@ -1907,7 +1780,7 @@ namespace FSpot
void HandleAdjustTime (object sender, EventArgs args)
{
PhotoList list = new PhotoList (Selection.Items);
- list.Sort (new Photo.CompareDateName ());
+ list.Sort (new IBrowsableItemComparer.CompareDateName ());
(new AdjustTimeDialog (Database, list)).Run ();
}
@@ -2265,13 +2138,19 @@ namespace FSpot
void HandleSelectAllCommand (object sender, EventArgs args)
{
icon_view.SelectAllCells ();
- UpdateStatusLabel();
+ UpdateStatusLabel ();
}
void HandleSelectNoneCommand (object sender, EventArgs args)
{
icon_view.Selection.Clear ();
- UpdateStatusLabel();
+ UpdateStatusLabel ();
+ }
+
+ void HandleSelectInvertCommand (object sender, EventArgs args)
+ {
+ icon_view.Selection.SelectionInvert ();
+ UpdateStatusLabel ();
}
// This ConnectBefore is needed because otherwise the editability of the name
@@ -2283,7 +2162,7 @@ namespace FSpot
switch (args.Event.Key) {
case Gdk.Key.Delete:
- HandleDeleteSelectedTagCommand (sender, (EventArgs) args);
+ HandleDeleteSelectedTagCommand (sender, (EventArgs) args);
break;
case Gdk.Key.space:
@@ -2310,7 +2189,7 @@ namespace FSpot
System.Array.Sort (tags, new TagRemoveComparer ());
//How many pictures are associated to these tags?
- Db db = MainWindow.Toplevel.Database;
+ Db db = App.Instance.Database;
FSpot.PhotoQuery count_query = new FSpot.PhotoQuery(db.Photos);
count_query.Terms = FSpot.OrTerm.FromTags(tags);
int associated_photos = count_query.Count;
@@ -2342,7 +2221,7 @@ namespace FSpot
try {
db.Photos.Remove (tags);
} catch (InvalidTagOperationException e) {
- System.Console.WriteLine ("this is something or another");
+ Log.Debug ("this is something or another");
// A Category is not empty. Can not delete it.
string error_msg = Catalog.GetString ("Tag is not empty");
@@ -2366,7 +2245,7 @@ namespace FSpot
int [] selected_ids = SelectedIds ();
if (command.Execute (SelectedPhotos (selected_ids)))
- query.MarkChanged (selected_ids, new PhotoChanges {DataChanged = true});
+ query.MarkChanged (selected_ids, InvalidateData.Instance);
}
public void HandleRotate90Command (object sender, EventArgs args)
@@ -2404,8 +2283,8 @@ namespace FSpot
var paths = new List<string> ();
var uris = new List<string> ();
foreach (Photo p in SelectedPhotos ()) {
- paths.Add (System.IO.Path.GetFullPath (p.DefaultVersionUri.LocalPath));
- uris.Add (p.DefaultVersionUri.ToString ());
+ paths.Add (System.IO.Path.GetFullPath (p.DefaultVersion.Uri.LocalPath));
+ uris.Add (p.DefaultVersion.Uri.ToString ());
}
data.Text = String.Join (" ", paths.ToArray ());
data.SetUris (String.Join (" ", uris.ToArray ()));
@@ -2416,7 +2295,7 @@ namespace FSpot
var pt = new List<string> ();
foreach (Photo p in SelectedPhotos ()) {
- pt.Add (System.IO.Path.GetFullPath (p.DefaultVersionUri.LocalPath));
+ pt.Add (System.IO.Path.GetFullPath (p.DefaultVersion.Uri.LocalPath));
}
primary.Text = String.Join (" ", pt.ToArray ());
@@ -2429,7 +2308,7 @@ namespace FSpot
if (current == null)
return;
- Desktop.SetBackgroundImage (current.DefaultVersionUri.LocalPath);
+ Desktop.SetBackgroundImage (current.DefaultVersion.Uri.LocalPath);
}
void HandleSetDateRange (object sender, EventArgs args) {
@@ -2689,18 +2568,6 @@ namespace FSpot
}
}
- void HandleFindTagIncluded (Tag t)
- {
- ShowQueryWidget ();
- query_widget.Include (new Tag [] {t});
- }
-
- void HandleFindTagRequired (Tag t)
- {
- ShowQueryWidget ();
- query_widget.Require (new Tag [] {t});
- }
-
//
// Handle Main Menu
@@ -2718,6 +2585,7 @@ namespace FSpot
create_version_menu_item.Sensitive = false;
delete_version_menu_item.Sensitive = false;
+ detach_version_menu_item.Sensitive = false;
rename_version_menu_item.Sensitive = false;
sharpen.Sensitive = false;
@@ -2728,9 +2596,11 @@ namespace FSpot
if (CurrentPhoto.DefaultVersionId == Photo.OriginalVersionId) {
delete_version_menu_item.Sensitive = false;
+ detach_version_menu_item.Sensitive = false;
rename_version_menu_item.Sensitive = false;
} else {
delete_version_menu_item.Sensitive = true;
+ detach_version_menu_item.Sensitive = true;
rename_version_menu_item.Sensitive = true;
}
@@ -2782,26 +2652,26 @@ namespace FSpot
if (rl_button != null) {
if (Selection.Count == 0) {
rl_button.Sensitive = false;
- rl_button.SetTooltip (ToolTips, Catalog.GetString (String.Empty), null);
+ rl_button.TooltipText = String.Empty;
} else {
rl_button.Sensitive = true;
string msg = Catalog.GetPluralString ("Rotate selected photo left",
"Rotate selected photos left", Selection.Count);
- rl_button.SetTooltip (ToolTips, String.Format (msg, Selection.Count), null);
+ rl_button.TooltipText = String.Format (msg, Selection.Count);
}
}
if (rr_button != null) {
if (Selection.Count == 0) {
rr_button.Sensitive = false;
- rr_button.SetTooltip (ToolTips, Catalog.GetString (String.Empty), null);
+ rr_button.TooltipText = String.Empty;
} else {
rr_button.Sensitive = true;
string msg = Catalog.GetPluralString ("Rotate selected photo right",
"Rotate selected photos right", Selection.Count);
- rr_button.SetTooltip (ToolTips, String.Format (msg, Selection.Count), null);
+ rr_button.TooltipText = String.Format (msg, Selection.Count);
}
}
@@ -2900,7 +2770,7 @@ namespace FSpot
if (support_xcf)
create_xcf = Preferences.Get<bool> (Preferences.EDIT_CREATE_XCF_VERSION);
- Console.WriteLine ("XCF ? {0}", create_xcf);
+ Log.DebugFormat ("XCF ? {0}", create_xcf);
if (response == Gtk.ResponseType.Cancel)
return;
@@ -2919,7 +2789,7 @@ namespace FSpot
errors.Add (new EditException (photo, ex));
}
- uri_list.Append (photo.DefaultVersionUri.ToString ());
+ uri_list.Append (photo.DefaultVersion.Uri.ToString ());
}
// FIXME need to clean up the error dialog here.
@@ -2935,17 +2805,17 @@ namespace FSpot
try {
application.LaunchUris (uri_list, null);
} catch (System.Exception) {
- Log.Error ("Failed to lauch {0}", application.Name);
+ Log.ErrorFormat ("Failed to lauch {0}", application.Name);
}
}
public void GetWidgetPosition(Widget widget, out int x, out int y)
- {
+ {
main_window.GdkWindow.GetOrigin(out x, out y);
x += widget.Allocation.X;
y += widget.Allocation.Y;
- }
+ }
// Tag typing ...
@@ -2961,20 +2831,8 @@ namespace FSpot
if (Selection.Count == 0 || tagbar.Visible && tag_entry.HasFocus)
return;
- #if !ALLOW_TAG_TYPING_WITHOUT_HOTKEY
if (args.Event.Key != Gdk.Key.t)
return;
- #endif
-
- #if ALLOW_TAG_TYPING_WITHOUT_HOTKEY
- char c = System.Convert.ToChar (Gdk.Keyval.ToUnicode ((uint) args.Event.Key));
- if (! System.Char.IsLetter (c))
- return;
- #endif
-
- #if ALLOW_TAG_TYPING_WITHOUT_HOTKEY
- tag_entry.Text += c;
- #endif
tagbar.Show ();
UpdateTagEntryFromSelection ();
@@ -3075,7 +2933,7 @@ namespace FSpot
foreach (Photo p in SelectedPhotos ()) {
string content;
try {
- content = GLib.FileFactory.NewForUri (p.DefaultVersionUri).QueryInfo ("standard::content-type", GLib.FileQueryInfoFlags.None, null).ContentType;
+ content = GLib.FileFactory.NewForUri (p.DefaultVersion.Uri).QueryInfo ("standard::content-type", GLib.FileQueryInfoFlags.None, null).ContentType;
} catch (GLib.GException) {
content = null;
}
diff --git a/src/Makefile.am b/src/Makefile.am
index 35800c1..ffe6e45 100644
--- a/src/Makefile.am
+++ b/src/Makefile.am
@@ -1,594 +1,237 @@
-include $(top_srcdir)/Makefile.include
-UNSAFE = -unsafe
-NOWARN = -nowarn:0169 -nowarn:0612 -nowarn:0414
-EXTRAFLAGS = -d:TEST_METADATA -d:BROKEN_RSVG -d:GSD_2_24 $(CSC_DEFINES)
-
-CMS_CSDISTFILES = \
- $(srcdir)/Cms/CctTable.cs \
- $(srcdir)/Cms/CmsException.cs \
- $(srcdir)/Cms/ColorCIELab.cs \
- $(srcdir)/Cms/ColorCIELCh.cs \
- $(srcdir)/Cms/ColorCIExyY.cs \
- $(srcdir)/Cms/ColorCIEXYZ.cs \
- $(srcdir)/Cms/Format.cs \
- $(srcdir)/Cms/GammaTable.cs \
- $(srcdir)/Cms/IccColorSpace.cs \
- $(srcdir)/Cms/IccProfileClass.cs \
- $(srcdir)/Cms/Intent.cs \
- $(srcdir)/Cms/NativeMethods.cs \
- $(srcdir)/Cms/Profile.cs \
- $(srcdir)/Cms/SaveException.cs \
- $(srcdir)/Cms/Transform.cs
-
-CORE_CSDISTFILES = \
- $(srcdir)/Core/Animator.cs \
- $(srcdir)/Core/BrowsableEventArgs.cs \
- $(srcdir)/Core/BrowsablePointer.cs \
- $(srcdir)/Core/BrowsablePointerChangedEventArgs.cs \
- $(srcdir)/Core/Category.cs \
- $(srcdir)/Core/DbItem.cs \
- $(srcdir)/Core/Delay.cs \
- $(srcdir)/Core/Tag.cs \
- $(srcdir)/Core/Global.cs \
- $(srcdir)/Core/IBrowsableItem.cs \
- $(srcdir)/Core/IBrowsableItemChanges.cs \
- $(srcdir)/Core/IBrowsableCollection.cs \
- $(srcdir)/Core/PhotoChanges.cs \
- $(srcdir)/Core/PhotosChanges.cs \
- $(srcdir)/Core/Roll.cs
-
-QUERY_CSDISTFILES = \
- $(srcdir)/Query/DateRange.cs \
- $(srcdir)/Query/FolderSet.cs \
- $(srcdir)/Query/IOrderCondition.cs \
- $(srcdir)/Query/IQueryCondition.cs \
- $(srcdir)/Query/LogicalTerm.cs \
- $(srcdir)/Query/OrderByTime.cs \
- $(srcdir)/Query/RatingRange.cs \
- $(srcdir)/Query/RollSet.cs \
- $(srcdir)/Query/TagConditionWrapper.cs \
- $(srcdir)/Query/UntaggedCondition.cs
-
-UTILS_CSDISTFILES = \
- $(srcdir)/Utils/Cache.cs \
- $(srcdir)/Utils/CairoUtils.cs \
- $(srcdir)/Utils/ConsoleCrayon.cs \
- $(srcdir)/Utils/DbUtils.cs \
- $(srcdir)/Utils/GdkUtils.cs \
- $(srcdir)/Utils/GtkUtil.cs \
- $(srcdir)/Utils/Log.cs \
- $(srcdir)/Utils/PixbufOrientation.cs \
- $(srcdir)/Utils/PixbufUtils.cs \
- $(srcdir)/Utils/Unix.cs \
- $(srcdir)/Utils/UriExtensions.cs \
- $(srcdir)/Utils/UriUtils.cs
-
-JOBSCHEDULER_CSDISTFILES = \
- $(srcdir)/JobScheduler/FSpotCompat.cs \
- $(srcdir)/JobScheduler/IInstanceCriticalJob.cs \
- $(srcdir)/JobScheduler/IJob.cs \
- $(srcdir)/JobScheduler/IntervalHeap.cs \
- $(srcdir)/JobScheduler/JobPriority.cs \
- $(srcdir)/JobScheduler/JobStatus.cs \
- $(srcdir)/JobScheduler/Scheduler.cs
-
-BLING_CSDISTFILES = \
- $(srcdir)/Bling/Animation.cs \
- $(srcdir)/Bling/BackEase.cs \
- $(srcdir)/Bling/CubicEase.cs \
- $(srcdir)/Bling/DoubleAnimation.cs \
- $(srcdir)/Bling/EasedAnimation.cs \
- $(srcdir)/Bling/EasingFunction.cs \
- $(srcdir)/Bling/EasingMode.cs \
- $(srcdir)/Bling/QuinticEase.cs
-
-WIDGETS_CSDISTFILES = \
- $(srcdir)/Widgets/ApplicationActivatedEventArgs.cs \
- $(srcdir)/Widgets/BuilderWindow.cs \
- $(srcdir)/Widgets/CheckPattern.cs \
- $(srcdir)/Widgets/ComplexMenuItem.cs \
- $(srcdir)/Widgets/Curve.cs \
- $(srcdir)/Widgets/CurveType.cs \
- $(srcdir)/Widgets/CustomPrintWidget.cs \
- $(srcdir)/Widgets/DateEdit.cs \
- $(srcdir)/Widgets/DateEditFlags.cs \
- $(srcdir)/Widgets/DissolveTransition.cs \
- $(srcdir)/Widgets/HighlightedBox.cs \
- $(srcdir)/Widgets/ImageView.cs \
- $(srcdir)/Widgets/Layout.cs \
- $(srcdir)/Widgets/MenuButton.cs \
- $(srcdir)/Widgets/OpenWithMenu.cs \
- $(srcdir)/Widgets/PointerMode.cs \
- $(srcdir)/Widgets/Rating.cs \
- $(srcdir)/Widgets/SaneTreeView.cs \
- $(srcdir)/Widgets/ScrolledView.cs \
- $(srcdir)/Widgets/PushTransition.cs \
- $(srcdir)/Widgets/CairoTransition.cs \
- $(srcdir)/Widgets/SlideShowTransition.cs
-
-GNOME_PLATFORM_CSDISTFILES = \
- $(srcdir)/Platform/Gnome/Desktop.cs \
- $(srcdir)/Platform/Gnome/PreferenceBackend.cs \
- $(srcdir)/Platform/Gnome/ScreenSaver.cs \
- $(srcdir)/Platform/Gnome/ThumbnailFactory.cs \
- $(srcdir)/Platform/Gnome/WebProxy.cs
-
-NULL_PLATFORM_CSDISTFILES = \
- $(srcdir)/Platform/Null/Desktop.cs \
- $(srcdir)/Platform/Null/PreferenceBackend.cs \
- $(srcdir)/Platform/Null/ScreenSaver.cs \
- $(srcdir)/Platform/Null/ThumbnailFactory.cs \
- $(srcdir)/Platform/Null/WebProxy.cs
-
-F_SPOT_CSDISTFILES = \
- $(srcdir)/BlockProcessor.cs \
- $(srcdir)/BitConverter.cs \
- $(srcdir)/PhotoArray.cs \
- $(srcdir)/PhotoList.cs \
- $(srcdir)/ColorAdjustment/Adjustment.cs \
- $(srcdir)/ColorAdjustment/AutoStretch.cs \
- $(srcdir)/ColorAdjustment/Desaturate.cs \
- $(srcdir)/ColorAdjustment/FullColorAdjustment.cs \
- $(srcdir)/ColorAdjustment/SepiaTone.cs \
- $(srcdir)/ControlOverlay.cs \
- $(srcdir)/Core/App.cs \
- $(srcdir)/Core/ColorManagement.cs \
- $(srcdir)/Core/Photo.cs \
- $(srcdir)/Core/PhotoVersion.cs \
- $(srcdir)/Db.cs \
- $(srcdir)/DependentListStore.cs \
- $(srcdir)/DragDropTargets.cs \
- $(srcdir)/Editors/Editor.cs \
- $(srcdir)/Editors/AutoStretchEditor.cs \
- $(srcdir)/Editors/CropEditor.cs \
- $(srcdir)/Editors/ColorEditor.cs \
- $(srcdir)/Editors/DesaturateEditor.cs \
- $(srcdir)/Editors/RedEyeEditor.cs \
- $(srcdir)/Editors/SepiaEditor.cs \
- $(srcdir)/Editors/SoftFocusEditor.cs \
- $(srcdir)/Editors/TiltEditor.cs \
- $(srcdir)/ExportStore.cs \
- $(srcdir)/Extensions/ExportMenuItemNode.cs \
- $(srcdir)/Extensions/IExporter.cs \
- $(srcdir)/Extensions/ICommand.cs \
- $(srcdir)/Extensions/IMenuGenerator.cs \
- $(srcdir)/Extensions/IService.cs \
- $(srcdir)/Extensions/MenuNode.cs \
- $(srcdir)/Extensions/CommandMenuItemNode.cs \
- $(srcdir)/Extensions/ComplexMenuItemNode.cs \
- $(srcdir)/Extensions/PhotoSelectionCondition.cs \
- $(srcdir)/Extensions/PopupCommands.cs \
- $(srcdir)/Extensions/ServiceNode.cs \
- $(srcdir)/Extensions/SidebarPage.cs \
- $(srcdir)/Extensions/SidebarPageNode.cs \
- $(srcdir)/Extensions/TransitionNode.cs \
- $(srcdir)/Extensions/ViewModeCondition.cs \
- $(srcdir)/Fader.cs \
- $(srcdir)/FileImportBackend.cs \
- $(srcdir)/FileBrowsableItem.cs \
- $(srcdir)/Filters/ChmodFilter.cs \
- $(srcdir)/Filters/FilterRequest.cs \
- $(srcdir)/Filters/FilterSet.cs \
- $(srcdir)/Filters/IFilter.cs \
- $(srcdir)/Filters/JpegFilter.cs \
- $(srcdir)/Filters/OrientationFilter.cs \
- $(srcdir)/Filters/ResizeFilter.cs \
- $(srcdir)/Filters/SharpFilter.cs \
- $(srcdir)/Filters/UniqueNameFilter.cs \
- $(srcdir)/Filters/WhiteListFilter.cs \
- $(srcdir)/FolderQueryWidget.cs \
- $(srcdir)/FormClient.cs \
- $(srcdir)/FullScreenView.cs \
- $(srcdir)/GroupAdaptor.cs \
- $(srcdir)/GroupSelector.cs \
- $(srcdir)/Accelerometer.cs \
- $(srcdir)/Histogram.cs \
- $(srcdir)/Loaders/AreaPreparedEventArgs.cs \
- $(srcdir)/Loaders/AreaUpdatedEventArgs.cs \
- $(srcdir)/Loaders/ImageLoader.cs \
- $(srcdir)/Loaders/IImageLoader.cs \
- $(srcdir)/Loaders/GdkImageLoader.cs \
- $(srcdir)/ImageLoaderThread.cs \
- $(srcdir)/ImportBackend.cs \
- $(srcdir)/ImportCommand.cs \
- $(srcdir)/InfoOverlay.cs \
- $(srcdir)/InternalProcess.cs \
- $(srcdir)/IOChannel.cs \
- $(srcdir)/ItemAction.cs \
- $(srcdir)/Imaging/DCRawFile.cs \
- $(srcdir)/Imaging/Bim.cs \
- $(srcdir)/Imaging/Ciff.cs \
- $(srcdir)/Imaging/Exif.cs \
- $(srcdir)/Imaging/ImageFile.cs \
- $(srcdir)/Imaging/IptcFile.cs \
- $(srcdir)/Imaging/JpegFile.cs \
- $(srcdir)/Imaging/JpegHeader.cs \
- $(srcdir)/Imaging/JpegUtils.cs \
- $(srcdir)/Imaging/MrwFile.cs \
- $(srcdir)/Imaging/OrderedWriter.cs \
- $(srcdir)/Imaging/PngFile.cs \
- $(srcdir)/Imaging/PnmFile.cs \
- $(srcdir)/Imaging/RafFile.cs \
- $(srcdir)/Imaging/SvgFile.cs \
- $(srcdir)/Imaging/X3fFile.cs \
- $(srcdir)/Imaging/XmpFile.cs \
- $(srcdir)/Imaging/Tiff.cs \
- $(srcdir)/JobStore.cs \
- $(srcdir)/Jobs/SyncMetadataJob.cs \
- $(srcdir)/Jobs/CalculateHashJob.cs \
- $(srcdir)/Loupe.cs \
- $(srcdir)/MainWindow.cs \
- $(srcdir)/MemorySurface.cs \
- $(srcdir)/MetaStore.cs \
- $(srcdir)/MetadataStore.cs \
- $(srcdir)/PhotoEventArgs.cs \
- $(srcdir)/PhotoImageView.cs \
- $(srcdir)/PhotoLoader.cs \
- $(srcdir)/PhotoPopup.cs \
- $(srcdir)/PhotoQuery.cs \
- $(srcdir)/PhotoStore.cs \
- $(srcdir)/PhotoTagMenu.cs \
- $(srcdir)/PhotoVersionCommands.cs \
- $(srcdir)/PhotoVersionMenu.cs \
- $(srcdir)/PhotoView.cs \
- $(srcdir)/PixbufUtils.cs \
- $(srcdir)/PixbufCache.cs \
- $(srcdir)/PixelBuffer.cs \
- $(srcdir)/Preferences.cs \
- $(srcdir)/PrintOperation.cs \
- $(srcdir)/ProgressItem.cs \
- $(srcdir)/QueuedSqliteDatabase.cs \
- $(srcdir)/RotateCommand.cs \
- $(srcdir)/RollStore.cs \
- $(srcdir)/SelectionDataExtensions.cs \
- $(srcdir)/SendEmail.cs \
- $(srcdir)/XScreenSaverSlide.cs \
- $(srcdir)/SingleView.cs \
- $(srcdir)/SimpleCalendar.cs \
- $(srcdir)/Sharpener.cs \
- $(srcdir)/SoftFocus.cs \
- $(srcdir)/TagCommands.cs \
- $(srcdir)/TagPopup.cs \
- $(srcdir)/TagQueryWidget.cs \
- $(srcdir)/TagSelectionWidget.cs \
- $(srcdir)/TagStore.cs \
- $(srcdir)/ThumbnailCache.cs \
- $(srcdir)/ThumbnailGenerator.cs \
- $(srcdir)/Term.cs \
- $(srcdir)/TimeAdaptor.cs \
- $(srcdir)/TipWindow.cs \
- $(srcdir)/UI.Dialog/AboutDialog.cs \
- $(srcdir)/UI.Dialog/AdjustTimeDialog.cs \
- $(srcdir)/UI.Dialog/BuilderDialog.cs \
- $(srcdir)/UI.Dialog/DateRangeDialog.cs \
- $(srcdir)/UI.Dialog/EditExceptionDialog.cs \
- $(srcdir)/UI.Dialog/EditTagDialog.cs \
- $(srcdir)/UI.Dialog/EditTagIconDialog.cs \
- $(srcdir)/UI.Dialog/ExceptionDialog.cs \
- $(srcdir)/UI.Dialog/GladeDialog.cs \
- $(srcdir)/UI.Dialog/HigMessageDialog.cs \
- $(srcdir)/UI.Dialog/LastRollDialog.cs \
- $(srcdir)/UI.Dialog/PreferenceDialog.cs \
- $(srcdir)/UI.Dialog/ProgressDialog.cs \
- $(srcdir)/UI.Dialog/RatingFilterDialog.cs \
- $(srcdir)/UI.Dialog/RepairDbDialog.cs \
- $(srcdir)/UI.Dialog/SelectionRatioDialog.cs \
- $(srcdir)/UI.Dialog/TagSelectionDialog.cs \
- $(srcdir)/UI.Dialog/ThreadProgressDialog.cs \
- $(srcdir)/Updater.cs \
- $(srcdir)/UriCollection.cs \
- $(srcdir)/Util.cs \
- $(srcdir)/Vector.cs \
- $(srcdir)/ThumbnailCommand.cs \
- $(srcdir)/QueryWidget.cs \
- $(srcdir)/Query/HiddenTag.cs \
- $(srcdir)/GPhotoCamera.cs \
- $(srcdir)/CameraSelectionDialog.cs \
- $(srcdir)/CameraFileSelectionDialog.cs \
- $(srcdir)/Widgets/SlideShow.cs \
- $(srcdir)/Widgets/CompositeUtils.cs \
- $(srcdir)/Widgets/Dissolve.cs \
- $(srcdir)/Widgets/EditorPage.cs \
- $(srcdir)/Widgets/Filmstrip.cs \
- $(srcdir)/Widgets/FindBar.cs \
- $(srcdir)/Widgets/FolderTreePage.cs \
- $(srcdir)/Widgets/FolderTreeView.cs \
- $(srcdir)/Widgets/FolderTreeModel.cs \
- $(srcdir)/Widgets/CellRendererTextProgress.cs\
- $(srcdir)/Widgets/IEffect.cs \
- $(srcdir)/Widgets/ITransition.cs \
- $(srcdir)/Widgets/IconView.cs \
- $(srcdir)/Widgets/ImageDisplay.cs \
- $(srcdir)/Widgets/ImageInfo.cs \
- $(srcdir)/Widgets/InfoBox.cs \
- $(srcdir)/Widgets/MetadataDisplay.cs \
- $(srcdir)/Widgets/PanZoom.cs \
- $(srcdir)/Widgets/PreviewPopup.cs \
- $(srcdir)/Widgets/Push.cs \
- $(srcdir)/Widgets/QueryView.cs \
- $(srcdir)/Widgets/RatingMenuItem.cs \
- $(srcdir)/Widgets/Reveal.cs \
- $(srcdir)/Widgets/ScalingIconView.cs \
- $(srcdir)/Widgets/Sidebar.cs \
- $(srcdir)/Widgets/TagEntry.cs \
- $(srcdir)/Widgets/TagMenu.cs \
- $(srcdir)/Widgets/TagView.cs \
- $(srcdir)/Widgets/TrayView.cs \
- $(srcdir)/Widgets/ViewContext.cs \
- $(srcdir)/Widgets/Wipe.cs \
- $(srcdir)/XmpTagsImporter.cs \
- $(srcdir)/main.cs
-
-if !NOGCONF
-GCONF_PKG = -pkg:gconf-sharp-2.0
-endif
-
-CMS_ASSEMBLIES = \
- $(NUNIT_LIBS) \
- -pkg:gtk-sharp-2.0
-
-CORE_ASSEMBLIES = \
- -pkg:gtk-sharp-2.0 \
- -pkg:gnome-vfs-sharp-2.0 \
- -r:Cms.dll \
- -r:Mono.Posix \
- -r:FSpot.Utils.dll
-
-QUERY_ASSEMBLIES = \
- -r:FSpot.Core.dll \
- -r:FSpot.Utils.dll
-
-UTILS_ASSEMBLIES = \
- -pkg:gtk-sharp-2.0 \
- -pkg:gnome-sharp-2.0 \
- -r:Mono.Posix \
- -r:Mono.Cairo \
- $(GCONF_PKG)
-
-JOBSCHEDULER_ASSEMBLIES = \
- -r:FSpot.Utils.dll
-
-BLING_ASSEMBLIES = \
- -pkg:gtk-sharp-2.0 \
- -r:Mono.Cairo \
- $(LINK_GIOSHARP) \
- $(LINK_GTKSHARPBEANS)
-
-WIDGETS_ASSEMBLIES = \
- $(LINK_GIOSHARP) \
- -pkg:gtk-sharp-2.0 \
- -pkg:gnome-sharp-2.0 \
- -pkg:mono-addins \
- $(LINK_GTKSHARPBEANS) \
- -r:Mono.Cairo \
- -r:Cms.dll \
- -r:Mono.Posix \
- -r:FSpot.Core.dll \
- -r:FSpot.Utils.dll
-
-GNOME_PLATFORM_ASSEMBLIES = \
- $(LINK_GIOSHARP) \
- -pkg:gnome-sharp-2.0 \
- -pkg:gtk-sharp-2.0 \
- -pkg:gconf-sharp-2.0 \
- $(NDESK_DBUS_LIBS) \
- -r:Mono.Posix \
- -r:FSpot.Utils.dll
-
-NULL_PLATFORM_ASSEMBLIES = \
- -r:FSpot.Utils.dll
-
-F_SPOT_ASSEMBLIES = \
- $(LINK_GPHOTO2) \
- $(LINK_FLICKR) \
- $(LINK_KEYRING) \
- $(LINK_SMUGMUG) \
- $(LINK_SEMWEB) \
- $(LINK_GTKSHARPBEANS) \
- $(LINK_GIOSHARP) \
- $(LINK_UNIQUESHARP) \
- -r:System.Data \
- -r:System.Web \
- -r:Mono.Data.SqliteClient \
- -r:Mono.Posix \
- -r:Mono.Security \
- -r:Mono.Cairo \
- -r:ICSharpCode.SharpZipLib \
- -r:FSpot.Core.dll \
- -r:FSpot.Query.dll \
- -r:FSpot.Utils.dll \
- -r:FSpot.JobScheduler.dll \
- -r:FSpot.Bling.dll \
- -r:FSpot.Widgets.dll \
- -r:FSpot.Platform.dll \
- -r:Cms.dll \
- $(NUNIT_LIBS) \
- $(NDESK_DBUS_LIBS) \
- $(GCONF_PKG) \
- $(GTKHTML_SHARP_PKG) \
- -pkg:mono-addins \
- -pkg:mono-addins-setup \
- -pkg:mono-addins-gui \
- -pkg:glade-sharp-2.0 \
- -pkg:gnome-sharp-2.0 \
- -pkg:gnome-vfs-sharp-2.0
-
-F_SPOT_DISTRESOURCES = \
- $(srcdir)/dces.rdf \
- $(srcdir)/f-spot.glade \
- $(srcdir)/ui/main_window.ui \
- $(srcdir)/UI.Dialog/ui/AdjustTimeDialog.ui \
- $(srcdir)/UI.Dialog/ui/DateRangeDialog.ui \
- $(srcdir)/UI.Dialog/ui/EditTagDialog.ui \
- $(srcdir)/UI.Dialog/ui/EditTagIconDialog.ui \
- $(srcdir)/UI.Dialog/ui/PreferenceDialog.ui \
- $(srcdir)/UI.Dialog/ui/RatingFilterDialog.ui \
- $(srcdir)/FSpot.addin.xml
-
-F_SPOT_RESOURCES = \
- $(F_SPOT_DISTRESOURCES) \
- $(top_srcdir)/COPYING \
- $(top_srcdir)/icons/f-spot-not.png \
- $(top_srcdir)/icons/f-spot-128.png \
- $(top_srcdir)/icons/flower.png
-
-RESOURCES = $(foreach res,$(F_SPOT_RESOURCES), $(addprefix -resource:,$(res)),$(notdir $(res)))
-
-fspotlibdir = $(libdir)/f-spot
-fspotlib_DATA = f-spot.exe.config \
- f-spot.exe \
- f-spot.exe.mdb \
- Cms.dll.config \
- Cms.dll \
- Cms.dll.mdb \
- FSpot.Utils.dll \
- FSpot.Utils.dll.mdb \
- FSpot.Utils.dll.config \
- FSpot.Query.dll \
- FSpot.Query.dll.mdb \
- FSpot.Core.dll \
- FSpot.Core.dll.mdb \
- FSpot.JobScheduler.dll \
- FSpot.JobScheduler.dll.mdb \
- FSpot.Bling.dll \
- FSpot.Bling.dll.mdb \
- FSpot.Widgets.dll \
- FSpot.Widgets.dll.mdb \
- FSpot.Widgets.dll.config\
- FSpot.Platform.dll \
- FSpot.Platform.dll.mdb
+SUBDIRS = \
+ Cms \
+ Utils \
+ Core \
+ Query \
+ JobScheduler \
+ Bling \
+ Platform \
+ Widgets
+
+ASSEMBLY = f-spot
+TARGET = exe
+LINK = $(REF_FSPOT)
+ASSEMBLY_BUILD_FLAGS = -unsafe
+
+SOURCES = \
+ BlockProcessor.cs \
+ BitConverter.cs \
+ PhotoList.cs \
+ ColorAdjustment/Adjustment.cs \
+ ColorAdjustment/AutoStretch.cs \
+ ColorAdjustment/Desaturate.cs \
+ ColorAdjustment/FullColorAdjustment.cs \
+ ColorAdjustment/SepiaTone.cs \
+ ControlOverlay.cs \
+ Core/App.cs \
+ Core/ColorManagement.cs \
+ Core/Photo.cs \
+ Core/PhotoVersion.cs \
+ Db.cs \
+ DependentListStore.cs \
+ DragDropTargets.cs \
+ Editors/Editor.cs \
+ Editors/AutoStretchEditor.cs \
+ Editors/CropEditor.cs \
+ Editors/ColorEditor.cs \
+ Editors/DesaturateEditor.cs \
+ Editors/RedEyeEditor.cs \
+ Editors/SepiaEditor.cs \
+ Editors/SoftFocusEditor.cs \
+ Editors/TiltEditor.cs \
+ ExportStore.cs \
+ Extensions/ExportMenuItemNode.cs \
+ Extensions/IExporter.cs \
+ Extensions/ICommand.cs \
+ Extensions/IMenuGenerator.cs \
+ Extensions/IService.cs \
+ Extensions/MenuNode.cs \
+ Extensions/CommandMenuItemNode.cs \
+ Extensions/ComplexMenuItemNode.cs \
+ Extensions/PhotoSelectionCondition.cs \
+ Extensions/PopupCommands.cs \
+ Extensions/ServiceNode.cs \
+ Extensions/SidebarPage.cs \
+ Extensions/SidebarPageNode.cs \
+ Extensions/TransitionNode.cs \
+ Extensions/ViewModeCondition.cs \
+ Fader.cs \
+ FileBrowsableItem.cs \
+ Filters/ChmodFilter.cs \
+ Filters/FilterRequest.cs \
+ Filters/FilterSet.cs \
+ Filters/IFilter.cs \
+ Filters/JpegFilter.cs \
+ Filters/OrientationFilter.cs \
+ Filters/ResizeFilter.cs \
+ Filters/SharpFilter.cs \
+ Filters/UniqueNameFilter.cs \
+ Filters/WhiteListFilter.cs \
+ FolderQueryWidget.cs \
+ FullScreenView.cs \
+ GroupAdaptor.cs \
+ GroupSelector.cs \
+ Accelerometer.cs \
+ Histogram.cs \
+ Loaders/AreaPreparedEventArgs.cs \
+ Loaders/AreaUpdatedEventArgs.cs \
+ Loaders/ImageLoader.cs \
+ Loaders/IImageLoader.cs \
+ Loaders/GdkImageLoader.cs \
+ ImageLoaderThread.cs \
+ Import/ImportController.cs \
+ Import/ImportSource.cs \
+ Import/FileImportSource.cs \
+ InfoOverlay.cs \
+ InternalProcess.cs \
+ IOChannel.cs \
+ ItemAction.cs \
+ Imaging/DCRawFile.cs \
+ Imaging/Bim.cs \
+ Imaging/Ciff.cs \
+ Imaging/Exif.cs \
+ Imaging/ImageFile.cs \
+ Imaging/IptcFile.cs \
+ Imaging/JpegFile.cs \
+ Imaging/JpegHeader.cs \
+ Imaging/JpegUtils.cs \
+ Imaging/MrwFile.cs \
+ Imaging/OrderedWriter.cs \
+ Imaging/PngFile.cs \
+ Imaging/PnmFile.cs \
+ Imaging/RafFile.cs \
+ Imaging/SvgFile.cs \
+ Imaging/X3fFile.cs \
+ Imaging/XmpFile.cs \
+ Imaging/Tiff.cs \
+ JobStore.cs \
+ Jobs/SyncMetadataJob.cs \
+ Jobs/CalculateHashJob.cs \
+ Loupe.cs \
+ MainWindow.cs \
+ MemorySurface.cs \
+ MetaStore.cs \
+ MetadataStore.cs \
+ PhotoEventArgs.cs \
+ PhotoImageView.cs \
+ PhotoLoader.cs \
+ PhotoPopup.cs \
+ PhotoQuery.cs \
+ PhotoStore.cs \
+ PhotoTagMenu.cs \
+ PhotoVersionCommands.cs \
+ PhotoVersionMenu.cs \
+ PhotoView.cs \
+ PixbufUtils.cs \
+ PixbufCache.cs \
+ PixelBuffer.cs \
+ Preferences.cs \
+ PrintOperation.cs \
+ ProgressItem.cs \
+ QueuedSqliteDatabase.cs \
+ RotateCommand.cs \
+ RollStore.cs \
+ SelectionDataExtensions.cs \
+ SendEmail.cs \
+ XScreenSaverSlide.cs \
+ SingleView.cs \
+ Sharpener.cs \
+ SoftFocus.cs \
+ TagCommands.cs \
+ TagPopup.cs \
+ TagQueryWidget.cs \
+ TagSelectionWidget.cs \
+ TagStore.cs \
+ ThumbnailCache.cs \
+ ThumbnailGenerator.cs \
+ Term.cs \
+ TimeAdaptor.cs \
+ TipWindow.cs \
+ UI.Dialog/AboutDialog.cs \
+ UI.Dialog/AdjustTimeDialog.cs \
+ UI.Dialog/BuilderDialog.cs \
+ UI.Dialog/DateRangeDialog.cs \
+ UI.Dialog/EditExceptionDialog.cs \
+ UI.Dialog/EditTagDialog.cs \
+ UI.Dialog/EditTagIconDialog.cs \
+ UI.Dialog/ExceptionDialog.cs \
+ UI.Dialog/GladeDialog.cs \
+ UI.Dialog/HigMessageDialog.cs \
+ UI.Dialog/ImportDialog.cs \
+ UI.Dialog/LastRollDialog.cs \
+ UI.Dialog/PreferenceDialog.cs \
+ UI.Dialog/ProgressDialog.cs \
+ UI.Dialog/RatingFilterDialog.cs \
+ UI.Dialog/RepairDbDialog.cs \
+ UI.Dialog/SelectionRatioDialog.cs \
+ UI.Dialog/TagSelectionDialog.cs \
+ UI.Dialog/ThreadProgressDialog.cs \
+ Updater.cs \
+ UriCollection.cs \
+ Util.cs \
+ Vector.cs \
+ ThumbnailCommand.cs \
+ QueryWidget.cs \
+ Query/HiddenTag.cs \
+ Widgets/SlideShow.cs \
+ Widgets/CompositeUtils.cs \
+ Widgets/Dissolve.cs \
+ Widgets/EditorPage.cs \
+ Widgets/Filmstrip.cs \
+ Widgets/FindBar.cs \
+ Widgets/FolderTreePage.cs \
+ Widgets/FolderTreeView.cs \
+ Widgets/FolderTreeModel.cs \
+ Widgets/CellRendererTextProgress.cs\
+ Widgets/IEffect.cs \
+ Widgets/ITransition.cs \
+ Widgets/IconView.cs \
+ Widgets/ImageDisplay.cs \
+ Widgets/ImageInfo.cs \
+ Widgets/InfoBox.cs \
+ Widgets/MetadataDisplay.cs \
+ Widgets/PanZoom.cs \
+ Widgets/PreviewPopup.cs \
+ Widgets/Push.cs \
+ Widgets/QueryView.cs \
+ Widgets/RatingMenuItem.cs \
+ Widgets/Reveal.cs \
+ Widgets/ScalingIconView.cs \
+ Widgets/Sidebar.cs \
+ Widgets/TagEntry.cs \
+ Widgets/TagMenu.cs \
+ Widgets/TagView.cs \
+ Widgets/Tests/FindBarTests.cs \
+ Widgets/TrayView.cs \
+ Widgets/ViewContext.cs \
+ Widgets/Wipe.cs \
+ XmpTagsImporter.cs \
+ main.cs \
+ Tests/UpdaterTests.cs
+
+
+RESOURCES = \
+ ../COPYING \
+ ../icons/f-spot-not.png \
+ ../icons/f-spot-128.png \
+ ../icons/flower.png \
+ dces.rdf \
+ f-spot.glade \
+ ui/main_window.ui \
+ ui/version_name_dialog.ui \
+ ui/import.ui \
+ ui/mail_dialog.ui \
+ UI.Dialog/ui/AdjustTimeDialog.ui \
+ UI.Dialog/ui/DateRangeDialog.ui \
+ UI.Dialog/ui/EditTagDialog.ui \
+ UI.Dialog/ui/EditTagIconDialog.ui \
+ UI.Dialog/ui/PreferenceDialog.ui \
+ UI.Dialog/ui/RatingFilterDialog.ui \
+ FSpot.addin.xml
+
+include $(top_srcdir)/build/build.mk
bin_SCRIPTS = f-spot
+EXTRA_DIST += f-spot.exe.config
+module_SCRIPTS += f-spot.exe.config
-CMS_CSFILES = $(CMS_CSDISTFILES)
-
-CORE_CSFILES = $(CORE_CSDISTFILES) \
- Core/Defines.cs
-
-QUERY_CSFILES = $(QUERY_CSDISTFILES)
-
-UTILS_CSFILES = $(UTILS_CSDISTFILES)
-
-JOBSCHEDULER_CSFILES = $(JOBSCHEDULER_CSDISTFILES)
-
-BLING_CSFILES = $(BLING_CSDISTFILES)
-
-WIDGETS_CSFILES = $(WIDGETS_CSDISTFILES)
-
-GNOME_PLATFORM_CSFILES = $(GNOME_PLATFORM_CSDISTFILES)
-
-NULL_PLATFORM_CSFILES = $(NULL_PLATFROM_CSDISTFILES)
-
-F_SPOT_CSFILES = $(F_SPOT_CSDISTFILES) \
- AssemblyInfo.cs
-
-Cms.dll.mdb: Cms.dll
-
-Cms.dll: $(CMS_CSFILES)
- @echo -e "\n*** Compiling $@"
- $(CSC_LIB) -out:$@ $(EXTRAFLAGS) $(UNSAFE) $(CMS_CSFILES) $(CMS_ASSEMBLIES)
-
-FSpot.Core.dll.mdb: FSpot.Core.dll
-
-FSpot.Core.dll: $(CORE_CSFILES) FSpot.Utils.dll Cms.dll
- @echo -e "\n*** Compiling $@"
- $(CSC_LIB) -out:$@ $(EXTRAFLAGS) $(CORE_CSFILES) $(CORE_ASSEMBLIES)
-
-FSpot.Query.dll.mdb: FSpot.Query.dll
-
-FSpot.Query.dll: $(QUERY_CSFILES) FSpot.Utils.dll FSpot.Core.dll
- @echo -e "\n*** Compiling $@"
- $(CSC_LIB) -out:$@ $(EXTRAFLAGS) $(QUERY_CSFILES) $(QUERY_ASSEMBLIES)
-
-FSpot.Utils.dll.mdb: FSpot.Utils.dll
-
-FSpot.Utils.dll: $(UTILS_CSFILES)
- @echo -e "\n*** Compiling $@"
- $(CSC_LIB) -out:$@ $(EXTRAFLAGS) $(UTILS_CSFILES) $(UTILS_ASSEMBLIES)
-
-FSpot.JobScheduler.dll.mdb: FSpot.JobScheduler.dll
-
-FSpot.JobScheduler.dll: $(JOBSCHEDULER_CSFILES) FSpot.Utils.dll
- @echo -e "\n*** Compiling $@"
- $(CSC_LIB) -out:$@ $(EXTRAFLAGS) $(JOBSCHEDULER_CSFILES) $(JOBSCHEDULER_ASSEMBLIES)
-
-FSpot.Bling.dll.mdb: FSpot.Bling.dll
-
-FSpot.Bling.dll: $(BLING_CSFILES)
- @echo -e "\n*** Compiling $@"
- $(CSC_LIB) -out:$@ $(EXTRAFLAGS) $(BLING_CSFILES) $(BLING_ASSEMBLIES)
-
-FSpot.Widgets.dll.mdb: FSpot.Widgets.dll
-
-FSpot.Widgets.dll: $(WIDGETS_CSFILES) FSpot.Utils.dll FSpot.Core.dll Cms.dll
- @echo -e "\n*** Compiling $@"
- $(CSC_LIB) -out:$@ $(EXTRAFLAGS) $(WIDGETS_CSFILES) $(WIDGETS_ASSEMBLIES)
-
-PLATFORM_CSFILES = $(GNOME_PLATFORM_CSFILES)
-PLATFORM_ASSEMBLIES = $(GNOME_PLATFORM_ASSEMBLIES)
-
-FSpot.Platform.dll.mdb: FSpot.Platform.dll
-
-FSpot.Platform.dll: $(PLATFORM_CSFILES) FSpot.Utils.dll
- @echo -e "\n*** Compiling $@"
- $(CSC_LIB) -out:$@ $(EXTRAFLAGS) $(PLATFORM_CSFILES) $(PLATFORM_ASSEMBLIES)
-
-f-spot.exe.mdb: f-spot.exe
-
-f-spot.exe: $(F_SPOT_CSFILES) FSpot.Utils.dll FSpot.Core.dll FSpot.Query.dll FSpot.JobScheduler.dll FSpot.Bling.dll FSpot.Widgets.dll Cms.dll FSpot.Platform.dll $(F_SPOT_RESOURCES)
- @echo -e "\n*** Compiling $@"
- $(CSC) -target:winexe -out:$@ $(EXTRAFLAGS) $(UNSAFE) $(NOWARN) $(NUNIT_DEFINES) $(F_SPOT_CSFILES) $(F_SPOT_ASSEMBLIES) $(RESOURCES)
-
-all: f-spot.exe
-
-EXTRA_DIST = \
- $(UTILS_CSDISTFILES) \
- $(CMS_CSDISTFILES) \
- $(CORE_CSDISTFILES) \
- $(QUERY_CSDISTFILES) \
- $(JOBSCHEDULER_CSDISTFILES) \
- $(BLING_CSDISTFILES) \
- $(WIDGETS_CSDISTFILES) \
- $(GNOME_PLATFORM_CSDISTFILES) \
- $(NULL_PLATFORM_CSDISTFILES) \
- $(F_SPOT_CSDISTFILES) \
- $(F_SPOT_DISTRESOURCES) \
- f-spot.exe.config.in \
- f-spot.in \
- FSpot.Utils.dll.config \
- FSpot.Widgets.dll.config.in \
- Cms.dll.config.in
-
-CLEANFILES = \
- f-spot.exe.config \
- f-spot.exe.mdb \
- f-spot.exe \
- f-spot \
- Cms.dll.mdb \
- Cms.dll \
- FSpot.Utils.dll.mdb \
- FSpot.Utils.dll \
- FSpot.Query.dll \
- FSpot.Query.dll.mdb \
- FSpot.Core.dll.mdb \
- FSpot.Core.dll \
- FSpot.JobScheduler.dll \
- FSpot.JobScheduler.dll.mdb \
- FSpot.Bling.dll.mdb \
- FSpot.Bling.dll \
- FSpot.Widgets.dll \
- FSpot.Widgets.dll.mdb \
- FSpot.Widgets.dll.config \
- FSpot.Platform.dll \
- FSpot.Platform.dll.mdb \
- Cms.dll.config
-
-DISTCLEANFILES = \
- Makefile
-
-if ENABLE_TESTS
-test:
- @pushd $(top_srcdir)/tests/src/; \
- make test; \
- popd;
-endif
diff --git a/src/Makefile.in b/src/Makefile.in
index 5ded565..f443193 100644
--- a/src/Makefile.in
+++ b/src/Makefile.in
@@ -15,7 +15,6 @@
@SET_MAKE@
-
VPATH = @srcdir@
pkgdatadir = $(datadir)/@PACKAGE@
pkgincludedir = $(includedir)/@PACKAGE@
@@ -35,23 +34,30 @@ PRE_UNINSTALL = :
POST_UNINSTALL = :
build_triplet = @build@
host_triplet = @host@
-DIST_COMMON = $(srcdir)/AssemblyInfo.cs.in $(srcdir)/Cms.dll.config.in \
- $(srcdir)/FSpot.Widgets.dll.config.in $(srcdir)/Makefile.am \
+DIST_COMMON = $(srcdir)/AssemblyInfo.cs.in $(srcdir)/Makefile.am \
$(srcdir)/Makefile.in $(srcdir)/f-spot.exe.config.in \
- $(srcdir)/f-spot.in $(top_srcdir)/Makefile.include
+ $(srcdir)/f-spot.in $(top_srcdir)/build/build.environment.mk \
+ $(top_srcdir)/build/build.mk \
+ $(top_srcdir)/build/build.rules.mk
+ at ENABLE_TESTS_TRUE@am__append_1 = " $(NUNIT_LIBS)"
subdir = src
ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
am__aclocal_m4_deps = $(top_srcdir)/build/m4/shave/shave.m4 \
$(top_srcdir)/build/m4/shamrock/expansions.m4 \
+ $(top_srcdir)/build/m4/shamrock/gnome-doc.m4 \
$(top_srcdir)/build/m4/shamrock/mono.m4 \
+ $(top_srcdir)/build/m4/shamrock/nunit.m4 \
$(top_srcdir)/build/m4/shamrock/programs.m4 \
+ $(top_srcdir)/build/m4/f-spot/flickrnet.m4 \
+ $(top_srcdir)/build/m4/f-spot/gnome-keyring-sharp.m4 \
+ $(top_srcdir)/build/m4/f-spot/gtk-sharp.m4 \
+ $(top_srcdir)/build/m4/f-spot/mono-addins.m4 \
$(top_srcdir)/acinclude.m4 $(top_srcdir)/configure.ac
am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
$(ACLOCAL_M4)
mkinstalldirs = $(install_sh) -d
CONFIG_HEADER = $(top_builddir)/config.h
-CONFIG_CLEAN_FILES = f-spot AssemblyInfo.cs f-spot.exe.config \
- Cms.dll.config FSpot.Widgets.dll.config
+CONFIG_CLEAN_FILES = f-spot AssemblyInfo.cs f-spot.exe.config
CONFIG_CLEAN_VPATH_FILES =
am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`;
am__vpath_adj = case $$p in \
@@ -74,12 +80,50 @@ am__nobase_list = $(am__nobase_strip_setup); \
am__base_list = \
sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \
sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g'
-am__installdirs = "$(DESTDIR)$(bindir)" "$(DESTDIR)$(fspotlibdir)"
-SCRIPTS = $(bin_SCRIPTS)
-SOURCES =
+am__installdirs = "$(DESTDIR)$(bindir)" "$(DESTDIR)$(moduledir)"
+SCRIPTS = $(bin_SCRIPTS) $(module_SCRIPTS)
DIST_SOURCES =
-DATA = $(fspotlib_DATA)
+RECURSIVE_TARGETS = all-recursive check-recursive dvi-recursive \
+ html-recursive info-recursive install-data-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
+AM_RECURSIVE_TARGETS = $(RECURSIVE_TARGETS:-recursive=) \
+ $(RECURSIVE_CLEAN_TARGETS:-recursive=) tags TAGS ctags CTAGS \
+ distdir
+ETAGS = etags
+CTAGS = ctags
+DIST_SUBDIRS = $(SUBDIRS)
DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
+am__relativize = \
+ dir0=`pwd`; \
+ sed_first='s,^\([^/]*\)/.*$$,\1,'; \
+ sed_rest='s,^[^/]*/*,,'; \
+ sed_last='s,^.*/\([^/]*\)$$,\1,'; \
+ sed_butlast='s,/*[^/]*$$,,'; \
+ while test -n "$$dir1"; do \
+ first=`echo "$$dir1" | sed -e "$$sed_first"`; \
+ if test "$$first" != "."; then \
+ if test "$$first" = ".."; then \
+ dir2=`echo "$$dir0" | sed -e "$$sed_last"`/"$$dir2"; \
+ dir0=`echo "$$dir0" | sed -e "$$sed_butlast"`; \
+ else \
+ first2=`echo "$$dir2" | sed -e "$$sed_first"`; \
+ if test "$$first2" = "$$first"; then \
+ dir2=`echo "$$dir2" | sed -e "$$sed_rest"`; \
+ else \
+ dir2="../$$dir2"; \
+ fi; \
+ dir0="$$dir0"/"$$first"; \
+ fi; \
+ fi; \
+ dir1=`echo "$$dir1" | sed -e "$$sed_rest"`; \
+ done; \
+ reldir="$$dir2"
ACLOCAL = @ACLOCAL@
ACLOCAL_AMFLAGS = @ACLOCAL_AMFLAGS@
ALL_LINGUAS = @ALL_LINGUAS@
@@ -124,6 +168,8 @@ EXIF_SOVERSION = @EXIF_SOVERSION@
F77 = @F77@
FC = @FC@
FGREP = @FGREP@
+FLICKRNET_CFLAGS = @FLICKRNET_CFLAGS@
+FLICKRNET_LIBS = @FLICKRNET_LIBS@
F_CFLAGS = @F_CFLAGS@
F_LIBS = @F_LIBS@
GAPI2CODEGEN = @GAPI2CODEGEN@
@@ -137,6 +183,8 @@ GCONF_SHARP_LIBS = @GCONF_SHARP_LIBS@
GETTEXT_PACKAGE = @GETTEXT_PACKAGE@
GIO_CFLAGS = @GIO_CFLAGS@
GIO_LIBS = @GIO_LIBS@
+GLIBSHARP_2_12_7_CFLAGS = @GLIBSHARP_2_12_7_CFLAGS@
+GLIBSHARP_2_12_7_LIBS = @GLIBSHARP_2_12_7_LIBS@
GLIBSHARP_CFLAGS = @GLIBSHARP_CFLAGS@
GLIBSHARP_LIBS = @GLIBSHARP_LIBS@
GLIB_CFLAGS = @GLIB_CFLAGS@
@@ -152,6 +200,10 @@ GNOME_SHARP_CFLAGS = @GNOME_SHARP_CFLAGS@
GNOME_SHARP_LIBS = @GNOME_SHARP_LIBS@
GOBJECT_QUERY = @GOBJECT_QUERY@
GREP = @GREP@
+GTKSHARP_A11Y_CFLAGS = @GTKSHARP_A11Y_CFLAGS@
+GTKSHARP_A11Y_LIBS = @GTKSHARP_A11Y_LIBS@
+GTKSHARP_CFLAGS = @GTKSHARP_CFLAGS@
+GTKSHARP_LIBS = @GTKSHARP_LIBS@
HELP_DIR = @HELP_DIR@
ICONS_DIRECTORY = @ICONS_DIRECTORY@
INSTALL = @INSTALL@
@@ -165,14 +217,14 @@ INTLTOOL_EXTRACT = @INTLTOOL_EXTRACT@
INTLTOOL_MERGE = @INTLTOOL_MERGE@
INTLTOOL_PERL = @INTLTOOL_PERL@
INTLTOOL_UPDATE = @INTLTOOL_UPDATE@
+KEYRINGSHARP_CFLAGS = @KEYRINGSHARP_CFLAGS@
+KEYRINGSHARP_LIBS = @KEYRINGSHARP_LIBS@
LCMS_CFLAGS = @LCMS_CFLAGS@
LCMS_LIBS = @LCMS_LIBS@
LD = @LD@
LDFLAGS = @LDFLAGS@
LIBEXIF_VERSION_CHECK_CFLAGS = @LIBEXIF_VERSION_CHECK_CFLAGS@
LIBEXIF_VERSION_CHECK_LIBS = @LIBEXIF_VERSION_CHECK_LIBS@
-LIBGPHOTO2_CFLAGS = @LIBGPHOTO2_CFLAGS@
-LIBGPHOTO2_LIBS = @LIBGPHOTO2_LIBS@
LIBJPEG = @LIBJPEG@
LIBOBJS = @LIBOBJS@
LIBS = @LIBS@
@@ -187,6 +239,12 @@ MCS = @MCS@
MKDIR_P = @MKDIR_P@
MKINSTALLDIRS = @MKINSTALLDIRS@
MONO = @MONO@
+MONO_ADDINS_CFLAGS = @MONO_ADDINS_CFLAGS@
+MONO_ADDINS_GUI_CFLAGS = @MONO_ADDINS_GUI_CFLAGS@
+MONO_ADDINS_GUI_LIBS = @MONO_ADDINS_GUI_LIBS@
+MONO_ADDINS_LIBS = @MONO_ADDINS_LIBS@
+MONO_ADDINS_SETUP_CFLAGS = @MONO_ADDINS_SETUP_CFLAGS@
+MONO_ADDINS_SETUP_LIBS = @MONO_ADDINS_SETUP_LIBS@
MONO_MODULE_CFLAGS = @MONO_MODULE_CFLAGS@
MONO_MODULE_LIBS = @MONO_MODULE_LIBS@
MSGFMT = @MSGFMT@
@@ -197,7 +255,6 @@ NDESK_DBUS_LIBS = @NDESK_DBUS_LIBS@
NM = @NM@
NMEDIT = @NMEDIT@
NUNIT_CFLAGS = @NUNIT_CFLAGS@
-NUNIT_DEFINES = @NUNIT_DEFINES@
NUNIT_LIBS = @NUNIT_LIBS@
OBJC = @OBJC@
OBJDUMP = @OBJDUMP@
@@ -289,549 +346,452 @@ target_alias = @target_alias@
top_build_prefix = @top_build_prefix@
top_builddir = @top_builddir@
top_srcdir = @top_srcdir@
+SUBDIRS = \
+ Cms \
+ Utils \
+ Core \
+ Query \
+ JobScheduler \
+ Bling \
+ Platform \
+ Widgets
+
+ASSEMBLY = f-spot
+TARGET = exe
+LINK = $(REF_FSPOT) $(am__append_1)
+ASSEMBLY_BUILD_FLAGS = -unsafe
+SOURCES = \
+ BlockProcessor.cs \
+ BitConverter.cs \
+ PhotoList.cs \
+ ColorAdjustment/Adjustment.cs \
+ ColorAdjustment/AutoStretch.cs \
+ ColorAdjustment/Desaturate.cs \
+ ColorAdjustment/FullColorAdjustment.cs \
+ ColorAdjustment/SepiaTone.cs \
+ ControlOverlay.cs \
+ Core/App.cs \
+ Core/ColorManagement.cs \
+ Core/Photo.cs \
+ Core/PhotoVersion.cs \
+ Db.cs \
+ DependentListStore.cs \
+ DragDropTargets.cs \
+ Editors/Editor.cs \
+ Editors/AutoStretchEditor.cs \
+ Editors/CropEditor.cs \
+ Editors/ColorEditor.cs \
+ Editors/DesaturateEditor.cs \
+ Editors/RedEyeEditor.cs \
+ Editors/SepiaEditor.cs \
+ Editors/SoftFocusEditor.cs \
+ Editors/TiltEditor.cs \
+ ExportStore.cs \
+ Extensions/ExportMenuItemNode.cs \
+ Extensions/IExporter.cs \
+ Extensions/ICommand.cs \
+ Extensions/IMenuGenerator.cs \
+ Extensions/IService.cs \
+ Extensions/MenuNode.cs \
+ Extensions/CommandMenuItemNode.cs \
+ Extensions/ComplexMenuItemNode.cs \
+ Extensions/PhotoSelectionCondition.cs \
+ Extensions/PopupCommands.cs \
+ Extensions/ServiceNode.cs \
+ Extensions/SidebarPage.cs \
+ Extensions/SidebarPageNode.cs \
+ Extensions/TransitionNode.cs \
+ Extensions/ViewModeCondition.cs \
+ Fader.cs \
+ FileBrowsableItem.cs \
+ Filters/ChmodFilter.cs \
+ Filters/FilterRequest.cs \
+ Filters/FilterSet.cs \
+ Filters/IFilter.cs \
+ Filters/JpegFilter.cs \
+ Filters/OrientationFilter.cs \
+ Filters/ResizeFilter.cs \
+ Filters/SharpFilter.cs \
+ Filters/UniqueNameFilter.cs \
+ Filters/WhiteListFilter.cs \
+ FolderQueryWidget.cs \
+ FullScreenView.cs \
+ GroupAdaptor.cs \
+ GroupSelector.cs \
+ Accelerometer.cs \
+ Histogram.cs \
+ Loaders/AreaPreparedEventArgs.cs \
+ Loaders/AreaUpdatedEventArgs.cs \
+ Loaders/ImageLoader.cs \
+ Loaders/IImageLoader.cs \
+ Loaders/GdkImageLoader.cs \
+ ImageLoaderThread.cs \
+ Import/ImportController.cs \
+ Import/ImportSource.cs \
+ Import/FileImportSource.cs \
+ InfoOverlay.cs \
+ InternalProcess.cs \
+ IOChannel.cs \
+ ItemAction.cs \
+ Imaging/DCRawFile.cs \
+ Imaging/Bim.cs \
+ Imaging/Ciff.cs \
+ Imaging/Exif.cs \
+ Imaging/ImageFile.cs \
+ Imaging/IptcFile.cs \
+ Imaging/JpegFile.cs \
+ Imaging/JpegHeader.cs \
+ Imaging/JpegUtils.cs \
+ Imaging/MrwFile.cs \
+ Imaging/OrderedWriter.cs \
+ Imaging/PngFile.cs \
+ Imaging/PnmFile.cs \
+ Imaging/RafFile.cs \
+ Imaging/SvgFile.cs \
+ Imaging/X3fFile.cs \
+ Imaging/XmpFile.cs \
+ Imaging/Tiff.cs \
+ JobStore.cs \
+ Jobs/SyncMetadataJob.cs \
+ Jobs/CalculateHashJob.cs \
+ Loupe.cs \
+ MainWindow.cs \
+ MemorySurface.cs \
+ MetaStore.cs \
+ MetadataStore.cs \
+ PhotoEventArgs.cs \
+ PhotoImageView.cs \
+ PhotoLoader.cs \
+ PhotoPopup.cs \
+ PhotoQuery.cs \
+ PhotoStore.cs \
+ PhotoTagMenu.cs \
+ PhotoVersionCommands.cs \
+ PhotoVersionMenu.cs \
+ PhotoView.cs \
+ PixbufUtils.cs \
+ PixbufCache.cs \
+ PixelBuffer.cs \
+ Preferences.cs \
+ PrintOperation.cs \
+ ProgressItem.cs \
+ QueuedSqliteDatabase.cs \
+ RotateCommand.cs \
+ RollStore.cs \
+ SelectionDataExtensions.cs \
+ SendEmail.cs \
+ XScreenSaverSlide.cs \
+ SingleView.cs \
+ Sharpener.cs \
+ SoftFocus.cs \
+ TagCommands.cs \
+ TagPopup.cs \
+ TagQueryWidget.cs \
+ TagSelectionWidget.cs \
+ TagStore.cs \
+ ThumbnailCache.cs \
+ ThumbnailGenerator.cs \
+ Term.cs \
+ TimeAdaptor.cs \
+ TipWindow.cs \
+ UI.Dialog/AboutDialog.cs \
+ UI.Dialog/AdjustTimeDialog.cs \
+ UI.Dialog/BuilderDialog.cs \
+ UI.Dialog/DateRangeDialog.cs \
+ UI.Dialog/EditExceptionDialog.cs \
+ UI.Dialog/EditTagDialog.cs \
+ UI.Dialog/EditTagIconDialog.cs \
+ UI.Dialog/ExceptionDialog.cs \
+ UI.Dialog/GladeDialog.cs \
+ UI.Dialog/HigMessageDialog.cs \
+ UI.Dialog/ImportDialog.cs \
+ UI.Dialog/LastRollDialog.cs \
+ UI.Dialog/PreferenceDialog.cs \
+ UI.Dialog/ProgressDialog.cs \
+ UI.Dialog/RatingFilterDialog.cs \
+ UI.Dialog/RepairDbDialog.cs \
+ UI.Dialog/SelectionRatioDialog.cs \
+ UI.Dialog/TagSelectionDialog.cs \
+ UI.Dialog/ThreadProgressDialog.cs \
+ Updater.cs \
+ UriCollection.cs \
+ Util.cs \
+ Vector.cs \
+ ThumbnailCommand.cs \
+ QueryWidget.cs \
+ Query/HiddenTag.cs \
+ Widgets/SlideShow.cs \
+ Widgets/CompositeUtils.cs \
+ Widgets/Dissolve.cs \
+ Widgets/EditorPage.cs \
+ Widgets/Filmstrip.cs \
+ Widgets/FindBar.cs \
+ Widgets/FolderTreePage.cs \
+ Widgets/FolderTreeView.cs \
+ Widgets/FolderTreeModel.cs \
+ Widgets/CellRendererTextProgress.cs\
+ Widgets/IEffect.cs \
+ Widgets/ITransition.cs \
+ Widgets/IconView.cs \
+ Widgets/ImageDisplay.cs \
+ Widgets/ImageInfo.cs \
+ Widgets/InfoBox.cs \
+ Widgets/MetadataDisplay.cs \
+ Widgets/PanZoom.cs \
+ Widgets/PreviewPopup.cs \
+ Widgets/Push.cs \
+ Widgets/QueryView.cs \
+ Widgets/RatingMenuItem.cs \
+ Widgets/Reveal.cs \
+ Widgets/ScalingIconView.cs \
+ Widgets/Sidebar.cs \
+ Widgets/TagEntry.cs \
+ Widgets/TagMenu.cs \
+ Widgets/TagView.cs \
+ Widgets/Tests/FindBarTests.cs \
+ Widgets/TrayView.cs \
+ Widgets/ViewContext.cs \
+ Widgets/Wipe.cs \
+ XmpTagsImporter.cs \
+ main.cs \
+ Tests/UpdaterTests.cs
+
+RESOURCES = \
+ ../COPYING \
+ ../icons/f-spot-not.png \
+ ../icons/f-spot-128.png \
+ ../icons/flower.png \
+ dces.rdf \
+ f-spot.glade \
+ ui/main_window.ui \
+ ui/version_name_dialog.ui \
+ ui/import.ui \
+ ui/mail_dialog.ui \
+ UI.Dialog/ui/AdjustTimeDialog.ui \
+ UI.Dialog/ui/DateRangeDialog.ui \
+ UI.Dialog/ui/EditTagDialog.ui \
+ UI.Dialog/ui/EditTagIconDialog.ui \
+ UI.Dialog/ui/PreferenceDialog.ui \
+ UI.Dialog/ui/RatingFilterDialog.ui \
+ FSpot.addin.xml
+
+
+# Initializers
+MONO_BASE_PATH =
+MONO_ADDINS_PATH =
+
+# Install Paths
+DEFAULT_INSTALL_DIR = $(pkglibdir)
+BACKENDS_INSTALL_DIR = $(DEFAULT_INSTALL_DIR)/Backends
+EXTENSIONS_INSTALL_DIR = $(DEFAULT_INSTALL_DIR)/Extensions
DIR_DOCS = $(top_builddir)/docs
DIR_EXTENSIONS = $(top_builddir)/extensions
-DIR_GPHOTO2 = $(top_builddir)/lib/libgphoto2-sharp
DIR_ICONS = $(top_builddir)/icons
DIR_JPEGTRAN = $(top_builddir)/lib/libjpegtran
-DIR_KEYRING = $(top_builddir)/lib/gnome-keyring-sharp
DIR_LIBFSPOT = $(top_builddir)/lib/libfspot
DIR_SEMWEB = $(top_builddir)/lib/semweb
DIR_SRC = $(top_builddir)/src
DIR_GIOSHARP = $(top_builddir)/lib/gio-sharp/gio
DIR_GTKSHARPBEANS = $(top_builddir)/lib/gtk-sharp-beans
DIR_UNIQUESHARP = $(top_builddir)/lib/unique-sharp/unique
-LINK_KEYRING = -r:$(DIR_KEYRING)/gnome-keyring-sharp.dll
-LINK_GPHOTO2 = -r:$(DIR_GPHOTO2)/libgphoto2-sharp.dll
-LINK_SEMWEB = -r:$(DIR_SEMWEB)/SemWeb.dll
-LINK_GIOSHARP = -r:$(DIR_GIOSHARP)/gio-sharp.dll
-LINK_GTKSHARPBEANS = -r:$(DIR_GTKSHARPBEANS)/gtk-sharp-beans.dll
-LINK_UNIQUESHARP = -r:$(DIR_UNIQUESHARP)/unique-sharp.dll
-CSC_FLAGS = -debug
-CSC = $(MCS) $(CSC_FLAGS) -target:exe
-CSC_LIB = $(MCS) $(CSC_FLAGS) -target:library
-MONO_DEBUGFLAGS = --debug
-RUNTIME = mono $(MONO_DEBUGFLAGS)
-UNSAFE = -unsafe
-NOWARN = -nowarn:0169 -nowarn:0612 -nowarn:0414
-EXTRAFLAGS = -d:TEST_METADATA -d:BROKEN_RSVG -d:GSD_2_24 $(CSC_DEFINES)
-CMS_CSDISTFILES = \
- $(srcdir)/Cms/CctTable.cs \
- $(srcdir)/Cms/CmsException.cs \
- $(srcdir)/Cms/ColorCIELab.cs \
- $(srcdir)/Cms/ColorCIELCh.cs \
- $(srcdir)/Cms/ColorCIExyY.cs \
- $(srcdir)/Cms/ColorCIEXYZ.cs \
- $(srcdir)/Cms/Format.cs \
- $(srcdir)/Cms/GammaTable.cs \
- $(srcdir)/Cms/IccColorSpace.cs \
- $(srcdir)/Cms/IccProfileClass.cs \
- $(srcdir)/Cms/Intent.cs \
- $(srcdir)/Cms/NativeMethods.cs \
- $(srcdir)/Cms/Profile.cs \
- $(srcdir)/Cms/SaveException.cs \
- $(srcdir)/Cms/Transform.cs
-
-CORE_CSDISTFILES = \
- $(srcdir)/Core/Animator.cs \
- $(srcdir)/Core/BrowsableEventArgs.cs \
- $(srcdir)/Core/BrowsablePointer.cs \
- $(srcdir)/Core/BrowsablePointerChangedEventArgs.cs \
- $(srcdir)/Core/Category.cs \
- $(srcdir)/Core/DbItem.cs \
- $(srcdir)/Core/Delay.cs \
- $(srcdir)/Core/Tag.cs \
- $(srcdir)/Core/Global.cs \
- $(srcdir)/Core/IBrowsableItem.cs \
- $(srcdir)/Core/IBrowsableItemChanges.cs \
- $(srcdir)/Core/IBrowsableCollection.cs \
- $(srcdir)/Core/PhotoChanges.cs \
- $(srcdir)/Core/PhotosChanges.cs \
- $(srcdir)/Core/Roll.cs
-
-QUERY_CSDISTFILES = \
- $(srcdir)/Query/DateRange.cs \
- $(srcdir)/Query/FolderSet.cs \
- $(srcdir)/Query/IOrderCondition.cs \
- $(srcdir)/Query/IQueryCondition.cs \
- $(srcdir)/Query/LogicalTerm.cs \
- $(srcdir)/Query/OrderByTime.cs \
- $(srcdir)/Query/RatingRange.cs \
- $(srcdir)/Query/RollSet.cs \
- $(srcdir)/Query/TagConditionWrapper.cs \
- $(srcdir)/Query/UntaggedCondition.cs
-
-UTILS_CSDISTFILES = \
- $(srcdir)/Utils/Cache.cs \
- $(srcdir)/Utils/CairoUtils.cs \
- $(srcdir)/Utils/ConsoleCrayon.cs \
- $(srcdir)/Utils/DbUtils.cs \
- $(srcdir)/Utils/GdkUtils.cs \
- $(srcdir)/Utils/GtkUtil.cs \
- $(srcdir)/Utils/Log.cs \
- $(srcdir)/Utils/PixbufOrientation.cs \
- $(srcdir)/Utils/PixbufUtils.cs \
- $(srcdir)/Utils/Unix.cs \
- $(srcdir)/Utils/UriExtensions.cs \
- $(srcdir)/Utils/UriUtils.cs
-
-JOBSCHEDULER_CSDISTFILES = \
- $(srcdir)/JobScheduler/FSpotCompat.cs \
- $(srcdir)/JobScheduler/IInstanceCriticalJob.cs \
- $(srcdir)/JobScheduler/IJob.cs \
- $(srcdir)/JobScheduler/IntervalHeap.cs \
- $(srcdir)/JobScheduler/JobPriority.cs \
- $(srcdir)/JobScheduler/JobStatus.cs \
- $(srcdir)/JobScheduler/Scheduler.cs
-
-BLING_CSDISTFILES = \
- $(srcdir)/Bling/Animation.cs \
- $(srcdir)/Bling/BackEase.cs \
- $(srcdir)/Bling/CubicEase.cs \
- $(srcdir)/Bling/DoubleAnimation.cs \
- $(srcdir)/Bling/EasedAnimation.cs \
- $(srcdir)/Bling/EasingFunction.cs \
- $(srcdir)/Bling/EasingMode.cs \
- $(srcdir)/Bling/QuinticEase.cs
-
-WIDGETS_CSDISTFILES = \
- $(srcdir)/Widgets/ApplicationActivatedEventArgs.cs \
- $(srcdir)/Widgets/BuilderWindow.cs \
- $(srcdir)/Widgets/CheckPattern.cs \
- $(srcdir)/Widgets/ComplexMenuItem.cs \
- $(srcdir)/Widgets/Curve.cs \
- $(srcdir)/Widgets/CurveType.cs \
- $(srcdir)/Widgets/CustomPrintWidget.cs \
- $(srcdir)/Widgets/DateEdit.cs \
- $(srcdir)/Widgets/DateEditFlags.cs \
- $(srcdir)/Widgets/DissolveTransition.cs \
- $(srcdir)/Widgets/HighlightedBox.cs \
- $(srcdir)/Widgets/ImageView.cs \
- $(srcdir)/Widgets/Layout.cs \
- $(srcdir)/Widgets/MenuButton.cs \
- $(srcdir)/Widgets/OpenWithMenu.cs \
- $(srcdir)/Widgets/PointerMode.cs \
- $(srcdir)/Widgets/Rating.cs \
- $(srcdir)/Widgets/SaneTreeView.cs \
- $(srcdir)/Widgets/ScrolledView.cs \
- $(srcdir)/Widgets/PushTransition.cs \
- $(srcdir)/Widgets/CairoTransition.cs \
- $(srcdir)/Widgets/SlideShowTransition.cs
-
-GNOME_PLATFORM_CSDISTFILES = \
- $(srcdir)/Platform/Gnome/Desktop.cs \
- $(srcdir)/Platform/Gnome/PreferenceBackend.cs \
- $(srcdir)/Platform/Gnome/ScreenSaver.cs \
- $(srcdir)/Platform/Gnome/ThumbnailFactory.cs \
- $(srcdir)/Platform/Gnome/WebProxy.cs
-
-NULL_PLATFORM_CSDISTFILES = \
- $(srcdir)/Platform/Null/Desktop.cs \
- $(srcdir)/Platform/Null/PreferenceBackend.cs \
- $(srcdir)/Platform/Null/ScreenSaver.cs \
- $(srcdir)/Platform/Null/ThumbnailFactory.cs \
- $(srcdir)/Platform/Null/WebProxy.cs
-
-F_SPOT_CSDISTFILES = \
- $(srcdir)/BlockProcessor.cs \
- $(srcdir)/BitConverter.cs \
- $(srcdir)/PhotoArray.cs \
- $(srcdir)/PhotoList.cs \
- $(srcdir)/ColorAdjustment/Adjustment.cs \
- $(srcdir)/ColorAdjustment/AutoStretch.cs \
- $(srcdir)/ColorAdjustment/Desaturate.cs \
- $(srcdir)/ColorAdjustment/FullColorAdjustment.cs \
- $(srcdir)/ColorAdjustment/SepiaTone.cs \
- $(srcdir)/ControlOverlay.cs \
- $(srcdir)/Core/App.cs \
- $(srcdir)/Core/ColorManagement.cs \
- $(srcdir)/Core/Photo.cs \
- $(srcdir)/Core/PhotoVersion.cs \
- $(srcdir)/Db.cs \
- $(srcdir)/DependentListStore.cs \
- $(srcdir)/DragDropTargets.cs \
- $(srcdir)/Editors/Editor.cs \
- $(srcdir)/Editors/AutoStretchEditor.cs \
- $(srcdir)/Editors/CropEditor.cs \
- $(srcdir)/Editors/ColorEditor.cs \
- $(srcdir)/Editors/DesaturateEditor.cs \
- $(srcdir)/Editors/RedEyeEditor.cs \
- $(srcdir)/Editors/SepiaEditor.cs \
- $(srcdir)/Editors/SoftFocusEditor.cs \
- $(srcdir)/Editors/TiltEditor.cs \
- $(srcdir)/ExportStore.cs \
- $(srcdir)/Extensions/ExportMenuItemNode.cs \
- $(srcdir)/Extensions/IExporter.cs \
- $(srcdir)/Extensions/ICommand.cs \
- $(srcdir)/Extensions/IMenuGenerator.cs \
- $(srcdir)/Extensions/IService.cs \
- $(srcdir)/Extensions/MenuNode.cs \
- $(srcdir)/Extensions/CommandMenuItemNode.cs \
- $(srcdir)/Extensions/ComplexMenuItemNode.cs \
- $(srcdir)/Extensions/PhotoSelectionCondition.cs \
- $(srcdir)/Extensions/PopupCommands.cs \
- $(srcdir)/Extensions/ServiceNode.cs \
- $(srcdir)/Extensions/SidebarPage.cs \
- $(srcdir)/Extensions/SidebarPageNode.cs \
- $(srcdir)/Extensions/TransitionNode.cs \
- $(srcdir)/Extensions/ViewModeCondition.cs \
- $(srcdir)/Fader.cs \
- $(srcdir)/FileImportBackend.cs \
- $(srcdir)/FileBrowsableItem.cs \
- $(srcdir)/Filters/ChmodFilter.cs \
- $(srcdir)/Filters/FilterRequest.cs \
- $(srcdir)/Filters/FilterSet.cs \
- $(srcdir)/Filters/IFilter.cs \
- $(srcdir)/Filters/JpegFilter.cs \
- $(srcdir)/Filters/OrientationFilter.cs \
- $(srcdir)/Filters/ResizeFilter.cs \
- $(srcdir)/Filters/SharpFilter.cs \
- $(srcdir)/Filters/UniqueNameFilter.cs \
- $(srcdir)/Filters/WhiteListFilter.cs \
- $(srcdir)/FolderQueryWidget.cs \
- $(srcdir)/FormClient.cs \
- $(srcdir)/FullScreenView.cs \
- $(srcdir)/GroupAdaptor.cs \
- $(srcdir)/GroupSelector.cs \
- $(srcdir)/Accelerometer.cs \
- $(srcdir)/Histogram.cs \
- $(srcdir)/Loaders/AreaPreparedEventArgs.cs \
- $(srcdir)/Loaders/AreaUpdatedEventArgs.cs \
- $(srcdir)/Loaders/ImageLoader.cs \
- $(srcdir)/Loaders/IImageLoader.cs \
- $(srcdir)/Loaders/GdkImageLoader.cs \
- $(srcdir)/ImageLoaderThread.cs \
- $(srcdir)/ImportBackend.cs \
- $(srcdir)/ImportCommand.cs \
- $(srcdir)/InfoOverlay.cs \
- $(srcdir)/InternalProcess.cs \
- $(srcdir)/IOChannel.cs \
- $(srcdir)/ItemAction.cs \
- $(srcdir)/Imaging/DCRawFile.cs \
- $(srcdir)/Imaging/Bim.cs \
- $(srcdir)/Imaging/Ciff.cs \
- $(srcdir)/Imaging/Exif.cs \
- $(srcdir)/Imaging/ImageFile.cs \
- $(srcdir)/Imaging/IptcFile.cs \
- $(srcdir)/Imaging/JpegFile.cs \
- $(srcdir)/Imaging/JpegHeader.cs \
- $(srcdir)/Imaging/JpegUtils.cs \
- $(srcdir)/Imaging/MrwFile.cs \
- $(srcdir)/Imaging/OrderedWriter.cs \
- $(srcdir)/Imaging/PngFile.cs \
- $(srcdir)/Imaging/PnmFile.cs \
- $(srcdir)/Imaging/RafFile.cs \
- $(srcdir)/Imaging/SvgFile.cs \
- $(srcdir)/Imaging/X3fFile.cs \
- $(srcdir)/Imaging/XmpFile.cs \
- $(srcdir)/Imaging/Tiff.cs \
- $(srcdir)/JobStore.cs \
- $(srcdir)/Jobs/SyncMetadataJob.cs \
- $(srcdir)/Jobs/CalculateHashJob.cs \
- $(srcdir)/Loupe.cs \
- $(srcdir)/MainWindow.cs \
- $(srcdir)/MemorySurface.cs \
- $(srcdir)/MetaStore.cs \
- $(srcdir)/MetadataStore.cs \
- $(srcdir)/PhotoEventArgs.cs \
- $(srcdir)/PhotoImageView.cs \
- $(srcdir)/PhotoLoader.cs \
- $(srcdir)/PhotoPopup.cs \
- $(srcdir)/PhotoQuery.cs \
- $(srcdir)/PhotoStore.cs \
- $(srcdir)/PhotoTagMenu.cs \
- $(srcdir)/PhotoVersionCommands.cs \
- $(srcdir)/PhotoVersionMenu.cs \
- $(srcdir)/PhotoView.cs \
- $(srcdir)/PixbufUtils.cs \
- $(srcdir)/PixbufCache.cs \
- $(srcdir)/PixelBuffer.cs \
- $(srcdir)/Preferences.cs \
- $(srcdir)/PrintOperation.cs \
- $(srcdir)/ProgressItem.cs \
- $(srcdir)/QueuedSqliteDatabase.cs \
- $(srcdir)/RotateCommand.cs \
- $(srcdir)/RollStore.cs \
- $(srcdir)/SelectionDataExtensions.cs \
- $(srcdir)/SendEmail.cs \
- $(srcdir)/XScreenSaverSlide.cs \
- $(srcdir)/SingleView.cs \
- $(srcdir)/SimpleCalendar.cs \
- $(srcdir)/Sharpener.cs \
- $(srcdir)/SoftFocus.cs \
- $(srcdir)/TagCommands.cs \
- $(srcdir)/TagPopup.cs \
- $(srcdir)/TagQueryWidget.cs \
- $(srcdir)/TagSelectionWidget.cs \
- $(srcdir)/TagStore.cs \
- $(srcdir)/ThumbnailCache.cs \
- $(srcdir)/ThumbnailGenerator.cs \
- $(srcdir)/Term.cs \
- $(srcdir)/TimeAdaptor.cs \
- $(srcdir)/TipWindow.cs \
- $(srcdir)/UI.Dialog/AboutDialog.cs \
- $(srcdir)/UI.Dialog/AdjustTimeDialog.cs \
- $(srcdir)/UI.Dialog/BuilderDialog.cs \
- $(srcdir)/UI.Dialog/DateRangeDialog.cs \
- $(srcdir)/UI.Dialog/EditExceptionDialog.cs \
- $(srcdir)/UI.Dialog/EditTagDialog.cs \
- $(srcdir)/UI.Dialog/EditTagIconDialog.cs \
- $(srcdir)/UI.Dialog/ExceptionDialog.cs \
- $(srcdir)/UI.Dialog/GladeDialog.cs \
- $(srcdir)/UI.Dialog/HigMessageDialog.cs \
- $(srcdir)/UI.Dialog/LastRollDialog.cs \
- $(srcdir)/UI.Dialog/PreferenceDialog.cs \
- $(srcdir)/UI.Dialog/ProgressDialog.cs \
- $(srcdir)/UI.Dialog/RatingFilterDialog.cs \
- $(srcdir)/UI.Dialog/RepairDbDialog.cs \
- $(srcdir)/UI.Dialog/SelectionRatioDialog.cs \
- $(srcdir)/UI.Dialog/TagSelectionDialog.cs \
- $(srcdir)/UI.Dialog/ThreadProgressDialog.cs \
- $(srcdir)/Updater.cs \
- $(srcdir)/UriCollection.cs \
- $(srcdir)/Util.cs \
- $(srcdir)/Vector.cs \
- $(srcdir)/ThumbnailCommand.cs \
- $(srcdir)/QueryWidget.cs \
- $(srcdir)/Query/HiddenTag.cs \
- $(srcdir)/GPhotoCamera.cs \
- $(srcdir)/CameraSelectionDialog.cs \
- $(srcdir)/CameraFileSelectionDialog.cs \
- $(srcdir)/Widgets/SlideShow.cs \
- $(srcdir)/Widgets/CompositeUtils.cs \
- $(srcdir)/Widgets/Dissolve.cs \
- $(srcdir)/Widgets/EditorPage.cs \
- $(srcdir)/Widgets/Filmstrip.cs \
- $(srcdir)/Widgets/FindBar.cs \
- $(srcdir)/Widgets/FolderTreePage.cs \
- $(srcdir)/Widgets/FolderTreeView.cs \
- $(srcdir)/Widgets/FolderTreeModel.cs \
- $(srcdir)/Widgets/CellRendererTextProgress.cs\
- $(srcdir)/Widgets/IEffect.cs \
- $(srcdir)/Widgets/ITransition.cs \
- $(srcdir)/Widgets/IconView.cs \
- $(srcdir)/Widgets/ImageDisplay.cs \
- $(srcdir)/Widgets/ImageInfo.cs \
- $(srcdir)/Widgets/InfoBox.cs \
- $(srcdir)/Widgets/MetadataDisplay.cs \
- $(srcdir)/Widgets/PanZoom.cs \
- $(srcdir)/Widgets/PreviewPopup.cs \
- $(srcdir)/Widgets/Push.cs \
- $(srcdir)/Widgets/QueryView.cs \
- $(srcdir)/Widgets/RatingMenuItem.cs \
- $(srcdir)/Widgets/Reveal.cs \
- $(srcdir)/Widgets/ScalingIconView.cs \
- $(srcdir)/Widgets/Sidebar.cs \
- $(srcdir)/Widgets/TagEntry.cs \
- $(srcdir)/Widgets/TagMenu.cs \
- $(srcdir)/Widgets/TagView.cs \
- $(srcdir)/Widgets/TrayView.cs \
- $(srcdir)/Widgets/ViewContext.cs \
- $(srcdir)/Widgets/Wipe.cs \
- $(srcdir)/XmpTagsImporter.cs \
- $(srcdir)/main.cs
-
- at NOGCONF_FALSE@GCONF_PKG = -pkg:gconf-sharp-2.0
-CMS_ASSEMBLIES = \
- $(NUNIT_LIBS) \
- -pkg:gtk-sharp-2.0
-
-CORE_ASSEMBLIES = \
- -pkg:gtk-sharp-2.0 \
- -pkg:gnome-vfs-sharp-2.0 \
- -r:Cms.dll \
- -r:Mono.Posix \
- -r:FSpot.Utils.dll
-
-QUERY_ASSEMBLIES = \
- -r:FSpot.Core.dll \
- -r:FSpot.Utils.dll
-
-UTILS_ASSEMBLIES = \
- -pkg:gtk-sharp-2.0 \
- -pkg:gnome-sharp-2.0 \
- -r:Mono.Posix \
- -r:Mono.Cairo \
- $(GCONF_PKG)
-
-JOBSCHEDULER_ASSEMBLIES = \
- -r:FSpot.Utils.dll
-
-BLING_ASSEMBLIES = \
- -pkg:gtk-sharp-2.0 \
- -r:Mono.Cairo \
- $(LINK_GIOSHARP) \
- $(LINK_GTKSHARPBEANS)
-
-WIDGETS_ASSEMBLIES = \
- $(LINK_GIOSHARP) \
- -pkg:gtk-sharp-2.0 \
- -pkg:gnome-sharp-2.0 \
- -pkg:mono-addins \
- $(LINK_GTKSHARPBEANS) \
- -r:Mono.Cairo \
- -r:Cms.dll \
- -r:Mono.Posix \
- -r:FSpot.Core.dll \
- -r:FSpot.Utils.dll
-
-GNOME_PLATFORM_ASSEMBLIES = \
- $(LINK_GIOSHARP) \
- -pkg:gnome-sharp-2.0 \
- -pkg:gtk-sharp-2.0 \
- -pkg:gconf-sharp-2.0 \
- $(NDESK_DBUS_LIBS) \
- -r:Mono.Posix \
- -r:FSpot.Utils.dll
-
-NULL_PLATFORM_ASSEMBLIES = \
- -r:FSpot.Utils.dll
-
-F_SPOT_ASSEMBLIES = \
- $(LINK_GPHOTO2) \
- $(LINK_FLICKR) \
- $(LINK_KEYRING) \
- $(LINK_SMUGMUG) \
- $(LINK_SEMWEB) \
- $(LINK_GTKSHARPBEANS) \
- $(LINK_GIOSHARP) \
- $(LINK_UNIQUESHARP) \
- -r:System.Data \
- -r:System.Web \
- -r:Mono.Data.SqliteClient \
- -r:Mono.Posix \
- -r:Mono.Security \
- -r:Mono.Cairo \
- -r:ICSharpCode.SharpZipLib \
- -r:FSpot.Core.dll \
- -r:FSpot.Query.dll \
- -r:FSpot.Utils.dll \
- -r:FSpot.JobScheduler.dll \
- -r:FSpot.Bling.dll \
- -r:FSpot.Widgets.dll \
- -r:FSpot.Platform.dll \
- -r:Cms.dll \
- $(NUNIT_LIBS) \
- $(NDESK_DBUS_LIBS) \
- $(GCONF_PKG) \
- $(GTKHTML_SHARP_PKG) \
- -pkg:mono-addins \
- -pkg:mono-addins-setup \
- -pkg:mono-addins-gui \
- -pkg:glade-sharp-2.0 \
- -pkg:gnome-sharp-2.0 \
- -pkg:gnome-vfs-sharp-2.0
-
-F_SPOT_DISTRESOURCES = \
- $(srcdir)/dces.rdf \
- $(srcdir)/f-spot.glade \
- $(srcdir)/ui/main_window.ui \
- $(srcdir)/UI.Dialog/ui/AdjustTimeDialog.ui \
- $(srcdir)/UI.Dialog/ui/DateRangeDialog.ui \
- $(srcdir)/UI.Dialog/ui/EditTagDialog.ui \
- $(srcdir)/UI.Dialog/ui/EditTagIconDialog.ui \
- $(srcdir)/UI.Dialog/ui/PreferenceDialog.ui \
- $(srcdir)/UI.Dialog/ui/RatingFilterDialog.ui \
- $(srcdir)/FSpot.addin.xml
-
-F_SPOT_RESOURCES = \
- $(F_SPOT_DISTRESOURCES) \
- $(top_srcdir)/COPYING \
- $(top_srcdir)/icons/f-spot-not.png \
- $(top_srcdir)/icons/f-spot-128.png \
- $(top_srcdir)/icons/flower.png
-
-RESOURCES = $(foreach res,$(F_SPOT_RESOURCES), $(addprefix -resource:,$(res)),$(notdir $(res)))
-fspotlibdir = $(libdir)/f-spot
-fspotlib_DATA = f-spot.exe.config \
- f-spot.exe \
- f-spot.exe.mdb \
- Cms.dll.config \
- Cms.dll \
- Cms.dll.mdb \
- FSpot.Utils.dll \
- FSpot.Utils.dll.mdb \
- FSpot.Utils.dll.config \
- FSpot.Query.dll \
- FSpot.Query.dll.mdb \
- FSpot.Core.dll \
- FSpot.Core.dll.mdb \
- FSpot.JobScheduler.dll \
- FSpot.JobScheduler.dll.mdb \
- FSpot.Bling.dll \
- FSpot.Bling.dll.mdb \
- FSpot.Widgets.dll \
- FSpot.Widgets.dll.mdb \
- FSpot.Widgets.dll.config\
- FSpot.Platform.dll \
- FSpot.Platform.dll.mdb
-
+DIR_BIN = $(top_builddir)/bin
+
+# External libraries to link against, generated from configure
+LINK_SYSTEM = -r:System
+LINK_SYSTEMDATA = -r:System.Data
+LINK_SYSTEM_WEB = -r:System.Web
+LINK_MONO_POSIX = -r:Mono.Posix
+LINK_MONO_CAIRO = -r:Mono.Cairo
+LINK_MONO_SIMD = -r:Mono.Simd
+LINK_MONODATA = -r:Mono.Data
+LINK_MONO_DATA_SQLITECLIENT = -r:Mono.Data.SqliteClient
+LINK_ICSHARP_ZIP_LIB = -r:ICSharpCode.SharpZipLib
+LINK_KEYRING = $(KEYRINGSHARP_LIBS)
+LINK_GLIB = $(GLIBSHARP_LIBS)
+LINK_GTK = $(GTKSHARP_LIBS)
+LINK_GNOME = $(GNOME_SHARP_LIBS)
+LINK_GCONF = $(GCONF_SHARP_LIBS)
+LINK_GLADE = -pkg:glade-sharp-2.0
+LINK_FLICKRNET = -pkg:flickrnet
+LINK_DBUS = $(NDESK_DBUS_LIBS) $(NDESK_DBUS_GLIB_LIBS)
+LINK_DBUS_NO_GLIB = $(NDESK_DBUS_LIBS)
+LINK_MONO_ADDINS_DEPS = $(MONO_ADDINS_LIBS)
+LINK_MONO_ADDINS_SETUP_DEPS = $(MONO_ADDINS_SETUP_LIBS)
+LINK_MONO_ADDINS_GUI_DEPS = $(MONO_ADDINS_GUI_LIBS)
+
+# GIO
+REF_GIO =
+LINK_GIO = -r:$(DIR_GIOSHARP)/gio-sharp.dll
+LINK_GIO_DEPS = $(REF_GIO) $(LINK_GIO)
+
+# Gtk Beans
+REF_GTK_BEANS = $(LINK_GIO_DEPS)
+LINK_GTK_BEANS = -r:$(DIR_GTKSHARPBEANS)/gtk-sharp-beans.dll
+LINK_GTK_BEANS_DEPS = $(REF_GTK_BEANS) $(LINK_GTK_BEANS)
+
+# Uniqe
+REF_UNIQUE =
+LINK_UNIQUE = -r:$(DIR_UNIQUESHARP)/unique-sharp.dll
+LINK_UNIQUE_DEPS = $(REF_UNIQUE) $(LINK_UNIQUE)
+
+# Hyena
+REF_HYENA = $(LINK_SYSTEM) $(LINK_MONO_POSIX)
+LINK_HYENA = -r:$(DIR_BIN)/Hyena.dll
+LINK_HYENA_DEPS = $(REF_HYENA) $(LINK_HYENA)
+
+# Semweb
+REF_SEMWEB = $(LINK_SYSTEMDATA) $(LINK_HYENA_DEPS)
+LINK_SEMWEB = -r:$(DIR_BIN)/SemWeb.dll
+LINK_SEMWEB_DEPS = $(REF_SEMWEB) $(LINK_SEMWEB)
+
+# Hyena.Data.Sqlite
+REF_HYENA_DATA_SQLITE = $(LINK_SQLITE)
+LINK_HYENA_DATA_SQLITE = -r:$(DIR_BIN)/Hyena.Data.Sqlite.dll
+LINK_HYENA_DATA_SQLITE_DEPS = $(REF_HYENA_DATA_SQLITE) $(LINK_HYENA_DATA_SQLITE)
+
+# Hyena.Gui
+REF_HYENA_GUI = $(LINK_HYENA_DEPS)
+LINK_HYENA_GUI = -r:$(DIR_BIN)/Hyena.Gui.dll
+LINK_HENA_GUI_DEPS = $(REF_HYENA_GUI) $(LINK_HYENA_GUI)
+
+# FSpot.Cms
+REF_FSPOT_CMS = $(LINK_GTK)
+LINK_FSPOT_CMS = -r:$(DIR_BIN)/FSpot.Cms.dll
+LINK_FSPOT_CMS_DEPS = $(REF_FSPOT_CMS) $(LINK_FSPOT_CMS)
+
+# FSpot.Utils
+REF_FSPOT_UTILS = $(LINK_HYENA_DEPS) $(LINK_GTK) $(LINK_GIO) $(LINK_MONO_CAIRO)
+LINK_FSPOT_UTILS = -r:$(DIR_BIN)/FSpot.Utils.dll
+LINK_FSPOT_UTILS_DEPS = $(REF_FSPOT_UTILS) $(LINK_FSPOT_UTILS)
+
+# FSpot.Core
+REF_FSPOT_CORE = $(LINK_FSPOT_UTILS_DEPS) $(LINK_FSPOT_CMS_DEPS)
+LINK_FSPOT_CORE = -r:$(DIR_BIN)/FSpot.Core.dll
+LINK_FSPOT_CORE_DEPS = $(REF_FSPOT_CORE) $(LINK_FSPOT_CORE)
+
+# FSpot.Query
+REF_FSPOT_QUERY = $(LINK_FSPOT_CORE_DEPS)
+LINK_FSPOT_QUERY = -r:$(DIR_BIN)/FSpot.Query.dll
+LINK_FSPOT_QUERY_DEPS = $(REF_FSPOT_QUERY) $(LINK_FSPOT_QUERY)
+
+# FSpot.JobScheduler
+REF_FSPOT_JOB_SCHEDULER = $(LINK_HYENA_DEPS)
+LINK_FSPOT_JOB_SCHEDULER = -r:$(DIR_BIN)/FSpot.JobScheduler.dll
+LINK_FSPOT_JOB_SCHEDULER_DEPS = $(REF_FSPOT_JOB_SCHEDULER) $(LINK_FSPOT_JOB_SCHEDULER)
+
+# FSpot.Bling
+REF_FSPOT_BLING = $(LINK_GTK_BEANS_DEPS) $(LINK_GLIB)
+LINK_FSPOT_BLING = -r:$(DIR_BIN)/FSpot.Bling.dll
+LINK_FSPOT_BLING_DEPS = $(REF_FSPOT_BLING) $(LINK_FSPOT_BLING)
+
+# FSpot.Platform
+REF_FSPOT_PLATFORM = $(LINK_GCONF) $(LINK_GTK) $(LINK_FSPOT_CORE_DEPS) $(LINK_DBUS)
+LINK_FSPOT_PLATFORM = -r:$(DIR_BIN)/FSpot.Platform.dll
+LINK_FSPOT_PLATFORM_DEPS = $(REF_FSPOT_PLATFORM) $(LINK_FSPOT_PLATFORM)
+
+# FSpot.Widgets
+REF_FSPOT_WIDGETS = $(LINK_FSPOT_CORE_DEPS) $(LINK_FSPOT_BLING_DEPS)
+LINK_FSPOT_WIDGETS = -r:$(DIR_BIN)/FSpot.Widgets.dll
+LINK_FSPOT_WIDGETS_DEPS = $(REF_FSPOT_WIDGETS) $(LINK_FSPOT_WIDGETS)
+
+# FSpot (executable)
+REF_FSPOT = $(LINK_FSPOT_WIDGETS_DEPS) $(LINK_FSPOT_PLATFORM_DEPS) $(LINK_FSPOT_QUERY_DEPS) \
+ $(LINK_GLIB) $(LINK_MONO_ADDINS_DEPS) $(LINK_UNIQUE_DEPS) $(LINK_MONO_ADDINS_SETUP_DEPS) \
+ $(LINK_SEMWEB_DEPS) $(LINK_GLADE) $(LINK_MONODATA) $(LINK_MONO_DATA_SQLITECLIENT) \
+ $(LINK_MONO_ADDINS_GUI_DEPS) $(LINK_FSPOT_JOB_SCHEDULER_DEPS) $(LINK_ICSHARP_ZIP_LIB) \
+ $(LINK_GNOME)
+
+# FIXME: do not link executables
+LINK_FSPOT = -r:$(DIR_BIN)/f-spot.exe
+LINK_FSPOT_DEPS = $(REF_FSPOT) $(LINK_FSPOT)
+
+# Extensions
+REF_FSPOT_EXTENSION_BLACKOUTEDITOR = $(LINK_FSPOT_DEPS)
+REF_FSPOT_EXTENSION_BWEDITOR = $(LINK_FSPOT_DEPS) $(LINK_MONO_SIMD)
+REF_FSPOT_EXTENSION_FLIPEDITOR = $(LINK_FSPOT_DEPS)
+REF_FSPOT_EXTENSION_PIXELATEEDITOR = $(LINK_FSPOT_DEPS)
+REF_FSPOT_EXTENSION_RESIZEEDITOR = $(LINK_FSPOT_DEPS)
+REF_FSPOT_EXTENSION_CDEXPORT = $(LINK_FSPOT_DEPS)
+REF_FSPOT_EXTENSION_FACEBOOKEXPORT = $(LINK_FSPOT_DEPS) $(LINK_KEYRING)
+REF_FSPOT_EXTENSION_FLICKREXPORT = $(LINK_FSPOT_DEPS) $(LINK_FLICKRNET)
+REF_FSPOT_EXTENSION_FOLDEREXPORT = $(LINK_FSPOT_DEPS) $(LINK_SYSTEM_WEB)
+REF_FSPOT_EXTENSION_GALLERYEXPORT = $(LINK_FSPOT_DEPS)
+REF_MONO_GOOGLE = $(LINK_HYENA_DEPS)
+LINK_MONO_GOOGLE = -r:$(DIR_BIN)/Mono.Google.dll
+LINK_MONO_GOOGLE_DEPS = $(REF_MONO_GOOGLE) $(LINK_MONO_GOOGLE)
+REF_FSPOT_EXTENSION_PICASAWEBEXPORT = $(LINK_FSPOT_DEPS) $(LINK_MONO_GOOGLE) $(LINK_KEYRING)
+REF_SMUGMUGNET = $(LINK_FSPOT_DEPS)
+LINK_SMUGMUGNET = -r:$(DIR_BIN)/SmugMugNet.dll
+LINK_SMUGMUGNET_DEPS = $(REF_SMUGMUGNET) $(LINK_SMUGMUGNET)
+REF_FSPOT_EXTENSION_SMUGMUGEXPORT = $(LINK_SMUGMUGNET_DEPS) $(LINK_KEYRING)
+REF_MONO_TABBLO = $(LINK_HYENA_DEPS)
+LINK_MONO_TABBLO = -r:$(DIR_BIN)/Mono.Tabblo.dll
+LINK_MONO_TABBLO_DEPS = $(REF_MONO_TABBLO) $(LINK_MONO_TABBLO)
+REF_FSPOT_EXTENSION_TABBLOEXPORT = $(LINK_FSPOT_DEPS) $(LINK_KEYRING) $(LINK_MONO_TABBLO_DEPS)
+REF_FSPOT_EXTENSION_ZIPEXPORT = $(LINK_FSPOT_DEPS)
+REF_FSPOT_EXTENSION_CHANGEPHOTOPATH = $(LINK_FSPOT_DEPS)
+REF_FSPOT_EXTENSION_DEVELOPINUFRAW = $(LINK_FSPOT_DEPS)
+REF_FSPOT_EXTENSION_HASHJOB = $(LINK_FSPOT_DEPS)
+REF_FSPOT_EXTENSION_LIVEWEBGALLERY = $(LINK_FSPOT_DEPS)
+REF_FSPOT_EXTENSION_MERGEDB = $(LINK_FSPOT_DEPS)
+REF_FSPOT_EXTENSION_RAWPLUSJPEG = $(LINK_FSPOT_DEPS)
+REF_FSPOT_EXTENSION_RETROACTIVEROLL = $(LINK_FSPOT_DEPS)
+REF_FSPOT_EXTENSION_SCREENSAVERCONFIG = $(LINK_FSPOT_DEPS)
+REF_FSPOT_EXTENSION_COVERTRANSITION = $(LINK_FSPOT_DEPS)
+
+# Cute hack to replace a space with something
+colon := :
+empty :=
+space := $(empty) $(empty)
+
+# Build path to allow running uninstalled
+RUN_PATH = $(subst $(space),$(colon), $(MONO_BASE_PATH))
+UNIQUE_FILTER_PIPE = tr [:space:] \\n | sort | uniq
+BUILD_DATA_DIR = $(top_builddir)/bin/share/$(PACKAGE)
+
+# Since all other attempts failed, we currently go this way:
+# This code adds the file specified in ASSEMBLY_INFO_SOURCE to SOURCES_BUILD.
+# If no such file is specified, the default AssemblyInfo.cs is used.
+ASSEMBLY_INFO_SOURCE_REAL = \
+ $(shell if [ "$(ASSEMBLY_INFO_SOURCE)" ]; \
+ then \
+ echo "$(addprefix $(srcdir)/, $(ASSEMBLY_INFO_SOURCE))"; \
+ else \
+ echo "$(top_srcdir)/src/AssemblyInfo.cs"; \
+ fi)
+
+SOURCES_BUILD = $(addprefix $(srcdir)/, $(SOURCES)) \
+ $(ASSEMBLY_INFO_SOURCE_REAL)
+RESOURCES_EXPANDED = $(addprefix $(srcdir)/, $(RESOURCES))
+RESOURCES_BUILD = $(foreach resource, $(RESOURCES_EXPANDED), \
+ -resource:$(resource),$(notdir $(resource)))
+
+INSTALL_ICONS = $(top_srcdir)/build/private-icon-theme-installer "$(mkinstalldirs)" "$(INSTALL_DATA)"
+THEME_ICONS_SOURCE = $(wildcard $(srcdir)/ThemeIcons/*/*/*.png) $(wildcard $(srcdir)/ThemeIcons/scalable/*/*.svg)
+THEME_ICONS_RELATIVE = $(subst $(srcdir)/ThemeIcons/, , $(THEME_ICONS_SOURCE))
+ASSEMBLY_EXTENSION = $(strip $(patsubst library, dll, $(TARGET)))
+ASSEMBLY_FILE = $(top_builddir)/bin/$(ASSEMBLY).$(ASSEMBLY_EXTENSION)
+INSTALL_DIR_RESOLVED = $(firstword $(subst , $(DEFAULT_INSTALL_DIR), $(INSTALL_DIR)))
+ at ENABLE_TESTS_TRUE@ENABLE_TESTS_FLAG = "-define:ENABLE_TESTS"
+ at ENABLE_ATK_TRUE@ENABLE_ATK_FLAG = "-define:ENABLE_ATK"
+FILTERED_LINK = $(shell echo "$(LINK)" | $(UNIQUE_FILTER_PIPE))
+DEP_LINK = $(shell echo "$(LINK)" | $(UNIQUE_FILTER_PIPE) | sed s,-r:,,g | grep '$(top_builddir)/bin/')
+OUTPUT_FILES = \
+ $(ASSEMBLY_FILE) \
+ $(ASSEMBLY_FILE).mdb
+
+moduledir = $(INSTALL_DIR_RESOLVED)
+module_SCRIPTS = $(OUTPUT_FILES) f-spot.exe.config
+EXTRA_DIST = $(SOURCES_BUILD) $(RESOURCES_EXPANDED) \
+ $(THEME_ICONS_SOURCE) f-spot.exe.config
+CLEANFILES = $(OUTPUT_FILES) $(ASSEMBLY_FILE).config
+DISTCLEANFILES = *.pidb
+MAINTAINERCLEANFILES = Makefile.in
bin_SCRIPTS = f-spot
-CMS_CSFILES = $(CMS_CSDISTFILES)
-CORE_CSFILES = $(CORE_CSDISTFILES) \
- Core/Defines.cs
-
-QUERY_CSFILES = $(QUERY_CSDISTFILES)
-UTILS_CSFILES = $(UTILS_CSDISTFILES)
-JOBSCHEDULER_CSFILES = $(JOBSCHEDULER_CSDISTFILES)
-BLING_CSFILES = $(BLING_CSDISTFILES)
-WIDGETS_CSFILES = $(WIDGETS_CSDISTFILES)
-GNOME_PLATFORM_CSFILES = $(GNOME_PLATFORM_CSDISTFILES)
-NULL_PLATFORM_CSFILES = $(NULL_PLATFROM_CSDISTFILES)
-F_SPOT_CSFILES = $(F_SPOT_CSDISTFILES) \
- AssemblyInfo.cs
-
-PLATFORM_CSFILES = $(GNOME_PLATFORM_CSFILES)
-PLATFORM_ASSEMBLIES = $(GNOME_PLATFORM_ASSEMBLIES)
-EXTRA_DIST = \
- $(UTILS_CSDISTFILES) \
- $(CMS_CSDISTFILES) \
- $(CORE_CSDISTFILES) \
- $(QUERY_CSDISTFILES) \
- $(JOBSCHEDULER_CSDISTFILES) \
- $(BLING_CSDISTFILES) \
- $(WIDGETS_CSDISTFILES) \
- $(GNOME_PLATFORM_CSDISTFILES) \
- $(NULL_PLATFORM_CSDISTFILES) \
- $(F_SPOT_CSDISTFILES) \
- $(F_SPOT_DISTRESOURCES) \
- f-spot.exe.config.in \
- f-spot.in \
- FSpot.Utils.dll.config \
- FSpot.Widgets.dll.config.in \
- Cms.dll.config.in
-
-CLEANFILES = \
- f-spot.exe.config \
- f-spot.exe.mdb \
- f-spot.exe \
- f-spot \
- Cms.dll.mdb \
- Cms.dll \
- FSpot.Utils.dll.mdb \
- FSpot.Utils.dll \
- FSpot.Query.dll \
- FSpot.Query.dll.mdb \
- FSpot.Core.dll.mdb \
- FSpot.Core.dll \
- FSpot.JobScheduler.dll \
- FSpot.JobScheduler.dll.mdb \
- FSpot.Bling.dll.mdb \
- FSpot.Bling.dll \
- FSpot.Widgets.dll \
- FSpot.Widgets.dll.mdb \
- FSpot.Widgets.dll.config \
- FSpot.Platform.dll \
- FSpot.Platform.dll.mdb \
- Cms.dll.config
-
-DISTCLEANFILES = \
- Makefile
-
-all: all-am
+all: all-recursive
.SUFFIXES:
-$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(top_srcdir)/Makefile.include $(am__configure_deps)
+$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(top_srcdir)/build/build.mk $(top_srcdir)/build/build.environment.mk $(top_srcdir)/build/build.rules.mk $(am__configure_deps)
@for dep in $?; do \
case '$(am__configure_deps)' in \
*$$dep*) \
@@ -867,10 +827,6 @@ AssemblyInfo.cs: $(top_builddir)/config.status $(srcdir)/AssemblyInfo.cs.in
cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@
f-spot.exe.config: $(top_builddir)/config.status $(srcdir)/f-spot.exe.config.in
cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@
-Cms.dll.config: $(top_builddir)/config.status $(srcdir)/Cms.dll.config.in
- cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@
-FSpot.Widgets.dll.config: $(top_builddir)/config.status $(srcdir)/FSpot.Widgets.dll.config.in
- cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@
install-binSCRIPTS: $(bin_SCRIPTS)
@$(NORMAL_INSTALL)
test -z "$(bindir)" || $(MKDIR_P) "$(DESTDIR)$(bindir)"
@@ -905,38 +861,181 @@ uninstall-binSCRIPTS:
test -n "$$list" || exit 0; \
echo " ( cd '$(DESTDIR)$(bindir)' && rm -f" $$files ")"; \
cd "$(DESTDIR)$(bindir)" && rm -f $$files
+install-moduleSCRIPTS: $(module_SCRIPTS)
+ @$(NORMAL_INSTALL)
+ test -z "$(moduledir)" || $(MKDIR_P) "$(DESTDIR)$(moduledir)"
+ @list='$(module_SCRIPTS)'; test -n "$(moduledir)" || list=; \
+ for p in $$list; do \
+ if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \
+ if test -f "$$d$$p"; then echo "$$d$$p"; echo "$$p"; else :; fi; \
+ done | \
+ sed -e 'p;s,.*/,,;n' \
+ -e 'h;s|.*|.|' \
+ -e 'p;x;s,.*/,,;$(transform)' | sed 'N;N;N;s,\n, ,g' | \
+ $(AWK) 'BEGIN { files["."] = ""; dirs["."] = 1; } \
+ { d=$$3; if (dirs[d] != 1) { print "d", d; dirs[d] = 1 } \
+ if ($$2 == $$4) { files[d] = files[d] " " $$1; \
+ if (++n[d] == $(am__install_max)) { \
+ print "f", d, files[d]; n[d] = 0; files[d] = "" } } \
+ else { print "f", d "/" $$4, $$1 } } \
+ END { for (d in files) print "f", d, files[d] }' | \
+ while read type dir files; do \
+ if test "$$dir" = .; then dir=; else dir=/$$dir; fi; \
+ test -z "$$files" || { \
+ echo " $(INSTALL_SCRIPT) $$files '$(DESTDIR)$(moduledir)$$dir'"; \
+ $(INSTALL_SCRIPT) $$files "$(DESTDIR)$(moduledir)$$dir" || exit $$?; \
+ } \
+ ; done
+
+uninstall-moduleSCRIPTS:
+ @$(NORMAL_UNINSTALL)
+ @list='$(module_SCRIPTS)'; test -n "$(moduledir)" || exit 0; \
+ files=`for p in $$list; do echo "$$p"; done | \
+ sed -e 's,.*/,,;$(transform)'`; \
+ test -n "$$list" || exit 0; \
+ echo " ( cd '$(DESTDIR)$(moduledir)' && rm -f" $$files ")"; \
+ cd "$(DESTDIR)$(moduledir)" && rm -f $$files
mostlyclean-libtool:
-rm -f *.lo
clean-libtool:
-rm -rf .libs _libs
-install-fspotlibDATA: $(fspotlib_DATA)
- @$(NORMAL_INSTALL)
- test -z "$(fspotlibdir)" || $(MKDIR_P) "$(DESTDIR)$(fspotlibdir)"
- @list='$(fspotlib_DATA)'; test -n "$(fspotlibdir)" || list=; \
- for p in $$list; do \
- if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \
- echo "$$d$$p"; \
- done | $(am__base_list) | \
- while read files; do \
- echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(fspotlibdir)'"; \
- $(INSTALL_DATA) $$files "$(DESTDIR)$(fspotlibdir)" || exit $$?; \
+
+# 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,
+# (1) if the variable is set in `config.status', edit `config.status'
+# (which will cause the Makefiles to be regenerated when you run `make');
+# (2) otherwise, pass the desired values on the `make' command line.
+$(RECURSIVE_TARGETS):
+ @fail= failcom='exit 1'; \
+ for f in x $$MAKEFLAGS; do \
+ case $$f in \
+ *=* | --[!k]*);; \
+ *k*) failcom='fail=yes';; \
+ esac; \
+ done; \
+ dot_seen=no; \
+ target=`echo $@ | sed s/-recursive//`; \
+ list='$(SUBDIRS)'; for subdir in $$list; do \
+ echo "Making $$target in $$subdir"; \
+ if test "$$subdir" = "."; then \
+ dot_seen=yes; \
+ local_target="$$target-am"; \
+ else \
+ local_target="$$target"; \
+ fi; \
+ ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \
+ || eval $$failcom; \
+ done; \
+ if test "$$dot_seen" = "no"; then \
+ $(MAKE) $(AM_MAKEFLAGS) "$$target-am" || exit 1; \
+ fi; test -z "$$fail"
+
+$(RECURSIVE_CLEAN_TARGETS):
+ @fail= failcom='exit 1'; \
+ for f in x $$MAKEFLAGS; do \
+ case $$f in \
+ *=* | --[!k]*);; \
+ *k*) failcom='fail=yes';; \
+ esac; \
+ done; \
+ dot_seen=no; \
+ case "$@" in \
+ distclean-* | maintainer-clean-*) list='$(DIST_SUBDIRS)' ;; \
+ *) list='$(SUBDIRS)' ;; \
+ esac; \
+ rev=''; for subdir in $$list; do \
+ if test "$$subdir" = "."; then :; else \
+ rev="$$subdir $$rev"; \
+ fi; \
+ done; \
+ rev="$$rev ."; \
+ target=`echo $@ | sed s/-recursive//`; \
+ for subdir in $$rev; do \
+ echo "Making $$target in $$subdir"; \
+ if test "$$subdir" = "."; then \
+ local_target="$$target-am"; \
+ else \
+ local_target="$$target"; \
+ fi; \
+ ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \
+ || eval $$failcom; \
+ done && test -z "$$fail"
+tags-recursive:
+ list='$(SUBDIRS)'; for subdir in $$list; do \
+ test "$$subdir" = . || ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) tags); \
+ done
+ctags-recursive:
+ list='$(SUBDIRS)'; for subdir in $$list; do \
+ test "$$subdir" = . || ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) ctags); \
done
-uninstall-fspotlibDATA:
- @$(NORMAL_UNINSTALL)
- @list='$(fspotlib_DATA)'; test -n "$(fspotlibdir)" || list=; \
- files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \
- test -n "$$files" || exit 0; \
- echo " ( cd '$(DESTDIR)$(fspotlibdir)' && rm -f" $$files ")"; \
- cd "$(DESTDIR)$(fspotlibdir)" && rm -f $$files
+ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES)
+ list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
+ unique=`for i in $$list; do \
+ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+ done | \
+ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
+ END { if (nonempty) { for (i in files) print i; }; }'`; \
+ mkid -fID $$unique
tags: TAGS
-TAGS:
+TAGS: tags-recursive $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \
+ $(TAGS_FILES) $(LISP)
+ set x; \
+ here=`pwd`; \
+ if ($(ETAGS) --etags-include --version) >/dev/null 2>&1; then \
+ include_option=--etags-include; \
+ empty_fix=.; \
+ else \
+ include_option=--include; \
+ empty_fix=; \
+ fi; \
+ list='$(SUBDIRS)'; for subdir in $$list; do \
+ if test "$$subdir" = .; then :; else \
+ test ! -f $$subdir/TAGS || \
+ set "$$@" "$$include_option=$$here/$$subdir/TAGS"; \
+ fi; \
+ done; \
+ list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
+ unique=`for i in $$list; do \
+ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+ done | \
+ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
+ END { if (nonempty) { for (i in files) print i; }; }'`; \
+ shift; \
+ if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \
+ test -n "$$unique" || unique=$$empty_fix; \
+ if test $$# -gt 0; then \
+ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
+ "$$@" $$unique; \
+ else \
+ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
+ $$unique; \
+ fi; \
+ fi
ctags: CTAGS
-CTAGS:
-
+CTAGS: ctags-recursive $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \
+ $(TAGS_FILES) $(LISP)
+ list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
+ unique=`for i in $$list; do \
+ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+ done | \
+ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
+ END { if (nonempty) { for (i in files) print i; }; }'`; \
+ test -z "$(CTAGS_ARGS)$$unique" \
+ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \
+ $$unique
+
+GTAGS:
+ here=`$(am__cd) $(top_builddir) && pwd` \
+ && $(am__cd) $(top_srcdir) \
+ && gtags -i $(GTAGS_ARGS) "$$here"
+
+distclean-tags:
+ -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags
distdir: $(DISTFILES)
@srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
@@ -968,22 +1067,51 @@ distdir: $(DISTFILES)
|| exit 1; \
fi; \
done
+ @list='$(DIST_SUBDIRS)'; for subdir in $$list; do \
+ if test "$$subdir" = .; then :; else \
+ test -d "$(distdir)/$$subdir" \
+ || $(MKDIR_P) "$(distdir)/$$subdir" \
+ || exit 1; \
+ fi; \
+ done
+ @list='$(DIST_SUBDIRS)'; for subdir in $$list; do \
+ if test "$$subdir" = .; then :; else \
+ dir1=$$subdir; dir2="$(distdir)/$$subdir"; \
+ $(am__relativize); \
+ new_distdir=$$reldir; \
+ dir1=$$subdir; dir2="$(top_distdir)"; \
+ $(am__relativize); \
+ new_top_distdir=$$reldir; \
+ echo " (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) top_distdir="$$new_top_distdir" distdir="$$new_distdir" \\"; \
+ echo " am__remove_distdir=: am__skip_length_check=: am__skip_mode_fix=: distdir)"; \
+ ($(am__cd) $$subdir && \
+ $(MAKE) $(AM_MAKEFLAGS) \
+ top_distdir="$$new_top_distdir" \
+ distdir="$$new_distdir" \
+ am__remove_distdir=: \
+ am__skip_length_check=: \
+ am__skip_mode_fix=: \
+ distdir) \
+ || exit 1; \
+ fi; \
+ done
check-am: all-am
-check: check-am
-all-am: Makefile $(SCRIPTS) $(DATA)
-installdirs:
- for dir in "$(DESTDIR)$(bindir)" "$(DESTDIR)$(fspotlibdir)"; do \
+check: check-recursive
+all-am: Makefile $(SCRIPTS)
+installdirs: installdirs-recursive
+installdirs-am:
+ for dir in "$(DESTDIR)$(bindir)" "$(DESTDIR)$(moduledir)"; do \
test -z "$$dir" || $(MKDIR_P) "$$dir"; \
done
-install: install-am
-install-exec: install-exec-am
-install-data: install-data-am
-uninstall: uninstall-am
+install: install-recursive
+install-exec: install-exec-recursive
+install-data: install-data-recursive
+uninstall: uninstall-recursive
install-am: all-am
@$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
-installcheck: installcheck-am
+installcheck: installcheck-recursive
install-strip:
$(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
@@ -1002,148 +1130,142 @@ distclean-generic:
maintainer-clean-generic:
@echo "This command is intended for maintainers to use"
@echo "it deletes files that may require special tools to rebuild."
-clean: clean-am
+ -test -z "$(MAINTAINERCLEANFILES)" || rm -f $(MAINTAINERCLEANFILES)
+clean: clean-recursive
clean-am: clean-generic clean-libtool mostlyclean-am
-distclean: distclean-am
+distclean: distclean-recursive
-rm -f Makefile
-distclean-am: clean-am distclean-generic
+distclean-am: clean-am distclean-generic distclean-tags
-dvi: dvi-am
+dvi: dvi-recursive
dvi-am:
-html: html-am
+html: html-recursive
html-am:
-info: info-am
+info: info-recursive
info-am:
-install-data-am: install-fspotlibDATA
+install-data-am: install-data-local install-moduleSCRIPTS
-install-dvi: install-dvi-am
+install-dvi: install-dvi-recursive
install-dvi-am:
install-exec-am: install-binSCRIPTS
-install-html: install-html-am
+install-html: install-html-recursive
install-html-am:
-install-info: install-info-am
+install-info: install-info-recursive
install-info-am:
install-man:
-install-pdf: install-pdf-am
+install-pdf: install-pdf-recursive
install-pdf-am:
-install-ps: install-ps-am
+install-ps: install-ps-recursive
install-ps-am:
installcheck-am:
-maintainer-clean: maintainer-clean-am
+maintainer-clean: maintainer-clean-recursive
-rm -f Makefile
maintainer-clean-am: distclean-am maintainer-clean-generic
-mostlyclean: mostlyclean-am
+mostlyclean: mostlyclean-recursive
mostlyclean-am: mostlyclean-generic mostlyclean-libtool
-pdf: pdf-am
+pdf: pdf-recursive
pdf-am:
-ps: ps-am
+ps: ps-recursive
ps-am:
-uninstall-am: uninstall-binSCRIPTS uninstall-fspotlibDATA
-
-.MAKE: install-am install-strip
-
-.PHONY: all all-am check check-am clean clean-generic clean-libtool \
- distclean distclean-generic distclean-libtool distdir dvi \
- dvi-am html html-am info info-am install install-am \
- install-binSCRIPTS install-data install-data-am install-dvi \
- install-dvi-am install-exec install-exec-am \
- install-fspotlibDATA 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 \
+uninstall-am: uninstall-binSCRIPTS uninstall-local \
+ uninstall-moduleSCRIPTS
+
+.MAKE: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) ctags-recursive \
+ install-am install-strip tags-recursive
+
+.PHONY: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) CTAGS GTAGS \
+ all all-am check check-am clean clean-generic clean-libtool \
+ ctags ctags-recursive distclean distclean-generic \
+ distclean-libtool distclean-tags distdir dvi dvi-am html \
+ html-am info info-am install install-am install-binSCRIPTS \
+ install-data install-data-am install-data-local install-dvi \
+ install-dvi-am install-exec install-exec-am install-html \
+ install-html-am install-info install-info-am install-man \
+ install-moduleSCRIPTS 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-generic \
- mostlyclean-libtool pdf pdf-am ps ps-am uninstall uninstall-am \
- uninstall-binSCRIPTS uninstall-fspotlibDATA
-
-
-Cms.dll.mdb: Cms.dll
-
-Cms.dll: $(CMS_CSFILES)
- @echo -e "\n*** Compiling $@"
- $(CSC_LIB) -out:$@ $(EXTRAFLAGS) $(UNSAFE) $(CMS_CSFILES) $(CMS_ASSEMBLIES)
-
-FSpot.Core.dll.mdb: FSpot.Core.dll
-
-FSpot.Core.dll: $(CORE_CSFILES) FSpot.Utils.dll Cms.dll
- @echo -e "\n*** Compiling $@"
- $(CSC_LIB) -out:$@ $(EXTRAFLAGS) $(CORE_CSFILES) $(CORE_ASSEMBLIES)
-
-FSpot.Query.dll.mdb: FSpot.Query.dll
-
-FSpot.Query.dll: $(QUERY_CSFILES) FSpot.Utils.dll FSpot.Core.dll
- @echo -e "\n*** Compiling $@"
- $(CSC_LIB) -out:$@ $(EXTRAFLAGS) $(QUERY_CSFILES) $(QUERY_ASSEMBLIES)
-
-FSpot.Utils.dll.mdb: FSpot.Utils.dll
-
-FSpot.Utils.dll: $(UTILS_CSFILES)
- @echo -e "\n*** Compiling $@"
- $(CSC_LIB) -out:$@ $(EXTRAFLAGS) $(UTILS_CSFILES) $(UTILS_ASSEMBLIES)
-
-FSpot.JobScheduler.dll.mdb: FSpot.JobScheduler.dll
-
-FSpot.JobScheduler.dll: $(JOBSCHEDULER_CSFILES) FSpot.Utils.dll
- @echo -e "\n*** Compiling $@"
- $(CSC_LIB) -out:$@ $(EXTRAFLAGS) $(JOBSCHEDULER_CSFILES) $(JOBSCHEDULER_ASSEMBLIES)
-
-FSpot.Bling.dll.mdb: FSpot.Bling.dll
-
-FSpot.Bling.dll: $(BLING_CSFILES)
- @echo -e "\n*** Compiling $@"
- $(CSC_LIB) -out:$@ $(EXTRAFLAGS) $(BLING_CSFILES) $(BLING_ASSEMBLIES)
-
-FSpot.Widgets.dll.mdb: FSpot.Widgets.dll
-
-FSpot.Widgets.dll: $(WIDGETS_CSFILES) FSpot.Utils.dll FSpot.Core.dll Cms.dll
- @echo -e "\n*** Compiling $@"
- $(CSC_LIB) -out:$@ $(EXTRAFLAGS) $(WIDGETS_CSFILES) $(WIDGETS_ASSEMBLIES)
-
-FSpot.Platform.dll.mdb: FSpot.Platform.dll
-
-FSpot.Platform.dll: $(PLATFORM_CSFILES) FSpot.Utils.dll
- @echo -e "\n*** Compiling $@"
- $(CSC_LIB) -out:$@ $(EXTRAFLAGS) $(PLATFORM_CSFILES) $(PLATFORM_ASSEMBLIES)
-
-f-spot.exe.mdb: f-spot.exe
-
-f-spot.exe: $(F_SPOT_CSFILES) FSpot.Utils.dll FSpot.Core.dll FSpot.Query.dll FSpot.JobScheduler.dll FSpot.Bling.dll FSpot.Widgets.dll Cms.dll FSpot.Platform.dll $(F_SPOT_RESOURCES)
- @echo -e "\n*** Compiling $@"
- $(CSC) -target:winexe -out:$@ $(EXTRAFLAGS) $(UNSAFE) $(NOWARN) $(NUNIT_DEFINES) $(F_SPOT_CSFILES) $(F_SPOT_ASSEMBLIES) $(RESOURCES)
-
-all: f-spot.exe
-
- at ENABLE_TESTS_TRUE@test:
- at ENABLE_TESTS_TRUE@ @pushd $(top_srcdir)/tests/src/; \
- at ENABLE_TESTS_TRUE@ make test; \
- at ENABLE_TESTS_TRUE@ popd;
+ mostlyclean-libtool pdf pdf-am ps ps-am tags tags-recursive \
+ uninstall uninstall-am uninstall-binSCRIPTS uninstall-local \
+ uninstall-moduleSCRIPTS
+
+
+all: $(ASSEMBLY_FILE) theme-icons
+
+run:
+ @pushd $(top_builddir); \
+ make run; \
+ popd;
+
+# uncommented for now.
+# tests are currently excuted from Makefile in $(top_builddir)
+#test:
+# @pushd $(top_builddir)/tests; \
+# make $(ASSEMBLY); \
+# popd;
+
+build-debug:
+ @echo $(DEP_LINK)
+
+$(ASSEMBLY_FILE).mdb: $(ASSEMBLY_FILE)
+
+$(ASSEMBLY_FILE): $(SOURCES_BUILD) $(RESOURCES_EXPANDED) $(DEP_LINK)
+ @mkdir -p $(top_builddir)/bin
+ @if [ ! "x$(ENABLE_RELEASE)" = "xyes" ]; then \
+ $(top_srcdir)/build/dll-map-makefile-verifier $(srcdir)/Makefile.am $(srcdir)/$(notdir $@.config) && \
+ $(MONO) $(top_builddir)/build/dll-map-verifier.exe $(srcdir)/$(notdir $@.config) -iwinmm -ilibbanshee -ilibbnpx11 -ilibc -ilibc.so.6 -iintl -ilibmtp.dll -ilibigemacintegration.dylib -iCFRelease $(SOURCES_BUILD); \
+ fi;
+ $(MCS) \
+ $(GMCS_FLAGS) \
+ $(ASSEMBLY_BUILD_FLAGS) \
+ -nowarn:0278 -nowarn:0078 $$warn \
+ -define:HAVE_GTK_2_10 -define:NET_2_0 \
+ -debug -target:$(TARGET) -out:$@ \
+ $(BUILD_DEFINES) $(ENABLE_TESTS_FLAG) $(ENABLE_ATK_FLAG) \
+ $(FILTERED_LINK) $(RESOURCES_BUILD) $(SOURCES_BUILD)
+ @if [ -e $(srcdir)/$(notdir $@.config) ]; then \
+ cp $(srcdir)/$(notdir $@.config) $(top_builddir)/bin; \
+ fi;
+ @if [ ! -z "$(EXTRA_BUNDLE)" ]; then \
+ cp $(EXTRA_BUNDLE) $(top_builddir)/bin; \
+ fi;
+
+theme-icons: $(THEME_ICONS_SOURCE)
+ @$(INSTALL_ICONS) -il "$(BUILD_DATA_DIR)" "$(srcdir)" $(THEME_ICONS_RELATIVE)
+
+install-data-local: $(THEME_ICONS_SOURCE)
+ @$(INSTALL_ICONS) -i "$(DESTDIR)$(pkgdatadir)" "$(srcdir)" $(THEME_ICONS_RELATIVE)
+
+uninstall-local: $(THEME_ICONS_SOURCE)
+ @$(INSTALL_ICONS) -u "$(DESTDIR)$(pkgdatadir)" "$(srcdir)" $(THEME_ICONS_RELATIVE)
# 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/MetadataStore.cs b/src/MetadataStore.cs
index 991b175..8b646f0 100644
--- a/src/MetadataStore.cs
+++ b/src/MetadataStore.cs
@@ -3,11 +3,11 @@ using SemWeb.Util;
using Mono.Unix;
using FSpot.Xmp;
using FSpot.Utils;
+using Hyena;
namespace FSpot {
internal class Description {
string predicate;
- string description;
string title;
ValueFormat formater;
@@ -146,7 +146,7 @@ namespace FSpot {
object o = System.Enum.Parse (type, obj.Value);
result = o.ToString ();
} catch (System.Exception e) {
- System.Console.WriteLine ("Value \"{2}\" not found in {0}{3}{1}", type, e, result, System.Environment.NewLine);
+ Log.WarningFormat ("Value \"{2}\" not found in {0}{3}{1}", type, e, result, System.Environment.NewLine);
}
}
/*
@@ -208,7 +208,7 @@ namespace FSpot {
if (stream != null) {
descriptions.Import (new RdfXmlReader (stream));
} else {
- System.Console.WriteLine ("Can't find resource");
+ Log.Debug ("Can't find resource");
}
}
@@ -308,7 +308,7 @@ namespace FSpot {
public static void Add (StatementSink sink, Entity subject, string predicate, string type, string [] values)
{
if (values == null) {
- System.Console.WriteLine ("{0} has no values; skipping", predicate);
+ Log.DebugFormat ("{0} has no values; skipping", predicate);
return;
}
@@ -340,7 +340,7 @@ namespace FSpot {
string predicate = stmt.Predicate.ToString ();
if (predicate.StartsWith (name))
- System.Console.WriteLine ("----------- {0}", stmt);
+ Log.DebugFormat ("----------- {0}", stmt);
return true;
}
@@ -360,7 +360,7 @@ namespace FSpot {
public void DumpNode (XPathSemWebNavigator navi, int depth)
{
do {
- System.Console.WriteLine ("node [{0}] {1} {2}", depth, navi.Name, navi.Value);
+ Log.DebugFormat ("node [{0}] {1} {2}", depth, navi.Name, navi.Value);
} while (navi.MoveToNext ());
}
diff --git a/src/PhotoArray.cs b/src/PhotoArray.cs
deleted file mode 100644
index db44e91..0000000
--- a/src/PhotoArray.cs
+++ /dev/null
@@ -1,71 +0,0 @@
-/*
- * FSpot.PhotoArray.cs
- *
- * Author(s):
- * Larry Ewing
- *
- * This is free software, See COPYING for details
- */
-
-namespace FSpot
-{
- public class PhotoArray : IBrowsableCollection {
- IBrowsableItem [] photos;
-
- public PhotoArray (IBrowsableItem [] photos)
- {
- this.photos = photos;
- }
-
- public int Count {
- get { return photos.Length; }
- }
-
- /*
- public void Add (Photo photo)
- {
- Photo [] larger = new Photo [photos.Length + 1];
- System.Array.Copy (photos, larger, photos.Length);
- larger [photos.Length] = photo;
- photos = larger;
-
- if (Changed != null)
- Changed (this);
- }
- */
-
- // IBrowsableCollection
- public IBrowsableItem [] Items {
- get { return photos; }
- }
-
- public IBrowsableItem this [int index] {
- get { return photos [index]; }
- }
-
- public int IndexOf (IBrowsableItem item)
- {
- return System.Array.IndexOf (photos, item);
- }
-
- public bool Contains (IBrowsableItem item)
- {
- return IndexOf (item) >= 0;
- }
-
- public void MarkChanged (int item, IBrowsableItemChanges changes)
- {
- if (ItemsChanged != null)
- ItemsChanged (this, new BrowsableEventArgs (item, changes));
- }
-
- public void Reload ()
- {
- if (Changed != null)
- Changed (this);
- }
-
- public event IBrowsableCollectionChangedHandler Changed;
- public event IBrowsableCollectionItemsChangedHandler ItemsChanged;
- }
-}
diff --git a/src/PhotoImageView.cs b/src/PhotoImageView.cs
index 8f24595..465420c 100644
--- a/src/PhotoImageView.cs
+++ b/src/PhotoImageView.cs
@@ -15,11 +15,15 @@ using FSpot.Editors;
using FSpot.Utils;
using FSpot.Loaders;
+using Hyena;
using Gdk;
namespace FSpot.Widgets {
public class PhotoImageView : ImageView {
#region public API
+
+ protected PhotoImageView (IntPtr raw) : base (raw) { }
+
public PhotoImageView (IBrowsableCollection query) : this (new BrowsablePointer (query, -1))
{
}
@@ -33,11 +37,10 @@ namespace FSpot.Widgets {
item.Changed += HandlePhotoItemChanged;
}
- new public BrowsablePointer Item {
+ public BrowsablePointer Item {
get { return item; }
}
- IBrowsableCollection query;
public IBrowsableCollection Query {
get { return item.Collection; }
}
@@ -166,7 +169,7 @@ namespace FSpot.Widgets {
#region loader
uint timer;
IImageLoader loader;
- void Load (Uri uri)
+ void Load (SafeUri uri)
{
timer = Log.DebugTimerStart ();
if (loader != null)
@@ -289,7 +292,7 @@ namespace FSpot.Widgets {
args.PreviousItem != null &&
Item.IsValid &&
(args.PreviousIndex != item.Index) &&
- (this.Item.Current.DefaultVersionUri == args.PreviousItem.DefaultVersionUri))
+ (this.Item.Current.DefaultVersion.Uri == args.PreviousItem.DefaultVersion.Uri))
return;
// Don't reload if the image didn't change at all.
@@ -297,19 +300,19 @@ namespace FSpot.Widgets {
!args.Changes.DataChanged &&
args.PreviousItem != null &&
Item.IsValid &&
- this.Item.Current.DefaultVersionUri == args.PreviousItem.DefaultVersionUri)
+ this.Item.Current.DefaultVersion.Uri == args.PreviousItem.DefaultVersion.Uri)
return;
// Same image, don't load it progressively
if (args != null &&
args.PreviousItem != null &&
Item.IsValid &&
- Item.Current.DefaultVersionUri == args.PreviousItem.DefaultVersionUri)
+ Item.Current.DefaultVersion.Uri == args.PreviousItem.DefaultVersion.Uri)
progressive_display = false;
try {
if (Item.IsValid)
- Load (Item.Current.DefaultVersionUri);
+ Load (Item.Current.DefaultVersion.Uri);
else
LoadErrorImage (null);
} catch (System.Exception e) {
diff --git a/src/PhotoList.cs b/src/PhotoList.cs
index 1a5296b..c66212f 100644
--- a/src/PhotoList.cs
+++ b/src/PhotoList.cs
@@ -37,6 +37,12 @@ namespace FSpot {
public int Capacity {
set { list.Capacity = value; }
}
+
+ public void AddAll (List<IBrowsableItem> photos)
+ {
+ list = photos;
+ Reload ();
+ }
public void Add (IBrowsableItem photo)
{
diff --git a/src/PhotoLoader.cs b/src/PhotoLoader.cs
index ea10ce6..9a6eedb 100644
--- a/src/PhotoLoader.cs
+++ b/src/PhotoLoader.cs
@@ -1,7 +1,7 @@
using System;
using FSpot.Platform;
-using FSpot.Utils;
+using Hyena;
namespace FSpot {
[Obsolete ("nuke or rename this")]
@@ -20,38 +20,20 @@ namespace FSpot {
static public Gdk.Pixbuf Load (IBrowsableItem item)
{
- using (ImageFile img = ImageFile.Create (item.DefaultVersionUri)) {
+ using (ImageFile img = ImageFile.Create (item.DefaultVersion.Uri)) {
Gdk.Pixbuf pixbuf = img.Load ();
- ValidateThumbnail (item, pixbuf);
return pixbuf;
}
}
static public Gdk.Pixbuf LoadAtMaxSize (IBrowsableItem item, int width, int height)
{
- using (ImageFile img = ImageFile.Create (item.DefaultVersionUri)) {
+ using (ImageFile img = ImageFile.Create (item.DefaultVersion.Uri)) {
Gdk.Pixbuf pixbuf = img.Load (width, height);
- ValidateThumbnail (item.DefaultVersionUri, pixbuf);
return pixbuf;
}
}
- static public Gdk.Pixbuf ValidateThumbnail (IBrowsableItem item, Gdk.Pixbuf pixbuf)
- {
- return ValidateThumbnail (item.DefaultVersionUri, pixbuf);
- }
-
- static public Gdk.Pixbuf ValidateThumbnail (System.Uri uri, Gdk.Pixbuf pixbuf)
- {
- using (Gdk.Pixbuf thumbnail = ThumbnailCache.Default.GetThumbnailForUri (uri)) {
- if (pixbuf != null && thumbnail != null && !ThumbnailFactory.ThumbnailIsValid (thumbnail, uri)) {
- Log.Debug ("regenerating thumbnail for {0}", uri);
- FSpot.ThumbnailGenerator.Default.Request (uri, 0, 256, 256);
- }
- }
- return pixbuf;
- }
-
public PhotoLoader (PhotoQuery query)
{
this.query = query;
diff --git a/src/PhotoQuery.cs b/src/PhotoQuery.cs
index c2384ff..7aceaa3 100644
--- a/src/PhotoQuery.cs
+++ b/src/PhotoQuery.cs
@@ -12,7 +12,7 @@ using System;
using System.Collections;
using System.Collections.Generic;
using FSpot.Query;
-using FSpot.Utils;
+using Hyena;
namespace FSpot {
public class PhotoQuery : FSpot.IBrowsableCollection {
@@ -60,7 +60,6 @@ namespace FSpot {
PhotoCache cache;
private PhotoStore store;
private Term terms;
- private Tag [] tags;
static int query_count = 0;
static int QueryCount {
@@ -77,10 +76,6 @@ namespace FSpot {
public PhotoQuery (PhotoStore store, params IQueryCondition [] conditions)
{
this.store = store;
- // Note: this is to let the query pick up
- // photos that were added or removed over dbus
- this.store.ItemsAddedOverDBus += delegate { RequestReload(); };
- this.store.ItemsRemovedOverDBus += delegate { RequestReload(); };
this.store.ItemsChanged += MarkChanged;
cache = new PhotoCache (store, temp_table);
reverse_lookup = new Dictionary<uint, int> ();
@@ -186,7 +181,7 @@ namespace FSpot {
untagged = value;
if (untagged) {
- UnSetCondition<TagConditionWrapper> ();
+ UnSetCondition<ConditionWrapper> ();
UnSetCondition<HiddenTag> ();
}
@@ -219,10 +214,10 @@ namespace FSpot {
}
}
- public TagConditionWrapper TagTerm {
- get { return GetCondition<TagConditionWrapper> (); }
+ public ConditionWrapper TagTerm {
+ get { return GetCondition<ConditionWrapper> (); }
set {
- if (value == null && UnSetCondition<TagConditionWrapper>()
+ if (value == null && UnSetCondition<ConditionWrapper>()
|| value != null && SetCondition (value)) {
if (value != null) {
@@ -265,8 +260,8 @@ namespace FSpot {
i = 1;
} else {
condition_array = new IQueryCondition[conditions.Count + 2];
- // condition_array[0] = new TagConditionWrapper (extra_condition);
- condition_array[1] = new TagConditionWrapper (terms != null ? terms.SqlCondition () : null);
+ // condition_array[0] = new ConditionWrapper (extra_condition);
+ condition_array[1] = new ConditionWrapper (terms != null ? terms.SqlCondition () : null);
i = 2;
}
diff --git a/src/PhotoStore.cs b/src/PhotoStore.cs
index 550a5f3..f44d26d 100644
--- a/src/PhotoStore.cs
+++ b/src/PhotoStore.cs
@@ -22,10 +22,12 @@ using System.Text;
using System;
using FSpot;
+using FSpot.Jobs;
using FSpot.Query;
using FSpot.Utils;
using FSpot.Platform;
+using Hyena;
using Banshee.Database;
@@ -52,39 +54,6 @@ public class PhotoStore : DbStore<Photo> {
System.IO.Directory.CreateDirectory (large_thumbnail_directory_path);
}
- //
- // Generates the thumbnail, returns the Pixbuf, and also stores it as a side effect
- //
-
- private static Pixbuf GenerateThumbnail (System.Uri uri)
- {
- using (FSpot.ImageFile img = FSpot.ImageFile.Create (uri)) {
- return GenerateThumbnail (uri, img);
- }
- }
-
- private static Pixbuf GenerateThumbnail (System.Uri uri, ImageFile img)
- {
- Pixbuf thumbnail = null;
-
- if (img is FSpot.IThumbnailContainer) {
- try {
- thumbnail = ((FSpot.IThumbnailContainer)img).GetEmbeddedThumbnail ();
- } catch (Exception e) {
- Log.Debug ("Exception while loading embedded thumbail {0}", e.ToString ());
- }
- }
-
- // Save embedded thumbnails in a silightly invalid way so that we know to regnerate them later.
- if (thumbnail != null)
- //FIXME with gio, set it to uri time minus a few sec
- ThumbnailFactory.SaveThumbnail (thumbnail, uri, new DateTime (1980, 1, 1));
- else
- thumbnail = FSpot.ThumbnailGenerator.Create (uri);
-
- return thumbnail;
- }
-
// Constructor
public PhotoStore (QueuedSqliteDatabase database, bool is_new)
@@ -104,8 +73,7 @@ public class PhotoStore : DbStore<Photo> {
" description TEXT NOT NULL, \n" +
" roll_id INTEGER NOT NULL, \n" +
" default_version_id INTEGER NOT NULL, \n" +
- " rating INTEGER NULL, \n" +
- " md5_sum TEXT NULL\n" +
+ " rating INTEGER NULL \n" +
")");
Database.ExecuteNonQuery (
@@ -122,89 +90,106 @@ public class PhotoStore : DbStore<Photo> {
" name STRING, \n" +
" base_uri STRING NOT NULL, \n" +
" filename STRING NOT NULL, \n" +
- " md5_sum TEXT NULL, \n" +
+ " import_md5 TEXT NULL, \n" +
" protected BOOLEAN, \n" +
" UNIQUE (photo_id, version_id)\n" +
")");
Database.ExecuteNonQuery ("CREATE INDEX idx_photo_versions_id ON photo_versions(photo_id)");
+ Database.ExecuteNonQuery ("CREATE INDEX idx_photo_versions_import_md5 ON photo_versions(import_md5)");
Database.ExecuteNonQuery ("CREATE INDEX idx_photos_roll_id ON photos(roll_id)");
}
- public Photo CheckForDuplicate (System.Uri uri) {
- // Here we can go wild in comparing photos,
- // for now we check on uri and md5
- Photo found = GetByUri (uri);
-
- if (found != null)
- return found;
-
- string md5 = Photo.GenerateMD5 (uri);
- Gnome.Vfs.FileInfo info = new Gnome.Vfs.FileInfo (uri.ToString (), Gnome.Vfs.FileInfoOptions.GetMimeType);
-
- Photo[] md5_matches = GetByMD5 (md5);
+ public bool HasDuplicate (IBrowsableItem item) {
+ var uri = item.DefaultVersion.Uri;
+ string hash = item.DefaultVersion.ImportMD5;
+ var condition = new ConditionWrapper (String.Format ("import_md5 = \"{0}\"", hash));
+ var dupes_by_hash = Count ("photo_versions", condition);
+ if (dupes_by_hash > 0)
+ return true;
- foreach (Photo match in md5_matches)
- {
- Gnome.Vfs.FileInfo match_info = new Gnome.Vfs.FileInfo (match.DefaultVersionUri.ToString (), Gnome.Vfs.FileInfoOptions.GetMimeType);
+ // This is a very lame check to overcome the lack of duplicate detect data right after transition.
+ //
+ // Does filename matching if there are files with no hash for the original version.
+ condition = new ConditionWrapper ("version_id = 1 AND (import_md5 = \"\" OR import_md5 IS NULL)");
+ var have_no_hashes = Count ("photo_versions", condition);
+ if (have_no_hashes > 0) {
+ var name = uri.GetFilename ();
+ DateTime? time = null;
+
+ // Look for a filename match.
+ var reader = Database.Query (new DbCommand ("SELECT photos.id, photos.time, pv.filename FROM photos LEFT JOIN photo_versions AS pv ON pv.photo_id = photos.id WHERE pv.filename = :filename", "filename", name));
+ while (reader.Read ()) {
+ Log.DebugFormat ("Found one possible duplicate for {0}", reader["filename"].ToString ());
+ if (!time.HasValue) {
+ // Only read time when needed
+ time = item.Time;
+ }
+
+ if (reader["time"].ToString () == DbUtils.UnixTimeFromDateTime (time.Value).ToString ()) {
+ Log.Debug ("Skipping duplicate", uri);
+
+ // Schedule a hash calculation job on the existing file.
+ CalculateHashJob.Create (FSpot.App.Instance.Database.Jobs, Convert.ToUInt32 (reader["id"]));
+
+ return true;
+ }
+ }
+ reader.Close ();
+ }
- // same mimetype?
- if (info.MimeType != match_info.MimeType)
- continue;
+ return false;
+ }
- // other comparisons?
+ public Photo CreateFrom (IBrowsableItem item, uint roll_id)
+ {
+ Photo photo;
- // TODO? load pixbuf and compare sizes?
+ long unix_time = DbUtils.UnixTimeFromDateTime (item.Time);
+ string description = item.Description;
- return match;
- }
+ uint id = (uint) Database.Execute (
+ new DbCommand (
+ "INSERT INTO photos (time, base_uri, filename, description, roll_id, default_version_id, rating) " +
+ "VALUES (:time, :base_uri, :filename, :description, :roll_id, :default_version_id, :rating)",
+ "time", unix_time,
+ "base_uri", item.DefaultVersion.BaseUri.ToString (),
+ "filename", item.DefaultVersion.Filename,
+ "description", description ?? String.Empty,
+ "roll_id", roll_id,
+ "default_version_id", Photo.OriginalVersionId,
+ "rating", "0"
+ )
+ );
- return null;
- }
+ photo = new Photo (id, unix_time);
+ photo.AddVersionUnsafely (Photo.OriginalVersionId, item.DefaultVersion.BaseUri, item.DefaultVersion.Filename, item.DefaultVersion.ImportMD5, Catalog.GetString ("Original"), true);
+ photo.Loaded = true;
- public Photo Create (System.Uri uri, uint roll_id, out Pixbuf thumbnail)
- {
- return Create (uri, uri, roll_id, out thumbnail);
+ InsertVersion (photo, photo.DefaultVersion as PhotoVersion);
+ EmitAdded (photo);
+ return photo;
}
- public Photo Create (System.Uri new_uri, System.Uri orig_uri, uint roll_id, out Pixbuf thumbnail)
+ private void InsertVersion (Photo photo, PhotoVersion version)
{
- Photo photo;
- using (FSpot.ImageFile img = FSpot.ImageFile.Create (orig_uri)) {
- long unix_time = DbUtils.UnixTimeFromDateTime (img.Date);
- string description = img.Description != null ? img.Description.Split ('\0') [0] : String.Empty;
- string md5_sum = Photo.GenerateMD5 (new_uri);
-
- uint id = (uint) Database.Execute (
- new DbCommand (
- "INSERT INTO photos (time, base_uri, filename, description, roll_id, default_version_id, rating, md5_sum) " +
- "VALUES (:time, :base_uri, :filename, :description, :roll_id, :default_version_id, :rating, :md5_sum)",
- "time", unix_time,
- "base_uri", new_uri.GetDirectoryUri ().ToString (),
- "filename", new_uri.GetFilename (),
- "description", description,
- "roll_id", roll_id,
- "default_version_id", Photo.OriginalVersionId,
- "rating", "0",
- "md5_sum", (md5_sum != String.Empty ? md5_sum : null)
- )
- );
-
- photo = new Photo (id, unix_time, new_uri, md5_sum);
- AddToCache (photo);
- photo.Loaded = true;
-
- thumbnail = GenerateThumbnail (new_uri, img);
- EmitAdded (photo);
- }
- return photo;
+ Database.ExecuteNonQuery (new DbCommand (
+ "INSERT OR IGNORE INTO photo_versions (photo_id, version_id, name, base_uri, filename, protected, import_md5) " +
+ "VALUES (:photo_id, :version_id, :name, :base_uri, :filename, :is_protected, :import_md5)",
+ "photo_id", photo.Id,
+ "version_id", version.VersionId,
+ "name", version.Name,
+ "base_uri", version.BaseUri.ToString (),
+ "filename", version.Filename,
+ "is_protected", version.IsProtected,
+ "import_md5", (version.ImportMD5 != String.Empty ? version.ImportMD5 : null)));
}
private void GetVersions (Photo photo)
{
SqliteDataReader reader = Database.Query(
- new DbCommand("SELECT version_id, name, base_uri, filename, md5_sum, protected " +
+ new DbCommand("SELECT version_id, name, base_uri, filename, import_md5, protected " +
"FROM photo_versions " +
"WHERE photo_id = :id",
"id", photo.Id
@@ -214,11 +199,12 @@ public class PhotoStore : DbStore<Photo> {
while (reader.Read ()) {
uint version_id = Convert.ToUInt32 (reader ["version_id"]);
string name = reader["name"].ToString ();
- System.Uri uri = new Uri (new Uri (reader ["base_uri"].ToString ()), reader ["filename"].ToString ());
- string md5_sum = reader["md5_sum"] != null ? reader ["md5_sum"].ToString () : null;
+ var base_uri = new SafeUri (reader ["base_uri"].ToString (), true);
+ var filename = reader ["filename"].ToString ();
+ string import_md5 = reader["import_md5"] != null ? reader ["import_md5"].ToString () : null;
bool is_protected = Convert.ToBoolean (reader["protected"]);
- photo.AddVersionUnsafely (version_id, uri, md5_sum, name, is_protected);
+ photo.AddVersionUnsafely (version_id, base_uri, filename, import_md5, name, is_protected);
}
reader.Close();
}
@@ -236,7 +222,7 @@ public class PhotoStore : DbStore<Photo> {
}
private void GetAllVersions (string ids) {
- SqliteDataReader reader = Database.Query ("SELECT photo_id, version_id, name, base_uri, filename, md5_sum, protected FROM photo_versions WHERE photo_id IN " + ids);
+ SqliteDataReader reader = Database.Query ("SELECT photo_id, version_id, name, base_uri, filename, import_md5, protected FROM photo_versions WHERE photo_id IN " + ids);
while (reader.Read ()) {
uint id = Convert.ToUInt32 (reader ["photo_id"]);
@@ -255,11 +241,12 @@ public class PhotoStore : DbStore<Photo> {
if (reader ["version_id"] != null) {
uint version_id = Convert.ToUInt32 (reader ["version_id"]);
string name = reader["name"].ToString ();
- System.Uri uri = new Uri (new Uri (reader ["base_uri"].ToString ()), reader ["filename"].ToString ());
- string md5_sum = reader["md5_sum"] != null ? reader ["md5_sum"].ToString () : null;
+ var base_uri = new SafeUri (reader ["base_uri"].ToString (), true);
+ var filename = reader ["filename"].ToString ();
+ string import_md5 = reader["import_md5"] != null ? reader ["import_md5"].ToString () : null;
bool is_protected = Convert.ToBoolean (reader["protected"]);
- photo.AddVersionUnsafely (version_id, uri, md5_sum, name, is_protected);
+ photo.AddVersionUnsafely (version_id, base_uri, filename, import_md5, name, is_protected);
}
/*
@@ -303,21 +290,16 @@ public class PhotoStore : DbStore<Photo> {
Photo photo = LookupInCache (id);
if (photo != null)
return photo;
-
+
SqliteDataReader reader = Database.Query(
- new DbCommand("SELECT time, base_uri, filename, description, roll_id, default_version_id, rating, md5_sum " +
- "FROM photos " +
+ new DbCommand("SELECT time, description, roll_id, default_version_id, rating " +
+ "FROM photos " +
"WHERE id = :id", "id", id
)
);
if (reader.Read ()) {
- photo = new Photo (id,
- Convert.ToInt64 (reader ["time"]),
- new Uri (new Uri (reader ["base_uri"].ToString ()), reader ["filename"].ToString ()),
- reader["md5_sum"] != null ? reader["md5_sum"].ToString () : null
- );
-
+ photo = new Photo (id, Convert.ToInt64 (reader ["time"]));
photo.Description = reader["description"].ToString ();
photo.RollId = Convert.ToUInt32 (reader["roll_id"]);
photo.DefaultVersionId = Convert.ToUInt32 (reader["default_version_id"]);
@@ -335,26 +317,25 @@ public class PhotoStore : DbStore<Photo> {
return photo;
}
- public Photo GetByUri (System.Uri uri)
+ public Photo GetByUri (SafeUri uri)
{
Photo photo = null;
- uint timer = Log.DebugTimerStart ();
+ var base_uri = uri.GetBaseUri ();
+ var filename = uri.GetFilename ();
SqliteDataReader reader =
- Database.Query (new DbCommand ("SELECT id, time, description, roll_id, default_version_id, rating, photos.md5_sum AS md5_sum " +
+ Database.Query (new DbCommand ("SELECT id, time, description, roll_id, default_version_id, rating " +
" FROM photos " +
" LEFT JOIN photo_versions AS pv ON photos.id = pv.photo_id" +
" WHERE (photos.base_uri = :base_uri AND photos.filename = :filename)" +
" OR (pv.base_uri = :base_uri AND pv.filename = :filename)",
- "base_uri", uri.GetDirectoryUri ().ToString (),
- "filename", uri.GetFilename ()));
+ "base_uri", base_uri.ToString (),
+ "filename", filename));
if (reader.Read ()) {
photo = new Photo (Convert.ToUInt32 (reader ["id"]),
- Convert.ToInt64 (reader ["time"]),
- uri,
- reader["md5_sum"] != null ? reader["md5_sum"].ToString () : null);
+ Convert.ToInt64 (reader ["time"]));
photo.Description = reader["description"].ToString ();
photo.RollId = Convert.ToUInt32 (reader["roll_id"]);
@@ -363,7 +344,6 @@ public class PhotoStore : DbStore<Photo> {
}
reader.Close();
- Log.DebugTimerPrint (timer, "GetByUri query took {0}");
if (photo == null)
return null;
@@ -381,59 +361,6 @@ public class PhotoStore : DbStore<Photo> {
return photo;
}
- public Photo[] GetByMD5 (string md5_sum)
- {
- List<Photo> photos = new List<Photo> ();
-
- SqliteDataReader reader = Database.Query (
- new DbCommand ("SELECT DISTINCT " +
- "id, time, photos.base_uri AS base_uri, photos.filename AS filename, description, roll_id, default_version_id, rating " +
- "FROM photos " +
- "LEFT JOIN photo_versions " +
- "ON photos.id = photo_versions.photo_id " +
- "WHERE photos.md5_sum = :md5_sum " +
- "OR photo_versions.md5_sum = :md5_sum",
- "md5_sum", md5_sum
- )
- );
-
- while (reader.Read ()) {
- Photo photo =
- new Photo (Convert.ToUInt32 (reader ["id"]),
- Convert.ToInt64 (reader ["time"]),
- new Uri (new Uri (reader ["base_uri"].ToString ()), reader ["filename"].ToString ()),
- md5_sum);
-
- photo.Description = reader["description"].ToString ();
- photo.RollId = Convert.ToUInt32 (reader["roll_id"]);
- photo.DefaultVersionId = Convert.ToUInt32 (reader["default_version_id"]);
- photo.Rating = Convert.ToUInt32 (reader ["rating"]);
- photo.MD5Sum = md5_sum;
-
- // get cached if possible
- Photo cached = LookupInCache (photo.Id);
-
- if (cached != null)
- {
- photos.Add (cached);
- continue;
- }
-
- // Add to cache and fully load if not found in cache
- AddToCache (photo);
-
- GetTags (photo);
- GetVersions (photo);
-
- // add to collection
- photos.Add (photo);
- }
-
- reader.Close();
-
- return photos.ToArray ();
- }
-
public void Remove (Tag []tags)
{
Photo [] photos = Query (tags, String.Empty, null, null);
@@ -506,16 +433,14 @@ public class PhotoStore : DbStore<Photo> {
" time = :time, " +
" base_uri = :base_uri, " +
" filename = :filename, " +
- " rating = :rating, " +
- " md5_sum = :md5_sum " +
+ " rating = :rating " +
"WHERE id = :id ",
"description", photo.Description,
"default_version_id", photo.DefaultVersionId,
"time", DbUtils.UnixTimeFromDateTime (photo.Time),
- "base_uri", photo.VersionUri (Photo.OriginalVersionId).GetDirectoryUri ().ToString (),
+ "base_uri", photo.VersionUri (Photo.OriginalVersionId).GetBaseUri ().ToString (),
"filename", photo.VersionUri (Photo.OriginalVersionId).GetFilename (),
"rating", String.Format ("{0}", photo.Rating),
- "md5_sum", (photo.MD5Sum != String.Empty ? photo.MD5Sum : null),
"id", photo.Id
)
);
@@ -547,102 +472,42 @@ public class PhotoStore : DbStore<Photo> {
if (changes.VersionsAdded != null)
foreach (uint version_id in changes.VersionsAdded) {
PhotoVersion version = photo.GetVersion (version_id) as PhotoVersion;
- Database.ExecuteNonQuery (new DbCommand (
- "INSERT OR IGNORE INTO photo_versions (photo_id, version_id, name, base_uri, filename, protected, md5_sum) " +
- "VALUES (:photo_id, :version_id, :name, :base_uri, :filename, :is_protected, :md5_sum)",
- "photo_id", photo.Id,
- "version_id", version_id,
- "name", version.Name,
- "base_uri", version.Uri.GetDirectoryUri ().ToString (),
- "filename", version.Uri.GetFilename (),
- "is_protected", version.IsProtected,
- "md5_sum", (version.MD5Sum != String.Empty ? version.MD5Sum : null)));
+ InsertVersion (photo, version);
}
if (changes.VersionsModified != null)
foreach (uint version_id in changes.VersionsModified) {
PhotoVersion version = photo.GetVersion (version_id) as PhotoVersion;
Database.ExecuteNonQuery (new DbCommand (
"UPDATE photo_versions SET name = :name, " +
- "base_uri = :base_uri, filename = :filename, protected = :protected, md5_sum = :md5_sum " +
+ "base_uri = :base_uri, filename = :filename, protected = :protected, import_md5 = :import_md5 " +
"WHERE photo_id = :photo_id AND version_id = :version_id",
"name", version.Name,
- "base_uri", version.Uri.GetDirectoryUri ().ToString (),
- "filename", version.Uri.GetFilename (),
+ "base_uri", version.BaseUri.ToString (),
+ "filename", version.Filename,
"protected", version.IsProtected,
"photo_id", photo.Id,
- "md5_sum", (version.MD5Sum != String.Empty ? version.MD5Sum : null),
+ "import_md5", (version.ImportMD5 != String.Empty ? version.ImportMD5 : null),
"version_id", version_id));
}
photo.Changes = null;
return changes;
}
- public void UpdateMD5Sum (Photo photo) {
- string md5_sum = Photo.GenerateMD5 (photo.VersionUri (Photo.OriginalVersionId));
- photo.MD5Sum = md5_sum;
-
- Database.ExecuteNonQuery (
- new DbCommand (
- "UPDATE photos " +
- "SET md5_sum = :md5_sum " +
- "WHERE ID = :id",
- "md5_sum", (md5_sum != String.Empty ? md5_sum : null),
- "id", photo.Id
- )
- );
-
+ public void CalculateMD5Sum (Photo photo) {
foreach (uint version_id in photo.VersionIds) {
- if (version_id == Photo.OriginalVersionId)
- continue;
-
PhotoVersion version = photo.GetVersion (version_id) as PhotoVersion;
- string version_md5_sum = Photo.GenerateMD5 (version.Uri);
-
- if (version.MD5Sum == version_md5_sum)
- continue;
+ // Don't overwrite MD5 sums that are already calculated.
+ if (version.ImportMD5 != String.Empty && version.ImportMD5 != null)
+ continue;
- version.MD5Sum = version_md5_sum;
+ string version_md5_sum = Photo.GenerateMD5 (version.Uri);
+ version.ImportMD5 = version_md5_sum;
photo.Changes.ChangeVersion (version_id);
}
Commit (photo);
}
-
- // Dbus
- public event EventHandler<DbItemEventArgs<Photo>> ItemsAddedOverDBus;
- public event EventHandler<DbItemEventArgs<Photo>> ItemsRemovedOverDBus;
-
- public Photo CreateOverDBus (string new_path, string orig_path, uint roll_id, out Gdk.Pixbuf pixbuf) {
- Photo photo = Create (UriUtils.PathToFileUri (new_path), UriUtils.PathToFileUri (orig_path), roll_id, out pixbuf);
- EmitAddedOverDBus (photo);
-
- return photo;
- }
-
- public void RemoveOverDBus (Photo photo) {
- Remove (photo);
- EmitRemovedOverDBus (photo);
- }
-
-
- protected void EmitAddedOverDBus (Photo photo) {
- EmitAddedOverDBus (new Photo [] { photo });
- }
-
- protected void EmitAddedOverDBus (Photo [] photos) {
- if (ItemsAddedOverDBus != null)
- ItemsAddedOverDBus (this, new DbItemEventArgs<Photo> (photos));
- }
-
- protected void EmitRemovedOverDBus (Photo photo) {
- EmitRemovedOverDBus (new Photo [] { photo });
- }
-
- protected void EmitRemovedOverDBus (Photo [] photos) {
- if (ItemsRemovedOverDBus != null)
- ItemsRemovedOverDBus (this, new DbItemEventArgs<Photo> (photos));
- }
public int Count (string table_name, params IQueryCondition [] conditions)
{
@@ -838,7 +703,7 @@ public class PhotoStore : DbStore<Photo> {
public void QueryToTemp(string temp_table, string query)
{
uint timer = Log.DebugTimerStart ();
- Log.Debug ("Query Started : {0}", query);
+ Log.DebugFormat ("Query Started : {0}", query);
Database.BeginTransaction ();
Database.ExecuteNonQuery (String.Format ("DROP TABLE IF EXISTS {0}", temp_table));
//Database.ExecuteNonQuery (String.Format ("CREATE TEMPORARY TABLE {0} AS {1}", temp_table, query));
@@ -874,12 +739,7 @@ public class PhotoStore : DbStore<Photo> {
Photo photo = LookupInCache (id);
if (photo == null) {
- photo =
- new Photo (id,
- Convert.ToInt64 (reader ["time"]),
- new Uri (new Uri (reader ["base_uri"].ToString ()), reader ["filename"].ToString ()),
- reader["md5_sum"] != null ? reader ["md5_sum"].ToString () : null
- );
+ photo = new Photo (id, Convert.ToInt64 (reader ["time"]));
photo.Description = reader["description"].ToString ();
photo.RollId = Convert.ToUInt32 (reader["roll_id"]);
photo.DefaultVersionId = Convert.ToUInt32 (reader["default_version_id"]);
@@ -917,10 +777,10 @@ public class PhotoStore : DbStore<Photo> {
return query_result.ToArray ();
}
- public Photo [] Query (System.Uri uri)
+ public Photo [] Query (SafeUri uri)
{
string filename = uri.GetFilename ();
-
+
/* query by file */
if ( ! String.IsNullOrEmpty (filename)) {
return Query (new DbCommand (
@@ -931,12 +791,11 @@ public class PhotoStore : DbStore<Photo> {
"description, " +
"roll_id, " +
"default_version_id, " +
- "rating, " +
- "md5_sum " +
+ "rating " +
"FROM photos " +
"WHERE base_uri LIKE :base_uri " +
"AND filename LIKE :filename",
- "base_uri", uri.GetDirectoryUri ().ToString (),
+ "base_uri", uri.GetBaseUri ().ToString (),
"filename", filename));
}
@@ -949,8 +808,7 @@ public class PhotoStore : DbStore<Photo> {
"description, " +
"roll_id, " +
"default_version_id, " +
- "rating, " +
- "md5_sum " +
+ "rating " +
"FROM photos " +
"WHERE base_uri LIKE :base_uri " +
"AND base_uri NOT LIKE :base_uri_",
@@ -1001,8 +859,7 @@ public class PhotoStore : DbStore<Photo> {
"description, " +
"roll_id, " +
"default_version_id, " +
- "rating, " +
- "md5_sum " +
+ "rating " +
"FROM photos ");
if (range != null) {
diff --git a/src/PhotoTagMenu.cs b/src/PhotoTagMenu.cs
index e0c31f6..1349422 100644
--- a/src/PhotoTagMenu.cs
+++ b/src/PhotoTagMenu.cs
@@ -29,23 +29,11 @@ using System.Collections;
using Gtk;
using FSpot;
+using Hyena;
public class PhotoTagMenu : Menu {
public delegate void TagSelectedHandler (Tag t);
public event TagSelectedHandler TagSelected;
- // This should be reworked to use a Selection interface to
- // extract the current selection
- private class TagMenuItem : Gtk.ImageMenuItem {
- public Tag Value;
-
- public TagMenuItem (Tag t) : base (t.Name) {
- Value = t;
- if (t.Icon != null)
- this.Image = new Gtk.Image (t.SizedIcon);
- }
-
- protected TagMenuItem (IntPtr raw) : base (raw) {}
- }
public PhotoTagMenu () : base () {
}
@@ -79,7 +67,7 @@ public class PhotoTagMenu : Menu {
}
foreach (Tag t in hash.Values) {
- TagMenuItem item = new TagMenuItem (t);
+ MenuItem item = new TagMenu.TagMenuItem (t);
this.Append (item);
item.ShowAll ();
item.Activated += HandleActivate;
@@ -90,11 +78,11 @@ public class PhotoTagMenu : Menu {
void HandleActivate (object obj, EventArgs args)
{
if (TagSelected != null) {
- TagMenuItem t = obj as TagMenuItem;
+ TagMenu.TagMenuItem t = obj as TagMenu.TagMenuItem;
if (t != null)
TagSelected (t.Value);
else
- Console.WriteLine ("Item was not a TagMenuItem");
+ Log.Debug ("Item was not a TagMenuItem");
}
}
}
diff --git a/src/PhotoVersionCommands.cs b/src/PhotoVersionCommands.cs
index 0a10a68..d2e3eda 100644
--- a/src/PhotoVersionCommands.cs
+++ b/src/PhotoVersionCommands.cs
@@ -3,18 +3,18 @@ using Glade;
using System;
using Mono.Unix;
using FSpot;
-using FSpot.Utils;
+using Hyena;
using FSpot.UI.Dialog;
public class PhotoVersionCommands
{
- private class VersionNameRequest : GladeDialog {
+ private class VersionNameRequest : BuilderDialog {
private Photo photo;
- [Glade.Widget] private Button ok_button;
- [Glade.Widget] private Entry version_name_entry;
- [Glade.Widget] private Label prompt_label;
- [Glade.Widget] private Label already_in_use_label;
+ [GtkBeans.Builder.Object] private Button ok_button;
+ [GtkBeans.Builder.Object] private Entry version_name_entry;
+ [GtkBeans.Builder.Object] private Label prompt_label;
+ [GtkBeans.Builder.Object] private Label already_in_use_label;
public enum RequestType {
Create,
@@ -48,19 +48,19 @@ public class PhotoVersionCommands
Update ();
}
- public VersionNameRequest (RequestType request_type, Photo photo, Gtk.Window parent_window) : base ("version_name_dialog")
+ public VersionNameRequest (RequestType request_type, Photo photo, Gtk.Window parent_window) : base ("version_name_dialog.ui", "version_name_dialog")
{
this.request_type = request_type;
this.photo = photo;
switch (request_type) {
case RequestType.Create:
- this.Dialog.Title = Catalog.GetString ("Create New Version");
+ this.Title = Catalog.GetString ("Create New Version");
prompt_label.Text = Catalog.GetString ("Name:");
break;
case RequestType.Rename:
- this.Dialog.Title = Catalog.GetString ("Rename Version");
+ this.Title = Catalog.GetString ("Rename Version");
prompt_label.Text = Catalog.GetString ("New name:");
version_name_entry.Text = photo.GetVersion (photo.DefaultVersionId).Name;
version_name_entry.SelectRegion (0, -1);
@@ -69,21 +69,21 @@ public class PhotoVersionCommands
version_name_entry.ActivatesDefault = true;
- this.Dialog.TransientFor = parent_window;
- this.Dialog.DefaultResponse = ResponseType.Ok;
+ this.TransientFor = parent_window;
+ this.DefaultResponse = ResponseType.Ok;
Update ();
}
public ResponseType Run (out string name)
{
- ResponseType response = (ResponseType) this.Dialog.Run ();
+ ResponseType response = (ResponseType) this.Run ();
name = version_name_entry.Text;
if (request_type == RequestType.Rename && name == photo.GetVersion (photo.DefaultVersionId).Name)
response = ResponseType.Cancel;
- this.Dialog.Destroy ();
+ this.Destroy ();
return response;
}
@@ -106,21 +106,11 @@ public class PhotoVersionCommands
try {
photo.DefaultVersionId = photo.CreateVersion (name, photo.DefaultVersionId, true);
store.Commit (photo);
+ return true;
} catch (Exception e) {
- string msg = Catalog.GetString ("Could not create a new version");
- string desc = String.Format (Catalog.GetString ("Received exception \"{0}\". Unable to create version \"{1}\""),
- e.Message, name);
-
- HigMessageDialog md = new HigMessageDialog (parent_window, DialogFlags.DestroyWithParent,
- Gtk.MessageType.Error, ButtonsType.Ok,
- msg,
- desc);
- md.Run ();
- md.Destroy ();
- return false;
+ HandleException ("Could not create a new version", e, parent_window);
+ return false;
}
-
- return true;
}
}
@@ -130,51 +120,23 @@ public class PhotoVersionCommands
public class Delete {
public bool Execute (PhotoStore store, Photo photo, Gtk.Window parent_window)
{
- // FIXME HIG-ify.
- Dialog dialog = new Dialog ();
- dialog.BorderWidth = 6;
- dialog.TransientFor = parent_window;
- dialog.HasSeparator = false;
- dialog.Title = Catalog.GetString ("Really Delete?");
- dialog.AddButton (Catalog.GetString ("Cancel"), (int) ResponseType.Cancel);
- dialog.AddButton (Catalog.GetString ("Delete"), (int) ResponseType.Ok);
- dialog.DefaultResponse = ResponseType.Ok;
-
- string version_name = photo.GetVersion (photo.DefaultVersionId).Name;
- Label label = new Label (String.Format (Catalog.GetString ("Really delete version \"{0}\"?"), version_name));
- label.Show ();
- dialog.VBox.PackStart (label, false, true, 6);;
-
- if (dialog.Run () == (int) ResponseType.Ok) {
- try {
+ string ok_caption = Catalog.GetString ("Delete");
+ string msg = String.Format (Catalog.GetString ("Really delete version \"{0}\"?"), photo.DefaultVersion.Name);
+ string desc = Catalog.GetString ("This removes the version and deletes the corresponding file from disk.");
+ try {
+ if (ResponseType.Ok == HigMessageDialog.RunHigConfirmation(parent_window, DialogFlags.DestroyWithParent,
+ MessageType.Warning, msg, desc, ok_caption)) {
photo.DeleteVersion (photo.DefaultVersionId);
store.Commit (photo);
- } catch (Exception e) {
- Log.DebugException (e);
- string msg = Catalog.GetString ("Could not delete a version");
- string desc = String.Format (Catalog.GetString ("Received exception \"{0}\". Unable to delete version \"{1}\""),
- e.Message, photo.Name);
-
- HigMessageDialog md = new HigMessageDialog (parent_window, DialogFlags.DestroyWithParent,
- Gtk.MessageType.Error, ButtonsType.Ok,
- msg,
- desc);
- md.Run ();
- md.Destroy ();
- dialog.Destroy (); // Delete confirmation window.
- return false;
+ return true;
}
-
- dialog.Destroy ();
- return true;
+ } catch (Exception e) {
+ HandleException ("Could not delete a version", e, parent_window);
}
-
- dialog.Destroy ();
return false;
}
}
-
// Renaming a version.
public class Rename {
@@ -192,50 +154,91 @@ public class PhotoVersionCommands
try {
photo.RenameVersion (photo.DefaultVersionId, new_name);
store.Commit (photo);
+ return true;
} catch (Exception e) {
- string msg = Catalog.GetString ("Could not rename a version");
- string desc = String.Format (Catalog.GetString ("Received exception \"{0}\". Unable to rename version to \"{1}\""),
- e.Message, new_name);
-
- HigMessageDialog md = new HigMessageDialog (parent_window, DialogFlags.DestroyWithParent,
- Gtk.MessageType.Error, ButtonsType.Ok,
- msg,
- desc);
- md.Run ();
- md.Destroy ();
- return false;
+ HandleException ("Could not rename a version", e, parent_window);
+ return false;
}
+ }
+ }
- return true;
+ // Detaching a version (making it a separate photo).
+
+ public class Detach {
+ public bool Execute (PhotoStore store, Photo photo, Gtk.Window parent_window)
+ {
+ string ok_caption = Catalog.GetString ("De_tach");
+ string msg = String.Format (Catalog.GetString ("Really detach version \"{0}\" from \"{1}\"?"), photo.DefaultVersion.Name, photo.Name.Replace("_", "__"));
+ string desc = Catalog.GetString ("This makes the version appear as a separate photo in the library. To undo, drag the new photo back to its parent.");
+ try {
+ if (ResponseType.Ok == HigMessageDialog.RunHigConfirmation(parent_window, DialogFlags.DestroyWithParent,
+ MessageType.Warning, msg, desc, ok_caption)) {
+ Photo new_photo = store.CreateFrom (photo, photo.RollId);
+ new_photo.CopyAttributesFrom (photo);
+ photo.DeleteVersion (photo.DefaultVersionId, false, true);
+ store.Commit (new Photo[] {new_photo, photo});
+ return true;
+ }
+ } catch (Exception e) {
+ HandleException ("Could not detach a version", e, parent_window);
+ }
+ return false;
}
}
// Reparenting a photo as version of another one
+
public class Reparent {
public bool Execute (PhotoStore store, Photo [] photos, Photo new_parent, Gtk.Window parent_window)
{
- foreach (Photo photo in photos) {
- new_parent.AddTag (photo.Tags);
- foreach (uint version_id in photo.VersionIds) {
- try {
- new_parent.DefaultVersionId = new_parent.CreateReparentedVersion (photo.GetVersion (version_id) as PhotoVersion);
- store.Commit (new_parent);
- } catch (Exception e) {
- Log.DebugException (e);
- }
- }
- uint [] version_ids = photo.VersionIds;
- Array.Reverse (version_ids);
- foreach (uint version_id in version_ids) {
- try {
- photo.DeleteVersion (version_id, true, true);
- } catch (Exception e) {
- Log.DebugException (e);
+ string ok_caption = Catalog.GetString ("Re_parent");
+ string msg = String.Format (Catalog.GetPluralString ("Really reparent \"{0}\" as version of \"{1}\"?",
+ "Really reparent {2} photos as versions of \"{1}\"?", photos.Length),
+ new_parent.Name.Replace ("_", "__"), photos[0].Name.Replace ("_", "__"), photos.Length);
+ string desc = Catalog.GetString ("This makes the photos appear as a single one in the library. The versions can be detached using the Photo menu.");
+
+ try {
+ if (ResponseType.Ok == HigMessageDialog.RunHigConfirmation(parent_window, DialogFlags.DestroyWithParent,
+ MessageType.Warning, msg, desc, ok_caption)) {
+ uint highest_rating = new_parent.Rating;
+ string new_description = new_parent.Description;
+ foreach (Photo photo in photos) {
+ highest_rating = Math.Max(photo.Rating, highest_rating);
+ if (string.IsNullOrEmpty(new_description))
+ new_description = photo.Description;
+ new_parent.AddTag (photo.Tags);
+
+ foreach (uint version_id in photo.VersionIds) {
+ new_parent.DefaultVersionId = new_parent.CreateReparentedVersion (photo.GetVersion (version_id) as PhotoVersion);
+ store.Commit (new_parent);
+ }
+ uint [] version_ids = photo.VersionIds;
+ Array.Reverse (version_ids);
+ foreach (uint version_id in version_ids) {
+ photo.DeleteVersion (version_id, true, true);
+ }
+ store.Remove (photo);
}
+ new_parent.Rating = highest_rating;
+ new_parent.Description = new_description;
+ store.Commit (new_parent);
+ return true;
}
- MainWindow.Toplevel.Database.Photos.Remove (photo);
}
- return true;
+ catch (Exception e) {
+ HandleException ("Could not reparent photos", e, parent_window);
+ }
+ return false;
}
}
+
+ private static void HandleException (string msg, Exception e, Gtk.Window parent_window) {
+ Log.DebugException (e);
+ msg = Catalog.GetString (msg);
+ string desc = String.Format (Catalog.GetString ("Received exception \"{0}\"."), e.Message);
+ HigMessageDialog md = new HigMessageDialog (parent_window, DialogFlags.DestroyWithParent,
+ Gtk.MessageType.Error, ButtonsType.Ok, msg, desc);
+ md.Run ();
+ md.Destroy ();
+ }
}
diff --git a/src/PhotoVersionMenu.cs b/src/PhotoVersionMenu.cs
index 02d0039..e3d3ac4 100644
--- a/src/PhotoVersionMenu.cs
+++ b/src/PhotoVersionMenu.cs
@@ -54,7 +54,12 @@ public class PhotoVersionMenu : Menu {
MenuItem menu_item = new MenuItem (photo.GetVersion (id).Name);
menu_item.Show ();
menu_item.Sensitive = true;
- ((Gtk.Label)menu_item.Child).UseUnderline = false;
+ Gtk.Label child = ((Gtk.Label)menu_item.Child);
+ child.UseUnderline = false;
+ if (photo.DefaultVersionId == id) {
+ child.UseMarkup = true;
+ child.Markup = "<b>" + photo.GetVersion (id).Name + "</b>";
+ }
menu_item.Activated += new EventHandler (HandleMenuItemActivated);
item_infos [i ++] = new MenuItemInfo (menu_item, id);
diff --git a/src/PhotoView.cs b/src/PhotoView.cs
index 2e5cd10..fdbebdc 100644
--- a/src/PhotoView.cs
+++ b/src/PhotoView.cs
@@ -21,13 +21,13 @@ using Mono.Unix;
using FSpot.Xmp;
using FSpot.Widgets;
using FSpot.Utils;
+using Hyena;
using FSpot.UI.Dialog;
namespace FSpot {
public class PhotoView : EventBox {
FSpot.Delay commit_delay;
- private bool has_selection = false;
private PhotoImageView photo_view;
private ScrolledWindow photo_view_scrolled;
private EventBox background;
@@ -41,8 +41,6 @@ namespace FSpot {
private Entry description_entry;
private Widgets.Rating rating;
- private uint restore_scrollbars_idle_id;
-
// Public events.
public delegate void PhotoChangedHandler (PhotoView me);
@@ -64,7 +62,7 @@ namespace FSpot {
get { return photo_view; }
}
- new public FSpot.BrowsablePointer Item {
+ public FSpot.BrowsablePointer Item {
get { return photo_view.Item; }
}
@@ -162,20 +160,6 @@ namespace FSpot {
return true;
}
- private void ShowError (System.Exception e, Photo photo)
- {
- string msg = Catalog.GetString ("Error editing photo");
- string desc = String.Format (Catalog.GetString ("Received exception \"{0}\". Unable to save photo {1}"),
- e.Message, photo.Name);
-
- HigMessageDialog md = new HigMessageDialog ((Gtk.Window)this.Toplevel, DialogFlags.DestroyWithParent,
- Gtk.MessageType.Error, ButtonsType.Ok,
- msg,
- desc);
- md.Run ();
- md.Destroy ();
- }
-
int changed_photo;
private bool CommitPendingChanges ()
{
@@ -298,8 +282,6 @@ namespace FSpot {
set { filmstrip.Visible = value; }
}
- Gtk.Tooltips tips = new Gtk.Tooltips ();
-
public PhotoView (IBrowsableCollection query)
: base ()
{
@@ -351,7 +333,7 @@ namespace FSpot {
HBox lower_hbox = new HBox (false, 2);
//inner_hbox.BorderWidth = 6;
- tag_view = new Widgets.TagView (MainWindow.ToolTips);
+ tag_view = new Widgets.TagView ();
lower_hbox.PackStart (tag_view, false, true, 0);
Label comment = new Label (Catalog.GetString ("Comment:"));
@@ -376,7 +358,7 @@ namespace FSpot {
~PhotoView ()
{
- FSpot.Utils.Log.Debug ("Finalizer called on {0}. Should be Disposed", GetType ());
+ Hyena.Log.DebugFormat ("Finalizer called on {0}. Should be Disposed", GetType ());
Dispose (false);
}
diff --git a/src/PixbufCache.cs b/src/PixbufCache.cs
index 81f653b..402feeb 100644
--- a/src/PixbufCache.cs
+++ b/src/PixbufCache.cs
@@ -10,7 +10,9 @@
using System;
using System.Collections;
using System.Threading;
+using Hyena;
+using FSpot.Utils;
using FSpot.Platform;
namespace FSpot {
@@ -33,16 +35,15 @@ namespace FSpot {
worker = new Thread (new ThreadStart (WorkerTask));
worker.Start ();
- ThumbnailGenerator.Default.OnPixbufLoaded += HandleThumbnailLoaded;
+ ThumbnailLoader.Default.OnPixbufLoaded += HandleThumbnailLoaded;
}
- public void HandleThumbnailLoaded (ImageLoaderThread loader, Uri uri, int order, Gdk.Pixbuf result)
+ public void HandleThumbnailLoaded (ImageLoaderThread loader, ImageLoaderThread.RequestItem result)
{
- if (result != null)
- Reload (uri);
+ Reload (result.Uri);
}
- public void Request (Uri uri, object closure, int width, int height)
+ public void Request (SafeUri uri, object closure, int width, int height)
{
lock (items) {
CacheEntry entry = items[uri] as CacheEntry;
@@ -59,7 +60,7 @@ namespace FSpot {
}
}
-// public void Update (Uri uri, Gdk.Pixbuf pixbuf)
+// public void Update (SafeUri uri, Gdk.Pixbuf pixbuf)
// {
// lock (items) {
// CacheEntry entry = (CacheEntry) items [uri];
@@ -89,7 +90,7 @@ namespace FSpot {
}
}
- public void Reload (Uri uri)
+ public void Reload (SafeUri uri)
{
CacheEntry entry;
@@ -173,7 +174,7 @@ namespace FSpot {
ProcessRequest (current);
QueueLast (current);
} catch (System.Exception e) {
- System.Console.WriteLine (e);
+ Log.Exception (e);
current = null;
}
}
@@ -183,7 +184,7 @@ namespace FSpot {
{
Gdk.Pixbuf loaded = null;
try {
- loaded = ThumbnailFactory.LoadThumbnail (entry.Uri);
+ loaded = XdgThumbnailSpec.LoadThumbnail (entry.Uri, ThumbnailSize.Large);
this.Update (entry, loaded);
} catch (GLib.GException){
if (loaded != null)
@@ -221,7 +222,7 @@ namespace FSpot {
}
- private CacheEntry ULookup (Uri uri)
+ private CacheEntry ULookup (SafeUri uri)
{
CacheEntry entry = (CacheEntry) items [uri];
if (entry != null) {
@@ -230,14 +231,14 @@ namespace FSpot {
return (CacheEntry) entry;
}
- public CacheEntry Lookup (Uri uri)
+ public CacheEntry Lookup (SafeUri uri)
{
lock (items) {
return ULookup (uri);
}
}
- private void URemove (Uri uri)
+ private void URemove (SafeUri uri)
{
CacheEntry entry = (CacheEntry) items [uri];
if (entry != null) {
@@ -247,7 +248,7 @@ namespace FSpot {
}
}
- public void Remove (Uri uri)
+ public void Remove (SafeUri uri)
{
lock (items) {
URemove (uri);
@@ -256,14 +257,14 @@ namespace FSpot {
public class CacheEntry : System.IDisposable {
private Gdk.Pixbuf pixbuf;
- private Uri uri;
+ private SafeUri uri;
private int width;
private int height;
private object data;
private bool reload;
private PixbufCache cache;
- public CacheEntry (PixbufCache cache, Uri uri, object closure, int width, int height)
+ public CacheEntry (PixbufCache cache, SafeUri uri, object closure, int width, int height)
{
this.uri = uri;
this.width = width;
@@ -279,7 +280,7 @@ namespace FSpot {
set { reload = value; }
}
- public Uri Uri {
+ public SafeUri Uri {
get { return uri; }
}
diff --git a/src/PixbufUtils.cs b/src/PixbufUtils.cs
index 87baa26..1bd2a26 100644
--- a/src/PixbufUtils.cs
+++ b/src/PixbufUtils.cs
@@ -16,6 +16,7 @@ using System;
using System.IO;
using FSpot;
using FSpot.Utils;
+using Hyena;
public class PixbufUtils {
static Pixbuf error_pixbuf = null;
@@ -76,7 +77,6 @@ public class PixbufUtils {
int max_width;
int max_height;
PixbufOrientation orientation;
- int orig_width;
public AspectLoader (int max_width, int max_height)
{
@@ -121,7 +121,6 @@ public class PixbufUtils {
Gdk.Pixbuf rotated = FSpot.Utils.PixbufUtils.TransformOrientation (orig, orientation);
if (orig != rotated) {
- FSpot.Utils.PixbufUtils.CopyThumbnailOptions (orig, rotated);
orig.Dispose ();
}
loader.Dispose ();
@@ -136,7 +135,7 @@ public class PixbufUtils {
return Load (fs, orientation);
}
} catch (Exception) {
- System.Console.WriteLine ("Error loading photo {0}", path);
+ Log.ErrorFormat ("Error loading photo {0}", path);
return null;
}
}
@@ -147,7 +146,6 @@ public class PixbufUtils {
if (pixbuf == null)
return null;
Pixbuf result = new Pixbuf (pixbuf, 0, 0, pixbuf.Width, pixbuf.Height);
- FSpot.Utils.PixbufUtils.CopyThumbnailOptions (pixbuf, result);
return result;
}
@@ -168,8 +166,6 @@ public class PixbufUtils {
else
result = pixbuf.Copy ();
- FSpot.Utils.PixbufUtils.CopyThumbnailOptions (pixbuf, result);
-
return result;
}
@@ -675,19 +671,17 @@ public class PixbufUtils {
return orientation;
}
- public static PixbufOrientation GetOrientation (System.Uri uri)
+ public static PixbufOrientation GetOrientation (SafeUri uri)
{
using (FSpot.ImageFile img = FSpot.ImageFile.Create (uri)) {
return img.Orientation;
}
}
- [Obsolete ("Use GetOrientation (System.Uri) instead")]
+ [Obsolete ("Use GetOrientation (SafeUri) instead")]
public static PixbufOrientation GetOrientation (string path)
{
- using (FSpot.ImageFile img = FSpot.ImageFile.Create (path)) {
- return img.Orientation;
- }
+ return GetOrientation (new SafeUri (path));
}
[DllImport("libgnomeui-2-0.dll")]
@@ -733,13 +727,4 @@ public class PixbufUtils {
// {
// f_pixbuf_copy_with_orientation (src.Handle, dest.Handle, (int)orientation);
// }
-
-#if false
- [DllImport("glibsharpglue")]
- static extern int gtksharp_object_get_ref_count (IntPtr obj);
-
- public static int RefCount (GLib.Object obj) {
- return gtksharp_object_get_ref_count (obj.Handle);
- }
-#endif
}
diff --git a/src/Platform/Gnome/ScreenSaver.cs b/src/Platform/Gnome/ScreenSaver.cs
index 55fd35c..53eb33f 100644
--- a/src/Platform/Gnome/ScreenSaver.cs
+++ b/src/Platform/Gnome/ScreenSaver.cs
@@ -13,7 +13,7 @@ using System.Runtime.InteropServices;
using NDesk.DBus;
-using FSpot.Utils;
+using Hyena;
namespace FSpot.Platform
{
@@ -43,7 +43,7 @@ namespace FSpot.Platform
if (inhibited)
return cookie;
- Log.Information ("Inhibit screensaver for {0}", reason);
+ Log.InformationFormat ("Inhibit screensaver for {0}", reason);
try {
cookie = GnomeScreenSaver.Inhibit ("f-spot", reason);
inhibited = true;
diff --git a/src/Platform/Gnome/ThumbnailFactory.cs b/src/Platform/Gnome/ThumbnailFactory.cs
deleted file mode 100644
index 816b053..0000000
--- a/src/Platform/Gnome/ThumbnailFactory.cs
+++ /dev/null
@@ -1,152 +0,0 @@
-/*
- * FSpot.Platform.Gnome.ThumnailFactory.cs
- *
- * Author(s):
- * Stephane Delcroix <stephane at delcroix.org>
- *
- * Copyright 2008 Novell, Inc
- *
- * This is free software, See COPYING for details
- */
-
-using System;
-using FSpot.Utils;
-using Gdk;
-
-namespace FSpot.Platform
-{
- public static class ThumbnailFactory
- {
- static Gnome.ThumbnailFactory gnome_thumbnail_factory = new Gnome.ThumbnailFactory (Gnome.ThumbnailSize.Large);
-
- public static void SaveThumbnail (Pixbuf pixbuf, Uri imageUri)
- {
- if (pixbuf == null)
- throw new ArgumentNullException ("pixbuf");
- if (imageUri == null)
- throw new ArgumentNullException ("imageUri");
-
- GLib.File gfile = GLib.FileFactory.NewForUri (imageUri);
- GLib.FileInfo info = gfile.QueryInfo ("time::modified", GLib.FileQueryInfoFlags.None, null);
- DateTime mtime = Mono.Unix.Native.NativeConvert.ToDateTime ((long)info.GetAttributeULong ("time::modified"));
-
- SaveThumbnail (pixbuf, imageUri, mtime);
- }
-
- public static void SaveThumbnail (Pixbuf pixbuf, Uri imageUri, DateTime originalMtime)
- {
- if (pixbuf == null)
- throw new ArgumentNullException ("pixbuf");
- if (imageUri == null)
- throw new ArgumentNullException ("imageUri");
-
- gnome_thumbnail_factory.SaveThumbnail (pixbuf, UriUtils.UriToStringEscaped (imageUri), originalMtime);
- }
-
- public static void DeleteThumbnail (Uri imageUri)
- {
- if (imageUri == null)
- throw new ArgumentNullException ("imageUri");
- try {
- if (System.IO.File.Exists (PathForUri (imageUri)))
- System.IO.File.Delete (PathForUri (imageUri));
- } catch (Exception e) {
- Log.DebugException (e);
- }
- }
-
- public static void MoveThumbnail (Uri fromUri, Uri toUri)
- {
- if (fromUri == null)
- throw new ArgumentNullException ("fromUri");
- if (toUri == null)
- throw new ArgumentNullException ("toUri");
- System.IO.File.Move (PathForUri (fromUri), PathForUri (toUri));
- }
-
- public static bool ThumbnailIsValid (Pixbuf pixbuf, Uri imageUri)
- {
- if (imageUri == null)
- throw new ArgumentNullException ("imageUri");
-
- try {
- GLib.File gfile = GLib.FileFactory.NewForUri (imageUri);
- if (!gfile.Exists)
- return true;
- GLib.FileInfo info = gfile.QueryInfo ("time::modified", GLib.FileQueryInfoFlags.None, null);
- DateTime mtime = Mono.Unix.Native.NativeConvert.ToDateTime ((long)info.GetAttributeULong ("time::modified"));
- return ThumbnailIsValid (pixbuf, imageUri, mtime);
- } catch (System.IO.FileNotFoundException) {
- // If the original file is not on disk, the thumbnail is as valid as it's going to get
- return true;
- } catch (System.Exception e) {
- Log.DebugException (e);
- return false;
- }
- }
-
- public static bool ThumbnailIsValid (Pixbuf pixbuf, Uri imageUri, DateTime mtime)
- {
- if (pixbuf == null)
- throw new ArgumentNullException ("pixbuf");
- if (imageUri == null)
- throw new ArgumentNullException ("imageUri");
-
- try {
- return Gnome.Thumbnail.IsValid (pixbuf, UriUtils.UriToStringEscaped (imageUri), mtime);
- } catch (System.IO.FileNotFoundException) {
- // If the original file is not on disk, the thumbnail is as valid as it's going to get
- return true;
- } catch (System.Exception e) {
- System.Console.WriteLine (e);
- return false;
- }
- }
-
- public static Pixbuf LoadThumbnail (Uri imageUri)
- {
- if (imageUri == null)
- throw new ArgumentNullException ("imageUri");
-#if GSD_2_24
- if (System.IO.File.Exists (PathForUri (imageUri)))
- Utils.Unix.Touch (PathForUri (imageUri));
-#endif
- try {
- return new Pixbuf (PathForUri (imageUri));
- } catch {
- return null;
- }
- }
-
- public static Pixbuf LoadThumbnail (Uri imageUri, int destWidth, int destHeight)
- {
- using (Pixbuf p = LoadThumbnail (imageUri)) {
- return Gnome.Thumbnail.ScaleDownPixbuf (p, destWidth, destHeight);
- }
- }
-
- public static bool ThumbnailExists (Uri imageUri)
- {
- return System.IO.File.Exists (PathForUri (imageUri));
- }
-
- public static bool ThumbnailIsRecent (Uri imageUri)
- {
- if (imageUri == null)
- throw new ArgumentNullException ("imageUri");
-
- if (!imageUri.IsFile)
- Log.Debug ("FIXME: compute timestamp on non file uri too");
-
- if (!System.IO.File.Exists (imageUri.AbsolutePath))
- return true;
-
- return imageUri.IsFile && System.IO.File.Exists (PathForUri (imageUri)) && System.IO.File.GetLastWriteTime (PathForUri (imageUri)) >= System.IO.File.GetLastWriteTime (imageUri.AbsolutePath);
- }
-
- static string PathForUri (Uri uri)
- {
- return Gnome.Thumbnail.PathForUri (UriUtils.UriToStringEscaped (uri), Gnome.ThumbnailSize.Large);
- }
- }
-}
diff --git a/src/Platform/Gnome/WebProxy.cs b/src/Platform/Gnome/WebProxy.cs
index d54b64a..373f7d7 100644
--- a/src/Platform/Gnome/WebProxy.cs
+++ b/src/Platform/Gnome/WebProxy.cs
@@ -9,7 +9,7 @@
*/
using System;
-using FSpot.Utils;
+using Hyena;
namespace FSpot.Platform
{
diff --git a/src/Platform/Makefile.am b/src/Platform/Makefile.am
new file mode 100644
index 0000000..8ddca2c
--- /dev/null
+++ b/src/Platform/Makefile.am
@@ -0,0 +1,20 @@
+ASSEMBLY = FSpot.Platform
+TARGET = library
+LINK = $(REF_FSPOT_PLATFORM)
+
+SOURCES = \
+ Gnome/Desktop.cs \
+ Gnome/PreferenceBackend.cs \
+ Gnome/ScreenSaver.cs \
+ Gnome/WebProxy.cs
+
+# Currently unused
+#NULL_PLATFORM_CSDISTFILES = \
+# Null/Desktop.cs \
+# Null/PreferenceBackend.cs \
+# Null/ScreenSaver.cs \
+# Null/WebProxy.cs
+
+RESOURCES =
+
+include $(top_srcdir)/build/build.mk
diff --git a/src/Platform/Makefile.in b/src/Platform/Makefile.in
new file mode 100644
index 0000000..4749e66
--- /dev/null
+++ b/src/Platform/Makefile.in
@@ -0,0 +1,814 @@
+# Makefile.in generated by automake 1.11.1 from Makefile.am.
+# @configure_input@
+
+# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
+# 2003, 2004, 2005, 2006, 2007, 2008, 2009 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.
+
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
+# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
+# PARTICULAR PURPOSE.
+
+ at SET_MAKE@
+
+VPATH = @srcdir@
+pkgdatadir = $(datadir)/@PACKAGE@
+pkgincludedir = $(includedir)/@PACKAGE@
+pkglibdir = $(libdir)/@PACKAGE@
+pkglibexecdir = $(libexecdir)/@PACKAGE@
+am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
+install_sh_DATA = $(install_sh) -c -m 644
+install_sh_PROGRAM = $(install_sh) -c
+install_sh_SCRIPT = $(install_sh) -c
+INSTALL_HEADER = $(INSTALL_DATA)
+transform = $(program_transform_name)
+NORMAL_INSTALL = :
+PRE_INSTALL = :
+POST_INSTALL = :
+NORMAL_UNINSTALL = :
+PRE_UNINSTALL = :
+POST_UNINSTALL = :
+build_triplet = @build@
+host_triplet = @host@
+DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in \
+ $(top_srcdir)/build/build.environment.mk \
+ $(top_srcdir)/build/build.mk \
+ $(top_srcdir)/build/build.rules.mk
+ at ENABLE_TESTS_TRUE@am__append_1 = " $(NUNIT_LIBS)"
+subdir = src/Platform
+ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
+am__aclocal_m4_deps = $(top_srcdir)/build/m4/shave/shave.m4 \
+ $(top_srcdir)/build/m4/shamrock/expansions.m4 \
+ $(top_srcdir)/build/m4/shamrock/gnome-doc.m4 \
+ $(top_srcdir)/build/m4/shamrock/mono.m4 \
+ $(top_srcdir)/build/m4/shamrock/nunit.m4 \
+ $(top_srcdir)/build/m4/shamrock/programs.m4 \
+ $(top_srcdir)/build/m4/f-spot/flickrnet.m4 \
+ $(top_srcdir)/build/m4/f-spot/gnome-keyring-sharp.m4 \
+ $(top_srcdir)/build/m4/f-spot/gtk-sharp.m4 \
+ $(top_srcdir)/build/m4/f-spot/mono-addins.m4 \
+ $(top_srcdir)/acinclude.m4 $(top_srcdir)/configure.ac
+am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
+ $(ACLOCAL_M4)
+mkinstalldirs = $(install_sh) -d
+CONFIG_HEADER = $(top_builddir)/config.h
+CONFIG_CLEAN_FILES =
+CONFIG_CLEAN_VPATH_FILES =
+am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`;
+am__vpath_adj = case $$p in \
+ $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \
+ *) f=$$p;; \
+ esac;
+am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`;
+am__install_max = 40
+am__nobase_strip_setup = \
+ srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'`
+am__nobase_strip = \
+ for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||"
+am__nobase_list = $(am__nobase_strip_setup); \
+ for p in $$list; do echo "$$p $$p"; done | \
+ sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \
+ $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \
+ if (++n[$$2] == $(am__install_max)) \
+ { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \
+ END { for (dir in files) print dir, files[dir] }'
+am__base_list = \
+ sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \
+ sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g'
+am__installdirs = "$(DESTDIR)$(moduledir)"
+SCRIPTS = $(module_SCRIPTS)
+DIST_SOURCES =
+DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
+ACLOCAL = @ACLOCAL@
+ACLOCAL_AMFLAGS = @ACLOCAL_AMFLAGS@
+ALL_LINGUAS = @ALL_LINGUAS@
+AMTAR = @AMTAR@
+AM_MAKEFLAGS = @AM_MAKEFLAGS@
+API_VERSION = @API_VERSION@
+AR = @AR@
+ASM_VERSION = @ASM_VERSION@
+AUTOCONF = @AUTOCONF@
+AUTOHEADER = @AUTOHEADER@
+AUTOMAKE = @AUTOMAKE@
+AWK = @AWK@
+CATALOGS = @CATALOGS@
+CATOBJEXT = @CATOBJEXT@
+CC = @CC@
+CCDEPMODE = @CCDEPMODE@
+CFLAGS = @CFLAGS@
+CPP = @CPP@
+CPPFLAGS = @CPPFLAGS@
+CSC_DEFINES = @CSC_DEFINES@
+CXX = @CXX@
+CXXCPP = @CXXCPP@
+CXXDEPMODE = @CXXDEPMODE@
+CXXFLAGS = @CXXFLAGS@
+CYGPATH_W = @CYGPATH_W@
+DATADIRNAME = @DATADIRNAME@
+DEFS = @DEFS@
+DEPDIR = @DEPDIR@
+DISPLAY_VERSION = @DISPLAY_VERSION@
+DISTCHECK_CONFIGURE_FLAGS = @DISTCHECK_CONFIGURE_FLAGS@
+DOC_USER_FORMATS = @DOC_USER_FORMATS@
+DSYMUTIL = @DSYMUTIL@
+DUMPBIN = @DUMPBIN@
+ECHO_C = @ECHO_C@
+ECHO_N = @ECHO_N@
+ECHO_T = @ECHO_T@
+EGREP = @EGREP@
+EXEEXT = @EXEEXT@
+EXIF_CFLAGS = @EXIF_CFLAGS@
+EXIF_LIBS = @EXIF_LIBS@
+EXIF_SOVERSION = @EXIF_SOVERSION@
+F77 = @F77@
+FC = @FC@
+FGREP = @FGREP@
+FLICKRNET_CFLAGS = @FLICKRNET_CFLAGS@
+FLICKRNET_LIBS = @FLICKRNET_LIBS@
+F_CFLAGS = @F_CFLAGS@
+F_LIBS = @F_LIBS@
+GAPI2CODEGEN = @GAPI2CODEGEN@
+GAPI2FIXUP = @GAPI2FIXUP@
+GAPI2PARSER = @GAPI2PARSER@
+GCONFTOOL = @GCONFTOOL@
+GCONF_SCHEMA_CONFIG_SOURCE = @GCONF_SCHEMA_CONFIG_SOURCE@
+GCONF_SCHEMA_FILE_DIR = @GCONF_SCHEMA_FILE_DIR@
+GCONF_SHARP_CFLAGS = @GCONF_SHARP_CFLAGS@
+GCONF_SHARP_LIBS = @GCONF_SHARP_LIBS@
+GETTEXT_PACKAGE = @GETTEXT_PACKAGE@
+GIO_CFLAGS = @GIO_CFLAGS@
+GIO_LIBS = @GIO_LIBS@
+GLIBSHARP_2_12_7_CFLAGS = @GLIBSHARP_2_12_7_CFLAGS@
+GLIBSHARP_2_12_7_LIBS = @GLIBSHARP_2_12_7_LIBS@
+GLIBSHARP_CFLAGS = @GLIBSHARP_CFLAGS@
+GLIBSHARP_LIBS = @GLIBSHARP_LIBS@
+GLIB_CFLAGS = @GLIB_CFLAGS@
+GLIB_GENMARSHAL = @GLIB_GENMARSHAL@
+GLIB_LIBS = @GLIB_LIBS@
+GLIB_MKENUMS = @GLIB_MKENUMS@
+GMOFILES = @GMOFILES@
+GMSGFMT = @GMSGFMT@
+GNOME_ICON_THEME_PREFIX = @GNOME_ICON_THEME_PREFIX@
+GNOME_SCREENSAVER_SAVERDIR = @GNOME_SCREENSAVER_SAVERDIR@
+GNOME_SCREENSAVER_THEMESDIR = @GNOME_SCREENSAVER_THEMESDIR@
+GNOME_SHARP_CFLAGS = @GNOME_SHARP_CFLAGS@
+GNOME_SHARP_LIBS = @GNOME_SHARP_LIBS@
+GOBJECT_QUERY = @GOBJECT_QUERY@
+GREP = @GREP@
+GTKSHARP_A11Y_CFLAGS = @GTKSHARP_A11Y_CFLAGS@
+GTKSHARP_A11Y_LIBS = @GTKSHARP_A11Y_LIBS@
+GTKSHARP_CFLAGS = @GTKSHARP_CFLAGS@
+GTKSHARP_LIBS = @GTKSHARP_LIBS@
+HELP_DIR = @HELP_DIR@
+ICONS_DIRECTORY = @ICONS_DIRECTORY@
+INSTALL = @INSTALL@
+INSTALL_DATA = @INSTALL_DATA@
+INSTALL_PROGRAM = @INSTALL_PROGRAM@
+INSTALL_SCRIPT = @INSTALL_SCRIPT@
+INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
+INSTOBJEXT = @INSTOBJEXT@
+INTLLIBS = @INTLLIBS@
+INTLTOOL_EXTRACT = @INTLTOOL_EXTRACT@
+INTLTOOL_MERGE = @INTLTOOL_MERGE@
+INTLTOOL_PERL = @INTLTOOL_PERL@
+INTLTOOL_UPDATE = @INTLTOOL_UPDATE@
+KEYRINGSHARP_CFLAGS = @KEYRINGSHARP_CFLAGS@
+KEYRINGSHARP_LIBS = @KEYRINGSHARP_LIBS@
+LCMS_CFLAGS = @LCMS_CFLAGS@
+LCMS_LIBS = @LCMS_LIBS@
+LD = @LD@
+LDFLAGS = @LDFLAGS@
+LIBEXIF_VERSION_CHECK_CFLAGS = @LIBEXIF_VERSION_CHECK_CFLAGS@
+LIBEXIF_VERSION_CHECK_LIBS = @LIBEXIF_VERSION_CHECK_LIBS@
+LIBJPEG = @LIBJPEG@
+LIBOBJS = @LIBOBJS@
+LIBS = @LIBS@
+LIBTOOL = @LIBTOOL@
+LIPO = @LIPO@
+LN_S = @LN_S@
+LTLIBOBJS = @LTLIBOBJS@
+MAINT = @MAINT@
+MAKEFLAGS = @MAKEFLAGS@
+MAKEINFO = @MAKEINFO@
+MCS = @MCS@
+MKDIR_P = @MKDIR_P@
+MKINSTALLDIRS = @MKINSTALLDIRS@
+MONO = @MONO@
+MONO_ADDINS_CFLAGS = @MONO_ADDINS_CFLAGS@
+MONO_ADDINS_GUI_CFLAGS = @MONO_ADDINS_GUI_CFLAGS@
+MONO_ADDINS_GUI_LIBS = @MONO_ADDINS_GUI_LIBS@
+MONO_ADDINS_LIBS = @MONO_ADDINS_LIBS@
+MONO_ADDINS_SETUP_CFLAGS = @MONO_ADDINS_SETUP_CFLAGS@
+MONO_ADDINS_SETUP_LIBS = @MONO_ADDINS_SETUP_LIBS@
+MONO_MODULE_CFLAGS = @MONO_MODULE_CFLAGS@
+MONO_MODULE_LIBS = @MONO_MODULE_LIBS@
+MSGFMT = @MSGFMT@
+MSGFMT_OPTS = @MSGFMT_OPTS@
+MSGMERGE = @MSGMERGE@
+NDESK_DBUS_CFLAGS = @NDESK_DBUS_CFLAGS@
+NDESK_DBUS_LIBS = @NDESK_DBUS_LIBS@
+NM = @NM@
+NMEDIT = @NMEDIT@
+NUNIT_CFLAGS = @NUNIT_CFLAGS@
+NUNIT_LIBS = @NUNIT_LIBS@
+OBJC = @OBJC@
+OBJDUMP = @OBJDUMP@
+OBJEXT = @OBJEXT@
+OMF_DIR = @OMF_DIR@
+OTOOL = @OTOOL@
+OTOOL64 = @OTOOL64@
+PACKAGE = @PACKAGE@
+PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
+PACKAGE_NAME = @PACKAGE_NAME@
+PACKAGE_STRING = @PACKAGE_STRING@
+PACKAGE_TARNAME = @PACKAGE_TARNAME@
+PACKAGE_URL = @PACKAGE_URL@
+PACKAGE_VERSION = @PACKAGE_VERSION@
+PATH_SEPARATOR = @PATH_SEPARATOR@
+PKG_CONFIG = @PKG_CONFIG@
+POFILES = @POFILES@
+POSUB = @POSUB@
+PO_IN_DATADIR_FALSE = @PO_IN_DATADIR_FALSE@
+PO_IN_DATADIR_TRUE = @PO_IN_DATADIR_TRUE@
+Q = @Q@
+RANLIB = @RANLIB@
+SED = @SED@
+SET_MAKE = @SET_MAKE@
+SHELL = @SHELL@
+STRIP = @STRIP@
+TURTLEDIR = @TURTLEDIR@
+UNIQUE_CFLAGS = @UNIQUE_CFLAGS@
+UNIQUE_LIBS = @UNIQUE_LIBS@
+USE_NLS = @USE_NLS@
+V = @V@
+VERSION = @VERSION@
+WARN_CFLAGS = @WARN_CFLAGS@
+XGETTEXT = @XGETTEXT@
+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_DUMPBIN = @ac_ct_DUMPBIN@
+am__include = @am__include@
+am__leading_dot = @am__leading_dot@
+am__quote = @am__quote@
+am__tar = @am__tar@
+am__untar = @am__untar@
+bindir = @bindir@
+build = @build@
+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@
+expanded_bindir = @expanded_bindir@
+expanded_datadir = @expanded_datadir@
+expanded_libdir = @expanded_libdir@
+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@
+lt_ECHO = @lt_ECHO@
+mandir = @mandir@
+mkdir_p = @mkdir_p@
+oldincludedir = @oldincludedir@
+pdfdir = @pdfdir@
+prefix = @prefix@
+program_transform_name = @program_transform_name@
+psdir = @psdir@
+sbindir = @sbindir@
+sharedstatedir = @sharedstatedir@
+shavedir = @shavedir@
+srcdir = @srcdir@
+sysconfdir = @sysconfdir@
+target_alias = @target_alias@
+top_build_prefix = @top_build_prefix@
+top_builddir = @top_builddir@
+top_srcdir = @top_srcdir@
+ASSEMBLY = FSpot.Platform
+TARGET = library
+LINK = $(REF_FSPOT_PLATFORM) $(am__append_1)
+SOURCES = \
+ Gnome/Desktop.cs \
+ Gnome/PreferenceBackend.cs \
+ Gnome/ScreenSaver.cs \
+ Gnome/WebProxy.cs
+
+
+# Currently unused
+#NULL_PLATFORM_CSDISTFILES = \
+# Null/Desktop.cs \
+# Null/PreferenceBackend.cs \
+# Null/ScreenSaver.cs \
+# Null/WebProxy.cs
+RESOURCES =
+
+# Initializers
+MONO_BASE_PATH =
+MONO_ADDINS_PATH =
+
+# Install Paths
+DEFAULT_INSTALL_DIR = $(pkglibdir)
+BACKENDS_INSTALL_DIR = $(DEFAULT_INSTALL_DIR)/Backends
+EXTENSIONS_INSTALL_DIR = $(DEFAULT_INSTALL_DIR)/Extensions
+DIR_DOCS = $(top_builddir)/docs
+DIR_EXTENSIONS = $(top_builddir)/extensions
+DIR_ICONS = $(top_builddir)/icons
+DIR_JPEGTRAN = $(top_builddir)/lib/libjpegtran
+DIR_LIBFSPOT = $(top_builddir)/lib/libfspot
+DIR_SEMWEB = $(top_builddir)/lib/semweb
+DIR_SRC = $(top_builddir)/src
+DIR_GIOSHARP = $(top_builddir)/lib/gio-sharp/gio
+DIR_GTKSHARPBEANS = $(top_builddir)/lib/gtk-sharp-beans
+DIR_UNIQUESHARP = $(top_builddir)/lib/unique-sharp/unique
+DIR_BIN = $(top_builddir)/bin
+
+# External libraries to link against, generated from configure
+LINK_SYSTEM = -r:System
+LINK_SYSTEMDATA = -r:System.Data
+LINK_SYSTEM_WEB = -r:System.Web
+LINK_MONO_POSIX = -r:Mono.Posix
+LINK_MONO_CAIRO = -r:Mono.Cairo
+LINK_MONO_SIMD = -r:Mono.Simd
+LINK_MONODATA = -r:Mono.Data
+LINK_MONO_DATA_SQLITECLIENT = -r:Mono.Data.SqliteClient
+LINK_ICSHARP_ZIP_LIB = -r:ICSharpCode.SharpZipLib
+LINK_KEYRING = $(KEYRINGSHARP_LIBS)
+LINK_GLIB = $(GLIBSHARP_LIBS)
+LINK_GTK = $(GTKSHARP_LIBS)
+LINK_GNOME = $(GNOME_SHARP_LIBS)
+LINK_GCONF = $(GCONF_SHARP_LIBS)
+LINK_GLADE = -pkg:glade-sharp-2.0
+LINK_FLICKRNET = -pkg:flickrnet
+LINK_DBUS = $(NDESK_DBUS_LIBS) $(NDESK_DBUS_GLIB_LIBS)
+LINK_DBUS_NO_GLIB = $(NDESK_DBUS_LIBS)
+LINK_MONO_ADDINS_DEPS = $(MONO_ADDINS_LIBS)
+LINK_MONO_ADDINS_SETUP_DEPS = $(MONO_ADDINS_SETUP_LIBS)
+LINK_MONO_ADDINS_GUI_DEPS = $(MONO_ADDINS_GUI_LIBS)
+
+# GIO
+REF_GIO =
+LINK_GIO = -r:$(DIR_GIOSHARP)/gio-sharp.dll
+LINK_GIO_DEPS = $(REF_GIO) $(LINK_GIO)
+
+# Gtk Beans
+REF_GTK_BEANS = $(LINK_GIO_DEPS)
+LINK_GTK_BEANS = -r:$(DIR_GTKSHARPBEANS)/gtk-sharp-beans.dll
+LINK_GTK_BEANS_DEPS = $(REF_GTK_BEANS) $(LINK_GTK_BEANS)
+
+# Uniqe
+REF_UNIQUE =
+LINK_UNIQUE = -r:$(DIR_UNIQUESHARP)/unique-sharp.dll
+LINK_UNIQUE_DEPS = $(REF_UNIQUE) $(LINK_UNIQUE)
+
+# Hyena
+REF_HYENA = $(LINK_SYSTEM) $(LINK_MONO_POSIX)
+LINK_HYENA = -r:$(DIR_BIN)/Hyena.dll
+LINK_HYENA_DEPS = $(REF_HYENA) $(LINK_HYENA)
+
+# Semweb
+REF_SEMWEB = $(LINK_SYSTEMDATA) $(LINK_HYENA_DEPS)
+LINK_SEMWEB = -r:$(DIR_BIN)/SemWeb.dll
+LINK_SEMWEB_DEPS = $(REF_SEMWEB) $(LINK_SEMWEB)
+
+# Hyena.Data.Sqlite
+REF_HYENA_DATA_SQLITE = $(LINK_SQLITE)
+LINK_HYENA_DATA_SQLITE = -r:$(DIR_BIN)/Hyena.Data.Sqlite.dll
+LINK_HYENA_DATA_SQLITE_DEPS = $(REF_HYENA_DATA_SQLITE) $(LINK_HYENA_DATA_SQLITE)
+
+# Hyena.Gui
+REF_HYENA_GUI = $(LINK_HYENA_DEPS)
+LINK_HYENA_GUI = -r:$(DIR_BIN)/Hyena.Gui.dll
+LINK_HENA_GUI_DEPS = $(REF_HYENA_GUI) $(LINK_HYENA_GUI)
+
+# FSpot.Cms
+REF_FSPOT_CMS = $(LINK_GTK)
+LINK_FSPOT_CMS = -r:$(DIR_BIN)/FSpot.Cms.dll
+LINK_FSPOT_CMS_DEPS = $(REF_FSPOT_CMS) $(LINK_FSPOT_CMS)
+
+# FSpot.Utils
+REF_FSPOT_UTILS = $(LINK_HYENA_DEPS) $(LINK_GTK) $(LINK_GIO) $(LINK_MONO_CAIRO)
+LINK_FSPOT_UTILS = -r:$(DIR_BIN)/FSpot.Utils.dll
+LINK_FSPOT_UTILS_DEPS = $(REF_FSPOT_UTILS) $(LINK_FSPOT_UTILS)
+
+# FSpot.Core
+REF_FSPOT_CORE = $(LINK_FSPOT_UTILS_DEPS) $(LINK_FSPOT_CMS_DEPS)
+LINK_FSPOT_CORE = -r:$(DIR_BIN)/FSpot.Core.dll
+LINK_FSPOT_CORE_DEPS = $(REF_FSPOT_CORE) $(LINK_FSPOT_CORE)
+
+# FSpot.Query
+REF_FSPOT_QUERY = $(LINK_FSPOT_CORE_DEPS)
+LINK_FSPOT_QUERY = -r:$(DIR_BIN)/FSpot.Query.dll
+LINK_FSPOT_QUERY_DEPS = $(REF_FSPOT_QUERY) $(LINK_FSPOT_QUERY)
+
+# FSpot.JobScheduler
+REF_FSPOT_JOB_SCHEDULER = $(LINK_HYENA_DEPS)
+LINK_FSPOT_JOB_SCHEDULER = -r:$(DIR_BIN)/FSpot.JobScheduler.dll
+LINK_FSPOT_JOB_SCHEDULER_DEPS = $(REF_FSPOT_JOB_SCHEDULER) $(LINK_FSPOT_JOB_SCHEDULER)
+
+# FSpot.Bling
+REF_FSPOT_BLING = $(LINK_GTK_BEANS_DEPS) $(LINK_GLIB)
+LINK_FSPOT_BLING = -r:$(DIR_BIN)/FSpot.Bling.dll
+LINK_FSPOT_BLING_DEPS = $(REF_FSPOT_BLING) $(LINK_FSPOT_BLING)
+
+# FSpot.Platform
+REF_FSPOT_PLATFORM = $(LINK_GCONF) $(LINK_GTK) $(LINK_FSPOT_CORE_DEPS) $(LINK_DBUS)
+LINK_FSPOT_PLATFORM = -r:$(DIR_BIN)/FSpot.Platform.dll
+LINK_FSPOT_PLATFORM_DEPS = $(REF_FSPOT_PLATFORM) $(LINK_FSPOT_PLATFORM)
+
+# FSpot.Widgets
+REF_FSPOT_WIDGETS = $(LINK_FSPOT_CORE_DEPS) $(LINK_FSPOT_BLING_DEPS)
+LINK_FSPOT_WIDGETS = -r:$(DIR_BIN)/FSpot.Widgets.dll
+LINK_FSPOT_WIDGETS_DEPS = $(REF_FSPOT_WIDGETS) $(LINK_FSPOT_WIDGETS)
+
+# FSpot (executable)
+REF_FSPOT = $(LINK_FSPOT_WIDGETS_DEPS) $(LINK_FSPOT_PLATFORM_DEPS) $(LINK_FSPOT_QUERY_DEPS) \
+ $(LINK_GLIB) $(LINK_MONO_ADDINS_DEPS) $(LINK_UNIQUE_DEPS) $(LINK_MONO_ADDINS_SETUP_DEPS) \
+ $(LINK_SEMWEB_DEPS) $(LINK_GLADE) $(LINK_MONODATA) $(LINK_MONO_DATA_SQLITECLIENT) \
+ $(LINK_MONO_ADDINS_GUI_DEPS) $(LINK_FSPOT_JOB_SCHEDULER_DEPS) $(LINK_ICSHARP_ZIP_LIB) \
+ $(LINK_GNOME)
+
+# FIXME: do not link executables
+LINK_FSPOT = -r:$(DIR_BIN)/f-spot.exe
+LINK_FSPOT_DEPS = $(REF_FSPOT) $(LINK_FSPOT)
+
+# Extensions
+REF_FSPOT_EXTENSION_BLACKOUTEDITOR = $(LINK_FSPOT_DEPS)
+REF_FSPOT_EXTENSION_BWEDITOR = $(LINK_FSPOT_DEPS) $(LINK_MONO_SIMD)
+REF_FSPOT_EXTENSION_FLIPEDITOR = $(LINK_FSPOT_DEPS)
+REF_FSPOT_EXTENSION_PIXELATEEDITOR = $(LINK_FSPOT_DEPS)
+REF_FSPOT_EXTENSION_RESIZEEDITOR = $(LINK_FSPOT_DEPS)
+REF_FSPOT_EXTENSION_CDEXPORT = $(LINK_FSPOT_DEPS)
+REF_FSPOT_EXTENSION_FACEBOOKEXPORT = $(LINK_FSPOT_DEPS) $(LINK_KEYRING)
+REF_FSPOT_EXTENSION_FLICKREXPORT = $(LINK_FSPOT_DEPS) $(LINK_FLICKRNET)
+REF_FSPOT_EXTENSION_FOLDEREXPORT = $(LINK_FSPOT_DEPS) $(LINK_SYSTEM_WEB)
+REF_FSPOT_EXTENSION_GALLERYEXPORT = $(LINK_FSPOT_DEPS)
+REF_MONO_GOOGLE = $(LINK_HYENA_DEPS)
+LINK_MONO_GOOGLE = -r:$(DIR_BIN)/Mono.Google.dll
+LINK_MONO_GOOGLE_DEPS = $(REF_MONO_GOOGLE) $(LINK_MONO_GOOGLE)
+REF_FSPOT_EXTENSION_PICASAWEBEXPORT = $(LINK_FSPOT_DEPS) $(LINK_MONO_GOOGLE) $(LINK_KEYRING)
+REF_SMUGMUGNET = $(LINK_FSPOT_DEPS)
+LINK_SMUGMUGNET = -r:$(DIR_BIN)/SmugMugNet.dll
+LINK_SMUGMUGNET_DEPS = $(REF_SMUGMUGNET) $(LINK_SMUGMUGNET)
+REF_FSPOT_EXTENSION_SMUGMUGEXPORT = $(LINK_SMUGMUGNET_DEPS) $(LINK_KEYRING)
+REF_MONO_TABBLO = $(LINK_HYENA_DEPS)
+LINK_MONO_TABBLO = -r:$(DIR_BIN)/Mono.Tabblo.dll
+LINK_MONO_TABBLO_DEPS = $(REF_MONO_TABBLO) $(LINK_MONO_TABBLO)
+REF_FSPOT_EXTENSION_TABBLOEXPORT = $(LINK_FSPOT_DEPS) $(LINK_KEYRING) $(LINK_MONO_TABBLO_DEPS)
+REF_FSPOT_EXTENSION_ZIPEXPORT = $(LINK_FSPOT_DEPS)
+REF_FSPOT_EXTENSION_CHANGEPHOTOPATH = $(LINK_FSPOT_DEPS)
+REF_FSPOT_EXTENSION_DEVELOPINUFRAW = $(LINK_FSPOT_DEPS)
+REF_FSPOT_EXTENSION_HASHJOB = $(LINK_FSPOT_DEPS)
+REF_FSPOT_EXTENSION_LIVEWEBGALLERY = $(LINK_FSPOT_DEPS)
+REF_FSPOT_EXTENSION_MERGEDB = $(LINK_FSPOT_DEPS)
+REF_FSPOT_EXTENSION_RAWPLUSJPEG = $(LINK_FSPOT_DEPS)
+REF_FSPOT_EXTENSION_RETROACTIVEROLL = $(LINK_FSPOT_DEPS)
+REF_FSPOT_EXTENSION_SCREENSAVERCONFIG = $(LINK_FSPOT_DEPS)
+REF_FSPOT_EXTENSION_COVERTRANSITION = $(LINK_FSPOT_DEPS)
+
+# Cute hack to replace a space with something
+colon := :
+empty :=
+space := $(empty) $(empty)
+
+# Build path to allow running uninstalled
+RUN_PATH = $(subst $(space),$(colon), $(MONO_BASE_PATH))
+UNIQUE_FILTER_PIPE = tr [:space:] \\n | sort | uniq
+BUILD_DATA_DIR = $(top_builddir)/bin/share/$(PACKAGE)
+
+# Since all other attempts failed, we currently go this way:
+# This code adds the file specified in ASSEMBLY_INFO_SOURCE to SOURCES_BUILD.
+# If no such file is specified, the default AssemblyInfo.cs is used.
+ASSEMBLY_INFO_SOURCE_REAL = \
+ $(shell if [ "$(ASSEMBLY_INFO_SOURCE)" ]; \
+ then \
+ echo "$(addprefix $(srcdir)/, $(ASSEMBLY_INFO_SOURCE))"; \
+ else \
+ echo "$(top_srcdir)/src/AssemblyInfo.cs"; \
+ fi)
+
+SOURCES_BUILD = $(addprefix $(srcdir)/, $(SOURCES)) \
+ $(ASSEMBLY_INFO_SOURCE_REAL)
+RESOURCES_EXPANDED = $(addprefix $(srcdir)/, $(RESOURCES))
+RESOURCES_BUILD = $(foreach resource, $(RESOURCES_EXPANDED), \
+ -resource:$(resource),$(notdir $(resource)))
+
+INSTALL_ICONS = $(top_srcdir)/build/private-icon-theme-installer "$(mkinstalldirs)" "$(INSTALL_DATA)"
+THEME_ICONS_SOURCE = $(wildcard $(srcdir)/ThemeIcons/*/*/*.png) $(wildcard $(srcdir)/ThemeIcons/scalable/*/*.svg)
+THEME_ICONS_RELATIVE = $(subst $(srcdir)/ThemeIcons/, , $(THEME_ICONS_SOURCE))
+ASSEMBLY_EXTENSION = $(strip $(patsubst library, dll, $(TARGET)))
+ASSEMBLY_FILE = $(top_builddir)/bin/$(ASSEMBLY).$(ASSEMBLY_EXTENSION)
+INSTALL_DIR_RESOLVED = $(firstword $(subst , $(DEFAULT_INSTALL_DIR), $(INSTALL_DIR)))
+ at ENABLE_TESTS_TRUE@ENABLE_TESTS_FLAG = "-define:ENABLE_TESTS"
+ at ENABLE_ATK_TRUE@ENABLE_ATK_FLAG = "-define:ENABLE_ATK"
+FILTERED_LINK = $(shell echo "$(LINK)" | $(UNIQUE_FILTER_PIPE))
+DEP_LINK = $(shell echo "$(LINK)" | $(UNIQUE_FILTER_PIPE) | sed s,-r:,,g | grep '$(top_builddir)/bin/')
+OUTPUT_FILES = \
+ $(ASSEMBLY_FILE) \
+ $(ASSEMBLY_FILE).mdb
+
+moduledir = $(INSTALL_DIR_RESOLVED)
+module_SCRIPTS = $(OUTPUT_FILES)
+EXTRA_DIST = $(SOURCES_BUILD) $(RESOURCES_EXPANDED) $(THEME_ICONS_SOURCE)
+CLEANFILES = $(OUTPUT_FILES) $(ASSEMBLY_FILE).config
+DISTCLEANFILES = *.pidb
+MAINTAINERCLEANFILES = Makefile.in
+all: all-am
+
+.SUFFIXES:
+$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(top_srcdir)/build/build.mk $(top_srcdir)/build/build.environment.mk $(top_srcdir)/build/build.rules.mk $(am__configure_deps)
+ @for dep in $?; do \
+ case '$(am__configure_deps)' in \
+ *$$dep*) \
+ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \
+ && { if test -f $@; then exit 0; else break; fi; }; \
+ exit 1;; \
+ esac; \
+ done; \
+ echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign src/Platform/Makefile'; \
+ $(am__cd) $(top_srcdir) && \
+ $(AUTOMAKE) --foreign src/Platform/Makefile
+.PRECIOUS: Makefile
+Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
+ @case '$?' in \
+ *config.status*) \
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \
+ *) \
+ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \
+ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \
+ esac;
+
+$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+
+$(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps)
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps)
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(am__aclocal_m4_deps):
+install-moduleSCRIPTS: $(module_SCRIPTS)
+ @$(NORMAL_INSTALL)
+ test -z "$(moduledir)" || $(MKDIR_P) "$(DESTDIR)$(moduledir)"
+ @list='$(module_SCRIPTS)'; test -n "$(moduledir)" || list=; \
+ for p in $$list; do \
+ if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \
+ if test -f "$$d$$p"; then echo "$$d$$p"; echo "$$p"; else :; fi; \
+ done | \
+ sed -e 'p;s,.*/,,;n' \
+ -e 'h;s|.*|.|' \
+ -e 'p;x;s,.*/,,;$(transform)' | sed 'N;N;N;s,\n, ,g' | \
+ $(AWK) 'BEGIN { files["."] = ""; dirs["."] = 1; } \
+ { d=$$3; if (dirs[d] != 1) { print "d", d; dirs[d] = 1 } \
+ if ($$2 == $$4) { files[d] = files[d] " " $$1; \
+ if (++n[d] == $(am__install_max)) { \
+ print "f", d, files[d]; n[d] = 0; files[d] = "" } } \
+ else { print "f", d "/" $$4, $$1 } } \
+ END { for (d in files) print "f", d, files[d] }' | \
+ while read type dir files; do \
+ if test "$$dir" = .; then dir=; else dir=/$$dir; fi; \
+ test -z "$$files" || { \
+ echo " $(INSTALL_SCRIPT) $$files '$(DESTDIR)$(moduledir)$$dir'"; \
+ $(INSTALL_SCRIPT) $$files "$(DESTDIR)$(moduledir)$$dir" || exit $$?; \
+ } \
+ ; done
+
+uninstall-moduleSCRIPTS:
+ @$(NORMAL_UNINSTALL)
+ @list='$(module_SCRIPTS)'; test -n "$(moduledir)" || exit 0; \
+ files=`for p in $$list; do echo "$$p"; done | \
+ sed -e 's,.*/,,;$(transform)'`; \
+ test -n "$$list" || exit 0; \
+ echo " ( cd '$(DESTDIR)$(moduledir)' && rm -f" $$files ")"; \
+ cd "$(DESTDIR)$(moduledir)" && rm -f $$files
+
+mostlyclean-libtool:
+ -rm -f *.lo
+
+clean-libtool:
+ -rm -rf .libs _libs
+tags: TAGS
+TAGS:
+
+ctags: CTAGS
+CTAGS:
+
+
+distdir: $(DISTFILES)
+ @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; \
+ if test -d $$d/$$file; then \
+ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \
+ if test -d "$(distdir)/$$file"; then \
+ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
+ fi; \
+ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
+ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \
+ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
+ fi; \
+ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \
+ else \
+ test -f "$(distdir)/$$file" \
+ || cp -p $$d/$$file "$(distdir)/$$file" \
+ || exit 1; \
+ fi; \
+ done
+check-am: all-am
+check: check-am
+all-am: Makefile $(SCRIPTS)
+installdirs:
+ for dir in "$(DESTDIR)$(moduledir)"; do \
+ test -z "$$dir" || $(MKDIR_P) "$$dir"; \
+ done
+install: install-am
+install-exec: install-exec-am
+install-data: install-data-am
+uninstall: uninstall-am
+
+install-am: all-am
+ @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
+
+installcheck: installcheck-am
+install-strip:
+ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+ `test -z '$(STRIP)' || \
+ echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install
+mostlyclean-generic:
+
+clean-generic:
+ -test -z "$(CLEANFILES)" || rm -f $(CLEANFILES)
+
+distclean-generic:
+ -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
+ -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES)
+ -test -z "$(DISTCLEANFILES)" || rm -f $(DISTCLEANFILES)
+
+maintainer-clean-generic:
+ @echo "This command is intended for maintainers to use"
+ @echo "it deletes files that may require special tools to rebuild."
+ -test -z "$(MAINTAINERCLEANFILES)" || rm -f $(MAINTAINERCLEANFILES)
+clean: clean-am
+
+clean-am: clean-generic clean-libtool mostlyclean-am
+
+distclean: distclean-am
+ -rm -f Makefile
+distclean-am: clean-am distclean-generic
+
+dvi: dvi-am
+
+dvi-am:
+
+html: html-am
+
+html-am:
+
+info: info-am
+
+info-am:
+
+install-data-am: install-data-local install-moduleSCRIPTS
+
+install-dvi: install-dvi-am
+
+install-dvi-am:
+
+install-exec-am:
+
+install-html: install-html-am
+
+install-html-am:
+
+install-info: install-info-am
+
+install-info-am:
+
+install-man:
+
+install-pdf: install-pdf-am
+
+install-pdf-am:
+
+install-ps: install-ps-am
+
+install-ps-am:
+
+installcheck-am:
+
+maintainer-clean: maintainer-clean-am
+ -rm -f Makefile
+maintainer-clean-am: distclean-am maintainer-clean-generic
+
+mostlyclean: mostlyclean-am
+
+mostlyclean-am: mostlyclean-generic mostlyclean-libtool
+
+pdf: pdf-am
+
+pdf-am:
+
+ps: ps-am
+
+ps-am:
+
+uninstall-am: uninstall-local uninstall-moduleSCRIPTS
+
+.MAKE: install-am install-strip
+
+.PHONY: all all-am check check-am clean clean-generic clean-libtool \
+ distclean distclean-generic distclean-libtool distdir dvi \
+ dvi-am html html-am info info-am install install-am \
+ install-data install-data-am install-data-local install-dvi \
+ install-dvi-am install-exec install-exec-am install-html \
+ install-html-am install-info install-info-am install-man \
+ install-moduleSCRIPTS install-pdf install-pdf-am install-ps \
+ install-ps-am install-strip installcheck installcheck-am \
+ installdirs maintainer-clean maintainer-clean-generic \
+ mostlyclean mostlyclean-generic mostlyclean-libtool pdf pdf-am \
+ ps ps-am uninstall uninstall-am uninstall-local \
+ uninstall-moduleSCRIPTS
+
+
+all: $(ASSEMBLY_FILE) theme-icons
+
+run:
+ @pushd $(top_builddir); \
+ make run; \
+ popd;
+
+# uncommented for now.
+# tests are currently excuted from Makefile in $(top_builddir)
+#test:
+# @pushd $(top_builddir)/tests; \
+# make $(ASSEMBLY); \
+# popd;
+
+build-debug:
+ @echo $(DEP_LINK)
+
+$(ASSEMBLY_FILE).mdb: $(ASSEMBLY_FILE)
+
+$(ASSEMBLY_FILE): $(SOURCES_BUILD) $(RESOURCES_EXPANDED) $(DEP_LINK)
+ @mkdir -p $(top_builddir)/bin
+ @if [ ! "x$(ENABLE_RELEASE)" = "xyes" ]; then \
+ $(top_srcdir)/build/dll-map-makefile-verifier $(srcdir)/Makefile.am $(srcdir)/$(notdir $@.config) && \
+ $(MONO) $(top_builddir)/build/dll-map-verifier.exe $(srcdir)/$(notdir $@.config) -iwinmm -ilibbanshee -ilibbnpx11 -ilibc -ilibc.so.6 -iintl -ilibmtp.dll -ilibigemacintegration.dylib -iCFRelease $(SOURCES_BUILD); \
+ fi;
+ $(MCS) \
+ $(GMCS_FLAGS) \
+ $(ASSEMBLY_BUILD_FLAGS) \
+ -nowarn:0278 -nowarn:0078 $$warn \
+ -define:HAVE_GTK_2_10 -define:NET_2_0 \
+ -debug -target:$(TARGET) -out:$@ \
+ $(BUILD_DEFINES) $(ENABLE_TESTS_FLAG) $(ENABLE_ATK_FLAG) \
+ $(FILTERED_LINK) $(RESOURCES_BUILD) $(SOURCES_BUILD)
+ @if [ -e $(srcdir)/$(notdir $@.config) ]; then \
+ cp $(srcdir)/$(notdir $@.config) $(top_builddir)/bin; \
+ fi;
+ @if [ ! -z "$(EXTRA_BUNDLE)" ]; then \
+ cp $(EXTRA_BUNDLE) $(top_builddir)/bin; \
+ fi;
+
+theme-icons: $(THEME_ICONS_SOURCE)
+ @$(INSTALL_ICONS) -il "$(BUILD_DATA_DIR)" "$(srcdir)" $(THEME_ICONS_RELATIVE)
+
+install-data-local: $(THEME_ICONS_SOURCE)
+ @$(INSTALL_ICONS) -i "$(DESTDIR)$(pkgdatadir)" "$(srcdir)" $(THEME_ICONS_RELATIVE)
+
+uninstall-local: $(THEME_ICONS_SOURCE)
+ @$(INSTALL_ICONS) -u "$(DESTDIR)$(pkgdatadir)" "$(srcdir)" $(THEME_ICONS_RELATIVE)
+
+# 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.
+.NOEXPORT:
diff --git a/src/Platform/Null/Desktop.cs b/src/Platform/Null/Desktop.cs
deleted file mode 100644
index 7f9b485..0000000
--- a/src/Platform/Null/Desktop.cs
+++ /dev/null
@@ -1,20 +0,0 @@
-/*
- * FSpot.Platform.Null.Desktop.cs
- *
- * Author(s):
- * Stephane Delcroix <stephane at delcroix.org>
- *
- * This is free software. See COPYING for details.
- */
-
-namespace FSpot.Platform
-{
- public class Desktop
- {
- public static void SetBackgroundImage (string path)
- {
- Log.Information ("SetBackgroundImage not implemented in the null platform");
- }
- }
-}
-
diff --git a/src/Platform/Null/PreferenceBackend.cs b/src/Platform/Null/PreferenceBackend.cs
deleted file mode 100644
index 1a91537..0000000
--- a/src/Platform/Null/PreferenceBackend.cs
+++ /dev/null
@@ -1,68 +0,0 @@
-/*
- * FSpot.NullPreferenceBackend.cs
- *
- * Author(s):
- * Stephane Delcroix <stephane at delcroix.org>
- *
- * This is free software. See COPYING for details.
- */
-
-namespace FSpot
-{
- public class NotifyEventArgs : System.EventArgs
- {
- string key;
- public string Key {
- get { return key; }
- }
-
- object val;
- public object Value {
- get { return val; }
- }
-
- public NotifyEventArgs (string key, object val)
- {
- this.key = key;
- this.val = val;
- }
- }
-
- public class NoSuchKeyException : Exception
- {
- public NoSuchKeyException () : base ()
- {
- }
-
- public NoSuchKeyException (string key) : base (key)
- {
- }
-
- public NoSuchKeyException (string key, Exception e) : base (key, e)
- {
- }
-
- protected NoSuchKeyException (SerializationInfo info, StreamingContext context) : base (info, context)
- {
- }
- }
-}
-
-namespace FSpot.Platform
-{
- public class PreferenceBackend : IPreferenceBackend
- {
- public object Get (string key)
- {
- throw new NoSuchKeyException (key);
- }
-
- public void Set (string key, object o)
- {
- }
-
- public void AddNotify (string key, EventHandler<NotifyEventArgs> handler)
- {
- }
- }
-}
diff --git a/src/Platform/Null/ScreenSaver.cs b/src/Platform/Null/ScreenSaver.cs
deleted file mode 100644
index 4123735..0000000
--- a/src/Platform/Null/ScreenSaver.cs
+++ /dev/null
@@ -1,27 +0,0 @@
-/*
- * FSpot.Platform.Null.ScreenSaver.cs
- *
- * Author(s)
- * Stephane Delcroix <stephane at delcroix.org>
- *
- * This is free software. See COPYING for details.
- */
-
-using System;
-
-using FSpot.Utils;
-
-namespace FSpot.Platform
-{
- public static class ScreenSaver
- {
- public static uint Inhibit (string reason ) {
- Log.Debug ("No way to inhibit screensaver on this platform (Null Platform)");
- return 1;
- }
-
- public static void UnInhibit () {
- Log.Debug ("No way to uninhibit screensaver on this platform (Null Platform)");
- }
- }
-}
diff --git a/src/Platform/Null/ThumbnailFactory.cs b/src/Platform/Null/ThumbnailFactory.cs
deleted file mode 100644
index 0a3666c..0000000
--- a/src/Platform/Null/ThumbnailFactory.cs
+++ /dev/null
@@ -1,80 +0,0 @@
-/*
- * FSpot.Platform.Null.ThumnailFactory.cs
- *
- * Author(s):
- * Stephane Delcroix <stephane at delcroix.org>
- *
- * Copyright 2008 Novell, Inc
- *
- * This is free software, See COPYING for details
- */
-
-using System;
-using FSpot.Utils;
-using System.Collections.Generic;
-using Gdk;
-
-namespace FSpot.Platform
-{
- public class ThumbnailFactory
- {
-
- static Dictionary<Uri, Pixbuf> cache = new Dictionary<Uri, Pixbuf>();
- public static void SaveThumbnail (Pixbuf pixbuf, Uri image_uri)
- {
- cache[image_uri]=pixbuf.Clone() as Pixbuf;
- }
-
- public static void SaveThumbnail (Pixbuf pixbuf, Uri image_uri, DateTime original_mtime)
- {
- cache[image_uri]=pixbuf.Clone() as Pixbuf;
- }
-
- public static void DeleteThumbnail (Uri image_uri)
- {
- cache.Remove (image_uri);
- }
-
- public static void MoveThumbnail (Uri from_uri, Uri to_uri)
- {
- Pixbuf p;
- if (cache.TryGetValue (from_uri, out p))
- cache[to_uri] = p;
- cache.Remove (from_uri);
- }
-
- public static bool ThumbnailIsValid (Pixbuf pixbuf, Uri image_uri)
- {
- return cache.ContainsKey(image_uri);
- }
-
- public static bool ThumbnailIsValid (Pixbuf pixbuf, Uri image_uri, DateTime mtime)
- {
- return cache.ContainsKey(image_uri);
- }
-
- public static Pixbuf LoadThumbnail (Uri image_uri)
- {
- Pixbuf p;
- if (cache.TryGetValue (image_uri, out p))
- return p.Clone () as Pixbuf;
-
- return null;
- }
-
- public static Pixbuf LoadThumbnail (Uri image_uri, int dest_width, int dest_height)
- {
- return null;
- }
-
- public static bool ThumbnailExists (Uri image_uri)
- {
- return cache.ContainsKey(image_uri);
- }
-
- public static bool ThumbnailIsRecent (Uri image_uri)
- {
- return cache.ContainsKey(image_uri);
- }
- }
-}
diff --git a/src/Platform/Null/WebProxy.cs b/src/Platform/Null/WebProxy.cs
deleted file mode 100644
index 4f0d683..0000000
--- a/src/Platform/Null/WebProxy.cs
+++ /dev/null
@@ -1,22 +0,0 @@
-/*
- * FSpot.Platform.Null.WebProxy.cs
- *
- * Author(s):
- * Stephane Delcroix <stephane at delcroix.org>
- *
- * This is free software. See COPYING for details.
- */
-
-using System;
-using FSpot.Utils;
-
-namespace FSpot.Platform
-{
- public class WebProxy {
- public static void Init ()
- {
- Log.Information ("No WebProxy in the Null Platform");
- }
- }
-}
-
diff --git a/src/Preferences.cs b/src/Preferences.cs
index 706ba47..a769000 100644
--- a/src/Preferences.cs
+++ b/src/Preferences.cs
@@ -3,6 +3,7 @@ using System;
using System.Collections.Generic;
using Mono.Unix;
using FSpot.Platform;
+using Hyena;
namespace FSpot
{
@@ -215,8 +216,7 @@ namespace FSpot
cache [key] = value;
Backend.Set (key, value);
} catch (Exception e){
- Console.WriteLine (e);
- Console.WriteLine ("Unable to set this :"+key);
+ Log.Exception ("Unable to set this :"+key, e);
}
}
}
diff --git a/src/PrintOperation.cs b/src/PrintOperation.cs
index 2b29827..a917db8 100644
--- a/src/PrintOperation.cs
+++ b/src/PrintOperation.cs
@@ -13,7 +13,7 @@ using System.Runtime.InteropServices;
using Mono.Unix;
using FSpot.Widgets;
-using FSpot.Utils;
+using Hyena;
namespace FSpot
{
@@ -110,7 +110,7 @@ namespace FSpot
DrawCropMarks (cr, x*w, y*h, w*.1);
if (x == ppx || y == ppy || p_index >= selected_photos.Length)
continue;
- using (ImageFile img = new ImageFile (selected_photos[p_index].DefaultVersionUri))
+ using (ImageFile img = new ImageFile (selected_photos[p_index].DefaultVersion.Uri))
{
Gdk.Pixbuf pixbuf;
try {
@@ -119,7 +119,7 @@ namespace FSpot
if (FSpot.ColorManagement.Profiles.TryGetValue (Preferences.Get<string> (Preferences.COLOR_MANAGEMENT_OUTPUT_PROFILE), out printer_profile))
FSpot.ColorManagement.ApplyProfile (pixbuf, img.GetProfile (), printer_profile);
} catch (Exception e) {
- Log.Exception ("Unable to load image " + selected_photos[p_index].DefaultVersionUri + "\n", e);
+ Log.Exception ("Unable to load image " + selected_photos[p_index].DefaultVersion.Uri + "\n", e);
// If the image is not found load error pixbuf
pixbuf = new Gdk.Pixbuf (PixbufUtils.ErrorPixbuf, 0, 0,
PixbufUtils.ErrorPixbuf.Width,
diff --git a/src/Query/ConditionWrapper.cs b/src/Query/ConditionWrapper.cs
new file mode 100644
index 0000000..e126807
--- /dev/null
+++ b/src/Query/ConditionWrapper.cs
@@ -0,0 +1,26 @@
+/*
+ * ConditionWrapper.cs
+ *
+ * Author(s)
+ * Stephane Delcroix <stephane at delcroix.org>
+ *
+ * This is free software. See COPYING for details.
+ */
+
+namespace FSpot.Query
+{
+ public class ConditionWrapper : IQueryCondition
+ {
+ string condition;
+
+ public ConditionWrapper (string condition)
+ {
+ this.condition = condition;
+ }
+
+ public string SqlClause ()
+ {
+ return condition;
+ }
+ }
+}
diff --git a/src/Query/FolderSet.cs b/src/Query/FolderSet.cs
index 70a13ea..1e284da 100644
--- a/src/Query/FolderSet.cs
+++ b/src/Query/FolderSet.cs
@@ -10,22 +10,23 @@
using System;
using System.Collections.Generic;
+using Hyena;
namespace FSpot.Query
{
public class FolderSet : IQueryCondition
{
- HashSet<Uri> uri_list;
+ HashSet<SafeUri> uri_list;
public FolderSet ()
{
- uri_list = new HashSet<Uri> ();
+ uri_list = new HashSet<SafeUri> ();
}
- public IEnumerable<Uri> Folders {
+ public IEnumerable<SafeUri> Folders {
get { return uri_list; }
- set { uri_list = (value == null) ? new HashSet<Uri> () : new HashSet<Uri> (value); }
+ set { uri_list = (value == null) ? new HashSet<SafeUri> () : new HashSet<SafeUri> (value); }
}
protected static string EscapeQuotes (string v)
@@ -41,7 +42,7 @@ namespace FSpot.Query
return null;
int i = 0;
- foreach (Uri uri in uri_list) {
+ foreach (var uri in uri_list) {
items[i] =
String.Format ("id IN (SELECT id FROM photos WHERE base_uri LIKE '{0}%')",
EscapeQuotes (uri.ToString ()));
diff --git a/src/Query/LogicalTerm.cs b/src/Query/LogicalTerm.cs
index f9d0b23..a3967d5 100644
--- a/src/Query/LogicalTerm.cs
+++ b/src/Query/LogicalTerm.cs
@@ -9,7 +9,7 @@
using System;
using System.Collections.Generic;
-using FSpot.Utils;
+using Hyena;
namespace FSpot.Query
{
@@ -62,7 +62,7 @@ namespace FSpot.Query
~TagTerm ()
{
- Log.Debug ("Finalizer called on {0}. Should be Disposed", GetType ());
+ Log.DebugFormat ("Finalizer called on {0}. Should be Disposed", GetType ());
if (tag != null)
tag.Dispose ();
}
diff --git a/src/Query/Makefile.am b/src/Query/Makefile.am
new file mode 100644
index 0000000..3ad8fc8
--- /dev/null
+++ b/src/Query/Makefile.am
@@ -0,0 +1,20 @@
+ASSEMBLY = FSpot.Query
+TARGET = library
+LINK = $(REF_FSPOT_QUERY)
+
+SOURCES = \
+ ConditionWrapper.cs \
+ DateRange.cs \
+ FolderSet.cs \
+ IOrderCondition.cs \
+ IQueryCondition.cs \
+ LogicalTerm.cs \
+ OrderByTime.cs \
+ RatingRange.cs \
+ RollSet.cs \
+ UntaggedCondition.cs \
+ Tests/LogicalTermTests.cs
+
+RESOURCES =
+
+include $(top_srcdir)/build/build.mk
diff --git a/src/Query/Makefile.in b/src/Query/Makefile.in
new file mode 100644
index 0000000..ec1d612
--- /dev/null
+++ b/src/Query/Makefile.in
@@ -0,0 +1,814 @@
+# Makefile.in generated by automake 1.11.1 from Makefile.am.
+# @configure_input@
+
+# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
+# 2003, 2004, 2005, 2006, 2007, 2008, 2009 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.
+
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
+# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
+# PARTICULAR PURPOSE.
+
+ at SET_MAKE@
+
+VPATH = @srcdir@
+pkgdatadir = $(datadir)/@PACKAGE@
+pkgincludedir = $(includedir)/@PACKAGE@
+pkglibdir = $(libdir)/@PACKAGE@
+pkglibexecdir = $(libexecdir)/@PACKAGE@
+am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
+install_sh_DATA = $(install_sh) -c -m 644
+install_sh_PROGRAM = $(install_sh) -c
+install_sh_SCRIPT = $(install_sh) -c
+INSTALL_HEADER = $(INSTALL_DATA)
+transform = $(program_transform_name)
+NORMAL_INSTALL = :
+PRE_INSTALL = :
+POST_INSTALL = :
+NORMAL_UNINSTALL = :
+PRE_UNINSTALL = :
+POST_UNINSTALL = :
+build_triplet = @build@
+host_triplet = @host@
+DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in \
+ $(top_srcdir)/build/build.environment.mk \
+ $(top_srcdir)/build/build.mk \
+ $(top_srcdir)/build/build.rules.mk
+ at ENABLE_TESTS_TRUE@am__append_1 = " $(NUNIT_LIBS)"
+subdir = src/Query
+ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
+am__aclocal_m4_deps = $(top_srcdir)/build/m4/shave/shave.m4 \
+ $(top_srcdir)/build/m4/shamrock/expansions.m4 \
+ $(top_srcdir)/build/m4/shamrock/gnome-doc.m4 \
+ $(top_srcdir)/build/m4/shamrock/mono.m4 \
+ $(top_srcdir)/build/m4/shamrock/nunit.m4 \
+ $(top_srcdir)/build/m4/shamrock/programs.m4 \
+ $(top_srcdir)/build/m4/f-spot/flickrnet.m4 \
+ $(top_srcdir)/build/m4/f-spot/gnome-keyring-sharp.m4 \
+ $(top_srcdir)/build/m4/f-spot/gtk-sharp.m4 \
+ $(top_srcdir)/build/m4/f-spot/mono-addins.m4 \
+ $(top_srcdir)/acinclude.m4 $(top_srcdir)/configure.ac
+am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
+ $(ACLOCAL_M4)
+mkinstalldirs = $(install_sh) -d
+CONFIG_HEADER = $(top_builddir)/config.h
+CONFIG_CLEAN_FILES =
+CONFIG_CLEAN_VPATH_FILES =
+am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`;
+am__vpath_adj = case $$p in \
+ $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \
+ *) f=$$p;; \
+ esac;
+am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`;
+am__install_max = 40
+am__nobase_strip_setup = \
+ srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'`
+am__nobase_strip = \
+ for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||"
+am__nobase_list = $(am__nobase_strip_setup); \
+ for p in $$list; do echo "$$p $$p"; done | \
+ sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \
+ $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \
+ if (++n[$$2] == $(am__install_max)) \
+ { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \
+ END { for (dir in files) print dir, files[dir] }'
+am__base_list = \
+ sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \
+ sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g'
+am__installdirs = "$(DESTDIR)$(moduledir)"
+SCRIPTS = $(module_SCRIPTS)
+DIST_SOURCES =
+DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
+ACLOCAL = @ACLOCAL@
+ACLOCAL_AMFLAGS = @ACLOCAL_AMFLAGS@
+ALL_LINGUAS = @ALL_LINGUAS@
+AMTAR = @AMTAR@
+AM_MAKEFLAGS = @AM_MAKEFLAGS@
+API_VERSION = @API_VERSION@
+AR = @AR@
+ASM_VERSION = @ASM_VERSION@
+AUTOCONF = @AUTOCONF@
+AUTOHEADER = @AUTOHEADER@
+AUTOMAKE = @AUTOMAKE@
+AWK = @AWK@
+CATALOGS = @CATALOGS@
+CATOBJEXT = @CATOBJEXT@
+CC = @CC@
+CCDEPMODE = @CCDEPMODE@
+CFLAGS = @CFLAGS@
+CPP = @CPP@
+CPPFLAGS = @CPPFLAGS@
+CSC_DEFINES = @CSC_DEFINES@
+CXX = @CXX@
+CXXCPP = @CXXCPP@
+CXXDEPMODE = @CXXDEPMODE@
+CXXFLAGS = @CXXFLAGS@
+CYGPATH_W = @CYGPATH_W@
+DATADIRNAME = @DATADIRNAME@
+DEFS = @DEFS@
+DEPDIR = @DEPDIR@
+DISPLAY_VERSION = @DISPLAY_VERSION@
+DISTCHECK_CONFIGURE_FLAGS = @DISTCHECK_CONFIGURE_FLAGS@
+DOC_USER_FORMATS = @DOC_USER_FORMATS@
+DSYMUTIL = @DSYMUTIL@
+DUMPBIN = @DUMPBIN@
+ECHO_C = @ECHO_C@
+ECHO_N = @ECHO_N@
+ECHO_T = @ECHO_T@
+EGREP = @EGREP@
+EXEEXT = @EXEEXT@
+EXIF_CFLAGS = @EXIF_CFLAGS@
+EXIF_LIBS = @EXIF_LIBS@
+EXIF_SOVERSION = @EXIF_SOVERSION@
+F77 = @F77@
+FC = @FC@
+FGREP = @FGREP@
+FLICKRNET_CFLAGS = @FLICKRNET_CFLAGS@
+FLICKRNET_LIBS = @FLICKRNET_LIBS@
+F_CFLAGS = @F_CFLAGS@
+F_LIBS = @F_LIBS@
+GAPI2CODEGEN = @GAPI2CODEGEN@
+GAPI2FIXUP = @GAPI2FIXUP@
+GAPI2PARSER = @GAPI2PARSER@
+GCONFTOOL = @GCONFTOOL@
+GCONF_SCHEMA_CONFIG_SOURCE = @GCONF_SCHEMA_CONFIG_SOURCE@
+GCONF_SCHEMA_FILE_DIR = @GCONF_SCHEMA_FILE_DIR@
+GCONF_SHARP_CFLAGS = @GCONF_SHARP_CFLAGS@
+GCONF_SHARP_LIBS = @GCONF_SHARP_LIBS@
+GETTEXT_PACKAGE = @GETTEXT_PACKAGE@
+GIO_CFLAGS = @GIO_CFLAGS@
+GIO_LIBS = @GIO_LIBS@
+GLIBSHARP_2_12_7_CFLAGS = @GLIBSHARP_2_12_7_CFLAGS@
+GLIBSHARP_2_12_7_LIBS = @GLIBSHARP_2_12_7_LIBS@
+GLIBSHARP_CFLAGS = @GLIBSHARP_CFLAGS@
+GLIBSHARP_LIBS = @GLIBSHARP_LIBS@
+GLIB_CFLAGS = @GLIB_CFLAGS@
+GLIB_GENMARSHAL = @GLIB_GENMARSHAL@
+GLIB_LIBS = @GLIB_LIBS@
+GLIB_MKENUMS = @GLIB_MKENUMS@
+GMOFILES = @GMOFILES@
+GMSGFMT = @GMSGFMT@
+GNOME_ICON_THEME_PREFIX = @GNOME_ICON_THEME_PREFIX@
+GNOME_SCREENSAVER_SAVERDIR = @GNOME_SCREENSAVER_SAVERDIR@
+GNOME_SCREENSAVER_THEMESDIR = @GNOME_SCREENSAVER_THEMESDIR@
+GNOME_SHARP_CFLAGS = @GNOME_SHARP_CFLAGS@
+GNOME_SHARP_LIBS = @GNOME_SHARP_LIBS@
+GOBJECT_QUERY = @GOBJECT_QUERY@
+GREP = @GREP@
+GTKSHARP_A11Y_CFLAGS = @GTKSHARP_A11Y_CFLAGS@
+GTKSHARP_A11Y_LIBS = @GTKSHARP_A11Y_LIBS@
+GTKSHARP_CFLAGS = @GTKSHARP_CFLAGS@
+GTKSHARP_LIBS = @GTKSHARP_LIBS@
+HELP_DIR = @HELP_DIR@
+ICONS_DIRECTORY = @ICONS_DIRECTORY@
+INSTALL = @INSTALL@
+INSTALL_DATA = @INSTALL_DATA@
+INSTALL_PROGRAM = @INSTALL_PROGRAM@
+INSTALL_SCRIPT = @INSTALL_SCRIPT@
+INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
+INSTOBJEXT = @INSTOBJEXT@
+INTLLIBS = @INTLLIBS@
+INTLTOOL_EXTRACT = @INTLTOOL_EXTRACT@
+INTLTOOL_MERGE = @INTLTOOL_MERGE@
+INTLTOOL_PERL = @INTLTOOL_PERL@
+INTLTOOL_UPDATE = @INTLTOOL_UPDATE@
+KEYRINGSHARP_CFLAGS = @KEYRINGSHARP_CFLAGS@
+KEYRINGSHARP_LIBS = @KEYRINGSHARP_LIBS@
+LCMS_CFLAGS = @LCMS_CFLAGS@
+LCMS_LIBS = @LCMS_LIBS@
+LD = @LD@
+LDFLAGS = @LDFLAGS@
+LIBEXIF_VERSION_CHECK_CFLAGS = @LIBEXIF_VERSION_CHECK_CFLAGS@
+LIBEXIF_VERSION_CHECK_LIBS = @LIBEXIF_VERSION_CHECK_LIBS@
+LIBJPEG = @LIBJPEG@
+LIBOBJS = @LIBOBJS@
+LIBS = @LIBS@
+LIBTOOL = @LIBTOOL@
+LIPO = @LIPO@
+LN_S = @LN_S@
+LTLIBOBJS = @LTLIBOBJS@
+MAINT = @MAINT@
+MAKEFLAGS = @MAKEFLAGS@
+MAKEINFO = @MAKEINFO@
+MCS = @MCS@
+MKDIR_P = @MKDIR_P@
+MKINSTALLDIRS = @MKINSTALLDIRS@
+MONO = @MONO@
+MONO_ADDINS_CFLAGS = @MONO_ADDINS_CFLAGS@
+MONO_ADDINS_GUI_CFLAGS = @MONO_ADDINS_GUI_CFLAGS@
+MONO_ADDINS_GUI_LIBS = @MONO_ADDINS_GUI_LIBS@
+MONO_ADDINS_LIBS = @MONO_ADDINS_LIBS@
+MONO_ADDINS_SETUP_CFLAGS = @MONO_ADDINS_SETUP_CFLAGS@
+MONO_ADDINS_SETUP_LIBS = @MONO_ADDINS_SETUP_LIBS@
+MONO_MODULE_CFLAGS = @MONO_MODULE_CFLAGS@
+MONO_MODULE_LIBS = @MONO_MODULE_LIBS@
+MSGFMT = @MSGFMT@
+MSGFMT_OPTS = @MSGFMT_OPTS@
+MSGMERGE = @MSGMERGE@
+NDESK_DBUS_CFLAGS = @NDESK_DBUS_CFLAGS@
+NDESK_DBUS_LIBS = @NDESK_DBUS_LIBS@
+NM = @NM@
+NMEDIT = @NMEDIT@
+NUNIT_CFLAGS = @NUNIT_CFLAGS@
+NUNIT_LIBS = @NUNIT_LIBS@
+OBJC = @OBJC@
+OBJDUMP = @OBJDUMP@
+OBJEXT = @OBJEXT@
+OMF_DIR = @OMF_DIR@
+OTOOL = @OTOOL@
+OTOOL64 = @OTOOL64@
+PACKAGE = @PACKAGE@
+PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
+PACKAGE_NAME = @PACKAGE_NAME@
+PACKAGE_STRING = @PACKAGE_STRING@
+PACKAGE_TARNAME = @PACKAGE_TARNAME@
+PACKAGE_URL = @PACKAGE_URL@
+PACKAGE_VERSION = @PACKAGE_VERSION@
+PATH_SEPARATOR = @PATH_SEPARATOR@
+PKG_CONFIG = @PKG_CONFIG@
+POFILES = @POFILES@
+POSUB = @POSUB@
+PO_IN_DATADIR_FALSE = @PO_IN_DATADIR_FALSE@
+PO_IN_DATADIR_TRUE = @PO_IN_DATADIR_TRUE@
+Q = @Q@
+RANLIB = @RANLIB@
+SED = @SED@
+SET_MAKE = @SET_MAKE@
+SHELL = @SHELL@
+STRIP = @STRIP@
+TURTLEDIR = @TURTLEDIR@
+UNIQUE_CFLAGS = @UNIQUE_CFLAGS@
+UNIQUE_LIBS = @UNIQUE_LIBS@
+USE_NLS = @USE_NLS@
+V = @V@
+VERSION = @VERSION@
+WARN_CFLAGS = @WARN_CFLAGS@
+XGETTEXT = @XGETTEXT@
+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_DUMPBIN = @ac_ct_DUMPBIN@
+am__include = @am__include@
+am__leading_dot = @am__leading_dot@
+am__quote = @am__quote@
+am__tar = @am__tar@
+am__untar = @am__untar@
+bindir = @bindir@
+build = @build@
+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@
+expanded_bindir = @expanded_bindir@
+expanded_datadir = @expanded_datadir@
+expanded_libdir = @expanded_libdir@
+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@
+lt_ECHO = @lt_ECHO@
+mandir = @mandir@
+mkdir_p = @mkdir_p@
+oldincludedir = @oldincludedir@
+pdfdir = @pdfdir@
+prefix = @prefix@
+program_transform_name = @program_transform_name@
+psdir = @psdir@
+sbindir = @sbindir@
+sharedstatedir = @sharedstatedir@
+shavedir = @shavedir@
+srcdir = @srcdir@
+sysconfdir = @sysconfdir@
+target_alias = @target_alias@
+top_build_prefix = @top_build_prefix@
+top_builddir = @top_builddir@
+top_srcdir = @top_srcdir@
+ASSEMBLY = FSpot.Query
+TARGET = library
+LINK = $(REF_FSPOT_QUERY) $(am__append_1)
+SOURCES = \
+ ConditionWrapper.cs \
+ DateRange.cs \
+ FolderSet.cs \
+ IOrderCondition.cs \
+ IQueryCondition.cs \
+ LogicalTerm.cs \
+ OrderByTime.cs \
+ RatingRange.cs \
+ RollSet.cs \
+ UntaggedCondition.cs \
+ Tests/LogicalTermTests.cs
+
+RESOURCES =
+
+# Initializers
+MONO_BASE_PATH =
+MONO_ADDINS_PATH =
+
+# Install Paths
+DEFAULT_INSTALL_DIR = $(pkglibdir)
+BACKENDS_INSTALL_DIR = $(DEFAULT_INSTALL_DIR)/Backends
+EXTENSIONS_INSTALL_DIR = $(DEFAULT_INSTALL_DIR)/Extensions
+DIR_DOCS = $(top_builddir)/docs
+DIR_EXTENSIONS = $(top_builddir)/extensions
+DIR_ICONS = $(top_builddir)/icons
+DIR_JPEGTRAN = $(top_builddir)/lib/libjpegtran
+DIR_LIBFSPOT = $(top_builddir)/lib/libfspot
+DIR_SEMWEB = $(top_builddir)/lib/semweb
+DIR_SRC = $(top_builddir)/src
+DIR_GIOSHARP = $(top_builddir)/lib/gio-sharp/gio
+DIR_GTKSHARPBEANS = $(top_builddir)/lib/gtk-sharp-beans
+DIR_UNIQUESHARP = $(top_builddir)/lib/unique-sharp/unique
+DIR_BIN = $(top_builddir)/bin
+
+# External libraries to link against, generated from configure
+LINK_SYSTEM = -r:System
+LINK_SYSTEMDATA = -r:System.Data
+LINK_SYSTEM_WEB = -r:System.Web
+LINK_MONO_POSIX = -r:Mono.Posix
+LINK_MONO_CAIRO = -r:Mono.Cairo
+LINK_MONO_SIMD = -r:Mono.Simd
+LINK_MONODATA = -r:Mono.Data
+LINK_MONO_DATA_SQLITECLIENT = -r:Mono.Data.SqliteClient
+LINK_ICSHARP_ZIP_LIB = -r:ICSharpCode.SharpZipLib
+LINK_KEYRING = $(KEYRINGSHARP_LIBS)
+LINK_GLIB = $(GLIBSHARP_LIBS)
+LINK_GTK = $(GTKSHARP_LIBS)
+LINK_GNOME = $(GNOME_SHARP_LIBS)
+LINK_GCONF = $(GCONF_SHARP_LIBS)
+LINK_GLADE = -pkg:glade-sharp-2.0
+LINK_FLICKRNET = -pkg:flickrnet
+LINK_DBUS = $(NDESK_DBUS_LIBS) $(NDESK_DBUS_GLIB_LIBS)
+LINK_DBUS_NO_GLIB = $(NDESK_DBUS_LIBS)
+LINK_MONO_ADDINS_DEPS = $(MONO_ADDINS_LIBS)
+LINK_MONO_ADDINS_SETUP_DEPS = $(MONO_ADDINS_SETUP_LIBS)
+LINK_MONO_ADDINS_GUI_DEPS = $(MONO_ADDINS_GUI_LIBS)
+
+# GIO
+REF_GIO =
+LINK_GIO = -r:$(DIR_GIOSHARP)/gio-sharp.dll
+LINK_GIO_DEPS = $(REF_GIO) $(LINK_GIO)
+
+# Gtk Beans
+REF_GTK_BEANS = $(LINK_GIO_DEPS)
+LINK_GTK_BEANS = -r:$(DIR_GTKSHARPBEANS)/gtk-sharp-beans.dll
+LINK_GTK_BEANS_DEPS = $(REF_GTK_BEANS) $(LINK_GTK_BEANS)
+
+# Uniqe
+REF_UNIQUE =
+LINK_UNIQUE = -r:$(DIR_UNIQUESHARP)/unique-sharp.dll
+LINK_UNIQUE_DEPS = $(REF_UNIQUE) $(LINK_UNIQUE)
+
+# Hyena
+REF_HYENA = $(LINK_SYSTEM) $(LINK_MONO_POSIX)
+LINK_HYENA = -r:$(DIR_BIN)/Hyena.dll
+LINK_HYENA_DEPS = $(REF_HYENA) $(LINK_HYENA)
+
+# Semweb
+REF_SEMWEB = $(LINK_SYSTEMDATA) $(LINK_HYENA_DEPS)
+LINK_SEMWEB = -r:$(DIR_BIN)/SemWeb.dll
+LINK_SEMWEB_DEPS = $(REF_SEMWEB) $(LINK_SEMWEB)
+
+# Hyena.Data.Sqlite
+REF_HYENA_DATA_SQLITE = $(LINK_SQLITE)
+LINK_HYENA_DATA_SQLITE = -r:$(DIR_BIN)/Hyena.Data.Sqlite.dll
+LINK_HYENA_DATA_SQLITE_DEPS = $(REF_HYENA_DATA_SQLITE) $(LINK_HYENA_DATA_SQLITE)
+
+# Hyena.Gui
+REF_HYENA_GUI = $(LINK_HYENA_DEPS)
+LINK_HYENA_GUI = -r:$(DIR_BIN)/Hyena.Gui.dll
+LINK_HENA_GUI_DEPS = $(REF_HYENA_GUI) $(LINK_HYENA_GUI)
+
+# FSpot.Cms
+REF_FSPOT_CMS = $(LINK_GTK)
+LINK_FSPOT_CMS = -r:$(DIR_BIN)/FSpot.Cms.dll
+LINK_FSPOT_CMS_DEPS = $(REF_FSPOT_CMS) $(LINK_FSPOT_CMS)
+
+# FSpot.Utils
+REF_FSPOT_UTILS = $(LINK_HYENA_DEPS) $(LINK_GTK) $(LINK_GIO) $(LINK_MONO_CAIRO)
+LINK_FSPOT_UTILS = -r:$(DIR_BIN)/FSpot.Utils.dll
+LINK_FSPOT_UTILS_DEPS = $(REF_FSPOT_UTILS) $(LINK_FSPOT_UTILS)
+
+# FSpot.Core
+REF_FSPOT_CORE = $(LINK_FSPOT_UTILS_DEPS) $(LINK_FSPOT_CMS_DEPS)
+LINK_FSPOT_CORE = -r:$(DIR_BIN)/FSpot.Core.dll
+LINK_FSPOT_CORE_DEPS = $(REF_FSPOT_CORE) $(LINK_FSPOT_CORE)
+
+# FSpot.Query
+REF_FSPOT_QUERY = $(LINK_FSPOT_CORE_DEPS)
+LINK_FSPOT_QUERY = -r:$(DIR_BIN)/FSpot.Query.dll
+LINK_FSPOT_QUERY_DEPS = $(REF_FSPOT_QUERY) $(LINK_FSPOT_QUERY)
+
+# FSpot.JobScheduler
+REF_FSPOT_JOB_SCHEDULER = $(LINK_HYENA_DEPS)
+LINK_FSPOT_JOB_SCHEDULER = -r:$(DIR_BIN)/FSpot.JobScheduler.dll
+LINK_FSPOT_JOB_SCHEDULER_DEPS = $(REF_FSPOT_JOB_SCHEDULER) $(LINK_FSPOT_JOB_SCHEDULER)
+
+# FSpot.Bling
+REF_FSPOT_BLING = $(LINK_GTK_BEANS_DEPS) $(LINK_GLIB)
+LINK_FSPOT_BLING = -r:$(DIR_BIN)/FSpot.Bling.dll
+LINK_FSPOT_BLING_DEPS = $(REF_FSPOT_BLING) $(LINK_FSPOT_BLING)
+
+# FSpot.Platform
+REF_FSPOT_PLATFORM = $(LINK_GCONF) $(LINK_GTK) $(LINK_FSPOT_CORE_DEPS) $(LINK_DBUS)
+LINK_FSPOT_PLATFORM = -r:$(DIR_BIN)/FSpot.Platform.dll
+LINK_FSPOT_PLATFORM_DEPS = $(REF_FSPOT_PLATFORM) $(LINK_FSPOT_PLATFORM)
+
+# FSpot.Widgets
+REF_FSPOT_WIDGETS = $(LINK_FSPOT_CORE_DEPS) $(LINK_FSPOT_BLING_DEPS)
+LINK_FSPOT_WIDGETS = -r:$(DIR_BIN)/FSpot.Widgets.dll
+LINK_FSPOT_WIDGETS_DEPS = $(REF_FSPOT_WIDGETS) $(LINK_FSPOT_WIDGETS)
+
+# FSpot (executable)
+REF_FSPOT = $(LINK_FSPOT_WIDGETS_DEPS) $(LINK_FSPOT_PLATFORM_DEPS) $(LINK_FSPOT_QUERY_DEPS) \
+ $(LINK_GLIB) $(LINK_MONO_ADDINS_DEPS) $(LINK_UNIQUE_DEPS) $(LINK_MONO_ADDINS_SETUP_DEPS) \
+ $(LINK_SEMWEB_DEPS) $(LINK_GLADE) $(LINK_MONODATA) $(LINK_MONO_DATA_SQLITECLIENT) \
+ $(LINK_MONO_ADDINS_GUI_DEPS) $(LINK_FSPOT_JOB_SCHEDULER_DEPS) $(LINK_ICSHARP_ZIP_LIB) \
+ $(LINK_GNOME)
+
+# FIXME: do not link executables
+LINK_FSPOT = -r:$(DIR_BIN)/f-spot.exe
+LINK_FSPOT_DEPS = $(REF_FSPOT) $(LINK_FSPOT)
+
+# Extensions
+REF_FSPOT_EXTENSION_BLACKOUTEDITOR = $(LINK_FSPOT_DEPS)
+REF_FSPOT_EXTENSION_BWEDITOR = $(LINK_FSPOT_DEPS) $(LINK_MONO_SIMD)
+REF_FSPOT_EXTENSION_FLIPEDITOR = $(LINK_FSPOT_DEPS)
+REF_FSPOT_EXTENSION_PIXELATEEDITOR = $(LINK_FSPOT_DEPS)
+REF_FSPOT_EXTENSION_RESIZEEDITOR = $(LINK_FSPOT_DEPS)
+REF_FSPOT_EXTENSION_CDEXPORT = $(LINK_FSPOT_DEPS)
+REF_FSPOT_EXTENSION_FACEBOOKEXPORT = $(LINK_FSPOT_DEPS) $(LINK_KEYRING)
+REF_FSPOT_EXTENSION_FLICKREXPORT = $(LINK_FSPOT_DEPS) $(LINK_FLICKRNET)
+REF_FSPOT_EXTENSION_FOLDEREXPORT = $(LINK_FSPOT_DEPS) $(LINK_SYSTEM_WEB)
+REF_FSPOT_EXTENSION_GALLERYEXPORT = $(LINK_FSPOT_DEPS)
+REF_MONO_GOOGLE = $(LINK_HYENA_DEPS)
+LINK_MONO_GOOGLE = -r:$(DIR_BIN)/Mono.Google.dll
+LINK_MONO_GOOGLE_DEPS = $(REF_MONO_GOOGLE) $(LINK_MONO_GOOGLE)
+REF_FSPOT_EXTENSION_PICASAWEBEXPORT = $(LINK_FSPOT_DEPS) $(LINK_MONO_GOOGLE) $(LINK_KEYRING)
+REF_SMUGMUGNET = $(LINK_FSPOT_DEPS)
+LINK_SMUGMUGNET = -r:$(DIR_BIN)/SmugMugNet.dll
+LINK_SMUGMUGNET_DEPS = $(REF_SMUGMUGNET) $(LINK_SMUGMUGNET)
+REF_FSPOT_EXTENSION_SMUGMUGEXPORT = $(LINK_SMUGMUGNET_DEPS) $(LINK_KEYRING)
+REF_MONO_TABBLO = $(LINK_HYENA_DEPS)
+LINK_MONO_TABBLO = -r:$(DIR_BIN)/Mono.Tabblo.dll
+LINK_MONO_TABBLO_DEPS = $(REF_MONO_TABBLO) $(LINK_MONO_TABBLO)
+REF_FSPOT_EXTENSION_TABBLOEXPORT = $(LINK_FSPOT_DEPS) $(LINK_KEYRING) $(LINK_MONO_TABBLO_DEPS)
+REF_FSPOT_EXTENSION_ZIPEXPORT = $(LINK_FSPOT_DEPS)
+REF_FSPOT_EXTENSION_CHANGEPHOTOPATH = $(LINK_FSPOT_DEPS)
+REF_FSPOT_EXTENSION_DEVELOPINUFRAW = $(LINK_FSPOT_DEPS)
+REF_FSPOT_EXTENSION_HASHJOB = $(LINK_FSPOT_DEPS)
+REF_FSPOT_EXTENSION_LIVEWEBGALLERY = $(LINK_FSPOT_DEPS)
+REF_FSPOT_EXTENSION_MERGEDB = $(LINK_FSPOT_DEPS)
+REF_FSPOT_EXTENSION_RAWPLUSJPEG = $(LINK_FSPOT_DEPS)
+REF_FSPOT_EXTENSION_RETROACTIVEROLL = $(LINK_FSPOT_DEPS)
+REF_FSPOT_EXTENSION_SCREENSAVERCONFIG = $(LINK_FSPOT_DEPS)
+REF_FSPOT_EXTENSION_COVERTRANSITION = $(LINK_FSPOT_DEPS)
+
+# Cute hack to replace a space with something
+colon := :
+empty :=
+space := $(empty) $(empty)
+
+# Build path to allow running uninstalled
+RUN_PATH = $(subst $(space),$(colon), $(MONO_BASE_PATH))
+UNIQUE_FILTER_PIPE = tr [:space:] \\n | sort | uniq
+BUILD_DATA_DIR = $(top_builddir)/bin/share/$(PACKAGE)
+
+# Since all other attempts failed, we currently go this way:
+# This code adds the file specified in ASSEMBLY_INFO_SOURCE to SOURCES_BUILD.
+# If no such file is specified, the default AssemblyInfo.cs is used.
+ASSEMBLY_INFO_SOURCE_REAL = \
+ $(shell if [ "$(ASSEMBLY_INFO_SOURCE)" ]; \
+ then \
+ echo "$(addprefix $(srcdir)/, $(ASSEMBLY_INFO_SOURCE))"; \
+ else \
+ echo "$(top_srcdir)/src/AssemblyInfo.cs"; \
+ fi)
+
+SOURCES_BUILD = $(addprefix $(srcdir)/, $(SOURCES)) \
+ $(ASSEMBLY_INFO_SOURCE_REAL)
+RESOURCES_EXPANDED = $(addprefix $(srcdir)/, $(RESOURCES))
+RESOURCES_BUILD = $(foreach resource, $(RESOURCES_EXPANDED), \
+ -resource:$(resource),$(notdir $(resource)))
+
+INSTALL_ICONS = $(top_srcdir)/build/private-icon-theme-installer "$(mkinstalldirs)" "$(INSTALL_DATA)"
+THEME_ICONS_SOURCE = $(wildcard $(srcdir)/ThemeIcons/*/*/*.png) $(wildcard $(srcdir)/ThemeIcons/scalable/*/*.svg)
+THEME_ICONS_RELATIVE = $(subst $(srcdir)/ThemeIcons/, , $(THEME_ICONS_SOURCE))
+ASSEMBLY_EXTENSION = $(strip $(patsubst library, dll, $(TARGET)))
+ASSEMBLY_FILE = $(top_builddir)/bin/$(ASSEMBLY).$(ASSEMBLY_EXTENSION)
+INSTALL_DIR_RESOLVED = $(firstword $(subst , $(DEFAULT_INSTALL_DIR), $(INSTALL_DIR)))
+ at ENABLE_TESTS_TRUE@ENABLE_TESTS_FLAG = "-define:ENABLE_TESTS"
+ at ENABLE_ATK_TRUE@ENABLE_ATK_FLAG = "-define:ENABLE_ATK"
+FILTERED_LINK = $(shell echo "$(LINK)" | $(UNIQUE_FILTER_PIPE))
+DEP_LINK = $(shell echo "$(LINK)" | $(UNIQUE_FILTER_PIPE) | sed s,-r:,,g | grep '$(top_builddir)/bin/')
+OUTPUT_FILES = \
+ $(ASSEMBLY_FILE) \
+ $(ASSEMBLY_FILE).mdb
+
+moduledir = $(INSTALL_DIR_RESOLVED)
+module_SCRIPTS = $(OUTPUT_FILES)
+EXTRA_DIST = $(SOURCES_BUILD) $(RESOURCES_EXPANDED) $(THEME_ICONS_SOURCE)
+CLEANFILES = $(OUTPUT_FILES) $(ASSEMBLY_FILE).config
+DISTCLEANFILES = *.pidb
+MAINTAINERCLEANFILES = Makefile.in
+all: all-am
+
+.SUFFIXES:
+$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(top_srcdir)/build/build.mk $(top_srcdir)/build/build.environment.mk $(top_srcdir)/build/build.rules.mk $(am__configure_deps)
+ @for dep in $?; do \
+ case '$(am__configure_deps)' in \
+ *$$dep*) \
+ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \
+ && { if test -f $@; then exit 0; else break; fi; }; \
+ exit 1;; \
+ esac; \
+ done; \
+ echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign src/Query/Makefile'; \
+ $(am__cd) $(top_srcdir) && \
+ $(AUTOMAKE) --foreign src/Query/Makefile
+.PRECIOUS: Makefile
+Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
+ @case '$?' in \
+ *config.status*) \
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \
+ *) \
+ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \
+ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \
+ esac;
+
+$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+
+$(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps)
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps)
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(am__aclocal_m4_deps):
+install-moduleSCRIPTS: $(module_SCRIPTS)
+ @$(NORMAL_INSTALL)
+ test -z "$(moduledir)" || $(MKDIR_P) "$(DESTDIR)$(moduledir)"
+ @list='$(module_SCRIPTS)'; test -n "$(moduledir)" || list=; \
+ for p in $$list; do \
+ if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \
+ if test -f "$$d$$p"; then echo "$$d$$p"; echo "$$p"; else :; fi; \
+ done | \
+ sed -e 'p;s,.*/,,;n' \
+ -e 'h;s|.*|.|' \
+ -e 'p;x;s,.*/,,;$(transform)' | sed 'N;N;N;s,\n, ,g' | \
+ $(AWK) 'BEGIN { files["."] = ""; dirs["."] = 1; } \
+ { d=$$3; if (dirs[d] != 1) { print "d", d; dirs[d] = 1 } \
+ if ($$2 == $$4) { files[d] = files[d] " " $$1; \
+ if (++n[d] == $(am__install_max)) { \
+ print "f", d, files[d]; n[d] = 0; files[d] = "" } } \
+ else { print "f", d "/" $$4, $$1 } } \
+ END { for (d in files) print "f", d, files[d] }' | \
+ while read type dir files; do \
+ if test "$$dir" = .; then dir=; else dir=/$$dir; fi; \
+ test -z "$$files" || { \
+ echo " $(INSTALL_SCRIPT) $$files '$(DESTDIR)$(moduledir)$$dir'"; \
+ $(INSTALL_SCRIPT) $$files "$(DESTDIR)$(moduledir)$$dir" || exit $$?; \
+ } \
+ ; done
+
+uninstall-moduleSCRIPTS:
+ @$(NORMAL_UNINSTALL)
+ @list='$(module_SCRIPTS)'; test -n "$(moduledir)" || exit 0; \
+ files=`for p in $$list; do echo "$$p"; done | \
+ sed -e 's,.*/,,;$(transform)'`; \
+ test -n "$$list" || exit 0; \
+ echo " ( cd '$(DESTDIR)$(moduledir)' && rm -f" $$files ")"; \
+ cd "$(DESTDIR)$(moduledir)" && rm -f $$files
+
+mostlyclean-libtool:
+ -rm -f *.lo
+
+clean-libtool:
+ -rm -rf .libs _libs
+tags: TAGS
+TAGS:
+
+ctags: CTAGS
+CTAGS:
+
+
+distdir: $(DISTFILES)
+ @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; \
+ if test -d $$d/$$file; then \
+ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \
+ if test -d "$(distdir)/$$file"; then \
+ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
+ fi; \
+ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
+ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \
+ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
+ fi; \
+ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \
+ else \
+ test -f "$(distdir)/$$file" \
+ || cp -p $$d/$$file "$(distdir)/$$file" \
+ || exit 1; \
+ fi; \
+ done
+check-am: all-am
+check: check-am
+all-am: Makefile $(SCRIPTS)
+installdirs:
+ for dir in "$(DESTDIR)$(moduledir)"; do \
+ test -z "$$dir" || $(MKDIR_P) "$$dir"; \
+ done
+install: install-am
+install-exec: install-exec-am
+install-data: install-data-am
+uninstall: uninstall-am
+
+install-am: all-am
+ @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
+
+installcheck: installcheck-am
+install-strip:
+ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+ `test -z '$(STRIP)' || \
+ echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install
+mostlyclean-generic:
+
+clean-generic:
+ -test -z "$(CLEANFILES)" || rm -f $(CLEANFILES)
+
+distclean-generic:
+ -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
+ -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES)
+ -test -z "$(DISTCLEANFILES)" || rm -f $(DISTCLEANFILES)
+
+maintainer-clean-generic:
+ @echo "This command is intended for maintainers to use"
+ @echo "it deletes files that may require special tools to rebuild."
+ -test -z "$(MAINTAINERCLEANFILES)" || rm -f $(MAINTAINERCLEANFILES)
+clean: clean-am
+
+clean-am: clean-generic clean-libtool mostlyclean-am
+
+distclean: distclean-am
+ -rm -f Makefile
+distclean-am: clean-am distclean-generic
+
+dvi: dvi-am
+
+dvi-am:
+
+html: html-am
+
+html-am:
+
+info: info-am
+
+info-am:
+
+install-data-am: install-data-local install-moduleSCRIPTS
+
+install-dvi: install-dvi-am
+
+install-dvi-am:
+
+install-exec-am:
+
+install-html: install-html-am
+
+install-html-am:
+
+install-info: install-info-am
+
+install-info-am:
+
+install-man:
+
+install-pdf: install-pdf-am
+
+install-pdf-am:
+
+install-ps: install-ps-am
+
+install-ps-am:
+
+installcheck-am:
+
+maintainer-clean: maintainer-clean-am
+ -rm -f Makefile
+maintainer-clean-am: distclean-am maintainer-clean-generic
+
+mostlyclean: mostlyclean-am
+
+mostlyclean-am: mostlyclean-generic mostlyclean-libtool
+
+pdf: pdf-am
+
+pdf-am:
+
+ps: ps-am
+
+ps-am:
+
+uninstall-am: uninstall-local uninstall-moduleSCRIPTS
+
+.MAKE: install-am install-strip
+
+.PHONY: all all-am check check-am clean clean-generic clean-libtool \
+ distclean distclean-generic distclean-libtool distdir dvi \
+ dvi-am html html-am info info-am install install-am \
+ install-data install-data-am install-data-local install-dvi \
+ install-dvi-am install-exec install-exec-am install-html \
+ install-html-am install-info install-info-am install-man \
+ install-moduleSCRIPTS install-pdf install-pdf-am install-ps \
+ install-ps-am install-strip installcheck installcheck-am \
+ installdirs maintainer-clean maintainer-clean-generic \
+ mostlyclean mostlyclean-generic mostlyclean-libtool pdf pdf-am \
+ ps ps-am uninstall uninstall-am uninstall-local \
+ uninstall-moduleSCRIPTS
+
+
+all: $(ASSEMBLY_FILE) theme-icons
+
+run:
+ @pushd $(top_builddir); \
+ make run; \
+ popd;
+
+# uncommented for now.
+# tests are currently excuted from Makefile in $(top_builddir)
+#test:
+# @pushd $(top_builddir)/tests; \
+# make $(ASSEMBLY); \
+# popd;
+
+build-debug:
+ @echo $(DEP_LINK)
+
+$(ASSEMBLY_FILE).mdb: $(ASSEMBLY_FILE)
+
+$(ASSEMBLY_FILE): $(SOURCES_BUILD) $(RESOURCES_EXPANDED) $(DEP_LINK)
+ @mkdir -p $(top_builddir)/bin
+ @if [ ! "x$(ENABLE_RELEASE)" = "xyes" ]; then \
+ $(top_srcdir)/build/dll-map-makefile-verifier $(srcdir)/Makefile.am $(srcdir)/$(notdir $@.config) && \
+ $(MONO) $(top_builddir)/build/dll-map-verifier.exe $(srcdir)/$(notdir $@.config) -iwinmm -ilibbanshee -ilibbnpx11 -ilibc -ilibc.so.6 -iintl -ilibmtp.dll -ilibigemacintegration.dylib -iCFRelease $(SOURCES_BUILD); \
+ fi;
+ $(MCS) \
+ $(GMCS_FLAGS) \
+ $(ASSEMBLY_BUILD_FLAGS) \
+ -nowarn:0278 -nowarn:0078 $$warn \
+ -define:HAVE_GTK_2_10 -define:NET_2_0 \
+ -debug -target:$(TARGET) -out:$@ \
+ $(BUILD_DEFINES) $(ENABLE_TESTS_FLAG) $(ENABLE_ATK_FLAG) \
+ $(FILTERED_LINK) $(RESOURCES_BUILD) $(SOURCES_BUILD)
+ @if [ -e $(srcdir)/$(notdir $@.config) ]; then \
+ cp $(srcdir)/$(notdir $@.config) $(top_builddir)/bin; \
+ fi;
+ @if [ ! -z "$(EXTRA_BUNDLE)" ]; then \
+ cp $(EXTRA_BUNDLE) $(top_builddir)/bin; \
+ fi;
+
+theme-icons: $(THEME_ICONS_SOURCE)
+ @$(INSTALL_ICONS) -il "$(BUILD_DATA_DIR)" "$(srcdir)" $(THEME_ICONS_RELATIVE)
+
+install-data-local: $(THEME_ICONS_SOURCE)
+ @$(INSTALL_ICONS) -i "$(DESTDIR)$(pkgdatadir)" "$(srcdir)" $(THEME_ICONS_RELATIVE)
+
+uninstall-local: $(THEME_ICONS_SOURCE)
+ @$(INSTALL_ICONS) -u "$(DESTDIR)$(pkgdatadir)" "$(srcdir)" $(THEME_ICONS_RELATIVE)
+
+# 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.
+.NOEXPORT:
diff --git a/src/Query/OrderByTime.cs b/src/Query/OrderByTime.cs
index 3383fd0..14cf4c2 100644
--- a/src/Query/OrderByTime.cs
+++ b/src/Query/OrderByTime.cs
@@ -9,7 +9,6 @@
*/
using System;
-using FSpot.Utils;
namespace FSpot.Query {
public class OrderByTime : IQueryCondition, IOrderCondition
@@ -29,7 +28,8 @@ namespace FSpot.Query {
public string SqlClause ()
{
- return String.Format (" time {0}, filename {0} ", asc ? "ASC" : "DESC");
+ // filenames must always appear in alphabetical order if times are the same
+ return String.Format (" time {0}, filename ASC ", asc ? "ASC" : "DESC");
}
}
}
diff --git a/src/Query/TagConditionWrapper.cs b/src/Query/TagConditionWrapper.cs
deleted file mode 100644
index ce6359a..0000000
--- a/src/Query/TagConditionWrapper.cs
+++ /dev/null
@@ -1,26 +0,0 @@
-/*
- * TagConditionWrapper.cs
- *
- * Author(s)
- * Stephane Delcroix <stephane at delcroix.org>
- *
- * This is free software. See COPYING for details.
- */
-
-namespace FSpot.Query
-{
- public class TagConditionWrapper : IQueryCondition
- {
- string condition;
-
- public TagConditionWrapper (string condition)
- {
- this.condition = condition;
- }
-
- public string SqlClause ()
- {
- return condition;
- }
- }
-}
diff --git a/src/Query/Tests/LogicalTermTests.cs b/src/Query/Tests/LogicalTermTests.cs
new file mode 100644
index 0000000..6911b24
--- /dev/null
+++ b/src/Query/Tests/LogicalTermTests.cs
@@ -0,0 +1,39 @@
+#if ENABLE_TESTS
+using NUnit.Framework;
+
+namespace FSpot.Query.Tests
+{
+ [TestFixture]
+ public class LogicalTermTests
+ {
+ [Test]
+ public void SomeTests ()
+ {
+ Tag t1 = new Tag (null, 1, "tag1");
+ Tag t2 = new Tag (null, 2, "tag2");
+ Tag t3 = new Tag (null, 3, "tag3");
+ Tag t4 = new Tag (null, 4, "tag4");
+ Tag t5 = new Tag (null, 5, "tag5");
+
+ TagTerm tt1 = new TagTerm (t1);
+ TagTerm tt2 = new TagTerm (t2);
+ TagTerm tt3 = new TagTerm (t3);
+ TagTerm tt4 = new TagTerm (t4);
+ TagTerm tt5 = new TagTerm (t5);
+
+ object [] tests = {
+ " (photos.id IN (SELECT photo_id FROM photo_tags WHERE tag_id = 1)) ", tt1,
+ " (photos.id IN (SELECT photo_id FROM photo_tags WHERE tag_id IN (2, 3))) ", new OrTerm (tt2, tt3),
+ " (photos.id IN (SELECT photo_id FROM photo_tags WHERE tag_id IN (3, 4, 5))) ", new OrTerm (tt3, tt4, tt5),
+
+ };
+
+ for (int i=0; i < tests.Length; i+=2) {
+ //System.Console.WriteLine ((tests[i+1] as LogicalTerm).SqlClause ());
+ //System.Console.WriteLine (tests[i]);
+ Assert.AreEqual (tests[i] as string, (tests[i+1] as LogicalTerm).SqlClause ());
+ }
+ }
+ }
+}
+#endif
diff --git a/src/QueryWidget.cs b/src/QueryWidget.cs
index c77e5e5..fd7fc49 100644
--- a/src/QueryWidget.cs
+++ b/src/QueryWidget.cs
@@ -18,7 +18,7 @@ using Gtk;
using FSpot.Utils;
using FSpot.Query;
using FSpot.Widgets;
-
+using Hyena;
namespace FSpot {
@@ -38,7 +38,6 @@ namespace FSpot {
Gtk.HBox warning_box;
Gtk.Button clear_button;
Gtk.Button refresh_button;
- Gtk.Tooltips tips = new Gtk.Tooltips ();
public LogicWidget Logic {
get { return logic_widget; }
@@ -50,8 +49,6 @@ namespace FSpot {
box.Spacing = 6;
box.BorderWidth = 2;
- tips.Enable ();
-
this.query = query;
query.Changed += HandleChanged;
@@ -100,15 +97,15 @@ namespace FSpot {
clear_button.Add (new Gtk.Image ("gtk-close", Gtk.IconSize.Button));
clear_button.Clicked += HandleClearButtonClicked;
clear_button.Relief = Gtk.ReliefStyle.None;
+ clear_button.TooltipText = Catalog.GetString("Clear search");
box.PackEnd (clear_button, false, false, 0);
- tips.SetTip (clear_button, Catalog.GetString("Clear search"), null);
refresh_button = new Gtk.Button ();
refresh_button.Add (new Gtk.Image ("gtk-refresh", Gtk.IconSize.Button));
refresh_button.Clicked += HandleRefreshButtonClicked;
refresh_button.Relief = Gtk.ReliefStyle.None;
+ refresh_button.TooltipText = Catalog.GetString("Refresh search");
box.PackEnd (refresh_button, false, false, 0);
- tips.SetTip (refresh_button, Catalog.GetString("Refresh search"), null);
Gtk.Label warning = new Gtk.Label (Catalog.GetString ("No matching photos found"));
warning_box.PackStart (warning, false, false, 0);
@@ -152,13 +149,11 @@ namespace FSpot {
public void ShowBar ()
{
Show ();
- ((Gtk.Label)MainWindow.Toplevel.FindByTag.Child).TextWithMnemonic = Catalog.GetString ("Hide _Find Bar");
}
public void HideBar ()
{
Hide ();
- ((Gtk.Label)MainWindow.Toplevel.FindByTag.Child).TextWithMnemonic = Catalog.GetString ("Show _Find Bar");
}
public void HandleChanged (IBrowsableCollection collection)
@@ -220,7 +215,7 @@ namespace FSpot {
return logic_widget.TagRequired (tag);
}
- public void SetFolders (IEnumerable<Uri> uri_list)
+ public void SetFolders (IEnumerable<SafeUri> uri_list)
{
folder_query_widget.SetFolders (uri_list);
query.RequestReload ();
diff --git a/src/QueuedSqliteDatabase.cs b/src/QueuedSqliteDatabase.cs
index 86a387c..e6fec3f 100644
--- a/src/QueuedSqliteDatabase.cs
+++ b/src/QueuedSqliteDatabase.cs
@@ -32,7 +32,7 @@ using System.Threading;
using System.Collections.Generic;
using Mono.Data.SqliteClient;
-using FSpot.Utils;
+using Hyena;
namespace Banshee.Database
{
@@ -54,7 +54,6 @@ namespace Banshee.Database
private int version;
private Thread queue_thread;
private volatile bool dispose_requested = false;
- private string dbpath;
private volatile bool connected;
/// <summary>
@@ -87,8 +86,6 @@ namespace Banshee.Database
public QueuedSqliteDatabase(string dbpath)
{
- this.dbpath = dbpath;
-
// Connect
if(connection == null) {
version = GetFileVersion(dbpath);
@@ -110,7 +107,7 @@ namespace Banshee.Database
~QueuedSqliteDatabase ()
{
- Log.Debug ("Finalizer called on {0}. Should be Disposed", GetType ());
+ Log.DebugFormat ("Finalizer called on {0}. Should be Disposed", GetType ());
Dispose (false);
}
@@ -391,6 +388,7 @@ namespace Banshee.Database
Thread.Sleep(SLEEP_TIME);
Execute();
} catch(Exception e) {
+ Log.DebugFormat ("Broken query: {0}", command.CommandText);
execution_exception = e;
if (command_type == Banshee.Database.CommandType.ExecuteNonQuery) {
throw execution_exception;
diff --git a/src/RotateCommand.cs b/src/RotateCommand.cs
index d7c80ea..23afa4c 100644
--- a/src/RotateCommand.cs
+++ b/src/RotateCommand.cs
@@ -18,6 +18,7 @@ using FSpot;
using FSpot.Png;
using FSpot.UI.Dialog;
+using Hyena;
using FSpot.Utils;
using Mono.Unix;
@@ -56,19 +57,9 @@ namespace FSpot {
done = false;
}
- private static void RotateCoefficients (string original_path, RotateDirection direction)
- {
- string temporary_path = original_path + ".tmp"; // FIXME make it unique
- JpegUtils.Transform (original_path, temporary_path,
- direction == RotateDirection.Clockwise ? JpegUtils.TransformType.Rotate90
- : JpegUtils.TransformType.Rotate270);
-
- Utils.Unix.Rename (temporary_path, original_path);
- }
-
private static void RotateOrientation (string original_path, RotateDirection direction)
{
- using (FSpot.ImageFile img = FSpot.ImageFile.Create (original_path)) {
+ using (FSpot.ImageFile img = FSpot.ImageFile.Create (new SafeUri (original_path))) {
if (img is JpegFile) {
FSpot.JpegFile jimg = img as FSpot.JpegFile;
PixbufOrientation orientation = direction == RotateDirection.Clockwise
@@ -124,7 +115,7 @@ namespace FSpot {
if (done)
return false;
- original_path = item.DefaultVersionUri.LocalPath;
+ original_path = item.DefaultVersion.Uri.LocalPath;
done = true;
if ((File.GetAttributes(original_path) & FileAttributes.ReadOnly) == FileAttributes.ReadOnly) {
@@ -133,10 +124,6 @@ namespace FSpot {
Rotate (original_path, direction);
- Gdk.Pixbuf thumb = FSpot.ThumbnailGenerator.Create (UriUtils.PathToFileUri (original_path));
- if (thumb != null)
- thumb.Dispose ();
-
return !done;
}
}
@@ -219,11 +206,11 @@ public class RotateCommand {
} catch (GLib.GException) {
readonly_count++;
} catch (DirectoryNotFoundException e) {
- RunGenericError (e, op.Items [op.Index].DefaultVersionUri.LocalPath, Catalog.GetString ("Directory not found"));
+ RunGenericError (e, op.Items [op.Index].DefaultVersion.Uri.LocalPath, Catalog.GetString ("Directory not found"));
} catch (FileNotFoundException e) {
- RunGenericError (e, op.Items [op.Index].DefaultVersionUri.LocalPath, Catalog.GetString ("File not found"));
+ RunGenericError (e, op.Items [op.Index].DefaultVersion.Uri.LocalPath, Catalog.GetString ("File not found"));
} catch (Exception e) {
- RunGenericError (e, op.Items [op.Index].DefaultVersionUri.LocalPath);
+ RunGenericError (e, op.Items [op.Index].DefaultVersion.Uri.LocalPath);
}
index ++;
}
diff --git a/src/SelectionDataExtensions.cs b/src/SelectionDataExtensions.cs
index d9d4634..83206cb 100644
--- a/src/SelectionDataExtensions.cs
+++ b/src/SelectionDataExtensions.cs
@@ -43,7 +43,7 @@ namespace FSpot
int size = sizeof (uint);
int length = selection_data.Length / size;
- PhotoStore photo_store = MainWindow.Toplevel.Database.Photos;
+ PhotoStore photo_store = App.Instance.Database.Photos;
Photo [] photos = new Photo [length];
@@ -77,7 +77,7 @@ namespace FSpot
int size = sizeof (uint);
int length = selection_data.Length / size;
- TagStore tag_store = MainWindow.Toplevel.Database.Tags;
+ TagStore tag_store = App.Instance.Database.Tags;
Tag [] tags = new Tag [length];
diff --git a/src/SendEmail.cs b/src/SendEmail.cs
index 29ce5d1..aae8ffb 100644
--- a/src/SendEmail.cs
+++ b/src/SendEmail.cs
@@ -4,6 +4,7 @@
* Author(s)
* Bengt Thuree <bengt at thuree.com>
* Stephane Delcroix <stephane at delcroix.org>
+ * Paul Lange <palango at gmx.de>
*
* This is free software. See COPYING for details.
*/
@@ -14,24 +15,25 @@ using System;
using FSpot.Widgets;
using FSpot.Filters;
-using FSpot.Utils;
using FSpot.UI.Dialog;
+using Hyena;
using Mono.Unix;
-namespace FSpot {
- public class SendEmail : GladeDialog {
+namespace FSpot
+{
+ public class SendEmail : BuilderDialog
+ {
Window parent_window;
- PhotoQuery query;
- [Glade.Widget] private ScrolledWindow tray_scrolled;
- [Glade.Widget] private Button ok_button;
- [Glade.Widget] private Label NumberOfPictures, TotalOriginalSize, ApproxNewSize;
- [Glade.Widget] private RadioButton tiny_size, small_size, medium_size,
- large_size, x_large_size, original_size;
- [Glade.Widget] private CheckButton rotate_check;
+#pragma warning disable 0649
+ [GtkBeans.Builder.Object] private ScrolledWindow tray_scrolled;
+ [GtkBeans.Builder.Object] private Label NumberOfPictures, TotalOriginalSize, ApproxNewSize;
+ [GtkBeans.Builder.Object] private RadioButton tiny_size, small_size, medium_size,
+ large_size, x_large_size, original_size;
+ [GtkBeans.Builder.Object] private CheckButton rotate_check;
+#pragma warning restore 0649
- bool clean;
long Orig_Photo_Size = 0;
double scale_percentage = 0.3;
@@ -43,22 +45,18 @@ namespace FSpot {
static int NoOfSizes = sizes.Length;
double[] avg_scale = new double [NoOfSizes];
- System.Collections.ArrayList tmp_paths; // temporary resized image file name
string tmp_mail_dir; // To temporary keep the resized images
bool force_original = false;
- ThreadProgressDialog progress_dialog;
- System.Threading.Thread command_thread;
IBrowsableCollection selection;
- public SendEmail (IBrowsableCollection selection, Window parent_window) : base ("mail_dialog")
+ public SendEmail (IBrowsableCollection selection, Window parent_window) : base ("mail_dialog.ui", "mail_dialog")
{
this.selection = selection;
this.parent_window = parent_window;
- for (int i = 0; i < selection.Count; i++) {
- Photo p = selection[i] as Photo;
- if (FileFactory.NewForUri (p.DefaultVersionUri).QueryInfo ("standard::content-type", FileQueryInfoFlags.None, null).ContentType != "image/jpeg")
+ foreach (var p in selection.Items) {
+ if (FileFactory.NewForUri (p.DefaultVersion.Uri).QueryInfo ("standard::content-type", FileQueryInfoFlags.None, null).ContentType != "image/jpeg")
force_original = true;
}
@@ -69,7 +67,7 @@ namespace FSpot {
medium_size.Sensitive = false;
large_size.Sensitive = false;
x_large_size.Sensitive = false;
- } else
+ } else
switch (Preferences.Get<int> (Preferences.EXPORT_EMAIL_SIZE)) {
case 0 : original_size.Active = true; break;
case 1 : tiny_size.Active = true; break;
@@ -85,13 +83,12 @@ namespace FSpot {
tray_scrolled.Add (new TrayView (selection));
- Dialog.Modal = false;
+ Modal = false;
// Calculate total original filesize
- for (int i = 0; i < selection.Count; i++) {
- Photo photo = selection[i] as Photo;
+ foreach (var photo in selection.Items) {
try {
- Orig_Photo_Size += FileFactory.NewForUri (photo.DefaultVersionUri).QueryInfo ("standard::size", FileQueryInfoFlags.None, null).Size;
+ Orig_Photo_Size += FileFactory.NewForUri (photo.DefaultVersion.Uri).QueryInfo ("standard::size", FileQueryInfoFlags.None, null).Size;
} catch {
}
}
@@ -101,16 +98,16 @@ namespace FSpot {
// Calculate approximate size shrinking, use first photo, and shrink to medium size as base.
- Photo scalephoto = selection [0] as Photo;
+ var scalephoto = selection [0];
if (scalephoto != null && !force_original) {
// Get first photos file size
- long orig_size = FileFactory.NewForUri (scalephoto.DefaultVersionUri).QueryInfo ("standard::size", FileQueryInfoFlags.None, null).Size;
+ long orig_size = FileFactory.NewForUri (scalephoto.DefaultVersion.Uri).QueryInfo ("standard::size", FileQueryInfoFlags.None, null).Size;
FilterSet filters = new FilterSet ();
filters.Add (new ResizeFilter ((uint)(sizes [3])));
long new_size;
- using (FilterRequest request = new FilterRequest (scalephoto.DefaultVersionUri)) {
+ using (FilterRequest request = new FilterRequest (scalephoto.DefaultVersion.Uri)) {
filters.Convert (request);
new_size = FileFactory.NewForUri (request.Current).QueryInfo ("standard::size", FileQueryInfoFlags.None, null).Size;
}
@@ -123,13 +120,13 @@ namespace FSpot {
// What is the relation between the estimated medium scale factor, and reality?
double scale_scale = scale_percentage / avg_scale_ref[3];
- //System.Console.WriteLine ("scale_percentage {0}, ref {1}, relative {2}",
+ //System.Console.WriteLine ("scale_percentage {0}, ref {1}, relative {2}",
// scale_percentage, avg_scale_ref[3], scale_scale );
// Re-Calculate the proper relation per size
for (int k = 0; k < avg_scale_ref.Length; k++) {
avg_scale[k] = avg_scale_ref[k] * scale_scale;
- // System.Console.WriteLine ("avg_scale[{0}]={1} (was {2})",
+ // System.Console.WriteLine ("avg_scale[{0}]={1} (was {2})",
// k, avg_scale[k], avg_scale_ref[k] );
}
}
@@ -141,31 +138,31 @@ namespace FSpot {
UpdateEstimatedSize();
- Dialog.ShowAll ();
+ ShowAll ();
//LoadHistory ();
- Dialog.Response += HandleResponse;
+ Response += HandleResponse;
}
private int GetScaleSize()
{
// not only convert dialog size to pixel size, but also set preferences se we use same size next time
int size_number = 0; // default to original size
- if (tiny_size.Active)
+ if (tiny_size.Active)
size_number = 1;
- if (small_size.Active)
+ if (small_size.Active)
size_number = 2;
- if (medium_size.Active)
+ if (medium_size.Active)
size_number = 3;
- if (large_size.Active)
+ if (large_size.Active)
size_number = 4;
- if (x_large_size.Active)
+ if (x_large_size.Active)
size_number = 5;
- if (!force_original)
- Preferences.Set (Preferences.EXPORT_EMAIL_SIZE, size_number);
- return sizes [ size_number ];
+ if (!force_original)
+ Preferences.Set (Preferences.EXPORT_EMAIL_SIZE, size_number);
+ return sizes [ size_number ];
}
private int GetScaleIndex ()
@@ -210,7 +207,7 @@ namespace FSpot {
bool rotate = true;
// Lets remove the mail "create mail" dialog
- Dialog.Destroy();
+ Destroy();
if (args.ResponseId != Gtk.ResponseType.Ok) {
return;
@@ -218,9 +215,9 @@ namespace FSpot {
ProgressDialog progress_dialog = null;
progress_dialog = new ProgressDialog (Catalog.GetString ("Preparing email"),
- ProgressDialog.CancelButtonType.Stop,
- selection.Count,
- parent_window);
+ ProgressDialog.CancelButtonType.Stop,
+ selection.Count,
+ parent_window);
size = GetScaleSize(); // Which size should we scale to. 0 --> Original
@@ -236,16 +233,13 @@ namespace FSpot {
case "kmail %s":
attach_arg.Append(" --attach ");
break;
- default: //evolution falls into default, since it supports mailto uri correctly
+ default://evolution falls into default, since it supports mailto uri correctly
attach_arg.Append("&attach=");
break;
}
rotate = rotate_check.Active; // Should we automatically rotate original photos.
Preferences.Set (Preferences.EXPORT_EMAIL_ROTATE, rotate);
-
- // Initiate storage for temporary files to be deleted later
- tmp_paths = new System.Collections.ArrayList();
// Create a tmp directory.
tmp_mail_dir = System.IO.Path.GetTempFileName (); // Create a tmp file
@@ -260,11 +254,11 @@ namespace FSpot {
filters.Add (new ResizeFilter ((uint) size));
else if (rotate)
filters.Add (new OrientationFilter ());
- filters.Add (new UniqueNameFilter (tmp_mail_dir));
+ filters.Add (new UniqueNameFilter (new SafeUri (tmp_mail_dir)));
for (int i = 0; i < selection.Count; i++) {
- Photo photo = selection [i] as Photo;
+ var photo = selection [i];
if ( (photo != null) && (!UserCancelled) ) {
if (progress_dialog != null)
@@ -272,21 +266,18 @@ namespace FSpot {
(Catalog.GetString ("Exporting picture \"{0}\""), photo.Name));
if (UserCancelled)
- break;
-
+ break;
+
try {
// Prepare a tmp_mail file name
- FilterRequest request = new FilterRequest (photo.DefaultVersionUri);
+ FilterRequest request = new FilterRequest (photo.DefaultVersion.Uri);
filters.Convert (request);
request.Preserve(request.Current);
mail_attach.Append(((i == 0 && attach_arg.ToString () == ",") ? "" : attach_arg.ToString()) + request.Current.ToString ());
-
- // Mark the path for deletion
- tmp_paths.Add (request.Current.LocalPath);
} catch (Exception e) {
- Console.WriteLine("Error preparing {0}: {1}", selection[i].Name, e.Message);
+ Hyena.Log.ErrorFormat ("Error preparing {0}: {1}", selection[i].Name, e.Message);
HigMessageDialog md = new HigMessageDialog (parent_window,
DialogFlags.DestroyWithParent,
MessageType.Error,
@@ -303,7 +294,6 @@ namespace FSpot {
if (progress_dialog != null)
progress_dialog.Destroy (); // No need to keep this window
-
if (!UserCancelled) {
// Send the mail :)
string mail_subject = Catalog.GetString("My Photos");
@@ -325,10 +315,10 @@ namespace FSpot {
System.Diagnostics.Process.Start("kmail", " --composer --subject \"" + mail_subject + "\"" + mail_attach);
break;
case "evolution %s": //evo doesn't urldecode the subject
- GtkBeans.Global.ShowUri (Dialog.Screen, "mailto:?subject=" + mail_subject + mail_attach);
+ GtkBeans.Global.ShowUri (Screen, "mailto:?subject=" + mail_subject + mail_attach);
break;
default:
- GtkBeans.Global.ShowUri (Dialog.Screen, "mailto:?subject=" + System.Web.HttpUtility.UrlEncode(mail_subject) + mail_attach);
+ GtkBeans.Global.ShowUri (Screen, "mailto:?subject=" + System.Web.HttpUtility.UrlEncode(mail_subject) + mail_attach);
break;
}
}
diff --git a/src/SimpleCalendar.cs b/src/SimpleCalendar.cs
deleted file mode 100644
index 2b7711d..0000000
--- a/src/SimpleCalendar.cs
+++ /dev/null
@@ -1,61 +0,0 @@
-using FSpot.Query;
-#if SHOW_CALENDAR
-namespace FSpot {
- public class SimpleCalendar : Gtk.Calendar {
- private PhotoQuery parent_query;
- private PhotoQuery query;
- System.DateTime last;
-
- public SimpleCalendar (PhotoQuery query)
- {
- this.parent_query = query;
- parent_query.Changed += ParentChanged;
-
- this.query = new PhotoQuery (parent_query.Store);
- this.query.Changed += Changed;
-
- ParentChanged (parent_query);
- this.Month = System.DateTime.Now;
- }
-
- private void ParentChanged (IBrowsableCollection query)
- {
- this.query.Terms = ((PhotoQuery)query).Terms;
- }
-
- private void Changed (IBrowsableCollection query)
- {
- this.ClearMarks ();
- foreach (IBrowsableItem item in query.Items) {
- MarkDay ((uint)item.Time.Day);
- }
- }
-
- new public System.DateTime Month
- {
- get {
- uint year;
- uint month;
- uint day;
- GetDate (out year, out month, out day);
- System.Console.WriteLine ("{0}-{1}-{2}", year, month, day);
- return new System.DateTime ((int)year, (int)month + 1, 1);
- }
- set {
- SelectMonth ((uint)value.Month -1, (uint)value.Year);
- }
- }
-
- protected override void OnMonthChanged ()
- {
- System.DateTime current = this.Month;
- if (current.Month != last.Month || current.Year != last.Year) {
- System.Console.WriteLine ("Month thinks is changed {0} {1}", last.ToString (), current.ToString ());
- last = current;
- query.Range = new DateRange (current, current.AddMonths (1));
- }
- base.OnMonthChanged ();
- }
- }
-}
-#endif
diff --git a/src/SingleView.cs b/src/SingleView.cs
index 99369bc..5af506b 100644
--- a/src/SingleView.cs
+++ b/src/SingleView.cs
@@ -6,6 +6,7 @@ using System.Collections.Generic;
using Mono.Addins;
using Mono.Unix;
+using Hyena;
using FSpot.Extensions;
using FSpot.Utils;
using FSpot.UI.Dialog;
@@ -45,15 +46,13 @@ namespace FSpot {
private Gtk.Window window;
PhotoImageView image_view;
FSpot.Widgets.IconView directory_view;
- private Uri uri;
+ private SafeUri uri;
UriCollection collection;
FullScreenView fsview;
- private static Gtk.Tooltips toolTips = new Gtk.Tooltips ();
-
- public SingleView (Uri [] uris)
+ public SingleView (SafeUri [] uris)
{
string glade_name = "single_view";
this.uri = uris [0];
@@ -70,24 +69,24 @@ namespace FSpot {
rl_button = GtkUtil.ToolButtonFromTheme ("object-rotate-left", Catalog.GetString ("Rotate Left"), true);
rl_button.Clicked += HandleRotate270Command;
- rl_button.SetTooltip (toolTips, Catalog.GetString ("Rotate photo left"), null);
+ rl_button.TooltipText = Catalog.GetString ("Rotate photo left");
toolbar.Insert (rl_button, -1);
rr_button = GtkUtil.ToolButtonFromTheme ("object-rotate-right", Catalog.GetString ("Rotate Right"), true);
rr_button.Clicked += HandleRotate90Command;
- rr_button.SetTooltip (toolTips, Catalog.GetString ("Rotate photo right"), null);
+ rr_button.TooltipText = Catalog.GetString ("Rotate photo right");
toolbar.Insert (rr_button, -1);
toolbar.Insert (new SeparatorToolItem (), -1);
ToolButton fs_button = GtkUtil.ToolButtonFromTheme ("view-fullscreen", Catalog.GetString ("Fullscreen"), true);
fs_button.Clicked += HandleViewFullscreen;
- fs_button.SetTooltip (toolTips, Catalog.GetString ("View photos fullscreen"), null);
+ fs_button.TooltipText = Catalog.GetString ("View photos fullscreen");
toolbar.Insert (fs_button, -1);
ToolButton ss_button = GtkUtil.ToolButtonFromTheme ("media-playback-start", Catalog.GetString ("Slideshow"), true);
ss_button.Clicked += HandleViewSlideshow;
- ss_button.SetTooltip (toolTips, Catalog.GetString ("View photos in a slideshow"), null);
+ ss_button.TooltipText = Catalog.GetString ("View photos in a slideshow");
toolbar.Insert (ss_button, -1);
collection = new UriCollection (uris);
@@ -121,7 +120,7 @@ namespace FSpot {
sidebar.CloseRequested += HandleHideSidePane;
sidebar.Show ();
- ThumbnailGenerator.Default.OnPixbufLoaded += delegate { directory_view.QueueDraw (); };
+ ThumbnailLoader.Default.OnPixbufLoaded += delegate { directory_view.QueueDraw (); };
image_view = new PhotoImageView (collection);
GtkUtil.ModifyColors (image_view);
@@ -158,8 +157,7 @@ namespace FSpot {
if (pointer == null)
return;
IBrowsableItem [] item = {pointer.Current};
- PhotoArray item_array = new PhotoArray (item);
- sidebar.HandleSelectionChanged (item_array);
+ sidebar.HandleSelectionChanged (new PhotoList (item));
};
image_view.Item.Collection.ItemsChanged += sidebar.HandleSelectionItemsChanged;
@@ -182,13 +180,13 @@ namespace FSpot {
void HandleExportActivated (object o, EventArgs e)
{
- FSpot.Extensions.ExportMenuItemNode.SelectedImages = delegate () {return new FSpot.PhotoArray (directory_view.Selection.Items); };
+ FSpot.Extensions.ExportMenuItemNode.SelectedImages = delegate () {return new PhotoList (directory_view.Selection.Items); };
}
public void HandleCollectionChanged (IBrowsableCollection collection)
{
if (collection.Count > 0 && directory_view.Selection.Count == 0) {
- Console.WriteLine ("Added selection");
+ Log.Debug ("Added selection");
directory_view.Selection.Add (0);
}
@@ -222,7 +220,7 @@ namespace FSpot {
}
}
- private Uri CurrentUri
+ private SafeUri CurrentUri
{
get {
return this.uri;
@@ -230,7 +228,7 @@ namespace FSpot {
set {
this.uri = value;
collection.Clear ();
- collection.LoadItems (new Uri[] { this.uri });
+ collection.LoadItems (new SafeUri[] { this.uri });
}
}
@@ -280,7 +278,7 @@ namespace FSpot {
if (current == null)
return;
- Desktop.SetBackgroundImage (current.DefaultVersionUri.LocalPath);
+ Desktop.SetBackgroundImage (current.DefaultVersion.Uri.LocalPath);
}
private void HandleViewToolbar (object sender, System.EventArgs args)
@@ -318,7 +316,7 @@ namespace FSpot {
private void HandleNewWindow (object sender, System.EventArgs args)
{
/* FIXME this needs to register witth the core */
- new SingleView (new Uri[] {uri});
+ new SingleView (new SafeUri[] {uri});
}
private void HandlePreferences (object sender, System.EventArgs args)
@@ -354,7 +352,7 @@ namespace FSpot {
int response = chooser.Run ();
if ((ResponseType) response == ResponseType.Ok)
- CurrentUri = new System.Uri (chooser.Uri);
+ CurrentUri = new SafeUri (chooser.Uri, true);
chooser.Destroy ();
@@ -462,7 +460,7 @@ namespace FSpot {
IBrowsableItem item = image_view.Item.Current;
System.Text.StringBuilder sb = new System.Text.StringBuilder();
if (filenames_item.Active && item != null)
- sb.Append (System.IO.Path.GetFileName (item.DefaultVersionUri.LocalPath) + " - ");
+ sb.Append (System.IO.Path.GetFileName (item.DefaultVersion.Uri.LocalPath) + " - ");
sb.AppendFormat (Catalog.GetPluralString ("{0} Photo", "{0} Photos", collection.Count), collection.Count);
status_label.Text = sb.ToString ();
@@ -493,8 +491,6 @@ namespace FSpot {
private void HandleFileOpen (object sender, System.EventArgs args)
{
- string open = null;
-
FileChooserDialog file_selector =
new FileChooserDialog ("Open", this.Window,
FileChooserAction.Open);
@@ -503,12 +499,11 @@ namespace FSpot {
int response = file_selector.Run ();
if ((Gtk.ResponseType) response == Gtk.ResponseType.Ok) {
- var l = new List<Uri> ();
+ var l = new List<SafeUri> ();
foreach (var s in file_selector.Uris)
- l.Add (new Uri (s));
+ l.Add (new SafeUri (s));
new FSpot.SingleView (l.ToArray ());
}
-
file_selector.Destroy ();
}
diff --git a/src/TagCommands.cs b/src/TagCommands.cs
index 6a297b5..deaf2ad 100644
--- a/src/TagCommands.cs
+++ b/src/TagCommands.cs
@@ -21,6 +21,7 @@ using FSpot;
using FSpot.Utils;
using FSpot.UI.Dialog;
using FSpot.Widgets;
+using Hyena;
public class TagCommands {
@@ -166,7 +167,7 @@ public class TagCommands {
new_tag = tag_store.CreateTag (parent_category, tag_name_entry.Text, autoicon);
} catch (Exception ex) {
// FIXME error dialog.
- Console.WriteLine ("error {0}", ex);
+ Log.Exception (ex);
}
}
diff --git a/src/TagPopup.cs b/src/TagPopup.cs
index ab6bb5b..1d67cac 100644
--- a/src/TagPopup.cs
+++ b/src/TagPopup.cs
@@ -17,7 +17,7 @@ using FSpot.Utils;
public class TagPopup {
public void Activate (Gdk.EventButton eb, Tag tag, Tag [] tags)
{
- int photo_count = MainWindow.Toplevel.SelectedPhotos ().Length;
+ int photo_count = App.Instance.Organizer.SelectedPhotos ().Length;
int tags_count = tags.Length;
Gtk.Menu popup_menu = new Gtk.Menu ();
@@ -25,7 +25,7 @@ public class TagPopup {
GtkUtil.MakeMenuItem (popup_menu,
String.Format (Catalog.GetPluralString ("Find", "Find", tags.Length), tags.Length),
"gtk-add",
- new EventHandler (MainWindow.Toplevel.HandleIncludeTag),
+ new EventHandler (App.Instance.Organizer.HandleIncludeTag),
true
);
@@ -34,33 +34,33 @@ public class TagPopup {
GtkUtil.MakeMenuSeparator (popup_menu);
GtkUtil.MakeMenuItem (popup_menu, Catalog.GetString ("Create New Tag..."), "tag-new",
- MainWindow.Toplevel.HandleCreateNewCategoryCommand, true);
+ App.Instance.Organizer.HandleCreateNewCategoryCommand, true);
GtkUtil.MakeMenuSeparator (popup_menu);
GtkUtil.MakeMenuItem (popup_menu,
Catalog.GetString ("Edit Tag..."), "gtk-edit",
- delegate { MainWindow.Toplevel.HandleEditSelectedTagWithTag (tag); }, tag != null && tags_count == 1);
+ delegate { App.Instance.Organizer.HandleEditSelectedTagWithTag (tag); }, tag != null && tags_count == 1);
GtkUtil.MakeMenuItem (popup_menu,
Catalog.GetPluralString ("Delete Tag", "Delete Tags", tags_count), "gtk-delete",
- new EventHandler (MainWindow.Toplevel.HandleDeleteSelectedTagCommand), tag != null);
+ new EventHandler (App.Instance.Organizer.HandleDeleteSelectedTagCommand), tag != null);
GtkUtil.MakeMenuSeparator (popup_menu);
GtkUtil.MakeMenuItem (popup_menu,
Catalog.GetPluralString ("Attach Tag to Selection", "Attach Tags to Selection", tags_count), "gtk-add",
- new EventHandler (MainWindow.Toplevel.HandleAttachTagCommand), tag != null && photo_count > 0);
+ new EventHandler (App.Instance.Organizer.HandleAttachTagCommand), tag != null && photo_count > 0);
GtkUtil.MakeMenuItem (popup_menu,
Catalog.GetPluralString ("Remove Tag From Selection", "Remove Tags From Selection", tags_count), "gtk-remove",
- new EventHandler (MainWindow.Toplevel.HandleRemoveTagCommand), tag != null && photo_count > 0);
+ new EventHandler (App.Instance.Organizer.HandleRemoveTagCommand), tag != null && photo_count > 0);
if (tags_count > 1 && tag != null) {
GtkUtil.MakeMenuSeparator (popup_menu);
GtkUtil.MakeMenuItem (popup_menu, Catalog.GetString ("Merge Tags"),
- new EventHandler (MainWindow.Toplevel.HandleMergeTagsCommand), true);
+ new EventHandler (App.Instance.Organizer.HandleMergeTagsCommand), true);
}
diff --git a/src/TagQueryWidget.cs b/src/TagQueryWidget.cs
index 6ddddb4..a7ccc08 100644
--- a/src/TagQueryWidget.cs
+++ b/src/TagQueryWidget.cs
@@ -24,7 +24,7 @@ namespace FSpot
//this.literal = literal;
/*MenuItem attach_item = new MenuItem (Catalog.GetString ("Find With"));
- TagMenu attach_menu = new TagMenu (attach_item, MainWindow.Toplevel.Database.Tags);
+ TagMenu attach_menu = new TagMenu (attach_item, App.Instance.Database.Tags);
attach_menu.TagSelected += literal.HandleAttachTagCommand;
attach_item.ShowAll ();
popup_menu.Append (attach_item);*/
@@ -111,7 +111,7 @@ namespace FSpot
//Console.WriteLine ("root is not null and has terms");
Gtk.Menu m = new Gtk.Menu ();
- Gtk.MenuItem all_item = GtkUtil.MakeMenuItem (m, Catalog.GetString ("All"), new EventHandler (MainWindow.Toplevel.HandleRequireTag));
+ Gtk.MenuItem all_item = GtkUtil.MakeMenuItem (m, Catalog.GetString ("All"), new EventHandler (App.Instance.Organizer.HandleRequireTag));
GtkUtil.MakeMenuSeparator (m);
int sensitive_items = 0;
@@ -122,7 +122,7 @@ namespace FSpot
string name = "_" + String.Join (", ", (string []) term_parts.ToArray (typeof(string)));
- Gtk.MenuItem item = GtkUtil.MakeMenuItem (m, name, new EventHandler (MainWindow.Toplevel.HandleAddTagToTerm));
+ Gtk.MenuItem item = GtkUtil.MakeMenuItem (m, name, new EventHandler (App.Instance.Organizer.HandleAddTagToTerm));
item.Sensitive = !contains_tag;
if (!contains_tag)
@@ -209,7 +209,6 @@ namespace FSpot
public class LogicWidget : HBox {
private PhotoQuery query;
- private static Tooltips tips = new Tooltips ();
private static Term rootTerm;
private EventBox rootAdd;
@@ -249,10 +248,6 @@ namespace FSpot
CanFocus = true;
Sensitive = true;
- Literal.Tips = tips;
-
- tips.Enable ();
-
Init ();
tag_store.ItemsChanged += HandleTagChanged;
@@ -680,7 +675,7 @@ namespace FSpot
query.TagTerm = null;
} else {
help.Hide ();
- query.TagTerm = new TagConditionWrapper (rootTerm.SqlCondition ());
+ query.TagTerm = new ConditionWrapper (rootTerm.SqlCondition ());
}
EventHandler handler = Changed;
diff --git a/src/TagSelectionWidget.cs b/src/TagSelectionWidget.cs
index eb3dbac..76c03a1 100644
--- a/src/TagSelectionWidget.cs
+++ b/src/TagSelectionWidget.cs
@@ -153,13 +153,6 @@ namespace FSpot {
}
// Data functions.
- private static string ToHashColor (Gdk.Color color)
- {
- byte r = (byte) (color.Red >> 8);
- byte g = (byte) (color.Green >> 8);
- byte b = (byte) (color.Blue >> 8);
- return String.Format ("#{0:x}{1:x}{2:x}", r, g, b);
- }
private void SetBackground (CellRenderer renderer, Tag tag)
{
@@ -491,7 +484,7 @@ namespace FSpot {
// Check that the tag doesn't already exist
if (String.Compare (args.NewText, tag.Name, true) != 0 &&
tag_store.GetTagByName (args.NewText) != null) {
- HigMessageDialog md = new HigMessageDialog (MainWindow.Toplevel.Window,
+ HigMessageDialog md = new HigMessageDialog (App.Instance.Organizer.Window,
DialogFlags.DestroyWithParent,
MessageType.Warning, ButtonsType.Ok,
Catalog.GetString ("Error renaming tag"),
@@ -533,7 +526,7 @@ namespace FSpot {
public TagSelectionWidget (TagStore tag_store)
: base (new TreeStore (typeof(uint), typeof(string)))
{
- database = MainWindow.Toplevel.Database;
+ database = App.Instance.Database;
HeadersVisible = false;
@@ -706,7 +699,7 @@ namespace FSpot {
database.BeginTransaction ();
List<Photo> photos = new List<Photo> ();
- foreach (Uri photo_uri in list) {
+ foreach (var photo_uri in list) {
Photo photo = database.Photos.GetByUri (photo_uri);
// FIXME - at this point we should import the photo, and then continue
@@ -768,10 +761,10 @@ namespace FSpot {
private void OnSelectionChanged ()
{
- Console.WriteLine ("Selection changed:");
+ Log.Debug ("Selection changed:");
foreach (Tag t in selection_widget.TagSelection)
- Console.WriteLine ("\t{0}", t.Name);
+ Log.DebugFormat ("\t{0}", t.Name);
}
private Test ()
diff --git a/src/TagStore.cs b/src/TagStore.cs
index 3adb4c1..fd9fa44 100644
--- a/src/TagStore.cs
+++ b/src/TagStore.cs
@@ -11,6 +11,7 @@ using FSpot;
using FSpot.Jobs;
using FSpot.Query;
using FSpot.Utils;
+using Hyena;
public class InvalidTagOperationException : InvalidOperationException {
public Tag tag;
@@ -165,7 +166,7 @@ public class TagStore : DbStore<Tag> {
else {
tag.Category = Get (category_id) as Category;
if (tag.Category == null)
- Console.WriteLine ("Tag Without category found");
+ Log.Warning ("Tag Without category found");
}
}
diff --git a/src/Term.cs b/src/Term.cs
index c015ee4..7c0174d 100644
--- a/src/Term.cs
+++ b/src/Term.cs
@@ -11,12 +11,12 @@ using System.Text;
using Mono.Unix;
using Gtk;
using Gdk;
+using Hyena;
namespace FSpot {
public abstract class Term {
private ArrayList sub_terms = new ArrayList ();
private Term parent = null;
- private string separator;
protected bool is_negated = false;
protected Tag tag = null;
@@ -287,7 +287,7 @@ namespace FSpot {
return new OrTerm (parent, after);
}
- Console.WriteLine ("Do not have Term for operator {0}", op);
+ Log.DebugFormat ("Do not have Term for operator {0}", op);
return null;
}
}
@@ -433,12 +433,6 @@ namespace FSpot {
}
}
- public static Tooltips Tips {
- set {
- tips = value;
- }
- }
-
public Tag Tag {
get {
return tag;
@@ -529,7 +523,7 @@ namespace FSpot {
Gtk.Drag.DestSet (container, DestDefaults.All, tag_dest_target_table,
DragAction.Copy | DragAction.Move );
- tips.SetTip (container, tag.Name, null);
+ container.TooltipText = tag.Name;
label.Show ();
image.Show ();
@@ -589,11 +583,11 @@ namespace FSpot {
normal_icon = null;
negated_icon = null;
if (IsNegated) {
- tips.SetTip (widget, String.Format (Catalog.GetString ("Not {0}"), tag.Name), null);
+ widget.TooltipText = String.Format (Catalog.GetString ("Not {0}"), tag.Name);
label.Text = "<s>" + System.Web.HttpUtility.HtmlEncode (tag.Name) + "</s>";
image.Pixbuf = NegatedIcon;
} else {
- tips.SetTip (widget, tag.Name, null);
+ widget.TooltipText = tag.Name;
label.Text = System.Web.HttpUtility.HtmlEncode (tag.Name);
image.Pixbuf = NormalIcon;
}
@@ -901,7 +895,6 @@ namespace FSpot {
private Widget widget;
private Pixbuf negated_icon;
private static Pixbuf negated_overlay;
- private static Tooltips tips;
private bool isHoveredOver = false;
public delegate void NegatedToggleHandler (Literal group);
diff --git a/src/Tests/UpdaterTests.cs b/src/Tests/UpdaterTests.cs
new file mode 100644
index 0000000..193eb56
--- /dev/null
+++ b/src/Tests/UpdaterTests.cs
@@ -0,0 +1,258 @@
+#if ENABLE_TESTS
+using NUnit.Framework;
+using System;
+using Hyena;
+using FSpot;
+using FSpot.Database;
+using Banshee.Database;
+
+namespace FSpot.Tests
+{
+ [TestFixture]
+ public class UpdaterTests
+ {
+ static bool initialized = false;
+ static void Initialize () {
+ GLib.GType.Init ();
+ Updater.silent = true;
+ initialized = true;
+ }
+
+ [Test]
+ public void Test_0_6_1_5 ()
+ {
+ TestUpdate ("0.6.1.5", "17.0");
+ }
+
+ [Test]
+ public void Test_0_6_2 ()
+ {
+ TestUpdate ("0.6.2", "17.1");
+ }
+
+ [Test]
+ public void Test_0_7_0_17_2 ()
+ {
+ TestUpdate ("0.7.0-17.2", "17.2");
+ }
+
+ [Test]
+ public void Test_0_7_0_18_0 ()
+ {
+ TestUpdate ("0.7.0-18.0", "18");
+ }
+
+ private void TestUpdate (string version, string revision)
+ {
+ if (!initialized)
+ Initialize ();
+
+ var uri = new SafeUri (Environment.CurrentDirectory + "/../tests/data/f-spot-"+version+".db");
+ var file = GLib.FileFactory.NewForUri (uri);
+ Assert.IsTrue (file.Exists, String.Format ("Test database for version {0} not found", version));
+
+ var tmp = System.IO.Path.GetTempFileName ();
+ var uri2 = new SafeUri (tmp);
+ var file2 = GLib.FileFactory.NewForUri (uri2);
+ file.Copy (file2, GLib.FileCopyFlags.Overwrite, null, null);
+
+ var db = new QueuedSqliteDatabase (uri2.AbsolutePath);
+ ValidateRevision (db, revision);
+
+ Updater.Run (db);
+ ValidateRevision (db, Updater.LatestVersion.ToString ());
+
+ ValidateTableStructure (db);
+
+ CheckPhotosTable (db);
+ CheckPhotoVersionsTable (db);
+ CheckTagsTable (db);
+ }
+
+ private void ValidateRevision (QueuedSqliteDatabase db, string revision)
+ {
+ var query = "SELECT data FROM meta WHERE name = 'F-Spot Database Version'";
+ var found = db.QuerySingle (query).ToString ();
+ Assert.AreEqual (revision, found);
+ }
+
+ private void ValidateTableStructure (QueuedSqliteDatabase db)
+ {
+ CheckTableExistance (db, "exports");
+ CheckTableExistance (db, "jobs");
+ CheckTableExistance (db, "meta");
+ CheckTableExistance (db, "photo_tags");
+ CheckTableExistance (db, "photo_versions");
+ CheckTableExistance (db, "photos");
+ CheckTableExistance (db, "rolls");
+ CheckTableExistance (db, "tags");
+ }
+
+ private void CheckTableExistance (QueuedSqliteDatabase db, string name)
+ {
+ Assert.IsTrue (db.TableExists (name), String.Format ("Expected table {0} does not exist.", name));
+ }
+
+ private void CheckPhotosTable (QueuedSqliteDatabase db)
+ {
+ CheckPhoto (db, 1, 1249579156, "file:///tmp/database/", "sample.jpg", "Testing!", 1, 2, 5);
+ CheckPhoto (db, 2, 1276191607, "file:///tmp/database/", "sample_canon_bibble5.jpg", "", 1, 1, 0);
+ CheckPhoto (db, 3, 1249834364, "file:///tmp/database/", "sample_canon_zoombrowser.jpg", "%test comment%", 1, 1, 0);
+ CheckPhoto (db, 4, 1276191607, "file:///tmp/database/", "sample_gimp_exiftool.jpg", "", 1, 1, 5);
+ CheckPhoto (db, 5, 1242995279, "file:///tmp/database/", "sample_nikon1.jpg", "", 1, 1, 1);
+ CheckPhoto (db, 6, 1276191607, "file:///tmp/database/", "sample_nikon1_bibble5.jpg", "", 1, 1, 0);
+ CheckPhoto (db, 7, 1167646774, "file:///tmp/database/", "sample_nikon2.jpg", "", 1, 1, 0);
+ CheckPhoto (db, 8, 1276191607, "file:///tmp/database/", "sample_nikon2_bibble5.jpg", "", 1, 1, 0);
+ CheckPhoto (db, 9, 1256140553, "file:///tmp/database/", "sample_nikon3.jpg", " ", 1, 1, 0);
+ CheckPhoto (db, 10, 1238587697, "file:///tmp/database/", "sample_nikon4.jpg", " ", 1, 1, 0);
+ CheckPhoto (db, 11, 1276191607, "file:///tmp/database/", "sample_no_metadata.jpg", "", 1, 1, 0);
+ CheckPhoto (db, 12, 1265446642, "file:///tmp/database/", "sample_null_orientation.jpg", "", 1, 1, 0);
+ CheckPhoto (db, 13, 1161575860, "file:///tmp/database/", "sample_olympus1.jpg", "", 1, 1, 0);
+ CheckPhoto (db, 14, 1236006332, "file:///tmp/database/", "sample_olympus2.jpg", "", 1, 1, 0);
+ CheckPhoto (db, 15, 1246010310, "file:///tmp/database/", "sample_panasonic.jpg", "", 1, 1, 0);
+ CheckPhoto (db, 16, 1258799979, "file:///tmp/database/", "sample_sony1.jpg", "", 1, 1, 0);
+ CheckPhoto (db, 17, 1257533767, "file:///tmp/database/", "sample_sony2.jpg", "", 1, 1, 0);
+ CheckPhoto (db, 18, 1026565108, "file:///tmp/database/", "sample_xap.jpg", "", 1, 1, 4);
+ CheckPhoto (db, 19, 1093249257, "file:///tmp/database/", "sample_xmpcrash.jpg", "", 1, 1, 0);
+ CheckPhoto (db, 20, 1276191607, "file:///tmp/database/test/", "sample_tangled1.jpg", "test comment", 1, 1, 0);
+ CheckCount (db, "photos", 20);
+ }
+
+ private void CheckPhotoVersionsTable (QueuedSqliteDatabase db)
+ {
+ CheckPhotoVersion (db, 1, 1, "Original", "file:///tmp/database/", "sample.jpg", "", 1);
+ CheckPhotoVersion (db, 2, 1, "Original", "file:///tmp/database/", "sample_canon_bibble5.jpg", "", 1);
+ CheckPhotoVersion (db, 3, 1, "Original", "file:///tmp/database/", "sample_canon_zoombrowser.jpg", "", 1);
+ CheckPhotoVersion (db, 4, 1, "Original", "file:///tmp/database/", "sample_gimp_exiftool.jpg", "", 1);
+ CheckPhotoVersion (db, 5, 1, "Original", "file:///tmp/database/", "sample_nikon1.jpg", "", 1);
+ CheckPhotoVersion (db, 6, 1, "Original", "file:///tmp/database/", "sample_nikon1_bibble5.jpg", "", 1);
+ CheckPhotoVersion (db, 7, 1, "Original", "file:///tmp/database/", "sample_nikon2.jpg", "", 1);
+ CheckPhotoVersion (db, 8, 1, "Original", "file:///tmp/database/", "sample_nikon2_bibble5.jpg", "", 1);
+ CheckPhotoVersion (db, 9, 1, "Original", "file:///tmp/database/", "sample_nikon3.jpg", "", 1);
+ CheckPhotoVersion (db, 10, 1, "Original", "file:///tmp/database/", "sample_nikon4.jpg", "", 1);
+ CheckPhotoVersion (db, 1, 2, "Modified", "file:///tmp/database/", "sample%20(Modified).jpg", "", 0);
+ CheckPhotoVersion (db, 11, 1, "Original", "file:///tmp/database/", "sample_no_metadata.jpg", "", 1);
+ CheckPhotoVersion (db, 12, 1, "Original", "file:///tmp/database/", "sample_null_orientation.jpg", "", 1);
+ CheckPhotoVersion (db, 13, 1, "Original", "file:///tmp/database/", "sample_olympus1.jpg", "", 1);
+ CheckPhotoVersion (db, 14, 1, "Original", "file:///tmp/database/", "sample_olympus2.jpg", "", 1);
+ CheckPhotoVersion (db, 15, 1, "Original", "file:///tmp/database/", "sample_panasonic.jpg", "", 1);
+ CheckPhotoVersion (db, 16, 1, "Original", "file:///tmp/database/", "sample_sony1.jpg", "", 1);
+ CheckPhotoVersion (db, 17, 1, "Original", "file:///tmp/database/", "sample_sony2.jpg", "", 1);
+ CheckPhotoVersion (db, 18, 1, "Original", "file:///tmp/database/", "sample_xap.jpg", "", 1);
+ CheckPhotoVersion (db, 19, 1, "Original", "file:///tmp/database/", "sample_xmpcrash.jpg", "", 1);
+ CheckPhotoVersion (db, 20, 1, "Original", "file:///tmp/database/test/", "sample_tangled1.jpg", "", 1);
+ CheckCount (db, "photo_versions", 21);
+ CheckOriginalVersionCount (db);
+ }
+
+ private void CheckTagsTable (QueuedSqliteDatabase db)
+ {
+ CheckTag (db, 1, "Favorites", 0, 1, -10, "stock_icon:emblem-favorite");
+ CheckTag (db, 2, "Hidden", 0, 0, -9, "stock_icon:emblem-readonly");
+ CheckTag (db, 3, "People", 0, 1, -8, "stock_icon:emblem-people");
+ CheckTag (db, 4, "Places", 0, 1, -8, "stock_icon:emblem-places");
+ CheckTag (db, 5, "Events", 0, 1, -7, "stock_icon:emblem-event");
+ CheckTag (db, 6, "Imported Tags", 0, 1, 0, "stock_icon:gtk-new");
+ CheckTag (db, 7, "keyword1", 6, 1, 0, "");
+ CheckTag (db, 8, "keyword2", 6, 1, 0, "");
+ CheckTag (db, 9, "keyword3", 6, 1, 0, "");
+ CheckTag (db, 10, "keyword 1", 6, 1, 0, "");
+ CheckTag (db, 11, "keyword 2", 6, 1, 0, "");
+ CheckTag (db, 12, "Kirche Sulzbach", 6, 1, 0, "");
+ CheckTag (db, 13, "Nikon D70s", 6, 1, 0, "");
+ CheckTag (db, 14, "Food", 6, 1, 0, "");
+ CheckTag (db, 15, "2007", 6, 1, 0, "");
+ CheckTag (db, 16, "2006", 6, 1, 0, "");
+ CheckTag (db, 17, "Neujahr", 6, 1, 0, tag_icon_emblem);
+ CheckTag (db, 18, "Sylvester", 6, 1, 0, "");
+ CheckTag (db, 19, "Olympus µ 700", 6, 1, 0, "");
+ CheckTag (db, 20, "Rom 2006-10", 6, 1, 0, "");
+ CheckTag (db, 21, "Architecture", 5, 1, 0, tag_icon_img);
+ CheckTag (db, 22, "Flughafen", 6, 1, 0, "");
+ CheckTag (db, 23, "Basel", 6, 1, 0, "");
+ CheckTag (db, 24, "FreeFoto.com", 6, 1, 0, "");
+ CheckTag (db, 25, "City", 6, 1, 0, "stock_icon:emblem-places");
+ CheckTag (db, 26, " ", 25, 1, 0, "");
+ CheckTag (db, 27, "State", 6, 1, 0, "stock_icon:emblem-places");
+ CheckTag (db, 28, "Country", 6, 1, 0, "stock_icon:emblem-places");
+ CheckTag (db, 29, "Ubited Kingdom", 28, 1, 0, "");
+ CheckTag (db, 30, "Communications", 6, 1, 0, "");
+ CheckTag (db, 31, "Türkei 2004", 6, 1, 0, "");
+ CheckCount (db, "tags", 31);
+ }
+
+ private void CheckPhoto (QueuedSqliteDatabase db, uint id, uint time, string base_uri, string filename, string description, uint roll_id, uint default_version_id, uint rating)
+ {
+ var reader = db.Query ("SELECT id, time, base_uri, filename, description, roll_id, default_version_id, rating FROM photos WHERE id = " + id);
+ var found = false;
+ while (reader.Read ()) {
+ Assert.AreEqual (id, Convert.ToUInt32 (reader[0]), "id on photo "+id);
+ Assert.AreEqual (time, Convert.ToUInt32 (reader[1]), "time on photo "+id);
+ Assert.AreEqual (base_uri, reader[2], "base_uri on photo "+id);
+ Assert.AreEqual (filename, reader[3], "filename on photo "+id);
+ Assert.AreEqual (description, reader[4], "description on photo "+id);
+ Assert.AreEqual (roll_id, Convert.ToUInt32 (reader[5]), "roll_id on photo "+id);
+ Assert.AreEqual (default_version_id, Convert.ToUInt32 (reader[6]), "default_version_id on photo "+id);
+ Assert.AreEqual (rating, Convert.ToUInt32 (reader[7]), "rating on photo "+id);
+ found = true;
+ }
+ Assert.IsTrue (found, "photo "+id+" missing");
+ }
+
+ private void CheckPhotoVersion (QueuedSqliteDatabase db, uint photo_id, uint version_id, string name, string base_uri, string filename, string import_md5, uint is_protected)
+ {
+ var reader = db.Query ("SELECT photo_id, version_id, name, base_uri, filename, import_md5, protected FROM photo_versions WHERE photo_id = " + photo_id + " AND version_id = " + version_id);
+ var found = false;
+ while (reader.Read ()) {
+ Assert.AreEqual (photo_id, Convert.ToUInt32 (reader[0]), "photo_id on photo version "+photo_id+"/"+version_id);
+ Assert.AreEqual (version_id, Convert.ToUInt32 (reader[1]), "version_id on photo version "+photo_id+"/"+version_id);
+ Assert.AreEqual (name, reader[2], "name on photo version "+photo_id+"/"+version_id);
+ Assert.AreEqual (base_uri, reader[3], "base_uri on photo version "+photo_id+"/"+version_id);
+ Assert.AreEqual (filename, reader[4], "filename on photo version "+photo_id+"/"+version_id);
+ Assert.AreEqual (import_md5, reader[5], "import_md5 on photo version "+photo_id+"/"+version_id);
+ Assert.AreEqual (is_protected, Convert.ToUInt32 (reader[6]), "protected on photo version "+photo_id+"/"+version_id);
+ found = true;
+ }
+ Assert.IsTrue (found, "photo version "+photo_id+"/"+version_id+" missing");
+ }
+
+ private void CheckOriginalVersionCount (QueuedSqliteDatabase db)
+ {
+ var photo_count = GetCount (db, "photos", "1");
+ var orig_version_count = GetCount (db, "photo_versions", "version_id = 1");
+ Assert.AreEqual (photo_count, orig_version_count, "Expecting an original version for each photo");
+ }
+
+ private void CheckTag (QueuedSqliteDatabase db, uint id, string name, uint cat_id, int is_cat, int sort, string icon)
+ {
+ var reader = db.Query ("SELECT id, name, category_id, is_category, sort_priority, icon FROM tags WHERE id = " + id);
+ var found = false;
+ while (reader.Read ()) {
+ Assert.AreEqual (id, Convert.ToUInt32 (reader[0]), "id on tag "+id);
+ Assert.AreEqual (name, reader[1], "name on tag "+id);
+ Assert.AreEqual (cat_id, Convert.ToUInt32 (reader[2]), "category_id on tag "+id);
+ Assert.AreEqual (is_cat, Convert.ToInt32 (reader[3]), "is_cat on tag "+id);
+ Assert.AreEqual (sort, reader[4], "sort_priority on tag "+id);
+ Assert.AreEqual (icon, reader[5], "icon on tag "+id);
+ found = true;
+ }
+ Assert.IsTrue (found, "tag "+id+" missing");
+ }
+
+ private int GetCount (QueuedSqliteDatabase db, string table, string where)
+ {
+ return Int32.Parse (db.QuerySingle ("SELECT COUNT(*) FROM "+table+" WHERE "+where).ToString ());
+ }
+
+ private void CheckCount (QueuedSqliteDatabase db, string table, int count)
+ {
+ var counted = GetCount (db, table, "1");
+ Assert.AreEqual (count, counted, "Count on "+table);
+ }
+
+ private const string tag_icon_img = "R2RrUAAAJBgBAQACAAAAwAAAADAAAAAw////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wBRlAATTZoFYE+dCKFRnQfBUZ4H3E+dBvFOmwb8UJwG71GeB9pRnge/UJ4InU+ZBlpVmQAP////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wBJkgAOTZsHblCfBsxPnAf4c7cx9KHVb/+14Yr/x+mk/9fxv//i9s//1vC8/8Xpov+z4Ij/ndRp/2uxJ/NPmwf5UJ0Gxk6bBWZNmQAK////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8AVaoABk6bB3NQnQbxeb04967egP/b88P/3vTH/73qkP+u5Xj/oeFj/5TdTv+L2j7/l95S/6TiaP+x5n3/wuuZ/+T20v/X8r7/qtx6/3G3L/ZPnAbuUJsFZlWqAAP///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wBNmgZTUJ0H6m+1LvbA6Jr/1PG4/6vkc/+H2Df/c9IW/3PSFv9z0hb/c9IW/3PSFv9z0hb/c9IW/3PSFv9z0hb/c9IW/3TSF/+M2kD/seZ9/9vzw/+45I7/Z7Ai9E+cB+FPmgdH////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8AgIAAAk+eBY5apBT1sOCC/9Txt/+f4GD/dNIY/3PSFv9z0hb/c9IW/3PSFv9z0hb/c9IW/3PSFv9z0hb/c9IW/3PSFv9z0hb/c9IW/3PSFv9z0hb/c9IW/3fTHf+q5HH/2fO//6fbdf9VoAz2UJwIfP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wBVlQAMUZwHumuyJ/XJ7af/quRy/3fTHf9z0hb/c9IW/3PSFv9z0hb/c9IW/3PSFv9z0hb/c9IW/3PSFv9z0hb/c9IW/3PSFv9z0hb/c9IW/3PSFv9z0hb/c9IW/3PSFv9z0hb/fNUm/7joif/E6p//Yaoa9VCcCKpVqgAG////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AE6dAA1QnAfZfsA/+Mzuqv+U3U7/c9IW/3PSFv9z0hb/c9IW/3PSFv9z0hb/c9IW/3PSFv9z0hb/c9IW/3PSFv9z0hb/c9IW/3PSFv9z0hb/c9IW/3PSFv9z0hb/c9IW/3PSFv9z0hb/c9IW/3PSFv+i4WT/zO6q/3K4LvdQnQbJVaoABv///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8AgIAAAk+dB7uAwUH4x+2i/4fYN/9z0hb/c9IW/3PSFv9z0hb/c9IW/3PSFv9z0hb/c9IW/4PXMP+t5Xf/x+2i/9byu//l99P/3vTH/87vrf+76Y//ld1P/3XTGf9z0hb/c9IW/3PSFv9z0hb/c9IW/3PSFv9z0hb/j9tF/8vuqf9zuDH3UJwIpf///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8AT5wGi2yyKfTH7aL/hdg0/3PSFv9z0hb/c9IW/3PSFv9z0hb/c9IW/3PSFv+h4WL/4/bQ//////////////////////////////////////////////////X87v/C65n/ftYo/3PSFv9z0hb/c9IW/3PSFv9z0hb/c9IW/47bQ//G7KH/YKgb9lGcCXH///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wBNmgZTXKQW9cDplv+R3Ej/c9IW/3PSFv9z0hb/c9IW/3PSFv9z0hb/jdpB/+D1zP//////////////////////////////////////////////////////////////////////9/zx/7PmgP900hf/c9IW/3PSFv9z0hb/c9IW/3PSFv+c31r/uuaO/1ahDfZOmAQ+////AP///wD///8A////AP///wD///8A////AP///wD///8A////AEmSAAdQnQfqqd52/5/gYP9z0hb/c9IW/3PSFv9z0hb/c9IW/3PSFv+i4WT/+v32///////////////////////////////////////////////////////////////////////////////////////T8bX/etQh/3PSFv9z0hb/c9IW/3PSFv9z0hb/q+Rz/5vVYv9PnQfbAP8AAf///wD///8A////AP///wD///8A////AP///wD///8A////AE6ZB3VytzH0uumM/3XTGv9z0hb/c9IW/3PSFv9z0hb/c9IW/67leP/+//7/////////////////////////////////////////////////////////////////////////////////////////////////5PbR/3rUIf9z0hb/c9IW/3PSFv9z0hb/etQh/8Drlv9irBzzTpoGW////wD///8A////AP///wD///8A////AP///wD///8AVZkAD1GcCPKu4X3/j9tF/3PSFv9z0hb/c9IW/3PSFv9z0hb/md5V//3+/P////////////////////////////////////////////X58P/u9ej/7vXo//r8+P///////////////////////////////////////////9Pxtv900hf/c9IW/3PSFv9z0hb/c9IW/5rfV/+i22v/UJ0H6VWqAAb///8A////AP///wD///8A////AP///wD///8ATpsHc3m8Ofaw5nv/dNIX/3PSFv9z0hb/c9IW/3PSFv+A1iz/9vzv////////////////////////////////////////////9fnw/1WeD/9UnQ7/UpwN/3qzRP////////////////////////////////////////////////+054P/c9IW/3PSFv9z0hb/c9IW/3bTG/+56Ir/arIk806aBlv///8A////AP///wD///8A////AP///wD///8AUJ4Hz57XZ/+P20X/c9IW/3PSFv9z0hb/c9IW/3PSFv/G7aH/////////////////////////////////////////////////7vXo/1SdDv9Omgb/TpoG/2mpLP/////////////////////////////////////////////////4/fP/f9Yq/3PSFv9z0hb/c9IW/3PSFv+Z3lb/ktFU/1GdB7f///8A////AP///wD///8A////AP///wBNmQAUUp4L+bXmhf941B7/c9IW/3PSFv9z0hb/c9IW/4jZOv/9/vv//////////////////////+jy3//l8Nv/////////////////7vXo/1SdDv9Omgb/TpoG/2mpLP//////////////////////1ujF//b68v//////////////////////xOyc/3PSFv9z0hb/c9IW/3PSFv+B1y7/sOR+/1CbB/ZVqgAG////AP///wD///8A////AP///wBOmQVfcbUw9qbiav9z0hb/c9IW/3PSFv9z0hb/c9IW/73qkf//////////////////////+/35/1+jHf9TnQ7/kMBk/+/26f//////7vXo/1SdDv9Omgb/TpoG/2mpLP///////////9npyf9wrTb/UZwK/4+/Yv//////////////////////9/zx/3bTG/9z0hb/c9IW/3PSFv9z0hb/suZ+/2avH/FPmgdH////AP///wD///8A////AP///wBQngetj85R/5DbRv9z0hb/c9IW/3PSFv9z0hb/c9IW/+r43P//////////////////////sdKR/1efEf9Omgb/UpwM/1WfEP+ly4D/5/Le/1SdDv9Omgb/TpoG/2mpLP/n8d3/g7hQ/1WdD/9Pmgf/TpoG/1OdDv/l8Nr//////////////////////5jeVP9z0hb/c9IW/3PSFv9z0hb/nN9a/4THQ/5OmwWP////AP///wD///8A////AP///wBRngbNmdZf/4bYNf9z0hb/c9IW/3PSFv9z0hb/htg1////////////////////////////fbVI/1WeDv9Omgb/TpoG/06aBv9VnhD/Vp8S/1SdDv9Omgb/TpoG/1OdDv9VnhD/UZsK/06aBv9Omgb/TpoG/1SdDv+82aH//////////////////////7/rlf9z0hb/c9IW/3PSFv9z0hb/kdxH/47PT/9Rnwe0////AP///wD///8A////AP///wBQnQfjodxo/3/WKf9z0hb/c9IW/3PSFv9z0hb/l95S////////////////////////////+fz3/6/Rjv9YoBP/VZ0P/06aBv9Omgb/TpoG/0+bCP9Omgb/TpoG/1CbCP9Omgb/TpoG/06aBv9XnxP/aKgq/8ziuP///////////////////////////9LxtP9z0hb/c9IW/3PSFv9z0hb/idk7/5fWWv9RnwfR////AP///wD///8A////AP///wBPnAf1qOFw/3jUHv9z0hb/c9IW/3PSFv9z0hb/peJp///////////////////////////////////////3+vP/p8yC/1efEv9UnQ7/TpoG/06aBv9Omgb/TpoG/06aBv9Omgb/V58S/2ClIP/D3ar//v/+/////////////////////////////////+H1zv9z0hb/c9IW/3PSFv9z0hb/gtcv/5/cY/9QnQfo////AP///wD///8A////AFWqAANPmgf+rOR1/3PSFv9z0hb/c9IW/3PSFv9z0hb/rOR1/////////////////////////////////////////////f78/7DSkP9Pmgf/UJsI/06aBv9Omgb/TpoG/06aBv9UnhD/Vp8S/9LlwP///////////////////////////////////////////+n42v9z0hb/c9IW/3PSFv9z0hb/fNUl/6Tgaf9Pmwf4////AP///wD///8A////AP///wBOmwb4puFt/3bTG/9z0hb/c9IW/3PSFv9z0hb/n+Bg///////////////////////////////////////G36//YqUi/1afEf9Omgb/TpoG/06aBv9Omgb/TpoG/06aBv9Omgb/T5sH/1aeEf95s0P/3uzR/////////////////////////////////9v0xP9z0hb/c9IW/3PSFv9z0hb/gNYr/53cYP9QnQbs////AP///wD///8A////AP///wBRngfnnNtg/3zVJf9z0hb/c9IW/3PSFv9z0hb/ktxJ////////////////////////////1ujF/2qqLf9XnxL/TpoG/06aBv9Omgb/U50N/1efE/9Omgb/TpoG/1aeEf9Omgf/TpoG/06aBv9Pmwj/VZ4P/4W5U//u9ef//////////////////////8zvqv9z0hb/c9IW/3PSFv9z0hb/hdg0/5PVU/9RngfW////AP///wD///8A////AP///wBRnwfRktRS/4HWLf9z0hb/c9IW/3PSFv9z0hb/fNUl//z++v//////////////////////e7RF/06aBv9Omgb/TpoG/1CbCf9VnQ//irxa/1SdDv9Omgb/TpoG/1+kHf9zrzn/Vp8S/06aBv9Omgb/TpoG/1KdDP+52J3//////////////////////7PmgP9z0hb/c9IW/3PSFv9z0hb/itk8/4nORv9QnQe7////AP///wD///8A////AP///wBRnge2iM1F/4fYN/9z0hb/c9IW/3PSFv9z0hb/c9IW/9nzwP//////////////////////1ujF/1aeEf9Omgb/VZ4Q/362Sv/l8Nv/7vXo/1SdDv9Omgb/TpoG/2mpLP//////yuG1/2KlIv9XnhH/TpoG/1qhFv/5+/b//////////////////////4jZOf9z0hb/c9IW/3PSFv9z0hb/kNtG/37GOf9QnQWZ////AP///wD///8A////AP///wBPnAdxcbkr95TdTf9z0hb/c9IW/3PSFv9z0hb/c9IW/6zkdf///////////////////////////4a6Vf9rqy//1efE////////////7vXo/1SdDv9Omgb/TpoG/2mpLP////////////z9+/+31pj/XKIZ/73Zof//////////////////////6fja/3PSFv9z0hb/c9IW/3PSFv9z0hb/nN9b/2exIPJOmgZY////AP///wD///8A////AP///wBLnggiVKAM9p/fX/910xn/c9IW/3PSFv9z0hb/c9IW/3jUH//x+uf/////////////////////////////////////////////////7vXo/1SdDv9Omgb/TpoG/2mpLP//////////////////////////////////////////////////////p+Nt/3PSFv9z0hb/c9IW/3PSFv951CD/nt9e/1GcCPdVmQAP////AP///wD///8A////AP///wD///8AUZwH4I7TS/+B1i3/c9IW/3PSFv9z0hb/c9IW/3PSFv+q5HH/////////////////////////////////////////////////7vXo/1OdDf9Omgb/TpoG/2mpLP/////////////////////////////////////////////////m99X/dNIY/3PSFv9z0hb/c9IW/3PSFv+H2Tj/hs5A/1GeBsr///8A////AP///wD///8A////AP///wD///8ATZsGh3K8K/qR3Ej/c9IW/3PSFv9z0hb/c9IW/3PSFv910xn/3PTF////////////////////////////////////////////+/35/4e6Vf90rzv/dK87/63Qi/////////////////////////////////////////////z++v+S3Er/c9IW/3PSFv9z0hb/c9IW/3PSFv+X3lL/arUh9k2aB23///8A////AP///wD///8A////AP///wD///8ATZsIIVGdCfeU2VL/fdUm/3PSFv9z0hb/c9IW/3PSFv9z0hb/ftYo/+354f///////////////////////////////////////////////////////////////////////////////////////////////////////////6njcP9z0hb/c9IW/3PSFv9z0hb/c9IW/4LXMP+Q1kr/UJwH81WcABL///8A////AP///wD///8A////AP///wD///8A////AFCcBZVttyb4ktxJ/3PSFv9z0hb/c9IW/3PSFv9z0hb/c9IW/4rZO//t+eL////////////////////////////////////////////////////////////////////////////////////////////+//7/tuiF/3PSFv9z0hb/c9IW/3PSFv9z0hb/dNIY/5feUv9lsBr2T5sIe////wD///8A////AP///wD///8A////AP///wD///8A////AFGUABNQnQj0jdVI/4HWLf9z0hb/c9IW/3PSFv9z0hb/c9IW/3PSFv9+1ij/3PTF//////////////////////////////////////////////////////////////////////////////////n99f+f4GD/c9IW/3PSFv9z0hb/c9IW/3PSFv9z0hb/htg2/4jSP/9QnAbtVY4ACf///wD///8A////AP///wD///8A////AP///wD///8A////AAAAAAFOmgZ5XaoW9ZTcTv961CL/c9IW/3PSFv9z0hb/c9IW/3PSFv9z0hb/ddMa/6zkdf/y++n////////////////////////////////////////////////////////////+//7/zu+t/4XYM/9z0hb/c9IW/3PSFv9z0hb/c9IW/3PSFv9+1ij/lNtO/1mlEPROmQVfAAAAAf///wD///8A////AP///wD///8A////AP///wD///8AAAAAAQAAAAEAVQADT5wHvGm3IPeS3En/dtMb/3PSFv9z0hb/c9IW/3PSFv9z0hb/c9IW/3PSFv951CD/ruV5/9rzwv/8/vr/////////////////////////////////7fnh/8Lrmv+N2kL/c9IW/3PSFv9z0hb/c9IW/3PSFv9z0hb/c9IW/3nUIP+U3U3/Yq8Y9k+cCKUAAAACAAAAAgAAAAEAAAAB////AP///wD///8A////AP///wAAAAABAAAAAQAAAAIAAAAEOXEAElCdB992wyv8jdpC/3bTG/9z0hb/c9IW/3PSFv9z0hb/c9IW/3PSFv9z0hb/c9IW/3PSFv971ST/kdxI/5/gYP+s5HX/puJq/5feUv+H2Df/c9IW/3PSFv9z0hb/c9IW/3PSFv9z0hb/c9IW/3PSFv9z0hb/eNQf/5HcSP9vviX6T5wH0SdOAA0AAAAFAAAAAwAAAAIAAAABAAAAAf///wD///8A////AAAAAAEAAAABAAAAAgAAAAQAAAAHAAAACjl3Bi1PnAbwd8Uq/Y7bRP951CD/c9IW/3PSFv9z0hb/c9IW/3PSFv9z0hb/c9IW/3PSFv9z0hb/c9IW/3PSFv9z0hb/c9IW/3PSFv9z0hb/c9IW/3PSFv9z0hb/c9IW/3PSFv9z0hb/c9IW/3PSFv981Sb/kdxI/3G/JftPnAfrMFoHJQAAAA0AAAAJAAAABgAAAAQAAAACAAAAAQAAAAH///8A////AAAAAAEAAAACAAAABAAAAAYAAAAKAAAADgAAABM1ZQQ6T5oH5mm3HfmO20T/ftYo/3PSFv9z0hb/c9IW/3PSFv9z0hb/c9IW/3PSFv9z0hb/c9IW/3PSFv9z0hb/c9IW/3PSFv9z0hb/c9IW/3PSFv9z0hb/c9IW/3PSFv9z0hb/c9IW/4HWLf+O2kT/ZLIZ906ZB94rUgU1AAAAFwAAABMAAAAOAAAACgAAAAYAAAADAAAAAgAAAAH///8AAAAAAQAAAAEAAAADAAAABQAAAAkAAAANAAAAEgAAABcAAAAdGjMAMk2WBs5dqxP2h9U8/4rZO/961CH/c9IW/3PSFv9z0hb/c9IW/3PSFv9z0hb/c9IW/3PSFv9z0hb/c9IW/3PSFv9z0hb/c9IW/3PSFv9z0hb/c9IW/3PSFv981SX/jNo//4bUOf9YpRD2SpIHxA8kADIAAAAiAAAAHAAAABcAAAARAAAADAAAAAgAAAAFAAAAAgAAAAEAAAABAAAAAQAAAAEAAAADAAAABgAAAAoAAAAPAAAAFAAAABkAAAAgAAAAJwULADBEhQWlT5sI+Gu6H/yL1z7/htg1/3vVJP900hf/c9IW/3PSFv9z0hb/c9IW/3PSFv9z0hb/c9IW/3PSFv9z0hb/c9IW/3PSFv900hj/fNUm/4jZOf+J1zz/aLcb+06bB/c/fAaeAAUANgAAACwAAAAlAAAAHwAAABkAAAATAAAADgAAAAkAAAAFAAAAAwAAAAEAAAABAAAAAQAAAAEAAAADAAAABQAAAAkAAAAOAAAAEwAAABgAAAAeAAAAJQAAAC0AAAA4GzQDXkaJBslQnAj6br8i/oPTNv+M2j//hdgz/33VJv961CH/dtMb/3TSF/9z0hb/dNIY/3fTHP961CL/ftYo/4bYNf+M2kD/gtI0/2u8H/5Rmgj6QoEGxhIkA2MAAABDAAAANgAAACsAAAAkAAAAHQAAABgAAAASAAAADQAAAAgAAAAFAAAAAgAAAAEAAAAB////AAAAAAEAAAACAAAABAAAAAcAAAALAAAAEAAAABUAAAAaAAAAIAAAACgAAAAyAAAAQQAAAFAePQJ+Q4QG0U6YB/pVoQz4bL0f/n3MLv+E1DX/iNk6/4vaPv+L2j3/i9o9/4jYOv+D0zT/e8ws/2i5HP5Tnwv5TpgH+UF+BtAZMwKDAAAAWwAAAEwAAAA9AAAAMAAAACUAAAAfAAAAGQAAABQAAAAOAAAACgAAAAYAAAADAAAAAgAAAAH///8A////AAAAAAEAAAACAAAAAwAAAAUAAAAHAAAACwAAAA8AAAATAAAAGAAAAB4AAAAmAAAAMQAAAD0AAABKAAAAVgMFAGYiRQOUO3cFykuSBu9Olwf6TpoG/lCaB/pSngr5TpkG+02aBv5NmAb5SpAG7zpyBMoePAKYAgIAbQAAAGAAAABUAAAARwAAADkAAAAuAAAAIwAAABwAAAAXAAAAEgAAAA4AAAAKAAAABwAAAAQAAAACAAAAAQAAAAH///8A////AP///wAAAAABAAAAAgAAAAMAAAAEAAAABgAAAAkAAAAMAAAADwAAABQAAAAYAAAAHgAAACcAAAAvAAAAOQAAAEIAAABLAAAAVQAAAFwAAABhBQoAahMnAnwcOAKJEiUCfQUHAG0AAABmAAAAYQAAAFkAAABSAAAASAAAAD8AAAA1AAAALAAAACQAAAAcAAAAGAAAABIAAAAOAAAACwAAAAgAAAAGAAAABAAAAAIAAAABAAAAAf///wD///8A////AP///wAAAAABAAAAAQAAAAEAAAACAAAAAwAAAAUAAAAGAAAACAAAAAsAAAAOAAAAEAAAABQAAAAaAAAAHQAAACMAAAApAAAALQAAADIAAAA1AAAAOQAAADoAAAA8AAAAOwAAADoAAAA5AAAANAAAADEAAAAsAAAAJwAAACEAAAAbAAAAFwAAABMAAAAQAAAADAAAAAoAAAAIAAAABgAAAAQAAAADAAAAAgAAAAEAAAAB////AP///wD///8A////AP///wD///8A////AAAAAAEAAAABAAAAAQAAAAIAAAADAAAABAAAAAUAAAAGAAAACAAAAAoAAAAMAAAADgAAABAAAAASAAAAFAAAABYAAAAYAAAAGQAAABkAAAAZAAAAGQAAABkAAAAZAAAAGAAAABYAAAAUAAAAEQAAAA8AAAANAAAACwAAAAgAAAAHAAAABgAAAAUAAAADAAAAAwAAAAIAAAABAAAAAf///wD///8A////AP///wD///8A";
+
+ private const string tag_icon_emblem = "R2RrUAAAGxgBAQABAAAAkAAAADAAAAAwgYFpgYFpdnZkZGVbVlZUTExRZl5iem1xlH+CinuAe3N6Z2lyYmZvb21zfnZ5jn5+jX59jH18i3x7hnh4fW1wdGJobVliYU9WVkZJTT4/QTQ1NCstKiMmIRwgKCEjLSQlMykoQzUyUz87ZkxFfWBXlXdss5SH0bGi17us38a55tLG28m+tqadkoJ8dWZhdWZhgYFpgYFpdnZkZGVbVlZUTExRZl5iem1xlH+CinuAe3N6Z2lyYmZvb21zfnZ5jn5+jX59jH18i3x7hnh4fW1wdGJobVliYU9WVkZJTT4/QTQ1NCstKiMmIRwgKCEjLSQlMykoQzUyUz87ZkxFfWBXlXdss5SH0bGi17us38a55tLG28m+tqadkoJ8dWZhdWZhhIFthIFteHVnZGNcU1NTSEhPY11ieG1xk4GEi32CfnZ7bmxzaWlvcm1yfXJ1iHh5hXV2gHJzfG9weGtscmNmbFthaFVcXUxRU0RHSj0+PzQ1NCstKiMmIh0gJyAiKiMjLyYlQDIvUD05Y0tFel5Wj3NpqYyAw6aYyq+i0ruu2se60L6zrp2UjHx1cWFccWFcioB1ioB1e3RsY19eUE9SQkNLXlphdG1ykISIjYKFhXt+enJ0dW1veG1ve21wf21wd2dqbWBjY1lcX1VZX1NWX1BUYE5TV0dLTkFDRzw8PTQ0MystKyQnIx4gJR8gJiAgKCEfOi4qSzs2YEpEdVxUhWtjmX91rZOItJyRvaicxrOnvqyhoI6GgXBqaVlUaVlUjoB6joB6fnJwY11fTUtSPD9JWlhgcW1zj4aKj4WHin6Ag3Z2fnBvfGxteWhrd2Vpa1xhXVJXT0hNS0RJUEZKVUdKWUhLUUNFSj4/RDo7OzQ0MywtLCUnJB8hJB4fIx0dIx0aNSonRzgzXUpDcFpSfGZei3RsmoN6oo2DrJiOtqSYsJ6TlIN6eWdhY1JOY1JOmIWFmIWFhnh6aWFmUU9XP0JMXFxkc3F3kIuPk4mLj4KCi3l2hHBtfWppdGJkbFpgXU9VTEJJOjY8NzI5QDc8SDw/T0BCST0+Qzo6Pzc4ODIyMSssKyUmJR8gIx0dIRsaHxkXMigkRTgzXUxFcFtTd2NbgWxkinZukn51m4h+pZOHn42Ch3Vsb11XW0pGW0pGsqSfsqSfo5iUi4SCd3R0aGdpfXl6jYeIoZiamo6Pj4GCgXBwdGNjbV1fY1VZWk1TT0VLQjtBNTE3Mi40ODE2PjQ4Qzc6PjM2OTAyNS0vMCkqKiQlJSAhIBwdIhwcJB0cJx0bPTArU0I8bllQgWpfh3BljndslX9yl4J1moZ3nYl6lYJ0fWthZlRPU0NAU0NAxr20xr20urKqpqCZlpKLiYWAlpCMoZiWr6KioJKTj4CCeWlraFlcYFNWVktQTERJRD1DOjY7MC40LisxMi0yNS4zOC80NSwwMSgrLiUoKSEkJB4gIBwdHRoaIhwcJx4dLSAeRjYxXkpDfGRaj3Zpk3ttmIBxnYZ2m4V0mYNyloJwjHlpdWNZXk5ITD07TD074NvO4NvO19PEyMO1vLeosqudt6yju66nwK+tqJeYj3+Cb2FmWExSUEZMRT9EOzc9NjM5MS80KyovKSctKictKyYtLCYtKSIoJx4jJRsfIRgcHRcZGRcYGBcXIhsbKh8eNCQiUT03a1RMjHJloYV1o4h3pYx4qI96oIl0l4FsjnlkgW1ba1lOVUVARDY1RDY16+fZ6+fZ5N7P18+/zcKywbSjuaqfsqKcqpmYkYKEem1wXVJYSEBHQjxCOzc8NDI2MS80LiwwKigtKSYsJyQqJiMpJSIoIx4kIBsgHhgcHRcaGxcZGhcYGhgYJR0cLSIfNyckUj43a1RKi3BioINypYh2rI96s5Z/qIx2mX9ri3Nff2dXb1dNX0ZDUjo8Ujo88e3f8e3f6uPV39PD1ca1yLWktaKXpZONkYCBeWtuZVpfTEVLOzc9ODU6NDI2MTAyLy0xLSovKyctKSUrJiMpIyEnIR8lHxwiHBkeGhcbGRcaGhgaGxkZHRsaJyAeLyQhOSkkUj42aVJHhWtdm35tpIZzsJB7vJqDro54nH5ri25df2NVdVZPaklIYj9DYj9D+fPn+fPn8+rc6dnI4Mu50belr5iNlH97cmBjW09US0NJNzQ7LCwyLCwwLCwvLCwtLCotLCgsKyYsKSQrJSEnIB4kHBwhGRofFxgcFBYaFhcaGRkaHRsbIR0cKyIfMiYiOyslUT00ZU5Df2RWlXdmo4NwtZF8xqCItZB7n3xqiWlaf15TfFVQeUxOdkVNdkVN/PXq/PXq9Ond59XG3cW0yq6cooqAgm1pWUlNRjtBOjQ6KysxJCctJyktKywtLy4tLi0uLisuLSkuKictJCMpHiAlGh0iFxsgFBoeEhkdFBkcGRsdHh0dJCAeLiUhNSkkPi4nUj41ZE5CemFTj3Jinn5ssY15w52GsYt4mnZmhGFVfVdPglRSiFFVjE9YjE9Y+O/n+O/n7eDX2ce7ybOkspmJjnlwcV9cTUBDPjU7NTI3Ky0yJywwLC8xMjMzODc0NTU0MjI0LzA0LC0yJikuICYrGyMoGCEmFSAkEx4iFR4hGh8gHyAfJSEfMCcjOCwmQzIqVUI4ZVBFeWJVinFilXppooVysJB7oH9ujWtfeVdPd1BMhlRUlFhcoFtioFti9Ofj9Ofj49XPx7atsJ2Rk35ydWRdXU5MPjQ3NC8zMC8zKi8zKzE0MjY2Ozw5Q0E9Pj88ODs7Mjg6LTU4JzE1IS0yHCowGSgtFicrFCUqFiQnGyMkICMiJiQgMislPDApSDctWEY7ZlNId2RYhHBjiXVmkXppmH9tjHBifF1VbEpHcUhIilRWpGBkuWpwuWpw8ODg8ODg2srItaSfmIZ/dWRbXE9KSD48LygrKigsKiwvKjEzLzc4OD08Q0VAT0xFSElEPkVCNUFBLz0/KTk8IzU5HjE3Gy81GC4zFS0xFystHSgoISYkKCYhNS4nQDQrTTwxW0o/Z1dLdWZbfW9jfm9if29hgG9fd2FWa1BLYD5Aaj9Dj1RYtGlt0nl90nl989rd89rd3MbHtqOgl4eCc2hgW1RRR0RFLjA2KzE3LTY8LzxBNUNGPkhISU5LVFVPTVFNRE1LO0lJNkZIMUJFLT9DKjxBJTk+Hzc7GzU5HDE0IS0uJCkpKyglODAqQjYuTz4zXEo/Z1RJc2FXfGpffmtggG1hgm9iemRacVZRZ0lHbUpJiFhYo2dmuHNyuHNy9tPa9tPa38HFtqKilomGcW1nWVtaRkxQLjpDLT1GMUNLNkpSPVFXRVVYUFpZWmBaU1xZS1dWQlNUPlBSPE5ROktPOElOMUVKKUFGIz5DIjk9JjM1KS4vLioqOzIuRTgxUkA1Xkk/Z1FHcltSemNafWZdgWphhW5lf2dfd19YcFdRcldRgF5XjmZemWxjmWxj+szX+szX4bzEt6GklYuKbnJuV2JjRFRbLURQLkhUNU9bPFljRWBoTWNnV2dnYWtmWmdkUmJhSl1fR1pdR1lcR1hbR1daPVJVM0xRKkhNKEFGKzk9LTI1Mi0vPjQySDo0VUI3X0k/Z09FcFZNeFxVfWFagmdhiG1pg2tlfmhgeGVbdmRYd2RXeGRWeWRVeWRV9sDN9sDN3bO8s5ugkYmKa3NyV2dqR11kM1BcNFNgOlllQWFsSGZvTWdtVGhqW2lnV2ZmUmNjTWBhTV9hT19hUmBhVGFiR1pdO1RYMU9ULUdMLj1BLzQ5My4xQDY0Szw3WEQ6YUtBaVFHclhPeF5Xe2JcfmdjgWxqgGxnfm1lfW1iemtec2ZYbGFRZl1NZl1N6Km36Km30J+qqY6ViYCFZnJzWW1xT2lvQmRsQWRuQ2ZvRWhyR2dwR2NrR15kR1ldSVpdTFtdTl1dUl9fWWRiX2hlZWxoVWVkRV1gOFdcMkxTMUBFMTc7My8xQjc2Tj45XEc9Z1FHbllPd2Nae2lhd2ljcmhmbWhpcmtpeXBpgHRqfXFmcGZaY1tPWFJGWFJG2pGh2pGhxIuYnoGLgHiAYXF1W3N4V3V6UXh9TnV8THJ6Sm53RmhyQF9pOlReM0pUO05VRVRXT1pZV19cYmhjbXFqdnhvY29rUGVnQF5kN1JZNERKMjk9MzAyQzk3UUE8YUpBbFZNdGFXfW5kfXRsc29rZmppWWVoZWtrdHNug3pygXdtbmZdWlRMSkdASkdAz36Pz36PunuKlnaCenJ8XXB2XXh+XX+DXYeLWIOHVHyCTnR8RWlzO1xoL01aIz1MMEVPQE5SUFdWXGBbamxkeHhtg4F0bXdxWGxtR2RqO1dfN0hNMzs/MzEyRTs5U0I+ZUxEcVtReGdegXdtf3x0cHVwXGtsSWJnWmtscHVyhYB5hHtza2VfU1BKPz46Pz46u3B9u3B9rHF8knR8fXd8aHp9ZH6AYYGDXYWHVnyAT3N4RmhuPVtkNFBZKUJMHjRALT5FP0tMUlhUXGBZZGhha3BocnduYXBsUGlrQmNpO1phOk9TOkVJPD4/TENBWEhDZ05FcV1TeGphgXtyf4J6cXp2YHFyTmhtWm5wanV0eXx4eHhyZGViUVJRQkREQkREqGFqqGFqnmhvjnN3gXx9coSDa4ODZYODXYKDU3Z5SmpuP1xhNE5VLERLIjg/GCwzKjg8P0hHVFhRXWBYXmVeX2lkYGxoVGloR2VoPWNoOl1jPlZaQVBTRkpLU0xJXU5IaVBHcl9VeG5kgIB2f4d/coB8Y3d3U29zW3F0ZHV1bXl3bHRyXWVlT1VYRElORElOmVZcmVZck2Bki3JyhIB+eo2JcIiGaISDXX+AUXFzRmNmOVJXLUNJJjpAHS80FCUpJzM0P0ZCVllQXmFXWmJbVWNgUmRjSWNlQWNmOmJoOl9lQVtfRlhaTlRVWFNQYFNMalJIcmFXeHBmgIN6f4uEc4WAZXx8V3R4W3R3X3V3ZHZ2YnFyWGRnTlhdRk5VRk5VmF5dmF5dk2dlinVyg4F8eouGboWDZYCBWXp+TGxwQl5jNk5SKz9EJDc8Gy0xEiMmJDEyOkRAUVZPV15WUl5bTV9gSV9kQ2BlPWFnOWJoO2FnQl9kSF5iUFxfWlpZYllUbFdPcmVcdnNre4R9eoyHc4eEaYCAYHp9YHl8YXh7YXh7X3N3WmluVV5lUlZdUlZdo3Vso3Vsm3hvjHx1gIB6coJ+Zn19XXl9UXR9R2dwQFxkN05ULUJHJTo/HC81EiUrITI1M0FBRlFOTFhWSVtcR11jRV9oQWBpPWFqOmJqPGJqQmFpRmFpTWBnWGBiYV9ebF9ZcGpkcXVwc4J/c4mIcYeGboSEbIGCaoCCZ36DZH2DY3mAY3B2Y2hsY2FlY2FlrYd4rYd4oYV4joJ4fn93bHt3YHZ5V3N6S257Q2RwPltkN09WL0RJJzxBHDE4EicuHjI3LkBCPU1NQ1RVQlhdQltlQV5sP19sPWBsO2FsPWJsQWNtRGNuSmNuV2RpYGVmbWVhbm5rbXZ1bIGBbYeIb4eHcoaGdoaFcYWHbIOIZoGKZX6HanZ9bm9ycWlqcWlqr5R/r5R/oo58i4R3eXx0ZXNxWnF1Um55R2x9QmRzP11oPFNaNkpOLEFGIDU8FCoyHTM6KT9ENUpOOlBVPVZfP1toQF9wP2BvP2JvPmNvP2RwQmVyRGZ0SGd1VWlyX2tva21sa3JyZ3h6ZH+DZIOIa4WIc4eIe4iHdoiKb4eOaYaSaYSPcn6Eend5gHJxgHJxjnhljnhlhndneXVrb3RuY3NyXXZ6WHeBUnqJUnR/U250VWdmT1xZQFBQLkBDGzE3JDk/LkNIOU1RP1NZQ1piR2JsS2dzSmh0SGp1R2t1R2x2R2x4SGx5Sm15Um94WHB3YHF2X3R6XXd9WnqBWnyDXnyCYnyAZnx/Z4CFaYWNa4qVb4mUeISJgX5+iHp1iHp1c2FQc2FQcGRWa2pgZ25pYnNzX3p+XX+HWoWSXoGJY3x+aXZwY2tiUFxXOUlJIjY8KT1DM0ZMPE9UQlZcSF5lTmduU252Um94UHB5T3F7TXJ8THF8S3F8S3J9T3N9U3R+V3V/V3Z/VXaAU3eAUnZ/U3V9VHN6VXF4XHmBZIOMbYyXdI6YfYmMhoSBjX94jX94UkU2UkU2VE1BWVtUXGZiYHN0Yn+DY4iPZZOebpGWd46LgYl9fH1uZGthR1RRKT1BMENIOEpQQFJYR1lfT2NoV25yXnZ5XHd8Wnh/WHmBVXmCUniBT3iBTHeBTHiETHmGTHqJS3iGS3WDSXJ+SG96Rmx3Q2hzQGVvTnF7XoCLb5CbepScg4+RjYqFlId8lId8PTIlPTIlRT0yUVFJW2FcZXNxZX6BZoiOZpOebpOYdo+Pf4uDeoB1Y21mR1ZVKj9DMENINklPPVBVRFZcTGFmVWxwXXV4WnZ7WHd+VniBVHiCUniCUHeBTXeBTHiES3iGSXmJS3iGTnaCUXR+T293R2dwPV1mNFNcQ2BpVnF6aYKKdIiOfYaHhoSAjIJ7jIJ7LyQZLyQZOjIoTUpCXF1Wa3JuaH1+Z4aLZJGbapGXcY6QeYqGc395Xm1qQ1ZXKT9ELkNINEhNOk1SQFNYSV5iUmltWXJ1V3N5VXR9U3WAUXaBUHaBT3aBTnaBTHaDSneFSHeHTXeEU3eBWnd+WHF1S2RpO1NaLENLO1FYT2JoY3R5bnt+dnt8fXx7g315g315HhQKHhQKLSQbSEE4XVhPcXFqbHx6aISHY4+YZo6Wa4yRcImKan5+V2xuQFZZKEBELENHMEZKNUpOO1BTRFpeTWVpVW1yUm92UHF6T3J9TnN/T3SAT3SAT3WATHWCSnWCR3WEUHeCWXmAZXt9Y3NzUGBiOUhMITA2Mj5DRlBTW2JjZmprbG5vcnJzd3V3d3V3HBEIHBEILCIYST81X1ZMdHBmbXl1Z4CCYIqRY4uTZ4qRbImPZoCFVW90P1lfKURKK0VKLkZLMUhLNkxQP1ZbSGFmT2luTWtzS213Sm56SnB9THJ+TXN/TnSASnOASHKARHGAUHV/XXl+bX18bHVyWGBePkVGJCotMzc5RkhIWVhXY2JhaGlqbnBzc3V6c3V6LB8WLB8WOS0jUEU6YVhNcm1ianVwZHt7XYOJYYeOZomQbIyTaIWMV3V8Q2FoLkxULktSLklOLkdLMUpOOlRZQ15jSWVrSGdvR2lzRmt2R216SXB8SnF+S3OASHF/RXB+Qm59T3N8Xnd7b317cXdyYGVhSk1LNTY1QEFATk5NXVxaZWVkbW5vdHZ7en2Een2EQTAoQTAoSjsxWUxBZFpPb2leZ29qYXRzWXt/XoKIZYiPbY+XaoyVW32GR2pzM1dhMVJbLkxTKkZMLEdMNFBWPFlfQmFnQmNrQmVvQWdyQ2l2RW16RnB9R3KARG99Qm17P2p4Tm94XnV4cn15eHpya2pkW1dSSkRAUUxIWVZTYmBeaWlocnR2e3+FgoiQgoiQVkI5VkI5Wkk/YlRJZ1xQa2ZaZGpjXW5rVnJ0XH2CZIeObpOcbZOeXoWQS3N/OWFtNFlkLU9YJ0VMJ0RLLk1TNVVcO1xjPF5mPGBqPWJtPmZyQWt4Qm58Q3GAQW18Pmp4PGZ0TWx0X3R2dX13fnxydXBna2JYYFNKYlhRZV5ZZ2VibGxsd3p+goePipKdipKdbltQbltQbVxSal9VaGFXZWRaXmhjWWtqU29zWHl/X4KKaI6YZ4+bW4SRTXeEP2l3OF9rMFJcKEZNJkNKK0pRMVBXNVVcN1hgOVtlOl5oPmNuQ2t2R3B9SnWCR3F+RG17QGl3TW11W3J1bXh0d3lxdXNqdGxicmZacmlhcW1pcXFxdHd6foOJiI+Yj5mjj5mjjXltjXlthHRqdW1kamZfXWFbWGRjVGdpT2pxU3R9WX2GYIiTYIuXWISRT3yKRXSCPWd0M1diKUdPJkJKKEZNK0lRLUxUMVFZNVVeOFliPmFqRmt1TXJ+UnqFTnWBSnJ+Rm56Tm53V3B0Y3JwbnRudnduf3puiX1uhX50gX98fICEfoWLh4+Xj5qilqKrlqKrq5iKq5iKm42BgHpza2xnVV5cUWFjT2NoS2ZvTm96U3eDWIGOWYaUVYSSUYGQTH6OQm59NltnKkhRJUFJJUJKJUNLJURLK0lRME9XNVRcPl5mSWt0UnV+W36IVXqEUXaBTHJ9T3B4VG5zWWxtZXBsdnpyi4d6oJWCmZOIkZKPiJCXiJOdkJull6Stnaq0naq0taOVtaOVo5aLhoF6bnBsVWBfUGFkTGJoR2NtSWt2TXN/UnyJVIKQU4KQUYKRUIKSR3OBO2BsME1XKkVOKEVNJkRMJENLKklRME9YNVRdP19nTGx0VnZ/X4CJWn2GVnqDUXaAUnJ6VG91VmtuYnBud313kY6CqqCNoJqPkpSShY2Vgo6Zi5ahk5+omaaumaausKCUsKCUoZaLiIR8dHZxXWhlU2RmSmJnQF9oQmVwRm14S3aDTn2KUH6MUYGOU4OQTXeDRWlyPVpiOFNaM1BXLU1VKUtTLlBZNFZgOFtlQmRtTm94WHeAYX+IXn6GW36GWHyEWHh/WXV6WnB0ZXR0eYF9lJKIrqOUnJaNhoaGcHZ+a3R/dX6IgImRiJGYiJGYrJ2TrJ2Tn5WMi4d/enx1ZnBrVmhoSWJmOVtjOmBqPmdyRHB8SXeETXuHUX+LVoSPU3uFT3F5S2dtRmBmPVtiNVZeLlJbM1hhOF5oPGJtRWl0UXJ7WniBY3+GYoCHYYGIX4OIXn6EXnp/XXV5Z3h7fIaEl5aPsaebmZKMenl5W19nVFpkYGZvbXN6d32Cd32CqJuSqJuSnpSMjYqCf4F5bXZwWGtqSGJlM1dfNFxmOWNuPmt3RXN/SniDUX6IWISNV3+GVnh+VXF1UWtwRmRrO15lMlhhNl5oO2NuPmhzR255U3R+XHmBZX+FZYKIZYSJZYeMY4OIYn+EX3l+aXyAfomJmZmUtKqglo+LcG5wSkxVQUVPT1NbXmFnaWxxaWxxqJuSqJuSnpSMjYqCf4F5bXZwWGtqSGJlM1dfNFxmOWNuPmt3RXN/SniDUX6IWISNV3+GVnh+VXF1UWtwRmRrO15lMlhhNl5oO2NuPmhzR255U3R+XHmBZX+FZYKIZYSJZYeMY4OIYn+EX3l+aXyAfomJmZmUtKqglo+LcG5wSkxVQUVPT1NbXmFnaWxxaWxx";
+ }
+}
+#endif
diff --git a/src/ThumbnailCache.cs b/src/ThumbnailCache.cs
index 1910bdc..17e7552 100644
--- a/src/ThumbnailCache.cs
+++ b/src/ThumbnailCache.cs
@@ -13,7 +13,7 @@ using System;
using System.Collections;
using Gdk;
-using FSpot.Utils;
+using Hyena;
namespace FSpot
{
@@ -23,7 +23,7 @@ public class ThumbnailCache : IDisposable {
private class Thumbnail {
// Uri of the image source
- public Uri uri;
+ public SafeUri uri;
// The uncompressed thumbnail.
public Pixbuf pixbuf;
@@ -55,7 +55,7 @@ public class ThumbnailCache : IDisposable {
}
}
- public void AddThumbnail (Uri uri, Pixbuf pixbuf)
+ public void AddThumbnail (SafeUri uri, Pixbuf pixbuf)
{
Thumbnail thumbnail = new Thumbnail ();
@@ -70,7 +70,7 @@ public class ThumbnailCache : IDisposable {
MaybeExpunge ();
}
- public Pixbuf GetThumbnailForUri (Uri uri)
+ public Pixbuf GetThumbnailForUri (SafeUri uri)
{
if (! pixbuf_hash.ContainsKey (uri))
return null;
@@ -83,7 +83,7 @@ public class ThumbnailCache : IDisposable {
return PixbufUtils.ShallowCopy (item.pixbuf);
}
- public void RemoveThumbnailForUri (Uri uri)
+ public void RemoveThumbnailForUri (SafeUri uri)
{
if (! pixbuf_hash.ContainsKey (uri))
return;
@@ -109,7 +109,7 @@ public class ThumbnailCache : IDisposable {
~ThumbnailCache ()
{
- Log.Debug ("Finalizer called on {0}. Should be Disposed", GetType ());
+ Log.DebugFormat ("Finalizer called on {0}. Should be Disposed", GetType ());
foreach (object item in pixbuf_mru) {
Thumbnail thumb = item as Thumbnail;
pixbuf_hash.Remove (thumb.uri);
diff --git a/src/ThumbnailCommand.cs b/src/ThumbnailCommand.cs
index d328fea..34a9756 100644
--- a/src/ThumbnailCommand.cs
+++ b/src/ThumbnailCommand.cs
@@ -1,6 +1,7 @@
using System;
using Gtk;
using FSpot;
+using FSpot.Utils;
using FSpot.UI.Dialog;
public class ThumbnailCommand {
@@ -15,7 +16,7 @@ public class ThumbnailCommand {
public bool Execute (Photo [] photos)
{
ProgressDialog progress_dialog = null;
-
+ var loader = ThumbnailLoader.Default;
if (photos.Length > 1) {
progress_dialog = new ProgressDialog (Mono.Unix.Catalog.GetString ("Updating Thumbnails"),
ProgressDialog.CancelButtonType.Stop,
@@ -29,9 +30,7 @@ public class ThumbnailCommand {
break;
foreach (uint version_id in p.VersionIds) {
- Gdk.Pixbuf thumb = FSpot.ThumbnailGenerator.Create (p.VersionUri (version_id));
- if (thumb != null)
- thumb.Dispose ();
+ loader.Request (p.VersionUri (version_id), ThumbnailSize.Large, 10);
}
count++;
diff --git a/src/ThumbnailGenerator.cs b/src/ThumbnailGenerator.cs
index ae4d408..d9a61ac 100644
--- a/src/ThumbnailGenerator.cs
+++ b/src/ThumbnailGenerator.cs
@@ -8,7 +8,7 @@
*/
using System;
-using System.IO;
+using Hyena;
using FSpot.Utils;
using FSpot.Platform;
@@ -16,79 +16,20 @@ using Mono.Unix.Native;
using GFileInfo = GLib.FileInfo;
namespace FSpot {
- public class ThumbnailGenerator : ImageLoaderThread {
-
- static public ThumbnailGenerator Default = new ThumbnailGenerator ();
-
- public const string ThumbMTime = "tEXt::Thumb::MTime";
- public const string ThumbUri = "tEXt::Thumb::URI";
- public const string ThumbImageWidth = "tEXt::Thumb::Image::Width";
- public const string ThumbImageHeight = "tEXt::Thumb::Image::Height";
-
- public static Gdk.Pixbuf Create (Uri uri)
- {
- try {
- Gdk.Pixbuf thumb;
-
- using (ImageFile img = ImageFile.Create (uri)) {
- thumb = img.Load (256, 256);
- }
-
- if (thumb == null)
- return null;
-
- try { //Setting the thumb options
- GFileInfo info = GLib.FileFactory.NewForUri (uri).QueryInfo ("time::modified", GLib.FileQueryInfoFlags.None, null);
- DateTime mtime = NativeConvert.ToDateTime ((long)info.GetAttributeULong ("time::modified"));
-
- FSpot.Utils.PixbufUtils.SetOption (thumb, ThumbUri, UriUtils.UriToStringEscaped (uri));
- FSpot.Utils.PixbufUtils.SetOption (thumb, ThumbMTime, ((uint)GLib.Marshaller.DateTimeTotime_t (mtime)).ToString ());
- } catch (System.Exception e) {
- Log.Exception (e);
- }
-
- Save (thumb, uri);
- return thumb;
- } catch (Exception e) {
- Log.Exception (e);
- return null;
- }
- }
-
- private static void Save (Gdk.Pixbuf image, Uri uri)
- {
- try {
- ThumbnailCache.Default.RemoveThumbnailForUri (uri);
- } finally {
- ThumbnailFactory.SaveThumbnail (image, uri);
- }
- }
-
- protected override void EmitLoaded (System.Collections.Queue results)
- {
- base.EmitLoaded (results);
-
- foreach (RequestItem r in results) {
- if (r.result != null)
- r.result.Dispose ();
- }
-
- }
-
- protected override void ProcessRequest (RequestItem request)
- {
- try {
- base.ProcessRequest (request);
-
- Gdk.Pixbuf image = request.result;
- if (image != null)
- Save (image, request.uri);
-
- System.Threading.Thread.Sleep (75);
- } catch (System.Exception e) {
- System.Console.WriteLine (e.ToString ());
- }
- }
-
- }
+ public class ThumbnailLoader : ImageLoaderThread {
+
+ static public ThumbnailLoader Default = new ThumbnailLoader ();
+
+ public void Request (SafeUri uri, ThumbnailSize size, int order)
+ {
+ var pixels = size == ThumbnailSize.Normal ? 128 : 256;
+ Request (uri, order, pixels, pixels);
+ }
+
+ protected override void ProcessRequest (RequestItem request)
+ {
+ var size = request.Width == 128 ? ThumbnailSize.Normal : ThumbnailSize.Large;
+ request.Result = XdgThumbnailSpec.LoadThumbnail (request.Uri, size);
+ }
+ }
}
diff --git a/src/TimeAdaptor.cs b/src/TimeAdaptor.cs
index 3dcb3f5..2b80a83 100644
--- a/src/TimeAdaptor.cs
+++ b/src/TimeAdaptor.cs
@@ -12,7 +12,7 @@ using System;
using System.Threading;
using System.Collections.Generic;
using FSpot.Query;
-using FSpot.Utils;
+using Hyena;
namespace FSpot {
public class TimeAdaptor : GroupAdaptor, FSpot.ILimitable {
@@ -124,7 +124,7 @@ namespace FSpot {
int max_year = endyear;
if (year < min_year || year > max_year) {
- Log.Debug ("TimeAdaptor.IndexFromDate year out of range[{1},{2}]: {0}", year, min_year, max_year);
+ Log.DebugFormat ("TimeAdaptor.IndexFromDate year out of range[{1},{2}]: {0}", year, min_year, max_year);
return 0;
}
@@ -138,7 +138,7 @@ namespace FSpot {
int max_year = endyear;
if (year < min_year || year > max_year) {
- Log.Debug ("TimeAdaptor.IndexFromPhoto year out of range[{1},{2}]: {0}", year, min_year, max_year);
+ Log.DebugFormat ("TimeAdaptor.IndexFromPhoto year out of range[{1},{2}]: {0}", year, min_year, max_year);
return 0;
}
diff --git a/src/UI.Dialog/AboutDialog.cs b/src/UI.Dialog/AboutDialog.cs
index 73d111c..c77eb75 100644
--- a/src/UI.Dialog/AboutDialog.cs
+++ b/src/UI.Dialog/AboutDialog.cs
@@ -12,6 +12,7 @@
using System;
using System.IO;
using Mono.Unix;
+using Hyena;
namespace FSpot.UI.Dialog
{
@@ -28,58 +29,77 @@ namespace FSpot.UI.Dialog
"Primary Development",
"\tLawrence Ewing",
"\tStephane Delcroix",
+ "\tRuben Vermeersch",
"",
"Active Contributors to this release",
- "\tChristian Krause", //0.6.1.3
- "\tKarl Mikaelsson", //0.6.1.3
- "\tIain Lane", //0.6.1.3
- "\tLorenzo Milesi", //0.5.0
+ "\tAnton Keks",
+ "\tBertrand Lorentz",
+ "\tChristian Krause",
+ "\tChristopher Halse Rogers",
+ "\tDaniel Köb",
+ "\tGabriel Burt",
+ "\tIain Churcher",
+ "\tIain Lane",
+ "\tLorenzo Milesi",
"\tMike Gem\x00fcnde",
- "\tRuben Vermeersch", //0.5.0, 0.6.0
+ "\tNick Van Eeckhout",
+ "\tPaul Lange",
+ "\tPaul Wellner Bou",
+ "\tPeter Goetz",
+ "\tVincent Pomey",
+ "\tWojciech Dzierżanowski",
"",
"Contributors",
"\tAaron Bockover",
"\tAlessandro Gervaso",
"\tAlex Graveley",
+ "\tAlex Launi",
"\tAlvaro del Castillo",
- "\tAnton Keks",
"\tBen Monnahan",
"\tBengt Thuree",
"\tChad Files",
"\tEttore Perazzoli",
"\tEwen Cheslack-Postava",
+ "\tJeffrey Finkelstein",
+ "\tJeffrey Stedfast",
"\tJoe Shaw",
"\tJoerg Buesse",
"\tJon Trowbridge",
"\tJoshua Tauberer",
- "\tGabriel Burt",
+ "\tKarl Mikaelsson",
"\tGrahm Orr",
"\tLaurence Hygate",
"\tLee Willis",
"\tMartin Willemoes Hansen",
"\tMatt Jones",
+ "\tMatt Perry",
+ "\tMichal Nánási",
"\tMiguel de Icaza",
"\tNat Friedman",
"\tPatanjali Somayaji",
+ "\tPascal de Bruijn",
"\tPeter Johanson",
"\tTambet Ingo",
- "\tThomas Van Machelen", //0.5.0
+ "\tThomas Van Machelen",
"\tTodd Berman",
- "\tVasily Kirilichev (Google Summer of Code)", //0.5.0
+ "\tVasily Kirilichev",
"\tVincent Moreau",
"\tVladimir Vukicevic",
"\tXavier Bouchoux",
+ "\tYann Leprince",
+ "\tYves Kurz",
"",
"In memory Of",
"\tEttore Perazzoli",
};
Comments = Catalog.GetString ("Photo management for GNOME");
- Copyright = Catalog.GetString ("Copyright \x00a9 2003-2009 Novell Inc.");
+ Copyright = Catalog.GetString ("Copyright \x00a9 2003-2010 Novell Inc.");
Documenters = new string[] {
"Aaron Bockover",
"Alexandre Prokoudine",
"Bengt Thuree",
"Gabriel Burt",
+ "Harold Schreckengost",
"Miguel de Icaza",
"Stephane Delcroix",
};
@@ -92,7 +112,7 @@ namespace FSpot.UI.Dialog
s.Close ();
}
} catch (Exception e) {
- Console.WriteLine (e);
+ Log.DebugException (e);
License = "GPL v2";
}
Logo = new Gdk.Pixbuf (System.Reflection.Assembly.GetEntryAssembly (), "f-spot-128.png");
diff --git a/src/UI.Dialog/AdjustTimeDialog.cs b/src/UI.Dialog/AdjustTimeDialog.cs
index bf34919..5bdab38 100644
--- a/src/UI.Dialog/AdjustTimeDialog.cs
+++ b/src/UI.Dialog/AdjustTimeDialog.cs
@@ -16,6 +16,7 @@ using Gtk;
using System.Collections;
using Mono.Unix;
using FSpot.Widgets;
+using Hyena;
namespace FSpot.UI.Dialog {
public class AdjustTimeDialog : BuilderDialog
@@ -93,7 +94,7 @@ namespace FSpot.UI.Dialog {
TimeSpan Offset
{
get {
- System.Console.WriteLine ("{0} - {1} = {2}", date_edit.Time, Item.Current.Time, date_edit.Time - Item.Current.Time);
+ Log.DebugFormat ("{0} - {1} = {2}", date_edit.Time, Item.Current.Time, date_edit.Time - Item.Current.Time);
return EditTime - Item.Current.Time;
}
set {
@@ -104,7 +105,7 @@ namespace FSpot.UI.Dialog {
void HandleTimeChanged (object sender, EventArgs args)
{
TimeSpan span = Offset;
- System.Console.WriteLine ("time changed {0}", span);
+ Log.DebugFormat ("time changed {0}", span);
if (! offset_entry.HasFocus)
offset_entry.Text = span.ToString ();
@@ -152,7 +153,7 @@ namespace FSpot.UI.Dialog {
DateTime time = p.Time;
p.Time = time + span;
photos [i] = p;
- System.Console.WriteLine ("XXXXX old: {0} new: {1} span: {2}", time, p.Time, span);
+ Log.DebugFormat ("XXXXX old: {0} new: {1} span: {2}", time, p.Time, span);
}
db.Photos.Commit (photos);
@@ -205,14 +206,14 @@ namespace FSpot.UI.Dialog {
void HandleOffsetChanged (object sender, EventArgs args)
{
- System.Console.WriteLine ("offset = {0}", Offset);
+ Log.DebugFormat ("offset = {0}", Offset);
TimeSpan current = Offset;
try {
TimeSpan span = TimeSpan.Parse (offset_entry.Text);
if (span != current)
Offset = span;
} catch (System.Exception) {
- System.Console.WriteLine ("unparsable span {0}", offset_entry.Text);
+ Log.WarningFormat ("unparsable span {0}", offset_entry.Text);
}
}
diff --git a/src/UI.Dialog/EditExceptionDialog.cs b/src/UI.Dialog/EditExceptionDialog.cs
index 84c0227..6c79e01 100644
--- a/src/UI.Dialog/EditExceptionDialog.cs
+++ b/src/UI.Dialog/EditExceptionDialog.cs
@@ -10,6 +10,7 @@
using System;
using Mono.Unix;
using Gtk;
+using Hyena;
namespace FSpot.UI.Dialog
{
@@ -39,7 +40,7 @@ namespace FSpot.UI.Dialog
GenerateMessage (errors))
{
foreach (Exception e in errors)
- Console.WriteLine (e);
+ Log.Exception (e);
}
public EditExceptionDialog (Gtk.Window parent, Exception e, IBrowsableItem item) : this (parent, new EditException (item, e))
diff --git a/src/UI.Dialog/EditTagDialog.cs b/src/UI.Dialog/EditTagDialog.cs
index 2f28407..06db020 100644
--- a/src/UI.Dialog/EditTagDialog.cs
+++ b/src/UI.Dialog/EditTagDialog.cs
@@ -24,10 +24,8 @@ namespace FSpot.UI.Dialog
[GtkBeans.Builder.Object] Button ok_button;
[GtkBeans.Builder.Object] Entry tag_name_entry;
- [GtkBeans.Builder.Object] Label prompt_label;
[GtkBeans.Builder.Object] Label already_in_use_label;
[GtkBeans.Builder.Object] Gtk.Image icon_image;
- [GtkBeans.Builder.Object] Button icon_button;
[GtkBeans.Builder.Object] OptionMenu category_option_menu;
diff --git a/src/UI.Dialog/EditTagIconDialog.cs b/src/UI.Dialog/EditTagIconDialog.cs
index 954586d..d454257 100644
--- a/src/UI.Dialog/EditTagIconDialog.cs
+++ b/src/UI.Dialog/EditTagIconDialog.cs
@@ -16,11 +16,11 @@ using Mono.Unix;
using Gtk;
using FSpot.Widgets;
using FSpot.Utils;
+using Hyena;
namespace FSpot.UI.Dialog
{
public class EditTagIconDialog : BuilderDialog {
- Db db;
FSpot.PhotoQuery query;
PhotoImageView image_view;
Gtk.IconView icon_view;
@@ -33,15 +33,11 @@ namespace FSpot.UI.Dialog
[GtkBeans.Builder.Object] ScrolledWindow icon_scrolled_window;
[GtkBeans.Builder.Object] Label photo_label;
[GtkBeans.Builder.Object] Label from_photo_label;
- [GtkBeans.Builder.Object] Label from_external_photo_label;
- [GtkBeans.Builder.Object] private Label predefined_icon_label;
[GtkBeans.Builder.Object] SpinButton photo_spin_button;
[GtkBeans.Builder.Object] HBox external_photo_chooser_hbox;
- [GtkBeans.Builder.Object] Button noicon_button;
public EditTagIconDialog (Db db, Tag t, Gtk.Window parent_window) : base ("EditTagIconDialog.ui", "edit_tag_icon_dialog")
{
- this.db = db;
TransientFor = parent_window;
Title = String.Format (Catalog.GetString ("Edit Icon for Tag {0}"), t.Name);
@@ -159,7 +155,7 @@ namespace FSpot.UI.Dialog
void CreateTagIconFromExternalPhoto ()
{
try {
- using (FSpot.ImageFile img = FSpot.ImageFile.Create (new Uri(external_photo_chooser.Uri))) {
+ using (FSpot.ImageFile img = FSpot.ImageFile.Create (new SafeUri(external_photo_chooser.Uri, true))) {
using (Gdk.Pixbuf external_image = img.Load ()) {
PreviewPixbuf = PixbufUtils.TagIconFromPixbuf (external_image);
}
diff --git a/src/UI.Dialog/HigMessageDialog.cs b/src/UI.Dialog/HigMessageDialog.cs
index f27e17e..40500d8 100644
--- a/src/UI.Dialog/HigMessageDialog.cs
+++ b/src/UI.Dialog/HigMessageDialog.cs
@@ -77,6 +77,7 @@ namespace FSpot.UI.Dialog {
label.Justify = Gtk.Justification.Left;
label.LineWrap = true;
label.SetAlignment (0.0f, 0.5f);
+ label.UseUnderline = false;
label.Show ();
label_vbox.PackStart (label, false, false, 0);
diff --git a/src/UI.Dialog/ImportDialog.cs b/src/UI.Dialog/ImportDialog.cs
new file mode 100644
index 0000000..cdc79f4
--- /dev/null
+++ b/src/UI.Dialog/ImportDialog.cs
@@ -0,0 +1,325 @@
+using FSpot.UI.Dialog;
+using FSpot.Widgets;
+using FSpot.Utils;
+using FSpot.Import;
+using Gtk;
+using Hyena;
+using System;
+using System.Collections.Generic;
+using Mono.Unix;
+
+namespace FSpot.UI.Dialog
+{
+ public class ImportDialog : BuilderDialog
+ {
+ static readonly string select_folder_label = Catalog.GetString ("Choose Folder...");
+ private ImportController Controller { get; set; }
+ private TreeStore Sources { get; set; }
+
+ private static Dictionary<string, ImportSource> history_sources = new Dictionary<string, ImportSource> ();
+
+ [GtkBeans.Builder.Object] Button cancel_button;
+ [GtkBeans.Builder.Object] Button import_button;
+ [GtkBeans.Builder.Object] CheckButton copy_check;
+ [GtkBeans.Builder.Object] CheckButton duplicate_check;
+ [GtkBeans.Builder.Object] CheckButton recurse_check;
+ [GtkBeans.Builder.Object] ComboBox sources_combo;
+ [GtkBeans.Builder.Object] HBox tagentry_box;
+ [GtkBeans.Builder.Object] HPaned import_hpaned;
+ [GtkBeans.Builder.Object] ProgressBar progress_bar;
+ [GtkBeans.Builder.Object] ScrolledWindow icon_scrolled;
+ [GtkBeans.Builder.Object] ScrolledWindow photo_scrolled;
+
+ private PhotoImageView photo_view;
+ private TagEntry tag_entry;
+
+ public ImportDialog (ImportController controller, Window parent) : base ("import.ui", "import_dialog")
+ {
+ Controller = controller;
+ BuildUI (parent);
+ ResetPreview ();
+ LoadPreferences ();
+ ScanSources ();
+ ConnectEvents ();
+ }
+
+ void BuildUI (Window parent)
+ {
+ TransientFor = parent;
+ WindowPosition = WindowPosition.CenterOnParent;
+
+ photo_view = new PhotoImageView (Controller.Photos);
+ photo_scrolled.Add (photo_view);
+ photo_scrolled.SetSizeRequest (200, 200);
+ photo_view.Show ();
+
+ GtkUtil.ModifyColors (photo_scrolled);
+ GtkUtil.ModifyColors (photo_view);
+
+ var tray = new ScalingIconView (Controller.Photos);
+ tray.Selection.Changed += (c) => {
+ if (tray.Selection.Count > 0)
+ photo_view.Item.Index = tray.Selection.Ids[0];
+ };
+ icon_scrolled.Add (tray);
+ tray.DisplayTags = false;
+ tray.Show ();
+
+ progress_bar.Hide ();
+
+ import_button.Sensitive = false;
+
+ tag_entry = new TagEntry (App.Instance.Database.Tags, false);
+ tag_entry.UpdateFromTagNames (new string []{});
+ tagentry_box.Add (tag_entry);
+ tag_entry.Show ();
+ }
+
+ void ResetPreview ()
+ {
+ photo_view.Pixbuf = GtkUtil.TryLoadIcon (FSpot.Global.IconTheme, "f-spot", 128, (Gtk.IconLookupFlags)0);
+ photo_view.ZoomFit (false);
+ }
+
+ void LoadPreferences ()
+ {
+ if (Preferences.Get<int> (Preferences.IMPORT_WINDOW_WIDTH) > 0) {
+ Resize (Preferences.Get<int> (Preferences.IMPORT_WINDOW_WIDTH), Preferences.Get<int> (Preferences.IMPORT_WINDOW_HEIGHT));
+ }
+
+ if (FSpot.Preferences.Get<int> (Preferences.IMPORT_WINDOW_PANE_POSITION) > 0) {
+ import_hpaned.Position = Preferences.Get<int> (Preferences.IMPORT_WINDOW_PANE_POSITION);
+ }
+
+ copy_check.Active = Controller.CopyFiles;
+ recurse_check.Active = Controller.RecurseSubdirectories;
+ duplicate_check.Active = Controller.DuplicateDetect;
+ }
+
+ void ScanSources ()
+ {
+ // Populates the source combo box
+ Sources = new TreeStore (typeof(ImportSource), typeof(string), typeof(string), typeof(bool));
+ sources_combo.Model = Sources;
+ sources_combo.RowSeparatorFunc = (m, i) => (m.GetValue (i, 1) as string) == String.Empty;
+ var render = new CellRendererPixbuf ();
+ sources_combo.PackStart (render, false);
+ sources_combo.SetAttributes (render, "icon-name", 2, "sensitive", 3);
+ var render2 = new CellRendererText ();
+ sources_combo.PackStart (render2, true);
+ sources_combo.SetAttributes (render2, "text", 1, "sensitive", 3);
+
+ GLib.Idle.Add (() => {
+ PopulateSourceCombo (null);
+ QueueDraw ();
+ return false;
+ });
+ }
+
+ void PopulateSourceCombo (ImportSource source_to_activate)
+ {
+ int activate_index = 0;
+ sources_combo.Changed -= OnSourceComboChanged;
+ Sources.Clear ();
+ Sources.AppendValues (null, Catalog.GetString ("Choose Import source..."), String.Empty, false);
+ Sources.AppendValues (null, select_folder_label, "folder", true);
+ Sources.AppendValues (null, String.Empty, String.Empty);
+ bool mount_added = false;
+ foreach (var source in Controller.Sources) {
+ if (source == source_to_activate) {
+ activate_index = Sources.IterNChildren ();
+ }
+ Sources.AppendValues (source, source.Name, source.IconName, true);
+ mount_added = true;
+ }
+ if (!mount_added) {
+ Sources.AppendValues (null, Catalog.GetString ("(No Cameras Detected)"), String.Empty, false);
+ }
+
+ if (history_sources.Count > 0) {
+ Sources.AppendValues (null, String.Empty, String.Empty);
+ foreach (var source in history_sources.Values) {
+ if (source == source_to_activate) {
+ activate_index = Sources.IterNChildren ();
+ }
+ Sources.AppendValues (source, source.Name, source.IconName, true);
+ }
+ }
+ sources_combo.Changed += OnSourceComboChanged;
+ sources_combo.Active = activate_index;
+ }
+
+ void ConnectEvents ()
+ {
+ Controller.StatusEvent += OnControllerStatusEvent;
+ Controller.ProgressUpdated += OnControllerProgressUpdated;
+ copy_check.Toggled += (o, args) => { Controller.CopyFiles = copy_check.Active; };
+ recurse_check.Toggled += (o, args) => { Controller.RecurseSubdirectories = recurse_check.Active; };
+ duplicate_check.Toggled += (o, args) => { Controller.DuplicateDetect = duplicate_check.Active; };
+ import_button.Clicked += (o, args) => StartImport ();
+ cancel_button.Clicked += (o, args) => CancelImport ();
+ Response += (o, args) => {
+ if (args.ResponseId == ResponseType.DeleteEvent) {
+ CancelImport ();
+ }
+ };
+ }
+
+ void ShowFolderSelector ()
+ {
+ var file_chooser = new FileChooserDialog (
+ Catalog.GetString ("Import"), this,
+ FileChooserAction.SelectFolder,
+ Stock.Cancel, ResponseType.Cancel,
+ Stock.Open, ResponseType.Ok);
+
+ file_chooser.SelectMultiple = false;
+ file_chooser.LocalOnly = false;
+
+ int response = file_chooser.Run ();
+ if ((ResponseType) response == ResponseType.Ok) {
+ var uri = new SafeUri (file_chooser.Uri, true);
+ SwitchToFolderSource (uri);
+ }
+
+ file_chooser.Destroy ();
+ }
+
+ public void SwitchToFolderSource (SafeUri uri)
+ {
+ ImportSource source = null;
+ if (!history_sources.TryGetValue (uri, out source)) {
+ var name = uri.GetFilename ();
+ source = new FileImportSource (uri, name, "folder");
+ history_sources[uri] = source;
+ }
+
+ PopulateSourceCombo (source);
+ Controller.ActiveSource = source;
+ }
+
+ int current_index = -1;
+ void OnSourceComboChanged (object sender, EventArgs args)
+ {
+ // Prevent double firing.
+ if (sources_combo.Active == current_index) {
+ Log.Debug ("Skipping double fire!");
+ return;
+ } else {
+ current_index = sources_combo.Active;
+ }
+
+ TreeIter iter;
+ sources_combo.GetActiveIter (out iter);
+ var source = Sources.GetValue (iter, 0) as ImportSource;
+ if (source == null) {
+ var label = (string) Sources.GetValue (iter, 1);
+ if (label == select_folder_label) {
+ ShowFolderSelector ();
+ return;
+ } else {
+ sources_combo.Active = 0;
+ return;
+ }
+ }
+ Controller.ActiveSource = source;
+ }
+
+ void OnControllerStatusEvent (ImportEvent evnt)
+ {
+ Log.DebugFormat ("Received controller event: {0}", evnt);
+
+ switch (evnt) {
+ case ImportEvent.SourceChanged:
+ HideScanSpinner ();
+ ResetPreview ();
+ import_button.Sensitive = true;
+ break;
+
+ case ImportEvent.PhotoScanStarted:
+ ShowScanSpinner ();
+ break;
+
+ case ImportEvent.PhotoScanFinished:
+ HideScanSpinner ();
+ break;
+
+ case ImportEvent.ImportStarted:
+ ShowImportProgress ();
+ break;
+
+ case ImportEvent.ImportFinished:
+ Controller = null;
+ Destroy ();
+ break;
+
+ case ImportEvent.ImportError:
+ // TODO
+ break;
+ }
+ }
+
+ void OnControllerProgressUpdated (int current, int total)
+ {
+ var importing_label = Catalog.GetString ("Importing Photos: {0} of {1}...");
+ progress_bar.Text = String.Format (importing_label, current, total);
+ progress_bar.Fraction = (double) current / Math.Max (total, 1);
+ }
+
+ void StartImport ()
+ {
+ Controller.AttachTags (tag_entry.GetTypedTagNames ());
+ Controller.StartImport ();
+ import_button.Sensitive = false;
+ OptionsSensitive = false;
+ }
+
+ void CancelImport ()
+ {
+ Controller.CancelImport ();
+ Controller = null;
+ Destroy ();
+ }
+
+ bool pulse_timeout_running = false;
+
+ void ShowImportProgress ()
+ {
+ progress_bar.Text = Catalog.GetString ("Importing photos...");
+ progress_bar.Show ();
+ }
+
+ void ShowScanSpinner ()
+ {
+ // TODO: Using a GtkSpinner would be nicer here.
+ progress_bar.Text = Catalog.GetString ("Searching for photos... (You can already click Import to continue)");
+ progress_bar.Show ();
+ pulse_timeout_running = true;
+ GLib.Timeout.Add (40, () => {
+ if (!pulse_timeout_running) {
+ return false;
+ }
+
+ progress_bar.Pulse ();
+ return pulse_timeout_running;
+ });
+ }
+
+ void HideScanSpinner ()
+ {
+ pulse_timeout_running = false;
+ progress_bar.Hide ();
+ }
+
+ public bool OptionsSensitive
+ {
+ set {
+ sources_combo.Sensitive = value;
+ copy_check.Sensitive = value;
+ recurse_check.Sensitive = value;
+ duplicate_check.Sensitive = value;
+ tagentry_box.Sensitive = value;
+ }
+ }
+ }
+}
diff --git a/src/UI.Dialog/PreferenceDialog.cs b/src/UI.Dialog/PreferenceDialog.cs
index c0191bd..bd4634f 100644
--- a/src/UI.Dialog/PreferenceDialog.cs
+++ b/src/UI.Dialog/PreferenceDialog.cs
@@ -17,6 +17,7 @@ using System.Collections.Generic;
using System.Linq;
using Gtk;
using Mono.Unix;
+using Hyena;
using FSpot.Widgets;
@@ -38,11 +39,11 @@ namespace FSpot.UI.Dialog {
TransientFor = parent;
//Photos Folder
- if (Global.PhotoDirectory == Preferences.Get<string> (Preferences.STORAGE_PATH)) {
- photosdir_chooser.SetCurrentFolder (Global.PhotoDirectory);
+ if (Global.PhotoUri == new SafeUri (Preferences.Get<string> (Preferences.STORAGE_PATH))) {
+ photosdir_chooser.SetCurrentFolderUri (Global.PhotoUri);
photosdir_chooser.CurrentFolderChanged += HandlePhotosdirChanged;
} else {
- photosdir_chooser.SetCurrentFolder(Global.PhotoDirectory);
+ photosdir_chooser.SetCurrentFolderUri (Global.PhotoUri);
photosdir_chooser.Sensitive = false;
}
@@ -193,7 +194,7 @@ namespace FSpot.UI.Dialog {
photosdir_chooser.CurrentFolderChanged -= HandlePhotosdirChanged;
Preferences.Set (Preferences.STORAGE_PATH, photosdir_chooser.Filename);
photosdir_chooser.CurrentFolderChanged += HandlePhotosdirChanged;
- Global.PhotoDirectory = photosdir_chooser.Filename;
+ Global.PhotoUri = new SafeUri (photosdir_chooser.Uri, true);
}
void HandleWritemetadataGroupChanged (object sender, System.EventArgs args)
diff --git a/src/UI.Dialog/ProgressDialog.cs b/src/UI.Dialog/ProgressDialog.cs
index c4facc0..4f64f61 100644
--- a/src/UI.Dialog/ProgressDialog.cs
+++ b/src/UI.Dialog/ProgressDialog.cs
@@ -42,8 +42,6 @@ namespace FSpot.UI.Dialog {
get { return message_label; }
}
- private DateTime start_time;
-
private Gtk.Button button;
public Gtk.Button Button {
get {
diff --git a/src/UI.Dialog/RepairDbDialog.cs b/src/UI.Dialog/RepairDbDialog.cs
index 80c14fe..c4ed9b7 100644
--- a/src/UI.Dialog/RepairDbDialog.cs
+++ b/src/UI.Dialog/RepairDbDialog.cs
@@ -10,6 +10,7 @@
using System;
using Gtk;
using Mono.Unix;
+using Hyena;
namespace FSpot.UI.Dialog
{
@@ -21,7 +22,7 @@ namespace FSpot.UI.Dialog
String.Format (Catalog.GetString ("F-Spot encountered an error while loading the photo database. " +
"The old database has be moved to {0} and a new database has been created."), backup_path))
{
- Console.WriteLine (e);
+ Log.Exception (e);
Run ();
Destroy ();
}
diff --git a/src/UI.Dialog/SelectionRatioDialog.cs b/src/UI.Dialog/SelectionRatioDialog.cs
index 2d276f5..21a72c0 100644
--- a/src/UI.Dialog/SelectionRatioDialog.cs
+++ b/src/UI.Dialog/SelectionRatioDialog.cs
@@ -15,6 +15,7 @@ using System.Collections.Generic;
using Gtk;
using Mono.Unix;
+using Hyena;
namespace FSpot.UI.Dialog {
public class SelectionRatioDialog : GladeDialog
@@ -139,7 +140,7 @@ namespace FSpot.UI.Dialog {
try {
ratio = ParseRatio (args.NewText);
} catch (FormatException fe) {
- Console.WriteLine (fe);
+ Log.Exception (fe);
return;
}
if (ratio < 1.0)
diff --git a/src/UI.Dialog/ThreadProgressDialog.cs b/src/UI.Dialog/ThreadProgressDialog.cs
index 273321b..55ed22a 100644
--- a/src/UI.Dialog/ThreadProgressDialog.cs
+++ b/src/UI.Dialog/ThreadProgressDialog.cs
@@ -28,7 +28,6 @@ namespace FSpot.UI.Dialog {
Gtk.Button skip_button;
Gtk.ResponseType error_response;
AutoResetEvent error_response_event;
- AutoResetEvent error_response_ack_event;
object syncHandle = new object ();
@@ -150,7 +149,6 @@ namespace FSpot.UI.Dialog {
RetrySkipVisible = true;
error_response_event = new AutoResetEvent (false);
- error_response_ack_event = new AutoResetEvent (false);
error_response_event.WaitOne ();
RetrySkipVisible = false;
diff --git a/src/Updater.cs b/src/Updater.cs
index bc56161..24e3703 100644
--- a/src/Updater.cs
+++ b/src/Updater.cs
@@ -5,14 +5,17 @@ using System;
using System.Collections;
using Banshee.Database;
using FSpot.Utils;
+using Hyena;
using FSpot.UI.Dialog;
namespace FSpot.Database {
public static class Updater {
private static ProgressDialog dialog;
private static Hashtable updates = new Hashtable ();
- private static MetaItem db_version;
- private static Db db;
+ private static Version db_version;
+ private static QueuedSqliteDatabase db;
+
+ public static bool silent = false;
public static Version LatestVersion {
@@ -320,7 +323,7 @@ namespace FSpot.Database {
)
);
- JobStore.CreateTable (db.Database);
+ JobStore.CreateTable (db);
// This is kind of hacky but should be a lot faster on
// large photo databases
@@ -489,11 +492,6 @@ namespace FSpot.Database {
Execute ("UPDATE photos SET md5_sum = NULL WHERE md5_sum = ''");
Execute ("UPDATE photo_versions SET md5_sum = NULL WHERE md5_sum = ''");
});
-
- // Update to version 17.0
- //AddUpdate (new Version (14,0), delegate () {
- // do update here
- //});
// Update to version 17.0, split uri and filename
AddUpdate (new Version (17,0),delegate () {
@@ -588,37 +586,141 @@ namespace FSpot.Database {
Execute ("UPDATE tags SET name = 'Imported Tags' WHERE name = 'Import Tags'");
});
+ // Update to version 17.2, Make sure every photo has an Original version in photo_versions
+ AddUpdate (new Version(17,2),delegate () {
+ // Find photos that have no original version;
+ var have_original_query = "SELECT id FROM photos LEFT JOIN photo_versions AS pv ON pv.photo_id = id WHERE pv.version_id = 1";
+ var no_original_query = String.Format ("SELECT id, base_uri, filename FROM photos WHERE id NOT IN ({0})", have_original_query);
+
+ var reader = ExecuteReader (no_original_query);
+
+ while (reader.Read ()) {
+ Execute (new DbCommand (
+ "INSERT INTO photo_versions (photo_id, version_id, name, base_uri, filename, protected, md5_sum) " +
+ "VALUES (:photo_id, :version_id, :name, :base_uri, :filename, :is_protected, :md5_sum)",
+ "photo_id", Convert.ToUInt32 (reader ["id"]),
+ "version_id", 1,
+ "name", "Original",
+ "base_uri", reader["base_uri"].ToString (),
+ "filename", reader["filename"].ToString (),
+ "is_protected", 1,
+ "md5_sum", ""));
+ }
+ }, true);
+
+ // Update to version 18.0, Import MD5 hashes
+ AddUpdate (new Version(18,0),delegate () {
+ string tmp_photos = MoveTableToTemp ("photos");
+ string tmp_versions = MoveTableToTemp ("photo_versions");
+
+ Execute (
+ "CREATE TABLE photos (\n" +
+ " id INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL, \n" +
+ " time INTEGER NOT NULL, \n" +
+ " base_uri STRING NOT NULL, \n" +
+ " filename STRING NOT NULL, \n" +
+ " description TEXT NOT NULL, \n" +
+ " roll_id INTEGER NOT NULL, \n" +
+ " default_version_id INTEGER NOT NULL, \n" +
+ " rating INTEGER NULL \n" +
+ ")");
+
+ Execute (
+ "CREATE TABLE photo_versions (\n"+
+ " photo_id INTEGER, \n" +
+ " version_id INTEGER, \n" +
+ " name STRING, \n" +
+ " base_uri STRING NOT NULL, \n" +
+ " filename STRING NOT NULL, \n" +
+ " import_md5 TEXT NULL, \n" +
+ " protected BOOLEAN, \n" +
+ " UNIQUE (photo_id, version_id)\n" +
+ ")");
+
+ var reader = ExecuteReader (String.Format (
+ "SELECT id, time, base_uri, filename, description, roll_id, default_version_id, rating " +
+ "FROM {0} ", tmp_photos));
+
+ while (reader.Read ()) {
+ Execute (new DbCommand (
+ "INSERT INTO photos (id, time, base_uri, filename, description, roll_id, default_version_id, rating) " +
+ "VALUES (:id, :time, :base_uri, :filename, :description, :roll_id, :default_version_id, :rating)",
+ "id", Convert.ToUInt32 (reader ["id"]),
+ "time", reader ["time"],
+ "base_uri", reader ["base_uri"].ToString (),
+ "filename", reader ["filename"].ToString (),
+ "description", reader["description"].ToString (),
+ "roll_id", Convert.ToUInt32 (reader ["roll_id"]),
+ "default_version_id", Convert.ToUInt32 (reader ["default_version_id"]),
+ "rating", Convert.ToUInt32 (reader ["rating"])));
+ }
+
+ reader.Close ();
+
+ reader = ExecuteReader (String.Format (
+ "SELECT photo_id, version_id, name, base_uri, filename, protected " +
+ "FROM {0} ", tmp_versions));
+
+ while (reader.Read ()) {
+ Execute (new DbCommand (
+ "INSERT INTO photo_versions (photo_id, version_id, name, base_uri, filename, protected, import_md5) " +
+ "VALUES (:photo_id, :version_id, :name, :base_uri, :filename, :is_protected, :import_md5)",
+ "photo_id", Convert.ToUInt32 (reader ["photo_id"]),
+ "version_id", Convert.ToUInt32 (reader ["version_id"]),
+ "name", reader["name"].ToString (),
+ "base_uri", reader["base_uri"].ToString (),
+ "filename", reader["filename"].ToString (),
+ "is_protected", Convert.ToBoolean (reader["protected"]),
+ "import_md5", ""));
+ }
+
+ Execute ("CREATE INDEX idx_photo_versions_import_md5 ON photo_versions(import_md5)");
+
+ }, true);
}
- public static void Run (Db database)
+ private const string meta_db_version_string = "F-Spot Database Version";
+
+ private static Version GetDatabaseVersion ()
+ {
+ if (!TableExists ("meta"))
+ throw new Exception ("No meta table found!");
+
+ var query = String.Format ("SELECT data FROM meta WHERE name = '{0}'", meta_db_version_string);
+ var version_id = SelectSingleString (query);
+ return new Version (version_id);
+ }
+
+ public static void Run (QueuedSqliteDatabase database)
{
db = database;
- db_version = db.Meta.DatabaseVersion;
+ db_version = GetDatabaseVersion ();
if (updates.Count == 0)
return;
- Version current_version = new Version (db_version.Value);
-
- if (current_version == LatestVersion)
+ if (db_version == LatestVersion)
return;
- else if (current_version > LatestVersion) {
- Log.Information ("The existing database version is more recent than this version of F-Spot expects.");
+ else if (db_version > LatestVersion) {
+ if (!silent)
+ Log.Information ("The existing database version is more recent than this version of F-Spot expects.");
return;
}
- uint timer = Log.InformationTimerStart ("Updating F-Spot Database");
+ uint timer = 0;
+ if (!silent)
+ timer = Log.InformationTimerStart ("Updating F-Spot Database");
// Only create and show the dialog if one or more of the updates to be done is
// marked as being slow
bool slow = false;
foreach (Version version in updates.Keys) {
- if (version > current_version && (updates[version] as Update).IsSlow)
+ if (version > db_version && (updates[version] as Update).IsSlow)
slow = true;
break;
}
- if (slow) {
+ if (slow && !silent) {
dialog = new ProgressDialog (Catalog.GetString ("Updating F-Spot Database"), ProgressDialog.CancelButtonType.None, 0, null);
dialog.Message.Text = Catalog.GetString ("Please wait while your F-Spot gallery's database is updated. This may take some time.");
dialog.Bar.Fraction = 0.0;
@@ -635,7 +737,7 @@ namespace FSpot.Database {
ArrayList keys = new ArrayList (updates.Keys);
keys.Sort ();
foreach (Version version in keys) {
- if (version <= current_version)
+ if (version <= db_version)
continue;
Pulse ();
@@ -643,8 +745,11 @@ namespace FSpot.Database {
}
db.CommitTransaction ();
- } catch (Exception e) {Log.DebugException (e);
- Log.Warning ("Rolling back database changes because of Exception");
+ } catch (Exception e) {
+ if (!silent) {
+ Log.DebugException (e);
+ Log.Warning ("Rolling back database changes because of Exception");
+ }
// There was an error, roll back the database
db.RollbackTransaction ();
@@ -655,7 +760,7 @@ namespace FSpot.Database {
if (dialog != null)
dialog.Destroy ();
- if (new Version(db_version.Value) == LatestVersion)
+ if (db_version == LatestVersion && !silent)
Log.InformationTimerPrint (timer, "Database updates completed successfully (in {0}).");
}
@@ -679,37 +784,37 @@ namespace FSpot.Database {
private static int Execute (string statement)
{
- return db.Database.Execute (statement);
+ return db.Execute (statement);
}
private static int Execute (DbCommand command)
{
- return db.Database.Execute (command);
+ return db.Execute (command);
}
private static void ExecuteNonQuery (string statement)
{
- db.Database.ExecuteNonQuery(statement);
+ db.ExecuteNonQuery(statement);
}
private static void ExecuteNonQuery (DbCommand command)
{
- db.Database.ExecuteNonQuery(command);
+ db.ExecuteNonQuery(command);
}
private static int ExecuteScalar (string statement)
{
- return db.Database.Execute(statement);
+ return db.Execute(statement);
}
private static SqliteDataReader ExecuteReader (string statement)
{
- return db.Database.Query (statement);
+ return db.Query (statement);
}
private static bool TableExists (string table)
{
- return db.Database.TableExists (table);
+ return db.TableExists (table);
}
private static string SelectSingleString (string statement)
@@ -717,7 +822,7 @@ namespace FSpot.Database {
string result = null;
try {
- result = (string)db.Database.QuerySingle(statement);
+ result = (string)db.QuerySingle(statement);
} catch (Exception) {}
return result;
@@ -765,17 +870,17 @@ namespace FSpot.Database {
this.code = code;
}
- public void Execute (Db db, MetaItem db_version)
+ public void Execute (QueuedSqliteDatabase db, Version db_version)
{
code ();
- Log.Debug ("Updated database from version {0} to {1}",
- db_version.Value,
- Version.ToString ());
-
+ if (!silent)
+ Log.DebugFormat ("Updated database from version {0} to {1}",
+ db_version.ToString (),
+ Version.ToString ());
- db_version.Value = Version.ToString ();
- db.Meta.Commit (db_version);
+ db_version = Version;
+ db.ExecuteNonQuery(new DbCommand("UPDATE meta SET data = :data WHERE name = :name", "name", meta_db_version_string, "data", db_version.ToString ()));
}
}
diff --git a/src/UriCollection.cs b/src/UriCollection.cs
index 6f6a4b3..367a112 100644
--- a/src/UriCollection.cs
+++ b/src/UriCollection.cs
@@ -17,6 +17,7 @@ using System.Collections;
using System.Collections.Generic;
using System.Xml;
+using Hyena;
using GLib;
namespace FSpot {
@@ -30,12 +31,12 @@ namespace FSpot {
LoadItems (files);
}
- public UriCollection (Uri [] uri) : this ()
+ public UriCollection (SafeUri [] uri) : this ()
{
LoadItems (uri);
}
- public void Add (Uri uri)
+ public void Add (SafeUri uri)
{
if (FSpot.ImageFile.HasLoader (uri)) {
//Console.WriteLine ("using image loader {0}", uri.ToString ());
@@ -57,16 +58,16 @@ namespace FSpot {
}
}
- public void LoadItems (Uri [] uris)
+ public void LoadItems (SafeUri [] uris)
{
- foreach (Uri uri in uris) {
+ foreach (SafeUri uri in uris) {
Add (uri);
}
}
private class RssLoader
{
- public RssLoader (UriCollection collection, System.Uri uri)
+ public RssLoader (UriCollection collection, SafeUri uri)
{
XmlDocument doc = new XmlDocument ();
doc.Load (uri.ToString ());
@@ -78,16 +79,16 @@ namespace FSpot {
ArrayList items = new ArrayList ();
XmlNodeList list = doc.SelectNodes ("/rss/channel/item/media:content", ns);
foreach (XmlNode item in list) {
- Uri image_uri = new Uri (item.Attributes ["url"].Value);
- System.Console.WriteLine ("flickr uri = {0}", image_uri.ToString ());
+ SafeUri image_uri = new SafeUri (item.Attributes ["url"].Value);
+ Hyena.Log.DebugFormat ("flickr uri = {0}", image_uri.ToString ());
items.Add (new FileBrowsableItem (image_uri));
}
if (list.Count < 1) {
list = doc.SelectNodes ("/rss/channel/item/pheed:imgsrc", ns);
foreach (XmlNode item in list) {
- Uri image_uri = new Uri (item.InnerText.Trim ());
- System.Console.WriteLine ("pheed uri = {0}", uri);
+ SafeUri image_uri = new SafeUri (item.InnerText.Trim ());
+ Hyena.Log.DebugFormat ("pheed uri = {0}", uri);
items.Add (new FileBrowsableItem (image_uri));
}
}
@@ -95,8 +96,8 @@ namespace FSpot {
if (list.Count < 1) {
list = doc.SelectNodes ("/rss/channel/item/apple:image", ns);
foreach (XmlNode item in list) {
- Uri image_uri = new Uri (item.InnerText.Trim ());
- System.Console.WriteLine ("apple uri = {0}", uri);
+ SafeUri image_uri = new SafeUri (item.InnerText.Trim ());
+ Hyena.Log.DebugFormat ("apple uri = {0}", uri);
items.Add (new FileBrowsableItem (image_uri));
}
}
@@ -107,13 +108,11 @@ namespace FSpot {
private class DirectoryLoader
{
UriCollection collection;
- Uri uri;
GLib.File file;
- public DirectoryLoader (UriCollection collection, System.Uri uri)
+ public DirectoryLoader (UriCollection collection, SafeUri uri)
{
this.collection = collection;
- this.uri = uri;
file = FileFactory.NewForUri (uri);
file.EnumerateChildrenAsync ("standard::*",
FileQueryInfoFlags.None,
@@ -127,8 +126,8 @@ namespace FSpot {
{
List<FileBrowsableItem> items = new List<FileBrowsableItem> ();
foreach (GLib.FileInfo info in file.EnumerateChildrenFinish (res)) {
- Uri i = file.GetChild (info.Name).Uri;
- FSpot.Utils.Log.Debug ("testing uri = {0}", i);
+ SafeUri i = new SafeUri (file.GetChild (info.Name).Uri);
+ Hyena.Log.DebugFormat ("testing uri = {0}", i);
if (FSpot.ImageFile.HasLoader (i))
items.Add (new FileBrowsableItem (i));
}
@@ -142,9 +141,9 @@ namespace FSpot {
{
List<IBrowsableItem> items = new List<IBrowsableItem> ();
foreach (var f in files) {
- if (FSpot.ImageFile.HasLoader (f.FullName)) {
- Console.WriteLine (f.FullName);
- items.Add (new FileBrowsableItem (f.FullName));
+ if (FSpot.ImageFile.HasLoader (new SafeUri (f.FullName))) {
+ Hyena.Log.Debug (f.FullName);
+ items.Add (new FileBrowsableItem (new SafeUri (f.FullName)));
}
}
diff --git a/src/Util.cs b/src/Util.cs
index 31af04d..38425b7 100644
--- a/src/Util.cs
+++ b/src/Util.cs
@@ -14,17 +14,18 @@ using System.Collections.Generic;
using System.IO;
using System.Text;
using System;
+using Hyena;
namespace FSpot.Utils
{
- public class UriList : List<Uri> {
+ public class UriList : List<SafeUri> {
public UriList (FSpot.IBrowsableItem [] photos) {
foreach (FSpot.IBrowsableItem p in photos) {
- Uri uri;
+ SafeUri uri;
try {
- uri = p.DefaultVersionUri;
+ uri = p.DefaultVersion.Uri;
} catch {
continue;
}
@@ -41,23 +42,23 @@ namespace FSpot.Utils
foreach (String i in items) {
if (!i.StartsWith ("#")) {
- Uri uri;
+ SafeUri uri;
String s = i;
if (i.EndsWith ("\r")) {
s = i.Substring (0, i.Length - 1);
- Console.WriteLine ("uri = {0}", s);
+ Log.DebugFormat ("uri = {0}", s);
}
try {
- uri = new Uri (s);
+ uri = new SafeUri (s);
} catch {
#if true //Workaround to bgo 362016 in gnome-screenshot. Remove this hack when gnome 2.6.18 is widely distributed.
if (System.Text.RegularExpressions.Regex.IsMatch (s, "^file:/[^/]")) {
try {
s = "file:///" + s.Substring(6);
- uri = new Uri (s);
- Console.WriteLine ("Converted uri from file:/ to >>{0}<<", s);
+ uri = new SafeUri (s);
+ Log.DebugFormat ("Converted uri from file:/ to >>{0}<<", s);
} catch {
continue;
}
@@ -71,23 +72,15 @@ namespace FSpot.Utils
}
}
}
-
- /* public UriList (string [] uris)
- {
- // FIXME this is so lame do real chacking at some point
- foreach (string str in uris) {
- AddUnknown (str);
- }
- }
- */
+
public void AddUnknown (string unknown)
{
- Uri uri;
+ SafeUri uri;
if (File.Exists (unknown) || Directory.Exists (unknown))
- uri = UriUtils.PathToFileUri (unknown);
+ uri = new SafeUri (unknown);
else
- uri = new Uri (unknown);
+ uri = new SafeUri (unknown);
Add (uri);
}
@@ -115,13 +108,13 @@ namespace FSpot.Utils
public void Add (FSpot.IBrowsableItem item)
{
- Add (item.DefaultVersionUri);
+ Add (item.DefaultVersion.Uri);
}
public override string ToString () {
StringBuilder list = new StringBuilder ();
- foreach (Uri uri in this) {
+ foreach (SafeUri uri in this) {
if (uri == null)
break;
@@ -133,14 +126,14 @@ namespace FSpot.Utils
public string [] ToLocalPaths () {
int count = 0;
- foreach (Uri uri in this) {
+ foreach (SafeUri uri in this) {
if (uri.IsFile)
count++;
}
String [] paths = new String [count];
count = 0;
- foreach (Uri uri in this) {
+ foreach (SafeUri uri in this) {
if (uri.IsFile)
paths[count++] = uri.LocalPath;
}
diff --git a/src/Utils/Cache.cs b/src/Utils/Cache.cs
index 7663fc2..d216763 100644
--- a/src/Utils/Cache.cs
+++ b/src/Utils/Cache.cs
@@ -10,6 +10,7 @@
using System;
using System.Collections.Generic;
+using Hyena;
namespace FSpot.Utils
@@ -152,7 +153,7 @@ namespace FSpot.Utils
~DisposableCache ()
{
- Log.Debug ("Finalizer called on {0}. Should be Disposed", GetType ());
+ Log.DebugFormat ("Finalizer called on {0}. Should be Disposed", GetType ());
Clear ();
}
}
diff --git a/src/Utils/FSpot.Utils.dll.config b/src/Utils/FSpot.Utils.dll.config
new file mode 100644
index 0000000..8b57d83
--- /dev/null
+++ b/src/Utils/FSpot.Utils.dll.config
@@ -0,0 +1,7 @@
+<configuration>
+ <dllmap dll="libglib-2.0-0.dll" target="libglib-2.0.so.0" os="!windows,osx"/>
+ <dllmap dll="libglib-2.0-0.dll" target="libglib-2.0.dylib" os="osx"/>
+ <dllmap dll="libgdk-2.0-0.dll" target="libgdk-x11-2.0.so.0"/>
+ <dllmap dll="libgdk_pixbuf-2.0-0.dll" target="libgdk_pixbuf-2.0.so.0"/>
+ <dllmap dll="X11" target="libX11.so.6"/>
+</configuration>
diff --git a/src/Utils/FileExtensions.cs b/src/Utils/FileExtensions.cs
new file mode 100644
index 0000000..f8fbe8b
--- /dev/null
+++ b/src/Utils/FileExtensions.cs
@@ -0,0 +1,48 @@
+/*
+ * FSpot.Utils.FileExtensions.cs
+ *
+ * Author(s)
+ * Paul Wellner Bou <paul at purecodes.org>
+ *
+ * This is free software. See COPYING for details.
+ */
+
+using System;
+using System.IO;
+using Mono.Unix;
+using GLib;
+using Hyena;
+
+namespace FSpot.Utils
+{
+ public static class FileExtensions
+ {
+ public static bool CopyRecursive (this GLib.File source, GLib.File target, GLib.FileCopyFlags flags, GLib.Cancellable cancellable, GLib.FileProgressCallback callback)
+ {
+ bool result = true;
+
+ GLib.FileType ft = source.QueryFileType (GLib.FileQueryInfoFlags.None, cancellable);
+
+ if (ft != GLib.FileType.Directory) {
+ Hyena.Log.DebugFormat ("Copying \"{0}\" to \"{1}\"", source.Path, target.Path);
+ return source.Copy (target, flags, cancellable, callback);
+ }
+
+ if (!target.Exists) {
+ Hyena.Log.DebugFormat ("Creating directory: \"{0}\"", target.Path);
+ result = result && target.MakeDirectoryWithParents (cancellable);
+ }
+
+ GLib.FileEnumerator fe = source.EnumerateChildren ("standard::name", GLib.FileQueryInfoFlags.None, cancellable);
+ GLib.FileInfo fi = fe.NextFile ();
+ while (fi != null) {
+ GLib.File source_file = GLib.FileFactory.NewForPath (Path.Combine (source.Path, fi.Name));
+ GLib.File target_file = GLib.FileFactory.NewForPath (Path.Combine (target.Path, fi.Name));
+ result = result && source_file.CopyRecursive(target_file, flags, cancellable, callback);
+ fi = fe.NextFile ();
+ }
+ fe.Close (cancellable);
+ return result;
+ }
+ }
+}
diff --git a/src/Utils/GdkUtils.cs b/src/Utils/GdkUtils.cs
index 043ccbd..acd6303 100644
--- a/src/Utils/GdkUtils.cs
+++ b/src/Utils/GdkUtils.cs
@@ -1,6 +1,7 @@
using System;
using Gdk;
using System.Runtime.InteropServices;
+using Hyena;
namespace FSpot.Utils {
public class GdkUtils {
diff --git a/src/Utils/GtkUtil.cs b/src/Utils/GtkUtil.cs
index b1ba369..9c9ff8c 100644
--- a/src/Utils/GtkUtil.cs
+++ b/src/Utils/GtkUtil.cs
@@ -83,6 +83,20 @@ namespace FSpot.Utils
button.UseUnderline = true;
return button;
}
+
+ public static Gdk.Pixbuf TryLoadIcon (Gtk.IconTheme theme, string[] names, int size, Gtk.IconLookupFlags flags)
+ {
+ try {
+ var info = theme.ChooseIcon (names, size, flags);
+ return info.LoadIcon ();
+ } catch {
+ try {
+ return theme.LoadIcon ("gtk-missing-image", size, flags);
+ } catch {
+ return null;
+ }
+ }
+ }
public static Gdk.Pixbuf TryLoadIcon (Gtk.IconTheme theme, string icon_name, int size, Gtk.IconLookupFlags flags)
{
diff --git a/src/Utils/Log.cs b/src/Utils/Log.cs
deleted file mode 100644
index e31ef9b..0000000
--- a/src/Utils/Log.cs
+++ /dev/null
@@ -1,401 +0,0 @@
-//
-// Log.cs
-//
-// Author:
-// Aaron Bockover <abockover at novell.com>
-//
-// Copyright (C) 2005-2007 Novell, Inc.
-//
-// Permission is hereby granted, free of charge, to any person obtaining
-// a copy of this software and associated documentation files (the
-// "Software"), to deal in the Software without restriction, including
-// without limitation the rights to use, copy, modify, merge, publish,
-// distribute, sublicense, and/or sell copies of the Software, and to
-// permit persons to whom the Software is furnished to do so, subject to
-// the following conditions:
-//
-// The above copyright notice and this permission notice shall be
-// included in all copies or substantial portions of the Software.
-//
-// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
-// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
-// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
-// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
-// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
-// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
-// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
-//
-
-using System;
-using System.Text;
-using System.Collections.Generic;
-
-namespace FSpot.Utils
-{
- public class LogNotifyEventArgs : EventArgs
- {
- private LogEntry entry;
-
- public LogNotifyEventArgs (LogEntry entry)
- {
- this.entry = entry;
- }
-
- public LogEntry Entry {
- get { return entry; }
- }
- }
-
- public enum LogEntryType
- {
- Trace,
- Debug,
- Warning,
- Error,
- Information
- }
-
- public class LogEntry
- {
- private LogEntryType type;
- private string message;
- private string details;
- private DateTime timestamp;
-
- internal LogEntry (LogEntryType type, string message, string details)
- {
- this.type = type;
- this.message = message;
- this.details = details;
- this.timestamp = DateTime.Now;
- }
-
- public LogEntryType Type {
- get { return type; }
- }
-
- public string Message {
- get { return message; }
- }
-
- public string Details {
- get { return details; }
- }
-
- public DateTime TimeStamp {
- get { return timestamp; }
- }
- }
-
- public static class Log
- {
- public static event EventHandler<LogNotifyEventArgs> Notify;
-
- private static Dictionary<uint, DateTime> timers = new Dictionary<uint, DateTime> ();
- private static uint next_timer_id = 1;
-
- private static bool debugging = false;
- public static bool Debugging {
- get { return debugging; }
- set { debugging = value; }
- }
-
- private static bool tracing = false;
- public static bool Tracing {
- get { return tracing; }
- set { tracing = value; }
- }
-
- public static void Commit (LogEntryType type, string message, string details, bool showUser)
- {
- if (type == LogEntryType.Debug && !Debugging) {
- return;
- }
-
- if (type == LogEntryType.Trace && !Tracing) {
- return;
- }
-
- if (type != LogEntryType.Information || (type == LogEntryType.Information && !showUser)) {
- switch (type) {
- case LogEntryType.Error: ConsoleCrayon.ForegroundColor = ConsoleColor.Red; break;
- case LogEntryType.Warning: ConsoleCrayon.ForegroundColor = ConsoleColor.Yellow; break;
- case LogEntryType.Information: ConsoleCrayon.ForegroundColor = ConsoleColor.Green; break;
- case LogEntryType.Debug: ConsoleCrayon.ForegroundColor = ConsoleColor.Blue; break;
- case LogEntryType.Trace: ConsoleCrayon.ForegroundColor = ConsoleColor.Magenta; break;
- }
-
- Console.Write ("[{0} {1:00}:{2:00}:{3:00}.{4:000}]", TypeString (type), DateTime.Now.Hour,
- DateTime.Now.Minute, DateTime.Now.Second, DateTime.Now.Millisecond);
-
- ConsoleCrayon.ResetColor ();
-
- if (details != null) {
- Console.WriteLine (" {0} - {1}", message, details);
- } else {
- Console.WriteLine (" {0}", message);
- }
- }
-
- if (showUser) {
- OnNotify (new LogEntry (type, message, details));
- }
-
- if (type == LogEntryType.Trace) {
- string str = String.Format ("MARK: {0}: {1}", message, details);
- Mono.Unix.Native.Syscall.access(str, Mono.Unix.Native.AccessModes.F_OK);
- }
- }
-
- private static string TypeString (LogEntryType type)
- {
- switch (type) {
- case LogEntryType.Debug: return "Debug";
- case LogEntryType.Warning: return "Warn ";
- case LogEntryType.Error: return "Error";
- case LogEntryType.Information: return "Info ";
- case LogEntryType.Trace: return "Trace";
- }
- return null;
- }
-
- private static void OnNotify (LogEntry entry)
- {
- EventHandler<LogNotifyEventArgs> handler = Notify;
- if (handler != null) {
- handler (null, new LogNotifyEventArgs (entry));
- }
- }
-
- #region Timer Methods
-
- public static uint DebugTimerStart (string message)
- {
- return TimerStart (message, false);
- }
-
- public static uint InformationTimerStart (string message)
- {
- return TimerStart (message, true);
- }
-
- private static uint TimerStart (string message, bool isInfo)
- {
- if (!Debugging && !isInfo) {
- return 0;
- }
-
- if (isInfo) {
- Information (message);
- } else {
- Debug (message);
- }
-
- return TimerStart (isInfo);
- }
-
- public static uint DebugTimerStart ()
- {
- return TimerStart (false);
- }
-
- public static uint InformationTimerStart ()
- {
- return TimerStart (true);
- }
-
- private static uint TimerStart (bool isInfo)
- {
- if (!Debugging && !isInfo) {
- return 0;
- }
-
- uint timer_id = next_timer_id++;
- timers.Add (timer_id, DateTime.Now);
- return timer_id;
- }
-
- public static void DebugTimerPrint (uint id)
- {
- if (!Debugging) {
- return;
- }
-
- TimerPrint (id, "Operation duration: {0}", false);
- }
-
- public static void DebugTimerPrint (uint id, string message)
- {
- if (!Debugging) {
- return;
- }
-
- TimerPrint (id, message, false);
- }
-
- public static void InformationTimerPrint (uint id)
- {
- TimerPrint (id, "Operation duration: {0}", true);
- }
-
- public static void InformationTimerPrint (uint id, string message)
- {
- TimerPrint (id, message, true);
- }
-
- private static void TimerPrint (uint id, string message, bool isInfo)
- {
- if (!Debugging && !isInfo) {
- return;
- }
-
- DateTime finish = DateTime.Now;
-
- if (!timers.ContainsKey (id)) {
- return;
- }
-
- TimeSpan duration = finish - timers[id];
- string d_message;
- if (duration.TotalSeconds < 60) {
- d_message = String.Format ("{0}s", duration.TotalSeconds);
- } else {
- d_message = duration.ToString ();
- }
-
- if (isInfo) {
- Information (message, d_message);
- } else {
- Debug (message, d_message);
- }
- }
-
- #endregion
-
- #region Public Trace Methods
- public static void Trace (string group, string format, params object [] args)
- {
- if (Tracing) {
- Commit (LogEntryType.Trace, group, String.Format (format, args), false);
- }
- }
- #endregion
-
- #region Public Debug Methods
- public static void Debug (string message)
- {
- if (Debugging) {
- Commit (LogEntryType.Debug, message, null, false);
- }
- }
-
- public static void Debug (string format, params object [] args)
- {
- if (Debugging) {
- Debug (String.Format (format, args));
- }
- }
-
- public static void DebugException (Exception e)
- {
- if (Debugging)
- Exception (e);
- }
-
- public static void DebugException (string message, Exception e)
- {
- if (Debugging)
- Exception (message, e);
-
- }
- #endregion
-
- #region Public Information Methods
- public static void Information (string message, string details, bool showUser)
- {
- Commit (LogEntryType.Information, message, details, showUser);
- }
-
- public static void Information (string message, bool showUser)
- {
- Information (message, null, showUser);
- }
-
- public static void Information (string format, params object [] args)
- {
- Information (String.Format (format, args), null, false);
- }
- #endregion
-
- #region Public Warning Methods
- public static void Warning (string message, string details, bool showUser)
- {
- Commit (LogEntryType.Warning, message, details, showUser);
- }
-
- public static void Warning (string message, bool showUser)
- {
- Warning (message, null, showUser);
- }
-
- public static void Warning (string format, params object [] args)
- {
- Warning (String.Format (format, args), false);
- }
- #endregion
-
- #region Public Error Methods
- public static void Error (string message, string details, bool showUser)
- {
- Commit (LogEntryType.Error, message, details, showUser);
- }
-
- public static void Error (string message, bool showUser)
- {
- Error (message, null, showUser);
- }
-
- public static void Error (string format, params object [] args)
- {
- Error (String.Format (format, args), null, false);
- }
- #endregion
-
- #region Public Exception Methods
-
- public static void Exception (Exception e)
- {
- Exception (null, e);
- }
-
- public static void Exception (string message, Exception e)
- {
- Stack<Exception> exception_chain = new Stack<Exception> ();
- StringBuilder builder = new StringBuilder ();
-
- while (e != null) {
- exception_chain.Push (e);
- e = e.InnerException;
- }
-
- while (exception_chain.Count > 0) {
- e = exception_chain.Pop ();
- builder.AppendFormat ("{0} (in `{1}')", e.Message, e.Source).AppendLine ();
- builder.Append (e.StackTrace);
- if (exception_chain.Count > 0) {
- builder.AppendLine ();
- }
- }
-
- // FIXME: We should save these to an actual log file
- Log.Warning (message ?? "Caught an exception", builder.ToString (), false);
- }
-
- public static void Exception (Exception e, string format, params object [] args)
- {
- Exception (String.Format (format, args), e);
- }
-
- #endregion
- }
-}
diff --git a/src/Utils/Makefile.am b/src/Utils/Makefile.am
new file mode 100644
index 0000000..7ea4608
--- /dev/null
+++ b/src/Utils/Makefile.am
@@ -0,0 +1,30 @@
+ASSEMBLY = FSpot.Utils
+TARGET = library
+LINK = $(REF_FSPOT_UTILS)
+
+SOURCES = \
+ Cache.cs \
+ CairoUtils.cs \
+ ConsoleCrayon.cs \
+ DbUtils.cs \
+ FileExtensions.cs \
+ GdkUtils.cs \
+ GtkUtil.cs \
+ PixbufOrientation.cs \
+ PixbufUtils.cs \
+ RecursiveFileEnumerator.cs \
+ SafeUri.cs \
+ SafeUriExtensions.cs \
+ Unix.cs \
+ UriExtensions.cs \
+ UriUtils.cs \
+ XdgThumbnailSpec.cs \
+ Tests/SafeUriTests.cs \
+ Tests/XdgThumbnailSpecTests.cs
+
+RESOURCES =
+
+include $(top_srcdir)/build/build.mk
+
+EXTRA_DIST += FSpot.Utils.dll.config
+module_SCRIPTS += FSpot.Utils.dll.config
diff --git a/src/Utils/Makefile.in b/src/Utils/Makefile.in
new file mode 100644
index 0000000..95782b0
--- /dev/null
+++ b/src/Utils/Makefile.in
@@ -0,0 +1,822 @@
+# Makefile.in generated by automake 1.11.1 from Makefile.am.
+# @configure_input@
+
+# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
+# 2003, 2004, 2005, 2006, 2007, 2008, 2009 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.
+
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
+# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
+# PARTICULAR PURPOSE.
+
+ at SET_MAKE@
+
+VPATH = @srcdir@
+pkgdatadir = $(datadir)/@PACKAGE@
+pkgincludedir = $(includedir)/@PACKAGE@
+pkglibdir = $(libdir)/@PACKAGE@
+pkglibexecdir = $(libexecdir)/@PACKAGE@
+am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
+install_sh_DATA = $(install_sh) -c -m 644
+install_sh_PROGRAM = $(install_sh) -c
+install_sh_SCRIPT = $(install_sh) -c
+INSTALL_HEADER = $(INSTALL_DATA)
+transform = $(program_transform_name)
+NORMAL_INSTALL = :
+PRE_INSTALL = :
+POST_INSTALL = :
+NORMAL_UNINSTALL = :
+PRE_UNINSTALL = :
+POST_UNINSTALL = :
+build_triplet = @build@
+host_triplet = @host@
+DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in \
+ $(top_srcdir)/build/build.environment.mk \
+ $(top_srcdir)/build/build.mk \
+ $(top_srcdir)/build/build.rules.mk
+ at ENABLE_TESTS_TRUE@am__append_1 = " $(NUNIT_LIBS)"
+subdir = src/Utils
+ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
+am__aclocal_m4_deps = $(top_srcdir)/build/m4/shave/shave.m4 \
+ $(top_srcdir)/build/m4/shamrock/expansions.m4 \
+ $(top_srcdir)/build/m4/shamrock/gnome-doc.m4 \
+ $(top_srcdir)/build/m4/shamrock/mono.m4 \
+ $(top_srcdir)/build/m4/shamrock/nunit.m4 \
+ $(top_srcdir)/build/m4/shamrock/programs.m4 \
+ $(top_srcdir)/build/m4/f-spot/flickrnet.m4 \
+ $(top_srcdir)/build/m4/f-spot/gnome-keyring-sharp.m4 \
+ $(top_srcdir)/build/m4/f-spot/gtk-sharp.m4 \
+ $(top_srcdir)/build/m4/f-spot/mono-addins.m4 \
+ $(top_srcdir)/acinclude.m4 $(top_srcdir)/configure.ac
+am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
+ $(ACLOCAL_M4)
+mkinstalldirs = $(install_sh) -d
+CONFIG_HEADER = $(top_builddir)/config.h
+CONFIG_CLEAN_FILES =
+CONFIG_CLEAN_VPATH_FILES =
+am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`;
+am__vpath_adj = case $$p in \
+ $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \
+ *) f=$$p;; \
+ esac;
+am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`;
+am__install_max = 40
+am__nobase_strip_setup = \
+ srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'`
+am__nobase_strip = \
+ for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||"
+am__nobase_list = $(am__nobase_strip_setup); \
+ for p in $$list; do echo "$$p $$p"; done | \
+ sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \
+ $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \
+ if (++n[$$2] == $(am__install_max)) \
+ { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \
+ END { for (dir in files) print dir, files[dir] }'
+am__base_list = \
+ sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \
+ sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g'
+am__installdirs = "$(DESTDIR)$(moduledir)"
+SCRIPTS = $(module_SCRIPTS)
+DIST_SOURCES =
+DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
+ACLOCAL = @ACLOCAL@
+ACLOCAL_AMFLAGS = @ACLOCAL_AMFLAGS@
+ALL_LINGUAS = @ALL_LINGUAS@
+AMTAR = @AMTAR@
+AM_MAKEFLAGS = @AM_MAKEFLAGS@
+API_VERSION = @API_VERSION@
+AR = @AR@
+ASM_VERSION = @ASM_VERSION@
+AUTOCONF = @AUTOCONF@
+AUTOHEADER = @AUTOHEADER@
+AUTOMAKE = @AUTOMAKE@
+AWK = @AWK@
+CATALOGS = @CATALOGS@
+CATOBJEXT = @CATOBJEXT@
+CC = @CC@
+CCDEPMODE = @CCDEPMODE@
+CFLAGS = @CFLAGS@
+CPP = @CPP@
+CPPFLAGS = @CPPFLAGS@
+CSC_DEFINES = @CSC_DEFINES@
+CXX = @CXX@
+CXXCPP = @CXXCPP@
+CXXDEPMODE = @CXXDEPMODE@
+CXXFLAGS = @CXXFLAGS@
+CYGPATH_W = @CYGPATH_W@
+DATADIRNAME = @DATADIRNAME@
+DEFS = @DEFS@
+DEPDIR = @DEPDIR@
+DISPLAY_VERSION = @DISPLAY_VERSION@
+DISTCHECK_CONFIGURE_FLAGS = @DISTCHECK_CONFIGURE_FLAGS@
+DOC_USER_FORMATS = @DOC_USER_FORMATS@
+DSYMUTIL = @DSYMUTIL@
+DUMPBIN = @DUMPBIN@
+ECHO_C = @ECHO_C@
+ECHO_N = @ECHO_N@
+ECHO_T = @ECHO_T@
+EGREP = @EGREP@
+EXEEXT = @EXEEXT@
+EXIF_CFLAGS = @EXIF_CFLAGS@
+EXIF_LIBS = @EXIF_LIBS@
+EXIF_SOVERSION = @EXIF_SOVERSION@
+F77 = @F77@
+FC = @FC@
+FGREP = @FGREP@
+FLICKRNET_CFLAGS = @FLICKRNET_CFLAGS@
+FLICKRNET_LIBS = @FLICKRNET_LIBS@
+F_CFLAGS = @F_CFLAGS@
+F_LIBS = @F_LIBS@
+GAPI2CODEGEN = @GAPI2CODEGEN@
+GAPI2FIXUP = @GAPI2FIXUP@
+GAPI2PARSER = @GAPI2PARSER@
+GCONFTOOL = @GCONFTOOL@
+GCONF_SCHEMA_CONFIG_SOURCE = @GCONF_SCHEMA_CONFIG_SOURCE@
+GCONF_SCHEMA_FILE_DIR = @GCONF_SCHEMA_FILE_DIR@
+GCONF_SHARP_CFLAGS = @GCONF_SHARP_CFLAGS@
+GCONF_SHARP_LIBS = @GCONF_SHARP_LIBS@
+GETTEXT_PACKAGE = @GETTEXT_PACKAGE@
+GIO_CFLAGS = @GIO_CFLAGS@
+GIO_LIBS = @GIO_LIBS@
+GLIBSHARP_2_12_7_CFLAGS = @GLIBSHARP_2_12_7_CFLAGS@
+GLIBSHARP_2_12_7_LIBS = @GLIBSHARP_2_12_7_LIBS@
+GLIBSHARP_CFLAGS = @GLIBSHARP_CFLAGS@
+GLIBSHARP_LIBS = @GLIBSHARP_LIBS@
+GLIB_CFLAGS = @GLIB_CFLAGS@
+GLIB_GENMARSHAL = @GLIB_GENMARSHAL@
+GLIB_LIBS = @GLIB_LIBS@
+GLIB_MKENUMS = @GLIB_MKENUMS@
+GMOFILES = @GMOFILES@
+GMSGFMT = @GMSGFMT@
+GNOME_ICON_THEME_PREFIX = @GNOME_ICON_THEME_PREFIX@
+GNOME_SCREENSAVER_SAVERDIR = @GNOME_SCREENSAVER_SAVERDIR@
+GNOME_SCREENSAVER_THEMESDIR = @GNOME_SCREENSAVER_THEMESDIR@
+GNOME_SHARP_CFLAGS = @GNOME_SHARP_CFLAGS@
+GNOME_SHARP_LIBS = @GNOME_SHARP_LIBS@
+GOBJECT_QUERY = @GOBJECT_QUERY@
+GREP = @GREP@
+GTKSHARP_A11Y_CFLAGS = @GTKSHARP_A11Y_CFLAGS@
+GTKSHARP_A11Y_LIBS = @GTKSHARP_A11Y_LIBS@
+GTKSHARP_CFLAGS = @GTKSHARP_CFLAGS@
+GTKSHARP_LIBS = @GTKSHARP_LIBS@
+HELP_DIR = @HELP_DIR@
+ICONS_DIRECTORY = @ICONS_DIRECTORY@
+INSTALL = @INSTALL@
+INSTALL_DATA = @INSTALL_DATA@
+INSTALL_PROGRAM = @INSTALL_PROGRAM@
+INSTALL_SCRIPT = @INSTALL_SCRIPT@
+INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
+INSTOBJEXT = @INSTOBJEXT@
+INTLLIBS = @INTLLIBS@
+INTLTOOL_EXTRACT = @INTLTOOL_EXTRACT@
+INTLTOOL_MERGE = @INTLTOOL_MERGE@
+INTLTOOL_PERL = @INTLTOOL_PERL@
+INTLTOOL_UPDATE = @INTLTOOL_UPDATE@
+KEYRINGSHARP_CFLAGS = @KEYRINGSHARP_CFLAGS@
+KEYRINGSHARP_LIBS = @KEYRINGSHARP_LIBS@
+LCMS_CFLAGS = @LCMS_CFLAGS@
+LCMS_LIBS = @LCMS_LIBS@
+LD = @LD@
+LDFLAGS = @LDFLAGS@
+LIBEXIF_VERSION_CHECK_CFLAGS = @LIBEXIF_VERSION_CHECK_CFLAGS@
+LIBEXIF_VERSION_CHECK_LIBS = @LIBEXIF_VERSION_CHECK_LIBS@
+LIBJPEG = @LIBJPEG@
+LIBOBJS = @LIBOBJS@
+LIBS = @LIBS@
+LIBTOOL = @LIBTOOL@
+LIPO = @LIPO@
+LN_S = @LN_S@
+LTLIBOBJS = @LTLIBOBJS@
+MAINT = @MAINT@
+MAKEFLAGS = @MAKEFLAGS@
+MAKEINFO = @MAKEINFO@
+MCS = @MCS@
+MKDIR_P = @MKDIR_P@
+MKINSTALLDIRS = @MKINSTALLDIRS@
+MONO = @MONO@
+MONO_ADDINS_CFLAGS = @MONO_ADDINS_CFLAGS@
+MONO_ADDINS_GUI_CFLAGS = @MONO_ADDINS_GUI_CFLAGS@
+MONO_ADDINS_GUI_LIBS = @MONO_ADDINS_GUI_LIBS@
+MONO_ADDINS_LIBS = @MONO_ADDINS_LIBS@
+MONO_ADDINS_SETUP_CFLAGS = @MONO_ADDINS_SETUP_CFLAGS@
+MONO_ADDINS_SETUP_LIBS = @MONO_ADDINS_SETUP_LIBS@
+MONO_MODULE_CFLAGS = @MONO_MODULE_CFLAGS@
+MONO_MODULE_LIBS = @MONO_MODULE_LIBS@
+MSGFMT = @MSGFMT@
+MSGFMT_OPTS = @MSGFMT_OPTS@
+MSGMERGE = @MSGMERGE@
+NDESK_DBUS_CFLAGS = @NDESK_DBUS_CFLAGS@
+NDESK_DBUS_LIBS = @NDESK_DBUS_LIBS@
+NM = @NM@
+NMEDIT = @NMEDIT@
+NUNIT_CFLAGS = @NUNIT_CFLAGS@
+NUNIT_LIBS = @NUNIT_LIBS@
+OBJC = @OBJC@
+OBJDUMP = @OBJDUMP@
+OBJEXT = @OBJEXT@
+OMF_DIR = @OMF_DIR@
+OTOOL = @OTOOL@
+OTOOL64 = @OTOOL64@
+PACKAGE = @PACKAGE@
+PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
+PACKAGE_NAME = @PACKAGE_NAME@
+PACKAGE_STRING = @PACKAGE_STRING@
+PACKAGE_TARNAME = @PACKAGE_TARNAME@
+PACKAGE_URL = @PACKAGE_URL@
+PACKAGE_VERSION = @PACKAGE_VERSION@
+PATH_SEPARATOR = @PATH_SEPARATOR@
+PKG_CONFIG = @PKG_CONFIG@
+POFILES = @POFILES@
+POSUB = @POSUB@
+PO_IN_DATADIR_FALSE = @PO_IN_DATADIR_FALSE@
+PO_IN_DATADIR_TRUE = @PO_IN_DATADIR_TRUE@
+Q = @Q@
+RANLIB = @RANLIB@
+SED = @SED@
+SET_MAKE = @SET_MAKE@
+SHELL = @SHELL@
+STRIP = @STRIP@
+TURTLEDIR = @TURTLEDIR@
+UNIQUE_CFLAGS = @UNIQUE_CFLAGS@
+UNIQUE_LIBS = @UNIQUE_LIBS@
+USE_NLS = @USE_NLS@
+V = @V@
+VERSION = @VERSION@
+WARN_CFLAGS = @WARN_CFLAGS@
+XGETTEXT = @XGETTEXT@
+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_DUMPBIN = @ac_ct_DUMPBIN@
+am__include = @am__include@
+am__leading_dot = @am__leading_dot@
+am__quote = @am__quote@
+am__tar = @am__tar@
+am__untar = @am__untar@
+bindir = @bindir@
+build = @build@
+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@
+expanded_bindir = @expanded_bindir@
+expanded_datadir = @expanded_datadir@
+expanded_libdir = @expanded_libdir@
+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@
+lt_ECHO = @lt_ECHO@
+mandir = @mandir@
+mkdir_p = @mkdir_p@
+oldincludedir = @oldincludedir@
+pdfdir = @pdfdir@
+prefix = @prefix@
+program_transform_name = @program_transform_name@
+psdir = @psdir@
+sbindir = @sbindir@
+sharedstatedir = @sharedstatedir@
+shavedir = @shavedir@
+srcdir = @srcdir@
+sysconfdir = @sysconfdir@
+target_alias = @target_alias@
+top_build_prefix = @top_build_prefix@
+top_builddir = @top_builddir@
+top_srcdir = @top_srcdir@
+ASSEMBLY = FSpot.Utils
+TARGET = library
+LINK = $(REF_FSPOT_UTILS) $(am__append_1)
+SOURCES = \
+ Cache.cs \
+ CairoUtils.cs \
+ ConsoleCrayon.cs \
+ DbUtils.cs \
+ FileExtensions.cs \
+ GdkUtils.cs \
+ GtkUtil.cs \
+ PixbufOrientation.cs \
+ PixbufUtils.cs \
+ RecursiveFileEnumerator.cs \
+ SafeUri.cs \
+ SafeUriExtensions.cs \
+ Unix.cs \
+ UriExtensions.cs \
+ UriUtils.cs \
+ XdgThumbnailSpec.cs \
+ Tests/SafeUriTests.cs \
+ Tests/XdgThumbnailSpecTests.cs
+
+RESOURCES =
+
+# Initializers
+MONO_BASE_PATH =
+MONO_ADDINS_PATH =
+
+# Install Paths
+DEFAULT_INSTALL_DIR = $(pkglibdir)
+BACKENDS_INSTALL_DIR = $(DEFAULT_INSTALL_DIR)/Backends
+EXTENSIONS_INSTALL_DIR = $(DEFAULT_INSTALL_DIR)/Extensions
+DIR_DOCS = $(top_builddir)/docs
+DIR_EXTENSIONS = $(top_builddir)/extensions
+DIR_ICONS = $(top_builddir)/icons
+DIR_JPEGTRAN = $(top_builddir)/lib/libjpegtran
+DIR_LIBFSPOT = $(top_builddir)/lib/libfspot
+DIR_SEMWEB = $(top_builddir)/lib/semweb
+DIR_SRC = $(top_builddir)/src
+DIR_GIOSHARP = $(top_builddir)/lib/gio-sharp/gio
+DIR_GTKSHARPBEANS = $(top_builddir)/lib/gtk-sharp-beans
+DIR_UNIQUESHARP = $(top_builddir)/lib/unique-sharp/unique
+DIR_BIN = $(top_builddir)/bin
+
+# External libraries to link against, generated from configure
+LINK_SYSTEM = -r:System
+LINK_SYSTEMDATA = -r:System.Data
+LINK_SYSTEM_WEB = -r:System.Web
+LINK_MONO_POSIX = -r:Mono.Posix
+LINK_MONO_CAIRO = -r:Mono.Cairo
+LINK_MONO_SIMD = -r:Mono.Simd
+LINK_MONODATA = -r:Mono.Data
+LINK_MONO_DATA_SQLITECLIENT = -r:Mono.Data.SqliteClient
+LINK_ICSHARP_ZIP_LIB = -r:ICSharpCode.SharpZipLib
+LINK_KEYRING = $(KEYRINGSHARP_LIBS)
+LINK_GLIB = $(GLIBSHARP_LIBS)
+LINK_GTK = $(GTKSHARP_LIBS)
+LINK_GNOME = $(GNOME_SHARP_LIBS)
+LINK_GCONF = $(GCONF_SHARP_LIBS)
+LINK_GLADE = -pkg:glade-sharp-2.0
+LINK_FLICKRNET = -pkg:flickrnet
+LINK_DBUS = $(NDESK_DBUS_LIBS) $(NDESK_DBUS_GLIB_LIBS)
+LINK_DBUS_NO_GLIB = $(NDESK_DBUS_LIBS)
+LINK_MONO_ADDINS_DEPS = $(MONO_ADDINS_LIBS)
+LINK_MONO_ADDINS_SETUP_DEPS = $(MONO_ADDINS_SETUP_LIBS)
+LINK_MONO_ADDINS_GUI_DEPS = $(MONO_ADDINS_GUI_LIBS)
+
+# GIO
+REF_GIO =
+LINK_GIO = -r:$(DIR_GIOSHARP)/gio-sharp.dll
+LINK_GIO_DEPS = $(REF_GIO) $(LINK_GIO)
+
+# Gtk Beans
+REF_GTK_BEANS = $(LINK_GIO_DEPS)
+LINK_GTK_BEANS = -r:$(DIR_GTKSHARPBEANS)/gtk-sharp-beans.dll
+LINK_GTK_BEANS_DEPS = $(REF_GTK_BEANS) $(LINK_GTK_BEANS)
+
+# Uniqe
+REF_UNIQUE =
+LINK_UNIQUE = -r:$(DIR_UNIQUESHARP)/unique-sharp.dll
+LINK_UNIQUE_DEPS = $(REF_UNIQUE) $(LINK_UNIQUE)
+
+# Hyena
+REF_HYENA = $(LINK_SYSTEM) $(LINK_MONO_POSIX)
+LINK_HYENA = -r:$(DIR_BIN)/Hyena.dll
+LINK_HYENA_DEPS = $(REF_HYENA) $(LINK_HYENA)
+
+# Semweb
+REF_SEMWEB = $(LINK_SYSTEMDATA) $(LINK_HYENA_DEPS)
+LINK_SEMWEB = -r:$(DIR_BIN)/SemWeb.dll
+LINK_SEMWEB_DEPS = $(REF_SEMWEB) $(LINK_SEMWEB)
+
+# Hyena.Data.Sqlite
+REF_HYENA_DATA_SQLITE = $(LINK_SQLITE)
+LINK_HYENA_DATA_SQLITE = -r:$(DIR_BIN)/Hyena.Data.Sqlite.dll
+LINK_HYENA_DATA_SQLITE_DEPS = $(REF_HYENA_DATA_SQLITE) $(LINK_HYENA_DATA_SQLITE)
+
+# Hyena.Gui
+REF_HYENA_GUI = $(LINK_HYENA_DEPS)
+LINK_HYENA_GUI = -r:$(DIR_BIN)/Hyena.Gui.dll
+LINK_HENA_GUI_DEPS = $(REF_HYENA_GUI) $(LINK_HYENA_GUI)
+
+# FSpot.Cms
+REF_FSPOT_CMS = $(LINK_GTK)
+LINK_FSPOT_CMS = -r:$(DIR_BIN)/FSpot.Cms.dll
+LINK_FSPOT_CMS_DEPS = $(REF_FSPOT_CMS) $(LINK_FSPOT_CMS)
+
+# FSpot.Utils
+REF_FSPOT_UTILS = $(LINK_HYENA_DEPS) $(LINK_GTK) $(LINK_GIO) $(LINK_MONO_CAIRO)
+LINK_FSPOT_UTILS = -r:$(DIR_BIN)/FSpot.Utils.dll
+LINK_FSPOT_UTILS_DEPS = $(REF_FSPOT_UTILS) $(LINK_FSPOT_UTILS)
+
+# FSpot.Core
+REF_FSPOT_CORE = $(LINK_FSPOT_UTILS_DEPS) $(LINK_FSPOT_CMS_DEPS)
+LINK_FSPOT_CORE = -r:$(DIR_BIN)/FSpot.Core.dll
+LINK_FSPOT_CORE_DEPS = $(REF_FSPOT_CORE) $(LINK_FSPOT_CORE)
+
+# FSpot.Query
+REF_FSPOT_QUERY = $(LINK_FSPOT_CORE_DEPS)
+LINK_FSPOT_QUERY = -r:$(DIR_BIN)/FSpot.Query.dll
+LINK_FSPOT_QUERY_DEPS = $(REF_FSPOT_QUERY) $(LINK_FSPOT_QUERY)
+
+# FSpot.JobScheduler
+REF_FSPOT_JOB_SCHEDULER = $(LINK_HYENA_DEPS)
+LINK_FSPOT_JOB_SCHEDULER = -r:$(DIR_BIN)/FSpot.JobScheduler.dll
+LINK_FSPOT_JOB_SCHEDULER_DEPS = $(REF_FSPOT_JOB_SCHEDULER) $(LINK_FSPOT_JOB_SCHEDULER)
+
+# FSpot.Bling
+REF_FSPOT_BLING = $(LINK_GTK_BEANS_DEPS) $(LINK_GLIB)
+LINK_FSPOT_BLING = -r:$(DIR_BIN)/FSpot.Bling.dll
+LINK_FSPOT_BLING_DEPS = $(REF_FSPOT_BLING) $(LINK_FSPOT_BLING)
+
+# FSpot.Platform
+REF_FSPOT_PLATFORM = $(LINK_GCONF) $(LINK_GTK) $(LINK_FSPOT_CORE_DEPS) $(LINK_DBUS)
+LINK_FSPOT_PLATFORM = -r:$(DIR_BIN)/FSpot.Platform.dll
+LINK_FSPOT_PLATFORM_DEPS = $(REF_FSPOT_PLATFORM) $(LINK_FSPOT_PLATFORM)
+
+# FSpot.Widgets
+REF_FSPOT_WIDGETS = $(LINK_FSPOT_CORE_DEPS) $(LINK_FSPOT_BLING_DEPS)
+LINK_FSPOT_WIDGETS = -r:$(DIR_BIN)/FSpot.Widgets.dll
+LINK_FSPOT_WIDGETS_DEPS = $(REF_FSPOT_WIDGETS) $(LINK_FSPOT_WIDGETS)
+
+# FSpot (executable)
+REF_FSPOT = $(LINK_FSPOT_WIDGETS_DEPS) $(LINK_FSPOT_PLATFORM_DEPS) $(LINK_FSPOT_QUERY_DEPS) \
+ $(LINK_GLIB) $(LINK_MONO_ADDINS_DEPS) $(LINK_UNIQUE_DEPS) $(LINK_MONO_ADDINS_SETUP_DEPS) \
+ $(LINK_SEMWEB_DEPS) $(LINK_GLADE) $(LINK_MONODATA) $(LINK_MONO_DATA_SQLITECLIENT) \
+ $(LINK_MONO_ADDINS_GUI_DEPS) $(LINK_FSPOT_JOB_SCHEDULER_DEPS) $(LINK_ICSHARP_ZIP_LIB) \
+ $(LINK_GNOME)
+
+# FIXME: do not link executables
+LINK_FSPOT = -r:$(DIR_BIN)/f-spot.exe
+LINK_FSPOT_DEPS = $(REF_FSPOT) $(LINK_FSPOT)
+
+# Extensions
+REF_FSPOT_EXTENSION_BLACKOUTEDITOR = $(LINK_FSPOT_DEPS)
+REF_FSPOT_EXTENSION_BWEDITOR = $(LINK_FSPOT_DEPS) $(LINK_MONO_SIMD)
+REF_FSPOT_EXTENSION_FLIPEDITOR = $(LINK_FSPOT_DEPS)
+REF_FSPOT_EXTENSION_PIXELATEEDITOR = $(LINK_FSPOT_DEPS)
+REF_FSPOT_EXTENSION_RESIZEEDITOR = $(LINK_FSPOT_DEPS)
+REF_FSPOT_EXTENSION_CDEXPORT = $(LINK_FSPOT_DEPS)
+REF_FSPOT_EXTENSION_FACEBOOKEXPORT = $(LINK_FSPOT_DEPS) $(LINK_KEYRING)
+REF_FSPOT_EXTENSION_FLICKREXPORT = $(LINK_FSPOT_DEPS) $(LINK_FLICKRNET)
+REF_FSPOT_EXTENSION_FOLDEREXPORT = $(LINK_FSPOT_DEPS) $(LINK_SYSTEM_WEB)
+REF_FSPOT_EXTENSION_GALLERYEXPORT = $(LINK_FSPOT_DEPS)
+REF_MONO_GOOGLE = $(LINK_HYENA_DEPS)
+LINK_MONO_GOOGLE = -r:$(DIR_BIN)/Mono.Google.dll
+LINK_MONO_GOOGLE_DEPS = $(REF_MONO_GOOGLE) $(LINK_MONO_GOOGLE)
+REF_FSPOT_EXTENSION_PICASAWEBEXPORT = $(LINK_FSPOT_DEPS) $(LINK_MONO_GOOGLE) $(LINK_KEYRING)
+REF_SMUGMUGNET = $(LINK_FSPOT_DEPS)
+LINK_SMUGMUGNET = -r:$(DIR_BIN)/SmugMugNet.dll
+LINK_SMUGMUGNET_DEPS = $(REF_SMUGMUGNET) $(LINK_SMUGMUGNET)
+REF_FSPOT_EXTENSION_SMUGMUGEXPORT = $(LINK_SMUGMUGNET_DEPS) $(LINK_KEYRING)
+REF_MONO_TABBLO = $(LINK_HYENA_DEPS)
+LINK_MONO_TABBLO = -r:$(DIR_BIN)/Mono.Tabblo.dll
+LINK_MONO_TABBLO_DEPS = $(REF_MONO_TABBLO) $(LINK_MONO_TABBLO)
+REF_FSPOT_EXTENSION_TABBLOEXPORT = $(LINK_FSPOT_DEPS) $(LINK_KEYRING) $(LINK_MONO_TABBLO_DEPS)
+REF_FSPOT_EXTENSION_ZIPEXPORT = $(LINK_FSPOT_DEPS)
+REF_FSPOT_EXTENSION_CHANGEPHOTOPATH = $(LINK_FSPOT_DEPS)
+REF_FSPOT_EXTENSION_DEVELOPINUFRAW = $(LINK_FSPOT_DEPS)
+REF_FSPOT_EXTENSION_HASHJOB = $(LINK_FSPOT_DEPS)
+REF_FSPOT_EXTENSION_LIVEWEBGALLERY = $(LINK_FSPOT_DEPS)
+REF_FSPOT_EXTENSION_MERGEDB = $(LINK_FSPOT_DEPS)
+REF_FSPOT_EXTENSION_RAWPLUSJPEG = $(LINK_FSPOT_DEPS)
+REF_FSPOT_EXTENSION_RETROACTIVEROLL = $(LINK_FSPOT_DEPS)
+REF_FSPOT_EXTENSION_SCREENSAVERCONFIG = $(LINK_FSPOT_DEPS)
+REF_FSPOT_EXTENSION_COVERTRANSITION = $(LINK_FSPOT_DEPS)
+
+# Cute hack to replace a space with something
+colon := :
+empty :=
+space := $(empty) $(empty)
+
+# Build path to allow running uninstalled
+RUN_PATH = $(subst $(space),$(colon), $(MONO_BASE_PATH))
+UNIQUE_FILTER_PIPE = tr [:space:] \\n | sort | uniq
+BUILD_DATA_DIR = $(top_builddir)/bin/share/$(PACKAGE)
+
+# Since all other attempts failed, we currently go this way:
+# This code adds the file specified in ASSEMBLY_INFO_SOURCE to SOURCES_BUILD.
+# If no such file is specified, the default AssemblyInfo.cs is used.
+ASSEMBLY_INFO_SOURCE_REAL = \
+ $(shell if [ "$(ASSEMBLY_INFO_SOURCE)" ]; \
+ then \
+ echo "$(addprefix $(srcdir)/, $(ASSEMBLY_INFO_SOURCE))"; \
+ else \
+ echo "$(top_srcdir)/src/AssemblyInfo.cs"; \
+ fi)
+
+SOURCES_BUILD = $(addprefix $(srcdir)/, $(SOURCES)) \
+ $(ASSEMBLY_INFO_SOURCE_REAL)
+RESOURCES_EXPANDED = $(addprefix $(srcdir)/, $(RESOURCES))
+RESOURCES_BUILD = $(foreach resource, $(RESOURCES_EXPANDED), \
+ -resource:$(resource),$(notdir $(resource)))
+
+INSTALL_ICONS = $(top_srcdir)/build/private-icon-theme-installer "$(mkinstalldirs)" "$(INSTALL_DATA)"
+THEME_ICONS_SOURCE = $(wildcard $(srcdir)/ThemeIcons/*/*/*.png) $(wildcard $(srcdir)/ThemeIcons/scalable/*/*.svg)
+THEME_ICONS_RELATIVE = $(subst $(srcdir)/ThemeIcons/, , $(THEME_ICONS_SOURCE))
+ASSEMBLY_EXTENSION = $(strip $(patsubst library, dll, $(TARGET)))
+ASSEMBLY_FILE = $(top_builddir)/bin/$(ASSEMBLY).$(ASSEMBLY_EXTENSION)
+INSTALL_DIR_RESOLVED = $(firstword $(subst , $(DEFAULT_INSTALL_DIR), $(INSTALL_DIR)))
+ at ENABLE_TESTS_TRUE@ENABLE_TESTS_FLAG = "-define:ENABLE_TESTS"
+ at ENABLE_ATK_TRUE@ENABLE_ATK_FLAG = "-define:ENABLE_ATK"
+FILTERED_LINK = $(shell echo "$(LINK)" | $(UNIQUE_FILTER_PIPE))
+DEP_LINK = $(shell echo "$(LINK)" | $(UNIQUE_FILTER_PIPE) | sed s,-r:,,g | grep '$(top_builddir)/bin/')
+OUTPUT_FILES = \
+ $(ASSEMBLY_FILE) \
+ $(ASSEMBLY_FILE).mdb
+
+moduledir = $(INSTALL_DIR_RESOLVED)
+module_SCRIPTS = $(OUTPUT_FILES) FSpot.Utils.dll.config
+EXTRA_DIST = $(SOURCES_BUILD) $(RESOURCES_EXPANDED) \
+ $(THEME_ICONS_SOURCE) FSpot.Utils.dll.config
+CLEANFILES = $(OUTPUT_FILES) $(ASSEMBLY_FILE).config
+DISTCLEANFILES = *.pidb
+MAINTAINERCLEANFILES = Makefile.in
+all: all-am
+
+.SUFFIXES:
+$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(top_srcdir)/build/build.mk $(top_srcdir)/build/build.environment.mk $(top_srcdir)/build/build.rules.mk $(am__configure_deps)
+ @for dep in $?; do \
+ case '$(am__configure_deps)' in \
+ *$$dep*) \
+ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \
+ && { if test -f $@; then exit 0; else break; fi; }; \
+ exit 1;; \
+ esac; \
+ done; \
+ echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign src/Utils/Makefile'; \
+ $(am__cd) $(top_srcdir) && \
+ $(AUTOMAKE) --foreign src/Utils/Makefile
+.PRECIOUS: Makefile
+Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
+ @case '$?' in \
+ *config.status*) \
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \
+ *) \
+ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \
+ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \
+ esac;
+
+$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+
+$(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps)
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps)
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(am__aclocal_m4_deps):
+install-moduleSCRIPTS: $(module_SCRIPTS)
+ @$(NORMAL_INSTALL)
+ test -z "$(moduledir)" || $(MKDIR_P) "$(DESTDIR)$(moduledir)"
+ @list='$(module_SCRIPTS)'; test -n "$(moduledir)" || list=; \
+ for p in $$list; do \
+ if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \
+ if test -f "$$d$$p"; then echo "$$d$$p"; echo "$$p"; else :; fi; \
+ done | \
+ sed -e 'p;s,.*/,,;n' \
+ -e 'h;s|.*|.|' \
+ -e 'p;x;s,.*/,,;$(transform)' | sed 'N;N;N;s,\n, ,g' | \
+ $(AWK) 'BEGIN { files["."] = ""; dirs["."] = 1; } \
+ { d=$$3; if (dirs[d] != 1) { print "d", d; dirs[d] = 1 } \
+ if ($$2 == $$4) { files[d] = files[d] " " $$1; \
+ if (++n[d] == $(am__install_max)) { \
+ print "f", d, files[d]; n[d] = 0; files[d] = "" } } \
+ else { print "f", d "/" $$4, $$1 } } \
+ END { for (d in files) print "f", d, files[d] }' | \
+ while read type dir files; do \
+ if test "$$dir" = .; then dir=; else dir=/$$dir; fi; \
+ test -z "$$files" || { \
+ echo " $(INSTALL_SCRIPT) $$files '$(DESTDIR)$(moduledir)$$dir'"; \
+ $(INSTALL_SCRIPT) $$files "$(DESTDIR)$(moduledir)$$dir" || exit $$?; \
+ } \
+ ; done
+
+uninstall-moduleSCRIPTS:
+ @$(NORMAL_UNINSTALL)
+ @list='$(module_SCRIPTS)'; test -n "$(moduledir)" || exit 0; \
+ files=`for p in $$list; do echo "$$p"; done | \
+ sed -e 's,.*/,,;$(transform)'`; \
+ test -n "$$list" || exit 0; \
+ echo " ( cd '$(DESTDIR)$(moduledir)' && rm -f" $$files ")"; \
+ cd "$(DESTDIR)$(moduledir)" && rm -f $$files
+
+mostlyclean-libtool:
+ -rm -f *.lo
+
+clean-libtool:
+ -rm -rf .libs _libs
+tags: TAGS
+TAGS:
+
+ctags: CTAGS
+CTAGS:
+
+
+distdir: $(DISTFILES)
+ @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; \
+ if test -d $$d/$$file; then \
+ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \
+ if test -d "$(distdir)/$$file"; then \
+ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
+ fi; \
+ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
+ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \
+ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
+ fi; \
+ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \
+ else \
+ test -f "$(distdir)/$$file" \
+ || cp -p $$d/$$file "$(distdir)/$$file" \
+ || exit 1; \
+ fi; \
+ done
+check-am: all-am
+check: check-am
+all-am: Makefile $(SCRIPTS)
+installdirs:
+ for dir in "$(DESTDIR)$(moduledir)"; do \
+ test -z "$$dir" || $(MKDIR_P) "$$dir"; \
+ done
+install: install-am
+install-exec: install-exec-am
+install-data: install-data-am
+uninstall: uninstall-am
+
+install-am: all-am
+ @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
+
+installcheck: installcheck-am
+install-strip:
+ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+ `test -z '$(STRIP)' || \
+ echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install
+mostlyclean-generic:
+
+clean-generic:
+ -test -z "$(CLEANFILES)" || rm -f $(CLEANFILES)
+
+distclean-generic:
+ -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
+ -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES)
+ -test -z "$(DISTCLEANFILES)" || rm -f $(DISTCLEANFILES)
+
+maintainer-clean-generic:
+ @echo "This command is intended for maintainers to use"
+ @echo "it deletes files that may require special tools to rebuild."
+ -test -z "$(MAINTAINERCLEANFILES)" || rm -f $(MAINTAINERCLEANFILES)
+clean: clean-am
+
+clean-am: clean-generic clean-libtool mostlyclean-am
+
+distclean: distclean-am
+ -rm -f Makefile
+distclean-am: clean-am distclean-generic
+
+dvi: dvi-am
+
+dvi-am:
+
+html: html-am
+
+html-am:
+
+info: info-am
+
+info-am:
+
+install-data-am: install-data-local install-moduleSCRIPTS
+
+install-dvi: install-dvi-am
+
+install-dvi-am:
+
+install-exec-am:
+
+install-html: install-html-am
+
+install-html-am:
+
+install-info: install-info-am
+
+install-info-am:
+
+install-man:
+
+install-pdf: install-pdf-am
+
+install-pdf-am:
+
+install-ps: install-ps-am
+
+install-ps-am:
+
+installcheck-am:
+
+maintainer-clean: maintainer-clean-am
+ -rm -f Makefile
+maintainer-clean-am: distclean-am maintainer-clean-generic
+
+mostlyclean: mostlyclean-am
+
+mostlyclean-am: mostlyclean-generic mostlyclean-libtool
+
+pdf: pdf-am
+
+pdf-am:
+
+ps: ps-am
+
+ps-am:
+
+uninstall-am: uninstall-local uninstall-moduleSCRIPTS
+
+.MAKE: install-am install-strip
+
+.PHONY: all all-am check check-am clean clean-generic clean-libtool \
+ distclean distclean-generic distclean-libtool distdir dvi \
+ dvi-am html html-am info info-am install install-am \
+ install-data install-data-am install-data-local install-dvi \
+ install-dvi-am install-exec install-exec-am install-html \
+ install-html-am install-info install-info-am install-man \
+ install-moduleSCRIPTS install-pdf install-pdf-am install-ps \
+ install-ps-am install-strip installcheck installcheck-am \
+ installdirs maintainer-clean maintainer-clean-generic \
+ mostlyclean mostlyclean-generic mostlyclean-libtool pdf pdf-am \
+ ps ps-am uninstall uninstall-am uninstall-local \
+ uninstall-moduleSCRIPTS
+
+
+all: $(ASSEMBLY_FILE) theme-icons
+
+run:
+ @pushd $(top_builddir); \
+ make run; \
+ popd;
+
+# uncommented for now.
+# tests are currently excuted from Makefile in $(top_builddir)
+#test:
+# @pushd $(top_builddir)/tests; \
+# make $(ASSEMBLY); \
+# popd;
+
+build-debug:
+ @echo $(DEP_LINK)
+
+$(ASSEMBLY_FILE).mdb: $(ASSEMBLY_FILE)
+
+$(ASSEMBLY_FILE): $(SOURCES_BUILD) $(RESOURCES_EXPANDED) $(DEP_LINK)
+ @mkdir -p $(top_builddir)/bin
+ @if [ ! "x$(ENABLE_RELEASE)" = "xyes" ]; then \
+ $(top_srcdir)/build/dll-map-makefile-verifier $(srcdir)/Makefile.am $(srcdir)/$(notdir $@.config) && \
+ $(MONO) $(top_builddir)/build/dll-map-verifier.exe $(srcdir)/$(notdir $@.config) -iwinmm -ilibbanshee -ilibbnpx11 -ilibc -ilibc.so.6 -iintl -ilibmtp.dll -ilibigemacintegration.dylib -iCFRelease $(SOURCES_BUILD); \
+ fi;
+ $(MCS) \
+ $(GMCS_FLAGS) \
+ $(ASSEMBLY_BUILD_FLAGS) \
+ -nowarn:0278 -nowarn:0078 $$warn \
+ -define:HAVE_GTK_2_10 -define:NET_2_0 \
+ -debug -target:$(TARGET) -out:$@ \
+ $(BUILD_DEFINES) $(ENABLE_TESTS_FLAG) $(ENABLE_ATK_FLAG) \
+ $(FILTERED_LINK) $(RESOURCES_BUILD) $(SOURCES_BUILD)
+ @if [ -e $(srcdir)/$(notdir $@.config) ]; then \
+ cp $(srcdir)/$(notdir $@.config) $(top_builddir)/bin; \
+ fi;
+ @if [ ! -z "$(EXTRA_BUNDLE)" ]; then \
+ cp $(EXTRA_BUNDLE) $(top_builddir)/bin; \
+ fi;
+
+theme-icons: $(THEME_ICONS_SOURCE)
+ @$(INSTALL_ICONS) -il "$(BUILD_DATA_DIR)" "$(srcdir)" $(THEME_ICONS_RELATIVE)
+
+install-data-local: $(THEME_ICONS_SOURCE)
+ @$(INSTALL_ICONS) -i "$(DESTDIR)$(pkgdatadir)" "$(srcdir)" $(THEME_ICONS_RELATIVE)
+
+uninstall-local: $(THEME_ICONS_SOURCE)
+ @$(INSTALL_ICONS) -u "$(DESTDIR)$(pkgdatadir)" "$(srcdir)" $(THEME_ICONS_RELATIVE)
+
+# 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.
+.NOEXPORT:
diff --git a/src/Utils/PixbufUtils.cs b/src/Utils/PixbufUtils.cs
index 68ff5d4..ad611ef 100644
--- a/src/Utils/PixbufUtils.cs
+++ b/src/Utils/PixbufUtils.cs
@@ -195,32 +195,7 @@ namespace FSpot.Utils
if (pixbuf == null)
return null;
Pixbuf result = new Pixbuf (pixbuf, 0, 0, pixbuf.Width, pixbuf.Height);
- CopyThumbnailOptions (pixbuf, result);
return result;
}
-
- //
- // FIXME this is actually not public api and we should do a verison check,
- // but frankly I'm irritated that it isn't public so I don't much care.
- //
- [DllImport("libgdk_pixbuf-2.0-0.dll")]
- static extern bool gdk_pixbuf_set_option(IntPtr raw, string key, string value);
-
- public static bool SetOption(Gdk.Pixbuf pixbuf, string key, string value)
- {
-
- if (value != null)
- return gdk_pixbuf_set_option(pixbuf.Handle, key, value);
- else
- return false;
- }
-
- public static void CopyThumbnailOptions (Gdk.Pixbuf src, Gdk.Pixbuf dest)
- {
- if (src != null && dest != null) {
- PixbufUtils.SetOption (dest, "tEXt::Thumb::URI", src.GetOption ("tEXt::Thumb::URI"));
- PixbufUtils.SetOption (dest, "tEXt::Thumb::MTime", src.GetOption ("tEXt::Thumb::MTime"));
- }
- }
}
}
diff --git a/src/Utils/RecursiveFileEnumerator.cs b/src/Utils/RecursiveFileEnumerator.cs
new file mode 100644
index 0000000..654419b
--- /dev/null
+++ b/src/Utils/RecursiveFileEnumerator.cs
@@ -0,0 +1,103 @@
+using System;
+using System.Collections;
+using System.Collections.Generic;
+using GLib;
+
+namespace FSpot.Utils
+{
+ public class RecursiveFileEnumerator : IEnumerable<File>
+ {
+ string root;
+
+ public bool Recurse { get; set; }
+ public bool CatchErrors { get; set; }
+ public bool IgnoreSymlinks { get; set; }
+
+ public RecursiveFileEnumerator (string root)
+ {
+ this.root = root;
+ this.Recurse = true;
+ this.CatchErrors = false;
+ this.IgnoreSymlinks = false;
+ }
+
+ IEnumerable<File> ScanForFiles (File root)
+ {
+ FileInfo root_info = null;
+ try {
+ root_info = root.QueryInfo ("standard::name,standard::type,standard::is-symlink", FileQueryInfoFlags.None, null);
+ } catch (GException e) {
+ if (!CatchErrors)
+ throw e;
+ yield break;
+ }
+
+ using (root_info) {
+ if (root_info.IsSymlink && IgnoreSymlinks) {
+ yield break;
+ } else if (root_info.FileType == FileType.Regular) {
+ yield return root;
+ } else if (root_info.FileType == FileType.Directory) {
+ foreach (var child in ScanDirectoryForFiles (root)) {
+ yield return child;
+ }
+ }
+ }
+ }
+
+ IEnumerable<File> ScanDirectoryForFiles (File root_dir)
+ {
+ FileEnumerator enumerator = null;
+ try {
+ enumerator = root_dir.EnumerateChildren ("standard::name,standard::type,standard::is-symlink", FileQueryInfoFlags.None, null);
+ } catch (GException e) {
+ if (!CatchErrors)
+ throw e;
+ yield break;
+ }
+
+ while (true) {
+ FileInfo info = null;
+ try {
+ info = enumerator.NextFile ();
+ } catch (GException e) {
+ if (!CatchErrors)
+ throw e;
+ continue;
+ }
+
+ if (info == null)
+ break;
+
+ File file = root_dir.GetChild (info.Name);
+
+ // The code below looks like a duplication of ScanForFiles
+ // (which could be invoked here instead), but doing so would
+ // lead to a double type query on files (using QueryInfo).
+ if (info.IsSymlink && IgnoreSymlinks) {
+ continue;
+ } else if (info.FileType == FileType.Regular) {
+ yield return file;
+ } else if (info.FileType == FileType.Directory && Recurse) {
+ foreach (var child in ScanDirectoryForFiles (file)) {
+ yield return child;
+ }
+ }
+ info.Dispose ();
+ }
+
+ enumerator.Close (null);
+ }
+
+ public IEnumerator<File> GetEnumerator ()
+ {
+ var file = FileFactory.NewForUri (root);
+ return ScanForFiles (file).GetEnumerator ();
+ }
+
+ IEnumerator IEnumerable.GetEnumerator ()
+ {
+ return GetEnumerator ();
+ }
+ }
+}
diff --git a/src/Utils/SafeUri.cs b/src/Utils/SafeUri.cs
new file mode 100644
index 0000000..880147f
--- /dev/null
+++ b/src/Utils/SafeUri.cs
@@ -0,0 +1,208 @@
+/***************************************************************************
+ * SafeUri.cs
+ *
+ * Copyright (C) 2006 Novell, Inc.
+ * Written by Aaron Bockover <aaron at abock.org>
+ ****************************************************************************/
+
+/* THIS FILE IS LICENSED UNDER THE MIT LICENSE AS OUTLINED IMMEDIATELY BELOW:
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a
+ * copy of this software and associated documentation files (the "Software"),
+ * to deal in the Software without restriction, including without limitation
+ * the rights to use, copy, modify, merge, publish, distribute, sublicense,
+ * and/or sell copies of the Software, and to permit persons to whom the
+ * Software is furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice shall be included in
+ * all copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+ * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
+ * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
+ * DEALINGS IN THE SOFTWARE.
+ */
+
+using System;
+using System.Runtime.InteropServices;
+
+namespace Hyena
+{
+ public class SafeUri
+ {
+ private enum LocalPathCheck {
+ NotPerformed,
+ Yes,
+ No
+ }
+
+ private static int MAX_SCHEME_LENGTH = 6;
+
+ private string uri;
+ private string local_path;
+ private string scheme;
+ private LocalPathCheck local_path_check = LocalPathCheck.NotPerformed;
+
+ public SafeUri (string uri)
+ {
+ int scheme_delimit_index = uri.IndexOf ("://");
+ if (scheme_delimit_index > 0 && scheme_delimit_index <= MAX_SCHEME_LENGTH) {
+ this.uri = uri;
+ } else {
+ this.uri = FilenameToUri (uri);
+ }
+ }
+
+ public SafeUri (string uri, bool isUri)
+ {
+ if (isUri) {
+ this.uri = uri;
+ } else {
+ this.uri = FilenameToUri (uri);
+ }
+ }
+
+ public SafeUri (Uri uri)
+ {
+ this.uri = uri.AbsoluteUri;
+ }
+
+ public static string FilenameToUri (string localPath)
+ {
+ // TODO: replace with managed conversion to avoid marshalling
+ IntPtr path_ptr = GLib.Marshaller.StringToPtrGStrdup (localPath);
+
+#if WIN32
+ IntPtr uri_ptr = g_filename_to_uri_utf8 (path_ptr, IntPtr.Zero, IntPtr.Zero);
+#else
+ IntPtr uri_ptr = g_filename_to_uri (path_ptr, IntPtr.Zero, IntPtr.Zero);
+#endif
+ GLib.Marshaller.Free (path_ptr);
+
+ if (uri_ptr == IntPtr.Zero) {
+ throw new ApplicationException ("Filename path must be absolute");
+ }
+
+ string uri = GLib.Marshaller.Utf8PtrToString (uri_ptr);
+ GLib.Marshaller.Free (uri_ptr);
+
+ return uri;
+ }
+
+ public static string UriToFilename (string uri)
+ {
+ // TODO: replace with managed conversion to avoid marshalling
+ IntPtr uri_ptr = GLib.Marshaller.StringToPtrGStrdup (uri);
+#if WIN32
+ IntPtr path_ptr = g_filename_from_uri_utf8 (uri_ptr, IntPtr.Zero, IntPtr.Zero);
+#else
+ IntPtr path_ptr = g_filename_from_uri (uri_ptr, IntPtr.Zero, IntPtr.Zero);
+#endif
+
+ GLib.Marshaller.Free (uri_ptr);
+
+ if (path_ptr == IntPtr.Zero) {
+ throw new ApplicationException ("URI could not be converted to local file location");
+ }
+
+ string path = GLib.Marshaller.Utf8PtrToString (path_ptr);
+ GLib.Marshaller.Free (path_ptr);
+
+ return path;
+ }
+
+ public static string UriToFilename (SafeUri uri)
+ {
+ return UriToFilename (uri.AbsoluteUri);
+ }
+
+ public override string ToString ()
+ {
+ return AbsoluteUri;
+ }
+
+ public static implicit operator string(SafeUri s)
+ {
+ return s.ToString ();
+ }
+
+ public override bool Equals (object o)
+ {
+ if (!(o is SafeUri)) {
+ return false;
+ }
+
+ return (o as SafeUri).AbsoluteUri == AbsoluteUri;
+ }
+
+ public override int GetHashCode ()
+ {
+ return AbsoluteUri.GetHashCode ();
+ }
+
+ public string AbsoluteUri {
+ get { return uri; }
+ }
+
+ public bool IsLocalPath {
+ get {
+ if (local_path_check == LocalPathCheck.NotPerformed) {
+ if (IsFile) {
+ local_path_check = LocalPathCheck.Yes;
+ return true;
+ } else {
+ local_path_check = LocalPathCheck.No;
+ return false;
+ }
+ }
+
+ return local_path_check == LocalPathCheck.Yes;
+ }
+ }
+
+ public string AbsolutePath {
+ get {
+ if (local_path == null && IsLocalPath) {
+ local_path = UriToFilename (uri);
+ }
+
+ return local_path;
+ }
+ }
+
+ public string LocalPath {
+ get { return AbsolutePath; }
+ }
+
+ public string Scheme {
+ get {
+ if (scheme == null) {
+ scheme = uri.Substring (0, uri.IndexOf ("://"));
+ }
+
+ return scheme;
+ }
+ }
+
+ public bool IsFile {
+ get { return Scheme == System.Uri.UriSchemeFile; }
+ }
+
+#if WIN32
+ [DllImport ("libglib-2.0-0.dll")]
+ private static extern IntPtr g_filename_to_uri_utf8 (IntPtr filename, IntPtr hostname, IntPtr error);
+
+ [DllImport ("libglib-2.0-0.dll")]
+ private static extern IntPtr g_filename_from_uri_utf8 (IntPtr uri, IntPtr hostname, IntPtr error);
+#else
+ [DllImport ("libglib-2.0-0.dll")]
+ private static extern IntPtr g_filename_to_uri (IntPtr filename, IntPtr hostname, IntPtr error);
+
+ [DllImport ("libglib-2.0-0.dll")]
+ private static extern IntPtr g_filename_from_uri (IntPtr uri, IntPtr hostname, IntPtr error);
+#endif
+ }
+}
diff --git a/src/Utils/SafeUriExtensions.cs b/src/Utils/SafeUriExtensions.cs
new file mode 100644
index 0000000..bdc27cb
--- /dev/null
+++ b/src/Utils/SafeUriExtensions.cs
@@ -0,0 +1,39 @@
+using Hyena;
+using System;
+
+namespace FSpot
+{
+ public static class SafeUriExtensions
+ {
+ public static SafeUri Append (this SafeUri base_uri, string filename)
+ {
+ return new SafeUri (base_uri.AbsoluteUri + (base_uri.AbsoluteUri.EndsWith ("/") ? "" : "/") + filename, true);
+ }
+
+ public static SafeUri GetBaseUri (this SafeUri uri)
+ {
+ var abs_uri = uri.AbsoluteUri;
+ return new SafeUri (abs_uri.Substring (0, abs_uri.LastIndexOf ('/')), true);
+ }
+
+ public static string GetFilename (this SafeUri uri)
+ {
+ var abs_uri = uri.AbsoluteUri;
+ return abs_uri.Substring (abs_uri.LastIndexOf ('/') + 1);
+ }
+
+ public static string GetExtension (this SafeUri uri)
+ {
+ var abs_uri = uri.AbsoluteUri;
+ var index = abs_uri.LastIndexOf ('.');
+ return index == -1 ? String.Empty : abs_uri.Substring (index);
+ }
+
+ public static string GetFilenameWithoutExtension (this SafeUri uri)
+ {
+ var name = uri.GetFilename ();
+ var index = name.LastIndexOf ('.');
+ return index > -1 ? name.Substring (0, index) : name;
+ }
+ }
+}
diff --git a/src/Utils/Tests/SafeUriTests.cs b/src/Utils/Tests/SafeUriTests.cs
new file mode 100644
index 0000000..08c80b9
--- /dev/null
+++ b/src/Utils/Tests/SafeUriTests.cs
@@ -0,0 +1,77 @@
+#if ENABLE_TESTS
+using NUnit.Framework;
+using System;
+using Hyena;
+using FSpot;
+
+namespace FSpot.Utils.Tests
+{
+ [TestFixture]
+ public class SafeUriTests
+ {
+ static SafeUriTest[] tests = new SafeUriTest[] {
+ new SafeUriTest () {
+ Uri = "https://bugzilla.gnome.org/process_bug.cgi",
+ IsURI = true,
+ AbsoluteUri = "https://bugzilla.gnome.org/process_bug.cgi",
+ Extension = ".cgi",
+ BaseUri = "https://bugzilla.gnome.org",
+ Filename = "process_bug.cgi",
+ FilenameWithoutExtension = "process_bug"
+
+ },
+ new SafeUriTest () {
+ Uri = "file:///home/ruben/Desktop/F-Spot Vision.pdf",
+ IsURI = true,
+ AbsoluteUri = "file:///home/ruben/Desktop/F-Spot Vision.pdf",
+ Extension = ".pdf",
+ BaseUri = "file:///home/ruben/Desktop",
+ Filename = "F-Spot Vision.pdf",
+ FilenameWithoutExtension = "F-Spot Vision"
+ },
+ new SafeUriTest () {
+ Uri = "/home/ruben/Projects/f-spot/",
+ IsURI = false,
+ AbsoluteUri = "file:///home/ruben/Projects/f-spot/",
+ Extension = "",
+ BaseUri = "file:///home/ruben/Projects/f-spot",
+ Filename = "",
+ FilenameWithoutExtension = ""
+ },
+ new SafeUriTest () {
+ Uri = "/home/ruben/Projects/f-spot/README",
+ IsURI = false,
+ AbsoluteUri = "file:///home/ruben/Projects/f-spot/README",
+ Extension = "",
+ BaseUri = "file:///home/ruben/Projects/f-spot",
+ Filename = "README",
+ FilenameWithoutExtension = "README"
+ }
+ };
+
+ [Test]
+ public void TestFileUris ()
+ {
+ foreach (var test in tests) {
+ var suri = new SafeUri (test.Uri, test.IsURI);
+ Assert.AreEqual (suri.AbsoluteUri, test.AbsoluteUri, String.Format("AbsoluteUri for {0}", test.Uri));
+ Assert.AreEqual (suri.GetExtension (), test.Extension, String.Format("Extension for {0}", test.Uri));
+ Assert.AreEqual (suri.GetBaseUri ().ToString (), test.BaseUri, String.Format("BaseUri for {0}", test.Uri));
+ Assert.AreEqual (suri.GetFilename (), test.Filename, String.Format("Filename for {0}", test.Uri));
+ Assert.AreEqual (suri.GetFilenameWithoutExtension (), test.FilenameWithoutExtension, String.Format("FilenameWithoutExtension for {0}", test.Uri));
+ }
+ }
+ }
+
+ internal class SafeUriTest
+ {
+ public string Uri { get; set; }
+ public bool IsURI { get; set; }
+ public string AbsoluteUri { get; set; }
+ public string Extension { get; set; }
+ public string BaseUri { get; set; }
+ public string Filename { get; set; }
+ public string FilenameWithoutExtension { get; set; }
+ }
+}
+#endif
diff --git a/src/Utils/Tests/XdgThumbnailSpecTests.cs b/src/Utils/Tests/XdgThumbnailSpecTests.cs
new file mode 100644
index 0000000..8e97064
--- /dev/null
+++ b/src/Utils/Tests/XdgThumbnailSpecTests.cs
@@ -0,0 +1,30 @@
+#if ENABLE_TESTS
+using NUnit.Framework;
+using System;
+using Hyena;
+using FSpot;
+
+namespace FSpot.Utils.Tests
+{
+ [TestFixture]
+ public class XdgThumbnailSpecTests
+ {
+ [SetUp]
+ public void Initialize () {
+ GLib.GType.Init ();
+ }
+
+ [Test]
+ public void TestMissingFile ()
+ {
+ XdgThumbnailSpec.DefaultLoader = (u) => {
+ throw new Exception ("not found!");
+ };
+
+ var uri = new SafeUri ("file:///invalid");
+ var pixbuf = XdgThumbnailSpec.LoadThumbnail (uri, ThumbnailSize.Large);
+ Assert.IsNull (pixbuf);
+ }
+ }
+}
+#endif
diff --git a/src/Utils/Unix.cs b/src/Utils/Unix.cs
index 0ba09ce..099e510 100644
--- a/src/Utils/Unix.cs
+++ b/src/Utils/Unix.cs
@@ -1,5 +1,6 @@
using System;
using System.Runtime.InteropServices;
+using Hyena;
namespace FSpot.Utils {
public static class Unix {
@@ -54,7 +55,7 @@ namespace FSpot.Utils {
public static void Touch (string filename)
{
if (NativeMethods.UTime (filename, IntPtr.Zero) != 0)
- Log.Debug ("touch on {0} failed", filename);
+ Log.DebugFormat ("touch on {0} failed", filename);
}
}
}
diff --git a/src/Utils/UriUtils.cs b/src/Utils/UriUtils.cs
index 3c14a52..7dfe86c 100644
--- a/src/Utils/UriUtils.cs
+++ b/src/Utils/UriUtils.cs
@@ -15,37 +15,6 @@ namespace FSpot.Utils
{
public static class UriUtils
{
- public static string UriToStringEscaped (Uri uri)
- {
- return EscapeString (uri.ToString (), false, true, false);
- }
-
- public static string PathToFileUriEscaped (string path)
- {
- return UriToStringEscaped (PathToFileUri (path));
- }
-
- public static Uri PathToFileUri (string path)
- {
- path = Path.GetFullPath (path);
-
- StringBuilder builder = new StringBuilder ();
- builder.Append (Uri.UriSchemeFile);
- builder.Append (Uri.SchemeDelimiter);
-
- int i;
- while ((i = path.IndexOfAny (CharsToQuote)) != -1) {
- if (i > 0)
- builder.Append (path.Substring (0, i));
- builder.Append (Uri.HexEscape (path [i]));
- path = path.Substring (i+1);
- }
- builder.Append (path);
-
- return new Uri (builder.ToString ());
- }
-
- static char[] CharsToQuote = { ';', '?', ':', '@', '&', '=', '$', ',', '#', '%' };
// NOTE: this was copied from mono's System.Uri where it is internal.
public static string EscapeString (string str, bool escapeReserved, bool escapeHex, bool escapeBrackets)
{
diff --git a/src/Utils/XdgThumbnailSpec.cs b/src/Utils/XdgThumbnailSpec.cs
new file mode 100644
index 0000000..b31a385
--- /dev/null
+++ b/src/Utils/XdgThumbnailSpec.cs
@@ -0,0 +1,177 @@
+using Gdk;
+using System;
+using System.Runtime.InteropServices;
+using Hyena;
+
+namespace FSpot.Utils
+{
+ public enum ThumbnailSize
+ {
+ Normal,
+ Large
+ }
+
+ public static class XdgThumbnailSpec
+ {
+#region Public API
+ public delegate Pixbuf PixbufLoader (SafeUri uri);
+ public static PixbufLoader DefaultLoader { get; set; }
+
+ public static Pixbuf LoadThumbnail (SafeUri uri, ThumbnailSize size)
+ {
+ return LoadThumbnail (uri, size, DefaultLoader);
+ }
+
+ public static Pixbuf LoadThumbnail (SafeUri uri, ThumbnailSize size, PixbufLoader loader)
+ {
+ var thumb_uri = ThumbUri (uri, size);
+ var pixbuf = LoadFromUri (thumb_uri);
+ if (!IsValid (uri, pixbuf)) {
+ Log.DebugFormat ("Invalid thumbnail, reloading: {0}", uri);
+ if (pixbuf != null)
+ pixbuf.Dispose ();
+
+ if (loader == null)
+ return null;
+
+ pixbuf = CreateFrom (uri, thumb_uri, size, loader);
+ }
+ return pixbuf;
+ }
+
+ public static void RemoveThumbnail (SafeUri uri)
+ {
+ var normal_uri = ThumbUri (uri, ThumbnailSize.Normal);
+ var large_uri = ThumbUri (uri, ThumbnailSize.Large);
+
+ var file = GLib.FileFactory.NewForUri (normal_uri);
+ if (file.Exists)
+ file.Delete (null);
+
+ file = GLib.FileFactory.NewForUri (large_uri);
+ if (file.Exists)
+ file.Delete (null);
+ }
+#endregion
+
+#region Private helpers
+ const string ThumbMTimeOpt = "tEXt::Thumb::MTime";
+ const string ThumbUriOpt = "tEXt::Thumb::URI";
+
+ static SafeUri home_dir = new SafeUri (Environment.GetFolderPath (Environment.SpecialFolder.Personal));
+
+ private static Pixbuf CreateFrom (SafeUri uri, SafeUri thumb_uri, ThumbnailSize size, PixbufLoader loader)
+ {
+ var pixels = size == ThumbnailSize.Normal ? 128 : 256;
+ Pixbuf pixbuf;
+ try {
+ pixbuf = loader (uri);
+ } catch (Exception e) {
+ Log.DebugFormat ("Failed loading image for thumbnailing: {0}", uri);
+ Log.DebugException (e);
+ return null;
+ }
+ double scale_x = (double) pixbuf.Width / pixels;
+ double scale_y = (double) pixbuf.Height / pixels;
+ double scale = Math.Max (1.0, Math.Max (scale_x, scale_y));
+ int target_x = (int) (pixbuf.Width / scale);
+ int target_y = (int) (pixbuf.Height / scale);
+ var thumb_pixbuf = pixbuf.ScaleSimple (target_x, target_y, InterpType.Nearest);
+ pixbuf.Dispose ();
+
+ var file = GLib.FileFactory.NewForUri (uri);
+ var info = file.QueryInfo ("time::modified", GLib.FileQueryInfoFlags.None, null);
+ var mtime = info.GetAttributeULong ("time::modified").ToString ();
+
+ thumb_pixbuf.Save (thumb_uri.LocalPath, "png", uri, mtime);
+
+ return thumb_pixbuf;
+ }
+
+ private static SafeUri ThumbUri (SafeUri uri, ThumbnailSize size)
+ {
+ var hash = CryptoUtil.Md5Encode (uri);
+ return home_dir.Append (".thumbnails")
+ .Append (size == ThumbnailSize.Normal ? "normal" : "large")
+ .Append (hash + ".png");
+ }
+
+ private static Pixbuf LoadFromUri (SafeUri uri)
+ {
+ var file = GLib.FileFactory.NewForUri (uri);
+ if (!file.Exists)
+ return null;
+ Pixbuf pixbuf;
+ using (var stream = new GLib.GioStream (file.Read (null))) {
+ try {
+ pixbuf = new Pixbuf (stream);
+ } catch (Exception e) {
+ file.Delete ();
+ Log.DebugFormat ("Failed thumbnail: {0}", uri);
+ Log.DebugException (e);
+ return null;
+ }
+ }
+ return pixbuf;
+ }
+
+ private static bool IsValid (SafeUri uri, Pixbuf pixbuf)
+ {
+ if (pixbuf == null) {
+ return false;
+ }
+
+ if (pixbuf.GetOption (ThumbUriOpt) != uri.ToString ()) {
+ return false;
+ }
+
+ var file = GLib.FileFactory.NewForUri (uri);
+ if (!file.Exists)
+ return false;
+
+ var info = file.QueryInfo ("time::modified", GLib.FileQueryInfoFlags.None, null);
+
+ if (pixbuf.GetOption (ThumbMTimeOpt) != info.GetAttributeULong ("time::modified").ToString ()) {
+ return false;
+ }
+
+ return true;
+ }
+#endregion
+
+
+#region Gdk hackery
+
+ // This hack below is needed because there is no wrapped version of
+ // Save which allows specifying the variable arguments (it's not
+ // possible with p/invoke). It embeds the thumb uri and mtime in the
+ // saved file.
+
+ [DllImport("libgdk_pixbuf-2.0-0.dll")]
+ static extern bool gdk_pixbuf_save(IntPtr raw, IntPtr filename, IntPtr type, out IntPtr error,
+ IntPtr optlabel1, IntPtr optvalue1, IntPtr optlabel2, IntPtr optvalue2, IntPtr dummy);
+
+ static bool Save (this Pixbuf pixbuf, string filename, string type, string uri_opt, string mtime_opt)
+ {
+ IntPtr error = IntPtr.Zero;
+ IntPtr nfilename = GLib.Marshaller.StringToPtrGStrdup (filename);
+ IntPtr ntype = GLib.Marshaller.StringToPtrGStrdup (type);
+ IntPtr optlabel1 = GLib.Marshaller.StringToPtrGStrdup (ThumbUriOpt);
+ IntPtr optvalue1 = GLib.Marshaller.StringToPtrGStrdup (uri_opt);
+ IntPtr optlabel2 = GLib.Marshaller.StringToPtrGStrdup (ThumbMTimeOpt);
+ IntPtr optvalue2 = GLib.Marshaller.StringToPtrGStrdup (mtime_opt);
+ bool ret = gdk_pixbuf_save(pixbuf.Handle, nfilename, ntype, out error, optlabel1, optvalue1, optlabel2, optvalue2, IntPtr.Zero);
+ GLib.Marshaller.Free (nfilename);
+ GLib.Marshaller.Free (ntype);
+ GLib.Marshaller.Free (optlabel1);
+ GLib.Marshaller.Free (optvalue1);
+ GLib.Marshaller.Free (optlabel2);
+ GLib.Marshaller.Free (optvalue2);
+ if (error != IntPtr.Zero) throw new GLib.GException (error);
+ return ret;
+ }
+
+#endregion
+
+ }
+}
diff --git a/src/Vector.cs b/src/Vector.cs
index 7531315..565eee6 100644
--- a/src/Vector.cs
+++ b/src/Vector.cs
@@ -48,11 +48,6 @@ namespace FSpot {
return v1.X * v2.X + v1.Y * v2.Y;
}
- double Dot (Vector v)
- {
- return Dot (this, v);
- }
-
double Length {
get {
return Math.Sqrt (X * X + Y * Y);
diff --git a/src/Widgets/CompositeUtils.cs b/src/Widgets/CompositeUtils.cs
index ed471df..b3740f7 100644
--- a/src/Widgets/CompositeUtils.cs
+++ b/src/Widgets/CompositeUtils.cs
@@ -3,6 +3,7 @@ using System.Runtime.InteropServices;
using Gdk;
using Gtk;
using FSpot.Utils;
+using Hyena;
namespace FSpot.Widgets {
public class CompositeUtils {
@@ -14,9 +15,6 @@ namespace FSpot.Widgets {
IntPtr property);
[DllImport("libgdk-2.0-0.dll")]
- static extern IntPtr gdk_x11_get_xatom_by_name_for_display (IntPtr display, string name);
-
- [DllImport("libgdk-2.0-0.dll")]
static extern IntPtr gdk_screen_get_rgba_colormap (IntPtr screen);
[DllImport("libgdk-2.0-0.dll")]
@@ -41,7 +39,7 @@ namespace FSpot.Widgets {
Gdk.Visual visual = Gdk.Visual.GetBestWithDepth (32);
if (visual != null) {
Gdk.Colormap cmap = new Gdk.Colormap (visual, false);
- System.Console.WriteLine ("fallback");
+ Log.Debug ("fallback");
return cmap;
}
}
@@ -102,7 +100,7 @@ namespace FSpot.Widgets {
try {
composited = gdk_screen_is_composited (screen.Handle);
} catch (EntryPointNotFoundException) {
- System.Console.WriteLine ("query composite manager locally");
+ Log.Debug ("query composite manager locally");
Atom atom = Atom.Intern (String.Format ("_NET_WM_CM_S{0}", screen.Number), false);
composited = Gdk.Selection.OwnerGetForDisplay (screen.Display, atom) != null;
}
@@ -131,7 +129,7 @@ namespace FSpot.Widgets {
public static void RedirectDrawable (Drawable d)
{
uint xid = GdkUtils.GetXid (d);
- Console.WriteLine ("xid = {0} d.handle = {1}, d.Display.Handle = {2}", xid, d.Handle, d.Display.Handle);
+ Log.DebugFormat ("xid = {0} d.handle = {1}, d.Display.Handle = {2}", xid, d.Handle, d.Display.Handle);
XCompositeRedirectWindow (GdkUtils.GetXDisplay (d.Display), GdkUtils.GetXid (d), CompositeRedirect.Manual);
}
diff --git a/src/Widgets/EditorPage.cs b/src/Widgets/EditorPage.cs
index bb4664a..4db5672 100644
--- a/src/Widgets/EditorPage.cs
+++ b/src/Widgets/EditorPage.cs
@@ -20,6 +20,7 @@ using Mono.Unix;
using System;
using System.Collections.Generic;
+using Hyena;
namespace FSpot.Widgets {
public class EditorPage : SidebarPage {
@@ -87,7 +88,7 @@ namespace FSpot.Widgets {
private ProgressDialog progress;
private void OnProcessingStarted (string name, int count) {
- progress = new ProgressDialog (name, ProgressDialog.CancelButtonType.None, count, MainWindow.Toplevel.Window);
+ progress = new ProgressDialog (name, ProgressDialog.CancelButtonType.None, count, App.Instance.Organizer.Window);
}
private void OnProcessingStep (int done) {
@@ -172,7 +173,7 @@ namespace FSpot.Widgets {
private bool SetupEditor (Editor editor) {
EditorState state = editor.CreateState ();
- PhotoImageView photo_view = MainWindow.Toplevel.PhotoView.View;
+ PhotoImageView photo_view = App.Instance.Organizer.PhotoView.View;
if (Page.InPhotoView && photo_view != null) {
state.Selection = photo_view.Selection;
@@ -197,7 +198,7 @@ namespace FSpot.Widgets {
string msg = Catalog.GetString ("No selection available");
string desc = Catalog.GetString ("This tool requires an active selection. Please select a region of the photo and try the operation again");
- HigMessageDialog md = new HigMessageDialog (MainWindow.Toplevel.Window,
+ HigMessageDialog md = new HigMessageDialog (App.Instance.Organizer.Window,
DialogFlags.DestroyWithParent,
Gtk.MessageType.Error, ButtonsType.Ok,
msg,
@@ -218,7 +219,7 @@ namespace FSpot.Widgets {
string desc = String.Format (Catalog.GetString ("Received exception \"{0}\". Note that you have to develop RAW files into JPEG before you can edit them."),
e.Message);
- HigMessageDialog md = new HigMessageDialog (MainWindow.Toplevel.Window,
+ HigMessageDialog md = new HigMessageDialog (App.Instance.Organizer.Window,
DialogFlags.DestroyWithParent,
Gtk.MessageType.Error, ButtonsType.Ok,
msg,
diff --git a/src/Widgets/FSpot.Widgets.dll.config b/src/Widgets/FSpot.Widgets.dll.config
new file mode 100644
index 0000000..a1b86da
--- /dev/null
+++ b/src/Widgets/FSpot.Widgets.dll.config
@@ -0,0 +1,5 @@
+<configuration>
+ <dllmap dll="libgobject-2.0-0.dll" target="libgobject-2.0.so.0"/>
+ <dllmap dll="libfspot" target="/home/ruben/Build/lib64/f-spot/libfspot.so.0"/>
+ <dllmap dll="libfspotjpeg" target="/home/ruben/Build/lib64/f-spot/libfspotjpg.so.0"/>
+</configuration>
diff --git a/src/FSpot.Widgets.dll.config.in b/src/Widgets/FSpot.Widgets.dll.config.in
similarity index 100%
rename from src/FSpot.Widgets.dll.config.in
rename to src/Widgets/FSpot.Widgets.dll.config.in
diff --git a/src/Widgets/Filmstrip.cs b/src/Widgets/Filmstrip.cs
index 074c399..feba909 100644
--- a/src/Widgets/Filmstrip.cs
+++ b/src/Widgets/Filmstrip.cs
@@ -20,6 +20,7 @@ using Gdk;
using FSpot.Utils;
using FSpot.Platform;
using FSpot.Bling;
+using Hyena;
namespace FSpot.Widgets
{
@@ -291,7 +292,7 @@ namespace FSpot.Widgets
}
FSpot.BrowsablePointer selection;
- DisposableCache<Uri, Pixbuf> thumb_cache;
+ DisposableCache<SafeUri, Pixbuf> thumb_cache;
public Filmstrip (FSpot.BrowsablePointer selection) : this (selection, true)
{
@@ -305,8 +306,8 @@ namespace FSpot.Widgets
this.selection.Collection.Changed += HandleCollectionChanged;
this.selection.Collection.ItemsChanged += HandleCollectionItemsChanged;
this.squared_thumbs = squared_thumbs;
- thumb_cache = new DisposableCache<Uri, Pixbuf> (30);
- ThumbnailGenerator.Default.OnPixbufLoaded += HandlePixbufLoaded;
+ thumb_cache = new DisposableCache<SafeUri, Pixbuf> (30);
+ ThumbnailLoader.Default.OnPixbufLoaded += HandlePixbufLoaded;
animation = new DoubleAnimation (0, 0, TimeSpan.FromSeconds (1.5), SetPositionCore, new CubicEase (EasingMode.EaseOut));
}
@@ -541,14 +542,14 @@ namespace FSpot.Widgets
if (!args.Changes.DataChanged)
return;
foreach (int item in args.Items)
- thumb_cache.TryRemove ((selection.Collection [item]).DefaultVersionUri);
+ thumb_cache.TryRemove ((selection.Collection [item]).DefaultVersion.Uri);
//FIXME call QueueDrawArea
QueueDraw ();
}
- void HandlePixbufLoaded (ImageLoaderThread pl, Uri uri, int order, Pixbuf p) {
- if (!thumb_cache.Contains (uri)) {
+ void HandlePixbufLoaded (ImageLoaderThread pl, ImageLoaderThread.RequestItem item) {
+ if (!thumb_cache.Contains (item.Uri)) {
return;
}
@@ -570,11 +571,11 @@ namespace FSpot.Widgets
Gtk.Menu placement_menu = new Gtk.Menu ();
GtkUtil.MakeCheckMenuItem (placement_menu,
Mono.Unix.Catalog.GetString ("_Horizontal"),
- MainWindow.Toplevel.HandleFilmstripHorizontal,
+ App.Instance.Organizer.HandleFilmstripHorizontal,
true, Orientation == Orientation.Horizontal, true);
GtkUtil.MakeCheckMenuItem (placement_menu,
Mono.Unix.Catalog.GetString ("_Vertical"),
- MainWindow.Toplevel.HandleFilmstripVertical,
+ App.Instance.Organizer.HandleFilmstripVertical,
true, Orientation == Orientation.Vertical, true);
if (args != null)
@@ -612,7 +613,7 @@ namespace FSpot.Widgets
protected virtual Pixbuf GetPixbuf (int i, bool highlighted)
{
Pixbuf current;
- Uri uri = (selection.Collection [i]).DefaultVersionUri;
+ SafeUri uri = (selection.Collection [i]).DefaultVersion.Uri;
try {
current = PixbufUtils.ShallowCopy (thumb_cache.Get (uri));
} catch (IndexOutOfRangeException) {
@@ -620,25 +621,19 @@ namespace FSpot.Widgets
}
if (current == null) {
- try {
- ThumbnailGenerator.Default.Request ((selection.Collection [i]).DefaultVersionUri, 0, 256, 256);
-
+ var pixbuf = XdgThumbnailSpec.LoadThumbnail (uri, ThumbnailSize.Large, null);
+ if (pixbuf == null) {
+ ThumbnailLoader.Default.Request (uri, ThumbnailSize.Large, 0);
+ current = FSpot.Global.IconTheme.LoadIcon ("gtk-missing-image", ThumbSize, (Gtk.IconLookupFlags)0);
+ } else {
if (SquaredThumbs) {
- using (Pixbuf p = ThumbnailFactory.LoadThumbnail (uri)) {
- current = PixbufUtils.IconFromPixbuf (p, ThumbSize);
- }
- } else
- current = ThumbnailFactory.LoadThumbnail (uri, -1, ThumbSize);
+ current = PixbufUtils.IconFromPixbuf (pixbuf, ThumbSize);
+ } else {
+ current = pixbuf.ScaleSimple (ThumbSize, ThumbSize, InterpType.Nearest);
+ }
+ pixbuf.Dispose ();
thumb_cache.Add (uri, current);
- } catch {
- try {
- current = FSpot.Global.IconTheme.LoadIcon ("gtk-missing-image", ThumbSize, (Gtk.IconLookupFlags)0);
- } catch {
- current = null;
- }
- thumb_cache.Add (uri, null);
- }
-
+ }
}
//FIXME: we might end up leaking a pixbuf here
@@ -671,7 +666,7 @@ namespace FSpot.Widgets
~Filmstrip ()
{
- Log.Debug ("Finalizer called on {0}. Should be Disposed", GetType ());
+ Log.DebugFormat ("Finalizer called on {0}. Should be Disposed", GetType ());
Dispose (false);
}
@@ -691,7 +686,7 @@ namespace FSpot.Widgets
this.selection.Changed -= HandlePointerChanged;
this.selection.Collection.Changed -= HandleCollectionChanged;
this.selection.Collection.ItemsChanged -= HandleCollectionItemsChanged;
- ThumbnailGenerator.Default.OnPixbufLoaded -= HandlePixbufLoaded;
+ ThumbnailLoader.Default.OnPixbufLoaded -= HandlePixbufLoaded;
if (background_pixbuf != null)
background_pixbuf.Dispose ();
if (background_tile != null)
diff --git a/src/Widgets/FindBar.cs b/src/Widgets/FindBar.cs
index 13a4c20..e469f2a 100644
--- a/src/Widgets/FindBar.cs
+++ b/src/Widgets/FindBar.cs
@@ -10,13 +10,14 @@
using System;
using System.Collections;
+using System.Text;
using System.Text.RegularExpressions;
using Gtk;
using Gdk;
using Mono.Unix;
using FSpot.Query;
-using FSpot.Utils;
+using Hyena;
namespace FSpot.Widgets {
public class FindBar : HighlightedBox {
@@ -25,7 +26,7 @@ namespace FSpot.Widgets {
private int open_parens = 0, close_parens = 0;
private PhotoQuery query;
private Term root_term = null;
- private HBox box;
+ private HBox box;
/*
* Properties
@@ -50,10 +51,10 @@ namespace FSpot.Widgets {
public FindBar (PhotoQuery query, TreeModel model) : base(new HBox())
{
this.query = query;
- box = Child as HBox;
+ box = Child as HBox;
box.Spacing = 6;
- box.BorderWidth = 2;
+ box.BorderWidth = 2;
box.PackStart (new Label (Catalog.GetString ("Find:")), false, false, 0);
@@ -84,7 +85,7 @@ namespace FSpot.Widgets {
private void HandleEntryTextInserted (object sender, TextInsertedArgs args)
{
- //Log.Debug ("inserting {0}, ( = {1} ) = {2}", args.Text, open_parens, close_parens);
+ //Log.DebugFormat ("inserting {0}, ( = {1} ) = {2}", args.Text, open_parens, close_parens);
//int start = args.Position - args.Length;
@@ -105,7 +106,7 @@ namespace FSpot.Widgets {
entry.TextInserted += HandleEntryTextInserted;
pos++;
}
- //Log.Debugformat ("done w/ insert, {0}, ( = {1} ) = {2}", args.Text, open_parens, close_parens);
+ //Log.DebugFormat ("done w/ insert, {0}, ( = {1} ) = {2}", args.Text, open_parens, close_parens);
last_entry_text = entry.Text;
QueueUpdate ();
@@ -114,7 +115,7 @@ namespace FSpot.Widgets {
private void HandleEntryTextDeleted (object sender, TextDeletedArgs args)
{
int length = args.EndPos - args.StartPos;
- //Log.Debug ("start {0} end {1} len {2} last {3}", args.StartPos, args.EndPos, length, last_entry_text);
+ //Log.DebugFormat ("start {0} end {1} len {2} last {3}", args.StartPos, args.EndPos, length, last_entry_text);
string txt = length < 0 ? last_entry_text : last_entry_text.Substring (args.StartPos, length);
for (int i = 0; i < txt.Length; i++) {
@@ -198,16 +199,6 @@ namespace FSpot.Widgets {
RegexOptions.IgnoreCase | RegexOptions.Compiled
);
- // Debug method used to print results to verify the regex
- private static void PrintGroup (GroupCollection groups, string name)
- {
- Group group = groups [name];
- Log.Debug ("Name: {2} (success = {1}) group: {0}", group, group.Success, name);
- foreach (Capture capture in group.Captures) {
- Log.Debug (" Have capture: {0}", capture);
- }
- }
-
// Breaking the query the user typed into something useful involves running
// it through the above regular expression recursively until it is broken down
// into literals and operators that we can use to generate SQL queries.
@@ -223,7 +214,7 @@ namespace FSpot.Widgets {
string indent = String.Format ("{0," + depth*2 + "}", " ");
- //Log.Debug (indent + "Have text: {0}", txt);
+ //Log.DebugFormat (indent + "Have text: {0}", txt);
// Match the query the user typed against our regular expression
Match match = term_regex.Match (txt);
@@ -254,7 +245,7 @@ namespace FSpot.Widgets {
}
if (match.Groups ["Terms"].Captures.Count == 1 && match.Groups["NotTerm"].Captures.Count != 1) {
- //Log.Debug (indent + "Unbreakable term: {0}", match.Groups ["Terms"].Captures [0]);
+ //Log.DebugFormat (indent + "Unbreakable term: {0}", match.Groups ["Terms"].Captures [0]);
string literal;
bool is_negated = false;
Tag tag = null;
@@ -269,7 +260,7 @@ namespace FSpot.Widgets {
is_negated = is_negated || negated;
- tag = MainWindow.Toplevel.Database.Tags.GetTagByName (literal);
+ tag = App.Instance.Database.Tags.GetTagByName (literal);
// New OR term so we can match against both tag and text search
parent = new OrTerm(parent, null);
@@ -312,7 +303,7 @@ namespace FSpot.Widgets {
subterm = subterm.Remove (0, 1);
}
- //Log.Debug (indent + "Breaking subterm apart: {0}", subterm);
+ //Log.DebugFormat (indent + "Breaking subterm apart: {0}", subterm);
if (!ConstructQuery (us, depth + 1, subterm, negated))
return false;
@@ -330,7 +321,7 @@ namespace FSpot.Widgets {
subterm = subterm.Remove (0, 1);
}
- //Log.Debug (indent + "Breaking not subterm apart: {0}", subterm);
+ //Log.DebugFormat (indent + "Breaking not subterm apart: {0}", subterm);
if (!ConstructQuery (us, depth + 1, subterm, true))
return false;
@@ -392,7 +383,7 @@ namespace FSpot.Widgets {
if (ParensValid () && ConstructQuery (null, 0, entry.Text)) {
if (RootTerm != null) {
- //Log.Debug("rootTerm = {0}", RootTerm);
+ //Log.DebugFormat("rootTerm = {0}", RootTerm);
if (!(RootTerm is AndTerm)) {
// A little hacky, here to make sure the root term is a AndTerm which will
// ensure we handle the Hidden tag properly
@@ -401,7 +392,7 @@ namespace FSpot.Widgets {
root_term = root_parent;
}
- //Log.Debug("rootTerm = {0}", RootTerm);
+ //Log.DebugFormat("rootTerm = {0}", RootTerm);
if (!(RootTerm is AndTerm)) {
// A little hacky, here to make sure the root term is a AndTerm which will
// ensure we handle the Hidden tag properly
@@ -409,8 +400,8 @@ namespace FSpot.Widgets {
RootTerm.Parent = root_parent;
root_term = root_parent;
}
- //Log.Debug ("condition = {0}", RootTerm.SqlCondition ());
- query.TagTerm = new TagConditionWrapper (RootTerm.SqlCondition ());
+ //Log.DebugFormat ("condition = {0}", RootTerm.SqlCondition ());
+ query.TagTerm = new ConditionWrapper (RootTerm.SqlCondition ());
} else {
query.TagTerm = null;
//Log.Debug ("root term is null");
@@ -505,59 +496,80 @@ namespace FSpot.Widgets {
[GLib.ConnectBefore]
private void HandleMatchSelected (object sender, MatchSelectedArgs args)
{
- // Delete what the user had entered in case their casing wasn't the same
- entry.DeleteText (entry.Position - transformed_key.Length, entry.Position);
-
string name = args.Model.GetValue (args.Iter, TextColumn) as string;
- //Log.Debug ("match selected..{0}", name);
+ //Log.DebugFormat ("match selected..{0}", name);
+
int pos = entry.Position;
+ string updated_text = completion_logic.ReplaceKey (entry.Text, name, ref pos);
completing = true;
- entry.InsertText (name, ref pos);
+ entry.Text = updated_text;
+ entry.Position = pos;
completing = false;
- entry.Position += name.Length;
-
args.RetVal = true;
- //Log.Debug.Format ("done w/ match selected");
+ //Log.Debug ("done w/ match selected");
}
- string last_key = String.Empty;
- string transformed_key = String.Empty;
+ private CompletionLogic completion_logic = new CompletionLogic ();
public bool LogicEntryCompletionMatchFunc (EntryCompletion completion, string key, TreeIter iter)
{
if (Completing)
return false;
+ key = key == null ? null : key.Normalize(NormalizationForm.FormC);
+ string name = completion.Model.GetValue (iter, completion.TextColumn) as string;
+ int pos = entry.Position - 1;
+ return completion_logic.MatchFunc (name, key, pos);
+ }
+ }
+
+ public class CompletionLogic
+ {
+ string last_key = String.Empty;
+ string transformed_key = String.Empty;
+ int start = 0;
+
+ private static string or_op = " " + Catalog.GetString ("or") + " ";
+ private static string and_op = " " + Catalog.GetString ("and") + " ";
+
+ private static int or_op_len = or_op.Length;
+ private static int and_op_len = and_op.Length;
+
+ public bool MatchFunc (string name, string key, int pos)
+ {
// If this is the fist comparison for this key, convert the key (which is the entire search string)
// into just the part that is relevant to completing this tag name.
if (key != last_key) {
last_key = key;
- int pos = entry.Position - 1;
if (key == null || key.Length == 0 || pos < 0 || pos > key.Length - 1)
transformed_key = String.Empty;
else if (key [pos] == '(' || key [pos] == ')' || key [pos] == ',')
transformed_key = String.Empty;
else {
- int start = 0;
- for (int i = entry.Position - 1; i >= 0; i--) {
- if (key [i] == ' ' || key [i] == ')' || key [i] == '(') {
- //Log.Debug ("have start break char at {0}", i);
+ start = 0;
+ for (int i = pos; i >= 0; i--) {
+ if (key [i] == ')' || key [i] == '(' ||
+ (i >= and_op_len - 1 && String.Compare (key.Substring (i - and_op_len + 1, and_op_len), and_op, true) == 0) ||
+ (i >= or_op_len - 1 && String.Compare (key.Substring (i - or_op_len + 1, or_op_len), or_op, true) == 0)) {
+ //Log.DebugFormat ("have start break char at {0}", i);
start = i + 1;
break;
}
}
int end = key.Length - 1;
- for (int j = entry.Position - 1; j < key.Length; j++) {
- if (key [j] == ' ' || key [j] == ')' || key [j] == '(') {
+ for (int j = pos; j < key.Length; j++) {
+ if (key [j] == ')' || key [j] == '(' ||
+ (key.Length >= j + and_op_len && String.Compare (key.Substring (j, and_op_len), and_op, true) == 0) ||
+ (key.Length >= j + or_op_len && String.Compare (key.Substring (j, or_op_len), or_op, true) == 0)) {
end = j - 1;
break;
}
}
- //Log.Debug ("start = {0} end = {1}", start, end);
+ //Log.DebugFormat ("start = {0} end = {1}", start, end);
int len = end - start + 1;
if (len > 0 && start < last_key.Length)
@@ -565,20 +577,40 @@ namespace FSpot.Widgets {
else
transformed_key = String.Empty;
}
- //Log.Debug ("transformed key {0} into {1}", key, transformed_key);
+ //Log.DebugFormat ("transformed key {0} into {1}", key, transformed_key);
}
if (transformed_key == String.Empty)
return false;
- string name = completion.Model.GetValue (iter, completion.TextColumn) as string;
-
// Ignore null or names that are too short
if (name == null || name.Length <= transformed_key.Length)
return false;
- //Log.Debug ("entered = {0} compared to {1}", transformed_key, name);
- return (String.Compare (transformed_key, name.Substring(0, transformed_key.Length), true) == 0);
+ //Log.DebugFormat ("entered = {0} compared to {1}", transformed_key, name);
+
+ // Try to match key and name case insensitive
+ if (String.Compare (transformed_key, name.Substring (0, transformed_key.Length), true) == 0) {
+ return true;
+ }
+
+ // Try to match with diacritics removed from name
+ string simplified_name = StringUtil.SearchKey (name.Substring (0, transformed_key.Length));
+ //Log.DebugFormat ("entered = {0} compared to {1}", transformed_key, simplified_name);
+ return (String.Compare (transformed_key, simplified_name, true) == 0);
+ }
+
+ public string ReplaceKey (string query, string name, ref int pos)
+ {
+ // do some sanity checks first
+ if (start > query.Length) {
+ Log.Error ("ReplaceKey: start > query.length");
+ return query;
+ }
+ // move caret after inserted name, even if it was not
+ // at the end of the key
+ pos = start + name.Length;
+ return query.Substring (0, start) + name + query.Substring (start + transformed_key.Length);
}
}
}
diff --git a/src/Widgets/FolderTreeModel.cs b/src/Widgets/FolderTreeModel.cs
index 17479d5..f9113b3 100644
--- a/src/Widgets/FolderTreeModel.cs
+++ b/src/Widgets/FolderTreeModel.cs
@@ -14,7 +14,7 @@ using Gtk;
using GLib;
using FSpot;
-using FSpot.Utils;
+using Hyena;
using Banshee.Database;
@@ -35,9 +35,9 @@ namespace FSpot.Widgets
public FolderTreeModel ()
- : base (typeof (string), typeof (int), typeof (Uri))
+ : base (typeof (string), typeof (int), typeof (SafeUri))
{
- database = MainWindow.Toplevel.Database;
+ database = App.Instance.Database;
database.Photos.ItemsChanged += HandlePhotoItemsChanged;
UpdateFolderTree ();
@@ -64,15 +64,15 @@ namespace FSpot.Widgets
return (int) GetValue (iter, 1);
}
- public Uri GetUriByIter (TreeIter iter)
+ public SafeUri GetUriByIter (TreeIter iter)
{
if ( ! IterIsValid (iter))
return null;
- return (Uri) GetValue (iter, 2);
+ return (SafeUri) GetValue (iter, 2);
}
- public Uri GetUriByPath (TreePath row)
+ public SafeUri GetUriByPath (TreePath row)
{
TreeIter iter;
@@ -107,21 +107,15 @@ namespace FSpot.Widgets
SqliteDataReader reader = database.Database.Query (query_string);
while (reader.Read ()) {
- Uri base_uri = new Uri (reader["base_uri"].ToString ());
-
- if ( ! base_uri.IsAbsoluteUri) {
- FSpot.Utils.Log.Error ("Uri must be absolute: {0}", base_uri.ToString ());
- continue;
- }
+ var base_uri = new SafeUri (reader["base_uri"].ToString (), true);
int count = Convert.ToInt32 (reader["count"]);
- string[] segments = base_uri.Segments;
+ string[] segments = base_uri.LocalPath.TrimEnd ('/').Split ('/');
- /*
- * since we have an absolute uri, first segement starts with "/" according
- * to the msdn doc. So we can overwrite the first segment for our needs and
- * put the scheme here.
+ /* First segment contains nothing (since we split by /), so we
+ * can overwrite the first segment for our needs and put the
+ * scheme here.
*/
segments[0] = base_uri.Scheme;
@@ -129,10 +123,6 @@ namespace FSpot.Widgets
/* find first difference of last inserted an current uri */
while (i < last_segments.Length && i < segments.Length) {
-
- /* remove suffix '/', which are appended to every directory (see msdn-doc) */
- segments[i] = segments[i].TrimEnd ('/');
-
if (segments[i] != last_segments[i])
break;
@@ -155,22 +145,20 @@ namespace FSpot.Widgets
}
while (i < segments.Length) {
- segments[i] = segments[i].TrimEnd ('/');
-
- if (IterIsValid (parent_iter))
+ if (IterIsValid (parent_iter)) {
iter =
AppendValues (parent_iter,
Uri.UnescapeDataString (segments[i]),
(segments.Length - 1 == i)? count : 0,
- new Uri ((Uri) GetValue (parent_iter, 2),
- String.Format ("{0}/", segments[i]))
+ (GetValue (parent_iter, 2) as SafeUri).Append (String.Format ("{0}/", segments[i]))
);
- else
+ } else {
iter =
AppendValues (Uri.UnescapeDataString (segments[i]),
(segments.Length - 1 == i)? count : 0,
- new Uri (base_uri, "/"));
-
+ new SafeUri (String.Format ("{0}:///", base_uri.Scheme), true));
+ }
+
parent_iter = iter;
i++;
diff --git a/src/Widgets/FolderTreeView.cs b/src/Widgets/FolderTreeView.cs
index f443574..f69553e 100644
--- a/src/Widgets/FolderTreeView.cs
+++ b/src/Widgets/FolderTreeView.cs
@@ -17,6 +17,7 @@ using GLib;
using FSpot;
using FSpot.Utils;
+using Hyena;
using Mono.Unix;
namespace FSpot.Widgets
@@ -58,7 +59,7 @@ namespace FSpot.Widgets
TreePath[] selected_rows = Selection.GetSelectedRows ();
foreach (TreePath row in selected_rows)
- list.Add (folder_tree_model.GetUriByPath (row));
+ list.Add (new SafeUri (folder_tree_model.GetUriByPath (row)));
return list;
}
@@ -69,7 +70,10 @@ namespace FSpot.Widgets
CellRendererPixbuf renderer = cell as CellRendererPixbuf;
string stock;
- File file = FileFactory.NewForUri (folder_tree_model.GetUriByIter (iter));
+ var uri = folder_tree_model.GetUriByIter (iter);
+ if (uri == null)
+ return;
+ File file = FileFactory.NewForUri (uri);
try {
FileInfo info =
file.QueryInfo ("standard::icon", FileQueryInfoFlags.None, null);
@@ -128,15 +132,6 @@ namespace FSpot.Widgets
}
}
- private string GetStock (string scheme)
- {
- /* not very usefull at the moment */
- if (scheme == Uri.UriSchemeFile)
- return "gtk-directory";
-
- return "gtk-directory";
- }
-
private static TargetEntry [] folder_tree_source_target_table =
new TargetEntry [] {
DragDropTargets.UriQueryEntry,
@@ -163,7 +158,7 @@ namespace FSpot.Widgets
protected override void OnRowActivated (Gtk.TreePath path, Gtk.TreeViewColumn column)
{
- MainWindow.Toplevel.SetFolderQuery (SelectedUris);
+ App.Instance.Organizer.SetFolderQuery (SelectedUris);
}
}
diff --git a/src/Widgets/IconView.cs b/src/Widgets/IconView.cs
index 2874e3a..928038e 100644
--- a/src/Widgets/IconView.cs
+++ b/src/Widgets/IconView.cs
@@ -19,6 +19,16 @@ using FSpot.Platform;
namespace FSpot.Widgets
{
+ public class StartDragArgs {
+ public Event Event { get; set; }
+ public uint Button { get; set; }
+
+ public StartDragArgs (uint but, Event evt) {
+ this.Button = but;
+ this.Event = evt;
+ }
+ }
+
public class IconView : Gtk.Layout {
// Public properties.
@@ -144,6 +154,9 @@ namespace FSpot.Widgets
// Size of the frame around the thumbnail.
protected int cell_border_width = 10;
+ // Size of the frame that may be selected
+ protected int cell_border_padding = 3;
+
// Border around the scrolled area.
protected const int BORDER_SIZE = 6;
@@ -163,6 +176,7 @@ namespace FSpot.Widgets
protected int cells_per_row;
protected int cell_width;
protected int cell_height;
+ protected int cell_details;
protected int displayed_rows; //for pgUp pgDn support
// The first pixel line that is currently on the screen (i.e. in the current
@@ -187,14 +201,12 @@ namespace FSpot.Widgets
return real_focus_cell;
}
}
- // Number of consecutive GDK_BUTTON_PRESS on the same cell, to
- // distinguish the GDK_2BUTTON_PRESS events that we actually care
- // about.
- private int click_count;
// Public events.
public event EventHandler<BrowsableEventArgs> DoubleClicked;
public event EventHandler ZoomChanged;
+ public delegate void StartDragHandler (object o, StartDragArgs args);
+ public event StartDragHandler StartDrag;
// Public API.
public IconView (IntPtr raw) : base (raw) {}
@@ -210,6 +222,7 @@ namespace FSpot.Widgets
ButtonReleaseEvent += new ButtonReleaseEventHandler (HandleButtonReleaseEvent);
KeyPressEvent += new KeyPressEventHandler (HandleKeyPressEvent);
ScrollEvent += new ScrollEventHandler(HandleScrollEvent);
+ MotionNotifyEvent += new MotionNotifyEventHandler (HandleSelectMotionNotify);
Destroyed += HandleDestroyed;
@@ -217,6 +230,7 @@ namespace FSpot.Widgets
(int) EventMask.KeyPressMask
| (int) EventMask.KeyReleaseMask
| (int) EventMask.PointerMotionMask
+ | (int) EventMask.PointerMotionHintMask
| (int) EventMask.ButtonPressMask
| (int) EventMask.ButtonReleaseMask);
@@ -287,6 +301,7 @@ namespace FSpot.Widgets
public class SelectionCollection : IBrowsableCollection {
IBrowsableCollection parent;
Hashtable selected_cells;
+ BitArray bit_array;
int [] selection;
IBrowsableItem [] items;
IBrowsableItem [] old;
@@ -295,6 +310,7 @@ namespace FSpot.Widgets
{
this.selected_cells = new Hashtable ();
this.parent = collection;
+ this.bit_array = new BitArray (this.parent.Count);
this.parent.Changed += HandleParentChanged;
this.parent.ItemsChanged += HandleParentItemsChanged;
}
@@ -303,6 +319,7 @@ namespace FSpot.Widgets
{
IBrowsableItem [] local = old;
selected_cells.Clear ();
+ bit_array = new BitArray (parent.Count);
ClearCached ();
if (old != null) {
@@ -355,6 +372,10 @@ namespace FSpot.Widgets
ItemsChanged (this, new BrowsableEventArgs (items, args.Changes));
}
+ public BitArray ToBitArray () {
+ return bit_array;
+ }
+
public int [] Ids {
get {
if (selection != null)
@@ -401,6 +422,7 @@ namespace FSpot.Widgets
{
int [] ids = Ids;
selected_cells.Clear ();
+ bit_array.SetAll (false);
SignalChange (ids);
}
@@ -437,7 +459,7 @@ namespace FSpot.Widgets
this.Add (num, true);
}
- private void Add (int num, bool notify)
+ public void Add (int num, bool notify)
{
if (num == -1)
return;
@@ -447,6 +469,7 @@ namespace FSpot.Widgets
IBrowsableItem item = parent [num];
selected_cells [item] = num;
+ bit_array.Set (num, true);
if (notify)
SignalChange (new int [] {num});
@@ -471,6 +494,37 @@ namespace FSpot.Widgets
SignalChange (ids);
}
+ public void Remove (int cell, bool notify)
+ {
+ IBrowsableItem item = parent [cell];
+ if (item != null)
+ this.Remove (item, notify);
+
+ }
+
+ public void Remove (IBrowsableItem item)
+ {
+ Remove (item, true);
+ }
+
+ public void Remove (int cell)
+ {
+ Remove (cell, true);
+ }
+
+ private void Remove (IBrowsableItem item, bool notify)
+ {
+ if (item == null)
+ return;
+
+ int parent_index = (int) selected_cells [item];
+ selected_cells.Remove (item);
+ bit_array.Set (parent_index, false);
+
+ if (notify)
+ SignalChange (new int [] {parent_index});
+ }
+
// Remove a range, except the start entry
public void Remove (int start, int end)
{
@@ -505,36 +559,51 @@ namespace FSpot.Widgets
return System.Array.IndexOf (Ids, parent_index);
}
- public void Remove (int cell)
+ private void ToggleCell (int cell_num, bool notify)
{
- Remove (cell, true);
+ if (Contains (cell_num))
+ Remove (cell_num, notify);
+ else
+ Add (cell_num, notify);
}
- private void Remove (int cell, bool notify)
+ public void ToggleCell (int cell_num)
{
- IBrowsableItem item = parent [cell];
- if (item != null)
- this.Remove (item, notify);
-
+ ToggleCell (cell_num, true);
}
- public void Remove (IBrowsableItem item)
+ public void SelectionInvert ()
{
- Remove (item, true);
+ int [] changed_cell = new int[parent.Count];
+ for (int i = 0; i < parent.Count; i++) {
+ ToggleCell (i, false);
+ changed_cell[i] = i;
+ }
+
+ SignalChange (changed_cell);
}
- private void Remove (IBrowsableItem item, bool notify)
+ public void SelectRect (int start_row, int end_row, int start_line, int end_line, int cells_per_row)
{
- if (item == null)
- return;
-
- int parent_index = (int) selected_cells [item];
- selected_cells.Remove (item);
+ for (int row = start_row; row < end_row; row++)
+ for (int line = start_line; line < end_line; line++) {
+ int index = line*cells_per_row + row;
+ if (index < parent.Count)
+ Add (index, false);
+ }
+ }
- if (notify)
- SignalChange (new int [] {parent_index});
+ public void ToggleRect (int start_row, int end_row, int start_line, int end_line, int cells_per_row)
+ {
+ for (int row = start_row; row < end_row; row++)
+ for (int line = start_line; line < end_line; line++) {
+ int index = line*cells_per_row + row;
+ if (index < parent.Count)
+ ToggleCell (index, false);
+ }
}
+
public event IBrowsableCollectionChangedHandler Changed;
public event IBrowsableCollectionItemsChangedHandler ItemsChanged;
@@ -547,7 +616,7 @@ namespace FSpot.Widgets
items = null;
}
- private void SignalChange (int [] ids)
+ public void SignalChange (int [] ids)
{
ClearCached ();
old = this.Items;
@@ -565,25 +634,25 @@ namespace FSpot.Widgets
public void UpdateThumbnail (int thumbnail_num)
{
FSpot.IBrowsableItem photo = collection [thumbnail_num];
- cache.Remove (photo.DefaultVersionUri);
+ cache.Remove (photo.DefaultVersion.Uri);
InvalidateCell (thumbnail_num);
}
// Cell Geometry
public int CellAtPosition (int x, int y)
{
- return CellAtPosition (x, y, true);
+ return CellAtPosition (x, y, true, false);
}
- public int CellAtPosition (int x, int y, bool crop_visible)
+ public int CellAtPosition (int x, int y, bool crop_visible, bool include_border)
{
if (collection == null)
return -1;
if (crop_visible
- && ((y < (int)Vadjustment.Value || y > (int)Vadjustment.Value + Allocation.Height)
- || (x < (int)Hadjustment.Value || x > (int)Hadjustment.Value + Allocation.Width)))
- return -1;
+ && ((y < (int)Vadjustment.Value || y > (int)Vadjustment.Value + Allocation.Height)
+ || (x < (int)Hadjustment.Value || x > (int)Hadjustment.Value + Allocation.Width)))
+ return -1;
if (x < BORDER_SIZE || x >= BORDER_SIZE + cells_per_row * cell_width)
return -1;
@@ -593,11 +662,22 @@ namespace FSpot.Widgets
int column = (int) ((x - BORDER_SIZE) / cell_width);
int row = (int) ((y - BORDER_SIZE) / cell_height);
int cell_num = column + row * cells_per_row;
-
- if (cell_num < collection.Count)
- return (int) cell_num;
- else
+ if (cell_num >= collection.Count)
return -1;
+
+ // check if the click is in the gap between unselected cells
+ if (!include_border) {
+ Gdk.Rectangle displayed = CellBounds (cell_num);
+ displayed.Inflate (-cell_border_padding, -cell_border_padding-cell_details);
+ displayed.Offset (-cell_border_padding, -cell_border_padding);
+ if (displayed.Contains (x, y))
+ return cell_num;
+ else if (selection.Contains (cell_num))
+ return cell_num;
+ else
+ return -1;
+ } else
+ return cell_num;
}
public int TopLeftVisibleCell ()
@@ -631,15 +711,6 @@ namespace FSpot.Widgets
selection.Add (0, collection.Count - 1);
}
- private void ToggleCell (int cell_num)
- {
- if (selection.Contains (cell_num))
- selection.Remove (cell_num);
- else
- selection.Add (cell_num);
- }
-
-
// Layout and drawing.
// FIXME I can't find a c# wrapper for the C PANGO_PIXELS () macro
@@ -663,24 +734,26 @@ namespace FSpot.Widgets
cell_height = ThumbnailHeight + 2 * cell_border_width;
cells_per_row = Math.Max ((int) (available_width / cell_width), 1);
cell_width += (available_width - cells_per_row * cell_width) / cells_per_row;
+ cell_details = 0;
if (DisplayTags || DisplayDates || DisplayFilenames)
- cell_height += tag_icon_vspacing;
+ cell_details += tag_icon_vspacing;
if (DisplayTags)
- cell_height += tag_icon_size;
+ cell_details += tag_icon_size;
if (DisplayDates && this.Style != null) {
Pango.FontMetrics metrics = this.PangoContext.GetMetrics (this.Style.FontDescription,
Pango.Language.FromString ("en_US"));
- cell_height += PangoPixels (metrics.Ascent + metrics.Descent);
+ cell_details += PangoPixels (metrics.Ascent + metrics.Descent);
}
if (DisplayFilenames && this.Style != null) {
Pango.FontMetrics metrics = this.PangoContext.GetMetrics (this.Style.FontDescription,
Pango.Language.FromString ("en_US"));
- cell_height += PangoPixels (metrics.Ascent + metrics.Descent);
+ cell_details += PangoPixels (metrics.Ascent + metrics.Descent);
}
+ cell_height += cell_details;
displayed_rows = (int)Math.Max (available_height / cell_height, 1);
@@ -762,6 +835,9 @@ namespace FSpot.Widgets
return expansion;
}
+ // rectangle of dragging selection
+ private Rectangle rect_select;
+
System.Collections.Hashtable date_layouts = new Hashtable ();
// FIXME Cache the GCs?
private void DrawCell (int thumbnail_num, Gdk.Rectangle area)
@@ -773,9 +849,9 @@ namespace FSpot.Widgets
FSpot.IBrowsableItem photo = collection [thumbnail_num];
- FSpot.PixbufCache.CacheEntry entry = cache.Lookup (photo.DefaultVersionUri);
+ FSpot.PixbufCache.CacheEntry entry = cache.Lookup (photo.DefaultVersion.Uri);
if (entry == null)
- cache.Request (photo.DefaultVersionUri, thumbnail_num, ThumbnailWidth, ThumbnailHeight);
+ cache.Request (photo.DefaultVersion.Uri, thumbnail_num, ThumbnailWidth, ThumbnailHeight);
else
entry.Data = thumbnail_num;
@@ -845,8 +921,6 @@ namespace FSpot.Widgets
temp_thumbnail = thumbnail.ScaleSimple (region.Width, region.Height,
InterpType.Bilinear);
}
-
- FSpot.Utils.PixbufUtils.CopyThumbnailOptions (thumbnail, temp_thumbnail);
} else
temp_thumbnail = thumbnail;
@@ -916,7 +990,8 @@ namespace FSpot.Widgets
layout.GetPixelSize (out layout_bounds.Width, out layout_bounds.Height);
- layout_bounds.Y = bounds.Y + bounds.Height - cell_border_width - layout_bounds.Height + tag_icon_vspacing;
+ layout_bounds.Y = bounds.Y + bounds.Height -
+ cell_border_width - layout_bounds.Height + tag_icon_vspacing;
layout_bounds.X = bounds.X + (bounds.Width - layout_bounds.Width) / 2;
if (DisplayTags)
@@ -938,7 +1013,7 @@ namespace FSpot.Widgets
if (DisplayFilenames) {
- string filename = System.IO.Path.GetFileName (photo.DefaultVersionUri.LocalPath);
+ string filename = System.IO.Path.GetFileName (photo.DefaultVersion.Uri.LocalPath);
Pango.Layout layout = new Pango.Layout (this.PangoContext);
layout.SetText (filename);
@@ -1036,8 +1111,8 @@ namespace FSpot.Widgets
//Preload (area, false);
for (i = 0, cell_num = start_cell_num;
- i < num_rows && cell_num < collection.Count;
- i ++) {
+ i < num_rows && cell_num < collection.Count;
+ i ++) {
int cell_x = start_cell_x;
//Log.Debug ("Drawing row {0}", start_cell_row + i);
@@ -1050,6 +1125,21 @@ namespace FSpot.Widgets
cell_num += cells_per_row;
}
+ // draw dragging selection
+ if (isRectSelection) {
+ Gdk.Rectangle inter;
+ if (area.Intersect (rect_select, out inter)) {
+ Cairo.Context cairo_g = CairoHelper.Create (BinWindow);
+ Gdk.Color col = Style.Background(StateType.Selected);
+ cairo_g.Color = new Cairo.Color (col.Red/65535.0, col.Green/65535.0, col.Blue/65535.0, 0.5);
+ cairo_g.Rectangle (inter.X, inter.Y, inter.Width, inter.Height);
+ cairo_g.Fill ();
+
+ ((IDisposable) cairo_g.Target).Dispose ();
+ ((IDisposable) cairo_g).Dispose ();
+ }
+ }
+
}
private void GetCellPosition (int cell_num, out int x, out int y)
@@ -1182,16 +1272,16 @@ namespace FSpot.Widgets
photo = collection [cell];
- entry = cache.Lookup (photo.DefaultVersionUri);
+ entry = cache.Lookup (photo.DefaultVersion.Uri);
if (entry == null)
- cache.Request (photo.DefaultVersionUri, cell, ThumbnailWidth, ThumbnailHeight);
+ cache.Request (photo.DefaultVersion.Uri, cell, ThumbnailWidth, ThumbnailHeight);
cell = back ? scell + i : scell + mid - i - 1;
photo = collection [cell];
- entry = cache.Lookup (photo.DefaultVersionUri);
+ entry = cache.Lookup (photo.DefaultVersion.Uri);
if (entry == null)
- cache.Request (photo.DefaultVersionUri, cell, ThumbnailWidth, ThumbnailHeight);
+ cache.Request (photo.DefaultVersion.Uri, cell, ThumbnailWidth, ThumbnailHeight);
}
}
@@ -1282,19 +1372,6 @@ namespace FSpot.Widgets
Gdk.Pixbuf result = entry.ShallowCopyPixbuf ();
int order = (int) entry.Data;
- if (order >= 0 && order < collection.Count) {
- System.Uri uri = collection [order].DefaultVersionUri;
-
- if (result == null && !ThumbnailFactory.ThumbnailExists (uri))
- FSpot.ThumbnailGenerator.Default.Request (uri, 0, 256, 256);
-
- if (result == null)
- return;
-
- if (!ThumbnailFactory.ThumbnailIsValid (result, uri))
- FSpot.ThumbnailGenerator.Default.Request (uri, 0, 256, 256);
- }
-
if (result == null)
return;
@@ -1415,22 +1492,205 @@ namespace FSpot.Widgets
return base.OnExposeEvent (args);
}
+
+ private bool isRectSelection = false;
+ private bool isDragDrop = false;
+
+ // initial click and scroll value
+ private int start_select_x, start_select_y, start_select_vadj, start_select_hadj;
+ // initial selection
+ private int[] start_select_selection;
+ // initial event used to detect drag&drop
+ private EventButton start_select_event;
+ // timer using when scrolling selection
+ private uint scroll_timeout = 0;
+ // initial click
+ private int start_press_x, start_press_y;
+
+ // during pointer motion, select/toggle pictures between initial x/y (param)
+ // and current x/y (get pointer)
+ private void SelectMotion ()
+ {
+ int x2, y2;
+ Gdk.ModifierType mod;
+ Display.GetPointer (out x2, out y2, out mod);
+ GetPointer (out x2, out y2);
+
+ // check new coord
+ int x1 = start_select_x;
+ if (x1 < 0)
+ x1 = 0;
+ int y1 = start_select_y;
+ if (y1 < 0)
+ y1 = 0;
+ if (y1 > Allocation.Height)
+ y1 = (int) Allocation.Height;
+ x1 += start_select_hadj;
+ y1 += start_select_vadj;
+
+ if (x2 < 0)
+ x2 = 0;
+ if (y2 < 0)
+ y2 = 0;
+ if (y2 > Allocation.Height)
+ y2 = (int) Allocation.Height;
+ x2 += (int) Hadjustment.Value;
+ y2 += (int) Vadjustment.Value;
+
+ int start_x = x1 < x2 ? x1 : x2;
+ int end_x = x1 > x2 ? x1 : x2;
+ int start_y = y1 < y2 ? y1 : y2;
+ int end_y = y1 > y2 ? y1 : y2;
+
+ // Restore initial selection
+ BitArray initial_selection = selection.ToBitArray();
+ selection.Clear (false);
+ foreach (int i in start_select_selection)
+ selection.Add (i, false);
+
+ // Select or toggle according to modifiers
+ int start_row = (start_x - BORDER_SIZE) / cell_width;
+ int start_line = (start_y - BORDER_SIZE) / cell_height;
+ int end_row = (end_x - BORDER_SIZE + cell_width - 1) / cell_width;
+ int end_line = (end_y - BORDER_SIZE + cell_height - 1) / cell_height;
+ if (start_row > cells_per_row)
+ start_row = cells_per_row;
+ if (end_row > cells_per_row)
+ end_row = cells_per_row;
+
+
+ FocusCell = start_line * cells_per_row + start_row;
+
+ if ((mod & ModifierType.ControlMask) == 0)
+ selection.SelectRect (start_row, end_row, start_line, end_line, cells_per_row);
+ else
+ selection.ToggleRect (start_row, end_row, start_line, end_line, cells_per_row);
+
+ // fire events for cells which have changed selection flag
+ BitArray new_selection = selection.ToBitArray();
+ BitArray selection_changed = initial_selection.Xor (new_selection);
+ System.Collections.Generic.List<int> changed = new System.Collections.Generic.List<int>();
+ for (int i = 0; i < selection_changed.Length; i++)
+ if (selection_changed.Get(i))
+ changed.Add (i);
+ if (selection_changed.Length != 0)
+ selection.SignalChange (changed.ToArray());
+
+ // redraw selection box
+ if (BinWindow != null) {
+ BinWindow.InvalidateRect (rect_select, true); // old selection
+ rect_select = new Rectangle (start_x, start_y, end_x - start_x, end_y - start_y);
+ BinWindow.InvalidateRect (rect_select, true); // new selection
+ BinWindow.ProcessUpdates (true);
+ }
+ }
+
+ // if scroll is required, a timeout is fired
+ // until the button is release or the pointer is
+ // in window again
+ private int deltaVscroll;
+ private bool HandleMotionTimeout()
+ {
+ int new_x, new_y;
+ ModifierType new_mod;
+ Display.GetPointer (out new_x, out new_y, out new_mod);
+ GetPointer (out new_x, out new_y);
+
+ // do scroll
+ double newVadj = Vadjustment.Value;
+ if (deltaVscroll < 130)
+ deltaVscroll += 15;
+
+ if (new_y <= 0) {
+ newVadj -= deltaVscroll;
+ if (newVadj < 0)
+ newVadj = 0;
+ } else if ((new_y > Allocation.Height) &&
+ (newVadj < Vadjustment.Upper - Allocation.Height - deltaVscroll))
+ newVadj += deltaVscroll;
+ Vadjustment.Value = newVadj;
+ Vadjustment.ChangeValue();
+
+ // do again selection after scroll
+ SelectMotion ();
+
+ // stop firing timeout when no button pressed
+ return (new_mod & (ModifierType.Button1Mask | ModifierType.Button3Mask)) != 0;
+ }
+
+ private void HandleSelectMotionNotify (object sender, MotionNotifyEventArgs args)
+ {
+ if ((args.Event.State & (ModifierType.Button1Mask | ModifierType.Button3Mask)) != 0 ) {
+ if (Gtk.Drag.CheckThreshold (this, start_press_x, start_press_y,
+ (int) args.Event.X, (int) args.Event.Y))
+ if (isRectSelection) {
+ // scroll if out of window
+ double d_x, d_y;
+ deltaVscroll = 30;
+ if (EventHelper.GetCoords (args.Event, out d_x, out d_y)) {
+ int new_y = (int) d_y;
+ if ((new_y <= 0) || (new_y >= Allocation.Height)) {
+ if (scroll_timeout == 0)
+ scroll_timeout = GLib.Timeout.Add (100, new GLib.TimeoutHandler (HandleMotionTimeout));
+ }
+ } else if (scroll_timeout != 0) {
+ GLib.Source.Remove (scroll_timeout);
+ scroll_timeout = 0;
+ }
+
+ // handle selection
+ SelectMotion ();
+ } else {
+ int cell_num = CellAtPosition (start_press_x, start_press_y, false, false);
+ if (selection.Contains (cell_num)) {
+ // on a selected cell : do drag&drop
+ isDragDrop = true;
+ if (StartDrag != null) {
+ uint but;
+ if ((args.Event.State & ModifierType.Button1Mask) != 0)
+ but = 1;
+ else
+ but = 3;
+ StartDrag (this, new StartDragArgs(but, start_select_event));
+ }
+ } else {
+ // not on a selected cell : do rectangular select
+ isRectSelection = true;
+ start_select_hadj = (int) Hadjustment.Value;
+ start_select_vadj = (int) Vadjustment.Value;
+ start_select_x = start_press_x - start_select_hadj;
+ start_select_y = start_press_y - start_select_vadj;
+
+ // ctrl : toggle selected, shift : keep selected
+ if ((args.Event.State & (ModifierType.ShiftMask | ModifierType.ControlMask)) == 0)
+ selection.Clear ();
+
+ start_select_selection = selection.Ids; // keep initial selection
+ // no rect draw at beginning
+ rect_select = new Rectangle ();
+
+ args.RetVal = false;
+ }
+ }
+ }
+ }
+
private void HandleButtonPressEvent (object obj, ButtonPressEventArgs args)
{
- int cell_num = CellAtPosition ((int) args.Event.X, (int) args.Event.Y, false);
+ int cell_num = CellAtPosition ((int) args.Event.X, (int) args.Event.Y, false, false);
args.RetVal = true;
- if (cell_num < 0) {
- args.RetVal = false;
- selection.Clear ();
- return;
- }
+ start_select_event = args.Event;
+ start_press_x = (int) args.Event.X;
+ start_press_y = (int) args.Event.Y;
+ isRectSelection = false;
+ isDragDrop = false;
switch (args.Event.Type) {
case EventType.TwoButtonPress:
if (args.Event.Button != 1 ||
- (args.Event.State & (ModifierType.ControlMask | ModifierType.ShiftMask)) != 0)
+ (args.Event.State & (ModifierType.ControlMask | ModifierType.ShiftMask)) != 0)
return;
if (DoubleClicked != null)
DoubleClicked (this, new BrowsableEventArgs (cell_num, null));
@@ -1438,29 +1698,18 @@ namespace FSpot.Widgets
case EventType.ButtonPress:
GrabFocus ();
- if ((args.Event.State & ModifierType.ControlMask) != 0) {
- ToggleCell (cell_num);
- } else if ((args.Event.State & ModifierType.ShiftMask) != 0) {
- selection.Add (FocusCell, cell_num);
- } else if (!selection.Contains (cell_num)) {
- selection.Clear ();
- selection.Add (cell_num);
- }
-
+ // on a cell : context menu if button 3
+ // cell selection is done on button release
if (args.Event.Button == 3){
ContextMenu (args, cell_num);
return;
- }
-
- if (args.Event.Button != 1)
- return;
+ } else args.RetVal = false;
- FocusCell = cell_num;
- return;
+ break;
default:
args.RetVal = false;
- return;
+ break;
}
}
@@ -1470,31 +1719,35 @@ namespace FSpot.Widgets
private void HandleButtonReleaseEvent (object sender, ButtonReleaseEventArgs args)
{
- int cell_num = CellAtPosition ((int) args.Event.X, (int) args.Event.Y);
-
- args.RetVal = true;
-
- if (cell_num < 0) {
- args.RetVal = false;
- return;
- }
-
- switch (args.Event.Type) {
- case EventType.ButtonRelease:
- if ((args.Event.State & ModifierType.ControlMask) == 0 &&
- (args.Event.State & ModifierType.ShiftMask ) == 0 &&
- (selection.Count > 1)) {
- selection.Clear ();
- selection.Add (FocusCell);
+ if (isRectSelection) {
+ // remove scrolling and rectangular selection
+ if (scroll_timeout != 0) {
+ GLib.Source.Remove (scroll_timeout);
+ scroll_timeout = 0;
}
+ SelectMotion ();
- break;
-
- default:
- args.RetVal = false;
- break;
+ isRectSelection = false;
+ if (BinWindow != null) {
+ BinWindow.InvalidateRect (rect_select, false);
+ BinWindow.ProcessUpdates (true);
+ }
+ rect_select = new Rectangle();
+ } else if (!isDragDrop) {
+ int cell_num = CellAtPosition ((int) args.Event.X, (int) args.Event.Y, false, true);
+ if (cell_num != -1) {
+ if ((args.Event.State & ModifierType.ControlMask) != 0) {
+ selection.ToggleCell (cell_num);
+ } else if ((args.Event.State & ModifierType.ShiftMask) != 0) {
+ selection.Add (FocusCell, cell_num);
+ } else {
+ selection.Clear ();
+ selection.Add (cell_num);
+ }
+ FocusCell = cell_num;
+ }
}
-
+ isDragDrop = false;
}
private void HandleKeyPressEvent (object sender, KeyPressEventArgs args)
@@ -1549,7 +1802,7 @@ namespace FSpot.Widgets
FocusCell = new Random().Next(0, collection.Count - 1);
break;
case Gdk.Key.space:
- ToggleCell (FocusCell);
+ selection.ToggleCell (FocusCell);
break;
case Gdk.Key.Return:
if (DoubleClicked != null)
diff --git a/src/Widgets/ImageDisplay.cs b/src/Widgets/ImageDisplay.cs
index 7429656..c5e4b03 100644
--- a/src/Widgets/ImageDisplay.cs
+++ b/src/Widgets/ImageDisplay.cs
@@ -16,6 +16,7 @@ using System;
using Cairo;
using FSpot;
using FSpot.Utils;
+using Hyena;
namespace FSpot.Widgets {
[Binding(Gdk.Key.Up, "Up")]
@@ -26,10 +27,8 @@ namespace FSpot.Widgets {
public class ImageDisplay : Gtk.EventBox {
ImageInfo current;
ImageInfo next;
- BrowsablePointer item;
ITransition transition;
Delay delay;
- int index = 0;
int block_size = 256;
ITransition Transition {
@@ -50,11 +49,10 @@ namespace FSpot.Widgets {
public ImageDisplay (BrowsablePointer item)
{
- this.item = item;
CanFocus = true;
- current = new ImageInfo (item.Current.DefaultVersionUri);
+ current = new ImageInfo (item.Current.DefaultVersion.Uri);
if (item.Collection.Count > item.Index + 1) {
- next = new ImageInfo (item.Collection [item.Index + 1].DefaultVersionUri);
+ next = new ImageInfo (item.Collection [item.Index + 1].DefaultVersion.Uri);
}
delay = new Delay (30, new GLib.IdleHandler (DrawFrame));
}
@@ -78,35 +76,35 @@ namespace FSpot.Widgets {
public bool Up ()
{
- Console.WriteLine ("Up");
+ Log.Debug ("Up");
Transition = new Dissolve (current, next);
return true;
}
public bool Down ()
{
- Console.WriteLine ("down");
+ Log.Debug ("down");
Transition = new Dissolve (next, current);
return true;
}
public bool Pan ()
{
- Console.WriteLine ("space");
+ Log.Debug ("space");
Transition = new Wipe (current, next);
return true;
}
public bool RevealImage ()
{
- Console.WriteLine ("r");
+ Log.Debug ("r");
Transition = new Reveal (current, next);
return true;
}
public bool PushImage ()
{
- Console.WriteLine ("p");
+ Log.Debug ("p");
Transition = new Push (current, next);
return true;
}
@@ -160,7 +158,7 @@ namespace FSpot.Widgets {
}
}
if (done) {
- System.Console.WriteLine ("frames = {0}", Transition.Frames);
+ Log.DebugFormat ("frames = {0}", Transition.Frames);
Transition = null;
}
} else {
diff --git a/src/Widgets/ImageInfo.cs b/src/Widgets/ImageInfo.cs
index 64c90cd..6ca6ccb 100644
--- a/src/Widgets/ImageInfo.cs
+++ b/src/Widgets/ImageInfo.cs
@@ -11,13 +11,14 @@ using Cairo;
using Gdk;
using Gtk;
using FSpot.Utils;
+using Hyena;
namespace FSpot.Widgets {
public class ImageInfo : IDisposable {
public Surface Surface;
public Gdk.Rectangle Bounds;
- public ImageInfo (Uri uri)
+ public ImageInfo (SafeUri uri)
{
using (ImageFile img = ImageFile.Create (uri)) {
Pixbuf pixbuf = img.Load ();
@@ -58,12 +59,12 @@ namespace FSpot.Widgets {
allocation.Height);
Context ctx = new Context (Surface);
#else
- Console.WriteLine ("source status = {0}", info.Surface.Status);
+ Log.DebugFormat ("source status = {0}", info.Surface.Status);
Surface = info.Surface.CreateSimilar (Content.Color,
allocation.Width,
allocation.Height);
- System.Console.WriteLine ("status = {1} pointer = {0}", Surface.Handle.ToString (), Surface.Status);
+ Log.DebugFormat ("status = {1} pointer = {0}", Surface.Handle.ToString (), Surface.Status);
Context ctx = new Context (Surface);
#endif
Bounds = allocation;
diff --git a/src/Widgets/ImageView.cs b/src/Widgets/ImageView.cs
index 8a9db32..4b7682c 100644
--- a/src/Widgets/ImageView.cs
+++ b/src/Widgets/ImageView.cs
@@ -21,6 +21,8 @@ namespace FSpot.Widgets
public class ImageView : Container
{
#region public API
+ protected ImageView (IntPtr raw) : base (raw) { }
+
public ImageView (Adjustment hadjustment, Adjustment vadjustment, bool can_select) : base ()
{
OnSetScrollAdjustments (hadjustment, vadjustment);
@@ -207,6 +209,13 @@ namespace FSpot.Widgets
GLib.Idle.Add (delegate {scrolled.SetPolicy (Gtk.PolicyType.Automatic, Gtk.PolicyType.Automatic); return false;});
}
+ bool panning = false;
+ public bool Panning {
+ get {
+ return panning;
+ }
+ }
+
public Point WindowCoordsToImage (Point win)
{
if (Pixbuf == null)
@@ -469,37 +478,20 @@ namespace FSpot.Widgets
HandleAdjustmentsValueChanged (this, EventArgs.Empty);
}
-// bool dragging = false;
-// int draganchor_x = 0;
-// int draganchor_y = 0;
protected override bool OnButtonPressEvent (EventButton evnt)
{
bool handled = false;
+
if (!HasFocus)
GrabFocus ();
if (PointerMode == PointerMode.None)
return false;
- if (can_select)
- handled |= OnSelectionButtonPressEvent (evnt);
+ handled = handled || OnPanButtonPressEvent (evnt);
- if (handled)
- return handled;
-
- // if (dragging)
- // return base.OnButtonPressEvent (evnt);
-
- // switch (evnt.Button) {
- // case 1:
- // dragging = true;
- // draganchor_x = (int)evnt.X;
- // draganchor_y = (int)evnt.Y;
-
- // handled = true;
- // default:
- // break;
- // }
+ if (can_select)
+ handled = handled || OnSelectionButtonPressEvent (evnt);
return handled || base.OnButtonPressEvent (evnt);
}
@@ -508,21 +500,22 @@ namespace FSpot.Widgets
{
bool handled = false;
- if (can_select)
- handled |= OnSelectionButtonReleaseEvent (evnt);
+ handled = handled || OnPanButtonReleaseEvent (evnt);
- if (handled)
- return handled;
+ if (can_select)
+ handled = handled || OnSelectionButtonReleaseEvent (evnt);
- return handled |= base.OnButtonReleaseEvent (evnt);
+ return handled || base.OnButtonReleaseEvent (evnt);
}
protected override bool OnMotionNotifyEvent (EventMotion evnt)
{
bool handled = false;
+ handled = handled || OnPanMotionNotifyEvent (evnt);
+
if (can_select)
- handled |= OnSelectionMotionNotifyEvent (evnt);
+ handled = handled || OnSelectionMotionNotifyEvent (evnt);
return handled || base.OnMotionNotifyEvent (evnt);
@@ -992,7 +985,7 @@ namespace FSpot.Widgets
void SelectionSetPointer (int x, int y)
{
if (is_moving_selection)
- GdkWindow.Cursor = new Cursor (CursorType.Fleur);
+ GdkWindow.Cursor = new Cursor (CursorType.Crosshair);
else {
switch (GetDragMode (x, y)) {
case DragMode.Move:
@@ -1031,6 +1024,7 @@ namespace FSpot.Widgets
}
+
const int SELECTION_THRESHOLD = 5;
bool OnSelectionMotionNotifyEvent (EventMotion evnt)
{
@@ -1116,5 +1110,65 @@ namespace FSpot.Widgets
width, height);
}
#endregion
+
+#region panning
+ Point pan_anchor = new Point (0, 0);
+
+ bool OnPanButtonPressEvent (EventButton evnt)
+ {
+ if (2 != evnt.Button) {
+ return false;
+ }
+
+ System.Diagnostics.Debug.Assert (!panning);
+ panning = true;
+
+ pan_anchor.X = (int) evnt.X;
+ pan_anchor.Y = (int) evnt.Y;
+
+ PanSetPointer ();
+
+ return true;
+ }
+
+ bool OnPanMotionNotifyEvent (EventMotion evnt)
+ {
+ if (!panning) {
+ return false;
+ }
+
+ int pan_x = pan_anchor.X - (int) evnt.X;
+ int pan_y = pan_anchor.Y - (int) evnt.Y;
+ ScrollBy (pan_x, pan_y);
+
+ pan_anchor.X = (int) evnt.X;
+ pan_anchor.Y = (int) evnt.Y;
+
+ PanSetPointer ();
+
+ return true;
+ }
+
+ bool OnPanButtonReleaseEvent (EventButton evnt)
+ {
+ if (2 != evnt.Button) {
+ return false;
+ }
+
+ System.Diagnostics.Debug.Assert (panning);
+ panning = false;
+
+ PanSetPointer ();
+
+ return true;
+ }
+
+ void PanSetPointer ()
+ {
+ GdkWindow.Cursor = panning
+ ? new Cursor (CursorType.Fleur)
+ : null;
+ }
+#endregion
}
}
diff --git a/src/Widgets/InfoBox.cs b/src/Widgets/InfoBox.cs
index afac668..a8084ea 100644
--- a/src/Widgets/InfoBox.cs
+++ b/src/Widgets/InfoBox.cs
@@ -23,6 +23,7 @@ using FSpot.Utils;
using GLib;
using GFile = GLib.File;
using GFileInfo = GLib.FileInfo;
+using Hyena;
// FIXME TODO: We want to use something like EClippedLabel here throughout so it handles small sizes
// gracefully using ellipsis.
@@ -144,7 +145,7 @@ namespace FSpot.Widgets
private void HandleRatingChanged (object o, EventArgs e)
{
- MainWindow.Toplevel.HandleRatingMenuSelected ((o as Widgets.Rating).Value);
+ App.Instance.Organizer.HandleRatingMenuSelected ((o as Widgets.Rating).Value);
}
private Label CreateRightAlignedLabel (string text)
@@ -275,7 +276,7 @@ namespace FSpot.Widgets
rating_view.Changed += HandleRatingChanged;
rating_align.Add (rating_view);
- tag_view = new TagView (MainWindow.ToolTips);
+ tag_view = new TagView ();
info_table.Attach (tag_view, 0, 2, 9, 10, AttachOptions.Fill, AttachOptions.Fill, TABLE_XPADDING, TABLE_YPADDING);
info_table.ShowAll ();
@@ -469,8 +470,10 @@ namespace FSpot.Widgets
if (Photos == null || Photos.Length == 0) {
Hide ();
} else if (Photos.Length == 1) {
+ Show ();
UpdateSingle ();
} else if (Photos.Length > 1) {
+ Show ();
UpdateMultiple ();
}
return false;
@@ -493,13 +496,13 @@ namespace FSpot.Widgets
try {
//using (new Timer ("building info")) {
- using (ImageFile img = ImageFile.Create (photo.DefaultVersionUri))
+ using (ImageFile img = ImageFile.Create (photo.DefaultVersion.Uri))
{
info = new ImageInfo (img);
}
//}
} catch (System.Exception e) {
- FSpot.Utils.Log.Debug (e.StackTrace);
+ Hyena.Log.Debug (e.StackTrace);
info = new ImageInfo (null);
}
@@ -568,12 +571,12 @@ namespace FSpot.Widgets
if (show_file_size) {
try {
- GFile file = FileFactory.NewForUri (photo.DefaultVersionUri);
+ GFile file = FileFactory.NewForUri (photo.DefaultVersion.Uri);
GFileInfo file_info = file.QueryInfo ("standard::size", FileQueryInfoFlags.None, null);
file_size_value_label.Text = Format.SizeForDisplay (file_info.Size);
} catch (GLib.GException e) {
file_size_value_label.Text = Catalog.GetString("(File read error)");
- FSpot.Utils.Log.DebugException (e);
+ Hyena.Log.DebugException (e);
}
}
@@ -649,18 +652,18 @@ namespace FSpot.Widgets
}
date_label.Visible = show_date;
date_value_label.Visible = show_date;
-
+
if (show_file_size) {
long file_size = 0;
foreach (Photo photo in Photos) {
try {
- GFile file = FileFactory.NewForUri (photo.DefaultVersionUri);
+ GFile file = FileFactory.NewForUri (photo.DefaultVersion.Uri);
GFileInfo file_info = file.QueryInfo ("standard::size", FileQueryInfoFlags.None, null);
file_size += file_info.Size;
} catch (GLib.GException e) {
file_size = -1;
- FSpot.Utils.Log.DebugException (e);
+ Hyena.Log.DebugException (e);
break;
}
}
@@ -706,14 +709,14 @@ namespace FSpot.Widgets
try {
if (hint == null)
- using (ImageFile img = ImageFile.Create (photo.DefaultVersionUri))
+ using (ImageFile img = ImageFile.Create (photo.DefaultVersion.Uri))
hint = img.Load (256, 256);
histogram_image.Pixbuf = histogram.Generate (hint, max);
hint.Dispose ();
} catch (System.Exception e) {
- FSpot.Utils.Log.Debug (e.StackTrace);
+ Hyena.Log.Debug (e.StackTrace);
using (Gdk.Pixbuf empty = new Gdk.Pixbuf (Gdk.Colorspace.Rgb, true, 8, 256, 256)) {
empty.Fill (0x0);
histogram_image.Pixbuf = histogram.Generate (empty, max);
@@ -747,7 +750,7 @@ namespace FSpot.Widgets
public void HandleMainWindowViewModeChanged (object o, EventArgs args)
{
- MainWindow.ModeType mode = MainWindow.Toplevel.ViewMode;
+ MainWindow.ModeType mode = App.Instance.Organizer.ViewMode;
if (mode == MainWindow.ModeType.IconView)
Context = ViewContext.Library;
else if (mode == MainWindow.ModeType.PhotoView)
diff --git a/src/Widgets/Layout.cs b/src/Widgets/Layout.cs
index 051ff76..adf80b3 100644
--- a/src/Widgets/Layout.cs
+++ b/src/Widgets/Layout.cs
@@ -11,6 +11,7 @@
using System;
using System.Collections.Generic;
+using Hyena;
namespace FSpot.Widgets
{
@@ -232,7 +233,7 @@ namespace FSpot.Widgets
protected override void OnSetScrollAdjustments (Gtk.Adjustment hadjustment, Gtk.Adjustment vadjustment)
{
-Console.WriteLine ("\n\nLayout.OnSetScrollAdjustments");
+ Log.Debug ("\n\nLayout.OnSetScrollAdjustments");
if (hadjustment == null)
hadjustment = new Gtk.Adjustment (0, 0, 0, 0, 0, 0);
if (vadjustment == null)
diff --git a/src/Widgets/Makefile.am b/src/Widgets/Makefile.am
new file mode 100644
index 0000000..43f1aa5
--- /dev/null
+++ b/src/Widgets/Makefile.am
@@ -0,0 +1,34 @@
+ASSEMBLY = FSpot.Widgets
+TARGET = library
+LINK = $(REF_FSPOT_WIDGETS)
+
+SOURCES = \
+ ApplicationActivatedEventArgs.cs \
+ BuilderWindow.cs \
+ CheckPattern.cs \
+ ComplexMenuItem.cs \
+ Curve.cs \
+ CurveType.cs \
+ CustomPrintWidget.cs \
+ DateEdit.cs \
+ DateEditFlags.cs \
+ DissolveTransition.cs \
+ HighlightedBox.cs \
+ ImageView.cs \
+ Layout.cs \
+ MenuButton.cs \
+ OpenWithMenu.cs \
+ PointerMode.cs \
+ Rating.cs \
+ SaneTreeView.cs \
+ ScrolledView.cs \
+ PushTransition.cs \
+ CairoTransition.cs \
+ SlideShowTransition.cs
+
+RESOURCES =
+
+include $(top_srcdir)/build/build.mk
+
+EXTRA_DIST += FSpot.Widgets.dll.config
+module_SCRIPTS += FSpot.Widgets.dll.config
diff --git a/src/Widgets/Makefile.in b/src/Widgets/Makefile.in
new file mode 100644
index 0000000..8df52c9
--- /dev/null
+++ b/src/Widgets/Makefile.in
@@ -0,0 +1,829 @@
+# Makefile.in generated by automake 1.11.1 from Makefile.am.
+# @configure_input@
+
+# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
+# 2003, 2004, 2005, 2006, 2007, 2008, 2009 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.
+
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
+# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
+# PARTICULAR PURPOSE.
+
+ at SET_MAKE@
+
+VPATH = @srcdir@
+pkgdatadir = $(datadir)/@PACKAGE@
+pkgincludedir = $(includedir)/@PACKAGE@
+pkglibdir = $(libdir)/@PACKAGE@
+pkglibexecdir = $(libexecdir)/@PACKAGE@
+am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
+install_sh_DATA = $(install_sh) -c -m 644
+install_sh_PROGRAM = $(install_sh) -c
+install_sh_SCRIPT = $(install_sh) -c
+INSTALL_HEADER = $(INSTALL_DATA)
+transform = $(program_transform_name)
+NORMAL_INSTALL = :
+PRE_INSTALL = :
+POST_INSTALL = :
+NORMAL_UNINSTALL = :
+PRE_UNINSTALL = :
+POST_UNINSTALL = :
+build_triplet = @build@
+host_triplet = @host@
+DIST_COMMON = $(srcdir)/FSpot.Widgets.dll.config.in \
+ $(srcdir)/Makefile.am $(srcdir)/Makefile.in \
+ $(top_srcdir)/build/build.environment.mk \
+ $(top_srcdir)/build/build.mk \
+ $(top_srcdir)/build/build.rules.mk
+ at ENABLE_TESTS_TRUE@am__append_1 = " $(NUNIT_LIBS)"
+subdir = src/Widgets
+ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
+am__aclocal_m4_deps = $(top_srcdir)/build/m4/shave/shave.m4 \
+ $(top_srcdir)/build/m4/shamrock/expansions.m4 \
+ $(top_srcdir)/build/m4/shamrock/gnome-doc.m4 \
+ $(top_srcdir)/build/m4/shamrock/mono.m4 \
+ $(top_srcdir)/build/m4/shamrock/nunit.m4 \
+ $(top_srcdir)/build/m4/shamrock/programs.m4 \
+ $(top_srcdir)/build/m4/f-spot/flickrnet.m4 \
+ $(top_srcdir)/build/m4/f-spot/gnome-keyring-sharp.m4 \
+ $(top_srcdir)/build/m4/f-spot/gtk-sharp.m4 \
+ $(top_srcdir)/build/m4/f-spot/mono-addins.m4 \
+ $(top_srcdir)/acinclude.m4 $(top_srcdir)/configure.ac
+am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
+ $(ACLOCAL_M4)
+mkinstalldirs = $(install_sh) -d
+CONFIG_HEADER = $(top_builddir)/config.h
+CONFIG_CLEAN_FILES = FSpot.Widgets.dll.config
+CONFIG_CLEAN_VPATH_FILES =
+am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`;
+am__vpath_adj = case $$p in \
+ $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \
+ *) f=$$p;; \
+ esac;
+am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`;
+am__install_max = 40
+am__nobase_strip_setup = \
+ srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'`
+am__nobase_strip = \
+ for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||"
+am__nobase_list = $(am__nobase_strip_setup); \
+ for p in $$list; do echo "$$p $$p"; done | \
+ sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \
+ $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \
+ if (++n[$$2] == $(am__install_max)) \
+ { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \
+ END { for (dir in files) print dir, files[dir] }'
+am__base_list = \
+ sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \
+ sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g'
+am__installdirs = "$(DESTDIR)$(moduledir)"
+SCRIPTS = $(module_SCRIPTS)
+DIST_SOURCES =
+DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
+ACLOCAL = @ACLOCAL@
+ACLOCAL_AMFLAGS = @ACLOCAL_AMFLAGS@
+ALL_LINGUAS = @ALL_LINGUAS@
+AMTAR = @AMTAR@
+AM_MAKEFLAGS = @AM_MAKEFLAGS@
+API_VERSION = @API_VERSION@
+AR = @AR@
+ASM_VERSION = @ASM_VERSION@
+AUTOCONF = @AUTOCONF@
+AUTOHEADER = @AUTOHEADER@
+AUTOMAKE = @AUTOMAKE@
+AWK = @AWK@
+CATALOGS = @CATALOGS@
+CATOBJEXT = @CATOBJEXT@
+CC = @CC@
+CCDEPMODE = @CCDEPMODE@
+CFLAGS = @CFLAGS@
+CPP = @CPP@
+CPPFLAGS = @CPPFLAGS@
+CSC_DEFINES = @CSC_DEFINES@
+CXX = @CXX@
+CXXCPP = @CXXCPP@
+CXXDEPMODE = @CXXDEPMODE@
+CXXFLAGS = @CXXFLAGS@
+CYGPATH_W = @CYGPATH_W@
+DATADIRNAME = @DATADIRNAME@
+DEFS = @DEFS@
+DEPDIR = @DEPDIR@
+DISPLAY_VERSION = @DISPLAY_VERSION@
+DISTCHECK_CONFIGURE_FLAGS = @DISTCHECK_CONFIGURE_FLAGS@
+DOC_USER_FORMATS = @DOC_USER_FORMATS@
+DSYMUTIL = @DSYMUTIL@
+DUMPBIN = @DUMPBIN@
+ECHO_C = @ECHO_C@
+ECHO_N = @ECHO_N@
+ECHO_T = @ECHO_T@
+EGREP = @EGREP@
+EXEEXT = @EXEEXT@
+EXIF_CFLAGS = @EXIF_CFLAGS@
+EXIF_LIBS = @EXIF_LIBS@
+EXIF_SOVERSION = @EXIF_SOVERSION@
+F77 = @F77@
+FC = @FC@
+FGREP = @FGREP@
+FLICKRNET_CFLAGS = @FLICKRNET_CFLAGS@
+FLICKRNET_LIBS = @FLICKRNET_LIBS@
+F_CFLAGS = @F_CFLAGS@
+F_LIBS = @F_LIBS@
+GAPI2CODEGEN = @GAPI2CODEGEN@
+GAPI2FIXUP = @GAPI2FIXUP@
+GAPI2PARSER = @GAPI2PARSER@
+GCONFTOOL = @GCONFTOOL@
+GCONF_SCHEMA_CONFIG_SOURCE = @GCONF_SCHEMA_CONFIG_SOURCE@
+GCONF_SCHEMA_FILE_DIR = @GCONF_SCHEMA_FILE_DIR@
+GCONF_SHARP_CFLAGS = @GCONF_SHARP_CFLAGS@
+GCONF_SHARP_LIBS = @GCONF_SHARP_LIBS@
+GETTEXT_PACKAGE = @GETTEXT_PACKAGE@
+GIO_CFLAGS = @GIO_CFLAGS@
+GIO_LIBS = @GIO_LIBS@
+GLIBSHARP_2_12_7_CFLAGS = @GLIBSHARP_2_12_7_CFLAGS@
+GLIBSHARP_2_12_7_LIBS = @GLIBSHARP_2_12_7_LIBS@
+GLIBSHARP_CFLAGS = @GLIBSHARP_CFLAGS@
+GLIBSHARP_LIBS = @GLIBSHARP_LIBS@
+GLIB_CFLAGS = @GLIB_CFLAGS@
+GLIB_GENMARSHAL = @GLIB_GENMARSHAL@
+GLIB_LIBS = @GLIB_LIBS@
+GLIB_MKENUMS = @GLIB_MKENUMS@
+GMOFILES = @GMOFILES@
+GMSGFMT = @GMSGFMT@
+GNOME_ICON_THEME_PREFIX = @GNOME_ICON_THEME_PREFIX@
+GNOME_SCREENSAVER_SAVERDIR = @GNOME_SCREENSAVER_SAVERDIR@
+GNOME_SCREENSAVER_THEMESDIR = @GNOME_SCREENSAVER_THEMESDIR@
+GNOME_SHARP_CFLAGS = @GNOME_SHARP_CFLAGS@
+GNOME_SHARP_LIBS = @GNOME_SHARP_LIBS@
+GOBJECT_QUERY = @GOBJECT_QUERY@
+GREP = @GREP@
+GTKSHARP_A11Y_CFLAGS = @GTKSHARP_A11Y_CFLAGS@
+GTKSHARP_A11Y_LIBS = @GTKSHARP_A11Y_LIBS@
+GTKSHARP_CFLAGS = @GTKSHARP_CFLAGS@
+GTKSHARP_LIBS = @GTKSHARP_LIBS@
+HELP_DIR = @HELP_DIR@
+ICONS_DIRECTORY = @ICONS_DIRECTORY@
+INSTALL = @INSTALL@
+INSTALL_DATA = @INSTALL_DATA@
+INSTALL_PROGRAM = @INSTALL_PROGRAM@
+INSTALL_SCRIPT = @INSTALL_SCRIPT@
+INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
+INSTOBJEXT = @INSTOBJEXT@
+INTLLIBS = @INTLLIBS@
+INTLTOOL_EXTRACT = @INTLTOOL_EXTRACT@
+INTLTOOL_MERGE = @INTLTOOL_MERGE@
+INTLTOOL_PERL = @INTLTOOL_PERL@
+INTLTOOL_UPDATE = @INTLTOOL_UPDATE@
+KEYRINGSHARP_CFLAGS = @KEYRINGSHARP_CFLAGS@
+KEYRINGSHARP_LIBS = @KEYRINGSHARP_LIBS@
+LCMS_CFLAGS = @LCMS_CFLAGS@
+LCMS_LIBS = @LCMS_LIBS@
+LD = @LD@
+LDFLAGS = @LDFLAGS@
+LIBEXIF_VERSION_CHECK_CFLAGS = @LIBEXIF_VERSION_CHECK_CFLAGS@
+LIBEXIF_VERSION_CHECK_LIBS = @LIBEXIF_VERSION_CHECK_LIBS@
+LIBJPEG = @LIBJPEG@
+LIBOBJS = @LIBOBJS@
+LIBS = @LIBS@
+LIBTOOL = @LIBTOOL@
+LIPO = @LIPO@
+LN_S = @LN_S@
+LTLIBOBJS = @LTLIBOBJS@
+MAINT = @MAINT@
+MAKEFLAGS = @MAKEFLAGS@
+MAKEINFO = @MAKEINFO@
+MCS = @MCS@
+MKDIR_P = @MKDIR_P@
+MKINSTALLDIRS = @MKINSTALLDIRS@
+MONO = @MONO@
+MONO_ADDINS_CFLAGS = @MONO_ADDINS_CFLAGS@
+MONO_ADDINS_GUI_CFLAGS = @MONO_ADDINS_GUI_CFLAGS@
+MONO_ADDINS_GUI_LIBS = @MONO_ADDINS_GUI_LIBS@
+MONO_ADDINS_LIBS = @MONO_ADDINS_LIBS@
+MONO_ADDINS_SETUP_CFLAGS = @MONO_ADDINS_SETUP_CFLAGS@
+MONO_ADDINS_SETUP_LIBS = @MONO_ADDINS_SETUP_LIBS@
+MONO_MODULE_CFLAGS = @MONO_MODULE_CFLAGS@
+MONO_MODULE_LIBS = @MONO_MODULE_LIBS@
+MSGFMT = @MSGFMT@
+MSGFMT_OPTS = @MSGFMT_OPTS@
+MSGMERGE = @MSGMERGE@
+NDESK_DBUS_CFLAGS = @NDESK_DBUS_CFLAGS@
+NDESK_DBUS_LIBS = @NDESK_DBUS_LIBS@
+NM = @NM@
+NMEDIT = @NMEDIT@
+NUNIT_CFLAGS = @NUNIT_CFLAGS@
+NUNIT_LIBS = @NUNIT_LIBS@
+OBJC = @OBJC@
+OBJDUMP = @OBJDUMP@
+OBJEXT = @OBJEXT@
+OMF_DIR = @OMF_DIR@
+OTOOL = @OTOOL@
+OTOOL64 = @OTOOL64@
+PACKAGE = @PACKAGE@
+PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
+PACKAGE_NAME = @PACKAGE_NAME@
+PACKAGE_STRING = @PACKAGE_STRING@
+PACKAGE_TARNAME = @PACKAGE_TARNAME@
+PACKAGE_URL = @PACKAGE_URL@
+PACKAGE_VERSION = @PACKAGE_VERSION@
+PATH_SEPARATOR = @PATH_SEPARATOR@
+PKG_CONFIG = @PKG_CONFIG@
+POFILES = @POFILES@
+POSUB = @POSUB@
+PO_IN_DATADIR_FALSE = @PO_IN_DATADIR_FALSE@
+PO_IN_DATADIR_TRUE = @PO_IN_DATADIR_TRUE@
+Q = @Q@
+RANLIB = @RANLIB@
+SED = @SED@
+SET_MAKE = @SET_MAKE@
+SHELL = @SHELL@
+STRIP = @STRIP@
+TURTLEDIR = @TURTLEDIR@
+UNIQUE_CFLAGS = @UNIQUE_CFLAGS@
+UNIQUE_LIBS = @UNIQUE_LIBS@
+USE_NLS = @USE_NLS@
+V = @V@
+VERSION = @VERSION@
+WARN_CFLAGS = @WARN_CFLAGS@
+XGETTEXT = @XGETTEXT@
+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_DUMPBIN = @ac_ct_DUMPBIN@
+am__include = @am__include@
+am__leading_dot = @am__leading_dot@
+am__quote = @am__quote@
+am__tar = @am__tar@
+am__untar = @am__untar@
+bindir = @bindir@
+build = @build@
+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@
+expanded_bindir = @expanded_bindir@
+expanded_datadir = @expanded_datadir@
+expanded_libdir = @expanded_libdir@
+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@
+lt_ECHO = @lt_ECHO@
+mandir = @mandir@
+mkdir_p = @mkdir_p@
+oldincludedir = @oldincludedir@
+pdfdir = @pdfdir@
+prefix = @prefix@
+program_transform_name = @program_transform_name@
+psdir = @psdir@
+sbindir = @sbindir@
+sharedstatedir = @sharedstatedir@
+shavedir = @shavedir@
+srcdir = @srcdir@
+sysconfdir = @sysconfdir@
+target_alias = @target_alias@
+top_build_prefix = @top_build_prefix@
+top_builddir = @top_builddir@
+top_srcdir = @top_srcdir@
+ASSEMBLY = FSpot.Widgets
+TARGET = library
+LINK = $(REF_FSPOT_WIDGETS) $(am__append_1)
+SOURCES = \
+ ApplicationActivatedEventArgs.cs \
+ BuilderWindow.cs \
+ CheckPattern.cs \
+ ComplexMenuItem.cs \
+ Curve.cs \
+ CurveType.cs \
+ CustomPrintWidget.cs \
+ DateEdit.cs \
+ DateEditFlags.cs \
+ DissolveTransition.cs \
+ HighlightedBox.cs \
+ ImageView.cs \
+ Layout.cs \
+ MenuButton.cs \
+ OpenWithMenu.cs \
+ PointerMode.cs \
+ Rating.cs \
+ SaneTreeView.cs \
+ ScrolledView.cs \
+ PushTransition.cs \
+ CairoTransition.cs \
+ SlideShowTransition.cs
+
+RESOURCES =
+
+# Initializers
+MONO_BASE_PATH =
+MONO_ADDINS_PATH =
+
+# Install Paths
+DEFAULT_INSTALL_DIR = $(pkglibdir)
+BACKENDS_INSTALL_DIR = $(DEFAULT_INSTALL_DIR)/Backends
+EXTENSIONS_INSTALL_DIR = $(DEFAULT_INSTALL_DIR)/Extensions
+DIR_DOCS = $(top_builddir)/docs
+DIR_EXTENSIONS = $(top_builddir)/extensions
+DIR_ICONS = $(top_builddir)/icons
+DIR_JPEGTRAN = $(top_builddir)/lib/libjpegtran
+DIR_LIBFSPOT = $(top_builddir)/lib/libfspot
+DIR_SEMWEB = $(top_builddir)/lib/semweb
+DIR_SRC = $(top_builddir)/src
+DIR_GIOSHARP = $(top_builddir)/lib/gio-sharp/gio
+DIR_GTKSHARPBEANS = $(top_builddir)/lib/gtk-sharp-beans
+DIR_UNIQUESHARP = $(top_builddir)/lib/unique-sharp/unique
+DIR_BIN = $(top_builddir)/bin
+
+# External libraries to link against, generated from configure
+LINK_SYSTEM = -r:System
+LINK_SYSTEMDATA = -r:System.Data
+LINK_SYSTEM_WEB = -r:System.Web
+LINK_MONO_POSIX = -r:Mono.Posix
+LINK_MONO_CAIRO = -r:Mono.Cairo
+LINK_MONO_SIMD = -r:Mono.Simd
+LINK_MONODATA = -r:Mono.Data
+LINK_MONO_DATA_SQLITECLIENT = -r:Mono.Data.SqliteClient
+LINK_ICSHARP_ZIP_LIB = -r:ICSharpCode.SharpZipLib
+LINK_KEYRING = $(KEYRINGSHARP_LIBS)
+LINK_GLIB = $(GLIBSHARP_LIBS)
+LINK_GTK = $(GTKSHARP_LIBS)
+LINK_GNOME = $(GNOME_SHARP_LIBS)
+LINK_GCONF = $(GCONF_SHARP_LIBS)
+LINK_GLADE = -pkg:glade-sharp-2.0
+LINK_FLICKRNET = -pkg:flickrnet
+LINK_DBUS = $(NDESK_DBUS_LIBS) $(NDESK_DBUS_GLIB_LIBS)
+LINK_DBUS_NO_GLIB = $(NDESK_DBUS_LIBS)
+LINK_MONO_ADDINS_DEPS = $(MONO_ADDINS_LIBS)
+LINK_MONO_ADDINS_SETUP_DEPS = $(MONO_ADDINS_SETUP_LIBS)
+LINK_MONO_ADDINS_GUI_DEPS = $(MONO_ADDINS_GUI_LIBS)
+
+# GIO
+REF_GIO =
+LINK_GIO = -r:$(DIR_GIOSHARP)/gio-sharp.dll
+LINK_GIO_DEPS = $(REF_GIO) $(LINK_GIO)
+
+# Gtk Beans
+REF_GTK_BEANS = $(LINK_GIO_DEPS)
+LINK_GTK_BEANS = -r:$(DIR_GTKSHARPBEANS)/gtk-sharp-beans.dll
+LINK_GTK_BEANS_DEPS = $(REF_GTK_BEANS) $(LINK_GTK_BEANS)
+
+# Uniqe
+REF_UNIQUE =
+LINK_UNIQUE = -r:$(DIR_UNIQUESHARP)/unique-sharp.dll
+LINK_UNIQUE_DEPS = $(REF_UNIQUE) $(LINK_UNIQUE)
+
+# Hyena
+REF_HYENA = $(LINK_SYSTEM) $(LINK_MONO_POSIX)
+LINK_HYENA = -r:$(DIR_BIN)/Hyena.dll
+LINK_HYENA_DEPS = $(REF_HYENA) $(LINK_HYENA)
+
+# Semweb
+REF_SEMWEB = $(LINK_SYSTEMDATA) $(LINK_HYENA_DEPS)
+LINK_SEMWEB = -r:$(DIR_BIN)/SemWeb.dll
+LINK_SEMWEB_DEPS = $(REF_SEMWEB) $(LINK_SEMWEB)
+
+# Hyena.Data.Sqlite
+REF_HYENA_DATA_SQLITE = $(LINK_SQLITE)
+LINK_HYENA_DATA_SQLITE = -r:$(DIR_BIN)/Hyena.Data.Sqlite.dll
+LINK_HYENA_DATA_SQLITE_DEPS = $(REF_HYENA_DATA_SQLITE) $(LINK_HYENA_DATA_SQLITE)
+
+# Hyena.Gui
+REF_HYENA_GUI = $(LINK_HYENA_DEPS)
+LINK_HYENA_GUI = -r:$(DIR_BIN)/Hyena.Gui.dll
+LINK_HENA_GUI_DEPS = $(REF_HYENA_GUI) $(LINK_HYENA_GUI)
+
+# FSpot.Cms
+REF_FSPOT_CMS = $(LINK_GTK)
+LINK_FSPOT_CMS = -r:$(DIR_BIN)/FSpot.Cms.dll
+LINK_FSPOT_CMS_DEPS = $(REF_FSPOT_CMS) $(LINK_FSPOT_CMS)
+
+# FSpot.Utils
+REF_FSPOT_UTILS = $(LINK_HYENA_DEPS) $(LINK_GTK) $(LINK_GIO) $(LINK_MONO_CAIRO)
+LINK_FSPOT_UTILS = -r:$(DIR_BIN)/FSpot.Utils.dll
+LINK_FSPOT_UTILS_DEPS = $(REF_FSPOT_UTILS) $(LINK_FSPOT_UTILS)
+
+# FSpot.Core
+REF_FSPOT_CORE = $(LINK_FSPOT_UTILS_DEPS) $(LINK_FSPOT_CMS_DEPS)
+LINK_FSPOT_CORE = -r:$(DIR_BIN)/FSpot.Core.dll
+LINK_FSPOT_CORE_DEPS = $(REF_FSPOT_CORE) $(LINK_FSPOT_CORE)
+
+# FSpot.Query
+REF_FSPOT_QUERY = $(LINK_FSPOT_CORE_DEPS)
+LINK_FSPOT_QUERY = -r:$(DIR_BIN)/FSpot.Query.dll
+LINK_FSPOT_QUERY_DEPS = $(REF_FSPOT_QUERY) $(LINK_FSPOT_QUERY)
+
+# FSpot.JobScheduler
+REF_FSPOT_JOB_SCHEDULER = $(LINK_HYENA_DEPS)
+LINK_FSPOT_JOB_SCHEDULER = -r:$(DIR_BIN)/FSpot.JobScheduler.dll
+LINK_FSPOT_JOB_SCHEDULER_DEPS = $(REF_FSPOT_JOB_SCHEDULER) $(LINK_FSPOT_JOB_SCHEDULER)
+
+# FSpot.Bling
+REF_FSPOT_BLING = $(LINK_GTK_BEANS_DEPS) $(LINK_GLIB)
+LINK_FSPOT_BLING = -r:$(DIR_BIN)/FSpot.Bling.dll
+LINK_FSPOT_BLING_DEPS = $(REF_FSPOT_BLING) $(LINK_FSPOT_BLING)
+
+# FSpot.Platform
+REF_FSPOT_PLATFORM = $(LINK_GCONF) $(LINK_GTK) $(LINK_FSPOT_CORE_DEPS) $(LINK_DBUS)
+LINK_FSPOT_PLATFORM = -r:$(DIR_BIN)/FSpot.Platform.dll
+LINK_FSPOT_PLATFORM_DEPS = $(REF_FSPOT_PLATFORM) $(LINK_FSPOT_PLATFORM)
+
+# FSpot.Widgets
+REF_FSPOT_WIDGETS = $(LINK_FSPOT_CORE_DEPS) $(LINK_FSPOT_BLING_DEPS)
+LINK_FSPOT_WIDGETS = -r:$(DIR_BIN)/FSpot.Widgets.dll
+LINK_FSPOT_WIDGETS_DEPS = $(REF_FSPOT_WIDGETS) $(LINK_FSPOT_WIDGETS)
+
+# FSpot (executable)
+REF_FSPOT = $(LINK_FSPOT_WIDGETS_DEPS) $(LINK_FSPOT_PLATFORM_DEPS) $(LINK_FSPOT_QUERY_DEPS) \
+ $(LINK_GLIB) $(LINK_MONO_ADDINS_DEPS) $(LINK_UNIQUE_DEPS) $(LINK_MONO_ADDINS_SETUP_DEPS) \
+ $(LINK_SEMWEB_DEPS) $(LINK_GLADE) $(LINK_MONODATA) $(LINK_MONO_DATA_SQLITECLIENT) \
+ $(LINK_MONO_ADDINS_GUI_DEPS) $(LINK_FSPOT_JOB_SCHEDULER_DEPS) $(LINK_ICSHARP_ZIP_LIB) \
+ $(LINK_GNOME)
+
+# FIXME: do not link executables
+LINK_FSPOT = -r:$(DIR_BIN)/f-spot.exe
+LINK_FSPOT_DEPS = $(REF_FSPOT) $(LINK_FSPOT)
+
+# Extensions
+REF_FSPOT_EXTENSION_BLACKOUTEDITOR = $(LINK_FSPOT_DEPS)
+REF_FSPOT_EXTENSION_BWEDITOR = $(LINK_FSPOT_DEPS) $(LINK_MONO_SIMD)
+REF_FSPOT_EXTENSION_FLIPEDITOR = $(LINK_FSPOT_DEPS)
+REF_FSPOT_EXTENSION_PIXELATEEDITOR = $(LINK_FSPOT_DEPS)
+REF_FSPOT_EXTENSION_RESIZEEDITOR = $(LINK_FSPOT_DEPS)
+REF_FSPOT_EXTENSION_CDEXPORT = $(LINK_FSPOT_DEPS)
+REF_FSPOT_EXTENSION_FACEBOOKEXPORT = $(LINK_FSPOT_DEPS) $(LINK_KEYRING)
+REF_FSPOT_EXTENSION_FLICKREXPORT = $(LINK_FSPOT_DEPS) $(LINK_FLICKRNET)
+REF_FSPOT_EXTENSION_FOLDEREXPORT = $(LINK_FSPOT_DEPS) $(LINK_SYSTEM_WEB)
+REF_FSPOT_EXTENSION_GALLERYEXPORT = $(LINK_FSPOT_DEPS)
+REF_MONO_GOOGLE = $(LINK_HYENA_DEPS)
+LINK_MONO_GOOGLE = -r:$(DIR_BIN)/Mono.Google.dll
+LINK_MONO_GOOGLE_DEPS = $(REF_MONO_GOOGLE) $(LINK_MONO_GOOGLE)
+REF_FSPOT_EXTENSION_PICASAWEBEXPORT = $(LINK_FSPOT_DEPS) $(LINK_MONO_GOOGLE) $(LINK_KEYRING)
+REF_SMUGMUGNET = $(LINK_FSPOT_DEPS)
+LINK_SMUGMUGNET = -r:$(DIR_BIN)/SmugMugNet.dll
+LINK_SMUGMUGNET_DEPS = $(REF_SMUGMUGNET) $(LINK_SMUGMUGNET)
+REF_FSPOT_EXTENSION_SMUGMUGEXPORT = $(LINK_SMUGMUGNET_DEPS) $(LINK_KEYRING)
+REF_MONO_TABBLO = $(LINK_HYENA_DEPS)
+LINK_MONO_TABBLO = -r:$(DIR_BIN)/Mono.Tabblo.dll
+LINK_MONO_TABBLO_DEPS = $(REF_MONO_TABBLO) $(LINK_MONO_TABBLO)
+REF_FSPOT_EXTENSION_TABBLOEXPORT = $(LINK_FSPOT_DEPS) $(LINK_KEYRING) $(LINK_MONO_TABBLO_DEPS)
+REF_FSPOT_EXTENSION_ZIPEXPORT = $(LINK_FSPOT_DEPS)
+REF_FSPOT_EXTENSION_CHANGEPHOTOPATH = $(LINK_FSPOT_DEPS)
+REF_FSPOT_EXTENSION_DEVELOPINUFRAW = $(LINK_FSPOT_DEPS)
+REF_FSPOT_EXTENSION_HASHJOB = $(LINK_FSPOT_DEPS)
+REF_FSPOT_EXTENSION_LIVEWEBGALLERY = $(LINK_FSPOT_DEPS)
+REF_FSPOT_EXTENSION_MERGEDB = $(LINK_FSPOT_DEPS)
+REF_FSPOT_EXTENSION_RAWPLUSJPEG = $(LINK_FSPOT_DEPS)
+REF_FSPOT_EXTENSION_RETROACTIVEROLL = $(LINK_FSPOT_DEPS)
+REF_FSPOT_EXTENSION_SCREENSAVERCONFIG = $(LINK_FSPOT_DEPS)
+REF_FSPOT_EXTENSION_COVERTRANSITION = $(LINK_FSPOT_DEPS)
+
+# Cute hack to replace a space with something
+colon := :
+empty :=
+space := $(empty) $(empty)
+
+# Build path to allow running uninstalled
+RUN_PATH = $(subst $(space),$(colon), $(MONO_BASE_PATH))
+UNIQUE_FILTER_PIPE = tr [:space:] \\n | sort | uniq
+BUILD_DATA_DIR = $(top_builddir)/bin/share/$(PACKAGE)
+
+# Since all other attempts failed, we currently go this way:
+# This code adds the file specified in ASSEMBLY_INFO_SOURCE to SOURCES_BUILD.
+# If no such file is specified, the default AssemblyInfo.cs is used.
+ASSEMBLY_INFO_SOURCE_REAL = \
+ $(shell if [ "$(ASSEMBLY_INFO_SOURCE)" ]; \
+ then \
+ echo "$(addprefix $(srcdir)/, $(ASSEMBLY_INFO_SOURCE))"; \
+ else \
+ echo "$(top_srcdir)/src/AssemblyInfo.cs"; \
+ fi)
+
+SOURCES_BUILD = $(addprefix $(srcdir)/, $(SOURCES)) \
+ $(ASSEMBLY_INFO_SOURCE_REAL)
+RESOURCES_EXPANDED = $(addprefix $(srcdir)/, $(RESOURCES))
+RESOURCES_BUILD = $(foreach resource, $(RESOURCES_EXPANDED), \
+ -resource:$(resource),$(notdir $(resource)))
+
+INSTALL_ICONS = $(top_srcdir)/build/private-icon-theme-installer "$(mkinstalldirs)" "$(INSTALL_DATA)"
+THEME_ICONS_SOURCE = $(wildcard $(srcdir)/ThemeIcons/*/*/*.png) $(wildcard $(srcdir)/ThemeIcons/scalable/*/*.svg)
+THEME_ICONS_RELATIVE = $(subst $(srcdir)/ThemeIcons/, , $(THEME_ICONS_SOURCE))
+ASSEMBLY_EXTENSION = $(strip $(patsubst library, dll, $(TARGET)))
+ASSEMBLY_FILE = $(top_builddir)/bin/$(ASSEMBLY).$(ASSEMBLY_EXTENSION)
+INSTALL_DIR_RESOLVED = $(firstword $(subst , $(DEFAULT_INSTALL_DIR), $(INSTALL_DIR)))
+ at ENABLE_TESTS_TRUE@ENABLE_TESTS_FLAG = "-define:ENABLE_TESTS"
+ at ENABLE_ATK_TRUE@ENABLE_ATK_FLAG = "-define:ENABLE_ATK"
+FILTERED_LINK = $(shell echo "$(LINK)" | $(UNIQUE_FILTER_PIPE))
+DEP_LINK = $(shell echo "$(LINK)" | $(UNIQUE_FILTER_PIPE) | sed s,-r:,,g | grep '$(top_builddir)/bin/')
+OUTPUT_FILES = \
+ $(ASSEMBLY_FILE) \
+ $(ASSEMBLY_FILE).mdb
+
+moduledir = $(INSTALL_DIR_RESOLVED)
+module_SCRIPTS = $(OUTPUT_FILES) FSpot.Widgets.dll.config
+EXTRA_DIST = $(SOURCES_BUILD) $(RESOURCES_EXPANDED) \
+ $(THEME_ICONS_SOURCE) FSpot.Widgets.dll.config
+CLEANFILES = $(OUTPUT_FILES) $(ASSEMBLY_FILE).config
+DISTCLEANFILES = *.pidb
+MAINTAINERCLEANFILES = Makefile.in
+all: all-am
+
+.SUFFIXES:
+$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(top_srcdir)/build/build.mk $(top_srcdir)/build/build.environment.mk $(top_srcdir)/build/build.rules.mk $(am__configure_deps)
+ @for dep in $?; do \
+ case '$(am__configure_deps)' in \
+ *$$dep*) \
+ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \
+ && { if test -f $@; then exit 0; else break; fi; }; \
+ exit 1;; \
+ esac; \
+ done; \
+ echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign src/Widgets/Makefile'; \
+ $(am__cd) $(top_srcdir) && \
+ $(AUTOMAKE) --foreign src/Widgets/Makefile
+.PRECIOUS: Makefile
+Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
+ @case '$?' in \
+ *config.status*) \
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \
+ *) \
+ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \
+ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \
+ esac;
+
+$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+
+$(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps)
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps)
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(am__aclocal_m4_deps):
+FSpot.Widgets.dll.config: $(top_builddir)/config.status $(srcdir)/FSpot.Widgets.dll.config.in
+ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@
+install-moduleSCRIPTS: $(module_SCRIPTS)
+ @$(NORMAL_INSTALL)
+ test -z "$(moduledir)" || $(MKDIR_P) "$(DESTDIR)$(moduledir)"
+ @list='$(module_SCRIPTS)'; test -n "$(moduledir)" || list=; \
+ for p in $$list; do \
+ if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \
+ if test -f "$$d$$p"; then echo "$$d$$p"; echo "$$p"; else :; fi; \
+ done | \
+ sed -e 'p;s,.*/,,;n' \
+ -e 'h;s|.*|.|' \
+ -e 'p;x;s,.*/,,;$(transform)' | sed 'N;N;N;s,\n, ,g' | \
+ $(AWK) 'BEGIN { files["."] = ""; dirs["."] = 1; } \
+ { d=$$3; if (dirs[d] != 1) { print "d", d; dirs[d] = 1 } \
+ if ($$2 == $$4) { files[d] = files[d] " " $$1; \
+ if (++n[d] == $(am__install_max)) { \
+ print "f", d, files[d]; n[d] = 0; files[d] = "" } } \
+ else { print "f", d "/" $$4, $$1 } } \
+ END { for (d in files) print "f", d, files[d] }' | \
+ while read type dir files; do \
+ if test "$$dir" = .; then dir=; else dir=/$$dir; fi; \
+ test -z "$$files" || { \
+ echo " $(INSTALL_SCRIPT) $$files '$(DESTDIR)$(moduledir)$$dir'"; \
+ $(INSTALL_SCRIPT) $$files "$(DESTDIR)$(moduledir)$$dir" || exit $$?; \
+ } \
+ ; done
+
+uninstall-moduleSCRIPTS:
+ @$(NORMAL_UNINSTALL)
+ @list='$(module_SCRIPTS)'; test -n "$(moduledir)" || exit 0; \
+ files=`for p in $$list; do echo "$$p"; done | \
+ sed -e 's,.*/,,;$(transform)'`; \
+ test -n "$$list" || exit 0; \
+ echo " ( cd '$(DESTDIR)$(moduledir)' && rm -f" $$files ")"; \
+ cd "$(DESTDIR)$(moduledir)" && rm -f $$files
+
+mostlyclean-libtool:
+ -rm -f *.lo
+
+clean-libtool:
+ -rm -rf .libs _libs
+tags: TAGS
+TAGS:
+
+ctags: CTAGS
+CTAGS:
+
+
+distdir: $(DISTFILES)
+ @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; \
+ if test -d $$d/$$file; then \
+ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \
+ if test -d "$(distdir)/$$file"; then \
+ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
+ fi; \
+ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
+ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \
+ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
+ fi; \
+ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \
+ else \
+ test -f "$(distdir)/$$file" \
+ || cp -p $$d/$$file "$(distdir)/$$file" \
+ || exit 1; \
+ fi; \
+ done
+check-am: all-am
+check: check-am
+all-am: Makefile $(SCRIPTS)
+installdirs:
+ for dir in "$(DESTDIR)$(moduledir)"; do \
+ test -z "$$dir" || $(MKDIR_P) "$$dir"; \
+ done
+install: install-am
+install-exec: install-exec-am
+install-data: install-data-am
+uninstall: uninstall-am
+
+install-am: all-am
+ @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
+
+installcheck: installcheck-am
+install-strip:
+ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+ `test -z '$(STRIP)' || \
+ echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install
+mostlyclean-generic:
+
+clean-generic:
+ -test -z "$(CLEANFILES)" || rm -f $(CLEANFILES)
+
+distclean-generic:
+ -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
+ -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES)
+ -test -z "$(DISTCLEANFILES)" || rm -f $(DISTCLEANFILES)
+
+maintainer-clean-generic:
+ @echo "This command is intended for maintainers to use"
+ @echo "it deletes files that may require special tools to rebuild."
+ -test -z "$(MAINTAINERCLEANFILES)" || rm -f $(MAINTAINERCLEANFILES)
+clean: clean-am
+
+clean-am: clean-generic clean-libtool mostlyclean-am
+
+distclean: distclean-am
+ -rm -f Makefile
+distclean-am: clean-am distclean-generic
+
+dvi: dvi-am
+
+dvi-am:
+
+html: html-am
+
+html-am:
+
+info: info-am
+
+info-am:
+
+install-data-am: install-data-local install-moduleSCRIPTS
+
+install-dvi: install-dvi-am
+
+install-dvi-am:
+
+install-exec-am:
+
+install-html: install-html-am
+
+install-html-am:
+
+install-info: install-info-am
+
+install-info-am:
+
+install-man:
+
+install-pdf: install-pdf-am
+
+install-pdf-am:
+
+install-ps: install-ps-am
+
+install-ps-am:
+
+installcheck-am:
+
+maintainer-clean: maintainer-clean-am
+ -rm -f Makefile
+maintainer-clean-am: distclean-am maintainer-clean-generic
+
+mostlyclean: mostlyclean-am
+
+mostlyclean-am: mostlyclean-generic mostlyclean-libtool
+
+pdf: pdf-am
+
+pdf-am:
+
+ps: ps-am
+
+ps-am:
+
+uninstall-am: uninstall-local uninstall-moduleSCRIPTS
+
+.MAKE: install-am install-strip
+
+.PHONY: all all-am check check-am clean clean-generic clean-libtool \
+ distclean distclean-generic distclean-libtool distdir dvi \
+ dvi-am html html-am info info-am install install-am \
+ install-data install-data-am install-data-local install-dvi \
+ install-dvi-am install-exec install-exec-am install-html \
+ install-html-am install-info install-info-am install-man \
+ install-moduleSCRIPTS install-pdf install-pdf-am install-ps \
+ install-ps-am install-strip installcheck installcheck-am \
+ installdirs maintainer-clean maintainer-clean-generic \
+ mostlyclean mostlyclean-generic mostlyclean-libtool pdf pdf-am \
+ ps ps-am uninstall uninstall-am uninstall-local \
+ uninstall-moduleSCRIPTS
+
+
+all: $(ASSEMBLY_FILE) theme-icons
+
+run:
+ @pushd $(top_builddir); \
+ make run; \
+ popd;
+
+# uncommented for now.
+# tests are currently excuted from Makefile in $(top_builddir)
+#test:
+# @pushd $(top_builddir)/tests; \
+# make $(ASSEMBLY); \
+# popd;
+
+build-debug:
+ @echo $(DEP_LINK)
+
+$(ASSEMBLY_FILE).mdb: $(ASSEMBLY_FILE)
+
+$(ASSEMBLY_FILE): $(SOURCES_BUILD) $(RESOURCES_EXPANDED) $(DEP_LINK)
+ @mkdir -p $(top_builddir)/bin
+ @if [ ! "x$(ENABLE_RELEASE)" = "xyes" ]; then \
+ $(top_srcdir)/build/dll-map-makefile-verifier $(srcdir)/Makefile.am $(srcdir)/$(notdir $@.config) && \
+ $(MONO) $(top_builddir)/build/dll-map-verifier.exe $(srcdir)/$(notdir $@.config) -iwinmm -ilibbanshee -ilibbnpx11 -ilibc -ilibc.so.6 -iintl -ilibmtp.dll -ilibigemacintegration.dylib -iCFRelease $(SOURCES_BUILD); \
+ fi;
+ $(MCS) \
+ $(GMCS_FLAGS) \
+ $(ASSEMBLY_BUILD_FLAGS) \
+ -nowarn:0278 -nowarn:0078 $$warn \
+ -define:HAVE_GTK_2_10 -define:NET_2_0 \
+ -debug -target:$(TARGET) -out:$@ \
+ $(BUILD_DEFINES) $(ENABLE_TESTS_FLAG) $(ENABLE_ATK_FLAG) \
+ $(FILTERED_LINK) $(RESOURCES_BUILD) $(SOURCES_BUILD)
+ @if [ -e $(srcdir)/$(notdir $@.config) ]; then \
+ cp $(srcdir)/$(notdir $@.config) $(top_builddir)/bin; \
+ fi;
+ @if [ ! -z "$(EXTRA_BUNDLE)" ]; then \
+ cp $(EXTRA_BUNDLE) $(top_builddir)/bin; \
+ fi;
+
+theme-icons: $(THEME_ICONS_SOURCE)
+ @$(INSTALL_ICONS) -il "$(BUILD_DATA_DIR)" "$(srcdir)" $(THEME_ICONS_RELATIVE)
+
+install-data-local: $(THEME_ICONS_SOURCE)
+ @$(INSTALL_ICONS) -i "$(DESTDIR)$(pkgdatadir)" "$(srcdir)" $(THEME_ICONS_RELATIVE)
+
+uninstall-local: $(THEME_ICONS_SOURCE)
+ @$(INSTALL_ICONS) -u "$(DESTDIR)$(pkgdatadir)" "$(srcdir)" $(THEME_ICONS_RELATIVE)
+
+# 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.
+.NOEXPORT:
diff --git a/src/Widgets/MetadataDisplay.cs b/src/Widgets/MetadataDisplay.cs
index cb7cc5f..1d21776 100644
--- a/src/Widgets/MetadataDisplay.cs
+++ b/src/Widgets/MetadataDisplay.cs
@@ -131,8 +131,8 @@ namespace FSpot.Widgets {
}
if (photo != null) {
- if (File.Exists (photo.DefaultVersionUri.LocalPath))
- exif_info = new Exif.ExifData (photo.DefaultVersionUri.LocalPath);
+ if (File.Exists (photo.DefaultVersion.Uri.LocalPath))
+ exif_info = new Exif.ExifData (photo.DefaultVersion.Uri.LocalPath);
} else {
exif_info = null;
}
@@ -329,7 +329,7 @@ namespace FSpot.Widgets {
if (photo != null) {
MetadataStore store = new MetadataStore ();
try {
- using (ImageFile img = ImageFile.Create (photo.DefaultVersionUri)) {
+ using (ImageFile img = ImageFile.Create (photo.DefaultVersion.Uri)) {
if (img is SemWeb.StatementSource) {
StatementSource source = (StatementSource)img;
source.Select (store);
@@ -339,7 +339,7 @@ namespace FSpot.Widgets {
missing = true;
} catch (System.Exception e){
// Sometimes we don't get the right exception, check for the file
- if (!System.IO.File.Exists (photo.DefaultVersionUri.LocalPath)) {
+ if (!System.IO.File.Exists (photo.DefaultVersion.Uri.LocalPath)) {
missing = true;
} else {
// if the file is there but we still got an exception display it.
@@ -412,7 +412,7 @@ namespace FSpot.Widgets {
msg = Catalog.GetString ("No active photo");
} else if (missing) {
msg = String.Format (Catalog.GetString ("The photo \"{0}\" does not exist"),
- photo.DefaultVersionUri);
+ photo.DefaultVersion.Uri);
} else {
msg = Catalog.GetString ("No metadata available");
diff --git a/src/Widgets/PanZoom.cs b/src/Widgets/PanZoom.cs
index 5c88f84..cc7cf28 100644
--- a/src/Widgets/PanZoom.cs
+++ b/src/Widgets/PanZoom.cs
@@ -16,7 +16,6 @@ using Gtk;
namespace FSpot.Widgets {
public class PanZoomOld : ITransition {
ImageInfo info;
- ImageInfo buffer;
TimeSpan duration = new TimeSpan (0, 0, 7);
double pan_x;
double pan_y;
diff --git a/src/Widgets/PreviewPopup.cs b/src/Widgets/PreviewPopup.cs
index 05fa9b9..8c94eb1 100644
--- a/src/Widgets/PreviewPopup.cs
+++ b/src/Widgets/PreviewPopup.cs
@@ -19,7 +19,6 @@ namespace FSpot {
private IconView view;
private Gtk.Image image;
private Gtk.Label label;
- private bool composited;
private bool show_histogram;
public bool ShowHistogram {
@@ -37,7 +36,7 @@ namespace FSpot {
private DisposableCache<string, Pixbuf> preview_cache = new DisposableCache<string, Pixbuf> (50);
private int item = -1;
- new public int Item {
+ public int Item {
get {
return item;
}
@@ -106,7 +105,7 @@ namespace FSpot {
{
FSpot.IBrowsableItem item = view.Collection [Item];
- string orig_path = item.DefaultVersionUri.LocalPath;
+ string orig_path = item.DefaultVersion.Uri.LocalPath;
Gdk.Pixbuf pixbuf = PixbufUtils.ShallowCopy (preview_cache.Get (orig_path + show_histogram.ToString ()));
if (pixbuf == null) {
diff --git a/src/Widgets/RatingMenuItem.cs b/src/Widgets/RatingMenuItem.cs
index 4d1c9f6..53d8f99 100644
--- a/src/Widgets/RatingMenuItem.cs
+++ b/src/Widgets/RatingMenuItem.cs
@@ -29,6 +29,7 @@
using System;
using Gtk;
using Mono.Unix;
+using Hyena;
namespace FSpot.Widgets
{
@@ -57,11 +58,11 @@ namespace FSpot.Widgets
box.PackStart (label, false, false, 0);
if (parent is FullScreenView) {
- FSpot.Utils.Log.Debug ("PARENT IS FSVIEW");
+ Log.Debug ("PARENT IS FSVIEW");
FullScreenView fsview = parent as FullScreenView;
entry = new Rating ((int)fsview.View.Item.Current.Rating, true);
- } else if (MainWindow.Toplevel.Selection.Count == 1)
- entry = new Rating ((int)MainWindow.Toplevel.Selection[0].Rating, true);
+ } else if (App.Instance.Organizer.Selection.Count == 1)
+ entry = new Rating ((int)App.Instance.Organizer.Selection[0].Rating, true);
else
entry = new Rating (-1, true);
entry.Changed += OnEntryChanged;
diff --git a/src/Widgets/Sidebar.cs b/src/Widgets/Sidebar.cs
index 75b9ddc..5b4b6ac 100644
--- a/src/Widgets/Sidebar.cs
+++ b/src/Widgets/Sidebar.cs
@@ -190,7 +190,7 @@ namespace FSpot.Widgets
public void HandleMainWindowViewModeChanged (object o, EventArgs args)
{
- MainWindow.ModeType mode = MainWindow.Toplevel.ViewMode;
+ MainWindow.ModeType mode = App.Instance.Organizer.ViewMode;
if (mode == MainWindow.ModeType.IconView)
Context = ViewContext.Library;
else if (mode == MainWindow.ModeType.PhotoView)
diff --git a/src/Widgets/SlideShow.cs b/src/Widgets/SlideShow.cs
index 03d7bc9..f6d9d22 100644
--- a/src/Widgets/SlideShow.cs
+++ b/src/Widgets/SlideShow.cs
@@ -22,6 +22,7 @@ namespace FSpot.Widgets
{
bool running;
BrowsablePointer item;
+ int loadRetries = 0;
#region Public API
public SlideShow (BrowsablePointer item) : this (item, 6000, false)
@@ -90,7 +91,7 @@ namespace FSpot.Widgets
if (running)
flip.Start ();
lock (sync_handle) {
- if (prev != null)
+ if (prev != null && prev != PixbufUtils.ErrorPixbuf)
prev.Dispose ();
prev = next;
@@ -112,7 +113,7 @@ namespace FSpot.Widgets
if (item == null || item.Current == null)
return;
- using (ImageFile img = ImageFile.Create (item.Current.DefaultVersionUri)) {
+ using (ImageFile img = ImageFile.Create (item.Current.DefaultVersion.Uri)) {
try {
using (var pb = img.Load ()) {
double scale = Math.Min ((double)Allocation.Width/(double)pb.Width, (double)Allocation.Height/(double)pb.Height);
@@ -125,8 +126,13 @@ namespace FSpot.Widgets
Cms.Profile screen_profile;
if (FSpot.ColorManagement.Profiles.TryGetValue (Preferences.Get<string> (Preferences.COLOR_MANAGEMENT_DISPLAY_PROFILE), out screen_profile))
FSpot.ColorManagement.ApplyProfile (next, screen_profile);
+ loadRetries = 0;
} catch (Exception) {
next = PixbufUtils.ErrorPixbuf;
+ if (++loadRetries < 10)
+ item.MoveNext (true);
+ else
+ loadRetries = 0;
}
}
}
@@ -151,9 +157,9 @@ namespace FSpot.Widgets
}
protected override void OnDestroyed ()
{
- if (prev != null)
+ if (prev != null && prev != PixbufUtils.ErrorPixbuf)
prev.Dispose ();
- if (next != null)
+ if (next != null && next != PixbufUtils.ErrorPixbuf)
next.Dispose ();
base.OnDestroyed ();
diff --git a/src/Widgets/TagMenu.cs b/src/Widgets/TagMenu.cs
index 163f67d..c1ea1c4 100644
--- a/src/Widgets/TagMenu.cs
+++ b/src/Widgets/TagMenu.cs
@@ -1,11 +1,14 @@
using Gtk;
+#if GTK_2_16
+using GtkBeans;
+#endif
using System;
using FSpot;
using FSpot.Utils;
+using Hyena;
public class TagMenu : Menu {
private TagStore tag_store;
- private MenuItem parent_item;
public delegate void TagSelectedHandler (Tag t);
public event TagSelectedHandler TagSelected;
@@ -24,8 +27,13 @@ public class TagMenu : Menu {
public TagMenuItem (Tag t, string name) : base (name.Replace ("_", "__"))
{
Value = t;
- if (t.Icon != null)
+ if (t.Icon != null) {
this.Image = new Gtk.Image (t.SizedIcon);
+#if GTK_2_16
+ // override Gnome 2.28+ default setting not to show menuitem icons
+ this.SetAlwaysShowImage (true);
+#endif
+ }
}
public static TagMenuItem IndentedItem (Tag t)
@@ -49,7 +57,6 @@ public class TagMenu : Menu {
if (item != null) {
item.Submenu = this;
item.Activated += HandlePopulate;
- parent_item = item;
}
tag_store = store;
diff --git a/src/Widgets/TagView.cs b/src/Widgets/TagView.cs
index d97f7a9..0c63c24 100644
--- a/src/Widgets/TagView.cs
+++ b/src/Widgets/TagView.cs
@@ -18,7 +18,6 @@ public class TagView : EventBox {
private IBrowsableItem photo;
private Tag [] tags;
private static int TAG_ICON_VSPACING = 5;
- Tooltips parent_tips = null;
public TagView ()
@@ -26,11 +25,6 @@ public class TagView : EventBox {
VisibleWindow = false;
}
- public TagView (Tooltips tips) : this ()
- {
- parent_tips = tips;
- }
-
protected TagView (IntPtr raw) : base (raw)
{
VisibleWindow = false;
@@ -104,8 +98,8 @@ public class TagView : EventBox {
RgbDither.None, tag_x, tag_y);
tag_x += thumbnail_size + TAG_ICON_VSPACING;
}
- if (parent_tips != null)
- parent_tips.SetTip (this, String.Join (", ", names), null);
+
+ this.TooltipText = String.Join (", ", names);
return base.OnExposeEvent (args);
}
diff --git a/src/Widgets/Tests/FindBarTests.cs b/src/Widgets/Tests/FindBarTests.cs
new file mode 100644
index 0000000..a52ac6e
--- /dev/null
+++ b/src/Widgets/Tests/FindBarTests.cs
@@ -0,0 +1,126 @@
+#if ENABLE_TESTS
+using NUnit.Framework;
+
+namespace FSpot.Widgets.Tests
+{
+ [TestFixture]
+ public class FindBarTests
+ {
+ [Test]
+ public void SuccessfulCompletionTest ()
+ {
+ CompletionLogic logic = new CompletionLogic ();
+
+ Assert.IsTrue (logic.MatchFunc ("Tagname", "T", 0), "first char");
+ Assert.IsTrue (logic.MatchFunc ("Tagname", "t", 0), "first char, different casing");
+ Assert.IsTrue (logic.MatchFunc ("Tagname", "Ta", 1), "two chars");
+ Assert.IsTrue (logic.MatchFunc ("Tagname", "tA", 1), "two chars, different casing");
+ Assert.IsTrue (logic.MatchFunc ("Tagname", "tagnam", 5), "except one char, different casing");
+ Assert.IsTrue (logic.MatchFunc ("Tagname", "Tagnam", 3), "except one char, caret in between");
+ }
+
+ [Test]
+ public void MatchTagsWithDiacritics ()
+ {
+ CompletionLogic logic = new CompletionLogic ();
+
+ Assert.IsTrue (logic.MatchFunc ("àáâãäåa", "àáâãäå", 5), "chars with diacritics");
+ Assert.IsTrue (logic.MatchFunc ("ÒÓÔÕÖØO", "òóôõöø", 5), "chars with diacritics, different casing");
+ Assert.IsTrue (logic.MatchFunc ("àáâãäåa", "aaaaaa", 5), "remove diacritics");
+ Assert.IsTrue (logic.MatchFunc ("ÒÓÔÕÖØO", "oooooo", 5), "remove diacritics, different casing");
+ }
+
+ [Test]
+ public void MatchTagsWithSpaces ()
+ {
+ CompletionLogic logic = new CompletionLogic ();
+
+ Assert.IsTrue (logic.MatchFunc ("Tag with spaces", "Ta", 1), "");
+ Assert.IsTrue (logic.MatchFunc ("Tag with spaces", "Tag", 2), "");
+ Assert.IsTrue (logic.MatchFunc ("Tag with spaces", "Tag ", 3), "");
+ Assert.IsTrue (logic.MatchFunc ("Tag with spaces", "Tag w", 4), "");
+ Assert.IsTrue (logic.MatchFunc ("Tag with spaces", "Tag with", 7), "");
+
+ Assert.IsFalse (logic.MatchFunc ("Tag with spaces", "Tag with spaces", 14), "");
+
+ Assert.IsFalse (logic.MatchFunc ("Tag with spaces", "wit", 2), "");
+ Assert.IsFalse (logic.MatchFunc ("Tag with spaces", "with s", 5), "");
+ }
+
+ [Test]
+ public void UnsuccessfulCompletionTest ()
+ {
+ CompletionLogic logic = new CompletionLogic ();
+
+ Assert.IsFalse (logic.MatchFunc ("Tagname", "", 0), "empty string");
+ Assert.IsFalse (logic.MatchFunc ("Tagname", "a", 0), "single char, no match");
+ Assert.IsFalse (logic.MatchFunc ("Tagname", "tagname", 6), "complete tag name");
+ Assert.IsFalse (logic.MatchFunc ("Tagname", "Tagname ", 7), "complete tag with space");
+ }
+
+ [Test]
+ public void SuccessfulCompletionTestWithParenthesis ()
+ {
+ CompletionLogic logic = new CompletionLogic ();
+
+ Assert.IsTrue (logic.MatchFunc ("Tagname", "(T", 1), "first char");
+ Assert.IsTrue (logic.MatchFunc ("Tagname", "(tagnam", 6), "except one char, different casing");
+ Assert.IsTrue (logic.MatchFunc ("Tagname", "(Ta)", 2), "with closing parenthesis");
+ Assert.IsTrue (logic.MatchFunc ("Tagname", "(Tagnam)", 2), "with closing parenthesis, caret in between");
+ }
+
+ [Test]
+ public void SuccessfulCompletionTestWithAndOperator ()
+ {
+ CompletionLogic logic = new CompletionLogic ();
+
+ Assert.IsTrue (logic.MatchFunc ("Tagname", "XY and T", 7), "first char, after operator");
+ Assert.IsTrue (logic.MatchFunc ("Tagname", "XY and tagnam", 12), "except one char, different casing, after operator");
+ Assert.IsTrue (logic.MatchFunc ("Tagname", "T and XY", 0), "first char, before operator");
+ Assert.IsTrue (logic.MatchFunc ("Tagname", "tagnam and XY", 5), "except one char, different casing, before operator");
+ }
+
+ [Test]
+ public void SuccessfulCompletionTestWithOrOperator ()
+ {
+ CompletionLogic logic = new CompletionLogic ();
+
+ Assert.IsTrue (logic.MatchFunc ("Tagname", "XY or T", 6), "first char");
+ Assert.IsTrue (logic.MatchFunc ("Tagname", "XY or tagnam", 11), "except one char, different casing");
+ Assert.IsTrue (logic.MatchFunc ("Tagname", "T or XY", 0), "first char");
+ Assert.IsTrue (logic.MatchFunc ("Tagname", "tagnam or XY", 5), "except one char, different casing");
+ }
+
+ [Test]
+ public void SuccessfulCompletionTestInBetween ()
+ {
+ CompletionLogic logic = new CompletionLogic ();
+
+ Assert.IsTrue (logic.MatchFunc ("Tagname", "XY and T and AB", 7), "first char");
+ Assert.IsTrue (logic.MatchFunc ("Tagname", "XY and tagnam and AB", 12), "except one char, different casing");
+ }
+
+ [Test]
+ public void ReplaceKeyTest ()
+ {
+ int pos;
+ CompletionLogic logic = new CompletionLogic ();
+
+ pos = 0;
+ logic.MatchFunc ("Tagname", "T", pos);
+ Assert.AreEqual (logic.ReplaceKey ("T", "Tagname", ref pos), "Tagname");
+ Assert.AreEqual (pos, 7);
+
+ pos = 2;
+ logic.MatchFunc ("Tagname", "Tagn", pos);
+ Assert.AreEqual (logic.ReplaceKey ("Tagn", "Tagname", ref pos), "Tagname");
+ Assert.AreEqual (pos, 7);
+
+ pos = 4;
+ logic.MatchFunc ("Tagname", "(Tagn and XY)", pos);
+ Assert.AreEqual (logic.ReplaceKey ("(Tagn and XY)", "Tagname", ref pos), "(Tagname and XY)");
+ Assert.AreEqual (pos, 8);
+ }
+ }
+}
+#endif
diff --git a/src/XScreenSaverSlide.cs b/src/XScreenSaverSlide.cs
index 815c055..0e26169 100644
--- a/src/XScreenSaverSlide.cs
+++ b/src/XScreenSaverSlide.cs
@@ -5,6 +5,7 @@ using GLib;
using System.Runtime.InteropServices;
using FSpot;
using FSpot.Utils;
+using Hyena;
namespace FSpot {
public class XScreenSaverSlide : Gtk.Window {
@@ -47,10 +48,10 @@ namespace FSpot {
Resize (geom.Width, geom.Height);
return;
} catch (System.Exception e) {
- System.Console.WriteLine (e);
+ Hyena.Log.Exception (e);
}
} else {
- System.Console.WriteLine ("{0} not set, falling back to window", ScreenSaverEnviroment);
+ Hyena.Log.DebugFormat ("{0} not set, falling back to window", ScreenSaverEnviroment);
}
SetSizeRequest (640, 480);
diff --git a/src/XmpTagsImporter.cs b/src/XmpTagsImporter.cs
index 6404179..990eb38 100644
--- a/src/XmpTagsImporter.cs
+++ b/src/XmpTagsImporter.cs
@@ -18,7 +18,7 @@ using FSpot.Xmp;
using SemWeb;
using SemWeb.Util;
using Mono.Unix;
-using FSpot.Utils;
+using Hyena;
namespace FSpot.Xmp {
internal class XmpTagsImporter {
@@ -200,7 +200,7 @@ namespace FSpot.Xmp {
tmp_ui = System.Convert.ToUInt32 (l.Value);
} catch {
// Set rating to 0, and continue
- Log.Debug ("Found illegal rating >{0}< in predicate {1}. Rating cleared",
+ Log.DebugFormat ("Found illegal rating >{0}< in predicate {1}. Rating cleared",
l.Value, stmt.Predicate.Uri);
tmp_ui = 0;
}
@@ -271,10 +271,13 @@ namespace FSpot.Xmp {
#endif
}
- public bool Import (Photo photo, string path, string orig_path)
+ public bool Import (Photo photo, SafeUri uri, SafeUri orig_uri)
{
XmpFile xmp;
+ string path = uri.AbsolutePath;
+ string orig_path = orig_uri.AbsolutePath;
+
string source_sidecar = String.Format ("{0}{1}{2}.xmp",
Path.GetDirectoryName (orig_path),
Path.DirectorySeparatorChar,
@@ -293,7 +296,7 @@ namespace FSpot.Xmp {
xmp = new XmpFile ();
}
- using (ImageFile img = ImageFile.Create (path)) {
+ using (ImageFile img = ImageFile.Create (uri)) {
StatementSource source = img as StatementSource;
if (source != null) {
try {
diff --git a/src/f-spot.exe.config b/src/f-spot.exe.config
new file mode 100644
index 0000000..c16e02c
--- /dev/null
+++ b/src/f-spot.exe.config
@@ -0,0 +1,16 @@
+<configuration>
+ <dllmap dll="libglib-2.0-0.dll" target="libglib-2.0.so.0"/>
+ <dllmap dll="libgobject-2.0-0.dll" target="libgobject-2.0.so.0"/>
+ <dllmap dll="libgtk-win32-2.0-0.dll" target="libgtk-x11-2.0.so.0"/>
+ <dllmap dll="libgdk-2.0-0.dll" target="libgdk-x11-2.0.so.0"/>
+ <dllmap dll="libgdk_pixbuf-2.0-0.dll" target="libgdk_pixbuf-2.0.so.0"/>
+ <dllmap dll="libgnomevfs-2-0.dll" target="libgnomevfs-2.so.0"/>
+ <dllmap dll="libgnomeui-2-0.dll" target="libgnomeui-2.so.0"/>
+ <dllmap dll="libfspot" target="/home/ruben/Build/lib64/f-spot/libfspot.so.0"/>
+ <dllmap dll="libfspotjpeg" target="/home/ruben/Build/lib64/f-spot/libfspotjpg.so.0"/>
+ <dllmap dll="X11" target="libX11.so.6"/>
+ <dllmap dll="GL" target="libGL.so.1"/>
+ <dllmap dll="libXcomposite.dll" target="libXcomposite.so.1"/>
+ <dllmap dll="liblcms-1.0.0.dll" target="liblcms.so.1"/>
+ <dllmap dll="libexif.dll" target="libexif.so.12"/>
+</configuration>
diff --git a/src/f-spot.glade b/src/f-spot.glade
index 2b05d2b..a23701e 100644
--- a/src/f-spot.glade
+++ b/src/f-spot.glade
@@ -4,103 +4,6 @@
<glade-interface>
<requires lib="canvas"/>
<requires lib="gnome"/>
- <widget class="GtkDialog" id="version_name_dialog">
- <property name="border_width">6</property>
- <property name="modal">True</property>
- <property name="destroy_with_parent">True</property>
- <property name="type_hint">GDK_WINDOW_TYPE_HINT_DIALOG</property>
- <property name="has_separator">False</property>
- <child internal-child="vbox">
- <widget class="GtkVBox" id="dialog-vbox1">
- <property name="visible">True</property>
- <property name="spacing">2</property>
- <child>
- <widget class="GtkHBox" id="hbox1">
- <property name="visible">True</property>
- <property name="spacing">6</property>
- <child>
- <widget class="GtkLabel" id="prompt_label">
- <property name="visible">True</property>
- </widget>
- <packing>
- <property name="expand">False</property>
- <property name="fill">False</property>
- </packing>
- </child>
- <child>
- <widget class="GtkEntry" id="version_name_entry">
- <property name="width_request">200</property>
- <property name="visible">True</property>
- <property name="can_focus">True</property>
- <property name="invisible_char">*</property>
- <signal name="changed" handler="HandleVersionNameEntryChanged"/>
- </widget>
- <packing>
- <property name="position">1</property>
- </packing>
- </child>
- </widget>
- <packing>
- <property name="expand">False</property>
- <property name="padding">6</property>
- <property name="position">1</property>
- </packing>
- </child>
- <child>
- <widget class="GtkAlignment" id="alignment1">
- <property name="visible">True</property>
- <property name="xalign">0</property>
- <property name="xscale">0</property>
- <child>
- <widget class="GtkLabel" id="already_in_use_label">
- <property name="visible">True</property>
- <property name="label"><small> </small></property>
- <property name="use_markup">True</property>
- </widget>
- </child>
- </widget>
- <packing>
- <property name="fill">False</property>
- <property name="position">2</property>
- </packing>
- </child>
- <child internal-child="action_area">
- <widget class="GtkHButtonBox" id="dialog-action_area1">
- <property name="visible">True</property>
- <property name="layout_style">GTK_BUTTONBOX_END</property>
- <child>
- <widget class="GtkButton" id="cancel_button">
- <property name="visible">True</property>
- <property name="can_focus">True</property>
- <property name="can_default">True</property>
- <property name="label">gtk-cancel</property>
- <property name="use_stock">True</property>
- <property name="response_id">-6</property>
- </widget>
- </child>
- <child>
- <widget class="GtkButton" id="ok_button">
- <property name="visible">True</property>
- <property name="can_focus">True</property>
- <property name="can_default">True</property>
- <property name="label">gtk-ok</property>
- <property name="use_stock">True</property>
- <property name="response_id">-5</property>
- </widget>
- <packing>
- <property name="position">1</property>
- </packing>
- </child>
- </widget>
- <packing>
- <property name="expand">False</property>
- <property name="padding">2</property>
- <property name="pack_type">GTK_PACK_END</property>
- </packing>
- </child>
- </widget>
- </child>
- </widget>
<widget class="GtkDialog" id="create_tag_dialog">
<property name="border_width">6</property>
<property name="modal">True</property>
@@ -257,476 +160,6 @@
</widget>
</child>
</widget>
- <widget class="GtkDialog" id="slide_show_dialog">
- <property name="visible">True</property>
- <property name="border_width">6</property>
- <property name="title">dialog1</property>
- <property name="type_hint">GDK_WINDOW_TYPE_HINT_DIALOG</property>
- <property name="has_separator">False</property>
- <child internal-child="vbox">
- <widget class="GtkVBox" id="dialog-vbox2">
- <property name="visible">True</property>
- <child>
- <widget class="GtkVBox" id="view_vbox">
- <property name="visible">True</property>
- <property name="spacing">5</property>
- <child>
- <placeholder/>
- </child>
- <child>
- <widget class="GtkHBox" id="hbox2">
- <property name="visible">True</property>
- <property name="spacing">6</property>
- <child>
- <widget class="GtkButton" id="prev_button">
- <property name="visible">True</property>
- <property name="can_focus">True</property>
- <property name="label" translatable="yes">Previous</property>
- <property name="use_underline">True</property>
- <property name="response_id">0</property>
- </widget>
- <packing>
- <property name="expand">False</property>
- <property name="fill">False</property>
- </packing>
- </child>
- <child>
- <widget class="GtkButton" id="pause_button">
- <property name="visible">True</property>
- <property name="can_focus">True</property>
- <property name="label" translatable="yes">Pause</property>
- <property name="use_underline">True</property>
- <property name="response_id">0</property>
- </widget>
- <packing>
- <property name="expand">False</property>
- <property name="fill">False</property>
- <property name="position">1</property>
- </packing>
- </child>
- <child>
- <widget class="GtkButton" id="next_button">
- <property name="visible">True</property>
- <property name="can_focus">True</property>
- <property name="label" translatable="yes">Next</property>
- <property name="use_underline">True</property>
- <property name="response_id">0</property>
- </widget>
- <packing>
- <property name="expand">False</property>
- <property name="fill">False</property>
- <property name="position">2</property>
- </packing>
- </child>
- </widget>
- <packing>
- <property name="position">1</property>
- </packing>
- </child>
- </widget>
- <packing>
- <property name="position">1</property>
- </packing>
- </child>
- <child internal-child="action_area">
- <widget class="GtkHButtonBox" id="dialog-action_area2">
- <property name="visible">True</property>
- <property name="layout_style">GTK_BUTTONBOX_END</property>
- <child>
- <widget class="GtkButton" id="close_button">
- <property name="visible">True</property>
- <property name="can_focus">True</property>
- <property name="can_default">True</property>
- <property name="label">gtk-close</property>
- <property name="use_stock">True</property>
- <property name="response_id">-7</property>
- </widget>
- </child>
- </widget>
- <packing>
- <property name="expand">False</property>
- <property name="pack_type">GTK_PACK_END</property>
- </packing>
- </child>
- </widget>
- </child>
- </widget>
- <widget class="GtkDialog" id="export-dialog">
- <property name="visible">True</property>
- <property name="title" translatable="yes">Export</property>
- <property name="type_hint">GDK_WINDOW_TYPE_HINT_DIALOG</property>
- <child internal-child="vbox">
- <widget class="GtkVBox" id="dialog-vbox6">
- <property name="visible">True</property>
- <child>
- <widget class="GtkNotebook" id="notebook1">
- <property name="visible">True</property>
- <property name="can_focus">True</property>
- <child>
- <widget class="GtkHBox" id="hbox3">
- <property name="visible">True</property>
- <property name="border_width">6</property>
- <property name="spacing">6</property>
- <child>
- <widget class="GtkScrolledWindow" id="scrolledwindow1">
- <property name="visible">True</property>
- <property name="can_focus">True</property>
- <property name="hscrollbar_policy">GTK_POLICY_AUTOMATIC</property>
- <property name="vscrollbar_policy">GTK_POLICY_AUTOMATIC</property>
- <property name="shadow_type">GTK_SHADOW_IN</property>
- <child>
- <widget class="GtkTreeView" id="treeview1">
- <property name="visible">True</property>
- <property name="can_focus">True</property>
- </widget>
- </child>
- </widget>
- </child>
- <child>
- <widget class="GtkVBox" id="vbox2">
- <property name="visible">True</property>
- <property name="spacing">6</property>
- <child>
- <widget class="GtkButton" id="button1">
- <property name="visible">True</property>
- <property name="can_focus">True</property>
- <property name="label">gtk-add</property>
- <property name="use_stock">True</property>
- <property name="response_id">0</property>
- </widget>
- <packing>
- <property name="expand">False</property>
- <property name="fill">False</property>
- </packing>
- </child>
- <child>
- <widget class="GtkButton" id="button2">
- <property name="visible">True</property>
- <property name="can_focus">True</property>
- <property name="label">gtk-remove</property>
- <property name="use_stock">True</property>
- <property name="response_id">0</property>
- </widget>
- <packing>
- <property name="expand">False</property>
- <property name="fill">False</property>
- <property name="position">1</property>
- </packing>
- </child>
- <child>
- <widget class="GtkButton" id="button3">
- <property name="visible">True</property>
- <property name="can_focus">True</property>
- <property name="label">gtk-properties</property>
- <property name="use_stock">True</property>
- <property name="response_id">0</property>
- </widget>
- <packing>
- <property name="expand">False</property>
- <property name="fill">False</property>
- <property name="position">2</property>
- </packing>
- </child>
- </widget>
- <packing>
- <property name="expand">False</property>
- <property name="position">1</property>
- </packing>
- </child>
- </widget>
- <packing>
- <property name="tab_expand">False</property>
- </packing>
- </child>
- <child>
- <widget class="GtkLabel" id="label12">
- <property name="visible">True</property>
- <property name="label" translatable="yes">Gallery</property>
- </widget>
- <packing>
- <property name="type">tab</property>
- <property name="tab_expand">False</property>
- <property name="tab_fill">False</property>
- </packing>
- </child>
- <child>
- <placeholder/>
- </child>
- <child>
- <widget class="GtkLabel" id="label13">
- <property name="visible">True</property>
- <property name="label" translatable="yes">File</property>
- </widget>
- <packing>
- <property name="type">tab</property>
- <property name="position">1</property>
- <property name="tab_expand">False</property>
- <property name="tab_fill">False</property>
- </packing>
- </child>
- <child>
- <placeholder/>
- </child>
- <child>
- <widget class="GtkLabel" id="label14">
- <property name="visible">True</property>
- <property name="label" translatable="yes">CD</property>
- </widget>
- <packing>
- <property name="type">tab</property>
- <property name="position">2</property>
- <property name="tab_expand">False</property>
- <property name="tab_fill">False</property>
- </packing>
- </child>
- </widget>
- <packing>
- <property name="position">2</property>
- </packing>
- </child>
- <child internal-child="action_area">
- <widget class="GtkHButtonBox" id="dialog-action_area6">
- <property name="visible">True</property>
- <property name="layout_style">GTK_BUTTONBOX_END</property>
- <child>
- <widget class="GtkButton" id="closebutton1">
- <property name="visible">True</property>
- <property name="can_focus">True</property>
- <property name="can_default">True</property>
- <property name="label">gtk-close</property>
- <property name="use_stock">True</property>
- <property name="response_id">-7</property>
- </widget>
- </child>
- </widget>
- <packing>
- <property name="expand">False</property>
- <property name="pack_type">GTK_PACK_END</property>
- </packing>
- </child>
- </widget>
- </child>
- </widget>
- <widget class="GtkDialog" id="camera_selection_dialog">
- <property name="visible">True</property>
- <property name="title" translatable="yes">Camera Selection</property>
- <property name="modal">True</property>
- <property name="window_position">GTK_WIN_POS_CENTER</property>
- <property name="type_hint">GDK_WINDOW_TYPE_HINT_DIALOG</property>
- <property name="has_separator">False</property>
- <child internal-child="vbox">
- <widget class="GtkVBox" id="dialog-vbox7">
- <property name="visible">True</property>
- <child>
- <widget class="GtkScrolledWindow" id="scrolledwindow2">
- <property name="visible">True</property>
- <property name="can_focus">True</property>
- <property name="border_width">6</property>
- <property name="hscrollbar_policy">GTK_POLICY_AUTOMATIC</property>
- <property name="vscrollbar_policy">GTK_POLICY_AUTOMATIC</property>
- <property name="shadow_type">GTK_SHADOW_IN</property>
- <child>
- <widget class="GtkTreeView" id="cameraList">
- <property name="width_request">300</property>
- <property name="visible">True</property>
- <property name="can_focus">True</property>
- <property name="tooltip" translatable="yes">Select the camera from which you want to transfer files</property>
- <property name="rules_hint">True</property>
- </widget>
- </child>
- </widget>
- <packing>
- <property name="position">1</property>
- </packing>
- </child>
- <child internal-child="action_area">
- <widget class="GtkHButtonBox" id="dialog-action_area7">
- <property name="visible">True</property>
- <property name="layout_style">GTK_BUTTONBOX_END</property>
- <child>
- <widget class="GtkButton" id="cancelButton">
- <property name="visible">True</property>
- <property name="can_focus">True</property>
- <property name="can_default">True</property>
- <property name="label">gtk-cancel</property>
- <property name="use_stock">True</property>
- <property name="response_id">-6</property>
- </widget>
- </child>
- <child>
- <widget class="GtkButton" id="OKButton">
- <property name="visible">True</property>
- <property name="can_focus">True</property>
- <property name="can_default">True</property>
- <property name="label">gtk-ok</property>
- <property name="use_stock">True</property>
- <property name="response_id">-5</property>
- </widget>
- <packing>
- <property name="position">1</property>
- </packing>
- </child>
- </widget>
- <packing>
- <property name="expand">False</property>
- <property name="pack_type">GTK_PACK_END</property>
- </packing>
- </child>
- </widget>
- </child>
- </widget>
- <widget class="GtkDialog" id="camera_file_selection_dialog">
- <property name="width_request">500</property>
- <property name="height_request">500</property>
- <property name="visible">True</property>
- <property name="title" translatable="yes">Select Photos to Copy From Camera...</property>
- <property name="type_hint">GDK_WINDOW_TYPE_HINT_DIALOG</property>
- <property name="has_separator">False</property>
- <child internal-child="vbox">
- <widget class="GtkVBox" id="dialog-vbox8">
- <property name="visible">True</property>
- <child>
- <widget class="GtkVBox" id="vbox3">
- <property name="visible">True</property>
- <property name="border_width">8</property>
- <property name="spacing">6</property>
- <child>
- <widget class="GtkHBox" id="hbox4">
- <property name="visible">True</property>
- <child>
- <widget class="GtkLabel" id="selected_camera_label">
- <property name="visible">True</property>
- <property name="label" translatable="yes">Selected Camera: </property>
- </widget>
- <packing>
- <property name="expand">False</property>
- <property name="fill">False</property>
- </packing>
- </child>
- <child>
- <widget class="GtkLabel" id="selected_camera_name">
- <property name="visible">True</property>
- <property name="label" translatable="yes"> </property>
- </widget>
- <packing>
- <property name="expand">False</property>
- <property name="fill">False</property>
- <property name="position">1</property>
- </packing>
- </child>
- </widget>
- <packing>
- <property name="expand">False</property>
- </packing>
- </child>
- <child>
- <widget class="GtkScrolledWindow" id="scrolledwindow3">
- <property name="visible">True</property>
- <property name="can_focus">True</property>
- <property name="hscrollbar_policy">GTK_POLICY_AUTOMATIC</property>
- <property name="vscrollbar_policy">GTK_POLICY_AUTOMATIC</property>
- <property name="shadow_type">GTK_SHADOW_IN</property>
- <child>
- <widget class="GtkTreeView" id="file_tree">
- <property name="visible">True</property>
- <property name="can_focus">True</property>
- <property name="rules_hint">True</property>
- </widget>
- </child>
- </widget>
- <packing>
- <property name="position">1</property>
- </packing>
- </child>
- <child>
- <widget class="GtkHBox" id="hbox95">
- <property name="visible">True</property>
- <child>
- <widget class="GtkCheckButton" id="attach_check">
- <property name="visible">True</property>
- <property name="can_focus">True</property>
- <property name="label" translatable="yes">Attach tag:</property>
- <property name="use_underline">True</property>
- <property name="response_id">0</property>
- <property name="draw_indicator">True</property>
- </widget>
- <packing>
- <property name="expand">False</property>
- <property name="fill">False</property>
- </packing>
- </child>
- <child>
- <widget class="GtkOptionMenu" id="tag_option_menu">
- <property name="visible">True</property>
- <property name="can_focus">True</property>
- <property name="response_id">0</property>
- </widget>
- <packing>
- <property name="position">1</property>
- </packing>
- </child>
- </widget>
- <packing>
- <property name="expand">False</property>
- <property name="position">2</property>
- </packing>
- </child>
- <child>
- <widget class="GtkCheckButton" id="duplicate_check">
- <property name="visible">True</property>
- <property name="can_focus">True</property>
- <property name="label" translatable="yes">Detect duplicates</property>
- <property name="use_underline">True</property>
- <property name="response_id">0</property>
- <property name="active">True</property>
- <property name="draw_indicator">True</property>
- </widget>
- <packing>
- <property name="expand">False</property>
- <property name="fill">False</property>
- </packing>
- </child>
- </widget>
- <packing>
- <property name="position">1</property>
- </packing>
- </child>
- <child internal-child="action_area">
- <widget class="GtkHButtonBox" id="dialog-action_area8">
- <property name="visible">True</property>
- <property name="layout_style">GTK_BUTTONBOX_END</property>
- <child>
- <widget class="GtkButton" id="cancelButton">
- <property name="visible">True</property>
- <property name="can_focus">True</property>
- <property name="can_default">True</property>
- <property name="label">gtk-cancel</property>
- <property name="use_stock">True</property>
- <property name="response_id">-6</property>
- </widget>
- </child>
- <child>
- <widget class="GtkButton" id="copyButton">
- <property name="visible">True</property>
- <property name="can_focus">True</property>
- <property name="can_default">True</property>
- <property name="label">gtk-copy</property>
- <property name="use_stock">True</property>
- <property name="response_id">-5</property>
- </widget>
- <packing>
- <property name="position">1</property>
- </packing>
- </child>
- </widget>
- <packing>
- <property name="expand">False</property>
- <property name="pack_type">GTK_PACK_END</property>
- </packing>
- </child>
- </widget>
- </child>
- </widget>
<widget class="GtkDialog" id="tag_selection_dialog">
<property name="width_request">300</property>
<property name="height_request">300</property>
@@ -907,1440 +340,6 @@
</widget>
</child>
</widget>
- <widget class="GtkDialog" id="vfs_export_dialog">
- <property name="title" translatable="yes">Export</property>
- <property name="type_hint">GDK_WINDOW_TYPE_HINT_DIALOG</property>
- <property name="has_separator">False</property>
- <child internal-child="vbox">
- <widget class="GtkVBox" id="vbox15">
- <property name="visible">True</property>
- <child>
- <widget class="GtkHBox" id="hbox22">
- <property name="visible">True</property>
- <property name="border_width">6</property>
- <child>
- <widget class="GtkFrame" id="frame12">
- <property name="visible">True</property>
- <property name="label_xalign">0</property>
- <property name="shadow_type">GTK_SHADOW_NONE</property>
- <child>
- <widget class="GtkAlignment" id="alignment16">
- <property name="visible">True</property>
- <property name="left_padding">12</property>
- <child>
- <widget class="GtkScrolledWindow" id="thumb_scrolledwindow">
- <property name="width_request">180</property>
- <property name="visible">True</property>
- <property name="can_focus">True</property>
- <property name="hscrollbar_policy">GTK_POLICY_AUTOMATIC</property>
- <property name="vscrollbar_policy">GTK_POLICY_AUTOMATIC</property>
- <property name="shadow_type">GTK_SHADOW_IN</property>
- <child>
- <placeholder/>
- </child>
- </widget>
- </child>
- </widget>
- </child>
- <child>
- <widget class="GtkLabel" id="label52">
- <property name="visible">True</property>
- <property name="label" translatable="yes"><b>Photos</b></property>
- <property name="use_markup">True</property>
- </widget>
- <packing>
- <property name="type">label_item</property>
- </packing>
- </child>
- </widget>
- </child>
- <child>
- <widget class="GtkVBox" id="vbox16">
- <property name="visible">True</property>
- <property name="spacing">6</property>
- <child>
- <widget class="GtkFrame" id="frame13">
- <property name="visible">True</property>
- <property name="label_xalign">0</property>
- <property name="shadow_type">GTK_SHADOW_NONE</property>
- <child>
- <widget class="GtkAlignment" id="alignment17">
- <property name="visible">True</property>
- <property name="left_padding">12</property>
- <child>
- <widget class="GtkVBox" id="vbox17">
- <property name="visible">True</property>
- <property name="spacing">6</property>
- <child>
- <widget class="GtkHBox" id="hbox23">
- <property name="visible">True</property>
- <property name="spacing">6</property>
- <child>
- <widget class="GtkLabel" id="label53">
- <property name="visible">True</property>
- <property name="label" translatable="yes">_URI:</property>
- <property name="use_underline">True</property>
- <property name="mnemonic_widget">uri_entry</property>
- </widget>
- <packing>
- <property name="expand">False</property>
- <property name="fill">False</property>
- </packing>
- </child>
- <child>
- <widget class="GtkEntry" id="uri_entry">
- <property name="visible">True</property>
- <property name="can_focus">True</property>
- <property name="invisible_char">*</property>
- </widget>
- <packing>
- <property name="position">1</property>
- </packing>
- </child>
- </widget>
- </child>
- <child>
- <widget class="GtkCheckButton" id="open_check">
- <property name="visible">True</property>
- <property name="can_focus">True</property>
- <property name="label" translatable="yes">_Open destination when done exporting</property>
- <property name="use_underline">True</property>
- <property name="response_id">0</property>
- <property name="active">True</property>
- <property name="draw_indicator">True</property>
- </widget>
- <packing>
- <property name="expand">False</property>
- <property name="fill">False</property>
- <property name="position">1</property>
- </packing>
- </child>
- <child>
- <widget class="GtkLabel" id="label54">
- <property name="visible">True</property>
- </widget>
- <packing>
- <property name="expand">False</property>
- <property name="fill">False</property>
- <property name="position">2</property>
- </packing>
- </child>
- </widget>
- </child>
- </widget>
- </child>
- <child>
- <widget class="GtkLabel" id="label55">
- <property name="visible">True</property>
- <property name="label" translatable="yes"><b>Destination</b></property>
- <property name="use_markup">True</property>
- </widget>
- <packing>
- <property name="type">label_item</property>
- </packing>
- </child>
- </widget>
- <packing>
- <property name="expand">False</property>
- <property name="fill">False</property>
- </packing>
- </child>
- <child>
- <widget class="GtkFrame" id="frame15">
- <property name="visible">True</property>
- <property name="label_xalign">0</property>
- <property name="shadow_type">GTK_SHADOW_NONE</property>
- <child>
- <widget class="GtkAlignment" id="alignment19">
- <property name="visible">True</property>
- <property name="left_padding">12</property>
- <child>
- <widget class="GtkVBox" id="vbox19">
- <property name="visible">True</property>
- <property name="spacing">6</property>
- <child>
- <widget class="GtkHBox" id="hbox25">
- <property name="visible">True</property>
- <child>
- <widget class="GtkCheckButton" id="scale_check">
- <property name="visible">True</property>
- <property name="can_focus">True</property>
- <property name="label" translatable="yes">_Resize to: </property>
- <property name="use_underline">True</property>
- <property name="response_id">0</property>
- <property name="draw_indicator">True</property>
- <signal name="toggled" handler="HandleSizeActive"/>
- </widget>
- <packing>
- <property name="expand">False</property>
- <property name="fill">False</property>
- </packing>
- </child>
- <child>
- <widget class="GtkSpinButton" id="size_spin">
- <property name="visible">True</property>
- <property name="can_focus">True</property>
- <property name="adjustment">400 0 10000 1 10 10</property>
- <property name="climb_rate">1</property>
- </widget>
- <packing>
- <property name="expand">False</property>
- <property name="fill">False</property>
- <property name="position">1</property>
- </packing>
- </child>
- <child>
- <widget class="GtkLabel" id="label134">
- <property name="visible">True</property>
- <property name="label" translatable="yes">pixels</property>
- </widget>
- <packing>
- <property name="expand">False</property>
- <property name="fill">False</property>
- <property name="position">2</property>
- </packing>
- </child>
- <child>
- <placeholder/>
- </child>
- </widget>
- </child>
- <child>
- <widget class="GtkCheckButton" id="meta_check">
- <property name="can_focus">True</property>
- <property name="label" translatable="yes">_Strip metadata</property>
- <property name="use_underline">True</property>
- <property name="response_id">0</property>
- <property name="draw_indicator">True</property>
- </widget>
- <packing>
- <property name="expand">False</property>
- <property name="fill">False</property>
- <property name="position">1</property>
- </packing>
- </child>
- </widget>
- </child>
- </widget>
- </child>
- <child>
- <widget class="GtkLabel" id="label59">
- <property name="visible">True</property>
- <property name="label" translatable="yes"><b>Style</b></property>
- <property name="use_markup">True</property>
- </widget>
- <packing>
- <property name="type">label_item</property>
- </packing>
- </child>
- </widget>
- <packing>
- <property name="expand">False</property>
- <property name="fill">False</property>
- <property name="position">1</property>
- </packing>
- </child>
- </widget>
- <packing>
- <property name="position">1</property>
- </packing>
- </child>
- </widget>
- <packing>
- <property name="position">1</property>
- </packing>
- </child>
- <child internal-child="action_area">
- <widget class="GtkHButtonBox" id="hbuttonbox4">
- <property name="visible">True</property>
- <property name="layout_style">GTK_BUTTONBOX_END</property>
- <child>
- <widget class="GtkButton" id="button7">
- <property name="visible">True</property>
- <property name="can_focus">True</property>
- <property name="can_default">True</property>
- <property name="label">gtk-cancel</property>
- <property name="use_stock">True</property>
- <property name="response_id">-6</property>
- </widget>
- </child>
- <child>
- <widget class="GtkButton" id="button8">
- <property name="visible">True</property>
- <property name="can_focus">True</property>
- <property name="can_default">True</property>
- <property name="label">gtk-ok</property>
- <property name="use_stock">True</property>
- <property name="response_id">-5</property>
- </widget>
- <packing>
- <property name="position">1</property>
- </packing>
- </child>
- </widget>
- <packing>
- <property name="expand">False</property>
- <property name="pack_type">GTK_PACK_END</property>
- </packing>
- </child>
- </widget>
- </child>
- </widget>
- <widget class="GtkDialog" id="combined_export_dialog">
- <property name="title" translatable="yes">Export</property>
- <property name="type_hint">GDK_WINDOW_TYPE_HINT_DIALOG</property>
- <property name="has_separator">False</property>
- <child internal-child="vbox">
- <widget class="GtkVBox" id="vbox20">
- <property name="visible">True</property>
- <child>
- <widget class="GtkHBox" id="hbox26">
- <property name="visible">True</property>
- <property name="border_width">6</property>
- <child>
- <widget class="GtkFrame" id="frame16">
- <property name="visible">True</property>
- <property name="label_xalign">0</property>
- <property name="shadow_type">GTK_SHADOW_NONE</property>
- <child>
- <widget class="GtkAlignment" id="alignment20">
- <property name="visible">True</property>
- <property name="left_padding">12</property>
- <child>
- <widget class="GtkScrolledWindow" id="scrolledwindow3">
- <property name="width_request">180</property>
- <property name="visible">True</property>
- <property name="can_focus">True</property>
- <property name="hscrollbar_policy">GTK_POLICY_AUTOMATIC</property>
- <property name="vscrollbar_policy">GTK_POLICY_AUTOMATIC</property>
- <property name="shadow_type">GTK_SHADOW_IN</property>
- <child>
- <placeholder/>
- </child>
- </widget>
- </child>
- </widget>
- </child>
- <child>
- <widget class="GtkLabel" id="label60">
- <property name="visible">True</property>
- <property name="label" translatable="yes"><b>Photos</b></property>
- <property name="use_markup">True</property>
- </widget>
- <packing>
- <property name="type">label_item</property>
- </packing>
- </child>
- </widget>
- </child>
- <child>
- <widget class="GtkFrame" id="frame25">
- <property name="visible">True</property>
- <property name="label_xalign">0</property>
- <property name="shadow_type">GTK_SHADOW_NONE</property>
- <child>
- <widget class="GtkAlignment" id="alignment29">
- <property name="visible">True</property>
- <property name="left_padding">12</property>
- <child>
- <widget class="GtkNotebook" id="notebook2">
- <property name="visible">True</property>
- <property name="can_focus">True</property>
- <child>
- <widget class="GtkVBox" id="vbox21">
- <property name="visible">True</property>
- <property name="spacing">6</property>
- <child>
- <widget class="GtkFrame" id="frame17">
- <property name="visible">True</property>
- <property name="label_xalign">0</property>
- <property name="shadow_type">GTK_SHADOW_NONE</property>
- <child>
- <widget class="GtkAlignment" id="alignment21">
- <property name="visible">True</property>
- <property name="left_padding">12</property>
- <child>
- <widget class="GtkVBox" id="vbox22">
- <property name="visible">True</property>
- <property name="spacing">6</property>
- <child>
- <widget class="GtkHBox" id="hbox27">
- <property name="visible">True</property>
- <property name="spacing">6</property>
- <child>
- <widget class="GtkLabel" id="label61">
- <property name="visible">True</property>
- <property name="label" translatable="yes">G_allery:</property>
- <property name="use_underline">True</property>
- <property name="mnemonic_widget">optionmenu1</property>
- </widget>
- <packing>
- <property name="expand">False</property>
- <property name="fill">False</property>
- </packing>
- </child>
- <child>
- <widget class="GtkOptionMenu" id="optionmenu1">
- <property name="visible">True</property>
- <property name="can_focus">True</property>
- <property name="response_id">0</property>
- <signal name="changed" handler="HandleAccountSelected"/>
- </widget>
- <packing>
- <property name="position">1</property>
- </packing>
- </child>
- <child>
- <widget class="GtkButton" id="button11">
- <property name="visible">True</property>
- <property name="can_focus">True</property>
- <property name="label">gtk-add</property>
- <property name="use_stock">True</property>
- <property name="response_id">0</property>
- <signal name="clicked" handler="HandleAddGallery"/>
- </widget>
- <packing>
- <property name="expand">False</property>
- <property name="fill">False</property>
- <property name="position">2</property>
- </packing>
- </child>
- </widget>
- </child>
- <child>
- <widget class="GtkLabel" id="label62">
- <property name="visible">True</property>
- </widget>
- <packing>
- <property name="expand">False</property>
- <property name="fill">False</property>
- <property name="position">1</property>
- </packing>
- </child>
- </widget>
- </child>
- </widget>
- </child>
- <child>
- <widget class="GtkLabel" id="label63">
- <property name="visible">True</property>
- <property name="label" translatable="yes"><b>Gallery</b></property>
- <property name="use_markup">True</property>
- </widget>
- <packing>
- <property name="type">label_item</property>
- </packing>
- </child>
- </widget>
- <packing>
- <property name="expand">False</property>
- <property name="fill">False</property>
- </packing>
- </child>
- <child>
- <widget class="GtkFrame" id="frame18">
- <property name="visible">True</property>
- <property name="label_xalign">0</property>
- <property name="shadow_type">GTK_SHADOW_NONE</property>
- <child>
- <widget class="GtkAlignment" id="alignment22">
- <property name="visible">True</property>
- <property name="left_padding">12</property>
- <child>
- <widget class="GtkVBox" id="vbox23">
- <property name="visible">True</property>
- <property name="spacing">6</property>
- <child>
- <widget class="GtkHBox" id="hbox28">
- <property name="visible">True</property>
- <property name="spacing">6</property>
- <child>
- <widget class="GtkLabel" id="label64">
- <property name="visible">True</property>
- <property name="label" translatable="yes">_Export to Album:</property>
- <property name="use_underline">True</property>
- <property name="mnemonic_widget">optionmenu2</property>
- </widget>
- <packing>
- <property name="expand">False</property>
- <property name="fill">False</property>
- </packing>
- </child>
- <child>
- <widget class="GtkOptionMenu" id="optionmenu2">
- <property name="visible">True</property>
- <property name="can_focus">True</property>
- <property name="response_id">0</property>
- </widget>
- <packing>
- <property name="position">1</property>
- </packing>
- </child>
- <child>
- <widget class="GtkButton" id="button12">
- <property name="visible">True</property>
- <property name="can_focus">True</property>
- <property name="label">gtk-add</property>
- <property name="use_stock">True</property>
- <property name="response_id">0</property>
- </widget>
- <packing>
- <property name="expand">False</property>
- <property name="fill">False</property>
- <property name="position">2</property>
- </packing>
- </child>
- </widget>
- </child>
- <child>
- <widget class="GtkCheckButton" id="checkbutton6">
- <property name="visible">True</property>
- <property name="can_focus">True</property>
- <property name="label" translatable="yes">_Open album in browser when done uploading</property>
- <property name="use_underline">True</property>
- <property name="response_id">0</property>
- <property name="draw_indicator">True</property>
- </widget>
- <packing>
- <property name="expand">False</property>
- <property name="fill">False</property>
- <property name="position">1</property>
- </packing>
- </child>
- </widget>
- </child>
- </widget>
- </child>
- <child>
- <widget class="GtkLabel" id="label65">
- <property name="visible">True</property>
- <property name="label" translatable="yes"><b>Album</b></property>
- <property name="use_markup">True</property>
- </widget>
- <packing>
- <property name="type">label_item</property>
- </packing>
- </child>
- </widget>
- <packing>
- <property name="expand">False</property>
- <property name="fill">False</property>
- <property name="position">1</property>
- </packing>
- </child>
- <child>
- <widget class="GtkFrame" id="frame19">
- <property name="visible">True</property>
- <property name="label_xalign">0</property>
- <property name="shadow_type">GTK_SHADOW_NONE</property>
- <child>
- <widget class="GtkAlignment" id="alignment23">
- <property name="visible">True</property>
- <property name="left_padding">12</property>
- <child>
- <widget class="GtkVBox" id="vbox24">
- <property name="visible">True</property>
- <property name="spacing">6</property>
- <child>
- <widget class="GtkHBox" id="hbox29">
- <property name="visible">True</property>
- <child>
- <widget class="GtkCheckButton" id="checkbutton7">
- <property name="visible">True</property>
- <property name="can_focus">True</property>
- <property name="label" translatable="yes">_Scale photos to no larger than: </property>
- <property name="use_underline">True</property>
- <property name="response_id">0</property>
- <property name="draw_indicator">True</property>
- </widget>
- <packing>
- <property name="expand">False</property>
- </packing>
- </child>
- <child>
- <widget class="GtkEntry" id="entry7">
- <property name="visible">True</property>
- <property name="can_focus">True</property>
- <property name="max_length">3</property>
- <property name="invisible_char">*</property>
- <property name="width_chars">5</property>
- </widget>
- <packing>
- <property name="expand">False</property>
- <property name="fill">False</property>
- <property name="position">1</property>
- </packing>
- </child>
- <child>
- <widget class="GtkLabel" id="label66">
- <property name="visible">True</property>
- <property name="label" translatable="yes">x</property>
- </widget>
- <packing>
- <property name="expand">False</property>
- <property name="fill">False</property>
- <property name="position">2</property>
- </packing>
- </child>
- <child>
- <widget class="GtkEntry" id="entry8">
- <property name="visible">True</property>
- <property name="can_focus">True</property>
- <property name="invisible_char">*</property>
- <property name="width_chars">5</property>
- </widget>
- <packing>
- <property name="expand">False</property>
- <property name="fill">False</property>
- <property name="position">3</property>
- </packing>
- </child>
- </widget>
- </child>
- <child>
- <widget class="GtkCheckButton" id="checkbutton8">
- <property name="visible">True</property>
- <property name="can_focus">True</property>
- <property name="label" translatable="yes">E_xport titles and comments</property>
- <property name="use_underline">True</property>
- <property name="response_id">0</property>
- <property name="draw_indicator">True</property>
- </widget>
- <packing>
- <property name="expand">False</property>
- <property name="fill">False</property>
- <property name="position">1</property>
- </packing>
- </child>
- </widget>
- </child>
- </widget>
- </child>
- <child>
- <widget class="GtkLabel" id="label67">
- <property name="visible">True</property>
- <property name="label" translatable="yes"><b>Style</b></property>
- <property name="use_markup">True</property>
- </widget>
- <packing>
- <property name="type">label_item</property>
- </packing>
- </child>
- </widget>
- <packing>
- <property name="expand">False</property>
- <property name="fill">False</property>
- <property name="position">2</property>
- </packing>
- </child>
- </widget>
- <packing>
- <property name="tab_expand">False</property>
- </packing>
- </child>
- <child>
- <widget class="GtkLabel" id="gallery">
- <property name="visible">True</property>
- <property name="label" translatable="yes">_Gallery</property>
- <property name="use_underline">True</property>
- </widget>
- <packing>
- <property name="type">tab</property>
- <property name="tab_expand">False</property>
- <property name="tab_fill">False</property>
- </packing>
- </child>
- <child>
- <widget class="GtkVBox" id="vbox25">
- <property name="visible">True</property>
- <property name="spacing">6</property>
- <child>
- <widget class="GtkFrame" id="frame20">
- <property name="visible">True</property>
- <property name="label_xalign">0</property>
- <property name="shadow_type">GTK_SHADOW_NONE</property>
- <child>
- <widget class="GtkAlignment" id="alignment24">
- <property name="visible">True</property>
- <property name="left_padding">12</property>
- <child>
- <widget class="GtkVBox" id="vbox26">
- <property name="visible">True</property>
- <property name="spacing">6</property>
- <child>
- <widget class="GtkHBox" id="hbox30">
- <property name="visible">True</property>
- <property name="spacing">6</property>
- <child>
- <widget class="GtkLabel" id="label70">
- <property name="visible">True</property>
- <property name="label" translatable="yes">_URI:</property>
- <property name="use_underline">True</property>
- <property name="mnemonic_widget">entry9</property>
- </widget>
- <packing>
- <property name="expand">False</property>
- <property name="fill">False</property>
- </packing>
- </child>
- <child>
- <widget class="GtkEntry" id="entry9">
- <property name="visible">True</property>
- <property name="can_focus">True</property>
- <property name="invisible_char">*</property>
- </widget>
- <packing>
- <property name="position">1</property>
- </packing>
- </child>
- </widget>
- </child>
- <child>
- <widget class="GtkLabel" id="label71">
- <property name="visible">True</property>
- </widget>
- <packing>
- <property name="expand">False</property>
- <property name="fill">False</property>
- <property name="position">1</property>
- </packing>
- </child>
- </widget>
- </child>
- </widget>
- </child>
- <child>
- <widget class="GtkLabel" id="label72">
- <property name="visible">True</property>
- <property name="label" translatable="yes"><b></b></property>
- <property name="use_markup">True</property>
- </widget>
- <packing>
- <property name="type">label_item</property>
- </packing>
- </child>
- </widget>
- <packing>
- <property name="expand">False</property>
- <property name="fill">False</property>
- </packing>
- </child>
- <child>
- <widget class="GtkFrame" id="frame21">
- <property name="visible">True</property>
- <property name="label_xalign">0</property>
- <property name="shadow_type">GTK_SHADOW_NONE</property>
- <child>
- <widget class="GtkAlignment" id="alignment25">
- <property name="visible">True</property>
- <property name="left_padding">12</property>
- <child>
- <widget class="GtkVBox" id="vbox27">
- <property name="visible">True</property>
- <property name="spacing">6</property>
- <child>
- <widget class="GtkHBox" id="hbox31">
- <property name="visible">True</property>
- <child>
- <widget class="GtkCheckButton" id="checkbutton9">
- <property name="visible">True</property>
- <property name="can_focus">True</property>
- <property name="label" translatable="yes">_Scale photos to no larger than: </property>
- <property name="use_underline">True</property>
- <property name="response_id">0</property>
- <property name="draw_indicator">True</property>
- </widget>
- <packing>
- <property name="expand">False</property>
- </packing>
- </child>
- <child>
- <widget class="GtkEntry" id="entry10">
- <property name="visible">True</property>
- <property name="can_focus">True</property>
- <property name="max_length">3</property>
- <property name="invisible_char">*</property>
- <property name="width_chars">5</property>
- </widget>
- <packing>
- <property name="expand">False</property>
- <property name="fill">False</property>
- <property name="position">1</property>
- </packing>
- </child>
- <child>
- <widget class="GtkLabel" id="label73">
- <property name="visible">True</property>
- <property name="label" translatable="yes">x</property>
- </widget>
- <packing>
- <property name="expand">False</property>
- <property name="fill">False</property>
- <property name="position">2</property>
- </packing>
- </child>
- <child>
- <widget class="GtkEntry" id="entry11">
- <property name="visible">True</property>
- <property name="can_focus">True</property>
- <property name="invisible_char">*</property>
- <property name="width_chars">5</property>
- </widget>
- <packing>
- <property name="expand">False</property>
- <property name="fill">False</property>
- <property name="position">3</property>
- </packing>
- </child>
- </widget>
- </child>
- <child>
- <widget class="GtkCheckButton" id="checkbutton10">
- <property name="visible">True</property>
- <property name="can_focus">True</property>
- <property name="label" translatable="yes">Strip image _metadata</property>
- <property name="use_underline">True</property>
- <property name="response_id">0</property>
- <property name="draw_indicator">True</property>
- </widget>
- <packing>
- <property name="expand">False</property>
- <property name="fill">False</property>
- <property name="position">1</property>
- </packing>
- </child>
- </widget>
- </child>
- </widget>
- </child>
- <child>
- <widget class="GtkLabel" id="label74">
- <property name="visible">True</property>
- <property name="label" translatable="yes"><b>Style</b></property>
- <property name="use_markup">True</property>
- </widget>
- <packing>
- <property name="type">label_item</property>
- </packing>
- </child>
- </widget>
- <packing>
- <property name="expand">False</property>
- <property name="fill">False</property>
- <property name="position">1</property>
- </packing>
- </child>
- </widget>
- <packing>
- <property name="position">1</property>
- <property name="tab_expand">False</property>
- </packing>
- </child>
- <child>
- <widget class="GtkLabel" id="label68">
- <property name="visible">True</property>
- <property name="label" translatable="yes">_Virtual Filesystem</property>
- <property name="use_underline">True</property>
- </widget>
- <packing>
- <property name="type">tab</property>
- <property name="position">1</property>
- <property name="tab_expand">False</property>
- <property name="tab_fill">False</property>
- </packing>
- </child>
- <child>
- <widget class="GtkVBox" id="vbox28">
- <property name="visible">True</property>
- <property name="spacing">6</property>
- <child>
- <widget class="GtkFrame" id="frame22">
- <property name="visible">True</property>
- <property name="label_xalign">0</property>
- <property name="shadow_type">GTK_SHADOW_NONE</property>
- <child>
- <widget class="GtkAlignment" id="alignment26">
- <property name="visible">True</property>
- <property name="left_padding">12</property>
- <child>
- <widget class="GtkVBox" id="vbox29">
- <property name="visible">True</property>
- <property name="spacing">6</property>
- <child>
- <widget class="GtkHBox" id="hbox32">
- <property name="visible">True</property>
- <property name="spacing">6</property>
- <child>
- <widget class="GtkLabel" id="label75">
- <property name="visible">True</property>
- <property name="label" translatable="yes">E-_Mail:</property>
- <property name="use_underline">True</property>
- <property name="mnemonic_widget">entry12</property>
- </widget>
- <packing>
- <property name="expand">False</property>
- <property name="fill">False</property>
- </packing>
- </child>
- <child>
- <widget class="GtkEntry" id="entry12">
- <property name="visible">True</property>
- <property name="can_focus">True</property>
- <property name="invisible_char">*</property>
- </widget>
- <packing>
- <property name="position">1</property>
- </packing>
- </child>
- </widget>
- </child>
- <child>
- <widget class="GtkLabel" id="label76">
- <property name="visible">True</property>
- </widget>
- <packing>
- <property name="expand">False</property>
- <property name="fill">False</property>
- <property name="position">1</property>
- </packing>
- </child>
- </widget>
- </child>
- </widget>
- </child>
- <child>
- <widget class="GtkLabel" id="account_label">
- <property name="visible">True</property>
- <property name="label" translatable="yes"><b>Account</b></property>
- <property name="use_markup">True</property>
- </widget>
- <packing>
- <property name="type">label_item</property>
- </packing>
- </child>
- </widget>
- <packing>
- <property name="expand">False</property>
- <property name="fill">False</property>
- </packing>
- </child>
- <child>
- <widget class="GtkFrame" id="frame23">
- <property name="visible">True</property>
- <property name="label_xalign">0</property>
- <property name="shadow_type">GTK_SHADOW_NONE</property>
- <child>
- <widget class="GtkAlignment" id="alignment27">
- <property name="visible">True</property>
- <property name="left_padding">12</property>
- <child>
- <widget class="GtkVBox" id="vbox30">
- <property name="visible">True</property>
- <property name="spacing">6</property>
- <child>
- <widget class="GtkHBox" id="hbox33">
- <property name="visible">True</property>
- <child>
- <widget class="GtkCheckButton" id="checkbutton11">
- <property name="visible">True</property>
- <property name="can_focus">True</property>
- <property name="label" translatable="yes">_Scale photos to no larger than: </property>
- <property name="use_underline">True</property>
- <property name="response_id">0</property>
- <property name="draw_indicator">True</property>
- </widget>
- <packing>
- <property name="expand">False</property>
- </packing>
- </child>
- <child>
- <widget class="GtkEntry" id="entry13">
- <property name="visible">True</property>
- <property name="can_focus">True</property>
- <property name="max_length">3</property>
- <property name="invisible_char">*</property>
- <property name="width_chars">5</property>
- </widget>
- <packing>
- <property name="expand">False</property>
- <property name="fill">False</property>
- <property name="position">1</property>
- </packing>
- </child>
- <child>
- <widget class="GtkLabel" id="label78">
- <property name="visible">True</property>
- <property name="label" translatable="yes">x</property>
- </widget>
- <packing>
- <property name="expand">False</property>
- <property name="fill">False</property>
- <property name="position">2</property>
- </packing>
- </child>
- <child>
- <widget class="GtkEntry" id="entry14">
- <property name="visible">True</property>
- <property name="can_focus">True</property>
- <property name="invisible_char">*</property>
- <property name="width_chars">5</property>
- </widget>
- <packing>
- <property name="expand">False</property>
- <property name="fill">False</property>
- <property name="position">3</property>
- </packing>
- </child>
- </widget>
- </child>
- <child>
- <widget class="GtkVBox" id="vbox31">
- <property name="visible">True</property>
- <property name="spacing">6</property>
- <child>
- <widget class="GtkCheckButton" id="checkbutton13">
- <property name="visible">True</property>
- <property name="can_focus">True</property>
- <property name="label" translatable="yes">Strip image _metadata</property>
- <property name="use_underline">True</property>
- <property name="response_id">0</property>
- <property name="draw_indicator">True</property>
- </widget>
- <packing>
- <property name="expand">False</property>
- <property name="fill">False</property>
- </packing>
- </child>
- <child>
- <widget class="GtkCheckButton" id="checkbutton14">
- <property name="visible">True</property>
- <property name="can_focus">True</property>
- <property name="label" translatable="yes">_Export tags</property>
- <property name="use_underline">True</property>
- <property name="response_id">0</property>
- <property name="draw_indicator">True</property>
- </widget>
- <packing>
- <property name="expand">False</property>
- <property name="fill">False</property>
- <property name="position">1</property>
- </packing>
- </child>
- </widget>
- <packing>
- <property name="expand">False</property>
- <property name="fill">False</property>
- <property name="position">1</property>
- </packing>
- </child>
- <child>
- <placeholder/>
- </child>
- </widget>
- </child>
- </widget>
- </child>
- <child>
- <widget class="GtkLabel" id="label79">
- <property name="visible">True</property>
- <property name="label" translatable="yes"><b>Style</b></property>
- <property name="use_markup">True</property>
- </widget>
- <packing>
- <property name="type">label_item</property>
- </packing>
- </child>
- </widget>
- <packing>
- <property name="expand">False</property>
- <property name="fill">False</property>
- <property name="position">1</property>
- </packing>
- </child>
- </widget>
- <packing>
- <property name="position">2</property>
- <property name="tab_expand">False</property>
- </packing>
- </child>
- <child>
- <widget class="GtkLabel" id="label69">
- <property name="visible">True</property>
- <property name="label" translatable="yes">_Flickr</property>
- <property name="use_underline">True</property>
- </widget>
- <packing>
- <property name="type">tab</property>
- <property name="position">2</property>
- <property name="tab_expand">False</property>
- <property name="tab_fill">False</property>
- </packing>
- </child>
- </widget>
- </child>
- </widget>
- </child>
- <child>
- <widget class="GtkLabel" id="label84">
- <property name="visible">True</property>
- <property name="label" translatable="yes"><b>Destination</b></property>
- <property name="use_markup">True</property>
- </widget>
- <packing>
- <property name="type">label_item</property>
- </packing>
- </child>
- </widget>
- <packing>
- <property name="position">1</property>
- </packing>
- </child>
- </widget>
- <packing>
- <property name="position">1</property>
- </packing>
- </child>
- <child internal-child="action_area">
- <widget class="GtkHButtonBox" id="hbuttonbox5">
- <property name="visible">True</property>
- <property name="layout_style">GTK_BUTTONBOX_END</property>
- <child>
- <widget class="GtkButton" id="button9">
- <property name="visible">True</property>
- <property name="can_focus">True</property>
- <property name="can_default">True</property>
- <property name="label">gtk-cancel</property>
- <property name="use_stock">True</property>
- <property name="response_id">-6</property>
- </widget>
- </child>
- <child>
- <widget class="GtkButton" id="button10">
- <property name="visible">True</property>
- <property name="can_focus">True</property>
- <property name="can_default">True</property>
- <property name="label" translatable="yes">_Export</property>
- <property name="use_underline">True</property>
- <property name="response_id">-5</property>
- </widget>
- <packing>
- <property name="position">1</property>
- </packing>
- </child>
- </widget>
- <packing>
- <property name="expand">False</property>
- <property name="pack_type">GTK_PACK_END</property>
- </packing>
- </child>
- </widget>
- </child>
- </widget>
- <widget class="GtkDialog" id="import_dialog">
- <property name="title" translatable="yes">Import</property>
- <property name="modal">True</property>
- <property name="default_width">664</property>
- <property name="type_hint">GDK_WINDOW_TYPE_HINT_DIALOG</property>
- <property name="has_separator">False</property>
- <child internal-child="vbox">
- <widget class="GtkVBox" id="dialog-vbox14">
- <property name="visible">True</property>
- <child>
- <widget class="GtkVBox" id="vbox62">
- <property name="visible">True</property>
- <property name="border_width">6</property>
- <property name="spacing">6</property>
- <child>
- <widget class="GtkVBox" id="vbox65">
- <property name="visible">True</property>
- <property name="spacing">6</property>
- <child>
- <widget class="GtkHBox" id="hbox59">
- <property name="visible">True</property>
- <property name="spacing">6</property>
- <child>
- <widget class="GtkLabel" id="import_label">
- <property name="visible">True</property>
- <property name="label" translatable="yes" comments="Translators: this string means 'source of import'">Import Source:</property>
- </widget>
- <packing>
- <property name="expand">False</property>
- <property name="fill">False</property>
- </packing>
- </child>
- <child>
- <widget class="GtkOptionMenu" id="source_option_menu">
- <property name="visible">True</property>
- <property name="can_focus">True</property>
- <property name="response_id">0</property>
- </widget>
- <packing>
- <property name="expand">False</property>
- <property name="fill">False</property>
- <property name="position">1</property>
- </packing>
- </child>
- <child>
- <placeholder/>
- </child>
- </widget>
- <packing>
- <property name="expand">False</property>
- <property name="fill">False</property>
- </packing>
- </child>
- <child>
- <widget class="GtkHPaned" id="import_hpaned">
- <property name="visible">True</property>
- <property name="can_focus">True</property>
- <child>
- <widget class="GtkScrolledWindow" id="icon_scrolled">
- <property name="visible">True</property>
- <property name="can_focus">True</property>
- <property name="hscrollbar_policy">GTK_POLICY_AUTOMATIC</property>
- <property name="vscrollbar_policy">GTK_POLICY_AUTOMATIC</property>
- <property name="shadow_type">GTK_SHADOW_IN</property>
- <child>
- <placeholder/>
- </child>
- </widget>
- <packing>
- <property name="resize">False</property>
- <property name="shrink">True</property>
- </packing>
- </child>
- <child>
- <widget class="GtkScrolledWindow" id="photo_scrolled">
- <property name="visible">True</property>
- <property name="can_focus">True</property>
- <property name="hscrollbar_policy">GTK_POLICY_AUTOMATIC</property>
- <property name="vscrollbar_policy">GTK_POLICY_AUTOMATIC</property>
- <property name="shadow_type">GTK_SHADOW_IN</property>
- <child>
- <placeholder/>
- </child>
- </widget>
- <packing>
- <property name="resize">True</property>
- <property name="shrink">True</property>
- </packing>
- </child>
- </widget>
- <packing>
- <property name="position">1</property>
- </packing>
- </child>
- <child>
- <widget class="GtkProgressBar" id="progress_bar">
- <property name="visible">True</property>
- <property name="pulse_step">0.10000000149</property>
- </widget>
- <packing>
- <property name="expand">False</property>
- <property name="fill">False</property>
- <property name="position">2</property>
- </packing>
- </child>
- </widget>
- <packing>
- <property name="position">1</property>
- </packing>
- </child>
- <child>
- <widget class="GtkTable" id="table19">
- <property name="visible">True</property>
- <property name="n_rows">2</property>
- <property name="n_columns">2</property>
- <property name="column_spacing">6</property>
- <property name="row_spacing">6</property>
- <child>
- <widget class="GtkHBox" id="hbox57">
- <property name="visible">True</property>
- <property name="spacing">6</property>
- <child>
- <widget class="GtkLabel" id="source_label">
- <property name="visible">True</property>
- </widget>
- <packing>
- <property name="expand">False</property>
- <property name="fill">False</property>
- </packing>
- </child>
- <child>
- <placeholder/>
- </child>
- </widget>
- <packing>
- <property name="left_attach">1</property>
- <property name="right_attach">2</property>
- </packing>
- </child>
- <child>
- <widget class="GtkLabel" id="label136">
- <property name="visible">True</property>
- <property name="xalign">0</property>
- </widget>
- <packing>
- <property name="x_options">GTK_FILL</property>
- <property name="y_options"></property>
- </packing>
- </child>
- <child>
- <widget class="GtkHBox" id="tagentry_box">
- <property name="visible">True</property>
- </widget>
- <packing>
- <property name="left_attach">1</property>
- <property name="right_attach">2</property>
- <property name="top_attach">1</property>
- <property name="bottom_attach">2</property>
- <property name="x_options">GTK_FILL</property>
- <property name="y_options">GTK_FILL</property>
- </packing>
- </child>
- <child>
- <widget class="GtkLabel" id="label228">
- <property name="visible">True</property>
- <property name="xalign">0</property>
- <property name="label" translatable="yes">Attach Tags:</property>
- </widget>
- <packing>
- <property name="top_attach">1</property>
- <property name="bottom_attach">2</property>
- <property name="x_options">GTK_FILL</property>
- <property name="y_options"></property>
- </packing>
- </child>
- </widget>
- <packing>
- <property name="expand">False</property>
- <property name="fill">False</property>
- <property name="position">2</property>
- </packing>
- </child>
- <child>
- <widget class="GtkCheckButton" id="duplicate_check">
- <property name="visible">True</property>
- <property name="can_focus">True</property>
- <property name="label" translatable="yes">Detect duplicates</property>
- <property name="use_underline">True</property>
- <property name="response_id">0</property>
- <property name="active">True</property>
- <property name="draw_indicator">True</property>
- </widget>
- <packing>
- <property name="expand">False</property>
- <property name="fill">False</property>
- <property name="position">3</property>
- </packing>
- </child>
- <child>
- <widget class="GtkCheckButton" id="copy_check">
- <property name="visible">True</property>
- <property name="can_focus">True</property>
- <property name="label" translatable="yes">Copy files to the Photos folder</property>
- <property name="use_underline">True</property>
- <property name="response_id">0</property>
- <property name="active">True</property>
- <property name="draw_indicator">True</property>
- </widget>
- <packing>
- <property name="expand">False</property>
- <property name="fill">False</property>
- <property name="position">4</property>
- </packing>
- </child>
- <child>
- <widget class="GtkCheckButton" id="recurse_check">
- <property name="visible">True</property>
- <property name="can_focus">True</property>
- <property name="label" translatable="yes">Include subfolders</property>
- <property name="use_underline">True</property>
- <property name="response_id">0</property>
- <property name="active">True</property>
- <property name="draw_indicator">True</property>
- </widget>
- <packing>
- <property name="expand">False</property>
- <property name="fill">False</property>
- <property name="pack_type">GTK_PACK_END</property>
- <property name="position">5</property>
- </packing>
- </child>
- </widget>
- <packing>
- <property name="position">1</property>
- </packing>
- </child>
- <child internal-child="action_area">
- <widget class="GtkHButtonBox" id="dialog-action_area14">
- <property name="visible">True</property>
- <property name="layout_style">GTK_BUTTONBOX_END</property>
- <child>
- <widget class="GtkButton" id="okbutton7">
- <property name="visible">True</property>
- <property name="can_focus">True</property>
- <property name="can_default">True</property>
- <property name="label">gtk-cancel</property>
- <property name="use_stock">True</property>
- <property name="response_id">-6</property>
- </widget>
- </child>
- <child>
- <widget class="GtkButton" id="ok_button">
- <property name="visible">True</property>
- <property name="can_focus">True</property>
- <property name="can_default">True</property>
- <property name="response_id">-5</property>
- <child>
- <widget class="GtkAlignment" id="alignment49">
- <property name="visible">True</property>
- <property name="xscale">0</property>
- <property name="yscale">0</property>
- <child>
- <widget class="GtkHBox" id="hbox64">
- <property name="visible">True</property>
- <property name="spacing">2</property>
- <child>
- <widget class="GtkImage" id="image15">
- <property name="visible">True</property>
- <property name="stock">gtk-ok</property>
- </widget>
- <packing>
- <property name="expand">False</property>
- <property name="fill">False</property>
- </packing>
- </child>
- <child>
- <widget class="GtkLabel" id="label157">
- <property name="visible">True</property>
- <property name="label" translatable="yes">Import</property>
- <property name="use_underline">True</property>
- </widget>
- <packing>
- <property name="expand">False</property>
- <property name="fill">False</property>
- <property name="position">1</property>
- </packing>
- </child>
- </widget>
- </child>
- </widget>
- </child>
- </widget>
- <packing>
- <property name="position">1</property>
- </packing>
- </child>
- </widget>
- <packing>
- <property name="expand">False</property>
- <property name="pack_type">GTK_PACK_END</property>
- </packing>
- </child>
- </widget>
- </child>
- </widget>
<widget class="GtkWindow" id="single_view">
<property name="visible">True</property>
<property name="title" translatable="yes">F-Spot View</property>
@@ -2778,7 +777,7 @@
<property name="focus_on_map">True</property>
<property name="urgency_hint">False</property>
- <child internal-child="vbox">
+ <child>
<widget class="GtkVBox" id="color_editor_prefs">
<property name="visible">True</property>
<property name="homogeneous">False</property>
@@ -3552,421 +1551,6 @@ between</property>
</widget>
</child>
</widget>
- <widget class="GtkDialog" id="mail_dialog">
- <property name="visible">True</property>
- <property name="title" translatable="yes">Create Mail</property>
- <property name="type_hint">GDK_WINDOW_TYPE_HINT_DIALOG</property>
- <child internal-child="vbox">
- <widget class="GtkVBox" id="dialog-vbox15">
- <property name="visible">True</property>
- <child>
- <widget class="GtkHBox" id="hbox89">
- <property name="visible">True</property>
- <property name="spacing">12</property>
- <child>
- <widget class="GtkFrame" id="frame48">
- <property name="visible">True</property>
- <property name="label_xalign">0</property>
- <property name="shadow_type">GTK_SHADOW_NONE</property>
- <child>
- <widget class="GtkAlignment" id="alignment64">
- <property name="visible">True</property>
- <property name="left_padding">12</property>
- <child>
- <widget class="GtkScrolledWindow" id="tray_scrolled">
- <property name="width_request">200</property>
- <property name="visible">True</property>
- <property name="can_focus">True</property>
- <property name="hscrollbar_policy">GTK_POLICY_AUTOMATIC</property>
- <property name="vscrollbar_policy">GTK_POLICY_AUTOMATIC</property>
- <property name="shadow_type">GTK_SHADOW_IN</property>
- <child>
- <placeholder/>
- </child>
- </widget>
- </child>
- </widget>
- </child>
- <child>
- <widget class="GtkLabel" id="label216">
- <property name="visible">True</property>
- <property name="label" translatable="yes"><b>Photos</b></property>
- <property name="use_markup">True</property>
- </widget>
- <packing>
- <property name="type">label_item</property>
- </packing>
- </child>
- </widget>
- </child>
- <child>
- <widget class="GtkVBox" id="vbox67">
- <property name="visible">True</property>
- <child>
- <widget class="GtkFrame" id="frame43">
- <property name="visible">True</property>
- <property name="label_xalign">0</property>
- <property name="shadow_type">GTK_SHADOW_NONE</property>
- <child>
- <widget class="GtkAlignment" id="alignment52">
- <property name="visible">True</property>
- <property name="left_padding">12</property>
- <child>
- <widget class="GtkVBox" id="vbox69">
- <property name="visible">True</property>
- <child>
- <widget class="GtkTable" id="table22">
- <property name="visible">True</property>
- <property name="border_width">3</property>
- <property name="n_rows">3</property>
- <property name="n_columns">2</property>
- <property name="column_spacing">20</property>
- <property name="row_spacing">3</property>
- <child>
- <widget class="GtkRadioButton" id="tiny_size">
- <property name="visible">True</property>
- <property name="can_focus">True</property>
- <property name="tooltip" translatable="yes">320 px</property>
- <property name="label" translatable="yes">Tiny</property>
- <property name="use_underline">True</property>
- <property name="response_id">0</property>
- <property name="draw_indicator">True</property>
- <signal name="toggled" handler="on_size_toggled"/>
- </widget>
- <packing>
- <property name="x_options">GTK_FILL</property>
- <property name="y_options"></property>
- </packing>
- </child>
- <child>
- <widget class="GtkRadioButton" id="small_size">
- <property name="visible">True</property>
- <property name="can_focus">True</property>
- <property name="tooltip" translatable="yes">480 px</property>
- <property name="label" translatable="yes">Small</property>
- <property name="use_underline">True</property>
- <property name="response_id">0</property>
- <property name="draw_indicator">True</property>
- <property name="group">tiny_size</property>
- <signal name="toggled" handler="on_size_toggled"/>
- </widget>
- <packing>
- <property name="top_attach">1</property>
- <property name="bottom_attach">2</property>
- <property name="x_options">GTK_FILL</property>
- <property name="y_options"></property>
- </packing>
- </child>
- <child>
- <widget class="GtkRadioButton" id="medium_size">
- <property name="visible">True</property>
- <property name="can_focus">True</property>
- <property name="tooltip" translatable="yes">640 px</property>
- <property name="label" translatable="yes">Medium</property>
- <property name="use_underline">True</property>
- <property name="response_id">0</property>
- <property name="draw_indicator">True</property>
- <property name="group">tiny_size</property>
- <signal name="toggled" handler="on_size_toggled"/>
- </widget>
- <packing>
- <property name="top_attach">2</property>
- <property name="bottom_attach">3</property>
- <property name="x_options">GTK_FILL</property>
- <property name="y_options"></property>
- </packing>
- </child>
- <child>
- <widget class="GtkRadioButton" id="large_size">
- <property name="visible">True</property>
- <property name="can_focus">True</property>
- <property name="tooltip" translatable="yes">800 px</property>
- <property name="label" translatable="yes">Large</property>
- <property name="use_underline">True</property>
- <property name="response_id">0</property>
- <property name="draw_indicator">True</property>
- <property name="group">tiny_size</property>
- <signal name="toggled" handler="on_size_toggled"/>
- </widget>
- <packing>
- <property name="left_attach">1</property>
- <property name="right_attach">2</property>
- <property name="x_options">GTK_FILL</property>
- <property name="y_options"></property>
- </packing>
- </child>
- <child>
- <widget class="GtkRadioButton" id="x_large_size">
- <property name="visible">True</property>
- <property name="can_focus">True</property>
- <property name="tooltip" translatable="yes">1024 px</property>
- <property name="label" translatable="yes">Extra large</property>
- <property name="use_underline">True</property>
- <property name="response_id">0</property>
- <property name="draw_indicator">True</property>
- <property name="group">tiny_size</property>
- <signal name="toggled" handler="on_size_toggled"/>
- </widget>
- <packing>
- <property name="left_attach">1</property>
- <property name="right_attach">2</property>
- <property name="top_attach">1</property>
- <property name="bottom_attach">2</property>
- <property name="x_options">GTK_FILL</property>
- <property name="y_options"></property>
- </packing>
- </child>
- <child>
- <widget class="GtkRadioButton" id="original_size">
- <property name="visible">True</property>
- <property name="can_focus">True</property>
- <property name="tooltip" translatable="yes">Original size (possible very large file size)</property>
- <property name="label" translatable="yes">Original</property>
- <property name="use_underline">True</property>
- <property name="response_id">0</property>
- <property name="draw_indicator">True</property>
- <property name="group">tiny_size</property>
- <signal name="toggled" handler="on_size_toggled"/>
- </widget>
- <packing>
- <property name="left_attach">1</property>
- <property name="right_attach">2</property>
- <property name="top_attach">2</property>
- <property name="bottom_attach">3</property>
- <property name="x_options">GTK_FILL</property>
- <property name="y_options"></property>
- </packing>
- </child>
- </widget>
- <packing>
- <property name="expand">False</property>
- <property name="fill">False</property>
- </packing>
- </child>
- <child>
- <placeholder/>
- </child>
- </widget>
- </child>
- </widget>
- </child>
- <child>
- <widget class="GtkLabel" id="label175">
- <property name="visible">True</property>
- <property name="label" translatable="yes"><b>Size</b></property>
- <property name="use_markup">True</property>
- </widget>
- <packing>
- <property name="type">label_item</property>
- </packing>
- </child>
- </widget>
- </child>
- <child>
- <widget class="GtkFrame" id="optionframe">
- <property name="visible">True</property>
- <property name="label_xalign">0</property>
- <property name="shadow_type">GTK_SHADOW_NONE</property>
- <child>
- <widget class="GtkAlignment" id="alignment65">
- <property name="visible">True</property>
- <property name="left_padding">12</property>
- <child>
- <widget class="GtkCheckButton" id="rotate_check">
- <property name="visible">True</property>
- <property name="can_focus">True</property>
- <property name="tooltip" translatable="yes">Specify if an original size picture should be rotated or not. Smaller sizes are automatically rotated.</property>
- <property name="label" translatable="yes">Autorotate</property>
- <property name="use_underline">True</property>
- <property name="response_id">0</property>
- <property name="active">True</property>
- <property name="draw_indicator">True</property>
- </widget>
- </child>
- </widget>
- </child>
- <child>
- <widget class="GtkLabel" id="label217">
- <property name="visible">True</property>
- <property name="label" translatable="yes"><b>Style</b></property>
- <property name="use_markup">True</property>
- </widget>
- <packing>
- <property name="type">label_item</property>
- </packing>
- </child>
- </widget>
- <packing>
- <property name="position">1</property>
- </packing>
- </child>
- <child>
- <widget class="GtkFrame" id="frame42">
- <property name="visible">True</property>
- <property name="label_xalign">0</property>
- <property name="shadow_type">GTK_SHADOW_NONE</property>
- <child>
- <widget class="GtkAlignment" id="alignment51">
- <property name="visible">True</property>
- <property name="top_padding">3</property>
- <property name="left_padding">12</property>
- <child>
- <widget class="GtkTable" id="table21">
- <property name="visible">True</property>
- <property name="n_rows">3</property>
- <property name="n_columns">2</property>
- <property name="column_spacing">3</property>
- <property name="row_spacing">3</property>
- <child>
- <widget class="GtkLabel" id="label169">
- <property name="visible">True</property>
- <property name="xalign">0</property>
- <property name="label" translatable="yes">Number of pictures</property>
- <property name="justify">GTK_JUSTIFY_RIGHT</property>
- </widget>
- <packing>
- <property name="x_options">GTK_FILL</property>
- <property name="y_options"></property>
- </packing>
- </child>
- <child>
- <widget class="GtkLabel" id="label170">
- <property name="visible">True</property>
- <property name="xalign">0</property>
- <property name="label" translatable="yes">Total original size</property>
- <property name="justify">GTK_JUSTIFY_RIGHT</property>
- </widget>
- <packing>
- <property name="top_attach">1</property>
- <property name="bottom_attach">2</property>
- <property name="x_options">GTK_FILL</property>
- <property name="y_options"></property>
- </packing>
- </child>
- <child>
- <widget class="GtkLabel" id="ApproxNewSizeLabel">
- <property name="visible">True</property>
- <property name="xalign">0</property>
- <property name="label" translatable="yes">Estimated new size</property>
- <property name="justify">GTK_JUSTIFY_RIGHT</property>
- </widget>
- <packing>
- <property name="top_attach">2</property>
- <property name="bottom_attach">3</property>
- <property name="x_options">GTK_FILL</property>
- <property name="y_options"></property>
- </packing>
- </child>
- <child>
- <widget class="GtkLabel" id="NumberOfPictures">
- <property name="visible">True</property>
- <property name="xalign">0</property>
- </widget>
- <packing>
- <property name="left_attach">1</property>
- <property name="right_attach">2</property>
- <property name="x_options">GTK_FILL</property>
- <property name="y_options"></property>
- </packing>
- </child>
- <child>
- <widget class="GtkLabel" id="TotalOriginalSize">
- <property name="visible">True</property>
- <property name="xalign">0</property>
- </widget>
- <packing>
- <property name="left_attach">1</property>
- <property name="right_attach">2</property>
- <property name="top_attach">1</property>
- <property name="bottom_attach">2</property>
- <property name="x_options">GTK_FILL</property>
- <property name="y_options"></property>
- </packing>
- </child>
- <child>
- <widget class="GtkLabel" id="ApproxNewSize">
- <property name="visible">True</property>
- <property name="xalign">0</property>
- </widget>
- <packing>
- <property name="left_attach">1</property>
- <property name="right_attach">2</property>
- <property name="top_attach">2</property>
- <property name="bottom_attach">3</property>
- <property name="x_options">GTK_FILL</property>
- <property name="y_options"></property>
- </packing>
- </child>
- </widget>
- </child>
- </widget>
- </child>
- <child>
- <widget class="GtkLabel" id="label167">
- <property name="visible">True</property>
- <property name="label" translatable="yes"><b>Summary</b></property>
- <property name="use_markup">True</property>
- </widget>
- <packing>
- <property name="type">label_item</property>
- </packing>
- </child>
- </widget>
- <packing>
- <property name="position">2</property>
- </packing>
- </child>
- <child>
- <placeholder/>
- </child>
- </widget>
- <packing>
- <property name="position">1</property>
- </packing>
- </child>
- </widget>
- <packing>
- <property name="position">2</property>
- </packing>
- </child>
- <child internal-child="action_area">
- <widget class="GtkHButtonBox" id="dialog-action_area15">
- <property name="visible">True</property>
- <property name="layout_style">GTK_BUTTONBOX_END</property>
- <child>
- <widget class="GtkButton" id="cancelbutton7">
- <property name="visible">True</property>
- <property name="can_focus">True</property>
- <property name="can_default">True</property>
- <property name="tooltip" translatable="yes">Do not send a mail</property>
- <property name="label">gtk-cancel</property>
- <property name="use_stock">True</property>
- <property name="response_id">-6</property>
- </widget>
- </child>
- <child>
- <widget class="GtkButton" id="okbutton8">
- <property name="visible">True</property>
- <property name="can_focus">True</property>
- <property name="can_default">True</property>
- <property name="tooltip" translatable="yes">Create a mail with the selected photos (possibly resized) attached</property>
- <property name="label" translatable="yes">_Create Mail</property>
- <property name="use_underline">True</property>
- <property name="response_id">-5</property>
- </widget>
- <packing>
- <property name="position">1</property>
- </packing>
- </child>
- </widget>
- <packing>
- <property name="expand">False</property>
- <property name="pack_type">GTK_PACK_END</property>
- </packing>
- </child>
- </widget>
- </child>
- </widget>
<widget class="GtkDialog" id="repair_dialog">
<property name="visible">True</property>
<property name="title" translatable="yes">Repair</property>
diff --git a/src/f-spot.in b/src/f-spot.in
index 0145a95..729b681 100644
--- a/src/f-spot.in
+++ b/src/f-spot.in
@@ -26,6 +26,7 @@ run_gdb=false
run_valgrind=false
run_strace=false
basedir_set=false
+
for arg in "$@"; do
case "x$arg" in
x--debug)
@@ -55,7 +56,7 @@ for arg in "$@"; do
x--uninstalled)
echo "*** Running uninstalled f-spot ***"
EXE_TO_RUN="./f-spot.exe"
- export MONO_PATH=../lib/gnome-keyring-sharp:../lib/libgphoto2-sharp:../lib/semweb:../lib/mono-addins/Mono.Addins:../lib/mono-addins/Mono.Addins.Setup:../lib/mono-addins/Mono.Addins.Gui:../lib/gio-sharp/gio:../lib/gtk-sharp-beans:../lib/unique-sharp/unique:$MONO_PATH
+ export MONO_PATH=../lib/semweb:../lib/gio-sharp/gio:../lib/gtk-sharp-beans:../lib/unique-sharp/unique:../bin:$MONO_PATH
;;
esac
done
diff --git a/src/main.cs b/src/main.cs
index 2b02ede..81684fb 100644
--- a/src/main.cs
+++ b/src/main.cs
@@ -12,56 +12,135 @@ using Mono.Addins.Setup;
using FSpot.Utils;
using FSpot.UI.Dialog;
using FSpot.Extensions;
+using Hyena;
+using Hyena.CommandLine;
-namespace FSpot
+namespace FSpot
{
- public static class Driver {
- static void Version ()
+ public static class Driver
+ {
+ private static void ShowVersion ()
{
- Console.WriteLine (
- "F-Spot {0}" + Environment.NewLine +
- "\t(c)2003-2009, Novell Inc" + Environment.NewLine +
- "\t(c)2009 Stephane Delcroix" + Environment.NewLine +
- "Personal photo management for the GNOME Desktop" + Environment.NewLine,
- FSpot.Defines.VERSION);
+ Console.WriteLine ("F-Spot {0}", FSpot.Defines.VERSION);
+ Console.WriteLine ("http://f-spot.org");
+ Console.WriteLine ("\t(c)2003-2009, Novell Inc");
+ Console.WriteLine ("\t(c)2009 Stephane Delcroix");
+ Console.WriteLine("Personal photo management for the GNOME Desktop");
}
- static void Versions ()
+ private static void ShowAssemblyVersions ()
{
- Version ();
- Console.WriteLine (".NET Version: " + Environment.Version.ToString());
- Console.WriteLine (String.Format("{0}Assembly Version Information:", Environment.NewLine));
+ ShowVersion ();
+ Console.WriteLine ();
+ Console.WriteLine ("Mono/.NET Version: " + Environment.Version.ToString ());
+ Console.WriteLine (String.Format ("{0}Assembly Version Information:", Environment.NewLine));
- foreach(Assembly asm in AppDomain.CurrentDomain.GetAssemblies()) {
- AssemblyName name = asm.GetName();
- Console.WriteLine ("\t" + name.Name + " (" + name.Version.ToString () + ")");
+ foreach (Assembly asm in AppDomain.CurrentDomain.GetAssemblies ())
+ {
+ AssemblyName name = asm.GetName ();
+ Console.WriteLine ("\t" + name.Name + " (" + name.Version.ToString () + ")");
}
}
- static void Help ()
+ private static void ShowHelp ()
{
- Version ();
+ Console.WriteLine ("Usage: f-spot [options...] [files|URIs...]");
Console.WriteLine ();
- Console.WriteLine (
- "Usage: f-spot [options] " + Environment.NewLine +
- "Options:" + Environment.NewLine +
- "-b -basedir PARAM path to the photo database folder" + Environment.NewLine +
- "-? -help -usage Show this help list" + Environment.NewLine +
- "-i -import PARAM import from the given uri" + Environment.NewLine +
- "-p -photodir PARAM default import folder" + Environment.NewLine +
- "-shutdown shutdown a running f-spot instance" + Environment.NewLine +
- "-slideshow display a slideshow" + Environment.NewLine +
- "-V -version Display version and licensing information" + Environment.NewLine +
- "-versions Display version and dependencies informations" + Environment.NewLine +
- "-v -view view file(s) or directory(ies)");
+
+ Hyena.CommandLine.Layout commands = new Hyena.CommandLine.Layout (
+ new LayoutGroup ("help", "Help Options",
+ new LayoutOption ("help", "Show this help"),
+ new LayoutOption ("help-options", "Show command line options"),
+ new LayoutOption ("help-all", "Show all options"),
+ new LayoutOption ("version", "Show version information"),
+ new LayoutOption ("versions", "Show detailed version information")),
+ new LayoutGroup ("options", "General options",
+ new LayoutOption ("basedir=DIR", "Path to the photo database folder"),
+ new LayoutOption ("import=URI", "Import from the given uri"),
+ new LayoutOption ("photodir=DIR", "Default import folder"),
+ new LayoutOption ("view ITEM", "View file(s) or directories"),
+ new LayoutOption ("shutdown", "Shut down a running instance of F-Spot"),
+ new LayoutOption ("slideshow", "Display a slideshow"),
+ new LayoutOption ("debug", "Run in debug mode")));
+
+ if (ApplicationContext.CommandLine.Contains ("help-all")) {
+ Console.WriteLine (commands);
+ return;
+ }
+
+ List<string> errors = null;
+ foreach (KeyValuePair<string, string> argument in ApplicationContext.CommandLine.Arguments) {
+ switch (argument.Key) {
+ case "help": Console.WriteLine (commands.ToString ("help")); break;
+ case "help-options": Console.WriteLine (commands.ToString ("options")); break;
+ default:
+ if (argument.Key.StartsWith ("help")) {
+ (errors ?? (errors = new List<string> ())).Add (argument.Key);
+ }
+ break;
+ }
+ }
+
+ if (errors != null) {
+ Console.WriteLine (commands.LayoutLine (String.Format (
+ "The following help arguments are invalid: {0}",
+ Hyena.Collections.CollectionExtensions.Join (errors, "--", null, ", "))));
+ }
+ }
+
+ static string [] FixArgs (string [] args)
+ {
+ // Makes sure command line arguments are parsed backwards compatible.
+ var outargs = new List<string> ();
+ for (int i = 0; i < args.Length; i++) {
+ switch (args [i]) {
+ case "-h": case "-help": case "-usage":
+ outargs.Add ("--help");
+ break;
+ case "-V": case "-version":
+ outargs.Add ("--version");
+ break;
+ case "-versions":
+ outargs.Add ("--versions");
+ break;
+ case "-shutdown":
+ outargs.Add ("--shutdown");
+ break;
+ case "-b": case "-basedir": case "--basedir":
+ outargs.Add ("--basedir=" + (i + 1 == args.Length ? String.Empty : args [++i]));
+ break;
+ case "-p": case "-photodir": case "--photodir":
+ outargs.Add ("--photodir=" + (i + 1 == args.Length ? String.Empty : args [++i]));
+ break;
+ case "-i": case "-import": case "--import":
+ outargs.Add ("--import=" + (i + 1 == args.Length ? String.Empty : args [++i]));
+ break;
+ case "-v": case "-view":
+ outargs.Add ("--view");
+ break;
+ case "-slideshow":
+ outargs.Add ("--slideshow");
+ break;
+ default:
+ outargs.Add (args [i]);
+ break;
+ }
+ }
+ return outargs.ToArray ();
}
static int Main (string [] args)
{
- bool empty = false;
- List<string> uris = new List<string> ();
+ args = FixArgs (args);
+
Unix.SetProcessName (Defines.PACKAGE);
+ ThreadAssist.InitializeMainThread ();
+ ThreadAssist.ProxyToMainHandler = RunIdle;
+ XdgThumbnailSpec.DefaultLoader = (uri) => {
+ using (var file = ImageFile.Create (uri))
+ return file.Load ();
+ };
// Options and Option parsing
bool shutdown = false;
bool view = false;
@@ -71,111 +150,115 @@ namespace FSpot
GLib.GType.Init ();
Catalog.Init ("f-spot", Defines.LOCALE_DIR);
- FSpot.Global.PhotoDirectory = Preferences.Get<string> (Preferences.STORAGE_PATH);
- for (int i = 0; i < args.Length && !shutdown; i++) {
- switch (args [i]) {
- case "-h": case "-?": case "-help": case "--help": case "-usage":
- Help ();
- return 0;
+ FSpot.Global.PhotoUri = new SafeUri (Preferences.Get<string> (Preferences.STORAGE_PATH));
- case "-shutdown": case "--shutdown":
- Log.Information ("Shutting down existing F-Spot server...");
- shutdown = true;
- break;
+ ApplicationContext.CommandLine = new CommandLineParser (args, 0);
- case "-b": case "-basedir": case "--basedir":
- if (i+1 == args.Length || args[i+1].StartsWith ("-")) {
- Log.Error ("f-spot: -basedir option takes one argument");
- return 1;
- }
- FSpot.Global.BaseDirectory = args [++i];
- Log.Information ("BaseDirectory is now {0}", FSpot.Global.BaseDirectory);
- break;
+ if (ApplicationContext.CommandLine.ContainsStart ("help")) {
+ ShowHelp ();
+ return 0;
+ }
- case "-p": case "-photodir": case "--photodir":
- if (i+1 == args.Length || args[i+1].StartsWith ("-")) {
- Log.Error ("f-spot: -photodir option takes one argument");
- return 1;
- }
- FSpot.Global.PhotoDirectory = System.IO.Path.GetFullPath (args [++i]);
- Log.Information ("PhotoDirectory is now {0}", FSpot.Global.PhotoDirectory);
- break;
+ if (ApplicationContext.CommandLine.Contains ("version")) {
+ ShowVersion ();
+ return 0;
+ }
- case "-i": case "-import": case "--import":
- if (i+1 == args.Length) {
- Log.Error ("f-spot: -import option takes one argument");
- return 1;
- }
- import_uri = args [++i];
- break;
+ if (ApplicationContext.CommandLine.Contains ("versions")) {
+ ShowAssemblyVersions ();
+ return 0;
+ }
- case "-slideshow": case "--slideshow":
- slideshow = true;
- break;
+ if (ApplicationContext.CommandLine.Contains ("shutdown")) {
+ Log.Information ("Shutting down existing F-Spot server...");
+ shutdown = true;
+ }
- case "-v": case "-view": case "--view":
- if (i+1 == args.Length || args[i+1].StartsWith ("-")) {
- Log.Error ("f-spot: -view option takes (at least) one argument");
- return 1;
- }
- view = true;
- while (!(i+1 == args.Length) && !args[i+1].StartsWith ("-"))
- uris.Add (args [++i]);
- // if (!System.IO.Directory.Exists (args[i+1]) && !System.IO.File.Exists (args[i+1])) {
- // Log.Error ("f-spot: -view argument must be an existing file or directory");
- // return 1;
- // }
- break;
-
- case "-versions": case "--versions":
- Versions ();
- return 0;
+ if (ApplicationContext.CommandLine.Contains ("slideshow")) {
+ Log.Information ("Running F-Spot in slideshow mode.");
+ slideshow = true;
+ }
- case "-V": case "-version": case "--version":
- Version ();
- return 0;
+ if (ApplicationContext.CommandLine.Contains ("basedir")) {
+ string dir = ApplicationContext.CommandLine ["basedir"];
- case "--strace":
- Log.Tracing = true;
- break;
+ if (!string.IsNullOrEmpty (dir))
+ {
+ FSpot.Global.BaseDirectory = dir;
+ Log.InformationFormat ("BaseDirectory is now {0}", dir);
+ } else {
+ Log.Error ("f-spot: -basedir option takes one argument");
+ return 1;
+ }
+ }
- case "--debug":
- Log.Debugging = true;
- // Debug GdkPixbuf critical warnings
- GLib.LogFunc logFunc = new GLib.LogFunc (GLib.Log.PrintTraceLogFunction);
- GLib.Log.SetLogHandler ("GdkPixbuf", GLib.LogLevelFlags.Critical, logFunc);
+ if (ApplicationContext.CommandLine.Contains ("photodir")) {
+ string dir = ApplicationContext.CommandLine ["photodir"];
- // Debug Gtk critical warnings
- GLib.Log.SetLogHandler ("Gtk", GLib.LogLevelFlags.Critical, logFunc);
+ if (!string.IsNullOrEmpty (dir))
+ {
+ FSpot.Global.PhotoUri = new SafeUri (dir);
+ Log.InformationFormat ("PhotoDirectory is now {0}", dir);
+ } else {
+ Log.Error ("f-spot: -photodir option takes one argument");
+ return 1;
+ }
+ }
- // Debug GLib critical warnings
- GLib.Log.SetLogHandler ("GLib", GLib.LogLevelFlags.Critical, logFunc);
+ if (ApplicationContext.CommandLine.Contains ("import")) {
+ string dir = ApplicationContext.CommandLine ["import"];
- //Debug GLib-GObject critical warnings
- GLib.Log.SetLogHandler ("GLib-GObject", GLib.LogLevelFlags.Critical, logFunc);
+ if (!string.IsNullOrEmpty (dir))
+ {
+ import_uri = dir;
+ } else {
+ Log.Error ("f-spot: -import option takes one argument");
+ return 1;
+ }
+ }
- break;
- case "--uninstalled": case "--gdb": case "--valgrind": case "--sync":
- break;
- default:
- if (args [i].StartsWith ("--profile"))
- break;
- if (args [i].StartsWith ("--trace"))
- break;
- Log.Debug ("Unparsed argument >>{0}<<", args [i]);
- break;
+ List <string> uris = new List <string> ();
+ if (ApplicationContext.CommandLine.Contains ("view")) {
+ view = true;
+ var items = ApplicationContext.CommandLine.Files;
+
+ if (items.Count > 0)
+ {
+ uris = new List<string> (items);
+ } else {
+ Log.Error ("f-spot: -view option takes at least one argument");
+ return 1;
}
}
+ if (ApplicationContext.CommandLine.Contains ("debug")) {
+ Log.Debugging = true;
+ // Debug GdkPixbuf critical warnings
+ GLib.LogFunc logFunc = new GLib.LogFunc (GLib.Log.PrintTraceLogFunction);
+ GLib.Log.SetLogHandler ("GdkPixbuf", GLib.LogLevelFlags.Critical, logFunc);
+
+ // Debug Gtk critical warnings
+ GLib.Log.SetLogHandler ("Gtk", GLib.LogLevelFlags.Critical, logFunc);
+
+ // Debug GLib critical warnings
+ GLib.Log.SetLogHandler ("GLib", GLib.LogLevelFlags.Critical, logFunc);
+
+ //Debug GLib-GObject critical warnings
+ GLib.Log.SetLogHandler ("GLib-GObject", GLib.LogLevelFlags.Critical, logFunc);
+
+ GLib.Log.SetLogHandler ("GLib-GIO", GLib.LogLevelFlags.Critical, logFunc);
+ }
+
// Validate command line options
if ( (import_uri != null && (view || shutdown || slideshow)) ||
- (view && (shutdown || slideshow)) ||
- (shutdown && slideshow) ) {
+ (view && (shutdown || slideshow)) ||
+ (shutdown && slideshow) )
+ {
Log.Error ("Can't mix -import, -view, -shutdown or -slideshow");
return 1;
}
- //Initialize Mono.Addins
+ // Initialize Mono.Addins
uint timer = Log.InformationTimerStart ("Initializing Mono.Addins");
AddinManager.Initialize (FSpot.Global.BaseDirectory);
AddinManager.Registry.Update (null);
@@ -183,16 +266,15 @@ namespace FSpot
string maj_version = String.Join (".", Defines.VERSION.Split ('.'), 0, 3);
foreach (AddinRepository repo in setupService.Repositories.GetRepositories ())
if (repo.Url.StartsWith ("http://addins.f-spot.org/") && !repo.Url.StartsWith ("http://addins.f-spot.org/" + maj_version)) {
- Log.Information ("Unregistering {0}", repo.Url);
+ Log.InformationFormat ("Unregistering {0}", repo.Url);
setupService.Repositories.RemoveRepository (repo.Url);
}
setupService.Repositories.RegisterRepository (null, "http://addins.f-spot.org/" + maj_version, false);
Log.DebugTimerPrint (timer, "Mono.Addins Initialization took {0}");
- //Gtk initialization
+ // Gtk initialization
Gtk.Application.Init (Defines.PACKAGE, ref args);
- Gnome.Vfs.Vfs.Initialize ();
// init web proxy globally
Platform.WebProxy.Init ();
@@ -229,7 +311,7 @@ namespace FSpot
foreach (string s in uris)
list.AddUnknown (s);
if (list.Count == 0) {
- Help ();
+ ShowHelp ();
return 1;
}
App.Instance.View (list);
@@ -251,5 +333,10 @@ namespace FSpot
}
return 0;
}
+
+ public static void RunIdle (InvokeHandler handler)
+ {
+ GLib.Idle.Add (delegate { handler (); return false; });
+ }
}
}
diff --git a/src/ui/import.ui b/src/ui/import.ui
new file mode 100644
index 0000000..e46f071
--- /dev/null
+++ b/src/ui/import.ui
@@ -0,0 +1,297 @@
+<?xml version="1.0"?>
+<interface>
+ <!-- interface-requires gtk+ 2.12 -->
+ <!-- interface-naming-policy toplevel-contextual -->
+ <object class="GtkDialog" id="import_dialog">
+ <property name="title" translatable="yes">Import</property>
+ <property name="modal">True</property>
+ <property name="default_width">664</property>
+ <property name="type_hint">dialog</property>
+ <property name="has_separator">False</property>
+ <child internal-child="vbox">
+ <object class="GtkVBox" id="dialog-vbox14">
+ <property name="visible">True</property>
+ <property name="orientation">vertical</property>
+ <child>
+ <object class="GtkVBox" id="vbox62">
+ <property name="visible">True</property>
+ <property name="border_width">6</property>
+ <property name="orientation">vertical</property>
+ <property name="spacing">6</property>
+ <child>
+ <object class="GtkVBox" id="vbox65">
+ <property name="visible">True</property>
+ <property name="orientation">vertical</property>
+ <property name="spacing">6</property>
+ <child>
+ <object class="GtkHBox" id="hbox59">
+ <property name="visible">True</property>
+ <property name="spacing">6</property>
+ <child>
+ <object class="GtkLabel" id="import_label">
+ <property name="visible">True</property>
+ <property name="label" translatable="yes" comments="Translators: this string means 'source of import'">Import from:</property>
+ </object>
+ <packing>
+ <property name="expand">False</property>
+ <property name="fill">False</property>
+ <property name="position">0</property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkComboBox" id="sources_combo">
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ </object>
+ <packing>
+ <property name="expand">False</property>
+ <property name="fill">False</property>
+ <property name="position">1</property>
+ </packing>
+ </child>
+ <child>
+ <placeholder/>
+ </child>
+ </object>
+ <packing>
+ <property name="expand">False</property>
+ <property name="fill">False</property>
+ <property name="position">0</property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkHPaned" id="import_hpaned">
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ <property name="position">1</property>
+ <child>
+ <object class="GtkScrolledWindow" id="icon_scrolled">
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ <property name="hscrollbar_policy">automatic</property>
+ <property name="vscrollbar_policy">automatic</property>
+ <property name="shadow_type">in</property>
+ <child>
+ <placeholder/>
+ </child>
+ </object>
+ <packing>
+ <property name="resize">False</property>
+ <property name="shrink">True</property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkScrolledWindow" id="photo_scrolled">
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ <property name="hscrollbar_policy">automatic</property>
+ <property name="vscrollbar_policy">automatic</property>
+ <property name="shadow_type">in</property>
+ <child>
+ <placeholder/>
+ </child>
+ </object>
+ <packing>
+ <property name="resize">True</property>
+ <property name="shrink">True</property>
+ </packing>
+ </child>
+ </object>
+ <packing>
+ <property name="position">1</property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkProgressBar" id="progress_bar">
+ <property name="visible">True</property>
+ <property name="pulse_step">0.02</property>
+ </object>
+ <packing>
+ <property name="expand">False</property>
+ <property name="fill">False</property>
+ <property name="position">2</property>
+ </packing>
+ </child>
+ </object>
+ <packing>
+ <property name="position">0</property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkHBox" id="hbox1">
+ <property name="visible">True</property>
+ <property name="spacing">6</property>
+ <child>
+ <object class="GtkLabel" id="label228">
+ <property name="visible">True</property>
+ <property name="xalign">0</property>
+ <property name="label" translatable="yes">Attach Tags:</property>
+ </object>
+ <packing>
+ <property name="expand">False</property>
+ <property name="position">0</property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkHBox" id="tagentry_box">
+ <property name="visible">True</property>
+ <child>
+ <placeholder/>
+ </child>
+ </object>
+ <packing>
+ <property name="position">1</property>
+ </packing>
+ </child>
+ </object>
+ <packing>
+ <property name="expand">False</property>
+ <property name="position">1</property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkTable" id="table1">
+ <property name="visible">True</property>
+ <property name="n_rows">2</property>
+ <property name="n_columns">2</property>
+ <property name="column_spacing">6</property>
+ <property name="row_spacing">6</property>
+ <property name="homogeneous">True</property>
+ <child>
+ <object class="GtkCheckButton" id="duplicate_check">
+ <property name="label" translatable="yes">Detect duplicates</property>
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ <property name="receives_default">False</property>
+ <property name="use_underline">True</property>
+ <property name="active">True</property>
+ <property name="draw_indicator">True</property>
+ </object>
+ </child>
+ <child>
+ <object class="GtkCheckButton" id="copy_check">
+ <property name="label" translatable="yes">Copy files to the Photos folder</property>
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ <property name="receives_default">False</property>
+ <property name="use_underline">True</property>
+ <property name="active">True</property>
+ <property name="draw_indicator">True</property>
+ </object>
+ <packing>
+ <property name="left_attach">1</property>
+ <property name="right_attach">2</property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkCheckButton" id="recurse_check">
+ <property name="label" translatable="yes">Include subfolders</property>
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ <property name="receives_default">False</property>
+ <property name="use_underline">True</property>
+ <property name="active">True</property>
+ <property name="draw_indicator">True</property>
+ </object>
+ <packing>
+ <property name="top_attach">1</property>
+ <property name="bottom_attach">2</property>
+ </packing>
+ </child>
+ <child>
+ <placeholder/>
+ </child>
+ </object>
+ <packing>
+ <property name="expand">False</property>
+ <property name="position">2</property>
+ </packing>
+ </child>
+ </object>
+ <packing>
+ <property name="position">1</property>
+ </packing>
+ </child>
+ <child internal-child="action_area">
+ <object class="GtkHButtonBox" id="dialog-action_area14">
+ <property name="visible">True</property>
+ <property name="layout_style">end</property>
+ <child>
+ <object class="GtkButton" id="cancel_button">
+ <property name="label">gtk-cancel</property>
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ <property name="can_default">True</property>
+ <property name="receives_default">False</property>
+ <property name="use_stock">True</property>
+ </object>
+ <packing>
+ <property name="expand">False</property>
+ <property name="fill">False</property>
+ <property name="position">0</property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkButton" id="import_button">
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ <property name="can_default">True</property>
+ <property name="receives_default">False</property>
+ <child>
+ <object class="GtkAlignment" id="alignment49">
+ <property name="visible">True</property>
+ <property name="xscale">0</property>
+ <property name="yscale">0</property>
+ <child>
+ <object class="GtkHBox" id="hbox64">
+ <property name="visible">True</property>
+ <property name="spacing">2</property>
+ <child>
+ <object class="GtkImage" id="image15">
+ <property name="visible">True</property>
+ <property name="stock">gtk-ok</property>
+ </object>
+ <packing>
+ <property name="expand">False</property>
+ <property name="fill">False</property>
+ <property name="position">0</property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkLabel" id="label157">
+ <property name="visible">True</property>
+ <property name="label" translatable="yes">Import</property>
+ <property name="use_underline">True</property>
+ </object>
+ <packing>
+ <property name="expand">False</property>
+ <property name="fill">False</property>
+ <property name="position">1</property>
+ </packing>
+ </child>
+ </object>
+ </child>
+ </object>
+ </child>
+ </object>
+ <packing>
+ <property name="expand">False</property>
+ <property name="fill">False</property>
+ <property name="position">1</property>
+ </packing>
+ </child>
+ </object>
+ <packing>
+ <property name="expand">False</property>
+ <property name="pack_type">end</property>
+ <property name="position">0</property>
+ </packing>
+ </child>
+ </object>
+ </child>
+ <action-widgets>
+ <action-widget response="-6">cancel_button</action-widget>
+ <action-widget response="-5">import_button</action-widget>
+ </action-widgets>
+ </object>
+</interface>
diff --git a/src/ui/mail_dialog.ui b/src/ui/mail_dialog.ui
new file mode 100644
index 0000000..546b865
--- /dev/null
+++ b/src/ui/mail_dialog.ui
@@ -0,0 +1,435 @@
+<?xml version="1.0"?>
+<interface>
+ <!-- interface-requires gtk+ 2.12 -->
+ <!-- interface-naming-policy toplevel-contextual -->
+ <object class="GtkDialog" id="mail_dialog">
+ <property name="visible">True</property>
+ <property name="title" translatable="yes">Create Mail</property>
+ <property name="type_hint">dialog</property>
+ <child internal-child="vbox">
+ <object class="GtkVBox" id="dialog-vbox15">
+ <property name="visible">True</property>
+ <property name="orientation">vertical</property>
+ <child>
+ <object class="GtkHBox" id="hbox89">
+ <property name="visible">True</property>
+ <property name="spacing">12</property>
+ <child>
+ <object class="GtkFrame" id="frame48">
+ <property name="visible">True</property>
+ <property name="label_xalign">0</property>
+ <property name="shadow_type">none</property>
+ <child>
+ <object class="GtkAlignment" id="alignment64">
+ <property name="visible">True</property>
+ <property name="left_padding">12</property>
+ <child>
+ <object class="GtkScrolledWindow" id="tray_scrolled">
+ <property name="width_request">200</property>
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ <property name="hscrollbar_policy">automatic</property>
+ <property name="vscrollbar_policy">automatic</property>
+ <property name="shadow_type">in</property>
+ <child>
+ <placeholder/>
+ </child>
+ </object>
+ </child>
+ </object>
+ </child>
+ <child type="label">
+ <object class="GtkLabel" id="label216">
+ <property name="visible">True</property>
+ <property name="label" translatable="yes"><b>Photos</b></property>
+ <property name="use_markup">True</property>
+ </object>
+ </child>
+ </object>
+ <packing>
+ <property name="position">0</property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkVBox" id="vbox67">
+ <property name="visible">True</property>
+ <property name="orientation">vertical</property>
+ <child>
+ <object class="GtkFrame" id="frame43">
+ <property name="visible">True</property>
+ <property name="label_xalign">0</property>
+ <property name="shadow_type">none</property>
+ <child>
+ <object class="GtkAlignment" id="alignment52">
+ <property name="visible">True</property>
+ <property name="left_padding">12</property>
+ <child>
+ <object class="GtkVBox" id="vbox69">
+ <property name="visible">True</property>
+ <property name="orientation">vertical</property>
+ <child>
+ <object class="GtkTable" id="table22">
+ <property name="visible">True</property>
+ <property name="border_width">3</property>
+ <property name="n_rows">3</property>
+ <property name="n_columns">2</property>
+ <property name="column_spacing">20</property>
+ <property name="row_spacing">3</property>
+ <child>
+ <object class="GtkRadioButton" id="tiny_size">
+ <property name="label" translatable="yes">Tiny</property>
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ <property name="receives_default">False</property>
+ <property name="tooltip_text" translatable="yes">320 px</property>
+ <property name="use_underline">True</property>
+ <property name="draw_indicator">True</property>
+ <signal name="toggled" handler="on_size_toggled"/>
+ </object>
+ <packing>
+ <property name="x_options">GTK_FILL</property>
+ <property name="y_options"></property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkRadioButton" id="small_size">
+ <property name="label" translatable="yes">Small</property>
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ <property name="receives_default">False</property>
+ <property name="tooltip_text" translatable="yes">480 px</property>
+ <property name="use_underline">True</property>
+ <property name="draw_indicator">True</property>
+ <property name="group">tiny_size</property>
+ <signal name="toggled" handler="on_size_toggled"/>
+ </object>
+ <packing>
+ <property name="top_attach">1</property>
+ <property name="bottom_attach">2</property>
+ <property name="x_options">GTK_FILL</property>
+ <property name="y_options"></property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkRadioButton" id="medium_size">
+ <property name="label" translatable="yes">Medium</property>
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ <property name="receives_default">False</property>
+ <property name="tooltip_text" translatable="yes">640 px</property>
+ <property name="use_underline">True</property>
+ <property name="draw_indicator">True</property>
+ <property name="group">tiny_size</property>
+ <signal name="toggled" handler="on_size_toggled"/>
+ </object>
+ <packing>
+ <property name="top_attach">2</property>
+ <property name="bottom_attach">3</property>
+ <property name="x_options">GTK_FILL</property>
+ <property name="y_options"></property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkRadioButton" id="large_size">
+ <property name="label" translatable="yes">Large</property>
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ <property name="receives_default">False</property>
+ <property name="tooltip_text" translatable="yes">800 px</property>
+ <property name="use_underline">True</property>
+ <property name="draw_indicator">True</property>
+ <property name="group">tiny_size</property>
+ <signal name="toggled" handler="on_size_toggled"/>
+ </object>
+ <packing>
+ <property name="left_attach">1</property>
+ <property name="right_attach">2</property>
+ <property name="x_options">GTK_FILL</property>
+ <property name="y_options"></property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkRadioButton" id="x_large_size">
+ <property name="label" translatable="yes">Extra large</property>
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ <property name="receives_default">False</property>
+ <property name="tooltip_text" translatable="yes">1024 px</property>
+ <property name="use_underline">True</property>
+ <property name="draw_indicator">True</property>
+ <property name="group">tiny_size</property>
+ <signal name="toggled" handler="on_size_toggled"/>
+ </object>
+ <packing>
+ <property name="left_attach">1</property>
+ <property name="right_attach">2</property>
+ <property name="top_attach">1</property>
+ <property name="bottom_attach">2</property>
+ <property name="x_options">GTK_FILL</property>
+ <property name="y_options"></property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkRadioButton" id="original_size">
+ <property name="label" translatable="yes">Original</property>
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ <property name="receives_default">False</property>
+ <property name="tooltip_text" translatable="yes">Original size (possible very large file size)</property>
+ <property name="use_underline">True</property>
+ <property name="draw_indicator">True</property>
+ <property name="group">tiny_size</property>
+ <signal name="toggled" handler="on_size_toggled"/>
+ </object>
+ <packing>
+ <property name="left_attach">1</property>
+ <property name="right_attach">2</property>
+ <property name="top_attach">2</property>
+ <property name="bottom_attach">3</property>
+ <property name="x_options">GTK_FILL</property>
+ <property name="y_options"></property>
+ </packing>
+ </child>
+ </object>
+ <packing>
+ <property name="expand">False</property>
+ <property name="fill">False</property>
+ <property name="position">0</property>
+ </packing>
+ </child>
+ <child>
+ <placeholder/>
+ </child>
+ </object>
+ </child>
+ </object>
+ </child>
+ <child type="label">
+ <object class="GtkLabel" id="label175">
+ <property name="visible">True</property>
+ <property name="label" translatable="yes"><b>Size</b></property>
+ <property name="use_markup">True</property>
+ </object>
+ </child>
+ </object>
+ <packing>
+ <property name="position">0</property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkFrame" id="optionframe">
+ <property name="visible">True</property>
+ <property name="label_xalign">0</property>
+ <property name="shadow_type">none</property>
+ <child>
+ <object class="GtkAlignment" id="alignment65">
+ <property name="visible">True</property>
+ <property name="left_padding">12</property>
+ <child>
+ <object class="GtkCheckButton" id="rotate_check">
+ <property name="label" translatable="yes">Autorotate</property>
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ <property name="receives_default">False</property>
+ <property name="tooltip_text" translatable="yes">Specify if an original size picture should be rotated or not. Smaller sizes are automatically rotated.</property>
+ <property name="use_underline">True</property>
+ <property name="active">True</property>
+ <property name="draw_indicator">True</property>
+ </object>
+ </child>
+ </object>
+ </child>
+ <child type="label">
+ <object class="GtkLabel" id="label217">
+ <property name="visible">True</property>
+ <property name="label" translatable="yes"><b>Style</b></property>
+ <property name="use_markup">True</property>
+ </object>
+ </child>
+ </object>
+ <packing>
+ <property name="position">1</property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkFrame" id="frame42">
+ <property name="visible">True</property>
+ <property name="label_xalign">0</property>
+ <property name="shadow_type">none</property>
+ <child>
+ <object class="GtkAlignment" id="alignment51">
+ <property name="visible">True</property>
+ <property name="top_padding">3</property>
+ <property name="left_padding">12</property>
+ <child>
+ <object class="GtkTable" id="table21">
+ <property name="visible">True</property>
+ <property name="n_rows">3</property>
+ <property name="n_columns">2</property>
+ <property name="column_spacing">3</property>
+ <property name="row_spacing">3</property>
+ <child>
+ <object class="GtkLabel" id="label169">
+ <property name="visible">True</property>
+ <property name="xalign">0</property>
+ <property name="label" translatable="yes">Number of pictures</property>
+ <property name="justify">right</property>
+ </object>
+ <packing>
+ <property name="x_options">GTK_FILL</property>
+ <property name="y_options"></property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkLabel" id="label170">
+ <property name="visible">True</property>
+ <property name="xalign">0</property>
+ <property name="label" translatable="yes">Total original size</property>
+ <property name="justify">right</property>
+ </object>
+ <packing>
+ <property name="top_attach">1</property>
+ <property name="bottom_attach">2</property>
+ <property name="x_options">GTK_FILL</property>
+ <property name="y_options"></property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkLabel" id="ApproxNewSizeLabel">
+ <property name="visible">True</property>
+ <property name="xalign">0</property>
+ <property name="label" translatable="yes">Estimated new size</property>
+ <property name="justify">right</property>
+ </object>
+ <packing>
+ <property name="top_attach">2</property>
+ <property name="bottom_attach">3</property>
+ <property name="x_options">GTK_FILL</property>
+ <property name="y_options"></property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkLabel" id="NumberOfPictures">
+ <property name="visible">True</property>
+ <property name="xalign">0</property>
+ </object>
+ <packing>
+ <property name="left_attach">1</property>
+ <property name="right_attach">2</property>
+ <property name="x_options">GTK_FILL</property>
+ <property name="y_options"></property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkLabel" id="TotalOriginalSize">
+ <property name="visible">True</property>
+ <property name="xalign">0</property>
+ </object>
+ <packing>
+ <property name="left_attach">1</property>
+ <property name="right_attach">2</property>
+ <property name="top_attach">1</property>
+ <property name="bottom_attach">2</property>
+ <property name="x_options">GTK_FILL</property>
+ <property name="y_options"></property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkLabel" id="ApproxNewSize">
+ <property name="visible">True</property>
+ <property name="xalign">0</property>
+ </object>
+ <packing>
+ <property name="left_attach">1</property>
+ <property name="right_attach">2</property>
+ <property name="top_attach">2</property>
+ <property name="bottom_attach">3</property>
+ <property name="x_options">GTK_FILL</property>
+ <property name="y_options"></property>
+ </packing>
+ </child>
+ </object>
+ </child>
+ </object>
+ </child>
+ <child type="label">
+ <object class="GtkLabel" id="label167">
+ <property name="visible">True</property>
+ <property name="label" translatable="yes"><b>Summary</b></property>
+ <property name="use_markup">True</property>
+ </object>
+ </child>
+ </object>
+ <packing>
+ <property name="position">2</property>
+ </packing>
+ </child>
+ <child>
+ <placeholder/>
+ </child>
+ </object>
+ <packing>
+ <property name="position">1</property>
+ </packing>
+ </child>
+ </object>
+ <packing>
+ <property name="position">2</property>
+ </packing>
+ </child>
+ <child internal-child="action_area">
+ <object class="GtkHButtonBox" id="dialog-action_area15">
+ <property name="visible">True</property>
+ <property name="layout_style">end</property>
+ <child>
+ <object class="GtkButton" id="cancelbutton7">
+ <property name="label">gtk-cancel</property>
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ <property name="can_default">True</property>
+ <property name="receives_default">False</property>
+ <property name="tooltip_text" translatable="yes">Do not send a mail</property>
+ <property name="use_stock">True</property>
+ </object>
+ <packing>
+ <property name="expand">False</property>
+ <property name="fill">False</property>
+ <property name="position">0</property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkButton" id="okbutton8">
+ <property name="label" translatable="yes">_Create Mail</property>
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ <property name="can_default">True</property>
+ <property name="receives_default">False</property>
+ <property name="tooltip_text" translatable="yes">Create a mail with the selected photos (possibly resized) attached</property>
+ <property name="image">image1</property>
+ <property name="use_underline">True</property>
+ </object>
+ <packing>
+ <property name="expand">False</property>
+ <property name="fill">False</property>
+ <property name="position">1</property>
+ </packing>
+ </child>
+ </object>
+ <packing>
+ <property name="expand">False</property>
+ <property name="pack_type">end</property>
+ <property name="position">0</property>
+ </packing>
+ </child>
+ </object>
+ </child>
+ <action-widgets>
+ <action-widget response="-6">cancelbutton7</action-widget>
+ <action-widget response="-5">okbutton8</action-widget>
+ </action-widgets>
+ </object>
+ <object class="GtkImage" id="image1">
+ <property name="visible">True</property>
+ <property name="stock">gtk-apply</property>
+ </object>
+</interface>
diff --git a/src/ui/main_window.ui b/src/ui/main_window.ui
index 5c7ee79..ce72e74 100644
--- a/src/ui/main_window.ui
+++ b/src/ui/main_window.ui
@@ -55,6 +55,13 @@
</object>
</child>
<child>
+ <object class="GtkAction" id="detach_version_menu_item">
+ <property name="name">detach_version_menu_item</property>
+ <property name="label" translatable="yes">De_tach Version</property>
+ <signal handler="HandleDetachVersionCommand" name="activate"/>
+ </object>
+ </child>
+ <child>
<object class="GtkAction" id="export">
<property name="name">export</property>
<property name="label" translatable="yes">_Export to</property>
@@ -130,6 +137,14 @@
<accelerator key="A" modifiers="GDK_SHIFT_MASK | GDK_CONTROL_MASK"/>
</child>
<child>
+ <object class="GtkAction" id="select_invert">
+ <property name="name">select_invert</property>
+ <property name="label" translatable="yes">_Invert Selection</property>
+ <signal handler="HandleSelectInvertCommand" name="activate"/>
+ </object>
+ <accelerator key="I" modifiers="GDK_CONTROL_MASK"/>
+ </child>
+ <child>
<object class="GtkAction" id="rotate_left">
<property name="name">rotate_left</property>
<property name="label" translatable="yes">Rotate _Left</property>
@@ -574,6 +589,7 @@
<menuitem action="create_version_menu_item"/>
<menuitem action="delete_version_menu_item"/>
<menuitem action="rename_version_menu_item"/>
+ <menuitem action="detach_version_menu_item"/>
<separator/>
<menuitem action="export"/>
<menuitem action="print"/>
@@ -678,6 +694,7 @@
<child>
<object class="GtkVBox" id="vbox41">
<property name="visible">True</property>
+ <property name="orientation">vertical</property>
<child>
<object class="GtkMenuBar" constructor="uimanager" id="menubar1">
<property name="visible">True</property>
@@ -690,6 +707,7 @@
<child>
<object class="GtkVBox" id="toolbar_vbox">
<property name="visible">True</property>
+ <property name="orientation">vertical</property>
<child>
<placeholder/>
</child>
@@ -703,6 +721,7 @@
<child>
<object class="GtkVBox" id="group_vbox">
<property name="visible">True</property>
+ <property name="orientation">vertical</property>
<child>
<object class="GtkHPaned" id="main_hpaned">
<property name="visible">True</property>
@@ -711,9 +730,11 @@
<child>
<object class="GtkVBox" id="info_vbox">
<property name="visible">True</property>
+ <property name="orientation">vertical</property>
<child>
<object class="GtkVBox" id="sidebar_vbox">
<property name="visible">True</property>
+ <property name="orientation">vertical</property>
<child>
<placeholder/>
</child>
@@ -722,6 +743,7 @@
<child>
<object class="GtkVBox" id="left_vbox">
<property name="visible">True</property>
+ <property name="orientation">vertical</property>
<child>
<placeholder/>
</child>
@@ -740,6 +762,7 @@
<child>
<object class="GtkVBox" id="view_vbox">
<property name="visible">True</property>
+ <property name="orientation">vertical</property>
<child>
<object class="GtkNotebook" id="view_notebook">
<property name="visible">True</property>
@@ -811,6 +834,7 @@
<child>
<object class="GtkVBox" id="tag_entry_container">
<property name="visible">True</property>
+ <property name="orientation">vertical</property>
</object>
<packing>
<property name="position">1</property>
diff --git a/src/ui/version_name_dialog.ui b/src/ui/version_name_dialog.ui
new file mode 100644
index 0000000..71a3972
--- /dev/null
+++ b/src/ui/version_name_dialog.ui
@@ -0,0 +1,115 @@
+<?xml version="1.0"?>
+<interface>
+ <!-- interface-requires gtk+ 2.12 -->
+ <!-- interface-naming-policy toplevel-contextual -->
+ <object class="GtkDialog" id="version_name_dialog">
+ <property name="border_width">6</property>
+ <property name="modal">True</property>
+ <property name="destroy_with_parent">True</property>
+ <property name="type_hint">dialog</property>
+ <property name="has_separator">False</property>
+ <child internal-child="vbox">
+ <object class="GtkVBox" id="dialog-vbox1">
+ <property name="visible">True</property>
+ <property name="orientation">vertical</property>
+ <property name="spacing">2</property>
+ <child>
+ <object class="GtkHBox" id="hbox1">
+ <property name="visible">True</property>
+ <property name="spacing">6</property>
+ <child>
+ <object class="GtkLabel" id="prompt_label">
+ <property name="visible">True</property>
+ </object>
+ <packing>
+ <property name="expand">False</property>
+ <property name="fill">False</property>
+ <property name="position">0</property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkEntry" id="version_name_entry">
+ <property name="width_request">200</property>
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ <signal name="changed" handler="HandleVersionNameEntryChanged"/>
+ </object>
+ <packing>
+ <property name="position">1</property>
+ </packing>
+ </child>
+ </object>
+ <packing>
+ <property name="expand">False</property>
+ <property name="padding">6</property>
+ <property name="position">1</property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkAlignment" id="alignment1">
+ <property name="visible">True</property>
+ <property name="xalign">0</property>
+ <property name="xscale">0</property>
+ <child>
+ <object class="GtkLabel" id="already_in_use_label">
+ <property name="visible">True</property>
+ <property name="label"><small> </small></property>
+ <property name="use_markup">True</property>
+ </object>
+ </child>
+ </object>
+ <packing>
+ <property name="fill">False</property>
+ <property name="position">2</property>
+ </packing>
+ </child>
+ <child internal-child="action_area">
+ <object class="GtkHButtonBox" id="dialog-action_area1">
+ <property name="visible">True</property>
+ <property name="layout_style">end</property>
+ <child>
+ <object class="GtkButton" id="cancel_button">
+ <property name="label">gtk-cancel</property>
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ <property name="can_default">True</property>
+ <property name="receives_default">False</property>
+ <property name="use_stock">True</property>
+ </object>
+ <packing>
+ <property name="expand">False</property>
+ <property name="fill">False</property>
+ <property name="position">0</property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkButton" id="ok_button">
+ <property name="label">gtk-ok</property>
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ <property name="can_default">True</property>
+ <property name="receives_default">False</property>
+ <property name="use_stock">True</property>
+ </object>
+ <packing>
+ <property name="expand">False</property>
+ <property name="fill">False</property>
+ <property name="position">1</property>
+ </packing>
+ </child>
+ </object>
+ <packing>
+ <property name="expand">False</property>
+ <property name="padding">2</property>
+ <property name="pack_type">end</property>
+ <property name="position">0</property>
+ </packing>
+ </child>
+ </object>
+ </child>
+ <action-widgets>
+ <action-widget response="-6">cancel_button</action-widget>
+ <action-widget response="-5">ok_button</action-widget>
+ </action-widgets>
+ </object>
+</interface>
diff --git a/tests/Makefile.am b/tests/Makefile.am
index 92ea75a..c4a60be 100644
--- a/tests/Makefile.am
+++ b/tests/Makefile.am
@@ -1,5 +1,37 @@
-SUBDIRS = \
- src
+include $(top_srcdir)/build/build.environment.mk
+
+EXTRA_DIST = \
+ data/f-spot-0.6.1.5.db \
+ data/f-spot-0.6.2.db \
+ data/f-spot-0.7.0-17.2.db \
+ data/f-spot-0.7.0-18.0.db
+
+if ENABLE_TESTS
+
+TEST_ASSEMBLIES = \
+ f-spot.exe \
+ FSpot.Query.dll \
+ FSpot.Utils.dll
+
+ENV_OPTIONS = TZ=America/Chicago LC_ALL=it_IT LANG=it_IT
+NUNIT_CONSOLE = $$(echo $$(which nunit-console2 || which nunit-console))
+RUNNER = for asm in $${TEST_ASSEMBLIES}; do echo -e "\033[1mRunning tests on $${asm}...\033[0m"; $(ENV_OPTIONS) $(NUNIT_CONSOLE) -nologo -noshadow $$asm; done
+
+test:
+ @pushd $(DIR_BIN) &>/dev/null; \
+ export MONO_PATH=../lib/semweb:../lib/gio-sharp/gio:../lib/gtk-sharp-beans:../lib/unique-sharp/unique:../bin:$$MONO_PATH; \
+ export TEST_ASSEMBLIES="$(TEST_ASSEMBLIES)"; $(RUNNER); \
+ popd &>/dev/null;
+
+%:
+ @pushd $(DIR_BIN) &>/dev/null; \
+ for i in *.dll; do \
+ if [[ $$(echo "$$i" | tr "[:upper:]" "[:lower:]") = "$$(echo "$@" | tr "[:upper:]" "[:lower:]").dll" ]]; then \
+ export TEST_ASSEMBLIES="$$i"; $(RUNNER); \
+ fi; \
+ done;
+
+endif
+
+MAINTAINERCLEANFILES = Makefile.in
-MAINTAINERCLEANFILES = \
- Makefile.in
diff --git a/tests/Makefile.in b/tests/Makefile.in
index abe3c2e..e2f3a77 100644
--- a/tests/Makefile.in
+++ b/tests/Makefile.in
@@ -33,13 +33,20 @@ PRE_UNINSTALL = :
POST_UNINSTALL = :
build_triplet = @build@
host_triplet = @host@
+DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in \
+ $(top_srcdir)/build/build.environment.mk
subdir = tests
-DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in
ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
am__aclocal_m4_deps = $(top_srcdir)/build/m4/shave/shave.m4 \
$(top_srcdir)/build/m4/shamrock/expansions.m4 \
+ $(top_srcdir)/build/m4/shamrock/gnome-doc.m4 \
$(top_srcdir)/build/m4/shamrock/mono.m4 \
+ $(top_srcdir)/build/m4/shamrock/nunit.m4 \
$(top_srcdir)/build/m4/shamrock/programs.m4 \
+ $(top_srcdir)/build/m4/f-spot/flickrnet.m4 \
+ $(top_srcdir)/build/m4/f-spot/gnome-keyring-sharp.m4 \
+ $(top_srcdir)/build/m4/f-spot/gtk-sharp.m4 \
+ $(top_srcdir)/build/m4/f-spot/mono-addins.m4 \
$(top_srcdir)/acinclude.m4 $(top_srcdir)/configure.ac
am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
$(ACLOCAL_M4)
@@ -49,47 +56,7 @@ CONFIG_CLEAN_FILES =
CONFIG_CLEAN_VPATH_FILES =
SOURCES =
DIST_SOURCES =
-RECURSIVE_TARGETS = all-recursive check-recursive dvi-recursive \
- html-recursive info-recursive install-data-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
-AM_RECURSIVE_TARGETS = $(RECURSIVE_TARGETS:-recursive=) \
- $(RECURSIVE_CLEAN_TARGETS:-recursive=) tags TAGS ctags CTAGS \
- distdir
-ETAGS = etags
-CTAGS = ctags
-DIST_SUBDIRS = $(SUBDIRS)
DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
-am__relativize = \
- dir0=`pwd`; \
- sed_first='s,^\([^/]*\)/.*$$,\1,'; \
- sed_rest='s,^[^/]*/*,,'; \
- sed_last='s,^.*/\([^/]*\)$$,\1,'; \
- sed_butlast='s,/*[^/]*$$,,'; \
- while test -n "$$dir1"; do \
- first=`echo "$$dir1" | sed -e "$$sed_first"`; \
- if test "$$first" != "."; then \
- if test "$$first" = ".."; then \
- dir2=`echo "$$dir0" | sed -e "$$sed_last"`/"$$dir2"; \
- dir0=`echo "$$dir0" | sed -e "$$sed_butlast"`; \
- else \
- first2=`echo "$$dir2" | sed -e "$$sed_first"`; \
- if test "$$first2" = "$$first"; then \
- dir2=`echo "$$dir2" | sed -e "$$sed_rest"`; \
- else \
- dir2="../$$dir2"; \
- fi; \
- dir0="$$dir0"/"$$first"; \
- fi; \
- fi; \
- dir1=`echo "$$dir1" | sed -e "$$sed_rest"`; \
- done; \
- reldir="$$dir2"
ACLOCAL = @ACLOCAL@
ACLOCAL_AMFLAGS = @ACLOCAL_AMFLAGS@
ALL_LINGUAS = @ALL_LINGUAS@
@@ -134,6 +101,8 @@ EXIF_SOVERSION = @EXIF_SOVERSION@
F77 = @F77@
FC = @FC@
FGREP = @FGREP@
+FLICKRNET_CFLAGS = @FLICKRNET_CFLAGS@
+FLICKRNET_LIBS = @FLICKRNET_LIBS@
F_CFLAGS = @F_CFLAGS@
F_LIBS = @F_LIBS@
GAPI2CODEGEN = @GAPI2CODEGEN@
@@ -147,6 +116,8 @@ GCONF_SHARP_LIBS = @GCONF_SHARP_LIBS@
GETTEXT_PACKAGE = @GETTEXT_PACKAGE@
GIO_CFLAGS = @GIO_CFLAGS@
GIO_LIBS = @GIO_LIBS@
+GLIBSHARP_2_12_7_CFLAGS = @GLIBSHARP_2_12_7_CFLAGS@
+GLIBSHARP_2_12_7_LIBS = @GLIBSHARP_2_12_7_LIBS@
GLIBSHARP_CFLAGS = @GLIBSHARP_CFLAGS@
GLIBSHARP_LIBS = @GLIBSHARP_LIBS@
GLIB_CFLAGS = @GLIB_CFLAGS@
@@ -162,6 +133,10 @@ GNOME_SHARP_CFLAGS = @GNOME_SHARP_CFLAGS@
GNOME_SHARP_LIBS = @GNOME_SHARP_LIBS@
GOBJECT_QUERY = @GOBJECT_QUERY@
GREP = @GREP@
+GTKSHARP_A11Y_CFLAGS = @GTKSHARP_A11Y_CFLAGS@
+GTKSHARP_A11Y_LIBS = @GTKSHARP_A11Y_LIBS@
+GTKSHARP_CFLAGS = @GTKSHARP_CFLAGS@
+GTKSHARP_LIBS = @GTKSHARP_LIBS@
HELP_DIR = @HELP_DIR@
ICONS_DIRECTORY = @ICONS_DIRECTORY@
INSTALL = @INSTALL@
@@ -175,14 +150,14 @@ INTLTOOL_EXTRACT = @INTLTOOL_EXTRACT@
INTLTOOL_MERGE = @INTLTOOL_MERGE@
INTLTOOL_PERL = @INTLTOOL_PERL@
INTLTOOL_UPDATE = @INTLTOOL_UPDATE@
+KEYRINGSHARP_CFLAGS = @KEYRINGSHARP_CFLAGS@
+KEYRINGSHARP_LIBS = @KEYRINGSHARP_LIBS@
LCMS_CFLAGS = @LCMS_CFLAGS@
LCMS_LIBS = @LCMS_LIBS@
LD = @LD@
LDFLAGS = @LDFLAGS@
LIBEXIF_VERSION_CHECK_CFLAGS = @LIBEXIF_VERSION_CHECK_CFLAGS@
LIBEXIF_VERSION_CHECK_LIBS = @LIBEXIF_VERSION_CHECK_LIBS@
-LIBGPHOTO2_CFLAGS = @LIBGPHOTO2_CFLAGS@
-LIBGPHOTO2_LIBS = @LIBGPHOTO2_LIBS@
LIBJPEG = @LIBJPEG@
LIBOBJS = @LIBOBJS@
LIBS = @LIBS@
@@ -197,6 +172,12 @@ MCS = @MCS@
MKDIR_P = @MKDIR_P@
MKINSTALLDIRS = @MKINSTALLDIRS@
MONO = @MONO@
+MONO_ADDINS_CFLAGS = @MONO_ADDINS_CFLAGS@
+MONO_ADDINS_GUI_CFLAGS = @MONO_ADDINS_GUI_CFLAGS@
+MONO_ADDINS_GUI_LIBS = @MONO_ADDINS_GUI_LIBS@
+MONO_ADDINS_LIBS = @MONO_ADDINS_LIBS@
+MONO_ADDINS_SETUP_CFLAGS = @MONO_ADDINS_SETUP_CFLAGS@
+MONO_ADDINS_SETUP_LIBS = @MONO_ADDINS_SETUP_LIBS@
MONO_MODULE_CFLAGS = @MONO_MODULE_CFLAGS@
MONO_MODULE_LIBS = @MONO_MODULE_LIBS@
MSGFMT = @MSGFMT@
@@ -207,7 +188,6 @@ NDESK_DBUS_LIBS = @NDESK_DBUS_LIBS@
NM = @NM@
NMEDIT = @NMEDIT@
NUNIT_CFLAGS = @NUNIT_CFLAGS@
-NUNIT_DEFINES = @NUNIT_DEFINES@
NUNIT_LIBS = @NUNIT_LIBS@
OBJC = @OBJC@
OBJDUMP = @OBJDUMP@
@@ -299,16 +279,196 @@ target_alias = @target_alias@
top_build_prefix = @top_build_prefix@
top_builddir = @top_builddir@
top_srcdir = @top_srcdir@
-SUBDIRS = \
- src
-MAINTAINERCLEANFILES = \
- Makefile.in
-
-all: all-recursive
+# Initializers
+MONO_BASE_PATH =
+MONO_ADDINS_PATH =
+
+# Install Paths
+DEFAULT_INSTALL_DIR = $(pkglibdir)
+BACKENDS_INSTALL_DIR = $(DEFAULT_INSTALL_DIR)/Backends
+EXTENSIONS_INSTALL_DIR = $(DEFAULT_INSTALL_DIR)/Extensions
+DIR_DOCS = $(top_builddir)/docs
+DIR_EXTENSIONS = $(top_builddir)/extensions
+DIR_ICONS = $(top_builddir)/icons
+DIR_JPEGTRAN = $(top_builddir)/lib/libjpegtran
+DIR_LIBFSPOT = $(top_builddir)/lib/libfspot
+DIR_SEMWEB = $(top_builddir)/lib/semweb
+DIR_SRC = $(top_builddir)/src
+DIR_GIOSHARP = $(top_builddir)/lib/gio-sharp/gio
+DIR_GTKSHARPBEANS = $(top_builddir)/lib/gtk-sharp-beans
+DIR_UNIQUESHARP = $(top_builddir)/lib/unique-sharp/unique
+DIR_BIN = $(top_builddir)/bin
+
+# External libraries to link against, generated from configure
+LINK_SYSTEM = -r:System
+LINK_SYSTEMDATA = -r:System.Data
+LINK_SYSTEM_WEB = -r:System.Web
+LINK_MONO_POSIX = -r:Mono.Posix
+LINK_MONO_CAIRO = -r:Mono.Cairo
+LINK_MONO_SIMD = -r:Mono.Simd
+LINK_MONODATA = -r:Mono.Data
+LINK_MONO_DATA_SQLITECLIENT = -r:Mono.Data.SqliteClient
+LINK_ICSHARP_ZIP_LIB = -r:ICSharpCode.SharpZipLib
+LINK_KEYRING = $(KEYRINGSHARP_LIBS)
+LINK_GLIB = $(GLIBSHARP_LIBS)
+LINK_GTK = $(GTKSHARP_LIBS)
+LINK_GNOME = $(GNOME_SHARP_LIBS)
+LINK_GCONF = $(GCONF_SHARP_LIBS)
+LINK_GLADE = -pkg:glade-sharp-2.0
+LINK_FLICKRNET = -pkg:flickrnet
+LINK_DBUS = $(NDESK_DBUS_LIBS) $(NDESK_DBUS_GLIB_LIBS)
+LINK_DBUS_NO_GLIB = $(NDESK_DBUS_LIBS)
+LINK_MONO_ADDINS_DEPS = $(MONO_ADDINS_LIBS)
+LINK_MONO_ADDINS_SETUP_DEPS = $(MONO_ADDINS_SETUP_LIBS)
+LINK_MONO_ADDINS_GUI_DEPS = $(MONO_ADDINS_GUI_LIBS)
+
+# GIO
+REF_GIO =
+LINK_GIO = -r:$(DIR_GIOSHARP)/gio-sharp.dll
+LINK_GIO_DEPS = $(REF_GIO) $(LINK_GIO)
+
+# Gtk Beans
+REF_GTK_BEANS = $(LINK_GIO_DEPS)
+LINK_GTK_BEANS = -r:$(DIR_GTKSHARPBEANS)/gtk-sharp-beans.dll
+LINK_GTK_BEANS_DEPS = $(REF_GTK_BEANS) $(LINK_GTK_BEANS)
+
+# Uniqe
+REF_UNIQUE =
+LINK_UNIQUE = -r:$(DIR_UNIQUESHARP)/unique-sharp.dll
+LINK_UNIQUE_DEPS = $(REF_UNIQUE) $(LINK_UNIQUE)
+
+# Hyena
+REF_HYENA = $(LINK_SYSTEM) $(LINK_MONO_POSIX)
+LINK_HYENA = -r:$(DIR_BIN)/Hyena.dll
+LINK_HYENA_DEPS = $(REF_HYENA) $(LINK_HYENA)
+
+# Semweb
+REF_SEMWEB = $(LINK_SYSTEMDATA) $(LINK_HYENA_DEPS)
+LINK_SEMWEB = -r:$(DIR_BIN)/SemWeb.dll
+LINK_SEMWEB_DEPS = $(REF_SEMWEB) $(LINK_SEMWEB)
+
+# Hyena.Data.Sqlite
+REF_HYENA_DATA_SQLITE = $(LINK_SQLITE)
+LINK_HYENA_DATA_SQLITE = -r:$(DIR_BIN)/Hyena.Data.Sqlite.dll
+LINK_HYENA_DATA_SQLITE_DEPS = $(REF_HYENA_DATA_SQLITE) $(LINK_HYENA_DATA_SQLITE)
+
+# Hyena.Gui
+REF_HYENA_GUI = $(LINK_HYENA_DEPS)
+LINK_HYENA_GUI = -r:$(DIR_BIN)/Hyena.Gui.dll
+LINK_HENA_GUI_DEPS = $(REF_HYENA_GUI) $(LINK_HYENA_GUI)
+
+# FSpot.Cms
+REF_FSPOT_CMS = $(LINK_GTK)
+LINK_FSPOT_CMS = -r:$(DIR_BIN)/FSpot.Cms.dll
+LINK_FSPOT_CMS_DEPS = $(REF_FSPOT_CMS) $(LINK_FSPOT_CMS)
+
+# FSpot.Utils
+REF_FSPOT_UTILS = $(LINK_HYENA_DEPS) $(LINK_GTK) $(LINK_GIO) $(LINK_MONO_CAIRO)
+LINK_FSPOT_UTILS = -r:$(DIR_BIN)/FSpot.Utils.dll
+LINK_FSPOT_UTILS_DEPS = $(REF_FSPOT_UTILS) $(LINK_FSPOT_UTILS)
+
+# FSpot.Core
+REF_FSPOT_CORE = $(LINK_FSPOT_UTILS_DEPS) $(LINK_FSPOT_CMS_DEPS)
+LINK_FSPOT_CORE = -r:$(DIR_BIN)/FSpot.Core.dll
+LINK_FSPOT_CORE_DEPS = $(REF_FSPOT_CORE) $(LINK_FSPOT_CORE)
+
+# FSpot.Query
+REF_FSPOT_QUERY = $(LINK_FSPOT_CORE_DEPS)
+LINK_FSPOT_QUERY = -r:$(DIR_BIN)/FSpot.Query.dll
+LINK_FSPOT_QUERY_DEPS = $(REF_FSPOT_QUERY) $(LINK_FSPOT_QUERY)
+
+# FSpot.JobScheduler
+REF_FSPOT_JOB_SCHEDULER = $(LINK_HYENA_DEPS)
+LINK_FSPOT_JOB_SCHEDULER = -r:$(DIR_BIN)/FSpot.JobScheduler.dll
+LINK_FSPOT_JOB_SCHEDULER_DEPS = $(REF_FSPOT_JOB_SCHEDULER) $(LINK_FSPOT_JOB_SCHEDULER)
+
+# FSpot.Bling
+REF_FSPOT_BLING = $(LINK_GTK_BEANS_DEPS) $(LINK_GLIB)
+LINK_FSPOT_BLING = -r:$(DIR_BIN)/FSpot.Bling.dll
+LINK_FSPOT_BLING_DEPS = $(REF_FSPOT_BLING) $(LINK_FSPOT_BLING)
+
+# FSpot.Platform
+REF_FSPOT_PLATFORM = $(LINK_GCONF) $(LINK_GTK) $(LINK_FSPOT_CORE_DEPS) $(LINK_DBUS)
+LINK_FSPOT_PLATFORM = -r:$(DIR_BIN)/FSpot.Platform.dll
+LINK_FSPOT_PLATFORM_DEPS = $(REF_FSPOT_PLATFORM) $(LINK_FSPOT_PLATFORM)
+
+# FSpot.Widgets
+REF_FSPOT_WIDGETS = $(LINK_FSPOT_CORE_DEPS) $(LINK_FSPOT_BLING_DEPS)
+LINK_FSPOT_WIDGETS = -r:$(DIR_BIN)/FSpot.Widgets.dll
+LINK_FSPOT_WIDGETS_DEPS = $(REF_FSPOT_WIDGETS) $(LINK_FSPOT_WIDGETS)
+
+# FSpot (executable)
+REF_FSPOT = $(LINK_FSPOT_WIDGETS_DEPS) $(LINK_FSPOT_PLATFORM_DEPS) $(LINK_FSPOT_QUERY_DEPS) \
+ $(LINK_GLIB) $(LINK_MONO_ADDINS_DEPS) $(LINK_UNIQUE_DEPS) $(LINK_MONO_ADDINS_SETUP_DEPS) \
+ $(LINK_SEMWEB_DEPS) $(LINK_GLADE) $(LINK_MONODATA) $(LINK_MONO_DATA_SQLITECLIENT) \
+ $(LINK_MONO_ADDINS_GUI_DEPS) $(LINK_FSPOT_JOB_SCHEDULER_DEPS) $(LINK_ICSHARP_ZIP_LIB) \
+ $(LINK_GNOME)
+
+# FIXME: do not link executables
+LINK_FSPOT = -r:$(DIR_BIN)/f-spot.exe
+LINK_FSPOT_DEPS = $(REF_FSPOT) $(LINK_FSPOT)
+
+# Extensions
+REF_FSPOT_EXTENSION_BLACKOUTEDITOR = $(LINK_FSPOT_DEPS)
+REF_FSPOT_EXTENSION_BWEDITOR = $(LINK_FSPOT_DEPS) $(LINK_MONO_SIMD)
+REF_FSPOT_EXTENSION_FLIPEDITOR = $(LINK_FSPOT_DEPS)
+REF_FSPOT_EXTENSION_PIXELATEEDITOR = $(LINK_FSPOT_DEPS)
+REF_FSPOT_EXTENSION_RESIZEEDITOR = $(LINK_FSPOT_DEPS)
+REF_FSPOT_EXTENSION_CDEXPORT = $(LINK_FSPOT_DEPS)
+REF_FSPOT_EXTENSION_FACEBOOKEXPORT = $(LINK_FSPOT_DEPS) $(LINK_KEYRING)
+REF_FSPOT_EXTENSION_FLICKREXPORT = $(LINK_FSPOT_DEPS) $(LINK_FLICKRNET)
+REF_FSPOT_EXTENSION_FOLDEREXPORT = $(LINK_FSPOT_DEPS) $(LINK_SYSTEM_WEB)
+REF_FSPOT_EXTENSION_GALLERYEXPORT = $(LINK_FSPOT_DEPS)
+REF_MONO_GOOGLE = $(LINK_HYENA_DEPS)
+LINK_MONO_GOOGLE = -r:$(DIR_BIN)/Mono.Google.dll
+LINK_MONO_GOOGLE_DEPS = $(REF_MONO_GOOGLE) $(LINK_MONO_GOOGLE)
+REF_FSPOT_EXTENSION_PICASAWEBEXPORT = $(LINK_FSPOT_DEPS) $(LINK_MONO_GOOGLE) $(LINK_KEYRING)
+REF_SMUGMUGNET = $(LINK_FSPOT_DEPS)
+LINK_SMUGMUGNET = -r:$(DIR_BIN)/SmugMugNet.dll
+LINK_SMUGMUGNET_DEPS = $(REF_SMUGMUGNET) $(LINK_SMUGMUGNET)
+REF_FSPOT_EXTENSION_SMUGMUGEXPORT = $(LINK_SMUGMUGNET_DEPS) $(LINK_KEYRING)
+REF_MONO_TABBLO = $(LINK_HYENA_DEPS)
+LINK_MONO_TABBLO = -r:$(DIR_BIN)/Mono.Tabblo.dll
+LINK_MONO_TABBLO_DEPS = $(REF_MONO_TABBLO) $(LINK_MONO_TABBLO)
+REF_FSPOT_EXTENSION_TABBLOEXPORT = $(LINK_FSPOT_DEPS) $(LINK_KEYRING) $(LINK_MONO_TABBLO_DEPS)
+REF_FSPOT_EXTENSION_ZIPEXPORT = $(LINK_FSPOT_DEPS)
+REF_FSPOT_EXTENSION_CHANGEPHOTOPATH = $(LINK_FSPOT_DEPS)
+REF_FSPOT_EXTENSION_DEVELOPINUFRAW = $(LINK_FSPOT_DEPS)
+REF_FSPOT_EXTENSION_HASHJOB = $(LINK_FSPOT_DEPS)
+REF_FSPOT_EXTENSION_LIVEWEBGALLERY = $(LINK_FSPOT_DEPS)
+REF_FSPOT_EXTENSION_MERGEDB = $(LINK_FSPOT_DEPS)
+REF_FSPOT_EXTENSION_RAWPLUSJPEG = $(LINK_FSPOT_DEPS)
+REF_FSPOT_EXTENSION_RETROACTIVEROLL = $(LINK_FSPOT_DEPS)
+REF_FSPOT_EXTENSION_SCREENSAVERCONFIG = $(LINK_FSPOT_DEPS)
+REF_FSPOT_EXTENSION_COVERTRANSITION = $(LINK_FSPOT_DEPS)
+
+# Cute hack to replace a space with something
+colon := :
+empty :=
+space := $(empty) $(empty)
+
+# Build path to allow running uninstalled
+RUN_PATH = $(subst $(space),$(colon), $(MONO_BASE_PATH))
+EXTRA_DIST = \
+ data/f-spot-0.6.1.5.db \
+ data/f-spot-0.6.2.db \
+ data/f-spot-0.7.0-17.2.db \
+ data/f-spot-0.7.0-18.0.db
+
+ at ENABLE_TESTS_TRUE@TEST_ASSEMBLIES = \
+ at ENABLE_TESTS_TRUE@ f-spot.exe \
+ at ENABLE_TESTS_TRUE@ FSpot.Query.dll \
+ at ENABLE_TESTS_TRUE@ FSpot.Utils.dll
+
+ at ENABLE_TESTS_TRUE@ENV_OPTIONS = TZ=America/Chicago LC_ALL=it_IT LANG=it_IT
+ at ENABLE_TESTS_TRUE@NUNIT_CONSOLE = $$(echo $$(which nunit-console2 || which nunit-console))
+ at ENABLE_TESTS_TRUE@RUNNER = for asm in $${TEST_ASSEMBLIES}; do echo -e "\033[1mRunning tests on $${asm}...\033[0m"; $(ENV_OPTIONS) $(NUNIT_CONSOLE) -nologo -noshadow $$asm; done
+MAINTAINERCLEANFILES = Makefile.in
+all: all-am
.SUFFIXES:
-$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(am__configure_deps)
+$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(top_srcdir)/build/build.environment.mk $(am__configure_deps)
@for dep in $?; do \
case '$(am__configure_deps)' in \
*$$dep*) \
@@ -344,141 +504,12 @@ mostlyclean-libtool:
clean-libtool:
-rm -rf .libs _libs
-
-# 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,
-# (1) if the variable is set in `config.status', edit `config.status'
-# (which will cause the Makefiles to be regenerated when you run `make');
-# (2) otherwise, pass the desired values on the `make' command line.
-$(RECURSIVE_TARGETS):
- @fail= failcom='exit 1'; \
- for f in x $$MAKEFLAGS; do \
- case $$f in \
- *=* | --[!k]*);; \
- *k*) failcom='fail=yes';; \
- esac; \
- done; \
- dot_seen=no; \
- target=`echo $@ | sed s/-recursive//`; \
- list='$(SUBDIRS)'; for subdir in $$list; do \
- echo "Making $$target in $$subdir"; \
- if test "$$subdir" = "."; then \
- dot_seen=yes; \
- local_target="$$target-am"; \
- else \
- local_target="$$target"; \
- fi; \
- ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \
- || eval $$failcom; \
- done; \
- if test "$$dot_seen" = "no"; then \
- $(MAKE) $(AM_MAKEFLAGS) "$$target-am" || exit 1; \
- fi; test -z "$$fail"
-
-$(RECURSIVE_CLEAN_TARGETS):
- @fail= failcom='exit 1'; \
- for f in x $$MAKEFLAGS; do \
- case $$f in \
- *=* | --[!k]*);; \
- *k*) failcom='fail=yes';; \
- esac; \
- done; \
- dot_seen=no; \
- case "$@" in \
- distclean-* | maintainer-clean-*) list='$(DIST_SUBDIRS)' ;; \
- *) list='$(SUBDIRS)' ;; \
- esac; \
- rev=''; for subdir in $$list; do \
- if test "$$subdir" = "."; then :; else \
- rev="$$subdir $$rev"; \
- fi; \
- done; \
- rev="$$rev ."; \
- target=`echo $@ | sed s/-recursive//`; \
- for subdir in $$rev; do \
- echo "Making $$target in $$subdir"; \
- if test "$$subdir" = "."; then \
- local_target="$$target-am"; \
- else \
- local_target="$$target"; \
- fi; \
- ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \
- || eval $$failcom; \
- done && test -z "$$fail"
-tags-recursive:
- list='$(SUBDIRS)'; for subdir in $$list; do \
- test "$$subdir" = . || ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) tags); \
- done
-ctags-recursive:
- list='$(SUBDIRS)'; for subdir in $$list; do \
- test "$$subdir" = . || ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) ctags); \
- done
-
-ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES)
- list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
- unique=`for i in $$list; do \
- if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
- done | \
- $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
- END { if (nonempty) { for (i in files) print i; }; }'`; \
- mkid -fID $$unique
tags: TAGS
+TAGS:
-TAGS: tags-recursive $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \
- $(TAGS_FILES) $(LISP)
- set x; \
- here=`pwd`; \
- if ($(ETAGS) --etags-include --version) >/dev/null 2>&1; then \
- include_option=--etags-include; \
- empty_fix=.; \
- else \
- include_option=--include; \
- empty_fix=; \
- fi; \
- list='$(SUBDIRS)'; for subdir in $$list; do \
- if test "$$subdir" = .; then :; else \
- test ! -f $$subdir/TAGS || \
- set "$$@" "$$include_option=$$here/$$subdir/TAGS"; \
- fi; \
- done; \
- list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
- unique=`for i in $$list; do \
- if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
- done | \
- $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
- END { if (nonempty) { for (i in files) print i; }; }'`; \
- shift; \
- if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \
- test -n "$$unique" || unique=$$empty_fix; \
- if test $$# -gt 0; then \
- $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
- "$$@" $$unique; \
- else \
- $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
- $$unique; \
- fi; \
- fi
ctags: CTAGS
-CTAGS: ctags-recursive $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \
- $(TAGS_FILES) $(LISP)
- list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
- unique=`for i in $$list; do \
- if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
- done | \
- $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
- END { if (nonempty) { for (i in files) print i; }; }'`; \
- test -z "$(CTAGS_ARGS)$$unique" \
- || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \
- $$unique
-
-GTAGS:
- here=`$(am__cd) $(top_builddir) && pwd` \
- && $(am__cd) $(top_srcdir) \
- && gtags -i $(GTAGS_ARGS) "$$here"
-
-distclean-tags:
- -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags
+CTAGS:
+
distdir: $(DISTFILES)
@srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
@@ -510,48 +541,19 @@ distdir: $(DISTFILES)
|| exit 1; \
fi; \
done
- @list='$(DIST_SUBDIRS)'; for subdir in $$list; do \
- if test "$$subdir" = .; then :; else \
- test -d "$(distdir)/$$subdir" \
- || $(MKDIR_P) "$(distdir)/$$subdir" \
- || exit 1; \
- fi; \
- done
- @list='$(DIST_SUBDIRS)'; for subdir in $$list; do \
- if test "$$subdir" = .; then :; else \
- dir1=$$subdir; dir2="$(distdir)/$$subdir"; \
- $(am__relativize); \
- new_distdir=$$reldir; \
- dir1=$$subdir; dir2="$(top_distdir)"; \
- $(am__relativize); \
- new_top_distdir=$$reldir; \
- echo " (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) top_distdir="$$new_top_distdir" distdir="$$new_distdir" \\"; \
- echo " am__remove_distdir=: am__skip_length_check=: am__skip_mode_fix=: distdir)"; \
- ($(am__cd) $$subdir && \
- $(MAKE) $(AM_MAKEFLAGS) \
- top_distdir="$$new_top_distdir" \
- distdir="$$new_distdir" \
- am__remove_distdir=: \
- am__skip_length_check=: \
- am__skip_mode_fix=: \
- distdir) \
- || exit 1; \
- fi; \
- done
check-am: all-am
-check: check-recursive
+check: check-am
all-am: Makefile
-installdirs: installdirs-recursive
-installdirs-am:
-install: install-recursive
-install-exec: install-exec-recursive
-install-data: install-data-recursive
-uninstall: uninstall-recursive
+installdirs:
+install: install-am
+install-exec: install-exec-am
+install-data: install-data-am
+uninstall: uninstall-am
install-am: all-am
@$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
-installcheck: installcheck-recursive
+installcheck: installcheck-am
install-strip:
$(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
@@ -569,89 +571,99 @@ maintainer-clean-generic:
@echo "This command is intended for maintainers to use"
@echo "it deletes files that may require special tools to rebuild."
-test -z "$(MAINTAINERCLEANFILES)" || rm -f $(MAINTAINERCLEANFILES)
-clean: clean-recursive
+clean: clean-am
clean-am: clean-generic clean-libtool mostlyclean-am
-distclean: distclean-recursive
+distclean: distclean-am
-rm -f Makefile
-distclean-am: clean-am distclean-generic distclean-tags
+distclean-am: clean-am distclean-generic
-dvi: dvi-recursive
+dvi: dvi-am
dvi-am:
-html: html-recursive
+html: html-am
html-am:
-info: info-recursive
+info: info-am
info-am:
install-data-am:
-install-dvi: install-dvi-recursive
+install-dvi: install-dvi-am
install-dvi-am:
install-exec-am:
-install-html: install-html-recursive
+install-html: install-html-am
install-html-am:
-install-info: install-info-recursive
+install-info: install-info-am
install-info-am:
install-man:
-install-pdf: install-pdf-recursive
+install-pdf: install-pdf-am
install-pdf-am:
-install-ps: install-ps-recursive
+install-ps: install-ps-am
install-ps-am:
installcheck-am:
-maintainer-clean: maintainer-clean-recursive
+maintainer-clean: maintainer-clean-am
-rm -f Makefile
maintainer-clean-am: distclean-am maintainer-clean-generic
-mostlyclean: mostlyclean-recursive
+mostlyclean: mostlyclean-am
mostlyclean-am: mostlyclean-generic mostlyclean-libtool
-pdf: pdf-recursive
+pdf: pdf-am
pdf-am:
-ps: ps-recursive
+ps: ps-am
ps-am:
uninstall-am:
-.MAKE: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) ctags-recursive \
- install-am install-strip tags-recursive
-
-.PHONY: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) CTAGS GTAGS \
- all all-am check check-am clean clean-generic clean-libtool \
- ctags ctags-recursive distclean 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-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-generic \
- mostlyclean-libtool pdf pdf-am ps ps-am tags tags-recursive \
- uninstall uninstall-am
+.MAKE: install-am install-strip
+.PHONY: all all-am check check-am clean clean-generic clean-libtool \
+ distclean distclean-generic distclean-libtool distdir dvi \
+ dvi-am html html-am info info-am 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-generic \
+ mostlyclean-libtool pdf pdf-am ps ps-am uninstall uninstall-am
+
+
+ at ENABLE_TESTS_TRUE@test:
+ at ENABLE_TESTS_TRUE@ @pushd $(DIR_BIN) &>/dev/null; \
+ at ENABLE_TESTS_TRUE@ export MONO_PATH=../lib/semweb:../lib/gio-sharp/gio:../lib/gtk-sharp-beans:../lib/unique-sharp/unique:../bin:$$MONO_PATH; \
+ at ENABLE_TESTS_TRUE@ export TEST_ASSEMBLIES="$(TEST_ASSEMBLIES)"; $(RUNNER); \
+ at ENABLE_TESTS_TRUE@ popd &>/dev/null;
+
+ at ENABLE_TESTS_TRUE@%:
+ at ENABLE_TESTS_TRUE@ @pushd $(DIR_BIN) &>/dev/null; \
+ at ENABLE_TESTS_TRUE@ for i in *.dll; do \
+ at ENABLE_TESTS_TRUE@ if [[ $$(echo "$$i" | tr "[:upper:]" "[:lower:]") = "$$(echo "$@" | tr "[:upper:]" "[:lower:]").dll" ]]; then \
+ at ENABLE_TESTS_TRUE@ export TEST_ASSEMBLIES="$$i"; $(RUNNER); \
+ at ENABLE_TESTS_TRUE@ fi; \
+ at ENABLE_TESTS_TRUE@ done;
# 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/tests/data/f-spot-0.6.1.5.db b/tests/data/f-spot-0.6.1.5.db
new file mode 100644
index 0000000..70527f7
Binary files /dev/null and b/tests/data/f-spot-0.6.1.5.db differ
diff --git a/tests/data/f-spot-0.6.2.db b/tests/data/f-spot-0.6.2.db
new file mode 100644
index 0000000..69cb6d2
Binary files /dev/null and b/tests/data/f-spot-0.6.2.db differ
diff --git a/tests/data/f-spot-0.7.0-17.2.db b/tests/data/f-spot-0.7.0-17.2.db
new file mode 100644
index 0000000..87acaa8
Binary files /dev/null and b/tests/data/f-spot-0.7.0-17.2.db differ
diff --git a/tests/data/f-spot-0.7.0-18.0.db b/tests/data/f-spot-0.7.0-18.0.db
new file mode 100644
index 0000000..25ad266
Binary files /dev/null and b/tests/data/f-spot-0.7.0-18.0.db differ
diff --git a/tests/src/Cms/Cms.cs b/tests/src/Cms/Cms.cs
deleted file mode 100644
index 512be13..0000000
--- a/tests/src/Cms/Cms.cs
+++ /dev/null
@@ -1,59 +0,0 @@
-using NUnit.Framework;
-
-namespace Cms.Tests
-{
- [TestFixture]
- public class ProfileTests {
- [Test]
- public void LoadSave ()
- {
- Profile srgb = Profile.CreateStandardRgb ();
- byte [] data = srgb.Save ();
- Assert.IsNotNull (data);
- Profile result = new Profile (data);
- Assert.AreEqual (result.ProductName, srgb.ProductName);
- Assert.AreEqual (result.ProductDescription, srgb.ProductDescription);
- Assert.AreEqual (result.Model, srgb.Model);
- }
- }
-
- [TestFixture]
- public class GammaTableTests {
- [Test]
- public void TestAlloc ()
- {
- ushort [] values = new ushort [] { 0, 0x00ff, 0xffff };
- GammaTable t = new GammaTable (values);
- for (int i = 0; i < values.Length; i++) {
- Assert.AreEqual (t[i], values [i]);
- }
- }
- }
-
- [TestFixture]
- public class ColorCIExyYTests
- {
- [Test]
- public void TestTempTable1000 ()
- {
- ColorCIExyY wp = ColorCIExyY.WhitePointFromTemperature (1000);
- Assert.AreEqual (0.652756059, wp.x);
- Assert.AreEqual (0.344456906, wp.y);
- }
-
- [Test]
- public void TestTempReader ()
- {
- for (int i = 1000; i <= 25000; i += 10000)
- ColorCIExyY.WhitePointFromTemperature (i);
- }
-
- [Test]
- public void TestTempTable10000 ()
- {
- ColorCIExyY wp = ColorCIExyY.WhitePointFromTemperature (10000);
- Assert.AreEqual (0.280635904, wp.x);
- Assert.AreEqual (0.288290916, wp.y);
- }
- }
-}
diff --git a/tests/src/Filters/JpegFilter.cs b/tests/src/Filters/JpegFilter.cs
deleted file mode 100644
index dee2464..0000000
--- a/tests/src/Filters/JpegFilter.cs
+++ /dev/null
@@ -1,73 +0,0 @@
-using NUnit.Framework;
-using System;
-
-namespace FSpot.Filters.Tests
-{
- [TestFixture]
- public class JpegFilterTests : ImageTest
- {
- string [] Names = {
- "fspot-jpegfilter-test.png",
- "fspot-jpegfilter-test.jpeg",
- "fspot-jpegfilter-test.jpg",
- "fspot-jpegfilter-test.JPG",
- };
-
- [Test]
- public void ResultIsJpeg ()
- {
- foreach (string name in Names)
- ResultIsJpeg (name);
- }
-
- public void ResultIsJpeg (string name)
- {
- string path = CreateFile (name, 48);
- IFilter filter = new JpegFilter ();
- FilterRequest req = new FilterRequest (path);
- filter.Convert (req);
- using (ImageFile img = new JpegFile (req.Current)) {
- Assert.IsTrue (img != null, "result is null");
- Assert.IsTrue (img is JpegFile, "result is not a jpg");
- }
- System.IO.File.Delete (path);
- }
-
- [Test]
- public void ExtensionIsJPG ()
- {
- foreach (string name in Names)
- ExtensionIsJPG (name);
- }
-
- public void ExtensionIsJPG (string name)
- {
- string path = CreateFile (name, 48);
- IFilter filter = new JpegFilter ();
- FilterRequest req = new FilterRequest (path);
- filter.Convert (req);
- string extension = System.IO.Path.GetExtension (req.Current.LocalPath).ToLower ();
- Assert.IsTrue (extension == ".jpg" || extension == ".jpeg", String.Format ("{0} is not a valid extension for Jpeg", extension));
- System.IO.File.Delete (path);
- }
-
- [Test]
- public void OriginalUntouched ()
- {
- foreach (string name in Names)
- OriginalUntouched (name);
- }
-
- public void OriginalUntouched (string name)
- {
- string path = CreateFile (name, 48);
- IFilter filter = new JpegFilter ();
- FilterRequest req = new FilterRequest (path);
- long original_size = new System.IO.FileInfo (path).Length;
- filter.Convert (req);
- long final_size = new System.IO.FileInfo (req.Source.LocalPath).Length;
- Assert.IsTrue (original_size == final_size, "original is modified !!!");
- System.IO.File.Delete (path);
- }
- }
-}
diff --git a/tests/src/Filters/OrientationFilter.cs b/tests/src/Filters/OrientationFilter.cs
deleted file mode 100644
index 7515df4..0000000
--- a/tests/src/Filters/OrientationFilter.cs
+++ /dev/null
@@ -1,15 +0,0 @@
-using NUnit.Framework;
-namespace FSpot.Filters.Test
-{
- [TestFixture]
- public class OrientationFilterTests : ImageTest {
- [Test]
- public void TestNoop ()
- {
- string path = CreateFile ("test.jpg", 50);
- FilterRequest req = new FilterRequest (path);
- IFilter filter = new OrientationFilter ();
- Assert.IsFalse (filter.Convert (req), "Orientation Filter changed a normal file");
- }
- }
-}
diff --git a/tests/src/IBrowsableItem.cs b/tests/src/IBrowsableItem.cs
deleted file mode 100644
index 7d08ee1..0000000
--- a/tests/src/IBrowsableItem.cs
+++ /dev/null
@@ -1,79 +0,0 @@
-using NUnit.Framework;
-
-namespace FSpot.Tests
-{
- [TestFixture]
- public class IBrowsableItemTests
- {
- BrowsablePointer item;
- UriCollection collection;
- bool changed;
-
- public IBrowsableItemTests ()
- {
- collection = new FSpot.UriCollection ();
- item = new BrowsablePointer (collection, 0);
- item.Changed += delegate {
- changed = true;
- };
- }
-
- [Test]
- public void ChangeNotification ()
- {
- collection.Clear ();
- item.Index = 0;
-
- collection.Add (new System.Uri ("file:///blah.jpg"));
- Assert.IsTrue (item.IsValid);
- Assert.IsTrue (changed);
-
- changed = false;
- collection.Add (new System.Uri ("file:///test.png"));
- Assert.IsFalse (changed);
-
- collection.MarkChanged (new BrowsableEventArgs (0, FullInvalidate.Instance));
- Assert.IsTrue (changed);
-
- changed = false;
- item.MoveNext ();
- Assert.IsTrue (changed);
- Assert.AreEqual (item.Index, 1);
-
- changed = false;
- collection.Add (new System.Uri ("file:///bill.png"));
- Assert.IsFalse (changed);
- }
-
- [Test]
- public void Motion ()
- {
- collection.Clear ();
- item.Index = 0;
-
- collection.Add (new System.Uri ("file:///fake.png"));
- collection.Add (new System.Uri ("file:///mynameisedd.jpg"));
- Assert.AreEqual (item.Index, 0);
-
- changed = false;
- item.MoveNext ();
- Assert.IsTrue (changed);
-
- Assert.AreEqual (item.Index, 1);
- item.MoveNext ();
- Assert.AreEqual (item.Index, 1);
- item.MoveNext (true);
- Assert.AreEqual (item.Index, 0);
-
- changed = false;
- item.MovePrevious (true);
- Assert.IsTrue (changed);
-
- Assert.AreEqual (item.Index, 1);
- item.MovePrevious ();
- Assert.AreEqual (item.Index, 0);
- item.MovePrevious ();
- Assert.AreEqual (item.Index, 0);
- }
- }
-}
diff --git a/tests/src/ImageTest.cs b/tests/src/ImageTest.cs
deleted file mode 100644
index 3b65e7a..0000000
--- a/tests/src/ImageTest.cs
+++ /dev/null
@@ -1,46 +0,0 @@
-/*
- * ImageTest.cs
- *
- * Author(s)
- * Larry Ewing <lewing at novell.com>
- *
- * This is free software. See COPYING for details.
- *
- */
-using System;
-
-namespace FSpot {
- public class ImageTest {
- public ImageTest ()
- {
- Gtk.Application.Init ();
- }
-
- public static string CreateFile (string name, int size)
- {
- using (Gdk.Pixbuf test = new Gdk.Pixbuf (null, "f-spot-32.png")) {
- using (Gdk.Pixbuf tmp = test.ScaleSimple (size, size, Gdk.InterpType.Bilinear)) {
- string path = System.IO.Path.GetTempPath ();
- path = System.IO.Path.Combine (path, name);
- Console.WriteLine (path);
- string extension = System.IO.Path.GetExtension (path);
- string type = "null";
- switch (extension.ToLower ()) {
- case ".jpg":
- case ".jpeg":
- type = "jpeg";
- break;
- case ".png":
- type = "png";
- break;
- case ".tiff":
- type = "tiff";
- break;
- }
- tmp.Save (path, type);
- return path;
- }
- }
- }
- }
-}
diff --git a/tests/src/Makefile.am b/tests/src/Makefile.am
deleted file mode 100644
index 7c6e600..0000000
--- a/tests/src/Makefile.am
+++ /dev/null
@@ -1,63 +0,0 @@
-include $(top_srcdir)/Makefile.include
-
-SOURCES = \
- $(srcdir)/IBrowsableItem.cs \
- $(srcdir)/ImageTest.cs \
- $(srcdir)/PhotoStore.cs \
- $(srcdir)/TagStore.cs \
- $(srcdir)/ThumbnailGenerator.cs \
- $(srcdir)/Query/LogicalTerm.cs \
- $(srcdir)/Cms/Cms.cs \
- $(srcdir)/Filters/JpegFilter.cs \
- $(srcdir)/Filters/OrientationFilter.cs
-
-if ENABLE_TESTS
-
-all: FSpot.Tests.dll
-
-PKGS = \
- -pkg:mono-nunit \
- -pkg:gnome-vfs-sharp-2.0 \
- -pkg:gnome-sharp-2.0 \
- -pkg:gtk-sharp-2.0
-
-REFS = \
- $(LINK_GPHOTO2) \
- $(LINK_GIOSHARP) \
- $(LINK_UNIQUESHARP) \
- -r:$(top_builddir)/src/f-spot.exe \
- -r:$(top_builddir)/src/FSpot.Core.dll \
- -r:$(top_builddir)/src/FSpot.Query.dll \
- -r:$(top_builddir)/src/FSpot.Utils.dll \
- -r:$(top_builddir)/src/FSpot.Platform.dll \
- -r:$(top_builddir)/src/Cms.dll \
- -r:$(top_builddir)/lib/semweb/SemWeb.dll
-
-RESOURCES = \
- -resource:$(top_srcdir)/icons/f-spot-32.png,f-spot-32.png
-
-TEST_ASSEMBLIES = \
- FSpot.Tests.dll
-
-MCSFLAGS = -t:library -d:ENABLE_NUNIT
-
-FSpot.Tests.dll: $(SOURCES)
- gmcs $(MCSFLAGS) $(PKGS) $(REFS) $(SOURCES) $(RESOURCES) -out:FSpot.Tests.dll
-
-test: FSpot.Tests.dll
- export MONO_PATH=$(top_srcdir)/src:$(top_srcdir)/lib/gio-sharp/gio/:$(top_srcdir)/lib/semweb:$(top_srcdir)/lib/gtk-sharp-beans; nunit-console -noshadow -nologo $(TEST_ASSEMBLIES)
-
-CLEANFILES = \
- FSpot.Tests.dll.mdb \
- FSpot.Tests.dll \
- PhotoTestStore.db \
- TagTestStore.db \
- TestResult.xml
-
-endif
-
-MAINTAINERCLEANFILES = \
- Makefile.in
-
-EXTRA_DIST = \
- $(SOURCES)
diff --git a/tests/src/Makefile.in b/tests/src/Makefile.in
deleted file mode 100644
index 40ff7fb..0000000
--- a/tests/src/Makefile.in
+++ /dev/null
@@ -1,531 +0,0 @@
-# Makefile.in generated by automake 1.11.1 from Makefile.am.
-# @configure_input@
-
-# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
-# 2003, 2004, 2005, 2006, 2007, 2008, 2009 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.
-
-# This program is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
-# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
-# PARTICULAR PURPOSE.
-
- at SET_MAKE@
-VPATH = @srcdir@
-pkgdatadir = $(datadir)/@PACKAGE@
-pkgincludedir = $(includedir)/@PACKAGE@
-pkglibdir = $(libdir)/@PACKAGE@
-pkglibexecdir = $(libexecdir)/@PACKAGE@
-am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
-install_sh_DATA = $(install_sh) -c -m 644
-install_sh_PROGRAM = $(install_sh) -c
-install_sh_SCRIPT = $(install_sh) -c
-INSTALL_HEADER = $(INSTALL_DATA)
-transform = $(program_transform_name)
-NORMAL_INSTALL = :
-PRE_INSTALL = :
-POST_INSTALL = :
-NORMAL_UNINSTALL = :
-PRE_UNINSTALL = :
-POST_UNINSTALL = :
-build_triplet = @build@
-host_triplet = @host@
-DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in \
- $(top_srcdir)/Makefile.include
-subdir = tests/src
-ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
-am__aclocal_m4_deps = $(top_srcdir)/build/m4/shave/shave.m4 \
- $(top_srcdir)/build/m4/shamrock/expansions.m4 \
- $(top_srcdir)/build/m4/shamrock/mono.m4 \
- $(top_srcdir)/build/m4/shamrock/programs.m4 \
- $(top_srcdir)/acinclude.m4 $(top_srcdir)/configure.ac
-am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
- $(ACLOCAL_M4)
-mkinstalldirs = $(install_sh) -d
-CONFIG_HEADER = $(top_builddir)/config.h
-CONFIG_CLEAN_FILES =
-CONFIG_CLEAN_VPATH_FILES =
-DIST_SOURCES =
-DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
-ACLOCAL = @ACLOCAL@
-ACLOCAL_AMFLAGS = @ACLOCAL_AMFLAGS@
-ALL_LINGUAS = @ALL_LINGUAS@
-AMTAR = @AMTAR@
-AM_MAKEFLAGS = @AM_MAKEFLAGS@
-API_VERSION = @API_VERSION@
-AR = @AR@
-ASM_VERSION = @ASM_VERSION@
-AUTOCONF = @AUTOCONF@
-AUTOHEADER = @AUTOHEADER@
-AUTOMAKE = @AUTOMAKE@
-AWK = @AWK@
-CATALOGS = @CATALOGS@
-CATOBJEXT = @CATOBJEXT@
-CC = @CC@
-CCDEPMODE = @CCDEPMODE@
-CFLAGS = @CFLAGS@
-CPP = @CPP@
-CPPFLAGS = @CPPFLAGS@
-CSC_DEFINES = @CSC_DEFINES@
-CXX = @CXX@
-CXXCPP = @CXXCPP@
-CXXDEPMODE = @CXXDEPMODE@
-CXXFLAGS = @CXXFLAGS@
-CYGPATH_W = @CYGPATH_W@
-DATADIRNAME = @DATADIRNAME@
-DEFS = @DEFS@
-DEPDIR = @DEPDIR@
-DISPLAY_VERSION = @DISPLAY_VERSION@
-DISTCHECK_CONFIGURE_FLAGS = @DISTCHECK_CONFIGURE_FLAGS@
-DOC_USER_FORMATS = @DOC_USER_FORMATS@
-DSYMUTIL = @DSYMUTIL@
-DUMPBIN = @DUMPBIN@
-ECHO_C = @ECHO_C@
-ECHO_N = @ECHO_N@
-ECHO_T = @ECHO_T@
-EGREP = @EGREP@
-EXEEXT = @EXEEXT@
-EXIF_CFLAGS = @EXIF_CFLAGS@
-EXIF_LIBS = @EXIF_LIBS@
-EXIF_SOVERSION = @EXIF_SOVERSION@
-F77 = @F77@
-FC = @FC@
-FGREP = @FGREP@
-F_CFLAGS = @F_CFLAGS@
-F_LIBS = @F_LIBS@
-GAPI2CODEGEN = @GAPI2CODEGEN@
-GAPI2FIXUP = @GAPI2FIXUP@
-GAPI2PARSER = @GAPI2PARSER@
-GCONFTOOL = @GCONFTOOL@
-GCONF_SCHEMA_CONFIG_SOURCE = @GCONF_SCHEMA_CONFIG_SOURCE@
-GCONF_SCHEMA_FILE_DIR = @GCONF_SCHEMA_FILE_DIR@
-GCONF_SHARP_CFLAGS = @GCONF_SHARP_CFLAGS@
-GCONF_SHARP_LIBS = @GCONF_SHARP_LIBS@
-GETTEXT_PACKAGE = @GETTEXT_PACKAGE@
-GIO_CFLAGS = @GIO_CFLAGS@
-GIO_LIBS = @GIO_LIBS@
-GLIBSHARP_CFLAGS = @GLIBSHARP_CFLAGS@
-GLIBSHARP_LIBS = @GLIBSHARP_LIBS@
-GLIB_CFLAGS = @GLIB_CFLAGS@
-GLIB_GENMARSHAL = @GLIB_GENMARSHAL@
-GLIB_LIBS = @GLIB_LIBS@
-GLIB_MKENUMS = @GLIB_MKENUMS@
-GMOFILES = @GMOFILES@
-GMSGFMT = @GMSGFMT@
-GNOME_ICON_THEME_PREFIX = @GNOME_ICON_THEME_PREFIX@
-GNOME_SCREENSAVER_SAVERDIR = @GNOME_SCREENSAVER_SAVERDIR@
-GNOME_SCREENSAVER_THEMESDIR = @GNOME_SCREENSAVER_THEMESDIR@
-GNOME_SHARP_CFLAGS = @GNOME_SHARP_CFLAGS@
-GNOME_SHARP_LIBS = @GNOME_SHARP_LIBS@
-GOBJECT_QUERY = @GOBJECT_QUERY@
-GREP = @GREP@
-HELP_DIR = @HELP_DIR@
-ICONS_DIRECTORY = @ICONS_DIRECTORY@
-INSTALL = @INSTALL@
-INSTALL_DATA = @INSTALL_DATA@
-INSTALL_PROGRAM = @INSTALL_PROGRAM@
-INSTALL_SCRIPT = @INSTALL_SCRIPT@
-INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
-INSTOBJEXT = @INSTOBJEXT@
-INTLLIBS = @INTLLIBS@
-INTLTOOL_EXTRACT = @INTLTOOL_EXTRACT@
-INTLTOOL_MERGE = @INTLTOOL_MERGE@
-INTLTOOL_PERL = @INTLTOOL_PERL@
-INTLTOOL_UPDATE = @INTLTOOL_UPDATE@
-LCMS_CFLAGS = @LCMS_CFLAGS@
-LCMS_LIBS = @LCMS_LIBS@
-LD = @LD@
-LDFLAGS = @LDFLAGS@
-LIBEXIF_VERSION_CHECK_CFLAGS = @LIBEXIF_VERSION_CHECK_CFLAGS@
-LIBEXIF_VERSION_CHECK_LIBS = @LIBEXIF_VERSION_CHECK_LIBS@
-LIBGPHOTO2_CFLAGS = @LIBGPHOTO2_CFLAGS@
-LIBGPHOTO2_LIBS = @LIBGPHOTO2_LIBS@
-LIBJPEG = @LIBJPEG@
-LIBOBJS = @LIBOBJS@
-LIBS = @LIBS@
-LIBTOOL = @LIBTOOL@
-LIPO = @LIPO@
-LN_S = @LN_S@
-LTLIBOBJS = @LTLIBOBJS@
-MAINT = @MAINT@
-MAKEFLAGS = @MAKEFLAGS@
-MAKEINFO = @MAKEINFO@
-MCS = @MCS@
-MKDIR_P = @MKDIR_P@
-MKINSTALLDIRS = @MKINSTALLDIRS@
-MONO = @MONO@
-MONO_MODULE_CFLAGS = @MONO_MODULE_CFLAGS@
-MONO_MODULE_LIBS = @MONO_MODULE_LIBS@
-MSGFMT = @MSGFMT@
-MSGFMT_OPTS = @MSGFMT_OPTS@
-MSGMERGE = @MSGMERGE@
-NDESK_DBUS_CFLAGS = @NDESK_DBUS_CFLAGS@
-NDESK_DBUS_LIBS = @NDESK_DBUS_LIBS@
-NM = @NM@
-NMEDIT = @NMEDIT@
-NUNIT_CFLAGS = @NUNIT_CFLAGS@
-NUNIT_DEFINES = @NUNIT_DEFINES@
-NUNIT_LIBS = @NUNIT_LIBS@
-OBJC = @OBJC@
-OBJDUMP = @OBJDUMP@
-OBJEXT = @OBJEXT@
-OMF_DIR = @OMF_DIR@
-OTOOL = @OTOOL@
-OTOOL64 = @OTOOL64@
-PACKAGE = @PACKAGE@
-PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
-PACKAGE_NAME = @PACKAGE_NAME@
-PACKAGE_STRING = @PACKAGE_STRING@
-PACKAGE_TARNAME = @PACKAGE_TARNAME@
-PACKAGE_URL = @PACKAGE_URL@
-PACKAGE_VERSION = @PACKAGE_VERSION@
-PATH_SEPARATOR = @PATH_SEPARATOR@
-PKG_CONFIG = @PKG_CONFIG@
-POFILES = @POFILES@
-POSUB = @POSUB@
-PO_IN_DATADIR_FALSE = @PO_IN_DATADIR_FALSE@
-PO_IN_DATADIR_TRUE = @PO_IN_DATADIR_TRUE@
-Q = @Q@
-RANLIB = @RANLIB@
-SED = @SED@
-SET_MAKE = @SET_MAKE@
-SHELL = @SHELL@
-STRIP = @STRIP@
-TURTLEDIR = @TURTLEDIR@
-UNIQUE_CFLAGS = @UNIQUE_CFLAGS@
-UNIQUE_LIBS = @UNIQUE_LIBS@
-USE_NLS = @USE_NLS@
-V = @V@
-VERSION = @VERSION@
-WARN_CFLAGS = @WARN_CFLAGS@
-XGETTEXT = @XGETTEXT@
-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_DUMPBIN = @ac_ct_DUMPBIN@
-am__include = @am__include@
-am__leading_dot = @am__leading_dot@
-am__quote = @am__quote@
-am__tar = @am__tar@
-am__untar = @am__untar@
-bindir = @bindir@
-build = @build@
-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@
-expanded_bindir = @expanded_bindir@
-expanded_datadir = @expanded_datadir@
-expanded_libdir = @expanded_libdir@
-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@
-lt_ECHO = @lt_ECHO@
-mandir = @mandir@
-mkdir_p = @mkdir_p@
-oldincludedir = @oldincludedir@
-pdfdir = @pdfdir@
-prefix = @prefix@
-program_transform_name = @program_transform_name@
-psdir = @psdir@
-sbindir = @sbindir@
-sharedstatedir = @sharedstatedir@
-shavedir = @shavedir@
-srcdir = @srcdir@
-sysconfdir = @sysconfdir@
-target_alias = @target_alias@
-top_build_prefix = @top_build_prefix@
-top_builddir = @top_builddir@
-top_srcdir = @top_srcdir@
-DIR_DOCS = $(top_builddir)/docs
-DIR_EXTENSIONS = $(top_builddir)/extensions
-DIR_GPHOTO2 = $(top_builddir)/lib/libgphoto2-sharp
-DIR_ICONS = $(top_builddir)/icons
-DIR_JPEGTRAN = $(top_builddir)/lib/libjpegtran
-DIR_KEYRING = $(top_builddir)/lib/gnome-keyring-sharp
-DIR_LIBFSPOT = $(top_builddir)/lib/libfspot
-DIR_SEMWEB = $(top_builddir)/lib/semweb
-DIR_SRC = $(top_builddir)/src
-DIR_GIOSHARP = $(top_builddir)/lib/gio-sharp/gio
-DIR_GTKSHARPBEANS = $(top_builddir)/lib/gtk-sharp-beans
-DIR_UNIQUESHARP = $(top_builddir)/lib/unique-sharp/unique
-LINK_KEYRING = -r:$(DIR_KEYRING)/gnome-keyring-sharp.dll
-LINK_GPHOTO2 = -r:$(DIR_GPHOTO2)/libgphoto2-sharp.dll
-LINK_SEMWEB = -r:$(DIR_SEMWEB)/SemWeb.dll
-LINK_GIOSHARP = -r:$(DIR_GIOSHARP)/gio-sharp.dll
-LINK_GTKSHARPBEANS = -r:$(DIR_GTKSHARPBEANS)/gtk-sharp-beans.dll
-LINK_UNIQUESHARP = -r:$(DIR_UNIQUESHARP)/unique-sharp.dll
-CSC_FLAGS = -debug
-CSC = $(MCS) $(CSC_FLAGS) -target:exe
-CSC_LIB = $(MCS) $(CSC_FLAGS) -target:library
-MONO_DEBUGFLAGS = --debug
-RUNTIME = mono $(MONO_DEBUGFLAGS)
-SOURCES = \
- $(srcdir)/IBrowsableItem.cs \
- $(srcdir)/ImageTest.cs \
- $(srcdir)/PhotoStore.cs \
- $(srcdir)/TagStore.cs \
- $(srcdir)/ThumbnailGenerator.cs \
- $(srcdir)/Query/LogicalTerm.cs \
- $(srcdir)/Cms/Cms.cs \
- $(srcdir)/Filters/JpegFilter.cs \
- $(srcdir)/Filters/OrientationFilter.cs
-
- at ENABLE_TESTS_TRUE@PKGS = \
- at ENABLE_TESTS_TRUE@ -pkg:mono-nunit \
- at ENABLE_TESTS_TRUE@ -pkg:gnome-vfs-sharp-2.0 \
- at ENABLE_TESTS_TRUE@ -pkg:gnome-sharp-2.0 \
- at ENABLE_TESTS_TRUE@ -pkg:gtk-sharp-2.0
-
- at ENABLE_TESTS_TRUE@REFS = \
- at ENABLE_TESTS_TRUE@ $(LINK_GPHOTO2) \
- at ENABLE_TESTS_TRUE@ $(LINK_GIOSHARP) \
- at ENABLE_TESTS_TRUE@ $(LINK_UNIQUESHARP) \
- at ENABLE_TESTS_TRUE@ -r:$(top_builddir)/src/f-spot.exe \
- at ENABLE_TESTS_TRUE@ -r:$(top_builddir)/src/FSpot.Core.dll \
- at ENABLE_TESTS_TRUE@ -r:$(top_builddir)/src/FSpot.Query.dll \
- at ENABLE_TESTS_TRUE@ -r:$(top_builddir)/src/FSpot.Utils.dll \
- at ENABLE_TESTS_TRUE@ -r:$(top_builddir)/src/FSpot.Platform.dll \
- at ENABLE_TESTS_TRUE@ -r:$(top_builddir)/src/Cms.dll \
- at ENABLE_TESTS_TRUE@ -r:$(top_builddir)/lib/semweb/SemWeb.dll
-
- at ENABLE_TESTS_TRUE@RESOURCES = \
- at ENABLE_TESTS_TRUE@ -resource:$(top_srcdir)/icons/f-spot-32.png,f-spot-32.png
-
- at ENABLE_TESTS_TRUE@TEST_ASSEMBLIES = \
- at ENABLE_TESTS_TRUE@ FSpot.Tests.dll
-
- at ENABLE_TESTS_TRUE@MCSFLAGS = -t:library -d:ENABLE_NUNIT
- at ENABLE_TESTS_TRUE@CLEANFILES = \
- at ENABLE_TESTS_TRUE@ FSpot.Tests.dll.mdb \
- at ENABLE_TESTS_TRUE@ FSpot.Tests.dll \
- at ENABLE_TESTS_TRUE@ PhotoTestStore.db \
- at ENABLE_TESTS_TRUE@ TagTestStore.db \
- at ENABLE_TESTS_TRUE@ TestResult.xml
-
-MAINTAINERCLEANFILES = \
- Makefile.in
-
-EXTRA_DIST = \
- $(SOURCES)
-
-all: all-am
-
-.SUFFIXES:
-$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(top_srcdir)/Makefile.include $(am__configure_deps)
- @for dep in $?; do \
- case '$(am__configure_deps)' in \
- *$$dep*) \
- ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \
- && { if test -f $@; then exit 0; else break; fi; }; \
- exit 1;; \
- esac; \
- done; \
- echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign tests/src/Makefile'; \
- $(am__cd) $(top_srcdir) && \
- $(AUTOMAKE) --foreign tests/src/Makefile
-.PRECIOUS: Makefile
-Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
- @case '$?' in \
- *config.status*) \
- cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \
- *) \
- echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \
- cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \
- esac;
-
-$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
- cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
-
-$(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps)
- cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
-$(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps)
- cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
-$(am__aclocal_m4_deps):
-
-mostlyclean-libtool:
- -rm -f *.lo
-
-clean-libtool:
- -rm -rf .libs _libs
-tags: TAGS
-TAGS:
-
-ctags: CTAGS
-CTAGS:
-
-
-distdir: $(DISTFILES)
- @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; \
- if test -d $$d/$$file; then \
- dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \
- if test -d "$(distdir)/$$file"; then \
- find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
- fi; \
- if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
- cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \
- find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
- fi; \
- cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \
- else \
- test -f "$(distdir)/$$file" \
- || cp -p $$d/$$file "$(distdir)/$$file" \
- || exit 1; \
- fi; \
- done
-check-am: all-am
-check: check-am
-all-am: Makefile
-installdirs:
-install: install-am
-install-exec: install-exec-am
-install-data: install-data-am
-uninstall: uninstall-am
-
-install-am: all-am
- @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
-
-installcheck: installcheck-am
-install-strip:
- $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
- install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
- `test -z '$(STRIP)' || \
- echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install
-mostlyclean-generic:
-
-clean-generic:
- -test -z "$(CLEANFILES)" || rm -f $(CLEANFILES)
-
-distclean-generic:
- -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
- -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES)
-
-maintainer-clean-generic:
- @echo "This command is intended for maintainers to use"
- @echo "it deletes files that may require special tools to rebuild."
- -test -z "$(MAINTAINERCLEANFILES)" || rm -f $(MAINTAINERCLEANFILES)
-clean: clean-am
-
-clean-am: clean-generic clean-libtool mostlyclean-am
-
-distclean: distclean-am
- -rm -f Makefile
-distclean-am: clean-am distclean-generic
-
-dvi: dvi-am
-
-dvi-am:
-
-html: html-am
-
-html-am:
-
-info: info-am
-
-info-am:
-
-install-data-am:
-
-install-dvi: install-dvi-am
-
-install-dvi-am:
-
-install-exec-am:
-
-install-html: install-html-am
-
-install-html-am:
-
-install-info: install-info-am
-
-install-info-am:
-
-install-man:
-
-install-pdf: install-pdf-am
-
-install-pdf-am:
-
-install-ps: install-ps-am
-
-install-ps-am:
-
-installcheck-am:
-
-maintainer-clean: maintainer-clean-am
- -rm -f Makefile
-maintainer-clean-am: distclean-am maintainer-clean-generic
-
-mostlyclean: mostlyclean-am
-
-mostlyclean-am: mostlyclean-generic mostlyclean-libtool
-
-pdf: pdf-am
-
-pdf-am:
-
-ps: ps-am
-
-ps-am:
-
-uninstall-am:
-
-.MAKE: install-am install-strip
-
-.PHONY: all all-am check check-am clean clean-generic clean-libtool \
- distclean distclean-generic distclean-libtool distdir dvi \
- dvi-am html html-am info info-am 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-generic \
- mostlyclean-libtool pdf pdf-am ps ps-am uninstall uninstall-am
-
-
- at ENABLE_TESTS_TRUE@all: FSpot.Tests.dll
-
- at ENABLE_TESTS_TRUE@FSpot.Tests.dll: $(SOURCES)
- at ENABLE_TESTS_TRUE@ gmcs $(MCSFLAGS) $(PKGS) $(REFS) $(SOURCES) $(RESOURCES) -out:FSpot.Tests.dll
-
- at ENABLE_TESTS_TRUE@test: FSpot.Tests.dll
- at ENABLE_TESTS_TRUE@ export MONO_PATH=$(top_srcdir)/src:$(top_srcdir)/lib/gio-sharp/gio/:$(top_srcdir)/lib/semweb:$(top_srcdir)/lib/gtk-sharp-beans; nunit-console -noshadow -nologo $(TEST_ASSEMBLIES)
-
-# 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.
-.NOEXPORT:
diff --git a/tests/src/PhotoStore.cs b/tests/src/PhotoStore.cs
deleted file mode 100644
index f60c87d..0000000
--- a/tests/src/PhotoStore.cs
+++ /dev/null
@@ -1,151 +0,0 @@
-#if ENABLE_NUNIT
-using FSpot.Utils;
-using NUnit.Framework;
-using System.Collections;
-using System.IO;
-using System;
-using Gdk;
-
-namespace FSpot.Tests
-{
- [TestFixture]
- public class PhotoStoreTests
- {
- Db db;
- const string path = "./PhotoStoreTest.db";
-
- string [] images = {
- "pano.jpg",
- };
-
- [SetUp]
- public void SetUp ()
- {
- Gtk.Application.Init ();
- try {
- File.Delete (path);
- } catch {}
-
- db = new Db ();
- db.Init (path, true);
-
- foreach (string image in images) {
- File.Copy ("../images/" + image, "./" + image, true);
- }
-
- }
-
- [TearDown]
- public void TearDown ()
- {
- db.Dispose ();
- foreach (string image in images)
- try {
- File.Delete ("./" + image);
- } catch {}
- }
-
-// static void Dump (Photo photo)
-// {
-// // Console.WriteLine ("\t[{0}] {1}", photo.Id, photo.Path);
-// Console.WriteLine ("\t{0}", photo.Time.ToLocalTime ());
-//
-// if (photo.Description != String.Empty)
-// Console.WriteLine ("\t{0}", photo.Description);
-// else
-// Console.WriteLine ("\t(no description)");
-//
-// Console.WriteLine ("\tTags:");
-//
-// if (photo.Tags.Count == 0) {
-// Console.WriteLine ("\t\t(no tags)");
-// } else {
-// foreach (Tag t in photo.Tags)
-// Console.WriteLine ("\t\t{0}", t.Name);
-// }
-//
-// Console.WriteLine ("\tVersions:");
-//
-// foreach (uint id in photo.VersionIds)
-// Console.WriteLine ("\t\t[{0}] {1}", id, photo.GetVersionName (id));
-// }
-
-// static void Dump (ArrayList photos)
-// {
-// foreach (Photo p in photos)
-// Dump (p);
-// }
-//
-// static void DumpAll (Db db)
-// {
-// Console.WriteLine ("\n*** All pictures");
-// Dump (db.Photos.Query (null));
-// }
-//
-// static void DumpForTags (Db db, ArrayList tags)
-// {
-// Console.Write ("\n*** Pictures for tags: ");
-// foreach (Tag t in tags)
-// Console.Write ("{0} ", t.Name);
-// Console.WriteLine ();
-//
-// Dump (db.Photos.Query (tags));
-// }
-
- [Test]
- public void PopulatendRetrieve ()
- {
- /*Tag portraits_tag = */db.Tags.CreateTag (null, "Portraits", false);
- Tag landscapes_tag = db.Tags.CreateTag (null, "Landscapes", false);
- Tag favorites_tag = db.Tags.CreateTag (null, "Street", false);
-
- //uint portraits_tag_id = portraits_tag.Id;
- //uint landscapes_tag_id = landscapes_tag.Id;
- //uint favorites_tag_id = favorites_tag.Id;
-
- Pixbuf unused_thumbnail;
-
- Photo ny_landscape = db.Photos.Create (UriUtils.PathToFileUri ("../images/pano.jpg"), 0, out unused_thumbnail);
- ny_landscape.Description = "Snowy landscape";
- ny_landscape.AddTag (landscapes_tag);
- ny_landscape.AddTag (favorites_tag);
- db.Photos.Commit (ny_landscape);
-
-// Photo me_in_sf = db.Photos.Create (DateTime.Now.ToUniversalTime (), 2, "/home/ettore/Photos/me_in_sf.jpg",
-// out unused_thumbnail);
-// me_in_sf.AddTag (landscapes_tag);
-// me_in_sf.AddTag (portraits_tag);
-// me_in_sf.AddTag (favorites_tag);
-// db.Photos.Commit (me_in_sf);
-//
-// me_in_sf.RemoveTag (favorites_tag);
-// me_in_sf.Description = "Myself and the SF skyline";
-// me_in_sf.CreateVersion ("cropped", Photo.OriginalVersionId);
-// me_in_sf.CreateVersion ("UM-ed", Photo.OriginalVersionId);
-// db.Photos.Commit (me_in_sf);
-//
-// Photo macro_shot = db.Photos.Create (DateTime.Now.ToUniversalTime (), 2, "/home/ettore/Photos/macro_shot.jpg",
-// out unused_thumbnail);
- db.Dispose ();
-
- db.Init (path, false);
-
-// DumpAll (db);
-//
-// portraits_tag = db.Tags.Get (portraits_tag_id) as Tag;
-// landscapes_tag = db.Tags.Get (landscapes_tag_id) as Tag;
-// favorites_tag = db.Tags.Get (favorites_tag_id) as Tag;
-//
-// ArrayList query_tags = new ArrayList ();
-// query_tags.Add (portraits_tag);
-// query_tags.Add (landscapes_tag);
-// DumpForTags (db, query_tags);
-//
-// query_tags.Clear ();
-// query_tags.Add (favorites_tag);
-// DumpForTags (db, query_tags);
- }
- }
-}
-#endif
-
diff --git a/tests/src/Query/LogicalTerm.cs b/tests/src/Query/LogicalTerm.cs
deleted file mode 100644
index fd9898e..0000000
--- a/tests/src/Query/LogicalTerm.cs
+++ /dev/null
@@ -1,39 +0,0 @@
-#if ENABLE_NUNIT
-using NUnit.Framework;
-
-namespace FSpot.Query.Tests
-{
- [TestFixture]
- public class LogicalTermTests
- {
- [Test]
- public void SomeTests ()
- {
- Tag t1 = new Tag (null, 1, "tag1");
- Tag t2 = new Tag (null, 2, "tag2");
- Tag t3 = new Tag (null, 3, "tag3");
- Tag t4 = new Tag (null, 4, "tag4");
- Tag t5 = new Tag (null, 5, "tag5");
-
- TagTerm tt1 = new TagTerm (t1);
- TagTerm tt2 = new TagTerm (t2);
- TagTerm tt3 = new TagTerm (t3);
- TagTerm tt4 = new TagTerm (t4);
- TagTerm tt5 = new TagTerm (t5);
-
- object [] tests = {
- " (photos.id IN (SELECT photo_id FROM photo_tags WHERE tag_id = 1)) ", tt1,
- " (photos.id IN (SELECT photo_id FROM photo_tags WHERE tag_id IN (2, 3))) ", new OrTerm (tt2, tt3),
- " (photos.id IN (SELECT photo_id FROM photo_tags WHERE tag_id IN (3, 4, 5))) ", new OrTerm (tt3, tt4, tt5),
-
- };
-
- for (int i=0; i < tests.Length; i+=2) {
- //System.Console.WriteLine ((tests[i+1] as LogicalTerm).SqlClause ());
- //System.Console.WriteLine (tests[i]);
- Assert.AreEqual (tests[i] as string, (tests[i+1] as LogicalTerm).SqlClause ());
- }
- }
- }
-}
-#endif
diff --git a/tests/src/TagStore.cs b/tests/src/TagStore.cs
deleted file mode 100644
index 18c53d1..0000000
--- a/tests/src/TagStore.cs
+++ /dev/null
@@ -1,81 +0,0 @@
-using NUnit.Framework;
-using System;
-using System.IO;
-using System.Collections.Generic;
-
-namespace FSpot.Tests
-{
- [TestFixture]
- public class TagStoreTests
- {
- Db db;
- const string path = "./TagStoreTest.db";
-
- [SetUp]
- public void SetUp ()
- {
- Gtk.Application.Init ();
- try {
- File.Delete (path);
- } catch {}
-
- db = new Db ();
- db.Init (path, true);
- }
-
- [TearDown]
- public void TearDown ()
- {
- db.Dispose ();
- }
-
- [Test]
- public void InsertCloseAndCheck ()
- {
- Category people_category = db.Tags.GetTagByName ("People") as Category;
- db.Tags.CreateTag (people_category, "Anna", true);
- db.Tags.CreateTag (people_category, "Ettore", true);
- Tag miggy_tag = db.Tags.CreateTag (people_category, "Miggy", true);
- miggy_tag.SortPriority = -1;
- db.Tags.Commit (miggy_tag);
-
- Category places_category = db.Tags.GetTagByName ("Places") as Category;
- db.Tags.CreateTag (places_category, "Milan", true);
- db.Tags.CreateTag (places_category, "Boston", true);
-
- Category exotic_category = db.Tags.CreateCategory (places_category, "Exotic", true);
- db.Tags.CreateTag (exotic_category, "Bengalore", true);
- db.Tags.CreateTag (exotic_category, "Manila", true);
- Tag tokyo_tag = db.Tags.CreateTag (exotic_category, "Tokyo", true);
-
- tokyo_tag.Category = places_category;
- tokyo_tag.Name = "Paris";
- db.Tags.Commit (tokyo_tag);
-
- db.Dispose ();
-
- db.Init (path, false);
- Category cat = db.Tags.GetTagByName ("People") as Category;
- Assert.AreEqual ("People", cat.Name);
- List<Tag> list = new List<Tag> (cat.Children);
- Assert.IsTrue (list.Contains (db.Tags.GetTagByName ("Anna")));
- Assert.IsTrue (list.Contains (db.Tags.GetTagByName ("Ettore")));
- Assert.IsTrue (list.Contains (db.Tags.GetTagByName ("Miggy")));
-
- cat = db.Tags.GetTagByName ("Places") as Category;
- Assert.AreEqual ("Places", cat.Name);
- list = new List<Tag> (cat.Children);
- Assert.IsTrue (list.Contains (db.Tags.GetTagByName ("Milan")));
- Assert.IsTrue (list.Contains (db.Tags.GetTagByName ("Boston")));
- Assert.IsTrue (list.Contains (db.Tags.GetTagByName ("Exotic")));
- Assert.IsTrue (db.Tags.GetTagByName ("Exotic") is Category);
-
- cat = db.Tags.GetTagByName ("Exotic") as Category;
- Assert.AreEqual ("Exotic", cat.Name);
- list = new List<Tag> (cat.Children);
- Assert.IsTrue (list.Contains (db.Tags.GetTagByName ("Bengalore")));
- Assert.IsTrue (list.Contains (db.Tags.GetTagByName ("Manila")));
- }
-
- }
-}
diff --git a/tests/src/ThumbnailGenerator.cs b/tests/src/ThumbnailGenerator.cs
deleted file mode 100644
index f52a623..0000000
--- a/tests/src/ThumbnailGenerator.cs
+++ /dev/null
@@ -1,130 +0,0 @@
-#if ENABLE_NUNIT
-using NUnit.Framework;
-using System;
-using System.IO;
-
-using FSpot.Utils;
-using FSpot.Platform;
-
-namespace FSpot.Tests
-{
- [TestFixture]
- public class ThumbnailGeneratorTests {
- string [] Names = new string [] {
- "\x00a9F-SpotUnit\x00b5Test.png",
- "img(\x00a9F-SpotUnit\x00b5Test).png",
- "img\u00ff.png",
- "img\u0100.png",
- "imgο.png",
- "img(ο).png",
- "img(τροποποιημένο).png",
- };
-
- public ThumbnailGeneratorTests ()
- {
- Gnome.Vfs.Vfs.Initialize ();
- }
-
- public string CreateFile (string name, int size)
- {
- using (Gdk.Pixbuf test = new Gdk.Pixbuf (null, "f-spot-32.png")) {
- using (Gdk.Pixbuf tmp = test.ScaleSimple (size, size, Gdk.InterpType.Nearest)) {
- string path = System.IO.Path.GetTempPath ();
- path = System.IO.Path.Combine (path, name);
- tmp.Save (path, Path.GetExtension (path).TrimStart (new char [] { '.' }));
- return path;
- }
- }
- }
-
- [Test]
- public void BadNames ()
- {
- foreach (string name in Names) {
- BadNames (name);
- }
- }
-
- public void BadNames (string name)
- {
- string path = CreateFile (name, 512);
- System.Uri uri = UriUtils.PathToFileUri (path);
-
- Gnome.ThumbnailFactory factory = new Gnome.ThumbnailFactory (Gnome.ThumbnailSize.Large);
- string escaped = UriUtils.PathToFileUriEscaped (path);
- string large_path = Gnome.Thumbnail.PathForUri (escaped,
- Gnome.ThumbnailSize.Large);
-
- using (Gdk.Pixbuf pixbuf = new Gdk.Pixbuf (uri.LocalPath)) {
- factory.SaveThumbnail (pixbuf, escaped, System.DateTime.Now);
-
- Assert.IsTrue (File.Exists (large_path), String.Format ("Missing: {0} created from {1} as {2}", large_path, path, escaped));
- Gdk.Pixbuf thumb = new Gdk.Pixbuf (large_path);
- Assert.IsNotNull (thumb);
- }
-
- File.Delete (path);
- File.Delete (large_path);
- }
-
- [Test]
- public void StringNames ()
- {
- foreach (string name in Names) {
- StringNames (name);
- }
- }
-
- public void StringNames (string name)
- {
- string path = CreateFile (name, 1024);
- Uri fileuri = UriUtils.PathToFileUri (path);
- //string thumb_path = ThumbnailFactory.PathForUri.ThumbnailPath (UriUtils.PathToFileUri(path));
-
-
- using (Gdk.Pixbuf thumb = ThumbnailGenerator.Create (fileuri)) {
- Assert.IsTrue (ThumbnailFactory.ThumbnailExists (fileuri), String.Format ("Missing: thumbnail created from {0}", fileuri));
- Assert.IsNotNull (thumb);
- Assert.AreEqual (thumb.GetOption (ThumbnailGenerator.ThumbUri), UriUtils.PathToFileUriEscaped (path));
- Assert.AreEqual (new Uri (thumb.GetOption (ThumbnailGenerator.ThumbUri)), fileuri);
- Assert.IsTrue (ThumbnailFactory.ThumbnailIsValid (thumb, fileuri));
- }
-
- ThumbnailFactory.DeleteThumbnail (fileuri);
- File.Delete (path);
- }
-
- [Test]
- public void UriNames ()
- {
- foreach (string name in Names) {
- UriNames (name);
- }
- }
-
- public void UriNames (string name)
- {
- string path = CreateFile (name, 768);
- Uri uri = new Uri (Gnome.Vfs.Uri.GetUriFromLocalPath (path));
-
-// string string_path = ThumbnailGenerator.ThumbnailPath (path);
-// string thumb_path = ThumbnailGenerator.ThumbnailPath (uri);
-// Assert.AreEqual (thumb_path, string_path);
-
- ThumbnailGenerator.Create (uri);
-
- using (Gdk.Pixbuf thumb = ThumbnailGenerator.Create (uri)) {
- Assert.IsTrue (ThumbnailFactory.ThumbnailExists (uri));
- Assert.IsNotNull (thumb);
- Assert.AreEqual (thumb.GetOption (ThumbnailGenerator.ThumbUri), UriUtils.UriToStringEscaped (uri));
- Assert.AreEqual (new Uri (thumb.GetOption (ThumbnailGenerator.ThumbUri)), uri);
- Assert.IsTrue (ThumbnailFactory.ThumbnailIsValid (thumb, uri));
- }
-
- ThumbnailFactory.DeleteThumbnail (uri);
- File.Delete (path);
- }
- }
-}
-#endif
-
diff --git a/tools/Makefile.in b/tools/Makefile.in
index 65dbdbd..e7a3628 100644
--- a/tools/Makefile.in
+++ b/tools/Makefile.in
@@ -40,8 +40,14 @@ DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in
ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
am__aclocal_m4_deps = $(top_srcdir)/build/m4/shave/shave.m4 \
$(top_srcdir)/build/m4/shamrock/expansions.m4 \
+ $(top_srcdir)/build/m4/shamrock/gnome-doc.m4 \
$(top_srcdir)/build/m4/shamrock/mono.m4 \
+ $(top_srcdir)/build/m4/shamrock/nunit.m4 \
$(top_srcdir)/build/m4/shamrock/programs.m4 \
+ $(top_srcdir)/build/m4/f-spot/flickrnet.m4 \
+ $(top_srcdir)/build/m4/f-spot/gnome-keyring-sharp.m4 \
+ $(top_srcdir)/build/m4/f-spot/gtk-sharp.m4 \
+ $(top_srcdir)/build/m4/f-spot/mono-addins.m4 \
$(top_srcdir)/acinclude.m4 $(top_srcdir)/configure.ac
am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
$(ACLOCAL_M4)
@@ -121,6 +127,8 @@ EXIF_SOVERSION = @EXIF_SOVERSION@
F77 = @F77@
FC = @FC@
FGREP = @FGREP@
+FLICKRNET_CFLAGS = @FLICKRNET_CFLAGS@
+FLICKRNET_LIBS = @FLICKRNET_LIBS@
F_CFLAGS = @F_CFLAGS@
F_LIBS = @F_LIBS@
GAPI2CODEGEN = @GAPI2CODEGEN@
@@ -134,6 +142,8 @@ GCONF_SHARP_LIBS = @GCONF_SHARP_LIBS@
GETTEXT_PACKAGE = @GETTEXT_PACKAGE@
GIO_CFLAGS = @GIO_CFLAGS@
GIO_LIBS = @GIO_LIBS@
+GLIBSHARP_2_12_7_CFLAGS = @GLIBSHARP_2_12_7_CFLAGS@
+GLIBSHARP_2_12_7_LIBS = @GLIBSHARP_2_12_7_LIBS@
GLIBSHARP_CFLAGS = @GLIBSHARP_CFLAGS@
GLIBSHARP_LIBS = @GLIBSHARP_LIBS@
GLIB_CFLAGS = @GLIB_CFLAGS@
@@ -149,6 +159,10 @@ GNOME_SHARP_CFLAGS = @GNOME_SHARP_CFLAGS@
GNOME_SHARP_LIBS = @GNOME_SHARP_LIBS@
GOBJECT_QUERY = @GOBJECT_QUERY@
GREP = @GREP@
+GTKSHARP_A11Y_CFLAGS = @GTKSHARP_A11Y_CFLAGS@
+GTKSHARP_A11Y_LIBS = @GTKSHARP_A11Y_LIBS@
+GTKSHARP_CFLAGS = @GTKSHARP_CFLAGS@
+GTKSHARP_LIBS = @GTKSHARP_LIBS@
HELP_DIR = @HELP_DIR@
ICONS_DIRECTORY = @ICONS_DIRECTORY@
INSTALL = @INSTALL@
@@ -162,14 +176,14 @@ INTLTOOL_EXTRACT = @INTLTOOL_EXTRACT@
INTLTOOL_MERGE = @INTLTOOL_MERGE@
INTLTOOL_PERL = @INTLTOOL_PERL@
INTLTOOL_UPDATE = @INTLTOOL_UPDATE@
+KEYRINGSHARP_CFLAGS = @KEYRINGSHARP_CFLAGS@
+KEYRINGSHARP_LIBS = @KEYRINGSHARP_LIBS@
LCMS_CFLAGS = @LCMS_CFLAGS@
LCMS_LIBS = @LCMS_LIBS@
LD = @LD@
LDFLAGS = @LDFLAGS@
LIBEXIF_VERSION_CHECK_CFLAGS = @LIBEXIF_VERSION_CHECK_CFLAGS@
LIBEXIF_VERSION_CHECK_LIBS = @LIBEXIF_VERSION_CHECK_LIBS@
-LIBGPHOTO2_CFLAGS = @LIBGPHOTO2_CFLAGS@
-LIBGPHOTO2_LIBS = @LIBGPHOTO2_LIBS@
LIBJPEG = @LIBJPEG@
LIBOBJS = @LIBOBJS@
LIBS = @LIBS@
@@ -184,6 +198,12 @@ MCS = @MCS@
MKDIR_P = @MKDIR_P@
MKINSTALLDIRS = @MKINSTALLDIRS@
MONO = @MONO@
+MONO_ADDINS_CFLAGS = @MONO_ADDINS_CFLAGS@
+MONO_ADDINS_GUI_CFLAGS = @MONO_ADDINS_GUI_CFLAGS@
+MONO_ADDINS_GUI_LIBS = @MONO_ADDINS_GUI_LIBS@
+MONO_ADDINS_LIBS = @MONO_ADDINS_LIBS@
+MONO_ADDINS_SETUP_CFLAGS = @MONO_ADDINS_SETUP_CFLAGS@
+MONO_ADDINS_SETUP_LIBS = @MONO_ADDINS_SETUP_LIBS@
MONO_MODULE_CFLAGS = @MONO_MODULE_CFLAGS@
MONO_MODULE_LIBS = @MONO_MODULE_LIBS@
MSGFMT = @MSGFMT@
@@ -194,7 +214,6 @@ NDESK_DBUS_LIBS = @NDESK_DBUS_LIBS@
NM = @NM@
NMEDIT = @NMEDIT@
NUNIT_CFLAGS = @NUNIT_CFLAGS@
-NUNIT_DEFINES = @NUNIT_DEFINES@
NUNIT_LIBS = @NUNIT_LIBS@
OBJC = @OBJC@
OBJDUMP = @OBJDUMP@
--
f-spot
More information about the Pkg-cli-apps-commits
mailing list